<?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>141174</bug_id>
          
          <creation_ts>2015-02-02 14:36:54 -0800</creation_ts>
          <short_desc>Heap variables shouldn&apos;t end up in the stack frame</short_desc>
          <delta_ts>2015-04-20 14:36:02 -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>136869</dependson>
    
    <dependson>141171</dependson>
    
    <dependson>141211</dependson>
    
    <dependson>141332</dependson>
    
    <dependson>141624</dependson>
    
    <dependson>141851</dependson>
    
    <dependson>141881</dependson>
    
    <dependson>141915</dependson>
    
    <dependson>141930</dependson>
    
    <dependson>141951</dependson>
    
    <dependson>142036</dependson>
    
    <dependson>142056</dependson>
    
    <dependson>142064</dependson>
    
    <dependson>142071</dependson>
    
    <dependson>142153</dependson>
    
    <dependson>142182</dependson>
    
    <dependson>142187</dependson>
    
    <dependson>142197</dependson>
    
    <dependson>142206</dependson>
    
    <dependson>142229</dependson>
    
    <dependson>142304</dependson>
    
    <dependson>142647</dependson>
    
    <dependson>142686</dependson>
    
    <dependson>142769</dependson>
    
    <dependson>142920</dependson>
    
    <dependson>142948</dependson>
    
    <dependson>143087</dependson>
    
    <dependson>143089</dependson>
    
    <dependson>143098</dependson>
    
    <dependson>143261</dependson>
          <blocked>142207</blocked>
    
    <blocked>143071</blocked>
    
    <blocked>143072</blocked>
    
    <blocked>143074</blocked>
    
    <blocked>143075</blocked>
    
    <blocked>143076</blocked>
    
    <blocked>143077</blocked>
    
    <blocked>38409</blocked>
    
    <blocked>141885</blocked>
    
    <blocked>142944</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>buildbot</cc>
    
    <cc>clopez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ggaren</cc>
    
    <cc>joepeck</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenb</cc>
    
    <cc>mmirman</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>ossy</cc>
    
    <cc>peavo</cc>
    
    <cc>rniwa</cc>
    
    <cc>saam</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1066232</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-02-02 14:36:54 -0800</bug_when>
    <thetext>I&apos;m going to introduce a new term: &quot;heap variable&quot;.  This is a variable that is anywhere but on the stack (i.e. local).  It may be global or it may be captured.  Hence the hierarchy of variables is:

Variable:
    Local Variable: it&apos;s on the stack according to bytecode
    Heap Variable: it&apos;s not a Local Variable
        Captured Variable: it&apos;s in some function&apos;s activation, may be my own activation
        Global Variable: it&apos;s in some global object

We currently use VirtualRegister to effectively track heap variables because of some history.  The use of the VirtualRegister class for this purpose makes it difficult to then remove the hole we have in the stack that corresponds to local variables that got captured.  Once we ensure that VirtualRegister is no longer used for heap variables, we&apos;ll be able to remove the hole.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1066564</commentid>
    <comment_count>1</comment_count>
      <attachid>245967</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-02-03 14:16:45 -0800</bug_when>
    <thetext>Created attachment 245967
it begins!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1067389</commentid>
    <comment_count>2</comment_count>
      <attachid>245967</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-02-06 12:16:58 -0800</bug_when>
    <thetext>Comment on attachment 245967
it begins!

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

I really like this patch. It makes some stuff that confused me when I first got started hacking on JSC more intuitive.

&gt; Source/JavaScriptCore/runtime/SymbolTable.cpp:140
&gt; +SymbolTable* SymbolTable::cloneIgnoringStack(VM&amp; vm)

I kind of like the function name: &quot;cloneHeapNames&quot; or &quot;cloneHeapVariables&quot;, cloneIgnoringStack confused me at first. But that&apos;s just my style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1070329</commentid>
    <comment_count>3</comment_count>
      <attachid>246875</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-02-18 20:44:57 -0800</bug_when>
    <thetext>Created attachment 246875
WRONG PATCH</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1070330</commentid>
    <comment_count>4</comment_count>
      <attachid>246876</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-02-18 20:45:48 -0800</bug_when>
    <thetext>Created attachment 246876
moar</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1070449</commentid>
    <comment_count>5</comment_count>
      <attachid>246898</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-02-19 11:00:47 -0800</bug_when>
    <thetext>Created attachment 246898
more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1070717</commentid>
    <comment_count>6</comment_count>
      <attachid>246976</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-02-20 10:25:09 -0800</bug_when>
    <thetext>Created attachment 246976
a bit more

I believe that the next step is to remove the JSLexicalEnvironment::m_registers field.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1070858</commentid>
    <comment_count>7</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-02-20 16:12:07 -0800</bug_when>
    <thetext>*** Bug 141850 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1070860</commentid>
    <comment_count>8</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-02-20 16:17:02 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; Created attachment 246976 [details]
&gt; a bit more
&gt; 
&gt; I believe that the next step is to remove the
&gt; JSLexicalEnvironment::m_registers field.

It is, but it has to happen as part of this patch.  m_registers currently serves the perverse purpose of allowing VirtualRegister to be used as a scope offset.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1071383</commentid>
    <comment_count>9</comment_count>
      <attachid>247155</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-02-23 15:53:59 -0800</bug_when>
    <thetext>Created attachment 247155
more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1071518</commentid>
    <comment_count>10</comment_count>
      <attachid>247195</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-02-23 20:37:13 -0800</bug_when>
    <thetext>Created attachment 247195
more

Taking a pause while I explore what defineOwnProperty is really supposed to do for arguments.  I&apos;m pretty sure that what we&apos;re doing now is technically right but unnecessarily roundabout.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1071704</commentid>
    <comment_count>11</comment_count>
      <attachid>247241</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-02-24 10:22:46 -0800</bug_when>
    <thetext>Created attachment 247241
more

Arguments objects C++ code is done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1071747</commentid>
    <comment_count>12</comment_count>
      <attachid>247253</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-02-24 12:39:20 -0800</bug_when>
    <thetext>Created attachment 247253
more jit stuff

Slowly pushing the new Arguments types through the JITs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1072471</commentid>
    <comment_count>13</comment_count>
      <attachid>247442</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-02-26 13:26:50 -0800</bug_when>
    <thetext>Created attachment 247442
dragging arguments code through the JITs</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1072559</commentid>
    <comment_count>14</comment_count>
      <attachid>247468</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-02-26 16:57:02 -0800</bug_when>
    <thetext>Created attachment 247468
starting to tool around in bytecodegenerator</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1072619</commentid>
    <comment_count>15</comment_count>
      <attachid>247488</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-02-26 20:19:32 -0800</bug_when>
    <thetext>Created attachment 247488
a little more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1072702</commentid>
    <comment_count>16</comment_count>
      <attachid>247515</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-02-27 08:25:18 -0800</bug_when>
    <thetext>Created attachment 247515
doing real damage to bytecode generator</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1072792</commentid>
    <comment_count>17</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-02-27 13:14:59 -0800</bug_when>
    <thetext>I just realized that my ScopedArguments object needs room for overflow arguments - those arguments that were not in the formal parameter list.  Shouldn&apos;t be a hard change, just more code.

But other than that, the BytecodeGenerator stuff is materializing nicely.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1072793</commentid>
    <comment_count>18</comment_count>
      <attachid>247539</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-02-27 13:15:42 -0800</bug_when>
    <thetext>Created attachment 247539
a bit more

The bytecode generator changes are coming along nicely, but I&apos;ll have to shift focus a bit and give ScopedArguments the guts it needs for dealing with overflow arguments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1073140</commentid>
    <comment_count>19</comment_count>
      <attachid>247623</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-02-28 20:10:00 -0800</bug_when>
    <thetext>Created attachment 247623
getting closer to figuring out the whole arguments thing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1073186</commentid>
    <comment_count>20</comment_count>
      <attachid>247636</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-01 12:46:59 -0800</bug_when>
    <thetext>Created attachment 247636
just a little bit more

I think I&apos;ve figured out how to initialize variables in the bytecode generator.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1073216</commentid>
    <comment_count>21</comment_count>
      <attachid>247643</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-01 16:44:37 -0800</bug_when>
    <thetext>Created attachment 247643
bytecode generation initialization is done

Now I just have to:

- change NodesCodegen to use BytecodeGenerator::variable() instead of BytecodeGenerator::local()

- finish changing all of the execution engines to handle the new arguments- and activation-related operations.

- redo ArgumentsSimplificationPhase</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1073246</commentid>
    <comment_count>22</comment_count>
      <attachid>247650</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-01 18:38:58 -0800</bug_when>
    <thetext>Created attachment 247650
let the carnage begin!

In preparation for adding all of the new stuff, I&apos;m starting to remove the captured variable cruft.  There is no longer such a thing!  After bytecode is generated, all &quot;captured&quot; variables are just heap accesses, as they should be.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1073251</commentid>
    <comment_count>23</comment_count>
      <attachid>247651</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-01 20:35:50 -0800</bug_when>
    <thetext>Created attachment 247651
NodesCodegen is done?

I think that the entire bytecompiler is done now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1073253</commentid>
    <comment_count>24</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-01 20:41:20 -0800</bug_when>
    <thetext>*** Bug 130115 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1073254</commentid>
    <comment_count>25</comment_count>
      <attachid>247652</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-01 20:48:35 -0800</bug_when>
    <thetext>Created attachment 247652
change all the files!

More captured removal</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1073418</commentid>
    <comment_count>26</comment_count>
      <attachid>247693</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-02 12:41:26 -0800</bug_when>
    <thetext>Created attachment 247693
moar!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1073533</commentid>
    <comment_count>27</comment_count>
      <attachid>247723</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-02 17:05:45 -0800</bug_when>
    <thetext>Created attachment 247723
starting to get the DFG backend up to speed</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1073591</commentid>
    <comment_count>28</comment_count>
      <attachid>247740</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-02 19:45:00 -0800</bug_when>
    <thetext>Created attachment 247740
a bit more

Starting to work on the inlined CreateDirectArguments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1073735</commentid>
    <comment_count>29</comment_count>
      <attachid>247775</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-03 11:51:21 -0800</bug_when>
    <thetext>Created attachment 247775
DFG arguments lowering is done

64-bit only for now</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1073992</commentid>
    <comment_count>30</comment_count>
      <attachid>247842</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-03 22:57:11 -0800</bug_when>
    <thetext>Created attachment 247842
rebased</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1074403</commentid>
    <comment_count>31</comment_count>
      <attachid>247931</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-04 22:20:57 -0800</bug_when>
    <thetext>Created attachment 247931
FTL is coming along</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1074639</commentid>
    <comment_count>32</comment_count>
      <attachid>247981</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-05 12:40:52 -0800</bug_when>
    <thetext>Created attachment 247981
the bulk of functionality is done, just cleaning up now

Of course this doesn&apos;t include 32-bit or the the new arguments simplification.  The things left are to get this to the point where it compiles and where varargs calls aren&apos;t totally messed up.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1074678</commentid>
    <comment_count>33</comment_count>
      <attachid>247996</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-05 13:50:52 -0800</bug_when>
    <thetext>Created attachment 247996
carnage!

Destroying old code that won&apos;t be needed and won&apos;t compile.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1074689</commentid>
    <comment_count>34</comment_count>
      <attachid>248002</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-05 14:31:19 -0800</bug_when>
    <thetext>Created attachment 248002
so close!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1075193</commentid>
    <comment_count>35</comment_count>
      <attachid>248126</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-06 18:02:25 -0800</bug_when>
    <thetext>Created attachment 248126
starting to compile</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1075214</commentid>
    <comment_count>36</comment_count>
      <attachid>248135</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-06 20:07:01 -0800</bug_when>
    <thetext>Created attachment 248135
fewer compiler errors</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1075261</commentid>
    <comment_count>37</comment_count>
      <attachid>248153</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-07 08:43:48 -0800</bug_when>
    <thetext>Created attachment 248153
wrote some more stuff

Turns out I forgot to write some stuff before.

This patch is going to be epic.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1075290</commentid>
    <comment_count>38</comment_count>
      <attachid>248165</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-07 11:52:27 -0800</bug_when>
    <thetext>Created attachment 248165
more fixes to get it to compile</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1075315</commentid>
    <comment_count>39</comment_count>
      <attachid>248169</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-07 17:20:16 -0800</bug_when>
    <thetext>Created attachment 248169
more fixes for compiling</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1075332</commentid>
    <comment_count>40</comment_count>
      <attachid>248174</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-07 19:55:34 -0800</bug_when>
    <thetext>Created attachment 248174
OMG it compiles!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1075533</commentid>
    <comment_count>41</comment_count>
      <attachid>248231</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-08 23:17:07 -0700</bug_when>
    <thetext>Created attachment 248231
it runs simple programs

I&apos;ll start running the real tests soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1075534</commentid>
    <comment_count>42</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-08 23:19:12 -0700</bug_when>
    <thetext>Ossy: this doesn&apos;t look like it will involve platform-specifics, at least not yet.  But there is still another 100k worth of code to write...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1075573</commentid>
    <comment_count>43</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2015-03-09 04:27:07 -0700</bug_when>
    <thetext>(In reply to comment #42)
&gt; Ossy: this doesn&apos;t look like it will involve platform-specifics, at least
&gt; not yet.  But there is still another 100k worth of code to write...

Thanks for the heads-up.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1075714</commentid>
    <comment_count>44</comment_count>
      <attachid>248269</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-09 12:27:23 -0700</bug_when>
    <thetext>Created attachment 248269
starting to pass tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1075815</commentid>
    <comment_count>45</comment_count>
      <attachid>248291</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-09 16:55:37 -0700</bug_when>
    <thetext>Created attachment 248291
passing lots of tests

Looks like there are still corner cases that are broken, but lots works!

I also still need to write tests specifically for the bizarre things that arise with OutOfBandArguments and DirectArguments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1076011</commentid>
    <comment_count>46</comment_count>
      <attachid>248341</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-10 11:46:41 -0700</bug_when>
    <thetext>Created attachment 248341
passing so many tests

I think that I&apos;m now down to some codegen goofs in FTL.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1076135</commentid>
    <comment_count>47</comment_count>
      <attachid>248371</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-10 17:19:32 -0700</bug_when>
    <thetext>Created attachment 248371
so pass, much test, wow</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1076175</commentid>
    <comment_count>48</comment_count>
      <attachid>248383</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-10 19:06:04 -0700</bug_when>
    <thetext>Created attachment 248383
latest</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1076204</commentid>
    <comment_count>49</comment_count>
      <attachid>248390</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-10 20:38:16 -0700</bug_when>
    <thetext>Created attachment 248390
so close to correct</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1076482</commentid>
    <comment_count>50</comment_count>
      <attachid>248461</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-11 15:59:04 -0700</bug_when>
    <thetext>Created attachment 248461
more correct than ever</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1076539</commentid>
    <comment_count>51</comment_count>
      <attachid>248480</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-11 20:08:40 -0700</bug_when>
    <thetext>Created attachment 248480
it might pass all tests

Next step: get it to perform.

After that: port to 32-bit.

I want to make sure that this performs before I write the 32-bit codegen, since my performance findings may change my mind about how I generate code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1076839</commentid>
    <comment_count>52</comment_count>
      <attachid>248564</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-12 20:40:22 -0700</bug_when>
    <thetext>Created attachment 248564
working on the new arguments elimination phase</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1076846</commentid>
    <comment_count>53</comment_count>
      <attachid>248568</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-12 22:05:00 -0700</bug_when>
    <thetext>Created attachment 248568
more

Arguments elimination phase now has all of the required analyses.  I need to think for a bit about whether I like how they&apos;re written.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1076985</commentid>
    <comment_count>54</comment_count>
      <attachid>248597</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-13 12:10:34 -0700</bug_when>
    <thetext>Created attachment 248597
arguments elimination is sort of written</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1077039</commentid>
    <comment_count>55</comment_count>
      <attachid>248610</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-13 15:20:42 -0700</bug_when>
    <thetext>Created attachment 248610
more arguments elimination</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1077069</commentid>
    <comment_count>56</comment_count>
      <attachid>248623</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-13 17:11:21 -0700</bug_when>
    <thetext>Created attachment 248623
closer to eliminating arguments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1077101</commentid>
    <comment_count>57</comment_count>
      <attachid>248634</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-13 19:19:57 -0700</bug_when>
    <thetext>Created attachment 248634
dealing with the OSR exit of arguments elimination</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1077110</commentid>
    <comment_count>58</comment_count>
      <attachid>248637</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-13 19:49:34 -0700</bug_when>
    <thetext>Created attachment 248637
rebased

Arguments elimination phase is written.  Haven&apos;t tried compiling it yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1077717</commentid>
    <comment_count>59</comment_count>
      <attachid>248791</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-16 20:09:22 -0700</bug_when>
    <thetext>Created attachment 248791
latest

Trying to get the new stuff to compile.  Turns out I need to make some more changes to promoted heap locations...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1077911</commentid>
    <comment_count>60</comment_count>
      <attachid>248853</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-17 10:53:22 -0700</bug_when>
    <thetext>Created attachment 248853
more things

Rebased and added the FTL implementation of ForwardVarargs.  Trying to get this thing to compile now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1077927</commentid>
    <comment_count>61</comment_count>
      <attachid>248858</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-17 12:14:40 -0700</bug_when>
    <thetext>Created attachment 248858
closer to compiling</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1077962</commentid>
    <comment_count>62</comment_count>
      <attachid>248868</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-17 13:58:16 -0700</bug_when>
    <thetext>Created attachment 248868
it compiles!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1078043</commentid>
    <comment_count>63</comment_count>
      <attachid>248887</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-17 17:20:45 -0700</bug_when>
    <thetext>Created attachment 248887
it eliminated some arguments!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1078102</commentid>
    <comment_count>64</comment_count>
      <attachid>248906</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-17 21:15:14 -0700</bug_when>
    <thetext>Created attachment 248906
it does all of the important things</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1078265</commentid>
    <comment_count>65</comment_count>
      <attachid>248948</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-18 11:52:09 -0700</bug_when>
    <thetext>Created attachment 248948
added more tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1078321</commentid>
    <comment_count>66</comment_count>
      <attachid>248971</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-18 15:09:32 -0700</bug_when>
    <thetext>Created attachment 248971
OSR exit looks solid

Wrote a bunch of tests for materializing arguments objects.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1078336</commentid>
    <comment_count>67</comment_count>
      <attachid>248978</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-18 15:52:21 -0700</bug_when>
    <thetext>Created attachment 248978
strict mode arguments elimination and materialization works</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1078529</commentid>
    <comment_count>68</comment_count>
      <attachid>249036</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-19 07:48:08 -0700</bug_when>
    <thetext>Created attachment 249036
passing all tests

on 64-bit only, of course.  haven&apos;t run perf tests yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1078532</commentid>
    <comment_count>69</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-19 08:05:14 -0700</bug_when>
    <thetext>(In reply to comment #68)
&gt; Created attachment 249036 [details]
&gt; passing all tests
&gt; 
&gt; on 64-bit only, of course.  haven&apos;t run perf tests yet.

It still crashes raytrace - but only running in the benchmark harness.  Gotta investigate what&apos;s up with that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1078538</commentid>
    <comment_count>70</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-19 08:51:04 -0700</bug_when>
    <thetext>(In reply to comment #69)
&gt; (In reply to comment #68)
&gt; &gt; Created attachment 249036 [details]
&gt; &gt; passing all tests
&gt; &gt; 
&gt; &gt; on 64-bit only, of course.  haven&apos;t run perf tests yet.
&gt; 
&gt; It still crashes raytrace - but only running in the benchmark harness. 
&gt; Gotta investigate what&apos;s up with that.

Looks like a GC bug, like a reference that isn&apos;t being marked or barriered. But when it does run, it&apos;s as fast as trunk!

OTOH, box2d is still regressed, albeit less. I believe that benchmark will need some form of varargs forwarding (i.e. limited arguments elimination just for varargs) in the third-tier DFG.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1079013</commentid>
    <comment_count>71</comment_count>
      <attachid>249154</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-20 18:19:45 -0700</bug_when>
    <thetext>Created attachment 249154
rebased, still passing tests

I believe that http://trac.webkit.org/changeset/181817 fixed the raytrace bug I was seeing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1079017</commentid>
    <comment_count>72</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-20 18:58:06 -0700</bug_when>
    <thetext>We&apos;re at performance parity except for JSRegress.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1079022</commentid>
    <comment_count>73</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-20 19:31:08 -0700</bug_when>
    <thetext>Here are the numbers right now.  Note that I intend to fix the box2d regression before putting this up for review.


Benchmark report for SunSpider, LongSpider, V8Spider, Octane, Kraken, JSRegress, AsmBench, and CompressionBench on dethklok (MacBookPro9,1).

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/pizlo/secondary/OpenSource/WebKitBuild/Release/jsc (r181817)
&quot;VarOffset&quot; at /Volumes/Data/pizlo/primary/OpenSource/WebKitBuild/Release/jsc (r181817)

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                 VarOffset                                     
SunSpider:
   3d-cube                                            4.8810+-0.1003     ?      4.9412+-0.2189        ? might be 1.0123x slower
   3d-morph                                           5.9792+-0.6905            5.8613+-0.5301          might be 1.0201x faster
   3d-raytrace                                        6.4168+-0.1789            6.2884+-0.0709          might be 1.0204x faster
   access-binary-trees                                2.1102+-0.0864     ?      2.1418+-0.0905        ? might be 1.0150x slower
   access-fannkuch                                    6.2496+-0.2250            5.9958+-0.0395          might be 1.0423x faster
   access-nbody                                       2.8756+-0.0770     ?      2.9577+-0.0481        ? might be 1.0286x slower
   access-nsieve                                      3.4230+-0.0339     ^      3.1909+-0.1717        ^ definitely 1.0727x faster
   bitops-3bit-bits-in-byte                           1.5723+-0.0332     ?      1.6587+-0.1485        ? might be 1.0549x slower
   bitops-bits-in-byte                                3.5115+-0.0201     ^      3.3578+-0.0437        ^ definitely 1.0458x faster
   bitops-bitwise-and                                 2.2646+-0.1186     ?      2.2751+-0.4194        ?
   bitops-nsieve-bits                                 3.7195+-0.0653     ?      3.7829+-0.0269        ? might be 1.0170x slower
   controlflow-recursive                              2.1769+-0.0381            2.1263+-0.0295          might be 1.0238x faster
   crypto-aes                                         4.1481+-0.0565            4.1137+-0.1415        
   crypto-md5                                         2.4892+-0.0862            2.4578+-0.0611          might be 1.0128x faster
   crypto-sha1                                        2.6329+-0.1717     ?      2.6584+-0.1258        ?
   date-format-tofte                                  9.3994+-0.1059     ?      9.4074+-0.2280        ?
   date-format-xparb                                  5.4476+-0.1924     ?      5.6578+-0.5313        ? might be 1.0386x slower
   math-cordic                                        3.2232+-0.0863            3.1312+-0.0485          might be 1.0294x faster
   math-partial-sums                                  5.5891+-0.8351            5.2155+-0.0681          might be 1.0716x faster
   math-spectral-norm                                 1.9156+-0.0404     ?      1.9431+-0.0378        ? might be 1.0143x slower
   regexp-dna                                         8.5278+-1.6188            8.0537+-1.5675          might be 1.0589x faster
   string-base64                                      4.4894+-0.1216     ?      5.1257+-0.9666        ? might be 1.1417x slower
   string-fasta                                       6.4723+-0.0745     ?      6.7759+-0.6326        ? might be 1.0469x slower
   string-tagcloud                                    9.8012+-0.3706            9.7405+-0.2561        
   string-unpack-code                                19.9095+-1.0705     ?     20.1883+-1.1555        ? might be 1.0140x slower
   string-validate-input                              4.9509+-0.0970            4.9301+-0.1964        

   &lt;arithmetic&gt;                                       5.1606+-0.0346            5.1530+-0.0899          might be 1.0015x faster

                                                        TipOfTree                 VarOffset                                     
LongSpider:
   3d-cube                                         1096.3541+-8.9227     ?   1098.6296+-6.7645        ?
   3d-morph                                        1537.5260+-13.7502        1530.0449+-1.4554        
   3d-raytrace                                      740.4688+-13.8050         724.3087+-2.6800          might be 1.0223x faster
   access-binary-trees                              997.0497+-8.0571          984.6986+-6.3847          might be 1.0125x faster
   access-fannkuch                                  334.3393+-8.7815     ?    349.1175+-16.2045       ? might be 1.0442x slower
   access-nbody                                     613.7874+-4.0750     ?    615.0160+-4.0148        ?
   access-nsieve                                    876.3375+-8.6939          862.0601+-6.3177          might be 1.0166x faster
   bitops-3bit-bits-in-byte                          44.8642+-0.9665     ?     45.0625+-1.1606        ?
   bitops-bits-in-byte                              104.9997+-1.7882     ?    106.0337+-2.1904        ?
   bitops-nsieve-bits                               692.0291+-2.8074     ?    699.8492+-7.1299        ? might be 1.0113x slower
   controlflow-recursive                            498.1042+-2.4118          486.9194+-12.3577         might be 1.0230x faster
   crypto-aes                                       712.2198+-6.2998          707.3480+-9.8132        
   crypto-md5                                       555.1205+-9.9706          555.0508+-8.4426        
   crypto-sha1                                      602.9036+-5.4328          600.0266+-5.8228        
   date-format-tofte                                778.7516+-16.1397         756.9041+-10.9492         might be 1.0289x faster
   date-format-xparb                                755.8632+-23.7222         750.9738+-38.0241       
   math-cordic                                      592.1950+-2.2455          591.0228+-1.6436        
   math-partial-sums                                505.3678+-2.3743     ?    508.5627+-3.8367        ?
   math-spectral-norm                               567.3386+-2.1154     ?    568.4075+-3.7864        ?
   string-base64                                    369.2450+-6.3626          368.5506+-4.0007        
   string-fasta                                     422.3073+-7.2231          422.2526+-5.4314        
   string-tagcloud                                  214.7409+-1.1778     ?    216.4726+-0.9684        ?

   &lt;geometric&gt;                                      504.4244+-1.2149          503.4790+-2.3653          might be 1.0019x faster

                                                        TipOfTree                 VarOffset                                     
V8Spider:
   crypto                                            54.3034+-0.9718     ?     54.7987+-2.9712        ?
   deltablue                                         90.4797+-2.7793     ?     91.8638+-6.2109        ? might be 1.0153x slower
   earley-boyer                                      41.9058+-0.4456           41.6246+-1.0615        
   raytrace                                          37.7885+-2.5572     !     52.0101+-1.2691        ! definitely 1.3763x slower
   regexp                                            66.7170+-0.8178           66.5712+-1.7689        
   richards                                          80.1940+-4.3062           78.7520+-2.4506          might be 1.0183x faster
   splay                                             38.5278+-2.0155           37.5394+-1.8254          might be 1.0263x faster

   &lt;geometric&gt;                                       55.3812+-0.9574     !     57.7238+-0.6952        ! definitely 1.0423x slower

                                                        TipOfTree                 VarOffset                                     
Octane:
   encrypt                                           0.20400+-0.00349          0.20315+-0.00237       
   decrypt                                           3.59311+-0.03233    ?     3.65392+-0.05745       ? might be 1.0169x slower
   deltablue                                x2       0.21011+-0.00667          0.20560+-0.00128         might be 1.0220x faster
   earley                                            0.68576+-0.00833    ^     0.55247+-0.00715       ^ definitely 1.2413x faster
   boyer                                             5.72970+-0.02119          5.71701+-0.01403       
   navier-stokes                            x2       5.22755+-0.03801          5.20467+-0.01836       
   raytrace                                 x2       1.28091+-0.02078    !     1.38581+-0.03557       ! definitely 1.0819x slower
   richards                                 x2       0.12362+-0.00290          0.12232+-0.00097         might be 1.0107x faster
   splay                                    x2       0.38370+-0.00106    ^     0.38016+-0.00111       ^ definitely 1.0093x faster
   regexp                                   x2      33.34993+-0.35057    ?    33.49987+-0.18192       ?
   pdfjs                                    x2      45.03057+-0.40443         44.72524+-0.26780       
   mandreel                                 x2      50.16406+-0.08274    ?    50.21281+-0.11843       ?
   gbemu                                    x2      41.26040+-2.51154         40.45775+-2.20971         might be 1.0198x faster
   closure                                           0.57991+-0.00328    ^     0.57066+-0.00304       ^ definitely 1.0162x faster
   jquery                                            7.17960+-0.08376          7.09311+-0.04506         might be 1.0122x faster
   box2d                                    x2      12.65383+-0.10769    !    14.15050+-0.18570       ! definitely 1.1183x slower
   zlib                                     x2     395.38695+-3.58583    ^   387.02517+-1.85088       ^ definitely 1.0216x faster
   typescript                               x2     816.79867+-12.75235   !   835.92574+-6.31218       ! definitely 1.0234x slower

   &lt;geometric&gt;                                       6.77822+-0.04154    ?     6.78223+-0.01592       ? might be 1.0006x slower

                                                        TipOfTree                 VarOffset                                     
Kraken:
   ai-astar                                          267.548+-3.688      ^     260.889+-2.104         ^ definitely 1.0255x faster
   audio-beat-detection                              109.934+-0.623            109.520+-0.823         
   audio-dft                                         149.642+-1.690      ?     151.238+-1.388         ? might be 1.0107x slower
   audio-fft                                          84.468+-3.638      ?      86.517+-2.202         ? might be 1.0243x slower
   audio-oscillator                                  209.616+-1.591            207.890+-1.322         
   imaging-darkroom                                  105.074+-1.890            104.859+-1.541         
   imaging-desaturate                                 64.816+-2.619             63.147+-1.404           might be 1.0264x faster
   imaging-gaussian-blur                             114.085+-2.233      ?     115.209+-2.449         ?
   json-parse-financial                               45.959+-1.785             45.921+-1.586         
   json-stringify-tinderbox                           56.822+-1.917      ?      57.984+-2.564         ? might be 1.0205x slower
   stanford-crypto-aes                                59.941+-1.531      ?      60.118+-0.760         ?
   stanford-crypto-ccm                                51.511+-4.054             50.321+-0.879           might be 1.0237x faster
   stanford-crypto-pbkdf2                            167.802+-2.311      ?     169.250+-1.904         ?
   stanford-crypto-sha256-iterative                   55.323+-3.033             54.442+-1.267           might be 1.0162x faster

   &lt;arithmetic&gt;                                      110.181+-0.616            109.808+-0.484           might be 1.0034x faster

                                                        TipOfTree                 VarOffset                                     
JSRegress:
   abs-boolean                                        2.5946+-0.0308     ?      2.6352+-0.0358        ? might be 1.0156x slower
   adapt-to-double-divide                            16.9614+-0.8485           16.6886+-0.1406          might be 1.0163x faster
   aliased-arguments-getbyval                         0.8153+-0.0376     !      1.2177+-0.1017        ! definitely 1.4935x slower
   allocate-big-object                                2.6530+-0.1139            2.5887+-0.0573          might be 1.0248x faster
   arguments-named-and-reflective                     9.2794+-0.0808     !     13.0651+-1.1642        ! definitely 1.4080x slower
   arguments-out-of-bounds                           17.4600+-1.1310     ^     14.7124+-0.1312        ^ definitely 1.1868x faster
   arguments-strict-mode                              7.7709+-0.1667     !     12.1736+-1.0436        ! definitely 1.5666x slower
   arguments                                          8.1423+-0.5024     !     10.6184+-0.9747        ! definitely 1.3041x slower
   arity-mismatch-inlining                            0.8191+-0.0248            0.8155+-0.0239        
   array-access-polymorphic-structure                 6.6447+-0.1732     ?      6.9501+-0.8846        ? might be 1.0460x slower
   array-nonarray-polymorhpic-access                 34.6062+-2.6651     ?     35.8829+-1.9388        ? might be 1.0369x slower
   array-prototype-every                             88.4747+-2.5943     ?     88.8912+-1.9960        ?
   array-prototype-forEach                           84.6232+-1.4198     ?     85.6668+-1.8852        ? might be 1.0123x slower
   array-prototype-map                               95.9230+-2.6699     ?     96.5505+-2.0098        ?
   array-prototype-some                              87.4120+-1.9506     ?     89.5926+-1.1322        ? might be 1.0249x slower
   array-splice-contiguous                           41.7987+-1.6003     ?     43.4183+-3.6103        ? might be 1.0387x slower
   array-with-double-add                              4.1451+-0.0562            4.0964+-0.0955          might be 1.0119x faster
   array-with-double-increment                        3.1887+-0.0522     ?      3.2164+-0.0612        ?
   array-with-double-mul-add                          4.9417+-0.0600     ?      4.9610+-0.0189        ?
   array-with-double-sum                              3.2442+-0.0259     ?      3.2501+-0.0441        ?
   array-with-int32-add-sub                           6.7751+-0.0447     ?      6.8922+-0.2916        ? might be 1.0173x slower
   array-with-int32-or-double-sum                     3.3006+-0.0328     ?      3.3193+-0.0345        ?
   ArrayBuffer-DataView-alloc-large-long-lived   
                                                     33.9954+-1.2239     ?     35.1350+-2.3671        ? might be 1.0335x slower
   ArrayBuffer-DataView-alloc-long-lived             14.8569+-1.8472           13.6867+-0.2885          might be 1.0855x faster
   ArrayBuffer-Int32Array-byteOffset                  3.5193+-0.0696            3.4479+-0.0664          might be 1.0207x faster
   ArrayBuffer-Int8Array-alloc-large-long-lived   
                                                     32.6768+-0.7688     ?     33.9708+-1.5550        ? might be 1.0396x slower
   ArrayBuffer-Int8Array-alloc-long-lived-buffer   
                                                     22.6321+-0.9003     ?     23.4028+-1.4690        ? might be 1.0341x slower
   ArrayBuffer-Int8Array-alloc-long-lived            15.3832+-1.3250           14.5935+-2.0732          might be 1.0541x faster
   ArrayBuffer-Int8Array-alloc                       12.1153+-1.5548           10.9799+-0.4923          might be 1.1034x faster
   asmjs_bool_bug                                     7.5955+-0.0226     ?      7.6364+-0.2101        ?
   assign-custom-setter-polymorphic                   2.9980+-0.0900            2.8985+-0.0385          might be 1.0344x faster
   assign-custom-setter                               4.0205+-0.0887     ?      4.0403+-0.0427        ?
   basic-set                                          8.2887+-0.3530     ?      8.4614+-0.2203        ? might be 1.0208x slower
   big-int-mul                                        3.9770+-0.0459     ?      3.9962+-0.1351        ?
   boolean-test                                       3.0010+-0.0297     ?      3.0165+-0.0431        ?
   branch-fold                                        3.6611+-0.0258     ?      3.6710+-0.0415        ?
   by-val-generic                                     8.2780+-0.4690            8.1835+-0.3438          might be 1.0115x faster
   call-spread-apply                                 16.4052+-0.3168     !     30.4704+-1.5447        ! definitely 1.8574x slower
   call-spread-call                                   5.8409+-0.1160     !     24.7337+-1.3571        ! definitely 4.2346x slower
   captured-assignments                               0.4606+-0.0140     ?      0.4657+-0.0237        ? might be 1.0110x slower
   cast-int-to-double                                 5.2689+-0.0253     ?      5.3096+-0.0616        ?
   cell-argument                                      8.8658+-0.5694     ?      9.0880+-0.5696        ? might be 1.0251x slower
   cfg-simplify                                       2.8663+-0.0649            2.7812+-0.0335          might be 1.0306x faster
   chain-getter-access                               10.1074+-0.2063           10.0616+-0.1372        
   cmpeq-obj-to-obj-other                            11.7164+-1.0843           10.8038+-0.2472          might be 1.0845x faster
   constant-test                                      4.9111+-0.0426     ?      4.9352+-0.0477        ?
   DataView-custom-properties                        39.0084+-1.8847           38.9785+-1.2017        
   delay-tear-off-arguments-strictmode               21.7605+-1.8349     ^     14.2284+-1.4698        ^ definitely 1.5294x faster
   deltablue-varargs                                180.0431+-4.2814     !    199.5517+-2.1404        ! definitely 1.1084x slower
   destructuring-arguments                            5.2795+-0.1067     !     16.4444+-0.2312        ! definitely 3.1148x slower
   destructuring-swap                                 5.0404+-0.0513            5.0086+-0.0595        
   direct-arguments-getbyval                          0.9004+-0.1032     !      1.2008+-0.0448        ! definitely 1.3336x slower
   div-boolean-double                                 5.2073+-0.0337            5.2033+-0.0429        
   div-boolean                                        7.7643+-0.0341     ?      7.8008+-0.0716        ?
   double-get-by-val-out-of-bounds                    4.4727+-0.1085            4.4333+-0.1690        
   double-pollution-getbyval                          8.8335+-0.0812     ?      8.8634+-0.1152        ?
   double-pollution-putbyoffset                       4.1790+-0.0465     ?      4.1997+-0.0352        ?
   double-to-int32-typed-array-no-inline              2.2277+-0.0681            2.2076+-0.0631        
   double-to-int32-typed-array                        1.9083+-0.0303            1.8796+-0.0308          might be 1.0153x faster
   double-to-uint32-typed-array-no-inline             2.2590+-0.0583     ?      2.2752+-0.0699        ?
   double-to-uint32-typed-array                       2.0082+-0.1009            1.9320+-0.0326          might be 1.0394x faster
   elidable-new-object-dag                           44.6466+-1.0815           43.8640+-1.9043          might be 1.0178x faster
   elidable-new-object-roflcopter                    47.2217+-1.9599           46.7753+-1.0197        
   elidable-new-object-then-call                     39.7061+-2.0975     ?     39.7316+-2.5279        ?
   elidable-new-object-tree                          45.7764+-1.6480     ?     46.1208+-2.0060        ?
   empty-string-plus-int                              5.4008+-0.1094            5.3809+-0.0485        
   emscripten-cube2hash                              38.6277+-1.5215     ?     39.6622+-2.2924        ? might be 1.0268x slower
   exit-length-on-plain-object                       14.3577+-0.4051     ?     14.5464+-0.9210        ? might be 1.0131x slower
   external-arguments-getbyval                        1.3982+-0.0631     ^      1.2274+-0.0739        ^ definitely 1.1391x faster
   external-arguments-putbyval                        2.0469+-0.0783     !      2.2172+-0.0473        ! definitely 1.0832x slower
   fixed-typed-array-storage-var-index                1.2173+-0.0244     ?      1.2247+-0.0148        ?
   fixed-typed-array-storage                          0.9189+-0.0735            0.8867+-0.0386          might be 1.0363x faster
   Float32Array-matrix-mult                           4.3590+-0.0354            4.2901+-0.1468          might be 1.0161x faster
   Float32Array-to-Float64Array-set                  61.2310+-1.4659     ^     54.5194+-2.0250        ^ definitely 1.1231x faster
   Float64Array-alloc-long-lived                     71.7369+-1.1532     ?     72.2988+-2.8447        ?
   Float64Array-to-Int16Array-set                    69.6282+-1.8408     ?     73.8503+-3.3309        ? might be 1.0606x slower
   fold-double-to-int                                15.5375+-0.8714     ?     15.8880+-1.0021        ? might be 1.0226x slower
   fold-get-by-id-to-multi-get-by-offset-rare-int   
                                                     10.8487+-1.1018            9.7376+-0.6983          might be 1.1141x faster
   fold-get-by-id-to-multi-get-by-offset              9.7587+-1.4312     ?     10.0604+-1.1085        ? might be 1.0309x slower
   fold-multi-get-by-offset-to-get-by-offset   
                                                      8.0291+-1.5285     ?      8.8405+-0.9215        ? might be 1.1011x slower
   fold-multi-get-by-offset-to-poly-get-by-offset   
                                                      9.0087+-0.7933     ?      9.0991+-1.6932        ? might be 1.0100x slower
   fold-multi-put-by-offset-to-poly-put-by-offset   
                                                      8.8807+-1.5549            8.3975+-0.9783          might be 1.0576x faster
   fold-multi-put-by-offset-to-put-by-offset   
                                                      5.1576+-0.7888            4.7762+-0.3640          might be 1.0798x faster
   fold-multi-put-by-offset-to-replace-or-transition-put-by-offset   
                                                      9.2135+-0.4250     ?      9.2383+-0.4380        ?
   fold-put-by-id-to-multi-put-by-offset              9.2397+-1.1536     ?      9.6261+-0.8922        ? might be 1.0418x slower
   fold-put-structure                                 4.1922+-0.5598     ?      5.6868+-1.8688        ? might be 1.3565x slower
   for-of-iterate-array-entries                       4.4980+-0.1089            4.4907+-0.0592        
   for-of-iterate-array-keys                          3.7445+-0.1454     ?      3.7973+-0.0837        ? might be 1.0141x slower
   for-of-iterate-array-values                        3.6584+-0.0808            3.6324+-0.0744        
   fround                                            20.2461+-0.6496           19.8663+-0.8167          might be 1.0191x faster
   ftl-library-inlining-dataview                     79.9187+-2.3690     ?     84.2666+-9.6070        ? might be 1.0544x slower
   ftl-library-inlining                              90.7473+-25.2981          87.1804+-20.2631         might be 1.0409x faster
   function-dot-apply                                 1.5159+-0.0968     !      6.9803+-0.1203        ! definitely 4.6048x slower
   function-test                                      3.3571+-0.0505            3.3199+-0.0607          might be 1.0112x faster
   function-with-eval                               127.0381+-5.3430     ^     94.6132+-1.7596        ^ definitely 1.3427x faster
   gcse-poly-get-less-obvious                        19.7228+-0.9754           18.8351+-0.8369          might be 1.0471x faster
   gcse-poly-get                                     23.8511+-2.7606           22.5477+-3.5664          might be 1.0578x faster
   gcse                                               4.3086+-0.0641            4.2969+-0.0375        
   get-by-id-bimorphic-check-structure-elimination-simple   
                                                      2.7298+-0.0522     ?      2.7493+-0.0249        ?
   get-by-id-bimorphic-check-structure-elimination   
                                                      5.9954+-0.0598     ?      6.0799+-0.1448        ? might be 1.0141x slower
   get-by-id-chain-from-try-block                     9.4046+-1.3389            7.2843+-1.2390          might be 1.2911x faster
   get-by-id-check-structure-elimination              5.1102+-0.1058            5.0589+-0.0371          might be 1.0101x faster
   get-by-id-proto-or-self                           17.3796+-0.8890           17.2519+-0.6640        
   get-by-id-quadmorphic-check-structure-elimination-simple   
                                                      2.8982+-0.0446     ?      2.9381+-0.0312        ? might be 1.0138x slower
   get-by-id-self-or-proto                           17.6394+-0.7683     ?     17.8638+-0.4400        ? might be 1.0127x slower
   get-by-val-out-of-bounds                           4.2981+-0.0810     ?      4.4692+-0.3577        ? might be 1.0398x slower
   get_callee_monomorphic                             3.5990+-0.0914     ?      3.7183+-0.1490        ? might be 1.0331x slower
   get_callee_polymorphic                             3.6145+-0.0634     !      6.0481+-0.2810        ! definitely 1.6733x slower
   getter-no-activation                               4.5031+-0.4174            4.2759+-0.0616          might be 1.0531x faster
   getter-richards                                  126.4748+-7.9221     ?    130.2811+-10.4765       ? might be 1.0301x slower
   getter                                             5.0794+-0.0248     ?      5.6488+-0.5997        ? might be 1.1121x slower
   global-var-const-infer-fire-from-opt               0.8390+-0.0417     ?      0.8876+-0.1025        ? might be 1.0580x slower
   global-var-const-infer                             0.8540+-0.1113            0.8282+-0.0965          might be 1.0311x faster
   HashMap-put-get-iterate-keys                      26.5817+-0.3888     ?     26.7537+-0.6443        ?
   HashMap-put-get-iterate                           26.0569+-0.4290           25.7572+-0.3652          might be 1.0116x faster
   HashMap-string-put-get-iterate                    28.3969+-1.3014     ?     28.5847+-1.2033        ?
   hoist-make-rope                                   11.9520+-0.8078     ?     12.1332+-0.4507        ? might be 1.0152x slower
   hoist-poly-check-structure-effectful-loop   
                                                      5.6807+-1.7346            5.1488+-0.2995          might be 1.1033x faster
   hoist-poly-check-structure                         3.6949+-0.0260     ?      3.7001+-0.0546        ?
   imul-double-only                                   8.5931+-0.7517     ?      9.1959+-0.8692        ? might be 1.0701x slower
   imul-int-only                                      9.8747+-0.2900     ?      9.9238+-0.1824        ?
   imul-mixed                                         8.2963+-0.1162            8.2702+-0.2809        
   in-four-cases                                     18.7720+-0.1949     ?     18.9537+-0.4311        ?
   in-one-case-false                                 10.2464+-0.4804           10.0719+-0.3790          might be 1.0173x faster
   in-one-case-true                                  10.3309+-0.4298            9.8443+-0.2252          might be 1.0494x faster
   in-two-cases                                      10.4166+-0.4481           10.3039+-0.3456          might be 1.0109x faster
   indexed-properties-in-objects                      2.8927+-0.0351     ?      2.9218+-0.0290        ? might be 1.0100x slower
   infer-closure-const-then-mov-no-inline             3.6800+-0.0751     ^      3.5350+-0.0257        ^ definitely 1.0410x faster
   infer-closure-const-then-mov                      19.2969+-1.5919           17.3887+-0.4167          might be 1.1097x faster
   infer-closure-const-then-put-to-scope-no-inline   
                                                     11.8832+-0.2306     ?     12.0228+-0.8698        ? might be 1.0118x slower
   infer-closure-const-then-put-to-scope             21.8037+-0.2797     ?     23.4359+-2.3851        ? might be 1.0749x slower
   infer-closure-const-then-reenter-no-inline   
                                                     49.8403+-1.7341           48.3830+-0.2874          might be 1.0301x faster
   infer-closure-const-then-reenter                  22.6548+-1.4774     !    124.3955+-1.4561        ! definitely 5.4909x slower
   infer-constant-global-property                    31.0710+-1.7498     ?     31.7423+-2.3690        ? might be 1.0216x slower
   infer-constant-property                            2.7660+-0.0763            2.7579+-0.1134        
   infer-one-time-closure-ten-vars                   12.5774+-0.7879           12.3526+-0.2497          might be 1.0182x faster
   infer-one-time-closure-two-vars                   11.9910+-0.2488     ?     12.1115+-0.7321        ? might be 1.0101x slower
   infer-one-time-closure                            11.7322+-0.3056     ?     12.4477+-1.1983        ? might be 1.0610x slower
   infer-one-time-deep-closure                       21.3535+-1.1152     ?     21.4430+-1.2074        ?
   inline-arguments-access                            1.3955+-0.0329     !      4.2281+-0.0750        ! definitely 3.0298x slower
   inline-arguments-aliased-access                    1.7501+-0.1605     !      4.3364+-0.1212        ! definitely 2.4778x slower
   inline-arguments-local-escape                     12.6784+-0.4123     ^      4.5016+-0.1883        ^ definitely 2.8164x faster
   inline-get-scoped-var                              4.6298+-0.1040            4.4285+-0.3475          might be 1.0454x faster
   inlined-put-by-id-transition                      10.1538+-0.2056     ?     10.3675+-0.3597        ? might be 1.0210x slower
   int-or-other-abs-then-get-by-val                   4.9827+-0.0424            4.9768+-0.0367        
   int-or-other-abs-zero-then-get-by-val             17.1215+-0.9293     ?     17.4886+-1.4086        ? might be 1.0214x slower
   int-or-other-add-then-get-by-val                   4.3026+-0.0773            4.2896+-0.0239        
   int-or-other-add                                   5.3201+-0.0323            5.2887+-0.0311        
   int-or-other-div-then-get-by-val                   4.2177+-0.0133     ?      4.4236+-0.4977        ? might be 1.0488x slower
   int-or-other-max-then-get-by-val                   4.3446+-0.0590     ?      4.4173+-0.1067        ? might be 1.0167x slower
   int-or-other-min-then-get-by-val                   4.3717+-0.0571     ?      4.4536+-0.0250        ? might be 1.0187x slower
   int-or-other-mod-then-get-by-val                   3.8587+-0.0463     ?      3.9207+-0.0550        ? might be 1.0161x slower
   int-or-other-mul-then-get-by-val                   3.9760+-0.0499     ?      4.0398+-0.0559        ? might be 1.0160x slower
   int-or-other-neg-then-get-by-val                   4.6075+-0.0105     ?      4.7658+-0.3176        ? might be 1.0343x slower
   int-or-other-neg-zero-then-get-by-val             17.0751+-0.8281     ?     17.3219+-1.3883        ? might be 1.0145x slower
   int-or-other-sub-then-get-by-val                   4.3413+-0.0964     ?      4.4165+-0.1894        ? might be 1.0173x slower
   int-or-other-sub                                   3.5396+-0.1246            3.5053+-0.0555        
   int-overflow-local                                 4.2557+-0.0588     ?      4.3250+-0.0283        ? might be 1.0163x slower
   Int16Array-alloc-long-lived                       50.2916+-2.3694           50.0083+-1.8636        
   Int16Array-bubble-sort-with-byteLength            21.6849+-1.3561     ?     22.1416+-1.7688        ? might be 1.0211x slower
   Int16Array-bubble-sort                            25.6385+-2.5840     ^     21.2340+-0.0994        ^ definitely 1.2074x faster
   Int16Array-load-int-mul                            1.4724+-0.0097     ?      1.5184+-0.0736        ? might be 1.0312x slower
   Int16Array-to-Int32Array-set                      58.7047+-1.5287     ^     51.9980+-1.7351        ^ definitely 1.1290x faster
   Int32Array-alloc-large                            24.3234+-0.5871     ?     24.5723+-1.6618        ? might be 1.0102x slower
   Int32Array-alloc-long-lived                       56.5165+-0.9798     ?     57.0769+-1.0481        ?
   Int32Array-alloc                                   3.5877+-0.6249            3.3811+-0.1499          might be 1.0611x faster
   Int32Array-Int8Array-view-alloc                    7.8647+-1.8118     ?      7.9735+-0.9842        ? might be 1.0138x slower
   int52-spill                                        6.5568+-0.1255     ?      6.6782+-0.2856        ? might be 1.0185x slower
   Int8Array-alloc-long-lived                        46.8322+-1.6964           46.5830+-1.3836        
   Int8Array-load-with-byteLength                     3.3739+-0.1504            3.3111+-0.0311          might be 1.0190x faster
   Int8Array-load                                     3.3276+-0.0903     ?      3.3473+-0.0438        ?
   integer-divide                                    11.2773+-0.1837     ?     11.8682+-0.4097        ? might be 1.0524x slower
   integer-modulo                                     2.0358+-0.0698     ?      2.1246+-0.0992        ? might be 1.0436x slower
   large-int-captured                                 6.7703+-0.1129     ^      5.5452+-0.0461        ^ definitely 1.2209x faster
   large-int-neg                                     16.4830+-0.2362     ?     18.1816+-1.5757        ? might be 1.1031x slower
   large-int                                         16.3620+-1.6881     ?     16.4237+-1.5908        ?
   logical-not                                        4.4885+-0.0188     ?      4.5450+-0.0535        ? might be 1.0126x slower
   lots-of-fields                                    13.5452+-1.3405           13.1271+-0.2983          might be 1.0319x faster
   make-indexed-storage                               3.0584+-0.0826            3.0141+-0.0507          might be 1.0147x faster
   make-rope-cse                                      4.7023+-0.5056            4.6767+-0.6666        
   marsaglia-larger-ints                             36.5052+-1.7796           35.7106+-1.0529          might be 1.0223x faster
   marsaglia-osr-entry                               23.0603+-0.3326     ?     23.5247+-1.4735        ? might be 1.0201x slower
   max-boolean                                        2.4726+-0.0352     ?      2.5052+-0.0258        ? might be 1.0132x slower
   method-on-number                                  17.2160+-0.2334     ?     17.4234+-0.2140        ? might be 1.0120x slower
   min-boolean                                        2.4620+-0.0195     ?      2.5022+-0.0300        ? might be 1.0163x slower
   minus-boolean-double                               3.1642+-0.0414     ?      3.1679+-0.0482        ?
   minus-boolean                                      2.3340+-0.0447     ?      2.3527+-0.0559        ?
   misc-strict-eq                                    37.4502+-0.2300     ?     38.2345+-2.7134        ? might be 1.0209x slower
   mod-boolean-double                                10.8724+-0.1058     ?     11.0429+-0.2530        ? might be 1.0157x slower
   mod-boolean                                        7.9217+-0.2358            7.9097+-0.2778        
   mul-boolean-double                                 3.6959+-0.0386            3.6860+-0.0862        
   mul-boolean                                        2.8781+-0.0459            2.8774+-0.0544        
   neg-boolean                                        3.1665+-0.0309            3.1640+-0.0502        
   negative-zero-divide                               0.3485+-0.0129     ?      0.3528+-0.0105        ? might be 1.0123x slower
   negative-zero-modulo                               0.3394+-0.0146     ?      0.3467+-0.0128        ? might be 1.0217x slower
   negative-zero-negate                               0.3244+-0.0180            0.3207+-0.0060          might be 1.0114x faster
   nested-function-parsing                           21.4532+-0.5785     !     43.9855+-2.2210        ! definitely 2.0503x slower
   new-array-buffer-dead                              2.7646+-0.0656     ?      2.8088+-0.1389        ? might be 1.0160x slower
   new-array-buffer-push                              7.0847+-0.7708     ?      7.4689+-0.9300        ? might be 1.0542x slower
   new-array-dead                                    12.2570+-0.1689     ?     12.5199+-0.1628        ? might be 1.0214x slower
   new-array-push                                     3.9345+-0.3003     ?      3.9680+-0.2564        ?
   number-test                                        2.9847+-0.0226            2.9670+-0.0328        
   object-closure-call                                5.6496+-0.1442            5.6140+-0.0950        
   object-test                                        3.1206+-0.0523     ?      3.1329+-0.0525        ?
   obvious-sink-pathology-taken                     145.4633+-2.4440     ?    146.4790+-2.7531        ?
   obvious-sink-pathology                           140.9506+-1.9977          140.0090+-0.9226        
   obviously-elidable-new-object                     36.4417+-2.4627           36.0307+-1.8095          might be 1.0114x faster
   plus-boolean-arith                                 2.5161+-0.0429            2.4975+-0.0417        
   plus-boolean-double                                3.2134+-0.0807            3.1608+-0.0732          might be 1.0166x faster
   plus-boolean                                       2.3875+-0.0754            2.3669+-0.0320        
   poly-chain-access-different-prototypes-simple   
                                                      3.3177+-0.0464            3.3105+-0.0453        
   poly-chain-access-different-prototypes             2.9827+-0.7310            2.6036+-0.0232          might be 1.1456x faster
   poly-chain-access-simpler                          3.2949+-0.0392     ?      3.3538+-0.0787        ? might be 1.0179x slower
   poly-chain-access                                  2.9583+-0.3575            2.6023+-0.0856          might be 1.1368x faster
   poly-stricteq                                     57.8018+-1.8017     ?     59.9613+-2.7435        ? might be 1.0374x slower
   polymorphic-array-call                             1.3512+-0.1752     ?      1.4014+-0.1874        ? might be 1.0371x slower
   polymorphic-get-by-id                              3.1123+-0.0293     ?      3.1438+-0.1230        ? might be 1.0101x slower
   polymorphic-put-by-id                             29.3969+-1.8048           28.5241+-1.6287          might be 1.0306x faster
   polymorphic-structure                             15.2421+-0.7442     ?     15.5665+-1.3697        ? might be 1.0213x slower
   polyvariant-monomorphic-get-by-id                  8.6059+-0.3007            8.5938+-0.1834        
   proto-getter-access                               10.0130+-0.1296     ?     10.0970+-0.2201        ?
   put-by-id-replace-and-transition                   8.8644+-0.2310            8.5975+-0.0838          might be 1.0310x faster
   put-by-id-slightly-polymorphic                     2.8749+-0.0650            2.8423+-0.0205          might be 1.0115x faster
   put-by-id                                         13.3868+-0.4032           13.3621+-0.2823        
   put-by-val-direct                                  0.5626+-0.0262     ?      0.5751+-0.0199        ? might be 1.0222x slower
   put-by-val-large-index-blank-indexing-type   
                                                      5.8165+-0.2447     ?      5.9867+-0.3952        ? might be 1.0293x slower
   put-by-val-machine-int                             2.5441+-0.0533     ?      2.6388+-0.0917        ? might be 1.0372x slower
   rare-osr-exit-on-local                            15.0249+-0.2465     ?     15.1480+-0.5870        ?
   register-pressure-from-osr                        21.8321+-0.8673           21.7838+-0.8833        
   setter                                             5.2048+-0.0791     ?      5.7800+-0.6213        ? might be 1.1105x slower
   simple-activation-demo                            25.1026+-0.4058     ?     25.2276+-0.6920        ?
   simple-getter-access                              12.5372+-0.1897     ?     12.6647+-0.3392        ? might be 1.0102x slower
   simple-poly-call-nested                            8.2292+-0.2781            8.0302+-0.2238          might be 1.0248x faster
   simple-poly-call                                   1.3129+-0.0722     ?      1.3481+-0.1312        ? might be 1.0268x slower
   sin-boolean                                       23.7668+-1.3876           23.5791+-1.3739        
   sinkable-new-object-dag                           69.6718+-1.5538     ?     71.5166+-1.3809        ? might be 1.0265x slower
   sinkable-new-object-taken                         53.3445+-2.2129     ?     53.6960+-3.2474        ?
   sinkable-new-object                               39.7256+-0.9644           39.6622+-1.2151        
   slow-array-profile-convergence                     2.9140+-0.2749            2.7585+-0.0671          might be 1.0564x faster
   slow-convergence                                   3.2701+-0.1736            3.2499+-0.0741        
   sparse-conditional                                 1.0963+-0.0287     ?      1.1333+-0.0967        ? might be 1.0337x slower
   splice-to-remove                                  16.4429+-0.2392     ?     16.8519+-1.2147        ? might be 1.0249x slower
   string-char-code-at                               15.9352+-0.1477     ?     16.0804+-0.1399        ?
   string-concat-object                               2.4601+-0.1902            2.4412+-0.2380        
   string-concat-pair-object                          2.3042+-0.0731     ?      2.3067+-0.0467        ?
   string-concat-pair-simple                         11.1728+-0.2965     ?     11.3615+-0.4010        ? might be 1.0169x slower
   string-concat-simple                              11.9297+-1.1322           11.7049+-0.8871          might be 1.0192x faster
   string-cons-repeat                                 8.0776+-0.6548     ?      8.1977+-0.9899        ? might be 1.0149x slower
   string-cons-tower                                  8.3514+-0.7305     ?      8.5870+-1.1581        ? might be 1.0282x slower
   string-equality                                   17.5241+-0.3739     ?     17.9406+-1.6356        ? might be 1.0238x slower
   string-get-by-val-big-char                         7.0094+-0.0623     ?      7.1229+-0.1642        ? might be 1.0162x slower
   string-get-by-val-out-of-bounds-insane             3.8482+-0.0817     ?      3.8486+-0.1226        ?
   string-get-by-val-out-of-bounds                    5.1816+-0.0690     ?      5.2865+-0.1972        ? might be 1.0203x slower
   string-get-by-val                                  3.3008+-0.0376     ?      3.3855+-0.0512        ? might be 1.0257x slower
   string-hash                                        2.0244+-0.0470     ?      2.0406+-0.0731        ?
   string-long-ident-equality                        14.2334+-0.1526     ?     15.2955+-1.3620        ? might be 1.0746x slower
   string-out-of-bounds                              14.9467+-0.2740           14.8979+-0.2746        
   string-repeat-arith                               36.0838+-1.8210     ^     31.8703+-1.7766        ^ definitely 1.1322x faster
   string-sub                                        65.1422+-2.6170     ?     65.4779+-4.6902        ?
   string-test                                        2.9696+-0.0746     ?      2.9814+-0.0900        ?
   string-var-equality                               30.6908+-1.7210           30.5079+-1.3530        
   structure-hoist-over-transitions                   2.4899+-0.0501     ?      2.5460+-0.0572        ? might be 1.0225x slower
   substring-concat-weird                            38.8601+-0.8495           38.7106+-1.0256        
   substring-concat                                  39.7387+-0.5464     ?     40.7720+-1.6544        ? might be 1.0260x slower
   substring                                         46.4003+-2.0718     ?     46.9388+-2.3465        ? might be 1.0116x slower
   switch-char-constant                               2.7030+-0.0269            2.6866+-0.0396        
   switch-char                                        6.7489+-0.9652     ?      7.0335+-0.8245        ? might be 1.0422x slower
   switch-constant                                    8.2266+-0.3710            8.0303+-0.1079          might be 1.0244x faster
   switch-string-basic-big-var                       16.0790+-1.7376           15.0439+-0.4941          might be 1.0688x faster
   switch-string-basic-big                           14.2551+-0.9973     ?     14.9273+-1.7970        ? might be 1.0472x slower
   switch-string-basic-var                           15.1372+-1.3279           14.8380+-1.1923          might be 1.0202x faster
   switch-string-basic                               13.9145+-1.6241     ?     14.3321+-1.7179        ? might be 1.0300x slower
   switch-string-big-length-tower-var                21.9250+-1.7618           20.7657+-1.7587          might be 1.0558x faster
   switch-string-length-tower-var                    14.6041+-0.1959     ?     15.1724+-1.4175        ? might be 1.0389x slower
   switch-string-length-tower                        13.5666+-1.2648     ?     14.4839+-2.1993        ? might be 1.0676x slower
   switch-string-short                               13.2701+-1.4505     ?     14.1888+-1.9055        ? might be 1.0692x slower
   switch                                            12.0872+-0.3136     ?     12.1033+-0.2543        ?
   tear-off-arguments-simple                          1.9614+-0.0782     !      3.2781+-0.0514        ! definitely 1.6713x slower
   tear-off-arguments                                 2.7454+-0.0279     !      4.5109+-0.1216        ! definitely 1.6431x slower
   temporal-structure                                12.9519+-0.8369     ?     13.2093+-1.3818        ? might be 1.0199x slower
   to-int32-boolean                                  14.1154+-0.9607           13.5620+-0.1546          might be 1.0408x faster
   undefined-property-access                        385.6309+-3.8221     ?    386.4823+-6.3285        ?
   undefined-test                                     3.1202+-0.2218            3.0246+-0.0342          might be 1.0316x faster
   unprofiled-licm                                   23.9965+-1.9658           23.2896+-0.7174          might be 1.0304x faster
   varargs-call                                      15.9173+-0.9872     !     17.9589+-0.8468        ! definitely 1.1283x slower
   varargs-construct                                 55.2190+-3.2016     ^     40.3783+-1.3147        ^ definitely 1.3675x faster
   varargs-inline                                     8.4436+-0.3893     !     12.8549+-1.1425        ! definitely 1.5224x slower
   varargs-strict-mode                               15.4855+-1.1579     ?     16.8789+-0.2836        ? might be 1.0900x slower
   varargs                                           15.7035+-1.6085           14.9855+-0.2314          might be 1.0479x faster
   weird-inlining-const-prop                          2.2171+-0.0910     ?      2.4135+-0.1939        ? might be 1.0886x slower

   &lt;geometric&gt;                                        8.3324+-0.0312     !      8.6526+-0.0500        ! definitely 1.0384x slower

                                                        TipOfTree                 VarOffset                                     
AsmBench:
   bigfib.cpp                                       493.9181+-2.8532          492.9224+-2.1096        
   cray.c                                           435.2725+-10.3530         430.1591+-2.5643          might be 1.0119x faster
   dry.c                                            489.8103+-1.8266     ?    490.4915+-10.3195       ?
   FloatMM.c                                        729.6682+-3.6618          726.7941+-2.6514        
   gcc-loops.cpp                                   4252.3182+-16.3408    ?   4260.9071+-23.2380       ?
   n-body.c                                         988.8191+-5.2327          986.9184+-3.9455        
   Quicksort.c                                      444.5309+-5.9634          442.4574+-1.4171        
   stepanov_container.cpp                          3581.2647+-7.9971         3572.2782+-14.8630       
   Towers.c                                         268.3764+-2.2816          268.3147+-2.3779        

   &lt;geometric&gt;                                      802.4690+-2.2887          800.3650+-1.7432          might be 1.0026x faster

                                                        TipOfTree                 VarOffset                                     
CompressionBench:
   huffman                                          386.2019+-1.2097     ?    386.7360+-2.6542        ?
   arithmetic-simple                                406.9363+-5.0585          402.6431+-4.3853          might be 1.0107x faster
   arithmetic-precise                               304.9522+-1.7341          304.7725+-4.5106        
   arithmetic-complex-precise                       301.6358+-5.2021     ?    303.1571+-4.6472        ?
   arithmetic-precise-order-0                       436.7237+-6.2695          435.1612+-9.1277        
   arithmetic-precise-order-1                       342.7232+-2.9055     ^    327.8700+-2.9491        ^ definitely 1.0453x faster
   arithmetic-precise-order-2                       392.6497+-18.3265         369.9658+-6.2658          might be 1.0613x faster
   arithmetic-simple-order-1                        435.4581+-4.3075     ^    424.5752+-3.5638        ^ definitely 1.0256x faster
   arithmetic-simple-order-2                        483.7448+-3.7295     ^    472.3563+-4.0068        ^ definitely 1.0241x faster
   lz-string                                        325.3980+-5.9588          324.6047+-1.7246        

   &lt;geometric&gt;                                      377.1107+-2.0545     ^    371.0082+-1.4414        ^ definitely 1.0164x faster

                                                        TipOfTree                 VarOffset                                     

                                                        TipOfTree                 VarOffset                                     
Geomean of preferred means:
   &lt;scaled-result&gt;                                   63.7105+-0.2019     !     64.1418+-0.1349        ! definitely 1.0068x slower</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1079023</commentid>
    <comment_count>74</comment_count>
      <attachid>249157</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-20 19:58:23 -0700</bug_when>
    <thetext>Created attachment 249157
starting to work on the varargs forwarding phase</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1079067</commentid>
    <comment_count>75</comment_count>
      <attachid>249172</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-21 08:44:20 -0700</bug_when>
    <thetext>Created attachment 249172
OSR exit part of varargs forwarding is almost done</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1079080</commentid>
    <comment_count>76</comment_count>
      <attachid>249174</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-21 10:33:44 -0700</bug_when>
    <thetext>Created attachment 249174
it compiles again!

DFG varargs forwarding phase is done.  now to test it...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1079082</commentid>
    <comment_count>77</comment_count>
      <attachid>249175</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-21 11:09:23 -0700</bug_when>
    <thetext>Created attachment 249175
DFG and FTL can now forward varargs

It&apos;s passing the main varargs tests.  Running all tests now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1079083</commentid>
    <comment_count>78</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-21 11:53:25 -0700</bug_when>
    <thetext>The new code with the third-tier varargs forwarding still has some issues:

** The following JSC stress test failures have been introduced:
	internal-js-tests.yaml/V8v7/raytrace.js.default-ftl
	internal-js-tests.yaml/V8v7/raytrace.js.ftl-no-cjit-no-simple-opt
	internal-js-tests.yaml/V8v7/raytrace.js.ftl-no-cjit-osr-validation
	internal-js-tests.yaml/V8v7/raytrace.js.ftl-no-cjit-validate
	jsc-layout-tests.yaml/js/script-tests/function-apply-many-args.js.layout-dfg-eager-no-cjit
	v8-v6/v8-raytrace.js.default-ftl
	v8-v6/v8-raytrace.js.dfg-eager-no-cjit-validate
	v8-v6/v8-raytrace.js.ftl-eager-no-cjit
	v8-v6/v8-raytrace.js.ftl-no-cjit-validate

Results for JSC stress tests:
    9 failures found.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1079085</commentid>
    <comment_count>79</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-21 12:05:48 -0700</bug_when>
    <thetext>Unfortunately, this doesn&apos;t appear to address the box2d slow-down just yet:

box2d          x2      12.74762+-0.13700    !    14.14226+-0.40700       ! definitely 1.1094x slower</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1079086</commentid>
    <comment_count>80</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-21 12:14:41 -0700</bug_when>
    <thetext>OK, I fixed that.  It turned out to be a dumb bug in argumentsInvolveStackSlot(): we thought that a store to &apos;this&apos; interferes with the stack slots used by the arguments object.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1079088</commentid>
    <comment_count>81</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-21 12:19:18 -0700</bug_when>
    <thetext>(In reply to comment #80)
&gt; OK, I fixed that.  It turned out to be a dumb bug in
&gt; argumentsInvolveStackSlot(): we thought that a store to &apos;this&apos; interferes
&gt; with the stack slots used by the arguments object.

And by &quot;fixed&quot;, I mean that box2d now has a speed-up with this patch:

box2d          x2      12.74121+-0.02937    ^    12.21960+-0.13325       ^ definitely 1.0427x faster</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1079108</commentid>
    <comment_count>82</comment_count>
      <attachid>249182</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-21 18:27:49 -0700</bug_when>
    <thetext>Created attachment 249182
couple of bugfixes

And some new tests!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1079120</commentid>
    <comment_count>83</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-21 19:57:39 -0700</bug_when>
    <thetext>(In reply to comment #82)
&gt; Created attachment 249182 [details]
&gt; couple of bugfixes
&gt; 
&gt; And some new tests!

This passes a lot of tests, but hilariously, the VarargsForwardingPhase causes the FTL to do less optimizations.  I need to investigate.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1079124</commentid>
    <comment_count>84</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-21 20:32:19 -0700</bug_when>
    <thetext>Victory.  Now I just have one crash bug to fix (in dead-access-to-captured-variable-preceded-by-a-live-store) and I need to port to 32-bit.


Benchmark report for SunSpider, LongSpider, V8Spider, Octane, Kraken, JSRegress, AsmBench, and CompressionBench on dethklok (MacBookPro9,1).

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/pizlo/secondary/OpenSource/WebKitBuild/Release/jsc (r181817)
&quot;VarOffset&quot; at /Volumes/Data/pizlo/primary/OpenSource/WebKitBuild/Release/jsc (r181817)

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                 VarOffset                                     
SunSpider:
   3d-cube                                            4.9017+-0.1281            4.8992+-0.0291        
   3d-morph                                           6.0416+-0.7505            5.5698+-0.0824          might be 1.0847x faster
   3d-raytrace                                        7.1640+-1.9683            6.3432+-0.1266          might be 1.1294x faster
   access-binary-trees                                2.1097+-0.1085            2.0797+-0.0627          might be 1.0144x faster
   access-fannkuch                                    6.0033+-0.2915     ?      6.2669+-0.4815        ? might be 1.0439x slower
   access-nbody                                       2.8446+-0.0524     ?      2.9247+-0.1032        ? might be 1.0282x slower
   access-nsieve                                      3.2158+-0.1422     !      3.4085+-0.0389        ! definitely 1.0599x slower
   bitops-3bit-bits-in-byte                           1.5995+-0.1207            1.5392+-0.0188          might be 1.0392x faster
   bitops-bits-in-byte                                3.5599+-0.0357     ^      3.3985+-0.0229        ^ definitely 1.0475x faster
   bitops-bitwise-and                                 2.1314+-0.0480     ?      2.1954+-0.1212        ? might be 1.0300x slower
   bitops-nsieve-bits                                 3.9392+-0.6223            3.7704+-0.0346          might be 1.0448x faster
   controlflow-recursive                              2.1592+-0.0374            2.1560+-0.0996        
   crypto-aes                                         4.4269+-0.5888            4.2992+-0.4744          might be 1.0297x faster
   crypto-md5                                         2.4290+-0.0336            2.4179+-0.0271        
   crypto-sha1                                        2.7904+-0.0545     ?      2.9407+-0.5976        ? might be 1.0539x slower
   date-format-tofte                                  9.2875+-0.1429     ?      9.3208+-0.2291        ?
   date-format-xparb                                  5.3167+-0.1542     ?      5.6932+-0.3558        ? might be 1.0708x slower
   math-cordic                                        3.2699+-0.1204            3.2036+-0.1562          might be 1.0207x faster
   math-partial-sums                                  5.1961+-0.1131            5.1629+-0.0982        
   math-spectral-norm                                 1.9756+-0.0741            1.9349+-0.0565          might be 1.0211x faster
   regexp-dna                                         7.7810+-1.2019            7.6440+-1.2113          might be 1.0179x faster
   string-base64                                      4.7606+-0.6879     ?      4.8085+-0.9157        ? might be 1.0101x slower
   string-fasta                                       6.4792+-0.1243     ?      6.7039+-0.6378        ? might be 1.0347x slower
   string-tagcloud                                    9.8202+-0.2892            9.6373+-0.2542          might be 1.0190x faster
   string-unpack-code                                20.3537+-1.0780           19.7221+-0.2824          might be 1.0320x faster
   string-validate-input                              4.8014+-0.0457     ?      4.9093+-0.0879        ? might be 1.0225x slower

   &lt;arithmetic&gt;                                       5.1676+-0.0850            5.1135+-0.0498          might be 1.0106x faster

                                                        TipOfTree                 VarOffset                                     
LongSpider:
   3d-cube                                         1096.3337+-8.4898         1093.7603+-9.5475        
   3d-morph                                        1532.0884+-4.6503     ?   1542.2600+-17.2167       ?
   3d-raytrace                                      733.3191+-5.9032          727.7755+-11.5984       
   access-binary-trees                              996.8634+-10.0249         983.8950+-5.8529          might be 1.0132x faster
   access-fannkuch                                  339.4403+-9.7328     ?    353.4993+-5.6720        ? might be 1.0414x slower
   access-nbody                                     613.0658+-2.4074     ?    647.6632+-81.1990       ? might be 1.0564x slower
   access-nsieve                                    870.4932+-8.3117          864.8263+-11.1455       
   bitops-3bit-bits-in-byte                          45.0267+-0.9861     ?     46.3044+-2.7221        ? might be 1.0284x slower
   bitops-bits-in-byte                              103.9690+-1.0523     ?    105.1049+-4.4509        ? might be 1.0109x slower
   bitops-nsieve-bits                               712.0330+-39.0448         704.5660+-4.9940          might be 1.0106x faster
   controlflow-recursive                            503.8050+-12.8532    ^    482.9097+-3.6907        ^ definitely 1.0433x faster
   crypto-aes                                       709.7507+-5.3468     ?    710.8568+-8.4165        ?
   crypto-md5                                       552.1249+-5.5952          550.6012+-6.1270        
   crypto-sha1                                      601.5227+-7.1291          599.2570+-6.7295        
   date-format-tofte                                771.8925+-9.2285          758.7334+-15.8302         might be 1.0173x faster
   date-format-xparb                                762.2727+-21.1727         745.9775+-18.5221         might be 1.0218x faster
   math-cordic                                      597.2029+-7.9316          597.0286+-11.4778       
   math-partial-sums                                509.1969+-6.4644          506.6546+-1.8273        
   math-spectral-norm                               564.6925+-0.9477     ?    613.0783+-119.0429      ? might be 1.0857x slower
   string-base64                                    364.2877+-7.8788          362.8219+-4.9663        
   string-fasta                                     422.7378+-3.7619     ?    424.4975+-5.7933        ?
   string-tagcloud                                  215.9610+-2.4832     ?    216.5074+-2.7605        ?

   &lt;geometric&gt;                                      504.8709+-2.5775     ?    506.6397+-4.4576        ? might be 1.0035x slower

                                                        TipOfTree                 VarOffset                                     
V8Spider:
   crypto                                            55.8340+-1.6098           55.1450+-3.3781          might be 1.0125x faster
   deltablue                                         92.3854+-4.9547           92.3543+-6.5274        
   earley-boyer                                      42.3256+-0.8410           41.1394+-0.5167          might be 1.0288x faster
   raytrace                                          38.5377+-3.7738     ?     38.7447+-1.8166        ?
   regexp                                            67.1395+-1.2739           66.4766+-1.4860        
   richards                                          81.1405+-2.5279           78.9990+-2.4080          might be 1.0271x faster
   splay                                             39.0199+-1.0256           37.8300+-2.0243          might be 1.0315x faster

   &lt;geometric&gt;                                       56.2434+-1.3248           55.4115+-0.5837          might be 1.0150x faster

                                                        TipOfTree                 VarOffset                                     
Octane:
   encrypt                                           0.20259+-0.00108    ?     0.20283+-0.00117       ?
   decrypt                                           3.59592+-0.03947    ?     3.61984+-0.04092       ?
   deltablue                                x2       0.20534+-0.00130    ?     0.20611+-0.00184       ?
   earley                                            0.69050+-0.00390    ^     0.55301+-0.00388       ^ definitely 1.2486x faster
   boyer                                             5.72497+-0.04539          5.69658+-0.02511       
   navier-stokes                            x2       5.21616+-0.05402          5.18832+-0.00788       
   raytrace                                 x2       1.29042+-0.04445          1.26241+-0.04465         might be 1.0222x faster
   richards                                 x2       0.12323+-0.00225          0.12251+-0.00094       
   splay                                    x2       0.38506+-0.00475          0.38238+-0.00241       
   regexp                                   x2      33.33609+-0.33576         33.15827+-0.26477       
   pdfjs                                    x2      44.82803+-0.28930    ?    45.08427+-0.77731       ?
   mandreel                                 x2      50.36068+-0.70841    ?    57.18621+-17.73578      ? might be 1.1355x slower
   gbemu                                    x2      40.15027+-0.43667    ?    40.17046+-1.95167       ?
   closure                                           0.58239+-0.00377          0.57650+-0.01621         might be 1.0102x faster
   jquery                                            7.18168+-0.07183          7.14945+-0.13291       
   box2d                                    x2      12.80408+-0.21425    ^    12.22952+-0.09737       ^ definitely 1.0470x faster
   zlib                                     x2     394.84661+-1.64225        377.00917+-17.57298        might be 1.0473x faster
   typescript                               x2     821.01302+-12.52872   ?   830.25403+-17.89477      ? might be 1.0113x slower

   &lt;geometric&gt;                                       6.76613+-0.02426          6.70560+-0.11897         might be 1.0090x faster

                                                        TipOfTree                 VarOffset                                     
Kraken:
   ai-astar                                          265.915+-1.931            262.635+-4.194           might be 1.0125x faster
   audio-beat-detection                              110.384+-1.035            110.372+-1.343         
   audio-dft                                         149.307+-3.935            148.168+-1.667         
   audio-fft                                          86.236+-2.842             83.137+-5.905           might be 1.0373x faster
   audio-oscillator                                  215.602+-5.141            211.427+-2.152           might be 1.0197x faster
   imaging-darkroom                                  105.290+-1.956      ?     105.543+-1.780         ?
   imaging-desaturate                                 63.412+-1.882      ?      63.789+-1.963         ?
   imaging-gaussian-blur                             113.937+-1.949            112.583+-2.000           might be 1.0120x faster
   json-parse-financial                               46.617+-2.036      ?      48.113+-1.697         ? might be 1.0321x slower
   json-stringify-tinderbox                           56.910+-1.341             55.800+-1.737           might be 1.0199x faster
   stanford-crypto-aes                                60.405+-1.719             60.072+-1.019         
   stanford-crypto-ccm                                51.840+-4.761             50.555+-1.383           might be 1.0254x faster
   stanford-crypto-pbkdf2                            168.868+-1.889            168.840+-2.545         
   stanford-crypto-sha256-iterative                   55.130+-2.123      ?      55.299+-1.666         ?

   &lt;arithmetic&gt;                                      110.704+-0.957            109.738+-0.469           might be 1.0088x faster

                                                        TipOfTree                 VarOffset                                     
JSRegress:
   abs-boolean                                        2.6390+-0.0497     ?      2.6733+-0.1426        ? might be 1.0130x slower
   adapt-to-double-divide                            16.7057+-0.2939           16.5352+-0.2077          might be 1.0103x faster
   aliased-arguments-getbyval                         0.8750+-0.1003     !      1.1810+-0.0572        ! definitely 1.3497x slower
   allocate-big-object                                2.7465+-0.2200     ?      2.7649+-0.1810        ?
   arguments-named-and-reflective                     9.2676+-0.1568     !     12.4880+-0.1670        ! definitely 1.3475x slower
   arguments-out-of-bounds                           17.5296+-1.4577     ^     14.8223+-0.1275        ^ definitely 1.1827x faster
   arguments-strict-mode                              7.8397+-0.1147     !     11.9400+-0.7952        ! definitely 1.5230x slower
   arguments                                          8.1028+-0.4231     !     10.7074+-1.1347        ! definitely 1.3215x slower
   arity-mismatch-inlining                            0.8495+-0.0812            0.8014+-0.0272          might be 1.0600x faster
   array-access-polymorphic-structure                 6.6608+-0.1380     ?      7.1372+-0.9479        ? might be 1.0715x slower
   array-nonarray-polymorhpic-access                 35.2690+-2.1497           35.2384+-1.5625        
   array-prototype-every                             87.0461+-2.6521           86.3693+-2.4882        
   array-prototype-forEach                           83.1996+-2.1928     ?     85.3514+-1.7538        ? might be 1.0259x slower
   array-prototype-map                               94.2257+-4.2539     ?     95.8304+-2.5183        ? might be 1.0170x slower
   array-prototype-some                              86.7282+-0.5704     ?     87.7251+-2.7378        ? might be 1.0115x slower
   array-splice-contiguous                           41.4119+-1.3195     ?     41.7235+-1.2377        ?
   array-with-double-add                              4.1983+-0.0968            4.1463+-0.0708          might be 1.0125x faster
   array-with-double-increment                        3.1737+-0.0452     ?      3.2521+-0.1287        ? might be 1.0247x slower
   array-with-double-mul-add                          4.9507+-0.0674     ?      5.2213+-0.3005        ? might be 1.0547x slower
   array-with-double-sum                              3.2365+-0.0320     ?      3.2881+-0.0932        ? might be 1.0159x slower
   array-with-int32-add-sub                           6.7863+-0.0695            6.7522+-0.0127        
   array-with-int32-or-double-sum                     3.3001+-0.0394     ?      3.4034+-0.2287        ? might be 1.0313x slower
   ArrayBuffer-DataView-alloc-large-long-lived   
                                                     34.4114+-2.4115           34.2580+-1.7629        
   ArrayBuffer-DataView-alloc-long-lived             15.5472+-1.4064           14.8891+-2.0846          might be 1.0442x faster
   ArrayBuffer-Int32Array-byteOffset                  3.5158+-0.1379            3.4370+-0.0469          might be 1.0229x faster
   ArrayBuffer-Int8Array-alloc-large-long-lived   
                                                     33.6919+-1.9438     ?     34.2576+-2.3308        ? might be 1.0168x slower
   ArrayBuffer-Int8Array-alloc-long-lived-buffer   
                                                     23.9516+-2.0772           23.7262+-2.0815        
   ArrayBuffer-Int8Array-alloc-long-lived            14.1093+-1.7181     ?     15.4349+-1.8490        ? might be 1.0939x slower
   ArrayBuffer-Int8Array-alloc                       11.5817+-1.0811           11.1208+-0.9256          might be 1.0415x faster
   asmjs_bool_bug                                     7.7481+-0.2484     ?      7.7651+-0.2098        ?
   assign-custom-setter-polymorphic                   3.0131+-0.2336     ?      3.2188+-0.1491        ? might be 1.0683x slower
   assign-custom-setter                               4.0621+-0.1279     ?      4.4348+-0.3296        ? might be 1.0917x slower
   basic-set                                          8.6607+-0.7063            8.3453+-0.4424          might be 1.0378x faster
   big-int-mul                                        3.9293+-0.0796     ?      3.9717+-0.0638        ? might be 1.0108x slower
   boolean-test                                       3.0121+-0.0698     ?      3.0485+-0.0473        ? might be 1.0121x slower
   branch-fold                                        3.6445+-0.0161     ?      3.7840+-0.1745        ? might be 1.0383x slower
   by-val-generic                                     7.9561+-0.0948     ?      8.1960+-0.4687        ? might be 1.0301x slower
   call-spread-apply                                 17.3580+-1.1964     !     31.5833+-1.6596        ! definitely 1.8195x slower
   call-spread-call                                   6.0394+-0.1774     !     24.9599+-0.6710        ! definitely 4.1328x slower
   captured-assignments                               0.4768+-0.0179     ?      0.4884+-0.0697        ? might be 1.0243x slower
   cast-int-to-double                                 5.2884+-0.0258     ?      5.3094+-0.0543        ?
   cell-argument                                      8.5227+-0.1246     ?      8.8488+-0.6758        ? might be 1.0383x slower
   cfg-simplify                                       2.9098+-0.1369            2.8330+-0.1209          might be 1.0271x faster
   chain-getter-access                               10.0680+-0.1349           10.0254+-0.1750        
   cmpeq-obj-to-obj-other                            11.5928+-1.3747     ?     11.9969+-0.7984        ? might be 1.0349x slower
   constant-test                                      4.9227+-0.0299            4.9205+-0.0623        
   DataView-custom-properties                        39.6618+-1.2995           39.1096+-1.2928          might be 1.0141x faster
   delay-tear-off-arguments-strictmode               21.3940+-1.5909     ^     14.2245+-1.4681        ^ definitely 1.5040x faster
   deltablue-varargs                                181.3296+-1.9218     !    202.8445+-1.5379        ! definitely 1.1187x slower
   destructuring-arguments                            5.2181+-0.1088     !     17.2683+-1.1020        ! definitely 3.3093x slower
   destructuring-swap                                 5.0476+-0.0418            5.0198+-0.0327        
   direct-arguments-getbyval                          0.9563+-0.0470     !      1.2015+-0.0519        ! definitely 1.2564x slower
   div-boolean-double                                 5.1892+-0.0365     ?      5.1921+-0.0063        ?
   div-boolean                                        7.8449+-0.2864     ?      7.9229+-0.2491        ?
   double-get-by-val-out-of-bounds                    4.4637+-0.0989            4.4186+-0.0474          might be 1.0102x faster
   double-pollution-getbyval                          8.8902+-0.0753            8.8330+-0.0383        
   double-pollution-putbyoffset                       4.1302+-0.0696     ?      4.1768+-0.0511        ? might be 1.0113x slower
   double-to-int32-typed-array-no-inline              2.2805+-0.0984            2.2174+-0.0864          might be 1.0284x faster
   double-to-int32-typed-array                        1.9027+-0.0420     ?      1.9681+-0.1436        ? might be 1.0343x slower
   double-to-uint32-typed-array-no-inline             2.2585+-0.0869     ?      2.3159+-0.0719        ? might be 1.0254x slower
   double-to-uint32-typed-array                       2.0577+-0.1435            2.0318+-0.1428          might be 1.0127x faster
   elidable-new-object-dag                           44.6996+-1.7341     ?     45.1471+-1.4622        ? might be 1.0100x slower
   elidable-new-object-roflcopter                    47.9990+-2.1137     ?     48.1162+-1.4348        ?
   elidable-new-object-then-call                     39.1941+-2.7395     ?     39.6864+-1.4742        ? might be 1.0126x slower
   elidable-new-object-tree                          45.5476+-2.2245     ?     46.4419+-1.9910        ? might be 1.0196x slower
   empty-string-plus-int                              5.3222+-0.0782     ?      5.5485+-0.4114        ? might be 1.0425x slower
   emscripten-cube2hash                              39.2718+-1.6096     ?     40.1305+-1.4285        ? might be 1.0219x slower
   exit-length-on-plain-object                       14.1991+-0.5177           13.9755+-0.8267          might be 1.0160x faster
   external-arguments-getbyval                        1.3825+-0.0361     ^      1.1838+-0.0397        ^ definitely 1.1679x faster
   external-arguments-putbyval                        2.0158+-0.0306     !      2.3329+-0.1640        ! definitely 1.1573x slower
   fixed-typed-array-storage-var-index                1.2332+-0.0257            1.2162+-0.0100          might be 1.0140x faster
   fixed-typed-array-storage                          0.8810+-0.0322     ?      0.9222+-0.0851        ? might be 1.0468x slower
   Float32Array-matrix-mult                           4.4539+-0.2833            4.3785+-0.1749          might be 1.0172x faster
   Float32Array-to-Float64Array-set                  58.6958+-3.3470           57.6047+-1.5853          might be 1.0189x faster
   Float64Array-alloc-long-lived                     73.2237+-1.6983           72.5228+-1.2552        
   Float64Array-to-Int16Array-set                    70.9159+-1.0545           70.6936+-1.6639        
   fold-double-to-int                                15.1743+-0.2741     ?     15.8724+-0.9338        ? might be 1.0460x slower
   fold-get-by-id-to-multi-get-by-offset-rare-int   
                                                     10.1990+-1.0486     ?     10.4776+-0.9626        ? might be 1.0273x slower
   fold-get-by-id-to-multi-get-by-offset              9.9266+-1.4890     ?     10.0684+-1.5731        ? might be 1.0143x slower
   fold-multi-get-by-offset-to-get-by-offset   
                                                      8.2025+-0.8273            8.1991+-2.0772        
   fold-multi-get-by-offset-to-poly-get-by-offset   
                                                      9.1453+-1.3455            8.8655+-0.8686          might be 1.0316x faster
   fold-multi-put-by-offset-to-poly-put-by-offset   
                                                      8.5237+-0.5916     ?      9.0015+-0.8627        ? might be 1.0561x slower
   fold-multi-put-by-offset-to-put-by-offset   
                                                      6.5721+-1.7099     ^      4.5703+-0.0696        ^ definitely 1.4380x faster
   fold-multi-put-by-offset-to-replace-or-transition-put-by-offset   
                                                      9.3901+-0.3974            9.1227+-0.4649          might be 1.0293x faster
   fold-put-by-id-to-multi-put-by-offset              9.9117+-1.1066            9.8844+-1.0134        
   fold-put-structure                                 6.2134+-1.3981            4.7370+-1.0329          might be 1.3117x faster
   for-of-iterate-array-entries                       4.5640+-0.1435            4.4607+-0.1183          might be 1.0232x faster
   for-of-iterate-array-keys                          3.8091+-0.1270            3.7777+-0.1251        
   for-of-iterate-array-values                        3.6397+-0.1482     ?      3.7272+-0.1953        ? might be 1.0240x slower
   fround                                            20.2495+-0.8432     ?     20.4237+-0.8198        ?
   ftl-library-inlining-dataview                     80.5157+-1.8920           77.0192+-1.6499          might be 1.0454x faster
   ftl-library-inlining                              76.9821+-14.7738          75.6729+-17.1504         might be 1.0173x faster
   function-dot-apply                                 1.5002+-0.0270     !      1.8845+-0.1164        ! definitely 1.2562x slower
   function-test                                      3.2892+-0.0493     ?      3.4031+-0.1722        ? might be 1.0346x slower
   function-with-eval                               128.4430+-4.5534     ^     94.5411+-3.5651        ^ definitely 1.3586x faster
   gcse-poly-get-less-obvious                        19.2656+-1.3417           18.5206+-0.6295          might be 1.0402x faster
   gcse-poly-get                                     21.7214+-1.3384     ?     22.5645+-2.2093        ? might be 1.0388x slower
   gcse                                               4.2562+-0.0280     ?      4.3004+-0.0503        ? might be 1.0104x slower
   get-by-id-bimorphic-check-structure-elimination-simple   
                                                      2.7181+-0.0194     ?      2.7362+-0.0551        ?
   get-by-id-bimorphic-check-structure-elimination   
                                                      6.0959+-0.0588            6.0878+-0.2456        
   get-by-id-chain-from-try-block                     8.1543+-0.1445            7.0035+-1.1210          might be 1.1643x faster
   get-by-id-check-structure-elimination              5.1170+-0.1482     ?      5.1704+-0.1173        ? might be 1.0104x slower
   get-by-id-proto-or-self                           18.7258+-0.6064     ^     17.5041+-0.5120        ^ definitely 1.0698x faster
   get-by-id-quadmorphic-check-structure-elimination-simple   
                                                      2.8955+-0.0384     ?      2.9419+-0.0988        ? might be 1.0160x slower
   get-by-id-self-or-proto                           18.3523+-1.1115           17.0832+-0.4751          might be 1.0743x faster
   get-by-val-out-of-bounds                           4.3057+-0.1117            4.2981+-0.0612        
   get_callee_monomorphic                             3.6626+-0.1076     ?      3.7227+-0.2364        ? might be 1.0164x slower
   get_callee_polymorphic                             3.9410+-0.6369            3.5183+-0.4027          might be 1.1201x faster
   getter-no-activation                               5.3969+-0.4493     ^      4.2830+-0.0792        ^ definitely 1.2601x faster
   getter-richards                                  121.8851+-3.3198     ?    126.0511+-10.2824       ? might be 1.0342x slower
   getter                                             5.0717+-0.0410     !      6.3139+-0.6114        ! definitely 1.2449x slower
   global-var-const-infer-fire-from-opt               0.8617+-0.0176     ?      0.8796+-0.0854        ? might be 1.0208x slower
   global-var-const-infer                             0.9307+-0.1311            0.8925+-0.1305          might be 1.0428x faster
   HashMap-put-get-iterate-keys                      26.3513+-0.1736     ?     26.7427+-0.7182        ? might be 1.0149x slower
   HashMap-put-get-iterate                           26.2697+-0.4626     ?     26.4187+-0.5611        ?
   HashMap-string-put-get-iterate                    27.2253+-0.7928           27.1683+-1.1587        
   hoist-make-rope                                   11.8115+-1.0004     ?     12.1286+-0.4142        ? might be 1.0268x slower
   hoist-poly-check-structure-effectful-loop   
                                                      5.0406+-0.0556     ?      5.0575+-0.1150        ?
   hoist-poly-check-structure                         3.6597+-0.0521     ?      3.7184+-0.0529        ? might be 1.0160x slower
   imul-double-only                                   8.5562+-0.7061     ?      8.6226+-0.1911        ?
   imul-int-only                                      9.8023+-0.1701     ?     10.3704+-0.9784        ? might be 1.0579x slower
   imul-mixed                                         8.3955+-0.4162     ?      8.8667+-0.4955        ? might be 1.0561x slower
   in-four-cases                                     18.9094+-0.3386           18.7487+-0.1410        
   in-one-case-false                                 10.0959+-0.4155     ?     10.4620+-0.4008        ? might be 1.0363x slower
   in-one-case-true                                  10.2759+-0.3670     ?     10.7109+-0.6159        ? might be 1.0423x slower
   in-two-cases                                      10.4377+-0.3131           10.2596+-0.4116          might be 1.0174x faster
   indexed-properties-in-objects                      2.9023+-0.0764     ?      2.9194+-0.0231        ?
   infer-closure-const-then-mov-no-inline             3.7555+-0.0690            3.6036+-0.1065          might be 1.0422x faster
   infer-closure-const-then-mov                      19.3493+-1.1433     ^     17.2740+-0.5206        ^ definitely 1.1201x faster
   infer-closure-const-then-put-to-scope-no-inline   
                                                     12.0240+-0.7870           11.7476+-0.1343          might be 1.0235x faster
   infer-closure-const-then-put-to-scope             22.7669+-1.3984     ?     23.3833+-1.7187        ? might be 1.0271x slower
   infer-closure-const-then-reenter-no-inline   
                                                     49.2767+-1.3583           48.8374+-1.3068        
   infer-closure-const-then-reenter                  23.1223+-1.3124     !    123.6871+-2.7920        ! definitely 5.3493x slower
   infer-constant-global-property                    31.3879+-1.7937           31.1616+-2.7796        
   infer-constant-property                            2.6959+-0.0345     ?      2.7125+-0.0196        ?
   infer-one-time-closure-ten-vars                   12.8476+-1.0622           12.3145+-0.5094          might be 1.0433x faster
   infer-one-time-closure-two-vars                   12.0057+-0.2441     ?     12.1625+-1.0409        ? might be 1.0131x slower
   infer-one-time-closure                            12.0015+-0.8442     ?     12.1133+-0.8221        ?
   infer-one-time-deep-closure                       21.0460+-1.0653     ?     21.5560+-1.5585        ? might be 1.0242x slower
   inline-arguments-access                            1.4402+-0.0702     !      4.2520+-0.1272        ! definitely 2.9524x slower
   inline-arguments-aliased-access                    1.7471+-0.0563     !      4.3171+-0.2038        ! definitely 2.4710x slower
   inline-arguments-local-escape                     13.7960+-1.6183     ^      4.4342+-0.2971        ^ definitely 3.1113x faster
   inline-get-scoped-var                              4.6211+-0.1860     ^      4.1538+-0.0290        ^ definitely 1.1125x faster
   inlined-put-by-id-transition                      10.5100+-0.2167           10.4991+-0.2377        
   int-or-other-abs-then-get-by-val                   4.9626+-0.0603     ?      5.0149+-0.1310        ? might be 1.0105x slower
   int-or-other-abs-zero-then-get-by-val             17.6873+-1.5964           16.7367+-0.5435          might be 1.0568x faster
   int-or-other-add-then-get-by-val                   4.4602+-0.2903            4.2980+-0.0273          might be 1.0377x faster
   int-or-other-add                                   5.3402+-0.0675            5.3112+-0.0275        
   int-or-other-div-then-get-by-val                   4.2559+-0.0569            4.1961+-0.0570          might be 1.0142x faster
   int-or-other-max-then-get-by-val                   4.3458+-0.0116     ?      4.3707+-0.1127        ?
   int-or-other-min-then-get-by-val                   4.4704+-0.0593            4.3972+-0.0377          might be 1.0166x faster
   int-or-other-mod-then-get-by-val                   3.9224+-0.0384            3.8685+-0.0759          might be 1.0139x faster
   int-or-other-mul-then-get-by-val                   4.0094+-0.0248     ?      4.0282+-0.1109        ?
   int-or-other-neg-then-get-by-val                   4.7043+-0.0949            4.6481+-0.0526          might be 1.0121x faster
   int-or-other-neg-zero-then-get-by-val             17.4395+-1.3705     ?     17.4657+-1.4012        ?
   int-or-other-sub-then-get-by-val                   4.3718+-0.0419            4.3665+-0.0356        
   int-or-other-sub                                   3.5269+-0.0288            3.5150+-0.0425        
   int-overflow-local                                 4.3295+-0.0408            4.2726+-0.1334          might be 1.0133x faster
   Int16Array-alloc-long-lived                       50.8427+-2.3988           50.7721+-1.2607        
   Int16Array-bubble-sort-with-byteLength            21.4179+-0.4376     ?     24.3806+-5.3940        ? might be 1.1383x slower
   Int16Array-bubble-sort                            21.6378+-0.6571     ?     22.0357+-1.4224        ? might be 1.0184x slower
   Int16Array-load-int-mul                            1.4740+-0.0089            1.4679+-0.0114        
   Int16Array-to-Int32Array-set                      59.0459+-1.7402     ?     59.6632+-3.1327        ? might be 1.0105x slower
   Int32Array-alloc-large                            23.9794+-0.7220     ?     24.5577+-0.8429        ? might be 1.0241x slower
   Int32Array-alloc-long-lived                       57.7323+-1.6962           55.8142+-1.4536          might be 1.0344x faster
   Int32Array-alloc                                   3.5662+-0.3933            3.3320+-0.1213          might be 1.0703x faster
   Int32Array-Int8Array-view-alloc                    7.7539+-1.1361     ?      7.9190+-1.2548        ? might be 1.0213x slower
   int52-spill                                        6.4653+-0.0545     ^      6.3186+-0.0481        ^ definitely 1.0232x faster
   Int8Array-alloc-long-lived                        46.3286+-1.7351     ?     47.5632+-1.3034        ? might be 1.0267x slower
   Int8Array-load-with-byteLength                     3.3155+-0.0665     ?      3.3427+-0.0339        ?
   Int8Array-load                                     3.3503+-0.1065            3.2932+-0.0294          might be 1.0173x faster
   integer-divide                                    11.2214+-0.1528     !     11.6576+-0.1335        ! definitely 1.0389x slower
   integer-modulo                                     2.0173+-0.0734     ?      2.0398+-0.1137        ? might be 1.0112x slower
   large-int-captured                                 7.8016+-1.3366     ^      5.5686+-0.0773        ^ definitely 1.4010x faster
   large-int-neg                                     17.0398+-1.1413     ?     17.0661+-0.8626        ?
   large-int                                         15.8834+-1.5409     ?     16.3064+-1.8071        ? might be 1.0266x slower
   logical-not                                        4.5280+-0.0529     ?      4.5280+-0.0228        ?
   lots-of-fields                                    13.4087+-0.3484     ?     13.4416+-1.2504        ?
   make-indexed-storage                               2.9440+-0.2073     ?      3.0500+-0.0539        ? might be 1.0360x slower
   make-rope-cse                                      4.6322+-0.3653            4.5820+-0.4345          might be 1.0109x faster
   marsaglia-larger-ints                             35.8851+-0.8029           35.8750+-1.1125        
   marsaglia-osr-entry                               23.9246+-1.7671           22.9251+-0.6325          might be 1.0436x faster
   max-boolean                                        2.4577+-0.0424            2.4371+-0.0328        
   method-on-number                                  17.5167+-0.3456           17.4048+-0.3676        
   min-boolean                                        2.4742+-0.0326            2.4296+-0.0297          might be 1.0183x faster
   minus-boolean-double                               3.1858+-0.1419            3.1725+-0.0625        
   minus-boolean                                      2.3938+-0.0902            2.2947+-0.0211          might be 1.0432x faster
   misc-strict-eq                                    37.6575+-1.1902           37.6318+-1.1635        
   mod-boolean-double                                11.2262+-0.5222           11.0247+-0.2976          might be 1.0183x faster
   mod-boolean                                        7.9851+-0.2871     ?      8.0659+-0.4693        ? might be 1.0101x slower
   mul-boolean-double                                 3.6695+-0.0564     ?      3.6796+-0.0574        ?
   mul-boolean                                        2.8704+-0.0647            2.8656+-0.0212        
   neg-boolean                                        3.1907+-0.0461            3.1732+-0.0552        
   negative-zero-divide                               0.3549+-0.0146            0.3494+-0.0138          might be 1.0157x faster
   negative-zero-modulo                               0.3706+-0.0169            0.3554+-0.0227          might be 1.0429x faster
   negative-zero-negate                               0.3221+-0.0083     ?      0.3260+-0.0182        ? might be 1.0123x slower
   nested-function-parsing                           21.6555+-0.7431     !     44.5251+-1.8346        ! definitely 2.0561x slower
   new-array-buffer-dead                              2.7895+-0.0395            2.7755+-0.0907        
   new-array-buffer-push                              7.3080+-0.8165            6.5614+-0.2065          might be 1.1138x faster
   new-array-dead                                    12.6055+-0.2789     ?     12.6152+-0.3897        ?
   new-array-push                                     4.0273+-0.3797            3.8538+-0.1142          might be 1.0450x faster
   number-test                                        2.9594+-0.0174     !      2.9899+-0.0124        ! definitely 1.0103x slower
   object-closure-call                                5.5707+-0.0496     ?      5.6145+-0.1639        ?
   object-test                                        3.0770+-0.0255     ?      3.0964+-0.0360        ?
   obvious-sink-pathology-taken                     147.4931+-2.4009          145.9941+-2.1380          might be 1.0103x faster
   obvious-sink-pathology                           141.1209+-1.5270          139.8644+-1.4646        
   obviously-elidable-new-object                     35.5533+-1.3028           35.3221+-1.1873        
   plus-boolean-arith                                 2.5422+-0.0733            2.5179+-0.0398        
   plus-boolean-double                                3.1736+-0.0667     ?      3.2214+-0.1387        ? might be 1.0151x slower
   plus-boolean                                       2.4092+-0.0830            2.3930+-0.0750        
   poly-chain-access-different-prototypes-simple   
                                                      3.3042+-0.0609     ?      3.3204+-0.0595        ?
   poly-chain-access-different-prototypes             2.7035+-0.2689            2.5977+-0.0366          might be 1.0408x faster
   poly-chain-access-simpler                          3.2927+-0.0669     ?      3.3143+-0.0544        ?
   poly-chain-access                                  2.8394+-0.0858     ^      2.6106+-0.1137        ^ definitely 1.0876x faster
   poly-stricteq                                     58.6075+-1.5167           57.9830+-1.7438          might be 1.0108x faster
   polymorphic-array-call                             1.3532+-0.1702            1.3053+-0.1876          might be 1.0367x faster
   polymorphic-get-by-id                              3.0854+-0.0707     ?      3.1829+-0.0920        ? might be 1.0316x slower
   polymorphic-put-by-id                             29.7537+-3.0295     ?     30.7596+-1.6062        ? might be 1.0338x slower
   polymorphic-structure                             15.0833+-0.2304     ?     15.5603+-1.0034        ? might be 1.0316x slower
   polyvariant-monomorphic-get-by-id                  8.8531+-0.8326            8.4688+-0.1626          might be 1.0454x faster
   proto-getter-access                               10.0885+-0.1768           10.0450+-0.2142        
   put-by-id-replace-and-transition                   8.8181+-0.3488     ?      8.8289+-0.2731        ?
   put-by-id-slightly-polymorphic                     2.8625+-0.0176            2.8037+-0.0662          might be 1.0210x faster
   put-by-id                                         13.5565+-0.3939           13.5031+-0.8062        
   put-by-val-direct                                  0.5921+-0.0314            0.5714+-0.0133          might be 1.0362x faster
   put-by-val-large-index-blank-indexing-type   
                                                      6.1239+-0.7834     ?      7.1712+-1.2868        ? might be 1.1710x slower
   put-by-val-machine-int                             2.6144+-0.0849     ?      2.6367+-0.1562        ?
   rare-osr-exit-on-local                            15.0093+-0.1780     ?     15.7513+-0.9161        ? might be 1.0494x slower
   register-pressure-from-osr                        22.1305+-0.9900           21.7078+-0.2673          might be 1.0195x faster
   setter                                             5.1576+-0.0495     ?      5.7961+-0.7765        ? might be 1.1238x slower
   simple-activation-demo                            25.6074+-0.7605     ?     26.0972+-1.6388        ? might be 1.0191x slower
   simple-getter-access                              13.1194+-0.9512           12.8645+-0.2830          might be 1.0198x faster
   simple-poly-call-nested                            8.1116+-0.2371     ?      8.2921+-0.1099        ? might be 1.0223x slower
   simple-poly-call                                   1.3296+-0.1254            1.3285+-0.0959        
   sin-boolean                                       24.0593+-1.8701           23.4427+-1.5779          might be 1.0263x faster
   sinkable-new-object-dag                           70.2107+-1.9180           69.9739+-1.7544        
   sinkable-new-object-taken                         52.1914+-2.9084     ?     54.6195+-3.9451        ? might be 1.0465x slower
   sinkable-new-object                               40.1091+-1.6442           39.7052+-1.3105          might be 1.0102x faster
   slow-array-profile-convergence                     2.7955+-0.1770            2.7048+-0.0918          might be 1.0335x faster
   slow-convergence                                   3.2128+-0.1472     ?      3.2174+-0.0485        ?
   sparse-conditional                                 1.1125+-0.0203            1.1029+-0.0278        
   splice-to-remove                                  16.8130+-0.8996     ?     16.8183+-1.5070        ?
   string-char-code-at                               16.1733+-0.4678     ?     16.2556+-0.6729        ?
   string-concat-object                               2.3987+-0.1789            2.3842+-0.1709        
   string-concat-pair-object                          2.2861+-0.0512     ?      2.3960+-0.1871        ? might be 1.0481x slower
   string-concat-pair-simple                         11.5107+-0.6851     ?     11.5180+-1.0604        ?
   string-concat-simple                              12.1667+-1.1216           11.6713+-0.5500          might be 1.0424x faster
   string-cons-repeat                                 8.2025+-0.9493            7.7374+-0.4247          might be 1.0601x faster
   string-cons-tower                                  8.7757+-1.0525            8.2312+-0.8040          might be 1.0661x faster
   string-equality                                   17.4707+-0.4443           17.4655+-0.4353        
   string-get-by-val-big-char                         7.1091+-0.0829            7.0916+-0.0563        
   string-get-by-val-out-of-bounds-insane             3.7678+-0.0806            3.7659+-0.0323        
   string-get-by-val-out-of-bounds                    5.2863+-0.0378            5.1980+-0.0714          might be 1.0170x faster
   string-get-by-val                                  3.2426+-0.0421     !      3.3960+-0.0700        ! definitely 1.0473x slower
   string-hash                                        2.0335+-0.0350            2.0141+-0.0335        
   string-long-ident-equality                        14.2249+-0.0780     ?     14.6000+-0.9823        ? might be 1.0264x slower
   string-out-of-bounds                              15.1638+-0.7786           15.0729+-0.5973        
   string-repeat-arith                               35.8065+-0.6544           34.5970+-1.6211          might be 1.0350x faster
   string-sub                                        64.2106+-3.0903     ?     68.0066+-4.7424        ? might be 1.0591x slower
   string-test                                        2.9296+-0.1078     ?      2.9728+-0.0301        ? might be 1.0147x slower
   string-var-equality                               31.5003+-1.6464           30.9654+-2.2979          might be 1.0173x faster
   structure-hoist-over-transitions                   2.5172+-0.1064     ?      2.5671+-0.1308        ? might be 1.0198x slower
   substring-concat-weird                            40.2897+-2.3720           39.0346+-1.2074          might be 1.0322x faster
   substring-concat                                  40.6621+-1.1766     ?     40.9687+-1.1856        ?
   substring                                         47.2465+-2.6712     ?     47.5990+-3.3464        ?
   switch-char-constant                               2.7070+-0.0708     ?      2.7304+-0.0460        ?
   switch-char                                        6.3708+-0.5926     ?      7.4512+-1.0025        ? might be 1.1696x slower
   switch-constant                                    8.0514+-0.1773     ?      8.1058+-0.3141        ?
   switch-string-basic-big-var                       15.3012+-0.2235           15.0091+-0.2259          might be 1.0195x faster
   switch-string-basic-big                           13.9205+-0.1883     ?     14.5605+-1.4762        ? might be 1.0460x slower
   switch-string-basic-var                           14.5863+-0.1473     ?     15.3944+-1.1663        ? might be 1.0554x slower
   switch-string-basic                               14.8356+-2.0343           13.8768+-1.3520          might be 1.0691x faster
   switch-string-big-length-tower-var                20.2087+-1.2477     ?     21.8391+-1.8508        ? might be 1.0807x slower
   switch-string-length-tower-var                    15.6849+-1.8050     ?     16.3818+-1.8776        ? might be 1.0444x slower
   switch-string-length-tower                        12.7873+-0.3483     ?     13.8520+-1.8304        ? might be 1.0833x slower
   switch-string-short                               13.6672+-1.6745     ?     14.0314+-1.8732        ? might be 1.0266x slower
   switch                                            12.1479+-0.4476     ?     12.2706+-0.3697        ? might be 1.0101x slower
   tear-off-arguments-simple                          1.9020+-0.0494     !      3.2655+-0.1397        ! definitely 1.7168x slower
   tear-off-arguments                                 2.8190+-0.0892     !      4.4437+-0.1124        ! definitely 1.5763x slower
   temporal-structure                                13.3230+-1.1906           12.5909+-0.6099          might be 1.0581x faster
   to-int32-boolean                                  14.0263+-0.9309           13.5819+-0.1317          might be 1.0327x faster
   undefined-property-access                        384.9192+-2.7036     ?    387.3313+-9.4170        ?
   undefined-test                                     3.0173+-0.0381     ?      3.0363+-0.0199        ?
   unprofiled-licm                                   23.0422+-0.7026     ?     23.5144+-1.1849        ? might be 1.0205x slower
   varargs-call                                      15.4869+-0.9142           15.0684+-0.9673          might be 1.0278x faster
   varargs-construct-inline                          26.7935+-0.5220     ^     21.9454+-1.1826        ^ definitely 1.2209x faster
   varargs-construct                                 53.0739+-1.2479     ^     31.1738+-0.4344        ^ definitely 1.7025x faster
   varargs-inline                                     8.4015+-0.1392     !      8.9392+-0.1207        ! definitely 1.0640x slower
   varargs-strict-mode                               15.5480+-1.1111     ^      9.6472+-0.2742        ^ definitely 1.6117x faster
   varargs                                           15.3287+-1.4077     ^      9.6080+-0.2812        ^ definitely 1.5954x faster
   weird-inlining-const-prop                          2.4106+-0.1055            2.3115+-0.1673          might be 1.0429x faster

   &lt;geometric&gt;                                        8.4082+-0.0184     !      8.5859+-0.0409        ! definitely 1.0211x slower

                                                        TipOfTree                 VarOffset                                     
AsmBench:
   bigfib.cpp                                       496.4717+-3.9151          492.5236+-2.5813        
   cray.c                                           432.0098+-2.9190          431.3133+-2.2351        
   dry.c                                            490.1071+-2.8983     ?    491.6430+-3.3350        ?
   FloatMM.c                                        725.7777+-1.6946     ?    727.5629+-2.1993        ?
   gcc-loops.cpp                                   4260.0028+-16.2461    ?   4262.3150+-14.4032       ?
   n-body.c                                         987.6784+-5.2987          987.2420+-4.4006        
   Quicksort.c                                      444.7657+-2.8900     ?    446.0485+-9.6435        ?
   stepanov_container.cpp                          3585.8910+-26.4753        3571.6336+-24.7367       
   Towers.c                                         268.1252+-1.3207     ?    270.2616+-7.8826        ?

   &lt;geometric&gt;                                      801.9935+-2.5337     ?    802.2153+-2.8206        ? might be 1.0003x slower

                                                        TipOfTree                 VarOffset                                     
CompressionBench:
   huffman                                          388.0924+-4.1394     ^    356.9426+-5.2978        ^ definitely 1.0873x faster
   arithmetic-simple                                405.9687+-3.5749          401.5917+-2.6309          might be 1.0109x faster
   arithmetic-precise                               302.5660+-5.4995     ?    305.2662+-3.9765        ?
   arithmetic-complex-precise                       305.9331+-4.1077          300.8577+-4.2975          might be 1.0169x faster
   arithmetic-precise-order-0                       440.6399+-5.8884          431.3855+-5.4651          might be 1.0215x faster
   arithmetic-precise-order-1                       342.5976+-4.7162     ^    327.4685+-3.9371        ^ definitely 1.0462x faster
   arithmetic-precise-order-2                       381.4177+-5.6730     ^    367.3711+-6.8823        ^ definitely 1.0382x faster
   arithmetic-simple-order-1                        432.7577+-5.0733     ^    421.5168+-5.1200        ^ definitely 1.0267x faster
   arithmetic-simple-order-2                        487.1242+-7.2715     ^    472.7613+-6.3532        ^ definitely 1.0304x faster
   lz-string                                        330.5444+-8.2041          326.0296+-5.7456          might be 1.0138x faster

   &lt;geometric&gt;                                      377.3027+-1.0633     ^    367.0321+-2.5581        ^ definitely 1.0280x faster

                                                        TipOfTree                 VarOffset                                     

                                                        TipOfTree                 VarOffset                                     
Geomean of preferred means:
   &lt;scaled-result&gt;                                   63.9458+-0.3582           63.5785+-0.1472          might be 1.0058x faster</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1079125</commentid>
    <comment_count>85</comment_count>
      <attachid>249189</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-21 20:33:41 -0700</bug_when>
    <thetext>Created attachment 249189
some more fixing to get to net speed-up</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1079152</commentid>
    <comment_count>86</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-22 09:38:11 -0700</bug_when>
    <thetext>I fixed the dead-access-to-captured-variable-preceded-by-a-live-store regression. It&apos;s the good old DCE on GetClosureVar issue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1079171</commentid>
    <comment_count>87</comment_count>
      <attachid>249204</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-22 13:11:28 -0700</bug_when>
    <thetext>Created attachment 249204
64-bit is complete

Now I just need to port to 32-bit.


Latest perf results:

Benchmark report for SunSpider, LongSpider, V8Spider, Octane, Kraken, JSRegress, AsmBench, and CompressionBench on dethklok (MacBookPro9,1).

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/pizlo/secondary/OpenSource/WebKitBuild/Release/jsc (r181829)
&quot;VarOffset&quot; at /Volumes/Data/pizlo/primary/OpenSource/WebKitBuild/Release/jsc (r181829)

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                 VarOffset                                     
SunSpider:
   3d-cube                                            4.9322+-0.0829            4.8220+-0.0660          might be 1.0229x faster
   3d-morph                                           5.6054+-0.1023            5.5866+-0.0511        
   3d-raytrace                                        6.3923+-0.1216            6.2673+-0.0913          might be 1.0199x faster
   access-binary-trees                                2.0755+-0.0593     ?      2.0907+-0.1154        ?
   access-fannkuch                                    6.0940+-0.1460     ?      6.1069+-0.1212        ?
   access-nbody                                       2.9783+-0.2156            2.9429+-0.0406          might be 1.0120x faster
   access-nsieve                                      3.3505+-0.1278            3.2049+-0.1732          might be 1.0454x faster
   bitops-3bit-bits-in-byte                           1.5922+-0.1359     ?      1.6077+-0.1602        ?
   bitops-bits-in-byte                                3.5235+-0.0331     ^      3.3596+-0.0257        ^ definitely 1.0488x faster
   bitops-bitwise-and                                 2.1643+-0.0466            2.1202+-0.0258          might be 1.0208x faster
   bitops-nsieve-bits                                 3.9432+-0.2749            3.8155+-0.0710          might be 1.0335x faster
   controlflow-recursive                              2.2068+-0.1200     ?      2.3831+-0.5845        ? might be 1.0799x slower
   crypto-aes                                         4.2832+-0.3481     ?      4.3275+-0.5604        ? might be 1.0103x slower
   crypto-md5                                         2.4620+-0.0501            2.4489+-0.0615        
   crypto-sha1                                        2.7450+-0.2418            2.6227+-0.1691          might be 1.0466x faster
   date-format-tofte                                  9.3693+-0.1013     ?      9.3881+-0.2130        ?
   date-format-xparb                                  5.6176+-0.2971            5.5451+-0.2958          might be 1.0131x faster
   math-cordic                                        3.2082+-0.0209            3.1333+-0.0586          might be 1.0239x faster
   math-partial-sums                                  5.1289+-0.1111     ?      5.3451+-0.8355        ? might be 1.0422x slower
   math-spectral-norm                                 1.9527+-0.0661            1.9515+-0.0742        
   regexp-dna                                         8.0590+-1.5616            7.2937+-0.2863          might be 1.1049x faster
   string-base64                                      4.5945+-0.2107     ?      4.7689+-0.4900        ? might be 1.0380x slower
   string-fasta                                       6.8561+-0.6618            6.6880+-0.4356          might be 1.0251x faster
   string-tagcloud                                    9.6437+-0.1189     ?      9.7797+-0.4374        ? might be 1.0141x slower
   string-unpack-code                                19.6305+-0.3922     ?     20.2646+-0.9095        ? might be 1.0323x slower
   string-validate-input                              4.9310+-0.0838     ?      4.9378+-0.2779        ?

   &lt;arithmetic&gt;                                       5.1285+-0.0567            5.1078+-0.0777          might be 1.0040x faster

                                                        TipOfTree                 VarOffset                                     
LongSpider:
   3d-cube                                         1099.5932+-18.8077    ?   1107.8401+-8.0775        ?
   3d-morph                                        1533.2281+-5.2830         1529.9788+-3.2187        
   3d-raytrace                                      730.4418+-5.7994     ?    735.4867+-5.0575        ?
   access-binary-trees                              992.5365+-4.9261     ?    996.8359+-5.8294        ?
   access-fannkuch                                  341.5399+-13.9172    ?    343.8509+-9.0972        ?
   access-nbody                                     612.6711+-2.0265     ?    618.3440+-5.2635        ?
   access-nsieve                                    873.1607+-3.8562          862.0680+-8.3486          might be 1.0129x faster
   bitops-3bit-bits-in-byte                          47.1628+-2.6914           44.9156+-0.9330          might be 1.0500x faster
   bitops-bits-in-byte                              103.7617+-3.6879     ?    104.6177+-3.4075        ?
   bitops-nsieve-bits                               692.2736+-2.6719     ?    697.0440+-5.9813        ?
   controlflow-recursive                            499.5885+-6.6634          489.8137+-15.1744         might be 1.0200x faster
   crypto-aes                                       711.3757+-10.4680    ?    713.3570+-11.2124       ?
   crypto-md5                                       550.1893+-8.2335          548.1588+-6.9722        
   crypto-sha1                                      593.0117+-5.2151     ?    600.8757+-9.6863        ? might be 1.0133x slower
   date-format-tofte                                768.2397+-10.6766         765.1396+-12.3215       
   date-format-xparb                                774.8064+-21.2522         733.7255+-22.6895         might be 1.0560x faster
   math-cordic                                      592.9007+-1.9488     ?    593.3338+-2.1848        ?
   math-partial-sums                                510.7029+-3.8226          509.4083+-5.2377        
   math-spectral-norm                               565.1184+-1.2991     ?    567.0823+-4.3847        ?
   string-base64                                    363.4379+-2.5350          363.2817+-5.6761        
   string-fasta                                     423.6615+-4.4023     ?    427.4296+-7.1136        ?
   string-tagcloud                                  217.9506+-6.0811          216.2365+-3.1168        

   &lt;geometric&gt;                                      505.1614+-2.1126          503.4029+-2.0859          might be 1.0035x faster

                                                        TipOfTree                 VarOffset                                     
V8Spider:
   crypto                                            54.9220+-0.9519           54.4576+-1.9372        
   deltablue                                         93.4203+-6.9801           89.4571+-7.3775          might be 1.0443x faster
   earley-boyer                                      42.2155+-0.4651           41.9905+-0.8088        
   raytrace                                          42.0376+-6.2034           38.6932+-1.4829          might be 1.0864x faster
   regexp                                            68.8643+-1.5642           68.3782+-1.3744        
   richards                                          79.9442+-3.2038           79.5358+-1.8252        
   splay                                             38.7885+-2.3418           38.3063+-1.6813          might be 1.0126x faster

   &lt;geometric&gt;                                       56.8765+-1.6118           55.6006+-1.0697          might be 1.0229x faster

                                                        TipOfTree                 VarOffset                                     
Octane:
   encrypt                                           0.20201+-0.00071    ?     0.20326+-0.00097       ?
   decrypt                                           3.59199+-0.04997    ?     3.60693+-0.04090       ?
   deltablue                                x2       0.20657+-0.00238          0.20544+-0.00134       
   earley                                            0.69826+-0.00641    ^     0.56099+-0.00400       ^ definitely 1.2447x faster
   boyer                                             5.75250+-0.02877          5.69160+-0.03383         might be 1.0107x faster
   navier-stokes                            x2       5.19088+-0.00586    ?     5.21957+-0.04326       ?
   raytrace                                 x2       1.24228+-0.04558    ?     1.26245+-0.04569       ? might be 1.0162x slower
   richards                                 x2       0.12375+-0.00133          0.12239+-0.00088         might be 1.0111x faster
   splay                                    x2       0.38303+-0.00266    ?     0.38364+-0.00109       ?
   regexp                                   x2      33.19037+-0.17983         33.04567+-0.13597       
   pdfjs                                    x2      45.57166+-0.92850         45.04559+-0.54423         might be 1.0117x faster
   mandreel                                 x2      50.25440+-0.21808         50.01300+-0.43212       
   gbemu                                    x2      41.49870+-2.33416         39.55027+-0.66128         might be 1.0493x faster
   closure                                           0.56376+-0.00300          0.56128+-0.00288       
   jquery                                            7.15211+-0.06428          7.12430+-0.13150       
   box2d                                    x2      12.74157+-0.18356    ^    12.24525+-0.11695       ^ definitely 1.0405x faster
   zlib                                     x2     388.76792+-14.06640       382.76324+-15.36088        might be 1.0157x faster
   typescript                               x2     820.06462+-14.03307   ?   820.55098+-17.47605      ?

   &lt;geometric&gt;                                       6.75245+-0.04271    ^     6.64982+-0.02445       ^ definitely 1.0154x faster

                                                        TipOfTree                 VarOffset                                     
Kraken:
   ai-astar                                          266.617+-2.845            262.981+-1.481           might be 1.0138x faster
   audio-beat-detection                              110.622+-0.786      ?     113.091+-6.672         ? might be 1.0223x slower
   audio-dft                                         148.771+-3.253      ?     149.312+-3.971         ?
   audio-fft                                          88.416+-2.642             86.316+-2.728           might be 1.0243x faster
   audio-oscillator                                  208.598+-2.652      ?     210.125+-3.856         ?
   imaging-darkroom                                  106.197+-1.851            105.496+-2.055         
   imaging-desaturate                                 63.311+-1.481      ?      63.552+-1.931         ?
   imaging-gaussian-blur                             114.238+-2.245            112.267+-0.976           might be 1.0176x faster
   json-parse-financial                               48.009+-1.351      ^      44.773+-1.002         ^ definitely 1.0723x faster
   json-stringify-tinderbox                           55.308+-0.758      ?      57.647+-1.966         ? might be 1.0423x slower
   stanford-crypto-aes                                60.794+-2.772             59.802+-0.854           might be 1.0166x faster
   stanford-crypto-ccm                                54.928+-7.694             52.555+-4.379           might be 1.0451x faster
   stanford-crypto-pbkdf2                            167.915+-1.908            167.325+-4.431         
   stanford-crypto-sha256-iterative                   55.339+-1.751      ?      55.454+-2.057         ?

   &lt;arithmetic&gt;                                      110.647+-0.864            110.050+-1.061           might be 1.0054x faster

                                                        TipOfTree                 VarOffset                                     
JSRegress:
   abs-boolean                                        2.6134+-0.0238     ?      2.6195+-0.0693        ?
   adapt-to-double-divide                            16.8341+-0.3381           16.6994+-0.3995        
   aliased-arguments-getbyval                         0.8483+-0.0394     !      1.1965+-0.0689        ! definitely 1.4106x slower
   allocate-big-object                                2.5850+-0.0626     ?      2.6624+-0.0998        ? might be 1.0299x slower
   arguments-named-and-reflective                     9.2603+-0.1054     !     12.5426+-0.4376        ! definitely 1.3544x slower
   arguments-out-of-bounds                           19.4351+-2.0528     ^     14.8372+-0.3443        ^ definitely 1.3099x faster
   arguments-strict-mode                              9.4945+-1.7099     ?     11.4707+-0.3131        ? might be 1.2081x slower
   arguments                                          7.8692+-0.2404     !     10.1773+-0.2612        ! definitely 1.2933x slower
   arity-mismatch-inlining                            0.7992+-0.0245     ?      0.8063+-0.0130        ?
   array-access-polymorphic-structure                 6.6423+-0.1320     ?      7.2634+-1.0628        ? might be 1.0935x slower
   array-nonarray-polymorhpic-access                 34.8418+-0.3918     ?     35.3311+-0.7382        ? might be 1.0140x slower
   array-prototype-every                             89.4722+-1.9853           86.4930+-1.5157          might be 1.0344x faster
   array-prototype-forEach                           97.8055+-31.9496          84.4849+-1.4313          might be 1.1577x faster
   array-prototype-map                               96.8150+-3.3996           95.2338+-1.6603          might be 1.0166x faster
   array-prototype-some                              89.2660+-1.3272           88.2330+-3.5067          might be 1.0117x faster
   array-splice-contiguous                           42.2039+-2.0148           41.8460+-0.5215        
   array-with-double-add                              4.1806+-0.0880            4.0797+-0.0472          might be 1.0247x faster
   array-with-double-increment                        3.2430+-0.2234     ?      3.2487+-0.1011        ?
   array-with-double-mul-add                          4.9968+-0.1152     ?      5.0650+-0.0517        ? might be 1.0136x slower
   array-with-double-sum                              3.2604+-0.1060            3.2446+-0.0367        
   array-with-int32-add-sub                           6.7792+-0.0889            6.7577+-0.0217        
   array-with-int32-or-double-sum                     3.3442+-0.0690     ?      3.4225+-0.1615        ? might be 1.0234x slower
   ArrayBuffer-DataView-alloc-large-long-lived   
                                                     34.1026+-2.1419           33.9862+-1.5561        
   ArrayBuffer-DataView-alloc-long-lived             16.2467+-1.9408           15.2227+-1.5025          might be 1.0673x faster
   ArrayBuffer-Int32Array-byteOffset                  3.5273+-0.0579     ?      3.5407+-0.3014        ?
   ArrayBuffer-Int8Array-alloc-large-long-lived   
                                                     32.6386+-1.0033     ?     33.1767+-1.2276        ? might be 1.0165x slower
   ArrayBuffer-Int8Array-alloc-long-lived-buffer   
                                                     22.1071+-0.2440     !     25.0457+-2.4593        ! definitely 1.1329x slower
   ArrayBuffer-Int8Array-alloc-long-lived            15.3454+-1.2927           15.0369+-2.0725          might be 1.0205x faster
   ArrayBuffer-Int8Array-alloc                       11.3002+-1.0332     ?     12.0415+-2.0751        ? might be 1.0656x slower
   asmjs_bool_bug                                     7.6884+-0.1452     ?      7.8267+-0.3150        ? might be 1.0180x slower
   assign-custom-setter-polymorphic                   3.1584+-0.0738     ^      2.9384+-0.0447        ^ definitely 1.0749x faster
   assign-custom-setter                               4.3654+-0.0576            4.1737+-0.2912          might be 1.0459x faster
   basic-set                                          8.3012+-0.2292     ?      8.3519+-0.4361        ?
   big-int-mul                                        3.9632+-0.0993            3.9377+-0.0565        
   boolean-test                                       3.0556+-0.0307            3.0287+-0.0484        
   branch-fold                                        3.6721+-0.0550     ?      3.6820+-0.0339        ?
   by-val-generic                                     8.0747+-0.4244     ?      8.1587+-0.4367        ? might be 1.0104x slower
   call-spread-apply                                 16.3509+-0.5089     !     31.5406+-1.6610        ! definitely 1.9290x slower
   call-spread-call                                   6.1589+-0.1679     !     25.1263+-1.5951        ! definitely 4.0797x slower
   captured-assignments                               0.4595+-0.0154            0.4546+-0.0103          might be 1.0107x faster
   cast-int-to-double                                 5.2808+-0.0299            5.2665+-0.0352        
   cell-argument                                      9.1844+-1.6701            8.6917+-0.2191          might be 1.0567x faster
   cfg-simplify                                       2.9244+-0.0413            2.8748+-0.1096          might be 1.0172x faster
   chain-getter-access                               10.1655+-0.1452           10.1057+-0.2654        
   cmpeq-obj-to-obj-other                            11.0281+-1.2083     ?     11.3328+-1.2613        ? might be 1.0276x slower
   constant-test                                      4.9730+-0.1024            4.9186+-0.0229          might be 1.0111x faster
   DataView-custom-properties                        40.2690+-1.2623           39.0569+-1.5486          might be 1.0310x faster
   delay-tear-off-arguments-strictmode               23.0118+-2.6301     ^     13.4137+-0.3394        ^ definitely 1.7155x faster
   deltablue-varargs                                181.6470+-2.2595     !    199.4470+-2.0269        ! definitely 1.0980x slower
   destructuring-arguments                            5.1739+-0.0185     !     16.8056+-0.7282        ! definitely 3.2482x slower
   destructuring-swap                                 5.1157+-0.0886     ^      4.9877+-0.0150        ^ definitely 1.0257x faster
   direct-arguments-getbyval                          0.9358+-0.0600     !      1.2183+-0.0840        ! definitely 1.3019x slower
   div-boolean-double                                 5.1771+-0.0100     ?      5.2090+-0.0476        ?
   div-boolean                                        7.8059+-0.1361     ?      7.8854+-0.2034        ? might be 1.0102x slower
   double-get-by-val-out-of-bounds                    4.7887+-0.7709            4.4100+-0.0672          might be 1.0859x faster
   double-pollution-getbyval                          8.8682+-0.1201            8.8135+-0.0419        
   double-pollution-putbyoffset                       4.1056+-0.0909     ?      4.1220+-0.0360        ?
   double-to-int32-typed-array-no-inline              2.2209+-0.0567     ?      2.2920+-0.1305        ? might be 1.0320x slower
   double-to-int32-typed-array                        1.9408+-0.0743     ?      1.9746+-0.1372        ? might be 1.0174x slower
   double-to-uint32-typed-array-no-inline             2.3682+-0.1220            2.3056+-0.0636          might be 1.0271x faster
   double-to-uint32-typed-array                       1.9592+-0.0249     ?      1.9690+-0.0426        ?
   elidable-new-object-dag                           42.6536+-1.6876     ?     44.0400+-1.8564        ? might be 1.0325x slower
   elidable-new-object-roflcopter                    48.2579+-4.7490           46.5518+-1.3365          might be 1.0366x faster
   elidable-new-object-then-call                     40.0157+-1.3151           39.2323+-1.0546          might be 1.0200x faster
   elidable-new-object-tree                          45.2661+-1.2491     ?     46.7212+-1.2318        ? might be 1.0321x slower
   empty-string-plus-int                              5.6666+-0.7371            5.4163+-0.1743          might be 1.0462x faster
   emscripten-cube2hash                              40.7569+-2.6433           39.5957+-1.1918          might be 1.0293x faster
   exit-length-on-plain-object                       14.1452+-0.7660           14.0780+-0.5585        
   external-arguments-getbyval                        1.3350+-0.0590     ^      1.1825+-0.0473        ^ definitely 1.1290x faster
   external-arguments-putbyval                        2.0893+-0.1546     ?      2.2450+-0.0438        ? might be 1.0745x slower
   fixed-typed-array-storage-var-index                1.2138+-0.0311            1.2108+-0.0310        
   fixed-typed-array-storage                          0.8584+-0.0339     !      0.9486+-0.0546        ! definitely 1.1050x slower
   Float32Array-matrix-mult                           4.3046+-0.1262     ?      4.5880+-0.4238        ? might be 1.0658x slower
   Float32Array-to-Float64Array-set                  56.9635+-1.6628     ^     53.4380+-0.6063        ^ definitely 1.0660x faster
   Float64Array-alloc-long-lived                     72.9387+-2.0272           72.4755+-1.6346        
   Float64Array-to-Int16Array-set                    68.7090+-1.0389     ?     69.6130+-2.2856        ? might be 1.0132x slower
   fold-double-to-int                                15.2243+-0.3107     ?     16.0367+-1.3148        ? might be 1.0534x slower
   fold-get-by-id-to-multi-get-by-offset-rare-int   
                                                      9.5730+-0.4440     ?     10.2976+-0.8383        ? might be 1.0757x slower
   fold-get-by-id-to-multi-get-by-offset             10.1925+-1.0248            9.4966+-0.8874          might be 1.0733x faster
   fold-multi-get-by-offset-to-get-by-offset   
                                                      9.1421+-1.1607            8.9860+-0.9770          might be 1.0174x faster
   fold-multi-get-by-offset-to-poly-get-by-offset   
                                                      9.3510+-0.8878            8.7582+-0.7896          might be 1.0677x faster
   fold-multi-put-by-offset-to-poly-put-by-offset   
                                                      8.7606+-0.7929            8.1433+-0.6423          might be 1.0758x faster
   fold-multi-put-by-offset-to-put-by-offset   
                                                      5.0073+-1.1878            4.2605+-0.5537          might be 1.1753x faster
   fold-multi-put-by-offset-to-replace-or-transition-put-by-offset   
                                                      9.2568+-0.4382     ?      9.5265+-0.1526        ? might be 1.0291x slower
   fold-put-by-id-to-multi-put-by-offset              9.2849+-0.8846     ?      9.4014+-0.7359        ? might be 1.0126x slower
   fold-put-structure                                 4.6308+-0.9609     !      6.9747+-0.2159        ! definitely 1.5062x slower
   for-of-iterate-array-entries                       4.4991+-0.0584     ?      4.7219+-0.5667        ? might be 1.0495x slower
   for-of-iterate-array-keys                          3.7204+-0.0764     ?      4.2790+-1.3859        ? might be 1.1501x slower
   for-of-iterate-array-values                        3.7830+-0.2991            3.7100+-0.1467          might be 1.0197x faster
   fround                                            20.3368+-0.5122           20.0145+-0.3672          might be 1.0161x faster
   ftl-library-inlining-dataview                     80.7778+-1.1799     !     86.0890+-2.7822        ! definitely 1.0658x slower
   ftl-library-inlining                              76.9004+-16.5954          67.4126+-1.3813          might be 1.1407x faster
   function-dot-apply                                 1.4868+-0.0318     !      1.8031+-0.0241        ! definitely 1.2127x slower
   function-test                                      3.3556+-0.0290     ^      3.2678+-0.0519        ^ definitely 1.0269x faster
   function-with-eval                               130.8863+-4.9127     ^     94.2814+-4.1896        ^ definitely 1.3883x faster
   gcse-poly-get-less-obvious                        18.9486+-1.0414     ?     19.0500+-1.3710        ?
   gcse-poly-get                                     21.0500+-1.6462     ?     22.1683+-2.2014        ? might be 1.0531x slower
   gcse                                               4.2902+-0.0379     ?      4.3122+-0.0756        ?
   get-by-id-bimorphic-check-structure-elimination-simple   
                                                      2.7406+-0.0241     !      2.7941+-0.0076        ! definitely 1.0195x slower
   get-by-id-bimorphic-check-structure-elimination   
                                                      6.1735+-0.2907            6.0441+-0.0524          might be 1.0214x faster
   get-by-id-chain-from-try-block                     8.4884+-0.4804            6.9095+-1.1776          might be 1.2285x faster
   get-by-id-check-structure-elimination              5.1051+-0.0639            5.0326+-0.0257          might be 1.0144x faster
   get-by-id-proto-or-self                           18.5420+-1.0327           17.8942+-0.8348          might be 1.0362x faster
   get-by-id-quadmorphic-check-structure-elimination-simple   
                                                      2.8949+-0.0192     ?      3.3192+-0.9898        ? might be 1.1466x slower
   get-by-id-self-or-proto                           18.8424+-0.9316     ^     17.2989+-0.2618        ^ definitely 1.0892x faster
   get-by-val-out-of-bounds                           4.3048+-0.0764            4.2753+-0.0287        
   get_callee_monomorphic                             3.6982+-0.2145            3.5462+-0.0450          might be 1.0429x faster
   get_callee_polymorphic                             3.6163+-0.0675            3.5960+-0.4092        
   getter-no-activation                               4.8656+-0.5498            4.6007+-0.4500          might be 1.0576x faster
   getter-richards                                  126.3455+-6.6105     ?    127.2507+-5.4982        ?
   getter                                             5.0960+-0.0893     !      5.8821+-0.6791        ! definitely 1.1542x slower
   global-var-const-infer-fire-from-opt               0.8999+-0.1624     ?      0.9091+-0.1215        ? might be 1.0103x slower
   global-var-const-infer                             0.8570+-0.0981     ?      0.9151+-0.0823        ? might be 1.0678x slower
   HashMap-put-get-iterate-keys                      26.3931+-0.2500     ?     26.5310+-0.2715        ?
   HashMap-put-get-iterate                           26.5174+-0.4078           26.3641+-0.5456        
   HashMap-string-put-get-iterate                    27.6614+-1.6414     ?     28.1718+-1.5010        ? might be 1.0185x slower
   hoist-make-rope                                   11.7453+-0.8244     ?     12.4696+-0.5823        ? might be 1.0617x slower
   hoist-poly-check-structure-effectful-loop   
                                                      4.9924+-0.0738            4.9828+-0.0639        
   hoist-poly-check-structure                         3.7218+-0.0905     ?      3.7247+-0.0758        ?
   imul-double-only                                   8.6851+-0.2823     ?      9.3796+-2.2927        ? might be 1.0800x slower
   imul-int-only                                     10.0437+-0.6656     ?     10.1278+-0.7189        ?
   imul-mixed                                         8.6794+-0.2262            8.3492+-0.5378          might be 1.0395x faster
   in-four-cases                                     18.8326+-0.2947     ?     18.8819+-0.2064        ?
   in-one-case-false                                 10.1109+-0.4493            9.9975+-0.4747          might be 1.0113x faster
   in-one-case-true                                   9.9863+-0.3878     ?     10.2507+-0.6581        ? might be 1.0265x slower
   in-two-cases                                      11.2146+-0.9356           10.2672+-0.2806          might be 1.0923x faster
   indexed-properties-in-objects                      2.9641+-0.1250            2.9552+-0.0927        
   infer-closure-const-then-mov-no-inline             3.7647+-0.1142     ^      3.5157+-0.0226        ^ definitely 1.0708x faster
   infer-closure-const-then-mov                      19.2256+-1.1681     ^     17.5574+-0.3873        ^ definitely 1.0950x faster
   infer-closure-const-then-put-to-scope-no-inline   
                                                     11.7342+-0.3066           11.5922+-0.0797          might be 1.0122x faster
   infer-closure-const-then-put-to-scope             22.9222+-1.3242     ?     23.0011+-0.9666        ?
   infer-closure-const-then-reenter-no-inline   
                                                     49.6650+-1.7602           48.7602+-0.9652          might be 1.0186x faster
   infer-closure-const-then-reenter                  23.1630+-1.9191     !    124.7979+-2.0891        ! definitely 5.3878x slower
   infer-constant-global-property                    32.1585+-2.2670           31.5799+-1.6037          might be 1.0183x faster
   infer-constant-property                            2.7290+-0.0548            2.7266+-0.0185        
   infer-one-time-closure-ten-vars                   12.1161+-0.2151     ?     12.6298+-1.0080        ? might be 1.0424x slower
   infer-one-time-closure-two-vars                   11.9877+-0.2690           11.9412+-0.1669        
   infer-one-time-closure                            11.6693+-0.2053     ?     11.8276+-0.3301        ? might be 1.0136x slower
   infer-one-time-deep-closure                       21.5544+-1.5390     ?     22.0714+-1.2043        ? might be 1.0240x slower
   inline-arguments-access                            1.4097+-0.0432     !      4.2397+-0.0864        ! definitely 3.0076x slower
   inline-arguments-aliased-access                    1.8209+-0.2001     !      4.2587+-0.0750        ! definitely 2.3388x slower
   inline-arguments-local-escape                     12.7026+-0.2234     ^      4.4391+-0.1869        ^ definitely 2.8615x faster
   inline-get-scoped-var                              4.5551+-0.0941     ^      4.1508+-0.0218        ^ definitely 1.0974x faster
   inlined-put-by-id-transition                      10.3675+-0.3588           10.3073+-0.2461        
   int-or-other-abs-then-get-by-val                   4.9668+-0.0507     ?      6.2390+-3.2740        ? might be 1.2561x slower
   int-or-other-abs-zero-then-get-by-val             17.4902+-0.9697           16.9183+-0.5334          might be 1.0338x faster
   int-or-other-add-then-get-by-val                   4.2985+-0.0321     ?      4.3237+-0.1038        ?
   int-or-other-add                                   5.3547+-0.1037            5.3397+-0.0584        
   int-or-other-div-then-get-by-val                   4.1884+-0.0670     ?      4.2417+-0.0260        ? might be 1.0127x slower
   int-or-other-max-then-get-by-val                   4.3757+-0.0501     ?      4.3853+-0.0215        ?
   int-or-other-min-then-get-by-val                   5.1460+-1.6010            4.5995+-0.4096          might be 1.1188x faster
   int-or-other-mod-then-get-by-val                   3.9473+-0.1702            3.8833+-0.0650          might be 1.0165x faster
   int-or-other-mul-then-get-by-val                   3.9844+-0.0575     ?      4.0071+-0.0312        ?
   int-or-other-neg-then-get-by-val                   4.6301+-0.0308     ?      4.7502+-0.2201        ? might be 1.0259x slower
   int-or-other-neg-zero-then-get-by-val             17.9000+-0.9966     ^     16.6512+-0.1864        ^ definitely 1.0750x faster
   int-or-other-sub-then-get-by-val                   4.5255+-0.2517            4.3795+-0.0919          might be 1.0333x faster
   int-or-other-sub                                   3.4812+-0.0196     ?      3.5120+-0.0687        ?
   int-overflow-local                                 4.2854+-0.0426     ?      4.2913+-0.0189        ?
   Int16Array-alloc-long-lived                       50.2827+-1.9775           48.8760+-0.8779          might be 1.0288x faster
   Int16Array-bubble-sort-with-byteLength            22.7097+-1.9971           20.7474+-0.6605          might be 1.0946x faster
   Int16Array-bubble-sort                            24.7115+-2.6363           21.9732+-0.6674          might be 1.1246x faster
   Int16Array-load-int-mul                            1.4602+-0.0139     ?      1.4648+-0.0182        ?
   Int16Array-to-Int32Array-set                      56.7767+-1.4325     ^     53.0566+-1.5584        ^ definitely 1.0701x faster
   Int32Array-alloc-large                            24.4917+-0.9664           24.4274+-0.8844        
   Int32Array-alloc-long-lived                       56.1503+-1.6227     ?     57.5162+-1.5649        ? might be 1.0243x slower
   Int32Array-alloc                                   3.8315+-0.8220            3.7863+-0.6750          might be 1.0120x faster
   Int32Array-Int8Array-view-alloc                    7.2299+-0.7711            6.9867+-0.2527          might be 1.0348x faster
   int52-spill                                        6.6330+-0.2100            6.4417+-0.0747          might be 1.0297x faster
   Int8Array-alloc-long-lived                        47.6756+-1.7751           46.9175+-1.7998          might be 1.0162x faster
   Int8Array-load-with-byteLength                     3.3774+-0.1238     ?      3.3810+-0.0553        ?
   Int8Array-load                                     3.3066+-0.0587     ?      3.3416+-0.0492        ? might be 1.0106x slower
   integer-divide                                    11.3978+-0.2216     !     11.7187+-0.0352        ! definitely 1.0281x slower
   integer-modulo                                     2.0420+-0.0674     ?      2.0611+-0.1029        ?
   large-int-captured                                 8.5994+-1.3890     ^      5.5730+-0.1213        ^ definitely 1.5430x faster
   large-int-neg                                     16.5614+-0.8017     ?     16.6049+-0.6922        ?
   large-int                                         15.6742+-1.5687           15.3462+-0.7727          might be 1.0214x faster
   logical-not                                        4.5735+-0.0982            4.5268+-0.0395          might be 1.0103x faster
   lots-of-fields                                    13.6404+-1.2769           13.4590+-0.5453          might be 1.0135x faster
   make-indexed-storage                               3.0646+-0.0957            2.9508+-0.1725          might be 1.0385x faster
   make-rope-cse                                      4.9275+-0.5908            4.4522+-0.0762          might be 1.1067x faster
   marsaglia-larger-ints                             35.8543+-0.7562     ?     36.0967+-0.8798        ?
   marsaglia-osr-entry                               23.4738+-0.5318     ?     23.8000+-1.3627        ? might be 1.0139x slower
   max-boolean                                        2.4821+-0.0370     ?      2.5269+-0.1122        ? might be 1.0181x slower
   method-on-number                                  17.1829+-0.4269           16.8915+-0.1512          might be 1.0173x faster
   min-boolean                                        2.4972+-0.0212     ?      2.5048+-0.0758        ?
   minus-boolean-double                               3.1705+-0.0860     ?      3.2501+-0.3001        ? might be 1.0251x slower
   minus-boolean                                      2.3386+-0.0546     ?      2.3494+-0.1351        ?
   misc-strict-eq                                    38.9413+-2.4304     ?     38.9895+-2.4499        ?
   mod-boolean-double                                11.0275+-0.1635           10.9366+-0.1813        
   mod-boolean                                        7.7996+-0.0422            7.7971+-0.0443        
   mul-boolean-double                                 3.6990+-0.0359     ?      3.7956+-0.1064        ? might be 1.0261x slower
   mul-boolean                                        2.9364+-0.1520            2.8542+-0.0350          might be 1.0288x faster
   neg-boolean                                        3.1689+-0.0551            3.1625+-0.0525        
   negative-zero-divide                               0.4055+-0.1207            0.3531+-0.0329          might be 1.1482x faster
   negative-zero-modulo                               0.3599+-0.0149            0.3544+-0.0194          might be 1.0155x faster
   negative-zero-negate                               0.3284+-0.0124     ?      0.3399+-0.0274        ? might be 1.0349x slower
   nested-function-parsing                           22.2062+-0.8507     !     36.9431+-1.3168        ! definitely 1.6636x slower
   new-array-buffer-dead                              2.7512+-0.0415            2.7432+-0.0275        
   new-array-buffer-push                              7.2080+-0.6826     ?      7.3595+-0.9622        ? might be 1.0210x slower
   new-array-dead                                    12.5413+-0.1278     ?     12.7923+-0.3363        ? might be 1.0200x slower
   new-array-push                                     4.0565+-0.4159            3.8265+-0.1089          might be 1.0601x faster
   number-test                                        3.0179+-0.0353            2.9963+-0.0453        
   object-closure-call                                5.7078+-0.1180            5.5578+-0.0478          might be 1.0270x faster
   object-test                                        3.1122+-0.0334            3.0842+-0.0548        
   obvious-sink-pathology-taken                     146.0320+-1.8495     ?    146.3914+-3.8174        ?
   obvious-sink-pathology                           140.3960+-2.8491     ?    141.1462+-2.6685        ?
   obviously-elidable-new-object                     36.3606+-2.1978           35.4606+-1.8065          might be 1.0254x faster
   plus-boolean-arith                                 2.5093+-0.0611     ?      2.6129+-0.1631        ? might be 1.0413x slower
   plus-boolean-double                                3.2774+-0.1586            3.1650+-0.0453          might be 1.0355x faster
   plus-boolean                                       2.3748+-0.0584     ?      2.3961+-0.0458        ?
   poly-chain-access-different-prototypes-simple   
                                                      3.3625+-0.0624            3.2787+-0.0394          might be 1.0256x faster
   poly-chain-access-different-prototypes             2.8865+-0.0305     ^      2.6314+-0.0793        ^ definitely 1.0969x faster
   poly-chain-access-simpler                          3.3075+-0.0442     ^      3.2541+-0.0086        ^ definitely 1.0164x faster
   poly-chain-access                                  2.7977+-0.0873     ^      2.5788+-0.0462        ^ definitely 1.0849x faster
   poly-stricteq                                     57.6060+-1.9568     ?     59.4076+-2.2812        ? might be 1.0313x slower
   polymorphic-array-call                             1.2631+-0.1295     ?      1.3162+-0.1771        ? might be 1.0420x slower
   polymorphic-get-by-id                              3.4470+-0.8080            3.1343+-0.0329          might be 1.0998x faster
   polymorphic-put-by-id                             29.0297+-2.4427           28.6517+-2.0893          might be 1.0132x faster
   polymorphic-structure                             14.7771+-0.2421     ?     16.1304+-1.6455        ? might be 1.0916x slower
   polyvariant-monomorphic-get-by-id                  9.2043+-1.3697            8.5014+-0.3233          might be 1.0827x faster
   proto-getter-access                               10.1055+-0.2506            9.9733+-0.0874          might be 1.0133x faster
   put-by-id-replace-and-transition                   8.6346+-0.4310            8.4671+-0.1200          might be 1.0198x faster
   put-by-id-slightly-polymorphic                     2.8078+-0.0235     ?      2.8565+-0.0335        ? might be 1.0174x slower
   put-by-id                                         13.5484+-0.4511           13.3976+-0.5546          might be 1.0113x faster
   put-by-val-direct                                  0.5607+-0.0135     ?      0.5751+-0.0244        ? might be 1.0257x slower
   put-by-val-large-index-blank-indexing-type   
                                                      6.3488+-1.0038     ?      6.3765+-1.0027        ?
   put-by-val-machine-int                             2.6763+-0.2907            2.5453+-0.0506          might be 1.0515x faster
   rare-osr-exit-on-local                            14.9933+-0.2606     ?     15.1348+-0.7003        ?
   register-pressure-from-osr                        21.6321+-0.2933           21.6286+-0.3161        
   setter                                             5.1772+-0.0533     ?      5.9417+-0.8346        ? might be 1.1477x slower
   simple-activation-demo                            25.8335+-1.4460     ?     26.1601+-1.4448        ? might be 1.0126x slower
   simple-getter-access                              12.9294+-0.2766           12.6761+-0.1743          might be 1.0200x faster
   simple-poly-call-nested                            7.9867+-0.2172     ?      8.0399+-0.2049        ?
   simple-poly-call                                   1.3571+-0.1280            1.3274+-0.0821          might be 1.0224x faster
   sin-boolean                                       24.5295+-1.5857           22.9034+-1.6771          might be 1.0710x faster
   sinkable-new-object-dag                           71.0970+-2.5572     ?     75.0895+-11.2712       ? might be 1.0562x slower
   sinkable-new-object-taken                         54.9471+-2.0170           52.6344+-3.3101          might be 1.0439x faster
   sinkable-new-object                               38.5524+-0.4996     ?     39.7959+-1.3177        ? might be 1.0323x slower
   slow-array-profile-convergence                     2.8319+-0.1449            2.7590+-0.2002          might be 1.0265x faster
   slow-convergence                                   3.2898+-0.2575            3.2085+-0.0662          might be 1.0253x faster
   sparse-conditional                                 1.1044+-0.0272     ?      1.1242+-0.0638        ? might be 1.0179x slower
   splice-to-remove                                  17.6886+-1.7977     ?     18.0361+-1.5652        ? might be 1.0196x slower
   string-char-code-at                               15.9563+-0.1496     ?     16.1126+-0.3471        ?
   string-concat-object                               2.5448+-0.2547            2.3940+-0.0789          might be 1.0630x faster
   string-concat-pair-object                          2.3102+-0.0462     ?      2.4920+-0.3354        ? might be 1.0787x slower
   string-concat-pair-simple                         11.2515+-0.4730     ?     11.3640+-0.3183        ?
   string-concat-simple                              11.3278+-0.2604     ?     11.6975+-0.3836        ? might be 1.0326x slower
   string-cons-repeat                                 8.8104+-0.8822            8.3778+-1.2087          might be 1.0516x faster
   string-cons-tower                                  7.8871+-0.5937     ?      8.8715+-1.1701        ? might be 1.1248x slower
   string-equality                                   17.3897+-0.3051     ?     17.5713+-0.7308        ? might be 1.0104x slower
   string-get-by-val-big-char                         7.3069+-0.5896            7.1968+-0.1837          might be 1.0153x faster
   string-get-by-val-out-of-bounds-insane             3.8836+-0.1897            3.7209+-0.0718          might be 1.0437x faster
   string-get-by-val-out-of-bounds                    5.2902+-0.1587            5.2415+-0.1578        
   string-get-by-val                                  3.3165+-0.0381     ?      3.3197+-0.0375        ?
   string-hash                                        2.0101+-0.0237     ?      2.0215+-0.0759        ?
   string-long-ident-equality                        14.6682+-0.7678           14.6016+-0.9477        
   string-out-of-bounds                              15.0221+-0.4184     ?     15.0715+-0.2482        ?
   string-repeat-arith                               32.4701+-2.8863     ?     32.7882+-3.3844        ?
   string-sub                                        66.7207+-3.4135           64.1823+-4.1428          might be 1.0395x faster
   string-test                                        3.0544+-0.1758            2.9148+-0.0557          might be 1.0479x faster
   string-var-equality                               30.3318+-0.7438     ?     30.9028+-1.7960        ? might be 1.0188x slower
   structure-hoist-over-transitions                   2.4830+-0.0744     ?      2.5499+-0.0550        ? might be 1.0270x slower
   substring-concat-weird                            38.3948+-1.4746           38.3127+-0.9350        
   substring-concat                                  40.9347+-1.0875     ?     41.4057+-1.7997        ? might be 1.0115x slower
   substring                                         46.1167+-1.8244           46.0829+-1.0231        
   switch-char-constant                               2.7697+-0.1437            2.7017+-0.0406          might be 1.0252x faster
   switch-char                                        7.0078+-0.9817     ?      7.0490+-0.9419        ?
   switch-constant                                    8.0015+-0.1495     ?      8.2244+-0.3612        ? might be 1.0279x slower
   switch-string-basic-big-var                       15.5976+-1.3407     ?     15.7041+-1.3879        ?
   switch-string-basic-big                           15.2166+-1.7843     ?     15.5303+-1.7179        ? might be 1.0206x slower
   switch-string-basic-var                           15.5915+-1.6979           15.4572+-1.6058        
   switch-string-basic                               14.4169+-1.7513           14.2412+-1.3330          might be 1.0123x faster
   switch-string-big-length-tower-var                20.4764+-1.3866     ?     20.7707+-1.7496        ? might be 1.0144x slower
   switch-string-length-tower-var                    15.3137+-1.4212           15.0702+-1.4293          might be 1.0162x faster
   switch-string-length-tower                        14.1902+-1.5969           13.9610+-1.7949          might be 1.0164x faster
   switch-string-short                               13.1134+-1.5352     ?     13.2250+-1.4575        ?
   switch                                            11.9987+-0.4909           11.9448+-0.1919        
   tear-off-arguments-simple                          1.9683+-0.1093     !      3.2880+-0.0646        ! definitely 1.6705x slower
   tear-off-arguments                                 2.7358+-0.0353     !      4.4778+-0.0407        ! definitely 1.6368x slower
   temporal-structure                                13.3691+-0.7634           12.3902+-0.4092          might be 1.0790x faster
   to-int32-boolean                                  13.7756+-0.3323           13.6317+-0.1372          might be 1.0106x faster
   undefined-property-access                        385.6533+-4.8905     ?    386.9056+-5.9248        ?
   undefined-test                                     3.0427+-0.0402            3.0312+-0.0808        
   unprofiled-licm                                   23.2606+-0.9986     ?     23.4653+-1.4669        ?
   varargs-call                                      15.4898+-1.3615           15.3334+-1.0986          might be 1.0102x faster
   varargs-construct-inline                          27.8765+-1.2195     ^     22.2918+-1.3329        ^ definitely 1.2505x faster
   varargs-construct                                 51.5201+-1.4490     ^     31.3664+-0.6072        ^ definitely 1.6425x faster
   varargs-inline                                     8.4744+-0.3846     !      9.2543+-0.2335        ! definitely 1.0920x slower
   varargs-strict-mode                               14.9556+-0.1343     ^      9.6023+-0.1573        ^ definitely 1.5575x faster
   varargs                                           15.7198+-1.4440     ^      9.7655+-0.3076        ^ definitely 1.6097x faster
   weird-inlining-const-prop                          2.3235+-0.2193     ?      2.3667+-0.1607        ? might be 1.0186x slower

   &lt;geometric&gt;                                        8.4303+-0.0396     !      8.5720+-0.0204        ! definitely 1.0168x slower

                                                        TipOfTree                 VarOffset                                     
AsmBench:
   bigfib.cpp                                       499.3285+-2.8319          493.5529+-3.0913          might be 1.0117x faster
   cray.c                                           436.9455+-4.2079          431.3705+-3.0127          might be 1.0129x faster
   dry.c                                            497.9394+-23.2759         482.9404+-8.5413          might be 1.0311x faster
   FloatMM.c                                        725.3165+-0.7614     ?    725.8792+-1.9852        ?
   gcc-loops.cpp                                   4258.0122+-9.5249         4257.1238+-12.0468       
   n-body.c                                         986.7055+-2.9771          984.8636+-2.6517        
   Quicksort.c                                      441.3482+-3.6962     ?    443.2793+-8.3154        ?
   stepanov_container.cpp                          3609.7836+-67.0806        3600.6063+-69.8671       
   Towers.c                                         270.1456+-8.1850          268.4962+-4.2877        

   &lt;geometric&gt;                                      805.2250+-5.2589          799.8830+-4.2311          might be 1.0067x faster

                                                        TipOfTree                 VarOffset                                     
CompressionBench:
   huffman                                          388.7556+-2.1066     ^    354.4066+-1.0055        ^ definitely 1.0969x faster
   arithmetic-simple                                404.0950+-4.0124          403.0195+-5.4503        
   arithmetic-precise                               306.4482+-3.6261          302.3495+-4.6740          might be 1.0136x faster
   arithmetic-complex-precise                       300.6848+-5.1185     ?    302.2732+-2.8260        ?
   arithmetic-precise-order-0                       438.1735+-8.2073          432.4716+-7.5129          might be 1.0132x faster
   arithmetic-precise-order-1                       338.0214+-3.4332          333.1646+-9.0123          might be 1.0146x faster
   arithmetic-precise-order-2                       385.5922+-4.7846     ^    373.7564+-6.3989        ^ definitely 1.0317x faster
   arithmetic-simple-order-1                        434.3572+-4.2106          429.5890+-8.4369          might be 1.0111x faster
   arithmetic-simple-order-2                        487.7524+-4.2977          479.7894+-10.7648         might be 1.0166x faster
   lz-string                                        332.5707+-18.8302         325.8505+-5.1327          might be 1.0206x faster

   &lt;geometric&gt;                                      377.1053+-2.4834     ^    369.2898+-2.8252        ^ definitely 1.0212x faster

                                                        TipOfTree                 VarOffset                                     

                                                        TipOfTree                 VarOffset                                     
Geomean of preferred means:
   &lt;scaled-result&gt;                                   64.0066+-0.1690     ^     63.5146+-0.2574        ^ definitely 1.0077x faster</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1079184</commentid>
    <comment_count>88</comment_count>
      <attachid>249210</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-22 18:00:46 -0700</bug_when>
    <thetext>Created attachment 249210
started work on 32-bit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1079206</commentid>
    <comment_count>89</comment_count>
      <attachid>249217</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-22 19:27:01 -0700</bug_when>
    <thetext>Created attachment 249217
almost done with 32-bit

Just a few more DFG 32-bit opcodes and this patch is complete.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1079217</commentid>
    <comment_count>90</comment_count>
      <attachid>249219</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-22 21:32:02 -0700</bug_when>
    <thetext>Created attachment 249219
so close to done

I just need to write the code for the super-annoying CreateScopedArguments/CreateOutOfBadArguments slow call argument marshaling for platforms with fewer arguments registers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1079310</commentid>
    <comment_count>91</comment_count>
      <attachid>249240</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-23 11:14:02 -0700</bug_when>
    <thetext>Created attachment 249240
the patch

BOOM.  It&apos;s ready for review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1079311</commentid>
    <comment_count>92</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-03-23 11:18:02 -0700</bug_when>
    <thetext>Attachment 249240 did not pass style-queue:


ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:712:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/bytecode/ValueRecovery.h:30:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/runtime/ScopedArguments.h:111:  The parameter name &quot;vm&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/runtime/ScopedArguments.h:111:  The parameter name &quot;i&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:43:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:107:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:113:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:206:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:237:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:298:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:318:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/dfg/DFGCallCreateDirectArgumentsSlowPathGenerator.h:45:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGCallCreateDirectArgumentsSlowPathGenerator.h:46:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGCallCreateDirectArgumentsSlowPathGenerator.h:47:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGCallCreateDirectArgumentsSlowPathGenerator.h:48:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGCallCreateDirectArgumentsSlowPathGenerator.h:49:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:697:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/runtime/ScopedArgumentsTable.h:72:  The parameter name &quot;vm&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/runtime/ScopedArgumentsTable.h:72:  The parameter name &quot;i&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/runtime/ScopedArgumentsTable.h:76:  The parameter name &quot;vm&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/runtime/ScopedArgumentsTable.h:76:  The parameter name &quot;globalObject&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/dfg/DFGArgumentsUtilities.h:36:  The parameter name &quot;reg&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/dfg/DFGArgumentsUtilities.h:37:  The parameter name &quot;reg&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/dfg/DFGArgumentsUtilities.h:40:  The parameter name &quot;origin&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/dfg/DFGGraph.cpp:863:  Use &apos;WTF::move()&apos; instead of &apos;std::move()&apos;.  [runtime/wtf_move] [4]
ERROR: Source/JavaScriptCore/dfg/DFGGraph.cpp:881:  Use &apos;WTF::move()&apos; instead of &apos;std::move()&apos;.  [runtime/wtf_move] [4]
ERROR: Source/JavaScriptCore/runtime/JSGlobalObject.cpp:118:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/dfg/DFGVarargsForwardingPhase.cpp:173:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGVarargsForwardingPhase.cpp:253:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/runtime/OutOfBandArguments.h:53:  The parameter name &quot;structure&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/runtime/GenericArgumentsInlines.h:130:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/bytecode/BytecodeLivenessAnalysis.cpp:275:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/bytecode/BytecodeLivenessAnalysis.cpp:282:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/llint/LLIntSlowPaths.cpp:261:  The parameter name &quot;]&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/bytecompiler/BytecodeGenerator.h:621:  The parameter name &quot;pattern&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/dfg/DFGOperations.cpp:52:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp:2535:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/runtime/ScopedArgumentsTable.cpp:82:  Use &apos;WTF::move()&apos; instead of &apos;std::move()&apos;.  [runtime/wtf_move] [4]
ERROR: Source/JavaScriptCore/bytecode/BytecodeKills.h:63:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4384:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4482:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4570:  Use &apos;WTF::move()&apos; instead of &apos;std::move()&apos;.  [runtime/wtf_move] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4669:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4672:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4673:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4674:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4676:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4681:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4698:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4699:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4700:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4702:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4708:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/dfg/DFGForAllKills.h:155:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGForAllKills.h:171:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGForAllKills.h:196:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGForAllKills.h:207:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/runtime/SymbolTable.h:630:  The parameter name &quot;locker&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/runtime/SymbolTable.h:630:  The parameter name &quot;vm&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/runtime/SymbolTable.h:631:  The parameter name &quot;locker&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/runtime/SymbolTable.h:631:  The parameter name &quot;vm&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 61 in 249 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>1079317</commentid>
    <comment_count>93</comment_count>
      <attachid>249243</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-23 11:38:25 -0700</bug_when>
    <thetext>Created attachment 249243
compiling on more platforms than ever!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1079318</commentid>
    <comment_count>94</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2015-03-23 11:39:25 -0700</bug_when>
    <thetext>EFL build can be fixed easily on x86_64: (all JSC stress tests pass)
- Source/JavaScriptCore/runtime/GenericOffset.h needs a limits.h include
- Source/JavaScriptCore/CMakeLists.txt needs runtime/ScopeOffset.cpp too

I&apos;ll check the ARM Linux build and test soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1079322</commentid>
    <comment_count>95</comment_count>
      <attachid>249245</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-23 11:43:42 -0700</bug_when>
    <thetext>Created attachment 249245
even more build fixes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1079324</commentid>
    <comment_count>96</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-03-23 11:48:07 -0700</bug_when>
    <thetext>Attachment 249245 did not pass style-queue:


ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:712:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/bytecode/ValueRecovery.h:30:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/runtime/ScopedArguments.h:111:  The parameter name &quot;vm&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/runtime/ScopedArguments.h:111:  The parameter name &quot;i&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:43:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:107:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:113:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:206:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:237:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:298:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:318:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/dfg/DFGCallCreateDirectArgumentsSlowPathGenerator.h:45:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGCallCreateDirectArgumentsSlowPathGenerator.h:46:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGCallCreateDirectArgumentsSlowPathGenerator.h:47:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGCallCreateDirectArgumentsSlowPathGenerator.h:48:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGCallCreateDirectArgumentsSlowPathGenerator.h:49:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:697:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/runtime/ScopedArgumentsTable.h:72:  The parameter name &quot;vm&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/runtime/ScopedArgumentsTable.h:72:  The parameter name &quot;i&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/runtime/ScopedArgumentsTable.h:76:  The parameter name &quot;vm&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/runtime/ScopedArgumentsTable.h:76:  The parameter name &quot;globalObject&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/dfg/DFGArgumentsUtilities.h:36:  The parameter name &quot;reg&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/dfg/DFGArgumentsUtilities.h:37:  The parameter name &quot;reg&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/dfg/DFGArgumentsUtilities.h:40:  The parameter name &quot;origin&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/dfg/DFGGraph.cpp:863:  Use &apos;WTF::move()&apos; instead of &apos;std::move()&apos;.  [runtime/wtf_move] [4]
ERROR: Source/JavaScriptCore/dfg/DFGGraph.cpp:881:  Use &apos;WTF::move()&apos; instead of &apos;std::move()&apos;.  [runtime/wtf_move] [4]
ERROR: Source/JavaScriptCore/runtime/JSGlobalObject.cpp:118:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/dfg/DFGVarargsForwardingPhase.cpp:173:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGVarargsForwardingPhase.cpp:253:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/runtime/OutOfBandArguments.h:53:  The parameter name &quot;structure&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/runtime/GenericArgumentsInlines.h:130:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/bytecode/BytecodeLivenessAnalysis.cpp:275:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/bytecode/BytecodeLivenessAnalysis.cpp:282:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/llint/LLIntSlowPaths.cpp:261:  The parameter name &quot;]&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/bytecompiler/BytecodeGenerator.h:621:  The parameter name &quot;pattern&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/dfg/DFGOperations.cpp:52:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp:2535:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/runtime/ScopedArgumentsTable.cpp:82:  Use &apos;WTF::move()&apos; instead of &apos;std::move()&apos;.  [runtime/wtf_move] [4]
ERROR: Source/JavaScriptCore/bytecode/BytecodeKills.h:63:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4384:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4482:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4570:  Use &apos;WTF::move()&apos; instead of &apos;std::move()&apos;.  [runtime/wtf_move] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4669:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4672:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4673:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4674:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4676:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4681:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4698:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4699:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4700:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4702:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4708:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/dfg/DFGForAllKills.h:155:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGForAllKills.h:171:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGForAllKills.h:196:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGForAllKills.h:207:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/runtime/SymbolTable.h:630:  The parameter name &quot;locker&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/runtime/SymbolTable.h:630:  The parameter name &quot;vm&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/runtime/SymbolTable.h:631:  The parameter name &quot;locker&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/runtime/SymbolTable.h:631:  The parameter name &quot;vm&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 61 in 249 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>1079335</commentid>
    <comment_count>97</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-23 12:14:55 -0700</bug_when>
    <thetext>Current set of x86-32 failures:

** The following JSC stress test failures have been introduced:
	internal-js-tests.yaml/Octane/box2d.js.default-ftl
	internal-js-tests.yaml/Octane/box2d.js.ftl-no-cjit-no-access-inlining
	internal-js-tests.yaml/Octane/box2d.js.ftl-no-cjit-no-simple-opt
	internal-js-tests.yaml/Octane/box2d.js.ftl-no-cjit-osr-validation
	internal-js-tests.yaml/Octane/box2d.js.ftl-no-cjit-validate
	internal-js-tests.yaml/Octane/box2d.js.no-cjit-no-access-inlining
	internal-js-tests.yaml/V8v7/raytrace.js.default-ftl
	internal-js-tests.yaml/V8v7/raytrace.js.ftl-no-cjit-no-access-inlining
	internal-js-tests.yaml/V8v7/raytrace.js.ftl-no-cjit-no-simple-opt
	internal-js-tests.yaml/V8v7/raytrace.js.ftl-no-cjit-osr-validation
	internal-js-tests.yaml/V8v7/raytrace.js.ftl-no-cjit-validate
	internal-js-tests.yaml/V8v7/raytrace.js.no-cjit-no-access-inlining
	regress/script-tests/varargs-construct-inline.js.dfg-eager
	regress/script-tests/varargs-construct-inline.js.dfg-eager-no-cjit-validate
	regress/script-tests/varargs-construct-inline.js.ftl-eager
	regress/script-tests/varargs-construct-inline.js.ftl-eager-no-cjit
	regress/script-tests/varargs-construct-inline.js.ftl-no-cjit-no-inline-validate
	v8-v6/v8-raytrace.js.always-trigger-copy-phase
	v8-v6/v8-raytrace.js.default
	v8-v6/v8-raytrace.js.default-ftl
	v8-v6/v8-raytrace.js.dfg-eager
	v8-v6/v8-raytrace.js.dfg-eager-no-cjit-validate
	v8-v6/v8-raytrace.js.ftl-eager
	v8-v6/v8-raytrace.js.ftl-eager-no-cjit
	v8-v6/v8-raytrace.js.ftl-no-cjit-no-inline-validate
	v8-v6/v8-raytrace.js.ftl-no-cjit-validate
	v8-v6/v8-raytrace.js.no-cjit-validate-phases
	v8-v6/v8-raytrace.js.no-llint</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1079336</commentid>
    <comment_count>98</comment_count>
      <attachid>249249</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-23 12:16:05 -0700</bug_when>
    <thetext>Created attachment 249249
very latest

Totally works on x86-64, mostly works on x86-32, probably won&apos;t build yet on the ARMs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1079337</commentid>
    <comment_count>99</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-03-23 12:19:10 -0700</bug_when>
    <thetext>Attachment 249249 did not pass style-queue:


ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:712:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:107:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:113:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:206:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:237:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:298:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:318:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/dfg/DFGCallCreateDirectArgumentsSlowPathGenerator.h:45:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGCallCreateDirectArgumentsSlowPathGenerator.h:46:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGCallCreateDirectArgumentsSlowPathGenerator.h:47:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGCallCreateDirectArgumentsSlowPathGenerator.h:48:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGCallCreateDirectArgumentsSlowPathGenerator.h:49:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:697:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGVarargsForwardingPhase.cpp:173:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGVarargsForwardingPhase.cpp:253:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/bytecode/BytecodeLivenessAnalysis.cpp:275:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/bytecode/BytecodeLivenessAnalysis.cpp:282:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/llint/LLIntSlowPaths.cpp:261:  The parameter name &quot;]&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/bytecode/BytecodeKills.h:63:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4384:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4669:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4672:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4673:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4674:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4676:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4681:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4698:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4699:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4700:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4702:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4708:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/dfg/DFGForAllKills.h:155:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGForAllKills.h:171:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGForAllKills.h:196:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGForAllKills.h:207:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 35 in 251 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>1079342</commentid>
    <comment_count>100</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2015-03-23 12:29:12 -0700</bug_when>
    <thetext>(In reply to comment #98)
&gt; Created attachment 249249 [details]
&gt; very latest
&gt; 
&gt; Totally works on x86-64, mostly works on x86-32, probably won&apos;t build yet on
&gt; the ARMs.

Only a small patch was needed for this version to make ARM Thumb2 Linux happy:

@@ -497,6 +513,13 @@
         return registerForIndex[index];
     }

+    static GPRReg toArgumentRegister(unsigned index)
+    {
+        ASSERT(index &lt; numberOfArgumentRegisters);
+        static const GPRReg registerForIndex[numberOfArgumentRegisters] = { argumentGPR0, argumentGPR1, argumentGPR2, argumentGPR3 };
+        return registerForIndex[index];
+    }
+
     static unsigned toIndex(GPRReg reg)
     {
         ASSERT(reg != InvalidGPRReg);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1079348</commentid>
    <comment_count>101</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2015-03-23 13:03:02 -0700</bug_when>
    <thetext>(In reply to comment #100)

With this buildfix there are only 8 failures on ARM Thumb2 Linux:

** The following JSC stress test failures have been introduced:
        regress/script-tests/varargs-construct-inline.js.dfg-eager
        regress/script-tests/varargs-construct-inline.js.dfg-eager-no-cjit-validate
        v8-v6/v8-raytrace.js.always-trigger-copy-phase
        v8-v6/v8-raytrace.js.default
        v8-v6/v8-raytrace.js.dfg-eager
        v8-v6/v8-raytrace.js.dfg-eager-no-cjit-validate
        v8-v6/v8-raytrace.js.no-cjit-validate-phases
        v8-v6/v8-raytrace.js.no-llint

Results for JSC stress tests:
    8 failures found.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1079362</commentid>
    <comment_count>102</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-03-23 13:25:18 -0700</bug_when>
    <thetext>Are these worth investigating?

   call-spread-apply                                 16.3509+-0.5089     !     31.5406+-1.6610        ! definitely 1.9290x slower
   call-spread-call                                   6.1589+-0.1679     !     25.1263+-1.5951        ! definitely 4.0797x slower
   destructuring-arguments                            5.1739+-0.0185     !     16.8056+-0.7282        ! definitely 3.2482x slower
   direct-arguments-getbyval                          0.9358+-0.0600     !      1.2183+-0.0840        ! definitely 1.3019x slower
   infer-closure-const-then-reenter                  23.1630+-1.9191     !    124.7979+-2.0891        ! definitely 5.3878x slower
   inline-arguments-access                            1.4097+-0.0432     !      4.2397+-0.0864        ! definitely 3.0076x slower
   inline-arguments-aliased-access                    1.8209+-0.2001     !      4.2587+-0.0750        ! definitely 2.3388x slower
   tear-off-arguments-simple                          1.9683+-0.1093     !      3.2880+-0.0646        ! definitely 1.6705x slower
   tear-off-arguments                                 2.7358+-0.0353     !      4.4778+-0.0407        ! definitely 1.6368x slower</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1079365</commentid>
    <comment_count>103</comment_count>
      <attachid>249245</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2015-03-23 13:28:05 -0700</bug_when>
    <thetext>Comment on attachment 249245
even more build fixes

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

Stopped half way through as i have to do other things :-(

&gt; Source/JavaScriptCore/bytecode/BytecodeKills.h:129
&gt; +        uintptr_t m_word;

could you make this a union instead of just having casts? It will save the bitwise_cast ugliness and make the code generally clearer</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1079372</commentid>
    <comment_count>104</comment_count>
      <attachid>249249</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2015-03-23 13:34:53 -0700</bug_when>
    <thetext>Comment on attachment 249249
very latest

Attachment 249249 did not pass mac-wk2-ews (mac-wk2):
Output: http://webkit-queues.appspot.com/results/5895858029592576

New failing tests:
js/dom/const.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1079373</commentid>
    <comment_count>105</comment_count>
      <attachid>249257</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2015-03-23 13:35:00 -0700</bug_when>
    <thetext>Created attachment 249257
Archive of layout-test-results from ews104 for mac-mavericks-wk2

The attached test failures were seen while running run-webkit-tests on the mac-wk2-ews.
Bot: ews104  Port: mac-mavericks-wk2  Platform: Mac OS X 10.9.5</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1079378</commentid>
    <comment_count>106</comment_count>
      <attachid>249249</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2015-03-23 13:41:26 -0700</bug_when>
    <thetext>Comment on attachment 249249
very latest

Attachment 249249 did not pass mac-ews (mac):
Output: http://webkit-queues.appspot.com/results/6510621394731008

New failing tests:
js/dom/const.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1079379</commentid>
    <comment_count>107</comment_count>
      <attachid>249258</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2015-03-23 13:41:33 -0700</bug_when>
    <thetext>Created attachment 249258
Archive of layout-test-results from ews100 for mac-mavericks

The attached test failures were seen while running run-webkit-tests on the mac-ews.
Bot: ews100  Port: mac-mavericks  Platform: Mac OS X 10.9.5</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1079390</commentid>
    <comment_count>108</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2015-03-23 13:49:39 -0700</bug_when>
    <thetext>(In reply to comment #101)
&gt; (In reply to comment #100)
&gt; 
&gt; With this buildfix there are only 8 failures on ARM Thumb2 Linux:
&gt; 
&gt; ** The following JSC stress test failures have been introduced:
&gt;         regress/script-tests/varargs-construct-inline.js.dfg-eager
&gt;        
&gt; regress/script-tests/varargs-construct-inline.js.dfg-eager-no-cjit-validate
&gt;         v8-v6/v8-raytrace.js.always-trigger-copy-phase
&gt;         v8-v6/v8-raytrace.js.default
&gt;         v8-v6/v8-raytrace.js.dfg-eager
&gt;         v8-v6/v8-raytrace.js.dfg-eager-no-cjit-validate
&gt;         v8-v6/v8-raytrace.js.no-cjit-validate-phases
&gt;         v8-v6/v8-raytrace.js.no-llint
&gt; 
&gt; Results for JSC stress tests:
&gt;     8 failures found.

Same failures on ARM traditional, and it seems 
bug141193 will gone away with this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1079402</commentid>
    <comment_count>109</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-23 13:55:50 -0700</bug_when>
    <thetext>(In reply to comment #102)
&gt; Are these worth investigating?
&gt; 
&gt;    call-spread-apply                                 16.3509+-0.5089     !  
&gt; 31.5406+-1.6610        ! definitely 1.9290x slower
&gt;    call-spread-call                                   6.1589+-0.1679     !  
&gt; 25.1263+-1.5951        ! definitely 4.0797x slower
&gt;    destructuring-arguments                            5.1739+-0.0185     !  
&gt; 16.8056+-0.7282        ! definitely 3.2482x slower
&gt;    direct-arguments-getbyval                          0.9358+-0.0600     !  
&gt; 1.2183+-0.0840        ! definitely 1.3019x slower
&gt;    infer-closure-const-then-reenter                  23.1630+-1.9191     !  
&gt; 124.7979+-2.0891        ! definitely 5.3878x slower
&gt;    inline-arguments-access                            1.4097+-0.0432     !  
&gt; 4.2397+-0.0864        ! definitely 3.0076x slower
&gt;    inline-arguments-aliased-access                    1.8209+-0.2001     !  
&gt; 4.2587+-0.0750        ! definitely 2.3388x slower
&gt;    tear-off-arguments-simple                          1.9683+-0.1093     !  
&gt; 3.2880+-0.0646        ! definitely 1.6705x slower
&gt;    tear-off-arguments                                 2.7358+-0.0353     !  
&gt; 4.4778+-0.0407        ! definitely 1.6368x slower

From what I remember, these tests don&apos;t make it to FTL (don&apos;t run long enough, coverage, etc) and test arguments elimination.  We expect those tests to slow down, since the new arguments elimination in DFG is intended just for handling foo.apply(bar, arguments).

But, I will look at those some more to make sure it&apos;s nothing horrible.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1079409</commentid>
    <comment_count>110</comment_count>
      <attachid>249267</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-23 14:09:15 -0700</bug_when>
    <thetext>Created attachment 249267
more fixes

32-bit should now be completely fixed (the bug was a simple typo in emitCall()).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1079415</commentid>
    <comment_count>111</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-03-23 14:12:32 -0700</bug_when>
    <thetext>Attachment 249267 did not pass style-queue:


ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:712:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:107:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:113:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:206:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:237:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:298:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:318:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/dfg/DFGCallCreateDirectArgumentsSlowPathGenerator.h:45:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGCallCreateDirectArgumentsSlowPathGenerator.h:46:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGCallCreateDirectArgumentsSlowPathGenerator.h:47:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGCallCreateDirectArgumentsSlowPathGenerator.h:48:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGCallCreateDirectArgumentsSlowPathGenerator.h:49:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:697:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGVarargsForwardingPhase.cpp:173:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGVarargsForwardingPhase.cpp:253:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/bytecode/BytecodeLivenessAnalysis.cpp:275:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/bytecode/BytecodeLivenessAnalysis.cpp:282:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/llint/LLIntSlowPaths.cpp:261:  The parameter name &quot;]&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/bytecode/BytecodeKills.h:63:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4384:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4669:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4672:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4673:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4674:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4676:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4681:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4698:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4699:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4700:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4702:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4708:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/dfg/DFGForAllKills.h:155:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGForAllKills.h:171:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGForAllKills.h:196:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGForAllKills.h:207:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 35 in 251 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>1079429</commentid>
    <comment_count>112</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-23 14:22:03 -0700</bug_when>
    <thetext>(In reply to comment #106)
&gt; Comment on attachment 249249 [details]
&gt; very latest
&gt; 
&gt; Attachment 249249 [details] did not pass mac-ews (mac):
&gt; Output: http://webkit-queues.appspot.com/results/6510621394731008
&gt; 
&gt; New failing tests:
&gt; js/dom/const.html

Should be an easy fix. I remember there were a couple of const-related places where it felt like I was making an arbitrary decision. Probably I decided wrong, somewhere.

What&apos;s weird is that this test is part of js/dom.  It shouldn&apos;t be.  I&apos;ll fix that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1079467</commentid>
    <comment_count>113</comment_count>
      <attachid>249267</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2015-03-23 15:23:41 -0700</bug_when>
    <thetext>Comment on attachment 249267
more fixes

Attachment 249267 did not pass mac-ews (mac):
Output: http://webkit-queues.appspot.com/results/5119339753635840

New failing tests:
js/dom/const.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1079469</commentid>
    <comment_count>114</comment_count>
      <attachid>249286</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2015-03-23 15:23:50 -0700</bug_when>
    <thetext>Created attachment 249286
Archive of layout-test-results from ews100 for mac-mavericks

The attached test failures were seen while running run-webkit-tests on the mac-ews.
Bot: ews100  Port: mac-mavericks  Platform: Mac OS X 10.9.5</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1079471</commentid>
    <comment_count>115</comment_count>
      <attachid>249267</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2015-03-23 15:31:06 -0700</bug_when>
    <thetext>Comment on attachment 249267
more fixes

Attachment 249267 did not pass mac-wk2-ews (mac-wk2):
Output: http://webkit-queues.appspot.com/results/6130520010260480

New failing tests:
js/dom/const.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1079472</commentid>
    <comment_count>116</comment_count>
      <attachid>249287</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2015-03-23 15:31:15 -0700</bug_when>
    <thetext>Created attachment 249287
Archive of layout-test-results from ews106 for mac-mavericks-wk2

The attached test failures were seen while running run-webkit-tests on the mac-wk2-ews.
Bot: ews106  Port: mac-mavericks-wk2  Platform: Mac OS X 10.9.5</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1079562</commentid>
    <comment_count>117</comment_count>
      <attachid>249313</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-23 22:51:13 -0700</bug_when>
    <thetext>Created attachment 249313
more fixes

ARM64, ARMv7, x86-32, and x86-64 should all work.

js/const is still regressed.  I still haven&apos;t looked at it in detail, but at least it&apos;s not a DOM test anymore.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1079675</commentid>
    <comment_count>118</comment_count>
      <attachid>249342</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-24 13:17:47 -0700</bug_when>
    <thetext>Created attachment 249342
the patch

Passes all tests on all platforms.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1079678</commentid>
    <comment_count>119</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-03-24 13:21:53 -0700</bug_when>
    <thetext>Attachment 249342 did not pass style-queue:


ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:712:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:107:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:113:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:206:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:237:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:298:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:318:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/dfg/DFGCallCreateDirectArgumentsSlowPathGenerator.h:45:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGCallCreateDirectArgumentsSlowPathGenerator.h:46:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGCallCreateDirectArgumentsSlowPathGenerator.h:47:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGCallCreateDirectArgumentsSlowPathGenerator.h:48:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGCallCreateDirectArgumentsSlowPathGenerator.h:49:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:697:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGVarargsForwardingPhase.cpp:173:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGVarargsForwardingPhase.cpp:253:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/bytecode/BytecodeLivenessAnalysis.cpp:275:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/bytecode/BytecodeLivenessAnalysis.cpp:282:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/llint/LLIntSlowPaths.cpp:261:  The parameter name &quot;]&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/bytecode/BytecodeKills.h:63:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4384:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4669:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4672:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4673:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4674:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4676:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4681:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4698:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4699:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4700:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4702:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4708:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/dfg/DFGForAllKills.h:155:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGForAllKills.h:171:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGForAllKills.h:196:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGForAllKills.h:207:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 35 in 251 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>1080056</commentid>
    <comment_count>120</comment_count>
      <attachid>249342</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-03-25 15:16:43 -0700</bug_when>
    <thetext>Comment on attachment 249342
the patch

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

r=me with issues. I need a nap now.

Does object allocation sinking work for function objects? If not, I think we want a follow-up bug for that, since bytecode used to sink those allocations through conditional logic on the stack. I won&apos;t defend the old way of doing this, but I will say it&apos;s worth some speed on Octane.

&gt; Source/JavaScriptCore/bytecode/BytecodeKills.h:92
&gt; +                Vector&lt;unsigned&gt;* vector = new Vector&lt;unsigned&gt;();

This is a leak. KillSet needs a destructor to delete m_word if &amp; 1.

Also might be nice to isolate the encode/decode of m_word into helper functions: isEmpty(), isSingleItem(), singleItem(), setSingleItem(), setVector(), vector().

&gt; Source/JavaScriptCore/bytecode/CodeBlock.cpp:-2824
&gt; -bool CodeBlock::isCaptured(VirtualRegister operand, InlineCallFrame* inlineCallFrame) const

I will not miss this function.

&gt; Source/JavaScriptCore/bytecode/CodeBlock.cpp:-2850
&gt; -int CodeBlock::framePointerOffsetToGetActivationRegisters(int machineCaptureStart)

Nor this one.

&gt; Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp:-1919
&gt; -    if (m_codeBlock-&gt;usesArguments() &amp;&amp; m_codeBlock-&gt;numParameters() != 1 &amp;&amp; !isStrictMode()) {

I will not miss this code.

&gt; Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:331
&gt; +    void transform()

Would be nice to transform GetById(node, &quot;callee&quot;) as well, to support anonymous functions that recurse by way of arguments.callee. Perhaps this is rare, though.

&gt; Source/JavaScriptCore/dfg/DFGOSRExitCompiler32_64.cpp:-111
&gt; -#if CPU(ARM64)
&gt; -                m_jit.pushToSave(scratch1);
&gt; -                m_jit.pushToSave(scratch2);
&gt; -#else
&gt;                  m_jit.push(scratch1);
&gt;                  m_jit.push(scratch2);
&gt; -#endif

A comment and a CRASH macro in MacroAssemblerARM64.h indicate that we need this special pushToSave behavior on ARM64. Why is it OK to remove this?

&gt; Source/JavaScriptCore/dfg/DFGOSRExitCompiler32_64.cpp:-146
&gt; -#if CPU(ARM64)
&gt; -                m_jit.pushToSave(scratch);
&gt; -#else

Ditto.

&gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4641
&gt; +void SpeculativeJIT::compilePutToArguments(Node* node)

Do we need some write barrier action here?

&gt; Source/JavaScriptCore/jit/JITPropertyAccess32_64.cpp:850
&gt; +void JIT::emit_op_put_to_arguments(Instruction* currentInstruction)

Do we need some write barrier action here?

&gt; Source/JavaScriptCore/jit/JITPropertyAccess.cpp:821
&gt; +void JIT::emit_op_put_to_arguments(Instruction* currentInstruction)

Do we need some write barrier action here?

&gt; Source/JavaScriptCore/runtime/ArgumentsMode.h:31
&gt; +enum ArgumentsMode {

Let&apos;s use enum class here.

&gt; Source/JavaScriptCore/runtime/CapturedArgumentsOffset.h:35
&gt; +// function. It only comes into play it the arguments aren&apos;t also lifted into the activation.

&quot;play it&quot; =&gt; &quot;play if&quot;

&gt; Source/JavaScriptCore/runtime/CapturedArgumentsOffset.h:38
&gt; +// If they were then accesses to the arguments would resolve to a ScopeOffset and not a
&gt; +// CapturedArgumentsOffset.
&gt; +class CapturedArgumentsOffset : public GenericOffset&lt;CapturedArgumentsOffset&gt; {

I&apos;m confused by this name. Usually, &quot;captured&quot; means &quot;it&apos;s in the activation&quot;. But here it means &quot;it&apos;s not in the activation&quot;.

I guess by &quot;captured&quot; you meant &quot;captured by the arguments object&quot;.

I think this offset is always an offset into a DirectArguments object. Right? If so, I suggest calling this &quot;DirectArgumentsOffset&quot;. I think that would help disambiguate the capturing.

&gt; Source/JavaScriptCore/runtime/OutOfBandArguments.h:41
&gt; +class OutOfBandArguments : public JSNonFinalObject {

How about calling this CopiedArguments or ClonedArguments or SnapshottedArguments or StrictArguments?

&quot;Out of band&quot; didn&apos;t really speak to me because I don&apos;t normally think of any kind of arguments as being in-band, and in strict mode, these arguments are not really out of band.

&gt; Source/JavaScriptCore/runtime/ScopedArguments.h:40
&gt; +class ScopedArguments : public GenericArguments&lt;ScopedArguments&gt; {

How about calling this CapturedArguments on IndirectArguments or AliasedArguments?

We use &quot;scope&quot; in get_from_scope and put_to_scope to mean &quot;a subclass of JSScope&quot;. But &quot;scoped arguments&quot; is a bit of an awkward phrase, partly because all arguments exist in some lexical scope and so there are no non-scoped arguments. I like &quot;captured&quot; because it&apos;s more specific about what triggered this behavior (a function that captured an argument), or I like &quot;indirect&quot; because it&apos;s the opposite of &quot;direct&quot; and it conveys that we forward requests somewhere else (even though we don&apos;t specify where), or I like &quot;aliased&quot; because it conveys sharing between the named reference and the indexed reference.

&gt; Source/JavaScriptCore/runtime/VarOffset.h:36
&gt; +enum VarKind : uint8_t {

enum class

&gt; Source/JavaScriptCore/runtime/VarOffset.h:40
&gt; +    CapturedArgumentKind

Same comment about the term &quot;captured&quot; here. Can we call this DirectArgumentKind?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1080063</commentid>
    <comment_count>121</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-25 15:33:20 -0700</bug_when>
    <thetext>(In reply to comment #120)
&gt; Comment on attachment 249342 [details]
&gt; the patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=249342&amp;action=review
&gt; 
&gt; r=me with issues. I need a nap now.
&gt; 
&gt; Does object allocation sinking work for function objects? If not, I think we
&gt; want a follow-up bug for that, since bytecode used to sink those allocations
&gt; through conditional logic on the stack. I won&apos;t defend the old way of doing
&gt; this, but I will say it&apos;s worth some speed on Octane.
&gt; 
&gt; &gt; Source/JavaScriptCore/bytecode/BytecodeKills.h:92
&gt; &gt; +                Vector&lt;unsigned&gt;* vector = new Vector&lt;unsigned&gt;();
&gt; 
&gt; This is a leak. KillSet needs a destructor to delete m_word if &amp; 1.

Good catch!

&gt; 
&gt; Also might be nice to isolate the encode/decode of m_word into helper
&gt; functions: isEmpty(), isSingleItem(), singleItem(), setSingleItem(),
&gt; setVector(), vector().

I&apos;ll try that.

&gt; 
&gt; &gt; Source/JavaScriptCore/bytecode/CodeBlock.cpp:-2824
&gt; &gt; -bool CodeBlock::isCaptured(VirtualRegister operand, InlineCallFrame* inlineCallFrame) const
&gt; 
&gt; I will not miss this function.
&gt; 
&gt; &gt; Source/JavaScriptCore/bytecode/CodeBlock.cpp:-2850
&gt; &gt; -int CodeBlock::framePointerOffsetToGetActivationRegisters(int machineCaptureStart)
&gt; 
&gt; Nor this one.
&gt; 
&gt; &gt; Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp:-1919
&gt; &gt; -    if (m_codeBlock-&gt;usesArguments() &amp;&amp; m_codeBlock-&gt;numParameters() != 1 &amp;&amp; !isStrictMode()) {
&gt; 
&gt; I will not miss this code.
&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:331
&gt; &gt; +    void transform()
&gt; 
&gt; Would be nice to transform GetById(node, &quot;callee&quot;) as well, to support
&gt; anonymous functions that recurse by way of arguments.callee. Perhaps this is
&gt; rare, though.

I will add a FIXME and file a bug.  I agree that this is worthwhile.

(I plan to make all new FIXMEs reference a bug.)

&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGOSRExitCompiler32_64.cpp:-111
&gt; &gt; -#if CPU(ARM64)
&gt; &gt; -                m_jit.pushToSave(scratch1);
&gt; &gt; -                m_jit.pushToSave(scratch2);
&gt; &gt; -#else
&gt; &gt;                  m_jit.push(scratch1);
&gt; &gt;                  m_jit.push(scratch2);
&gt; &gt; -#endif
&gt; 
&gt; A comment and a CRASH macro in MacroAssemblerARM64.h indicate that we need
&gt; this special pushToSave behavior on ARM64. Why is it OK to remove this?

Because this is 32_64 code, and so it&apos;ll never ARM64.

&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGOSRExitCompiler32_64.cpp:-146
&gt; &gt; -#if CPU(ARM64)
&gt; &gt; -                m_jit.pushToSave(scratch);
&gt; &gt; -#else
&gt; 
&gt; Ditto.

Ditto.

&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4641
&gt; &gt; +void SpeculativeJIT::compilePutToArguments(Node* node)
&gt; 
&gt; Do we need some write barrier action here?

FixupPhase says:

        case PutClosureVar:
        case PutToArguments: {
            fixEdge&lt;KnownCellUse&gt;(node-&gt;child1());
            insertStoreBarrier(m_indexInBlock, node-&gt;child1(), node-&gt;child2());
            break;
        }

So, this is fine.

&gt; 
&gt; &gt; Source/JavaScriptCore/jit/JITPropertyAccess32_64.cpp:850
&gt; &gt; +void JIT::emit_op_put_to_arguments(Instruction* currentInstruction)
&gt; 
&gt; Do we need some write barrier action here?

It&apos;s a bug!  I&apos;ll fix.

&gt; 
&gt; &gt; Source/JavaScriptCore/jit/JITPropertyAccess.cpp:821
&gt; &gt; +void JIT::emit_op_put_to_arguments(Instruction* currentInstruction)
&gt; 
&gt; Do we need some write barrier action here?

Ditto.

&gt; 
&gt; &gt; Source/JavaScriptCore/runtime/ArgumentsMode.h:31
&gt; &gt; +enum ArgumentsMode {
&gt; 
&gt; Let&apos;s use enum class here.

OK.

&gt; 
&gt; &gt; Source/JavaScriptCore/runtime/CapturedArgumentsOffset.h:35
&gt; &gt; +// function. It only comes into play it the arguments aren&apos;t also lifted into the activation.
&gt; 
&gt; &quot;play it&quot; =&gt; &quot;play if&quot;

OK.

&gt; 
&gt; &gt; Source/JavaScriptCore/runtime/CapturedArgumentsOffset.h:38
&gt; &gt; +// If they were then accesses to the arguments would resolve to a ScopeOffset and not a
&gt; &gt; +// CapturedArgumentsOffset.
&gt; &gt; +class CapturedArgumentsOffset : public GenericOffset&lt;CapturedArgumentsOffset&gt; {
&gt; 
&gt; I&apos;m confused by this name. Usually, &quot;captured&quot; means &quot;it&apos;s in the
&gt; activation&quot;. But here it means &quot;it&apos;s not in the activation&quot;.
&gt; 
&gt; I guess by &quot;captured&quot; you meant &quot;captured by the arguments object&quot;.

Right.

&gt; 
&gt; I think this offset is always an offset into a DirectArguments object.
&gt; Right?

Correct.

&gt; If so, I suggest calling this &quot;DirectArgumentsOffset&quot;. I think that
&gt; would help disambiguate the capturing.

OK.

&gt; 
&gt; &gt; Source/JavaScriptCore/runtime/OutOfBandArguments.h:41
&gt; &gt; +class OutOfBandArguments : public JSNonFinalObject {
&gt; 
&gt; How about calling this CopiedArguments or ClonedArguments or
&gt; SnapshottedArguments or StrictArguments?
&gt; 
&gt; &quot;Out of band&quot; didn&apos;t really speak to me because I don&apos;t normally think of
&gt; any kind of arguments as being in-band, and in strict mode, these arguments
&gt; are not really out of band.

Maybe SnapshottedArguments is the best.

&gt; 
&gt; &gt; Source/JavaScriptCore/runtime/ScopedArguments.h:40
&gt; &gt; +class ScopedArguments : public GenericArguments&lt;ScopedArguments&gt; {
&gt; 
&gt; How about calling this CapturedArguments on IndirectArguments or
&gt; AliasedArguments?

If we get rid of the term CapturedArgumentsOffset, the notion of &quot;capture&quot; doesn&apos;t really come into play anymore.  IndirectArguments doesn&apos;t say why it&apos;s indirect.  AliasedArguments is not quite right, since DirectArguments are also aliased - just they are aliased to the stack not to the scope.

I actually think that ScopedArguments is the best name - more on that below.

&gt; 
&gt; We use &quot;scope&quot; in get_from_scope and put_to_scope to mean &quot;a subclass of
&gt; JSScope&quot;. 

I actually think we use it to mean &quot;in the scope&quot;.  It&apos;s &quot;get_from_scope&quot; because the value is in the scope.

For this reason, ScopedArguments makes sense to me.  I would agree with your argument if I had called it &quot;ArgumentsScope&quot; - clearly that&apos;s wrong, since this object isn&apos;t a scope.  But &quot;Scoped&quot; here is used to describe the way the arguments are actually stored when we use this object, and in that regard, it&apos;s an accurate description - the arguments *are* in a subclass of JSScope.

&gt; But &quot;scoped arguments&quot; is a bit of an awkward phrase, partly
&gt; because all arguments exist in some lexical scope and so there are no
&gt; non-scoped arguments. I like &quot;captured&quot; because it&apos;s more specific about
&gt; what triggered this behavior (a function that captured an argument), or I
&gt; like &quot;indirect&quot; because it&apos;s the opposite of &quot;direct&quot; and it conveys that we
&gt; forward requests somewhere else (even though we don&apos;t specify where), or I
&gt; like &quot;aliased&quot; because it conveys sharing between the named reference and
&gt; the indexed reference.

Hmmm.

I think that of your proposed names, I like CapturedArguments the best, but I don&apos;t like it as much as ScopedArguments.  I think I understand why you don&apos;t like ScopedArguments - the word &quot;scope&quot; means lexical scope and so using the term to describe arguments is a tautology. But, after bytecode generation the word &quot;scope&quot; is only used to mean that the value is in the heap.

In this patch we use the word &quot;scope&quot; this way in a bunch of places including:

- ScopeOffset, as opposed to VirtualRegister (aka StackOffset after I do the renaming), means that it&apos;s in the heap in a scope.

- VarOffset::isScope() means that it&apos;s in the heap in a scope.

Prior to this patch we already used the word &quot;scope&quot; this way:

- get_from_scope doesn&apos;t broadly mean that the variable is in a lexical scope; it means specifically that the variable is in the heap, in a scope object.

For that reason, ScopedArguments feels consistent with the way we usually use the word &quot;scope&quot;: a variable is &quot;scoped&quot; or &quot;in a scope&quot; when it is in a scope object that is allocated in the heap.

Do you buy this argument for the name ScopedArguments?

&gt; 
&gt; &gt; Source/JavaScriptCore/runtime/VarOffset.h:36
&gt; &gt; +enum VarKind : uint8_t {
&gt; 
&gt; enum class

OK.

&gt; 
&gt; &gt; Source/JavaScriptCore/runtime/VarOffset.h:40
&gt; &gt; +    CapturedArgumentKind
&gt; 
&gt; Same comment about the term &quot;captured&quot; here. Can we call this
&gt; DirectArgumentKind?

Yup, that makes sense.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1080086</commentid>
    <comment_count>122</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-03-25 16:12:15 -0700</bug_when>
    <thetext>&gt; For that reason, ScopedArguments feels consistent with the way we usually
&gt; use the word &quot;scope&quot;: a variable is &quot;scoped&quot; or &quot;in a scope&quot; when it is in a
&gt; scope object that is allocated in the heap.
&gt; 
&gt; Do you buy this argument for the name ScopedArguments?

Yeah, I&apos;m OK with this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1080149</commentid>
    <comment_count>123</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-25 18:35:27 -0700</bug_when>
    <thetext>OK, so the renamings will be like so:

What the patch previously called CapturedArgumentsOffset/CapturedArgumentKind will now be called DirectArgumentsOffset/DirectArgumentKind.

What the patch previously called OutOfBandArguments will now be called ArgumentsSnapshot.  This is because I like the name SnapshottedArguments, but I don&apos;t like using the word &quot;snapshot&quot; as a verb and then making it past tense.  It&apos;s awkward to say.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1080150</commentid>
    <comment_count>124</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-25 18:37:02 -0700</bug_when>
    <thetext>(In reply to comment #123)
&gt; OK, so the renamings will be like so:
&gt; 
&gt; What the patch previously called
&gt; CapturedArgumentsOffset/CapturedArgumentKind will now be called
&gt; DirectArgumentsOffset/DirectArgumentKind.
&gt; 
&gt; What the patch previously called OutOfBandArguments will now be called
&gt; ArgumentsSnapshot.  This is because I like the name SnapshottedArguments,
&gt; but I don&apos;t like using the word &quot;snapshot&quot; as a verb and then making it past
&gt; tense.  It&apos;s awkward to say.

No, this feels even weirder.  I&apos;m going with ClonedArguments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1080166</commentid>
    <comment_count>125</comment_count>
      <attachid>249464</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-25 20:04:29 -0700</bug_when>
    <thetext>Created attachment 249464
including ggaren&apos;s feedback</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1080178</commentid>
    <comment_count>126</comment_count>
      <attachid>249470</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-25 20:51:57 -0700</bug_when>
    <thetext>Created attachment 249470
rebased, added more tests

This is probably the one that will land.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1080179</commentid>
    <comment_count>127</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-03-25 20:56:13 -0700</bug_when>
    <thetext>Attachment 249470 did not pass style-queue:


ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:712:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:107:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:113:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:208:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:239:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:300:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:320:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/dfg/DFGCallCreateDirectArgumentsSlowPathGenerator.h:45:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGCallCreateDirectArgumentsSlowPathGenerator.h:46:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGCallCreateDirectArgumentsSlowPathGenerator.h:47:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGCallCreateDirectArgumentsSlowPathGenerator.h:48:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGCallCreateDirectArgumentsSlowPathGenerator.h:49:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:697:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGVarargsForwardingPhase.cpp:173:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGVarargsForwardingPhase.cpp:253:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/bytecode/BytecodeLivenessAnalysis.cpp:275:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/bytecode/BytecodeLivenessAnalysis.cpp:282:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/llint/LLIntSlowPaths.cpp:261:  The parameter name &quot;]&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/bytecode/BytecodeKills.h:63:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4384:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4669:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4672:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4673:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4674:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4676:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4681:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4698:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4699:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4700:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4702:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4708:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/dfg/DFGForAllKills.h:155:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGForAllKills.h:171:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGForAllKills.h:196:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGForAllKills.h:207:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 35 in 262 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>1080190</commentid>
    <comment_count>128</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-25 21:30:37 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/181993</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1080191</commentid>
    <comment_count>129</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-25 21:36:36 -0700</bug_when>
    <thetext>Fixes: http://trac.webkit.org/changeset/181994 http://trac.webkit.org/changeset/181995</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1080196</commentid>
    <comment_count>130</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-25 22:00:56 -0700</bug_when>
    <thetext>More fixes http://trac.webkit.org/changeset/181997 http://trac.webkit.org/changeset/181998</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1080201</commentid>
    <comment_count>131</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-25 22:33:35 -0700</bug_when>
    <thetext>Anotehr fix http://trac.webkit.org/changeset/182001</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1080210</commentid>
    <comment_count>132</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-25 22:54:46 -0700</bug_when>
    <thetext>This patch is still appearing to fail some tests.  Those failures don&apos;t reproduce locally.  The issue is that we need to rm -rf WebKitBuild on all of the bots.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1080227</commentid>
    <comment_count>133</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-25 23:55:05 -0700</bug_when>
    <thetext>I&apos;m seeing test failures in trunk.  I didn&apos;t see them before landing.  Investigating...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1080230</commentid>
    <comment_count>134</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-26 00:18:11 -0700</bug_when>
    <thetext>Anotehr fix http://trac.webkit.org/changeset/182004</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1080280</commentid>
    <comment_count>135</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-26 08:16:55 -0700</bug_when>
    <thetext>Looks like this broke some perf tests.  I&apos;m looking into it.


Running Dromaeo/jslib-modify-prototype.html (65 of 144)
error: Dromaeo/jslib-modify-prototype.html
Both operands to ICmp instruction are not of the same type!
  %128 = icmp eq i64 %127, i8 0
LLVM fatal error: Broken function found, compilation aborted!
1   0x11c57323c llvmCrash(char const*)
2   0x11cba947c llvm::report_fatal_error(llvm::Twine const&amp;, bool)
3   0x11cba93cc llvm::report_fatal_error(char const*, bool)
4   0x11cb83139 (anonymous namespace)::VerifierLegacyPass::runOnFunction(llvm::Function&amp;)
5   0x11cb68d4c llvm::FPPassManager::runOnFunction(llvm::Function&amp;)
6   0x11cb68f3b llvm::FPPassManager::runOnModule(llvm::Module&amp;)
7   0x11cb693d6 llvm::legacy::PassManagerImpl::run(llvm::Module&amp;)
8   0x11cb699ed llvm::legacy::PassManager::run(llvm::Module&amp;)
9   0x11ca60d2b llvm::MCJIT::emitObject(llvm::Module*)
10  0x11ca60f14 llvm::MCJIT::generateCodeForModule(llvm::Module*)
11  0x11ca610c8 llvm::MCJIT::finalizeObject()
12  0x11ca8f3b3 LLVMGetPointerToGlobal
13  0x113913472 JSC::FTL::compile(JSC::FTL::State&amp;, JSC::DFG::Safepoint::Result&amp;)
14  0x1138741a3 JSC::DFG::Plan::compileInThreadImpl(JSC::DFG::LongLivedState&amp;)
15  0x113873731 JSC::DFG::Plan::compileInThread(JSC::DFG::LongLivedState&amp;, JSC::DFG::ThreadData*)
16  0x1138faa43 JSC::DFG::Worklist::runThread(JSC::DFG::ThreadData*)
17  0x113c7a8f3 WTF::threadEntryPoint(void*)
18  0x113c7adaf WTF::wtfThreadEntryPoint(void*)
19  0x7fff85ad7899 _pthread_body
20  0x7fff85ad772a _pthread_struct_init
21  0x7fff85adbfc9 thread_start</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1080283</commentid>
    <comment_count>136</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-26 08:25:39 -0700</bug_when>
    <thetext>(In reply to comment #135)
&gt; Looks like this broke some perf tests.  I&apos;m looking into it.
&gt; 
&gt; 
&gt; Running Dromaeo/jslib-modify-prototype.html (65 of 144)
&gt; error: Dromaeo/jslib-modify-prototype.html
&gt; Both operands to ICmp instruction are not of the same type!
&gt;   %128 = icmp eq i64 %127, i8 0
&gt; LLVM fatal error: Broken function found, compilation aborted!
&gt; 1   0x11c57323c llvmCrash(char const*)
&gt; 2   0x11cba947c llvm::report_fatal_error(llvm::Twine const&amp;, bool)
&gt; 3   0x11cba93cc llvm::report_fatal_error(char const*, bool)
&gt; 4   0x11cb83139 (anonymous
&gt; namespace)::VerifierLegacyPass::runOnFunction(llvm::Function&amp;)
&gt; 5   0x11cb68d4c llvm::FPPassManager::runOnFunction(llvm::Function&amp;)
&gt; 6   0x11cb68f3b llvm::FPPassManager::runOnModule(llvm::Module&amp;)
&gt; 7   0x11cb693d6 llvm::legacy::PassManagerImpl::run(llvm::Module&amp;)
&gt; 8   0x11cb699ed llvm::legacy::PassManager::run(llvm::Module&amp;)
&gt; 9   0x11ca60d2b llvm::MCJIT::emitObject(llvm::Module*)
&gt; 10  0x11ca60f14 llvm::MCJIT::generateCodeForModule(llvm::Module*)
&gt; 11  0x11ca610c8 llvm::MCJIT::finalizeObject()
&gt; 12  0x11ca8f3b3 LLVMGetPointerToGlobal
&gt; 13  0x113913472 JSC::FTL::compile(JSC::FTL::State&amp;,
&gt; JSC::DFG::Safepoint::Result&amp;)
&gt; 14  0x1138741a3
&gt; JSC::DFG::Plan::compileInThreadImpl(JSC::DFG::LongLivedState&amp;)
&gt; 15  0x113873731 JSC::DFG::Plan::compileInThread(JSC::DFG::LongLivedState&amp;,
&gt; JSC::DFG::ThreadData*)
&gt; 16  0x1138faa43 JSC::DFG::Worklist::runThread(JSC::DFG::ThreadData*)
&gt; 17  0x113c7a8f3 WTF::threadEntryPoint(void*)
&gt; 18  0x113c7adaf WTF::wtfThreadEntryPoint(void*)
&gt; 19  0x7fff85ad7899 _pthread_body
&gt; 20  0x7fff85ad772a _pthread_struct_init
&gt; 21  0x7fff85adbfc9 thread_start

Pretty sure it&apos;s this: https://bugs.webkit.org/show_bug.cgi?id=143098</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1080321</commentid>
    <comment_count>137</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2015-03-26 10:24:36 -0700</bug_when>
    <thetext>Looks like this broke inspector-protocol/debugger/setBreakpoint-dfg-and-modify-local.html on Windows: https://build.webkit.org/results/Apple%20Win%207%20Release%20(Tests)/r181993%20(50642)/results.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1080369</commentid>
    <comment_count>138</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2015-03-26 12:02:35 -0700</bug_when>
    <thetext>(In reply to comment #137)
&gt; Looks like this broke
&gt; inspector-protocol/debugger/setBreakpoint-dfg-and-modify-local.html on
&gt; Windows:
&gt; https://build.webkit.org/results/Apple%20Win%207%20Release%20(Tests)/
&gt; r181993%20(50642)/results.html

I&apos;m tracking the investigation of this Windows crash here: https://bugs.webkit.org/show_bug.cgi?id=143109</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1080397</commentid>
    <comment_count>139</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-26 13:50:20 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/182023</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1080398</commentid>
    <comment_count>140</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-26 13:50:56 -0700</bug_when>
    <thetext>(In reply to comment #139)
&gt; Landed in http://trac.webkit.org/changeset/182023

I mean, I landed a fix for an expedia crash in that revision.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1080538</commentid>
    <comment_count>141</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-26 20:38:22 -0700</bug_when>
    <thetext>*** Bug 137357 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1081620</commentid>
    <comment_count>142</comment_count>
    <who name="Carlos Alberto Lopez Perez">clopez</who>
    <bug_when>2015-03-31 05:36:20 -0700</bug_when>
    <thetext>Looks like this also caused the performance test Speedometer/Full.html to crash sometimes on the GTK port. Reported on bug 143261.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1084267</commentid>
    <comment_count>143</comment_count>
    <who name="">peavo</who>
    <bug_when>2015-04-10 04:19:30 -0700</bug_when>
    <thetext>This patch passes all stress tests on Win32, but seems to cause an empty message view, when trying to view messages on www.hotmail.com. Is this the case on Mac 32/64 bit as well?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1084400</commentid>
    <comment_count>144</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2015-04-10 16:06:01 -0700</bug_when>
    <thetext>(In reply to comment #143)
&gt; This patch passes all stress tests on Win32, but seems to cause an empty
&gt; message view, when trying to view messages on www.hotmail.com. Is this the
&gt; case on Mac 32/64 bit as well?

FYI, there&apos;s a bug that was introduced in r181993 that may cause similar symptoms.  That bug is being tracked in https://bugs.webkit.org/show_bug.cgi?id=143407.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1084929</commentid>
    <comment_count>145</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2015-04-13 13:02:42 -0700</bug_when>
    <thetext>*** Bug 139827 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1084935</commentid>
    <comment_count>146</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2015-04-13 13:10:07 -0700</bug_when>
    <thetext>*** Bug 139524 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1086911</commentid>
    <comment_count>147</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2015-04-20 14:36:02 -0700</bug_when>
    <thetext>*** Bug 140097 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>245967</attachid>
            <date>2015-02-03 14:16:45 -0800</date>
            <delta_ts>2015-02-18 20:44:57 -0800</delta_ts>
            <desc>it begins!</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>22520</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIv
Qnl0ZWNvZGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAxNzk1NTYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTE2LDcgKzExNiw3IEBAIFBhcnNlckVycm9yIEJ5dGVjb2RlR2VuZXJhdG9yOjpnZW5l
cmF0ZSgKICAgICBtX2NvZGVCbG9jay0+c2hyaW5rVG9GaXQoKTsKIAogICAgIGlmIChtX2NvZGVC
bG9jay0+c3ltYm9sVGFibGUoKSAmJiAhbV9jb2RlQmxvY2stPnZtKCktPnR5cGVQcm9maWxlcigp
KQotICAgICAgICBtX2NvZGVCbG9jay0+c2V0U3ltYm9sVGFibGUobV9jb2RlQmxvY2stPnN5bWJv
bFRhYmxlKCktPmNsb25lQ2FwdHVyZWROYW1lcygqbV9jb2RlQmxvY2stPnZtKCkpKTsKKyAgICAg
ICAgbV9jb2RlQmxvY2stPnNldFN5bWJvbFRhYmxlKG1fY29kZUJsb2NrLT5zeW1ib2xUYWJsZSgp
LT5jbG9uZUlnbm9yaW5nU3RhY2soKm1fY29kZUJsb2NrLT52bSgpKSk7CiAKICAgICBpZiAobV9l
eHByZXNzaW9uVG9vRGVlcCkKICAgICAgICAgcmV0dXJuIFBhcnNlckVycm9yKFBhcnNlckVycm9y
OjpPdXRPZk1lbW9yeSk7CkBAIC0xMjQsMTcgKzEyNCwyOCBAQCBQYXJzZXJFcnJvciBCeXRlY29k
ZUdlbmVyYXRvcjo6Z2VuZXJhdGUoCiB9CiAKIGJvb2wgQnl0ZWNvZGVHZW5lcmF0b3I6OmFkZFZh
cigKLSAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgQ29uc3RhbnRNb2RlIGNvbnN0YW50TW9k
ZSwgV2F0Y2hNb2RlIHdhdGNoTW9kZSwgUmVnaXN0ZXJJRComIHIwKQorICAgIGNvbnN0IElkZW50
aWZpZXImIGlkZW50LCBDb25zdGFudE1vZGUgY29uc3RhbnRNb2RlLCBWYXJLaW5kIHZhcktpbmQs
IFdhdGNoTW9kZSB3YXRjaE1vZGUsCisgICAgUmVnaXN0ZXJJRComIHIwKQogewogICAgIEFTU0VS
VChzdGF0aWNfY2FzdDxzaXplX3Q+KG1fY29kZUJsb2NrLT5tX251bVZhcnMpID09IG1fY2FsbGVl
UmVnaXN0ZXJzLnNpemUoKSk7CiAgICAgCiAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIo
c3ltYm9sVGFibGUoKS5tX2xvY2spOwotICAgIGludCBpbmRleCA9IHZpcnR1YWxSZWdpc3RlckZv
ckxvY2FsKG1fY2FsbGVlUmVnaXN0ZXJzLnNpemUoKSkub2Zmc2V0KCk7Ci0gICAgU3ltYm9sVGFi
bGVFbnRyeSBuZXdFbnRyeShpbmRleCwgY29uc3RhbnRNb2RlID09IElzQ29uc3RhbnQgPyBSZWFk
T25seSA6IDApOworICAgIFZhck9mZnNldCB2YXJPZmZzZXQ7CisgICAgaWYgKHZhcktpbmQgPT0g
SGVhcFZhcktpbmQpCisgICAgICAgIHZhck9mZnNldCA9IFZhck9mZnNldChIZWFwT2Zmc2V0KG1f
bnVtQ2FwdHVyZWRWYXJpYWJsZXMrKykpOworICAgIGVsc2UgeworICAgICAgICBBU1NFUlQodmFy
S2luZCA9PSBTdGFja1ZhcktpbmQpOworICAgICAgICB2YXJPZmZzZXQgPSBWYXJPZmZzZXQodmly
dHVhbFJlZ2lzdGVyRm9yTG9jYWwobV9jYWxsZWVSZWdpc3RlcnMuc2l6ZSgpKSk7CisgICAgfQor
ICAgIFN5bWJvbFRhYmxlRW50cnkgbmV3RW50cnkodmFyT2Zmc2V0LCBjb25zdGFudE1vZGUgPT0g
SXNDb25zdGFudCA/IFJlYWRPbmx5IDogMCk7CiAgICAgU3ltYm9sVGFibGU6Ok1hcDo6QWRkUmVz
dWx0IHJlc3VsdCA9IHN5bWJvbFRhYmxlKCkuYWRkKGxvY2tlciwgaWRlbnQuaW1wbCgpLCBuZXdF
bnRyeSk7CiAKICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KSB7Ci0gICAgICAgIHIwID0gJnJl
Z2lzdGVyRm9yKHJlc3VsdC5pdGVyYXRvci0+dmFsdWUuZ2V0SW5kZXgoKSk7CisgICAgICAgIFJF
TEVBU0VfQVNTRVJUKHZhcktpbmQgPT0gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS52YXJPZmZzZXQo
KS5raW5kKCkpOworICAgICAgICBpZiAodmFyS2luZCA9PSBIZWFwVmFyS2luZCkKKyAgICAgICAg
ICAgIHIwID0gbnVsbHB0cjsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcjAgPSAmcmVnaXN0
ZXJGb3IocmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS52YXJPZmZzZXQoKSk7CiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICB9CiAgICAgCkBAIC0xNDQsNyArMTU1LDEwIEBAIGJvb2wgQnl0ZWNvZGVH
ZW5lcmF0b3I6OmFkZFZhcigKICAgICAgICAgbV93YXRjaGFibGVWYXJpYWJsZXMuYXBwZW5kKGlk
ZW50KTsKICAgICB9CiAgICAgCi0gICAgcjAgPSBhZGRWYXIoKTsKKyAgICBpZiAodmFyS2luZCA9
PSBIZWFwVmFyS2luZCkKKyAgICAgICAgcjAgPSBudWxscHRyOworICAgIGVsc2UKKyAgICAgICAg
cjAgPSBhZGRWYXIoKTsKICAgICAKICAgICBBU1NFUlQod2F0Y2hNb2RlID09IE5vdFdhdGNoYWJs
ZSB8fCBzdGF0aWNfY2FzdDxzaXplX3Q+KG1fY29kZUJsb2NrLT5tX251bVZhcnMpID09IG1fd2F0
Y2hhYmxlVmFyaWFibGVzLnNpemUoKSk7CiAgICAgCkBAIC0xNjksNiArMTgzLDcgQEAgQnl0ZWNv
ZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFZNJgogICAgICwgbV9lbXB0eVZhbHVlUmVn
aXN0ZXIoMCkKICAgICAsIG1fZ2xvYmFsT2JqZWN0UmVnaXN0ZXIoMCkKICAgICAsIG1fbG9jYWxB
cmd1bWVudHNSZWdpc3RlcigwKQorICAgICwgbV9udW1DYXB0dXJlZFZhcmlhYmxlcygwKQogICAg
ICwgbV9maW5hbGx5RGVwdGgoMCkKICAgICAsIG1fbG9jYWxTY29wZURlcHRoKDApCiAgICAgLCBt
X2NvZGVUeXBlKEdsb2JhbENvZGUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
bXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCShyZXZpc2lvbiAxNzk1NTYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9y
LmgJKHdvcmtpbmcgY29weSkKQEAgLTYxNiwxNSArNjE2LDE1IEBAIG5hbWVzcGFjZSBKU0Mgewog
CiAgICAgICAgIC8vIEFkZHMgYSB2YXIgc2xvdCBhbmQgbWFwcyBpdCB0byB0aGUgbmFtZSBpZGVu
dCBpbiBzeW1ib2xUYWJsZSgpLgogICAgICAgICBlbnVtIFdhdGNoTW9kZSB7IElzV2F0Y2hhYmxl
LCBOb3RXYXRjaGFibGUgfTsKLSAgICAgICAgUmVnaXN0ZXJJRCogYWRkVmFyKGNvbnN0IElkZW50
aWZpZXImIGlkZW50LCBDb25zdGFudE1vZGUgY29uc3RhbnRNb2RlLCBXYXRjaE1vZGUgd2F0Y2hN
b2RlKQorICAgICAgICBSZWdpc3RlcklEKiBhZGRWYXIoY29uc3QgSWRlbnRpZmllciYgaWRlbnQs
IENvbnN0YW50TW9kZSBjb25zdGFudE1vZGUsIFZhcktpbmQgdmFyS2luZCwgV2F0Y2hNb2RlIHdh
dGNoTW9kZSkKICAgICAgICAgewogICAgICAgICAgICAgUmVnaXN0ZXJJRCogbG9jYWw7Ci0gICAg
ICAgICAgICBhZGRWYXIoaWRlbnQsIGNvbnN0YW50TW9kZSwgd2F0Y2hNb2RlLCBsb2NhbCk7Cisg
ICAgICAgICAgICBhZGRWYXIoaWRlbnQsIGNvbnN0YW50TW9kZSwgdmFyS2luZCwgd2F0Y2hNb2Rl
LCBsb2NhbCk7CiAgICAgICAgICAgICByZXR1cm4gbG9jYWw7CiAgICAgICAgIH0KIAogICAgICAg
ICAvLyBEaXR0by4gUmV0dXJucyB0cnVlIGlmIGEgbmV3IFJlZ2lzdGVySUQgd2FzIGFkZGVkLCBm
YWxzZSBpZiBhIHByZS1leGlzdGluZyBSZWdpc3RlcklEIHdhcyByZS11c2VkLgotICAgICAgICBi
b29sIGFkZFZhcihjb25zdCBJZGVudGlmaWVyJiwgQ29uc3RhbnRNb2RlLCBXYXRjaE1vZGUsIFJl
Z2lzdGVySUQqJik7CisgICAgICAgIGJvb2wgYWRkVmFyKGNvbnN0IElkZW50aWZpZXImLCBDb25z
dGFudE1vZGUsIFZhcktpbmQsIFdhdGNoTW9kZSwgUmVnaXN0ZXJJRComKTsKICAgICAgICAgCiAg
ICAgICAgIC8vIEFkZHMgYW4gYW5vbnltb3VzIHZhciBzbG90LiBUbyBnaXZlIHRoaXMgc2xvdCBh
IG5hbWUsIGFkZCBpdCB0byBzeW1ib2xUYWJsZSgpLgogICAgICAgICBSZWdpc3RlcklEKiBhZGRW
YXIoKQpAQCAtNzc0LDYgKzc3NCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBWZWN0b3I8
SWRlbnRpZmllciwgMTY+IG1fd2F0Y2hhYmxlVmFyaWFibGVzOwogICAgICAgICBTZWdtZW50ZWRW
ZWN0b3I8UmVnaXN0ZXJJRCwgMzI+IG1fY29uc3RhbnRQb29sUmVnaXN0ZXJzOwogICAgICAgICBT
ZWdtZW50ZWRWZWN0b3I8UmVnaXN0ZXJJRCwgMzI+IG1fY2FsbGVlUmVnaXN0ZXJzOworICAgICAg
ICB1bnNpZ25lZCBtX251bUNhcHR1cmVkVmFyaWFibGVzOwogICAgICAgICBTZWdtZW50ZWRWZWN0
b3I8UmVnaXN0ZXJJRCwgMzI+IG1fcGFyYW1ldGVyczsKICAgICAgICAgU2VnbWVudGVkVmVjdG9y
PExhYmVsLCAzMj4gbV9sYWJlbHM7CiAgICAgICAgIExhYmVsU2NvcGVTdG9yZSBtX2xhYmVsU2Nv
cGVzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGVhcE9mZnNldC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGVhcE9mZnNldC5j
cHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IZWFwT2Zm
c2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQyIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJIZWFwT2Zmc2V0LmgiCisKK25hbWVzcGFjZSBKU0MgeworCit2b2lkIEhlYXBPZmZzZXQ6
OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBpZiAoISp0aGlzKSB7CisgICAg
ICAgIG91dC5wcmludCgiaGVhcEludmFsaWQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICAKKyAgICBvdXQucHJpbnQoImhlYXAiLCBtX29mZnNldCk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IZWFwT2Zmc2V0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGVhcE9mZnNldC5o
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGVhcE9mZnNl
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBIZWFwT2Zmc2V0X2gKKyNkZWZpbmUg
SGVhcE9mZnNldF9oCisKKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0
Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSGVhcE9mZnNldCB7
CitwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludmFsaWRPZmZzZXQgPSBVSU5U
X01BWDsKKworICAgIEhlYXBPZmZzZXQoKQorICAgICAgICA6IG1fb2Zmc2V0KGludmFsaWRPZmZz
ZXQpCisgICAgeworICAgIH0KKyAgICAKKyAgICBleHBsaWNpdCBIZWFwT2Zmc2V0KHVuc2lnbmVk
IG9mZnNldCkKKyAgICAgICAgOiBtX29mZnNldChvZmZzZXQpCisgICAgeworICAgIH0KKyAgICAK
KyAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0ID09IGludmFsaWRP
ZmZzZXQ7IH0KKyAgICAKKyAgICB1bnNpZ25lZCBvZmZzZXRVbmNoZWNrZWQoKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIG1fb2Zmc2V0OworICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBv
ZmZzZXQoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fb2Zmc2V0ICE9IGludmFsaWRP
ZmZzZXQpOworICAgICAgICByZXR1cm4gbV9vZmZzZXQ7CisgICAgfQorICAgIAorICAgIHZvaWQg
ZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworICAgIAorcHJpdmF0ZToKKyAgICB1bnNpZ25lZCBt
X29mZnNldDsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSGVhcE9mZnNl
dF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJs
ZS5jcHAJKHJldmlzaW9uIDE3OTU1NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1N5bWJvbFRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTIsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTM3LDcgKzEzNyw3
IEBAIHZvaWQgU3ltYm9sVGFibGU6OldhdGNocG9pbnRDbGVhbnVwOjpmaW4KICAgICB9CiB9CiAK
LVN5bWJvbFRhYmxlKiBTeW1ib2xUYWJsZTo6Y2xvbmVDYXB0dXJlZE5hbWVzKFZNJiB2bSkKK1N5
bWJvbFRhYmxlKiBTeW1ib2xUYWJsZTo6Y2xvbmVJZ25vcmluZ1N0YWNrKFZNJiB2bSkKIHsKICAg
ICBTeW1ib2xUYWJsZSogcmVzdWx0ID0gU3ltYm9sVGFibGU6OmNyZWF0ZSh2bSk7CiAgICAgCkBA
IC0xNDcsMTEgKzE0NywxMiBAQCBTeW1ib2xUYWJsZSogU3ltYm9sVGFibGU6OmNsb25lQ2FwdHVy
ZWROCiAgICAgcmVzdWx0LT5tX2NhcHR1cmVFbmQgPSBtX2NhcHR1cmVFbmQ7CiAKICAgICBmb3Ig
KGF1dG8gaXRlciA9IG1fbWFwLmJlZ2luKCksIGVuZCA9IG1fbWFwLmVuZCgpOyBpdGVyICE9IGVu
ZDsgKytpdGVyKSB7Ci0gICAgICAgIGlmICghaXNDYXB0dXJlZChpdGVyLT52YWx1ZS5nZXRJbmRl
eCgpKSkKKyAgICAgICAgaWYgKGl0ZXItPnZhbHVlLnZhck9mZnNldCgpLmlzU3RhY2soKSkKICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBBU1NFUlQoaXRlci0+dmFsdWUudmFyT2Zmc2V0
KCkuaXNIZWFwKCkpOwogICAgICAgICByZXN1bHQtPm1fbWFwLmFkZCgKICAgICAgICAgICAgIGl0
ZXItPmtleSwKLSAgICAgICAgICAgIFN5bWJvbFRhYmxlRW50cnkoaXRlci0+dmFsdWUuZ2V0SW5k
ZXgoKSwgaXRlci0+dmFsdWUuZ2V0QXR0cmlidXRlcygpKSk7CisgICAgICAgICAgICBTeW1ib2xU
YWJsZUVudHJ5KGl0ZXItPnZhbHVlLnZhck9mZnNldCgpLCBpdGVyLT52YWx1ZS5nZXRBdHRyaWJ1
dGVzKCkpKTsKICAgICB9CiAgICAgCiAgICAgaWYgKG1fc2xvd0FyZ3VtZW50cykgewpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5oCShyZXZpc2lvbiAx
Nzk1NTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNywg
MjAwOCwgMjAxMi0yMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAwNywgMjAwOCwgMjAxMi0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTA3LDkgKzEwNywxMCBA
QCBzdHJ1Y3QgU3ltYm9sVGFibGVFbnRyeSB7CiAgICAgICAgICAgICByZXR1cm4gIShtX2JpdHMg
JiB+U2xpbUZsYWcpOwogICAgICAgICB9CiAKLSAgICAgICAgaW50IGdldEluZGV4KCkgY29uc3QK
KyAgICAgICAgVmFyT2Zmc2V0IHZhck9mZnNldCgpIGNvbnN0CiAgICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KG1fYml0cyA+PiBGbGFnQml0cyk7CisgICAgICAg
ICAgICByZXR1cm4gVmFyT2Zmc2V0Ojphc3NlbWJsZSgKKyAgICAgICAgICAgICAgICAhIShtX2Jp
dHMgJiBTdGFja0ZsYWcpLCBzdGF0aWNfY2FzdDxpbnQ+KG1fYml0cyA+PiBGbGFnQml0cykpOwog
ICAgICAgICB9CiAgICAgCiAgICAgICAgIGJvb2wgaXNSZWFkT25seSgpIGNvbnN0CkBAIC0xNDIs
MTggKzE0MywxOCBAQCBzdHJ1Y3QgU3ltYm9sVGFibGVFbnRyeSB7CiAgICAgewogICAgIH0KIAot
ICAgIFN5bWJvbFRhYmxlRW50cnkoaW50IGluZGV4KQorICAgIFN5bWJvbFRhYmxlRW50cnkoVmFy
T2Zmc2V0IG9mZnNldCkKICAgICAgICAgOiBtX2JpdHMoU2xpbUZsYWcpCiAgICAgewotICAgICAg
ICBBU1NFUlQoaXNWYWxpZEluZGV4KGluZGV4KSk7Ci0gICAgICAgIHBhY2soaW5kZXgsIGZhbHNl
LCBmYWxzZSk7CisgICAgICAgIEFTU0VSVChpc1ZhbGlkVmFyT2Zmc2V0KG9mZnNldCkpOworICAg
ICAgICBwYWNrKG9mZnNldCwgZmFsc2UsIGZhbHNlKTsKICAgICB9CiAKLSAgICBTeW1ib2xUYWJs
ZUVudHJ5KGludCBpbmRleCwgdW5zaWduZWQgYXR0cmlidXRlcykKKyAgICBTeW1ib2xUYWJsZUVu
dHJ5KFZhck9mZnNldCBvZmZzZXQsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCiAgICAgICAgIDogbV9i
aXRzKFNsaW1GbGFnKQogICAgIHsKLSAgICAgICAgQVNTRVJUKGlzVmFsaWRJbmRleChpbmRleCkp
OwotICAgICAgICBwYWNrKGluZGV4LCBhdHRyaWJ1dGVzICYgUmVhZE9ubHksIGF0dHJpYnV0ZXMg
JiBEb250RW51bSk7CisgICAgICAgIEFTU0VSVChpc1ZhbGlkVmFyT2Zmc2V0KG9mZnNldCkpOwor
ICAgICAgICBwYWNrKG9mZnNldCwgYXR0cmlidXRlcyAmIFJlYWRPbmx5LCBhdHRyaWJ1dGVzICYg
RG9udEVudW0pOwogICAgIH0KICAgICAKICAgICB+U3ltYm9sVGFibGVFbnRyeSgpCkBAIC0xODEs
OSArMTgyLDExIEBAIHN0cnVjdCBTeW1ib2xUYWJsZUVudHJ5IHsKICAgICAgICAgcmV0dXJuICEo
Yml0cygpICYgflNsaW1GbGFnKTsKICAgICB9CiAKLSAgICBpbnQgZ2V0SW5kZXgoKSBjb25zdAor
ICAgIFZhck9mZnNldCB2YXJPZmZzZXQoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PGludD4oYml0cygpID4+IEZsYWdCaXRzKTsKKyAgICAgICAgdWludHB0cl90IG15
Qml0cyA9IGJpdHMoKTsKKyAgICAgICAgcmV0dXJuIFZhck9mZnNldDo6YXNzZW1ibGUoCisgICAg
ICAgICAgICAhIShteUJpdHMgJiBTdGFja0ZsYWcpLCBzdGF0aWNfY2FzdDxpbnQ+KG15Qml0cyA+
PiBGbGFnQml0cykpOwogICAgIH0KICAgICAKICAgICBBTFdBWVNfSU5MSU5FIEZhc3QgZ2V0RmFz
dCgpIGNvbnN0CkBAIC0yMDksNyArMjEyLDcgQEAgc3RydWN0IFN5bWJvbFRhYmxlRW50cnkgewog
CiAgICAgdm9pZCBzZXRBdHRyaWJ1dGVzKHVuc2lnbmVkIGF0dHJpYnV0ZXMpCiAgICAgewotICAg
ICAgICBwYWNrKGdldEluZGV4KCksIGF0dHJpYnV0ZXMgJiBSZWFkT25seSwgYXR0cmlidXRlcyAm
IERvbnRFbnVtKTsKKyAgICAgICAgcGFjayh2YXJPZmZzZXQoKSwgYXR0cmlidXRlcyAmIFJlYWRP
bmx5LCBhdHRyaWJ1dGVzICYgRG9udEVudW0pOwogICAgIH0KIAogICAgIGJvb2wgaXNSZWFkT25s
eSgpIGNvbnN0CkBAIC0yNDIsNyArMjQ1LDggQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgY29uc3Qg
aW50cHRyX3QgUmVhZE9ubHlGbGFnID0gMHgyOwogICAgIHN0YXRpYyBjb25zdCBpbnRwdHJfdCBE
b250RW51bUZsYWcgPSAweDQ7CiAgICAgc3RhdGljIGNvbnN0IGludHB0cl90IE5vdE51bGxGbGFn
ID0gMHg4OwotICAgIHN0YXRpYyBjb25zdCBpbnRwdHJfdCBGbGFnQml0cyA9IDQ7CisgICAgc3Rh
dGljIGNvbnN0IGludHB0cl90IFN0YWNrRmxhZyA9IDB4MTA7CisgICAgc3RhdGljIGNvbnN0IGlu
dHB0cl90IEZsYWdCaXRzID0gNTsKICAgICAKICAgICBjbGFzcyBGYXRFbnRyeSB7CiAgICAgICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwpAQCAtMzA5LDIwICszMTMsMjMgQEAgcHJpdmF0ZToK
IAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZnJlZUZhdEVudHJ5U2xvdygpOwogCi0gICAg
dm9pZCBwYWNrKGludCBpbmRleCwgYm9vbCByZWFkT25seSwgYm9vbCBkb250RW51bSkKKyAgICB2
b2lkIHBhY2soVmFyT2Zmc2V0IG9mZnNldCwgYm9vbCByZWFkT25seSwgYm9vbCBkb250RW51bSkK
ICAgICB7CiAgICAgICAgIEFTU0VSVCghaXNGYXQoKSk7CiAgICAgICAgIGludHB0cl90JiBiaXRz
UmVmID0gYml0cygpOwotICAgICAgICBiaXRzUmVmID0gKHN0YXRpY19jYXN0PGludHB0cl90Pihp
bmRleCkgPDwgRmxhZ0JpdHMpIHwgTm90TnVsbEZsYWcgfCBTbGltRmxhZzsKKyAgICAgICAgYml0
c1JlZiA9CisgICAgICAgICAgICAoc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KG9mZnNldC5yYXdPZmZz
ZXQoKSkgPDwgRmxhZ0JpdHMpIHwgTm90TnVsbEZsYWcgfCBTbGltRmxhZzsKICAgICAgICAgaWYg
KHJlYWRPbmx5KQogICAgICAgICAgICAgYml0c1JlZiB8PSBSZWFkT25seUZsYWc7CiAgICAgICAg
IGlmIChkb250RW51bSkKICAgICAgICAgICAgIGJpdHNSZWYgfD0gRG9udEVudW1GbGFnOworICAg
ICAgICBpZiAob2Zmc2V0LmlzU3RhY2soKSkKKyAgICAgICAgICAgIGJpdHNSZWYgfD0gU3RhY2tG
bGFnOwogICAgIH0KICAgICAKLSAgICBib29sIGlzVmFsaWRJbmRleChpbnQgaW5kZXgpCisgICAg
c3RhdGljIGJvb2wgaXNWYWxpZFZhck9mZnNldChWYXJPZmZzZXQgb2Zmc2V0KQogICAgIHsKLSAg
ICAgICAgcmV0dXJuICgoc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KGluZGV4KSA8PCBGbGFnQml0cykg
Pj4gRmxhZ0JpdHMpID09IHN0YXRpY19jYXN0PGludHB0cl90PihpbmRleCk7CisgICAgICAgIHJl
dHVybiAoKHN0YXRpY19jYXN0PGludHB0cl90PihvZmZzZXQucmF3T2Zmc2V0KCkpIDw8IEZsYWdC
aXRzKSA+PiBGbGFnQml0cykgPT0gc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KG9mZnNldC5yYXdPZmZz
ZXQoKSk7CiAgICAgfQogCiAgICAgaW50cHRyX3QgbV9iaXRzOwpAQCAtNDU2LDE5ICs0NjMsNiBA
QCBwdWJsaWM6CiAgICAgYm9vbCB1c2VzTm9uU3RyaWN0RXZhbCgpIHsgcmV0dXJuIG1fdXNlc05v
blN0cmljdEV2YWw7IH0KICAgICB2b2lkIHNldFVzZXNOb25TdHJpY3RFdmFsKGJvb2wgdXNlc05v
blN0cmljdEV2YWwpIHsgbV91c2VzTm9uU3RyaWN0RXZhbCA9IHVzZXNOb25TdHJpY3RFdmFsOyB9
CiAKLSAgICBpbnQgY2FwdHVyZVN0YXJ0KCkgY29uc3QgeyByZXR1cm4gbV9jYXB0dXJlU3RhcnQ7
IH0KLSAgICB2b2lkIHNldENhcHR1cmVTdGFydChpbnQgY2FwdHVyZVN0YXJ0KSB7IG1fY2FwdHVy
ZVN0YXJ0ID0gY2FwdHVyZVN0YXJ0OyB9Ci0KLSAgICBpbnQgY2FwdHVyZUVuZCgpIGNvbnN0IHsg
cmV0dXJuIG1fY2FwdHVyZUVuZDsgfQotICAgIHZvaWQgc2V0Q2FwdHVyZUVuZChpbnQgY2FwdHVy
ZUVuZCkgeyBtX2NhcHR1cmVFbmQgPSBjYXB0dXJlRW5kOyB9Ci0KLSAgICBpbnQgY2FwdHVyZUNv
dW50KCkgY29uc3QgeyByZXR1cm4gLShtX2NhcHR1cmVFbmQgLSBtX2NhcHR1cmVTdGFydCk7IH0K
LSAgICAKLSAgICBib29sIGlzQ2FwdHVyZWQoaW50IG9wZXJhbmQpCi0gICAgewotICAgICAgICBy
ZXR1cm4gb3BlcmFuZCA8PSBjYXB0dXJlU3RhcnQoKSAmJiBvcGVyYW5kID4gY2FwdHVyZUVuZCgp
OwotICAgIH0KLQogICAgIGludCBwYXJhbWV0ZXJDb3VudCgpIHsgcmV0dXJuIG1fcGFyYW1ldGVy
Q291bnRJbmNsdWRpbmdUaGlzIC0gMTsgfQogICAgIGludCBwYXJhbWV0ZXJDb3VudEluY2x1ZGlu
Z1RoaXMoKSB7IHJldHVybiBtX3BhcmFtZXRlckNvdW50SW5jbHVkaW5nVGhpczsgfQogICAgIHZv
aWQgc2V0UGFyYW1ldGVyQ291bnRJbmNsdWRpbmdUaGlzKGludCBwYXJhbWV0ZXJDb3VudEluY2x1
ZGluZ1RoaXMpIHsgbV9wYXJhbWV0ZXJDb3VudEluY2x1ZGluZ1RoaXMgPSBwYXJhbWV0ZXJDb3Vu
dEluY2x1ZGluZ1RoaXM7IH0KQEAgLTQ3Nyw3ICs0NzEsNyBAQCBwdWJsaWM6CiAgICAgY29uc3Qg
U2xvd0FyZ3VtZW50KiBzbG93QXJndW1lbnRzKCkgeyByZXR1cm4gbV9zbG93QXJndW1lbnRzLmdl
dCgpOyB9CiAgICAgdm9pZCBzZXRTbG93QXJndW1lbnRzKHN0ZDo6dW5pcXVlX3B0cjxTbG93QXJn
dW1lbnRbXT4gc2xvd0FyZ3VtZW50cykgeyBtX3Nsb3dBcmd1bWVudHMgPSBXVEY6Om1vdmUoc2xv
d0FyZ3VtZW50cyk7IH0KICAgICAKLSAgICBTeW1ib2xUYWJsZSogY2xvbmVDYXB0dXJlZE5hbWVz
KFZNJik7CisgICAgU3ltYm9sVGFibGUqIGNsb25lSWdub3JpbmdTdGFjayhWTSYpOwogCiAgICAg
dm9pZCBwcmVwYXJlRm9yVHlwZVByb2ZpbGluZyhjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJik7
CiAKQEAgLTUxNSw5ICs1MDksNiBAQCBwcml2YXRlOgogICAgIGludCBtX3BhcmFtZXRlckNvdW50
SW5jbHVkaW5nVGhpczsKICAgICBib29sIG1fdXNlc05vblN0cmljdEV2YWw7CiAKLSAgICBpbnQg
bV9jYXB0dXJlU3RhcnQ7Ci0gICAgaW50IG1fY2FwdHVyZUVuZDsKLQogICAgIHN0ZDo6dW5pcXVl
X3B0cjxTbG93QXJndW1lbnRbXT4gbV9zbG93QXJndW1lbnRzOwogICAgIAogICAgIHN0ZDo6dW5p
cXVlX3B0cjxXYXRjaHBvaW50Q2xlYW51cD4gbV93YXRjaHBvaW50Q2xlYW51cDsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Zhck9mZnNldC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVmFyT2Zmc2V0LmNwcAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Zhck9mZnNldC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw3MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVmFyT2Zmc2V0Lmgi
CisKK25hbWVzcGFjZSBKU0MgeworCit2b2lkIFZhck9mZnNldDo6ZHVtcChQcmludFN0cmVhbSYg
b3V0KSBjb25zdAoreworICAgIGlmICghaXNWYWxpZCgpKSB7CisgICAgICAgIG91dC5wcmludCgi
aW52YWxpZCIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIGlmIChpc0hlYXAo
KSkgeworICAgICAgICBvdXQucHJpbnQoaGVhcE9mZnNldCgpKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICAKKyAgICBBU1NFUlQoaXNTdGFjaygpKTsKKyAgICBvdXQucHJpbnQoc3RhY2tP
ZmZzZXQoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCituYW1lc3BhY2UgV1RGIHsKKwor
dXNpbmcgbmFtZXNwYWNlIEpTQzsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBv
dXQsIFZhcktpbmQgdmFyS2luZCkKK3sKKyAgICBzd2l0Y2ggKHZhcktpbmQpIHsKKyAgICBjYXNl
IEludmFsaWRWYXJLaW5kOgorICAgICAgICBvdXQucHJpbnQoIkludmFsaWQiKTsKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgSGVhcFZhcktpbmQ6CisgICAgICAgIG91dC5wcmludCgiSGVhcCIp
OworICAgICAgICByZXR1cm47CisgICAgY2FzZSBTdGFja1ZhcktpbmQ6CisgICAgICAgIG91dC5w
cmludCgiU3RhY2siKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVmFyT2Zmc2V0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVmFyT2Zmc2V0LmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WYXJPZmZzZXQuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDE2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaWZuZGVmIFZhck9mZnNldF9oCisjZGVmaW5lIFZhck9mZnNldF9oCisKKyNpbmNsdWRl
ICJIZWFwT2Zmc2V0LmgiCisjaW5jbHVkZSAiVmlydHVhbFJlZ2lzdGVyLmgiCisKK25hbWVzcGFj
ZSBKU0MgeworCitlbnVtIFZhcktpbmQgeworICAgIEludmFsaWRWYXJLaW5kLAorICAgIEhlYXBW
YXJLaW5kLAorICAgIFN0YWNrVmFyS2luZAorfTsKKworY2xhc3MgVmFyT2Zmc2V0IHsKK3B1Ymxp
YzoKKyAgICBWYXJPZmZzZXQoKQorICAgICAgICA6IG1faXNTdGFjayhmYWxzZSkKKyAgICAgICAg
LCBtX29mZnNldChIZWFwT2Zmc2V0OjppbnZhbGlkT2Zmc2V0KQorICAgIHsKKyAgICB9CisgICAg
CisgICAgZXhwbGljaXQgVmFyT2Zmc2V0KFZpcnR1YWxSZWdpc3RlciBzdGFja09mZnNldCkKKyAg
ICB7CisgICAgICAgIGlmICghc3RhY2tPZmZzZXQuaXNWYWxpZCgpKSB7CisgICAgICAgICAgICBt
X2lzU3RhY2sgPSBmYWxzZTsKKyAgICAgICAgICAgIG1fb2Zmc2V0ID0gSGVhcE9mZnNldDo6aW52
YWxpZE9mZnNldDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1faXNTdGFjayA9IHRy
dWU7CisgICAgICAgICAgICBtX29mZnNldCA9IHN0YWNrT2Zmc2V0Lm9mZnNldCgpOworICAgICAg
ICB9CisgICAgfQorICAgIAorICAgIGV4cGxpY2l0IFZhck9mZnNldChIZWFwT2Zmc2V0IGhlYXBP
ZmZzZXQpCisgICAgICAgIDogbV9pc1N0YWNrKGZhbHNlKQorICAgICAgICAsIG1fb2Zmc2V0KGhl
YXBPZmZzZXQub2Zmc2V0KCkpCisgICAgeworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgVmFyT2Zm
c2V0IGFzc2VtYmxlKGJvb2wgaXNTdGFjaywgdW5zaWduZWQgb2Zmc2V0KQorICAgIHsKKyAgICAg
ICAgVmFyT2Zmc2V0IHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1faXNTdGFjayA9IGlzU3RhY2s7
CisgICAgICAgIHJlc3VsdC5tX29mZnNldCA9IG9mZnNldDsKKyAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc1ZhbGlkKCkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBtX2lzU3RhY2sgfHwgbV9vZmZzZXQgIT0gSGVhcE9mZnNldDo6aW52YWxpZE9mZnNl
dDsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuICFpc1ZhbGlkKCk7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNWYWxpZCgpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gISEqdGhpczsKKyAgICB9CisgICAgCisgICAgYm9v
bCBpc1N0YWNrKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2lzU3RhY2s7CisgICAg
fQorICAgIAorICAgIGJvb2wgaXNIZWFwKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAh
bV9pc1N0YWNrICYmIG1fb2Zmc2V0ICE9IEhlYXBPZmZzZXQ6OmludmFsaWRPZmZzZXQ7CisgICAg
fQorICAgIAorICAgIFZhcktpbmQga2luZCgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAobV9p
c1N0YWNrKQorICAgICAgICAgICAgcmV0dXJuIFN0YWNrVmFyS2luZDsKKyAgICAgICAgaWYgKG1f
b2Zmc2V0ID09IEhlYXBPZmZzZXQ6OmludmFsaWRPZmZzZXQpCisgICAgICAgICAgICByZXR1cm4g
SW52YWxpZFZhcktpbmQ7CisgICAgICAgIHJldHVybiBIZWFwVmFyS2luZDsKKyAgICB9CisgICAg
CisgICAgVmlydHVhbFJlZ2lzdGVyIHN0YWNrT2Zmc2V0VW5jaGVja2VkKCkgY29uc3QKKyAgICB7
CisgICAgICAgIGlmICghaXNTdGFjaygpKQorICAgICAgICAgICAgcmV0dXJuIFZpcnR1YWxSZWdp
c3RlcigpOworICAgICAgICByZXR1cm4gVmlydHVhbFJlZ2lzdGVyKG1fb2Zmc2V0KTsKKyAgICB9
CisgICAgCisgICAgSGVhcE9mZnNldCBoZWFwT2Zmc2V0VW5jaGVja2VkKCkgY29uc3QKKyAgICB7
CisgICAgICAgIC8vIExvZ2ljYWxseSB0aGlzIGlzIGp1c3Q6CisgICAgICAgIC8vCisgICAgICAg
IC8vIGlmICghaXNIZWFwKCkpCisgICAgICAgIC8vICAgICByZXR1cm4gSGVhcE9mZnNldCgpOwor
ICAgICAgICAvLyByZXR1cm4gSGVhcE9mZnNldChtX29mZnNldCk7CisgICAgICAgIC8vCisgICAg
ICAgIC8vIEJ1dCB3ZSBjYW4gd3JpdGUgdGhpcyBtb3JlIGVmZmljaWVudGx5IGJlY2F1c2UgYW4g
aW52YWxpZCBWYXJPZmZzZXQgaXMganVzdCAhbV9pc1N0YWNrCisgICAgICAgIC8vIGFuZCBtX29m
ZnNldCA9PSBIZWFwT2Zmc2V0OjppbnZhbGlkT2Zmc2V0LgorCisgICAgICAgIGlmIChtX2lzU3Rh
Y2spCisgICAgICAgICAgICByZXR1cm4gSGVhcE9mZnNldCgpOworICAgICAgICByZXR1cm4gSGVh
cE9mZnNldChtX29mZnNldCk7CisgICAgfQorICAgIAorICAgIFZpcnR1YWxSZWdpc3RlciBzdGFj
a09mZnNldCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaXNTdGFjaygpKTsKKyAgICAg
ICAgcmV0dXJuIFZpcnR1YWxSZWdpc3RlcihtX29mZnNldCk7CisgICAgfQorICAgIAorICAgIEhl
YXBPZmZzZXQgaGVhcE9mZnNldCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaXNIZWFw
KCkpOworICAgICAgICByZXR1cm4gSGVhcE9mZnNldChtX29mZnNldCk7CisgICAgfQorICAgIAor
ICAgIHVuc2lnbmVkIHJhd09mZnNldCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaXNW
YWxpZCgpKTsKKyAgICAgICAgcmV0dXJuIG1fb2Zmc2V0OworICAgIH0KKyAgICAKKyAgICB2b2lk
IGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAKK3ByaXZhdGU6CisgICAgYm9vbCBtX2lz
U3RhY2s7CisgICAgdW5zaWduZWQgbV9vZmZzZXQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MK
KworbmFtZXNwYWNlIFdURiB7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpT
Qzo6VmFyS2luZCk7CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gVmFyT2Zmc2V0
X2gKKwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>246875</attachid>
            <date>2015-02-18 20:44:57 -0800</date>
            <delta_ts>2015-02-18 20:45:28 -0800</delta_ts>
            <desc>WRONG PATCH</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>69966</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgJ
KHJldmlzaW9uIDE3OTg2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxs
TGlua0luZm8uaAkod29ya2luZyBjb3B5KQpAQCAtNjEsNiArNjEsNyBAQCBzdHJ1Y3QgQ2FsbExp
bmtJbmZvIDogcHVibGljIEJhc2ljUmF3U2VuCiAgICAgICAgICwgaGFzU2VlblNob3VsZFJlcGF0
Y2goZmFsc2UpCiAgICAgICAgICwgaGFzU2VlbkNsb3N1cmUoZmFsc2UpCiAgICAgICAgICwgY2Fs
bFR5cGUoTm9uZSkKKyAgICAgICAgLCBtYXhOdW1Bcmd1bWVudHMoMCkKICAgICAgICAgLCBzbG93
UGF0aENvdW50KDApCiAgICAgewogICAgIH0KQEAgLTg3LDYgKzg4LDcgQEAgc3RydWN0IENhbGxM
aW5rSW5mbyA6IHB1YmxpYyBCYXNpY1Jhd1NlbgogICAgIGJvb2wgaGFzU2VlbkNsb3N1cmUgOiAx
OwogICAgIHVuc2lnbmVkIGNhbGxUeXBlIDogNTsgLy8gQ2FsbFR5cGUKICAgICB1bnNpZ25lZCBj
YWxsZWVHUFIgOiA4OworICAgIHVpbnQ4X3QgbWF4TnVtQXJndW1lbnRzOyAvLyBPbmx5IHVzZWQg
Zm9yIHZhcmFyZ3MgY2FsbHMuCiAgICAgdWludDMyX3Qgc2xvd1BhdGhDb3VudDsKICAgICBDb2Rl
T3JpZ2luIGNvZGVPcmlnaW47CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9DYWxsTGlua1N0YXR1cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NhbGxMaW5rU3RhdHVzLmNwcAkocmV2aXNpb24gMTc5ODYzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rU3RhdHVzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTI5LDcgKzEyOSw5IEBAIENhbGxMaW5rU3RhdHVzIENhbGxMaW5rU3RhdHVzOjpjb21w
dXRlRm8KICAgICAvLyBXZSBkb24ndCByZWFsbHkgbmVlZCB0aGlzLCBidXQgYW55dGltZSB3ZSBo
YXZlIHRvIGRlYnVnIHRoaXMgY29kZSwgaXQgYmVjb21lcyBpbmRpc3BlbnNhYmxlLgogICAgIFVO
VVNFRF9QQVJBTShwcm9maWxlZEJsb2NrKTsKICAgICAKLSAgICByZXR1cm4gY29tcHV0ZUZyb21D
YWxsTGlua0luZm8obG9ja2VyLCBjYWxsTGlua0luZm8pOworICAgIENhbGxMaW5rU3RhdHVzIHJl
c3VsdCA9IGNvbXB1dGVGcm9tQ2FsbExpbmtJbmZvKGxvY2tlciwgY2FsbExpbmtJbmZvKTsKKyAg
ICByZXN1bHQubV9tYXhOdW1Bcmd1bWVudHMgPSBjYWxsTGlua0luZm8ubWF4TnVtQXJndW1lbnRz
OworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIENhbGxMaW5rU3RhdHVzIENhbGxMaW5rU3RhdHVz
Ojpjb21wdXRlRnJvbUNhbGxMaW5rSW5mbygKQEAgLTI5MSw2ICsyOTMsMTMgQEAgQ2FsbExpbmtT
dGF0dXMgQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVGbwogICAgIHJldHVybiBjb21wdXRlRm9yKHBy
b2ZpbGVkQmxvY2ssIGNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCwgYmFzZWxpbmVNYXApOwogfQog
Cit2b2lkIENhbGxMaW5rU3RhdHVzOjpzZXRQcm92ZW5Db25zdGFudENhbGxlZShDYWxsVmFyaWFu
dCB2YXJpYW50KQoreworICAgIG1fdmFyaWFudHMgPSBDYWxsVmFyaWFudExpc3R7IHZhcmlhbnQg
fTsKKyAgICBtX2NvdWxkVGFrZVNsb3dQYXRoID0gZmFsc2U7CisgICAgbV9pc1Byb3ZlZCA9IHRy
dWU7Cit9CisKIGJvb2wgQ2FsbExpbmtTdGF0dXM6OmlzQ2xvc3VyZUNhbGwoKSBjb25zdAogewog
ICAgIGZvciAodW5zaWduZWQgaSA9IG1fdmFyaWFudHMuc2l6ZSgpOyBpLS07KSB7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMuaAkocmV2
aXNpb24gMTc5ODYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5r
U3RhdHVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTY4LDEyICs2OCw2IEBAIHB1YmxpYzoKICAgICB7
CiAgICAgfQogICAgIAotICAgIENhbGxMaW5rU3RhdHVzJiBzZXRJc1Byb3ZlZChib29sIGlzUHJv
dmVkKQotICAgIHsKLSAgICAgICAgbV9pc1Byb3ZlZCA9IGlzUHJvdmVkOwotICAgICAgICByZXR1
cm4gKnRoaXM7Ci0gICAgfQotICAgIAogICAgIHN0YXRpYyBDYWxsTGlua1N0YXR1cyBjb21wdXRl
Rm9yKAogICAgICAgICBDb2RlQmxvY2sqLCB1bnNpZ25lZCBieXRlY29kZUluZGV4LCBjb25zdCBD
YWxsTGlua0luZm9NYXAmKTsKIApAQCAtMTA4LDYgKzEwMiw4IEBAIHB1YmxpYzoKICAgICBzdGF0
aWMgQ2FsbExpbmtTdGF0dXMgY29tcHV0ZUZvcigKICAgICAgICAgQ29kZUJsb2NrKiwgQ29kZU9y
aWdpbiwgY29uc3QgQ2FsbExpbmtJbmZvTWFwJiwgY29uc3QgQ29udGV4dE1hcCYpOwogICAgIAor
ICAgIHZvaWQgc2V0UHJvdmVuQ29uc3RhbnRDYWxsZWUoQ2FsbFZhcmlhbnQpOworICAgIAogICAg
IGJvb2wgaXNTZXQoKSBjb25zdCB7IHJldHVybiAhbV92YXJpYW50cy5pc0VtcHR5KCkgfHwgbV9j
b3VsZFRha2VTbG93UGF0aDsgfQogICAgIAogICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyBy
ZXR1cm4gIWlzU2V0KCk7IH0KQEAgLTEyMyw2ICsxMTksOCBAQCBwdWJsaWM6CiAgICAgCiAgICAg
Ym9vbCBpc0Nsb3N1cmVDYWxsKCkgY29uc3Q7IC8vIFJldHVybnMgdHJ1ZSBpZiBhbnkgY2FsbGVl
IGlzIGEgY2xvc3VyZSBjYWxsLgogICAgIAorICAgIGJvb2wgbWF4TnVtQXJndW1lbnRzKCkgY29u
c3QgeyByZXR1cm4gbV9tYXhOdW1Bcmd1bWVudHM7IH0KKyAgICAKICAgICB2b2lkIGR1bXAoUHJp
bnRTdHJlYW0mKSBjb25zdDsKICAgICAKIHByaXZhdGU6CkBAIC0xMzcsNiArMTM1LDcgQEAgcHJp
dmF0ZToKICAgICBDYWxsVmFyaWFudExpc3QgbV92YXJpYW50czsKICAgICBib29sIG1fY291bGRU
YWtlU2xvd1BhdGg7CiAgICAgYm9vbCBtX2lzUHJvdmVkOworICAgIHVuc2lnbmVkIG1fbWF4TnVt
QXJndW1lbnRzOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmgJKHJldmlzaW9uIDE3OTg2MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEyMSw2ICsxMjEsOCBAQCBzdHJ1Y3QgSW5saW5lQ2FsbEZyYW1lIHsKICAgICBlbnVtIEtp
bmQgewogICAgICAgICBDYWxsLAogICAgICAgICBDb25zdHJ1Y3QsCisgICAgICAgIENhbGxWYXJh
cmdzLAorICAgICAgICBDb25zdHJ1Y3RWYXJhcmdzLAogICAgICAgICAKICAgICAgICAgLy8gRm9y
IHRoZXNlLCB0aGUgc3RhY2tPZmZzZXQgaW5jb3Jwb3JhdGVzIHRoZSBhcmd1bWVudCBjb3VudCBw
bHVzIHRoZSB0cnVlIHJldHVybiBQQwogICAgICAgICAvLyBzbG90LgpAQCAtMTQwLDI1ICsxNDIs
MzkgQEAgc3RydWN0IElubGluZUNhbGxGcmFtZSB7CiAgICAgICAgIHJldHVybiBDYWxsOwogICAg
IH0KICAgICAKKyAgICBzdGF0aWMgS2luZCB2YXJhcmdzS2luZEZvcihDb2RlU3BlY2lhbGl6YXRp
b25LaW5kIGtpbmQpCisgICAgeworICAgICAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICAgICAgY2Fz
ZSBDb2RlRm9yQ2FsbDoKKyAgICAgICAgICAgIHJldHVybiBDYWxsVmFyYXJnczsKKyAgICAgICAg
Y2FzZSBDb2RlRm9yQ29uc3RydWN0OgorICAgICAgICAgICAgcmV0dXJuIENvbnN0cnVjdFZhcmFy
Z3M7CisgICAgICAgIH0KKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgcmV0dXJuIENhbGw7CisgICAgfQorICAgIAogICAgIHN0YXRpYyBDb2RlU3BlY2lhbGl6
YXRpb25LaW5kIHNwZWNpYWxpemF0aW9uS2luZEZvcihLaW5kIGtpbmQpCiAgICAgewogICAgICAg
ICBzd2l0Y2ggKGtpbmQpIHsKICAgICAgICAgY2FzZSBDYWxsOgorICAgICAgICBjYXNlIENhbGxW
YXJhcmdzOgogICAgICAgICBjYXNlIEdldHRlckNhbGw6CiAgICAgICAgIGNhc2UgU2V0dGVyQ2Fs
bDoKICAgICAgICAgICAgIHJldHVybiBDb2RlRm9yQ2FsbDsKICAgICAgICAgY2FzZSBDb25zdHJ1
Y3Q6CisgICAgICAgIGNhc2UgQ29uc3RydWN0VmFyYXJnczoKICAgICAgICAgICAgIHJldHVybiBD
b2RlRm9yQ29uc3RydWN0OwogICAgICAgICB9CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiAgICAgICAgIHJldHVybiBDb2RlRm9yQ2FsbDsKICAgICB9CiAgICAgCi0gICAg
c3RhdGljIGJvb2wgaXNOb3JtYWxDYWxsKEtpbmQga2luZCkKKyAgICBzdGF0aWMgYm9vbCBpc1Zh
cmFyZ3MoS2luZCBraW5kKQogICAgIHsKICAgICAgICAgc3dpdGNoIChraW5kKSB7Ci0gICAgICAg
IGNhc2UgQ2FsbDoKLSAgICAgICAgY2FzZSBDb25zdHJ1Y3Q6CisgICAgICAgIGNhc2UgQ2FsbFZh
cmFyZ3M6CisgICAgICAgIGNhc2UgQ29uc3RydWN0VmFyYXJnczoKICAgICAgICAgICAgIHJldHVy
biB0cnVlOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAt
MTcxLDEwICsxODcsMTEgQEAgc3RydWN0IElubGluZUNhbGxGcmFtZSB7CiAgICAgQ29kZU9yaWdp
biBjYWxsZXI7CiAgICAgQml0VmVjdG9yIGNhcHR1cmVkVmFyczsgLy8gSW5kZXhlZCBieSB0aGUg
bWFjaGluZSBjYWxsIGZyYW1lJ3MgdmFyaWFibGUgbnVtYmVyaW5nLgogCi0gICAgc2lnbmVkIHN0
YWNrT2Zmc2V0IDogMjk7Ci0gICAgdW5zaWduZWQga2luZCA6IDI7IC8vIHJlYWwgdHlwZSBpcyBL
aW5kCisgICAgc2lnbmVkIHN0YWNrT2Zmc2V0IDogMjg7CisgICAgdW5zaWduZWQga2luZCA6IDM7
IC8vIHJlYWwgdHlwZSBpcyBLaW5kCiAgICAgYm9vbCBpc0Nsb3N1cmVDYWxsIDogMTsgLy8gSWYg
ZmFsc2UgdGhlbiB3ZSBrbm93IHRoYXQgY2FsbGVlL3Njb3BlIGFyZSBjb25zdGFudHMgYW5kIHRo
ZSBERkcgd29uJ3QgdHJlYXQgdGhlbSBhcyB2YXJpYWJsZXMsIGkuZS4gdGhleSBoYXZlIHRvIGJl
IHJlY292ZXJlZCBtYW51YWxseS4KICAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRzUmVnaXN0
ZXI7IC8vIFRoaXMgaXMgb25seSBzZXQgaWYgdGhlIGNvZGUgdXNlcyBhcmd1bWVudHMuIFRoZSB1
bm1vZGlmaWVkIGFyZ3VtZW50cyByZWdpc3RlciBmb2xsb3dzIHRoZSB1bm1vZGlmaWVkQXJndW1l
bnRzUmVnaXN0ZXIoKSBjb252ZW50aW9uIChzZWUgQ29kZUJsb2NrLmgpLgorICAgIFZpcnR1YWxS
ZWdpc3RlciBhcmd1bWVudENvdW50UmVnaXN0ZXI7IC8vIE9ubHkgc2V0IHdoZW4gd2UgaW5saW5l
IGEgdmFyYXJncyBjYWxsLgogICAgIAogICAgIC8vIFRoZXJlIGlzIHJlYWxseSBubyBnb29kIG5v
dGlvbiBvZiBhICJkZWZhdWx0IiBzZXQgb2YgdmFsdWVzIGZvcgogICAgIC8vIElubGluZUNhbGxG
cmFtZSdzIGZpZWxkcy4gVGhpcyBjb25zdHJ1Y3RvciBpcyBoZXJlIGp1c3QgdG8gcmVkdWNlIGNv
bmZ1c2lvbiBpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdElu
dGVycHJldGVySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkocmV2aXNpb24gMTc5ODYzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTE0NCw3ICsxNDQsNyBAQCBib29sIEFic3RyYWN0SW50ZXJw
cmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIEFTU0VSVChtX2dyYXBoLm1fZm9ybSA9PSBT
U0EpOwogICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9kZS0+dmFyaWFi
bGVBY2Nlc3NEYXRhKCk7CiAgICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gbV9zdGF0ZS52
YXJpYWJsZXMoKS5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpLm9mZnNldCgpKTsKLSAgICAgICAg
QVNTRVJUKHZhbHVlLmlzSGVhcFRvcCgpKTsKKyAgICAgICAgQVNTRVJUKCF2YWx1ZS5pc0NsZWFy
KCkpOwogICAgICAgICBGaWx0cmF0aW9uUmVzdWx0IHJlc3VsdCA9CiAgICAgICAgICAgICB2YWx1
ZS5maWx0ZXIodHlwZUZpbHRlckZvcih1c2VLaW5kRm9yKHZhcmlhYmxlLT5mbHVzaEZvcm1hdCgp
KSkpOwogICAgICAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgcmVzdWx0ID09IEZpbHRyYXRpb25P
Syk7CkBAIC0yMDMsOSArMjAzLDIwIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFj
dFN0YXRlVHkKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgU2V0QXJndW1lbnQ6Ci0gICAgICAg
IC8vIEFzc2VydCB0aGF0IHRoZSBzdGF0ZSBvZiBhcmd1bWVudHMgaGFzIGJlZW4gc2V0LgotICAg
ICAgICBBU1NFUlQoIW1fc3RhdGUuYmxvY2soKS0+dmFsdWVzQXRIZWFkLm9wZXJhbmQobm9kZS0+
bG9jYWwoKSkuaXNDbGVhcigpKTsKKyAgICAgICAgLy8gQXNzZXJ0IHRoYXQgdGhlIHN0YXRlIG9m
IGFyZ3VtZW50cyBoYXMgYmVlbiBzZXQuIFNldEFyZ3VtZW50IG1lYW5zIHRoYXQgc29tZW9uZSBz
ZXQKKyAgICAgICAgLy8gdGhlIGFyZ3VtZW50IHZhbHVlcyBvdXQtb2YtYmFuZCwgYW5kIGN1cnJl
bnRseSB0aGlzIGFsd2F5cyBtZWFucyBzZXR0aW5nIHRvIGEKKyAgICAgICAgLy8gbm9uLWNsZWFy
IHZhbHVlLgorICAgICAgICBBU1NFUlQoIW1fc3RhdGUudmFyaWFibGVzKCkub3BlcmFuZChub2Rl
LT5sb2NhbCgpKS5pc0NsZWFyKCkpOwogICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgY2Fz
ZSBMb2FkVmFyYXJnczogeworICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+b3JpZ2luLnNlbWFu
dGljLCBjbG9iYmVyTGltaXQpOworICAgICAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBub2Rl
LT5sb2FkVmFyYXJnc0RhdGEoKTsKKyAgICAgICAgbV9zdGF0ZS52YXJpYWJsZXMoKS5vcGVyYW5k
KGRhdGEtPmNvdW50KS5zZXRUeXBlKFNwZWNJbnQzMik7CisgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IGRhdGEtPmxpbWl0OyBpLS07KQorICAgICAgICAgICAgbV9zdGF0ZS52YXJpYWJsZXMoKS5v
cGVyYW5kKGRhdGEtPnN0YXJ0Lm9mZnNldCgpICsgaSkubWFrZUhlYXBUb3AoKTsKKyAgICAgICAg
YnJlYWs7CisgICAgfQogICAgICAgICAgICAgCiAgICAgY2FzZSBCaXRBbmQ6CiAgICAgY2FzZSBC
aXRPcjoKQEAgLTEzMTUsNyArMTMyNiw4IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0
cmFjdFN0YXRlVHkKICAgICAgICAgLy8gdGhlIGFyZ3VtZW50cyBhIGJpdC4gTm90ZSB0aGF0IHRo
aXMgaXMgbm90IHN1ZmZpY2llbnQgdG8gZm9yY2UgY29uc3RhbnQgZm9sZGluZwogICAgICAgICAv
LyBvZiBHZXRNeUFyZ3VtZW50c0xlbmd0aCwgYmVjYXVzZSBHZXRNeUFyZ3VtZW50c0xlbmd0aCBp
cyBhIGNsb2JiZXJpbmcgb3BlcmF0aW9uLgogICAgICAgICAvLyBXZSBwZXJmb3JtIGZ1cnRoZXIg
b3B0aW1pemF0aW9ucyBvbiB0aGlzIGxhdGVyIG9uLgotICAgICAgICBpZiAobm9kZS0+b3JpZ2lu
LnNlbWFudGljLmlubGluZUNhbGxGcmFtZSkgeworICAgICAgICBpZiAobm9kZS0+b3JpZ2luLnNl
bWFudGljLmlubGluZUNhbGxGcmFtZQorICAgICAgICAgICAgJiYgIUlubGluZUNhbGxGcmFtZTo6
aXNWYXJhcmdzKG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUtPmtpbmQpKSB7
CiAgICAgICAgICAgICBzZXRDb25zdGFudCgKICAgICAgICAgICAgICAgICBub2RlLCBqc051bWJl
cihub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgp
IC0gMSkpOwogICAgICAgICAgICAgbV9zdGF0ZS5zZXREaWRDbG9iYmVyKHRydWUpOyAvLyBQcmV0
ZW5kIHRoYXQgd2UgY2xvYmJlcmVkIHRvIHByZXZlbnQgY29uc3RhbnQgZm9sZGluZy4KQEAgLTE5
NjQsNiArMTk3Niw5IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkK
ICAgICBjYXNlIENvbnN0cnVjdDoKICAgICBjYXNlIE5hdGl2ZUNhbGw6CiAgICAgY2FzZSBOYXRp
dmVDb25zdHJ1Y3Q6CisgICAgY2FzZSBDYWxsVmFyYXJnczoKKyAgICBjYXNlIENhbGxGb3J3YXJk
VmFyYXJnczoKKyAgICBjYXNlIENvbnN0cnVjdFZhcmFyZ3M6CiAgICAgICAgIGNsb2JiZXJXb3Js
ZChub2RlLT5vcmlnaW4uc2VtYW50aWMsIGNsb2JiZXJMaW1pdCk7CiAgICAgICAgIGZvck5vZGUo
bm9kZSkubWFrZUhlYXBUb3AoKTsKICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzU2ltcGxpZmljYXRp
b25QaGFzZS5jcHAJKHJldmlzaW9uIDE3OTg2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTUwMyw2ICs1MDMsOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIE5vZGVPcmlnaW4g
b3JpZ2luID0gbm9kZS0+b3JpZ2luOwogICAgICAgICAgICAgICAgICAgICBpZiAoIW9yaWdpbi5z
ZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKElubGluZUNhbGxGcmFtZTo6aXNWYXJhcmdzKG9yaWdp
bi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUtPmtpbmQpKQorICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAvLyBX
ZSBrbm93IGV4YWN0bHkgd2hhdCB0aGlzIHdpbGwgcmV0dXJuLiBCdXQgb25seSBhZnRlciB3ZSBo
YXZlIGNoZWNrZWQKICAgICAgICAgICAgICAgICAgICAgLy8gdGhhdCBub2JvZHkgaGFzIGVzY2Fw
ZWQgb3VyIGFyZ3VtZW50cy4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0
ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAxNzk4NjMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTgy
LDE0ICsxODIsMTUgQEAgcHJpdmF0ZToKICAgICAgICAgTm9kZSogY2FsbFRhcmdldCwgaW50IGFy
Z0NvdW50LCBpbnQgcmVnaXN0ZXJPZmZzZXQsIENhbGxMaW5rU3RhdHVzKTsKICAgICB2b2lkIGhh
bmRsZUNhbGwoaW50IHJlc3VsdCwgTm9kZVR5cGUgb3AsIENvZGVTcGVjaWFsaXphdGlvbktpbmQs
IHVuc2lnbmVkIGluc3RydWN0aW9uU2l6ZSwgaW50IGNhbGxlZSwgaW50IGFyZ0NvdW50LCBpbnQg
cmVnaXN0ZXJPZmZzZXQpOwogICAgIHZvaWQgaGFuZGxlQ2FsbChJbnN0cnVjdGlvbiogcGMsIE5v
ZGVUeXBlIG9wLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kKTsKKyAgICB2b2lkIGhhbmRsZVZhcmFy
Z3NDYWxsKEluc3RydWN0aW9uKiBwYywgTm9kZVR5cGUgb3AsIENvZGVTcGVjaWFsaXphdGlvbktp
bmQpOwogICAgIHZvaWQgZW1pdEZ1bmN0aW9uQ2hlY2tzKENhbGxWYXJpYW50LCBOb2RlKiBjYWxs
VGFyZ2V0LCBpbnQgcmVnaXN0ZXJPZmZzZXQsIENvZGVTcGVjaWFsaXphdGlvbktpbmQpOwogICAg
IHZvaWQgdW5kb0Z1bmN0aW9uQ2hlY2tzKENhbGxWYXJpYW50KTsKICAgICB2b2lkIGVtaXRBcmd1
bWVudFBoYW50b21zKGludCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kKTsKICAgICB1bnNpZ25lZCBpbmxpbmluZ0Nv
c3QoQ2FsbFZhcmlhbnQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgQ29kZVNwZWNp
YWxpemF0aW9uS2luZCk7IC8vIFJldHVybiBVSU5UX01BWCBpZiBpdCdzIG5vdCBhbiBpbmxpbmlu
ZyBjYW5kaWRhdGUuIEJ5IGNvbnZlbnRpb24sIGludHJpbnNpY3MgaGF2ZSBhIGNvc3Qgb2YgMS4K
ICAgICAvLyBIYW5kbGUgaW5saW5pbmcuIFJldHVybiB0cnVlIGlmIGl0IHN1Y2NlZWRlZCwgZmFs
c2UgaWYgd2UgbmVlZCB0byBwbGFudCBhIGNhbGwuCi0gICAgYm9vbCBoYW5kbGVJbmxpbmluZyhO
b2RlKiBjYWxsVGFyZ2V0Tm9kZSwgaW50IHJlc3VsdE9wZXJhbmQsIGNvbnN0IENhbGxMaW5rU3Rh
dHVzJiwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMs
IHVuc2lnbmVkIG5leHRPZmZzZXQsIE5vZGVUeXBlIGNhbGxPcCwgSW5saW5lQ2FsbEZyYW1lOjpL
aW5kLCBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uKTsKKyAgICBib29sIGhhbmRsZUlubGluaW5n
KE5vZGUqIGNhbGxUYXJnZXROb2RlLCBpbnQgcmVzdWx0T3BlcmFuZCwgY29uc3QgQ2FsbExpbmtT
dGF0dXMmLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIFZpcnR1YWxSZWdpc3RlciB0aGlzQXJndW1lbnQs
IFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudHNBcmd1bWVudCwgdW5zaWduZWQgYXJndW1lbnRzT2Zm
c2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIHVuc2lnbmVkIG5leHRPZmZzZXQs
IE5vZGVUeXBlIGNhbGxPcCwgSW5saW5lQ2FsbEZyYW1lOjpLaW5kLCBTcGVjdWxhdGVkVHlwZSBw
cmVkaWN0aW9uKTsKICAgICBlbnVtIENhbGxlckxpbmthYmlsaXR5IHsgQ2FsbGVyRG9lc05vcm1h
bExpbmtpbmcsIENhbGxlckxpbmtzTWFudWFsbHkgfTsKLSAgICBib29sIGF0dGVtcHRUb0lubGlu
ZUNhbGwoTm9kZSogY2FsbFRhcmdldE5vZGUsIGludCByZXN1bHRPcGVyYW5kLCBDYWxsVmFyaWFu
dCwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIHVu
c2lnbmVkIG5leHRPZmZzZXQsIElubGluZUNhbGxGcmFtZTo6S2luZCwgQ2FsbGVyTGlua2FiaWxp
dHksIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24sIHVuc2lnbmVkJiBpbmxpbmluZ0JhbGFuY2Up
OworICAgIGJvb2wgYXR0ZW1wdFRvSW5saW5lQ2FsbChOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwgaW50
IHJlc3VsdE9wZXJhbmQsIENhbGxWYXJpYW50LCBpbnQgcmVnaXN0ZXJPZmZzZXQsIFZpcnR1YWxS
ZWdpc3RlciB0aGlzQXJndW1lbnQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgdW5z
aWduZWQgbmV4dE9mZnNldCwgSW5saW5lQ2FsbEZyYW1lOjpLaW5kLCBDYWxsZXJMaW5rYWJpbGl0
eSwgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiwgdW5zaWduZWQmIGlubGluaW5nQmFsYW5jZSk7
CiAgICAgdm9pZCBpbmxpbmVDYWxsKE5vZGUqIGNhbGxUYXJnZXROb2RlLCBpbnQgcmVzdWx0T3Bl
cmFuZCwgQ2FsbFZhcmlhbnQsIGludCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzLCB1bnNpZ25lZCBuZXh0T2Zmc2V0LCBJbmxpbmVDYWxsRnJhbWU6OktpbmQs
IENhbGxlckxpbmthYmlsaXR5KTsKICAgICB2b2lkIGNhbmNlbExpbmtpbmdGb3JCbG9jayhJbmxp
bmVTdGFja0VudHJ5KiwgQmFzaWNCbG9jayopOyAvLyBPbmx5IHdvcmtzIHdoZW4gdGhlIGdpdmVu
IGJsb2NrIGlzIHRoZSBsYXN0IG9uZSB0byBoYXZlIGJlZW4gYWRkZWQgZm9yIHRoYXQgaW5saW5l
IHN0YWNrIGVudHJ5LgogICAgIC8vIEhhbmRsZSBpbnRyaW5zaWMgZnVuY3Rpb25zLiBSZXR1cm4g
dHJ1ZSBpZiBpdCBzdWNjZWVkZWQsIGZhbHNlIGlmIHdlIG5lZWQgdG8gcGxhbnQgYSBjYWxsLgpA
QCAtNjkxLDcgKzY5Miw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBvcCwgb3BJbmZvLCBjYWxs
ZWUsIGFyZ0NvdW50LCByZWdpc3Rlck9mZnNldCwgcHJlZGljdGlvbik7CiAgICAgICAgIFZpcnR1
YWxSZWdpc3RlciByZXN1bHRSZWcocmVzdWx0KTsKICAgICAgICAgaWYgKHJlc3VsdFJlZy5pc1Zh
bGlkKCkpCi0gICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKHJlc3VsdCksIGNhbGwpOwor
ICAgICAgICAgICAgc2V0KHJlc3VsdFJlZywgY2FsbCk7CiAgICAgICAgIHJldHVybiBjYWxsOwog
ICAgIH0KICAgICAKQEAgLTEwNDMsNyArMTA0NCw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6Omhh
bmRsZUNhbGwoCiAgICAgQVNTRVJUKHJlZ2lzdGVyT2Zmc2V0IDw9IDApOwogICAgIAogICAgIGlm
IChjYWxsVGFyZ2V0LT5oYXNDb25zdGFudCgpKQotICAgICAgICBjYWxsTGlua1N0YXR1cyA9IENh
bGxMaW5rU3RhdHVzKGNhbGxUYXJnZXQtPmFzSlNWYWx1ZSgpKS5zZXRJc1Byb3ZlZCh0cnVlKTsK
KyAgICAgICAgY2FsbExpbmtTdGF0dXMuc2V0UHJvdmVuQ29uc3RhbnRDYWxsZWUoY2FsbFRhcmdl
dC0+YXNKU1ZhbHVlKCkpOwogICAgIAogICAgIGlmIChPcHRpb25zOjp2ZXJib3NlREZHQnl0ZUNv
ZGVQYXJzaW5nKCkpCiAgICAgICAgIGRhdGFMb2coIiAgICBIYW5kbGluZyBjYWxsIGF0ICIsIGN1
cnJlbnRDb2RlT3JpZ2luKCksICI6ICIsIGNhbGxMaW5rU3RhdHVzLCAiXG4iKTsKQEAgLTEwNjAs
NyArMTA2MSw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUNhbGwoCiAgICAgCiAgICAg
T3BJbmZvIGNhbGxPcEluZm87CiAgICAgCi0gICAgaWYgKGhhbmRsZUlubGluaW5nKGNhbGxUYXJn
ZXQsIHJlc3VsdCwgY2FsbExpbmtTdGF0dXMsIHJlZ2lzdGVyT2Zmc2V0LCBhcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcywgbmV4dE9mZnNldCwgb3AsIGtpbmQsIHByZWRpY3Rpb24pKSB7CisgICAg
aWYgKGhhbmRsZUlubGluaW5nKGNhbGxUYXJnZXQsIHJlc3VsdCwgY2FsbExpbmtTdGF0dXMsIHJl
Z2lzdGVyT2Zmc2V0LCB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgwLCByZWdpc3Rlck9mZnNl
dCksIFZpcnR1YWxSZWdpc3RlcigpLCAwLCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgbmV4
dE9mZnNldCwgb3AsIGtpbmQsIHByZWRpY3Rpb24pKSB7CiAgICAgICAgIGlmIChtX2dyYXBoLmNv
bXBpbGF0aW9uKCkpCiAgICAgICAgICAgICBtX2dyYXBoLmNvbXBpbGF0aW9uKCktPm5vdGljZUlu
bGluZWRDYWxsKCk7CiAgICAgICAgIHJldHVybjsKQEAgLTEwODgsMTEgKzEwODksNDggQEAgdm9p
ZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlQ2FsbCgKICAgICBhZGRDYWxsKHJlc3VsdCwgb3AsIGNh
bGxPcEluZm8sIGNhbGxUYXJnZXQsIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCByZWdpc3Rl
ck9mZnNldCwgcHJlZGljdGlvbik7CiB9CiAKLXZvaWQgQnl0ZUNvZGVQYXJzZXI6OmVtaXRGdW5j
dGlvbkNoZWNrcyhDYWxsVmFyaWFudCBjYWxsZWUsIE5vZGUqIGNhbGxUYXJnZXQsIGludCByZWdp
c3Rlck9mZnNldCwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQordm9pZCBCeXRlQ29kZVBh
cnNlcjo6aGFuZGxlVmFyYXJnc0NhbGwoSW5zdHJ1Y3Rpb24qIHBjLCBOb2RlVHlwZSBvcCwgQ29k
ZVNwZWNpYWxpemF0aW9uS2luZCkKK3sKKyAgICBBU1NFUlQoT1BDT0RFX0xFTkdUSChvcF9jYWxs
X3ZhcmFyZ3MpID09IE9QQ09ERV9MRU5HVEgob3BfY29uc3RydWN0X3ZhcmFyZ3MpKTsKKyAgICAK
KyAgICBpbnQgcmVzdWx0ID0gcGNbMV0udS5vcGVyYW5kOworICAgIGludCBjYWxsZWUgPSBwY1sy
XS51Lm9wZXJhbmQ7CisgICAgaW50IHRoaXNSZWcgPSBwY1szXS51Lm9wZXJhbmQ7CisgICAgaW50
IGFyZ3VtZW50cyA9IHBjWzRdLnUub3BlcmFuZDsKKyAgICBpbnQgZmlyc3RGcmVlUmVnID0gcGNb
NV0udS5vcGVyYW5kOworICAgIGludCBmaXJzdFZhckFyZ09mZnNldCA9IHBjWzZdLnUub3BlcmFu
ZDsKKyAgICAKKyAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0gZ2V0UHJlZGljdGlvbigp
OworICAgIAorICAgIE5vZGUqIGNhbGxUYXJnZXQgPSBnZXQoVmlydHVhbFJlZ2lzdGVyKGNhbGxl
ZSkpOworICAgIAorICAgIENhbGxMaW5rU3RhdHVzIGNhbGxMaW5rU3RhdHVzID0gQ2FsbExpbmtT
dGF0dXM6OmNvbXB1dGVGb3IoCisgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRC
bG9jaywgY3VycmVudENvZGVPcmlnaW4oKSwKKyAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+bV9j
YWxsTGlua0luZm9zLCBtX2NhbGxDb250ZXh0TWFwKTsKKyAgICBpZiAoY2FsbFRhcmdldC0+aGFz
Q29uc3RhbnQoKSkKKyAgICAgICAgY2FsbExpbmtTdGF0dXMuc2V0UHJvdmVuQ29uc3RhbnRDYWxs
ZWUoY2FsbFRhcmdldC0+YXNKU1ZhbHVlKCkpOworICAgIAorICAgIGlmIChjYWxsTGlua1N0YXR1
cy5jYW5PcHRpbWl6ZSgpCisgICAgICAgICYmIGhhbmRsZUlubGluaW5nKGNhbGxUYXJnZXQsIHJl
c3VsdCwgY2FsbExpbmtTdGF0dXMsIGZpcnN0RnJlZVJlZywgVmlydHVhbFJlZ2lzdGVyKHRoaXNS
ZWcpLCBWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRzKSwgZmlyc3RWYXJBcmdPZmZzZXQsIDAsIG1f
Y3VycmVudEluZGV4ICsgT1BDT0RFX0xFTkdUSChvcF9jYWxsX3ZhcmFyZ3MpLCBvcCwgSW5saW5l
Q2FsbEZyYW1lOjp2YXJhcmdzS2luZEZvcihraW5kKSwgcHJlZGljdGlvbikpIHsKKyAgICAgICAg
aWYgKG1fZ3JhcGguY29tcGlsYXRpb24oKSkKKyAgICAgICAgICAgIG1fZ3JhcGguY29tcGlsYXRp
b24oKS0+bm90aWNlSW5saW5lZENhbGwoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAK
KyAgICBDYWxsVmFyYXJnc0RhdGEqIGRhdGEgPSBtX2NhbGxWYXJhcmdzRGF0YS5hZGQoKTsKKyAg
ICBkYXRhLT5maXJzdFZhckFyZ09mZnNldCA9IGZpcnN0VmFyQXJnT2Zmc2V0OworICAgIAorICAg
IE5vZGUqIGNhbGwgPSBhZGRUb0dyYXBoKG9wLCBPcEluZm8oZGF0YSksIE9wSW5mbyhwcmVkaWN0
aW9uKSwgY2FsbFRhcmdldCwgZ2V0KHRoaXNSZWcpLCBnZXQoYXJndW1lbnRzKSk7CisgICAgVmly
dHVhbFJlZ2lzdGVyIHJlc3VsdFJlZyhyZXN1bHQpOworICAgIGlmIChyZXN1bHRSZWcuaXNWYWxp
ZCgpKQorICAgICAgICBzZXQocmVzdWx0UmVnLCBjYWxsKTsKK30KKwordm9pZCBCeXRlQ29kZVBh
cnNlcjo6ZW1pdEZ1bmN0aW9uQ2hlY2tzKENhbGxWYXJpYW50IGNhbGxlZSwgTm9kZSogY2FsbFRh
cmdldCwgVmlydHVhbFJlZ2lzdGVyIHRoaXNBcmd1bWVudFJlZywgQ29kZVNwZWNpYWxpemF0aW9u
S2luZCBraW5kKQogewogICAgIE5vZGUqIHRoaXNBcmd1bWVudDsKLSAgICBpZiAoa2luZCA9PSBD
b2RlRm9yQ2FsbCkKLSAgICAgICAgdGhpc0FyZ3VtZW50ID0gZ2V0KHZpcnR1YWxSZWdpc3RlckZv
ckFyZ3VtZW50KDAsIHJlZ2lzdGVyT2Zmc2V0KSk7CisgICAgaWYgKHRoaXNBcmd1bWVudFJlZy5p
c1ZhbGlkKCkpCisgICAgICAgIHRoaXNBcmd1bWVudCA9IGdldCh0aGlzQXJndW1lbnRSZWcpOyB2
aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgwLCByZWdpc3Rlck9mZnNldCk7CiAgICAgZWxzZQog
ICAgICAgICB0aGlzQXJndW1lbnQgPSAwOwogCkBAIC0xMzU2LDcgKzEzOTQsNyBAQCB2b2lkIEJ5
dGVDb2RlUGFyc2VyOjpjYW5jZWxMaW5raW5nRm9yQmxvCiAgICAgfQogfQogCi1ib29sIEJ5dGVD
b2RlUGFyc2VyOjphdHRlbXB0VG9JbmxpbmVDYWxsKE5vZGUqIGNhbGxUYXJnZXROb2RlLCBpbnQg
cmVzdWx0T3BlcmFuZCwgQ2FsbFZhcmlhbnQgY2FsbGVlLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGlu
dCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgdW5zaWduZWQgbmV4dE9mZnNldCwgSW5saW5l
Q2FsbEZyYW1lOjpLaW5kIGtpbmQsIENhbGxlckxpbmthYmlsaXR5IGNhbGxlckxpbmthYmlsaXR5
LCBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uLCB1bnNpZ25lZCYgaW5saW5pbmdCYWxhbmNlKQor
Ym9vbCBCeXRlQ29kZVBhcnNlcjo6YXR0ZW1wdFRvSW5saW5lQ2FsbChOb2RlKiBjYWxsVGFyZ2V0
Tm9kZSwgaW50IHJlc3VsdE9wZXJhbmQsIENhbGxWYXJpYW50IGNhbGxlZSwgaW50IHJlZ2lzdGVy
T2Zmc2V0LCBWaXJ0dWFsUmVnaXN0ZXIgdGhpc0FyZ3VtZW50LCBpbnQgYXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMsIHVuc2lnbmVkIG5leHRPZmZzZXQsIElubGluZUNhbGxGcmFtZTo6S2luZCBr
aW5kLCBDYWxsZXJMaW5rYWJpbGl0eSBjYWxsZXJMaW5rYWJpbGl0eSwgU3BlY3VsYXRlZFR5cGUg
cHJlZGljdGlvbiwgdW5zaWduZWQmIGlubGluaW5nQmFsYW5jZSkKIHsKICAgICBDb2RlU3BlY2lh
bGl6YXRpb25LaW5kIHNwZWNpYWxpemF0aW9uS2luZCA9IElubGluZUNhbGxGcmFtZTo6c3BlY2lh
bGl6YXRpb25LaW5kRm9yKGtpbmQpOwogICAgIApAQCAtMTM5Myw3ICsxNDMxLDExIEBAIGJvb2wg
Qnl0ZUNvZGVQYXJzZXI6OmF0dGVtcHRUb0lubGluZUNhbGwKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAotYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcoTm9kZSogY2FsbFRhcmdldE5v
ZGUsIGludCByZXN1bHRPcGVyYW5kLCBjb25zdCBDYWxsTGlua1N0YXR1cyYgY2FsbExpbmtTdGF0
dXMsIGludCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCB1
bnNpZ25lZCBuZXh0T2Zmc2V0LCBOb2RlVHlwZSBjYWxsT3AsIElubGluZUNhbGxGcmFtZTo6S2lu
ZCBraW5kLCBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uKQorYm9vbCBCeXRlQ29kZVBhcnNlcjo6
aGFuZGxlSW5saW5pbmcoCisgICAgTm9kZSogY2FsbFRhcmdldE5vZGUsIGludCByZXN1bHRPcGVy
YW5kLCBjb25zdCBDYWxsTGlua1N0YXR1cyYgY2FsbExpbmtTdGF0dXMsCisgICAgaW50IHJlZ2lz
dGVyT2Zmc2V0T3JGaXJzdEZyZWVSZWcsIFZpcnR1YWxSZWdpc3RlciB0aGlzQXJndW1lbnQsCisg
ICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50c0FyZ3VtZW50LCB1bnNpZ25lZCBhcmd1bWVudHNP
ZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywKKyAgICB1bnNpZ25lZCBuZXh0
T2Zmc2V0LCBOb2RlVHlwZSBjYWxsT3AsIElubGluZUNhbGxGcmFtZTo6S2luZCBraW5kLCBTcGVj
dWxhdGVkVHlwZSBwcmVkaWN0aW9uKQogewogICAgIGlmICh2ZXJib3NlKSB7CiAgICAgICAgIGRh
dGFMb2coIkhhbmRsaW5nIGlubGluaW5nLi4uXG4iKTsKQEAgLTE0MDcsNiArMTQ0OSwxMyBAQCBi
b29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxpbmluZyhOb2RlCiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICB9CiAgICAgCisgICAgaWYgKElubGluZUNhbGxGcmFtZTo6aXNWYXJhcmdzKGtp
bmQpCisgICAgICAgICYmIGNhbGxMaW5rU3RhdHVzLm1heE51bUFyZ3VtZW50cygpID4gT3B0aW9u
czo6bWF4aW11bVZhcmFyZ3NGb3JJbmxpbmluZygpKSB7CisgICAgICAgIGlmICh2ZXJib3NlKQor
ICAgICAgICAgICAgZGF0YUxvZygiQmFpbGluZyBpbmxpbmluZyBiZWNhdXNlIG9mIHZhcmFyZ3Mu
XG4iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAgICAgCiAgICAgdW5zaWdu
ZWQgaW5saW5pbmdCYWxhbmNlID0gT3B0aW9uczo6bWF4aW11bUZ1bmN0aW9uRm9yQ2FsbElubGlu
ZUNhbmRpZGF0ZUluc3RydWN0aW9uQ291bnQoKTsKICAgICBpZiAoc3BlY2lhbGl6YXRpb25LaW5k
ID09IENvZGVGb3JDb25zdHJ1Y3QpCiAgICAgICAgIGlubGluaW5nQmFsYW5jZSA9IHN0ZDo6bWlu
KGlubGluaW5nQmFsYW5jZSwgT3B0aW9uczo6bWF4aW11bUZ1bmN0aW9uRm9yQ29uc3RydWN0SW5s
aW5lQ2FuZGlkYXRlSW5zdHJ1Y3Rpb25Db3VudCgpKTsKQEAgLTE0MTcsMTAgKzE0NjYsNjIgQEAg
Ym9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcoTm9kZQogICAgIC8vIHNpbXBsaWZp
Y2F0aW9uIG9uIHRoZSBmbHkgYW5kIHRoaXMgaGVscHMgcmVkdWNlIGNvbXBpbGUgdGltZXMsIGJ1
dCB3ZSBjYW4gb25seSBsZXZlcmFnZQogICAgIC8vIHRoaXMgaW4gY2FzZXMgd2hlcmUgd2UgZG9u
J3QgbmVlZCBjb250cm9sIGZsb3cgZGlhbW9uZHMgdG8gY2hlY2sgdGhlIGNhbGxlZS4KICAgICBp
ZiAoIWNhbGxMaW5rU3RhdHVzLmNvdWxkVGFrZVNsb3dQYXRoKCkgJiYgY2FsbExpbmtTdGF0dXMu
c2l6ZSgpID09IDEpIHsKLSAgICAgICAgZW1pdEZ1bmN0aW9uQ2hlY2tzKAotICAgICAgICAgICAg
Y2FsbExpbmtTdGF0dXNbMF0sIGNhbGxUYXJnZXROb2RlLCByZWdpc3Rlck9mZnNldCwgc3BlY2lh
bGl6YXRpb25LaW5kKTsKKyAgICAgICAgZW1pdEZ1bmN0aW9uQ2hlY2tzKGNhbGxMaW5rU3RhdHVz
WzBdLCBjYWxsVGFyZ2V0Tm9kZSwgdGhpc0FyZ3VtZW50LCBzcGVjaWFsaXphdGlvbktpbmQpOwor
CisgICAgICAgIGludCByZWdpc3Rlck9mZnNldDsKKworICAgICAgICAvLyBJZiB3ZSBoYXZlIGEg
dmFyYXJncyBjYWxsLCB3ZSB3YW50IHRvIGV4dHJhY3QgdGhlIGFyZ3VtZW50cyByaWdodCBub3cu
CisgICAgICAgIGlmIChJbmxpbmVDYWxsRnJhbWU6OmlzVmFyYXJncyhraW5kKSkgeworICAgICAg
ICAgICAgdW5zaWduZWQgbWFuZGF0b3J5TWluaW11bTsgLy8gZXhjbHVkZXMgInRoaXMiCisgICAg
ICAgICAgICBpZiAoRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkV4ZWN1dGFibGUgPSBjYWxs
TGlua1N0YXR1c1swXS5mdW5jdGlvbkV4ZWN1dGFibGUoKSkKKyAgICAgICAgICAgICAgICBtYW5k
YXRvcnlNaW5pbXVtID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5wYXJhbWV0ZXJDb3VudCgpOworICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1hbmRhdG9yeU1pbmltdW0gPSAwOworICAg
ICAgICAgICAgCisgICAgICAgICAgICAvLyBpbmNsdWRlcyAidGhpcyIKKyAgICAgICAgICAgIHVu
c2lnbmVkIG1heE51bUFyZ3VtZW50cyA9IG1heCgKKyAgICAgICAgICAgICAgICBjYWxsTGlua1N0
YXR1cy5tYXhOdW1Bcmd1bWVudHMoKSwKKyAgICAgICAgICAgICAgICBtYW5kYXRvcnlNaW5pbXVt
ICsgMSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHJlZ2lzdGVyT2Zmc2V0ID0gcmVnaXN0
ZXJPZmZzZXRPckZpcnN0RnJlZVJlZyArIDE7CisgICAgICAgICAgICByZWdpc3Rlck9mZnNldCAt
PSBtYXhOdW1Bcmd1bWVudHM7IC8vIGluY2x1ZGVzICJ0aGlzIgorICAgICAgICAgICAgcmVnaXN0
ZXJPZmZzZXQgLT0gSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6ZTsKKyAgICAgICAgICAgIHJl
Z2lzdGVyT2Zmc2V0ID0gLVdURjo6cm91bmRVcFRvTXVsdGlwbGVPZigKKyAgICAgICAgICAgICAg
ICBzdGFja0FsaWdubWVudFJlZ2lzdGVycygpLAorICAgICAgICAgICAgICAgIC1yZWdpc3Rlck9m
ZnNldCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGVuc3VyZUxvY2FscygKKyAgICAgICAg
ICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKHJl
Z2lzdGVyT2Zmc2V0KSkudG9Mb2NhbCgpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgTG9h
ZFZhcmFyZ3NEYXRhKiBkYXRhID0gbV9ncmFwaC5tX2xvYWRWYXJhcmdzRGF0YS5hZGQoKTsKKyAg
ICAgICAgICAgIGRhdGEtPnN0YXJ0ID0gVmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50U3RhcnQgKyAx
KTsKKyAgICAgICAgICAgIGRhdGEtPmNvdW50ID0gVmlydHVhbFJlZ2lzdGVyKHJlZ2lzdGVyT2Zm
c2V0ICsgSlNTdGFjazo6QXJndW1lbnRDb3VudCk7CisgICAgICAgICAgICBkYXRhLT5vZmZzZXQg
PSBhcmd1bWVudHNPZmZzZXQ7CisgICAgICAgICAgICBkYXRhLT5saW1pdCA9IG1heE51bUFyZ3Vt
ZW50czsKKyAgICAgICAgICAgIGRhdGEtPm1hbmRhdG9yeU1pbmltdW0gPSBtYW5kYXRvcnlNaW5p
bXVtOworICAgICAgICAgICAgCisgICAgICAgICAgICBhZGRUb0dyYXBoKExvYWRWYXJhcmdzLCBP
cEluZm8oZGF0YSksIGdldChhcmd1bWVudHNBcmd1bWVudCkpOworICAgICAgICAgICAgCisgICAg
ICAgICAgICAvLyBJbiBERkcgSVIgYmVmb3JlIFNTQSwgd2UgY2Fubm90IGluc2VydCBjb250cm9s
IGZsb3cgYmV0d2VlbiBhZnRlciB0aGUKKyAgICAgICAgICAgIC8vIExvYWRWYXJhcmdzIGFuZCB0
aGUgbGFzdCBTZXRBcmd1bWVudC4gVGhpcyBpc24ndCBhIHByb2JsZW0gb25jZSB3ZSBnZXQgdG8g
REZHCisgICAgICAgICAgICAvLyBTU0EuIEZvcnR1bmF0ZWx5LCB3ZSBhbHNvIGhhdmUgb3RoZXIg
cmVhc29ucyBmb3Igbm90IGluc2VydGluZyBjb250cm9sIGZsb3cKKyAgICAgICAgICAgIC8vIGJl
Zm9yZSBTU0EuCisKKyAgICAgICAgICAgIGludCBhcmd1bWVudFN0YXJ0ID0gcmVnaXN0ZXJPZmZz
ZXQgKyBKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXplOworICAgICAgICAgICAgc2V0KFZpcnR1
YWxSZWdpc3Rlcihhcmd1bWVudFN0YXJ0KSwgZ2V0KHRoaXNBcmd1bWVudCksIEltbWVkaWF0ZU5h
a2VkU2V0KTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQgPSAxOyBhcmd1bWVu
dCA8IG1heE51bUFyZ3VtZW50czsgKythcmd1bWVudCkgeworICAgICAgICAgICAgICAgIFZhcmlh
YmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBuZXdWYXJpYWJsZUFjY2Vzc0RhdGEoCisgICAgICAg
ICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudFN0YXJ0ICsgYXJndW1lbnQpLCBm
YWxzZSk7CisgICAgICAgICAgICAgICAgdmFyaWFibGUtPm1lcmdlU2hvdWxkTmV2ZXJVbmJveCh0
cnVlKTsgLy8gV2UgY3VycmVudGx5IGhhdmUgbm93aGVyZSB0byBwdXQgdGhlIHR5cGUgY2hlY2sg
b24gdGhlIExvYWRWYXJhcmdzLiBXZSBjb3VsZCBmaXggdGhpcyBieSBoYXZpbmcgU2V0QXJndW1l
bnQgZG8gdGhlIGFyZ3VtZW50IGNoZWNrcy4KKyAgICAgICAgICAgICAgICBOb2RlKiBzZXRBcmd1
bWVudCA9IGFkZFRvR3JhcGgoU2V0QXJndW1lbnQsIE9wSW5mbyh2YXJpYWJsZSkpOworICAgICAg
ICAgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwuc2V0T3BlcmFuZCh2YXJp
YWJsZS0+bG9jYWwoKSwgc2V0QXJndW1lbnQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgcmVnaXN0ZXJPZmZzZWV0ID0gcmVnaXN0ZXJP
ZmZzZXRPckZpcnN0RnJlZVJlZzsKKyAgICAgICAgCiAgICAgICAgIGJvb2wgcmVzdWx0ID0gYXR0
ZW1wdFRvSW5saW5lQ2FsbCgKLSAgICAgICAgICAgIGNhbGxUYXJnZXROb2RlLCByZXN1bHRPcGVy
YW5kLCBjYWxsTGlua1N0YXR1c1swXSwgcmVnaXN0ZXJPZmZzZXQsCisgICAgICAgICAgICBjYWxs
VGFyZ2V0Tm9kZSwgcmVzdWx0T3BlcmFuZCwgY2FsbExpbmtTdGF0dXNbMF0sIHJlZ2lzdGVyT2Zm
c2V0LCB0aGlzQXJndW1lbnQsCiAgICAgICAgICAgICBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cywgbmV4dE9mZnNldCwga2luZCwgQ2FsbGVyRG9lc05vcm1hbExpbmtpbmcsIHByZWRpY3Rpb24s
CiAgICAgICAgICAgICBpbmxpbmluZ0JhbGFuY2UpOwogICAgICAgICBpZiAoIXJlc3VsdCAmJiAh
Y2FsbExpbmtTdGF0dXMuaXNQcm92ZWQoKSkKQEAgLTE0MzcsMTEgKzE1MzgsOSBAQCBib29sIEJ5
dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxpbmluZyhOb2RlCiAgICAgLy8gZG8gbW9yZSBkZXRhaWxl
ZCBwb2x5dmFyaWFudC9wb2x5bW9ycGhpYyBwcm9maWxpbmc7IGFuZCBzZWNvbmQsIGl0IHJlZHVj
ZXMgY29tcGlsZSB0aW1lcyBpbgogICAgIC8vIHRoZSBERkcuIEFuZCBieSBwb2x5dmFyaWFudCBw
cm9maWxpbmcgd2UgbWVhbiBwb2x5dmFyaWFudCBwcm9maWxpbmcgb2YgKnRoaXMqIGNhbGwuIE5v
dGUgdGhhdAogICAgIC8vIHdlIGNvdWxkIGltcHJvdmUgdGhhdCBhc3BlY3Qgb2YgdGhpcyBieSBk
b2luZyBwb2x5bW9ycGhpYyBpbmxpbmluZyBidXQgaGF2aW5nIHRoZSBwcm9maWxpbmcKLSAgICAv
LyBhbHNvLiBDdXJyZW50bHkgd2Ugb3B0IGFnYWluc3QgdGhpcywgYnV0IGl0IGNvdWxkIGJlIGlu
dGVyZXN0aW5nLiBUaGF0IHdvdWxkIHJlcXVpcmUgaGF2aW5nIGEKLSAgICAvLyBzZXBhcmF0ZSBu
b2RlIGZvciBjYWxsIGVkZ2UgcHJvZmlsaW5nLgotICAgIC8vIEZJWE1FOiBJbnRyb2R1Y2UgdGhl
IG5vdGlvbiBvZiBhIHNlcGFyYXRlIGNhbGwgZWRnZSBwcm9maWxpbmcgbm9kZS4KLSAgICAvLyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM2MDMzCi0gICAgaWYgKCFp
c0ZUTChtX2dyYXBoLm1fcGxhbi5tb2RlKSB8fCAhT3B0aW9uczo6ZW5hYmxlUG9seW1vcnBoaWND
YWxsSW5saW5pbmcoKSkgeworICAgIC8vIGFsc28uCisgICAgaWYgKCFpc0ZUTChtX2dyYXBoLm1f
cGxhbi5tb2RlKSB8fCAhT3B0aW9uczo6ZW5hYmxlUG9seW1vcnBoaWNDYWxsSW5saW5pbmcoKQor
ICAgICAgICB8fCBJbmxpbmVDYWxsRnJhbWU6OmlzVmFyYXJncyhraW5kKSkgewogICAgICAgICBp
ZiAodmVyYm9zZSkgewogICAgICAgICAgICAgZGF0YUxvZygiQmFpbGluZyBpbmxpbmluZyAoaGFy
ZCkuXG4iKTsKICAgICAgICAgICAgIGRhdGFMb2coIlN0YWNrOiAiLCBjdXJyZW50Q29kZU9yaWdp
bigpLCAiXG4iKTsKQEAgLTE0ODIsNiArMTU4MSw4IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6Omhh
bmRsZUlubGluaW5nKE5vZGUKICAgICAgICAgZGF0YUxvZygiU3RhY2s6ICIsIGN1cnJlbnRDb2Rl
T3JpZ2luKCksICJcbiIpOwogICAgIH0KICAgICAKKyAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSBy
ZWdpc3Rlck9mZnNldE9yRmlyc3RGcmVlUmVnOworICAgIAogICAgIC8vIFRoaXMgbWFrZXMgbWUg
d2lzaCB0aGF0IHdlIHdlcmUgaW4gU1NBIGFsbCB0aGUgdGltZS4gV2UgbmVlZCB0byBwaWNrIGEg
dmFyaWFibGUgaW50byB3aGljaCB0bwogICAgIC8vIHN0b3JlIHRoZSBjYWxsZWUgc28gdGhhdCBp
dCB3aWxsIGJlIGFjY2Vzc2libGUgdG8gYWxsIG9mIHRoZSBibG9ja3Mgd2UncmUgYWJvdXQgdG8g
Y3JlYXRlLiBXZQogICAgIC8vIGdldCBhd2F5IHdpdGggZG9pbmcgYW4gaW1tZWRpYXRlLXNldCBo
ZXJlIGJlY2F1c2Ugd2Ugd291bGRuJ3QgaGF2ZSBwZXJmb3JtZWQgYW55IHNpZGUgZWZmZWN0cwpA
QCAtMTUyNCw3ICsxNjI1LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmco
Tm9kZQogICAgICAgICBOb2RlKiBteUNhbGxUYXJnZXROb2RlID0gZ2V0RGlyZWN0KGNhbGxlZVJl
Zyk7CiAgICAgICAgIAogICAgICAgICBib29sIGlubGluaW5nUmVzdWx0ID0gYXR0ZW1wdFRvSW5s
aW5lQ2FsbCgKLSAgICAgICAgICAgIG15Q2FsbFRhcmdldE5vZGUsIHJlc3VsdE9wZXJhbmQsIGNh
bGxMaW5rU3RhdHVzW2ldLCByZWdpc3Rlck9mZnNldCwKKyAgICAgICAgICAgIG15Q2FsbFRhcmdl
dE5vZGUsIHJlc3VsdE9wZXJhbmQsIGNhbGxMaW5rU3RhdHVzW2ldLCByZWdpc3Rlck9mZnNldCwg
dGhpc0FyZ3VtZW50LAogICAgICAgICAgICAgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIG5l
eHRPZmZzZXQsIGtpbmQsIENhbGxlckxpbmtzTWFudWFsbHksIHByZWRpY3Rpb24sCiAgICAgICAg
ICAgICBpbmxpbmluZ0JhbGFuY2UpOwogICAgICAgICAKQEAgLTMxMTMsNDMgKzMyMTQsNzAgQEAg
Ym9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgaW50
IHRoaXNSZWcgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwogICAgICAgICAgICAg
aW50IGFyZ3VtZW50cyA9IGN1cnJlbnRJbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQ7CiAgICAgICAg
ICAgICBpbnQgZmlyc3RGcmVlUmVnID0gY3VycmVudEluc3RydWN0aW9uWzVdLnUub3BlcmFuZDsK
KyAgICAgICAgICAgIGludCBmaXJzdFZhckFyZ09mZnNldCA9IGN1cnJlbnRJbnN0cnVjdGlvbls2
XS51Lm9wZXJhbmQ7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIEFTU0VSVChpbmxpbmVDYWxs
RnJhbWUoKSk7Ci0gICAgICAgICAgICBBU1NFUlRfVU5VU0VEKGFyZ3VtZW50cywgYXJndW1lbnRz
ID09IG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrLT5hcmd1bWVudHNSZWdpc3RlcigpLm9m
ZnNldCgpKTsKLSAgICAgICAgICAgIEFTU0VSVCghbV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxv
Y2stPnN5bWJvbFRhYmxlKCktPnNsb3dBcmd1bWVudHMoKSk7Ci0KLSAgICAgICAgICAgIGFkZFRv
R3JhcGgoQ2hlY2tBcmd1bWVudHNOb3RDcmVhdGVkKTsKLQotICAgICAgICAgICAgdW5zaWduZWQg
YXJnQ291bnQgPSBpbmxpbmVDYWxsRnJhbWUoKS0+YXJndW1lbnRzLnNpemUoKTsKLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgLy8gTGV0J3MgY29tcHV0ZSB0aGUgcmVnaXN0ZXIgb2Zmc2V0LiBX
ZSBzdGFydCB3aXRoIHRoZSBsYXN0IHVzZWQgcmVnaXN0ZXIsIGFuZAotICAgICAgICAgICAgLy8g
dGhlbiBhZGp1c3QgZm9yIHRoZSB0aGluZ3Mgd2Ugd2FudCBpbiB0aGUgY2FsbCBmcmFtZS4KLSAg
ICAgICAgICAgIGludCByZWdpc3Rlck9mZnNldCA9IGZpcnN0RnJlZVJlZyArIDE7Ci0gICAgICAg
ICAgICByZWdpc3Rlck9mZnNldCAtPSBhcmdDb3VudDsgLy8gV2Ugd2lsbCBiZSBwYXNzaW5nIHNv
bWUgYXJndW1lbnRzLgotICAgICAgICAgICAgcmVnaXN0ZXJPZmZzZXQgLT0gSlNTdGFjazo6Q2Fs
bEZyYW1lSGVhZGVyU2l6ZTsgLy8gV2Ugd2lsbCBwcmV0ZW5kIHRvIGhhdmUgYSBjYWxsIGZyYW1l
IGhlYWRlci4KLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gR2V0IHRoZSBhbGlnbm1lbnQg
cmlnaHQuCi0gICAgICAgICAgICByZWdpc3Rlck9mZnNldCA9IC1XVEY6OnJvdW5kVXBUb011bHRp
cGxlT2YoCi0gICAgICAgICAgICAgICAgc3RhY2tBbGlnbm1lbnRSZWdpc3RlcnMoKSwKLSAgICAg
ICAgICAgICAgICAtcmVnaXN0ZXJPZmZzZXQpOwotCi0gICAgICAgICAgICBlbnN1cmVMb2NhbHMo
Ci0gICAgICAgICAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKAotICAgICAg
ICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIocmVnaXN0ZXJPZmZzZXQpKS50b0xvY2FsKCkp
OworICAgICAgICAgICAgaWYgKGFyZ3VtZW50cyA9PSBtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVC
bG9jay0+dW5jaGVja2VkQXJndW1lbnRzUmVnaXN0ZXIoKS5vZmZzZXQoKQorICAgICAgICAgICAg
ICAgICYmICFtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+c3ltYm9sVGFibGUoKS0+c2xv
d0FyZ3VtZW50cygpKSB7CisgICAgICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZSgpCisg
ICAgICAgICAgICAgICAgICAgICYmICFJbmxpbmVDYWxsRnJhbWU6OmlzVmFyYXJncyhpbmxpbmVD
YWxsRnJhbWUoKS0+a2luZCkKKyAgICAgICAgICAgICAgICAgICAgJiYgIWZpcnN0VmFyQXJnT2Zm
c2V0KSB7CisgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoQ2hlY2tBcmd1bWVudHNOb3RD
cmVhdGVkKTsKKworICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBhcmdDb3VudCA9IGlubGlu
ZUNhbGxGcmFtZSgpLT5hcmd1bWVudHMuc2l6ZSgpOworICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgICAgIC8vIExldCdzIGNvbXB1dGUgdGhlIHJlZ2lzdGVyIG9mZnNldC4gV2Ugc3RhcnQg
d2l0aCB0aGUgbGFzdCB1c2VkIHJlZ2lzdGVyLCBhbmQKKyAgICAgICAgICAgICAgICAgICAgLy8g
dGhlbiBhZGp1c3QgZm9yIHRoZSB0aGluZ3Mgd2Ugd2FudCBpbiB0aGUgY2FsbCBmcmFtZS4KKyAg
ICAgICAgICAgICAgICAgICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0gZmlyc3RGcmVlUmVnICsgMTsK
KyAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXJPZmZzZXQgLT0gYXJnQ291bnQ7IC8vIFdlIHdp
bGwgYmUgcGFzc2luZyBzb21lIGFyZ3VtZW50cy4KKyAgICAgICAgICAgICAgICAgICAgcmVnaXN0
ZXJPZmZzZXQgLT0gSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6ZTsgLy8gV2Ugd2lsbCBwcmV0
ZW5kIHRvIGhhdmUgYSBjYWxsIGZyYW1lIGhlYWRlci4KKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgICAgICAvLyBHZXQgdGhlIGFsaWdubWVudCByaWdodC4KKyAgICAgICAgICAgICAgICAg
ICAgcmVnaXN0ZXJPZmZzZXQgPSAtV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKAorICAgICAgICAg
ICAgICAgICAgICAgICAgc3RhY2tBbGlnbm1lbnRSZWdpc3RlcnMoKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIC1yZWdpc3Rlck9mZnNldCk7CisKKyAgICAgICAgICAgICAgICAgICAgZW5zdXJl
TG9jYWxzKAorICAgICAgICAgICAgICAgICAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+cmVtYXBP
cGVyYW5kKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlcihyZWdp
c3Rlck9mZnNldCkpLnRvTG9jYWwoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAg
ICAgLy8gVGhlIGJ5dGVjb2RlIHdvdWxkbid0IGhhdmUgc2V0IHVwIHRoZSBhcmd1bWVudHMuIEJ1
dCB3ZSdsbCBkbyBpdCBhbmQgbWFrZSBpdAorICAgICAgICAgICAgICAgICAgICAvLyBsb29rIGxp
a2UgdGhlIGJ5dGVjb2RlIGhhZCBkb25lIGl0LgorICAgICAgICAgICAgICAgICAgICBpbnQgbmV4
dFJlZ2lzdGVyID0gcmVnaXN0ZXJPZmZzZXQgKyBKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXpl
OworICAgICAgICAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKG5leHRSZWdpc3Rlcisr
KSwgZ2V0KFZpcnR1YWxSZWdpc3Rlcih0aGlzUmVnKSksIEltbWVkaWF0ZU5ha2VkU2V0KTsKKyAg
ICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBhcmd1bWVudCA9IDE7IGFyZ3VtZW50IDwg
YXJnQ291bnQ7ICsrYXJndW1lbnQpCisgICAgICAgICAgICAgICAgICAgICAgICBzZXQoVmlydHVh
bFJlZ2lzdGVyKG5leHRSZWdpc3RlcisrKSwgZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50
KGFyZ3VtZW50KSksIEltbWVkaWF0ZU5ha2VkU2V0KTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgICAgICBoYW5kbGVDYWxsKAorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LCBD
YWxsLCBDb2RlRm9yQ2FsbCwgT1BDT0RFX0xFTkdUSChvcF9jYWxsX3ZhcmFyZ3MpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgY2FsbGVlLCBhcmdDb3VudCwgcmVnaXN0ZXJPZmZzZXQpOworICAg
ICAgICAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9jYWxsX3ZhcmFyZ3MpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyBFbWl0IENhbGxG
b3J3YXJkVmFyYXJncworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIG1lYW5zIHdlIGNh
bm5vdCBpbmxpbmUgZm9yd2FyZGVkIHZhcmFyZ3MgY2FsbHMgaW5zaWRlIGEgdmFyYXJncworICAg
ICAgICAgICAgICAgIC8vIGNhbGwgZnJhbWUuIFdlIHdpbGwgcHJvYmFibHkgZml4IHRoYXQgb25j
ZSB3ZSBmaW5hbGx5IGdldCByaWQgb2YgdGhlCisgICAgICAgICAgICAgICAgLy8gYXJndW1lbnRz
IG9iamVjdCBzcGVjaWFsLWNhc2luZy4KKyAgICAgICAgICAgICAgICBDYWxsVmFyYXJnc0RhdGEq
IGRhdGEgPSBtX2dyYXBoLm1fY2FsbFZhcmFyZ3NEYXRhLmFkZCgpOworICAgICAgICAgICAgICAg
IGRhdGEtPmZpcnN0VmFyQXJnT2Zmc2V0ID0gZmlyc3RWYXJBcmdPZmZzZXQ7CisgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgTm9kZSogY2FsbCA9IGFkZFRvR3JhcGgoCisgICAgICAg
ICAgICAgICAgICAgIENhbGxGb3J3YXJkVmFyYXJncywgT3BJbmZvKGRhdGEpLCBPcEluZm8oZ2V0
UHJlZGljdGlvbigpKSwKKyAgICAgICAgICAgICAgICAgICAgZ2V0KGNhbGxlZSksIGdldCh0aGlz
UmVnKSk7CisgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFJlZyhyZXN1bHQp
OworICAgICAgICAgICAgICAgIGlmIChyZXN1bHRSZWcuaXNWYWxpZCgpKQorICAgICAgICAgICAg
ICAgICAgICBzZXQocmVzdWx0UmVnLCBjYWxsKTsKKyAgICAgICAgICAgICAgICBORVhUX09QQ09E
RShvcF9jYWxsX3ZhcmFyZ3MpOworICAgICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAg
ICAgICAvLyBUaGUgYnl0ZWNvZGUgd291bGRuJ3QgaGF2ZSBzZXQgdXAgdGhlIGFyZ3VtZW50cy4g
QnV0IHdlJ2xsIGRvIGl0IGFuZCBtYWtlIGl0Ci0gICAgICAgICAgICAvLyBsb29rIGxpa2UgdGhl
IGJ5dGVjb2RlIGhhZCBkb25lIGl0LgotICAgICAgICAgICAgaW50IG5leHRSZWdpc3RlciA9IHJl
Z2lzdGVyT2Zmc2V0ICsgSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6ZTsKLSAgICAgICAgICAg
IHNldChWaXJ0dWFsUmVnaXN0ZXIobmV4dFJlZ2lzdGVyKyspLCBnZXQoVmlydHVhbFJlZ2lzdGVy
KHRoaXNSZWcpKSwgSW1tZWRpYXRlTmFrZWRTZXQpOwotICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBhcmd1bWVudCA9IDE7IGFyZ3VtZW50IDwgYXJnQ291bnQ7ICsrYXJndW1lbnQpCi0gICAgICAg
ICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihuZXh0UmVnaXN0ZXIrKyksIGdldCh2aXJ0dWFs
UmVnaXN0ZXJGb3JBcmd1bWVudChhcmd1bWVudCkpLCBJbW1lZGlhdGVOYWtlZFNldCk7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIGhhbmRsZUNhbGwoCi0gICAgICAgICAgICAgICAgcmVzdWx0
LCBDYWxsLCBDb2RlRm9yQ2FsbCwgT1BDT0RFX0xFTkdUSChvcF9jYWxsX3ZhcmFyZ3MpLAotICAg
ICAgICAgICAgICAgIGNhbGxlZSwgYXJnQ291bnQsIHJlZ2lzdGVyT2Zmc2V0KTsKKyAgICAgICAg
ICAgIGhhbmRsZVZhcmFyZ3NDYWxsKGN1cnJlbnRJbnN0cnVjdGlvbiwgQ2FsbFZhcmFyZ3MsIENv
ZGVGb3JDYWxsKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2NhbGxfdmFyYXJncyk7CiAg
ICAgICAgIH0KICAgICAgICAgICAgIAorICAgICAgICBjYXNlIG9wX2NvbnN0cnVjdF92YXJhcmdz
OiB7CisgICAgICAgICAgICBoYW5kbGVWYXJhcmdzQ2FsbChjdXJyZW50SW5zdHJ1Y3Rpb24sIENv
bnN0cnVjdFZhcmFyZ3MsIENvZGVGb3JDb25zdHJ1Y3QpOworICAgICAgICAgICAgTkVYVF9PUENP
REUob3BfY29uc3RydWN0X3ZhcmFyZ3MpOworICAgICAgICB9CisgICAgICAgICAgICAKICAgICAg
ICAgY2FzZSBvcF9qbmVxX3B0cjoKICAgICAgICAgICAgIC8vIFN0YXRpY2FsbHkgc3BlY3VsYXRl
IGZvciBub3cuIEl0IG1ha2VzIHNlbnNlIHRvIGxldCBzcGVjdWxhdGUtb25seSBqbmVxX3B0cgog
ICAgICAgICAgICAgLy8gc3VwcG9ydCBzaW1tZXIgZm9yIGEgd2hpbGUgYmVmb3JlIG1ha2luZyBp
dCBtb3JlIGdlbmVyYWwsIHNpbmNlIGl0J3MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ2FwYWJpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0NhcGFiaWxpdGllcy5jcHAJKHJldmlzaW9uIDE3OTg2MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTMsIDIwMTQgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEzLTIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0xODIsNiArMTgyLDggQEAgQ2FwYWJpbGl0eUxldmVsIGNhcGFiaWxpdHlM
ZXZlbChPcGNvZGVJRAogICAgIGNhc2Ugb3BfdGhyb3dfc3RhdGljX2Vycm9yOgogICAgIGNhc2Ug
b3BfY2FsbDoKICAgICBjYXNlIG9wX2NvbnN0cnVjdDoKKyAgICBjYXNlIG9wX2NhbGxfdmFyYXJn
czoKKyAgICBjYXNlIG9wX2NvbnN0cnVjdF92YXJhcmdzOgogICAgIGNhc2Ugb3BfaW5pdF9sYXp5
X3JlZzoKICAgICBjYXNlIG9wX2NyZWF0ZV9hcmd1bWVudHM6CiAgICAgY2FzZSBvcF90ZWFyX29m
Zl9hcmd1bWVudHM6CkBAIC0yMjMsMTQgKzIyNSw2IEBAIENhcGFiaWxpdHlMZXZlbCBjYXBhYmls
aXR5TGV2ZWwoT3Bjb2RlSUQKICAgICAgICAgcmV0dXJuIENhbkNvbXBpbGVBbmRJbmxpbmU7CiAg
ICAgfQogCi0gICAgY2FzZSBvcF9jYWxsX3ZhcmFyZ3M6Ci0gICAgICAgIGlmIChjb2RlQmxvY2st
PnVzZXNBcmd1bWVudHMoKSAmJiBwY1s0XS51Lm9wZXJhbmQgPT0gY29kZUJsb2NrLT5hcmd1bWVu
dHNSZWdpc3RlcigpLm9mZnNldCgpCi0gICAgICAgICAgICAmJiAhcGNbNl0udS5vcGVyYW5kKQot
ICAgICAgICAgICAgcmV0dXJuIENhbklubGluZTsKLSAgICAgICAgLy8gRklYTUU6IFdlIHNob3Vs
ZCBoYW5kbGUgdGhpcy4KLSAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEyNzYyNgotICAgICAgICByZXR1cm4gQ2Fubm90Q29tcGlsZTsKLQogICAgIGNh
c2Ugb3BfbmV3X3JlZ2V4cDogCiAgICAgY2FzZSBvcF9jcmVhdGVfbGV4aWNhbF9lbnZpcm9ubWVu
dDoKICAgICBjYXNlIG9wX25ld19mdW5jOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDYXBhYmlsaXRpZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0NhcGFiaWxpdGllcy5oCShyZXZpc2lvbiAxNzk4NjMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiwgMjAxMywgMjAxNCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTg2LDggKzg2LDYgQEAgaW5saW5lIENhcGFiaWxpdHlMZXZlbCBmdW5jdGlvbkNhcGFi
aWxpdAogICAgICAgICByZXR1cm4gbGVhc3RVcHBlckJvdW5kKENhbkNvbXBpbGVBbmRJbmxpbmUs
IGNvbXB1dGVkQ2FwYWJpbGl0eUxldmVsKTsKICAgICBpZiAobWlnaHRDb21waWxlICYmICFtaWdo
dElubGluZSkKICAgICAgICAgcmV0dXJuIGxlYXN0VXBwZXJCb3VuZChDYW5Db21waWxlLCBjb21w
dXRlZENhcGFiaWxpdHlMZXZlbCk7Ci0gICAgaWYgKCFtaWdodENvbXBpbGUgJiYgbWlnaHRJbmxp
bmUpCi0gICAgICAgIHJldHVybiBsZWFzdFVwcGVyQm91bmQoQ2FuSW5saW5lLCBjb21wdXRlZENh
cGFiaWxpdHlMZXZlbCk7CiAgICAgaWYgKCFtaWdodENvbXBpbGUgJiYgIW1pZ2h0SW5saW5lKQog
ICAgICAgICByZXR1cm4gQ2Fubm90Q29tcGlsZTsKICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJ
KHJldmlzaW9uIDE3OTg2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJl
cml6ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNjUsNiArMzY1LDkgQEAgdm9pZCBjbG9iYmVyaXpl
KEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgIGNhc2UgQ29uc3RydWN0OgogICAgIGNhc2Ug
TmF0aXZlQ2FsbDoKICAgICBjYXNlIE5hdGl2ZUNvbnN0cnVjdDoKKyAgICBjYXNlIENhbGxWYXJh
cmdzOgorICAgIGNhc2UgQ2FsbEZvcndhcmRWYXJhcmdzOgorICAgIGNhc2UgQ29uc3RydWN0VmFy
YXJnczoKICAgICBjYXNlIFRvUHJpbWl0aXZlOgogICAgIGNhc2UgSW46CiAgICAgY2FzZSBHZXRN
eUFyZ3VtZW50c0xlbmd0aFNhZmU6CkBAIC00MDEsNiArNDA0LDEzIEBAIHZvaWQgY2xvYmJlcml6
ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihWYXJp
YWJsZUxvYywgQWJzdHJhY3RIZWFwKFZhcmlhYmxlcywgbm9kZS0+bG9jYWwoKSkpLCBub2RlLT5j
aGlsZDEoKS5ub2RlKCkpOwogICAgICAgICByZXR1cm47CiAgICAgICAgIAorICAgIGNhc2UgTG9h
ZFZhcmFyZ3M6CisgICAgICAgIC8vIFRoaXMgYWN0dWFsbHkgd3JpdGVzIHRvIGxvY2FsIHZhcmlh
YmxlcyBhcyB3ZWxsLiBCdXQgd2hlbiBpdCByZWFkcyB0aGUgYXJyYXksIGl0IGRvZXMKKyAgICAg
ICAgLy8gc28gaW4gYSB3YXkgdGhhdCBtYXkgdHJpZ2dlciBnZXR0ZXJzIG9yIHZhcmlvdXMgdHJh
cHMuCisgICAgICAgIHJlYWQoV29ybGQpOworICAgICAgICB3cml0ZShXb3JsZCk7CisgICAgICAg
IGJyZWFrOworICAgICAgICAKICAgICBjYXNlIEdldExvY2FsVW5saW5rZWQ6CiAgICAgICAgIHJl
YWQoQWJzdHJhY3RIZWFwKFZhcmlhYmxlcywgbm9kZS0+dW5saW5rZWRMb2NhbCgpKSk7CiAgICAg
ICAgIGRlZihIZWFwTG9jYXRpb24oVmFyaWFibGVMb2MsIEFic3RyYWN0SGVhcChWYXJpYWJsZXMs
IG5vZGUtPnVubGlua2VkTG9jYWwoKSkpLCBub2RlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ29tbW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDb21tb24uaAkocmV2aXNpb24gMTc5ODYzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDb21tb24uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5Miw3ICsyOTIsNiBAQCBu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKIGVudW0gQ2FwYWJpbGl0eUxldmVsIHsK
ICAgICBDYW5ub3RDb21waWxlLAotICAgIENhbklubGluZSwKICAgICBDYW5Db21waWxlLAogICAg
IENhbkNvbXBpbGVBbmRJbmxpbmUsCiAgICAgQ2FwYWJpbGl0eUxldmVsTm90U2V0CkBAIC0zMTIs
NyArMzExLDYgQEAgaW5saW5lIGJvb2wgY2FuQ29tcGlsZShDYXBhYmlsaXR5TGV2ZWwgbAogaW5s
aW5lIGJvb2wgY2FuSW5saW5lKENhcGFiaWxpdHlMZXZlbCBsZXZlbCkKIHsKICAgICBzd2l0Y2gg
KGxldmVsKSB7Ci0gICAgY2FzZSBDYW5JbmxpbmU6CiAgICAgY2FzZSBDYW5Db21waWxlQW5kSW5s
aW5lOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBkZWZhdWx0OgpAQCAtMzI1LDE0ICszMjMs
NiBAQCBpbmxpbmUgQ2FwYWJpbGl0eUxldmVsIGxlYXN0VXBwZXJCb3VuZChDCiAgICAgc3dpdGNo
IChhKSB7CiAgICAgY2FzZSBDYW5ub3RDb21waWxlOgogICAgICAgICByZXR1cm4gQ2Fubm90Q29t
cGlsZTsKLSAgICBjYXNlIENhbklubGluZToKLSAgICAgICAgc3dpdGNoIChiKSB7Ci0gICAgICAg
IGNhc2UgQ2FuSW5saW5lOgotICAgICAgICBjYXNlIENhbkNvbXBpbGVBbmRJbmxpbmU6Ci0gICAg
ICAgICAgICByZXR1cm4gQ2FuSW5saW5lOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
cmV0dXJuIENhbm5vdENvbXBpbGU7Ci0gICAgICAgIH0KICAgICBjYXNlIENhbkNvbXBpbGU6CiAg
ICAgICAgIHN3aXRjaCAoYikgewogICAgICAgICBjYXNlIENhbkNvbXBpbGU6CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCShyZXZpc2lvbiAxNzk4NjMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTExNyw2ICsxMTcsMTAgQEAgYm9vbCBkb2VzR0MoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlKQog
ICAgIGNhc2UgQ29tcGFyZVN0cmljdEVxOgogICAgIGNhc2UgQ2FsbDoKICAgICBjYXNlIENvbnN0
cnVjdDoKKyAgICBjYXNlIENhbGxWYXJhcmdzOgorICAgIGNhc2UgQ29uc3RydWN0VmFyYXJnczoK
KyAgICBjYXNlIExvYWRWYXJhcmdzOgorICAgIGNhc2UgQ2FsbEZvcndhcmRWYXJhcmdzOgogICAg
IGNhc2UgTmF0aXZlQ2FsbDoKICAgICBjYXNlIE5hdGl2ZUNvbnN0cnVjdDoKICAgICBjYXNlIEJy
ZWFrcG9pbnQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lv
biAxNzk4NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtp
bmcgY29weSkKQEAgLTgyMiw2ICs4MjIsNyBAQCBwdWJsaWM6CiAgICAgQmFnPE11bHRpR2V0QnlP
ZmZzZXREYXRhPiBtX211bHRpR2V0QnlPZmZzZXREYXRhOwogICAgIEJhZzxNdWx0aVB1dEJ5T2Zm
c2V0RGF0YT4gbV9tdWx0aVB1dEJ5T2Zmc2V0RGF0YTsKICAgICBCYWc8T2JqZWN0TWF0ZXJpYWxp
emF0aW9uRGF0YT4gbV9vYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhOworICAgIEJhcjxDYWxsVmFy
YXJnc0RhdGE+IG1fY2FsbFZhcmFyZ3NEYXRhOwogICAgIFZlY3RvcjxJbmxpbmVWYXJpYWJsZURh
dGEsIDQ+IG1faW5saW5lVmFyaWFibGVEYXRhOwogICAgIEhhc2hNYXA8Q29kZUJsb2NrKiwgc3Rk
Ojp1bmlxdWVfcHRyPEZ1bGxCeXRlY29kZUxpdmVuZXNzPj4gbV9ieXRlY29kZUxpdmVuZXNzOwog
ICAgIGJvb2wgbV9oYXNBcmd1bWVudHM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05v
ZGUuaAkocmV2aXNpb24gMTc5ODYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdO
b2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE4Myw2ICsxODMsMjAgQEAgc3RydWN0IFN3aXRjaERh
dGEgewogICAgIGJvb2wgZGlkVXNlSnVtcFRhYmxlOwogfTsKIAorc3RydWN0IENhbGxWYXJhcmdz
RGF0YSB7CisgICAgaW50IGZpcnN0VmFyQXJnT2Zmc2V0OworfTsKKworc3RydWN0IExvYWRWYXJh
cmdzRGF0YSB7CisgICAgVmlydHVhbFJlZ2lzdGVyIHN0YXJ0OyAvLyBMb2NhbCBmb3IgdGhlIGZp
cnN0IGVsZW1lbnQuCisgICAgVmlydHVhbFJlZ2lzdGVyIGNvdW50OyAvLyBMb2NhbCBmb3IgdGhl
IGNvdW50LgorICAgIFZpcnR1YWxSZWdpc3RlciBtYWNoaW5lU3RhcnQ7CisgICAgVmlydHVhbFJl
Z2lzdGVyIG1hY2hpbmVDb3VudDsKKyAgICB1bnNpZ25lZCBvZmZzZXQ7IC8vIFdoaWNoIGFycmF5
IGVsZW1lbnQgdG8gc3RhcnQgd2l0aC4gVXN1YWxseSB0aGlzIGlzIDAuCisgICAgdW5zaWduZWQg
bWFuZGF0b3J5TWluaW11bTsgLy8gVGhlIG51bWJlciBvZiBlbGVtZW50cyBvbiB0aGUgc3RhY2sg
dGhhdCBtdXN0IGJlIGluaXRpYWxpemVkOyBpZiB0aGUgYXJyYXkgaXMgdG9vIHNob3J0IHRoZW4g
dGhlIG1pc3NpbmcgZWxlbWVudHMgbXVzdCBnZXQgdW5kZWZpbmVkLgorICAgIHVuc2lnbmVkIGxp
bWl0OyAvLyBNYXhpbXVtIG51bWJlciBvZiBlbGVtZW50cyB0byBsb2FkLgorfTsKKwogLy8gVGhp
cyB0eXBlIHVzZWQgaW4gcGFzc2luZyBhbiBpbW1lZGlhdGUgYXJndW1lbnQgdG8gTm9kZSBjb25z
dHJ1Y3RvcjsKIC8vIGRpc3Rpbmd1aXNoZXMgYW4gaW1tZWRpYXRlIHZhbHVlICh0eXBpY2FsbHkg
YW4gaW5kZXggaW50byBhIENvZGVCbG9jayBkYXRhIHN0cnVjdHVyZSAtIAogLy8gYSBjb25zdGFu
dCBpbmRleCwgYXJndW1lbnQsIG9yIGlkZW50aWZpZXIpIGZyb20gYSBOb2RlKi4KQEAgLTg4OCw2
ICs5MDIsMzUgQEAgc3RydWN0IE5vZGUgewogICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PFdy
aXRlQmFycmllcjxVbmtub3duPio+KG1fb3BJbmZvKTsKICAgICB9CiAgICAgCisgICAgYm9vbCBo
YXNDYWxsVmFyYXJnc0RhdGEoKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChvcCgpKSB7CisgICAg
ICAgIGNhc2UgQ2FsbFZhcmFyZ3M6CisgICAgICAgIGNhc2UgQ2FsbEZvcndhcmRWYXJhcmdzOgor
ICAgICAgICBjYXNlIENvbnN0cnVjdFZhcmFyZ3M6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQor
ICAgIAorICAgIENhbGxWYXJhcmdzRGF0YSogY2FsbFZhcmFyZ3NEYXRhKCkKKyAgICB7CisgICAg
ICAgIEFTU0VSVChoYXNDYWxsVmFyYXJnc0RhdGEoKSk7CisgICAgICAgIHJldHVybiBiaXR3aXNl
X2Nhc3Q8Q2FsbFZhcmFyZ3NEYXRhKj4obV9vcEluZm8pOworICAgIH0KKyAgICAKKyAgICBib29s
IGhhc0xvYWRWYXJhcmdzRGF0YSgpCisgICAgeworICAgICAgICByZXR1cm4gb3AoKSA9PSBMb2Fk
VmFyYXJnczsKKyAgICB9CisgICAgCisgICAgTG9hZFZhcmFyZ3NEYXRhKiBsb2FkVmFyYXJnc0Rh
dGEoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGhhc0xvYWRWYXJhcmdzRGF0YSgpKTsKKyAgICAg
ICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxMb2FkVmFyYXJnc0RhdGEqPihtX29wSW5mbyk7CisgICAg
fQorICAgIAogICAgIGJvb2wgaGFzUmVzdWx0KCkKICAgICB7CiAgICAgICAgIHJldHVybiAhIXJl
c3VsdCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkocmV2
aXNpb24gMTc5ODYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xNDcsNiArMTQ3LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBERkcgewogICAgIC8qIHRoaXMgbXVzdCBiZSB0aGUgZGlyZWN0bHkgc3Vic2VxdWVudCBw
cm9wZXJ0eSBwdXQuIE5vdGUgdGhhdCBQdXRCeVZhbCAqL1wKICAgICAvKiBvcGNvZGVzIHVzZSBW
YXJBcmdzIGJlYXVzZSB0aGV5IG1heSBoYXZlIHVwIHRvIDQgY2hpbGRyZW4uICovXAogICAgIG1h
Y3JvKEdldEJ5VmFsLCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCisgICAgbWFj
cm8oTG9hZFZhcmFyZ3MsIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhQdXRCeVZhbERp
cmVjdCwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVIYXNWYXJBcmdzKSBcCiAgICAgbWFjcm8oUHV0
QnlWYWwsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlSGFzVmFyQXJncykgXAogICAgIG1hY3JvKFB1
dEJ5VmFsQWxpYXMsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlSGFzVmFyQXJncykgXApAQCAtMjE3
LDYgKzIxOCw5IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICAvKiBDYWxs
cy4gKi9cCiAgICAgbWFjcm8oQ2FsbCwgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSB8
IE5vZGVIYXNWYXJBcmdzKSBcCiAgICAgbWFjcm8oQ29uc3RydWN0LCBOb2RlUmVzdWx0SlMgfCBO
b2RlTXVzdEdlbmVyYXRlIHwgTm9kZUhhc1ZhckFyZ3MpIFwKKyAgICBtYWNybyhDYWxsVmFyYXJn
cywgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAorICAgIG1hY3JvKENhbGxGb3J3
YXJkVmFyYXJncywgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAorICAgIG1hY3Jv
KENvbnN0cnVjdFZhcmFyZ3MsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKICAg
ICBtYWNybyhOYXRpdmVDYWxsLCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9k
ZUhhc1ZhckFyZ3MpIFwKICAgICBtYWNybyhOYXRpdmVDb25zdHJ1Y3QsIE5vZGVSZXN1bHRKUyB8
IE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlSGFzVmFyQXJncykgXAogICAgIFwKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxp
dHlBbmFseXNpc1BoYXNlLmNwcAkocmV2aXNpb24gMTc5ODYzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTU1LDYgKzE1NSwxNyBAQCB2b2lkIExvY2FsT1NSQXZhaWxhYmlsaXR5Q2FsY3Vs
YXRvcjo6ZXhlCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCisgICAgY2FzZSBMb2Fk
VmFyYXJnczogeworICAgICAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBub2RlLT5sb2FkVmFy
YXJnc0RhdGEoKTsKKyAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZChkYXRh
LT5jb3VudCkgPQorICAgICAgICAgICAgQXZhaWxhYmlsaXR5KEZsdXNoZWRBdChGbHVzaGVkSW50
MzIsIGRhdGEtPm1hY2hpbmVDb3VudCkpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBsaW1p
dDsgaS0tOykgeworICAgICAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZChW
aXJ0dWFsUmVnaXN0ZXIoZGF0YS0+c3RhcnQub2Zmc2V0KCkgKyBpKSkgPQorICAgICAgICAgICAg
ICAgIEF2YWlsYWJpbGl0eShGbHVzaGVkQXQoRmx1c2hlZEpTVmFsdWUsIFZpcnR1YWxSZWdpc3Rl
cihkYXRhLT5tYWNoaW5lU3RhcnQub2Zmc2V0KCkgKyBpKSkpOworICAgICAgICB9CisgICAgICAg
IGJyZWFrOworICAgIH0KKyAgICAgICAgCiAgICAgZGVmYXVsdDoKICAgICAgICAgYnJlYWs7CiAg
ICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVjaXNlTG9jYWxDbG9i
YmVyaXplLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVj
aXNlTG9jYWxDbG9iYmVyaXplLmgJKHJldmlzaW9uIDE3OTg2MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHUHJlY2lzZUxvY2FsQ2xvYmJlcml6ZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xMzgsNiArMTM4LDE4IEBAIHByaXZhdGU6CiAgICAgCiAgICAgdm9pZCB3cml0ZVRvcCgpCiAg
ICAgeworICAgICAgICBpZiAobV9ub2RlLT5vcCgpID09IExvYWRWYXJhcmdzKSB7CisgICAgICAg
ICAgICAvLyBNYWtlIHN1cmUgd2Ugbm90ZSB0aGUgd3JpdGVzIHRvIHRoZSBsb2NhbHMgdGhhdCB3
aWxsIHN0b3JlIHRoZSBhcnJheSBlbGVtZW50cyBhbmQKKyAgICAgICAgICAgIC8vIGNvdW50Lgor
ICAgICAgICAgICAgTG9hZFZhcmFyZ3NEYXRhKiBkYXRhID0gbV9ub2RlLT5sb2FkVmFyYXJnc0Rh
dGEoKTsKKyAgICAgICAgICAgIG1fd3JpdGUoZGF0YS0+Y291bnQpOworICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gZGF0YS0+bGltaXQ7IGktLTspCisgICAgICAgICAgICAgICAgbV93cml0
ZShWaXJ0dWFsUmVnaXN0ZXIoZGF0YS0+c3RhcnQub2Zmc2V0KCkgKyBpKSk7CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIC8vIE5vdGUgdGhhdCB3ZSBkb24ndCBuZWVkIHRvIGRvIGFueXRo
aW5nIHNwZWNpYWwgZm9yIENhbGxGb3J3YXJkVmFyYXJncywgc2luY2UgaXQgcmVhZHMKKyAgICAg
ICAgLy8gb3VyIGFyZ3VtZW50cyB0aGUgc2FtZSB3YXkgdGhhdCBhbnkgZWZmZWN0ZnVsIHRoaW5n
IG1pZ2h0LgorICAgICAgICAKICAgICAgICAgaWYgKG1fZ3JhcGgubV9jb2RlQmxvY2stPnVzZXNB
cmd1bWVudHMoKSkgewogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9ncmFwaC5tX2Nv
ZGVCbG9jay0+bnVtUGFyYW1ldGVycygpOyBpLS0gPiAxOykKICAgICAgICAgICAgICAgICBtX3dy
aXRlKHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCShyZXZpc2lvbiAxNzk4NjMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0xODksNiArMTg5LDEwIEBAIGJvb2wgc2FmZVRvRXhlY3V0ZShBYnN0cmFjdFN0YXRl
VHlwZSYgc3QKICAgICBjYXNlIENvbXBhcmVTdHJpY3RFcToKICAgICBjYXNlIENhbGw6CiAgICAg
Y2FzZSBDb25zdHJ1Y3Q6CisgICAgY2FzZSBDYWxsVmFyYXJnczoKKyAgICBjYXNlIENvbnN0cnVj
dFZhcmFyZ3M6CisgICAgY2FzZSBMb2FkVmFyYXJnczoKKyAgICBjYXNlIENhbGxGb3J3YXJkVmFy
YXJnczoKICAgICBjYXNlIE5ld09iamVjdDoKICAgICBjYXNlIE5ld0FycmF5OgogICAgIGNhc2Ug
TmV3QXJyYXlXaXRoU2l6ZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMTc5ODYzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjI0LDMyICs2MjQsMTI2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVNaXNjU3Ry
aWN0RXEKIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZSkKIHsKLSAg
ICBib29sIGlzQ2FsbCA9IG5vZGUtPm9wKCkgPT0gQ2FsbDsKLSAgICBpZiAoIWlzQ2FsbCkKLSAg
ICAgICAgREZHX0FTU0VSVChtX2ppdC5ncmFwaCgpLCBub2RlLCBub2RlLT5vcCgpID09IENvbnN0
cnVjdCk7Ci0gICAgCisgICAgQ2FsbExpbmtJbmZvOjpDYWxsVHlwZSBjYWxsVHlwZTsKKyAgICBi
b29sIGlzQ2FsbDsKKyAgICBib29sIGlzVmFyYXJnczsKKyAgICBzd2l0Y2ggKG5vZGUtPm9wKCkp
IHsKKyAgICBjYXNlIENhbGw6CisgICAgICAgIGNhbGxUeXBlID0gQ2FsbExpbmtJbmZvOjpDYWxs
OworICAgICAgICBpc0NhbGwgPSB0cnVlOworICAgICAgICBpc1ZhcmFyZ3MgPSBmYWxzZTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBDb25zdHJ1Y3Q6CisgICAgICAgIGNhbGxUeXBlID0gQ2Fs
bExpbmtJbmZvOjpDb25zdHJ1Y3Q7CisgICAgICAgIGlzQ2FsbCA9IGZhbHNlOworICAgICAgICBp
c1ZhcmFyZ3MgPSBmYWxzZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDYWxsVmFyYXJnczoK
KyAgICBjYXNlIENhbGxGb3J3YXJkVmFyYXJnczoKKyAgICAgICAgY2FsbFR5cGUgPSBDYWxsTGlu
a0luZm86OkNhbGxWYXJhcmdzOworICAgICAgICBpc0NhbGwgPSB0cnVlOworICAgICAgICBpc1Zh
cmFyZ3MgPSB0cnVlOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENvbnN0cnVjdFZhcmFyZ3M6
CisgICAgICAgIGNhbGxUeXBlID0gQ2FsbExpbmtJbmZvOjpDb25zdHJ1Y3RWYXJhcmdzOworICAg
ICAgICBpc0NhbGwgPSBmYWxzZTsKKyAgICAgICAgaXNWYXJhcmdzID0gdHJ1ZTsKKyAgICAgICAg
YnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgREZHX0NSQVNIKG1faml0LmdyYXBoKCksIG5v
ZGUsICJiYWQgbm9kZSB0eXBlIik7CisgICAgICAgIGJyZWFrOworICAgIH0KKwogICAgIC8vIEZv
ciBjb25zdHJ1Y3RvcnMsIHRoZSB0aGlzIGFyZ3VtZW50IGlzIG5vdCBwYXNzZWQgYnV0IHdlIGhh
dmUgdG8gbWFrZSBzcGFjZQogICAgIC8vIGZvciBpdC4KICAgICBpbnQgZHVtbXlUaGlzQXJndW1l
bnQgPSBpc0NhbGwgPyAwIDogMTsKICAgICAKLSAgICBDYWxsTGlua0luZm86OkNhbGxUeXBlIGNh
bGxUeXBlID0gaXNDYWxsID8gQ2FsbExpbmtJbmZvOjpDYWxsIDogQ2FsbExpbmtJbmZvOjpDb25z
dHJ1Y3Q7CisgICAgRWRnZSBjYWxsZWVFZGdlID0gbV9ncmFwaC5jaGlsZChub2RlLCAwKTsKICAg
ICAKLSAgICBFZGdlIGNhbGxlZUVkZ2UgPSBtX2ppdC5ncmFwaCgpLm1fdmFyQXJnQ2hpbGRyZW5b
bm9kZS0+Zmlyc3RDaGlsZCgpXTsKLSAgICAvLyBUaGUgY2FsbCBpbnN0cnVjdGlvbidzIGZpcnN0
IGNoaWxkIGlzIHRoZSBmdW5jdGlvbjsgdGhlIHN1YnNlcXVlbnQgY2hpbGRyZW4gYXJlIHRoZQot
ICAgIC8vIGFyZ3VtZW50cy4KLSAgICBpbnQgbnVtUGFzc2VkQXJncyA9IG5vZGUtPm51bUNoaWxk
cmVuKCkgLSAxOworICAgIC8vIEdvdHRhIGxvYWQgdGhlIGFyZ3VtZW50cyBzb21laG93LiBWYXJh
cmdzIGlzIHRyaWNraWVyLgorICAgIGlmIChpc1ZhcmFyZ3MpIHsKKyAgICAgICAgLy8gMSkgZ2V0
IHRoZSBhcmd1bWVudHMKKyAgICAgICAgLy8gMikgZmx1c2ggcmVnaXN0ZXJzCisgICAgICAgIC8v
IDMpIHNldCB1cCB0aGUgY2FsbCBmcmFtZQorICAgICAgICAvLyA0KSBnZXQgdGhlIGNhbGxlZSBh
bmQgInRoaXMiIGFuZCBoYW5kbGUgdGhlbQorICAgICAgICAvLyA1KSBmbHVzaCByZWdpc3RlcnMg
YWdhaW4KKyAgICAgICAgCisgICAgICAgIENhbGxWYXJhcmdzRGF0YSogZGF0YSA9IG5vZGUtPmNh
bGxWYXJhcmdzRGF0YSgpOworCisgICAgICAgIEdQUlJlZyBhcmd1bWVudHNHUFI7CisgICAgICAg
IEdQUlJlZyBzY3JhdGNoR1BSMTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIyOworICAgICAg
ICBHUFJSZWcgc2NyYXRjaEdQUjM7CisgICAgICAgIAorICAgICAgICBpZiAobm9kZS0+b3AoKSA9
PSBDYWxsRm9yd2FyZFZhcmFyZ3MpCisgICAgICAgICAgICBmbHVzaFJlZ2lzdGVycygpOworICAg
ICAgICAKKyAgICAgICAgYXV0byBsb2FkQXJndW1lbnRzR1BSID0gWyZdICgpIHsKKyAgICAgICAg
ICAgIGlmIChub2RlLT5vcCgpID09IENhbGxGb3J3YXJkVmFyYXJncykgeworICAgICAgICAgICAg
ICAgIGFyZ3VtZW50c0dQUiA9IEdQUkluZm86OnJlZ1QwOworICAgICAgICAgICAgICAgIG1faml0
LmxvYWQ2NCgKKyAgICAgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3IoCisg
ICAgICAgICAgICAgICAgICAgICAgICBtX2ppdC5ncmFwaCgpLm1hY2hpbmVBcmd1bWVudHNSZWdp
c3RlckZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwKKyAgICAgICAgICAgICAgICAgICAgYXJn
dW1lbnRzR1BSKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgSlNWYWx1
ZU9wZXJhbmQgYXJndW1lbnRzKHRoaXMsIG5vZGUtPmNoaWxkMygpKTsKKyAgICAgICAgICAgICAg
ICBhcmd1bWVudHNHUFIgPSBhcmd1bWVudHMuZ3ByKCk7CisgICAgICAgICAgICAgICAgZmx1c2hS
ZWdpc3RlcnMoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgc2Ny
YXRjaEdQUjEgPSBKSVRDb21waWxlcjo6c2VsZWN0U2NyYXRjaEdQUihhcmd1bWVudHNHUFIpOwor
ICAgICAgICAgICAgc2NyYXRjaEdQUjIgPSBKSVRDb21waWxlcjo6c2VsZWN0U2NyYXRjaEdQUihh
cmd1bWVudHNHUFIsIHNjcmF0Y2hHUFIxKTsKKyAgICAgICAgICAgIHNjcmF0Y2hHUFIzID0gSklU
Q29tcGlsZXI6OnNlbGVjdFNjcmF0Y2hHUFIoYXJndW1lbnRzR1BSLCBzY3JhdGNoR1BSMSwgc2Ny
YXRjaEdQUjIpOworICAgICAgICB9OworICAgICAgICAKKyAgICAgICAgbG9hZEFyZ3VtZW50c0dQ
UigpOworICAgICAgICAKKyAgICAgICAgLy8gQXQgdGhpcyBwb2ludCB3ZSBoYXZlIHRoZSB3aG9s
ZSByZWdpc3RlciBmaWxlIHRvIG91cnNlbHZlcywgYW5kIGFyZ3VtZW50c0dQUiBoYXMgdGhlCisg
ICAgICAgIC8vIGFyZ3VtZW50cyByZWdpc3Rlci4gU2VsZWN0IHNvbWUgc2NyYXRjaCByZWdpc3Rl
cnMuCisgICAgICAgIAorICAgICAgICAvLyBXZSB3aWxsIHVzZSBzY3JhdGNoR1BSMiB0byBwb2lu
dCB0byBvdXIgc3RhY2sgZnJhbWUuCisKKyAgICAgICAgdW5zaWduZWQgbnVtVXNlZFN0YWNrU2xv
dHMgPSBtX2ppdC5ncmFwaCgpLm1fbmV4dE1hY2hpbmVMb2NhbDsKKyAgICAgICAgCisgICAgICAg
IEpJVENvbXBpbGVyOjpKdW1wIGhhdmVBcmd1bWVudHM7CisgICAgICAgIGlmIChub2RlLT5vcCgp
ID09IENhbGxGb3J3YXJkVmFyYXJncykgeworICAgICAgICAgICAgLy8gRG8gdGhlIGhvcnJpZmlj
IGZvby5hcHBseSh0aGlzLCBhcmd1bWVudHMpIG9wdGltaXphdGlvbi4KKyAgICAgICAgICAgIC8v
IEZJWE1FOiBkbyB0aGlzIG9wdGltaXphdGlvbiBhdCB0aGUgSVIgbGV2ZWwgaW5zdGVhZCBvZiBo
ZXJlLiBUaGlzIHdpbGwgaGFwcGVuCisgICAgICAgICAgICAvLyBvbmNlIHdlIGdldCByaWQgb2Yg
dGhlIGFyZ3VtZW50cyBsYXp5IGNyZWF0aW9uIGFuZCBsYXp5IHRlYXItb2ZmLgorICAgICAgICAg
ICAgCisgICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgc2xvd0Nhc2U7CisgICAgICAg
ICAgICBzbG93Q2FzZS5hcHBlbmQobV9qaXQuYnJhbmNoVGVzdDY0KEpJVENvbXBpbGVyOjpOb25a
ZXJvLCBhcmd1bWVudHNHUFIpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9qaXQubW92
ZShUcnVzdGVkSW1tMzIobnVtVXNlZFN0YWNrU2xvdHMpLCBzY3JhdGNoR1BSMik7CisgICAgICAg
ICAgICBlbWl0U2V0dXBWYXJhcmdzRnJhbWVGYXN0Q2FzZShtX2ppdCwgc2NyYXRjaEdQUjIsIHNj
cmF0Y2hHUFIxLCBzY3JhdGNoR1BSMiwgc2NyYXRjaEdQUjMsIG5vZGUtPm9yaWdpbi5zZW1hbnRp
Yy5zdGFja09mZnNldCgpLCBkYXRhLT5maXJzdFZhckFyZ09mZnNldCwgc2xvd0Nhc2UpOworICAg
ICAgICAgICAgCisgICAgICAgICAgICBoYXZlQXJndW1lbnRzID0gbV9qaXQuanVtcCgpOworICAg
ICAgICAgICAgc2xvd0Nhc2UubGluaygmbV9qaXQpOworICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICAvLyBSaWdodCBub3csIGFyZ3VtZW50cyBpcyBpbiBhcmd1bWVudHNHUFIgYW5kIHRoZSBy
ZWdpc3RlciBmaWxlIGlzIGZsdXNoZWQuCisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
U2l6ZUZyYW1lRm9yVmFyYXJncywgCisgICAgICAgIAorICAgICAgICBpZiAobm9kZS0+b3AoKSA9
PSBDYWxsRm9yd2FyZFZhcmFyZ3MpCisgICAgICAgICAgICBoYXZlQXJndW1lbnRzLmxpbmsoJm1f
aml0KTsKKyAgICAgICAgCisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gVGhlIGNhbGwgaW5zdHJ1
Y3Rpb24ncyBmaXJzdCBjaGlsZCBpcyB0aGUgZnVuY3Rpb247IHRoZSBzdWJzZXF1ZW50IGNoaWxk
cmVuIGFyZSB0aGUKKyAgICAgICAgLy8gYXJndW1lbnRzLgorICAgICAgICBpbnQgbnVtUGFzc2Vk
QXJncyA9IG5vZGUtPm51bUNoaWxkcmVuKCkgLSAxOwogICAgIAotICAgIGludCBudW1BcmdzID0g
bnVtUGFzc2VkQXJncyArIGR1bW15VGhpc0FyZ3VtZW50OworICAgICAgICBpbnQgbnVtQXJncyA9
IG51bVBhc3NlZEFyZ3MgKyBkdW1teVRoaXNBcmd1bWVudDsKICAgICAKLSAgICBtX2ppdC5zdG9y
ZTMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIobnVtQXJncyksIGNhbGxlZUZyYW1lUGF5
bG9hZFNsb3QoSlNTdGFjazo6QXJndW1lbnRDb3VudCkpOworICAgICAgICBtX2ppdC5zdG9yZTMy
KE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIobnVtQXJncyksIGNhbGxlZUZyYW1lUGF5bG9h
ZFNsb3QoSlNTdGFjazo6QXJndW1lbnRDb3VudCkpOwogICAgIAotICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgbnVtUGFzc2VkQXJnczsgaSsrKSB7Ci0gICAgICAgIEVkZ2UgYXJnRWRnZSA9IG1faml0
LmdyYXBoKCkubV92YXJBcmdDaGlsZHJlbltub2RlLT5maXJzdENoaWxkKCkgKyAxICsgaV07Ci0g
ICAgICAgIEpTVmFsdWVPcGVyYW5kIGFyZyh0aGlzLCBhcmdFZGdlKTsKLSAgICAgICAgR1BSUmVn
IGFyZ0dQUiA9IGFyZy5ncHIoKTsKLSAgICAgICAgdXNlKGFyZ0VkZ2UpOworICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IG51bVBhc3NlZEFyZ3M7IGkrKykgeworICAgICAgICAgICAgRWRnZSBh
cmdFZGdlID0gbV9qaXQuZ3JhcGgoKS5tX3ZhckFyZ0NoaWxkcmVuW25vZGUtPmZpcnN0Q2hpbGQo
KSArIDEgKyBpXTsKKyAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIGFyZyh0aGlzLCBhcmdFZGdl
KTsKKyAgICAgICAgICAgIEdQUlJlZyBhcmdHUFIgPSBhcmcuZ3ByKCk7CisgICAgICAgICAgICB1
c2UoYXJnRWRnZSk7CiAgICAgICAgIAotICAgICAgICBtX2ppdC5zdG9yZTY0KGFyZ0dQUiwgY2Fs
bGVlQXJndW1lbnRTbG90KGkgKyBkdW1teVRoaXNBcmd1bWVudCkpOworICAgICAgICAgICAgbV9q
aXQuc3RvcmU2NChhcmdHUFIsIGNhbGxlZUFyZ3VtZW50U2xvdChpICsgZHVtbXlUaGlzQXJndW1l
bnQpKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIEpTVmFsdWVPcGVyYW5kIGNhbGxlZSh0aGlz
LCBjYWxsZWVFZGdlKTsKQEAgLTQyMzEsNiArNDMyNSw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGUoTm9kZSogbm9kZSkKIAogICAgIGNhc2UgQ2FsbDoKICAgICBjYXNlIENvbnN0cnVj
dDoKKyAgICBjYXNlIENhbGxWYXJhcmdzOgorICAgIGNhc2UgQ2FsbEZvcndhcmRWYXJhcmdzOgor
ICAgIGNhc2UgQ29uc3RydWN0VmFyYXJnczoKICAgICAgICAgZW1pdENhbGwobm9kZSk7CiAgICAg
ICAgIGJyZWFrOwogICAgICAgICAKQEAgLTQzMzgsOSArNDQzNSwyMCBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICAgICAgICAgICAgICBtX2pp
dC5ncmFwaCgpLm1hY2hpbmVBcmd1bWVudHNSZWdpc3RlckZvcihub2RlLT5vcmlnaW4uc2VtYW50
aWMpKSkpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBERkdfQVNTRVJUKG1faml0Lmdy
YXBoKCksIG5vZGUsICFub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKTsKLSAg
ICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKEpTU3RhY2s6OkFyZ3Vt
ZW50Q291bnQpLCByZXN1bHRHUFIpOwotICAgICAgICBtX2ppdC5zdWIzMihUcnVzdGVkSW1tMzIo
MSksIHJlc3VsdEdQUik7CisgICAgICAgIGlmIChub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5l
Q2FsbEZyYW1lCisgICAgICAgICAgICAmJiAhSW5saW5lQ2FsbEZyYW1lOjppc1ZhcmFyZ3Mobm9k
ZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZS0+a2luZCkpIHsKKyAgICAgICAgICAg
IG1faml0Lm1vdmUoCisgICAgICAgICAgICAgICAgVHJ1c3RlZEltbTMyKG5vZGUtPm9yaWdpbi5z
ZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCkgLSAxKSwKKyAgICAgICAg
ICAgICAgICByZXN1bHRHUFIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmlydHVh
bFJlZ2lzdGVyIGFyZ3VtZW50Q291bnRSZWdpc3RlcjsKKyAgICAgICAgICAgIGlmICghbm9kZS0+
b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSkKKyAgICAgICAgICAgICAgICBhcmd1bWVu
dENvdW50UmVnaXN0ZXIgPSBWaXJ0dWFsUmVnaXN0ZXIoSlNTdGFjazo6QXJndW1lbnRDb3VudCk7
CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYXJndW1lbnRDb3VudFJlZ2lzdGVy
ID0gbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudFJl
Z2lzdGVyOworICAgICAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjpwYXlsb2FkRm9y
KGFyZ3VtZW50Q291bnRSZWdpc3RlciksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBtX2ppdC5z
dWIzMihUcnVzdGVkSW1tMzIoMSksIHJlc3VsdEdQUik7CisgICAgICAgIH0KICAgICAgICAgaW50
MzJSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtNDM1
NCwyMCArNDQ2MiwyMiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUp
CiAgICAgICAgICAgICBKSVRDb21waWxlcjo6YWRkcmVzc0ZvcigKICAgICAgICAgICAgICAgICBt
X2ppdC5ncmFwaCgpLm1hY2hpbmVBcmd1bWVudHNSZWdpc3RlckZvcihub2RlLT5vcmlnaW4uc2Vt
YW50aWMpKSk7CiAgICAgICAgIAotICAgICAgICBpZiAobm9kZS0+b3JpZ2luLnNlbWFudGljLmlu
bGluZUNhbGxGcmFtZSkgeworICAgICAgICBpZiAobm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGlu
ZUNhbGxGcmFtZQorICAgICAgICAgICAgJiYgIUlubGluZUNhbGxGcmFtZTo6aXNWYXJhcmdzKG5v
ZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUtPmtpbmQpKSB7CiAgICAgICAgICAg
ICBtX2ppdC5tb3ZlKAogICAgICAgICAgICAgICAgIEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051
bWJlcihub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6
ZSgpIC0gMSkpKSwKICAgICAgICAgICAgICAgICByZXN1bHRHUFIpOwogICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKEpTU3Rh
Y2s6OkFyZ3VtZW50Q291bnQpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgVmlydHVhbFJlZ2lz
dGVyIGFyZ3VtZW50Q291bnRSZWdpc3RlcjsKKyAgICAgICAgICAgIGlmICghbm9kZS0+b3JpZ2lu
LnNlbWFudGljLmlubGluZUNhbGxGcmFtZSkKKyAgICAgICAgICAgICAgICBhcmd1bWVudENvdW50
UmVnaXN0ZXIgPSBWaXJ0dWFsUmVnaXN0ZXIoSlNTdGFjazo6QXJndW1lbnRDb3VudCk7CisgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYXJndW1lbnRDb3VudFJlZ2lzdGVyID0gbm9k
ZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudFJlZ2lzdGVy
OworICAgICAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKGFyZ3Vt
ZW50Q291bnRSZWdpc3RlciksIHJlc3VsdEdQUik7CiAgICAgICAgICAgICBtX2ppdC5zdWIzMihU
cnVzdGVkSW1tMzIoMSksIHJlc3VsdEdQUik7CiAgICAgICAgICAgICBtX2ppdC5vcjY0KEdQUklu
Zm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgcmVzdWx0R1BSKTsKICAgICAgICAgfQogICAgICAg
ICAKLSAgICAgICAgLy8gRklYTUU6IHRoZSBzbG93IHBhdGggZ2VuZXJhdG9yIHNob3VsZCBwZXJm
b3JtIGEgZm9yd2FyZCBzcGVjdWxhdGlvbiB0aGF0IHRoZQotICAgICAgICAvLyByZXN1bHQgaXMg
YW4gaW50ZWdlci4gRm9yIG5vdyB3ZSBwb3N0cG9uZSB0aGUgc3BlY3VsYXRpb24gYnkgaGF2aW5n
IHRoaXMgcmV0dXJuCi0gICAgICAgIC8vIGEgSlNWYWx1ZS4KLSAgICAgICAgCiAgICAgICAgIGFk
ZFNsb3dQYXRoR2VuZXJhdG9yKAogICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAogICAgICAgICAg
ICAgICAgIGNyZWF0ZWQsIHRoaXMsIG9wZXJhdGlvbkdldEFyZ3VtZW50c0xlbmd0aCwgcmVzdWx0
R1BSLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdGFja0xheW91dFBoYXNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0YWNrTGF5
b3V0UGhhc2UuY3BwCShyZXZpc2lvbiAxNzk4NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1N0YWNrTGF5b3V0UGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01Niw3ICs1Niw3IEBA
IHB1YmxpYzoKICAgICAgICAgQml0VmVjdG9yIHVzZWRMb2NhbHM7CiAgICAgICAgIAogICAgICAg
ICAvLyBDb2xsZWN0IHRob3NlIHZhcmlhYmxlcyB0aGF0IGFyZSB1c2VkIGZyb20gSVIuCi0gICAg
ICAgIGJvb2wgaGFzR2V0TG9jYWxVbmxpbmtlZCA9IGZhbHNlOworICAgICAgICBib29sIGhhc05v
ZGVzVGhhdE5lZWRGaXh1cCA9IGZhbHNlOwogICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJ
bmRleCA9IG1fZ3JhcGgubnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgtLTspIHsKICAgICAgICAgICAg
IEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKICAgICAgICAg
ICAgIGlmICghYmxvY2spCkBAIC04MSw3ICs4MSwyMiBAQCBwdWJsaWM6CiAgICAgICAgICAgICAg
ICAgICAgIGlmIChvcGVyYW5kLmlzQXJndW1lbnQoKSkKICAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgICAgICAgICB1c2VkTG9jYWxzLnNldChvcGVyYW5kLnRvTG9j
YWwoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGhhc0dldExvY2FsVW5saW5rZWQgPSB0cnVlOwor
ICAgICAgICAgICAgICAgICAgICBoYXNOb2Rlc1RoYXROZWVkRml4dXAgPSB0cnVlOworICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgIGNhc2UgTG9hZFZhcmFyZ3M6IHsKKyAgICAgICAgICAgICAg
ICAgICAgTG9hZFZhcmFyZ3NEYXRhKiBkYXRhID0gbm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCk7Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChkYXRhLT5jb3VudC5pc0xvY2FsKCkpCisgICAgICAgICAg
ICAgICAgICAgICAgICB1c2VkTG9jYWxzLnNldChkYXRhLT5jb3VudC50b0xvY2FsKCkpOworICAg
ICAgICAgICAgICAgICAgICBpZiAoZGF0YS0+c3RhcnQuaXNMb2NhbCgpKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBUaGlzIHBhcnQgcmVhbGx5IHJlbGllcyBvbiB0aGUgY29udGlndWl0
eSBvZiBzdGFjayBsYXlvdXQKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFzc2lnbm1lbnRz
LgorICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKFZpcnR1YWxSZWdpc3RlcihkYXRhLT5z
dGFydC5vZmZzZXQoKSArIGRhdGEtPmxpbWl0IC0gMSkuaXNMb2NhbCgpKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGRhdGEtPmxpbWl0OyBpLS07KSAKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB1c2VkTG9jYWxzLnNldChWaXJ0dWFsUmVnaXN0ZXIoZGF0
YS0+c3RhcnQub2Zmc2V0KCkgKyBpKS50b0xvY2FsKCkpOworICAgICAgICAgICAgICAgICAgICB9
IC8vIHRoZSBlbHNlIGNhc2Ugc2hvdWxkbid0IGhhcHBlbi4KKyAgICAgICAgICAgICAgICAgICAg
aGFzTm9kZXNUaGF0TmVlZEZpeHVwID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKQEAgLTE0OCwyNCArMTYz
LDIxIEBAIHB1YmxpYzoKICAgICAgICAgICAgIGlmIChhbGxvY2F0aW9uW2xvY2FsXSA9PSBVSU5U
X01BWCkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIAotICAgICAgICAg
ICAgdmFyaWFibGUtPm1hY2hpbmVMb2NhbCgpID0gdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoCi0g
ICAgICAgICAgICAgICAgYWxsb2NhdGlvblt2YXJpYWJsZS0+bG9jYWwoKS50b0xvY2FsKCldKTsK
KyAgICAgICAgICAgIHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwoKSA9IGFzc2lnbihhbGxvY2F0aW9u
LCB2YXJpYWJsZS0+bG9jYWwoKSk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGlmIChj
b2RlQmxvY2soKS0+dXNlc0FyZ3VtZW50cygpKSB7Ci0gICAgICAgICAgICBWaXJ0dWFsUmVnaXN0
ZXIgYXJndW1lbnRzUmVnaXN0ZXIgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbCgKLSAgICAgICAg
ICAgICAgICBhbGxvY2F0aW9uW2NvZGVCbG9jaygpLT5hcmd1bWVudHNSZWdpc3RlcigpLnRvTG9j
YWwoKV0pOworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50c1JlZ2lzdGVyID0K
KyAgICAgICAgICAgICAgICBhc3NpZ24oYWxsb2NhdGlvbiwgY29kZUJsb2NrKCktPmFyZ3VtZW50
c1JlZ2lzdGVyKCkpOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoCi0gICAgICAgICAgICAg
ICAgdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoYWxsb2NhdGlvblsKLSAgICAgICAgICAgICAgICAg
ICAgdW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVyKAotICAgICAgICAgICAgICAgICAgICAgICAg
Y29kZUJsb2NrKCktPmFyZ3VtZW50c1JlZ2lzdGVyKCkpLnRvTG9jYWwoKV0pCisgICAgICAgICAg
ICAgICAgYXNzaWduKGFsbG9jYXRpb24sIHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3Rlcihjb2Rl
QmxvY2soKS0+YXJndW1lbnRzUmVnaXN0ZXIoKSkpCiAgICAgICAgICAgICAgICAgPT0gdW5tb2Rp
ZmllZEFyZ3VtZW50c1JlZ2lzdGVyKGFyZ3VtZW50c1JlZ2lzdGVyKSk7CiAgICAgICAgICAgICBj
b2RlQmxvY2soKS0+c2V0QXJndW1lbnRzUmVnaXN0ZXIoYXJndW1lbnRzUmVnaXN0ZXIpOwogICAg
ICAgICB9CiAgICAgICAgIAogICAgICAgICBpZiAoY29kZUJsb2NrKCktPnVuY2hlY2tlZEFjdGl2
YXRpb25SZWdpc3RlcigpLmlzVmFsaWQoKSkgewogICAgICAgICAgICAgY29kZUJsb2NrKCktPnNl
dEFjdGl2YXRpb25SZWdpc3RlcigKLSAgICAgICAgICAgICAgICB2aXJ0dWFsUmVnaXN0ZXJGb3JM
b2NhbChhbGxvY2F0aW9uW2NvZGVCbG9jaygpLT5hY3RpdmF0aW9uUmVnaXN0ZXIoKS50b0xvY2Fs
KCldKSk7CisgICAgICAgICAgICAgICAgYXNzaWduKGFsbG9jYXRpb24sIGNvZGVCbG9jaygpLT5h
Y3RpdmF0aW9uUmVnaXN0ZXIoKSkpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICAvLyBU
aGlzIHJlZ2lzdGVyIGlzIG5ldmVyIHZhbGlkIGZvciBERkcgY29kZSBibG9ja3MuCkBAIC0xNzYs
MTIgKzE4OCwxMSBAQCBwdWJsaWM6CiAgICAgICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGlu
ZUNhbGxGcmFtZSA9IGRhdGEuaW5saW5lQ2FsbEZyYW1lOwogICAgICAgICAgICAgCiAgICAgICAg
ICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5leGVjdXRhYmxlLT51c2VzQXJndW1lbnRzKCkpIHsK
LSAgICAgICAgICAgICAgICBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50c1JlZ2lzdGVyID0gdmly
dHVhbFJlZ2lzdGVyRm9yTG9jYWwoCi0gICAgICAgICAgICAgICAgICAgIGFsbG9jYXRpb25bbV9n
cmFwaC5hcmd1bWVudHNSZWdpc3RlckZvcihpbmxpbmVDYWxsRnJhbWUpLnRvTG9jYWwoKV0pOwor
ICAgICAgICAgICAgICAgIGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzUmVnaXN0ZXIgPSBhc3Np
Z24oCisgICAgICAgICAgICAgICAgICAgIGFsbG9jYXRpb24sIG1fZ3JhcGguYXJndW1lbnRzUmVn
aXN0ZXJGb3IoaW5saW5lQ2FsbEZyYW1lKSk7CiAKICAgICAgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVCgKLSAgICAgICAgICAgICAgICAgICAgdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoYWxsb2Nh
dGlvblt1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIoCi0gICAgICAgICAgICAgICAgICAgICAg
ICBtX2dyYXBoLmFyZ3VtZW50c1JlZ2lzdGVyRm9yKGlubGluZUNhbGxGcmFtZSkpLnRvTG9jYWwo
KV0pCisgICAgICAgICAgICAgICAgICAgIGFzc2lnbihhbGxvY2F0aW9uLCB1bm1vZGlmaWVkQXJn
dW1lbnRzUmVnaXN0ZXIobV9ncmFwaC5hcmd1bWVudHNSZWdpc3RlckZvcihpbmxpbmVDYWxsRnJh
bWUpKSkKICAgICAgICAgICAgICAgICAgICAgPT0gdW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVy
KGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzUmVnaXN0ZXIpKTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIApAQCAtMjI3LDkgKzIzOCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAg
ICAgc3ltYm9sVGFibGUtPnBhcmFtZXRlckNvdW50KCkpOwogICAgICAgICAgICAgICAgIGZvciAo
c2l6ZV90IGkgPSBzeW1ib2xUYWJsZS0+cGFyYW1ldGVyQ291bnQoKTsgaS0tOykgewogICAgICAg
ICAgICAgICAgICAgICBuZXdTbG93QXJndW1lbnRzW2ldID0gc2xvd0FyZ3VtZW50c1tpXTsKLSAg
ICAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZyA9IFZpcnR1YWxSZWdpc3Rlcihz
bG93QXJndW1lbnRzW2ldLmluZGV4KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHJlZy5pc0xv
Y2FsKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBuZXdTbG93QXJndW1lbnRzW2ldLmluZGV4
ID0gdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoYWxsb2NhdGlvbltyZWcudG9Mb2NhbCgpXSkub2Zm
c2V0KCk7CisgICAgICAgICAgICAgICAgICAgIG5ld1Nsb3dBcmd1bWVudHNbaV0uaW5kZXggPSBh
c3NpZ24oYWxsb2NhdGlvbiwgVmlydHVhbFJlZ2lzdGVyKHNsb3dBcmd1bWV0c1tpXS5pbmRleCkp
Lm9mZnNldCgpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgIG1fZ3JhcGgubV9zbG93QXJndW1lbnRzID0gV1RGOjptb3ZlKG5ld1Nsb3dBcmd1bWVudHMp
OwpAQCAtMjM3LDcgKzI0Niw3IEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgICAgICAKICAgICAg
ICAgLy8gRml4IEdldExvY2FsVW5saW5rZWQncyB2YXJpYWJsZSByZWZlcmVuY2VzLgotICAgICAg
ICBpZiAoaGFzR2V0TG9jYWxVbmxpbmtlZCkgeworICAgICAgICBpZiAoaGFzTm9kZXNUaGF0TmVl
ZEZpeHVwKSB7CiAgICAgICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3Jh
cGgubnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgtLTspIHsKICAgICAgICAgICAgICAgICBCYXNpY0Js
b2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CiAgICAgICAgICAgICAgICAg
aWYgKCFibG9jaykKQEAgLTI0NiwxMCArMjU1LDE0IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAg
ICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOwogICAgICAgICAgICAgICAg
ICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAgICAgICAgICAgICAgICAgY2FzZSBHZXRM
b2NhbFVubGlua2VkOiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCA9IG5vZGUtPnVubGlua2VkTG9jYWwoKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChvcGVyYW5kLmlzTG9jYWwoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVy
YW5kID0gdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoYWxsb2NhdGlvbltvcGVyYW5kLnRvTG9jYWwo
KV0pOwotICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0VW5saW5rZWRNYWNoaW5lTG9j
YWwob3BlcmFuZCk7CisgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRVbmxpbmtlZE1h
Y2hpbmVMb2NhbChhc3NpZ24oYWxsb2NhdGlvbiwgbm9kZS0+dW5saW5rZWRMb2NhbCgpKSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGNhc2UgTG9hZFZhcmFy
Z3M6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIExvYWRWYXJhcmdzRGF0YSogZGF0YSA9IG5v
ZGUtPmxvYWRWYXJhcmdzRGF0YSgpOworICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+bWFj
aGluZUNvdW50ID0gYXNzaWduKGFsbG9jYXRpb24sIGRhdGEtPmNvdW50KTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGRhdGEtPm1hY2hpbmVTdGFydCA9IGFzc2lnbihhbGxvY2F0aW9uLCBkYXRh
LT5zdGFydCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgCkBAIC0yNjIsNiArMjc1LDIwIEBAIHB1
YmxpYzoKICAgICAgICAgCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KKworcHJpdmF0ZToK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgYXNzaWduKGNvbnN0IFZlY3Rvcjx1bnNpZ25lZD4mIGFsbG9j
YXRpb24sIFZpcnR1YWxSZWdpc3RlciBzcmMpCisgICAgeworICAgICAgICBWaXJ0dWFsUmVnaXN0
ZXIgcmVzdWx0ID0gc3JjOworICAgICAgICBpZiAocmVzdWx0LmlzTG9jYWwoKSkgeworICAgICAg
ICAgICAgdW5zaWduZWQgbXlBbGxvY2F0aW9uID0gYWxsb2NhdGlvbltyZXN1bHQudG9Mb2NhbCgp
XTsKKyAgICAgICAgICAgIGlmIChteUFsbG9jYXRpb24gPT0gVUlOVF9NQVgpCisgICAgICAgICAg
ICAgICAgcmVzdWx0ID0gVmlydHVhbFJlZ2lzdGVyKCk7CisgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgcmVzdWx0ID0gdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwobXlBbGxvY2F0aW9u
KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KIH07CiAKIGJvb2wg
cGVyZm9ybVN0YWNrTGF5b3V0KEdyYXBoJiBncmFwaCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHJldmlzaW9uIDE3OTg2MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0xMTksNiArMTE5LDkgQEAgaW5saW5lIENhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxl
KE5vZGUqIAogICAgIGNhc2UgU3RvcmVCYXJyaWVyV2l0aE51bGxDaGVjazoKICAgICBjYXNlIENh
bGw6CiAgICAgY2FzZSBDb25zdHJ1Y3Q6CisgICAgY2FzZSBDYWxsVmFyYXJnczoKKyAgICBjYXNl
IENvbnN0cnVjdFZhcmFyZ3M6CisgICAgY2FzZSBMb2FkVmFyYXJnczoKICAgICBjYXNlIE5hdGl2
ZUNhbGw6CiAgICAgY2FzZSBOYXRpdmVDb25zdHJ1Y3Q6CiAgICAgY2FzZSBWYWx1ZVRvSW50MzI6
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZN
LmNwcAkocmV2aXNpb24gMTc5ODYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExM
b3dlckRGR1RvTExWTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5ODYsOCArMTk4NiwyMiBAQCBw
cml2YXRlOgogICAgIHsKICAgICAgICAgY2hlY2tBcmd1bWVudHNOb3RDcmVhdGVkKCk7CiAKLSAg
ICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBtX25vZGUsICFtX25vZGUtPm9yaWdpbi5zZW1hbnRp
Yy5pbmxpbmVDYWxsRnJhbWUpOwotICAgICAgICBzZXRJbnQzMihtX291dC5hZGQobV9vdXQubG9h
ZDMyTm9uTmVnYXRpdmUocGF5bG9hZEZvcihKU1N0YWNrOjpBcmd1bWVudENvdW50KSksIG1fb3V0
LmNvbnN0SW50MzIoLTEpKSk7CisgICAgICAgIGlmIChtX25vZGUtPm9yaWdpbi5zZW1hbnRpYy5p
bmxpbmVDYWxsRnJhbWUKKyAgICAgICAgICAgICYmICFJbmxpbmVDYWxsRnJhbWU6OmlzVmFyYXJn
cyhtX25vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUta2luZCkpIHsKKyAgICAg
ICAgICAgIHNldEludDMyKAorICAgICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50MzIoCisgICAg
ICAgICAgICAgICAgICAgIG1fbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZS0+
YXJndW1lbnRzLnNpemUoKSAtIDEpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZp
cnR1YWxSZWdpc3RlciBhcmd1bWVudENvdW50UmVnaXN0ZXI7CisgICAgICAgICAgICBpZiAoIW1f
bm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSkKKyAgICAgICAgICAgICAgICBh
cmd1bWVudENvdW50UmVnaXN0ZXIgPSBWaXJ0dWFsUmVnaXN0ZXIoSlNTdGFjazo6QXJndW1lbnRD
b3VudCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYXJndW1lbnRDb3VudFJl
Z2lzdGVyID0gbV9ub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVu
dENvdW50UmVnaXN0ZXI7CisgICAgICAgICAgICBzZXRJbnQzMigKKyAgICAgICAgICAgICAgICBt
X291dC5hZGQoCisgICAgICAgICAgICAgICAgICAgIG1fb3V0LmxvYWQzMk5vbk5lZ2F0aXZlKHBh
eWxvYWRGb3IoYXJndW1lbnRDb3VudFJlZ2lzdGVyKSksCisgICAgICAgICAgICAgICAgICAgIG1f
b3V0LmNvbnN0SW50MzIoLTEpKSk7CisgICAgICAgIH0KICAgICB9CiAgICAgCiAgICAgdm9pZCBj
b21waWxlR2V0TXlBcmd1bWVudEJ5VmFsKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnRlcnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnRlcnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCShyZXZpc2lvbiAxNzk4NjMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTQ5LDcgKzE0OSwxMCBAQCB2b2lkIFN0YWNrVmlzaXRvcjo6cmVhZElu
bGluZWRGcmFtZShDYWxsCiAKICAgICAgICAgbV9mcmFtZS5tX2NhbGxGcmFtZSA9IGNhbGxGcmFt
ZTsKICAgICAgICAgbV9mcmFtZS5tX2lubGluZUNhbGxGcmFtZSA9IGlubGluZUNhbGxGcmFtZTsK
LSAgICAgICAgbV9mcmFtZS5tX2FyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID0gaW5saW5lQ2Fs
bEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpOworICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5h
cmd1bWVudENvdW50UmVnaXN0ZXIuaXNWYWxpZCgpKQorICAgICAgICAgICAgbV9mcmFtZS5tX2Fy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID0gY2FsbEZyYW1lLT5yKGlubGluZUNhbGxGcmFtZS0+
YXJndW1lbnRDb3VudFJlZ2lzdGVyLm9mZnNldCgpKS51bmJveGVkSW50MzIoKTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgbV9mcmFtZS5tX2FyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID0g
aW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpOwogICAgICAgICBtX2ZyYW1lLm1fY29k
ZUJsb2NrID0gaW5saW5lQ2FsbEZyYW1lLT5iYXNlbGluZUNvZGVCbG9jaygpOwogICAgICAgICBt
X2ZyYW1lLm1fYnl0ZWNvZGVPZmZzZXQgPSBjb2RlT3JpZ2luLT5ieXRlY29kZUluZGV4OwogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHJldmlz
aW9uIDE3OTg2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTMzOCw2ICszMzgsMTAgQEAgcHVibGljOgogICAgIH0KICAg
ICBzdGF0aWMgQWRkcmVzcyBhZGRyZXNzRm9yKFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0
ZXIpCiAgICAgeworICAgICAgICAvLyBOQi4gSXQncyB0ZW1wdGluZyBvbiBzb21lIGFyY2hpdGVj
dHVyZXMgdG8gc29tZXRpbWVzIHVzZSBhbiBvZmZzZXQgZnJvbSB0aGUgc3RhY2sKKyAgICAgICAg
Ly8gcmVnaXN0ZXIgYmVjYXVzZSBmb3Igc29tZSBvZmZzZXRzIHRoYXQgd2lsbCBlbmNvZGUgdG8g
YSBzbWFsbGVyIGluc3RydWN0aW9uLiBCdXQgd2UKKyAgICAgICAgLy8gY2Fubm90IGRvIHRoaXMu
IFdlIHVzZSB0aGlzIGluIHBsYWNlcyB3aGVyZSB0aGUgc3RhY2sgcG9pbnRlciBoYXMgYmVlbiBt
b3ZlZCB0byBzb21lCisgICAgICAgIC8vIHVucHJlZGljdGFibGUgbG9jYXRpb24uCiAgICAgICAg
IEFTU0VSVCh2aXJ0dWFsUmVnaXN0ZXIuaXNWYWxpZCgpKTsKICAgICAgICAgcmV0dXJuIEFkZHJl
c3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHZpcnR1YWxSZWdpc3Rlci5vZmZzZXQoKSAq
IHNpemVvZihSZWdpc3RlcikpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5j
cHAJKHJldmlzaW9uIDE3OTg2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDY0LDExICs0NjQsNiBAQCBDb21waWxhdGlvblJlc3VsdCBK
SVQ6OnByaXZhdGVDb21waWxlKEpJCiAgICAgICAgIG1fY2FuQmVPcHRpbWl6ZWRPcklubGluZWQg
PSBmYWxzZTsKICAgICAgICAgbV9zaG91bGRFbWl0UHJvZmlsaW5nID0gZmFsc2U7CiAgICAgICAg
IGJyZWFrOwotICAgIGNhc2UgREZHOjpDYW5JbmxpbmU6Ci0gICAgICAgIG1fY2FuQmVPcHRpbWl6
ZWQgPSBmYWxzZTsKLSAgICAgICAgbV9jYW5CZU9wdGltaXplZE9ySW5saW5lZCA9IHRydWU7Ci0g
ICAgICAgIG1fc2hvdWxkRW1pdFByb2ZpbGluZyA9IHRydWU7Ci0gICAgICAgIGJyZWFrOwogICAg
IGNhc2UgREZHOjpDYW5Db21waWxlOgogICAgIGNhc2UgREZHOjpDYW5Db21waWxlQW5kSW5saW5l
OgogICAgICAgICBtX2NhbkJlT3B0aW1pemVkID0gdHJ1ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVQuaAkocmV2aXNpb24gMTc5ODYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVQuaAkod29ya2luZyBjb3B5KQpAQCAtMjk2LDcgKzI5Niw3IEBAIG5hbWVzcGFjZSBKU0Mgewog
CiAgICAgICAgIHZvaWQgY29tcGlsZU9wQ2FsbChPcGNvZGVJRCwgSW5zdHJ1Y3Rpb24qLCB1bnNp
Z25lZCBjYWxsTGlua0luZm9JbmRleCk7CiAgICAgICAgIHZvaWQgY29tcGlsZU9wQ2FsbFNsb3dD
YXNlKE9wY29kZUlELCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCk7Ci0gICAgICAgIHZvaWQgY29tcGlsZVNl
dHVwVmFyYXJnc0ZyYW1lKEluc3RydWN0aW9uKik7CisgICAgICAgIHZvaWQgY29tcGlsZVNldHVw
VmFyYXJnc0ZyYW1lKEluc3RydWN0aW9uKiwgQ2FsbExpbmtJbmZvKik7CiAgICAgICAgIHZvaWQg
Y29tcGlsZUNhbGxFdmFsKEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgY29tcGlsZUNhbGxF
dmFsU2xvd0Nhc2UoSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
Jik7CiAgICAgICAgIHZvaWQgZW1pdFB1dENhbGxSZXN1bHQoSW5zdHJ1Y3Rpb24qKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAkocmV2aXNpb24gMTc5ODYzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTUsNyArNTUsNyBAQCB2b2lkIEpJVDo6ZW1pdFB1dENhbGxSZXN1bHQoSW5zdHJ1Y3Rpb24qCiAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCi12b2lkIEpJVDo6Y29tcGlsZVNl
dHVwVmFyYXJnc0ZyYW1lKEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbikKK3ZvaWQgSklUOjpjb21w
aWxlU2V0dXBWYXJhcmdzRnJhbWUoSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBDYWxsTGlua0lu
Zm8qIGluZm8pCiB7CiAgICAgaW50IHRoaXNWYWx1ZSA9IGluc3RydWN0aW9uWzNdLnUub3BlcmFu
ZDsKICAgICBpbnQgYXJndW1lbnRzID0gaW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kOwpAQCAtODgs
NiArODgsMTYgQEAgdm9pZCBKSVQ6OmNvbXBpbGVTZXR1cFZhcmFyZ3NGcmFtZShJbnN0cgogICAg
IGlmIChjYW5PcHRpbWl6ZSkKICAgICAgICAgZW5kLmxpbmsodGhpcyk7CiAgICAgCisgICAgLy8g
UHJvZmlsZSB0aGUgYXJndW1lbnQgY291bnQuCisgICAgbG9hZDMyKEFkZHJlc3MocmVnVDEsIEpT
U3RhY2s6OkFyZ3VtZW50Q291bnQgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3Rlcikp
ICsgUGF5bG9hZE9mZnNldCksIHJlZ1QyKTsKKyAgICBsb2FkOCgmaW5mby0+bWF4TnVtQXJndW1l
bnRzLCByZWdUMCk7CisgICAgSnVtcCBub3RCaWdnZXN0ID0gYnJhbmNoMzIoQWJvdmUsIHJlZ1Qw
LCByZWdUMik7CisgICAgSnVtcCBub3RTYXR1cmF0ZWQgPSBicmFuY2gzMihCZWxvd09yRXF1YWws
IHJlZ1QyLCBUcnVzdGVkSW1tMzIoMjU1KSk7CisgICAgbW92ZShUcnVzdGVkSW1tMzIoMjU1KSwg
cmVnVDIpOworICAgIG5vdFNhdHVyYXRlZC5saW5rKHRoaXMpOworICAgIHN0b3JlOChyZWdUMiwg
JmluZm8tPm1heE51bUFyZ3VtZW50cyk7CisgICAgbm90QmlnZ2VzdC5saW5rKHRoaXMpOworICAg
IAogICAgIC8vIEluaXRpYWxpemUgJ3RoaXMnLgogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
dGhpc1ZhbHVlLCByZWdUMCk7CiAgICAgc3RvcmU2NChyZWdUMCwgQWRkcmVzcyhyZWdUMSwgQ2Fs
bEZyYW1lOjp0aGlzQXJndW1lbnRPZmZzZXQoKSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJl
Z2lzdGVyKSkpKTsKQEAgLTEzMiw3ICsxNDIsOSBAQCB2b2lkIEpJVDo6Y29tcGlsZUNhbGxFdmFs
U2xvd0Nhc2UoSW5zdHJ1CiAKIHZvaWQgSklUOjpjb21waWxlT3BDYWxsKE9wY29kZUlEIG9wY29k
ZUlELCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4
KQogewotICAgIGludCBjYWxsZWUgPSBpbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CisgICAgQ2Fs
bExpbmtJbmZvKiBpbmZvID0gbV9jb2RlQmxvY2stPmFkZENhbGxMaW5rSW5mbygpOworCisgICAg
IGludCBjYWxsZWUgPSBpbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CiAKICAgICAvKiBDYWxsZXIg
YWx3YXlzOgogICAgICAgICAtIFVwZGF0ZXMgY2FsbEZyYW1lUmVnaXN0ZXIgdG8gY2FsbGVlIGNh
bGxGcmFtZS4KQEAgLTE1MCw3ICsxNjIsMTEgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoT3Bj
b2RlSUQgb3Bjb2RlSQogICAgIENPTVBJTEVfQVNTRVJUKE9QQ09ERV9MRU5HVEgob3BfY2FsbCkg
PT0gT1BDT0RFX0xFTkdUSChvcF9jYWxsX3ZhcmFyZ3MpLCBjYWxsX2FuZF9jYWxsX3ZhcmFyZ3Nf
b3Bjb2Rlc19tdXN0X2JlX3NhbWVfbGVuZ3RoKTsKICAgICBDT01QSUxFX0FTU0VSVChPUENPREVf
TEVOR1RIKG9wX2NhbGwpID09IE9QQ09ERV9MRU5HVEgob3BfY29uc3RydWN0X3ZhcmFyZ3MpLCBj
YWxsX2FuZF9jb25zdHJ1Y3RfdmFyYXJnc19vcGNvZGVzX211c3RfYmVfc2FtZV9sZW5ndGgpOwog
ICAgIGlmIChvcGNvZGVJRCA9PSBvcF9jYWxsX3ZhcmFyZ3MgfHwgb3Bjb2RlSUQgPT0gb3BfY29u
c3RydWN0X3ZhcmFyZ3MpCis8PDw8PDw8IC5taW5lCisgICAgICAgIGNvbXBpbGVMb2FkVmFyYXJn
cyhpbnN0cnVjdGlvbiwgaW5mbyk7Cis9PT09PT09CiAgICAgICAgIGNvbXBpbGVTZXR1cFZhcmFy
Z3NGcmFtZShpbnN0cnVjdGlvbik7Cis+Pj4+Pj4+IC5yMTc5ODYyCiAgICAgZWxzZSB7CiAgICAg
ICAgIGludCBhcmdDb3VudCA9IGluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKICAgICAgICAgaW50
IHJlZ2lzdGVyT2Zmc2V0ID0gLWluc3RydWN0aW9uWzRdLnUub3BlcmFuZDsKQEAgLTE3NCw5ICsx
OTAsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChPcGNvZGVJRCBvcGNvZGVJCiAKICAgICBz
dG9yZTY0KHJlZ1QwLCBBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBKU1N0YWNrOjpDYWxs
ZWUgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpIC0gc2l6ZW9mKENhbGxlckZy
YW1lQW5kUEMpKSk7CiAgICAgCi0gICAgQ2FsbExpbmtJbmZvKiBpbmZvID0gbV9jb2RlQmxvY2st
PmFkZENhbGxMaW5rSW5mbygpOwotCi0gICAgaWYgKG9wY29kZUlEID09IG9wX2NhbGxfZXZhbCkg
eworICAgaWYgKG9wY29kZUlEID09IG9wX2NhbGxfZXZhbCkgewogICAgICAgICBjb21waWxlQ2Fs
bEV2YWwoaW5zdHJ1Y3Rpb24pOwogICAgICAgICByZXR1cm47CiAgICAgfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJndW1lbnRzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJndW1lbnRzLmgJKHJldmlzaW9uIDE3OTg2MykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ3VtZW50cy5oCSh3b3JraW5nIGNvcHkp
CkBAIC01Niw3ICs1Niw3IEBAIHB1YmxpYzoKICAgICAgICAgCiAgICAgc3RhdGljIEFyZ3VtZW50
cyogY3JlYXRlKFZNJiB2bSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIElubGluZUNhbGxGcmFtZSog
aW5saW5lQ2FsbEZyYW1lLCBBcmd1bWVudHNNb2RlIG1vZGUgPSBOb3JtYWxBcmd1bWVudHNDcmVh
dGlvbk1vZGUpCiAgICAgewotICAgICAgICBBcmd1bWVudHMqIGFyZ3VtZW50cyA9IG5ldyAoTm90
TnVsbCwgYWxsb2NhdGVDZWxsPEFyZ3VtZW50cz4odm0uaGVhcCwgb2Zmc2V0T2ZJbmxpbmVSZWdp
c3RlckFycmF5KCkgKyByZWdpc3RlckFycmF5U2l6ZUluQnl0ZXMoaW5saW5lQ2FsbEZyYW1lKSkp
IEFyZ3VtZW50cyhjYWxsRnJhbWUpOworICAgICAgICBBcmd1bWVudHMqIGFyZ3VtZW50cyA9IG5l
dyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEFyZ3VtZW50cz4odm0uaGVhcCwgb2Zmc2V0T2ZJbmxp
bmVSZWdpc3RlckFycmF5KCkgKyByZWdpc3RlckFycmF5U2l6ZUluQnl0ZXMoY2FsbEZyYW1lLCBp
bmxpbmVDYWxsRnJhbWUpKSkgQXJndW1lbnRzKGNhbGxGcmFtZSk7CiAgICAgICAgIGFyZ3VtZW50
cy0+ZmluaXNoQ3JlYXRpb24oY2FsbEZyYW1lLCBpbmxpbmVDYWxsRnJhbWUsIG1vZGUpOwogICAg
ICAgICByZXR1cm4gYXJndW1lbnRzOwogICAgIH0KQEAgLTEyNCw3ICsxMjQsMTUgQEAgcHJpdmF0
ZToKICAgICB2b2lkIGNyZWF0ZVN0cmljdE1vZGVDYWxsZWVJZk5lY2Vzc2FyeShFeGVjU3RhdGUq
KTsKIAogICAgIHN0YXRpYyBzaXplX3QgcmVnaXN0ZXJBcnJheVNpemVJbkJ5dGVzKENhbGxGcmFt
ZSogY2FsbEZyYW1lKSB7IHJldHVybiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSAqIGNh
bGxGcmFtZS0+YXJndW1lbnRDb3VudCgpOyB9Ci0gICAgc3RhdGljIHNpemVfdCByZWdpc3RlckFy
cmF5U2l6ZUluQnl0ZXMoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUpIHsgcmV0dXJu
IHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pICogKGlubGluZUNhbGxGcmFtZS0+YXJndW1l
bnRzLnNpemUoKSAtIDEpOyB9CisgICAgc3RhdGljIHNpemVfdCByZWdpc3RlckFycmF5U2l6ZUlu
Qnl0ZXMoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZy
YW1lKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXM7
CisgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRSZWdpc3Rlci5pc1Zh
bGlkKCkpCisgICAgICAgICAgICBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9IGNhbGxGcmFt
ZS0+cihpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRSZWdpc3Rlci5vZmZzZXQoKSkudW5i
b3hlZEludDMyKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGFyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpCisgICAgICAgIHJl
dHVybiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSAqIChhcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcyAtIDEpOworICAgIH0KICAgICBib29sIGlzQXJndW1lbnQoc2l6ZV90KTsKICAgICBi
b29sIHRyeVNldEFyZ3VtZW50KFZNJiwgc2l6ZV90IGFyZ3VtZW50LCBKU1ZhbHVlKTsKICAgICBK
U1ZhbHVlIHRyeUdldEFyZ3VtZW50KHNpemVfdCBhcmd1bWVudCk7CkBAIC0zNDAsMTEgKzM0OCwx
NSBAQCBpbmxpbmUgdm9pZCBBcmd1bWVudHM6OmZpbmlzaENyZWF0aW9uKENhCiAgICAgbV9vdmVy
cm9kZUNhbGxlZSA9IGZhbHNlOwogICAgIG1fb3ZlcnJvZGVDYWxsZXIgPSBmYWxzZTsKICAgICBt
X2lzU3RyaWN0TW9kZSA9IGpzQ2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihpbmxpbmVDYWxsRnJh
bWUtPmV4ZWN1dGFibGUuZ2V0KCkpLT5pc1N0cmljdE1vZGUoKTsKLQorICAgIAorICAgIGlmIChp
bmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRSZWdpc3Rlci5pc1ZhbGlkKCkpCisgICAgICAg
IG1fbnVtQXJndW1lbnRzID0gY2FsbEZyYW1lLT5yKGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRD
b3VudFJlZ2lzdGVyLm9mZnNldCgpKS51bmJveGVkSW50MzIoKTsKKyAgICBlbHNlCisgICAgICAg
IG1fbnVtQXJndW1lbnRzID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpOworICAg
IG1fbnVtQXJndW1lbnRzLS07CisgICAgCiAgICAgc3dpdGNoIChtb2RlKSB7CiAgICAgY2FzZSBO
b3JtYWxBcmd1bWVudHNDcmVhdGlvbk1vZGU6IHsKLSAgICAgICAgbV9udW1Bcmd1bWVudHMgPSBp
bmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCkgLSAxOwotICAgICAgICAKICAgICAgICAg
aWYgKG1fbnVtQXJndW1lbnRzKSB7CiAgICAgICAgICAgICBpbnQgb2Zmc2V0Rm9yQXJndW1lbnRP
bmUgPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50c1sxXS52aXJ0dWFsUmVnaXN0ZXIoKS5vZmZz
ZXQoKTsKICAgICAgICAgICAgIG1fcmVnaXN0ZXJzID0gcmVpbnRlcnByZXRfY2FzdDxXcml0ZUJh
cnJpZXJCYXNlPFVua25vd24+Kj4oY2FsbEZyYW1lLT5yZWdpc3RlcnMoKSkgKyBvZmZzZXRGb3JB
cmd1bWVudE9uZSAtIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDEpLm9mZnNldCgpOwpAQCAt
MzYxLDcgKzM3Myw2IEBAIGlubGluZSB2b2lkIEFyZ3VtZW50czo6ZmluaXNoQ3JlYXRpb24oQ2EK
ICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgQ2xvbmVkQXJndW1lbnRzQ3JlYXRpb25Nb2RlOiB7
Ci0gICAgICAgIG1fbnVtQXJndW1lbnRzID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6
ZSgpIC0gMTsKICAgICAgICAgaWYgKG1fbnVtQXJndW1lbnRzKSB7CiAgICAgICAgICAgICBpbnQg
b2Zmc2V0Rm9yQXJndW1lbnRPbmUgPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50c1sxXS52aXJ0
dWFsUmVnaXN0ZXIoKS5vZmZzZXQoKTsKICAgICAgICAgICAgIG1fcmVnaXN0ZXJzID0gcmVpbnRl
cnByZXRfY2FzdDxXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+Kj4oY2FsbEZyYW1lLT5yZWdpc3Rl
cnMoKSkgKyBvZmZzZXRGb3JBcmd1bWVudE9uZSAtIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50
KDEpLm9mZnNldCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9u
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMu
aAkocmV2aXNpb24gMTc5ODYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0
aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMTEsNiArMjExLDggQEAgdHlwZWRlZiBjb25zdCBj
aGFyKiBvcHRpb25TdHJpbmc7CiAgICAgLyogZnJvbSBzdXBlciBsb25nIGNvbXBpbGVzIHRoYXQg
dGFrZSBhIGxvdCBvZiBtZW1vcnkuICovXAogICAgIHYodW5zaWduZWQsIG1heGltdW1Jbmxpbmlu
Z0NhbGxlclNpemUsIDEwMDAwKSBcCiAgICAgXAorICAgIHYodW5zaWduZWQsIG1heGltdW1WYXJh
cmdzRm9ySW5saW5pbmcsIDEwMCkgXAorICAgIFwKICAgICB2KGJvb2wsIGVuYWJsZVBvbHl2YXJp
YW50Q2FsbElubGluaW5nLCB0cnVlKSBcCiAgICAgdihib29sLCBlbmFibGVQb2x5dmFyaWFudEJ5
SWRJbmxpbmluZywgdHJ1ZSkgXAogICAgIFwK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>246876</attachid>
            <date>2015-02-18 20:45:48 -0800</date>
            <delta_ts>2015-02-19 11:00:47 -0800</delta_ts>
            <desc>moar</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>45814</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIv
Qnl0ZWNvZGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAxODAyODUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTE2LDcgKzExNiw3IEBAIFBhcnNlckVycm9yIEJ5dGVjb2RlR2VuZXJhdG9yOjpnZW5l
cmF0ZSgKICAgICBtX2NvZGVCbG9jay0+c2hyaW5rVG9GaXQoKTsKIAogICAgIGlmIChtX2NvZGVC
bG9jay0+c3ltYm9sVGFibGUoKSAmJiAhbV9jb2RlQmxvY2stPnZtKCktPnR5cGVQcm9maWxlcigp
KQotICAgICAgICBtX2NvZGVCbG9jay0+c2V0U3ltYm9sVGFibGUobV9jb2RlQmxvY2stPnN5bWJv
bFRhYmxlKCktPmNsb25lQ2FwdHVyZWROYW1lcygqbV9jb2RlQmxvY2stPnZtKCkpKTsKKyAgICAg
ICAgbV9jb2RlQmxvY2stPnNldFN5bWJvbFRhYmxlKG1fY29kZUJsb2NrLT5zeW1ib2xUYWJsZSgp
LT5jbG9uZUlnbm9yaW5nU3RhY2soKm1fY29kZUJsb2NrLT52bSgpKSk7CiAKICAgICBpZiAobV9l
eHByZXNzaW9uVG9vRGVlcCkKICAgICAgICAgcmV0dXJuIFBhcnNlckVycm9yKFBhcnNlckVycm9y
OjpPdXRPZk1lbW9yeSk7CkBAIC0xMjQsMTcgKzEyNCwyOCBAQCBQYXJzZXJFcnJvciBCeXRlY29k
ZUdlbmVyYXRvcjo6Z2VuZXJhdGUoCiB9CiAKIGJvb2wgQnl0ZWNvZGVHZW5lcmF0b3I6OmFkZFZh
cigKLSAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgQ29uc3RhbnRNb2RlIGNvbnN0YW50TW9k
ZSwgV2F0Y2hNb2RlIHdhdGNoTW9kZSwgUmVnaXN0ZXJJRComIHIwKQorICAgIGNvbnN0IElkZW50
aWZpZXImIGlkZW50LCBDb25zdGFudE1vZGUgY29uc3RhbnRNb2RlLCBWYXJLaW5kIHZhcktpbmQs
IFdhdGNoTW9kZSB3YXRjaE1vZGUsCisgICAgUmVnaXN0ZXJJRComIHIwKQogewogICAgIEFTU0VS
VChzdGF0aWNfY2FzdDxzaXplX3Q+KG1fY29kZUJsb2NrLT5tX251bVZhcnMpID09IG1fY2FsbGVl
UmVnaXN0ZXJzLnNpemUoKSk7CiAgICAgCiAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIo
c3ltYm9sVGFibGUoKS5tX2xvY2spOwotICAgIGludCBpbmRleCA9IHZpcnR1YWxSZWdpc3RlckZv
ckxvY2FsKG1fY2FsbGVlUmVnaXN0ZXJzLnNpemUoKSkub2Zmc2V0KCk7Ci0gICAgU3ltYm9sVGFi
bGVFbnRyeSBuZXdFbnRyeShpbmRleCwgY29uc3RhbnRNb2RlID09IElzQ29uc3RhbnQgPyBSZWFk
T25seSA6IDApOworICAgIFZhck9mZnNldCB2YXJPZmZzZXQ7CisgICAgaWYgKHZhcktpbmQgPT0g
SGVhcFZhcktpbmQpCisgICAgICAgIHZhck9mZnNldCA9IFZhck9mZnNldChIZWFwT2Zmc2V0KG1f
bnVtQ2FwdHVyZWRWYXJpYWJsZXMrKykpOworICAgIGVsc2UgeworICAgICAgICBBU1NFUlQodmFy
S2luZCA9PSBTdGFja1ZhcktpbmQpOworICAgICAgICB2YXJPZmZzZXQgPSBWYXJPZmZzZXQodmly
dHVhbFJlZ2lzdGVyRm9yTG9jYWwobV9jYWxsZWVSZWdpc3RlcnMuc2l6ZSgpKSk7CisgICAgfQor
ICAgIFN5bWJvbFRhYmxlRW50cnkgbmV3RW50cnkodmFyT2Zmc2V0LCBjb25zdGFudE1vZGUgPT0g
SXNDb25zdGFudCA/IFJlYWRPbmx5IDogMCk7CiAgICAgU3ltYm9sVGFibGU6Ok1hcDo6QWRkUmVz
dWx0IHJlc3VsdCA9IHN5bWJvbFRhYmxlKCkuYWRkKGxvY2tlciwgaWRlbnQuaW1wbCgpLCBuZXdF
bnRyeSk7CiAKICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KSB7Ci0gICAgICAgIHIwID0gJnJl
Z2lzdGVyRm9yKHJlc3VsdC5pdGVyYXRvci0+dmFsdWUuZ2V0SW5kZXgoKSk7CisgICAgICAgIFJF
TEVBU0VfQVNTRVJUKHZhcktpbmQgPT0gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS52YXJPZmZzZXQo
KS5raW5kKCkpOworICAgICAgICBpZiAodmFyS2luZCA9PSBIZWFwVmFyS2luZCkKKyAgICAgICAg
ICAgIHIwID0gbnVsbHB0cjsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcjAgPSAmcmVnaXN0
ZXJGb3IocmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS52YXJPZmZzZXQoKSk7CiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICB9CiAgICAgCkBAIC0xNDQsNyArMTU1LDEwIEBAIGJvb2wgQnl0ZWNvZGVH
ZW5lcmF0b3I6OmFkZFZhcigKICAgICAgICAgbV93YXRjaGFibGVWYXJpYWJsZXMuYXBwZW5kKGlk
ZW50KTsKICAgICB9CiAgICAgCi0gICAgcjAgPSBhZGRWYXIoKTsKKyAgICBpZiAodmFyS2luZCA9
PSBIZWFwVmFyS2luZCkKKyAgICAgICAgcjAgPSBudWxscHRyOworICAgIGVsc2UKKyAgICAgICAg
cjAgPSBhZGRWYXIoKTsKICAgICAKICAgICBBU1NFUlQod2F0Y2hNb2RlID09IE5vdFdhdGNoYWJs
ZSB8fCBzdGF0aWNfY2FzdDxzaXplX3Q+KG1fY29kZUJsb2NrLT5tX251bVZhcnMpID09IG1fd2F0
Y2hhYmxlVmFyaWFibGVzLnNpemUoKSk7CiAgICAgCkBAIC0xNTcsNiArMTcxLDE3IEBAIEJ5dGVj
b2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihWTSYKICAgICAsIG1fc2NvcGVOb2RlKHBy
b2dyYW1Ob2RlKQogICAgICwgbV9jb2RlQmxvY2sodm0sIGNvZGVCbG9jaykKICAgICAsIG1fdGhp
c1JlZ2lzdGVyKENhbGxGcmFtZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCkpCis8PDw8PDw8IC5taW5l
CisgICAgLCBtX3Njb3BlUmVnaXN0ZXIoMCkKKyAgICAsIG1fbGV4aWNhbEVudmlyb25tZW50UmVn
aXN0ZXIoMCkKKyAgICAsIG1fZW1wdHlWYWx1ZVJlZ2lzdGVyKDApCisgICAgLCBtX2dsb2JhbE9i
amVjdFJlZ2lzdGVyKDApCisgICAgLCBtX2xvY2FsQXJndW1lbnRzUmVnaXN0ZXIoMCkKKyAgICAs
IG1fbnVtQ2FwdHVyZWRWYXJpYWJsZXMoMCkKKyAgICAsIG1fZmluYWxseURlcHRoKDApCisgICAg
LCBtX2xvY2FsU2NvcGVEZXB0aCgwKQorPT09PT09PQorPj4+Pj4+PiAucjE4MDI4NQogICAgICwg
bV9jb2RlVHlwZShHbG9iYWxDb2RlKQogICAgICwgbV92bSgmdm0pCiB7CkBAIC0yMTgsNyArMjQz
LDYgQEAgQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFZNJgogICAgIH0KICAg
ICBSZWdpc3RlcklEKiBsb2NhbEFyZ3VtZW50c1JlZ2lzdGVyID0gbnVsbHB0cjsKICAgICBSZWdp
c3RlcklEKiBzY3JhdGNoID0gYWRkVmFyKCk7Ci0gICAgbV9zeW1ib2xUYWJsZS0+c2V0Q2FwdHVy
ZVN0YXJ0KHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKG1fY29kZUJsb2NrLT5tX251bVZhcnMpLm9m
ZnNldCgpKTsKIAogICAgIGlmIChmdW5jdGlvbk5vZGUtPnVzZXNBcmd1bWVudHMoKSB8fCBjb2Rl
QmxvY2stPnVzZXNFdmFsKCkpIHsgLy8gTWF5IHJlaWZ5IGFyZ3VtZW50cyBvYmplY3QuCiAgICAg
ICAgIFJlZ2lzdGVySUQqIHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3RlciA9IGFkZFZhcigpOyAv
LyBBbm9ueW1vdXMsIHNvIGl0IGNhbid0IGJlIG1vZGlmaWVkIGJ5IHVzZXIgY29kZS4KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2Rl
R2VuZXJhdG9yLmgJKHJldmlzaW9uIDE4MDI4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNjE0LDE1
ICs2MTQsMTUgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgLy8gQWRkcyBhIHZhciBzbG90
IGFuZCBtYXBzIGl0IHRvIHRoZSBuYW1lIGlkZW50IGluIHN5bWJvbFRhYmxlKCkuCiAgICAgICAg
IGVudW0gV2F0Y2hNb2RlIHsgSXNXYXRjaGFibGUsIE5vdFdhdGNoYWJsZSB9OwotICAgICAgICBS
ZWdpc3RlcklEKiBhZGRWYXIoY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIENvbnN0YW50TW9kZSBj
b25zdGFudE1vZGUsIFdhdGNoTW9kZSB3YXRjaE1vZGUpCisgICAgICAgIFJlZ2lzdGVySUQqIGFk
ZFZhcihjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgQ29uc3RhbnRNb2RlIGNvbnN0YW50TW9kZSwg
VmFyS2luZCB2YXJLaW5kLCBXYXRjaE1vZGUgd2F0Y2hNb2RlKQogICAgICAgICB7CiAgICAgICAg
ICAgICBSZWdpc3RlcklEKiBsb2NhbDsKLSAgICAgICAgICAgIGFkZFZhcihpZGVudCwgY29uc3Rh
bnRNb2RlLCB3YXRjaE1vZGUsIGxvY2FsKTsKKyAgICAgICAgICAgIGFkZFZhcihpZGVudCwgY29u
c3RhbnRNb2RlLCB2YXJLaW5kLCB3YXRjaE1vZGUsIGxvY2FsKTsKICAgICAgICAgICAgIHJldHVy
biBsb2NhbDsKICAgICAgICAgfQogCiAgICAgICAgIC8vIERpdHRvLiBSZXR1cm5zIHRydWUgaWYg
YSBuZXcgUmVnaXN0ZXJJRCB3YXMgYWRkZWQsIGZhbHNlIGlmIGEgcHJlLWV4aXN0aW5nIFJlZ2lz
dGVySUQgd2FzIHJlLXVzZWQuCi0gICAgICAgIGJvb2wgYWRkVmFyKGNvbnN0IElkZW50aWZpZXIm
LCBDb25zdGFudE1vZGUsIFdhdGNoTW9kZSwgUmVnaXN0ZXJJRComKTsKKyAgICAgICAgYm9vbCBh
ZGRWYXIoY29uc3QgSWRlbnRpZmllciYsIENvbnN0YW50TW9kZSwgVmFyS2luZCwgV2F0Y2hNb2Rl
LCBSZWdpc3RlcklEKiYpOwogICAgICAgICAKICAgICAgICAgLy8gQWRkcyBhbiBhbm9ueW1vdXMg
dmFyIHNsb3QuIFRvIGdpdmUgdGhpcyBzbG90IGEgbmFtZSwgYWRkIGl0IHRvIHN5bWJvbFRhYmxl
KCkuCiAgICAgICAgIFJlZ2lzdGVySUQqIGFkZFZhcigpCkBAIC03NzUsNiArNzc1LDcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIFZlY3RvcjxJZGVudGlmaWVyLCAxNj4gbV93YXRjaGFibGVW
YXJpYWJsZXM7CiAgICAgICAgIFNlZ21lbnRlZFZlY3RvcjxSZWdpc3RlcklELCAzMj4gbV9jb25z
dGFudFBvb2xSZWdpc3RlcnM7CiAgICAgICAgIFNlZ21lbnRlZFZlY3RvcjxSZWdpc3RlcklELCAz
Mj4gbV9jYWxsZWVSZWdpc3RlcnM7CisgICAgICAgIHVuc2lnbmVkIG1fbnVtQ2FwdHVyZWRWYXJp
YWJsZXM7CiAgICAgICAgIFNlZ21lbnRlZFZlY3RvcjxSZWdpc3RlcklELCAzMj4gbV9wYXJhbWV0
ZXJzOwogICAgICAgICBTZWdtZW50ZWRWZWN0b3I8TGFiZWwsIDMyPiBtX2xhYmVsczsKICAgICAg
ICAgTGFiZWxTY29wZVN0b3JlIG1fbGFiZWxTY29wZXM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Bcmd1bWVudHNNb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQXJndW1lbnRzTW9kZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJndW1lbnRzTW9kZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2lmbmRlZiBBcmd1bWVudHNNb2RlX2gKKyNkZWZpbmUgQXJndW1lbnRzTW9kZV9oCisK
K25hbWVzcGFjZSBKU0MgeworCitlbnVtIEFyZ3VtZW50c01vZGUgeworICAgIENsb25lZEFyZ3Vt
ZW50c0NyZWF0aW9uTW9kZSwKKyAgICBGYWtlQXJndW1lbnRWYWx1ZXNDcmVhdGlvbk1vZGUKK307
CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gQXJndW1lbnRzTW9kZV9oCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhcHR1cmVkQXJndW1lbnRzT2Zmc2V0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYXB0dXJl
ZEFyZ3VtZW50c09mZnNldC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9DYXB0dXJlZEFyZ3VtZW50c09mZnNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ2FwdHVyZWRBcmd1bWVudHNPZmZz
ZXQuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3ZvaWQgQ2FwdHVyZWRBcmd1bWVudHNPZmZzZXQ6
OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBpZiAoISp0aGlzKSB7CisgICAg
ICAgIG91dC5wcmludCgiY2FwdHVyZWRBcmd1bWVudEludmFsaWQiKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIG91dC5wcmludCgiY2FwdHVyZWRBcmd1bWVudCIsIG1fb2Zmc2V0KTsK
K30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0NhcHR1cmVkQXJndW1lbnRzT2Zmc2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FwdHVyZWRBcmd1bWVudHNPZmZzZXQuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhcHR1cmVkQXJndW1lbnRzT2Zm
c2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIENhcHR1cmVkQXJndW1lbnRzT2Zm
c2V0X2gKKyNkZWZpbmUgQ2FwdHVyZWRBcmd1bWVudHNPZmZzZXRfaAorCisjaW5jbHVkZSA8d3Rm
L0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNl
IEpTQyB7CisKKy8vIFRoaXMgaXMgYW4gb2Zmc2V0IGludG8gdGhlIHNwZWNpYWwgYXJndW1lbnRz
IG9iamVjdCwgd2hpY2ggY2FwdHVyZXMgdGhlIGFyZ3VtZW50cyB0byBhCisvLyBmdW5jdGlvbi4g
SXQgb25seSBjb21lcyBpbnRvIHBsYXkgaXQgdGhlIGFyZ3VtZW50cyBhcmVuJ3QgYWxzbyBsaWZ0
ZWQgaW50byB0aGUgYWN0aXZhdGlvbi4KKy8vIElmIHRoZXkgd2VyZSB0aGVuIGFjY2Vzc2VzIHRv
IHRoZSBhcmd1bWVudHMgd291bGQgcmVzb2x2ZSB0byBhIFNjb3BlT2Zmc2V0IGFuZCBub3QgYQor
Ly8gQ2FwdHVyZWRBcmd1bWVudHNPZmZzZXQuCitjbGFzcyBDYXB0dXJlZEFyZ3VtZW50c09mZnNl
dCB7CitwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludmFsaWRPZmZzZXQgPSBV
SU5UX01BWDsKKyAgICAKKyAgICBDYXB0dXJlZEFyZ3VtZW50c09mZnNldCgpCisgICAgICAgIDog
bV9vZmZzZXQoaW52YWxpZE9mZnNldCkKKyAgICB7CisgICAgfQorICAgIAorICAgIGV4cGxpY2l0
IENhcHR1cmVkQXJndW1lbnRzT2Zmc2V0KHVuc2lnbmVkIG9mZnNldCkKKyAgICAgICAgOiBtX29m
ZnNldChvZmZzZXQpCisgICAgeworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yISgpIGNv
bnN0IHsgcmV0dXJuIG1fb2Zmc2V0ID09IGludmFsaWRPZmZzZXQ7IH0KKyAgICAKKyAgICB1bnNp
Z25lZCBvZmZzZXRVbmNoZWNrZWQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fb2Zm
c2V0OworICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBvZmZzZXQoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgQVNTRVJUKG1fb2Zmc2V0ICE9IGludmFsaWRPZmZzZXQpOworICAgICAgICByZXR1cm4g
bV9vZmZzZXQ7CisgICAgfQorICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0
OworICAgIAorcHJpdmF0ZToKKyAgICB1bnNpZ25lZCBtX29mZnNldDsKK307CisKK30gLy8gbmFt
ZXNwYWNlIEpTQworCisjZW5kaWYgLy8gQ2FwdHVyZWRBcmd1bWVudHNPZmZzZXRfaAorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FyZ3VtZW50c0l0ZXJhdG9yLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FyZ3VtZW50c0l0
ZXJhdG9yLmNwcAkocmV2aXNpb24gMTgwMjg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNBcmd1bWVudHNJdGVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTUgQXBwbGUsIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzMsMTAgKzMz
LDE4IEBAIG5hbWVzcGFjZSBKU0MgewogCiBjb25zdCBDbGFzc0luZm8gSlNBcmd1bWVudHNJdGVy
YXRvcjo6c19pbmZvID0geyAiQXJndW1lbnRzSXRlcmF0b3IiLCAmQmFzZTo6c19pbmZvLCAwLCBD
UkVBVEVfTUVUSE9EX1RBQkxFKEpTQXJndW1lbnRzSXRlcmF0b3IpIH07CiAKLXZvaWQgSlNBcmd1
bWVudHNJdGVyYXRvcjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBBcmd1bWVudHMqIGFyZ3VtZW50
cykKK3ZvaWQgSlNBcmd1bWVudHNJdGVyYXRvcjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBKU09i
amVjdCogYXJndW1lbnRzKQogewogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICBt
X2FyZ3VtZW50cy5zZXQodm0sIHRoaXMsIGFyZ3VtZW50cyk7CiB9CiAKK0VuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgYXJndW1lbnRzRnVuY0l0ZXJhdG9yKEV4ZWNTdGF0ZSogZXhlYykKK3sK
KyAgICBKU09iamVjdCogdGhpc09iaiA9IGV4ZWMtPnRoaXNWYWx1ZSgpLnRvVGhpcyhleGVjLCBT
dHJpY3RNb2RlKS50b09iamVjdChleGVjKTsKKyAgICBpZiAoIXRoaXNPYmotPmluaGVyaXRzKEFy
Z3VtZW50czo6aW5mbygpKSAmJiAhdGhpc09iai0+aW5oZXJpdHMoT3V0T2ZCYW5kQXJndW1lbnRz
OjppbmZvKCkpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93VHlwZUVycm9y
KGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiQXR0ZW1wdGVkIHRvIHVzZSBBcmd1bWVudHMgaXRlcmF0b3Ig
b24gbm9uLUFyZ3VtZW50cyBvYmplY3QiKSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
SlNBcmd1bWVudHNJdGVyYXRvcjo6Y3JlYXRlKGV4ZWMtPnZtKCksIGV4ZWMtPmNhbGxlZSgpLT5n
bG9iYWxPYmplY3QoKS0+YXJndW1lbnRzSXRlcmF0b3JTdHJ1Y3R1cmUoKSwgdGhpc09iaikpOwor
fQorCiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FyZ3VtZW50c0l0
ZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNB
cmd1bWVudHNJdGVyYXRvci5oCShyZXZpc2lvbiAxODAyODUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0FyZ3VtZW50c0l0ZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlLCBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTUgQXBwbGUsIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYs
NyArMjYsNyBAQAogI2lmbmRlZiBKU0FyZ3VtZW50c0l0ZXJhdG9yX2gKICNkZWZpbmUgSlNBcmd1
bWVudHNJdGVyYXRvcl9oCiAKLSNpbmNsdWRlICJBcmd1bWVudHMuaCIKKyNpbmNsdWRlICJKU09i
amVjdC5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtNDEsNyArNDEsNyBAQCBwdWJsaWM6CiAg
ICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5
cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKICAgICB9
CiAKLSAgICBzdGF0aWMgSlNBcmd1bWVudHNJdGVyYXRvciogY3JlYXRlKFZNJiB2bSwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIEFyZ3VtZW50cyogYXJndW1lbnRzKQorICAgIHN0YXRpYyBKU0FyZ3Vt
ZW50c0l0ZXJhdG9yKiBjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNPYmpl
Y3QqIGFyZ3VtZW50cykKICAgICB7CiAgICAgICAgIEpTQXJndW1lbnRzSXRlcmF0b3IqIGluc3Rh
bmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNBcmd1bWVudHNJdGVyYXRvcj4odm0u
aGVhcCkpIEpTQXJndW1lbnRzSXRlcmF0b3Iodm0sIHN0cnVjdHVyZSk7CiAgICAgICAgIGluc3Rh
bmNlLT5maW5pc2hDcmVhdGlvbih2bSwgYXJndW1lbnRzKTsKQEAgLTUwLDExICs1MCwxMSBAQCBw
dWJsaWM6CiAKICAgICBib29sIG5leHQoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTVmFsdWUmIHZh
bHVlKQogICAgIHsKLSAgICAgICAgaWYgKG1fbmV4dEluZGV4ID49IG1fYXJndW1lbnRzLT5sZW5n
dGgoY2FsbEZyYW1lKSkKKyAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0KKyAgICAgICAgICAgIG1f
YXJndW1lbnRzLT5nZXQoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPnByb3BlcnR5TmFtZXMoKS5sZW5n
dGgpLnRvVUludDMyKGNhbGxGcmFtZSk7CisgICAgICAgIGlmIChtX25leHRJbmRleCA+PSBsZW5n
dGgpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHZhbHVlID0gbV9hcmd1bWVu
dHMtPnRyeUdldEFyZ3VtZW50KG1fbmV4dEluZGV4KyspOwotICAgICAgICBpZiAoIXZhbHVlKQot
ICAgICAgICAgICAgdmFsdWUgPSBqc1VuZGVmaW5lZCgpOworICAgICAgICB2YWx1ZSA9IG1fYXJn
dW1lbnRzLT5nZXRJbmRleChjYWxsRnJhbWUsIG1fbmV4dEluZGV4KyspOwogICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTY4LDEyICs2OCwxNCBAQCBwcml2YXRlOgogICAgIHsKICAg
ICB9CiAKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgQXJndW1lbnRzKik7CisgICAgdm9p
ZCBmaW5pc2hDcmVhdGlvbihWTSYsIEpTT2JqZWN0Kik7CiAgICAgCi0gICAgV3JpdGVCYXJyaWVy
PEFyZ3VtZW50cz4gbV9hcmd1bWVudHM7CisgICAgV3JpdGVCYXJyaWVyPEpTT2JqZWN0PiBtX2Fy
Z3VtZW50czsKICAgICBzaXplX3QgbV9uZXh0SW5kZXg7CiB9OwogCitFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGFyZ3VtZW50c0Z1bmNJdGVyYXRvcihFeGVjU3RhdGUqKTsKKwogfQogCiAj
ZW5kaWYgLy8gIWRlZmluZWQoSlNBcmd1bWVudHNJdGVyYXRvcl9oKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvT3V0T2ZCYW5kQXJndW1lbnRzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PdXRPZkJhbmRBcmd1bWVudHMuY3BwCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3V0T2ZCYW5kQXJn
dW1lbnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyNiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiT3V0T2ZCYW5kQXJndW1lbnRzLmgiCisKKyNpbmNsdWRlICJKU0FyZ3VtZW50c0l0
ZXJhdG9yLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsKKwor
U1RBVElDX0FTU0VSVF9JU19UUklWSUFMTFlfREVTVFJVQ1RJQkxFKE91dE9mQmFuZEFyZ3VtZW50
cyk7CisKK2NvbnN0IENsYXNzSW5mbyBPdXRPZkJhbmRBcmd1bWVudHM6OnNfaW5mbyA9IHsgIkFy
Z3VtZW50cyIsICZCYXNlOjpzX2luZm8sIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoT3V0T2ZCYW5k
QXJndW1lbnRzKSB9OworCitPdXRPZkJhbmRBcmd1bWVudHM6Ok91dE9mQmFuZEFyZ3VtZW50cyhW
TSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIDogQmFzZSh2bSwgc3RydWN0dXJlLCBu
dWxscHRyKQoreworfQorCitPdXRPZkJhbmRBcmd1bWVudHMqIE91dE9mQmFuZEFyZ3VtZW50czo6
Y3JlYXRlRW1wdHkoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQoreworICAg
IE91dE9mQmFuZEFyZ3VtZW50cyogcmVzdWx0ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8
T3V0T2ZCYW5kQXJndW1lbnRzPih2bS5oZWFwKSkKKyAgICAgICAgT3V0T2ZCYW5kQXJndW1lbnRz
KHZtLCBnbG9iYWxPYmplY3QtPm91dE9mQmFuZEFyZ3VtZW50c1N0cnVjdHVyZSgpKTsKKyAgICBy
ZXN1bHQtPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitPdXRP
ZkJhbmRBcmd1bWVudHMqIE91dE9mQmFuZEFyZ3VtZW50czo6Y3JlYXRlRW1wdHkoRXhlY1N0YXRl
KiBleGVjKQoreworICAgIC8vIE5CLiBTb21lIGNsaWVudHMgbWlnaHQgZXhwZWN0IHRoYXQgdGhl
IGdsb2JhbCBvYmplY3Qgb2Ygb2YgdGhpcyBvYmplY3QgaXMgdGhlIGdsb2JhbCBvYmplY3QKKyAg
ICAvLyBvZiB0aGUgY2FsbGVlLiBXZSBkb24ndCBkbyB0aGlzIGZvciBub3csIGJ1dCBtYXliZSB3
ZSBzaG91bGQuCisgICAgcmV0dXJuIGNyZWF0ZUVtcHR5KGV4ZWMtPnZtKCksIGV4ZWMtPmxleGlj
YWxHbG9iYWxPYmplY3QoKSk7Cit9CisKK091dE9mQmFuZEFyZ3VtZW50cyogT3V0T2ZCYW5kQXJn
dW1lbnRzOjpjcmVhdGVXaXRoSW5saW5lRnJhbWUoRXhlY1N0YXRlKiBteUZyYW1lLCBFeGVjU3Rh
dGUqIHRhcmdldEZyYW1lLCBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSwgQXJndW1l
bnRzTW9kZSBtb2RlKQoreworICAgIFZNJiB2bSA9IG15RnJhbWUtPnZtKCk7CisgICAgCisgICAg
SlNGdW5jdGlvbiogY2FsbGVlOworICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZTsK
KyAgICAKKyAgICBpZiAoaW5saW5lQ2FsbEZyYW1lKSB7CisgICAgICAgIGNhbGxlZSA9IGpzQ2Fz
dDxKU0Z1bmN0aW9uKj4oaW5saW5lQ2FsbEZyYW1lLT5jYWxsZWVSZWNvdmVyeS5yZWNvdmVyKHRh
cmdldEZyYW1lKSk7CisgICAgICAgIGV4ZWN1dGFibGUgPSBqc0Nhc3Q8RnVuY3Rpb25FeGVjdXRh
YmxlKj4oaW5saW5lQ2FsbEZyYW1lLT5leGVjdXRhYmxlLmdldCgpKTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBjYWxsZWUgPSBqc0Nhc3Q8SlNGdW5jdGlvbio+KHRhcmdldEZyYW1lLT5jYWxsZWUo
KSk7CisgICAgICAgIGV4ZWN1dGFibGUgPSBqc0Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4odGFy
Z2V0RnJhbWUtPmNvZGVCbG9jaygpLT5vd25lckV4ZWN1dGFibGUoKSk7CisgICAgfQorICAgIAor
ICAgIC8vIE5CLiBJdCdzIHNvbWV3aGF0IGFyYml0cmFyeSB0aGF0IHdlIHRpZSB0aGUgc3RyaWN0
bmVzcyBvZiB0aGlzIG9iamVjdCB0byB0aGUgc3RyaWN0bmVzcyBvZgorICAgIC8vIHRoZSBjYWxs
ZWUuCisgICAgYm9vbCBpc1N0cmljdE1vZGUgPSBleGVjdXRhYmxlLT5pc1N0cmljdE1vZGUoKTsK
KworICAgIE91dE9mQmFuZEFyZ3VtZW50cyogcmVzdWx0ID0gY3JlYXRlRW1wdHkobXlGcmFtZSk7
CisgICAgCisgICAgdW5zaWduZWQgbGVuZ3RoOworICAgIHN3aXRjaCAobW9kZSkgeworICAgIGNh
c2UgQ2xvbmVkQXJndW1lbnRzQ3JlYXRpb25Nb2RlOiB7CisgICAgICAgIGlmIChpbmxpbmVDYWxs
RnJhbWUpIHsKKyAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRS
ZWdpc3Rlci5pc1ZhbGlkKCkpCisgICAgICAgICAgICAgICAgbGVuZ3RoID0gZXhlYy0+cihpbmxp
bmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRSZWdpc3RlcikudW5ib3hlZEludDMyKCk7CisgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbGVuZ3RoID0gaW5saW5lQ2FsbEZyYW1lLT5h
cmd1bWVudHMuc2l6ZSgpOworICAgICAgICAgICAgbGVuZ3RoLS07CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGxlbmd0aDsgaS0tOykKKyAgICAgICAgICAgICAg
ICByZXN1bHQtPnB1dERpcmVjdEluZGV4KG15RnJhbWUsIGksIGlubGluZUNhbGxGcmFtZS0+YXJn
dW1lbnRzW2ldLnJlY292ZXIodGFyZ2V0RnJhbWUpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIGxlbmd0aCA9IHRhcmdldEZyYW1lLT5hcmd1bWVudENvdW50KCk7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGxlbmd0aDsgaS0tOykKKyAgICAgICAg
ICAgICAgICByZXN1bHQtPnB1dERpcmVjdEluZGV4KG15RnJhbWUsIGksIHRhcmdldEZyYW1lLT51
bmNoZWNrZWRBcmd1bWVudChpKSk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQor
ICAgICAgICAKKyAgICBjYXNlIEZha2VBcmd1bWVudFZhbHVlc0NyZWF0aW9uTW9kZTogeworICAg
ICAgICBsZW5ndGggPSAwOworICAgICAgICBicmVhazsKKyAgICB9IH0KKyAgICAKKyAgICByZXN1
bHQtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcihsZW5n
dGgpKTsKKyAgICBpZiAoaXNTdHJpY3RNb2RlKSB7CisgICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0
QWNjZXNzb3IoZXhlYywgdm0ucHJvcGVydHlOYW1lcy0+Y2FsbGVlLCB0aGlzT2JqZWN0LT5nbG9i
YWxPYmplY3QoKS0+dGhyb3dUeXBlRXJyb3JHZXR0ZXJTZXR0ZXIoZXhlYy0+dm0oKSksIERvbnRE
ZWxldGUgfCBEb250RW51bSB8IEFjY2Vzc29yKTsKKyAgICAgICAgcmVzdWx0LT5wdXREaXJlY3RB
Y2Nlc3NvcihleGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT5jYWxsZWUsIHRoaXNPYmplY3QtPmdsb2Jh
bE9iamVjdCgpLT50aHJvd1R5cGVFcnJvckdldHRlclNldHRlcihleGVjLT52bSgpKSwgRG9udERl
bGV0ZSB8IERvbnRFbnVtIHwgQWNjZXNzb3IpOworICAgIH0gZWxzZQorICAgICAgICByZXN1bHQt
PnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+Y2FsbGVlLCBKU1ZhbHVlKGNhbGxlZSkp
OworICAgIAorICAgIHJlc3VsdC0+SlNDX05BVElWRV9GVU5DVElPTih2bS5wcm9wZXJ0eU5hbWVz
LT5pdGVyYXRvclByaXZhdGVOYW1lLCBhcmd1bWVudHNGdW5jSXRlcmF0b3IsIERvbnRFbnVtLCAw
KTsKK30KKworT3V0T2ZCYW5kQXJndW1lbnRzKiBPdXRPZkJhbmRBcmd1bWVudHM6OmNyZWF0ZVdp
dGhNYWNoaW5lRnJhbWUoRXhlY1N0YXRlKiBteUZyYW1lLCBFeGVjU3RhdGUqIHRhcmdldEZyYW1l
LCBBcmd1bWVudHNNb2RlIG1vZGUpCit7CisgICAgcmV0dXJuIGNyZWF0ZVdpdGhJbmxpbmVGcmFt
ZShteUZyYW1lLCB0YXJnZXRGcmFtZSwgbnVsbHB0ciwgbW9kZSk7Cit9CisKK1N0cnVjdHVyZSog
T3V0T2ZCYW5kQXJndW1lbnRzOjpjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKK3sKKyAgICByZXR1cm4gU3RydWN0
dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RU
eXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PdXRPZkJhbmRBcmd1bWVudHMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PdXRPZkJhbmRB
cmd1bWVudHMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L091dE9mQmFuZEFyZ3VtZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjQgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBPdXRP
ZkJhbmRBcmd1bWVudHNfaAorI2RlZmluZSBPdXRPZkJhbmRBcmd1bWVudHNfaAorCisjaW5jbHVk
ZSAiQXJndW1lbnRzTW9kZS5oIgorI2luY2x1ZGUgIkpTT2JqZWN0LmgiCisKK25hbWVzcGFjZSBK
U0MgeworCisvLyBUaGlzIGlzIGFuIEFyZ3VtZW50cy1jbGFzcyBvYmplY3QgdGhhdCB3ZSBjcmVh
dGUgd2hlbiB5b3UgZG8gZnVuY3Rpb24uYXJndW1lbnRzLiBJdCBiZWhhdmVzCisvLyBlbnRpcmVs
eSBsaWtlIGFuIG9yZGluYXJ5IEphdmFTY3JpcHQgb2JqZWN0LiBBbGwgb2YgdGhlIGFyZ3VtZW50
cyB2YWx1ZXMgYXJlIHNpbXBseSBjb3BpZWQgZnJvbQorLy8gdGhlIHN0YWNrIChwb3NzaWJseSB2
aWEgc29tZSBzb3BoaXN0aWNhdGVkIFZhbHVlUmVjb3ZlcnkncyBpZiBhbiBvcHRpbWl6aW5nIGNv
bXBpbGVyIGlzIGluCisvLyBwbGF5KSBhbmQgdGhlIGFwcHJvcHJpYXRlIHByb3BlcnRpZXMgb2Yg
dGhlIG9iamVjdCBhcmUgcG9wdWxhdGVkLiBUaGUgb25seSByZWFzb24gd2h5IHdlIG5lZWQKKy8v
IGEgc3BlY2lhbCBjbGFzcyBpcyB0byBtYWtlIHRoZSBvYmplY3QgY2xhaW0gdG8gYmUgIkFyZ3Vt
ZW50cyIgZnJvbSBhIHRvU3RyaW5nIHN0YW5kcG9pbnQuCisvLworLy8gTm90ZSB0aGF0IHRoaXMg
Y2xhc3MgZG9lcyBhIGJhZCBqb2Igb2YgYmVpbmcgZmFzdC4gVGhhdCdzIHNvbWV3aGF0IGludGVu
dGlvbmFsLiBXZSBleHBlY3QgdXNlcworLy8gb2YgZnVuY3Rpb24uYXJndW1lbnRzIHRvIGJlIHJh
cmUgb24gdGhlIG1vZGVybiB3ZWIuIFlvdSB3aWxsIGdldCBwYXJ0aWN1bGFybHkgYmFkIHBlcmZv
cm1hbmNlCisvLyBpZiB5b3UgdXNlIGZ1bmN0aW9uLmFyZ3VtZW50cyBpbiBzdHJpY3QgbW9kZS4K
K2NsYXNzIE91dE9mQmFuZEFyZ3VtZW50cyA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKK3B1
YmxpYzoKKyAgICB0eXBlZGVmIEpTTm9uRmluYWxPYmplY3QgQmFzZTsKKyAgICAKK3ByaXZhdGU6
CisgICAgT3V0T2ZCYW5kQXJndW1lbnRzKFZNJiwgU3RydWN0dXJlKik7CisKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgT3V0T2ZCYW5kQXJndW1lbnRzKiBjcmVhdGVFbXB0eShWTSYsIEpTR2xvYmFsT2Jq
ZWN0Kik7CisgICAgc3RhdGljIE91dE9mQmFuZEFyZ3VtZW50cyogY3JlYXRlRW1wdHkoRXhlY1N0
YXRlKik7CisgICAgc3RhdGljIE91dE9mQmFuZEFyZ3VtZW50cyogY3JlYXRlV2l0aElubGluZUZy
YW1lKEV4ZWNTdGF0ZSogbXlGcmFtZSwgRXhlY1N0YXRlKiB0YXJnZXRGcmFtZSwgSW5saW5lQ2Fs
bEZyYW1lKiwgQXJndW1lbnRzTW9kZSk7CisgICAgc3RhdGljIE91dE9mQmFuZEFyZ3VtZW50cyog
Y3JlYXRlV2l0aE1hY2hpbmVGcmFtZShFeGVjU3RhdGUqIG15RnJhbWUsIEV4ZWNTdGF0ZSogdGFy
Z2V0RnJhbWUsIEFyZ3VtZW50c01vZGUpOworICAgIAorICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNy
ZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUpOwor
ICAgIAorICAgIERFQ0xBUkVfRVhQT1JUX0lORk87Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MK
KworI2VuZGlmIC8vIE91dE9mQmFuZEFyZ3VtZW50c19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1Njb3BlT2Zmc2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TY29wZU9mZnNldC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZU9mZnNldC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2NvcGVPZmZzZXQuaCIKKwor
bmFtZXNwYWNlIEpTQyB7CisKK3ZvaWQgU2NvcGVPZmZzZXQ6OmR1bXAoUHJpbnRTdHJlYW0mIG91
dCkgY29uc3QKK3sKKyAgICBpZiAoISp0aGlzKSB7CisgICAgICAgIG91dC5wcmludCgic2NvcGVJ
bnZhbGlkIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgb3V0LnByaW50KCJz
Y29wZSIsIG1fb2Zmc2V0KTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlT2Zmc2V0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVPZmZzZXQuaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlT2Zmc2V0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw3MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIFNjb3BlT2Zmc2V0X2gKKyNkZWZpbmUgU2NvcGVPZmZzZXRfaAor
CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0u
aD4KKworbmFtZXNwYWNlIEpTQyB7CisKKy8vIFRoaXMgaXMgYW4gb2Zmc2V0IGludG8gYSBzY29w
ZSBvZiBzb21lIGtpbmQuIEl0IGNvdWxkIGJlIGFuIGFjdGl2YXRpb24gc2NvcGUgb3IgaXQgY291
bGQgYmUgYQorLy8gZ2xvYmFsIG9iamVjdC4KK2NsYXNzIFNjb3BlT2Zmc2V0IHsKK3B1YmxpYzoK
KyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW52YWxpZE9mZnNldCA9IFVJTlRfTUFYOworCisg
ICAgU2NvcGVPZmZzZXQoKQorICAgICAgICA6IG1fb2Zmc2V0KGludmFsaWRPZmZzZXQpCisgICAg
eworICAgIH0KKyAgICAKKyAgICBleHBsaWNpdCBTY29wZU9mZnNldCh1bnNpZ25lZCBvZmZzZXQp
CisgICAgICAgIDogbV9vZmZzZXQob2Zmc2V0KQorICAgIHsKKyAgICB9CisgICAgCisgICAgYm9v
bCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiBtX29mZnNldCA9PSBpbnZhbGlkT2Zmc2V0OyB9
CisgICAgCisgICAgdW5zaWduZWQgb2Zmc2V0VW5jaGVja2VkKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiBtX29mZnNldDsKKyAgICB9CisgICAgCisgICAgdW5zaWduZWQgb2Zmc2V0KCkg
Y29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChtX29mZnNldCAhPSBpbnZhbGlkT2Zmc2V0KTsK
KyAgICAgICAgcmV0dXJuIG1fb2Zmc2V0OworICAgIH0KKyAgICAKKyAgICB2b2lkIGR1bXAoUHJp
bnRTdHJlYW0mKSBjb25zdDsKKyAgICAKK3ByaXZhdGU6CisgICAgdW5zaWduZWQgbV9vZmZzZXQ7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIFNjb3BlT2Zmc2V0X2gKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmNwcAko
cmV2aXNpb24gMTgwMjg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9s
VGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMiwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTIsIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMzcsMjkgKzEzNywyMiBAQCB2
b2lkIFN5bWJvbFRhYmxlOjpXYXRjaHBvaW50Q2xlYW51cDo6ZmluCiAgICAgfQogfQogCi1TeW1i
b2xUYWJsZSogU3ltYm9sVGFibGU6OmNsb25lQ2FwdHVyZWROYW1lcyhWTSYgdm0pCitTeW1ib2xU
YWJsZSogU3ltYm9sVGFibGU6OmNsb25lSWdub3JpbmdTdGFjayhWTSYgdm0pCiB7CiAgICAgU3lt
Ym9sVGFibGUqIHJlc3VsdCA9IFN5bWJvbFRhYmxlOjpjcmVhdGUodm0pOwogICAgIAotICAgIHJl
c3VsdC0+bV9wYXJhbWV0ZXJDb3VudEluY2x1ZGluZ1RoaXMgPSBtX3BhcmFtZXRlckNvdW50SW5j
bHVkaW5nVGhpczsKICAgICByZXN1bHQtPm1fdXNlc05vblN0cmljdEV2YWwgPSBtX3VzZXNOb25T
dHJpY3RFdmFsOwogICAgIHJlc3VsdC0+bV9jYXB0dXJlU3RhcnQgPSBtX2NhcHR1cmVTdGFydDsK
ICAgICByZXN1bHQtPm1fY2FwdHVyZUVuZCA9IG1fY2FwdHVyZUVuZDsKIAogICAgIGZvciAoYXV0
byBpdGVyID0gbV9tYXAuYmVnaW4oKSwgZW5kID0gbV9tYXAuZW5kKCk7IGl0ZXIgIT0gZW5kOyAr
K2l0ZXIpIHsKLSAgICAgICAgaWYgKCFpc0NhcHR1cmVkKGl0ZXItPnZhbHVlLmdldEluZGV4KCkp
KQorICAgICAgICBpZiAoaXRlci0+dmFsdWUudmFyT2Zmc2V0KCkuaXNTdGFjaygpKQogICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgIHJlc3VsdC0+bV9tYXAuYWRkKAogICAgICAgICAgICAg
aXRlci0+a2V5LAotICAgICAgICAgICAgU3ltYm9sVGFibGVFbnRyeShpdGVyLT52YWx1ZS5nZXRJ
bmRleCgpLCBpdGVyLT52YWx1ZS5nZXRBdHRyaWJ1dGVzKCkpKTsKKyAgICAgICAgICAgIFN5bWJv
bFRhYmxlRW50cnkoaXRlci0+dmFsdWUudmFyT2Zmc2V0KCksIGl0ZXItPnZhbHVlLmdldEF0dHJp
YnV0ZXMoKSkpOwogICAgIH0KICAgICAKLSAgICBpZiAobV9zbG93QXJndW1lbnRzKSB7Ci0gICAg
ICAgIHJlc3VsdC0+bV9zbG93QXJndW1lbnRzID0gc3RkOjptYWtlX3VuaXF1ZTxTbG93QXJndW1l
bnRbXT4ocGFyYW1ldGVyQ291bnQoKSk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IHBhcmFt
ZXRlckNvdW50KCk7IGktLTspCi0gICAgICAgICAgICByZXN1bHQtPm1fc2xvd0FyZ3VtZW50c1tp
XSA9IG1fc2xvd0FyZ3VtZW50c1tpXTsKLSAgICB9Ci0KICAgICBpZiAobV90eXBlUHJvZmlsaW5n
UmFyZURhdGEpIHsKICAgICAgICAgcmVzdWx0LT5tX3R5cGVQcm9maWxpbmdSYXJlRGF0YSA9IHN0
ZDo6bWFrZV91bmlxdWU8VHlwZVByb2ZpbGluZ1JhcmVEYXRhPigpOwogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmgJKHJldmlzaW9uIDE4MDI4NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAy
MDEyLTIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDA3LCAyMDA4LCAyMDEyLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zOSwyNCArMzksNiBAQAogCiBuYW1l
c3BhY2UgSlNDIHsKIAotc3RydWN0IFNsb3dBcmd1bWVudCB7Ci1wdWJsaWM6Ci0gICAgZW51bSBT
dGF0dXMgewotICAgICAgICBOb3JtYWwgPSAwLAotICAgICAgICBDYXB0dXJlZCA9IDEsCi0gICAg
ICAgIERlbGV0ZWQgPSAyCi0gICAgfTsKLQotICAgIFNsb3dBcmd1bWVudCgpCi0gICAgICAgIDog
c3RhdHVzKE5vcm1hbCkKLSAgICAgICAgLCBpbmRleCgwKQotICAgIHsKLSAgICB9Ci0KLSAgICBT
dGF0dXMgc3RhdHVzOwotICAgIGludCBpbmRleDsgLy8gSWYgc3RhdHVzIGlzICdEZWxldGVkJywg
aW5kZXggaXMgYm9ndXMuCi19OwotCiBzdGF0aWMgQUxXQVlTX0lOTElORSBpbnQgbWlzc2luZ1N5
bWJvbE1hcmtlcigpIHsgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCk7IH0K
IAogLy8gVGhlIGJpdCB0d2lkZGxpbmcgaW4gdGhpcyBjbGFzcyBhc3N1bWVzIHRoYXQgZXZlcnkg
cmVnaXN0ZXIgaW5kZXggaXMgYQpAQCAtODYsNiArNjgsMjEgQEAgc3RhdGljIEFMV0FZU19JTkxJ
TkUgaW50IG1pc3NpbmdTeW1ib2xNYQogLy8gY29weTogICAgIFN5bWJvbFRhYmxlRW50cnkgLS0+
IEZhdEVudHJ5IC0tLS0tXgogCiBzdHJ1Y3QgU3ltYm9sVGFibGVFbnRyeSB7Citwcml2YXRlOgor
ICAgIHN0YXRpYyBWYXJPZmZzZXQgdmFyT2Zmc2V0RnJvbUJpdHMoaW50cHRyX3QgYml0cykKKyAg
ICB7CisgICAgICAgIFZhcktpbmQga2luZDsKKyAgICAgICAgaWYgKGJpdHMgJiBTdGFja0ZsYWcp
CisgICAgICAgICAgICBraW5kID0gU3RhY2tWYXJLaW5kOworICAgICAgICBlbHNlIGlmIChiaXRz
ICYgQ2FwdHVyZWRBcmd1bWVudEZsYWcpCisgICAgICAgICAgICBraW5kID0gQ2FwdHVyZWRBcmd1
bWVudEtpbmQ7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGtpbmQgPSBTY29wZVZhcktpbmQ7
CisgICAgICAgIHJldHVybiBWYXJPZmZzZXQ6OmFzc2VtYmxlKGtpbmQsIHN0YXRpY19jYXN0PGlu
dD4oYml0cyA+PiBGbGFnQml0cykpOworICAgIH0KKworcHVibGljOgorICAgIAogICAgIC8vIFVz
ZSB0aGUgU3ltYm9sVGFibGVFbnRyeTo6RmFzdCBjbGFzcywgZWl0aGVyIHZpYSBpbXBsaWNpdCBj
YXN0IG9yIGJ5IGNhbGxpbmcKICAgICAvLyBnZXRGYXN0KCksIHdoZW4geW91ICgxKSBvbmx5IGNh
cmUgYWJvdXQgaXNOdWxsKCksIGdldEluZGV4KCksIGFuZCBpc1JlYWRPbmx5KCksCiAgICAgLy8g
YW5kICgyKSB5b3UgYXJlIGluIGEgaG90IHBhdGggd2hlcmUgeW91IG5lZWQgdG8gbWluaW1pemUg
dGhlIG51bWJlciBvZiB0aW1lcwpAQCAtMTA3LDExICsxMDQsMTEgQEAgc3RydWN0IFN5bWJvbFRh
YmxlRW50cnkgewogICAgICAgICAgICAgcmV0dXJuICEobV9iaXRzICYgflNsaW1GbGFnKTsKICAg
ICAgICAgfQogCi0gICAgICAgIGludCBnZXRJbmRleCgpIGNvbnN0CisgICAgICAgIFZhck9mZnNl
dCB2YXJPZmZzZXQoKSBjb25zdAogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8aW50PihtX2JpdHMgPj4gRmxhZ0JpdHMpOworICAgICAgICAgICAgcmV0dXJuIHZhck9m
ZnNldEZyb21CaXRzKG1fYml0cyk7CiAgICAgICAgIH0KLSAgICAKKyAgICAgICAgCiAgICAgICAg
IGJvb2wgaXNSZWFkT25seSgpIGNvbnN0CiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBt
X2JpdHMgJiBSZWFkT25seUZsYWc7CkBAIC0xNDIsMTggKzEzOSwxOCBAQCBzdHJ1Y3QgU3ltYm9s
VGFibGVFbnRyeSB7CiAgICAgewogICAgIH0KIAotICAgIFN5bWJvbFRhYmxlRW50cnkoaW50IGlu
ZGV4KQorICAgIFN5bWJvbFRhYmxlRW50cnkoVmFyT2Zmc2V0IG9mZnNldCkKICAgICAgICAgOiBt
X2JpdHMoU2xpbUZsYWcpCiAgICAgewotICAgICAgICBBU1NFUlQoaXNWYWxpZEluZGV4KGluZGV4
KSk7Ci0gICAgICAgIHBhY2soaW5kZXgsIGZhbHNlLCBmYWxzZSk7CisgICAgICAgIEFTU0VSVChp
c1ZhbGlkVmFyT2Zmc2V0KG9mZnNldCkpOworICAgICAgICBwYWNrKG9mZnNldCwgZmFsc2UsIGZh
bHNlKTsKICAgICB9CiAKLSAgICBTeW1ib2xUYWJsZUVudHJ5KGludCBpbmRleCwgdW5zaWduZWQg
YXR0cmlidXRlcykKKyAgICBTeW1ib2xUYWJsZUVudHJ5KFZhck9mZnNldCBvZmZzZXQsIHVuc2ln
bmVkIGF0dHJpYnV0ZXMpCiAgICAgICAgIDogbV9iaXRzKFNsaW1GbGFnKQogICAgIHsKLSAgICAg
ICAgQVNTRVJUKGlzVmFsaWRJbmRleChpbmRleCkpOwotICAgICAgICBwYWNrKGluZGV4LCBhdHRy
aWJ1dGVzICYgUmVhZE9ubHksIGF0dHJpYnV0ZXMgJiBEb250RW51bSk7CisgICAgICAgIEFTU0VS
VChpc1ZhbGlkVmFyT2Zmc2V0KG9mZnNldCkpOworICAgICAgICBwYWNrKG9mZnNldCwgYXR0cmli
dXRlcyAmIFJlYWRPbmx5LCBhdHRyaWJ1dGVzICYgRG9udEVudW0pOwogICAgIH0KICAgICAKICAg
ICB+U3ltYm9sVGFibGVFbnRyeSgpCkBAIC0xODEsOSArMTc4LDkgQEAgc3RydWN0IFN5bWJvbFRh
YmxlRW50cnkgewogICAgICAgICByZXR1cm4gIShiaXRzKCkgJiB+U2xpbUZsYWcpOwogICAgIH0K
IAotICAgIGludCBnZXRJbmRleCgpIGNvbnN0CisgICAgVmFyT2Zmc2V0IHZhck9mZnNldCgpIGNv
bnN0CiAgICAgewotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PihiaXRzKCkgPj4gRmxh
Z0JpdHMpOworICAgICAgICByZXR1cm4gdmFyT2Zmc2V0RnJvbUJpdHMoYml0cygpKTsKICAgICB9
CiAgICAgCiAgICAgQUxXQVlTX0lOTElORSBGYXN0IGdldEZhc3QoKSBjb25zdApAQCAtMjA5LDcg
KzIwNiw3IEBAIHN0cnVjdCBTeW1ib2xUYWJsZUVudHJ5IHsKIAogICAgIHZvaWQgc2V0QXR0cmli
dXRlcyh1bnNpZ25lZCBhdHRyaWJ1dGVzKQogICAgIHsKLSAgICAgICAgcGFjayhnZXRJbmRleCgp
LCBhdHRyaWJ1dGVzICYgUmVhZE9ubHksIGF0dHJpYnV0ZXMgJiBEb250RW51bSk7CisgICAgICAg
IHBhY2sodmFyT2Zmc2V0KCksIGF0dHJpYnV0ZXMgJiBSZWFkT25seSwgYXR0cmlidXRlcyAmIERv
bnRFbnVtKTsKICAgICB9CiAKICAgICBib29sIGlzUmVhZE9ubHkoKSBjb25zdApAQCAtMjQyLDcg
KzIzOSw5IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIGNvbnN0IGludHB0cl90IFJlYWRPbmx5Rmxh
ZyA9IDB4MjsKICAgICBzdGF0aWMgY29uc3QgaW50cHRyX3QgRG9udEVudW1GbGFnID0gMHg0Owog
ICAgIHN0YXRpYyBjb25zdCBpbnRwdHJfdCBOb3ROdWxsRmxhZyA9IDB4ODsKLSAgICBzdGF0aWMg
Y29uc3QgaW50cHRyX3QgRmxhZ0JpdHMgPSA0OworICAgIHN0YXRpYyBjb25zdCBpbnRwdHJfdCBT
dGFja0ZsYWcgPSAweDEwOworICAgIHN0YXRpYyBjb25zdCBpbnRwdHJfdCBDYXB0dXJlZEFyZ3Vt
ZW50RmxhZyA9IDB4MjA7CisgICAgc3RhdGljIGNvbnN0IGludHB0cl90IEZsYWdCaXRzID0gNjsK
ICAgICAKICAgICBjbGFzcyBGYXRFbnRyeSB7CiAgICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOwpAQCAtMzA5LDIwICszMDgsMzQgQEAgcHJpdmF0ZToKIAogICAgIEpTX0VYUE9SVF9QUklW
QVRFIHZvaWQgZnJlZUZhdEVudHJ5U2xvdygpOwogCi0gICAgdm9pZCBwYWNrKGludCBpbmRleCwg
Ym9vbCByZWFkT25seSwgYm9vbCBkb250RW51bSkKKyAgICB2b2lkIHBhY2soVmFyT2Zmc2V0IG9m
ZnNldCwgYm9vbCByZWFkT25seSwgYm9vbCBkb250RW51bSkKICAgICB7CiAgICAgICAgIEFTU0VS
VCghaXNGYXQoKSk7CiAgICAgICAgIGludHB0cl90JiBiaXRzUmVmID0gYml0cygpOwotICAgICAg
ICBiaXRzUmVmID0gKHN0YXRpY19jYXN0PGludHB0cl90PihpbmRleCkgPDwgRmxhZ0JpdHMpIHwg
Tm90TnVsbEZsYWcgfCBTbGltRmxhZzsKKyAgICAgICAgYml0c1JlZiA9CisgICAgICAgICAgICAo
c3RhdGljX2Nhc3Q8aW50cHRyX3Q+KG9mZnNldC5yYXdPZmZzZXQoKSkgPDwgRmxhZ0JpdHMpIHwg
Tm90TnVsbEZsYWcgfCBTbGltRmxhZzsKICAgICAgICAgaWYgKHJlYWRPbmx5KQogICAgICAgICAg
ICAgYml0c1JlZiB8PSBSZWFkT25seUZsYWc7CiAgICAgICAgIGlmIChkb250RW51bSkKICAgICAg
ICAgICAgIGJpdHNSZWYgfD0gRG9udEVudW1GbGFnOworICAgICAgICBzd2l0Y2ggKG9mZnNldC5r
aW5kKCkpIHsKKyAgICAgICAgY2FzZSBTY29wZVZhcktpbmQ6CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBTdGFja1ZhcktpbmQ6CisgICAgICAgICAgICBiaXRzUmVmIHw9IFN0YWNr
RmxhZzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENhcHR1cmVkQXJndW1lbnRL
aW5kOgorICAgICAgICAgICAgYml0c1JlZiB8PSBDYXB0dXJlZEFyZ3VtZW50RmxhZzsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgfQog
ICAgIAotICAgIGJvb2wgaXNWYWxpZEluZGV4KGludCBpbmRleCkKKyAgICBzdGF0aWMgYm9vbCBp
c1ZhbGlkVmFyT2Zmc2V0KFZhck9mZnNldCBvZmZzZXQpCiAgICAgewotICAgICAgICByZXR1cm4g
KChzdGF0aWNfY2FzdDxpbnRwdHJfdD4oaW5kZXgpIDw8IEZsYWdCaXRzKSA+PiBGbGFnQml0cykg
PT0gc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KGluZGV4KTsKKyAgICAgICAgcmV0dXJuICgoc3RhdGlj
X2Nhc3Q8aW50cHRyX3Q+KG9mZnNldC5yYXdPZmZzZXQoKSkgPDwgRmxhZ0JpdHMpID4+IEZsYWdC
aXRzKSA9PSBzdGF0aWNfY2FzdDxpbnRwdHJfdD4ob2Zmc2V0LnJhd09mZnNldCgpKTsKICAgICB9
CiAKICAgICBpbnRwdHJfdCBtX2JpdHM7CkBAIC00NTYsMjggKzQ2OSw3IEBAIHB1YmxpYzoKICAg
ICBib29sIHVzZXNOb25TdHJpY3RFdmFsKCkgeyByZXR1cm4gbV91c2VzTm9uU3RyaWN0RXZhbDsg
fQogICAgIHZvaWQgc2V0VXNlc05vblN0cmljdEV2YWwoYm9vbCB1c2VzTm9uU3RyaWN0RXZhbCkg
eyBtX3VzZXNOb25TdHJpY3RFdmFsID0gdXNlc05vblN0cmljdEV2YWw7IH0KIAotICAgIGludCBj
YXB0dXJlU3RhcnQoKSBjb25zdCB7IHJldHVybiBtX2NhcHR1cmVTdGFydDsgfQotICAgIHZvaWQg
c2V0Q2FwdHVyZVN0YXJ0KGludCBjYXB0dXJlU3RhcnQpIHsgbV9jYXB0dXJlU3RhcnQgPSBjYXB0
dXJlU3RhcnQ7IH0KLQotICAgIGludCBjYXB0dXJlRW5kKCkgY29uc3QgeyByZXR1cm4gbV9jYXB0
dXJlRW5kOyB9Ci0gICAgdm9pZCBzZXRDYXB0dXJlRW5kKGludCBjYXB0dXJlRW5kKSB7IG1fY2Fw
dHVyZUVuZCA9IGNhcHR1cmVFbmQ7IH0KLQotICAgIGludCBjYXB0dXJlQ291bnQoKSBjb25zdCB7
IHJldHVybiAtKG1fY2FwdHVyZUVuZCAtIG1fY2FwdHVyZVN0YXJ0KTsgfQotICAgIAotICAgIGJv
b2wgaXNDYXB0dXJlZChpbnQgb3BlcmFuZCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBvcGVyYW5k
IDw9IGNhcHR1cmVTdGFydCgpICYmIG9wZXJhbmQgPiBjYXB0dXJlRW5kKCk7Ci0gICAgfQotCi0g
ICAgaW50IHBhcmFtZXRlckNvdW50KCkgeyByZXR1cm4gbV9wYXJhbWV0ZXJDb3VudEluY2x1ZGlu
Z1RoaXMgLSAxOyB9Ci0gICAgaW50IHBhcmFtZXRlckNvdW50SW5jbHVkaW5nVGhpcygpIHsgcmV0
dXJuIG1fcGFyYW1ldGVyQ291bnRJbmNsdWRpbmdUaGlzOyB9Ci0gICAgdm9pZCBzZXRQYXJhbWV0
ZXJDb3VudEluY2x1ZGluZ1RoaXMoaW50IHBhcmFtZXRlckNvdW50SW5jbHVkaW5nVGhpcykgeyBt
X3BhcmFtZXRlckNvdW50SW5jbHVkaW5nVGhpcyA9IHBhcmFtZXRlckNvdW50SW5jbHVkaW5nVGhp
czsgfQotCi0gICAgLy8gMCBpZiB3ZSBkb24ndCBjYXB0dXJlIGFueSBhcmd1bWVudHM7IHBhcmFt
ZXRlckNvdW50KCkgaW4gbGVuZ3RoIGlmIHdlIGRvLgotICAgIGNvbnN0IFNsb3dBcmd1bWVudCog
c2xvd0FyZ3VtZW50cygpIHsgcmV0dXJuIG1fc2xvd0FyZ3VtZW50cy5nZXQoKTsgfQotICAgIHZv
aWQgc2V0U2xvd0FyZ3VtZW50cyhzdGQ6OnVuaXF1ZV9wdHI8U2xvd0FyZ3VtZW50W10+IHNsb3dB
cmd1bWVudHMpIHsgbV9zbG93QXJndW1lbnRzID0gV1RGOjptb3ZlKHNsb3dBcmd1bWVudHMpOyB9
Ci0gICAgCi0gICAgU3ltYm9sVGFibGUqIGNsb25lQ2FwdHVyZWROYW1lcyhWTSYpOworICAgIFN5
bWJvbFRhYmxlKiBjbG9uZUlnbm9yaW5nU3RhY2soVk0mKTsKIAogICAgIHZvaWQgcHJlcGFyZUZv
clR5cGVQcm9maWxpbmcoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYpOwogCkBAIC01MTIsMTQg
KzUwNCw4IEBAIHByaXZhdGU6CiAgICAgfTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8VHlwZVByb2Zp
bGluZ1JhcmVEYXRhPiBtX3R5cGVQcm9maWxpbmdSYXJlRGF0YTsKIAotICAgIGludCBtX3BhcmFt
ZXRlckNvdW50SW5jbHVkaW5nVGhpczsKICAgICBib29sIG1fdXNlc05vblN0cmljdEV2YWw7CiAK
LSAgICBpbnQgbV9jYXB0dXJlU3RhcnQ7Ci0gICAgaW50IG1fY2FwdHVyZUVuZDsKLQotICAgIHN0
ZDo6dW5pcXVlX3B0cjxTbG93QXJndW1lbnRbXT4gbV9zbG93QXJndW1lbnRzOwotICAgIAogICAg
IHN0ZDo6dW5pcXVlX3B0cjxXYXRjaHBvaW50Q2xlYW51cD4gbV93YXRjaHBvaW50Q2xlYW51cDsK
IAogcHVibGljOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVmFyT2Zmc2V0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WYXJPZmZz
ZXQuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVmFy
T2Zmc2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc2IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJWYXJPZmZzZXQuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3ZvaWQgVmFyT2Zmc2V0
OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgc3dpdGNoIChtX2tpbmQpIHsK
KyAgICBjYXNlIEludmFsaWRWYXJLaW5kOgorICAgICAgICBvdXQucHJpbnQoImludmFsaWQiKTsK
KyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU2NvcGVWYXJLaW5kOgorICAgICAgICBvdXQucHJp
bnQoc2NvcGVPZmZzZXQoKSk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFN0YWNrVmFyS2lu
ZDoKKyAgICAgICAgb3V0LnByaW50KHN0YWNrT2Zmc2V0KCkpOworICAgICAgICByZXR1cm47Cisg
ICAgY2FzZSBDYXB0dXJlZEFyZ3VtZW50S2luZDoKKyAgICAgICAgb3V0LnByaW50KGNhcHR1cmVk
QXJndW1lbnRPZmZzZXQoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKK25hbWVzcGFj
ZSBXVEYgeworCit1c2luZyBuYW1lc3BhY2UgSlNDOworCit2b2lkIHByaW50SW50ZXJuYWwoUHJp
bnRTdHJlYW0mIG91dCwgVmFyS2luZCB2YXJLaW5kKQoreworICAgIHN3aXRjaCAodmFyS2luZCkg
eworICAgIGNhc2UgSW52YWxpZFZhcktpbmQ6CisgICAgICAgIG91dC5wcmludCgiSW52YWxpZCIp
OworICAgICAgICByZXR1cm47CisgICAgY2FzZSBTY29wZVZhcktpbmQ6CisgICAgICAgIG91dC5w
cmludCgiU2NvcGUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU3RhY2tWYXJLaW5kOgor
ICAgICAgICBvdXQucHJpbnQoIlN0YWNrIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENh
cHR1cmVkQXJndW1lbnRLaW5kOgorICAgICAgICBvdXQucHJpbnQoIkNhcHR1cmVkQXJndW1lbnQi
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVmFyT2Zmc2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVmFyT2Zmc2V0LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9WYXJPZmZzZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIwMyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IFZhck9mZnNldF9oCisjZGVmaW5lIFZhck9mZnNldF9oCisKKyNpbmNsdWRlICJDYXB0dXJlZEFy
Z3VtZW50T2Zmc2V0LmgiCisjaW5jbHVkZSAiU2NvcGVPZmZzZXQuaCIKKyNpbmNsdWRlICJWaXJ0
dWFsUmVnaXN0ZXIuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2VudW0gVmFyS2luZCA6IHVpbnQ4
X3QgeworICAgIEludmFsaWRWYXJLaW5kLAorICAgIFNjb3BlVmFyS2luZCwKKyAgICBTdGFja1Zh
cktpbmQsCisgICAgQ2FwdHVyZWRBcmd1bWVudEtpbmQKK307CisKK2NsYXNzIFZhck9mZnNldCB7
CitwdWJsaWM6CisgICAgVmFyT2Zmc2V0KCkKKyAgICAgICAgOiBtX2tpbmQoSW52YWxpZFZhcktp
bmQpCisgICAgICAgICwgbV9vZmZzZXQoVUlOVF9NQVgpCisgICAgeworICAgIH0KKyAgICAKKyAg
ICBleHBsaWNpdCBWYXJPZmZzZXQoVmlydHVhbFJlZ2lzdGVyIHN0YWNrT2Zmc2V0KQorICAgIHsK
KyAgICAgICAgaWYgKCFzdGFja09mZnNldC5pc1ZhbGlkKCkpIHsKKyAgICAgICAgICAgIG1fa2lu
ZCA9IEludmFsaWRWYXJLaW5kOworICAgICAgICAgICAgbV9vZmZzZXQgPSBVSU5UX01BWDsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1fa2luZCA9IFN0YWNrVmFyS2luZDsKKyAgICAg
ICAgICAgIG1fb2Zmc2V0ID0gc3RhY2tPZmZzZXQub2Zmc2V0KCk7CisgICAgICAgIH0KKyAgICB9
CisgICAgCisgICAgZXhwbGljaXQgVmFyT2Zmc2V0KFNjb3BlT2Zmc2V0IHNjb3BlT2Zmc2V0KQor
ICAgIHsKKyAgICAgICAgaWYgKCFzY29wZU9mZnNldCkgeworICAgICAgICAgICAgbV9raW5kID0g
SW52YWxpZFZhcktpbmQ7CisgICAgICAgICAgICBtX29mZnNldCA9IFVJTlRfTUFYOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgbV9raW5kID0gU2NvcGVWYXJLaW5kOworICAgICAgICAg
ICAgbV9vZmZzZXQgPSBzY29wZU9mZnNldC5vZmZzZXQoKTsKKyAgICAgICAgfQorICAgIH0KKyAg
ICAKKyAgICBleHBsaWNpdCBWYXJPZmZzZXQoQ2FwdHVyZWRBcmd1bWVudE9mZnNldCBjYXB0dXJl
ZEFyZ3VtZW50T2Zmc2V0KQorICAgIHsKKyAgICAgICAgaWYgKCFjYXB0dXJlZEFyZ3VtZW50T2Zm
c2V0KSB7CisgICAgICAgICAgICBtX2tpbmQgPSBJbnZhbGlkVmFyS2luZDsKKyAgICAgICAgICAg
IG1fb2Zmc2V0ID0gVUlOVF9NQVg7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX2tp
bmQgPSBDYXB0dXJlZEFyZ3VtZW50S2luZDsKKyAgICAgICAgICAgIG1fb2Zmc2V0ID0gY2FwdHVy
ZWRBcmd1bWVudE9mZnNldC5vZmZzZXQoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBz
dGF0aWMgVmFyT2Zmc2V0IGFzc2VtYmxlKFZhcktpbmQga2luZCwgdW5zaWduZWQgb2Zmc2V0KQor
ICAgIHsKKyAgICAgICAgVmFyT2Zmc2V0IHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9
IGtpbmQ7CisgICAgICAgIHJlc3VsdC5tX29mZnNldCA9IG9mZnNldDsKKyAgICAgICAgcmVzdWx0
LmNoZWNrU2FuaXR5KCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAg
IGJvb2wgaXNWYWxpZCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9raW5kICE9IElu
dmFsaWRWYXJLaW5kOworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gIWlzVmFsaWQoKTsKKyAgICB9CisgICAgCisgICAgVmFyS2lu
ZCBraW5kKCkgY29uc3QgeyByZXR1cm4gbV9raW5kOyB9CisgICAgCisgICAgYm9vbCBpc1N0YWNr
KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2tpbmQgPT0gU3RhY2tWYXJLaW5kOwor
ICAgIH0KKyAgICAKKyAgICBib29sIGlzU2NvcGUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIG1fa2luZCA9PSBTY29wZVZhcktpbmQ7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNDYXB0
dXJlZEFyZ3VtZW50KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2tpbmQgPT0gQ2Fw
dHVyZWRBcmd1bWVudEtpbmQ7CisgICAgfQorICAgIAorICAgIFZpcnR1YWxSZWdpc3RlciBzdGFj
a09mZnNldFVuY2hlY2tlZCgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoIWlzU3RhY2soKSkK
KyAgICAgICAgICAgIHJldHVybiBWaXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICAgICAgcmV0dXJuIFZp
cnR1YWxSZWdpc3RlcihtX29mZnNldCk7CisgICAgfQorICAgIAorICAgIFNjb3BlT2Zmc2V0IHNj
b3BlT2Zmc2V0VW5jaGVja2VkKCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmICghaXNTY29wZSgp
KQorICAgICAgICAgICAgcmV0dXJuIFNjb3BlT2Zmc2V0KCk7CisgICAgICAgIHJldHVybiBTY29w
ZU9mZnNldChtX29mZnNldCk7CisgICAgfQorICAgIAorICAgIENhcHR1cmVkQXJndW1lbnRPZmZz
ZXQgY2FwdHVyZWRBcmd1bWVudE9mZnNldFVuY2hlY2tlZCgpIGNvbnN0CisgICAgeworICAgICAg
ICBpZiAoIWlzQ2FwdHVyZWRBcmd1bWVudCgpKQorICAgICAgICAgICAgcmV0dXJuIENhcHR1cmVk
QXJndW1lbnRPZmZzZXQoKTsKKyAgICAgICAgcmV0dXJuIENhcHR1cmVkQXJndW1lbnRPZmZzZXQo
bV9vZmZzZXQpOworICAgIH0KKyAgICAKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3RhY2tPZmZzZXQo
KSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzU3RhY2soKSk7CisgICAgICAgIHJldHVy
biBWaXJ0dWFsUmVnaXN0ZXIobV9vZmZzZXQpOworICAgIH0KKyAgICAKKyAgICBTY29wZU9mZnNl
dCBzY29wZU9mZnNldCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaXNTY29wZSgpKTsK
KyAgICAgICAgcmV0dXJuIFNjb3BlT2Zmc2V0KG1fb2Zmc2V0KTsKKyAgICB9CisgICAgCisgICAg
Q2FwdHVyZWRBcmd1bWVudE9mZnNldCBjYXB0dXJlZEFyZ3VtZW50T2Zmc2V0KCkgY29uc3QKKyAg
ICB7CisgICAgICAgIEFTU0VSVChpc0NhcHR1cmVkQXJndW1lbnQoKSk7CisgICAgICAgIHJldHVy
biBDYXB0dXJlZEFyZ3VtZW50T2Zmc2V0KG1fb2Zmc2V0KTsKKyAgICB9CisgICAgCisgICAgdW5z
aWduZWQgcmF3T2Zmc2V0KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc1ZhbGlkKCkp
OworICAgICAgICByZXR1cm4gbV9vZmZzZXQ7CisgICAgfQorICAgIAorICAgIHZvaWQgY2hlY2tT
YW5pdHkoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKEFTU0VSVF9ESVNBQkxFRCkKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIHN3aXRjaCAobV9raW5kKSB7CisgICAg
ICAgIGNhc2UgSW52YWxpZFZhcktpbmQ6CisgICAgICAgICAgICBBU1NFUlQobV9vZmZzZXQgPT0g
VUlOVF9NQVgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIFNjb3BlVmFyS2lu
ZDoKKyAgICAgICAgICAgIEFTU0VSVChzY29wZU9mZnNldCgpKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgY2FzZSBTdGFja1ZhcktpbmQ6CisgICAgICAgICAgICBBU1NFUlQoc3RhY2tP
ZmZzZXQoKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNhc2UgQ2FwdHVyZWRBcmd1
bWVudEtpbmQ6CisgICAgICAgICAgICBBU1NFUlQoY2FwdHVyZWRBcmd1bWVudE9mZnNldCgpKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgfQorICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYp
IGNvbnN0OworICAgIAorcHJpdmF0ZToKKyAgICBWYXJLaW5kIG1fa2luZDsKKyAgICB1bnNpZ25l
ZCBtX29mZnNldDsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCituYW1lc3BhY2UgV1RGIHsK
Kwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpWYXJLaW5kKTsKKworfSAv
LyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBWYXJPZmZzZXRfaAorCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>246898</attachid>
            <date>2015-02-19 11:00:47 -0800</date>
            <delta_ts>2015-02-20 10:25:09 -0800</delta_ts>
            <desc>more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>70706</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIv
Qnl0ZWNvZGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAxODAyODUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTE2LDcgKzExNiw3IEBAIFBhcnNlckVycm9yIEJ5dGVjb2RlR2VuZXJhdG9yOjpnZW5l
cmF0ZSgKICAgICBtX2NvZGVCbG9jay0+c2hyaW5rVG9GaXQoKTsKIAogICAgIGlmIChtX2NvZGVC
bG9jay0+c3ltYm9sVGFibGUoKSAmJiAhbV9jb2RlQmxvY2stPnZtKCktPnR5cGVQcm9maWxlcigp
KQotICAgICAgICBtX2NvZGVCbG9jay0+c2V0U3ltYm9sVGFibGUobV9jb2RlQmxvY2stPnN5bWJv
bFRhYmxlKCktPmNsb25lQ2FwdHVyZWROYW1lcygqbV9jb2RlQmxvY2stPnZtKCkpKTsKKyAgICAg
ICAgbV9jb2RlQmxvY2stPnNldFN5bWJvbFRhYmxlKG1fY29kZUJsb2NrLT5zeW1ib2xUYWJsZSgp
LT5jbG9uZUlnbm9yaW5nU3RhY2soKm1fY29kZUJsb2NrLT52bSgpKSk7CiAKICAgICBpZiAobV9l
eHByZXNzaW9uVG9vRGVlcCkKICAgICAgICAgcmV0dXJuIFBhcnNlckVycm9yKFBhcnNlckVycm9y
OjpPdXRPZk1lbW9yeSk7CkBAIC0xMjQsMTcgKzEyNCwyOCBAQCBQYXJzZXJFcnJvciBCeXRlY29k
ZUdlbmVyYXRvcjo6Z2VuZXJhdGUoCiB9CiAKIGJvb2wgQnl0ZWNvZGVHZW5lcmF0b3I6OmFkZFZh
cigKLSAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgQ29uc3RhbnRNb2RlIGNvbnN0YW50TW9k
ZSwgV2F0Y2hNb2RlIHdhdGNoTW9kZSwgUmVnaXN0ZXJJRComIHIwKQorICAgIGNvbnN0IElkZW50
aWZpZXImIGlkZW50LCBDb25zdGFudE1vZGUgY29uc3RhbnRNb2RlLCBWYXJLaW5kIHZhcktpbmQs
IFdhdGNoTW9kZSB3YXRjaE1vZGUsCisgICAgUmVnaXN0ZXJJRComIHIwKQogewogICAgIEFTU0VS
VChzdGF0aWNfY2FzdDxzaXplX3Q+KG1fY29kZUJsb2NrLT5tX251bVZhcnMpID09IG1fY2FsbGVl
UmVnaXN0ZXJzLnNpemUoKSk7CiAgICAgCiAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIo
c3ltYm9sVGFibGUoKS5tX2xvY2spOwotICAgIGludCBpbmRleCA9IHZpcnR1YWxSZWdpc3RlckZv
ckxvY2FsKG1fY2FsbGVlUmVnaXN0ZXJzLnNpemUoKSkub2Zmc2V0KCk7Ci0gICAgU3ltYm9sVGFi
bGVFbnRyeSBuZXdFbnRyeShpbmRleCwgY29uc3RhbnRNb2RlID09IElzQ29uc3RhbnQgPyBSZWFk
T25seSA6IDApOworICAgIFZhck9mZnNldCB2YXJPZmZzZXQ7CisgICAgaWYgKHZhcktpbmQgPT0g
SGVhcFZhcktpbmQpCisgICAgICAgIHZhck9mZnNldCA9IFZhck9mZnNldChIZWFwT2Zmc2V0KG1f
bnVtQ2FwdHVyZWRWYXJpYWJsZXMrKykpOworICAgIGVsc2UgeworICAgICAgICBBU1NFUlQodmFy
S2luZCA9PSBTdGFja1ZhcktpbmQpOworICAgICAgICB2YXJPZmZzZXQgPSBWYXJPZmZzZXQodmly
dHVhbFJlZ2lzdGVyRm9yTG9jYWwobV9jYWxsZWVSZWdpc3RlcnMuc2l6ZSgpKSk7CisgICAgfQor
ICAgIFN5bWJvbFRhYmxlRW50cnkgbmV3RW50cnkodmFyT2Zmc2V0LCBjb25zdGFudE1vZGUgPT0g
SXNDb25zdGFudCA/IFJlYWRPbmx5IDogMCk7CiAgICAgU3ltYm9sVGFibGU6Ok1hcDo6QWRkUmVz
dWx0IHJlc3VsdCA9IHN5bWJvbFRhYmxlKCkuYWRkKGxvY2tlciwgaWRlbnQuaW1wbCgpLCBuZXdF
bnRyeSk7CiAKICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KSB7Ci0gICAgICAgIHIwID0gJnJl
Z2lzdGVyRm9yKHJlc3VsdC5pdGVyYXRvci0+dmFsdWUuZ2V0SW5kZXgoKSk7CisgICAgICAgIFJF
TEVBU0VfQVNTRVJUKHZhcktpbmQgPT0gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS52YXJPZmZzZXQo
KS5raW5kKCkpOworICAgICAgICBpZiAodmFyS2luZCA9PSBIZWFwVmFyS2luZCkKKyAgICAgICAg
ICAgIHIwID0gbnVsbHB0cjsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcjAgPSAmcmVnaXN0
ZXJGb3IocmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS52YXJPZmZzZXQoKSk7CiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICB9CiAgICAgCkBAIC0xNDQsNyArMTU1LDEwIEBAIGJvb2wgQnl0ZWNvZGVH
ZW5lcmF0b3I6OmFkZFZhcigKICAgICAgICAgbV93YXRjaGFibGVWYXJpYWJsZXMuYXBwZW5kKGlk
ZW50KTsKICAgICB9CiAgICAgCi0gICAgcjAgPSBhZGRWYXIoKTsKKyAgICBpZiAodmFyS2luZCA9
PSBIZWFwVmFyS2luZCkKKyAgICAgICAgcjAgPSBudWxscHRyOworICAgIGVsc2UKKyAgICAgICAg
cjAgPSBhZGRWYXIoKTsKICAgICAKICAgICBBU1NFUlQod2F0Y2hNb2RlID09IE5vdFdhdGNoYWJs
ZSB8fCBzdGF0aWNfY2FzdDxzaXplX3Q+KG1fY29kZUJsb2NrLT5tX251bVZhcnMpID09IG1fd2F0
Y2hhYmxlVmFyaWFibGVzLnNpemUoKSk7CiAgICAgCkBAIC0yMTgsNyArMjMyLDYgQEAgQnl0ZWNv
ZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFZNJgogICAgIH0KICAgICBSZWdpc3RlcklE
KiBsb2NhbEFyZ3VtZW50c1JlZ2lzdGVyID0gbnVsbHB0cjsKICAgICBSZWdpc3RlcklEKiBzY3Jh
dGNoID0gYWRkVmFyKCk7Ci0gICAgbV9zeW1ib2xUYWJsZS0+c2V0Q2FwdHVyZVN0YXJ0KHZpcnR1
YWxSZWdpc3RlckZvckxvY2FsKG1fY29kZUJsb2NrLT5tX251bVZhcnMpLm9mZnNldCgpKTsKIAog
ICAgIGlmIChmdW5jdGlvbk5vZGUtPnVzZXNBcmd1bWVudHMoKSB8fCBjb2RlQmxvY2stPnVzZXNF
dmFsKCkpIHsgLy8gTWF5IHJlaWZ5IGFyZ3VtZW50cyBvYmplY3QuCiAgICAgICAgIFJlZ2lzdGVy
SUQqIHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3RlciA9IGFkZFZhcigpOyAvLyBBbm9ueW1vdXMs
IHNvIGl0IGNhbid0IGJlIG1vZGlmaWVkIGJ5IHVzZXIgY29kZS4KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgJ
KHJldmlzaW9uIDE4MDI4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIv
Qnl0ZWNvZGVHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNjE0LDE1ICs2MTQsMTUgQEAg
bmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgLy8gQWRkcyBhIHZhciBzbG90IGFuZCBtYXBzIGl0
IHRvIHRoZSBuYW1lIGlkZW50IGluIHN5bWJvbFRhYmxlKCkuCiAgICAgICAgIGVudW0gV2F0Y2hN
b2RlIHsgSXNXYXRjaGFibGUsIE5vdFdhdGNoYWJsZSB9OwotICAgICAgICBSZWdpc3RlcklEKiBh
ZGRWYXIoY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIENvbnN0YW50TW9kZSBjb25zdGFudE1vZGUs
IFdhdGNoTW9kZSB3YXRjaE1vZGUpCisgICAgICAgIFJlZ2lzdGVySUQqIGFkZFZhcihjb25zdCBJ
ZGVudGlmaWVyJiBpZGVudCwgQ29uc3RhbnRNb2RlIGNvbnN0YW50TW9kZSwgVmFyS2luZCB2YXJL
aW5kLCBXYXRjaE1vZGUgd2F0Y2hNb2RlKQogICAgICAgICB7CiAgICAgICAgICAgICBSZWdpc3Rl
cklEKiBsb2NhbDsKLSAgICAgICAgICAgIGFkZFZhcihpZGVudCwgY29uc3RhbnRNb2RlLCB3YXRj
aE1vZGUsIGxvY2FsKTsKKyAgICAgICAgICAgIGFkZFZhcihpZGVudCwgY29uc3RhbnRNb2RlLCB2
YXJLaW5kLCB3YXRjaE1vZGUsIGxvY2FsKTsKICAgICAgICAgICAgIHJldHVybiBsb2NhbDsKICAg
ICAgICAgfQogCiAgICAgICAgIC8vIERpdHRvLiBSZXR1cm5zIHRydWUgaWYgYSBuZXcgUmVnaXN0
ZXJJRCB3YXMgYWRkZWQsIGZhbHNlIGlmIGEgcHJlLWV4aXN0aW5nIFJlZ2lzdGVySUQgd2FzIHJl
LXVzZWQuCi0gICAgICAgIGJvb2wgYWRkVmFyKGNvbnN0IElkZW50aWZpZXImLCBDb25zdGFudE1v
ZGUsIFdhdGNoTW9kZSwgUmVnaXN0ZXJJRComKTsKKyAgICAgICAgYm9vbCBhZGRWYXIoY29uc3Qg
SWRlbnRpZmllciYsIENvbnN0YW50TW9kZSwgVmFyS2luZCwgV2F0Y2hNb2RlLCBSZWdpc3RlcklE
KiYpOwogICAgICAgICAKICAgICAgICAgLy8gQWRkcyBhbiBhbm9ueW1vdXMgdmFyIHNsb3QuIFRv
IGdpdmUgdGhpcyBzbG90IGEgbmFtZSwgYWRkIGl0IHRvIHN5bWJvbFRhYmxlKCkuCiAgICAgICAg
IFJlZ2lzdGVySUQqIGFkZFZhcigpCkBAIC03NzUsNiArNzc1LDcgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIFZlY3RvcjxJZGVudGlmaWVyLCAxNj4gbV93YXRjaGFibGVWYXJpYWJsZXM7CiAg
ICAgICAgIFNlZ21lbnRlZFZlY3RvcjxSZWdpc3RlcklELCAzMj4gbV9jb25zdGFudFBvb2xSZWdp
c3RlcnM7CiAgICAgICAgIFNlZ21lbnRlZFZlY3RvcjxSZWdpc3RlcklELCAzMj4gbV9jYWxsZWVS
ZWdpc3RlcnM7CisgICAgICAgIHVuc2lnbmVkIG1fbnVtQ2FwdHVyZWRWYXJpYWJsZXM7CiAgICAg
ICAgIFNlZ21lbnRlZFZlY3RvcjxSZWdpc3RlcklELCAzMj4gbV9wYXJhbWV0ZXJzOwogICAgICAg
ICBTZWdtZW50ZWRWZWN0b3I8TGFiZWwsIDMyPiBtX2xhYmVsczsKICAgICAgICAgTGFiZWxTY29w
ZVN0b3JlIG1fbGFiZWxTY29wZXM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Bcmd1bWVudHNNb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQXJndW1lbnRzTW9kZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQXJndW1lbnRzTW9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzkg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBBcmd1bWVudHNNb2RlX2gKKyNkZWZpbmUgQXJndW1lbnRzTW9kZV9oCisKK25hbWVzcGFjZSBK
U0MgeworCitlbnVtIEFyZ3VtZW50c01vZGUgeworICAgIENsb25lZEFyZ3VtZW50c0NyZWF0aW9u
TW9kZSwKKyAgICBGYWtlQXJndW1lbnRWYWx1ZXNDcmVhdGlvbk1vZGUKK307CisKK30gLy8gbmFt
ZXNwYWNlIEpTQworCisjZW5kaWYgLy8gQXJndW1lbnRzTW9kZV9oCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhcHR1cmVkQXJndW1lbnRzT2Zmc2V0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYXB0dXJlZEFyZ3VtZW50c09m
ZnNldC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9D
YXB0dXJlZEFyZ3VtZW50c09mZnNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ2FwdHVyZWRBcmd1bWVudHNPZmZzZXQuaCIKKworbmFt
ZXNwYWNlIEpTQyB7CisKK3ZvaWQgQ2FwdHVyZWRBcmd1bWVudHNPZmZzZXQ6OmR1bXAoUHJpbnRT
dHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBpZiAoISp0aGlzKSB7CisgICAgICAgIG91dC5wcmlu
dCgiY2FwdHVyZWRBcmd1bWVudEludmFsaWQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIG91dC5wcmludCgiY2FwdHVyZWRBcmd1bWVudCIsIG9mZnNldCgpKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhcHR1
cmVkQXJndW1lbnRzT2Zmc2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQ2FwdHVyZWRBcmd1bWVudHNPZmZzZXQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhcHR1cmVkQXJndW1lbnRzT2Zmc2V0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaWZuZGVmIENhcHR1cmVkQXJndW1lbnRzT2Zmc2V0X2gKKyNkZWZp
bmUgQ2FwdHVyZWRBcmd1bWVudHNPZmZzZXRfaAorCisjaW5jbHVkZSAiR2VuZXJpY09mZnNldC5o
IgorI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgSlNDIHsKKworLy8g
VGhpcyBpcyBhbiBvZmZzZXQgaW50byB0aGUgc3BlY2lhbCBhcmd1bWVudHMgb2JqZWN0LCB3aGlj
aCBjYXB0dXJlcyB0aGUgYXJndW1lbnRzIHRvIGEKKy8vIGZ1bmN0aW9uLiBJdCBvbmx5IGNvbWVz
IGludG8gcGxheSBpdCB0aGUgYXJndW1lbnRzIGFyZW4ndCBhbHNvIGxpZnRlZCBpbnRvIHRoZSBh
Y3RpdmF0aW9uLgorLy8gSWYgdGhleSB3ZXJlIHRoZW4gYWNjZXNzZXMgdG8gdGhlIGFyZ3VtZW50
cyB3b3VsZCByZXNvbHZlIHRvIGEgU2NvcGVPZmZzZXQgYW5kIG5vdCBhCisvLyBDYXB0dXJlZEFy
Z3VtZW50c09mZnNldC4KK2NsYXNzIENhcHR1cmVkQXJndW1lbnRzT2Zmc2V0IDogcHVibGljIEdl
bmVyaWNPZmZzZXQ8Q2FwdHVyZWRBcmd1bWVudHNPZmZzZXQ+IHsKK3B1YmxpYzoKKyAgICBDYXB0
dXJlZEFyZ3VtZW50c09mZnNldCgpIHsgfQorICAgIAorICAgIGV4cGxpY2l0IENhcHR1cmVkQXJn
dW1lbnRzT2Zmc2V0KHVuc2lnbmVkIG9mZnNldCkKKyAgICAgICAgOiBHZW5lcmljT2Zmc2V0KG9m
ZnNldCkKKyAgICB7CisgICAgfQorICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNv
bnN0OworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBDYXB0dXJlZEFyZ3Vt
ZW50c09mZnNldF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVj
dEFyZ3VtZW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0RpcmVjdEFyZ3VtZW50cy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjAg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBEaXJlY3RBcmd1bWVudHNfaAorI2RlZmluZSBEaXJlY3RBcmd1bWVudHNfaAorCisjaW5jbHVk
ZSAiSlNPYmplY3QuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKKy8vIFRoaXMgaXMgYW4gQXJndW1l
bnRzLWNsYXNzIG9iamVjdCB0aGF0IHdlIGNyZWF0ZSB3aGVuIHlvdSBzYXkgImFyZ3VtZW50cyIg
aW5zaWRlIGEgZnVuY3Rpb24sCisvLyBhbmQgbm9uZSBvZiB0aGUgYXJndW1lbnRzIGFyZSBjYXB0
dXJlZCBpbiB0aGUgZnVuY3Rpb24ncyBhY3RpdmF0aW9uLiBUaGUgZnVuY3Rpb24gd2lsbCBjb3B5
IGFsbAorLy8gb2YgaXRzIGFyZ3VtZW50cyBpbnRvIHRoaXMgb2JqZWN0LCBhbmQgYWxsIHN1YnNl
cXVlbnQgYWNjZXNzZXMgdG8gdGhlIGFyZ3VtZW50cyB3aWxsIGdvIHRocm91Z2gKKy8vIHRoaXMg
b2JqZWN0IHRoZXJlYWZ0ZXIuIFNwZWNpYWwgc3VwcG9ydCBpcyBpbiBwbGFjZSBmb3IgbWlzY2hl
dmlvdXMgZXZlbnRzIGxpa2UgdGhlIGFyZ3VtZW50cworLy8gYmVpbmcgZGVsZXRlZCAoc29tZXRo
aW5nIGxpa2UgImRlbGV0ZSBhcmd1bWVudHNbMF0iKSBvciByZWNvbmZpZ3VyZWQgKGJyb2FkbHks
IHdlIHNheSBkZWxldGlvbnMKKy8vIGFuZCByZWNvbmZpZ3VyYXRpb25zIG1lYW4gdGhhdCB0aGUg
cmVzcGVjdGl2ZSBhcmd1bWVudCB3YXMgIm92ZXJyaWRkZW4iKS4KKy8vCisvLyBUbyBzcGVlZCBh
bGxvY2F0aW9uLCB0aGlzIG9iamVjdCB3aWxsIGhvbGQgYWxsIG9mIHRoZSBhcmd1bWVudHMgaW4t
cGxhY2UuIFRoZSBhcmd1bWVudHMgYXMgd2VsbAorLy8gYXMgYSB0YWJsZSBvZiBmbGFncyBzYXlp
bmcgd2hpY2ggYXJndW1lbnRzIHdlcmUgb3ZlcnJpZGRlbi4KK2NsYXNzIERpcmVjdEFyZ3VtZW50
cyA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTTm9u
RmluYWxPYmplY3QgQmFzZTsKKworcHJpdmF0ZToKKyAgICBEaXJlY3RBcmd1bWVudHMoVk0mLCBT
dHJ1Y3R1cmUqKTsKKyAgICAKK3B1YmxpYzoKKyAgICBzdGF0aWMgRGlyZWN0QXJndW1lbnRzKiBj
cmVhdGUoVk0mLCBTdHJ1Y3R1cmUqLCBFeGVjU3RhdGUqKTsKKyAgICAKKyAgICBzdGF0aWMgdm9p
ZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgCisgICAgdWludDMy
X3QgbGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChVTkxJ
S0VMWShtX292ZXJyb2RlTGVuZ3RoKSkKKyAgICAgICAgICAgIHJldHVybiBnZXQoZXhlYywgZXhl
Yy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCkudG9VSW50MzIoZXhlYyk7CisgICAgICAgIHJldHVy
biBtX2xlbmd0aDsKKyAgICB9CisgICAgCisgICAgYm9vbCBjYW5HZXRJbmRleFF1aWNrbHkodWlu
dDMyX3QgaSkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBpIDwgbV9sZW5ndGggJiYgIW92
ZXJyaWRlRmxhZ3MoKVtpXTsKKyAgICB9CisgICAgCisgICAgSlNWYWx1ZSBnZXRJbmRleFF1aWNr
bHkodWludDMyX3QgaSkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZ
X0lNUExJQ0FUSU9OKGNhbkdldEluZGV4UXVpY2tseShpKSk7CisgICAgICAgIHJldHVybiBzdG9y
YWdlKClbaV0uZ2V0KCk7CisgICAgfQorICAgIAorICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYg
YXJndW1lbnQoQ2FwdHVyZWRBcmd1bWVudHNPZmZzZXQgb2Zmc2V0KQorICAgIHsKKyAgICAgICAg
QVNTRVJUKG9mZnNldCk7CisgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9O
KG9mZnNldC5vZmZzZXQoKSA8IG1fbGVuZ3RoKTsKKyAgICAgICAgcmV0dXJuIHN0b3JhZ2UoKVtv
ZmZzZXQub2Zmc2V0KCldOworICAgIH0KKyAgICAKKyAgICBERUNMQVJFX0lORk87CisgICAgCisg
ICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3Qq
LCBKU1ZhbHVlIHByb3RvdHlwZSk7CisgICAgCitwcml2YXRlOgorICAgIHN0YXRpYyBib29sIGdl
dE93blByb3BlcnR5U2xvdChKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJv
cGVydHlTbG90Jik7CisgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90QnlJbmRleChK
U09iamVjdCosIEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90
Jik7CisgICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNT
dGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKKyAgICBzdGF0aWMg
dm9pZCBwdXQoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQ
cm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgdm9pZCBwdXRCeUluZGV4KEpTQ2VsbCosIEV4ZWNT
dGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7
CisgICAgc3RhdGljIHZvaWQgZGVsZXRlUHJvcGVydHkoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJv
cGVydHlOYW1lKTsKKyAgICBzdGF0aWMgdm9pZCBkZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlNDZWxs
KiwgRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lKTsKKyAgICBzdGF0aWMgdm9pZCBk
ZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgY29u
c3QgUHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCBzaG91bGRUaHJvdyk7CisgICAgCisgICAgc3Rh
dGljIHB0cmRpZmZfdCBzdG9yYWdlT2Zmc2V0KCkKKyAgICB7CisgICAgICAgIHJldHVybiBXVEY6
OnJvdW5kVXBUb011bHRpcGxlT2Y8c2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPik+KHNpemVv
ZihEaXJlY3RBcmd1bWVudHMpKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIHB0cmRpZmZfdCBv
dmVycmlkZUZsYWdzT2Zmc2V0KHVpbnQzMl90IGxlbmd0aCkKKyAgICB7CisgICAgICAgIHJldHVy
biBzdG9yYWdlT2Zmc2V0KCkgKyBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSAqIGxlbmd0
aDsKKyAgICB9CisgICAgCisgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiBzdG9yYWdlKCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8V3JpdGVCYXJyaWVyPFVua25vd24+Kj4o
Yml0d2lzZV9jYXN0PGNoYXIqPih0aGlzKSArIHN0b3JhZ2VPZmZzZXQoKSk7CisgICAgfQorICAg
IAorICAgIGJvb2wqIG92ZXJyaWRlRmxhZ3MoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGJpdHdp
c2VfY2FzdDxXcml0ZUJhcnJpZXI8VW5rbm93bj4qPihiaXR3aXNlX2Nhc3Q8Y2hhcio+KHRoaXMp
ICsgb3ZlcnJpZGVGbGFnc09mZnNldChtX2xlbmd0aCkpOworICAgIH0KKyAgICAKKyAgICB1aW50
MzJfdCBtX2xlbmd0aDsgLy8gQWx3YXlzIHRoZSBhY3R1YWwgbGVuZ3RoIG9mIGNhcHR1cmVkIGFy
Z3VtZW50cyBhbmQgbmV2ZXIgd2hhdCB3YXMgc3RvcmVkIGludG8gdGhlIGxlbmd0aCBwcm9wZXJ0
eS4KKyAgICBib29sIG1fb3ZlcnJvZGVMZW5ndGg7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MK
KworI2VuZGlmIC8vIERpcmVjdEFyZ3VtZW50c19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0dlbmVyaWNPZmZzZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9HZW5lcmljT2Zmc2V0LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljT2Zmc2V0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwxMTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2lmbmRlZiBHZW5lcmljT2Zmc2V0X2gKKyNkZWZpbmUgR2VuZXJpY09mZnNldF9oCisK
KyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorCituYW1lc3BhY2UgSlNDIHsKKworLy8gQSBt
aXhpbiBmb3IgY3JlYXRpbmcgdGhlIHZhcmlvdXMga2luZHMgb2YgdmFyaWFibGUgb2Zmc2V0cyB0
aGF0IG91ciBlbmdpbmUgc3VwcG9ydHMuCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorY2xhc3MgR2Vu
ZXJpY09mZnNldCB7CitwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludmFsaWRP
ZmZzZXQgPSBVSU5UX01BWDsKKyAgICAKKyAgICBHZW5lcmljT2Zmc2V0KCkKKyAgICAgICAgOiBt
X29mZnNldChpbnZhbGlkT2Zmc2V0KQorICAgIHsKKyAgICB9CisgICAgCisgICAgZXhwbGljaXQg
R2VuZXJpY09mZnNldCh1bnNpZ25lZCBvZmZzZXQpCisgICAgICAgIDogbV9vZmZzZXQob2Zmc2V0
KQorICAgIHsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVy
biBtX29mZnNldCA9PSBpbnZhbGlkT2Zmc2V0OyB9CisgICAgCisgICAgdW5zaWduZWQgb2Zmc2V0
VW5jaGVja2VkKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX29mZnNldDsKKyAgICB9
CisgICAgCisgICAgdW5zaWduZWQgb2Zmc2V0KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VS
VChtX29mZnNldCAhPSBpbnZhbGlkT2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIG1fb2Zmc2V0Owor
ICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgVCYgb3RoZXIpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gbV9vZmZzZXQgPT0gb3RoZXIub2Zmc2V0VW5jaGVja2VkKCk7
CisgICAgfQorICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBUJiBvdGhlcikgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBtX29mZnNldCAhPSBvdGhlci5vZmZzZXRVbmNoZWNrZWQoKTsKKyAg
ICB9CisgICAgYm9vbCBvcGVyYXRvcjwoY29uc3QgVCYgb3RoZXIpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gbV9vZmZzZXQgPCBvdGhlci5vZmZzZXRVbmNoZWNrZWQoKTsKKyAgICB9Cisg
ICAgYm9vbCBvcGVyYXRvcj4oY29uc3QgVCYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gbV9vZmZzZXQgPiBvdGhlci5vZmZzZXRVbmNoZWNrZWQoKTsKKyAgICB9CisgICAgYm9v
bCBvcGVyYXRvcjw9KGNvbnN0IFQmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IG1fb2Zmc2V0IDw9IG90aGVyLm9mZnNldFVuY2hlY2tlZCgpOworICAgIH0KKyAgICBib29sIG9w
ZXJhdG9yPj0oY29uc3QgVCYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9v
ZmZzZXQgPj0gb3RoZXIub2Zmc2V0VW5jaGVja2VkKCk7CisgICAgfQorICAgIAorICAgIFQgb3Bl
cmF0b3IrKGludCB2YWx1ZSkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBUKG9mZnNldCgp
ICsgdmFsdWUpOworICAgIH0KKyAgICBUIG9wZXJhdG9yLShpbnQgdmFsdWUpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gVChvZmZzZXQoKSAtIHZhbHVlKTsKKyAgICB9CisgICAgVCYgb3Bl
cmF0b3IrPShpbnQgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gKnRoaXMgPSAqdGhpcyAr
IHZhbHVlOworICAgIH0KKyAgICBUJiBvcGVyYXRvci09KGludCB2YWx1ZSkKKyAgICB7CisgICAg
ICAgIHJldHVybiAqdGhpcyA9ICp0aGlzIC0gdmFsdWU7CisgICAgfQorICAgIAorcHJpdmF0ZToK
KyAgICB1bnNpZ25lZCBtX29mZnNldDsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5k
aWYgLy8gR2VuZXJpY09mZnNldF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQXJndW1lbnRzSXRlcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQXJndW1lbnRzSXRlcmF0b3IuY3BwCShyZXZpc2lvbiAxODAyODUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FyZ3VtZW50c0l0ZXJhdG9yLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
MywgMjAxNSBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0zMywxMCArMzMsMTggQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNv
bnN0IENsYXNzSW5mbyBKU0FyZ3VtZW50c0l0ZXJhdG9yOjpzX2luZm8gPSB7ICJBcmd1bWVudHNJ
dGVyYXRvciIsICZCYXNlOjpzX2luZm8sIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNBcmd1bWVu
dHNJdGVyYXRvcikgfTsKIAotdm9pZCBKU0FyZ3VtZW50c0l0ZXJhdG9yOjpmaW5pc2hDcmVhdGlv
bihWTSYgdm0sIEFyZ3VtZW50cyogYXJndW1lbnRzKQordm9pZCBKU0FyZ3VtZW50c0l0ZXJhdG9y
OjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIEpTT2JqZWN0KiBhcmd1bWVudHMpCiB7CiAgICAgQmFz
ZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIG1fYXJndW1lbnRzLnNldCh2bSwgdGhpcywgYXJn
dW1lbnRzKTsKIH0KIAorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcmd1bWVudHNGdW5j
SXRlcmF0b3IoRXhlY1N0YXRlKiBleGVjKQoreworICAgIEpTT2JqZWN0KiB0aGlzT2JqID0gZXhl
Yy0+dGhpc1ZhbHVlKCkudG9UaGlzKGV4ZWMsIFN0cmljdE1vZGUpLnRvT2JqZWN0KGV4ZWMpOwor
ICAgIGlmICghdGhpc09iai0+aW5oZXJpdHMoQXJndW1lbnRzOjppbmZvKCkpICYmICF0aGlzT2Jq
LT5pbmhlcml0cyhPdXRPZkJhbmRBcmd1bWVudHM6OmluZm8oKSkpCisgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUodGhyb3dUeXBlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJBdHRlbXB0
ZWQgdG8gdXNlIEFyZ3VtZW50cyBpdGVyYXRvciBvbiBub24tQXJndW1lbnRzIG9iamVjdCIpKSk7
CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU0FyZ3VtZW50c0l0ZXJhdG9yOjpjcmVhdGUo
ZXhlYy0+dm0oKSwgZXhlYy0+Y2FsbGVlKCktPmdsb2JhbE9iamVjdCgpLT5hcmd1bWVudHNJdGVy
YXRvclN0cnVjdHVyZSgpLCB0aGlzT2JqKSk7Cit9CisKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQXJndW1lbnRzSXRlcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FyZ3VtZW50c0l0ZXJhdG9yLmgJKHJldmlzaW9u
IDE4MDI4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJndW1lbnRzSXRl
cmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMywgMjAxNSBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiw3ICsyNiw3IEBACiAjaWZuZGVmIEpTQXJndW1l
bnRzSXRlcmF0b3JfaAogI2RlZmluZSBKU0FyZ3VtZW50c0l0ZXJhdG9yX2gKIAotI2luY2x1ZGUg
IkFyZ3VtZW50cy5oIgorI2luY2x1ZGUgIkpTT2JqZWN0LmgiCiAKIG5hbWVzcGFjZSBKU0Mgewog
CkBAIC00MSw3ICs0MSw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3Jl
YXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3Ry
dWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwogICAgIH0KIAotICAgIHN0YXRpYyBKU0FyZ3VtZW50c0l0
ZXJhdG9yKiBjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQXJndW1lbnRzKiBh
cmd1bWVudHMpCisgICAgc3RhdGljIEpTQXJndW1lbnRzSXRlcmF0b3IqIGNyZWF0ZShWTSYgdm0s
IFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU09iamVjdCogYXJndW1lbnRzKQogICAgIHsKICAgICAg
ICAgSlNBcmd1bWVudHNJdGVyYXRvciogaW5zdGFuY2UgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRl
Q2VsbDxKU0FyZ3VtZW50c0l0ZXJhdG9yPih2bS5oZWFwKSkgSlNBcmd1bWVudHNJdGVyYXRvcih2
bSwgc3RydWN0dXJlKTsKICAgICAgICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKHZtLCBhcmd1
bWVudHMpOwpAQCAtNTAsMTEgKzUwLDExIEBAIHB1YmxpYzoKIAogICAgIGJvb2wgbmV4dChDYWxs
RnJhbWUqIGNhbGxGcmFtZSwgSlNWYWx1ZSYgdmFsdWUpCiAgICAgewotICAgICAgICBpZiAobV9u
ZXh0SW5kZXggPj0gbV9hcmd1bWVudHMtPmxlbmd0aChjYWxsRnJhbWUpKQorICAgICAgICB1bnNp
Z25lZCBsZW5ndGggPQorICAgICAgICAgICAgbV9hcmd1bWVudHMtPmdldChjYWxsRnJhbWUsIGNh
bGxGcmFtZS0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCkudG9VSW50MzIoY2FsbEZyYW1lKTsKKyAg
ICAgICAgaWYgKG1fbmV4dEluZGV4ID49IGxlbmd0aCkKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgdmFsdWUgPSBtX2FyZ3VtZW50cy0+dHJ5R2V0QXJndW1lbnQobV9uZXh0SW5k
ZXgrKyk7Ci0gICAgICAgIGlmICghdmFsdWUpCi0gICAgICAgICAgICB2YWx1ZSA9IGpzVW5kZWZp
bmVkKCk7CisgICAgICAgIHZhbHVlID0gbV9hcmd1bWVudHMtPmdldEluZGV4KGNhbGxGcmFtZSwg
bV9uZXh0SW5kZXgrKyk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApAQCAtNjgsMTIg
KzY4LDE0IEBAIHByaXZhdGU6CiAgICAgewogICAgIH0KIAotICAgIHZvaWQgZmluaXNoQ3JlYXRp
b24oVk0mLCBBcmd1bWVudHMqKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgSlNPYmpl
Y3QqKTsKICAgICAKLSAgICBXcml0ZUJhcnJpZXI8QXJndW1lbnRzPiBtX2FyZ3VtZW50czsKKyAg
ICBXcml0ZUJhcnJpZXI8SlNPYmplY3Q+IG1fYXJndW1lbnRzOwogICAgIHNpemVfdCBtX25leHRJ
bmRleDsKIH07CiAKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJndW1lbnRzRnVuY0l0
ZXJhdG9yKEV4ZWNTdGF0ZSopOworCiB9CiAKICNlbmRpZiAvLyAhZGVmaW5lZChKU0FyZ3VtZW50
c0l0ZXJhdG9yX2gpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21l
bnRlZFZhcmlhYmxlT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmNwcAkocmV2aXNpb24gMTgwMjg1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9i
amVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMiwgMjAxMywgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMzLDMyICszMywzMCBAQAogCiBu
YW1lc3BhY2UgSlNDIHsKIAotaW50IEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3Q6OmZpbmRSZWdp
c3RlckluZGV4KHZvaWQqIHJlZ2lzdGVyQWRkcmVzcykKK1Njb3BlT2Zmc2V0IEpTU2VnbWVudGVk
VmFyaWFibGVPYmplY3Q6OmZpbmRSZWdpc3RlckluZGV4KHZvaWQqIHJlZ2lzdGVyQWRkcmVzcykK
IHsKICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2spOwogICAgIAotICAgIGZv
ciAoaW50IGkgPSBtX3JlZ2lzdGVycy5zaXplKCk7IGktLTspIHsKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSBtX3JlZ2lzdGVycy5zaXplKCk7IGktLTspIHsKICAgICAgICAgaWYgKCZtX3JlZ2lzdGVy
c1tpXSAhPSByZWdpc3RlckFkZHJlc3MpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
cmV0dXJuIGk7CisgICAgICAgIHJldHVybiBTY29wZU9mZnNldChpKTsKICAgICB9CiAgICAgQ1JB
U0goKTsKLSAgICByZXR1cm4gLTE7CisgICAgcmV0dXJuIFNjb3BlT2Zmc2V0KCk7CiB9CiAKLWlu
dCBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0OjphZGRSZWdpc3RlcnMoaW50IG51bWJlck9mUmVn
aXN0ZXJzVG9BZGQpCitTY29wZU9mZnNldCBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0OjphZGRS
ZWdpc3RlcnModW5zaWduZWQgbnVtYmVyT2ZSZWdpc3RlcnNUb0FkZCkKIHsKICAgICBDb25jdXJy
ZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2spOwogICAgIAotICAgIEFTU0VSVChudW1iZXJPZlJl
Z2lzdGVyc1RvQWRkID49IDApOwotICAgIAogICAgIHNpemVfdCBvbGRTaXplID0gbV9yZWdpc3Rl
cnMuc2l6ZSgpOwogICAgIG1fcmVnaXN0ZXJzLmdyb3cob2xkU2l6ZSArIG51bWJlck9mUmVnaXN0
ZXJzVG9BZGQpOwogICAgIAogICAgIGZvciAoc2l6ZV90IGkgPSBudW1iZXJPZlJlZ2lzdGVyc1Rv
QWRkOyBpLS07KQogICAgICAgICBtX3JlZ2lzdGVyc1tvbGRTaXplICsgaV0uc2V0V2l0aG91dFdy
aXRlQmFycmllcihqc1VuZGVmaW5lZCgpKTsKICAgICAKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
aW50PihvbGRTaXplKTsKKyAgICByZXR1cm4gU2NvcGVPZmZzZXQob2xkU2l6ZSk7CiB9CiAKIHZv
aWQgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGws
IFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmgJKHJldmlz
aW9uIDE4MDI4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVk
VmFyaWFibGVPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDEzLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTcsMjQgKzU3LDIz
IEBAIGNsYXNzIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3QgOiBwdWJsaWMKIHB1YmxpYzoKICAg
ICB0eXBlZGVmIEpTU3ltYm9sVGFibGVPYmplY3QgQmFzZTsKIAotICAgIFdyaXRlQmFycmllcjxV
bmtub3duPiYgcmVnaXN0ZXJBdChpbnQgaW5kZXgpIHsgcmV0dXJuIG1fcmVnaXN0ZXJzW2luZGV4
XTsgfQorICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgdmFyaWFibGVBdChTY29wZU9mZnNldCBv
ZmZzZXQpIHsgcmV0dXJuIG1fdmFyaWFibGVzW29mZnNldC5vZmZzZXQoKV07IH0KICAgICAKICAg
ICAvLyBUaGlzIGlzIGEgc2xvdyBtZXRob2QgY2FsbCwgd2hpY2ggc2VhcmNoZXMgdGhlIHJlZ2lz
dGVyIGJhbmsgdG8gZmluZCB0aGUgaW5kZXgKICAgICAvLyBnaXZlbiBhIHBvaW50ZXIuIEl0IHdp
bGwgQ1JBU0goKSBpZiBpdCBkb2VzIG5vdCBmaW5kIHRoZSByZWdpc3Rlci4gT25seSB1c2UgdGhp
cwogICAgIC8vIGluIGRlYnVnIGNvZGUgKGxpa2UgYnl0ZWNvZGUgZHVtcGluZykuCi0gICAgSlNf
RVhQT1JUX1BSSVZBVEUgaW50IGZpbmRSZWdpc3RlckluZGV4KHZvaWQqKTsKKyAgICBKU19FWFBP
UlRfUFJJVkFURSBTY29wZU9mZnNldCBmaW5kUmVnaXN0ZXJJbmRleCh2b2lkKik7CiAgICAgCi0g
ICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiBhc3NlcnRSZWdpc3RlcklzSW5UaGlzT2JqZWN0KFdy
aXRlQmFycmllcjxVbmtub3duPiogcmVnaXN0ZXJQb2ludGVyKQorICAgIFdyaXRlQmFycmllcjxV
bmtub3duPiogYXNzZXJ0VmFyaWFibGVJc0luVGhpc09iamVjdChXcml0ZUJhcnJpZXI8VW5rbm93
bj4qIHZhcmlhYmxlUG9pbnRlcikKICAgICB7Ci0jaWYgIUFTU0VSVF9ESVNBQkxFRAotICAgICAg
ICBmaW5kUmVnaXN0ZXJJbmRleChyZWdpc3RlclBvaW50ZXIpOwotI2VuZGlmCisgICAgICAgIGlm
ICghQVNTRVJUX0RJU0FCTEVEKQorICAgICAgICAgICAgZmluZFJlZ2lzdGVySW5kZXgocmVnaXN0
ZXJQb2ludGVyKTsKICAgICAgICAgcmV0dXJuIHJlZ2lzdGVyUG9pbnRlcjsKICAgICB9CiAgICAg
CiAgICAgLy8gQWRkcyBudW1iZXJPZlJlZ2lzdGVyc1RvQWRkIHJlZ2lzdGVycywgaW5pdGlhbGl6
ZXMgdGhlbSB0byBVbmRlZmluZWQsIGFuZCByZXR1cm5zCiAgICAgLy8gdGhlIGluZGV4IG9mIHRo
ZSBmaXJzdCBvbmUgYWRkZWQuCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgaW50IGFkZFJlZ2lzdGVy
cyhpbnQgbnVtYmVyT2ZSZWdpc3RlcnNUb0FkZCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgU2Nv
cGVPZmZzZXQgYWRkUmVnaXN0ZXJzKHVuc2lnbmVkIG51bWJlck9mUmVnaXN0ZXJzVG9BZGQpOwog
ICAgIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiwgU2xvdFZpc2l0b3ImKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNTeW1ib2xUYWJsZU9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuaAkocmV2aXNpb24gMTgwMjg1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAx
NCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIs
IDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC04MCw3ICs4MCw3IEBAIGlubGluZSBib29sIHN5bWJvbFRh
YmxlR2V0KAogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgU3ltYm9sVGFibGVFbnRyeTo6RmFz
dCBlbnRyeSA9IGl0ZXItPnZhbHVlOwogICAgIEFTU0VSVCghZW50cnkuaXNOdWxsKCkpOwotICAg
IHNsb3Quc2V0VmFsdWUob2JqZWN0LCBlbnRyeS5nZXRBdHRyaWJ1dGVzKCkgfCBEb250RGVsZXRl
LCBvYmplY3QtPnJlZ2lzdGVyQXQoZW50cnkuZ2V0SW5kZXgoKSkuZ2V0KCkpOworICAgIHNsb3Qu
c2V0VmFsdWUob2JqZWN0LCBlbnRyeS5nZXRBdHRyaWJ1dGVzKCkgfCBEb250RGVsZXRlLCBvYmpl
Y3QtPnZhcmlhYmxlQXQoZW50cnkuc2NvcGVPZmZzZXQoKSkuZ2V0KCkpOwogICAgIHJldHVybiB0
cnVlOwogfQogCkBAIC05Niw3ICs5Niw3IEBAIGlubGluZSBib29sIHN5bWJvbFRhYmxlR2V0KAog
ICAgIFN5bWJvbFRhYmxlRW50cnk6OkZhc3QgZW50cnkgPSBpdGVyLT52YWx1ZTsKICAgICBBU1NF
UlQoIWVudHJ5LmlzTnVsbCgpKTsKICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3IoCi0gICAg
ICAgIG9iamVjdC0+cmVnaXN0ZXJBdChlbnRyeS5nZXRJbmRleCgpKS5nZXQoKSwgZW50cnkuZ2V0
QXR0cmlidXRlcygpIHwgRG9udERlbGV0ZSk7CisgICAgICAgIG9iamVjdC0+dmFyaWFibGVBdChl
bnRyeS5zY29wZU9mZnNldCgpKS5nZXQoKSwgZW50cnkuZ2V0QXR0cmlidXRlcygpIHwgRG9udERl
bGV0ZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTExMiw3ICsxMTIsNyBAQCBpbmxpbmUg
Ym9vbCBzeW1ib2xUYWJsZUdldCgKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIFN5bWJvbFRh
YmxlRW50cnk6OkZhc3QgZW50cnkgPSBpdGVyLT52YWx1ZTsKICAgICBBU1NFUlQoIWVudHJ5Lmlz
TnVsbCgpKTsKLSAgICBzbG90LnNldFZhbHVlKG9iamVjdCwgZW50cnkuZ2V0QXR0cmlidXRlcygp
IHwgRG9udERlbGV0ZSwgb2JqZWN0LT5yZWdpc3RlckF0KGVudHJ5LmdldEluZGV4KCkpLmdldCgp
KTsKKyAgICBzbG90LnNldFZhbHVlKG9iamVjdCwgZW50cnkuZ2V0QXR0cmlidXRlcygpIHwgRG9u
dERlbGV0ZSwgb2JqZWN0LT52YXJpYWJsZUF0KGVudHJ5LnNjb3BlT2Zmc2V0KCkpLmdldCgpKTsK
ICAgICBzbG90SXNXcml0ZWFibGUgPSAhZW50cnkuaXNSZWFkT25seSgpOwogICAgIHJldHVybiB0
cnVlOwogfQpAQCAtMTQ3LDcgKzE0Nyw3IEBAIGlubGluZSBib29sIHN5bWJvbFRhYmxlUHV0KAog
ICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEz
NDYwMQogICAgICAgICAgICAgc2V0LT5ub3RpZnlXcml0ZSh2bSwgdmFsdWUsIG9iamVjdCwgcHJv
cGVydHlOYW1lKTsKICAgICAgICAgfQotICAgICAgICByZWcgPSAmb2JqZWN0LT5yZWdpc3RlckF0
KGZhc3RFbnRyeS5nZXRJbmRleCgpKTsKKyAgICAgICAgcmVnID0gJm9iamVjdC0+dmFyaWFibGVB
dChmYXN0RW50cnkuc2NvcGVPZmZzZXQoKSk7CiAgICAgfQogICAgIC8vIEknZCBwcmVmZXIgd2Ug
bm90IGhvbGQgbG9jayB3aGlsZSBleGVjdXRpbmcgYmFycmllcnMsIHNpbmNlIEkgcHJlZmVyIHRv
IHJlc2VydmUKICAgICAvLyB0aGUgcmlnaHQgZm9yIGJhcnJpZXJzIHRvIGJlIGFibGUgdG8gdHJp
Z2dlciBHQy4gQW5kIEkgZG9uJ3Qgd2FudCB0byBob2xkIFZNCkBAIC0xNzUsNyArMTc1LDcgQEAg
aW5saW5lIGJvb2wgc3ltYm9sVGFibGVQdXRXaXRoQXR0cmlidXRlcwogICAgICAgICBpZiAoVmFy
aWFibGVXYXRjaHBvaW50U2V0KiBzZXQgPSBlbnRyeS53YXRjaHBvaW50U2V0KCkpCiAgICAgICAg
ICAgICBzZXQtPm5vdGlmeVdyaXRlKHZtLCB2YWx1ZSwgb2JqZWN0LCBwcm9wZXJ0eU5hbWUpOwog
ICAgICAgICBlbnRyeS5zZXRBdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpOwotICAgICAgICByZWcgPSAm
b2JqZWN0LT5yZWdpc3RlckF0KGVudHJ5LmdldEluZGV4KCkpOworICAgICAgICByZWcgPSAmb2Jq
ZWN0LT52YXJpYWJsZUF0KGVudHJ5LnNjb3BlT2Zmc2V0KCkpOwogICAgIH0KICAgICByZWctPnNl
dCh2bSwgb2JqZWN0LCB2YWx1ZSk7CiAgICAgcmV0dXJuIHRydWU7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9PdXRPZkJhbmRBcmd1bWVudHMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL091dE9mQmFuZEFyZ3VtZW50cy5jcHAJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PdXRPZkJhbmRBcmd1
bWVudHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTI2IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJPdXRPZkJhbmRBcmd1bWVudHMuaCIKKworI2luY2x1ZGUgIkpTQXJndW1lbnRzSXRl
cmF0b3IuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitT
VEFUSUNfQVNTRVJUX0lTX1RSSVZJQUxMWV9ERVNUUlVDVElCTEUoT3V0T2ZCYW5kQXJndW1lbnRz
KTsKKworY29uc3QgQ2xhc3NJbmZvIE91dE9mQmFuZEFyZ3VtZW50czo6c19pbmZvID0geyAiQXJn
dW1lbnRzIiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShPdXRPZkJhbmRB
cmd1bWVudHMpIH07CisKK091dE9mQmFuZEFyZ3VtZW50czo6T3V0T2ZCYW5kQXJndW1lbnRzKFZN
JiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUsIG51
bGxwdHIpCit7Cit9CisKK091dE9mQmFuZEFyZ3VtZW50cyogT3V0T2ZCYW5kQXJndW1lbnRzOjpj
cmVhdGVFbXB0eShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCit7CisgICAg
T3V0T2ZCYW5kQXJndW1lbnRzKiByZXN1bHQgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxP
dXRPZkJhbmRBcmd1bWVudHM+KHZtLmhlYXApKQorICAgICAgICBPdXRPZkJhbmRBcmd1bWVudHMo
dm0sIGdsb2JhbE9iamVjdC0+b3V0T2ZCYW5kQXJndW1lbnRzU3RydWN0dXJlKCkpOworICAgIHJl
c3VsdC0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK091dE9m
QmFuZEFyZ3VtZW50cyogT3V0T2ZCYW5kQXJndW1lbnRzOjpjcmVhdGVFbXB0eShFeGVjU3RhdGUq
IGV4ZWMpCit7CisgICAgLy8gTkIuIFNvbWUgY2xpZW50cyBtaWdodCBleHBlY3QgdGhhdCB0aGUg
Z2xvYmFsIG9iamVjdCBvZiBvZiB0aGlzIG9iamVjdCBpcyB0aGUgZ2xvYmFsIG9iamVjdAorICAg
IC8vIG9mIHRoZSBjYWxsZWUuIFdlIGRvbid0IGRvIHRoaXMgZm9yIG5vdywgYnV0IG1heWJlIHdl
IHNob3VsZC4KKyAgICByZXR1cm4gY3JlYXRlRW1wdHkoZXhlYy0+dm0oKSwgZXhlYy0+bGV4aWNh
bEdsb2JhbE9iamVjdCgpKTsKK30KKworT3V0T2ZCYW5kQXJndW1lbnRzKiBPdXRPZkJhbmRBcmd1
bWVudHM6OmNyZWF0ZVdpdGhJbmxpbmVGcmFtZShFeGVjU3RhdGUqIG15RnJhbWUsIEV4ZWNTdGF0
ZSogdGFyZ2V0RnJhbWUsIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lLCBBcmd1bWVu
dHNNb2RlIG1vZGUpCit7CisgICAgVk0mIHZtID0gbXlGcmFtZS0+dm0oKTsKKyAgICAKKyAgICBK
U0Z1bmN0aW9uKiBjYWxsZWU7CisgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlOwor
ICAgIAorICAgIGlmIChpbmxpbmVDYWxsRnJhbWUpIHsKKyAgICAgICAgY2FsbGVlID0ganNDYXN0
PEpTRnVuY3Rpb24qPihpbmxpbmVDYWxsRnJhbWUtPmNhbGxlZVJlY292ZXJ5LnJlY292ZXIodGFy
Z2V0RnJhbWUpKTsKKyAgICAgICAgZXhlY3V0YWJsZSA9IGpzQ2FzdDxGdW5jdGlvbkV4ZWN1dGFi
bGUqPihpbmxpbmVDYWxsRnJhbWUtPmV4ZWN1dGFibGUuZ2V0KCkpOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIGNhbGxlZSA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4odGFyZ2V0RnJhbWUtPmNhbGxlZSgp
KTsKKyAgICAgICAgZXhlY3V0YWJsZSA9IGpzQ2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPih0YXJn
ZXRGcmFtZS0+Y29kZUJsb2NrKCktPm93bmVyRXhlY3V0YWJsZSgpKTsKKyAgICB9CisgICAgCisg
ICAgLy8gTkIuIEl0J3Mgc29tZXdoYXQgYXJiaXRyYXJ5IHRoYXQgd2UgdGllIHRoZSBzdHJpY3Ru
ZXNzIG9mIHRoaXMgb2JqZWN0IHRvIHRoZSBzdHJpY3RuZXNzIG9mCisgICAgLy8gdGhlIGNhbGxl
ZS4KKyAgICBib29sIGlzU3RyaWN0TW9kZSA9IGV4ZWN1dGFibGUtPmlzU3RyaWN0TW9kZSgpOwor
CisgICAgT3V0T2ZCYW5kQXJndW1lbnRzKiByZXN1bHQgPSBjcmVhdGVFbXB0eShteUZyYW1lKTsK
KyAgICAKKyAgICB1bnNpZ25lZCBsZW5ndGg7CisgICAgc3dpdGNoIChtb2RlKSB7CisgICAgY2Fz
ZSBDbG9uZWRBcmd1bWVudHNDcmVhdGlvbk1vZGU6IHsKKyAgICAgICAgaWYgKGlubGluZUNhbGxG
cmFtZSkgeworICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudFJl
Z2lzdGVyLmlzVmFsaWQoKSkKKyAgICAgICAgICAgICAgICBsZW5ndGggPSBleGVjLT5yKGlubGlu
ZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudFJlZ2lzdGVyKS51bmJveGVkSW50MzIoKTsKKyAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBsZW5ndGggPSBpbmxpbmVDYWxsRnJhbWUtPmFy
Z3VtZW50cy5zaXplKCk7CisgICAgICAgICAgICBsZW5ndGgtLTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbGVuZ3RoOyBpLS07KQorICAgICAgICAgICAgICAg
IHJlc3VsdC0+cHV0RGlyZWN0SW5kZXgobXlGcmFtZSwgaSwgaW5saW5lQ2FsbEZyYW1lLT5hcmd1
bWVudHNbaV0ucmVjb3Zlcih0YXJnZXRGcmFtZSkpOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgbGVuZ3RoID0gdGFyZ2V0RnJhbWUtPmFyZ3VtZW50Q291bnQoKTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbGVuZ3RoOyBpLS07KQorICAgICAgICAg
ICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0SW5kZXgobXlGcmFtZSwgaSwgdGFyZ2V0RnJhbWUtPnVu
Y2hlY2tlZEFyZ3VtZW50KGkpKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9Cisg
ICAgICAgIAorICAgIGNhc2UgRmFrZUFyZ3VtZW50VmFsdWVzQ3JlYXRpb25Nb2RlOiB7CisgICAg
ICAgIGxlbmd0aCA9IDA7CisgICAgICAgIGJyZWFrOworICAgIH0gfQorICAgIAorICAgIHJlc3Vs
dC0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKGxlbmd0
aCkpOworICAgIGlmIChpc1N0cmljdE1vZGUpIHsKKyAgICAgICAgcmVzdWx0LT5wdXREaXJlY3RB
Y2Nlc3NvcihleGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT5jYWxsZWUsIHRoaXNPYmplY3QtPmdsb2Jh
bE9iamVjdCgpLT50aHJvd1R5cGVFcnJvckdldHRlclNldHRlcihleGVjLT52bSgpKSwgRG9udERl
bGV0ZSB8IERvbnRFbnVtIHwgQWNjZXNzb3IpOworICAgICAgICByZXN1bHQtPnB1dERpcmVjdEFj
Y2Vzc29yKGV4ZWMsIHZtLnByb3BlcnR5TmFtZXMtPmNhbGxlZSwgdGhpc09iamVjdC0+Z2xvYmFs
T2JqZWN0KCktPnRocm93VHlwZUVycm9yR2V0dGVyU2V0dGVyKGV4ZWMtPnZtKCkpLCBEb250RGVs
ZXRlIHwgRG9udEVudW0gfCBBY2Nlc3Nvcik7CisgICAgfSBlbHNlCisgICAgICAgIHJlc3VsdC0+
cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5jYWxsZWUsIEpTVmFsdWUoY2FsbGVlKSk7
CisgICAgCisgICAgcmVzdWx0LT5KU0NfTkFUSVZFX0ZVTkNUSU9OKHZtLnByb3BlcnR5TmFtZXMt
Pml0ZXJhdG9yUHJpdmF0ZU5hbWUsIGFyZ3VtZW50c0Z1bmNJdGVyYXRvciwgRG9udEVudW0sIDAp
OworfQorCitPdXRPZkJhbmRBcmd1bWVudHMqIE91dE9mQmFuZEFyZ3VtZW50czo6Y3JlYXRlV2l0
aE1hY2hpbmVGcmFtZShFeGVjU3RhdGUqIG15RnJhbWUsIEV4ZWNTdGF0ZSogdGFyZ2V0RnJhbWUs
IEFyZ3VtZW50c01vZGUgbW9kZSkKK3sKKyAgICByZXR1cm4gY3JlYXRlV2l0aElubGluZUZyYW1l
KG15RnJhbWUsIHRhcmdldEZyYW1lLCBudWxscHRyLCBtb2RlKTsKK30KKworU3RydWN0dXJlKiBP
dXRPZkJhbmRBcmd1bWVudHM6OmNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQoreworICAgIHJldHVybiBTdHJ1Y3R1
cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5
cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL091dE9mQmFuZEFyZ3VtZW50cy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL091dE9mQmFuZEFy
Z3VtZW50cy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
T3V0T2ZCYW5kQXJndW1lbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIE91dE9m
QmFuZEFyZ3VtZW50c19oCisjZGVmaW5lIE91dE9mQmFuZEFyZ3VtZW50c19oCisKKyNpbmNsdWRl
ICJBcmd1bWVudHNNb2RlLmgiCisjaW5jbHVkZSAiSlNPYmplY3QuaCIKKworbmFtZXNwYWNlIEpT
QyB7CisKKy8vIFRoaXMgaXMgYW4gQXJndW1lbnRzLWNsYXNzIG9iamVjdCB0aGF0IHdlIGNyZWF0
ZSB3aGVuIHlvdSBkbyBmdW5jdGlvbi5hcmd1bWVudHMuIEl0IGJlaGF2ZXMKKy8vIGVudGlyZWx5
IGxpa2UgYW4gb3JkaW5hcnkgSmF2YVNjcmlwdCBvYmplY3QuIEFsbCBvZiB0aGUgYXJndW1lbnRz
IHZhbHVlcyBhcmUgc2ltcGx5IGNvcGllZCBmcm9tCisvLyB0aGUgc3RhY2sgKHBvc3NpYmx5IHZp
YSBzb21lIHNvcGhpc3RpY2F0ZWQgVmFsdWVSZWNvdmVyeSdzIGlmIGFuIG9wdGltaXppbmcgY29t
cGlsZXIgaXMgaW4KKy8vIHBsYXkpIGFuZCB0aGUgYXBwcm9wcmlhdGUgcHJvcGVydGllcyBvZiB0
aGUgb2JqZWN0IGFyZSBwb3B1bGF0ZWQuIFRoZSBvbmx5IHJlYXNvbiB3aHkgd2UgbmVlZAorLy8g
YSBzcGVjaWFsIGNsYXNzIGlzIHRvIG1ha2UgdGhlIG9iamVjdCBjbGFpbSB0byBiZSAiQXJndW1l
bnRzIiBmcm9tIGEgdG9TdHJpbmcgc3RhbmRwb2ludC4KKy8vCisvLyBOb3RlIHRoYXQgdGhpcyBj
bGFzcyBkb2VzIGEgYmFkIGpvYiBvZiBiZWluZyBmYXN0LiBUaGF0J3Mgc29tZXdoYXQgaW50ZW50
aW9uYWwuIFdlIGV4cGVjdCB1c2VzCisvLyBvZiBmdW5jdGlvbi5hcmd1bWVudHMgdG8gYmUgcmFy
ZSBvbiB0aGUgbW9kZXJuIHdlYi4gWW91IHdpbGwgZ2V0IHBhcnRpY3VsYXJseSBiYWQgcGVyZm9y
bWFuY2UKKy8vIGlmIHlvdSB1c2UgZnVuY3Rpb24uYXJndW1lbnRzIGluIHN0cmljdCBtb2RlLgor
Y2xhc3MgT3V0T2ZCYW5kQXJndW1lbnRzIDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgeworcHVi
bGljOgorICAgIHR5cGVkZWYgSlNOb25GaW5hbE9iamVjdCBCYXNlOworICAgIAorcHJpdmF0ZToK
KyAgICBPdXRPZkJhbmRBcmd1bWVudHMoVk0mLCBTdHJ1Y3R1cmUqKTsKKworcHVibGljOgorICAg
IHN0YXRpYyBPdXRPZkJhbmRBcmd1bWVudHMqIGNyZWF0ZUVtcHR5KFZNJiwgSlNHbG9iYWxPYmpl
Y3QqKTsKKyAgICBzdGF0aWMgT3V0T2ZCYW5kQXJndW1lbnRzKiBjcmVhdGVFbXB0eShFeGVjU3Rh
dGUqKTsKKyAgICBzdGF0aWMgT3V0T2ZCYW5kQXJndW1lbnRzKiBjcmVhdGVXaXRoSW5saW5lRnJh
bWUoRXhlY1N0YXRlKiBteUZyYW1lLCBFeGVjU3RhdGUqIHRhcmdldEZyYW1lLCBJbmxpbmVDYWxs
RnJhbWUqLCBBcmd1bWVudHNNb2RlKTsKKyAgICBzdGF0aWMgT3V0T2ZCYW5kQXJndW1lbnRzKiBj
cmVhdGVXaXRoTWFjaGluZUZyYW1lKEV4ZWNTdGF0ZSogbXlGcmFtZSwgRXhlY1N0YXRlKiB0YXJn
ZXRGcmFtZSwgQXJndW1lbnRzTW9kZSk7CisgICAgCisgICAgc3RhdGljIFN0cnVjdHVyZSogY3Jl
YXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHByb3RvdHlwZSk7Cisg
ICAgCisgICAgREVDTEFSRV9JTkZPOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRp
ZiAvLyBPdXRPZkJhbmRBcmd1bWVudHNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TY29wZU9mZnNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU2NvcGVPZmZzZXQuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVPZmZzZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNjb3BlT2Zmc2V0LmgiCisKK25hbWVzcGFj
ZSBKU0MgeworCit2b2lkIFNjb3BlT2Zmc2V0OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0
Cit7CisgICAgaWYgKCEqdGhpcykgeworICAgICAgICBvdXQucHJpbnQoInNjb3BlSW52YWxpZCIp
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIG91dC5wcmludCgic2NvcGUiLCBv
ZmZzZXQoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TY29wZU9mZnNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlT2Zmc2V0LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZU9mZnNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2lmbmRlZiBTY29wZU9mZnNldF9oCisjZGVmaW5lIFNjb3BlT2Zmc2V0X2gKKworI2luY2x1
ZGUgIkdlbmVyaWNPZmZzZXQuaCIKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFt
ZXNwYWNlIEpTQyB7CisKKy8vIFRoaXMgaXMgYW4gb2Zmc2V0IGludG8gYSBzY29wZSBvZiBzb21l
IGtpbmQuIEl0IGNvdWxkIGJlIGFuIGFjdGl2YXRpb24gc2NvcGUgb3IgaXQgY291bGQgYmUgYQor
Ly8gZ2xvYmFsIG9iamVjdC4KK2NsYXNzIFNjb3BlT2Zmc2V0IDogcHVibGljIEdlbmVyaWNPZmZz
ZXQ8U2NvcGVPZmZzZXQ+IHsKK3B1YmxpYzoKKyAgICBTY29wZU9mZnNldCgpIHsgfQorICAgIAor
ICAgIGV4cGxpY2l0IFNjb3BlT2Zmc2V0KHVuc2lnbmVkIG9mZnNldCkKKyAgICAgICAgOiBHZW5l
cmljT2Zmc2V0KG9mZnNldCkKKyAgICB7CisgICAgfQorICAgIAorICAgIHZvaWQgZHVtcChQcmlu
dFN0cmVhbSYpIGNvbnN0OworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBT
Y29wZU9mZnNldF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3Bl
ZEFyZ3VtZW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1Njb3BlZEFyZ3VtZW50cy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5NSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IFNjb3BlZEFyZ3VtZW50c19oCisjZGVmaW5lIFNjb3BlZEFyZ3VtZW50c19oCisKKyNpbmNsdWRl
ICJKU09iamVjdC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworLy8gVGhpcyBpcyBhbiBBcmd1bWVu
dHMtY2xhc3Mgb2JqZWN0IHRoYXQgd2UgY3JlYXRlIHdoZW4geW91IHNheSAiYXJndW1lbnRzIiBp
bnNpZGUgYSBmdW5jdGlvbiwKKy8vIGFuZCBvbmUgb3IgbW9yZSBvZiB0aGUgYXJndW1lbnRzIG1h
eSBiZSBjYXB0dXJlZCBpbiB0aGUgZnVuY3Rpb24ncyBhY3RpdmF0aW9uLiBUaGUgZnVuY3Rpb24K
Ky8vIHdpbGwgY29weSBhbGwgb2YgaXRzIGFyZ3VtZW50cyBpbnRvIHRoZSBhY3RpdmF0aW9uIGFu
ZCB0aGVuIGNyZWF0ZSB0aGlzIG9iamVjdC4gVGhpcyBvYmplY3QKKy8vIHdpbGwgdXNlIHRoZSBz
eW1ib2wgdGFibGUncyBTY29wZWRBcmd1bWVudHNUYWJsZSBhbmQgdGhlIGFjdGl2YXRpb24gdG8g
aGFuZGxlIGFsbCBpbmRleGVkCisvLyBsb29rdXBzLgorY2xhc3MgU2NvcGVkQXJndW1lbnRzIDog
cHVibGljIEpTTm9uRmluYWxPYmplY3QgeworcHVibGljOgorICAgIHR5cGVkZWYgSlNOb25GaW5h
bE9iamVjdCBCYXNlOworCitwcml2YXRlOgorICAgIFNjb3BlZEFyZ3VtZW50cyhWTSYsIFN0cnVj
dHVyZSopOworCitwdWJsaWM6CisgICAgc3RhdGljIFNjb3BlZEFyZ3VtZW50cyogY3JlYXRlKFZN
JiwgU3RydWN0dXJlKiwgU2NvcGVkQXJndW1lbnRzVGFibGUqLCBKU0xleGljYWxFbnZpcm9ubWVu
dCopOworICAgIAorICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZp
c2l0b3ImKTsKKyAgICAKKyAgICB1aW50MzJfdCBsZW5ndGgoRXhlY1N0YXRlKiBleGVjKSBjb25z
dAorICAgIHsKKyAgICAgICAgaWYgKFVOTElLRUxZKG1fb3ZlcnJvZGVMZW5ndGgpKQorICAgICAg
ICAgICAgcmV0dXJuIGdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKS50b1VJ
bnQzMihleGVjKTsKKyAgICAgICAgcmV0dXJuIG1fdGFibGUtPmxlbmd0aCgpOworICAgIH0KKyAg
ICAKKyAgICBib29sIGNhbkdldEluZGV4UXVpY2tseSh1aW50MzJfdCBpKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIGkgPCBtX2xlbmd0aCAmJiAhIW1fdGFibGUtPmdldChpKTsKKyAgICB9
CisgICAgCisgICAgSlNWYWx1ZSBnZXRJbmRleFF1aWNrbHkodWludDMyX3QgaSkgY29uc3QKKyAg
ICB7CisgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGNhbkdldEluZGV4
UXVpY2tseShpKSk7CisgICAgICAgIHJldHVybiBtX3Njb3BlLT5nZXQobV90YWJsZS0+Z2V0KGkp
KTsKKyAgICB9CisKKyAgICBERUNMQVJFX0lORk87CisgICAgCisgICAgc3RhdGljIFN0cnVjdHVy
ZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHByb3RvdHlw
ZSk7CisKK3ByaXZhdGU6CisgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTT2Jq
ZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0
aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwg
dW5zaWduZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgdm9pZCBn
ZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJy
YXkmLCBFbnVtZXJhdGlvbk1vZGUpOworICAgIHN0YXRpYyB2b2lkIHB1dChKU0NlbGwqLCBFeGVj
U3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOworICAgIHN0
YXRpYyB2b2lkIHB1dEJ5SW5kZXgoSlNDZWxsKiwgRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVy
dHlOYW1lLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKKyAgICBzdGF0aWMgdm9pZCBkZWxl
dGVQcm9wZXJ0eShKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUpOworICAgIHN0YXRp
YyB2b2lkIGRlbGV0ZVByb3BlcnR5QnlJbmRleChKU0NlbGwqLCBFeGVjU3RhdGUqLCB1bnNpZ25l
ZCBwcm9wZXJ0eU5hbWUpOworICAgIHN0YXRpYyB2b2lkIGRlZmluZU93blByb3BlcnR5KEpTT2Jq
ZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eURlc2NyaXB0b3Im
LCBib29sIHNob3VsZFRocm93KTsKKyAgICAKKyAgICB2b2lkIG92ZXJyaWRlQXJndW1lbnQoVk0m
IHZtLCB1aW50MzJfdCBpKQorICAgIHsKKyAgICAgICAgbV90YWJsZS5zZXQodm0sIHRoaXMsIG1f
dGFibGUtPnNldCh2bSwgaSwgU2NvcGVPZmZzZXQoKSkpOworICAgIH0KKyAgICAKKyAgICBib29s
IG1fb3ZlcnJvZGVMZW5ndGg7CisgICAgV3JpdGVCYXJyaWVyPFNjb3BlZEFyZ3VtZW50c1RhYmxl
PiBtX3RhYmxlOworICAgIFdyaXRlQmFycmllcjxKU0xleGljYWxFbnZpcm9ubWVudD4gbV9zY29w
ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gU2NvcGVkQXJndW1lbnRz
X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRz
VGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29w
ZWRBcmd1bWVudHNUYWJsZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzVGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDkxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgU2NvcGVkQXJndW1lbnRzVGFibGVfaAorI2RlZmluZSBTY29wZWRBcmd1bWVudHNUYWJs
ZV9oCisKKyNpbmNsdWRlICJKU0NlbGwuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKKy8vIFRoaXMg
Y2xhc3MncyBvbmx5IGpvYiBpcyB0byBob2xkIG9udG8gdGhlIGxpc3Qgb2YgU2NvcGVPZmZzZXRz
IGZvciBlYWNoIGFyZ3VtZW50IHRoYXQgYQorLy8gZnVuY3Rpb24gaGFzLiBNb3N0IG9mIHRoZSB0
aW1lLCB0aGUgQnl0ZWNvZGVHZW5lcmF0b3Igd2lsbCBjcmVhdGUgb25lIG9mIHRoZXNlIGFuZCBp
dCB3aWxsCisvLyBuZXZlciBiZSBtb2RpZmllZCBzdWJzZXF1ZW50bHkuIFRoZXJlIGlzIGEgcmFy
ZSBjYXNlIHdoZXJlIGEgU2NvcGVkQXJndW1lbnRzIG9iamVjdCBpcyBjcmVhdGVkCisvLyBhbmQg
YWxpYXNlcyBvbmUgb2YgdGhlc2UgYW5kIHRoZW4gZGVjaWRlcyB0byBtb2RpZnkgaXQ7IGluIHRo
YXQgY2FzZSB3ZSBkbyBjb3B5LW9uLXdyaXRlLiBUaGlzCisvLyBtYWtlcyBzZW5zZSBiZWNhdXNl
IHN1Y2ggbW9kaWZpY2F0aW9ucyBhcmUgc28gdW5jb21tb24uIFlvdSdkIGhhdmUgdG8gZG8gc29t
ZXRoaW5nIGNyYXp5IGxpa2UKKy8vICJkZWxldGUgYXJndW1lbnRzW2ldIiBvciBzb21lIHZhcmlh
bnQgb2YgZGVmaW5lT3duUHJvcGVydHkuCitjbGFzcyBTY29wZWRBcmd1bWVudHMgOiBwdWJsaWMg
SlNDZWxsIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTQ2VsbCBCYXNlOworICAgIAorICAgIHN0
YXRpYyBjb25zdCBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOworICAgIHN0YXRpYyBjb25z
dCBib29sIGhhc0ltbW9ydGFsU3RydWN0dXJlID0gdHJ1ZTsKKworcHJpdmF0ZToKKyAgICBTY29w
ZWRBcmd1bWVudHNUYWJsZShWTSYpOworICAgIH5TY29wZWRBcmd1bWVudHNUYWJsZSgpOworCitw
dWJsaWM6CisgICAgc3RhdGljIFNjb3BlZEFyZ3VtZW50c1RhYmxlKiBjcmVhdGUoVk0mKTsKKyAg
ICAKKyAgICBTY29wZWRBcmd1bWVudHMqIGNsb25lKFZNJik7CisgICAgCisgICAgdWludDMyX3Qg
bGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9sZW5ndGg7IH0KKyAgICBTY29wZWRBcmd1bWVudHNU
YWJsZSogc2V0TGVuZ3RoKFZNJiwgdWludDMyX3QgbmV3TGVuZ3RoKTsKKyAgICAKKyAgICBTY29w
ZU9mZnNldCBnZXQodWludDMyX3QgaSkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVF9XSVRI
X1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGkgPCBtX2xlbmd0aCk7CisgICAgICAgIHJldHVybiBtX2Fy
Z3VtZW50c1tpXTsKKyAgICB9CisgICAgCisgICAgdm9pZCBsb2NrKCkKKyAgICB7CisgICAgICAg
IG1fbG9ja2VkID0gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgU2NvcGVkQXJndW1lbnRzKiBzZXQo
Vk0mIHZtLCB1aW50MzJfdCBpLCBTY29wZU9mZnNldCB2YWx1ZSkKKyAgICB7CisgICAgICAgIFNj
b3BlZEFyZ3VtZW50cyogcmVzdWx0OworICAgICAgICBpZiAoVU5MSUtFTFkobV9sb2NrZWQpKQor
ICAgICAgICAgICAgcmVzdWx0ID0gY2xvbmUodm0pOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICByZXN1bHQgPSB0aGlzOworICAgICAgICByZXN1bHQtPnNldERpcmVjdChpLCB2YWx1ZSk7Cisg
ICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIERFQ0xBUkVfSU5GTzsKKwor
cHJpdmF0ZToKKyAgICB1aW50MzJfdCBtX2xlbmd0aDsKKyAgICBib29sIG1fbG9ja2VkOyAvLyBC
ZWluZyBsb2NrZWQgbWVhbnMgdGhhdCB0aGVyZSBhcmUgbXVsdGlwbGUgcmVmZXJlbmNlcyB0byB0
aGlzIG9iamVjdCBhbmQgbm9uZSBvZiB0aGVtIGV4cGVjdCB0byBzZWUgdGhlIG90aGVycycgbW9k
aWZpY2F0aW9ucy4gVGhpcyBtZWFucyB0aGF0IG1vZGlmaWNhdGlvbnMgbmVlZCB0byBtYWtlIGEg
Y29weSBmaXJzdC4KKyAgICBzdGQ6OnVuaXF1ZV9wdHI8U2NvcGVPZmZzZXRbXT4gbV9hcmd1bWVu
dHM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIFNjb3BlZEFyZ3VtZW50
c1RhYmxlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFi
bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJv
bFRhYmxlLmNwcAkocmV2aXNpb24gMTgwMjg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU3ltYm9sVGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMzcsMjkg
KzEzNywyNCBAQCB2b2lkIFN5bWJvbFRhYmxlOjpXYXRjaHBvaW50Q2xlYW51cDo6ZmluCiAgICAg
fQogfQogCi1TeW1ib2xUYWJsZSogU3ltYm9sVGFibGU6OmNsb25lQ2FwdHVyZWROYW1lcyhWTSYg
dm0pCitTeW1ib2xUYWJsZSogU3ltYm9sVGFibGU6OmNsb25lSWdub3JpbmdTdGFjayhWTSYgdm0p
CiB7CiAgICAgU3ltYm9sVGFibGUqIHJlc3VsdCA9IFN5bWJvbFRhYmxlOjpjcmVhdGUodm0pOwog
ICAgIAotICAgIHJlc3VsdC0+bV9wYXJhbWV0ZXJDb3VudEluY2x1ZGluZ1RoaXMgPSBtX3BhcmFt
ZXRlckNvdW50SW5jbHVkaW5nVGhpczsKICAgICByZXN1bHQtPm1fdXNlc05vblN0cmljdEV2YWwg
PSBtX3VzZXNOb25TdHJpY3RFdmFsOwogICAgIHJlc3VsdC0+bV9jYXB0dXJlU3RhcnQgPSBtX2Nh
cHR1cmVTdGFydDsKICAgICByZXN1bHQtPm1fY2FwdHVyZUVuZCA9IG1fY2FwdHVyZUVuZDsKIAog
ICAgIGZvciAoYXV0byBpdGVyID0gbV9tYXAuYmVnaW4oKSwgZW5kID0gbV9tYXAuZW5kKCk7IGl0
ZXIgIT0gZW5kOyArK2l0ZXIpIHsKLSAgICAgICAgaWYgKCFpc0NhcHR1cmVkKGl0ZXItPnZhbHVl
LmdldEluZGV4KCkpKQorICAgICAgICBpZiAoaXRlci0+dmFsdWUudmFyT2Zmc2V0KCkuaXNTdGFj
aygpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIHJlc3VsdC0+bV9tYXAuYWRkKAog
ICAgICAgICAgICAgaXRlci0+a2V5LAotICAgICAgICAgICAgU3ltYm9sVGFibGVFbnRyeShpdGVy
LT52YWx1ZS5nZXRJbmRleCgpLCBpdGVyLT52YWx1ZS5nZXRBdHRyaWJ1dGVzKCkpKTsKKyAgICAg
ICAgICAgIFN5bWJvbFRhYmxlRW50cnkoaXRlci0+dmFsdWUudmFyT2Zmc2V0KCksIGl0ZXItPnZh
bHVlLmdldEF0dHJpYnV0ZXMoKSkpOwogICAgIH0KICAgICAKLSAgICBpZiAobV9zbG93QXJndW1l
bnRzKSB7Ci0gICAgICAgIHJlc3VsdC0+bV9zbG93QXJndW1lbnRzID0gc3RkOjptYWtlX3VuaXF1
ZTxTbG93QXJndW1lbnRbXT4ocGFyYW1ldGVyQ291bnQoKSk7Ci0gICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IHBhcmFtZXRlckNvdW50KCk7IGktLTspCi0gICAgICAgICAgICByZXN1bHQtPm1fc2xv
d0FyZ3VtZW50c1tpXSA9IG1fc2xvd0FyZ3VtZW50c1tpXTsKLSAgICB9Ci0KKyAgICByZXN1bHQt
Pm1fYXJndW1lbnRzID0gYXJndW1lbnRzKCk7CisgICAgCiAgICAgaWYgKG1fdHlwZVByb2ZpbGlu
Z1JhcmVEYXRhKSB7CiAgICAgICAgIHJlc3VsdC0+bV90eXBlUHJvZmlsaW5nUmFyZURhdGEgPSBz
dGQ6Om1ha2VfdW5pcXVlPFR5cGVQcm9maWxpbmdSYXJlRGF0YT4oKTsKIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5oCShyZXZpc2lvbiAxODAyODUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwg
MjAxMi0yMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAwNywgMjAwOCwgMjAxMi0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzEsNiArMzEsNyBAQAogCiAjaW5j
bHVkZSAiQ29uY3VycmVudEpJVExvY2suaCIKICNpbmNsdWRlICJKU09iamVjdC5oIgorI2luY2x1
ZGUgIlNjb3BlZEFyZ3VtZW50c1RhYmxlLmgiCiAjaW5jbHVkZSAiVHlwZUxvY2F0aW9uLmgiCiAj
aW5jbHVkZSAiVmFyaWFibGVXYXRjaHBvaW50U2V0LmgiCiAjaW5jbHVkZSA8bWVtb3J5PgpAQCAt
MzksMjQgKzQwLDYgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLXN0cnVjdCBTbG93QXJndW1lbnQg
ewotcHVibGljOgotICAgIGVudW0gU3RhdHVzIHsKLSAgICAgICAgTm9ybWFsID0gMCwKLSAgICAg
ICAgQ2FwdHVyZWQgPSAxLAotICAgICAgICBEZWxldGVkID0gMgotICAgIH07Ci0KLSAgICBTbG93
QXJndW1lbnQoKQotICAgICAgICA6IHN0YXR1cyhOb3JtYWwpCi0gICAgICAgICwgaW5kZXgoMCkK
LSAgICB7Ci0gICAgfQotCi0gICAgU3RhdHVzIHN0YXR1czsKLSAgICBpbnQgaW5kZXg7IC8vIElm
IHN0YXR1cyBpcyAnRGVsZXRlZCcsIGluZGV4IGlzIGJvZ3VzLgotfTsKLQogc3RhdGljIEFMV0FZ
U19JTkxJTkUgaW50IG1pc3NpbmdTeW1ib2xNYXJrZXIoKSB7IHJldHVybiBzdGQ6Om51bWVyaWNf
bGltaXRzPGludD46Om1heCgpOyB9CiAKIC8vIFRoZSBiaXQgdHdpZGRsaW5nIGluIHRoaXMgY2xh
c3MgYXNzdW1lcyB0aGF0IGV2ZXJ5IHJlZ2lzdGVyIGluZGV4IGlzIGEKQEAgLTg2LDYgKzY5LDI4
IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIGludCBtaXNzaW5nU3ltYm9sTWEKIC8vIGNvcHk6ICAg
ICBTeW1ib2xUYWJsZUVudHJ5IC0tPiBGYXRFbnRyeSAtLS0tLV4KIAogc3RydWN0IFN5bWJvbFRh
YmxlRW50cnkgeworcHJpdmF0ZToKKyAgICBzdGF0aWMgVmFyT2Zmc2V0IHZhck9mZnNldEZyb21C
aXRzKGludHB0cl90IGJpdHMpCisgICAgeworICAgICAgICBWYXJLaW5kIGtpbmQ7CisgICAgICAg
IGlmIChiaXRzICYgU3RhY2tGbGFnKQorICAgICAgICAgICAga2luZCA9IFN0YWNrVmFyS2luZDsK
KyAgICAgICAgZWxzZSBpZiAoYml0cyAmIENhcHR1cmVkQXJndW1lbnRGbGFnKQorICAgICAgICAg
ICAga2luZCA9IENhcHR1cmVkQXJndW1lbnRLaW5kOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBraW5kID0gU2NvcGVWYXJLaW5kOworICAgICAgICByZXR1cm4gVmFyT2Zmc2V0Ojphc3NlbWJs
ZShraW5kLCBzdGF0aWNfY2FzdDxpbnQ+KGJpdHMgPj4gRmxhZ0JpdHMpKTsKKyAgICB9CisgICAg
CisgICAgc3RhdGljIFNjb3BlT2Zmc2V0IHNjb3BlT2Zmc2V0RnJvbUJpdHMoaW50cHRyX3QgYml0
cykKKyAgICB7CisgICAgICAgIEFTU0VSVCghKGJpdHMgJiBTdGFja0ZsYWcpKTsKKyAgICAgICAg
QVNTRVJUKCEoYml0cyAmIENhcHR1cmVkQXJndW1lbnRGbGFnKSk7CisgICAgICAgIHJldHVybiBT
Y29wZU9mZnNldChzdGF0aWNfY2FzdDxpbnQ+KGJpdHMgPj4gRmxhZ0JpdHMpKTsKKyAgICB9CisK
K3B1YmxpYzoKKyAgICAKICAgICAvLyBVc2UgdGhlIFN5bWJvbFRhYmxlRW50cnk6OkZhc3QgY2xh
c3MsIGVpdGhlciB2aWEgaW1wbGljaXQgY2FzdCBvciBieSBjYWxsaW5nCiAgICAgLy8gZ2V0RmFz
dCgpLCB3aGVuIHlvdSAoMSkgb25seSBjYXJlIGFib3V0IGlzTnVsbCgpLCBnZXRJbmRleCgpLCBh
bmQgaXNSZWFkT25seSgpLAogICAgIC8vIGFuZCAoMikgeW91IGFyZSBpbiBhIGhvdCBwYXRoIHdo
ZXJlIHlvdSBuZWVkIHRvIG1pbmltaXplIHRoZSBudW1iZXIgb2YgdGltZXMKQEAgLTEwNywxMSAr
MTEyLDE5IEBAIHN0cnVjdCBTeW1ib2xUYWJsZUVudHJ5IHsKICAgICAgICAgICAgIHJldHVybiAh
KG1fYml0cyAmIH5TbGltRmxhZyk7CiAgICAgICAgIH0KIAotICAgICAgICBpbnQgZ2V0SW5kZXgo
KSBjb25zdAorICAgICAgICBWYXJPZmZzZXQgdmFyT2Zmc2V0KCkgY29uc3QKICAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4obV9iaXRzID4+IEZsYWdCaXRzKTsK
KyAgICAgICAgICAgIHJldHVybiB2YXJPZmZzZXRGcm9tQml0cyhtX2JpdHMpOwogICAgICAgICB9
Ci0gICAgCisgICAgICAgIAorICAgICAgICAvLyBBc3NlcnRzIGlmIHRoZSBvZmZzZXQgaXMgYW55
dGhpbmcgYnV0IGEgc2NvcGUgb2Zmc2V0LiBUaGlzIHN0cnVjdHVyZXMgdGhlIGFzc2VydGlvbnMK
KyAgICAgICAgLy8gaW4gYSB3YXkgdGhhdCBtYXkgcmVzdWx0IGluIGJldHRlciBjb2RlLCBldmVu
IGluIHJlbGVhc2UsIHRoYW4gZG9pbmcKKyAgICAgICAgLy8gdmFyT2Zmc2V0KCkuc2NvcGVPZmZz
ZXQoKS4KKyAgICAgICAgU2NvcGVPZmZzZXQgc2NvcGVPZmZzZXQoKSBjb25zdAorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gc2NvcGVPZmZzZXRGcm9tQml0cyhtX2JpdHMpOworICAgICAg
ICB9CisgICAgICAgIAogICAgICAgICBib29sIGlzUmVhZE9ubHkoKSBjb25zdAogICAgICAgICB7
CiAgICAgICAgICAgICByZXR1cm4gbV9iaXRzICYgUmVhZE9ubHlGbGFnOwpAQCAtMTQyLDE4ICsx
NTUsMTggQEAgc3RydWN0IFN5bWJvbFRhYmxlRW50cnkgewogICAgIHsKICAgICB9CiAKLSAgICBT
eW1ib2xUYWJsZUVudHJ5KGludCBpbmRleCkKKyAgICBTeW1ib2xUYWJsZUVudHJ5KFZhck9mZnNl
dCBvZmZzZXQpCiAgICAgICAgIDogbV9iaXRzKFNsaW1GbGFnKQogICAgIHsKLSAgICAgICAgQVNT
RVJUKGlzVmFsaWRJbmRleChpbmRleCkpOwotICAgICAgICBwYWNrKGluZGV4LCBmYWxzZSwgZmFs
c2UpOworICAgICAgICBBU1NFUlQoaXNWYWxpZFZhck9mZnNldChvZmZzZXQpKTsKKyAgICAgICAg
cGFjayhvZmZzZXQsIGZhbHNlLCBmYWxzZSk7CiAgICAgfQogCi0gICAgU3ltYm9sVGFibGVFbnRy
eShpbnQgaW5kZXgsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCisgICAgU3ltYm9sVGFibGVFbnRyeShW
YXJPZmZzZXQgb2Zmc2V0LCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQogICAgICAgICA6IG1fYml0cyhT
bGltRmxhZykKICAgICB7Ci0gICAgICAgIEFTU0VSVChpc1ZhbGlkSW5kZXgoaW5kZXgpKTsKLSAg
ICAgICAgcGFjayhpbmRleCwgYXR0cmlidXRlcyAmIFJlYWRPbmx5LCBhdHRyaWJ1dGVzICYgRG9u
dEVudW0pOworICAgICAgICBBU1NFUlQoaXNWYWxpZFZhck9mZnNldChvZmZzZXQpKTsKKyAgICAg
ICAgcGFjayhvZmZzZXQsIGF0dHJpYnV0ZXMgJiBSZWFkT25seSwgYXR0cmlidXRlcyAmIERvbnRF
bnVtKTsKICAgICB9CiAgICAgCiAgICAgflN5bWJvbFRhYmxlRW50cnkoKQpAQCAtMTgxLDkgKzE5
NCwxNyBAQCBzdHJ1Y3QgU3ltYm9sVGFibGVFbnRyeSB7CiAgICAgICAgIHJldHVybiAhKGJpdHMo
KSAmIH5TbGltRmxhZyk7CiAgICAgfQogCi0gICAgaW50IGdldEluZGV4KCkgY29uc3QKKyAgICBW
YXJPZmZzZXQgdmFyT2Zmc2V0KCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxpbnQ+KGJpdHMoKSA+PiBGbGFnQml0cyk7CisgICAgICAgIHJldHVybiB2YXJPZmZzZXRG
cm9tQml0cyhiaXRzKCkpOworICAgIH0KKyAgICAKKyAgICAvLyBBc3NlcnRzIGlmIHRoZSBvZmZz
ZXQgaXMgYW55dGhpbmcgYnV0IGEgc2NvcGUgb2Zmc2V0LiBUaGlzIHN0cnVjdHVyZXMgdGhlIGFz
c2VydGlvbnMKKyAgICAvLyBpbiBhIHdheSB0aGF0IG1heSByZXN1bHQgaW4gYmV0dGVyIGNvZGUs
IGV2ZW4gaW4gcmVsZWFzZSwgdGhhbiBkb2luZworICAgIC8vIHZhck9mZnNldCgpLnNjb3BlT2Zm
c2V0KCkuCisgICAgU2NvcGVPZmZzZXQgc2NvcGVPZmZzZXQoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHNjb3BlT2Zmc2V0RnJvbUJpdHMoYml0cygpKTsKICAgICB9CiAgICAgCiAgICAg
QUxXQVlTX0lOTElORSBGYXN0IGdldEZhc3QoKSBjb25zdApAQCAtMjA5LDcgKzIzMCw3IEBAIHN0
cnVjdCBTeW1ib2xUYWJsZUVudHJ5IHsKIAogICAgIHZvaWQgc2V0QXR0cmlidXRlcyh1bnNpZ25l
ZCBhdHRyaWJ1dGVzKQogICAgIHsKLSAgICAgICAgcGFjayhnZXRJbmRleCgpLCBhdHRyaWJ1dGVz
ICYgUmVhZE9ubHksIGF0dHJpYnV0ZXMgJiBEb250RW51bSk7CisgICAgICAgIHBhY2sodmFyT2Zm
c2V0KCksIGF0dHJpYnV0ZXMgJiBSZWFkT25seSwgYXR0cmlidXRlcyAmIERvbnRFbnVtKTsKICAg
ICB9CiAKICAgICBib29sIGlzUmVhZE9ubHkoKSBjb25zdApAQCAtMjQyLDcgKzI2Myw5IEBAIHBy
aXZhdGU6CiAgICAgc3RhdGljIGNvbnN0IGludHB0cl90IFJlYWRPbmx5RmxhZyA9IDB4MjsKICAg
ICBzdGF0aWMgY29uc3QgaW50cHRyX3QgRG9udEVudW1GbGFnID0gMHg0OwogICAgIHN0YXRpYyBj
b25zdCBpbnRwdHJfdCBOb3ROdWxsRmxhZyA9IDB4ODsKLSAgICBzdGF0aWMgY29uc3QgaW50cHRy
X3QgRmxhZ0JpdHMgPSA0OworICAgIHN0YXRpYyBjb25zdCBpbnRwdHJfdCBTdGFja0ZsYWcgPSAw
eDEwOworICAgIHN0YXRpYyBjb25zdCBpbnRwdHJfdCBDYXB0dXJlZEFyZ3VtZW50RmxhZyA9IDB4
MjA7CisgICAgc3RhdGljIGNvbnN0IGludHB0cl90IEZsYWdCaXRzID0gNjsKICAgICAKICAgICBj
bGFzcyBGYXRFbnRyeSB7CiAgICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwpAQCAtMzA5
LDIwICszMzIsMzQgQEAgcHJpdmF0ZToKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZnJl
ZUZhdEVudHJ5U2xvdygpOwogCi0gICAgdm9pZCBwYWNrKGludCBpbmRleCwgYm9vbCByZWFkT25s
eSwgYm9vbCBkb250RW51bSkKKyAgICB2b2lkIHBhY2soVmFyT2Zmc2V0IG9mZnNldCwgYm9vbCBy
ZWFkT25seSwgYm9vbCBkb250RW51bSkKICAgICB7CiAgICAgICAgIEFTU0VSVCghaXNGYXQoKSk7
CiAgICAgICAgIGludHB0cl90JiBiaXRzUmVmID0gYml0cygpOwotICAgICAgICBiaXRzUmVmID0g
KHN0YXRpY19jYXN0PGludHB0cl90PihpbmRleCkgPDwgRmxhZ0JpdHMpIHwgTm90TnVsbEZsYWcg
fCBTbGltRmxhZzsKKyAgICAgICAgYml0c1JlZiA9CisgICAgICAgICAgICAoc3RhdGljX2Nhc3Q8
aW50cHRyX3Q+KG9mZnNldC5yYXdPZmZzZXQoKSkgPDwgRmxhZ0JpdHMpIHwgTm90TnVsbEZsYWcg
fCBTbGltRmxhZzsKICAgICAgICAgaWYgKHJlYWRPbmx5KQogICAgICAgICAgICAgYml0c1JlZiB8
PSBSZWFkT25seUZsYWc7CiAgICAgICAgIGlmIChkb250RW51bSkKICAgICAgICAgICAgIGJpdHNS
ZWYgfD0gRG9udEVudW1GbGFnOworICAgICAgICBzd2l0Y2ggKG9mZnNldC5raW5kKCkpIHsKKyAg
ICAgICAgY2FzZSBTY29wZVZhcktpbmQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBTdGFja1ZhcktpbmQ6CisgICAgICAgICAgICBiaXRzUmVmIHw9IFN0YWNrRmxhZzsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENhcHR1cmVkQXJndW1lbnRLaW5kOgorICAgICAg
ICAgICAgYml0c1JlZiB8PSBDYXB0dXJlZEFyZ3VtZW50RmxhZzsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgfQogICAgIAotICAgIGJv
b2wgaXNWYWxpZEluZGV4KGludCBpbmRleCkKKyAgICBzdGF0aWMgYm9vbCBpc1ZhbGlkVmFyT2Zm
c2V0KFZhck9mZnNldCBvZmZzZXQpCiAgICAgewotICAgICAgICByZXR1cm4gKChzdGF0aWNfY2Fz
dDxpbnRwdHJfdD4oaW5kZXgpIDw8IEZsYWdCaXRzKSA+PiBGbGFnQml0cykgPT0gc3RhdGljX2Nh
c3Q8aW50cHRyX3Q+KGluZGV4KTsKKyAgICAgICAgcmV0dXJuICgoc3RhdGljX2Nhc3Q8aW50cHRy
X3Q+KG9mZnNldC5yYXdPZmZzZXQoKSkgPDwgRmxhZ0JpdHMpID4+IEZsYWdCaXRzKSA9PSBzdGF0
aWNfY2FzdDxpbnRwdHJfdD4ob2Zmc2V0LnJhd09mZnNldCgpKTsKICAgICB9CiAKICAgICBpbnRw
dHJfdCBtX2JpdHM7CkBAIC00NDgsNiArNDg1LDQ1IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJu
IGNvbnRhaW5zKGxvY2tlciwga2V5KTsKICAgICB9CiAgICAgCisgICAgLy8gVGhlIHByaW5jaXBs
ZSBiZWhpbmQgU2NvcGVkQXJndW1lbnRzVGFibGUgbW9kaWZpY2F0aW9ucyBpcyB0aGF0IHdlIHdp
bGwgY3JlYXRlIG9uZSBhbmQKKyAgICAvLyBsZWF2ZSBpdCB1bmxvY2tlZCAtIHRoZXJlYnkgYWxs
b3dpbmcgaW4tcGxhY2UgY2hhbmdlcyAtIHVudGlsIHNvbWVvbmUgYXNrcyBmb3IgYSBwb2ludGVy
IHRvCisgICAgLy8gdGhlIHRhYmxlLiBUaGVuLCB3ZSB3aWxsIGxvY2sgaXQuIFRoZW4gYm90aCBv
dXIgZnV0dXJlIGNoYW5nZXMgYW5kIHRoZWlyIGZ1dHVyZSBjaGFuZ2VzCisgICAgLy8gd2lsbCBm
aXJzdCBoYXZlIHRvIG1ha2UgYSBjb3B5LiBUaGlzIGRpc2NpcGxpbmUgbWVhbnMgdGhhdCB1c3Vh
bGx5IHdoZW4gd2UgY3JlYXRlIGEKKyAgICAvLyBTY29wZWRBcmd1bWVudHMgb2JqZWN0LCB3ZSBk
b24ndCBoYXZlIHRvIG1ha2UgYSBjb3B5IG9mIHRoZSBTY29wZWRBcmd1bWVudHNUYWJsZSAtIGlu
c3RlYWQKKyAgICAvLyB3ZSBqdXN0IHRha2UgYSByZWZlcmVuY2UgdG8gb25lIHRoYXQgd2UgYWxy
ZWFkeSBoYXZlLgorICAgIAorICAgIHVpbnQzMl90IGFyZ3VtZW50c0xlbmd0aCgpIGNvbnN0Cisg
ICAgeworICAgICAgICBpZiAoIW1fYXJndW1lbnRzKQorICAgICAgICAgICAgcmV0dXJuIDA7Cisg
ICAgICAgIHJldHVybiBtX2FyZ3VtZW50cy0+bGVuZ3RoKCk7CisgICAgfQorICAgIAorICAgIHZv
aWQgc2V0QXJndW1lbnRzTGVuZ3RoKFZNJiB2bSwgdWludDMyX3QgbGVuZ3RoKQorICAgIHsKKyAg
ICAgICAgaWYgKFVOTElLRUxZKCFtX2FyZ3VtZW50cykpCisgICAgICAgICAgICBtX2FyZ3VtZW50
cy5zZXQodm0sIHRoaXMsIFNjb3BlZEFyZ3VtZW50c1RhYmxlOjpjcmVhdGUodm0pKTsKKyAgICAg
ICAgbV9hcmd1bWVudHMuc2V0KHZtLCB0aGlzLCBtX2FyZ3VtZW50cy0+c2V0TGVuZ3RoKHZtLCBs
ZW5ndGgpKTsKKyAgICB9CisgICAgCisgICAgU2NvcGVPZmZzZXQgYXJndW1lbnRPZmZzZXQodWlu
dDMyX3QgaSkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJ
Q0FUSU9OKG1fYXJndW1lbnRzKTsKKyAgICAgICAgcmV0dXJuIG1fYXJndW1lbnRzLT5nZXQoaSk7
CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0QXJndW1lbnRPZmZzZXQoVk0mIHZtLCB1aW50MzJf
dCBpLCBTY29wZU9mZnNldCBvZmZzZXQpCisgICAgeworICAgICAgICBBU1NFUlRfV0lUSF9TRUNV
UklUWV9JTVBMSUNBVElPTihtX2FyZ3VtZW50cyk7CisgICAgICAgIG1fYXJndW1lbnRzLnNldCh2
bSwgdGhpcywgbV9hcmd1bWVudHMtPnNldCh2bSwgaSwgb2Zmc2V0KSk7CisgICAgfQorICAgIAor
ICAgIFNjb3BlZEFyZ3VtZW50c1RhYmxlKiBhcmd1bWVudHMoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgbV9hcmd1bWVudHMtPmxvY2soKTsKKyAgICAgICAgcmV0dXJuIG1fYXJndW1lbnRzLmdldCgp
OworICAgIH0KKyAgICAKICAgICBHbG9iYWxWYXJpYWJsZUlEIHVuaXF1ZUlERm9yVmFyaWFibGUo
Y29uc3QgQ29uY3VycmVudEpJVExvY2tlciYsIFN0cmluZ0ltcGwqIGtleSwgVk0mIHZtKTsKICAg
ICBHbG9iYWxWYXJpYWJsZUlEIHVuaXF1ZUlERm9yUmVnaXN0ZXIoY29uc3QgQ29uY3VycmVudEpJ
VExvY2tlciYgbG9ja2VyLCBpbnQgcmVnaXN0ZXJJbmRleCwgVk0mIHZtKTsKICAgICBSZWZQdHI8
VHlwZVNldD4gZ2xvYmFsVHlwZVNldEZvclJlZ2lzdGVyKGNvbnN0IENvbmN1cnJlbnRKSVRMb2Nr
ZXImIGxvY2tlciwgaW50IHJlZ2lzdGVySW5kZXgsIFZNJiB2bSk7CkBAIC00NTYsMjggKzUzMiw3
IEBAIHB1YmxpYzoKICAgICBib29sIHVzZXNOb25TdHJpY3RFdmFsKCkgeyByZXR1cm4gbV91c2Vz
Tm9uU3RyaWN0RXZhbDsgfQogICAgIHZvaWQgc2V0VXNlc05vblN0cmljdEV2YWwoYm9vbCB1c2Vz
Tm9uU3RyaWN0RXZhbCkgeyBtX3VzZXNOb25TdHJpY3RFdmFsID0gdXNlc05vblN0cmljdEV2YWw7
IH0KIAotICAgIGludCBjYXB0dXJlU3RhcnQoKSBjb25zdCB7IHJldHVybiBtX2NhcHR1cmVTdGFy
dDsgfQotICAgIHZvaWQgc2V0Q2FwdHVyZVN0YXJ0KGludCBjYXB0dXJlU3RhcnQpIHsgbV9jYXB0
dXJlU3RhcnQgPSBjYXB0dXJlU3RhcnQ7IH0KLQotICAgIGludCBjYXB0dXJlRW5kKCkgY29uc3Qg
eyByZXR1cm4gbV9jYXB0dXJlRW5kOyB9Ci0gICAgdm9pZCBzZXRDYXB0dXJlRW5kKGludCBjYXB0
dXJlRW5kKSB7IG1fY2FwdHVyZUVuZCA9IGNhcHR1cmVFbmQ7IH0KLQotICAgIGludCBjYXB0dXJl
Q291bnQoKSBjb25zdCB7IHJldHVybiAtKG1fY2FwdHVyZUVuZCAtIG1fY2FwdHVyZVN0YXJ0KTsg
fQotICAgIAotICAgIGJvb2wgaXNDYXB0dXJlZChpbnQgb3BlcmFuZCkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBvcGVyYW5kIDw9IGNhcHR1cmVTdGFydCgpICYmIG9wZXJhbmQgPiBjYXB0dXJlRW5k
KCk7Ci0gICAgfQotCi0gICAgaW50IHBhcmFtZXRlckNvdW50KCkgeyByZXR1cm4gbV9wYXJhbWV0
ZXJDb3VudEluY2x1ZGluZ1RoaXMgLSAxOyB9Ci0gICAgaW50IHBhcmFtZXRlckNvdW50SW5jbHVk
aW5nVGhpcygpIHsgcmV0dXJuIG1fcGFyYW1ldGVyQ291bnRJbmNsdWRpbmdUaGlzOyB9Ci0gICAg
dm9pZCBzZXRQYXJhbWV0ZXJDb3VudEluY2x1ZGluZ1RoaXMoaW50IHBhcmFtZXRlckNvdW50SW5j
bHVkaW5nVGhpcykgeyBtX3BhcmFtZXRlckNvdW50SW5jbHVkaW5nVGhpcyA9IHBhcmFtZXRlckNv
dW50SW5jbHVkaW5nVGhpczsgfQotCi0gICAgLy8gMCBpZiB3ZSBkb24ndCBjYXB0dXJlIGFueSBh
cmd1bWVudHM7IHBhcmFtZXRlckNvdW50KCkgaW4gbGVuZ3RoIGlmIHdlIGRvLgotICAgIGNvbnN0
IFNsb3dBcmd1bWVudCogc2xvd0FyZ3VtZW50cygpIHsgcmV0dXJuIG1fc2xvd0FyZ3VtZW50cy5n
ZXQoKTsgfQotICAgIHZvaWQgc2V0U2xvd0FyZ3VtZW50cyhzdGQ6OnVuaXF1ZV9wdHI8U2xvd0Fy
Z3VtZW50W10+IHNsb3dBcmd1bWVudHMpIHsgbV9zbG93QXJndW1lbnRzID0gV1RGOjptb3ZlKHNs
b3dBcmd1bWVudHMpOyB9Ci0gICAgCi0gICAgU3ltYm9sVGFibGUqIGNsb25lQ2FwdHVyZWROYW1l
cyhWTSYpOworICAgIFN5bWJvbFRhYmxlKiBjbG9uZUlnbm9yaW5nU3RhY2soVk0mKTsKIAogICAg
IHZvaWQgcHJlcGFyZUZvclR5cGVQcm9maWxpbmcoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYp
OwogCkBAIC01MTIsMTMgKzU2Nyw5IEBAIHByaXZhdGU6CiAgICAgfTsKICAgICBzdGQ6OnVuaXF1
ZV9wdHI8VHlwZVByb2ZpbGluZ1JhcmVEYXRhPiBtX3R5cGVQcm9maWxpbmdSYXJlRGF0YTsKIAot
ICAgIGludCBtX3BhcmFtZXRlckNvdW50SW5jbHVkaW5nVGhpczsKICAgICBib29sIG1fdXNlc05v
blN0cmljdEV2YWw7Ci0KLSAgICBpbnQgbV9jYXB0dXJlU3RhcnQ7Ci0gICAgaW50IG1fY2FwdHVy
ZUVuZDsKLQotICAgIHN0ZDo6dW5pcXVlX3B0cjxTbG93QXJndW1lbnRbXT4gbV9zbG93QXJndW1l
bnRzOworICAgIAorICAgIFdyaXRlQmFycmllcjxTY29wZWRBcmd1bWVudHNUYWJsZT4gbV9hcmd1
bWVudHM7CiAgICAgCiAgICAgc3RkOjp1bmlxdWVfcHRyPFdhdGNocG9pbnRDbGVhbnVwPiBtX3dh
dGNocG9pbnRDbGVhbnVwOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9W
YXJPZmZzZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1Zhck9mZnNldC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9WYXJPZmZzZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzYgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIlZhck9mZnNldC5oIgorCituYW1lc3BhY2UgSlNDIHsKKwordm9pZCBW
YXJPZmZzZXQ6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKG1f
a2luZCkgeworICAgIGNhc2UgSW52YWxpZFZhcktpbmQ6CisgICAgICAgIG91dC5wcmludCgiaW52
YWxpZCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBTY29wZVZhcktpbmQ6CisgICAgICAg
IG91dC5wcmludChzY29wZU9mZnNldCgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU3Rh
Y2tWYXJLaW5kOgorICAgICAgICBvdXQucHJpbnQoc3RhY2tPZmZzZXQoKSk7CisgICAgICAgIHJl
dHVybjsKKyAgICBjYXNlIENhcHR1cmVkQXJndW1lbnRLaW5kOgorICAgICAgICBvdXQucHJpbnQo
Y2FwdHVyZWRBcmd1bWVudE9mZnNldCgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwor
bmFtZXNwYWNlIFdURiB7CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M7CisKK3ZvaWQgcHJpbnRJbnRl
cm5hbChQcmludFN0cmVhbSYgb3V0LCBWYXJLaW5kIHZhcktpbmQpCit7CisgICAgc3dpdGNoICh2
YXJLaW5kKSB7CisgICAgY2FzZSBJbnZhbGlkVmFyS2luZDoKKyAgICAgICAgb3V0LnByaW50KCJJ
bnZhbGlkIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFNjb3BlVmFyS2luZDoKKyAgICAg
ICAgb3V0LnByaW50KCJTY29wZSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBTdGFja1Zh
cktpbmQ6CisgICAgICAgIG91dC5wcmludCgiU3RhY2siKTsKKyAgICAgICAgcmV0dXJuOworICAg
IGNhc2UgQ2FwdHVyZWRBcmd1bWVudEtpbmQ6CisgICAgICAgIG91dC5wcmludCgiQ2FwdHVyZWRB
cmd1bWVudCIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9WYXJPZmZzZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9WYXJPZmZzZXQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1Zhck9mZnNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMjE0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgVmFyT2Zmc2V0X2gKKyNkZWZpbmUgVmFyT2Zmc2V0X2gKKworI2luY2x1ZGUgIkNh
cHR1cmVkQXJndW1lbnRPZmZzZXQuaCIKKyNpbmNsdWRlICJTY29wZU9mZnNldC5oIgorI2luY2x1
ZGUgIlZpcnR1YWxSZWdpc3Rlci5oIgorCituYW1lc3BhY2UgSlNDIHsKKworZW51bSBWYXJLaW5k
IDogdWludDhfdCB7CisgICAgSW52YWxpZFZhcktpbmQsCisgICAgU2NvcGVWYXJLaW5kLAorICAg
IFN0YWNrVmFyS2luZCwKKyAgICBDYXB0dXJlZEFyZ3VtZW50S2luZAorfTsKKworY2xhc3MgVmFy
T2Zmc2V0IHsKK3B1YmxpYzoKKyAgICBWYXJPZmZzZXQoKQorICAgICAgICA6IG1fa2luZChJbnZh
bGlkVmFyS2luZCkKKyAgICAgICAgLCBtX29mZnNldChVSU5UX01BWCkKKyAgICB7CisgICAgfQor
ICAgIAorICAgIGV4cGxpY2l0IFZhck9mZnNldChWaXJ0dWFsUmVnaXN0ZXIgc3RhY2tPZmZzZXQp
CisgICAgeworICAgICAgICBpZiAoIXN0YWNrT2Zmc2V0LmlzVmFsaWQoKSkgeworICAgICAgICAg
ICAgbV9raW5kID0gSW52YWxpZFZhcktpbmQ7CisgICAgICAgICAgICBtX29mZnNldCA9IFVJTlRf
TUFYOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbV9raW5kID0gU3RhY2tWYXJLaW5k
OworICAgICAgICAgICAgbV9vZmZzZXQgPSBzdGFja09mZnNldC5vZmZzZXQoKTsKKyAgICAgICAg
fQorICAgIH0KKyAgICAKKyAgICBleHBsaWNpdCBWYXJPZmZzZXQoU2NvcGVPZmZzZXQgc2NvcGVP
ZmZzZXQpCisgICAgeworICAgICAgICBpZiAoIXNjb3BlT2Zmc2V0KSB7CisgICAgICAgICAgICBt
X2tpbmQgPSBJbnZhbGlkVmFyS2luZDsKKyAgICAgICAgICAgIG1fb2Zmc2V0ID0gVUlOVF9NQVg7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX2tpbmQgPSBTY29wZVZhcktpbmQ7Cisg
ICAgICAgICAgICBtX29mZnNldCA9IHNjb3BlT2Zmc2V0Lm9mZnNldCgpOworICAgICAgICB9Cisg
ICAgfQorICAgIAorICAgIGV4cGxpY2l0IFZhck9mZnNldChDYXB0dXJlZEFyZ3VtZW50T2Zmc2V0
IGNhcHR1cmVkQXJndW1lbnRPZmZzZXQpCisgICAgeworICAgICAgICBpZiAoIWNhcHR1cmVkQXJn
dW1lbnRPZmZzZXQpIHsKKyAgICAgICAgICAgIG1fa2luZCA9IEludmFsaWRWYXJLaW5kOworICAg
ICAgICAgICAgbV9vZmZzZXQgPSBVSU5UX01BWDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIG1fa2luZCA9IENhcHR1cmVkQXJndW1lbnRLaW5kOworICAgICAgICAgICAgbV9vZmZzZXQg
PSBjYXB0dXJlZEFyZ3VtZW50T2Zmc2V0Lm9mZnNldCgpOworICAgICAgICB9CisgICAgfQorICAg
IAorICAgIHN0YXRpYyBWYXJPZmZzZXQgYXNzZW1ibGUoVmFyS2luZCBraW5kLCB1bnNpZ25lZCBv
ZmZzZXQpCisgICAgeworICAgICAgICBWYXJPZmZzZXQgcmVzdWx0OworICAgICAgICByZXN1bHQu
bV9raW5kID0ga2luZDsKKyAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gb2Zmc2V0OworICAgICAg
ICByZXN1bHQuY2hlY2tTYW5pdHkoKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9Cisg
ICAgCisgICAgYm9vbCBpc1ZhbGlkKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2tp
bmQgIT0gSW52YWxpZFZhcktpbmQ7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3IhKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhaXNWYWxpZCgpOworICAgIH0KKyAgICAKKyAg
ICBWYXJLaW5kIGtpbmQoKSBjb25zdCB7IHJldHVybiBtX2tpbmQ7IH0KKyAgICAKKyAgICBib29s
IGlzU3RhY2soKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fa2luZCA9PSBTdGFja1Zh
cktpbmQ7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNTY29wZSgpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gbV9raW5kID09IFNjb3BlVmFyS2luZDsKKyAgICB9CisgICAgCisgICAgYm9v
bCBpc0NhcHR1cmVkQXJndW1lbnQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fa2lu
ZCA9PSBDYXB0dXJlZEFyZ3VtZW50S2luZDsKKyAgICB9CisgICAgCisgICAgVmlydHVhbFJlZ2lz
dGVyIHN0YWNrT2Zmc2V0VW5jaGVja2VkKCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmICghaXNT
dGFjaygpKQorICAgICAgICAgICAgcmV0dXJuIFZpcnR1YWxSZWdpc3RlcigpOworICAgICAgICBy
ZXR1cm4gVmlydHVhbFJlZ2lzdGVyKG1fb2Zmc2V0KTsKKyAgICB9CisgICAgCisgICAgU2NvcGVP
ZmZzZXQgc2NvcGVPZmZzZXRVbmNoZWNrZWQoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKCFp
c1Njb3BlKCkpCisgICAgICAgICAgICByZXR1cm4gU2NvcGVPZmZzZXQoKTsKKyAgICAgICAgcmV0
dXJuIFNjb3BlT2Zmc2V0KG1fb2Zmc2V0KTsKKyAgICB9CisgICAgCisgICAgQ2FwdHVyZWRBcmd1
bWVudE9mZnNldCBjYXB0dXJlZEFyZ3VtZW50T2Zmc2V0VW5jaGVja2VkKCkgY29uc3QKKyAgICB7
CisgICAgICAgIGlmICghaXNDYXB0dXJlZEFyZ3VtZW50KCkpCisgICAgICAgICAgICByZXR1cm4g
Q2FwdHVyZWRBcmd1bWVudE9mZnNldCgpOworICAgICAgICByZXR1cm4gQ2FwdHVyZWRBcmd1bWVu
dE9mZnNldChtX29mZnNldCk7CisgICAgfQorICAgIAorICAgIFZpcnR1YWxSZWdpc3RlciBzdGFj
a09mZnNldCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaXNTdGFjaygpKTsKKyAgICAg
ICAgcmV0dXJuIFZpcnR1YWxSZWdpc3RlcihtX29mZnNldCk7CisgICAgfQorICAgIAorICAgIFNj
b3BlT2Zmc2V0IHNjb3BlT2Zmc2V0KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc1Nj
b3BlKCkpOworICAgICAgICByZXR1cm4gU2NvcGVPZmZzZXQobV9vZmZzZXQpOworICAgIH0KKyAg
ICAKKyAgICBDYXB0dXJlZEFyZ3VtZW50T2Zmc2V0IGNhcHR1cmVkQXJndW1lbnRPZmZzZXQoKSBj
b25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzQ2FwdHVyZWRBcmd1bWVudCgpKTsKKyAgICAg
ICAgcmV0dXJuIENhcHR1cmVkQXJndW1lbnRPZmZzZXQobV9vZmZzZXQpOworICAgIH0KKyAgICAK
KyAgICB1bnNpZ25lZCByYXdPZmZzZXQoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlz
VmFsaWQoKSk7CisgICAgICAgIHJldHVybiBtX29mZnNldDsKKyAgICB9CisgICAgCisgICAgdm9p
ZCBjaGVja1Nhbml0eSgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoQVNTRVJUX0RJU0FCTEVE
KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgc3dpdGNoIChtX2tpbmQp
IHsKKyAgICAgICAgY2FzZSBJbnZhbGlkVmFyS2luZDoKKyAgICAgICAgICAgIEFTU0VSVChtX29m
ZnNldCA9PSBVSU5UX01BWCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNhc2UgU2Nv
cGVWYXJLaW5kOgorICAgICAgICAgICAgQVNTRVJUKHNjb3BlT2Zmc2V0KCkpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICBjYXNlIFN0YWNrVmFyS2luZDoKKyAgICAgICAgICAgIEFTU0VS
VChzdGFja09mZnNldCgpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBDYXB0
dXJlZEFyZ3VtZW50S2luZDoKKyAgICAgICAgICAgIEFTU0VSVChjYXB0dXJlZEFyZ3VtZW50T2Zm
c2V0KCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IFZhck9mZnNldCYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9r
aW5kID09IG90aGVyLm1fa2luZAorICAgICAgICAgICAgJiYgbV9vZmZzZXQgPT0gb3RoZXIubV9v
ZmZzZXQ7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBWYXJPZmZzZXQm
IG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOwor
ICAgIH0KKyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAKK3By
aXZhdGU6CisgICAgVmFyS2luZCBtX2tpbmQ7CisgICAgdW5zaWduZWQgbV9vZmZzZXQ7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBKU0MKKworbmFtZXNwYWNlIFdURiB7CisKK3ZvaWQgcHJpbnRJbnRl
cm5hbChQcmludFN0cmVhbSYsIEpTQzo6VmFyS2luZCk7CisKK30gLy8gbmFtZXNwYWNlIFdURgor
CisjZW5kaWYgLy8gVmFyT2Zmc2V0X2gKKwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>246976</attachid>
            <date>2015-02-20 10:25:09 -0800</date>
            <delta_ts>2015-02-23 15:53:59 -0800</delta_ts>
            <desc>a bit more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>70719</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIv
Qnl0ZWNvZGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAxODAyODUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTE2LDcgKzExNiw3IEBAIFBhcnNlckVycm9yIEJ5dGVjb2RlR2VuZXJhdG9yOjpnZW5l
cmF0ZSgKICAgICBtX2NvZGVCbG9jay0+c2hyaW5rVG9GaXQoKTsKIAogICAgIGlmIChtX2NvZGVC
bG9jay0+c3ltYm9sVGFibGUoKSAmJiAhbV9jb2RlQmxvY2stPnZtKCktPnR5cGVQcm9maWxlcigp
KQotICAgICAgICBtX2NvZGVCbG9jay0+c2V0U3ltYm9sVGFibGUobV9jb2RlQmxvY2stPnN5bWJv
bFRhYmxlKCktPmNsb25lQ2FwdHVyZWROYW1lcygqbV9jb2RlQmxvY2stPnZtKCkpKTsKKyAgICAg
ICAgbV9jb2RlQmxvY2stPnNldFN5bWJvbFRhYmxlKG1fY29kZUJsb2NrLT5zeW1ib2xUYWJsZSgp
LT5jbG9uZUlnbm9yaW5nU3RhY2soKm1fY29kZUJsb2NrLT52bSgpKSk7CiAKICAgICBpZiAobV9l
eHByZXNzaW9uVG9vRGVlcCkKICAgICAgICAgcmV0dXJuIFBhcnNlckVycm9yKFBhcnNlckVycm9y
OjpPdXRPZk1lbW9yeSk7CkBAIC0xMjQsMTcgKzEyNCwyOCBAQCBQYXJzZXJFcnJvciBCeXRlY29k
ZUdlbmVyYXRvcjo6Z2VuZXJhdGUoCiB9CiAKIGJvb2wgQnl0ZWNvZGVHZW5lcmF0b3I6OmFkZFZh
cigKLSAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgQ29uc3RhbnRNb2RlIGNvbnN0YW50TW9k
ZSwgV2F0Y2hNb2RlIHdhdGNoTW9kZSwgUmVnaXN0ZXJJRComIHIwKQorICAgIGNvbnN0IElkZW50
aWZpZXImIGlkZW50LCBDb25zdGFudE1vZGUgY29uc3RhbnRNb2RlLCBWYXJLaW5kIHZhcktpbmQs
IFdhdGNoTW9kZSB3YXRjaE1vZGUsCisgICAgUmVnaXN0ZXJJRComIHIwKQogewogICAgIEFTU0VS
VChzdGF0aWNfY2FzdDxzaXplX3Q+KG1fY29kZUJsb2NrLT5tX251bVZhcnMpID09IG1fY2FsbGVl
UmVnaXN0ZXJzLnNpemUoKSk7CiAgICAgCiAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIo
c3ltYm9sVGFibGUoKS5tX2xvY2spOwotICAgIGludCBpbmRleCA9IHZpcnR1YWxSZWdpc3RlckZv
ckxvY2FsKG1fY2FsbGVlUmVnaXN0ZXJzLnNpemUoKSkub2Zmc2V0KCk7Ci0gICAgU3ltYm9sVGFi
bGVFbnRyeSBuZXdFbnRyeShpbmRleCwgY29uc3RhbnRNb2RlID09IElzQ29uc3RhbnQgPyBSZWFk
T25seSA6IDApOworICAgIFZhck9mZnNldCB2YXJPZmZzZXQ7CisgICAgaWYgKHZhcktpbmQgPT0g
SGVhcFZhcktpbmQpCisgICAgICAgIHZhck9mZnNldCA9IFZhck9mZnNldChIZWFwT2Zmc2V0KG1f
bnVtQ2FwdHVyZWRWYXJpYWJsZXMrKykpOworICAgIGVsc2UgeworICAgICAgICBBU1NFUlQodmFy
S2luZCA9PSBTdGFja1ZhcktpbmQpOworICAgICAgICB2YXJPZmZzZXQgPSBWYXJPZmZzZXQodmly
dHVhbFJlZ2lzdGVyRm9yTG9jYWwobV9jYWxsZWVSZWdpc3RlcnMuc2l6ZSgpKSk7CisgICAgfQor
ICAgIFN5bWJvbFRhYmxlRW50cnkgbmV3RW50cnkodmFyT2Zmc2V0LCBjb25zdGFudE1vZGUgPT0g
SXNDb25zdGFudCA/IFJlYWRPbmx5IDogMCk7CiAgICAgU3ltYm9sVGFibGU6Ok1hcDo6QWRkUmVz
dWx0IHJlc3VsdCA9IHN5bWJvbFRhYmxlKCkuYWRkKGxvY2tlciwgaWRlbnQuaW1wbCgpLCBuZXdF
bnRyeSk7CiAKICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KSB7Ci0gICAgICAgIHIwID0gJnJl
Z2lzdGVyRm9yKHJlc3VsdC5pdGVyYXRvci0+dmFsdWUuZ2V0SW5kZXgoKSk7CisgICAgICAgIFJF
TEVBU0VfQVNTRVJUKHZhcktpbmQgPT0gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS52YXJPZmZzZXQo
KS5raW5kKCkpOworICAgICAgICBpZiAodmFyS2luZCA9PSBIZWFwVmFyS2luZCkKKyAgICAgICAg
ICAgIHIwID0gbnVsbHB0cjsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcjAgPSAmcmVnaXN0
ZXJGb3IocmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS52YXJPZmZzZXQoKSk7CiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICB9CiAgICAgCkBAIC0xNDQsNyArMTU1LDEwIEBAIGJvb2wgQnl0ZWNvZGVH
ZW5lcmF0b3I6OmFkZFZhcigKICAgICAgICAgbV93YXRjaGFibGVWYXJpYWJsZXMuYXBwZW5kKGlk
ZW50KTsKICAgICB9CiAgICAgCi0gICAgcjAgPSBhZGRWYXIoKTsKKyAgICBpZiAodmFyS2luZCA9
PSBIZWFwVmFyS2luZCkKKyAgICAgICAgcjAgPSBudWxscHRyOworICAgIGVsc2UKKyAgICAgICAg
cjAgPSBhZGRWYXIoKTsKICAgICAKICAgICBBU1NFUlQod2F0Y2hNb2RlID09IE5vdFdhdGNoYWJs
ZSB8fCBzdGF0aWNfY2FzdDxzaXplX3Q+KG1fY29kZUJsb2NrLT5tX251bVZhcnMpID09IG1fd2F0
Y2hhYmxlVmFyaWFibGVzLnNpemUoKSk7CiAgICAgCkBAIC0yMTgsNyArMjMyLDYgQEAgQnl0ZWNv
ZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFZNJgogICAgIH0KICAgICBSZWdpc3RlcklE
KiBsb2NhbEFyZ3VtZW50c1JlZ2lzdGVyID0gbnVsbHB0cjsKICAgICBSZWdpc3RlcklEKiBzY3Jh
dGNoID0gYWRkVmFyKCk7Ci0gICAgbV9zeW1ib2xUYWJsZS0+c2V0Q2FwdHVyZVN0YXJ0KHZpcnR1
YWxSZWdpc3RlckZvckxvY2FsKG1fY29kZUJsb2NrLT5tX251bVZhcnMpLm9mZnNldCgpKTsKIAog
ICAgIGlmIChmdW5jdGlvbk5vZGUtPnVzZXNBcmd1bWVudHMoKSB8fCBjb2RlQmxvY2stPnVzZXNF
dmFsKCkpIHsgLy8gTWF5IHJlaWZ5IGFyZ3VtZW50cyBvYmplY3QuCiAgICAgICAgIFJlZ2lzdGVy
SUQqIHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3RlciA9IGFkZFZhcigpOyAvLyBBbm9ueW1vdXMs
IHNvIGl0IGNhbid0IGJlIG1vZGlmaWVkIGJ5IHVzZXIgY29kZS4KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgJ
KHJldmlzaW9uIDE4MDI4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIv
Qnl0ZWNvZGVHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNjE0LDE1ICs2MTQsMTUgQEAg
bmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgLy8gQWRkcyBhIHZhciBzbG90IGFuZCBtYXBzIGl0
IHRvIHRoZSBuYW1lIGlkZW50IGluIHN5bWJvbFRhYmxlKCkuCiAgICAgICAgIGVudW0gV2F0Y2hN
b2RlIHsgSXNXYXRjaGFibGUsIE5vdFdhdGNoYWJsZSB9OwotICAgICAgICBSZWdpc3RlcklEKiBh
ZGRWYXIoY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIENvbnN0YW50TW9kZSBjb25zdGFudE1vZGUs
IFdhdGNoTW9kZSB3YXRjaE1vZGUpCisgICAgICAgIFJlZ2lzdGVySUQqIGFkZFZhcihjb25zdCBJ
ZGVudGlmaWVyJiBpZGVudCwgQ29uc3RhbnRNb2RlIGNvbnN0YW50TW9kZSwgVmFyS2luZCB2YXJL
aW5kLCBXYXRjaE1vZGUgd2F0Y2hNb2RlKQogICAgICAgICB7CiAgICAgICAgICAgICBSZWdpc3Rl
cklEKiBsb2NhbDsKLSAgICAgICAgICAgIGFkZFZhcihpZGVudCwgY29uc3RhbnRNb2RlLCB3YXRj
aE1vZGUsIGxvY2FsKTsKKyAgICAgICAgICAgIGFkZFZhcihpZGVudCwgY29uc3RhbnRNb2RlLCB2
YXJLaW5kLCB3YXRjaE1vZGUsIGxvY2FsKTsKICAgICAgICAgICAgIHJldHVybiBsb2NhbDsKICAg
ICAgICAgfQogCiAgICAgICAgIC8vIERpdHRvLiBSZXR1cm5zIHRydWUgaWYgYSBuZXcgUmVnaXN0
ZXJJRCB3YXMgYWRkZWQsIGZhbHNlIGlmIGEgcHJlLWV4aXN0aW5nIFJlZ2lzdGVySUQgd2FzIHJl
LXVzZWQuCi0gICAgICAgIGJvb2wgYWRkVmFyKGNvbnN0IElkZW50aWZpZXImLCBDb25zdGFudE1v
ZGUsIFdhdGNoTW9kZSwgUmVnaXN0ZXJJRComKTsKKyAgICAgICAgYm9vbCBhZGRWYXIoY29uc3Qg
SWRlbnRpZmllciYsIENvbnN0YW50TW9kZSwgVmFyS2luZCwgV2F0Y2hNb2RlLCBSZWdpc3RlcklE
KiYpOwogICAgICAgICAKICAgICAgICAgLy8gQWRkcyBhbiBhbm9ueW1vdXMgdmFyIHNsb3QuIFRv
IGdpdmUgdGhpcyBzbG90IGEgbmFtZSwgYWRkIGl0IHRvIHN5bWJvbFRhYmxlKCkuCiAgICAgICAg
IFJlZ2lzdGVySUQqIGFkZFZhcigpCkBAIC03NzUsNiArNzc1LDcgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIFZlY3RvcjxJZGVudGlmaWVyLCAxNj4gbV93YXRjaGFibGVWYXJpYWJsZXM7CiAg
ICAgICAgIFNlZ21lbnRlZFZlY3RvcjxSZWdpc3RlcklELCAzMj4gbV9jb25zdGFudFBvb2xSZWdp
c3RlcnM7CiAgICAgICAgIFNlZ21lbnRlZFZlY3RvcjxSZWdpc3RlcklELCAzMj4gbV9jYWxsZWVS
ZWdpc3RlcnM7CisgICAgICAgIHVuc2lnbmVkIG1fbnVtQ2FwdHVyZWRWYXJpYWJsZXM7CiAgICAg
ICAgIFNlZ21lbnRlZFZlY3RvcjxSZWdpc3RlcklELCAzMj4gbV9wYXJhbWV0ZXJzOwogICAgICAg
ICBTZWdtZW50ZWRWZWN0b3I8TGFiZWwsIDMyPiBtX2xhYmVsczsKICAgICAgICAgTGFiZWxTY29w
ZVN0b3JlIG1fbGFiZWxTY29wZXM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Bcmd1bWVudHNNb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQXJndW1lbnRzTW9kZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQXJndW1lbnRzTW9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzkg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBBcmd1bWVudHNNb2RlX2gKKyNkZWZpbmUgQXJndW1lbnRzTW9kZV9oCisKK25hbWVzcGFjZSBK
U0MgeworCitlbnVtIEFyZ3VtZW50c01vZGUgeworICAgIENsb25lZEFyZ3VtZW50c0NyZWF0aW9u
TW9kZSwKKyAgICBGYWtlQXJndW1lbnRWYWx1ZXNDcmVhdGlvbk1vZGUKK307CisKK30gLy8gbmFt
ZXNwYWNlIEpTQworCisjZW5kaWYgLy8gQXJndW1lbnRzTW9kZV9oCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhcHR1cmVkQXJndW1lbnRzT2Zmc2V0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYXB0dXJlZEFyZ3VtZW50c09m
ZnNldC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9D
YXB0dXJlZEFyZ3VtZW50c09mZnNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ2FwdHVyZWRBcmd1bWVudHNPZmZzZXQuaCIKKworbmFt
ZXNwYWNlIEpTQyB7CisKK3ZvaWQgQ2FwdHVyZWRBcmd1bWVudHNPZmZzZXQ6OmR1bXAoUHJpbnRT
dHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBpZiAoISp0aGlzKSB7CisgICAgICAgIG91dC5wcmlu
dCgiY2FwdHVyZWRBcmd1bWVudEludmFsaWQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIG91dC5wcmludCgiY2FwdHVyZWRBcmd1bWVudCIsIG9mZnNldCgpKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhcHR1
cmVkQXJndW1lbnRzT2Zmc2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQ2FwdHVyZWRBcmd1bWVudHNPZmZzZXQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhcHR1cmVkQXJndW1lbnRzT2Zmc2V0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaWZuZGVmIENhcHR1cmVkQXJndW1lbnRzT2Zmc2V0X2gKKyNkZWZp
bmUgQ2FwdHVyZWRBcmd1bWVudHNPZmZzZXRfaAorCisjaW5jbHVkZSAiR2VuZXJpY09mZnNldC5o
IgorI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgSlNDIHsKKworLy8g
VGhpcyBpcyBhbiBvZmZzZXQgaW50byB0aGUgc3BlY2lhbCBhcmd1bWVudHMgb2JqZWN0LCB3aGlj
aCBjYXB0dXJlcyB0aGUgYXJndW1lbnRzIHRvIGEKKy8vIGZ1bmN0aW9uLiBJdCBvbmx5IGNvbWVz
IGludG8gcGxheSBpdCB0aGUgYXJndW1lbnRzIGFyZW4ndCBhbHNvIGxpZnRlZCBpbnRvIHRoZSBh
Y3RpdmF0aW9uLgorLy8gSWYgdGhleSB3ZXJlIHRoZW4gYWNjZXNzZXMgdG8gdGhlIGFyZ3VtZW50
cyB3b3VsZCByZXNvbHZlIHRvIGEgU2NvcGVPZmZzZXQgYW5kIG5vdCBhCisvLyBDYXB0dXJlZEFy
Z3VtZW50c09mZnNldC4KK2NsYXNzIENhcHR1cmVkQXJndW1lbnRzT2Zmc2V0IDogcHVibGljIEdl
bmVyaWNPZmZzZXQ8Q2FwdHVyZWRBcmd1bWVudHNPZmZzZXQ+IHsKK3B1YmxpYzoKKyAgICBDYXB0
dXJlZEFyZ3VtZW50c09mZnNldCgpIHsgfQorICAgIAorICAgIGV4cGxpY2l0IENhcHR1cmVkQXJn
dW1lbnRzT2Zmc2V0KHVuc2lnbmVkIG9mZnNldCkKKyAgICAgICAgOiBHZW5lcmljT2Zmc2V0KG9m
ZnNldCkKKyAgICB7CisgICAgfQorICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNv
bnN0OworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBDYXB0dXJlZEFyZ3Vt
ZW50c09mZnNldF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVj
dEFyZ3VtZW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0RpcmVjdEFyZ3VtZW50cy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjAg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBEaXJlY3RBcmd1bWVudHNfaAorI2RlZmluZSBEaXJlY3RBcmd1bWVudHNfaAorCisjaW5jbHVk
ZSAiSlNPYmplY3QuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKKy8vIFRoaXMgaXMgYW4gQXJndW1l
bnRzLWNsYXNzIG9iamVjdCB0aGF0IHdlIGNyZWF0ZSB3aGVuIHlvdSBzYXkgImFyZ3VtZW50cyIg
aW5zaWRlIGEgZnVuY3Rpb24sCisvLyBhbmQgbm9uZSBvZiB0aGUgYXJndW1lbnRzIGFyZSBjYXB0
dXJlZCBpbiB0aGUgZnVuY3Rpb24ncyBhY3RpdmF0aW9uLiBUaGUgZnVuY3Rpb24gd2lsbCBjb3B5
IGFsbAorLy8gb2YgaXRzIGFyZ3VtZW50cyBpbnRvIHRoaXMgb2JqZWN0LCBhbmQgYWxsIHN1YnNl
cXVlbnQgYWNjZXNzZXMgdG8gdGhlIGFyZ3VtZW50cyB3aWxsIGdvIHRocm91Z2gKKy8vIHRoaXMg
b2JqZWN0IHRoZXJlYWZ0ZXIuIFNwZWNpYWwgc3VwcG9ydCBpcyBpbiBwbGFjZSBmb3IgbWlzY2hl
dmlvdXMgZXZlbnRzIGxpa2UgdGhlIGFyZ3VtZW50cworLy8gYmVpbmcgZGVsZXRlZCAoc29tZXRo
aW5nIGxpa2UgImRlbGV0ZSBhcmd1bWVudHNbMF0iKSBvciByZWNvbmZpZ3VyZWQgKGJyb2FkbHks
IHdlIHNheSBkZWxldGlvbnMKKy8vIGFuZCByZWNvbmZpZ3VyYXRpb25zIG1lYW4gdGhhdCB0aGUg
cmVzcGVjdGl2ZSBhcmd1bWVudCB3YXMgIm92ZXJyaWRkZW4iKS4KKy8vCisvLyBUbyBzcGVlZCBh
bGxvY2F0aW9uLCB0aGlzIG9iamVjdCB3aWxsIGhvbGQgYWxsIG9mIHRoZSBhcmd1bWVudHMgaW4t
cGxhY2UuIFRoZSBhcmd1bWVudHMgYXMgd2VsbAorLy8gYXMgYSB0YWJsZSBvZiBmbGFncyBzYXlp
bmcgd2hpY2ggYXJndW1lbnRzIHdlcmUgb3ZlcnJpZGRlbi4KK2NsYXNzIERpcmVjdEFyZ3VtZW50
cyA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTTm9u
RmluYWxPYmplY3QgQmFzZTsKKworcHJpdmF0ZToKKyAgICBEaXJlY3RBcmd1bWVudHMoVk0mLCBT
dHJ1Y3R1cmUqKTsKKyAgICAKK3B1YmxpYzoKKyAgICBzdGF0aWMgRGlyZWN0QXJndW1lbnRzKiBj
cmVhdGUoVk0mLCBTdHJ1Y3R1cmUqLCBFeGVjU3RhdGUqKTsKKyAgICAKKyAgICBzdGF0aWMgdm9p
ZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgCisgICAgdWludDMy
X3QgbGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChVTkxJ
S0VMWShtX292ZXJyb2RlTGVuZ3RoKSkKKyAgICAgICAgICAgIHJldHVybiBnZXQoZXhlYywgZXhl
Yy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCkudG9VSW50MzIoZXhlYyk7CisgICAgICAgIHJldHVy
biBtX2xlbmd0aDsKKyAgICB9CisgICAgCisgICAgYm9vbCBjYW5HZXRJbmRleFF1aWNrbHkodWlu
dDMyX3QgaSkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBpIDwgbV9sZW5ndGggJiYgIW92
ZXJyaWRlRmxhZ3MoKVtpXTsKKyAgICB9CisgICAgCisgICAgSlNWYWx1ZSBnZXRJbmRleFF1aWNr
bHkodWludDMyX3QgaSkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZ
X0lNUExJQ0FUSU9OKGNhbkdldEluZGV4UXVpY2tseShpKSk7CisgICAgICAgIHJldHVybiBzdG9y
YWdlKClbaV0uZ2V0KCk7CisgICAgfQorICAgIAorICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYg
YXJndW1lbnQoQ2FwdHVyZWRBcmd1bWVudHNPZmZzZXQgb2Zmc2V0KQorICAgIHsKKyAgICAgICAg
QVNTRVJUKG9mZnNldCk7CisgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9O
KG9mZnNldC5vZmZzZXQoKSA8IG1fbGVuZ3RoKTsKKyAgICAgICAgcmV0dXJuIHN0b3JhZ2UoKVtv
ZmZzZXQub2Zmc2V0KCldOworICAgIH0KKyAgICAKKyAgICBERUNMQVJFX0lORk87CisgICAgCisg
ICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3Qq
LCBKU1ZhbHVlIHByb3RvdHlwZSk7CisgICAgCitwcml2YXRlOgorICAgIHN0YXRpYyBib29sIGdl
dE93blByb3BlcnR5U2xvdChKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJv
cGVydHlTbG90Jik7CisgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90QnlJbmRleChK
U09iamVjdCosIEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90
Jik7CisgICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNT
dGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKKyAgICBzdGF0aWMg
dm9pZCBwdXQoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQ
cm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgdm9pZCBwdXRCeUluZGV4KEpTQ2VsbCosIEV4ZWNT
dGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7
CisgICAgc3RhdGljIHZvaWQgZGVsZXRlUHJvcGVydHkoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJv
cGVydHlOYW1lKTsKKyAgICBzdGF0aWMgdm9pZCBkZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlNDZWxs
KiwgRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lKTsKKyAgICBzdGF0aWMgdm9pZCBk
ZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgY29u
c3QgUHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCBzaG91bGRUaHJvdyk7CisgICAgCisgICAgc3Rh
dGljIHB0cmRpZmZfdCBzdG9yYWdlT2Zmc2V0KCkKKyAgICB7CisgICAgICAgIHJldHVybiBXVEY6
OnJvdW5kVXBUb011bHRpcGxlT2Y8c2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPik+KHNpemVv
ZihEaXJlY3RBcmd1bWVudHMpKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIHB0cmRpZmZfdCBv
dmVycmlkZUZsYWdzT2Zmc2V0KHVpbnQzMl90IGxlbmd0aCkKKyAgICB7CisgICAgICAgIHJldHVy
biBzdG9yYWdlT2Zmc2V0KCkgKyBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSAqIGxlbmd0
aDsKKyAgICB9CisgICAgCisgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiBzdG9yYWdlKCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8V3JpdGVCYXJyaWVyPFVua25vd24+Kj4o
Yml0d2lzZV9jYXN0PGNoYXIqPih0aGlzKSArIHN0b3JhZ2VPZmZzZXQoKSk7CisgICAgfQorICAg
IAorICAgIGJvb2wqIG92ZXJyaWRlRmxhZ3MoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGJpdHdp
c2VfY2FzdDxXcml0ZUJhcnJpZXI8VW5rbm93bj4qPihiaXR3aXNlX2Nhc3Q8Y2hhcio+KHRoaXMp
ICsgb3ZlcnJpZGVGbGFnc09mZnNldChtX2xlbmd0aCkpOworICAgIH0KKyAgICAKKyAgICB1aW50
MzJfdCBtX2xlbmd0aDsgLy8gQWx3YXlzIHRoZSBhY3R1YWwgbGVuZ3RoIG9mIGNhcHR1cmVkIGFy
Z3VtZW50cyBhbmQgbmV2ZXIgd2hhdCB3YXMgc3RvcmVkIGludG8gdGhlIGxlbmd0aCBwcm9wZXJ0
eS4KKyAgICBib29sIG1fb3ZlcnJvZGVMZW5ndGg7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MK
KworI2VuZGlmIC8vIERpcmVjdEFyZ3VtZW50c19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0dlbmVyaWNPZmZzZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9HZW5lcmljT2Zmc2V0LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljT2Zmc2V0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwxMTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2lmbmRlZiBHZW5lcmljT2Zmc2V0X2gKKyNkZWZpbmUgR2VuZXJpY09mZnNldF9oCisK
KyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorCituYW1lc3BhY2UgSlNDIHsKKworLy8gQSBt
aXhpbiBmb3IgY3JlYXRpbmcgdGhlIHZhcmlvdXMga2luZHMgb2YgdmFyaWFibGUgb2Zmc2V0cyB0
aGF0IG91ciBlbmdpbmUgc3VwcG9ydHMuCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorY2xhc3MgR2Vu
ZXJpY09mZnNldCB7CitwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludmFsaWRP
ZmZzZXQgPSBVSU5UX01BWDsKKyAgICAKKyAgICBHZW5lcmljT2Zmc2V0KCkKKyAgICAgICAgOiBt
X29mZnNldChpbnZhbGlkT2Zmc2V0KQorICAgIHsKKyAgICB9CisgICAgCisgICAgZXhwbGljaXQg
R2VuZXJpY09mZnNldCh1bnNpZ25lZCBvZmZzZXQpCisgICAgICAgIDogbV9vZmZzZXQob2Zmc2V0
KQorICAgIHsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVy
biBtX29mZnNldCA9PSBpbnZhbGlkT2Zmc2V0OyB9CisgICAgCisgICAgdW5zaWduZWQgb2Zmc2V0
VW5jaGVja2VkKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX29mZnNldDsKKyAgICB9
CisgICAgCisgICAgdW5zaWduZWQgb2Zmc2V0KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VS
VChtX29mZnNldCAhPSBpbnZhbGlkT2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIG1fb2Zmc2V0Owor
ICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgVCYgb3RoZXIpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gbV9vZmZzZXQgPT0gb3RoZXIub2Zmc2V0VW5jaGVja2VkKCk7
CisgICAgfQorICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBUJiBvdGhlcikgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBtX29mZnNldCAhPSBvdGhlci5vZmZzZXRVbmNoZWNrZWQoKTsKKyAg
ICB9CisgICAgYm9vbCBvcGVyYXRvcjwoY29uc3QgVCYgb3RoZXIpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gbV9vZmZzZXQgPCBvdGhlci5vZmZzZXRVbmNoZWNrZWQoKTsKKyAgICB9Cisg
ICAgYm9vbCBvcGVyYXRvcj4oY29uc3QgVCYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gbV9vZmZzZXQgPiBvdGhlci5vZmZzZXRVbmNoZWNrZWQoKTsKKyAgICB9CisgICAgYm9v
bCBvcGVyYXRvcjw9KGNvbnN0IFQmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IG1fb2Zmc2V0IDw9IG90aGVyLm9mZnNldFVuY2hlY2tlZCgpOworICAgIH0KKyAgICBib29sIG9w
ZXJhdG9yPj0oY29uc3QgVCYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9v
ZmZzZXQgPj0gb3RoZXIub2Zmc2V0VW5jaGVja2VkKCk7CisgICAgfQorICAgIAorICAgIFQgb3Bl
cmF0b3IrKGludCB2YWx1ZSkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBUKG9mZnNldCgp
ICsgdmFsdWUpOworICAgIH0KKyAgICBUIG9wZXJhdG9yLShpbnQgdmFsdWUpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gVChvZmZzZXQoKSAtIHZhbHVlKTsKKyAgICB9CisgICAgVCYgb3Bl
cmF0b3IrPShpbnQgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gKnRoaXMgPSAqdGhpcyAr
IHZhbHVlOworICAgIH0KKyAgICBUJiBvcGVyYXRvci09KGludCB2YWx1ZSkKKyAgICB7CisgICAg
ICAgIHJldHVybiAqdGhpcyA9ICp0aGlzIC0gdmFsdWU7CisgICAgfQorICAgIAorcHJpdmF0ZToK
KyAgICB1bnNpZ25lZCBtX29mZnNldDsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5k
aWYgLy8gR2VuZXJpY09mZnNldF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQXJndW1lbnRzSXRlcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQXJndW1lbnRzSXRlcmF0b3IuY3BwCShyZXZpc2lvbiAxODAyODUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FyZ3VtZW50c0l0ZXJhdG9yLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
MywgMjAxNSBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0zMywxMCArMzMsMTggQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNv
bnN0IENsYXNzSW5mbyBKU0FyZ3VtZW50c0l0ZXJhdG9yOjpzX2luZm8gPSB7ICJBcmd1bWVudHNJ
dGVyYXRvciIsICZCYXNlOjpzX2luZm8sIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNBcmd1bWVu
dHNJdGVyYXRvcikgfTsKIAotdm9pZCBKU0FyZ3VtZW50c0l0ZXJhdG9yOjpmaW5pc2hDcmVhdGlv
bihWTSYgdm0sIEFyZ3VtZW50cyogYXJndW1lbnRzKQordm9pZCBKU0FyZ3VtZW50c0l0ZXJhdG9y
OjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIEpTT2JqZWN0KiBhcmd1bWVudHMpCiB7CiAgICAgQmFz
ZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIG1fYXJndW1lbnRzLnNldCh2bSwgdGhpcywgYXJn
dW1lbnRzKTsKIH0KIAorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcmd1bWVudHNGdW5j
SXRlcmF0b3IoRXhlY1N0YXRlKiBleGVjKQoreworICAgIEpTT2JqZWN0KiB0aGlzT2JqID0gZXhl
Yy0+dGhpc1ZhbHVlKCkudG9UaGlzKGV4ZWMsIFN0cmljdE1vZGUpLnRvT2JqZWN0KGV4ZWMpOwor
ICAgIGlmICghdGhpc09iai0+aW5oZXJpdHMoQXJndW1lbnRzOjppbmZvKCkpICYmICF0aGlzT2Jq
LT5pbmhlcml0cyhPdXRPZkJhbmRBcmd1bWVudHM6OmluZm8oKSkpCisgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUodGhyb3dUeXBlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJBdHRlbXB0
ZWQgdG8gdXNlIEFyZ3VtZW50cyBpdGVyYXRvciBvbiBub24tQXJndW1lbnRzIG9iamVjdCIpKSk7
CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU0FyZ3VtZW50c0l0ZXJhdG9yOjpjcmVhdGUo
ZXhlYy0+dm0oKSwgZXhlYy0+Y2FsbGVlKCktPmdsb2JhbE9iamVjdCgpLT5hcmd1bWVudHNJdGVy
YXRvclN0cnVjdHVyZSgpLCB0aGlzT2JqKSk7Cit9CisKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQXJndW1lbnRzSXRlcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FyZ3VtZW50c0l0ZXJhdG9yLmgJKHJldmlzaW9u
IDE4MDI4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJndW1lbnRzSXRl
cmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMywgMjAxNSBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiw3ICsyNiw3IEBACiAjaWZuZGVmIEpTQXJndW1l
bnRzSXRlcmF0b3JfaAogI2RlZmluZSBKU0FyZ3VtZW50c0l0ZXJhdG9yX2gKIAotI2luY2x1ZGUg
IkFyZ3VtZW50cy5oIgorI2luY2x1ZGUgIkpTT2JqZWN0LmgiCiAKIG5hbWVzcGFjZSBKU0Mgewog
CkBAIC00MSw3ICs0MSw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3Jl
YXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3Ry
dWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwogICAgIH0KIAotICAgIHN0YXRpYyBKU0FyZ3VtZW50c0l0
ZXJhdG9yKiBjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQXJndW1lbnRzKiBh
cmd1bWVudHMpCisgICAgc3RhdGljIEpTQXJndW1lbnRzSXRlcmF0b3IqIGNyZWF0ZShWTSYgdm0s
IFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU09iamVjdCogYXJndW1lbnRzKQogICAgIHsKICAgICAg
ICAgSlNBcmd1bWVudHNJdGVyYXRvciogaW5zdGFuY2UgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRl
Q2VsbDxKU0FyZ3VtZW50c0l0ZXJhdG9yPih2bS5oZWFwKSkgSlNBcmd1bWVudHNJdGVyYXRvcih2
bSwgc3RydWN0dXJlKTsKICAgICAgICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKHZtLCBhcmd1
bWVudHMpOwpAQCAtNTAsMTEgKzUwLDExIEBAIHB1YmxpYzoKIAogICAgIGJvb2wgbmV4dChDYWxs
RnJhbWUqIGNhbGxGcmFtZSwgSlNWYWx1ZSYgdmFsdWUpCiAgICAgewotICAgICAgICBpZiAobV9u
ZXh0SW5kZXggPj0gbV9hcmd1bWVudHMtPmxlbmd0aChjYWxsRnJhbWUpKQorICAgICAgICB1bnNp
Z25lZCBsZW5ndGggPQorICAgICAgICAgICAgbV9hcmd1bWVudHMtPmdldChjYWxsRnJhbWUsIGNh
bGxGcmFtZS0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCkudG9VSW50MzIoY2FsbEZyYW1lKTsKKyAg
ICAgICAgaWYgKG1fbmV4dEluZGV4ID49IGxlbmd0aCkKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgdmFsdWUgPSBtX2FyZ3VtZW50cy0+dHJ5R2V0QXJndW1lbnQobV9uZXh0SW5k
ZXgrKyk7Ci0gICAgICAgIGlmICghdmFsdWUpCi0gICAgICAgICAgICB2YWx1ZSA9IGpzVW5kZWZp
bmVkKCk7CisgICAgICAgIHZhbHVlID0gbV9hcmd1bWVudHMtPmdldEluZGV4KGNhbGxGcmFtZSwg
bV9uZXh0SW5kZXgrKyk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApAQCAtNjgsMTIg
KzY4LDE0IEBAIHByaXZhdGU6CiAgICAgewogICAgIH0KIAotICAgIHZvaWQgZmluaXNoQ3JlYXRp
b24oVk0mLCBBcmd1bWVudHMqKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgSlNPYmpl
Y3QqKTsKICAgICAKLSAgICBXcml0ZUJhcnJpZXI8QXJndW1lbnRzPiBtX2FyZ3VtZW50czsKKyAg
ICBXcml0ZUJhcnJpZXI8SlNPYmplY3Q+IG1fYXJndW1lbnRzOwogICAgIHNpemVfdCBtX25leHRJ
bmRleDsKIH07CiAKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJndW1lbnRzRnVuY0l0
ZXJhdG9yKEV4ZWNTdGF0ZSopOworCiB9CiAKICNlbmRpZiAvLyAhZGVmaW5lZChKU0FyZ3VtZW50
c0l0ZXJhdG9yX2gpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21l
bnRlZFZhcmlhYmxlT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmNwcAkocmV2aXNpb24gMTgwMjg1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9i
amVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMiwgMjAxMywgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMzLDMyICszMywzMCBAQAogCiBu
YW1lc3BhY2UgSlNDIHsKIAotaW50IEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3Q6OmZpbmRSZWdp
c3RlckluZGV4KHZvaWQqIHJlZ2lzdGVyQWRkcmVzcykKK1Njb3BlT2Zmc2V0IEpTU2VnbWVudGVk
VmFyaWFibGVPYmplY3Q6OmZpbmRSZWdpc3RlckluZGV4KHZvaWQqIHJlZ2lzdGVyQWRkcmVzcykK
IHsKICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2spOwogICAgIAotICAgIGZv
ciAoaW50IGkgPSBtX3JlZ2lzdGVycy5zaXplKCk7IGktLTspIHsKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSBtX3JlZ2lzdGVycy5zaXplKCk7IGktLTspIHsKICAgICAgICAgaWYgKCZtX3JlZ2lzdGVy
c1tpXSAhPSByZWdpc3RlckFkZHJlc3MpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
cmV0dXJuIGk7CisgICAgICAgIHJldHVybiBTY29wZU9mZnNldChpKTsKICAgICB9CiAgICAgQ1JB
U0goKTsKLSAgICByZXR1cm4gLTE7CisgICAgcmV0dXJuIFNjb3BlT2Zmc2V0KCk7CiB9CiAKLWlu
dCBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0OjphZGRSZWdpc3RlcnMoaW50IG51bWJlck9mUmVn
aXN0ZXJzVG9BZGQpCitTY29wZU9mZnNldCBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0OjphZGRS
ZWdpc3RlcnModW5zaWduZWQgbnVtYmVyT2ZSZWdpc3RlcnNUb0FkZCkKIHsKICAgICBDb25jdXJy
ZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2spOwogICAgIAotICAgIEFTU0VSVChudW1iZXJPZlJl
Z2lzdGVyc1RvQWRkID49IDApOwotICAgIAogICAgIHNpemVfdCBvbGRTaXplID0gbV9yZWdpc3Rl
cnMuc2l6ZSgpOwogICAgIG1fcmVnaXN0ZXJzLmdyb3cob2xkU2l6ZSArIG51bWJlck9mUmVnaXN0
ZXJzVG9BZGQpOwogICAgIAogICAgIGZvciAoc2l6ZV90IGkgPSBudW1iZXJPZlJlZ2lzdGVyc1Rv
QWRkOyBpLS07KQogICAgICAgICBtX3JlZ2lzdGVyc1tvbGRTaXplICsgaV0uc2V0V2l0aG91dFdy
aXRlQmFycmllcihqc1VuZGVmaW5lZCgpKTsKICAgICAKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
aW50PihvbGRTaXplKTsKKyAgICByZXR1cm4gU2NvcGVPZmZzZXQob2xkU2l6ZSk7CiB9CiAKIHZv
aWQgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGws
IFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmgJKHJldmlz
aW9uIDE4MDI4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVk
VmFyaWFibGVPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDEzLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTcsMjQgKzU3LDIz
IEBAIGNsYXNzIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3QgOiBwdWJsaWMKIHB1YmxpYzoKICAg
ICB0eXBlZGVmIEpTU3ltYm9sVGFibGVPYmplY3QgQmFzZTsKIAotICAgIFdyaXRlQmFycmllcjxV
bmtub3duPiYgcmVnaXN0ZXJBdChpbnQgaW5kZXgpIHsgcmV0dXJuIG1fcmVnaXN0ZXJzW2luZGV4
XTsgfQorICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgdmFyaWFibGVBdChTY29wZU9mZnNldCBv
ZmZzZXQpIHsgcmV0dXJuIG1fdmFyaWFibGVzW29mZnNldC5vZmZzZXQoKV07IH0KICAgICAKICAg
ICAvLyBUaGlzIGlzIGEgc2xvdyBtZXRob2QgY2FsbCwgd2hpY2ggc2VhcmNoZXMgdGhlIHJlZ2lz
dGVyIGJhbmsgdG8gZmluZCB0aGUgaW5kZXgKICAgICAvLyBnaXZlbiBhIHBvaW50ZXIuIEl0IHdp
bGwgQ1JBU0goKSBpZiBpdCBkb2VzIG5vdCBmaW5kIHRoZSByZWdpc3Rlci4gT25seSB1c2UgdGhp
cwogICAgIC8vIGluIGRlYnVnIGNvZGUgKGxpa2UgYnl0ZWNvZGUgZHVtcGluZykuCi0gICAgSlNf
RVhQT1JUX1BSSVZBVEUgaW50IGZpbmRSZWdpc3RlckluZGV4KHZvaWQqKTsKKyAgICBKU19FWFBP
UlRfUFJJVkFURSBTY29wZU9mZnNldCBmaW5kUmVnaXN0ZXJJbmRleCh2b2lkKik7CiAgICAgCi0g
ICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiBhc3NlcnRSZWdpc3RlcklzSW5UaGlzT2JqZWN0KFdy
aXRlQmFycmllcjxVbmtub3duPiogcmVnaXN0ZXJQb2ludGVyKQorICAgIFdyaXRlQmFycmllcjxV
bmtub3duPiogYXNzZXJ0VmFyaWFibGVJc0luVGhpc09iamVjdChXcml0ZUJhcnJpZXI8VW5rbm93
bj4qIHZhcmlhYmxlUG9pbnRlcikKICAgICB7Ci0jaWYgIUFTU0VSVF9ESVNBQkxFRAotICAgICAg
ICBmaW5kUmVnaXN0ZXJJbmRleChyZWdpc3RlclBvaW50ZXIpOwotI2VuZGlmCisgICAgICAgIGlm
ICghQVNTRVJUX0RJU0FCTEVEKQorICAgICAgICAgICAgZmluZFJlZ2lzdGVySW5kZXgocmVnaXN0
ZXJQb2ludGVyKTsKICAgICAgICAgcmV0dXJuIHJlZ2lzdGVyUG9pbnRlcjsKICAgICB9CiAgICAg
CiAgICAgLy8gQWRkcyBudW1iZXJPZlJlZ2lzdGVyc1RvQWRkIHJlZ2lzdGVycywgaW5pdGlhbGl6
ZXMgdGhlbSB0byBVbmRlZmluZWQsIGFuZCByZXR1cm5zCiAgICAgLy8gdGhlIGluZGV4IG9mIHRo
ZSBmaXJzdCBvbmUgYWRkZWQuCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgaW50IGFkZFJlZ2lzdGVy
cyhpbnQgbnVtYmVyT2ZSZWdpc3RlcnNUb0FkZCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgU2Nv
cGVPZmZzZXQgYWRkUmVnaXN0ZXJzKHVuc2lnbmVkIG51bWJlck9mUmVnaXN0ZXJzVG9BZGQpOwog
ICAgIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiwgU2xvdFZpc2l0b3ImKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNTeW1ib2xUYWJsZU9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuaAkocmV2aXNpb24gMTgwMjg1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAx
NCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIs
IDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC04MCw3ICs4MCw3IEBAIGlubGluZSBib29sIHN5bWJvbFRh
YmxlR2V0KAogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgU3ltYm9sVGFibGVFbnRyeTo6RmFz
dCBlbnRyeSA9IGl0ZXItPnZhbHVlOwogICAgIEFTU0VSVCghZW50cnkuaXNOdWxsKCkpOwotICAg
IHNsb3Quc2V0VmFsdWUob2JqZWN0LCBlbnRyeS5nZXRBdHRyaWJ1dGVzKCkgfCBEb250RGVsZXRl
LCBvYmplY3QtPnJlZ2lzdGVyQXQoZW50cnkuZ2V0SW5kZXgoKSkuZ2V0KCkpOworICAgIHNsb3Qu
c2V0VmFsdWUob2JqZWN0LCBlbnRyeS5nZXRBdHRyaWJ1dGVzKCkgfCBEb250RGVsZXRlLCBvYmpl
Y3QtPnZhcmlhYmxlQXQoZW50cnkuc2NvcGVPZmZzZXQoKSkuZ2V0KCkpOwogICAgIHJldHVybiB0
cnVlOwogfQogCkBAIC05Niw3ICs5Niw3IEBAIGlubGluZSBib29sIHN5bWJvbFRhYmxlR2V0KAog
ICAgIFN5bWJvbFRhYmxlRW50cnk6OkZhc3QgZW50cnkgPSBpdGVyLT52YWx1ZTsKICAgICBBU1NF
UlQoIWVudHJ5LmlzTnVsbCgpKTsKICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3IoCi0gICAg
ICAgIG9iamVjdC0+cmVnaXN0ZXJBdChlbnRyeS5nZXRJbmRleCgpKS5nZXQoKSwgZW50cnkuZ2V0
QXR0cmlidXRlcygpIHwgRG9udERlbGV0ZSk7CisgICAgICAgIG9iamVjdC0+dmFyaWFibGVBdChl
bnRyeS5zY29wZU9mZnNldCgpKS5nZXQoKSwgZW50cnkuZ2V0QXR0cmlidXRlcygpIHwgRG9udERl
bGV0ZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTExMiw3ICsxMTIsNyBAQCBpbmxpbmUg
Ym9vbCBzeW1ib2xUYWJsZUdldCgKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIFN5bWJvbFRh
YmxlRW50cnk6OkZhc3QgZW50cnkgPSBpdGVyLT52YWx1ZTsKICAgICBBU1NFUlQoIWVudHJ5Lmlz
TnVsbCgpKTsKLSAgICBzbG90LnNldFZhbHVlKG9iamVjdCwgZW50cnkuZ2V0QXR0cmlidXRlcygp
IHwgRG9udERlbGV0ZSwgb2JqZWN0LT5yZWdpc3RlckF0KGVudHJ5LmdldEluZGV4KCkpLmdldCgp
KTsKKyAgICBzbG90LnNldFZhbHVlKG9iamVjdCwgZW50cnkuZ2V0QXR0cmlidXRlcygpIHwgRG9u
dERlbGV0ZSwgb2JqZWN0LT52YXJpYWJsZUF0KGVudHJ5LnNjb3BlT2Zmc2V0KCkpLmdldCgpKTsK
ICAgICBzbG90SXNXcml0ZWFibGUgPSAhZW50cnkuaXNSZWFkT25seSgpOwogICAgIHJldHVybiB0
cnVlOwogfQpAQCAtMTQ3LDcgKzE0Nyw3IEBAIGlubGluZSBib29sIHN5bWJvbFRhYmxlUHV0KAog
ICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEz
NDYwMQogICAgICAgICAgICAgc2V0LT5ub3RpZnlXcml0ZSh2bSwgdmFsdWUsIG9iamVjdCwgcHJv
cGVydHlOYW1lKTsKICAgICAgICAgfQotICAgICAgICByZWcgPSAmb2JqZWN0LT5yZWdpc3RlckF0
KGZhc3RFbnRyeS5nZXRJbmRleCgpKTsKKyAgICAgICAgcmVnID0gJm9iamVjdC0+dmFyaWFibGVB
dChmYXN0RW50cnkuc2NvcGVPZmZzZXQoKSk7CiAgICAgfQogICAgIC8vIEknZCBwcmVmZXIgd2Ug
bm90IGhvbGQgbG9jayB3aGlsZSBleGVjdXRpbmcgYmFycmllcnMsIHNpbmNlIEkgcHJlZmVyIHRv
IHJlc2VydmUKICAgICAvLyB0aGUgcmlnaHQgZm9yIGJhcnJpZXJzIHRvIGJlIGFibGUgdG8gdHJp
Z2dlciBHQy4gQW5kIEkgZG9uJ3Qgd2FudCB0byBob2xkIFZNCkBAIC0xNzUsNyArMTc1LDcgQEAg
aW5saW5lIGJvb2wgc3ltYm9sVGFibGVQdXRXaXRoQXR0cmlidXRlcwogICAgICAgICBpZiAoVmFy
aWFibGVXYXRjaHBvaW50U2V0KiBzZXQgPSBlbnRyeS53YXRjaHBvaW50U2V0KCkpCiAgICAgICAg
ICAgICBzZXQtPm5vdGlmeVdyaXRlKHZtLCB2YWx1ZSwgb2JqZWN0LCBwcm9wZXJ0eU5hbWUpOwog
ICAgICAgICBlbnRyeS5zZXRBdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpOwotICAgICAgICByZWcgPSAm
b2JqZWN0LT5yZWdpc3RlckF0KGVudHJ5LmdldEluZGV4KCkpOworICAgICAgICByZWcgPSAmb2Jq
ZWN0LT52YXJpYWJsZUF0KGVudHJ5LnNjb3BlT2Zmc2V0KCkpOwogICAgIH0KICAgICByZWctPnNl
dCh2bSwgb2JqZWN0LCB2YWx1ZSk7CiAgICAgcmV0dXJuIHRydWU7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9PdXRPZkJhbmRBcmd1bWVudHMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL091dE9mQmFuZEFyZ3VtZW50cy5jcHAJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PdXRPZkJhbmRBcmd1
bWVudHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTI2IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJPdXRPZkJhbmRBcmd1bWVudHMuaCIKKworI2luY2x1ZGUgIkpTQXJndW1lbnRzSXRl
cmF0b3IuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitT
VEFUSUNfQVNTRVJUX0lTX1RSSVZJQUxMWV9ERVNUUlVDVElCTEUoT3V0T2ZCYW5kQXJndW1lbnRz
KTsKKworY29uc3QgQ2xhc3NJbmZvIE91dE9mQmFuZEFyZ3VtZW50czo6c19pbmZvID0geyAiQXJn
dW1lbnRzIiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShPdXRPZkJhbmRB
cmd1bWVudHMpIH07CisKK091dE9mQmFuZEFyZ3VtZW50czo6T3V0T2ZCYW5kQXJndW1lbnRzKFZN
JiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUsIG51
bGxwdHIpCit7Cit9CisKK091dE9mQmFuZEFyZ3VtZW50cyogT3V0T2ZCYW5kQXJndW1lbnRzOjpj
cmVhdGVFbXB0eShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCit7CisgICAg
T3V0T2ZCYW5kQXJndW1lbnRzKiByZXN1bHQgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxP
dXRPZkJhbmRBcmd1bWVudHM+KHZtLmhlYXApKQorICAgICAgICBPdXRPZkJhbmRBcmd1bWVudHMo
dm0sIGdsb2JhbE9iamVjdC0+b3V0T2ZCYW5kQXJndW1lbnRzU3RydWN0dXJlKCkpOworICAgIHJl
c3VsdC0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK091dE9m
QmFuZEFyZ3VtZW50cyogT3V0T2ZCYW5kQXJndW1lbnRzOjpjcmVhdGVFbXB0eShFeGVjU3RhdGUq
IGV4ZWMpCit7CisgICAgLy8gTkIuIFNvbWUgY2xpZW50cyBtaWdodCBleHBlY3QgdGhhdCB0aGUg
Z2xvYmFsIG9iamVjdCBvZiBvZiB0aGlzIG9iamVjdCBpcyB0aGUgZ2xvYmFsIG9iamVjdAorICAg
IC8vIG9mIHRoZSBjYWxsZWUuIFdlIGRvbid0IGRvIHRoaXMgZm9yIG5vdywgYnV0IG1heWJlIHdl
IHNob3VsZC4KKyAgICByZXR1cm4gY3JlYXRlRW1wdHkoZXhlYy0+dm0oKSwgZXhlYy0+bGV4aWNh
bEdsb2JhbE9iamVjdCgpKTsKK30KKworT3V0T2ZCYW5kQXJndW1lbnRzKiBPdXRPZkJhbmRBcmd1
bWVudHM6OmNyZWF0ZVdpdGhJbmxpbmVGcmFtZShFeGVjU3RhdGUqIG15RnJhbWUsIEV4ZWNTdGF0
ZSogdGFyZ2V0RnJhbWUsIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lLCBBcmd1bWVu
dHNNb2RlIG1vZGUpCit7CisgICAgVk0mIHZtID0gbXlGcmFtZS0+dm0oKTsKKyAgICAKKyAgICBK
U0Z1bmN0aW9uKiBjYWxsZWU7CisgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlOwor
ICAgIAorICAgIGlmIChpbmxpbmVDYWxsRnJhbWUpIHsKKyAgICAgICAgY2FsbGVlID0ganNDYXN0
PEpTRnVuY3Rpb24qPihpbmxpbmVDYWxsRnJhbWUtPmNhbGxlZVJlY292ZXJ5LnJlY292ZXIodGFy
Z2V0RnJhbWUpKTsKKyAgICAgICAgZXhlY3V0YWJsZSA9IGpzQ2FzdDxGdW5jdGlvbkV4ZWN1dGFi
bGUqPihpbmxpbmVDYWxsRnJhbWUtPmV4ZWN1dGFibGUuZ2V0KCkpOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIGNhbGxlZSA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4odGFyZ2V0RnJhbWUtPmNhbGxlZSgp
KTsKKyAgICAgICAgZXhlY3V0YWJsZSA9IGpzQ2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPih0YXJn
ZXRGcmFtZS0+Y29kZUJsb2NrKCktPm93bmVyRXhlY3V0YWJsZSgpKTsKKyAgICB9CisgICAgCisg
ICAgLy8gTkIuIEl0J3Mgc29tZXdoYXQgYXJiaXRyYXJ5IHRoYXQgd2UgdGllIHRoZSBzdHJpY3Ru
ZXNzIG9mIHRoaXMgb2JqZWN0IHRvIHRoZSBzdHJpY3RuZXNzIG9mCisgICAgLy8gdGhlIGNhbGxl
ZS4KKyAgICBib29sIGlzU3RyaWN0TW9kZSA9IGV4ZWN1dGFibGUtPmlzU3RyaWN0TW9kZSgpOwor
CisgICAgT3V0T2ZCYW5kQXJndW1lbnRzKiByZXN1bHQgPSBjcmVhdGVFbXB0eShteUZyYW1lKTsK
KyAgICAKKyAgICB1bnNpZ25lZCBsZW5ndGg7CisgICAgc3dpdGNoIChtb2RlKSB7CisgICAgY2Fz
ZSBDbG9uZWRBcmd1bWVudHNDcmVhdGlvbk1vZGU6IHsKKyAgICAgICAgaWYgKGlubGluZUNhbGxG
cmFtZSkgeworICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudFJl
Z2lzdGVyLmlzVmFsaWQoKSkKKyAgICAgICAgICAgICAgICBsZW5ndGggPSBleGVjLT5yKGlubGlu
ZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudFJlZ2lzdGVyKS51bmJveGVkSW50MzIoKTsKKyAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBsZW5ndGggPSBpbmxpbmVDYWxsRnJhbWUtPmFy
Z3VtZW50cy5zaXplKCk7CisgICAgICAgICAgICBsZW5ndGgtLTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbGVuZ3RoOyBpLS07KQorICAgICAgICAgICAgICAg
IHJlc3VsdC0+cHV0RGlyZWN0SW5kZXgobXlGcmFtZSwgaSwgaW5saW5lQ2FsbEZyYW1lLT5hcmd1
bWVudHNbaV0ucmVjb3Zlcih0YXJnZXRGcmFtZSkpOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgbGVuZ3RoID0gdGFyZ2V0RnJhbWUtPmFyZ3VtZW50Q291bnQoKTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbGVuZ3RoOyBpLS07KQorICAgICAgICAg
ICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0SW5kZXgobXlGcmFtZSwgaSwgdGFyZ2V0RnJhbWUtPnVu
Y2hlY2tlZEFyZ3VtZW50KGkpKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9Cisg
ICAgICAgIAorICAgIGNhc2UgRmFrZUFyZ3VtZW50VmFsdWVzQ3JlYXRpb25Nb2RlOiB7CisgICAg
ICAgIGxlbmd0aCA9IDA7CisgICAgICAgIGJyZWFrOworICAgIH0gfQorICAgIAorICAgIHJlc3Vs
dC0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKGxlbmd0
aCkpOworICAgIGlmIChpc1N0cmljdE1vZGUpIHsKKyAgICAgICAgcmVzdWx0LT5wdXREaXJlY3RB
Y2Nlc3NvcihleGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT5jYWxsZWUsIHRoaXNPYmplY3QtPmdsb2Jh
bE9iamVjdCgpLT50aHJvd1R5cGVFcnJvckdldHRlclNldHRlcihleGVjLT52bSgpKSwgRG9udERl
bGV0ZSB8IERvbnRFbnVtIHwgQWNjZXNzb3IpOworICAgICAgICByZXN1bHQtPnB1dERpcmVjdEFj
Y2Vzc29yKGV4ZWMsIHZtLnByb3BlcnR5TmFtZXMtPmNhbGxlZSwgdGhpc09iamVjdC0+Z2xvYmFs
T2JqZWN0KCktPnRocm93VHlwZUVycm9yR2V0dGVyU2V0dGVyKGV4ZWMtPnZtKCkpLCBEb250RGVs
ZXRlIHwgRG9udEVudW0gfCBBY2Nlc3Nvcik7CisgICAgfSBlbHNlCisgICAgICAgIHJlc3VsdC0+
cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5jYWxsZWUsIEpTVmFsdWUoY2FsbGVlKSk7
CisgICAgCisgICAgcmVzdWx0LT5KU0NfTkFUSVZFX0ZVTkNUSU9OKHZtLnByb3BlcnR5TmFtZXMt
Pml0ZXJhdG9yUHJpdmF0ZU5hbWUsIGFyZ3VtZW50c0Z1bmNJdGVyYXRvciwgRG9udEVudW0sIDAp
OworfQorCitPdXRPZkJhbmRBcmd1bWVudHMqIE91dE9mQmFuZEFyZ3VtZW50czo6Y3JlYXRlV2l0
aE1hY2hpbmVGcmFtZShFeGVjU3RhdGUqIG15RnJhbWUsIEV4ZWNTdGF0ZSogdGFyZ2V0RnJhbWUs
IEFyZ3VtZW50c01vZGUgbW9kZSkKK3sKKyAgICByZXR1cm4gY3JlYXRlV2l0aElubGluZUZyYW1l
KG15RnJhbWUsIHRhcmdldEZyYW1lLCBudWxscHRyLCBtb2RlKTsKK30KKworU3RydWN0dXJlKiBP
dXRPZkJhbmRBcmd1bWVudHM6OmNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQoreworICAgIHJldHVybiBTdHJ1Y3R1
cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5
cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL091dE9mQmFuZEFyZ3VtZW50cy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL091dE9mQmFuZEFy
Z3VtZW50cy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
T3V0T2ZCYW5kQXJndW1lbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIE91dE9m
QmFuZEFyZ3VtZW50c19oCisjZGVmaW5lIE91dE9mQmFuZEFyZ3VtZW50c19oCisKKyNpbmNsdWRl
ICJBcmd1bWVudHNNb2RlLmgiCisjaW5jbHVkZSAiSlNPYmplY3QuaCIKKworbmFtZXNwYWNlIEpT
QyB7CisKKy8vIFRoaXMgaXMgYW4gQXJndW1lbnRzLWNsYXNzIG9iamVjdCB0aGF0IHdlIGNyZWF0
ZSB3aGVuIHlvdSBkbyBmdW5jdGlvbi5hcmd1bWVudHMuIEl0IGJlaGF2ZXMKKy8vIGVudGlyZWx5
IGxpa2UgYW4gb3JkaW5hcnkgSmF2YVNjcmlwdCBvYmplY3QuIEFsbCBvZiB0aGUgYXJndW1lbnRz
IHZhbHVlcyBhcmUgc2ltcGx5IGNvcGllZCBmcm9tCisvLyB0aGUgc3RhY2sgKHBvc3NpYmx5IHZp
YSBzb21lIHNvcGhpc3RpY2F0ZWQgVmFsdWVSZWNvdmVyeSdzIGlmIGFuIG9wdGltaXppbmcgY29t
cGlsZXIgaXMgaW4KKy8vIHBsYXkpIGFuZCB0aGUgYXBwcm9wcmlhdGUgcHJvcGVydGllcyBvZiB0
aGUgb2JqZWN0IGFyZSBwb3B1bGF0ZWQuIFRoZSBvbmx5IHJlYXNvbiB3aHkgd2UgbmVlZAorLy8g
YSBzcGVjaWFsIGNsYXNzIGlzIHRvIG1ha2UgdGhlIG9iamVjdCBjbGFpbSB0byBiZSAiQXJndW1l
bnRzIiBmcm9tIGEgdG9TdHJpbmcgc3RhbmRwb2ludC4KKy8vCisvLyBOb3RlIHRoYXQgdGhpcyBj
bGFzcyBkb2VzIGEgYmFkIGpvYiBvZiBiZWluZyBmYXN0LiBUaGF0J3Mgc29tZXdoYXQgaW50ZW50
aW9uYWwuIFdlIGV4cGVjdCB1c2VzCisvLyBvZiBmdW5jdGlvbi5hcmd1bWVudHMgdG8gYmUgcmFy
ZSBvbiB0aGUgbW9kZXJuIHdlYi4gWW91IHdpbGwgZ2V0IHBhcnRpY3VsYXJseSBiYWQgcGVyZm9y
bWFuY2UKKy8vIGlmIHlvdSB1c2UgZnVuY3Rpb24uYXJndW1lbnRzIGluIHN0cmljdCBtb2RlLgor
Y2xhc3MgT3V0T2ZCYW5kQXJndW1lbnRzIDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgeworcHVi
bGljOgorICAgIHR5cGVkZWYgSlNOb25GaW5hbE9iamVjdCBCYXNlOworICAgIAorcHJpdmF0ZToK
KyAgICBPdXRPZkJhbmRBcmd1bWVudHMoVk0mLCBTdHJ1Y3R1cmUqKTsKKworcHVibGljOgorICAg
IHN0YXRpYyBPdXRPZkJhbmRBcmd1bWVudHMqIGNyZWF0ZUVtcHR5KFZNJiwgSlNHbG9iYWxPYmpl
Y3QqKTsKKyAgICBzdGF0aWMgT3V0T2ZCYW5kQXJndW1lbnRzKiBjcmVhdGVFbXB0eShFeGVjU3Rh
dGUqKTsKKyAgICBzdGF0aWMgT3V0T2ZCYW5kQXJndW1lbnRzKiBjcmVhdGVXaXRoSW5saW5lRnJh
bWUoRXhlY1N0YXRlKiBteUZyYW1lLCBFeGVjU3RhdGUqIHRhcmdldEZyYW1lLCBJbmxpbmVDYWxs
RnJhbWUqLCBBcmd1bWVudHNNb2RlKTsKKyAgICBzdGF0aWMgT3V0T2ZCYW5kQXJndW1lbnRzKiBj
cmVhdGVXaXRoTWFjaGluZUZyYW1lKEV4ZWNTdGF0ZSogbXlGcmFtZSwgRXhlY1N0YXRlKiB0YXJn
ZXRGcmFtZSwgQXJndW1lbnRzTW9kZSk7CisgICAgCisgICAgc3RhdGljIFN0cnVjdHVyZSogY3Jl
YXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHByb3RvdHlwZSk7Cisg
ICAgCisgICAgREVDTEFSRV9JTkZPOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRp
ZiAvLyBPdXRPZkJhbmRBcmd1bWVudHNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TY29wZU9mZnNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU2NvcGVPZmZzZXQuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVPZmZzZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNjb3BlT2Zmc2V0LmgiCisKK25hbWVzcGFj
ZSBKU0MgeworCit2b2lkIFNjb3BlT2Zmc2V0OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0
Cit7CisgICAgaWYgKCEqdGhpcykgeworICAgICAgICBvdXQucHJpbnQoInNjb3BlSW52YWxpZCIp
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIG91dC5wcmludCgic2NvcGUiLCBv
ZmZzZXQoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TY29wZU9mZnNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlT2Zmc2V0LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZU9mZnNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2lmbmRlZiBTY29wZU9mZnNldF9oCisjZGVmaW5lIFNjb3BlT2Zmc2V0X2gKKworI2luY2x1
ZGUgIkdlbmVyaWNPZmZzZXQuaCIKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFt
ZXNwYWNlIEpTQyB7CisKKy8vIFRoaXMgaXMgYW4gb2Zmc2V0IGludG8gYSBzY29wZSBvZiBzb21l
IGtpbmQuIEl0IGNvdWxkIGJlIGFuIGFjdGl2YXRpb24gc2NvcGUgb3IgaXQgY291bGQgYmUgYQor
Ly8gZ2xvYmFsIG9iamVjdC4KK2NsYXNzIFNjb3BlT2Zmc2V0IDogcHVibGljIEdlbmVyaWNPZmZz
ZXQ8U2NvcGVPZmZzZXQ+IHsKK3B1YmxpYzoKKyAgICBTY29wZU9mZnNldCgpIHsgfQorICAgIAor
ICAgIGV4cGxpY2l0IFNjb3BlT2Zmc2V0KHVuc2lnbmVkIG9mZnNldCkKKyAgICAgICAgOiBHZW5l
cmljT2Zmc2V0KG9mZnNldCkKKyAgICB7CisgICAgfQorICAgIAorICAgIHZvaWQgZHVtcChQcmlu
dFN0cmVhbSYpIGNvbnN0OworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBT
Y29wZU9mZnNldF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3Bl
ZEFyZ3VtZW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1Njb3BlZEFyZ3VtZW50cy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5NSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IFNjb3BlZEFyZ3VtZW50c19oCisjZGVmaW5lIFNjb3BlZEFyZ3VtZW50c19oCisKKyNpbmNsdWRl
ICJKU09iamVjdC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworLy8gVGhpcyBpcyBhbiBBcmd1bWVu
dHMtY2xhc3Mgb2JqZWN0IHRoYXQgd2UgY3JlYXRlIHdoZW4geW91IHNheSAiYXJndW1lbnRzIiBp
bnNpZGUgYSBmdW5jdGlvbiwKKy8vIGFuZCBvbmUgb3IgbW9yZSBvZiB0aGUgYXJndW1lbnRzIG1h
eSBiZSBjYXB0dXJlZCBpbiB0aGUgZnVuY3Rpb24ncyBhY3RpdmF0aW9uLiBUaGUgZnVuY3Rpb24K
Ky8vIHdpbGwgY29weSBhbGwgb2YgaXRzIGFyZ3VtZW50cyBpbnRvIHRoZSBhY3RpdmF0aW9uIGFu
ZCB0aGVuIGNyZWF0ZSB0aGlzIG9iamVjdC4gVGhpcyBvYmplY3QKKy8vIHdpbGwgdXNlIHRoZSBz
eW1ib2wgdGFibGUncyBTY29wZWRBcmd1bWVudHNUYWJsZSBhbmQgdGhlIGFjdGl2YXRpb24gdG8g
aGFuZGxlIGFsbCBpbmRleGVkCisvLyBsb29rdXBzLgorY2xhc3MgU2NvcGVkQXJndW1lbnRzIDog
cHVibGljIEpTTm9uRmluYWxPYmplY3QgeworcHVibGljOgorICAgIHR5cGVkZWYgSlNOb25GaW5h
bE9iamVjdCBCYXNlOworCitwcml2YXRlOgorICAgIFNjb3BlZEFyZ3VtZW50cyhWTSYsIFN0cnVj
dHVyZSopOworCitwdWJsaWM6CisgICAgc3RhdGljIFNjb3BlZEFyZ3VtZW50cyogY3JlYXRlKFZN
JiwgU3RydWN0dXJlKiwgU2NvcGVkQXJndW1lbnRzVGFibGUqLCBKU0xleGljYWxFbnZpcm9ubWVu
dCopOworICAgIAorICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZp
c2l0b3ImKTsKKyAgICAKKyAgICB1aW50MzJfdCBsZW5ndGgoRXhlY1N0YXRlKiBleGVjKSBjb25z
dAorICAgIHsKKyAgICAgICAgaWYgKFVOTElLRUxZKG1fb3ZlcnJvZGVMZW5ndGgpKQorICAgICAg
ICAgICAgcmV0dXJuIGdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKS50b1VJ
bnQzMihleGVjKTsKKyAgICAgICAgcmV0dXJuIG1fdGFibGUtPmxlbmd0aCgpOworICAgIH0KKyAg
ICAKKyAgICBib29sIGNhbkdldEluZGV4UXVpY2tseSh1aW50MzJfdCBpKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIGkgPCBtX2xlbmd0aCAmJiAhIW1fdGFibGUtPmdldChpKTsKKyAgICB9
CisgICAgCisgICAgSlNWYWx1ZSBnZXRJbmRleFF1aWNrbHkodWludDMyX3QgaSkgY29uc3QKKyAg
ICB7CisgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGNhbkdldEluZGV4
UXVpY2tseShpKSk7CisgICAgICAgIHJldHVybiBtX3Njb3BlLT52YXJpYWJsZUF0KG1fdGFibGUt
PmdldChpKSkuZ2V0KCk7CisgICAgfQorCisgICAgREVDTEFSRV9JTkZPOworICAgIAorICAgIHN0
YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNW
YWx1ZSBwcm90b3R5cGUpOworCitwcml2YXRlOgorICAgIHN0YXRpYyBib29sIGdldE93blByb3Bl
cnR5U2xvdChKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90
Jik7CisgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU09iamVjdCos
IEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CisgICAg
c3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFBy
b3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKKyAgICBzdGF0aWMgdm9pZCBwdXQo
SlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNs
b3QmKTsKKyAgICBzdGF0aWMgdm9pZCBwdXRCeUluZGV4KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIHVu
c2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7CisgICAgc3Rh
dGljIHZvaWQgZGVsZXRlUHJvcGVydHkoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1l
KTsKKyAgICBzdGF0aWMgdm9pZCBkZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlNDZWxsKiwgRXhlY1N0
YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lKTsKKyAgICBzdGF0aWMgdm9pZCBkZWZpbmVPd25Q
cm9wZXJ0eShKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVy
dHlEZXNjcmlwdG9yJiwgYm9vbCBzaG91bGRUaHJvdyk7CisgICAgCisgICAgdm9pZCBvdmVycmlk
ZUFyZ3VtZW50KFZNJiB2bSwgdWludDMyX3QgaSkKKyAgICB7CisgICAgICAgIG1fdGFibGUuc2V0
KHZtLCB0aGlzLCBtX3RhYmxlLT5zZXQodm0sIGksIFNjb3BlT2Zmc2V0KCkpKTsKKyAgICB9Cisg
ICAgCisgICAgYm9vbCBtX292ZXJyb2RlTGVuZ3RoOworICAgIFdyaXRlQmFycmllcjxTY29wZWRB
cmd1bWVudHNUYWJsZT4gbV90YWJsZTsKKyAgICBXcml0ZUJhcnJpZXI8SlNMZXhpY2FsRW52aXJv
bm1lbnQ+IG1fc2NvcGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIFNj
b3BlZEFyZ3VtZW50c19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Nj
b3BlZEFyZ3VtZW50c1RhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzVGFibGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50c1RhYmxlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw5MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIFNjb3BlZEFyZ3VtZW50c1RhYmxlX2gKKyNkZWZpbmUgU2NvcGVk
QXJndW1lbnRzVGFibGVfaAorCisjaW5jbHVkZSAiSlNDZWxsLmgiCisKK25hbWVzcGFjZSBKU0Mg
eworCisvLyBUaGlzIGNsYXNzJ3Mgb25seSBqb2IgaXMgdG8gaG9sZCBvbnRvIHRoZSBsaXN0IG9m
IFNjb3BlT2Zmc2V0cyBmb3IgZWFjaCBhcmd1bWVudCB0aGF0IGEKKy8vIGZ1bmN0aW9uIGhhcy4g
TW9zdCBvZiB0aGUgdGltZSwgdGhlIEJ5dGVjb2RlR2VuZXJhdG9yIHdpbGwgY3JlYXRlIG9uZSBv
ZiB0aGVzZSBhbmQgaXQgd2lsbAorLy8gbmV2ZXIgYmUgbW9kaWZpZWQgc3Vic2VxdWVudGx5LiBU
aGVyZSBpcyBhIHJhcmUgY2FzZSB3aGVyZSBhIFNjb3BlZEFyZ3VtZW50cyBvYmplY3QgaXMgY3Jl
YXRlZAorLy8gYW5kIGFsaWFzZXMgb25lIG9mIHRoZXNlIGFuZCB0aGVuIGRlY2lkZXMgdG8gbW9k
aWZ5IGl0OyBpbiB0aGF0IGNhc2Ugd2UgZG8gY29weS1vbi13cml0ZS4gVGhpcworLy8gbWFrZXMg
c2Vuc2UgYmVjYXVzZSBzdWNoIG1vZGlmaWNhdGlvbnMgYXJlIHNvIHVuY29tbW9uLiBZb3UnZCBo
YXZlIHRvIGRvIHNvbWV0aGluZyBjcmF6eSBsaWtlCisvLyAiZGVsZXRlIGFyZ3VtZW50c1tpXSIg
b3Igc29tZSB2YXJpYW50IG9mIGRlZmluZU93blByb3BlcnR5LgorY2xhc3MgU2NvcGVkQXJndW1l
bnRzIDogcHVibGljIEpTQ2VsbCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBKU0NlbGwgQmFzZTsK
KyAgICAKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKKyAg
ICBzdGF0aWMgY29uc3QgYm9vbCBoYXNJbW1vcnRhbFN0cnVjdHVyZSA9IHRydWU7CisKK3ByaXZh
dGU6CisgICAgU2NvcGVkQXJndW1lbnRzVGFibGUoVk0mKTsKKyAgICB+U2NvcGVkQXJndW1lbnRz
VGFibGUoKTsKKworcHVibGljOgorICAgIHN0YXRpYyBTY29wZWRBcmd1bWVudHNUYWJsZSogY3Jl
YXRlKFZNJik7CisgICAgCisgICAgU2NvcGVkQXJndW1lbnRzKiBjbG9uZShWTSYpOworICAgIAor
ICAgIHVpbnQzMl90IGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbGVuZ3RoOyB9CisgICAgU2Nv
cGVkQXJndW1lbnRzVGFibGUqIHNldExlbmd0aChWTSYsIHVpbnQzMl90IG5ld0xlbmd0aCk7Cisg
ICAgCisgICAgU2NvcGVPZmZzZXQgZ2V0KHVpbnQzMl90IGkpIGNvbnN0CisgICAgeworICAgICAg
ICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihpIDwgbV9sZW5ndGgpOworICAgICAg
ICByZXR1cm4gbV9hcmd1bWVudHNbaV07CisgICAgfQorICAgIAorICAgIHZvaWQgbG9jaygpCisg
ICAgeworICAgICAgICBtX2xvY2tlZCA9IHRydWU7CisgICAgfQorICAgIAorICAgIFNjb3BlZEFy
Z3VtZW50cyogc2V0KFZNJiB2bSwgdWludDMyX3QgaSwgU2NvcGVPZmZzZXQgdmFsdWUpCisgICAg
eworICAgICAgICBTY29wZWRBcmd1bWVudHMqIHJlc3VsdDsKKyAgICAgICAgaWYgKFVOTElLRUxZ
KG1fbG9ja2VkKSkKKyAgICAgICAgICAgIHJlc3VsdCA9IGNsb25lKHZtKTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgcmVzdWx0ID0gdGhpczsKKyAgICAgICAgcmVzdWx0LT5zZXREaXJlY3Qo
aSwgdmFsdWUpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBERUNM
QVJFX0lORk87CisKK3ByaXZhdGU6CisgICAgdWludDMyX3QgbV9sZW5ndGg7CisgICAgYm9vbCBt
X2xvY2tlZDsgLy8gQmVpbmcgbG9ja2VkIG1lYW5zIHRoYXQgdGhlcmUgYXJlIG11bHRpcGxlIHJl
ZmVyZW5jZXMgdG8gdGhpcyBvYmplY3QgYW5kIG5vbmUgb2YgdGhlbSBleHBlY3QgdG8gc2VlIHRo
ZSBvdGhlcnMnIG1vZGlmaWNhdGlvbnMuIFRoaXMgbWVhbnMgdGhhdCBtb2RpZmljYXRpb25zIG5l
ZWQgdG8gbWFrZSBhIGNvcHkgZmlyc3QuCisgICAgc3RkOjp1bmlxdWVfcHRyPFNjb3BlT2Zmc2V0
W10+IG1fYXJndW1lbnRzOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBT
Y29wZWRBcmd1bWVudHNUYWJsZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1N5bWJvbFRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TeW1ib2xUYWJsZS5jcHAJKHJldmlzaW9uIDE4MDI4NSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTQgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE0LCAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMTM3LDI5ICsxMzcsMjQgQEAgdm9pZCBTeW1ib2xUYWJsZTo6V2F0Y2hwb2ludENsZWFu
dXA6OmZpbgogICAgIH0KIH0KIAotU3ltYm9sVGFibGUqIFN5bWJvbFRhYmxlOjpjbG9uZUNhcHR1
cmVkTmFtZXMoVk0mIHZtKQorU3ltYm9sVGFibGUqIFN5bWJvbFRhYmxlOjpjbG9uZUlnbm9yaW5n
U3RhY2soVk0mIHZtKQogewogICAgIFN5bWJvbFRhYmxlKiByZXN1bHQgPSBTeW1ib2xUYWJsZTo6
Y3JlYXRlKHZtKTsKICAgICAKLSAgICByZXN1bHQtPm1fcGFyYW1ldGVyQ291bnRJbmNsdWRpbmdU
aGlzID0gbV9wYXJhbWV0ZXJDb3VudEluY2x1ZGluZ1RoaXM7CiAgICAgcmVzdWx0LT5tX3VzZXNO
b25TdHJpY3RFdmFsID0gbV91c2VzTm9uU3RyaWN0RXZhbDsKICAgICByZXN1bHQtPm1fY2FwdHVy
ZVN0YXJ0ID0gbV9jYXB0dXJlU3RhcnQ7CiAgICAgcmVzdWx0LT5tX2NhcHR1cmVFbmQgPSBtX2Nh
cHR1cmVFbmQ7CiAKICAgICBmb3IgKGF1dG8gaXRlciA9IG1fbWFwLmJlZ2luKCksIGVuZCA9IG1f
bWFwLmVuZCgpOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7Ci0gICAgICAgIGlmICghaXNDYXB0dXJl
ZChpdGVyLT52YWx1ZS5nZXRJbmRleCgpKSkKKyAgICAgICAgaWYgKGl0ZXItPnZhbHVlLnZhck9m
ZnNldCgpLmlzU3RhY2soKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICByZXN1bHQt
Pm1fbWFwLmFkZCgKICAgICAgICAgICAgIGl0ZXItPmtleSwKLSAgICAgICAgICAgIFN5bWJvbFRh
YmxlRW50cnkoaXRlci0+dmFsdWUuZ2V0SW5kZXgoKSwgaXRlci0+dmFsdWUuZ2V0QXR0cmlidXRl
cygpKSk7CisgICAgICAgICAgICBTeW1ib2xUYWJsZUVudHJ5KGl0ZXItPnZhbHVlLnZhck9mZnNl
dCgpLCBpdGVyLT52YWx1ZS5nZXRBdHRyaWJ1dGVzKCkpKTsKICAgICB9CiAgICAgCi0gICAgaWYg
KG1fc2xvd0FyZ3VtZW50cykgewotICAgICAgICByZXN1bHQtPm1fc2xvd0FyZ3VtZW50cyA9IHN0
ZDo6bWFrZV91bmlxdWU8U2xvd0FyZ3VtZW50W10+KHBhcmFtZXRlckNvdW50KCkpOwotICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBwYXJhbWV0ZXJDb3VudCgpOyBpLS07KQotICAgICAgICAgICAg
cmVzdWx0LT5tX3Nsb3dBcmd1bWVudHNbaV0gPSBtX3Nsb3dBcmd1bWVudHNbaV07Ci0gICAgfQot
CisgICAgcmVzdWx0LT5tX2FyZ3VtZW50cyA9IGFyZ3VtZW50cygpOworICAgIAogICAgIGlmICht
X3R5cGVQcm9maWxpbmdSYXJlRGF0YSkgewogICAgICAgICByZXN1bHQtPm1fdHlwZVByb2ZpbGlu
Z1JhcmVEYXRhID0gc3RkOjptYWtlX3VuaXF1ZTxUeXBlUHJvZmlsaW5nUmFyZURhdGE+KCk7CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuaAkocmV2
aXNpb24gMTgwMjg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFi
bGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDcsIDIwMDgsIDIwMTItMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMTItMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMxLDYgKzMx
LDcgQEAKIAogI2luY2x1ZGUgIkNvbmN1cnJlbnRKSVRMb2NrLmgiCiAjaW5jbHVkZSAiSlNPYmpl
Y3QuaCIKKyNpbmNsdWRlICJTY29wZWRBcmd1bWVudHNUYWJsZS5oIgogI2luY2x1ZGUgIlR5cGVM
b2NhdGlvbi5oIgogI2luY2x1ZGUgIlZhcmlhYmxlV2F0Y2hwb2ludFNldC5oIgogI2luY2x1ZGUg
PG1lbW9yeT4KQEAgLTM5LDI0ICs0MCw2IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1zdHJ1Y3Qg
U2xvd0FyZ3VtZW50IHsKLXB1YmxpYzoKLSAgICBlbnVtIFN0YXR1cyB7Ci0gICAgICAgIE5vcm1h
bCA9IDAsCi0gICAgICAgIENhcHR1cmVkID0gMSwKLSAgICAgICAgRGVsZXRlZCA9IDIKLSAgICB9
OwotCi0gICAgU2xvd0FyZ3VtZW50KCkKLSAgICAgICAgOiBzdGF0dXMoTm9ybWFsKQotICAgICAg
ICAsIGluZGV4KDApCi0gICAgewotICAgIH0KLQotICAgIFN0YXR1cyBzdGF0dXM7Ci0gICAgaW50
IGluZGV4OyAvLyBJZiBzdGF0dXMgaXMgJ0RlbGV0ZWQnLCBpbmRleCBpcyBib2d1cy4KLX07Ci0K
IHN0YXRpYyBBTFdBWVNfSU5MSU5FIGludCBtaXNzaW5nU3ltYm9sTWFya2VyKCkgeyByZXR1cm4g
c3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKTsgfQogCiAvLyBUaGUgYml0IHR3aWRkbGlu
ZyBpbiB0aGlzIGNsYXNzIGFzc3VtZXMgdGhhdCBldmVyeSByZWdpc3RlciBpbmRleCBpcyBhCkBA
IC04Niw2ICs2OSwyOCBAQCBzdGF0aWMgQUxXQVlTX0lOTElORSBpbnQgbWlzc2luZ1N5bWJvbE1h
CiAvLyBjb3B5OiAgICAgU3ltYm9sVGFibGVFbnRyeSAtLT4gRmF0RW50cnkgLS0tLS1eCiAKIHN0
cnVjdCBTeW1ib2xUYWJsZUVudHJ5IHsKK3ByaXZhdGU6CisgICAgc3RhdGljIFZhck9mZnNldCB2
YXJPZmZzZXRGcm9tQml0cyhpbnRwdHJfdCBiaXRzKQorICAgIHsKKyAgICAgICAgVmFyS2luZCBr
aW5kOworICAgICAgICBpZiAoYml0cyAmIFN0YWNrRmxhZykKKyAgICAgICAgICAgIGtpbmQgPSBT
dGFja1ZhcktpbmQ7CisgICAgICAgIGVsc2UgaWYgKGJpdHMgJiBDYXB0dXJlZEFyZ3VtZW50Rmxh
ZykKKyAgICAgICAgICAgIGtpbmQgPSBDYXB0dXJlZEFyZ3VtZW50S2luZDsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAga2luZCA9IFNjb3BlVmFyS2luZDsKKyAgICAgICAgcmV0dXJuIFZhck9m
ZnNldDo6YXNzZW1ibGUoa2luZCwgc3RhdGljX2Nhc3Q8aW50PihiaXRzID4+IEZsYWdCaXRzKSk7
CisgICAgfQorICAgIAorICAgIHN0YXRpYyBTY29wZU9mZnNldCBzY29wZU9mZnNldEZyb21CaXRz
KGludHB0cl90IGJpdHMpCisgICAgeworICAgICAgICBBU1NFUlQoIShiaXRzICYgU3RhY2tGbGFn
KSk7CisgICAgICAgIEFTU0VSVCghKGJpdHMgJiBDYXB0dXJlZEFyZ3VtZW50RmxhZykpOworICAg
ICAgICByZXR1cm4gU2NvcGVPZmZzZXQoc3RhdGljX2Nhc3Q8aW50PihiaXRzID4+IEZsYWdCaXRz
KSk7CisgICAgfQorCitwdWJsaWM6CisgICAgCiAgICAgLy8gVXNlIHRoZSBTeW1ib2xUYWJsZUVu
dHJ5OjpGYXN0IGNsYXNzLCBlaXRoZXIgdmlhIGltcGxpY2l0IGNhc3Qgb3IgYnkgY2FsbGluZwog
ICAgIC8vIGdldEZhc3QoKSwgd2hlbiB5b3UgKDEpIG9ubHkgY2FyZSBhYm91dCBpc051bGwoKSwg
Z2V0SW5kZXgoKSwgYW5kIGlzUmVhZE9ubHkoKSwKICAgICAvLyBhbmQgKDIpIHlvdSBhcmUgaW4g
YSBob3QgcGF0aCB3aGVyZSB5b3UgbmVlZCB0byBtaW5pbWl6ZSB0aGUgbnVtYmVyIG9mIHRpbWVz
CkBAIC0xMDcsMTEgKzExMiwxOSBAQCBzdHJ1Y3QgU3ltYm9sVGFibGVFbnRyeSB7CiAgICAgICAg
ICAgICByZXR1cm4gIShtX2JpdHMgJiB+U2xpbUZsYWcpOwogICAgICAgICB9CiAKLSAgICAgICAg
aW50IGdldEluZGV4KCkgY29uc3QKKyAgICAgICAgVmFyT2Zmc2V0IHZhck9mZnNldCgpIGNvbnN0
CiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KG1fYml0cyA+
PiBGbGFnQml0cyk7CisgICAgICAgICAgICByZXR1cm4gdmFyT2Zmc2V0RnJvbUJpdHMobV9iaXRz
KTsKICAgICAgICAgfQotICAgIAorICAgICAgICAKKyAgICAgICAgLy8gQXNzZXJ0cyBpZiB0aGUg
b2Zmc2V0IGlzIGFueXRoaW5nIGJ1dCBhIHNjb3BlIG9mZnNldC4gVGhpcyBzdHJ1Y3R1cmVzIHRo
ZSBhc3NlcnRpb25zCisgICAgICAgIC8vIGluIGEgd2F5IHRoYXQgbWF5IHJlc3VsdCBpbiBiZXR0
ZXIgY29kZSwgZXZlbiBpbiByZWxlYXNlLCB0aGFuIGRvaW5nCisgICAgICAgIC8vIHZhck9mZnNl
dCgpLnNjb3BlT2Zmc2V0KCkuCisgICAgICAgIFNjb3BlT2Zmc2V0IHNjb3BlT2Zmc2V0KCkgY29u
c3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHNjb3BlT2Zmc2V0RnJvbUJpdHMobV9i
aXRzKTsKKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgYm9vbCBpc1JlYWRPbmx5KCkgY29u
c3QKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIG1fYml0cyAmIFJlYWRPbmx5RmxhZzsK
QEAgLTE0MiwxOCArMTU1LDE4IEBAIHN0cnVjdCBTeW1ib2xUYWJsZUVudHJ5IHsKICAgICB7CiAg
ICAgfQogCi0gICAgU3ltYm9sVGFibGVFbnRyeShpbnQgaW5kZXgpCisgICAgU3ltYm9sVGFibGVF
bnRyeShWYXJPZmZzZXQgb2Zmc2V0KQogICAgICAgICA6IG1fYml0cyhTbGltRmxhZykKICAgICB7
Ci0gICAgICAgIEFTU0VSVChpc1ZhbGlkSW5kZXgoaW5kZXgpKTsKLSAgICAgICAgcGFjayhpbmRl
eCwgZmFsc2UsIGZhbHNlKTsKKyAgICAgICAgQVNTRVJUKGlzVmFsaWRWYXJPZmZzZXQob2Zmc2V0
KSk7CisgICAgICAgIHBhY2sob2Zmc2V0LCBmYWxzZSwgZmFsc2UpOwogICAgIH0KIAotICAgIFN5
bWJvbFRhYmxlRW50cnkoaW50IGluZGV4LCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQorICAgIFN5bWJv
bFRhYmxlRW50cnkoVmFyT2Zmc2V0IG9mZnNldCwgdW5zaWduZWQgYXR0cmlidXRlcykKICAgICAg
ICAgOiBtX2JpdHMoU2xpbUZsYWcpCiAgICAgewotICAgICAgICBBU1NFUlQoaXNWYWxpZEluZGV4
KGluZGV4KSk7Ci0gICAgICAgIHBhY2soaW5kZXgsIGF0dHJpYnV0ZXMgJiBSZWFkT25seSwgYXR0
cmlidXRlcyAmIERvbnRFbnVtKTsKKyAgICAgICAgQVNTRVJUKGlzVmFsaWRWYXJPZmZzZXQob2Zm
c2V0KSk7CisgICAgICAgIHBhY2sob2Zmc2V0LCBhdHRyaWJ1dGVzICYgUmVhZE9ubHksIGF0dHJp
YnV0ZXMgJiBEb250RW51bSk7CiAgICAgfQogICAgIAogICAgIH5TeW1ib2xUYWJsZUVudHJ5KCkK
QEAgLTE4MSw5ICsxOTQsMTcgQEAgc3RydWN0IFN5bWJvbFRhYmxlRW50cnkgewogICAgICAgICBy
ZXR1cm4gIShiaXRzKCkgJiB+U2xpbUZsYWcpOwogICAgIH0KIAotICAgIGludCBnZXRJbmRleCgp
IGNvbnN0CisgICAgVmFyT2Zmc2V0IHZhck9mZnNldCgpIGNvbnN0CiAgICAgewotICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8aW50PihiaXRzKCkgPj4gRmxhZ0JpdHMpOworICAgICAgICByZXR1
cm4gdmFyT2Zmc2V0RnJvbUJpdHMoYml0cygpKTsKKyAgICB9CisgICAgCisgICAgLy8gQXNzZXJ0
cyBpZiB0aGUgb2Zmc2V0IGlzIGFueXRoaW5nIGJ1dCBhIHNjb3BlIG9mZnNldC4gVGhpcyBzdHJ1
Y3R1cmVzIHRoZSBhc3NlcnRpb25zCisgICAgLy8gaW4gYSB3YXkgdGhhdCBtYXkgcmVzdWx0IGlu
IGJldHRlciBjb2RlLCBldmVuIGluIHJlbGVhc2UsIHRoYW4gZG9pbmcKKyAgICAvLyB2YXJPZmZz
ZXQoKS5zY29wZU9mZnNldCgpLgorICAgIFNjb3BlT2Zmc2V0IHNjb3BlT2Zmc2V0KCkgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBzY29wZU9mZnNldEZyb21CaXRzKGJpdHMoKSk7CiAgICAg
fQogICAgIAogICAgIEFMV0FZU19JTkxJTkUgRmFzdCBnZXRGYXN0KCkgY29uc3QKQEAgLTIwOSw3
ICsyMzAsNyBAQCBzdHJ1Y3QgU3ltYm9sVGFibGVFbnRyeSB7CiAKICAgICB2b2lkIHNldEF0dHJp
YnV0ZXModW5zaWduZWQgYXR0cmlidXRlcykKICAgICB7Ci0gICAgICAgIHBhY2soZ2V0SW5kZXgo
KSwgYXR0cmlidXRlcyAmIFJlYWRPbmx5LCBhdHRyaWJ1dGVzICYgRG9udEVudW0pOworICAgICAg
ICBwYWNrKHZhck9mZnNldCgpLCBhdHRyaWJ1dGVzICYgUmVhZE9ubHksIGF0dHJpYnV0ZXMgJiBE
b250RW51bSk7CiAgICAgfQogCiAgICAgYm9vbCBpc1JlYWRPbmx5KCkgY29uc3QKQEAgLTI0Miw3
ICsyNjMsOSBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBjb25zdCBpbnRwdHJfdCBSZWFkT25seUZs
YWcgPSAweDI7CiAgICAgc3RhdGljIGNvbnN0IGludHB0cl90IERvbnRFbnVtRmxhZyA9IDB4NDsK
ICAgICBzdGF0aWMgY29uc3QgaW50cHRyX3QgTm90TnVsbEZsYWcgPSAweDg7Ci0gICAgc3RhdGlj
IGNvbnN0IGludHB0cl90IEZsYWdCaXRzID0gNDsKKyAgICBzdGF0aWMgY29uc3QgaW50cHRyX3Qg
U3RhY2tGbGFnID0gMHgxMDsKKyAgICBzdGF0aWMgY29uc3QgaW50cHRyX3QgQ2FwdHVyZWRBcmd1
bWVudEZsYWcgPSAweDIwOworICAgIHN0YXRpYyBjb25zdCBpbnRwdHJfdCBGbGFnQml0cyA9IDY7
CiAgICAgCiAgICAgY2xhc3MgRmF0RW50cnkgewogICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKQEAgLTMwOSwyMCArMzMyLDM0IEBAIHByaXZhdGU6CiAKICAgICBKU19FWFBPUlRfUFJJ
VkFURSB2b2lkIGZyZWVGYXRFbnRyeVNsb3coKTsKIAotICAgIHZvaWQgcGFjayhpbnQgaW5kZXgs
IGJvb2wgcmVhZE9ubHksIGJvb2wgZG9udEVudW0pCisgICAgdm9pZCBwYWNrKFZhck9mZnNldCBv
ZmZzZXQsIGJvb2wgcmVhZE9ubHksIGJvb2wgZG9udEVudW0pCiAgICAgewogICAgICAgICBBU1NF
UlQoIWlzRmF0KCkpOwogICAgICAgICBpbnRwdHJfdCYgYml0c1JlZiA9IGJpdHMoKTsKLSAgICAg
ICAgYml0c1JlZiA9IChzdGF0aWNfY2FzdDxpbnRwdHJfdD4oaW5kZXgpIDw8IEZsYWdCaXRzKSB8
IE5vdE51bGxGbGFnIHwgU2xpbUZsYWc7CisgICAgICAgIGJpdHNSZWYgPQorICAgICAgICAgICAg
KHN0YXRpY19jYXN0PGludHB0cl90PihvZmZzZXQucmF3T2Zmc2V0KCkpIDw8IEZsYWdCaXRzKSB8
IE5vdE51bGxGbGFnIHwgU2xpbUZsYWc7CiAgICAgICAgIGlmIChyZWFkT25seSkKICAgICAgICAg
ICAgIGJpdHNSZWYgfD0gUmVhZE9ubHlGbGFnOwogICAgICAgICBpZiAoZG9udEVudW0pCiAgICAg
ICAgICAgICBiaXRzUmVmIHw9IERvbnRFbnVtRmxhZzsKKyAgICAgICAgc3dpdGNoIChvZmZzZXQu
a2luZCgpKSB7CisgICAgICAgIGNhc2UgU2NvcGVWYXJLaW5kOgorICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgU3RhY2tWYXJLaW5kOgorICAgICAgICAgICAgYml0c1JlZiB8PSBTdGFj
a0ZsYWc7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDYXB0dXJlZEFyZ3VtZW50
S2luZDoKKyAgICAgICAgICAgIGJpdHNSZWYgfD0gQ2FwdHVyZWRBcmd1bWVudEZsYWc7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgIH0K
ICAgICAKLSAgICBib29sIGlzVmFsaWRJbmRleChpbnQgaW5kZXgpCisgICAgc3RhdGljIGJvb2wg
aXNWYWxpZFZhck9mZnNldChWYXJPZmZzZXQgb2Zmc2V0KQogICAgIHsKLSAgICAgICAgcmV0dXJu
ICgoc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KGluZGV4KSA8PCBGbGFnQml0cykgPj4gRmxhZ0JpdHMp
ID09IHN0YXRpY19jYXN0PGludHB0cl90PihpbmRleCk7CisgICAgICAgIHJldHVybiAoKHN0YXRp
Y19jYXN0PGludHB0cl90PihvZmZzZXQucmF3T2Zmc2V0KCkpIDw8IEZsYWdCaXRzKSA+PiBGbGFn
Qml0cykgPT0gc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KG9mZnNldC5yYXdPZmZzZXQoKSk7CiAgICAg
fQogCiAgICAgaW50cHRyX3QgbV9iaXRzOwpAQCAtNDQ4LDYgKzQ4NSw0NSBAQCBwdWJsaWM6CiAg
ICAgICAgIHJldHVybiBjb250YWlucyhsb2NrZXIsIGtleSk7CiAgICAgfQogICAgIAorICAgIC8v
IFRoZSBwcmluY2lwbGUgYmVoaW5kIFNjb3BlZEFyZ3VtZW50c1RhYmxlIG1vZGlmaWNhdGlvbnMg
aXMgdGhhdCB3ZSB3aWxsIGNyZWF0ZSBvbmUgYW5kCisgICAgLy8gbGVhdmUgaXQgdW5sb2NrZWQg
LSB0aGVyZWJ5IGFsbG93aW5nIGluLXBsYWNlIGNoYW5nZXMgLSB1bnRpbCBzb21lb25lIGFza3Mg
Zm9yIGEgcG9pbnRlciB0bworICAgIC8vIHRoZSB0YWJsZS4gVGhlbiwgd2Ugd2lsbCBsb2NrIGl0
LiBUaGVuIGJvdGggb3VyIGZ1dHVyZSBjaGFuZ2VzIGFuZCB0aGVpciBmdXR1cmUgY2hhbmdlcwor
ICAgIC8vIHdpbGwgZmlyc3QgaGF2ZSB0byBtYWtlIGEgY29weS4gVGhpcyBkaXNjaXBsaW5lIG1l
YW5zIHRoYXQgdXN1YWxseSB3aGVuIHdlIGNyZWF0ZSBhCisgICAgLy8gU2NvcGVkQXJndW1lbnRz
IG9iamVjdCwgd2UgZG9uJ3QgaGF2ZSB0byBtYWtlIGEgY29weSBvZiB0aGUgU2NvcGVkQXJndW1l
bnRzVGFibGUgLSBpbnN0ZWFkCisgICAgLy8gd2UganVzdCB0YWtlIGEgcmVmZXJlbmNlIHRvIG9u
ZSB0aGF0IHdlIGFscmVhZHkgaGF2ZS4KKyAgICAKKyAgICB1aW50MzJfdCBhcmd1bWVudHNMZW5n
dGgoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKCFtX2FyZ3VtZW50cykKKyAgICAgICAgICAg
IHJldHVybiAwOworICAgICAgICByZXR1cm4gbV9hcmd1bWVudHMtPmxlbmd0aCgpOworICAgIH0K
KyAgICAKKyAgICB2b2lkIHNldEFyZ3VtZW50c0xlbmd0aChWTSYgdm0sIHVpbnQzMl90IGxlbmd0
aCkKKyAgICB7CisgICAgICAgIGlmIChVTkxJS0VMWSghbV9hcmd1bWVudHMpKQorICAgICAgICAg
ICAgbV9hcmd1bWVudHMuc2V0KHZtLCB0aGlzLCBTY29wZWRBcmd1bWVudHNUYWJsZTo6Y3JlYXRl
KHZtKSk7CisgICAgICAgIG1fYXJndW1lbnRzLnNldCh2bSwgdGhpcywgbV9hcmd1bWVudHMtPnNl
dExlbmd0aCh2bSwgbGVuZ3RoKSk7CisgICAgfQorICAgIAorICAgIFNjb3BlT2Zmc2V0IGFyZ3Vt
ZW50T2Zmc2V0KHVpbnQzMl90IGkpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlRfV0lUSF9T
RUNVUklUWV9JTVBMSUNBVElPTihtX2FyZ3VtZW50cyk7CisgICAgICAgIHJldHVybiBtX2FyZ3Vt
ZW50cy0+Z2V0KGkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNldEFyZ3VtZW50T2Zmc2V0KFZN
JiB2bSwgdWludDMyX3QgaSwgU2NvcGVPZmZzZXQgb2Zmc2V0KQorICAgIHsKKyAgICAgICAgQVNT
RVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04obV9hcmd1bWVudHMpOworICAgICAgICBtX2Fy
Z3VtZW50cy5zZXQodm0sIHRoaXMsIG1fYXJndW1lbnRzLT5zZXQodm0sIGksIG9mZnNldCkpOwor
ICAgIH0KKyAgICAKKyAgICBTY29wZWRBcmd1bWVudHNUYWJsZSogYXJndW1lbnRzKCkgY29uc3QK
KyAgICB7CisgICAgICAgIG1fYXJndW1lbnRzLT5sb2NrKCk7CisgICAgICAgIHJldHVybiBtX2Fy
Z3VtZW50cy5nZXQoKTsKKyAgICB9CisgICAgCiAgICAgR2xvYmFsVmFyaWFibGVJRCB1bmlxdWVJ
REZvclZhcmlhYmxlKGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImLCBTdHJpbmdJbXBsKiBrZXks
IFZNJiB2bSk7CiAgICAgR2xvYmFsVmFyaWFibGVJRCB1bmlxdWVJREZvclJlZ2lzdGVyKGNvbnN0
IENvbmN1cnJlbnRKSVRMb2NrZXImIGxvY2tlciwgaW50IHJlZ2lzdGVySW5kZXgsIFZNJiB2bSk7
CiAgICAgUmVmUHRyPFR5cGVTZXQ+IGdsb2JhbFR5cGVTZXRGb3JSZWdpc3Rlcihjb25zdCBDb25j
dXJyZW50SklUTG9ja2VyJiBsb2NrZXIsIGludCByZWdpc3RlckluZGV4LCBWTSYgdm0pOwpAQCAt
NDU2LDI4ICs1MzIsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCB1c2VzTm9uU3RyaWN0RXZhbCgpIHsg
cmV0dXJuIG1fdXNlc05vblN0cmljdEV2YWw7IH0KICAgICB2b2lkIHNldFVzZXNOb25TdHJpY3RF
dmFsKGJvb2wgdXNlc05vblN0cmljdEV2YWwpIHsgbV91c2VzTm9uU3RyaWN0RXZhbCA9IHVzZXNO
b25TdHJpY3RFdmFsOyB9CiAKLSAgICBpbnQgY2FwdHVyZVN0YXJ0KCkgY29uc3QgeyByZXR1cm4g
bV9jYXB0dXJlU3RhcnQ7IH0KLSAgICB2b2lkIHNldENhcHR1cmVTdGFydChpbnQgY2FwdHVyZVN0
YXJ0KSB7IG1fY2FwdHVyZVN0YXJ0ID0gY2FwdHVyZVN0YXJ0OyB9Ci0KLSAgICBpbnQgY2FwdHVy
ZUVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fY2FwdHVyZUVuZDsgfQotICAgIHZvaWQgc2V0Q2FwdHVy
ZUVuZChpbnQgY2FwdHVyZUVuZCkgeyBtX2NhcHR1cmVFbmQgPSBjYXB0dXJlRW5kOyB9Ci0KLSAg
ICBpbnQgY2FwdHVyZUNvdW50KCkgY29uc3QgeyByZXR1cm4gLShtX2NhcHR1cmVFbmQgLSBtX2Nh
cHR1cmVTdGFydCk7IH0KLSAgICAKLSAgICBib29sIGlzQ2FwdHVyZWQoaW50IG9wZXJhbmQpCi0g
ICAgewotICAgICAgICByZXR1cm4gb3BlcmFuZCA8PSBjYXB0dXJlU3RhcnQoKSAmJiBvcGVyYW5k
ID4gY2FwdHVyZUVuZCgpOwotICAgIH0KLQotICAgIGludCBwYXJhbWV0ZXJDb3VudCgpIHsgcmV0
dXJuIG1fcGFyYW1ldGVyQ291bnRJbmNsdWRpbmdUaGlzIC0gMTsgfQotICAgIGludCBwYXJhbWV0
ZXJDb3VudEluY2x1ZGluZ1RoaXMoKSB7IHJldHVybiBtX3BhcmFtZXRlckNvdW50SW5jbHVkaW5n
VGhpczsgfQotICAgIHZvaWQgc2V0UGFyYW1ldGVyQ291bnRJbmNsdWRpbmdUaGlzKGludCBwYXJh
bWV0ZXJDb3VudEluY2x1ZGluZ1RoaXMpIHsgbV9wYXJhbWV0ZXJDb3VudEluY2x1ZGluZ1RoaXMg
PSBwYXJhbWV0ZXJDb3VudEluY2x1ZGluZ1RoaXM7IH0KLQotICAgIC8vIDAgaWYgd2UgZG9uJ3Qg
Y2FwdHVyZSBhbnkgYXJndW1lbnRzOyBwYXJhbWV0ZXJDb3VudCgpIGluIGxlbmd0aCBpZiB3ZSBk
by4KLSAgICBjb25zdCBTbG93QXJndW1lbnQqIHNsb3dBcmd1bWVudHMoKSB7IHJldHVybiBtX3Ns
b3dBcmd1bWVudHMuZ2V0KCk7IH0KLSAgICB2b2lkIHNldFNsb3dBcmd1bWVudHMoc3RkOjp1bmlx
dWVfcHRyPFNsb3dBcmd1bWVudFtdPiBzbG93QXJndW1lbnRzKSB7IG1fc2xvd0FyZ3VtZW50cyA9
IFdURjo6bW92ZShzbG93QXJndW1lbnRzKTsgfQotICAgIAotICAgIFN5bWJvbFRhYmxlKiBjbG9u
ZUNhcHR1cmVkTmFtZXMoVk0mKTsKKyAgICBTeW1ib2xUYWJsZSogY2xvbmVJZ25vcmluZ1N0YWNr
KFZNJik7CiAKICAgICB2b2lkIHByZXBhcmVGb3JUeXBlUHJvZmlsaW5nKGNvbnN0IENvbmN1cnJl
bnRKSVRMb2NrZXImKTsKIApAQCAtNTEyLDEzICs1NjcsOSBAQCBwcml2YXRlOgogICAgIH07CiAg
ICAgc3RkOjp1bmlxdWVfcHRyPFR5cGVQcm9maWxpbmdSYXJlRGF0YT4gbV90eXBlUHJvZmlsaW5n
UmFyZURhdGE7CiAKLSAgICBpbnQgbV9wYXJhbWV0ZXJDb3VudEluY2x1ZGluZ1RoaXM7CiAgICAg
Ym9vbCBtX3VzZXNOb25TdHJpY3RFdmFsOwotCi0gICAgaW50IG1fY2FwdHVyZVN0YXJ0OwotICAg
IGludCBtX2NhcHR1cmVFbmQ7Ci0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8U2xvd0FyZ3VtZW50W10+
IG1fc2xvd0FyZ3VtZW50czsKKyAgICAKKyAgICBXcml0ZUJhcnJpZXI8U2NvcGVkQXJndW1lbnRz
VGFibGU+IG1fYXJndW1lbnRzOwogICAgIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxXYXRjaHBvaW50
Q2xlYW51cD4gbV93YXRjaHBvaW50Q2xlYW51cDsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVmFyT2Zmc2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9WYXJPZmZzZXQuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVmFyT2Zmc2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDc2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJWYXJPZmZzZXQuaCIKKworbmFtZXNwYWNlIEpT
QyB7CisKK3ZvaWQgVmFyT2Zmc2V0OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7Cisg
ICAgc3dpdGNoIChtX2tpbmQpIHsKKyAgICBjYXNlIEludmFsaWRWYXJLaW5kOgorICAgICAgICBv
dXQucHJpbnQoImludmFsaWQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU2NvcGVWYXJL
aW5kOgorICAgICAgICBvdXQucHJpbnQoc2NvcGVPZmZzZXQoKSk7CisgICAgICAgIHJldHVybjsK
KyAgICBjYXNlIFN0YWNrVmFyS2luZDoKKyAgICAgICAgb3V0LnByaW50KHN0YWNrT2Zmc2V0KCkp
OworICAgICAgICByZXR1cm47CisgICAgY2FzZSBDYXB0dXJlZEFyZ3VtZW50S2luZDoKKyAgICAg
ICAgb3V0LnByaW50KGNhcHR1cmVkQXJndW1lbnRPZmZzZXQoKSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgSlNDCisKK25hbWVzcGFjZSBXVEYgeworCit1c2luZyBuYW1lc3BhY2UgSlNDOworCit2
b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgVmFyS2luZCB2YXJLaW5kKQorewor
ICAgIHN3aXRjaCAodmFyS2luZCkgeworICAgIGNhc2UgSW52YWxpZFZhcktpbmQ6CisgICAgICAg
IG91dC5wcmludCgiSW52YWxpZCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBTY29wZVZh
cktpbmQ6CisgICAgICAgIG91dC5wcmludCgiU2NvcGUiKTsKKyAgICAgICAgcmV0dXJuOworICAg
IGNhc2UgU3RhY2tWYXJLaW5kOgorICAgICAgICBvdXQucHJpbnQoIlN0YWNrIik7CisgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIENhcHR1cmVkQXJndW1lbnRLaW5kOgorICAgICAgICBvdXQucHJp
bnQoIkNhcHR1cmVkQXJndW1lbnQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVmFyT2Zmc2V0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVmFyT2Zmc2V0LmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WYXJPZmZzZXQuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDIxNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaWZuZGVmIFZhck9mZnNldF9oCisjZGVmaW5lIFZhck9mZnNldF9oCisK
KyNpbmNsdWRlICJDYXB0dXJlZEFyZ3VtZW50T2Zmc2V0LmgiCisjaW5jbHVkZSAiU2NvcGVPZmZz
ZXQuaCIKKyNpbmNsdWRlICJWaXJ0dWFsUmVnaXN0ZXIuaCIKKworbmFtZXNwYWNlIEpTQyB7CisK
K2VudW0gVmFyS2luZCA6IHVpbnQ4X3QgeworICAgIEludmFsaWRWYXJLaW5kLAorICAgIFNjb3Bl
VmFyS2luZCwKKyAgICBTdGFja1ZhcktpbmQsCisgICAgQ2FwdHVyZWRBcmd1bWVudEtpbmQKK307
CisKK2NsYXNzIFZhck9mZnNldCB7CitwdWJsaWM6CisgICAgVmFyT2Zmc2V0KCkKKyAgICAgICAg
OiBtX2tpbmQoSW52YWxpZFZhcktpbmQpCisgICAgICAgICwgbV9vZmZzZXQoVUlOVF9NQVgpCisg
ICAgeworICAgIH0KKyAgICAKKyAgICBleHBsaWNpdCBWYXJPZmZzZXQoVmlydHVhbFJlZ2lzdGVy
IHN0YWNrT2Zmc2V0KQorICAgIHsKKyAgICAgICAgaWYgKCFzdGFja09mZnNldC5pc1ZhbGlkKCkp
IHsKKyAgICAgICAgICAgIG1fa2luZCA9IEludmFsaWRWYXJLaW5kOworICAgICAgICAgICAgbV9v
ZmZzZXQgPSBVSU5UX01BWDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1fa2luZCA9
IFN0YWNrVmFyS2luZDsKKyAgICAgICAgICAgIG1fb2Zmc2V0ID0gc3RhY2tPZmZzZXQub2Zmc2V0
KCk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgZXhwbGljaXQgVmFyT2Zmc2V0KFNjb3Bl
T2Zmc2V0IHNjb3BlT2Zmc2V0KQorICAgIHsKKyAgICAgICAgaWYgKCFzY29wZU9mZnNldCkgewor
ICAgICAgICAgICAgbV9raW5kID0gSW52YWxpZFZhcktpbmQ7CisgICAgICAgICAgICBtX29mZnNl
dCA9IFVJTlRfTUFYOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbV9raW5kID0gU2Nv
cGVWYXJLaW5kOworICAgICAgICAgICAgbV9vZmZzZXQgPSBzY29wZU9mZnNldC5vZmZzZXQoKTsK
KyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBleHBsaWNpdCBWYXJPZmZzZXQoQ2FwdHVyZWRB
cmd1bWVudE9mZnNldCBjYXB0dXJlZEFyZ3VtZW50T2Zmc2V0KQorICAgIHsKKyAgICAgICAgaWYg
KCFjYXB0dXJlZEFyZ3VtZW50T2Zmc2V0KSB7CisgICAgICAgICAgICBtX2tpbmQgPSBJbnZhbGlk
VmFyS2luZDsKKyAgICAgICAgICAgIG1fb2Zmc2V0ID0gVUlOVF9NQVg7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICBtX2tpbmQgPSBDYXB0dXJlZEFyZ3VtZW50S2luZDsKKyAgICAgICAg
ICAgIG1fb2Zmc2V0ID0gY2FwdHVyZWRBcmd1bWVudE9mZnNldC5vZmZzZXQoKTsKKyAgICAgICAg
fQorICAgIH0KKyAgICAKKyAgICBzdGF0aWMgVmFyT2Zmc2V0IGFzc2VtYmxlKFZhcktpbmQga2lu
ZCwgdW5zaWduZWQgb2Zmc2V0KQorICAgIHsKKyAgICAgICAgVmFyT2Zmc2V0IHJlc3VsdDsKKyAg
ICAgICAgcmVzdWx0Lm1fa2luZCA9IGtpbmQ7CisgICAgICAgIHJlc3VsdC5tX29mZnNldCA9IG9m
ZnNldDsKKyAgICAgICAgcmVzdWx0LmNoZWNrU2FuaXR5KCk7CisgICAgICAgIHJldHVybiByZXN1
bHQ7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gbV9raW5kICE9IEludmFsaWRWYXJLaW5kOworICAgIH0KKyAgICAKKyAgICBib29s
IG9wZXJhdG9yISgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gIWlzVmFsaWQoKTsKKyAg
ICB9CisgICAgCisgICAgVmFyS2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4gbV9raW5kOyB9Cisg
ICAgCisgICAgYm9vbCBpc1N0YWNrKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2tp
bmQgPT0gU3RhY2tWYXJLaW5kOworICAgIH0KKyAgICAKKyAgICBib29sIGlzU2NvcGUoKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fa2luZCA9PSBTY29wZVZhcktpbmQ7CisgICAgfQor
ICAgIAorICAgIGJvb2wgaXNDYXB0dXJlZEFyZ3VtZW50KCkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBtX2tpbmQgPT0gQ2FwdHVyZWRBcmd1bWVudEtpbmQ7CisgICAgfQorICAgIAorICAg
IFZpcnR1YWxSZWdpc3RlciBzdGFja09mZnNldFVuY2hlY2tlZCgpIGNvbnN0CisgICAgeworICAg
ICAgICBpZiAoIWlzU3RhY2soKSkKKyAgICAgICAgICAgIHJldHVybiBWaXJ0dWFsUmVnaXN0ZXIo
KTsKKyAgICAgICAgcmV0dXJuIFZpcnR1YWxSZWdpc3RlcihtX29mZnNldCk7CisgICAgfQorICAg
IAorICAgIFNjb3BlT2Zmc2V0IHNjb3BlT2Zmc2V0VW5jaGVja2VkKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIGlmICghaXNTY29wZSgpKQorICAgICAgICAgICAgcmV0dXJuIFNjb3BlT2Zmc2V0KCk7
CisgICAgICAgIHJldHVybiBTY29wZU9mZnNldChtX29mZnNldCk7CisgICAgfQorICAgIAorICAg
IENhcHR1cmVkQXJndW1lbnRPZmZzZXQgY2FwdHVyZWRBcmd1bWVudE9mZnNldFVuY2hlY2tlZCgp
IGNvbnN0CisgICAgeworICAgICAgICBpZiAoIWlzQ2FwdHVyZWRBcmd1bWVudCgpKQorICAgICAg
ICAgICAgcmV0dXJuIENhcHR1cmVkQXJndW1lbnRPZmZzZXQoKTsKKyAgICAgICAgcmV0dXJuIENh
cHR1cmVkQXJndW1lbnRPZmZzZXQobV9vZmZzZXQpOworICAgIH0KKyAgICAKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgc3RhY2tPZmZzZXQoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzU3Rh
Y2soKSk7CisgICAgICAgIHJldHVybiBWaXJ0dWFsUmVnaXN0ZXIobV9vZmZzZXQpOworICAgIH0K
KyAgICAKKyAgICBTY29wZU9mZnNldCBzY29wZU9mZnNldCgpIGNvbnN0CisgICAgeworICAgICAg
ICBBU1NFUlQoaXNTY29wZSgpKTsKKyAgICAgICAgcmV0dXJuIFNjb3BlT2Zmc2V0KG1fb2Zmc2V0
KTsKKyAgICB9CisgICAgCisgICAgQ2FwdHVyZWRBcmd1bWVudE9mZnNldCBjYXB0dXJlZEFyZ3Vt
ZW50T2Zmc2V0KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc0NhcHR1cmVkQXJndW1l
bnQoKSk7CisgICAgICAgIHJldHVybiBDYXB0dXJlZEFyZ3VtZW50T2Zmc2V0KG1fb2Zmc2V0KTsK
KyAgICB9CisgICAgCisgICAgdW5zaWduZWQgcmF3T2Zmc2V0KCkgY29uc3QKKyAgICB7CisgICAg
ICAgIEFTU0VSVChpc1ZhbGlkKCkpOworICAgICAgICByZXR1cm4gbV9vZmZzZXQ7CisgICAgfQor
ICAgIAorICAgIHZvaWQgY2hlY2tTYW5pdHkoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKEFT
U0VSVF9ESVNBQkxFRCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIHN3
aXRjaCAobV9raW5kKSB7CisgICAgICAgIGNhc2UgSW52YWxpZFZhcktpbmQ6CisgICAgICAgICAg
ICBBU1NFUlQobV9vZmZzZXQgPT0gVUlOVF9NQVgpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICBjYXNlIFNjb3BlVmFyS2luZDoKKyAgICAgICAgICAgIEFTU0VSVChzY29wZU9mZnNldCgp
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBTdGFja1ZhcktpbmQ6CisgICAg
ICAgICAgICBBU1NFUlQoc3RhY2tPZmZzZXQoKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIGNhc2UgQ2FwdHVyZWRBcmd1bWVudEtpbmQ6CisgICAgICAgICAgICBBU1NFUlQoY2FwdHVy
ZWRBcmd1bWVudE9mZnNldCgpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorICAgIAorICAgIGJv
b2wgb3BlcmF0b3I9PShjb25zdCBWYXJPZmZzZXQmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIG1fa2luZCA9PSBvdGhlci5tX2tpbmQKKyAgICAgICAgICAgICYmIG1fb2Zmc2V0
ID09IG90aGVyLm1fb2Zmc2V0OworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yIT0oY29u
c3QgVmFyT2Zmc2V0JiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhKCp0aGlz
ID09IG90aGVyKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29u
c3Q7CisgICAgCitwcml2YXRlOgorICAgIFZhcktpbmQgbV9raW5kOworICAgIHVuc2lnbmVkIG1f
b2Zmc2V0OworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKK25hbWVzcGFjZSBXVEYgeworCit2
b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OlZhcktpbmQpOworCit9IC8vIG5h
bWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIFZhck9mZnNldF9oCisK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>247155</attachid>
            <date>2015-02-23 15:53:59 -0800</date>
            <delta_ts>2015-02-23 20:37:13 -0800</delta_ts>
            <desc>more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>92686</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIv
Qnl0ZWNvZGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAxODA1MjkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTE2LDcgKzExNiw3IEBAIFBhcnNlckVycm9yIEJ5dGVjb2RlR2VuZXJhdG9yOjpnZW5l
cmF0ZSgKICAgICBtX2NvZGVCbG9jay0+c2hyaW5rVG9GaXQoKTsKIAogICAgIGlmIChtX2NvZGVC
bG9jay0+c3ltYm9sVGFibGUoKSAmJiAhbV9jb2RlQmxvY2stPnZtKCktPnR5cGVQcm9maWxlcigp
KQotICAgICAgICBtX2NvZGVCbG9jay0+c2V0U3ltYm9sVGFibGUobV9jb2RlQmxvY2stPnN5bWJv
bFRhYmxlKCktPmNsb25lQ2FwdHVyZWROYW1lcygqbV9jb2RlQmxvY2stPnZtKCkpKTsKKyAgICAg
ICAgbV9jb2RlQmxvY2stPnNldFN5bWJvbFRhYmxlKG1fY29kZUJsb2NrLT5zeW1ib2xUYWJsZSgp
LT5jbG9uZUlnbm9yaW5nU3RhY2soKm1fY29kZUJsb2NrLT52bSgpKSk7CiAKICAgICBpZiAobV9l
eHByZXNzaW9uVG9vRGVlcCkKICAgICAgICAgcmV0dXJuIFBhcnNlckVycm9yKFBhcnNlckVycm9y
OjpPdXRPZk1lbW9yeSk7CkBAIC0xMjQsMTcgKzEyNCwyOCBAQCBQYXJzZXJFcnJvciBCeXRlY29k
ZUdlbmVyYXRvcjo6Z2VuZXJhdGUoCiB9CiAKIGJvb2wgQnl0ZWNvZGVHZW5lcmF0b3I6OmFkZFZh
cigKLSAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgQ29uc3RhbnRNb2RlIGNvbnN0YW50TW9k
ZSwgV2F0Y2hNb2RlIHdhdGNoTW9kZSwgUmVnaXN0ZXJJRComIHIwKQorICAgIGNvbnN0IElkZW50
aWZpZXImIGlkZW50LCBDb25zdGFudE1vZGUgY29uc3RhbnRNb2RlLCBWYXJLaW5kIHZhcktpbmQs
IFdhdGNoTW9kZSB3YXRjaE1vZGUsCisgICAgUmVnaXN0ZXJJRComIHIwKQogewogICAgIEFTU0VS
VChzdGF0aWNfY2FzdDxzaXplX3Q+KG1fY29kZUJsb2NrLT5tX251bVZhcnMpID09IG1fY2FsbGVl
UmVnaXN0ZXJzLnNpemUoKSk7CiAgICAgCiAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIo
c3ltYm9sVGFibGUoKS5tX2xvY2spOwotICAgIGludCBpbmRleCA9IHZpcnR1YWxSZWdpc3RlckZv
ckxvY2FsKG1fY2FsbGVlUmVnaXN0ZXJzLnNpemUoKSkub2Zmc2V0KCk7Ci0gICAgU3ltYm9sVGFi
bGVFbnRyeSBuZXdFbnRyeShpbmRleCwgY29uc3RhbnRNb2RlID09IElzQ29uc3RhbnQgPyBSZWFk
T25seSA6IDApOworICAgIFZhck9mZnNldCB2YXJPZmZzZXQ7CisgICAgaWYgKHZhcktpbmQgPT0g
SGVhcFZhcktpbmQpCisgICAgICAgIHZhck9mZnNldCA9IFZhck9mZnNldChIZWFwT2Zmc2V0KG1f
bnVtQ2FwdHVyZWRWYXJpYWJsZXMrKykpOworICAgIGVsc2UgeworICAgICAgICBBU1NFUlQodmFy
S2luZCA9PSBTdGFja1ZhcktpbmQpOworICAgICAgICB2YXJPZmZzZXQgPSBWYXJPZmZzZXQodmly
dHVhbFJlZ2lzdGVyRm9yTG9jYWwobV9jYWxsZWVSZWdpc3RlcnMuc2l6ZSgpKSk7CisgICAgfQor
ICAgIFN5bWJvbFRhYmxlRW50cnkgbmV3RW50cnkodmFyT2Zmc2V0LCBjb25zdGFudE1vZGUgPT0g
SXNDb25zdGFudCA/IFJlYWRPbmx5IDogMCk7CiAgICAgU3ltYm9sVGFibGU6Ok1hcDo6QWRkUmVz
dWx0IHJlc3VsdCA9IHN5bWJvbFRhYmxlKCkuYWRkKGxvY2tlciwgaWRlbnQuaW1wbCgpLCBuZXdF
bnRyeSk7CiAKICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KSB7Ci0gICAgICAgIHIwID0gJnJl
Z2lzdGVyRm9yKHJlc3VsdC5pdGVyYXRvci0+dmFsdWUuZ2V0SW5kZXgoKSk7CisgICAgICAgIFJF
TEVBU0VfQVNTRVJUKHZhcktpbmQgPT0gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS52YXJPZmZzZXQo
KS5raW5kKCkpOworICAgICAgICBpZiAodmFyS2luZCA9PSBIZWFwVmFyS2luZCkKKyAgICAgICAg
ICAgIHIwID0gbnVsbHB0cjsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcjAgPSAmcmVnaXN0
ZXJGb3IocmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS52YXJPZmZzZXQoKSk7CiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICB9CiAgICAgCkBAIC0xNDQsNyArMTU1LDEwIEBAIGJvb2wgQnl0ZWNvZGVH
ZW5lcmF0b3I6OmFkZFZhcigKICAgICAgICAgbV93YXRjaGFibGVWYXJpYWJsZXMuYXBwZW5kKGlk
ZW50KTsKICAgICB9CiAgICAgCi0gICAgcjAgPSBhZGRWYXIoKTsKKyAgICBpZiAodmFyS2luZCA9
PSBIZWFwVmFyS2luZCkKKyAgICAgICAgcjAgPSBudWxscHRyOworICAgIGVsc2UKKyAgICAgICAg
cjAgPSBhZGRWYXIoKTsKICAgICAKICAgICBBU1NFUlQod2F0Y2hNb2RlID09IE5vdFdhdGNoYWJs
ZSB8fCBzdGF0aWNfY2FzdDxzaXplX3Q+KG1fY29kZUJsb2NrLT5tX251bVZhcnMpID09IG1fd2F0
Y2hhYmxlVmFyaWFibGVzLnNpemUoKSk7CiAgICAgCkBAIC0yMzEsNyArMjQ1LDYgQEAgQnl0ZWNv
ZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFZNJgogICAgIH0KICAgICBSZWdpc3RlcklE
KiBsb2NhbEFyZ3VtZW50c1JlZ2lzdGVyID0gbnVsbHB0cjsKICAgICBSZWdpc3RlcklEKiBzY3Jh
dGNoID0gYWRkVmFyKCk7Ci0gICAgbV9zeW1ib2xUYWJsZS0+c2V0Q2FwdHVyZVN0YXJ0KHZpcnR1
YWxSZWdpc3RlckZvckxvY2FsKG1fY29kZUJsb2NrLT5tX251bVZhcnMpLm9mZnNldCgpKTsKIAog
ICAgIGlmIChmdW5jdGlvbk5vZGUtPnVzZXNBcmd1bWVudHMoKSB8fCBjb2RlQmxvY2stPnVzZXNF
dmFsKCkpIHsgLy8gTWF5IHJlaWZ5IGFyZ3VtZW50cyBvYmplY3QuCiAgICAgICAgIFJlZ2lzdGVy
SUQqIHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3RlciA9IGFkZFZhcigpOyAvLyBBbm9ueW1vdXMs
IHNvIGl0IGNhbid0IGJlIG1vZGlmaWVkIGJ5IHVzZXIgY29kZS4KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgJ
KHJldmlzaW9uIDE4MDUyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIv
Qnl0ZWNvZGVHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNjEzLDE1ICs2MTMsMTUgQEAg
bmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgLy8gQWRkcyBhIHZhciBzbG90IGFuZCBtYXBzIGl0
IHRvIHRoZSBuYW1lIGlkZW50IGluIHN5bWJvbFRhYmxlKCkuCiAgICAgICAgIGVudW0gV2F0Y2hN
b2RlIHsgSXNXYXRjaGFibGUsIE5vdFdhdGNoYWJsZSB9OwotICAgICAgICBSZWdpc3RlcklEKiBh
ZGRWYXIoY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIENvbnN0YW50TW9kZSBjb25zdGFudE1vZGUs
IFdhdGNoTW9kZSB3YXRjaE1vZGUpCisgICAgICAgIFJlZ2lzdGVySUQqIGFkZFZhcihjb25zdCBJ
ZGVudGlmaWVyJiBpZGVudCwgQ29uc3RhbnRNb2RlIGNvbnN0YW50TW9kZSwgVmFyS2luZCB2YXJL
aW5kLCBXYXRjaE1vZGUgd2F0Y2hNb2RlKQogICAgICAgICB7CiAgICAgICAgICAgICBSZWdpc3Rl
cklEKiBsb2NhbDsKLSAgICAgICAgICAgIGFkZFZhcihpZGVudCwgY29uc3RhbnRNb2RlLCB3YXRj
aE1vZGUsIGxvY2FsKTsKKyAgICAgICAgICAgIGFkZFZhcihpZGVudCwgY29uc3RhbnRNb2RlLCB2
YXJLaW5kLCB3YXRjaE1vZGUsIGxvY2FsKTsKICAgICAgICAgICAgIHJldHVybiBsb2NhbDsKICAg
ICAgICAgfQogCiAgICAgICAgIC8vIERpdHRvLiBSZXR1cm5zIHRydWUgaWYgYSBuZXcgUmVnaXN0
ZXJJRCB3YXMgYWRkZWQsIGZhbHNlIGlmIGEgcHJlLWV4aXN0aW5nIFJlZ2lzdGVySUQgd2FzIHJl
LXVzZWQuCi0gICAgICAgIGJvb2wgYWRkVmFyKGNvbnN0IElkZW50aWZpZXImLCBDb25zdGFudE1v
ZGUsIFdhdGNoTW9kZSwgUmVnaXN0ZXJJRComKTsKKyAgICAgICAgYm9vbCBhZGRWYXIoY29uc3Qg
SWRlbnRpZmllciYsIENvbnN0YW50TW9kZSwgVmFyS2luZCwgV2F0Y2hNb2RlLCBSZWdpc3RlcklE
KiYpOwogICAgICAgICAKICAgICAgICAgLy8gQWRkcyBhbiBhbm9ueW1vdXMgdmFyIHNsb3QuIFRv
IGdpdmUgdGhpcyBzbG90IGEgbmFtZSwgYWRkIGl0IHRvIHN5bWJvbFRhYmxlKCkuCiAgICAgICAg
IFJlZ2lzdGVySUQqIGFkZFZhcigpCkBAIC03NzQsNiArNzc0LDcgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIFZlY3RvcjxJZGVudGlmaWVyLCAxNj4gbV93YXRjaGFibGVWYXJpYWJsZXM7CiAg
ICAgICAgIFNlZ21lbnRlZFZlY3RvcjxSZWdpc3RlcklELCAzMj4gbV9jb25zdGFudFBvb2xSZWdp
c3RlcnM7CiAgICAgICAgIFNlZ21lbnRlZFZlY3RvcjxSZWdpc3RlcklELCAzMj4gbV9jYWxsZWVS
ZWdpc3RlcnM7CisgICAgICAgIHVuc2lnbmVkIG1fbnVtQ2FwdHVyZWRWYXJpYWJsZXM7CiAgICAg
ICAgIFNlZ21lbnRlZFZlY3RvcjxSZWdpc3RlcklELCAzMj4gbV9wYXJhbWV0ZXJzOwogICAgICAg
ICBTZWdtZW50ZWRWZWN0b3I8TGFiZWwsIDMyPiBtX2xhYmVsczsKICAgICAgICAgTGFiZWxTY29w
ZVN0b3JlIG1fbGFiZWxTY29wZXM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Bcmd1bWVudHNNb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQXJndW1lbnRzTW9kZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQXJndW1lbnRzTW9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzkg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBBcmd1bWVudHNNb2RlX2gKKyNkZWZpbmUgQXJndW1lbnRzTW9kZV9oCisKK25hbWVzcGFjZSBK
U0MgeworCitlbnVtIEFyZ3VtZW50c01vZGUgeworICAgIENsb25lZEFyZ3VtZW50c0NyZWF0aW9u
TW9kZSwKKyAgICBGYWtlQXJndW1lbnRWYWx1ZXNDcmVhdGlvbk1vZGUKK307CisKK30gLy8gbmFt
ZXNwYWNlIEpTQworCisjZW5kaWYgLy8gQXJndW1lbnRzTW9kZV9oCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhcHR1cmVkQXJndW1lbnRzT2Zmc2V0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYXB0dXJlZEFyZ3VtZW50c09m
ZnNldC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9D
YXB0dXJlZEFyZ3VtZW50c09mZnNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ2FwdHVyZWRBcmd1bWVudHNPZmZzZXQuaCIKKworbmFt
ZXNwYWNlIEpTQyB7CisKK3ZvaWQgQ2FwdHVyZWRBcmd1bWVudHNPZmZzZXQ6OmR1bXAoUHJpbnRT
dHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBpZiAoISp0aGlzKSB7CisgICAgICAgIG91dC5wcmlu
dCgiY2FwdHVyZWRBcmd1bWVudEludmFsaWQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIG91dC5wcmludCgiY2FwdHVyZWRBcmd1bWVudCIsIG9mZnNldCgpKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhcHR1
cmVkQXJndW1lbnRzT2Zmc2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQ2FwdHVyZWRBcmd1bWVudHNPZmZzZXQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhcHR1cmVkQXJndW1lbnRzT2Zmc2V0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaWZuZGVmIENhcHR1cmVkQXJndW1lbnRzT2Zmc2V0X2gKKyNkZWZp
bmUgQ2FwdHVyZWRBcmd1bWVudHNPZmZzZXRfaAorCisjaW5jbHVkZSAiR2VuZXJpY09mZnNldC5o
IgorI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgSlNDIHsKKworLy8g
VGhpcyBpcyBhbiBvZmZzZXQgaW50byB0aGUgc3BlY2lhbCBhcmd1bWVudHMgb2JqZWN0LCB3aGlj
aCBjYXB0dXJlcyB0aGUgYXJndW1lbnRzIHRvIGEKKy8vIGZ1bmN0aW9uLiBJdCBvbmx5IGNvbWVz
IGludG8gcGxheSBpdCB0aGUgYXJndW1lbnRzIGFyZW4ndCBhbHNvIGxpZnRlZCBpbnRvIHRoZSBh
Y3RpdmF0aW9uLgorLy8gSWYgdGhleSB3ZXJlIHRoZW4gYWNjZXNzZXMgdG8gdGhlIGFyZ3VtZW50
cyB3b3VsZCByZXNvbHZlIHRvIGEgU2NvcGVPZmZzZXQgYW5kIG5vdCBhCisvLyBDYXB0dXJlZEFy
Z3VtZW50c09mZnNldC4KK2NsYXNzIENhcHR1cmVkQXJndW1lbnRzT2Zmc2V0IDogcHVibGljIEdl
bmVyaWNPZmZzZXQ8Q2FwdHVyZWRBcmd1bWVudHNPZmZzZXQ+IHsKK3B1YmxpYzoKKyAgICBDYXB0
dXJlZEFyZ3VtZW50c09mZnNldCgpIHsgfQorICAgIAorICAgIGV4cGxpY2l0IENhcHR1cmVkQXJn
dW1lbnRzT2Zmc2V0KHVuc2lnbmVkIG9mZnNldCkKKyAgICAgICAgOiBHZW5lcmljT2Zmc2V0KG9m
ZnNldCkKKyAgICB7CisgICAgfQorICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNv
bnN0OworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBDYXB0dXJlZEFyZ3Vt
ZW50c09mZnNldF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVj
dEFyZ3VtZW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0RpcmVjdEFyZ3VtZW50cy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjAg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBEaXJlY3RBcmd1bWVudHNfaAorI2RlZmluZSBEaXJlY3RBcmd1bWVudHNfaAorCisjaW5jbHVk
ZSAiSlNPYmplY3QuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKKy8vIFRoaXMgaXMgYW4gQXJndW1l
bnRzLWNsYXNzIG9iamVjdCB0aGF0IHdlIGNyZWF0ZSB3aGVuIHlvdSBzYXkgImFyZ3VtZW50cyIg
aW5zaWRlIGEgZnVuY3Rpb24sCisvLyBhbmQgbm9uZSBvZiB0aGUgYXJndW1lbnRzIGFyZSBjYXB0
dXJlZCBpbiB0aGUgZnVuY3Rpb24ncyBhY3RpdmF0aW9uLiBUaGUgZnVuY3Rpb24gd2lsbCBjb3B5
IGFsbAorLy8gb2YgaXRzIGFyZ3VtZW50cyBpbnRvIHRoaXMgb2JqZWN0LCBhbmQgYWxsIHN1YnNl
cXVlbnQgYWNjZXNzZXMgdG8gdGhlIGFyZ3VtZW50cyB3aWxsIGdvIHRocm91Z2gKKy8vIHRoaXMg
b2JqZWN0IHRoZXJlYWZ0ZXIuIFNwZWNpYWwgc3VwcG9ydCBpcyBpbiBwbGFjZSBmb3IgbWlzY2hl
dmlvdXMgZXZlbnRzIGxpa2UgdGhlIGFyZ3VtZW50cworLy8gYmVpbmcgZGVsZXRlZCAoc29tZXRo
aW5nIGxpa2UgImRlbGV0ZSBhcmd1bWVudHNbMF0iKSBvciByZWNvbmZpZ3VyZWQgKGJyb2FkbHks
IHdlIHNheSBkZWxldGlvbnMKKy8vIGFuZCByZWNvbmZpZ3VyYXRpb25zIG1lYW4gdGhhdCB0aGUg
cmVzcGVjdGl2ZSBhcmd1bWVudCB3YXMgIm92ZXJyaWRkZW4iKS4KKy8vCisvLyBUbyBzcGVlZCBh
bGxvY2F0aW9uLCB0aGlzIG9iamVjdCB3aWxsIGhvbGQgYWxsIG9mIHRoZSBhcmd1bWVudHMgaW4t
cGxhY2UuIFRoZSBhcmd1bWVudHMgYXMgd2VsbAorLy8gYXMgYSB0YWJsZSBvZiBmbGFncyBzYXlp
bmcgd2hpY2ggYXJndW1lbnRzIHdlcmUgb3ZlcnJpZGRlbi4KK2NsYXNzIERpcmVjdEFyZ3VtZW50
cyA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTTm9u
RmluYWxPYmplY3QgQmFzZTsKKworcHJpdmF0ZToKKyAgICBEaXJlY3RBcmd1bWVudHMoVk0mLCBT
dHJ1Y3R1cmUqKTsKKyAgICAKK3B1YmxpYzoKKyAgICBzdGF0aWMgRGlyZWN0QXJndW1lbnRzKiBj
cmVhdGUoVk0mLCBTdHJ1Y3R1cmUqLCBFeGVjU3RhdGUqKTsKKyAgICAKKyAgICBzdGF0aWMgdm9p
ZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgCisgICAgdWludDMy
X3QgbGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChVTkxJ
S0VMWShtX292ZXJyb2RlTGVuZ3RoKSkKKyAgICAgICAgICAgIHJldHVybiBnZXQoZXhlYywgZXhl
Yy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCkudG9VSW50MzIoZXhlYyk7CisgICAgICAgIHJldHVy
biBtX2xlbmd0aDsKKyAgICB9CisgICAgCisgICAgYm9vbCBjYW5HZXRJbmRleFF1aWNrbHkodWlu
dDMyX3QgaSkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBpIDwgbV9sZW5ndGggJiYgIW92
ZXJyaWRlRmxhZ3MoKVtpXTsKKyAgICB9CisgICAgCisgICAgSlNWYWx1ZSBnZXRJbmRleFF1aWNr
bHkodWludDMyX3QgaSkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZ
X0lNUExJQ0FUSU9OKGNhbkdldEluZGV4UXVpY2tseShpKSk7CisgICAgICAgIHJldHVybiBzdG9y
YWdlKClbaV0uZ2V0KCk7CisgICAgfQorICAgIAorICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYg
YXJndW1lbnQoQ2FwdHVyZWRBcmd1bWVudHNPZmZzZXQgb2Zmc2V0KQorICAgIHsKKyAgICAgICAg
QVNTRVJUKG9mZnNldCk7CisgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9O
KG9mZnNldC5vZmZzZXQoKSA8IG1fbGVuZ3RoKTsKKyAgICAgICAgcmV0dXJuIHN0b3JhZ2UoKVtv
ZmZzZXQub2Zmc2V0KCldOworICAgIH0KKyAgICAKKyAgICBERUNMQVJFX0lORk87CisgICAgCisg
ICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3Qq
LCBKU1ZhbHVlIHByb3RvdHlwZSk7CisgICAgCitwcml2YXRlOgorICAgIHN0YXRpYyBib29sIGdl
dE93blByb3BlcnR5U2xvdChKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJv
cGVydHlTbG90Jik7CisgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90QnlJbmRleChK
U09iamVjdCosIEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90
Jik7CisgICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNT
dGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKKyAgICBzdGF0aWMg
dm9pZCBwdXQoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQ
cm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgdm9pZCBwdXRCeUluZGV4KEpTQ2VsbCosIEV4ZWNT
dGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7
CisgICAgc3RhdGljIHZvaWQgZGVsZXRlUHJvcGVydHkoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJv
cGVydHlOYW1lKTsKKyAgICBzdGF0aWMgdm9pZCBkZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlNDZWxs
KiwgRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lKTsKKyAgICBzdGF0aWMgdm9pZCBk
ZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgY29u
c3QgUHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCBzaG91bGRUaHJvdyk7CisgICAgCisgICAgc3Rh
dGljIHB0cmRpZmZfdCBzdG9yYWdlT2Zmc2V0KCkKKyAgICB7CisgICAgICAgIHJldHVybiBXVEY6
OnJvdW5kVXBUb011bHRpcGxlT2Y8c2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPik+KHNpemVv
ZihEaXJlY3RBcmd1bWVudHMpKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIHB0cmRpZmZfdCBv
dmVycmlkZUZsYWdzT2Zmc2V0KHVpbnQzMl90IGxlbmd0aCkKKyAgICB7CisgICAgICAgIHJldHVy
biBzdG9yYWdlT2Zmc2V0KCkgKyBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSAqIGxlbmd0
aDsKKyAgICB9CisgICAgCisgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiBzdG9yYWdlKCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8V3JpdGVCYXJyaWVyPFVua25vd24+Kj4o
Yml0d2lzZV9jYXN0PGNoYXIqPih0aGlzKSArIHN0b3JhZ2VPZmZzZXQoKSk7CisgICAgfQorICAg
IAorICAgIGJvb2wqIG92ZXJyaWRlRmxhZ3MoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGJpdHdp
c2VfY2FzdDxXcml0ZUJhcnJpZXI8VW5rbm93bj4qPihiaXR3aXNlX2Nhc3Q8Y2hhcio+KHRoaXMp
ICsgb3ZlcnJpZGVGbGFnc09mZnNldChtX2xlbmd0aCkpOworICAgIH0KKyAgICAKKyAgICB1aW50
MzJfdCBtX2xlbmd0aDsgLy8gQWx3YXlzIHRoZSBhY3R1YWwgbGVuZ3RoIG9mIGNhcHR1cmVkIGFy
Z3VtZW50cyBhbmQgbmV2ZXIgd2hhdCB3YXMgc3RvcmVkIGludG8gdGhlIGxlbmd0aCBwcm9wZXJ0
eS4KKyAgICBib29sIG1fb3ZlcnJvZGVMZW5ndGg7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MK
KworI2VuZGlmIC8vIERpcmVjdEFyZ3VtZW50c19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0ZvcmVpZ25WYXJpYWJsZUluZGV4LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRm9yZWlnblZhcmlhYmxlSW5kZXguaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ZvcmVpZ25WYXJpYWJsZUluZGV4
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEZvcmVpZ25WYXJpYWJsZUluZGV4X2gK
KyNkZWZpbmUgRm9yZWlnblZhcmlhYmxlSW5kZXhfaAorCituYW1lc3BhY2UgSlNDIHsKKworY2xh
c3MgRm9yZWlnblZhcmlhYmxlSW5kZXggeworcHVibGljOgorICAgIEZvcmVpZ25WYXJpYWJsZUlu
ZGV4KCkKKyAgICAgICAgOiBtX2luZGV4KFVJTlRfTUFYKQorICAgIHsKKyAgICB9CisgICAgCisg
ICAgZXhwbGljaXQgRm9yZWlnblZhcmlhYmxlSW5kZXgodW5zaWduZWQgaW5kZXgpCisgICAgICAg
IDogbV9pbmRleChpbmRleCkKKyAgICB7CisgICAgfQorICAgIAorICAgIAorICAgIAorcHJpdmF0
ZToKKyAgICB1bnNpZ25lZCBtX2luZGV4OworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNl
bmRpZiAvLyBGb3JlaWduVmFyaWFibGVJbmRleF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0dlbmVyaWNPZmZzZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9HZW5lcmljT2Zmc2V0LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljT2Zmc2V0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwxMTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2lmbmRlZiBHZW5lcmljT2Zmc2V0X2gKKyNkZWZpbmUgR2VuZXJpY09mZnNldF9oCisK
KyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorCituYW1lc3BhY2UgSlNDIHsKKworLy8gQSBt
aXhpbiBmb3IgY3JlYXRpbmcgdGhlIHZhcmlvdXMga2luZHMgb2YgdmFyaWFibGUgb2Zmc2V0cyB0
aGF0IG91ciBlbmdpbmUgc3VwcG9ydHMuCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorY2xhc3MgR2Vu
ZXJpY09mZnNldCB7CitwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludmFsaWRP
ZmZzZXQgPSBVSU5UX01BWDsKKyAgICAKKyAgICBHZW5lcmljT2Zmc2V0KCkKKyAgICAgICAgOiBt
X29mZnNldChpbnZhbGlkT2Zmc2V0KQorICAgIHsKKyAgICB9CisgICAgCisgICAgZXhwbGljaXQg
R2VuZXJpY09mZnNldCh1bnNpZ25lZCBvZmZzZXQpCisgICAgICAgIDogbV9vZmZzZXQob2Zmc2V0
KQorICAgIHsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVy
biBtX29mZnNldCA9PSBpbnZhbGlkT2Zmc2V0OyB9CisgICAgCisgICAgdW5zaWduZWQgb2Zmc2V0
VW5jaGVja2VkKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX29mZnNldDsKKyAgICB9
CisgICAgCisgICAgdW5zaWduZWQgb2Zmc2V0KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VS
VChtX29mZnNldCAhPSBpbnZhbGlkT2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIG1fb2Zmc2V0Owor
ICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgVCYgb3RoZXIpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gbV9vZmZzZXQgPT0gb3RoZXIub2Zmc2V0VW5jaGVja2VkKCk7
CisgICAgfQorICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBUJiBvdGhlcikgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBtX29mZnNldCAhPSBvdGhlci5vZmZzZXRVbmNoZWNrZWQoKTsKKyAg
ICB9CisgICAgYm9vbCBvcGVyYXRvcjwoY29uc3QgVCYgb3RoZXIpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gbV9vZmZzZXQgPCBvdGhlci5vZmZzZXRVbmNoZWNrZWQoKTsKKyAgICB9Cisg
ICAgYm9vbCBvcGVyYXRvcj4oY29uc3QgVCYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gbV9vZmZzZXQgPiBvdGhlci5vZmZzZXRVbmNoZWNrZWQoKTsKKyAgICB9CisgICAgYm9v
bCBvcGVyYXRvcjw9KGNvbnN0IFQmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IG1fb2Zmc2V0IDw9IG90aGVyLm9mZnNldFVuY2hlY2tlZCgpOworICAgIH0KKyAgICBib29sIG9w
ZXJhdG9yPj0oY29uc3QgVCYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9v
ZmZzZXQgPj0gb3RoZXIub2Zmc2V0VW5jaGVja2VkKCk7CisgICAgfQorICAgIAorICAgIFQgb3Bl
cmF0b3IrKGludCB2YWx1ZSkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBUKG9mZnNldCgp
ICsgdmFsdWUpOworICAgIH0KKyAgICBUIG9wZXJhdG9yLShpbnQgdmFsdWUpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gVChvZmZzZXQoKSAtIHZhbHVlKTsKKyAgICB9CisgICAgVCYgb3Bl
cmF0b3IrPShpbnQgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gKnRoaXMgPSAqdGhpcyAr
IHZhbHVlOworICAgIH0KKyAgICBUJiBvcGVyYXRvci09KGludCB2YWx1ZSkKKyAgICB7CisgICAg
ICAgIHJldHVybiAqdGhpcyA9ICp0aGlzIC0gdmFsdWU7CisgICAgfQorICAgIAorcHJpdmF0ZToK
KyAgICB1bnNpZ25lZCBtX29mZnNldDsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5k
aWYgLy8gR2VuZXJpY09mZnNldF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQXJndW1lbnRzSXRlcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQXJndW1lbnRzSXRlcmF0b3IuY3BwCShyZXZpc2lvbiAxODA1Mjkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FyZ3VtZW50c0l0ZXJhdG9yLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
MywgMjAxNSBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0zMywxMCArMzMsMTggQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNv
bnN0IENsYXNzSW5mbyBKU0FyZ3VtZW50c0l0ZXJhdG9yOjpzX2luZm8gPSB7ICJBcmd1bWVudHNJ
dGVyYXRvciIsICZCYXNlOjpzX2luZm8sIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNBcmd1bWVu
dHNJdGVyYXRvcikgfTsKIAotdm9pZCBKU0FyZ3VtZW50c0l0ZXJhdG9yOjpmaW5pc2hDcmVhdGlv
bihWTSYgdm0sIEFyZ3VtZW50cyogYXJndW1lbnRzKQordm9pZCBKU0FyZ3VtZW50c0l0ZXJhdG9y
OjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIEpTT2JqZWN0KiBhcmd1bWVudHMpCiB7CiAgICAgQmFz
ZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIG1fYXJndW1lbnRzLnNldCh2bSwgdGhpcywgYXJn
dW1lbnRzKTsKIH0KIAorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcmd1bWVudHNGdW5j
SXRlcmF0b3IoRXhlY1N0YXRlKiBleGVjKQoreworICAgIEpTT2JqZWN0KiB0aGlzT2JqID0gZXhl
Yy0+dGhpc1ZhbHVlKCkudG9UaGlzKGV4ZWMsIFN0cmljdE1vZGUpLnRvT2JqZWN0KGV4ZWMpOwor
ICAgIGlmICghdGhpc09iai0+aW5oZXJpdHMoQXJndW1lbnRzOjppbmZvKCkpICYmICF0aGlzT2Jq
LT5pbmhlcml0cyhPdXRPZkJhbmRBcmd1bWVudHM6OmluZm8oKSkpCisgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUodGhyb3dUeXBlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJBdHRlbXB0
ZWQgdG8gdXNlIEFyZ3VtZW50cyBpdGVyYXRvciBvbiBub24tQXJndW1lbnRzIG9iamVjdCIpKSk7
CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU0FyZ3VtZW50c0l0ZXJhdG9yOjpjcmVhdGUo
ZXhlYy0+dm0oKSwgZXhlYy0+Y2FsbGVlKCktPmdsb2JhbE9iamVjdCgpLT5hcmd1bWVudHNJdGVy
YXRvclN0cnVjdHVyZSgpLCB0aGlzT2JqKSk7Cit9CisKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQXJndW1lbnRzSXRlcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FyZ3VtZW50c0l0ZXJhdG9yLmgJKHJldmlzaW9u
IDE4MDUyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJndW1lbnRzSXRl
cmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMywgMjAxNSBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiw3ICsyNiw3IEBACiAjaWZuZGVmIEpTQXJndW1l
bnRzSXRlcmF0b3JfaAogI2RlZmluZSBKU0FyZ3VtZW50c0l0ZXJhdG9yX2gKIAotI2luY2x1ZGUg
IkFyZ3VtZW50cy5oIgorI2luY2x1ZGUgIkpTT2JqZWN0LmgiCiAKIG5hbWVzcGFjZSBKU0Mgewog
CkBAIC00MSw3ICs0MSw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3Jl
YXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3Ry
dWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwogICAgIH0KIAotICAgIHN0YXRpYyBKU0FyZ3VtZW50c0l0
ZXJhdG9yKiBjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQXJndW1lbnRzKiBh
cmd1bWVudHMpCisgICAgc3RhdGljIEpTQXJndW1lbnRzSXRlcmF0b3IqIGNyZWF0ZShWTSYgdm0s
IFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU09iamVjdCogYXJndW1lbnRzKQogICAgIHsKICAgICAg
ICAgSlNBcmd1bWVudHNJdGVyYXRvciogaW5zdGFuY2UgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRl
Q2VsbDxKU0FyZ3VtZW50c0l0ZXJhdG9yPih2bS5oZWFwKSkgSlNBcmd1bWVudHNJdGVyYXRvcih2
bSwgc3RydWN0dXJlKTsKICAgICAgICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKHZtLCBhcmd1
bWVudHMpOwpAQCAtNTAsMTEgKzUwLDExIEBAIHB1YmxpYzoKIAogICAgIGJvb2wgbmV4dChDYWxs
RnJhbWUqIGNhbGxGcmFtZSwgSlNWYWx1ZSYgdmFsdWUpCiAgICAgewotICAgICAgICBpZiAobV9u
ZXh0SW5kZXggPj0gbV9hcmd1bWVudHMtPmxlbmd0aChjYWxsRnJhbWUpKQorICAgICAgICB1bnNp
Z25lZCBsZW5ndGggPQorICAgICAgICAgICAgbV9hcmd1bWVudHMtPmdldChjYWxsRnJhbWUsIGNh
bGxGcmFtZS0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCkudG9VSW50MzIoY2FsbEZyYW1lKTsKKyAg
ICAgICAgaWYgKG1fbmV4dEluZGV4ID49IGxlbmd0aCkKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgdmFsdWUgPSBtX2FyZ3VtZW50cy0+dHJ5R2V0QXJndW1lbnQobV9uZXh0SW5k
ZXgrKyk7Ci0gICAgICAgIGlmICghdmFsdWUpCi0gICAgICAgICAgICB2YWx1ZSA9IGpzVW5kZWZp
bmVkKCk7CisgICAgICAgIHZhbHVlID0gbV9hcmd1bWVudHMtPmdldEluZGV4KGNhbGxGcmFtZSwg
bV9uZXh0SW5kZXgrKyk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApAQCAtNjgsMTIg
KzY4LDE0IEBAIHByaXZhdGU6CiAgICAgewogICAgIH0KIAotICAgIHZvaWQgZmluaXNoQ3JlYXRp
b24oVk0mLCBBcmd1bWVudHMqKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgSlNPYmpl
Y3QqKTsKICAgICAKLSAgICBXcml0ZUJhcnJpZXI8QXJndW1lbnRzPiBtX2FyZ3VtZW50czsKKyAg
ICBXcml0ZUJhcnJpZXI8SlNPYmplY3Q+IG1fYXJndW1lbnRzOwogICAgIHNpemVfdCBtX25leHRJ
bmRleDsKIH07CiAKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJndW1lbnRzRnVuY0l0
ZXJhdG9yKEV4ZWNTdGF0ZSopOworCiB9CiAKICNlbmRpZiAvLyAhZGVmaW5lZChKU0FyZ3VtZW50
c0l0ZXJhdG9yX2gpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Vudmly
b25tZW50UmVjb3JkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0Vudmlyb25tZW50UmVjb3JkLmNwcAkocmV2aXNpb24gMTgwNTI5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNFbnZpcm9ubWVudFJlY29yZC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAy
MDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAw
NywgMjAwOCwgMjAxMiwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM1LDQgKzM1LDEyIEBAIG5hbWVzcGFjZSBK
U0MgewogCiBjb25zdCBDbGFzc0luZm8gSlNFbnZpcm9ubWVudFJlY29yZDo6c19pbmZvID0geyAi
RW52aXJvbm1lbnRSZWNvcmQiLCAmQmFzZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxF
KEpTRW52aXJvbm1lbnRSZWNvcmQpIH07CiAKK3ZvaWQgSlNFbnZpcm9ubWVudFJlY29yZDo6dmlz
aXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIEpT
RW52aXJvbm1lbnRSZWNvcmQqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNFbnZpcm9ubWVudFJlY29y
ZCo+KGNlbGwpOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5m
bygpKTsKKyAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOworICAg
IHZpc2l0b3IuYXBwZW5kVmFsdWVzKHRoaXNPYmplY3QtPnZhcmlhYmxlcygpLCBtX3N5bWJvbFRh
YmxlLT5zY29wZVNpemUoKSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNFbnZpcm9ubWVudFJlY29yZC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRW52aXJvbm1lbnRSZWNvcmQuaAko
cmV2aXNpb24gMTgwNTI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNFbnZp
cm9ubWVudFJlY29yZC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NiwxMSArNDYsMjYgQEAgY2xhc3Mg
SlNFbnZpcm9ubWVudFJlY29yZCA6IHB1YmxpYyBKU1N5bQogcHVibGljOgogICAgIHR5cGVkZWYg
SlNTeW1ib2xUYWJsZU9iamVjdCBCYXNlOwogCi0gICAgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3du
PiogcmVnaXN0ZXJzKCkgeyByZXR1cm4gbV9yZWdpc3RlcnM7IH0KLSAgICBXcml0ZUJhcnJpZXJC
YXNlPFVua25vd24+JiByZWdpc3RlckF0KGludCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9yZWdp
c3RlcnNbaW5kZXhdOyB9CisgICAgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiogdmFyaWFibGVz
KCkKKyAgICB7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8V3JpdGVCYXJyaWVyQmFzZTxV
bmtub3duPio+KGJpdHdpc2VfY2FzdDxjaGFyKj4odGhpcykgKyBvZmZzZXRPZlZhcmlhYmxlcygp
KTsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc1ZhbGlkKFNjb3BlT2Zmc2V0IG9mZnNldCkKKyAg
ICB7CisgICAgICAgIHJldHVybiAhIW9mZnNldCAmJiBvZmZzZXQub2Zmc2V0KCkgPCBtX3N5bWJv
bFRhYmxlLT5zY29wZVNpemUoKTsKKyAgICB9CisgICAgCisgICAgV3JpdGVCYXJyaWVyQmFzZTxV
bmtub3duPiYgdmFyaWFibGVBdChTY29wZU9mZnNldCBvZmZzZXQpIGNvbnN0CisgICAgeworICAg
ICAgICBBU1NFUlQoaXNWYWxpZChvZmZzZXQpKTsKKyAgICAgICAgcmV0dXJuIHZhcmlhYmxlcygp
W29mZnNldC5vZmZzZXQoKV07CisgICAgfQogCi0gICAgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3du
PiogY29uc3QgKiBhZGRyZXNzT2ZSZWdpc3RlcnMoKSBjb25zdCB7IHJldHVybiAmbV9yZWdpc3Rl
cnM7IH0KLSAgICBzdGF0aWMgc2l6ZV90IG9mZnNldE9mUmVnaXN0ZXJzKCkgeyByZXR1cm4gT0JK
RUNUX09GRlNFVE9GKEpTRW52aXJvbm1lbnRSZWNvcmQsIG1fcmVnaXN0ZXJzKTsgfQorICAgIHN0
YXRpYyBzaXplX3Qgb2Zmc2V0T2ZWYXJpYWJsZXMoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFdU
Rjo6cm91bmRVcFRvTXVsdGlwbGVPZjxzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KT4oc2l6
ZW9mKEpTRW52aXJvbm1lbnRSZWNvcmQpKTsKKyAgICB9CiAKICAgICBERUNMQVJFX0lORk87CiAK
QEAgLTYwLDE1ICs3NSwzNSBAQCBwcm90ZWN0ZWQ6CiAgICAgSlNFbnZpcm9ubWVudFJlY29yZCgK
ICAgICAgICAgVk0mIHZtLAogICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwKLSAgICAgICAg
UmVnaXN0ZXIqIHJlZ2lzdGVycywKICAgICAgICAgSlNTY29wZSogc2NvcGUsCiAgICAgICAgIFN5
bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSkKICAgICAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUsIHNj
b3BlLCBzeW1ib2xUYWJsZSkKLSAgICAgICAgLCBtX3JlZ2lzdGVycyhyZWludGVycHJldF9jYXN0
PFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qPihyZWdpc3RlcnMpKQogICAgIHsKICAgICB9Ci0K
LSAgICBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiBtX3JlZ2lzdGVyczsgLy8gInIiIGluIHRo
ZSBzdGFjay4KKyAgICAKKyAgICBzdGF0aWMgc2l6ZV90IGFsbG9jYXRpb25TaXplRm9yU2NvcGVT
aXplKHVuc2lnbmVkIHNjb3BlU2l6ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBvZmZzZXRPZlZh
cmlhYmxlcygpICsgc2NvcGVTaXplICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPik7Cisg
ICAgfQorICAgIAorICAgIHN0YXRpYyBzaXplX3QgYWxsb2NhdGlvblNpemUoU3ltYm9sVGFibGUq
IHN5bWJvbFRhYmxlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFsbG9jYXRpb25TaXplRm9yU2Nv
cGVTaXplKHN5bWJvbFRhYmxlLT5zY29wZVNpemUoKSk7CisgICAgfQorICAgIAorICAgIHZvaWQg
ZmluaXNoQ3JlYXRpb25VbmluaXRpYWxpemVkKFZNJiB2bSkKKyAgICB7CisgICAgICAgIEJhc2U6
OmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBmaW5pc2hDcmVhdGlv
bihWTSYgdm0pCisgICAgeworICAgICAgICBmaW5pc2hDcmVhdGlvblVuaW5pdGlhbGl6ZWQodm0p
OworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX3N5bWJvbFRhYmxlLT5zY29wZVNpemUoKTsg
aS0tOykgeworICAgICAgICAgICAgLy8gRmlsbGluZyB0aGlzIHdpdGggdW5kZWZpbmVkIGlzIHVz
ZWZ1bCBiZWNhdXNlIHRoYXQncyB3aGF0IHZhcmlhYmxlcyBzdGFydCBvdXQgYXMuCisgICAgICAg
ICAgICB2YXJpYWJsZUF0KGkpLnNldFVuZGVmaW5lZCgpOworICAgICAgICB9CisgICAgfQogfTsK
IAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0xleGljYWxFbnZpcm9ubWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNMZXhpY2FsRW52aXJvbm1lbnQuY3BwCShyZXZpc2lvbiAxODA1Mjkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xleGljYWxFbnZpcm9ubWVudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDA4LCAyMDA5LCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAwOCwgMjAwOSwgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQwLDI3ICs0MCwxOSBA
QCBuYW1lc3BhY2UgSlNDIHsKIAogY29uc3QgQ2xhc3NJbmZvIEpTTGV4aWNhbEVudmlyb25tZW50
OjpzX2luZm8gPSB7ICJKU0xleGljYWxFbnZpcm9ubWVudCIsICZCYXNlOjpzX2luZm8sIDAsIENS
RUFURV9NRVRIT0RfVEFCTEUoSlNMZXhpY2FsRW52aXJvbm1lbnQpIH07CiAKLXZvaWQgSlNMZXhp
Y2FsRW52aXJvbm1lbnQ6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYg
dmlzaXRvcikKLXsKLSAgICBKU0xleGljYWxFbnZpcm9ubWVudCogdGhpc09iamVjdCA9IGpzQ2Fz
dDxKU0xleGljYWxFbnZpcm9ubWVudCo+KGNlbGwpOwotICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5I
RVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKLSAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNP
YmplY3QsIHZpc2l0b3IpOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0aGlzT2JqZWN0LT5z
eW1ib2xUYWJsZSgpLT5jYXB0dXJlQ291bnQoKTsgKytpKQotICAgICAgICB2aXNpdG9yLmFwcGVu
ZCgmdGhpc09iamVjdC0+c3RvcmFnZSgpW2ldKTsKLX0KLQogaW5saW5lIGJvb2wgSlNMZXhpY2Fs
RW52aXJvbm1lbnQ6OnN5bWJvbFRhYmxlR2V0KFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFBy
b3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBTeW1ib2xUYWJsZUVudHJ5IGVudHJ5ID0gc3ltYm9s
VGFibGUoKS0+aW5saW5lR2V0KHByb3BlcnR5TmFtZS51aWQoKSk7CiAgICAgaWYgKGVudHJ5Lmlz
TnVsbCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICBTY29wZU9mZnNldCBvZmZzZXQg
PSBlbnRyeS5zY29wZU9mZnNldCgpOworCiAgICAgLy8gRGVmZW5kIGFnYWluc3QgdGhlIGluc3Bl
Y3RvciBhc2tpbmcgZm9yIGEgdmFyIGFmdGVyIGl0IGhhcyBiZWVuIG9wdGltaXplZCBvdXQuCi0g
ICAgaWYgKCFpc1ZhbGlkKGVudHJ5KSkKKyAgICBpZiAoIWlzVmFsaWQob2Zmc2V0KSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgc2xvdC5zZXRWYWx1ZSh0aGlzLCBEb250RW51bSwgcmVn
aXN0ZXJBdChlbnRyeS5nZXRJbmRleCgpKS5nZXQoKSk7CisgICAgc2xvdC5zZXRWYWx1ZSh0aGlz
LCBEb250RW51bSwgdmFyaWFibGVBdChvZmZzZXQpLmdldCgpKTsKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIApAQCAtNzAsMTEgKzYyLDEzIEBAIGlubGluZSBib29sIEpTTGV4aWNhbEVudmlyb25tZW50
OjpzeW1ib2wKICAgICBpZiAoZW50cnkuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAorICAgIFNjb3BlT2Zmc2V0IG9mZnNldCA9IGVudHJ5LnNjb3BlT2Zmc2V0KCk7CisKICAgICAv
LyBEZWZlbmQgYWdhaW5zdCB0aGUgaW5zcGVjdG9yIGFza2luZyBmb3IgYSB2YXIgYWZ0ZXIgaXQg
aGFzIGJlZW4gb3B0aW1pemVkIG91dC4KLSAgICBpZiAoIWlzVmFsaWQoZW50cnkpKQorICAgIGlm
ICghaXNWYWxpZChvZmZzZXQpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBkZXNjcmlw
dG9yLnNldERlc2NyaXB0b3IocmVnaXN0ZXJBdChlbnRyeS5nZXRJbmRleCgpKS5nZXQoKSwgZW50
cnkuZ2V0QXR0cmlidXRlcygpKTsKKyAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3IodmFyaWFi
bGVBdChvZmZzZXQpLmdldCgpLCBlbnRyeS5nZXRBdHRyaWJ1dGVzKCkpOwogICAgIHJldHVybiB0
cnVlOwogfQogCkBAIC05NSwxMiArODksMTMgQEAgaW5saW5lIGJvb2wgSlNMZXhpY2FsRW52aXJv
bm1lbnQ6OnN5bWJvbAogICAgICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIFN0cmlj
dE1vZGVSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7CiAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICAgICAgfQorICAgICAgICBTY29wZU9mZnNldCBvZmZzZXQgPSBpdGVyLT52YWx1ZS5z
Y29wZU9mZnNldCgpOwogICAgICAgICAvLyBEZWZlbmQgYWdhaW5zdCB0aGUgaW5zcGVjdG9yIGFz
a2luZyBmb3IgYSB2YXIgYWZ0ZXIgaXQgaGFzIGJlZW4gb3B0aW1pemVkIG91dC4KLSAgICAgICAg
aWYgKCFpc1ZhbGlkKGl0ZXItPnZhbHVlKSkKKyAgICAgICAgaWYgKCFpc1ZhbGlkKG9mZnNldCkp
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGlmIChWYXJpYWJsZVdhdGNocG9p
bnRTZXQqIHNldCA9IGl0ZXItPnZhbHVlLndhdGNocG9pbnRTZXQoKSkKLSAgICAgICAgICAgIHNl
dC0+aW52YWxpZGF0ZShWYXJpYWJsZVdyaXRlRmlyZURldGFpbCh0aGlzLCBwcm9wZXJ0eU5hbWUp
KTsgLy8gRG9uJ3QgbWVzcyBhcm91bmQgLSBpZiB3ZSBoYWQgZm91bmQgdGhpcyBzdGF0aWNhbGx5
LCB3ZSB3b3VsZCBoYXZlIGludmNhbGlkYXRlZCBpdC4KLSAgICAgICAgcmVnID0gJnJlZ2lzdGVy
QXQoaXRlci0+dmFsdWUuZ2V0SW5kZXgoKSk7CisgICAgICAgICAgICBzZXQtPmludmFsaWRhdGUo
VmFyaWFibGVXcml0ZUZpcmVEZXRhaWwodGhpcywgcHJvcGVydHlOYW1lKSk7IC8vIERvbid0IG1l
c3MgYXJvdW5kIC0gaWYgd2UgaGFkIGZvdW5kIHRoaXMgc3RhdGljYWxseSwgd2Ugd291bGQgaGF2
ZSBpbnZhbGlkYXRlZCBpdC4KKyAgICAgICAgcmVnID0gJnZhcmlhYmxlQXQob2Zmc2V0KTsKICAg
ICB9CiAgICAgcmVnLT5zZXQodm0sIHRoaXMsIHZhbHVlKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAg
LTExNiw3ICsxMTEsNyBAQCB2b2lkIEpTTGV4aWNhbEVudmlyb25tZW50OjpnZXRPd25Ob25JbmRl
CiAgICAgICAgIGZvciAoU3ltYm9sVGFibGU6Ok1hcDo6aXRlcmF0b3IgaXQgPSB0aGlzT2JqZWN0
LT5zeW1ib2xUYWJsZSgpLT5iZWdpbihsb2NrZXIpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAg
ICAgICAgIGlmIChpdC0+dmFsdWUuZ2V0QXR0cmlidXRlcygpICYgRG9udEVudW0gJiYgIXNob3Vs
ZEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMobW9kZSkpCiAgICAgICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgICAgICBpZiAoIXRoaXNPYmplY3QtPmlzVmFsaWQoaXQtPnZhbHVlKSkKKyAg
ICAgICAgICAgIGlmICghdGhpc09iamVjdC0+aXNWYWxpZChpdC0+dmFsdWUuc2NvcGVPZmZzZXQo
KSkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBwcm9wZXJ0eU5hbWVz
LmFkZChJZGVudGlmaWVyKGV4ZWMsIGl0LT5rZXkuZ2V0KCkpKTsKICAgICAgICAgfQpAQCAtMTM3
LDExICsxMzIsMTMgQEAgaW5saW5lIGJvb2wgSlNMZXhpY2FsRW52aXJvbm1lbnQ6OnN5bWJvbAog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBTeW1ib2xUYWJsZUVudHJ5JiBlbnRy
eSA9IGl0ZXItPnZhbHVlOwogICAgICAgICBBU1NFUlQoIWVudHJ5LmlzTnVsbCgpKTsKLSAgICAg
ICAgaWYgKCFpc1ZhbGlkKGVudHJ5KSkKKyAgICAgICAgCisgICAgICAgIFNjb3BlT2Zmc2V0IG9m
ZnNldCA9IGVudHJ5LnNjb3BlT2Zmc2V0KCk7CisgICAgICAgIGlmICghaXNWYWxpZChvZmZzZXQp
KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKICAgICAgICAgZW50cnkuc2V0
QXR0cmlidXRlcyhhdHRyaWJ1dGVzKTsKLSAgICAgICAgcmVnID0gJnJlZ2lzdGVyQXQoZW50cnku
Z2V0SW5kZXgoKSk7CisgICAgICAgIHJlZyA9ICZ2YXJpYWJsZUF0KG9mZnNldCk7CiAgICAgfQog
ICAgIHJlZy0+c2V0KHZtLCB0aGlzLCB2YWx1ZSk7CiAgICAgcmV0dXJuIHRydWU7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xleGljYWxFbnZpcm9ubWVudC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTGV4aWNhbEVudmlyb25t
ZW50LmgJKHJldmlzaW9uIDE4MDUyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTTGV4aWNhbEVudmlyb25tZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5LCAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSwgMjAxMy0yMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtNDEsMzMgKzQxLDI3IEBAIGNsYXNzIFJlZ2lzdGVyOwogICAgIAogY2xhc3Mg
SlNMZXhpY2FsRW52aXJvbm1lbnQgOiBwdWJsaWMgSlNFbnZpcm9ubWVudFJlY29yZCB7CiBwcml2
YXRlOgotICAgIEpTTGV4aWNhbEVudmlyb25tZW50KFZNJiwgQ2FsbEZyYW1lKiwgUmVnaXN0ZXIq
LCBKU1Njb3BlKiwgQ29kZUJsb2NrKik7CisgICAgSlNMZXhpY2FsRW52aXJvbm1lbnQoVk0mLCBT
dHJ1Y3R1cmUqLCBKU1Njb3BlKiwgU3ltYm9sVGFibGUqKTsKICAgICAKIHB1YmxpYzoKICAgICB0
eXBlZGVmIEpTRW52aXJvbm1lbnRSZWNvcmQgQmFzZTsKIAotICAgIHN0YXRpYyBKU0xleGljYWxF
bnZpcm9ubWVudCogY3JlYXRlKFZNJiB2bSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIFJlZ2lzdGVy
KiByZWdpc3RlcnMsIEpTU2NvcGUqIGN1cnJlbnRTY29wZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2sp
CisgICAgc3RhdGljIEpTTGV4aWNhbEVudmlyb25tZW50KiBjcmVhdGUoCisgICAgICAgIFZNJiB2
bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNTY29wZSogY3VycmVudFNjb3BlLCBT
eW1ib2xUYWJsZSogc3ltYm9sVGFibGUpCiAgICAgewotICAgICAgICBTeW1ib2xUYWJsZSogc3lt
Ym9sVGFibGUgPSBjb2RlQmxvY2stPnN5bWJvbFRhYmxlKCk7Ci0gICAgICAgIEFTU0VSVChjb2Rl
QmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlKTsKLSAgICAgICAgSlNMZXhpY2FsRW52
aXJvbm1lbnQqIGxleGljYWxFbnZpcm9ubWVudCA9IG5ldyAoCi0gICAgICAgICAgICBOb3ROdWxs
LAotICAgICAgICAgICAgYWxsb2NhdGVDZWxsPEpTTGV4aWNhbEVudmlyb25tZW50PigKLSAgICAg
ICAgICAgICAgICB2bS5oZWFwLAotICAgICAgICAgICAgICAgIGFsbG9jYXRpb25TaXplKHN5bWJv
bFRhYmxlKQotICAgICAgICAgICAgKQotICAgICAgICApIEpTTGV4aWNhbEVudmlyb25tZW50KHZt
LCBjYWxsRnJhbWUsIHJlZ2lzdGVycywgY3VycmVudFNjb3BlLCBjb2RlQmxvY2spOwotICAgICAg
ICBsZXhpY2FsRW52aXJvbm1lbnQtPmZpbmlzaENyZWF0aW9uKHZtKTsKLSAgICAgICAgcmV0dXJu
IGxleGljYWxFbnZpcm9ubWVudDsKKyAgICAgICAgSlNMZXhpY2FsRW52aXJvbm1lbnQqIHJlc3Vs
dCA9CisgICAgICAgICAgICBuZXcgKE5vdE51bGwsIGFsbG9jYXRpb25TaXplKHN5bWJvbFRhYmxl
KSkKKyAgICAgICAgICAgIEpTTGV4aWNhbEVudmlyb25tZW50KHZtLCBnbG9iYWxPYmplY3QtPmFj
dGl2YXRpb25TdHJ1Y3R1cmUoKSwgY3VycmVudFNjb3BlLCBzeW1ib2xUYWJsZSk7CisgICAgICAg
IHJlc3VsdC0+ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIH0KLSAgICAgICAgCisgICAgCiAgICAg
c3RhdGljIEpTTGV4aWNhbEVudmlyb25tZW50KiBjcmVhdGUoVk0mIHZtLCBDYWxsRnJhbWUqIGNh
bGxGcmFtZSwgSlNTY29wZSogY3VycmVudFNjb3BlLCBDb2RlQmxvY2sqIGNvZGVCbG9jaykKICAg
ICB7Ci0gICAgICAgIHJldHVybiBjcmVhdGUodm0sIGNhbGxGcmFtZSwgY2FsbEZyYW1lLT5yZWdp
c3RlcnMoKSArIGNvZGVCbG9jay0+ZnJhbWVQb2ludGVyT2Zmc2V0VG9HZXRBY3RpdmF0aW9uUmVn
aXN0ZXJzKCksIGN1cnJlbnRTY29wZSwgY29kZUJsb2NrKTsKKyAgICAgICAgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCA9IGNhbGxGcmFtZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpOworICAg
ICAgICBTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUgPSBjb2RlQmxvY2stPnN5bWJvbFRhYmxlKCk7
CisgICAgICAgIHJldHVybiBjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgY3VycmVudFNjb3BlLCBz
eW1ib2x0YWJsZSk7CiAgICAgfQotCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0Nl
bGwqLCBTbG90VmlzaXRvciYpOwotCisgICAgICAgIAogICAgIHN0YXRpYyBib29sIGdldE93blBy
b3BlcnR5U2xvdChKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlT
bG90Jik7CiAgICAgc3RhdGljIHZvaWQgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2Jq
ZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOwog
CkBAIC04MSwxMiArNzUsNiBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVh
dGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KSB7IHJldHVy
biBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBqc051bGwoKSwgVHlwZUluZm8o
QWN0aXZhdGlvbk9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsgfQogCi0gICAg
V3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiYgcmVnaXN0ZXJBdChpbnQpIGNvbnN0OwotICAgIGJv
b2wgaXNWYWxpZEluZGV4KGludCkgY29uc3Q7Ci0gICAgYm9vbCBpc1ZhbGlkKGNvbnN0IFN5bWJv
bFRhYmxlRW50cnkmKSBjb25zdDsKLSAgICBpbnQgcmVnaXN0ZXJzT2Zmc2V0KCk7Ci0gICAgc3Rh
dGljIGludCByZWdpc3RlcnNPZmZzZXQoU3ltYm9sVGFibGUqKTsKLQogcHJvdGVjdGVkOgogICAg
IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRlc0dldE93blBy
b3BlcnR5U2xvdCB8IE92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMgfCBCYXNlOjpTdHJ1Y3R1cmVG
bGFnczsKIApAQCAtOTYsMzIgKzg0LDEzIEBAIHByaXZhdGU6CiAgICAgYm9vbCBzeW1ib2xUYWJs
ZUdldChQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYsIGJvb2wmIHNsb3RJc1dyaXRlYWJsZSk7
CiAgICAgYm9vbCBzeW1ib2xUYWJsZVB1dChFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFs
dWUsIGJvb2wgc2hvdWxkVGhyb3cpOwogICAgIGJvb2wgc3ltYm9sVGFibGVQdXRXaXRoQXR0cmli
dXRlcyhWTSYsIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcyk7Ci0K
LSAgICBzdGF0aWMgc2l6ZV90IGFsbG9jYXRpb25TaXplKFN5bWJvbFRhYmxlKik7Ci0gICAgc3Rh
dGljIHNpemVfdCBzdG9yYWdlT2Zmc2V0KCk7Ci0KLSAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4q
IHN0b3JhZ2UoKTsgLy8gY2FwdHVyZUNvdW50KCkgbnVtYmVyIG9mIHJlZ2lzdGVycy4KIH07CiAK
LWlubGluZSBKU0xleGljYWxFbnZpcm9ubWVudDo6SlNMZXhpY2FsRW52aXJvbm1lbnQoVk0mIHZt
LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgUmVnaXN0ZXIqIHJlZ2lzdGVycywgSlNTY29wZSogY3Vy
cmVudFNjb3BlLCBDb2RlQmxvY2sqIGNvZGVCbG9jaykKLSAgICA6IEJhc2UoCi0gICAgICAgIHZt
LAotICAgICAgICBjYWxsRnJhbWUtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+YWN0aXZhdGlvblN0
cnVjdHVyZSgpLAotICAgICAgICByZWdpc3RlcnMsCi0gICAgICAgIGN1cnJlbnRTY29wZSwKLSAg
ICAgICAgY29kZUJsb2NrLT5zeW1ib2xUYWJsZSgpKQoraW5saW5lIEpTTGV4aWNhbEVudmlyb25t
ZW50OjpKU0xleGljYWxFbnZpcm9ubWVudChWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBK
U1Njb3BlKiBjdXJyZW50U2NvcGUsIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSkKKyAgICA6IEJh
c2Uodm0sIHN0cnVjdHVyZSwgY3VycmVudFNjb3BlLCBzeW1ib2xUYWJsZSkKIHsKLSAgICBTeW1i
b2xUYWJsZSogc3ltYm9sVGFibGUgPSBjb2RlQmxvY2stPnN5bWJvbFRhYmxlKCk7Ci0gICAgV3Jp
dGVCYXJyaWVyPFVua25vd24+KiBzdG9yYWdlID0gdGhpcy0+c3RvcmFnZSgpOwotICAgIHNpemVf
dCBjYXB0dXJlQ291bnQgPSBzeW1ib2xUYWJsZS0+Y2FwdHVyZUNvdW50KCk7Ci0gICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBjYXB0dXJlQ291bnQ7ICsraSkKLSAgICAgICAgbmV3IChOb3ROdWxs
LCAmc3RvcmFnZVtpXSkgV3JpdGVCYXJyaWVyPFVua25vd24+KFVuZGVmaW5lZFdyaXRlQmFycmll
clRhZyk7Ci0gICAgbV9yZWdpc3RlcnMgPSByZWludGVycHJldF9jYXN0X3B0cjxXcml0ZUJhcnJp
ZXJCYXNlPFVua25vd24+Kj4oCi0gICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHRoaXMp
ICsgcmVnaXN0ZXJzT2Zmc2V0KHN5bWJvbFRhYmxlKSk7CiB9CiAKLUpTTGV4aWNhbEVudmlyb25t
ZW50KiBhc0FjdGl2YXRpb24oSlNWYWx1ZSk7Ci0KIGlubGluZSBKU0xleGljYWxFbnZpcm9ubWVu
dCogYXNBY3RpdmF0aW9uKEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgQVNTRVJUKGFzT2JqZWN0KHZh
bHVlKS0+aW5oZXJpdHMoSlNMZXhpY2FsRW52aXJvbm1lbnQ6OmluZm8oKSkpOwpAQCAtMTMzLDQ5
ICsxMDIsNiBAQCBBTFdBWVNfSU5MSU5FIEpTTGV4aWNhbEVudmlyb25tZW50KiBSZWdpCiAgICAg
cmV0dXJuIGFzQWN0aXZhdGlvbihqc1ZhbHVlKCkpOwogfQogCi1pbmxpbmUgaW50IEpTTGV4aWNh
bEVudmlyb25tZW50OjpyZWdpc3RlcnNPZmZzZXQoU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlKQot
ewotICAgIHJldHVybiBzdG9yYWdlT2Zmc2V0KCkgKyAoKHN5bWJvbFRhYmxlLT5jYXB0dXJlQ291
bnQoKSAtIHN5bWJvbFRhYmxlLT5jYXB0dXJlU3RhcnQoKSAgLSAxKSAqIHNpemVvZihXcml0ZUJh
cnJpZXI8VW5rbm93bj4pKTsKLX0KLQotaW5saW5lIHNpemVfdCBKU0xleGljYWxFbnZpcm9ubWVu
dDo6c3RvcmFnZU9mZnNldCgpCi17Ci0gICAgcmV0dXJuIFdURjo6cm91bmRVcFRvTXVsdGlwbGVP
ZjxzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KT4oc2l6ZW9mKEpTTGV4aWNhbEVudmlyb25t
ZW50KSk7Ci19Ci0KLWlubGluZSBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIEpTTGV4aWNhbEVudmly
b25tZW50OjpzdG9yYWdlKCkKLXsKLSAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdF9wdHI8V3Jp
dGVCYXJyaWVyPFVua25vd24+Kj4oCi0gICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHRo
aXMpICsgc3RvcmFnZU9mZnNldCgpKTsKLX0KLQotaW5saW5lIHNpemVfdCBKU0xleGljYWxFbnZp
cm9ubWVudDo6YWxsb2NhdGlvblNpemUoU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlKQotewotICAg
IHNpemVfdCBvYmplY3RTaXplSW5CeXRlcyA9IFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZjxzaXpl
b2YoV3JpdGVCYXJyaWVyPFVua25vd24+KT4oc2l6ZW9mKEpTTGV4aWNhbEVudmlyb25tZW50KSk7
Ci0gICAgc2l6ZV90IHN0b3JhZ2VTaXplSW5CeXRlcyA9IHN5bWJvbFRhYmxlLT5jYXB0dXJlQ291
bnQoKSAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pOwotICAgIHJldHVybiBvYmplY3RT
aXplSW5CeXRlcyArIHN0b3JhZ2VTaXplSW5CeXRlczsKLX0KLQotaW5saW5lIGJvb2wgSlNMZXhp
Y2FsRW52aXJvbm1lbnQ6OmlzVmFsaWRJbmRleChpbnQgaW5kZXgpIGNvbnN0Ci17Ci0gICAgaWYg
KGluZGV4ID4gc3ltYm9sVGFibGUoKS0+Y2FwdHVyZVN0YXJ0KCkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICBpZiAoaW5kZXggPD0gc3ltYm9sVGFibGUoKS0+Y2FwdHVyZUVuZCgpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWlubGluZSBib29sIEpT
TGV4aWNhbEVudmlyb25tZW50Ojppc1ZhbGlkKGNvbnN0IFN5bWJvbFRhYmxlRW50cnkmIGVudHJ5
KSBjb25zdAotewotICAgIHJldHVybiBpc1ZhbGlkSW5kZXgoZW50cnkuZ2V0SW5kZXgoKSk7Ci19
Ci0KLWlubGluZSBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+JiBKU0xleGljYWxFbnZpcm9ubWVu
dDo6cmVnaXN0ZXJBdChpbnQgaW5kZXgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKGlzVmFsaWRJbmRl
eChpbmRleCkpOwotICAgIHJldHVybiBCYXNlOjpyZWdpc3RlckF0KGluZGV4KTsKLX0KLQogfSAv
LyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBKU0xleGljYWxFbnZpcm9ubWVudF9oCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU05hbWVTY29wZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNOYW1lU2NvcGUuY3BwCShyZXZp
c2lvbiAxODA1MjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU05hbWVTY29w
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDE0ICs0Nyw2IEBAIEpTTmFtZVNjb3BlKiBKU05h
bWVTY29wZTo6Y3JlYXRlKFZNJiB2bSwKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotdm9pZCBK
U05hbWVTY29wZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQotewotICAgIEpTTmFtZVNjb3BlKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTTmFtZVNjb3Bl
Kj4oY2VsbCk7Ci0gICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZv
KCkpOwotICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7Ci0gICAg
dmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fcmVnaXN0ZXJTdG9yZSk7Ci19Ci0KIEpTVmFs
dWUgSlNOYW1lU2NvcGU6OnRvVGhpcyhKU0NlbGwqLCBFeGVjU3RhdGUqIGV4ZWMsIEVDTUFNb2Rl
IGVjbWFNb2RlKQogewogICAgIGlmIChlY21hTW9kZSA9PSBTdHJpY3RNb2RlKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNOYW1lU2NvcGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU05hbWVTY29wZS5oCShyZXZpc2lvbiAxODA1
MjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU05hbWVTY29wZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00NCwzOCArNDQsMzcgQEAgcHVibGljOgogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+CiAgICAgc3RhdGljIFQqIGNyZWF0ZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTU2NvcGUqIGN1cnJlbnRTY29wZSwgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxl
LCBKU1ZhbHVlIHZhbHVlKQogICAgIHsKLSAgICAgICAgVCogc2NvcGVPYmplY3QgPSBuZXcgKE5v
dE51bGwsIGFsbG9jYXRlQ2VsbDxUPih2bS5oZWFwKSkgVCh2bSwgZ2xvYmFsT2JqZWN0LCBjdXJy
ZW50U2NvcGUsIHN5bWJvbFRhYmxlKTsKKyAgICAgICAgVCogc2NvcGVPYmplY3QgPSBuZXcgKAor
ICAgICAgICAgICAgTm90TnVsbCwgYWxsb2NhdGVDZWxsPFQ+KHZtLmhlYXAsIGFsbG9jYXRpb25T
aXplRm9yU2NvcGVTaXplKDEpKQorICAgICAgICAgICAgVCh2bSwgZ2xvYmFsT2JqZWN0LCBjdXJy
ZW50U2NvcGUsIHN5bWJvbFRhYmxlKTsKICAgICAgICAgc2NvcGVPYmplY3QtPmZpbmlzaENyZWF0
aW9uKHZtLCB2YWx1ZSk7CiAgICAgICAgIHJldHVybiBzY29wZU9iamVjdDsKICAgICB9CiAgICAg
CiAgICAgc3RhdGljIEpTTmFtZVNjb3BlKiBjcmVhdGUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpT
U2NvcGUqIGN1cnJlbnRTY29wZSwgU3ltYm9sVGFibGUqLCBKU1ZhbHVlLCBUeXBlKTsKIAotICAg
IHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKICAgICBz
dGF0aWMgSlNWYWx1ZSB0b1RoaXMoSlNDZWxsKiwgRXhlY1N0YXRlKiwgRUNNQU1vZGUpOwogICAg
IHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU09iamVjdCosIEV4ZWNTdGF0ZSosIFBy
b3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CiAgICAgc3RhdGljIHZvaWQgcHV0KEpTQ2VsbCos
IEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CiAK
ICAgICBERUNMQVJFX0lORk87CiAKLSAgICBKU1ZhbHVlIHZhbHVlKCkgY29uc3QgeyByZXR1cm4g
bV9yZWdpc3RlclN0b3JlLmdldCgpOyB9CisgICAgSlNWYWx1ZSB2YWx1ZSgpIGNvbnN0IHsgcmV0
dXJuIHZhcmlhYmxlQXQoMCkuZ2V0KCk7IH0KIAogcHJvdGVjdGVkOgogICAgIHZvaWQgZmluaXNo
Q3JlYXRpb24oVk0mIHZtLCBKU1ZhbHVlIHZhbHVlKQogICAgIHsKLSAgICAgICAgQmFzZTo6Zmlu
aXNoQ3JlYXRpb24odm0pOwotICAgICAgICBtX3JlZ2lzdGVyU3RvcmUuc2V0KHZtLCB0aGlzLCB2
YWx1ZSk7CisgICAgICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uVW5pbml0aWFsaXplZCh2bSk7Cisg
ICAgICAgIHZhcmlhYmxlQXQoMCkuc2V0KHZtLCB0aGlzLCB2YWx1ZSk7CiAgICAgfQogCiAgICAg
c3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVzR2V0T3duUHJv
cGVydHlTbG90IHwgQmFzZTo6U3RydWN0dXJlRmxhZ3M7CiAKICAgICBKU05hbWVTY29wZShWTSYg
dm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU1Njb3BlKiBuZXh0LCBTeW1ib2xUYWJsZSogc3lt
Ym9sVGFibGUpCi0gICAgICAgIDogQmFzZSh2bSwgc3RydWN0dXJlLCByZWludGVycHJldF9jYXN0
PFJlZ2lzdGVyKj4oJm1fcmVnaXN0ZXJTdG9yZSArIDEpLCBuZXh0LCBzeW1ib2xUYWJsZSkKKyAg
ICAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUsIG5leHQsIHN5bWJvbFRhYmxlKQogICAgIHsKKyAg
ICAgICAgQVNTRVJUKHN5bWJvbFRhYmxlLT5zY29wZVNpemUoKSA9PSAxKTsKICAgICB9Ci0KLXBy
aXZhdGU6Ci0gICAgV3JpdGVCYXJyaWVyPFVua25vd24+IG1fcmVnaXN0ZXJTdG9yZTsKIH07CiAK
IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFi
bGVPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuY3BwCShyZXZpc2lvbiAxODA1MjkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIs
IDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEyLCAyMDEzLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzMsMzIgKzMzLDMwIEBACiAKIG5hbWVzcGFjZSBK
U0MgewogCi1pbnQgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdDo6ZmluZFJlZ2lzdGVySW5kZXgo
dm9pZCogcmVnaXN0ZXJBZGRyZXNzKQorU2NvcGVPZmZzZXQgSlNTZWdtZW50ZWRWYXJpYWJsZU9i
amVjdDo6ZmluZFJlZ2lzdGVySW5kZXgodm9pZCogcmVnaXN0ZXJBZGRyZXNzKQogewogICAgIENv
bmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7CiAgICAgCi0gICAgZm9yIChpbnQgaSA9
IG1fcmVnaXN0ZXJzLnNpemUoKTsgaS0tOykgeworICAgIGZvciAodW5zaWduZWQgaSA9IG1fcmVn
aXN0ZXJzLnNpemUoKTsgaS0tOykgewogICAgICAgICBpZiAoJm1fcmVnaXN0ZXJzW2ldICE9IHJl
Z2lzdGVyQWRkcmVzcykKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICByZXR1cm4gaTsK
KyAgICAgICAgcmV0dXJuIFNjb3BlT2Zmc2V0KGkpOwogICAgIH0KICAgICBDUkFTSCgpOwotICAg
IHJldHVybiAtMTsKKyAgICByZXR1cm4gU2NvcGVPZmZzZXQoKTsKIH0KIAotaW50IEpTU2VnbWVu
dGVkVmFyaWFibGVPYmplY3Q6OmFkZFJlZ2lzdGVycyhpbnQgbnVtYmVyT2ZSZWdpc3RlcnNUb0Fk
ZCkKK1Njb3BlT2Zmc2V0IEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3Q6OmFkZFJlZ2lzdGVycyh1
bnNpZ25lZCBudW1iZXJPZlJlZ2lzdGVyc1RvQWRkKQogewogICAgIENvbmN1cnJlbnRKSVRMb2Nr
ZXIgbG9ja2VyKG1fbG9jayk7CiAgICAgCi0gICAgQVNTRVJUKG51bWJlck9mUmVnaXN0ZXJzVG9B
ZGQgPj0gMCk7Ci0gICAgCiAgICAgc2l6ZV90IG9sZFNpemUgPSBtX3JlZ2lzdGVycy5zaXplKCk7
CiAgICAgbV9yZWdpc3RlcnMuZ3JvdyhvbGRTaXplICsgbnVtYmVyT2ZSZWdpc3RlcnNUb0FkZCk7
CiAgICAgCiAgICAgZm9yIChzaXplX3QgaSA9IG51bWJlck9mUmVnaXN0ZXJzVG9BZGQ7IGktLTsp
CiAgICAgICAgIG1fcmVnaXN0ZXJzW29sZFNpemUgKyBpXS5zZXRXaXRob3V0V3JpdGVCYXJyaWVy
KGpzVW5kZWZpbmVkKCkpOwogICAgIAotICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KG9sZFNp
emUpOworICAgIHJldHVybiBTY29wZU9mZnNldChvbGRTaXplKTsKIH0KIAogdm9pZCBKU1NlZ21l
bnRlZFZhcmlhYmxlT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0
b3ImIHNsb3RWaXNpdG9yKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNT
ZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuaAkocmV2aXNpb24gMTgwNTI5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9i
amVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC01NywyNCArNTcsMjMgQEAgY2xhc3MgSlNTZWdtZW50
ZWRWYXJpYWJsZU9iamVjdCA6IHB1YmxpYwogcHVibGljOgogICAgIHR5cGVkZWYgSlNTeW1ib2xU
YWJsZU9iamVjdCBCYXNlOwogCi0gICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiByZWdpc3RlckF0
KGludCBpbmRleCkgeyByZXR1cm4gbV9yZWdpc3RlcnNbaW5kZXhdOyB9CisgICAgV3JpdGVCYXJy
aWVyPFVua25vd24+JiB2YXJpYWJsZUF0KFNjb3BlT2Zmc2V0IG9mZnNldCkgeyByZXR1cm4gbV92
YXJpYWJsZXNbb2Zmc2V0Lm9mZnNldCgpXTsgfQogICAgIAogICAgIC8vIFRoaXMgaXMgYSBzbG93
IG1ldGhvZCBjYWxsLCB3aGljaCBzZWFyY2hlcyB0aGUgcmVnaXN0ZXIgYmFuayB0byBmaW5kIHRo
ZSBpbmRleAogICAgIC8vIGdpdmVuIGEgcG9pbnRlci4gSXQgd2lsbCBDUkFTSCgpIGlmIGl0IGRv
ZXMgbm90IGZpbmQgdGhlIHJlZ2lzdGVyLiBPbmx5IHVzZSB0aGlzCiAgICAgLy8gaW4gZGVidWcg
Y29kZSAobGlrZSBieXRlY29kZSBkdW1waW5nKS4KLSAgICBKU19FWFBPUlRfUFJJVkFURSBpbnQg
ZmluZFJlZ2lzdGVySW5kZXgodm9pZCopOworICAgIEpTX0VYUE9SVF9QUklWQVRFIFNjb3BlT2Zm
c2V0IGZpbmRSZWdpc3RlckluZGV4KHZvaWQqKTsKICAgICAKLSAgICBXcml0ZUJhcnJpZXI8VW5r
bm93bj4qIGFzc2VydFJlZ2lzdGVySXNJblRoaXNPYmplY3QoV3JpdGVCYXJyaWVyPFVua25vd24+
KiByZWdpc3RlclBvaW50ZXIpCisgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiBhc3NlcnRWYXJp
YWJsZUlzSW5UaGlzT2JqZWN0KFdyaXRlQmFycmllcjxVbmtub3duPiogdmFyaWFibGVQb2ludGVy
KQogICAgIHsKLSNpZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgICAgIGZpbmRSZWdpc3RlckluZGV4
KHJlZ2lzdGVyUG9pbnRlcik7Ci0jZW5kaWYKKyAgICAgICAgaWYgKCFBU1NFUlRfRElTQUJMRUQp
CisgICAgICAgICAgICBmaW5kUmVnaXN0ZXJJbmRleChyZWdpc3RlclBvaW50ZXIpOwogICAgICAg
ICByZXR1cm4gcmVnaXN0ZXJQb2ludGVyOwogICAgIH0KICAgICAKICAgICAvLyBBZGRzIG51bWJl
ck9mUmVnaXN0ZXJzVG9BZGQgcmVnaXN0ZXJzLCBpbml0aWFsaXplcyB0aGVtIHRvIFVuZGVmaW5l
ZCwgYW5kIHJldHVybnMKICAgICAvLyB0aGUgaW5kZXggb2YgdGhlIGZpcnN0IG9uZSBhZGRlZC4K
LSAgICBKU19FWFBPUlRfUFJJVkFURSBpbnQgYWRkUmVnaXN0ZXJzKGludCBudW1iZXJPZlJlZ2lz
dGVyc1RvQWRkKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBTY29wZU9mZnNldCBhZGRSZWdpc3Rl
cnModW5zaWduZWQgbnVtYmVyT2ZSZWdpc3RlcnNUb0FkZCk7CiAgICAgCiAgICAgSlNfRVhQT1JU
X1BSSVZBVEUgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYp
OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2Jq
ZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1i
b2xUYWJsZU9iamVjdC5oCShyZXZpc2lvbiAxODA1MjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTc4LDcg
Kzc4LDcgQEAgaW5saW5lIGJvb2wgc3ltYm9sVGFibGVHZXQoCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICBTeW1ib2xUYWJsZUVudHJ5OjpGYXN0IGVudHJ5ID0gaXRlci0+dmFsdWU7CiAgICAg
QVNTRVJUKCFlbnRyeS5pc051bGwoKSk7Ci0gICAgc2xvdC5zZXRWYWx1ZShvYmplY3QsIGVudHJ5
LmdldEF0dHJpYnV0ZXMoKSB8IERvbnREZWxldGUsIG9iamVjdC0+cmVnaXN0ZXJBdChlbnRyeS5n
ZXRJbmRleCgpKS5nZXQoKSk7CisgICAgc2xvdC5zZXRWYWx1ZShvYmplY3QsIGVudHJ5LmdldEF0
dHJpYnV0ZXMoKSB8IERvbnREZWxldGUsIG9iamVjdC0+dmFyaWFibGVBdChlbnRyeS5zY29wZU9m
ZnNldCgpKS5nZXQoKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTk0LDcgKzk0LDcgQEAg
aW5saW5lIGJvb2wgc3ltYm9sVGFibGVHZXQoCiAgICAgU3ltYm9sVGFibGVFbnRyeTo6RmFzdCBl
bnRyeSA9IGl0ZXItPnZhbHVlOwogICAgIEFTU0VSVCghZW50cnkuaXNOdWxsKCkpOwogICAgIGRl
c2NyaXB0b3Iuc2V0RGVzY3JpcHRvcigKLSAgICAgICAgb2JqZWN0LT5yZWdpc3RlckF0KGVudHJ5
LmdldEluZGV4KCkpLmdldCgpLCBlbnRyeS5nZXRBdHRyaWJ1dGVzKCkgfCBEb250RGVsZXRlKTsK
KyAgICAgICAgb2JqZWN0LT52YXJpYWJsZUF0KGVudHJ5LnNjb3BlT2Zmc2V0KCkpLmdldCgpLCBl
bnRyeS5nZXRBdHRyaWJ1dGVzKCkgfCBEb250RGVsZXRlKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IApAQCAtMTEwLDcgKzExMCw3IEBAIGlubGluZSBib29sIHN5bWJvbFRhYmxlR2V0KAogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgU3ltYm9sVGFibGVFbnRyeTo6RmFzdCBlbnRyeSA9IGl0ZXIt
PnZhbHVlOwogICAgIEFTU0VSVCghZW50cnkuaXNOdWxsKCkpOwotICAgIHNsb3Quc2V0VmFsdWUo
b2JqZWN0LCBlbnRyeS5nZXRBdHRyaWJ1dGVzKCkgfCBEb250RGVsZXRlLCBvYmplY3QtPnJlZ2lz
dGVyQXQoZW50cnkuZ2V0SW5kZXgoKSkuZ2V0KCkpOworICAgIHNsb3Quc2V0VmFsdWUob2JqZWN0
LCBlbnRyeS5nZXRBdHRyaWJ1dGVzKCkgfCBEb250RGVsZXRlLCBvYmplY3QtPnZhcmlhYmxlQXQo
ZW50cnkuc2NvcGVPZmZzZXQoKSkuZ2V0KCkpOwogICAgIHNsb3RJc1dyaXRlYWJsZSA9ICFlbnRy
eS5pc1JlYWRPbmx5KCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC0xNDUsNyArMTQ1LDcgQEAg
aW5saW5lIGJvb2wgc3ltYm9sVGFibGVQdXQoCiAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM0NjAxCiAgICAgICAgICAgICBzZXQtPm5vdGlm
eVdyaXRlKHZtLCB2YWx1ZSwgb2JqZWN0LCBwcm9wZXJ0eU5hbWUpOwogICAgICAgICB9Ci0gICAg
ICAgIHJlZyA9ICZvYmplY3QtPnJlZ2lzdGVyQXQoZmFzdEVudHJ5LmdldEluZGV4KCkpOworICAg
ICAgICByZWcgPSAmb2JqZWN0LT52YXJpYWJsZUF0KGZhc3RFbnRyeS5zY29wZU9mZnNldCgpKTsK
ICAgICB9CiAgICAgLy8gSSdkIHByZWZlciB3ZSBub3QgaG9sZCBsb2NrIHdoaWxlIGV4ZWN1dGlu
ZyBiYXJyaWVycywgc2luY2UgSSBwcmVmZXIgdG8gcmVzZXJ2ZQogICAgIC8vIHRoZSByaWdodCBm
b3IgYmFycmllcnMgdG8gYmUgYWJsZSB0byB0cmlnZ2VyIEdDLiBBbmQgSSBkb24ndCB3YW50IHRv
IGhvbGQgVk0KQEAgLTE3Myw3ICsxNzMsNyBAQCBpbmxpbmUgYm9vbCBzeW1ib2xUYWJsZVB1dFdp
dGhBdHRyaWJ1dGVzCiAgICAgICAgIGlmIChWYXJpYWJsZVdhdGNocG9pbnRTZXQqIHNldCA9IGVu
dHJ5LndhdGNocG9pbnRTZXQoKSkKICAgICAgICAgICAgIHNldC0+bm90aWZ5V3JpdGUodm0sIHZh
bHVlLCBvYmplY3QsIHByb3BlcnR5TmFtZSk7CiAgICAgICAgIGVudHJ5LnNldEF0dHJpYnV0ZXMo
YXR0cmlidXRlcyk7Ci0gICAgICAgIHJlZyA9ICZvYmplY3QtPnJlZ2lzdGVyQXQoZW50cnkuZ2V0
SW5kZXgoKSk7CisgICAgICAgIHJlZyA9ICZvYmplY3QtPnZhcmlhYmxlQXQoZW50cnkuc2NvcGVP
ZmZzZXQoKSk7CiAgICAgfQogICAgIHJlZy0+c2V0KHZtLCBvYmplY3QsIHZhbHVlKTsKICAgICBy
ZXR1cm4gdHJ1ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL091dE9mQmFu
ZEFyZ3VtZW50cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvT3V0T2ZCYW5kQXJndW1lbnRzLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL091dE9mQmFuZEFyZ3VtZW50cy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwxMjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk91dE9mQmFuZEFyZ3VtZW50cy5o
IgorCisjaW5jbHVkZSAiSlNBcmd1bWVudHNJdGVyYXRvci5oIgorI2luY2x1ZGUgIkpTQ0lubGlu
ZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK1NUQVRJQ19BU1NFUlRfSVNfVFJJVklBTExZX0RF
U1RSVUNUSUJMRShPdXRPZkJhbmRBcmd1bWVudHMpOworCitjb25zdCBDbGFzc0luZm8gT3V0T2ZC
YW5kQXJndW1lbnRzOjpzX2luZm8gPSB7ICJBcmd1bWVudHMiLCAmQmFzZTo6c19pbmZvLCAwLCBD
UkVBVEVfTUVUSE9EX1RBQkxFKE91dE9mQmFuZEFyZ3VtZW50cykgfTsKKworT3V0T2ZCYW5kQXJn
dW1lbnRzOjpPdXRPZkJhbmRBcmd1bWVudHMoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkK
KyAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSwgbnVsbHB0cikKK3sKK30KKworT3V0T2ZCYW5kQXJn
dW1lbnRzKiBPdXRPZkJhbmRBcmd1bWVudHM6OmNyZWF0ZUVtcHR5KFZNJiB2bSwgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCkKK3sKKyAgICBPdXRPZkJhbmRBcmd1bWVudHMqIHJlc3VsdCA9
IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPE91dE9mQmFuZEFyZ3VtZW50cz4odm0uaGVhcCkp
CisgICAgICAgIE91dE9mQmFuZEFyZ3VtZW50cyh2bSwgZ2xvYmFsT2JqZWN0LT5vdXRPZkJhbmRB
cmd1bWVudHNTdHJ1Y3R1cmUoKSk7CisgICAgcmVzdWx0LT5maW5pc2hDcmVhdGlvbih2bSk7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKworT3V0T2ZCYW5kQXJndW1lbnRzKiBPdXRPZkJhbmRBcmd1
bWVudHM6OmNyZWF0ZUVtcHR5KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICAvLyBOQi4gU29tZSBj
bGllbnRzIG1pZ2h0IGV4cGVjdCB0aGF0IHRoZSBnbG9iYWwgb2JqZWN0IG9mIG9mIHRoaXMgb2Jq
ZWN0IGlzIHRoZSBnbG9iYWwgb2JqZWN0CisgICAgLy8gb2YgdGhlIGNhbGxlZS4gV2UgZG9uJ3Qg
ZG8gdGhpcyBmb3Igbm93LCBidXQgbWF5YmUgd2Ugc2hvdWxkLgorICAgIHJldHVybiBjcmVhdGVF
bXB0eShleGVjLT52bSgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpOworfQorCitPdXRP
ZkJhbmRBcmd1bWVudHMqIE91dE9mQmFuZEFyZ3VtZW50czo6Y3JlYXRlV2l0aElubGluZUZyYW1l
KEV4ZWNTdGF0ZSogbXlGcmFtZSwgRXhlY1N0YXRlKiB0YXJnZXRGcmFtZSwgSW5saW5lQ2FsbEZy
YW1lKiBpbmxpbmVDYWxsRnJhbWUsIEFyZ3VtZW50c01vZGUgbW9kZSkKK3sKKyAgICBWTSYgdm0g
PSBteUZyYW1lLT52bSgpOworICAgIAorICAgIEpTRnVuY3Rpb24qIGNhbGxlZTsKKyAgICBGdW5j
dGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGU7CisgICAgCisgICAgaWYgKGlubGluZUNhbGxGcmFt
ZSkgeworICAgICAgICBjYWxsZWUgPSBqc0Nhc3Q8SlNGdW5jdGlvbio+KGlubGluZUNhbGxGcmFt
ZS0+Y2FsbGVlUmVjb3ZlcnkucmVjb3Zlcih0YXJnZXRGcmFtZSkpOworICAgICAgICBleGVjdXRh
YmxlID0ganNDYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGlubGluZUNhbGxGcmFtZS0+ZXhlY3V0
YWJsZS5nZXQoKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgY2FsbGVlID0ganNDYXN0PEpTRnVu
Y3Rpb24qPih0YXJnZXRGcmFtZS0+Y2FsbGVlKCkpOworICAgICAgICBleGVjdXRhYmxlID0ganND
YXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KHRhcmdldEZyYW1lLT5jb2RlQmxvY2soKS0+b3duZXJF
eGVjdXRhYmxlKCkpOworICAgIH0KKyAgICAKKyAgICAvLyBOQi4gSXQncyBzb21ld2hhdCBhcmJp
dHJhcnkgdGhhdCB3ZSB0aWUgdGhlIHN0cmljdG5lc3Mgb2YgdGhpcyBvYmplY3QgdG8gdGhlIHN0
cmljdG5lc3Mgb2YKKyAgICAvLyB0aGUgY2FsbGVlLgorICAgIGJvb2wgaXNTdHJpY3RNb2RlID0g
ZXhlY3V0YWJsZS0+aXNTdHJpY3RNb2RlKCk7CisKKyAgICBPdXRPZkJhbmRBcmd1bWVudHMqIHJl
c3VsdCA9IGNyZWF0ZUVtcHR5KG15RnJhbWUpOworICAgIAorICAgIHVuc2lnbmVkIGxlbmd0aDsK
KyAgICBzd2l0Y2ggKG1vZGUpIHsKKyAgICBjYXNlIENsb25lZEFyZ3VtZW50c0NyZWF0aW9uTW9k
ZTogeworICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lKSB7CisgICAgICAgICAgICBpZiAoaW5s
aW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50UmVnaXN0ZXIuaXNWYWxpZCgpKQorICAgICAgICAg
ICAgICAgIGxlbmd0aCA9IGV4ZWMtPnIoaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50UmVn
aXN0ZXIpLnVuYm94ZWRJbnQzMigpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
IGxlbmd0aCA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKTsKKyAgICAgICAgICAg
IGxlbmd0aC0tOworICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBs
ZW5ndGg7IGktLTspCisgICAgICAgICAgICAgICAgcmVzdWx0LT5wdXREaXJlY3RJbmRleChteUZy
YW1lLCBpLCBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50c1tpXS5yZWNvdmVyKHRhcmdldEZyYW1l
KSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBsZW5ndGggPSB0YXJnZXRGcmFtZS0+
YXJndW1lbnRDb3VudCgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSBsZW5ndGg7IGktLTspCisgICAgICAgICAgICAgICAgcmVzdWx0LT5wdXREaXJlY3RJbmRl
eChteUZyYW1lLCBpLCB0YXJnZXRGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoaSkpOworICAgICAg
ICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBGYWtlQXJndW1l
bnRWYWx1ZXNDcmVhdGlvbk1vZGU6IHsKKyAgICAgICAgbGVuZ3RoID0gMDsKKyAgICAgICAgYnJl
YWs7CisgICAgfSB9CisgICAgCisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5
TmFtZXMtPmxlbmd0aCwganNOdW1iZXIobGVuZ3RoKSk7CisgICAgaWYgKGlzU3RyaWN0TW9kZSkg
eworICAgICAgICByZXN1bHQtPnB1dERpcmVjdEFjY2Vzc29yKGV4ZWMsIHZtLnByb3BlcnR5TmFt
ZXMtPmNhbGxlZSwgdGhpc09iamVjdC0+Z2xvYmFsT2JqZWN0KCktPnRocm93VHlwZUVycm9yR2V0
dGVyU2V0dGVyKGV4ZWMtPnZtKCkpLCBEb250RGVsZXRlIHwgRG9udEVudW0gfCBBY2Nlc3Nvcik7
CisgICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0QWNjZXNzb3IoZXhlYywgdm0ucHJvcGVydHlOYW1l
cy0+Y2FsbGVlLCB0aGlzT2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+dGhyb3dUeXBlRXJyb3JHZXR0
ZXJTZXR0ZXIoZXhlYy0+dm0oKSksIERvbnREZWxldGUgfCBEb250RW51bSB8IEFjY2Vzc29yKTsK
KyAgICB9IGVsc2UKKyAgICAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFt
ZXMtPmNhbGxlZSwgSlNWYWx1ZShjYWxsZWUpKTsKKyAgICAKKyAgICByZXN1bHQtPkpTQ19OQVRJ
VkVfRlVOQ1RJT04odm0ucHJvcGVydHlOYW1lcy0+aXRlcmF0b3JQcml2YXRlTmFtZSwgYXJndW1l
bnRzRnVuY0l0ZXJhdG9yLCBEb250RW51bSwgMCk7Cit9CisKK091dE9mQmFuZEFyZ3VtZW50cyog
T3V0T2ZCYW5kQXJndW1lbnRzOjpjcmVhdGVXaXRoTWFjaGluZUZyYW1lKEV4ZWNTdGF0ZSogbXlG
cmFtZSwgRXhlY1N0YXRlKiB0YXJnZXRGcmFtZSwgQXJndW1lbnRzTW9kZSBtb2RlKQoreworICAg
IHJldHVybiBjcmVhdGVXaXRoSW5saW5lRnJhbWUobXlGcmFtZSwgdGFyZ2V0RnJhbWUsIG51bGxw
dHIsIG1vZGUpOworfQorCitTdHJ1Y3R1cmUqIE91dE9mQmFuZEFyZ3VtZW50czo6Y3JlYXRlU3Ry
dWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90
b3R5cGUpCit7CisgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3Qs
IHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkp
OworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvT3V0T2ZCYW5kQXJndW1lbnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvT3V0T2ZCYW5kQXJndW1lbnRzLmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PdXRPZkJhbmRBcmd1bWVudHMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpZm5kZWYgT3V0T2ZCYW5kQXJndW1lbnRzX2gKKyNkZWZpbmUgT3V0
T2ZCYW5kQXJndW1lbnRzX2gKKworI2luY2x1ZGUgIkFyZ3VtZW50c01vZGUuaCIKKyNpbmNsdWRl
ICJKU09iamVjdC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworLy8gVGhpcyBpcyBhbiBBcmd1bWVu
dHMtY2xhc3Mgb2JqZWN0IHRoYXQgd2UgY3JlYXRlIHdoZW4geW91IGRvIGZ1bmN0aW9uLmFyZ3Vt
ZW50cy4gSXQgYmVoYXZlcworLy8gZW50aXJlbHkgbGlrZSBhbiBvcmRpbmFyeSBKYXZhU2NyaXB0
IG9iamVjdC4gQWxsIG9mIHRoZSBhcmd1bWVudHMgdmFsdWVzIGFyZSBzaW1wbHkgY29waWVkIGZy
b20KKy8vIHRoZSBzdGFjayAocG9zc2libHkgdmlhIHNvbWUgc29waGlzdGljYXRlZCBWYWx1ZVJl
Y292ZXJ5J3MgaWYgYW4gb3B0aW1pemluZyBjb21waWxlciBpcyBpbgorLy8gcGxheSkgYW5kIHRo
ZSBhcHByb3ByaWF0ZSBwcm9wZXJ0aWVzIG9mIHRoZSBvYmplY3QgYXJlIHBvcHVsYXRlZC4gVGhl
IG9ubHkgcmVhc29uIHdoeSB3ZSBuZWVkCisvLyBhIHNwZWNpYWwgY2xhc3MgaXMgdG8gbWFrZSB0
aGUgb2JqZWN0IGNsYWltIHRvIGJlICJBcmd1bWVudHMiIGZyb20gYSB0b1N0cmluZyBzdGFuZHBv
aW50LgorLy8KKy8vIE5vdGUgdGhhdCB0aGlzIGNsYXNzIGRvZXMgYSBiYWQgam9iIG9mIGJlaW5n
IGZhc3QuIFRoYXQncyBzb21ld2hhdCBpbnRlbnRpb25hbC4gV2UgZXhwZWN0IHVzZXMKKy8vIG9m
IGZ1bmN0aW9uLmFyZ3VtZW50cyB0byBiZSByYXJlIG9uIHRoZSBtb2Rlcm4gd2ViLiBZb3Ugd2ls
bCBnZXQgcGFydGljdWxhcmx5IGJhZCBwZXJmb3JtYW5jZQorLy8gaWYgeW91IHVzZSBmdW5jdGlv
bi5hcmd1bWVudHMgaW4gc3RyaWN0IG1vZGUuCitjbGFzcyBPdXRPZkJhbmRBcmd1bWVudHMgOiBw
dWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBKU05vbkZpbmFs
T2JqZWN0IEJhc2U7CisgICAgCitwcml2YXRlOgorICAgIE91dE9mQmFuZEFyZ3VtZW50cyhWTSYs
IFN0cnVjdHVyZSopOworCitwdWJsaWM6CisgICAgc3RhdGljIE91dE9mQmFuZEFyZ3VtZW50cyog
Y3JlYXRlRW1wdHkoVk0mLCBKU0dsb2JhbE9iamVjdCopOworICAgIHN0YXRpYyBPdXRPZkJhbmRB
cmd1bWVudHMqIGNyZWF0ZUVtcHR5KEV4ZWNTdGF0ZSopOworICAgIHN0YXRpYyBPdXRPZkJhbmRB
cmd1bWVudHMqIGNyZWF0ZVdpdGhJbmxpbmVGcmFtZShFeGVjU3RhdGUqIG15RnJhbWUsIEV4ZWNT
dGF0ZSogdGFyZ2V0RnJhbWUsIElubGluZUNhbGxGcmFtZSosIEFyZ3VtZW50c01vZGUpOworICAg
IHN0YXRpYyBPdXRPZkJhbmRBcmd1bWVudHMqIGNyZWF0ZVdpdGhNYWNoaW5lRnJhbWUoRXhlY1N0
YXRlKiBteUZyYW1lLCBFeGVjU3RhdGUqIHRhcmdldEZyYW1lLCBBcmd1bWVudHNNb2RlKTsKKyAg
ICAKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9i
amVjdCosIEpTVmFsdWUgcHJvdG90eXBlKTsKKyAgICAKKyAgICBERUNMQVJFX0lORk87Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIE91dE9mQmFuZEFyZ3VtZW50c19oCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlT2Zmc2V0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZU9mZnNldC5jcHAJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZU9mZnNl
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiU2NvcGVPZmZzZXQuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3ZvaWQgU2NvcGVPZmZzZXQ6
OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBpZiAoISp0aGlzKSB7CisgICAg
ICAgIG91dC5wcmludCgic2NvcGVJbnZhbGlkIik7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgCisgICAgb3V0LnByaW50KCJzY29wZSIsIG9mZnNldCgpKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlT2Zmc2V0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVPZmZz
ZXQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3Bl
T2Zmc2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFNjb3BlT2Zmc2V0X2gKKyNk
ZWZpbmUgU2NvcGVPZmZzZXRfaAorCisjaW5jbHVkZSAiR2VuZXJpY09mZnNldC5oIgorI2luY2x1
ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgSlNDIHsKKworLy8gVGhpcyBpcyBh
biBvZmZzZXQgaW50byBhIHNjb3BlIG9mIHNvbWUga2luZC4gSXQgY291bGQgYmUgYW4gYWN0aXZh
dGlvbiBzY29wZSBvciBpdCBjb3VsZCBiZSBhCisvLyBnbG9iYWwgb2JqZWN0LgorY2xhc3MgU2Nv
cGVPZmZzZXQgOiBwdWJsaWMgR2VuZXJpY09mZnNldDxTY29wZU9mZnNldD4geworcHVibGljOgor
ICAgIFNjb3BlT2Zmc2V0KCkgeyB9CisgICAgCisgICAgZXhwbGljaXQgU2NvcGVPZmZzZXQodW5z
aWduZWQgb2Zmc2V0KQorICAgICAgICA6IEdlbmVyaWNPZmZzZXQob2Zmc2V0KQorICAgIHsKKyAg
ICB9CisgICAgCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIFNjb3BlT2Zmc2V0X2gKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHMuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDk1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgU2NvcGVkQXJndW1lbnRzX2gKKyNkZWZpbmUg
U2NvcGVkQXJndW1lbnRzX2gKKworI2luY2x1ZGUgIkpTT2JqZWN0LmgiCisKK25hbWVzcGFjZSBK
U0MgeworCisvLyBUaGlzIGlzIGFuIEFyZ3VtZW50cy1jbGFzcyBvYmplY3QgdGhhdCB3ZSBjcmVh
dGUgd2hlbiB5b3Ugc2F5ICJhcmd1bWVudHMiIGluc2lkZSBhIGZ1bmN0aW9uLAorLy8gYW5kIG9u
ZSBvciBtb3JlIG9mIHRoZSBhcmd1bWVudHMgbWF5IGJlIGNhcHR1cmVkIGluIHRoZSBmdW5jdGlv
bidzIGFjdGl2YXRpb24uIFRoZSBmdW5jdGlvbgorLy8gd2lsbCBjb3B5IGFsbCBvZiBpdHMgYXJn
dW1lbnRzIGludG8gdGhlIGFjdGl2YXRpb24gYW5kIHRoZW4gY3JlYXRlIHRoaXMgb2JqZWN0LiBU
aGlzIG9iamVjdAorLy8gd2lsbCB1c2UgdGhlIHN5bWJvbCB0YWJsZSdzIFNjb3BlZEFyZ3VtZW50
c1RhYmxlIGFuZCB0aGUgYWN0aXZhdGlvbiB0byBoYW5kbGUgYWxsIGluZGV4ZWQKKy8vIGxvb2t1
cHMuCitjbGFzcyBTY29wZWRBcmd1bWVudHMgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7Citw
dWJsaWM6CisgICAgdHlwZWRlZiBKU05vbkZpbmFsT2JqZWN0IEJhc2U7CisKK3ByaXZhdGU6Cisg
ICAgU2NvcGVkQXJndW1lbnRzKFZNJiwgU3RydWN0dXJlKik7CisKK3B1YmxpYzoKKyAgICBzdGF0
aWMgU2NvcGVkQXJndW1lbnRzKiBjcmVhdGUoVk0mLCBTdHJ1Y3R1cmUqLCBTY29wZWRBcmd1bWVu
dHNUYWJsZSosIEpTTGV4aWNhbEVudmlyb25tZW50Kik7CisgICAgCisgICAgc3RhdGljIHZvaWQg
dmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIAorICAgIHVpbnQzMl90
IGxlbmd0aChFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoVU5MSUtF
TFkobV9vdmVycm9kZUxlbmd0aCkpCisgICAgICAgICAgICByZXR1cm4gZ2V0KGV4ZWMsIGV4ZWMt
PnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpLnRvVUludDMyKGV4ZWMpOworICAgICAgICByZXR1cm4g
bV90YWJsZS0+bGVuZ3RoKCk7CisgICAgfQorICAgIAorICAgIGJvb2wgY2FuR2V0SW5kZXhRdWlj
a2x5KHVpbnQzMl90IGkpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaSA8IG1fbGVuZ3Ro
ICYmICEhbV90YWJsZS0+Z2V0KGkpOworICAgIH0KKyAgICAKKyAgICBKU1ZhbHVlIGdldEluZGV4
UXVpY2tseSh1aW50MzJfdCBpKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUX1dJVEhfU0VD
VVJJVFlfSU1QTElDQVRJT04oY2FuR2V0SW5kZXhRdWlja2x5KGkpKTsKKyAgICAgICAgcmV0dXJu
IG1fc2NvcGUtPnZhcmlhYmxlQXQobV90YWJsZS0+Z2V0KGkpKS5nZXQoKTsKKyAgICB9CisKKyAg
ICBERUNMQVJFX0lORk87CisgICAgCisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0
dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHByb3RvdHlwZSk7CisKK3ByaXZhdGU6
CisgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiwgRXhlY1N0YXRl
KiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgYm9vbCBnZXRPd25Q
cm9wZXJ0eVNsb3RCeUluZGV4KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVy
dHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5h
bWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlv
bk1vZGUpOworICAgIHN0YXRpYyB2b2lkIHB1dChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0
eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyB2b2lkIHB1dEJ5
SW5kZXgoSlNDZWxsKiwgRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVl
LCBib29sIHNob3VsZFRocm93KTsKKyAgICBzdGF0aWMgdm9pZCBkZWxldGVQcm9wZXJ0eShKU0Nl
bGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUpOworICAgIHN0YXRpYyB2b2lkIGRlbGV0ZVBy
b3BlcnR5QnlJbmRleChKU0NlbGwqLCBFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUp
OworICAgIHN0YXRpYyB2b2lkIGRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiwgRXhlY1N0YXRl
KiwgUHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHNob3VsZFRo
cm93KTsKKyAgICAKKyAgICB2b2lkIG92ZXJyaWRlQXJndW1lbnQoVk0mIHZtLCB1aW50MzJfdCBp
KQorICAgIHsKKyAgICAgICAgbV90YWJsZS5zZXQodm0sIHRoaXMsIG1fdGFibGUtPnNldCh2bSwg
aSwgU2NvcGVPZmZzZXQoKSkpOworICAgIH0KKyAgICAKKyAgICBib29sIG1fb3ZlcnJvZGVMZW5n
dGg7CisgICAgV3JpdGVCYXJyaWVyPFNjb3BlZEFyZ3VtZW50c1RhYmxlPiBtX3RhYmxlOworICAg
IFdyaXRlQmFycmllcjxKU0xleGljYWxFbnZpcm9ubWVudD4gbV9zY29wZTsKK307CisKK30gLy8g
bmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gU2NvcGVkQXJndW1lbnRzX2gKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzVGFibGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHNUYWJs
ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVk
QXJndW1lbnRzVGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDkxIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgU2NvcGVkQXJn
dW1lbnRzVGFibGVfaAorI2RlZmluZSBTY29wZWRBcmd1bWVudHNUYWJsZV9oCisKKyNpbmNsdWRl
ICJKU0NlbGwuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKKy8vIFRoaXMgY2xhc3MncyBvbmx5IGpv
YiBpcyB0byBob2xkIG9udG8gdGhlIGxpc3Qgb2YgU2NvcGVPZmZzZXRzIGZvciBlYWNoIGFyZ3Vt
ZW50IHRoYXQgYQorLy8gZnVuY3Rpb24gaGFzLiBNb3N0IG9mIHRoZSB0aW1lLCB0aGUgQnl0ZWNv
ZGVHZW5lcmF0b3Igd2lsbCBjcmVhdGUgb25lIG9mIHRoZXNlIGFuZCBpdCB3aWxsCisvLyBuZXZl
ciBiZSBtb2RpZmllZCBzdWJzZXF1ZW50bHkuIFRoZXJlIGlzIGEgcmFyZSBjYXNlIHdoZXJlIGEg
U2NvcGVkQXJndW1lbnRzIG9iamVjdCBpcyBjcmVhdGVkCisvLyBhbmQgYWxpYXNlcyBvbmUgb2Yg
dGhlc2UgYW5kIHRoZW4gZGVjaWRlcyB0byBtb2RpZnkgaXQ7IGluIHRoYXQgY2FzZSB3ZSBkbyBj
b3B5LW9uLXdyaXRlLiBUaGlzCisvLyBtYWtlcyBzZW5zZSBiZWNhdXNlIHN1Y2ggbW9kaWZpY2F0
aW9ucyBhcmUgc28gdW5jb21tb24uIFlvdSdkIGhhdmUgdG8gZG8gc29tZXRoaW5nIGNyYXp5IGxp
a2UKKy8vICJkZWxldGUgYXJndW1lbnRzW2ldIiBvciBzb21lIHZhcmlhbnQgb2YgZGVmaW5lT3du
UHJvcGVydHkuCitjbGFzcyBTY29wZWRBcmd1bWVudHMgOiBwdWJsaWMgSlNDZWxsIHsKK3B1Ymxp
YzoKKyAgICB0eXBlZGVmIEpTQ2VsbCBCYXNlOworICAgIAorICAgIHN0YXRpYyBjb25zdCBib29s
IG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOworICAgIHN0YXRpYyBjb25zdCBib29sIGhhc0ltbW9y
dGFsU3RydWN0dXJlID0gdHJ1ZTsKKworcHJpdmF0ZToKKyAgICBTY29wZWRBcmd1bWVudHNUYWJs
ZShWTSYpOworICAgIH5TY29wZWRBcmd1bWVudHNUYWJsZSgpOworCitwdWJsaWM6CisgICAgc3Rh
dGljIFNjb3BlZEFyZ3VtZW50c1RhYmxlKiBjcmVhdGUoVk0mKTsKKyAgICAKKyAgICBTY29wZWRB
cmd1bWVudHMqIGNsb25lKFZNJik7CisgICAgCisgICAgdWludDMyX3QgbGVuZ3RoKCkgY29uc3Qg
eyByZXR1cm4gbV9sZW5ndGg7IH0KKyAgICBTY29wZWRBcmd1bWVudHNUYWJsZSogc2V0TGVuZ3Ro
KFZNJiwgdWludDMyX3QgbmV3TGVuZ3RoKTsKKyAgICAKKyAgICBTY29wZU9mZnNldCBnZXQodWlu
dDMyX3QgaSkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJ
Q0FUSU9OKGkgPCBtX2xlbmd0aCk7CisgICAgICAgIHJldHVybiBtX2FyZ3VtZW50c1tpXTsKKyAg
ICB9CisgICAgCisgICAgdm9pZCBsb2NrKCkKKyAgICB7CisgICAgICAgIG1fbG9ja2VkID0gdHJ1
ZTsKKyAgICB9CisgICAgCisgICAgU2NvcGVkQXJndW1lbnRzKiBzZXQoVk0mIHZtLCB1aW50MzJf
dCBpLCBTY29wZU9mZnNldCB2YWx1ZSkKKyAgICB7CisgICAgICAgIFNjb3BlZEFyZ3VtZW50cyog
cmVzdWx0OworICAgICAgICBpZiAoVU5MSUtFTFkobV9sb2NrZWQpKQorICAgICAgICAgICAgcmVz
dWx0ID0gY2xvbmUodm0pOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXN1bHQgPSB0aGlz
OworICAgICAgICByZXN1bHQtPnNldERpcmVjdChpLCB2YWx1ZSk7CisgICAgICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgfQorICAgIAorICAgIERFQ0xBUkVfSU5GTzsKKworcHJpdmF0ZToKKyAgICB1
aW50MzJfdCBtX2xlbmd0aDsKKyAgICBib29sIG1fbG9ja2VkOyAvLyBCZWluZyBsb2NrZWQgbWVh
bnMgdGhhdCB0aGVyZSBhcmUgbXVsdGlwbGUgcmVmZXJlbmNlcyB0byB0aGlzIG9iamVjdCBhbmQg
bm9uZSBvZiB0aGVtIGV4cGVjdCB0byBzZWUgdGhlIG90aGVycycgbW9kaWZpY2F0aW9ucy4gVGhp
cyBtZWFucyB0aGF0IG1vZGlmaWNhdGlvbnMgbmVlZCB0byBtYWtlIGEgY29weSBmaXJzdC4KKyAg
ICBzdGQ6OnVuaXF1ZV9wdHI8U2NvcGVPZmZzZXRbXT4gbV9hcmd1bWVudHM7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIFNjb3BlZEFyZ3VtZW50c1RhYmxlX2gKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmNwcAkocmV2
aXNpb24gMTgwNTI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFi
bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMiwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTIsIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMzcsMjkgKzEzNywyMiBAQCB2b2lk
IFN5bWJvbFRhYmxlOjpXYXRjaHBvaW50Q2xlYW51cDo6ZmluCiAgICAgfQogfQogCi1TeW1ib2xU
YWJsZSogU3ltYm9sVGFibGU6OmNsb25lQ2FwdHVyZWROYW1lcyhWTSYgdm0pCitTeW1ib2xUYWJs
ZSogU3ltYm9sVGFibGU6OmNsb25lU2NvcGVQYXJ0KFZNJiB2bSkKIHsKICAgICBTeW1ib2xUYWJs
ZSogcmVzdWx0ID0gU3ltYm9sVGFibGU6OmNyZWF0ZSh2bSk7CiAgICAgCi0gICAgcmVzdWx0LT5t
X3BhcmFtZXRlckNvdW50SW5jbHVkaW5nVGhpcyA9IG1fcGFyYW1ldGVyQ291bnRJbmNsdWRpbmdU
aGlzOwogICAgIHJlc3VsdC0+bV91c2VzTm9uU3RyaWN0RXZhbCA9IG1fdXNlc05vblN0cmljdEV2
YWw7Ci0gICAgcmVzdWx0LT5tX2NhcHR1cmVTdGFydCA9IG1fY2FwdHVyZVN0YXJ0OwotICAgIHJl
c3VsdC0+bV9jYXB0dXJlRW5kID0gbV9jYXB0dXJlRW5kOwogCiAgICAgZm9yIChhdXRvIGl0ZXIg
PSBtX21hcC5iZWdpbigpLCBlbmQgPSBtX21hcC5lbmQoKTsgaXRlciAhPSBlbmQ7ICsraXRlcikg
ewotICAgICAgICBpZiAoIWlzQ2FwdHVyZWQoaXRlci0+dmFsdWUuZ2V0SW5kZXgoKSkpCisgICAg
ICAgIGlmICghaXRlci0+dmFsdWUudmFyT2Zmc2V0KCkuaXNTY29wZSgpKQogICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgIHJlc3VsdC0+bV9tYXAuYWRkKAogICAgICAgICAgICAgaXRlci0+
a2V5LAotICAgICAgICAgICAgU3ltYm9sVGFibGVFbnRyeShpdGVyLT52YWx1ZS5nZXRJbmRleCgp
LCBpdGVyLT52YWx1ZS5nZXRBdHRyaWJ1dGVzKCkpKTsKKyAgICAgICAgICAgIFN5bWJvbFRhYmxl
RW50cnkoaXRlci0+dmFsdWUudmFyT2Zmc2V0KCksIGl0ZXItPnZhbHVlLmdldEF0dHJpYnV0ZXMo
KSkpOwogICAgIH0KICAgICAKLSAgICBpZiAobV9zbG93QXJndW1lbnRzKSB7Ci0gICAgICAgIHJl
c3VsdC0+bV9zbG93QXJndW1lbnRzID0gc3RkOjptYWtlX3VuaXF1ZTxTbG93QXJndW1lbnRbXT4o
cGFyYW1ldGVyQ291bnQoKSk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IHBhcmFtZXRlckNv
dW50KCk7IGktLTspCi0gICAgICAgICAgICByZXN1bHQtPm1fc2xvd0FyZ3VtZW50c1tpXSA9IG1f
c2xvd0FyZ3VtZW50c1tpXTsKLSAgICB9Ci0KKyAgICByZXN1bHQtPm1fYXJndW1lbnRzID0gYXJn
dW1lbnRzKCk7CisgICAgCiAgICAgaWYgKG1fdHlwZVByb2ZpbGluZ1JhcmVEYXRhKSB7CiAgICAg
ICAgIHJlc3VsdC0+bV90eXBlUHJvZmlsaW5nUmFyZURhdGEgPSBzdGQ6Om1ha2VfdW5pcXVlPFR5
cGVQcm9maWxpbmdSYXJlRGF0YT4oKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU3ltYm9sVGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TeW1ib2xUYWJsZS5oCShyZXZpc2lvbiAxODA1MjkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAxMi0yMDE0IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAx
Mi0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMzEsNiArMzEsNyBAQAogCiAjaW5jbHVkZSAiQ29uY3VycmVudEpJ
VExvY2suaCIKICNpbmNsdWRlICJKU09iamVjdC5oIgorI2luY2x1ZGUgIlNjb3BlZEFyZ3VtZW50
c1RhYmxlLmgiCiAjaW5jbHVkZSAiVHlwZUxvY2F0aW9uLmgiCiAjaW5jbHVkZSAiVmFyaWFibGVX
YXRjaHBvaW50U2V0LmgiCiAjaW5jbHVkZSA8bWVtb3J5PgpAQCAtMzksMjQgKzQwLDYgQEAKIAog
bmFtZXNwYWNlIEpTQyB7CiAKLXN0cnVjdCBTbG93QXJndW1lbnQgewotcHVibGljOgotICAgIGVu
dW0gU3RhdHVzIHsKLSAgICAgICAgTm9ybWFsID0gMCwKLSAgICAgICAgQ2FwdHVyZWQgPSAxLAot
ICAgICAgICBEZWxldGVkID0gMgotICAgIH07Ci0KLSAgICBTbG93QXJndW1lbnQoKQotICAgICAg
ICA6IHN0YXR1cyhOb3JtYWwpCi0gICAgICAgICwgaW5kZXgoMCkKLSAgICB7Ci0gICAgfQotCi0g
ICAgU3RhdHVzIHN0YXR1czsKLSAgICBpbnQgaW5kZXg7IC8vIElmIHN0YXR1cyBpcyAnRGVsZXRl
ZCcsIGluZGV4IGlzIGJvZ3VzLgotfTsKLQogc3RhdGljIEFMV0FZU19JTkxJTkUgaW50IG1pc3Np
bmdTeW1ib2xNYXJrZXIoKSB7IHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgp
OyB9CiAKIC8vIFRoZSBiaXQgdHdpZGRsaW5nIGluIHRoaXMgY2xhc3MgYXNzdW1lcyB0aGF0IGV2
ZXJ5IHJlZ2lzdGVyIGluZGV4IGlzIGEKQEAgLTg2LDYgKzY5LDI4IEBAIHN0YXRpYyBBTFdBWVNf
SU5MSU5FIGludCBtaXNzaW5nU3ltYm9sTWEKIC8vIGNvcHk6ICAgICBTeW1ib2xUYWJsZUVudHJ5
IC0tPiBGYXRFbnRyeSAtLS0tLV4KIAogc3RydWN0IFN5bWJvbFRhYmxlRW50cnkgeworcHJpdmF0
ZToKKyAgICBzdGF0aWMgVmFyT2Zmc2V0IHZhck9mZnNldEZyb21CaXRzKGludHB0cl90IGJpdHMp
CisgICAgeworICAgICAgICBWYXJLaW5kIGtpbmQ7CisgICAgICAgIGlmIChiaXRzICYgU3RhY2tG
bGFnKQorICAgICAgICAgICAga2luZCA9IFN0YWNrVmFyS2luZDsKKyAgICAgICAgZWxzZSBpZiAo
Yml0cyAmIENhcHR1cmVkQXJndW1lbnRGbGFnKQorICAgICAgICAgICAga2luZCA9IENhcHR1cmVk
QXJndW1lbnRLaW5kOworICAgICAgICBlbHNlCisgICAgICAgICAgICBraW5kID0gU2NvcGVWYXJL
aW5kOworICAgICAgICByZXR1cm4gVmFyT2Zmc2V0Ojphc3NlbWJsZShraW5kLCBzdGF0aWNfY2Fz
dDxpbnQ+KGJpdHMgPj4gRmxhZ0JpdHMpKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIFNjb3Bl
T2Zmc2V0IHNjb3BlT2Zmc2V0RnJvbUJpdHMoaW50cHRyX3QgYml0cykKKyAgICB7CisgICAgICAg
IEFTU0VSVCghKGJpdHMgJiBTdGFja0ZsYWcpKTsKKyAgICAgICAgQVNTRVJUKCEoYml0cyAmIENh
cHR1cmVkQXJndW1lbnRGbGFnKSk7CisgICAgICAgIHJldHVybiBTY29wZU9mZnNldChzdGF0aWNf
Y2FzdDxpbnQ+KGJpdHMgPj4gRmxhZ0JpdHMpKTsKKyAgICB9CisKK3B1YmxpYzoKKyAgICAKICAg
ICAvLyBVc2UgdGhlIFN5bWJvbFRhYmxlRW50cnk6OkZhc3QgY2xhc3MsIGVpdGhlciB2aWEgaW1w
bGljaXQgY2FzdCBvciBieSBjYWxsaW5nCiAgICAgLy8gZ2V0RmFzdCgpLCB3aGVuIHlvdSAoMSkg
b25seSBjYXJlIGFib3V0IGlzTnVsbCgpLCBnZXRJbmRleCgpLCBhbmQgaXNSZWFkT25seSgpLAog
ICAgIC8vIGFuZCAoMikgeW91IGFyZSBpbiBhIGhvdCBwYXRoIHdoZXJlIHlvdSBuZWVkIHRvIG1p
bmltaXplIHRoZSBudW1iZXIgb2YgdGltZXMKQEAgLTEwNywxMSArMTEyLDE5IEBAIHN0cnVjdCBT
eW1ib2xUYWJsZUVudHJ5IHsKICAgICAgICAgICAgIHJldHVybiAhKG1fYml0cyAmIH5TbGltRmxh
Zyk7CiAgICAgICAgIH0KIAotICAgICAgICBpbnQgZ2V0SW5kZXgoKSBjb25zdAorICAgICAgICBW
YXJPZmZzZXQgdmFyT2Zmc2V0KCkgY29uc3QKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PGludD4obV9iaXRzID4+IEZsYWdCaXRzKTsKKyAgICAgICAgICAgIHJldHVy
biB2YXJPZmZzZXRGcm9tQml0cyhtX2JpdHMpOwogICAgICAgICB9Ci0gICAgCisgICAgICAgIAor
ICAgICAgICAvLyBBc3NlcnRzIGlmIHRoZSBvZmZzZXQgaXMgYW55dGhpbmcgYnV0IGEgc2NvcGUg
b2Zmc2V0LiBUaGlzIHN0cnVjdHVyZXMgdGhlIGFzc2VydGlvbnMKKyAgICAgICAgLy8gaW4gYSB3
YXkgdGhhdCBtYXkgcmVzdWx0IGluIGJldHRlciBjb2RlLCBldmVuIGluIHJlbGVhc2UsIHRoYW4g
ZG9pbmcKKyAgICAgICAgLy8gdmFyT2Zmc2V0KCkuc2NvcGVPZmZzZXQoKS4KKyAgICAgICAgU2Nv
cGVPZmZzZXQgc2NvcGVPZmZzZXQoKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gc2NvcGVPZmZzZXRGcm9tQml0cyhtX2JpdHMpOworICAgICAgICB9CisgICAgICAgIAogICAg
ICAgICBib29sIGlzUmVhZE9ubHkoKSBjb25zdAogICAgICAgICB7CiAgICAgICAgICAgICByZXR1
cm4gbV9iaXRzICYgUmVhZE9ubHlGbGFnOwpAQCAtMTQyLDE4ICsxNTUsMTggQEAgc3RydWN0IFN5
bWJvbFRhYmxlRW50cnkgewogICAgIHsKICAgICB9CiAKLSAgICBTeW1ib2xUYWJsZUVudHJ5KGlu
dCBpbmRleCkKKyAgICBTeW1ib2xUYWJsZUVudHJ5KFZhck9mZnNldCBvZmZzZXQpCiAgICAgICAg
IDogbV9iaXRzKFNsaW1GbGFnKQogICAgIHsKLSAgICAgICAgQVNTRVJUKGlzVmFsaWRJbmRleChp
bmRleCkpOwotICAgICAgICBwYWNrKGluZGV4LCBmYWxzZSwgZmFsc2UpOworICAgICAgICBBU1NF
UlQoaXNWYWxpZFZhck9mZnNldChvZmZzZXQpKTsKKyAgICAgICAgcGFjayhvZmZzZXQsIGZhbHNl
LCBmYWxzZSk7CiAgICAgfQogCi0gICAgU3ltYm9sVGFibGVFbnRyeShpbnQgaW5kZXgsIHVuc2ln
bmVkIGF0dHJpYnV0ZXMpCisgICAgU3ltYm9sVGFibGVFbnRyeShWYXJPZmZzZXQgb2Zmc2V0LCB1
bnNpZ25lZCBhdHRyaWJ1dGVzKQogICAgICAgICA6IG1fYml0cyhTbGltRmxhZykKICAgICB7Ci0g
ICAgICAgIEFTU0VSVChpc1ZhbGlkSW5kZXgoaW5kZXgpKTsKLSAgICAgICAgcGFjayhpbmRleCwg
YXR0cmlidXRlcyAmIFJlYWRPbmx5LCBhdHRyaWJ1dGVzICYgRG9udEVudW0pOworICAgICAgICBB
U1NFUlQoaXNWYWxpZFZhck9mZnNldChvZmZzZXQpKTsKKyAgICAgICAgcGFjayhvZmZzZXQsIGF0
dHJpYnV0ZXMgJiBSZWFkT25seSwgYXR0cmlidXRlcyAmIERvbnRFbnVtKTsKICAgICB9CiAgICAg
CiAgICAgflN5bWJvbFRhYmxlRW50cnkoKQpAQCAtMTgxLDkgKzE5NCwxNyBAQCBzdHJ1Y3QgU3lt
Ym9sVGFibGVFbnRyeSB7CiAgICAgICAgIHJldHVybiAhKGJpdHMoKSAmIH5TbGltRmxhZyk7CiAg
ICAgfQogCi0gICAgaW50IGdldEluZGV4KCkgY29uc3QKKyAgICBWYXJPZmZzZXQgdmFyT2Zmc2V0
KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB2YXJPZmZzZXRGcm9tQml0cyhiaXRzKCkp
OworICAgIH0KKyAgICAKKyAgICAvLyBBc3NlcnRzIGlmIHRoZSBvZmZzZXQgaXMgYW55dGhpbmcg
YnV0IGEgc2NvcGUgb2Zmc2V0LiBUaGlzIHN0cnVjdHVyZXMgdGhlIGFzc2VydGlvbnMKKyAgICAv
LyBpbiBhIHdheSB0aGF0IG1heSByZXN1bHQgaW4gYmV0dGVyIGNvZGUsIGV2ZW4gaW4gcmVsZWFz
ZSwgdGhhbiBkb2luZworICAgIC8vIHZhck9mZnNldCgpLnNjb3BlT2Zmc2V0KCkuCisgICAgU2Nv
cGVPZmZzZXQgc2NvcGVPZmZzZXQoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PGludD4oYml0cygpID4+IEZsYWdCaXRzKTsKKyAgICAgICAgcmV0dXJuIHNjb3BlT2Zm
c2V0RnJvbUJpdHMoYml0cygpKTsKICAgICB9CiAgICAgCiAgICAgQUxXQVlTX0lOTElORSBGYXN0
IGdldEZhc3QoKSBjb25zdApAQCAtMjA5LDcgKzIzMCw3IEBAIHN0cnVjdCBTeW1ib2xUYWJsZUVu
dHJ5IHsKIAogICAgIHZvaWQgc2V0QXR0cmlidXRlcyh1bnNpZ25lZCBhdHRyaWJ1dGVzKQogICAg
IHsKLSAgICAgICAgcGFjayhnZXRJbmRleCgpLCBhdHRyaWJ1dGVzICYgUmVhZE9ubHksIGF0dHJp
YnV0ZXMgJiBEb250RW51bSk7CisgICAgICAgIHBhY2sodmFyT2Zmc2V0KCksIGF0dHJpYnV0ZXMg
JiBSZWFkT25seSwgYXR0cmlidXRlcyAmIERvbnRFbnVtKTsKICAgICB9CiAKICAgICBib29sIGlz
UmVhZE9ubHkoKSBjb25zdApAQCAtMjQyLDcgKzI2Myw5IEBAIHByaXZhdGU6CiAgICAgc3RhdGlj
IGNvbnN0IGludHB0cl90IFJlYWRPbmx5RmxhZyA9IDB4MjsKICAgICBzdGF0aWMgY29uc3QgaW50
cHRyX3QgRG9udEVudW1GbGFnID0gMHg0OwogICAgIHN0YXRpYyBjb25zdCBpbnRwdHJfdCBOb3RO
dWxsRmxhZyA9IDB4ODsKLSAgICBzdGF0aWMgY29uc3QgaW50cHRyX3QgRmxhZ0JpdHMgPSA0Owor
ICAgIHN0YXRpYyBjb25zdCBpbnRwdHJfdCBTdGFja0ZsYWcgPSAweDEwOworICAgIHN0YXRpYyBj
b25zdCBpbnRwdHJfdCBDYXB0dXJlZEFyZ3VtZW50RmxhZyA9IDB4MjA7CisgICAgc3RhdGljIGNv
bnN0IGludHB0cl90IEZsYWdCaXRzID0gNjsKICAgICAKICAgICBjbGFzcyBGYXRFbnRyeSB7CiAg
ICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwpAQCAtMzA5LDIwICszMzIsMzQgQEAgcHJp
dmF0ZToKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZnJlZUZhdEVudHJ5U2xvdygpOwog
Ci0gICAgdm9pZCBwYWNrKGludCBpbmRleCwgYm9vbCByZWFkT25seSwgYm9vbCBkb250RW51bSkK
KyAgICB2b2lkIHBhY2soVmFyT2Zmc2V0IG9mZnNldCwgYm9vbCByZWFkT25seSwgYm9vbCBkb250
RW51bSkKICAgICB7CiAgICAgICAgIEFTU0VSVCghaXNGYXQoKSk7CiAgICAgICAgIGludHB0cl90
JiBiaXRzUmVmID0gYml0cygpOwotICAgICAgICBiaXRzUmVmID0gKHN0YXRpY19jYXN0PGludHB0
cl90PihpbmRleCkgPDwgRmxhZ0JpdHMpIHwgTm90TnVsbEZsYWcgfCBTbGltRmxhZzsKKyAgICAg
ICAgYml0c1JlZiA9CisgICAgICAgICAgICAoc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KG9mZnNldC5y
YXdPZmZzZXQoKSkgPDwgRmxhZ0JpdHMpIHwgTm90TnVsbEZsYWcgfCBTbGltRmxhZzsKICAgICAg
ICAgaWYgKHJlYWRPbmx5KQogICAgICAgICAgICAgYml0c1JlZiB8PSBSZWFkT25seUZsYWc7CiAg
ICAgICAgIGlmIChkb250RW51bSkKICAgICAgICAgICAgIGJpdHNSZWYgfD0gRG9udEVudW1GbGFn
OworICAgICAgICBzd2l0Y2ggKG9mZnNldC5raW5kKCkpIHsKKyAgICAgICAgY2FzZSBTY29wZVZh
cktpbmQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTdGFja1ZhcktpbmQ6Cisg
ICAgICAgICAgICBiaXRzUmVmIHw9IFN0YWNrRmxhZzsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIENhcHR1cmVkQXJndW1lbnRLaW5kOgorICAgICAgICAgICAgYml0c1JlZiB8PSBD
YXB0dXJlZEFyZ3VtZW50RmxhZzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CiAgICAgfQogICAgIAotICAgIGJvb2wgaXNWYWxpZEluZGV4KGlu
dCBpbmRleCkKKyAgICBzdGF0aWMgYm9vbCBpc1ZhbGlkVmFyT2Zmc2V0KFZhck9mZnNldCBvZmZz
ZXQpCiAgICAgewotICAgICAgICByZXR1cm4gKChzdGF0aWNfY2FzdDxpbnRwdHJfdD4oaW5kZXgp
IDw8IEZsYWdCaXRzKSA+PiBGbGFnQml0cykgPT0gc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KGluZGV4
KTsKKyAgICAgICAgcmV0dXJuICgoc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KG9mZnNldC5yYXdPZmZz
ZXQoKSkgPDwgRmxhZ0JpdHMpID4+IEZsYWdCaXRzKSA9PSBzdGF0aWNfY2FzdDxpbnRwdHJfdD4o
b2Zmc2V0LnJhd09mZnNldCgpKTsKICAgICB9CiAKICAgICBpbnRwdHJfdCBtX2JpdHM7CkBAIC0z
NTEsNyArMzg4LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBTeW1ib2xUYWJsZSogY3JlYXRlTmFt
ZVNjb3BlVGFibGUoVk0mIHZtLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgdW5zaWduZWQgYXR0
cmlidXRlcykKICAgICB7CiAgICAgICAgIFN5bWJvbFRhYmxlKiByZXN1bHQgPSBjcmVhdGUodm0p
OwotICAgICAgICByZXN1bHQtPmFkZChpZGVudC5pbXBsKCksIFN5bWJvbFRhYmxlRW50cnkoLTEs
IGF0dHJpYnV0ZXMpKTsKKyAgICAgICAgcmVzdWx0LT5hZGQoaWRlbnQuaW1wbCgpLCBTeW1ib2xU
YWJsZUVudHJ5KFZhck9mZnNldChTY29wZU9mZnNldCgwKSksIGF0dHJpYnV0ZXMpKTsKICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgCkBAIC00MjMsOCArNDYwLDI5IEBAIHB1Ymxp
YzoKICAgICAgICAgcmV0dXJuIHNpemUobG9ja2VyKTsKICAgICB9CiAgICAgCisgICAgU2NvcGVP
ZmZzZXQgbWF4U2NvcGVPZmZzZXQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbWF4
U2NvcGVPZmZzZXQ7CisgICAgfQorICAgIAorICAgIHVuc2lnbmVkIHNjb3BlU2l6ZSgpIGNvbnN0
CisgICAgeworICAgICAgICBTY29wZU9mZnNldCBtYXhTY29wZU9mZnNldCA9IHRoaXMtPm1heFNj
b3BlT2Zmc2V0KCk7CisgICAgICAgIAorICAgICAgICAvLyBEbyBzb21lIGNhbGN1bGF0aW9uIHRo
YXQgcmVsaWVzIG9uIGludmFsaWQgc2NvcGUgb2Zmc2V0IHBsdXMgb25lIGJlaW5nIHplcm8uCisg
ICAgICAgIHVuc2lnbmVkIGZhc3RSZXN1bHQgPSBtYXhTY29wZU9mZnNldC5vZmZzZXRVbmNoZWNr
ZWQoKSArIDE7CisgICAgICAgIAorICAgICAgICAvLyBBc3NlcnQgdGhhdCB0aGlzIHdvcmtzLgor
ICAgICAgICBBU1NFUlQoZmFzdFJlc3VsdCA9PSAoIW1heFNjb3BlT2Zmc2V0ID8gMCA6IG1heFNj
b3BlT2Zmc2V0Lm9mZnNldCgpICsgMSkpOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIGZhc3RS
ZXN1bHQ7CisgICAgfQorICAgIAogICAgIE1hcDo6QWRkUmVzdWx0IGFkZChjb25zdCBDb25jdXJy
ZW50SklUTG9ja2VyJiwgU3RyaW5nSW1wbCoga2V5LCBjb25zdCBTeW1ib2xUYWJsZUVudHJ5JiBl
bnRyeSkKICAgICB7CisgICAgICAgIGlmIChlbnRyeS52YXJPZmZzZXQoKS5pc1Njb3BlKCkKKyAg
ICAgICAgICAgICYmICghbV9tYXhTY29wZU9mZnNldCB8fCBtX21heFNjb3BlT2Zmc2V0IDwgZW50
cnkuc2NvcGVPZmZzZXQoKSkpCisgICAgICAgICAgICBtX21heFNjb3BlT2Zmc2V0ID0gZW50cnku
c2NvcGVPZmZzZXQoKTsKICAgICAgICAgcmV0dXJuIG1fbWFwLmFkZChrZXksIGVudHJ5KTsKICAg
ICB9CiAgICAgCkBAIC00NTYsNiArNTE0LDQ1IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGNv
bnRhaW5zKGxvY2tlciwga2V5KTsKICAgICB9CiAgICAgCisgICAgLy8gVGhlIHByaW5jaXBsZSBi
ZWhpbmQgU2NvcGVkQXJndW1lbnRzVGFibGUgbW9kaWZpY2F0aW9ucyBpcyB0aGF0IHdlIHdpbGwg
Y3JlYXRlIG9uZSBhbmQKKyAgICAvLyBsZWF2ZSBpdCB1bmxvY2tlZCAtIHRoZXJlYnkgYWxsb3dp
bmcgaW4tcGxhY2UgY2hhbmdlcyAtIHVudGlsIHNvbWVvbmUgYXNrcyBmb3IgYSBwb2ludGVyIHRv
CisgICAgLy8gdGhlIHRhYmxlLiBUaGVuLCB3ZSB3aWxsIGxvY2sgaXQuIFRoZW4gYm90aCBvdXIg
ZnV0dXJlIGNoYW5nZXMgYW5kIHRoZWlyIGZ1dHVyZSBjaGFuZ2VzCisgICAgLy8gd2lsbCBmaXJz
dCBoYXZlIHRvIG1ha2UgYSBjb3B5LiBUaGlzIGRpc2NpcGxpbmUgbWVhbnMgdGhhdCB1c3VhbGx5
IHdoZW4gd2UgY3JlYXRlIGEKKyAgICAvLyBTY29wZWRBcmd1bWVudHMgb2JqZWN0LCB3ZSBkb24n
dCBoYXZlIHRvIG1ha2UgYSBjb3B5IG9mIHRoZSBTY29wZWRBcmd1bWVudHNUYWJsZSAtIGluc3Rl
YWQKKyAgICAvLyB3ZSBqdXN0IHRha2UgYSByZWZlcmVuY2UgdG8gb25lIHRoYXQgd2UgYWxyZWFk
eSBoYXZlLgorICAgIAorICAgIHVpbnQzMl90IGFyZ3VtZW50c0xlbmd0aCgpIGNvbnN0CisgICAg
eworICAgICAgICBpZiAoIW1fYXJndW1lbnRzKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAg
ICAgIHJldHVybiBtX2FyZ3VtZW50cy0+bGVuZ3RoKCk7CisgICAgfQorICAgIAorICAgIHZvaWQg
c2V0QXJndW1lbnRzTGVuZ3RoKFZNJiB2bSwgdWludDMyX3QgbGVuZ3RoKQorICAgIHsKKyAgICAg
ICAgaWYgKFVOTElLRUxZKCFtX2FyZ3VtZW50cykpCisgICAgICAgICAgICBtX2FyZ3VtZW50cy5z
ZXQodm0sIHRoaXMsIFNjb3BlZEFyZ3VtZW50c1RhYmxlOjpjcmVhdGUodm0pKTsKKyAgICAgICAg
bV9hcmd1bWVudHMuc2V0KHZtLCB0aGlzLCBtX2FyZ3VtZW50cy0+c2V0TGVuZ3RoKHZtLCBsZW5n
dGgpKTsKKyAgICB9CisgICAgCisgICAgU2NvcGVPZmZzZXQgYXJndW1lbnRPZmZzZXQodWludDMy
X3QgaSkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FU
SU9OKG1fYXJndW1lbnRzKTsKKyAgICAgICAgcmV0dXJuIG1fYXJndW1lbnRzLT5nZXQoaSk7Cisg
ICAgfQorICAgIAorICAgIHZvaWQgc2V0QXJndW1lbnRPZmZzZXQoVk0mIHZtLCB1aW50MzJfdCBp
LCBTY29wZU9mZnNldCBvZmZzZXQpCisgICAgeworICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklU
WV9JTVBMSUNBVElPTihtX2FyZ3VtZW50cyk7CisgICAgICAgIG1fYXJndW1lbnRzLnNldCh2bSwg
dGhpcywgbV9hcmd1bWVudHMtPnNldCh2bSwgaSwgb2Zmc2V0KSk7CisgICAgfQorICAgIAorICAg
IFNjb3BlZEFyZ3VtZW50c1RhYmxlKiBhcmd1bWVudHMoKSBjb25zdAorICAgIHsKKyAgICAgICAg
bV9hcmd1bWVudHMtPmxvY2soKTsKKyAgICAgICAgcmV0dXJuIG1fYXJndW1lbnRzLmdldCgpOwor
ICAgIH0KKyAgICAKICAgICBHbG9iYWxWYXJpYWJsZUlEIHVuaXF1ZUlERm9yVmFyaWFibGUoY29u
c3QgQ29uY3VycmVudEpJVExvY2tlciYsIFN0cmluZ0ltcGwqIGtleSwgVk0mIHZtKTsKICAgICBH
bG9iYWxWYXJpYWJsZUlEIHVuaXF1ZUlERm9yUmVnaXN0ZXIoY29uc3QgQ29uY3VycmVudEpJVExv
Y2tlciYgbG9ja2VyLCBpbnQgcmVnaXN0ZXJJbmRleCwgVk0mIHZtKTsKICAgICBSZWZQdHI8VHlw
ZVNldD4gZ2xvYmFsVHlwZVNldEZvclJlZ2lzdGVyKGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXIm
IGxvY2tlciwgaW50IHJlZ2lzdGVySW5kZXgsIFZNJiB2bSk7CkBAIC00NjQsMjggKzU2MSw3IEBA
IHB1YmxpYzoKICAgICBib29sIHVzZXNOb25TdHJpY3RFdmFsKCkgeyByZXR1cm4gbV91c2VzTm9u
U3RyaWN0RXZhbDsgfQogICAgIHZvaWQgc2V0VXNlc05vblN0cmljdEV2YWwoYm9vbCB1c2VzTm9u
U3RyaWN0RXZhbCkgeyBtX3VzZXNOb25TdHJpY3RFdmFsID0gdXNlc05vblN0cmljdEV2YWw7IH0K
IAotICAgIGludCBjYXB0dXJlU3RhcnQoKSBjb25zdCB7IHJldHVybiBtX2NhcHR1cmVTdGFydDsg
fQotICAgIHZvaWQgc2V0Q2FwdHVyZVN0YXJ0KGludCBjYXB0dXJlU3RhcnQpIHsgbV9jYXB0dXJl
U3RhcnQgPSBjYXB0dXJlU3RhcnQ7IH0KLQotICAgIGludCBjYXB0dXJlRW5kKCkgY29uc3QgeyBy
ZXR1cm4gbV9jYXB0dXJlRW5kOyB9Ci0gICAgdm9pZCBzZXRDYXB0dXJlRW5kKGludCBjYXB0dXJl
RW5kKSB7IG1fY2FwdHVyZUVuZCA9IGNhcHR1cmVFbmQ7IH0KLQotICAgIGludCBjYXB0dXJlQ291
bnQoKSBjb25zdCB7IHJldHVybiAtKG1fY2FwdHVyZUVuZCAtIG1fY2FwdHVyZVN0YXJ0KTsgfQot
ICAgIAotICAgIGJvb2wgaXNDYXB0dXJlZChpbnQgb3BlcmFuZCkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBvcGVyYW5kIDw9IGNhcHR1cmVTdGFydCgpICYmIG9wZXJhbmQgPiBjYXB0dXJlRW5kKCk7
Ci0gICAgfQotCi0gICAgaW50IHBhcmFtZXRlckNvdW50KCkgeyByZXR1cm4gbV9wYXJhbWV0ZXJD
b3VudEluY2x1ZGluZ1RoaXMgLSAxOyB9Ci0gICAgaW50IHBhcmFtZXRlckNvdW50SW5jbHVkaW5n
VGhpcygpIHsgcmV0dXJuIG1fcGFyYW1ldGVyQ291bnRJbmNsdWRpbmdUaGlzOyB9Ci0gICAgdm9p
ZCBzZXRQYXJhbWV0ZXJDb3VudEluY2x1ZGluZ1RoaXMoaW50IHBhcmFtZXRlckNvdW50SW5jbHVk
aW5nVGhpcykgeyBtX3BhcmFtZXRlckNvdW50SW5jbHVkaW5nVGhpcyA9IHBhcmFtZXRlckNvdW50
SW5jbHVkaW5nVGhpczsgfQotCi0gICAgLy8gMCBpZiB3ZSBkb24ndCBjYXB0dXJlIGFueSBhcmd1
bWVudHM7IHBhcmFtZXRlckNvdW50KCkgaW4gbGVuZ3RoIGlmIHdlIGRvLgotICAgIGNvbnN0IFNs
b3dBcmd1bWVudCogc2xvd0FyZ3VtZW50cygpIHsgcmV0dXJuIG1fc2xvd0FyZ3VtZW50cy5nZXQo
KTsgfQotICAgIHZvaWQgc2V0U2xvd0FyZ3VtZW50cyhzdGQ6OnVuaXF1ZV9wdHI8U2xvd0FyZ3Vt
ZW50W10+IHNsb3dBcmd1bWVudHMpIHsgbV9zbG93QXJndW1lbnRzID0gV1RGOjptb3ZlKHNsb3dB
cmd1bWVudHMpOyB9Ci0gICAgCi0gICAgU3ltYm9sVGFibGUqIGNsb25lQ2FwdHVyZWROYW1lcyhW
TSYpOworICAgIFN5bWJvbFRhYmxlKiBjbG9uZVNjb3BlUGFydChWTSYpOwogCiAgICAgdm9pZCBw
cmVwYXJlRm9yVHlwZVByb2ZpbGluZyhjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJik7CiAKQEAg
LTUxMyw2ICs1ODksOCBAQCBwcml2YXRlOgogICAgIH5TeW1ib2xUYWJsZSgpOwogCiAgICAgTWFw
IG1fbWFwOworICAgIFNjb3BlT2Zmc2V0IG1fbWF4U2NvcGVPZmZzZXQ7CisgICAgCiAgICAgc3Ry
dWN0IFR5cGVQcm9maWxpbmdSYXJlRGF0YSB7CiAgICAgICAgIFVuaXF1ZUlETWFwIG1fdW5pcXVl
SURNYXA7CiAgICAgICAgIFJlZ2lzdGVyVG9WYXJpYWJsZU1hcCBtX3JlZ2lzdGVyVG9WYXJpYWJs
ZU1hcDsKQEAgLTUyMCwxMyArNTk4LDkgQEAgcHJpdmF0ZToKICAgICB9OwogICAgIHN0ZDo6dW5p
cXVlX3B0cjxUeXBlUHJvZmlsaW5nUmFyZURhdGE+IG1fdHlwZVByb2ZpbGluZ1JhcmVEYXRhOwog
Ci0gICAgaW50IG1fcGFyYW1ldGVyQ291bnRJbmNsdWRpbmdUaGlzOwogICAgIGJvb2wgbV91c2Vz
Tm9uU3RyaWN0RXZhbDsKLQotICAgIGludCBtX2NhcHR1cmVTdGFydDsKLSAgICBpbnQgbV9jYXB0
dXJlRW5kOwotCi0gICAgc3RkOjp1bmlxdWVfcHRyPFNsb3dBcmd1bWVudFtdPiBtX3Nsb3dBcmd1
bWVudHM7CisgICAgCisgICAgV3JpdGVCYXJyaWVyPFNjb3BlZEFyZ3VtZW50c1RhYmxlPiBtX2Fy
Z3VtZW50czsKICAgICAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8V2F0Y2hwb2ludENsZWFudXA+IG1f
d2F0Y2hwb2ludENsZWFudXA7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1Zhck9mZnNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVmFyT2Zmc2V0LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1Zhck9mZnNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3NiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiVmFyT2Zmc2V0LmgiCisKK25hbWVzcGFjZSBKU0MgeworCit2b2lk
IFZhck9mZnNldDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIHN3aXRjaCAo
bV9raW5kKSB7CisgICAgY2FzZSBJbnZhbGlkVmFyS2luZDoKKyAgICAgICAgb3V0LnByaW50KCJp
bnZhbGlkIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFNjb3BlVmFyS2luZDoKKyAgICAg
ICAgb3V0LnByaW50KHNjb3BlT2Zmc2V0KCkpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBT
dGFja1ZhcktpbmQ6CisgICAgICAgIG91dC5wcmludChzdGFja09mZnNldCgpKTsKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgQ2FwdHVyZWRBcmd1bWVudEtpbmQ6CisgICAgICAgIG91dC5wcmlu
dChjYXB0dXJlZEFyZ3VtZW50T2Zmc2V0KCkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwor
CituYW1lc3BhY2UgV1RGIHsKKwordXNpbmcgbmFtZXNwYWNlIEpTQzsKKwordm9pZCBwcmludElu
dGVybmFsKFByaW50U3RyZWFtJiBvdXQsIFZhcktpbmQgdmFyS2luZCkKK3sKKyAgICBzd2l0Y2gg
KHZhcktpbmQpIHsKKyAgICBjYXNlIEludmFsaWRWYXJLaW5kOgorICAgICAgICBvdXQucHJpbnQo
IkludmFsaWQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU2NvcGVWYXJLaW5kOgorICAg
ICAgICBvdXQucHJpbnQoIlNjb3BlIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFN0YWNr
VmFyS2luZDoKKyAgICAgICAgb3V0LnByaW50KCJTdGFjayIpOworICAgICAgICByZXR1cm47Cisg
ICAgY2FzZSBDYXB0dXJlZEFyZ3VtZW50S2luZDoKKyAgICAgICAgb3V0LnByaW50KCJDYXB0dXJl
ZEFyZ3VtZW50Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1Zhck9mZnNldC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1Zhck9mZnNldC5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVmFyT2Zmc2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwyMTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2lmbmRlZiBWYXJPZmZzZXRfaAorI2RlZmluZSBWYXJPZmZzZXRfaAorCisjaW5jbHVkZSAi
Q2FwdHVyZWRBcmd1bWVudE9mZnNldC5oIgorI2luY2x1ZGUgIlNjb3BlT2Zmc2V0LmgiCisjaW5j
bHVkZSAiVmlydHVhbFJlZ2lzdGVyLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitlbnVtIFZhcktp
bmQgOiB1aW50OF90IHsKKyAgICBJbnZhbGlkVmFyS2luZCwKKyAgICBTY29wZVZhcktpbmQsCisg
ICAgU3RhY2tWYXJLaW5kLAorICAgIENhcHR1cmVkQXJndW1lbnRLaW5kCit9OworCitjbGFzcyBW
YXJPZmZzZXQgeworcHVibGljOgorICAgIFZhck9mZnNldCgpCisgICAgICAgIDogbV9raW5kKElu
dmFsaWRWYXJLaW5kKQorICAgICAgICAsIG1fb2Zmc2V0KFVJTlRfTUFYKQorICAgIHsKKyAgICB9
CisgICAgCisgICAgZXhwbGljaXQgVmFyT2Zmc2V0KFZpcnR1YWxSZWdpc3RlciBzdGFja09mZnNl
dCkKKyAgICB7CisgICAgICAgIGlmICghc3RhY2tPZmZzZXQuaXNWYWxpZCgpKSB7CisgICAgICAg
ICAgICBtX2tpbmQgPSBJbnZhbGlkVmFyS2luZDsKKyAgICAgICAgICAgIG1fb2Zmc2V0ID0gVUlO
VF9NQVg7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX2tpbmQgPSBTdGFja1Zhcktp
bmQ7CisgICAgICAgICAgICBtX29mZnNldCA9IHN0YWNrT2Zmc2V0Lm9mZnNldCgpOworICAgICAg
ICB9CisgICAgfQorICAgIAorICAgIGV4cGxpY2l0IFZhck9mZnNldChTY29wZU9mZnNldCBzY29w
ZU9mZnNldCkKKyAgICB7CisgICAgICAgIGlmICghc2NvcGVPZmZzZXQpIHsKKyAgICAgICAgICAg
IG1fa2luZCA9IEludmFsaWRWYXJLaW5kOworICAgICAgICAgICAgbV9vZmZzZXQgPSBVSU5UX01B
WDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1fa2luZCA9IFNjb3BlVmFyS2luZDsK
KyAgICAgICAgICAgIG1fb2Zmc2V0ID0gc2NvcGVPZmZzZXQub2Zmc2V0KCk7CisgICAgICAgIH0K
KyAgICB9CisgICAgCisgICAgZXhwbGljaXQgVmFyT2Zmc2V0KENhcHR1cmVkQXJndW1lbnRPZmZz
ZXQgY2FwdHVyZWRBcmd1bWVudE9mZnNldCkKKyAgICB7CisgICAgICAgIGlmICghY2FwdHVyZWRB
cmd1bWVudE9mZnNldCkgeworICAgICAgICAgICAgbV9raW5kID0gSW52YWxpZFZhcktpbmQ7Cisg
ICAgICAgICAgICBtX29mZnNldCA9IFVJTlRfTUFYOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgbV9raW5kID0gQ2FwdHVyZWRBcmd1bWVudEtpbmQ7CisgICAgICAgICAgICBtX29mZnNl
dCA9IGNhcHR1cmVkQXJndW1lbnRPZmZzZXQub2Zmc2V0KCk7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgCisgICAgc3RhdGljIFZhck9mZnNldCBhc3NlbWJsZShWYXJLaW5kIGtpbmQsIHVuc2lnbmVk
IG9mZnNldCkKKyAgICB7CisgICAgICAgIFZhck9mZnNldCByZXN1bHQ7CisgICAgICAgIHJlc3Vs
dC5tX2tpbmQgPSBraW5kOworICAgICAgICByZXN1bHQubV9vZmZzZXQgPSBvZmZzZXQ7CisgICAg
ICAgIHJlc3VsdC5jaGVja1Nhbml0eSgpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0K
KyAgICAKKyAgICBib29sIGlzVmFsaWQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1f
a2luZCAhPSBJbnZhbGlkVmFyS2luZDsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvciEo
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICFpc1ZhbGlkKCk7CisgICAgfQorICAgIAor
ICAgIFZhcktpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQorICAgIAorICAgIGJv
b2wgaXNTdGFjaygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9raW5kID09IFN0YWNr
VmFyS2luZDsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc1Njb3BlKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBtX2tpbmQgPT0gU2NvcGVWYXJLaW5kOworICAgIH0KKyAgICAKKyAgICBi
b29sIGlzQ2FwdHVyZWRBcmd1bWVudCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9r
aW5kID09IENhcHR1cmVkQXJndW1lbnRLaW5kOworICAgIH0KKyAgICAKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgc3RhY2tPZmZzZXRVbmNoZWNrZWQoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKCFp
c1N0YWNrKCkpCisgICAgICAgICAgICByZXR1cm4gVmlydHVhbFJlZ2lzdGVyKCk7CisgICAgICAg
IHJldHVybiBWaXJ0dWFsUmVnaXN0ZXIobV9vZmZzZXQpOworICAgIH0KKyAgICAKKyAgICBTY29w
ZU9mZnNldCBzY29wZU9mZnNldFVuY2hlY2tlZCgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAo
IWlzU2NvcGUoKSkKKyAgICAgICAgICAgIHJldHVybiBTY29wZU9mZnNldCgpOworICAgICAgICBy
ZXR1cm4gU2NvcGVPZmZzZXQobV9vZmZzZXQpOworICAgIH0KKyAgICAKKyAgICBDYXB0dXJlZEFy
Z3VtZW50T2Zmc2V0IGNhcHR1cmVkQXJndW1lbnRPZmZzZXRVbmNoZWNrZWQoKSBjb25zdAorICAg
IHsKKyAgICAgICAgaWYgKCFpc0NhcHR1cmVkQXJndW1lbnQoKSkKKyAgICAgICAgICAgIHJldHVy
biBDYXB0dXJlZEFyZ3VtZW50T2Zmc2V0KCk7CisgICAgICAgIHJldHVybiBDYXB0dXJlZEFyZ3Vt
ZW50T2Zmc2V0KG1fb2Zmc2V0KTsKKyAgICB9CisgICAgCisgICAgVmlydHVhbFJlZ2lzdGVyIHN0
YWNrT2Zmc2V0KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc1N0YWNrKCkpOworICAg
ICAgICByZXR1cm4gVmlydHVhbFJlZ2lzdGVyKG1fb2Zmc2V0KTsKKyAgICB9CisgICAgCisgICAg
U2NvcGVPZmZzZXQgc2NvcGVPZmZzZXQoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlz
U2NvcGUoKSk7CisgICAgICAgIHJldHVybiBTY29wZU9mZnNldChtX29mZnNldCk7CisgICAgfQor
ICAgIAorICAgIENhcHR1cmVkQXJndW1lbnRPZmZzZXQgY2FwdHVyZWRBcmd1bWVudE9mZnNldCgp
IGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaXNDYXB0dXJlZEFyZ3VtZW50KCkpOworICAg
ICAgICByZXR1cm4gQ2FwdHVyZWRBcmd1bWVudE9mZnNldChtX29mZnNldCk7CisgICAgfQorICAg
IAorICAgIHVuc2lnbmVkIHJhd09mZnNldCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQo
aXNWYWxpZCgpKTsKKyAgICAgICAgcmV0dXJuIG1fb2Zmc2V0OworICAgIH0KKyAgICAKKyAgICB2
b2lkIGNoZWNrU2FuaXR5KCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChBU1NFUlRfRElTQUJM
RUQpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBzd2l0Y2ggKG1fa2lu
ZCkgeworICAgICAgICBjYXNlIEludmFsaWRWYXJLaW5kOgorICAgICAgICAgICAgQVNTRVJUKG1f
b2Zmc2V0ID09IFVJTlRfTUFYKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBT
Y29wZVZhcktpbmQ6CisgICAgICAgICAgICBBU1NFUlQoc2NvcGVPZmZzZXQoKSk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIGNhc2UgU3RhY2tWYXJLaW5kOgorICAgICAgICAgICAgQVNT
RVJUKHN0YWNrT2Zmc2V0KCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIENh
cHR1cmVkQXJndW1lbnRLaW5kOgorICAgICAgICAgICAgQVNTRVJUKGNhcHR1cmVkQXJndW1lbnRP
ZmZzZXQoKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9y
PT0oY29uc3QgVmFyT2Zmc2V0JiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBt
X2tpbmQgPT0gb3RoZXIubV9raW5kCisgICAgICAgICAgICAmJiBtX29mZnNldCA9PSBvdGhlci5t
X29mZnNldDsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFZhck9mZnNl
dCYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7
CisgICAgfQorICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworICAgIAor
cHJpdmF0ZToKKyAgICBWYXJLaW5kIG1fa2luZDsKKyAgICB1bnNpZ25lZCBtX29mZnNldDsKK307
CisKK30gLy8gbmFtZXNwYWNlIEpTQworCituYW1lc3BhY2UgV1RGIHsKKwordm9pZCBwcmludElu
dGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpWYXJLaW5kKTsKKworfSAvLyBuYW1lc3BhY2UgV1RG
CisKKyNlbmRpZiAvLyBWYXJPZmZzZXRfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9WYXJpYWJsZUxvY2F0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVmFyaWFibGVMb2NhdGlvbi5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVmFyaWFibGVMb2NhdGlvbi5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2lmbmRlZiBWYXJpYWJsZUxvY2F0aW9uX2gKKyNkZWZpbmUgVmFyaWFibGVMb2Nh
dGlvbl9oCisKKyNpbmNsdWRlICJWaXJ0dWFsUmVnaXN0ZXIuaCIKKworbmFtZXNwYWNlIEpTQyB7
CisKKworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIFZhcmlhYmxlTG9jYXRpb25f
aAorCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>247195</attachid>
            <date>2015-02-23 20:37:13 -0800</date>
            <delta_ts>2015-02-24 10:22:46 -0800</delta_ts>
            <desc>more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>105126</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIv
Qnl0ZWNvZGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAxODA1MjkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTE2LDcgKzExNiw3IEBAIFBhcnNlckVycm9yIEJ5dGVjb2RlR2VuZXJhdG9yOjpnZW5l
cmF0ZSgKICAgICBtX2NvZGVCbG9jay0+c2hyaW5rVG9GaXQoKTsKIAogICAgIGlmIChtX2NvZGVC
bG9jay0+c3ltYm9sVGFibGUoKSAmJiAhbV9jb2RlQmxvY2stPnZtKCktPnR5cGVQcm9maWxlcigp
KQotICAgICAgICBtX2NvZGVCbG9jay0+c2V0U3ltYm9sVGFibGUobV9jb2RlQmxvY2stPnN5bWJv
bFRhYmxlKCktPmNsb25lQ2FwdHVyZWROYW1lcygqbV9jb2RlQmxvY2stPnZtKCkpKTsKKyAgICAg
ICAgbV9jb2RlQmxvY2stPnNldFN5bWJvbFRhYmxlKG1fY29kZUJsb2NrLT5zeW1ib2xUYWJsZSgp
LT5jbG9uZUlnbm9yaW5nU3RhY2soKm1fY29kZUJsb2NrLT52bSgpKSk7CiAKICAgICBpZiAobV9l
eHByZXNzaW9uVG9vRGVlcCkKICAgICAgICAgcmV0dXJuIFBhcnNlckVycm9yKFBhcnNlckVycm9y
OjpPdXRPZk1lbW9yeSk7CkBAIC0xMjQsMTcgKzEyNCwyOCBAQCBQYXJzZXJFcnJvciBCeXRlY29k
ZUdlbmVyYXRvcjo6Z2VuZXJhdGUoCiB9CiAKIGJvb2wgQnl0ZWNvZGVHZW5lcmF0b3I6OmFkZFZh
cigKLSAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgQ29uc3RhbnRNb2RlIGNvbnN0YW50TW9k
ZSwgV2F0Y2hNb2RlIHdhdGNoTW9kZSwgUmVnaXN0ZXJJRComIHIwKQorICAgIGNvbnN0IElkZW50
aWZpZXImIGlkZW50LCBDb25zdGFudE1vZGUgY29uc3RhbnRNb2RlLCBWYXJLaW5kIHZhcktpbmQs
IFdhdGNoTW9kZSB3YXRjaE1vZGUsCisgICAgUmVnaXN0ZXJJRComIHIwKQogewogICAgIEFTU0VS
VChzdGF0aWNfY2FzdDxzaXplX3Q+KG1fY29kZUJsb2NrLT5tX251bVZhcnMpID09IG1fY2FsbGVl
UmVnaXN0ZXJzLnNpemUoKSk7CiAgICAgCiAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIo
c3ltYm9sVGFibGUoKS5tX2xvY2spOwotICAgIGludCBpbmRleCA9IHZpcnR1YWxSZWdpc3RlckZv
ckxvY2FsKG1fY2FsbGVlUmVnaXN0ZXJzLnNpemUoKSkub2Zmc2V0KCk7Ci0gICAgU3ltYm9sVGFi
bGVFbnRyeSBuZXdFbnRyeShpbmRleCwgY29uc3RhbnRNb2RlID09IElzQ29uc3RhbnQgPyBSZWFk
T25seSA6IDApOworICAgIFZhck9mZnNldCB2YXJPZmZzZXQ7CisgICAgaWYgKHZhcktpbmQgPT0g
SGVhcFZhcktpbmQpCisgICAgICAgIHZhck9mZnNldCA9IFZhck9mZnNldChIZWFwT2Zmc2V0KG1f
bnVtQ2FwdHVyZWRWYXJpYWJsZXMrKykpOworICAgIGVsc2UgeworICAgICAgICBBU1NFUlQodmFy
S2luZCA9PSBTdGFja1ZhcktpbmQpOworICAgICAgICB2YXJPZmZzZXQgPSBWYXJPZmZzZXQodmly
dHVhbFJlZ2lzdGVyRm9yTG9jYWwobV9jYWxsZWVSZWdpc3RlcnMuc2l6ZSgpKSk7CisgICAgfQor
ICAgIFN5bWJvbFRhYmxlRW50cnkgbmV3RW50cnkodmFyT2Zmc2V0LCBjb25zdGFudE1vZGUgPT0g
SXNDb25zdGFudCA/IFJlYWRPbmx5IDogMCk7CiAgICAgU3ltYm9sVGFibGU6Ok1hcDo6QWRkUmVz
dWx0IHJlc3VsdCA9IHN5bWJvbFRhYmxlKCkuYWRkKGxvY2tlciwgaWRlbnQuaW1wbCgpLCBuZXdF
bnRyeSk7CiAKICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KSB7Ci0gICAgICAgIHIwID0gJnJl
Z2lzdGVyRm9yKHJlc3VsdC5pdGVyYXRvci0+dmFsdWUuZ2V0SW5kZXgoKSk7CisgICAgICAgIFJF
TEVBU0VfQVNTRVJUKHZhcktpbmQgPT0gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS52YXJPZmZzZXQo
KS5raW5kKCkpOworICAgICAgICBpZiAodmFyS2luZCA9PSBIZWFwVmFyS2luZCkKKyAgICAgICAg
ICAgIHIwID0gbnVsbHB0cjsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcjAgPSAmcmVnaXN0
ZXJGb3IocmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS52YXJPZmZzZXQoKSk7CiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICB9CiAgICAgCkBAIC0xNDQsNyArMTU1LDEwIEBAIGJvb2wgQnl0ZWNvZGVH
ZW5lcmF0b3I6OmFkZFZhcigKICAgICAgICAgbV93YXRjaGFibGVWYXJpYWJsZXMuYXBwZW5kKGlk
ZW50KTsKICAgICB9CiAgICAgCi0gICAgcjAgPSBhZGRWYXIoKTsKKyAgICBpZiAodmFyS2luZCA9
PSBIZWFwVmFyS2luZCkKKyAgICAgICAgcjAgPSBudWxscHRyOworICAgIGVsc2UKKyAgICAgICAg
cjAgPSBhZGRWYXIoKTsKICAgICAKICAgICBBU1NFUlQod2F0Y2hNb2RlID09IE5vdFdhdGNoYWJs
ZSB8fCBzdGF0aWNfY2FzdDxzaXplX3Q+KG1fY29kZUJsb2NrLT5tX251bVZhcnMpID09IG1fd2F0
Y2hhYmxlVmFyaWFibGVzLnNpemUoKSk7CiAgICAgCkBAIC0yMzEsNyArMjQ1LDYgQEAgQnl0ZWNv
ZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFZNJgogICAgIH0KICAgICBSZWdpc3RlcklE
KiBsb2NhbEFyZ3VtZW50c1JlZ2lzdGVyID0gbnVsbHB0cjsKICAgICBSZWdpc3RlcklEKiBzY3Jh
dGNoID0gYWRkVmFyKCk7Ci0gICAgbV9zeW1ib2xUYWJsZS0+c2V0Q2FwdHVyZVN0YXJ0KHZpcnR1
YWxSZWdpc3RlckZvckxvY2FsKG1fY29kZUJsb2NrLT5tX251bVZhcnMpLm9mZnNldCgpKTsKIAog
ICAgIGlmIChmdW5jdGlvbk5vZGUtPnVzZXNBcmd1bWVudHMoKSB8fCBjb2RlQmxvY2stPnVzZXNF
dmFsKCkpIHsgLy8gTWF5IHJlaWZ5IGFyZ3VtZW50cyBvYmplY3QuCiAgICAgICAgIFJlZ2lzdGVy
SUQqIHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3RlciA9IGFkZFZhcigpOyAvLyBBbm9ueW1vdXMs
IHNvIGl0IGNhbid0IGJlIG1vZGlmaWVkIGJ5IHVzZXIgY29kZS4KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgJ
KHJldmlzaW9uIDE4MDUyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIv
Qnl0ZWNvZGVHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNjEzLDE1ICs2MTMsMTUgQEAg
bmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgLy8gQWRkcyBhIHZhciBzbG90IGFuZCBtYXBzIGl0
IHRvIHRoZSBuYW1lIGlkZW50IGluIHN5bWJvbFRhYmxlKCkuCiAgICAgICAgIGVudW0gV2F0Y2hN
b2RlIHsgSXNXYXRjaGFibGUsIE5vdFdhdGNoYWJsZSB9OwotICAgICAgICBSZWdpc3RlcklEKiBh
ZGRWYXIoY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIENvbnN0YW50TW9kZSBjb25zdGFudE1vZGUs
IFdhdGNoTW9kZSB3YXRjaE1vZGUpCisgICAgICAgIFJlZ2lzdGVySUQqIGFkZFZhcihjb25zdCBJ
ZGVudGlmaWVyJiBpZGVudCwgQ29uc3RhbnRNb2RlIGNvbnN0YW50TW9kZSwgVmFyS2luZCB2YXJL
aW5kLCBXYXRjaE1vZGUgd2F0Y2hNb2RlKQogICAgICAgICB7CiAgICAgICAgICAgICBSZWdpc3Rl
cklEKiBsb2NhbDsKLSAgICAgICAgICAgIGFkZFZhcihpZGVudCwgY29uc3RhbnRNb2RlLCB3YXRj
aE1vZGUsIGxvY2FsKTsKKyAgICAgICAgICAgIGFkZFZhcihpZGVudCwgY29uc3RhbnRNb2RlLCB2
YXJLaW5kLCB3YXRjaE1vZGUsIGxvY2FsKTsKICAgICAgICAgICAgIHJldHVybiBsb2NhbDsKICAg
ICAgICAgfQogCiAgICAgICAgIC8vIERpdHRvLiBSZXR1cm5zIHRydWUgaWYgYSBuZXcgUmVnaXN0
ZXJJRCB3YXMgYWRkZWQsIGZhbHNlIGlmIGEgcHJlLWV4aXN0aW5nIFJlZ2lzdGVySUQgd2FzIHJl
LXVzZWQuCi0gICAgICAgIGJvb2wgYWRkVmFyKGNvbnN0IElkZW50aWZpZXImLCBDb25zdGFudE1v
ZGUsIFdhdGNoTW9kZSwgUmVnaXN0ZXJJRComKTsKKyAgICAgICAgYm9vbCBhZGRWYXIoY29uc3Qg
SWRlbnRpZmllciYsIENvbnN0YW50TW9kZSwgVmFyS2luZCwgV2F0Y2hNb2RlLCBSZWdpc3RlcklE
KiYpOwogICAgICAgICAKICAgICAgICAgLy8gQWRkcyBhbiBhbm9ueW1vdXMgdmFyIHNsb3QuIFRv
IGdpdmUgdGhpcyBzbG90IGEgbmFtZSwgYWRkIGl0IHRvIHN5bWJvbFRhYmxlKCkuCiAgICAgICAg
IFJlZ2lzdGVySUQqIGFkZFZhcigpCkBAIC03NzQsNiArNzc0LDcgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIFZlY3RvcjxJZGVudGlmaWVyLCAxNj4gbV93YXRjaGFibGVWYXJpYWJsZXM7CiAg
ICAgICAgIFNlZ21lbnRlZFZlY3RvcjxSZWdpc3RlcklELCAzMj4gbV9jb25zdGFudFBvb2xSZWdp
c3RlcnM7CiAgICAgICAgIFNlZ21lbnRlZFZlY3RvcjxSZWdpc3RlcklELCAzMj4gbV9jYWxsZWVS
ZWdpc3RlcnM7CisgICAgICAgIHVuc2lnbmVkIG1fbnVtQ2FwdHVyZWRWYXJpYWJsZXM7CiAgICAg
ICAgIFNlZ21lbnRlZFZlY3RvcjxSZWdpc3RlcklELCAzMj4gbV9wYXJhbWV0ZXJzOwogICAgICAg
ICBTZWdtZW50ZWRWZWN0b3I8TGFiZWwsIDMyPiBtX2xhYmVsczsKICAgICAgICAgTGFiZWxTY29w
ZVN0b3JlIG1fbGFiZWxTY29wZXM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9D
b3B5VG9rZW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3B5
VG9rZW4uaAkocmV2aXNpb24gMTgwNTI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
Q29weVRva2VuLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMywgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMyLDcgKzMyLDcgQEAgZW51bSBDb3B5VG9rZW4g
ewogICAgIEJ1dHRlcmZseUNvcHlUb2tlbiwKICAgICBUeXBlZEFycmF5VmVjdG9yQ29weVRva2Vu
LAogICAgIE1hcEJhY2tpbmdTdG9yZUNvcHlUb2tlbiwKLSAgICBBcmd1bWVudHNTbG93QXJndW1l
bnREYXRhQ29weVRva2VuCisgICAgRGlyZWN0QXJndW1lbnRzT3ZlcnJpZGVzQ29weVRva2VuCiB9
OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0FyZ3VtZW50c01vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Bcmd1bWVudHNNb2RlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Bcmd1bWVudHNNb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwz
OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIEFyZ3VtZW50c01vZGVfaAorI2RlZmluZSBBcmd1bWVudHNNb2RlX2gKKworbmFtZXNwYWNl
IEpTQyB7CisKK2VudW0gQXJndW1lbnRzTW9kZSB7CisgICAgQ2xvbmVkQXJndW1lbnRzQ3JlYXRp
b25Nb2RlLAorICAgIEZha2VBcmd1bWVudFZhbHVlc0NyZWF0aW9uTW9kZQorfTsKKworfSAvLyBu
YW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBBcmd1bWVudHNNb2RlX2gKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FwdHVyZWRBcmd1bWVudHNPZmZzZXQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhcHR1cmVkQXJndW1lbnRz
T2Zmc2V0LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0NhcHR1cmVkQXJndW1lbnRzT2Zmc2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQy
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDYXB0dXJlZEFyZ3VtZW50c09mZnNldC5oIgorCitu
YW1lc3BhY2UgSlNDIHsKKwordm9pZCBDYXB0dXJlZEFyZ3VtZW50c09mZnNldDo6ZHVtcChQcmlu
dFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIGlmICghKnRoaXMpIHsKKyAgICAgICAgb3V0LnBy
aW50KCJjYXB0dXJlZEFyZ3VtZW50SW52YWxpZCIpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgb3V0LnByaW50KCJjYXB0dXJlZEFyZ3VtZW50Iiwgb2Zmc2V0KCkpOworfQorCit9IC8v
IG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2Fw
dHVyZWRBcmd1bWVudHNPZmZzZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9DYXB0dXJlZEFyZ3VtZW50c09mZnNldC5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FwdHVyZWRBcmd1bWVudHNPZmZzZXQuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQ2FwdHVyZWRBcmd1bWVudHNPZmZzZXRfaAorI2Rl
ZmluZSBDYXB0dXJlZEFyZ3VtZW50c09mZnNldF9oCisKKyNpbmNsdWRlICJHZW5lcmljT2Zmc2V0
LmgiCisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBKU0MgeworCisv
LyBUaGlzIGlzIGFuIG9mZnNldCBpbnRvIHRoZSBzcGVjaWFsIGFyZ3VtZW50cyBvYmplY3QsIHdo
aWNoIGNhcHR1cmVzIHRoZSBhcmd1bWVudHMgdG8gYQorLy8gZnVuY3Rpb24uIEl0IG9ubHkgY29t
ZXMgaW50byBwbGF5IGl0IHRoZSBhcmd1bWVudHMgYXJlbid0IGFsc28gbGlmdGVkIGludG8gdGhl
IGFjdGl2YXRpb24uCisvLyBJZiB0aGV5IHdlcmUgdGhlbiBhY2Nlc3NlcyB0byB0aGUgYXJndW1l
bnRzIHdvdWxkIHJlc29sdmUgdG8gYSBTY29wZU9mZnNldCBhbmQgbm90IGEKKy8vIENhcHR1cmVk
QXJndW1lbnRzT2Zmc2V0LgorY2xhc3MgQ2FwdHVyZWRBcmd1bWVudHNPZmZzZXQgOiBwdWJsaWMg
R2VuZXJpY09mZnNldDxDYXB0dXJlZEFyZ3VtZW50c09mZnNldD4geworcHVibGljOgorICAgIENh
cHR1cmVkQXJndW1lbnRzT2Zmc2V0KCkgeyB9CisgICAgCisgICAgZXhwbGljaXQgQ2FwdHVyZWRB
cmd1bWVudHNPZmZzZXQodW5zaWduZWQgb2Zmc2V0KQorICAgICAgICA6IEdlbmVyaWNPZmZzZXQo
b2Zmc2V0KQorICAgIHsKKyAgICB9CisgICAgCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikg
Y29uc3Q7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIENhcHR1cmVkQXJn
dW1lbnRzT2Zmc2V0X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGly
ZWN0QXJndW1lbnRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9EaXJlY3RBcmd1bWVudHMuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDI2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRGlyZWN0QXJndW1lbnRzLmgiCisKKyNp
bmNsdWRlICJKU0FyZ3VtZW50c0l0ZXJhdG9yLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgor
CituYW1lc3BhY2UgSlNDIHsKKworU1RBVElDX0FTU0VSVF9JU19UUklWSUFMTFlfREVTVFJVQ1RJ
QkxFKERpcmVjdEFyZ3VtZW50cyk7CisKK2NvbnN0IENsYXNzSW5mbyBEaXJlY3RBcmd1bWVudHM6
OnNfaW5mbyA9IHsgIkFyZ3VtZW50cyIsICZCYXNlOjpzX2luZm8sIDAsIENSRUFURV9NRVRIT0Rf
VEFCTEUoRGlyZWN0QXJndW1lbnRzKSB9OworCitEaXJlY3RBcmd1bWVudHM6OkRpcmVjdEFyZ3Vt
ZW50cyhWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCB1bnNpZ25lZCBsZW5ndGgpCisgICAg
OiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCisgICAgLCBtX2xlbmd0aChsZW5ndGgpCit7Cit9CisKK0Rp
cmVjdEFyZ3VtZW50cyogRGlyZWN0QXJndW1lbnRzOjpjcmVhdGVVbmluaXRpYWxpemVkKFZNJiB2
bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICBEaXJlY3RB
cmd1bWVudHMqIHJlc3VsdCA9CisgICAgICAgIG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPERp
cmVjdEFyZ3VtZW50cz4odm0uaGVhcCwgYWxsb2NhdGlvblNpemUobGVuZ3RoKSkpCisgICAgICAg
ICh2bSwgc3RydWN0dXJlKTsKKyAgICByZXN1bHQtPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCitEaXJlY3RBcmd1bWVudHMqIERpcmVjdEFyZ3VtZW50czo6Y3Jl
YXRlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAg
ICBEaXJlY3RBcmd1bWVudHMqIHJlc3VsdCA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWQodm0sIHN0cnVj
dHVyZSwgbGVuZ3RoKTsKKyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBsZW5ndGg7IGktLTsp
CisgICAgICAgIHJlc3VsdC0+c3RvcmFnZSgpW2ldLmNsZWFyKCk7CisgICAgCisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKworRGlyZWN0QXJndW1lbnRzKiBEaXJlY3RBcmd1bWVudHM6OmNyZWF0ZUJ5
Q29weWluZyhWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBFeGVjU3RhdGUqIGV4ZWMpCit7
CisgICAgdW5zaWduZWQgbGVuZ3RoID0gZXhlYy0+YXJndW1lbnRDb3VudCgpOworICAgIERpcmVj
dEFyZ3VtZW50cyogcmVzdWx0ID0gY3JlYXRlVW5pbml0aWFsaXplZCh2bSwgc3RydWN0dXJlLCBs
ZW5ndGgpOworICAgIAorICAgIGZvciAodW5zaWduZWQgaSA9IGxlbmd0aDsgaS0tOykKKyAgICAg
ICAgcmVzdWx0LT5zdG9yYWdlKClbaV0uc2V0KHZtLCByZXN1bHQsIGV4ZWMtPnVuY2hlY2tlZEFy
Z3VtZW50KGkpKTsKKyAgICAKKyAgICByZXN1bHQtPmNhbGxlZSgpLnNldCh2bSwgcmVzdWx0LCBq
c0Nhc3Q8SlNGdW5jdGlvbio+KGV4ZWMtPmNhbGxlZSgpKSk7CisgICAgCisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKwordm9pZCBEaXJlY3RBcmd1bWVudHM6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiB0
aGlzQ2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgRGlyZWN0QXJndW1lbnRzKiB0
aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8RGlyZWN0QXJndW1lbnRzKj4odGhpc0NlbGwpOworICAg
IEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKKyAgICBCYXNl
Ojp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOworICAgIAorICAgIHZpc2l0b3Iu
YXBwZW5kVmFsdWVzKHRoaXNPYmplY3QtPnN0b3JhZ2UoKSwgdGhpc09iamVjdC0+bV9sZW5ndGgp
OworfQorCitTdHJ1Y3R1cmUqIERpcmVjdEFyZ3VtZW50czo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2
bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCit7Cisg
ICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwg
VHlwZUluZm8oRGlyZWN0QXJndW1lbnRzVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwor
fQorCitib29sIERpcmVjdEFyZ3VtZW50czo6Z2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiBv
YmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIGlkZW50LCBQcm9wZXJ0eVNsb3Qm
IHNsb3QpCit7CisgICAgRGlyZWN0QXJndW1lbnRzKiB0aGlzT2JqZWN0ID0ganNDYXN0PERpcmVj
dEFyZ3VtZW50cyo+KG9iamVjdCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICAKKyAg
ICBpZiAoIXRoaXNPYmplY3QtPm1fb3ZlcnJpZGVzKSB7CisgICAgICAgIGlmIChpZGVudCA9PSB2
bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgpIHsKKyAgICAgICAgICAgIHNsb3Quc2V0VmFsdWUodGhp
c09iamVjdCwgRG9udEVudW0sIGpzTnVtYmVyKHRoaXNPYmplY3QtPm1fbGVuZ3RoKSk7CisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfSBlbHNlIGlmIChpZGVudCA9PSB2bS5wcm9w
ZXJ0eU5hbWVzLT5jYWxsZWUpIHsKKyAgICAgICAgICAgIGlmICghdGhpc09iamVjdC0+aXNTdHJp
Y3RNb2RlKCkpIHsKKyAgICAgICAgICAgICAgICBzbG90LnNldFZhbHVlKHRoaXNPYmplY3QsIERv
bnRFbnVtLCB0aGlzT2JqZWN0LT5jYWxsZWUoKS5nZXQoKSk7CisgICAgICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzT2JqZWN0LT5zbG93RG93
bkFuZFdhc3RlTWVtb3J5KHZtKTsKKyAgICAgICAgfSBlbHNlIGlmIChpZGVudCA9PSB2bS5wcm9w
ZXJ0eU5hbWVzLT5jYWxsZXIpCisgICAgICAgICAgICB0aGlzT2JqZWN0LT5zbG93RG93bkFuZFdh
c3RlTWVtb3J5KHZtKTsKKyAgICB9CisgICAgCisgICAgdW5zaWduZWQgaW5kZXggPSBpZGVudC5h
c0luZGV4KCk7CisgICAgaWYgKHRoaXNPYmplY3QtPmNhbkFjY2Vzc0luZGV4UXVpY2tseShpbmRl
eCkpIHsKKyAgICAgICAgc2xvdC5zZXRWYWx1ZSh0aGlzT2JqZWN0LCBOb25lLCB0aGlzT2JqZWN0
LT5nZXRJbmRleFF1aWNrbHkoaW5kZXgpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
ICAgIAorICAgIGlmIChCYXNlOjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgZXhlYywg
aWRlbnQsIHNsb3QpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICBpZiAoaWRlbnQg
PT0gdm0ucHJvcGVydHlOYW1lcy0+aXRlcmF0b3JQcml2YXRlTmFtZSkgeworICAgICAgICBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpOwor
ICAgICAgICB0aGlzT2JqZWN0LT5KU0NfTkFUSVZFX0ZVTkNUSU9OKHZtLnByb3BlcnR5TmFtZXMt
Pml0ZXJhdG9yUHJpdmF0ZU5hbWUsIGFyZ3VtZW50c0Z1bmNJdGVyYXRvciwgRG9udEVudW0sIDAp
OworICAgICAgICBpZiAoSlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBl
eGVjLCBpZGVudCwgc2xvdCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAg
CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIERpcmVjdEFyZ3VtZW50czo6Z2V0T3duUHJv
cGVydHlTbG90QnlJbmRleChKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2ln
bmVkIGluZGV4LCBQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgRGlyZWN0QXJndW1lbnRzKiB0
aGlzT2JqZWN0ID0ganNDYXN0PERpcmVjdEFyZ3VtZW50cyo+KG9iamVjdCk7CisgICAgCisgICAg
aWYgKHRoaXNPYmplY3QtPmNhbkFjY2Vzc0luZGV4UXVpY2tseShpbmRleCkpIHsKKyAgICAgICAg
c2xvdC5zZXRWYWx1ZSh0aGlzT2JqZWN0LCBOb25lLCB0aGlzT2JqZWN0LT5nZXRJbmRleFF1aWNr
bHkoaW5kZXgpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIHJldHVy
biBCYXNlOjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KG9iamVjdCwgZXhlYywgaW5kZXgsIHNs
b3QpOworfQorCit2b2lkIERpcmVjdEFyZ3VtZW50czo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09i
amVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBhcnJheSwg
RW51bWVyYXRpb25Nb2RlIG1vZGUpCit7CisgICAgRGlyZWN0QXJndW1lbnRzKiB0aGlzT2JqZWN0
ID0ganNDYXN0PERpcmVjdEFyZ3VtZW50cyo+KG9iamVjdCk7CisgICAgCisgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHRoaXNPYmplY3QtPm1fbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgaWYg
KCF0aGlzT2JqZWN0LT5jYW5BY2Nlc3NJbmRleFF1aWNrbHkoaW5kZXgpKQorICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgIGFycmF5LmFkZChJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGkpKTsK
KyAgICB9CisgICAgaWYgKHNob3VsZEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMobW9kZSkgJiYg
IW1fb3ZlcnJpZGVzKSB7CisgICAgICAgIGFycmF5LmFkZChleGVjLT5wcm9wZXJ0eU5hbWVzKCku
Y2FsbGVlKTsKKyAgICAgICAgYXJyYXkuYWRkKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgp
OworICAgIH0KKyAgICBCYXNlOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGV4ZWMs
IGFycmF5LCBtb2RlKTsKK30KKwordm9pZCBEaXJlY3RBcmd1bWVudHM6OnB1dChKU0NlbGwqIGNl
bGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIGlkZW50LCBKU1ZhbHVlIHZhbHVlLCBQ
dXRQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgRGlyZWN0QXJndW1lbnRzKiB0aGlzT2JqZWN0
ID0ganNDYXN0PERpcmVjdEFyZ3VtZW50cyo+KG9iamVjdCk7CisgICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKKyAgICAKKyAgICBpZiAoIXRoaXNPYmplY3QtPm1fb3ZlcnJpZGVzCisgICAgICAgICYm
IChpZGVudCA9PSB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgKKyAgICAgICAgICAgIHx8IGlkZW50
ID09IHZtLnByb3BlcnR5TmFtZXMtPmNhbGxlZQorICAgICAgICAgICAgfHwgaWRlbnQgPT0gdm0u
cHJvcGVydHlOYW1lcy0+Y2FsbGVyKSkKKyAgICAgICAgdGhpc09iamVjdC0+c2xvd0Rvd25BbmRX
YXN0ZU1lbW9yeSh2bSk7CisgICAgCisgICAgdW5zaWduZWQgaW5kZXggPSBpZGVudC5hc0luZGV4
KCk7CisgICAgaWYgKHRoaXNPYmplY3QtPmNhbkFjY2Vzc0luZGV4UXVpY2tseShpbmRleCkpIHsK
KyAgICAgICAgc2V0SW5kZXhRdWlja2x5KHZtLCBpbmRleCwgdmFsdWUpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIAorICAgIEJhc2U6OnB1dCh0aGlzT2JqZWN0LCBleGVjLCBpZGVudCwg
dmFsdWUsIHNsb3QpOworfQorCit2b2lkIERpcmVjdEFyZ3VtZW50czo6cHV0QnlJbmRleChKU0Nl
bGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaW5kZXgsIEpTVmFsdWUgdmFsdWUs
IGJvb2wgc2hvdWxkVGhyb3cpCit7CisgICAgRGlyZWN0QXJndW1lbnRzKiB0aGlzT2JqZWN0ID0g
anNDYXN0PERpcmVjdEFyZ3VtZW50cyo+KG9iamVjdCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKKyAgICAKKyAgICBpZiAodGhpc09iamVjdC0+Y2FuU2V0SW5kZXhRdWlja2x5KGluZGV4KSkg
eworICAgICAgICBzZXRJbmRleFF1aWNrbHkodm0sIGluZGV4LCB2YWx1ZSk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIEJhc2U6OnB1dEJ5SW5kZXgoY2VsbCwgZXhl
YywgaW5kZXgsIHZhbHVlLCBzaG91bGRUaHJvdyk7Cit9CisKK3ZvaWQgRGlyZWN0QXJndW1lbnRz
OjpkZWxldGVQcm9wZXJ0eShKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlO
YW1lIGlkZW50KQoreworICAgIERpcmVjdEFyZ3VtZW50cyogdGhpc09iamVjdCA9IGpzQ2FzdDxE
aXJlY3RBcmd1bWVudHMqPihvYmplY3QpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAg
CisgICAgaWYgKCF0aGlzT2JqZWN0LT5tX292ZXJyaWRlcworICAgICAgICAmJiAoaWRlbnQgPT0g
dm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoCisgICAgICAgICAgICB8fCBpZGVudCA9PSB2bS5wcm9w
ZXJ0eU5hbWVzLT5jYWxsZWUKKyAgICAgICAgICAgIHx8IGlkZW50ID09IHZtLnByb3BlcnR5TmFt
ZXMtPmNhbGxlcikpCisgICAgICAgIHRoaXNPYmplY3QtPnNsb3dEb3duQW5kV2FzdGVNZW1vcnko
dm0pOworICAgIAorICAgIHVuc2lnbmVkIGluZGV4ID0gaWRlbnQuYXNJbmRleCgpOworICAgIGlm
ICh0aGlzT2JqZWN0LT5jYW5BY2Nlc3NJbmRleFF1aWNrbHkoaW5kZXgpKSB7CisgICAgICAgIHRo
aXNPYmplY3QtPnNsb3dEb3duQW5kV2FzdGVNZW1vcnlJZk5lY2Vzc2FyeSh2bSk7CisgICAgICAg
IHRoaXNPYmplY3QtPm1fb3ZlcnJpZGVzLmdldCgpW2luZGV4XSA9IHRydWU7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgCisgICAgQmFzZTo6ZGVsZXRlUHJvcGVydHkodGhpc09iamVjdCwg
ZXhlYywgaWRlbnQpOworfQorCit2b2lkIERpcmVjdEFyZ3VtZW50czo6ZGVsZXRlUHJvcGVydHlC
eUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpbmRleCkKK3sK
KyAgICBEaXJlY3RBcmd1bWVudHMqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8RGlyZWN0QXJndW1lbnRz
Kj4ob2JqZWN0KTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIAorICAgIGlmICh0aGlz
T2JqZWN0LT5jYW5BY2Nlc3NJbmRleFF1aWNrbHkoaW5kZXgpKSB7CisgICAgICAgIHRoaXNPYmpl
Y3QtPnNsb3dEb3duQW5kV2FzdGVNZW1vcnlJZk5lY2Vzc2FyeSh2bSk7CisgICAgICAgIHRoaXNP
YmplY3QtPm1fb3ZlcnJpZGVzLmdldCgpW2luZGV4XSA9IHRydWU7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgCisgICAgcmV0dXJuIEJhc2U6OmRlbGV0ZVByb3BlcnR5QnlJbmRleChjZWxs
LCBleGVjLCBpbmRleCk7Cit9CisKK3ZvaWQgRGlyZWN0QXJndW1lbnRzOjpkZWZpbmVPd25Qcm9w
ZXJ0eShKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBpZGVu
dCwgY29uc3QgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBib29sIHNob3VsZFRocm93
KQoreworICAgIERpcmVjdEFyZ3VtZW50cyogdGhpc09iamVjdCA9IGpzQ2FzdDxEaXJlY3RBcmd1
bWVudHMqPihvYmplY3QpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgCisgICAgaWYg
KCF0aGlzT2JqZWN0LT5tX292ZXJyaWRlcworICAgICAgICAmJiAoaWRlbnQgPT0gdm0ucHJvcGVy
dHlOYW1lcy0+bGVuZ3RoCisgICAgICAgICAgICB8fCBpZGVudCA9PSB2bS5wcm9wZXJ0eU5hbWVz
LT5jYWxsZWUKKyAgICAgICAgICAgIHx8IGlkZW50ID09IHZtLnByb3BlcnR5TmFtZXMtPmNhbGxl
cikpCisgICAgICAgIHRoaXNPYmplY3QtPnNsb3dEb3duQW5kV2FzdGVNZW1vcnkodm0pOworICAg
IAorICAgIHVuc2lnbmVkIGluZGV4ID0gaWRlbnQuYXNJbmRleCgpOworICAgIGlmIChpbmRleCA8
IHRoaXNPYmplY3QtPm1fbGVuZ3RoKSB7CisgICAgICAgIC8vIElmIHRoaXMgcHJvcGVydHkgCisg
ICAgICAgIC8vIEZJWE1FOiB0aGlzIHdpbGwgYmUgYSBzdHJ1Z2dsZS4KKyAgICAgICAgaWYgKCF0
aGlzT2JqZWN0LT5jYW5BY2Nlc3NJbmRleFF1aWNrbHkoaW5kZXgpKQorICAgIH0KK30KKwordm9p
ZCBEaXJlY3RBcmd1bWVudHM6OnNsb3dEb3duQW5kV2FzdGVNZW1vcnkoVk0mIHZtKQoreworICAg
IFJFTEVBU0VfQVNTRVJUKCFtX292ZXJyaWRlcyk7CisgICAgCisgICAgcHV0RGlyZWN0KHZtLCB2
bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKG1fbGVuZ3RoKSwgRG9udEVudW0pOwor
ICAgIAorICAgIGlmIChpc1N0cmljdE1vZGUoKSkgeworICAgICAgICBwdXREaXJlY3ROb25JbmRl
eEFjY2Vzc29yKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5jYWxsZWUsIGdsb2JhbE9iamVjdCgpLT50
aHJvd1R5cGVFcnJvckdldHRlclNldHRlcih2bSksIERvbnRFbnVtIHwgRG9udERlbGV0ZSB8IEFj
Y2Vzc29yKTsKKyAgICAgICAgcHV0RGlyZWN0Tm9uSW5kZXhBY2Nlc3Nvcih2bSwgdm0ucHJvcGVy
dHlOYW1lcy0+Y2FsbGVyLCBnbG9iYWxPYmplY3QoKS0+dGhyb3dUeXBlRXJyb3JHZXR0ZXJTZXR0
ZXIodm0pLCBEb250RW51bSB8IERvbnREZWxldGUgfCBBY2Nlc3Nvcik7CisgICAgfSBlbHNlCisg
ICAgICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+Y2FsbGVlLCBtX2NhbGxlZS5n
ZXQoKSwgRG9udEVudW0pOworICAgIAorICAgIHZvaWQqIGJhY2tpbmdTdG9yZTsKKyAgICBSRUxF
QVNFX0FTU0VSVCh2bS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZSh0aGlzLCBtX2xlbmd0aCksICZi
YWNraW5nU3RvcmUpOworICAgIG1fb3ZlcnJpZGVzLnNldCh2bSwgdGhpcywgc3RhdGljX2Nhc3Q8
Ym9vbCo+KGJhY2tpbmdTdG9yZSkpOworICAgIGZvciAodW5zaWduZWQgaSA9IG1fbGVuZ3RoOyBp
LS07KQorICAgICAgICBtX292ZXJyaWRlcy5nZXQoKVtpXSA9IGZhbHNlOworfQorCit2b2lkIERp
cmVjdEFyZ3VtZW50czo6c2xvd0Rvd25BbmRXYXN0ZU1lbW9yeUlmTmVjZXNzYXJ5KFZNJiB2bSkK
K3sKKyAgICBpZiAoIW1fb3ZlcnJpZGVzKQorICAgICAgICBzbG93RG93bkFuZFdhc3RlTWVtb3J5
KHZtKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBEaXJlY3RBcmd1bWVudHNfaAorI2RlZmluZSBEaXJlY3RBcmd1
bWVudHNfaAorCisjaW5jbHVkZSAiSlNPYmplY3QuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKKy8v
IFRoaXMgaXMgYW4gQXJndW1lbnRzLWNsYXNzIG9iamVjdCB0aGF0IHdlIGNyZWF0ZSB3aGVuIHlv
dSBzYXkgImFyZ3VtZW50cyIgaW5zaWRlIGEgZnVuY3Rpb24sCisvLyBhbmQgbm9uZSBvZiB0aGUg
YXJndW1lbnRzIGFyZSBjYXB0dXJlZCBpbiB0aGUgZnVuY3Rpb24ncyBhY3RpdmF0aW9uLiBUaGUg
ZnVuY3Rpb24gd2lsbCBjb3B5IGFsbAorLy8gb2YgaXRzIGFyZ3VtZW50cyBpbnRvIHRoaXMgb2Jq
ZWN0LCBhbmQgYWxsIHN1YnNlcXVlbnQgYWNjZXNzZXMgdG8gdGhlIGFyZ3VtZW50cyB3aWxsIGdv
IHRocm91Z2gKKy8vIHRoaXMgb2JqZWN0IHRoZXJlYWZ0ZXIuIFNwZWNpYWwgc3VwcG9ydCBpcyBp
biBwbGFjZSBmb3IgbWlzY2hldmlvdXMgZXZlbnRzIGxpa2UgdGhlIGFyZ3VtZW50cworLy8gYmVp
bmcgZGVsZXRlZCAoc29tZXRoaW5nIGxpa2UgImRlbGV0ZSBhcmd1bWVudHNbMF0iKSBvciByZWNv
bmZpZ3VyZWQgKGJyb2FkbHksIHdlIHNheSBkZWxldGlvbnMKKy8vIGFuZCByZWNvbmZpZ3VyYXRp
b25zIG1lYW4gdGhhdCB0aGUgcmVzcGVjdGl2ZSBhcmd1bWVudCB3YXMgIm92ZXJyaWRkZW4iKS4K
Ky8vCisvLyBUbyBzcGVlZCBhbGxvY2F0aW9uLCB0aGlzIG9iamVjdCB3aWxsIGhvbGQgYWxsIG9m
IHRoZSBhcmd1bWVudHMgaW4tcGxhY2UuIFRoZSBhcmd1bWVudHMgYXMgd2VsbAorLy8gYXMgYSB0
YWJsZSBvZiBmbGFncyBzYXlpbmcgd2hpY2ggYXJndW1lbnRzIHdlcmUgb3ZlcnJpZGRlbi4KK2Ns
YXNzIERpcmVjdEFyZ3VtZW50cyA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKK3B1YmxpYzoK
KyAgICB0eXBlZGVmIEpTTm9uRmluYWxPYmplY3QgQmFzZTsKKworcHJpdmF0ZToKKyAgICBEaXJl
Y3RBcmd1bWVudHMoVk0mLCBTdHJ1Y3R1cmUqLCB1bnNpZ25lZCBsZW5ndGgpOworICAgIAorcHVi
bGljOgorICAgIC8vIENyZWF0ZXMgYW4gYXJndW1lbnRzIG9iamVjdCBidXQgbGVhdmVzIGl0IHVu
aW5pdGlhbGl6ZWQuCisgICAgc3RhdGljIERpcmVjdEFyZ3VtZW50cyogY3JlYXRlVW5pbml0aWFs
aXplZChWTSYsIFN0cnVjdHVyZSosIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgCisgICAgLy8gQ3Jl
YXRlcyBhbiBhcmd1bWVudHMgb2JqZWN0IGFuZCBpbml0aWFsaXplcyBldmVyeXRoaW5nIHRvIHRo
ZSBlbXB0eSB2YWx1ZS4KKyAgICBzdGF0aWMgRGlyZWN0QXJndW1lbnRzKiBjcmVhdGUoVk0mLCBT
dHJ1Y3R1cmUqLCB1bnNpZ25lZCBsZW5ndGgpOworICAgIAorICAgIC8vIENyZWF0ZXMgYW4gYXJn
dW1lbnRzIG9iamVjdCBieSBjb3B5aW5nIHRoZSBhcmd1bW5ldHMgZnJvbSB0aGUgc3RhY2suCisg
ICAgc3RhdGljIERpcmVjdEFyZ3VtZW50cyogY3JlYXRlQnlDb3B5aW5nKFZNJiwgU3RydWN0dXJl
KiwgRXhlY1N0YXRlKik7CisgICAgCisgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0Nl
bGwqLCBTbG90VmlzaXRvciYpOworICAgIHN0YXRpYyB2b2lkIGNvcHlCYWNraW5nU3RvcmUoSlND
ZWxsKiwgQ29weVZpc2l0b3ImLCBDb3B5VG9rZW4pOworICAgIAorICAgIHVpbnQzMl90IGxlbmd0
aChFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoVU5MSUtFTFkobV9v
dmVycmlkZXMpKQorICAgICAgICAgICAgcmV0dXJuIGdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5h
bWVzKCkubGVuZ3RoKS50b1VJbnQzMihleGVjKTsKKyAgICAgICAgcmV0dXJuIG1fbGVuZ3RoOwor
ICAgIH0KKyAgICAKKyAgICBib29sIGNhbkFjY2Vzc0luZGV4UXVpY2tseSh1aW50MzJfdCBpKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGkgPCBtX2xlbmd0aCAmJiAoIW1fb3ZlcnJpZGVz
IHx8ICFtX292ZXJyaWRlcy5nZXQoKVtpXSk7CisgICAgfQorICAgIAorICAgIEpTVmFsdWUgZ2V0
SW5kZXhRdWlja2x5KHVpbnQzMl90IGkpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlRfV0lU
SF9TRUNVUklUWV9JTVBMSUNBVElPTihjYW5BY2Nlc3NJbmRleFF1aWNrbHkoaSkpOworICAgICAg
ICByZXR1cm4gc3RvcmFnZSgpW2ldLmdldCgpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNldElu
ZGV4UXVpY2tseShWTSYgdm0sIHVpbnQzMl90IGksIEpTVmFsdWUgdmFsdWUpCisgICAgeworICAg
ICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihjYW5BY2Nlc3NJbmRleFF1aWNr
bHkoaSkpOworICAgICAgICBzdG9yYWdlKClbaV0uc2V0KHZtLCB0aGlzLCB2YWx1ZSk7CisgICAg
fQorICAgIAorICAgIFdyaXRlQmFycmllcjxKU0Z1bmN0aW9uPiYgY2FsbGVlKCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBtX2NhbGxlZTsKKyAgICB9CisgICAgCisgICAgV3JpdGVCYXJyaWVyPFVu
a25vd24+JiBhcmd1bWVudChDYXB0dXJlZEFyZ3VtZW50c09mZnNldCBvZmZzZXQpCisgICAgewor
ICAgICAgICBBU1NFUlQob2Zmc2V0KTsKKyAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1Q
TElDQVRJT04ob2Zmc2V0Lm9mZnNldCgpIDwgbV9sZW5ndGgpOworICAgICAgICByZXR1cm4gc3Rv
cmFnZSgpW29mZnNldC5vZmZzZXQoKV07CisgICAgfQorICAgIAorICAgIEZ1bmN0aW9uRXhlY3V0
YWJsZSogZXhlY3V0YWJsZSgpCisgICAgeworICAgICAgICByZXR1cm4ganNDYXN0PEZ1bmN0aW9u
RXhlY3V0YWJsZSo+KGNhbGxlZS0+ZXhlY3V0YWJsZSgpKTsKKyAgICB9CisgICAgCisgICAgYm9v
bCBpc1N0cmljdE1vZGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGV4ZWN1dGFibGUoKS0+aXNT
dHJpY3RNb2RlKCk7CisgICAgfQorICAgIAorICAgIERFQ0xBUkVfSU5GTzsKKyAgICAKKyAgICBz
dGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpT
VmFsdWUgcHJvdG90eXBlKTsKKyAgICAKK3ByaXZhdGU6CisgICAgc3RhdGljIGJvb2wgZ2V0T3du
UHJvcGVydHlTbG90KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0
eVNsb3QmKTsKKyAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTT2Jq
ZWN0KiwgRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsK
KyAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRl
KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOworICAgIHN0YXRpYyB2b2lk
IHB1dChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3Bl
cnR5U2xvdCYpOworICAgIHN0YXRpYyB2b2lkIHB1dEJ5SW5kZXgoSlNDZWxsKiwgRXhlY1N0YXRl
KiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKKyAg
ICBzdGF0aWMgdm9pZCBkZWxldGVQcm9wZXJ0eShKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0
eU5hbWUpOworICAgIHN0YXRpYyB2b2lkIGRlbGV0ZVByb3BlcnR5QnlJbmRleChKU0NlbGwqLCBF
eGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUpOworICAgIHN0YXRpYyB2b2lkIGRlZmlu
ZU93blByb3BlcnR5KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBjb25zdCBQ
cm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHNob3VsZFRocm93KTsKKyAgICAKKyAgICB2b2lkIHNs
b3dEb3duQW5kV2FzdGVNZW1vcnkoVk0mKTsKKyAgICB2b2lkIHNsb3dEb3duQW5kV2FzdGVNZW1v
cnlJZk5lY2Vzc2FyeShWTSYpOworICAgIAorICAgIHN0YXRpYyBzaXplX3Qgc3RvcmFnZU9mZnNl
dCgpCisgICAgeworICAgICAgICByZXR1cm4gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mPHNpemVv
ZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pPihzaXplb2YoRGlyZWN0QXJndW1lbnRzKSk7CisgICAg
fQorICAgIAorICAgIHN0YXRpYyBzaXplX3Qgb3ZlcnJpZGVGbGFnc09mZnNldCh1aW50MzJfdCBs
ZW5ndGgpCisgICAgeworICAgICAgICByZXR1cm4gc3RvcmFnZU9mZnNldCgpICsgc2l6ZW9mKFdy
aXRlQmFycmllcjxVbmtub3duPikgKiBsZW5ndGg7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBz
aXplX3QgYWxsb2NhdGlvblNpemUodWludDMyX3QgbGVuZ3RoKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIG92ZXJyaWRlRmxhZ3NPZmZzZXQobGVuZ3RoKSArIFdURjo6cm91bmRVcFRvTXVsdGlwbGVP
ZjxzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KT4obGVuZ3RoKTsKKyAgICB9CisgICAgCisg
ICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiBzdG9yYWdlKCkKKyAgICB7CisgICAgICAgIHJldHVy
biBiaXR3aXNlX2Nhc3Q8V3JpdGVCYXJyaWVyPFVua25vd24+Kj4oYml0d2lzZV9jYXN0PGNoYXIq
Pih0aGlzKSArIHN0b3JhZ2VPZmZzZXQoKSk7CisgICAgfQorICAgIAorICAgIGJvb2wqIG92ZXJy
aWRlRmxhZ3MoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxXcml0ZUJhcnJp
ZXI8VW5rbm93bj4qPihiaXR3aXNlX2Nhc3Q8Y2hhcio+KHRoaXMpICsgb3ZlcnJpZGVGbGFnc09m
ZnNldChtX2xlbmd0aCkpOworICAgIH0KKyAgICAKKyAgICBXcml0ZUJhcnJpZXI8SlNGdW5jdGlv
bio+IG1fY2FsbGVlOworICAgIHVpbnQzMl90IG1fbGVuZ3RoOyAvLyBBbHdheXMgdGhlIGFjdHVh
bCBsZW5ndGggb2YgY2FwdHVyZWQgYXJndW1lbnRzIGFuZCBuZXZlciB3aGF0IHdhcyBzdG9yZWQg
aW50byB0aGUgbGVuZ3RoIHByb3BlcnR5LgorICAgIENvcHlXcml0ZUJhcnJpZXI8Ym9vbD4gbV9v
dmVycmlkZXM7IC8vIElmIG5vbi1udWxsLCBpdCBtZWFucyB0aGF0IGxlbmd0aCwgY2FsbGVlLCBh
bmQgY2FsbGVyIGFyZSBmdWxseSBtYXRlcmlhbGl6ZWQgcHJvcGVydGllcy4KK307CisKK30gLy8g
bmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRGlyZWN0QXJndW1lbnRzX2gKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRm9yZWlnblZhcmlhYmxlSW5kZXguaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Gb3JlaWduVmFyaWFibGVJbmRl
eC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRm9yZWln
blZhcmlhYmxlSW5kZXguaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUyIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgRm9yZWlnblZh
cmlhYmxlSW5kZXhfaAorI2RlZmluZSBGb3JlaWduVmFyaWFibGVJbmRleF9oCisKK25hbWVzcGFj
ZSBKU0MgeworCitjbGFzcyBGb3JlaWduVmFyaWFibGVJbmRleCB7CitwdWJsaWM6CisgICAgRm9y
ZWlnblZhcmlhYmxlSW5kZXgoKQorICAgICAgICA6IG1faW5kZXgoVUlOVF9NQVgpCisgICAgewor
ICAgIH0KKyAgICAKKyAgICBleHBsaWNpdCBGb3JlaWduVmFyaWFibGVJbmRleCh1bnNpZ25lZCBp
bmRleCkKKyAgICAgICAgOiBtX2luZGV4KGluZGV4KQorICAgIHsKKyAgICB9CisgICAgCisgICAg
CisgICAgCitwcml2YXRlOgorICAgIHVuc2lnbmVkIG1faW5kZXg7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBKU0MKKworI2VuZGlmIC8vIEZvcmVpZ25WYXJpYWJsZUluZGV4X2gKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY09mZnNldC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNPZmZzZXQuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNPZmZzZXQuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDExMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEdlbmVyaWNPZmZzZXRfaAorI2RlZmluZSBHZW5l
cmljT2Zmc2V0X2gKKworI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisKK25hbWVzcGFjZSBK
U0MgeworCisvLyBBIG1peGluIGZvciBjcmVhdGluZyB0aGUgdmFyaW91cyBraW5kcyBvZiB2YXJp
YWJsZSBvZmZzZXRzIHRoYXQgb3VyIGVuZ2luZSBzdXBwb3J0cy4KK3RlbXBsYXRlPHR5cGVuYW1l
IFQ+CitjbGFzcyBHZW5lcmljT2Zmc2V0IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgY29uc3QgdW5z
aWduZWQgaW52YWxpZE9mZnNldCA9IFVJTlRfTUFYOworICAgIAorICAgIEdlbmVyaWNPZmZzZXQo
KQorICAgICAgICA6IG1fb2Zmc2V0KGludmFsaWRPZmZzZXQpCisgICAgeworICAgIH0KKyAgICAK
KyAgICBleHBsaWNpdCBHZW5lcmljT2Zmc2V0KHVuc2lnbmVkIG9mZnNldCkKKyAgICAgICAgOiBt
X29mZnNldChvZmZzZXQpCisgICAgeworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yISgp
IGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0ID09IGludmFsaWRPZmZzZXQ7IH0KKyAgICAKKyAgICB1
bnNpZ25lZCBvZmZzZXRVbmNoZWNrZWQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1f
b2Zmc2V0OworICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBvZmZzZXQoKSBjb25zdAorICAgIHsK
KyAgICAgICAgQVNTRVJUKG1fb2Zmc2V0ICE9IGludmFsaWRPZmZzZXQpOworICAgICAgICByZXR1
cm4gbV9vZmZzZXQ7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBUJiBv
dGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX29mZnNldCA9PSBvdGhlci5vZmZz
ZXRVbmNoZWNrZWQoKTsKKyAgICB9CisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFQmIG90aGVy
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fb2Zmc2V0ICE9IG90aGVyLm9mZnNldFVu
Y2hlY2tlZCgpOworICAgIH0KKyAgICBib29sIG9wZXJhdG9yPChjb25zdCBUJiBvdGhlcikgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX29mZnNldCA8IG90aGVyLm9mZnNldFVuY2hlY2tl
ZCgpOworICAgIH0KKyAgICBib29sIG9wZXJhdG9yPihjb25zdCBUJiBvdGhlcikgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBtX29mZnNldCA+IG90aGVyLm9mZnNldFVuY2hlY2tlZCgpOwor
ICAgIH0KKyAgICBib29sIG9wZXJhdG9yPD0oY29uc3QgVCYgb3RoZXIpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gbV9vZmZzZXQgPD0gb3RoZXIub2Zmc2V0VW5jaGVja2VkKCk7CisgICAg
fQorICAgIGJvb2wgb3BlcmF0b3I+PShjb25zdCBUJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiBtX29mZnNldCA+PSBvdGhlci5vZmZzZXRVbmNoZWNrZWQoKTsKKyAgICB9Cisg
ICAgCisgICAgVCBvcGVyYXRvcisoaW50IHZhbHVlKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIFQob2Zmc2V0KCkgKyB2YWx1ZSk7CisgICAgfQorICAgIFQgb3BlcmF0b3ItKGludCB2YWx1
ZSkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBUKG9mZnNldCgpIC0gdmFsdWUpOworICAg
IH0KKyAgICBUJiBvcGVyYXRvcis9KGludCB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiAq
dGhpcyA9ICp0aGlzICsgdmFsdWU7CisgICAgfQorICAgIFQmIG9wZXJhdG9yLT0oaW50IHZhbHVl
KQorICAgIHsKKyAgICAgICAgcmV0dXJuICp0aGlzID0gKnRoaXMgLSB2YWx1ZTsKKyAgICB9Cisg
ICAgCitwcml2YXRlOgorICAgIHVuc2lnbmVkIG1fb2Zmc2V0OworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgSlNDCisKKyNlbmRpZiAvLyBHZW5lcmljT2Zmc2V0X2gKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNBcmd1bWVudHNJdGVyYXRvci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcmd1bWVudHNJdGVyYXRvci5jcHAJKHJl
dmlzaW9uIDE4MDUyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJndW1l
bnRzSXRlcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMyBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEzLCAyMDE1IEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMzLDEwICszMywxOCBAQCBuYW1lc3Bh
Y2UgSlNDIHsKIAogY29uc3QgQ2xhc3NJbmZvIEpTQXJndW1lbnRzSXRlcmF0b3I6OnNfaW5mbyA9
IHsgIkFyZ3VtZW50c0l0ZXJhdG9yIiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhPRF9U
QUJMRShKU0FyZ3VtZW50c0l0ZXJhdG9yKSB9OwogCi12b2lkIEpTQXJndW1lbnRzSXRlcmF0b3I6
OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgQXJndW1lbnRzKiBhcmd1bWVudHMpCit2b2lkIEpTQXJn
dW1lbnRzSXRlcmF0b3I6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgSlNPYmplY3QqIGFyZ3VtZW50
cykKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiAgICAgbV9hcmd1bWVudHMuc2V0
KHZtLCB0aGlzLCBhcmd1bWVudHMpOwogfQogCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGFyZ3VtZW50c0Z1bmNJdGVyYXRvcihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgSlNPYmplY3Qq
IHRoaXNPYmogPSBleGVjLT50aGlzVmFsdWUoKS50b1RoaXMoZXhlYywgU3RyaWN0TW9kZSkudG9P
YmplY3QoZXhlYyk7CisgICAgaWYgKCF0aGlzT2JqLT5pbmhlcml0cyhBcmd1bWVudHM6OmluZm8o
KSkgJiYgIXRoaXNPYmotPmluaGVyaXRzKE91dE9mQmFuZEFyZ3VtZW50czo6aW5mbygpKSkKKyAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd1R5cGVFcnJvcihleGVjLCBBU0NJSUxp
dGVyYWwoIkF0dGVtcHRlZCB0byB1c2UgQXJndW1lbnRzIGl0ZXJhdG9yIG9uIG5vbi1Bcmd1bWVu
dHMgb2JqZWN0IikpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTQXJndW1lbnRzSXRl
cmF0b3I6OmNyZWF0ZShleGVjLT52bSgpLCBleGVjLT5jYWxsZWUoKS0+Z2xvYmFsT2JqZWN0KCkt
PmFyZ3VtZW50c0l0ZXJhdG9yU3RydWN0dXJlKCksIHRoaXNPYmopKTsKK30KKwogfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcmd1bWVudHNJdGVyYXRvci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJndW1lbnRzSXRlcmF0
b3IuaAkocmV2aXNpb24gMTgwNTI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNBcmd1bWVudHNJdGVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE1IEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDcgKzI2LDcgQEAKICNp
Zm5kZWYgSlNBcmd1bWVudHNJdGVyYXRvcl9oCiAjZGVmaW5lIEpTQXJndW1lbnRzSXRlcmF0b3Jf
aAogCi0jaW5jbHVkZSAiQXJndW1lbnRzLmgiCisjaW5jbHVkZSAiSlNPYmplY3QuaCIKIAogbmFt
ZXNwYWNlIEpTQyB7CiAKQEAgLTQxLDcgKzQxLDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4g
U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhP
YmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CiAgICAgfQogCi0gICAgc3RhdGlj
IEpTQXJndW1lbnRzSXRlcmF0b3IqIGNyZWF0ZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJl
LCBBcmd1bWVudHMqIGFyZ3VtZW50cykKKyAgICBzdGF0aWMgSlNBcmd1bWVudHNJdGVyYXRvciog
Y3JlYXRlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTT2JqZWN0KiBhcmd1bWVudHMp
CiAgICAgewogICAgICAgICBKU0FyZ3VtZW50c0l0ZXJhdG9yKiBpbnN0YW5jZSA9IG5ldyAoTm90
TnVsbCwgYWxsb2NhdGVDZWxsPEpTQXJndW1lbnRzSXRlcmF0b3I+KHZtLmhlYXApKSBKU0FyZ3Vt
ZW50c0l0ZXJhdG9yKHZtLCBzdHJ1Y3R1cmUpOwogICAgICAgICBpbnN0YW5jZS0+ZmluaXNoQ3Jl
YXRpb24odm0sIGFyZ3VtZW50cyk7CkBAIC01MCwxMSArNTAsMTEgQEAgcHVibGljOgogCiAgICAg
Ym9vbCBuZXh0KENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU1ZhbHVlJiB2YWx1ZSkKICAgICB7Ci0g
ICAgICAgIGlmIChtX25leHRJbmRleCA+PSBtX2FyZ3VtZW50cy0+bGVuZ3RoKGNhbGxGcmFtZSkp
CisgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9CisgICAgICAgICAgICBtX2FyZ3VtZW50cy0+Z2V0
KGNhbGxGcmFtZSwgY2FsbEZyYW1lLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKS50b1VJbnQzMihj
YWxsRnJhbWUpOworICAgICAgICBpZiAobV9uZXh0SW5kZXggPj0gbGVuZ3RoKQogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB2YWx1ZSA9IG1fYXJndW1lbnRzLT50cnlHZXRBcmd1
bWVudChtX25leHRJbmRleCsrKTsKLSAgICAgICAgaWYgKCF2YWx1ZSkKLSAgICAgICAgICAgIHZh
bHVlID0ganNVbmRlZmluZWQoKTsKKyAgICAgICAgdmFsdWUgPSBtX2FyZ3VtZW50cy0+Z2V0SW5k
ZXgoY2FsbEZyYW1lLCBtX25leHRJbmRleCsrKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
fQogCkBAIC02OCwxMiArNjgsMTQgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgfQogCi0gICAgdm9p
ZCBmaW5pc2hDcmVhdGlvbihWTSYsIEFyZ3VtZW50cyopOworICAgIHZvaWQgZmluaXNoQ3JlYXRp
b24oVk0mLCBKU09iamVjdCopOwogICAgIAotICAgIFdyaXRlQmFycmllcjxBcmd1bWVudHM+IG1f
YXJndW1lbnRzOworICAgIFdyaXRlQmFycmllcjxKU09iamVjdD4gbV9hcmd1bWVudHM7CiAgICAg
c2l6ZV90IG1fbmV4dEluZGV4OwogfTsKIAorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBh
cmd1bWVudHNGdW5jSXRlcmF0b3IoRXhlY1N0YXRlKik7CisKIH0KIAogI2VuZGlmIC8vICFkZWZp
bmVkKEpTQXJndW1lbnRzSXRlcmF0b3JfaCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTRW52aXJvbm1lbnRSZWNvcmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTRW52aXJvbm1lbnRSZWNvcmQuY3BwCShyZXZpc2lvbiAxODA1
MjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Vudmlyb25tZW50UmVjb3Jk
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDcsIDIwMDgsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAyMDEyLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzUsNCArMzUsMTIg
QEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNvbnN0IENsYXNzSW5mbyBKU0Vudmlyb25tZW50UmVjb3Jk
OjpzX2luZm8gPSB7ICJFbnZpcm9ubWVudFJlY29yZCIsICZCYXNlOjpzX2luZm8sIDAsIENSRUFU
RV9NRVRIT0RfVEFCTEUoSlNFbnZpcm9ubWVudFJlY29yZCkgfTsKIAordm9pZCBKU0Vudmlyb25t
ZW50UmVjb3JkOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCit7CisgICAgSlNFbnZpcm9ubWVudFJlY29yZCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0Vu
dmlyb25tZW50UmVjb3JkKj4oY2VsbCk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0
aGlzT2JqZWN0LCBpbmZvKCkpOworICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwg
dmlzaXRvcik7CisgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXModGhpc09iamVjdC0+dmFyaWFibGVz
KCksIG1fc3ltYm9sVGFibGUtPnNjb3BlU2l6ZSgpKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlND
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Vudmlyb25tZW50UmVjb3Jk
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNFbnZpcm9u
bWVudFJlY29yZC5oCShyZXZpc2lvbiAxODA1MjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0Vudmlyb25tZW50UmVjb3JkLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDExICs0
NiwyNiBAQCBjbGFzcyBKU0Vudmlyb25tZW50UmVjb3JkIDogcHVibGljIEpTU3ltCiBwdWJsaWM6
CiAgICAgdHlwZWRlZiBKU1N5bWJvbFRhYmxlT2JqZWN0IEJhc2U7CiAKLSAgICBXcml0ZUJhcnJp
ZXJCYXNlPFVua25vd24+KiByZWdpc3RlcnMoKSB7IHJldHVybiBtX3JlZ2lzdGVyczsgfQotICAg
IFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4mIHJlZ2lzdGVyQXQoaW50IGluZGV4KSBjb25zdCB7
IHJldHVybiBtX3JlZ2lzdGVyc1tpbmRleF07IH0KKyAgICBXcml0ZUJhcnJpZXJCYXNlPFVua25v
d24+KiB2YXJpYWJsZXMoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxXcml0
ZUJhcnJpZXJCYXNlPFVua25vd24+Kj4oYml0d2lzZV9jYXN0PGNoYXIqPih0aGlzKSArIG9mZnNl
dE9mVmFyaWFibGVzKCkpOworICAgIH0KKyAgICAKKyAgICBib29sIGlzVmFsaWQoU2NvcGVPZmZz
ZXQgb2Zmc2V0KQorICAgIHsKKyAgICAgICAgcmV0dXJuICEhb2Zmc2V0ICYmIG9mZnNldC5vZmZz
ZXQoKSA8IG1fc3ltYm9sVGFibGUtPnNjb3BlU2l6ZSgpOworICAgIH0KKyAgICAKKyAgICBXcml0
ZUJhcnJpZXJCYXNlPFVua25vd24+JiB2YXJpYWJsZUF0KFNjb3BlT2Zmc2V0IG9mZnNldCkgY29u
c3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc1ZhbGlkKG9mZnNldCkpOworICAgICAgICByZXR1
cm4gdmFyaWFibGVzKClbb2Zmc2V0Lm9mZnNldCgpXTsKKyAgICB9CiAKLSAgICBXcml0ZUJhcnJp
ZXJCYXNlPFVua25vd24+KiBjb25zdCAqIGFkZHJlc3NPZlJlZ2lzdGVycygpIGNvbnN0IHsgcmV0
dXJuICZtX3JlZ2lzdGVyczsgfQotICAgIHN0YXRpYyBzaXplX3Qgb2Zmc2V0T2ZSZWdpc3RlcnMo
KSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNFbnZpcm9ubWVudFJlY29yZCwgbV9yZWdpc3Rl
cnMpOyB9CisgICAgc3RhdGljIHNpemVfdCBvZmZzZXRPZlZhcmlhYmxlcygpCisgICAgeworICAg
ICAgICByZXR1cm4gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mPHNpemVvZihXcml0ZUJhcnJpZXI8
VW5rbm93bj4pPihzaXplb2YoSlNFbnZpcm9ubWVudFJlY29yZCkpOworICAgIH0KIAogICAgIERF
Q0xBUkVfSU5GTzsKIApAQCAtNjAsMTUgKzc1LDM1IEBAIHByb3RlY3RlZDoKICAgICBKU0Vudmly
b25tZW50UmVjb3JkKAogICAgICAgICBWTSYgdm0sCiAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0
dXJlLAotICAgICAgICBSZWdpc3RlciogcmVnaXN0ZXJzLAogICAgICAgICBKU1Njb3BlKiBzY29w
ZSwKICAgICAgICAgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlKQogICAgICAgICA6IEJhc2Uodm0s
IHN0cnVjdHVyZSwgc2NvcGUsIHN5bWJvbFRhYmxlKQotICAgICAgICAsIG1fcmVnaXN0ZXJzKHJl
aW50ZXJwcmV0X2Nhc3Q8V3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPio+KHJlZ2lzdGVycykpCiAg
ICAgewogICAgIH0KLQotICAgIFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIG1fcmVnaXN0ZXJz
OyAvLyAiciIgaW4gdGhlIHN0YWNrLgorICAgIAorICAgIHN0YXRpYyBzaXplX3QgYWxsb2NhdGlv
blNpemVGb3JTY29wZVNpemUodW5zaWduZWQgc2NvcGVTaXplKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIG9mZnNldE9mVmFyaWFibGVzKCkgKyBzY29wZVNpemUgKiBzaXplb2YoV3JpdGVCYXJyaWVy
PFVua25vd24+KTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIHNpemVfdCBhbGxvY2F0aW9uU2l6
ZShTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUpCisgICAgeworICAgICAgICByZXR1cm4gYWxsb2Nh
dGlvblNpemVGb3JTY29wZVNpemUoc3ltYm9sVGFibGUtPnNjb3BlU2l6ZSgpKTsKKyAgICB9Cisg
ICAgCisgICAgdm9pZCBmaW5pc2hDcmVhdGlvblVuaW5pdGlhbGl6ZWQoVk0mIHZtKQorICAgIHsK
KyAgICAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOworICAgIH0KKyAgICAKKyAgICB2b2lk
IGZpbmlzaENyZWF0aW9uKFZNJiB2bSkKKyAgICB7CisgICAgICAgIGZpbmlzaENyZWF0aW9uVW5p
bml0aWFsaXplZCh2bSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1fc3ltYm9sVGFibGUt
PnNjb3BlU2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICAvLyBGaWxsaW5nIHRoaXMgd2l0aCB1
bmRlZmluZWQgaXMgdXNlZnVsIGJlY2F1c2UgdGhhdCdzIHdoYXQgdmFyaWFibGVzIHN0YXJ0IG91
dCBhcy4KKyAgICAgICAgICAgIHZhcmlhYmxlQXQoaSkuc2V0VW5kZWZpbmVkKCk7CisgICAgICAg
IH0KKyAgICB9CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTTGV4aWNhbEVudmlyb25tZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xleGljYWxFbnZpcm9ubWVudC5jcHAJKHJl
dmlzaW9uIDE4MDUyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTGV4aWNh
bEVudmlyb25tZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDgsIDIwMDksIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5LCAyMDE0LCAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
NDAsMjcgKzQwLDE5IEBAIG5hbWVzcGFjZSBKU0MgewogCiBjb25zdCBDbGFzc0luZm8gSlNMZXhp
Y2FsRW52aXJvbm1lbnQ6OnNfaW5mbyA9IHsgIkpTTGV4aWNhbEVudmlyb25tZW50IiwgJkJhc2U6
OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU0xleGljYWxFbnZpcm9ubWVudCkgfTsK
IAotdm9pZCBKU0xleGljYWxFbnZpcm9ubWVudDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGws
IFNsb3RWaXNpdG9yJiB2aXNpdG9yKQotewotICAgIEpTTGV4aWNhbEVudmlyb25tZW50KiB0aGlz
T2JqZWN0ID0ganNDYXN0PEpTTGV4aWNhbEVudmlyb25tZW50Kj4oY2VsbCk7Ci0gICAgQVNTRVJU
X0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwotICAgIEJhc2U6OnZpc2l0
Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8
IHRoaXNPYmplY3QtPnN5bWJvbFRhYmxlKCktPmNhcHR1cmVDb3VudCgpOyArK2kpCi0gICAgICAg
IHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5zdG9yYWdlKClbaV0pOwotfQotCiBpbmxpbmUg
Ym9vbCBKU0xleGljYWxFbnZpcm9ubWVudDo6c3ltYm9sVGFibGVHZXQoUHJvcGVydHlOYW1lIHBy
b3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQogewogICAgIFN5bWJvbFRhYmxlRW50cnkg
ZW50cnkgPSBzeW1ib2xUYWJsZSgpLT5pbmxpbmVHZXQocHJvcGVydHlOYW1lLnVpZCgpKTsKICAg
ICBpZiAoZW50cnkuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgIFNjb3Bl
T2Zmc2V0IG9mZnNldCA9IGVudHJ5LnNjb3BlT2Zmc2V0KCk7CisKICAgICAvLyBEZWZlbmQgYWdh
aW5zdCB0aGUgaW5zcGVjdG9yIGFza2luZyBmb3IgYSB2YXIgYWZ0ZXIgaXQgaGFzIGJlZW4gb3B0
aW1pemVkIG91dC4KLSAgICBpZiAoIWlzVmFsaWQoZW50cnkpKQorICAgIGlmICghaXNWYWxpZChv
ZmZzZXQpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBzbG90LnNldFZhbHVlKHRoaXMs
IERvbnRFbnVtLCByZWdpc3RlckF0KGVudHJ5LmdldEluZGV4KCkpLmdldCgpKTsKKyAgICBzbG90
LnNldFZhbHVlKHRoaXMsIERvbnRFbnVtLCB2YXJpYWJsZUF0KG9mZnNldCkuZ2V0KCkpOwogICAg
IHJldHVybiB0cnVlOwogfQogCkBAIC03MCwxMSArNjIsMTMgQEAgaW5saW5lIGJvb2wgSlNMZXhp
Y2FsRW52aXJvbm1lbnQ6OnN5bWJvbAogICAgIGlmIChlbnRyeS5pc051bGwoKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCisgICAgU2NvcGVPZmZzZXQgb2Zmc2V0ID0gZW50cnkuc2NvcGVPZmZz
ZXQoKTsKKwogICAgIC8vIERlZmVuZCBhZ2FpbnN0IHRoZSBpbnNwZWN0b3IgYXNraW5nIGZvciBh
IHZhciBhZnRlciBpdCBoYXMgYmVlbiBvcHRpbWl6ZWQgb3V0LgotICAgIGlmICghaXNWYWxpZChl
bnRyeSkpCisgICAgaWYgKCFpc1ZhbGlkKG9mZnNldCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAotICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcihyZWdpc3RlckF0KGVudHJ5LmdldEluZGV4
KCkpLmdldCgpLCBlbnRyeS5nZXRBdHRyaWJ1dGVzKCkpOworICAgIGRlc2NyaXB0b3Iuc2V0RGVz
Y3JpcHRvcih2YXJpYWJsZUF0KG9mZnNldCkuZ2V0KCksIGVudHJ5LmdldEF0dHJpYnV0ZXMoKSk7
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTk1LDEyICs4OSwxMyBAQCBpbmxpbmUgYm9vbCBK
U0xleGljYWxFbnZpcm9ubWVudDo6c3ltYm9sCiAgICAgICAgICAgICAgICAgdGhyb3dUeXBlRXJy
b3IoZXhlYywgU3RyaWN0TW9kZVJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsKICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CisgICAgICAgIFNjb3BlT2Zmc2V0IG9mZnNldCA9
IGl0ZXItPnZhbHVlLnNjb3BlT2Zmc2V0KCk7CiAgICAgICAgIC8vIERlZmVuZCBhZ2FpbnN0IHRo
ZSBpbnNwZWN0b3IgYXNraW5nIGZvciBhIHZhciBhZnRlciBpdCBoYXMgYmVlbiBvcHRpbWl6ZWQg
b3V0LgotICAgICAgICBpZiAoIWlzVmFsaWQoaXRlci0+dmFsdWUpKQorICAgICAgICBpZiAoIWlz
VmFsaWQob2Zmc2V0KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgaWYgKFZh
cmlhYmxlV2F0Y2hwb2ludFNldCogc2V0ID0gaXRlci0+dmFsdWUud2F0Y2hwb2ludFNldCgpKQot
ICAgICAgICAgICAgc2V0LT5pbnZhbGlkYXRlKFZhcmlhYmxlV3JpdGVGaXJlRGV0YWlsKHRoaXMs
IHByb3BlcnR5TmFtZSkpOyAvLyBEb24ndCBtZXNzIGFyb3VuZCAtIGlmIHdlIGhhZCBmb3VuZCB0
aGlzIHN0YXRpY2FsbHksIHdlIHdvdWxkIGhhdmUgaW52Y2FsaWRhdGVkIGl0LgotICAgICAgICBy
ZWcgPSAmcmVnaXN0ZXJBdChpdGVyLT52YWx1ZS5nZXRJbmRleCgpKTsKKyAgICAgICAgICAgIHNl
dC0+aW52YWxpZGF0ZShWYXJpYWJsZVdyaXRlRmlyZURldGFpbCh0aGlzLCBwcm9wZXJ0eU5hbWUp
KTsgLy8gRG9uJ3QgbWVzcyBhcm91bmQgLSBpZiB3ZSBoYWQgZm91bmQgdGhpcyBzdGF0aWNhbGx5
LCB3ZSB3b3VsZCBoYXZlIGludmFsaWRhdGVkIGl0LgorICAgICAgICByZWcgPSAmdmFyaWFibGVB
dChvZmZzZXQpOwogICAgIH0KICAgICByZWctPnNldCh2bSwgdGhpcywgdmFsdWUpOwogICAgIHJl
dHVybiB0cnVlOwpAQCAtMTE2LDcgKzExMSw3IEBAIHZvaWQgSlNMZXhpY2FsRW52aXJvbm1lbnQ6
OmdldE93bk5vbkluZGUKICAgICAgICAgZm9yIChTeW1ib2xUYWJsZTo6TWFwOjppdGVyYXRvciBp
dCA9IHRoaXNPYmplY3QtPnN5bWJvbFRhYmxlKCktPmJlZ2luKGxvY2tlcik7IGl0ICE9IGVuZDsg
KytpdCkgewogICAgICAgICAgICAgaWYgKGl0LT52YWx1ZS5nZXRBdHRyaWJ1dGVzKCkgJiBEb250
RW51bSAmJiAhc2hvdWxkSW5jbHVkZURvbnRFbnVtUHJvcGVydGllcyhtb2RlKSkKICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGlmICghdGhpc09iamVjdC0+aXNWYWxpZChp
dC0+dmFsdWUpKQorICAgICAgICAgICAgaWYgKCF0aGlzT2JqZWN0LT5pc1ZhbGlkKGl0LT52YWx1
ZS5zY29wZU9mZnNldCgpKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAg
IHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXIoZXhlYywgaXQtPmtleS5nZXQoKSkpOwogICAg
ICAgICB9CkBAIC0xMzcsMTEgKzEzMiwxMyBAQCBpbmxpbmUgYm9vbCBKU0xleGljYWxFbnZpcm9u
bWVudDo6c3ltYm9sCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIFN5bWJvbFRh
YmxlRW50cnkmIGVudHJ5ID0gaXRlci0+dmFsdWU7CiAgICAgICAgIEFTU0VSVCghZW50cnkuaXNO
dWxsKCkpOwotICAgICAgICBpZiAoIWlzVmFsaWQoZW50cnkpKQorICAgICAgICAKKyAgICAgICAg
U2NvcGVPZmZzZXQgb2Zmc2V0ID0gZW50cnkuc2NvcGVPZmZzZXQoKTsKKyAgICAgICAgaWYgKCFp
c1ZhbGlkKG9mZnNldCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAogICAg
ICAgICBlbnRyeS5zZXRBdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpOwotICAgICAgICByZWcgPSAmcmVn
aXN0ZXJBdChlbnRyeS5nZXRJbmRleCgpKTsKKyAgICAgICAgcmVnID0gJnZhcmlhYmxlQXQob2Zm
c2V0KTsKICAgICB9CiAgICAgcmVnLT5zZXQodm0sIHRoaXMsIHZhbHVlKTsKICAgICByZXR1cm4g
dHJ1ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTGV4aWNhbEVudmly
b25tZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNM
ZXhpY2FsRW52aXJvbm1lbnQuaAkocmV2aXNpb24gMTgwNTI5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNMZXhpY2FsRW52aXJvbm1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDksIDIwMTMsIDIwMTQg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAy
MDA5LCAyMDEzLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MSwzMyArNDEsMjcgQEAgY2xhc3MgUmVnaXN0ZXI7
CiAgICAgCiBjbGFzcyBKU0xleGljYWxFbnZpcm9ubWVudCA6IHB1YmxpYyBKU0Vudmlyb25tZW50
UmVjb3JkIHsKIHByaXZhdGU6Ci0gICAgSlNMZXhpY2FsRW52aXJvbm1lbnQoVk0mLCBDYWxsRnJh
bWUqLCBSZWdpc3RlciosIEpTU2NvcGUqLCBDb2RlQmxvY2sqKTsKKyAgICBKU0xleGljYWxFbnZp
cm9ubWVudChWTSYsIFN0cnVjdHVyZSosIEpTU2NvcGUqLCBTeW1ib2xUYWJsZSopOwogICAgIAog
cHVibGljOgogICAgIHR5cGVkZWYgSlNFbnZpcm9ubWVudFJlY29yZCBCYXNlOwogCi0gICAgc3Rh
dGljIEpTTGV4aWNhbEVudmlyb25tZW50KiBjcmVhdGUoVk0mIHZtLCBDYWxsRnJhbWUqIGNhbGxG
cmFtZSwgUmVnaXN0ZXIqIHJlZ2lzdGVycywgSlNTY29wZSogY3VycmVudFNjb3BlLCBDb2RlQmxv
Y2sqIGNvZGVCbG9jaykKKyAgICBzdGF0aWMgSlNMZXhpY2FsRW52aXJvbm1lbnQqIGNyZWF0ZSgK
KyAgICAgICAgVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1Njb3BlKiBj
dXJyZW50U2NvcGUsIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSkKICAgICB7Ci0gICAgICAgIFN5
bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSA9IGNvZGVCbG9jay0+c3ltYm9sVGFibGUoKTsKLSAgICAg
ICAgQVNTRVJUKGNvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUpOwotICAgICAg
ICBKU0xleGljYWxFbnZpcm9ubWVudCogbGV4aWNhbEVudmlyb25tZW50ID0gbmV3ICgKLSAgICAg
ICAgICAgIE5vdE51bGwsCi0gICAgICAgICAgICBhbGxvY2F0ZUNlbGw8SlNMZXhpY2FsRW52aXJv
bm1lbnQ+KAotICAgICAgICAgICAgICAgIHZtLmhlYXAsCi0gICAgICAgICAgICAgICAgYWxsb2Nh
dGlvblNpemUoc3ltYm9sVGFibGUpCi0gICAgICAgICAgICApCi0gICAgICAgICkgSlNMZXhpY2Fs
RW52aXJvbm1lbnQodm0sIGNhbGxGcmFtZSwgcmVnaXN0ZXJzLCBjdXJyZW50U2NvcGUsIGNvZGVC
bG9jayk7Ci0gICAgICAgIGxleGljYWxFbnZpcm9ubWVudC0+ZmluaXNoQ3JlYXRpb24odm0pOwot
ICAgICAgICByZXR1cm4gbGV4aWNhbEVudmlyb25tZW50OworICAgICAgICBKU0xleGljYWxFbnZp
cm9ubWVudCogcmVzdWx0ID0KKyAgICAgICAgICAgIG5ldyAoTm90TnVsbCwgYWxsb2NhdGlvblNp
emUoc3ltYm9sVGFibGUpKQorICAgICAgICAgICAgSlNMZXhpY2FsRW52aXJvbm1lbnQodm0sIGds
b2JhbE9iamVjdC0+YWN0aXZhdGlvblN0cnVjdHVyZSgpLCBjdXJyZW50U2NvcGUsIHN5bWJvbFRh
YmxlKTsKKyAgICAgICAgcmVzdWx0LT5maW5pc2hDcmVhdGlvbih2bSk7CiAgICAgfQotICAgICAg
ICAKKyAgICAKICAgICBzdGF0aWMgSlNMZXhpY2FsRW52aXJvbm1lbnQqIGNyZWF0ZShWTSYgdm0s
IENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU1Njb3BlKiBjdXJyZW50U2NvcGUsIENvZGVCbG9jayog
Y29kZUJsb2NrKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZSh2bSwgY2FsbEZyYW1lLCBj
YWxsRnJhbWUtPnJlZ2lzdGVycygpICsgY29kZUJsb2NrLT5mcmFtZVBvaW50ZXJPZmZzZXRUb0dl
dEFjdGl2YXRpb25SZWdpc3RlcnMoKSwgY3VycmVudFNjb3BlLCBjb2RlQmxvY2spOworICAgICAg
ICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gY2FsbEZyYW1lLT5sZXhpY2FsR2xvYmFs
T2JqZWN0KCk7CisgICAgICAgIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSA9IGNvZGVCbG9jay0+
c3ltYm9sVGFibGUoKTsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBj
dXJyZW50U2NvcGUsIHN5bWJvbHRhYmxlKTsKICAgICB9Ci0KLSAgICBzdGF0aWMgdm9pZCB2aXNp
dENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Ci0KKyAgICAgICAgCiAgICAgc3RhdGlj
IGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlO
YW1lLCBQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgdm9pZCBnZXRPd25Ob25JbmRleFByb3Bl
cnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1l
cmF0aW9uTW9kZSk7CiAKQEAgLTgxLDEyICs3NSw2IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBT
dHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QpIHsgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIGpzTnVs
bCgpLCBUeXBlSW5mbyhBY3RpdmF0aW9uT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZv
KCkpOyB9CiAKLSAgICBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+JiByZWdpc3RlckF0KGludCkg
Y29uc3Q7Ci0gICAgYm9vbCBpc1ZhbGlkSW5kZXgoaW50KSBjb25zdDsKLSAgICBib29sIGlzVmFs
aWQoY29uc3QgU3ltYm9sVGFibGVFbnRyeSYpIGNvbnN0OwotICAgIGludCByZWdpc3RlcnNPZmZz
ZXQoKTsKLSAgICBzdGF0aWMgaW50IHJlZ2lzdGVyc09mZnNldChTeW1ib2xUYWJsZSopOwotCiBw
cm90ZWN0ZWQ6CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gT3Zl
cnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcyB8IEJh
c2U6OlN0cnVjdHVyZUZsYWdzOwogCkBAIC05NiwzMiArODQsMTMgQEAgcHJpdmF0ZToKICAgICBi
b29sIHN5bWJvbFRhYmxlR2V0KFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiwgYm9vbCYgc2xv
dElzV3JpdGVhYmxlKTsKICAgICBib29sIHN5bWJvbFRhYmxlUHV0KEV4ZWNTdGF0ZSosIFByb3Bl
cnR5TmFtZSwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7CiAgICAgYm9vbCBzeW1ib2xUYWJs
ZVB1dFdpdGhBdHRyaWJ1dGVzKFZNJiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCB1bnNpZ25lZCBh
dHRyaWJ1dGVzKTsKLQotICAgIHN0YXRpYyBzaXplX3QgYWxsb2NhdGlvblNpemUoU3ltYm9sVGFi
bGUqKTsKLSAgICBzdGF0aWMgc2l6ZV90IHN0b3JhZ2VPZmZzZXQoKTsKLQotICAgIFdyaXRlQmFy
cmllcjxVbmtub3duPiogc3RvcmFnZSgpOyAvLyBjYXB0dXJlQ291bnQoKSBudW1iZXIgb2YgcmVn
aXN0ZXJzLgogfTsKIAotaW5saW5lIEpTTGV4aWNhbEVudmlyb25tZW50OjpKU0xleGljYWxFbnZp
cm9ubWVudChWTSYgdm0sIENhbGxGcmFtZSogY2FsbEZyYW1lLCBSZWdpc3RlciogcmVnaXN0ZXJz
LCBKU1Njb3BlKiBjdXJyZW50U2NvcGUsIENvZGVCbG9jayogY29kZUJsb2NrKQotICAgIDogQmFz
ZSgKLSAgICAgICAgdm0sCi0gICAgICAgIGNhbGxGcmFtZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgp
LT5hY3RpdmF0aW9uU3RydWN0dXJlKCksCi0gICAgICAgIHJlZ2lzdGVycywKLSAgICAgICAgY3Vy
cmVudFNjb3BlLAotICAgICAgICBjb2RlQmxvY2stPnN5bWJvbFRhYmxlKCkpCitpbmxpbmUgSlNM
ZXhpY2FsRW52aXJvbm1lbnQ6OkpTTGV4aWNhbEVudmlyb25tZW50KFZNJiB2bSwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIEpTU2NvcGUqIGN1cnJlbnRTY29wZSwgU3ltYm9sVGFibGUqIHN5bWJvbFRh
YmxlKQorICAgIDogQmFzZSh2bSwgc3RydWN0dXJlLCBjdXJyZW50U2NvcGUsIHN5bWJvbFRhYmxl
KQogewotICAgIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSA9IGNvZGVCbG9jay0+c3ltYm9sVGFi
bGUoKTsKLSAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHN0b3JhZ2UgPSB0aGlzLT5zdG9yYWdl
KCk7Ci0gICAgc2l6ZV90IGNhcHR1cmVDb3VudCA9IHN5bWJvbFRhYmxlLT5jYXB0dXJlQ291bnQo
KTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNhcHR1cmVDb3VudDsgKytpKQotICAgICAg
ICBuZXcgKE5vdE51bGwsICZzdG9yYWdlW2ldKSBXcml0ZUJhcnJpZXI8VW5rbm93bj4oVW5kZWZp
bmVkV3JpdGVCYXJyaWVyVGFnKTsKLSAgICBtX3JlZ2lzdGVycyA9IHJlaW50ZXJwcmV0X2Nhc3Rf
cHRyPFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qPigKLSAgICAgICAgcmVpbnRlcnByZXRfY2Fz
dDxjaGFyKj4odGhpcykgKyByZWdpc3RlcnNPZmZzZXQoc3ltYm9sVGFibGUpKTsKIH0KIAotSlNM
ZXhpY2FsRW52aXJvbm1lbnQqIGFzQWN0aXZhdGlvbihKU1ZhbHVlKTsKLQogaW5saW5lIEpTTGV4
aWNhbEVudmlyb25tZW50KiBhc0FjdGl2YXRpb24oSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBBU1NF
UlQoYXNPYmplY3QodmFsdWUpLT5pbmhlcml0cyhKU0xleGljYWxFbnZpcm9ubWVudDo6aW5mbygp
KSk7CkBAIC0xMzMsNDkgKzEwMiw2IEBAIEFMV0FZU19JTkxJTkUgSlNMZXhpY2FsRW52aXJvbm1l
bnQqIFJlZ2kKICAgICByZXR1cm4gYXNBY3RpdmF0aW9uKGpzVmFsdWUoKSk7CiB9CiAKLWlubGlu
ZSBpbnQgSlNMZXhpY2FsRW52aXJvbm1lbnQ6OnJlZ2lzdGVyc09mZnNldChTeW1ib2xUYWJsZSog
c3ltYm9sVGFibGUpCi17Ci0gICAgcmV0dXJuIHN0b3JhZ2VPZmZzZXQoKSArICgoc3ltYm9sVGFi
bGUtPmNhcHR1cmVDb3VudCgpIC0gc3ltYm9sVGFibGUtPmNhcHR1cmVTdGFydCgpICAtIDEpICog
c2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpOwotfQotCi1pbmxpbmUgc2l6ZV90IEpTTGV4
aWNhbEVudmlyb25tZW50OjpzdG9yYWdlT2Zmc2V0KCkKLXsKLSAgICByZXR1cm4gV1RGOjpyb3Vu
ZFVwVG9NdWx0aXBsZU9mPHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pPihzaXplb2YoSlNM
ZXhpY2FsRW52aXJvbm1lbnQpKTsKLX0KLQotaW5saW5lIFdyaXRlQmFycmllcjxVbmtub3duPiog
SlNMZXhpY2FsRW52aXJvbm1lbnQ6OnN0b3JhZ2UoKQotewotICAgIHJldHVybiByZWludGVycHJl
dF9jYXN0X3B0cjxXcml0ZUJhcnJpZXI8VW5rbm93bj4qPigKLSAgICAgICAgcmVpbnRlcnByZXRf
Y2FzdDxjaGFyKj4odGhpcykgKyBzdG9yYWdlT2Zmc2V0KCkpOwotfQotCi1pbmxpbmUgc2l6ZV90
IEpTTGV4aWNhbEVudmlyb25tZW50OjphbGxvY2F0aW9uU2l6ZShTeW1ib2xUYWJsZSogc3ltYm9s
VGFibGUpCi17Ci0gICAgc2l6ZV90IG9iamVjdFNpemVJbkJ5dGVzID0gV1RGOjpyb3VuZFVwVG9N
dWx0aXBsZU9mPHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pPihzaXplb2YoSlNMZXhpY2Fs
RW52aXJvbm1lbnQpKTsKLSAgICBzaXplX3Qgc3RvcmFnZVNpemVJbkJ5dGVzID0gc3ltYm9sVGFi
bGUtPmNhcHR1cmVDb3VudCgpICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPik7Ci0gICAg
cmV0dXJuIG9iamVjdFNpemVJbkJ5dGVzICsgc3RvcmFnZVNpemVJbkJ5dGVzOwotfQotCi1pbmxp
bmUgYm9vbCBKU0xleGljYWxFbnZpcm9ubWVudDo6aXNWYWxpZEluZGV4KGludCBpbmRleCkgY29u
c3QKLXsKLSAgICBpZiAoaW5kZXggPiBzeW1ib2xUYWJsZSgpLT5jYXB0dXJlU3RhcnQoKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChpbmRleCA8PSBzeW1ib2xUYWJsZSgpLT5jYXB0
dXJlRW5kKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQot
aW5saW5lIGJvb2wgSlNMZXhpY2FsRW52aXJvbm1lbnQ6OmlzVmFsaWQoY29uc3QgU3ltYm9sVGFi
bGVFbnRyeSYgZW50cnkpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGlzVmFsaWRJbmRleChlbnRyeS5n
ZXRJbmRleCgpKTsKLX0KLQotaW5saW5lIFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4mIEpTTGV4
aWNhbEVudmlyb25tZW50OjpyZWdpc3RlckF0KGludCBpbmRleCkgY29uc3QKLXsKLSAgICBBU1NF
UlQoaXNWYWxpZEluZGV4KGluZGV4KSk7Ci0gICAgcmV0dXJuIEJhc2U6OnJlZ2lzdGVyQXQoaW5k
ZXgpOwotfQotCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEpTTGV4aWNhbEVudmly
b25tZW50X2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTmFtZVNjb3Bl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU05hbWVT
Y29wZS5jcHAJKHJldmlzaW9uIDE4MDUyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTTmFtZVNjb3BlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsMTQgKzQ3LDYgQEAgSlNO
YW1lU2NvcGUqIEpTTmFtZVNjb3BlOjpjcmVhdGUoVk0mIHZtLAogICAgIHJldHVybiBudWxscHRy
OwogfQogCi12b2lkIEpTTmFtZVNjb3BlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCi17Ci0gICAgSlNOYW1lU2NvcGUqIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8SlNOYW1lU2NvcGUqPihjZWxsKTsKLSAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRo
aXNPYmplY3QsIGluZm8oKSk7Ci0gICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2
aXNpdG9yKTsKLSAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9yZWdpc3RlclN0b3Jl
KTsKLX0KLQogSlNWYWx1ZSBKU05hbWVTY29wZTo6dG9UaGlzKEpTQ2VsbCosIEV4ZWNTdGF0ZSog
ZXhlYywgRUNNQU1vZGUgZWNtYU1vZGUpCiB7CiAgICAgaWYgKGVjbWFNb2RlID09IFN0cmljdE1v
ZGUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU05hbWVTY29wZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTmFtZVNjb3BlLmgJ
KHJldmlzaW9uIDE4MDUyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTmFt
ZVNjb3BlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDM4ICs0NCwzNyBAQCBwdWJsaWM6CiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVD4KICAgICBzdGF0aWMgVCogY3JlYXRlKFZNJiB2bSwgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNTY29wZSogY3VycmVudFNjb3BlLCBTeW1ib2xUYWJs
ZSogc3ltYm9sVGFibGUsIEpTVmFsdWUgdmFsdWUpCiAgICAgewotICAgICAgICBUKiBzY29wZU9i
amVjdCA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFQ+KHZtLmhlYXApKSBUKHZtLCBnbG9i
YWxPYmplY3QsIGN1cnJlbnRTY29wZSwgc3ltYm9sVGFibGUpOworICAgICAgICBUKiBzY29wZU9i
amVjdCA9IG5ldyAoCisgICAgICAgICAgICBOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8VD4odm0uaGVh
cCwgYWxsb2NhdGlvblNpemVGb3JTY29wZVNpemUoMSkpCisgICAgICAgICAgICBUKHZtLCBnbG9i
YWxPYmplY3QsIGN1cnJlbnRTY29wZSwgc3ltYm9sVGFibGUpOwogICAgICAgICBzY29wZU9iamVj
dC0+ZmluaXNoQ3JlYXRpb24odm0sIHZhbHVlKTsKICAgICAgICAgcmV0dXJuIHNjb3BlT2JqZWN0
OwogICAgIH0KICAgICAKICAgICBzdGF0aWMgSlNOYW1lU2NvcGUqIGNyZWF0ZShWTSYsIEpTR2xv
YmFsT2JqZWN0KiwgSlNTY29wZSogY3VycmVudFNjb3BlLCBTeW1ib2xUYWJsZSosIEpTVmFsdWUs
IFR5cGUpOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90Vmlz
aXRvciYpOwogICAgIHN0YXRpYyBKU1ZhbHVlIHRvVGhpcyhKU0NlbGwqLCBFeGVjU3RhdGUqLCBF
Q01BTW9kZSk7CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0Kiwg
RXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgdm9p
ZCBwdXQoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9w
ZXJ0eVNsb3QmKTsKIAogICAgIERFQ0xBUkVfSU5GTzsKIAotICAgIEpTVmFsdWUgdmFsdWUoKSBj
b25zdCB7IHJldHVybiBtX3JlZ2lzdGVyU3RvcmUuZ2V0KCk7IH0KKyAgICBKU1ZhbHVlIHZhbHVl
KCkgY29uc3QgeyByZXR1cm4gdmFyaWFibGVBdCgwKS5nZXQoKTsgfQogCiBwcm90ZWN0ZWQ6CiAg
ICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYgdm0sIEpTVmFsdWUgdmFsdWUpCiAgICAgewotICAg
ICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7Ci0gICAgICAgIG1fcmVnaXN0ZXJTdG9yZS5z
ZXQodm0sIHRoaXMsIHZhbHVlKTsKKyAgICAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb25VbmluaXRp
YWxpemVkKHZtKTsKKyAgICAgICAgdmFyaWFibGVBdCgwKS5zZXQodm0sIHRoaXMsIHZhbHVlKTsK
ICAgICB9CiAKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVy
cmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKIAogICAgIEpT
TmFtZVNjb3BlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTU2NvcGUqIG5leHQsIFN5
bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSkKLSAgICAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUsIHJl
aW50ZXJwcmV0X2Nhc3Q8UmVnaXN0ZXIqPigmbV9yZWdpc3RlclN0b3JlICsgMSksIG5leHQsIHN5
bWJvbFRhYmxlKQorICAgICAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSwgbmV4dCwgc3ltYm9sVGFi
bGUpCiAgICAgeworICAgICAgICBBU1NFUlQoc3ltYm9sVGFibGUtPnNjb3BlU2l6ZSgpID09IDEp
OwogICAgIH0KLQotcHJpdmF0ZToKLSAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4gbV9yZWdpc3Rl
clN0b3JlOwogfTsKIAogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNT
ZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5jcHAJKHJldmlzaW9uIDE4
MDUyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFi
bGVPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMywzMiArMzMsMzAgQEAK
IAogbmFtZXNwYWNlIEpTQyB7CiAKLWludCBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0OjpmaW5k
UmVnaXN0ZXJJbmRleCh2b2lkKiByZWdpc3RlckFkZHJlc3MpCitTY29wZU9mZnNldCBKU1NlZ21l
bnRlZFZhcmlhYmxlT2JqZWN0OjpmaW5kUmVnaXN0ZXJJbmRleCh2b2lkKiByZWdpc3RlckFkZHJl
c3MpCiB7CiAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsKICAgICAKLSAg
ICBmb3IgKGludCBpID0gbV9yZWdpc3RlcnMuc2l6ZSgpOyBpLS07KSB7CisgICAgZm9yICh1bnNp
Z25lZCBpID0gbV9yZWdpc3RlcnMuc2l6ZSgpOyBpLS07KSB7CiAgICAgICAgIGlmICgmbV9yZWdp
c3RlcnNbaV0gIT0gcmVnaXN0ZXJBZGRyZXNzKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgIHJldHVybiBpOworICAgICAgICByZXR1cm4gU2NvcGVPZmZzZXQoaSk7CiAgICAgfQogICAg
IENSQVNIKCk7Ci0gICAgcmV0dXJuIC0xOworICAgIHJldHVybiBTY29wZU9mZnNldCgpOwogfQog
Ci1pbnQgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdDo6YWRkUmVnaXN0ZXJzKGludCBudW1iZXJP
ZlJlZ2lzdGVyc1RvQWRkKQorU2NvcGVPZmZzZXQgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdDo6
YWRkUmVnaXN0ZXJzKHVuc2lnbmVkIG51bWJlck9mUmVnaXN0ZXJzVG9BZGQpCiB7CiAgICAgQ29u
Y3VycmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsKICAgICAKLSAgICBBU1NFUlQobnVtYmVy
T2ZSZWdpc3RlcnNUb0FkZCA+PSAwKTsKLSAgICAKICAgICBzaXplX3Qgb2xkU2l6ZSA9IG1fcmVn
aXN0ZXJzLnNpemUoKTsKICAgICBtX3JlZ2lzdGVycy5ncm93KG9sZFNpemUgKyBudW1iZXJPZlJl
Z2lzdGVyc1RvQWRkKTsKICAgICAKICAgICBmb3IgKHNpemVfdCBpID0gbnVtYmVyT2ZSZWdpc3Rl
cnNUb0FkZDsgaS0tOykKICAgICAgICAgbV9yZWdpc3RlcnNbb2xkU2l6ZSArIGldLnNldFdpdGhv
dXRXcml0ZUJhcnJpZXIoanNVbmRlZmluZWQoKSk7CiAgICAgCi0gICAgcmV0dXJuIHN0YXRpY19j
YXN0PGludD4ob2xkU2l6ZSk7CisgICAgcmV0dXJuIFNjb3BlT2Zmc2V0KG9sZFNpemUpOwogfQog
CiB2b2lkIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBj
ZWxsLCBTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5oCShy
ZXZpc2lvbiAxODA1MjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21l
bnRlZFZhcmlhYmxlT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDI0ICs1NywyMyBAQCBj
bGFzcyBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0IDogcHVibGljCiBwdWJsaWM6CiAgICAgdHlw
ZWRlZiBKU1N5bWJvbFRhYmxlT2JqZWN0IEJhc2U7CiAKLSAgICBXcml0ZUJhcnJpZXI8VW5rbm93
bj4mIHJlZ2lzdGVyQXQoaW50IGluZGV4KSB7IHJldHVybiBtX3JlZ2lzdGVyc1tpbmRleF07IH0K
KyAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHZhcmlhYmxlQXQoU2NvcGVPZmZzZXQgb2Zmc2V0
KSB7IHJldHVybiBtX3ZhcmlhYmxlc1tvZmZzZXQub2Zmc2V0KCldOyB9CiAgICAgCiAgICAgLy8g
VGhpcyBpcyBhIHNsb3cgbWV0aG9kIGNhbGwsIHdoaWNoIHNlYXJjaGVzIHRoZSByZWdpc3RlciBi
YW5rIHRvIGZpbmQgdGhlIGluZGV4CiAgICAgLy8gZ2l2ZW4gYSBwb2ludGVyLiBJdCB3aWxsIENS
QVNIKCkgaWYgaXQgZG9lcyBub3QgZmluZCB0aGUgcmVnaXN0ZXIuIE9ubHkgdXNlIHRoaXMKICAg
ICAvLyBpbiBkZWJ1ZyBjb2RlIChsaWtlIGJ5dGVjb2RlIGR1bXBpbmcpLgotICAgIEpTX0VYUE9S
VF9QUklWQVRFIGludCBmaW5kUmVnaXN0ZXJJbmRleCh2b2lkKik7CisgICAgSlNfRVhQT1JUX1BS
SVZBVEUgU2NvcGVPZmZzZXQgZmluZFJlZ2lzdGVySW5kZXgodm9pZCopOwogICAgIAotICAgIFdy
aXRlQmFycmllcjxVbmtub3duPiogYXNzZXJ0UmVnaXN0ZXJJc0luVGhpc09iamVjdChXcml0ZUJh
cnJpZXI8VW5rbm93bj4qIHJlZ2lzdGVyUG9pbnRlcikKKyAgICBXcml0ZUJhcnJpZXI8VW5rbm93
bj4qIGFzc2VydFZhcmlhYmxlSXNJblRoaXNPYmplY3QoV3JpdGVCYXJyaWVyPFVua25vd24+KiB2
YXJpYWJsZVBvaW50ZXIpCiAgICAgewotI2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICAgICAgZmlu
ZFJlZ2lzdGVySW5kZXgocmVnaXN0ZXJQb2ludGVyKTsKLSNlbmRpZgorICAgICAgICBpZiAoIUFT
U0VSVF9ESVNBQkxFRCkKKyAgICAgICAgICAgIGZpbmRSZWdpc3RlckluZGV4KHJlZ2lzdGVyUG9p
bnRlcik7CiAgICAgICAgIHJldHVybiByZWdpc3RlclBvaW50ZXI7CiAgICAgfQogICAgIAogICAg
IC8vIEFkZHMgbnVtYmVyT2ZSZWdpc3RlcnNUb0FkZCByZWdpc3RlcnMsIGluaXRpYWxpemVzIHRo
ZW0gdG8gVW5kZWZpbmVkLCBhbmQgcmV0dXJucwogICAgIC8vIHRoZSBpbmRleCBvZiB0aGUgZmly
c3Qgb25lIGFkZGVkLgotICAgIEpTX0VYUE9SVF9QUklWQVRFIGludCBhZGRSZWdpc3RlcnMoaW50
IG51bWJlck9mUmVnaXN0ZXJzVG9BZGQpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIFNjb3BlT2Zm
c2V0IGFkZFJlZ2lzdGVycyh1bnNpZ25lZCBudW1iZXJPZlJlZ2lzdGVyc1RvQWRkKTsKICAgICAK
ICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCos
IFNsb3RWaXNpdG9yJik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
U3ltYm9sVGFibGVPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmgJKHJldmlzaW9uIDE4MDUyOSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuaAkod29ya2luZyBj
b3B5KQpAQCAtNzgsNyArNzgsNyBAQCBpbmxpbmUgYm9vbCBzeW1ib2xUYWJsZUdldCgKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIFN5bWJvbFRhYmxlRW50cnk6OkZhc3QgZW50cnkgPSBpdGVy
LT52YWx1ZTsKICAgICBBU1NFUlQoIWVudHJ5LmlzTnVsbCgpKTsKLSAgICBzbG90LnNldFZhbHVl
KG9iamVjdCwgZW50cnkuZ2V0QXR0cmlidXRlcygpIHwgRG9udERlbGV0ZSwgb2JqZWN0LT5yZWdp
c3RlckF0KGVudHJ5LmdldEluZGV4KCkpLmdldCgpKTsKKyAgICBzbG90LnNldFZhbHVlKG9iamVj
dCwgZW50cnkuZ2V0QXR0cmlidXRlcygpIHwgRG9udERlbGV0ZSwgb2JqZWN0LT52YXJpYWJsZUF0
KGVudHJ5LnNjb3BlT2Zmc2V0KCkpLmdldCgpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAt
OTQsNyArOTQsNyBAQCBpbmxpbmUgYm9vbCBzeW1ib2xUYWJsZUdldCgKICAgICBTeW1ib2xUYWJs
ZUVudHJ5OjpGYXN0IGVudHJ5ID0gaXRlci0+dmFsdWU7CiAgICAgQVNTRVJUKCFlbnRyeS5pc051
bGwoKSk7CiAgICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKAotICAgICAgICBvYmplY3QtPnJl
Z2lzdGVyQXQoZW50cnkuZ2V0SW5kZXgoKSkuZ2V0KCksIGVudHJ5LmdldEF0dHJpYnV0ZXMoKSB8
IERvbnREZWxldGUpOworICAgICAgICBvYmplY3QtPnZhcmlhYmxlQXQoZW50cnkuc2NvcGVPZmZz
ZXQoKSkuZ2V0KCksIGVudHJ5LmdldEF0dHJpYnV0ZXMoKSB8IERvbnREZWxldGUpOwogICAgIHJl
dHVybiB0cnVlOwogfQogCkBAIC0xMTAsNyArMTEwLDcgQEAgaW5saW5lIGJvb2wgc3ltYm9sVGFi
bGVHZXQoCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBTeW1ib2xUYWJsZUVudHJ5OjpGYXN0
IGVudHJ5ID0gaXRlci0+dmFsdWU7CiAgICAgQVNTRVJUKCFlbnRyeS5pc051bGwoKSk7Ci0gICAg
c2xvdC5zZXRWYWx1ZShvYmplY3QsIGVudHJ5LmdldEF0dHJpYnV0ZXMoKSB8IERvbnREZWxldGUs
IG9iamVjdC0+cmVnaXN0ZXJBdChlbnRyeS5nZXRJbmRleCgpKS5nZXQoKSk7CisgICAgc2xvdC5z
ZXRWYWx1ZShvYmplY3QsIGVudHJ5LmdldEF0dHJpYnV0ZXMoKSB8IERvbnREZWxldGUsIG9iamVj
dC0+dmFyaWFibGVBdChlbnRyeS5zY29wZU9mZnNldCgpKS5nZXQoKSk7CiAgICAgc2xvdElzV3Jp
dGVhYmxlID0gIWVudHJ5LmlzUmVhZE9ubHkoKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTE0
NSw3ICsxNDUsNyBAQCBpbmxpbmUgYm9vbCBzeW1ib2xUYWJsZVB1dCgKICAgICAgICAgICAgIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzQ2MDEKICAgICAgICAg
ICAgIHNldC0+bm90aWZ5V3JpdGUodm0sIHZhbHVlLCBvYmplY3QsIHByb3BlcnR5TmFtZSk7CiAg
ICAgICAgIH0KLSAgICAgICAgcmVnID0gJm9iamVjdC0+cmVnaXN0ZXJBdChmYXN0RW50cnkuZ2V0
SW5kZXgoKSk7CisgICAgICAgIHJlZyA9ICZvYmplY3QtPnZhcmlhYmxlQXQoZmFzdEVudHJ5LnNj
b3BlT2Zmc2V0KCkpOwogICAgIH0KICAgICAvLyBJJ2QgcHJlZmVyIHdlIG5vdCBob2xkIGxvY2sg
d2hpbGUgZXhlY3V0aW5nIGJhcnJpZXJzLCBzaW5jZSBJIHByZWZlciB0byByZXNlcnZlCiAgICAg
Ly8gdGhlIHJpZ2h0IGZvciBiYXJyaWVycyB0byBiZSBhYmxlIHRvIHRyaWdnZXIgR0MuIEFuZCBJ
IGRvbid0IHdhbnQgdG8gaG9sZCBWTQpAQCAtMTczLDcgKzE3Myw3IEBAIGlubGluZSBib29sIHN5
bWJvbFRhYmxlUHV0V2l0aEF0dHJpYnV0ZXMKICAgICAgICAgaWYgKFZhcmlhYmxlV2F0Y2hwb2lu
dFNldCogc2V0ID0gZW50cnkud2F0Y2hwb2ludFNldCgpKQogICAgICAgICAgICAgc2V0LT5ub3Rp
ZnlXcml0ZSh2bSwgdmFsdWUsIG9iamVjdCwgcHJvcGVydHlOYW1lKTsKICAgICAgICAgZW50cnku
c2V0QXR0cmlidXRlcyhhdHRyaWJ1dGVzKTsKLSAgICAgICAgcmVnID0gJm9iamVjdC0+cmVnaXN0
ZXJBdChlbnRyeS5nZXRJbmRleCgpKTsKKyAgICAgICAgcmVnID0gJm9iamVjdC0+dmFyaWFibGVB
dChlbnRyeS5zY29wZU9mZnNldCgpKTsKICAgICB9CiAgICAgcmVnLT5zZXQodm0sIG9iamVjdCwg
dmFsdWUpOwogICAgIHJldHVybiB0cnVlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvT3V0T2ZCYW5kQXJndW1lbnRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9PdXRPZkJhbmRBcmd1bWVudHMuY3BwCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3V0T2ZCYW5kQXJndW1lbnRzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDEyNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiT3V0T2ZC
YW5kQXJndW1lbnRzLmgiCisKKyNpbmNsdWRlICJKU0FyZ3VtZW50c0l0ZXJhdG9yLmgiCisjaW5j
bHVkZSAiSlNDSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsKKworU1RBVElDX0FTU0VSVF9J
U19UUklWSUFMTFlfREVTVFJVQ1RJQkxFKE91dE9mQmFuZEFyZ3VtZW50cyk7CisKK2NvbnN0IENs
YXNzSW5mbyBPdXRPZkJhbmRBcmd1bWVudHM6OnNfaW5mbyA9IHsgIkFyZ3VtZW50cyIsICZCYXNl
OjpzX2luZm8sIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoT3V0T2ZCYW5kQXJndW1lbnRzKSB9Owor
CitPdXRPZkJhbmRBcmd1bWVudHM6Ok91dE9mQmFuZEFyZ3VtZW50cyhWTSYgdm0sIFN0cnVjdHVy
ZSogc3RydWN0dXJlKQorICAgIDogQmFzZSh2bSwgc3RydWN0dXJlLCBudWxscHRyKQoreworfQor
CitPdXRPZkJhbmRBcmd1bWVudHMqIE91dE9mQmFuZEFyZ3VtZW50czo6Y3JlYXRlRW1wdHkoVk0m
IHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQoreworICAgIE91dE9mQmFuZEFyZ3Vt
ZW50cyogcmVzdWx0ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8T3V0T2ZCYW5kQXJndW1l
bnRzPih2bS5oZWFwKSkKKyAgICAgICAgT3V0T2ZCYW5kQXJndW1lbnRzKHZtLCBnbG9iYWxPYmpl
Y3QtPm91dE9mQmFuZEFyZ3VtZW50c1N0cnVjdHVyZSgpKTsKKyAgICByZXN1bHQtPmZpbmlzaENy
ZWF0aW9uKHZtKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitPdXRPZkJhbmRBcmd1bWVudHMq
IE91dE9mQmFuZEFyZ3VtZW50czo6Y3JlYXRlRW1wdHkoRXhlY1N0YXRlKiBleGVjKQoreworICAg
IC8vIE5CLiBTb21lIGNsaWVudHMgbWlnaHQgZXhwZWN0IHRoYXQgdGhlIGdsb2JhbCBvYmplY3Qg
b2Ygb2YgdGhpcyBvYmplY3QgaXMgdGhlIGdsb2JhbCBvYmplY3QKKyAgICAvLyBvZiB0aGUgY2Fs
bGVlLiBXZSBkb24ndCBkbyB0aGlzIGZvciBub3csIGJ1dCBtYXliZSB3ZSBzaG91bGQuCisgICAg
cmV0dXJuIGNyZWF0ZUVtcHR5KGV4ZWMtPnZtKCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3Qo
KSk7Cit9CisKK091dE9mQmFuZEFyZ3VtZW50cyogT3V0T2ZCYW5kQXJndW1lbnRzOjpjcmVhdGVX
aXRoSW5saW5lRnJhbWUoRXhlY1N0YXRlKiBteUZyYW1lLCBFeGVjU3RhdGUqIHRhcmdldEZyYW1l
LCBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSwgQXJndW1lbnRzTW9kZSBtb2RlKQor
eworICAgIFZNJiB2bSA9IG15RnJhbWUtPnZtKCk7CisgICAgCisgICAgSlNGdW5jdGlvbiogY2Fs
bGVlOworICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZTsKKyAgICAKKyAgICBpZiAo
aW5saW5lQ2FsbEZyYW1lKSB7CisgICAgICAgIGNhbGxlZSA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4o
aW5saW5lQ2FsbEZyYW1lLT5jYWxsZWVSZWNvdmVyeS5yZWNvdmVyKHRhcmdldEZyYW1lKSk7Cisg
ICAgICAgIGV4ZWN1dGFibGUgPSBqc0Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oaW5saW5lQ2Fs
bEZyYW1lLT5leGVjdXRhYmxlLmdldCgpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBjYWxsZWUg
PSBqc0Nhc3Q8SlNGdW5jdGlvbio+KHRhcmdldEZyYW1lLT5jYWxsZWUoKSk7CisgICAgICAgIGV4
ZWN1dGFibGUgPSBqc0Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4odGFyZ2V0RnJhbWUtPmNvZGVC
bG9jaygpLT5vd25lckV4ZWN1dGFibGUoKSk7CisgICAgfQorICAgIAorICAgIC8vIE5CLiBJdCdz
IHNvbWV3aGF0IGFyYml0cmFyeSB0aGF0IHdlIHRpZSB0aGUgc3RyaWN0bmVzcyBvZiB0aGlzIG9i
amVjdCB0byB0aGUgc3RyaWN0bmVzcyBvZgorICAgIC8vIHRoZSBjYWxsZWUuCisgICAgYm9vbCBp
c1N0cmljdE1vZGUgPSBleGVjdXRhYmxlLT5pc1N0cmljdE1vZGUoKTsKKworICAgIE91dE9mQmFu
ZEFyZ3VtZW50cyogcmVzdWx0ID0gY3JlYXRlRW1wdHkobXlGcmFtZSk7CisgICAgCisgICAgdW5z
aWduZWQgbGVuZ3RoOworICAgIHN3aXRjaCAobW9kZSkgeworICAgIGNhc2UgQ2xvbmVkQXJndW1l
bnRzQ3JlYXRpb25Nb2RlOiB7CisgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUpIHsKKyAgICAg
ICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRSZWdpc3Rlci5pc1ZhbGlk
KCkpCisgICAgICAgICAgICAgICAgbGVuZ3RoID0gZXhlYy0+cihpbmxpbmVDYWxsRnJhbWUtPmFy
Z3VtZW50Q291bnRSZWdpc3RlcikudW5ib3hlZEludDMyKCk7CisgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgbGVuZ3RoID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgp
OworICAgICAgICAgICAgbGVuZ3RoLS07CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IGxlbmd0aDsgaS0tOykKKyAgICAgICAgICAgICAgICByZXN1bHQtPnB1dERp
cmVjdEluZGV4KG15RnJhbWUsIGksIGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzW2ldLnJlY292
ZXIodGFyZ2V0RnJhbWUpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGxlbmd0aCA9
IHRhcmdldEZyYW1lLT5hcmd1bWVudENvdW50KCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IGxlbmd0aDsgaS0tOykKKyAgICAgICAgICAgICAgICByZXN1bHQt
PnB1dERpcmVjdEluZGV4KG15RnJhbWUsIGksIHRhcmdldEZyYW1lLT51bmNoZWNrZWRBcmd1bWVu
dChpKSk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAKKyAgICBj
YXNlIEZha2VBcmd1bWVudFZhbHVlc0NyZWF0aW9uTW9kZTogeworICAgICAgICBsZW5ndGggPSAw
OworICAgICAgICBicmVhazsKKyAgICB9IH0KKyAgICAKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2
bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcihsZW5ndGgpKTsKKyAgICBpZiAo
aXNTdHJpY3RNb2RlKSB7CisgICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0QWNjZXNzb3IoZXhlYywg
dm0ucHJvcGVydHlOYW1lcy0+Y2FsbGVlLCB0aGlzT2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+dGhy
b3dUeXBlRXJyb3JHZXR0ZXJTZXR0ZXIoZXhlYy0+dm0oKSksIERvbnREZWxldGUgfCBEb250RW51
bSB8IEFjY2Vzc29yKTsKKyAgICAgICAgcmVzdWx0LT5wdXREaXJlY3RBY2Nlc3NvcihleGVjLCB2
bS5wcm9wZXJ0eU5hbWVzLT5jYWxsZWUsIHRoaXNPYmplY3QtPmdsb2JhbE9iamVjdCgpLT50aHJv
d1R5cGVFcnJvckdldHRlclNldHRlcihleGVjLT52bSgpKSwgRG9udERlbGV0ZSB8IERvbnRFbnVt
IHwgQWNjZXNzb3IpOworICAgIH0gZWxzZQorICAgICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwg
dm0ucHJvcGVydHlOYW1lcy0+Y2FsbGVlLCBKU1ZhbHVlKGNhbGxlZSkpOworICAgIAorICAgIHJl
c3VsdC0+SlNDX05BVElWRV9GVU5DVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5pdGVyYXRvclByaXZh
dGVOYW1lLCBhcmd1bWVudHNGdW5jSXRlcmF0b3IsIERvbnRFbnVtLCAwKTsKK30KKworT3V0T2ZC
YW5kQXJndW1lbnRzKiBPdXRPZkJhbmRBcmd1bWVudHM6OmNyZWF0ZVdpdGhNYWNoaW5lRnJhbWUo
RXhlY1N0YXRlKiBteUZyYW1lLCBFeGVjU3RhdGUqIHRhcmdldEZyYW1lLCBBcmd1bWVudHNNb2Rl
IG1vZGUpCit7CisgICAgcmV0dXJuIGNyZWF0ZVdpdGhJbmxpbmVGcmFtZShteUZyYW1lLCB0YXJn
ZXRGcmFtZSwgbnVsbHB0ciwgbW9kZSk7Cit9CisKK1N0cnVjdHVyZSogT3V0T2ZCYW5kQXJndW1l
bnRzOjpjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU1ZhbHVlIHByb3RvdHlwZSkKK3sKKyAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0s
IGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVG
bGFncyksIGluZm8oKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9PdXRPZkJhbmRBcmd1bWVudHMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PdXRPZkJhbmRBcmd1bWVudHMuaAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL091dE9mQmFuZEFyZ3Vt
ZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBPdXRPZkJhbmRBcmd1bWVudHNf
aAorI2RlZmluZSBPdXRPZkJhbmRBcmd1bWVudHNfaAorCisjaW5jbHVkZSAiQXJndW1lbnRzTW9k
ZS5oIgorI2luY2x1ZGUgIkpTT2JqZWN0LmgiCisKK25hbWVzcGFjZSBKU0MgeworCisvLyBUaGlz
IGlzIGFuIEFyZ3VtZW50cy1jbGFzcyBvYmplY3QgdGhhdCB3ZSBjcmVhdGUgd2hlbiB5b3UgZG8g
ZnVuY3Rpb24uYXJndW1lbnRzLiBJdCBiZWhhdmVzCisvLyBlbnRpcmVseSBsaWtlIGFuIG9yZGlu
YXJ5IEphdmFTY3JpcHQgb2JqZWN0LiBBbGwgb2YgdGhlIGFyZ3VtZW50cyB2YWx1ZXMgYXJlIHNp
bXBseSBjb3BpZWQgZnJvbQorLy8gdGhlIHN0YWNrIChwb3NzaWJseSB2aWEgc29tZSBzb3BoaXN0
aWNhdGVkIFZhbHVlUmVjb3ZlcnkncyBpZiBhbiBvcHRpbWl6aW5nIGNvbXBpbGVyIGlzIGluCisv
LyBwbGF5KSBhbmQgdGhlIGFwcHJvcHJpYXRlIHByb3BlcnRpZXMgb2YgdGhlIG9iamVjdCBhcmUg
cG9wdWxhdGVkLiBUaGUgb25seSByZWFzb24gd2h5IHdlIG5lZWQKKy8vIGEgc3BlY2lhbCBjbGFz
cyBpcyB0byBtYWtlIHRoZSBvYmplY3QgY2xhaW0gdG8gYmUgIkFyZ3VtZW50cyIgZnJvbSBhIHRv
U3RyaW5nIHN0YW5kcG9pbnQuCisvLworLy8gTm90ZSB0aGF0IHRoaXMgY2xhc3MgZG9lcyBhIGJh
ZCBqb2Igb2YgYmVpbmcgZmFzdC4gVGhhdCdzIHNvbWV3aGF0IGludGVudGlvbmFsLiBXZSBleHBl
Y3QgdXNlcworLy8gb2YgZnVuY3Rpb24uYXJndW1lbnRzIHRvIGJlIHJhcmUgb24gdGhlIG1vZGVy
biB3ZWIuIFlvdSB3aWxsIGdldCBwYXJ0aWN1bGFybHkgYmFkIHBlcmZvcm1hbmNlCisvLyBpZiB5
b3UgdXNlIGZ1bmN0aW9uLmFyZ3VtZW50cyBpbiBzdHJpY3QgbW9kZS4KK2NsYXNzIE91dE9mQmFu
ZEFyZ3VtZW50cyA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKK3B1YmxpYzoKKyAgICB0eXBl
ZGVmIEpTTm9uRmluYWxPYmplY3QgQmFzZTsKKyAgICAKK3ByaXZhdGU6CisgICAgT3V0T2ZCYW5k
QXJndW1lbnRzKFZNJiwgU3RydWN0dXJlKik7CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgT3V0T2ZC
YW5kQXJndW1lbnRzKiBjcmVhdGVFbXB0eShWTSYsIEpTR2xvYmFsT2JqZWN0Kik7CisgICAgc3Rh
dGljIE91dE9mQmFuZEFyZ3VtZW50cyogY3JlYXRlRW1wdHkoRXhlY1N0YXRlKik7CisgICAgc3Rh
dGljIE91dE9mQmFuZEFyZ3VtZW50cyogY3JlYXRlV2l0aElubGluZUZyYW1lKEV4ZWNTdGF0ZSog
bXlGcmFtZSwgRXhlY1N0YXRlKiB0YXJnZXRGcmFtZSwgSW5saW5lQ2FsbEZyYW1lKiwgQXJndW1l
bnRzTW9kZSk7CisgICAgc3RhdGljIE91dE9mQmFuZEFyZ3VtZW50cyogY3JlYXRlV2l0aE1hY2hp
bmVGcmFtZShFeGVjU3RhdGUqIG15RnJhbWUsIEV4ZWNTdGF0ZSogdGFyZ2V0RnJhbWUsIEFyZ3Vt
ZW50c01vZGUpOworICAgIAorICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShW
TSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUpOworICAgIAorICAgIERFQ0xB
UkVfSU5GTzsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gT3V0T2ZCYW5k
QXJndW1lbnRzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVP
ZmZzZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Nj
b3BlT2Zmc2V0LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1Njb3BlT2Zmc2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQyIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJTY29wZU9mZnNldC5oIgorCituYW1lc3BhY2UgSlNDIHsKKwordm9p
ZCBTY29wZU9mZnNldDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIGlmICgh
KnRoaXMpIHsKKyAgICAgICAgb3V0LnByaW50KCJzY29wZUludmFsaWQiKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICAKKyAgICBvdXQucHJpbnQoInNjb3BlIiwgb2Zmc2V0KCkpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU2NvcGVPZmZzZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TY29wZU9mZnNldC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU2NvcGVPZmZzZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUxIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgU2Nv
cGVPZmZzZXRfaAorI2RlZmluZSBTY29wZU9mZnNldF9oCisKKyNpbmNsdWRlICJHZW5lcmljT2Zm
c2V0LmgiCisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBKU0Mgewor
CisvLyBUaGlzIGlzIGFuIG9mZnNldCBpbnRvIGEgc2NvcGUgb2Ygc29tZSBraW5kLiBJdCBjb3Vs
ZCBiZSBhbiBhY3RpdmF0aW9uIHNjb3BlIG9yIGl0IGNvdWxkIGJlIGEKKy8vIGdsb2JhbCBvYmpl
Y3QuCitjbGFzcyBTY29wZU9mZnNldCA6IHB1YmxpYyBHZW5lcmljT2Zmc2V0PFNjb3BlT2Zmc2V0
PiB7CitwdWJsaWM6CisgICAgU2NvcGVPZmZzZXQoKSB7IH0KKyAgICAKKyAgICBleHBsaWNpdCBT
Y29wZU9mZnNldCh1bnNpZ25lZCBvZmZzZXQpCisgICAgICAgIDogR2VuZXJpY09mZnNldChvZmZz
ZXQpCisgICAgeworICAgIH0KKyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25z
dDsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gU2NvcGVPZmZzZXRfaAor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVu
dHMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3Bl
ZEFyZ3VtZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTUgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBTY29wZWRBcmd1bWVu
dHNfaAorI2RlZmluZSBTY29wZWRBcmd1bWVudHNfaAorCisjaW5jbHVkZSAiSlNPYmplY3QuaCIK
KworbmFtZXNwYWNlIEpTQyB7CisKKy8vIFRoaXMgaXMgYW4gQXJndW1lbnRzLWNsYXNzIG9iamVj
dCB0aGF0IHdlIGNyZWF0ZSB3aGVuIHlvdSBzYXkgImFyZ3VtZW50cyIgaW5zaWRlIGEgZnVuY3Rp
b24sCisvLyBhbmQgb25lIG9yIG1vcmUgb2YgdGhlIGFyZ3VtZW50cyBtYXkgYmUgY2FwdHVyZWQg
aW4gdGhlIGZ1bmN0aW9uJ3MgYWN0aXZhdGlvbi4gVGhlIGZ1bmN0aW9uCisvLyB3aWxsIGNvcHkg
YWxsIG9mIGl0cyBhcmd1bWVudHMgaW50byB0aGUgYWN0aXZhdGlvbiBhbmQgdGhlbiBjcmVhdGUg
dGhpcyBvYmplY3QuIFRoaXMgb2JqZWN0CisvLyB3aWxsIHVzZSB0aGUgc3ltYm9sIHRhYmxlJ3Mg
U2NvcGVkQXJndW1lbnRzVGFibGUgYW5kIHRoZSBhY3RpdmF0aW9uIHRvIGhhbmRsZSBhbGwgaW5k
ZXhlZAorLy8gbG9va3Vwcy4KK2NsYXNzIFNjb3BlZEFyZ3VtZW50cyA6IHB1YmxpYyBKU05vbkZp
bmFsT2JqZWN0IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTTm9uRmluYWxPYmplY3QgQmFzZTsK
KworcHJpdmF0ZToKKyAgICBTY29wZWRBcmd1bWVudHMoVk0mLCBTdHJ1Y3R1cmUqKTsKKworcHVi
bGljOgorICAgIHN0YXRpYyBTY29wZWRBcmd1bWVudHMqIGNyZWF0ZShWTSYsIFN0cnVjdHVyZSos
IFNjb3BlZEFyZ3VtZW50c1RhYmxlKiwgSlNMZXhpY2FsRW52aXJvbm1lbnQqKTsKKyAgICAKKyAg
ICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAg
CisgICAgdWludDMyX3QgbGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKKyAgICB7CisgICAg
ICAgIGlmIChVTkxJS0VMWShtX292ZXJyb2RlTGVuZ3RoKSkKKyAgICAgICAgICAgIHJldHVybiBn
ZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCkudG9VSW50MzIoZXhlYyk7Cisg
ICAgICAgIHJldHVybiBtX3RhYmxlLT5sZW5ndGgoKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBj
YW5HZXRJbmRleFF1aWNrbHkodWludDMyX3QgaSkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biBpIDwgbV9sZW5ndGggJiYgISFtX3RhYmxlLT5nZXQoaSk7CisgICAgfQorICAgIAorICAgIEpT
VmFsdWUgZ2V0SW5kZXhRdWlja2x5KHVpbnQzMl90IGkpIGNvbnN0CisgICAgeworICAgICAgICBB
U1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihjYW5HZXRJbmRleFF1aWNrbHkoaSkpOwor
ICAgICAgICByZXR1cm4gbV9zY29wZS0+dmFyaWFibGVBdChtX3RhYmxlLT5nZXQoaSkpLmdldCgp
OworICAgIH0KKworICAgIERFQ0xBUkVfSU5GTzsKKyAgICAKKyAgICBzdGF0aWMgU3RydWN0dXJl
KiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBl
KTsKKworcHJpdmF0ZToKKyAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmpl
Y3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOworICAgIHN0YXRp
YyBib29sIGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCB1
bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyB2b2lkIGdl
dE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJh
eSYsIEVudW1lcmF0aW9uTW9kZSk7CisgICAgc3RhdGljIHZvaWQgcHV0KEpTQ2VsbCosIEV4ZWNT
dGF0ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CisgICAgc3Rh
dGljIHZvaWQgcHV0QnlJbmRleChKU0NlbGwqLCBFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0
eU5hbWUsIEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpOworICAgIHN0YXRpYyB2b2lkIGRlbGV0
ZVByb3BlcnR5KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSk7CisgICAgc3RhdGlj
IHZvaWQgZGVsZXRlUHJvcGVydHlCeUluZGV4KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIHVuc2lnbmVk
IHByb3BlcnR5TmFtZSk7CisgICAgc3RhdGljIHZvaWQgZGVmaW5lT3duUHJvcGVydHkoSlNPYmpl
Y3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5RGVzY3JpcHRvciYs
IGJvb2wgc2hvdWxkVGhyb3cpOworICAgIAorICAgIHZvaWQgb3ZlcnJpZGVBcmd1bWVudChWTSYg
dm0sIHVpbnQzMl90IGkpCisgICAgeworICAgICAgICBtX3RhYmxlLnNldCh2bSwgdGhpcywgbV90
YWJsZS0+c2V0KHZtLCBpLCBTY29wZU9mZnNldCgpKSk7CisgICAgfQorICAgIAorICAgIGJvb2wg
bV9vdmVycm9kZUxlbmd0aDsKKyAgICBXcml0ZUJhcnJpZXI8U2NvcGVkQXJndW1lbnRzVGFibGU+
IG1fdGFibGU7CisgICAgV3JpdGVCYXJyaWVyPEpTTGV4aWNhbEVudmlyb25tZW50PiBtX3Njb3Bl
OworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBTY29wZWRBcmd1bWVudHNf
aAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHNU
YWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3Bl
ZEFyZ3VtZW50c1RhYmxlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TY29wZWRBcmd1bWVudHNUYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
OTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lm
bmRlZiBTY29wZWRBcmd1bWVudHNUYWJsZV9oCisjZGVmaW5lIFNjb3BlZEFyZ3VtZW50c1RhYmxl
X2gKKworI2luY2x1ZGUgIkpTQ2VsbC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworLy8gVGhpcyBj
bGFzcydzIG9ubHkgam9iIGlzIHRvIGhvbGQgb250byB0aGUgbGlzdCBvZiBTY29wZU9mZnNldHMg
Zm9yIGVhY2ggYXJndW1lbnQgdGhhdCBhCisvLyBmdW5jdGlvbiBoYXMuIE1vc3Qgb2YgdGhlIHRp
bWUsIHRoZSBCeXRlY29kZUdlbmVyYXRvciB3aWxsIGNyZWF0ZSBvbmUgb2YgdGhlc2UgYW5kIGl0
IHdpbGwKKy8vIG5ldmVyIGJlIG1vZGlmaWVkIHN1YnNlcXVlbnRseS4gVGhlcmUgaXMgYSByYXJl
IGNhc2Ugd2hlcmUgYSBTY29wZWRBcmd1bWVudHMgb2JqZWN0IGlzIGNyZWF0ZWQKKy8vIGFuZCBh
bGlhc2VzIG9uZSBvZiB0aGVzZSBhbmQgdGhlbiBkZWNpZGVzIHRvIG1vZGlmeSBpdDsgaW4gdGhh
dCBjYXNlIHdlIGRvIGNvcHktb24td3JpdGUuIFRoaXMKKy8vIG1ha2VzIHNlbnNlIGJlY2F1c2Ug
c3VjaCBtb2RpZmljYXRpb25zIGFyZSBzbyB1bmNvbW1vbi4gWW91J2QgaGF2ZSB0byBkbyBzb21l
dGhpbmcgY3JhenkgbGlrZQorLy8gImRlbGV0ZSBhcmd1bWVudHNbaV0iIG9yIHNvbWUgdmFyaWFu
dCBvZiBkZWZpbmVPd25Qcm9wZXJ0eS4KK2NsYXNzIFNjb3BlZEFyZ3VtZW50cyA6IHB1YmxpYyBK
U0NlbGwgeworcHVibGljOgorICAgIHR5cGVkZWYgSlNDZWxsIEJhc2U7CisgICAgCisgICAgc3Rh
dGljIGNvbnN0IGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0
IGJvb2wgaGFzSW1tb3J0YWxTdHJ1Y3R1cmUgPSB0cnVlOworCitwcml2YXRlOgorICAgIFNjb3Bl
ZEFyZ3VtZW50c1RhYmxlKFZNJik7CisgICAgflNjb3BlZEFyZ3VtZW50c1RhYmxlKCk7CisKK3B1
YmxpYzoKKyAgICBzdGF0aWMgU2NvcGVkQXJndW1lbnRzVGFibGUqIGNyZWF0ZShWTSYpOworICAg
IAorICAgIFNjb3BlZEFyZ3VtZW50cyogY2xvbmUoVk0mKTsKKyAgICAKKyAgICB1aW50MzJfdCBs
ZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2xlbmd0aDsgfQorICAgIFNjb3BlZEFyZ3VtZW50c1Rh
YmxlKiBzZXRMZW5ndGgoVk0mLCB1aW50MzJfdCBuZXdMZW5ndGgpOworICAgIAorICAgIFNjb3Bl
T2Zmc2V0IGdldCh1aW50MzJfdCBpKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUX1dJVEhf
U0VDVVJJVFlfSU1QTElDQVRJT04oaSA8IG1fbGVuZ3RoKTsKKyAgICAgICAgcmV0dXJuIG1fYXJn
dW1lbnRzW2ldOworICAgIH0KKyAgICAKKyAgICB2b2lkIGxvY2soKQorICAgIHsKKyAgICAgICAg
bV9sb2NrZWQgPSB0cnVlOworICAgIH0KKyAgICAKKyAgICBTY29wZWRBcmd1bWVudHMqIHNldChW
TSYgdm0sIHVpbnQzMl90IGksIFNjb3BlT2Zmc2V0IHZhbHVlKQorICAgIHsKKyAgICAgICAgU2Nv
cGVkQXJndW1lbnRzKiByZXN1bHQ7CisgICAgICAgIGlmIChVTkxJS0VMWShtX2xvY2tlZCkpCisg
ICAgICAgICAgICByZXN1bHQgPSBjbG9uZSh2bSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IHJlc3VsdCA9IHRoaXM7CisgICAgICAgIHJlc3VsdC0+c2V0RGlyZWN0KGksIHZhbHVlKTsKKyAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgREVDTEFSRV9JTkZPOworCitw
cml2YXRlOgorICAgIHVpbnQzMl90IG1fbGVuZ3RoOworICAgIGJvb2wgbV9sb2NrZWQ7IC8vIEJl
aW5nIGxvY2tlZCBtZWFucyB0aGF0IHRoZXJlIGFyZSBtdWx0aXBsZSByZWZlcmVuY2VzIHRvIHRo
aXMgb2JqZWN0IGFuZCBub25lIG9mIHRoZW0gZXhwZWN0IHRvIHNlZSB0aGUgb3RoZXJzJyBtb2Rp
ZmljYXRpb25zLiBUaGlzIG1lYW5zIHRoYXQgbW9kaWZpY2F0aW9ucyBuZWVkIHRvIG1ha2UgYSBj
b3B5IGZpcnN0LgorICAgIHN0ZDo6dW5pcXVlX3B0cjxTY29wZU9mZnNldFtdPiBtX2FyZ3VtZW50
czsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gU2NvcGVkQXJndW1lbnRz
VGFibGVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJs
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9s
VGFibGUuY3BwCShyZXZpc2lvbiAxODA1MjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TeW1ib2xUYWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEzNywyOSAr
MTM3LDIyIEBAIHZvaWQgU3ltYm9sVGFibGU6OldhdGNocG9pbnRDbGVhbnVwOjpmaW4KICAgICB9
CiB9CiAKLVN5bWJvbFRhYmxlKiBTeW1ib2xUYWJsZTo6Y2xvbmVDYXB0dXJlZE5hbWVzKFZNJiB2
bSkKK1N5bWJvbFRhYmxlKiBTeW1ib2xUYWJsZTo6Y2xvbmVTY29wZVBhcnQoVk0mIHZtKQogewog
ICAgIFN5bWJvbFRhYmxlKiByZXN1bHQgPSBTeW1ib2xUYWJsZTo6Y3JlYXRlKHZtKTsKICAgICAK
LSAgICByZXN1bHQtPm1fcGFyYW1ldGVyQ291bnRJbmNsdWRpbmdUaGlzID0gbV9wYXJhbWV0ZXJD
b3VudEluY2x1ZGluZ1RoaXM7CiAgICAgcmVzdWx0LT5tX3VzZXNOb25TdHJpY3RFdmFsID0gbV91
c2VzTm9uU3RyaWN0RXZhbDsKLSAgICByZXN1bHQtPm1fY2FwdHVyZVN0YXJ0ID0gbV9jYXB0dXJl
U3RhcnQ7Ci0gICAgcmVzdWx0LT5tX2NhcHR1cmVFbmQgPSBtX2NhcHR1cmVFbmQ7CiAKICAgICBm
b3IgKGF1dG8gaXRlciA9IG1fbWFwLmJlZ2luKCksIGVuZCA9IG1fbWFwLmVuZCgpOyBpdGVyICE9
IGVuZDsgKytpdGVyKSB7Ci0gICAgICAgIGlmICghaXNDYXB0dXJlZChpdGVyLT52YWx1ZS5nZXRJ
bmRleCgpKSkKKyAgICAgICAgaWYgKCFpdGVyLT52YWx1ZS52YXJPZmZzZXQoKS5pc1Njb3BlKCkp
CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgcmVzdWx0LT5tX21hcC5hZGQoCiAgICAg
ICAgICAgICBpdGVyLT5rZXksCi0gICAgICAgICAgICBTeW1ib2xUYWJsZUVudHJ5KGl0ZXItPnZh
bHVlLmdldEluZGV4KCksIGl0ZXItPnZhbHVlLmdldEF0dHJpYnV0ZXMoKSkpOworICAgICAgICAg
ICAgU3ltYm9sVGFibGVFbnRyeShpdGVyLT52YWx1ZS52YXJPZmZzZXQoKSwgaXRlci0+dmFsdWUu
Z2V0QXR0cmlidXRlcygpKSk7CiAgICAgfQogICAgIAotICAgIGlmIChtX3Nsb3dBcmd1bWVudHMp
IHsKLSAgICAgICAgcmVzdWx0LT5tX3Nsb3dBcmd1bWVudHMgPSBzdGQ6Om1ha2VfdW5pcXVlPFNs
b3dBcmd1bWVudFtdPihwYXJhbWV0ZXJDb3VudCgpKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gcGFyYW1ldGVyQ291bnQoKTsgaS0tOykKLSAgICAgICAgICAgIHJlc3VsdC0+bV9zbG93QXJn
dW1lbnRzW2ldID0gbV9zbG93QXJndW1lbnRzW2ldOwotICAgIH0KLQorICAgIHJlc3VsdC0+bV9h
cmd1bWVudHMgPSBhcmd1bWVudHMoKTsKKyAgICAKICAgICBpZiAobV90eXBlUHJvZmlsaW5nUmFy
ZURhdGEpIHsKICAgICAgICAgcmVzdWx0LT5tX3R5cGVQcm9maWxpbmdSYXJlRGF0YSA9IHN0ZDo6
bWFrZV91bmlxdWU8VHlwZVByb2ZpbGluZ1JhcmVEYXRhPigpOwogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmgJKHJldmlzaW9uIDE4MDUyOSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAyMDEy
LTIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDA3LCAyMDA4LCAyMDEyLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMSw2ICszMSw3IEBACiAKICNpbmNsdWRl
ICJDb25jdXJyZW50SklUTG9jay5oIgogI2luY2x1ZGUgIkpTT2JqZWN0LmgiCisjaW5jbHVkZSAi
U2NvcGVkQXJndW1lbnRzVGFibGUuaCIKICNpbmNsdWRlICJUeXBlTG9jYXRpb24uaCIKICNpbmNs
dWRlICJWYXJpYWJsZVdhdGNocG9pbnRTZXQuaCIKICNpbmNsdWRlIDxtZW1vcnk+CkBAIC0zOSwy
NCArNDAsNiBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotc3RydWN0IFNsb3dBcmd1bWVudCB7Ci1w
dWJsaWM6Ci0gICAgZW51bSBTdGF0dXMgewotICAgICAgICBOb3JtYWwgPSAwLAotICAgICAgICBD
YXB0dXJlZCA9IDEsCi0gICAgICAgIERlbGV0ZWQgPSAyCi0gICAgfTsKLQotICAgIFNsb3dBcmd1
bWVudCgpCi0gICAgICAgIDogc3RhdHVzKE5vcm1hbCkKLSAgICAgICAgLCBpbmRleCgwKQotICAg
IHsKLSAgICB9Ci0KLSAgICBTdGF0dXMgc3RhdHVzOwotICAgIGludCBpbmRleDsgLy8gSWYgc3Rh
dHVzIGlzICdEZWxldGVkJywgaW5kZXggaXMgYm9ndXMuCi19OwotCiBzdGF0aWMgQUxXQVlTX0lO
TElORSBpbnQgbWlzc2luZ1N5bWJvbE1hcmtlcigpIHsgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1p
dHM8aW50Pjo6bWF4KCk7IH0KIAogLy8gVGhlIGJpdCB0d2lkZGxpbmcgaW4gdGhpcyBjbGFzcyBh
c3N1bWVzIHRoYXQgZXZlcnkgcmVnaXN0ZXIgaW5kZXggaXMgYQpAQCAtODYsNiArNjksMjggQEAg
c3RhdGljIEFMV0FZU19JTkxJTkUgaW50IG1pc3NpbmdTeW1ib2xNYQogLy8gY29weTogICAgIFN5
bWJvbFRhYmxlRW50cnkgLS0+IEZhdEVudHJ5IC0tLS0tXgogCiBzdHJ1Y3QgU3ltYm9sVGFibGVF
bnRyeSB7Citwcml2YXRlOgorICAgIHN0YXRpYyBWYXJPZmZzZXQgdmFyT2Zmc2V0RnJvbUJpdHMo
aW50cHRyX3QgYml0cykKKyAgICB7CisgICAgICAgIFZhcktpbmQga2luZDsKKyAgICAgICAgaWYg
KGJpdHMgJiBTdGFja0ZsYWcpCisgICAgICAgICAgICBraW5kID0gU3RhY2tWYXJLaW5kOworICAg
ICAgICBlbHNlIGlmIChiaXRzICYgQ2FwdHVyZWRBcmd1bWVudEZsYWcpCisgICAgICAgICAgICBr
aW5kID0gQ2FwdHVyZWRBcmd1bWVudEtpbmQ7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGtp
bmQgPSBTY29wZVZhcktpbmQ7CisgICAgICAgIHJldHVybiBWYXJPZmZzZXQ6OmFzc2VtYmxlKGtp
bmQsIHN0YXRpY19jYXN0PGludD4oYml0cyA+PiBGbGFnQml0cykpOworICAgIH0KKyAgICAKKyAg
ICBzdGF0aWMgU2NvcGVPZmZzZXQgc2NvcGVPZmZzZXRGcm9tQml0cyhpbnRwdHJfdCBiaXRzKQor
ICAgIHsKKyAgICAgICAgQVNTRVJUKCEoYml0cyAmIFN0YWNrRmxhZykpOworICAgICAgICBBU1NF
UlQoIShiaXRzICYgQ2FwdHVyZWRBcmd1bWVudEZsYWcpKTsKKyAgICAgICAgcmV0dXJuIFNjb3Bl
T2Zmc2V0KHN0YXRpY19jYXN0PGludD4oYml0cyA+PiBGbGFnQml0cykpOworICAgIH0KKworcHVi
bGljOgorICAgIAogICAgIC8vIFVzZSB0aGUgU3ltYm9sVGFibGVFbnRyeTo6RmFzdCBjbGFzcywg
ZWl0aGVyIHZpYSBpbXBsaWNpdCBjYXN0IG9yIGJ5IGNhbGxpbmcKICAgICAvLyBnZXRGYXN0KCks
IHdoZW4geW91ICgxKSBvbmx5IGNhcmUgYWJvdXQgaXNOdWxsKCksIGdldEluZGV4KCksIGFuZCBp
c1JlYWRPbmx5KCksCiAgICAgLy8gYW5kICgyKSB5b3UgYXJlIGluIGEgaG90IHBhdGggd2hlcmUg
eW91IG5lZWQgdG8gbWluaW1pemUgdGhlIG51bWJlciBvZiB0aW1lcwpAQCAtMTA3LDExICsxMTIs
MTkgQEAgc3RydWN0IFN5bWJvbFRhYmxlRW50cnkgewogICAgICAgICAgICAgcmV0dXJuICEobV9i
aXRzICYgflNsaW1GbGFnKTsKICAgICAgICAgfQogCi0gICAgICAgIGludCBnZXRJbmRleCgpIGNv
bnN0CisgICAgICAgIFZhck9mZnNldCB2YXJPZmZzZXQoKSBjb25zdAogICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PihtX2JpdHMgPj4gRmxhZ0JpdHMpOworICAg
ICAgICAgICAgcmV0dXJuIHZhck9mZnNldEZyb21CaXRzKG1fYml0cyk7CiAgICAgICAgIH0KLSAg
ICAKKyAgICAgICAgCisgICAgICAgIC8vIEFzc2VydHMgaWYgdGhlIG9mZnNldCBpcyBhbnl0aGlu
ZyBidXQgYSBzY29wZSBvZmZzZXQuIFRoaXMgc3RydWN0dXJlcyB0aGUgYXNzZXJ0aW9ucworICAg
ICAgICAvLyBpbiBhIHdheSB0aGF0IG1heSByZXN1bHQgaW4gYmV0dGVyIGNvZGUsIGV2ZW4gaW4g
cmVsZWFzZSwgdGhhbiBkb2luZworICAgICAgICAvLyB2YXJPZmZzZXQoKS5zY29wZU9mZnNldCgp
LgorICAgICAgICBTY29wZU9mZnNldCBzY29wZU9mZnNldCgpIGNvbnN0CisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBzY29wZU9mZnNldEZyb21CaXRzKG1fYml0cyk7CisgICAgICAgIH0K
KyAgICAgICAgCiAgICAgICAgIGJvb2wgaXNSZWFkT25seSgpIGNvbnN0CiAgICAgICAgIHsKICAg
ICAgICAgICAgIHJldHVybiBtX2JpdHMgJiBSZWFkT25seUZsYWc7CkBAIC0xNDIsMTggKzE1NSwx
OCBAQCBzdHJ1Y3QgU3ltYm9sVGFibGVFbnRyeSB7CiAgICAgewogICAgIH0KIAotICAgIFN5bWJv
bFRhYmxlRW50cnkoaW50IGluZGV4KQorICAgIFN5bWJvbFRhYmxlRW50cnkoVmFyT2Zmc2V0IG9m
ZnNldCkKICAgICAgICAgOiBtX2JpdHMoU2xpbUZsYWcpCiAgICAgewotICAgICAgICBBU1NFUlQo
aXNWYWxpZEluZGV4KGluZGV4KSk7Ci0gICAgICAgIHBhY2soaW5kZXgsIGZhbHNlLCBmYWxzZSk7
CisgICAgICAgIEFTU0VSVChpc1ZhbGlkVmFyT2Zmc2V0KG9mZnNldCkpOworICAgICAgICBwYWNr
KG9mZnNldCwgZmFsc2UsIGZhbHNlKTsKICAgICB9CiAKLSAgICBTeW1ib2xUYWJsZUVudHJ5KGlu
dCBpbmRleCwgdW5zaWduZWQgYXR0cmlidXRlcykKKyAgICBTeW1ib2xUYWJsZUVudHJ5KFZhck9m
ZnNldCBvZmZzZXQsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCiAgICAgICAgIDogbV9iaXRzKFNsaW1G
bGFnKQogICAgIHsKLSAgICAgICAgQVNTRVJUKGlzVmFsaWRJbmRleChpbmRleCkpOwotICAgICAg
ICBwYWNrKGluZGV4LCBhdHRyaWJ1dGVzICYgUmVhZE9ubHksIGF0dHJpYnV0ZXMgJiBEb250RW51
bSk7CisgICAgICAgIEFTU0VSVChpc1ZhbGlkVmFyT2Zmc2V0KG9mZnNldCkpOworICAgICAgICBw
YWNrKG9mZnNldCwgYXR0cmlidXRlcyAmIFJlYWRPbmx5LCBhdHRyaWJ1dGVzICYgRG9udEVudW0p
OwogICAgIH0KICAgICAKICAgICB+U3ltYm9sVGFibGVFbnRyeSgpCkBAIC0xODEsOSArMTk0LDE3
IEBAIHN0cnVjdCBTeW1ib2xUYWJsZUVudHJ5IHsKICAgICAgICAgcmV0dXJuICEoYml0cygpICYg
flNsaW1GbGFnKTsKICAgICB9CiAKLSAgICBpbnQgZ2V0SW5kZXgoKSBjb25zdAorICAgIFZhck9m
ZnNldCB2YXJPZmZzZXQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHZhck9mZnNldEZy
b21CaXRzKGJpdHMoKSk7CisgICAgfQorICAgIAorICAgIC8vIEFzc2VydHMgaWYgdGhlIG9mZnNl
dCBpcyBhbnl0aGluZyBidXQgYSBzY29wZSBvZmZzZXQuIFRoaXMgc3RydWN0dXJlcyB0aGUgYXNz
ZXJ0aW9ucworICAgIC8vIGluIGEgd2F5IHRoYXQgbWF5IHJlc3VsdCBpbiBiZXR0ZXIgY29kZSwg
ZXZlbiBpbiByZWxlYXNlLCB0aGFuIGRvaW5nCisgICAgLy8gdmFyT2Zmc2V0KCkuc2NvcGVPZmZz
ZXQoKS4KKyAgICBTY29wZU9mZnNldCBzY29wZU9mZnNldCgpIGNvbnN0CiAgICAgewotICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PihiaXRzKCkgPj4gRmxhZ0JpdHMpOworICAgICAgICBy
ZXR1cm4gc2NvcGVPZmZzZXRGcm9tQml0cyhiaXRzKCkpOwogICAgIH0KICAgICAKICAgICBBTFdB
WVNfSU5MSU5FIEZhc3QgZ2V0RmFzdCgpIGNvbnN0CkBAIC0yMDksNyArMjMwLDcgQEAgc3RydWN0
IFN5bWJvbFRhYmxlRW50cnkgewogCiAgICAgdm9pZCBzZXRBdHRyaWJ1dGVzKHVuc2lnbmVkIGF0
dHJpYnV0ZXMpCiAgICAgewotICAgICAgICBwYWNrKGdldEluZGV4KCksIGF0dHJpYnV0ZXMgJiBS
ZWFkT25seSwgYXR0cmlidXRlcyAmIERvbnRFbnVtKTsKKyAgICAgICAgcGFjayh2YXJPZmZzZXQo
KSwgYXR0cmlidXRlcyAmIFJlYWRPbmx5LCBhdHRyaWJ1dGVzICYgRG9udEVudW0pOwogICAgIH0K
IAogICAgIGJvb2wgaXNSZWFkT25seSgpIGNvbnN0CkBAIC0yNDIsNyArMjYzLDkgQEAgcHJpdmF0
ZToKICAgICBzdGF0aWMgY29uc3QgaW50cHRyX3QgUmVhZE9ubHlGbGFnID0gMHgyOwogICAgIHN0
YXRpYyBjb25zdCBpbnRwdHJfdCBEb250RW51bUZsYWcgPSAweDQ7CiAgICAgc3RhdGljIGNvbnN0
IGludHB0cl90IE5vdE51bGxGbGFnID0gMHg4OwotICAgIHN0YXRpYyBjb25zdCBpbnRwdHJfdCBG
bGFnQml0cyA9IDQ7CisgICAgc3RhdGljIGNvbnN0IGludHB0cl90IFN0YWNrRmxhZyA9IDB4MTA7
CisgICAgc3RhdGljIGNvbnN0IGludHB0cl90IENhcHR1cmVkQXJndW1lbnRGbGFnID0gMHgyMDsK
KyAgICBzdGF0aWMgY29uc3QgaW50cHRyX3QgRmxhZ0JpdHMgPSA2OwogICAgIAogICAgIGNsYXNz
IEZhdEVudHJ5IHsKICAgICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CkBAIC0zMDksMjAg
KzMzMiwzNCBAQCBwcml2YXRlOgogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBmcmVlRmF0
RW50cnlTbG93KCk7CiAKLSAgICB2b2lkIHBhY2soaW50IGluZGV4LCBib29sIHJlYWRPbmx5LCBi
b29sIGRvbnRFbnVtKQorICAgIHZvaWQgcGFjayhWYXJPZmZzZXQgb2Zmc2V0LCBib29sIHJlYWRP
bmx5LCBib29sIGRvbnRFbnVtKQogICAgIHsKICAgICAgICAgQVNTRVJUKCFpc0ZhdCgpKTsKICAg
ICAgICAgaW50cHRyX3QmIGJpdHNSZWYgPSBiaXRzKCk7Ci0gICAgICAgIGJpdHNSZWYgPSAoc3Rh
dGljX2Nhc3Q8aW50cHRyX3Q+KGluZGV4KSA8PCBGbGFnQml0cykgfCBOb3ROdWxsRmxhZyB8IFNs
aW1GbGFnOworICAgICAgICBiaXRzUmVmID0KKyAgICAgICAgICAgIChzdGF0aWNfY2FzdDxpbnRw
dHJfdD4ob2Zmc2V0LnJhd09mZnNldCgpKSA8PCBGbGFnQml0cykgfCBOb3ROdWxsRmxhZyB8IFNs
aW1GbGFnOwogICAgICAgICBpZiAocmVhZE9ubHkpCiAgICAgICAgICAgICBiaXRzUmVmIHw9IFJl
YWRPbmx5RmxhZzsKICAgICAgICAgaWYgKGRvbnRFbnVtKQogICAgICAgICAgICAgYml0c1JlZiB8
PSBEb250RW51bUZsYWc7CisgICAgICAgIHN3aXRjaCAob2Zmc2V0LmtpbmQoKSkgeworICAgICAg
ICBjYXNlIFNjb3BlVmFyS2luZDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFN0
YWNrVmFyS2luZDoKKyAgICAgICAgICAgIGJpdHNSZWYgfD0gU3RhY2tGbGFnOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ2FwdHVyZWRBcmd1bWVudEtpbmQ6CisgICAgICAgICAg
ICBiaXRzUmVmIHw9IENhcHR1cmVkQXJndW1lbnRGbGFnOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgYm9vbCBp
c1ZhbGlkSW5kZXgoaW50IGluZGV4KQorICAgIHN0YXRpYyBib29sIGlzVmFsaWRWYXJPZmZzZXQo
VmFyT2Zmc2V0IG9mZnNldCkKICAgICB7Ci0gICAgICAgIHJldHVybiAoKHN0YXRpY19jYXN0PGlu
dHB0cl90PihpbmRleCkgPDwgRmxhZ0JpdHMpID4+IEZsYWdCaXRzKSA9PSBzdGF0aWNfY2FzdDxp
bnRwdHJfdD4oaW5kZXgpOworICAgICAgICByZXR1cm4gKChzdGF0aWNfY2FzdDxpbnRwdHJfdD4o
b2Zmc2V0LnJhd09mZnNldCgpKSA8PCBGbGFnQml0cykgPj4gRmxhZ0JpdHMpID09IHN0YXRpY19j
YXN0PGludHB0cl90PihvZmZzZXQucmF3T2Zmc2V0KCkpOwogICAgIH0KIAogICAgIGludHB0cl90
IG1fYml0czsKQEAgLTM1MSw3ICszODgsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFN5bWJvbFRh
YmxlKiBjcmVhdGVOYW1lU2NvcGVUYWJsZShWTSYgdm0sIGNvbnN0IElkZW50aWZpZXImIGlkZW50
LCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQogICAgIHsKICAgICAgICAgU3ltYm9sVGFibGUqIHJlc3Vs
dCA9IGNyZWF0ZSh2bSk7Ci0gICAgICAgIHJlc3VsdC0+YWRkKGlkZW50LmltcGwoKSwgU3ltYm9s
VGFibGVFbnRyeSgtMSwgYXR0cmlidXRlcykpOworICAgICAgICByZXN1bHQtPmFkZChpZGVudC5p
bXBsKCksIFN5bWJvbFRhYmxlRW50cnkoVmFyT2Zmc2V0KFNjb3BlT2Zmc2V0KDApKSwgYXR0cmli
dXRlcykpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICAKQEAgLTQyMyw4ICs0
NjAsMjkgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gc2l6ZShsb2NrZXIpOwogICAgIH0KICAg
ICAKKyAgICBTY29wZU9mZnNldCBtYXhTY29wZU9mZnNldCgpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gbV9tYXhTY29wZU9mZnNldDsKKyAgICB9CisgICAgCisgICAgdW5zaWduZWQgc2Nv
cGVTaXplKCkgY29uc3QKKyAgICB7CisgICAgICAgIFNjb3BlT2Zmc2V0IG1heFNjb3BlT2Zmc2V0
ID0gdGhpcy0+bWF4U2NvcGVPZmZzZXQoKTsKKyAgICAgICAgCisgICAgICAgIC8vIERvIHNvbWUg
Y2FsY3VsYXRpb24gdGhhdCByZWxpZXMgb24gaW52YWxpZCBzY29wZSBvZmZzZXQgcGx1cyBvbmUg
YmVpbmcgemVyby4KKyAgICAgICAgdW5zaWduZWQgZmFzdFJlc3VsdCA9IG1heFNjb3BlT2Zmc2V0
Lm9mZnNldFVuY2hlY2tlZCgpICsgMTsKKyAgICAgICAgCisgICAgICAgIC8vIEFzc2VydCB0aGF0
IHRoaXMgd29ya3MuCisgICAgICAgIEFTU0VSVChmYXN0UmVzdWx0ID09ICghbWF4U2NvcGVPZmZz
ZXQgPyAwIDogbWF4U2NvcGVPZmZzZXQub2Zmc2V0KCkgKyAxKSk7CisgICAgICAgIAorICAgICAg
ICByZXR1cm4gZmFzdFJlc3VsdDsKKyAgICB9CisgICAgCiAgICAgTWFwOjpBZGRSZXN1bHQgYWRk
KGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImLCBTdHJpbmdJbXBsKiBrZXksIGNvbnN0IFN5bWJv
bFRhYmxlRW50cnkmIGVudHJ5KQogICAgIHsKKyAgICAgICAgaWYgKGVudHJ5LnZhck9mZnNldCgp
LmlzU2NvcGUoKQorICAgICAgICAgICAgJiYgKCFtX21heFNjb3BlT2Zmc2V0IHx8IG1fbWF4U2Nv
cGVPZmZzZXQgPCBlbnRyeS5zY29wZU9mZnNldCgpKSkKKyAgICAgICAgICAgIG1fbWF4U2NvcGVP
ZmZzZXQgPSBlbnRyeS5zY29wZU9mZnNldCgpOwogICAgICAgICByZXR1cm4gbV9tYXAuYWRkKGtl
eSwgZW50cnkpOwogICAgIH0KICAgICAKQEAgLTQ1Niw2ICs1MTQsNDUgQEAgcHVibGljOgogICAg
ICAgICByZXR1cm4gY29udGFpbnMobG9ja2VyLCBrZXkpOwogICAgIH0KICAgICAKKyAgICAvLyBU
aGUgcHJpbmNpcGxlIGJlaGluZCBTY29wZWRBcmd1bWVudHNUYWJsZSBtb2RpZmljYXRpb25zIGlz
IHRoYXQgd2Ugd2lsbCBjcmVhdGUgb25lIGFuZAorICAgIC8vIGxlYXZlIGl0IHVubG9ja2VkIC0g
dGhlcmVieSBhbGxvd2luZyBpbi1wbGFjZSBjaGFuZ2VzIC0gdW50aWwgc29tZW9uZSBhc2tzIGZv
ciBhIHBvaW50ZXIgdG8KKyAgICAvLyB0aGUgdGFibGUuIFRoZW4sIHdlIHdpbGwgbG9jayBpdC4g
VGhlbiBib3RoIG91ciBmdXR1cmUgY2hhbmdlcyBhbmQgdGhlaXIgZnV0dXJlIGNoYW5nZXMKKyAg
ICAvLyB3aWxsIGZpcnN0IGhhdmUgdG8gbWFrZSBhIGNvcHkuIFRoaXMgZGlzY2lwbGluZSBtZWFu
cyB0aGF0IHVzdWFsbHkgd2hlbiB3ZSBjcmVhdGUgYQorICAgIC8vIFNjb3BlZEFyZ3VtZW50cyBv
YmplY3QsIHdlIGRvbid0IGhhdmUgdG8gbWFrZSBhIGNvcHkgb2YgdGhlIFNjb3BlZEFyZ3VtZW50
c1RhYmxlIC0gaW5zdGVhZAorICAgIC8vIHdlIGp1c3QgdGFrZSBhIHJlZmVyZW5jZSB0byBvbmUg
dGhhdCB3ZSBhbHJlYWR5IGhhdmUuCisgICAgCisgICAgdWludDMyX3QgYXJndW1lbnRzTGVuZ3Ro
KCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmICghbV9hcmd1bWVudHMpCisgICAgICAgICAgICBy
ZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIG1fYXJndW1lbnRzLT5sZW5ndGgoKTsKKyAgICB9Cisg
ICAgCisgICAgdm9pZCBzZXRBcmd1bWVudHNMZW5ndGgoVk0mIHZtLCB1aW50MzJfdCBsZW5ndGgp
CisgICAgeworICAgICAgICBpZiAoVU5MSUtFTFkoIW1fYXJndW1lbnRzKSkKKyAgICAgICAgICAg
IG1fYXJndW1lbnRzLnNldCh2bSwgdGhpcywgU2NvcGVkQXJndW1lbnRzVGFibGU6OmNyZWF0ZSh2
bSkpOworICAgICAgICBtX2FyZ3VtZW50cy5zZXQodm0sIHRoaXMsIG1fYXJndW1lbnRzLT5zZXRM
ZW5ndGgodm0sIGxlbmd0aCkpOworICAgIH0KKyAgICAKKyAgICBTY29wZU9mZnNldCBhcmd1bWVu
dE9mZnNldCh1aW50MzJfdCBpKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUX1dJVEhfU0VD
VVJJVFlfSU1QTElDQVRJT04obV9hcmd1bWVudHMpOworICAgICAgICByZXR1cm4gbV9hcmd1bWVu
dHMtPmdldChpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzZXRBcmd1bWVudE9mZnNldChWTSYg
dm0sIHVpbnQzMl90IGksIFNjb3BlT2Zmc2V0IG9mZnNldCkKKyAgICB7CisgICAgICAgIEFTU0VS
VF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKG1fYXJndW1lbnRzKTsKKyAgICAgICAgbV9hcmd1
bWVudHMuc2V0KHZtLCB0aGlzLCBtX2FyZ3VtZW50cy0+c2V0KHZtLCBpLCBvZmZzZXQpKTsKKyAg
ICB9CisgICAgCisgICAgU2NvcGVkQXJndW1lbnRzVGFibGUqIGFyZ3VtZW50cygpIGNvbnN0Cisg
ICAgeworICAgICAgICBtX2FyZ3VtZW50cy0+bG9jaygpOworICAgICAgICByZXR1cm4gbV9hcmd1
bWVudHMuZ2V0KCk7CisgICAgfQorICAgIAogICAgIEdsb2JhbFZhcmlhYmxlSUQgdW5pcXVlSURG
b3JWYXJpYWJsZShjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiwgU3RyaW5nSW1wbCoga2V5LCBW
TSYgdm0pOwogICAgIEdsb2JhbFZhcmlhYmxlSUQgdW5pcXVlSURGb3JSZWdpc3Rlcihjb25zdCBD
b25jdXJyZW50SklUTG9ja2VyJiBsb2NrZXIsIGludCByZWdpc3RlckluZGV4LCBWTSYgdm0pOwog
ICAgIFJlZlB0cjxUeXBlU2V0PiBnbG9iYWxUeXBlU2V0Rm9yUmVnaXN0ZXIoY29uc3QgQ29uY3Vy
cmVudEpJVExvY2tlciYgbG9ja2VyLCBpbnQgcmVnaXN0ZXJJbmRleCwgVk0mIHZtKTsKQEAgLTQ2
NCwyOCArNTYxLDcgQEAgcHVibGljOgogICAgIGJvb2wgdXNlc05vblN0cmljdEV2YWwoKSB7IHJl
dHVybiBtX3VzZXNOb25TdHJpY3RFdmFsOyB9CiAgICAgdm9pZCBzZXRVc2VzTm9uU3RyaWN0RXZh
bChib29sIHVzZXNOb25TdHJpY3RFdmFsKSB7IG1fdXNlc05vblN0cmljdEV2YWwgPSB1c2VzTm9u
U3RyaWN0RXZhbDsgfQogCi0gICAgaW50IGNhcHR1cmVTdGFydCgpIGNvbnN0IHsgcmV0dXJuIG1f
Y2FwdHVyZVN0YXJ0OyB9Ci0gICAgdm9pZCBzZXRDYXB0dXJlU3RhcnQoaW50IGNhcHR1cmVTdGFy
dCkgeyBtX2NhcHR1cmVTdGFydCA9IGNhcHR1cmVTdGFydDsgfQotCi0gICAgaW50IGNhcHR1cmVF
bmQoKSBjb25zdCB7IHJldHVybiBtX2NhcHR1cmVFbmQ7IH0KLSAgICB2b2lkIHNldENhcHR1cmVF
bmQoaW50IGNhcHR1cmVFbmQpIHsgbV9jYXB0dXJlRW5kID0gY2FwdHVyZUVuZDsgfQotCi0gICAg
aW50IGNhcHR1cmVDb3VudCgpIGNvbnN0IHsgcmV0dXJuIC0obV9jYXB0dXJlRW5kIC0gbV9jYXB0
dXJlU3RhcnQpOyB9Ci0gICAgCi0gICAgYm9vbCBpc0NhcHR1cmVkKGludCBvcGVyYW5kKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIG9wZXJhbmQgPD0gY2FwdHVyZVN0YXJ0KCkgJiYgb3BlcmFuZCA+
IGNhcHR1cmVFbmQoKTsKLSAgICB9Ci0KLSAgICBpbnQgcGFyYW1ldGVyQ291bnQoKSB7IHJldHVy
biBtX3BhcmFtZXRlckNvdW50SW5jbHVkaW5nVGhpcyAtIDE7IH0KLSAgICBpbnQgcGFyYW1ldGVy
Q291bnRJbmNsdWRpbmdUaGlzKCkgeyByZXR1cm4gbV9wYXJhbWV0ZXJDb3VudEluY2x1ZGluZ1Ro
aXM7IH0KLSAgICB2b2lkIHNldFBhcmFtZXRlckNvdW50SW5jbHVkaW5nVGhpcyhpbnQgcGFyYW1l
dGVyQ291bnRJbmNsdWRpbmdUaGlzKSB7IG1fcGFyYW1ldGVyQ291bnRJbmNsdWRpbmdUaGlzID0g
cGFyYW1ldGVyQ291bnRJbmNsdWRpbmdUaGlzOyB9Ci0KLSAgICAvLyAwIGlmIHdlIGRvbid0IGNh
cHR1cmUgYW55IGFyZ3VtZW50czsgcGFyYW1ldGVyQ291bnQoKSBpbiBsZW5ndGggaWYgd2UgZG8u
Ci0gICAgY29uc3QgU2xvd0FyZ3VtZW50KiBzbG93QXJndW1lbnRzKCkgeyByZXR1cm4gbV9zbG93
QXJndW1lbnRzLmdldCgpOyB9Ci0gICAgdm9pZCBzZXRTbG93QXJndW1lbnRzKHN0ZDo6dW5pcXVl
X3B0cjxTbG93QXJndW1lbnRbXT4gc2xvd0FyZ3VtZW50cykgeyBtX3Nsb3dBcmd1bWVudHMgPSBX
VEY6Om1vdmUoc2xvd0FyZ3VtZW50cyk7IH0KLSAgICAKLSAgICBTeW1ib2xUYWJsZSogY2xvbmVD
YXB0dXJlZE5hbWVzKFZNJik7CisgICAgU3ltYm9sVGFibGUqIGNsb25lU2NvcGVQYXJ0KFZNJik7
CiAKICAgICB2b2lkIHByZXBhcmVGb3JUeXBlUHJvZmlsaW5nKGNvbnN0IENvbmN1cnJlbnRKSVRM
b2NrZXImKTsKIApAQCAtNTEzLDYgKzU4OSw4IEBAIHByaXZhdGU6CiAgICAgflN5bWJvbFRhYmxl
KCk7CiAKICAgICBNYXAgbV9tYXA7CisgICAgU2NvcGVPZmZzZXQgbV9tYXhTY29wZU9mZnNldDsK
KyAgICAKICAgICBzdHJ1Y3QgVHlwZVByb2ZpbGluZ1JhcmVEYXRhIHsKICAgICAgICAgVW5pcXVl
SURNYXAgbV91bmlxdWVJRE1hcDsKICAgICAgICAgUmVnaXN0ZXJUb1ZhcmlhYmxlTWFwIG1fcmVn
aXN0ZXJUb1ZhcmlhYmxlTWFwOwpAQCAtNTIwLDEzICs1OTgsOSBAQCBwcml2YXRlOgogICAgIH07
CiAgICAgc3RkOjp1bmlxdWVfcHRyPFR5cGVQcm9maWxpbmdSYXJlRGF0YT4gbV90eXBlUHJvZmls
aW5nUmFyZURhdGE7CiAKLSAgICBpbnQgbV9wYXJhbWV0ZXJDb3VudEluY2x1ZGluZ1RoaXM7CiAg
ICAgYm9vbCBtX3VzZXNOb25TdHJpY3RFdmFsOwotCi0gICAgaW50IG1fY2FwdHVyZVN0YXJ0Owot
ICAgIGludCBtX2NhcHR1cmVFbmQ7Ci0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8U2xvd0FyZ3VtZW50
W10+IG1fc2xvd0FyZ3VtZW50czsKKyAgICAKKyAgICBXcml0ZUJhcnJpZXI8U2NvcGVkQXJndW1l
bnRzVGFibGU+IG1fYXJndW1lbnRzOwogICAgIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxXYXRjaHBv
aW50Q2xlYW51cD4gbV93YXRjaHBvaW50Q2xlYW51cDsKIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVmFyT2Zmc2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9WYXJPZmZzZXQuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvVmFyT2Zmc2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDc2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJWYXJPZmZzZXQuaCIKKworbmFtZXNwYWNl
IEpTQyB7CisKK3ZvaWQgVmFyT2Zmc2V0OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7
CisgICAgc3dpdGNoIChtX2tpbmQpIHsKKyAgICBjYXNlIEludmFsaWRWYXJLaW5kOgorICAgICAg
ICBvdXQucHJpbnQoImludmFsaWQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU2NvcGVW
YXJLaW5kOgorICAgICAgICBvdXQucHJpbnQoc2NvcGVPZmZzZXQoKSk7CisgICAgICAgIHJldHVy
bjsKKyAgICBjYXNlIFN0YWNrVmFyS2luZDoKKyAgICAgICAgb3V0LnByaW50KHN0YWNrT2Zmc2V0
KCkpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBDYXB0dXJlZEFyZ3VtZW50S2luZDoKKyAg
ICAgICAgb3V0LnByaW50KGNhcHR1cmVkQXJndW1lbnRPZmZzZXQoKSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgSlNDCisKK25hbWVzcGFjZSBXVEYgeworCit1c2luZyBuYW1lc3BhY2UgSlNDOwor
Cit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgVmFyS2luZCB2YXJLaW5kKQor
eworICAgIHN3aXRjaCAodmFyS2luZCkgeworICAgIGNhc2UgSW52YWxpZFZhcktpbmQ6CisgICAg
ICAgIG91dC5wcmludCgiSW52YWxpZCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBTY29w
ZVZhcktpbmQ6CisgICAgICAgIG91dC5wcmludCgiU2NvcGUiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2UgU3RhY2tWYXJLaW5kOgorICAgICAgICBvdXQucHJpbnQoIlN0YWNrIik7CisgICAg
ICAgIHJldHVybjsKKyAgICBjYXNlIENhcHR1cmVkQXJndW1lbnRLaW5kOgorICAgICAgICBvdXQu
cHJpbnQoIkNhcHR1cmVkQXJndW1lbnQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVmFyT2Zmc2V0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVmFyT2Zmc2V0LmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WYXJPZmZzZXQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDIxNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaWZuZGVmIFZhck9mZnNldF9oCisjZGVmaW5lIFZhck9mZnNldF9o
CisKKyNpbmNsdWRlICJDYXB0dXJlZEFyZ3VtZW50T2Zmc2V0LmgiCisjaW5jbHVkZSAiU2NvcGVP
ZmZzZXQuaCIKKyNpbmNsdWRlICJWaXJ0dWFsUmVnaXN0ZXIuaCIKKworbmFtZXNwYWNlIEpTQyB7
CisKK2VudW0gVmFyS2luZCA6IHVpbnQ4X3QgeworICAgIEludmFsaWRWYXJLaW5kLAorICAgIFNj
b3BlVmFyS2luZCwKKyAgICBTdGFja1ZhcktpbmQsCisgICAgQ2FwdHVyZWRBcmd1bWVudEtpbmQK
K307CisKK2NsYXNzIFZhck9mZnNldCB7CitwdWJsaWM6CisgICAgVmFyT2Zmc2V0KCkKKyAgICAg
ICAgOiBtX2tpbmQoSW52YWxpZFZhcktpbmQpCisgICAgICAgICwgbV9vZmZzZXQoVUlOVF9NQVgp
CisgICAgeworICAgIH0KKyAgICAKKyAgICBleHBsaWNpdCBWYXJPZmZzZXQoVmlydHVhbFJlZ2lz
dGVyIHN0YWNrT2Zmc2V0KQorICAgIHsKKyAgICAgICAgaWYgKCFzdGFja09mZnNldC5pc1ZhbGlk
KCkpIHsKKyAgICAgICAgICAgIG1fa2luZCA9IEludmFsaWRWYXJLaW5kOworICAgICAgICAgICAg
bV9vZmZzZXQgPSBVSU5UX01BWDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1fa2lu
ZCA9IFN0YWNrVmFyS2luZDsKKyAgICAgICAgICAgIG1fb2Zmc2V0ID0gc3RhY2tPZmZzZXQub2Zm
c2V0KCk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgZXhwbGljaXQgVmFyT2Zmc2V0KFNj
b3BlT2Zmc2V0IHNjb3BlT2Zmc2V0KQorICAgIHsKKyAgICAgICAgaWYgKCFzY29wZU9mZnNldCkg
eworICAgICAgICAgICAgbV9raW5kID0gSW52YWxpZFZhcktpbmQ7CisgICAgICAgICAgICBtX29m
ZnNldCA9IFVJTlRfTUFYOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbV9raW5kID0g
U2NvcGVWYXJLaW5kOworICAgICAgICAgICAgbV9vZmZzZXQgPSBzY29wZU9mZnNldC5vZmZzZXQo
KTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBleHBsaWNpdCBWYXJPZmZzZXQoQ2FwdHVy
ZWRBcmd1bWVudE9mZnNldCBjYXB0dXJlZEFyZ3VtZW50T2Zmc2V0KQorICAgIHsKKyAgICAgICAg
aWYgKCFjYXB0dXJlZEFyZ3VtZW50T2Zmc2V0KSB7CisgICAgICAgICAgICBtX2tpbmQgPSBJbnZh
bGlkVmFyS2luZDsKKyAgICAgICAgICAgIG1fb2Zmc2V0ID0gVUlOVF9NQVg7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICBtX2tpbmQgPSBDYXB0dXJlZEFyZ3VtZW50S2luZDsKKyAgICAg
ICAgICAgIG1fb2Zmc2V0ID0gY2FwdHVyZWRBcmd1bWVudE9mZnNldC5vZmZzZXQoKTsKKyAgICAg
ICAgfQorICAgIH0KKyAgICAKKyAgICBzdGF0aWMgVmFyT2Zmc2V0IGFzc2VtYmxlKFZhcktpbmQg
a2luZCwgdW5zaWduZWQgb2Zmc2V0KQorICAgIHsKKyAgICAgICAgVmFyT2Zmc2V0IHJlc3VsdDsK
KyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IGtpbmQ7CisgICAgICAgIHJlc3VsdC5tX29mZnNldCA9
IG9mZnNldDsKKyAgICAgICAgcmVzdWx0LmNoZWNrU2FuaXR5KCk7CisgICAgICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gbV9raW5kICE9IEludmFsaWRWYXJLaW5kOworICAgIH0KKyAgICAKKyAgICBi
b29sIG9wZXJhdG9yISgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gIWlzVmFsaWQoKTsK
KyAgICB9CisgICAgCisgICAgVmFyS2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4gbV9raW5kOyB9
CisgICAgCisgICAgYm9vbCBpc1N0YWNrKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBt
X2tpbmQgPT0gU3RhY2tWYXJLaW5kOworICAgIH0KKyAgICAKKyAgICBib29sIGlzU2NvcGUoKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fa2luZCA9PSBTY29wZVZhcktpbmQ7CisgICAg
fQorICAgIAorICAgIGJvb2wgaXNDYXB0dXJlZEFyZ3VtZW50KCkgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiBtX2tpbmQgPT0gQ2FwdHVyZWRBcmd1bWVudEtpbmQ7CisgICAgfQorICAgIAor
ICAgIFZpcnR1YWxSZWdpc3RlciBzdGFja09mZnNldFVuY2hlY2tlZCgpIGNvbnN0CisgICAgewor
ICAgICAgICBpZiAoIWlzU3RhY2soKSkKKyAgICAgICAgICAgIHJldHVybiBWaXJ0dWFsUmVnaXN0
ZXIoKTsKKyAgICAgICAgcmV0dXJuIFZpcnR1YWxSZWdpc3RlcihtX29mZnNldCk7CisgICAgfQor
ICAgIAorICAgIFNjb3BlT2Zmc2V0IHNjb3BlT2Zmc2V0VW5jaGVja2VkKCkgY29uc3QKKyAgICB7
CisgICAgICAgIGlmICghaXNTY29wZSgpKQorICAgICAgICAgICAgcmV0dXJuIFNjb3BlT2Zmc2V0
KCk7CisgICAgICAgIHJldHVybiBTY29wZU9mZnNldChtX29mZnNldCk7CisgICAgfQorICAgIAor
ICAgIENhcHR1cmVkQXJndW1lbnRPZmZzZXQgY2FwdHVyZWRBcmd1bWVudE9mZnNldFVuY2hlY2tl
ZCgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoIWlzQ2FwdHVyZWRBcmd1bWVudCgpKQorICAg
ICAgICAgICAgcmV0dXJuIENhcHR1cmVkQXJndW1lbnRPZmZzZXQoKTsKKyAgICAgICAgcmV0dXJu
IENhcHR1cmVkQXJndW1lbnRPZmZzZXQobV9vZmZzZXQpOworICAgIH0KKyAgICAKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgc3RhY2tPZmZzZXQoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlz
U3RhY2soKSk7CisgICAgICAgIHJldHVybiBWaXJ0dWFsUmVnaXN0ZXIobV9vZmZzZXQpOworICAg
IH0KKyAgICAKKyAgICBTY29wZU9mZnNldCBzY29wZU9mZnNldCgpIGNvbnN0CisgICAgeworICAg
ICAgICBBU1NFUlQoaXNTY29wZSgpKTsKKyAgICAgICAgcmV0dXJuIFNjb3BlT2Zmc2V0KG1fb2Zm
c2V0KTsKKyAgICB9CisgICAgCisgICAgQ2FwdHVyZWRBcmd1bWVudE9mZnNldCBjYXB0dXJlZEFy
Z3VtZW50T2Zmc2V0KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc0NhcHR1cmVkQXJn
dW1lbnQoKSk7CisgICAgICAgIHJldHVybiBDYXB0dXJlZEFyZ3VtZW50T2Zmc2V0KG1fb2Zmc2V0
KTsKKyAgICB9CisgICAgCisgICAgdW5zaWduZWQgcmF3T2Zmc2V0KCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChpc1ZhbGlkKCkpOworICAgICAgICByZXR1cm4gbV9vZmZzZXQ7CisgICAg
fQorICAgIAorICAgIHZvaWQgY2hlY2tTYW5pdHkoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYg
KEFTU0VSVF9ESVNBQkxFRCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAg
IHN3aXRjaCAobV9raW5kKSB7CisgICAgICAgIGNhc2UgSW52YWxpZFZhcktpbmQ6CisgICAgICAg
ICAgICBBU1NFUlQobV9vZmZzZXQgPT0gVUlOVF9NQVgpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICBjYXNlIFNjb3BlVmFyS2luZDoKKyAgICAgICAgICAgIEFTU0VSVChzY29wZU9mZnNl
dCgpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBTdGFja1ZhcktpbmQ6Cisg
ICAgICAgICAgICBBU1NFUlQoc3RhY2tPZmZzZXQoKSk7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIGNhc2UgQ2FwdHVyZWRBcmd1bWVudEtpbmQ6CisgICAgICAgICAgICBBU1NFUlQoY2Fw
dHVyZWRBcmd1bWVudE9mZnNldCgpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorICAgIAorICAg
IGJvb2wgb3BlcmF0b3I9PShjb25zdCBWYXJPZmZzZXQmIG90aGVyKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG1fa2luZCA9PSBvdGhlci5tX2tpbmQKKyAgICAgICAgICAgICYmIG1fb2Zm
c2V0ID09IG90aGVyLm1fb2Zmc2V0OworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yIT0o
Y29uc3QgVmFyT2Zmc2V0JiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhKCp0
aGlzID09IG90aGVyKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikg
Y29uc3Q7CisgICAgCitwcml2YXRlOgorICAgIFZhcktpbmQgbV9raW5kOworICAgIHVuc2lnbmVk
IG1fb2Zmc2V0OworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKK25hbWVzcGFjZSBXVEYgewor
Cit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OlZhcktpbmQpOworCit9IC8v
IG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIFZhck9mZnNldF9oCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZhcmlhYmxlTG9jYXRpb24uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WYXJpYWJsZUxvY2F0aW9uLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WYXJpYWJsZUxvY2F0aW9uLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFZhcmlhYmxlTG9jYXRpb25faAorI2RlZmlu
ZSBWYXJpYWJsZUxvY2F0aW9uX2gKKworI2luY2x1ZGUgIlZpcnR1YWxSZWdpc3Rlci5oIgorCitu
YW1lc3BhY2UgSlNDIHsKKworCisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gVmFy
aWFibGVMb2NhdGlvbl9oCisK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>247241</attachid>
            <date>2015-02-24 10:22:46 -0800</date>
            <delta_ts>2015-02-24 12:39:20 -0800</delta_ts>
            <desc>more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>116552</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIv
Qnl0ZWNvZGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAxODA1NjUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTE2LDcgKzExNiw3IEBAIFBhcnNlckVycm9yIEJ5dGVjb2RlR2VuZXJhdG9yOjpnZW5l
cmF0ZSgKICAgICBtX2NvZGVCbG9jay0+c2hyaW5rVG9GaXQoKTsKIAogICAgIGlmIChtX2NvZGVC
bG9jay0+c3ltYm9sVGFibGUoKSAmJiAhbV9jb2RlQmxvY2stPnZtKCktPnR5cGVQcm9maWxlcigp
KQotICAgICAgICBtX2NvZGVCbG9jay0+c2V0U3ltYm9sVGFibGUobV9jb2RlQmxvY2stPnN5bWJv
bFRhYmxlKCktPmNsb25lQ2FwdHVyZWROYW1lcygqbV9jb2RlQmxvY2stPnZtKCkpKTsKKyAgICAg
ICAgbV9jb2RlQmxvY2stPnNldFN5bWJvbFRhYmxlKG1fY29kZUJsb2NrLT5zeW1ib2xUYWJsZSgp
LT5jbG9uZUlnbm9yaW5nU3RhY2soKm1fY29kZUJsb2NrLT52bSgpKSk7CiAKICAgICBpZiAobV9l
eHByZXNzaW9uVG9vRGVlcCkKICAgICAgICAgcmV0dXJuIFBhcnNlckVycm9yKFBhcnNlckVycm9y
OjpPdXRPZk1lbW9yeSk7CkBAIC0xMjQsMTcgKzEyNCwyOCBAQCBQYXJzZXJFcnJvciBCeXRlY29k
ZUdlbmVyYXRvcjo6Z2VuZXJhdGUoCiB9CiAKIGJvb2wgQnl0ZWNvZGVHZW5lcmF0b3I6OmFkZFZh
cigKLSAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgQ29uc3RhbnRNb2RlIGNvbnN0YW50TW9k
ZSwgV2F0Y2hNb2RlIHdhdGNoTW9kZSwgUmVnaXN0ZXJJRComIHIwKQorICAgIGNvbnN0IElkZW50
aWZpZXImIGlkZW50LCBDb25zdGFudE1vZGUgY29uc3RhbnRNb2RlLCBWYXJLaW5kIHZhcktpbmQs
IFdhdGNoTW9kZSB3YXRjaE1vZGUsCisgICAgUmVnaXN0ZXJJRComIHIwKQogewogICAgIEFTU0VS
VChzdGF0aWNfY2FzdDxzaXplX3Q+KG1fY29kZUJsb2NrLT5tX251bVZhcnMpID09IG1fY2FsbGVl
UmVnaXN0ZXJzLnNpemUoKSk7CiAgICAgCiAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIo
c3ltYm9sVGFibGUoKS5tX2xvY2spOwotICAgIGludCBpbmRleCA9IHZpcnR1YWxSZWdpc3RlckZv
ckxvY2FsKG1fY2FsbGVlUmVnaXN0ZXJzLnNpemUoKSkub2Zmc2V0KCk7Ci0gICAgU3ltYm9sVGFi
bGVFbnRyeSBuZXdFbnRyeShpbmRleCwgY29uc3RhbnRNb2RlID09IElzQ29uc3RhbnQgPyBSZWFk
T25seSA6IDApOworICAgIFZhck9mZnNldCB2YXJPZmZzZXQ7CisgICAgaWYgKHZhcktpbmQgPT0g
SGVhcFZhcktpbmQpCisgICAgICAgIHZhck9mZnNldCA9IFZhck9mZnNldChIZWFwT2Zmc2V0KG1f
bnVtQ2FwdHVyZWRWYXJpYWJsZXMrKykpOworICAgIGVsc2UgeworICAgICAgICBBU1NFUlQodmFy
S2luZCA9PSBTdGFja1ZhcktpbmQpOworICAgICAgICB2YXJPZmZzZXQgPSBWYXJPZmZzZXQodmly
dHVhbFJlZ2lzdGVyRm9yTG9jYWwobV9jYWxsZWVSZWdpc3RlcnMuc2l6ZSgpKSk7CisgICAgfQor
ICAgIFN5bWJvbFRhYmxlRW50cnkgbmV3RW50cnkodmFyT2Zmc2V0LCBjb25zdGFudE1vZGUgPT0g
SXNDb25zdGFudCA/IFJlYWRPbmx5IDogMCk7CiAgICAgU3ltYm9sVGFibGU6Ok1hcDo6QWRkUmVz
dWx0IHJlc3VsdCA9IHN5bWJvbFRhYmxlKCkuYWRkKGxvY2tlciwgaWRlbnQuaW1wbCgpLCBuZXdF
bnRyeSk7CiAKICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KSB7Ci0gICAgICAgIHIwID0gJnJl
Z2lzdGVyRm9yKHJlc3VsdC5pdGVyYXRvci0+dmFsdWUuZ2V0SW5kZXgoKSk7CisgICAgICAgIFJF
TEVBU0VfQVNTRVJUKHZhcktpbmQgPT0gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS52YXJPZmZzZXQo
KS5raW5kKCkpOworICAgICAgICBpZiAodmFyS2luZCA9PSBIZWFwVmFyS2luZCkKKyAgICAgICAg
ICAgIHIwID0gbnVsbHB0cjsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcjAgPSAmcmVnaXN0
ZXJGb3IocmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS52YXJPZmZzZXQoKSk7CiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICB9CiAgICAgCkBAIC0xNDQsNyArMTU1LDEwIEBAIGJvb2wgQnl0ZWNvZGVH
ZW5lcmF0b3I6OmFkZFZhcigKICAgICAgICAgbV93YXRjaGFibGVWYXJpYWJsZXMuYXBwZW5kKGlk
ZW50KTsKICAgICB9CiAgICAgCi0gICAgcjAgPSBhZGRWYXIoKTsKKyAgICBpZiAodmFyS2luZCA9
PSBIZWFwVmFyS2luZCkKKyAgICAgICAgcjAgPSBudWxscHRyOworICAgIGVsc2UKKyAgICAgICAg
cjAgPSBhZGRWYXIoKTsKICAgICAKICAgICBBU1NFUlQod2F0Y2hNb2RlID09IE5vdFdhdGNoYWJs
ZSB8fCBzdGF0aWNfY2FzdDxzaXplX3Q+KG1fY29kZUJsb2NrLT5tX251bVZhcnMpID09IG1fd2F0
Y2hhYmxlVmFyaWFibGVzLnNpemUoKSk7CiAgICAgCkBAIC0yMzEsNyArMjQ1LDYgQEAgQnl0ZWNv
ZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFZNJgogICAgIH0KICAgICBSZWdpc3RlcklE
KiBsb2NhbEFyZ3VtZW50c1JlZ2lzdGVyID0gbnVsbHB0cjsKICAgICBSZWdpc3RlcklEKiBzY3Jh
dGNoID0gYWRkVmFyKCk7Ci0gICAgbV9zeW1ib2xUYWJsZS0+c2V0Q2FwdHVyZVN0YXJ0KHZpcnR1
YWxSZWdpc3RlckZvckxvY2FsKG1fY29kZUJsb2NrLT5tX251bVZhcnMpLm9mZnNldCgpKTsKIAog
ICAgIGlmIChmdW5jdGlvbk5vZGUtPnVzZXNBcmd1bWVudHMoKSB8fCBjb2RlQmxvY2stPnVzZXNF
dmFsKCkpIHsgLy8gTWF5IHJlaWZ5IGFyZ3VtZW50cyBvYmplY3QuCiAgICAgICAgIFJlZ2lzdGVy
SUQqIHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3RlciA9IGFkZFZhcigpOyAvLyBBbm9ueW1vdXMs
IHNvIGl0IGNhbid0IGJlIG1vZGlmaWVkIGJ5IHVzZXIgY29kZS4KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgJ
KHJldmlzaW9uIDE4MDU2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIv
Qnl0ZWNvZGVHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNjEzLDE1ICs2MTMsMTUgQEAg
bmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgLy8gQWRkcyBhIHZhciBzbG90IGFuZCBtYXBzIGl0
IHRvIHRoZSBuYW1lIGlkZW50IGluIHN5bWJvbFRhYmxlKCkuCiAgICAgICAgIGVudW0gV2F0Y2hN
b2RlIHsgSXNXYXRjaGFibGUsIE5vdFdhdGNoYWJsZSB9OwotICAgICAgICBSZWdpc3RlcklEKiBh
ZGRWYXIoY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIENvbnN0YW50TW9kZSBjb25zdGFudE1vZGUs
IFdhdGNoTW9kZSB3YXRjaE1vZGUpCisgICAgICAgIFJlZ2lzdGVySUQqIGFkZFZhcihjb25zdCBJ
ZGVudGlmaWVyJiBpZGVudCwgQ29uc3RhbnRNb2RlIGNvbnN0YW50TW9kZSwgVmFyS2luZCB2YXJL
aW5kLCBXYXRjaE1vZGUgd2F0Y2hNb2RlKQogICAgICAgICB7CiAgICAgICAgICAgICBSZWdpc3Rl
cklEKiBsb2NhbDsKLSAgICAgICAgICAgIGFkZFZhcihpZGVudCwgY29uc3RhbnRNb2RlLCB3YXRj
aE1vZGUsIGxvY2FsKTsKKyAgICAgICAgICAgIGFkZFZhcihpZGVudCwgY29uc3RhbnRNb2RlLCB2
YXJLaW5kLCB3YXRjaE1vZGUsIGxvY2FsKTsKICAgICAgICAgICAgIHJldHVybiBsb2NhbDsKICAg
ICAgICAgfQogCiAgICAgICAgIC8vIERpdHRvLiBSZXR1cm5zIHRydWUgaWYgYSBuZXcgUmVnaXN0
ZXJJRCB3YXMgYWRkZWQsIGZhbHNlIGlmIGEgcHJlLWV4aXN0aW5nIFJlZ2lzdGVySUQgd2FzIHJl
LXVzZWQuCi0gICAgICAgIGJvb2wgYWRkVmFyKGNvbnN0IElkZW50aWZpZXImLCBDb25zdGFudE1v
ZGUsIFdhdGNoTW9kZSwgUmVnaXN0ZXJJRComKTsKKyAgICAgICAgYm9vbCBhZGRWYXIoY29uc3Qg
SWRlbnRpZmllciYsIENvbnN0YW50TW9kZSwgVmFyS2luZCwgV2F0Y2hNb2RlLCBSZWdpc3RlcklE
KiYpOwogICAgICAgICAKICAgICAgICAgLy8gQWRkcyBhbiBhbm9ueW1vdXMgdmFyIHNsb3QuIFRv
IGdpdmUgdGhpcyBzbG90IGEgbmFtZSwgYWRkIGl0IHRvIHN5bWJvbFRhYmxlKCkuCiAgICAgICAg
IFJlZ2lzdGVySUQqIGFkZFZhcigpCkBAIC03NzQsNiArNzc0LDcgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIFZlY3RvcjxJZGVudGlmaWVyLCAxNj4gbV93YXRjaGFibGVWYXJpYWJsZXM7CiAg
ICAgICAgIFNlZ21lbnRlZFZlY3RvcjxSZWdpc3RlcklELCAzMj4gbV9jb25zdGFudFBvb2xSZWdp
c3RlcnM7CiAgICAgICAgIFNlZ21lbnRlZFZlY3RvcjxSZWdpc3RlcklELCAzMj4gbV9jYWxsZWVS
ZWdpc3RlcnM7CisgICAgICAgIHVuc2lnbmVkIG1fbnVtQ2FwdHVyZWRWYXJpYWJsZXM7CiAgICAg
ICAgIFNlZ21lbnRlZFZlY3RvcjxSZWdpc3RlcklELCAzMj4gbV9wYXJhbWV0ZXJzOwogICAgICAg
ICBTZWdtZW50ZWRWZWN0b3I8TGFiZWwsIDMyPiBtX2xhYmVsczsKICAgICAgICAgTGFiZWxTY29w
ZVN0b3JlIG1fbGFiZWxTY29wZXM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9D
b3B5VG9rZW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3B5
VG9rZW4uaAkocmV2aXNpb24gMTgwNTY1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
Q29weVRva2VuLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMywgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMyLDcgKzMyLDcgQEAgZW51bSBDb3B5VG9rZW4g
ewogICAgIEJ1dHRlcmZseUNvcHlUb2tlbiwKICAgICBUeXBlZEFycmF5VmVjdG9yQ29weVRva2Vu
LAogICAgIE1hcEJhY2tpbmdTdG9yZUNvcHlUb2tlbiwKLSAgICBBcmd1bWVudHNTbG93QXJndW1l
bnREYXRhQ29weVRva2VuCisgICAgRGlyZWN0QXJndW1lbnRzT3ZlcnJpZGVzQ29weVRva2VuCiB9
OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0FyZ3VtZW50c01vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Bcmd1bWVudHNNb2RlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Bcmd1bWVudHNNb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwz
OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIEFyZ3VtZW50c01vZGVfaAorI2RlZmluZSBBcmd1bWVudHNNb2RlX2gKKworbmFtZXNwYWNl
IEpTQyB7CisKK2VudW0gQXJndW1lbnRzTW9kZSB7CisgICAgQ2xvbmVkQXJndW1lbnRzQ3JlYXRp
b25Nb2RlLAorICAgIEZha2VBcmd1bWVudFZhbHVlc0NyZWF0aW9uTW9kZQorfTsKKworfSAvLyBu
YW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBBcmd1bWVudHNNb2RlX2gKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FwdHVyZWRBcmd1bWVudHNPZmZzZXQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhcHR1cmVkQXJndW1lbnRz
T2Zmc2V0LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0NhcHR1cmVkQXJndW1lbnRzT2Zmc2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQy
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDYXB0dXJlZEFyZ3VtZW50c09mZnNldC5oIgorCitu
YW1lc3BhY2UgSlNDIHsKKwordm9pZCBDYXB0dXJlZEFyZ3VtZW50c09mZnNldDo6ZHVtcChQcmlu
dFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIGlmICghKnRoaXMpIHsKKyAgICAgICAgb3V0LnBy
aW50KCJjYXB0dXJlZEFyZ3VtZW50SW52YWxpZCIpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgb3V0LnByaW50KCJjYXB0dXJlZEFyZ3VtZW50Iiwgb2Zmc2V0KCkpOworfQorCit9IC8v
IG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2Fw
dHVyZWRBcmd1bWVudHNPZmZzZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9DYXB0dXJlZEFyZ3VtZW50c09mZnNldC5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FwdHVyZWRBcmd1bWVudHNPZmZzZXQuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQ2FwdHVyZWRBcmd1bWVudHNPZmZzZXRfaAorI2Rl
ZmluZSBDYXB0dXJlZEFyZ3VtZW50c09mZnNldF9oCisKKyNpbmNsdWRlICJHZW5lcmljT2Zmc2V0
LmgiCisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBKU0MgeworCisv
LyBUaGlzIGlzIGFuIG9mZnNldCBpbnRvIHRoZSBzcGVjaWFsIGFyZ3VtZW50cyBvYmplY3QsIHdo
aWNoIGNhcHR1cmVzIHRoZSBhcmd1bWVudHMgdG8gYQorLy8gZnVuY3Rpb24uIEl0IG9ubHkgY29t
ZXMgaW50byBwbGF5IGl0IHRoZSBhcmd1bWVudHMgYXJlbid0IGFsc28gbGlmdGVkIGludG8gdGhl
IGFjdGl2YXRpb24uCisvLyBJZiB0aGV5IHdlcmUgdGhlbiBhY2Nlc3NlcyB0byB0aGUgYXJndW1l
bnRzIHdvdWxkIHJlc29sdmUgdG8gYSBTY29wZU9mZnNldCBhbmQgbm90IGEKKy8vIENhcHR1cmVk
QXJndW1lbnRzT2Zmc2V0LgorY2xhc3MgQ2FwdHVyZWRBcmd1bWVudHNPZmZzZXQgOiBwdWJsaWMg
R2VuZXJpY09mZnNldDxDYXB0dXJlZEFyZ3VtZW50c09mZnNldD4geworcHVibGljOgorICAgIENh
cHR1cmVkQXJndW1lbnRzT2Zmc2V0KCkgeyB9CisgICAgCisgICAgZXhwbGljaXQgQ2FwdHVyZWRB
cmd1bWVudHNPZmZzZXQodW5zaWduZWQgb2Zmc2V0KQorICAgICAgICA6IEdlbmVyaWNPZmZzZXQo
b2Zmc2V0KQorICAgIHsKKyAgICB9CisgICAgCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikg
Y29uc3Q7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIENhcHR1cmVkQXJn
dW1lbnRzT2Zmc2V0X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGly
ZWN0QXJndW1lbnRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9EaXJlY3RBcmd1bWVudHMuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDE0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRGlyZWN0QXJndW1lbnRzLmgiCisKKyNp
bmNsdWRlICJHZW5lcmljQXJndW1lbnRzSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTQXJndW1lbnRz
SXRlcmF0b3IuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0Mgewor
CitTVEFUSUNfQVNTRVJUX0lTX1RSSVZJQUxMWV9ERVNUUlVDVElCTEUoRGlyZWN0QXJndW1lbnRz
KTsKKworY29uc3QgQ2xhc3NJbmZvIERpcmVjdEFyZ3VtZW50czo6c19pbmZvID0geyAiQXJndW1l
bnRzIiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShEaXJlY3RBcmd1bWVu
dHMpIH07CisKK0RpcmVjdEFyZ3VtZW50czo6RGlyZWN0QXJndW1lbnRzKFZNJiB2bSwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIHVuc2lnbmVkIGxlbmd0aCkKKyAgICA6IEdlbmVyaWNBcmd1bWVudHMo
dm0sIHN0cnVjdHVyZSkKKyAgICAsIG1fbGVuZ3RoKGxlbmd0aCkKK3sKK30KKworRGlyZWN0QXJn
dW1lbnRzKiBEaXJlY3RBcmd1bWVudHM6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQoVk0mIHZtLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIERpcmVjdEFyZ3VtZW50
cyogcmVzdWx0ID0KKyAgICAgICAgbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8RGlyZWN0QXJn
dW1lbnRzPih2bS5oZWFwLCBhbGxvY2F0aW9uU2l6ZShsZW5ndGgpKSkKKyAgICAgICAgKHZtLCBz
dHJ1Y3R1cmUpOworICAgIHJlc3VsdC0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK0RpcmVjdEFyZ3VtZW50cyogRGlyZWN0QXJndW1lbnRzOjpjcmVhdGUoVk0m
IHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIERpcmVj
dEFyZ3VtZW50cyogcmVzdWx0ID0gY3JlYXRlVW5pbml0aWFsaXplZCh2bSwgc3RydWN0dXJlLCBs
ZW5ndGgpOworICAgIAorICAgIGZvciAodW5zaWduZWQgaSA9IGxlbmd0aDsgaS0tOykKKyAgICAg
ICAgcmVzdWx0LT5zdG9yYWdlKClbaV0uY2xlYXIoKTsKKyAgICAKKyAgICByZXR1cm4gcmVzdWx0
OworfQorCitEaXJlY3RBcmd1bWVudHMqIERpcmVjdEFyZ3VtZW50czo6Y3JlYXRlQnlDb3B5aW5n
KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICB1
bnNpZ25lZCBsZW5ndGggPSBleGVjLT5hcmd1bWVudENvdW50KCk7CisgICAgRGlyZWN0QXJndW1l
bnRzKiByZXN1bHQgPSBjcmVhdGVVbmluaXRpYWxpemVkKHZtLCBzdHJ1Y3R1cmUsIGxlbmd0aCk7
CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBpID0gbGVuZ3RoOyBpLS07KQorICAgICAgICByZXN1
bHQtPnN0b3JhZ2UoKVtpXS5zZXQodm0sIHJlc3VsdCwgZXhlYy0+dW5jaGVja2VkQXJndW1lbnQo
aSkpOworICAgIAorICAgIHJlc3VsdC0+Y2FsbGVlKCkuc2V0KHZtLCByZXN1bHQsIGpzQ2FzdDxK
U0Z1bmN0aW9uKj4oZXhlYy0+Y2FsbGVlKCkpKTsKKyAgICAKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCit2b2lkIERpcmVjdEFyZ3VtZW50czo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIHRoaXNDZWxs
LCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBEaXJlY3RBcmd1bWVudHMqIHRoaXNPYmpl
Y3QgPSBzdGF0aWNfY2FzdDxEaXJlY3RBcmd1bWVudHMqPih0aGlzQ2VsbCk7CisgICAgQVNTRVJU
X0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOworICAgIEJhc2U6OnZpc2l0
Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CisgICAgCisgICAgdmlzaXRvci5hcHBlbmRW
YWx1ZXModGhpc09iamVjdC0+c3RvcmFnZSgpLCB0aGlzT2JqZWN0LT5tX2xlbmd0aCk7CisgICAg
dmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fY2FsbGVlKTsKKyAgICAKKyAgICBpZiAodGhp
c09iamVjdC0+bV9vdmVycmlkZXMpIHsKKyAgICAgICAgdmlzaXRvci5jb3B5TGF0ZXIoCisgICAg
ICAgICAgICB0aGlzT2JqZWN0LCBEaXJlY3RBcmd1bWVudHNPdmVycmlkZXNDb3B5VG9rZW4sCisg
ICAgICAgICAgICB0aGlzT2JqZWN0LT5tX292ZXJyaWRlcy5nZXQoKSwgbV9sZW5ndGgpOworICAg
IH0KK30KKwordm9pZCBEaXJlY3RBcmd1bWVudHM6OmNvcHlCYWNraW5nU3RvcmUoSlNDZWxsKiB0
aGlzQ2VsbCwgQ29weVZpc2l0b3ImIHZpc2l0b3IsIENvcHlUb2tlbiB0b2tlbikKK3sKKyAgICBE
aXJlY3RBcmd1bWVudHMqIHRoaXNPYmplY3QgPSBzdGF0aWNfY2FzdDxEaXJlY3RBcmd1bWVudHMq
Pih0aGlzQ2VsbCk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBp
bmZvKCkpOworICAgIAorICAgIFJFTEVBU0VfQVNTRVJUKHRva2VuID09IERpcmVjdEFyZ3VtZW50
c092ZXJyaWRlc0NvcHlUb2tlbik7CisgICAgCisgICAgYm9vbCogb2xkT3ZlcnJpZGVzID0gdGhp
c09iamVjdC0+bV9vdmVycmlkZXMuZ2V0KCk7CisgICAgaWYgKCFvbGRPdmVycmlkZXMpCisgICAg
ICAgIHJldHVybjsKKyAgICAKKyAgICBpZiAodmlzaXRvci5jaGVja0lmU2hvdWxkQ29weShvdmVy
cmlkZXMpKSB7CisgICAgICAgIGJvb2wqIG5ld092ZXJyaWRlcyA9IHN0YXRpY19jYXN0PGJvb2wq
Pih2aXNpdG9yLmFsbG9jYXRlTmV3U3BhY2UobV9sZW5ndGgpKTsKKyAgICAgICAgbWVtY3B5KG5l
d092ZXJyaWRlcywgb2xkT3ZlcnJpZGVzLCBtX2xlbmd0aCk7CisgICAgICAgIHRoaXNPYmplY3Qt
Pm1fb3ZlcnJpZGVzLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIobmV3T3ZlcnJpZGVzKTsKKyAgICAg
ICAgdmlzaXRvci5kaWRDb3B5KG9sZE92ZXJyaWRlcywgbV9sZW5ndGgpOworICAgIH0KK30KKwor
U3RydWN0dXJlKiBEaXJlY3RBcmd1bWVudHM6OmNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQoreworICAgIHJldHVy
biBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZv
KERpcmVjdEFyZ3VtZW50c1R5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKK30KKwordm9p
ZCBEaXJlY3RBcmd1bWVudHM6OnNsb3dEb3duQW5kV2FzdGVNZW1vcnkoVk0mIHZtKQoreworICAg
IFJFTEVBU0VfQVNTRVJUKCFtX292ZXJyaWRlcyk7CisgICAgCisgICAgcHV0RGlyZWN0KHZtLCB2
bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKG1fbGVuZ3RoKSwgRG9udEVudW0pOwor
ICAgIAorICAgIGlmIChpc1N0cmljdE1vZGUoKSkgeworICAgICAgICBwdXREaXJlY3ROb25JbmRl
eEFjY2Vzc29yKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5jYWxsZWUsIGdsb2JhbE9iamVjdCgpLT50
aHJvd1R5cGVFcnJvckdldHRlclNldHRlcih2bSksIERvbnRFbnVtIHwgRG9udERlbGV0ZSB8IEFj
Y2Vzc29yKTsKKyAgICAgICAgcHV0RGlyZWN0Tm9uSW5kZXhBY2Nlc3Nvcih2bSwgdm0ucHJvcGVy
dHlOYW1lcy0+Y2FsbGVyLCBnbG9iYWxPYmplY3QoKS0+dGhyb3dUeXBlRXJyb3JHZXR0ZXJTZXR0
ZXIodm0pLCBEb250RW51bSB8IERvbnREZWxldGUgfCBBY2Nlc3Nvcik7CisgICAgfSBlbHNlCisg
ICAgICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+Y2FsbGVlLCBtX2NhbGxlZS5n
ZXQoKSwgRG9udEVudW0pOworICAgIAorICAgIHZvaWQqIGJhY2tpbmdTdG9yZTsKKyAgICBSRUxF
QVNFX0FTU0VSVCh2bS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZSh0aGlzLCBtX2xlbmd0aCksICZi
YWNraW5nU3RvcmUpOworICAgIG1fb3ZlcnJpZGVzLnNldCh2bSwgdGhpcywgc3RhdGljX2Nhc3Q8
Ym9vbCo+KGJhY2tpbmdTdG9yZSkpOworICAgIGZvciAodW5zaWduZWQgaSA9IG1fbGVuZ3RoOyBp
LS07KQorICAgICAgICBtX292ZXJyaWRlcy5nZXQoKVtpXSA9IGZhbHNlOworfQorCit2b2lkIERp
cmVjdEFyZ3VtZW50czo6c2xvd0Rvd25BbmRXYXN0ZU1lbW9yeUlmTmVjZXNzYXJ5KFZNJiB2bSkK
K3sKKyAgICBpZiAoIW1fb3ZlcnJpZGVzKQorICAgICAgICBzbG93RG93bkFuZFdhc3RlTWVtb3J5
KHZtKTsKK30KKwordm9pZCBEaXJlY3RBcmd1bWVudHM6Om92ZXJyaWRlQXJndW1lbnQoVk0mIHZt
LCB1bnNpZ25lZCBpKQoreworICAgIHNsb3dEb3duQW5kV2FzdGVNZW1vcnlJZk5lY2Vzc2FyeSh2
bSk7CisgICAgbV9vdmVycmlkZXMuZ2V0KClbaW5kZXhdID0gdHJ1ZTsKK30KKworfSAvLyBuYW1l
c3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFy
Z3VtZW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Rp
cmVjdEFyZ3VtZW50cy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRGlyZWN0QXJndW1lbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNTQgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBE
aXJlY3RBcmd1bWVudHNfaAorI2RlZmluZSBEaXJlY3RBcmd1bWVudHNfaAorCisjaW5jbHVkZSAi
R2VuZXJpY0FyZ3VtZW50cy5oIgorCituYW1lc3BhY2UgSlNDIHsKKworLy8gVGhpcyBpcyBhbiBB
cmd1bWVudHMtY2xhc3Mgb2JqZWN0IHRoYXQgd2UgY3JlYXRlIHdoZW4geW91IHNheSAiYXJndW1l
bnRzIiBpbnNpZGUgYSBmdW5jdGlvbiwKKy8vIGFuZCBub25lIG9mIHRoZSBhcmd1bWVudHMgYXJl
IGNhcHR1cmVkIGluIHRoZSBmdW5jdGlvbidzIGFjdGl2YXRpb24uIFRoZSBmdW5jdGlvbiB3aWxs
IGNvcHkgYWxsCisvLyBvZiBpdHMgYXJndW1lbnRzIGludG8gdGhpcyBvYmplY3QsIGFuZCBhbGwg
c3Vic2VxdWVudCBhY2Nlc3NlcyB0byB0aGUgYXJndW1lbnRzIHdpbGwgZ28gdGhyb3VnaAorLy8g
dGhpcyBvYmplY3QgdGhlcmVhZnRlci4gU3BlY2lhbCBzdXBwb3J0IGlzIGluIHBsYWNlIGZvciBt
aXNjaGV2aW91cyBldmVudHMgbGlrZSB0aGUgYXJndW1lbnRzCisvLyBiZWluZyBkZWxldGVkIChz
b21ldGhpbmcgbGlrZSAiZGVsZXRlIGFyZ3VtZW50c1swXSIpIG9yIHJlY29uZmlndXJlZCAoYnJv
YWRseSwgd2Ugc2F5IGRlbGV0aW9ucworLy8gYW5kIHJlY29uZmlndXJhdGlvbnMgbWVhbiB0aGF0
IHRoZSByZXNwZWN0aXZlIGFyZ3VtZW50IHdhcyAib3ZlcnJpZGRlbiIpLgorLy8KKy8vIFRvIHNw
ZWVkIGFsbG9jYXRpb24sIHRoaXMgb2JqZWN0IHdpbGwgaG9sZCBhbGwgb2YgdGhlIGFyZ3VtZW50
cyBpbi1wbGFjZS4gVGhlIGFyZ3VtZW50cyBhcyB3ZWxsCisvLyBhcyBhIHRhYmxlIG9mIGZsYWdz
IHNheWluZyB3aGljaCBhcmd1bWVudHMgd2VyZSBvdmVycmlkZGVuLgorY2xhc3MgRGlyZWN0QXJn
dW1lbnRzIDogcHVibGljIEdlbmVyaWNBcmd1bWVudHM8RGlyZWN0QXJndW1lbnRzPiB7Citwcml2
YXRlOgorICAgIERpcmVjdEFyZ3VtZW50cyhWTSYsIFN0cnVjdHVyZSosIHVuc2lnbmVkIGxlbmd0
aCk7CisgICAgCitwdWJsaWM6CisgICAgLy8gQ3JlYXRlcyBhbiBhcmd1bWVudHMgb2JqZWN0IGJ1
dCBsZWF2ZXMgaXQgdW5pbml0aWFsaXplZC4KKyAgICBzdGF0aWMgRGlyZWN0QXJndW1lbnRzKiBj
cmVhdGVVbmluaXRpYWxpemVkKFZNJiwgU3RydWN0dXJlKiwgdW5zaWduZWQgbGVuZ3RoKTsKKyAg
ICAKKyAgICAvLyBDcmVhdGVzIGFuIGFyZ3VtZW50cyBvYmplY3QgYW5kIGluaXRpYWxpemVzIGV2
ZXJ5dGhpbmcgdG8gdGhlIGVtcHR5IHZhbHVlLgorICAgIHN0YXRpYyBEaXJlY3RBcmd1bWVudHMq
IGNyZWF0ZShWTSYsIFN0cnVjdHVyZSosIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgCisgICAgLy8g
Q3JlYXRlcyBhbiBhcmd1bWVudHMgb2JqZWN0IGJ5IGNvcHlpbmcgdGhlIGFyZ3VtbmV0cyBmcm9t
IHRoZSBzdGFjay4KKyAgICBzdGF0aWMgRGlyZWN0QXJndW1lbnRzKiBjcmVhdGVCeUNvcHlpbmco
Vk0mLCBTdHJ1Y3R1cmUqLCBFeGVjU3RhdGUqKTsKKyAgICAKKyAgICBzdGF0aWMgdm9pZCB2aXNp
dENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgc3RhdGljIHZvaWQgY29weUJh
Y2tpbmdTdG9yZShKU0NlbGwqLCBDb3B5VmlzaXRvciYsIENvcHlUb2tlbik7CisgICAgCisgICAg
dWludDMyX3QgaW50ZXJuYWxMZW5ndGgoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1f
bGVuZ3RoOworICAgIH0KKyAgICAKKyAgICB1aW50MzJfdCBsZW5ndGgoRXhlY1N0YXRlKiBleGVj
KSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKFVOTElLRUxZKG1fb3ZlcnJpZGVzKSkKKyAgICAg
ICAgICAgIHJldHVybiBnZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCkudG9V
SW50MzIoZXhlYyk7CisgICAgICAgIHJldHVybiBtX2xlbmd0aDsKKyAgICB9CisgICAgCisgICAg
Ym9vbCBjYW5BY2Nlc3NJbmRleFF1aWNrbHkodWludDMyX3QgaSkgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiBpIDwgbV9sZW5ndGggJiYgKCFtX292ZXJyaWRlcyB8fCAhbV9vdmVycmlkZXMu
Z2V0KClbaV0pOworICAgIH0KKyAgICAKKyAgICBKU1ZhbHVlIGdldEluZGV4UXVpY2tseSh1aW50
MzJfdCBpKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElD
QVRJT04oY2FuQWNjZXNzSW5kZXhRdWlja2x5KGkpKTsKKyAgICAgICAgcmV0dXJuIHN0b3JhZ2Uo
KVtpXS5nZXQoKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzZXRJbmRleFF1aWNrbHkoVk0mIHZt
LCB1aW50MzJfdCBpLCBKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgQVNTRVJUX1dJVEhf
U0VDVVJJVFlfSU1QTElDQVRJT04oY2FuQWNjZXNzSW5kZXhRdWlja2x5KGkpKTsKKyAgICAgICAg
c3RvcmFnZSgpW2ldLnNldCh2bSwgdGhpcywgdmFsdWUpOworICAgIH0KKyAgICAKKyAgICBXcml0
ZUJhcnJpZXI8SlNGdW5jdGlvbj4mIGNhbGxlZSgpCisgICAgeworICAgICAgICByZXR1cm4gbV9j
YWxsZWU7CisgICAgfQorICAgIAorICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgYXJndW1lbnQo
Q2FwdHVyZWRBcmd1bWVudHNPZmZzZXQgb2Zmc2V0KQorICAgIHsKKyAgICAgICAgQVNTRVJUKG9m
ZnNldCk7CisgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKG9mZnNldC5v
ZmZzZXQoKSA8IG1fbGVuZ3RoKTsKKyAgICAgICAgcmV0dXJuIHN0b3JhZ2UoKVtvZmZzZXQub2Zm
c2V0KCldOworICAgIH0KKyAgICAKKyAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUo
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGpzQ2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihjYWxs
ZWUtPmV4ZWN1dGFibGUoKSk7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNTdHJpY3RNb2RlKCkK
KyAgICB7CisgICAgICAgIHJldHVybiBleGVjdXRhYmxlKCktPmlzU3RyaWN0TW9kZSgpOworICAg
IH0KKworICAgIC8vIE1ldGhvZHMgaW50ZW5kZWQgZm9yIHVzZSBieSB0aGUgR2VuZXJpY0FyZ3Vt
ZW50cyBtaXhpbi4KKyAgICBib29sIG92ZXJyb2RlVGhpbmdzKCkgY29uc3QgeyByZXR1cm4gISFt
X292ZXJyaWRlczsgfQorICAgIHZvaWQgc2xvd0Rvd25BbmRXYXN0ZU1lbW9yeShWTSYpOworICAg
IHZvaWQgc2xvd0Rvd25BbmRXYXN0ZU1lbW9yeUlmTmVjZXNzYXJ5KFZNJik7CisgICAgdm9pZCBv
dmVycmlkZUFyZ3VtZW50KFZNJiwgdW5zaWduZWQgaW5kZXgpOworICAgIAorICAgIERFQ0xBUkVf
SU5GTzsKKyAgICAKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBK
U0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlKTsKKyAgICAKK3ByaXZhdGU6CisgICAg
c3RhdGljIHNpemVfdCBzdG9yYWdlT2Zmc2V0KCkKKyAgICB7CisgICAgICAgIHJldHVybiBXVEY6
OnJvdW5kVXBUb011bHRpcGxlT2Y8c2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPik+KHNpemVv
ZihEaXJlY3RBcmd1bWVudHMpKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIHNpemVfdCBvdmVy
cmlkZUZsYWdzT2Zmc2V0KHVpbnQzMl90IGxlbmd0aCkKKyAgICB7CisgICAgICAgIHJldHVybiBz
dG9yYWdlT2Zmc2V0KCkgKyBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSAqIGxlbmd0aDsK
KyAgICB9CisgICAgCisgICAgc3RhdGljIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSh1aW50MzJfdCBs
ZW5ndGgpCisgICAgeworICAgICAgICByZXR1cm4gb3ZlcnJpZGVGbGFnc09mZnNldChsZW5ndGgp
ICsgV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mPHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4p
PihsZW5ndGgpOworICAgIH0KKyAgICAKKyAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHN0b3Jh
Z2UoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxXcml0ZUJhcnJpZXI8VW5r
bm93bj4qPihiaXR3aXNlX2Nhc3Q8Y2hhcio+KHRoaXMpICsgc3RvcmFnZU9mZnNldCgpKTsKKyAg
ICB9CisgICAgCisgICAgYm9vbCogb3ZlcnJpZGVGbGFncygpCisgICAgeworICAgICAgICByZXR1
cm4gYml0d2lzZV9jYXN0PFdyaXRlQmFycmllcjxVbmtub3duPio+KGJpdHdpc2VfY2FzdDxjaGFy
Kj4odGhpcykgKyBvdmVycmlkZUZsYWdzT2Zmc2V0KG1fbGVuZ3RoKSk7CisgICAgfQorICAgIAor
ICAgIFdyaXRlQmFycmllcjxKU0Z1bmN0aW9uKj4gbV9jYWxsZWU7CisgICAgdWludDMyX3QgbV9s
ZW5ndGg7IC8vIEFsd2F5cyB0aGUgYWN0dWFsIGxlbmd0aCBvZiBjYXB0dXJlZCBhcmd1bWVudHMg
YW5kIG5ldmVyIHdoYXQgd2FzIHN0b3JlZCBpbnRvIHRoZSBsZW5ndGggcHJvcGVydHkuCisgICAg
Q29weVdyaXRlQmFycmllcjxib29sPiBtX292ZXJyaWRlczsgLy8gSWYgbm9uLW51bGwsIGl0IG1l
YW5zIHRoYXQgbGVuZ3RoLCBjYWxsZWUsIGFuZCBjYWxsZXIgYXJlIGZ1bGx5IG1hdGVyaWFsaXpl
ZCBwcm9wZXJ0aWVzLgorfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBEaXJl
Y3RBcmd1bWVudHNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Gb3Jl
aWduVmFyaWFibGVJbmRleC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0ZvcmVpZ25WYXJpYWJsZUluZGV4LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Gb3JlaWduVmFyaWFibGVJbmRleC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2lmbmRlZiBGb3JlaWduVmFyaWFibGVJbmRleF9oCisjZGVmaW5lIEZvcmVpZ25W
YXJpYWJsZUluZGV4X2gKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEZvcmVpZ25WYXJpYWJs
ZUluZGV4IHsKK3B1YmxpYzoKKyAgICBGb3JlaWduVmFyaWFibGVJbmRleCgpCisgICAgICAgIDog
bV9pbmRleChVSU5UX01BWCkKKyAgICB7CisgICAgfQorICAgIAorICAgIGV4cGxpY2l0IEZvcmVp
Z25WYXJpYWJsZUluZGV4KHVuc2lnbmVkIGluZGV4KQorICAgICAgICA6IG1faW5kZXgoaW5kZXgp
CisgICAgeworICAgIH0KKyAgICAKKyAgICAKKyAgICAKK3ByaXZhdGU6CisgICAgdW5zaWduZWQg
bV9pbmRleDsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRm9yZWlnblZh
cmlhYmxlSW5kZXhfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5l
cmljQXJndW1lbnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvR2VuZXJpY0FyZ3VtZW50cy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lm
bmRlZiBHZW5lcmljQXJndW1lbnRzX2gKKyNkZWZpbmUgR2VuZXJpY0FyZ3VtZW50c19oCisKKyNp
bmNsdWRlICJKU09iamVjdC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworLy8gVGhpcyBpcyBhIG1p
eGluIGZvciB0aGUgdHdvIGtpbmRzIG9mIEFyZ3VtZW50cy1jbGFzcyBvYmplY3RzIHRoYXQgYXJp
c2Ugd2hlbiB5b3Ugc2F5CisvLyAiYXJndW1lbnRzIiBpbnNpZGUgYSBmdW5jdGlvbi4gVGhpcyBj
bGFzcyBkb2Vzbid0IHNob3cgdXAgaW4gdGhlIEpTQ2VsbCBpbmhlcml0YW5jZSBoaWVyYXJjaHku
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPgorY2xhc3MgR2VuZXJpY0FyZ3VtZW50cyA6IHB1Ymxp
YyBKU05vbkZpbmFsT2JqZWN0IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTTm9uRmluYWxPYmpl
Y3QgQmFzZTsKKworcHJvdGVjdGVkOgorICAgIEdlbmVyaWNBcmd1bWVudHMoVk0mIHZtLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCisgICAgewor
ICAgIH0KKworICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU09iamVjdCosIEV4
ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIGJvb2wg
Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU09iamVjdCosIEV4ZWNTdGF0ZSosIHVuc2lnbmVk
IHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIHZvaWQgZ2V0T3duUHJv
cGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51
bWVyYXRpb25Nb2RlKTsKKyAgICBzdGF0aWMgdm9pZCBwdXQoSlNDZWxsKiwgRXhlY1N0YXRlKiwg
UHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgdm9p
ZCBwdXRCeUluZGV4KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwg
SlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7CisgICAgc3RhdGljIHZvaWQgZGVsZXRlUHJvcGVy
dHkoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lKTsKKyAgICBzdGF0aWMgdm9pZCBk
ZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlNDZWxsKiwgRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVy
dHlOYW1lKTsKKyAgICBzdGF0aWMgdm9pZCBkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCosIEV4
ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCBz
aG91bGRUaHJvdyk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEdlbmVy
aWNBcmd1bWVudHNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5l
cmljQXJndW1lbnRzSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHNJbmxpbmVzLmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzSW5saW5lcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMjE4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgR2VuZXJpY0FyZ3VtZW50c0lubGluZXNfaAorI2Rl
ZmluZSBHZW5lcmljQXJndW1lbnRzSW5saW5lc19oCisKKyNpbmNsdWRlICJHZW5lcmljQXJndW1l
bnRzLmgiCisjaW5jbHVkZSAiSlNBcmd1bWVudHNJdGVyYXRvci5oIgorI2luY2x1ZGUgIkpTQ0lu
bGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFR5cGU+Citi
b29sIEdlbmVyaWNBcmd1bWVudHM8VHlwZT46OmdldE93blByb3BlcnR5U2xvdChKU09iamVjdCog
b2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBpZGVudCwgUHJvcGVydHlTbG90
JiBzbG90KQoreworICAgIFR5cGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8VHlwZSo+KG9iamVjdCk7
CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICAKKyAgICBpZiAoIXRoaXNPYmplY3QtPm92
ZXJyb2RlVGhpbmdzKCkpIHsKKyAgICAgICAgaWYgKGlkZW50ID09IHZtLnByb3BlcnR5TmFtZXMt
Pmxlbmd0aCkgeworICAgICAgICAgICAgc2xvdC5zZXRWYWx1ZSh0aGlzT2JqZWN0LCBEb250RW51
bSwganNOdW1iZXIodGhpc09iamVjdC0+aW50ZXJuYWxMZW5ndGgoKSkpOworICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIH0gZWxzZSBpZiAoaWRlbnQgPT0gdm0ucHJvcGVydHlOYW1l
cy0+Y2FsbGVlKSB7CisgICAgICAgICAgICBpZiAoIXRoaXNPYmplY3QtPmlzU3RyaWN0TW9kZSgp
KSB7CisgICAgICAgICAgICAgICAgc2xvdC5zZXRWYWx1ZSh0aGlzT2JqZWN0LCBEb250RW51bSwg
dGhpc09iamVjdC0+Y2FsbGVlKCkuZ2V0KCkpOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpc09iamVjdC0+c2xvd0Rvd25BbmRXYXN0
ZU1lbW9yeSh2bSk7CisgICAgICAgIH0gZWxzZSBpZiAoaWRlbnQgPT0gdm0ucHJvcGVydHlOYW1l
cy0+Y2FsbGVyKQorICAgICAgICAgICAgdGhpc09iamVjdC0+c2xvd0Rvd25BbmRXYXN0ZU1lbW9y
eSh2bSk7CisgICAgfQorICAgIAorICAgIHVuc2lnbmVkIGluZGV4ID0gaWRlbnQuYXNJbmRleCgp
OworICAgIGlmICh0aGlzT2JqZWN0LT5jYW5BY2Nlc3NJbmRleFF1aWNrbHkoaW5kZXgpKSB7Cisg
ICAgICAgIHNsb3Quc2V0VmFsdWUodGhpc09iamVjdCwgTm9uZSwgdGhpc09iamVjdC0+Z2V0SW5k
ZXhRdWlja2x5KGluZGV4KSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAg
ICBpZiAoQmFzZTo6Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIGV4ZWMsIGlkZW50LCBz
bG90KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgCisgICAgaWYgKGlkZW50ID09IHZtLnBy
b3BlcnR5TmFtZXMtPml0ZXJhdG9yUHJpdmF0ZU5hbWUpIHsKKyAgICAgICAgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKTsKKyAgICAgICAg
dGhpc09iamVjdC0+SlNDX05BVElWRV9GVU5DVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5pdGVyYXRv
clByaXZhdGVOYW1lLCBhcmd1bWVudHNGdW5jSXRlcmF0b3IsIERvbnRFbnVtLCAwKTsKKyAgICAg
ICAgaWYgKEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgZXhlYywgaWRl
bnQsIHNsb3QpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIHJl
dHVybiBmYWxzZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4KK2Jvb2wgR2VuZXJpY0Fy
Z3VtZW50czxUeXBlPjo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU09iamVjdCogb2JqZWN0
LCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGluZGV4LCBQcm9wZXJ0eVNsb3QmIHNsb3QpCit7
CisgICAgVHlwZSogdGhpc09iamVjdCA9IGpzQ2FzdDxUeXBlKj4ob2JqZWN0KTsKKyAgICAKKyAg
ICBpZiAodGhpc09iamVjdC0+Y2FuQWNjZXNzSW5kZXhRdWlja2x5KGluZGV4KSkgeworICAgICAg
ICBzbG90LnNldFZhbHVlKHRoaXNPYmplY3QsIE5vbmUsIHRoaXNPYmplY3QtPmdldEluZGV4UXVp
Y2tseShpbmRleCkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgcmV0
dXJuIEJhc2U6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgob2JqZWN0LCBleGVjLCBpbmRleCwg
c2xvdCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFR5cGU+Cit2b2lkIEdlbmVyaWNBcmd1bWVu
dHM8VHlwZT46OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRl
KiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgYXJyYXksIEVudW1lcmF0aW9uTW9kZSBtb2RlKQor
eworICAgIFR5cGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8VHlwZSo+KG9iamVjdCk7CisgICAgCisg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRoaXNPYmplY3QtPmludGVybmFsTGVuZ3RoKCk7
ICsraSkgeworICAgICAgICBpZiAoIXRoaXNPYmplY3QtPmNhbkFjY2Vzc0luZGV4UXVpY2tseShp
bmRleCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgYXJyYXkuYWRkKElkZW50aWZp
ZXI6OmZyb20oZXhlYywgaSkpOworICAgIH0KKyAgICBpZiAoc2hvdWxkSW5jbHVkZURvbnRFbnVt
UHJvcGVydGllcyhtb2RlKSAmJiAhdGhpc09iamVjdC0+b3ZlcnJvZGVUaGluZ3MoKSkgeworICAg
ICAgICBhcnJheS5hZGQoZXhlYy0+cHJvcGVydHlOYW1lcygpLmNhbGxlZSk7CisgICAgICAgIGFy
cmF5LmFkZChleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKTsKKyAgICB9CisgICAgQmFzZTo6
Z2V0T3duUHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBleGVjLCBhcnJheSwgbW9kZSk7Cit9CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFR5cGU+Cit2b2lkIEdlbmVyaWNBcmd1bWVudHM8VHlwZT46OnB1
dChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIGlkZW50LCBKU1Zh
bHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgVHlwZSogdGhpc09iamVj
dCA9IGpzQ2FzdDxUeXBlKj4ob2JqZWN0KTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAg
IAorICAgIGlmICghdGhpc09iamVjdC0+b3ZlcnJvZGVUaGluZ3MoKQorICAgICAgICAmJiAoaWRl
bnQgPT0gdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoCisgICAgICAgICAgICB8fCBpZGVudCA9PSB2
bS5wcm9wZXJ0eU5hbWVzLT5jYWxsZWUKKyAgICAgICAgICAgIHx8IGlkZW50ID09IHZtLnByb3Bl
cnR5TmFtZXMtPmNhbGxlcikpCisgICAgICAgIHRoaXNPYmplY3QtPnNsb3dEb3duQW5kV2FzdGVN
ZW1vcnkodm0pOworICAgIAorICAgIHVuc2lnbmVkIGluZGV4ID0gaWRlbnQuYXNJbmRleCgpOwor
ICAgIGlmICh0aGlzT2JqZWN0LT5jYW5BY2Nlc3NJbmRleFF1aWNrbHkoaW5kZXgpKSB7CisgICAg
ICAgIHNldEluZGV4UXVpY2tseSh2bSwgaW5kZXgsIHZhbHVlKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICAKKyAgICBCYXNlOjpwdXQodGhpc09iamVjdCwgZXhlYywgaWRlbnQsIHZhbHVl
LCBzbG90KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4KK3ZvaWQgR2VuZXJpY0FyZ3Vt
ZW50czxUeXBlPjo6cHV0QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5z
aWduZWQgaW5kZXgsIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCit7CisgICAgVHlw
ZSogdGhpc09iamVjdCA9IGpzQ2FzdDxUeXBlKj4ob2JqZWN0KTsKKyAgICBWTSYgdm0gPSBleGVj
LT52bSgpOworICAgIAorICAgIGlmICh0aGlzT2JqZWN0LT5jYW5TZXRJbmRleFF1aWNrbHkoaW5k
ZXgpKSB7CisgICAgICAgIHNldEluZGV4UXVpY2tseSh2bSwgaW5kZXgsIHZhbHVlKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gQmFzZTo6cHV0QnlJbmRleChjZWxs
LCBleGVjLCBpbmRleCwgdmFsdWUsIHNob3VsZFRocm93KTsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgVHlwZT4KK3ZvaWQgR2VuZXJpY0FyZ3VtZW50czxUeXBlPjo6ZGVsZXRlUHJvcGVydHkoSlND
ZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBpZGVudCkKK3sKKyAgICBU
eXBlKiB0aGlzT2JqZWN0ID0ganNDYXN0PFR5cGUqPihvYmplY3QpOworICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7CisgICAgCisgICAgaWYgKCF0aGlzT2JqZWN0LT5vdmVycm9kZVRoaW5ncygpCisg
ICAgICAgICYmIChpZGVudCA9PSB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgKKyAgICAgICAgICAg
IHx8IGlkZW50ID09IHZtLnByb3BlcnR5TmFtZXMtPmNhbGxlZQorICAgICAgICAgICAgfHwgaWRl
bnQgPT0gdm0ucHJvcGVydHlOYW1lcy0+Y2FsbGVyKSkKKyAgICAgICAgdGhpc09iamVjdC0+c2xv
d0Rvd25BbmRXYXN0ZU1lbW9yeSh2bSk7CisgICAgCisgICAgdW5zaWduZWQgaW5kZXggPSBpZGVu
dC5hc0luZGV4KCk7CisgICAgaWYgKHRoaXNPYmplY3QtPmNhbkFjY2Vzc0luZGV4UXVpY2tseShp
bmRleCkpIHsKKyAgICAgICAgdGhpc09iamVjdC0+b3ZlcnJpZGVBcmd1bWVudCh2bSwgaW5kZXgp
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIEJhc2U6OmRlbGV0ZVByb3BlcnR5
KHRoaXNPYmplY3QsIGV4ZWMsIGlkZW50KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4K
K3ZvaWQgR2VuZXJpY0FyZ3VtZW50czxUeXBlPjo6ZGVsZXRlUHJvcGVydHlCeUluZGV4KEpTQ2Vs
bCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpbmRleCkKK3sKKyAgICBUeXBlKiB0
aGlzT2JqZWN0ID0ganNDYXN0PFR5cGUqPihvYmplY3QpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7CisgICAgCisgICAgaWYgKHRoaXNPYmplY3QtPmNhbkFjY2Vzc0luZGV4UXVpY2tseShpbmRl
eCkpIHsKKyAgICAgICAgdGhpc09iamVjdC0+b3ZlcnJpZGVBcmd1bWVudCh2bSwgaW5kZXgpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIHJldHVybiBCYXNlOjpkZWxldGVQcm9w
ZXJ0eUJ5SW5kZXgoY2VsbCwgZXhlYywgaW5kZXgpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
eXBlPgordm9pZCBHZW5lcmljQXJndW1lbnRzPFR5cGU+OjpkZWZpbmVPd25Qcm9wZXJ0eShKU09i
amVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBpZGVudCwgY29uc3Qg
UHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBib29sIHNob3VsZFRocm93KQoreworICAg
IFR5cGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8VHlwZSo+KG9iamVjdCk7CisgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKKyAgICAKKyAgICBpZiAoaWRlbnQgPT0gdm0ucHJvcGVydHlOYW1lcy0+bGVu
Z3RoCisgICAgICAgIHx8IGlkZW50ID09IHZtLnByb3BlcnR5TmFtZXMtPmNhbGxlZQorICAgICAg
ICB8fCBpZGVudCA9PSB2bS5wcm9wZXJ0eU5hbWVzLT5jYWxsZXIpCisgICAgICAgIHRoaXNPYmpl
Y3QtPnNsb3dEb3duQW5kV2FzdGVNZW1vcnlJZk5lY2Vzc2FyeSh2bSk7CisgICAgZWxzZSB7Cisg
ICAgICAgIHVuc2lnbmVkIGluZGV4ID0gaWRlbnQuYXNJbmRleCgpOworICAgICAgICBpZiAodGhp
c09iamVjdC0+Y2FuQWNjZXNzQXJndW1lbnRRdWlja2x5KGluZGV4KSkgeworICAgICAgICAgICAg
aWYgKCFkZXNjcmlwdG9yLmlzQWNjZXNzb3JEZXNjcmlwdG9yKCkpIHsKKyAgICAgICAgICAgICAg
ICAvLyBJZiB0aGUgcHJvcGVydHkgaXMgbm90IGRlbGV0ZWQgYW5kIHdlIGFyZSB1c2luZyBhIG5v
bi1hY2Nlc3NvciBkZXNjcmlwdG9yLCB0aGVuCisgICAgICAgICAgICAgICAgLy8gbWFrZSBzdXJl
IHRoYXQgdGhlIGFsaWFzZWQgYXJndW1lbnQgc2VlcyB0aGUgdmFsdWUuCisgICAgICAgICAgICAg
ICAgaWYgKGRlc2NyaXB0b3IudmFsdWUoKSkKKyAgICAgICAgICAgICAgICAgICAgdGhpc09iamVj
dC0+c2V0SW5kZXhRdWlja2x5KHZtLCBpLCBkZXNjcmlwdG9yLnZhbHVlKCkpOworICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgLy8gSWYgdGhlIHByb3BlcnR5IGlzIG5vdCBkZWxldGVkIGFu
ZCB3ZSBhcmUgdXNpbmcgYSBub24tYWNjZXNzb3IsIHdyaXRhYmxlCisgICAgICAgICAgICAgICAg
Ly8gZGVzY3JpcHRvciwgdGhlbiB3ZSBhcmUgZG9uZS4gVGhlIGFyZ3VtZW50IGNvbnRpbnVlcyB0
byBiZSBhbGlhc2VkLiBOb3RlIHRoYXQgd2UKKyAgICAgICAgICAgICAgICAvLyBpZ25vcmUgdGhl
IHJlcXVlc3QgdG8gY2hhbmdlIGVudW1lcmFiaWxpdHkuIFdlIGFwcGVhciB0byBoYXZlIGFsd2F5
cyBkb25lIHNvLCBpbgorICAgICAgICAgICAgICAgIC8vIGNhc2VzIHdoZXJlIHRoZSBhcmd1bWVu
dCB3YXMgc3RpbGwgYWxpYXNlZC4KKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MTk1MgorICAgICAgICAgICAgICAgIGlm
IChkZXNjcmlwdG9yLndyaXRhYmxlKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgICAgIC8vIElmIHRoZSBwcm9wZXJ0
eSBpcyBhIG5vbi1kZWxldGVkIGFyZ3VtZW50LCB0aGVuIG1vdmUgaXQgaW50byB0aGUgYmFzZSBv
YmplY3QgYW5kCisgICAgICAgICAgICAvLyB0aGVuIGRlbGV0ZSBpdC4KKyAgICAgICAgICAgIEpT
VmFsdWUgdmFsdWUgPSB0aGlzT2JqZWN0LT5nZXRJbmRleFF1aWNrbHkoaSk7CisgICAgICAgICAg
ICBBU1NFUlQodmFsdWUpOworICAgICAgICAgICAgb2JqZWN0LT5wdXREaXJlY3RNYXlCZUluZGV4
KGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUpOworICAgICAgICAgICAgdGhpc09iamVjdC0+b3Zl
cnJpZGVBcmd1bWVudCh2bSwgaSk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLy8gTm93
IGp1c3QgbGV0IHRoZSBub3JtYWwgb2JqZWN0IG1hY2hpbmVyeSBkbyBpdHMgdGhpbmcuCisgICAg
cmV0dXJuIEJhc2U6OmRlZmluZU93blByb3BlcnR5KG9iamVjdCwgZXhlYywgaWRlbnQsIGRlc2Ny
aXB0b3IsIHNob3VsZFRocm93KTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAv
LyBHZW5lcmljQXJndW1lbnRzSW5saW5lc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0dlbmVyaWNPZmZzZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9HZW5lcmljT2Zmc2V0LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljT2Zmc2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwxMTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2lmbmRlZiBHZW5lcmljT2Zmc2V0X2gKKyNkZWZpbmUgR2VuZXJpY09mZnNldF9oCisKKyNp
bmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorCituYW1lc3BhY2UgSlNDIHsKKworLy8gQSBtaXhp
biBmb3IgY3JlYXRpbmcgdGhlIHZhcmlvdXMga2luZHMgb2YgdmFyaWFibGUgb2Zmc2V0cyB0aGF0
IG91ciBlbmdpbmUgc3VwcG9ydHMuCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorY2xhc3MgR2VuZXJp
Y09mZnNldCB7CitwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludmFsaWRPZmZz
ZXQgPSBVSU5UX01BWDsKKyAgICAKKyAgICBHZW5lcmljT2Zmc2V0KCkKKyAgICAgICAgOiBtX29m
ZnNldChpbnZhbGlkT2Zmc2V0KQorICAgIHsKKyAgICB9CisgICAgCisgICAgZXhwbGljaXQgR2Vu
ZXJpY09mZnNldCh1bnNpZ25lZCBvZmZzZXQpCisgICAgICAgIDogbV9vZmZzZXQob2Zmc2V0KQor
ICAgIHsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiBt
X29mZnNldCA9PSBpbnZhbGlkT2Zmc2V0OyB9CisgICAgCisgICAgdW5zaWduZWQgb2Zmc2V0VW5j
aGVja2VkKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX29mZnNldDsKKyAgICB9Cisg
ICAgCisgICAgdW5zaWduZWQgb2Zmc2V0KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVCht
X29mZnNldCAhPSBpbnZhbGlkT2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIG1fb2Zmc2V0OworICAg
IH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgVCYgb3RoZXIpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gbV9vZmZzZXQgPT0gb3RoZXIub2Zmc2V0VW5jaGVja2VkKCk7Cisg
ICAgfQorICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBUJiBvdGhlcikgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBtX29mZnNldCAhPSBvdGhlci5vZmZzZXRVbmNoZWNrZWQoKTsKKyAgICB9
CisgICAgYm9vbCBvcGVyYXRvcjwoY29uc3QgVCYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gbV9vZmZzZXQgPCBvdGhlci5vZmZzZXRVbmNoZWNrZWQoKTsKKyAgICB9CisgICAg
Ym9vbCBvcGVyYXRvcj4oY29uc3QgVCYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gbV9vZmZzZXQgPiBvdGhlci5vZmZzZXRVbmNoZWNrZWQoKTsKKyAgICB9CisgICAgYm9vbCBv
cGVyYXRvcjw9KGNvbnN0IFQmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1f
b2Zmc2V0IDw9IG90aGVyLm9mZnNldFVuY2hlY2tlZCgpOworICAgIH0KKyAgICBib29sIG9wZXJh
dG9yPj0oY29uc3QgVCYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9vZmZz
ZXQgPj0gb3RoZXIub2Zmc2V0VW5jaGVja2VkKCk7CisgICAgfQorICAgIAorICAgIFQgb3BlcmF0
b3IrKGludCB2YWx1ZSkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBUKG9mZnNldCgpICsg
dmFsdWUpOworICAgIH0KKyAgICBUIG9wZXJhdG9yLShpbnQgdmFsdWUpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gVChvZmZzZXQoKSAtIHZhbHVlKTsKKyAgICB9CisgICAgVCYgb3BlcmF0
b3IrPShpbnQgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gKnRoaXMgPSAqdGhpcyArIHZh
bHVlOworICAgIH0KKyAgICBUJiBvcGVyYXRvci09KGludCB2YWx1ZSkKKyAgICB7CisgICAgICAg
IHJldHVybiAqdGhpcyA9ICp0aGlzIC0gdmFsdWU7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAg
ICB1bnNpZ25lZCBtX29mZnNldDsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYg
Ly8gR2VuZXJpY09mZnNldF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQXJndW1lbnRzSXRlcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQXJndW1lbnRzSXRlcmF0b3IuY3BwCShyZXZpc2lvbiAxODA1NjUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FyZ3VtZW50c0l0ZXJhdG9yLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMg
QXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywg
MjAxNSBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0zMywxMCArMzMsMTggQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNvbnN0
IENsYXNzSW5mbyBKU0FyZ3VtZW50c0l0ZXJhdG9yOjpzX2luZm8gPSB7ICJBcmd1bWVudHNJdGVy
YXRvciIsICZCYXNlOjpzX2luZm8sIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNBcmd1bWVudHNJ
dGVyYXRvcikgfTsKIAotdm9pZCBKU0FyZ3VtZW50c0l0ZXJhdG9yOjpmaW5pc2hDcmVhdGlvbihW
TSYgdm0sIEFyZ3VtZW50cyogYXJndW1lbnRzKQordm9pZCBKU0FyZ3VtZW50c0l0ZXJhdG9yOjpm
aW5pc2hDcmVhdGlvbihWTSYgdm0sIEpTT2JqZWN0KiBhcmd1bWVudHMpCiB7CiAgICAgQmFzZTo6
ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIG1fYXJndW1lbnRzLnNldCh2bSwgdGhpcywgYXJndW1l
bnRzKTsKIH0KIAorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcmd1bWVudHNGdW5jSXRl
cmF0b3IoRXhlY1N0YXRlKiBleGVjKQoreworICAgIEpTT2JqZWN0KiB0aGlzT2JqID0gZXhlYy0+
dGhpc1ZhbHVlKCkudG9UaGlzKGV4ZWMsIFN0cmljdE1vZGUpLnRvT2JqZWN0KGV4ZWMpOworICAg
IGlmICghdGhpc09iai0+aW5oZXJpdHMoQXJndW1lbnRzOjppbmZvKCkpICYmICF0aGlzT2JqLT5p
bmhlcml0cyhPdXRPZkJhbmRBcmd1bWVudHM6OmluZm8oKSkpCisgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUodGhyb3dUeXBlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJBdHRlbXB0ZWQg
dG8gdXNlIEFyZ3VtZW50cyBpdGVyYXRvciBvbiBub24tQXJndW1lbnRzIG9iamVjdCIpKSk7Cisg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU0FyZ3VtZW50c0l0ZXJhdG9yOjpjcmVhdGUoZXhl
Yy0+dm0oKSwgZXhlYy0+Y2FsbGVlKCktPmdsb2JhbE9iamVjdCgpLT5hcmd1bWVudHNJdGVyYXRv
clN0cnVjdHVyZSgpLCB0aGlzT2JqKSk7Cit9CisKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQXJndW1lbnRzSXRlcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FyZ3VtZW50c0l0ZXJhdG9yLmgJKHJldmlzaW9uIDE4
MDU2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJndW1lbnRzSXRlcmF0
b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMywgMjAxNSBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiw3ICsyNiw3IEBACiAjaWZuZGVmIEpTQXJndW1lbnRz
SXRlcmF0b3JfaAogI2RlZmluZSBKU0FyZ3VtZW50c0l0ZXJhdG9yX2gKIAotI2luY2x1ZGUgIkFy
Z3VtZW50cy5oIgorI2luY2x1ZGUgIkpTT2JqZWN0LmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCkBA
IC00MSw3ICs0MSw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRl
KHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0
dXJlRmxhZ3MpLCBpbmZvKCkpOwogICAgIH0KIAotICAgIHN0YXRpYyBKU0FyZ3VtZW50c0l0ZXJh
dG9yKiBjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQXJndW1lbnRzKiBhcmd1
bWVudHMpCisgICAgc3RhdGljIEpTQXJndW1lbnRzSXRlcmF0b3IqIGNyZWF0ZShWTSYgdm0sIFN0
cnVjdHVyZSogc3RydWN0dXJlLCBKU09iamVjdCogYXJndW1lbnRzKQogICAgIHsKICAgICAgICAg
SlNBcmd1bWVudHNJdGVyYXRvciogaW5zdGFuY2UgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2Vs
bDxKU0FyZ3VtZW50c0l0ZXJhdG9yPih2bS5oZWFwKSkgSlNBcmd1bWVudHNJdGVyYXRvcih2bSwg
c3RydWN0dXJlKTsKICAgICAgICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKHZtLCBhcmd1bWVu
dHMpOwpAQCAtNTAsMTEgKzUwLDExIEBAIHB1YmxpYzoKIAogICAgIGJvb2wgbmV4dChDYWxsRnJh
bWUqIGNhbGxGcmFtZSwgSlNWYWx1ZSYgdmFsdWUpCiAgICAgewotICAgICAgICBpZiAobV9uZXh0
SW5kZXggPj0gbV9hcmd1bWVudHMtPmxlbmd0aChjYWxsRnJhbWUpKQorICAgICAgICB1bnNpZ25l
ZCBsZW5ndGggPQorICAgICAgICAgICAgbV9hcmd1bWVudHMtPmdldChjYWxsRnJhbWUsIGNhbGxG
cmFtZS0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCkudG9VSW50MzIoY2FsbEZyYW1lKTsKKyAgICAg
ICAgaWYgKG1fbmV4dEluZGV4ID49IGxlbmd0aCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgdmFsdWUgPSBtX2FyZ3VtZW50cy0+dHJ5R2V0QXJndW1lbnQobV9uZXh0SW5kZXgr
Kyk7Ci0gICAgICAgIGlmICghdmFsdWUpCi0gICAgICAgICAgICB2YWx1ZSA9IGpzVW5kZWZpbmVk
KCk7CisgICAgICAgIHZhbHVlID0gbV9hcmd1bWVudHMtPmdldEluZGV4KGNhbGxGcmFtZSwgbV9u
ZXh0SW5kZXgrKyk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApAQCAtNjgsMTIgKzY4
LDE0IEBAIHByaXZhdGU6CiAgICAgewogICAgIH0KIAotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24o
Vk0mLCBBcmd1bWVudHMqKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgSlNPYmplY3Qq
KTsKICAgICAKLSAgICBXcml0ZUJhcnJpZXI8QXJndW1lbnRzPiBtX2FyZ3VtZW50czsKKyAgICBX
cml0ZUJhcnJpZXI8SlNPYmplY3Q+IG1fYXJndW1lbnRzOwogICAgIHNpemVfdCBtX25leHRJbmRl
eDsKIH07CiAKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJndW1lbnRzRnVuY0l0ZXJh
dG9yKEV4ZWNTdGF0ZSopOworCiB9CiAKICNlbmRpZiAvLyAhZGVmaW5lZChKU0FyZ3VtZW50c0l0
ZXJhdG9yX2gpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Vudmlyb25t
ZW50UmVjb3JkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0Vudmlyb25tZW50UmVjb3JkLmNwcAkocmV2aXNpb24gMTgwNTY1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNFbnZpcm9ubWVudFJlY29yZC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAyMDEy
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNywg
MjAwOCwgMjAxMiwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM1LDQgKzM1LDEyIEBAIG5hbWVzcGFjZSBKU0Mg
ewogCiBjb25zdCBDbGFzc0luZm8gSlNFbnZpcm9ubWVudFJlY29yZDo6c19pbmZvID0geyAiRW52
aXJvbm1lbnRSZWNvcmQiLCAmQmFzZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpT
RW52aXJvbm1lbnRSZWNvcmQpIH07CiAKK3ZvaWQgSlNFbnZpcm9ubWVudFJlY29yZDo6dmlzaXRD
aGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIEpTRW52
aXJvbm1lbnRSZWNvcmQqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNFbnZpcm9ubWVudFJlY29yZCo+
KGNlbGwpOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygp
KTsKKyAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOworICAgIHZp
c2l0b3IuYXBwZW5kVmFsdWVzKHRoaXNPYmplY3QtPnZhcmlhYmxlcygpLCBtX3N5bWJvbFRhYmxl
LT5zY29wZVNpemUoKSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNFbnZpcm9ubWVudFJlY29yZC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRW52aXJvbm1lbnRSZWNvcmQuaAkocmV2
aXNpb24gMTgwNTY1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNFbnZpcm9u
bWVudFJlY29yZC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NiwxMSArNDYsMjYgQEAgY2xhc3MgSlNF
bnZpcm9ubWVudFJlY29yZCA6IHB1YmxpYyBKU1N5bQogcHVibGljOgogICAgIHR5cGVkZWYgSlNT
eW1ib2xUYWJsZU9iamVjdCBCYXNlOwogCi0gICAgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiog
cmVnaXN0ZXJzKCkgeyByZXR1cm4gbV9yZWdpc3RlcnM7IH0KLSAgICBXcml0ZUJhcnJpZXJCYXNl
PFVua25vd24+JiByZWdpc3RlckF0KGludCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9yZWdpc3Rl
cnNbaW5kZXhdOyB9CisgICAgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiogdmFyaWFibGVzKCkK
KyAgICB7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8V3JpdGVCYXJyaWVyQmFzZTxVbmtu
b3duPio+KGJpdHdpc2VfY2FzdDxjaGFyKj4odGhpcykgKyBvZmZzZXRPZlZhcmlhYmxlcygpKTsK
KyAgICB9CisgICAgCisgICAgYm9vbCBpc1ZhbGlkKFNjb3BlT2Zmc2V0IG9mZnNldCkKKyAgICB7
CisgICAgICAgIHJldHVybiAhIW9mZnNldCAmJiBvZmZzZXQub2Zmc2V0KCkgPCBtX3N5bWJvbFRh
YmxlLT5zY29wZVNpemUoKTsKKyAgICB9CisgICAgCisgICAgV3JpdGVCYXJyaWVyQmFzZTxVbmtu
b3duPiYgdmFyaWFibGVBdChTY29wZU9mZnNldCBvZmZzZXQpIGNvbnN0CisgICAgeworICAgICAg
ICBBU1NFUlQoaXNWYWxpZChvZmZzZXQpKTsKKyAgICAgICAgcmV0dXJuIHZhcmlhYmxlcygpW29m
ZnNldC5vZmZzZXQoKV07CisgICAgfQogCi0gICAgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiog
Y29uc3QgKiBhZGRyZXNzT2ZSZWdpc3RlcnMoKSBjb25zdCB7IHJldHVybiAmbV9yZWdpc3RlcnM7
IH0KLSAgICBzdGF0aWMgc2l6ZV90IG9mZnNldE9mUmVnaXN0ZXJzKCkgeyByZXR1cm4gT0JKRUNU
X09GRlNFVE9GKEpTRW52aXJvbm1lbnRSZWNvcmQsIG1fcmVnaXN0ZXJzKTsgfQorICAgIHN0YXRp
YyBzaXplX3Qgb2Zmc2V0T2ZWYXJpYWJsZXMoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFdURjo6
cm91bmRVcFRvTXVsdGlwbGVPZjxzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KT4oc2l6ZW9m
KEpTRW52aXJvbm1lbnRSZWNvcmQpKTsKKyAgICB9CiAKICAgICBERUNMQVJFX0lORk87CiAKQEAg
LTYwLDE1ICs3NSwzNSBAQCBwcm90ZWN0ZWQ6CiAgICAgSlNFbnZpcm9ubWVudFJlY29yZCgKICAg
ICAgICAgVk0mIHZtLAogICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwKLSAgICAgICAgUmVn
aXN0ZXIqIHJlZ2lzdGVycywKICAgICAgICAgSlNTY29wZSogc2NvcGUsCiAgICAgICAgIFN5bWJv
bFRhYmxlKiBzeW1ib2xUYWJsZSkKICAgICAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUsIHNjb3Bl
LCBzeW1ib2xUYWJsZSkKLSAgICAgICAgLCBtX3JlZ2lzdGVycyhyZWludGVycHJldF9jYXN0PFdy
aXRlQmFycmllckJhc2U8VW5rbm93bj4qPihyZWdpc3RlcnMpKQogICAgIHsKICAgICB9Ci0KLSAg
ICBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiBtX3JlZ2lzdGVyczsgLy8gInIiIGluIHRoZSBz
dGFjay4KKyAgICAKKyAgICBzdGF0aWMgc2l6ZV90IGFsbG9jYXRpb25TaXplRm9yU2NvcGVTaXpl
KHVuc2lnbmVkIHNjb3BlU2l6ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBvZmZzZXRPZlZhcmlh
YmxlcygpICsgc2NvcGVTaXplICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPik7CisgICAg
fQorICAgIAorICAgIHN0YXRpYyBzaXplX3QgYWxsb2NhdGlvblNpemUoU3ltYm9sVGFibGUqIHN5
bWJvbFRhYmxlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFsbG9jYXRpb25TaXplRm9yU2NvcGVT
aXplKHN5bWJvbFRhYmxlLT5zY29wZVNpemUoKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgZmlu
aXNoQ3JlYXRpb25VbmluaXRpYWxpemVkKFZNJiB2bSkKKyAgICB7CisgICAgICAgIEJhc2U6OmZp
bmlzaENyZWF0aW9uKHZtKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihW
TSYgdm0pCisgICAgeworICAgICAgICBmaW5pc2hDcmVhdGlvblVuaW5pdGlhbGl6ZWQodm0pOwor
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX3N5bWJvbFRhYmxlLT5zY29wZVNpemUoKTsgaS0t
OykgeworICAgICAgICAgICAgLy8gRmlsbGluZyB0aGlzIHdpdGggdW5kZWZpbmVkIGlzIHVzZWZ1
bCBiZWNhdXNlIHRoYXQncyB3aGF0IHZhcmlhYmxlcyBzdGFydCBvdXQgYXMuCisgICAgICAgICAg
ICB2YXJpYWJsZUF0KGkpLnNldFVuZGVmaW5lZCgpOworICAgICAgICB9CisgICAgfQogfTsKIAog
fSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0xleGljYWxFbnZpcm9ubWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNMZXhpY2FsRW52aXJvbm1lbnQuY3BwCShyZXZpc2lvbiAxODA1NjUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xleGljYWxFbnZpcm9ubWVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4
LCAyMDA5LCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAwOCwgMjAwOSwgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQwLDI3ICs0MCwxOSBAQCBu
YW1lc3BhY2UgSlNDIHsKIAogY29uc3QgQ2xhc3NJbmZvIEpTTGV4aWNhbEVudmlyb25tZW50Ojpz
X2luZm8gPSB7ICJKU0xleGljYWxFbnZpcm9ubWVudCIsICZCYXNlOjpzX2luZm8sIDAsIENSRUFU
RV9NRVRIT0RfVEFCTEUoSlNMZXhpY2FsRW52aXJvbm1lbnQpIH07CiAKLXZvaWQgSlNMZXhpY2Fs
RW52aXJvbm1lbnQ6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlz
aXRvcikKLXsKLSAgICBKU0xleGljYWxFbnZpcm9ubWVudCogdGhpc09iamVjdCA9IGpzQ2FzdDxK
U0xleGljYWxFbnZpcm9ubWVudCo+KGNlbGwpOwotICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJ
VFModGhpc09iamVjdCwgaW5mbygpKTsKLSAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmpl
Y3QsIHZpc2l0b3IpOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0aGlzT2JqZWN0LT5zeW1i
b2xUYWJsZSgpLT5jYXB0dXJlQ291bnQoKTsgKytpKQotICAgICAgICB2aXNpdG9yLmFwcGVuZCgm
dGhpc09iamVjdC0+c3RvcmFnZSgpW2ldKTsKLX0KLQogaW5saW5lIGJvb2wgSlNMZXhpY2FsRW52
aXJvbm1lbnQ6OnN5bWJvbFRhYmxlR2V0KFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3Bl
cnR5U2xvdCYgc2xvdCkKIHsKICAgICBTeW1ib2xUYWJsZUVudHJ5IGVudHJ5ID0gc3ltYm9sVGFi
bGUoKS0+aW5saW5lR2V0KHByb3BlcnR5TmFtZS51aWQoKSk7CiAgICAgaWYgKGVudHJ5LmlzTnVs
bCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICBTY29wZU9mZnNldCBvZmZzZXQgPSBl
bnRyeS5zY29wZU9mZnNldCgpOworCiAgICAgLy8gRGVmZW5kIGFnYWluc3QgdGhlIGluc3BlY3Rv
ciBhc2tpbmcgZm9yIGEgdmFyIGFmdGVyIGl0IGhhcyBiZWVuIG9wdGltaXplZCBvdXQuCi0gICAg
aWYgKCFpc1ZhbGlkKGVudHJ5KSkKKyAgICBpZiAoIWlzVmFsaWQob2Zmc2V0KSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCi0gICAgc2xvdC5zZXRWYWx1ZSh0aGlzLCBEb250RW51bSwgcmVnaXN0
ZXJBdChlbnRyeS5nZXRJbmRleCgpKS5nZXQoKSk7CisgICAgc2xvdC5zZXRWYWx1ZSh0aGlzLCBE
b250RW51bSwgdmFyaWFibGVBdChvZmZzZXQpLmdldCgpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IApAQCAtNzAsMTEgKzYyLDEzIEBAIGlubGluZSBib29sIEpTTGV4aWNhbEVudmlyb25tZW50Ojpz
eW1ib2wKICAgICBpZiAoZW50cnkuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAor
ICAgIFNjb3BlT2Zmc2V0IG9mZnNldCA9IGVudHJ5LnNjb3BlT2Zmc2V0KCk7CisKICAgICAvLyBE
ZWZlbmQgYWdhaW5zdCB0aGUgaW5zcGVjdG9yIGFza2luZyBmb3IgYSB2YXIgYWZ0ZXIgaXQgaGFz
IGJlZW4gb3B0aW1pemVkIG91dC4KLSAgICBpZiAoIWlzVmFsaWQoZW50cnkpKQorICAgIGlmICgh
aXNWYWxpZChvZmZzZXQpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBkZXNjcmlwdG9y
LnNldERlc2NyaXB0b3IocmVnaXN0ZXJBdChlbnRyeS5nZXRJbmRleCgpKS5nZXQoKSwgZW50cnku
Z2V0QXR0cmlidXRlcygpKTsKKyAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3IodmFyaWFibGVB
dChvZmZzZXQpLmdldCgpLCBlbnRyeS5nZXRBdHRyaWJ1dGVzKCkpOwogICAgIHJldHVybiB0cnVl
OwogfQogCkBAIC05NSwxMiArODksMTMgQEAgaW5saW5lIGJvb2wgSlNMZXhpY2FsRW52aXJvbm1l
bnQ6OnN5bWJvbAogICAgICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIFN0cmljdE1v
ZGVSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICAgICAgfQorICAgICAgICBTY29wZU9mZnNldCBvZmZzZXQgPSBpdGVyLT52YWx1ZS5zY29w
ZU9mZnNldCgpOwogICAgICAgICAvLyBEZWZlbmQgYWdhaW5zdCB0aGUgaW5zcGVjdG9yIGFza2lu
ZyBmb3IgYSB2YXIgYWZ0ZXIgaXQgaGFzIGJlZW4gb3B0aW1pemVkIG91dC4KLSAgICAgICAgaWYg
KCFpc1ZhbGlkKGl0ZXItPnZhbHVlKSkKKyAgICAgICAgaWYgKCFpc1ZhbGlkKG9mZnNldCkpCiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGlmIChWYXJpYWJsZVdhdGNocG9pbnRT
ZXQqIHNldCA9IGl0ZXItPnZhbHVlLndhdGNocG9pbnRTZXQoKSkKLSAgICAgICAgICAgIHNldC0+
aW52YWxpZGF0ZShWYXJpYWJsZVdyaXRlRmlyZURldGFpbCh0aGlzLCBwcm9wZXJ0eU5hbWUpKTsg
Ly8gRG9uJ3QgbWVzcyBhcm91bmQgLSBpZiB3ZSBoYWQgZm91bmQgdGhpcyBzdGF0aWNhbGx5LCB3
ZSB3b3VsZCBoYXZlIGludmNhbGlkYXRlZCBpdC4KLSAgICAgICAgcmVnID0gJnJlZ2lzdGVyQXQo
aXRlci0+dmFsdWUuZ2V0SW5kZXgoKSk7CisgICAgICAgICAgICBzZXQtPmludmFsaWRhdGUoVmFy
aWFibGVXcml0ZUZpcmVEZXRhaWwodGhpcywgcHJvcGVydHlOYW1lKSk7IC8vIERvbid0IG1lc3Mg
YXJvdW5kIC0gaWYgd2UgaGFkIGZvdW5kIHRoaXMgc3RhdGljYWxseSwgd2Ugd291bGQgaGF2ZSBp
bnZhbGlkYXRlZCBpdC4KKyAgICAgICAgcmVnID0gJnZhcmlhYmxlQXQob2Zmc2V0KTsKICAgICB9
CiAgICAgcmVnLT5zZXQodm0sIHRoaXMsIHZhbHVlKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTEx
Niw3ICsxMTEsNyBAQCB2b2lkIEpTTGV4aWNhbEVudmlyb25tZW50OjpnZXRPd25Ob25JbmRlCiAg
ICAgICAgIGZvciAoU3ltYm9sVGFibGU6Ok1hcDo6aXRlcmF0b3IgaXQgPSB0aGlzT2JqZWN0LT5z
eW1ib2xUYWJsZSgpLT5iZWdpbihsb2NrZXIpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAg
ICAgIGlmIChpdC0+dmFsdWUuZ2V0QXR0cmlidXRlcygpICYgRG9udEVudW0gJiYgIXNob3VsZElu
Y2x1ZGVEb250RW51bVByb3BlcnRpZXMobW9kZSkpCiAgICAgICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgICAgICBpZiAoIXRoaXNPYmplY3QtPmlzVmFsaWQoaXQtPnZhbHVlKSkKKyAgICAg
ICAgICAgIGlmICghdGhpc09iamVjdC0+aXNWYWxpZChpdC0+dmFsdWUuc2NvcGVPZmZzZXQoKSkp
CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBwcm9wZXJ0eU5hbWVzLmFk
ZChJZGVudGlmaWVyKGV4ZWMsIGl0LT5rZXkuZ2V0KCkpKTsKICAgICAgICAgfQpAQCAtMTM3LDEx
ICsxMzIsMTMgQEAgaW5saW5lIGJvb2wgSlNMZXhpY2FsRW52aXJvbm1lbnQ6OnN5bWJvbAogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBTeW1ib2xUYWJsZUVudHJ5JiBlbnRyeSA9
IGl0ZXItPnZhbHVlOwogICAgICAgICBBU1NFUlQoIWVudHJ5LmlzTnVsbCgpKTsKLSAgICAgICAg
aWYgKCFpc1ZhbGlkKGVudHJ5KSkKKyAgICAgICAgCisgICAgICAgIFNjb3BlT2Zmc2V0IG9mZnNl
dCA9IGVudHJ5LnNjb3BlT2Zmc2V0KCk7CisgICAgICAgIGlmICghaXNWYWxpZChvZmZzZXQpKQog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKICAgICAgICAgZW50cnkuc2V0QXR0
cmlidXRlcyhhdHRyaWJ1dGVzKTsKLSAgICAgICAgcmVnID0gJnJlZ2lzdGVyQXQoZW50cnkuZ2V0
SW5kZXgoKSk7CisgICAgICAgIHJlZyA9ICZ2YXJpYWJsZUF0KG9mZnNldCk7CiAgICAgfQogICAg
IHJlZy0+c2V0KHZtLCB0aGlzLCB2YWx1ZSk7CiAgICAgcmV0dXJuIHRydWU7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xleGljYWxFbnZpcm9ubWVudC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTGV4aWNhbEVudmlyb25tZW50
LmgJKHJldmlzaW9uIDE4MDU2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
TGV4aWNhbEVudmlyb25tZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5LCAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSwgMjAxMy0yMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtNDEsMzMgKzQxLDI3IEBAIGNsYXNzIFJlZ2lzdGVyOwogICAgIAogY2xhc3MgSlNM
ZXhpY2FsRW52aXJvbm1lbnQgOiBwdWJsaWMgSlNFbnZpcm9ubWVudFJlY29yZCB7CiBwcml2YXRl
OgotICAgIEpTTGV4aWNhbEVudmlyb25tZW50KFZNJiwgQ2FsbEZyYW1lKiwgUmVnaXN0ZXIqLCBK
U1Njb3BlKiwgQ29kZUJsb2NrKik7CisgICAgSlNMZXhpY2FsRW52aXJvbm1lbnQoVk0mLCBTdHJ1
Y3R1cmUqLCBKU1Njb3BlKiwgU3ltYm9sVGFibGUqKTsKICAgICAKIHB1YmxpYzoKICAgICB0eXBl
ZGVmIEpTRW52aXJvbm1lbnRSZWNvcmQgQmFzZTsKIAotICAgIHN0YXRpYyBKU0xleGljYWxFbnZp
cm9ubWVudCogY3JlYXRlKFZNJiB2bSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIFJlZ2lzdGVyKiBy
ZWdpc3RlcnMsIEpTU2NvcGUqIGN1cnJlbnRTY29wZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2spCisg
ICAgc3RhdGljIEpTTGV4aWNhbEVudmlyb25tZW50KiBjcmVhdGUoCisgICAgICAgIFZNJiB2bSwg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNTY29wZSogY3VycmVudFNjb3BlLCBTeW1i
b2xUYWJsZSogc3ltYm9sVGFibGUpCiAgICAgewotICAgICAgICBTeW1ib2xUYWJsZSogc3ltYm9s
VGFibGUgPSBjb2RlQmxvY2stPnN5bWJvbFRhYmxlKCk7Ci0gICAgICAgIEFTU0VSVChjb2RlQmxv
Y2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlKTsKLSAgICAgICAgSlNMZXhpY2FsRW52aXJv
bm1lbnQqIGxleGljYWxFbnZpcm9ubWVudCA9IG5ldyAoCi0gICAgICAgICAgICBOb3ROdWxsLAot
ICAgICAgICAgICAgYWxsb2NhdGVDZWxsPEpTTGV4aWNhbEVudmlyb25tZW50PigKLSAgICAgICAg
ICAgICAgICB2bS5oZWFwLAotICAgICAgICAgICAgICAgIGFsbG9jYXRpb25TaXplKHN5bWJvbFRh
YmxlKQotICAgICAgICAgICAgKQotICAgICAgICApIEpTTGV4aWNhbEVudmlyb25tZW50KHZtLCBj
YWxsRnJhbWUsIHJlZ2lzdGVycywgY3VycmVudFNjb3BlLCBjb2RlQmxvY2spOwotICAgICAgICBs
ZXhpY2FsRW52aXJvbm1lbnQtPmZpbmlzaENyZWF0aW9uKHZtKTsKLSAgICAgICAgcmV0dXJuIGxl
eGljYWxFbnZpcm9ubWVudDsKKyAgICAgICAgSlNMZXhpY2FsRW52aXJvbm1lbnQqIHJlc3VsdCA9
CisgICAgICAgICAgICBuZXcgKE5vdE51bGwsIGFsbG9jYXRpb25TaXplKHN5bWJvbFRhYmxlKSkK
KyAgICAgICAgICAgIEpTTGV4aWNhbEVudmlyb25tZW50KHZtLCBnbG9iYWxPYmplY3QtPmFjdGl2
YXRpb25TdHJ1Y3R1cmUoKSwgY3VycmVudFNjb3BlLCBzeW1ib2xUYWJsZSk7CisgICAgICAgIHJl
c3VsdC0+ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIH0KLSAgICAgICAgCisgICAgCiAgICAgc3Rh
dGljIEpTTGV4aWNhbEVudmlyb25tZW50KiBjcmVhdGUoVk0mIHZtLCBDYWxsRnJhbWUqIGNhbGxG
cmFtZSwgSlNTY29wZSogY3VycmVudFNjb3BlLCBDb2RlQmxvY2sqIGNvZGVCbG9jaykKICAgICB7
Ci0gICAgICAgIHJldHVybiBjcmVhdGUodm0sIGNhbGxGcmFtZSwgY2FsbEZyYW1lLT5yZWdpc3Rl
cnMoKSArIGNvZGVCbG9jay0+ZnJhbWVQb2ludGVyT2Zmc2V0VG9HZXRBY3RpdmF0aW9uUmVnaXN0
ZXJzKCksIGN1cnJlbnRTY29wZSwgY29kZUJsb2NrKTsKKyAgICAgICAgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCA9IGNhbGxGcmFtZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpOworICAgICAg
ICBTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUgPSBjb2RlQmxvY2stPnN5bWJvbFRhYmxlKCk7Cisg
ICAgICAgIHJldHVybiBjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgY3VycmVudFNjb3BlLCBzeW1i
b2x0YWJsZSk7CiAgICAgfQotCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwq
LCBTbG90VmlzaXRvciYpOwotCisgICAgICAgIAogICAgIHN0YXRpYyBib29sIGdldE93blByb3Bl
cnR5U2xvdChKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90
Jik7CiAgICAgc3RhdGljIHZvaWQgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0
KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOwogCkBA
IC04MSwxMiArNzUsNiBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVT
dHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KSB7IHJldHVybiBT
dHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBqc051bGwoKSwgVHlwZUluZm8oQWN0
aXZhdGlvbk9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsgfQogCi0gICAgV3Jp
dGVCYXJyaWVyQmFzZTxVbmtub3duPiYgcmVnaXN0ZXJBdChpbnQpIGNvbnN0OwotICAgIGJvb2wg
aXNWYWxpZEluZGV4KGludCkgY29uc3Q7Ci0gICAgYm9vbCBpc1ZhbGlkKGNvbnN0IFN5bWJvbFRh
YmxlRW50cnkmKSBjb25zdDsKLSAgICBpbnQgcmVnaXN0ZXJzT2Zmc2V0KCk7Ci0gICAgc3RhdGlj
IGludCByZWdpc3RlcnNPZmZzZXQoU3ltYm9sVGFibGUqKTsKLQogcHJvdGVjdGVkOgogICAgIHN0
YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRlc0dldE93blByb3Bl
cnR5U2xvdCB8IE92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMgfCBCYXNlOjpTdHJ1Y3R1cmVGbGFn
czsKIApAQCAtOTYsMzIgKzg0LDEzIEBAIHByaXZhdGU6CiAgICAgYm9vbCBzeW1ib2xUYWJsZUdl
dChQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYsIGJvb2wmIHNsb3RJc1dyaXRlYWJsZSk7CiAg
ICAgYm9vbCBzeW1ib2xUYWJsZVB1dChFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUs
IGJvb2wgc2hvdWxkVGhyb3cpOwogICAgIGJvb2wgc3ltYm9sVGFibGVQdXRXaXRoQXR0cmlidXRl
cyhWTSYsIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcyk7Ci0KLSAg
ICBzdGF0aWMgc2l6ZV90IGFsbG9jYXRpb25TaXplKFN5bWJvbFRhYmxlKik7Ci0gICAgc3RhdGlj
IHNpemVfdCBzdG9yYWdlT2Zmc2V0KCk7Ci0KLSAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHN0
b3JhZ2UoKTsgLy8gY2FwdHVyZUNvdW50KCkgbnVtYmVyIG9mIHJlZ2lzdGVycy4KIH07CiAKLWlu
bGluZSBKU0xleGljYWxFbnZpcm9ubWVudDo6SlNMZXhpY2FsRW52aXJvbm1lbnQoVk0mIHZtLCBD
YWxsRnJhbWUqIGNhbGxGcmFtZSwgUmVnaXN0ZXIqIHJlZ2lzdGVycywgSlNTY29wZSogY3VycmVu
dFNjb3BlLCBDb2RlQmxvY2sqIGNvZGVCbG9jaykKLSAgICA6IEJhc2UoCi0gICAgICAgIHZtLAot
ICAgICAgICBjYWxsRnJhbWUtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+YWN0aXZhdGlvblN0cnVj
dHVyZSgpLAotICAgICAgICByZWdpc3RlcnMsCi0gICAgICAgIGN1cnJlbnRTY29wZSwKLSAgICAg
ICAgY29kZUJsb2NrLT5zeW1ib2xUYWJsZSgpKQoraW5saW5lIEpTTGV4aWNhbEVudmlyb25tZW50
OjpKU0xleGljYWxFbnZpcm9ubWVudChWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU1Nj
b3BlKiBjdXJyZW50U2NvcGUsIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSkKKyAgICA6IEJhc2Uo
dm0sIHN0cnVjdHVyZSwgY3VycmVudFNjb3BlLCBzeW1ib2xUYWJsZSkKIHsKLSAgICBTeW1ib2xU
YWJsZSogc3ltYm9sVGFibGUgPSBjb2RlQmxvY2stPnN5bWJvbFRhYmxlKCk7Ci0gICAgV3JpdGVC
YXJyaWVyPFVua25vd24+KiBzdG9yYWdlID0gdGhpcy0+c3RvcmFnZSgpOwotICAgIHNpemVfdCBj
YXB0dXJlQ291bnQgPSBzeW1ib2xUYWJsZS0+Y2FwdHVyZUNvdW50KCk7Ci0gICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBjYXB0dXJlQ291bnQ7ICsraSkKLSAgICAgICAgbmV3IChOb3ROdWxsLCAm
c3RvcmFnZVtpXSkgV3JpdGVCYXJyaWVyPFVua25vd24+KFVuZGVmaW5lZFdyaXRlQmFycmllclRh
Zyk7Ci0gICAgbV9yZWdpc3RlcnMgPSByZWludGVycHJldF9jYXN0X3B0cjxXcml0ZUJhcnJpZXJC
YXNlPFVua25vd24+Kj4oCi0gICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHRoaXMpICsg
cmVnaXN0ZXJzT2Zmc2V0KHN5bWJvbFRhYmxlKSk7CiB9CiAKLUpTTGV4aWNhbEVudmlyb25tZW50
KiBhc0FjdGl2YXRpb24oSlNWYWx1ZSk7Ci0KIGlubGluZSBKU0xleGljYWxFbnZpcm9ubWVudCog
YXNBY3RpdmF0aW9uKEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgQVNTRVJUKGFzT2JqZWN0KHZhbHVl
KS0+aW5oZXJpdHMoSlNMZXhpY2FsRW52aXJvbm1lbnQ6OmluZm8oKSkpOwpAQCAtMTMzLDQ5ICsx
MDIsNiBAQCBBTFdBWVNfSU5MSU5FIEpTTGV4aWNhbEVudmlyb25tZW50KiBSZWdpCiAgICAgcmV0
dXJuIGFzQWN0aXZhdGlvbihqc1ZhbHVlKCkpOwogfQogCi1pbmxpbmUgaW50IEpTTGV4aWNhbEVu
dmlyb25tZW50OjpyZWdpc3RlcnNPZmZzZXQoU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlKQotewot
ICAgIHJldHVybiBzdG9yYWdlT2Zmc2V0KCkgKyAoKHN5bWJvbFRhYmxlLT5jYXB0dXJlQ291bnQo
KSAtIHN5bWJvbFRhYmxlLT5jYXB0dXJlU3RhcnQoKSAgLSAxKSAqIHNpemVvZihXcml0ZUJhcnJp
ZXI8VW5rbm93bj4pKTsKLX0KLQotaW5saW5lIHNpemVfdCBKU0xleGljYWxFbnZpcm9ubWVudDo6
c3RvcmFnZU9mZnNldCgpCi17Ci0gICAgcmV0dXJuIFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZjxz
aXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KT4oc2l6ZW9mKEpTTGV4aWNhbEVudmlyb25tZW50
KSk7Ci19Ci0KLWlubGluZSBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIEpTTGV4aWNhbEVudmlyb25t
ZW50OjpzdG9yYWdlKCkKLXsKLSAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdF9wdHI8V3JpdGVC
YXJyaWVyPFVua25vd24+Kj4oCi0gICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHRoaXMp
ICsgc3RvcmFnZU9mZnNldCgpKTsKLX0KLQotaW5saW5lIHNpemVfdCBKU0xleGljYWxFbnZpcm9u
bWVudDo6YWxsb2NhdGlvblNpemUoU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlKQotewotICAgIHNp
emVfdCBvYmplY3RTaXplSW5CeXRlcyA9IFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZjxzaXplb2Yo
V3JpdGVCYXJyaWVyPFVua25vd24+KT4oc2l6ZW9mKEpTTGV4aWNhbEVudmlyb25tZW50KSk7Ci0g
ICAgc2l6ZV90IHN0b3JhZ2VTaXplSW5CeXRlcyA9IHN5bWJvbFRhYmxlLT5jYXB0dXJlQ291bnQo
KSAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pOwotICAgIHJldHVybiBvYmplY3RTaXpl
SW5CeXRlcyArIHN0b3JhZ2VTaXplSW5CeXRlczsKLX0KLQotaW5saW5lIGJvb2wgSlNMZXhpY2Fs
RW52aXJvbm1lbnQ6OmlzVmFsaWRJbmRleChpbnQgaW5kZXgpIGNvbnN0Ci17Ci0gICAgaWYgKGlu
ZGV4ID4gc3ltYm9sVGFibGUoKS0+Y2FwdHVyZVN0YXJ0KCkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICBpZiAoaW5kZXggPD0gc3ltYm9sVGFibGUoKS0+Y2FwdHVyZUVuZCgpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWlubGluZSBib29sIEpTTGV4
aWNhbEVudmlyb25tZW50Ojppc1ZhbGlkKGNvbnN0IFN5bWJvbFRhYmxlRW50cnkmIGVudHJ5KSBj
b25zdAotewotICAgIHJldHVybiBpc1ZhbGlkSW5kZXgoZW50cnkuZ2V0SW5kZXgoKSk7Ci19Ci0K
LWlubGluZSBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+JiBKU0xleGljYWxFbnZpcm9ubWVudDo6
cmVnaXN0ZXJBdChpbnQgaW5kZXgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKGlzVmFsaWRJbmRleChp
bmRleCkpOwotICAgIHJldHVybiBCYXNlOjpyZWdpc3RlckF0KGluZGV4KTsKLX0KLQogfSAvLyBu
YW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBKU0xleGljYWxFbnZpcm9ubWVudF9oCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU05hbWVTY29wZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNOYW1lU2NvcGUuY3BwCShyZXZpc2lv
biAxODA1NjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU05hbWVTY29wZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDE0ICs0Nyw2IEBAIEpTTmFtZVNjb3BlKiBKU05hbWVT
Y29wZTo6Y3JlYXRlKFZNJiB2bSwKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotdm9pZCBKU05h
bWVTY29wZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQotewotICAgIEpTTmFtZVNjb3BlKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTTmFtZVNjb3BlKj4o
Y2VsbCk7Ci0gICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkp
OwotICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7Ci0gICAgdmlz
aXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fcmVnaXN0ZXJTdG9yZSk7Ci19Ci0KIEpTVmFsdWUg
SlNOYW1lU2NvcGU6OnRvVGhpcyhKU0NlbGwqLCBFeGVjU3RhdGUqIGV4ZWMsIEVDTUFNb2RlIGVj
bWFNb2RlKQogewogICAgIGlmIChlY21hTW9kZSA9PSBTdHJpY3RNb2RlKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNOYW1lU2NvcGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU05hbWVTY29wZS5oCShyZXZpc2lvbiAxODA1NjUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU05hbWVTY29wZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC00NCwzOCArNDQsMzcgQEAgcHVibGljOgogICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFQ+CiAgICAgc3RhdGljIFQqIGNyZWF0ZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTU2NvcGUqIGN1cnJlbnRTY29wZSwgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlLCBK
U1ZhbHVlIHZhbHVlKQogICAgIHsKLSAgICAgICAgVCogc2NvcGVPYmplY3QgPSBuZXcgKE5vdE51
bGwsIGFsbG9jYXRlQ2VsbDxUPih2bS5oZWFwKSkgVCh2bSwgZ2xvYmFsT2JqZWN0LCBjdXJyZW50
U2NvcGUsIHN5bWJvbFRhYmxlKTsKKyAgICAgICAgVCogc2NvcGVPYmplY3QgPSBuZXcgKAorICAg
ICAgICAgICAgTm90TnVsbCwgYWxsb2NhdGVDZWxsPFQ+KHZtLmhlYXAsIGFsbG9jYXRpb25TaXpl
Rm9yU2NvcGVTaXplKDEpKQorICAgICAgICAgICAgVCh2bSwgZ2xvYmFsT2JqZWN0LCBjdXJyZW50
U2NvcGUsIHN5bWJvbFRhYmxlKTsKICAgICAgICAgc2NvcGVPYmplY3QtPmZpbmlzaENyZWF0aW9u
KHZtLCB2YWx1ZSk7CiAgICAgICAgIHJldHVybiBzY29wZU9iamVjdDsKICAgICB9CiAgICAgCiAg
ICAgc3RhdGljIEpTTmFtZVNjb3BlKiBjcmVhdGUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTU2Nv
cGUqIGN1cnJlbnRTY29wZSwgU3ltYm9sVGFibGUqLCBKU1ZhbHVlLCBUeXBlKTsKIAotICAgIHN0
YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKICAgICBzdGF0
aWMgSlNWYWx1ZSB0b1RoaXMoSlNDZWxsKiwgRXhlY1N0YXRlKiwgRUNNQU1vZGUpOwogICAgIHN0
YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3Bl
cnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CiAgICAgc3RhdGljIHZvaWQgcHV0KEpTQ2VsbCosIEV4
ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CiAKICAg
ICBERUNMQVJFX0lORk87CiAKLSAgICBKU1ZhbHVlIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9y
ZWdpc3RlclN0b3JlLmdldCgpOyB9CisgICAgSlNWYWx1ZSB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJu
IHZhcmlhYmxlQXQoMCkuZ2V0KCk7IH0KIAogcHJvdGVjdGVkOgogICAgIHZvaWQgZmluaXNoQ3Jl
YXRpb24oVk0mIHZtLCBKU1ZhbHVlIHZhbHVlKQogICAgIHsKLSAgICAgICAgQmFzZTo6ZmluaXNo
Q3JlYXRpb24odm0pOwotICAgICAgICBtX3JlZ2lzdGVyU3RvcmUuc2V0KHZtLCB0aGlzLCB2YWx1
ZSk7CisgICAgICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uVW5pbml0aWFsaXplZCh2bSk7CisgICAg
ICAgIHZhcmlhYmxlQXQoMCkuc2V0KHZtLCB0aGlzLCB2YWx1ZSk7CiAgICAgfQogCiAgICAgc3Rh
dGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVzR2V0T3duUHJvcGVy
dHlTbG90IHwgQmFzZTo6U3RydWN0dXJlRmxhZ3M7CiAKICAgICBKU05hbWVTY29wZShWTSYgdm0s
IFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU1Njb3BlKiBuZXh0LCBTeW1ib2xUYWJsZSogc3ltYm9s
VGFibGUpCi0gICAgICAgIDogQmFzZSh2bSwgc3RydWN0dXJlLCByZWludGVycHJldF9jYXN0PFJl
Z2lzdGVyKj4oJm1fcmVnaXN0ZXJTdG9yZSArIDEpLCBuZXh0LCBzeW1ib2xUYWJsZSkKKyAgICAg
ICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUsIG5leHQsIHN5bWJvbFRhYmxlKQogICAgIHsKKyAgICAg
ICAgQVNTRVJUKHN5bWJvbFRhYmxlLT5zY29wZVNpemUoKSA9PSAxKTsKICAgICB9Ci0KLXByaXZh
dGU6Ci0gICAgV3JpdGVCYXJyaWVyPFVua25vd24+IG1fcmVnaXN0ZXJTdG9yZTsKIH07CiAKIH0K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVP
YmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
U2VnbWVudGVkVmFyaWFibGVPYmplY3QuY3BwCShyZXZpc2lvbiAxODA1NjUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIw
MTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEy
LCAyMDEzLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzMsMzIgKzMzLDMwIEBACiAKIG5hbWVzcGFjZSBKU0Mg
ewogCi1pbnQgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdDo6ZmluZFJlZ2lzdGVySW5kZXgodm9p
ZCogcmVnaXN0ZXJBZGRyZXNzKQorU2NvcGVPZmZzZXQgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVj
dDo6ZmluZFJlZ2lzdGVySW5kZXgodm9pZCogcmVnaXN0ZXJBZGRyZXNzKQogewogICAgIENvbmN1
cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7CiAgICAgCi0gICAgZm9yIChpbnQgaSA9IG1f
cmVnaXN0ZXJzLnNpemUoKTsgaS0tOykgeworICAgIGZvciAodW5zaWduZWQgaSA9IG1fcmVnaXN0
ZXJzLnNpemUoKTsgaS0tOykgewogICAgICAgICBpZiAoJm1fcmVnaXN0ZXJzW2ldICE9IHJlZ2lz
dGVyQWRkcmVzcykKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICByZXR1cm4gaTsKKyAg
ICAgICAgcmV0dXJuIFNjb3BlT2Zmc2V0KGkpOwogICAgIH0KICAgICBDUkFTSCgpOwotICAgIHJl
dHVybiAtMTsKKyAgICByZXR1cm4gU2NvcGVPZmZzZXQoKTsKIH0KIAotaW50IEpTU2VnbWVudGVk
VmFyaWFibGVPYmplY3Q6OmFkZFJlZ2lzdGVycyhpbnQgbnVtYmVyT2ZSZWdpc3RlcnNUb0FkZCkK
K1Njb3BlT2Zmc2V0IEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3Q6OmFkZFJlZ2lzdGVycyh1bnNp
Z25lZCBudW1iZXJPZlJlZ2lzdGVyc1RvQWRkKQogewogICAgIENvbmN1cnJlbnRKSVRMb2NrZXIg
bG9ja2VyKG1fbG9jayk7CiAgICAgCi0gICAgQVNTRVJUKG51bWJlck9mUmVnaXN0ZXJzVG9BZGQg
Pj0gMCk7Ci0gICAgCiAgICAgc2l6ZV90IG9sZFNpemUgPSBtX3JlZ2lzdGVycy5zaXplKCk7CiAg
ICAgbV9yZWdpc3RlcnMuZ3JvdyhvbGRTaXplICsgbnVtYmVyT2ZSZWdpc3RlcnNUb0FkZCk7CiAg
ICAgCiAgICAgZm9yIChzaXplX3QgaSA9IG51bWJlck9mUmVnaXN0ZXJzVG9BZGQ7IGktLTspCiAg
ICAgICAgIG1fcmVnaXN0ZXJzW29sZFNpemUgKyBpXS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKGpz
VW5kZWZpbmVkKCkpOwogICAgIAotICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KG9sZFNpemUp
OworICAgIHJldHVybiBTY29wZU9mZnNldChvbGRTaXplKTsKIH0KIAogdm9pZCBKU1NlZ21lbnRl
ZFZhcmlhYmxlT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3Im
IHNsb3RWaXNpdG9yKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdt
ZW50ZWRWYXJpYWJsZU9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuaAkocmV2aXNpb24gMTgwNTY1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVj
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC01NywyNCArNTcsMjMgQEAgY2xhc3MgSlNTZWdtZW50ZWRW
YXJpYWJsZU9iamVjdCA6IHB1YmxpYwogcHVibGljOgogICAgIHR5cGVkZWYgSlNTeW1ib2xUYWJs
ZU9iamVjdCBCYXNlOwogCi0gICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiByZWdpc3RlckF0KGlu
dCBpbmRleCkgeyByZXR1cm4gbV9yZWdpc3RlcnNbaW5kZXhdOyB9CisgICAgV3JpdGVCYXJyaWVy
PFVua25vd24+JiB2YXJpYWJsZUF0KFNjb3BlT2Zmc2V0IG9mZnNldCkgeyByZXR1cm4gbV92YXJp
YWJsZXNbb2Zmc2V0Lm9mZnNldCgpXTsgfQogICAgIAogICAgIC8vIFRoaXMgaXMgYSBzbG93IG1l
dGhvZCBjYWxsLCB3aGljaCBzZWFyY2hlcyB0aGUgcmVnaXN0ZXIgYmFuayB0byBmaW5kIHRoZSBp
bmRleAogICAgIC8vIGdpdmVuIGEgcG9pbnRlci4gSXQgd2lsbCBDUkFTSCgpIGlmIGl0IGRvZXMg
bm90IGZpbmQgdGhlIHJlZ2lzdGVyLiBPbmx5IHVzZSB0aGlzCiAgICAgLy8gaW4gZGVidWcgY29k
ZSAobGlrZSBieXRlY29kZSBkdW1waW5nKS4KLSAgICBKU19FWFBPUlRfUFJJVkFURSBpbnQgZmlu
ZFJlZ2lzdGVySW5kZXgodm9pZCopOworICAgIEpTX0VYUE9SVF9QUklWQVRFIFNjb3BlT2Zmc2V0
IGZpbmRSZWdpc3RlckluZGV4KHZvaWQqKTsKICAgICAKLSAgICBXcml0ZUJhcnJpZXI8VW5rbm93
bj4qIGFzc2VydFJlZ2lzdGVySXNJblRoaXNPYmplY3QoV3JpdGVCYXJyaWVyPFVua25vd24+KiBy
ZWdpc3RlclBvaW50ZXIpCisgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiBhc3NlcnRWYXJpYWJs
ZUlzSW5UaGlzT2JqZWN0KFdyaXRlQmFycmllcjxVbmtub3duPiogdmFyaWFibGVQb2ludGVyKQog
ICAgIHsKLSNpZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgICAgIGZpbmRSZWdpc3RlckluZGV4KHJl
Z2lzdGVyUG9pbnRlcik7Ci0jZW5kaWYKKyAgICAgICAgaWYgKCFBU1NFUlRfRElTQUJMRUQpCisg
ICAgICAgICAgICBmaW5kUmVnaXN0ZXJJbmRleChyZWdpc3RlclBvaW50ZXIpOwogICAgICAgICBy
ZXR1cm4gcmVnaXN0ZXJQb2ludGVyOwogICAgIH0KICAgICAKICAgICAvLyBBZGRzIG51bWJlck9m
UmVnaXN0ZXJzVG9BZGQgcmVnaXN0ZXJzLCBpbml0aWFsaXplcyB0aGVtIHRvIFVuZGVmaW5lZCwg
YW5kIHJldHVybnMKICAgICAvLyB0aGUgaW5kZXggb2YgdGhlIGZpcnN0IG9uZSBhZGRlZC4KLSAg
ICBKU19FWFBPUlRfUFJJVkFURSBpbnQgYWRkUmVnaXN0ZXJzKGludCBudW1iZXJPZlJlZ2lzdGVy
c1RvQWRkKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBTY29wZU9mZnNldCBhZGRSZWdpc3RlcnMo
dW5zaWduZWQgbnVtYmVyT2ZSZWdpc3RlcnNUb0FkZCk7CiAgICAgCiAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xU
YWJsZU9iamVjdC5oCShyZXZpc2lvbiAxODA1NjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTc4LDcgKzc4
LDcgQEAgaW5saW5lIGJvb2wgc3ltYm9sVGFibGVHZXQoCiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICBTeW1ib2xUYWJsZUVudHJ5OjpGYXN0IGVudHJ5ID0gaXRlci0+dmFsdWU7CiAgICAgQVNT
RVJUKCFlbnRyeS5pc051bGwoKSk7Ci0gICAgc2xvdC5zZXRWYWx1ZShvYmplY3QsIGVudHJ5Lmdl
dEF0dHJpYnV0ZXMoKSB8IERvbnREZWxldGUsIG9iamVjdC0+cmVnaXN0ZXJBdChlbnRyeS5nZXRJ
bmRleCgpKS5nZXQoKSk7CisgICAgc2xvdC5zZXRWYWx1ZShvYmplY3QsIGVudHJ5LmdldEF0dHJp
YnV0ZXMoKSB8IERvbnREZWxldGUsIG9iamVjdC0+dmFyaWFibGVBdChlbnRyeS5zY29wZU9mZnNl
dCgpKS5nZXQoKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTk0LDcgKzk0LDcgQEAgaW5s
aW5lIGJvb2wgc3ltYm9sVGFibGVHZXQoCiAgICAgU3ltYm9sVGFibGVFbnRyeTo6RmFzdCBlbnRy
eSA9IGl0ZXItPnZhbHVlOwogICAgIEFTU0VSVCghZW50cnkuaXNOdWxsKCkpOwogICAgIGRlc2Ny
aXB0b3Iuc2V0RGVzY3JpcHRvcigKLSAgICAgICAgb2JqZWN0LT5yZWdpc3RlckF0KGVudHJ5Lmdl
dEluZGV4KCkpLmdldCgpLCBlbnRyeS5nZXRBdHRyaWJ1dGVzKCkgfCBEb250RGVsZXRlKTsKKyAg
ICAgICAgb2JqZWN0LT52YXJpYWJsZUF0KGVudHJ5LnNjb3BlT2Zmc2V0KCkpLmdldCgpLCBlbnRy
eS5nZXRBdHRyaWJ1dGVzKCkgfCBEb250RGVsZXRlKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApA
QCAtMTEwLDcgKzExMCw3IEBAIGlubGluZSBib29sIHN5bWJvbFRhYmxlR2V0KAogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgU3ltYm9sVGFibGVFbnRyeTo6RmFzdCBlbnRyeSA9IGl0ZXItPnZh
bHVlOwogICAgIEFTU0VSVCghZW50cnkuaXNOdWxsKCkpOwotICAgIHNsb3Quc2V0VmFsdWUob2Jq
ZWN0LCBlbnRyeS5nZXRBdHRyaWJ1dGVzKCkgfCBEb250RGVsZXRlLCBvYmplY3QtPnJlZ2lzdGVy
QXQoZW50cnkuZ2V0SW5kZXgoKSkuZ2V0KCkpOworICAgIHNsb3Quc2V0VmFsdWUob2JqZWN0LCBl
bnRyeS5nZXRBdHRyaWJ1dGVzKCkgfCBEb250RGVsZXRlLCBvYmplY3QtPnZhcmlhYmxlQXQoZW50
cnkuc2NvcGVPZmZzZXQoKSkuZ2V0KCkpOwogICAgIHNsb3RJc1dyaXRlYWJsZSA9ICFlbnRyeS5p
c1JlYWRPbmx5KCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC0xNDUsNyArMTQ1LDcgQEAgaW5s
aW5lIGJvb2wgc3ltYm9sVGFibGVQdXQoCiAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM0NjAxCiAgICAgICAgICAgICBzZXQtPm5vdGlmeVdy
aXRlKHZtLCB2YWx1ZSwgb2JqZWN0LCBwcm9wZXJ0eU5hbWUpOwogICAgICAgICB9Ci0gICAgICAg
IHJlZyA9ICZvYmplY3QtPnJlZ2lzdGVyQXQoZmFzdEVudHJ5LmdldEluZGV4KCkpOworICAgICAg
ICByZWcgPSAmb2JqZWN0LT52YXJpYWJsZUF0KGZhc3RFbnRyeS5zY29wZU9mZnNldCgpKTsKICAg
ICB9CiAgICAgLy8gSSdkIHByZWZlciB3ZSBub3QgaG9sZCBsb2NrIHdoaWxlIGV4ZWN1dGluZyBi
YXJyaWVycywgc2luY2UgSSBwcmVmZXIgdG8gcmVzZXJ2ZQogICAgIC8vIHRoZSByaWdodCBmb3Ig
YmFycmllcnMgdG8gYmUgYWJsZSB0byB0cmlnZ2VyIEdDLiBBbmQgSSBkb24ndCB3YW50IHRvIGhv
bGQgVk0KQEAgLTE3Myw3ICsxNzMsNyBAQCBpbmxpbmUgYm9vbCBzeW1ib2xUYWJsZVB1dFdpdGhB
dHRyaWJ1dGVzCiAgICAgICAgIGlmIChWYXJpYWJsZVdhdGNocG9pbnRTZXQqIHNldCA9IGVudHJ5
LndhdGNocG9pbnRTZXQoKSkKICAgICAgICAgICAgIHNldC0+bm90aWZ5V3JpdGUodm0sIHZhbHVl
LCBvYmplY3QsIHByb3BlcnR5TmFtZSk7CiAgICAgICAgIGVudHJ5LnNldEF0dHJpYnV0ZXMoYXR0
cmlidXRlcyk7Ci0gICAgICAgIHJlZyA9ICZvYmplY3QtPnJlZ2lzdGVyQXQoZW50cnkuZ2V0SW5k
ZXgoKSk7CisgICAgICAgIHJlZyA9ICZvYmplY3QtPnZhcmlhYmxlQXQoZW50cnkuc2NvcGVPZmZz
ZXQoKSk7CiAgICAgfQogICAgIHJlZy0+c2V0KHZtLCBvYmplY3QsIHZhbHVlKTsKICAgICByZXR1
cm4gdHJ1ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL091dE9mQmFuZEFy
Z3VtZW50cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
T3V0T2ZCYW5kQXJndW1lbnRzLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL091dE9mQmFuZEFyZ3VtZW50cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwxMjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk91dE9mQmFuZEFyZ3VtZW50cy5oIgor
CisjaW5jbHVkZSAiSlNBcmd1bWVudHNJdGVyYXRvci5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMu
aCIKKworbmFtZXNwYWNlIEpTQyB7CisKK1NUQVRJQ19BU1NFUlRfSVNfVFJJVklBTExZX0RFU1RS
VUNUSUJMRShPdXRPZkJhbmRBcmd1bWVudHMpOworCitjb25zdCBDbGFzc0luZm8gT3V0T2ZCYW5k
QXJndW1lbnRzOjpzX2luZm8gPSB7ICJBcmd1bWVudHMiLCAmQmFzZTo6c19pbmZvLCAwLCBDUkVB
VEVfTUVUSE9EX1RBQkxFKE91dE9mQmFuZEFyZ3VtZW50cykgfTsKKworT3V0T2ZCYW5kQXJndW1l
bnRzOjpPdXRPZkJhbmRBcmd1bWVudHMoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAg
ICA6IEJhc2Uodm0sIHN0cnVjdHVyZSwgbnVsbHB0cikKK3sKK30KKworT3V0T2ZCYW5kQXJndW1l
bnRzKiBPdXRPZkJhbmRBcmd1bWVudHM6OmNyZWF0ZUVtcHR5KFZNJiB2bSwgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCkKK3sKKyAgICBPdXRPZkJhbmRBcmd1bWVudHMqIHJlc3VsdCA9IG5l
dyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPE91dE9mQmFuZEFyZ3VtZW50cz4odm0uaGVhcCkpCisg
ICAgICAgIE91dE9mQmFuZEFyZ3VtZW50cyh2bSwgZ2xvYmFsT2JqZWN0LT5vdXRPZkJhbmRBcmd1
bWVudHNTdHJ1Y3R1cmUoKSk7CisgICAgcmVzdWx0LT5maW5pc2hDcmVhdGlvbih2bSk7CisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKworT3V0T2ZCYW5kQXJndW1lbnRzKiBPdXRPZkJhbmRBcmd1bWVu
dHM6OmNyZWF0ZUVtcHR5KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICAvLyBOQi4gU29tZSBjbGll
bnRzIG1pZ2h0IGV4cGVjdCB0aGF0IHRoZSBnbG9iYWwgb2JqZWN0IG9mIG9mIHRoaXMgb2JqZWN0
IGlzIHRoZSBnbG9iYWwgb2JqZWN0CisgICAgLy8gb2YgdGhlIGNhbGxlZS4gV2UgZG9uJ3QgZG8g
dGhpcyBmb3Igbm93LCBidXQgbWF5YmUgd2Ugc2hvdWxkLgorICAgIHJldHVybiBjcmVhdGVFbXB0
eShleGVjLT52bSgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpOworfQorCitPdXRPZkJh
bmRBcmd1bWVudHMqIE91dE9mQmFuZEFyZ3VtZW50czo6Y3JlYXRlV2l0aElubGluZUZyYW1lKEV4
ZWNTdGF0ZSogbXlGcmFtZSwgRXhlY1N0YXRlKiB0YXJnZXRGcmFtZSwgSW5saW5lQ2FsbEZyYW1l
KiBpbmxpbmVDYWxsRnJhbWUsIEFyZ3VtZW50c01vZGUgbW9kZSkKK3sKKyAgICBWTSYgdm0gPSBt
eUZyYW1lLT52bSgpOworICAgIAorICAgIEpTRnVuY3Rpb24qIGNhbGxlZTsKKyAgICBGdW5jdGlv
bkV4ZWN1dGFibGUqIGV4ZWN1dGFibGU7CisgICAgCisgICAgaWYgKGlubGluZUNhbGxGcmFtZSkg
eworICAgICAgICBjYWxsZWUgPSBqc0Nhc3Q8SlNGdW5jdGlvbio+KGlubGluZUNhbGxGcmFtZS0+
Y2FsbGVlUmVjb3ZlcnkucmVjb3Zlcih0YXJnZXRGcmFtZSkpOworICAgICAgICBleGVjdXRhYmxl
ID0ganNDYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGlubGluZUNhbGxGcmFtZS0+ZXhlY3V0YWJs
ZS5nZXQoKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgY2FsbGVlID0ganNDYXN0PEpTRnVuY3Rp
b24qPih0YXJnZXRGcmFtZS0+Y2FsbGVlKCkpOworICAgICAgICBleGVjdXRhYmxlID0ganNDYXN0
PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KHRhcmdldEZyYW1lLT5jb2RlQmxvY2soKS0+b3duZXJFeGVj
dXRhYmxlKCkpOworICAgIH0KKyAgICAKKyAgICAvLyBOQi4gSXQncyBzb21ld2hhdCBhcmJpdHJh
cnkgdGhhdCB3ZSB0aWUgdGhlIHN0cmljdG5lc3Mgb2YgdGhpcyBvYmplY3QgdG8gdGhlIHN0cmlj
dG5lc3Mgb2YKKyAgICAvLyB0aGUgY2FsbGVlLgorICAgIGJvb2wgaXNTdHJpY3RNb2RlID0gZXhl
Y3V0YWJsZS0+aXNTdHJpY3RNb2RlKCk7CisKKyAgICBPdXRPZkJhbmRBcmd1bWVudHMqIHJlc3Vs
dCA9IGNyZWF0ZUVtcHR5KG15RnJhbWUpOworICAgIAorICAgIHVuc2lnbmVkIGxlbmd0aDsKKyAg
ICBzd2l0Y2ggKG1vZGUpIHsKKyAgICBjYXNlIENsb25lZEFyZ3VtZW50c0NyZWF0aW9uTW9kZTog
eworICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lKSB7CisgICAgICAgICAgICBpZiAoaW5saW5l
Q2FsbEZyYW1lLT5hcmd1bWVudENvdW50UmVnaXN0ZXIuaXNWYWxpZCgpKQorICAgICAgICAgICAg
ICAgIGxlbmd0aCA9IGV4ZWMtPnIoaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50UmVnaXN0
ZXIpLnVuYm94ZWRJbnQzMigpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGxl
bmd0aCA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKTsKKyAgICAgICAgICAgIGxl
bmd0aC0tOworICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBsZW5n
dGg7IGktLTspCisgICAgICAgICAgICAgICAgcmVzdWx0LT5wdXREaXJlY3RJbmRleChteUZyYW1l
LCBpLCBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50c1tpXS5yZWNvdmVyKHRhcmdldEZyYW1lKSk7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBsZW5ndGggPSB0YXJnZXRGcmFtZS0+YXJn
dW1lbnRDb3VudCgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSBsZW5ndGg7IGktLTspCisgICAgICAgICAgICAgICAgcmVzdWx0LT5wdXREaXJlY3RJbmRleCht
eUZyYW1lLCBpLCB0YXJnZXRGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoaSkpOworICAgICAgICB9
CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBGYWtlQXJndW1lbnRW
YWx1ZXNDcmVhdGlvbk1vZGU6IHsKKyAgICAgICAgbGVuZ3RoID0gMDsKKyAgICAgICAgYnJlYWs7
CisgICAgfSB9CisgICAgCisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFt
ZXMtPmxlbmd0aCwganNOdW1iZXIobGVuZ3RoKSk7CisgICAgaWYgKGlzU3RyaWN0TW9kZSkgewor
ICAgICAgICByZXN1bHQtPnB1dERpcmVjdEFjY2Vzc29yKGV4ZWMsIHZtLnByb3BlcnR5TmFtZXMt
PmNhbGxlZSwgdGhpc09iamVjdC0+Z2xvYmFsT2JqZWN0KCktPnRocm93VHlwZUVycm9yR2V0dGVy
U2V0dGVyKGV4ZWMtPnZtKCkpLCBEb250RGVsZXRlIHwgRG9udEVudW0gfCBBY2Nlc3Nvcik7Cisg
ICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0QWNjZXNzb3IoZXhlYywgdm0ucHJvcGVydHlOYW1lcy0+
Y2FsbGVlLCB0aGlzT2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+dGhyb3dUeXBlRXJyb3JHZXR0ZXJT
ZXR0ZXIoZXhlYy0+dm0oKSksIERvbnREZWxldGUgfCBEb250RW51bSB8IEFjY2Vzc29yKTsKKyAg
ICB9IGVsc2UKKyAgICAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMt
PmNhbGxlZSwgSlNWYWx1ZShjYWxsZWUpKTsKKyAgICAKKyAgICByZXN1bHQtPkpTQ19OQVRJVkVf
RlVOQ1RJT04odm0ucHJvcGVydHlOYW1lcy0+aXRlcmF0b3JQcml2YXRlTmFtZSwgYXJndW1lbnRz
RnVuY0l0ZXJhdG9yLCBEb250RW51bSwgMCk7Cit9CisKK091dE9mQmFuZEFyZ3VtZW50cyogT3V0
T2ZCYW5kQXJndW1lbnRzOjpjcmVhdGVXaXRoTWFjaGluZUZyYW1lKEV4ZWNTdGF0ZSogbXlGcmFt
ZSwgRXhlY1N0YXRlKiB0YXJnZXRGcmFtZSwgQXJndW1lbnRzTW9kZSBtb2RlKQoreworICAgIHJl
dHVybiBjcmVhdGVXaXRoSW5saW5lRnJhbWUobXlGcmFtZSwgdGFyZ2V0RnJhbWUsIG51bGxwdHIs
IG1vZGUpOworfQorCitTdHJ1Y3R1cmUqIE91dE9mQmFuZEFyZ3VtZW50czo6Y3JlYXRlU3RydWN0
dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5
cGUpCit7CisgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHBy
b3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwor
fQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvT3V0T2ZCYW5kQXJndW1lbnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvT3V0T2ZCYW5kQXJndW1lbnRzLmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PdXRPZkJhbmRBcmd1bWVudHMuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZm5kZWYgT3V0T2ZCYW5kQXJndW1lbnRzX2gKKyNkZWZpbmUgT3V0T2ZC
YW5kQXJndW1lbnRzX2gKKworI2luY2x1ZGUgIkFyZ3VtZW50c01vZGUuaCIKKyNpbmNsdWRlICJK
U09iamVjdC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworLy8gVGhpcyBpcyBhbiBBcmd1bWVudHMt
Y2xhc3Mgb2JqZWN0IHRoYXQgd2UgY3JlYXRlIHdoZW4geW91IGRvIGZ1bmN0aW9uLmFyZ3VtZW50
cy4gSXQgYmVoYXZlcworLy8gZW50aXJlbHkgbGlrZSBhbiBvcmRpbmFyeSBKYXZhU2NyaXB0IG9i
amVjdC4gQWxsIG9mIHRoZSBhcmd1bWVudHMgdmFsdWVzIGFyZSBzaW1wbHkgY29waWVkIGZyb20K
Ky8vIHRoZSBzdGFjayAocG9zc2libHkgdmlhIHNvbWUgc29waGlzdGljYXRlZCBWYWx1ZVJlY292
ZXJ5J3MgaWYgYW4gb3B0aW1pemluZyBjb21waWxlciBpcyBpbgorLy8gcGxheSkgYW5kIHRoZSBh
cHByb3ByaWF0ZSBwcm9wZXJ0aWVzIG9mIHRoZSBvYmplY3QgYXJlIHBvcHVsYXRlZC4gVGhlIG9u
bHkgcmVhc29uIHdoeSB3ZSBuZWVkCisvLyBhIHNwZWNpYWwgY2xhc3MgaXMgdG8gbWFrZSB0aGUg
b2JqZWN0IGNsYWltIHRvIGJlICJBcmd1bWVudHMiIGZyb20gYSB0b1N0cmluZyBzdGFuZHBvaW50
LgorLy8KKy8vIE5vdGUgdGhhdCB0aGlzIGNsYXNzIGRvZXMgYSBiYWQgam9iIG9mIGJlaW5nIGZh
c3QuIFRoYXQncyBzb21ld2hhdCBpbnRlbnRpb25hbC4gV2UgZXhwZWN0IHVzZXMKKy8vIG9mIGZ1
bmN0aW9uLmFyZ3VtZW50cyB0byBiZSByYXJlIG9uIHRoZSBtb2Rlcm4gd2ViLiBZb3Ugd2lsbCBn
ZXQgcGFydGljdWxhcmx5IGJhZCBwZXJmb3JtYW5jZQorLy8gaWYgeW91IHVzZSBmdW5jdGlvbi5h
cmd1bWVudHMgaW4gc3RyaWN0IG1vZGUuCitjbGFzcyBPdXRPZkJhbmRBcmd1bWVudHMgOiBwdWJs
aWMgSlNOb25GaW5hbE9iamVjdCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBKU05vbkZpbmFsT2Jq
ZWN0IEJhc2U7CisgICAgCitwcml2YXRlOgorICAgIE91dE9mQmFuZEFyZ3VtZW50cyhWTSYsIFN0
cnVjdHVyZSopOworCitwdWJsaWM6CisgICAgc3RhdGljIE91dE9mQmFuZEFyZ3VtZW50cyogY3Jl
YXRlRW1wdHkoVk0mLCBKU0dsb2JhbE9iamVjdCopOworICAgIHN0YXRpYyBPdXRPZkJhbmRBcmd1
bWVudHMqIGNyZWF0ZUVtcHR5KEV4ZWNTdGF0ZSopOworICAgIHN0YXRpYyBPdXRPZkJhbmRBcmd1
bWVudHMqIGNyZWF0ZVdpdGhJbmxpbmVGcmFtZShFeGVjU3RhdGUqIG15RnJhbWUsIEV4ZWNTdGF0
ZSogdGFyZ2V0RnJhbWUsIElubGluZUNhbGxGcmFtZSosIEFyZ3VtZW50c01vZGUpOworICAgIHN0
YXRpYyBPdXRPZkJhbmRBcmd1bWVudHMqIGNyZWF0ZVdpdGhNYWNoaW5lRnJhbWUoRXhlY1N0YXRl
KiBteUZyYW1lLCBFeGVjU3RhdGUqIHRhcmdldEZyYW1lLCBBcmd1bWVudHNNb2RlKTsKKyAgICAK
KyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVj
dCosIEpTVmFsdWUgcHJvdG90eXBlKTsKKyAgICAKKyAgICBERUNMQVJFX0lORk87Cit9OworCit9
IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIE91dE9mQmFuZEFyZ3VtZW50c19oCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlT2Zmc2V0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZU9mZnNldC5jcHAJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZU9mZnNldC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
U2NvcGVPZmZzZXQuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3ZvaWQgU2NvcGVPZmZzZXQ6OmR1
bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBpZiAoISp0aGlzKSB7CisgICAgICAg
IG91dC5wcmludCgic2NvcGVJbnZhbGlkIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
CisgICAgb3V0LnByaW50KCJzY29wZSIsIG9mZnNldCgpKTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
SlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlT2Zmc2V0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVPZmZzZXQu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlT2Zm
c2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFNjb3BlT2Zmc2V0X2gKKyNkZWZp
bmUgU2NvcGVPZmZzZXRfaAorCisjaW5jbHVkZSAiR2VuZXJpY09mZnNldC5oIgorI2luY2x1ZGUg
PHd0Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgSlNDIHsKKworLy8gVGhpcyBpcyBhbiBv
ZmZzZXQgaW50byBhIHNjb3BlIG9mIHNvbWUga2luZC4gSXQgY291bGQgYmUgYW4gYWN0aXZhdGlv
biBzY29wZSBvciBpdCBjb3VsZCBiZSBhCisvLyBnbG9iYWwgb2JqZWN0LgorY2xhc3MgU2NvcGVP
ZmZzZXQgOiBwdWJsaWMgR2VuZXJpY09mZnNldDxTY29wZU9mZnNldD4geworcHVibGljOgorICAg
IFNjb3BlT2Zmc2V0KCkgeyB9CisgICAgCisgICAgZXhwbGljaXQgU2NvcGVPZmZzZXQodW5zaWdu
ZWQgb2Zmc2V0KQorICAgICAgICA6IEdlbmVyaWNPZmZzZXQob2Zmc2V0KQorICAgIHsKKyAgICB9
CisgICAgCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7Cit9OworCit9IC8vIG5h
bWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIFNjb3BlT2Zmc2V0X2gKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHMuY3BwCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
U2NvcGVkQXJndW1lbnRzLmgiCisKKyNpbmNsdWRlICJHZW5lcmljQXJndW1lbnRzSW5saW5lcy5o
IgorI2luY2x1ZGUgIkpTQXJndW1lbnRzSXRlcmF0b3IuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVz
LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitTVEFUSUNfQVNTRVJUX0lTX1RSSVZJQUxMWV9ERVNU
UlVDVElCTEUoU2NvcGVkQXJndW1lbnRzKTsKKworY29uc3QgQ2xhc3NJbmZvIFNjb3BlZEFyZ3Vt
ZW50czo6c19pbmZvID0geyAiQXJndW1lbnRzIiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRFX01F
VEhPRF9UQUJMRShTY29wZWRBcmd1bWVudHMpIH07CisKK1Njb3BlZEFyZ3VtZW50czo6U2NvcGVk
QXJndW1lbnRzKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgOiBHZW5lcmljQXJn
dW1lbnRzKHZtLCBzdHJ1Y3R1cmUpCisgICAgLCBtX292ZXJyb2RlVGhpbmdzKGZhbHNlKQorewor
fQorCit2b2lkIFNjb3BlZEFyZ3VtZW50czo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBKU0Z1bmN0
aW9uKiBjYWxsZWUsIFNjb3BlZEFyZ3VtZW50c1RhYmxlKiB0YWJsZSwgSlNMZXhpY2FsRW52aXJv
bm1lbnQqIHNjb3BlKQoreworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICBtX2Nh
bGxlZS5zZXQodm0sIHRoaXMsIGNhbGxlZSk7CisgICAgbV90YWJsZS5zZXQodm0sIHRoaXMsIHRh
YmxlKTsKKyAgICBtX3Njb3BlLnNldCh2bSwgdGhpcywgc2NvcGUpOworfQorCitTY29wZWRBcmd1
bWVudHMqIFNjb3BlZEFyZ3VtZW50czo6Y3JlYXRlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIEpTRnVuY3Rpb24qIGNhbGxlZSwgU2NvcGVkQXJndW1lbnRzVGFibGUqIHRhYmxlLCBKU0xl
eGljYWxFbnZpcm9ubWVudCogc2NvcGUpCit7CisgICAgU2NvcGVkQXJndW1lbnRzKiByZXN1bHQg
PQorICAgICAgICBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxTY29wZWRBcmd1bWVudHM+KHZt
LmhlYXApKQorICAgICAgICAodm0sIHN0cnVjdHVyZSk7CisgICAgcmVzdWx0LT5maW5pc2hDcmVh
dGlvbih2bSwgY2FsbGVlLCB0YWJsZSwgc2NvcGUpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisK
K3ZvaWQgU2NvcGVkQXJndW1lbnRzOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCit7CisgICAgU2NvcGVkQXJndW1lbnRzKiB0aGlzT2JqZWN0ID0gc3Rh
dGljX2Nhc3Q8U2NvcGVkQXJndW1lbnRzKj4oY2VsbCk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9J
TkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOworICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhp
c09iamVjdCwgdmlzaXRvcik7CisKKyAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9j
YWxsZWUpOworICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX3RhYmxlKTsKKyAgICB2
aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9zY29wZSk7Cit9CisKK1N0cnVjdHVyZSogU2Nv
cGVkQXJndW1lbnRzOjpjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKK3sKKyAgICByZXR1cm4gU3RydWN0dXJlOjpj
cmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhTY29wZWRBcmd1bWVu
dHNUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Cit9CisKK3ZvaWQgU2NvcGVkQXJndW1l
bnRzOjpzbG93RG93bkFuZFdhc3RlTWVtb3J5KFZNJiB2bSkKK3sKKyAgICBSRUxFQVNFX0FTU0VS
VCghbV9vdmVycm9kZVRoaW5ncyk7CisgICAgCisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0
eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKG1fdGFibGUtPmxlbmd0aCgpKSwgRG9udEVudW0pOwor
ICAgIAorICAgIGlmIChpc1N0cmljdE1vZGUoKSkgeworICAgICAgICBwdXREaXJlY3ROb25JbmRl
eEFjY2Vzc29yKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5jYWxsZWUsIGdsb2JhbE9iamVjdCgpLT50
aHJvd1R5cGVFcnJvckdldHRlclNldHRlcih2bSksIERvbnRFbnVtIHwgRG9udERlbGV0ZSB8IEFj
Y2Vzc29yKTsKKyAgICAgICAgcHV0RGlyZWN0Tm9uSW5kZXhBY2Nlc3Nvcih2bSwgdm0ucHJvcGVy
dHlOYW1lcy0+Y2FsbGVyLCBnbG9iYWxPYmplY3QoKS0+dGhyb3dUeXBlRXJyb3JHZXR0ZXJTZXR0
ZXIodm0pLCBEb250RW51bSB8IERvbnREZWxldGUgfCBBY2Nlc3Nvcik7CisgICAgfSBlbHNlCisg
ICAgICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+Y2FsbGVlLCBtX2NhbGxlZS5n
ZXQoKSwgRG9udEVudW0pOworICAgIAorICAgIG1fb3ZlcnJvZGVUaGluZ3MgPSB0cnVlOworfQor
Cit2b2lkIFNjb3BlZEFyZ3VtZW50czo6c2xvd0Rvd25BbmRXYXN0ZU1lbW9yeUlmTmVjZXNzYXJ5
KFZNJiB2bSkKK3sKKyAgICBpZiAoIW1fb3ZlcnJvZGVUaGluZ3MpCisgICAgICAgIHNsb3dEb3du
QW5kV2FzdGVNZW1vcnkodm0pOworfQorCit2b2lkIFNjb3BlZEFyZ3VtZW50czo6b3ZlcnJpZGVB
cmd1bWVudChWTSYgdm0sIHVpbnQzMl90IGkpCit7CisgICAgbV90YWJsZS5zZXQodm0sIHRoaXMs
IG1fdGFibGUtPnNldCh2bSwgaSwgU2NvcGVPZmZzZXQoKSkpOworfQorCit9IC8vIG5hbWVzcGFj
ZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1l
bnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVk
QXJndW1lbnRzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TY29wZWRBcmd1bWVudHMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDExOCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFNjb3Bl
ZEFyZ3VtZW50c19oCisjZGVmaW5lIFNjb3BlZEFyZ3VtZW50c19oCisKKyNpbmNsdWRlICJHZW5l
cmljQXJndW1lbnRzLmgiCisKK25hbWVzcGFjZSBKU0MgeworCisvLyBUaGlzIGlzIGFuIEFyZ3Vt
ZW50cy1jbGFzcyBvYmplY3QgdGhhdCB3ZSBjcmVhdGUgd2hlbiB5b3Ugc2F5ICJhcmd1bWVudHMi
IGluc2lkZSBhIGZ1bmN0aW9uLAorLy8gYW5kIG9uZSBvciBtb3JlIG9mIHRoZSBhcmd1bWVudHMg
bWF5IGJlIGNhcHR1cmVkIGluIHRoZSBmdW5jdGlvbidzIGFjdGl2YXRpb24uIFRoZSBmdW5jdGlv
bgorLy8gd2lsbCBjb3B5IGFsbCBvZiBpdHMgYXJndW1lbnRzIGludG8gdGhlIGFjdGl2YXRpb24g
YW5kIHRoZW4gY3JlYXRlIHRoaXMgb2JqZWN0LiBUaGlzIG9iamVjdAorLy8gd2lsbCB1c2UgdGhl
IHN5bWJvbCB0YWJsZSdzIFNjb3BlZEFyZ3VtZW50c1RhYmxlIGFuZCB0aGUgYWN0aXZhdGlvbiB0
byBoYW5kbGUgYWxsIGluZGV4ZWQKKy8vIGxvb2t1cHMuCitjbGFzcyBTY29wZWRBcmd1bWVudHMg
OiBwdWJsaWMgR2VuZXJpY0FyZ3VtZW50czxTY29wZWRBcmd1bWVudHM+IHsKK3ByaXZhdGU6Cisg
ICAgU2NvcGVkQXJndW1lbnRzKFZNJiwgU3RydWN0dXJlKik7CisgICAgdm9pZCBmaW5pc2hDcmVh
dGlvbihWTSYsIEpTRnVuY3Rpb24qIGNhbGxlZSwgU2NvcGVkQXJndW1lbnRzVGFibGUqLCBKU0xl
eGljYWxFbnZpcm9ubWVudCopOworCitwdWJsaWM6CisgICAgc3RhdGljIFNjb3BlZEFyZ3VtZW50
cyogY3JlYXRlKFZNJiwgU3RydWN0dXJlKiwgSlNGdW5jdGlvbiogY2FsbGVlLCBTY29wZWRBcmd1
bWVudHNUYWJsZSosIEpTTGV4aWNhbEVudmlyb25tZW50Kik7CisgICAgCisgICAgc3RhdGljIHZv
aWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIAorICAgIHVpbnQz
Ml90IGludGVybmFsTGVuZ3RoKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3RhYmxl
LT5sZW5ndGgoKTsKKyAgICB9CisgICAgCisgICAgdWludDMyX3QgbGVuZ3RoKEV4ZWNTdGF0ZSog
ZXhlYykgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChVTkxJS0VMWShtX292ZXJyb2RlTGVuZ3Ro
KSkKKyAgICAgICAgICAgIHJldHVybiBnZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmxl
bmd0aCkudG9VSW50MzIoZXhlYyk7CisgICAgICAgIHJldHVybiBpbnRlcm5hbExlbmd0aCgpOwor
ICAgIH0KKyAgICAKKyAgICBib29sIGNhbkFjY2Vzc0luZGV4UXVpY2tseSh1aW50MzJfdCBpKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGkgPCBtX2xlbmd0aCAmJiAhIW1fdGFibGUtPmdl
dChpKTsKKyAgICB9CisgICAgCisgICAgSlNWYWx1ZSBnZXRJbmRleFF1aWNrbHkodWludDMyX3Qg
aSkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9O
KGNhbkFjY2Vzc0luZGV4UXVpY2tseShpKSk7CisgICAgICAgIHJldHVybiBtX3Njb3BlLT52YXJp
YWJsZUF0KG1fdGFibGUtPmdldChpKSkuZ2V0KCk7CisgICAgfQorCisgICAgdm9pZCBzZXRJbmRl
eFF1aWNrbHkoVk0mIHZtLCB1aW50MzJfdCBpLCBKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAg
ICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oY2FuQWNjZXNzSW5kZXhRdWlja2x5
KGkpKTsKKyAgICAgICAgcmV0dXJuIG1fc2NvcGUtPnZhcmlhYmxlQXQobV90YWJsZS0+Z2V0KGkp
KS5nZXQoKTsKKyAgICB9CisKKyAgICBXcml0ZUJhcnJpZXI8SlNGdW5jdGlvbj4mIGNhbGxlZSgp
CisgICAgeworICAgICAgICByZXR1cm4gbV9jYWxsZWU7CisgICAgfQorICAgIAorICAgIFdyaXRl
QmFycmllcjxVbmtub3duPiYgYXJndW1lbnQoQ2FwdHVyZWRBcmd1bWVudHNPZmZzZXQgb2Zmc2V0
KQorICAgIHsKKyAgICAgICAgQVNTRVJUKG9mZnNldCk7CisgICAgICAgIEFTU0VSVF9XSVRIX1NF
Q1VSSVRZX0lNUExJQ0FUSU9OKG9mZnNldC5vZmZzZXQoKSA8IG1fbGVuZ3RoKTsKKyAgICAgICAg
cmV0dXJuIHN0b3JhZ2UoKVtvZmZzZXQub2Zmc2V0KCldOworICAgIH0KKyAgICAKKyAgICBGdW5j
dGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGpzQ2Fz
dDxGdW5jdGlvbkV4ZWN1dGFibGUqPihjYWxsZWUtPmV4ZWN1dGFibGUoKSk7CisgICAgfQorICAg
IAorICAgIGJvb2wgaXNTdHJpY3RNb2RlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBleGVjdXRh
YmxlKCktPmlzU3RyaWN0TW9kZSgpOworICAgIH0KKworICAgIGJvb2wgb3ZlcnJvZGVUaGluZ3Mo
KSBjb25zdCB7IHJldHVybiBtX292ZXJyb2RlVGhpbmdzOyB9CisgICAgdm9pZCBzbG93RG93bkFu
ZFdhc3RlTWVtb3J5KFZNJik7CisgICAgdm9pZCBzbG93RG93bkFuZFdhc3RlTWVtb3J5SWZOZWNl
c3NhcnkoVk0mKTsKKyAgICB2b2lkIG92ZXJyaWRlQXJndW1lbnQoVk0mIHZtLCB1aW50MzJfdCBp
KTsKKyAgICAKKyAgICBERUNMQVJFX0lORk87CisgICAgCisgICAgc3RhdGljIFN0cnVjdHVyZSog
Y3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHByb3RvdHlwZSk7
CisKK3ByaXZhdGU6CisgICAgYm9vbCBtX292ZXJyb2RlVGhpbmdzOyAvLyBUcnVlIGlmIGxlbmd0
aCwgY2FsbGVlLCBhbmQgY2FsbGVyIGFyZSBmdWxseSBtYXRlcmlhbGl6ZWQgaW4gdGhlIG9iamVj
dC4KKyAgICBXcml0ZUJhcnJpZXI8SlNGdW5jdGlvbio+IG1fY2FsbGVlOworICAgIFdyaXRlQmFy
cmllcjxTY29wZWRBcmd1bWVudHNUYWJsZT4gbV90YWJsZTsKKyAgICBXcml0ZUJhcnJpZXI8SlNM
ZXhpY2FsRW52aXJvbm1lbnQ+IG1fc2NvcGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKwor
I2VuZGlmIC8vIFNjb3BlZEFyZ3VtZW50c19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50c1RhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzVGFibGUuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50c1RhYmxlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFNjb3BlZEFyZ3VtZW50c1RhYmxlX2gKKyNk
ZWZpbmUgU2NvcGVkQXJndW1lbnRzVGFibGVfaAorCisjaW5jbHVkZSAiSlNDZWxsLmgiCisKK25h
bWVzcGFjZSBKU0MgeworCisvLyBUaGlzIGNsYXNzJ3Mgb25seSBqb2IgaXMgdG8gaG9sZCBvbnRv
IHRoZSBsaXN0IG9mIFNjb3BlT2Zmc2V0cyBmb3IgZWFjaCBhcmd1bWVudCB0aGF0IGEKKy8vIGZ1
bmN0aW9uIGhhcy4gTW9zdCBvZiB0aGUgdGltZSwgdGhlIEJ5dGVjb2RlR2VuZXJhdG9yIHdpbGwg
Y3JlYXRlIG9uZSBvZiB0aGVzZSBhbmQgaXQgd2lsbAorLy8gbmV2ZXIgYmUgbW9kaWZpZWQgc3Vi
c2VxdWVudGx5LiBUaGVyZSBpcyBhIHJhcmUgY2FzZSB3aGVyZSBhIFNjb3BlZEFyZ3VtZW50cyBv
YmplY3QgaXMgY3JlYXRlZAorLy8gYW5kIGFsaWFzZXMgb25lIG9mIHRoZXNlIGFuZCB0aGVuIGRl
Y2lkZXMgdG8gbW9kaWZ5IGl0OyBpbiB0aGF0IGNhc2Ugd2UgZG8gY29weS1vbi13cml0ZS4gVGhp
cworLy8gbWFrZXMgc2Vuc2UgYmVjYXVzZSBzdWNoIG1vZGlmaWNhdGlvbnMgYXJlIHNvIHVuY29t
bW9uLiBZb3UnZCBoYXZlIHRvIGRvIHNvbWV0aGluZyBjcmF6eSBsaWtlCisvLyAiZGVsZXRlIGFy
Z3VtZW50c1tpXSIgb3Igc29tZSB2YXJpYW50IG9mIGRlZmluZU93blByb3BlcnR5LgorY2xhc3Mg
U2NvcGVkQXJndW1lbnRzIDogcHVibGljIEpTQ2VsbCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBK
U0NlbGwgQmFzZTsKKyAgICAKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBuZWVkc0Rlc3RydWN0aW9u
ID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNJbW1vcnRhbFN0cnVjdHVyZSA9IHRy
dWU7CisKK3ByaXZhdGU6CisgICAgU2NvcGVkQXJndW1lbnRzVGFibGUoVk0mKTsKKyAgICB+U2Nv
cGVkQXJndW1lbnRzVGFibGUoKTsKKworcHVibGljOgorICAgIHN0YXRpYyBTY29wZWRBcmd1bWVu
dHNUYWJsZSogY3JlYXRlKFZNJik7CisgICAgCisgICAgU2NvcGVkQXJndW1lbnRzKiBjbG9uZShW
TSYpOworICAgIAorICAgIHVpbnQzMl90IGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbGVuZ3Ro
OyB9CisgICAgU2NvcGVkQXJndW1lbnRzVGFibGUqIHNldExlbmd0aChWTSYsIHVpbnQzMl90IG5l
d0xlbmd0aCk7CisgICAgCisgICAgU2NvcGVPZmZzZXQgZ2V0KHVpbnQzMl90IGkpIGNvbnN0Cisg
ICAgeworICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihpIDwgbV9sZW5n
dGgpOworICAgICAgICByZXR1cm4gbV9hcmd1bWVudHNbaV07CisgICAgfQorICAgIAorICAgIHZv
aWQgbG9jaygpCisgICAgeworICAgICAgICBtX2xvY2tlZCA9IHRydWU7CisgICAgfQorICAgIAor
ICAgIFNjb3BlZEFyZ3VtZW50cyogc2V0KFZNJiB2bSwgdWludDMyX3QgaSwgU2NvcGVPZmZzZXQg
dmFsdWUpCisgICAgeworICAgICAgICBTY29wZWRBcmd1bWVudHMqIHJlc3VsdDsKKyAgICAgICAg
aWYgKFVOTElLRUxZKG1fbG9ja2VkKSkKKyAgICAgICAgICAgIHJlc3VsdCA9IGNsb25lKHZtKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmVzdWx0ID0gdGhpczsKKyAgICAgICAgcmVzdWx0
LT5zZXREaXJlY3QoaSwgdmFsdWUpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAg
ICAKKyAgICBERUNMQVJFX0lORk87CisKK3ByaXZhdGU6CisgICAgdWludDMyX3QgbV9sZW5ndGg7
CisgICAgYm9vbCBtX2xvY2tlZDsgLy8gQmVpbmcgbG9ja2VkIG1lYW5zIHRoYXQgdGhlcmUgYXJl
IG11bHRpcGxlIHJlZmVyZW5jZXMgdG8gdGhpcyBvYmplY3QgYW5kIG5vbmUgb2YgdGhlbSBleHBl
Y3QgdG8gc2VlIHRoZSBvdGhlcnMnIG1vZGlmaWNhdGlvbnMuIFRoaXMgbWVhbnMgdGhhdCBtb2Rp
ZmljYXRpb25zIG5lZWQgdG8gbWFrZSBhIGNvcHkgZmlyc3QuCisgICAgc3RkOjp1bmlxdWVfcHRy
PFNjb3BlT2Zmc2V0W10+IG1fYXJndW1lbnRzOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisK
KyNlbmRpZiAvLyBTY29wZWRBcmd1bWVudHNUYWJsZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5jcHAJKHJldmlzaW9uIDE4MDU2NSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTQgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE0
LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMTM3LDI5ICsxMzcsMjIgQEAgdm9pZCBTeW1ib2xUYWJsZTo6V2F0
Y2hwb2ludENsZWFudXA6OmZpbgogICAgIH0KIH0KIAotU3ltYm9sVGFibGUqIFN5bWJvbFRhYmxl
OjpjbG9uZUNhcHR1cmVkTmFtZXMoVk0mIHZtKQorU3ltYm9sVGFibGUqIFN5bWJvbFRhYmxlOjpj
bG9uZVNjb3BlUGFydChWTSYgdm0pCiB7CiAgICAgU3ltYm9sVGFibGUqIHJlc3VsdCA9IFN5bWJv
bFRhYmxlOjpjcmVhdGUodm0pOwogICAgIAotICAgIHJlc3VsdC0+bV9wYXJhbWV0ZXJDb3VudElu
Y2x1ZGluZ1RoaXMgPSBtX3BhcmFtZXRlckNvdW50SW5jbHVkaW5nVGhpczsKICAgICByZXN1bHQt
Pm1fdXNlc05vblN0cmljdEV2YWwgPSBtX3VzZXNOb25TdHJpY3RFdmFsOwotICAgIHJlc3VsdC0+
bV9jYXB0dXJlU3RhcnQgPSBtX2NhcHR1cmVTdGFydDsKLSAgICByZXN1bHQtPm1fY2FwdHVyZUVu
ZCA9IG1fY2FwdHVyZUVuZDsKIAogICAgIGZvciAoYXV0byBpdGVyID0gbV9tYXAuYmVnaW4oKSwg
ZW5kID0gbV9tYXAuZW5kKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKLSAgICAgICAgaWYgKCFp
c0NhcHR1cmVkKGl0ZXItPnZhbHVlLmdldEluZGV4KCkpKQorICAgICAgICBpZiAoIWl0ZXItPnZh
bHVlLnZhck9mZnNldCgpLmlzU2NvcGUoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICByZXN1bHQtPm1fbWFwLmFkZCgKICAgICAgICAgICAgIGl0ZXItPmtleSwKLSAgICAgICAgICAg
IFN5bWJvbFRhYmxlRW50cnkoaXRlci0+dmFsdWUuZ2V0SW5kZXgoKSwgaXRlci0+dmFsdWUuZ2V0
QXR0cmlidXRlcygpKSk7CisgICAgICAgICAgICBTeW1ib2xUYWJsZUVudHJ5KGl0ZXItPnZhbHVl
LnZhck9mZnNldCgpLCBpdGVyLT52YWx1ZS5nZXRBdHRyaWJ1dGVzKCkpKTsKICAgICB9CiAgICAg
Ci0gICAgaWYgKG1fc2xvd0FyZ3VtZW50cykgewotICAgICAgICByZXN1bHQtPm1fc2xvd0FyZ3Vt
ZW50cyA9IHN0ZDo6bWFrZV91bmlxdWU8U2xvd0FyZ3VtZW50W10+KHBhcmFtZXRlckNvdW50KCkp
OwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBwYXJhbWV0ZXJDb3VudCgpOyBpLS07KQotICAg
ICAgICAgICAgcmVzdWx0LT5tX3Nsb3dBcmd1bWVudHNbaV0gPSBtX3Nsb3dBcmd1bWVudHNbaV07
Ci0gICAgfQotCisgICAgcmVzdWx0LT5tX2FyZ3VtZW50cyA9IGFyZ3VtZW50cygpOworICAgIAog
ICAgIGlmIChtX3R5cGVQcm9maWxpbmdSYXJlRGF0YSkgewogICAgICAgICByZXN1bHQtPm1fdHlw
ZVByb2ZpbGluZ1JhcmVEYXRhID0gc3RkOjptYWtlX3VuaXF1ZTxUeXBlUHJvZmlsaW5nUmFyZURh
dGE+KCk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFi
bGUuaAkocmV2aXNpb24gMTgwNTY1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U3ltYm9sVGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMTItMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMTItMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTMxLDYgKzMxLDcgQEAKIAogI2luY2x1ZGUgIkNvbmN1cnJlbnRKSVRMb2NrLmgiCiAjaW5jbHVk
ZSAiSlNPYmplY3QuaCIKKyNpbmNsdWRlICJTY29wZWRBcmd1bWVudHNUYWJsZS5oIgogI2luY2x1
ZGUgIlR5cGVMb2NhdGlvbi5oIgogI2luY2x1ZGUgIlZhcmlhYmxlV2F0Y2hwb2ludFNldC5oIgog
I2luY2x1ZGUgPG1lbW9yeT4KQEAgLTM5LDI0ICs0MCw2IEBACiAKIG5hbWVzcGFjZSBKU0Mgewog
Ci1zdHJ1Y3QgU2xvd0FyZ3VtZW50IHsKLXB1YmxpYzoKLSAgICBlbnVtIFN0YXR1cyB7Ci0gICAg
ICAgIE5vcm1hbCA9IDAsCi0gICAgICAgIENhcHR1cmVkID0gMSwKLSAgICAgICAgRGVsZXRlZCA9
IDIKLSAgICB9OwotCi0gICAgU2xvd0FyZ3VtZW50KCkKLSAgICAgICAgOiBzdGF0dXMoTm9ybWFs
KQotICAgICAgICAsIGluZGV4KDApCi0gICAgewotICAgIH0KLQotICAgIFN0YXR1cyBzdGF0dXM7
Ci0gICAgaW50IGluZGV4OyAvLyBJZiBzdGF0dXMgaXMgJ0RlbGV0ZWQnLCBpbmRleCBpcyBib2d1
cy4KLX07Ci0KIHN0YXRpYyBBTFdBWVNfSU5MSU5FIGludCBtaXNzaW5nU3ltYm9sTWFya2VyKCkg
eyByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKTsgfQogCiAvLyBUaGUgYml0
IHR3aWRkbGluZyBpbiB0aGlzIGNsYXNzIGFzc3VtZXMgdGhhdCBldmVyeSByZWdpc3RlciBpbmRl
eCBpcyBhCkBAIC04Niw2ICs2OSwyOCBAQCBzdGF0aWMgQUxXQVlTX0lOTElORSBpbnQgbWlzc2lu
Z1N5bWJvbE1hCiAvLyBjb3B5OiAgICAgU3ltYm9sVGFibGVFbnRyeSAtLT4gRmF0RW50cnkgLS0t
LS1eCiAKIHN0cnVjdCBTeW1ib2xUYWJsZUVudHJ5IHsKK3ByaXZhdGU6CisgICAgc3RhdGljIFZh
ck9mZnNldCB2YXJPZmZzZXRGcm9tQml0cyhpbnRwdHJfdCBiaXRzKQorICAgIHsKKyAgICAgICAg
VmFyS2luZCBraW5kOworICAgICAgICBpZiAoYml0cyAmIFN0YWNrRmxhZykKKyAgICAgICAgICAg
IGtpbmQgPSBTdGFja1ZhcktpbmQ7CisgICAgICAgIGVsc2UgaWYgKGJpdHMgJiBDYXB0dXJlZEFy
Z3VtZW50RmxhZykKKyAgICAgICAgICAgIGtpbmQgPSBDYXB0dXJlZEFyZ3VtZW50S2luZDsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAga2luZCA9IFNjb3BlVmFyS2luZDsKKyAgICAgICAgcmV0
dXJuIFZhck9mZnNldDo6YXNzZW1ibGUoa2luZCwgc3RhdGljX2Nhc3Q8aW50PihiaXRzID4+IEZs
YWdCaXRzKSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBTY29wZU9mZnNldCBzY29wZU9mZnNl
dEZyb21CaXRzKGludHB0cl90IGJpdHMpCisgICAgeworICAgICAgICBBU1NFUlQoIShiaXRzICYg
U3RhY2tGbGFnKSk7CisgICAgICAgIEFTU0VSVCghKGJpdHMgJiBDYXB0dXJlZEFyZ3VtZW50Rmxh
ZykpOworICAgICAgICByZXR1cm4gU2NvcGVPZmZzZXQoc3RhdGljX2Nhc3Q8aW50PihiaXRzID4+
IEZsYWdCaXRzKSk7CisgICAgfQorCitwdWJsaWM6CisgICAgCiAgICAgLy8gVXNlIHRoZSBTeW1i
b2xUYWJsZUVudHJ5OjpGYXN0IGNsYXNzLCBlaXRoZXIgdmlhIGltcGxpY2l0IGNhc3Qgb3IgYnkg
Y2FsbGluZwogICAgIC8vIGdldEZhc3QoKSwgd2hlbiB5b3UgKDEpIG9ubHkgY2FyZSBhYm91dCBp
c051bGwoKSwgZ2V0SW5kZXgoKSwgYW5kIGlzUmVhZE9ubHkoKSwKICAgICAvLyBhbmQgKDIpIHlv
dSBhcmUgaW4gYSBob3QgcGF0aCB3aGVyZSB5b3UgbmVlZCB0byBtaW5pbWl6ZSB0aGUgbnVtYmVy
IG9mIHRpbWVzCkBAIC0xMDcsMTEgKzExMiwxOSBAQCBzdHJ1Y3QgU3ltYm9sVGFibGVFbnRyeSB7
CiAgICAgICAgICAgICByZXR1cm4gIShtX2JpdHMgJiB+U2xpbUZsYWcpOwogICAgICAgICB9CiAK
LSAgICAgICAgaW50IGdldEluZGV4KCkgY29uc3QKKyAgICAgICAgVmFyT2Zmc2V0IHZhck9mZnNl
dCgpIGNvbnN0CiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+
KG1fYml0cyA+PiBGbGFnQml0cyk7CisgICAgICAgICAgICByZXR1cm4gdmFyT2Zmc2V0RnJvbUJp
dHMobV9iaXRzKTsKICAgICAgICAgfQotICAgIAorICAgICAgICAKKyAgICAgICAgLy8gQXNzZXJ0
cyBpZiB0aGUgb2Zmc2V0IGlzIGFueXRoaW5nIGJ1dCBhIHNjb3BlIG9mZnNldC4gVGhpcyBzdHJ1
Y3R1cmVzIHRoZSBhc3NlcnRpb25zCisgICAgICAgIC8vIGluIGEgd2F5IHRoYXQgbWF5IHJlc3Vs
dCBpbiBiZXR0ZXIgY29kZSwgZXZlbiBpbiByZWxlYXNlLCB0aGFuIGRvaW5nCisgICAgICAgIC8v
IHZhck9mZnNldCgpLnNjb3BlT2Zmc2V0KCkuCisgICAgICAgIFNjb3BlT2Zmc2V0IHNjb3BlT2Zm
c2V0KCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHNjb3BlT2Zmc2V0RnJv
bUJpdHMobV9iaXRzKTsKKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgYm9vbCBpc1JlYWRP
bmx5KCkgY29uc3QKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIG1fYml0cyAmIFJlYWRP
bmx5RmxhZzsKQEAgLTE0MiwxOCArMTU1LDE4IEBAIHN0cnVjdCBTeW1ib2xUYWJsZUVudHJ5IHsK
ICAgICB7CiAgICAgfQogCi0gICAgU3ltYm9sVGFibGVFbnRyeShpbnQgaW5kZXgpCisgICAgU3lt
Ym9sVGFibGVFbnRyeShWYXJPZmZzZXQgb2Zmc2V0KQogICAgICAgICA6IG1fYml0cyhTbGltRmxh
ZykKICAgICB7Ci0gICAgICAgIEFTU0VSVChpc1ZhbGlkSW5kZXgoaW5kZXgpKTsKLSAgICAgICAg
cGFjayhpbmRleCwgZmFsc2UsIGZhbHNlKTsKKyAgICAgICAgQVNTRVJUKGlzVmFsaWRWYXJPZmZz
ZXQob2Zmc2V0KSk7CisgICAgICAgIHBhY2sob2Zmc2V0LCBmYWxzZSwgZmFsc2UpOwogICAgIH0K
IAotICAgIFN5bWJvbFRhYmxlRW50cnkoaW50IGluZGV4LCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQor
ICAgIFN5bWJvbFRhYmxlRW50cnkoVmFyT2Zmc2V0IG9mZnNldCwgdW5zaWduZWQgYXR0cmlidXRl
cykKICAgICAgICAgOiBtX2JpdHMoU2xpbUZsYWcpCiAgICAgewotICAgICAgICBBU1NFUlQoaXNW
YWxpZEluZGV4KGluZGV4KSk7Ci0gICAgICAgIHBhY2soaW5kZXgsIGF0dHJpYnV0ZXMgJiBSZWFk
T25seSwgYXR0cmlidXRlcyAmIERvbnRFbnVtKTsKKyAgICAgICAgQVNTRVJUKGlzVmFsaWRWYXJP
ZmZzZXQob2Zmc2V0KSk7CisgICAgICAgIHBhY2sob2Zmc2V0LCBhdHRyaWJ1dGVzICYgUmVhZE9u
bHksIGF0dHJpYnV0ZXMgJiBEb250RW51bSk7CiAgICAgfQogICAgIAogICAgIH5TeW1ib2xUYWJs
ZUVudHJ5KCkKQEAgLTE4MSw5ICsxOTQsMTcgQEAgc3RydWN0IFN5bWJvbFRhYmxlRW50cnkgewog
ICAgICAgICByZXR1cm4gIShiaXRzKCkgJiB+U2xpbUZsYWcpOwogICAgIH0KIAotICAgIGludCBn
ZXRJbmRleCgpIGNvbnN0CisgICAgVmFyT2Zmc2V0IHZhck9mZnNldCgpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gdmFyT2Zmc2V0RnJvbUJpdHMoYml0cygpKTsKKyAgICB9CisgICAgCisg
ICAgLy8gQXNzZXJ0cyBpZiB0aGUgb2Zmc2V0IGlzIGFueXRoaW5nIGJ1dCBhIHNjb3BlIG9mZnNl
dC4gVGhpcyBzdHJ1Y3R1cmVzIHRoZSBhc3NlcnRpb25zCisgICAgLy8gaW4gYSB3YXkgdGhhdCBt
YXkgcmVzdWx0IGluIGJldHRlciBjb2RlLCBldmVuIGluIHJlbGVhc2UsIHRoYW4gZG9pbmcKKyAg
ICAvLyB2YXJPZmZzZXQoKS5zY29wZU9mZnNldCgpLgorICAgIFNjb3BlT2Zmc2V0IHNjb3BlT2Zm
c2V0KCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KGJpdHMo
KSA+PiBGbGFnQml0cyk7CisgICAgICAgIHJldHVybiBzY29wZU9mZnNldEZyb21CaXRzKGJpdHMo
KSk7CiAgICAgfQogICAgIAogICAgIEFMV0FZU19JTkxJTkUgRmFzdCBnZXRGYXN0KCkgY29uc3QK
QEAgLTIwOSw3ICsyMzAsNyBAQCBzdHJ1Y3QgU3ltYm9sVGFibGVFbnRyeSB7CiAKICAgICB2b2lk
IHNldEF0dHJpYnV0ZXModW5zaWduZWQgYXR0cmlidXRlcykKICAgICB7Ci0gICAgICAgIHBhY2so
Z2V0SW5kZXgoKSwgYXR0cmlidXRlcyAmIFJlYWRPbmx5LCBhdHRyaWJ1dGVzICYgRG9udEVudW0p
OworICAgICAgICBwYWNrKHZhck9mZnNldCgpLCBhdHRyaWJ1dGVzICYgUmVhZE9ubHksIGF0dHJp
YnV0ZXMgJiBEb250RW51bSk7CiAgICAgfQogCiAgICAgYm9vbCBpc1JlYWRPbmx5KCkgY29uc3QK
QEAgLTI0Miw3ICsyNjMsOSBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBjb25zdCBpbnRwdHJfdCBS
ZWFkT25seUZsYWcgPSAweDI7CiAgICAgc3RhdGljIGNvbnN0IGludHB0cl90IERvbnRFbnVtRmxh
ZyA9IDB4NDsKICAgICBzdGF0aWMgY29uc3QgaW50cHRyX3QgTm90TnVsbEZsYWcgPSAweDg7Ci0g
ICAgc3RhdGljIGNvbnN0IGludHB0cl90IEZsYWdCaXRzID0gNDsKKyAgICBzdGF0aWMgY29uc3Qg
aW50cHRyX3QgU3RhY2tGbGFnID0gMHgxMDsKKyAgICBzdGF0aWMgY29uc3QgaW50cHRyX3QgQ2Fw
dHVyZWRBcmd1bWVudEZsYWcgPSAweDIwOworICAgIHN0YXRpYyBjb25zdCBpbnRwdHJfdCBGbGFn
Qml0cyA9IDY7CiAgICAgCiAgICAgY2xhc3MgRmF0RW50cnkgewogICAgICAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKQEAgLTMwOSwyMCArMzMyLDM0IEBAIHByaXZhdGU6CiAKICAgICBKU19F
WFBPUlRfUFJJVkFURSB2b2lkIGZyZWVGYXRFbnRyeVNsb3coKTsKIAotICAgIHZvaWQgcGFjayhp
bnQgaW5kZXgsIGJvb2wgcmVhZE9ubHksIGJvb2wgZG9udEVudW0pCisgICAgdm9pZCBwYWNrKFZh
ck9mZnNldCBvZmZzZXQsIGJvb2wgcmVhZE9ubHksIGJvb2wgZG9udEVudW0pCiAgICAgewogICAg
ICAgICBBU1NFUlQoIWlzRmF0KCkpOwogICAgICAgICBpbnRwdHJfdCYgYml0c1JlZiA9IGJpdHMo
KTsKLSAgICAgICAgYml0c1JlZiA9IChzdGF0aWNfY2FzdDxpbnRwdHJfdD4oaW5kZXgpIDw8IEZs
YWdCaXRzKSB8IE5vdE51bGxGbGFnIHwgU2xpbUZsYWc7CisgICAgICAgIGJpdHNSZWYgPQorICAg
ICAgICAgICAgKHN0YXRpY19jYXN0PGludHB0cl90PihvZmZzZXQucmF3T2Zmc2V0KCkpIDw8IEZs
YWdCaXRzKSB8IE5vdE51bGxGbGFnIHwgU2xpbUZsYWc7CiAgICAgICAgIGlmIChyZWFkT25seSkK
ICAgICAgICAgICAgIGJpdHNSZWYgfD0gUmVhZE9ubHlGbGFnOwogICAgICAgICBpZiAoZG9udEVu
dW0pCiAgICAgICAgICAgICBiaXRzUmVmIHw9IERvbnRFbnVtRmxhZzsKKyAgICAgICAgc3dpdGNo
IChvZmZzZXQua2luZCgpKSB7CisgICAgICAgIGNhc2UgU2NvcGVWYXJLaW5kOgorICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgU3RhY2tWYXJLaW5kOgorICAgICAgICAgICAgYml0c1Jl
ZiB8PSBTdGFja0ZsYWc7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDYXB0dXJl
ZEFyZ3VtZW50S2luZDoKKyAgICAgICAgICAgIGJpdHNSZWYgfD0gQ2FwdHVyZWRBcmd1bWVudEZs
YWc7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQogICAgIH0KICAgICAKLSAgICBib29sIGlzVmFsaWRJbmRleChpbnQgaW5kZXgpCisgICAgc3Rh
dGljIGJvb2wgaXNWYWxpZFZhck9mZnNldChWYXJPZmZzZXQgb2Zmc2V0KQogICAgIHsKLSAgICAg
ICAgcmV0dXJuICgoc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KGluZGV4KSA8PCBGbGFnQml0cykgPj4g
RmxhZ0JpdHMpID09IHN0YXRpY19jYXN0PGludHB0cl90PihpbmRleCk7CisgICAgICAgIHJldHVy
biAoKHN0YXRpY19jYXN0PGludHB0cl90PihvZmZzZXQucmF3T2Zmc2V0KCkpIDw8IEZsYWdCaXRz
KSA+PiBGbGFnQml0cykgPT0gc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KG9mZnNldC5yYXdPZmZzZXQo
KSk7CiAgICAgfQogCiAgICAgaW50cHRyX3QgbV9iaXRzOwpAQCAtMzUxLDcgKzM4OCw3IEBAIHB1
YmxpYzoKICAgICBzdGF0aWMgU3ltYm9sVGFibGUqIGNyZWF0ZU5hbWVTY29wZVRhYmxlKFZNJiB2
bSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCiAgICAgewog
ICAgICAgICBTeW1ib2xUYWJsZSogcmVzdWx0ID0gY3JlYXRlKHZtKTsKLSAgICAgICAgcmVzdWx0
LT5hZGQoaWRlbnQuaW1wbCgpLCBTeW1ib2xUYWJsZUVudHJ5KC0xLCBhdHRyaWJ1dGVzKSk7Cisg
ICAgICAgIHJlc3VsdC0+YWRkKGlkZW50LmltcGwoKSwgU3ltYm9sVGFibGVFbnRyeShWYXJPZmZz
ZXQoU2NvcGVPZmZzZXQoMCkpLCBhdHRyaWJ1dGVzKSk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7
CiAgICAgfQogICAgIApAQCAtNDIzLDggKzQ2MCwyOSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVy
biBzaXplKGxvY2tlcik7CiAgICAgfQogICAgIAorICAgIFNjb3BlT2Zmc2V0IG1heFNjb3BlT2Zm
c2V0KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX21heFNjb3BlT2Zmc2V0OworICAg
IH0KKyAgICAKKyAgICB1bnNpZ25lZCBzY29wZVNpemUoKSBjb25zdAorICAgIHsKKyAgICAgICAg
U2NvcGVPZmZzZXQgbWF4U2NvcGVPZmZzZXQgPSB0aGlzLT5tYXhTY29wZU9mZnNldCgpOworICAg
ICAgICAKKyAgICAgICAgLy8gRG8gc29tZSBjYWxjdWxhdGlvbiB0aGF0IHJlbGllcyBvbiBpbnZh
bGlkIHNjb3BlIG9mZnNldCBwbHVzIG9uZSBiZWluZyB6ZXJvLgorICAgICAgICB1bnNpZ25lZCBm
YXN0UmVzdWx0ID0gbWF4U2NvcGVPZmZzZXQub2Zmc2V0VW5jaGVja2VkKCkgKyAxOworICAgICAg
ICAKKyAgICAgICAgLy8gQXNzZXJ0IHRoYXQgdGhpcyB3b3Jrcy4KKyAgICAgICAgQVNTRVJUKGZh
c3RSZXN1bHQgPT0gKCFtYXhTY29wZU9mZnNldCA/IDAgOiBtYXhTY29wZU9mZnNldC5vZmZzZXQo
KSArIDEpKTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBmYXN0UmVzdWx0OworICAgIH0KKyAg
ICAKICAgICBNYXA6OkFkZFJlc3VsdCBhZGQoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYsIFN0
cmluZ0ltcGwqIGtleSwgY29uc3QgU3ltYm9sVGFibGVFbnRyeSYgZW50cnkpCiAgICAgeworICAg
ICAgICBpZiAoZW50cnkudmFyT2Zmc2V0KCkuaXNTY29wZSgpCisgICAgICAgICAgICAmJiAoIW1f
bWF4U2NvcGVPZmZzZXQgfHwgbV9tYXhTY29wZU9mZnNldCA8IGVudHJ5LnNjb3BlT2Zmc2V0KCkp
KQorICAgICAgICAgICAgbV9tYXhTY29wZU9mZnNldCA9IGVudHJ5LnNjb3BlT2Zmc2V0KCk7CiAg
ICAgICAgIHJldHVybiBtX21hcC5hZGQoa2V5LCBlbnRyeSk7CiAgICAgfQogICAgIApAQCAtNDU2
LDYgKzUxNCw0NSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBjb250YWlucyhsb2NrZXIsIGtl
eSk7CiAgICAgfQogICAgIAorICAgIC8vIFRoZSBwcmluY2lwbGUgYmVoaW5kIFNjb3BlZEFyZ3Vt
ZW50c1RhYmxlIG1vZGlmaWNhdGlvbnMgaXMgdGhhdCB3ZSB3aWxsIGNyZWF0ZSBvbmUgYW5kCisg
ICAgLy8gbGVhdmUgaXQgdW5sb2NrZWQgLSB0aGVyZWJ5IGFsbG93aW5nIGluLXBsYWNlIGNoYW5n
ZXMgLSB1bnRpbCBzb21lb25lIGFza3MgZm9yIGEgcG9pbnRlciB0bworICAgIC8vIHRoZSB0YWJs
ZS4gVGhlbiwgd2Ugd2lsbCBsb2NrIGl0LiBUaGVuIGJvdGggb3VyIGZ1dHVyZSBjaGFuZ2VzIGFu
ZCB0aGVpciBmdXR1cmUgY2hhbmdlcworICAgIC8vIHdpbGwgZmlyc3QgaGF2ZSB0byBtYWtlIGEg
Y29weS4gVGhpcyBkaXNjaXBsaW5lIG1lYW5zIHRoYXQgdXN1YWxseSB3aGVuIHdlIGNyZWF0ZSBh
CisgICAgLy8gU2NvcGVkQXJndW1lbnRzIG9iamVjdCwgd2UgZG9uJ3QgaGF2ZSB0byBtYWtlIGEg
Y29weSBvZiB0aGUgU2NvcGVkQXJndW1lbnRzVGFibGUgLSBpbnN0ZWFkCisgICAgLy8gd2UganVz
dCB0YWtlIGEgcmVmZXJlbmNlIHRvIG9uZSB0aGF0IHdlIGFscmVhZHkgaGF2ZS4KKyAgICAKKyAg
ICB1aW50MzJfdCBhcmd1bWVudHNMZW5ndGgoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKCFt
X2FyZ3VtZW50cykKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbV9hcmd1
bWVudHMtPmxlbmd0aCgpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNldEFyZ3VtZW50c0xlbmd0
aChWTSYgdm0sIHVpbnQzMl90IGxlbmd0aCkKKyAgICB7CisgICAgICAgIGlmIChVTkxJS0VMWSgh
bV9hcmd1bWVudHMpKQorICAgICAgICAgICAgbV9hcmd1bWVudHMuc2V0KHZtLCB0aGlzLCBTY29w
ZWRBcmd1bWVudHNUYWJsZTo6Y3JlYXRlKHZtKSk7CisgICAgICAgIG1fYXJndW1lbnRzLnNldCh2
bSwgdGhpcywgbV9hcmd1bWVudHMtPnNldExlbmd0aCh2bSwgbGVuZ3RoKSk7CisgICAgfQorICAg
IAorICAgIFNjb3BlT2Zmc2V0IGFyZ3VtZW50T2Zmc2V0KHVpbnQzMl90IGkpIGNvbnN0CisgICAg
eworICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihtX2FyZ3VtZW50cyk7
CisgICAgICAgIHJldHVybiBtX2FyZ3VtZW50cy0+Z2V0KGkpOworICAgIH0KKyAgICAKKyAgICB2
b2lkIHNldEFyZ3VtZW50T2Zmc2V0KFZNJiB2bSwgdWludDMyX3QgaSwgU2NvcGVPZmZzZXQgb2Zm
c2V0KQorICAgIHsKKyAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04obV9h
cmd1bWVudHMpOworICAgICAgICBtX2FyZ3VtZW50cy5zZXQodm0sIHRoaXMsIG1fYXJndW1lbnRz
LT5zZXQodm0sIGksIG9mZnNldCkpOworICAgIH0KKyAgICAKKyAgICBTY29wZWRBcmd1bWVudHNU
YWJsZSogYXJndW1lbnRzKCkgY29uc3QKKyAgICB7CisgICAgICAgIG1fYXJndW1lbnRzLT5sb2Nr
KCk7CisgICAgICAgIHJldHVybiBtX2FyZ3VtZW50cy5nZXQoKTsKKyAgICB9CisgICAgCiAgICAg
R2xvYmFsVmFyaWFibGVJRCB1bmlxdWVJREZvclZhcmlhYmxlKGNvbnN0IENvbmN1cnJlbnRKSVRM
b2NrZXImLCBTdHJpbmdJbXBsKiBrZXksIFZNJiB2bSk7CiAgICAgR2xvYmFsVmFyaWFibGVJRCB1
bmlxdWVJREZvclJlZ2lzdGVyKGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImIGxvY2tlciwgaW50
IHJlZ2lzdGVySW5kZXgsIFZNJiB2bSk7CiAgICAgUmVmUHRyPFR5cGVTZXQ+IGdsb2JhbFR5cGVT
ZXRGb3JSZWdpc3Rlcihjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiBsb2NrZXIsIGludCByZWdp
c3RlckluZGV4LCBWTSYgdm0pOwpAQCAtNDY0LDI4ICs1NjEsNyBAQCBwdWJsaWM6CiAgICAgYm9v
bCB1c2VzTm9uU3RyaWN0RXZhbCgpIHsgcmV0dXJuIG1fdXNlc05vblN0cmljdEV2YWw7IH0KICAg
ICB2b2lkIHNldFVzZXNOb25TdHJpY3RFdmFsKGJvb2wgdXNlc05vblN0cmljdEV2YWwpIHsgbV91
c2VzTm9uU3RyaWN0RXZhbCA9IHVzZXNOb25TdHJpY3RFdmFsOyB9CiAKLSAgICBpbnQgY2FwdHVy
ZVN0YXJ0KCkgY29uc3QgeyByZXR1cm4gbV9jYXB0dXJlU3RhcnQ7IH0KLSAgICB2b2lkIHNldENh
cHR1cmVTdGFydChpbnQgY2FwdHVyZVN0YXJ0KSB7IG1fY2FwdHVyZVN0YXJ0ID0gY2FwdHVyZVN0
YXJ0OyB9Ci0KLSAgICBpbnQgY2FwdHVyZUVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fY2FwdHVyZUVu
ZDsgfQotICAgIHZvaWQgc2V0Q2FwdHVyZUVuZChpbnQgY2FwdHVyZUVuZCkgeyBtX2NhcHR1cmVF
bmQgPSBjYXB0dXJlRW5kOyB9Ci0KLSAgICBpbnQgY2FwdHVyZUNvdW50KCkgY29uc3QgeyByZXR1
cm4gLShtX2NhcHR1cmVFbmQgLSBtX2NhcHR1cmVTdGFydCk7IH0KLSAgICAKLSAgICBib29sIGlz
Q2FwdHVyZWQoaW50IG9wZXJhbmQpCi0gICAgewotICAgICAgICByZXR1cm4gb3BlcmFuZCA8PSBj
YXB0dXJlU3RhcnQoKSAmJiBvcGVyYW5kID4gY2FwdHVyZUVuZCgpOwotICAgIH0KLQotICAgIGlu
dCBwYXJhbWV0ZXJDb3VudCgpIHsgcmV0dXJuIG1fcGFyYW1ldGVyQ291bnRJbmNsdWRpbmdUaGlz
IC0gMTsgfQotICAgIGludCBwYXJhbWV0ZXJDb3VudEluY2x1ZGluZ1RoaXMoKSB7IHJldHVybiBt
X3BhcmFtZXRlckNvdW50SW5jbHVkaW5nVGhpczsgfQotICAgIHZvaWQgc2V0UGFyYW1ldGVyQ291
bnRJbmNsdWRpbmdUaGlzKGludCBwYXJhbWV0ZXJDb3VudEluY2x1ZGluZ1RoaXMpIHsgbV9wYXJh
bWV0ZXJDb3VudEluY2x1ZGluZ1RoaXMgPSBwYXJhbWV0ZXJDb3VudEluY2x1ZGluZ1RoaXM7IH0K
LQotICAgIC8vIDAgaWYgd2UgZG9uJ3QgY2FwdHVyZSBhbnkgYXJndW1lbnRzOyBwYXJhbWV0ZXJD
b3VudCgpIGluIGxlbmd0aCBpZiB3ZSBkby4KLSAgICBjb25zdCBTbG93QXJndW1lbnQqIHNsb3dB
cmd1bWVudHMoKSB7IHJldHVybiBtX3Nsb3dBcmd1bWVudHMuZ2V0KCk7IH0KLSAgICB2b2lkIHNl
dFNsb3dBcmd1bWVudHMoc3RkOjp1bmlxdWVfcHRyPFNsb3dBcmd1bWVudFtdPiBzbG93QXJndW1l
bnRzKSB7IG1fc2xvd0FyZ3VtZW50cyA9IFdURjo6bW92ZShzbG93QXJndW1lbnRzKTsgfQotICAg
IAotICAgIFN5bWJvbFRhYmxlKiBjbG9uZUNhcHR1cmVkTmFtZXMoVk0mKTsKKyAgICBTeW1ib2xU
YWJsZSogY2xvbmVTY29wZVBhcnQoVk0mKTsKIAogICAgIHZvaWQgcHJlcGFyZUZvclR5cGVQcm9m
aWxpbmcoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYpOwogCkBAIC01MTMsNiArNTg5LDggQEAg
cHJpdmF0ZToKICAgICB+U3ltYm9sVGFibGUoKTsKIAogICAgIE1hcCBtX21hcDsKKyAgICBTY29w
ZU9mZnNldCBtX21heFNjb3BlT2Zmc2V0OworICAgIAogICAgIHN0cnVjdCBUeXBlUHJvZmlsaW5n
UmFyZURhdGEgewogICAgICAgICBVbmlxdWVJRE1hcCBtX3VuaXF1ZUlETWFwOwogICAgICAgICBS
ZWdpc3RlclRvVmFyaWFibGVNYXAgbV9yZWdpc3RlclRvVmFyaWFibGVNYXA7CkBAIC01MjAsMTMg
KzU5OCw5IEBAIHByaXZhdGU6CiAgICAgfTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8VHlwZVByb2Zp
bGluZ1JhcmVEYXRhPiBtX3R5cGVQcm9maWxpbmdSYXJlRGF0YTsKIAotICAgIGludCBtX3BhcmFt
ZXRlckNvdW50SW5jbHVkaW5nVGhpczsKICAgICBib29sIG1fdXNlc05vblN0cmljdEV2YWw7Ci0K
LSAgICBpbnQgbV9jYXB0dXJlU3RhcnQ7Ci0gICAgaW50IG1fY2FwdHVyZUVuZDsKLQotICAgIHN0
ZDo6dW5pcXVlX3B0cjxTbG93QXJndW1lbnRbXT4gbV9zbG93QXJndW1lbnRzOworICAgIAorICAg
IFdyaXRlQmFycmllcjxTY29wZWRBcmd1bWVudHNUYWJsZT4gbV9hcmd1bWVudHM7CiAgICAgCiAg
ICAgc3RkOjp1bmlxdWVfcHRyPFdhdGNocG9pbnRDbGVhbnVwPiBtX3dhdGNocG9pbnRDbGVhbnVw
OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WYXJPZmZzZXQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Zhck9mZnNldC5jcHAJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WYXJPZmZzZXQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IlZhck9mZnNldC5oIgorCituYW1lc3BhY2UgSlNDIHsKKwordm9pZCBWYXJPZmZzZXQ6OmR1bXAo
UHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKG1fa2luZCkgeworICAgIGNh
c2UgSW52YWxpZFZhcktpbmQ6CisgICAgICAgIG91dC5wcmludCgiaW52YWxpZCIpOworICAgICAg
ICByZXR1cm47CisgICAgY2FzZSBTY29wZVZhcktpbmQ6CisgICAgICAgIG91dC5wcmludChzY29w
ZU9mZnNldCgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU3RhY2tWYXJLaW5kOgorICAg
ICAgICBvdXQucHJpbnQoc3RhY2tPZmZzZXQoKSk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IENhcHR1cmVkQXJndW1lbnRLaW5kOgorICAgICAgICBvdXQucHJpbnQoY2FwdHVyZWRBcmd1bWVu
dE9mZnNldCgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworbmFtZXNwYWNlIFdURiB7
CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVh
bSYgb3V0LCBWYXJLaW5kIHZhcktpbmQpCit7CisgICAgc3dpdGNoICh2YXJLaW5kKSB7CisgICAg
Y2FzZSBJbnZhbGlkVmFyS2luZDoKKyAgICAgICAgb3V0LnByaW50KCJJbnZhbGlkIik7CisgICAg
ICAgIHJldHVybjsKKyAgICBjYXNlIFNjb3BlVmFyS2luZDoKKyAgICAgICAgb3V0LnByaW50KCJT
Y29wZSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBTdGFja1ZhcktpbmQ6CisgICAgICAg
IG91dC5wcmludCgiU3RhY2siKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ2FwdHVyZWRB
cmd1bWVudEtpbmQ6CisgICAgICAgIG91dC5wcmludCgiQ2FwdHVyZWRBcmd1bWVudCIpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdURgorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9WYXJPZmZzZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9WYXJPZmZzZXQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1Zhck9mZnNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjE0IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgVmFyT2Zm
c2V0X2gKKyNkZWZpbmUgVmFyT2Zmc2V0X2gKKworI2luY2x1ZGUgIkNhcHR1cmVkQXJndW1lbnRP
ZmZzZXQuaCIKKyNpbmNsdWRlICJTY29wZU9mZnNldC5oIgorI2luY2x1ZGUgIlZpcnR1YWxSZWdp
c3Rlci5oIgorCituYW1lc3BhY2UgSlNDIHsKKworZW51bSBWYXJLaW5kIDogdWludDhfdCB7Cisg
ICAgSW52YWxpZFZhcktpbmQsCisgICAgU2NvcGVWYXJLaW5kLAorICAgIFN0YWNrVmFyS2luZCwK
KyAgICBDYXB0dXJlZEFyZ3VtZW50S2luZAorfTsKKworY2xhc3MgVmFyT2Zmc2V0IHsKK3B1Ymxp
YzoKKyAgICBWYXJPZmZzZXQoKQorICAgICAgICA6IG1fa2luZChJbnZhbGlkVmFyS2luZCkKKyAg
ICAgICAgLCBtX29mZnNldChVSU5UX01BWCkKKyAgICB7CisgICAgfQorICAgIAorICAgIGV4cGxp
Y2l0IFZhck9mZnNldChWaXJ0dWFsUmVnaXN0ZXIgc3RhY2tPZmZzZXQpCisgICAgeworICAgICAg
ICBpZiAoIXN0YWNrT2Zmc2V0LmlzVmFsaWQoKSkgeworICAgICAgICAgICAgbV9raW5kID0gSW52
YWxpZFZhcktpbmQ7CisgICAgICAgICAgICBtX29mZnNldCA9IFVJTlRfTUFYOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgbV9raW5kID0gU3RhY2tWYXJLaW5kOworICAgICAgICAgICAg
bV9vZmZzZXQgPSBzdGFja09mZnNldC5vZmZzZXQoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAK
KyAgICBleHBsaWNpdCBWYXJPZmZzZXQoU2NvcGVPZmZzZXQgc2NvcGVPZmZzZXQpCisgICAgewor
ICAgICAgICBpZiAoIXNjb3BlT2Zmc2V0KSB7CisgICAgICAgICAgICBtX2tpbmQgPSBJbnZhbGlk
VmFyS2luZDsKKyAgICAgICAgICAgIG1fb2Zmc2V0ID0gVUlOVF9NQVg7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICBtX2tpbmQgPSBTY29wZVZhcktpbmQ7CisgICAgICAgICAgICBtX29m
ZnNldCA9IHNjb3BlT2Zmc2V0Lm9mZnNldCgpOworICAgICAgICB9CisgICAgfQorICAgIAorICAg
IGV4cGxpY2l0IFZhck9mZnNldChDYXB0dXJlZEFyZ3VtZW50T2Zmc2V0IGNhcHR1cmVkQXJndW1l
bnRPZmZzZXQpCisgICAgeworICAgICAgICBpZiAoIWNhcHR1cmVkQXJndW1lbnRPZmZzZXQpIHsK
KyAgICAgICAgICAgIG1fa2luZCA9IEludmFsaWRWYXJLaW5kOworICAgICAgICAgICAgbV9vZmZz
ZXQgPSBVSU5UX01BWDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1fa2luZCA9IENh
cHR1cmVkQXJndW1lbnRLaW5kOworICAgICAgICAgICAgbV9vZmZzZXQgPSBjYXB0dXJlZEFyZ3Vt
ZW50T2Zmc2V0Lm9mZnNldCgpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHN0YXRpYyBW
YXJPZmZzZXQgYXNzZW1ibGUoVmFyS2luZCBraW5kLCB1bnNpZ25lZCBvZmZzZXQpCisgICAgewor
ICAgICAgICBWYXJPZmZzZXQgcmVzdWx0OworICAgICAgICByZXN1bHQubV9raW5kID0ga2luZDsK
KyAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gb2Zmc2V0OworICAgICAgICByZXN1bHQuY2hlY2tT
YW5pdHkoKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgYm9vbCBp
c1ZhbGlkKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2tpbmQgIT0gSW52YWxpZFZh
cktpbmQ7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiAhaXNWYWxpZCgpOworICAgIH0KKyAgICAKKyAgICBWYXJLaW5kIGtpbmQo
KSBjb25zdCB7IHJldHVybiBtX2tpbmQ7IH0KKyAgICAKKyAgICBib29sIGlzU3RhY2soKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fa2luZCA9PSBTdGFja1ZhcktpbmQ7CisgICAgfQor
ICAgIAorICAgIGJvb2wgaXNTY29wZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9r
aW5kID09IFNjb3BlVmFyS2luZDsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc0NhcHR1cmVkQXJn
dW1lbnQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fa2luZCA9PSBDYXB0dXJlZEFy
Z3VtZW50S2luZDsKKyAgICB9CisgICAgCisgICAgVmlydHVhbFJlZ2lzdGVyIHN0YWNrT2Zmc2V0
VW5jaGVja2VkKCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmICghaXNTdGFjaygpKQorICAgICAg
ICAgICAgcmV0dXJuIFZpcnR1YWxSZWdpc3RlcigpOworICAgICAgICByZXR1cm4gVmlydHVhbFJl
Z2lzdGVyKG1fb2Zmc2V0KTsKKyAgICB9CisgICAgCisgICAgU2NvcGVPZmZzZXQgc2NvcGVPZmZz
ZXRVbmNoZWNrZWQoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKCFpc1Njb3BlKCkpCisgICAg
ICAgICAgICByZXR1cm4gU2NvcGVPZmZzZXQoKTsKKyAgICAgICAgcmV0dXJuIFNjb3BlT2Zmc2V0
KG1fb2Zmc2V0KTsKKyAgICB9CisgICAgCisgICAgQ2FwdHVyZWRBcmd1bWVudE9mZnNldCBjYXB0
dXJlZEFyZ3VtZW50T2Zmc2V0VW5jaGVja2VkKCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmICgh
aXNDYXB0dXJlZEFyZ3VtZW50KCkpCisgICAgICAgICAgICByZXR1cm4gQ2FwdHVyZWRBcmd1bWVu
dE9mZnNldCgpOworICAgICAgICByZXR1cm4gQ2FwdHVyZWRBcmd1bWVudE9mZnNldChtX29mZnNl
dCk7CisgICAgfQorICAgIAorICAgIFZpcnR1YWxSZWdpc3RlciBzdGFja09mZnNldCgpIGNvbnN0
CisgICAgeworICAgICAgICBBU1NFUlQoaXNTdGFjaygpKTsKKyAgICAgICAgcmV0dXJuIFZpcnR1
YWxSZWdpc3RlcihtX29mZnNldCk7CisgICAgfQorICAgIAorICAgIFNjb3BlT2Zmc2V0IHNjb3Bl
T2Zmc2V0KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc1Njb3BlKCkpOworICAgICAg
ICByZXR1cm4gU2NvcGVPZmZzZXQobV9vZmZzZXQpOworICAgIH0KKyAgICAKKyAgICBDYXB0dXJl
ZEFyZ3VtZW50T2Zmc2V0IGNhcHR1cmVkQXJndW1lbnRPZmZzZXQoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgQVNTRVJUKGlzQ2FwdHVyZWRBcmd1bWVudCgpKTsKKyAgICAgICAgcmV0dXJuIENhcHR1
cmVkQXJndW1lbnRPZmZzZXQobV9vZmZzZXQpOworICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBy
YXdPZmZzZXQoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzVmFsaWQoKSk7CisgICAg
ICAgIHJldHVybiBtX29mZnNldDsKKyAgICB9CisgICAgCisgICAgdm9pZCBjaGVja1Nhbml0eSgp
IGNvbnN0CisgICAgeworICAgICAgICBpZiAoQVNTRVJUX0RJU0FCTEVEKQorICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAKKyAgICAgICAgc3dpdGNoIChtX2tpbmQpIHsKKyAgICAgICAgY2Fz
ZSBJbnZhbGlkVmFyS2luZDoKKyAgICAgICAgICAgIEFTU0VSVChtX29mZnNldCA9PSBVSU5UX01B
WCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNhc2UgU2NvcGVWYXJLaW5kOgorICAg
ICAgICAgICAgQVNTRVJUKHNjb3BlT2Zmc2V0KCkpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICBjYXNlIFN0YWNrVmFyS2luZDoKKyAgICAgICAgICAgIEFTU0VSVChzdGFja09mZnNldCgp
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBDYXB0dXJlZEFyZ3VtZW50S2lu
ZDoKKyAgICAgICAgICAgIEFTU0VSVChjYXB0dXJlZEFyZ3VtZW50T2Zmc2V0KCkpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFZhck9mZnNl
dCYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9raW5kID09IG90aGVyLm1f
a2luZAorICAgICAgICAgICAgJiYgbV9vZmZzZXQgPT0gb3RoZXIubV9vZmZzZXQ7CisgICAgfQor
ICAgIAorICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBWYXJPZmZzZXQmIG90aGVyKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgIH0KKyAgICAKKyAg
ICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAKK3ByaXZhdGU6CisgICAgVmFy
S2luZCBtX2tpbmQ7CisgICAgdW5zaWduZWQgbV9vZmZzZXQ7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBKU0MKKworbmFtZXNwYWNlIFdURiB7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVh
bSYsIEpTQzo6VmFyS2luZCk7CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gVmFy
T2Zmc2V0X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVmFyaWFibGVM
b2NhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Zh
cmlhYmxlTG9jYXRpb24uaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1ZhcmlhYmxlTG9jYXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM4IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
VmFyaWFibGVMb2NhdGlvbl9oCisjZGVmaW5lIFZhcmlhYmxlTG9jYXRpb25faAorCisjaW5jbHVk
ZSAiVmlydHVhbFJlZ2lzdGVyLmgiCisKK25hbWVzcGFjZSBKU0MgeworCisKKworfSAvLyBuYW1l
c3BhY2UgSlNDCisKKyNlbmRpZiAvLyBWYXJpYWJsZUxvY2F0aW9uX2gKKwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>247253</attachid>
            <date>2015-02-24 12:39:20 -0800</date>
            <delta_ts>2015-02-26 13:26:50 -0800</delta_ts>
            <desc>more jit stuff</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>136561</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2Vt
Ymxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJz
dHJhY3RNYWNyb0Fzc2VtYmxlci5oCShyZXZpc2lvbiAxODA1NjUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMjA1LDYgKzIwNSwxMSBAQCBwdWJsaWM6CiAgICAgICAgIFJlZ2lzdGVySUQgaW5kZXg7
CiAgICAgICAgIFNjYWxlIHNjYWxlOwogICAgICAgICBpbnQzMl90IG9mZnNldDsKKyAgICAgICAg
CisgICAgICAgIEJhc2VJbmRleCB3aXRoT2Zmc2V0KGludDMyX3QgYWRkaXRpb25hbE9mZnNldCkK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEJhc2VJbmRleChiYXNlLCBpbmRleCwgc2Nh
bGUsIG9mZnNldCArIGFkZGl0aW9uYWxPZmZzZXQpOworICAgICAgICB9CiAgICAgfTsKIAogICAg
IC8vIEFic29sdXRlQWRkcmVzczoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9CeVZhbEluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQnlWYWxJbmZvLmgJKHJldmlzaW9uIDE4MDU2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9CeVZhbEluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDEsNiArNDEsOCBAQCBlbnVt
IEpJVEFycmF5TW9kZSB7CiAgICAgSklURG91YmxlLAogICAgIEpJVENvbnRpZ3VvdXMsCiAgICAg
SklUQXJyYXlTdG9yYWdlLAorICAgIEpJVERpcmVjdEFyZ3VtZW50cywKKyAgICBKSVRTY29wZWRB
cmd1bWVudHMsCiAgICAgSklUSW50OEFycmF5LAogICAgIEpJVEludDE2QXJyYXksCiAgICAgSklU
SW50MzJBcnJheSwKQEAgLTY1LDYgKzY3LDE3IEBAIGlubGluZSBib29sIGlzT3B0aW1pemFibGVJ
bmRleGluZ1R5cGUoSW4KICAgICB9CiB9CiAKK2lubGluZSBib29sIGhhc09wdGltaXphYmxlSW5k
ZXhpbmdGb3JKU1R5cGUoSlNUeXBlIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAg
Y2FzZSBEaXJlY3RBcmd1bWVudHNUeXBlOgorICAgIGNhc2UgU2NvcGVkQXJndW1lbnRzVHlwZToK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KK30KKwogaW5saW5lIGJvb2wgaGFzT3B0aW1pemFibGVJbmRleGluZ0ZvckNsYXNz
SW5mbyhjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbykKIHsKICAgICByZXR1cm4gaXNUeXBlZFZp
ZXcoY2xhc3NJbmZvLT50eXBlZEFycmF5U3RvcmFnZVR5cGUpOwpAQCAtNzMsNiArODYsNyBAQCBp
bmxpbmUgYm9vbCBoYXNPcHRpbWl6YWJsZUluZGV4aW5nRm9yQ2xhCiBpbmxpbmUgYm9vbCBoYXNP
cHRpbWl6YWJsZUluZGV4aW5nKFN0cnVjdHVyZSogc3RydWN0dXJlKQogewogICAgIHJldHVybiBp
c09wdGltaXphYmxlSW5kZXhpbmdUeXBlKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpCisgICAg
ICAgIHx8IGhhc09wdGltaXphYmxlSW5kZXhpbmdGb3JKU1R5cGUoc3RydWN0dXJlLT50eXBlSW5m
bygpLnR5cGUoKSkKICAgICAgICAgfHwgaGFzT3B0aW1pemFibGVJbmRleGluZ0ZvckNsYXNzSW5m
byhzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpKTsKIH0KIApAQCAtOTMsNiArMTA3LDE5IEBAIGlubGlu
ZSBKSVRBcnJheU1vZGUgaml0QXJyYXlNb2RlRm9ySW5kZXgKICAgICB9CiB9CiAKK2lubGluZSBK
SVRBcnJheU1vZGUgaml0QXJyYXlNb2RlRm9ySlNUeXBlKEpTVHlwZSB0eXBlKQoreworICAgIHN3
aXRjaCAodHlwZSkgeworICAgIGNhc2UgRGlyZWN0QXJndW1lbnRzVHlwZToKKyAgICAgICAgcmV0
dXJuIEpJVERpcmVjdEFyZ3VtZW50czsKKyAgICBjYXNlIFNjb3BlZEFyZ3VtZW50c1R5cGU6Cisg
ICAgICAgIHJldHVybiBKSVRTY29wZWRBcmd1bWVudHM7CisgICAgZGVmYXVsdDoKKyAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIEpJVENvbnRpZ3Vv
dXM7CisgICAgfQorfQorCiBpbmxpbmUgSklUQXJyYXlNb2RlIGppdEFycmF5TW9kZUZvckNsYXNz
SW5mbyhjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbykKIHsKICAgICBzd2l0Y2ggKGNsYXNzSW5m
by0+dHlwZWRBcnJheVN0b3JhZ2VUeXBlKSB7CkBAIC0xMjAsNiArMTQ3LDE5IEBAIGlubGluZSBK
SVRBcnJheU1vZGUgaml0QXJyYXlNb2RlRm9yQ2xhc3MKICAgICB9CiB9CiAKK2lubGluZSBib29s
IGppdEFycmF5TW9kZVBlcm1pdHNQdXQoSklUQXJyYXlNb2RlIG1vZGUpCit7CisgICAgc3dpdGNo
IChtb2RlKSB7CisgICAgY2FzZSBKSVREaXJlY3RBcmd1bWVudHM6CisgICAgY2FzZSBKSVRTY29w
ZWRBcmd1bWVudHM6CisgICAgICAgIC8vIFdlIGNvdWxkIHN1cHBvcnQgcHV0X2J5X3ZhbCBvbiB0
aGVzZSBhdCBzb21lIHBvaW50LCBidXQgaXQncyBqdXN0IG5vdCB0aGF0IHByb2ZpdGFibGUKKyAg
ICAgICAgLy8gYXQgdGhlIG1vbWVudC4KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGRlZmF1
bHQ6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KK30KKwogaW5saW5lIFR5cGVkQXJyYXlU
eXBlIHR5cGVkQXJyYXlUeXBlRm9ySklUQXJyYXlNb2RlKEpJVEFycmF5TW9kZSBtb2RlKQogewog
ICAgIHN3aXRjaCAobW9kZSkgewpAQCAtMTUyLDYgKzE5Miw5IEBAIGlubGluZSBKSVRBcnJheU1v
ZGUgaml0QXJyYXlNb2RlRm9yU3RydWMKICAgICBpZiAoaXNPcHRpbWl6YWJsZUluZGV4aW5nVHlw
ZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSkKICAgICAgICAgcmV0dXJuIGppdEFycmF5TW9k
ZUZvckluZGV4aW5nVHlwZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKTsKICAgICAKKyAgICBp
ZiAoaGFzT3B0aW1pemFibGVJbmRleGluZ0ZvckpTVHlwZShzdHJ1Y3R1cmUtPnR5cGVJbmZvKCku
dHlwZSgpKSkKKyAgICAgICAgcmV0dXJuIGppdEFycmF5TW9kZUZvckpTVHlwZShzdHJ1Y3R1cmUt
PnR5cGVJbmZvKCkudHlwZSgpKTsKKyAgICAKICAgICBBU1NFUlQoaGFzT3B0aW1pemFibGVJbmRl
eGluZ0ZvckNsYXNzSW5mbyhzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpKSk7CiAgICAgcmV0dXJuIGpp
dEFycmF5TW9kZUZvckNsYXNzSW5mbyhzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpKTsKIH0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmNw
cAkocmV2aXNpb24gMTgwNTY1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Nw
ZWN1bGF0ZWRUeXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksMTAgKzI5LDExIEBACiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU3BlY3VsYXRlZFR5cGUuaCIKIAotI2luY2x1ZGUg
IkFyZ3VtZW50cy5oIgorI2luY2x1ZGUgIkRpcmVjdEFyZ3VtZW50cy5oIgogI2luY2x1ZGUgIkpT
QXJyYXkuaCIKICNpbmNsdWRlICJKU0Z1bmN0aW9uLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5o
IgorI2luY2x1ZGUgIlNjb3BlZEFyZ3VtZW50cy5oIgogI2luY2x1ZGUgIlN0cmluZ09iamVjdC5o
IgogI2luY2x1ZGUgIlZhbHVlUHJvZmlsZS5oIgogI2luY2x1ZGUgPHd0Zi9Cb3VuZHNDaGVja2Vk
UG9pbnRlci5oPgpAQCAtMTI3LDggKzEyOCwxMyBAQCB2b2lkIGR1bXBTcGVjdWxhdGlvbihQcmlu
dFN0cmVhbSYgb3V0LCBTCiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgaXNUb3Ag
PSBmYWxzZTsKICAgICAKLSAgICAgICAgICAgIGlmICh2YWx1ZSAmIFNwZWNBcmd1bWVudHMpCi0g
ICAgICAgICAgICAgICAgbXlPdXQucHJpbnQoIkFyZ3VtZW50cyIpOworICAgICAgICAgICAgaWYg
KHZhbHVlICYgU3BlY0RpcmVjdEFyZ3VtZW50cykKKyAgICAgICAgICAgICAgICBteU91dC5wcmlu
dCgiRGlyZWN0YXJndW1lbnRzIik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
aXNUb3AgPSBmYWxzZTsKKyAgICAKKyAgICAgICAgICAgIGlmICh2YWx1ZSAmIFNwZWNTY29wZWRB
cmd1bWVudHMpCisgICAgICAgICAgICAgICAgbXlPdXQucHJpbnQoIlNjb3BlZGFyZ3VtZW50cyIp
OwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGlzVG9wID0gZmFsc2U7CiAgICAg
CkBAIC0yMzIsOCArMjM4LDEwIEBAIHN0YXRpYyBjb25zdCBjaGFyKiBzcGVjdWxhdGlvblRvQWJi
cmV2aWEKICAgICAgICAgcmV0dXJuICI8RmxvYXQzMmFycmF5PiI7CiAgICAgaWYgKGlzRmxvYXQ2
NEFycmF5U3BlY3VsYXRpb24ocHJlZGljdGlvbikpCiAgICAgICAgIHJldHVybiAiPEZsb2F0NjRh
cnJheT4iOwotICAgIGlmIChpc0FyZ3VtZW50c1NwZWN1bGF0aW9uKHByZWRpY3Rpb24pKQotICAg
ICAgICByZXR1cm4gIjxBcmd1bWVudHM+IjsKKyAgICBpZiAoaXNEaXJlY3RBcmd1bWVudHNTcGVj
dWxhdGlvbihwcmVkaWN0aW9uKSkKKyAgICAgICAgcmV0dXJuICI8RGlyZWN0QXJndW1lbnRzPiI7
CisgICAgaWYgKGlzU2NvcGVkQXJndW1lbnRzU3BlY3VsYXRpb24ocHJlZGljdGlvbikpCisgICAg
ICAgIHJldHVybiAiPFNjb3BlZEFyZ3VtZW50cz4iOwogICAgIGlmIChpc1N0cmluZ09iamVjdFNw
ZWN1bGF0aW9uKHByZWRpY3Rpb24pKQogICAgICAgICByZXR1cm4gIjxTdHJpbmdPYmplY3Q+IjsK
ICAgICBpZiAoaXNTdHJpbmdPclN0cmluZ09iamVjdFNwZWN1bGF0aW9uKHByZWRpY3Rpb24pKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBl
LmgJKHJldmlzaW9uIDE4MDU2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9T
cGVjdWxhdGVkVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01Miw4ICs1Miw5IEBAIHN0YXRpYyBj
b25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjVWludDMyQXIKIHN0YXRpYyBjb25zdCBTcGVjdWxhdGVk
VHlwZSBTcGVjRmxvYXQzMkFycmF5ICAgICAgID0gMHgwMDAwMDQwMDsgLy8gSXQncyBkZWZpbml0
ZWx5IGFuIFVpbnQxNkFycmF5IG9yIG9uZSBvZiBpdHMgc3ViY2xhc3Nlcy4KIHN0YXRpYyBjb25z
dCBTcGVjdWxhdGVkVHlwZSBTcGVjRmxvYXQ2NEFycmF5ICAgICAgID0gMHgwMDAwMDgwMDsgLy8g
SXQncyBkZWZpbml0ZWx5IGFuIFVpbnQxNkFycmF5IG9yIG9uZSBvZiBpdHMgc3ViY2xhc3Nlcy4K
IHN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjVHlwZWRBcnJheVZpZXcgICAgID0gU3Bl
Y0ludDhBcnJheSB8IFNwZWNJbnQxNkFycmF5IHwgU3BlY0ludDMyQXJyYXkgfCBTcGVjVWludDhB
cnJheSB8IFNwZWNVaW50OENsYW1wZWRBcnJheSB8IFNwZWNVaW50MTZBcnJheSB8IFNwZWNVaW50
MzJBcnJheSB8IFNwZWNGbG9hdDMyQXJyYXkgfCBTcGVjRmxvYXQ2NEFycmF5Owotc3RhdGljIGNv
bnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNBcmd1bWVudHMgICAgICAgICAgPSAweDAwMDAxMDAwOyAv
LyBJdCdzIGRlZmluaXRlbHkgYW4gQXJndW1lbnRzIG9iamVjdC4KLXN0YXRpYyBjb25zdCBTcGVj
dWxhdGVkVHlwZSBTcGVjU3RyaW5nT2JqZWN0ICAgICAgID0gMHgwMDAwMjAwMDsgLy8gSXQncyBk
ZWZpbml0ZWx5IGEgU3RyaW5nT2JqZWN0Lgorc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNw
ZWNEaXJlY3RBcmd1bWVudHMgICAgPSAweDAwMDAxMDAwOyAvLyBJdCdzIGRlZmluaXRlbHkgYSBE
aXJlY3RBcmd1bWVudHMgb2JqZWN0Lgorc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNT
Y29wZWRBcmd1bWVudHMgICAgPSAweDAwMDAyMDAwOyAvLyBJdCdzIGRlZmluaXRlbHkgYSBTY29w
ZWRBcmd1bWVudHMgb2JqZWN0Lgorc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNTdHJp
bmdPYmplY3QgICAgICAgPSAweDAwMDA0MDAwOyAvLyBJdCdzIGRlZmluaXRlbHkgYSBTdHJpbmdP
YmplY3QuCiBzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY09iamVjdE90aGVyICAgICAg
ICA9IDB4MDAwMDgwMDA7IC8vIEl0J3MgZGVmaW5pdGVseSBhbiBvYmplY3QgYnV0IG5vdCBKU0Zp
bmFsT2JqZWN0LCBKU0FycmF5LCBvciBKU0Z1bmN0aW9uLgogc3RhdGljIGNvbnN0IFNwZWN1bGF0
ZWRUeXBlIFNwZWNPYmplY3QgICAgICAgICAgICAgPSAweDAwMDBmZmZmOyAvLyBCaXRtYXNrIHVz
ZWQgZm9yIHRlc3RpbmcgZm9yIGFueSBraW5kIG9mIG9iamVjdCBwcmVkaWN0aW9uLgogc3RhdGlj
IGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNTdHJpbmdJZGVudCAgICAgICAgPSAweDAwMDEwMDAw
OyAvLyBJdCdzIGRlZmluaXRlbHkgYSBKU1N0cmluZywgYW5kIGl0J3MgYW4gaWRlbnRpZmllci4K
QEAgLTE5Myw5ICsxOTQsMTQgQEAgaW5saW5lIGJvb2wgaXNGbG9hdDY0QXJyYXlTcGVjdWxhdGlv
bihTcAogICAgIHJldHVybiB2YWx1ZSA9PSBTcGVjRmxvYXQ2NEFycmF5OwogfQogCi1pbmxpbmUg
Ym9vbCBpc0FyZ3VtZW50c1NwZWN1bGF0aW9uKFNwZWN1bGF0ZWRUeXBlIHZhbHVlKQoraW5saW5l
IGJvb2wgaXNEaXJlY3RBcmd1bWVudHNTcGVjdWxhdGlvbihTcGVjdWxhdGVkVHlwZSB2YWx1ZSkK
IHsKLSAgICByZXR1cm4gISF2YWx1ZSAmJiAodmFsdWUgJiBTcGVjQXJndW1lbnRzKSA9PSB2YWx1
ZTsKKyAgICByZXR1cm4gdmFsdWUgPT0gU3BlY0RpcmVjdEFyZ3VtZW50czsKK30KKworaW5saW5l
IGJvb2wgaXNTY29wZWRBcmd1bWVudHNTcGVjdWxhdGlvbihTcGVjdWxhdGVkVHlwZSB2YWx1ZSkK
K3sKKyAgICByZXR1cm4gdmFsdWUgPT0gU3BlY1Njb3BlZEFyZ3VtZW50czsKIH0KIAogaW5saW5l
IGJvb2wgaXNBY3Rpb25hYmxlSW50TXV0YWJsZUFycmF5U3BlY3VsYXRpb24oU3BlY3VsYXRlZFR5
cGUgdmFsdWUpCkBAIC0yMjQsMTMgKzIzMCwxNCBAQCBpbmxpbmUgYm9vbCBpc0FjdGlvbmFibGVU
eXBlZE11dGFibGVBcnJhCiBpbmxpbmUgYm9vbCBpc0FjdGlvbmFibGVNdXRhYmxlQXJyYXlTcGVj
dWxhdGlvbihTcGVjdWxhdGVkVHlwZSB2YWx1ZSkKIHsKICAgICByZXR1cm4gaXNBcnJheVNwZWN1
bGF0aW9uKHZhbHVlKQotICAgICAgICB8fCBpc0FyZ3VtZW50c1NwZWN1bGF0aW9uKHZhbHVlKQog
ICAgICAgICB8fCBpc0FjdGlvbmFibGVUeXBlZE11dGFibGVBcnJheVNwZWN1bGF0aW9uKHZhbHVl
KTsKIH0KIAogaW5saW5lIGJvb2wgaXNBY3Rpb25hYmxlQXJyYXlTcGVjdWxhdGlvbihTcGVjdWxh
dGVkVHlwZSB2YWx1ZSkKIHsKICAgICByZXR1cm4gaXNTdHJpbmdTcGVjdWxhdGlvbih2YWx1ZSkK
KyAgICAgICAgfHwgaXNEaXJlY3RBcmd1bWVudHNTcGVjdWxhdGlvbih2YWx1ZSkKKyAgICAgICAg
fHwgaXNTY29wZWRBcmd1bWVudHNTcGVjdWxhdGlvbih2YWx1ZSkKICAgICAgICAgfHwgaXNBY3Rp
b25hYmxlTXV0YWJsZUFycmF5U3BlY3VsYXRpb24odmFsdWUpOwogfQogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJh
dG9yLmNwcAkocmV2aXNpb24gMTgwNTY1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNiw3ICsx
MTYsNyBAQCBQYXJzZXJFcnJvciBCeXRlY29kZUdlbmVyYXRvcjo6Z2VuZXJhdGUoCiAgICAgbV9j
b2RlQmxvY2stPnNocmlua1RvRml0KCk7CiAKICAgICBpZiAobV9jb2RlQmxvY2stPnN5bWJvbFRh
YmxlKCkgJiYgIW1fY29kZUJsb2NrLT52bSgpLT50eXBlUHJvZmlsZXIoKSkKLSAgICAgICAgbV9j
b2RlQmxvY2stPnNldFN5bWJvbFRhYmxlKG1fY29kZUJsb2NrLT5zeW1ib2xUYWJsZSgpLT5jbG9u
ZUNhcHR1cmVkTmFtZXMoKm1fY29kZUJsb2NrLT52bSgpKSk7CisgICAgICAgIG1fY29kZUJsb2Nr
LT5zZXRTeW1ib2xUYWJsZShtX2NvZGVCbG9jay0+c3ltYm9sVGFibGUoKS0+Y2xvbmVJZ25vcmlu
Z1N0YWNrKCptX2NvZGVCbG9jay0+dm0oKSkpOwogCiAgICAgaWYgKG1fZXhwcmVzc2lvblRvb0Rl
ZXApCiAgICAgICAgIHJldHVybiBQYXJzZXJFcnJvcihQYXJzZXJFcnJvcjo6T3V0T2ZNZW1vcnkp
OwpAQCAtMTI0LDE3ICsxMjQsMjggQEAgUGFyc2VyRXJyb3IgQnl0ZWNvZGVHZW5lcmF0b3I6Omdl
bmVyYXRlKAogfQogCiBib29sIEJ5dGVjb2RlR2VuZXJhdG9yOjphZGRWYXIoCi0gICAgY29uc3Qg
SWRlbnRpZmllciYgaWRlbnQsIENvbnN0YW50TW9kZSBjb25zdGFudE1vZGUsIFdhdGNoTW9kZSB3
YXRjaE1vZGUsIFJlZ2lzdGVySUQqJiByMCkKKyAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwg
Q29uc3RhbnRNb2RlIGNvbnN0YW50TW9kZSwgVmFyS2luZCB2YXJLaW5kLCBXYXRjaE1vZGUgd2F0
Y2hNb2RlLAorICAgIFJlZ2lzdGVySUQqJiByMCkKIHsKICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8
c2l6ZV90PihtX2NvZGVCbG9jay0+bV9udW1WYXJzKSA9PSBtX2NhbGxlZVJlZ2lzdGVycy5zaXpl
KCkpOwogICAgIAogICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKHN5bWJvbFRhYmxlKCku
bV9sb2NrKTsKLSAgICBpbnQgaW5kZXggPSB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChtX2NhbGxl
ZVJlZ2lzdGVycy5zaXplKCkpLm9mZnNldCgpOwotICAgIFN5bWJvbFRhYmxlRW50cnkgbmV3RW50
cnkoaW5kZXgsIGNvbnN0YW50TW9kZSA9PSBJc0NvbnN0YW50ID8gUmVhZE9ubHkgOiAwKTsKKyAg
ICBWYXJPZmZzZXQgdmFyT2Zmc2V0OworICAgIGlmICh2YXJLaW5kID09IEhlYXBWYXJLaW5kKQor
ICAgICAgICB2YXJPZmZzZXQgPSBWYXJPZmZzZXQoSGVhcE9mZnNldChtX251bUNhcHR1cmVkVmFy
aWFibGVzKyspKTsKKyAgICBlbHNlIHsKKyAgICAgICAgQVNTRVJUKHZhcktpbmQgPT0gU3RhY2tW
YXJLaW5kKTsKKyAgICAgICAgdmFyT2Zmc2V0ID0gVmFyT2Zmc2V0KHZpcnR1YWxSZWdpc3RlckZv
ckxvY2FsKG1fY2FsbGVlUmVnaXN0ZXJzLnNpemUoKSkpOworICAgIH0KKyAgICBTeW1ib2xUYWJs
ZUVudHJ5IG5ld0VudHJ5KHZhck9mZnNldCwgY29uc3RhbnRNb2RlID09IElzQ29uc3RhbnQgPyBS
ZWFkT25seSA6IDApOwogICAgIFN5bWJvbFRhYmxlOjpNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBz
eW1ib2xUYWJsZSgpLmFkZChsb2NrZXIsIGlkZW50LmltcGwoKSwgbmV3RW50cnkpOwogCiAgICAg
aWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkgewotICAgICAgICByMCA9ICZyZWdpc3RlckZvcihyZXN1
bHQuaXRlcmF0b3ItPnZhbHVlLmdldEluZGV4KCkpOworICAgICAgICBSRUxFQVNFX0FTU0VSVCh2
YXJLaW5kID09IHJlc3VsdC5pdGVyYXRvci0+dmFsdWUudmFyT2Zmc2V0KCkua2luZCgpKTsKKyAg
ICAgICAgaWYgKHZhcktpbmQgPT0gSGVhcFZhcktpbmQpCisgICAgICAgICAgICByMCA9IG51bGxw
dHI7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHIwID0gJnJlZ2lzdGVyRm9yKHJlc3VsdC5p
dGVyYXRvci0+dmFsdWUudmFyT2Zmc2V0KCkpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
fQogICAgIApAQCAtMTQ0LDcgKzE1NSwxMCBAQCBib29sIEJ5dGVjb2RlR2VuZXJhdG9yOjphZGRW
YXIoCiAgICAgICAgIG1fd2F0Y2hhYmxlVmFyaWFibGVzLmFwcGVuZChpZGVudCk7CiAgICAgfQog
ICAgIAotICAgIHIwID0gYWRkVmFyKCk7CisgICAgaWYgKHZhcktpbmQgPT0gSGVhcFZhcktpbmQp
CisgICAgICAgIHIwID0gbnVsbHB0cjsKKyAgICBlbHNlCisgICAgICAgIHIwID0gYWRkVmFyKCk7
CiAgICAgCiAgICAgQVNTRVJUKHdhdGNoTW9kZSA9PSBOb3RXYXRjaGFibGUgfHwgc3RhdGljX2Nh
c3Q8c2l6ZV90PihtX2NvZGVCbG9jay0+bV9udW1WYXJzKSA9PSBtX3dhdGNoYWJsZVZhcmlhYmxl
cy5zaXplKCkpOwogICAgIApAQCAtMjMxLDcgKzI0NSw2IEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjpC
eXRlY29kZUdlbmVyYXRvcihWTSYKICAgICB9CiAgICAgUmVnaXN0ZXJJRCogbG9jYWxBcmd1bWVu
dHNSZWdpc3RlciA9IG51bGxwdHI7CiAgICAgUmVnaXN0ZXJJRCogc2NyYXRjaCA9IGFkZFZhcigp
OwotICAgIG1fc3ltYm9sVGFibGUtPnNldENhcHR1cmVTdGFydCh2aXJ0dWFsUmVnaXN0ZXJGb3JM
b2NhbChtX2NvZGVCbG9jay0+bV9udW1WYXJzKS5vZmZzZXQoKSk7CiAKICAgICBpZiAoZnVuY3Rp
b25Ob2RlLT51c2VzQXJndW1lbnRzKCkgfHwgY29kZUJsb2NrLT51c2VzRXZhbCgpKSB7IC8vIE1h
eSByZWlmeSBhcmd1bWVudHMgb2JqZWN0LgogICAgICAgICBSZWdpc3RlcklEKiB1bm1vZGlmaWVk
QXJndW1lbnRzUmVnaXN0ZXIgPSBhZGRWYXIoKTsgLy8gQW5vbnltb3VzLCBzbyBpdCBjYW4ndCBi
ZSBtb2RpZmllZCBieSB1c2VyIGNvZGUuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCShyZXZpc2lvbiAxODA1
NjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJh
dG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTYxMywxNSArNjEzLDE1IEBAIG5hbWVzcGFjZSBKU0Mg
ewogCiAgICAgICAgIC8vIEFkZHMgYSB2YXIgc2xvdCBhbmQgbWFwcyBpdCB0byB0aGUgbmFtZSBp
ZGVudCBpbiBzeW1ib2xUYWJsZSgpLgogICAgICAgICBlbnVtIFdhdGNoTW9kZSB7IElzV2F0Y2hh
YmxlLCBOb3RXYXRjaGFibGUgfTsKLSAgICAgICAgUmVnaXN0ZXJJRCogYWRkVmFyKGNvbnN0IElk
ZW50aWZpZXImIGlkZW50LCBDb25zdGFudE1vZGUgY29uc3RhbnRNb2RlLCBXYXRjaE1vZGUgd2F0
Y2hNb2RlKQorICAgICAgICBSZWdpc3RlcklEKiBhZGRWYXIoY29uc3QgSWRlbnRpZmllciYgaWRl
bnQsIENvbnN0YW50TW9kZSBjb25zdGFudE1vZGUsIFZhcktpbmQgdmFyS2luZCwgV2F0Y2hNb2Rl
IHdhdGNoTW9kZSkKICAgICAgICAgewogICAgICAgICAgICAgUmVnaXN0ZXJJRCogbG9jYWw7Ci0g
ICAgICAgICAgICBhZGRWYXIoaWRlbnQsIGNvbnN0YW50TW9kZSwgd2F0Y2hNb2RlLCBsb2NhbCk7
CisgICAgICAgICAgICBhZGRWYXIoaWRlbnQsIGNvbnN0YW50TW9kZSwgdmFyS2luZCwgd2F0Y2hN
b2RlLCBsb2NhbCk7CiAgICAgICAgICAgICByZXR1cm4gbG9jYWw7CiAgICAgICAgIH0KIAogICAg
ICAgICAvLyBEaXR0by4gUmV0dXJucyB0cnVlIGlmIGEgbmV3IFJlZ2lzdGVySUQgd2FzIGFkZGVk
LCBmYWxzZSBpZiBhIHByZS1leGlzdGluZyBSZWdpc3RlcklEIHdhcyByZS11c2VkLgotICAgICAg
ICBib29sIGFkZFZhcihjb25zdCBJZGVudGlmaWVyJiwgQ29uc3RhbnRNb2RlLCBXYXRjaE1vZGUs
IFJlZ2lzdGVySUQqJik7CisgICAgICAgIGJvb2wgYWRkVmFyKGNvbnN0IElkZW50aWZpZXImLCBD
b25zdGFudE1vZGUsIFZhcktpbmQsIFdhdGNoTW9kZSwgUmVnaXN0ZXJJRComKTsKICAgICAgICAg
CiAgICAgICAgIC8vIEFkZHMgYW4gYW5vbnltb3VzIHZhciBzbG90LiBUbyBnaXZlIHRoaXMgc2xv
dCBhIG5hbWUsIGFkZCBpdCB0byBzeW1ib2xUYWJsZSgpLgogICAgICAgICBSZWdpc3RlcklEKiBh
ZGRWYXIoKQpAQCAtNzc0LDYgKzc3NCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBWZWN0
b3I8SWRlbnRpZmllciwgMTY+IG1fd2F0Y2hhYmxlVmFyaWFibGVzOwogICAgICAgICBTZWdtZW50
ZWRWZWN0b3I8UmVnaXN0ZXJJRCwgMzI+IG1fY29uc3RhbnRQb29sUmVnaXN0ZXJzOwogICAgICAg
ICBTZWdtZW50ZWRWZWN0b3I8UmVnaXN0ZXJJRCwgMzI+IG1fY2FsbGVlUmVnaXN0ZXJzOworICAg
ICAgICB1bnNpZ25lZCBtX251bUNhcHR1cmVkVmFyaWFibGVzOwogICAgICAgICBTZWdtZW50ZWRW
ZWN0b3I8UmVnaXN0ZXJJRCwgMzI+IG1fcGFyYW1ldGVyczsKICAgICAgICAgU2VnbWVudGVkVmVj
dG9yPExhYmVsLCAzMj4gbV9sYWJlbHM7CiAgICAgICAgIExhYmVsU2NvcGVTdG9yZSBtX2xhYmVs
U2NvcGVzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmNw
cAkocmV2aXNpb24gMTgwNTY1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJh
eU1vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMiwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE5Myw4ICsxOTMsMTUgQEAgQXJy
YXlNb2RlIEFycmF5TW9kZTo6cmVmaW5lKAogICAgICAgICBpZiAoaXNTdHJpbmdTcGVjdWxhdGlv
bihiYXNlKSkKICAgICAgICAgICAgIHJldHVybiB3aXRoVHlwZShBcnJheTo6U3RyaW5nKTsKICAg
ICAgICAgCi0gICAgICAgIGlmIChpc0FyZ3VtZW50c1NwZWN1bGF0aW9uKGJhc2UpKQotICAgICAg
ICAgICAgcmV0dXJuIHdpdGhUeXBlKEFycmF5OjpBcmd1bWVudHMpOworICAgICAgICBpZiAoaXNE
aXJlY3RBcmd1bWVudHNTcGVjdWxhdGlvbihiYXNlKSB8fCBpc1Njb3BlZEFyZ3VtZW50c1NwZWN1
bGF0aW9uKGJhc2UpKSB7CisgICAgICAgICAgICAvLyBIYW5kbGUgb3V0LW9mLWJvdW5kcyBhY2Nl
c3NlcyBhcyBnZW5lcmljIGFjY2Vzc2VzLgorICAgICAgICAgICAgaWYgKGdyYXBoLmhhc0V4aXRT
aXRlKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgT3V0T2ZCb3VuZHMpIHx8ICFpc0luQm91bmRzKCkp
CisgICAgICAgICAgICAgICAgcmV0dXJuIEFycmF5TW9kZShBcnJheTo6R2VuZXJpYyk7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIGlmIChpc0RpcmVjdEFyZ3VtZW50c1NwZWN1bGF0aW9uKGJh
c2UpKQorICAgICAgICAgICAgICAgIHJldHVybiB3aXRoVHlwZShBcnJheTo6RGlyZWN0QXJndW1l
bnRzKTsKKyAgICAgICAgICAgIHJldHVybiB3aXRoVHlwZShBcnJheTo6U2NvcGVkQXJndW1lbnRz
KTsKKyAgICAgICAgfQogICAgICAgICAKICAgICAgICAgQXJyYXlNb2RlIHJlc3VsdDsKICAgICAg
ICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CkBAIC0zOTIsOCArMzk5LDExIEBAIGJvb2wgQXJyYXlN
b2RlOjphbHJlYWR5Q2hlY2tlZChHcmFwaCYgZ3IKICAgICAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgICAgICB9IH0KICAgICAgICAgCi0gICAgY2FzZSBBcnJheTo6QXJndW1lbnRzOgotICAgICAg
ICByZXR1cm4gc3BlY3VsYXRpb25DaGVja2VkKHZhbHVlLm1fdHlwZSwgU3BlY0FyZ3VtZW50cyk7
CisgICAgY2FzZSBBcnJheTo6RGlyZWN0QXJndW1lbnRzOgorICAgICAgICByZXR1cm4gc3BlY3Vs
YXRpb25DaGVja2VkKHZhbHVlLm1fdHlwZSwgU3BlY0RpcmVjdEFyZ3VtZW50cyk7CisgICAgICAg
IAorICAgIGNhc2UgQXJyYXk6OlNjb3BlZEFyZ3VtZW50czoKKyAgICAgICAgcmV0dXJuIHNwZWN1
bGF0aW9uQ2hlY2tlZCh2YWx1ZS5tX3R5cGUsIFNwZWNTY29wZWRBcmd1bWVudHMpOwogICAgICAg
ICAKICAgICBjYXNlIEFycmF5OjpJbnQ4QXJyYXk6CiAgICAgICAgIHJldHVybiBzcGVjdWxhdGlv
bkNoZWNrZWQodmFsdWUubV90eXBlLCBTcGVjSW50OEFycmF5KTsKQEAgLTQ1Nyw4ICs0NjcsMTAg
QEAgY29uc3QgY2hhciogYXJyYXlUeXBlVG9TdHJpbmcoQXJyYXk6OlR5cAogICAgICAgICByZXR1
cm4gIkFycmF5U3RvcmFnZSI7CiAgICAgY2FzZSBBcnJheTo6U2xvd1B1dEFycmF5U3RvcmFnZToK
ICAgICAgICAgcmV0dXJuICJTbG93UHV0QXJyYXlTdG9yYWdlIjsKLSAgICBjYXNlIEFycmF5OjpB
cmd1bWVudHM6Ci0gICAgICAgIHJldHVybiAiQXJndW1lbnRzIjsKKyAgICBjYXNlIEFycmF5OjpE
aXJlY3RBcmd1bWVudHM6CisgICAgICAgIHJldHVybiAiRGlyZWN0QXJndW1lbnRzIjsKKyAgICBj
YXNlIEFycmF5OjpTY29wZWRBcmd1bWVudHM6CisgICAgICAgIHJldHVybiAiU2NvcGVkQXJndW1l
bnRzIjsKICAgICBjYXNlIEFycmF5OjpJbnQ4QXJyYXk6CiAgICAgICAgIHJldHVybiAiSW50OEFy
cmF5IjsKICAgICBjYXNlIEFycmF5OjpJbnQxNkFycmF5OgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0FycmF5TW9kZS5oCShyZXZpc2lvbiAxODA1NjUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTY1LDcgKzY1LDkgQEAgZW51bSBUeXBlIHsKICAgICBBcnJheVN0b3JhZ2UsCiAgICAgU2xvd1B1
dEFycmF5U3RvcmFnZSwKICAgICAKLSAgICBBcmd1bWVudHMsCisgICAgRGlyZWN0QXJndW1lbnRz
LAorICAgIFNjb3BlZEFyZ3VtZW50cywKKyAgICAKICAgICBJbnQ4QXJyYXksCiAgICAgSW50MTZB
cnJheSwKICAgICBJbnQzMkFycmF5LApAQCAtMjk0LDcgKzI5Niw4IEBAIHB1YmxpYzoKICAgICAg
ICAgY2FzZSBBcnJheTo6VW5wcm9maWxlZDoKICAgICAgICAgY2FzZSBBcnJheTo6Rm9yY2VFeGl0
OgogICAgICAgICBjYXNlIEFycmF5OjpHZW5lcmljOgotICAgICAgICBjYXNlIEFycmF5OjpBcmd1
bWVudHM6CisgICAgICAgIGNhc2UgQXJyYXk6OkRpcmVjdEFyZ3VtZW50czoKKyAgICAgICAgY2Fz
ZSBBcnJheTo6U2NvcGVkQXJndW1lbnRzOgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICBkZWZhdWx0OgogICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0zMjAsMTEgKzMyMyw5
IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHN3aXRjaCAodHlwZSgpKSB7CiAgICAgICAgIGNh
c2UgQXJyYXk6OlN0cmluZzoKKyAgICAgICAgY2FzZSBBcnJheTo6RGlyZWN0QXJndW1lbnRzOgor
ICAgICAgICBjYXNlIEFycmF5OjpTY29wZWRBcmd1bWVudHM6CiAgICAgICAgICAgICByZXR1cm4g
QXJyYXlNb2RlKEFycmF5OjpHZW5lcmljKTsKLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgICAg
ICBjYXNlIEFycmF5OjpBcmd1bWVudHM6Ci0gICAgICAgICAgICByZXR1cm4gQXJyYXlNb2RlKEFy
cmF5OjpHZW5lcmljKTsKLSNlbmRpZgogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgcmV0
dXJuICp0aGlzOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0ZpeHVwUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHRml4dXBQaGFzZS5jcHAJKHJldmlzaW9uIDE4MDU2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY4Miw3ICs2ODIs
NiBAQCBwcml2YXRlOgogICAgICAgICAgICAgY2FzZSBBcnJheTo6Q29udGlndW91czoKICAgICAg
ICAgICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZToKICAgICAgICAgICAgIGNhc2UgQXJyYXk6
OlNsb3dQdXRBcnJheVN0b3JhZ2U6Ci0gICAgICAgICAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6
CiAgICAgICAgICAgICAgICAgZml4RWRnZTxLbm93bkNlbGxVc2U+KGNoaWxkMSk7CiAgICAgICAg
ICAgICAgICAgZml4RWRnZTxJbnQzMlVzZT4oY2hpbGQyKTsKICAgICAgICAgICAgICAgICBpbnNl
cnRTdG9yZUJhcnJpZXIobV9pbmRleEluQmxvY2ssIGNoaWxkMSwgY2hpbGQzKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcHlUb2tlbi5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcHlUb2tlbi5oCShyZXZpc2lvbiAxODA1NjUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3B5VG9rZW4uaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzIs
NyArMzIsNyBAQCBlbnVtIENvcHlUb2tlbiB7CiAgICAgQnV0dGVyZmx5Q29weVRva2VuLAogICAg
IFR5cGVkQXJyYXlWZWN0b3JDb3B5VG9rZW4sCiAgICAgTWFwQmFja2luZ1N0b3JlQ29weVRva2Vu
LAotICAgIEFyZ3VtZW50c1Nsb3dBcmd1bWVudERhdGFDb3B5VG9rZW4KKyAgICBEaXJlY3RBcmd1
bWVudHNPdmVycmlkZXNDb3B5VG9rZW4KIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCShyZXZpc2lvbiAx
ODA1NjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xMTMsNiArMTEzLDI2IEBAIHB1YmxpYzoKICNlbmRpZgogICAgIH0K
ICAgICAKKyAgICB2b2lkIGxvYWRWYWx1ZShCYXNlSW5kZXggYWRkcmVzcywgSlNWYWx1ZVJlZ3Mg
cmVncykKKyAgICB7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgbG9hZDY0KGFkZHJlc3Ms
IHJlZ3MuZ3ByKCkpOworI2Vsc2UKKyAgICAgICAgaWYgKGFkZHJlc3MuYmFzZSA9PSByZWdzLnBh
eWxvYWRHUFIoKSB8fCBhZGRyZXNzLmluZGV4ID09IHJlZ3MucGF5bG9hZEdQUigpKSB7CisgICAg
ICAgICAgICAvLyBXZSBhY3R1YWxseSBjb3VsZCBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgdGhlIHJl
Z2lzdGVycyBhcmUgYWxpYXNlZCB0byBib3RoCisgICAgICAgICAgICAvLyB0YWcgYW5kIHBheWxv
YWQsIGJ1dCB3ZSBkb24ndCBmb3Igbm93LgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoYWRk
cmVzcy5iYXNlICE9IHJlZ3MudGFnR1BSKCkpOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
YWRkcmVzcy5pbmRleCAhPSByZWdzLnRhZ0dQUigpKTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgbG9hZDMyKGFkZHJlc3Mud2l0aE9mZnNldChUYWdPZmZzZXQpLCByZWdzLnRhZ0dQUigpKTsK
KyAgICAgICAgICAgIGxvYWQzMihhZGRyZXNzLndpdGhPZmZzZXQoUGF5bG9hZE9mZnNldCksIHJl
Z3MucGF5bG9hZEdQUigpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGxvYWQzMihh
ZGRyZXNzLndpdGhPZmZzZXQoUGF5bG9hZE9mZnNldCksIHJlZ3MucGF5bG9hZEdQUigpKTsKKyAg
ICAgICAgICAgIGxvYWQzMihhZGRyZXNzLndpdGhPZmZzZXQoVGFnT2Zmc2V0KSwgcmVnLnRhZ0dQ
UigpKTsKKyAgICAgICAgfQorI2VuZGlmCisgICAgfQorICAgIAogICAgIHZvaWQgbW92ZVRydXN0
ZWRWYWx1ZShKU1ZhbHVlIHZhbHVlLCBKU1ZhbHVlUmVncyByZWdzKQogICAgIHsKICNpZiBVU0Uo
SlNWQUxVRTY0KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCShyZXZpc2lvbiAxODA1NjUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
NDUsNiArMzQ1LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEp1bXBMaXN0IGVtaXREb3Vi
bGVHZXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUpOwogICAgICAg
ICBKdW1wTGlzdCBlbWl0Q29udGlndW91c0dldEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxl
SnVtcCYgYmFkVHlwZSwgSW5kZXhpbmdUeXBlIGV4cGVjdGVkU2hhcGUgPSBDb250aWd1b3VzU2hh
cGUpOwogICAgICAgICBKdW1wTGlzdCBlbWl0QXJyYXlTdG9yYWdlR2V0QnlWYWwoSW5zdHJ1Y3Rp
b24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlKTsKKyAgICAgICAgSnVtcExpc3QgZW1pdERpcmVj
dEFyZ3VtZW50c0dldEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSk7
CisgICAgICAgIEp1bXBMaXN0IGVtaXRTY29wZWRBcmd1bWVudHNHZXRCeVZhbChJbnN0cnVjdGlv
biosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUpOwogICAgICAgICBKdW1wTGlzdCBlbWl0SW50VHlw
ZWRBcnJheUdldEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgVHlw
ZWRBcnJheVR5cGUpOwogICAgICAgICBKdW1wTGlzdCBlbWl0RmxvYXRUeXBlZEFycmF5R2V0QnlW
YWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBUeXBlZEFycmF5VHlwZSk7
CiAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25z
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlv
bnMuY3BwCShyZXZpc2lvbiAxODA1NjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VE9wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MzAsNyArNTMwLDcgQEAgdm9pZCBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsKEV4ZQogICAgICAgICBpZiAoaGFzT3B0aW1p
emFibGVJbmRleGluZyhvYmplY3QtPnN0cnVjdHVyZSh2bSkpKSB7CiAgICAgICAgICAgICAvLyBB
dHRlbXB0IHRvIG9wdGltaXplLgogICAgICAgICAgICAgSklUQXJyYXlNb2RlIGFycmF5TW9kZSA9
IGppdEFycmF5TW9kZUZvclN0cnVjdHVyZShvYmplY3QtPnN0cnVjdHVyZSh2bSkpOwotICAgICAg
ICAgICAgaWYgKGFycmF5TW9kZSAhPSBieVZhbEluZm8uYXJyYXlNb2RlKSB7CisgICAgICAgICAg
ICBpZiAoaml0QXJyYXlNb2RlUGVybWl0c1B1dChhcnJheU1vZGUpICYmIGFycmF5TW9kZSAhPSBi
eVZhbEluZm8uYXJyYXlNb2RlKSB7CiAgICAgICAgICAgICAgICAgSklUOjpjb21waWxlUHV0QnlW
YWwoJnZtLCBleGVjLT5jb2RlQmxvY2soKSwgJmJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0cihP
VVJfUkVUVVJOX0FERFJFU1MpLCBhcnJheU1vZGUpOwogICAgICAgICAgICAgICAgIGRpZE9wdGlt
aXplID0gdHJ1ZTsKICAgICAgICAgICAgIH0KQEAgLTU3NSw3ICs1NzUsNyBAQCB2b2lkIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uRGlyZWN0UHV0QnlWCiAgICAgICAgIGlmIChoYXNPcHRpbWl6YWJs
ZUluZGV4aW5nKG9iamVjdC0+c3RydWN0dXJlKHZtKSkpIHsKICAgICAgICAgICAgIC8vIEF0dGVt
cHQgdG8gb3B0aW1pemUuCiAgICAgICAgICAgICBKSVRBcnJheU1vZGUgYXJyYXlNb2RlID0gaml0
QXJyYXlNb2RlRm9yU3RydWN0dXJlKG9iamVjdC0+c3RydWN0dXJlKHZtKSk7Ci0gICAgICAgICAg
ICBpZiAoYXJyYXlNb2RlICE9IGJ5VmFsSW5mby5hcnJheU1vZGUpIHsKKyAgICAgICAgICAgIGlm
IChqaXRBcnJheU1vZGVQZXJtaXRzUHV0KGFycmF5TW9kZSkgJiYgYXJyYXlNb2RlICE9IGJ5VmFs
SW5mby5hcnJheU1vZGUpIHsKICAgICAgICAgICAgICAgICBKSVQ6OmNvbXBpbGVEaXJlY3RQdXRC
eVZhbCgmdm0sIGNhbGxGcmFtZS0+Y29kZUJsb2NrKCksICZieVZhbEluZm8sIFJldHVybkFkZHJl
c3NQdHIoT1VSX1JFVFVSTl9BRERSRVNTKSwgYXJyYXlNb2RlKTsKICAgICAgICAgICAgICAgICBk
aWRPcHRpbWl6ZSA9IHRydWU7CiAgICAgICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkocmV2aXNpb24gMTgwNTY1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTk1MSw2ICs5NTEsMTIgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0
QnlWYWwoQnlWYWxJbgogICAgIGNhc2UgSklUQXJyYXlTdG9yYWdlOgogICAgICAgICBzbG93Q2Fz
ZXMgPSBlbWl0QXJyYXlTdG9yYWdlR2V0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBl
KTsKICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBKSVREaXJlY3RBcmd1bWVudHM6CisgICAgICAg
IHNsb3dDYXNlcyA9IGVtaXREaXJlY3RBcmd1bWVudHNHZXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rp
b24sIGJhZFR5cGUpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEpJVFNjb3BlZEFyZ3VtZW50
czoKKyAgICAgICAgc2xvd0Nhc2VzID0gZW1pdERpcmVjdEFyZ3VtZW50c0dldEJ5VmFsKGN1cnJl
bnRJbnN0cnVjdGlvbiwgYmFkVHlwZSk7CisgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CiAg
ICAgICAgIFR5cGVkQXJyYXlUeXBlIHR5cGUgPSB0eXBlZEFycmF5VHlwZUZvckpJVEFycmF5TW9k
ZShhcnJheU1vZGUpOwogICAgICAgICBpZiAoaXNJbnQodHlwZSkpCkBAIC0xMDQ2LDYgKzEwNTIs
NjMgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlWYWwoQnlWYWxJbgogICAgIHJlcGF0
Y2hCdWZmZXIucmVsaW5rQ2FsbGVyVG9GdW5jdGlvbihyZXR1cm5BZGRyZXNzLCBGdW5jdGlvblB0
cihpc0RpcmVjdCA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsR2VuZXJpYyA6IG9wZXJhdGlvblB1
dEJ5VmFsR2VuZXJpYykpOwogfQogCitKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdERpcmVjdEFyZ3Vt
ZW50c0dldEJ5VmFsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFBhdGNoYWJsZUp1
bXAmIGJhZFR5cGUpCit7CisgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOworICAgIAorI2lmIFVTRShK
U1ZBTFVFNjQpCisgICAgUmVnaXN0ZXJJRCBiYXNlID0gcmVnVDA7CisgICAgUmVnaXN0ZXJJRCBw
cm9wZXJ0eSA9IHJlZ1QxOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdCA9IEpTVmFsdWVSZWdzKHJl
Z1QwKTsKKyAgICBSZWdpc3RlcklEIHNjcmF0Y2ggPSByZWdUMzsKKyNlbHNlCisgICAgUmVnaXN0
ZXJJRCBiYXNlID0gcmVnVDA7CisgICAgUmVnaXN0ZXJJRCBwcm9wZXJ0eSA9IHJlZ1QyOworICAg
IEpTVmFsdWVSZWdzIHJlc3VsdCA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7CisgICAgUmVn
aXN0ZXJJRCBzY3JhdGNoID0gcmVnVDM7CisjZW5kaWYKKworICAgIGxvYWQ4KEFkZHJlc3MoYmFz
ZSwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIHNjcmF0Y2gpOworICAgIGJhZFR5cGUg
PSBwYXRjaGFibGVCcmFuY2gzMihOb3RFcXVhbCwgc2NyYXRjaCwgVHJ1c3RlZEltbTMyKERpcmVj
dEFyZ3VtZW50c1R5cGUpKTsKKyAgICAKKyAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMyKEFi
b3ZlT3JFcXVhbCwgcHJvcGVydHksIEFkZHJlc3MoYmFzZSwgRGlyZWN0QXJndW1lbnRzOjpvZmZz
ZXRPZkxlbmd0aCgpKSkpOworICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoVGVzdFB0cihOb25a
ZXJvLCBBZGRyZXNzKGJhc2UsIERpcmVjdEFyZ3VtZW50czo6b2Zmc2V0T2ZPdmVycmlkZXMoKSkp
KTsKKyAgICAKKyAgICB6ZXJvRXh0ZW5kMzJUb1B0cihwcm9wZXJ0eSwgc2NyYXRjaCk7CisgICAg
bG9hZFZhbHVlKEJhc2VJbmRleChiYXNlLCBzY3JhdGNoLCBUaW1lc0VpZ2h0LCBEaXJlY3RBcmd1
bWVudHM6OnN0b3JhZ2VPZmZzZXQoKSksIHJlc3VsdCk7Cit9CisKK0pJVDo6SnVtcExpc3QgSklU
OjplbWl0U2NvcGVkQXJndW1lbnRzR2V0QnlWYWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSkKK3sKKyAgICBKdW1wTGlzdCBzbG93Q2FzZXM7
CisgICAgCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBSZWdpc3RlcklEIGJhc2UgPSByZWdUMDsK
KyAgICBSZWdpc3RlcklEIHByb3BlcnR5ID0gcmVnVDE7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0
ID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgIFJlZ2lzdGVySUQgc2NyYXRjaCA9IHJlZ1QzOwor
ICAgIFJlZ2lzdGVySUQgc2NyYXRjaDIgPSByZWdUNDsKKyNlbHNlCisgICAgUmVnaXN0ZXJJRCBi
YXNlID0gcmVnVDA7CisgICAgUmVnaXN0ZXJJRCBwcm9wZXJ0eSA9IHJlZ1QyOworICAgIEpTVmFs
dWVSZWdzIHJlc3VsdCA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7CisgICAgUmVnaXN0ZXJJ
RCBzY3JhdGNoID0gcmVnVDM7CisgICAgUmVnaXN0ZXJJRCBzY2FydGNoMiA9IHJlZ1Q0OworI2Vu
ZGlmCisKKyAgICBsb2FkOChBZGRyZXNzKGJhc2UsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0
KCkpLCBzY3JhdGNoKTsKKyAgICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNoMzIoTm90RXF1YWws
IHNjcmF0Y2gsIFRydXN0ZWRJbW0zMihEaXJlY3RBcmd1bWVudHNUeXBlKSk7CisgICAgCisgICAg
bG9hZFB0cihBZGRyZXNzKGJhc2UsIFNjb3BlZEFyZ3VtZW50czo6b2Zmc2V0T2ZUYWJsZSgpKSwg
c2NyYXRjaCk7CisgICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIFNjb3BlZEFyZ3VtZW50czo6b2Zm
c2V0T2ZTY29wZSgpKSwgc2NyYXRjaDIpOworICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIo
QWJvdmVPckVxdWFsLCBwcm9wZXJ0eSwgQWRkcmVzcyhzY3JhdGNoLCBTY29wZWRBcmd1bWVudHNU
YWJsZTo6b2Zmc2V0T2ZMZW5ndGgoKSkpKTsKKyAgICBsb2FkUHRyKEFkZHJlc3Moc2NyYXRjaCwg
U2NvcGVkQXJndW1lbnRzVGFibGU6Om9mZnNldE9mQXJndW1lbnRzKCkpLCBzY3JhdGNoKTsKKyAg
ICBsb2FkMzIoQmFzZUluZGV4KHNjcmF0Y2gsIHByb3BlcnR5LCBUaW1lc0ZvdXIpLCBzY3JhdGNo
KTsKKyAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMyKEVxdWFsLCBzY3JhdGNoLCBUcnVzdGVk
SW1tMzIoU2NvcGVPZmZzZXQ6OmludmFsaWRPZmZzZXQpKSk7CisgICAgCisgICAgbG9hZFZhbHVl
KEJhc2VJbmRleChzY3JhdGNoMiwgc2NyYXRjaCwgVGltZXNFaWdodCwgSlNFbnZpcm9ubWVudFJl
Y29yZDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSksIHJlc3VsdCk7Cit9CisKIEpJVDo6SnVtcExpc3Qg
SklUOjplbWl0SW50VHlwZWRBcnJheUdldEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVt
cCYgYmFkVHlwZSwgVHlwZWRBcnJheVR5cGUgdHlwZSkKIHsKICAgICBBU1NFUlQoaXNJbnQodHlw
ZSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJndW1lbnRzTW9kZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ3VtZW50c01v
ZGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ3Vt
ZW50c01vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM5IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQXJndW1lbnRzTW9kZV9o
CisjZGVmaW5lIEFyZ3VtZW50c01vZGVfaAorCituYW1lc3BhY2UgSlNDIHsKKworZW51bSBBcmd1
bWVudHNNb2RlIHsKKyAgICBDbG9uZWRBcmd1bWVudHNDcmVhdGlvbk1vZGUsCisgICAgRmFrZUFy
Z3VtZW50VmFsdWVzQ3JlYXRpb25Nb2RlCit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2Vu
ZGlmIC8vIEFyZ3VtZW50c01vZGVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9DYXB0dXJlZEFyZ3VtZW50c09mZnNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FwdHVyZWRBcmd1bWVudHNPZmZzZXQuY3BwCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FwdHVyZWRBcmd1bWVudHNP
ZmZzZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkNhcHR1cmVkQXJndW1lbnRzT2Zmc2V0LmgiCisKK25hbWVzcGFjZSBKU0MgeworCit2
b2lkIENhcHR1cmVkQXJndW1lbnRzT2Zmc2V0OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0
Cit7CisgICAgaWYgKCEqdGhpcykgeworICAgICAgICBvdXQucHJpbnQoImNhcHR1cmVkQXJndW1l
bnRJbnZhbGlkIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBvdXQucHJpbnQoImNh
cHR1cmVkQXJndW1lbnQiLCBvZmZzZXQoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYXB0dXJlZEFyZ3VtZW50c09mZnNl
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhcHR1cmVk
QXJndW1lbnRzT2Zmc2V0LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9DYXB0dXJlZEFyZ3VtZW50c09mZnNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBDYXB0dXJlZEFyZ3VtZW50c09mZnNldF9oCisjZGVmaW5lIENhcHR1cmVkQXJndW1l
bnRzT2Zmc2V0X2gKKworI2luY2x1ZGUgIkdlbmVyaWNPZmZzZXQuaCIKKyNpbmNsdWRlIDx3dGYv
UHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIEpTQyB7CisKKy8vIFRoaXMgaXMgYW4gb2Zmc2V0
IGludG8gdGhlIHNwZWNpYWwgYXJndW1lbnRzIG9iamVjdCwgd2hpY2ggY2FwdHVyZXMgdGhlIGFy
Z3VtZW50cyB0byBhCisvLyBmdW5jdGlvbi4gSXQgb25seSBjb21lcyBpbnRvIHBsYXkgaXQgdGhl
IGFyZ3VtZW50cyBhcmVuJ3QgYWxzbyBsaWZ0ZWQgaW50byB0aGUgYWN0aXZhdGlvbi4KKy8vIElm
IHRoZXkgd2VyZSB0aGVuIGFjY2Vzc2VzIHRvIHRoZSBhcmd1bWVudHMgd291bGQgcmVzb2x2ZSB0
byBhIFNjb3BlT2Zmc2V0IGFuZCBub3QgYQorLy8gQ2FwdHVyZWRBcmd1bWVudHNPZmZzZXQuCitj
bGFzcyBDYXB0dXJlZEFyZ3VtZW50c09mZnNldCA6IHB1YmxpYyBHZW5lcmljT2Zmc2V0PENhcHR1
cmVkQXJndW1lbnRzT2Zmc2V0PiB7CitwdWJsaWM6CisgICAgQ2FwdHVyZWRBcmd1bWVudHNPZmZz
ZXQoKSB7IH0KKyAgICAKKyAgICBleHBsaWNpdCBDYXB0dXJlZEFyZ3VtZW50c09mZnNldCh1bnNp
Z25lZCBvZmZzZXQpCisgICAgICAgIDogR2VuZXJpY09mZnNldChvZmZzZXQpCisgICAgeworICAg
IH0KKyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKK307CisKK30gLy8g
bmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gQ2FwdHVyZWRBcmd1bWVudHNPZmZzZXRfaAorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50
cy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJl
Y3RBcmd1bWVudHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQ5IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJEaXJlY3RBcmd1bWVudHMuaCIKKworI2luY2x1ZGUgIkdlbmVyaWNBcmd1
bWVudHNJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNBcmd1bWVudHNJdGVyYXRvci5oIgorI2luY2x1
ZGUgIkpTQ0lubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK1NUQVRJQ19BU1NFUlRfSVNf
VFJJVklBTExZX0RFU1RSVUNUSUJMRShEaXJlY3RBcmd1bWVudHMpOworCitjb25zdCBDbGFzc0lu
Zm8gRGlyZWN0QXJndW1lbnRzOjpzX2luZm8gPSB7ICJBcmd1bWVudHMiLCAmQmFzZTo6c19pbmZv
LCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKERpcmVjdEFyZ3VtZW50cykgfTsKKworRGlyZWN0QXJn
dW1lbnRzOjpEaXJlY3RBcmd1bWVudHMoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgdW5z
aWduZWQgbGVuZ3RoKQorICAgIDogR2VuZXJpY0FyZ3VtZW50cyh2bSwgc3RydWN0dXJlKQorICAg
ICwgbV9sZW5ndGgobGVuZ3RoKQoreworfQorCitEaXJlY3RBcmd1bWVudHMqIERpcmVjdEFyZ3Vt
ZW50czo6Y3JlYXRlVW5pbml0aWFsaXplZChWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCB1
bnNpZ25lZCBsZW5ndGgpCit7CisgICAgRGlyZWN0QXJndW1lbnRzKiByZXN1bHQgPQorICAgICAg
ICBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxEaXJlY3RBcmd1bWVudHM+KHZtLmhlYXAsIGFs
bG9jYXRpb25TaXplKGxlbmd0aCkpKQorICAgICAgICAodm0sIHN0cnVjdHVyZSk7CisgICAgcmVz
dWx0LT5maW5pc2hDcmVhdGlvbih2bSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworRGlyZWN0
QXJndW1lbnRzKiBEaXJlY3RBcmd1bWVudHM6OmNyZWF0ZShWTSYgdm0sIFN0cnVjdHVyZSogc3Ry
dWN0dXJlLCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgRGlyZWN0QXJndW1lbnRzKiByZXN1bHQg
PSBjcmVhdGVVbmluaXRpYWxpemVkKHZtLCBzdHJ1Y3R1cmUsIGxlbmd0aCk7CisgICAgCisgICAg
Zm9yICh1bnNpZ25lZCBpID0gbGVuZ3RoOyBpLS07KQorICAgICAgICByZXN1bHQtPnN0b3JhZ2Uo
KVtpXS5jbGVhcigpOworICAgIAorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK0RpcmVjdEFyZ3Vt
ZW50cyogRGlyZWN0QXJndW1lbnRzOjpjcmVhdGVCeUNvcHlpbmcoVk0mIHZtLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgRXhlY1N0YXRlKiBleGVjKQoreworICAgIHVuc2lnbmVkIGxlbmd0aCA9IGV4
ZWMtPmFyZ3VtZW50Q291bnQoKTsKKyAgICBEaXJlY3RBcmd1bWVudHMqIHJlc3VsdCA9IGNyZWF0
ZVVuaW5pdGlhbGl6ZWQodm0sIHN0cnVjdHVyZSwgbGVuZ3RoKTsKKyAgICAKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSBsZW5ndGg7IGktLTspCisgICAgICAgIHJlc3VsdC0+c3RvcmFnZSgpW2ldLnNl
dCh2bSwgcmVzdWx0LCBleGVjLT51bmNoZWNrZWRBcmd1bWVudChpKSk7CisgICAgCisgICAgcmVz
dWx0LT5jYWxsZWUoKS5zZXQodm0sIHJlc3VsdCwganNDYXN0PEpTRnVuY3Rpb24qPihleGVjLT5j
YWxsZWUoKSkpOworICAgIAorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgRGlyZWN0QXJn
dW1lbnRzOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogdGhpc0NlbGwsIFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQoreworICAgIERpcmVjdEFyZ3VtZW50cyogdGhpc09iamVjdCA9IHN0YXRpY19jYXN0PERp
cmVjdEFyZ3VtZW50cyo+KHRoaXNDZWxsKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRT
KHRoaXNPYmplY3QsIGluZm8oKSk7CisgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0
LCB2aXNpdG9yKTsKKyAgICAKKyAgICB2aXNpdG9yLmFwcGVuZFZhbHVlcyh0aGlzT2JqZWN0LT5z
dG9yYWdlKCksIHRoaXNPYmplY3QtPm1fbGVuZ3RoKTsKKyAgICB2aXNpdG9yLmFwcGVuZCgmdGhp
c09iamVjdC0+bV9jYWxsZWUpOworICAgIAorICAgIGlmICh0aGlzT2JqZWN0LT5tX292ZXJyaWRl
cykgeworICAgICAgICB2aXNpdG9yLmNvcHlMYXRlcigKKyAgICAgICAgICAgIHRoaXNPYmplY3Qs
IERpcmVjdEFyZ3VtZW50c092ZXJyaWRlc0NvcHlUb2tlbiwKKyAgICAgICAgICAgIHRoaXNPYmpl
Y3QtPm1fb3ZlcnJpZGVzLmdldCgpLCBtX2xlbmd0aCk7CisgICAgfQorfQorCit2b2lkIERpcmVj
dEFyZ3VtZW50czo6Y29weUJhY2tpbmdTdG9yZShKU0NlbGwqIHRoaXNDZWxsLCBDb3B5VmlzaXRv
ciYgdmlzaXRvciwgQ29weVRva2VuIHRva2VuKQoreworICAgIERpcmVjdEFyZ3VtZW50cyogdGhp
c09iamVjdCA9IHN0YXRpY19jYXN0PERpcmVjdEFyZ3VtZW50cyo+KHRoaXNDZWxsKTsKKyAgICBB
U1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CisgICAgCisgICAg
UkVMRUFTRV9BU1NFUlQodG9rZW4gPT0gRGlyZWN0QXJndW1lbnRzT3ZlcnJpZGVzQ29weVRva2Vu
KTsKKyAgICAKKyAgICBib29sKiBvbGRPdmVycmlkZXMgPSB0aGlzT2JqZWN0LT5tX292ZXJyaWRl
cy5nZXQoKTsKKyAgICBpZiAoIW9sZE92ZXJyaWRlcykKKyAgICAgICAgcmV0dXJuOworICAgIAor
ICAgIGlmICh2aXNpdG9yLmNoZWNrSWZTaG91bGRDb3B5KG92ZXJyaWRlcykpIHsKKyAgICAgICAg
Ym9vbCogbmV3T3ZlcnJpZGVzID0gc3RhdGljX2Nhc3Q8Ym9vbCo+KHZpc2l0b3IuYWxsb2NhdGVO
ZXdTcGFjZShtX2xlbmd0aCkpOworICAgICAgICBtZW1jcHkobmV3T3ZlcnJpZGVzLCBvbGRPdmVy
cmlkZXMsIG1fbGVuZ3RoKTsKKyAgICAgICAgdGhpc09iamVjdC0+bV9vdmVycmlkZXMuc2V0V2l0
aG91dFdyaXRlQmFycmllcihuZXdPdmVycmlkZXMpOworICAgICAgICB2aXNpdG9yLmRpZENvcHko
b2xkT3ZlcnJpZGVzLCBtX2xlbmd0aCk7CisgICAgfQorfQorCitTdHJ1Y3R1cmUqIERpcmVjdEFy
Z3VtZW50czo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCit7CisgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRl
KHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oRGlyZWN0QXJndW1lbnRzVHlw
ZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworfQorCit2b2lkIERpcmVjdEFyZ3VtZW50czo6
c2xvd0Rvd25BbmRXYXN0ZU1lbW9yeShWTSYgdm0pCit7CisgICAgUkVMRUFTRV9BU1NFUlQoIW1f
b3ZlcnJpZGVzKTsKKyAgICAKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxl
bmd0aCwganNOdW1iZXIobV9sZW5ndGgpLCBEb250RW51bSk7CisgICAgCisgICAgaWYgKGlzU3Ry
aWN0TW9kZSgpKSB7CisgICAgICAgIHB1dERpcmVjdE5vbkluZGV4QWNjZXNzb3Iodm0sIHZtLnBy
b3BlcnR5TmFtZXMtPmNhbGxlZSwgZ2xvYmFsT2JqZWN0KCktPnRocm93VHlwZUVycm9yR2V0dGVy
U2V0dGVyKHZtKSwgRG9udEVudW0gfCBEb250RGVsZXRlIHwgQWNjZXNzb3IpOworICAgICAgICBw
dXREaXJlY3ROb25JbmRleEFjY2Vzc29yKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5jYWxsZXIsIGds
b2JhbE9iamVjdCgpLT50aHJvd1R5cGVFcnJvckdldHRlclNldHRlcih2bSksIERvbnRFbnVtIHwg
RG9udERlbGV0ZSB8IEFjY2Vzc29yKTsKKyAgICB9IGVsc2UKKyAgICAgICAgcHV0RGlyZWN0KHZt
LCB2bS5wcm9wZXJ0eU5hbWVzLT5jYWxsZWUsIG1fY2FsbGVlLmdldCgpLCBEb250RW51bSk7Cisg
ICAgCisgICAgdm9pZCogYmFja2luZ1N0b3JlOworICAgIFJFTEVBU0VfQVNTRVJUKHZtLmhlYXAu
dHJ5QWxsb2NhdGVTdG9yYWdlKHRoaXMsIG1fbGVuZ3RoKSwgJmJhY2tpbmdTdG9yZSk7CisgICAg
bV9vdmVycmlkZXMuc2V0KHZtLCB0aGlzLCBzdGF0aWNfY2FzdDxib29sKj4oYmFja2luZ1N0b3Jl
KSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gbV9sZW5ndGg7IGktLTspCisgICAgICAgIG1fb3Zl
cnJpZGVzLmdldCgpW2ldID0gZmFsc2U7Cit9CisKK3ZvaWQgRGlyZWN0QXJndW1lbnRzOjpzbG93
RG93bkFuZFdhc3RlTWVtb3J5SWZOZWNlc3NhcnkoVk0mIHZtKQoreworICAgIGlmICghbV9vdmVy
cmlkZXMpCisgICAgICAgIHNsb3dEb3duQW5kV2FzdGVNZW1vcnkodm0pOworfQorCit2b2lkIERp
cmVjdEFyZ3VtZW50czo6b3ZlcnJpZGVBcmd1bWVudChWTSYgdm0sIHVuc2lnbmVkIGkpCit7Cisg
ICAgc2xvd0Rvd25BbmRXYXN0ZU1lbW9yeUlmTmVjZXNzYXJ5KHZtKTsKKyAgICBtX292ZXJyaWRl
cy5nZXQoKVtpbmRleF0gPSB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVu
dHMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE0NyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERpcmVjdEFyZ3VtZW50c19oCisj
ZGVmaW5lIERpcmVjdEFyZ3VtZW50c19oCisKKyNpbmNsdWRlICJHZW5lcmljQXJndW1lbnRzLmgi
CisKK25hbWVzcGFjZSBKU0MgeworCisvLyBUaGlzIGlzIGFuIEFyZ3VtZW50cy1jbGFzcyBvYmpl
Y3QgdGhhdCB3ZSBjcmVhdGUgd2hlbiB5b3Ugc2F5ICJhcmd1bWVudHMiIGluc2lkZSBhIGZ1bmN0
aW9uLAorLy8gYW5kIG5vbmUgb2YgdGhlIGFyZ3VtZW50cyBhcmUgY2FwdHVyZWQgaW4gdGhlIGZ1
bmN0aW9uJ3MgYWN0aXZhdGlvbi4gVGhlIGZ1bmN0aW9uIHdpbGwgY29weSBhbGwKKy8vIG9mIGl0
cyBhcmd1bWVudHMgaW50byB0aGlzIG9iamVjdCwgYW5kIGFsbCBzdWJzZXF1ZW50IGFjY2Vzc2Vz
IHRvIHRoZSBhcmd1bWVudHMgd2lsbCBnbyB0aHJvdWdoCisvLyB0aGlzIG9iamVjdCB0aGVyZWFm
dGVyLiBTcGVjaWFsIHN1cHBvcnQgaXMgaW4gcGxhY2UgZm9yIG1pc2NoZXZpb3VzIGV2ZW50cyBs
aWtlIHRoZSBhcmd1bWVudHMKKy8vIGJlaW5nIGRlbGV0ZWQgKHNvbWV0aGluZyBsaWtlICJkZWxl
dGUgYXJndW1lbnRzWzBdIikgb3IgcmVjb25maWd1cmVkIChicm9hZGx5LCB3ZSBzYXkgZGVsZXRp
b25zCisvLyBhbmQgcmVjb25maWd1cmF0aW9ucyBtZWFuIHRoYXQgdGhlIHJlc3BlY3RpdmUgYXJn
dW1lbnQgd2FzICJvdmVycmlkZGVuIikuCisvLworLy8gVG8gc3BlZWQgYWxsb2NhdGlvbiwgdGhp
cyBvYmplY3Qgd2lsbCBob2xkIGFsbCBvZiB0aGUgYXJndW1lbnRzIGluLXBsYWNlLiBUaGUgYXJn
dW1lbnRzIGFzIHdlbGwKKy8vIGFzIGEgdGFibGUgb2YgZmxhZ3Mgc2F5aW5nIHdoaWNoIGFyZ3Vt
ZW50cyB3ZXJlIG92ZXJyaWRkZW4uCitjbGFzcyBEaXJlY3RBcmd1bWVudHMgOiBwdWJsaWMgR2Vu
ZXJpY0FyZ3VtZW50czxEaXJlY3RBcmd1bWVudHM+IHsKK3ByaXZhdGU6CisgICAgRGlyZWN0QXJn
dW1lbnRzKFZNJiwgU3RydWN0dXJlKiwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICAKK3B1YmxpYzoK
KyAgICAvLyBDcmVhdGVzIGFuIGFyZ3VtZW50cyBvYmplY3QgYnV0IGxlYXZlcyBpdCB1bmluaXRp
YWxpemVkLgorICAgIHN0YXRpYyBEaXJlY3RBcmd1bWVudHMqIGNyZWF0ZVVuaW5pdGlhbGl6ZWQo
Vk0mLCBTdHJ1Y3R1cmUqLCB1bnNpZ25lZCBsZW5ndGgpOworICAgIAorICAgIC8vIENyZWF0ZXMg
YW4gYXJndW1lbnRzIG9iamVjdCBhbmQgaW5pdGlhbGl6ZXMgZXZlcnl0aGluZyB0byB0aGUgZW1w
dHkgdmFsdWUuCisgICAgc3RhdGljIERpcmVjdEFyZ3VtZW50cyogY3JlYXRlKFZNJiwgU3RydWN0
dXJlKiwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICAKKyAgICAvLyBDcmVhdGVzIGFuIGFyZ3VtZW50
cyBvYmplY3QgYnkgY29weWluZyB0aGUgYXJndW1uZXRzIGZyb20gdGhlIHN0YWNrLgorICAgIHN0
YXRpYyBEaXJlY3RBcmd1bWVudHMqIGNyZWF0ZUJ5Q29weWluZyhWTSYsIFN0cnVjdHVyZSosIEV4
ZWNTdGF0ZSopOworICAgIAorICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwg
U2xvdFZpc2l0b3ImKTsKKyAgICBzdGF0aWMgdm9pZCBjb3B5QmFja2luZ1N0b3JlKEpTQ2VsbCos
IENvcHlWaXNpdG9yJiwgQ29weVRva2VuKTsKKyAgICAKKyAgICB1aW50MzJfdCBpbnRlcm5hbExl
bmd0aCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9sZW5ndGg7CisgICAgfQorICAg
IAorICAgIHVpbnQzMl90IGxlbmd0aChFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CisgICAgeworICAg
ICAgICBpZiAoVU5MSUtFTFkobV9vdmVycmlkZXMpKQorICAgICAgICAgICAgcmV0dXJuIGdldChl
eGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKS50b1VJbnQzMihleGVjKTsKKyAgICAg
ICAgcmV0dXJuIG1fbGVuZ3RoOworICAgIH0KKyAgICAKKyAgICBib29sIGNhbkFjY2Vzc0luZGV4
UXVpY2tseSh1aW50MzJfdCBpKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGkgPCBtX2xl
bmd0aCAmJiAoIW1fb3ZlcnJpZGVzIHx8ICFtX292ZXJyaWRlcy5nZXQoKVtpXSk7CisgICAgfQor
ICAgIAorICAgIEpTVmFsdWUgZ2V0SW5kZXhRdWlja2x5KHVpbnQzMl90IGkpIGNvbnN0CisgICAg
eworICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihjYW5BY2Nlc3NJbmRl
eFF1aWNrbHkoaSkpOworICAgICAgICByZXR1cm4gc3RvcmFnZSgpW2ldLmdldCgpOworICAgIH0K
KyAgICAKKyAgICB2b2lkIHNldEluZGV4UXVpY2tseShWTSYgdm0sIHVpbnQzMl90IGksIEpTVmFs
dWUgdmFsdWUpCisgICAgeworICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElP
TihjYW5BY2Nlc3NJbmRleFF1aWNrbHkoaSkpOworICAgICAgICBzdG9yYWdlKClbaV0uc2V0KHZt
LCB0aGlzLCB2YWx1ZSk7CisgICAgfQorICAgIAorICAgIFdyaXRlQmFycmllcjxKU0Z1bmN0aW9u
PiYgY2FsbGVlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX2NhbGxlZTsKKyAgICB9CisgICAg
CisgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiBhcmd1bWVudChDYXB0dXJlZEFyZ3VtZW50c09m
ZnNldCBvZmZzZXQpCisgICAgeworICAgICAgICBBU1NFUlQob2Zmc2V0KTsKKyAgICAgICAgQVNT
RVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04ob2Zmc2V0Lm9mZnNldCgpIDwgbV9sZW5ndGgp
OworICAgICAgICByZXR1cm4gc3RvcmFnZSgpW29mZnNldC5vZmZzZXQoKV07CisgICAgfQorICAg
IAorICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSgpCisgICAgeworICAgICAgICBy
ZXR1cm4ganNDYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGNhbGxlZS0+ZXhlY3V0YWJsZSgpKTsK
KyAgICB9CisgICAgCisgICAgYm9vbCBpc1N0cmljdE1vZGUoKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGV4ZWN1dGFibGUoKS0+aXNTdHJpY3RNb2RlKCk7CisgICAgfQorCisgICAgLy8gTWV0aG9k
cyBpbnRlbmRlZCBmb3IgdXNlIGJ5IHRoZSBHZW5lcmljQXJndW1lbnRzIG1peGluLgorICAgIGJv
b2wgb3ZlcnJvZGVUaGluZ3MoKSBjb25zdCB7IHJldHVybiAhIW1fb3ZlcnJpZGVzOyB9CisgICAg
dm9pZCBzbG93RG93bkFuZFdhc3RlTWVtb3J5KFZNJik7CisgICAgdm9pZCBzbG93RG93bkFuZFdh
c3RlTWVtb3J5SWZOZWNlc3NhcnkoVk0mKTsKKyAgICB2b2lkIG92ZXJyaWRlQXJndW1lbnQoVk0m
LCB1bnNpZ25lZCBpbmRleCk7CisgICAgCisgICAgREVDTEFSRV9JTkZPOworICAgIAorICAgIHN0
YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNW
YWx1ZSBwcm90b3R5cGUpOworICAgIAorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZMZW5n
dGgoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoRGlyZWN0QXJndW1lbnRzLCBtX2xlbmd0aCk7
IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mT3ZlcnJpZGVzKCkgeyByZXR1cm4gT0JK
RUNUX09GRlNFVE9GKERpcmVjdEFyZ3VtZW50cywgbV9vdmVycmlkZXMpOyB9CisgICAgCisgICAg
c3RhdGljIHNpemVfdCBzdG9yYWdlT2Zmc2V0KCkKKyAgICB7CisgICAgICAgIHJldHVybiBXVEY6
OnJvdW5kVXBUb011bHRpcGxlT2Y8c2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPik+KHNpemVv
ZihEaXJlY3RBcmd1bWVudHMpKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIHNpemVfdCBhbGxv
Y2F0aW9uU2l6ZSh1aW50MzJfdCBsZW5ndGgpCisgICAgeworICAgICAgICByZXR1cm4gc3RvcmFn
ZU9mZnNldCgpICsgc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikgKiBsZW5ndGg7CisgICAg
fQorICAgIAorcHJpdmF0ZToKKyAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHN0b3JhZ2UoKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxXcml0ZUJhcnJpZXI8VW5rbm93bj4q
PihiaXR3aXNlX2Nhc3Q8Y2hhcio+KHRoaXMpICsgc3RvcmFnZU9mZnNldCgpKTsKKyAgICB9Cisg
ICAgCisgICAgV3JpdGVCYXJyaWVyPEpTRnVuY3Rpb24qPiBtX2NhbGxlZTsKKyAgICB1aW50MzJf
dCBtX2xlbmd0aDsgLy8gQWx3YXlzIHRoZSBhY3R1YWwgbGVuZ3RoIG9mIGNhcHR1cmVkIGFyZ3Vt
ZW50cyBhbmQgbmV2ZXIgd2hhdCB3YXMgc3RvcmVkIGludG8gdGhlIGxlbmd0aCBwcm9wZXJ0eS4K
KyAgICBDb3B5V3JpdGVCYXJyaWVyPGJvb2w+IG1fb3ZlcnJpZGVzOyAvLyBJZiBub24tbnVsbCwg
aXQgbWVhbnMgdGhhdCBsZW5ndGgsIGNhbGxlZSwgYW5kIGNhbGxlciBhcmUgZnVsbHkgbWF0ZXJp
YWxpemVkIHByb3BlcnRpZXMuCit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8v
IERpcmVjdEFyZ3VtZW50c19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0ZvcmVpZ25WYXJpYWJsZUluZGV4LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRm9yZWlnblZhcmlhYmxlSW5kZXguaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ZvcmVpZ25WYXJpYWJsZUluZGV4LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaWZuZGVmIEZvcmVpZ25WYXJpYWJsZUluZGV4X2gKKyNkZWZpbmUgRm9y
ZWlnblZhcmlhYmxlSW5kZXhfaAorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgRm9yZWlnblZh
cmlhYmxlSW5kZXggeworcHVibGljOgorICAgIEZvcmVpZ25WYXJpYWJsZUluZGV4KCkKKyAgICAg
ICAgOiBtX2luZGV4KFVJTlRfTUFYKQorICAgIHsKKyAgICB9CisgICAgCisgICAgZXhwbGljaXQg
Rm9yZWlnblZhcmlhYmxlSW5kZXgodW5zaWduZWQgaW5kZXgpCisgICAgICAgIDogbV9pbmRleChp
bmRleCkKKyAgICB7CisgICAgfQorICAgIAorICAgIAorICAgIAorcHJpdmF0ZToKKyAgICB1bnNp
Z25lZCBtX2luZGV4OworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBGb3Jl
aWduVmFyaWFibGVJbmRleF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0dlbmVyaWNBcmd1bWVudHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9HZW5lcmljQXJndW1lbnRzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaWZuZGVmIEdlbmVyaWNBcmd1bWVudHNfaAorI2RlZmluZSBHZW5lcmljQXJndW1lbnRzX2gK
KworI2luY2x1ZGUgIkpTT2JqZWN0LmgiCisKK25hbWVzcGFjZSBKU0MgeworCisvLyBUaGlzIGlz
IGEgbWl4aW4gZm9yIHRoZSB0d28ga2luZHMgb2YgQXJndW1lbnRzLWNsYXNzIG9iamVjdHMgdGhh
dCBhcmlzZSB3aGVuIHlvdSBzYXkKKy8vICJhcmd1bWVudHMiIGluc2lkZSBhIGZ1bmN0aW9uLiBU
aGlzIGNsYXNzIGRvZXNuJ3Qgc2hvdyB1cCBpbiB0aGUgSlNDZWxsIGluaGVyaXRhbmNlIGhpZXJh
cmNoeS4KK3RlbXBsYXRlPHR5cGVuYW1lIFR5cGU+CitjbGFzcyBHZW5lcmljQXJndW1lbnRzIDog
cHVibGljIEpTTm9uRmluYWxPYmplY3QgeworcHVibGljOgorICAgIHR5cGVkZWYgSlNOb25GaW5h
bE9iamVjdCBCYXNlOworCitwcm90ZWN0ZWQ6CisgICAgR2VuZXJpY0FyZ3VtZW50cyhWTSYgdm0s
IFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgICAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSkKKyAg
ICB7CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0
KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMg
Ym9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgdW5z
aWduZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgdm9pZCBnZXRP
d25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkm
LCBFbnVtZXJhdGlvbk1vZGUpOworICAgIHN0YXRpYyB2b2lkIHB1dChKU0NlbGwqLCBFeGVjU3Rh
dGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOworICAgIHN0YXRp
YyB2b2lkIHB1dEJ5SW5kZXgoSlNDZWxsKiwgRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlO
YW1lLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKKyAgICBzdGF0aWMgdm9pZCBkZWxldGVQ
cm9wZXJ0eShKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUpOworICAgIHN0YXRpYyB2
b2lkIGRlbGV0ZVByb3BlcnR5QnlJbmRleChKU0NlbGwqLCBFeGVjU3RhdGUqLCB1bnNpZ25lZCBw
cm9wZXJ0eU5hbWUpOworICAgIHN0YXRpYyB2b2lkIGRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0
KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBi
b29sIHNob3VsZFRocm93KTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8g
R2VuZXJpY0FyZ3VtZW50c19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0dlbmVyaWNBcmd1bWVudHNJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lubGluZXMuaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHNJbmxpbmVzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBHZW5lcmljQXJndW1lbnRzSW5saW5lc19o
CisjZGVmaW5lIEdlbmVyaWNBcmd1bWVudHNJbmxpbmVzX2gKKworI2luY2x1ZGUgIkdlbmVyaWNB
cmd1bWVudHMuaCIKKyNpbmNsdWRlICJKU0FyZ3VtZW50c0l0ZXJhdG9yLmgiCisjaW5jbHVkZSAi
SlNDSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVHlw
ZT4KK2Jvb2wgR2VuZXJpY0FyZ3VtZW50czxUeXBlPjo6Z2V0T3duUHJvcGVydHlTbG90KEpTT2Jq
ZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIGlkZW50LCBQcm9wZXJ0
eVNsb3QmIHNsb3QpCit7CisgICAgVHlwZSogdGhpc09iamVjdCA9IGpzQ2FzdDxUeXBlKj4ob2Jq
ZWN0KTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIAorICAgIGlmICghdGhpc09iamVj
dC0+b3ZlcnJvZGVUaGluZ3MoKSkgeworICAgICAgICBpZiAoaWRlbnQgPT0gdm0ucHJvcGVydHlO
YW1lcy0+bGVuZ3RoKSB7CisgICAgICAgICAgICBzbG90LnNldFZhbHVlKHRoaXNPYmplY3QsIERv
bnRFbnVtLCBqc051bWJlcih0aGlzT2JqZWN0LT5pbnRlcm5hbExlbmd0aCgpKSk7CisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfSBlbHNlIGlmIChpZGVudCA9PSB2bS5wcm9wZXJ0
eU5hbWVzLT5jYWxsZWUpIHsKKyAgICAgICAgICAgIGlmICghdGhpc09iamVjdC0+aXNTdHJpY3RN
b2RlKCkpIHsKKyAgICAgICAgICAgICAgICBzbG90LnNldFZhbHVlKHRoaXNPYmplY3QsIERvbnRF
bnVtLCB0aGlzT2JqZWN0LT5jYWxsZWUoKS5nZXQoKSk7CisgICAgICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzT2JqZWN0LT5zbG93RG93bkFu
ZFdhc3RlTWVtb3J5KHZtKTsKKyAgICAgICAgfSBlbHNlIGlmIChpZGVudCA9PSB2bS5wcm9wZXJ0
eU5hbWVzLT5jYWxsZXIpCisgICAgICAgICAgICB0aGlzT2JqZWN0LT5zbG93RG93bkFuZFdhc3Rl
TWVtb3J5KHZtKTsKKyAgICB9CisgICAgCisgICAgdW5zaWduZWQgaW5kZXggPSBpZGVudC5hc0lu
ZGV4KCk7CisgICAgaWYgKHRoaXNPYmplY3QtPmNhbkFjY2Vzc0luZGV4UXVpY2tseShpbmRleCkp
IHsKKyAgICAgICAgc2xvdC5zZXRWYWx1ZSh0aGlzT2JqZWN0LCBOb25lLCB0aGlzT2JqZWN0LT5n
ZXRJbmRleFF1aWNrbHkoaW5kZXgpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAg
IAorICAgIGlmIChCYXNlOjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgZXhlYywgaWRl
bnQsIHNsb3QpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICBpZiAoaWRlbnQgPT0g
dm0ucHJvcGVydHlOYW1lcy0+aXRlcmF0b3JQcml2YXRlTmFtZSkgeworICAgICAgICBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpOworICAg
ICAgICB0aGlzT2JqZWN0LT5KU0NfTkFUSVZFX0ZVTkNUSU9OKHZtLnByb3BlcnR5TmFtZXMtPml0
ZXJhdG9yUHJpdmF0ZU5hbWUsIGFyZ3VtZW50c0Z1bmNJdGVyYXRvciwgRG9udEVudW0sIDApOwor
ICAgICAgICBpZiAoSlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBleGVj
LCBpZGVudCwgc2xvdCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisg
ICAgcmV0dXJuIGZhbHNlOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPgorYm9vbCBHZW5l
cmljQXJndW1lbnRzPFR5cGU+OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTT2JqZWN0KiBv
YmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaW5kZXgsIFByb3BlcnR5U2xvdCYgc2xv
dCkKK3sKKyAgICBUeXBlKiB0aGlzT2JqZWN0ID0ganNDYXN0PFR5cGUqPihvYmplY3QpOworICAg
IAorICAgIGlmICh0aGlzT2JqZWN0LT5jYW5BY2Nlc3NJbmRleFF1aWNrbHkoaW5kZXgpKSB7Cisg
ICAgICAgIHNsb3Quc2V0VmFsdWUodGhpc09iamVjdCwgTm9uZSwgdGhpc09iamVjdC0+Z2V0SW5k
ZXhRdWlja2x5KGluZGV4KSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAg
ICByZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChvYmplY3QsIGV4ZWMsIGlu
ZGV4LCBzbG90KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4KK3ZvaWQgR2VuZXJpY0Fy
Z3VtZW50czxUeXBlPjo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVj
U3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBhcnJheSwgRW51bWVyYXRpb25Nb2RlIG1v
ZGUpCit7CisgICAgVHlwZSogdGhpc09iamVjdCA9IGpzQ2FzdDxUeXBlKj4ob2JqZWN0KTsKKyAg
ICAKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdGhpc09iamVjdC0+aW50ZXJuYWxMZW5n
dGgoKTsgKytpKSB7CisgICAgICAgIGlmICghdGhpc09iamVjdC0+Y2FuQWNjZXNzSW5kZXhRdWlj
a2x5KGluZGV4KSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBhcnJheS5hZGQoSWRl
bnRpZmllcjo6ZnJvbShleGVjLCBpKSk7CisgICAgfQorICAgIGlmIChzaG91bGRJbmNsdWRlRG9u
dEVudW1Qcm9wZXJ0aWVzKG1vZGUpICYmICF0aGlzT2JqZWN0LT5vdmVycm9kZVRoaW5ncygpKSB7
CisgICAgICAgIGFycmF5LmFkZChleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY2FsbGVlKTsKKyAgICAg
ICAgYXJyYXkuYWRkKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpOworICAgIH0KKyAgICBC
YXNlOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGV4ZWMsIGFycmF5LCBtb2RlKTsK
K30KKwordGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4KK3ZvaWQgR2VuZXJpY0FyZ3VtZW50czxUeXBl
Pjo6cHV0KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgaWRlbnQs
IEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICBUeXBlKiB0aGlz
T2JqZWN0ID0ganNDYXN0PFR5cGUqPihvYmplY3QpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
CisgICAgCisgICAgaWYgKCF0aGlzT2JqZWN0LT5vdmVycm9kZVRoaW5ncygpCisgICAgICAgICYm
IChpZGVudCA9PSB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgKKyAgICAgICAgICAgIHx8IGlkZW50
ID09IHZtLnByb3BlcnR5TmFtZXMtPmNhbGxlZQorICAgICAgICAgICAgfHwgaWRlbnQgPT0gdm0u
cHJvcGVydHlOYW1lcy0+Y2FsbGVyKSkKKyAgICAgICAgdGhpc09iamVjdC0+c2xvd0Rvd25BbmRX
YXN0ZU1lbW9yeSh2bSk7CisgICAgCisgICAgdW5zaWduZWQgaW5kZXggPSBpZGVudC5hc0luZGV4
KCk7CisgICAgaWYgKHRoaXNPYmplY3QtPmNhbkFjY2Vzc0luZGV4UXVpY2tseShpbmRleCkpIHsK
KyAgICAgICAgc2V0SW5kZXhRdWlja2x5KHZtLCBpbmRleCwgdmFsdWUpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIAorICAgIEJhc2U6OnB1dCh0aGlzT2JqZWN0LCBleGVjLCBpZGVudCwg
dmFsdWUsIHNsb3QpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPgordm9pZCBHZW5lcmlj
QXJndW1lbnRzPFR5cGU+OjpwdXRCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVj
LCB1bnNpZ25lZCBpbmRleCwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykKK3sKKyAg
ICBUeXBlKiB0aGlzT2JqZWN0ID0ganNDYXN0PFR5cGUqPihvYmplY3QpOworICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7CisgICAgCisgICAgaWYgKHRoaXNPYmplY3QtPmNhblNldEluZGV4UXVpY2ts
eShpbmRleCkpIHsKKyAgICAgICAgc2V0SW5kZXhRdWlja2x5KHZtLCBpbmRleCwgdmFsdWUpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIHJldHVybiBCYXNlOjpwdXRCeUluZGV4
KGNlbGwsIGV4ZWMsIGluZGV4LCB2YWx1ZSwgc2hvdWxkVGhyb3cpOworfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUeXBlPgordm9pZCBHZW5lcmljQXJndW1lbnRzPFR5cGU+OjpkZWxldGVQcm9wZXJ0
eShKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIGlkZW50KQorewor
ICAgIFR5cGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8VHlwZSo+KG9iamVjdCk7CisgICAgVk0mIHZt
ID0gZXhlYy0+dm0oKTsKKyAgICAKKyAgICBpZiAoIXRoaXNPYmplY3QtPm92ZXJyb2RlVGhpbmdz
KCkKKyAgICAgICAgJiYgKGlkZW50ID09IHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aAorICAgICAg
ICAgICAgfHwgaWRlbnQgPT0gdm0ucHJvcGVydHlOYW1lcy0+Y2FsbGVlCisgICAgICAgICAgICB8
fCBpZGVudCA9PSB2bS5wcm9wZXJ0eU5hbWVzLT5jYWxsZXIpKQorICAgICAgICB0aGlzT2JqZWN0
LT5zbG93RG93bkFuZFdhc3RlTWVtb3J5KHZtKTsKKyAgICAKKyAgICB1bnNpZ25lZCBpbmRleCA9
IGlkZW50LmFzSW5kZXgoKTsKKyAgICBpZiAodGhpc09iamVjdC0+Y2FuQWNjZXNzSW5kZXhRdWlj
a2x5KGluZGV4KSkgeworICAgICAgICB0aGlzT2JqZWN0LT5vdmVycmlkZUFyZ3VtZW50KHZtLCBp
bmRleCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgQmFzZTo6ZGVsZXRlUHJv
cGVydHkodGhpc09iamVjdCwgZXhlYywgaWRlbnQpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
eXBlPgordm9pZCBHZW5lcmljQXJndW1lbnRzPFR5cGU+OjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgo
SlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGluZGV4KQoreworICAgIFR5
cGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8VHlwZSo+KG9iamVjdCk7CisgICAgVk0mIHZtID0gZXhl
Yy0+dm0oKTsKKyAgICAKKyAgICBpZiAodGhpc09iamVjdC0+Y2FuQWNjZXNzSW5kZXhRdWlja2x5
KGluZGV4KSkgeworICAgICAgICB0aGlzT2JqZWN0LT5vdmVycmlkZUFyZ3VtZW50KHZtLCBpbmRl
eCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIEJhc2U6OmRlbGV0
ZVByb3BlcnR5QnlJbmRleChjZWxsLCBleGVjLCBpbmRleCk7Cit9CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFR5cGU+Cit2b2lkIEdlbmVyaWNBcmd1bWVudHM8VHlwZT46OmRlZmluZU93blByb3BlcnR5
KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIGlkZW50LCBj
b25zdCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIGJvb2wgc2hvdWxkVGhyb3cpCit7
CisgICAgVHlwZSogdGhpc09iamVjdCA9IGpzQ2FzdDxUeXBlKj4ob2JqZWN0KTsKKyAgICBWTSYg
dm0gPSBleGVjLT52bSgpOworICAgIAorICAgIGlmIChpZGVudCA9PSB2bS5wcm9wZXJ0eU5hbWVz
LT5sZW5ndGgKKyAgICAgICAgfHwgaWRlbnQgPT0gdm0ucHJvcGVydHlOYW1lcy0+Y2FsbGVlCisg
ICAgICAgIHx8IGlkZW50ID09IHZtLnByb3BlcnR5TmFtZXMtPmNhbGxlcikKKyAgICAgICAgdGhp
c09iamVjdC0+c2xvd0Rvd25BbmRXYXN0ZU1lbW9yeUlmTmVjZXNzYXJ5KHZtKTsKKyAgICBlbHNl
IHsKKyAgICAgICAgdW5zaWduZWQgaW5kZXggPSBpZGVudC5hc0luZGV4KCk7CisgICAgICAgIGlm
ICh0aGlzT2JqZWN0LT5jYW5BY2Nlc3NBcmd1bWVudFF1aWNrbHkoaW5kZXgpKSB7CisgICAgICAg
ICAgICBpZiAoIWRlc2NyaXB0b3IuaXNBY2Nlc3NvckRlc2NyaXB0b3IoKSkgeworICAgICAgICAg
ICAgICAgIC8vIElmIHRoZSBwcm9wZXJ0eSBpcyBub3QgZGVsZXRlZCBhbmQgd2UgYXJlIHVzaW5n
IGEgbm9uLWFjY2Vzc29yIGRlc2NyaXB0b3IsIHRoZW4KKyAgICAgICAgICAgICAgICAvLyBtYWtl
IHN1cmUgdGhhdCB0aGUgYWxpYXNlZCBhcmd1bWVudCBzZWVzIHRoZSB2YWx1ZS4KKyAgICAgICAg
ICAgICAgICBpZiAoZGVzY3JpcHRvci52YWx1ZSgpKQorICAgICAgICAgICAgICAgICAgICB0aGlz
T2JqZWN0LT5zZXRJbmRleFF1aWNrbHkodm0sIGksIGRlc2NyaXB0b3IudmFsdWUoKSk7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyBJZiB0aGUgcHJvcGVydHkgaXMgbm90IGRlbGV0
ZWQgYW5kIHdlIGFyZSB1c2luZyBhIG5vbi1hY2Nlc3Nvciwgd3JpdGFibGUKKyAgICAgICAgICAg
ICAgICAvLyBkZXNjcmlwdG9yLCB0aGVuIHdlIGFyZSBkb25lLiBUaGUgYXJndW1lbnQgY29udGlu
dWVzIHRvIGJlIGFsaWFzZWQuIE5vdGUgdGhhdCB3ZQorICAgICAgICAgICAgICAgIC8vIGlnbm9y
ZSB0aGUgcmVxdWVzdCB0byBjaGFuZ2UgZW51bWVyYWJpbGl0eS4gV2UgYXBwZWFyIHRvIGhhdmUg
YWx3YXlzIGRvbmUgc28sIGluCisgICAgICAgICAgICAgICAgLy8gY2FzZXMgd2hlcmUgdGhlIGFy
Z3VtZW50IHdhcyBzdGlsbCBhbGlhc2VkLgorICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQxOTUyCisgICAgICAgICAgICAg
ICAgaWYgKGRlc2NyaXB0b3Iud3JpdGFibGUoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIAorICAgICAgICAgICAgLy8gSWYgdGhlIHBy
b3BlcnR5IGlzIGEgbm9uLWRlbGV0ZWQgYXJndW1lbnQsIHRoZW4gbW92ZSBpdCBpbnRvIHRoZSBi
YXNlIG9iamVjdCBhbmQKKyAgICAgICAgICAgIC8vIHRoZW4gZGVsZXRlIGl0LgorICAgICAgICAg
ICAgSlNWYWx1ZSB2YWx1ZSA9IHRoaXNPYmplY3QtPmdldEluZGV4UXVpY2tseShpKTsKKyAgICAg
ICAgICAgIEFTU0VSVCh2YWx1ZSk7CisgICAgICAgICAgICBvYmplY3QtPnB1dERpcmVjdE1heUJl
SW5kZXgoZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSk7CisgICAgICAgICAgICB0aGlzT2JqZWN0
LT5vdmVycmlkZUFyZ3VtZW50KHZtLCBpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAv
LyBOb3cganVzdCBsZXQgdGhlIG5vcm1hbCBvYmplY3QgbWFjaGluZXJ5IGRvIGl0cyB0aGluZy4K
KyAgICByZXR1cm4gQmFzZTo6ZGVmaW5lT3duUHJvcGVydHkob2JqZWN0LCBleGVjLCBpZGVudCwg
ZGVzY3JpcHRvciwgc2hvdWxkVGhyb3cpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2Vu
ZGlmIC8vIEdlbmVyaWNBcmd1bWVudHNJbmxpbmVzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvR2VuZXJpY09mZnNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNPZmZzZXQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNPZmZzZXQuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDExMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaWZuZGVmIEdlbmVyaWNPZmZzZXRfaAorI2RlZmluZSBHZW5lcmljT2Zmc2V0X2gK
KworI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisKK25hbWVzcGFjZSBKU0MgeworCisvLyBB
IG1peGluIGZvciBjcmVhdGluZyB0aGUgdmFyaW91cyBraW5kcyBvZiB2YXJpYWJsZSBvZmZzZXRz
IHRoYXQgb3VyIGVuZ2luZSBzdXBwb3J0cy4KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBH
ZW5lcmljT2Zmc2V0IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW52YWxp
ZE9mZnNldCA9IFVJTlRfTUFYOworICAgIAorICAgIEdlbmVyaWNPZmZzZXQoKQorICAgICAgICA6
IG1fb2Zmc2V0KGludmFsaWRPZmZzZXQpCisgICAgeworICAgIH0KKyAgICAKKyAgICBleHBsaWNp
dCBHZW5lcmljT2Zmc2V0KHVuc2lnbmVkIG9mZnNldCkKKyAgICAgICAgOiBtX29mZnNldChvZmZz
ZXQpCisgICAgeworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0
dXJuIG1fb2Zmc2V0ID09IGludmFsaWRPZmZzZXQ7IH0KKyAgICAKKyAgICB1bnNpZ25lZCBvZmZz
ZXRVbmNoZWNrZWQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fb2Zmc2V0OworICAg
IH0KKyAgICAKKyAgICB1bnNpZ25lZCBvZmZzZXQoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNT
RVJUKG1fb2Zmc2V0ICE9IGludmFsaWRPZmZzZXQpOworICAgICAgICByZXR1cm4gbV9vZmZzZXQ7
CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBUJiBvdGhlcikgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBtX29mZnNldCA9PSBvdGhlci5vZmZzZXRVbmNoZWNrZWQo
KTsKKyAgICB9CisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFQmIG90aGVyKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIG1fb2Zmc2V0ICE9IG90aGVyLm9mZnNldFVuY2hlY2tlZCgpOwor
ICAgIH0KKyAgICBib29sIG9wZXJhdG9yPChjb25zdCBUJiBvdGhlcikgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBtX29mZnNldCA8IG90aGVyLm9mZnNldFVuY2hlY2tlZCgpOworICAgIH0K
KyAgICBib29sIG9wZXJhdG9yPihjb25zdCBUJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBtX29mZnNldCA+IG90aGVyLm9mZnNldFVuY2hlY2tlZCgpOworICAgIH0KKyAgICBi
b29sIG9wZXJhdG9yPD0oY29uc3QgVCYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gbV9vZmZzZXQgPD0gb3RoZXIub2Zmc2V0VW5jaGVja2VkKCk7CisgICAgfQorICAgIGJvb2wg
b3BlcmF0b3I+PShjb25zdCBUJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBt
X29mZnNldCA+PSBvdGhlci5vZmZzZXRVbmNoZWNrZWQoKTsKKyAgICB9CisgICAgCisgICAgVCBv
cGVyYXRvcisoaW50IHZhbHVlKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIFQob2Zmc2V0
KCkgKyB2YWx1ZSk7CisgICAgfQorICAgIFQgb3BlcmF0b3ItKGludCB2YWx1ZSkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBUKG9mZnNldCgpIC0gdmFsdWUpOworICAgIH0KKyAgICBUJiBv
cGVyYXRvcis9KGludCB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiAqdGhpcyA9ICp0aGlz
ICsgdmFsdWU7CisgICAgfQorICAgIFQmIG9wZXJhdG9yLT0oaW50IHZhbHVlKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuICp0aGlzID0gKnRoaXMgLSB2YWx1ZTsKKyAgICB9CisgICAgCitwcml2YXRl
OgorICAgIHVuc2lnbmVkIG1fb2Zmc2V0OworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNl
bmRpZiAvLyBHZW5lcmljT2Zmc2V0X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNBcmd1bWVudHNJdGVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNBcmd1bWVudHNJdGVyYXRvci5jcHAJKHJldmlzaW9uIDE4MDU2
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJndW1lbnRzSXRlcmF0b3Iu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMyBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzLCAyMDE1IEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTMzLDEwICszMywxOCBAQCBuYW1lc3BhY2UgSlNDIHsKIAog
Y29uc3QgQ2xhc3NJbmZvIEpTQXJndW1lbnRzSXRlcmF0b3I6OnNfaW5mbyA9IHsgIkFyZ3VtZW50
c0l0ZXJhdG9yIiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU0FyZ3Vt
ZW50c0l0ZXJhdG9yKSB9OwogCi12b2lkIEpTQXJndW1lbnRzSXRlcmF0b3I6OmZpbmlzaENyZWF0
aW9uKFZNJiB2bSwgQXJndW1lbnRzKiBhcmd1bWVudHMpCit2b2lkIEpTQXJndW1lbnRzSXRlcmF0
b3I6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgSlNPYmplY3QqIGFyZ3VtZW50cykKIHsKICAgICBC
YXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiAgICAgbV9hcmd1bWVudHMuc2V0KHZtLCB0aGlzLCBh
cmd1bWVudHMpOwogfQogCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFyZ3VtZW50c0Z1
bmNJdGVyYXRvcihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgSlNPYmplY3QqIHRoaXNPYmogPSBl
eGVjLT50aGlzVmFsdWUoKS50b1RoaXMoZXhlYywgU3RyaWN0TW9kZSkudG9PYmplY3QoZXhlYyk7
CisgICAgaWYgKCF0aGlzT2JqLT5pbmhlcml0cyhBcmd1bWVudHM6OmluZm8oKSkgJiYgIXRoaXNP
YmotPmluaGVyaXRzKE91dE9mQmFuZEFyZ3VtZW50czo6aW5mbygpKSkKKyAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZSh0aHJvd1R5cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIkF0dGVt
cHRlZCB0byB1c2UgQXJndW1lbnRzIGl0ZXJhdG9yIG9uIG5vbi1Bcmd1bWVudHMgb2JqZWN0Iikp
KTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTQXJndW1lbnRzSXRlcmF0b3I6OmNyZWF0
ZShleGVjLT52bSgpLCBleGVjLT5jYWxsZWUoKS0+Z2xvYmFsT2JqZWN0KCktPmFyZ3VtZW50c0l0
ZXJhdG9yU3RydWN0dXJlKCksIHRoaXNPYmopKTsKK30KKwogfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNBcmd1bWVudHNJdGVyYXRvci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJndW1lbnRzSXRlcmF0b3IuaAkocmV2aXNp
b24gMTgwNTY1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcmd1bWVudHNJ
dGVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMyBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLCAyMDE1IEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDcgKzI2LDcgQEAKICNpZm5kZWYgSlNBcmd1
bWVudHNJdGVyYXRvcl9oCiAjZGVmaW5lIEpTQXJndW1lbnRzSXRlcmF0b3JfaAogCi0jaW5jbHVk
ZSAiQXJndW1lbnRzLmgiCisjaW5jbHVkZSAiSlNPYmplY3QuaCIKIAogbmFtZXNwYWNlIEpTQyB7
CiAKQEAgLTQxLDcgKzQxLDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpj
cmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBT
dHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CiAgICAgfQogCi0gICAgc3RhdGljIEpTQXJndW1lbnRz
SXRlcmF0b3IqIGNyZWF0ZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBBcmd1bWVudHMq
IGFyZ3VtZW50cykKKyAgICBzdGF0aWMgSlNBcmd1bWVudHNJdGVyYXRvciogY3JlYXRlKFZNJiB2
bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTT2JqZWN0KiBhcmd1bWVudHMpCiAgICAgewogICAg
ICAgICBKU0FyZ3VtZW50c0l0ZXJhdG9yKiBpbnN0YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2Nh
dGVDZWxsPEpTQXJndW1lbnRzSXRlcmF0b3I+KHZtLmhlYXApKSBKU0FyZ3VtZW50c0l0ZXJhdG9y
KHZtLCBzdHJ1Y3R1cmUpOwogICAgICAgICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24odm0sIGFy
Z3VtZW50cyk7CkBAIC01MCwxMSArNTAsMTEgQEAgcHVibGljOgogCiAgICAgYm9vbCBuZXh0KENh
bGxGcmFtZSogY2FsbEZyYW1lLCBKU1ZhbHVlJiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIGlmICht
X25leHRJbmRleCA+PSBtX2FyZ3VtZW50cy0+bGVuZ3RoKGNhbGxGcmFtZSkpCisgICAgICAgIHVu
c2lnbmVkIGxlbmd0aCA9CisgICAgICAgICAgICBtX2FyZ3VtZW50cy0+Z2V0KGNhbGxGcmFtZSwg
Y2FsbEZyYW1lLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKS50b1VJbnQzMihjYWxsRnJhbWUpOwor
ICAgICAgICBpZiAobV9uZXh0SW5kZXggPj0gbGVuZ3RoKQogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICB2YWx1ZSA9IG1fYXJndW1lbnRzLT50cnlHZXRBcmd1bWVudChtX25leHRJ
bmRleCsrKTsKLSAgICAgICAgaWYgKCF2YWx1ZSkKLSAgICAgICAgICAgIHZhbHVlID0ganNVbmRl
ZmluZWQoKTsKKyAgICAgICAgdmFsdWUgPSBtX2FyZ3VtZW50cy0+Z2V0SW5kZXgoY2FsbEZyYW1l
LCBtX25leHRJbmRleCsrKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC02OCwx
MiArNjgsMTQgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgfQogCi0gICAgdm9pZCBmaW5pc2hDcmVh
dGlvbihWTSYsIEFyZ3VtZW50cyopOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBKU09i
amVjdCopOwogICAgIAotICAgIFdyaXRlQmFycmllcjxBcmd1bWVudHM+IG1fYXJndW1lbnRzOwor
ICAgIFdyaXRlQmFycmllcjxKU09iamVjdD4gbV9hcmd1bWVudHM7CiAgICAgc2l6ZV90IG1fbmV4
dEluZGV4OwogfTsKIAorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcmd1bWVudHNGdW5j
SXRlcmF0b3IoRXhlY1N0YXRlKik7CisKIH0KIAogI2VuZGlmIC8vICFkZWZpbmVkKEpTQXJndW1l
bnRzSXRlcmF0b3JfaCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRW52
aXJvbm1lbnRSZWNvcmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTRW52aXJvbm1lbnRSZWNvcmQuY3BwCShyZXZpc2lvbiAxODA1NjUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Vudmlyb25tZW50UmVjb3JkLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgs
IDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDA3LCAyMDA4LCAyMDEyLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzUsNCArMzUsMTIgQEAgbmFtZXNwYWNl
IEpTQyB7CiAKIGNvbnN0IENsYXNzSW5mbyBKU0Vudmlyb25tZW50UmVjb3JkOjpzX2luZm8gPSB7
ICJFbnZpcm9ubWVudFJlY29yZCIsICZCYXNlOjpzX2luZm8sIDAsIENSRUFURV9NRVRIT0RfVEFC
TEUoSlNFbnZpcm9ubWVudFJlY29yZCkgfTsKIAordm9pZCBKU0Vudmlyb25tZW50UmVjb3JkOjp2
aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAg
SlNFbnZpcm9ubWVudFJlY29yZCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0Vudmlyb25tZW50UmVj
b3JkKj4oY2VsbCk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBp
bmZvKCkpOworICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7Cisg
ICAgdmlzaXRvci5hcHBlbmRWYWx1ZXModGhpc09iamVjdC0+dmFyaWFibGVzKCksIG1fc3ltYm9s
VGFibGUtPnNjb3BlU2l6ZSgpKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Vudmlyb25tZW50UmVjb3JkLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNFbnZpcm9ubWVudFJlY29yZC5o
CShyZXZpc2lvbiAxODA1NjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Vu
dmlyb25tZW50UmVjb3JkLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDExICs0NiwyNiBAQCBjbGFz
cyBKU0Vudmlyb25tZW50UmVjb3JkIDogcHVibGljIEpTU3ltCiBwdWJsaWM6CiAgICAgdHlwZWRl
ZiBKU1N5bWJvbFRhYmxlT2JqZWN0IEJhc2U7CiAKLSAgICBXcml0ZUJhcnJpZXJCYXNlPFVua25v
d24+KiByZWdpc3RlcnMoKSB7IHJldHVybiBtX3JlZ2lzdGVyczsgfQotICAgIFdyaXRlQmFycmll
ckJhc2U8VW5rbm93bj4mIHJlZ2lzdGVyQXQoaW50IGluZGV4KSBjb25zdCB7IHJldHVybiBtX3Jl
Z2lzdGVyc1tpbmRleF07IH0KKyAgICBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiB2YXJpYWJs
ZXMoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxXcml0ZUJhcnJpZXJCYXNl
PFVua25vd24+Kj4oYml0d2lzZV9jYXN0PGNoYXIqPih0aGlzKSArIG9mZnNldE9mVmFyaWFibGVz
KCkpOworICAgIH0KKyAgICAKKyAgICBib29sIGlzVmFsaWQoU2NvcGVPZmZzZXQgb2Zmc2V0KQor
ICAgIHsKKyAgICAgICAgcmV0dXJuICEhb2Zmc2V0ICYmIG9mZnNldC5vZmZzZXQoKSA8IG1fc3lt
Ym9sVGFibGUtPnNjb3BlU2l6ZSgpOworICAgIH0KKyAgICAKKyAgICBXcml0ZUJhcnJpZXJCYXNl
PFVua25vd24+JiB2YXJpYWJsZUF0KFNjb3BlT2Zmc2V0IG9mZnNldCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChpc1ZhbGlkKG9mZnNldCkpOworICAgICAgICByZXR1cm4gdmFyaWFibGVz
KClbb2Zmc2V0Lm9mZnNldCgpXTsKKyAgICB9CiAKLSAgICBXcml0ZUJhcnJpZXJCYXNlPFVua25v
d24+KiBjb25zdCAqIGFkZHJlc3NPZlJlZ2lzdGVycygpIGNvbnN0IHsgcmV0dXJuICZtX3JlZ2lz
dGVyczsgfQotICAgIHN0YXRpYyBzaXplX3Qgb2Zmc2V0T2ZSZWdpc3RlcnMoKSB7IHJldHVybiBP
QkpFQ1RfT0ZGU0VUT0YoSlNFbnZpcm9ubWVudFJlY29yZCwgbV9yZWdpc3RlcnMpOyB9CisgICAg
c3RhdGljIHNpemVfdCBvZmZzZXRPZlZhcmlhYmxlcygpCisgICAgeworICAgICAgICByZXR1cm4g
V1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mPHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pPihz
aXplb2YoSlNFbnZpcm9ubWVudFJlY29yZCkpOworICAgIH0KIAogICAgIERFQ0xBUkVfSU5GTzsK
IApAQCAtNjAsMTUgKzc1LDM1IEBAIHByb3RlY3RlZDoKICAgICBKU0Vudmlyb25tZW50UmVjb3Jk
KAogICAgICAgICBWTSYgdm0sCiAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlLAotICAgICAg
ICBSZWdpc3RlciogcmVnaXN0ZXJzLAogICAgICAgICBKU1Njb3BlKiBzY29wZSwKICAgICAgICAg
U3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlKQogICAgICAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSwg
c2NvcGUsIHN5bWJvbFRhYmxlKQotICAgICAgICAsIG1fcmVnaXN0ZXJzKHJlaW50ZXJwcmV0X2Nh
c3Q8V3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPio+KHJlZ2lzdGVycykpCiAgICAgewogICAgIH0K
LQotICAgIFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIG1fcmVnaXN0ZXJzOyAvLyAiciIgaW4g
dGhlIHN0YWNrLgorICAgIAorICAgIHN0YXRpYyBzaXplX3QgYWxsb2NhdGlvblNpemVGb3JTY29w
ZVNpemUodW5zaWduZWQgc2NvcGVTaXplKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG9mZnNldE9m
VmFyaWFibGVzKCkgKyBzY29wZVNpemUgKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KTsK
KyAgICB9CisgICAgCisgICAgc3RhdGljIHNpemVfdCBhbGxvY2F0aW9uU2l6ZShTeW1ib2xUYWJs
ZSogc3ltYm9sVGFibGUpCisgICAgeworICAgICAgICByZXR1cm4gYWxsb2NhdGlvblNpemVGb3JT
Y29wZVNpemUoc3ltYm9sVGFibGUtPnNjb3BlU2l6ZSgpKTsKKyAgICB9CisgICAgCisgICAgdm9p
ZCBmaW5pc2hDcmVhdGlvblVuaW5pdGlhbGl6ZWQoVk0mIHZtKQorICAgIHsKKyAgICAgICAgQmFz
ZTo6ZmluaXNoQ3JlYXRpb24odm0pOworICAgIH0KKyAgICAKKyAgICB2b2lkIGZpbmlzaENyZWF0
aW9uKFZNJiB2bSkKKyAgICB7CisgICAgICAgIGZpbmlzaENyZWF0aW9uVW5pbml0aWFsaXplZCh2
bSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1fc3ltYm9sVGFibGUtPnNjb3BlU2l6ZSgp
OyBpLS07KSB7CisgICAgICAgICAgICAvLyBGaWxsaW5nIHRoaXMgd2l0aCB1bmRlZmluZWQgaXMg
dXNlZnVsIGJlY2F1c2UgdGhhdCdzIHdoYXQgdmFyaWFibGVzIHN0YXJ0IG91dCBhcy4KKyAgICAg
ICAgICAgIHZhcmlhYmxlQXQoaSkuc2V0VW5kZWZpbmVkKCk7CisgICAgICAgIH0KKyAgICB9CiB9
OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTTGV4aWNhbEVudmlyb25tZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0xleGljYWxFbnZpcm9ubWVudC5jcHAJKHJldmlzaW9uIDE4MDU2
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTGV4aWNhbEVudmlyb25tZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDgsIDIwMDksIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDA4LCAyMDA5LCAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDAsMjcgKzQwLDE5
IEBAIG5hbWVzcGFjZSBKU0MgewogCiBjb25zdCBDbGFzc0luZm8gSlNMZXhpY2FsRW52aXJvbm1l
bnQ6OnNfaW5mbyA9IHsgIkpTTGV4aWNhbEVudmlyb25tZW50IiwgJkJhc2U6OnNfaW5mbywgMCwg
Q1JFQVRFX01FVEhPRF9UQUJMRShKU0xleGljYWxFbnZpcm9ubWVudCkgfTsKIAotdm9pZCBKU0xl
eGljYWxFbnZpcm9ubWVudDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQotewotICAgIEpTTGV4aWNhbEVudmlyb25tZW50KiB0aGlzT2JqZWN0ID0ganND
YXN0PEpTTGV4aWNhbEVudmlyb25tZW50Kj4oY2VsbCk7Ci0gICAgQVNTRVJUX0dDX09CSkVDVF9J
TkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwotICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhp
c09iamVjdCwgdmlzaXRvcik7Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHRoaXNPYmplY3Qt
PnN5bWJvbFRhYmxlKCktPmNhcHR1cmVDb3VudCgpOyArK2kpCi0gICAgICAgIHZpc2l0b3IuYXBw
ZW5kKCZ0aGlzT2JqZWN0LT5zdG9yYWdlKClbaV0pOwotfQotCiBpbmxpbmUgYm9vbCBKU0xleGlj
YWxFbnZpcm9ubWVudDo6c3ltYm9sVGFibGVHZXQoUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwg
UHJvcGVydHlTbG90JiBzbG90KQogewogICAgIFN5bWJvbFRhYmxlRW50cnkgZW50cnkgPSBzeW1i
b2xUYWJsZSgpLT5pbmxpbmVHZXQocHJvcGVydHlOYW1lLnVpZCgpKTsKICAgICBpZiAoZW50cnku
aXNOdWxsKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgIFNjb3BlT2Zmc2V0IG9mZnNl
dCA9IGVudHJ5LnNjb3BlT2Zmc2V0KCk7CisKICAgICAvLyBEZWZlbmQgYWdhaW5zdCB0aGUgaW5z
cGVjdG9yIGFza2luZyBmb3IgYSB2YXIgYWZ0ZXIgaXQgaGFzIGJlZW4gb3B0aW1pemVkIG91dC4K
LSAgICBpZiAoIWlzVmFsaWQoZW50cnkpKQorICAgIGlmICghaXNWYWxpZChvZmZzZXQpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBzbG90LnNldFZhbHVlKHRoaXMsIERvbnRFbnVtLCBy
ZWdpc3RlckF0KGVudHJ5LmdldEluZGV4KCkpLmdldCgpKTsKKyAgICBzbG90LnNldFZhbHVlKHRo
aXMsIERvbnRFbnVtLCB2YXJpYWJsZUF0KG9mZnNldCkuZ2V0KCkpOwogICAgIHJldHVybiB0cnVl
OwogfQogCkBAIC03MCwxMSArNjIsMTMgQEAgaW5saW5lIGJvb2wgSlNMZXhpY2FsRW52aXJvbm1l
bnQ6OnN5bWJvbAogICAgIGlmIChlbnRyeS5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCisgICAgU2NvcGVPZmZzZXQgb2Zmc2V0ID0gZW50cnkuc2NvcGVPZmZzZXQoKTsKKwogICAg
IC8vIERlZmVuZCBhZ2FpbnN0IHRoZSBpbnNwZWN0b3IgYXNraW5nIGZvciBhIHZhciBhZnRlciBp
dCBoYXMgYmVlbiBvcHRpbWl6ZWQgb3V0LgotICAgIGlmICghaXNWYWxpZChlbnRyeSkpCisgICAg
aWYgKCFpc1ZhbGlkKG9mZnNldCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGRlc2Ny
aXB0b3Iuc2V0RGVzY3JpcHRvcihyZWdpc3RlckF0KGVudHJ5LmdldEluZGV4KCkpLmdldCgpLCBl
bnRyeS5nZXRBdHRyaWJ1dGVzKCkpOworICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcih2YXJp
YWJsZUF0KG9mZnNldCkuZ2V0KCksIGVudHJ5LmdldEF0dHJpYnV0ZXMoKSk7CiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKQEAgLTk1LDEyICs4OSwxMyBAQCBpbmxpbmUgYm9vbCBKU0xleGljYWxFbnZp
cm9ubWVudDo6c3ltYm9sCiAgICAgICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgU3Ry
aWN0TW9kZVJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsKICAgICAgICAgICAgIHJldHVybiB0
cnVlOwogICAgICAgICB9CisgICAgICAgIFNjb3BlT2Zmc2V0IG9mZnNldCA9IGl0ZXItPnZhbHVl
LnNjb3BlT2Zmc2V0KCk7CiAgICAgICAgIC8vIERlZmVuZCBhZ2FpbnN0IHRoZSBpbnNwZWN0b3Ig
YXNraW5nIGZvciBhIHZhciBhZnRlciBpdCBoYXMgYmVlbiBvcHRpbWl6ZWQgb3V0LgotICAgICAg
ICBpZiAoIWlzVmFsaWQoaXRlci0+dmFsdWUpKQorICAgICAgICBpZiAoIWlzVmFsaWQob2Zmc2V0
KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgaWYgKFZhcmlhYmxlV2F0Y2hw
b2ludFNldCogc2V0ID0gaXRlci0+dmFsdWUud2F0Y2hwb2ludFNldCgpKQotICAgICAgICAgICAg
c2V0LT5pbnZhbGlkYXRlKFZhcmlhYmxlV3JpdGVGaXJlRGV0YWlsKHRoaXMsIHByb3BlcnR5TmFt
ZSkpOyAvLyBEb24ndCBtZXNzIGFyb3VuZCAtIGlmIHdlIGhhZCBmb3VuZCB0aGlzIHN0YXRpY2Fs
bHksIHdlIHdvdWxkIGhhdmUgaW52Y2FsaWRhdGVkIGl0LgotICAgICAgICByZWcgPSAmcmVnaXN0
ZXJBdChpdGVyLT52YWx1ZS5nZXRJbmRleCgpKTsKKyAgICAgICAgICAgIHNldC0+aW52YWxpZGF0
ZShWYXJpYWJsZVdyaXRlRmlyZURldGFpbCh0aGlzLCBwcm9wZXJ0eU5hbWUpKTsgLy8gRG9uJ3Qg
bWVzcyBhcm91bmQgLSBpZiB3ZSBoYWQgZm91bmQgdGhpcyBzdGF0aWNhbGx5LCB3ZSB3b3VsZCBo
YXZlIGludmFsaWRhdGVkIGl0LgorICAgICAgICByZWcgPSAmdmFyaWFibGVBdChvZmZzZXQpOwog
ICAgIH0KICAgICByZWctPnNldCh2bSwgdGhpcywgdmFsdWUpOwogICAgIHJldHVybiB0cnVlOwpA
QCAtMTE2LDcgKzExMSw3IEBAIHZvaWQgSlNMZXhpY2FsRW52aXJvbm1lbnQ6OmdldE93bk5vbklu
ZGUKICAgICAgICAgZm9yIChTeW1ib2xUYWJsZTo6TWFwOjppdGVyYXRvciBpdCA9IHRoaXNPYmpl
Y3QtPnN5bWJvbFRhYmxlKCktPmJlZ2luKGxvY2tlcik7IGl0ICE9IGVuZDsgKytpdCkgewogICAg
ICAgICAgICAgaWYgKGl0LT52YWx1ZS5nZXRBdHRyaWJ1dGVzKCkgJiBEb250RW51bSAmJiAhc2hv
dWxkSW5jbHVkZURvbnRFbnVtUHJvcGVydGllcyhtb2RlKSkKICAgICAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgICAgIGlmICghdGhpc09iamVjdC0+aXNWYWxpZChpdC0+dmFsdWUpKQor
ICAgICAgICAgICAgaWYgKCF0aGlzT2JqZWN0LT5pc1ZhbGlkKGl0LT52YWx1ZS5zY29wZU9mZnNl
dCgpKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIHByb3BlcnR5TmFt
ZXMuYWRkKElkZW50aWZpZXIoZXhlYywgaXQtPmtleS5nZXQoKSkpOwogICAgICAgICB9CkBAIC0x
MzcsMTEgKzEzMiwxMyBAQCBpbmxpbmUgYm9vbCBKU0xleGljYWxFbnZpcm9ubWVudDo6c3ltYm9s
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIFN5bWJvbFRhYmxlRW50cnkmIGVu
dHJ5ID0gaXRlci0+dmFsdWU7CiAgICAgICAgIEFTU0VSVCghZW50cnkuaXNOdWxsKCkpOwotICAg
ICAgICBpZiAoIWlzVmFsaWQoZW50cnkpKQorICAgICAgICAKKyAgICAgICAgU2NvcGVPZmZzZXQg
b2Zmc2V0ID0gZW50cnkuc2NvcGVPZmZzZXQoKTsKKyAgICAgICAgaWYgKCFpc1ZhbGlkKG9mZnNl
dCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAogICAgICAgICBlbnRyeS5z
ZXRBdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpOwotICAgICAgICByZWcgPSAmcmVnaXN0ZXJBdChlbnRy
eS5nZXRJbmRleCgpKTsKKyAgICAgICAgcmVnID0gJnZhcmlhYmxlQXQob2Zmc2V0KTsKICAgICB9
CiAgICAgcmVnLT5zZXQodm0sIHRoaXMsIHZhbHVlKTsKICAgICByZXR1cm4gdHJ1ZTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTGV4aWNhbEVudmlyb25tZW50LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMZXhpY2FsRW52aXJv
bm1lbnQuaAkocmV2aXNpb24gMTgwNTY1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNMZXhpY2FsRW52aXJvbm1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDksIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5LCAyMDEzLTIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC00MSwzMyArNDEsMjcgQEAgY2xhc3MgUmVnaXN0ZXI7CiAgICAgCiBjbGFz
cyBKU0xleGljYWxFbnZpcm9ubWVudCA6IHB1YmxpYyBKU0Vudmlyb25tZW50UmVjb3JkIHsKIHBy
aXZhdGU6Ci0gICAgSlNMZXhpY2FsRW52aXJvbm1lbnQoVk0mLCBDYWxsRnJhbWUqLCBSZWdpc3Rl
ciosIEpTU2NvcGUqLCBDb2RlQmxvY2sqKTsKKyAgICBKU0xleGljYWxFbnZpcm9ubWVudChWTSYs
IFN0cnVjdHVyZSosIEpTU2NvcGUqLCBTeW1ib2xUYWJsZSopOwogICAgIAogcHVibGljOgogICAg
IHR5cGVkZWYgSlNFbnZpcm9ubWVudFJlY29yZCBCYXNlOwogCi0gICAgc3RhdGljIEpTTGV4aWNh
bEVudmlyb25tZW50KiBjcmVhdGUoVk0mIHZtLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgUmVnaXN0
ZXIqIHJlZ2lzdGVycywgSlNTY29wZSogY3VycmVudFNjb3BlLCBDb2RlQmxvY2sqIGNvZGVCbG9j
aykKKyAgICBzdGF0aWMgSlNMZXhpY2FsRW52aXJvbm1lbnQqIGNyZWF0ZSgKKyAgICAgICAgVk0m
IHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1Njb3BlKiBjdXJyZW50U2NvcGUs
IFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSkKICAgICB7Ci0gICAgICAgIFN5bWJvbFRhYmxlKiBz
eW1ib2xUYWJsZSA9IGNvZGVCbG9jay0+c3ltYm9sVGFibGUoKTsKLSAgICAgICAgQVNTRVJUKGNv
ZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUpOwotICAgICAgICBKU0xleGljYWxF
bnZpcm9ubWVudCogbGV4aWNhbEVudmlyb25tZW50ID0gbmV3ICgKLSAgICAgICAgICAgIE5vdE51
bGwsCi0gICAgICAgICAgICBhbGxvY2F0ZUNlbGw8SlNMZXhpY2FsRW52aXJvbm1lbnQ+KAotICAg
ICAgICAgICAgICAgIHZtLmhlYXAsCi0gICAgICAgICAgICAgICAgYWxsb2NhdGlvblNpemUoc3lt
Ym9sVGFibGUpCi0gICAgICAgICAgICApCi0gICAgICAgICkgSlNMZXhpY2FsRW52aXJvbm1lbnQo
dm0sIGNhbGxGcmFtZSwgcmVnaXN0ZXJzLCBjdXJyZW50U2NvcGUsIGNvZGVCbG9jayk7Ci0gICAg
ICAgIGxleGljYWxFbnZpcm9ubWVudC0+ZmluaXNoQ3JlYXRpb24odm0pOwotICAgICAgICByZXR1
cm4gbGV4aWNhbEVudmlyb25tZW50OworICAgICAgICBKU0xleGljYWxFbnZpcm9ubWVudCogcmVz
dWx0ID0KKyAgICAgICAgICAgIG5ldyAoTm90TnVsbCwgYWxsb2NhdGlvblNpemUoc3ltYm9sVGFi
bGUpKQorICAgICAgICAgICAgSlNMZXhpY2FsRW52aXJvbm1lbnQodm0sIGdsb2JhbE9iamVjdC0+
YWN0aXZhdGlvblN0cnVjdHVyZSgpLCBjdXJyZW50U2NvcGUsIHN5bWJvbFRhYmxlKTsKKyAgICAg
ICAgcmVzdWx0LT5maW5pc2hDcmVhdGlvbih2bSk7CiAgICAgfQotICAgICAgICAKKyAgICAKICAg
ICBzdGF0aWMgSlNMZXhpY2FsRW52aXJvbm1lbnQqIGNyZWF0ZShWTSYgdm0sIENhbGxGcmFtZSog
Y2FsbEZyYW1lLCBKU1Njb3BlKiBjdXJyZW50U2NvcGUsIENvZGVCbG9jayogY29kZUJsb2NrKQog
ICAgIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZSh2bSwgY2FsbEZyYW1lLCBjYWxsRnJhbWUtPnJl
Z2lzdGVycygpICsgY29kZUJsb2NrLT5mcmFtZVBvaW50ZXJPZmZzZXRUb0dldEFjdGl2YXRpb25S
ZWdpc3RlcnMoKSwgY3VycmVudFNjb3BlLCBjb2RlQmxvY2spOworICAgICAgICBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0ID0gY2FsbEZyYW1lLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7Cisg
ICAgICAgIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSA9IGNvZGVCbG9jay0+c3ltYm9sVGFibGUo
KTsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBjdXJyZW50U2NvcGUs
IHN5bWJvbHRhYmxlKTsKICAgICB9Ci0KLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpT
Q2VsbCosIFNsb3RWaXNpdG9yJik7Ci0KKyAgICAgICAgCiAgICAgc3RhdGljIGJvb2wgZ2V0T3du
UHJvcGVydHlTbG90KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0
eVNsb3QmKTsKICAgICBzdGF0aWMgdm9pZCBnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNP
YmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7
CiAKQEAgLTgxLDEyICs3NSw2IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNy
ZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpIHsgcmV0
dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIGpzTnVsbCgpLCBUeXBlSW5m
byhBY3RpdmF0aW9uT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOyB9CiAKLSAg
ICBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+JiByZWdpc3RlckF0KGludCkgY29uc3Q7Ci0gICAg
Ym9vbCBpc1ZhbGlkSW5kZXgoaW50KSBjb25zdDsKLSAgICBib29sIGlzVmFsaWQoY29uc3QgU3lt
Ym9sVGFibGVFbnRyeSYpIGNvbnN0OwotICAgIGludCByZWdpc3RlcnNPZmZzZXQoKTsKLSAgICBz
dGF0aWMgaW50IHJlZ2lzdGVyc09mZnNldChTeW1ib2xUYWJsZSopOwotCiBwcm90ZWN0ZWQ6CiAg
ICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVzR2V0T3du
UHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcyB8IEJhc2U6OlN0cnVjdHVy
ZUZsYWdzOwogCkBAIC05NiwzMiArODQsMTMgQEAgcHJpdmF0ZToKICAgICBib29sIHN5bWJvbFRh
YmxlR2V0KFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiwgYm9vbCYgc2xvdElzV3JpdGVhYmxl
KTsKICAgICBib29sIHN5bWJvbFRhYmxlUHV0KEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNW
YWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7CiAgICAgYm9vbCBzeW1ib2xUYWJsZVB1dFdpdGhBdHRy
aWJ1dGVzKFZNJiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKTsK
LQotICAgIHN0YXRpYyBzaXplX3QgYWxsb2NhdGlvblNpemUoU3ltYm9sVGFibGUqKTsKLSAgICBz
dGF0aWMgc2l6ZV90IHN0b3JhZ2VPZmZzZXQoKTsKLQotICAgIFdyaXRlQmFycmllcjxVbmtub3du
Piogc3RvcmFnZSgpOyAvLyBjYXB0dXJlQ291bnQoKSBudW1iZXIgb2YgcmVnaXN0ZXJzLgogfTsK
IAotaW5saW5lIEpTTGV4aWNhbEVudmlyb25tZW50OjpKU0xleGljYWxFbnZpcm9ubWVudChWTSYg
dm0sIENhbGxGcmFtZSogY2FsbEZyYW1lLCBSZWdpc3RlciogcmVnaXN0ZXJzLCBKU1Njb3BlKiBj
dXJyZW50U2NvcGUsIENvZGVCbG9jayogY29kZUJsb2NrKQotICAgIDogQmFzZSgKLSAgICAgICAg
dm0sCi0gICAgICAgIGNhbGxGcmFtZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5hY3RpdmF0aW9u
U3RydWN0dXJlKCksCi0gICAgICAgIHJlZ2lzdGVycywKLSAgICAgICAgY3VycmVudFNjb3BlLAot
ICAgICAgICBjb2RlQmxvY2stPnN5bWJvbFRhYmxlKCkpCitpbmxpbmUgSlNMZXhpY2FsRW52aXJv
bm1lbnQ6OkpTTGV4aWNhbEVudmlyb25tZW50KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUs
IEpTU2NvcGUqIGN1cnJlbnRTY29wZSwgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlKQorICAgIDog
QmFzZSh2bSwgc3RydWN0dXJlLCBjdXJyZW50U2NvcGUsIHN5bWJvbFRhYmxlKQogewotICAgIFN5
bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSA9IGNvZGVCbG9jay0+c3ltYm9sVGFibGUoKTsKLSAgICBX
cml0ZUJhcnJpZXI8VW5rbm93bj4qIHN0b3JhZ2UgPSB0aGlzLT5zdG9yYWdlKCk7Ci0gICAgc2l6
ZV90IGNhcHR1cmVDb3VudCA9IHN5bWJvbFRhYmxlLT5jYXB0dXJlQ291bnQoKTsKLSAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGNhcHR1cmVDb3VudDsgKytpKQotICAgICAgICBuZXcgKE5vdE51
bGwsICZzdG9yYWdlW2ldKSBXcml0ZUJhcnJpZXI8VW5rbm93bj4oVW5kZWZpbmVkV3JpdGVCYXJy
aWVyVGFnKTsKLSAgICBtX3JlZ2lzdGVycyA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPFdyaXRlQmFy
cmllckJhc2U8VW5rbm93bj4qPigKLSAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4odGhp
cykgKyByZWdpc3RlcnNPZmZzZXQoc3ltYm9sVGFibGUpKTsKIH0KIAotSlNMZXhpY2FsRW52aXJv
bm1lbnQqIGFzQWN0aXZhdGlvbihKU1ZhbHVlKTsKLQogaW5saW5lIEpTTGV4aWNhbEVudmlyb25t
ZW50KiBhc0FjdGl2YXRpb24oSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBBU1NFUlQoYXNPYmplY3Qo
dmFsdWUpLT5pbmhlcml0cyhKU0xleGljYWxFbnZpcm9ubWVudDo6aW5mbygpKSk7CkBAIC0xMzMs
NDkgKzEwMiw2IEBAIEFMV0FZU19JTkxJTkUgSlNMZXhpY2FsRW52aXJvbm1lbnQqIFJlZ2kKICAg
ICByZXR1cm4gYXNBY3RpdmF0aW9uKGpzVmFsdWUoKSk7CiB9CiAKLWlubGluZSBpbnQgSlNMZXhp
Y2FsRW52aXJvbm1lbnQ6OnJlZ2lzdGVyc09mZnNldChTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUp
Ci17Ci0gICAgcmV0dXJuIHN0b3JhZ2VPZmZzZXQoKSArICgoc3ltYm9sVGFibGUtPmNhcHR1cmVD
b3VudCgpIC0gc3ltYm9sVGFibGUtPmNhcHR1cmVTdGFydCgpICAtIDEpICogc2l6ZW9mKFdyaXRl
QmFycmllcjxVbmtub3duPikpOwotfQotCi1pbmxpbmUgc2l6ZV90IEpTTGV4aWNhbEVudmlyb25t
ZW50OjpzdG9yYWdlT2Zmc2V0KCkKLXsKLSAgICByZXR1cm4gV1RGOjpyb3VuZFVwVG9NdWx0aXBs
ZU9mPHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pPihzaXplb2YoSlNMZXhpY2FsRW52aXJv
bm1lbnQpKTsKLX0KLQotaW5saW5lIFdyaXRlQmFycmllcjxVbmtub3duPiogSlNMZXhpY2FsRW52
aXJvbm1lbnQ6OnN0b3JhZ2UoKQotewotICAgIHJldHVybiByZWludGVycHJldF9jYXN0X3B0cjxX
cml0ZUJhcnJpZXI8VW5rbm93bj4qPigKLSAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4o
dGhpcykgKyBzdG9yYWdlT2Zmc2V0KCkpOwotfQotCi1pbmxpbmUgc2l6ZV90IEpTTGV4aWNhbEVu
dmlyb25tZW50OjphbGxvY2F0aW9uU2l6ZShTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUpCi17Ci0g
ICAgc2l6ZV90IG9iamVjdFNpemVJbkJ5dGVzID0gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mPHNp
emVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pPihzaXplb2YoSlNMZXhpY2FsRW52aXJvbm1lbnQp
KTsKLSAgICBzaXplX3Qgc3RvcmFnZVNpemVJbkJ5dGVzID0gc3ltYm9sVGFibGUtPmNhcHR1cmVD
b3VudCgpICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPik7Ci0gICAgcmV0dXJuIG9iamVj
dFNpemVJbkJ5dGVzICsgc3RvcmFnZVNpemVJbkJ5dGVzOwotfQotCi1pbmxpbmUgYm9vbCBKU0xl
eGljYWxFbnZpcm9ubWVudDo6aXNWYWxpZEluZGV4KGludCBpbmRleCkgY29uc3QKLXsKLSAgICBp
ZiAoaW5kZXggPiBzeW1ib2xUYWJsZSgpLT5jYXB0dXJlU3RhcnQoKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIGlmIChpbmRleCA8PSBzeW1ib2xUYWJsZSgpLT5jYXB0dXJlRW5kKCkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotaW5saW5lIGJvb2wg
SlNMZXhpY2FsRW52aXJvbm1lbnQ6OmlzVmFsaWQoY29uc3QgU3ltYm9sVGFibGVFbnRyeSYgZW50
cnkpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGlzVmFsaWRJbmRleChlbnRyeS5nZXRJbmRleCgpKTsK
LX0KLQotaW5saW5lIFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4mIEpTTGV4aWNhbEVudmlyb25t
ZW50OjpyZWdpc3RlckF0KGludCBpbmRleCkgY29uc3QKLXsKLSAgICBBU1NFUlQoaXNWYWxpZElu
ZGV4KGluZGV4KSk7Ci0gICAgcmV0dXJuIEJhc2U6OnJlZ2lzdGVyQXQoaW5kZXgpOwotfQotCiB9
IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEpTTGV4aWNhbEVudmlyb25tZW50X2gKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTmFtZVNjb3BlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU05hbWVTY29wZS5jcHAJKHJl
dmlzaW9uIDE4MDU2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTmFtZVNj
b3BlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsMTQgKzQ3LDYgQEAgSlNOYW1lU2NvcGUqIEpT
TmFtZVNjb3BlOjpjcmVhdGUoVk0mIHZtLAogICAgIHJldHVybiBudWxscHRyOwogfQogCi12b2lk
IEpTTmFtZVNjb3BlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCi17Ci0gICAgSlNOYW1lU2NvcGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNOYW1lU2Nv
cGUqPihjZWxsKTsKLSAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGlu
Zm8oKSk7Ci0gICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKLSAg
ICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9yZWdpc3RlclN0b3JlKTsKLX0KLQogSlNW
YWx1ZSBKU05hbWVTY29wZTo6dG9UaGlzKEpTQ2VsbCosIEV4ZWNTdGF0ZSogZXhlYywgRUNNQU1v
ZGUgZWNtYU1vZGUpCiB7CiAgICAgaWYgKGVjbWFNb2RlID09IFN0cmljdE1vZGUpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU05hbWVTY29wZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTmFtZVNjb3BlLmgJKHJldmlzaW9uIDE4
MDU2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTmFtZVNjb3BlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTQ0LDM4ICs0NCwzNyBAQCBwdWJsaWM6CiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVD4KICAgICBzdGF0aWMgVCogY3JlYXRlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSlNTY29wZSogY3VycmVudFNjb3BlLCBTeW1ib2xUYWJsZSogc3ltYm9sVGFi
bGUsIEpTVmFsdWUgdmFsdWUpCiAgICAgewotICAgICAgICBUKiBzY29wZU9iamVjdCA9IG5ldyAo
Tm90TnVsbCwgYWxsb2NhdGVDZWxsPFQ+KHZtLmhlYXApKSBUKHZtLCBnbG9iYWxPYmplY3QsIGN1
cnJlbnRTY29wZSwgc3ltYm9sVGFibGUpOworICAgICAgICBUKiBzY29wZU9iamVjdCA9IG5ldyAo
CisgICAgICAgICAgICBOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8VD4odm0uaGVhcCwgYWxsb2NhdGlv
blNpemVGb3JTY29wZVNpemUoMSkpCisgICAgICAgICAgICBUKHZtLCBnbG9iYWxPYmplY3QsIGN1
cnJlbnRTY29wZSwgc3ltYm9sVGFibGUpOwogICAgICAgICBzY29wZU9iamVjdC0+ZmluaXNoQ3Jl
YXRpb24odm0sIHZhbHVlKTsKICAgICAgICAgcmV0dXJuIHNjb3BlT2JqZWN0OwogICAgIH0KICAg
ICAKICAgICBzdGF0aWMgSlNOYW1lU2NvcGUqIGNyZWF0ZShWTSYsIEpTR2xvYmFsT2JqZWN0Kiwg
SlNTY29wZSogY3VycmVudFNjb3BlLCBTeW1ib2xUYWJsZSosIEpTVmFsdWUsIFR5cGUpOwogCi0g
ICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogICAg
IHN0YXRpYyBKU1ZhbHVlIHRvVGhpcyhKU0NlbGwqLCBFeGVjU3RhdGUqLCBFQ01BTW9kZSk7CiAg
ICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwg
UHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgdm9pZCBwdXQoSlNDZWxs
KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsK
IAogICAgIERFQ0xBUkVfSU5GTzsKIAotICAgIEpTVmFsdWUgdmFsdWUoKSBjb25zdCB7IHJldHVy
biBtX3JlZ2lzdGVyU3RvcmUuZ2V0KCk7IH0KKyAgICBKU1ZhbHVlIHZhbHVlKCkgY29uc3QgeyBy
ZXR1cm4gdmFyaWFibGVBdCgwKS5nZXQoKTsgfQogCiBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBmaW5p
c2hDcmVhdGlvbihWTSYgdm0sIEpTVmFsdWUgdmFsdWUpCiAgICAgewotICAgICAgICBCYXNlOjpm
aW5pc2hDcmVhdGlvbih2bSk7Ci0gICAgICAgIG1fcmVnaXN0ZXJTdG9yZS5zZXQodm0sIHRoaXMs
IHZhbHVlKTsKKyAgICAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb25VbmluaXRpYWxpemVkKHZtKTsK
KyAgICAgICAgdmFyaWFibGVBdCgwKS5zZXQodm0sIHRoaXMsIHZhbHVlKTsKICAgICB9CiAKICAg
ICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNHZXRPd25Q
cm9wZXJ0eVNsb3QgfCBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKIAogICAgIEpTTmFtZVNjb3BlKFZN
JiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTU2NvcGUqIG5leHQsIFN5bWJvbFRhYmxlKiBz
eW1ib2xUYWJsZSkKLSAgICAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUsIHJlaW50ZXJwcmV0X2Nh
c3Q8UmVnaXN0ZXIqPigmbV9yZWdpc3RlclN0b3JlICsgMSksIG5leHQsIHN5bWJvbFRhYmxlKQor
ICAgICAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSwgbmV4dCwgc3ltYm9sVGFibGUpCiAgICAgewor
ICAgICAgICBBU1NFUlQoc3ltYm9sVGFibGUtPnNjb3BlU2l6ZSgpID09IDEpOwogICAgIH0KLQot
cHJpdmF0ZToKLSAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4gbV9yZWdpc3RlclN0b3JlOwogfTsK
IAogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJp
YWJsZU9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5jcHAJKHJldmlzaW9uIDE4MDU2NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIsIDIwMTMsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMywzMiArMzMsMzAgQEAKIAogbmFtZXNwYWNl
IEpTQyB7CiAKLWludCBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0OjpmaW5kUmVnaXN0ZXJJbmRl
eCh2b2lkKiByZWdpc3RlckFkZHJlc3MpCitTY29wZU9mZnNldCBKU1NlZ21lbnRlZFZhcmlhYmxl
T2JqZWN0OjpmaW5kUmVnaXN0ZXJJbmRleCh2b2lkKiByZWdpc3RlckFkZHJlc3MpCiB7CiAgICAg
Q29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsKICAgICAKLSAgICBmb3IgKGludCBp
ID0gbV9yZWdpc3RlcnMuc2l6ZSgpOyBpLS07KSB7CisgICAgZm9yICh1bnNpZ25lZCBpID0gbV9y
ZWdpc3RlcnMuc2l6ZSgpOyBpLS07KSB7CiAgICAgICAgIGlmICgmbV9yZWdpc3RlcnNbaV0gIT0g
cmVnaXN0ZXJBZGRyZXNzKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIHJldHVybiBp
OworICAgICAgICByZXR1cm4gU2NvcGVPZmZzZXQoaSk7CiAgICAgfQogICAgIENSQVNIKCk7Ci0g
ICAgcmV0dXJuIC0xOworICAgIHJldHVybiBTY29wZU9mZnNldCgpOwogfQogCi1pbnQgSlNTZWdt
ZW50ZWRWYXJpYWJsZU9iamVjdDo6YWRkUmVnaXN0ZXJzKGludCBudW1iZXJPZlJlZ2lzdGVyc1Rv
QWRkKQorU2NvcGVPZmZzZXQgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdDo6YWRkUmVnaXN0ZXJz
KHVuc2lnbmVkIG51bWJlck9mUmVnaXN0ZXJzVG9BZGQpCiB7CiAgICAgQ29uY3VycmVudEpJVExv
Y2tlciBsb2NrZXIobV9sb2NrKTsKICAgICAKLSAgICBBU1NFUlQobnVtYmVyT2ZSZWdpc3RlcnNU
b0FkZCA+PSAwKTsKLSAgICAKICAgICBzaXplX3Qgb2xkU2l6ZSA9IG1fcmVnaXN0ZXJzLnNpemUo
KTsKICAgICBtX3JlZ2lzdGVycy5ncm93KG9sZFNpemUgKyBudW1iZXJPZlJlZ2lzdGVyc1RvQWRk
KTsKICAgICAKICAgICBmb3IgKHNpemVfdCBpID0gbnVtYmVyT2ZSZWdpc3RlcnNUb0FkZDsgaS0t
OykKICAgICAgICAgbV9yZWdpc3RlcnNbb2xkU2l6ZSArIGldLnNldFdpdGhvdXRXcml0ZUJhcnJp
ZXIoanNVbmRlZmluZWQoKSk7CiAgICAgCi0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4ob2xk
U2l6ZSk7CisgICAgcmV0dXJuIFNjb3BlT2Zmc2V0KG9sZFNpemUpOwogfQogCiB2b2lkIEpTU2Vn
bWVudGVkVmFyaWFibGVPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90Vmlz
aXRvciYgc2xvdFZpc2l0b3IpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5oCShyZXZpc2lvbiAxODA1
NjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxl
T2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDI0ICs1NywyMyBAQCBjbGFzcyBKU1NlZ21l
bnRlZFZhcmlhYmxlT2JqZWN0IDogcHVibGljCiBwdWJsaWM6CiAgICAgdHlwZWRlZiBKU1N5bWJv
bFRhYmxlT2JqZWN0IEJhc2U7CiAKLSAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHJlZ2lzdGVy
QXQoaW50IGluZGV4KSB7IHJldHVybiBtX3JlZ2lzdGVyc1tpbmRleF07IH0KKyAgICBXcml0ZUJh
cnJpZXI8VW5rbm93bj4mIHZhcmlhYmxlQXQoU2NvcGVPZmZzZXQgb2Zmc2V0KSB7IHJldHVybiBt
X3ZhcmlhYmxlc1tvZmZzZXQub2Zmc2V0KCldOyB9CiAgICAgCiAgICAgLy8gVGhpcyBpcyBhIHNs
b3cgbWV0aG9kIGNhbGwsIHdoaWNoIHNlYXJjaGVzIHRoZSByZWdpc3RlciBiYW5rIHRvIGZpbmQg
dGhlIGluZGV4CiAgICAgLy8gZ2l2ZW4gYSBwb2ludGVyLiBJdCB3aWxsIENSQVNIKCkgaWYgaXQg
ZG9lcyBub3QgZmluZCB0aGUgcmVnaXN0ZXIuIE9ubHkgdXNlIHRoaXMKICAgICAvLyBpbiBkZWJ1
ZyBjb2RlIChsaWtlIGJ5dGVjb2RlIGR1bXBpbmcpLgotICAgIEpTX0VYUE9SVF9QUklWQVRFIGlu
dCBmaW5kUmVnaXN0ZXJJbmRleCh2b2lkKik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgU2NvcGVP
ZmZzZXQgZmluZFJlZ2lzdGVySW5kZXgodm9pZCopOwogICAgIAotICAgIFdyaXRlQmFycmllcjxV
bmtub3duPiogYXNzZXJ0UmVnaXN0ZXJJc0luVGhpc09iamVjdChXcml0ZUJhcnJpZXI8VW5rbm93
bj4qIHJlZ2lzdGVyUG9pbnRlcikKKyAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIGFzc2VydFZh
cmlhYmxlSXNJblRoaXNPYmplY3QoV3JpdGVCYXJyaWVyPFVua25vd24+KiB2YXJpYWJsZVBvaW50
ZXIpCiAgICAgewotI2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICAgICAgZmluZFJlZ2lzdGVySW5k
ZXgocmVnaXN0ZXJQb2ludGVyKTsKLSNlbmRpZgorICAgICAgICBpZiAoIUFTU0VSVF9ESVNBQkxF
RCkKKyAgICAgICAgICAgIGZpbmRSZWdpc3RlckluZGV4KHJlZ2lzdGVyUG9pbnRlcik7CiAgICAg
ICAgIHJldHVybiByZWdpc3RlclBvaW50ZXI7CiAgICAgfQogICAgIAogICAgIC8vIEFkZHMgbnVt
YmVyT2ZSZWdpc3RlcnNUb0FkZCByZWdpc3RlcnMsIGluaXRpYWxpemVzIHRoZW0gdG8gVW5kZWZp
bmVkLCBhbmQgcmV0dXJucwogICAgIC8vIHRoZSBpbmRleCBvZiB0aGUgZmlyc3Qgb25lIGFkZGVk
LgotICAgIEpTX0VYUE9SVF9QUklWQVRFIGludCBhZGRSZWdpc3RlcnMoaW50IG51bWJlck9mUmVn
aXN0ZXJzVG9BZGQpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIFNjb3BlT2Zmc2V0IGFkZFJlZ2lz
dGVycyh1bnNpZ25lZCBudW1iZXJPZlJlZ2lzdGVyc1RvQWRkKTsKICAgICAKICAgICBKU19FWFBP
UlRfUFJJVkFURSBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9y
Jik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVP
YmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5
bWJvbFRhYmxlT2JqZWN0LmgJKHJldmlzaW9uIDE4MDU2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNzgs
NyArNzgsNyBAQCBpbmxpbmUgYm9vbCBzeW1ib2xUYWJsZUdldCgKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIFN5bWJvbFRhYmxlRW50cnk6OkZhc3QgZW50cnkgPSBpdGVyLT52YWx1ZTsKICAg
ICBBU1NFUlQoIWVudHJ5LmlzTnVsbCgpKTsKLSAgICBzbG90LnNldFZhbHVlKG9iamVjdCwgZW50
cnkuZ2V0QXR0cmlidXRlcygpIHwgRG9udERlbGV0ZSwgb2JqZWN0LT5yZWdpc3RlckF0KGVudHJ5
LmdldEluZGV4KCkpLmdldCgpKTsKKyAgICBzbG90LnNldFZhbHVlKG9iamVjdCwgZW50cnkuZ2V0
QXR0cmlidXRlcygpIHwgRG9udERlbGV0ZSwgb2JqZWN0LT52YXJpYWJsZUF0KGVudHJ5LnNjb3Bl
T2Zmc2V0KCkpLmdldCgpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtOTQsNyArOTQsNyBA
QCBpbmxpbmUgYm9vbCBzeW1ib2xUYWJsZUdldCgKICAgICBTeW1ib2xUYWJsZUVudHJ5OjpGYXN0
IGVudHJ5ID0gaXRlci0+dmFsdWU7CiAgICAgQVNTRVJUKCFlbnRyeS5pc051bGwoKSk7CiAgICAg
ZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKAotICAgICAgICBvYmplY3QtPnJlZ2lzdGVyQXQoZW50
cnkuZ2V0SW5kZXgoKSkuZ2V0KCksIGVudHJ5LmdldEF0dHJpYnV0ZXMoKSB8IERvbnREZWxldGUp
OworICAgICAgICBvYmplY3QtPnZhcmlhYmxlQXQoZW50cnkuc2NvcGVPZmZzZXQoKSkuZ2V0KCks
IGVudHJ5LmdldEF0dHJpYnV0ZXMoKSB8IERvbnREZWxldGUpOwogICAgIHJldHVybiB0cnVlOwog
fQogCkBAIC0xMTAsNyArMTEwLDcgQEAgaW5saW5lIGJvb2wgc3ltYm9sVGFibGVHZXQoCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICBTeW1ib2xUYWJsZUVudHJ5OjpGYXN0IGVudHJ5ID0gaXRl
ci0+dmFsdWU7CiAgICAgQVNTRVJUKCFlbnRyeS5pc051bGwoKSk7Ci0gICAgc2xvdC5zZXRWYWx1
ZShvYmplY3QsIGVudHJ5LmdldEF0dHJpYnV0ZXMoKSB8IERvbnREZWxldGUsIG9iamVjdC0+cmVn
aXN0ZXJBdChlbnRyeS5nZXRJbmRleCgpKS5nZXQoKSk7CisgICAgc2xvdC5zZXRWYWx1ZShvYmpl
Y3QsIGVudHJ5LmdldEF0dHJpYnV0ZXMoKSB8IERvbnREZWxldGUsIG9iamVjdC0+dmFyaWFibGVB
dChlbnRyeS5zY29wZU9mZnNldCgpKS5nZXQoKSk7CiAgICAgc2xvdElzV3JpdGVhYmxlID0gIWVu
dHJ5LmlzUmVhZE9ubHkoKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTE0NSw3ICsxNDUsNyBA
QCBpbmxpbmUgYm9vbCBzeW1ib2xUYWJsZVB1dCgKICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzQ2MDEKICAgICAgICAgICAgIHNldC0+bm90
aWZ5V3JpdGUodm0sIHZhbHVlLCBvYmplY3QsIHByb3BlcnR5TmFtZSk7CiAgICAgICAgIH0KLSAg
ICAgICAgcmVnID0gJm9iamVjdC0+cmVnaXN0ZXJBdChmYXN0RW50cnkuZ2V0SW5kZXgoKSk7Cisg
ICAgICAgIHJlZyA9ICZvYmplY3QtPnZhcmlhYmxlQXQoZmFzdEVudHJ5LnNjb3BlT2Zmc2V0KCkp
OwogICAgIH0KICAgICAvLyBJJ2QgcHJlZmVyIHdlIG5vdCBob2xkIGxvY2sgd2hpbGUgZXhlY3V0
aW5nIGJhcnJpZXJzLCBzaW5jZSBJIHByZWZlciB0byByZXNlcnZlCiAgICAgLy8gdGhlIHJpZ2h0
IGZvciBiYXJyaWVycyB0byBiZSBhYmxlIHRvIHRyaWdnZXIgR0MuIEFuZCBJIGRvbid0IHdhbnQg
dG8gaG9sZCBWTQpAQCAtMTczLDcgKzE3Myw3IEBAIGlubGluZSBib29sIHN5bWJvbFRhYmxlUHV0
V2l0aEF0dHJpYnV0ZXMKICAgICAgICAgaWYgKFZhcmlhYmxlV2F0Y2hwb2ludFNldCogc2V0ID0g
ZW50cnkud2F0Y2hwb2ludFNldCgpKQogICAgICAgICAgICAgc2V0LT5ub3RpZnlXcml0ZSh2bSwg
dmFsdWUsIG9iamVjdCwgcHJvcGVydHlOYW1lKTsKICAgICAgICAgZW50cnkuc2V0QXR0cmlidXRl
cyhhdHRyaWJ1dGVzKTsKLSAgICAgICAgcmVnID0gJm9iamVjdC0+cmVnaXN0ZXJBdChlbnRyeS5n
ZXRJbmRleCgpKTsKKyAgICAgICAgcmVnID0gJm9iamVjdC0+dmFyaWFibGVBdChlbnRyeS5zY29w
ZU9mZnNldCgpKTsKICAgICB9CiAgICAgcmVnLT5zZXQodm0sIG9iamVjdCwgdmFsdWUpOwogICAg
IHJldHVybiB0cnVlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlLmgJ
KHJldmlzaW9uIDE4MDU2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlw
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01OCw3ICs1OCw4IEBAIGVudW0gSlNUeXBlIDogdWludDhf
dCB7CiAgICAgUHVyZUZvcndhcmRpbmdQcm94eVR5cGUsCiAgICAgSW1wdXJlUHJveHlUeXBlLAog
ICAgIFdpdGhTY29wZVR5cGUsCi0gICAgQXJndW1lbnRzVHlwZSwKKyAgICBEaXJlY3RBcmd1bWVu
dHNUeXBlLAorICAgIFNjb3BlZEFyZ3VtZW50c1R5cGUsCiAKICAgICBJbnQ4QXJyYXlUeXBlLAog
ICAgIEludDE2QXJyYXlUeXBlLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
T3V0T2ZCYW5kQXJndW1lbnRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9PdXRPZkJhbmRBcmd1bWVudHMuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3V0T2ZCYW5kQXJndW1lbnRzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDEyNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiT3V0T2ZCYW5kQXJn
dW1lbnRzLmgiCisKKyNpbmNsdWRlICJKU0FyZ3VtZW50c0l0ZXJhdG9yLmgiCisjaW5jbHVkZSAi
SlNDSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsKKworU1RBVElDX0FTU0VSVF9JU19UUklW
SUFMTFlfREVTVFJVQ1RJQkxFKE91dE9mQmFuZEFyZ3VtZW50cyk7CisKK2NvbnN0IENsYXNzSW5m
byBPdXRPZkJhbmRBcmd1bWVudHM6OnNfaW5mbyA9IHsgIkFyZ3VtZW50cyIsICZCYXNlOjpzX2lu
Zm8sIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoT3V0T2ZCYW5kQXJndW1lbnRzKSB9OworCitPdXRP
ZkJhbmRBcmd1bWVudHM6Ok91dE9mQmFuZEFyZ3VtZW50cyhWTSYgdm0sIFN0cnVjdHVyZSogc3Ry
dWN0dXJlKQorICAgIDogQmFzZSh2bSwgc3RydWN0dXJlLCBudWxscHRyKQoreworfQorCitPdXRP
ZkJhbmRBcmd1bWVudHMqIE91dE9mQmFuZEFyZ3VtZW50czo6Y3JlYXRlRW1wdHkoVk0mIHZtLCBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQoreworICAgIE91dE9mQmFuZEFyZ3VtZW50cyog
cmVzdWx0ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8T3V0T2ZCYW5kQXJndW1lbnRzPih2
bS5oZWFwKSkKKyAgICAgICAgT3V0T2ZCYW5kQXJndW1lbnRzKHZtLCBnbG9iYWxPYmplY3QtPm91
dE9mQmFuZEFyZ3VtZW50c1N0cnVjdHVyZSgpKTsKKyAgICByZXN1bHQtPmZpbmlzaENyZWF0aW9u
KHZtKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitPdXRPZkJhbmRBcmd1bWVudHMqIE91dE9m
QmFuZEFyZ3VtZW50czo6Y3JlYXRlRW1wdHkoRXhlY1N0YXRlKiBleGVjKQoreworICAgIC8vIE5C
LiBTb21lIGNsaWVudHMgbWlnaHQgZXhwZWN0IHRoYXQgdGhlIGdsb2JhbCBvYmplY3Qgb2Ygb2Yg
dGhpcyBvYmplY3QgaXMgdGhlIGdsb2JhbCBvYmplY3QKKyAgICAvLyBvZiB0aGUgY2FsbGVlLiBX
ZSBkb24ndCBkbyB0aGlzIGZvciBub3csIGJ1dCBtYXliZSB3ZSBzaG91bGQuCisgICAgcmV0dXJu
IGNyZWF0ZUVtcHR5KGV4ZWMtPnZtKCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSk7Cit9
CisKK091dE9mQmFuZEFyZ3VtZW50cyogT3V0T2ZCYW5kQXJndW1lbnRzOjpjcmVhdGVXaXRoSW5s
aW5lRnJhbWUoRXhlY1N0YXRlKiBteUZyYW1lLCBFeGVjU3RhdGUqIHRhcmdldEZyYW1lLCBJbmxp
bmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSwgQXJndW1lbnRzTW9kZSBtb2RlKQoreworICAg
IFZNJiB2bSA9IG15RnJhbWUtPnZtKCk7CisgICAgCisgICAgSlNGdW5jdGlvbiogY2FsbGVlOwor
ICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZTsKKyAgICAKKyAgICBpZiAoaW5saW5l
Q2FsbEZyYW1lKSB7CisgICAgICAgIGNhbGxlZSA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4oaW5saW5l
Q2FsbEZyYW1lLT5jYWxsZWVSZWNvdmVyeS5yZWNvdmVyKHRhcmdldEZyYW1lKSk7CisgICAgICAg
IGV4ZWN1dGFibGUgPSBqc0Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oaW5saW5lQ2FsbEZyYW1l
LT5leGVjdXRhYmxlLmdldCgpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBjYWxsZWUgPSBqc0Nh
c3Q8SlNGdW5jdGlvbio+KHRhcmdldEZyYW1lLT5jYWxsZWUoKSk7CisgICAgICAgIGV4ZWN1dGFi
bGUgPSBqc0Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4odGFyZ2V0RnJhbWUtPmNvZGVCbG9jaygp
LT5vd25lckV4ZWN1dGFibGUoKSk7CisgICAgfQorICAgIAorICAgIC8vIE5CLiBJdCdzIHNvbWV3
aGF0IGFyYml0cmFyeSB0aGF0IHdlIHRpZSB0aGUgc3RyaWN0bmVzcyBvZiB0aGlzIG9iamVjdCB0
byB0aGUgc3RyaWN0bmVzcyBvZgorICAgIC8vIHRoZSBjYWxsZWUuCisgICAgYm9vbCBpc1N0cmlj
dE1vZGUgPSBleGVjdXRhYmxlLT5pc1N0cmljdE1vZGUoKTsKKworICAgIE91dE9mQmFuZEFyZ3Vt
ZW50cyogcmVzdWx0ID0gY3JlYXRlRW1wdHkobXlGcmFtZSk7CisgICAgCisgICAgdW5zaWduZWQg
bGVuZ3RoOworICAgIHN3aXRjaCAobW9kZSkgeworICAgIGNhc2UgQ2xvbmVkQXJndW1lbnRzQ3Jl
YXRpb25Nb2RlOiB7CisgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUpIHsKKyAgICAgICAgICAg
IGlmIChpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRSZWdpc3Rlci5pc1ZhbGlkKCkpCisg
ICAgICAgICAgICAgICAgbGVuZ3RoID0gZXhlYy0+cihpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50
Q291bnRSZWdpc3RlcikudW5ib3hlZEludDMyKCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgbGVuZ3RoID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpOworICAg
ICAgICAgICAgbGVuZ3RoLS07CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IGxlbmd0aDsgaS0tOykKKyAgICAgICAgICAgICAgICByZXN1bHQtPnB1dERpcmVjdElu
ZGV4KG15RnJhbWUsIGksIGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzW2ldLnJlY292ZXIodGFy
Z2V0RnJhbWUpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGxlbmd0aCA9IHRhcmdl
dEZyYW1lLT5hcmd1bWVudENvdW50KCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IGxlbmd0aDsgaS0tOykKKyAgICAgICAgICAgICAgICByZXN1bHQtPnB1dERp
cmVjdEluZGV4KG15RnJhbWUsIGksIHRhcmdldEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudChpKSk7
CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAKKyAgICBjYXNlIEZh
a2VBcmd1bWVudFZhbHVlc0NyZWF0aW9uTW9kZTogeworICAgICAgICBsZW5ndGggPSAwOworICAg
ICAgICBicmVhazsKKyAgICB9IH0KKyAgICAKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgdm0u
cHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcihsZW5ndGgpKTsKKyAgICBpZiAoaXNTdHJp
Y3RNb2RlKSB7CisgICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0QWNjZXNzb3IoZXhlYywgdm0ucHJv
cGVydHlOYW1lcy0+Y2FsbGVlLCB0aGlzT2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+dGhyb3dUeXBl
RXJyb3JHZXR0ZXJTZXR0ZXIoZXhlYy0+dm0oKSksIERvbnREZWxldGUgfCBEb250RW51bSB8IEFj
Y2Vzc29yKTsKKyAgICAgICAgcmVzdWx0LT5wdXREaXJlY3RBY2Nlc3NvcihleGVjLCB2bS5wcm9w
ZXJ0eU5hbWVzLT5jYWxsZWUsIHRoaXNPYmplY3QtPmdsb2JhbE9iamVjdCgpLT50aHJvd1R5cGVF
cnJvckdldHRlclNldHRlcihleGVjLT52bSgpKSwgRG9udERlbGV0ZSB8IERvbnRFbnVtIHwgQWNj
ZXNzb3IpOworICAgIH0gZWxzZQorICAgICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgdm0ucHJv
cGVydHlOYW1lcy0+Y2FsbGVlLCBKU1ZhbHVlKGNhbGxlZSkpOworICAgIAorICAgIHJlc3VsdC0+
SlNDX05BVElWRV9GVU5DVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5pdGVyYXRvclByaXZhdGVOYW1l
LCBhcmd1bWVudHNGdW5jSXRlcmF0b3IsIERvbnRFbnVtLCAwKTsKK30KKworT3V0T2ZCYW5kQXJn
dW1lbnRzKiBPdXRPZkJhbmRBcmd1bWVudHM6OmNyZWF0ZVdpdGhNYWNoaW5lRnJhbWUoRXhlY1N0
YXRlKiBteUZyYW1lLCBFeGVjU3RhdGUqIHRhcmdldEZyYW1lLCBBcmd1bWVudHNNb2RlIG1vZGUp
Cit7CisgICAgcmV0dXJuIGNyZWF0ZVdpdGhJbmxpbmVGcmFtZShteUZyYW1lLCB0YXJnZXRGcmFt
ZSwgbnVsbHB0ciwgbW9kZSk7Cit9CisKK1N0cnVjdHVyZSogT3V0T2ZCYW5kQXJndW1lbnRzOjpj
cmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1Zh
bHVlIHByb3RvdHlwZSkKK3sKKyAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2Jh
bE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyks
IGluZm8oKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9PdXRPZkJhbmRBcmd1bWVudHMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PdXRPZkJhbmRBcmd1bWVudHMuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL091dE9mQmFuZEFyZ3VtZW50cy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBPdXRPZkJhbmRBcmd1bWVudHNfaAorI2Rl
ZmluZSBPdXRPZkJhbmRBcmd1bWVudHNfaAorCisjaW5jbHVkZSAiQXJndW1lbnRzTW9kZS5oIgor
I2luY2x1ZGUgIkpTT2JqZWN0LmgiCisKK25hbWVzcGFjZSBKU0MgeworCisvLyBUaGlzIGlzIGFu
IEFyZ3VtZW50cy1jbGFzcyBvYmplY3QgdGhhdCB3ZSBjcmVhdGUgd2hlbiB5b3UgZG8gZnVuY3Rp
b24uYXJndW1lbnRzLiBJdCBiZWhhdmVzCisvLyBlbnRpcmVseSBsaWtlIGFuIG9yZGluYXJ5IEph
dmFTY3JpcHQgb2JqZWN0LiBBbGwgb2YgdGhlIGFyZ3VtZW50cyB2YWx1ZXMgYXJlIHNpbXBseSBj
b3BpZWQgZnJvbQorLy8gdGhlIHN0YWNrIChwb3NzaWJseSB2aWEgc29tZSBzb3BoaXN0aWNhdGVk
IFZhbHVlUmVjb3ZlcnkncyBpZiBhbiBvcHRpbWl6aW5nIGNvbXBpbGVyIGlzIGluCisvLyBwbGF5
KSBhbmQgdGhlIGFwcHJvcHJpYXRlIHByb3BlcnRpZXMgb2YgdGhlIG9iamVjdCBhcmUgcG9wdWxh
dGVkLiBUaGUgb25seSByZWFzb24gd2h5IHdlIG5lZWQKKy8vIGEgc3BlY2lhbCBjbGFzcyBpcyB0
byBtYWtlIHRoZSBvYmplY3QgY2xhaW0gdG8gYmUgIkFyZ3VtZW50cyIgZnJvbSBhIHRvU3RyaW5n
IHN0YW5kcG9pbnQuCisvLworLy8gTm90ZSB0aGF0IHRoaXMgY2xhc3MgZG9lcyBhIGJhZCBqb2Ig
b2YgYmVpbmcgZmFzdC4gVGhhdCdzIHNvbWV3aGF0IGludGVudGlvbmFsLiBXZSBleHBlY3QgdXNl
cworLy8gb2YgZnVuY3Rpb24uYXJndW1lbnRzIHRvIGJlIHJhcmUgb24gdGhlIG1vZGVybiB3ZWIu
IFlvdSB3aWxsIGdldCBwYXJ0aWN1bGFybHkgYmFkIHBlcmZvcm1hbmNlCisvLyBpZiB5b3UgdXNl
IGZ1bmN0aW9uLmFyZ3VtZW50cyBpbiBzdHJpY3QgbW9kZS4KK2NsYXNzIE91dE9mQmFuZEFyZ3Vt
ZW50cyA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpT
Tm9uRmluYWxPYmplY3QgQmFzZTsKKyAgICAKK3ByaXZhdGU6CisgICAgT3V0T2ZCYW5kQXJndW1l
bnRzKFZNJiwgU3RydWN0dXJlKik7CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgT3V0T2ZCYW5kQXJn
dW1lbnRzKiBjcmVhdGVFbXB0eShWTSYsIEpTR2xvYmFsT2JqZWN0Kik7CisgICAgc3RhdGljIE91
dE9mQmFuZEFyZ3VtZW50cyogY3JlYXRlRW1wdHkoRXhlY1N0YXRlKik7CisgICAgc3RhdGljIE91
dE9mQmFuZEFyZ3VtZW50cyogY3JlYXRlV2l0aElubGluZUZyYW1lKEV4ZWNTdGF0ZSogbXlGcmFt
ZSwgRXhlY1N0YXRlKiB0YXJnZXRGcmFtZSwgSW5saW5lQ2FsbEZyYW1lKiwgQXJndW1lbnRzTW9k
ZSk7CisgICAgc3RhdGljIE91dE9mQmFuZEFyZ3VtZW50cyogY3JlYXRlV2l0aE1hY2hpbmVGcmFt
ZShFeGVjU3RhdGUqIG15RnJhbWUsIEV4ZWNTdGF0ZSogdGFyZ2V0RnJhbWUsIEFyZ3VtZW50c01v
ZGUpOworICAgIAorICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpT
R2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUpOworICAgIAorICAgIERFQ0xBUkVfSU5G
TzsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gT3V0T2ZCYW5kQXJndW1l
bnRzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVPZmZzZXQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlT2Zm
c2V0LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Nj
b3BlT2Zmc2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQyIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJTY29wZU9mZnNldC5oIgorCituYW1lc3BhY2UgSlNDIHsKKwordm9pZCBTY29w
ZU9mZnNldDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIGlmICghKnRoaXMp
IHsKKyAgICAgICAgb3V0LnByaW50KCJzY29wZUludmFsaWQiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICAKKyAgICBvdXQucHJpbnQoInNjb3BlIiwgb2Zmc2V0KCkpOworfQorCit9IC8v
IG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2Nv
cGVPZmZzZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
Y29wZU9mZnNldC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU2NvcGVPZmZzZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUxIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgU2NvcGVPZmZz
ZXRfaAorI2RlZmluZSBTY29wZU9mZnNldF9oCisKKyNpbmNsdWRlICJHZW5lcmljT2Zmc2V0Lmgi
CisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBKU0MgeworCisvLyBU
aGlzIGlzIGFuIG9mZnNldCBpbnRvIGEgc2NvcGUgb2Ygc29tZSBraW5kLiBJdCBjb3VsZCBiZSBh
biBhY3RpdmF0aW9uIHNjb3BlIG9yIGl0IGNvdWxkIGJlIGEKKy8vIGdsb2JhbCBvYmplY3QuCitj
bGFzcyBTY29wZU9mZnNldCA6IHB1YmxpYyBHZW5lcmljT2Zmc2V0PFNjb3BlT2Zmc2V0PiB7Citw
dWJsaWM6CisgICAgU2NvcGVPZmZzZXQoKSB7IH0KKyAgICAKKyAgICBleHBsaWNpdCBTY29wZU9m
ZnNldCh1bnNpZ25lZCBvZmZzZXQpCisgICAgICAgIDogR2VuZXJpY09mZnNldChvZmZzZXQpCisg
ICAgeworICAgIH0KKyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKK307
CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gU2NvcGVPZmZzZXRfaAorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50cy5j
cHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRB
cmd1bWVudHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTA1IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJTY29wZWRBcmd1bWVudHMuaCIKKworI2luY2x1ZGUgIkdlbmVyaWNBcmd1bWVu
dHNJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNBcmd1bWVudHNJdGVyYXRvci5oIgorI2luY2x1ZGUg
IkpTQ0lubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK1NUQVRJQ19BU1NFUlRfSVNfVFJJ
VklBTExZX0RFU1RSVUNUSUJMRShTY29wZWRBcmd1bWVudHMpOworCitjb25zdCBDbGFzc0luZm8g
U2NvcGVkQXJndW1lbnRzOjpzX2luZm8gPSB7ICJBcmd1bWVudHMiLCAmQmFzZTo6c19pbmZvLCAw
LCBDUkVBVEVfTUVUSE9EX1RBQkxFKFNjb3BlZEFyZ3VtZW50cykgfTsKKworU2NvcGVkQXJndW1l
bnRzOjpTY29wZWRBcmd1bWVudHMoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICA6
IEdlbmVyaWNBcmd1bWVudHModm0sIHN0cnVjdHVyZSkKKyAgICAsIG1fb3ZlcnJvZGVUaGluZ3Mo
ZmFsc2UpCit7Cit9CisKK3ZvaWQgU2NvcGVkQXJndW1lbnRzOjpmaW5pc2hDcmVhdGlvbihWTSYg
dm0sIEpTRnVuY3Rpb24qIGNhbGxlZSwgU2NvcGVkQXJndW1lbnRzVGFibGUqIHRhYmxlLCBKU0xl
eGljYWxFbnZpcm9ubWVudCogc2NvcGUpCit7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0p
OworICAgIG1fY2FsbGVlLnNldCh2bSwgdGhpcywgY2FsbGVlKTsKKyAgICBtX3RhYmxlLnNldCh2
bSwgdGhpcywgdGFibGUpOworICAgIG1fc2NvcGUuc2V0KHZtLCB0aGlzLCBzY29wZSk7Cit9CisK
K1Njb3BlZEFyZ3VtZW50cyogU2NvcGVkQXJndW1lbnRzOjpjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgSlNGdW5jdGlvbiogY2FsbGVlLCBTY29wZWRBcmd1bWVudHNUYWJsZSog
dGFibGUsIEpTTGV4aWNhbEVudmlyb25tZW50KiBzY29wZSkKK3sKKyAgICBTY29wZWRBcmd1bWVu
dHMqIHJlc3VsdCA9CisgICAgICAgIG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFNjb3BlZEFy
Z3VtZW50cz4odm0uaGVhcCkpCisgICAgICAgICh2bSwgc3RydWN0dXJlKTsKKyAgICByZXN1bHQt
PmZpbmlzaENyZWF0aW9uKHZtLCBjYWxsZWUsIHRhYmxlLCBzY29wZSk7CisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKwordm9pZCBTY29wZWRBcmd1bWVudHM6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBj
ZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBTY29wZWRBcmd1bWVudHMqIHRoaXNP
YmplY3QgPSBzdGF0aWNfY2FzdDxTY29wZWRBcmd1bWVudHMqPihjZWxsKTsKKyAgICBBU1NFUlRf
R0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CisgICAgQmFzZTo6dmlzaXRD
aGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKKworICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlz
T2JqZWN0LT5tX2NhbGxlZSk7CisgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fdGFi
bGUpOworICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX3Njb3BlKTsKK30KKworU3Ry
dWN0dXJlKiBTY29wZWRBcmd1bWVudHM6OmNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQoreworICAgIHJldHVybiBT
dHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKFNj
b3BlZEFyZ3VtZW50c1R5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKK30KKwordm9pZCBT
Y29wZWRBcmd1bWVudHM6OnNsb3dEb3duQW5kV2FzdGVNZW1vcnkoVk0mIHZtKQoreworICAgIFJF
TEVBU0VfQVNTRVJUKCFtX292ZXJyb2RlVGhpbmdzKTsKKyAgICAKKyAgICBwdXREaXJlY3Qodm0s
IHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIobV90YWJsZS0+bGVuZ3RoKCkpLCBE
b250RW51bSk7CisgICAgCisgICAgaWYgKGlzU3RyaWN0TW9kZSgpKSB7CisgICAgICAgIHB1dERp
cmVjdE5vbkluZGV4QWNjZXNzb3Iodm0sIHZtLnByb3BlcnR5TmFtZXMtPmNhbGxlZSwgZ2xvYmFs
T2JqZWN0KCktPnRocm93VHlwZUVycm9yR2V0dGVyU2V0dGVyKHZtKSwgRG9udEVudW0gfCBEb250
RGVsZXRlIHwgQWNjZXNzb3IpOworICAgICAgICBwdXREaXJlY3ROb25JbmRleEFjY2Vzc29yKHZt
LCB2bS5wcm9wZXJ0eU5hbWVzLT5jYWxsZXIsIGdsb2JhbE9iamVjdCgpLT50aHJvd1R5cGVFcnJv
ckdldHRlclNldHRlcih2bSksIERvbnRFbnVtIHwgRG9udERlbGV0ZSB8IEFjY2Vzc29yKTsKKyAg
ICB9IGVsc2UKKyAgICAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5jYWxsZWUs
IG1fY2FsbGVlLmdldCgpLCBEb250RW51bSk7CisgICAgCisgICAgbV9vdmVycm9kZVRoaW5ncyA9
IHRydWU7Cit9CisKK3ZvaWQgU2NvcGVkQXJndW1lbnRzOjpzbG93RG93bkFuZFdhc3RlTWVtb3J5
SWZOZWNlc3NhcnkoVk0mIHZtKQoreworICAgIGlmICghbV9vdmVycm9kZVRoaW5ncykKKyAgICAg
ICAgc2xvd0Rvd25BbmRXYXN0ZU1lbW9yeSh2bSk7Cit9CisKK3ZvaWQgU2NvcGVkQXJndW1lbnRz
OjpvdmVycmlkZUFyZ3VtZW50KFZNJiB2bSwgdWludDMyX3QgaSkKK3sKKyAgICBtX3RhYmxlLnNl
dCh2bSwgdGhpcywgbV90YWJsZS0+c2V0KHZtLCBpLCBTY29wZU9mZnNldCgpKSk7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
Y29wZWRBcmd1bWVudHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TY29wZWRBcmd1bWVudHMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MTIxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgU2NvcGVkQXJndW1lbnRzX2gKKyNkZWZpbmUgU2NvcGVkQXJndW1lbnRzX2gKKworI2lu
Y2x1ZGUgIkdlbmVyaWNBcmd1bWVudHMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKKy8vIFRoaXMg
aXMgYW4gQXJndW1lbnRzLWNsYXNzIG9iamVjdCB0aGF0IHdlIGNyZWF0ZSB3aGVuIHlvdSBzYXkg
ImFyZ3VtZW50cyIgaW5zaWRlIGEgZnVuY3Rpb24sCisvLyBhbmQgb25lIG9yIG1vcmUgb2YgdGhl
IGFyZ3VtZW50cyBtYXkgYmUgY2FwdHVyZWQgaW4gdGhlIGZ1bmN0aW9uJ3MgYWN0aXZhdGlvbi4g
VGhlIGZ1bmN0aW9uCisvLyB3aWxsIGNvcHkgYWxsIG9mIGl0cyBhcmd1bWVudHMgaW50byB0aGUg
YWN0aXZhdGlvbiBhbmQgdGhlbiBjcmVhdGUgdGhpcyBvYmplY3QuIFRoaXMgb2JqZWN0CisvLyB3
aWxsIHVzZSB0aGUgc3ltYm9sIHRhYmxlJ3MgU2NvcGVkQXJndW1lbnRzVGFibGUgYW5kIHRoZSBh
Y3RpdmF0aW9uIHRvIGhhbmRsZSBhbGwgaW5kZXhlZAorLy8gbG9va3Vwcy4KK2NsYXNzIFNjb3Bl
ZEFyZ3VtZW50cyA6IHB1YmxpYyBHZW5lcmljQXJndW1lbnRzPFNjb3BlZEFyZ3VtZW50cz4gewor
cHJpdmF0ZToKKyAgICBTY29wZWRBcmd1bWVudHMoVk0mLCBTdHJ1Y3R1cmUqKTsKKyAgICB2b2lk
IGZpbmlzaENyZWF0aW9uKFZNJiwgSlNGdW5jdGlvbiogY2FsbGVlLCBTY29wZWRBcmd1bWVudHNU
YWJsZSosIEpTTGV4aWNhbEVudmlyb25tZW50Kik7CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgU2Nv
cGVkQXJndW1lbnRzKiBjcmVhdGUoVk0mLCBTdHJ1Y3R1cmUqLCBKU0Z1bmN0aW9uKiBjYWxsZWUs
IFNjb3BlZEFyZ3VtZW50c1RhYmxlKiwgSlNMZXhpY2FsRW52aXJvbm1lbnQqKTsKKyAgICAKKyAg
ICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAg
CisgICAgdWludDMyX3QgaW50ZXJuYWxMZW5ndGgoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIG1fdGFibGUtPmxlbmd0aCgpOworICAgIH0KKyAgICAKKyAgICB1aW50MzJfdCBsZW5ndGgo
RXhlY1N0YXRlKiBleGVjKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKFVOTElLRUxZKG1fb3Zl
cnJvZGVMZW5ndGgpKQorICAgICAgICAgICAgcmV0dXJuIGdldChleGVjLCBleGVjLT5wcm9wZXJ0
eU5hbWVzKCkubGVuZ3RoKS50b1VJbnQzMihleGVjKTsKKyAgICAgICAgcmV0dXJuIGludGVybmFs
TGVuZ3RoKCk7CisgICAgfQorICAgIAorICAgIGJvb2wgY2FuQWNjZXNzSW5kZXhRdWlja2x5KHVp
bnQzMl90IGkpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaSA8IG1fbGVuZ3RoICYmICEh
bV90YWJsZS0+Z2V0KGkpOworICAgIH0KKyAgICAKKyAgICBKU1ZhbHVlIGdldEluZGV4UXVpY2ts
eSh1aW50MzJfdCBpKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlf
SU1QTElDQVRJT04oY2FuQWNjZXNzSW5kZXhRdWlja2x5KGkpKTsKKyAgICAgICAgcmV0dXJuIG1f
c2NvcGUtPnZhcmlhYmxlQXQobV90YWJsZS0+Z2V0KGkpKS5nZXQoKTsKKyAgICB9CisKKyAgICB2
b2lkIHNldEluZGV4UXVpY2tseShWTSYgdm0sIHVpbnQzMl90IGksIEpTVmFsdWUgdmFsdWUpCisg
ICAgeworICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihjYW5BY2Nlc3NJ
bmRleFF1aWNrbHkoaSkpOworICAgICAgICByZXR1cm4gbV9zY29wZS0+dmFyaWFibGVBdChtX3Rh
YmxlLT5nZXQoaSkpLmdldCgpOworICAgIH0KKworICAgIFdyaXRlQmFycmllcjxKU0Z1bmN0aW9u
PiYgY2FsbGVlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX2NhbGxlZTsKKyAgICB9CisgICAg
CisgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiBhcmd1bWVudChDYXB0dXJlZEFyZ3VtZW50c09m
ZnNldCBvZmZzZXQpCisgICAgeworICAgICAgICBBU1NFUlQob2Zmc2V0KTsKKyAgICAgICAgQVNT
RVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04ob2Zmc2V0Lm9mZnNldCgpIDwgbV9sZW5ndGgp
OworICAgICAgICByZXR1cm4gc3RvcmFnZSgpW29mZnNldC5vZmZzZXQoKV07CisgICAgfQorICAg
IAorICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSgpCisgICAgeworICAgICAgICBy
ZXR1cm4ganNDYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGNhbGxlZS0+ZXhlY3V0YWJsZSgpKTsK
KyAgICB9CisgICAgCisgICAgYm9vbCBpc1N0cmljdE1vZGUoKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGV4ZWN1dGFibGUoKS0+aXNTdHJpY3RNb2RlKCk7CisgICAgfQorCisgICAgYm9vbCBvdmVy
cm9kZVRoaW5ncygpIGNvbnN0IHsgcmV0dXJuIG1fb3ZlcnJvZGVUaGluZ3M7IH0KKyAgICB2b2lk
IHNsb3dEb3duQW5kV2FzdGVNZW1vcnkoVk0mKTsKKyAgICB2b2lkIHNsb3dEb3duQW5kV2FzdGVN
ZW1vcnlJZk5lY2Vzc2FyeShWTSYpOworICAgIHZvaWQgb3ZlcnJpZGVBcmd1bWVudChWTSYgdm0s
IHVpbnQzMl90IGkpOworICAgIAorICAgIERFQ0xBUkVfSU5GTzsKKyAgICAKKyAgICBzdGF0aWMg
U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUg
cHJvdG90eXBlKTsKKyAgICAKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mVGFibGUoKSB7
IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoU2NvcGVkQXJndW1lbnRzLCBtX3RhYmxlKTsgfQorICAg
IHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZTY29wZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRP
RihTY29wZWRBcmd1bWVudHMsIG1fc2NvcGUpOyB9CisKK3ByaXZhdGU6CisgICAgYm9vbCBtX292
ZXJyb2RlVGhpbmdzOyAvLyBUcnVlIGlmIGxlbmd0aCwgY2FsbGVlLCBhbmQgY2FsbGVyIGFyZSBm
dWxseSBtYXRlcmlhbGl6ZWQgaW4gdGhlIG9iamVjdC4KKyAgICBXcml0ZUJhcnJpZXI8SlNGdW5j
dGlvbio+IG1fY2FsbGVlOworICAgIFdyaXRlQmFycmllcjxTY29wZWRBcmd1bWVudHNUYWJsZT4g
bV90YWJsZTsKKyAgICBXcml0ZUJhcnJpZXI8SlNMZXhpY2FsRW52aXJvbm1lbnQ+IG1fc2NvcGU7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIFNjb3BlZEFyZ3VtZW50c19o
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50c1Rh
YmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVk
QXJndW1lbnRzVGFibGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1Njb3BlZEFyZ3VtZW50c1RhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5
NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIFNjb3BlZEFyZ3VtZW50c1RhYmxlX2gKKyNkZWZpbmUgU2NvcGVkQXJndW1lbnRzVGFibGVf
aAorCisjaW5jbHVkZSAiSlNDZWxsLmgiCisKK25hbWVzcGFjZSBKU0MgeworCisvLyBUaGlzIGNs
YXNzJ3Mgb25seSBqb2IgaXMgdG8gaG9sZCBvbnRvIHRoZSBsaXN0IG9mIFNjb3BlT2Zmc2V0cyBm
b3IgZWFjaCBhcmd1bWVudCB0aGF0IGEKKy8vIGZ1bmN0aW9uIGhhcy4gTW9zdCBvZiB0aGUgdGlt
ZSwgdGhlIEJ5dGVjb2RlR2VuZXJhdG9yIHdpbGwgY3JlYXRlIG9uZSBvZiB0aGVzZSBhbmQgaXQg
d2lsbAorLy8gbmV2ZXIgYmUgbW9kaWZpZWQgc3Vic2VxdWVudGx5LiBUaGVyZSBpcyBhIHJhcmUg
Y2FzZSB3aGVyZSBhIFNjb3BlZEFyZ3VtZW50cyBvYmplY3QgaXMgY3JlYXRlZAorLy8gYW5kIGFs
aWFzZXMgb25lIG9mIHRoZXNlIGFuZCB0aGVuIGRlY2lkZXMgdG8gbW9kaWZ5IGl0OyBpbiB0aGF0
IGNhc2Ugd2UgZG8gY29weS1vbi13cml0ZS4gVGhpcworLy8gbWFrZXMgc2Vuc2UgYmVjYXVzZSBz
dWNoIG1vZGlmaWNhdGlvbnMgYXJlIHNvIHVuY29tbW9uLiBZb3UnZCBoYXZlIHRvIGRvIHNvbWV0
aGluZyBjcmF6eSBsaWtlCisvLyAiZGVsZXRlIGFyZ3VtZW50c1tpXSIgb3Igc29tZSB2YXJpYW50
IG9mIGRlZmluZU93blByb3BlcnR5LgorY2xhc3MgU2NvcGVkQXJndW1lbnRzIDogcHVibGljIEpT
Q2VsbCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBKU0NlbGwgQmFzZTsKKyAgICAKKyAgICBzdGF0
aWMgY29uc3QgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBoYXNJbW1vcnRhbFN0cnVjdHVyZSA9IHRydWU7CisKK3ByaXZhdGU6CisgICAgU2NvcGVk
QXJndW1lbnRzVGFibGUoVk0mKTsKKyAgICB+U2NvcGVkQXJndW1lbnRzVGFibGUoKTsKKworcHVi
bGljOgorICAgIHN0YXRpYyBTY29wZWRBcmd1bWVudHNUYWJsZSogY3JlYXRlKFZNJik7CisgICAg
CisgICAgU2NvcGVkQXJndW1lbnRzKiBjbG9uZShWTSYpOworICAgIAorICAgIHVpbnQzMl90IGxl
bmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbGVuZ3RoOyB9CisgICAgU2NvcGVkQXJndW1lbnRzVGFi
bGUqIHNldExlbmd0aChWTSYsIHVpbnQzMl90IG5ld0xlbmd0aCk7CisgICAgCisgICAgU2NvcGVP
ZmZzZXQgZ2V0KHVpbnQzMl90IGkpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlRfV0lUSF9T
RUNVUklUWV9JTVBMSUNBVElPTihpIDwgbV9sZW5ndGgpOworICAgICAgICByZXR1cm4gbV9hcmd1
bWVudHNbaV07CisgICAgfQorICAgIAorICAgIHZvaWQgbG9jaygpCisgICAgeworICAgICAgICBt
X2xvY2tlZCA9IHRydWU7CisgICAgfQorICAgIAorICAgIFNjb3BlZEFyZ3VtZW50cyogc2V0KFZN
JiB2bSwgdWludDMyX3QgaSwgU2NvcGVPZmZzZXQgdmFsdWUpCisgICAgeworICAgICAgICBTY29w
ZWRBcmd1bWVudHMqIHJlc3VsdDsKKyAgICAgICAgaWYgKFVOTElLRUxZKG1fbG9ja2VkKSkKKyAg
ICAgICAgICAgIHJlc3VsdCA9IGNsb25lKHZtKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
cmVzdWx0ID0gdGhpczsKKyAgICAgICAgcmVzdWx0LT5zZXREaXJlY3QoaSwgdmFsdWUpOworICAg
ICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBERUNMQVJFX0lORk87CisgICAg
CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkxlbmd0aCgpIHsgcmV0dXJuIE9CSkVDVF9P
RkZTRVRPRihTY29wZWRBcmd1bWVudHMsIG1fbGVuZ3RoKTsgfQorICAgIHN0YXRpYyBwdHJkaWZm
X3Qgb2Zmc2V0T2ZBcmd1bWVudHMoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoU2NvcGVkQXJn
dW1lbnRzLCBtX2FyZ3VtZW50cyk7IH0KKworcHJpdmF0ZToKKyAgICB1aW50MzJfdCBtX2xlbmd0
aDsKKyAgICBib29sIG1fbG9ja2VkOyAvLyBCZWluZyBsb2NrZWQgbWVhbnMgdGhhdCB0aGVyZSBh
cmUgbXVsdGlwbGUgcmVmZXJlbmNlcyB0byB0aGlzIG9iamVjdCBhbmQgbm9uZSBvZiB0aGVtIGV4
cGVjdCB0byBzZWUgdGhlIG90aGVycycgbW9kaWZpY2F0aW9ucy4gVGhpcyBtZWFucyB0aGF0IG1v
ZGlmaWNhdGlvbnMgbmVlZCB0byBtYWtlIGEgY29weSBmaXJzdC4KKyAgICBzdGQ6OnVuaXF1ZV9w
dHI8U2NvcGVPZmZzZXRbXT4gbV9hcmd1bWVudHM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MK
KworI2VuZGlmIC8vIFNjb3BlZEFyZ3VtZW50c1RhYmxlX2gKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmNwcAkocmV2aXNpb24gMTgwNTY1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxNCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIw
MTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0xMzcsMjkgKzEzNywyMiBAQCB2b2lkIFN5bWJvbFRhYmxlOjpX
YXRjaHBvaW50Q2xlYW51cDo6ZmluCiAgICAgfQogfQogCi1TeW1ib2xUYWJsZSogU3ltYm9sVGFi
bGU6OmNsb25lQ2FwdHVyZWROYW1lcyhWTSYgdm0pCitTeW1ib2xUYWJsZSogU3ltYm9sVGFibGU6
OmNsb25lU2NvcGVQYXJ0KFZNJiB2bSkKIHsKICAgICBTeW1ib2xUYWJsZSogcmVzdWx0ID0gU3lt
Ym9sVGFibGU6OmNyZWF0ZSh2bSk7CiAgICAgCi0gICAgcmVzdWx0LT5tX3BhcmFtZXRlckNvdW50
SW5jbHVkaW5nVGhpcyA9IG1fcGFyYW1ldGVyQ291bnRJbmNsdWRpbmdUaGlzOwogICAgIHJlc3Vs
dC0+bV91c2VzTm9uU3RyaWN0RXZhbCA9IG1fdXNlc05vblN0cmljdEV2YWw7Ci0gICAgcmVzdWx0
LT5tX2NhcHR1cmVTdGFydCA9IG1fY2FwdHVyZVN0YXJ0OwotICAgIHJlc3VsdC0+bV9jYXB0dXJl
RW5kID0gbV9jYXB0dXJlRW5kOwogCiAgICAgZm9yIChhdXRvIGl0ZXIgPSBtX21hcC5iZWdpbigp
LCBlbmQgPSBtX21hcC5lbmQoKTsgaXRlciAhPSBlbmQ7ICsraXRlcikgewotICAgICAgICBpZiAo
IWlzQ2FwdHVyZWQoaXRlci0+dmFsdWUuZ2V0SW5kZXgoKSkpCisgICAgICAgIGlmICghaXRlci0+
dmFsdWUudmFyT2Zmc2V0KCkuaXNTY29wZSgpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgIHJlc3VsdC0+bV9tYXAuYWRkKAogICAgICAgICAgICAgaXRlci0+a2V5LAotICAgICAgICAg
ICAgU3ltYm9sVGFibGVFbnRyeShpdGVyLT52YWx1ZS5nZXRJbmRleCgpLCBpdGVyLT52YWx1ZS5n
ZXRBdHRyaWJ1dGVzKCkpKTsKKyAgICAgICAgICAgIFN5bWJvbFRhYmxlRW50cnkoaXRlci0+dmFs
dWUudmFyT2Zmc2V0KCksIGl0ZXItPnZhbHVlLmdldEF0dHJpYnV0ZXMoKSkpOwogICAgIH0KICAg
ICAKLSAgICBpZiAobV9zbG93QXJndW1lbnRzKSB7Ci0gICAgICAgIHJlc3VsdC0+bV9zbG93QXJn
dW1lbnRzID0gc3RkOjptYWtlX3VuaXF1ZTxTbG93QXJndW1lbnRbXT4ocGFyYW1ldGVyQ291bnQo
KSk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IHBhcmFtZXRlckNvdW50KCk7IGktLTspCi0g
ICAgICAgICAgICByZXN1bHQtPm1fc2xvd0FyZ3VtZW50c1tpXSA9IG1fc2xvd0FyZ3VtZW50c1tp
XTsKLSAgICB9Ci0KKyAgICByZXN1bHQtPm1fYXJndW1lbnRzID0gYXJndW1lbnRzKCk7CisgICAg
CiAgICAgaWYgKG1fdHlwZVByb2ZpbGluZ1JhcmVEYXRhKSB7CiAgICAgICAgIHJlc3VsdC0+bV90
eXBlUHJvZmlsaW5nUmFyZURhdGEgPSBzdGQ6Om1ha2VfdW5pcXVlPFR5cGVQcm9maWxpbmdSYXJl
RGF0YT4oKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFi
bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xU
YWJsZS5oCShyZXZpc2lvbiAxODA1NjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TeW1ib2xUYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAxMi0yMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAxMi0yMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMzEsNiArMzEsNyBAQAogCiAjaW5jbHVkZSAiQ29uY3VycmVudEpJVExvY2suaCIKICNpbmNs
dWRlICJKU09iamVjdC5oIgorI2luY2x1ZGUgIlNjb3BlZEFyZ3VtZW50c1RhYmxlLmgiCiAjaW5j
bHVkZSAiVHlwZUxvY2F0aW9uLmgiCiAjaW5jbHVkZSAiVmFyaWFibGVXYXRjaHBvaW50U2V0Lmgi
CiAjaW5jbHVkZSA8bWVtb3J5PgpAQCAtMzksMjQgKzQwLDYgQEAKIAogbmFtZXNwYWNlIEpTQyB7
CiAKLXN0cnVjdCBTbG93QXJndW1lbnQgewotcHVibGljOgotICAgIGVudW0gU3RhdHVzIHsKLSAg
ICAgICAgTm9ybWFsID0gMCwKLSAgICAgICAgQ2FwdHVyZWQgPSAxLAotICAgICAgICBEZWxldGVk
ID0gMgotICAgIH07Ci0KLSAgICBTbG93QXJndW1lbnQoKQotICAgICAgICA6IHN0YXR1cyhOb3Jt
YWwpCi0gICAgICAgICwgaW5kZXgoMCkKLSAgICB7Ci0gICAgfQotCi0gICAgU3RhdHVzIHN0YXR1
czsKLSAgICBpbnQgaW5kZXg7IC8vIElmIHN0YXR1cyBpcyAnRGVsZXRlZCcsIGluZGV4IGlzIGJv
Z3VzLgotfTsKLQogc3RhdGljIEFMV0FZU19JTkxJTkUgaW50IG1pc3NpbmdTeW1ib2xNYXJrZXIo
KSB7IHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpOyB9CiAKIC8vIFRoZSBi
aXQgdHdpZGRsaW5nIGluIHRoaXMgY2xhc3MgYXNzdW1lcyB0aGF0IGV2ZXJ5IHJlZ2lzdGVyIGlu
ZGV4IGlzIGEKQEAgLTg2LDYgKzY5LDI4IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIGludCBtaXNz
aW5nU3ltYm9sTWEKIC8vIGNvcHk6ICAgICBTeW1ib2xUYWJsZUVudHJ5IC0tPiBGYXRFbnRyeSAt
LS0tLV4KIAogc3RydWN0IFN5bWJvbFRhYmxlRW50cnkgeworcHJpdmF0ZToKKyAgICBzdGF0aWMg
VmFyT2Zmc2V0IHZhck9mZnNldEZyb21CaXRzKGludHB0cl90IGJpdHMpCisgICAgeworICAgICAg
ICBWYXJLaW5kIGtpbmQ7CisgICAgICAgIGlmIChiaXRzICYgU3RhY2tGbGFnKQorICAgICAgICAg
ICAga2luZCA9IFN0YWNrVmFyS2luZDsKKyAgICAgICAgZWxzZSBpZiAoYml0cyAmIENhcHR1cmVk
QXJndW1lbnRGbGFnKQorICAgICAgICAgICAga2luZCA9IENhcHR1cmVkQXJndW1lbnRLaW5kOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBraW5kID0gU2NvcGVWYXJLaW5kOworICAgICAgICBy
ZXR1cm4gVmFyT2Zmc2V0Ojphc3NlbWJsZShraW5kLCBzdGF0aWNfY2FzdDxpbnQ+KGJpdHMgPj4g
RmxhZ0JpdHMpKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIFNjb3BlT2Zmc2V0IHNjb3BlT2Zm
c2V0RnJvbUJpdHMoaW50cHRyX3QgYml0cykKKyAgICB7CisgICAgICAgIEFTU0VSVCghKGJpdHMg
JiBTdGFja0ZsYWcpKTsKKyAgICAgICAgQVNTRVJUKCEoYml0cyAmIENhcHR1cmVkQXJndW1lbnRG
bGFnKSk7CisgICAgICAgIHJldHVybiBTY29wZU9mZnNldChzdGF0aWNfY2FzdDxpbnQ+KGJpdHMg
Pj4gRmxhZ0JpdHMpKTsKKyAgICB9CisKK3B1YmxpYzoKKyAgICAKICAgICAvLyBVc2UgdGhlIFN5
bWJvbFRhYmxlRW50cnk6OkZhc3QgY2xhc3MsIGVpdGhlciB2aWEgaW1wbGljaXQgY2FzdCBvciBi
eSBjYWxsaW5nCiAgICAgLy8gZ2V0RmFzdCgpLCB3aGVuIHlvdSAoMSkgb25seSBjYXJlIGFib3V0
IGlzTnVsbCgpLCBnZXRJbmRleCgpLCBhbmQgaXNSZWFkT25seSgpLAogICAgIC8vIGFuZCAoMikg
eW91IGFyZSBpbiBhIGhvdCBwYXRoIHdoZXJlIHlvdSBuZWVkIHRvIG1pbmltaXplIHRoZSBudW1i
ZXIgb2YgdGltZXMKQEAgLTEwNywxMSArMTEyLDE5IEBAIHN0cnVjdCBTeW1ib2xUYWJsZUVudHJ5
IHsKICAgICAgICAgICAgIHJldHVybiAhKG1fYml0cyAmIH5TbGltRmxhZyk7CiAgICAgICAgIH0K
IAotICAgICAgICBpbnQgZ2V0SW5kZXgoKSBjb25zdAorICAgICAgICBWYXJPZmZzZXQgdmFyT2Zm
c2V0KCkgY29uc3QKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGlu
dD4obV9iaXRzID4+IEZsYWdCaXRzKTsKKyAgICAgICAgICAgIHJldHVybiB2YXJPZmZzZXRGcm9t
Qml0cyhtX2JpdHMpOwogICAgICAgICB9Ci0gICAgCisgICAgICAgIAorICAgICAgICAvLyBBc3Nl
cnRzIGlmIHRoZSBvZmZzZXQgaXMgYW55dGhpbmcgYnV0IGEgc2NvcGUgb2Zmc2V0LiBUaGlzIHN0
cnVjdHVyZXMgdGhlIGFzc2VydGlvbnMKKyAgICAgICAgLy8gaW4gYSB3YXkgdGhhdCBtYXkgcmVz
dWx0IGluIGJldHRlciBjb2RlLCBldmVuIGluIHJlbGVhc2UsIHRoYW4gZG9pbmcKKyAgICAgICAg
Ly8gdmFyT2Zmc2V0KCkuc2NvcGVPZmZzZXQoKS4KKyAgICAgICAgU2NvcGVPZmZzZXQgc2NvcGVP
ZmZzZXQoKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gc2NvcGVPZmZzZXRG
cm9tQml0cyhtX2JpdHMpOworICAgICAgICB9CisgICAgICAgIAogICAgICAgICBib29sIGlzUmVh
ZE9ubHkoKSBjb25zdAogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gbV9iaXRzICYgUmVh
ZE9ubHlGbGFnOwpAQCAtMTQyLDE4ICsxNTUsMTggQEAgc3RydWN0IFN5bWJvbFRhYmxlRW50cnkg
ewogICAgIHsKICAgICB9CiAKLSAgICBTeW1ib2xUYWJsZUVudHJ5KGludCBpbmRleCkKKyAgICBT
eW1ib2xUYWJsZUVudHJ5KFZhck9mZnNldCBvZmZzZXQpCiAgICAgICAgIDogbV9iaXRzKFNsaW1G
bGFnKQogICAgIHsKLSAgICAgICAgQVNTRVJUKGlzVmFsaWRJbmRleChpbmRleCkpOwotICAgICAg
ICBwYWNrKGluZGV4LCBmYWxzZSwgZmFsc2UpOworICAgICAgICBBU1NFUlQoaXNWYWxpZFZhck9m
ZnNldChvZmZzZXQpKTsKKyAgICAgICAgcGFjayhvZmZzZXQsIGZhbHNlLCBmYWxzZSk7CiAgICAg
fQogCi0gICAgU3ltYm9sVGFibGVFbnRyeShpbnQgaW5kZXgsIHVuc2lnbmVkIGF0dHJpYnV0ZXMp
CisgICAgU3ltYm9sVGFibGVFbnRyeShWYXJPZmZzZXQgb2Zmc2V0LCB1bnNpZ25lZCBhdHRyaWJ1
dGVzKQogICAgICAgICA6IG1fYml0cyhTbGltRmxhZykKICAgICB7Ci0gICAgICAgIEFTU0VSVChp
c1ZhbGlkSW5kZXgoaW5kZXgpKTsKLSAgICAgICAgcGFjayhpbmRleCwgYXR0cmlidXRlcyAmIFJl
YWRPbmx5LCBhdHRyaWJ1dGVzICYgRG9udEVudW0pOworICAgICAgICBBU1NFUlQoaXNWYWxpZFZh
ck9mZnNldChvZmZzZXQpKTsKKyAgICAgICAgcGFjayhvZmZzZXQsIGF0dHJpYnV0ZXMgJiBSZWFk
T25seSwgYXR0cmlidXRlcyAmIERvbnRFbnVtKTsKICAgICB9CiAgICAgCiAgICAgflN5bWJvbFRh
YmxlRW50cnkoKQpAQCAtMTgxLDkgKzE5NCwxNyBAQCBzdHJ1Y3QgU3ltYm9sVGFibGVFbnRyeSB7
CiAgICAgICAgIHJldHVybiAhKGJpdHMoKSAmIH5TbGltRmxhZyk7CiAgICAgfQogCi0gICAgaW50
IGdldEluZGV4KCkgY29uc3QKKyAgICBWYXJPZmZzZXQgdmFyT2Zmc2V0KCkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiB2YXJPZmZzZXRGcm9tQml0cyhiaXRzKCkpOworICAgIH0KKyAgICAK
KyAgICAvLyBBc3NlcnRzIGlmIHRoZSBvZmZzZXQgaXMgYW55dGhpbmcgYnV0IGEgc2NvcGUgb2Zm
c2V0LiBUaGlzIHN0cnVjdHVyZXMgdGhlIGFzc2VydGlvbnMKKyAgICAvLyBpbiBhIHdheSB0aGF0
IG1heSByZXN1bHQgaW4gYmV0dGVyIGNvZGUsIGV2ZW4gaW4gcmVsZWFzZSwgdGhhbiBkb2luZwor
ICAgIC8vIHZhck9mZnNldCgpLnNjb3BlT2Zmc2V0KCkuCisgICAgU2NvcGVPZmZzZXQgc2NvcGVP
ZmZzZXQoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4oYml0
cygpID4+IEZsYWdCaXRzKTsKKyAgICAgICAgcmV0dXJuIHNjb3BlT2Zmc2V0RnJvbUJpdHMoYml0
cygpKTsKICAgICB9CiAgICAgCiAgICAgQUxXQVlTX0lOTElORSBGYXN0IGdldEZhc3QoKSBjb25z
dApAQCAtMjA5LDcgKzIzMCw3IEBAIHN0cnVjdCBTeW1ib2xUYWJsZUVudHJ5IHsKIAogICAgIHZv
aWQgc2V0QXR0cmlidXRlcyh1bnNpZ25lZCBhdHRyaWJ1dGVzKQogICAgIHsKLSAgICAgICAgcGFj
ayhnZXRJbmRleCgpLCBhdHRyaWJ1dGVzICYgUmVhZE9ubHksIGF0dHJpYnV0ZXMgJiBEb250RW51
bSk7CisgICAgICAgIHBhY2sodmFyT2Zmc2V0KCksIGF0dHJpYnV0ZXMgJiBSZWFkT25seSwgYXR0
cmlidXRlcyAmIERvbnRFbnVtKTsKICAgICB9CiAKICAgICBib29sIGlzUmVhZE9ubHkoKSBjb25z
dApAQCAtMjQyLDcgKzI2Myw5IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIGNvbnN0IGludHB0cl90
IFJlYWRPbmx5RmxhZyA9IDB4MjsKICAgICBzdGF0aWMgY29uc3QgaW50cHRyX3QgRG9udEVudW1G
bGFnID0gMHg0OwogICAgIHN0YXRpYyBjb25zdCBpbnRwdHJfdCBOb3ROdWxsRmxhZyA9IDB4ODsK
LSAgICBzdGF0aWMgY29uc3QgaW50cHRyX3QgRmxhZ0JpdHMgPSA0OworICAgIHN0YXRpYyBjb25z
dCBpbnRwdHJfdCBTdGFja0ZsYWcgPSAweDEwOworICAgIHN0YXRpYyBjb25zdCBpbnRwdHJfdCBD
YXB0dXJlZEFyZ3VtZW50RmxhZyA9IDB4MjA7CisgICAgc3RhdGljIGNvbnN0IGludHB0cl90IEZs
YWdCaXRzID0gNjsKICAgICAKICAgICBjbGFzcyBGYXRFbnRyeSB7CiAgICAgICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOwpAQCAtMzA5LDIwICszMzIsMzQgQEAgcHJpdmF0ZToKIAogICAgIEpT
X0VYUE9SVF9QUklWQVRFIHZvaWQgZnJlZUZhdEVudHJ5U2xvdygpOwogCi0gICAgdm9pZCBwYWNr
KGludCBpbmRleCwgYm9vbCByZWFkT25seSwgYm9vbCBkb250RW51bSkKKyAgICB2b2lkIHBhY2so
VmFyT2Zmc2V0IG9mZnNldCwgYm9vbCByZWFkT25seSwgYm9vbCBkb250RW51bSkKICAgICB7CiAg
ICAgICAgIEFTU0VSVCghaXNGYXQoKSk7CiAgICAgICAgIGludHB0cl90JiBiaXRzUmVmID0gYml0
cygpOwotICAgICAgICBiaXRzUmVmID0gKHN0YXRpY19jYXN0PGludHB0cl90PihpbmRleCkgPDwg
RmxhZ0JpdHMpIHwgTm90TnVsbEZsYWcgfCBTbGltRmxhZzsKKyAgICAgICAgYml0c1JlZiA9Cisg
ICAgICAgICAgICAoc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KG9mZnNldC5yYXdPZmZzZXQoKSkgPDwg
RmxhZ0JpdHMpIHwgTm90TnVsbEZsYWcgfCBTbGltRmxhZzsKICAgICAgICAgaWYgKHJlYWRPbmx5
KQogICAgICAgICAgICAgYml0c1JlZiB8PSBSZWFkT25seUZsYWc7CiAgICAgICAgIGlmIChkb250
RW51bSkKICAgICAgICAgICAgIGJpdHNSZWYgfD0gRG9udEVudW1GbGFnOworICAgICAgICBzd2l0
Y2ggKG9mZnNldC5raW5kKCkpIHsKKyAgICAgICAgY2FzZSBTY29wZVZhcktpbmQ6CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTdGFja1ZhcktpbmQ6CisgICAgICAgICAgICBiaXRz
UmVmIHw9IFN0YWNrRmxhZzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENhcHR1
cmVkQXJndW1lbnRLaW5kOgorICAgICAgICAgICAgYml0c1JlZiB8PSBDYXB0dXJlZEFyZ3VtZW50
RmxhZzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CiAgICAgfQogICAgIAotICAgIGJvb2wgaXNWYWxpZEluZGV4KGludCBpbmRleCkKKyAgICBz
dGF0aWMgYm9vbCBpc1ZhbGlkVmFyT2Zmc2V0KFZhck9mZnNldCBvZmZzZXQpCiAgICAgewotICAg
ICAgICByZXR1cm4gKChzdGF0aWNfY2FzdDxpbnRwdHJfdD4oaW5kZXgpIDw8IEZsYWdCaXRzKSA+
PiBGbGFnQml0cykgPT0gc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KGluZGV4KTsKKyAgICAgICAgcmV0
dXJuICgoc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KG9mZnNldC5yYXdPZmZzZXQoKSkgPDwgRmxhZ0Jp
dHMpID4+IEZsYWdCaXRzKSA9PSBzdGF0aWNfY2FzdDxpbnRwdHJfdD4ob2Zmc2V0LnJhd09mZnNl
dCgpKTsKICAgICB9CiAKICAgICBpbnRwdHJfdCBtX2JpdHM7CkBAIC0zNTEsNyArMzg4LDcgQEAg
cHVibGljOgogICAgIHN0YXRpYyBTeW1ib2xUYWJsZSogY3JlYXRlTmFtZVNjb3BlVGFibGUoVk0m
IHZtLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgdW5zaWduZWQgYXR0cmlidXRlcykKICAgICB7
CiAgICAgICAgIFN5bWJvbFRhYmxlKiByZXN1bHQgPSBjcmVhdGUodm0pOwotICAgICAgICByZXN1
bHQtPmFkZChpZGVudC5pbXBsKCksIFN5bWJvbFRhYmxlRW50cnkoLTEsIGF0dHJpYnV0ZXMpKTsK
KyAgICAgICAgcmVzdWx0LT5hZGQoaWRlbnQuaW1wbCgpLCBTeW1ib2xUYWJsZUVudHJ5KFZhck9m
ZnNldChTY29wZU9mZnNldCgwKSksIGF0dHJpYnV0ZXMpKTsKICAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKICAgICB9CiAgICAgCkBAIC00MjMsOCArNDYwLDI5IEBAIHB1YmxpYzoKICAgICAgICAgcmV0
dXJuIHNpemUobG9ja2VyKTsKICAgICB9CiAgICAgCisgICAgU2NvcGVPZmZzZXQgbWF4U2NvcGVP
ZmZzZXQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbWF4U2NvcGVPZmZzZXQ7Cisg
ICAgfQorICAgIAorICAgIHVuc2lnbmVkIHNjb3BlU2l6ZSgpIGNvbnN0CisgICAgeworICAgICAg
ICBTY29wZU9mZnNldCBtYXhTY29wZU9mZnNldCA9IHRoaXMtPm1heFNjb3BlT2Zmc2V0KCk7Cisg
ICAgICAgIAorICAgICAgICAvLyBEbyBzb21lIGNhbGN1bGF0aW9uIHRoYXQgcmVsaWVzIG9uIGlu
dmFsaWQgc2NvcGUgb2Zmc2V0IHBsdXMgb25lIGJlaW5nIHplcm8uCisgICAgICAgIHVuc2lnbmVk
IGZhc3RSZXN1bHQgPSBtYXhTY29wZU9mZnNldC5vZmZzZXRVbmNoZWNrZWQoKSArIDE7CisgICAg
ICAgIAorICAgICAgICAvLyBBc3NlcnQgdGhhdCB0aGlzIHdvcmtzLgorICAgICAgICBBU1NFUlQo
ZmFzdFJlc3VsdCA9PSAoIW1heFNjb3BlT2Zmc2V0ID8gMCA6IG1heFNjb3BlT2Zmc2V0Lm9mZnNl
dCgpICsgMSkpOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIGZhc3RSZXN1bHQ7CisgICAgfQor
ICAgIAogICAgIE1hcDo6QWRkUmVzdWx0IGFkZChjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiwg
U3RyaW5nSW1wbCoga2V5LCBjb25zdCBTeW1ib2xUYWJsZUVudHJ5JiBlbnRyeSkKICAgICB7Cisg
ICAgICAgIGlmIChlbnRyeS52YXJPZmZzZXQoKS5pc1Njb3BlKCkKKyAgICAgICAgICAgICYmICgh
bV9tYXhTY29wZU9mZnNldCB8fCBtX21heFNjb3BlT2Zmc2V0IDwgZW50cnkuc2NvcGVPZmZzZXQo
KSkpCisgICAgICAgICAgICBtX21heFNjb3BlT2Zmc2V0ID0gZW50cnkuc2NvcGVPZmZzZXQoKTsK
ICAgICAgICAgcmV0dXJuIG1fbWFwLmFkZChrZXksIGVudHJ5KTsKICAgICB9CiAgICAgCkBAIC00
NTYsNiArNTE0LDQ1IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGNvbnRhaW5zKGxvY2tlciwg
a2V5KTsKICAgICB9CiAgICAgCisgICAgLy8gVGhlIHByaW5jaXBsZSBiZWhpbmQgU2NvcGVkQXJn
dW1lbnRzVGFibGUgbW9kaWZpY2F0aW9ucyBpcyB0aGF0IHdlIHdpbGwgY3JlYXRlIG9uZSBhbmQK
KyAgICAvLyBsZWF2ZSBpdCB1bmxvY2tlZCAtIHRoZXJlYnkgYWxsb3dpbmcgaW4tcGxhY2UgY2hh
bmdlcyAtIHVudGlsIHNvbWVvbmUgYXNrcyBmb3IgYSBwb2ludGVyIHRvCisgICAgLy8gdGhlIHRh
YmxlLiBUaGVuLCB3ZSB3aWxsIGxvY2sgaXQuIFRoZW4gYm90aCBvdXIgZnV0dXJlIGNoYW5nZXMg
YW5kIHRoZWlyIGZ1dHVyZSBjaGFuZ2VzCisgICAgLy8gd2lsbCBmaXJzdCBoYXZlIHRvIG1ha2Ug
YSBjb3B5LiBUaGlzIGRpc2NpcGxpbmUgbWVhbnMgdGhhdCB1c3VhbGx5IHdoZW4gd2UgY3JlYXRl
IGEKKyAgICAvLyBTY29wZWRBcmd1bWVudHMgb2JqZWN0LCB3ZSBkb24ndCBoYXZlIHRvIG1ha2Ug
YSBjb3B5IG9mIHRoZSBTY29wZWRBcmd1bWVudHNUYWJsZSAtIGluc3RlYWQKKyAgICAvLyB3ZSBq
dXN0IHRha2UgYSByZWZlcmVuY2UgdG8gb25lIHRoYXQgd2UgYWxyZWFkeSBoYXZlLgorICAgIAor
ICAgIHVpbnQzMl90IGFyZ3VtZW50c0xlbmd0aCgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAo
IW1fYXJndW1lbnRzKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBtX2Fy
Z3VtZW50cy0+bGVuZ3RoKCk7CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0QXJndW1lbnRzTGVu
Z3RoKFZNJiB2bSwgdWludDMyX3QgbGVuZ3RoKQorICAgIHsKKyAgICAgICAgaWYgKFVOTElLRUxZ
KCFtX2FyZ3VtZW50cykpCisgICAgICAgICAgICBtX2FyZ3VtZW50cy5zZXQodm0sIHRoaXMsIFNj
b3BlZEFyZ3VtZW50c1RhYmxlOjpjcmVhdGUodm0pKTsKKyAgICAgICAgbV9hcmd1bWVudHMuc2V0
KHZtLCB0aGlzLCBtX2FyZ3VtZW50cy0+c2V0TGVuZ3RoKHZtLCBsZW5ndGgpKTsKKyAgICB9Cisg
ICAgCisgICAgU2NvcGVPZmZzZXQgYXJndW1lbnRPZmZzZXQodWludDMyX3QgaSkgY29uc3QKKyAg
ICB7CisgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKG1fYXJndW1lbnRz
KTsKKyAgICAgICAgcmV0dXJuIG1fYXJndW1lbnRzLT5nZXQoaSk7CisgICAgfQorICAgIAorICAg
IHZvaWQgc2V0QXJndW1lbnRPZmZzZXQoVk0mIHZtLCB1aW50MzJfdCBpLCBTY29wZU9mZnNldCBv
ZmZzZXQpCisgICAgeworICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTiht
X2FyZ3VtZW50cyk7CisgICAgICAgIG1fYXJndW1lbnRzLnNldCh2bSwgdGhpcywgbV9hcmd1bWVu
dHMtPnNldCh2bSwgaSwgb2Zmc2V0KSk7CisgICAgfQorICAgIAorICAgIFNjb3BlZEFyZ3VtZW50
c1RhYmxlKiBhcmd1bWVudHMoKSBjb25zdAorICAgIHsKKyAgICAgICAgbV9hcmd1bWVudHMtPmxv
Y2soKTsKKyAgICAgICAgcmV0dXJuIG1fYXJndW1lbnRzLmdldCgpOworICAgIH0KKyAgICAKICAg
ICBHbG9iYWxWYXJpYWJsZUlEIHVuaXF1ZUlERm9yVmFyaWFibGUoY29uc3QgQ29uY3VycmVudEpJ
VExvY2tlciYsIFN0cmluZ0ltcGwqIGtleSwgVk0mIHZtKTsKICAgICBHbG9iYWxWYXJpYWJsZUlE
IHVuaXF1ZUlERm9yUmVnaXN0ZXIoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYgbG9ja2VyLCBp
bnQgcmVnaXN0ZXJJbmRleCwgVk0mIHZtKTsKICAgICBSZWZQdHI8VHlwZVNldD4gZ2xvYmFsVHlw
ZVNldEZvclJlZ2lzdGVyKGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImIGxvY2tlciwgaW50IHJl
Z2lzdGVySW5kZXgsIFZNJiB2bSk7CkBAIC00NjQsMjggKzU2MSw3IEBAIHB1YmxpYzoKICAgICBi
b29sIHVzZXNOb25TdHJpY3RFdmFsKCkgeyByZXR1cm4gbV91c2VzTm9uU3RyaWN0RXZhbDsgfQog
ICAgIHZvaWQgc2V0VXNlc05vblN0cmljdEV2YWwoYm9vbCB1c2VzTm9uU3RyaWN0RXZhbCkgeyBt
X3VzZXNOb25TdHJpY3RFdmFsID0gdXNlc05vblN0cmljdEV2YWw7IH0KIAotICAgIGludCBjYXB0
dXJlU3RhcnQoKSBjb25zdCB7IHJldHVybiBtX2NhcHR1cmVTdGFydDsgfQotICAgIHZvaWQgc2V0
Q2FwdHVyZVN0YXJ0KGludCBjYXB0dXJlU3RhcnQpIHsgbV9jYXB0dXJlU3RhcnQgPSBjYXB0dXJl
U3RhcnQ7IH0KLQotICAgIGludCBjYXB0dXJlRW5kKCkgY29uc3QgeyByZXR1cm4gbV9jYXB0dXJl
RW5kOyB9Ci0gICAgdm9pZCBzZXRDYXB0dXJlRW5kKGludCBjYXB0dXJlRW5kKSB7IG1fY2FwdHVy
ZUVuZCA9IGNhcHR1cmVFbmQ7IH0KLQotICAgIGludCBjYXB0dXJlQ291bnQoKSBjb25zdCB7IHJl
dHVybiAtKG1fY2FwdHVyZUVuZCAtIG1fY2FwdHVyZVN0YXJ0KTsgfQotICAgIAotICAgIGJvb2wg
aXNDYXB0dXJlZChpbnQgb3BlcmFuZCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBvcGVyYW5kIDw9
IGNhcHR1cmVTdGFydCgpICYmIG9wZXJhbmQgPiBjYXB0dXJlRW5kKCk7Ci0gICAgfQotCi0gICAg
aW50IHBhcmFtZXRlckNvdW50KCkgeyByZXR1cm4gbV9wYXJhbWV0ZXJDb3VudEluY2x1ZGluZ1Ro
aXMgLSAxOyB9Ci0gICAgaW50IHBhcmFtZXRlckNvdW50SW5jbHVkaW5nVGhpcygpIHsgcmV0dXJu
IG1fcGFyYW1ldGVyQ291bnRJbmNsdWRpbmdUaGlzOyB9Ci0gICAgdm9pZCBzZXRQYXJhbWV0ZXJD
b3VudEluY2x1ZGluZ1RoaXMoaW50IHBhcmFtZXRlckNvdW50SW5jbHVkaW5nVGhpcykgeyBtX3Bh
cmFtZXRlckNvdW50SW5jbHVkaW5nVGhpcyA9IHBhcmFtZXRlckNvdW50SW5jbHVkaW5nVGhpczsg
fQotCi0gICAgLy8gMCBpZiB3ZSBkb24ndCBjYXB0dXJlIGFueSBhcmd1bWVudHM7IHBhcmFtZXRl
ckNvdW50KCkgaW4gbGVuZ3RoIGlmIHdlIGRvLgotICAgIGNvbnN0IFNsb3dBcmd1bWVudCogc2xv
d0FyZ3VtZW50cygpIHsgcmV0dXJuIG1fc2xvd0FyZ3VtZW50cy5nZXQoKTsgfQotICAgIHZvaWQg
c2V0U2xvd0FyZ3VtZW50cyhzdGQ6OnVuaXF1ZV9wdHI8U2xvd0FyZ3VtZW50W10+IHNsb3dBcmd1
bWVudHMpIHsgbV9zbG93QXJndW1lbnRzID0gV1RGOjptb3ZlKHNsb3dBcmd1bWVudHMpOyB9Ci0g
ICAgCi0gICAgU3ltYm9sVGFibGUqIGNsb25lQ2FwdHVyZWROYW1lcyhWTSYpOworICAgIFN5bWJv
bFRhYmxlKiBjbG9uZVNjb3BlUGFydChWTSYpOwogCiAgICAgdm9pZCBwcmVwYXJlRm9yVHlwZVBy
b2ZpbGluZyhjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJik7CiAKQEAgLTUxMyw2ICs1ODksOCBA
QCBwcml2YXRlOgogICAgIH5TeW1ib2xUYWJsZSgpOwogCiAgICAgTWFwIG1fbWFwOworICAgIFNj
b3BlT2Zmc2V0IG1fbWF4U2NvcGVPZmZzZXQ7CisgICAgCiAgICAgc3RydWN0IFR5cGVQcm9maWxp
bmdSYXJlRGF0YSB7CiAgICAgICAgIFVuaXF1ZUlETWFwIG1fdW5pcXVlSURNYXA7CiAgICAgICAg
IFJlZ2lzdGVyVG9WYXJpYWJsZU1hcCBtX3JlZ2lzdGVyVG9WYXJpYWJsZU1hcDsKQEAgLTUyMCwx
MyArNTk4LDkgQEAgcHJpdmF0ZToKICAgICB9OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxUeXBlUHJv
ZmlsaW5nUmFyZURhdGE+IG1fdHlwZVByb2ZpbGluZ1JhcmVEYXRhOwogCi0gICAgaW50IG1fcGFy
YW1ldGVyQ291bnRJbmNsdWRpbmdUaGlzOwogICAgIGJvb2wgbV91c2VzTm9uU3RyaWN0RXZhbDsK
LQotICAgIGludCBtX2NhcHR1cmVTdGFydDsKLSAgICBpbnQgbV9jYXB0dXJlRW5kOwotCi0gICAg
c3RkOjp1bmlxdWVfcHRyPFNsb3dBcmd1bWVudFtdPiBtX3Nsb3dBcmd1bWVudHM7CisgICAgCisg
ICAgV3JpdGVCYXJyaWVyPFNjb3BlZEFyZ3VtZW50c1RhYmxlPiBtX2FyZ3VtZW50czsKICAgICAK
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8V2F0Y2hwb2ludENsZWFudXA+IG1fd2F0Y2hwb2ludENsZWFu
dXA7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Zhck9mZnNldC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVmFyT2Zmc2V0LmNw
cAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Zhck9mZnNl
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3NiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiVmFyT2Zmc2V0LmgiCisKK25hbWVzcGFjZSBKU0MgeworCit2b2lkIFZhck9mZnNldDo6ZHVt
cChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIHN3aXRjaCAobV9raW5kKSB7CisgICAg
Y2FzZSBJbnZhbGlkVmFyS2luZDoKKyAgICAgICAgb3V0LnByaW50KCJpbnZhbGlkIik7CisgICAg
ICAgIHJldHVybjsKKyAgICBjYXNlIFNjb3BlVmFyS2luZDoKKyAgICAgICAgb3V0LnByaW50KHNj
b3BlT2Zmc2V0KCkpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBTdGFja1ZhcktpbmQ6Cisg
ICAgICAgIG91dC5wcmludChzdGFja09mZnNldCgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNh
c2UgQ2FwdHVyZWRBcmd1bWVudEtpbmQ6CisgICAgICAgIG91dC5wcmludChjYXB0dXJlZEFyZ3Vt
ZW50T2Zmc2V0KCkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCituYW1lc3BhY2UgV1RG
IHsKKwordXNpbmcgbmFtZXNwYWNlIEpTQzsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3Ry
ZWFtJiBvdXQsIFZhcktpbmQgdmFyS2luZCkKK3sKKyAgICBzd2l0Y2ggKHZhcktpbmQpIHsKKyAg
ICBjYXNlIEludmFsaWRWYXJLaW5kOgorICAgICAgICBvdXQucHJpbnQoIkludmFsaWQiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIGNhc2UgU2NvcGVWYXJLaW5kOgorICAgICAgICBvdXQucHJpbnQo
IlNjb3BlIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFN0YWNrVmFyS2luZDoKKyAgICAg
ICAgb3V0LnByaW50KCJTdGFjayIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBDYXB0dXJl
ZEFyZ3VtZW50S2luZDoKKyAgICAgICAgb3V0LnByaW50KCJDYXB0dXJlZEFyZ3VtZW50Iik7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1Zhck9mZnNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1Zhck9mZnNldC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvVmFyT2Zmc2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMTQgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBWYXJP
ZmZzZXRfaAorI2RlZmluZSBWYXJPZmZzZXRfaAorCisjaW5jbHVkZSAiQ2FwdHVyZWRBcmd1bWVu
dE9mZnNldC5oIgorI2luY2x1ZGUgIlNjb3BlT2Zmc2V0LmgiCisjaW5jbHVkZSAiVmlydHVhbFJl
Z2lzdGVyLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitlbnVtIFZhcktpbmQgOiB1aW50OF90IHsK
KyAgICBJbnZhbGlkVmFyS2luZCwKKyAgICBTY29wZVZhcktpbmQsCisgICAgU3RhY2tWYXJLaW5k
LAorICAgIENhcHR1cmVkQXJndW1lbnRLaW5kCit9OworCitjbGFzcyBWYXJPZmZzZXQgeworcHVi
bGljOgorICAgIFZhck9mZnNldCgpCisgICAgICAgIDogbV9raW5kKEludmFsaWRWYXJLaW5kKQor
ICAgICAgICAsIG1fb2Zmc2V0KFVJTlRfTUFYKQorICAgIHsKKyAgICB9CisgICAgCisgICAgZXhw
bGljaXQgVmFyT2Zmc2V0KFZpcnR1YWxSZWdpc3RlciBzdGFja09mZnNldCkKKyAgICB7CisgICAg
ICAgIGlmICghc3RhY2tPZmZzZXQuaXNWYWxpZCgpKSB7CisgICAgICAgICAgICBtX2tpbmQgPSBJ
bnZhbGlkVmFyS2luZDsKKyAgICAgICAgICAgIG1fb2Zmc2V0ID0gVUlOVF9NQVg7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICBtX2tpbmQgPSBTdGFja1ZhcktpbmQ7CisgICAgICAgICAg
ICBtX29mZnNldCA9IHN0YWNrT2Zmc2V0Lm9mZnNldCgpOworICAgICAgICB9CisgICAgfQorICAg
IAorICAgIGV4cGxpY2l0IFZhck9mZnNldChTY29wZU9mZnNldCBzY29wZU9mZnNldCkKKyAgICB7
CisgICAgICAgIGlmICghc2NvcGVPZmZzZXQpIHsKKyAgICAgICAgICAgIG1fa2luZCA9IEludmFs
aWRWYXJLaW5kOworICAgICAgICAgICAgbV9vZmZzZXQgPSBVSU5UX01BWDsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIG1fa2luZCA9IFNjb3BlVmFyS2luZDsKKyAgICAgICAgICAgIG1f
b2Zmc2V0ID0gc2NvcGVPZmZzZXQub2Zmc2V0KCk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisg
ICAgZXhwbGljaXQgVmFyT2Zmc2V0KENhcHR1cmVkQXJndW1lbnRPZmZzZXQgY2FwdHVyZWRBcmd1
bWVudE9mZnNldCkKKyAgICB7CisgICAgICAgIGlmICghY2FwdHVyZWRBcmd1bWVudE9mZnNldCkg
eworICAgICAgICAgICAgbV9raW5kID0gSW52YWxpZFZhcktpbmQ7CisgICAgICAgICAgICBtX29m
ZnNldCA9IFVJTlRfTUFYOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbV9raW5kID0g
Q2FwdHVyZWRBcmd1bWVudEtpbmQ7CisgICAgICAgICAgICBtX29mZnNldCA9IGNhcHR1cmVkQXJn
dW1lbnRPZmZzZXQub2Zmc2V0KCk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgc3RhdGlj
IFZhck9mZnNldCBhc3NlbWJsZShWYXJLaW5kIGtpbmQsIHVuc2lnbmVkIG9mZnNldCkKKyAgICB7
CisgICAgICAgIFZhck9mZnNldCByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBraW5k
OworICAgICAgICByZXN1bHQubV9vZmZzZXQgPSBvZmZzZXQ7CisgICAgICAgIHJlc3VsdC5jaGVj
a1Nhbml0eSgpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBib29s
IGlzVmFsaWQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fa2luZCAhPSBJbnZhbGlk
VmFyS2luZDsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuICFpc1ZhbGlkKCk7CisgICAgfQorICAgIAorICAgIFZhcktpbmQga2lu
ZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQorICAgIAorICAgIGJvb2wgaXNTdGFjaygpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9raW5kID09IFN0YWNrVmFyS2luZDsKKyAgICB9
CisgICAgCisgICAgYm9vbCBpc1Njb3BlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBt
X2tpbmQgPT0gU2NvcGVWYXJLaW5kOworICAgIH0KKyAgICAKKyAgICBib29sIGlzQ2FwdHVyZWRB
cmd1bWVudCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9raW5kID09IENhcHR1cmVk
QXJndW1lbnRLaW5kOworICAgIH0KKyAgICAKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3RhY2tPZmZz
ZXRVbmNoZWNrZWQoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKCFpc1N0YWNrKCkpCisgICAg
ICAgICAgICByZXR1cm4gVmlydHVhbFJlZ2lzdGVyKCk7CisgICAgICAgIHJldHVybiBWaXJ0dWFs
UmVnaXN0ZXIobV9vZmZzZXQpOworICAgIH0KKyAgICAKKyAgICBTY29wZU9mZnNldCBzY29wZU9m
ZnNldFVuY2hlY2tlZCgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoIWlzU2NvcGUoKSkKKyAg
ICAgICAgICAgIHJldHVybiBTY29wZU9mZnNldCgpOworICAgICAgICByZXR1cm4gU2NvcGVPZmZz
ZXQobV9vZmZzZXQpOworICAgIH0KKyAgICAKKyAgICBDYXB0dXJlZEFyZ3VtZW50T2Zmc2V0IGNh
cHR1cmVkQXJndW1lbnRPZmZzZXRVbmNoZWNrZWQoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYg
KCFpc0NhcHR1cmVkQXJndW1lbnQoKSkKKyAgICAgICAgICAgIHJldHVybiBDYXB0dXJlZEFyZ3Vt
ZW50T2Zmc2V0KCk7CisgICAgICAgIHJldHVybiBDYXB0dXJlZEFyZ3VtZW50T2Zmc2V0KG1fb2Zm
c2V0KTsKKyAgICB9CisgICAgCisgICAgVmlydHVhbFJlZ2lzdGVyIHN0YWNrT2Zmc2V0KCkgY29u
c3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc1N0YWNrKCkpOworICAgICAgICByZXR1cm4gVmly
dHVhbFJlZ2lzdGVyKG1fb2Zmc2V0KTsKKyAgICB9CisgICAgCisgICAgU2NvcGVPZmZzZXQgc2Nv
cGVPZmZzZXQoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzU2NvcGUoKSk7CisgICAg
ICAgIHJldHVybiBTY29wZU9mZnNldChtX29mZnNldCk7CisgICAgfQorICAgIAorICAgIENhcHR1
cmVkQXJndW1lbnRPZmZzZXQgY2FwdHVyZWRBcmd1bWVudE9mZnNldCgpIGNvbnN0CisgICAgewor
ICAgICAgICBBU1NFUlQoaXNDYXB0dXJlZEFyZ3VtZW50KCkpOworICAgICAgICByZXR1cm4gQ2Fw
dHVyZWRBcmd1bWVudE9mZnNldChtX29mZnNldCk7CisgICAgfQorICAgIAorICAgIHVuc2lnbmVk
IHJhd09mZnNldCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaXNWYWxpZCgpKTsKKyAg
ICAgICAgcmV0dXJuIG1fb2Zmc2V0OworICAgIH0KKyAgICAKKyAgICB2b2lkIGNoZWNrU2FuaXR5
KCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChBU1NFUlRfRElTQUJMRUQpCisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIAorICAgICAgICBzd2l0Y2ggKG1fa2luZCkgeworICAgICAgICBj
YXNlIEludmFsaWRWYXJLaW5kOgorICAgICAgICAgICAgQVNTRVJUKG1fb2Zmc2V0ID09IFVJTlRf
TUFYKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBTY29wZVZhcktpbmQ6Cisg
ICAgICAgICAgICBBU1NFUlQoc2NvcGVPZmZzZXQoKSk7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIGNhc2UgU3RhY2tWYXJLaW5kOgorICAgICAgICAgICAgQVNTRVJUKHN0YWNrT2Zmc2V0
KCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIENhcHR1cmVkQXJndW1lbnRL
aW5kOgorICAgICAgICAgICAgQVNTRVJUKGNhcHR1cmVkQXJndW1lbnRPZmZzZXQoKSk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgVmFyT2Zm
c2V0JiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2tpbmQgPT0gb3RoZXIu
bV9raW5kCisgICAgICAgICAgICAmJiBtX29mZnNldCA9PSBvdGhlci5tX29mZnNldDsKKyAgICB9
CisgICAgCisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFZhck9mZnNldCYgb3RoZXIpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgfQorICAgIAor
ICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworICAgIAorcHJpdmF0ZToKKyAgICBW
YXJLaW5kIG1fa2luZDsKKyAgICB1bnNpZ25lZCBtX29mZnNldDsKK307CisKK30gLy8gbmFtZXNw
YWNlIEpTQworCituYW1lc3BhY2UgV1RGIHsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3Ry
ZWFtJiwgSlNDOjpWYXJLaW5kKTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBW
YXJPZmZzZXRfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WYXJpYWJs
ZUxvY2F0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
VmFyaWFibGVMb2NhdGlvbi5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvVmFyaWFibGVMb2NhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzgg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBWYXJpYWJsZUxvY2F0aW9uX2gKKyNkZWZpbmUgVmFyaWFibGVMb2NhdGlvbl9oCisKKyNpbmNs
dWRlICJWaXJ0dWFsUmVnaXN0ZXIuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKKworCit9IC8vIG5h
bWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIFZhcmlhYmxlTG9jYXRpb25faAorCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>247442</attachid>
            <date>2015-02-26 13:26:50 -0800</date>
            <delta_ts>2015-02-26 16:57:02 -0800</delta_ts>
            <desc>dragging arguments code through the JITs</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>154738</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2Vt
Ymxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJz
dHJhY3RNYWNyb0Fzc2VtYmxlci5oCShyZXZpc2lvbiAxODA2OTEpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMjA1LDYgKzIwNSwxMSBAQCBwdWJsaWM6CiAgICAgICAgIFJlZ2lzdGVySUQgaW5kZXg7
CiAgICAgICAgIFNjYWxlIHNjYWxlOwogICAgICAgICBpbnQzMl90IG9mZnNldDsKKyAgICAgICAg
CisgICAgICAgIEJhc2VJbmRleCB3aXRoT2Zmc2V0KGludDMyX3QgYWRkaXRpb25hbE9mZnNldCkK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEJhc2VJbmRleChiYXNlLCBpbmRleCwgc2Nh
bGUsIG9mZnNldCArIGFkZGl0aW9uYWxPZmZzZXQpOworICAgICAgICB9CiAgICAgfTsKIAogICAg
IC8vIEFic29sdXRlQWRkcmVzczoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9CeVZhbEluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQnlWYWxJbmZvLmgJKHJldmlzaW9uIDE4MDY5MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9CeVZhbEluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDEsNiArNDEsOCBAQCBlbnVt
IEpJVEFycmF5TW9kZSB7CiAgICAgSklURG91YmxlLAogICAgIEpJVENvbnRpZ3VvdXMsCiAgICAg
SklUQXJyYXlTdG9yYWdlLAorICAgIEpJVERpcmVjdEFyZ3VtZW50cywKKyAgICBKSVRTY29wZWRB
cmd1bWVudHMsCiAgICAgSklUSW50OEFycmF5LAogICAgIEpJVEludDE2QXJyYXksCiAgICAgSklU
SW50MzJBcnJheSwKQEAgLTY1LDYgKzY3LDE3IEBAIGlubGluZSBib29sIGlzT3B0aW1pemFibGVJ
bmRleGluZ1R5cGUoSW4KICAgICB9CiB9CiAKK2lubGluZSBib29sIGhhc09wdGltaXphYmxlSW5k
ZXhpbmdGb3JKU1R5cGUoSlNUeXBlIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAg
Y2FzZSBEaXJlY3RBcmd1bWVudHNUeXBlOgorICAgIGNhc2UgU2NvcGVkQXJndW1lbnRzVHlwZToK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KK30KKwogaW5saW5lIGJvb2wgaGFzT3B0aW1pemFibGVJbmRleGluZ0ZvckNsYXNz
SW5mbyhjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbykKIHsKICAgICByZXR1cm4gaXNUeXBlZFZp
ZXcoY2xhc3NJbmZvLT50eXBlZEFycmF5U3RvcmFnZVR5cGUpOwpAQCAtNzMsNiArODYsNyBAQCBp
bmxpbmUgYm9vbCBoYXNPcHRpbWl6YWJsZUluZGV4aW5nRm9yQ2xhCiBpbmxpbmUgYm9vbCBoYXNP
cHRpbWl6YWJsZUluZGV4aW5nKFN0cnVjdHVyZSogc3RydWN0dXJlKQogewogICAgIHJldHVybiBp
c09wdGltaXphYmxlSW5kZXhpbmdUeXBlKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpCisgICAg
ICAgIHx8IGhhc09wdGltaXphYmxlSW5kZXhpbmdGb3JKU1R5cGUoc3RydWN0dXJlLT50eXBlSW5m
bygpLnR5cGUoKSkKICAgICAgICAgfHwgaGFzT3B0aW1pemFibGVJbmRleGluZ0ZvckNsYXNzSW5m
byhzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpKTsKIH0KIApAQCAtOTMsNiArMTA3LDE5IEBAIGlubGlu
ZSBKSVRBcnJheU1vZGUgaml0QXJyYXlNb2RlRm9ySW5kZXgKICAgICB9CiB9CiAKK2lubGluZSBK
SVRBcnJheU1vZGUgaml0QXJyYXlNb2RlRm9ySlNUeXBlKEpTVHlwZSB0eXBlKQoreworICAgIHN3
aXRjaCAodHlwZSkgeworICAgIGNhc2UgRGlyZWN0QXJndW1lbnRzVHlwZToKKyAgICAgICAgcmV0
dXJuIEpJVERpcmVjdEFyZ3VtZW50czsKKyAgICBjYXNlIFNjb3BlZEFyZ3VtZW50c1R5cGU6Cisg
ICAgICAgIHJldHVybiBKSVRTY29wZWRBcmd1bWVudHM7CisgICAgZGVmYXVsdDoKKyAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIEpJVENvbnRpZ3Vv
dXM7CisgICAgfQorfQorCiBpbmxpbmUgSklUQXJyYXlNb2RlIGppdEFycmF5TW9kZUZvckNsYXNz
SW5mbyhjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbykKIHsKICAgICBzd2l0Y2ggKGNsYXNzSW5m
by0+dHlwZWRBcnJheVN0b3JhZ2VUeXBlKSB7CkBAIC0xMjAsNiArMTQ3LDE5IEBAIGlubGluZSBK
SVRBcnJheU1vZGUgaml0QXJyYXlNb2RlRm9yQ2xhc3MKICAgICB9CiB9CiAKK2lubGluZSBib29s
IGppdEFycmF5TW9kZVBlcm1pdHNQdXQoSklUQXJyYXlNb2RlIG1vZGUpCit7CisgICAgc3dpdGNo
IChtb2RlKSB7CisgICAgY2FzZSBKSVREaXJlY3RBcmd1bWVudHM6CisgICAgY2FzZSBKSVRTY29w
ZWRBcmd1bWVudHM6CisgICAgICAgIC8vIFdlIGNvdWxkIHN1cHBvcnQgcHV0X2J5X3ZhbCBvbiB0
aGVzZSBhdCBzb21lIHBvaW50LCBidXQgaXQncyBqdXN0IG5vdCB0aGF0IHByb2ZpdGFibGUKKyAg
ICAgICAgLy8gYXQgdGhlIG1vbWVudC4KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGRlZmF1
bHQ6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KK30KKwogaW5saW5lIFR5cGVkQXJyYXlU
eXBlIHR5cGVkQXJyYXlUeXBlRm9ySklUQXJyYXlNb2RlKEpJVEFycmF5TW9kZSBtb2RlKQogewog
ICAgIHN3aXRjaCAobW9kZSkgewpAQCAtMTUyLDYgKzE5Miw5IEBAIGlubGluZSBKSVRBcnJheU1v
ZGUgaml0QXJyYXlNb2RlRm9yU3RydWMKICAgICBpZiAoaXNPcHRpbWl6YWJsZUluZGV4aW5nVHlw
ZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSkKICAgICAgICAgcmV0dXJuIGppdEFycmF5TW9k
ZUZvckluZGV4aW5nVHlwZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKTsKICAgICAKKyAgICBp
ZiAoaGFzT3B0aW1pemFibGVJbmRleGluZ0ZvckpTVHlwZShzdHJ1Y3R1cmUtPnR5cGVJbmZvKCku
dHlwZSgpKSkKKyAgICAgICAgcmV0dXJuIGppdEFycmF5TW9kZUZvckpTVHlwZShzdHJ1Y3R1cmUt
PnR5cGVJbmZvKCkudHlwZSgpKTsKKyAgICAKICAgICBBU1NFUlQoaGFzT3B0aW1pemFibGVJbmRl
eGluZ0ZvckNsYXNzSW5mbyhzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpKSk7CiAgICAgcmV0dXJuIGpp
dEFycmF5TW9kZUZvckNsYXNzSW5mbyhzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpKTsKIH0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmNw
cAkocmV2aXNpb24gMTgwNjkxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Nw
ZWN1bGF0ZWRUeXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksMTAgKzI5LDExIEBACiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU3BlY3VsYXRlZFR5cGUuaCIKIAotI2luY2x1ZGUg
IkFyZ3VtZW50cy5oIgorI2luY2x1ZGUgIkRpcmVjdEFyZ3VtZW50cy5oIgogI2luY2x1ZGUgIkpT
QXJyYXkuaCIKICNpbmNsdWRlICJKU0Z1bmN0aW9uLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5o
IgorI2luY2x1ZGUgIlNjb3BlZEFyZ3VtZW50cy5oIgogI2luY2x1ZGUgIlN0cmluZ09iamVjdC5o
IgogI2luY2x1ZGUgIlZhbHVlUHJvZmlsZS5oIgogI2luY2x1ZGUgPHd0Zi9Cb3VuZHNDaGVja2Vk
UG9pbnRlci5oPgpAQCAtMTI3LDggKzEyOCwxMyBAQCB2b2lkIGR1bXBTcGVjdWxhdGlvbihQcmlu
dFN0cmVhbSYgb3V0LCBTCiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgaXNUb3Ag
PSBmYWxzZTsKICAgICAKLSAgICAgICAgICAgIGlmICh2YWx1ZSAmIFNwZWNBcmd1bWVudHMpCi0g
ICAgICAgICAgICAgICAgbXlPdXQucHJpbnQoIkFyZ3VtZW50cyIpOworICAgICAgICAgICAgaWYg
KHZhbHVlICYgU3BlY0RpcmVjdEFyZ3VtZW50cykKKyAgICAgICAgICAgICAgICBteU91dC5wcmlu
dCgiRGlyZWN0YXJndW1lbnRzIik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
aXNUb3AgPSBmYWxzZTsKKyAgICAKKyAgICAgICAgICAgIGlmICh2YWx1ZSAmIFNwZWNTY29wZWRB
cmd1bWVudHMpCisgICAgICAgICAgICAgICAgbXlPdXQucHJpbnQoIlNjb3BlZGFyZ3VtZW50cyIp
OwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGlzVG9wID0gZmFsc2U7CiAgICAg
CkBAIC0yMzIsOCArMjM4LDEwIEBAIHN0YXRpYyBjb25zdCBjaGFyKiBzcGVjdWxhdGlvblRvQWJi
cmV2aWEKICAgICAgICAgcmV0dXJuICI8RmxvYXQzMmFycmF5PiI7CiAgICAgaWYgKGlzRmxvYXQ2
NEFycmF5U3BlY3VsYXRpb24ocHJlZGljdGlvbikpCiAgICAgICAgIHJldHVybiAiPEZsb2F0NjRh
cnJheT4iOwotICAgIGlmIChpc0FyZ3VtZW50c1NwZWN1bGF0aW9uKHByZWRpY3Rpb24pKQotICAg
ICAgICByZXR1cm4gIjxBcmd1bWVudHM+IjsKKyAgICBpZiAoaXNEaXJlY3RBcmd1bWVudHNTcGVj
dWxhdGlvbihwcmVkaWN0aW9uKSkKKyAgICAgICAgcmV0dXJuICI8RGlyZWN0QXJndW1lbnRzPiI7
CisgICAgaWYgKGlzU2NvcGVkQXJndW1lbnRzU3BlY3VsYXRpb24ocHJlZGljdGlvbikpCisgICAg
ICAgIHJldHVybiAiPFNjb3BlZEFyZ3VtZW50cz4iOwogICAgIGlmIChpc1N0cmluZ09iamVjdFNw
ZWN1bGF0aW9uKHByZWRpY3Rpb24pKQogICAgICAgICByZXR1cm4gIjxTdHJpbmdPYmplY3Q+IjsK
ICAgICBpZiAoaXNTdHJpbmdPclN0cmluZ09iamVjdFNwZWN1bGF0aW9uKHByZWRpY3Rpb24pKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBl
LmgJKHJldmlzaW9uIDE4MDY5MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9T
cGVjdWxhdGVkVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01Miw4ICs1Miw5IEBAIHN0YXRpYyBj
b25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjVWludDMyQXIKIHN0YXRpYyBjb25zdCBTcGVjdWxhdGVk
VHlwZSBTcGVjRmxvYXQzMkFycmF5ICAgICAgID0gMHgwMDAwMDQwMDsgLy8gSXQncyBkZWZpbml0
ZWx5IGFuIFVpbnQxNkFycmF5IG9yIG9uZSBvZiBpdHMgc3ViY2xhc3Nlcy4KIHN0YXRpYyBjb25z
dCBTcGVjdWxhdGVkVHlwZSBTcGVjRmxvYXQ2NEFycmF5ICAgICAgID0gMHgwMDAwMDgwMDsgLy8g
SXQncyBkZWZpbml0ZWx5IGFuIFVpbnQxNkFycmF5IG9yIG9uZSBvZiBpdHMgc3ViY2xhc3Nlcy4K
IHN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjVHlwZWRBcnJheVZpZXcgICAgID0gU3Bl
Y0ludDhBcnJheSB8IFNwZWNJbnQxNkFycmF5IHwgU3BlY0ludDMyQXJyYXkgfCBTcGVjVWludDhB
cnJheSB8IFNwZWNVaW50OENsYW1wZWRBcnJheSB8IFNwZWNVaW50MTZBcnJheSB8IFNwZWNVaW50
MzJBcnJheSB8IFNwZWNGbG9hdDMyQXJyYXkgfCBTcGVjRmxvYXQ2NEFycmF5Owotc3RhdGljIGNv
bnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNBcmd1bWVudHMgICAgICAgICAgPSAweDAwMDAxMDAwOyAv
LyBJdCdzIGRlZmluaXRlbHkgYW4gQXJndW1lbnRzIG9iamVjdC4KLXN0YXRpYyBjb25zdCBTcGVj
dWxhdGVkVHlwZSBTcGVjU3RyaW5nT2JqZWN0ICAgICAgID0gMHgwMDAwMjAwMDsgLy8gSXQncyBk
ZWZpbml0ZWx5IGEgU3RyaW5nT2JqZWN0Lgorc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNw
ZWNEaXJlY3RBcmd1bWVudHMgICAgPSAweDAwMDAxMDAwOyAvLyBJdCdzIGRlZmluaXRlbHkgYSBE
aXJlY3RBcmd1bWVudHMgb2JqZWN0Lgorc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNT
Y29wZWRBcmd1bWVudHMgICAgPSAweDAwMDAyMDAwOyAvLyBJdCdzIGRlZmluaXRlbHkgYSBTY29w
ZWRBcmd1bWVudHMgb2JqZWN0Lgorc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNTdHJp
bmdPYmplY3QgICAgICAgPSAweDAwMDA0MDAwOyAvLyBJdCdzIGRlZmluaXRlbHkgYSBTdHJpbmdP
YmplY3QuCiBzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY09iamVjdE90aGVyICAgICAg
ICA9IDB4MDAwMDgwMDA7IC8vIEl0J3MgZGVmaW5pdGVseSBhbiBvYmplY3QgYnV0IG5vdCBKU0Zp
bmFsT2JqZWN0LCBKU0FycmF5LCBvciBKU0Z1bmN0aW9uLgogc3RhdGljIGNvbnN0IFNwZWN1bGF0
ZWRUeXBlIFNwZWNPYmplY3QgICAgICAgICAgICAgPSAweDAwMDBmZmZmOyAvLyBCaXRtYXNrIHVz
ZWQgZm9yIHRlc3RpbmcgZm9yIGFueSBraW5kIG9mIG9iamVjdCBwcmVkaWN0aW9uLgogc3RhdGlj
IGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNTdHJpbmdJZGVudCAgICAgICAgPSAweDAwMDEwMDAw
OyAvLyBJdCdzIGRlZmluaXRlbHkgYSBKU1N0cmluZywgYW5kIGl0J3MgYW4gaWRlbnRpZmllci4K
QEAgLTE5Myw5ICsxOTQsMTQgQEAgaW5saW5lIGJvb2wgaXNGbG9hdDY0QXJyYXlTcGVjdWxhdGlv
bihTcAogICAgIHJldHVybiB2YWx1ZSA9PSBTcGVjRmxvYXQ2NEFycmF5OwogfQogCi1pbmxpbmUg
Ym9vbCBpc0FyZ3VtZW50c1NwZWN1bGF0aW9uKFNwZWN1bGF0ZWRUeXBlIHZhbHVlKQoraW5saW5l
IGJvb2wgaXNEaXJlY3RBcmd1bWVudHNTcGVjdWxhdGlvbihTcGVjdWxhdGVkVHlwZSB2YWx1ZSkK
IHsKLSAgICByZXR1cm4gISF2YWx1ZSAmJiAodmFsdWUgJiBTcGVjQXJndW1lbnRzKSA9PSB2YWx1
ZTsKKyAgICByZXR1cm4gdmFsdWUgPT0gU3BlY0RpcmVjdEFyZ3VtZW50czsKK30KKworaW5saW5l
IGJvb2wgaXNTY29wZWRBcmd1bWVudHNTcGVjdWxhdGlvbihTcGVjdWxhdGVkVHlwZSB2YWx1ZSkK
K3sKKyAgICByZXR1cm4gdmFsdWUgPT0gU3BlY1Njb3BlZEFyZ3VtZW50czsKIH0KIAogaW5saW5l
IGJvb2wgaXNBY3Rpb25hYmxlSW50TXV0YWJsZUFycmF5U3BlY3VsYXRpb24oU3BlY3VsYXRlZFR5
cGUgdmFsdWUpCkBAIC0yMjQsMTMgKzIzMCwxNCBAQCBpbmxpbmUgYm9vbCBpc0FjdGlvbmFibGVU
eXBlZE11dGFibGVBcnJhCiBpbmxpbmUgYm9vbCBpc0FjdGlvbmFibGVNdXRhYmxlQXJyYXlTcGVj
dWxhdGlvbihTcGVjdWxhdGVkVHlwZSB2YWx1ZSkKIHsKICAgICByZXR1cm4gaXNBcnJheVNwZWN1
bGF0aW9uKHZhbHVlKQotICAgICAgICB8fCBpc0FyZ3VtZW50c1NwZWN1bGF0aW9uKHZhbHVlKQog
ICAgICAgICB8fCBpc0FjdGlvbmFibGVUeXBlZE11dGFibGVBcnJheVNwZWN1bGF0aW9uKHZhbHVl
KTsKIH0KIAogaW5saW5lIGJvb2wgaXNBY3Rpb25hYmxlQXJyYXlTcGVjdWxhdGlvbihTcGVjdWxh
dGVkVHlwZSB2YWx1ZSkKIHsKICAgICByZXR1cm4gaXNTdHJpbmdTcGVjdWxhdGlvbih2YWx1ZSkK
KyAgICAgICAgfHwgaXNEaXJlY3RBcmd1bWVudHNTcGVjdWxhdGlvbih2YWx1ZSkKKyAgICAgICAg
fHwgaXNTY29wZWRBcmd1bWVudHNTcGVjdWxhdGlvbih2YWx1ZSkKICAgICAgICAgfHwgaXNBY3Rp
b25hYmxlTXV0YWJsZUFycmF5U3BlY3VsYXRpb24odmFsdWUpOwogfQogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJh
dG9yLmNwcAkocmV2aXNpb24gMTgwNjkxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNiw3ICsx
MTYsNyBAQCBQYXJzZXJFcnJvciBCeXRlY29kZUdlbmVyYXRvcjo6Z2VuZXJhdGUoCiAgICAgbV9j
b2RlQmxvY2stPnNocmlua1RvRml0KCk7CiAKICAgICBpZiAobV9jb2RlQmxvY2stPnN5bWJvbFRh
YmxlKCkgJiYgIW1fY29kZUJsb2NrLT52bSgpLT50eXBlUHJvZmlsZXIoKSkKLSAgICAgICAgbV9j
b2RlQmxvY2stPnNldFN5bWJvbFRhYmxlKG1fY29kZUJsb2NrLT5zeW1ib2xUYWJsZSgpLT5jbG9u
ZUNhcHR1cmVkTmFtZXMoKm1fY29kZUJsb2NrLT52bSgpKSk7CisgICAgICAgIG1fY29kZUJsb2Nr
LT5zZXRTeW1ib2xUYWJsZShtX2NvZGVCbG9jay0+c3ltYm9sVGFibGUoKS0+Y2xvbmVJZ25vcmlu
Z1N0YWNrKCptX2NvZGVCbG9jay0+dm0oKSkpOwogCiAgICAgaWYgKG1fZXhwcmVzc2lvblRvb0Rl
ZXApCiAgICAgICAgIHJldHVybiBQYXJzZXJFcnJvcihQYXJzZXJFcnJvcjo6T3V0T2ZNZW1vcnkp
OwpAQCAtMTI0LDE3ICsxMjQsMjggQEAgUGFyc2VyRXJyb3IgQnl0ZWNvZGVHZW5lcmF0b3I6Omdl
bmVyYXRlKAogfQogCiBib29sIEJ5dGVjb2RlR2VuZXJhdG9yOjphZGRWYXIoCi0gICAgY29uc3Qg
SWRlbnRpZmllciYgaWRlbnQsIENvbnN0YW50TW9kZSBjb25zdGFudE1vZGUsIFdhdGNoTW9kZSB3
YXRjaE1vZGUsIFJlZ2lzdGVySUQqJiByMCkKKyAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwg
Q29uc3RhbnRNb2RlIGNvbnN0YW50TW9kZSwgVmFyS2luZCB2YXJLaW5kLCBXYXRjaE1vZGUgd2F0
Y2hNb2RlLAorICAgIFJlZ2lzdGVySUQqJiByMCkKIHsKICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8
c2l6ZV90PihtX2NvZGVCbG9jay0+bV9udW1WYXJzKSA9PSBtX2NhbGxlZVJlZ2lzdGVycy5zaXpl
KCkpOwogICAgIAogICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKHN5bWJvbFRhYmxlKCku
bV9sb2NrKTsKLSAgICBpbnQgaW5kZXggPSB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChtX2NhbGxl
ZVJlZ2lzdGVycy5zaXplKCkpLm9mZnNldCgpOwotICAgIFN5bWJvbFRhYmxlRW50cnkgbmV3RW50
cnkoaW5kZXgsIGNvbnN0YW50TW9kZSA9PSBJc0NvbnN0YW50ID8gUmVhZE9ubHkgOiAwKTsKKyAg
ICBWYXJPZmZzZXQgdmFyT2Zmc2V0OworICAgIGlmICh2YXJLaW5kID09IEhlYXBWYXJLaW5kKQor
ICAgICAgICB2YXJPZmZzZXQgPSBWYXJPZmZzZXQoSGVhcE9mZnNldChtX251bUNhcHR1cmVkVmFy
aWFibGVzKyspKTsKKyAgICBlbHNlIHsKKyAgICAgICAgQVNTRVJUKHZhcktpbmQgPT0gU3RhY2tW
YXJLaW5kKTsKKyAgICAgICAgdmFyT2Zmc2V0ID0gVmFyT2Zmc2V0KHZpcnR1YWxSZWdpc3RlckZv
ckxvY2FsKG1fY2FsbGVlUmVnaXN0ZXJzLnNpemUoKSkpOworICAgIH0KKyAgICBTeW1ib2xUYWJs
ZUVudHJ5IG5ld0VudHJ5KHZhck9mZnNldCwgY29uc3RhbnRNb2RlID09IElzQ29uc3RhbnQgPyBS
ZWFkT25seSA6IDApOwogICAgIFN5bWJvbFRhYmxlOjpNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBz
eW1ib2xUYWJsZSgpLmFkZChsb2NrZXIsIGlkZW50LmltcGwoKSwgbmV3RW50cnkpOwogCiAgICAg
aWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkgewotICAgICAgICByMCA9ICZyZWdpc3RlckZvcihyZXN1
bHQuaXRlcmF0b3ItPnZhbHVlLmdldEluZGV4KCkpOworICAgICAgICBSRUxFQVNFX0FTU0VSVCh2
YXJLaW5kID09IHJlc3VsdC5pdGVyYXRvci0+dmFsdWUudmFyT2Zmc2V0KCkua2luZCgpKTsKKyAg
ICAgICAgaWYgKHZhcktpbmQgPT0gSGVhcFZhcktpbmQpCisgICAgICAgICAgICByMCA9IG51bGxw
dHI7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHIwID0gJnJlZ2lzdGVyRm9yKHJlc3VsdC5p
dGVyYXRvci0+dmFsdWUudmFyT2Zmc2V0KCkpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
fQogICAgIApAQCAtMTQ0LDcgKzE1NSwxMCBAQCBib29sIEJ5dGVjb2RlR2VuZXJhdG9yOjphZGRW
YXIoCiAgICAgICAgIG1fd2F0Y2hhYmxlVmFyaWFibGVzLmFwcGVuZChpZGVudCk7CiAgICAgfQog
ICAgIAotICAgIHIwID0gYWRkVmFyKCk7CisgICAgaWYgKHZhcktpbmQgPT0gSGVhcFZhcktpbmQp
CisgICAgICAgIHIwID0gbnVsbHB0cjsKKyAgICBlbHNlCisgICAgICAgIHIwID0gYWRkVmFyKCk7
CiAgICAgCiAgICAgQVNTRVJUKHdhdGNoTW9kZSA9PSBOb3RXYXRjaGFibGUgfHwgc3RhdGljX2Nh
c3Q8c2l6ZV90PihtX2NvZGVCbG9jay0+bV9udW1WYXJzKSA9PSBtX3dhdGNoYWJsZVZhcmlhYmxl
cy5zaXplKCkpOwogICAgIApAQCAtMjMxLDcgKzI0NSw2IEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjpC
eXRlY29kZUdlbmVyYXRvcihWTSYKICAgICB9CiAgICAgUmVnaXN0ZXJJRCogbG9jYWxBcmd1bWVu
dHNSZWdpc3RlciA9IG51bGxwdHI7CiAgICAgUmVnaXN0ZXJJRCogc2NyYXRjaCA9IGFkZFZhcigp
OwotICAgIG1fc3ltYm9sVGFibGUtPnNldENhcHR1cmVTdGFydCh2aXJ0dWFsUmVnaXN0ZXJGb3JM
b2NhbChtX2NvZGVCbG9jay0+bV9udW1WYXJzKS5vZmZzZXQoKSk7CiAKICAgICBpZiAoZnVuY3Rp
b25Ob2RlLT51c2VzQXJndW1lbnRzKCkgfHwgY29kZUJsb2NrLT51c2VzRXZhbCgpKSB7IC8vIE1h
eSByZWlmeSBhcmd1bWVudHMgb2JqZWN0LgogICAgICAgICBSZWdpc3RlcklEKiB1bm1vZGlmaWVk
QXJndW1lbnRzUmVnaXN0ZXIgPSBhZGRWYXIoKTsgLy8gQW5vbnltb3VzLCBzbyBpdCBjYW4ndCBi
ZSBtb2RpZmllZCBieSB1c2VyIGNvZGUuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCShyZXZpc2lvbiAxODA2
OTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJh
dG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTYxMywxNSArNjEzLDE1IEBAIG5hbWVzcGFjZSBKU0Mg
ewogCiAgICAgICAgIC8vIEFkZHMgYSB2YXIgc2xvdCBhbmQgbWFwcyBpdCB0byB0aGUgbmFtZSBp
ZGVudCBpbiBzeW1ib2xUYWJsZSgpLgogICAgICAgICBlbnVtIFdhdGNoTW9kZSB7IElzV2F0Y2hh
YmxlLCBOb3RXYXRjaGFibGUgfTsKLSAgICAgICAgUmVnaXN0ZXJJRCogYWRkVmFyKGNvbnN0IElk
ZW50aWZpZXImIGlkZW50LCBDb25zdGFudE1vZGUgY29uc3RhbnRNb2RlLCBXYXRjaE1vZGUgd2F0
Y2hNb2RlKQorICAgICAgICBSZWdpc3RlcklEKiBhZGRWYXIoY29uc3QgSWRlbnRpZmllciYgaWRl
bnQsIENvbnN0YW50TW9kZSBjb25zdGFudE1vZGUsIFZhcktpbmQgdmFyS2luZCwgV2F0Y2hNb2Rl
IHdhdGNoTW9kZSkKICAgICAgICAgewogICAgICAgICAgICAgUmVnaXN0ZXJJRCogbG9jYWw7Ci0g
ICAgICAgICAgICBhZGRWYXIoaWRlbnQsIGNvbnN0YW50TW9kZSwgd2F0Y2hNb2RlLCBsb2NhbCk7
CisgICAgICAgICAgICBhZGRWYXIoaWRlbnQsIGNvbnN0YW50TW9kZSwgdmFyS2luZCwgd2F0Y2hN
b2RlLCBsb2NhbCk7CiAgICAgICAgICAgICByZXR1cm4gbG9jYWw7CiAgICAgICAgIH0KIAogICAg
ICAgICAvLyBEaXR0by4gUmV0dXJucyB0cnVlIGlmIGEgbmV3IFJlZ2lzdGVySUQgd2FzIGFkZGVk
LCBmYWxzZSBpZiBhIHByZS1leGlzdGluZyBSZWdpc3RlcklEIHdhcyByZS11c2VkLgotICAgICAg
ICBib29sIGFkZFZhcihjb25zdCBJZGVudGlmaWVyJiwgQ29uc3RhbnRNb2RlLCBXYXRjaE1vZGUs
IFJlZ2lzdGVySUQqJik7CisgICAgICAgIGJvb2wgYWRkVmFyKGNvbnN0IElkZW50aWZpZXImLCBD
b25zdGFudE1vZGUsIFZhcktpbmQsIFdhdGNoTW9kZSwgUmVnaXN0ZXJJRComKTsKICAgICAgICAg
CiAgICAgICAgIC8vIEFkZHMgYW4gYW5vbnltb3VzIHZhciBzbG90LiBUbyBnaXZlIHRoaXMgc2xv
dCBhIG5hbWUsIGFkZCBpdCB0byBzeW1ib2xUYWJsZSgpLgogICAgICAgICBSZWdpc3RlcklEKiBh
ZGRWYXIoKQpAQCAtNzc0LDYgKzc3NCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBWZWN0
b3I8SWRlbnRpZmllciwgMTY+IG1fd2F0Y2hhYmxlVmFyaWFibGVzOwogICAgICAgICBTZWdtZW50
ZWRWZWN0b3I8UmVnaXN0ZXJJRCwgMzI+IG1fY29uc3RhbnRQb29sUmVnaXN0ZXJzOwogICAgICAg
ICBTZWdtZW50ZWRWZWN0b3I8UmVnaXN0ZXJJRCwgMzI+IG1fY2FsbGVlUmVnaXN0ZXJzOworICAg
ICAgICB1bnNpZ25lZCBtX251bUNhcHR1cmVkVmFyaWFibGVzOwogICAgICAgICBTZWdtZW50ZWRW
ZWN0b3I8UmVnaXN0ZXJJRCwgMzI+IG1fcGFyYW1ldGVyczsKICAgICAgICAgU2VnbWVudGVkVmVj
dG9yPExhYmVsLCAzMj4gbV9sYWJlbHM7CiAgICAgICAgIExhYmVsU2NvcGVTdG9yZSBtX2xhYmVs
U2NvcGVzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEhlYXAu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SGVh
cC5oCShyZXZpc2lvbiAxODA2OTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fi
c3RyYWN0SGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw2IEBAIG5hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICBtYWNybyhXb3JsZCkgXAogICAgIG1hY3JvKFN0YWNr
KSBcCiAgICAgbWFjcm8oSGVhcCkgXAotICAgIG1hY3JvKEFyZ3VtZW50c19yZWdpc3RlcnMpIFwK
ICAgICBtYWNybyhCdXR0ZXJmbHlfcHVibGljTGVuZ3RoKSBcCiAgICAgbWFjcm8oQnV0dGVyZmx5
X3ZlY3Rvckxlbmd0aCkgXAogICAgIG1hY3JvKEdldHRlclNldHRlcl9nZXR0ZXIpIFwKQEAgLTY1
LDcgKzY0LDggQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAgIG1hY3JvKElu
ZGV4ZWRDb250aWd1b3VzUHJvcGVydGllcykgXAogICAgIG1hY3JvKEluZGV4ZWRBcnJheVN0b3Jh
Z2VQcm9wZXJ0aWVzKSBcCiAgICAgbWFjcm8oQXJyYXlTdG9yYWdlUHJvcGVydGllcykgXAotICAg
IG1hY3JvKFZhcmlhYmxlcykgXAorICAgIG1hY3JvKERpcmVjdEFyZ3VtZW50c1Byb3BlcnRpZXMp
IFwKKyAgICBtYWNybyhTY29wZWRBcmd1bWVudHNQcm9wZXJ0aWVzKSBcCiAgICAgbWFjcm8oVHlw
ZWRBcnJheVByb3BlcnRpZXMpIFwKICAgICBtYWNybyhIZWFwT2JqZWN0Q291bnQpIC8qIFVzZWQg
dG8gcmVmbGVjdCB0aGUgZmFjdCB0aGF0IHNvbWUgYWxsb2NhdGlvbnMgcmV2ZWFsIG9iamVjdCBp
ZGVudGl0eSAqL1wKICAgICBtYWNybyhSZWdFeHBTdGF0ZSkgXApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGlu
ZXMuaAkocmV2aXNpb24gMTgwNjkxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
YnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDMwLDcgKzEw
MzAsOCBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAg
ICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChtX2dyYXBoLCBt
X2dyYXBoLm1fdm0uc3RyaW5nU3RydWN0dXJlLmdldCgpKTsKICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6CisgICAgICAgIGNhc2UgQXJyYXk6OkRpcmVj
dEFyZ3VtZW50czoKKyAgICAgICAgY2FzZSBBcnJheTo6U2NvcGVkQXJndW1lbnRzOgogICAgICAg
ICAgICAgZm9yTm9kZShub2RlKS5tYWtlSGVhcFRvcCgpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIGNhc2UgQXJyYXk6OkludDMyOgpAQCAtMTYxNyw4ICsxNjE4LDExIEBAIGJvb2wgQWJz
dHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgY2FzZSBBcnJheTo6QXJy
YXlTdG9yYWdlOgogICAgICAgICBjYXNlIEFycmF5OjpTbG93UHV0QXJyYXlTdG9yYWdlOgogICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czoKLSAgICAgICAg
ICAgIGZpbHRlcihub2RlLT5jaGlsZDEoKSwgU3BlY0FyZ3VtZW50cyk7CisgICAgICAgIGNhc2Ug
QXJyYXk6OkRpcmVjdEFyZ3VtZW50czoKKyAgICAgICAgICAgIGZpbHRlcihub2RlLT5jaGlsZDEo
KSwgU3BlY0RpcmVjdEFyZ3VtZW50cyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBBcnJheTo6U2NvcGVkQXJndW1lbnRzOgorICAgICAgICAgICAgZmlsdGVyKG5vZGUtPmNoaWxk
MSgpLCBTcGVjU2NvcGVkQXJndW1lbnRzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBj
YXNlIEFycmF5OjpJbnQ4QXJyYXk6CiAgICAgICAgICAgICBmaWx0ZXIobm9kZS0+Y2hpbGQxKCks
IFNwZWNJbnQ4QXJyYXkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJh
eU1vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJy
YXlNb2RlLmNwcAkocmV2aXNpb24gMTgwNjkxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBcnJheU1vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMiwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE5Myw4ICsxOTMs
MTUgQEAgQXJyYXlNb2RlIEFycmF5TW9kZTo6cmVmaW5lKAogICAgICAgICBpZiAoaXNTdHJpbmdT
cGVjdWxhdGlvbihiYXNlKSkKICAgICAgICAgICAgIHJldHVybiB3aXRoVHlwZShBcnJheTo6U3Ry
aW5nKTsKICAgICAgICAgCi0gICAgICAgIGlmIChpc0FyZ3VtZW50c1NwZWN1bGF0aW9uKGJhc2Up
KQotICAgICAgICAgICAgcmV0dXJuIHdpdGhUeXBlKEFycmF5OjpBcmd1bWVudHMpOworICAgICAg
ICBpZiAoaXNEaXJlY3RBcmd1bWVudHNTcGVjdWxhdGlvbihiYXNlKSB8fCBpc1Njb3BlZEFyZ3Vt
ZW50c1NwZWN1bGF0aW9uKGJhc2UpKSB7CisgICAgICAgICAgICAvLyBIYW5kbGUgb3V0LW9mLWJv
dW5kcyBhY2Nlc3NlcyBhcyBnZW5lcmljIGFjY2Vzc2VzLgorICAgICAgICAgICAgaWYgKGdyYXBo
Lmhhc0V4aXRTaXRlKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgT3V0T2ZCb3VuZHMpIHx8ICFpc0lu
Qm91bmRzKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIEFycmF5TW9kZShBcnJheTo6R2VuZXJp
Yyk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChpc0RpcmVjdEFyZ3VtZW50c1NwZWN1
bGF0aW9uKGJhc2UpKQorICAgICAgICAgICAgICAgIHJldHVybiB3aXRoVHlwZShBcnJheTo6RGly
ZWN0QXJndW1lbnRzKTsKKyAgICAgICAgICAgIHJldHVybiB3aXRoVHlwZShBcnJheTo6U2NvcGVk
QXJndW1lbnRzKTsKKyAgICAgICAgfQogICAgICAgICAKICAgICAgICAgQXJyYXlNb2RlIHJlc3Vs
dDsKICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CkBAIC0zOTIsOCArMzk5LDExIEBAIGJv
b2wgQXJyYXlNb2RlOjphbHJlYWR5Q2hlY2tlZChHcmFwaCYgZ3IKICAgICAgICAgICAgIHJldHVy
biB0cnVlOwogICAgICAgICB9IH0KICAgICAgICAgCi0gICAgY2FzZSBBcnJheTo6QXJndW1lbnRz
OgotICAgICAgICByZXR1cm4gc3BlY3VsYXRpb25DaGVja2VkKHZhbHVlLm1fdHlwZSwgU3BlY0Fy
Z3VtZW50cyk7CisgICAgY2FzZSBBcnJheTo6RGlyZWN0QXJndW1lbnRzOgorICAgICAgICByZXR1
cm4gc3BlY3VsYXRpb25DaGVja2VkKHZhbHVlLm1fdHlwZSwgU3BlY0RpcmVjdEFyZ3VtZW50cyk7
CisgICAgICAgIAorICAgIGNhc2UgQXJyYXk6OlNjb3BlZEFyZ3VtZW50czoKKyAgICAgICAgcmV0
dXJuIHNwZWN1bGF0aW9uQ2hlY2tlZCh2YWx1ZS5tX3R5cGUsIFNwZWNTY29wZWRBcmd1bWVudHMp
OwogICAgICAgICAKICAgICBjYXNlIEFycmF5OjpJbnQ4QXJyYXk6CiAgICAgICAgIHJldHVybiBz
cGVjdWxhdGlvbkNoZWNrZWQodmFsdWUubV90eXBlLCBTcGVjSW50OEFycmF5KTsKQEAgLTQ1Nyw4
ICs0NjcsMTAgQEAgY29uc3QgY2hhciogYXJyYXlUeXBlVG9TdHJpbmcoQXJyYXk6OlR5cAogICAg
ICAgICByZXR1cm4gIkFycmF5U3RvcmFnZSI7CiAgICAgY2FzZSBBcnJheTo6U2xvd1B1dEFycmF5
U3RvcmFnZToKICAgICAgICAgcmV0dXJuICJTbG93UHV0QXJyYXlTdG9yYWdlIjsKLSAgICBjYXNl
IEFycmF5OjpBcmd1bWVudHM6Ci0gICAgICAgIHJldHVybiAiQXJndW1lbnRzIjsKKyAgICBjYXNl
IEFycmF5OjpEaXJlY3RBcmd1bWVudHM6CisgICAgICAgIHJldHVybiAiRGlyZWN0QXJndW1lbnRz
IjsKKyAgICBjYXNlIEFycmF5OjpTY29wZWRBcmd1bWVudHM6CisgICAgICAgIHJldHVybiAiU2Nv
cGVkQXJndW1lbnRzIjsKICAgICBjYXNlIEFycmF5OjpJbnQ4QXJyYXk6CiAgICAgICAgIHJldHVy
biAiSW50OEFycmF5IjsKICAgICBjYXNlIEFycmF5OjpJbnQxNkFycmF5OgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5oCShyZXZpc2lvbiAxODA2OTEpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMywgMjAxNCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTY1LDcgKzY1LDkgQEAgZW51bSBUeXBlIHsKICAgICBBcnJheVN0b3JhZ2UsCiAg
ICAgU2xvd1B1dEFycmF5U3RvcmFnZSwKICAgICAKLSAgICBBcmd1bWVudHMsCisgICAgRGlyZWN0
QXJndW1lbnRzLAorICAgIFNjb3BlZEFyZ3VtZW50cywKKyAgICAKICAgICBJbnQ4QXJyYXksCiAg
ICAgSW50MTZBcnJheSwKICAgICBJbnQzMkFycmF5LApAQCAtMjk0LDcgKzI5Niw4IEBAIHB1Ymxp
YzoKICAgICAgICAgY2FzZSBBcnJheTo6VW5wcm9maWxlZDoKICAgICAgICAgY2FzZSBBcnJheTo6
Rm9yY2VFeGl0OgogICAgICAgICBjYXNlIEFycmF5OjpHZW5lcmljOgotICAgICAgICBjYXNlIEFy
cmF5OjpBcmd1bWVudHM6CisgICAgICAgIGNhc2UgQXJyYXk6OkRpcmVjdEFyZ3VtZW50czoKKyAg
ICAgICAgY2FzZSBBcnJheTo6U2NvcGVkQXJndW1lbnRzOgogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0zMjAs
MTEgKzMyMyw5IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHN3aXRjaCAodHlwZSgpKSB7CiAg
ICAgICAgIGNhc2UgQXJyYXk6OlN0cmluZzoKKyAgICAgICAgY2FzZSBBcnJheTo6RGlyZWN0QXJn
dW1lbnRzOgorICAgICAgICBjYXNlIEFycmF5OjpTY29wZWRBcmd1bWVudHM6CiAgICAgICAgICAg
ICByZXR1cm4gQXJyYXlNb2RlKEFycmF5OjpHZW5lcmljKTsKLSNpZiBVU0UoSlNWQUxVRTMyXzY0
KQotICAgICAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6Ci0gICAgICAgICAgICByZXR1cm4gQXJy
YXlNb2RlKEFycmF5OjpHZW5lcmljKTsKLSNlbmRpZgogICAgICAgICBkZWZhdWx0OgogICAgICAg
ICAgICAgcmV0dXJuICp0aGlzOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Nsb2JiZXJpemUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkocmV2aXNpb24gMTgwNjkxKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2NiwxMCAr
NDY2LDE0IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICAg
ICAgICAgIGRlZihQdXJlVmFsdWUobm9kZSwgbW9kZS5hc1dvcmQoKSkpOwogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czoKLSAg
ICAgICAgICAgIHJlYWQoQXJndW1lbnRzX3JlZ2lzdGVycyk7Ci0gICAgICAgICAgICByZWFkKFZh
cmlhYmxlcyk7Ci0gICAgICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEluZGV4ZWRQcm9wZXJ0eUxv
YywgVmFyaWFibGVzLCBub2RlLT5jaGlsZDEoKSwgbm9kZS0+Y2hpbGQyKCkpLCBub2RlKTsKKyAg
ICAgICAgY2FzZSBBcnJheTo6RGlyZWN0QXJndW1lbnRzOgorICAgICAgICAgICAgcmVhZChEaXJl
Y3RBcmd1bWVudHNQcm9wZXJ0aWVzKTsKKyAgICAgICAgICAgIGRlZihIZWFwTG9jYXRpb24oSW5k
ZXhlZFByb3BlcnR5TG9jLCBEaXJlY3RBcmd1bWVudHNQcm9wZXJ0aWVzLCBub2RlLT5jaGlsZDEo
KSwgbm9kZS0+Y2hpbGQyKCkpLCBub2RlKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIAorICAgICAgICBjYXNlIEFycmF5OjpTY29wZWRBcmd1bWVudHM6CisgICAgICAgICAgICBy
ZWFkKFNjb3BlZEFyZ3VtZW50c1Byb3BlcnRpZXMpOworICAgICAgICAgICAgZGVmKEhlYXBMb2Nh
dGlvbihJbmRleGVkUHJvcGVydHlMb2MsIFNjb3BlZEFyZ3VtZW50c1Byb3BlcnRpZXMsIG5vZGUt
PmNoaWxkMSgpLCBub2RlLT5jaGlsZDIoKSksIG5vZGUpOwogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQXJyYXk6OkludDMyOgpAQCAtNTYwLDEzICs1NjQs
NiBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgICAgICAg
ICB3cml0ZShIZWFwKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIAotICAgICAg
ICBjYXNlIEFycmF5OjpBcmd1bWVudHM6Ci0gICAgICAgICAgICByZWFkKEFyZ3VtZW50c19yZWdp
c3RlcnMpOwotICAgICAgICAgICAgcmVhZChNaXNjRmllbGRzKTsKLSAgICAgICAgICAgIHdyaXRl
KFZhcmlhYmxlcyk7Ci0gICAgICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEluZGV4ZWRQcm9wZXJ0
eUxvYywgVmFyaWFibGVzLCBiYXNlLCBpbmRleCksIHZhbHVlKTsKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFycmF5OjpJbnQzMjoKICAgICAgICAgICAg
IGlmIChub2RlLT5hcnJheU1vZGUoKS5pc091dE9mQm91bmRzKCkpIHsKICAgICAgICAgICAgICAg
ICByZWFkKFdvcmxkKTsKQEAgLTc2MSw3ICs3NTgsOCBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgm
IGdyYXBoLCBOb2RlKiBub2RlCiAgICAgICAgICAgICBkZWYoUHVyZVZhbHVlKG5vZGUsIG1vZGUu
YXNXb3JkKCkpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIAotICAgICAgICBj
YXNlIEFycmF5OjpBcmd1bWVudHM6CisgICAgICAgIGNhc2UgQXJyYXk6OkRpcmVjdEFyZ3VtZW50
czoKKyAgICAgICAgY2FzZSBBcnJheTo6U2NvcGVkQXJndW1lbnRzOgogICAgICAgICAgICAgcmVh
ZChNaXNjRmllbGRzKTsKICAgICAgICAgICAgIGRlZihIZWFwTG9jYXRpb24oQXJyYXlMZW5ndGhM
b2MsIE1pc2NGaWVsZHMsIG5vZGUtPmNoaWxkMSgpKSwgbm9kZSk7CiAgICAgICAgICAgICByZXR1
cm47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJ
KHJldmlzaW9uIDE4MDY5MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQ
aGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY4Miw3ICs2ODIsNiBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgY2FzZSBBcnJheTo6Q29udGlndW91czoKICAgICAgICAgICAgIGNhc2UgQXJyYXk6
OkFycmF5U3RvcmFnZToKICAgICAgICAgICAgIGNhc2UgQXJyYXk6OlNsb3dQdXRBcnJheVN0b3Jh
Z2U6Ci0gICAgICAgICAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6CiAgICAgICAgICAgICAgICAg
Zml4RWRnZTxLbm93bkNlbGxVc2U+KGNoaWxkMSk7CiAgICAgICAgICAgICAgICAgZml4RWRnZTxJ
bnQzMlVzZT4oY2hpbGQyKTsKICAgICAgICAgICAgICAgICBpbnNlcnRTdG9yZUJhcnJpZXIobV9p
bmRleEluQmxvY2ssIGNoaWxkMSwgY2hpbGQzKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMTgwNjkxKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjU5OCw4ICsyNTk4LDExIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgY2FzZSBBcnJheTo6U3RyaW5nOgogICAgICAgICAg
ICAgY29tcGlsZUdldEJ5VmFsT25TdHJpbmcobm9kZSk7CiAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBBcnJheTo6QXJndW1lbnRzOgotICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFs
T25Bcmd1bWVudHMobm9kZSk7CisgICAgICAgIGNhc2UgQXJyYXk6OkRpcmVjdEFyZ3VtZW50czoK
KyAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uRGlyZWN0QXJndW1lbnRzKG5vZGUpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQXJyYXk6OlNjb3BlZEFyZ3VtZW50czoKKyAg
ICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uU2NvcGVkQXJndW1lbnRzKG5vZGUpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6IHsKICAgICAgICAgICAgIFR5cGVkQXJyYXlU
eXBlIHR5cGUgPSBub2RlLT5hcnJheU1vZGUoKS50eXBlZEFycmF5VHlwZSgpOwpAQCAtMjgyOSw0
NyArMjgzMiw2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgY2FzZSBB
cnJheTo6QXJndW1lbnRzOiB7Ci0gICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlz
LCBjaGlsZDMpOwotICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7Ci0gICAg
ICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaDIodGhpcyk7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIEdQUlJlZyB2YWx1ZVJlZyA9IHZhbHVlLmdwcigpOwotICAgICAgICAgICAgR1BSUmVn
IHNjcmF0Y2hSZWcgPSBzY3JhdGNoLmdwcigpOwotICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2gy
UmVnID0gc2NyYXRjaDIuZ3ByKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICghbV9j
b21waWxlT2theSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgIC8vIFR3
byByZWFsbHkgbGFtZSBjaGVja3MuCi0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAg
ICAgICAgICAgICAgIFVuY291bnRhYmxlLCBKU1ZhbHVlU291cmNlKCksIDAsCi0gICAgICAgICAg
ICAgICAgbV9qaXQuYnJhbmNoMzIoCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLAotICAgICAgICAgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBBcmd1bWVudHM6Om9mZnNldE9mTnVtQXJndW1lbnRz
KCkpKSk7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAgICAgICAgICAgIFVu
Y291bnRhYmxlLCBKU1ZhbHVlU291cmNlKCksIDAsCi0gICAgICAgICAgICAgICAgbV9qaXQuYnJh
bmNoVGVzdFB0cigKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8s
Ci0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKAotICAgICAgICAg
ICAgICAgICAgICAgICAgYmFzZVJlZywgQXJndW1lbnRzOjpvZmZzZXRPZlNsb3dBcmd1bWVudERh
dGEoKSkpKTsKLQotICAgICAgICAgICAgbV9qaXQubW92ZShwcm9wZXJ0eVJlZywgc2NyYXRjaDJS
ZWcpOwotICAgICAgICAgICAgbV9qaXQuc2lnbkV4dGVuZDMyVG9QdHIoc2NyYXRjaDJSZWcsIHNj
cmF0Y2gyUmVnKTsKLSAgICAgICAgICAgIG1faml0LmxvYWRQdHIoCi0gICAgICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgQXJndW1lbnRzOjpvZmZzZXRPZlJlZ2lz
dGVycygpKSwKLSAgICAgICAgICAgICAgICBzY3JhdGNoUmVnKTsKLSAgICAgICAgICAgIAotICAg
ICAgICAgICAgbV9qaXQuc3RvcmU2NCgKLSAgICAgICAgICAgICAgICB2YWx1ZVJlZywKLSAgICAg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KAotICAgICAgICAgICAgICAgICAg
ICBzY3JhdGNoUmVnLCBzY3JhdGNoMlJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsCi0g
ICAgICAgICAgICAgICAgICAgIENhbGxGcmFtZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCkgKiBzaXpl
b2YoUmVnaXN0ZXIpICsgc2l6ZW9mKFJlZ2lzdGVyKSkpOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICBub1Jlc3VsdChub2RlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg
ICAgICAgICAKICAgICAgICAgZGVmYXVsdDogewogICAgICAgICAgICAgVHlwZWRBcnJheVR5cGUg
dHlwZSA9IGFycmF5TW9kZS50eXBlZEFycmF5VHlwZSgpOwogICAgICAgICAgICAgaWYgKGlzSW50
KHR5cGUpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVC5jcHAJKHJldmlzaW9uIDE4MDY5MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MjIsOSArNzIyLDEy
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNoZWNrQXJyYXkoTm9kZSogbm8KICAgICAgICAgbm9S
ZXN1bHQobV9jdXJyZW50Tm9kZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgY2FzZSBB
cnJheTo6QXJndW1lbnRzOgotICAgICAgICBzcGVjdWxhdGVDZWxsVHlwZVdpdGhvdXRUeXBlRmls
dGVyaW5nKG5vZGUtPmNoaWxkMSgpLCBiYXNlUmVnLCBBcmd1bWVudHNUeXBlKTsKLQorICAgIGNh
c2UgQXJyYXk6OkRpcmVjdEFyZ3VtZW50czoKKyAgICAgICAgc3BlY3VsYXRlQ2VsbFR5cGVXaXRo
b3V0VHlwZUZpbHRlcmluZyhub2RlLT5jaGlsZDEoKSwgYmFzZVJlZywgRGlyZWN0QXJndW1lbnRz
VHlwZSk7CisgICAgICAgIG5vUmVzdWx0KG1fY3VycmVudE5vZGUpOworICAgICAgICByZXR1cm47
CisgICAgY2FzZSBBcnJheTo6U2NvcGVkQXJndW1lbnRzOgorICAgICAgICBzcGVjdWxhdGVDZWxs
VHlwZVdpdGhvdXRUeXBlRmlsdGVyaW5nKG5vZGUtPmNoaWxkMSgpLCBiYXNlUmVnLCBTY29wZWRB
cmd1bWVudHNUeXBlKTsKICAgICAgICAgbm9SZXN1bHQobV9jdXJyZW50Tm9kZSk7CiAgICAgICAg
IHJldHVybjsKICAgICBkZWZhdWx0OgpAQCAtNDA4OCw2ICs0MDkxLDEwNiBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlR2V0VHlwZWRBcnJhCiAgICAgaW50MzJSZXN1bHQodmVjdG9yR1BS
LCBub2RlKTsKIH0KIAordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25EaXJl
Y3RBcmd1bWVudHMoTm9kZSogbm9kZSkKK3sKKyAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNl
KHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQg
cHJvcGVydHkodGhpcywgbm9kZS0+Y2hpbGQyKCkpOworICAgIEdQUlRlbXBvcmFyeSByZXN1bHQo
dGhpcyk7CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICBHUFJUZW1wb3JhcnkgcmVzdWx0VGFn
KHRoaXMpOworI2VuZGlmCisgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CisgICAgCisg
ICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdwcigpOworICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9
IHByb3BlcnR5LmdwcigpOworICAgIEdQUlJlZyByZXN1bHRSZWcgPSByZXN1bHQuZ3ByKCk7Cisj
aWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICBHUFJSZWcgcmVzdWx0VGFnUmVnID0gcmVzdWx0VGFn
LmdwcigpOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZXN1bHRU
YWdSZWcsIHJlc3VsdFJlZyk7CisjZWxzZQorICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBK
U1ZhbHVlUmVncyhyZXN1bHRSZWcpOworI2VuZGlmCisgICAgR1BSUmVnIHNjcmF0Y2hSZWcgPSBz
Y3JhdGNoLmdwcigpOworICAgIAorICAgIGlmICghbV9jb21waWxlT2theSkKKyAgICAgICAgcmV0
dXJuOworICAgIAorICAgIEFTU0VSVChBcnJheU1vZGUoQXJyYXk6OkRpcmVjdEFyZ3VtZW50cyku
YWxyZWFkeUNoZWNrZWQobV9qaXQuZ3JhcGgoKSwgbm9kZSwgbV9zdGF0ZS5mb3JOb2RlKG5vZGUt
PmNoaWxkMSgpKSkpOworICAgIAorICAgIHNwZWN1bGF0aW9uQ2hlY2soCisgICAgICAgIEV4b3Rp
Y09iamVjdE1vZGUsIEpTVmFsdWVTb3VyY2UoKSwgMCwKKyAgICAgICAgbV9qaXQuYnJhbmNoVGVz
dFB0cigKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLAorICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgRGlyZWN0QXJndW1lbnRzOjpvZmZzZXRP
Zk92ZXJyaWRlcygpKSkpOworICAgIHNwZWN1bGF0aW9uQ2hlY2soCisgICAgICAgIEV4b3RpY09i
amVjdE1vZGUsIEpTVmFsdWVTb3VyY2UoKSwgMCwKKyAgICAgICAgbV9qaXQuYnJhbmNoMzIoCisg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywKKyAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIERpcmVjdEFyZ3VtZW50
czo6b2Zmc2V0T2ZMZW5ndGgoKSkpKTsKKyAgICAKKyAgICBtX2ppdC5sb2FkVmFsdWUoCisgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoCisgICAgICAgICAgICBiYXNlUmVnLCBwcm9w
ZXJ0eVJlZywgVGltZXNFaWdodCwgRGlyZWN0QXJndW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCkpLAor
ICAgICAgICByZXN1bHRSZWdzKTsKKyAgICAKKyAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3Ms
IG5vZGUpOworfQorCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPblNjb3Bl
ZEFyZ3VtZW50cyhOb2RlKiBub2RlKQoreworICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2Uo
dGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBw
cm9wZXJ0eSh0aGlzLCBub2RlLT5jaGlsZDIoKSk7CisgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0
aGlzKTsKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgIEdQUlRlbXBvcmFyeSByZXN1bHRUYWco
dGhpcyk7CisjZW5kaWYKKyAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKKyAgICBHUFJU
ZW1wb3Jhcnkgc2NyYXRjaDIodGhpcyk7CisgICAgCisgICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNl
LmdwcigpOworICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOworICAgIEdQ
UlJlZyByZXN1bHRSZWcgPSByZXN1bHQuZ3ByKCk7CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAg
ICBHUFJSZWcgcmVzdWx0VGFnUmVnID0gcmVzdWx0VGFnLmdwcigpOworICAgIEpTVmFsdWVSZWdz
IHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZXN1bHRUYWdSZWcsIHJlc3VsdFJlZyk7CisjZWxz
ZQorICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZXN1bHRSZWcpOwor
I2VuZGlmCisgICAgR1BSUmVnIHNjcmF0Y2hSZWcgPSBzY3JhdGNoLmdwcigpOworICAgIEdQUlJl
ZyBzY3JhdGNoMlJlZyA9IHNjcmF0Y2gyLmdwcigpOworICAgIAorICAgIGlmICghbV9jb21waWxl
T2theSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIEFTU0VSVChBcnJheU1vZGUoQXJyYXk6
OlNjb3BlZEFyZ3VtZW50cykuYWxyZWFkeUNoZWNrZWQobV9qaXQuZ3JhcGgoKSwgbm9kZSwgbV9z
dGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgpKSkpOworICAgIAorICAgIG1faml0LmxvYWRQdHIo
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgU2NvcGVkQXJndW1lbnRzOjpvZmZzZXRP
ZlRhYmxlKCkpLCBzY3JhdGNoUmVnKTsKKyAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKGJhc2VSZWcsIFNjb3BlZEFyZ3VtZW50czo6b2Zmc2V0T2ZTY29wZSgpKSwgc2Ny
YXRjaDJSZWcpOworICAgIAorICAgIHNwZWN1bGF0aW9uQ2hlY2soCisgICAgICAgIEV4b3RpY09i
amVjdE1vZGUsIEpTVmFsdWVTb3VyY2UoKSwgMCwKKyAgICAgICAgbV9qaXQuYnJhbmNoMzIoCisg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywKKyAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKFNjb3BlZEFyZ3VtZW50c1RhYmxlOjpv
ZmZzZXRPZkxlbmd0aCgpKSkpOworICAgIAorICAgIG1faml0LmxvYWRQdHIoCisgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hSZWcsIFNjb3BlZEFyZ3VtZW50c1RhYmxlOjpv
ZmZzZXRPZkFyZ3VtZW50cygpKSwKKyAgICAgICAgc2NyYXRjaFJlZyk7CisgICAgbV9qaXQubG9h
ZDMyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc2NyYXRjaFJlZywgcHJvcGVydHlSZWcsIFRp
bWVzRm91ciksIHNjcmF0Y2hSZWcpOworICAgIAorICAgIHNwZWN1bGF0aW9uQ2hlY2soCisgICAg
ICAgIEV4b3RpY09iamVjdE1vZGUsIEpTVmFsdWVTb3VyY2UoKSwgMCwKKyAgICAgICAgbV9qaXQu
YnJhbmNoMzIoCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHNjcmF0Y2hSZWcs
IFRydXN0ZWRJbW0zMihTY29wZU9mZnNldDo6aW52YWxpZE9mZnNldCkpKTsKKyAgICAKKyAgICBt
X2ppdC5sb2FkVmFsdWUoCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoCisgICAg
ICAgICAgICBiYXNlMlJlZywgcHJvcGVydHlSZWcsIFRpbWVzRWlnaHQsIEpTRW52aXJvbm1lbnRS
ZWNvcmQ6Om9mZnNldE9mVmFyaWFibGVzKCkpLAorICAgICAgICByZXN1bHRSZWdzKTsKKyAgICAK
KyAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG5vZGUpOworfQorCiB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkFyZ3VtZW50cyhOb2RlKiBub2RlKQogewogICAgIFNw
ZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwpAQCAtNDE1NCwz
MSArNDI1Nyw2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uQXIKICNl
bmRpZgogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QXJndW1lbnRzTGVuZ3Ro
KE5vZGUqIG5vZGUpCi17Ci0gICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2Rl
LT5jaGlsZDEoKSk7Ci0gICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBSZXVzZSwgYmFzZSk7
Ci0gICAgCi0gICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdwcigpOwotICAgIEdQUlJlZyByZXN1
bHRSZWcgPSByZXN1bHQuZ3ByKCk7Ci0gICAgCi0gICAgaWYgKCFtX2NvbXBpbGVPa2F5KQotICAg
ICAgICByZXR1cm47Ci0gICAgCi0gICAgQVNTRVJUKEFycmF5TW9kZShBcnJheTo6QXJndW1lbnRz
KS5hbHJlYWR5Q2hlY2tlZChtX2ppdC5ncmFwaCgpLCBub2RlLCBtX3N0YXRlLmZvck5vZGUobm9k
ZS0+Y2hpbGQxKCkpKSk7Ci0gICAgCi0gICAgc3BlY3VsYXRpb25DaGVjaygKLSAgICAgICAgVW5j
b3VudGFibGUsIEpTVmFsdWVTb3VyY2UoKSwgMCwKLSAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDgo
Ci0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywKLSAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEFyZ3VtZW50czo6b2Zmc2V0T2ZPdmVycm9kZUxl
bmd0aCgpKSkpOwotICAgIAotICAgIG1faml0LmxvYWQzMigKLSAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MoYmFzZVJlZywgQXJndW1lbnRzOjpvZmZzZXRPZk51bUFyZ3VtZW50cygpKSwK
LSAgICAgICAgcmVzdWx0UmVnKTsKLSAgICBpbnQzMlJlc3VsdChyZXN1bHRSZWcsIG5vZGUpOwot
fQotCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0U2NvcGUoTm9kZSogbm9kZSkKIHsK
ICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBmdW5jdGlvbih0aGlzLCBub2RlLT5jaGlsZDEoKSk7
CkBAIC00MjMyLDggKzQzMTAsNTYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEFy
cmF5TGVuZwogICAgICAgICBpbnQzMlJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOwogICAgICAgICBi
cmVhazsKICAgICB9Ci0gICAgY2FzZSBBcnJheTo6QXJndW1lbnRzOiB7Ci0gICAgICAgIGNvbXBp
bGVHZXRBcmd1bWVudHNMZW5ndGgobm9kZSk7CisgICAgY2FzZSBBcnJheTo6RGlyZWN0QXJndW1l
bnRzOiB7CisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hp
bGQxKCkpOworICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIFJldXNlLCBiYXNlKTsK
KyAgICAgICAgCisgICAgICAgIEdQUlJlZyBiYXNlUmVnID0gYmFzZS5ncHIoKTsKKyAgICAgICAg
R1BSUmVnIHJlc3VsdFJlZyA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgCisgICAgICAgIGlmICgh
bV9jb21waWxlT2theSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIEFT
U0VSVChBcnJheU1vZGUoQXJyYXk6OkRpcmVjdEFyZ3VtZW50cykuYWxyZWFkeUNoZWNrZWQobV9q
aXQuZ3JhcGgoKSwgbm9kZSwgbV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgpKSkpOworICAg
ICAgICAKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKKyAgICAgICAgICAgIEV4b3RpY09iamVj
dE1vZGUsIEpTVmFsdWVTb3VyY2UoKSwgMCwKKyAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3RQ
dHIoCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sCisgICAgICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgRGlyZWN0QXJndW1lbnRzOjpv
ZmZzZXRPZk92ZXJyaWRlcygpKSkpOworICAgICAgICAKKyAgICAgICAgbV9qaXQubG9hZDMyKAor
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgRGlyZWN0QXJndW1l
bnRzOjpvZmZzZXRPZkxlbmd0aCgpKSwgcmVzdWx0UmVnKTsKKyAgICAgICAgCisgICAgICAgIGlu
dDMyUmVzdWx0KHJlc3VsdFJlZywgbm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBj
YXNlIEFycmF5OjpTY29wZWRBcmd1bWVudHM6IHsKKyAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJh
bmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1
bHQodGhpcywgUmV1c2UsIGJhc2UpOworICAgICAgICAKKyAgICAgICAgR1BSUmVnIGJhc2VSZWcg
PSBiYXNlLmdwcigpOworICAgICAgICBHUFJSZWcgcmVzdWx0UmVnID0gcmVzdWx0LmdwcigpOwor
ICAgICAgICAKKyAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQorICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAKKyAgICAgICAgQVNTRVJUKEFycmF5TW9kZShBcnJheTo6U2NvcGVkQXJndW1l
bnRzKS5hbHJlYWR5Q2hlY2tlZChtX2ppdC5ncmFwaCgpLCBub2RlLCBtX3N0YXRlLmZvck5vZGUo
bm9kZS0+Y2hpbGQxKCkpKSk7CisgICAgICAgIAorICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAor
ICAgICAgICAgICAgRXhvdGljT2JqZWN0TW9kZSwgSlNWYWx1ZVNvdXJjZSgpLCAwLAorICAgICAg
ICAgICAgbV9qaXQuYnJhbmNoVGVzdDgoCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
Ok5vblplcm8sCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJl
ZywgU2NvcGVkQXJndW1lbnRzOjpvZmZzZXRPZk92ZXJyb2RlVGhpbmdzKCkpKSk7CisgICAgICAg
IAorICAgICAgICBtX2ppdC5sb2FkUHRyKAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3MoYmFzZVJlZywgU2NvcGVkQXJndW1lbnRzOjpvZmZzZXRPZlRhYmxlKCkpLCByZXN1bHRS
ZWcpOworICAgICAgICAKKyAgICAgICAgbV9qaXQubG9hZDMyKAorICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0UmVnLCBTY29wZWRBcmd1bWVudHNUYWJsZTo6b2Zmc2V0
T2ZMZW5ndGgoKSksCisgICAgICAgICAgICByZXN1bHRSZWcpOworICAgICAgICAKKyAgICAgICAg
aW50MzJSZXN1bHQocmVzdWx0UmVnLCBub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAg
IGRlZmF1bHQ6IHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklULmgJKHJldmlzaW9uIDE4MDY5MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMjE1Miw4ICsyMTUyLDkg
QEAgcHVibGljOgogICAgIHZvaWQgY29tcGlsZUdldEJ5VmFsT25TdHJpbmcoTm9kZSopOwogICAg
IHZvaWQgY29tcGlsZUZyb21DaGFyQ29kZShOb2RlKik7IAogCi0gICAgdm9pZCBjb21waWxlR2V0
QnlWYWxPbkFyZ3VtZW50cyhOb2RlKik7Ci0gICAgdm9pZCBjb21waWxlR2V0QXJndW1lbnRzTGVu
Z3RoKE5vZGUqKTsKKyAgICB2b2lkIGNvbXBpbGVHZXRCeVZhbE9uRGlyZWN0QXJndW1lbnRzKE5v
ZGUqKTsKKyAgICB2b2lkIGNvbXBpbGVHZXRCeVZhbE9uU2NvcGVkQXJndW1lbnRzKE5vZGUqKTsK
KyAgICAKICAgICB2b2lkIGNvbXBpbGVHZXRTY29wZShOb2RlKik7CiAgICAgdm9pZCBjb21waWxl
U2tpcFNjb3BlKE5vZGUqKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29w
eVRva2VuLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29weVRv
a2VuLmgJKHJldmlzaW9uIDE4MDY5MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Nv
cHlUb2tlbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMiw3ICszMiw3IEBAIGVudW0gQ29weVRva2VuIHsK
ICAgICBCdXR0ZXJmbHlDb3B5VG9rZW4sCiAgICAgVHlwZWRBcnJheVZlY3RvckNvcHlUb2tlbiwK
ICAgICBNYXBCYWNraW5nU3RvcmVDb3B5VG9rZW4sCi0gICAgQXJndW1lbnRzU2xvd0FyZ3VtZW50
RGF0YUNvcHlUb2tlbgorICAgIERpcmVjdEFyZ3VtZW50c092ZXJyaWRlc0NvcHlUb2tlbgogfTsK
IAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fz
c2VtYmx5SGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
QXNzZW1ibHlIZWxwZXJzLmgJKHJldmlzaW9uIDE4MDY5MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTExMyw2ICsxMTMs
MjYgQEAgcHVibGljOgogI2VuZGlmCiAgICAgfQogICAgIAorICAgIHZvaWQgbG9hZFZhbHVlKEJh
c2VJbmRleCBhZGRyZXNzLCBKU1ZhbHVlUmVncyByZWdzKQorICAgIHsKKyNpZiBVU0UoSlNWQUxV
RTY0KQorICAgICAgICBsb2FkNjQoYWRkcmVzcywgcmVncy5ncHIoKSk7CisjZWxzZQorICAgICAg
ICBpZiAoYWRkcmVzcy5iYXNlID09IHJlZ3MucGF5bG9hZEdQUigpIHx8IGFkZHJlc3MuaW5kZXgg
PT0gcmVncy5wYXlsb2FkR1BSKCkpIHsKKyAgICAgICAgICAgIC8vIFdlIGFjdHVhbGx5IGNvdWxk
IGhhbmRsZSB0aGUgY2FzZSB3aGVyZSB0aGUgcmVnaXN0ZXJzIGFyZSBhbGlhc2VkIHRvIGJvdGgK
KyAgICAgICAgICAgIC8vIHRhZyBhbmQgcGF5bG9hZCwgYnV0IHdlIGRvbid0IGZvciBub3cuCisg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChhZGRyZXNzLmJhc2UgIT0gcmVncy50YWdHUFIoKSk7
CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChhZGRyZXNzLmluZGV4ICE9IHJlZ3MudGFnR1BS
KCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBsb2FkMzIoYWRkcmVzcy53aXRoT2Zmc2V0
KFRhZ09mZnNldCksIHJlZ3MudGFnR1BSKCkpOworICAgICAgICAgICAgbG9hZDMyKGFkZHJlc3Mu
d2l0aE9mZnNldChQYXlsb2FkT2Zmc2V0KSwgcmVncy5wYXlsb2FkR1BSKCkpOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgbG9hZDMyKGFkZHJlc3Mud2l0aE9mZnNldChQYXlsb2FkT2Zm
c2V0KSwgcmVncy5wYXlsb2FkR1BSKCkpOworICAgICAgICAgICAgbG9hZDMyKGFkZHJlc3Mud2l0
aE9mZnNldChUYWdPZmZzZXQpLCByZWcudGFnR1BSKCkpOworICAgICAgICB9CisjZW5kaWYKKyAg
ICB9CisgICAgCiAgICAgdm9pZCBtb3ZlVHJ1c3RlZFZhbHVlKEpTVmFsdWUgdmFsdWUsIEpTVmFs
dWVSZWdzIHJlZ3MpCiAgICAgewogI2lmIFVTRShKU1ZBTFVFNjQpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklULmgJKHJldmlzaW9uIDE4MDY5MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTM0Niw2ICszNDYsOCBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgSnVtcExpc3QgZW1pdERvdWJsZUdldEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0
Y2hhYmxlSnVtcCYgYmFkVHlwZSk7CiAgICAgICAgIEp1bXBMaXN0IGVtaXRDb250aWd1b3VzR2V0
QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBJbmRleGluZ1R5cGUg
ZXhwZWN0ZWRTaGFwZSA9IENvbnRpZ3VvdXNTaGFwZSk7CiAgICAgICAgIEp1bXBMaXN0IGVtaXRB
cnJheVN0b3JhZ2VHZXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUp
OworICAgICAgICBKdW1wTGlzdCBlbWl0RGlyZWN0QXJndW1lbnRzR2V0QnlWYWwoSW5zdHJ1Y3Rp
b24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlKTsKKyAgICAgICAgSnVtcExpc3QgZW1pdFNjb3Bl
ZEFyZ3VtZW50c0dldEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSk7
CiAgICAgICAgIEp1bXBMaXN0IGVtaXRJbnRUeXBlZEFycmF5R2V0QnlWYWwoSW5zdHJ1Y3Rpb24q
LCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBUeXBlZEFycmF5VHlwZSk7CiAgICAgICAgIEp1bXBM
aXN0IGVtaXRGbG9hdFR5cGVkQXJyYXlHZXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1
bXAmIGJhZFR5cGUsIFR5cGVkQXJyYXlUeXBlKTsKICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDE4MDY5MSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTUzMCw3ICs1MzAsNyBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlW
YWwoRXhlCiAgICAgICAgIGlmIChoYXNPcHRpbWl6YWJsZUluZGV4aW5nKG9iamVjdC0+c3RydWN0
dXJlKHZtKSkpIHsKICAgICAgICAgICAgIC8vIEF0dGVtcHQgdG8gb3B0aW1pemUuCiAgICAgICAg
ICAgICBKSVRBcnJheU1vZGUgYXJyYXlNb2RlID0gaml0QXJyYXlNb2RlRm9yU3RydWN0dXJlKG9i
amVjdC0+c3RydWN0dXJlKHZtKSk7Ci0gICAgICAgICAgICBpZiAoYXJyYXlNb2RlICE9IGJ5VmFs
SW5mby5hcnJheU1vZGUpIHsKKyAgICAgICAgICAgIGlmIChqaXRBcnJheU1vZGVQZXJtaXRzUHV0
KGFycmF5TW9kZSkgJiYgYXJyYXlNb2RlICE9IGJ5VmFsSW5mby5hcnJheU1vZGUpIHsKICAgICAg
ICAgICAgICAgICBKSVQ6OmNvbXBpbGVQdXRCeVZhbCgmdm0sIGV4ZWMtPmNvZGVCbG9jaygpLCAm
YnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyKE9VUl9SRVRVUk5fQUREUkVTUyksIGFycmF5TW9k
ZSk7CiAgICAgICAgICAgICAgICAgZGlkT3B0aW1pemUgPSB0cnVlOwogICAgICAgICAgICAgfQpA
QCAtNTc1LDcgKzU3NSw3IEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25EaXJlY3RQdXRC
eVYKICAgICAgICAgaWYgKGhhc09wdGltaXphYmxlSW5kZXhpbmcob2JqZWN0LT5zdHJ1Y3R1cmUo
dm0pKSkgewogICAgICAgICAgICAgLy8gQXR0ZW1wdCB0byBvcHRpbWl6ZS4KICAgICAgICAgICAg
IEpJVEFycmF5TW9kZSBhcnJheU1vZGUgPSBqaXRBcnJheU1vZGVGb3JTdHJ1Y3R1cmUob2JqZWN0
LT5zdHJ1Y3R1cmUodm0pKTsKLSAgICAgICAgICAgIGlmIChhcnJheU1vZGUgIT0gYnlWYWxJbmZv
LmFycmF5TW9kZSkgeworICAgICAgICAgICAgaWYgKGppdEFycmF5TW9kZVBlcm1pdHNQdXQoYXJy
YXlNb2RlKSAmJiBhcnJheU1vZGUgIT0gYnlWYWxJbmZvLmFycmF5TW9kZSkgewogICAgICAgICAg
ICAgICAgIEpJVDo6Y29tcGlsZURpcmVjdFB1dEJ5VmFsKCZ2bSwgY2FsbEZyYW1lLT5jb2RlQmxv
Y2soKSwgJmJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0cihPVVJfUkVUVVJOX0FERFJFU1MpLCBh
cnJheU1vZGUpOwogICAgICAgICAgICAgICAgIGRpZE9wdGltaXplID0gdHJ1ZTsKICAgICAgICAg
ICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3Mu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlB
Y2Nlc3MuY3BwCShyZXZpc2lvbiAxODA2OTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTUxLDYgKzk1MSwxMiBA
QCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeVZhbChCeVZhbEluCiAgICAgY2FzZSBKSVRB
cnJheVN0b3JhZ2U6CiAgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRBcnJheVN0b3JhZ2VHZXRCeVZh
bChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUpOwogICAgICAgICBicmVhazsKKyAgICBjYXNl
IEpJVERpcmVjdEFyZ3VtZW50czoKKyAgICAgICAgc2xvd0Nhc2VzID0gZW1pdERpcmVjdEFyZ3Vt
ZW50c0dldEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgSklUU2NvcGVkQXJndW1lbnRzOgorICAgICAgICBzbG93Q2FzZXMgPSBlbWl0
RGlyZWN0QXJndW1lbnRzR2V0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlKTsKKyAg
ICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAgVHlwZWRBcnJheVR5cGUgdHlwZSA9
IHR5cGVkQXJyYXlUeXBlRm9ySklUQXJyYXlNb2RlKGFycmF5TW9kZSk7CiAgICAgICAgIGlmIChp
c0ludCh0eXBlKSkKQEAgLTEwNDYsNiArMTA1Miw2MyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBp
bGVQdXRCeVZhbChCeVZhbEluCiAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmtDYWxsZXJUb0Z1bmN0
aW9uKHJldHVybkFkZHJlc3MsIEZ1bmN0aW9uUHRyKGlzRGlyZWN0ID8gb3BlcmF0aW9uRGlyZWN0
UHV0QnlWYWxHZW5lcmljIDogb3BlcmF0aW9uUHV0QnlWYWxHZW5lcmljKSk7CiB9CiAKK0pJVDo6
SnVtcExpc3QgSklUOjplbWl0RGlyZWN0QXJndW1lbnRzR2V0QnlWYWwoSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSkKK3sKKyAgICBKdW1wTGlz
dCBzbG93Q2FzZXM7CisgICAgCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBSZWdpc3RlcklEIGJh
c2UgPSByZWdUMDsKKyAgICBSZWdpc3RlcklEIHByb3BlcnR5ID0gcmVnVDE7CisgICAgSlNWYWx1
ZVJlZ3MgcmVzdWx0ID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgIFJlZ2lzdGVySUQgc2NyYXRj
aCA9IHJlZ1QzOworI2Vsc2UKKyAgICBSZWdpc3RlcklEIGJhc2UgPSByZWdUMDsKKyAgICBSZWdp
c3RlcklEIHByb3BlcnR5ID0gcmVnVDI7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0ID0gSlNWYWx1
ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKKyAgICBSZWdpc3RlcklEIHNjcmF0Y2ggPSByZWdUMzsKKyNl
bmRpZgorCisgICAgbG9hZDgoQWRkcmVzcyhiYXNlLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNl
dCgpKSwgc2NyYXRjaCk7CisgICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJyYW5jaDMyKE5vdEVxdWFs
LCBzY3JhdGNoLCBUcnVzdGVkSW1tMzIoRGlyZWN0QXJndW1lbnRzVHlwZSkpOworICAgIAorICAg
IHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCBwcm9wZXJ0eSwgQWRkcmVz
cyhiYXNlLCBEaXJlY3RBcmd1bWVudHM6Om9mZnNldE9mTGVuZ3RoKCkpKSk7CisgICAgc2xvd0Nh
c2VzLmFwcGVuZChicmFuY2hUZXN0UHRyKE5vblplcm8sIEFkZHJlc3MoYmFzZSwgRGlyZWN0QXJn
dW1lbnRzOjpvZmZzZXRPZk92ZXJyaWRlcygpKSkpOworICAgIAorICAgIHplcm9FeHRlbmQzMlRv
UHRyKHByb3BlcnR5LCBzY3JhdGNoKTsKKyAgICBsb2FkVmFsdWUoQmFzZUluZGV4KGJhc2UsIHNj
cmF0Y2gsIFRpbWVzRWlnaHQsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZU9mZnNldCgpKSwgcmVz
dWx0KTsKK30KKworSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRTY29wZWRBcmd1bWVudHNHZXRCeVZh
bChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBl
KQoreworICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICAKKyNpZiBVU0UoSlNWQUxVRTY0KQor
ICAgIFJlZ2lzdGVySUQgYmFzZSA9IHJlZ1QwOworICAgIFJlZ2lzdGVySUQgcHJvcGVydHkgPSBy
ZWdUMTsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHQgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAg
UmVnaXN0ZXJJRCBzY3JhdGNoID0gcmVnVDM7CisgICAgUmVnaXN0ZXJJRCBzY3JhdGNoMiA9IHJl
Z1Q0OworI2Vsc2UKKyAgICBSZWdpc3RlcklEIGJhc2UgPSByZWdUMDsKKyAgICBSZWdpc3RlcklE
IHByb3BlcnR5ID0gcmVnVDI7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0ID0gSlNWYWx1ZVJlZ3Mo
cmVnVDEsIHJlZ1QwKTsKKyAgICBSZWdpc3RlcklEIHNjcmF0Y2ggPSByZWdUMzsKKyAgICBSZWdp
c3RlcklEIHNjYXJ0Y2gyID0gcmVnVDQ7CisjZW5kaWYKKworICAgIGxvYWQ4KEFkZHJlc3MoYmFz
ZSwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIHNjcmF0Y2gpOworICAgIGJhZFR5cGUg
PSBwYXRjaGFibGVCcmFuY2gzMihOb3RFcXVhbCwgc2NyYXRjaCwgVHJ1c3RlZEltbTMyKERpcmVj
dEFyZ3VtZW50c1R5cGUpKTsKKyAgICAKKyAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgU2NvcGVk
QXJndW1lbnRzOjpvZmZzZXRPZlRhYmxlKCkpLCBzY3JhdGNoKTsKKyAgICBsb2FkUHRyKEFkZHJl
c3MoYmFzZSwgU2NvcGVkQXJndW1lbnRzOjpvZmZzZXRPZlNjb3BlKCkpLCBzY3JhdGNoMik7Cisg
ICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihBYm92ZU9yRXF1YWwsIHByb3BlcnR5LCBBZGRy
ZXNzKHNjcmF0Y2gsIFNjb3BlZEFyZ3VtZW50c1RhYmxlOjpvZmZzZXRPZkxlbmd0aCgpKSkpOwor
ICAgIGxvYWRQdHIoQWRkcmVzcyhzY3JhdGNoLCBTY29wZWRBcmd1bWVudHNUYWJsZTo6b2Zmc2V0
T2ZBcmd1bWVudHMoKSksIHNjcmF0Y2gpOworICAgIGxvYWQzMihCYXNlSW5kZXgoc2NyYXRjaCwg
cHJvcGVydHksIFRpbWVzRm91ciksIHNjcmF0Y2gpOworICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJh
bmNoMzIoRXF1YWwsIHNjcmF0Y2gsIFRydXN0ZWRJbW0zMihTY29wZU9mZnNldDo6aW52YWxpZE9m
ZnNldCkpKTsKKyAgICAKKyAgICBsb2FkVmFsdWUoQmFzZUluZGV4KHNjcmF0Y2gyLCBzY3JhdGNo
LCBUaW1lc0VpZ2h0LCBKU0Vudmlyb25tZW50UmVjb3JkOjpvZmZzZXRPZlZhcmlhYmxlcygpKSwg
cmVzdWx0KTsKK30KKwogSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRJbnRUeXBlZEFycmF5R2V0QnlW
YWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBUeXBlZEFycmF5VHlwZSB0
eXBlKQogewogICAgIEFTU0VSVChpc0ludCh0eXBlKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Bcmd1bWVudHNNb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQXJndW1lbnRzTW9kZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJndW1lbnRzTW9kZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2lmbmRlZiBBcmd1bWVudHNNb2RlX2gKKyNkZWZpbmUgQXJndW1lbnRzTW9kZV9oCisK
K25hbWVzcGFjZSBKU0MgeworCitlbnVtIEFyZ3VtZW50c01vZGUgeworICAgIENsb25lZEFyZ3Vt
ZW50c0NyZWF0aW9uTW9kZSwKKyAgICBGYWtlQXJndW1lbnRWYWx1ZXNDcmVhdGlvbk1vZGUKK307
CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gQXJndW1lbnRzTW9kZV9oCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhcHR1cmVkQXJndW1lbnRzT2Zmc2V0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYXB0dXJl
ZEFyZ3VtZW50c09mZnNldC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9DYXB0dXJlZEFyZ3VtZW50c09mZnNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ2FwdHVyZWRBcmd1bWVudHNPZmZz
ZXQuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3ZvaWQgQ2FwdHVyZWRBcmd1bWVudHNPZmZzZXQ6
OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBpZiAoISp0aGlzKSB7CisgICAg
ICAgIG91dC5wcmludCgiY2FwdHVyZWRBcmd1bWVudEludmFsaWQiKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIG91dC5wcmludCgiY2FwdHVyZWRBcmd1bWVudCIsIG9mZnNldCgpKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0NhcHR1cmVkQXJndW1lbnRzT2Zmc2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FwdHVyZWRBcmd1bWVudHNPZmZzZXQuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhcHR1cmVkQXJndW1lbnRzT2Zm
c2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIENhcHR1cmVkQXJndW1lbnRzT2Zm
c2V0X2gKKyNkZWZpbmUgQ2FwdHVyZWRBcmd1bWVudHNPZmZzZXRfaAorCisjaW5jbHVkZSAiR2Vu
ZXJpY09mZnNldC5oIgorI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3BhY2Ug
SlNDIHsKKworLy8gVGhpcyBpcyBhbiBvZmZzZXQgaW50byB0aGUgc3BlY2lhbCBhcmd1bWVudHMg
b2JqZWN0LCB3aGljaCBjYXB0dXJlcyB0aGUgYXJndW1lbnRzIHRvIGEKKy8vIGZ1bmN0aW9uLiBJ
dCBvbmx5IGNvbWVzIGludG8gcGxheSBpdCB0aGUgYXJndW1lbnRzIGFyZW4ndCBhbHNvIGxpZnRl
ZCBpbnRvIHRoZSBhY3RpdmF0aW9uLgorLy8gSWYgdGhleSB3ZXJlIHRoZW4gYWNjZXNzZXMgdG8g
dGhlIGFyZ3VtZW50cyB3b3VsZCByZXNvbHZlIHRvIGEgU2NvcGVPZmZzZXQgYW5kIG5vdCBhCisv
LyBDYXB0dXJlZEFyZ3VtZW50c09mZnNldC4KK2NsYXNzIENhcHR1cmVkQXJndW1lbnRzT2Zmc2V0
IDogcHVibGljIEdlbmVyaWNPZmZzZXQ8Q2FwdHVyZWRBcmd1bWVudHNPZmZzZXQ+IHsKK3B1Ymxp
YzoKKyAgICBDYXB0dXJlZEFyZ3VtZW50c09mZnNldCgpIHsgfQorICAgIAorICAgIGV4cGxpY2l0
IENhcHR1cmVkQXJndW1lbnRzT2Zmc2V0KHVuc2lnbmVkIG9mZnNldCkKKyAgICAgICAgOiBHZW5l
cmljT2Zmc2V0KG9mZnNldCkKKyAgICB7CisgICAgfQorICAgIAorICAgIHZvaWQgZHVtcChQcmlu
dFN0cmVhbSYpIGNvbnN0OworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBD
YXB0dXJlZEFyZ3VtZW50c09mZnNldF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0RpcmVjdEFyZ3VtZW50cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRpcmVjdEFyZ3VtZW50
cy5oIgorCisjaW5jbHVkZSAiR2VuZXJpY0FyZ3VtZW50c0lubGluZXMuaCIKKyNpbmNsdWRlICJK
U0FyZ3VtZW50c0l0ZXJhdG9yLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorCituYW1lc3Bh
Y2UgSlNDIHsKKworU1RBVElDX0FTU0VSVF9JU19UUklWSUFMTFlfREVTVFJVQ1RJQkxFKERpcmVj
dEFyZ3VtZW50cyk7CisKK2NvbnN0IENsYXNzSW5mbyBEaXJlY3RBcmd1bWVudHM6OnNfaW5mbyA9
IHsgIkFyZ3VtZW50cyIsICZCYXNlOjpzX2luZm8sIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoRGly
ZWN0QXJndW1lbnRzKSB9OworCitEaXJlY3RBcmd1bWVudHM6OkRpcmVjdEFyZ3VtZW50cyhWTSYg
dm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCB1bnNpZ25lZCBsZW5ndGgpCisgICAgOiBHZW5lcmlj
QXJndW1lbnRzKHZtLCBzdHJ1Y3R1cmUpCisgICAgLCBtX2xlbmd0aChsZW5ndGgpCit7Cit9CisK
K0RpcmVjdEFyZ3VtZW50cyogRGlyZWN0QXJndW1lbnRzOjpjcmVhdGVVbmluaXRpYWxpemVkKFZN
JiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICBEaXJl
Y3RBcmd1bWVudHMqIHJlc3VsdCA9CisgICAgICAgIG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxs
PERpcmVjdEFyZ3VtZW50cz4odm0uaGVhcCwgYWxsb2NhdGlvblNpemUobGVuZ3RoKSkpCisgICAg
ICAgICh2bSwgc3RydWN0dXJlKTsKKyAgICByZXN1bHQtPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCitEaXJlY3RBcmd1bWVudHMqIERpcmVjdEFyZ3VtZW50czo6
Y3JlYXRlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHVuc2lnbmVkIGxlbmd0aCkKK3sK
KyAgICBEaXJlY3RBcmd1bWVudHMqIHJlc3VsdCA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWQodm0sIHN0
cnVjdHVyZSwgbGVuZ3RoKTsKKyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBsZW5ndGg7IGkt
LTspCisgICAgICAgIHJlc3VsdC0+c3RvcmFnZSgpW2ldLmNsZWFyKCk7CisgICAgCisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKworRGlyZWN0QXJndW1lbnRzKiBEaXJlY3RBcmd1bWVudHM6OmNyZWF0
ZUJ5Q29weWluZyhWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBFeGVjU3RhdGUqIGV4ZWMp
Cit7CisgICAgdW5zaWduZWQgbGVuZ3RoID0gZXhlYy0+YXJndW1lbnRDb3VudCgpOworICAgIERp
cmVjdEFyZ3VtZW50cyogcmVzdWx0ID0gY3JlYXRlVW5pbml0aWFsaXplZCh2bSwgc3RydWN0dXJl
LCBsZW5ndGgpOworICAgIAorICAgIGZvciAodW5zaWduZWQgaSA9IGxlbmd0aDsgaS0tOykKKyAg
ICAgICAgcmVzdWx0LT5zdG9yYWdlKClbaV0uc2V0KHZtLCByZXN1bHQsIGV4ZWMtPnVuY2hlY2tl
ZEFyZ3VtZW50KGkpKTsKKyAgICAKKyAgICByZXN1bHQtPmNhbGxlZSgpLnNldCh2bSwgcmVzdWx0
LCBqc0Nhc3Q8SlNGdW5jdGlvbio+KGV4ZWMtPmNhbGxlZSgpKSk7CisgICAgCisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKwordm9pZCBEaXJlY3RBcmd1bWVudHM6OnZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiB0aGlzQ2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgRGlyZWN0QXJndW1lbnRz
KiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8RGlyZWN0QXJndW1lbnRzKj4odGhpc0NlbGwpOwor
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKKyAgICBC
YXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOworICAgIAorICAgIHZpc2l0
b3IuYXBwZW5kVmFsdWVzKHRoaXNPYmplY3QtPnN0b3JhZ2UoKSwgdGhpc09iamVjdC0+bV9sZW5n
dGgpOworICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX2NhbGxlZSk7CisgICAgCisg
ICAgaWYgKHRoaXNPYmplY3QtPm1fb3ZlcnJpZGVzKSB7CisgICAgICAgIHZpc2l0b3IuY29weUxh
dGVyKAorICAgICAgICAgICAgdGhpc09iamVjdCwgRGlyZWN0QXJndW1lbnRzT3ZlcnJpZGVzQ29w
eVRva2VuLAorICAgICAgICAgICAgdGhpc09iamVjdC0+bV9vdmVycmlkZXMuZ2V0KCksIG1fbGVu
Z3RoKTsKKyAgICB9Cit9CisKK3ZvaWQgRGlyZWN0QXJndW1lbnRzOjpjb3B5QmFja2luZ1N0b3Jl
KEpTQ2VsbCogdGhpc0NlbGwsIENvcHlWaXNpdG9yJiB2aXNpdG9yLCBDb3B5VG9rZW4gdG9rZW4p
Cit7CisgICAgRGlyZWN0QXJndW1lbnRzKiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8RGlyZWN0
QXJndW1lbnRzKj4odGhpc0NlbGwpOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhp
c09iamVjdCwgaW5mbygpKTsKKyAgICAKKyAgICBSRUxFQVNFX0FTU0VSVCh0b2tlbiA9PSBEaXJl
Y3RBcmd1bWVudHNPdmVycmlkZXNDb3B5VG9rZW4pOworICAgIAorICAgIGJvb2wqIG9sZE92ZXJy
aWRlcyA9IHRoaXNPYmplY3QtPm1fb3ZlcnJpZGVzLmdldCgpOworICAgIGlmICghb2xkT3ZlcnJp
ZGVzKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgaWYgKHZpc2l0b3IuY2hlY2tJZlNob3Vs
ZENvcHkob3ZlcnJpZGVzKSkgeworICAgICAgICBib29sKiBuZXdPdmVycmlkZXMgPSBzdGF0aWNf
Y2FzdDxib29sKj4odmlzaXRvci5hbGxvY2F0ZU5ld1NwYWNlKG1fbGVuZ3RoKSk7CisgICAgICAg
IG1lbWNweShuZXdPdmVycmlkZXMsIG9sZE92ZXJyaWRlcywgbV9sZW5ndGgpOworICAgICAgICB0
aGlzT2JqZWN0LT5tX292ZXJyaWRlcy5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKG5ld092ZXJyaWRl
cyk7CisgICAgICAgIHZpc2l0b3IuZGlkQ29weShvbGRPdmVycmlkZXMsIG1fbGVuZ3RoKTsKKyAg
ICB9Cit9CisKK1N0cnVjdHVyZSogRGlyZWN0QXJndW1lbnRzOjpjcmVhdGVTdHJ1Y3R1cmUoVk0m
IHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKK3sK
KyAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBl
LCBUeXBlSW5mbyhEaXJlY3RBcmd1bWVudHNUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7
Cit9CisKK3ZvaWQgRGlyZWN0QXJndW1lbnRzOjpzbG93RG93bkFuZFdhc3RlTWVtb3J5KFZNJiB2
bSkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVCghbV9vdmVycmlkZXMpOworICAgIAorICAgIHB1dERp
cmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcihtX2xlbmd0aCksIERv
bnRFbnVtKTsKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmNhbGxlZSwgbV9j
YWxsZWUuZ2V0KCksIERvbnRFbnVtKTsKKyAgICAKKyAgICB2b2lkKiBiYWNraW5nU3RvcmU7Cisg
ICAgUkVMRUFTRV9BU1NFUlQodm0uaGVhcC50cnlBbGxvY2F0ZVN0b3JhZ2UodGhpcywgbV9sZW5n
dGgpLCAmYmFja2luZ1N0b3JlKTsKKyAgICBtX292ZXJyaWRlcy5zZXQodm0sIHRoaXMsIHN0YXRp
Y19jYXN0PGJvb2wqPihiYWNraW5nU3RvcmUpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2xl
bmd0aDsgaS0tOykKKyAgICAgICAgbV9vdmVycmlkZXMuZ2V0KClbaV0gPSBmYWxzZTsKK30KKwor
dm9pZCBEaXJlY3RBcmd1bWVudHM6OnNsb3dEb3duQW5kV2FzdGVNZW1vcnlJZk5lY2Vzc2FyeShW
TSYgdm0pCit7CisgICAgaWYgKCFtX292ZXJyaWRlcykKKyAgICAgICAgc2xvd0Rvd25BbmRXYXN0
ZU1lbW9yeSh2bSk7Cit9CisKK3ZvaWQgRGlyZWN0QXJndW1lbnRzOjpvdmVycmlkZUFyZ3VtZW50
KFZNJiB2bSwgdW5zaWduZWQgaSkKK3sKKyAgICBzbG93RG93bkFuZFdhc3RlTWVtb3J5SWZOZWNl
c3Nhcnkodm0pOworICAgIG1fb3ZlcnJpZGVzLmdldCgpW2luZGV4XSA9IHRydWU7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9E
aXJlY3RBcmd1bWVudHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9EaXJlY3RBcmd1bWVudHMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MTM3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgRGlyZWN0QXJndW1lbnRzX2gKKyNkZWZpbmUgRGlyZWN0QXJndW1lbnRzX2gKKworI2lu
Y2x1ZGUgIkdlbmVyaWNBcmd1bWVudHMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKKy8vIFRoaXMg
aXMgYW4gQXJndW1lbnRzLWNsYXNzIG9iamVjdCB0aGF0IHdlIGNyZWF0ZSB3aGVuIHlvdSBzYXkg
ImFyZ3VtZW50cyIgaW5zaWRlIGEgZnVuY3Rpb24sCisvLyBhbmQgbm9uZSBvZiB0aGUgYXJndW1l
bnRzIGFyZSBjYXB0dXJlZCBpbiB0aGUgZnVuY3Rpb24ncyBhY3RpdmF0aW9uLiBUaGUgZnVuY3Rp
b24gd2lsbCBjb3B5IGFsbAorLy8gb2YgaXRzIGFyZ3VtZW50cyBpbnRvIHRoaXMgb2JqZWN0LCBh
bmQgYWxsIHN1YnNlcXVlbnQgYWNjZXNzZXMgdG8gdGhlIGFyZ3VtZW50cyB3aWxsIGdvIHRocm91
Z2gKKy8vIHRoaXMgb2JqZWN0IHRoZXJlYWZ0ZXIuIFNwZWNpYWwgc3VwcG9ydCBpcyBpbiBwbGFj
ZSBmb3IgbWlzY2hldmlvdXMgZXZlbnRzIGxpa2UgdGhlIGFyZ3VtZW50cworLy8gYmVpbmcgZGVs
ZXRlZCAoc29tZXRoaW5nIGxpa2UgImRlbGV0ZSBhcmd1bWVudHNbMF0iKSBvciByZWNvbmZpZ3Vy
ZWQgKGJyb2FkbHksIHdlIHNheSBkZWxldGlvbnMKKy8vIGFuZCByZWNvbmZpZ3VyYXRpb25zIG1l
YW4gdGhhdCB0aGUgcmVzcGVjdGl2ZSBhcmd1bWVudCB3YXMgIm92ZXJyaWRkZW4iKS4KKy8vCisv
LyBUbyBzcGVlZCBhbGxvY2F0aW9uLCB0aGlzIG9iamVjdCB3aWxsIGhvbGQgYWxsIG9mIHRoZSBh
cmd1bWVudHMgaW4tcGxhY2UuIFRoZSBhcmd1bWVudHMgYXMgd2VsbAorLy8gYXMgYSB0YWJsZSBv
ZiBmbGFncyBzYXlpbmcgd2hpY2ggYXJndW1lbnRzIHdlcmUgb3ZlcnJpZGRlbi4KK2NsYXNzIERp
cmVjdEFyZ3VtZW50cyA6IHB1YmxpYyBHZW5lcmljQXJndW1lbnRzPERpcmVjdEFyZ3VtZW50cz4g
eworcHJpdmF0ZToKKyAgICBEaXJlY3RBcmd1bWVudHMoVk0mLCBTdHJ1Y3R1cmUqLCB1bnNpZ25l
ZCBsZW5ndGgpOworICAgIAorcHVibGljOgorICAgIC8vIENyZWF0ZXMgYW4gYXJndW1lbnRzIG9i
amVjdCBidXQgbGVhdmVzIGl0IHVuaW5pdGlhbGl6ZWQuCisgICAgc3RhdGljIERpcmVjdEFyZ3Vt
ZW50cyogY3JlYXRlVW5pbml0aWFsaXplZChWTSYsIFN0cnVjdHVyZSosIHVuc2lnbmVkIGxlbmd0
aCk7CisgICAgCisgICAgLy8gQ3JlYXRlcyBhbiBhcmd1bWVudHMgb2JqZWN0IGFuZCBpbml0aWFs
aXplcyBldmVyeXRoaW5nIHRvIHRoZSBlbXB0eSB2YWx1ZS4KKyAgICBzdGF0aWMgRGlyZWN0QXJn
dW1lbnRzKiBjcmVhdGUoVk0mLCBTdHJ1Y3R1cmUqLCB1bnNpZ25lZCBsZW5ndGgpOworICAgIAor
ICAgIC8vIENyZWF0ZXMgYW4gYXJndW1lbnRzIG9iamVjdCBieSBjb3B5aW5nIHRoZSBhcmd1bW5l
dHMgZnJvbSB0aGUgc3RhY2suCisgICAgc3RhdGljIERpcmVjdEFyZ3VtZW50cyogY3JlYXRlQnlD
b3B5aW5nKFZNJiwgU3RydWN0dXJlKiwgRXhlY1N0YXRlKik7CisgICAgCisgICAgc3RhdGljIHZv
aWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIHN0YXRpYyB2b2lk
IGNvcHlCYWNraW5nU3RvcmUoSlNDZWxsKiwgQ29weVZpc2l0b3ImLCBDb3B5VG9rZW4pOworICAg
IAorICAgIHVpbnQzMl90IGludGVybmFsTGVuZ3RoKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiBtX2xlbmd0aDsKKyAgICB9CisgICAgCisgICAgdWludDMyX3QgbGVuZ3RoKEV4ZWNTdGF0
ZSogZXhlYykgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChVTkxJS0VMWShtX292ZXJyaWRlcykp
CisgICAgICAgICAgICByZXR1cm4gZ2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5n
dGgpLnRvVUludDMyKGV4ZWMpOworICAgICAgICByZXR1cm4gbV9sZW5ndGg7CisgICAgfQorICAg
IAorICAgIGJvb2wgY2FuQWNjZXNzSW5kZXhRdWlja2x5KHVpbnQzMl90IGkpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gaSA8IG1fbGVuZ3RoICYmICghbV9vdmVycmlkZXMgfHwgIW1fb3Zl
cnJpZGVzLmdldCgpW2ldKTsKKyAgICB9CisgICAgCisgICAgSlNWYWx1ZSBnZXRJbmRleFF1aWNr
bHkodWludDMyX3QgaSkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZ
X0lNUExJQ0FUSU9OKGNhbkFjY2Vzc0luZGV4UXVpY2tseShpKSk7CisgICAgICAgIHJldHVybiBz
dG9yYWdlKClbaV0uZ2V0KCk7CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0SW5kZXhRdWlja2x5
KFZNJiB2bSwgdWludDMyX3QgaSwgSlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIEFTU0VS
VF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGNhbkFjY2Vzc0luZGV4UXVpY2tseShpKSk7Cisg
ICAgICAgIHN0b3JhZ2UoKVtpXS5zZXQodm0sIHRoaXMsIHZhbHVlKTsKKyAgICB9CisgICAgCisg
ICAgV3JpdGVCYXJyaWVyPEpTRnVuY3Rpb24+JiBjYWxsZWUoKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIG1fY2FsbGVlOworICAgIH0KKyAgICAKKyAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGFy
Z3VtZW50KENhcHR1cmVkQXJndW1lbnRzT2Zmc2V0IG9mZnNldCkKKyAgICB7CisgICAgICAgIEFT
U0VSVChvZmZzZXQpOworICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihv
ZmZzZXQub2Zmc2V0KCkgPCBtX2xlbmd0aCk7CisgICAgICAgIHJldHVybiBzdG9yYWdlKClbb2Zm
c2V0Lm9mZnNldCgpXTsKKyAgICB9CisgICAgCisgICAgLy8gTWV0aG9kcyBpbnRlbmRlZCBmb3Ig
dXNlIGJ5IHRoZSBHZW5lcmljQXJndW1lbnRzIG1peGluLgorICAgIGJvb2wgb3ZlcnJvZGVUaGlu
Z3MoKSBjb25zdCB7IHJldHVybiAhIW1fb3ZlcnJpZGVzOyB9CisgICAgdm9pZCBzbG93RG93bkFu
ZFdhc3RlTWVtb3J5KFZNJik7CisgICAgdm9pZCBzbG93RG93bkFuZFdhc3RlTWVtb3J5SWZOZWNl
c3NhcnkoVk0mKTsKKyAgICB2b2lkIG92ZXJyaWRlQXJndW1lbnQoVk0mLCB1bnNpZ25lZCBpbmRl
eCk7CisgICAgCisgICAgREVDTEFSRV9JTkZPOworICAgIAorICAgIHN0YXRpYyBTdHJ1Y3R1cmUq
IGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUp
OworICAgIAorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZMZW5ndGgoKSB7IHJldHVybiBP
QkpFQ1RfT0ZGU0VUT0YoRGlyZWN0QXJndW1lbnRzLCBtX2xlbmd0aCk7IH0KKyAgICBzdGF0aWMg
cHRyZGlmZl90IG9mZnNldE9mT3ZlcnJpZGVzKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKERp
cmVjdEFyZ3VtZW50cywgbV9vdmVycmlkZXMpOyB9CisgICAgCisgICAgc3RhdGljIHNpemVfdCBz
dG9yYWdlT2Zmc2V0KCkKKyAgICB7CisgICAgICAgIHJldHVybiBXVEY6OnJvdW5kVXBUb011bHRp
cGxlT2Y8c2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPik+KHNpemVvZihEaXJlY3RBcmd1bWVu
dHMpKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSh1aW50
MzJfdCBsZW5ndGgpCisgICAgeworICAgICAgICByZXR1cm4gc3RvcmFnZU9mZnNldCgpICsgc2l6
ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikgKiBsZW5ndGg7CisgICAgfQorICAgIAorcHJpdmF0
ZToKKyAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHN0b3JhZ2UoKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGJpdHdpc2VfY2FzdDxXcml0ZUJhcnJpZXI8VW5rbm93bj4qPihiaXR3aXNlX2Nhc3Q8
Y2hhcio+KHRoaXMpICsgc3RvcmFnZU9mZnNldCgpKTsKKyAgICB9CisgICAgCisgICAgV3JpdGVC
YXJyaWVyPEpTRnVuY3Rpb24qPiBtX2NhbGxlZTsKKyAgICB1aW50MzJfdCBtX2xlbmd0aDsgLy8g
QWx3YXlzIHRoZSBhY3R1YWwgbGVuZ3RoIG9mIGNhcHR1cmVkIGFyZ3VtZW50cyBhbmQgbmV2ZXIg
d2hhdCB3YXMgc3RvcmVkIGludG8gdGhlIGxlbmd0aCBwcm9wZXJ0eS4KKyAgICBDb3B5V3JpdGVC
YXJyaWVyPGJvb2w+IG1fb3ZlcnJpZGVzOyAvLyBJZiBub24tbnVsbCwgaXQgbWVhbnMgdGhhdCBs
ZW5ndGgsIGNhbGxlZSwgYW5kIGNhbGxlciBhcmUgZnVsbHkgbWF0ZXJpYWxpemVkIHByb3BlcnRp
ZXMuCit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIERpcmVjdEFyZ3VtZW50
c19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ZvcmVpZ25WYXJpYWJs
ZUluZGV4LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRm9y
ZWlnblZhcmlhYmxlSW5kZXguaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0ZvcmVpZ25WYXJpYWJsZUluZGV4LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIEZvcmVpZ25WYXJpYWJsZUluZGV4X2gKKyNkZWZpbmUgRm9yZWlnblZhcmlhYmxlSW5k
ZXhfaAorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgRm9yZWlnblZhcmlhYmxlSW5kZXggewor
cHVibGljOgorICAgIEZvcmVpZ25WYXJpYWJsZUluZGV4KCkKKyAgICAgICAgOiBtX2luZGV4KFVJ
TlRfTUFYKQorICAgIHsKKyAgICB9CisgICAgCisgICAgZXhwbGljaXQgRm9yZWlnblZhcmlhYmxl
SW5kZXgodW5zaWduZWQgaW5kZXgpCisgICAgICAgIDogbV9pbmRleChpbmRleCkKKyAgICB7Cisg
ICAgfQorICAgIAorICAgIAorICAgIAorcHJpdmF0ZToKKyAgICB1bnNpZ25lZCBtX2luZGV4Owor
fTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBGb3JlaWduVmFyaWFibGVJbmRl
eF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVu
dHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmlj
QXJndW1lbnRzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9HZW5lcmljQXJndW1lbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEdlbmVy
aWNBcmd1bWVudHNfaAorI2RlZmluZSBHZW5lcmljQXJndW1lbnRzX2gKKworI2luY2x1ZGUgIkpT
T2JqZWN0LmgiCisKK25hbWVzcGFjZSBKU0MgeworCisvLyBUaGlzIGlzIGEgbWl4aW4gZm9yIHRo
ZSB0d28ga2luZHMgb2YgQXJndW1lbnRzLWNsYXNzIG9iamVjdHMgdGhhdCBhcmlzZSB3aGVuIHlv
dSBzYXkKKy8vICJhcmd1bWVudHMiIGluc2lkZSBhIGZ1bmN0aW9uLiBUaGlzIGNsYXNzIGRvZXNu
J3Qgc2hvdyB1cCBpbiB0aGUgSlNDZWxsIGluaGVyaXRhbmNlIGhpZXJhcmNoeS4KK3RlbXBsYXRl
PHR5cGVuYW1lIFR5cGU+CitjbGFzcyBHZW5lcmljQXJndW1lbnRzIDogcHVibGljIEpTTm9uRmlu
YWxPYmplY3QgeworcHVibGljOgorICAgIHR5cGVkZWYgSlNOb25GaW5hbE9iamVjdCBCYXNlOwor
CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVzR2V0
T3duUHJvcGVydHlTbG90IHwgSW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVu
V2hlbkxlbmd0aElzTm90WmVybyB8IE92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMgfCBKU09iamVj
dDo6U3RydWN0dXJlRmxhZ3M7CisKK3Byb3RlY3RlZDoKKyAgICBHZW5lcmljQXJndW1lbnRzKFZN
JiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgICAgIDogQmFzZSh2bSwgc3RydWN0dXJl
KQorICAgIHsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNP
YmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOworICAgIHN0
YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNPYmplY3QqLCBFeGVjU3RhdGUq
LCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyB2b2lk
IGdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVB
cnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CisgICAgc3RhdGljIHZvaWQgcHV0KEpTQ2VsbCosIEV4
ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CisgICAg
c3RhdGljIHZvaWQgcHV0QnlJbmRleChKU0NlbGwqLCBFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9w
ZXJ0eU5hbWUsIEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpOworICAgIHN0YXRpYyB2b2lkIGRl
bGV0ZVByb3BlcnR5KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSk7CisgICAgc3Rh
dGljIHZvaWQgZGVsZXRlUHJvcGVydHlCeUluZGV4KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIHVuc2ln
bmVkIHByb3BlcnR5TmFtZSk7CisgICAgc3RhdGljIHZvaWQgZGVmaW5lT3duUHJvcGVydHkoSlNP
YmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5RGVzY3JpcHRv
ciYsIGJvb2wgc2hvdWxkVGhyb3cpOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRp
ZiAvLyBHZW5lcmljQXJndW1lbnRzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzSW5saW5lcy5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lubGlu
ZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIxMiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEdlbmVyaWNBcmd1bWVudHNJbmxp
bmVzX2gKKyNkZWZpbmUgR2VuZXJpY0FyZ3VtZW50c0lubGluZXNfaAorCisjaW5jbHVkZSAiR2Vu
ZXJpY0FyZ3VtZW50cy5oIgorI2luY2x1ZGUgIkpTQXJndW1lbnRzSXRlcmF0b3IuaCIKKyNpbmNs
dWRlICJKU0NJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeworCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUeXBlPgorYm9vbCBHZW5lcmljQXJndW1lbnRzPFR5cGU+OjpnZXRPd25Qcm9wZXJ0eVNsb3Qo
SlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgaWRlbnQsIFBy
b3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICBUeXBlKiB0aGlzT2JqZWN0ID0ganNDYXN0PFR5cGUq
PihvYmplY3QpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgCisgICAgaWYgKCF0aGlz
T2JqZWN0LT5vdmVycm9kZVRoaW5ncygpKSB7CisgICAgICAgIGlmIChpZGVudCA9PSB2bS5wcm9w
ZXJ0eU5hbWVzLT5sZW5ndGgpIHsKKyAgICAgICAgICAgIHNsb3Quc2V0VmFsdWUodGhpc09iamVj
dCwgRG9udEVudW0sIGpzTnVtYmVyKHRoaXNPYmplY3QtPmludGVybmFsTGVuZ3RoKCkpKTsKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmIChpZGVudCA9PSB2
bS5wcm9wZXJ0eU5hbWVzLT5jYWxsZWUpIHsKKyAgICAgICAgICAgIHNsb3Quc2V0VmFsdWUodGhp
c09iamVjdCwgRG9udEVudW0sIHRoaXNPYmplY3QtPmNhbGxlZSgpLmdldCgpKTsKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHVuc2lnbmVkIGlu
ZGV4ID0gaWRlbnQuYXNJbmRleCgpOworICAgIGlmICh0aGlzT2JqZWN0LT5jYW5BY2Nlc3NJbmRl
eFF1aWNrbHkoaW5kZXgpKSB7CisgICAgICAgIHNsb3Quc2V0VmFsdWUodGhpc09iamVjdCwgTm9u
ZSwgdGhpc09iamVjdC0+Z2V0SW5kZXhRdWlja2x5KGluZGV4KSk7CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKyAgICAKKyAgICBpZiAoQmFzZTo6Z2V0T3duUHJvcGVydHlTbG90KHRoaXNP
YmplY3QsIGV4ZWMsIGlkZW50LCBzbG90KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgCisg
ICAgaWYgKGlkZW50ID09IHZtLnByb3BlcnR5TmFtZXMtPml0ZXJhdG9yUHJpdmF0ZU5hbWUpIHsK
KyAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGV4ZWMtPmxleGljYWxHbG9i
YWxPYmplY3QoKTsKKyAgICAgICAgdGhpc09iamVjdC0+SlNDX05BVElWRV9GVU5DVElPTih2bS5w
cm9wZXJ0eU5hbWVzLT5pdGVyYXRvclByaXZhdGVOYW1lLCBhcmd1bWVudHNGdW5jSXRlcmF0b3Is
IERvbnRFbnVtLCAwKTsKKyAgICAgICAgaWYgKEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3Qo
dGhpc09iamVjdCwgZXhlYywgaWRlbnQsIHNsb3QpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorICAgIAorICAgIHJldHVybiBmYWxzZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
VHlwZT4KK2Jvb2wgR2VuZXJpY0FyZ3VtZW50czxUeXBlPjo6Z2V0T3duUHJvcGVydHlTbG90QnlJ
bmRleChKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGluZGV4LCBQ
cm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgVHlwZSogdGhpc09iamVjdCA9IGpzQ2FzdDxUeXBl
Kj4ob2JqZWN0KTsKKyAgICAKKyAgICBpZiAodGhpc09iamVjdC0+Y2FuQWNjZXNzSW5kZXhRdWlj
a2x5KGluZGV4KSkgeworICAgICAgICBzbG90LnNldFZhbHVlKHRoaXNPYmplY3QsIE5vbmUsIHRo
aXNPYmplY3QtPmdldEluZGV4UXVpY2tseShpbmRleCkpOworICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CisgICAgCisgICAgcmV0dXJuIEJhc2U6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgo
b2JqZWN0LCBleGVjLCBpbmRleCwgc2xvdCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFR5cGU+
Cit2b2lkIEdlbmVyaWNBcmd1bWVudHM8VHlwZT46OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmpl
Y3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgYXJyYXksIEVu
dW1lcmF0aW9uTW9kZSBtb2RlKQoreworICAgIFR5cGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8VHlw
ZSo+KG9iamVjdCk7CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRoaXNPYmpl
Y3QtPmludGVybmFsTGVuZ3RoKCk7ICsraSkgeworICAgICAgICBpZiAoIXRoaXNPYmplY3QtPmNh
bkFjY2Vzc0luZGV4UXVpY2tseShpbmRleCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgYXJyYXkuYWRkKElkZW50aWZpZXI6OmZyb20oZXhlYywgaSkpOworICAgIH0KKyAgICBpZiAo
c2hvdWxkSW5jbHVkZURvbnRFbnVtUHJvcGVydGllcyhtb2RlKSAmJiAhdGhpc09iamVjdC0+b3Zl
cnJvZGVUaGluZ3MoKSkgeworICAgICAgICBhcnJheS5hZGQoZXhlYy0+cHJvcGVydHlOYW1lcygp
LmNhbGxlZSk7CisgICAgICAgIGFycmF5LmFkZChleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3Ro
KTsKKyAgICB9CisgICAgQmFzZTo6Z2V0T3duUHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBleGVj
LCBhcnJheSwgbW9kZSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFR5cGU+Cit2b2lkIEdlbmVy
aWNBcmd1bWVudHM8VHlwZT46OnB1dChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJv
cGVydHlOYW1lIGlkZW50LCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCit7
CisgICAgVHlwZSogdGhpc09iamVjdCA9IGpzQ2FzdDxUeXBlKj4ob2JqZWN0KTsKKyAgICBWTSYg
dm0gPSBleGVjLT52bSgpOworICAgIAorICAgIGlmICghdGhpc09iamVjdC0+b3ZlcnJvZGVUaGlu
Z3MoKQorICAgICAgICAmJiAoaWRlbnQgPT0gdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoCisgICAg
ICAgICAgICB8fCBpZGVudCA9PSB2bS5wcm9wZXJ0eU5hbWVzLT5jYWxsZWUpKQorICAgICAgICB0
aGlzT2JqZWN0LT5zbG93RG93bkFuZFdhc3RlTWVtb3J5KHZtKTsKKyAgICAKKyAgICB1bnNpZ25l
ZCBpbmRleCA9IGlkZW50LmFzSW5kZXgoKTsKKyAgICBpZiAodGhpc09iamVjdC0+Y2FuQWNjZXNz
SW5kZXhRdWlja2x5KGluZGV4KSkgeworICAgICAgICBzZXRJbmRleFF1aWNrbHkodm0sIGluZGV4
LCB2YWx1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgQmFzZTo6cHV0KHRo
aXNPYmplY3QsIGV4ZWMsIGlkZW50LCB2YWx1ZSwgc2xvdCk7Cit9CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFR5cGU+Cit2b2lkIEdlbmVyaWNBcmd1bWVudHM8VHlwZT46OnB1dEJ5SW5kZXgoSlNDZWxs
KiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGluZGV4LCBKU1ZhbHVlIHZhbHVlLCBi
b29sIHNob3VsZFRocm93KQoreworICAgIFR5cGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8VHlwZSo+
KG9iamVjdCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICAKKyAgICBpZiAodGhpc09i
amVjdC0+Y2FuU2V0SW5kZXhRdWlja2x5KGluZGV4KSkgeworICAgICAgICBzZXRJbmRleFF1aWNr
bHkodm0sIGluZGV4LCB2YWx1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAg
cmV0dXJuIEJhc2U6OnB1dEJ5SW5kZXgoY2VsbCwgZXhlYywgaW5kZXgsIHZhbHVlLCBzaG91bGRU
aHJvdyk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFR5cGU+Cit2b2lkIEdlbmVyaWNBcmd1bWVu
dHM8VHlwZT46OmRlbGV0ZVByb3BlcnR5KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQ
cm9wZXJ0eU5hbWUgaWRlbnQpCit7CisgICAgVHlwZSogdGhpc09iamVjdCA9IGpzQ2FzdDxUeXBl
Kj4ob2JqZWN0KTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIAorICAgIGlmICghdGhp
c09iamVjdC0+b3ZlcnJvZGVUaGluZ3MoKQorICAgICAgICAmJiAoaWRlbnQgPT0gdm0ucHJvcGVy
dHlOYW1lcy0+bGVuZ3RoCisgICAgICAgICAgICB8fCBpZGVudCA9PSB2bS5wcm9wZXJ0eU5hbWVz
LT5jYWxsZWUpKQorICAgICAgICB0aGlzT2JqZWN0LT5zbG93RG93bkFuZFdhc3RlTWVtb3J5KHZt
KTsKKyAgICAKKyAgICB1bnNpZ25lZCBpbmRleCA9IGlkZW50LmFzSW5kZXgoKTsKKyAgICBpZiAo
dGhpc09iamVjdC0+Y2FuQWNjZXNzSW5kZXhRdWlja2x5KGluZGV4KSkgeworICAgICAgICB0aGlz
T2JqZWN0LT5vdmVycmlkZUFyZ3VtZW50KHZtLCBpbmRleCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgCisgICAgQmFzZTo6ZGVsZXRlUHJvcGVydHkodGhpc09iamVjdCwgZXhlYywgaWRl
bnQpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPgordm9pZCBHZW5lcmljQXJndW1lbnRz
PFR5cGU+OjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4
ZWMsIHVuc2lnbmVkIGluZGV4KQoreworICAgIFR5cGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8VHlw
ZSo+KG9iamVjdCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICAKKyAgICBpZiAodGhp
c09iamVjdC0+Y2FuQWNjZXNzSW5kZXhRdWlja2x5KGluZGV4KSkgeworICAgICAgICB0aGlzT2Jq
ZWN0LT5vdmVycmlkZUFyZ3VtZW50KHZtLCBpbmRleCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgCisgICAgcmV0dXJuIEJhc2U6OmRlbGV0ZVByb3BlcnR5QnlJbmRleChjZWxsLCBleGVj
LCBpbmRleCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFR5cGU+Cit2b2lkIEdlbmVyaWNBcmd1
bWVudHM8VHlwZT46OmRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0
ZSogZXhlYywgUHJvcGVydHlOYW1lIGlkZW50LCBjb25zdCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRl
c2NyaXB0b3IsIGJvb2wgc2hvdWxkVGhyb3cpCit7CisgICAgVHlwZSogdGhpc09iamVjdCA9IGpz
Q2FzdDxUeXBlKj4ob2JqZWN0KTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIAorICAg
IGlmIChpZGVudCA9PSB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgKKyAgICAgICAgfHwgaWRlbnQg
PT0gdm0ucHJvcGVydHlOYW1lcy0+Y2FsbGVlKQorICAgICAgICB0aGlzT2JqZWN0LT5zbG93RG93
bkFuZFdhc3RlTWVtb3J5SWZOZWNlc3Nhcnkodm0pOworICAgIGVsc2UgeworICAgICAgICB1bnNp
Z25lZCBpbmRleCA9IGlkZW50LmFzSW5kZXgoKTsKKyAgICAgICAgaWYgKHRoaXNPYmplY3QtPmNh
bkFjY2Vzc0FyZ3VtZW50UXVpY2tseShpbmRleCkpIHsKKyAgICAgICAgICAgIGlmICghZGVzY3Jp
cHRvci5pc0FjY2Vzc29yRGVzY3JpcHRvcigpKSB7CisgICAgICAgICAgICAgICAgLy8gSWYgdGhl
IHByb3BlcnR5IGlzIG5vdCBkZWxldGVkIGFuZCB3ZSBhcmUgdXNpbmcgYSBub24tYWNjZXNzb3Ig
ZGVzY3JpcHRvciwgdGhlbgorICAgICAgICAgICAgICAgIC8vIG1ha2Ugc3VyZSB0aGF0IHRoZSBh
bGlhc2VkIGFyZ3VtZW50IHNlZXMgdGhlIHZhbHVlLgorICAgICAgICAgICAgICAgIGlmIChkZXNj
cmlwdG9yLnZhbHVlKCkpCisgICAgICAgICAgICAgICAgICAgIHRoaXNPYmplY3QtPnNldEluZGV4
UXVpY2tseSh2bSwgaSwgZGVzY3JpcHRvci52YWx1ZSgpKTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgIC8vIElmIHRoZSBwcm9wZXJ0eSBpcyBub3QgZGVsZXRlZCBhbmQgd2UgYXJlIHVz
aW5nIGEgbm9uLWFjY2Vzc29yLCB3cml0YWJsZQorICAgICAgICAgICAgICAgIC8vIGRlc2NyaXB0
b3IsIHRoZW4gd2UgYXJlIGRvbmUuIFRoZSBhcmd1bWVudCBjb250aW51ZXMgdG8gYmUgYWxpYXNl
ZC4gTm90ZSB0aGF0IHdlCisgICAgICAgICAgICAgICAgLy8gaWdub3JlIHRoZSByZXF1ZXN0IHRv
IGNoYW5nZSBlbnVtZXJhYmlsaXR5LiBXZSBhcHBlYXIgdG8gaGF2ZSBhbHdheXMgZG9uZSBzbywg
aW4KKyAgICAgICAgICAgICAgICAvLyBjYXNlcyB3aGVyZSB0aGUgYXJndW1lbnQgd2FzIHN0aWxs
IGFsaWFzZWQuCisgICAgICAgICAgICAgICAgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNDE5NTIKKyAgICAgICAgICAgICAgICBpZiAoZGVzY3JpcHRv
ci53cml0YWJsZSgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgICAgICAvLyBJZiB0aGUgcHJvcGVydHkgaXMgYSBub24t
ZGVsZXRlZCBhcmd1bWVudCwgdGhlbiBtb3ZlIGl0IGludG8gdGhlIGJhc2Ugb2JqZWN0IGFuZAor
ICAgICAgICAgICAgLy8gdGhlbiBkZWxldGUgaXQuCisgICAgICAgICAgICBKU1ZhbHVlIHZhbHVl
ID0gdGhpc09iamVjdC0+Z2V0SW5kZXhRdWlja2x5KGkpOworICAgICAgICAgICAgQVNTRVJUKHZh
bHVlKTsKKyAgICAgICAgICAgIG9iamVjdC0+cHV0RGlyZWN0TWF5QmVJbmRleChleGVjLCBwcm9w
ZXJ0eU5hbWUsIHZhbHVlKTsKKyAgICAgICAgICAgIHRoaXNPYmplY3QtPm92ZXJyaWRlQXJndW1l
bnQodm0sIGkpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8vIE5vdyBqdXN0IGxldCB0
aGUgbm9ybWFsIG9iamVjdCBtYWNoaW5lcnkgZG8gaXRzIHRoaW5nLgorICAgIHJldHVybiBCYXNl
OjpkZWZpbmVPd25Qcm9wZXJ0eShvYmplY3QsIGV4ZWMsIGlkZW50LCBkZXNjcmlwdG9yLCBzaG91
bGRUaHJvdyk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gR2VuZXJpY0Fy
Z3VtZW50c0lubGluZXNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9H
ZW5lcmljT2Zmc2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvR2VuZXJpY09mZnNldC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvR2VuZXJpY09mZnNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTExIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
R2VuZXJpY09mZnNldF9oCisjZGVmaW5lIEdlbmVyaWNPZmZzZXRfaAorCisjaW5jbHVkZSA8d3Rm
L0Fzc2VydGlvbnMuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKKy8vIEEgbWl4aW4gZm9yIGNyZWF0
aW5nIHRoZSB2YXJpb3VzIGtpbmRzIG9mIHZhcmlhYmxlIG9mZnNldHMgdGhhdCBvdXIgZW5naW5l
IHN1cHBvcnRzLgordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2NsYXNzIEdlbmVyaWNPZmZzZXQgewor
cHVibGljOgorICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnZhbGlkT2Zmc2V0ID0gVUlOVF9N
QVg7CisgICAgCisgICAgR2VuZXJpY09mZnNldCgpCisgICAgICAgIDogbV9vZmZzZXQoaW52YWxp
ZE9mZnNldCkKKyAgICB7CisgICAgfQorICAgIAorICAgIGV4cGxpY2l0IEdlbmVyaWNPZmZzZXQo
dW5zaWduZWQgb2Zmc2V0KQorICAgICAgICA6IG1fb2Zmc2V0KG9mZnNldCkKKyAgICB7CisgICAg
fQorICAgIAorICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQgPT0g
aW52YWxpZE9mZnNldDsgfQorICAgIAorICAgIHVuc2lnbmVkIG9mZnNldFVuY2hlY2tlZCgpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9vZmZzZXQ7CisgICAgfQorICAgIAorICAgIHVu
c2lnbmVkIG9mZnNldCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQobV9vZmZzZXQgIT0g
aW52YWxpZE9mZnNldCk7CisgICAgICAgIHJldHVybiBtX29mZnNldDsKKyAgICB9CisgICAgCisg
ICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFQmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIG1fb2Zmc2V0ID09IG90aGVyLm9mZnNldFVuY2hlY2tlZCgpOworICAgIH0KKyAgICBi
b29sIG9wZXJhdG9yIT0oY29uc3QgVCYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gbV9vZmZzZXQgIT0gb3RoZXIub2Zmc2V0VW5jaGVja2VkKCk7CisgICAgfQorICAgIGJvb2wg
b3BlcmF0b3I8KGNvbnN0IFQmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1f
b2Zmc2V0IDwgb3RoZXIub2Zmc2V0VW5jaGVja2VkKCk7CisgICAgfQorICAgIGJvb2wgb3BlcmF0
b3I+KGNvbnN0IFQmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fb2Zmc2V0
ID4gb3RoZXIub2Zmc2V0VW5jaGVja2VkKCk7CisgICAgfQorICAgIGJvb2wgb3BlcmF0b3I8PShj
b25zdCBUJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX29mZnNldCA8PSBv
dGhlci5vZmZzZXRVbmNoZWNrZWQoKTsKKyAgICB9CisgICAgYm9vbCBvcGVyYXRvcj49KGNvbnN0
IFQmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fb2Zmc2V0ID49IG90aGVy
Lm9mZnNldFVuY2hlY2tlZCgpOworICAgIH0KKyAgICAKKyAgICBUIG9wZXJhdG9yKyhpbnQgdmFs
dWUpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gVChvZmZzZXQoKSArIHZhbHVlKTsKKyAg
ICB9CisgICAgVCBvcGVyYXRvci0oaW50IHZhbHVlKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIFQob2Zmc2V0KCkgLSB2YWx1ZSk7CisgICAgfQorICAgIFQmIG9wZXJhdG9yKz0oaW50IHZh
bHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuICp0aGlzID0gKnRoaXMgKyB2YWx1ZTsKKyAgICB9
CisgICAgVCYgb3BlcmF0b3ItPShpbnQgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gKnRo
aXMgPSAqdGhpcyAtIHZhbHVlOworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgdW5zaWduZWQg
bV9vZmZzZXQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEdlbmVyaWNP
ZmZzZXRfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FyZ3VtZW50
c0l0ZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0FyZ3VtZW50c0l0ZXJhdG9yLmNwcAkocmV2aXNpb24gMTgwNjkxKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcmd1bWVudHNJdGVyYXRvci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlLCBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTUgQXBwbGUs
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMzMsMTAgKzMzLDE4IEBAIG5hbWVzcGFjZSBKU0MgewogCiBjb25zdCBDbGFzc0luZm8g
SlNBcmd1bWVudHNJdGVyYXRvcjo6c19pbmZvID0geyAiQXJndW1lbnRzSXRlcmF0b3IiLCAmQmFz
ZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTQXJndW1lbnRzSXRlcmF0b3IpIH07
CiAKLXZvaWQgSlNBcmd1bWVudHNJdGVyYXRvcjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBBcmd1
bWVudHMqIGFyZ3VtZW50cykKK3ZvaWQgSlNBcmd1bWVudHNJdGVyYXRvcjo6ZmluaXNoQ3JlYXRp
b24oVk0mIHZtLCBKU09iamVjdCogYXJndW1lbnRzKQogewogICAgIEJhc2U6OmZpbmlzaENyZWF0
aW9uKHZtKTsKICAgICBtX2FyZ3VtZW50cy5zZXQodm0sIHRoaXMsIGFyZ3VtZW50cyk7CiB9CiAK
K0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJndW1lbnRzRnVuY0l0ZXJhdG9yKEV4ZWNT
dGF0ZSogZXhlYykKK3sKKyAgICBKU09iamVjdCogdGhpc09iaiA9IGV4ZWMtPnRoaXNWYWx1ZSgp
LnRvVGhpcyhleGVjLCBTdHJpY3RNb2RlKS50b09iamVjdChleGVjKTsKKyAgICBpZiAoIXRoaXNP
YmotPmluaGVyaXRzKEFyZ3VtZW50czo6aW5mbygpKSAmJiAhdGhpc09iai0+aW5oZXJpdHMoT3V0
T2ZCYW5kQXJndW1lbnRzOjppbmZvKCkpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHRocm93VHlwZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiQXR0ZW1wdGVkIHRvIHVzZSBBcmd1
bWVudHMgaXRlcmF0b3Igb24gbm9uLUFyZ3VtZW50cyBvYmplY3QiKSkpOworICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoSlNBcmd1bWVudHNJdGVyYXRvcjo6Y3JlYXRlKGV4ZWMtPnZtKCksIGV4
ZWMtPmNhbGxlZSgpLT5nbG9iYWxPYmplY3QoKS0+YXJndW1lbnRzSXRlcmF0b3JTdHJ1Y3R1cmUo
KSwgdGhpc09iaikpOworfQorCiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0FyZ3VtZW50c0l0ZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNBcmd1bWVudHNJdGVyYXRvci5oCShyZXZpc2lvbiAxODA2OTEpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FyZ3VtZW50c0l0ZXJhdG9yLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxl
LCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTUg
QXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMjYsNyArMjYsNyBAQAogI2lmbmRlZiBKU0FyZ3VtZW50c0l0ZXJhdG9yX2gK
ICNkZWZpbmUgSlNBcmd1bWVudHNJdGVyYXRvcl9oCiAKLSNpbmNsdWRlICJBcmd1bWVudHMuaCIK
KyNpbmNsdWRlICJKU09iamVjdC5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtNDEsNyArNDEs
NyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFs
T2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwg
aW5mbygpKTsKICAgICB9CiAKLSAgICBzdGF0aWMgSlNBcmd1bWVudHNJdGVyYXRvciogY3JlYXRl
KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEFyZ3VtZW50cyogYXJndW1lbnRzKQorICAg
IHN0YXRpYyBKU0FyZ3VtZW50c0l0ZXJhdG9yKiBjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgSlNPYmplY3QqIGFyZ3VtZW50cykKICAgICB7CiAgICAgICAgIEpTQXJndW1lbnRz
SXRlcmF0b3IqIGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNBcmd1bWVu
dHNJdGVyYXRvcj4odm0uaGVhcCkpIEpTQXJndW1lbnRzSXRlcmF0b3Iodm0sIHN0cnVjdHVyZSk7
CiAgICAgICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbih2bSwgYXJndW1lbnRzKTsKQEAgLTUw
LDExICs1MCwxMSBAQCBwdWJsaWM6CiAKICAgICBib29sIG5leHQoQ2FsbEZyYW1lKiBjYWxsRnJh
bWUsIEpTVmFsdWUmIHZhbHVlKQogICAgIHsKLSAgICAgICAgaWYgKG1fbmV4dEluZGV4ID49IG1f
YXJndW1lbnRzLT5sZW5ndGgoY2FsbEZyYW1lKSkKKyAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0K
KyAgICAgICAgICAgIG1fYXJndW1lbnRzLT5nZXQoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPnByb3Bl
cnR5TmFtZXMoKS5sZW5ndGgpLnRvVUludDMyKGNhbGxGcmFtZSk7CisgICAgICAgIGlmIChtX25l
eHRJbmRleCA+PSBsZW5ndGgpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHZh
bHVlID0gbV9hcmd1bWVudHMtPnRyeUdldEFyZ3VtZW50KG1fbmV4dEluZGV4KyspOwotICAgICAg
ICBpZiAoIXZhbHVlKQotICAgICAgICAgICAgdmFsdWUgPSBqc1VuZGVmaW5lZCgpOworICAgICAg
ICB2YWx1ZSA9IG1fYXJndW1lbnRzLT5nZXRJbmRleChjYWxsRnJhbWUsIG1fbmV4dEluZGV4Kysp
OwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTY4LDEyICs2OCwxNCBAQCBwcml2
YXRlOgogICAgIHsKICAgICB9CiAKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgQXJndW1l
bnRzKik7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIEpTT2JqZWN0Kik7CiAgICAgCi0g
ICAgV3JpdGVCYXJyaWVyPEFyZ3VtZW50cz4gbV9hcmd1bWVudHM7CisgICAgV3JpdGVCYXJyaWVy
PEpTT2JqZWN0PiBtX2FyZ3VtZW50czsKICAgICBzaXplX3QgbV9uZXh0SW5kZXg7CiB9OwogCitF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFyZ3VtZW50c0Z1bmNJdGVyYXRvcihFeGVjU3Rh
dGUqKTsKKwogfQogCiAjZW5kaWYgLy8gIWRlZmluZWQoSlNBcmd1bWVudHNJdGVyYXRvcl9oKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNFbnZpcm9ubWVudFJlY29yZC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNFbnZpcm9u
bWVudFJlY29yZC5jcHAJKHJldmlzaW9uIDE4MDY5MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTRW52aXJvbm1lbnRSZWNvcmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAxMiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMTIs
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0zNSw0ICszNSwxMiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY29uc3Qg
Q2xhc3NJbmZvIEpTRW52aXJvbm1lbnRSZWNvcmQ6OnNfaW5mbyA9IHsgIkVudmlyb25tZW50UmVj
b3JkIiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU0Vudmlyb25tZW50
UmVjb3JkKSB9OwogCit2b2lkIEpTRW52aXJvbm1lbnRSZWNvcmQ6OnZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBKU0Vudmlyb25tZW50UmVj
b3JkKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTRW52aXJvbm1lbnRSZWNvcmQqPihjZWxsKTsKKyAg
ICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CisgICAgQmFz
ZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKKyAgICB2aXNpdG9yLmFwcGVu
ZFZhbHVlcyh0aGlzT2JqZWN0LT52YXJpYWJsZXMoKSwgbV9zeW1ib2xUYWJsZS0+c2NvcGVTaXpl
KCkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTRW52aXJvbm1lbnRSZWNvcmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0Vudmlyb25tZW50UmVjb3JkLmgJKHJldmlzaW9uIDE4MDY5
MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRW52aXJvbm1lbnRSZWNvcmQu
aAkod29ya2luZyBjb3B5KQpAQCAtNDYsMTEgKzQ2LDI2IEBAIGNsYXNzIEpTRW52aXJvbm1lbnRS
ZWNvcmQgOiBwdWJsaWMgSlNTeW0KIHB1YmxpYzoKICAgICB0eXBlZGVmIEpTU3ltYm9sVGFibGVP
YmplY3QgQmFzZTsKIAotICAgIFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIHJlZ2lzdGVycygp
IHsgcmV0dXJuIG1fcmVnaXN0ZXJzOyB9Ci0gICAgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiYg
cmVnaXN0ZXJBdChpbnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fcmVnaXN0ZXJzW2luZGV4XTsg
fQorICAgIFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIHZhcmlhYmxlcygpCisgICAgeworICAg
ICAgICByZXR1cm4gYml0d2lzZV9jYXN0PFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qPihiaXR3
aXNlX2Nhc3Q8Y2hhcio+KHRoaXMpICsgb2Zmc2V0T2ZWYXJpYWJsZXMoKSk7CisgICAgfQorICAg
IAorICAgIGJvb2wgaXNWYWxpZChTY29wZU9mZnNldCBvZmZzZXQpCisgICAgeworICAgICAgICBy
ZXR1cm4gISFvZmZzZXQgJiYgb2Zmc2V0Lm9mZnNldCgpIDwgbV9zeW1ib2xUYWJsZS0+c2NvcGVT
aXplKCk7CisgICAgfQorICAgIAorICAgIFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4mIHZhcmlh
YmxlQXQoU2NvcGVPZmZzZXQgb2Zmc2V0KSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlz
VmFsaWQob2Zmc2V0KSk7CisgICAgICAgIHJldHVybiB2YXJpYWJsZXMoKVtvZmZzZXQub2Zmc2V0
KCldOworICAgIH0KIAotICAgIFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIGNvbnN0ICogYWRk
cmVzc09mUmVnaXN0ZXJzKCkgY29uc3QgeyByZXR1cm4gJm1fcmVnaXN0ZXJzOyB9Ci0gICAgc3Rh
dGljIHNpemVfdCBvZmZzZXRPZlJlZ2lzdGVycygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihK
U0Vudmlyb25tZW50UmVjb3JkLCBtX3JlZ2lzdGVycyk7IH0KKyAgICBzdGF0aWMgc2l6ZV90IG9m
ZnNldE9mVmFyaWFibGVzKCkKKyAgICB7CisgICAgICAgIHJldHVybiBXVEY6OnJvdW5kVXBUb011
bHRpcGxlT2Y8c2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPik+KHNpemVvZihKU0Vudmlyb25t
ZW50UmVjb3JkKSk7CisgICAgfQogCiAgICAgREVDTEFSRV9JTkZPOwogCkBAIC02MCwxNSArNzUs
MzUgQEAgcHJvdGVjdGVkOgogICAgIEpTRW52aXJvbm1lbnRSZWNvcmQoCiAgICAgICAgIFZNJiB2
bSwKICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsCi0gICAgICAgIFJlZ2lzdGVyKiByZWdp
c3RlcnMsCiAgICAgICAgIEpTU2NvcGUqIHNjb3BlLAogICAgICAgICBTeW1ib2xUYWJsZSogc3lt
Ym9sVGFibGUpCiAgICAgICAgIDogQmFzZSh2bSwgc3RydWN0dXJlLCBzY29wZSwgc3ltYm9sVGFi
bGUpCi0gICAgICAgICwgbV9yZWdpc3RlcnMocmVpbnRlcnByZXRfY2FzdDxXcml0ZUJhcnJpZXJC
YXNlPFVua25vd24+Kj4ocmVnaXN0ZXJzKSkKICAgICB7CiAgICAgfQotCi0gICAgV3JpdGVCYXJy
aWVyQmFzZTxVbmtub3duPiogbV9yZWdpc3RlcnM7IC8vICJyIiBpbiB0aGUgc3RhY2suCisgICAg
CisgICAgc3RhdGljIHNpemVfdCBhbGxvY2F0aW9uU2l6ZUZvclNjb3BlU2l6ZSh1bnNpZ25lZCBz
Y29wZVNpemUpCisgICAgeworICAgICAgICByZXR1cm4gb2Zmc2V0T2ZWYXJpYWJsZXMoKSArIHNj
b3BlU2l6ZSAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pOworICAgIH0KKyAgICAKKyAg
ICBzdGF0aWMgc2l6ZV90IGFsbG9jYXRpb25TaXplKFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSkK
KyAgICB7CisgICAgICAgIHJldHVybiBhbGxvY2F0aW9uU2l6ZUZvclNjb3BlU2l6ZShzeW1ib2xU
YWJsZS0+c2NvcGVTaXplKCkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9u
VW5pbml0aWFsaXplZChWTSYgdm0pCisgICAgeworICAgICAgICBCYXNlOjpmaW5pc2hDcmVhdGlv
bih2bSk7CisgICAgfQorICAgIAorICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mIHZtKQorICAg
IHsKKyAgICAgICAgZmluaXNoQ3JlYXRpb25VbmluaXRpYWxpemVkKHZtKTsKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gbV9zeW1ib2xUYWJsZS0+c2NvcGVTaXplKCk7IGktLTspIHsKKyAgICAg
ICAgICAgIC8vIEZpbGxpbmcgdGhpcyB3aXRoIHVuZGVmaW5lZCBpcyB1c2VmdWwgYmVjYXVzZSB0
aGF0J3Mgd2hhdCB2YXJpYWJsZXMgc3RhcnQgb3V0IGFzLgorICAgICAgICAgICAgdmFyaWFibGVB
dChpKS5zZXRVbmRlZmluZWQoKTsKKyAgICAgICAgfQorICAgIH0KIH07CiAKIH0gLy8gbmFtZXNw
YWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMZXhpY2FsRW52
aXJvbm1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTTGV4aWNhbEVudmlyb25tZW50LmNwcAkocmV2aXNpb24gMTgwNjkxKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMZXhpY2FsRW52aXJvbm1lbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSwgMjAx
NCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgs
IDIwMDksIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MCwyNyArNDAsMTkgQEAgbmFtZXNwYWNlIEpT
QyB7CiAKIGNvbnN0IENsYXNzSW5mbyBKU0xleGljYWxFbnZpcm9ubWVudDo6c19pbmZvID0geyAi
SlNMZXhpY2FsRW52aXJvbm1lbnQiLCAmQmFzZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RB
QkxFKEpTTGV4aWNhbEVudmlyb25tZW50KSB9OwogCi12b2lkIEpTTGV4aWNhbEVudmlyb25tZW50
Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi17Ci0g
ICAgSlNMZXhpY2FsRW52aXJvbm1lbnQqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNMZXhpY2FsRW52
aXJvbm1lbnQqPihjZWxsKTsKLSAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmpl
Y3QsIGluZm8oKSk7Ci0gICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9y
KTsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdGhpc09iamVjdC0+c3ltYm9sVGFibGUoKS0+
Y2FwdHVyZUNvdW50KCk7ICsraSkKLSAgICAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3Qt
PnN0b3JhZ2UoKVtpXSk7Ci19Ci0KIGlubGluZSBib29sIEpTTGV4aWNhbEVudmlyb25tZW50Ojpz
eW1ib2xUYWJsZUdldChQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNs
b3QpCiB7CiAgICAgU3ltYm9sVGFibGVFbnRyeSBlbnRyeSA9IHN5bWJvbFRhYmxlKCktPmlubGlu
ZUdldChwcm9wZXJ0eU5hbWUudWlkKCkpOwogICAgIGlmIChlbnRyeS5pc051bGwoKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCisgICAgU2NvcGVPZmZzZXQgb2Zmc2V0ID0gZW50cnkuc2NvcGVP
ZmZzZXQoKTsKKwogICAgIC8vIERlZmVuZCBhZ2FpbnN0IHRoZSBpbnNwZWN0b3IgYXNraW5nIGZv
ciBhIHZhciBhZnRlciBpdCBoYXMgYmVlbiBvcHRpbWl6ZWQgb3V0LgotICAgIGlmICghaXNWYWxp
ZChlbnRyeSkpCisgICAgaWYgKCFpc1ZhbGlkKG9mZnNldCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAotICAgIHNsb3Quc2V0VmFsdWUodGhpcywgRG9udEVudW0sIHJlZ2lzdGVyQXQoZW50cnku
Z2V0SW5kZXgoKSkuZ2V0KCkpOworICAgIHNsb3Quc2V0VmFsdWUodGhpcywgRG9udEVudW0sIHZh
cmlhYmxlQXQob2Zmc2V0KS5nZXQoKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTcwLDEx
ICs2MiwxMyBAQCBpbmxpbmUgYm9vbCBKU0xleGljYWxFbnZpcm9ubWVudDo6c3ltYm9sCiAgICAg
aWYgKGVudHJ5LmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICBTY29wZU9m
ZnNldCBvZmZzZXQgPSBlbnRyeS5zY29wZU9mZnNldCgpOworCiAgICAgLy8gRGVmZW5kIGFnYWlu
c3QgdGhlIGluc3BlY3RvciBhc2tpbmcgZm9yIGEgdmFyIGFmdGVyIGl0IGhhcyBiZWVuIG9wdGlt
aXplZCBvdXQuCi0gICAgaWYgKCFpc1ZhbGlkKGVudHJ5KSkKKyAgICBpZiAoIWlzVmFsaWQob2Zm
c2V0KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgZGVzY3JpcHRvci5zZXREZXNjcmlw
dG9yKHJlZ2lzdGVyQXQoZW50cnkuZ2V0SW5kZXgoKSkuZ2V0KCksIGVudHJ5LmdldEF0dHJpYnV0
ZXMoKSk7CisgICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKHZhcmlhYmxlQXQob2Zmc2V0KS5n
ZXQoKSwgZW50cnkuZ2V0QXR0cmlidXRlcygpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAt
OTUsMTIgKzg5LDEzIEBAIGlubGluZSBib29sIEpTTGV4aWNhbEVudmlyb25tZW50OjpzeW1ib2wK
ICAgICAgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBTdHJpY3RNb2RlUmVhZG9ubHlQ
cm9wZXJ0eVdyaXRlRXJyb3IpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0K
KyAgICAgICAgU2NvcGVPZmZzZXQgb2Zmc2V0ID0gaXRlci0+dmFsdWUuc2NvcGVPZmZzZXQoKTsK
ICAgICAgICAgLy8gRGVmZW5kIGFnYWluc3QgdGhlIGluc3BlY3RvciBhc2tpbmcgZm9yIGEgdmFy
IGFmdGVyIGl0IGhhcyBiZWVuIG9wdGltaXplZCBvdXQuCi0gICAgICAgIGlmICghaXNWYWxpZChp
dGVyLT52YWx1ZSkpCisgICAgICAgIGlmICghaXNWYWxpZChvZmZzZXQpKQogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgICAgICBpZiAoVmFyaWFibGVXYXRjaHBvaW50U2V0KiBzZXQgPSBp
dGVyLT52YWx1ZS53YXRjaHBvaW50U2V0KCkpCi0gICAgICAgICAgICBzZXQtPmludmFsaWRhdGUo
VmFyaWFibGVXcml0ZUZpcmVEZXRhaWwodGhpcywgcHJvcGVydHlOYW1lKSk7IC8vIERvbid0IG1l
c3MgYXJvdW5kIC0gaWYgd2UgaGFkIGZvdW5kIHRoaXMgc3RhdGljYWxseSwgd2Ugd291bGQgaGF2
ZSBpbnZjYWxpZGF0ZWQgaXQuCi0gICAgICAgIHJlZyA9ICZyZWdpc3RlckF0KGl0ZXItPnZhbHVl
LmdldEluZGV4KCkpOworICAgICAgICAgICAgc2V0LT5pbnZhbGlkYXRlKFZhcmlhYmxlV3JpdGVG
aXJlRGV0YWlsKHRoaXMsIHByb3BlcnR5TmFtZSkpOyAvLyBEb24ndCBtZXNzIGFyb3VuZCAtIGlm
IHdlIGhhZCBmb3VuZCB0aGlzIHN0YXRpY2FsbHksIHdlIHdvdWxkIGhhdmUgaW52YWxpZGF0ZWQg
aXQuCisgICAgICAgIHJlZyA9ICZ2YXJpYWJsZUF0KG9mZnNldCk7CiAgICAgfQogICAgIHJlZy0+
c2V0KHZtLCB0aGlzLCB2YWx1ZSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC0xMTYsNyArMTExLDcg
QEAgdm9pZCBKU0xleGljYWxFbnZpcm9ubWVudDo6Z2V0T3duTm9uSW5kZQogICAgICAgICBmb3Ig
KFN5bWJvbFRhYmxlOjpNYXA6Oml0ZXJhdG9yIGl0ID0gdGhpc09iamVjdC0+c3ltYm9sVGFibGUo
KS0+YmVnaW4obG9ja2VyKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgICAgICBpZiAoaXQt
PnZhbHVlLmdldEF0dHJpYnV0ZXMoKSAmIERvbnRFbnVtICYmICFzaG91bGRJbmNsdWRlRG9udEVu
dW1Qcm9wZXJ0aWVzKG1vZGUpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAg
ICAgaWYgKCF0aGlzT2JqZWN0LT5pc1ZhbGlkKGl0LT52YWx1ZSkpCisgICAgICAgICAgICBpZiAo
IXRoaXNPYmplY3QtPmlzVmFsaWQoaXQtPnZhbHVlLnNjb3BlT2Zmc2V0KCkpKQogICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmll
cihleGVjLCBpdC0+a2V5LmdldCgpKSk7CiAgICAgICAgIH0KQEAgLTEzNywxMSArMTMyLDEzIEBA
IGlubGluZSBib29sIEpTTGV4aWNhbEVudmlyb25tZW50OjpzeW1ib2wKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgICAgU3ltYm9sVGFibGVFbnRyeSYgZW50cnkgPSBpdGVyLT52YWx1
ZTsKICAgICAgICAgQVNTRVJUKCFlbnRyeS5pc051bGwoKSk7Ci0gICAgICAgIGlmICghaXNWYWxp
ZChlbnRyeSkpCisgICAgICAgIAorICAgICAgICBTY29wZU9mZnNldCBvZmZzZXQgPSBlbnRyeS5z
Y29wZU9mZnNldCgpOworICAgICAgICBpZiAoIWlzVmFsaWQob2Zmc2V0KSkKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAgICAgCiAgICAgICAgIGVudHJ5LnNldEF0dHJpYnV0ZXMoYXR0
cmlidXRlcyk7Ci0gICAgICAgIHJlZyA9ICZyZWdpc3RlckF0KGVudHJ5LmdldEluZGV4KCkpOwor
ICAgICAgICByZWcgPSAmdmFyaWFibGVBdChvZmZzZXQpOwogICAgIH0KICAgICByZWctPnNldCh2
bSwgdGhpcywgdmFsdWUpOwogICAgIHJldHVybiB0cnVlOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNMZXhpY2FsRW52aXJvbm1lbnQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xleGljYWxFbnZpcm9ubWVudC5oCShyZXZpc2lv
biAxODA2OTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xleGljYWxFbnZp
cm9ubWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwOCwgMjAwOSwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDksIDIwMTMtMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQx
LDMzICs0MSwyNyBAQCBjbGFzcyBSZWdpc3RlcjsKICAgICAKIGNsYXNzIEpTTGV4aWNhbEVudmly
b25tZW50IDogcHVibGljIEpTRW52aXJvbm1lbnRSZWNvcmQgewogcHJpdmF0ZToKLSAgICBKU0xl
eGljYWxFbnZpcm9ubWVudChWTSYsIENhbGxGcmFtZSosIFJlZ2lzdGVyKiwgSlNTY29wZSosIENv
ZGVCbG9jayopOworICAgIEpTTGV4aWNhbEVudmlyb25tZW50KFZNJiwgU3RydWN0dXJlKiwgSlNT
Y29wZSosIFN5bWJvbFRhYmxlKik7CiAgICAgCiBwdWJsaWM6CiAgICAgdHlwZWRlZiBKU0Vudmly
b25tZW50UmVjb3JkIEJhc2U7CiAKLSAgICBzdGF0aWMgSlNMZXhpY2FsRW52aXJvbm1lbnQqIGNy
ZWF0ZShWTSYgdm0sIENhbGxGcmFtZSogY2FsbEZyYW1lLCBSZWdpc3RlciogcmVnaXN0ZXJzLCBK
U1Njb3BlKiBjdXJyZW50U2NvcGUsIENvZGVCbG9jayogY29kZUJsb2NrKQorICAgIHN0YXRpYyBK
U0xleGljYWxFbnZpcm9ubWVudCogY3JlYXRlKAorICAgICAgICBWTSYgdm0sIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTU2NvcGUqIGN1cnJlbnRTY29wZSwgU3ltYm9sVGFibGUqIHN5
bWJvbFRhYmxlKQogICAgIHsKLSAgICAgICAgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlID0gY29k
ZUJsb2NrLT5zeW1ib2xUYWJsZSgpOwotICAgICAgICBBU1NFUlQoY29kZUJsb2NrLT5jb2RlVHlw
ZSgpID09IEZ1bmN0aW9uQ29kZSk7Ci0gICAgICAgIEpTTGV4aWNhbEVudmlyb25tZW50KiBsZXhp
Y2FsRW52aXJvbm1lbnQgPSBuZXcgKAotICAgICAgICAgICAgTm90TnVsbCwKLSAgICAgICAgICAg
IGFsbG9jYXRlQ2VsbDxKU0xleGljYWxFbnZpcm9ubWVudD4oCi0gICAgICAgICAgICAgICAgdm0u
aGVhcCwKLSAgICAgICAgICAgICAgICBhbGxvY2F0aW9uU2l6ZShzeW1ib2xUYWJsZSkKLSAgICAg
ICAgICAgICkKLSAgICAgICAgKSBKU0xleGljYWxFbnZpcm9ubWVudCh2bSwgY2FsbEZyYW1lLCBy
ZWdpc3RlcnMsIGN1cnJlbnRTY29wZSwgY29kZUJsb2NrKTsKLSAgICAgICAgbGV4aWNhbEVudmly
b25tZW50LT5maW5pc2hDcmVhdGlvbih2bSk7Ci0gICAgICAgIHJldHVybiBsZXhpY2FsRW52aXJv
bm1lbnQ7CisgICAgICAgIEpTTGV4aWNhbEVudmlyb25tZW50KiByZXN1bHQgPQorICAgICAgICAg
ICAgbmV3IChOb3ROdWxsLCBhbGxvY2F0aW9uU2l6ZShzeW1ib2xUYWJsZSkpCisgICAgICAgICAg
ICBKU0xleGljYWxFbnZpcm9ubWVudCh2bSwgZ2xvYmFsT2JqZWN0LT5hY3RpdmF0aW9uU3RydWN0
dXJlKCksIGN1cnJlbnRTY29wZSwgc3ltYm9sVGFibGUpOworICAgICAgICByZXN1bHQtPmZpbmlz
aENyZWF0aW9uKHZtKTsKICAgICB9Ci0gICAgICAgIAorICAgIAogICAgIHN0YXRpYyBKU0xleGlj
YWxFbnZpcm9ubWVudCogY3JlYXRlKFZNJiB2bSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTU2Nv
cGUqIGN1cnJlbnRTY29wZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2spCiAgICAgewotICAgICAgICBy
ZXR1cm4gY3JlYXRlKHZtLCBjYWxsRnJhbWUsIGNhbGxGcmFtZS0+cmVnaXN0ZXJzKCkgKyBjb2Rl
QmxvY2stPmZyYW1lUG9pbnRlck9mZnNldFRvR2V0QWN0aXZhdGlvblJlZ2lzdGVycygpLCBjdXJy
ZW50U2NvcGUsIGNvZGVCbG9jayk7CisgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QgPSBjYWxsRnJhbWUtPmxleGljYWxHbG9iYWxPYmplY3QoKTsKKyAgICAgICAgU3ltYm9sVGFi
bGUqIHN5bWJvbFRhYmxlID0gY29kZUJsb2NrLT5zeW1ib2xUYWJsZSgpOworICAgICAgICByZXR1
cm4gY3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIGN1cnJlbnRTY29wZSwgc3ltYm9sdGFibGUpOwog
ICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0
b3ImKTsKLQorICAgICAgICAKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNP
YmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogICAgIHN0
YXRpYyB2b2lkIGdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0
ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKIApAQCAtODEsMTIgKzc1
LDYgQEAgcHVibGljOgogCiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZN
JiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkgeyByZXR1cm4gU3RydWN0dXJlOjpj
cmVhdGUodm0sIGdsb2JhbE9iamVjdCwganNOdWxsKCksIFR5cGVJbmZvKEFjdGl2YXRpb25PYmpl
Y3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7IH0KIAotICAgIFdyaXRlQmFycmllckJh
c2U8VW5rbm93bj4mIHJlZ2lzdGVyQXQoaW50KSBjb25zdDsKLSAgICBib29sIGlzVmFsaWRJbmRl
eChpbnQpIGNvbnN0OwotICAgIGJvb2wgaXNWYWxpZChjb25zdCBTeW1ib2xUYWJsZUVudHJ5Jikg
Y29uc3Q7Ci0gICAgaW50IHJlZ2lzdGVyc09mZnNldCgpOwotICAgIHN0YXRpYyBpbnQgcmVnaXN0
ZXJzT2Zmc2V0KFN5bWJvbFRhYmxlKik7Ci0KIHByb3RlY3RlZDoKICAgICBzdGF0aWMgY29uc3Qg
dW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBP
dmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzIHwgQmFzZTo6U3RydWN0dXJlRmxhZ3M7CiAKQEAgLTk2
LDMyICs4NCwxMyBAQCBwcml2YXRlOgogICAgIGJvb2wgc3ltYm9sVGFibGVHZXQoUHJvcGVydHlO
YW1lLCBQcm9wZXJ0eVNsb3QmLCBib29sJiBzbG90SXNXcml0ZWFibGUpOwogICAgIGJvb2wgc3lt
Ym9sVGFibGVQdXQoRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBib29sIHNob3Vs
ZFRocm93KTsKICAgICBib29sIHN5bWJvbFRhYmxlUHV0V2l0aEF0dHJpYnV0ZXMoVk0mLCBQcm9w
ZXJ0eU5hbWUsIEpTVmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpOwotCi0gICAgc3RhdGljIHNp
emVfdCBhbGxvY2F0aW9uU2l6ZShTeW1ib2xUYWJsZSopOwotICAgIHN0YXRpYyBzaXplX3Qgc3Rv
cmFnZU9mZnNldCgpOwotCi0gICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiBzdG9yYWdlKCk7IC8v
IGNhcHR1cmVDb3VudCgpIG51bWJlciBvZiByZWdpc3RlcnMuCiB9OwogCi1pbmxpbmUgSlNMZXhp
Y2FsRW52aXJvbm1lbnQ6OkpTTGV4aWNhbEVudmlyb25tZW50KFZNJiB2bSwgQ2FsbEZyYW1lKiBj
YWxsRnJhbWUsIFJlZ2lzdGVyKiByZWdpc3RlcnMsIEpTU2NvcGUqIGN1cnJlbnRTY29wZSwgQ29k
ZUJsb2NrKiBjb2RlQmxvY2spCi0gICAgOiBCYXNlKAotICAgICAgICB2bSwKLSAgICAgICAgY2Fs
bEZyYW1lLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmFjdGl2YXRpb25TdHJ1Y3R1cmUoKSwKLSAg
ICAgICAgcmVnaXN0ZXJzLAotICAgICAgICBjdXJyZW50U2NvcGUsCi0gICAgICAgIGNvZGVCbG9j
ay0+c3ltYm9sVGFibGUoKSkKK2lubGluZSBKU0xleGljYWxFbnZpcm9ubWVudDo6SlNMZXhpY2Fs
RW52aXJvbm1lbnQoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNTY29wZSogY3VycmVu
dFNjb3BlLCBTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUpCisgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1
cmUsIGN1cnJlbnRTY29wZSwgc3ltYm9sVGFibGUpCiB7Ci0gICAgU3ltYm9sVGFibGUqIHN5bWJv
bFRhYmxlID0gY29kZUJsb2NrLT5zeW1ib2xUYWJsZSgpOwotICAgIFdyaXRlQmFycmllcjxVbmtu
b3duPiogc3RvcmFnZSA9IHRoaXMtPnN0b3JhZ2UoKTsKLSAgICBzaXplX3QgY2FwdHVyZUNvdW50
ID0gc3ltYm9sVGFibGUtPmNhcHR1cmVDb3VudCgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgY2FwdHVyZUNvdW50OyArK2kpCi0gICAgICAgIG5ldyAoTm90TnVsbCwgJnN0b3JhZ2VbaV0p
IFdyaXRlQmFycmllcjxVbmtub3duPihVbmRlZmluZWRXcml0ZUJhcnJpZXJUYWcpOwotICAgIG1f
cmVnaXN0ZXJzID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8V3JpdGVCYXJyaWVyQmFzZTxVbmtub3du
Pio+KAotICAgICAgICByZWludGVycHJldF9jYXN0PGNoYXIqPih0aGlzKSArIHJlZ2lzdGVyc09m
ZnNldChzeW1ib2xUYWJsZSkpOwogfQogCi1KU0xleGljYWxFbnZpcm9ubWVudCogYXNBY3RpdmF0
aW9uKEpTVmFsdWUpOwotCiBpbmxpbmUgSlNMZXhpY2FsRW52aXJvbm1lbnQqIGFzQWN0aXZhdGlv
bihKU1ZhbHVlIHZhbHVlKQogewogICAgIEFTU0VSVChhc09iamVjdCh2YWx1ZSktPmluaGVyaXRz
KEpTTGV4aWNhbEVudmlyb25tZW50OjppbmZvKCkpKTsKQEAgLTEzMyw0OSArMTAyLDYgQEAgQUxX
QVlTX0lOTElORSBKU0xleGljYWxFbnZpcm9ubWVudCogUmVnaQogICAgIHJldHVybiBhc0FjdGl2
YXRpb24oanNWYWx1ZSgpKTsKIH0KIAotaW5saW5lIGludCBKU0xleGljYWxFbnZpcm9ubWVudDo6
cmVnaXN0ZXJzT2Zmc2V0KFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSkKLXsKLSAgICByZXR1cm4g
c3RvcmFnZU9mZnNldCgpICsgKChzeW1ib2xUYWJsZS0+Y2FwdHVyZUNvdW50KCkgLSBzeW1ib2xU
YWJsZS0+Y2FwdHVyZVN0YXJ0KCkgIC0gMSkgKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+
KSk7Ci19Ci0KLWlubGluZSBzaXplX3QgSlNMZXhpY2FsRW52aXJvbm1lbnQ6OnN0b3JhZ2VPZmZz
ZXQoKQotewotICAgIHJldHVybiBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Y8c2l6ZW9mKFdyaXRl
QmFycmllcjxVbmtub3duPik+KHNpemVvZihKU0xleGljYWxFbnZpcm9ubWVudCkpOwotfQotCi1p
bmxpbmUgV3JpdGVCYXJyaWVyPFVua25vd24+KiBKU0xleGljYWxFbnZpcm9ubWVudDo6c3RvcmFn
ZSgpCi17Ci0gICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3RfcHRyPFdyaXRlQmFycmllcjxVbmtu
b3duPio+KAotICAgICAgICByZWludGVycHJldF9jYXN0PGNoYXIqPih0aGlzKSArIHN0b3JhZ2VP
ZmZzZXQoKSk7Ci19Ci0KLWlubGluZSBzaXplX3QgSlNMZXhpY2FsRW52aXJvbm1lbnQ6OmFsbG9j
YXRpb25TaXplKFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSkKLXsKLSAgICBzaXplX3Qgb2JqZWN0
U2l6ZUluQnl0ZXMgPSBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Y8c2l6ZW9mKFdyaXRlQmFycmll
cjxVbmtub3duPik+KHNpemVvZihKU0xleGljYWxFbnZpcm9ubWVudCkpOwotICAgIHNpemVfdCBz
dG9yYWdlU2l6ZUluQnl0ZXMgPSBzeW1ib2xUYWJsZS0+Y2FwdHVyZUNvdW50KCkgKiBzaXplb2Yo
V3JpdGVCYXJyaWVyPFVua25vd24+KTsKLSAgICByZXR1cm4gb2JqZWN0U2l6ZUluQnl0ZXMgKyBz
dG9yYWdlU2l6ZUluQnl0ZXM7Ci19Ci0KLWlubGluZSBib29sIEpTTGV4aWNhbEVudmlyb25tZW50
Ojppc1ZhbGlkSW5kZXgoaW50IGluZGV4KSBjb25zdAotewotICAgIGlmIChpbmRleCA+IHN5bWJv
bFRhYmxlKCktPmNhcHR1cmVTdGFydCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYg
KGluZGV4IDw9IHN5bWJvbFRhYmxlKCktPmNhcHR1cmVFbmQoKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIHJldHVybiB0cnVlOwotfQotCi1pbmxpbmUgYm9vbCBKU0xleGljYWxFbnZpcm9u
bWVudDo6aXNWYWxpZChjb25zdCBTeW1ib2xUYWJsZUVudHJ5JiBlbnRyeSkgY29uc3QKLXsKLSAg
ICByZXR1cm4gaXNWYWxpZEluZGV4KGVudHJ5LmdldEluZGV4KCkpOwotfQotCi1pbmxpbmUgV3Jp
dGVCYXJyaWVyQmFzZTxVbmtub3duPiYgSlNMZXhpY2FsRW52aXJvbm1lbnQ6OnJlZ2lzdGVyQXQo
aW50IGluZGV4KSBjb25zdAotewotICAgIEFTU0VSVChpc1ZhbGlkSW5kZXgoaW5kZXgpKTsKLSAg
ICByZXR1cm4gQmFzZTo6cmVnaXN0ZXJBdChpbmRleCk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIEpT
QwogCiAjZW5kaWYgLy8gSlNMZXhpY2FsRW52aXJvbm1lbnRfaApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNOYW1lU2NvcGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTmFtZVNjb3BlLmNwcAkocmV2aXNpb24gMTgwNjkxKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNOYW1lU2NvcGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00NywxNCArNDcsNiBAQCBKU05hbWVTY29wZSogSlNOYW1lU2NvcGU6OmNyZWF0
ZShWTSYgdm0sCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLXZvaWQgSlNOYW1lU2NvcGU6OnZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKLXsKLSAgICBK
U05hbWVTY29wZSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU05hbWVTY29wZSo+KGNlbGwpOwotICAg
IEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKLSAgICBCYXNl
Ojp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwotICAgIHZpc2l0b3IuYXBwZW5k
KCZ0aGlzT2JqZWN0LT5tX3JlZ2lzdGVyU3RvcmUpOwotfQotCiBKU1ZhbHVlIEpTTmFtZVNjb3Bl
Ojp0b1RoaXMoSlNDZWxsKiwgRXhlY1N0YXRlKiBleGVjLCBFQ01BTW9kZSBlY21hTW9kZSkKIHsK
ICAgICBpZiAoZWNtYU1vZGUgPT0gU3RyaWN0TW9kZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTTmFtZVNjb3BlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNOYW1lU2NvcGUuaAkocmV2aXNpb24gMTgwNjkxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNOYW1lU2NvcGUuaAkod29ya2luZyBjb3B5KQpAQCAt
NDQsMzggKzQ0LDM3IEBAIHB1YmxpYzoKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogICAgIHN0
YXRpYyBUKiBjcmVhdGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1Nj
b3BlKiBjdXJyZW50U2NvcGUsIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSwgSlNWYWx1ZSB2YWx1
ZSkKICAgICB7Ci0gICAgICAgIFQqIHNjb3BlT2JqZWN0ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0
ZUNlbGw8VD4odm0uaGVhcCkpIFQodm0sIGdsb2JhbE9iamVjdCwgY3VycmVudFNjb3BlLCBzeW1i
b2xUYWJsZSk7CisgICAgICAgIFQqIHNjb3BlT2JqZWN0ID0gbmV3ICgKKyAgICAgICAgICAgIE5v
dE51bGwsIGFsbG9jYXRlQ2VsbDxUPih2bS5oZWFwLCBhbGxvY2F0aW9uU2l6ZUZvclNjb3BlU2l6
ZSgxKSkKKyAgICAgICAgICAgIFQodm0sIGdsb2JhbE9iamVjdCwgY3VycmVudFNjb3BlLCBzeW1i
b2xUYWJsZSk7CiAgICAgICAgIHNjb3BlT2JqZWN0LT5maW5pc2hDcmVhdGlvbih2bSwgdmFsdWUp
OwogICAgICAgICByZXR1cm4gc2NvcGVPYmplY3Q7CiAgICAgfQogICAgIAogICAgIHN0YXRpYyBK
U05hbWVTY29wZSogY3JlYXRlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1Njb3BlKiBjdXJyZW50
U2NvcGUsIFN5bWJvbFRhYmxlKiwgSlNWYWx1ZSwgVHlwZSk7CiAKLSAgICBzdGF0aWMgdm9pZCB2
aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAgICAgc3RhdGljIEpTVmFsdWUg
dG9UaGlzKEpTQ2VsbCosIEV4ZWNTdGF0ZSosIEVDTUFNb2RlKTsKICAgICBzdGF0aWMgYm9vbCBn
ZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFBy
b3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyB2b2lkIHB1dChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQ
cm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOwogCiAgICAgREVDTEFSRV9J
TkZPOwogCi0gICAgSlNWYWx1ZSB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVnaXN0ZXJTdG9y
ZS5nZXQoKTsgfQorICAgIEpTVmFsdWUgdmFsdWUoKSBjb25zdCB7IHJldHVybiB2YXJpYWJsZUF0
KDApLmdldCgpOyB9CiAKIHByb3RlY3RlZDoKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiB2
bSwgSlNWYWx1ZSB2YWx1ZSkKICAgICB7Ci0gICAgICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZt
KTsKLSAgICAgICAgbV9yZWdpc3RlclN0b3JlLnNldCh2bSwgdGhpcywgdmFsdWUpOworICAgICAg
ICBCYXNlOjpmaW5pc2hDcmVhdGlvblVuaW5pdGlhbGl6ZWQodm0pOworICAgICAgICB2YXJpYWJs
ZUF0KDApLnNldCh2bSwgdGhpcywgdmFsdWUpOwogICAgIH0KIAogICAgIHN0YXRpYyBjb25zdCB1
bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEJh
c2U6OlN0cnVjdHVyZUZsYWdzOwogCiAgICAgSlNOYW1lU2NvcGUoVk0mIHZtLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgSlNTY29wZSogbmV4dCwgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlKQotICAg
ICAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSwgcmVpbnRlcnByZXRfY2FzdDxSZWdpc3Rlcio+KCZt
X3JlZ2lzdGVyU3RvcmUgKyAxKSwgbmV4dCwgc3ltYm9sVGFibGUpCisgICAgICAgIDogQmFzZSh2
bSwgc3RydWN0dXJlLCBuZXh0LCBzeW1ib2xUYWJsZSkKICAgICB7CisgICAgICAgIEFTU0VSVChz
eW1ib2xUYWJsZS0+c2NvcGVTaXplKCkgPT0gMSk7CiAgICAgfQotCi1wcml2YXRlOgotICAgIFdy
aXRlQmFycmllcjxVbmtub3duPiBtX3JlZ2lzdGVyU3RvcmU7CiB9OwogCiB9CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZh
cmlhYmxlT2JqZWN0LmNwcAkocmV2aXNpb24gMTgwNjkxKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDEzIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMywgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTMzLDMyICszMywzMCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotaW50IEpT
U2VnbWVudGVkVmFyaWFibGVPYmplY3Q6OmZpbmRSZWdpc3RlckluZGV4KHZvaWQqIHJlZ2lzdGVy
QWRkcmVzcykKK1Njb3BlT2Zmc2V0IEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3Q6OmZpbmRSZWdp
c3RlckluZGV4KHZvaWQqIHJlZ2lzdGVyQWRkcmVzcykKIHsKICAgICBDb25jdXJyZW50SklUTG9j
a2VyIGxvY2tlcihtX2xvY2spOwogICAgIAotICAgIGZvciAoaW50IGkgPSBtX3JlZ2lzdGVycy5z
aXplKCk7IGktLTspIHsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX3JlZ2lzdGVycy5zaXplKCk7
IGktLTspIHsKICAgICAgICAgaWYgKCZtX3JlZ2lzdGVyc1tpXSAhPSByZWdpc3RlckFkZHJlc3Mp
CiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgcmV0dXJuIGk7CisgICAgICAgIHJldHVy
biBTY29wZU9mZnNldChpKTsKICAgICB9CiAgICAgQ1JBU0goKTsKLSAgICByZXR1cm4gLTE7Cisg
ICAgcmV0dXJuIFNjb3BlT2Zmc2V0KCk7CiB9CiAKLWludCBKU1NlZ21lbnRlZFZhcmlhYmxlT2Jq
ZWN0OjphZGRSZWdpc3RlcnMoaW50IG51bWJlck9mUmVnaXN0ZXJzVG9BZGQpCitTY29wZU9mZnNl
dCBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0OjphZGRSZWdpc3RlcnModW5zaWduZWQgbnVtYmVy
T2ZSZWdpc3RlcnNUb0FkZCkKIHsKICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xv
Y2spOwogICAgIAotICAgIEFTU0VSVChudW1iZXJPZlJlZ2lzdGVyc1RvQWRkID49IDApOwotICAg
IAogICAgIHNpemVfdCBvbGRTaXplID0gbV9yZWdpc3RlcnMuc2l6ZSgpOwogICAgIG1fcmVnaXN0
ZXJzLmdyb3cob2xkU2l6ZSArIG51bWJlck9mUmVnaXN0ZXJzVG9BZGQpOwogICAgIAogICAgIGZv
ciAoc2l6ZV90IGkgPSBudW1iZXJPZlJlZ2lzdGVyc1RvQWRkOyBpLS07KQogICAgICAgICBtX3Jl
Z2lzdGVyc1tvbGRTaXplICsgaV0uc2V0V2l0aG91dFdyaXRlQmFycmllcihqc1VuZGVmaW5lZCgp
KTsKICAgICAKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PihvbGRTaXplKTsKKyAgICByZXR1
cm4gU2NvcGVPZmZzZXQob2xkU2l6ZSk7CiB9CiAKIHZvaWQgSlNTZWdtZW50ZWRWYXJpYWJsZU9i
amVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiBzbG90VmlzaXRv
cikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFi
bGVPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmgJKHJldmlzaW9uIDE4MDY5MSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNTcsMjQgKzU3LDIzIEBAIGNsYXNzIEpTU2VnbWVudGVkVmFyaWFibGVPYmpl
Y3QgOiBwdWJsaWMKIHB1YmxpYzoKICAgICB0eXBlZGVmIEpTU3ltYm9sVGFibGVPYmplY3QgQmFz
ZTsKIAotICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgcmVnaXN0ZXJBdChpbnQgaW5kZXgpIHsg
cmV0dXJuIG1fcmVnaXN0ZXJzW2luZGV4XTsgfQorICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYg
dmFyaWFibGVBdChTY29wZU9mZnNldCBvZmZzZXQpIHsgcmV0dXJuIG1fdmFyaWFibGVzW29mZnNl
dC5vZmZzZXQoKV07IH0KICAgICAKICAgICAvLyBUaGlzIGlzIGEgc2xvdyBtZXRob2QgY2FsbCwg
d2hpY2ggc2VhcmNoZXMgdGhlIHJlZ2lzdGVyIGJhbmsgdG8gZmluZCB0aGUgaW5kZXgKICAgICAv
LyBnaXZlbiBhIHBvaW50ZXIuIEl0IHdpbGwgQ1JBU0goKSBpZiBpdCBkb2VzIG5vdCBmaW5kIHRo
ZSByZWdpc3Rlci4gT25seSB1c2UgdGhpcwogICAgIC8vIGluIGRlYnVnIGNvZGUgKGxpa2UgYnl0
ZWNvZGUgZHVtcGluZykuCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgaW50IGZpbmRSZWdpc3Rlcklu
ZGV4KHZvaWQqKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBTY29wZU9mZnNldCBmaW5kUmVnaXN0
ZXJJbmRleCh2b2lkKik7CiAgICAgCi0gICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiBhc3NlcnRS
ZWdpc3RlcklzSW5UaGlzT2JqZWN0KFdyaXRlQmFycmllcjxVbmtub3duPiogcmVnaXN0ZXJQb2lu
dGVyKQorICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogYXNzZXJ0VmFyaWFibGVJc0luVGhpc09i
amVjdChXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHZhcmlhYmxlUG9pbnRlcikKICAgICB7Ci0jaWYg
IUFTU0VSVF9ESVNBQkxFRAotICAgICAgICBmaW5kUmVnaXN0ZXJJbmRleChyZWdpc3RlclBvaW50
ZXIpOwotI2VuZGlmCisgICAgICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKQorICAgICAgICAgICAg
ZmluZFJlZ2lzdGVySW5kZXgocmVnaXN0ZXJQb2ludGVyKTsKICAgICAgICAgcmV0dXJuIHJlZ2lz
dGVyUG9pbnRlcjsKICAgICB9CiAgICAgCiAgICAgLy8gQWRkcyBudW1iZXJPZlJlZ2lzdGVyc1Rv
QWRkIHJlZ2lzdGVycywgaW5pdGlhbGl6ZXMgdGhlbSB0byBVbmRlZmluZWQsIGFuZCByZXR1cm5z
CiAgICAgLy8gdGhlIGluZGV4IG9mIHRoZSBmaXJzdCBvbmUgYWRkZWQuCi0gICAgSlNfRVhQT1JU
X1BSSVZBVEUgaW50IGFkZFJlZ2lzdGVycyhpbnQgbnVtYmVyT2ZSZWdpc3RlcnNUb0FkZCk7Cisg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgU2NvcGVPZmZzZXQgYWRkUmVnaXN0ZXJzKHVuc2lnbmVkIG51
bWJlck9mUmVnaXN0ZXJzVG9BZGQpOwogICAgIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRp
YyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3Qu
aAkocmV2aXNpb24gMTgwNjkxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNT
eW1ib2xUYWJsZU9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC03OCw3ICs3OCw3IEBAIGlubGlu
ZSBib29sIHN5bWJvbFRhYmxlR2V0KAogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgU3ltYm9s
VGFibGVFbnRyeTo6RmFzdCBlbnRyeSA9IGl0ZXItPnZhbHVlOwogICAgIEFTU0VSVCghZW50cnku
aXNOdWxsKCkpOwotICAgIHNsb3Quc2V0VmFsdWUob2JqZWN0LCBlbnRyeS5nZXRBdHRyaWJ1dGVz
KCkgfCBEb250RGVsZXRlLCBvYmplY3QtPnJlZ2lzdGVyQXQoZW50cnkuZ2V0SW5kZXgoKSkuZ2V0
KCkpOworICAgIHNsb3Quc2V0VmFsdWUob2JqZWN0LCBlbnRyeS5nZXRBdHRyaWJ1dGVzKCkgfCBE
b250RGVsZXRlLCBvYmplY3QtPnZhcmlhYmxlQXQoZW50cnkuc2NvcGVPZmZzZXQoKSkuZ2V0KCkp
OwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC05NCw3ICs5NCw3IEBAIGlubGluZSBib29sIHN5
bWJvbFRhYmxlR2V0KAogICAgIFN5bWJvbFRhYmxlRW50cnk6OkZhc3QgZW50cnkgPSBpdGVyLT52
YWx1ZTsKICAgICBBU1NFUlQoIWVudHJ5LmlzTnVsbCgpKTsKICAgICBkZXNjcmlwdG9yLnNldERl
c2NyaXB0b3IoCi0gICAgICAgIG9iamVjdC0+cmVnaXN0ZXJBdChlbnRyeS5nZXRJbmRleCgpKS5n
ZXQoKSwgZW50cnkuZ2V0QXR0cmlidXRlcygpIHwgRG9udERlbGV0ZSk7CisgICAgICAgIG9iamVj
dC0+dmFyaWFibGVBdChlbnRyeS5zY29wZU9mZnNldCgpKS5nZXQoKSwgZW50cnkuZ2V0QXR0cmli
dXRlcygpIHwgRG9udERlbGV0ZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTExMCw3ICsx
MTAsNyBAQCBpbmxpbmUgYm9vbCBzeW1ib2xUYWJsZUdldCgKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIFN5bWJvbFRhYmxlRW50cnk6OkZhc3QgZW50cnkgPSBpdGVyLT52YWx1ZTsKICAgICBB
U1NFUlQoIWVudHJ5LmlzTnVsbCgpKTsKLSAgICBzbG90LnNldFZhbHVlKG9iamVjdCwgZW50cnku
Z2V0QXR0cmlidXRlcygpIHwgRG9udERlbGV0ZSwgb2JqZWN0LT5yZWdpc3RlckF0KGVudHJ5Lmdl
dEluZGV4KCkpLmdldCgpKTsKKyAgICBzbG90LnNldFZhbHVlKG9iamVjdCwgZW50cnkuZ2V0QXR0
cmlidXRlcygpIHwgRG9udERlbGV0ZSwgb2JqZWN0LT52YXJpYWJsZUF0KGVudHJ5LnNjb3BlT2Zm
c2V0KCkpLmdldCgpKTsKICAgICBzbG90SXNXcml0ZWFibGUgPSAhZW50cnkuaXNSZWFkT25seSgp
OwogICAgIHJldHVybiB0cnVlOwogfQpAQCAtMTQ1LDcgKzE0NSw3IEBAIGlubGluZSBib29sIHN5
bWJvbFRhYmxlUHV0KAogICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTEzNDYwMQogICAgICAgICAgICAgc2V0LT5ub3RpZnlXcml0ZSh2bSwgdmFs
dWUsIG9iamVjdCwgcHJvcGVydHlOYW1lKTsKICAgICAgICAgfQotICAgICAgICByZWcgPSAmb2Jq
ZWN0LT5yZWdpc3RlckF0KGZhc3RFbnRyeS5nZXRJbmRleCgpKTsKKyAgICAgICAgcmVnID0gJm9i
amVjdC0+dmFyaWFibGVBdChmYXN0RW50cnkuc2NvcGVPZmZzZXQoKSk7CiAgICAgfQogICAgIC8v
IEknZCBwcmVmZXIgd2Ugbm90IGhvbGQgbG9jayB3aGlsZSBleGVjdXRpbmcgYmFycmllcnMsIHNp
bmNlIEkgcHJlZmVyIHRvIHJlc2VydmUKICAgICAvLyB0aGUgcmlnaHQgZm9yIGJhcnJpZXJzIHRv
IGJlIGFibGUgdG8gdHJpZ2dlciBHQy4gQW5kIEkgZG9uJ3Qgd2FudCB0byBob2xkIFZNCkBAIC0x
NzMsNyArMTczLDcgQEAgaW5saW5lIGJvb2wgc3ltYm9sVGFibGVQdXRXaXRoQXR0cmlidXRlcwog
ICAgICAgICBpZiAoVmFyaWFibGVXYXRjaHBvaW50U2V0KiBzZXQgPSBlbnRyeS53YXRjaHBvaW50
U2V0KCkpCiAgICAgICAgICAgICBzZXQtPm5vdGlmeVdyaXRlKHZtLCB2YWx1ZSwgb2JqZWN0LCBw
cm9wZXJ0eU5hbWUpOwogICAgICAgICBlbnRyeS5zZXRBdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpOwot
ICAgICAgICByZWcgPSAmb2JqZWN0LT5yZWdpc3RlckF0KGVudHJ5LmdldEluZGV4KCkpOworICAg
ICAgICByZWcgPSAmb2JqZWN0LT52YXJpYWJsZUF0KGVudHJ5LnNjb3BlT2Zmc2V0KCkpOwogICAg
IH0KICAgICByZWctPnNldCh2bSwgb2JqZWN0LCB2YWx1ZSk7CiAgICAgcmV0dXJuIHRydWU7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGUuaAkocmV2aXNpb24gMTgwNjkx
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTU4LDcgKzU4LDggQEAgZW51bSBKU1R5cGUgOiB1aW50OF90IHsKICAgICBQdXJlRm9y
d2FyZGluZ1Byb3h5VHlwZSwKICAgICBJbXB1cmVQcm94eVR5cGUsCiAgICAgV2l0aFNjb3BlVHlw
ZSwKLSAgICBBcmd1bWVudHNUeXBlLAorICAgIERpcmVjdEFyZ3VtZW50c1R5cGUsCisgICAgU2Nv
cGVkQXJndW1lbnRzVHlwZSwKIAogICAgIEludDhBcnJheVR5cGUsCiAgICAgSW50MTZBcnJheVR5
cGUsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PdXRPZkJhbmRBcmd1bWVu
dHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL091dE9m
QmFuZEFyZ3VtZW50cy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9PdXRPZkJhbmRBcmd1bWVudHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MjEzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJPdXRPZkJhbmRBcmd1bWVudHMuaCIKKworI2lu
Y2x1ZGUgIkpTQXJndW1lbnRzSXRlcmF0b3IuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisK
K25hbWVzcGFjZSBKU0MgeworCitTVEFUSUNfQVNTRVJUX0lTX1RSSVZJQUxMWV9ERVNUUlVDVElC
TEUoT3V0T2ZCYW5kQXJndW1lbnRzKTsKKworY29uc3QgQ2xhc3NJbmZvIE91dE9mQmFuZEFyZ3Vt
ZW50czo6c19pbmZvID0geyAiQXJndW1lbnRzIiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRFX01F
VEhPRF9UQUJMRShPdXRPZkJhbmRBcmd1bWVudHMpIH07CisKK091dE9mQmFuZEFyZ3VtZW50czo6
T3V0T2ZCYW5kQXJndW1lbnRzKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgOiBC
YXNlKHZtLCBzdHJ1Y3R1cmUsIG51bGxwdHIpCisgICAgLCBtX3NwZWNpYWxzTWF0ZXJpYWxpemVk
KGZhbHNlKQoreworfQorCitPdXRPZkJhbmRBcmd1bWVudHMqIE91dE9mQmFuZEFyZ3VtZW50czo6
Y3JlYXRlRW1wdHkoCisgICAgVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBK
U0Z1bmN0aW9uKiBjYWxsZWUpCit7CisgICAgT3V0T2ZCYW5kQXJndW1lbnRzKiByZXN1bHQgPSBu
ZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxPdXRPZkJhbmRBcmd1bWVudHM+KHZtLmhlYXApKQor
ICAgICAgICBPdXRPZkJhbmRBcmd1bWVudHModm0sIGdsb2JhbE9iamVjdC0+b3V0T2ZCYW5kQXJn
dW1lbnRzU3RydWN0dXJlKCkpOworICAgIHJlc3VsdC0+ZmluaXNoQ3JlYXRpb24odm0pOworICAg
IHJlc3VsdC0+bV9jYWxsZWUuc2V0KHZtLCB0aGlzLCBjYWxsZWUpOworICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK091dE9mQmFuZEFyZ3VtZW50cyogT3V0T2ZCYW5kQXJndW1lbnRzOjpjcmVhdGVF
bXB0eShFeGVjU3RhdGUqIGV4ZWMsIEpTRnVuY3Rpb24qIGNhbGxlZSkKK3sKKyAgICAvLyBOQi4g
U29tZSBjbGllbnRzIG1pZ2h0IGV4cGVjdCB0aGF0IHRoZSBnbG9iYWwgb2JqZWN0IG9mIG9mIHRo
aXMgb2JqZWN0IGlzIHRoZSBnbG9iYWwgb2JqZWN0CisgICAgLy8gb2YgdGhlIGNhbGxlZS4gV2Ug
ZG9uJ3QgZG8gdGhpcyBmb3Igbm93LCBidXQgbWF5YmUgd2Ugc2hvdWxkLgorICAgIHJldHVybiBj
cmVhdGVFbXB0eShleGVjLT52bSgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGNhbGxl
ZSk7Cit9CisKK091dE9mQmFuZEFyZ3VtZW50cyogT3V0T2ZCYW5kQXJndW1lbnRzOjpjcmVhdGVX
aXRoSW5saW5lRnJhbWUoRXhlY1N0YXRlKiBteUZyYW1lLCBFeGVjU3RhdGUqIHRhcmdldEZyYW1l
LCBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSwgQXJndW1lbnRzTW9kZSBtb2RlKQor
eworICAgIFZNJiB2bSA9IG15RnJhbWUtPnZtKCk7CisgICAgCisgICAgSlNGdW5jdGlvbiogY2Fs
bGVlOworICAgIAorICAgIGlmIChpbmxpbmVDYWxsRnJhbWUpCisgICAgICAgIGNhbGxlZSA9IGpz
Q2FzdDxKU0Z1bmN0aW9uKj4oaW5saW5lQ2FsbEZyYW1lLT5jYWxsZWVSZWNvdmVyeS5yZWNvdmVy
KHRhcmdldEZyYW1lKSk7CisgICAgZWxzZQorICAgICAgICBjYWxsZWUgPSBqc0Nhc3Q8SlNGdW5j
dGlvbio+KHRhcmdldEZyYW1lLT5jYWxsZWUoKSk7CisKKyAgICAvLyBOQi4gSXQncyBzb21ld2hh
dCBhcmJpdHJhcnkgdGhhdCB3ZSB0aWUgdGhlIHN0cmljdG5lc3Mgb2YgdGhpcyBvYmplY3QgdG8g
dGhlIHN0cmljdG5lc3Mgb2YKKyAgICAvLyB0aGUgY2FsbGVlLgorICAgIGJvb2wgaXNTdHJpY3RN
b2RlID0gZXhlY3V0YWJsZS0+aXNTdHJpY3RNb2RlKCk7CisKKyAgICBPdXRPZkJhbmRBcmd1bWVu
dHMqIHJlc3VsdCA9IGNyZWF0ZUVtcHR5KG15RnJhbWUsIGNhbGxlZSk7CisgICAgCisgICAgdW5z
aWduZWQgbGVuZ3RoOworICAgIHN3aXRjaCAobW9kZSkgeworICAgIGNhc2UgQ2xvbmVkQXJndW1l
bnRzQ3JlYXRpb25Nb2RlOiB7CisgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUpIHsKKyAgICAg
ICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRSZWdpc3Rlci5pc1ZhbGlk
KCkpCisgICAgICAgICAgICAgICAgbGVuZ3RoID0gZXhlYy0+cihpbmxpbmVDYWxsRnJhbWUtPmFy
Z3VtZW50Q291bnRSZWdpc3RlcikudW5ib3hlZEludDMyKCk7CisgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgbGVuZ3RoID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgp
OworICAgICAgICAgICAgbGVuZ3RoLS07CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IGxlbmd0aDsgaS0tOykKKyAgICAgICAgICAgICAgICByZXN1bHQtPnB1dERp
cmVjdEluZGV4KG15RnJhbWUsIGksIGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzW2ldLnJlY292
ZXIodGFyZ2V0RnJhbWUpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGxlbmd0aCA9
IHRhcmdldEZyYW1lLT5hcmd1bWVudENvdW50KCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IGxlbmd0aDsgaS0tOykKKyAgICAgICAgICAgICAgICByZXN1bHQt
PnB1dERpcmVjdEluZGV4KG15RnJhbWUsIGksIHRhcmdldEZyYW1lLT51bmNoZWNrZWRBcmd1bWVu
dChpKSk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAKKyAgICBj
YXNlIEZha2VBcmd1bWVudFZhbHVlc0NyZWF0aW9uTW9kZTogeworICAgICAgICBsZW5ndGggPSAw
OworICAgICAgICBicmVhazsKKyAgICB9IH0KKyAgICAKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2
bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcihsZW5ndGgpKTsKKyAgICBpZiAo
aXNTdHJpY3RNb2RlKSB7CisgICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0QWNjZXNzb3IoZXhlYywg
dm0ucHJvcGVydHlOYW1lcy0+Y2FsbGVlLCB0aGlzT2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+dGhy
b3dUeXBlRXJyb3JHZXR0ZXJTZXR0ZXIoZXhlYy0+dm0oKSksIERvbnREZWxldGUgfCBEb250RW51
bSB8IEFjY2Vzc29yKTsKKyAgICAgICAgcmVzdWx0LT5wdXREaXJlY3RBY2Nlc3NvcihleGVjLCB2
bS5wcm9wZXJ0eU5hbWVzLT5jYWxsZWUsIHRoaXNPYmplY3QtPmdsb2JhbE9iamVjdCgpLT50aHJv
d1R5cGVFcnJvckdldHRlclNldHRlcihleGVjLT52bSgpKSwgRG9udERlbGV0ZSB8IERvbnRFbnVt
IHwgQWNjZXNzb3IpOworICAgIH0gZWxzZQorICAgICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwg
dm0ucHJvcGVydHlOYW1lcy0+Y2FsbGVlLCBKU1ZhbHVlKGNhbGxlZSkpOworICAgIAorICAgIHJl
c3VsdC0+SlNDX05BVElWRV9GVU5DVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5pdGVyYXRvclByaXZh
dGVOYW1lLCBhcmd1bWVudHNGdW5jSXRlcmF0b3IsIERvbnRFbnVtLCAwKTsKK30KKworT3V0T2ZC
YW5kQXJndW1lbnRzKiBPdXRPZkJhbmRBcmd1bWVudHM6OmNyZWF0ZVdpdGhNYWNoaW5lRnJhbWUo
RXhlY1N0YXRlKiBteUZyYW1lLCBFeGVjU3RhdGUqIHRhcmdldEZyYW1lLCBBcmd1bWVudHNNb2Rl
IG1vZGUpCit7CisgICAgcmV0dXJuIGNyZWF0ZVdpdGhJbmxpbmVGcmFtZShteUZyYW1lLCB0YXJn
ZXRGcmFtZSwgbnVsbHB0ciwgbW9kZSk7Cit9CisKK1N0cnVjdHVyZSogT3V0T2ZCYW5kQXJndW1l
bnRzOjpjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU1ZhbHVlIHByb3RvdHlwZSkKK3sKKyAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0s
IGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVG
bGFncyksIGluZm8oKSk7Cit9CisKK2Jvb2wgT3V0T2ZCYW5kQXJndW1lbnRzOjpnZXRPd25Qcm9w
ZXJ0eVNsb3QoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUg
aWRlbnQsIFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICBPdXRPZkJhbmRBcmd1bWVudHMqIHRo
aXNPYmplY3QgPSBqc0Nhc3Q8T3V0T2ZCYW5kQXJndW1lbnRzKj4ob2JqZWN0KTsKKyAgICBWTSYg
dm0gPSBleGVjLT52bSgpOworICAgIAorICAgIGlmIChpZGVudCA9PSB2bS5wcm9wZXJ0eU5hbWVz
LT5jYWxsZXIKKyAgICAgICAgfHwgaWRlbnQgPT0gdm0ucHJvcGVydHlOYW1lcy0+Y2FsbGVlKQor
ICAgICAgICB0aGlzT2JqZWN0LT5tYXRlcmlhbGl6ZVNwZWNpYWxzSWZOZWNlc3NhcnkoZXhlYyk7
CisgICAgCisgICAgaWYgKEJhc2U6OmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBleGVj
LCBpZGVudCwgc2xvdCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIAorICAgIGlmIChpZGVu
dCA9PSB2bS5wcm9wZXJ0eU5hbWVzLT5pdGVyYXRvclByaXZhdGVOYW1lKSB7CisgICAgICAgIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7
CisgICAgICAgIHRoaXNPYmplY3QtPkpTQ19OQVRJVkVfRlVOQ1RJT04odm0ucHJvcGVydHlOYW1l
cy0+aXRlcmF0b3JQcml2YXRlTmFtZSwgYXJndW1lbnRzRnVuY0l0ZXJhdG9yLCBEb250RW51bSwg
MCk7CisgICAgICAgIGlmIChKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3Qs
IGV4ZWMsIGlkZW50LCBzbG90KSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAg
ICAKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgT3V0T2ZCYW5kQXJndW1lbnRzOjpnZXRP
d25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVy
dHlOYW1lQXJyYXkmIGFycmF5LCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3sKKyAgICBPdXRPZkJh
bmRBcmd1bWVudHMqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8T3V0T2ZCYW5kQXJndW1lbnRzKj4ob2Jq
ZWN0KTsKKyAgICB0aGlzT2JqZWN0LT5tYXRlcmlhbGl6ZVNwZWNpYWxzSWZOZWNlc3NhcnkoZXhl
Yyk7CisgICAgQmFzZTo6Z2V0T3duUHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBleGVjLCBhcnJh
eSwgbW9kZSk7Cit9CisKK3ZvaWQgT3V0T2ZCYW5kQXJndW1lbnRzOjpwdXQoSlNDZWxsKiBjZWxs
LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBpZGVudCwgSlNWYWx1ZSB2YWx1ZSwgUHV0
UHJvcGVydHlTbG90JiBzbG90KQoreworICAgIE91dE9mQmFuZEFyZ3VtZW50cyogdGhpc09iamVj
dCA9IGpzQ2FzdDxPdXRPZkJhbmRBcmd1bWVudHMqPihvYmplY3QpOworICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7CisgICAgCisgICAgaWYgKGlkZW50ID09IHZtLnByb3BlcnR5TmFtZXMtPmNhbGxl
ZQorICAgICAgICB8fCBpZGVudCA9PSB2bS5wcm9wZXJ0eU5hbWVzLT5jYWxsZXIpCisgICAgICAg
IHRoaXNPYmplY3QtPm1hdGVyaWFsaXplU3BlY2lhbHNJZk5lY2Vzc2FyeShleGVjKTsKKyAgICAK
KyAgICBCYXNlOjpwdXQodGhpc09iamVjdCwgZXhlYywgaWRlbnQsIHZhbHVlLCBzbG90KTsKK30K
Kwordm9pZCBPdXRPZkJhbmRBcmd1bWVudHM6OmRlbGV0ZVByb3BlcnR5KEpTQ2VsbCogY2VsbCwg
RXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgaWRlbnQpCit7CisgICAgT3V0T2ZCYW5kQXJn
dW1lbnRzKiB0aGlzT2JqZWN0ID0ganNDYXN0PE91dE9mQmFuZEFyZ3VtZW50cyo+KG9iamVjdCk7
CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICAKKyAgICBpZiAoaWRlbnQgPT0gdm0ucHJv
cGVydHlOYW1lcy0+Y2FsbGVlCisgICAgICAgIHx8IGlkZW50ID09IHZtLnByb3BlcnR5TmFtZXMt
PmNhbGxlcikKKyAgICAgICAgdGhpc09iamVjdC0+bWF0ZXJpYWxpemVTcGVjaWFsc0lmTmVjZXNz
YXJ5KGV4ZWMpOworICAgIAorICAgIEJhc2U6OmRlbGV0ZVByb3BlcnR5KHRoaXNPYmplY3QsIGV4
ZWMsIGlkZW50KTsKK30KKwordm9pZCBPdXRPZkJhbmRBcmd1bWVudHM6OmRlZmluZU93blByb3Bl
cnR5KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIGlkZW50
LCBjb25zdCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIGJvb2wgc2hvdWxkVGhyb3cp
Cit7CisgICAgT3V0T2ZCYW5kQXJndW1lbnRzKiB0aGlzT2JqZWN0ID0ganNDYXN0PE91dE9mQmFu
ZEFyZ3VtZW50cyo+KG9iamVjdCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICAKKyAg
ICBpZiAoaWRlbnQgPT0gdm0ucHJvcGVydHlOYW1lcy0+Y2FsbGVlCisgICAgICAgIHx8IGlkZW50
ID09IHZtLnByb3BlcnR5TmFtZXMtPmNhbGxlcikKKyAgICAgICAgdGhpc09iamVjdC0+bWF0ZXJp
YWxpemVTcGVjaWFsc0lmTmVjZXNzYXJ5KGV4ZWMpOworICAgIAorICAgIHJldHVybiBCYXNlOjpk
ZWZpbmVPd25Qcm9wZXJ0eShvYmplY3QsIGV4ZWMsIGlkZW50LCBkZXNjcmlwdG9yLCBzaG91bGRU
aHJvdyk7Cit9CisKK3ZvaWQgT3V0T2ZCYW5kQXJndW1lbnRzOjptYXRlcmlhbGl6ZVNwZWNpYWxz
KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBSRUxFQVNFX0FTU0VSVCghc3BlY2lhbHNNYXRlcmlh
bGl6ZWQoKSk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICAKKyAgICBGdW5jdGlvbkV4
ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBqc0Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4obV9jYWxs
ZWUtPmV4ZWN1dGFibGUoKSk7CisgICAgYm9vbCBpc1N0cmljdE1vZGUgPSBleGVjdXRhYmxlLT5p
c1N0cmljdE1vZGUoKTsKKyAgICAKKyAgICBpZiAoaXNTdHJpY3RNb2RlKSB7CisgICAgICAgIHB1
dERpcmVjdEFjY2Vzc29yKGV4ZWMsIHZtLnByb3BlcnR5TmFtZXMtPmNhbGxlZSwgZ2xvYmFsT2Jq
ZWN0KCktPnRocm93VHlwZUVycm9yR2V0dGVyU2V0dGVyKHZtKSwgRG9udERlbGV0ZSB8IERvbnRF
bnVtIHwgQWNjZXNzb3IpOworICAgICAgICBwdXREaXJlY3RBY2Nlc3NvcihleGVjLCB2bS5wcm9w
ZXJ0eU5hbWVzLT5jYWxsZWUsIGdsb2JhbE9iamVjdCgpLT50aHJvd1R5cGVFcnJvckdldHRlclNl
dHRlcih2bSksIERvbnREZWxldGUgfCBEb250RW51bSB8IEFjY2Vzc29yKTsKKyAgICB9IGVsc2UK
KyAgICAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5jYWxsZWUsIEpTVmFsdWUo
bV9jYWxsZWUuZ2V0KCkpKTsKKyAgICAKKyAgICBtX2NhbGxlZS5jbGVhcigpOworfQorCit2b2lk
IE91dE9mQmFuZEFyZ3VtZW50czo6bWF0ZXJpYWxpemVTcGVjaWFsc0lmTmVjZXNzYXJ5KEV4ZWNT
dGF0ZSogZXhlYykKK3sKKyAgICBpZiAoIXNwZWNpYWxzTWF0ZXJpYWxpemVkKCkpCisgICAgICAg
IG1hdGVyaWFsaXplU3BlY2lhbHMoZXhlYyk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PdXRPZkJhbmRBcmd1bWVudHMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PdXRPZkJhbmRBcmd1
bWVudHMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL091
dE9mQmFuZEFyZ3VtZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzcgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBPdXRPZkJh
bmRBcmd1bWVudHNfaAorI2RlZmluZSBPdXRPZkJhbmRBcmd1bWVudHNfaAorCisjaW5jbHVkZSAi
QXJndW1lbnRzTW9kZS5oIgorI2luY2x1ZGUgIkpTT2JqZWN0LmgiCisKK25hbWVzcGFjZSBKU0Mg
eworCisvLyBUaGlzIGlzIGFuIEFyZ3VtZW50cy1jbGFzcyBvYmplY3QgdGhhdCB3ZSBjcmVhdGUg
d2hlbiB5b3UgZG8gZnVuY3Rpb24uYXJndW1lbnRzLCBvciB5b3Ugc2F5CisvLyAiYXJndW1lbnRz
IiBpbnNpZGUgYSBmdW5jdGlvbiBpbiBzdHJpY3QgbW9kZS4gSXQgYmVoYXZlcyBhbG1wc3QgZW50
aXJlbHkgbGlrZSBhbiBvcmRpbmFyeQorLy8gSmF2YVNjcmlwdCBvYmplY3QuIEFsbCBvZiB0aGUg
YXJndW1lbnRzIHZhbHVlcyBhcmUgc2ltcGx5IGNvcGllZCBmcm9tIHRoZSBzdGFjayAocG9zc2li
bHkgdmlhCisvLyBzb21lIHNvcGhpc3RpY2F0ZWQgVmFsdWVSZWNvdmVyeSdzIGlmIGFuIG9wdGlt
aXppbmcgY29tcGlsZXIgaXMgaW4gcGxheSkgYW5kIHRoZSBhcHByb3ByaWF0ZQorLy8gcHJvcGVy
dGllcyBvZiB0aGUgb2JqZWN0IGFyZSBwb3B1bGF0ZWQuIFRoZSBvbmx5IHJlYXNvbiB3aHkgd2Ug
bmVlZCBhIHNwZWNpYWwgY2xhc3MgaXMgdG8gbWFrZQorLy8gdGhlIG9iamVjdCBjbGFpbSB0byBi
ZSAiQXJndW1lbnRzIiBmcm9tIGEgdG9TdHJpbmcgc3RhbmRwb2ludCwgYW5kIHRvIGF2b2lkIG1h
dGVyaWFsaXppbmcgdGhlCisvLyBjYWxsZXIvY2FsbGVlIHByb3BlcnRpZXMgdW5sZXNzIHNvbWVv
bmUgYXNrcyBmb3IgdGhlbS4KK2NsYXNzIE91dE9mQmFuZEFyZ3VtZW50cyA6IHB1YmxpYyBKU05v
bkZpbmFsT2JqZWN0IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTTm9uRmluYWxPYmplY3QgQmFz
ZTsKKyAgICAKK3ByaXZhdGU6CisgICAgT3V0T2ZCYW5kQXJndW1lbnRzKFZNJiwgU3RydWN0dXJl
Kik7CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgT3V0T2ZCYW5kQXJndW1lbnRzKiBjcmVhdGVFbXB0
eShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNGdW5jdGlvbiogY2FsbGVlKTsKKyAgICBzdGF0aWMg
T3V0T2ZCYW5kQXJndW1lbnRzKiBjcmVhdGVFbXB0eShFeGVjU3RhdGUqLCBKU0Z1bmN0aW9uKiBj
YWxsZWUpOworICAgIHN0YXRpYyBPdXRPZkJhbmRBcmd1bWVudHMqIGNyZWF0ZVdpdGhJbmxpbmVG
cmFtZShFeGVjU3RhdGUqIG15RnJhbWUsIEV4ZWNTdGF0ZSogdGFyZ2V0RnJhbWUsIElubGluZUNh
bGxGcmFtZSosIEFyZ3VtZW50c01vZGUpOworICAgIHN0YXRpYyBPdXRPZkJhbmRBcmd1bWVudHMq
IGNyZWF0ZVdpdGhNYWNoaW5lRnJhbWUoRXhlY1N0YXRlKiBteUZyYW1lLCBFeGVjU3RhdGUqIHRh
cmdldEZyYW1lLCBBcmd1bWVudHNNb2RlKTsKKyAgICAKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBj
cmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlKTsK
KworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRlc0dl
dE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMgfCBKU09iamVjdDo6
U3RydWN0dXJlRmxhZ3M7CisKKyAgICBERUNMQVJFX0lORk87CisKK3ByaXZhdGU6CisgICAgc3Rh
dGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVy
dHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5h
bWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlv
bk1vZGUpOworICAgIHN0YXRpYyB2b2lkIHB1dChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0
eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyB2b2lkIGRlbGV0
ZVByb3BlcnR5KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSk7CisgICAgc3RhdGlj
IHZvaWQgZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5h
bWUsIGNvbnN0IFByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgc2hvdWxkVGhyb3cpOworICAgIAor
ICAgIGJvb2wgc3BlY2lhbHNNYXRlcmlhbGl6ZWQoKSBjb25zdCB7IHJldHVybiAhbV9jYWxsZWU7
IH0KKyAgICB2b2lkIG1hdGVyaWFsaXplU3BlY2lhbHMoRXhlY1N0YXRlKik7CisgICAgdm9pZCBt
YXRlcmlhbGl6ZVNwZWNpYWxzSWZOZWNlc3NhcnkoRXhlY1N0YXRlKik7CisgICAgCisgICAgV3Jp
dGVCYXJyaWVyPEpTRnVuY3Rpb24qPiBtX2NhbGxlZTsgLy8gU2V0IHRvIG51bGxwdHIgd2hlbiB3
ZSBtYXRlcmlhbGl6ZSBhbGwgb2Ygb3VyIHNwZWNpYWwgcHJvcGVydGllcy4KK307CisKK30gLy8g
bmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gT3V0T2ZCYW5kQXJndW1lbnRzX2gKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVPZmZzZXQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlT2Zmc2V0LmNwcAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlT2Zmc2V0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTY29w
ZU9mZnNldC5oIgorCituYW1lc3BhY2UgSlNDIHsKKwordm9pZCBTY29wZU9mZnNldDo6ZHVtcChQ
cmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIGlmICghKnRoaXMpIHsKKyAgICAgICAgb3V0
LnByaW50KCJzY29wZUludmFsaWQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAg
ICBvdXQucHJpbnQoInNjb3BlIiwgb2Zmc2V0KCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVPZmZzZXQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZU9mZnNldC5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVPZmZzZXQu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgU2NvcGVPZmZzZXRfaAorI2RlZmluZSBT
Y29wZU9mZnNldF9oCisKKyNpbmNsdWRlICJHZW5lcmljT2Zmc2V0LmgiCisjaW5jbHVkZSA8d3Rm
L1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBKU0MgeworCisvLyBUaGlzIGlzIGFuIG9mZnNl
dCBpbnRvIGEgc2NvcGUgb2Ygc29tZSBraW5kLiBJdCBjb3VsZCBiZSBhbiBhY3RpdmF0aW9uIHNj
b3BlIG9yIGl0IGNvdWxkIGJlIGEKKy8vIGdsb2JhbCBvYmplY3QuCitjbGFzcyBTY29wZU9mZnNl
dCA6IHB1YmxpYyBHZW5lcmljT2Zmc2V0PFNjb3BlT2Zmc2V0PiB7CitwdWJsaWM6CisgICAgU2Nv
cGVPZmZzZXQoKSB7IH0KKyAgICAKKyAgICBleHBsaWNpdCBTY29wZU9mZnNldCh1bnNpZ25lZCBv
ZmZzZXQpCisgICAgICAgIDogR2VuZXJpY09mZnNldChvZmZzZXQpCisgICAgeworICAgIH0KKyAg
ICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKK307CisKK30gLy8gbmFtZXNw
YWNlIEpTQworCisjZW5kaWYgLy8gU2NvcGVPZmZzZXRfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50cy5jcHAJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTY29w
ZWRBcmd1bWVudHMuaCIKKworI2luY2x1ZGUgIkdlbmVyaWNBcmd1bWVudHNJbmxpbmVzLmgiCisj
aW5jbHVkZSAiSlNBcmd1bWVudHNJdGVyYXRvci5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIK
KworbmFtZXNwYWNlIEpTQyB7CisKK1NUQVRJQ19BU1NFUlRfSVNfVFJJVklBTExZX0RFU1RSVUNU
SUJMRShTY29wZWRBcmd1bWVudHMpOworCitjb25zdCBDbGFzc0luZm8gU2NvcGVkQXJndW1lbnRz
OjpzX2luZm8gPSB7ICJBcmd1bWVudHMiLCAmQmFzZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9E
X1RBQkxFKFNjb3BlZEFyZ3VtZW50cykgfTsKKworU2NvcGVkQXJndW1lbnRzOjpTY29wZWRBcmd1
bWVudHMoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICA6IEdlbmVyaWNBcmd1bWVu
dHModm0sIHN0cnVjdHVyZSkKKyAgICAsIG1fb3ZlcnJvZGVUaGluZ3MoZmFsc2UpCit7Cit9CisK
K3ZvaWQgU2NvcGVkQXJndW1lbnRzOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIEpTRnVuY3Rpb24q
IGNhbGxlZSwgU2NvcGVkQXJndW1lbnRzVGFibGUqIHRhYmxlLCBKU0xleGljYWxFbnZpcm9ubWVu
dCogc2NvcGUpCit7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOworICAgIG1fY2FsbGVl
LnNldCh2bSwgdGhpcywgY2FsbGVlKTsKKyAgICBtX3RhYmxlLnNldCh2bSwgdGhpcywgdGFibGUp
OworICAgIG1fc2NvcGUuc2V0KHZtLCB0aGlzLCBzY29wZSk7Cit9CisKK1Njb3BlZEFyZ3VtZW50
cyogU2NvcGVkQXJndW1lbnRzOjpjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
SlNGdW5jdGlvbiogY2FsbGVlLCBTY29wZWRBcmd1bWVudHNUYWJsZSogdGFibGUsIEpTTGV4aWNh
bEVudmlyb25tZW50KiBzY29wZSkKK3sKKyAgICBTY29wZWRBcmd1bWVudHMqIHJlc3VsdCA9Cisg
ICAgICAgIG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFNjb3BlZEFyZ3VtZW50cz4odm0uaGVh
cCkpCisgICAgICAgICh2bSwgc3RydWN0dXJlKTsKKyAgICByZXN1bHQtPmZpbmlzaENyZWF0aW9u
KHZtLCBjYWxsZWUsIHRhYmxlLCBzY29wZSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9p
ZCBTY29wZWRBcmd1bWVudHM6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRv
ciYgdmlzaXRvcikKK3sKKyAgICBTY29wZWRBcmd1bWVudHMqIHRoaXNPYmplY3QgPSBzdGF0aWNf
Y2FzdDxTY29wZWRBcmd1bWVudHMqPihjZWxsKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVS
SVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CisgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2Jq
ZWN0LCB2aXNpdG9yKTsKKworICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX2NhbGxl
ZSk7CisgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fdGFibGUpOworICAgIHZpc2l0
b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX3Njb3BlKTsKK30KKworU3RydWN0dXJlKiBTY29wZWRB
cmd1bWVudHM6OmNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQoreworICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0
ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKFNjb3BlZEFyZ3VtZW50c1R5
cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKK30KKwordm9pZCBTY29wZWRBcmd1bWVudHM6
OnNsb3dEb3duQW5kV2FzdGVNZW1vcnkoVk0mIHZtKQoreworICAgIFJFTEVBU0VfQVNTRVJUKCFt
X292ZXJyb2RlVGhpbmdzKTsKKyAgICAKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFt
ZXMtPmxlbmd0aCwganNOdW1iZXIobV90YWJsZS0+bGVuZ3RoKCkpLCBEb250RW51bSk7CisgICAg
cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5jYWxsZWUsIG1fY2FsbGVlLmdldCgpLCBE
b250RW51bSk7CisgICAgCisgICAgbV9vdmVycm9kZVRoaW5ncyA9IHRydWU7Cit9CisKK3ZvaWQg
U2NvcGVkQXJndW1lbnRzOjpzbG93RG93bkFuZFdhc3RlTWVtb3J5SWZOZWNlc3NhcnkoVk0mIHZt
KQoreworICAgIGlmICghbV9vdmVycm9kZVRoaW5ncykKKyAgICAgICAgc2xvd0Rvd25BbmRXYXN0
ZU1lbW9yeSh2bSk7Cit9CisKK3ZvaWQgU2NvcGVkQXJndW1lbnRzOjpvdmVycmlkZUFyZ3VtZW50
KFZNJiB2bSwgdWludDMyX3QgaSkKK3sKKyAgICBtX3RhYmxlLnNldCh2bSwgdGhpcywgbV90YWJs
ZS0+c2V0KHZtLCBpLCBTY29wZU9mZnNldCgpKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVu
dHMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3Bl
ZEFyZ3VtZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTEyIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgU2NvcGVkQXJndW1l
bnRzX2gKKyNkZWZpbmUgU2NvcGVkQXJndW1lbnRzX2gKKworI2luY2x1ZGUgIkdlbmVyaWNBcmd1
bWVudHMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKKy8vIFRoaXMgaXMgYW4gQXJndW1lbnRzLWNs
YXNzIG9iamVjdCB0aGF0IHdlIGNyZWF0ZSB3aGVuIHlvdSBzYXkgImFyZ3VtZW50cyIgaW5zaWRl
IGEgZnVuY3Rpb24sCisvLyBhbmQgb25lIG9yIG1vcmUgb2YgdGhlIGFyZ3VtZW50cyBtYXkgYmUg
Y2FwdHVyZWQgaW4gdGhlIGZ1bmN0aW9uJ3MgYWN0aXZhdGlvbi4gVGhlIGZ1bmN0aW9uCisvLyB3
aWxsIGNvcHkgYWxsIG9mIGl0cyBhcmd1bWVudHMgaW50byB0aGUgYWN0aXZhdGlvbiBhbmQgdGhl
biBjcmVhdGUgdGhpcyBvYmplY3QuIFRoaXMgb2JqZWN0CisvLyB3aWxsIHVzZSB0aGUgc3ltYm9s
IHRhYmxlJ3MgU2NvcGVkQXJndW1lbnRzVGFibGUgYW5kIHRoZSBhY3RpdmF0aW9uIHRvIGhhbmRs
ZSBhbGwgaW5kZXhlZAorLy8gbG9va3Vwcy4KK2NsYXNzIFNjb3BlZEFyZ3VtZW50cyA6IHB1Ymxp
YyBHZW5lcmljQXJndW1lbnRzPFNjb3BlZEFyZ3VtZW50cz4geworcHJpdmF0ZToKKyAgICBTY29w
ZWRBcmd1bWVudHMoVk0mLCBTdHJ1Y3R1cmUqKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZN
JiwgSlNGdW5jdGlvbiogY2FsbGVlLCBTY29wZWRBcmd1bWVudHNUYWJsZSosIEpTTGV4aWNhbEVu
dmlyb25tZW50Kik7CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgU2NvcGVkQXJndW1lbnRzKiBjcmVh
dGUoVk0mLCBTdHJ1Y3R1cmUqLCBKU0Z1bmN0aW9uKiBjYWxsZWUsIFNjb3BlZEFyZ3VtZW50c1Rh
YmxlKiwgSlNMZXhpY2FsRW52aXJvbm1lbnQqKTsKKyAgICAKKyAgICBzdGF0aWMgdm9pZCB2aXNp
dENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgCisgICAgdWludDMyX3QgaW50
ZXJuYWxMZW5ndGgoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdGFibGUtPmxlbmd0
aCgpOworICAgIH0KKyAgICAKKyAgICB1aW50MzJfdCBsZW5ndGgoRXhlY1N0YXRlKiBleGVjKSBj
b25zdAorICAgIHsKKyAgICAgICAgaWYgKFVOTElLRUxZKG1fb3ZlcnJvZGVMZW5ndGgpKQorICAg
ICAgICAgICAgcmV0dXJuIGdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKS50
b1VJbnQzMihleGVjKTsKKyAgICAgICAgcmV0dXJuIGludGVybmFsTGVuZ3RoKCk7CisgICAgfQor
ICAgIAorICAgIGJvb2wgY2FuQWNjZXNzSW5kZXhRdWlja2x5KHVpbnQzMl90IGkpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gaSA8IG1fbGVuZ3RoICYmICEhbV90YWJsZS0+Z2V0KGkpOwor
ICAgIH0KKyAgICAKKyAgICBKU1ZhbHVlIGdldEluZGV4UXVpY2tseSh1aW50MzJfdCBpKSBjb25z
dAorICAgIHsKKyAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oY2FuQWNj
ZXNzSW5kZXhRdWlja2x5KGkpKTsKKyAgICAgICAgcmV0dXJuIG1fc2NvcGUtPnZhcmlhYmxlQXQo
bV90YWJsZS0+Z2V0KGkpKS5nZXQoKTsKKyAgICB9CisKKyAgICB2b2lkIHNldEluZGV4UXVpY2ts
eShWTSYgdm0sIHVpbnQzMl90IGksIEpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBBU1NF
UlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihjYW5BY2Nlc3NJbmRleFF1aWNrbHkoaSkpOwor
ICAgICAgICByZXR1cm4gbV9zY29wZS0+dmFyaWFibGVBdChtX3RhYmxlLT5nZXQoaSkpLmdldCgp
OworICAgIH0KKworICAgIFdyaXRlQmFycmllcjxKU0Z1bmN0aW9uPiYgY2FsbGVlKCkKKyAgICB7
CisgICAgICAgIHJldHVybiBtX2NhbGxlZTsKKyAgICB9CisgICAgCisgICAgV3JpdGVCYXJyaWVy
PFVua25vd24+JiBhcmd1bWVudChDYXB0dXJlZEFyZ3VtZW50c09mZnNldCBvZmZzZXQpCisgICAg
eworICAgICAgICBBU1NFUlQob2Zmc2V0KTsKKyAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlf
SU1QTElDQVRJT04ob2Zmc2V0Lm9mZnNldCgpIDwgbV9sZW5ndGgpOworICAgICAgICByZXR1cm4g
c3RvcmFnZSgpW29mZnNldC5vZmZzZXQoKV07CisgICAgfQorICAgIAorICAgIGJvb2wgb3ZlcnJv
ZGVUaGluZ3MoKSBjb25zdCB7IHJldHVybiBtX292ZXJyb2RlVGhpbmdzOyB9CisgICAgdm9pZCBz
bG93RG93bkFuZFdhc3RlTWVtb3J5KFZNJik7CisgICAgdm9pZCBzbG93RG93bkFuZFdhc3RlTWVt
b3J5SWZOZWNlc3NhcnkoVk0mKTsKKyAgICB2b2lkIG92ZXJyaWRlQXJndW1lbnQoVk0mIHZtLCB1
aW50MzJfdCBpKTsKKyAgICAKKyAgICBERUNMQVJFX0lORk87CisgICAgCisgICAgc3RhdGljIFN0
cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHBy
b3RvdHlwZSk7CisgICAgCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlRhYmxlKCkgeyBy
ZXR1cm4gT0JKRUNUX09GRlNFVE9GKFNjb3BlZEFyZ3VtZW50cywgbV90YWJsZSk7IH0KKyAgICBz
dGF0aWMgcHRyZGlmZl90IG9mZnNldE9mU2NvcGUoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0Yo
U2NvcGVkQXJndW1lbnRzLCBtX3Njb3BlKTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0
T2ZPdmVycm9kZVRoaW5ncygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihTY29wZWRBcmd1bWVu
dHMsIG1fb3ZlcnJvZGVUaGluZ3MpOyB9CisKK3ByaXZhdGU6CisgICAgYm9vbCBtX292ZXJyb2Rl
VGhpbmdzOyAvLyBUcnVlIGlmIGxlbmd0aCwgY2FsbGVlLCBhbmQgY2FsbGVyIGFyZSBmdWxseSBt
YXRlcmlhbGl6ZWQgaW4gdGhlIG9iamVjdC4KKyAgICBXcml0ZUJhcnJpZXI8SlNGdW5jdGlvbio+
IG1fY2FsbGVlOworICAgIFdyaXRlQmFycmllcjxTY29wZWRBcmd1bWVudHNUYWJsZT4gbV90YWJs
ZTsKKyAgICBXcml0ZUJhcnJpZXI8SlNMZXhpY2FsRW52aXJvbm1lbnQ+IG1fc2NvcGU7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIFNjb3BlZEFyZ3VtZW50c19oCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50c1RhYmxlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1l
bnRzVGFibGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1Njb3BlZEFyZ3VtZW50c1RhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5NCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFNj
b3BlZEFyZ3VtZW50c1RhYmxlX2gKKyNkZWZpbmUgU2NvcGVkQXJndW1lbnRzVGFibGVfaAorCisj
aW5jbHVkZSAiSlNDZWxsLmgiCisKK25hbWVzcGFjZSBKU0MgeworCisvLyBUaGlzIGNsYXNzJ3Mg
b25seSBqb2IgaXMgdG8gaG9sZCBvbnRvIHRoZSBsaXN0IG9mIFNjb3BlT2Zmc2V0cyBmb3IgZWFj
aCBhcmd1bWVudCB0aGF0IGEKKy8vIGZ1bmN0aW9uIGhhcy4gTW9zdCBvZiB0aGUgdGltZSwgdGhl
IEJ5dGVjb2RlR2VuZXJhdG9yIHdpbGwgY3JlYXRlIG9uZSBvZiB0aGVzZSBhbmQgaXQgd2lsbAor
Ly8gbmV2ZXIgYmUgbW9kaWZpZWQgc3Vic2VxdWVudGx5LiBUaGVyZSBpcyBhIHJhcmUgY2FzZSB3
aGVyZSBhIFNjb3BlZEFyZ3VtZW50cyBvYmplY3QgaXMgY3JlYXRlZAorLy8gYW5kIGFsaWFzZXMg
b25lIG9mIHRoZXNlIGFuZCB0aGVuIGRlY2lkZXMgdG8gbW9kaWZ5IGl0OyBpbiB0aGF0IGNhc2Ug
d2UgZG8gY29weS1vbi13cml0ZS4gVGhpcworLy8gbWFrZXMgc2Vuc2UgYmVjYXVzZSBzdWNoIG1v
ZGlmaWNhdGlvbnMgYXJlIHNvIHVuY29tbW9uLiBZb3UnZCBoYXZlIHRvIGRvIHNvbWV0aGluZyBj
cmF6eSBsaWtlCisvLyAiZGVsZXRlIGFyZ3VtZW50c1tpXSIgb3Igc29tZSB2YXJpYW50IG9mIGRl
ZmluZU93blByb3BlcnR5LgorY2xhc3MgU2NvcGVkQXJndW1lbnRzIDogcHVibGljIEpTQ2VsbCB7
CitwdWJsaWM6CisgICAgdHlwZWRlZiBKU0NlbGwgQmFzZTsKKyAgICAKKyAgICBzdGF0aWMgY29u
c3QgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBo
YXNJbW1vcnRhbFN0cnVjdHVyZSA9IHRydWU7CisKK3ByaXZhdGU6CisgICAgU2NvcGVkQXJndW1l
bnRzVGFibGUoVk0mKTsKKyAgICB+U2NvcGVkQXJndW1lbnRzVGFibGUoKTsKKworcHVibGljOgor
ICAgIHN0YXRpYyBTY29wZWRBcmd1bWVudHNUYWJsZSogY3JlYXRlKFZNJik7CisgICAgCisgICAg
U2NvcGVkQXJndW1lbnRzKiBjbG9uZShWTSYpOworICAgIAorICAgIHVpbnQzMl90IGxlbmd0aCgp
IGNvbnN0IHsgcmV0dXJuIG1fbGVuZ3RoOyB9CisgICAgU2NvcGVkQXJndW1lbnRzVGFibGUqIHNl
dExlbmd0aChWTSYsIHVpbnQzMl90IG5ld0xlbmd0aCk7CisgICAgCisgICAgU2NvcGVPZmZzZXQg
Z2V0KHVpbnQzMl90IGkpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklU
WV9JTVBMSUNBVElPTihpIDwgbV9sZW5ndGgpOworICAgICAgICByZXR1cm4gbV9hcmd1bWVudHNb
aV07CisgICAgfQorICAgIAorICAgIHZvaWQgbG9jaygpCisgICAgeworICAgICAgICBtX2xvY2tl
ZCA9IHRydWU7CisgICAgfQorICAgIAorICAgIFNjb3BlZEFyZ3VtZW50cyogc2V0KFZNJiB2bSwg
dWludDMyX3QgaSwgU2NvcGVPZmZzZXQgdmFsdWUpCisgICAgeworICAgICAgICBTY29wZWRBcmd1
bWVudHMqIHJlc3VsdDsKKyAgICAgICAgaWYgKFVOTElLRUxZKG1fbG9ja2VkKSkKKyAgICAgICAg
ICAgIHJlc3VsdCA9IGNsb25lKHZtKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmVzdWx0
ID0gdGhpczsKKyAgICAgICAgcmVzdWx0LT5zZXREaXJlY3QoaSwgdmFsdWUpOworICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBERUNMQVJFX0lORk87CisgICAgCisgICAg
c3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkxlbmd0aCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRP
RihTY29wZWRBcmd1bWVudHMsIG1fbGVuZ3RoKTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zm
c2V0T2ZBcmd1bWVudHMoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoU2NvcGVkQXJndW1lbnRz
LCBtX2FyZ3VtZW50cyk7IH0KKworcHJpdmF0ZToKKyAgICB1aW50MzJfdCBtX2xlbmd0aDsKKyAg
ICBib29sIG1fbG9ja2VkOyAvLyBCZWluZyBsb2NrZWQgbWVhbnMgdGhhdCB0aGVyZSBhcmUgbXVs
dGlwbGUgcmVmZXJlbmNlcyB0byB0aGlzIG9iamVjdCBhbmQgbm9uZSBvZiB0aGVtIGV4cGVjdCB0
byBzZWUgdGhlIG90aGVycycgbW9kaWZpY2F0aW9ucy4gVGhpcyBtZWFucyB0aGF0IG1vZGlmaWNh
dGlvbnMgbmVlZCB0byBtYWtlIGEgY29weSBmaXJzdC4KKyAgICBzdGQ6OnVuaXF1ZV9wdHI8U2Nv
cGVPZmZzZXRbXT4gbV9hcmd1bWVudHM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2Vu
ZGlmIC8vIFNjb3BlZEFyZ3VtZW50c1RhYmxlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmNwcAkocmV2aXNpb24gMTgwNjkxKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxNCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTQsIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0xMzcsMjkgKzEzNywyMiBAQCB2b2lkIFN5bWJvbFRhYmxlOjpXYXRjaHBv
aW50Q2xlYW51cDo6ZmluCiAgICAgfQogfQogCi1TeW1ib2xUYWJsZSogU3ltYm9sVGFibGU6OmNs
b25lQ2FwdHVyZWROYW1lcyhWTSYgdm0pCitTeW1ib2xUYWJsZSogU3ltYm9sVGFibGU6OmNsb25l
U2NvcGVQYXJ0KFZNJiB2bSkKIHsKICAgICBTeW1ib2xUYWJsZSogcmVzdWx0ID0gU3ltYm9sVGFi
bGU6OmNyZWF0ZSh2bSk7CiAgICAgCi0gICAgcmVzdWx0LT5tX3BhcmFtZXRlckNvdW50SW5jbHVk
aW5nVGhpcyA9IG1fcGFyYW1ldGVyQ291bnRJbmNsdWRpbmdUaGlzOwogICAgIHJlc3VsdC0+bV91
c2VzTm9uU3RyaWN0RXZhbCA9IG1fdXNlc05vblN0cmljdEV2YWw7Ci0gICAgcmVzdWx0LT5tX2Nh
cHR1cmVTdGFydCA9IG1fY2FwdHVyZVN0YXJ0OwotICAgIHJlc3VsdC0+bV9jYXB0dXJlRW5kID0g
bV9jYXB0dXJlRW5kOwogCiAgICAgZm9yIChhdXRvIGl0ZXIgPSBtX21hcC5iZWdpbigpLCBlbmQg
PSBtX21hcC5lbmQoKTsgaXRlciAhPSBlbmQ7ICsraXRlcikgewotICAgICAgICBpZiAoIWlzQ2Fw
dHVyZWQoaXRlci0+dmFsdWUuZ2V0SW5kZXgoKSkpCisgICAgICAgIGlmICghaXRlci0+dmFsdWUu
dmFyT2Zmc2V0KCkuaXNTY29wZSgpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIHJl
c3VsdC0+bV9tYXAuYWRkKAogICAgICAgICAgICAgaXRlci0+a2V5LAotICAgICAgICAgICAgU3lt
Ym9sVGFibGVFbnRyeShpdGVyLT52YWx1ZS5nZXRJbmRleCgpLCBpdGVyLT52YWx1ZS5nZXRBdHRy
aWJ1dGVzKCkpKTsKKyAgICAgICAgICAgIFN5bWJvbFRhYmxlRW50cnkoaXRlci0+dmFsdWUudmFy
T2Zmc2V0KCksIGl0ZXItPnZhbHVlLmdldEF0dHJpYnV0ZXMoKSkpOwogICAgIH0KICAgICAKLSAg
ICBpZiAobV9zbG93QXJndW1lbnRzKSB7Ci0gICAgICAgIHJlc3VsdC0+bV9zbG93QXJndW1lbnRz
ID0gc3RkOjptYWtlX3VuaXF1ZTxTbG93QXJndW1lbnRbXT4ocGFyYW1ldGVyQ291bnQoKSk7Ci0g
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IHBhcmFtZXRlckNvdW50KCk7IGktLTspCi0gICAgICAg
ICAgICByZXN1bHQtPm1fc2xvd0FyZ3VtZW50c1tpXSA9IG1fc2xvd0FyZ3VtZW50c1tpXTsKLSAg
ICB9Ci0KKyAgICByZXN1bHQtPm1fYXJndW1lbnRzID0gYXJndW1lbnRzKCk7CisgICAgCiAgICAg
aWYgKG1fdHlwZVByb2ZpbGluZ1JhcmVEYXRhKSB7CiAgICAgICAgIHJlc3VsdC0+bV90eXBlUHJv
ZmlsaW5nUmFyZURhdGEgPSBzdGQ6Om1ha2VfdW5pcXVlPFR5cGVQcm9maWxpbmdSYXJlRGF0YT4o
KTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5o
CShyZXZpc2lvbiAxODA2OTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1i
b2xUYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwNywgMjAwOCwgMjAxMi0yMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAxMi0yMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzEs
NiArMzEsNyBAQAogCiAjaW5jbHVkZSAiQ29uY3VycmVudEpJVExvY2suaCIKICNpbmNsdWRlICJK
U09iamVjdC5oIgorI2luY2x1ZGUgIlNjb3BlZEFyZ3VtZW50c1RhYmxlLmgiCiAjaW5jbHVkZSAi
VHlwZUxvY2F0aW9uLmgiCiAjaW5jbHVkZSAiVmFyaWFibGVXYXRjaHBvaW50U2V0LmgiCiAjaW5j
bHVkZSA8bWVtb3J5PgpAQCAtMzksMjQgKzQwLDYgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLXN0
cnVjdCBTbG93QXJndW1lbnQgewotcHVibGljOgotICAgIGVudW0gU3RhdHVzIHsKLSAgICAgICAg
Tm9ybWFsID0gMCwKLSAgICAgICAgQ2FwdHVyZWQgPSAxLAotICAgICAgICBEZWxldGVkID0gMgot
ICAgIH07Ci0KLSAgICBTbG93QXJndW1lbnQoKQotICAgICAgICA6IHN0YXR1cyhOb3JtYWwpCi0g
ICAgICAgICwgaW5kZXgoMCkKLSAgICB7Ci0gICAgfQotCi0gICAgU3RhdHVzIHN0YXR1czsKLSAg
ICBpbnQgaW5kZXg7IC8vIElmIHN0YXR1cyBpcyAnRGVsZXRlZCcsIGluZGV4IGlzIGJvZ3VzLgot
fTsKLQogc3RhdGljIEFMV0FZU19JTkxJTkUgaW50IG1pc3NpbmdTeW1ib2xNYXJrZXIoKSB7IHJl
dHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpOyB9CiAKIC8vIFRoZSBiaXQgdHdp
ZGRsaW5nIGluIHRoaXMgY2xhc3MgYXNzdW1lcyB0aGF0IGV2ZXJ5IHJlZ2lzdGVyIGluZGV4IGlz
IGEKQEAgLTg2LDYgKzY5LDI4IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIGludCBtaXNzaW5nU3lt
Ym9sTWEKIC8vIGNvcHk6ICAgICBTeW1ib2xUYWJsZUVudHJ5IC0tPiBGYXRFbnRyeSAtLS0tLV4K
IAogc3RydWN0IFN5bWJvbFRhYmxlRW50cnkgeworcHJpdmF0ZToKKyAgICBzdGF0aWMgVmFyT2Zm
c2V0IHZhck9mZnNldEZyb21CaXRzKGludHB0cl90IGJpdHMpCisgICAgeworICAgICAgICBWYXJL
aW5kIGtpbmQ7CisgICAgICAgIGlmIChiaXRzICYgU3RhY2tGbGFnKQorICAgICAgICAgICAga2lu
ZCA9IFN0YWNrVmFyS2luZDsKKyAgICAgICAgZWxzZSBpZiAoYml0cyAmIENhcHR1cmVkQXJndW1l
bnRGbGFnKQorICAgICAgICAgICAga2luZCA9IENhcHR1cmVkQXJndW1lbnRLaW5kOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICBraW5kID0gU2NvcGVWYXJLaW5kOworICAgICAgICByZXR1cm4g
VmFyT2Zmc2V0Ojphc3NlbWJsZShraW5kLCBzdGF0aWNfY2FzdDxpbnQ+KGJpdHMgPj4gRmxhZ0Jp
dHMpKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIFNjb3BlT2Zmc2V0IHNjb3BlT2Zmc2V0RnJv
bUJpdHMoaW50cHRyX3QgYml0cykKKyAgICB7CisgICAgICAgIEFTU0VSVCghKGJpdHMgJiBTdGFj
a0ZsYWcpKTsKKyAgICAgICAgQVNTRVJUKCEoYml0cyAmIENhcHR1cmVkQXJndW1lbnRGbGFnKSk7
CisgICAgICAgIHJldHVybiBTY29wZU9mZnNldChzdGF0aWNfY2FzdDxpbnQ+KGJpdHMgPj4gRmxh
Z0JpdHMpKTsKKyAgICB9CisKK3B1YmxpYzoKKyAgICAKICAgICAvLyBVc2UgdGhlIFN5bWJvbFRh
YmxlRW50cnk6OkZhc3QgY2xhc3MsIGVpdGhlciB2aWEgaW1wbGljaXQgY2FzdCBvciBieSBjYWxs
aW5nCiAgICAgLy8gZ2V0RmFzdCgpLCB3aGVuIHlvdSAoMSkgb25seSBjYXJlIGFib3V0IGlzTnVs
bCgpLCBnZXRJbmRleCgpLCBhbmQgaXNSZWFkT25seSgpLAogICAgIC8vIGFuZCAoMikgeW91IGFy
ZSBpbiBhIGhvdCBwYXRoIHdoZXJlIHlvdSBuZWVkIHRvIG1pbmltaXplIHRoZSBudW1iZXIgb2Yg
dGltZXMKQEAgLTEwNywxMSArMTEyLDE5IEBAIHN0cnVjdCBTeW1ib2xUYWJsZUVudHJ5IHsKICAg
ICAgICAgICAgIHJldHVybiAhKG1fYml0cyAmIH5TbGltRmxhZyk7CiAgICAgICAgIH0KIAotICAg
ICAgICBpbnQgZ2V0SW5kZXgoKSBjb25zdAorICAgICAgICBWYXJPZmZzZXQgdmFyT2Zmc2V0KCkg
Y29uc3QKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4obV9i
aXRzID4+IEZsYWdCaXRzKTsKKyAgICAgICAgICAgIHJldHVybiB2YXJPZmZzZXRGcm9tQml0cyht
X2JpdHMpOwogICAgICAgICB9Ci0gICAgCisgICAgICAgIAorICAgICAgICAvLyBBc3NlcnRzIGlm
IHRoZSBvZmZzZXQgaXMgYW55dGhpbmcgYnV0IGEgc2NvcGUgb2Zmc2V0LiBUaGlzIHN0cnVjdHVy
ZXMgdGhlIGFzc2VydGlvbnMKKyAgICAgICAgLy8gaW4gYSB3YXkgdGhhdCBtYXkgcmVzdWx0IGlu
IGJldHRlciBjb2RlLCBldmVuIGluIHJlbGVhc2UsIHRoYW4gZG9pbmcKKyAgICAgICAgLy8gdmFy
T2Zmc2V0KCkuc2NvcGVPZmZzZXQoKS4KKyAgICAgICAgU2NvcGVPZmZzZXQgc2NvcGVPZmZzZXQo
KSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gc2NvcGVPZmZzZXRGcm9tQml0
cyhtX2JpdHMpOworICAgICAgICB9CisgICAgICAgIAogICAgICAgICBib29sIGlzUmVhZE9ubHko
KSBjb25zdAogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gbV9iaXRzICYgUmVhZE9ubHlG
bGFnOwpAQCAtMTQyLDE4ICsxNTUsMTggQEAgc3RydWN0IFN5bWJvbFRhYmxlRW50cnkgewogICAg
IHsKICAgICB9CiAKLSAgICBTeW1ib2xUYWJsZUVudHJ5KGludCBpbmRleCkKKyAgICBTeW1ib2xU
YWJsZUVudHJ5KFZhck9mZnNldCBvZmZzZXQpCiAgICAgICAgIDogbV9iaXRzKFNsaW1GbGFnKQog
ICAgIHsKLSAgICAgICAgQVNTRVJUKGlzVmFsaWRJbmRleChpbmRleCkpOwotICAgICAgICBwYWNr
KGluZGV4LCBmYWxzZSwgZmFsc2UpOworICAgICAgICBBU1NFUlQoaXNWYWxpZFZhck9mZnNldChv
ZmZzZXQpKTsKKyAgICAgICAgcGFjayhvZmZzZXQsIGZhbHNlLCBmYWxzZSk7CiAgICAgfQogCi0g
ICAgU3ltYm9sVGFibGVFbnRyeShpbnQgaW5kZXgsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCisgICAg
U3ltYm9sVGFibGVFbnRyeShWYXJPZmZzZXQgb2Zmc2V0LCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQog
ICAgICAgICA6IG1fYml0cyhTbGltRmxhZykKICAgICB7Ci0gICAgICAgIEFTU0VSVChpc1ZhbGlk
SW5kZXgoaW5kZXgpKTsKLSAgICAgICAgcGFjayhpbmRleCwgYXR0cmlidXRlcyAmIFJlYWRPbmx5
LCBhdHRyaWJ1dGVzICYgRG9udEVudW0pOworICAgICAgICBBU1NFUlQoaXNWYWxpZFZhck9mZnNl
dChvZmZzZXQpKTsKKyAgICAgICAgcGFjayhvZmZzZXQsIGF0dHJpYnV0ZXMgJiBSZWFkT25seSwg
YXR0cmlidXRlcyAmIERvbnRFbnVtKTsKICAgICB9CiAgICAgCiAgICAgflN5bWJvbFRhYmxlRW50
cnkoKQpAQCAtMTgxLDkgKzE5NCwxNyBAQCBzdHJ1Y3QgU3ltYm9sVGFibGVFbnRyeSB7CiAgICAg
ICAgIHJldHVybiAhKGJpdHMoKSAmIH5TbGltRmxhZyk7CiAgICAgfQogCi0gICAgaW50IGdldElu
ZGV4KCkgY29uc3QKKyAgICBWYXJPZmZzZXQgdmFyT2Zmc2V0KCkgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiB2YXJPZmZzZXRGcm9tQml0cyhiaXRzKCkpOworICAgIH0KKyAgICAKKyAgICAv
LyBBc3NlcnRzIGlmIHRoZSBvZmZzZXQgaXMgYW55dGhpbmcgYnV0IGEgc2NvcGUgb2Zmc2V0LiBU
aGlzIHN0cnVjdHVyZXMgdGhlIGFzc2VydGlvbnMKKyAgICAvLyBpbiBhIHdheSB0aGF0IG1heSBy
ZXN1bHQgaW4gYmV0dGVyIGNvZGUsIGV2ZW4gaW4gcmVsZWFzZSwgdGhhbiBkb2luZworICAgIC8v
IHZhck9mZnNldCgpLnNjb3BlT2Zmc2V0KCkuCisgICAgU2NvcGVPZmZzZXQgc2NvcGVPZmZzZXQo
KSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4oYml0cygpID4+
IEZsYWdCaXRzKTsKKyAgICAgICAgcmV0dXJuIHNjb3BlT2Zmc2V0RnJvbUJpdHMoYml0cygpKTsK
ICAgICB9CiAgICAgCiAgICAgQUxXQVlTX0lOTElORSBGYXN0IGdldEZhc3QoKSBjb25zdApAQCAt
MjA5LDcgKzIzMCw3IEBAIHN0cnVjdCBTeW1ib2xUYWJsZUVudHJ5IHsKIAogICAgIHZvaWQgc2V0
QXR0cmlidXRlcyh1bnNpZ25lZCBhdHRyaWJ1dGVzKQogICAgIHsKLSAgICAgICAgcGFjayhnZXRJ
bmRleCgpLCBhdHRyaWJ1dGVzICYgUmVhZE9ubHksIGF0dHJpYnV0ZXMgJiBEb250RW51bSk7Cisg
ICAgICAgIHBhY2sodmFyT2Zmc2V0KCksIGF0dHJpYnV0ZXMgJiBSZWFkT25seSwgYXR0cmlidXRl
cyAmIERvbnRFbnVtKTsKICAgICB9CiAKICAgICBib29sIGlzUmVhZE9ubHkoKSBjb25zdApAQCAt
MjQyLDcgKzI2Myw5IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIGNvbnN0IGludHB0cl90IFJlYWRP
bmx5RmxhZyA9IDB4MjsKICAgICBzdGF0aWMgY29uc3QgaW50cHRyX3QgRG9udEVudW1GbGFnID0g
MHg0OwogICAgIHN0YXRpYyBjb25zdCBpbnRwdHJfdCBOb3ROdWxsRmxhZyA9IDB4ODsKLSAgICBz
dGF0aWMgY29uc3QgaW50cHRyX3QgRmxhZ0JpdHMgPSA0OworICAgIHN0YXRpYyBjb25zdCBpbnRw
dHJfdCBTdGFja0ZsYWcgPSAweDEwOworICAgIHN0YXRpYyBjb25zdCBpbnRwdHJfdCBDYXB0dXJl
ZEFyZ3VtZW50RmxhZyA9IDB4MjA7CisgICAgc3RhdGljIGNvbnN0IGludHB0cl90IEZsYWdCaXRz
ID0gNjsKICAgICAKICAgICBjbGFzcyBGYXRFbnRyeSB7CiAgICAgICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOwpAQCAtMzA5LDIwICszMzIsMzQgQEAgcHJpdmF0ZToKIAogICAgIEpTX0VYUE9S
VF9QUklWQVRFIHZvaWQgZnJlZUZhdEVudHJ5U2xvdygpOwogCi0gICAgdm9pZCBwYWNrKGludCBp
bmRleCwgYm9vbCByZWFkT25seSwgYm9vbCBkb250RW51bSkKKyAgICB2b2lkIHBhY2soVmFyT2Zm
c2V0IG9mZnNldCwgYm9vbCByZWFkT25seSwgYm9vbCBkb250RW51bSkKICAgICB7CiAgICAgICAg
IEFTU0VSVCghaXNGYXQoKSk7CiAgICAgICAgIGludHB0cl90JiBiaXRzUmVmID0gYml0cygpOwot
ICAgICAgICBiaXRzUmVmID0gKHN0YXRpY19jYXN0PGludHB0cl90PihpbmRleCkgPDwgRmxhZ0Jp
dHMpIHwgTm90TnVsbEZsYWcgfCBTbGltRmxhZzsKKyAgICAgICAgYml0c1JlZiA9CisgICAgICAg
ICAgICAoc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KG9mZnNldC5yYXdPZmZzZXQoKSkgPDwgRmxhZ0Jp
dHMpIHwgTm90TnVsbEZsYWcgfCBTbGltRmxhZzsKICAgICAgICAgaWYgKHJlYWRPbmx5KQogICAg
ICAgICAgICAgYml0c1JlZiB8PSBSZWFkT25seUZsYWc7CiAgICAgICAgIGlmIChkb250RW51bSkK
ICAgICAgICAgICAgIGJpdHNSZWYgfD0gRG9udEVudW1GbGFnOworICAgICAgICBzd2l0Y2ggKG9m
ZnNldC5raW5kKCkpIHsKKyAgICAgICAgY2FzZSBTY29wZVZhcktpbmQ6CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBTdGFja1ZhcktpbmQ6CisgICAgICAgICAgICBiaXRzUmVmIHw9
IFN0YWNrRmxhZzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENhcHR1cmVkQXJn
dW1lbnRLaW5kOgorICAgICAgICAgICAgYml0c1JlZiB8PSBDYXB0dXJlZEFyZ3VtZW50RmxhZzsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAg
ICAgfQogICAgIAotICAgIGJvb2wgaXNWYWxpZEluZGV4KGludCBpbmRleCkKKyAgICBzdGF0aWMg
Ym9vbCBpc1ZhbGlkVmFyT2Zmc2V0KFZhck9mZnNldCBvZmZzZXQpCiAgICAgewotICAgICAgICBy
ZXR1cm4gKChzdGF0aWNfY2FzdDxpbnRwdHJfdD4oaW5kZXgpIDw8IEZsYWdCaXRzKSA+PiBGbGFn
Qml0cykgPT0gc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KGluZGV4KTsKKyAgICAgICAgcmV0dXJuICgo
c3RhdGljX2Nhc3Q8aW50cHRyX3Q+KG9mZnNldC5yYXdPZmZzZXQoKSkgPDwgRmxhZ0JpdHMpID4+
IEZsYWdCaXRzKSA9PSBzdGF0aWNfY2FzdDxpbnRwdHJfdD4ob2Zmc2V0LnJhd09mZnNldCgpKTsK
ICAgICB9CiAKICAgICBpbnRwdHJfdCBtX2JpdHM7CkBAIC0zNTEsNyArMzg4LDcgQEAgcHVibGlj
OgogICAgIHN0YXRpYyBTeW1ib2xUYWJsZSogY3JlYXRlTmFtZVNjb3BlVGFibGUoVk0mIHZtLCBj
b25zdCBJZGVudGlmaWVyJiBpZGVudCwgdW5zaWduZWQgYXR0cmlidXRlcykKICAgICB7CiAgICAg
ICAgIFN5bWJvbFRhYmxlKiByZXN1bHQgPSBjcmVhdGUodm0pOwotICAgICAgICByZXN1bHQtPmFk
ZChpZGVudC5pbXBsKCksIFN5bWJvbFRhYmxlRW50cnkoLTEsIGF0dHJpYnV0ZXMpKTsKKyAgICAg
ICAgcmVzdWx0LT5hZGQoaWRlbnQuaW1wbCgpLCBTeW1ib2xUYWJsZUVudHJ5KFZhck9mZnNldChT
Y29wZU9mZnNldCgwKSksIGF0dHJpYnV0ZXMpKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAg
ICB9CiAgICAgCkBAIC00MjMsOCArNDYwLDI5IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHNp
emUobG9ja2VyKTsKICAgICB9CiAgICAgCisgICAgU2NvcGVPZmZzZXQgbWF4U2NvcGVPZmZzZXQo
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbWF4U2NvcGVPZmZzZXQ7CisgICAgfQor
ICAgIAorICAgIHVuc2lnbmVkIHNjb3BlU2l6ZSgpIGNvbnN0CisgICAgeworICAgICAgICBTY29w
ZU9mZnNldCBtYXhTY29wZU9mZnNldCA9IHRoaXMtPm1heFNjb3BlT2Zmc2V0KCk7CisgICAgICAg
IAorICAgICAgICAvLyBEbyBzb21lIGNhbGN1bGF0aW9uIHRoYXQgcmVsaWVzIG9uIGludmFsaWQg
c2NvcGUgb2Zmc2V0IHBsdXMgb25lIGJlaW5nIHplcm8uCisgICAgICAgIHVuc2lnbmVkIGZhc3RS
ZXN1bHQgPSBtYXhTY29wZU9mZnNldC5vZmZzZXRVbmNoZWNrZWQoKSArIDE7CisgICAgICAgIAor
ICAgICAgICAvLyBBc3NlcnQgdGhhdCB0aGlzIHdvcmtzLgorICAgICAgICBBU1NFUlQoZmFzdFJl
c3VsdCA9PSAoIW1heFNjb3BlT2Zmc2V0ID8gMCA6IG1heFNjb3BlT2Zmc2V0Lm9mZnNldCgpICsg
MSkpOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIGZhc3RSZXN1bHQ7CisgICAgfQorICAgIAog
ICAgIE1hcDo6QWRkUmVzdWx0IGFkZChjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiwgU3RyaW5n
SW1wbCoga2V5LCBjb25zdCBTeW1ib2xUYWJsZUVudHJ5JiBlbnRyeSkKICAgICB7CisgICAgICAg
IGlmIChlbnRyeS52YXJPZmZzZXQoKS5pc1Njb3BlKCkKKyAgICAgICAgICAgICYmICghbV9tYXhT
Y29wZU9mZnNldCB8fCBtX21heFNjb3BlT2Zmc2V0IDwgZW50cnkuc2NvcGVPZmZzZXQoKSkpCisg
ICAgICAgICAgICBtX21heFNjb3BlT2Zmc2V0ID0gZW50cnkuc2NvcGVPZmZzZXQoKTsKICAgICAg
ICAgcmV0dXJuIG1fbWFwLmFkZChrZXksIGVudHJ5KTsKICAgICB9CiAgICAgCkBAIC00NTYsNiAr
NTE0LDQ1IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGNvbnRhaW5zKGxvY2tlciwga2V5KTsK
ICAgICB9CiAgICAgCisgICAgLy8gVGhlIHByaW5jaXBsZSBiZWhpbmQgU2NvcGVkQXJndW1lbnRz
VGFibGUgbW9kaWZpY2F0aW9ucyBpcyB0aGF0IHdlIHdpbGwgY3JlYXRlIG9uZSBhbmQKKyAgICAv
LyBsZWF2ZSBpdCB1bmxvY2tlZCAtIHRoZXJlYnkgYWxsb3dpbmcgaW4tcGxhY2UgY2hhbmdlcyAt
IHVudGlsIHNvbWVvbmUgYXNrcyBmb3IgYSBwb2ludGVyIHRvCisgICAgLy8gdGhlIHRhYmxlLiBU
aGVuLCB3ZSB3aWxsIGxvY2sgaXQuIFRoZW4gYm90aCBvdXIgZnV0dXJlIGNoYW5nZXMgYW5kIHRo
ZWlyIGZ1dHVyZSBjaGFuZ2VzCisgICAgLy8gd2lsbCBmaXJzdCBoYXZlIHRvIG1ha2UgYSBjb3B5
LiBUaGlzIGRpc2NpcGxpbmUgbWVhbnMgdGhhdCB1c3VhbGx5IHdoZW4gd2UgY3JlYXRlIGEKKyAg
ICAvLyBTY29wZWRBcmd1bWVudHMgb2JqZWN0LCB3ZSBkb24ndCBoYXZlIHRvIG1ha2UgYSBjb3B5
IG9mIHRoZSBTY29wZWRBcmd1bWVudHNUYWJsZSAtIGluc3RlYWQKKyAgICAvLyB3ZSBqdXN0IHRh
a2UgYSByZWZlcmVuY2UgdG8gb25lIHRoYXQgd2UgYWxyZWFkeSBoYXZlLgorICAgIAorICAgIHVp
bnQzMl90IGFyZ3VtZW50c0xlbmd0aCgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoIW1fYXJn
dW1lbnRzKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBtX2FyZ3VtZW50
cy0+bGVuZ3RoKCk7CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0QXJndW1lbnRzTGVuZ3RoKFZN
JiB2bSwgdWludDMyX3QgbGVuZ3RoKQorICAgIHsKKyAgICAgICAgaWYgKFVOTElLRUxZKCFtX2Fy
Z3VtZW50cykpCisgICAgICAgICAgICBtX2FyZ3VtZW50cy5zZXQodm0sIHRoaXMsIFNjb3BlZEFy
Z3VtZW50c1RhYmxlOjpjcmVhdGUodm0pKTsKKyAgICAgICAgbV9hcmd1bWVudHMuc2V0KHZtLCB0
aGlzLCBtX2FyZ3VtZW50cy0+c2V0TGVuZ3RoKHZtLCBsZW5ndGgpKTsKKyAgICB9CisgICAgCisg
ICAgU2NvcGVPZmZzZXQgYXJndW1lbnRPZmZzZXQodWludDMyX3QgaSkgY29uc3QKKyAgICB7Cisg
ICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKG1fYXJndW1lbnRzKTsKKyAg
ICAgICAgcmV0dXJuIG1fYXJndW1lbnRzLT5nZXQoaSk7CisgICAgfQorICAgIAorICAgIHZvaWQg
c2V0QXJndW1lbnRPZmZzZXQoVk0mIHZtLCB1aW50MzJfdCBpLCBTY29wZU9mZnNldCBvZmZzZXQp
CisgICAgeworICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihtX2FyZ3Vt
ZW50cyk7CisgICAgICAgIG1fYXJndW1lbnRzLnNldCh2bSwgdGhpcywgbV9hcmd1bWVudHMtPnNl
dCh2bSwgaSwgb2Zmc2V0KSk7CisgICAgfQorICAgIAorICAgIFNjb3BlZEFyZ3VtZW50c1RhYmxl
KiBhcmd1bWVudHMoKSBjb25zdAorICAgIHsKKyAgICAgICAgbV9hcmd1bWVudHMtPmxvY2soKTsK
KyAgICAgICAgcmV0dXJuIG1fYXJndW1lbnRzLmdldCgpOworICAgIH0KKyAgICAKICAgICBHbG9i
YWxWYXJpYWJsZUlEIHVuaXF1ZUlERm9yVmFyaWFibGUoY29uc3QgQ29uY3VycmVudEpJVExvY2tl
ciYsIFN0cmluZ0ltcGwqIGtleSwgVk0mIHZtKTsKICAgICBHbG9iYWxWYXJpYWJsZUlEIHVuaXF1
ZUlERm9yUmVnaXN0ZXIoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYgbG9ja2VyLCBpbnQgcmVn
aXN0ZXJJbmRleCwgVk0mIHZtKTsKICAgICBSZWZQdHI8VHlwZVNldD4gZ2xvYmFsVHlwZVNldEZv
clJlZ2lzdGVyKGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImIGxvY2tlciwgaW50IHJlZ2lzdGVy
SW5kZXgsIFZNJiB2bSk7CkBAIC00NjQsMjggKzU2MSw3IEBAIHB1YmxpYzoKICAgICBib29sIHVz
ZXNOb25TdHJpY3RFdmFsKCkgeyByZXR1cm4gbV91c2VzTm9uU3RyaWN0RXZhbDsgfQogICAgIHZv
aWQgc2V0VXNlc05vblN0cmljdEV2YWwoYm9vbCB1c2VzTm9uU3RyaWN0RXZhbCkgeyBtX3VzZXNO
b25TdHJpY3RFdmFsID0gdXNlc05vblN0cmljdEV2YWw7IH0KIAotICAgIGludCBjYXB0dXJlU3Rh
cnQoKSBjb25zdCB7IHJldHVybiBtX2NhcHR1cmVTdGFydDsgfQotICAgIHZvaWQgc2V0Q2FwdHVy
ZVN0YXJ0KGludCBjYXB0dXJlU3RhcnQpIHsgbV9jYXB0dXJlU3RhcnQgPSBjYXB0dXJlU3RhcnQ7
IH0KLQotICAgIGludCBjYXB0dXJlRW5kKCkgY29uc3QgeyByZXR1cm4gbV9jYXB0dXJlRW5kOyB9
Ci0gICAgdm9pZCBzZXRDYXB0dXJlRW5kKGludCBjYXB0dXJlRW5kKSB7IG1fY2FwdHVyZUVuZCA9
IGNhcHR1cmVFbmQ7IH0KLQotICAgIGludCBjYXB0dXJlQ291bnQoKSBjb25zdCB7IHJldHVybiAt
KG1fY2FwdHVyZUVuZCAtIG1fY2FwdHVyZVN0YXJ0KTsgfQotICAgIAotICAgIGJvb2wgaXNDYXB0
dXJlZChpbnQgb3BlcmFuZCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBvcGVyYW5kIDw9IGNhcHR1
cmVTdGFydCgpICYmIG9wZXJhbmQgPiBjYXB0dXJlRW5kKCk7Ci0gICAgfQotCi0gICAgaW50IHBh
cmFtZXRlckNvdW50KCkgeyByZXR1cm4gbV9wYXJhbWV0ZXJDb3VudEluY2x1ZGluZ1RoaXMgLSAx
OyB9Ci0gICAgaW50IHBhcmFtZXRlckNvdW50SW5jbHVkaW5nVGhpcygpIHsgcmV0dXJuIG1fcGFy
YW1ldGVyQ291bnRJbmNsdWRpbmdUaGlzOyB9Ci0gICAgdm9pZCBzZXRQYXJhbWV0ZXJDb3VudElu
Y2x1ZGluZ1RoaXMoaW50IHBhcmFtZXRlckNvdW50SW5jbHVkaW5nVGhpcykgeyBtX3BhcmFtZXRl
ckNvdW50SW5jbHVkaW5nVGhpcyA9IHBhcmFtZXRlckNvdW50SW5jbHVkaW5nVGhpczsgfQotCi0g
ICAgLy8gMCBpZiB3ZSBkb24ndCBjYXB0dXJlIGFueSBhcmd1bWVudHM7IHBhcmFtZXRlckNvdW50
KCkgaW4gbGVuZ3RoIGlmIHdlIGRvLgotICAgIGNvbnN0IFNsb3dBcmd1bWVudCogc2xvd0FyZ3Vt
ZW50cygpIHsgcmV0dXJuIG1fc2xvd0FyZ3VtZW50cy5nZXQoKTsgfQotICAgIHZvaWQgc2V0U2xv
d0FyZ3VtZW50cyhzdGQ6OnVuaXF1ZV9wdHI8U2xvd0FyZ3VtZW50W10+IHNsb3dBcmd1bWVudHMp
IHsgbV9zbG93QXJndW1lbnRzID0gV1RGOjptb3ZlKHNsb3dBcmd1bWVudHMpOyB9Ci0gICAgCi0g
ICAgU3ltYm9sVGFibGUqIGNsb25lQ2FwdHVyZWROYW1lcyhWTSYpOworICAgIFN5bWJvbFRhYmxl
KiBjbG9uZVNjb3BlUGFydChWTSYpOwogCiAgICAgdm9pZCBwcmVwYXJlRm9yVHlwZVByb2ZpbGlu
Zyhjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJik7CiAKQEAgLTUxMyw2ICs1ODksOCBAQCBwcml2
YXRlOgogICAgIH5TeW1ib2xUYWJsZSgpOwogCiAgICAgTWFwIG1fbWFwOworICAgIFNjb3BlT2Zm
c2V0IG1fbWF4U2NvcGVPZmZzZXQ7CisgICAgCiAgICAgc3RydWN0IFR5cGVQcm9maWxpbmdSYXJl
RGF0YSB7CiAgICAgICAgIFVuaXF1ZUlETWFwIG1fdW5pcXVlSURNYXA7CiAgICAgICAgIFJlZ2lz
dGVyVG9WYXJpYWJsZU1hcCBtX3JlZ2lzdGVyVG9WYXJpYWJsZU1hcDsKQEAgLTUyMCwxMyArNTk4
LDkgQEAgcHJpdmF0ZToKICAgICB9OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxUeXBlUHJvZmlsaW5n
UmFyZURhdGE+IG1fdHlwZVByb2ZpbGluZ1JhcmVEYXRhOwogCi0gICAgaW50IG1fcGFyYW1ldGVy
Q291bnRJbmNsdWRpbmdUaGlzOwogICAgIGJvb2wgbV91c2VzTm9uU3RyaWN0RXZhbDsKLQotICAg
IGludCBtX2NhcHR1cmVTdGFydDsKLSAgICBpbnQgbV9jYXB0dXJlRW5kOwotCi0gICAgc3RkOjp1
bmlxdWVfcHRyPFNsb3dBcmd1bWVudFtdPiBtX3Nsb3dBcmd1bWVudHM7CisgICAgCisgICAgV3Jp
dGVCYXJyaWVyPFNjb3BlZEFyZ3VtZW50c1RhYmxlPiBtX2FyZ3VtZW50czsKICAgICAKICAgICBz
dGQ6OnVuaXF1ZV9wdHI8V2F0Y2hwb2ludENsZWFudXA+IG1fd2F0Y2hwb2ludENsZWFudXA7CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Zhck9mZnNldC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVmFyT2Zmc2V0LmNwcAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Zhck9mZnNldC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVmFy
T2Zmc2V0LmgiCisKK25hbWVzcGFjZSBKU0MgeworCit2b2lkIFZhck9mZnNldDo6ZHVtcChQcmlu
dFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIHN3aXRjaCAobV9raW5kKSB7CisgICAgY2FzZSBJ
bnZhbGlkVmFyS2luZDoKKyAgICAgICAgb3V0LnByaW50KCJpbnZhbGlkIik7CisgICAgICAgIHJl
dHVybjsKKyAgICBjYXNlIFNjb3BlVmFyS2luZDoKKyAgICAgICAgb3V0LnByaW50KHNjb3BlT2Zm
c2V0KCkpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBTdGFja1ZhcktpbmQ6CisgICAgICAg
IG91dC5wcmludChzdGFja09mZnNldCgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ2Fw
dHVyZWRBcmd1bWVudEtpbmQ6CisgICAgICAgIG91dC5wcmludChjYXB0dXJlZEFyZ3VtZW50T2Zm
c2V0KCkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCituYW1lc3BhY2UgV1RGIHsKKwor
dXNpbmcgbmFtZXNwYWNlIEpTQzsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBv
dXQsIFZhcktpbmQgdmFyS2luZCkKK3sKKyAgICBzd2l0Y2ggKHZhcktpbmQpIHsKKyAgICBjYXNl
IEludmFsaWRWYXJLaW5kOgorICAgICAgICBvdXQucHJpbnQoIkludmFsaWQiKTsKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgU2NvcGVWYXJLaW5kOgorICAgICAgICBvdXQucHJpbnQoIlNjb3Bl
Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFN0YWNrVmFyS2luZDoKKyAgICAgICAgb3V0
LnByaW50KCJTdGFjayIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBDYXB0dXJlZEFyZ3Vt
ZW50S2luZDoKKyAgICAgICAgb3V0LnByaW50KCJDYXB0dXJlZEFyZ3VtZW50Iik7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV1RGCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1Zhck9mZnNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1Zhck9mZnNldC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVmFyT2Zmc2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMTQgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBWYXJPZmZzZXRf
aAorI2RlZmluZSBWYXJPZmZzZXRfaAorCisjaW5jbHVkZSAiQ2FwdHVyZWRBcmd1bWVudE9mZnNl
dC5oIgorI2luY2x1ZGUgIlNjb3BlT2Zmc2V0LmgiCisjaW5jbHVkZSAiVmlydHVhbFJlZ2lzdGVy
LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitlbnVtIFZhcktpbmQgOiB1aW50OF90IHsKKyAgICBJ
bnZhbGlkVmFyS2luZCwKKyAgICBTY29wZVZhcktpbmQsCisgICAgU3RhY2tWYXJLaW5kLAorICAg
IENhcHR1cmVkQXJndW1lbnRLaW5kCit9OworCitjbGFzcyBWYXJPZmZzZXQgeworcHVibGljOgor
ICAgIFZhck9mZnNldCgpCisgICAgICAgIDogbV9raW5kKEludmFsaWRWYXJLaW5kKQorICAgICAg
ICAsIG1fb2Zmc2V0KFVJTlRfTUFYKQorICAgIHsKKyAgICB9CisgICAgCisgICAgZXhwbGljaXQg
VmFyT2Zmc2V0KFZpcnR1YWxSZWdpc3RlciBzdGFja09mZnNldCkKKyAgICB7CisgICAgICAgIGlm
ICghc3RhY2tPZmZzZXQuaXNWYWxpZCgpKSB7CisgICAgICAgICAgICBtX2tpbmQgPSBJbnZhbGlk
VmFyS2luZDsKKyAgICAgICAgICAgIG1fb2Zmc2V0ID0gVUlOVF9NQVg7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICBtX2tpbmQgPSBTdGFja1ZhcktpbmQ7CisgICAgICAgICAgICBtX29m
ZnNldCA9IHN0YWNrT2Zmc2V0Lm9mZnNldCgpOworICAgICAgICB9CisgICAgfQorICAgIAorICAg
IGV4cGxpY2l0IFZhck9mZnNldChTY29wZU9mZnNldCBzY29wZU9mZnNldCkKKyAgICB7CisgICAg
ICAgIGlmICghc2NvcGVPZmZzZXQpIHsKKyAgICAgICAgICAgIG1fa2luZCA9IEludmFsaWRWYXJL
aW5kOworICAgICAgICAgICAgbV9vZmZzZXQgPSBVSU5UX01BWDsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIG1fa2luZCA9IFNjb3BlVmFyS2luZDsKKyAgICAgICAgICAgIG1fb2Zmc2V0
ID0gc2NvcGVPZmZzZXQub2Zmc2V0KCk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgZXhw
bGljaXQgVmFyT2Zmc2V0KENhcHR1cmVkQXJndW1lbnRPZmZzZXQgY2FwdHVyZWRBcmd1bWVudE9m
ZnNldCkKKyAgICB7CisgICAgICAgIGlmICghY2FwdHVyZWRBcmd1bWVudE9mZnNldCkgeworICAg
ICAgICAgICAgbV9raW5kID0gSW52YWxpZFZhcktpbmQ7CisgICAgICAgICAgICBtX29mZnNldCA9
IFVJTlRfTUFYOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbV9raW5kID0gQ2FwdHVy
ZWRBcmd1bWVudEtpbmQ7CisgICAgICAgICAgICBtX29mZnNldCA9IGNhcHR1cmVkQXJndW1lbnRP
ZmZzZXQub2Zmc2V0KCk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgc3RhdGljIFZhck9m
ZnNldCBhc3NlbWJsZShWYXJLaW5kIGtpbmQsIHVuc2lnbmVkIG9mZnNldCkKKyAgICB7CisgICAg
ICAgIFZhck9mZnNldCByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBraW5kOworICAg
ICAgICByZXN1bHQubV9vZmZzZXQgPSBvZmZzZXQ7CisgICAgICAgIHJlc3VsdC5jaGVja1Nhbml0
eSgpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBib29sIGlzVmFs
aWQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fa2luZCAhPSBJbnZhbGlkVmFyS2lu
ZDsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuICFpc1ZhbGlkKCk7CisgICAgfQorICAgIAorICAgIFZhcktpbmQga2luZCgpIGNv
bnN0IHsgcmV0dXJuIG1fa2luZDsgfQorICAgIAorICAgIGJvb2wgaXNTdGFjaygpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gbV9raW5kID09IFN0YWNrVmFyS2luZDsKKyAgICB9CisgICAg
CisgICAgYm9vbCBpc1Njb3BlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2tpbmQg
PT0gU2NvcGVWYXJLaW5kOworICAgIH0KKyAgICAKKyAgICBib29sIGlzQ2FwdHVyZWRBcmd1bWVu
dCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9raW5kID09IENhcHR1cmVkQXJndW1l
bnRLaW5kOworICAgIH0KKyAgICAKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3RhY2tPZmZzZXRVbmNo
ZWNrZWQoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKCFpc1N0YWNrKCkpCisgICAgICAgICAg
ICByZXR1cm4gVmlydHVhbFJlZ2lzdGVyKCk7CisgICAgICAgIHJldHVybiBWaXJ0dWFsUmVnaXN0
ZXIobV9vZmZzZXQpOworICAgIH0KKyAgICAKKyAgICBTY29wZU9mZnNldCBzY29wZU9mZnNldFVu
Y2hlY2tlZCgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoIWlzU2NvcGUoKSkKKyAgICAgICAg
ICAgIHJldHVybiBTY29wZU9mZnNldCgpOworICAgICAgICByZXR1cm4gU2NvcGVPZmZzZXQobV9v
ZmZzZXQpOworICAgIH0KKyAgICAKKyAgICBDYXB0dXJlZEFyZ3VtZW50T2Zmc2V0IGNhcHR1cmVk
QXJndW1lbnRPZmZzZXRVbmNoZWNrZWQoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKCFpc0Nh
cHR1cmVkQXJndW1lbnQoKSkKKyAgICAgICAgICAgIHJldHVybiBDYXB0dXJlZEFyZ3VtZW50T2Zm
c2V0KCk7CisgICAgICAgIHJldHVybiBDYXB0dXJlZEFyZ3VtZW50T2Zmc2V0KG1fb2Zmc2V0KTsK
KyAgICB9CisgICAgCisgICAgVmlydHVhbFJlZ2lzdGVyIHN0YWNrT2Zmc2V0KCkgY29uc3QKKyAg
ICB7CisgICAgICAgIEFTU0VSVChpc1N0YWNrKCkpOworICAgICAgICByZXR1cm4gVmlydHVhbFJl
Z2lzdGVyKG1fb2Zmc2V0KTsKKyAgICB9CisgICAgCisgICAgU2NvcGVPZmZzZXQgc2NvcGVPZmZz
ZXQoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzU2NvcGUoKSk7CisgICAgICAgIHJl
dHVybiBTY29wZU9mZnNldChtX29mZnNldCk7CisgICAgfQorICAgIAorICAgIENhcHR1cmVkQXJn
dW1lbnRPZmZzZXQgY2FwdHVyZWRBcmd1bWVudE9mZnNldCgpIGNvbnN0CisgICAgeworICAgICAg
ICBBU1NFUlQoaXNDYXB0dXJlZEFyZ3VtZW50KCkpOworICAgICAgICByZXR1cm4gQ2FwdHVyZWRB
cmd1bWVudE9mZnNldChtX29mZnNldCk7CisgICAgfQorICAgIAorICAgIHVuc2lnbmVkIHJhd09m
ZnNldCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaXNWYWxpZCgpKTsKKyAgICAgICAg
cmV0dXJuIG1fb2Zmc2V0OworICAgIH0KKyAgICAKKyAgICB2b2lkIGNoZWNrU2FuaXR5KCkgY29u
c3QKKyAgICB7CisgICAgICAgIGlmIChBU1NFUlRfRElTQUJMRUQpCisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIAorICAgICAgICBzd2l0Y2ggKG1fa2luZCkgeworICAgICAgICBjYXNlIElu
dmFsaWRWYXJLaW5kOgorICAgICAgICAgICAgQVNTRVJUKG1fb2Zmc2V0ID09IFVJTlRfTUFYKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBTY29wZVZhcktpbmQ6CisgICAgICAg
ICAgICBBU1NFUlQoc2NvcGVPZmZzZXQoKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IGNhc2UgU3RhY2tWYXJLaW5kOgorICAgICAgICAgICAgQVNTRVJUKHN0YWNrT2Zmc2V0KCkpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIENhcHR1cmVkQXJndW1lbnRLaW5kOgor
ICAgICAgICAgICAgQVNTRVJUKGNhcHR1cmVkQXJndW1lbnRPZmZzZXQoKSk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgVmFyT2Zmc2V0JiBv
dGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2tpbmQgPT0gb3RoZXIubV9raW5k
CisgICAgICAgICAgICAmJiBtX29mZnNldCA9PSBvdGhlci5tX29mZnNldDsKKyAgICB9CisgICAg
CisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFZhck9mZnNldCYgb3RoZXIpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgfQorICAgIAorICAgIHZv
aWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworICAgIAorcHJpdmF0ZToKKyAgICBWYXJLaW5k
IG1fa2luZDsKKyAgICB1bnNpZ25lZCBtX29mZnNldDsKK307CisKK30gLy8gbmFtZXNwYWNlIEpT
QworCituYW1lc3BhY2UgV1RGIHsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwg
SlNDOjpWYXJLaW5kKTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBWYXJPZmZz
ZXRfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WYXJpYWJsZUxvY2F0
aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVmFyaWFi
bGVMb2NhdGlvbi5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVmFyaWFibGVMb2NhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzggQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBWYXJp
YWJsZUxvY2F0aW9uX2gKKyNkZWZpbmUgVmFyaWFibGVMb2NhdGlvbl9oCisKKyNpbmNsdWRlICJW
aXJ0dWFsUmVnaXN0ZXIuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKKworCit9IC8vIG5hbWVzcGFj
ZSBKU0MKKworI2VuZGlmIC8vIFZhcmlhYmxlTG9jYXRpb25faAorCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>247468</attachid>
            <date>2015-02-26 16:57:02 -0800</date>
            <delta_ts>2015-02-26 20:19:32 -0800</delta_ts>
            <desc>starting to tool around in bytecodegenerator</desc>
            <filename>blah.patch</filename>
            <type>application/octet-stream</type>
            <size>167330</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2Vt
Ymxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJz
dHJhY3RNYWNyb0Fzc2VtYmxlci5oCShyZXZpc2lvbiAxODA3MDcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMjA1LDYgKzIwNSwxMSBAQCBwdWJsaWM6CiAgICAgICAgIFJlZ2lzdGVySUQgaW5kZXg7
CiAgICAgICAgIFNjYWxlIHNjYWxlOwogICAgICAgICBpbnQzMl90IG9mZnNldDsKKyAgICAgICAg
CisgICAgICAgIEJhc2VJbmRleCB3aXRoT2Zmc2V0KGludDMyX3QgYWRkaXRpb25hbE9mZnNldCkK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEJhc2VJbmRleChiYXNlLCBpbmRleCwgc2Nh
bGUsIG9mZnNldCArIGFkZGl0aW9uYWxPZmZzZXQpOworICAgICAgICB9CiAgICAgfTsKIAogICAg
IC8vIEFic29sdXRlQWRkcmVzczoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9CeVZhbEluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQnlWYWxJbmZvLmgJKHJldmlzaW9uIDE4MDcwNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9CeVZhbEluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDEsNiArNDEsOCBAQCBlbnVt
IEpJVEFycmF5TW9kZSB7CiAgICAgSklURG91YmxlLAogICAgIEpJVENvbnRpZ3VvdXMsCiAgICAg
SklUQXJyYXlTdG9yYWdlLAorICAgIEpJVERpcmVjdEFyZ3VtZW50cywKKyAgICBKSVRTY29wZWRB
cmd1bWVudHMsCiAgICAgSklUSW50OEFycmF5LAogICAgIEpJVEludDE2QXJyYXksCiAgICAgSklU
SW50MzJBcnJheSwKQEAgLTY1LDYgKzY3LDE3IEBAIGlubGluZSBib29sIGlzT3B0aW1pemFibGVJ
bmRleGluZ1R5cGUoSW4KICAgICB9CiB9CiAKK2lubGluZSBib29sIGhhc09wdGltaXphYmxlSW5k
ZXhpbmdGb3JKU1R5cGUoSlNUeXBlIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAg
Y2FzZSBEaXJlY3RBcmd1bWVudHNUeXBlOgorICAgIGNhc2UgU2NvcGVkQXJndW1lbnRzVHlwZToK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KK30KKwogaW5saW5lIGJvb2wgaGFzT3B0aW1pemFibGVJbmRleGluZ0ZvckNsYXNz
SW5mbyhjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbykKIHsKICAgICByZXR1cm4gaXNUeXBlZFZp
ZXcoY2xhc3NJbmZvLT50eXBlZEFycmF5U3RvcmFnZVR5cGUpOwpAQCAtNzMsNiArODYsNyBAQCBp
bmxpbmUgYm9vbCBoYXNPcHRpbWl6YWJsZUluZGV4aW5nRm9yQ2xhCiBpbmxpbmUgYm9vbCBoYXNP
cHRpbWl6YWJsZUluZGV4aW5nKFN0cnVjdHVyZSogc3RydWN0dXJlKQogewogICAgIHJldHVybiBp
c09wdGltaXphYmxlSW5kZXhpbmdUeXBlKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpCisgICAg
ICAgIHx8IGhhc09wdGltaXphYmxlSW5kZXhpbmdGb3JKU1R5cGUoc3RydWN0dXJlLT50eXBlSW5m
bygpLnR5cGUoKSkKICAgICAgICAgfHwgaGFzT3B0aW1pemFibGVJbmRleGluZ0ZvckNsYXNzSW5m
byhzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpKTsKIH0KIApAQCAtOTMsNiArMTA3LDE5IEBAIGlubGlu
ZSBKSVRBcnJheU1vZGUgaml0QXJyYXlNb2RlRm9ySW5kZXgKICAgICB9CiB9CiAKK2lubGluZSBK
SVRBcnJheU1vZGUgaml0QXJyYXlNb2RlRm9ySlNUeXBlKEpTVHlwZSB0eXBlKQoreworICAgIHN3
aXRjaCAodHlwZSkgeworICAgIGNhc2UgRGlyZWN0QXJndW1lbnRzVHlwZToKKyAgICAgICAgcmV0
dXJuIEpJVERpcmVjdEFyZ3VtZW50czsKKyAgICBjYXNlIFNjb3BlZEFyZ3VtZW50c1R5cGU6Cisg
ICAgICAgIHJldHVybiBKSVRTY29wZWRBcmd1bWVudHM7CisgICAgZGVmYXVsdDoKKyAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIEpJVENvbnRpZ3Vv
dXM7CisgICAgfQorfQorCiBpbmxpbmUgSklUQXJyYXlNb2RlIGppdEFycmF5TW9kZUZvckNsYXNz
SW5mbyhjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbykKIHsKICAgICBzd2l0Y2ggKGNsYXNzSW5m
by0+dHlwZWRBcnJheVN0b3JhZ2VUeXBlKSB7CkBAIC0xMjAsNiArMTQ3LDE5IEBAIGlubGluZSBK
SVRBcnJheU1vZGUgaml0QXJyYXlNb2RlRm9yQ2xhc3MKICAgICB9CiB9CiAKK2lubGluZSBib29s
IGppdEFycmF5TW9kZVBlcm1pdHNQdXQoSklUQXJyYXlNb2RlIG1vZGUpCit7CisgICAgc3dpdGNo
IChtb2RlKSB7CisgICAgY2FzZSBKSVREaXJlY3RBcmd1bWVudHM6CisgICAgY2FzZSBKSVRTY29w
ZWRBcmd1bWVudHM6CisgICAgICAgIC8vIFdlIGNvdWxkIHN1cHBvcnQgcHV0X2J5X3ZhbCBvbiB0
aGVzZSBhdCBzb21lIHBvaW50LCBidXQgaXQncyBqdXN0IG5vdCB0aGF0IHByb2ZpdGFibGUKKyAg
ICAgICAgLy8gYXQgdGhlIG1vbWVudC4KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGRlZmF1
bHQ6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KK30KKwogaW5saW5lIFR5cGVkQXJyYXlU
eXBlIHR5cGVkQXJyYXlUeXBlRm9ySklUQXJyYXlNb2RlKEpJVEFycmF5TW9kZSBtb2RlKQogewog
ICAgIHN3aXRjaCAobW9kZSkgewpAQCAtMTUyLDYgKzE5Miw5IEBAIGlubGluZSBKSVRBcnJheU1v
ZGUgaml0QXJyYXlNb2RlRm9yU3RydWMKICAgICBpZiAoaXNPcHRpbWl6YWJsZUluZGV4aW5nVHlw
ZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSkKICAgICAgICAgcmV0dXJuIGppdEFycmF5TW9k
ZUZvckluZGV4aW5nVHlwZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKTsKICAgICAKKyAgICBp
ZiAoaGFzT3B0aW1pemFibGVJbmRleGluZ0ZvckpTVHlwZShzdHJ1Y3R1cmUtPnR5cGVJbmZvKCku
dHlwZSgpKSkKKyAgICAgICAgcmV0dXJuIGppdEFycmF5TW9kZUZvckpTVHlwZShzdHJ1Y3R1cmUt
PnR5cGVJbmZvKCkudHlwZSgpKTsKKyAgICAKICAgICBBU1NFUlQoaGFzT3B0aW1pemFibGVJbmRl
eGluZ0ZvckNsYXNzSW5mbyhzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpKSk7CiAgICAgcmV0dXJuIGpp
dEFycmF5TW9kZUZvckNsYXNzSW5mbyhzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpKTsKIH0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QuanNvbgo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0Lmpzb24J
KHJldmlzaW9uIDE4MDcwNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRl
Y29kZUxpc3QuanNvbgkod29ya2luZyBjb3B5KQpAQCAtOCw3ICs4LDkgQEAKICAgICAgICAgICAg
IHsgIm5hbWUiIDogIm9wX2dldF9zY29wZSIsICJsZW5ndGgiIDogMiB9LAogICAgICAgICAgICAg
eyAibmFtZSIgOiAib3BfdG91Y2hfZW50cnkiLCAibGVuZ3RoIiA6IDEgfSwKICAgICAgICAgICAg
IHsgIm5hbWUiIDogIm9wX2luaXRfbGF6eV9yZWciLCAibGVuZ3RoIiA6IDIgfSwKLSAgICAgICAg
ICAgIHsgIm5hbWUiIDogIm9wX2NyZWF0ZV9hcmd1bWVudHMiLCAibGVuZ3RoIiA6IDMgfSwKKyAg
ICAgICAgICAgIHsgIm5hbWUiIDogIm9wX2NvcHlfYXJndW1lbnRzX3RvX3Njb3BlIiwgImxlbmd0
aCIgOiAyIH0sIC8vIGp1c3QgdGFrZXMgdGhlIHNjb3BlIHJlZ2lzdGVyCisgICAgICAgICAgICB7
ICJuYW1lIiA6ICJvcF9jcmVhdGVfZGlyZWN0X2FyZ3VtZW50cyIsICJsZW5ndGgiIDogMiB9LCAv
LyBqdXN0IHRha2VzIHRoZSBkc3QgcmVnaXN0ZXIKKyAgICAgICAgICAgIHsgIm5hbWUiIDogIm9w
X2NyZWF0ZV9zY29wZWRfYXJndW1lbnRzIiwgImxlbmd0aCIgOiAzIH0sIC8vIGRzdCwgc2NvcGVS
ZWdpc3RlciwgdGFibGUKICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX2NyZWF0ZV90aGlzIiwg
Imxlbmd0aCIgOiA0IH0sCiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9nZXRfY2FsbGVlIiwg
Imxlbmd0aCIgOiAzIH0sCiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF90b190aGlzIiwgImxl
bmd0aCIgOiA0IH0sCkBAIC02MSw3ICs2Myw2IEBACiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJv
cF9nZXRfYnlfaWQiLCAibGVuZ3RoIiA6IDkgIH0sCiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJv
cF9nZXRfYnlfaWRfb3V0X29mX2xpbmUiLCAibGVuZ3RoIiA6IDkgIH0sCiAgICAgICAgICAgICB7
ICJuYW1lIiA6ICJvcF9nZXRfYXJyYXlfbGVuZ3RoIiwgImxlbmd0aCIgOiA5IH0sCi0gICAgICAg
ICAgICB7ICJuYW1lIiA6ICJvcF9nZXRfYXJndW1lbnRzX2xlbmd0aCIsICJsZW5ndGgiIDogNCB9
LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfcHV0X2J5X2lkIiwgImxlbmd0aCIgOiA5IH0s
CiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9wdXRfYnlfaWRfb3V0X29mX2xpbmUiLCAibGVu
Z3RoIiA6IDkgfSwKICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX3B1dF9ieV9pZF90cmFuc2l0
aW9uX2RpcmVjdCIsICJsZW5ndGgiIDogOSB9LApAQCAtNzAsNyArNzEsNiBAQAogICAgICAgICAg
ICAgeyAibmFtZSIgOiAib3BfcHV0X2J5X2lkX3RyYW5zaXRpb25fbm9ybWFsX291dF9vZl9saW5l
IiwgImxlbmd0aCIgOiA5IH0sCiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9kZWxfYnlfaWQi
LCAibGVuZ3RoIiA6IDQgfSwKICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX2dldF9ieV92YWwi
LCAibGVuZ3RoIiA6IDYgfSwKLSAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX2dldF9hcmd1bWVu
dF9ieV92YWwiLCAibGVuZ3RoIiA6IDcgfSwKICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX3B1
dF9ieV92YWwiLCAibGVuZ3RoIiA6IDUgfSwKICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX3B1
dF9ieV92YWxfZGlyZWN0IiwgImxlbmd0aCIgOiA1IH0sCiAgICAgICAgICAgICB7ICJuYW1lIiA6
ICJvcF9kZWxfYnlfdmFsIiwgImxlbmd0aCIgOiA0IH0sCkBAIC05OSw3ICs5OSw2IEBACiAgICAg
ICAgICAgICB7ICJuYW1lIiA6ICJvcF9jYWxsIiwgImxlbmd0aCIgOiA5IH0sCiAgICAgICAgICAg
ICB7ICJuYW1lIiA6ICJvcF9jYWxsX2V2YWwiLCAibGVuZ3RoIiA6IDkgfSwKICAgICAgICAgICAg
IHsgIm5hbWUiIDogIm9wX2NhbGxfdmFyYXJncyIsICJsZW5ndGgiIDogOSB9LAotICAgICAgICAg
ICAgeyAibmFtZSIgOiAib3BfdGVhcl9vZmZfYXJndW1lbnRzIiwgImxlbmd0aCIgOiAzIH0sCiAg
ICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9yZXQiLCAibGVuZ3RoIiA6IDIgfSwKICAgICAgICAg
ICAgIHsgIm5hbWUiIDogIm9wX2NvbnN0cnVjdCIsICJsZW5ndGgiIDogOSB9LAogICAgICAgICAg
ICAgeyAibmFtZSIgOiAib3BfY29uc3RydWN0X3ZhcmFyZ3MiLCAibGVuZ3RoIiA6IDkgfSwKQEAg
LTEwOCw2ICsxMDcsOCBAQAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfcmVzb2x2ZV9zY29w
ZSIsICJsZW5ndGgiIDogNyB9LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfZ2V0X2Zyb21f
c2NvcGUiLCAibGVuZ3RoIiA6IDggfSwKICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX3B1dF90
b19zY29wZSIsICJsZW5ndGgiIDogNyB9LAorICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfZ2V0
X2Zyb21fYXJndW1lbnRzIiwgImxlbmd0aCIgOiA0IH0sIC8vIGRzdCwgYXJndW1lbnRzLCBpbmRl
eAorICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfcHV0X3RvX2FyZ3VtZW50cyIsICJsZW5ndGgi
IDogNCB9LCAvLyBhcmd1bWVudHMsIGluZGV4LCBzcmMKICAgICAgICAgICAgIHsgIm5hbWUiIDog
Im9wX3B1c2hfd2l0aF9zY29wZSIsICJsZW5ndGgiIDogMyB9LAogICAgICAgICAgICAgeyAibmFt
ZSIgOiAib3BfcG9wX3Njb3BlIiwgImxlbmd0aCIgOiAyIH0sCiAgICAgICAgICAgICB7ICJuYW1l
IiA6ICJvcF9wdXNoX25hbWVfc2NvcGUiLCAibGVuZ3RoIiA6IDUgfSwKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmNwcAkocmV2aXNp
b24gMTgwNzA3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRU
eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksMTAgKzI5LDExIEBACiAjaW5jbHVkZSAiY29u
ZmlnLmgiCiAjaW5jbHVkZSAiU3BlY3VsYXRlZFR5cGUuaCIKIAotI2luY2x1ZGUgIkFyZ3VtZW50
cy5oIgorI2luY2x1ZGUgIkRpcmVjdEFyZ3VtZW50cy5oIgogI2luY2x1ZGUgIkpTQXJyYXkuaCIK
ICNpbmNsdWRlICJKU0Z1bmN0aW9uLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1
ZGUgIlNjb3BlZEFyZ3VtZW50cy5oIgogI2luY2x1ZGUgIlN0cmluZ09iamVjdC5oIgogI2luY2x1
ZGUgIlZhbHVlUHJvZmlsZS5oIgogI2luY2x1ZGUgPHd0Zi9Cb3VuZHNDaGVja2VkUG9pbnRlci5o
PgpAQCAtMTI3LDggKzEyOCwxMyBAQCB2b2lkIGR1bXBTcGVjdWxhdGlvbihQcmludFN0cmVhbSYg
b3V0LCBTCiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgaXNUb3AgPSBmYWxzZTsK
ICAgICAKLSAgICAgICAgICAgIGlmICh2YWx1ZSAmIFNwZWNBcmd1bWVudHMpCi0gICAgICAgICAg
ICAgICAgbXlPdXQucHJpbnQoIkFyZ3VtZW50cyIpOworICAgICAgICAgICAgaWYgKHZhbHVlICYg
U3BlY0RpcmVjdEFyZ3VtZW50cykKKyAgICAgICAgICAgICAgICBteU91dC5wcmludCgiRGlyZWN0
YXJndW1lbnRzIik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgaXNUb3AgPSBm
YWxzZTsKKyAgICAKKyAgICAgICAgICAgIGlmICh2YWx1ZSAmIFNwZWNTY29wZWRBcmd1bWVudHMp
CisgICAgICAgICAgICAgICAgbXlPdXQucHJpbnQoIlNjb3BlZGFyZ3VtZW50cyIpOwogICAgICAg
ICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGlzVG9wID0gZmFsc2U7CiAgICAgCkBAIC0yMzIs
OCArMjM4LDEwIEBAIHN0YXRpYyBjb25zdCBjaGFyKiBzcGVjdWxhdGlvblRvQWJicmV2aWEKICAg
ICAgICAgcmV0dXJuICI8RmxvYXQzMmFycmF5PiI7CiAgICAgaWYgKGlzRmxvYXQ2NEFycmF5U3Bl
Y3VsYXRpb24ocHJlZGljdGlvbikpCiAgICAgICAgIHJldHVybiAiPEZsb2F0NjRhcnJheT4iOwot
ICAgIGlmIChpc0FyZ3VtZW50c1NwZWN1bGF0aW9uKHByZWRpY3Rpb24pKQotICAgICAgICByZXR1
cm4gIjxBcmd1bWVudHM+IjsKKyAgICBpZiAoaXNEaXJlY3RBcmd1bWVudHNTcGVjdWxhdGlvbihw
cmVkaWN0aW9uKSkKKyAgICAgICAgcmV0dXJuICI8RGlyZWN0QXJndW1lbnRzPiI7CisgICAgaWYg
KGlzU2NvcGVkQXJndW1lbnRzU3BlY3VsYXRpb24ocHJlZGljdGlvbikpCisgICAgICAgIHJldHVy
biAiPFNjb3BlZEFyZ3VtZW50cz4iOwogICAgIGlmIChpc1N0cmluZ09iamVjdFNwZWN1bGF0aW9u
KHByZWRpY3Rpb24pKQogICAgICAgICByZXR1cm4gIjxTdHJpbmdPYmplY3Q+IjsKICAgICBpZiAo
aXNTdHJpbmdPclN0cmluZ09iamVjdFNwZWN1bGF0aW9uKHByZWRpY3Rpb24pKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgJKHJldmlz
aW9uIDE4MDcwNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVk
VHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01Miw4ICs1Miw5IEBAIHN0YXRpYyBjb25zdCBTcGVj
dWxhdGVkVHlwZSBTcGVjVWludDMyQXIKIHN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVj
RmxvYXQzMkFycmF5ICAgICAgID0gMHgwMDAwMDQwMDsgLy8gSXQncyBkZWZpbml0ZWx5IGFuIFVp
bnQxNkFycmF5IG9yIG9uZSBvZiBpdHMgc3ViY2xhc3Nlcy4KIHN0YXRpYyBjb25zdCBTcGVjdWxh
dGVkVHlwZSBTcGVjRmxvYXQ2NEFycmF5ICAgICAgID0gMHgwMDAwMDgwMDsgLy8gSXQncyBkZWZp
bml0ZWx5IGFuIFVpbnQxNkFycmF5IG9yIG9uZSBvZiBpdHMgc3ViY2xhc3Nlcy4KIHN0YXRpYyBj
b25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjVHlwZWRBcnJheVZpZXcgICAgID0gU3BlY0ludDhBcnJh
eSB8IFNwZWNJbnQxNkFycmF5IHwgU3BlY0ludDMyQXJyYXkgfCBTcGVjVWludDhBcnJheSB8IFNw
ZWNVaW50OENsYW1wZWRBcnJheSB8IFNwZWNVaW50MTZBcnJheSB8IFNwZWNVaW50MzJBcnJheSB8
IFNwZWNGbG9hdDMyQXJyYXkgfCBTcGVjRmxvYXQ2NEFycmF5Owotc3RhdGljIGNvbnN0IFNwZWN1
bGF0ZWRUeXBlIFNwZWNBcmd1bWVudHMgICAgICAgICAgPSAweDAwMDAxMDAwOyAvLyBJdCdzIGRl
ZmluaXRlbHkgYW4gQXJndW1lbnRzIG9iamVjdC4KLXN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlw
ZSBTcGVjU3RyaW5nT2JqZWN0ICAgICAgID0gMHgwMDAwMjAwMDsgLy8gSXQncyBkZWZpbml0ZWx5
IGEgU3RyaW5nT2JqZWN0Lgorc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNEaXJlY3RB
cmd1bWVudHMgICAgPSAweDAwMDAxMDAwOyAvLyBJdCdzIGRlZmluaXRlbHkgYSBEaXJlY3RBcmd1
bWVudHMgb2JqZWN0Lgorc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNTY29wZWRBcmd1
bWVudHMgICAgPSAweDAwMDAyMDAwOyAvLyBJdCdzIGRlZmluaXRlbHkgYSBTY29wZWRBcmd1bWVu
dHMgb2JqZWN0Lgorc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNTdHJpbmdPYmplY3Qg
ICAgICAgPSAweDAwMDA0MDAwOyAvLyBJdCdzIGRlZmluaXRlbHkgYSBTdHJpbmdPYmplY3QuCiBz
dGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY09iamVjdE90aGVyICAgICAgICA9IDB4MDAw
MDgwMDA7IC8vIEl0J3MgZGVmaW5pdGVseSBhbiBvYmplY3QgYnV0IG5vdCBKU0ZpbmFsT2JqZWN0
LCBKU0FycmF5LCBvciBKU0Z1bmN0aW9uLgogc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNw
ZWNPYmplY3QgICAgICAgICAgICAgPSAweDAwMDBmZmZmOyAvLyBCaXRtYXNrIHVzZWQgZm9yIHRl
c3RpbmcgZm9yIGFueSBraW5kIG9mIG9iamVjdCBwcmVkaWN0aW9uLgogc3RhdGljIGNvbnN0IFNw
ZWN1bGF0ZWRUeXBlIFNwZWNTdHJpbmdJZGVudCAgICAgICAgPSAweDAwMDEwMDAwOyAvLyBJdCdz
IGRlZmluaXRlbHkgYSBKU1N0cmluZywgYW5kIGl0J3MgYW4gaWRlbnRpZmllci4KQEAgLTE5Myw5
ICsxOTQsMTQgQEAgaW5saW5lIGJvb2wgaXNGbG9hdDY0QXJyYXlTcGVjdWxhdGlvbihTcAogICAg
IHJldHVybiB2YWx1ZSA9PSBTcGVjRmxvYXQ2NEFycmF5OwogfQogCi1pbmxpbmUgYm9vbCBpc0Fy
Z3VtZW50c1NwZWN1bGF0aW9uKFNwZWN1bGF0ZWRUeXBlIHZhbHVlKQoraW5saW5lIGJvb2wgaXNE
aXJlY3RBcmd1bWVudHNTcGVjdWxhdGlvbihTcGVjdWxhdGVkVHlwZSB2YWx1ZSkKIHsKLSAgICBy
ZXR1cm4gISF2YWx1ZSAmJiAodmFsdWUgJiBTcGVjQXJndW1lbnRzKSA9PSB2YWx1ZTsKKyAgICBy
ZXR1cm4gdmFsdWUgPT0gU3BlY0RpcmVjdEFyZ3VtZW50czsKK30KKworaW5saW5lIGJvb2wgaXNT
Y29wZWRBcmd1bWVudHNTcGVjdWxhdGlvbihTcGVjdWxhdGVkVHlwZSB2YWx1ZSkKK3sKKyAgICBy
ZXR1cm4gdmFsdWUgPT0gU3BlY1Njb3BlZEFyZ3VtZW50czsKIH0KIAogaW5saW5lIGJvb2wgaXNB
Y3Rpb25hYmxlSW50TXV0YWJsZUFycmF5U3BlY3VsYXRpb24oU3BlY3VsYXRlZFR5cGUgdmFsdWUp
CkBAIC0yMjQsMTMgKzIzMCwxNCBAQCBpbmxpbmUgYm9vbCBpc0FjdGlvbmFibGVUeXBlZE11dGFi
bGVBcnJhCiBpbmxpbmUgYm9vbCBpc0FjdGlvbmFibGVNdXRhYmxlQXJyYXlTcGVjdWxhdGlvbihT
cGVjdWxhdGVkVHlwZSB2YWx1ZSkKIHsKICAgICByZXR1cm4gaXNBcnJheVNwZWN1bGF0aW9uKHZh
bHVlKQotICAgICAgICB8fCBpc0FyZ3VtZW50c1NwZWN1bGF0aW9uKHZhbHVlKQogICAgICAgICB8
fCBpc0FjdGlvbmFibGVUeXBlZE11dGFibGVBcnJheVNwZWN1bGF0aW9uKHZhbHVlKTsKIH0KIAog
aW5saW5lIGJvb2wgaXNBY3Rpb25hYmxlQXJyYXlTcGVjdWxhdGlvbihTcGVjdWxhdGVkVHlwZSB2
YWx1ZSkKIHsKICAgICByZXR1cm4gaXNTdHJpbmdTcGVjdWxhdGlvbih2YWx1ZSkKKyAgICAgICAg
fHwgaXNEaXJlY3RBcmd1bWVudHNTcGVjdWxhdGlvbih2YWx1ZSkKKyAgICAgICAgfHwgaXNTY29w
ZWRBcmd1bWVudHNTcGVjdWxhdGlvbih2YWx1ZSkKICAgICAgICAgfHwgaXNBY3Rpb25hYmxlTXV0
YWJsZUFycmF5U3BlY3VsYXRpb24odmFsdWUpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAko
cmV2aXNpb24gMTgwNzA3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9C
eXRlY29kZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNiw3ICsxMTYsNyBAQCBQ
YXJzZXJFcnJvciBCeXRlY29kZUdlbmVyYXRvcjo6Z2VuZXJhdGUoCiAgICAgbV9jb2RlQmxvY2st
PnNocmlua1RvRml0KCk7CiAKICAgICBpZiAobV9jb2RlQmxvY2stPnN5bWJvbFRhYmxlKCkgJiYg
IW1fY29kZUJsb2NrLT52bSgpLT50eXBlUHJvZmlsZXIoKSkKLSAgICAgICAgbV9jb2RlQmxvY2st
PnNldFN5bWJvbFRhYmxlKG1fY29kZUJsb2NrLT5zeW1ib2xUYWJsZSgpLT5jbG9uZUNhcHR1cmVk
TmFtZXMoKm1fY29kZUJsb2NrLT52bSgpKSk7CisgICAgICAgIG1fY29kZUJsb2NrLT5zZXRTeW1i
b2xUYWJsZShtX2NvZGVCbG9jay0+c3ltYm9sVGFibGUoKS0+Y2xvbmVJZ25vcmluZ1N0YWNrKCpt
X2NvZGVCbG9jay0+dm0oKSkpOwogCiAgICAgaWYgKG1fZXhwcmVzc2lvblRvb0RlZXApCiAgICAg
ICAgIHJldHVybiBQYXJzZXJFcnJvcihQYXJzZXJFcnJvcjo6T3V0T2ZNZW1vcnkpOwpAQCAtMTI0
LDE3ICsxMjQsMjggQEAgUGFyc2VyRXJyb3IgQnl0ZWNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlKAog
fQogCiBib29sIEJ5dGVjb2RlR2VuZXJhdG9yOjphZGRWYXIoCi0gICAgY29uc3QgSWRlbnRpZmll
ciYgaWRlbnQsIENvbnN0YW50TW9kZSBjb25zdGFudE1vZGUsIFdhdGNoTW9kZSB3YXRjaE1vZGUs
IFJlZ2lzdGVySUQqJiByMCkKKyAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgQ29uc3RhbnRN
b2RlIGNvbnN0YW50TW9kZSwgVmFyS2luZCB2YXJLaW5kLCBXYXRjaE1vZGUgd2F0Y2hNb2RlLAor
ICAgIFJlZ2lzdGVySUQqJiByMCkKIHsKICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8c2l6ZV90Piht
X2NvZGVCbG9jay0+bV9udW1WYXJzKSA9PSBtX2NhbGxlZVJlZ2lzdGVycy5zaXplKCkpOwogICAg
IAogICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKHN5bWJvbFRhYmxlKCkubV9sb2NrKTsK
LSAgICBpbnQgaW5kZXggPSB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChtX2NhbGxlZVJlZ2lzdGVy
cy5zaXplKCkpLm9mZnNldCgpOwotICAgIFN5bWJvbFRhYmxlRW50cnkgbmV3RW50cnkoaW5kZXgs
IGNvbnN0YW50TW9kZSA9PSBJc0NvbnN0YW50ID8gUmVhZE9ubHkgOiAwKTsKKyAgICBWYXJPZmZz
ZXQgdmFyT2Zmc2V0OworICAgIGlmICh2YXJLaW5kID09IEhlYXBWYXJLaW5kKQorICAgICAgICB2
YXJPZmZzZXQgPSBWYXJPZmZzZXQoSGVhcE9mZnNldChtX251bUNhcHR1cmVkVmFyaWFibGVzKysp
KTsKKyAgICBlbHNlIHsKKyAgICAgICAgQVNTRVJUKHZhcktpbmQgPT0gU3RhY2tWYXJLaW5kKTsK
KyAgICAgICAgdmFyT2Zmc2V0ID0gVmFyT2Zmc2V0KHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKG1f
Y2FsbGVlUmVnaXN0ZXJzLnNpemUoKSkpOworICAgIH0KKyAgICBTeW1ib2xUYWJsZUVudHJ5IG5l
d0VudHJ5KHZhck9mZnNldCwgY29uc3RhbnRNb2RlID09IElzQ29uc3RhbnQgPyBSZWFkT25seSA6
IDApOwogICAgIFN5bWJvbFRhYmxlOjpNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBzeW1ib2xUYWJs
ZSgpLmFkZChsb2NrZXIsIGlkZW50LmltcGwoKSwgbmV3RW50cnkpOwogCiAgICAgaWYgKCFyZXN1
bHQuaXNOZXdFbnRyeSkgewotICAgICAgICByMCA9ICZyZWdpc3RlckZvcihyZXN1bHQuaXRlcmF0
b3ItPnZhbHVlLmdldEluZGV4KCkpOworICAgICAgICBSRUxFQVNFX0FTU0VSVCh2YXJLaW5kID09
IHJlc3VsdC5pdGVyYXRvci0+dmFsdWUudmFyT2Zmc2V0KCkua2luZCgpKTsKKyAgICAgICAgaWYg
KHZhcktpbmQgPT0gSGVhcFZhcktpbmQpCisgICAgICAgICAgICByMCA9IG51bGxwdHI7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIHIwID0gJnJlZ2lzdGVyRm9yKHJlc3VsdC5pdGVyYXRvci0+
dmFsdWUudmFyT2Zmc2V0KCkpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIApA
QCAtMTQ0LDcgKzE1NSwxMCBAQCBib29sIEJ5dGVjb2RlR2VuZXJhdG9yOjphZGRWYXIoCiAgICAg
ICAgIG1fd2F0Y2hhYmxlVmFyaWFibGVzLmFwcGVuZChpZGVudCk7CiAgICAgfQogICAgIAotICAg
IHIwID0gYWRkVmFyKCk7CisgICAgaWYgKHZhcktpbmQgPT0gSGVhcFZhcktpbmQpCisgICAgICAg
IHIwID0gbnVsbHB0cjsKKyAgICBlbHNlCisgICAgICAgIHIwID0gYWRkVmFyKCk7CiAgICAgCiAg
ICAgQVNTRVJUKHdhdGNoTW9kZSA9PSBOb3RXYXRjaGFibGUgfHwgc3RhdGljX2Nhc3Q8c2l6ZV90
PihtX2NvZGVCbG9jay0+bV9udW1WYXJzKSA9PSBtX3dhdGNoYWJsZVZhcmlhYmxlcy5zaXplKCkp
OwogICAgIApAQCAtMjMxLDcgKzI0NSw2IEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdl
bmVyYXRvcihWTSYKICAgICB9CiAgICAgUmVnaXN0ZXJJRCogbG9jYWxBcmd1bWVudHNSZWdpc3Rl
ciA9IG51bGxwdHI7CiAgICAgUmVnaXN0ZXJJRCogc2NyYXRjaCA9IGFkZFZhcigpOwotICAgIG1f
c3ltYm9sVGFibGUtPnNldENhcHR1cmVTdGFydCh2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChtX2Nv
ZGVCbG9jay0+bV9udW1WYXJzKS5vZmZzZXQoKSk7CiAKICAgICBpZiAoZnVuY3Rpb25Ob2RlLT51
c2VzQXJndW1lbnRzKCkgfHwgY29kZUJsb2NrLT51c2VzRXZhbCgpKSB7IC8vIE1heSByZWlmeSBh
cmd1bWVudHMgb2JqZWN0LgogICAgICAgICBSZWdpc3RlcklEKiB1bm1vZGlmaWVkQXJndW1lbnRz
UmVnaXN0ZXIgPSBhZGRWYXIoKTsgLy8gQW5vbnltb3VzLCBzbyBpdCBjYW4ndCBiZSBtb2RpZmll
ZCBieSB1c2VyIGNvZGUuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVy
L0J5dGVjb2RlR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCShyZXZpc2lvbiAxODA3MDcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgJKHdv
cmtpbmcgY29weSkKQEAgLTYxMywxNyArNjEzLDEyIEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAg
ICAgIC8vIEFkZHMgYSB2YXIgc2xvdCBhbmQgbWFwcyBpdCB0byB0aGUgbmFtZSBpZGVudCBpbiBz
eW1ib2xUYWJsZSgpLgogICAgICAgICBlbnVtIFdhdGNoTW9kZSB7IElzV2F0Y2hhYmxlLCBOb3RX
YXRjaGFibGUgfTsKLSAgICAgICAgUmVnaXN0ZXJJRCogYWRkVmFyKGNvbnN0IElkZW50aWZpZXIm
IGlkZW50LCBDb25zdGFudE1vZGUgY29uc3RhbnRNb2RlLCBXYXRjaE1vZGUgd2F0Y2hNb2RlKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBSZWdpc3RlcklEKiBsb2NhbDsKLSAgICAgICAgICAgIGFk
ZFZhcihpZGVudCwgY29uc3RhbnRNb2RlLCB3YXRjaE1vZGUsIGxvY2FsKTsKLSAgICAgICAgICAg
IHJldHVybiBsb2NhbDsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIERpdHRvLiBSZXR1cm5zIHRy
dWUgaWYgYSBuZXcgUmVnaXN0ZXJJRCB3YXMgYWRkZWQsIGZhbHNlIGlmIGEgcHJlLWV4aXN0aW5n
IFJlZ2lzdGVySUQgd2FzIHJlLXVzZWQuCi0gICAgICAgIGJvb2wgYWRkVmFyKGNvbnN0IElkZW50
aWZpZXImLCBDb25zdGFudE1vZGUsIFdhdGNoTW9kZSwgUmVnaXN0ZXJJRComKTsKKyAgICAgICAg
U2NvcGVPZmZzZXQgYWRkU2NvcGVkVmFyKGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBDb25zdGFu
dE1vZGUgY29uc3RhbnRNb2RlLCBXYXRjaE1vZGUgd2F0aE1vZGUpOworICAgICAgICAKKyAgICAg
ICAgLy8gQWRkcyBhIGxvY2FsIHZhciBzbG90LgorICAgICAgICBSZWdpc3RlcklEKiBhZGRWYXIo
Y29uc3QgSWRlbnRpZmllciYgaWRlbnQsIENvbnN0YW50TW9kZSBjb25zdGFudE1vZGUpOwogICAg
ICAgICAKLSAgICAgICAgLy8gQWRkcyBhbiBhbm9ueW1vdXMgdmFyIHNsb3QuIFRvIGdpdmUgdGhp
cyBzbG90IGEgbmFtZSwgYWRkIGl0IHRvIHN5bWJvbFRhYmxlKCkuCisgICAgICAgIC8vIEFkZHMg
YW4gYW5vbnltb3VzIGxvY2FsIHZhciBzbG90LiBUbyBnaXZlIHRoaXMgc2xvdCBhIG5hbWUsIGFk
ZCBpdCB0byBzeW1ib2xUYWJsZSgpLgogICAgICAgICBSZWdpc3RlcklEKiBhZGRWYXIoKQogICAg
ICAgICB7CiAgICAgICAgICAgICArK21fY29kZUJsb2NrLT5tX251bVZhcnM7CkBAIC03NzQsNiAr
NzY5LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFZlY3RvcjxJZGVudGlmaWVyLCAxNj4g
bV93YXRjaGFibGVWYXJpYWJsZXM7CiAgICAgICAgIFNlZ21lbnRlZFZlY3RvcjxSZWdpc3RlcklE
LCAzMj4gbV9jb25zdGFudFBvb2xSZWdpc3RlcnM7CiAgICAgICAgIFNlZ21lbnRlZFZlY3RvcjxS
ZWdpc3RlcklELCAzMj4gbV9jYWxsZWVSZWdpc3RlcnM7CisgICAgICAgIHVuc2lnbmVkIG1fbnVt
Q2FwdHVyZWRWYXJpYWJsZXM7CiAgICAgICAgIFNlZ21lbnRlZFZlY3RvcjxSZWdpc3RlcklELCAz
Mj4gbV9wYXJhbWV0ZXJzOwogICAgICAgICBTZWdtZW50ZWRWZWN0b3I8TGFiZWwsIDMyPiBtX2xh
YmVsczsKICAgICAgICAgTGFiZWxTY29wZVN0b3JlIG1fbGFiZWxTY29wZXM7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SGVhcC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RIZWFwLmgJKHJldmlzaW9uIDE4MDcw
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RIZWFwLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQ3LDcgKzQ3LDYgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcg
ewogICAgIG1hY3JvKFdvcmxkKSBcCiAgICAgbWFjcm8oU3RhY2spIFwKICAgICBtYWNybyhIZWFw
KSBcCi0gICAgbWFjcm8oQXJndW1lbnRzX3JlZ2lzdGVycykgXAogICAgIG1hY3JvKEJ1dHRlcmZs
eV9wdWJsaWNMZW5ndGgpIFwKICAgICBtYWNybyhCdXR0ZXJmbHlfdmVjdG9yTGVuZ3RoKSBcCiAg
ICAgbWFjcm8oR2V0dGVyU2V0dGVyX2dldHRlcikgXApAQCAtNjUsNyArNjQsOCBAQCBuYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAgbWFjcm8oSW5kZXhlZENvbnRpZ3VvdXNQcm9w
ZXJ0aWVzKSBcCiAgICAgbWFjcm8oSW5kZXhlZEFycmF5U3RvcmFnZVByb3BlcnRpZXMpIFwKICAg
ICBtYWNybyhBcnJheVN0b3JhZ2VQcm9wZXJ0aWVzKSBcCi0gICAgbWFjcm8oVmFyaWFibGVzKSBc
CisgICAgbWFjcm8oRGlyZWN0QXJndW1lbnRzUHJvcGVydGllcykgXAorICAgIG1hY3JvKFNjb3Bl
ZEFyZ3VtZW50c1Byb3BlcnRpZXMpIFwKICAgICBtYWNybyhUeXBlZEFycmF5UHJvcGVydGllcykg
XAogICAgIG1hY3JvKEhlYXBPYmplY3RDb3VudCkgLyogVXNlZCB0byByZWZsZWN0IHRoZSBmYWN0
IHRoYXQgc29tZSBhbGxvY2F0aW9ucyByZXZlYWwgb2JqZWN0IGlkZW50aXR5ICovXAogICAgIG1h
Y3JvKFJlZ0V4cFN0YXRlKSBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fi
c3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCShyZXZpc2lvbiAxODA3
MDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJ
bmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMzAsNyArMTAzMCw4IEBAIGJvb2wgQWJzdHJh
Y3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAgIH0gZWxzZQogICAgICAg
ICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KG1fZ3JhcGgsIG1fZ3JhcGgubV92bS5zdHJpbmdT
dHJ1Y3R1cmUuZ2V0KCkpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6
OkFyZ3VtZW50czoKKyAgICAgICAgY2FzZSBBcnJheTo6RGlyZWN0QXJndW1lbnRzOgorICAgICAg
ICBjYXNlIEFycmF5OjpTY29wZWRBcmd1bWVudHM6CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUp
Lm1ha2VIZWFwVG9wKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6
SW50MzI6CkBAIC0xNjE3LDggKzE2MTgsMTEgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFi
c3RyYWN0U3RhdGVUeQogICAgICAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6CiAgICAgICAg
IGNhc2UgQXJyYXk6OlNsb3dQdXRBcnJheVN0b3JhZ2U6CiAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBBcnJheTo6QXJndW1lbnRzOgotICAgICAgICAgICAgZmlsdGVyKG5vZGUtPmNo
aWxkMSgpLCBTcGVjQXJndW1lbnRzKTsKKyAgICAgICAgY2FzZSBBcnJheTo6RGlyZWN0QXJndW1l
bnRzOgorICAgICAgICAgICAgZmlsdGVyKG5vZGUtPmNoaWxkMSgpLCBTcGVjRGlyZWN0QXJndW1l
bnRzKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFycmF5OjpTY29wZWRBcmd1
bWVudHM6CisgICAgICAgICAgICBmaWx0ZXIobm9kZS0+Y2hpbGQxKCksIFNwZWNTY29wZWRBcmd1
bWVudHMpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkludDhBcnJh
eToKICAgICAgICAgICAgIGZpbHRlcihub2RlLT5jaGlsZDEoKSwgU3BlY0ludDhBcnJheSk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuY3BwCShyZXZpc2lv
biAxODA3MDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE5Nyw4ICsxOTcsMTUgQEAgQXJyYXlNb2RlIEFycmF5TW9kZTo6
cmVmaW5lKAogICAgICAgICBpZiAoaXNTdHJpbmdTcGVjdWxhdGlvbihiYXNlKSkKICAgICAgICAg
ICAgIHJldHVybiB3aXRoVHlwZShBcnJheTo6U3RyaW5nKTsKICAgICAgICAgCi0gICAgICAgIGlm
IChpc0FyZ3VtZW50c1NwZWN1bGF0aW9uKGJhc2UpKQotICAgICAgICAgICAgcmV0dXJuIHdpdGhU
eXBlKEFycmF5OjpBcmd1bWVudHMpOworICAgICAgICBpZiAoaXNEaXJlY3RBcmd1bWVudHNTcGVj
dWxhdGlvbihiYXNlKSB8fCBpc1Njb3BlZEFyZ3VtZW50c1NwZWN1bGF0aW9uKGJhc2UpKSB7Cisg
ICAgICAgICAgICAvLyBIYW5kbGUgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBhcyBnZW5lcmljIGFj
Y2Vzc2VzLgorICAgICAgICAgICAgaWYgKGdyYXBoLmhhc0V4aXRTaXRlKG5vZGUtPm9yaWdpbi5z
ZW1hbnRpYywgT3V0T2ZCb3VuZHMpIHx8ICFpc0luQm91bmRzKCkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIEFycmF5TW9kZShBcnJheTo6R2VuZXJpYyk7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIGlmIChpc0RpcmVjdEFyZ3VtZW50c1NwZWN1bGF0aW9uKGJhc2UpKQorICAgICAgICAgICAg
ICAgIHJldHVybiB3aXRoVHlwZShBcnJheTo6RGlyZWN0QXJndW1lbnRzKTsKKyAgICAgICAgICAg
IHJldHVybiB3aXRoVHlwZShBcnJheTo6U2NvcGVkQXJndW1lbnRzKTsKKyAgICAgICAgfQogICAg
ICAgICAKICAgICAgICAgQXJyYXlNb2RlIHJlc3VsdDsKICAgICAgICAgc3dpdGNoIChub2RlLT5v
cCgpKSB7CkBAIC0zOTYsOCArNDAzLDExIEBAIGJvb2wgQXJyYXlNb2RlOjphbHJlYWR5Q2hlY2tl
ZChHcmFwaCYgZ3IKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9IH0KICAgICAg
ICAgCi0gICAgY2FzZSBBcnJheTo6QXJndW1lbnRzOgotICAgICAgICByZXR1cm4gc3BlY3VsYXRp
b25DaGVja2VkKHZhbHVlLm1fdHlwZSwgU3BlY0FyZ3VtZW50cyk7CisgICAgY2FzZSBBcnJheTo6
RGlyZWN0QXJndW1lbnRzOgorICAgICAgICByZXR1cm4gc3BlY3VsYXRpb25DaGVja2VkKHZhbHVl
Lm1fdHlwZSwgU3BlY0RpcmVjdEFyZ3VtZW50cyk7CisgICAgICAgIAorICAgIGNhc2UgQXJyYXk6
OlNjb3BlZEFyZ3VtZW50czoKKyAgICAgICAgcmV0dXJuIHNwZWN1bGF0aW9uQ2hlY2tlZCh2YWx1
ZS5tX3R5cGUsIFNwZWNTY29wZWRBcmd1bWVudHMpOwogICAgICAgICAKICAgICBjYXNlIEFycmF5
OjpJbnQ4QXJyYXk6CiAgICAgICAgIHJldHVybiBzcGVjdWxhdGlvbkNoZWNrZWQodmFsdWUubV90
eXBlLCBTcGVjSW50OEFycmF5KTsKQEAgLTQ2MSw4ICs0NzEsMTAgQEAgY29uc3QgY2hhciogYXJy
YXlUeXBlVG9TdHJpbmcoQXJyYXk6OlR5cAogICAgICAgICByZXR1cm4gIkFycmF5U3RvcmFnZSI7
CiAgICAgY2FzZSBBcnJheTo6U2xvd1B1dEFycmF5U3RvcmFnZToKICAgICAgICAgcmV0dXJuICJT
bG93UHV0QXJyYXlTdG9yYWdlIjsKLSAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6Ci0gICAgICAg
IHJldHVybiAiQXJndW1lbnRzIjsKKyAgICBjYXNlIEFycmF5OjpEaXJlY3RBcmd1bWVudHM6Cisg
ICAgICAgIHJldHVybiAiRGlyZWN0QXJndW1lbnRzIjsKKyAgICBjYXNlIEFycmF5OjpTY29wZWRB
cmd1bWVudHM6CisgICAgICAgIHJldHVybiAiU2NvcGVkQXJndW1lbnRzIjsKICAgICBjYXNlIEFy
cmF5OjpJbnQ4QXJyYXk6CiAgICAgICAgIHJldHVybiAiSW50OEFycmF5IjsKICAgICBjYXNlIEFy
cmF5OjpJbnQxNkFycmF5OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJh
eU1vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5
TW9kZS5oCShyZXZpc2lvbiAxODA3MDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0FycmF5TW9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMiwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY1LDcgKzY1LDkgQEAgZW51
bSBUeXBlIHsKICAgICBBcnJheVN0b3JhZ2UsCiAgICAgU2xvd1B1dEFycmF5U3RvcmFnZSwKICAg
ICAKLSAgICBBcmd1bWVudHMsCisgICAgRGlyZWN0QXJndW1lbnRzLAorICAgIFNjb3BlZEFyZ3Vt
ZW50cywKKyAgICAKICAgICBJbnQ4QXJyYXksCiAgICAgSW50MTZBcnJheSwKICAgICBJbnQzMkFy
cmF5LApAQCAtMjk0LDcgKzI5Niw4IEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBBcnJheTo6VW5w
cm9maWxlZDoKICAgICAgICAgY2FzZSBBcnJheTo6Rm9yY2VFeGl0OgogICAgICAgICBjYXNlIEFy
cmF5OjpHZW5lcmljOgotICAgICAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6CisgICAgICAgIGNh
c2UgQXJyYXk6OkRpcmVjdEFyZ3VtZW50czoKKyAgICAgICAgY2FzZSBBcnJheTo6U2NvcGVkQXJn
dW1lbnRzOgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBkZWZhdWx0OgogICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0zMjAsMTEgKzMyMyw5IEBAIHB1YmxpYzoKICAgICB7
CiAgICAgICAgIHN3aXRjaCAodHlwZSgpKSB7CiAgICAgICAgIGNhc2UgQXJyYXk6OlN0cmluZzoK
KyAgICAgICAgY2FzZSBBcnJheTo6RGlyZWN0QXJndW1lbnRzOgorICAgICAgICBjYXNlIEFycmF5
OjpTY29wZWRBcmd1bWVudHM6CiAgICAgICAgICAgICByZXR1cm4gQXJyYXlNb2RlKEFycmF5OjpH
ZW5lcmljKTsKLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgICAgICBjYXNlIEFycmF5OjpBcmd1
bWVudHM6Ci0gICAgICAgICAgICByZXR1cm4gQXJyYXlNb2RlKEFycmF5OjpHZW5lcmljKTsKLSNl
bmRpZgogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICAg
ICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkocmV2
aXNpb24gMTgwNzA3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXpl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2NiwxMCArNDY2LDE0IEBAIHZvaWQgY2xvYmJlcml6ZShH
cmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICAgICAgICAgIGRlZihQdXJlVmFsdWUobm9kZSwg
bW9kZS5hc1dvcmQoKSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgCi0gICAg
ICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czoKLSAgICAgICAgICAgIHJlYWQoQXJndW1lbnRzX3Jl
Z2lzdGVycyk7Ci0gICAgICAgICAgICByZWFkKFZhcmlhYmxlcyk7Ci0gICAgICAgICAgICBkZWYo
SGVhcExvY2F0aW9uKEluZGV4ZWRQcm9wZXJ0eUxvYywgVmFyaWFibGVzLCBub2RlLT5jaGlsZDEo
KSwgbm9kZS0+Y2hpbGQyKCkpLCBub2RlKTsKKyAgICAgICAgY2FzZSBBcnJheTo6RGlyZWN0QXJn
dW1lbnRzOgorICAgICAgICAgICAgcmVhZChEaXJlY3RBcmd1bWVudHNQcm9wZXJ0aWVzKTsKKyAg
ICAgICAgICAgIGRlZihIZWFwTG9jYXRpb24oSW5kZXhlZFByb3BlcnR5TG9jLCBEaXJlY3RBcmd1
bWVudHNQcm9wZXJ0aWVzLCBub2RlLT5jaGlsZDEoKSwgbm9kZS0+Y2hpbGQyKCkpLCBub2RlKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEFycmF5OjpT
Y29wZWRBcmd1bWVudHM6CisgICAgICAgICAgICByZWFkKFNjb3BlZEFyZ3VtZW50c1Byb3BlcnRp
ZXMpOworICAgICAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihJbmRleGVkUHJvcGVydHlMb2MsIFNj
b3BlZEFyZ3VtZW50c1Byb3BlcnRpZXMsIG5vZGUtPmNoaWxkMSgpLCBub2RlLT5jaGlsZDIoKSks
IG5vZGUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgCiAgICAgICAgIGNhc2Ug
QXJyYXk6OkludDMyOgpAQCAtNTYwLDEzICs1NjQsNiBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgm
IGdyYXBoLCBOb2RlKiBub2RlCiAgICAgICAgICAgICB3cml0ZShIZWFwKTsKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgICAgIAotICAgICAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6Ci0g
ICAgICAgICAgICByZWFkKEFyZ3VtZW50c19yZWdpc3RlcnMpOwotICAgICAgICAgICAgcmVhZChN
aXNjRmllbGRzKTsKLSAgICAgICAgICAgIHdyaXRlKFZhcmlhYmxlcyk7Ci0gICAgICAgICAgICBk
ZWYoSGVhcExvY2F0aW9uKEluZGV4ZWRQcm9wZXJ0eUxvYywgVmFyaWFibGVzLCBiYXNlLCBpbmRl
eCksIHZhbHVlKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIAogICAgICAgICBj
YXNlIEFycmF5OjpJbnQzMjoKICAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5pc091
dE9mQm91bmRzKCkpIHsKICAgICAgICAgICAgICAgICByZWFkKFdvcmxkKTsKQEAgLTc2MSw3ICs3
NTgsOCBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgICAg
ICAgICBkZWYoUHVyZVZhbHVlKG5vZGUsIG1vZGUuYXNXb3JkKCkpKTsKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgICAgIAotICAgICAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6CisgICAg
ICAgIGNhc2UgQXJyYXk6OkRpcmVjdEFyZ3VtZW50czoKKyAgICAgICAgY2FzZSBBcnJheTo6U2Nv
cGVkQXJndW1lbnRzOgogICAgICAgICAgICAgcmVhZChNaXNjRmllbGRzKTsKICAgICAgICAgICAg
IGRlZihIZWFwTG9jYXRpb24oQXJyYXlMZW5ndGhMb2MsIE1pc2NGaWVsZHMsIG5vZGUtPmNoaWxk
MSgpKSwgbm9kZSk7CiAgICAgICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHJldmlzaW9uIDE4MDcwNykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTY4Miw3ICs2ODIsNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgY2FzZSBBcnJheTo6Q29udGln
dW91czoKICAgICAgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZToKICAgICAgICAgICAg
IGNhc2UgQXJyYXk6OlNsb3dQdXRBcnJheVN0b3JhZ2U6Ci0gICAgICAgICAgICBjYXNlIEFycmF5
OjpBcmd1bWVudHM6CiAgICAgICAgICAgICAgICAgZml4RWRnZTxLbm93bkNlbGxVc2U+KGNoaWxk
MSk7CiAgICAgICAgICAgICAgICAgZml4RWRnZTxJbnQzMlVzZT4oY2hpbGQyKTsKICAgICAgICAg
ICAgICAgICBpbnNlcnRTdG9yZUJhcnJpZXIobV9pbmRleEluQmxvY2ssIGNoaWxkMSwgY2hpbGQz
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVDY0LmNwcAkocmV2aXNpb24gMTgwNzA3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjU5OCw4ICsyNTk4
LDExIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAg
Y2FzZSBBcnJheTo6U3RyaW5nOgogICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25TdHJpbmco
bm9kZSk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6QXJndW1lbnRz
OgotICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25Bcmd1bWVudHMobm9kZSk7CisgICAgICAg
IGNhc2UgQXJyYXk6OkRpcmVjdEFyZ3VtZW50czoKKyAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZh
bE9uRGlyZWN0QXJndW1lbnRzKG5vZGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgQXJyYXk6OlNjb3BlZEFyZ3VtZW50czoKKyAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9u
U2NvcGVkQXJndW1lbnRzKG5vZGUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1
bHQ6IHsKICAgICAgICAgICAgIFR5cGVkQXJyYXlUeXBlIHR5cGUgPSBub2RlLT5hcnJheU1vZGUo
KS50eXBlZEFycmF5VHlwZSgpOwpAQCAtMjgyOSw0NyArMjgzMiw2IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CiAgICAgICAgICAgICAKLSAgICAgICAgY2FzZSBBcnJheTo6QXJndW1lbnRzOiB7Ci0gICAgICAg
ICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBjaGlsZDMpOwotICAgICAgICAgICAgR1BS
VGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7Ci0gICAgICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRj
aDIodGhpcyk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIEdQUlJlZyB2YWx1ZVJlZyA9IHZh
bHVlLmdwcigpOwotICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hSZWcgPSBzY3JhdGNoLmdwcigp
OwotICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2gyUmVnID0gc2NyYXRjaDIuZ3ByKCk7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKLSAgICAgICAgICAgICAg
ICByZXR1cm47Ci0KLSAgICAgICAgICAgIC8vIFR3byByZWFsbHkgbGFtZSBjaGVja3MuCi0gICAg
ICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAgICAgICAgICAgIFVuY291bnRhYmxlLCBK
U1ZhbHVlU291cmNlKCksIDAsCi0gICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoMzIoCi0gICAg
ICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVn
LAotICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBB
cmd1bWVudHM6Om9mZnNldE9mTnVtQXJndW1lbnRzKCkpKSk7Ci0gICAgICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKAotICAgICAgICAgICAgICAgIFVuY291bnRhYmxlLCBKU1ZhbHVlU291cmNlKCks
IDAsCi0gICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdFB0cigKLSAgICAgICAgICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sCi0gICAgICAgICAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKAotICAgICAgICAgICAgICAgICAgICAgICAgYmFzZVJlZywgQXJn
dW1lbnRzOjpvZmZzZXRPZlNsb3dBcmd1bWVudERhdGEoKSkpKTsKLQotICAgICAgICAgICAgbV9q
aXQubW92ZShwcm9wZXJ0eVJlZywgc2NyYXRjaDJSZWcpOwotICAgICAgICAgICAgbV9qaXQuc2ln
bkV4dGVuZDMyVG9QdHIoc2NyYXRjaDJSZWcsIHNjcmF0Y2gyUmVnKTsKLSAgICAgICAgICAgIG1f
aml0LmxvYWRQdHIoCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFz
ZVJlZywgQXJndW1lbnRzOjpvZmZzZXRPZlJlZ2lzdGVycygpKSwKLSAgICAgICAgICAgICAgICBz
Y3JhdGNoUmVnKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbV9qaXQuc3RvcmU2NCgKLSAg
ICAgICAgICAgICAgICB2YWx1ZVJlZywKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
QmFzZUluZGV4KAotICAgICAgICAgICAgICAgICAgICBzY3JhdGNoUmVnLCBzY3JhdGNoMlJlZywg
TWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsCi0gICAgICAgICAgICAgICAgICAgIENhbGxGcmFt
ZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpICsgc2l6ZW9mKFJlZ2lz
dGVyKSkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBub1Jlc3VsdChub2RlKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgICAgICAKICAgICAgICAgZGVmYXVsdDog
ewogICAgICAgICAgICAgVHlwZWRBcnJheVR5cGUgdHlwZSA9IGFycmF5TW9kZS50eXBlZEFycmF5
VHlwZSgpOwogICAgICAgICAgICAgaWYgKGlzSW50KHR5cGUpKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDE4MDcw
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC03MjIsOSArNzIyLDEyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNo
ZWNrQXJyYXkoTm9kZSogbm8KICAgICAgICAgbm9SZXN1bHQobV9jdXJyZW50Tm9kZSk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9Ci0gICAgY2FzZSBBcnJheTo6QXJndW1lbnRzOgotICAgICAgICBz
cGVjdWxhdGVDZWxsVHlwZVdpdGhvdXRUeXBlRmlsdGVyaW5nKG5vZGUtPmNoaWxkMSgpLCBiYXNl
UmVnLCBBcmd1bWVudHNUeXBlKTsKLQorICAgIGNhc2UgQXJyYXk6OkRpcmVjdEFyZ3VtZW50czoK
KyAgICAgICAgc3BlY3VsYXRlQ2VsbFR5cGVXaXRob3V0VHlwZUZpbHRlcmluZyhub2RlLT5jaGls
ZDEoKSwgYmFzZVJlZywgRGlyZWN0QXJndW1lbnRzVHlwZSk7CisgICAgICAgIG5vUmVzdWx0KG1f
Y3VycmVudE5vZGUpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBcnJheTo6U2NvcGVkQXJn
dW1lbnRzOgorICAgICAgICBzcGVjdWxhdGVDZWxsVHlwZVdpdGhvdXRUeXBlRmlsdGVyaW5nKG5v
ZGUtPmNoaWxkMSgpLCBiYXNlUmVnLCBTY29wZWRBcmd1bWVudHNUeXBlKTsKICAgICAgICAgbm9S
ZXN1bHQobV9jdXJyZW50Tm9kZSk7CiAgICAgICAgIHJldHVybjsKICAgICBkZWZhdWx0OgpAQCAt
NDA4OCw3ICs0MDkxLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldFR5cGVkQXJy
YQogICAgIGludDMyUmVzdWx0KHZlY3RvckdQUiwgbm9kZSk7CiB9CiAKLXZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uQXJndW1lbnRzKE5vZGUqIG5vZGUpCit2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkRpcmVjdEFyZ3VtZW50cyhOb2RlKiBub2RlKQog
ewogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwog
ICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBub2RlLT5jaGls
ZDIoKSk7CkBAIC00MTAzLDgwICs0MTA2LDg5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVHZXRCeVZhbE9uQXIKICAgICBHUFJSZWcgcmVzdWx0UmVnID0gcmVzdWx0LmdwcigpOwogI2lm
IFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgR1BSUmVnIHJlc3VsdFRhZ1JlZyA9IHJlc3VsdFRhZy5n
cHIoKTsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVzdWx0VGFn
UmVnLCByZXN1bHRSZWcpOworI2Vsc2UKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNW
YWx1ZVJlZ3MocmVzdWx0UmVnKTsKICNlbmRpZgogICAgIEdQUlJlZyBzY3JhdGNoUmVnID0gc2Ny
YXRjaC5ncHIoKTsKICAgICAKICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCiAgICAgICAgIHJldHVy
bjsKLSAgCi0gICAgQVNTRVJUKEFycmF5TW9kZShBcnJheTo6QXJndW1lbnRzKS5hbHJlYWR5Q2hl
Y2tlZChtX2ppdC5ncmFwaCgpLCBub2RlLCBtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkp
KSk7CiAgICAgCi0gICAgLy8gVHdvIHJlYWxseSBsYW1lIGNoZWNrcy4KLSAgICBzcGVjdWxhdGlv
bkNoZWNrKAotICAgICAgICBFeG90aWNPYmplY3RNb2RlLCBKU1ZhbHVlU291cmNlKCksIDAsCi0g
ICAgICAgIG1faml0LmJyYW5jaDMyKAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFib3Zl
T3JFcXVhbCwgcHJvcGVydHlSZWcsCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhiYXNlUmVnLCBBcmd1bWVudHM6Om9mZnNldE9mTnVtQXJndW1lbnRzKCkpKSk7CisgICAgQVNT
RVJUKEFycmF5TW9kZShBcnJheTo6RGlyZWN0QXJndW1lbnRzKS5hbHJlYWR5Q2hlY2tlZChtX2pp
dC5ncmFwaCgpLCBub2RlLCBtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpKSk7CisgICAg
CiAgICAgc3BlY3VsYXRpb25DaGVjaygKICAgICAgICAgRXhvdGljT2JqZWN0TW9kZSwgSlNWYWx1
ZVNvdXJjZSgpLCAwLAogICAgICAgICBtX2ppdC5icmFuY2hUZXN0UHRyKAogICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcygKLSAgICAgICAgICAgICAgICBiYXNlUmVnLCBBcmd1bWVudHM6Om9mZnNldE9mU2xvd0Fy
Z3VtZW50RGF0YSgpKSkpOwotICAgIAotICAgIG1faml0Lm1vdmUocHJvcGVydHlSZWcsIHJlc3Vs
dFJlZyk7Ci0gICAgbV9qaXQuc2lnbkV4dGVuZDMyVG9QdHIocmVzdWx0UmVnLCByZXN1bHRSZWcp
OwotICAgIG1faml0LmxvYWRQdHIoCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJh
c2VSZWcsIEFyZ3VtZW50czo6b2Zmc2V0T2ZSZWdpc3RlcnMoKSksCi0gICAgICAgIHNjcmF0Y2hS
ZWcpOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgRGlyZWN0
QXJndW1lbnRzOjpvZmZzZXRPZk92ZXJyaWRlcygpKSkpOworICAgIHNwZWN1bGF0aW9uQ2hlY2so
CisgICAgICAgIEV4b3RpY09iamVjdE1vZGUsIEpTVmFsdWVTb3VyY2UoKSwgMCwKKyAgICAgICAg
bV9qaXQuYnJhbmNoMzIoCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFs
LCBwcm9wZXJ0eVJlZywKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VS
ZWcsIERpcmVjdEFyZ3VtZW50czo6b2Zmc2V0T2ZMZW5ndGgoKSkpKTsKICAgICAKLSNpZiBVU0Uo
SlNWQUxVRTMyXzY0KQotICAgIG1faml0LmxvYWQzMigKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OkJhc2VJbmRleCgKLSAgICAgICAgICAgIHNjcmF0Y2hSZWcsIHJlc3VsdFJlZywgTWFjcm9Bc3Nl
bWJsZXI6OlRpbWVzRWlnaHQsCi0gICAgICAgICAgICBDYWxsRnJhbWU6OnRoaXNBcmd1bWVudE9m
ZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSArIHNpemVvZihSZWdpc3RlcikgKwotICAgICAgICAg
ICAgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLAotICAgICAgICByZXN1
bHRUYWdSZWcpOwotICAgIG1faml0LmxvYWQzMigKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkJh
c2VJbmRleCgKLSAgICAgICAgICAgIHNjcmF0Y2hSZWcsIHJlc3VsdFJlZywgTWFjcm9Bc3NlbWJs
ZXI6OlRpbWVzRWlnaHQsCi0gICAgICAgICAgICBDYWxsRnJhbWU6OnRoaXNBcmd1bWVudE9mZnNl
dCgpICogc2l6ZW9mKFJlZ2lzdGVyKSArIHNpemVvZihSZWdpc3RlcikgKwotICAgICAgICAgICAg
T0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwKLSAgICAgICAgcmVz
dWx0UmVnKTsKLSAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFRhZ1JlZywgcmVzdWx0UmVnLCBub2Rl
KTsKLSNlbHNlCi0gICAgbV9qaXQubG9hZDY0KAorICAgIG1faml0LmxvYWRWYWx1ZSgKICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleCgKLSAgICAgICAgICAgIHNjcmF0Y2hSZWcsIHJl
c3VsdFJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsCi0gICAgICAgICAgICBDYWxsRnJh
bWU6OnRoaXNBcmd1bWVudE9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSArIHNpemVvZihSZWdp
c3RlcikpLAotICAgICAgICByZXN1bHRSZWcpOwotICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVn
LCBub2RlKTsKLSNlbmRpZgorICAgICAgICAgICAgYmFzZVJlZywgcHJvcGVydHlSZWcsIFRpbWVz
RWlnaHQsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZU9mZnNldCgpKSwKKyAgICAgICAgcmVzdWx0
UmVncyk7CisgICAgCisgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBub2RlKTsKIH0KIAot
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEFyZ3VtZW50c0xlbmd0aChOb2RlKiBub2Rl
KQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25TY29wZWRBcmd1bWVudHMo
Tm9kZSogbm9kZSkKIHsKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUt
PmNoaWxkMSgpKTsKLSAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIFJldXNlLCBiYXNlKTsK
KyAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbm9kZS0+Y2hp
bGQyKCkpOworICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CisjaWYgVVNFKEpTVkFMVUUz
Ml82NCkKKyAgICBHUFJUZW1wb3JhcnkgcmVzdWx0VGFnKHRoaXMpOworI2VuZGlmCisgICAgR1BS
VGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CisgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2gyKHRoaXMp
OwogICAgIAogICAgIEdQUlJlZyBiYXNlUmVnID0gYmFzZS5ncHIoKTsKKyAgICBHUFJSZWcgcHJv
cGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKICAgICBHUFJSZWcgcmVzdWx0UmVnID0gcmVzdWx0
LmdwcigpOworI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgR1BSUmVnIHJlc3VsdFRhZ1JlZyA9
IHJlc3VsdFRhZy5ncHIoKTsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJl
Z3MocmVzdWx0VGFnUmVnLCByZXN1bHRSZWcpOworI2Vsc2UKKyAgICBKU1ZhbHVlUmVncyByZXN1
bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVzdWx0UmVnKTsKKyNlbmRpZgorICAgIEdQUlJlZyBzY3Jh
dGNoUmVnID0gc2NyYXRjaC5ncHIoKTsKKyAgICBHUFJSZWcgc2NyYXRjaDJSZWcgPSBzY3JhdGNo
Mi5ncHIoKTsKICAgICAKICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCiAgICAgICAgIHJldHVybjsK
ICAgICAKLSAgICBBU1NFUlQoQXJyYXlNb2RlKEFycmF5OjpBcmd1bWVudHMpLmFscmVhZHlDaGVj
a2VkKG1faml0LmdyYXBoKCksIG5vZGUsIG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSkp
KTsKKyAgICBBU1NFUlQoQXJyYXlNb2RlKEFycmF5OjpTY29wZWRBcmd1bWVudHMpLmFscmVhZHlD
aGVja2VkKG1faml0LmdyYXBoKCksIG5vZGUsIG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEo
KSkpKTsKKyAgICAKKyAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJh
c2VSZWcsIFNjb3BlZEFyZ3VtZW50czo6b2Zmc2V0T2ZUYWJsZSgpKSwgc2NyYXRjaFJlZyk7Cisg
ICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBTY29wZWRB
cmd1bWVudHM6Om9mZnNldE9mU2NvcGUoKSksIHNjcmF0Y2gyUmVnKTsKICAgICAKICAgICBzcGVj
dWxhdGlvbkNoZWNrKAogICAgICAgICBFeG90aWNPYmplY3RNb2RlLCBKU1ZhbHVlU291cmNlKCks
IDAsCi0gICAgICAgIG1faml0LmJyYW5jaFRlc3Q4KAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6Ok5vblplcm8sCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVn
LCBBcmd1bWVudHM6Om9mZnNldE9mT3ZlcnJvZGVMZW5ndGgoKSkpKTsKKyAgICAgICAgbV9qaXQu
YnJhbmNoMzIoCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9w
ZXJ0eVJlZywKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKFNjb3BlZEFyZ3Vt
ZW50c1RhYmxlOjpvZmZzZXRPZkxlbmd0aCgpKSkpOworICAgIAorICAgIG1faml0LmxvYWRQdHIo
CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hSZWcsIFNjb3BlZEFyZ3Vt
ZW50c1RhYmxlOjpvZmZzZXRPZkFyZ3VtZW50cygpKSwKKyAgICAgICAgc2NyYXRjaFJlZyk7Cisg
ICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc2NyYXRjaFJlZywgcHJv
cGVydHlSZWcsIFRpbWVzRm91ciksIHNjcmF0Y2hSZWcpOworICAgIAorICAgIHNwZWN1bGF0aW9u
Q2hlY2soCisgICAgICAgIEV4b3RpY09iamVjdE1vZGUsIEpTVmFsdWVTb3VyY2UoKSwgMCwKKyAg
ICAgICAgbV9qaXQuYnJhbmNoMzIoCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWws
IHNjcmF0Y2hSZWcsIFRydXN0ZWRJbW0zMihTY29wZU9mZnNldDo6aW52YWxpZE9mZnNldCkpKTsK
KyAgICAKKyAgICBtX2ppdC5sb2FkVmFsdWUoCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpCYXNl
SW5kZXgoCisgICAgICAgICAgICBiYXNlMlJlZywgcHJvcGVydHlSZWcsIFRpbWVzRWlnaHQsIEpT
RW52aXJvbm1lbnRSZWNvcmQ6Om9mZnNldE9mVmFyaWFibGVzKCkpLAorICAgICAgICByZXN1bHRS
ZWdzKTsKICAgICAKLSAgICBtX2ppdC5sb2FkMzIoCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKGJhc2VSZWcsIEFyZ3VtZW50czo6b2Zmc2V0T2ZOdW1Bcmd1bWVudHMoKSksCi0gICAg
ICAgIHJlc3VsdFJlZyk7Ci0gICAgaW50MzJSZXN1bHQocmVzdWx0UmVnLCBub2RlKTsKKyAgICBq
c1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG5vZGUpOwogfQogCiB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlR2V0U2NvcGUoTm9kZSogbm9kZSkKQEAgLTQyMzIsOCArNDI0NCw1NiBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QXJyYXlMZW5nCiAgICAgICAgIGludDMyUmVzdWx0
KHJlc3VsdEdQUiwgbm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBjYXNlIEFycmF5
OjpBcmd1bWVudHM6IHsKLSAgICAgICAgY29tcGlsZUdldEFyZ3VtZW50c0xlbmd0aChub2RlKTsK
KyAgICBjYXNlIEFycmF5OjpEaXJlY3RBcmd1bWVudHM6IHsKKyAgICAgICAgU3BlY3VsYXRlQ2Vs
bE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIEdQUlRlbXBvcmFy
eSByZXN1bHQodGhpcywgUmV1c2UsIGJhc2UpOworICAgICAgICAKKyAgICAgICAgR1BSUmVnIGJh
c2VSZWcgPSBiYXNlLmdwcigpOworICAgICAgICBHUFJSZWcgcmVzdWx0UmVnID0gcmVzdWx0Lmdw
cigpOworICAgICAgICAKKyAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQorICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAKKyAgICAgICAgQVNTRVJUKEFycmF5TW9kZShBcnJheTo6RGlyZWN0
QXJndW1lbnRzKS5hbHJlYWR5Q2hlY2tlZChtX2ppdC5ncmFwaCgpLCBub2RlLCBtX3N0YXRlLmZv
ck5vZGUobm9kZS0+Y2hpbGQxKCkpKSk7CisgICAgICAgIAorICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKAorICAgICAgICAgICAgRXhvdGljT2JqZWN0TW9kZSwgSlNWYWx1ZVNvdXJjZSgpLCAwLAor
ICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdFB0cigKKyAgICAgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6Tm9uWmVybywKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhiYXNlUmVnLCBEaXJlY3RBcmd1bWVudHM6Om9mZnNldE9mT3ZlcnJpZGVzKCkpKSk7CisgICAg
ICAgIAorICAgICAgICBtX2ppdC5sb2FkMzIoCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhiYXNlUmVnLCBEaXJlY3RBcmd1bWVudHM6Om9mZnNldE9mTGVuZ3RoKCkpLCByZXN1
bHRSZWcpOworICAgICAgICAKKyAgICAgICAgaW50MzJSZXN1bHQocmVzdWx0UmVnLCBub2RlKTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgQXJyYXk6OlNjb3BlZEFyZ3VtZW50czog
eworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgp
KTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBSZXVzZSwgYmFzZSk7CisgICAg
ICAgIAorICAgICAgICBHUFJSZWcgYmFzZVJlZyA9IGJhc2UuZ3ByKCk7CisgICAgICAgIEdQUlJl
ZyByZXN1bHRSZWcgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIAorICAgICAgICBpZiAoIW1fY29t
cGlsZU9rYXkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBBU1NFUlQo
QXJyYXlNb2RlKEFycmF5OjpTY29wZWRBcmd1bWVudHMpLmFscmVhZHlDaGVja2VkKG1faml0Lmdy
YXBoKCksIG5vZGUsIG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSkpKTsKKyAgICAgICAg
CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCisgICAgICAgICAgICBFeG90aWNPYmplY3RNb2Rl
LCBKU1ZhbHVlU291cmNlKCksIDAsCisgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0OCgKKyAg
ICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywKKyAgICAgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBTY29wZWRBcmd1bWVudHM6Om9mZnNldE9m
T3ZlcnJvZGVUaGluZ3MoKSkpKTsKKyAgICAgICAgCisgICAgICAgIG1faml0LmxvYWRQdHIoCisg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBTY29wZWRBcmd1bWVu
dHM6Om9mZnNldE9mVGFibGUoKSksIHJlc3VsdFJlZyk7CisgICAgICAgIAorICAgICAgICBtX2pp
dC5sb2FkMzIoCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRSZWcs
IFNjb3BlZEFyZ3VtZW50c1RhYmxlOjpvZmZzZXRPZkxlbmd0aCgpKSwKKyAgICAgICAgICAgIHJl
c3VsdFJlZyk7CisgICAgICAgIAorICAgICAgICBpbnQzMlJlc3VsdChyZXN1bHRSZWcsIG5vZGUp
OwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgZGVmYXVsdDogewpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24gMTgwNzA3
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMTUyLDggKzIxNTIsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBjb21waWxl
R2V0QnlWYWxPblN0cmluZyhOb2RlKik7CiAgICAgdm9pZCBjb21waWxlRnJvbUNoYXJDb2RlKE5v
ZGUqKTsgCiAKLSAgICB2b2lkIGNvbXBpbGVHZXRCeVZhbE9uQXJndW1lbnRzKE5vZGUqKTsKLSAg
ICB2b2lkIGNvbXBpbGVHZXRBcmd1bWVudHNMZW5ndGgoTm9kZSopOworICAgIHZvaWQgY29tcGls
ZUdldEJ5VmFsT25EaXJlY3RBcmd1bWVudHMoTm9kZSopOworICAgIHZvaWQgY29tcGlsZUdldEJ5
VmFsT25TY29wZWRBcmd1bWVudHMoTm9kZSopOworICAgIAogICAgIHZvaWQgY29tcGlsZUdldFNj
b3BlKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVTa2lwU2NvcGUoTm9kZSopOwogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9z
aXRvcnkuaAkocmV2aXNpb24gMTgwNzA3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDYsNiArNDYs
OCBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAgICAgbWFjcm8oQnV0dGVyZmx5
X3B1YmxpY0xlbmd0aCwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSBcCiAgICAg
bWFjcm8oQnV0dGVyZmx5X3ZlY3Rvckxlbmd0aCwgQnV0dGVyZmx5OjpvZmZzZXRPZlZlY3Rvckxl
bmd0aCgpKSBcCiAgICAgbWFjcm8oQ2FsbEZyYW1lX2NhbGxlckZyYW1lLCBDYWxsRnJhbWU6OmNh
bGxlckZyYW1lT2Zmc2V0KCkpIFwKKyAgICBtYWNybyhEaXJlY3RBcmd1bWVudHNfbGVuZ3RoLCBE
aXJlY3RBcmd1bWVudHM6Om9mZnNldE9mTGVuZ3RoKCkpIFwKKyAgICBtYWNybyhEaXJlY3RBcmd1
bWVudHNfb3ZlcnJpZGVzLCBEaXJlY3RBcmd1bWVudHM6Om9mZnNldE9mT3ZlcnJpZGVzKCkpIFwK
ICAgICBtYWNybyhHZXR0ZXJTZXR0ZXJfZ2V0dGVyLCBHZXR0ZXJTZXR0ZXI6Om9mZnNldE9mR2V0
dGVyKCkpIFwKICAgICBtYWNybyhHZXR0ZXJTZXR0ZXJfc2V0dGVyLCBHZXR0ZXJTZXR0ZXI6Om9m
ZnNldE9mU2V0dGVyKCkpIFwKICAgICBtYWNybyhKU0FycmF5QnVmZmVyVmlld19sZW5ndGgsIEpT
QXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZkxlbmd0aCgpKSBcCkBAIC03Miw2ICs3NCwxMSBAQCBu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAgICAgbWFjcm8oSlNXcmFwcGVyT2JqZWN0
X2ludGVybmFsVmFsdWUsIEpTV3JhcHBlck9iamVjdDo6aW50ZXJuYWxWYWx1ZU9mZnNldCgpKSBc
CiAgICAgbWFjcm8oTWFya2VkQWxsb2NhdG9yX2ZyZWVMaXN0SGVhZCwgTWFya2VkQWxsb2NhdG9y
OjpvZmZzZXRPZkZyZWVMaXN0SGVhZCgpKSBcCiAgICAgbWFjcm8oTWFya2VkQmxvY2tfbWFya0Jp
dHMsIE1hcmtlZEJsb2NrOjpvZmZzZXRPZk1hcmtzKCkpIFwKKyAgICBtYWNybyhTY29wZWRBcmd1
bWVudHNfb3ZlcnJvZGVUaGluZ3MsIFNjb3BlZEFyZ3VtZW50czo6b2Zmc2V0T2ZPdmVycm9kZVRo
aW5ncygpKSkgXAorICAgIG1hY3JvKFNjb3BlZEFyZ3VtZW50c19zY29wZSwgU2NvcGVkQXJndW1l
bnRzOjpvZmZldE9mU2NvcGUoKSkpIFwKKyAgICBtYWNybyhTY29wZWRBcmd1bWVudHNfdGFibGUs
IFNjb3BlZEFyZ3VtZW50czo6b2ZmZXRPZlRhYmxlKCkpKSBcCisgICAgbWFjcm8oU2NvcGVkQXJn
dW1lbnRzVGFibGVfYXJndW1lbnRzLCBTY29wZWRBcmd1bWVudHNUYWJsZTo6b2ZmZXRPZkFyZ3Vt
ZW50cygpKSkgXAorICAgIG1hY3JvKFNjb3BlZEFyZ3VtZW50c1RhYmxlX2xlbmd0aCwgU2NvcGVk
QXJndW1lbnRzVGFibGU6Om9mZmV0T2ZMZW5ndGgoKSkpIFwKICAgICBtYWNybyhTdHJpbmdJbXBs
X2RhdGEsIFN0cmluZ0ltcGw6OmRhdGFPZmZzZXQoKSkgXAogICAgIG1hY3JvKFN0cmluZ0ltcGxf
aGFzaEFuZEZsYWdzLCBTdHJpbmdJbXBsOjpmbGFnc09mZnNldCgpKSBcCiAgICAgbWFjcm8oU3Ry
dWN0dXJlX2NsYXNzSW5mbywgU3RydWN0dXJlOjpjbGFzc0luZm9PZmZzZXQoKSkgXApAQCAtODAs
NiArODcsOCBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAgICAgbWFjcm8oU3Ry
dWN0dXJlX3N0cnVjdHVyZUlELCBTdHJ1Y3R1cmU6OnN0cnVjdHVyZUlET2Zmc2V0KCkpCiAKICNk
ZWZpbmUgRk9SX0VBQ0hfSU5ERVhFRF9BQlNUUkFDVF9IRUFQKG1hY3JvKSBcCisgICAgbWFjcm8o
RGlyZWN0QXJndW1lbnRzX3N0b3JhZ2UsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZU9mZnNldCgp
LCBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSBcCisgICAgbWFjcm8oSlNFbnZpcm9ubWVudFJlY29y
ZF92YXJpYWJsZSwgSlNFbnZpcm9ubWVudFJlY29yZDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSwgc2l6
ZW9mKEVuY29kZWRKU1ZhbHVlKSkgXAogICAgIG1hY3JvKEpTUm9wZVN0cmluZ19maWJlcnMsIEpT
Um9wZVN0cmluZzo6b2Zmc2V0T2ZGaWJlcnMoKSwgc2l6ZW9mKFdyaXRlQmFycmllcjxKU1N0cmlu
Zz4pKSBcCiAgICAgbWFjcm8oY2hhcmFjdGVyczgsIDAsIHNpemVvZihMQ2hhcikpIFwKICAgICBt
YWNybyhjaGFyYWN0ZXJzMTYsIDAsIHNpemVvZihVQ2hhcikpIFwKQEAgLTg3LDYgKzk2LDcgQEAg
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewogICAgIG1hY3JvKGluZGV4ZWREb3VibGVQ
cm9wZXJ0aWVzLCAwLCBzaXplb2YoZG91YmxlKSkgXAogICAgIG1hY3JvKGluZGV4ZWRDb250aWd1
b3VzUHJvcGVydGllcywgMCwgc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkgXAogICAgIG1hY3JvKGlu
ZGV4ZWRBcnJheVN0b3JhZ2VQcm9wZXJ0aWVzLCAwLCBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSBc
CisgICAgbWFjcm8oc2NvcGVkQXJndWVtbnRzVGFibGVBcmd1bWVudHMsIDAsIHNpemVvZihpbnQz
Ml90KSkgXAogICAgIG1hY3JvKHNpbmdsZUNoYXJhY3RlclN0cmluZ3MsIDAsIHNpemVvZihKU1N0
cmluZyopKSBcCiAgICAgbWFjcm8odmFyaWFibGVzLCAwLCBzaXplb2YoUmVnaXN0ZXIpKQogICAg
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNw
cAkocmV2aXNpb24gMTgwNzA3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBh
YmlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDksNiArMjA5LDggQEAgaW5saW5lIENh
cGFiaWxpdHlMZXZlbCBjYW5Db21waWxlKE5vZGUqIAogICAgICAgICBjYXNlIEFycmF5OjpJbnQz
MjoKICAgICAgICAgY2FzZSBBcnJheTo6RG91YmxlOgogICAgICAgICBjYXNlIEFycmF5OjpDb250
aWd1b3VzOgorICAgICAgICBjYXNlIEFycmF5OjpEaXJlY3RBcmd1bWVudHM6CisgICAgICAgIGNh
c2UgQXJyYXk6OlNjb3BlZEFyZ3VtZW50czoKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBk
ZWZhdWx0OgogICAgICAgICAgICAgaWYgKGlzVHlwZWRWaWV3KG5vZGUtPmFycmF5TW9kZSgpLnR5
cGVkQXJyYXlUeXBlKCkpKQpAQCAtMjIyLDYgKzIyNCw4IEBAIGlubGluZSBDYXBhYmlsaXR5TGV2
ZWwgY2FuQ29tcGlsZShOb2RlKiAKICAgICAgICAgY2FzZSBBcnJheTo6RG91YmxlOgogICAgICAg
ICBjYXNlIEFycmF5OjpDb250aWd1b3VzOgogICAgICAgICBjYXNlIEFycmF5OjpTdHJpbmc6Cisg
ICAgICAgIGNhc2UgQXJyYXk6OkRpcmVjdEFyZ3VtZW50czoKKyAgICAgICAgY2FzZSBBcnJheTo6
U2NvcGVkQXJndW1lbnRzOgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAg
ICAgICAgICAgICBpZiAoaXNUeXBlZFZpZXcobm9kZS0+YXJyYXlNb2RlKCkudHlwZWRBcnJheVR5
cGUoKSkpCkBAIC0yNDgsNiArMjUyLDggQEAgaW5saW5lIENhcGFiaWxpdHlMZXZlbCBjYW5Db21w
aWxlKE5vZGUqIAogICAgICAgICBjYXNlIEFycmF5OjpJbnQzMjoKICAgICAgICAgY2FzZSBBcnJh
eTo6RG91YmxlOgogICAgICAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOgorICAgICAgICBjYXNl
IEFycmF5OjpEaXJlY3RBcmd1bWVudHM6CisgICAgICAgIGNhc2UgQXJyYXk6OlNjb3BlZEFyZ3Vt
ZW50czoKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAg
aWYgKGlzVHlwZWRWaWV3KG5vZGUtPmFycmF5TW9kZSgpLnR5cGVkQXJyYXlUeXBlKCkpKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJ
KHJldmlzaW9uIDE4MDcwNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJE
RkdUb0xMVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTk1LDYgKzIxOTUsMjUgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAgICAgCisgICAgICAg
IGNhc2UgQXJyYXk6OkRpcmVjdEFyZ3VtZW50czogeworICAgICAgICAgICAgTFZhbHVlIGFyZ3Vt
ZW50cyA9IGxvd0NlbGwobV9vdXQtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZSgK
KyAgICAgICAgICAgICAgICBFeG90aWNPYmplY3RNb2RlLCBub1ZhbHVlKCksIG51bGxwdHIsCisg
ICAgICAgICAgICAgICAgbV9vdXQubm90TnVsbChtX291dC5sb2FkUHRyKGFyZ3VtZW50cywgbV9o
ZWFwcy5EaXJlY3RBcmd1bWVudHNfb3ZlcnJpZGVzKSkpOworICAgICAgICAgICAgc2V0SW50MzIo
bV9vdXQubG9hZDMyTm9uTmVnYXRpdmUoYXJndW1lbnRzLCBtX2hlYXBzLkRpcmVjdEFyZ3VtZW50
c19sZW5ndGgpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAgICAg
CisgICAgICAgIGNhc2UgQXJyYXk6OlNjb3BlZEFyZ3VtZW50czogeworICAgICAgICAgICAgTFZh
bHVlIGFyZ3VtZW50cyA9IGxvd0NlbGwobV9vdXQtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIHNw
ZWN1bGF0ZSgKKyAgICAgICAgICAgICAgICBFeG90aWNPYmplY3RNb2RlLCBub1ZhbHVlKCksIG51
bGxwdHIsCisgICAgICAgICAgICAgICAgbV9vdXQubm90WmVybzgobV9vdXQubG9hZFB0cihhcmd1
bWVudHMsIG1faGVhcHMuU2NvcGVkQXJndW1lbnRzX292ZXJyb2RlVGhpbmdzKSkpOworICAgICAg
ICAgICAgTFZhbHVlIHRhYmxlID0gbV9vdXQubG9hZFB0cihhcmd1bWVudHMsIG1faGVhcHMuU2Nv
cGVkQXJndW1lbnRzX3RhYmxlKTsKKyAgICAgICAgICAgIHNldEludDMyKG1fb3V0LmxvYWQzMk5v
bk5lZ2F0aXZlKHRhYmxlLCBtX2hlYXBzLlNjb3BlZEFyZ3VtZW50c1RhYmxlX2xlbmd0aCkpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgICAgICAKICAgICAgICAgZGVm
YXVsdDoKICAgICAgICAgICAgIGlmIChpc1R5cGVkVmlldyhtX25vZGUtPmFycmF5TW9kZSgpLnR5
cGVkQXJyYXlUeXBlKCkpKSB7CiAgICAgICAgICAgICAgICAgc2V0SW50MzIoCkBAIC0yMzEyLDYg
KzIzMzEsNDkgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAg
ICAgICAgICAgCisgICAgICAgIGNhc2UgQXJyYXk6OkRpcmVjdEFyZ3VtZW50czogeworICAgICAg
ICAgICAgTFZhbHVlIGJhc2UgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAg
ICAgTFZhbHVlIGluZGV4ID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDIoKSk7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIHNwZWN1bGF0ZSgKKyAgICAgICAgICAgICAgICBFeG90aWNPYmplY3RN
b2RlLCBub1ZhbHVlKCksIG51bGxwdHIsCisgICAgICAgICAgICAgICAgbV9vdXQubm9uTnVsbCht
X291dC5sb2FkUHRyKGJhc2UsIG1faGVhcHMuRGlyZWN0QXJndW1lbnRzX292ZXJyaWRlcykpKTsK
KyAgICAgICAgICAgIHNwZWN1bGF0ZSgKKyAgICAgICAgICAgICAgICBFeG90aWNPYmplY3RNb2Rl
LCBub1ZhbHVlKCksIG51bGxwdHIsCisgICAgICAgICAgICAgICAgbV9vdXQuYWJvdmVPckVxdWFs
KAorICAgICAgICAgICAgICAgICAgICBpbmRleCwKKyAgICAgICAgICAgICAgICAgICAgbV9vdXQu
bG9hZDMyTm9uTmVnYXRpdmUoYmFzZSwgbV9oZWFwcy5EaXJlY3RBcmd1bWVudHNfbGVuZ3RoKSkp
OworICAgICAgICAgICAgCisgICAgICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LmxvYWQ2NChiYXNl
SW5kZXgobV9oZWFwcy5EaXJlY3RBcmd1bWVudHNfc3RvcmFnZSwgYmFzZSwgaW5kZXgpKSk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNl
IEFycmF5OjpTY29wZWRBcmd1bWVudHM6IHsKKyAgICAgICAgICAgIExWYWx1ZSBiYXNlID0gbG93
Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIExWYWx1ZSBpbmRleCA9IGxvd0lu
dDMyKG1fbm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBMVmFsdWUg
dGFibGUgPSBtX291dC5sb2FkUHRyKGJhc2UsIG1faGVhcHMuU2NvcGVkQXJndW1lbnRzX3RhYmxl
KTsKKyAgICAgICAgICAgIExWYWx1ZSBzY29wZSA9IG1fb3V0LmxvYWRQdHIoYmFzZSwgbV9oZWFw
cy5TY29wZWRBcmd1bWVudHNfc2NvcGUpOworICAgICAgICAgICAgCisgICAgICAgICAgICBzcGVj
dWxhdGUoCisgICAgICAgICAgICAgICAgRXhvdGljT2JqZWN0TW9kZSwgbm9WYWx1ZSgpLCBudWxs
cHRyLAorICAgICAgICAgICAgICAgIG1fb3V0LmFib3ZlT3JFcXVhbCgKKyAgICAgICAgICAgICAg
ICAgICAgaW5kZXgsCisgICAgICAgICAgICAgICAgICAgIG1fb3V0LmxvYWQzMk5vbk5lZ2F0aXZl
KGJhc2UsIG1faGVhcHMuU2NvcGVkQXJndW1lbnRzVGFibGVfbGVuZ3RoKSkpOworICAgICAgICAg
ICAgCisgICAgICAgICAgICBMVmFsdWUgYXJndW1lbnRzID0gbV9vdXQubG9hZFB0cihiYXNlLCBt
X2hlYXBzLlNjb3BlZEFyZ3VtZW50c1RhYmxlX2FyZ3VtZW50cyk7CisgICAgICAgICAgICBMVmFs
dWUgc2NvcGVPZmZzZXQgPSBtX291dC5sb2FkMzIoCisgICAgICAgICAgICAgICAgYmFzZUluZGV4
KG1faGVhcHMuc2NvcGVkQXJndW1lbnRzVGFibGVBcmd1bWVudHMsIGFyZ3VtZW50cywgaW5kZXgp
KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgc3BlY3VsYXRlKAorICAgICAgICAgICAgICAg
IEV4b3RpY09iamVjdE1vZGUsIG5vVmFsdWUoKSwgbnVsbHB0ciwKKyAgICAgICAgICAgICAgICBt
X291dC5lcXVhbChzY29wZU9mZnNldCwgbV9vdXQuY29uc3RJbnQzMihTY29wZU9mZnNldDo6aW52
YWxpZE9mZnNldCkpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgc2V0SlNWYWx1ZShtX291
dC5sb2FkNjQoYmFzZUluZGV4KAorICAgICAgICAgICAgICAgIG1faGVhcHMuSlNFbnZpcm9ubWVu
dFJlY29yZF92YXJpYWJsZXMsIGJhc2UsIHNjb3BlT2Zmc2V0KSkpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcnJheTo6R2VuZXJp
YzogewogICAgICAgICAgICAgc2V0SlNWYWx1ZSh2bUNhbGwoCiAgICAgICAgICAgICAgICAgbV9v
dXQub3BlcmF0aW9uKG9wZXJhdGlvbkdldEJ5VmFsKSwgbV9jYWxsRnJhbWUsCkBAIC01MDcwLDEx
ICs1MTMyLDExIEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBjYWxsOwogICAgIH0KICAgICAK
LSAgICBUeXBlZFBvaW50ZXIgYmFzZUluZGV4KEluZGV4ZWRBYnN0cmFjdEhlYXAmIGhlYXAsIExW
YWx1ZSBzdG9yYWdlLCBMVmFsdWUgaW5kZXgsIEVkZ2UgZWRnZSkKKyAgICBUeXBlZFBvaW50ZXIg
YmFzZUluZGV4KEluZGV4ZWRBYnN0cmFjdEhlYXAmIGhlYXAsIExWYWx1ZSBzdG9yYWdlLCBMVmFs
dWUgaW5kZXgsIEVkZ2UgZWRnZSwgcHRyZGlmZl90IG9mZnNldCA9IDApCiAgICAgewogICAgICAg
ICByZXR1cm4gbV9vdXQuYmFzZUluZGV4KAogICAgICAgICAgICAgaGVhcCwgc3RvcmFnZSwgbV9v
dXQuemVyb0V4dChpbmRleCwgbV9vdXQuaW50UHRyKSwKLSAgICAgICAgICAgIG1fc3RhdGUuZm9y
Tm9kZShlZGdlKS5tX3ZhbHVlKTsKKyAgICAgICAgICAgIG1fc3RhdGUuZm9yTm9kZShlZGdlKS5t
X3ZhbHVlLCBvZmZzZXQpOwogICAgIH0KICAgICAKICAgICB2b2lkIGNvbXBhcmUoCkBAIC02MzQx
LDYgKzY0MDMsMTYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBt
X25vZGUsICJDb3JydXB0IGFycmF5IGNsYXNzIik7CiAgICAgICAgIH0KICAgICAgICAgICAgIAor
ICAgICAgICBjYXNlIEFycmF5OjpEaXJlY3RBcmd1bWVudHM6CisgICAgICAgICAgICByZXR1cm4g
bV9vdXQuZXF1YWwoCisgICAgICAgICAgICAgICAgbV9vdXQubG9hZDgoY2VsbCwgbV9oZWFwcy5K
U0NlbGxfdHlwZUluZm9UeXBlKSwKKyAgICAgICAgICAgICAgICBtX291dC5jb25zdEludDgoRGly
ZWN0QXJndW1lbnRzVHlwZSkpOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXJyYXk6OlNj
b3BlZEFyZ3VtZW50czoKKyAgICAgICAgICAgIHJldHVybiBtX291dC5lcXVhbCgKKyAgICAgICAg
ICAgICAgICBtX291dC5sb2FkOChjZWxsLCBtX2hlYXBzLkpTQ2VsbF90eXBlSW5mb1R5cGUpLAor
ICAgICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50OChTY29wZWRBcmd1bWVudHNUeXBlKSk7Cisg
ICAgICAgICAgICAKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIHJldHVybiBtX291dC5l
cXVhbCgKICAgICAgICAgICAgICAgICBtX291dC5sb2FkOChjZWxsLCBtX2hlYXBzLkpTQ2VsbF90
eXBlSW5mb1R5cGUpLCAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcHlUb2tl
bi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcHlUb2tlbi5o
CShyZXZpc2lvbiAxODA3MDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3B5VG9r
ZW4uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMzIsNyArMzIsNyBAQCBlbnVtIENvcHlUb2tlbiB7CiAgICAg
QnV0dGVyZmx5Q29weVRva2VuLAogICAgIFR5cGVkQXJyYXlWZWN0b3JDb3B5VG9rZW4sCiAgICAg
TWFwQmFja2luZ1N0b3JlQ29weVRva2VuLAotICAgIEFyZ3VtZW50c1Nsb3dBcmd1bWVudERhdGFD
b3B5VG9rZW4KKyAgICBEaXJlY3RBcmd1bWVudHNPdmVycmlkZXNDb3B5VG9rZW4KIH07CiAKIH0g
Ly8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJs
eUhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2Vt
Ymx5SGVscGVycy5oCShyZXZpc2lvbiAxODA3MDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0Fzc2VtYmx5SGVscGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTMsNiArMTEzLDI2IEBA
IHB1YmxpYzoKICNlbmRpZgogICAgIH0KICAgICAKKyAgICB2b2lkIGxvYWRWYWx1ZShCYXNlSW5k
ZXggYWRkcmVzcywgSlNWYWx1ZVJlZ3MgcmVncykKKyAgICB7CisjaWYgVVNFKEpTVkFMVUU2NCkK
KyAgICAgICAgbG9hZDY0KGFkZHJlc3MsIHJlZ3MuZ3ByKCkpOworI2Vsc2UKKyAgICAgICAgaWYg
KGFkZHJlc3MuYmFzZSA9PSByZWdzLnBheWxvYWRHUFIoKSB8fCBhZGRyZXNzLmluZGV4ID09IHJl
Z3MucGF5bG9hZEdQUigpKSB7CisgICAgICAgICAgICAvLyBXZSBhY3R1YWxseSBjb3VsZCBoYW5k
bGUgdGhlIGNhc2Ugd2hlcmUgdGhlIHJlZ2lzdGVycyBhcmUgYWxpYXNlZCB0byBib3RoCisgICAg
ICAgICAgICAvLyB0YWcgYW5kIHBheWxvYWQsIGJ1dCB3ZSBkb24ndCBmb3Igbm93LgorICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoYWRkcmVzcy5iYXNlICE9IHJlZ3MudGFnR1BSKCkpOworICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQoYWRkcmVzcy5pbmRleCAhPSByZWdzLnRhZ0dQUigpKTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgbG9hZDMyKGFkZHJlc3Mud2l0aE9mZnNldChUYWdP
ZmZzZXQpLCByZWdzLnRhZ0dQUigpKTsKKyAgICAgICAgICAgIGxvYWQzMihhZGRyZXNzLndpdGhP
ZmZzZXQoUGF5bG9hZE9mZnNldCksIHJlZ3MucGF5bG9hZEdQUigpKTsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIGxvYWQzMihhZGRyZXNzLndpdGhPZmZzZXQoUGF5bG9hZE9mZnNldCks
IHJlZ3MucGF5bG9hZEdQUigpKTsKKyAgICAgICAgICAgIGxvYWQzMihhZGRyZXNzLndpdGhPZmZz
ZXQoVGFnT2Zmc2V0KSwgcmVnLnRhZ0dQUigpKTsKKyAgICAgICAgfQorI2VuZGlmCisgICAgfQor
ICAgIAogICAgIHZvaWQgbW92ZVRydXN0ZWRWYWx1ZShKU1ZhbHVlIHZhbHVlLCBKU1ZhbHVlUmVn
cyByZWdzKQogICAgIHsKICNpZiBVU0UoSlNWQUxVRTY0KQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVC5oCShyZXZpc2lvbiAxODA3MDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNDYsNiArMzQ2LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIEp1bXBMaXN0IGVtaXREb3VibGVHZXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJs
ZUp1bXAmIGJhZFR5cGUpOwogICAgICAgICBKdW1wTGlzdCBlbWl0Q29udGlndW91c0dldEJ5VmFs
KEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgSW5kZXhpbmdUeXBlIGV4cGVj
dGVkU2hhcGUgPSBDb250aWd1b3VzU2hhcGUpOwogICAgICAgICBKdW1wTGlzdCBlbWl0QXJyYXlT
dG9yYWdlR2V0QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlKTsKKyAg
ICAgICAgSnVtcExpc3QgZW1pdERpcmVjdEFyZ3VtZW50c0dldEJ5VmFsKEluc3RydWN0aW9uKiwg
UGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSk7CisgICAgICAgIEp1bXBMaXN0IGVtaXRTY29wZWRBcmd1
bWVudHNHZXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUpOwogICAg
ICAgICBKdW1wTGlzdCBlbWl0SW50VHlwZWRBcnJheUdldEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0
Y2hhYmxlSnVtcCYgYmFkVHlwZSwgVHlwZWRBcnJheVR5cGUpOwogICAgICAgICBKdW1wTGlzdCBl
bWl0RmxvYXRUeXBlZEFycmF5R2V0QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBi
YWRUeXBlLCBUeXBlZEFycmF5VHlwZSk7CiAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAxODA3MDcpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01MzAsNyArNTMwLDcgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsKEV4
ZQogICAgICAgICBpZiAoaGFzT3B0aW1pemFibGVJbmRleGluZyhvYmplY3QtPnN0cnVjdHVyZSh2
bSkpKSB7CiAgICAgICAgICAgICAvLyBBdHRlbXB0IHRvIG9wdGltaXplLgogICAgICAgICAgICAg
SklUQXJyYXlNb2RlIGFycmF5TW9kZSA9IGppdEFycmF5TW9kZUZvclN0cnVjdHVyZShvYmplY3Qt
PnN0cnVjdHVyZSh2bSkpOwotICAgICAgICAgICAgaWYgKGFycmF5TW9kZSAhPSBieVZhbEluZm8u
YXJyYXlNb2RlKSB7CisgICAgICAgICAgICBpZiAoaml0QXJyYXlNb2RlUGVybWl0c1B1dChhcnJh
eU1vZGUpICYmIGFycmF5TW9kZSAhPSBieVZhbEluZm8uYXJyYXlNb2RlKSB7CiAgICAgICAgICAg
ICAgICAgSklUOjpjb21waWxlUHV0QnlWYWwoJnZtLCBleGVjLT5jb2RlQmxvY2soKSwgJmJ5VmFs
SW5mbywgUmV0dXJuQWRkcmVzc1B0cihPVVJfUkVUVVJOX0FERFJFU1MpLCBhcnJheU1vZGUpOwog
ICAgICAgICAgICAgICAgIGRpZE9wdGltaXplID0gdHJ1ZTsKICAgICAgICAgICAgIH0KQEAgLTU3
NSw3ICs1NzUsNyBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRGlyZWN0UHV0QnlWCiAg
ICAgICAgIGlmIChoYXNPcHRpbWl6YWJsZUluZGV4aW5nKG9iamVjdC0+c3RydWN0dXJlKHZtKSkp
IHsKICAgICAgICAgICAgIC8vIEF0dGVtcHQgdG8gb3B0aW1pemUuCiAgICAgICAgICAgICBKSVRB
cnJheU1vZGUgYXJyYXlNb2RlID0gaml0QXJyYXlNb2RlRm9yU3RydWN0dXJlKG9iamVjdC0+c3Ry
dWN0dXJlKHZtKSk7Ci0gICAgICAgICAgICBpZiAoYXJyYXlNb2RlICE9IGJ5VmFsSW5mby5hcnJh
eU1vZGUpIHsKKyAgICAgICAgICAgIGlmIChqaXRBcnJheU1vZGVQZXJtaXRzUHV0KGFycmF5TW9k
ZSkgJiYgYXJyYXlNb2RlICE9IGJ5VmFsSW5mby5hcnJheU1vZGUpIHsKICAgICAgICAgICAgICAg
ICBKSVQ6OmNvbXBpbGVEaXJlY3RQdXRCeVZhbCgmdm0sIGNhbGxGcmFtZS0+Y29kZUJsb2NrKCks
ICZieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIoT1VSX1JFVFVSTl9BRERSRVNTKSwgYXJyYXlN
b2RlKTsKICAgICAgICAgICAgICAgICBkaWRPcHRpbWl6ZSA9IHRydWU7CiAgICAgICAgICAgICB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNz
LmNwcAkocmV2aXNpb24gMTgwNzA3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQ
cm9wZXJ0eUFjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk1MSw2ICs5NTEsMTIgQEAgdm9p
ZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlWYWwoQnlWYWxJbgogICAgIGNhc2UgSklUQXJyYXlT
dG9yYWdlOgogICAgICAgICBzbG93Q2FzZXMgPSBlbWl0QXJyYXlTdG9yYWdlR2V0QnlWYWwoY3Vy
cmVudEluc3RydWN0aW9uLCBiYWRUeXBlKTsKICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBKSVRE
aXJlY3RBcmd1bWVudHM6CisgICAgICAgIHNsb3dDYXNlcyA9IGVtaXREaXJlY3RBcmd1bWVudHNH
ZXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEpJVFNjb3BlZEFyZ3VtZW50czoKKyAgICAgICAgc2xvd0Nhc2VzID0gZW1pdERpcmVj
dEFyZ3VtZW50c0dldEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSk7CisgICAgICAg
IGJyZWFrOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIFR5cGVkQXJyYXlUeXBlIHR5cGUgPSB0eXBl
ZEFycmF5VHlwZUZvckpJVEFycmF5TW9kZShhcnJheU1vZGUpOwogICAgICAgICBpZiAoaXNJbnQo
dHlwZSkpCkBAIC0xMDQ2LDYgKzEwNTIsNjMgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0
QnlWYWwoQnlWYWxJbgogICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rQ2FsbGVyVG9GdW5jdGlvbihy
ZXR1cm5BZGRyZXNzLCBGdW5jdGlvblB0cihpc0RpcmVjdCA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5
VmFsR2VuZXJpYyA6IG9wZXJhdGlvblB1dEJ5VmFsR2VuZXJpYykpOwogfQogCitKSVQ6Okp1bXBM
aXN0IEpJVDo6ZW1pdERpcmVjdEFyZ3VtZW50c0dldEJ5VmFsKEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUpCit7CisgICAgSnVtcExpc3Qgc2xv
d0Nhc2VzOworICAgIAorI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgUmVnaXN0ZXJJRCBiYXNlID0g
cmVnVDA7CisgICAgUmVnaXN0ZXJJRCBwcm9wZXJ0eSA9IHJlZ1QxOworICAgIEpTVmFsdWVSZWdz
IHJlc3VsdCA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICBSZWdpc3RlcklEIHNjcmF0Y2ggPSBy
ZWdUMzsKKyNlbHNlCisgICAgUmVnaXN0ZXJJRCBiYXNlID0gcmVnVDA7CisgICAgUmVnaXN0ZXJJ
RCBwcm9wZXJ0eSA9IHJlZ1QyOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdCA9IEpTVmFsdWVSZWdz
KHJlZ1QxLCByZWdUMCk7CisgICAgUmVnaXN0ZXJJRCBzY3JhdGNoID0gcmVnVDM7CisjZW5kaWYK
KworICAgIGxvYWQ4KEFkZHJlc3MoYmFzZSwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSks
IHNjcmF0Y2gpOworICAgIGJhZFR5cGUgPSBwYXRjaGFibGVCcmFuY2gzMihOb3RFcXVhbCwgc2Ny
YXRjaCwgVHJ1c3RlZEltbTMyKERpcmVjdEFyZ3VtZW50c1R5cGUpKTsKKyAgICAKKyAgICBzbG93
Q2FzZXMuYXBwZW5kKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcHJvcGVydHksIEFkZHJlc3MoYmFz
ZSwgRGlyZWN0QXJndW1lbnRzOjpvZmZzZXRPZkxlbmd0aCgpKSkpOworICAgIHNsb3dDYXNlcy5h
cHBlbmQoYnJhbmNoVGVzdFB0cihOb25aZXJvLCBBZGRyZXNzKGJhc2UsIERpcmVjdEFyZ3VtZW50
czo6b2Zmc2V0T2ZPdmVycmlkZXMoKSkpKTsKKyAgICAKKyAgICB6ZXJvRXh0ZW5kMzJUb1B0cihw
cm9wZXJ0eSwgc2NyYXRjaCk7CisgICAgbG9hZFZhbHVlKEJhc2VJbmRleChiYXNlLCBzY3JhdGNo
LCBUaW1lc0VpZ2h0LCBEaXJlY3RBcmd1bWVudHM6OnN0b3JhZ2VPZmZzZXQoKSksIHJlc3VsdCk7
Cit9CisKK0pJVDo6SnVtcExpc3QgSklUOjplbWl0U2NvcGVkQXJndW1lbnRzR2V0QnlWYWwoSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSkKK3sK
KyAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBS
ZWdpc3RlcklEIGJhc2UgPSByZWdUMDsKKyAgICBSZWdpc3RlcklEIHByb3BlcnR5ID0gcmVnVDE7
CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0ID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgIFJlZ2lz
dGVySUQgc2NyYXRjaCA9IHJlZ1QzOworICAgIFJlZ2lzdGVySUQgc2NyYXRjaDIgPSByZWdUNDsK
KyNlbHNlCisgICAgUmVnaXN0ZXJJRCBiYXNlID0gcmVnVDA7CisgICAgUmVnaXN0ZXJJRCBwcm9w
ZXJ0eSA9IHJlZ1QyOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdCA9IEpTVmFsdWVSZWdzKHJlZ1Qx
LCByZWdUMCk7CisgICAgUmVnaXN0ZXJJRCBzY3JhdGNoID0gcmVnVDM7CisgICAgUmVnaXN0ZXJJ
RCBzY2FydGNoMiA9IHJlZ1Q0OworI2VuZGlmCisKKyAgICBsb2FkOChBZGRyZXNzKGJhc2UsIEpT
Q2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBzY3JhdGNoKTsKKyAgICBiYWRUeXBlID0gcGF0
Y2hhYmxlQnJhbmNoMzIoTm90RXF1YWwsIHNjcmF0Y2gsIFRydXN0ZWRJbW0zMihEaXJlY3RBcmd1
bWVudHNUeXBlKSk7CisgICAgCisgICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIFNjb3BlZEFyZ3Vt
ZW50czo6b2Zmc2V0T2ZUYWJsZSgpKSwgc2NyYXRjaCk7CisgICAgbG9hZFB0cihBZGRyZXNzKGJh
c2UsIFNjb3BlZEFyZ3VtZW50czo6b2Zmc2V0T2ZTY29wZSgpKSwgc2NyYXRjaDIpOworICAgIHNs
b3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCBwcm9wZXJ0eSwgQWRkcmVzcyhz
Y3JhdGNoLCBTY29wZWRBcmd1bWVudHNUYWJsZTo6b2Zmc2V0T2ZMZW5ndGgoKSkpKTsKKyAgICBs
b2FkUHRyKEFkZHJlc3Moc2NyYXRjaCwgU2NvcGVkQXJndW1lbnRzVGFibGU6Om9mZnNldE9mQXJn
dW1lbnRzKCkpLCBzY3JhdGNoKTsKKyAgICBsb2FkMzIoQmFzZUluZGV4KHNjcmF0Y2gsIHByb3Bl
cnR5LCBUaW1lc0ZvdXIpLCBzY3JhdGNoKTsKKyAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMy
KEVxdWFsLCBzY3JhdGNoLCBUcnVzdGVkSW1tMzIoU2NvcGVPZmZzZXQ6OmludmFsaWRPZmZzZXQp
KSk7CisgICAgCisgICAgbG9hZFZhbHVlKEJhc2VJbmRleChzY3JhdGNoMiwgc2NyYXRjaCwgVGlt
ZXNFaWdodCwgSlNFbnZpcm9ubWVudFJlY29yZDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSksIHJlc3Vs
dCk7Cit9CisKIEpJVDo6SnVtcExpc3QgSklUOjplbWl0SW50VHlwZWRBcnJheUdldEJ5VmFsKElu
c3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgVHlwZWRBcnJheVR5cGUgdHlwZSkK
IHsKICAgICBBU1NFUlQoaXNJbnQodHlwZSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQXJndW1lbnRzTW9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0FyZ3VtZW50c01vZGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0FyZ3VtZW50c01vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDM5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgQXJndW1lbnRzTW9kZV9oCisjZGVmaW5lIEFyZ3VtZW50c01vZGVfaAorCituYW1l
c3BhY2UgSlNDIHsKKworZW51bSBBcmd1bWVudHNNb2RlIHsKKyAgICBDbG9uZWRBcmd1bWVudHND
cmVhdGlvbk1vZGUsCisgICAgRmFrZUFyZ3VtZW50VmFsdWVzQ3JlYXRpb25Nb2RlCit9OworCit9
IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEFyZ3VtZW50c01vZGVfaAorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYXB0dXJlZEFyZ3VtZW50c09mZnNldC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FwdHVyZWRBcmd1
bWVudHNPZmZzZXQuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQ2FwdHVyZWRBcmd1bWVudHNPZmZzZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNhcHR1cmVkQXJndW1lbnRzT2Zmc2V0Lmgi
CisKK25hbWVzcGFjZSBKU0MgeworCit2b2lkIENhcHR1cmVkQXJndW1lbnRzT2Zmc2V0OjpkdW1w
KFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgaWYgKCEqdGhpcykgeworICAgICAgICBv
dXQucHJpbnQoImNhcHR1cmVkQXJndW1lbnRJbnZhbGlkIik7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBvdXQucHJpbnQoImNhcHR1cmVkQXJndW1lbnQiLCBvZmZzZXQoKSk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9DYXB0dXJlZEFyZ3VtZW50c09mZnNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0NhcHR1cmVkQXJndW1lbnRzT2Zmc2V0LmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYXB0dXJlZEFyZ3VtZW50c09mZnNldC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBDYXB0dXJlZEFyZ3VtZW50c09mZnNldF9o
CisjZGVmaW5lIENhcHR1cmVkQXJndW1lbnRzT2Zmc2V0X2gKKworI2luY2x1ZGUgIkdlbmVyaWNP
ZmZzZXQuaCIKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIEpTQyB7
CisKKy8vIFRoaXMgaXMgYW4gb2Zmc2V0IGludG8gdGhlIHNwZWNpYWwgYXJndW1lbnRzIG9iamVj
dCwgd2hpY2ggY2FwdHVyZXMgdGhlIGFyZ3VtZW50cyB0byBhCisvLyBmdW5jdGlvbi4gSXQgb25s
eSBjb21lcyBpbnRvIHBsYXkgaXQgdGhlIGFyZ3VtZW50cyBhcmVuJ3QgYWxzbyBsaWZ0ZWQgaW50
byB0aGUgYWN0aXZhdGlvbi4KKy8vIElmIHRoZXkgd2VyZSB0aGVuIGFjY2Vzc2VzIHRvIHRoZSBh
cmd1bWVudHMgd291bGQgcmVzb2x2ZSB0byBhIFNjb3BlT2Zmc2V0IGFuZCBub3QgYQorLy8gQ2Fw
dHVyZWRBcmd1bWVudHNPZmZzZXQuCitjbGFzcyBDYXB0dXJlZEFyZ3VtZW50c09mZnNldCA6IHB1
YmxpYyBHZW5lcmljT2Zmc2V0PENhcHR1cmVkQXJndW1lbnRzT2Zmc2V0PiB7CitwdWJsaWM6Cisg
ICAgQ2FwdHVyZWRBcmd1bWVudHNPZmZzZXQoKSB7IH0KKyAgICAKKyAgICBleHBsaWNpdCBDYXB0
dXJlZEFyZ3VtZW50c09mZnNldCh1bnNpZ25lZCBvZmZzZXQpCisgICAgICAgIDogR2VuZXJpY09m
ZnNldChvZmZzZXQpCisgICAgeworICAgIH0KKyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJl
YW0mKSBjb25zdDsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gQ2FwdHVy
ZWRBcmd1bWVudHNPZmZzZXRfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9EaXJlY3RBcmd1bWVudHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMTQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJEaXJlY3RBcmd1bWVudHMuaCIK
KworI2luY2x1ZGUgIkdlbmVyaWNBcmd1bWVudHNJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNBcmd1
bWVudHNJdGVyYXRvci5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKworbmFtZXNwYWNlIEpT
QyB7CisKK1NUQVRJQ19BU1NFUlRfSVNfVFJJVklBTExZX0RFU1RSVUNUSUJMRShEaXJlY3RBcmd1
bWVudHMpOworCitjb25zdCBDbGFzc0luZm8gRGlyZWN0QXJndW1lbnRzOjpzX2luZm8gPSB7ICJB
cmd1bWVudHMiLCAmQmFzZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKERpcmVjdEFy
Z3VtZW50cykgfTsKKworRGlyZWN0QXJndW1lbnRzOjpEaXJlY3RBcmd1bWVudHMoVk0mIHZtLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgdW5zaWduZWQgbGVuZ3RoKQorICAgIDogR2VuZXJpY0FyZ3Vt
ZW50cyh2bSwgc3RydWN0dXJlKQorICAgICwgbV9sZW5ndGgobGVuZ3RoKQoreworfQorCitEaXJl
Y3RBcmd1bWVudHMqIERpcmVjdEFyZ3VtZW50czo6Y3JlYXRlVW5pbml0aWFsaXplZChWTSYgdm0s
IFN0cnVjdHVyZSogc3RydWN0dXJlLCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgRGlyZWN0QXJn
dW1lbnRzKiByZXN1bHQgPQorICAgICAgICBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxEaXJl
Y3RBcmd1bWVudHM+KHZtLmhlYXAsIGFsbG9jYXRpb25TaXplKGxlbmd0aCkpKQorICAgICAgICAo
dm0sIHN0cnVjdHVyZSk7CisgICAgcmVzdWx0LT5maW5pc2hDcmVhdGlvbih2bSk7CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKworRGlyZWN0QXJndW1lbnRzKiBEaXJlY3RBcmd1bWVudHM6OmNyZWF0
ZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAg
RGlyZWN0QXJndW1lbnRzKiByZXN1bHQgPSBjcmVhdGVVbmluaXRpYWxpemVkKHZtLCBzdHJ1Y3R1
cmUsIGxlbmd0aCk7CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBpID0gbGVuZ3RoOyBpLS07KQor
ICAgICAgICByZXN1bHQtPnN0b3JhZ2UoKVtpXS5jbGVhcigpOworICAgIAorICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK0RpcmVjdEFyZ3VtZW50cyogRGlyZWN0QXJndW1lbnRzOjpjcmVhdGVCeUNv
cHlpbmcoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgRXhlY1N0YXRlKiBleGVjKQorewor
ICAgIHVuc2lnbmVkIGxlbmd0aCA9IGV4ZWMtPmFyZ3VtZW50Q291bnQoKTsKKyAgICBEaXJlY3RB
cmd1bWVudHMqIHJlc3VsdCA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWQodm0sIHN0cnVjdHVyZSwgbGVu
Z3RoKTsKKyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBsZW5ndGg7IGktLTspCisgICAgICAg
IHJlc3VsdC0+c3RvcmFnZSgpW2ldLnNldCh2bSwgcmVzdWx0LCBleGVjLT51bmNoZWNrZWRBcmd1
bWVudChpKSk7CisgICAgCisgICAgcmVzdWx0LT5jYWxsZWUoKS5zZXQodm0sIHJlc3VsdCwganND
YXN0PEpTRnVuY3Rpb24qPihleGVjLT5jYWxsZWUoKSkpOworICAgIAorICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK3ZvaWQgRGlyZWN0QXJndW1lbnRzOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogdGhp
c0NlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIERpcmVjdEFyZ3VtZW50cyogdGhp
c09iamVjdCA9IHN0YXRpY19jYXN0PERpcmVjdEFyZ3VtZW50cyo+KHRoaXNDZWxsKTsKKyAgICBB
U1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CisgICAgQmFzZTo6
dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKKyAgICAKKyAgICB2aXNpdG9yLmFw
cGVuZFZhbHVlcyh0aGlzT2JqZWN0LT5zdG9yYWdlKCksIHRoaXNPYmplY3QtPm1fbGVuZ3RoKTsK
KyAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9jYWxsZWUpOworICAgIAorICAgIGlm
ICh0aGlzT2JqZWN0LT5tX292ZXJyaWRlcykgeworICAgICAgICB2aXNpdG9yLmNvcHlMYXRlcigK
KyAgICAgICAgICAgIHRoaXNPYmplY3QsIERpcmVjdEFyZ3VtZW50c092ZXJyaWRlc0NvcHlUb2tl
biwKKyAgICAgICAgICAgIHRoaXNPYmplY3QtPm1fb3ZlcnJpZGVzLmdldCgpLCBtX2xlbmd0aCk7
CisgICAgfQorfQorCit2b2lkIERpcmVjdEFyZ3VtZW50czo6Y29weUJhY2tpbmdTdG9yZShKU0Nl
bGwqIHRoaXNDZWxsLCBDb3B5VmlzaXRvciYgdmlzaXRvciwgQ29weVRva2VuIHRva2VuKQorewor
ICAgIERpcmVjdEFyZ3VtZW50cyogdGhpc09iamVjdCA9IHN0YXRpY19jYXN0PERpcmVjdEFyZ3Vt
ZW50cyo+KHRoaXNDZWxsKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmpl
Y3QsIGluZm8oKSk7CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlQodG9rZW4gPT0gRGlyZWN0QXJn
dW1lbnRzT3ZlcnJpZGVzQ29weVRva2VuKTsKKyAgICAKKyAgICBib29sKiBvbGRPdmVycmlkZXMg
PSB0aGlzT2JqZWN0LT5tX292ZXJyaWRlcy5nZXQoKTsKKyAgICBpZiAoIW9sZE92ZXJyaWRlcykK
KyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGlmICh2aXNpdG9yLmNoZWNrSWZTaG91bGRDb3B5
KG92ZXJyaWRlcykpIHsKKyAgICAgICAgYm9vbCogbmV3T3ZlcnJpZGVzID0gc3RhdGljX2Nhc3Q8
Ym9vbCo+KHZpc2l0b3IuYWxsb2NhdGVOZXdTcGFjZShtX2xlbmd0aCkpOworICAgICAgICBtZW1j
cHkobmV3T3ZlcnJpZGVzLCBvbGRPdmVycmlkZXMsIG1fbGVuZ3RoKTsKKyAgICAgICAgdGhpc09i
amVjdC0+bV9vdmVycmlkZXMuc2V0V2l0aG91dFdyaXRlQmFycmllcihuZXdPdmVycmlkZXMpOwor
ICAgICAgICB2aXNpdG9yLmRpZENvcHkob2xkT3ZlcnJpZGVzLCBtX2xlbmd0aCk7CisgICAgfQor
fQorCitTdHJ1Y3R1cmUqIERpcmVjdEFyZ3VtZW50czo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCit7CisgICAg
cmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlw
ZUluZm8oRGlyZWN0QXJndW1lbnRzVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworfQor
Cit2b2lkIERpcmVjdEFyZ3VtZW50czo6c2xvd0Rvd25BbmRXYXN0ZU1lbW9yeShWTSYgdm0pCit7
CisgICAgUkVMRUFTRV9BU1NFUlQoIW1fb3ZlcnJpZGVzKTsKKyAgICAKKyAgICBwdXREaXJlY3Qo
dm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIobV9sZW5ndGgpLCBEb250RW51
bSk7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5jYWxsZWUsIG1fY2FsbGVl
LmdldCgpLCBEb250RW51bSk7CisgICAgCisgICAgdm9pZCogYmFja2luZ1N0b3JlOworICAgIFJF
TEVBU0VfQVNTRVJUKHZtLmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdlKHRoaXMsIG1fbGVuZ3RoKSwg
JmJhY2tpbmdTdG9yZSk7CisgICAgbV9vdmVycmlkZXMuc2V0KHZtLCB0aGlzLCBzdGF0aWNfY2Fz
dDxib29sKj4oYmFja2luZ1N0b3JlKSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gbV9sZW5ndGg7
IGktLTspCisgICAgICAgIG1fb3ZlcnJpZGVzLmdldCgpW2ldID0gZmFsc2U7Cit9CisKK3ZvaWQg
RGlyZWN0QXJndW1lbnRzOjpzbG93RG93bkFuZFdhc3RlTWVtb3J5SWZOZWNlc3NhcnkoVk0mIHZt
KQoreworICAgIGlmICghbV9vdmVycmlkZXMpCisgICAgICAgIHNsb3dEb3duQW5kV2FzdGVNZW1v
cnkodm0pOworfQorCit2b2lkIERpcmVjdEFyZ3VtZW50czo6b3ZlcnJpZGVBcmd1bWVudChWTSYg
dm0sIHVuc2lnbmVkIGkpCit7CisgICAgc2xvd0Rvd25BbmRXYXN0ZU1lbW9yeUlmTmVjZXNzYXJ5
KHZtKTsKKyAgICBtX292ZXJyaWRlcy5nZXQoKVtpbmRleF0gPSB0cnVlOworfQorCit9IC8vIG5h
bWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0
QXJndW1lbnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RGlyZWN0QXJndW1lbnRzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9EaXJlY3RBcmd1bWVudHMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEzNyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IERpcmVjdEFyZ3VtZW50c19oCisjZGVmaW5lIERpcmVjdEFyZ3VtZW50c19oCisKKyNpbmNsdWRl
ICJHZW5lcmljQXJndW1lbnRzLmgiCisKK25hbWVzcGFjZSBKU0MgeworCisvLyBUaGlzIGlzIGFu
IEFyZ3VtZW50cy1jbGFzcyBvYmplY3QgdGhhdCB3ZSBjcmVhdGUgd2hlbiB5b3Ugc2F5ICJhcmd1
bWVudHMiIGluc2lkZSBhIGZ1bmN0aW9uLAorLy8gYW5kIG5vbmUgb2YgdGhlIGFyZ3VtZW50cyBh
cmUgY2FwdHVyZWQgaW4gdGhlIGZ1bmN0aW9uJ3MgYWN0aXZhdGlvbi4gVGhlIGZ1bmN0aW9uIHdp
bGwgY29weSBhbGwKKy8vIG9mIGl0cyBhcmd1bWVudHMgaW50byB0aGlzIG9iamVjdCwgYW5kIGFs
bCBzdWJzZXF1ZW50IGFjY2Vzc2VzIHRvIHRoZSBhcmd1bWVudHMgd2lsbCBnbyB0aHJvdWdoCisv
LyB0aGlzIG9iamVjdCB0aGVyZWFmdGVyLiBTcGVjaWFsIHN1cHBvcnQgaXMgaW4gcGxhY2UgZm9y
IG1pc2NoZXZpb3VzIGV2ZW50cyBsaWtlIHRoZSBhcmd1bWVudHMKKy8vIGJlaW5nIGRlbGV0ZWQg
KHNvbWV0aGluZyBsaWtlICJkZWxldGUgYXJndW1lbnRzWzBdIikgb3IgcmVjb25maWd1cmVkIChi
cm9hZGx5LCB3ZSBzYXkgZGVsZXRpb25zCisvLyBhbmQgcmVjb25maWd1cmF0aW9ucyBtZWFuIHRo
YXQgdGhlIHJlc3BlY3RpdmUgYXJndW1lbnQgd2FzICJvdmVycmlkZGVuIikuCisvLworLy8gVG8g
c3BlZWQgYWxsb2NhdGlvbiwgdGhpcyBvYmplY3Qgd2lsbCBob2xkIGFsbCBvZiB0aGUgYXJndW1l
bnRzIGluLXBsYWNlLiBUaGUgYXJndW1lbnRzIGFzIHdlbGwKKy8vIGFzIGEgdGFibGUgb2YgZmxh
Z3Mgc2F5aW5nIHdoaWNoIGFyZ3VtZW50cyB3ZXJlIG92ZXJyaWRkZW4uCitjbGFzcyBEaXJlY3RB
cmd1bWVudHMgOiBwdWJsaWMgR2VuZXJpY0FyZ3VtZW50czxEaXJlY3RBcmd1bWVudHM+IHsKK3By
aXZhdGU6CisgICAgRGlyZWN0QXJndW1lbnRzKFZNJiwgU3RydWN0dXJlKiwgdW5zaWduZWQgbGVu
Z3RoKTsKKyAgICAKK3B1YmxpYzoKKyAgICAvLyBDcmVhdGVzIGFuIGFyZ3VtZW50cyBvYmplY3Qg
YnV0IGxlYXZlcyBpdCB1bmluaXRpYWxpemVkLgorICAgIHN0YXRpYyBEaXJlY3RBcmd1bWVudHMq
IGNyZWF0ZVVuaW5pdGlhbGl6ZWQoVk0mLCBTdHJ1Y3R1cmUqLCB1bnNpZ25lZCBsZW5ndGgpOwor
ICAgIAorICAgIC8vIENyZWF0ZXMgYW4gYXJndW1lbnRzIG9iamVjdCBhbmQgaW5pdGlhbGl6ZXMg
ZXZlcnl0aGluZyB0byB0aGUgZW1wdHkgdmFsdWUuCisgICAgc3RhdGljIERpcmVjdEFyZ3VtZW50
cyogY3JlYXRlKFZNJiwgU3RydWN0dXJlKiwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICAKKyAgICAv
LyBDcmVhdGVzIGFuIGFyZ3VtZW50cyBvYmplY3QgYnkgY29weWluZyB0aGUgYXJndW1uZXRzIGZy
b20gdGhlIHN0YWNrLgorICAgIHN0YXRpYyBEaXJlY3RBcmd1bWVudHMqIGNyZWF0ZUJ5Q29weWlu
ZyhWTSYsIFN0cnVjdHVyZSosIEV4ZWNTdGF0ZSopOworICAgIAorICAgIHN0YXRpYyB2b2lkIHZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBzdGF0aWMgdm9pZCBjb3B5
QmFja2luZ1N0b3JlKEpTQ2VsbCosIENvcHlWaXNpdG9yJiwgQ29weVRva2VuKTsKKyAgICAKKyAg
ICB1aW50MzJfdCBpbnRlcm5hbExlbmd0aCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
bV9sZW5ndGg7CisgICAgfQorICAgIAorICAgIHVpbnQzMl90IGxlbmd0aChFeGVjU3RhdGUqIGV4
ZWMpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoVU5MSUtFTFkobV9vdmVycmlkZXMpKQorICAg
ICAgICAgICAgcmV0dXJuIGdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKS50
b1VJbnQzMihleGVjKTsKKyAgICAgICAgcmV0dXJuIG1fbGVuZ3RoOworICAgIH0KKyAgICAKKyAg
ICBib29sIGNhbkFjY2Vzc0luZGV4UXVpY2tseSh1aW50MzJfdCBpKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGkgPCBtX2xlbmd0aCAmJiAoIW1fb3ZlcnJpZGVzIHx8ICFtX292ZXJyaWRl
cy5nZXQoKVtpXSk7CisgICAgfQorICAgIAorICAgIEpTVmFsdWUgZ2V0SW5kZXhRdWlja2x5KHVp
bnQzMl90IGkpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBM
SUNBVElPTihjYW5BY2Nlc3NJbmRleFF1aWNrbHkoaSkpOworICAgICAgICByZXR1cm4gc3RvcmFn
ZSgpW2ldLmdldCgpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNldEluZGV4UXVpY2tseShWTSYg
dm0sIHVpbnQzMl90IGksIEpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBBU1NFUlRfV0lU
SF9TRUNVUklUWV9JTVBMSUNBVElPTihjYW5BY2Nlc3NJbmRleFF1aWNrbHkoaSkpOworICAgICAg
ICBzdG9yYWdlKClbaV0uc2V0KHZtLCB0aGlzLCB2YWx1ZSk7CisgICAgfQorICAgIAorICAgIFdy
aXRlQmFycmllcjxKU0Z1bmN0aW9uPiYgY2FsbGVlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBt
X2NhbGxlZTsKKyAgICB9CisgICAgCisgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiBhcmd1bWVu
dChDYXB0dXJlZEFyZ3VtZW50c09mZnNldCBvZmZzZXQpCisgICAgeworICAgICAgICBBU1NFUlQo
b2Zmc2V0KTsKKyAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04ob2Zmc2V0
Lm9mZnNldCgpIDwgbV9sZW5ndGgpOworICAgICAgICByZXR1cm4gc3RvcmFnZSgpW29mZnNldC5v
ZmZzZXQoKV07CisgICAgfQorICAgIAorICAgIC8vIE1ldGhvZHMgaW50ZW5kZWQgZm9yIHVzZSBi
eSB0aGUgR2VuZXJpY0FyZ3VtZW50cyBtaXhpbi4KKyAgICBib29sIG92ZXJyb2RlVGhpbmdzKCkg
Y29uc3QgeyByZXR1cm4gISFtX292ZXJyaWRlczsgfQorICAgIHZvaWQgc2xvd0Rvd25BbmRXYXN0
ZU1lbW9yeShWTSYpOworICAgIHZvaWQgc2xvd0Rvd25BbmRXYXN0ZU1lbW9yeUlmTmVjZXNzYXJ5
KFZNJik7CisgICAgdm9pZCBvdmVycmlkZUFyZ3VtZW50KFZNJiwgdW5zaWduZWQgaW5kZXgpOwor
ICAgIAorICAgIERFQ0xBUkVfSU5GTzsKKyAgICAKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVh
dGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlKTsKKyAg
ICAKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTGVuZ3RoKCkgeyByZXR1cm4gT0JKRUNU
X09GRlNFVE9GKERpcmVjdEFyZ3VtZW50cywgbV9sZW5ndGgpOyB9CisgICAgc3RhdGljIHB0cmRp
ZmZfdCBvZmZzZXRPZk92ZXJyaWRlcygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihEaXJlY3RB
cmd1bWVudHMsIG1fb3ZlcnJpZGVzKTsgfQorICAgIAorICAgIHN0YXRpYyBzaXplX3Qgc3RvcmFn
ZU9mZnNldCgpCisgICAgeworICAgICAgICByZXR1cm4gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9m
PHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pPihzaXplb2YoRGlyZWN0QXJndW1lbnRzKSk7
CisgICAgfQorICAgIAorICAgIHN0YXRpYyBzaXplX3QgYWxsb2NhdGlvblNpemUodWludDMyX3Qg
bGVuZ3RoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0b3JhZ2VPZmZzZXQoKSArIHNpemVvZihX
cml0ZUJhcnJpZXI8VW5rbm93bj4pICogbGVuZ3RoOworICAgIH0KKyAgICAKK3ByaXZhdGU6Cisg
ICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiBzdG9yYWdlKCkKKyAgICB7CisgICAgICAgIHJldHVy
biBiaXR3aXNlX2Nhc3Q8V3JpdGVCYXJyaWVyPFVua25vd24+Kj4oYml0d2lzZV9jYXN0PGNoYXIq
Pih0aGlzKSArIHN0b3JhZ2VPZmZzZXQoKSk7CisgICAgfQorICAgIAorICAgIFdyaXRlQmFycmll
cjxKU0Z1bmN0aW9uKj4gbV9jYWxsZWU7CisgICAgdWludDMyX3QgbV9sZW5ndGg7IC8vIEFsd2F5
cyB0aGUgYWN0dWFsIGxlbmd0aCBvZiBjYXB0dXJlZCBhcmd1bWVudHMgYW5kIG5ldmVyIHdoYXQg
d2FzIHN0b3JlZCBpbnRvIHRoZSBsZW5ndGggcHJvcGVydHkuCisgICAgQ29weVdyaXRlQmFycmll
cjxib29sPiBtX292ZXJyaWRlczsgLy8gSWYgbm9uLW51bGwsIGl0IG1lYW5zIHRoYXQgbGVuZ3Ro
LCBjYWxsZWUsIGFuZCBjYWxsZXIgYXJlIGZ1bGx5IG1hdGVyaWFsaXplZCBwcm9wZXJ0aWVzLgor
fTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBEaXJlY3RBcmd1bWVudHNfaAor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Gb3JlaWduVmFyaWFibGVJbmRl
eC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ZvcmVpZ25W
YXJpYWJsZUluZGV4LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Gb3JlaWduVmFyaWFibGVJbmRleC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTIg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBGb3JlaWduVmFyaWFibGVJbmRleF9oCisjZGVmaW5lIEZvcmVpZ25WYXJpYWJsZUluZGV4X2gK
KworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEZvcmVpZ25WYXJpYWJsZUluZGV4IHsKK3B1Ymxp
YzoKKyAgICBGb3JlaWduVmFyaWFibGVJbmRleCgpCisgICAgICAgIDogbV9pbmRleChVSU5UX01B
WCkKKyAgICB7CisgICAgfQorICAgIAorICAgIGV4cGxpY2l0IEZvcmVpZ25WYXJpYWJsZUluZGV4
KHVuc2lnbmVkIGluZGV4KQorICAgICAgICA6IG1faW5kZXgoaW5kZXgpCisgICAgeworICAgIH0K
KyAgICAKKyAgICAKKyAgICAKK3ByaXZhdGU6CisgICAgdW5zaWduZWQgbV9pbmRleDsKK307CisK
K30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRm9yZWlnblZhcmlhYmxlSW5kZXhfaAor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3Vt
ZW50cy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2Vu
ZXJpY0FyZ3VtZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBHZW5lcmljQXJn
dW1lbnRzX2gKKyNkZWZpbmUgR2VuZXJpY0FyZ3VtZW50c19oCisKKyNpbmNsdWRlICJKU09iamVj
dC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworLy8gVGhpcyBpcyBhIG1peGluIGZvciB0aGUgdHdv
IGtpbmRzIG9mIEFyZ3VtZW50cy1jbGFzcyBvYmplY3RzIHRoYXQgYXJpc2Ugd2hlbiB5b3Ugc2F5
CisvLyAiYXJndW1lbnRzIiBpbnNpZGUgYSBmdW5jdGlvbi4gVGhpcyBjbGFzcyBkb2Vzbid0IHNo
b3cgdXAgaW4gdGhlIEpTQ2VsbCBpbmhlcml0YW5jZSBoaWVyYXJjaHkuCit0ZW1wbGF0ZTx0eXBl
bmFtZSBUeXBlPgorY2xhc3MgR2VuZXJpY0FyZ3VtZW50cyA6IHB1YmxpYyBKU05vbkZpbmFsT2Jq
ZWN0IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTTm9uRmluYWxPYmplY3QgQmFzZTsKKworICAg
IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRlc0dldE93blBy
b3BlcnR5U2xvdCB8IEludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5M
ZW5ndGhJc05vdFplcm8gfCBPdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzIHwgSlNPYmplY3Q6OlN0
cnVjdHVyZUZsYWdzOworCitwcm90ZWN0ZWQ6CisgICAgR2VuZXJpY0FyZ3VtZW50cyhWTSYgdm0s
IFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgICAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSkKKyAg
ICB7CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0
KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMg
Ym9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgdW5z
aWduZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgdm9pZCBnZXRP
d25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkm
LCBFbnVtZXJhdGlvbk1vZGUpOworICAgIHN0YXRpYyB2b2lkIHB1dChKU0NlbGwqLCBFeGVjU3Rh
dGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOworICAgIHN0YXRp
YyB2b2lkIHB1dEJ5SW5kZXgoSlNDZWxsKiwgRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlO
YW1lLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKKyAgICBzdGF0aWMgdm9pZCBkZWxldGVQ
cm9wZXJ0eShKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUpOworICAgIHN0YXRpYyB2
b2lkIGRlbGV0ZVByb3BlcnR5QnlJbmRleChKU0NlbGwqLCBFeGVjU3RhdGUqLCB1bnNpZ25lZCBw
cm9wZXJ0eU5hbWUpOworICAgIHN0YXRpYyB2b2lkIGRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0
KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBi
b29sIHNob3VsZFRocm93KTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8g
R2VuZXJpY0FyZ3VtZW50c19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0dlbmVyaWNBcmd1bWVudHNJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lubGluZXMuaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHNJbmxpbmVzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBHZW5lcmljQXJndW1lbnRzSW5saW5lc19o
CisjZGVmaW5lIEdlbmVyaWNBcmd1bWVudHNJbmxpbmVzX2gKKworI2luY2x1ZGUgIkdlbmVyaWNB
cmd1bWVudHMuaCIKKyNpbmNsdWRlICJKU0FyZ3VtZW50c0l0ZXJhdG9yLmgiCisjaW5jbHVkZSAi
SlNDSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVHlw
ZT4KK2Jvb2wgR2VuZXJpY0FyZ3VtZW50czxUeXBlPjo6Z2V0T3duUHJvcGVydHlTbG90KEpTT2Jq
ZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIGlkZW50LCBQcm9wZXJ0
eVNsb3QmIHNsb3QpCit7CisgICAgVHlwZSogdGhpc09iamVjdCA9IGpzQ2FzdDxUeXBlKj4ob2Jq
ZWN0KTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIAorICAgIGlmICghdGhpc09iamVj
dC0+b3ZlcnJvZGVUaGluZ3MoKSkgeworICAgICAgICBpZiAoaWRlbnQgPT0gdm0ucHJvcGVydHlO
YW1lcy0+bGVuZ3RoKSB7CisgICAgICAgICAgICBzbG90LnNldFZhbHVlKHRoaXNPYmplY3QsIERv
bnRFbnVtLCBqc051bWJlcih0aGlzT2JqZWN0LT5pbnRlcm5hbExlbmd0aCgpKSk7CisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoaWRlbnQgPT0gdm0ucHJv
cGVydHlOYW1lcy0+Y2FsbGVlKSB7CisgICAgICAgICAgICBzbG90LnNldFZhbHVlKHRoaXNPYmpl
Y3QsIERvbnRFbnVtLCB0aGlzT2JqZWN0LT5jYWxsZWUoKS5nZXQoKSk7CisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBpbmRleCA9
IGlkZW50LmFzSW5kZXgoKTsKKyAgICBpZiAodGhpc09iamVjdC0+Y2FuQWNjZXNzSW5kZXhRdWlj
a2x5KGluZGV4KSkgeworICAgICAgICBzbG90LnNldFZhbHVlKHRoaXNPYmplY3QsIE5vbmUsIHRo
aXNPYmplY3QtPmdldEluZGV4UXVpY2tseShpbmRleCkpOworICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CisgICAgCisgICAgaWYgKEJhc2U6OmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0
LCBleGVjLCBpZGVudCwgc2xvdCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIAorICAgIGlm
IChpZGVudCA9PSB2bS5wcm9wZXJ0eU5hbWVzLT5pdGVyYXRvclByaXZhdGVOYW1lKSB7CisgICAg
ICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2Jq
ZWN0KCk7CisgICAgICAgIHRoaXNPYmplY3QtPkpTQ19OQVRJVkVfRlVOQ1RJT04odm0ucHJvcGVy
dHlOYW1lcy0+aXRlcmF0b3JQcml2YXRlTmFtZSwgYXJndW1lbnRzRnVuY0l0ZXJhdG9yLCBEb250
RW51bSwgMCk7CisgICAgICAgIGlmIChKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90KHRoaXNP
YmplY3QsIGV4ZWMsIGlkZW50LCBzbG90KSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KKyAgICAKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFR5cGU+
Citib29sIEdlbmVyaWNBcmd1bWVudHM8VHlwZT46OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgo
SlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpbmRleCwgUHJvcGVy
dHlTbG90JiBzbG90KQoreworICAgIFR5cGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8VHlwZSo+KG9i
amVjdCk7CisgICAgCisgICAgaWYgKHRoaXNPYmplY3QtPmNhbkFjY2Vzc0luZGV4UXVpY2tseShp
bmRleCkpIHsKKyAgICAgICAgc2xvdC5zZXRWYWx1ZSh0aGlzT2JqZWN0LCBOb25lLCB0aGlzT2Jq
ZWN0LT5nZXRJbmRleFF1aWNrbHkoaW5kZXgpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorICAgIAorICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KG9iamVj
dCwgZXhlYywgaW5kZXgsIHNsb3QpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPgordm9p
ZCBHZW5lcmljQXJndW1lbnRzPFR5cGU+OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBv
YmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIGFycmF5LCBFbnVtZXJh
dGlvbk1vZGUgbW9kZSkKK3sKKyAgICBUeXBlKiB0aGlzT2JqZWN0ID0ganNDYXN0PFR5cGUqPihv
YmplY3QpOworICAgIAorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0aGlzT2JqZWN0LT5p
bnRlcm5hbExlbmd0aCgpOyArK2kpIHsKKyAgICAgICAgaWYgKCF0aGlzT2JqZWN0LT5jYW5BY2Nl
c3NJbmRleFF1aWNrbHkoaW5kZXgpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGFy
cmF5LmFkZChJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGkpKTsKKyAgICB9CisgICAgaWYgKHNob3Vs
ZEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMobW9kZSkgJiYgIXRoaXNPYmplY3QtPm92ZXJyb2Rl
VGhpbmdzKCkpIHsKKyAgICAgICAgYXJyYXkuYWRkKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jYWxs
ZWUpOworICAgICAgICBhcnJheS5hZGQoZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCk7Cisg
ICAgfQorICAgIEJhc2U6OmdldE93blByb3BlcnR5TmFtZXModGhpc09iamVjdCwgZXhlYywgYXJy
YXksIG1vZGUpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPgordm9pZCBHZW5lcmljQXJn
dW1lbnRzPFR5cGU+OjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5
TmFtZSBpZGVudCwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQoreworICAg
IFR5cGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8VHlwZSo+KG9iamVjdCk7CisgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKKyAgICAKKyAgICBpZiAoIXRoaXNPYmplY3QtPm92ZXJyb2RlVGhpbmdzKCkK
KyAgICAgICAgJiYgKGlkZW50ID09IHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aAorICAgICAgICAg
ICAgfHwgaWRlbnQgPT0gdm0ucHJvcGVydHlOYW1lcy0+Y2FsbGVlKSkKKyAgICAgICAgdGhpc09i
amVjdC0+c2xvd0Rvd25BbmRXYXN0ZU1lbW9yeSh2bSk7CisgICAgCisgICAgdW5zaWduZWQgaW5k
ZXggPSBpZGVudC5hc0luZGV4KCk7CisgICAgaWYgKHRoaXNPYmplY3QtPmNhbkFjY2Vzc0luZGV4
UXVpY2tseShpbmRleCkpIHsKKyAgICAgICAgc2V0SW5kZXhRdWlja2x5KHZtLCBpbmRleCwgdmFs
dWUpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIEJhc2U6OnB1dCh0aGlzT2Jq
ZWN0LCBleGVjLCBpZGVudCwgdmFsdWUsIHNsb3QpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
eXBlPgordm9pZCBHZW5lcmljQXJndW1lbnRzPFR5cGU+OjpwdXRCeUluZGV4KEpTQ2VsbCogY2Vs
bCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpbmRleCwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBz
aG91bGRUaHJvdykKK3sKKyAgICBUeXBlKiB0aGlzT2JqZWN0ID0ganNDYXN0PFR5cGUqPihvYmpl
Y3QpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgCisgICAgaWYgKHRoaXNPYmplY3Qt
PmNhblNldEluZGV4UXVpY2tseShpbmRleCkpIHsKKyAgICAgICAgc2V0SW5kZXhRdWlja2x5KHZt
LCBpbmRleCwgdmFsdWUpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIHJldHVy
biBCYXNlOjpwdXRCeUluZGV4KGNlbGwsIGV4ZWMsIGluZGV4LCB2YWx1ZSwgc2hvdWxkVGhyb3cp
OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPgordm9pZCBHZW5lcmljQXJndW1lbnRzPFR5
cGU+OjpkZWxldGVQcm9wZXJ0eShKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVy
dHlOYW1lIGlkZW50KQoreworICAgIFR5cGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8VHlwZSo+KG9i
amVjdCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICAKKyAgICBpZiAoIXRoaXNPYmpl
Y3QtPm92ZXJyb2RlVGhpbmdzKCkKKyAgICAgICAgJiYgKGlkZW50ID09IHZtLnByb3BlcnR5TmFt
ZXMtPmxlbmd0aAorICAgICAgICAgICAgfHwgaWRlbnQgPT0gdm0ucHJvcGVydHlOYW1lcy0+Y2Fs
bGVlKSkKKyAgICAgICAgdGhpc09iamVjdC0+c2xvd0Rvd25BbmRXYXN0ZU1lbW9yeSh2bSk7Cisg
ICAgCisgICAgdW5zaWduZWQgaW5kZXggPSBpZGVudC5hc0luZGV4KCk7CisgICAgaWYgKHRoaXNP
YmplY3QtPmNhbkFjY2Vzc0luZGV4UXVpY2tseShpbmRleCkpIHsKKyAgICAgICAgdGhpc09iamVj
dC0+b3ZlcnJpZGVBcmd1bWVudCh2bSwgaW5kZXgpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIAorICAgIEJhc2U6OmRlbGV0ZVByb3BlcnR5KHRoaXNPYmplY3QsIGV4ZWMsIGlkZW50KTsK
K30KKwordGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4KK3ZvaWQgR2VuZXJpY0FyZ3VtZW50czxUeXBl
Pjo6ZGVsZXRlUHJvcGVydHlCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1
bnNpZ25lZCBpbmRleCkKK3sKKyAgICBUeXBlKiB0aGlzT2JqZWN0ID0ganNDYXN0PFR5cGUqPihv
YmplY3QpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgCisgICAgaWYgKHRoaXNPYmpl
Y3QtPmNhbkFjY2Vzc0luZGV4UXVpY2tseShpbmRleCkpIHsKKyAgICAgICAgdGhpc09iamVjdC0+
b3ZlcnJpZGVBcmd1bWVudCh2bSwgaW5kZXgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IAorICAgIHJldHVybiBCYXNlOjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgoY2VsbCwgZXhlYywgaW5k
ZXgpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPgordm9pZCBHZW5lcmljQXJndW1lbnRz
PFR5cGU+OjpkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4
ZWMsIFByb3BlcnR5TmFtZSBpZGVudCwgY29uc3QgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlw
dG9yLCBib29sIHNob3VsZFRocm93KQoreworICAgIFR5cGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8
VHlwZSo+KG9iamVjdCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICAKKyAgICBpZiAo
aWRlbnQgPT0gdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoCisgICAgICAgIHx8IGlkZW50ID09IHZt
LnByb3BlcnR5TmFtZXMtPmNhbGxlZSkKKyAgICAgICAgdGhpc09iamVjdC0+c2xvd0Rvd25BbmRX
YXN0ZU1lbW9yeUlmTmVjZXNzYXJ5KHZtKTsKKyAgICBlbHNlIHsKKyAgICAgICAgdW5zaWduZWQg
aW5kZXggPSBpZGVudC5hc0luZGV4KCk7CisgICAgICAgIGlmICh0aGlzT2JqZWN0LT5jYW5BY2Nl
c3NBcmd1bWVudFF1aWNrbHkoaW5kZXgpKSB7CisgICAgICAgICAgICBpZiAoIWRlc2NyaXB0b3Iu
aXNBY2Nlc3NvckRlc2NyaXB0b3IoKSkgeworICAgICAgICAgICAgICAgIC8vIElmIHRoZSBwcm9w
ZXJ0eSBpcyBub3QgZGVsZXRlZCBhbmQgd2UgYXJlIHVzaW5nIGEgbm9uLWFjY2Vzc29yIGRlc2Ny
aXB0b3IsIHRoZW4KKyAgICAgICAgICAgICAgICAvLyBtYWtlIHN1cmUgdGhhdCB0aGUgYWxpYXNl
ZCBhcmd1bWVudCBzZWVzIHRoZSB2YWx1ZS4KKyAgICAgICAgICAgICAgICBpZiAoZGVzY3JpcHRv
ci52YWx1ZSgpKQorICAgICAgICAgICAgICAgICAgICB0aGlzT2JqZWN0LT5zZXRJbmRleFF1aWNr
bHkodm0sIGksIGRlc2NyaXB0b3IudmFsdWUoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICAvLyBJZiB0aGUgcHJvcGVydHkgaXMgbm90IGRlbGV0ZWQgYW5kIHdlIGFyZSB1c2luZyBh
IG5vbi1hY2Nlc3Nvciwgd3JpdGFibGUKKyAgICAgICAgICAgICAgICAvLyBkZXNjcmlwdG9yLCB0
aGVuIHdlIGFyZSBkb25lLiBUaGUgYXJndW1lbnQgY29udGludWVzIHRvIGJlIGFsaWFzZWQuIE5v
dGUgdGhhdCB3ZQorICAgICAgICAgICAgICAgIC8vIGlnbm9yZSB0aGUgcmVxdWVzdCB0byBjaGFu
Z2UgZW51bWVyYWJpbGl0eS4gV2UgYXBwZWFyIHRvIGhhdmUgYWx3YXlzIGRvbmUgc28sIGluCisg
ICAgICAgICAgICAgICAgLy8gY2FzZXMgd2hlcmUgdGhlIGFyZ3VtZW50IHdhcyBzdGlsbCBhbGlh
c2VkLgorICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTQxOTUyCisgICAgICAgICAgICAgICAgaWYgKGRlc2NyaXB0b3Iud3Jp
dGFibGUoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9
CisgICAgICAgIAorICAgICAgICAgICAgLy8gSWYgdGhlIHByb3BlcnR5IGlzIGEgbm9uLWRlbGV0
ZWQgYXJndW1lbnQsIHRoZW4gbW92ZSBpdCBpbnRvIHRoZSBiYXNlIG9iamVjdCBhbmQKKyAgICAg
ICAgICAgIC8vIHRoZW4gZGVsZXRlIGl0LgorICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IHRo
aXNPYmplY3QtPmdldEluZGV4UXVpY2tseShpKTsKKyAgICAgICAgICAgIEFTU0VSVCh2YWx1ZSk7
CisgICAgICAgICAgICBvYmplY3QtPnB1dERpcmVjdE1heUJlSW5kZXgoZXhlYywgcHJvcGVydHlO
YW1lLCB2YWx1ZSk7CisgICAgICAgICAgICB0aGlzT2JqZWN0LT5vdmVycmlkZUFyZ3VtZW50KHZt
LCBpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvLyBOb3cganVzdCBsZXQgdGhlIG5v
cm1hbCBvYmplY3QgbWFjaGluZXJ5IGRvIGl0cyB0aGluZy4KKyAgICByZXR1cm4gQmFzZTo6ZGVm
aW5lT3duUHJvcGVydHkob2JqZWN0LCBleGVjLCBpZGVudCwgZGVzY3JpcHRvciwgc2hvdWxkVGhy
b3cpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEdlbmVyaWNBcmd1bWVu
dHNJbmxpbmVzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJp
Y09mZnNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dl
bmVyaWNPZmZzZXQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0dlbmVyaWNPZmZzZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDExMSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEdlbmVy
aWNPZmZzZXRfaAorI2RlZmluZSBHZW5lcmljT2Zmc2V0X2gKKworI2luY2x1ZGUgPHd0Zi9Bc3Nl
cnRpb25zLmg+CisKK25hbWVzcGFjZSBKU0MgeworCisvLyBBIG1peGluIGZvciBjcmVhdGluZyB0
aGUgdmFyaW91cyBraW5kcyBvZiB2YXJpYWJsZSBvZmZzZXRzIHRoYXQgb3VyIGVuZ2luZSBzdXBw
b3J0cy4KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBHZW5lcmljT2Zmc2V0IHsKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW52YWxpZE9mZnNldCA9IFVJTlRfTUFYOwor
ICAgIAorICAgIEdlbmVyaWNPZmZzZXQoKQorICAgICAgICA6IG1fb2Zmc2V0KGludmFsaWRPZmZz
ZXQpCisgICAgeworICAgIH0KKyAgICAKKyAgICBleHBsaWNpdCBHZW5lcmljT2Zmc2V0KHVuc2ln
bmVkIG9mZnNldCkKKyAgICAgICAgOiBtX29mZnNldChvZmZzZXQpCisgICAgeworICAgIH0KKyAg
ICAKKyAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0ID09IGludmFs
aWRPZmZzZXQ7IH0KKyAgICAKKyAgICB1bnNpZ25lZCBvZmZzZXRVbmNoZWNrZWQoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIG1fb2Zmc2V0OworICAgIH0KKyAgICAKKyAgICB1bnNpZ25l
ZCBvZmZzZXQoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fb2Zmc2V0ICE9IGludmFs
aWRPZmZzZXQpOworICAgICAgICByZXR1cm4gbV9vZmZzZXQ7CisgICAgfQorICAgIAorICAgIGJv
b2wgb3BlcmF0b3I9PShjb25zdCBUJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biBtX29mZnNldCA9PSBvdGhlci5vZmZzZXRVbmNoZWNrZWQoKTsKKyAgICB9CisgICAgYm9vbCBv
cGVyYXRvciE9KGNvbnN0IFQmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1f
b2Zmc2V0ICE9IG90aGVyLm9mZnNldFVuY2hlY2tlZCgpOworICAgIH0KKyAgICBib29sIG9wZXJh
dG9yPChjb25zdCBUJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX29mZnNl
dCA8IG90aGVyLm9mZnNldFVuY2hlY2tlZCgpOworICAgIH0KKyAgICBib29sIG9wZXJhdG9yPihj
b25zdCBUJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX29mZnNldCA+IG90
aGVyLm9mZnNldFVuY2hlY2tlZCgpOworICAgIH0KKyAgICBib29sIG9wZXJhdG9yPD0oY29uc3Qg
VCYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9vZmZzZXQgPD0gb3RoZXIu
b2Zmc2V0VW5jaGVja2VkKCk7CisgICAgfQorICAgIGJvb2wgb3BlcmF0b3I+PShjb25zdCBUJiBv
dGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX29mZnNldCA+PSBvdGhlci5vZmZz
ZXRVbmNoZWNrZWQoKTsKKyAgICB9CisgICAgCisgICAgVCBvcGVyYXRvcisoaW50IHZhbHVlKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIFQob2Zmc2V0KCkgKyB2YWx1ZSk7CisgICAgfQor
ICAgIFQgb3BlcmF0b3ItKGludCB2YWx1ZSkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBU
KG9mZnNldCgpIC0gdmFsdWUpOworICAgIH0KKyAgICBUJiBvcGVyYXRvcis9KGludCB2YWx1ZSkK
KyAgICB7CisgICAgICAgIHJldHVybiAqdGhpcyA9ICp0aGlzICsgdmFsdWU7CisgICAgfQorICAg
IFQmIG9wZXJhdG9yLT0oaW50IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuICp0aGlzID0g
KnRoaXMgLSB2YWx1ZTsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIHVuc2lnbmVkIG1fb2Zm
c2V0OworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBHZW5lcmljT2Zmc2V0
X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcmd1bWVudHNJdGVy
YXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNB
cmd1bWVudHNJdGVyYXRvci5jcHAJKHJldmlzaW9uIDE4MDcwNykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQXJndW1lbnRzSXRlcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSwgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE1IEFwcGxlLCBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTMzLDEwICszMywxOCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY29uc3QgQ2xhc3NJbmZvIEpTQXJn
dW1lbnRzSXRlcmF0b3I6OnNfaW5mbyA9IHsgIkFyZ3VtZW50c0l0ZXJhdG9yIiwgJkJhc2U6OnNf
aW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU0FyZ3VtZW50c0l0ZXJhdG9yKSB9OwogCi12
b2lkIEpTQXJndW1lbnRzSXRlcmF0b3I6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgQXJndW1lbnRz
KiBhcmd1bWVudHMpCit2b2lkIEpTQXJndW1lbnRzSXRlcmF0b3I6OmZpbmlzaENyZWF0aW9uKFZN
JiB2bSwgSlNPYmplY3QqIGFyZ3VtZW50cykKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2
bSk7CiAgICAgbV9hcmd1bWVudHMuc2V0KHZtLCB0aGlzLCBhcmd1bWVudHMpOwogfQogCitFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFyZ3VtZW50c0Z1bmNJdGVyYXRvcihFeGVjU3RhdGUq
IGV4ZWMpCit7CisgICAgSlNPYmplY3QqIHRoaXNPYmogPSBleGVjLT50aGlzVmFsdWUoKS50b1Ro
aXMoZXhlYywgU3RyaWN0TW9kZSkudG9PYmplY3QoZXhlYyk7CisgICAgaWYgKCF0aGlzT2JqLT5p
bmhlcml0cyhBcmd1bWVudHM6OmluZm8oKSkgJiYgIXRoaXNPYmotPmluaGVyaXRzKE91dE9mQmFu
ZEFyZ3VtZW50czo6aW5mbygpKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJv
d1R5cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIkF0dGVtcHRlZCB0byB1c2UgQXJndW1lbnRz
IGl0ZXJhdG9yIG9uIG5vbi1Bcmd1bWVudHMgb2JqZWN0IikpKTsKKyAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKEpTQXJndW1lbnRzSXRlcmF0b3I6OmNyZWF0ZShleGVjLT52bSgpLCBleGVjLT5j
YWxsZWUoKS0+Z2xvYmFsT2JqZWN0KCktPmFyZ3VtZW50c0l0ZXJhdG9yU3RydWN0dXJlKCksIHRo
aXNPYmopKTsKK30KKwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNB
cmd1bWVudHNJdGVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQXJndW1lbnRzSXRlcmF0b3IuaAkocmV2aXNpb24gMTgwNzA3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcmd1bWVudHNJdGVyYXRvci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSwgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE1IEFwcGxl
LCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTI2LDcgKzI2LDcgQEAKICNpZm5kZWYgSlNBcmd1bWVudHNJdGVyYXRvcl9oCiAjZGVm
aW5lIEpTQXJndW1lbnRzSXRlcmF0b3JfaAogCi0jaW5jbHVkZSAiQXJndW1lbnRzLmgiCisjaW5j
bHVkZSAiSlNPYmplY3QuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTQxLDcgKzQxLDcgQEAg
cHVibGljOgogICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVj
dCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8o
KSk7CiAgICAgfQogCi0gICAgc3RhdGljIEpTQXJndW1lbnRzSXRlcmF0b3IqIGNyZWF0ZShWTSYg
dm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBBcmd1bWVudHMqIGFyZ3VtZW50cykKKyAgICBzdGF0
aWMgSlNBcmd1bWVudHNJdGVyYXRvciogY3JlYXRlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIEpTT2JqZWN0KiBhcmd1bWVudHMpCiAgICAgewogICAgICAgICBKU0FyZ3VtZW50c0l0ZXJh
dG9yKiBpbnN0YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTQXJndW1lbnRzSXRl
cmF0b3I+KHZtLmhlYXApKSBKU0FyZ3VtZW50c0l0ZXJhdG9yKHZtLCBzdHJ1Y3R1cmUpOwogICAg
ICAgICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24odm0sIGFyZ3VtZW50cyk7CkBAIC01MCwxMSAr
NTAsMTEgQEAgcHVibGljOgogCiAgICAgYm9vbCBuZXh0KENhbGxGcmFtZSogY2FsbEZyYW1lLCBK
U1ZhbHVlJiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIGlmIChtX25leHRJbmRleCA+PSBtX2FyZ3Vt
ZW50cy0+bGVuZ3RoKGNhbGxGcmFtZSkpCisgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9CisgICAg
ICAgICAgICBtX2FyZ3VtZW50cy0+Z2V0KGNhbGxGcmFtZSwgY2FsbEZyYW1lLT5wcm9wZXJ0eU5h
bWVzKCkubGVuZ3RoKS50b1VJbnQzMihjYWxsRnJhbWUpOworICAgICAgICBpZiAobV9uZXh0SW5k
ZXggPj0gbGVuZ3RoKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB2YWx1ZSA9
IG1fYXJndW1lbnRzLT50cnlHZXRBcmd1bWVudChtX25leHRJbmRleCsrKTsKLSAgICAgICAgaWYg
KCF2YWx1ZSkKLSAgICAgICAgICAgIHZhbHVlID0ganNVbmRlZmluZWQoKTsKKyAgICAgICAgdmFs
dWUgPSBtX2FyZ3VtZW50cy0+Z2V0SW5kZXgoY2FsbEZyYW1lLCBtX25leHRJbmRleCsrKTsKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC02OCwxMiArNjgsMTQgQEAgcHJpdmF0ZToK
ICAgICB7CiAgICAgfQogCi0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIEFyZ3VtZW50cyop
OworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBKU09iamVjdCopOwogICAgIAotICAgIFdy
aXRlQmFycmllcjxBcmd1bWVudHM+IG1fYXJndW1lbnRzOworICAgIFdyaXRlQmFycmllcjxKU09i
amVjdD4gbV9hcmd1bWVudHM7CiAgICAgc2l6ZV90IG1fbmV4dEluZGV4OwogfTsKIAorRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcmd1bWVudHNGdW5jSXRlcmF0b3IoRXhlY1N0YXRlKik7
CisKIH0KIAogI2VuZGlmIC8vICFkZWZpbmVkKEpTQXJndW1lbnRzSXRlcmF0b3JfaCkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRW52aXJvbm1lbnRSZWNvcmQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRW52aXJvbm1lbnRS
ZWNvcmQuY3BwCShyZXZpc2lvbiAxODA3MDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0Vudmlyb25tZW50UmVjb3JkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMTIgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAyMDEyLCAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMzUsNCArMzUsMTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNvbnN0IENsYXNz
SW5mbyBKU0Vudmlyb25tZW50UmVjb3JkOjpzX2luZm8gPSB7ICJFbnZpcm9ubWVudFJlY29yZCIs
ICZCYXNlOjpzX2luZm8sIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNFbnZpcm9ubWVudFJlY29y
ZCkgfTsKIAordm9pZCBKU0Vudmlyb25tZW50UmVjb3JkOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCog
Y2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgSlNFbnZpcm9ubWVudFJlY29yZCog
dGhpc09iamVjdCA9IGpzQ2FzdDxKU0Vudmlyb25tZW50UmVjb3JkKj4oY2VsbCk7CisgICAgQVNT
RVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOworICAgIEJhc2U6OnZp
c2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CisgICAgdmlzaXRvci5hcHBlbmRWYWx1
ZXModGhpc09iamVjdC0+dmFyaWFibGVzKCksIG1fc3ltYm9sVGFibGUtPnNjb3BlU2l6ZSgpKTsK
K30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0Vudmlyb25tZW50UmVjb3JkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNFbnZpcm9ubWVudFJlY29yZC5oCShyZXZpc2lvbiAxODA3MDcpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Vudmlyb25tZW50UmVjb3JkLmgJKHdv
cmtpbmcgY29weSkKQEAgLTQ2LDExICs0NiwyNiBAQCBjbGFzcyBKU0Vudmlyb25tZW50UmVjb3Jk
IDogcHVibGljIEpTU3ltCiBwdWJsaWM6CiAgICAgdHlwZWRlZiBKU1N5bWJvbFRhYmxlT2JqZWN0
IEJhc2U7CiAKLSAgICBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiByZWdpc3RlcnMoKSB7IHJl
dHVybiBtX3JlZ2lzdGVyczsgfQotICAgIFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4mIHJlZ2lz
dGVyQXQoaW50IGluZGV4KSBjb25zdCB7IHJldHVybiBtX3JlZ2lzdGVyc1tpbmRleF07IH0KKyAg
ICBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiB2YXJpYWJsZXMoKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGJpdHdpc2VfY2FzdDxXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+Kj4oYml0d2lzZV9j
YXN0PGNoYXIqPih0aGlzKSArIG9mZnNldE9mVmFyaWFibGVzKCkpOworICAgIH0KKyAgICAKKyAg
ICBib29sIGlzVmFsaWQoU2NvcGVPZmZzZXQgb2Zmc2V0KQorICAgIHsKKyAgICAgICAgcmV0dXJu
ICEhb2Zmc2V0ICYmIG9mZnNldC5vZmZzZXQoKSA8IG1fc3ltYm9sVGFibGUtPnNjb3BlU2l6ZSgp
OworICAgIH0KKyAgICAKKyAgICBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+JiB2YXJpYWJsZUF0
KFNjb3BlT2Zmc2V0IG9mZnNldCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc1ZhbGlk
KG9mZnNldCkpOworICAgICAgICByZXR1cm4gdmFyaWFibGVzKClbb2Zmc2V0Lm9mZnNldCgpXTsK
KyAgICB9CiAKLSAgICBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiBjb25zdCAqIGFkZHJlc3NP
ZlJlZ2lzdGVycygpIGNvbnN0IHsgcmV0dXJuICZtX3JlZ2lzdGVyczsgfQotICAgIHN0YXRpYyBz
aXplX3Qgb2Zmc2V0T2ZSZWdpc3RlcnMoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNFbnZp
cm9ubWVudFJlY29yZCwgbV9yZWdpc3RlcnMpOyB9CisgICAgc3RhdGljIHNpemVfdCBvZmZzZXRP
ZlZhcmlhYmxlcygpCisgICAgeworICAgICAgICByZXR1cm4gV1RGOjpyb3VuZFVwVG9NdWx0aXBs
ZU9mPHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pPihzaXplb2YoSlNFbnZpcm9ubWVudFJl
Y29yZCkpOworICAgIH0KIAogICAgIERFQ0xBUkVfSU5GTzsKIApAQCAtNjAsMTUgKzc1LDM1IEBA
IHByb3RlY3RlZDoKICAgICBKU0Vudmlyb25tZW50UmVjb3JkKAogICAgICAgICBWTSYgdm0sCiAg
ICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlLAotICAgICAgICBSZWdpc3RlciogcmVnaXN0ZXJz
LAogICAgICAgICBKU1Njb3BlKiBzY29wZSwKICAgICAgICAgU3ltYm9sVGFibGUqIHN5bWJvbFRh
YmxlKQogICAgICAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSwgc2NvcGUsIHN5bWJvbFRhYmxlKQot
ICAgICAgICAsIG1fcmVnaXN0ZXJzKHJlaW50ZXJwcmV0X2Nhc3Q8V3JpdGVCYXJyaWVyQmFzZTxV
bmtub3duPio+KHJlZ2lzdGVycykpCiAgICAgewogICAgIH0KLQotICAgIFdyaXRlQmFycmllckJh
c2U8VW5rbm93bj4qIG1fcmVnaXN0ZXJzOyAvLyAiciIgaW4gdGhlIHN0YWNrLgorICAgIAorICAg
IHN0YXRpYyBzaXplX3QgYWxsb2NhdGlvblNpemVGb3JTY29wZVNpemUodW5zaWduZWQgc2NvcGVT
aXplKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG9mZnNldE9mVmFyaWFibGVzKCkgKyBzY29wZVNp
emUgKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KTsKKyAgICB9CisgICAgCisgICAgc3Rh
dGljIHNpemVfdCBhbGxvY2F0aW9uU2l6ZShTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUpCisgICAg
eworICAgICAgICByZXR1cm4gYWxsb2NhdGlvblNpemVGb3JTY29wZVNpemUoc3ltYm9sVGFibGUt
PnNjb3BlU2l6ZSgpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBmaW5pc2hDcmVhdGlvblVuaW5p
dGlhbGl6ZWQoVk0mIHZtKQorICAgIHsKKyAgICAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0p
OworICAgIH0KKyAgICAKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiB2bSkKKyAgICB7Cisg
ICAgICAgIGZpbmlzaENyZWF0aW9uVW5pbml0aWFsaXplZCh2bSk7CisgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IG1fc3ltYm9sVGFibGUtPnNjb3BlU2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAg
ICAvLyBGaWxsaW5nIHRoaXMgd2l0aCB1bmRlZmluZWQgaXMgdXNlZnVsIGJlY2F1c2UgdGhhdCdz
IHdoYXQgdmFyaWFibGVzIHN0YXJ0IG91dCBhcy4KKyAgICAgICAgICAgIHZhcmlhYmxlQXQoaSku
c2V0VW5kZWZpbmVkKCk7CisgICAgICAgIH0KKyAgICB9CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBK
U0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTGV4aWNhbEVudmlyb25t
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xl
eGljYWxFbnZpcm9ubWVudC5jcHAJKHJldmlzaW9uIDE4MDcwNykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTTGV4aWNhbEVudmlyb25tZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDksIDIwMTQgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5
LCAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDAsMjcgKzQwLDE5IEBAIG5hbWVzcGFjZSBKU0Mgewog
CiBjb25zdCBDbGFzc0luZm8gSlNMZXhpY2FsRW52aXJvbm1lbnQ6OnNfaW5mbyA9IHsgIkpTTGV4
aWNhbEVudmlyb25tZW50IiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShK
U0xleGljYWxFbnZpcm9ubWVudCkgfTsKIAotdm9pZCBKU0xleGljYWxFbnZpcm9ubWVudDo6dmlz
aXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQotewotICAgIEpT
TGV4aWNhbEVudmlyb25tZW50KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTTGV4aWNhbEVudmlyb25t
ZW50Kj4oY2VsbCk7Ci0gICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBp
bmZvKCkpOwotICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7Ci0K
LSAgICBmb3IgKGludCBpID0gMDsgaSA8IHRoaXNPYmplY3QtPnN5bWJvbFRhYmxlKCktPmNhcHR1
cmVDb3VudCgpOyArK2kpCi0gICAgICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5zdG9y
YWdlKClbaV0pOwotfQotCiBpbmxpbmUgYm9vbCBKU0xleGljYWxFbnZpcm9ubWVudDo6c3ltYm9s
VGFibGVHZXQoUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQog
ewogICAgIFN5bWJvbFRhYmxlRW50cnkgZW50cnkgPSBzeW1ib2xUYWJsZSgpLT5pbmxpbmVHZXQo
cHJvcGVydHlOYW1lLnVpZCgpKTsKICAgICBpZiAoZW50cnkuaXNOdWxsKCkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAorICAgIFNjb3BlT2Zmc2V0IG9mZnNldCA9IGVudHJ5LnNjb3BlT2Zmc2V0
KCk7CisKICAgICAvLyBEZWZlbmQgYWdhaW5zdCB0aGUgaW5zcGVjdG9yIGFza2luZyBmb3IgYSB2
YXIgYWZ0ZXIgaXQgaGFzIGJlZW4gb3B0aW1pemVkIG91dC4KLSAgICBpZiAoIWlzVmFsaWQoZW50
cnkpKQorICAgIGlmICghaXNWYWxpZChvZmZzZXQpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
LSAgICBzbG90LnNldFZhbHVlKHRoaXMsIERvbnRFbnVtLCByZWdpc3RlckF0KGVudHJ5LmdldElu
ZGV4KCkpLmdldCgpKTsKKyAgICBzbG90LnNldFZhbHVlKHRoaXMsIERvbnRFbnVtLCB2YXJpYWJs
ZUF0KG9mZnNldCkuZ2V0KCkpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC03MCwxMSArNjIs
MTMgQEAgaW5saW5lIGJvb2wgSlNMZXhpY2FsRW52aXJvbm1lbnQ6OnN5bWJvbAogICAgIGlmIChl
bnRyeS5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAgU2NvcGVPZmZzZXQg
b2Zmc2V0ID0gZW50cnkuc2NvcGVPZmZzZXQoKTsKKwogICAgIC8vIERlZmVuZCBhZ2FpbnN0IHRo
ZSBpbnNwZWN0b3IgYXNraW5nIGZvciBhIHZhciBhZnRlciBpdCBoYXMgYmVlbiBvcHRpbWl6ZWQg
b3V0LgotICAgIGlmICghaXNWYWxpZChlbnRyeSkpCisgICAgaWYgKCFpc1ZhbGlkKG9mZnNldCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcihy
ZWdpc3RlckF0KGVudHJ5LmdldEluZGV4KCkpLmdldCgpLCBlbnRyeS5nZXRBdHRyaWJ1dGVzKCkp
OworICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcih2YXJpYWJsZUF0KG9mZnNldCkuZ2V0KCks
IGVudHJ5LmdldEF0dHJpYnV0ZXMoKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTk1LDEy
ICs4OSwxMyBAQCBpbmxpbmUgYm9vbCBKU0xleGljYWxFbnZpcm9ubWVudDo6c3ltYm9sCiAgICAg
ICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgU3RyaWN0TW9kZVJlYWRvbmx5UHJvcGVy
dHlXcml0ZUVycm9yKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CisgICAg
ICAgIFNjb3BlT2Zmc2V0IG9mZnNldCA9IGl0ZXItPnZhbHVlLnNjb3BlT2Zmc2V0KCk7CiAgICAg
ICAgIC8vIERlZmVuZCBhZ2FpbnN0IHRoZSBpbnNwZWN0b3IgYXNraW5nIGZvciBhIHZhciBhZnRl
ciBpdCBoYXMgYmVlbiBvcHRpbWl6ZWQgb3V0LgotICAgICAgICBpZiAoIWlzVmFsaWQoaXRlci0+
dmFsdWUpKQorICAgICAgICBpZiAoIWlzVmFsaWQob2Zmc2V0KSkKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAgICAgaWYgKFZhcmlhYmxlV2F0Y2hwb2ludFNldCogc2V0ID0gaXRlci0+
dmFsdWUud2F0Y2hwb2ludFNldCgpKQotICAgICAgICAgICAgc2V0LT5pbnZhbGlkYXRlKFZhcmlh
YmxlV3JpdGVGaXJlRGV0YWlsKHRoaXMsIHByb3BlcnR5TmFtZSkpOyAvLyBEb24ndCBtZXNzIGFy
b3VuZCAtIGlmIHdlIGhhZCBmb3VuZCB0aGlzIHN0YXRpY2FsbHksIHdlIHdvdWxkIGhhdmUgaW52
Y2FsaWRhdGVkIGl0LgotICAgICAgICByZWcgPSAmcmVnaXN0ZXJBdChpdGVyLT52YWx1ZS5nZXRJ
bmRleCgpKTsKKyAgICAgICAgICAgIHNldC0+aW52YWxpZGF0ZShWYXJpYWJsZVdyaXRlRmlyZURl
dGFpbCh0aGlzLCBwcm9wZXJ0eU5hbWUpKTsgLy8gRG9uJ3QgbWVzcyBhcm91bmQgLSBpZiB3ZSBo
YWQgZm91bmQgdGhpcyBzdGF0aWNhbGx5LCB3ZSB3b3VsZCBoYXZlIGludmFsaWRhdGVkIGl0Lgor
ICAgICAgICByZWcgPSAmdmFyaWFibGVBdChvZmZzZXQpOwogICAgIH0KICAgICByZWctPnNldCh2
bSwgdGhpcywgdmFsdWUpOwogICAgIHJldHVybiB0cnVlOwpAQCAtMTE2LDcgKzExMSw3IEBAIHZv
aWQgSlNMZXhpY2FsRW52aXJvbm1lbnQ6OmdldE93bk5vbkluZGUKICAgICAgICAgZm9yIChTeW1i
b2xUYWJsZTo6TWFwOjppdGVyYXRvciBpdCA9IHRoaXNPYmplY3QtPnN5bWJvbFRhYmxlKCktPmJl
Z2luKGxvY2tlcik7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICAgICAgaWYgKGl0LT52YWx1
ZS5nZXRBdHRyaWJ1dGVzKCkgJiBEb250RW51bSAmJiAhc2hvdWxkSW5jbHVkZURvbnRFbnVtUHJv
cGVydGllcyhtb2RlKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGlm
ICghdGhpc09iamVjdC0+aXNWYWxpZChpdC0+dmFsdWUpKQorICAgICAgICAgICAgaWYgKCF0aGlz
T2JqZWN0LT5pc1ZhbGlkKGl0LT52YWx1ZS5zY29wZU9mZnNldCgpKSkKICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXIoZXhl
YywgaXQtPmtleS5nZXQoKSkpOwogICAgICAgICB9CkBAIC0xMzcsMTEgKzEzMiwxMyBAQCBpbmxp
bmUgYm9vbCBKU0xleGljYWxFbnZpcm9ubWVudDo6c3ltYm9sCiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgICAgIFN5bWJvbFRhYmxlRW50cnkmIGVudHJ5ID0gaXRlci0+dmFsdWU7CiAg
ICAgICAgIEFTU0VSVCghZW50cnkuaXNOdWxsKCkpOwotICAgICAgICBpZiAoIWlzVmFsaWQoZW50
cnkpKQorICAgICAgICAKKyAgICAgICAgU2NvcGVPZmZzZXQgb2Zmc2V0ID0gZW50cnkuc2NvcGVP
ZmZzZXQoKTsKKyAgICAgICAgaWYgKCFpc1ZhbGlkKG9mZnNldCkpCiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgICAgIAogICAgICAgICBlbnRyeS5zZXRBdHRyaWJ1dGVzKGF0dHJpYnV0
ZXMpOwotICAgICAgICByZWcgPSAmcmVnaXN0ZXJBdChlbnRyeS5nZXRJbmRleCgpKTsKKyAgICAg
ICAgcmVnID0gJnZhcmlhYmxlQXQob2Zmc2V0KTsKICAgICB9CiAgICAgcmVnLT5zZXQodm0sIHRo
aXMsIHZhbHVlKTsKICAgICByZXR1cm4gdHJ1ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTTGV4aWNhbEVudmlyb25tZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMZXhpY2FsRW52aXJvbm1lbnQuaAkocmV2aXNpb24gMTgw
NzA3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMZXhpY2FsRW52aXJvbm1l
bnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDgsIDIwMDksIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5LCAyMDEzLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MSwzMyAr
NDEsMjcgQEAgY2xhc3MgUmVnaXN0ZXI7CiAgICAgCiBjbGFzcyBKU0xleGljYWxFbnZpcm9ubWVu
dCA6IHB1YmxpYyBKU0Vudmlyb25tZW50UmVjb3JkIHsKIHByaXZhdGU6Ci0gICAgSlNMZXhpY2Fs
RW52aXJvbm1lbnQoVk0mLCBDYWxsRnJhbWUqLCBSZWdpc3RlciosIEpTU2NvcGUqLCBDb2RlQmxv
Y2sqKTsKKyAgICBKU0xleGljYWxFbnZpcm9ubWVudChWTSYsIFN0cnVjdHVyZSosIEpTU2NvcGUq
LCBTeW1ib2xUYWJsZSopOwogICAgIAogcHVibGljOgogICAgIHR5cGVkZWYgSlNFbnZpcm9ubWVu
dFJlY29yZCBCYXNlOwogCi0gICAgc3RhdGljIEpTTGV4aWNhbEVudmlyb25tZW50KiBjcmVhdGUo
Vk0mIHZtLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgUmVnaXN0ZXIqIHJlZ2lzdGVycywgSlNTY29w
ZSogY3VycmVudFNjb3BlLCBDb2RlQmxvY2sqIGNvZGVCbG9jaykKKyAgICBzdGF0aWMgSlNMZXhp
Y2FsRW52aXJvbm1lbnQqIGNyZWF0ZSgKKyAgICAgICAgVk0mIHZtLCBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU1Njb3BlKiBjdXJyZW50U2NvcGUsIFN5bWJvbFRhYmxlKiBzeW1ib2xU
YWJsZSkKICAgICB7Ci0gICAgICAgIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSA9IGNvZGVCbG9j
ay0+c3ltYm9sVGFibGUoKTsKLSAgICAgICAgQVNTRVJUKGNvZGVCbG9jay0+Y29kZVR5cGUoKSA9
PSBGdW5jdGlvbkNvZGUpOwotICAgICAgICBKU0xleGljYWxFbnZpcm9ubWVudCogbGV4aWNhbEVu
dmlyb25tZW50ID0gbmV3ICgKLSAgICAgICAgICAgIE5vdE51bGwsCi0gICAgICAgICAgICBhbGxv
Y2F0ZUNlbGw8SlNMZXhpY2FsRW52aXJvbm1lbnQ+KAotICAgICAgICAgICAgICAgIHZtLmhlYXAs
Ci0gICAgICAgICAgICAgICAgYWxsb2NhdGlvblNpemUoc3ltYm9sVGFibGUpCi0gICAgICAgICAg
ICApCi0gICAgICAgICkgSlNMZXhpY2FsRW52aXJvbm1lbnQodm0sIGNhbGxGcmFtZSwgcmVnaXN0
ZXJzLCBjdXJyZW50U2NvcGUsIGNvZGVCbG9jayk7Ci0gICAgICAgIGxleGljYWxFbnZpcm9ubWVu
dC0+ZmluaXNoQ3JlYXRpb24odm0pOwotICAgICAgICByZXR1cm4gbGV4aWNhbEVudmlyb25tZW50
OworICAgICAgICBKU0xleGljYWxFbnZpcm9ubWVudCogcmVzdWx0ID0KKyAgICAgICAgICAgIG5l
dyAoTm90TnVsbCwgYWxsb2NhdGlvblNpemUoc3ltYm9sVGFibGUpKQorICAgICAgICAgICAgSlNM
ZXhpY2FsRW52aXJvbm1lbnQodm0sIGdsb2JhbE9iamVjdC0+YWN0aXZhdGlvblN0cnVjdHVyZSgp
LCBjdXJyZW50U2NvcGUsIHN5bWJvbFRhYmxlKTsKKyAgICAgICAgcmVzdWx0LT5maW5pc2hDcmVh
dGlvbih2bSk7CiAgICAgfQotICAgICAgICAKKyAgICAKICAgICBzdGF0aWMgSlNMZXhpY2FsRW52
aXJvbm1lbnQqIGNyZWF0ZShWTSYgdm0sIENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU1Njb3BlKiBj
dXJyZW50U2NvcGUsIENvZGVCbG9jayogY29kZUJsb2NrKQogICAgIHsKLSAgICAgICAgcmV0dXJu
IGNyZWF0ZSh2bSwgY2FsbEZyYW1lLCBjYWxsRnJhbWUtPnJlZ2lzdGVycygpICsgY29kZUJsb2Nr
LT5mcmFtZVBvaW50ZXJPZmZzZXRUb0dldEFjdGl2YXRpb25SZWdpc3RlcnMoKSwgY3VycmVudFNj
b3BlLCBjb2RlQmxvY2spOworICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0g
Y2FsbEZyYW1lLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7CisgICAgICAgIFN5bWJvbFRhYmxlKiBz
eW1ib2xUYWJsZSA9IGNvZGVCbG9jay0+c3ltYm9sVGFibGUoKTsKKyAgICAgICAgcmV0dXJuIGNy
ZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBjdXJyZW50U2NvcGUsIHN5bWJvbHRhYmxlKTsKICAgICB9
Ci0KLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7
Ci0KKyAgICAgICAgCiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0
KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMg
dm9pZCBnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQ
cm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CiAKQEAgLTgxLDEyICs3NSw2IEBA
IHB1YmxpYzoKIAogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0s
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpIHsgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRl
KHZtLCBnbG9iYWxPYmplY3QsIGpzTnVsbCgpLCBUeXBlSW5mbyhBY3RpdmF0aW9uT2JqZWN0VHlw
ZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOyB9CiAKLSAgICBXcml0ZUJhcnJpZXJCYXNlPFVu
a25vd24+JiByZWdpc3RlckF0KGludCkgY29uc3Q7Ci0gICAgYm9vbCBpc1ZhbGlkSW5kZXgoaW50
KSBjb25zdDsKLSAgICBib29sIGlzVmFsaWQoY29uc3QgU3ltYm9sVGFibGVFbnRyeSYpIGNvbnN0
OwotICAgIGludCByZWdpc3RlcnNPZmZzZXQoKTsKLSAgICBzdGF0aWMgaW50IHJlZ2lzdGVyc09m
ZnNldChTeW1ib2xUYWJsZSopOwotCiBwcm90ZWN0ZWQ6CiAgICAgc3RhdGljIGNvbnN0IHVuc2ln
bmVkIFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJp
ZGVzR2V0UHJvcGVydHlOYW1lcyB8IEJhc2U6OlN0cnVjdHVyZUZsYWdzOwogCkBAIC05NiwzMiAr
ODQsMTMgQEAgcHJpdmF0ZToKICAgICBib29sIHN5bWJvbFRhYmxlR2V0KFByb3BlcnR5TmFtZSwg
UHJvcGVydHlTbG90JiwgYm9vbCYgc2xvdElzV3JpdGVhYmxlKTsKICAgICBib29sIHN5bWJvbFRh
YmxlUHV0KEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJv
dyk7CiAgICAgYm9vbCBzeW1ib2xUYWJsZVB1dFdpdGhBdHRyaWJ1dGVzKFZNJiwgUHJvcGVydHlO
YW1lLCBKU1ZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKTsKLQotICAgIHN0YXRpYyBzaXplX3Qg
YWxsb2NhdGlvblNpemUoU3ltYm9sVGFibGUqKTsKLSAgICBzdGF0aWMgc2l6ZV90IHN0b3JhZ2VP
ZmZzZXQoKTsKLQotICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogc3RvcmFnZSgpOyAvLyBjYXB0
dXJlQ291bnQoKSBudW1iZXIgb2YgcmVnaXN0ZXJzLgogfTsKIAotaW5saW5lIEpTTGV4aWNhbEVu
dmlyb25tZW50OjpKU0xleGljYWxFbnZpcm9ubWVudChWTSYgdm0sIENhbGxGcmFtZSogY2FsbEZy
YW1lLCBSZWdpc3RlciogcmVnaXN0ZXJzLCBKU1Njb3BlKiBjdXJyZW50U2NvcGUsIENvZGVCbG9j
ayogY29kZUJsb2NrKQotICAgIDogQmFzZSgKLSAgICAgICAgdm0sCi0gICAgICAgIGNhbGxGcmFt
ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5hY3RpdmF0aW9uU3RydWN0dXJlKCksCi0gICAgICAg
IHJlZ2lzdGVycywKLSAgICAgICAgY3VycmVudFNjb3BlLAotICAgICAgICBjb2RlQmxvY2stPnN5
bWJvbFRhYmxlKCkpCitpbmxpbmUgSlNMZXhpY2FsRW52aXJvbm1lbnQ6OkpTTGV4aWNhbEVudmly
b25tZW50KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTU2NvcGUqIGN1cnJlbnRTY29w
ZSwgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlKQorICAgIDogQmFzZSh2bSwgc3RydWN0dXJlLCBj
dXJyZW50U2NvcGUsIHN5bWJvbFRhYmxlKQogewotICAgIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJs
ZSA9IGNvZGVCbG9jay0+c3ltYm9sVGFibGUoKTsKLSAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4q
IHN0b3JhZ2UgPSB0aGlzLT5zdG9yYWdlKCk7Ci0gICAgc2l6ZV90IGNhcHR1cmVDb3VudCA9IHN5
bWJvbFRhYmxlLT5jYXB0dXJlQ291bnQoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNh
cHR1cmVDb3VudDsgKytpKQotICAgICAgICBuZXcgKE5vdE51bGwsICZzdG9yYWdlW2ldKSBXcml0
ZUJhcnJpZXI8VW5rbm93bj4oVW5kZWZpbmVkV3JpdGVCYXJyaWVyVGFnKTsKLSAgICBtX3JlZ2lz
dGVycyA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qPigK
LSAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4odGhpcykgKyByZWdpc3RlcnNPZmZzZXQo
c3ltYm9sVGFibGUpKTsKIH0KIAotSlNMZXhpY2FsRW52aXJvbm1lbnQqIGFzQWN0aXZhdGlvbihK
U1ZhbHVlKTsKLQogaW5saW5lIEpTTGV4aWNhbEVudmlyb25tZW50KiBhc0FjdGl2YXRpb24oSlNW
YWx1ZSB2YWx1ZSkKIHsKICAgICBBU1NFUlQoYXNPYmplY3QodmFsdWUpLT5pbmhlcml0cyhKU0xl
eGljYWxFbnZpcm9ubWVudDo6aW5mbygpKSk7CkBAIC0xMzMsNDkgKzEwMiw2IEBAIEFMV0FZU19J
TkxJTkUgSlNMZXhpY2FsRW52aXJvbm1lbnQqIFJlZ2kKICAgICByZXR1cm4gYXNBY3RpdmF0aW9u
KGpzVmFsdWUoKSk7CiB9CiAKLWlubGluZSBpbnQgSlNMZXhpY2FsRW52aXJvbm1lbnQ6OnJlZ2lz
dGVyc09mZnNldChTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUpCi17Ci0gICAgcmV0dXJuIHN0b3Jh
Z2VPZmZzZXQoKSArICgoc3ltYm9sVGFibGUtPmNhcHR1cmVDb3VudCgpIC0gc3ltYm9sVGFibGUt
PmNhcHR1cmVTdGFydCgpICAtIDEpICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpOwot
fQotCi1pbmxpbmUgc2l6ZV90IEpTTGV4aWNhbEVudmlyb25tZW50OjpzdG9yYWdlT2Zmc2V0KCkK
LXsKLSAgICByZXR1cm4gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mPHNpemVvZihXcml0ZUJhcnJp
ZXI8VW5rbm93bj4pPihzaXplb2YoSlNMZXhpY2FsRW52aXJvbm1lbnQpKTsKLX0KLQotaW5saW5l
IFdyaXRlQmFycmllcjxVbmtub3duPiogSlNMZXhpY2FsRW52aXJvbm1lbnQ6OnN0b3JhZ2UoKQot
ewotICAgIHJldHVybiByZWludGVycHJldF9jYXN0X3B0cjxXcml0ZUJhcnJpZXI8VW5rbm93bj4q
PigKLSAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4odGhpcykgKyBzdG9yYWdlT2Zmc2V0
KCkpOwotfQotCi1pbmxpbmUgc2l6ZV90IEpTTGV4aWNhbEVudmlyb25tZW50OjphbGxvY2F0aW9u
U2l6ZShTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUpCi17Ci0gICAgc2l6ZV90IG9iamVjdFNpemVJ
bkJ5dGVzID0gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mPHNpemVvZihXcml0ZUJhcnJpZXI8VW5r
bm93bj4pPihzaXplb2YoSlNMZXhpY2FsRW52aXJvbm1lbnQpKTsKLSAgICBzaXplX3Qgc3RvcmFn
ZVNpemVJbkJ5dGVzID0gc3ltYm9sVGFibGUtPmNhcHR1cmVDb3VudCgpICogc2l6ZW9mKFdyaXRl
QmFycmllcjxVbmtub3duPik7Ci0gICAgcmV0dXJuIG9iamVjdFNpemVJbkJ5dGVzICsgc3RvcmFn
ZVNpemVJbkJ5dGVzOwotfQotCi1pbmxpbmUgYm9vbCBKU0xleGljYWxFbnZpcm9ubWVudDo6aXNW
YWxpZEluZGV4KGludCBpbmRleCkgY29uc3QKLXsKLSAgICBpZiAoaW5kZXggPiBzeW1ib2xUYWJs
ZSgpLT5jYXB0dXJlU3RhcnQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChpbmRl
eCA8PSBzeW1ib2xUYWJsZSgpLT5jYXB0dXJlRW5kKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotaW5saW5lIGJvb2wgSlNMZXhpY2FsRW52aXJvbm1lbnQ6
OmlzVmFsaWQoY29uc3QgU3ltYm9sVGFibGVFbnRyeSYgZW50cnkpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIGlzVmFsaWRJbmRleChlbnRyeS5nZXRJbmRleCgpKTsKLX0KLQotaW5saW5lIFdyaXRlQmFy
cmllckJhc2U8VW5rbm93bj4mIEpTTGV4aWNhbEVudmlyb25tZW50OjpyZWdpc3RlckF0KGludCBp
bmRleCkgY29uc3QKLXsKLSAgICBBU1NFUlQoaXNWYWxpZEluZGV4KGluZGV4KSk7Ci0gICAgcmV0
dXJuIEJhc2U6OnJlZ2lzdGVyQXQoaW5kZXgpOwotfQotCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAog
I2VuZGlmIC8vIEpTTGV4aWNhbEVudmlyb25tZW50X2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTTmFtZVNjb3BlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU05hbWVTY29wZS5jcHAJKHJldmlzaW9uIDE4MDcwNykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTmFtZVNjb3BlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDcsMTQgKzQ3LDYgQEAgSlNOYW1lU2NvcGUqIEpTTmFtZVNjb3BlOjpjcmVhdGUoVk0m
IHZtLAogICAgIHJldHVybiBudWxscHRyOwogfQogCi12b2lkIEpTTmFtZVNjb3BlOjp2aXNpdENo
aWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi17Ci0gICAgSlNOYW1l
U2NvcGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNOYW1lU2NvcGUqPihjZWxsKTsKLSAgICBBU1NF
UlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7Ci0gICAgQmFzZTo6dmlz
aXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKLSAgICB2aXNpdG9yLmFwcGVuZCgmdGhp
c09iamVjdC0+bV9yZWdpc3RlclN0b3JlKTsKLX0KLQogSlNWYWx1ZSBKU05hbWVTY29wZTo6dG9U
aGlzKEpTQ2VsbCosIEV4ZWNTdGF0ZSogZXhlYywgRUNNQU1vZGUgZWNtYU1vZGUpCiB7CiAgICAg
aWYgKGVjbWFNb2RlID09IFN0cmljdE1vZGUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU05hbWVTY29wZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTTmFtZVNjb3BlLmgJKHJldmlzaW9uIDE4MDcwNykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTTmFtZVNjb3BlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDM4
ICs0NCwzNyBAQCBwdWJsaWM6CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KICAgICBzdGF0aWMg
VCogY3JlYXRlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNTY29wZSog
Y3VycmVudFNjb3BlLCBTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUsIEpTVmFsdWUgdmFsdWUpCiAg
ICAgewotICAgICAgICBUKiBzY29wZU9iamVjdCA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxs
PFQ+KHZtLmhlYXApKSBUKHZtLCBnbG9iYWxPYmplY3QsIGN1cnJlbnRTY29wZSwgc3ltYm9sVGFi
bGUpOworICAgICAgICBUKiBzY29wZU9iamVjdCA9IG5ldyAoCisgICAgICAgICAgICBOb3ROdWxs
LCBhbGxvY2F0ZUNlbGw8VD4odm0uaGVhcCwgYWxsb2NhdGlvblNpemVGb3JTY29wZVNpemUoMSkp
CisgICAgICAgICAgICBUKHZtLCBnbG9iYWxPYmplY3QsIGN1cnJlbnRTY29wZSwgc3ltYm9sVGFi
bGUpOwogICAgICAgICBzY29wZU9iamVjdC0+ZmluaXNoQ3JlYXRpb24odm0sIHZhbHVlKTsKICAg
ICAgICAgcmV0dXJuIHNjb3BlT2JqZWN0OwogICAgIH0KICAgICAKICAgICBzdGF0aWMgSlNOYW1l
U2NvcGUqIGNyZWF0ZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNTY29wZSogY3VycmVudFNjb3Bl
LCBTeW1ib2xUYWJsZSosIEpTVmFsdWUsIFR5cGUpOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRD
aGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogICAgIHN0YXRpYyBKU1ZhbHVlIHRvVGhp
cyhKU0NlbGwqLCBFeGVjU3RhdGUqLCBFQ01BTW9kZSk7CiAgICAgc3RhdGljIGJvb2wgZ2V0T3du
UHJvcGVydHlTbG90KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0
eVNsb3QmKTsKICAgICBzdGF0aWMgdm9pZCBwdXQoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVy
dHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKIAogICAgIERFQ0xBUkVfSU5GTzsK
IAotICAgIEpTVmFsdWUgdmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3JlZ2lzdGVyU3RvcmUuZ2V0
KCk7IH0KKyAgICBKU1ZhbHVlIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gdmFyaWFibGVBdCgwKS5n
ZXQoKTsgfQogCiBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYgdm0sIEpT
VmFsdWUgdmFsdWUpCiAgICAgewotICAgICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7Ci0g
ICAgICAgIG1fcmVnaXN0ZXJTdG9yZS5zZXQodm0sIHRoaXMsIHZhbHVlKTsKKyAgICAgICAgQmFz
ZTo6ZmluaXNoQ3JlYXRpb25VbmluaXRpYWxpemVkKHZtKTsKKyAgICAgICAgdmFyaWFibGVBdCgw
KS5zZXQodm0sIHRoaXMsIHZhbHVlKTsKICAgICB9CiAKICAgICBzdGF0aWMgY29uc3QgdW5zaWdu
ZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBCYXNlOjpT
dHJ1Y3R1cmVGbGFnczsKIAogICAgIEpTTmFtZVNjb3BlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIEpTU2NvcGUqIG5leHQsIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSkKLSAgICAgICAg
OiBCYXNlKHZtLCBzdHJ1Y3R1cmUsIHJlaW50ZXJwcmV0X2Nhc3Q8UmVnaXN0ZXIqPigmbV9yZWdp
c3RlclN0b3JlICsgMSksIG5leHQsIHN5bWJvbFRhYmxlKQorICAgICAgICA6IEJhc2Uodm0sIHN0
cnVjdHVyZSwgbmV4dCwgc3ltYm9sVGFibGUpCiAgICAgeworICAgICAgICBBU1NFUlQoc3ltYm9s
VGFibGUtPnNjb3BlU2l6ZSgpID09IDEpOwogICAgIH0KLQotcHJpdmF0ZToKLSAgICBXcml0ZUJh
cnJpZXI8VW5rbm93bj4gbV9yZWdpc3RlclN0b3JlOwogfTsKIAogfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJs
ZU9iamVjdC5jcHAJKHJldmlzaW9uIDE4MDcwNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMsIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0zMywzMiArMzMsMzAgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWludCBKU1NlZ21l
bnRlZFZhcmlhYmxlT2JqZWN0OjpmaW5kUmVnaXN0ZXJJbmRleCh2b2lkKiByZWdpc3RlckFkZHJl
c3MpCitTY29wZU9mZnNldCBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0OjpmaW5kUmVnaXN0ZXJJ
bmRleCh2b2lkKiByZWdpc3RlckFkZHJlc3MpCiB7CiAgICAgQ29uY3VycmVudEpJVExvY2tlciBs
b2NrZXIobV9sb2NrKTsKICAgICAKLSAgICBmb3IgKGludCBpID0gbV9yZWdpc3RlcnMuc2l6ZSgp
OyBpLS07KSB7CisgICAgZm9yICh1bnNpZ25lZCBpID0gbV9yZWdpc3RlcnMuc2l6ZSgpOyBpLS07
KSB7CiAgICAgICAgIGlmICgmbV9yZWdpc3RlcnNbaV0gIT0gcmVnaXN0ZXJBZGRyZXNzKQogICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgIHJldHVybiBpOworICAgICAgICByZXR1cm4gU2Nv
cGVPZmZzZXQoaSk7CiAgICAgfQogICAgIENSQVNIKCk7Ci0gICAgcmV0dXJuIC0xOworICAgIHJl
dHVybiBTY29wZU9mZnNldCgpOwogfQogCi1pbnQgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdDo6
YWRkUmVnaXN0ZXJzKGludCBudW1iZXJPZlJlZ2lzdGVyc1RvQWRkKQorU2NvcGVPZmZzZXQgSlNT
ZWdtZW50ZWRWYXJpYWJsZU9iamVjdDo6YWRkUmVnaXN0ZXJzKHVuc2lnbmVkIG51bWJlck9mUmVn
aXN0ZXJzVG9BZGQpCiB7CiAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsK
ICAgICAKLSAgICBBU1NFUlQobnVtYmVyT2ZSZWdpc3RlcnNUb0FkZCA+PSAwKTsKLSAgICAKICAg
ICBzaXplX3Qgb2xkU2l6ZSA9IG1fcmVnaXN0ZXJzLnNpemUoKTsKICAgICBtX3JlZ2lzdGVycy5n
cm93KG9sZFNpemUgKyBudW1iZXJPZlJlZ2lzdGVyc1RvQWRkKTsKICAgICAKICAgICBmb3IgKHNp
emVfdCBpID0gbnVtYmVyT2ZSZWdpc3RlcnNUb0FkZDsgaS0tOykKICAgICAgICAgbV9yZWdpc3Rl
cnNbb2xkU2l6ZSArIGldLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoanNVbmRlZmluZWQoKSk7CiAg
ICAgCi0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4ob2xkU2l6ZSk7CisgICAgcmV0dXJuIFNj
b3BlT2Zmc2V0KG9sZFNpemUpOwogfQogCiB2b2lkIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3Q6
OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2Jq
ZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdt
ZW50ZWRWYXJpYWJsZU9iamVjdC5oCShyZXZpc2lvbiAxODA3MDcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTU3LDI0ICs1NywyMyBAQCBjbGFzcyBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0IDog
cHVibGljCiBwdWJsaWM6CiAgICAgdHlwZWRlZiBKU1N5bWJvbFRhYmxlT2JqZWN0IEJhc2U7CiAK
LSAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHJlZ2lzdGVyQXQoaW50IGluZGV4KSB7IHJldHVy
biBtX3JlZ2lzdGVyc1tpbmRleF07IH0KKyAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHZhcmlh
YmxlQXQoU2NvcGVPZmZzZXQgb2Zmc2V0KSB7IHJldHVybiBtX3ZhcmlhYmxlc1tvZmZzZXQub2Zm
c2V0KCldOyB9CiAgICAgCiAgICAgLy8gVGhpcyBpcyBhIHNsb3cgbWV0aG9kIGNhbGwsIHdoaWNo
IHNlYXJjaGVzIHRoZSByZWdpc3RlciBiYW5rIHRvIGZpbmQgdGhlIGluZGV4CiAgICAgLy8gZ2l2
ZW4gYSBwb2ludGVyLiBJdCB3aWxsIENSQVNIKCkgaWYgaXQgZG9lcyBub3QgZmluZCB0aGUgcmVn
aXN0ZXIuIE9ubHkgdXNlIHRoaXMKICAgICAvLyBpbiBkZWJ1ZyBjb2RlIChsaWtlIGJ5dGVjb2Rl
IGR1bXBpbmcpLgotICAgIEpTX0VYUE9SVF9QUklWQVRFIGludCBmaW5kUmVnaXN0ZXJJbmRleCh2
b2lkKik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgU2NvcGVPZmZzZXQgZmluZFJlZ2lzdGVySW5k
ZXgodm9pZCopOwogICAgIAotICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogYXNzZXJ0UmVnaXN0
ZXJJc0luVGhpc09iamVjdChXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHJlZ2lzdGVyUG9pbnRlcikK
KyAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIGFzc2VydFZhcmlhYmxlSXNJblRoaXNPYmplY3Qo
V3JpdGVCYXJyaWVyPFVua25vd24+KiB2YXJpYWJsZVBvaW50ZXIpCiAgICAgewotI2lmICFBU1NF
UlRfRElTQUJMRUQKLSAgICAgICAgZmluZFJlZ2lzdGVySW5kZXgocmVnaXN0ZXJQb2ludGVyKTsK
LSNlbmRpZgorICAgICAgICBpZiAoIUFTU0VSVF9ESVNBQkxFRCkKKyAgICAgICAgICAgIGZpbmRS
ZWdpc3RlckluZGV4KHJlZ2lzdGVyUG9pbnRlcik7CiAgICAgICAgIHJldHVybiByZWdpc3RlclBv
aW50ZXI7CiAgICAgfQogICAgIAogICAgIC8vIEFkZHMgbnVtYmVyT2ZSZWdpc3RlcnNUb0FkZCBy
ZWdpc3RlcnMsIGluaXRpYWxpemVzIHRoZW0gdG8gVW5kZWZpbmVkLCBhbmQgcmV0dXJucwogICAg
IC8vIHRoZSBpbmRleCBvZiB0aGUgZmlyc3Qgb25lIGFkZGVkLgotICAgIEpTX0VYUE9SVF9QUklW
QVRFIGludCBhZGRSZWdpc3RlcnMoaW50IG51bWJlck9mUmVnaXN0ZXJzVG9BZGQpOworICAgIEpT
X0VYUE9SVF9QUklWQVRFIFNjb3BlT2Zmc2V0IGFkZFJlZ2lzdGVycyh1bnNpZ25lZCBudW1iZXJP
ZlJlZ2lzdGVyc1RvQWRkKTsKICAgICAKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9p
ZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmgJKHJl
dmlzaW9uIDE4MDcwNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9s
VGFibGVPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNzgsNyArNzgsNyBAQCBpbmxpbmUgYm9v
bCBzeW1ib2xUYWJsZUdldCgKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIFN5bWJvbFRhYmxl
RW50cnk6OkZhc3QgZW50cnkgPSBpdGVyLT52YWx1ZTsKICAgICBBU1NFUlQoIWVudHJ5LmlzTnVs
bCgpKTsKLSAgICBzbG90LnNldFZhbHVlKG9iamVjdCwgZW50cnkuZ2V0QXR0cmlidXRlcygpIHwg
RG9udERlbGV0ZSwgb2JqZWN0LT5yZWdpc3RlckF0KGVudHJ5LmdldEluZGV4KCkpLmdldCgpKTsK
KyAgICBzbG90LnNldFZhbHVlKG9iamVjdCwgZW50cnkuZ2V0QXR0cmlidXRlcygpIHwgRG9udERl
bGV0ZSwgb2JqZWN0LT52YXJpYWJsZUF0KGVudHJ5LnNjb3BlT2Zmc2V0KCkpLmdldCgpKTsKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtOTQsNyArOTQsNyBAQCBpbmxpbmUgYm9vbCBzeW1ib2xU
YWJsZUdldCgKICAgICBTeW1ib2xUYWJsZUVudHJ5OjpGYXN0IGVudHJ5ID0gaXRlci0+dmFsdWU7
CiAgICAgQVNTRVJUKCFlbnRyeS5pc051bGwoKSk7CiAgICAgZGVzY3JpcHRvci5zZXREZXNjcmlw
dG9yKAotICAgICAgICBvYmplY3QtPnJlZ2lzdGVyQXQoZW50cnkuZ2V0SW5kZXgoKSkuZ2V0KCks
IGVudHJ5LmdldEF0dHJpYnV0ZXMoKSB8IERvbnREZWxldGUpOworICAgICAgICBvYmplY3QtPnZh
cmlhYmxlQXQoZW50cnkuc2NvcGVPZmZzZXQoKSkuZ2V0KCksIGVudHJ5LmdldEF0dHJpYnV0ZXMo
KSB8IERvbnREZWxldGUpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0xMTAsNyArMTEwLDcg
QEAgaW5saW5lIGJvb2wgc3ltYm9sVGFibGVHZXQoCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICBTeW1ib2xUYWJsZUVudHJ5OjpGYXN0IGVudHJ5ID0gaXRlci0+dmFsdWU7CiAgICAgQVNTRVJU
KCFlbnRyeS5pc051bGwoKSk7Ci0gICAgc2xvdC5zZXRWYWx1ZShvYmplY3QsIGVudHJ5LmdldEF0
dHJpYnV0ZXMoKSB8IERvbnREZWxldGUsIG9iamVjdC0+cmVnaXN0ZXJBdChlbnRyeS5nZXRJbmRl
eCgpKS5nZXQoKSk7CisgICAgc2xvdC5zZXRWYWx1ZShvYmplY3QsIGVudHJ5LmdldEF0dHJpYnV0
ZXMoKSB8IERvbnREZWxldGUsIG9iamVjdC0+dmFyaWFibGVBdChlbnRyeS5zY29wZU9mZnNldCgp
KS5nZXQoKSk7CiAgICAgc2xvdElzV3JpdGVhYmxlID0gIWVudHJ5LmlzUmVhZE9ubHkoKTsKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTE0NSw3ICsxNDUsNyBAQCBpbmxpbmUgYm9vbCBzeW1ib2xU
YWJsZVB1dCgKICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xMzQ2MDEKICAgICAgICAgICAgIHNldC0+bm90aWZ5V3JpdGUodm0sIHZhbHVlLCBv
YmplY3QsIHByb3BlcnR5TmFtZSk7CiAgICAgICAgIH0KLSAgICAgICAgcmVnID0gJm9iamVjdC0+
cmVnaXN0ZXJBdChmYXN0RW50cnkuZ2V0SW5kZXgoKSk7CisgICAgICAgIHJlZyA9ICZvYmplY3Qt
PnZhcmlhYmxlQXQoZmFzdEVudHJ5LnNjb3BlT2Zmc2V0KCkpOwogICAgIH0KICAgICAvLyBJJ2Qg
cHJlZmVyIHdlIG5vdCBob2xkIGxvY2sgd2hpbGUgZXhlY3V0aW5nIGJhcnJpZXJzLCBzaW5jZSBJ
IHByZWZlciB0byByZXNlcnZlCiAgICAgLy8gdGhlIHJpZ2h0IGZvciBiYXJyaWVycyB0byBiZSBh
YmxlIHRvIHRyaWdnZXIgR0MuIEFuZCBJIGRvbid0IHdhbnQgdG8gaG9sZCBWTQpAQCAtMTczLDcg
KzE3Myw3IEBAIGlubGluZSBib29sIHN5bWJvbFRhYmxlUHV0V2l0aEF0dHJpYnV0ZXMKICAgICAg
ICAgaWYgKFZhcmlhYmxlV2F0Y2hwb2ludFNldCogc2V0ID0gZW50cnkud2F0Y2hwb2ludFNldCgp
KQogICAgICAgICAgICAgc2V0LT5ub3RpZnlXcml0ZSh2bSwgdmFsdWUsIG9iamVjdCwgcHJvcGVy
dHlOYW1lKTsKICAgICAgICAgZW50cnkuc2V0QXR0cmlidXRlcyhhdHRyaWJ1dGVzKTsKLSAgICAg
ICAgcmVnID0gJm9iamVjdC0+cmVnaXN0ZXJBdChlbnRyeS5nZXRJbmRleCgpKTsKKyAgICAgICAg
cmVnID0gJm9iamVjdC0+dmFyaWFibGVBdChlbnRyeS5zY29wZU9mZnNldCgpKTsKICAgICB9CiAg
ICAgcmVnLT5zZXQodm0sIG9iamVjdCwgdmFsdWUpOwogICAgIHJldHVybiB0cnVlOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlLmgJKHJldmlzaW9uIDE4MDcwNykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC01OCw3ICs1OCw4IEBAIGVudW0gSlNUeXBlIDogdWludDhfdCB7CiAgICAgUHVyZUZvcndhcmRp
bmdQcm94eVR5cGUsCiAgICAgSW1wdXJlUHJveHlUeXBlLAogICAgIFdpdGhTY29wZVR5cGUsCi0g
ICAgQXJndW1lbnRzVHlwZSwKKyAgICBEaXJlY3RBcmd1bWVudHNUeXBlLAorICAgIFNjb3BlZEFy
Z3VtZW50c1R5cGUsCiAKICAgICBJbnQ4QXJyYXlUeXBlLAogICAgIEludDE2QXJyYXlUeXBlLApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3V0T2ZCYW5kQXJndW1lbnRzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PdXRPZkJhbmRB
cmd1bWVudHMuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvT3V0T2ZCYW5kQXJndW1lbnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIxMyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiT3V0T2ZCYW5kQXJndW1lbnRzLmgiCisKKyNpbmNsdWRl
ICJKU0FyZ3VtZW50c0l0ZXJhdG9yLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorCituYW1l
c3BhY2UgSlNDIHsKKworU1RBVElDX0FTU0VSVF9JU19UUklWSUFMTFlfREVTVFJVQ1RJQkxFKE91
dE9mQmFuZEFyZ3VtZW50cyk7CisKK2NvbnN0IENsYXNzSW5mbyBPdXRPZkJhbmRBcmd1bWVudHM6
OnNfaW5mbyA9IHsgIkFyZ3VtZW50cyIsICZCYXNlOjpzX2luZm8sIDAsIENSRUFURV9NRVRIT0Rf
VEFCTEUoT3V0T2ZCYW5kQXJndW1lbnRzKSB9OworCitPdXRPZkJhbmRBcmd1bWVudHM6Ok91dE9m
QmFuZEFyZ3VtZW50cyhWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIDogQmFzZSh2
bSwgc3RydWN0dXJlLCBudWxscHRyKQorICAgICwgbV9zcGVjaWFsc01hdGVyaWFsaXplZChmYWxz
ZSkKK3sKK30KKworT3V0T2ZCYW5kQXJndW1lbnRzKiBPdXRPZkJhbmRBcmd1bWVudHM6OmNyZWF0
ZUVtcHR5KAorICAgIFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNGdW5j
dGlvbiogY2FsbGVlKQoreworICAgIE91dE9mQmFuZEFyZ3VtZW50cyogcmVzdWx0ID0gbmV3IChO
b3ROdWxsLCBhbGxvY2F0ZUNlbGw8T3V0T2ZCYW5kQXJndW1lbnRzPih2bS5oZWFwKSkKKyAgICAg
ICAgT3V0T2ZCYW5kQXJndW1lbnRzKHZtLCBnbG9iYWxPYmplY3QtPm91dE9mQmFuZEFyZ3VtZW50
c1N0cnVjdHVyZSgpKTsKKyAgICByZXN1bHQtPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICByZXN1
bHQtPm1fY2FsbGVlLnNldCh2bSwgdGhpcywgY2FsbGVlKTsKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCitPdXRPZkJhbmRBcmd1bWVudHMqIE91dE9mQmFuZEFyZ3VtZW50czo6Y3JlYXRlRW1wdHko
RXhlY1N0YXRlKiBleGVjLCBKU0Z1bmN0aW9uKiBjYWxsZWUpCit7CisgICAgLy8gTkIuIFNvbWUg
Y2xpZW50cyBtaWdodCBleHBlY3QgdGhhdCB0aGUgZ2xvYmFsIG9iamVjdCBvZiBvZiB0aGlzIG9i
amVjdCBpcyB0aGUgZ2xvYmFsIG9iamVjdAorICAgIC8vIG9mIHRoZSBjYWxsZWUuIFdlIGRvbid0
IGRvIHRoaXMgZm9yIG5vdywgYnV0IG1heWJlIHdlIHNob3VsZC4KKyAgICByZXR1cm4gY3JlYXRl
RW1wdHkoZXhlYy0+dm0oKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBjYWxsZWUpOwor
fQorCitPdXRPZkJhbmRBcmd1bWVudHMqIE91dE9mQmFuZEFyZ3VtZW50czo6Y3JlYXRlV2l0aElu
bGluZUZyYW1lKEV4ZWNTdGF0ZSogbXlGcmFtZSwgRXhlY1N0YXRlKiB0YXJnZXRGcmFtZSwgSW5s
aW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUsIEFyZ3VtZW50c01vZGUgbW9kZSkKK3sKKyAg
ICBWTSYgdm0gPSBteUZyYW1lLT52bSgpOworICAgIAorICAgIEpTRnVuY3Rpb24qIGNhbGxlZTsK
KyAgICAKKyAgICBpZiAoaW5saW5lQ2FsbEZyYW1lKQorICAgICAgICBjYWxsZWUgPSBqc0Nhc3Q8
SlNGdW5jdGlvbio+KGlubGluZUNhbGxGcmFtZS0+Y2FsbGVlUmVjb3ZlcnkucmVjb3Zlcih0YXJn
ZXRGcmFtZSkpOworICAgIGVsc2UKKyAgICAgICAgY2FsbGVlID0ganNDYXN0PEpTRnVuY3Rpb24q
Pih0YXJnZXRGcmFtZS0+Y2FsbGVlKCkpOworCisgICAgLy8gTkIuIEl0J3Mgc29tZXdoYXQgYXJi
aXRyYXJ5IHRoYXQgd2UgdGllIHRoZSBzdHJpY3RuZXNzIG9mIHRoaXMgb2JqZWN0IHRvIHRoZSBz
dHJpY3RuZXNzIG9mCisgICAgLy8gdGhlIGNhbGxlZS4KKyAgICBib29sIGlzU3RyaWN0TW9kZSA9
IGV4ZWN1dGFibGUtPmlzU3RyaWN0TW9kZSgpOworCisgICAgT3V0T2ZCYW5kQXJndW1lbnRzKiBy
ZXN1bHQgPSBjcmVhdGVFbXB0eShteUZyYW1lLCBjYWxsZWUpOworICAgIAorICAgIHVuc2lnbmVk
IGxlbmd0aDsKKyAgICBzd2l0Y2ggKG1vZGUpIHsKKyAgICBjYXNlIENsb25lZEFyZ3VtZW50c0Ny
ZWF0aW9uTW9kZTogeworICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lKSB7CisgICAgICAgICAg
ICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50UmVnaXN0ZXIuaXNWYWxpZCgpKQor
ICAgICAgICAgICAgICAgIGxlbmd0aCA9IGV4ZWMtPnIoaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVu
dENvdW50UmVnaXN0ZXIpLnVuYm94ZWRJbnQzMigpOworICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgIGxlbmd0aCA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKTsKKyAg
ICAgICAgICAgIGxlbmd0aC0tOworICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSBsZW5ndGg7IGktLTspCisgICAgICAgICAgICAgICAgcmVzdWx0LT5wdXREaXJlY3RJ
bmRleChteUZyYW1lLCBpLCBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50c1tpXS5yZWNvdmVyKHRh
cmdldEZyYW1lKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBsZW5ndGggPSB0YXJn
ZXRGcmFtZS0+YXJndW1lbnRDb3VudCgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBsZW5ndGg7IGktLTspCisgICAgICAgICAgICAgICAgcmVzdWx0LT5wdXRE
aXJlY3RJbmRleChteUZyYW1lLCBpLCB0YXJnZXRGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoaSkp
OworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBG
YWtlQXJndW1lbnRWYWx1ZXNDcmVhdGlvbk1vZGU6IHsKKyAgICAgICAgbGVuZ3RoID0gMDsKKyAg
ICAgICAgYnJlYWs7CisgICAgfSB9CisgICAgCisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIHZt
LnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIobGVuZ3RoKSk7CisgICAgaWYgKGlzU3Ry
aWN0TW9kZSkgeworICAgICAgICByZXN1bHQtPnB1dERpcmVjdEFjY2Vzc29yKGV4ZWMsIHZtLnBy
b3BlcnR5TmFtZXMtPmNhbGxlZSwgdGhpc09iamVjdC0+Z2xvYmFsT2JqZWN0KCktPnRocm93VHlw
ZUVycm9yR2V0dGVyU2V0dGVyKGV4ZWMtPnZtKCkpLCBEb250RGVsZXRlIHwgRG9udEVudW0gfCBB
Y2Nlc3Nvcik7CisgICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0QWNjZXNzb3IoZXhlYywgdm0ucHJv
cGVydHlOYW1lcy0+Y2FsbGVlLCB0aGlzT2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+dGhyb3dUeXBl
RXJyb3JHZXR0ZXJTZXR0ZXIoZXhlYy0+dm0oKSksIERvbnREZWxldGUgfCBEb250RW51bSB8IEFj
Y2Vzc29yKTsKKyAgICB9IGVsc2UKKyAgICAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIHZtLnBy
b3BlcnR5TmFtZXMtPmNhbGxlZSwgSlNWYWx1ZShjYWxsZWUpKTsKKyAgICAKKyAgICByZXN1bHQt
PkpTQ19OQVRJVkVfRlVOQ1RJT04odm0ucHJvcGVydHlOYW1lcy0+aXRlcmF0b3JQcml2YXRlTmFt
ZSwgYXJndW1lbnRzRnVuY0l0ZXJhdG9yLCBEb250RW51bSwgMCk7Cit9CisKK091dE9mQmFuZEFy
Z3VtZW50cyogT3V0T2ZCYW5kQXJndW1lbnRzOjpjcmVhdGVXaXRoTWFjaGluZUZyYW1lKEV4ZWNT
dGF0ZSogbXlGcmFtZSwgRXhlY1N0YXRlKiB0YXJnZXRGcmFtZSwgQXJndW1lbnRzTW9kZSBtb2Rl
KQoreworICAgIHJldHVybiBjcmVhdGVXaXRoSW5saW5lRnJhbWUobXlGcmFtZSwgdGFyZ2V0RnJh
bWUsIG51bGxwdHIsIG1vZGUpOworfQorCitTdHJ1Y3R1cmUqIE91dE9mQmFuZEFyZ3VtZW50czo6
Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNW
YWx1ZSBwcm90b3R5cGUpCit7CisgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9i
YWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3Mp
LCBpbmZvKCkpOworfQorCitib29sIE91dE9mQmFuZEFyZ3VtZW50czo6Z2V0T3duUHJvcGVydHlT
bG90KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIGlkZW50
LCBQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgT3V0T2ZCYW5kQXJndW1lbnRzKiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PE91dE9mQmFuZEFyZ3VtZW50cyo+KG9iamVjdCk7CisgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKKyAgICAKKyAgICBpZiAoaWRlbnQgPT0gdm0ucHJvcGVydHlOYW1lcy0+Y2Fs
bGVyCisgICAgICAgIHx8IGlkZW50ID09IHZtLnByb3BlcnR5TmFtZXMtPmNhbGxlZSkKKyAgICAg
ICAgdGhpc09iamVjdC0+bWF0ZXJpYWxpemVTcGVjaWFsc0lmTmVjZXNzYXJ5KGV4ZWMpOworICAg
IAorICAgIGlmIChCYXNlOjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgZXhlYywgaWRl
bnQsIHNsb3QpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICBpZiAoaWRlbnQgPT0g
dm0ucHJvcGVydHlOYW1lcy0+aXRlcmF0b3JQcml2YXRlTmFtZSkgeworICAgICAgICBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpOworICAg
ICAgICB0aGlzT2JqZWN0LT5KU0NfTkFUSVZFX0ZVTkNUSU9OKHZtLnByb3BlcnR5TmFtZXMtPml0
ZXJhdG9yUHJpdmF0ZU5hbWUsIGFyZ3VtZW50c0Z1bmNJdGVyYXRvciwgRG9udEVudW0sIDApOwor
ICAgICAgICBpZiAoSlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBleGVj
LCBpZGVudCwgc2xvdCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisg
ICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIE91dE9mQmFuZEFyZ3VtZW50czo6Z2V0T3duUHJv
cGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFt
ZUFycmF5JiBhcnJheSwgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit7CisgICAgT3V0T2ZCYW5kQXJn
dW1lbnRzKiB0aGlzT2JqZWN0ID0ganNDYXN0PE91dE9mQmFuZEFyZ3VtZW50cyo+KG9iamVjdCk7
CisgICAgdGhpc09iamVjdC0+bWF0ZXJpYWxpemVTcGVjaWFsc0lmTmVjZXNzYXJ5KGV4ZWMpOwor
ICAgIEJhc2U6OmdldE93blByb3BlcnR5TmFtZXModGhpc09iamVjdCwgZXhlYywgYXJyYXksIG1v
ZGUpOworfQorCit2b2lkIE91dE9mQmFuZEFyZ3VtZW50czo6cHV0KEpTQ2VsbCogY2VsbCwgRXhl
Y1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgaWRlbnQsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3Bl
cnR5U2xvdCYgc2xvdCkKK3sKKyAgICBPdXRPZkJhbmRBcmd1bWVudHMqIHRoaXNPYmplY3QgPSBq
c0Nhc3Q8T3V0T2ZCYW5kQXJndW1lbnRzKj4ob2JqZWN0KTsKKyAgICBWTSYgdm0gPSBleGVjLT52
bSgpOworICAgIAorICAgIGlmIChpZGVudCA9PSB2bS5wcm9wZXJ0eU5hbWVzLT5jYWxsZWUKKyAg
ICAgICAgfHwgaWRlbnQgPT0gdm0ucHJvcGVydHlOYW1lcy0+Y2FsbGVyKQorICAgICAgICB0aGlz
T2JqZWN0LT5tYXRlcmlhbGl6ZVNwZWNpYWxzSWZOZWNlc3NhcnkoZXhlYyk7CisgICAgCisgICAg
QmFzZTo6cHV0KHRoaXNPYmplY3QsIGV4ZWMsIGlkZW50LCB2YWx1ZSwgc2xvdCk7Cit9CisKK3Zv
aWQgT3V0T2ZCYW5kQXJndW1lbnRzOjpkZWxldGVQcm9wZXJ0eShKU0NlbGwqIGNlbGwsIEV4ZWNT
dGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIGlkZW50KQoreworICAgIE91dE9mQmFuZEFyZ3VtZW50
cyogdGhpc09iamVjdCA9IGpzQ2FzdDxPdXRPZkJhbmRBcmd1bWVudHMqPihvYmplY3QpOworICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgCisgICAgaWYgKGlkZW50ID09IHZtLnByb3BlcnR5
TmFtZXMtPmNhbGxlZQorICAgICAgICB8fCBpZGVudCA9PSB2bS5wcm9wZXJ0eU5hbWVzLT5jYWxs
ZXIpCisgICAgICAgIHRoaXNPYmplY3QtPm1hdGVyaWFsaXplU3BlY2lhbHNJZk5lY2Vzc2FyeShl
eGVjKTsKKyAgICAKKyAgICBCYXNlOjpkZWxldGVQcm9wZXJ0eSh0aGlzT2JqZWN0LCBleGVjLCBp
ZGVudCk7Cit9CisKK3ZvaWQgT3V0T2ZCYW5kQXJndW1lbnRzOjpkZWZpbmVPd25Qcm9wZXJ0eShK
U09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBpZGVudCwgY29u
c3QgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBib29sIHNob3VsZFRocm93KQorewor
ICAgIE91dE9mQmFuZEFyZ3VtZW50cyogdGhpc09iamVjdCA9IGpzQ2FzdDxPdXRPZkJhbmRBcmd1
bWVudHMqPihvYmplY3QpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgCisgICAgaWYg
KGlkZW50ID09IHZtLnByb3BlcnR5TmFtZXMtPmNhbGxlZQorICAgICAgICB8fCBpZGVudCA9PSB2
bS5wcm9wZXJ0eU5hbWVzLT5jYWxsZXIpCisgICAgICAgIHRoaXNPYmplY3QtPm1hdGVyaWFsaXpl
U3BlY2lhbHNJZk5lY2Vzc2FyeShleGVjKTsKKyAgICAKKyAgICByZXR1cm4gQmFzZTo6ZGVmaW5l
T3duUHJvcGVydHkob2JqZWN0LCBleGVjLCBpZGVudCwgZGVzY3JpcHRvciwgc2hvdWxkVGhyb3cp
OworfQorCit2b2lkIE91dE9mQmFuZEFyZ3VtZW50czo6bWF0ZXJpYWxpemVTcGVjaWFscyhFeGVj
U3RhdGUqIGV4ZWMpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoIXNwZWNpYWxzTWF0ZXJpYWxpemVk
KCkpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgCisgICAgRnVuY3Rpb25FeGVjdXRh
YmxlKiBleGVjdXRhYmxlID0ganNDYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KG1fY2FsbGVlLT5l
eGVjdXRhYmxlKCkpOworICAgIGJvb2wgaXNTdHJpY3RNb2RlID0gZXhlY3V0YWJsZS0+aXNTdHJp
Y3RNb2RlKCk7CisgICAgCisgICAgaWYgKGlzU3RyaWN0TW9kZSkgeworICAgICAgICBwdXREaXJl
Y3RBY2Nlc3NvcihleGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT5jYWxsZWUsIGdsb2JhbE9iamVjdCgp
LT50aHJvd1R5cGVFcnJvckdldHRlclNldHRlcih2bSksIERvbnREZWxldGUgfCBEb250RW51bSB8
IEFjY2Vzc29yKTsKKyAgICAgICAgcHV0RGlyZWN0QWNjZXNzb3IoZXhlYywgdm0ucHJvcGVydHlO
YW1lcy0+Y2FsbGVlLCBnbG9iYWxPYmplY3QoKS0+dGhyb3dUeXBlRXJyb3JHZXR0ZXJTZXR0ZXIo
dm0pLCBEb250RGVsZXRlIHwgRG9udEVudW0gfCBBY2Nlc3Nvcik7CisgICAgfSBlbHNlCisgICAg
ICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+Y2FsbGVlLCBKU1ZhbHVlKG1fY2Fs
bGVlLmdldCgpKSk7CisgICAgCisgICAgbV9jYWxsZWUuY2xlYXIoKTsKK30KKwordm9pZCBPdXRP
ZkJhbmRBcmd1bWVudHM6Om1hdGVyaWFsaXplU3BlY2lhbHNJZk5lY2Vzc2FyeShFeGVjU3RhdGUq
IGV4ZWMpCit7CisgICAgaWYgKCFzcGVjaWFsc01hdGVyaWFsaXplZCgpKQorICAgICAgICBtYXRl
cmlhbGl6ZVNwZWNpYWxzKGV4ZWMpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3V0T2ZCYW5kQXJndW1lbnRzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3V0T2ZCYW5kQXJndW1lbnRz
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PdXRPZkJh
bmRBcmd1bWVudHMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc3IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgT3V0T2ZCYW5kQXJn
dW1lbnRzX2gKKyNkZWZpbmUgT3V0T2ZCYW5kQXJndW1lbnRzX2gKKworI2luY2x1ZGUgIkFyZ3Vt
ZW50c01vZGUuaCIKKyNpbmNsdWRlICJKU09iamVjdC5oIgorCituYW1lc3BhY2UgSlNDIHsKKwor
Ly8gVGhpcyBpcyBhbiBBcmd1bWVudHMtY2xhc3Mgb2JqZWN0IHRoYXQgd2UgY3JlYXRlIHdoZW4g
eW91IGRvIGZ1bmN0aW9uLmFyZ3VtZW50cywgb3IgeW91IHNheQorLy8gImFyZ3VtZW50cyIgaW5z
aWRlIGEgZnVuY3Rpb24gaW4gc3RyaWN0IG1vZGUuIEl0IGJlaGF2ZXMgYWxtcHN0IGVudGlyZWx5
IGxpa2UgYW4gb3JkaW5hcnkKKy8vIEphdmFTY3JpcHQgb2JqZWN0LiBBbGwgb2YgdGhlIGFyZ3Vt
ZW50cyB2YWx1ZXMgYXJlIHNpbXBseSBjb3BpZWQgZnJvbSB0aGUgc3RhY2sgKHBvc3NpYmx5IHZp
YQorLy8gc29tZSBzb3BoaXN0aWNhdGVkIFZhbHVlUmVjb3ZlcnkncyBpZiBhbiBvcHRpbWl6aW5n
IGNvbXBpbGVyIGlzIGluIHBsYXkpIGFuZCB0aGUgYXBwcm9wcmlhdGUKKy8vIHByb3BlcnRpZXMg
b2YgdGhlIG9iamVjdCBhcmUgcG9wdWxhdGVkLiBUaGUgb25seSByZWFzb24gd2h5IHdlIG5lZWQg
YSBzcGVjaWFsIGNsYXNzIGlzIHRvIG1ha2UKKy8vIHRoZSBvYmplY3QgY2xhaW0gdG8gYmUgIkFy
Z3VtZW50cyIgZnJvbSBhIHRvU3RyaW5nIHN0YW5kcG9pbnQsIGFuZCB0byBhdm9pZCBtYXRlcmlh
bGl6aW5nIHRoZQorLy8gY2FsbGVyL2NhbGxlZSBwcm9wZXJ0aWVzIHVubGVzcyBzb21lb25lIGFz
a3MgZm9yIHRoZW0uCitjbGFzcyBPdXRPZkJhbmRBcmd1bWVudHMgOiBwdWJsaWMgSlNOb25GaW5h
bE9iamVjdCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBKU05vbkZpbmFsT2JqZWN0IEJhc2U7Cisg
ICAgCitwcml2YXRlOgorICAgIE91dE9mQmFuZEFyZ3VtZW50cyhWTSYsIFN0cnVjdHVyZSopOwor
CitwdWJsaWM6CisgICAgc3RhdGljIE91dE9mQmFuZEFyZ3VtZW50cyogY3JlYXRlRW1wdHkoVk0m
LCBKU0dsb2JhbE9iamVjdCosIEpTRnVuY3Rpb24qIGNhbGxlZSk7CisgICAgc3RhdGljIE91dE9m
QmFuZEFyZ3VtZW50cyogY3JlYXRlRW1wdHkoRXhlY1N0YXRlKiwgSlNGdW5jdGlvbiogY2FsbGVl
KTsKKyAgICBzdGF0aWMgT3V0T2ZCYW5kQXJndW1lbnRzKiBjcmVhdGVXaXRoSW5saW5lRnJhbWUo
RXhlY1N0YXRlKiBteUZyYW1lLCBFeGVjU3RhdGUqIHRhcmdldEZyYW1lLCBJbmxpbmVDYWxsRnJh
bWUqLCBBcmd1bWVudHNNb2RlKTsKKyAgICBzdGF0aWMgT3V0T2ZCYW5kQXJndW1lbnRzKiBjcmVh
dGVXaXRoTWFjaGluZUZyYW1lKEV4ZWNTdGF0ZSogbXlGcmFtZSwgRXhlY1N0YXRlKiB0YXJnZXRG
cmFtZSwgQXJndW1lbnRzTW9kZSk7CisgICAgCisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRl
U3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHByb3RvdHlwZSk7CisKKyAg
ICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNHZXRPd25Q
cm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzIHwgSlNPYmplY3Q6OlN0cnVj
dHVyZUZsYWdzOworCisgICAgREVDTEFSRV9JTkZPOworCitwcml2YXRlOgorICAgIHN0YXRpYyBi
b29sIGdldE93blByb3BlcnR5U2xvdChKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFt
ZSwgUHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhK
U09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2Rl
KTsKKyAgICBzdGF0aWMgdm9pZCBwdXQoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1l
LCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgdm9pZCBkZWxldGVQcm9w
ZXJ0eShKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUpOworICAgIHN0YXRpYyB2b2lk
IGRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBj
b25zdCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHNob3VsZFRocm93KTsKKyAgICAKKyAgICBi
b29sIHNwZWNpYWxzTWF0ZXJpYWxpemVkKCkgY29uc3QgeyByZXR1cm4gIW1fY2FsbGVlOyB9Cisg
ICAgdm9pZCBtYXRlcmlhbGl6ZVNwZWNpYWxzKEV4ZWNTdGF0ZSopOworICAgIHZvaWQgbWF0ZXJp
YWxpemVTcGVjaWFsc0lmTmVjZXNzYXJ5KEV4ZWNTdGF0ZSopOworICAgIAorICAgIFdyaXRlQmFy
cmllcjxKU0Z1bmN0aW9uKj4gbV9jYWxsZWU7IC8vIFNldCB0byBudWxscHRyIHdoZW4gd2UgbWF0
ZXJpYWxpemUgYWxsIG9mIG91ciBzcGVjaWFsIHByb3BlcnRpZXMuCit9OworCit9IC8vIG5hbWVz
cGFjZSBKU0MKKworI2VuZGlmIC8vIE91dE9mQmFuZEFyZ3VtZW50c19oCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlT2Zmc2V0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZU9mZnNldC5jcHAJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZU9mZnNldC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2NvcGVPZmZz
ZXQuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3ZvaWQgU2NvcGVPZmZzZXQ6OmR1bXAoUHJpbnRT
dHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBpZiAoISp0aGlzKSB7CisgICAgICAgIG91dC5wcmlu
dCgic2NvcGVJbnZhbGlkIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgb3V0
LnByaW50KCJzY29wZSIsIG9mZnNldCgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlT2Zmc2V0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVPZmZzZXQuaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlT2Zmc2V0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFNjb3BlT2Zmc2V0X2gKKyNkZWZpbmUgU2NvcGVP
ZmZzZXRfaAorCisjaW5jbHVkZSAiR2VuZXJpY09mZnNldC5oIgorI2luY2x1ZGUgPHd0Zi9Qcmlu
dFN0cmVhbS5oPgorCituYW1lc3BhY2UgSlNDIHsKKworLy8gVGhpcyBpcyBhbiBvZmZzZXQgaW50
byBhIHNjb3BlIG9mIHNvbWUga2luZC4gSXQgY291bGQgYmUgYW4gYWN0aXZhdGlvbiBzY29wZSBv
ciBpdCBjb3VsZCBiZSBhCisvLyBnbG9iYWwgb2JqZWN0LgorY2xhc3MgU2NvcGVPZmZzZXQgOiBw
dWJsaWMgR2VuZXJpY09mZnNldDxTY29wZU9mZnNldD4geworcHVibGljOgorICAgIFNjb3BlT2Zm
c2V0KCkgeyB9CisgICAgCisgICAgZXhwbGljaXQgU2NvcGVPZmZzZXQodW5zaWduZWQgb2Zmc2V0
KQorICAgICAgICA6IEdlbmVyaWNPZmZzZXQob2Zmc2V0KQorICAgIHsKKyAgICB9CisgICAgCisg
ICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7Cit9OworCit9IC8vIG5hbWVzcGFjZSBK
U0MKKworI2VuZGlmIC8vIFNjb3BlT2Zmc2V0X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHMuY3BwCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDEwMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2NvcGVkQXJn
dW1lbnRzLmgiCisKKyNpbmNsdWRlICJHZW5lcmljQXJndW1lbnRzSW5saW5lcy5oIgorI2luY2x1
ZGUgIkpTQXJndW1lbnRzSXRlcmF0b3IuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisKK25h
bWVzcGFjZSBKU0MgeworCitTVEFUSUNfQVNTRVJUX0lTX1RSSVZJQUxMWV9ERVNUUlVDVElCTEUo
U2NvcGVkQXJndW1lbnRzKTsKKworY29uc3QgQ2xhc3NJbmZvIFNjb3BlZEFyZ3VtZW50czo6c19p
bmZvID0geyAiQXJndW1lbnRzIiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJM
RShTY29wZWRBcmd1bWVudHMpIH07CisKK1Njb3BlZEFyZ3VtZW50czo6U2NvcGVkQXJndW1lbnRz
KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgOiBHZW5lcmljQXJndW1lbnRzKHZt
LCBzdHJ1Y3R1cmUpCisgICAgLCBtX292ZXJyb2RlVGhpbmdzKGZhbHNlKQoreworfQorCit2b2lk
IFNjb3BlZEFyZ3VtZW50czo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBKU0Z1bmN0aW9uKiBjYWxs
ZWUsIFNjb3BlZEFyZ3VtZW50c1RhYmxlKiB0YWJsZSwgSlNMZXhpY2FsRW52aXJvbm1lbnQqIHNj
b3BlKQoreworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICBtX2NhbGxlZS5zZXQo
dm0sIHRoaXMsIGNhbGxlZSk7CisgICAgbV90YWJsZS5zZXQodm0sIHRoaXMsIHRhYmxlKTsKKyAg
ICBtX3Njb3BlLnNldCh2bSwgdGhpcywgc2NvcGUpOworfQorCitTY29wZWRBcmd1bWVudHMqIFNj
b3BlZEFyZ3VtZW50czo6Y3JlYXRlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRnVu
Y3Rpb24qIGNhbGxlZSwgU2NvcGVkQXJndW1lbnRzVGFibGUqIHRhYmxlLCBKU0xleGljYWxFbnZp
cm9ubWVudCogc2NvcGUpCit7CisgICAgU2NvcGVkQXJndW1lbnRzKiByZXN1bHQgPQorICAgICAg
ICBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxTY29wZWRBcmd1bWVudHM+KHZtLmhlYXApKQor
ICAgICAgICAodm0sIHN0cnVjdHVyZSk7CisgICAgcmVzdWx0LT5maW5pc2hDcmVhdGlvbih2bSwg
Y2FsbGVlLCB0YWJsZSwgc2NvcGUpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgU2Nv
cGVkQXJndW1lbnRzOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit7CisgICAgU2NvcGVkQXJndW1lbnRzKiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8
U2NvcGVkQXJndW1lbnRzKj4oY2VsbCk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0
aGlzT2JqZWN0LCBpbmZvKCkpOworICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwg
dmlzaXRvcik7CisKKyAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9jYWxsZWUpOwor
ICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX3RhYmxlKTsKKyAgICB2aXNpdG9yLmFw
cGVuZCgmdGhpc09iamVjdC0+bV9zY29wZSk7Cit9CisKK1N0cnVjdHVyZSogU2NvcGVkQXJndW1l
bnRzOjpjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU1ZhbHVlIHByb3RvdHlwZSkKK3sKKyAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0s
IGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhTY29wZWRBcmd1bWVudHNUeXBlLCBT
dHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Cit9CisKK3ZvaWQgU2NvcGVkQXJndW1lbnRzOjpzbG93
RG93bkFuZFdhc3RlTWVtb3J5KFZNJiB2bSkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVCghbV9vdmVy
cm9kZVRoaW5ncyk7CisgICAgCisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5s
ZW5ndGgsIGpzTnVtYmVyKG1fdGFibGUtPmxlbmd0aCgpKSwgRG9udEVudW0pOworICAgIHB1dERp
cmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+Y2FsbGVlLCBtX2NhbGxlZS5nZXQoKSwgRG9udEVu
dW0pOworICAgIAorICAgIG1fb3ZlcnJvZGVUaGluZ3MgPSB0cnVlOworfQorCit2b2lkIFNjb3Bl
ZEFyZ3VtZW50czo6c2xvd0Rvd25BbmRXYXN0ZU1lbW9yeUlmTmVjZXNzYXJ5KFZNJiB2bSkKK3sK
KyAgICBpZiAoIW1fb3ZlcnJvZGVUaGluZ3MpCisgICAgICAgIHNsb3dEb3duQW5kV2FzdGVNZW1v
cnkodm0pOworfQorCit2b2lkIFNjb3BlZEFyZ3VtZW50czo6b3ZlcnJpZGVBcmd1bWVudChWTSYg
dm0sIHVpbnQzMl90IGkpCit7CisgICAgbV90YWJsZS5zZXQodm0sIHRoaXMsIG1fdGFibGUtPnNl
dCh2bSwgaSwgU2NvcGVPZmZzZXQoKSkpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmgJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1
bWVudHMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDExMiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFNjb3BlZEFyZ3VtZW50c19o
CisjZGVmaW5lIFNjb3BlZEFyZ3VtZW50c19oCisKKyNpbmNsdWRlICJHZW5lcmljQXJndW1lbnRz
LmgiCisKK25hbWVzcGFjZSBKU0MgeworCisvLyBUaGlzIGlzIGFuIEFyZ3VtZW50cy1jbGFzcyBv
YmplY3QgdGhhdCB3ZSBjcmVhdGUgd2hlbiB5b3Ugc2F5ICJhcmd1bWVudHMiIGluc2lkZSBhIGZ1
bmN0aW9uLAorLy8gYW5kIG9uZSBvciBtb3JlIG9mIHRoZSBhcmd1bWVudHMgbWF5IGJlIGNhcHR1
cmVkIGluIHRoZSBmdW5jdGlvbidzIGFjdGl2YXRpb24uIFRoZSBmdW5jdGlvbgorLy8gd2lsbCBj
b3B5IGFsbCBvZiBpdHMgYXJndW1lbnRzIGludG8gdGhlIGFjdGl2YXRpb24gYW5kIHRoZW4gY3Jl
YXRlIHRoaXMgb2JqZWN0LiBUaGlzIG9iamVjdAorLy8gd2lsbCB1c2UgdGhlIHN5bWJvbCB0YWJs
ZSdzIFNjb3BlZEFyZ3VtZW50c1RhYmxlIGFuZCB0aGUgYWN0aXZhdGlvbiB0byBoYW5kbGUgYWxs
IGluZGV4ZWQKKy8vIGxvb2t1cHMuCitjbGFzcyBTY29wZWRBcmd1bWVudHMgOiBwdWJsaWMgR2Vu
ZXJpY0FyZ3VtZW50czxTY29wZWRBcmd1bWVudHM+IHsKK3ByaXZhdGU6CisgICAgU2NvcGVkQXJn
dW1lbnRzKFZNJiwgU3RydWN0dXJlKik7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIEpT
RnVuY3Rpb24qIGNhbGxlZSwgU2NvcGVkQXJndW1lbnRzVGFibGUqLCBKU0xleGljYWxFbnZpcm9u
bWVudCopOworCitwdWJsaWM6CisgICAgc3RhdGljIFNjb3BlZEFyZ3VtZW50cyogY3JlYXRlKFZN
JiwgU3RydWN0dXJlKiwgSlNGdW5jdGlvbiogY2FsbGVlLCBTY29wZWRBcmd1bWVudHNUYWJsZSos
IEpTTGV4aWNhbEVudmlyb25tZW50Kik7CisgICAgCisgICAgc3RhdGljIHZvaWQgdmlzaXRDaGls
ZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIAorICAgIHVpbnQzMl90IGludGVybmFs
TGVuZ3RoKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3RhYmxlLT5sZW5ndGgoKTsK
KyAgICB9CisgICAgCisgICAgdWludDMyX3QgbGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QK
KyAgICB7CisgICAgICAgIGlmIChVTkxJS0VMWShtX292ZXJyb2RlTGVuZ3RoKSkKKyAgICAgICAg
ICAgIHJldHVybiBnZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCkudG9VSW50
MzIoZXhlYyk7CisgICAgICAgIHJldHVybiBpbnRlcm5hbExlbmd0aCgpOworICAgIH0KKyAgICAK
KyAgICBib29sIGNhbkFjY2Vzc0luZGV4UXVpY2tseSh1aW50MzJfdCBpKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIGkgPCBtX2xlbmd0aCAmJiAhIW1fdGFibGUtPmdldChpKTsKKyAgICB9
CisgICAgCisgICAgSlNWYWx1ZSBnZXRJbmRleFF1aWNrbHkodWludDMyX3QgaSkgY29uc3QKKyAg
ICB7CisgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGNhbkFjY2Vzc0lu
ZGV4UXVpY2tseShpKSk7CisgICAgICAgIHJldHVybiBtX3Njb3BlLT52YXJpYWJsZUF0KG1fdGFi
bGUtPmdldChpKSkuZ2V0KCk7CisgICAgfQorCisgICAgdm9pZCBzZXRJbmRleFF1aWNrbHkoVk0m
IHZtLCB1aW50MzJfdCBpLCBKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgQVNTRVJUX1dJ
VEhfU0VDVVJJVFlfSU1QTElDQVRJT04oY2FuQWNjZXNzSW5kZXhRdWlja2x5KGkpKTsKKyAgICAg
ICAgcmV0dXJuIG1fc2NvcGUtPnZhcmlhYmxlQXQobV90YWJsZS0+Z2V0KGkpKS5nZXQoKTsKKyAg
ICB9CisKKyAgICBXcml0ZUJhcnJpZXI8SlNGdW5jdGlvbj4mIGNhbGxlZSgpCisgICAgeworICAg
ICAgICByZXR1cm4gbV9jYWxsZWU7CisgICAgfQorICAgIAorICAgIFdyaXRlQmFycmllcjxVbmtu
b3duPiYgYXJndW1lbnQoQ2FwdHVyZWRBcmd1bWVudHNPZmZzZXQgb2Zmc2V0KQorICAgIHsKKyAg
ICAgICAgQVNTRVJUKG9mZnNldCk7CisgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJ
Q0FUSU9OKG9mZnNldC5vZmZzZXQoKSA8IG1fbGVuZ3RoKTsKKyAgICAgICAgcmV0dXJuIHN0b3Jh
Z2UoKVtvZmZzZXQub2Zmc2V0KCldOworICAgIH0KKyAgICAKKyAgICBib29sIG92ZXJyb2RlVGhp
bmdzKCkgY29uc3QgeyByZXR1cm4gbV9vdmVycm9kZVRoaW5nczsgfQorICAgIHZvaWQgc2xvd0Rv
d25BbmRXYXN0ZU1lbW9yeShWTSYpOworICAgIHZvaWQgc2xvd0Rvd25BbmRXYXN0ZU1lbW9yeUlm
TmVjZXNzYXJ5KFZNJik7CisgICAgdm9pZCBvdmVycmlkZUFyZ3VtZW50KFZNJiB2bSwgdWludDMy
X3QgaSk7CisgICAgCisgICAgREVDTEFSRV9JTkZPOworICAgIAorICAgIHN0YXRpYyBTdHJ1Y3R1
cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5
cGUpOworICAgIAorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZUYWJsZSgpIHsgcmV0dXJu
IE9CSkVDVF9PRkZTRVRPRihTY29wZWRBcmd1bWVudHMsIG1fdGFibGUpOyB9CisgICAgc3RhdGlj
IHB0cmRpZmZfdCBvZmZzZXRPZlNjb3BlKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFNjb3Bl
ZEFyZ3VtZW50cywgbV9zY29wZSk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mT3Zl
cnJvZGVUaGluZ3MoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoU2NvcGVkQXJndW1lbnRzLCBt
X292ZXJyb2RlVGhpbmdzKTsgfQorCitwcml2YXRlOgorICAgIGJvb2wgbV9vdmVycm9kZVRoaW5n
czsgLy8gVHJ1ZSBpZiBsZW5ndGgsIGNhbGxlZSwgYW5kIGNhbGxlciBhcmUgZnVsbHkgbWF0ZXJp
YWxpemVkIGluIHRoZSBvYmplY3QuCisgICAgV3JpdGVCYXJyaWVyPEpTRnVuY3Rpb24qPiBtX2Nh
bGxlZTsKKyAgICBXcml0ZUJhcnJpZXI8U2NvcGVkQXJndW1lbnRzVGFibGU+IG1fdGFibGU7Cisg
ICAgV3JpdGVCYXJyaWVyPEpTTGV4aWNhbEVudmlyb25tZW50PiBtX3Njb3BlOworfTsKKworfSAv
LyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBTY29wZWRBcmd1bWVudHNfaAorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHNUYWJsZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50c1Rh
YmxlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29w
ZWRBcmd1bWVudHNUYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTQgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBTY29wZWRB
cmd1bWVudHNUYWJsZV9oCisjZGVmaW5lIFNjb3BlZEFyZ3VtZW50c1RhYmxlX2gKKworI2luY2x1
ZGUgIkpTQ2VsbC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworLy8gVGhpcyBjbGFzcydzIG9ubHkg
am9iIGlzIHRvIGhvbGQgb250byB0aGUgbGlzdCBvZiBTY29wZU9mZnNldHMgZm9yIGVhY2ggYXJn
dW1lbnQgdGhhdCBhCisvLyBmdW5jdGlvbiBoYXMuIE1vc3Qgb2YgdGhlIHRpbWUsIHRoZSBCeXRl
Y29kZUdlbmVyYXRvciB3aWxsIGNyZWF0ZSBvbmUgb2YgdGhlc2UgYW5kIGl0IHdpbGwKKy8vIG5l
dmVyIGJlIG1vZGlmaWVkIHN1YnNlcXVlbnRseS4gVGhlcmUgaXMgYSByYXJlIGNhc2Ugd2hlcmUg
YSBTY29wZWRBcmd1bWVudHMgb2JqZWN0IGlzIGNyZWF0ZWQKKy8vIGFuZCBhbGlhc2VzIG9uZSBv
ZiB0aGVzZSBhbmQgdGhlbiBkZWNpZGVzIHRvIG1vZGlmeSBpdDsgaW4gdGhhdCBjYXNlIHdlIGRv
IGNvcHktb24td3JpdGUuIFRoaXMKKy8vIG1ha2VzIHNlbnNlIGJlY2F1c2Ugc3VjaCBtb2RpZmlj
YXRpb25zIGFyZSBzbyB1bmNvbW1vbi4gWW91J2QgaGF2ZSB0byBkbyBzb21ldGhpbmcgY3Jhenkg
bGlrZQorLy8gImRlbGV0ZSBhcmd1bWVudHNbaV0iIG9yIHNvbWUgdmFyaWFudCBvZiBkZWZpbmVP
d25Qcm9wZXJ0eS4KK2NsYXNzIFNjb3BlZEFyZ3VtZW50cyA6IHB1YmxpYyBKU0NlbGwgeworcHVi
bGljOgorICAgIHR5cGVkZWYgSlNDZWxsIEJhc2U7CisgICAgCisgICAgc3RhdGljIGNvbnN0IGJv
b2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzSW1t
b3J0YWxTdHJ1Y3R1cmUgPSB0cnVlOworCitwcml2YXRlOgorICAgIFNjb3BlZEFyZ3VtZW50c1Rh
YmxlKFZNJik7CisgICAgflNjb3BlZEFyZ3VtZW50c1RhYmxlKCk7CisKK3B1YmxpYzoKKyAgICBz
dGF0aWMgU2NvcGVkQXJndW1lbnRzVGFibGUqIGNyZWF0ZShWTSYpOworICAgIAorICAgIFNjb3Bl
ZEFyZ3VtZW50cyogY2xvbmUoVk0mKTsKKyAgICAKKyAgICB1aW50MzJfdCBsZW5ndGgoKSBjb25z
dCB7IHJldHVybiBtX2xlbmd0aDsgfQorICAgIFNjb3BlZEFyZ3VtZW50c1RhYmxlKiBzZXRMZW5n
dGgoVk0mLCB1aW50MzJfdCBuZXdMZW5ndGgpOworICAgIAorICAgIFNjb3BlT2Zmc2V0IGdldCh1
aW50MzJfdCBpKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1Q
TElDQVRJT04oaSA8IG1fbGVuZ3RoKTsKKyAgICAgICAgcmV0dXJuIG1fYXJndW1lbnRzW2ldOwor
ICAgIH0KKyAgICAKKyAgICB2b2lkIGxvY2soKQorICAgIHsKKyAgICAgICAgbV9sb2NrZWQgPSB0
cnVlOworICAgIH0KKyAgICAKKyAgICBTY29wZWRBcmd1bWVudHMqIHNldChWTSYgdm0sIHVpbnQz
Ml90IGksIFNjb3BlT2Zmc2V0IHZhbHVlKQorICAgIHsKKyAgICAgICAgU2NvcGVkQXJndW1lbnRz
KiByZXN1bHQ7CisgICAgICAgIGlmIChVTkxJS0VMWShtX2xvY2tlZCkpCisgICAgICAgICAgICBy
ZXN1bHQgPSBjbG9uZSh2bSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJlc3VsdCA9IHRo
aXM7CisgICAgICAgIHJlc3VsdC0+c2V0RGlyZWN0KGksIHZhbHVlKTsKKyAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgREVDTEFSRV9JTkZPOworICAgIAorICAgIHN0YXRp
YyBwdHJkaWZmX3Qgb2Zmc2V0T2ZMZW5ndGgoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoU2Nv
cGVkQXJndW1lbnRzLCBtX2xlbmd0aCk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9m
QXJndW1lbnRzKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFNjb3BlZEFyZ3VtZW50cywgbV9h
cmd1bWVudHMpOyB9CisKK3ByaXZhdGU6CisgICAgdWludDMyX3QgbV9sZW5ndGg7CisgICAgYm9v
bCBtX2xvY2tlZDsgLy8gQmVpbmcgbG9ja2VkIG1lYW5zIHRoYXQgdGhlcmUgYXJlIG11bHRpcGxl
IHJlZmVyZW5jZXMgdG8gdGhpcyBvYmplY3QgYW5kIG5vbmUgb2YgdGhlbSBleHBlY3QgdG8gc2Vl
IHRoZSBvdGhlcnMnIG1vZGlmaWNhdGlvbnMuIFRoaXMgbWVhbnMgdGhhdCBtb2RpZmljYXRpb25z
IG5lZWQgdG8gbWFrZSBhIGNvcHkgZmlyc3QuCisgICAgc3RkOjp1bmlxdWVfcHRyPFNjb3BlT2Zm
c2V0W10+IG1fYXJndW1lbnRzOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAv
LyBTY29wZWRBcmd1bWVudHNUYWJsZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N5bWJvbFRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TeW1ib2xUYWJsZS5jcHAJKHJldmlzaW9uIDE4MDcwNykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTQgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE0LCAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMTM3LDI5ICsxMzcsMjIgQEAgdm9pZCBTeW1ib2xUYWJsZTo6V2F0Y2hwb2ludENs
ZWFudXA6OmZpbgogICAgIH0KIH0KIAotU3ltYm9sVGFibGUqIFN5bWJvbFRhYmxlOjpjbG9uZUNh
cHR1cmVkTmFtZXMoVk0mIHZtKQorU3ltYm9sVGFibGUqIFN5bWJvbFRhYmxlOjpjbG9uZVNjb3Bl
UGFydChWTSYgdm0pCiB7CiAgICAgU3ltYm9sVGFibGUqIHJlc3VsdCA9IFN5bWJvbFRhYmxlOjpj
cmVhdGUodm0pOwogICAgIAotICAgIHJlc3VsdC0+bV9wYXJhbWV0ZXJDb3VudEluY2x1ZGluZ1Ro
aXMgPSBtX3BhcmFtZXRlckNvdW50SW5jbHVkaW5nVGhpczsKICAgICByZXN1bHQtPm1fdXNlc05v
blN0cmljdEV2YWwgPSBtX3VzZXNOb25TdHJpY3RFdmFsOwotICAgIHJlc3VsdC0+bV9jYXB0dXJl
U3RhcnQgPSBtX2NhcHR1cmVTdGFydDsKLSAgICByZXN1bHQtPm1fY2FwdHVyZUVuZCA9IG1fY2Fw
dHVyZUVuZDsKIAogICAgIGZvciAoYXV0byBpdGVyID0gbV9tYXAuYmVnaW4oKSwgZW5kID0gbV9t
YXAuZW5kKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKLSAgICAgICAgaWYgKCFpc0NhcHR1cmVk
KGl0ZXItPnZhbHVlLmdldEluZGV4KCkpKQorICAgICAgICBpZiAoIWl0ZXItPnZhbHVlLnZhck9m
ZnNldCgpLmlzU2NvcGUoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICByZXN1bHQt
Pm1fbWFwLmFkZCgKICAgICAgICAgICAgIGl0ZXItPmtleSwKLSAgICAgICAgICAgIFN5bWJvbFRh
YmxlRW50cnkoaXRlci0+dmFsdWUuZ2V0SW5kZXgoKSwgaXRlci0+dmFsdWUuZ2V0QXR0cmlidXRl
cygpKSk7CisgICAgICAgICAgICBTeW1ib2xUYWJsZUVudHJ5KGl0ZXItPnZhbHVlLnZhck9mZnNl
dCgpLCBpdGVyLT52YWx1ZS5nZXRBdHRyaWJ1dGVzKCkpKTsKICAgICB9CiAgICAgCi0gICAgaWYg
KG1fc2xvd0FyZ3VtZW50cykgewotICAgICAgICByZXN1bHQtPm1fc2xvd0FyZ3VtZW50cyA9IHN0
ZDo6bWFrZV91bmlxdWU8U2xvd0FyZ3VtZW50W10+KHBhcmFtZXRlckNvdW50KCkpOwotICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBwYXJhbWV0ZXJDb3VudCgpOyBpLS07KQotICAgICAgICAgICAg
cmVzdWx0LT5tX3Nsb3dBcmd1bWVudHNbaV0gPSBtX3Nsb3dBcmd1bWVudHNbaV07Ci0gICAgfQot
CisgICAgcmVzdWx0LT5tX2FyZ3VtZW50cyA9IGFyZ3VtZW50cygpOworICAgIAogICAgIGlmICht
X3R5cGVQcm9maWxpbmdSYXJlRGF0YSkgewogICAgICAgICByZXN1bHQtPm1fdHlwZVByb2ZpbGlu
Z1JhcmVEYXRhID0gc3RkOjptYWtlX3VuaXF1ZTxUeXBlUHJvZmlsaW5nUmFyZURhdGE+KCk7CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuaAkocmV2
aXNpb24gMTgwNzA3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFi
bGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDcsIDIwMDgsIDIwMTItMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMTItMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMxLDYgKzMx
LDcgQEAKIAogI2luY2x1ZGUgIkNvbmN1cnJlbnRKSVRMb2NrLmgiCiAjaW5jbHVkZSAiSlNPYmpl
Y3QuaCIKKyNpbmNsdWRlICJTY29wZWRBcmd1bWVudHNUYWJsZS5oIgogI2luY2x1ZGUgIlR5cGVM
b2NhdGlvbi5oIgogI2luY2x1ZGUgIlZhcmlhYmxlV2F0Y2hwb2ludFNldC5oIgogI2luY2x1ZGUg
PG1lbW9yeT4KQEAgLTM5LDI0ICs0MCw2IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1zdHJ1Y3Qg
U2xvd0FyZ3VtZW50IHsKLXB1YmxpYzoKLSAgICBlbnVtIFN0YXR1cyB7Ci0gICAgICAgIE5vcm1h
bCA9IDAsCi0gICAgICAgIENhcHR1cmVkID0gMSwKLSAgICAgICAgRGVsZXRlZCA9IDIKLSAgICB9
OwotCi0gICAgU2xvd0FyZ3VtZW50KCkKLSAgICAgICAgOiBzdGF0dXMoTm9ybWFsKQotICAgICAg
ICAsIGluZGV4KDApCi0gICAgewotICAgIH0KLQotICAgIFN0YXR1cyBzdGF0dXM7Ci0gICAgaW50
IGluZGV4OyAvLyBJZiBzdGF0dXMgaXMgJ0RlbGV0ZWQnLCBpbmRleCBpcyBib2d1cy4KLX07Ci0K
IHN0YXRpYyBBTFdBWVNfSU5MSU5FIGludCBtaXNzaW5nU3ltYm9sTWFya2VyKCkgeyByZXR1cm4g
c3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKTsgfQogCiAvLyBUaGUgYml0IHR3aWRkbGlu
ZyBpbiB0aGlzIGNsYXNzIGFzc3VtZXMgdGhhdCBldmVyeSByZWdpc3RlciBpbmRleCBpcyBhCkBA
IC04Niw2ICs2OSwyOCBAQCBzdGF0aWMgQUxXQVlTX0lOTElORSBpbnQgbWlzc2luZ1N5bWJvbE1h
CiAvLyBjb3B5OiAgICAgU3ltYm9sVGFibGVFbnRyeSAtLT4gRmF0RW50cnkgLS0tLS1eCiAKIHN0
cnVjdCBTeW1ib2xUYWJsZUVudHJ5IHsKK3ByaXZhdGU6CisgICAgc3RhdGljIFZhck9mZnNldCB2
YXJPZmZzZXRGcm9tQml0cyhpbnRwdHJfdCBiaXRzKQorICAgIHsKKyAgICAgICAgVmFyS2luZCBr
aW5kOworICAgICAgICBpZiAoYml0cyAmIFN0YWNrRmxhZykKKyAgICAgICAgICAgIGtpbmQgPSBT
dGFja1ZhcktpbmQ7CisgICAgICAgIGVsc2UgaWYgKGJpdHMgJiBDYXB0dXJlZEFyZ3VtZW50Rmxh
ZykKKyAgICAgICAgICAgIGtpbmQgPSBDYXB0dXJlZEFyZ3VtZW50S2luZDsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAga2luZCA9IFNjb3BlVmFyS2luZDsKKyAgICAgICAgcmV0dXJuIFZhck9m
ZnNldDo6YXNzZW1ibGUoa2luZCwgc3RhdGljX2Nhc3Q8aW50PihiaXRzID4+IEZsYWdCaXRzKSk7
CisgICAgfQorICAgIAorICAgIHN0YXRpYyBTY29wZU9mZnNldCBzY29wZU9mZnNldEZyb21CaXRz
KGludHB0cl90IGJpdHMpCisgICAgeworICAgICAgICBBU1NFUlQoIShiaXRzICYgU3RhY2tGbGFn
KSk7CisgICAgICAgIEFTU0VSVCghKGJpdHMgJiBDYXB0dXJlZEFyZ3VtZW50RmxhZykpOworICAg
ICAgICByZXR1cm4gU2NvcGVPZmZzZXQoc3RhdGljX2Nhc3Q8aW50PihiaXRzID4+IEZsYWdCaXRz
KSk7CisgICAgfQorCitwdWJsaWM6CisgICAgCiAgICAgLy8gVXNlIHRoZSBTeW1ib2xUYWJsZUVu
dHJ5OjpGYXN0IGNsYXNzLCBlaXRoZXIgdmlhIGltcGxpY2l0IGNhc3Qgb3IgYnkgY2FsbGluZwog
ICAgIC8vIGdldEZhc3QoKSwgd2hlbiB5b3UgKDEpIG9ubHkgY2FyZSBhYm91dCBpc051bGwoKSwg
Z2V0SW5kZXgoKSwgYW5kIGlzUmVhZE9ubHkoKSwKICAgICAvLyBhbmQgKDIpIHlvdSBhcmUgaW4g
YSBob3QgcGF0aCB3aGVyZSB5b3UgbmVlZCB0byBtaW5pbWl6ZSB0aGUgbnVtYmVyIG9mIHRpbWVz
CkBAIC0xMDcsMTEgKzExMiwxOSBAQCBzdHJ1Y3QgU3ltYm9sVGFibGVFbnRyeSB7CiAgICAgICAg
ICAgICByZXR1cm4gIShtX2JpdHMgJiB+U2xpbUZsYWcpOwogICAgICAgICB9CiAKLSAgICAgICAg
aW50IGdldEluZGV4KCkgY29uc3QKKyAgICAgICAgVmFyT2Zmc2V0IHZhck9mZnNldCgpIGNvbnN0
CiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KG1fYml0cyA+
PiBGbGFnQml0cyk7CisgICAgICAgICAgICByZXR1cm4gdmFyT2Zmc2V0RnJvbUJpdHMobV9iaXRz
KTsKICAgICAgICAgfQotICAgIAorICAgICAgICAKKyAgICAgICAgLy8gQXNzZXJ0cyBpZiB0aGUg
b2Zmc2V0IGlzIGFueXRoaW5nIGJ1dCBhIHNjb3BlIG9mZnNldC4gVGhpcyBzdHJ1Y3R1cmVzIHRo
ZSBhc3NlcnRpb25zCisgICAgICAgIC8vIGluIGEgd2F5IHRoYXQgbWF5IHJlc3VsdCBpbiBiZXR0
ZXIgY29kZSwgZXZlbiBpbiByZWxlYXNlLCB0aGFuIGRvaW5nCisgICAgICAgIC8vIHZhck9mZnNl
dCgpLnNjb3BlT2Zmc2V0KCkuCisgICAgICAgIFNjb3BlT2Zmc2V0IHNjb3BlT2Zmc2V0KCkgY29u
c3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHNjb3BlT2Zmc2V0RnJvbUJpdHMobV9i
aXRzKTsKKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgYm9vbCBpc1JlYWRPbmx5KCkgY29u
c3QKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIG1fYml0cyAmIFJlYWRPbmx5RmxhZzsK
QEAgLTE0MiwxOCArMTU1LDE4IEBAIHN0cnVjdCBTeW1ib2xUYWJsZUVudHJ5IHsKICAgICB7CiAg
ICAgfQogCi0gICAgU3ltYm9sVGFibGVFbnRyeShpbnQgaW5kZXgpCisgICAgU3ltYm9sVGFibGVF
bnRyeShWYXJPZmZzZXQgb2Zmc2V0KQogICAgICAgICA6IG1fYml0cyhTbGltRmxhZykKICAgICB7
Ci0gICAgICAgIEFTU0VSVChpc1ZhbGlkSW5kZXgoaW5kZXgpKTsKLSAgICAgICAgcGFjayhpbmRl
eCwgZmFsc2UsIGZhbHNlKTsKKyAgICAgICAgQVNTRVJUKGlzVmFsaWRWYXJPZmZzZXQob2Zmc2V0
KSk7CisgICAgICAgIHBhY2sob2Zmc2V0LCBmYWxzZSwgZmFsc2UpOwogICAgIH0KIAotICAgIFN5
bWJvbFRhYmxlRW50cnkoaW50IGluZGV4LCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQorICAgIFN5bWJv
bFRhYmxlRW50cnkoVmFyT2Zmc2V0IG9mZnNldCwgdW5zaWduZWQgYXR0cmlidXRlcykKICAgICAg
ICAgOiBtX2JpdHMoU2xpbUZsYWcpCiAgICAgewotICAgICAgICBBU1NFUlQoaXNWYWxpZEluZGV4
KGluZGV4KSk7Ci0gICAgICAgIHBhY2soaW5kZXgsIGF0dHJpYnV0ZXMgJiBSZWFkT25seSwgYXR0
cmlidXRlcyAmIERvbnRFbnVtKTsKKyAgICAgICAgQVNTRVJUKGlzVmFsaWRWYXJPZmZzZXQob2Zm
c2V0KSk7CisgICAgICAgIHBhY2sob2Zmc2V0LCBhdHRyaWJ1dGVzICYgUmVhZE9ubHksIGF0dHJp
YnV0ZXMgJiBEb250RW51bSk7CiAgICAgfQogICAgIAogICAgIH5TeW1ib2xUYWJsZUVudHJ5KCkK
QEAgLTE4MSw5ICsxOTQsMTcgQEAgc3RydWN0IFN5bWJvbFRhYmxlRW50cnkgewogICAgICAgICBy
ZXR1cm4gIShiaXRzKCkgJiB+U2xpbUZsYWcpOwogICAgIH0KIAotICAgIGludCBnZXRJbmRleCgp
IGNvbnN0CisgICAgVmFyT2Zmc2V0IHZhck9mZnNldCgpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gdmFyT2Zmc2V0RnJvbUJpdHMoYml0cygpKTsKKyAgICB9CisgICAgCisgICAgLy8gQXNz
ZXJ0cyBpZiB0aGUgb2Zmc2V0IGlzIGFueXRoaW5nIGJ1dCBhIHNjb3BlIG9mZnNldC4gVGhpcyBz
dHJ1Y3R1cmVzIHRoZSBhc3NlcnRpb25zCisgICAgLy8gaW4gYSB3YXkgdGhhdCBtYXkgcmVzdWx0
IGluIGJldHRlciBjb2RlLCBldmVuIGluIHJlbGVhc2UsIHRoYW4gZG9pbmcKKyAgICAvLyB2YXJP
ZmZzZXQoKS5zY29wZU9mZnNldCgpLgorICAgIFNjb3BlT2Zmc2V0IHNjb3BlT2Zmc2V0KCkgY29u
c3QKICAgICB7Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KGJpdHMoKSA+PiBGbGFn
Qml0cyk7CisgICAgICAgIHJldHVybiBzY29wZU9mZnNldEZyb21CaXRzKGJpdHMoKSk7CiAgICAg
fQogICAgIAogICAgIEFMV0FZU19JTkxJTkUgRmFzdCBnZXRGYXN0KCkgY29uc3QKQEAgLTIwOSw3
ICsyMzAsNyBAQCBzdHJ1Y3QgU3ltYm9sVGFibGVFbnRyeSB7CiAKICAgICB2b2lkIHNldEF0dHJp
YnV0ZXModW5zaWduZWQgYXR0cmlidXRlcykKICAgICB7Ci0gICAgICAgIHBhY2soZ2V0SW5kZXgo
KSwgYXR0cmlidXRlcyAmIFJlYWRPbmx5LCBhdHRyaWJ1dGVzICYgRG9udEVudW0pOworICAgICAg
ICBwYWNrKHZhck9mZnNldCgpLCBhdHRyaWJ1dGVzICYgUmVhZE9ubHksIGF0dHJpYnV0ZXMgJiBE
b250RW51bSk7CiAgICAgfQogCiAgICAgYm9vbCBpc1JlYWRPbmx5KCkgY29uc3QKQEAgLTI0Miw3
ICsyNjMsOSBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBjb25zdCBpbnRwdHJfdCBSZWFkT25seUZs
YWcgPSAweDI7CiAgICAgc3RhdGljIGNvbnN0IGludHB0cl90IERvbnRFbnVtRmxhZyA9IDB4NDsK
ICAgICBzdGF0aWMgY29uc3QgaW50cHRyX3QgTm90TnVsbEZsYWcgPSAweDg7Ci0gICAgc3RhdGlj
IGNvbnN0IGludHB0cl90IEZsYWdCaXRzID0gNDsKKyAgICBzdGF0aWMgY29uc3QgaW50cHRyX3Qg
U3RhY2tGbGFnID0gMHgxMDsKKyAgICBzdGF0aWMgY29uc3QgaW50cHRyX3QgQ2FwdHVyZWRBcmd1
bWVudEZsYWcgPSAweDIwOworICAgIHN0YXRpYyBjb25zdCBpbnRwdHJfdCBGbGFnQml0cyA9IDY7
CiAgICAgCiAgICAgY2xhc3MgRmF0RW50cnkgewogICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKQEAgLTMwOSwyMCArMzMyLDM0IEBAIHByaXZhdGU6CiAKICAgICBKU19FWFBPUlRfUFJJ
VkFURSB2b2lkIGZyZWVGYXRFbnRyeVNsb3coKTsKIAotICAgIHZvaWQgcGFjayhpbnQgaW5kZXgs
IGJvb2wgcmVhZE9ubHksIGJvb2wgZG9udEVudW0pCisgICAgdm9pZCBwYWNrKFZhck9mZnNldCBv
ZmZzZXQsIGJvb2wgcmVhZE9ubHksIGJvb2wgZG9udEVudW0pCiAgICAgewogICAgICAgICBBU1NF
UlQoIWlzRmF0KCkpOwogICAgICAgICBpbnRwdHJfdCYgYml0c1JlZiA9IGJpdHMoKTsKLSAgICAg
ICAgYml0c1JlZiA9IChzdGF0aWNfY2FzdDxpbnRwdHJfdD4oaW5kZXgpIDw8IEZsYWdCaXRzKSB8
IE5vdE51bGxGbGFnIHwgU2xpbUZsYWc7CisgICAgICAgIGJpdHNSZWYgPQorICAgICAgICAgICAg
KHN0YXRpY19jYXN0PGludHB0cl90PihvZmZzZXQucmF3T2Zmc2V0KCkpIDw8IEZsYWdCaXRzKSB8
IE5vdE51bGxGbGFnIHwgU2xpbUZsYWc7CiAgICAgICAgIGlmIChyZWFkT25seSkKICAgICAgICAg
ICAgIGJpdHNSZWYgfD0gUmVhZE9ubHlGbGFnOwogICAgICAgICBpZiAoZG9udEVudW0pCiAgICAg
ICAgICAgICBiaXRzUmVmIHw9IERvbnRFbnVtRmxhZzsKKyAgICAgICAgc3dpdGNoIChvZmZzZXQu
a2luZCgpKSB7CisgICAgICAgIGNhc2UgU2NvcGVWYXJLaW5kOgorICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgU3RhY2tWYXJLaW5kOgorICAgICAgICAgICAgYml0c1JlZiB8PSBTdGFj
a0ZsYWc7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDYXB0dXJlZEFyZ3VtZW50
S2luZDoKKyAgICAgICAgICAgIGJpdHNSZWYgfD0gQ2FwdHVyZWRBcmd1bWVudEZsYWc7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgIH0K
ICAgICAKLSAgICBib29sIGlzVmFsaWRJbmRleChpbnQgaW5kZXgpCisgICAgc3RhdGljIGJvb2wg
aXNWYWxpZFZhck9mZnNldChWYXJPZmZzZXQgb2Zmc2V0KQogICAgIHsKLSAgICAgICAgcmV0dXJu
ICgoc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KGluZGV4KSA8PCBGbGFnQml0cykgPj4gRmxhZ0JpdHMp
ID09IHN0YXRpY19jYXN0PGludHB0cl90PihpbmRleCk7CisgICAgICAgIHJldHVybiAoKHN0YXRp
Y19jYXN0PGludHB0cl90PihvZmZzZXQucmF3T2Zmc2V0KCkpIDw8IEZsYWdCaXRzKSA+PiBGbGFn
Qml0cykgPT0gc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KG9mZnNldC5yYXdPZmZzZXQoKSk7CiAgICAg
fQogCiAgICAgaW50cHRyX3QgbV9iaXRzOwpAQCAtMzUxLDcgKzM4OCw3IEBAIHB1YmxpYzoKICAg
ICBzdGF0aWMgU3ltYm9sVGFibGUqIGNyZWF0ZU5hbWVTY29wZVRhYmxlKFZNJiB2bSwgY29uc3Qg
SWRlbnRpZmllciYgaWRlbnQsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCiAgICAgewogICAgICAgICBT
eW1ib2xUYWJsZSogcmVzdWx0ID0gY3JlYXRlKHZtKTsKLSAgICAgICAgcmVzdWx0LT5hZGQoaWRl
bnQuaW1wbCgpLCBTeW1ib2xUYWJsZUVudHJ5KC0xLCBhdHRyaWJ1dGVzKSk7CisgICAgICAgIHJl
c3VsdC0+YWRkKGlkZW50LmltcGwoKSwgU3ltYm9sVGFibGVFbnRyeShWYXJPZmZzZXQoU2NvcGVP
ZmZzZXQoMCkpLCBhdHRyaWJ1dGVzKSk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQog
ICAgIApAQCAtNDIzLDggKzQ2MCwyOSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBzaXplKGxv
Y2tlcik7CiAgICAgfQogICAgIAorICAgIFNjb3BlT2Zmc2V0IG1heFNjb3BlT2Zmc2V0KCkgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX21heFNjb3BlT2Zmc2V0OworICAgIH0KKyAgICAK
KyAgICB1bnNpZ25lZCBzY29wZVNpemUoKSBjb25zdAorICAgIHsKKyAgICAgICAgU2NvcGVPZmZz
ZXQgbWF4U2NvcGVPZmZzZXQgPSB0aGlzLT5tYXhTY29wZU9mZnNldCgpOworICAgICAgICAKKyAg
ICAgICAgLy8gRG8gc29tZSBjYWxjdWxhdGlvbiB0aGF0IHJlbGllcyBvbiBpbnZhbGlkIHNjb3Bl
IG9mZnNldCBwbHVzIG9uZSBiZWluZyB6ZXJvLgorICAgICAgICB1bnNpZ25lZCBmYXN0UmVzdWx0
ID0gbWF4U2NvcGVPZmZzZXQub2Zmc2V0VW5jaGVja2VkKCkgKyAxOworICAgICAgICAKKyAgICAg
ICAgLy8gQXNzZXJ0IHRoYXQgdGhpcyB3b3Jrcy4KKyAgICAgICAgQVNTRVJUKGZhc3RSZXN1bHQg
PT0gKCFtYXhTY29wZU9mZnNldCA/IDAgOiBtYXhTY29wZU9mZnNldC5vZmZzZXQoKSArIDEpKTsK
KyAgICAgICAgCisgICAgICAgIHJldHVybiBmYXN0UmVzdWx0OworICAgIH0KKyAgICAKICAgICBN
YXA6OkFkZFJlc3VsdCBhZGQoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYsIFN0cmluZ0ltcGwq
IGtleSwgY29uc3QgU3ltYm9sVGFibGVFbnRyeSYgZW50cnkpCiAgICAgeworICAgICAgICBpZiAo
ZW50cnkudmFyT2Zmc2V0KCkuaXNTY29wZSgpCisgICAgICAgICAgICAmJiAoIW1fbWF4U2NvcGVP
ZmZzZXQgfHwgbV9tYXhTY29wZU9mZnNldCA8IGVudHJ5LnNjb3BlT2Zmc2V0KCkpKQorICAgICAg
ICAgICAgbV9tYXhTY29wZU9mZnNldCA9IGVudHJ5LnNjb3BlT2Zmc2V0KCk7CiAgICAgICAgIHJl
dHVybiBtX21hcC5hZGQoa2V5LCBlbnRyeSk7CiAgICAgfQogICAgIApAQCAtNDU2LDYgKzUxNCw0
NSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBjb250YWlucyhsb2NrZXIsIGtleSk7CiAgICAg
fQogICAgIAorICAgIC8vIFRoZSBwcmluY2lwbGUgYmVoaW5kIFNjb3BlZEFyZ3VtZW50c1RhYmxl
IG1vZGlmaWNhdGlvbnMgaXMgdGhhdCB3ZSB3aWxsIGNyZWF0ZSBvbmUgYW5kCisgICAgLy8gbGVh
dmUgaXQgdW5sb2NrZWQgLSB0aGVyZWJ5IGFsbG93aW5nIGluLXBsYWNlIGNoYW5nZXMgLSB1bnRp
bCBzb21lb25lIGFza3MgZm9yIGEgcG9pbnRlciB0bworICAgIC8vIHRoZSB0YWJsZS4gVGhlbiwg
d2Ugd2lsbCBsb2NrIGl0LiBUaGVuIGJvdGggb3VyIGZ1dHVyZSBjaGFuZ2VzIGFuZCB0aGVpciBm
dXR1cmUgY2hhbmdlcworICAgIC8vIHdpbGwgZmlyc3QgaGF2ZSB0byBtYWtlIGEgY29weS4gVGhp
cyBkaXNjaXBsaW5lIG1lYW5zIHRoYXQgdXN1YWxseSB3aGVuIHdlIGNyZWF0ZSBhCisgICAgLy8g
U2NvcGVkQXJndW1lbnRzIG9iamVjdCwgd2UgZG9uJ3QgaGF2ZSB0byBtYWtlIGEgY29weSBvZiB0
aGUgU2NvcGVkQXJndW1lbnRzVGFibGUgLSBpbnN0ZWFkCisgICAgLy8gd2UganVzdCB0YWtlIGEg
cmVmZXJlbmNlIHRvIG9uZSB0aGF0IHdlIGFscmVhZHkgaGF2ZS4KKyAgICAKKyAgICB1aW50MzJf
dCBhcmd1bWVudHNMZW5ndGgoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKCFtX2FyZ3VtZW50
cykKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbV9hcmd1bWVudHMtPmxl
bmd0aCgpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNldEFyZ3VtZW50c0xlbmd0aChWTSYgdm0s
IHVpbnQzMl90IGxlbmd0aCkKKyAgICB7CisgICAgICAgIGlmIChVTkxJS0VMWSghbV9hcmd1bWVu
dHMpKQorICAgICAgICAgICAgbV9hcmd1bWVudHMuc2V0KHZtLCB0aGlzLCBTY29wZWRBcmd1bWVu
dHNUYWJsZTo6Y3JlYXRlKHZtKSk7CisgICAgICAgIG1fYXJndW1lbnRzLnNldCh2bSwgdGhpcywg
bV9hcmd1bWVudHMtPnNldExlbmd0aCh2bSwgbGVuZ3RoKSk7CisgICAgfQorICAgIAorICAgIFNj
b3BlT2Zmc2V0IGFyZ3VtZW50T2Zmc2V0KHVpbnQzMl90IGkpIGNvbnN0CisgICAgeworICAgICAg
ICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihtX2FyZ3VtZW50cyk7CisgICAgICAg
IHJldHVybiBtX2FyZ3VtZW50cy0+Z2V0KGkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNldEFy
Z3VtZW50T2Zmc2V0KFZNJiB2bSwgdWludDMyX3QgaSwgU2NvcGVPZmZzZXQgb2Zmc2V0KQorICAg
IHsKKyAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04obV9hcmd1bWVudHMp
OworICAgICAgICBtX2FyZ3VtZW50cy5zZXQodm0sIHRoaXMsIG1fYXJndW1lbnRzLT5zZXQodm0s
IGksIG9mZnNldCkpOworICAgIH0KKyAgICAKKyAgICBTY29wZWRBcmd1bWVudHNUYWJsZSogYXJn
dW1lbnRzKCkgY29uc3QKKyAgICB7CisgICAgICAgIG1fYXJndW1lbnRzLT5sb2NrKCk7CisgICAg
ICAgIHJldHVybiBtX2FyZ3VtZW50cy5nZXQoKTsKKyAgICB9CisgICAgCiAgICAgR2xvYmFsVmFy
aWFibGVJRCB1bmlxdWVJREZvclZhcmlhYmxlKGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImLCBT
dHJpbmdJbXBsKiBrZXksIFZNJiB2bSk7CiAgICAgR2xvYmFsVmFyaWFibGVJRCB1bmlxdWVJREZv
clJlZ2lzdGVyKGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImIGxvY2tlciwgaW50IHJlZ2lzdGVy
SW5kZXgsIFZNJiB2bSk7CiAgICAgUmVmUHRyPFR5cGVTZXQ+IGdsb2JhbFR5cGVTZXRGb3JSZWdp
c3Rlcihjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiBsb2NrZXIsIGludCByZWdpc3RlckluZGV4
LCBWTSYgdm0pOwpAQCAtNDY0LDI4ICs1NjEsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCB1c2VzTm9u
U3RyaWN0RXZhbCgpIHsgcmV0dXJuIG1fdXNlc05vblN0cmljdEV2YWw7IH0KICAgICB2b2lkIHNl
dFVzZXNOb25TdHJpY3RFdmFsKGJvb2wgdXNlc05vblN0cmljdEV2YWwpIHsgbV91c2VzTm9uU3Ry
aWN0RXZhbCA9IHVzZXNOb25TdHJpY3RFdmFsOyB9CiAKLSAgICBpbnQgY2FwdHVyZVN0YXJ0KCkg
Y29uc3QgeyByZXR1cm4gbV9jYXB0dXJlU3RhcnQ7IH0KLSAgICB2b2lkIHNldENhcHR1cmVTdGFy
dChpbnQgY2FwdHVyZVN0YXJ0KSB7IG1fY2FwdHVyZVN0YXJ0ID0gY2FwdHVyZVN0YXJ0OyB9Ci0K
LSAgICBpbnQgY2FwdHVyZUVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fY2FwdHVyZUVuZDsgfQotICAg
IHZvaWQgc2V0Q2FwdHVyZUVuZChpbnQgY2FwdHVyZUVuZCkgeyBtX2NhcHR1cmVFbmQgPSBjYXB0
dXJlRW5kOyB9Ci0KLSAgICBpbnQgY2FwdHVyZUNvdW50KCkgY29uc3QgeyByZXR1cm4gLShtX2Nh
cHR1cmVFbmQgLSBtX2NhcHR1cmVTdGFydCk7IH0KLSAgICAKLSAgICBib29sIGlzQ2FwdHVyZWQo
aW50IG9wZXJhbmQpCi0gICAgewotICAgICAgICByZXR1cm4gb3BlcmFuZCA8PSBjYXB0dXJlU3Rh
cnQoKSAmJiBvcGVyYW5kID4gY2FwdHVyZUVuZCgpOwotICAgIH0KLQotICAgIGludCBwYXJhbWV0
ZXJDb3VudCgpIHsgcmV0dXJuIG1fcGFyYW1ldGVyQ291bnRJbmNsdWRpbmdUaGlzIC0gMTsgfQot
ICAgIGludCBwYXJhbWV0ZXJDb3VudEluY2x1ZGluZ1RoaXMoKSB7IHJldHVybiBtX3BhcmFtZXRl
ckNvdW50SW5jbHVkaW5nVGhpczsgfQotICAgIHZvaWQgc2V0UGFyYW1ldGVyQ291bnRJbmNsdWRp
bmdUaGlzKGludCBwYXJhbWV0ZXJDb3VudEluY2x1ZGluZ1RoaXMpIHsgbV9wYXJhbWV0ZXJDb3Vu
dEluY2x1ZGluZ1RoaXMgPSBwYXJhbWV0ZXJDb3VudEluY2x1ZGluZ1RoaXM7IH0KLQotICAgIC8v
IDAgaWYgd2UgZG9uJ3QgY2FwdHVyZSBhbnkgYXJndW1lbnRzOyBwYXJhbWV0ZXJDb3VudCgpIGlu
IGxlbmd0aCBpZiB3ZSBkby4KLSAgICBjb25zdCBTbG93QXJndW1lbnQqIHNsb3dBcmd1bWVudHMo
KSB7IHJldHVybiBtX3Nsb3dBcmd1bWVudHMuZ2V0KCk7IH0KLSAgICB2b2lkIHNldFNsb3dBcmd1
bWVudHMoc3RkOjp1bmlxdWVfcHRyPFNsb3dBcmd1bWVudFtdPiBzbG93QXJndW1lbnRzKSB7IG1f
c2xvd0FyZ3VtZW50cyA9IFdURjo6bW92ZShzbG93QXJndW1lbnRzKTsgfQotICAgIAotICAgIFN5
bWJvbFRhYmxlKiBjbG9uZUNhcHR1cmVkTmFtZXMoVk0mKTsKKyAgICBTeW1ib2xUYWJsZSogY2xv
bmVTY29wZVBhcnQoVk0mKTsKIAogICAgIHZvaWQgcHJlcGFyZUZvclR5cGVQcm9maWxpbmcoY29u
c3QgQ29uY3VycmVudEpJVExvY2tlciYpOwogCkBAIC01MTMsNiArNTg5LDggQEAgcHJpdmF0ZToK
ICAgICB+U3ltYm9sVGFibGUoKTsKIAogICAgIE1hcCBtX21hcDsKKyAgICBTY29wZU9mZnNldCBt
X21heFNjb3BlT2Zmc2V0OworICAgIAogICAgIHN0cnVjdCBUeXBlUHJvZmlsaW5nUmFyZURhdGEg
ewogICAgICAgICBVbmlxdWVJRE1hcCBtX3VuaXF1ZUlETWFwOwogICAgICAgICBSZWdpc3RlclRv
VmFyaWFibGVNYXAgbV9yZWdpc3RlclRvVmFyaWFibGVNYXA7CkBAIC01MjAsMTMgKzU5OCw5IEBA
IHByaXZhdGU6CiAgICAgfTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8VHlwZVByb2ZpbGluZ1JhcmVE
YXRhPiBtX3R5cGVQcm9maWxpbmdSYXJlRGF0YTsKIAotICAgIGludCBtX3BhcmFtZXRlckNvdW50
SW5jbHVkaW5nVGhpczsKICAgICBib29sIG1fdXNlc05vblN0cmljdEV2YWw7Ci0KLSAgICBpbnQg
bV9jYXB0dXJlU3RhcnQ7Ci0gICAgaW50IG1fY2FwdHVyZUVuZDsKLQotICAgIHN0ZDo6dW5pcXVl
X3B0cjxTbG93QXJndW1lbnRbXT4gbV9zbG93QXJndW1lbnRzOworICAgIAorICAgIFdyaXRlQmFy
cmllcjxTY29wZWRBcmd1bWVudHNUYWJsZT4gbV9hcmd1bWVudHM7CiAgICAgCiAgICAgc3RkOjp1
bmlxdWVfcHRyPFdhdGNocG9pbnRDbGVhbnVwPiBtX3dhdGNocG9pbnRDbGVhbnVwOwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WYXJPZmZzZXQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Zhck9mZnNldC5jcHAJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WYXJPZmZzZXQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlZhck9mZnNl
dC5oIgorCituYW1lc3BhY2UgSlNDIHsKKwordm9pZCBWYXJPZmZzZXQ6OmR1bXAoUHJpbnRTdHJl
YW0mIG91dCkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKG1fa2luZCkgeworICAgIGNhc2UgSW52YWxp
ZFZhcktpbmQ6CisgICAgICAgIG91dC5wcmludCgiaW52YWxpZCIpOworICAgICAgICByZXR1cm47
CisgICAgY2FzZSBTY29wZVZhcktpbmQ6CisgICAgICAgIG91dC5wcmludChzY29wZU9mZnNldCgp
KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU3RhY2tWYXJLaW5kOgorICAgICAgICBvdXQu
cHJpbnQoc3RhY2tPZmZzZXQoKSk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENhcHR1cmVk
QXJndW1lbnRLaW5kOgorICAgICAgICBvdXQucHJpbnQoY2FwdHVyZWRBcmd1bWVudE9mZnNldCgp
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworbmFtZXNwYWNlIFdURiB7CisKK3VzaW5n
IG5hbWVzcGFjZSBKU0M7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBW
YXJLaW5kIHZhcktpbmQpCit7CisgICAgc3dpdGNoICh2YXJLaW5kKSB7CisgICAgY2FzZSBJbnZh
bGlkVmFyS2luZDoKKyAgICAgICAgb3V0LnByaW50KCJJbnZhbGlkIik7CisgICAgICAgIHJldHVy
bjsKKyAgICBjYXNlIFNjb3BlVmFyS2luZDoKKyAgICAgICAgb3V0LnByaW50KCJTY29wZSIpOwor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBTdGFja1ZhcktpbmQ6CisgICAgICAgIG91dC5wcmlu
dCgiU3RhY2siKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ2FwdHVyZWRBcmd1bWVudEtp
bmQ6CisgICAgICAgIG91dC5wcmludCgiQ2FwdHVyZWRBcmd1bWVudCIpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdURgorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WYXJP
ZmZzZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WYXJP
ZmZzZXQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Zh
ck9mZnNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjE0IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgVmFyT2Zmc2V0X2gKKyNk
ZWZpbmUgVmFyT2Zmc2V0X2gKKworI2luY2x1ZGUgIkNhcHR1cmVkQXJndW1lbnRPZmZzZXQuaCIK
KyNpbmNsdWRlICJTY29wZU9mZnNldC5oIgorI2luY2x1ZGUgIlZpcnR1YWxSZWdpc3Rlci5oIgor
CituYW1lc3BhY2UgSlNDIHsKKworZW51bSBWYXJLaW5kIDogdWludDhfdCB7CisgICAgSW52YWxp
ZFZhcktpbmQsCisgICAgU2NvcGVWYXJLaW5kLAorICAgIFN0YWNrVmFyS2luZCwKKyAgICBDYXB0
dXJlZEFyZ3VtZW50S2luZAorfTsKKworY2xhc3MgVmFyT2Zmc2V0IHsKK3B1YmxpYzoKKyAgICBW
YXJPZmZzZXQoKQorICAgICAgICA6IG1fa2luZChJbnZhbGlkVmFyS2luZCkKKyAgICAgICAgLCBt
X29mZnNldChVSU5UX01BWCkKKyAgICB7CisgICAgfQorICAgIAorICAgIGV4cGxpY2l0IFZhck9m
ZnNldChWaXJ0dWFsUmVnaXN0ZXIgc3RhY2tPZmZzZXQpCisgICAgeworICAgICAgICBpZiAoIXN0
YWNrT2Zmc2V0LmlzVmFsaWQoKSkgeworICAgICAgICAgICAgbV9raW5kID0gSW52YWxpZFZhcktp
bmQ7CisgICAgICAgICAgICBtX29mZnNldCA9IFVJTlRfTUFYOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgbV9raW5kID0gU3RhY2tWYXJLaW5kOworICAgICAgICAgICAgbV9vZmZzZXQg
PSBzdGFja09mZnNldC5vZmZzZXQoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBleHBs
aWNpdCBWYXJPZmZzZXQoU2NvcGVPZmZzZXQgc2NvcGVPZmZzZXQpCisgICAgeworICAgICAgICBp
ZiAoIXNjb3BlT2Zmc2V0KSB7CisgICAgICAgICAgICBtX2tpbmQgPSBJbnZhbGlkVmFyS2luZDsK
KyAgICAgICAgICAgIG1fb2Zmc2V0ID0gVUlOVF9NQVg7CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICBtX2tpbmQgPSBTY29wZVZhcktpbmQ7CisgICAgICAgICAgICBtX29mZnNldCA9IHNj
b3BlT2Zmc2V0Lm9mZnNldCgpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIGV4cGxpY2l0
IFZhck9mZnNldChDYXB0dXJlZEFyZ3VtZW50T2Zmc2V0IGNhcHR1cmVkQXJndW1lbnRPZmZzZXQp
CisgICAgeworICAgICAgICBpZiAoIWNhcHR1cmVkQXJndW1lbnRPZmZzZXQpIHsKKyAgICAgICAg
ICAgIG1fa2luZCA9IEludmFsaWRWYXJLaW5kOworICAgICAgICAgICAgbV9vZmZzZXQgPSBVSU5U
X01BWDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1fa2luZCA9IENhcHR1cmVkQXJn
dW1lbnRLaW5kOworICAgICAgICAgICAgbV9vZmZzZXQgPSBjYXB0dXJlZEFyZ3VtZW50T2Zmc2V0
Lm9mZnNldCgpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHN0YXRpYyBWYXJPZmZzZXQg
YXNzZW1ibGUoVmFyS2luZCBraW5kLCB1bnNpZ25lZCBvZmZzZXQpCisgICAgeworICAgICAgICBW
YXJPZmZzZXQgcmVzdWx0OworICAgICAgICByZXN1bHQubV9raW5kID0ga2luZDsKKyAgICAgICAg
cmVzdWx0Lm1fb2Zmc2V0ID0gb2Zmc2V0OworICAgICAgICByZXN1bHQuY2hlY2tTYW5pdHkoKTsK
KyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc1ZhbGlkKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2tpbmQgIT0gSW52YWxpZFZhcktpbmQ7Cisg
ICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiAhaXNWYWxpZCgpOworICAgIH0KKyAgICAKKyAgICBWYXJLaW5kIGtpbmQoKSBjb25zdCB7
IHJldHVybiBtX2tpbmQ7IH0KKyAgICAKKyAgICBib29sIGlzU3RhY2soKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIG1fa2luZCA9PSBTdGFja1ZhcktpbmQ7CisgICAgfQorICAgIAorICAg
IGJvb2wgaXNTY29wZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9raW5kID09IFNj
b3BlVmFyS2luZDsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc0NhcHR1cmVkQXJndW1lbnQoKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fa2luZCA9PSBDYXB0dXJlZEFyZ3VtZW50S2lu
ZDsKKyAgICB9CisgICAgCisgICAgVmlydHVhbFJlZ2lzdGVyIHN0YWNrT2Zmc2V0VW5jaGVja2Vk
KCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmICghaXNTdGFjaygpKQorICAgICAgICAgICAgcmV0
dXJuIFZpcnR1YWxSZWdpc3RlcigpOworICAgICAgICByZXR1cm4gVmlydHVhbFJlZ2lzdGVyKG1f
b2Zmc2V0KTsKKyAgICB9CisgICAgCisgICAgU2NvcGVPZmZzZXQgc2NvcGVPZmZzZXRVbmNoZWNr
ZWQoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKCFpc1Njb3BlKCkpCisgICAgICAgICAgICBy
ZXR1cm4gU2NvcGVPZmZzZXQoKTsKKyAgICAgICAgcmV0dXJuIFNjb3BlT2Zmc2V0KG1fb2Zmc2V0
KTsKKyAgICB9CisgICAgCisgICAgQ2FwdHVyZWRBcmd1bWVudE9mZnNldCBjYXB0dXJlZEFyZ3Vt
ZW50T2Zmc2V0VW5jaGVja2VkKCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmICghaXNDYXB0dXJl
ZEFyZ3VtZW50KCkpCisgICAgICAgICAgICByZXR1cm4gQ2FwdHVyZWRBcmd1bWVudE9mZnNldCgp
OworICAgICAgICByZXR1cm4gQ2FwdHVyZWRBcmd1bWVudE9mZnNldChtX29mZnNldCk7CisgICAg
fQorICAgIAorICAgIFZpcnR1YWxSZWdpc3RlciBzdGFja09mZnNldCgpIGNvbnN0CisgICAgewor
ICAgICAgICBBU1NFUlQoaXNTdGFjaygpKTsKKyAgICAgICAgcmV0dXJuIFZpcnR1YWxSZWdpc3Rl
cihtX29mZnNldCk7CisgICAgfQorICAgIAorICAgIFNjb3BlT2Zmc2V0IHNjb3BlT2Zmc2V0KCkg
Y29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc1Njb3BlKCkpOworICAgICAgICByZXR1cm4g
U2NvcGVPZmZzZXQobV9vZmZzZXQpOworICAgIH0KKyAgICAKKyAgICBDYXB0dXJlZEFyZ3VtZW50
T2Zmc2V0IGNhcHR1cmVkQXJndW1lbnRPZmZzZXQoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNT
RVJUKGlzQ2FwdHVyZWRBcmd1bWVudCgpKTsKKyAgICAgICAgcmV0dXJuIENhcHR1cmVkQXJndW1l
bnRPZmZzZXQobV9vZmZzZXQpOworICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCByYXdPZmZzZXQo
KSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzVmFsaWQoKSk7CisgICAgICAgIHJldHVy
biBtX29mZnNldDsKKyAgICB9CisgICAgCisgICAgdm9pZCBjaGVja1Nhbml0eSgpIGNvbnN0Cisg
ICAgeworICAgICAgICBpZiAoQVNTRVJUX0RJU0FCTEVEKQorICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAKKyAgICAgICAgc3dpdGNoIChtX2tpbmQpIHsKKyAgICAgICAgY2FzZSBJbnZhbGlk
VmFyS2luZDoKKyAgICAgICAgICAgIEFTU0VSVChtX29mZnNldCA9PSBVSU5UX01BWCk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIGNhc2UgU2NvcGVWYXJLaW5kOgorICAgICAgICAgICAg
QVNTRVJUKHNjb3BlT2Zmc2V0KCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNl
IFN0YWNrVmFyS2luZDoKKyAgICAgICAgICAgIEFTU0VSVChzdGFja09mZnNldCgpKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBDYXB0dXJlZEFyZ3VtZW50S2luZDoKKyAgICAg
ICAgICAgIEFTU0VSVChjYXB0dXJlZEFyZ3VtZW50T2Zmc2V0KCkpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFZhck9mZnNldCYgb3RoZXIp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9raW5kID09IG90aGVyLm1fa2luZAorICAg
ICAgICAgICAgJiYgbV9vZmZzZXQgPT0gb3RoZXIubV9vZmZzZXQ7CisgICAgfQorICAgIAorICAg
IGJvb2wgb3BlcmF0b3IhPShjb25zdCBWYXJPZmZzZXQmIG90aGVyKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGR1
bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAKK3ByaXZhdGU6CisgICAgVmFyS2luZCBtX2tp
bmQ7CisgICAgdW5zaWduZWQgbV9vZmZzZXQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKwor
bmFtZXNwYWNlIFdURiB7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6
VmFyS2luZCk7CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gVmFyT2Zmc2V0X2gK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVmFyaWFibGVMb2NhdGlvbi5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZhcmlhYmxlTG9j
YXRpb24uaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Zh
cmlhYmxlTG9jYXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM4IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgVmFyaWFibGVM
b2NhdGlvbl9oCisjZGVmaW5lIFZhcmlhYmxlTG9jYXRpb25faAorCisjaW5jbHVkZSAiVmlydHVh
bFJlZ2lzdGVyLmgiCisKK25hbWVzcGFjZSBKU0MgeworCisKKworfSAvLyBuYW1lc3BhY2UgSlND
CisKKyNlbmRpZiAvLyBWYXJpYWJsZUxvY2F0aW9uX2gKKwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>247488</attachid>
            <date>2015-02-26 20:19:32 -0800</date>
            <delta_ts>2015-02-27 08:25:18 -0800</delta_ts>
            <desc>a little more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>172565</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2Vt
Ymxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJz
dHJhY3RNYWNyb0Fzc2VtYmxlci5oCShyZXZpc2lvbiAxODA3MjApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMjA1LDYgKzIwNSwxMSBAQCBwdWJsaWM6CiAgICAgICAgIFJlZ2lzdGVySUQgaW5kZXg7
CiAgICAgICAgIFNjYWxlIHNjYWxlOwogICAgICAgICBpbnQzMl90IG9mZnNldDsKKyAgICAgICAg
CisgICAgICAgIEJhc2VJbmRleCB3aXRoT2Zmc2V0KGludDMyX3QgYWRkaXRpb25hbE9mZnNldCkK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEJhc2VJbmRleChiYXNlLCBpbmRleCwgc2Nh
bGUsIG9mZnNldCArIGFkZGl0aW9uYWxPZmZzZXQpOworICAgICAgICB9CiAgICAgfTsKIAogICAg
IC8vIEFic29sdXRlQWRkcmVzczoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9CeVZhbEluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQnlWYWxJbmZvLmgJKHJldmlzaW9uIDE4MDcyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9CeVZhbEluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDEsNiArNDEsOCBAQCBlbnVt
IEpJVEFycmF5TW9kZSB7CiAgICAgSklURG91YmxlLAogICAgIEpJVENvbnRpZ3VvdXMsCiAgICAg
SklUQXJyYXlTdG9yYWdlLAorICAgIEpJVERpcmVjdEFyZ3VtZW50cywKKyAgICBKSVRTY29wZWRB
cmd1bWVudHMsCiAgICAgSklUSW50OEFycmF5LAogICAgIEpJVEludDE2QXJyYXksCiAgICAgSklU
SW50MzJBcnJheSwKQEAgLTY1LDYgKzY3LDE3IEBAIGlubGluZSBib29sIGlzT3B0aW1pemFibGVJ
bmRleGluZ1R5cGUoSW4KICAgICB9CiB9CiAKK2lubGluZSBib29sIGhhc09wdGltaXphYmxlSW5k
ZXhpbmdGb3JKU1R5cGUoSlNUeXBlIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAg
Y2FzZSBEaXJlY3RBcmd1bWVudHNUeXBlOgorICAgIGNhc2UgU2NvcGVkQXJndW1lbnRzVHlwZToK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KK30KKwogaW5saW5lIGJvb2wgaGFzT3B0aW1pemFibGVJbmRleGluZ0ZvckNsYXNz
SW5mbyhjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbykKIHsKICAgICByZXR1cm4gaXNUeXBlZFZp
ZXcoY2xhc3NJbmZvLT50eXBlZEFycmF5U3RvcmFnZVR5cGUpOwpAQCAtNzMsNiArODYsNyBAQCBp
bmxpbmUgYm9vbCBoYXNPcHRpbWl6YWJsZUluZGV4aW5nRm9yQ2xhCiBpbmxpbmUgYm9vbCBoYXNP
cHRpbWl6YWJsZUluZGV4aW5nKFN0cnVjdHVyZSogc3RydWN0dXJlKQogewogICAgIHJldHVybiBp
c09wdGltaXphYmxlSW5kZXhpbmdUeXBlKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpCisgICAg
ICAgIHx8IGhhc09wdGltaXphYmxlSW5kZXhpbmdGb3JKU1R5cGUoc3RydWN0dXJlLT50eXBlSW5m
bygpLnR5cGUoKSkKICAgICAgICAgfHwgaGFzT3B0aW1pemFibGVJbmRleGluZ0ZvckNsYXNzSW5m
byhzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpKTsKIH0KIApAQCAtOTMsNiArMTA3LDE5IEBAIGlubGlu
ZSBKSVRBcnJheU1vZGUgaml0QXJyYXlNb2RlRm9ySW5kZXgKICAgICB9CiB9CiAKK2lubGluZSBK
SVRBcnJheU1vZGUgaml0QXJyYXlNb2RlRm9ySlNUeXBlKEpTVHlwZSB0eXBlKQoreworICAgIHN3
aXRjaCAodHlwZSkgeworICAgIGNhc2UgRGlyZWN0QXJndW1lbnRzVHlwZToKKyAgICAgICAgcmV0
dXJuIEpJVERpcmVjdEFyZ3VtZW50czsKKyAgICBjYXNlIFNjb3BlZEFyZ3VtZW50c1R5cGU6Cisg
ICAgICAgIHJldHVybiBKSVRTY29wZWRBcmd1bWVudHM7CisgICAgZGVmYXVsdDoKKyAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIEpJVENvbnRpZ3Vv
dXM7CisgICAgfQorfQorCiBpbmxpbmUgSklUQXJyYXlNb2RlIGppdEFycmF5TW9kZUZvckNsYXNz
SW5mbyhjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbykKIHsKICAgICBzd2l0Y2ggKGNsYXNzSW5m
by0+dHlwZWRBcnJheVN0b3JhZ2VUeXBlKSB7CkBAIC0xMjAsNiArMTQ3LDE5IEBAIGlubGluZSBK
SVRBcnJheU1vZGUgaml0QXJyYXlNb2RlRm9yQ2xhc3MKICAgICB9CiB9CiAKK2lubGluZSBib29s
IGppdEFycmF5TW9kZVBlcm1pdHNQdXQoSklUQXJyYXlNb2RlIG1vZGUpCit7CisgICAgc3dpdGNo
IChtb2RlKSB7CisgICAgY2FzZSBKSVREaXJlY3RBcmd1bWVudHM6CisgICAgY2FzZSBKSVRTY29w
ZWRBcmd1bWVudHM6CisgICAgICAgIC8vIFdlIGNvdWxkIHN1cHBvcnQgcHV0X2J5X3ZhbCBvbiB0
aGVzZSBhdCBzb21lIHBvaW50LCBidXQgaXQncyBqdXN0IG5vdCB0aGF0IHByb2ZpdGFibGUKKyAg
ICAgICAgLy8gYXQgdGhlIG1vbWVudC4KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGRlZmF1
bHQ6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KK30KKwogaW5saW5lIFR5cGVkQXJyYXlU
eXBlIHR5cGVkQXJyYXlUeXBlRm9ySklUQXJyYXlNb2RlKEpJVEFycmF5TW9kZSBtb2RlKQogewog
ICAgIHN3aXRjaCAobW9kZSkgewpAQCAtMTUyLDYgKzE5Miw5IEBAIGlubGluZSBKSVRBcnJheU1v
ZGUgaml0QXJyYXlNb2RlRm9yU3RydWMKICAgICBpZiAoaXNPcHRpbWl6YWJsZUluZGV4aW5nVHlw
ZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSkKICAgICAgICAgcmV0dXJuIGppdEFycmF5TW9k
ZUZvckluZGV4aW5nVHlwZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKTsKICAgICAKKyAgICBp
ZiAoaGFzT3B0aW1pemFibGVJbmRleGluZ0ZvckpTVHlwZShzdHJ1Y3R1cmUtPnR5cGVJbmZvKCku
dHlwZSgpKSkKKyAgICAgICAgcmV0dXJuIGppdEFycmF5TW9kZUZvckpTVHlwZShzdHJ1Y3R1cmUt
PnR5cGVJbmZvKCkudHlwZSgpKTsKKyAgICAKICAgICBBU1NFUlQoaGFzT3B0aW1pemFibGVJbmRl
eGluZ0ZvckNsYXNzSW5mbyhzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpKSk7CiAgICAgcmV0dXJuIGpp
dEFycmF5TW9kZUZvckNsYXNzSW5mbyhzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpKTsKIH0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QuanNvbgo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0Lmpzb24J
KHJldmlzaW9uIDE4MDcyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRl
Y29kZUxpc3QuanNvbgkod29ya2luZyBjb3B5KQpAQCAtOCw3ICs4LDkgQEAKICAgICAgICAgICAg
IHsgIm5hbWUiIDogIm9wX2dldF9zY29wZSIsICJsZW5ndGgiIDogMiB9LAogICAgICAgICAgICAg
eyAibmFtZSIgOiAib3BfdG91Y2hfZW50cnkiLCAibGVuZ3RoIiA6IDEgfSwKICAgICAgICAgICAg
IHsgIm5hbWUiIDogIm9wX2luaXRfbGF6eV9yZWciLCAibGVuZ3RoIiA6IDIgfSwKLSAgICAgICAg
ICAgIHsgIm5hbWUiIDogIm9wX2NyZWF0ZV9hcmd1bWVudHMiLCAibGVuZ3RoIiA6IDMgfSwKKyAg
ICAgICAgICAgIHsgIm5hbWUiIDogIm9wX2NvcHlfYXJndW1lbnRzX3RvX3Njb3BlIiwgImxlbmd0
aCIgOiAyIH0sIC8vIGp1c3QgdGFrZXMgdGhlIHNjb3BlIHJlZ2lzdGVyCisgICAgICAgICAgICB7
ICJuYW1lIiA6ICJvcF9jcmVhdGVfZGlyZWN0X2FyZ3VtZW50cyIsICJsZW5ndGgiIDogMiB9LCAv
LyBqdXN0IHRha2VzIHRoZSBkc3QgcmVnaXN0ZXIKKyAgICAgICAgICAgIHsgIm5hbWUiIDogIm9w
X2NyZWF0ZV9zY29wZWRfYXJndW1lbnRzIiwgImxlbmd0aCIgOiAzIH0sIC8vIGRzdCwgc2NvcGVS
ZWdpc3RlciwgdGFibGUKICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX2NyZWF0ZV90aGlzIiwg
Imxlbmd0aCIgOiA0IH0sCiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9nZXRfY2FsbGVlIiwg
Imxlbmd0aCIgOiAzIH0sCiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF90b190aGlzIiwgImxl
bmd0aCIgOiA0IH0sCkBAIC02MSw3ICs2Myw2IEBACiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJv
cF9nZXRfYnlfaWQiLCAibGVuZ3RoIiA6IDkgIH0sCiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJv
cF9nZXRfYnlfaWRfb3V0X29mX2xpbmUiLCAibGVuZ3RoIiA6IDkgIH0sCiAgICAgICAgICAgICB7
ICJuYW1lIiA6ICJvcF9nZXRfYXJyYXlfbGVuZ3RoIiwgImxlbmd0aCIgOiA5IH0sCi0gICAgICAg
ICAgICB7ICJuYW1lIiA6ICJvcF9nZXRfYXJndW1lbnRzX2xlbmd0aCIsICJsZW5ndGgiIDogNCB9
LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfcHV0X2J5X2lkIiwgImxlbmd0aCIgOiA5IH0s
CiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9wdXRfYnlfaWRfb3V0X29mX2xpbmUiLCAibGVu
Z3RoIiA6IDkgfSwKICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX3B1dF9ieV9pZF90cmFuc2l0
aW9uX2RpcmVjdCIsICJsZW5ndGgiIDogOSB9LApAQCAtNzAsNyArNzEsNiBAQAogICAgICAgICAg
ICAgeyAibmFtZSIgOiAib3BfcHV0X2J5X2lkX3RyYW5zaXRpb25fbm9ybWFsX291dF9vZl9saW5l
IiwgImxlbmd0aCIgOiA5IH0sCiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9kZWxfYnlfaWQi
LCAibGVuZ3RoIiA6IDQgfSwKICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX2dldF9ieV92YWwi
LCAibGVuZ3RoIiA6IDYgfSwKLSAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX2dldF9hcmd1bWVu
dF9ieV92YWwiLCAibGVuZ3RoIiA6IDcgfSwKICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX3B1
dF9ieV92YWwiLCAibGVuZ3RoIiA6IDUgfSwKICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX3B1
dF9ieV92YWxfZGlyZWN0IiwgImxlbmd0aCIgOiA1IH0sCiAgICAgICAgICAgICB7ICJuYW1lIiA6
ICJvcF9kZWxfYnlfdmFsIiwgImxlbmd0aCIgOiA0IH0sCkBAIC05OSw3ICs5OSw2IEBACiAgICAg
ICAgICAgICB7ICJuYW1lIiA6ICJvcF9jYWxsIiwgImxlbmd0aCIgOiA5IH0sCiAgICAgICAgICAg
ICB7ICJuYW1lIiA6ICJvcF9jYWxsX2V2YWwiLCAibGVuZ3RoIiA6IDkgfSwKICAgICAgICAgICAg
IHsgIm5hbWUiIDogIm9wX2NhbGxfdmFyYXJncyIsICJsZW5ndGgiIDogOSB9LAotICAgICAgICAg
ICAgeyAibmFtZSIgOiAib3BfdGVhcl9vZmZfYXJndW1lbnRzIiwgImxlbmd0aCIgOiAzIH0sCiAg
ICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9yZXQiLCAibGVuZ3RoIiA6IDIgfSwKICAgICAgICAg
ICAgIHsgIm5hbWUiIDogIm9wX2NvbnN0cnVjdCIsICJsZW5ndGgiIDogOSB9LAogICAgICAgICAg
ICAgeyAibmFtZSIgOiAib3BfY29uc3RydWN0X3ZhcmFyZ3MiLCAibGVuZ3RoIiA6IDkgfSwKQEAg
LTEwOCw2ICsxMDcsOCBAQAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfcmVzb2x2ZV9zY29w
ZSIsICJsZW5ndGgiIDogNyB9LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfZ2V0X2Zyb21f
c2NvcGUiLCAibGVuZ3RoIiA6IDggfSwKICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX3B1dF90
b19zY29wZSIsICJsZW5ndGgiIDogNyB9LAorICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfZ2V0
X2Zyb21fYXJndW1lbnRzIiwgImxlbmd0aCIgOiA0IH0sIC8vIGRzdCwgYXJndW1lbnRzLCBpbmRl
eAorICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfcHV0X3RvX2FyZ3VtZW50cyIsICJsZW5ndGgi
IDogNCB9LCAvLyBhcmd1bWVudHMsIGluZGV4LCBzcmMKICAgICAgICAgICAgIHsgIm5hbWUiIDog
Im9wX3B1c2hfd2l0aF9zY29wZSIsICJsZW5ndGgiIDogMyB9LAogICAgICAgICAgICAgeyAibmFt
ZSIgOiAib3BfcG9wX3Njb3BlIiwgImxlbmd0aCIgOiAyIH0sCiAgICAgICAgICAgICB7ICJuYW1l
IiA6ICJvcF9wdXNoX25hbWVfc2NvcGUiLCAibGVuZ3RoIiA6IDUgfSwKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmNwcAkocmV2aXNp
b24gMTgwNzIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRU
eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksMTAgKzI5LDExIEBACiAjaW5jbHVkZSAiY29u
ZmlnLmgiCiAjaW5jbHVkZSAiU3BlY3VsYXRlZFR5cGUuaCIKIAotI2luY2x1ZGUgIkFyZ3VtZW50
cy5oIgorI2luY2x1ZGUgIkRpcmVjdEFyZ3VtZW50cy5oIgogI2luY2x1ZGUgIkpTQXJyYXkuaCIK
ICNpbmNsdWRlICJKU0Z1bmN0aW9uLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1
ZGUgIlNjb3BlZEFyZ3VtZW50cy5oIgogI2luY2x1ZGUgIlN0cmluZ09iamVjdC5oIgogI2luY2x1
ZGUgIlZhbHVlUHJvZmlsZS5oIgogI2luY2x1ZGUgPHd0Zi9Cb3VuZHNDaGVja2VkUG9pbnRlci5o
PgpAQCAtMTI3LDggKzEyOCwxMyBAQCB2b2lkIGR1bXBTcGVjdWxhdGlvbihQcmludFN0cmVhbSYg
b3V0LCBTCiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgaXNUb3AgPSBmYWxzZTsK
ICAgICAKLSAgICAgICAgICAgIGlmICh2YWx1ZSAmIFNwZWNBcmd1bWVudHMpCi0gICAgICAgICAg
ICAgICAgbXlPdXQucHJpbnQoIkFyZ3VtZW50cyIpOworICAgICAgICAgICAgaWYgKHZhbHVlICYg
U3BlY0RpcmVjdEFyZ3VtZW50cykKKyAgICAgICAgICAgICAgICBteU91dC5wcmludCgiRGlyZWN0
YXJndW1lbnRzIik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgaXNUb3AgPSBm
YWxzZTsKKyAgICAKKyAgICAgICAgICAgIGlmICh2YWx1ZSAmIFNwZWNTY29wZWRBcmd1bWVudHMp
CisgICAgICAgICAgICAgICAgbXlPdXQucHJpbnQoIlNjb3BlZGFyZ3VtZW50cyIpOwogICAgICAg
ICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGlzVG9wID0gZmFsc2U7CiAgICAgCkBAIC0yMzIs
OCArMjM4LDEwIEBAIHN0YXRpYyBjb25zdCBjaGFyKiBzcGVjdWxhdGlvblRvQWJicmV2aWEKICAg
ICAgICAgcmV0dXJuICI8RmxvYXQzMmFycmF5PiI7CiAgICAgaWYgKGlzRmxvYXQ2NEFycmF5U3Bl
Y3VsYXRpb24ocHJlZGljdGlvbikpCiAgICAgICAgIHJldHVybiAiPEZsb2F0NjRhcnJheT4iOwot
ICAgIGlmIChpc0FyZ3VtZW50c1NwZWN1bGF0aW9uKHByZWRpY3Rpb24pKQotICAgICAgICByZXR1
cm4gIjxBcmd1bWVudHM+IjsKKyAgICBpZiAoaXNEaXJlY3RBcmd1bWVudHNTcGVjdWxhdGlvbihw
cmVkaWN0aW9uKSkKKyAgICAgICAgcmV0dXJuICI8RGlyZWN0QXJndW1lbnRzPiI7CisgICAgaWYg
KGlzU2NvcGVkQXJndW1lbnRzU3BlY3VsYXRpb24ocHJlZGljdGlvbikpCisgICAgICAgIHJldHVy
biAiPFNjb3BlZEFyZ3VtZW50cz4iOwogICAgIGlmIChpc1N0cmluZ09iamVjdFNwZWN1bGF0aW9u
KHByZWRpY3Rpb24pKQogICAgICAgICByZXR1cm4gIjxTdHJpbmdPYmplY3Q+IjsKICAgICBpZiAo
aXNTdHJpbmdPclN0cmluZ09iamVjdFNwZWN1bGF0aW9uKHByZWRpY3Rpb24pKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgJKHJldmlz
aW9uIDE4MDcyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVk
VHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01Miw4ICs1Miw5IEBAIHN0YXRpYyBjb25zdCBTcGVj
dWxhdGVkVHlwZSBTcGVjVWludDMyQXIKIHN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVj
RmxvYXQzMkFycmF5ICAgICAgID0gMHgwMDAwMDQwMDsgLy8gSXQncyBkZWZpbml0ZWx5IGFuIFVp
bnQxNkFycmF5IG9yIG9uZSBvZiBpdHMgc3ViY2xhc3Nlcy4KIHN0YXRpYyBjb25zdCBTcGVjdWxh
dGVkVHlwZSBTcGVjRmxvYXQ2NEFycmF5ICAgICAgID0gMHgwMDAwMDgwMDsgLy8gSXQncyBkZWZp
bml0ZWx5IGFuIFVpbnQxNkFycmF5IG9yIG9uZSBvZiBpdHMgc3ViY2xhc3Nlcy4KIHN0YXRpYyBj
b25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjVHlwZWRBcnJheVZpZXcgICAgID0gU3BlY0ludDhBcnJh
eSB8IFNwZWNJbnQxNkFycmF5IHwgU3BlY0ludDMyQXJyYXkgfCBTcGVjVWludDhBcnJheSB8IFNw
ZWNVaW50OENsYW1wZWRBcnJheSB8IFNwZWNVaW50MTZBcnJheSB8IFNwZWNVaW50MzJBcnJheSB8
IFNwZWNGbG9hdDMyQXJyYXkgfCBTcGVjRmxvYXQ2NEFycmF5Owotc3RhdGljIGNvbnN0IFNwZWN1
bGF0ZWRUeXBlIFNwZWNBcmd1bWVudHMgICAgICAgICAgPSAweDAwMDAxMDAwOyAvLyBJdCdzIGRl
ZmluaXRlbHkgYW4gQXJndW1lbnRzIG9iamVjdC4KLXN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlw
ZSBTcGVjU3RyaW5nT2JqZWN0ICAgICAgID0gMHgwMDAwMjAwMDsgLy8gSXQncyBkZWZpbml0ZWx5
IGEgU3RyaW5nT2JqZWN0Lgorc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNEaXJlY3RB
cmd1bWVudHMgICAgPSAweDAwMDAxMDAwOyAvLyBJdCdzIGRlZmluaXRlbHkgYSBEaXJlY3RBcmd1
bWVudHMgb2JqZWN0Lgorc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNTY29wZWRBcmd1
bWVudHMgICAgPSAweDAwMDAyMDAwOyAvLyBJdCdzIGRlZmluaXRlbHkgYSBTY29wZWRBcmd1bWVu
dHMgb2JqZWN0Lgorc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNTdHJpbmdPYmplY3Qg
ICAgICAgPSAweDAwMDA0MDAwOyAvLyBJdCdzIGRlZmluaXRlbHkgYSBTdHJpbmdPYmplY3QuCiBz
dGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY09iamVjdE90aGVyICAgICAgICA9IDB4MDAw
MDgwMDA7IC8vIEl0J3MgZGVmaW5pdGVseSBhbiBvYmplY3QgYnV0IG5vdCBKU0ZpbmFsT2JqZWN0
LCBKU0FycmF5LCBvciBKU0Z1bmN0aW9uLgogc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNw
ZWNPYmplY3QgICAgICAgICAgICAgPSAweDAwMDBmZmZmOyAvLyBCaXRtYXNrIHVzZWQgZm9yIHRl
c3RpbmcgZm9yIGFueSBraW5kIG9mIG9iamVjdCBwcmVkaWN0aW9uLgogc3RhdGljIGNvbnN0IFNw
ZWN1bGF0ZWRUeXBlIFNwZWNTdHJpbmdJZGVudCAgICAgICAgPSAweDAwMDEwMDAwOyAvLyBJdCdz
IGRlZmluaXRlbHkgYSBKU1N0cmluZywgYW5kIGl0J3MgYW4gaWRlbnRpZmllci4KQEAgLTE5Myw5
ICsxOTQsMTQgQEAgaW5saW5lIGJvb2wgaXNGbG9hdDY0QXJyYXlTcGVjdWxhdGlvbihTcAogICAg
IHJldHVybiB2YWx1ZSA9PSBTcGVjRmxvYXQ2NEFycmF5OwogfQogCi1pbmxpbmUgYm9vbCBpc0Fy
Z3VtZW50c1NwZWN1bGF0aW9uKFNwZWN1bGF0ZWRUeXBlIHZhbHVlKQoraW5saW5lIGJvb2wgaXNE
aXJlY3RBcmd1bWVudHNTcGVjdWxhdGlvbihTcGVjdWxhdGVkVHlwZSB2YWx1ZSkKIHsKLSAgICBy
ZXR1cm4gISF2YWx1ZSAmJiAodmFsdWUgJiBTcGVjQXJndW1lbnRzKSA9PSB2YWx1ZTsKKyAgICBy
ZXR1cm4gdmFsdWUgPT0gU3BlY0RpcmVjdEFyZ3VtZW50czsKK30KKworaW5saW5lIGJvb2wgaXNT
Y29wZWRBcmd1bWVudHNTcGVjdWxhdGlvbihTcGVjdWxhdGVkVHlwZSB2YWx1ZSkKK3sKKyAgICBy
ZXR1cm4gdmFsdWUgPT0gU3BlY1Njb3BlZEFyZ3VtZW50czsKIH0KIAogaW5saW5lIGJvb2wgaXNB
Y3Rpb25hYmxlSW50TXV0YWJsZUFycmF5U3BlY3VsYXRpb24oU3BlY3VsYXRlZFR5cGUgdmFsdWUp
CkBAIC0yMjQsMTMgKzIzMCwxNCBAQCBpbmxpbmUgYm9vbCBpc0FjdGlvbmFibGVUeXBlZE11dGFi
bGVBcnJhCiBpbmxpbmUgYm9vbCBpc0FjdGlvbmFibGVNdXRhYmxlQXJyYXlTcGVjdWxhdGlvbihT
cGVjdWxhdGVkVHlwZSB2YWx1ZSkKIHsKICAgICByZXR1cm4gaXNBcnJheVNwZWN1bGF0aW9uKHZh
bHVlKQotICAgICAgICB8fCBpc0FyZ3VtZW50c1NwZWN1bGF0aW9uKHZhbHVlKQogICAgICAgICB8
fCBpc0FjdGlvbmFibGVUeXBlZE11dGFibGVBcnJheVNwZWN1bGF0aW9uKHZhbHVlKTsKIH0KIAog
aW5saW5lIGJvb2wgaXNBY3Rpb25hYmxlQXJyYXlTcGVjdWxhdGlvbihTcGVjdWxhdGVkVHlwZSB2
YWx1ZSkKIHsKICAgICByZXR1cm4gaXNTdHJpbmdTcGVjdWxhdGlvbih2YWx1ZSkKKyAgICAgICAg
fHwgaXNEaXJlY3RBcmd1bWVudHNTcGVjdWxhdGlvbih2YWx1ZSkKKyAgICAgICAgfHwgaXNTY29w
ZWRBcmd1bWVudHNTcGVjdWxhdGlvbih2YWx1ZSkKICAgICAgICAgfHwgaXNBY3Rpb25hYmxlTXV0
YWJsZUFycmF5U3BlY3VsYXRpb24odmFsdWUpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAko
cmV2aXNpb24gMTgwNzIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9C
eXRlY29kZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNiw3ICsxMTYsNyBAQCBQ
YXJzZXJFcnJvciBCeXRlY29kZUdlbmVyYXRvcjo6Z2VuZXJhdGUoCiAgICAgbV9jb2RlQmxvY2st
PnNocmlua1RvRml0KCk7CiAKICAgICBpZiAobV9jb2RlQmxvY2stPnN5bWJvbFRhYmxlKCkgJiYg
IW1fY29kZUJsb2NrLT52bSgpLT50eXBlUHJvZmlsZXIoKSkKLSAgICAgICAgbV9jb2RlQmxvY2st
PnNldFN5bWJvbFRhYmxlKG1fY29kZUJsb2NrLT5zeW1ib2xUYWJsZSgpLT5jbG9uZUNhcHR1cmVk
TmFtZXMoKm1fY29kZUJsb2NrLT52bSgpKSk7CisgICAgICAgIG1fY29kZUJsb2NrLT5zZXRTeW1i
b2xUYWJsZShtX2NvZGVCbG9jay0+c3ltYm9sVGFibGUoKS0+Y2xvbmVJZ25vcmluZ1N0YWNrKCpt
X2NvZGVCbG9jay0+dm0oKSkpOwogCiAgICAgaWYgKG1fZXhwcmVzc2lvblRvb0RlZXApCiAgICAg
ICAgIHJldHVybiBQYXJzZXJFcnJvcihQYXJzZXJFcnJvcjo6T3V0T2ZNZW1vcnkpOwpAQCAtMTI0
LDEzICsxMjQsMTkgQEAgUGFyc2VyRXJyb3IgQnl0ZWNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlKAog
fQogCiBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6YWRkVmFyKAotICAgIGNvbnN0IElk
ZW50aWZpZXImIGlkZW50LCBDb25zdGFudE1vZGUgY29uc3RhbnRNb2RlLCBXYXRjaE1vZGUgd2F0
Y2hNb2RlKQorICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBDb25zdGFudE1vZGUgY29uc3Rh
bnRNb2RlKQogewogICAgIEFTU0VSVChzdGF0aWNfY2FzdDxzaXplX3Q+KG1fY29kZUJsb2NrLT5t
X251bVZhcnMpID09IG1fY2FsbGVlUmVnaXN0ZXJzLnNpemUoKSk7CiAgICAgCiAgICAgQ29uY3Vy
cmVudEpJVExvY2tlciBsb2NrZXIoc3ltYm9sVGFibGUoKS5tX2xvY2spOwotICAgIGludCBpbmRl
eCA9IHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKG1fY2FsbGVlUmVnaXN0ZXJzLnNpemUoKSkub2Zm
c2V0KCk7Ci0gICAgU3ltYm9sVGFibGVFbnRyeSBuZXdFbnRyeShpbmRleCwgY29uc3RhbnRNb2Rl
ID09IElzQ29uc3RhbnQgPyBSZWFkT25seSA6IDApOworICAgIFZhck9mZnNldCB2YXJPZmZzZXQ7
CisgICAgaWYgKHZhcktpbmQgPT0gSGVhcFZhcktpbmQpCisgICAgICAgIHZhck9mZnNldCA9IFZh
ck9mZnNldChIZWFwT2Zmc2V0KG1fbnVtQ2FwdHVyZWRWYXJpYWJsZXMrKykpOworICAgIGVsc2Ug
eworICAgICAgICBBU1NFUlQodmFyS2luZCA9PSBTdGFja1ZhcktpbmQpOworICAgICAgICB2YXJP
ZmZzZXQgPSBWYXJPZmZzZXQodmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwobV9jYWxsZWVSZWdpc3Rl
cnMuc2l6ZSgpKSk7CisgICAgfQorICAgIFN5bWJvbFRhYmxlRW50cnkgbmV3RW50cnkodmFyT2Zm
c2V0LCBjb25zdGFudE1vZGUgPT0gSXNDb25zdGFudCA/IFJlYWRPbmx5IDogMCk7CiAgICAgU3lt
Ym9sVGFibGU6Ok1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IHN5bWJvbFRhYmxlKCkuYWRkKGxvY2tl
ciwgaWRlbnQuaW1wbCgpLCBuZXdFbnRyeSk7CiAKICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5
KQpAQCAtMjI4LDcgKzIzNCw2IEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRv
cihWTSYKICAgICB9CiAgICAgUmVnaXN0ZXJJRCogbG9jYWxBcmd1bWVudHNSZWdpc3RlciA9IG51
bGxwdHI7CiAgICAgUmVnaXN0ZXJJRCogc2NyYXRjaCA9IGFkZFZhcigpOwotICAgIG1fc3ltYm9s
VGFibGUtPnNldENhcHR1cmVTdGFydCh2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChtX2NvZGVCbG9j
ay0+bV9udW1WYXJzKS5vZmZzZXQoKSk7CiAKICAgICBpZiAoZnVuY3Rpb25Ob2RlLT51c2VzQXJn
dW1lbnRzKCkgfHwgY29kZUJsb2NrLT51c2VzRXZhbCgpKSB7IC8vIE1heSByZWlmeSBhcmd1bWVu
dHMgb2JqZWN0LgogICAgICAgICBSZWdpc3RlcklEKiB1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0
ZXIgPSBhZGRWYXIoKTsgLy8gQW5vbnltb3VzLCBzbyBpdCBjYW4ndCBiZSBtb2RpZmllZCBieSB1
c2VyIGNvZGUuCkBAIC01MzksMTkgKzU0NCw2IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJh
dG9yOjp1bmNoZWNrZWQKICAgICByZXR1cm4gbV9sb2NhbEFyZ3VtZW50c1JlZ2lzdGVyOwogfQog
Ci1SZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6Y3JlYXRlTGF6eVJlZ2lzdGVySWZOZWNl
c3NhcnkoUmVnaXN0ZXJJRCogcmVnKQotewotICAgIGlmICghcmVnLT52aXJ0dWFsUmVnaXN0ZXIo
KS5pc0xvY2FsKCkpCi0gICAgICAgIHJldHVybiByZWc7Ci0KLSAgICBpbnQgbG9jYWxWYXJpYWJs
ZU51bWJlciA9IHJlZy0+dmlydHVhbFJlZ2lzdGVyKCkudG9Mb2NhbCgpOwotCi0gICAgaWYgKG1f
bGFzdExhenlGdW5jdGlvbiA8PSBsb2NhbFZhcmlhYmxlTnVtYmVyIHx8IGxvY2FsVmFyaWFibGVO
dW1iZXIgPCBtX2ZpcnN0TGF6eUZ1bmN0aW9uKQotICAgICAgICByZXR1cm4gcmVnOwotICAgIGVt
aXRMYXp5TmV3RnVuY3Rpb24ocmVnLCBtX2xhenlGdW5jdGlvbnMuZ2V0KGxvY2FsVmFyaWFibGVO
dW1iZXIpKTsKLSAgICByZXR1cm4gcmVnOwotfQotCiBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVy
YXRvcjo6bmV3UmVnaXN0ZXIoKQogewogICAgIG1fY2FsbGVlUmVnaXN0ZXJzLmFwcGVuZCh2aXJ0
dWFsUmVnaXN0ZXJGb3JMb2NhbChtX2NhbGxlZVJlZ2lzdGVycy5zaXplKCkpKTsKQEAgLTExOTQs
OSArMTE4Niw2IEBAIExvY2FsIEJ5dGVjb2RlR2VuZXJhdG9yOjpsb2NhbChjb25zdCBJZGUKIHsK
ICAgICBpZiAocHJvcGVydHkgPT0gcHJvcGVydHlOYW1lcygpLnRoaXNJZGVudGlmaWVyKQogICAg
ICAgICByZXR1cm4gTG9jYWwodGhpc1JlZ2lzdGVyKCksIFJlYWRPbmx5LCBMb2NhbDo6U3BlY2lh
bExvY2FsKTsKLSAgICBib29sIGlzQXJndW1lbnRzID0gcHJvcGVydHkgPT0gcHJvcGVydHlOYW1l
cygpLmFyZ3VtZW50czsKLSAgICBpZiAoaXNBcmd1bWVudHMpCi0gICAgICAgIGNyZWF0ZUFyZ3Vt
ZW50c0lmTmVjZXNzYXJ5KCk7CiAKICAgICBpZiAoIXNob3VsZE9wdGltaXplTG9jYWxzKCkpCiAg
ICAgICAgIHJldHVybiBMb2NhbCgpOwpAQCAtMTIwNSw4ICsxMTk0LDEwIEBAIExvY2FsIEJ5dGVj
b2RlR2VuZXJhdG9yOjpsb2NhbChjb25zdCBJZGUKICAgICBpZiAoZW50cnkuaXNOdWxsKCkpCiAg
ICAgICAgIHJldHVybiBMb2NhbCgpOwogCi0KLSAgICBSZWdpc3RlcklEKiBsb2NhbCA9IGNyZWF0
ZUxhenlSZWdpc3RlcklmTmVjZXNzYXJ5KCZyZWdpc3RlckZvcihlbnRyeS5nZXRJbmRleCgpKSk7
CisgICAgVmFyT2Zmc2V0IG9mZnNldCA9IGVudHJ5LnZhck9mZnNldCgpOworICAgIAorICAgIAor
ICAgIFJlZ2lzdGVySUQqIGxvY2FsID0gJnJlZ2lzdGVyRm9yKGVudHJ5LmdldEluZGV4KCkpOwog
CiAgICAgaWYgKGlzQ2FwdHVyZWQobG9jYWwtPmluZGV4KCkpICYmIG1fbGV4aWNhbEVudmlyb25t
ZW50UmVnaXN0ZXIpCiAgICAgICAgIHJldHVybiBMb2NhbCgpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAko
cmV2aXNpb24gMTgwNzIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9C
eXRlY29kZUdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODMsNTggKzE4Myw0OSBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgSXNDYXB0dXJlZAogICAgIH07CiAKLSAgICBjbGFzcyBM
b2NhbCB7CisgICAgY2xhc3MgVmFyaWFibGUgewogICAgIHB1YmxpYzoKLSAgICAgICAgTG9jYWwo
KQotICAgICAgICAgICAgOiBtX2xvY2FsKDApCisgICAgICAgIGVudW0gVmFyaWFibGVLaW5kIHsg
Tm9ybWFsVmFyaWFibGUsIFNwZWNpYWxWYXJpYWJsZSB9OworCisgICAgICAgIFZhcmlhYmxlKCkK
KyAgICAgICAgICAgIDogbV9vZmZzZXQoKQorICAgICAgICAgICAgLCBtX2xvY2FsKG51bGxwdHIp
CiAgICAgICAgICAgICAsIG1fYXR0cmlidXRlcygwKQotICAgICAgICAgICAgLCBtX2tpbmQoTm9y
bWFsTG9jYWwpCisgICAgICAgICAgICAsIG1fa2luZChOb3JtYWxWYXJpYWJsZSkKICAgICAgICAg
ewogICAgICAgICB9CiAKLSAgICAgICAgZW51bSBMb2NhbEtpbmQgeyBOb3JtYWxMb2NhbCwgU3Bl
Y2lhbExvY2FsIH07Ci0KLSAgICAgICAgTG9jYWwoUmVnaXN0ZXJJRCogbG9jYWwsIHVuc2lnbmVk
IGF0dHJpYnV0ZXMsIExvY2FsS2luZCBraW5kKQotICAgICAgICAgICAgOiBtX2xvY2FsKGxvY2Fs
KQorICAgICAgICBMb2NhbChjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgVmFyT2Zmc2V0IG9mZnNl
dCwgUmVnaXN0ZXJJRCogbG9jYWwsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIExvY2FsS2luZCBraW5k
KQorICAgICAgICAgICAgOiBtX2lkZW50KGlkZW50KQorICAgICAgICAgICAgLCBtX29mZnNldChv
ZmZzZXQpCisgICAgICAgICAgICAsIG1fbG9jYWwobG9jYWwpCiAgICAgICAgICAgICAsIG1fYXR0
cmlidXRlcyhhdHRyaWJ1dGVzKQogICAgICAgICAgICAgLCBtX2tpbmQoa2luZCkKICAgICAgICAg
ewogICAgICAgICB9CiAKLSAgICAgICAgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuIG1f
bG9jYWw7IH0KLQotICAgICAgICBSZWdpc3RlcklEKiBnZXQoKSBjb25zdCB7IHJldHVybiBtX2xv
Y2FsOyB9CisgICAgICAgIC8vIElmIGl0J3MgdW5zZXQsIHRoZW4gaXQgaXMgYSBub24tbG9jYWxs
eS1zY29wZWQgdmFyaWFibGUuIElmIGl0IGlzIHNldCwgdGhlbiBpdCBjb3VsZCBiZQorICAgICAg
ICAvLyBhIHN0YWNrIHZhcmlhYmxlLCBhIHNjb3BlZCB2YXJpYWJsZSBpbiB0aGUgbG9jYWwgc2Nv
cGUsIG9yIGEgdmFyaWFibGUgY2FwdHVyZWQgaW4gdGhlCisgICAgICAgIC8vIGRpcmVjdCBhcmd1
bWVudHMgb2JqZWN0LgorICAgICAgICBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhbV9vZmZz
ZXQ7IH0KKyAgICAgICAgCisgICAgICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50KCkgY29uc3Qg
eyByZXR1cm4gbV9pZGVudDsgfQorICAgICAgICAKKyAgICAgICAgVmFyT2Zmc2V0IG9mZnNldCgp
IGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0OyB9CisgICAgICAgIGJvb2wgaXNMb2NhbCgpIGNvbnN0
IHsgcmV0dXJuIG1fb2Zmc2V0LmlzU3RhY2soKTsgfQorICAgICAgICBSZWdpc3RlcklEKiBsb2Nh
bCgpIGNvbnN0IHsgcmV0dXJuIG1fbG9jYWw7IH0KIAogICAgICAgICBib29sIGlzUmVhZE9ubHko
KSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0ZXMgJiBSZWFkT25seTsgfQotICAgICAgICBib29s
IGlzU3BlY2lhbCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZCAhPSBOb3JtYWxMb2NhbDsgfQorICAg
ICAgICBib29sIGlzU3BlY2lhbCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZCAhPSBOb3JtYWxWYXJp
YWJsZTsgfQogCiAgICAgcHJpdmF0ZToKKyAgICAgICAgSWRlbnRpZmllciBtX2lkZW50OworICAg
ICAgICBWYXJPZmZldCBtX29mZnN0OwogICAgICAgICBSZWdpc3RlcklEKiBtX2xvY2FsOwogICAg
ICAgICB1bnNpZ25lZCBtX2F0dHJpYnV0ZXM7CiAgICAgICAgIExvY2FsS2luZCBtX2tpbmQ7CiAg
ICAgfTsKIAotICAgIHN0cnVjdCBSZXNvbHZlU2NvcGVJbmZvIHsKLSAgICAgICAgUmVzb2x2ZVNj
b3BlSW5mbygpCi0gICAgICAgICAgICA6IG1fbG9jYWxJbmRleCgwKQotICAgICAgICAgICAgLCBt
X3Jlc29sdmVTY29wZUtpbmQoTm9uTG9jYWxTY29wZSkKLSAgICAgICAgewotICAgICAgICB9Ci0K
LSAgICAgICAgUmVzb2x2ZVNjb3BlSW5mbyhpbnQgaW5kZXgpCi0gICAgICAgICAgICA6IG1fbG9j
YWxJbmRleChpbmRleCkKLSAgICAgICAgICAgICwgbV9yZXNvbHZlU2NvcGVLaW5kKExvY2FsU2Nv
cGUpCi0gICAgICAgIHsKLSAgICAgICAgfQotCi0gICAgICAgIGJvb2wgaXNMb2NhbCgpIGNvbnN0
IHsgcmV0dXJuIG1fcmVzb2x2ZVNjb3BlS2luZCA9PSBMb2NhbFNjb3BlOyB9Ci0gICAgICAgIGlu
dCBsb2NhbEluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9sb2NhbEluZGV4OyB9Ci0KLSAgICBwcml2
YXRlOgotICAgICAgICBpbnQgbV9sb2NhbEluZGV4OwotICAgICAgICBlbnVtIHsgTG9jYWxTY29w
ZSwgTm9uTG9jYWxTY29wZSB9IG1fcmVzb2x2ZVNjb3BlS2luZDsKLSAgICB9OwotCiAgICAgc3Ry
dWN0IFRyeVJhbmdlIHsKICAgICAgICAgUmVmUHRyPExhYmVsPiBzdGFydDsKICAgICAgICAgUmVm
UHRyPExhYmVsPiBlbmQ7CkBAIC0yODUsOSArMjc2LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIGJvb2wgaXNDYXB0dXJlZChpbnQgb3BlcmFuZCk7CiAgICAgICAgIENhcHR1cmVNb2RlIGNh
cHR1cmVNb2RlKGludCBvcGVyYW5kKSB7IHJldHVybiBpc0NhcHR1cmVkKG9wZXJhbmQpID8gSXND
YXB0dXJlZCA6IE5vdENhcHR1cmVkOyB9CiAgICAgICAgIAotICAgICAgICBMb2NhbCBsb2NhbChj
b25zdCBJZGVudGlmaWVyJik7Ci0gICAgICAgIExvY2FsIGNvbnN0TG9jYWwoY29uc3QgSWRlbnRp
ZmllciYpOwotCisgICAgICAgIFZhcmlhYmxlIHZhcmlhYmxlKGNvbnN0IElkZW50aWZpZXImKTsK
KyAgICAgICAgCiAgICAgICAgIC8vIFJldHVybnMgdGhlIHJlZ2lzdGVyIHN0b3JpbmcgInRoaXMi
CiAgICAgICAgIFJlZ2lzdGVySUQqIHRoaXNSZWdpc3RlcigpIHsgcmV0dXJuICZtX3RoaXNSZWdp
c3RlcjsgfQogICAgICAgICAKQEAgLTUwMyw5ICs0OTMsOSBAQCBuYW1lc3BhY2UgSlNDIHsKIAog
ICAgICAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSgpOwogICAgICAgICBSZWdpc3RlcklEKiBl
bWl0UmVzb2x2ZUNvbnN0YW50TG9jYWwoUmVnaXN0ZXJJRCogZHN0LCBjb25zdCBJZGVudGlmaWVy
JiwgUmVzb2x2ZVNjb3BlSW5mbyYpOwotICAgICAgICBSZWdpc3RlcklEKiBlbWl0UmVzb2x2ZVNj
b3BlKFJlZ2lzdGVySUQqIGRzdCwgY29uc3QgSWRlbnRpZmllciYsIFJlc29sdmVTY29wZUluZm8m
KTsKLSAgICAgICAgUmVnaXN0ZXJJRCogZW1pdEdldEZyb21TY29wZShSZWdpc3RlcklEKiBkc3Qs
IFJlZ2lzdGVySUQqIHNjb3BlLCBjb25zdCBJZGVudGlmaWVyJiwgUmVzb2x2ZU1vZGUsIGNvbnN0
IFJlc29sdmVTY29wZUluZm8mKTsKLSAgICAgICAgUmVnaXN0ZXJJRCogZW1pdFB1dFRvU2NvcGUo
UmVnaXN0ZXJJRCogc2NvcGUsIGNvbnN0IElkZW50aWZpZXImLCBSZWdpc3RlcklEKiB2YWx1ZSwg
UmVzb2x2ZU1vZGUsIGNvbnN0IFJlc29sdmVTY29wZUluZm8mKTsKKyAgICAgICAgUmVnaXN0ZXJJ
RCogZW1pdFJlc29sdmVTY29wZShSZWdpc3RlcklEKiBkc3QsIGNvbnN0IFZhcmlhYmxlJik7Cisg
ICAgICAgIFJlZ2lzdGVySUQqIGVtaXRHZXRGcm9tU2NvcGUoUmVnaXN0ZXJJRCogZHN0LCBSZWdp
c3RlcklEKiBzY29wZSwgY29uc3QgVmFyaWFibGUmLCBSZXNvbHZlTW9kZSk7CisgICAgICAgIFJl
Z2lzdGVySUQqIGVtaXRQdXRUb1Njb3BlKFJlZ2lzdGVySUQqIHNjb3BlLCBjb25zdCBWYXJpYWJs
ZSYsIFJlZ2lzdGVySUQqIHZhbHVlLCBSZXNvbHZlTW9kZSk7CiAKICAgICAgICAgUGFzc1JlZlB0
cjxMYWJlbD4gZW1pdExhYmVsKExhYmVsKik7CiAgICAgICAgIHZvaWQgZW1pdExvb3BIaW50KCk7
CkBAIC02MTMsOSArNjAzLDEyIEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIC8vIEFkZHMg
YSB2YXIgc2xvdCBhbmQgbWFwcyBpdCB0byB0aGUgbmFtZSBpZGVudCBpbiBzeW1ib2xUYWJsZSgp
LgogICAgICAgICBlbnVtIFdhdGNoTW9kZSB7IElzV2F0Y2hhYmxlLCBOb3RXYXRjaGFibGUgfTsK
LSAgICAgICAgUmVnaXN0ZXJJRCogYWRkVmFyKGNvbnN0IElkZW50aWZpZXImLCBDb25zdGFudE1v
ZGUsIFdhdGNoTW9kZSk7Ci0KLSAgICAgICAgLy8gQWRkcyBhbiBhbm9ueW1vdXMgdmFyIHNsb3Qu
IFRvIGdpdmUgdGhpcyBzbG90IGEgbmFtZSwgYWRkIGl0IHRvIHN5bWJvbFRhYmxlKCkuCisgICAg
ICAgIFNjb3BlT2Zmc2V0IGFkZFNjb3BlZFZhcihjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgQ29u
c3RhbnRNb2RlIGNvbnN0YW50TW9kZSwgV2F0Y2hNb2RlIHdhdGhNb2RlKTsKKyAgICAgICAgCisg
ICAgICAgIC8vIEFkZHMgYSBsb2NhbCB2YXIgc2xvdC4KKyAgICAgICAgUmVnaXN0ZXJJRCogYWRk
VmFyKGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBDb25zdGFudE1vZGUgY29uc3RhbnRNb2RlKTsK
KyAgICAgICAgCisgICAgICAgIC8vIEFkZHMgYW4gYW5vbnltb3VzIGxvY2FsIHZhciBzbG90LiBU
byBnaXZlIHRoaXMgc2xvdCBhIG5hbWUsIGFkZCBpdCB0byBzeW1ib2xUYWJsZSgpLgogICAgICAg
ICBSZWdpc3RlcklEKiBhZGRWYXIoKQogICAgICAgICB7CiAgICAgICAgICAgICArK21fY29kZUJs
b2NrLT5tX251bVZhcnM7CkBAIC03MTYsOSArNzA5LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAg
ICAgICAgUmVnaXN0ZXJJRCogZW1pdFRocm93RXhwcmVzc2lvblRvb0RlZXBFeGNlcHRpb24oKTsK
IAotICAgICAgICB2b2lkIGNyZWF0ZUFyZ3VtZW50c0lmTmVjZXNzYXJ5KCk7Ci0gICAgICAgIFJl
Z2lzdGVySUQqIGNyZWF0ZUxhenlSZWdpc3RlcklmTmVjZXNzYXJ5KFJlZ2lzdGVySUQqKTsKLSAg
ICAgICAgCiAgICAgICAgIGJvb2wgaGFzV2F0Y2hhYmxlVmFyaWFibGUoaW50IG9wZXJhbmQpIGNv
bnN0CiAgICAgICAgIHsKICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciByZWcob3BlcmFuZCk7
CkBAIC03NjYsNiArNzU2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFZlY3RvcjxJZGVu
dGlmaWVyLCAxNj4gbV93YXRjaGFibGVWYXJpYWJsZXM7CiAgICAgICAgIFNlZ21lbnRlZFZlY3Rv
cjxSZWdpc3RlcklELCAzMj4gbV9jb25zdGFudFBvb2xSZWdpc3RlcnM7CiAgICAgICAgIFNlZ21l
bnRlZFZlY3RvcjxSZWdpc3RlcklELCAzMj4gbV9jYWxsZWVSZWdpc3RlcnM7CisgICAgICAgIHVu
c2lnbmVkIG1fbnVtQ2FwdHVyZWRWYXJpYWJsZXM7CiAgICAgICAgIFNlZ21lbnRlZFZlY3RvcjxS
ZWdpc3RlcklELCAzMj4gbV9wYXJhbWV0ZXJzOwogICAgICAgICBTZWdtZW50ZWRWZWN0b3I8TGFi
ZWwsIDMyPiBtX2xhYmVsczsKICAgICAgICAgTGFiZWxTY29wZVN0b3JlIG1fbGFiZWxTY29wZXM7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rl
c0NvZGVnZW4uY3BwCShyZXZpc2lvbiAxODA3MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk2Miw3ICs5
NjIsNyBAQCBSZWdpc3RlcklEKiBWb2lkTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjCiAgICAgcmV0
dXJuIGdlbmVyYXRvci5lbWl0TG9hZChkc3QsIGpzVW5kZWZpbmVkKCkpOwogfQogCi0vLyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVHlwZU9mVmFsdWVOb2RlIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0g
VHlwZU9mUmVzb2x2ZU5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAog
UmVnaXN0ZXJJRCogVHlwZU9mUmVzb2x2ZU5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVy
YXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SGVhcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RIZWFwLmgJKHJldmlzaW9uIDE4MDcyMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RIZWFwLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQ3LDcgKzQ3LDYgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAgIG1h
Y3JvKFdvcmxkKSBcCiAgICAgbWFjcm8oU3RhY2spIFwKICAgICBtYWNybyhIZWFwKSBcCi0gICAg
bWFjcm8oQXJndW1lbnRzX3JlZ2lzdGVycykgXAogICAgIG1hY3JvKEJ1dHRlcmZseV9wdWJsaWNM
ZW5ndGgpIFwKICAgICBtYWNybyhCdXR0ZXJmbHlfdmVjdG9yTGVuZ3RoKSBcCiAgICAgbWFjcm8o
R2V0dGVyU2V0dGVyX2dldHRlcikgXApAQCAtNjUsNyArNjQsOCBAQCBuYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIERGRyB7CiAgICAgbWFjcm8oSW5kZXhlZENvbnRpZ3VvdXNQcm9wZXJ0aWVzKSBc
CiAgICAgbWFjcm8oSW5kZXhlZEFycmF5U3RvcmFnZVByb3BlcnRpZXMpIFwKICAgICBtYWNybyhB
cnJheVN0b3JhZ2VQcm9wZXJ0aWVzKSBcCi0gICAgbWFjcm8oVmFyaWFibGVzKSBcCisgICAgbWFj
cm8oRGlyZWN0QXJndW1lbnRzUHJvcGVydGllcykgXAorICAgIG1hY3JvKFNjb3BlZEFyZ3VtZW50
c1Byb3BlcnRpZXMpIFwKICAgICBtYWNybyhUeXBlZEFycmF5UHJvcGVydGllcykgXAogICAgIG1h
Y3JvKEhlYXBPYmplY3RDb3VudCkgLyogVXNlZCB0byByZWZsZWN0IHRoZSBmYWN0IHRoYXQgc29t
ZSBhbGxvY2F0aW9ucyByZXZlYWwgb2JqZWN0IGlkZW50aXR5ICovXAogICAgIG1hY3JvKFJlZ0V4
cFN0YXRlKSBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50
ZXJwcmV0ZXJJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCShyZXZpc2lvbiAxODA3MjApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEwMzAsNyArMTAzMCw4IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnBy
ZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAg
IGZvck5vZGUobm9kZSkuc2V0KG1fZ3JhcGgsIG1fZ3JhcGgubV92bS5zdHJpbmdTdHJ1Y3R1cmUu
Z2V0KCkpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50
czoKKyAgICAgICAgY2FzZSBBcnJheTo6RGlyZWN0QXJndW1lbnRzOgorICAgICAgICBjYXNlIEFy
cmF5OjpTY29wZWRBcmd1bWVudHM6CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VIZWFw
VG9wKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6SW50MzI6CkBA
IC0xNjE3LDggKzE2MTgsMTEgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3Rh
dGVUeQogICAgICAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6CiAgICAgICAgIGNhc2UgQXJy
YXk6OlNsb3dQdXRBcnJheVN0b3JhZ2U6CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBBcnJheTo6QXJndW1lbnRzOgotICAgICAgICAgICAgZmlsdGVyKG5vZGUtPmNoaWxkMSgpLCBT
cGVjQXJndW1lbnRzKTsKKyAgICAgICAgY2FzZSBBcnJheTo6RGlyZWN0QXJndW1lbnRzOgorICAg
ICAgICAgICAgZmlsdGVyKG5vZGUtPmNoaWxkMSgpLCBTcGVjRGlyZWN0QXJndW1lbnRzKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFycmF5OjpTY29wZWRBcmd1bWVudHM6Cisg
ICAgICAgICAgICBmaWx0ZXIobm9kZS0+Y2hpbGQxKCksIFNwZWNTY29wZWRBcmd1bWVudHMpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkludDhBcnJheToKICAgICAg
ICAgICAgIGZpbHRlcihub2RlLT5jaGlsZDEoKSwgU3BlY0ludDhBcnJheSk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuY3BwCShyZXZpc2lvbiAxODA3MjAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE5Nyw4ICsxOTcsMTUgQEAgQXJyYXlNb2RlIEFycmF5TW9kZTo6cmVmaW5lKAog
ICAgICAgICBpZiAoaXNTdHJpbmdTcGVjdWxhdGlvbihiYXNlKSkKICAgICAgICAgICAgIHJldHVy
biB3aXRoVHlwZShBcnJheTo6U3RyaW5nKTsKICAgICAgICAgCi0gICAgICAgIGlmIChpc0FyZ3Vt
ZW50c1NwZWN1bGF0aW9uKGJhc2UpKQotICAgICAgICAgICAgcmV0dXJuIHdpdGhUeXBlKEFycmF5
OjpBcmd1bWVudHMpOworICAgICAgICBpZiAoaXNEaXJlY3RBcmd1bWVudHNTcGVjdWxhdGlvbihi
YXNlKSB8fCBpc1Njb3BlZEFyZ3VtZW50c1NwZWN1bGF0aW9uKGJhc2UpKSB7CisgICAgICAgICAg
ICAvLyBIYW5kbGUgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBhcyBnZW5lcmljIGFjY2Vzc2VzLgor
ICAgICAgICAgICAgaWYgKGdyYXBoLmhhc0V4aXRTaXRlKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywg
T3V0T2ZCb3VuZHMpIHx8ICFpc0luQm91bmRzKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIEFy
cmF5TW9kZShBcnJheTo6R2VuZXJpYyk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChp
c0RpcmVjdEFyZ3VtZW50c1NwZWN1bGF0aW9uKGJhc2UpKQorICAgICAgICAgICAgICAgIHJldHVy
biB3aXRoVHlwZShBcnJheTo6RGlyZWN0QXJndW1lbnRzKTsKKyAgICAgICAgICAgIHJldHVybiB3
aXRoVHlwZShBcnJheTo6U2NvcGVkQXJndW1lbnRzKTsKKyAgICAgICAgfQogICAgICAgICAKICAg
ICAgICAgQXJyYXlNb2RlIHJlc3VsdDsKICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CkBA
IC0zOTYsOCArNDAzLDExIEBAIGJvb2wgQXJyYXlNb2RlOjphbHJlYWR5Q2hlY2tlZChHcmFwaCYg
Z3IKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9IH0KICAgICAgICAgCi0gICAg
Y2FzZSBBcnJheTo6QXJndW1lbnRzOgotICAgICAgICByZXR1cm4gc3BlY3VsYXRpb25DaGVja2Vk
KHZhbHVlLm1fdHlwZSwgU3BlY0FyZ3VtZW50cyk7CisgICAgY2FzZSBBcnJheTo6RGlyZWN0QXJn
dW1lbnRzOgorICAgICAgICByZXR1cm4gc3BlY3VsYXRpb25DaGVja2VkKHZhbHVlLm1fdHlwZSwg
U3BlY0RpcmVjdEFyZ3VtZW50cyk7CisgICAgICAgIAorICAgIGNhc2UgQXJyYXk6OlNjb3BlZEFy
Z3VtZW50czoKKyAgICAgICAgcmV0dXJuIHNwZWN1bGF0aW9uQ2hlY2tlZCh2YWx1ZS5tX3R5cGUs
IFNwZWNTY29wZWRBcmd1bWVudHMpOwogICAgICAgICAKICAgICBjYXNlIEFycmF5OjpJbnQ4QXJy
YXk6CiAgICAgICAgIHJldHVybiBzcGVjdWxhdGlvbkNoZWNrZWQodmFsdWUubV90eXBlLCBTcGVj
SW50OEFycmF5KTsKQEAgLTQ2MSw4ICs0NzEsMTAgQEAgY29uc3QgY2hhciogYXJyYXlUeXBlVG9T
dHJpbmcoQXJyYXk6OlR5cAogICAgICAgICByZXR1cm4gIkFycmF5U3RvcmFnZSI7CiAgICAgY2Fz
ZSBBcnJheTo6U2xvd1B1dEFycmF5U3RvcmFnZToKICAgICAgICAgcmV0dXJuICJTbG93UHV0QXJy
YXlTdG9yYWdlIjsKLSAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6Ci0gICAgICAgIHJldHVybiAi
QXJndW1lbnRzIjsKKyAgICBjYXNlIEFycmF5OjpEaXJlY3RBcmd1bWVudHM6CisgICAgICAgIHJl
dHVybiAiRGlyZWN0QXJndW1lbnRzIjsKKyAgICBjYXNlIEFycmF5OjpTY29wZWRBcmd1bWVudHM6
CisgICAgICAgIHJldHVybiAiU2NvcGVkQXJndW1lbnRzIjsKICAgICBjYXNlIEFycmF5OjpJbnQ4
QXJyYXk6CiAgICAgICAgIHJldHVybiAiSW50OEFycmF5IjsKICAgICBjYXNlIEFycmF5OjpJbnQx
NkFycmF5OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5oCShy
ZXZpc2lvbiAxODA3MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9k
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMiwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTItMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY1LDcgKzY1LDkgQEAgZW51bSBUeXBlIHsK
ICAgICBBcnJheVN0b3JhZ2UsCiAgICAgU2xvd1B1dEFycmF5U3RvcmFnZSwKICAgICAKLSAgICBB
cmd1bWVudHMsCisgICAgRGlyZWN0QXJndW1lbnRzLAorICAgIFNjb3BlZEFyZ3VtZW50cywKKyAg
ICAKICAgICBJbnQ4QXJyYXksCiAgICAgSW50MTZBcnJheSwKICAgICBJbnQzMkFycmF5LApAQCAt
Mjk0LDcgKzI5Niw4IEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBBcnJheTo6VW5wcm9maWxlZDoK
ICAgICAgICAgY2FzZSBBcnJheTo6Rm9yY2VFeGl0OgogICAgICAgICBjYXNlIEFycmF5OjpHZW5l
cmljOgotICAgICAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6CisgICAgICAgIGNhc2UgQXJyYXk6
OkRpcmVjdEFyZ3VtZW50czoKKyAgICAgICAgY2FzZSBBcnJheTo6U2NvcGVkQXJndW1lbnRzOgog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAg
cmV0dXJuIHRydWU7CkBAIC0zMjAsMTEgKzMyMyw5IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAg
IHN3aXRjaCAodHlwZSgpKSB7CiAgICAgICAgIGNhc2UgQXJyYXk6OlN0cmluZzoKKyAgICAgICAg
Y2FzZSBBcnJheTo6RGlyZWN0QXJndW1lbnRzOgorICAgICAgICBjYXNlIEFycmF5OjpTY29wZWRB
cmd1bWVudHM6CiAgICAgICAgICAgICByZXR1cm4gQXJyYXlNb2RlKEFycmF5OjpHZW5lcmljKTsK
LSNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgICAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6Ci0g
ICAgICAgICAgICByZXR1cm4gQXJyYXlNb2RlKEFycmF5OjpHZW5lcmljKTsKLSNlbmRpZgogICAg
ICAgICBkZWZhdWx0OgogICAgICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICAgICB9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkocmV2aXNpb24gMTgw
NzIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQ2NiwxMCArNDY2LDE0IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3Jh
cGgsIE5vZGUqIG5vZGUKICAgICAgICAgICAgIGRlZihQdXJlVmFsdWUobm9kZSwgbW9kZS5hc1dv
cmQoKSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgCi0gICAgICAgIGNhc2Ug
QXJyYXk6OkFyZ3VtZW50czoKLSAgICAgICAgICAgIHJlYWQoQXJndW1lbnRzX3JlZ2lzdGVycyk7
Ci0gICAgICAgICAgICByZWFkKFZhcmlhYmxlcyk7Ci0gICAgICAgICAgICBkZWYoSGVhcExvY2F0
aW9uKEluZGV4ZWRQcm9wZXJ0eUxvYywgVmFyaWFibGVzLCBub2RlLT5jaGlsZDEoKSwgbm9kZS0+
Y2hpbGQyKCkpLCBub2RlKTsKKyAgICAgICAgY2FzZSBBcnJheTo6RGlyZWN0QXJndW1lbnRzOgor
ICAgICAgICAgICAgcmVhZChEaXJlY3RBcmd1bWVudHNQcm9wZXJ0aWVzKTsKKyAgICAgICAgICAg
IGRlZihIZWFwTG9jYXRpb24oSW5kZXhlZFByb3BlcnR5TG9jLCBEaXJlY3RBcmd1bWVudHNQcm9w
ZXJ0aWVzLCBub2RlLT5jaGlsZDEoKSwgbm9kZS0+Y2hpbGQyKCkpLCBub2RlKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEFycmF5OjpTY29wZWRBcmd1
bWVudHM6CisgICAgICAgICAgICByZWFkKFNjb3BlZEFyZ3VtZW50c1Byb3BlcnRpZXMpOworICAg
ICAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihJbmRleGVkUHJvcGVydHlMb2MsIFNjb3BlZEFyZ3Vt
ZW50c1Byb3BlcnRpZXMsIG5vZGUtPmNoaWxkMSgpLCBub2RlLT5jaGlsZDIoKSksIG5vZGUpOwog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQXJyYXk6Oklu
dDMyOgpAQCAtNTYwLDEzICs1NjQsNiBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBO
b2RlKiBub2RlCiAgICAgICAgICAgICB3cml0ZShIZWFwKTsKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgICAgIAotICAgICAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6Ci0gICAgICAgICAg
ICByZWFkKEFyZ3VtZW50c19yZWdpc3RlcnMpOwotICAgICAgICAgICAgcmVhZChNaXNjRmllbGRz
KTsKLSAgICAgICAgICAgIHdyaXRlKFZhcmlhYmxlcyk7Ci0gICAgICAgICAgICBkZWYoSGVhcExv
Y2F0aW9uKEluZGV4ZWRQcm9wZXJ0eUxvYywgVmFyaWFibGVzLCBiYXNlLCBpbmRleCksIHZhbHVl
KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFycmF5
OjpJbnQzMjoKICAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5pc091dE9mQm91bmRz
KCkpIHsKICAgICAgICAgICAgICAgICByZWFkKFdvcmxkKTsKQEAgLTc2MSw3ICs3NTgsOCBAQCB2
b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgICAgICAgICBkZWYo
UHVyZVZhbHVlKG5vZGUsIG1vZGUuYXNXb3JkKCkpKTsKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgICAgIAotICAgICAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6CisgICAgICAgIGNhc2Ug
QXJyYXk6OkRpcmVjdEFyZ3VtZW50czoKKyAgICAgICAgY2FzZSBBcnJheTo6U2NvcGVkQXJndW1l
bnRzOgogICAgICAgICAgICAgcmVhZChNaXNjRmllbGRzKTsKICAgICAgICAgICAgIGRlZihIZWFw
TG9jYXRpb24oQXJyYXlMZW5ndGhMb2MsIE1pc2NGaWVsZHMsIG5vZGUtPmNoaWxkMSgpKSwgbm9k
ZSk7CiAgICAgICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0ZpeHVwUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHRml4dXBQaGFzZS5jcHAJKHJldmlzaW9uIDE4MDcyMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY4Miw3ICs2
ODIsNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgY2FzZSBBcnJheTo6Q29udGlndW91czoKICAg
ICAgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZToKICAgICAgICAgICAgIGNhc2UgQXJy
YXk6OlNsb3dQdXRBcnJheVN0b3JhZ2U6Ci0gICAgICAgICAgICBjYXNlIEFycmF5OjpBcmd1bWVu
dHM6CiAgICAgICAgICAgICAgICAgZml4RWRnZTxLbm93bkNlbGxVc2U+KGNoaWxkMSk7CiAgICAg
ICAgICAgICAgICAgZml4RWRnZTxJbnQzMlVzZT4oY2hpbGQyKTsKICAgICAgICAgICAgICAgICBp
bnNlcnRTdG9yZUJhcnJpZXIobV9pbmRleEluQmxvY2ssIGNoaWxkMSwgY2hpbGQzKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNw
cAkocmV2aXNpb24gMTgwNzIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjU5OCw4ICsyNTk4LDExIEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgY2FzZSBBcnJh
eTo6U3RyaW5nOgogICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25TdHJpbmcobm9kZSk7CiAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6QXJndW1lbnRzOgotICAgICAg
ICAgICAgY29tcGlsZUdldEJ5VmFsT25Bcmd1bWVudHMobm9kZSk7CisgICAgICAgIGNhc2UgQXJy
YXk6OkRpcmVjdEFyZ3VtZW50czoKKyAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uRGlyZWN0
QXJndW1lbnRzKG5vZGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQXJyYXk6
OlNjb3BlZEFyZ3VtZW50czoKKyAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uU2NvcGVkQXJn
dW1lbnRzKG5vZGUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6IHsKICAg
ICAgICAgICAgIFR5cGVkQXJyYXlUeXBlIHR5cGUgPSBub2RlLT5hcnJheU1vZGUoKS50eXBlZEFy
cmF5VHlwZSgpOwpAQCAtMjgyOSw0NyArMjgzMiw2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAg
ICAgICAKLSAgICAgICAgY2FzZSBBcnJheTo6QXJndW1lbnRzOiB7Ci0gICAgICAgICAgICBKU1Zh
bHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBjaGlsZDMpOwotICAgICAgICAgICAgR1BSVGVtcG9yYXJ5
IHNjcmF0Y2godGhpcyk7Ci0gICAgICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaDIodGhpcyk7
Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIEdQUlJlZyB2YWx1ZVJlZyA9IHZhbHVlLmdwcigp
OwotICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hSZWcgPSBzY3JhdGNoLmdwcigpOwotICAgICAg
ICAgICAgR1BSUmVnIHNjcmF0Y2gyUmVnID0gc2NyYXRjaDIuZ3ByKCk7Ci0gICAgICAgICAgICAK
LSAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKLSAgICAgICAgICAgICAgICByZXR1cm47
Ci0KLSAgICAgICAgICAgIC8vIFR3byByZWFsbHkgbGFtZSBjaGVja3MuCi0gICAgICAgICAgICBz
cGVjdWxhdGlvbkNoZWNrKAotICAgICAgICAgICAgICAgIFVuY291bnRhYmxlLCBKU1ZhbHVlU291
cmNlKCksIDAsCi0gICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoMzIoCi0gICAgICAgICAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLAotICAgICAg
ICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBBcmd1bWVudHM6
Om9mZnNldE9mTnVtQXJndW1lbnRzKCkpKSk7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNr
KAotICAgICAgICAgICAgICAgIFVuY291bnRhYmxlLCBKU1ZhbHVlU291cmNlKCksIDAsCi0gICAg
ICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdFB0cigKLSAgICAgICAgICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6Ok5vblplcm8sCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKAotICAgICAgICAgICAgICAgICAgICAgICAgYmFzZVJlZywgQXJndW1lbnRzOjpv
ZmZzZXRPZlNsb3dBcmd1bWVudERhdGEoKSkpKTsKLQotICAgICAgICAgICAgbV9qaXQubW92ZShw
cm9wZXJ0eVJlZywgc2NyYXRjaDJSZWcpOwotICAgICAgICAgICAgbV9qaXQuc2lnbkV4dGVuZDMy
VG9QdHIoc2NyYXRjaDJSZWcsIHNjcmF0Y2gyUmVnKTsKLSAgICAgICAgICAgIG1faml0LmxvYWRQ
dHIoCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgQXJn
dW1lbnRzOjpvZmZzZXRPZlJlZ2lzdGVycygpKSwKLSAgICAgICAgICAgICAgICBzY3JhdGNoUmVn
KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbV9qaXQuc3RvcmU2NCgKLSAgICAgICAgICAg
ICAgICB2YWx1ZVJlZywKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4
KAotICAgICAgICAgICAgICAgICAgICBzY3JhdGNoUmVnLCBzY3JhdGNoMlJlZywgTWFjcm9Bc3Nl
bWJsZXI6OlRpbWVzRWlnaHQsCi0gICAgICAgICAgICAgICAgICAgIENhbGxGcmFtZTo6dGhpc0Fy
Z3VtZW50T2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpICsgc2l6ZW9mKFJlZ2lzdGVyKSkpOwot
ICAgICAgICAgICAgCi0gICAgICAgICAgICBub1Jlc3VsdChub2RlKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgICAgICAgICAKICAgICAgICAgZGVmYXVsdDogewogICAgICAg
ICAgICAgVHlwZWRBcnJheVR5cGUgdHlwZSA9IGFycmF5TW9kZS50eXBlZEFycmF5VHlwZSgpOwog
ICAgICAgICAgICAgaWYgKGlzSW50KHR5cGUpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDE4MDcyMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC03MjIsOSArNzIyLDEyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNoZWNrQXJyYXko
Tm9kZSogbm8KICAgICAgICAgbm9SZXN1bHQobV9jdXJyZW50Tm9kZSk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9Ci0gICAgY2FzZSBBcnJheTo6QXJndW1lbnRzOgotICAgICAgICBzcGVjdWxhdGVD
ZWxsVHlwZVdpdGhvdXRUeXBlRmlsdGVyaW5nKG5vZGUtPmNoaWxkMSgpLCBiYXNlUmVnLCBBcmd1
bWVudHNUeXBlKTsKLQorICAgIGNhc2UgQXJyYXk6OkRpcmVjdEFyZ3VtZW50czoKKyAgICAgICAg
c3BlY3VsYXRlQ2VsbFR5cGVXaXRob3V0VHlwZUZpbHRlcmluZyhub2RlLT5jaGlsZDEoKSwgYmFz
ZVJlZywgRGlyZWN0QXJndW1lbnRzVHlwZSk7CisgICAgICAgIG5vUmVzdWx0KG1fY3VycmVudE5v
ZGUpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBcnJheTo6U2NvcGVkQXJndW1lbnRzOgor
ICAgICAgICBzcGVjdWxhdGVDZWxsVHlwZVdpdGhvdXRUeXBlRmlsdGVyaW5nKG5vZGUtPmNoaWxk
MSgpLCBiYXNlUmVnLCBTY29wZWRBcmd1bWVudHNUeXBlKTsKICAgICAgICAgbm9SZXN1bHQobV9j
dXJyZW50Tm9kZSk7CiAgICAgICAgIHJldHVybjsKICAgICBkZWZhdWx0OgpAQCAtNDA4OCw3ICs0
MDkxLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldFR5cGVkQXJyYQogICAgIGlu
dDMyUmVzdWx0KHZlY3RvckdQUiwgbm9kZSk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVHZXRCeVZhbE9uQXJndW1lbnRzKE5vZGUqIG5vZGUpCit2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlR2V0QnlWYWxPbkRpcmVjdEFyZ3VtZW50cyhOb2RlKiBub2RlKQogewogICAgIFNw
ZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgIFNwZWN1
bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBub2RlLT5jaGlsZDIoKSk7CkBA
IC00MTAzLDgwICs0MTA2LDg5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZh
bE9uQXIKICAgICBHUFJSZWcgcmVzdWx0UmVnID0gcmVzdWx0LmdwcigpOwogI2lmIFVTRShKU1ZB
TFVFMzJfNjQpCiAgICAgR1BSUmVnIHJlc3VsdFRhZ1JlZyA9IHJlc3VsdFRhZy5ncHIoKTsKKyAg
ICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVzdWx0VGFnUmVnLCByZXN1
bHRSZWcpOworI2Vsc2UKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3Mo
cmVzdWx0UmVnKTsKICNlbmRpZgogICAgIEdQUlJlZyBzY3JhdGNoUmVnID0gc2NyYXRjaC5ncHIo
KTsKICAgICAKICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCiAgICAgICAgIHJldHVybjsKLSAgCi0g
ICAgQVNTRVJUKEFycmF5TW9kZShBcnJheTo6QXJndW1lbnRzKS5hbHJlYWR5Q2hlY2tlZChtX2pp
dC5ncmFwaCgpLCBub2RlLCBtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpKSk7CiAgICAg
Ci0gICAgLy8gVHdvIHJlYWxseSBsYW1lIGNoZWNrcy4KLSAgICBzcGVjdWxhdGlvbkNoZWNrKAot
ICAgICAgICBFeG90aWNPYmplY3RNb2RlLCBKU1ZhbHVlU291cmNlKCksIDAsCi0gICAgICAgIG1f
aml0LmJyYW5jaDMyKAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwg
cHJvcGVydHlSZWcsCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVn
LCBBcmd1bWVudHM6Om9mZnNldE9mTnVtQXJndW1lbnRzKCkpKSk7CisgICAgQVNTRVJUKEFycmF5
TW9kZShBcnJheTo6RGlyZWN0QXJndW1lbnRzKS5hbHJlYWR5Q2hlY2tlZChtX2ppdC5ncmFwaCgp
LCBub2RlLCBtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpKSk7CisgICAgCiAgICAgc3Bl
Y3VsYXRpb25DaGVjaygKICAgICAgICAgRXhvdGljT2JqZWN0TW9kZSwgSlNWYWx1ZVNvdXJjZSgp
LCAwLAogICAgICAgICBtX2ppdC5icmFuY2hUZXN0UHRyKAogICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6Ok5vblplcm8sCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcygKLSAg
ICAgICAgICAgICAgICBiYXNlUmVnLCBBcmd1bWVudHM6Om9mZnNldE9mU2xvd0FyZ3VtZW50RGF0
YSgpKSkpOwotICAgIAotICAgIG1faml0Lm1vdmUocHJvcGVydHlSZWcsIHJlc3VsdFJlZyk7Ci0g
ICAgbV9qaXQuc2lnbkV4dGVuZDMyVG9QdHIocmVzdWx0UmVnLCByZXN1bHRSZWcpOwotICAgIG1f
aml0LmxvYWRQdHIoCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEFy
Z3VtZW50czo6b2Zmc2V0T2ZSZWdpc3RlcnMoKSksCi0gICAgICAgIHNjcmF0Y2hSZWcpOworICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgRGlyZWN0QXJndW1lbnRz
OjpvZmZzZXRPZk92ZXJyaWRlcygpKSkpOworICAgIHNwZWN1bGF0aW9uQ2hlY2soCisgICAgICAg
IEV4b3RpY09iamVjdE1vZGUsIEpTVmFsdWVTb3VyY2UoKSwgMCwKKyAgICAgICAgbV9qaXQuYnJh
bmNoMzIoCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0
eVJlZywKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIERpcmVj
dEFyZ3VtZW50czo6b2Zmc2V0T2ZMZW5ndGgoKSkpKTsKICAgICAKLSNpZiBVU0UoSlNWQUxVRTMy
XzY0KQotICAgIG1faml0LmxvYWQzMigKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRl
eCgKLSAgICAgICAgICAgIHNjcmF0Y2hSZWcsIHJlc3VsdFJlZywgTWFjcm9Bc3NlbWJsZXI6OlRp
bWVzRWlnaHQsCi0gICAgICAgICAgICBDYWxsRnJhbWU6OnRoaXNBcmd1bWVudE9mZnNldCgpICog
c2l6ZW9mKFJlZ2lzdGVyKSArIHNpemVvZihSZWdpc3RlcikgKwotICAgICAgICAgICAgT0JKRUNU
X09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLAotICAgICAgICByZXN1bHRUYWdSZWcp
OwotICAgIG1faml0LmxvYWQzMigKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleCgK
LSAgICAgICAgICAgIHNjcmF0Y2hSZWcsIHJlc3VsdFJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVz
RWlnaHQsCi0gICAgICAgICAgICBDYWxsRnJhbWU6OnRoaXNBcmd1bWVudE9mZnNldCgpICogc2l6
ZW9mKFJlZ2lzdGVyKSArIHNpemVvZihSZWdpc3RlcikgKwotICAgICAgICAgICAgT0JKRUNUX09G
RlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwKLSAgICAgICAgcmVzdWx0UmVnKTsK
LSAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFRhZ1JlZywgcmVzdWx0UmVnLCBub2RlKTsKLSNlbHNl
Ci0gICAgbV9qaXQubG9hZDY0KAorICAgIG1faml0LmxvYWRWYWx1ZSgKICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkJhc2VJbmRleCgKLSAgICAgICAgICAgIHNjcmF0Y2hSZWcsIHJlc3VsdFJlZywg
TWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsCi0gICAgICAgICAgICBDYWxsRnJhbWU6OnRoaXNB
cmd1bWVudE9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSArIHNpemVvZihSZWdpc3RlcikpLAot
ICAgICAgICByZXN1bHRSZWcpOwotICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVnLCBub2RlKTsK
LSNlbmRpZgorICAgICAgICAgICAgYmFzZVJlZywgcHJvcGVydHlSZWcsIFRpbWVzRWlnaHQsIERp
cmVjdEFyZ3VtZW50czo6c3RvcmFnZU9mZnNldCgpKSwKKyAgICAgICAgcmVzdWx0UmVncyk7Cisg
ICAgCisgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBub2RlKTsKIH0KIAotdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZUdldEFyZ3VtZW50c0xlbmd0aChOb2RlKiBub2RlKQordm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25TY29wZWRBcmd1bWVudHMoTm9kZSogbm9k
ZSkKIHsKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgp
KTsKLSAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIFJldXNlLCBiYXNlKTsKKyAgICBTcGVj
dWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbm9kZS0+Y2hpbGQyKCkpOwor
ICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAg
ICBHUFJUZW1wb3JhcnkgcmVzdWx0VGFnKHRoaXMpOworI2VuZGlmCisgICAgR1BSVGVtcG9yYXJ5
IHNjcmF0Y2godGhpcyk7CisgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2gyKHRoaXMpOwogICAgIAog
ICAgIEdQUlJlZyBiYXNlUmVnID0gYmFzZS5ncHIoKTsKKyAgICBHUFJSZWcgcHJvcGVydHlSZWcg
PSBwcm9wZXJ0eS5ncHIoKTsKICAgICBHUFJSZWcgcmVzdWx0UmVnID0gcmVzdWx0LmdwcigpOwor
I2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgR1BSUmVnIHJlc3VsdFRhZ1JlZyA9IHJlc3VsdFRh
Zy5ncHIoKTsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVzdWx0
VGFnUmVnLCByZXN1bHRSZWcpOworI2Vsc2UKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0g
SlNWYWx1ZVJlZ3MocmVzdWx0UmVnKTsKKyNlbmRpZgorICAgIEdQUlJlZyBzY3JhdGNoUmVnID0g
c2NyYXRjaC5ncHIoKTsKKyAgICBHUFJSZWcgc2NyYXRjaDJSZWcgPSBzY3JhdGNoMi5ncHIoKTsK
ICAgICAKICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAg
ICBBU1NFUlQoQXJyYXlNb2RlKEFycmF5OjpBcmd1bWVudHMpLmFscmVhZHlDaGVja2VkKG1faml0
LmdyYXBoKCksIG5vZGUsIG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSkpKTsKKyAgICBB
U1NFUlQoQXJyYXlNb2RlKEFycmF5OjpTY29wZWRBcmd1bWVudHMpLmFscmVhZHlDaGVja2VkKG1f
aml0LmdyYXBoKCksIG5vZGUsIG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSkpKTsKKyAg
ICAKKyAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIFNj
b3BlZEFyZ3VtZW50czo6b2Zmc2V0T2ZUYWJsZSgpKSwgc2NyYXRjaFJlZyk7CisgICAgbV9qaXQu
bG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBTY29wZWRBcmd1bWVudHM6
Om9mZnNldE9mU2NvcGUoKSksIHNjcmF0Y2gyUmVnKTsKICAgICAKICAgICBzcGVjdWxhdGlvbkNo
ZWNrKAogICAgICAgICBFeG90aWNPYmplY3RNb2RlLCBKU1ZhbHVlU291cmNlKCksIDAsCi0gICAg
ICAgIG1faml0LmJyYW5jaFRlc3Q4KAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vblpl
cm8sCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBBcmd1bWVu
dHM6Om9mZnNldE9mT3ZlcnJvZGVMZW5ndGgoKSkpKTsKKyAgICAgICAgbV9qaXQuYnJhbmNoMzIo
CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywK
KyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKFNjb3BlZEFyZ3VtZW50c1RhYmxl
OjpvZmZzZXRPZkxlbmd0aCgpKSkpOworICAgIAorICAgIG1faml0LmxvYWRQdHIoCisgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hSZWcsIFNjb3BlZEFyZ3VtZW50c1RhYmxl
OjpvZmZzZXRPZkFyZ3VtZW50cygpKSwKKyAgICAgICAgc2NyYXRjaFJlZyk7CisgICAgbV9qaXQu
bG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc2NyYXRjaFJlZywgcHJvcGVydHlSZWcs
IFRpbWVzRm91ciksIHNjcmF0Y2hSZWcpOworICAgIAorICAgIHNwZWN1bGF0aW9uQ2hlY2soCisg
ICAgICAgIEV4b3RpY09iamVjdE1vZGUsIEpTVmFsdWVTb3VyY2UoKSwgMCwKKyAgICAgICAgbV9q
aXQuYnJhbmNoMzIoCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHNjcmF0Y2hS
ZWcsIFRydXN0ZWRJbW0zMihTY29wZU9mZnNldDo6aW52YWxpZE9mZnNldCkpKTsKKyAgICAKKyAg
ICBtX2ppdC5sb2FkVmFsdWUoCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoCisg
ICAgICAgICAgICBiYXNlMlJlZywgcHJvcGVydHlSZWcsIFRpbWVzRWlnaHQsIEpTRW52aXJvbm1l
bnRSZWNvcmQ6Om9mZnNldE9mVmFyaWFibGVzKCkpLAorICAgICAgICByZXN1bHRSZWdzKTsKICAg
ICAKLSAgICBtX2ppdC5sb2FkMzIoCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJh
c2VSZWcsIEFyZ3VtZW50czo6b2Zmc2V0T2ZOdW1Bcmd1bWVudHMoKSksCi0gICAgICAgIHJlc3Vs
dFJlZyk7Ci0gICAgaW50MzJSZXN1bHQocmVzdWx0UmVnLCBub2RlKTsKKyAgICBqc1ZhbHVlUmVz
dWx0KHJlc3VsdFJlZ3MsIG5vZGUpOwogfQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
R2V0U2NvcGUoTm9kZSogbm9kZSkKQEAgLTQyMzIsOCArNDI0NCw1NiBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlR2V0QXJyYXlMZW5nCiAgICAgICAgIGludDMyUmVzdWx0KHJlc3VsdEdQ
Uiwgbm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBjYXNlIEFycmF5OjpBcmd1bWVu
dHM6IHsKLSAgICAgICAgY29tcGlsZUdldEFyZ3VtZW50c0xlbmd0aChub2RlKTsKKyAgICBjYXNl
IEFycmF5OjpEaXJlY3RBcmd1bWVudHM6IHsKKyAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQg
YmFzZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQo
dGhpcywgUmV1c2UsIGJhc2UpOworICAgICAgICAKKyAgICAgICAgR1BSUmVnIGJhc2VSZWcgPSBi
YXNlLmdwcigpOworICAgICAgICBHUFJSZWcgcmVzdWx0UmVnID0gcmVzdWx0LmdwcigpOworICAg
ICAgICAKKyAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQorICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAKKyAgICAgICAgQVNTRVJUKEFycmF5TW9kZShBcnJheTo6RGlyZWN0QXJndW1lbnRz
KS5hbHJlYWR5Q2hlY2tlZChtX2ppdC5ncmFwaCgpLCBub2RlLCBtX3N0YXRlLmZvck5vZGUobm9k
ZS0+Y2hpbGQxKCkpKSk7CisgICAgICAgIAorICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAorICAg
ICAgICAgICAgRXhvdGljT2JqZWN0TW9kZSwgSlNWYWx1ZVNvdXJjZSgpLCAwLAorICAgICAgICAg
ICAgbV9qaXQuYnJhbmNoVGVzdFB0cigKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
Tm9uWmVybywKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVn
LCBEaXJlY3RBcmd1bWVudHM6Om9mZnNldE9mT3ZlcnJpZGVzKCkpKSk7CisgICAgICAgIAorICAg
ICAgICBtX2ppdC5sb2FkMzIoCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhi
YXNlUmVnLCBEaXJlY3RBcmd1bWVudHM6Om9mZnNldE9mTGVuZ3RoKCkpLCByZXN1bHRSZWcpOwor
ICAgICAgICAKKyAgICAgICAgaW50MzJSZXN1bHQocmVzdWx0UmVnLCBub2RlKTsKKyAgICAgICAg
YnJlYWs7CisgICAgfQorICAgIGNhc2UgQXJyYXk6OlNjb3BlZEFyZ3VtZW50czogeworICAgICAg
ICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAg
ICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBSZXVzZSwgYmFzZSk7CisgICAgICAgIAorICAg
ICAgICBHUFJSZWcgYmFzZVJlZyA9IGJhc2UuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRS
ZWcgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIAorICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkp
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBBU1NFUlQoQXJyYXlNb2Rl
KEFycmF5OjpTY29wZWRBcmd1bWVudHMpLmFscmVhZHlDaGVja2VkKG1faml0LmdyYXBoKCksIG5v
ZGUsIG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSkpKTsKKyAgICAgICAgCisgICAgICAg
IHNwZWN1bGF0aW9uQ2hlY2soCisgICAgICAgICAgICBFeG90aWNPYmplY3RNb2RlLCBKU1ZhbHVl
U291cmNlKCksIDAsCisgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0OCgKKyAgICAgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhiYXNlUmVnLCBTY29wZWRBcmd1bWVudHM6Om9mZnNldE9mT3ZlcnJvZGVU
aGluZ3MoKSkpKTsKKyAgICAgICAgCisgICAgICAgIG1faml0LmxvYWRQdHIoCisgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBTY29wZWRBcmd1bWVudHM6Om9mZnNl
dE9mVGFibGUoKSksIHJlc3VsdFJlZyk7CisgICAgICAgIAorICAgICAgICBtX2ppdC5sb2FkMzIo
CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRSZWcsIFNjb3BlZEFy
Z3VtZW50c1RhYmxlOjpvZmZzZXRPZkxlbmd0aCgpKSwKKyAgICAgICAgICAgIHJlc3VsdFJlZyk7
CisgICAgICAgIAorICAgICAgICBpbnQzMlJlc3VsdChyZXN1bHRSZWcsIG5vZGUpOwogICAgICAg
ICBicmVhazsKICAgICB9CiAgICAgZGVmYXVsdDogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24gMTgwNzIwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yMTUyLDggKzIxNTIsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBjb21waWxlR2V0QnlWYWxP
blN0cmluZyhOb2RlKik7CiAgICAgdm9pZCBjb21waWxlRnJvbUNoYXJDb2RlKE5vZGUqKTsgCiAK
LSAgICB2b2lkIGNvbXBpbGVHZXRCeVZhbE9uQXJndW1lbnRzKE5vZGUqKTsKLSAgICB2b2lkIGNv
bXBpbGVHZXRBcmd1bWVudHNMZW5ndGgoTm9kZSopOworICAgIHZvaWQgY29tcGlsZUdldEJ5VmFs
T25EaXJlY3RBcmd1bWVudHMoTm9kZSopOworICAgIHZvaWQgY29tcGlsZUdldEJ5VmFsT25TY29w
ZWRBcmd1bWVudHMoTm9kZSopOworICAgIAogICAgIHZvaWQgY29tcGlsZUdldFNjb3BlKE5vZGUq
KTsKICAgICB2b2lkIGNvbXBpbGVTa2lwU2NvcGUoTm9kZSopOwogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuaAko
cmV2aXNpb24gMTgwNzIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFj
dEhlYXBSZXBvc2l0b3J5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDYsNiArNDYsOCBAQCBuYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAgICAgbWFjcm8oQnV0dGVyZmx5X3B1YmxpY0xl
bmd0aCwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSBcCiAgICAgbWFjcm8oQnV0
dGVyZmx5X3ZlY3Rvckxlbmd0aCwgQnV0dGVyZmx5OjpvZmZzZXRPZlZlY3Rvckxlbmd0aCgpKSBc
CiAgICAgbWFjcm8oQ2FsbEZyYW1lX2NhbGxlckZyYW1lLCBDYWxsRnJhbWU6OmNhbGxlckZyYW1l
T2Zmc2V0KCkpIFwKKyAgICBtYWNybyhEaXJlY3RBcmd1bWVudHNfbGVuZ3RoLCBEaXJlY3RBcmd1
bWVudHM6Om9mZnNldE9mTGVuZ3RoKCkpIFwKKyAgICBtYWNybyhEaXJlY3RBcmd1bWVudHNfb3Zl
cnJpZGVzLCBEaXJlY3RBcmd1bWVudHM6Om9mZnNldE9mT3ZlcnJpZGVzKCkpIFwKICAgICBtYWNy
byhHZXR0ZXJTZXR0ZXJfZ2V0dGVyLCBHZXR0ZXJTZXR0ZXI6Om9mZnNldE9mR2V0dGVyKCkpIFwK
ICAgICBtYWNybyhHZXR0ZXJTZXR0ZXJfc2V0dGVyLCBHZXR0ZXJTZXR0ZXI6Om9mZnNldE9mU2V0
dGVyKCkpIFwKICAgICBtYWNybyhKU0FycmF5QnVmZmVyVmlld19sZW5ndGgsIEpTQXJyYXlCdWZm
ZXJWaWV3OjpvZmZzZXRPZkxlbmd0aCgpKSBcCkBAIC03Miw2ICs3NCwxMSBAQCBuYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAgICAgbWFjcm8oSlNXcmFwcGVyT2JqZWN0X2ludGVybmFs
VmFsdWUsIEpTV3JhcHBlck9iamVjdDo6aW50ZXJuYWxWYWx1ZU9mZnNldCgpKSBcCiAgICAgbWFj
cm8oTWFya2VkQWxsb2NhdG9yX2ZyZWVMaXN0SGVhZCwgTWFya2VkQWxsb2NhdG9yOjpvZmZzZXRP
ZkZyZWVMaXN0SGVhZCgpKSBcCiAgICAgbWFjcm8oTWFya2VkQmxvY2tfbWFya0JpdHMsIE1hcmtl
ZEJsb2NrOjpvZmZzZXRPZk1hcmtzKCkpIFwKKyAgICBtYWNybyhTY29wZWRBcmd1bWVudHNfb3Zl
cnJvZGVUaGluZ3MsIFNjb3BlZEFyZ3VtZW50czo6b2Zmc2V0T2ZPdmVycm9kZVRoaW5ncygpKSkg
XAorICAgIG1hY3JvKFNjb3BlZEFyZ3VtZW50c19zY29wZSwgU2NvcGVkQXJndW1lbnRzOjpvZmZl
dE9mU2NvcGUoKSkpIFwKKyAgICBtYWNybyhTY29wZWRBcmd1bWVudHNfdGFibGUsIFNjb3BlZEFy
Z3VtZW50czo6b2ZmZXRPZlRhYmxlKCkpKSBcCisgICAgbWFjcm8oU2NvcGVkQXJndW1lbnRzVGFi
bGVfYXJndW1lbnRzLCBTY29wZWRBcmd1bWVudHNUYWJsZTo6b2ZmZXRPZkFyZ3VtZW50cygpKSkg
XAorICAgIG1hY3JvKFNjb3BlZEFyZ3VtZW50c1RhYmxlX2xlbmd0aCwgU2NvcGVkQXJndW1lbnRz
VGFibGU6Om9mZmV0T2ZMZW5ndGgoKSkpIFwKICAgICBtYWNybyhTdHJpbmdJbXBsX2RhdGEsIFN0
cmluZ0ltcGw6OmRhdGFPZmZzZXQoKSkgXAogICAgIG1hY3JvKFN0cmluZ0ltcGxfaGFzaEFuZEZs
YWdzLCBTdHJpbmdJbXBsOjpmbGFnc09mZnNldCgpKSBcCiAgICAgbWFjcm8oU3RydWN0dXJlX2Ns
YXNzSW5mbywgU3RydWN0dXJlOjpjbGFzc0luZm9PZmZzZXQoKSkgXApAQCAtODAsNiArODcsOCBA
QCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAgICAgbWFjcm8oU3RydWN0dXJlX3N0
cnVjdHVyZUlELCBTdHJ1Y3R1cmU6OnN0cnVjdHVyZUlET2Zmc2V0KCkpCiAKICNkZWZpbmUgRk9S
X0VBQ0hfSU5ERVhFRF9BQlNUUkFDVF9IRUFQKG1hY3JvKSBcCisgICAgbWFjcm8oRGlyZWN0QXJn
dW1lbnRzX3N0b3JhZ2UsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZU9mZnNldCgpLCBzaXplb2Yo
RW5jb2RlZEpTVmFsdWUpKSBcCisgICAgbWFjcm8oSlNFbnZpcm9ubWVudFJlY29yZF92YXJpYWJs
ZSwgSlNFbnZpcm9ubWVudFJlY29yZDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSwgc2l6ZW9mKEVuY29k
ZWRKU1ZhbHVlKSkgXAogICAgIG1hY3JvKEpTUm9wZVN0cmluZ19maWJlcnMsIEpTUm9wZVN0cmlu
Zzo6b2Zmc2V0T2ZGaWJlcnMoKSwgc2l6ZW9mKFdyaXRlQmFycmllcjxKU1N0cmluZz4pKSBcCiAg
ICAgbWFjcm8oY2hhcmFjdGVyczgsIDAsIHNpemVvZihMQ2hhcikpIFwKICAgICBtYWNybyhjaGFy
YWN0ZXJzMTYsIDAsIHNpemVvZihVQ2hhcikpIFwKQEAgLTg3LDYgKzk2LDcgQEAgbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBGVEwgewogICAgIG1hY3JvKGluZGV4ZWREb3VibGVQcm9wZXJ0aWVz
LCAwLCBzaXplb2YoZG91YmxlKSkgXAogICAgIG1hY3JvKGluZGV4ZWRDb250aWd1b3VzUHJvcGVy
dGllcywgMCwgc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkgXAogICAgIG1hY3JvKGluZGV4ZWRBcnJh
eVN0b3JhZ2VQcm9wZXJ0aWVzLCAwLCBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSBcCisgICAgbWFj
cm8oc2NvcGVkQXJndWVtbnRzVGFibGVBcmd1bWVudHMsIDAsIHNpemVvZihpbnQzMl90KSkgXAog
ICAgIG1hY3JvKHNpbmdsZUNoYXJhY3RlclN0cmluZ3MsIDAsIHNpemVvZihKU1N0cmluZyopKSBc
CiAgICAgbWFjcm8odmFyaWFibGVzLCAwLCBzaXplb2YoUmVnaXN0ZXIpKQogICAgIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAkocmV2aXNp
b24gMTgwNzIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDksNiArMjA5LDggQEAgaW5saW5lIENhcGFiaWxpdHlM
ZXZlbCBjYW5Db21waWxlKE5vZGUqIAogICAgICAgICBjYXNlIEFycmF5OjpJbnQzMjoKICAgICAg
ICAgY2FzZSBBcnJheTo6RG91YmxlOgogICAgICAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOgor
ICAgICAgICBjYXNlIEFycmF5OjpEaXJlY3RBcmd1bWVudHM6CisgICAgICAgIGNhc2UgQXJyYXk6
OlNjb3BlZEFyZ3VtZW50czoKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0Ogog
ICAgICAgICAgICAgaWYgKGlzVHlwZWRWaWV3KG5vZGUtPmFycmF5TW9kZSgpLnR5cGVkQXJyYXlU
eXBlKCkpKQpAQCAtMjIyLDYgKzIyNCw4IEBAIGlubGluZSBDYXBhYmlsaXR5TGV2ZWwgY2FuQ29t
cGlsZShOb2RlKiAKICAgICAgICAgY2FzZSBBcnJheTo6RG91YmxlOgogICAgICAgICBjYXNlIEFy
cmF5OjpDb250aWd1b3VzOgogICAgICAgICBjYXNlIEFycmF5OjpTdHJpbmc6CisgICAgICAgIGNh
c2UgQXJyYXk6OkRpcmVjdEFyZ3VtZW50czoKKyAgICAgICAgY2FzZSBBcnJheTo6U2NvcGVkQXJn
dW1lbnRzOgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAg
ICBpZiAoaXNUeXBlZFZpZXcobm9kZS0+YXJyYXlNb2RlKCkudHlwZWRBcnJheVR5cGUoKSkpCkBA
IC0yNDgsNiArMjUyLDggQEAgaW5saW5lIENhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxlKE5vZGUq
IAogICAgICAgICBjYXNlIEFycmF5OjpJbnQzMjoKICAgICAgICAgY2FzZSBBcnJheTo6RG91Ymxl
OgogICAgICAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOgorICAgICAgICBjYXNlIEFycmF5OjpE
aXJlY3RBcmd1bWVudHM6CisgICAgICAgIGNhc2UgQXJyYXk6OlNjb3BlZEFyZ3VtZW50czoKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgaWYgKGlzVHlw
ZWRWaWV3KG5vZGUtPmFycmF5TW9kZSgpLnR5cGVkQXJyYXlUeXBlKCkpKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHJldmlzaW9u
IDE4MDcyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTk1LDYgKzIxOTUsMjUgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXJy
YXk6OkRpcmVjdEFyZ3VtZW50czogeworICAgICAgICAgICAgTFZhbHVlIGFyZ3VtZW50cyA9IGxv
d0NlbGwobV9vdXQtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZSgKKyAgICAgICAg
ICAgICAgICBFeG90aWNPYmplY3RNb2RlLCBub1ZhbHVlKCksIG51bGxwdHIsCisgICAgICAgICAg
ICAgICAgbV9vdXQubm90TnVsbChtX291dC5sb2FkUHRyKGFyZ3VtZW50cywgbV9oZWFwcy5EaXJl
Y3RBcmd1bWVudHNfb3ZlcnJpZGVzKSkpOworICAgICAgICAgICAgc2V0SW50MzIobV9vdXQubG9h
ZDMyTm9uTmVnYXRpdmUoYXJndW1lbnRzLCBtX2hlYXBzLkRpcmVjdEFyZ3VtZW50c19sZW5ndGgp
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAg
IGNhc2UgQXJyYXk6OlNjb3BlZEFyZ3VtZW50czogeworICAgICAgICAgICAgTFZhbHVlIGFyZ3Vt
ZW50cyA9IGxvd0NlbGwobV9vdXQtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZSgK
KyAgICAgICAgICAgICAgICBFeG90aWNPYmplY3RNb2RlLCBub1ZhbHVlKCksIG51bGxwdHIsCisg
ICAgICAgICAgICAgICAgbV9vdXQubm90WmVybzgobV9vdXQubG9hZFB0cihhcmd1bWVudHMsIG1f
aGVhcHMuU2NvcGVkQXJndW1lbnRzX292ZXJyb2RlVGhpbmdzKSkpOworICAgICAgICAgICAgTFZh
bHVlIHRhYmxlID0gbV9vdXQubG9hZFB0cihhcmd1bWVudHMsIG1faGVhcHMuU2NvcGVkQXJndW1l
bnRzX3RhYmxlKTsKKyAgICAgICAgICAgIHNldEludDMyKG1fb3V0LmxvYWQzMk5vbk5lZ2F0aXZl
KHRhYmxlLCBtX2hlYXBzLlNjb3BlZEFyZ3VtZW50c1RhYmxlX2xlbmd0aCkpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgICAgICAKICAgICAgICAgZGVmYXVsdDoKICAg
ICAgICAgICAgIGlmIChpc1R5cGVkVmlldyhtX25vZGUtPmFycmF5TW9kZSgpLnR5cGVkQXJyYXlU
eXBlKCkpKSB7CiAgICAgICAgICAgICAgICAgc2V0SW50MzIoCkBAIC0yMzEyLDYgKzIzMzEsNDkg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAgICAg
CisgICAgICAgIGNhc2UgQXJyYXk6OkRpcmVjdEFyZ3VtZW50czogeworICAgICAgICAgICAgTFZh
bHVlIGJhc2UgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgTFZhbHVl
IGluZGV4ID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDIoKSk7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIHNwZWN1bGF0ZSgKKyAgICAgICAgICAgICAgICBFeG90aWNPYmplY3RNb2RlLCBub1Zh
bHVlKCksIG51bGxwdHIsCisgICAgICAgICAgICAgICAgbV9vdXQubm9uTnVsbChtX291dC5sb2Fk
UHRyKGJhc2UsIG1faGVhcHMuRGlyZWN0QXJndW1lbnRzX292ZXJyaWRlcykpKTsKKyAgICAgICAg
ICAgIHNwZWN1bGF0ZSgKKyAgICAgICAgICAgICAgICBFeG90aWNPYmplY3RNb2RlLCBub1ZhbHVl
KCksIG51bGxwdHIsCisgICAgICAgICAgICAgICAgbV9vdXQuYWJvdmVPckVxdWFsKAorICAgICAg
ICAgICAgICAgICAgICBpbmRleCwKKyAgICAgICAgICAgICAgICAgICAgbV9vdXQubG9hZDMyTm9u
TmVnYXRpdmUoYmFzZSwgbV9oZWFwcy5EaXJlY3RBcmd1bWVudHNfbGVuZ3RoKSkpOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LmxvYWQ2NChiYXNlSW5kZXgobV9o
ZWFwcy5EaXJlY3RBcmd1bWVudHNfc3RvcmFnZSwgYmFzZSwgaW5kZXgpKSk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEFycmF5OjpT
Y29wZWRBcmd1bWVudHM6IHsKKyAgICAgICAgICAgIExWYWx1ZSBiYXNlID0gbG93Q2VsbChtX25v
ZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIExWYWx1ZSBpbmRleCA9IGxvd0ludDMyKG1fbm9k
ZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBMVmFsdWUgdGFibGUgPSBt
X291dC5sb2FkUHRyKGJhc2UsIG1faGVhcHMuU2NvcGVkQXJndW1lbnRzX3RhYmxlKTsKKyAgICAg
ICAgICAgIExWYWx1ZSBzY29wZSA9IG1fb3V0LmxvYWRQdHIoYmFzZSwgbV9oZWFwcy5TY29wZWRB
cmd1bWVudHNfc2NvcGUpOworICAgICAgICAgICAgCisgICAgICAgICAgICBzcGVjdWxhdGUoCisg
ICAgICAgICAgICAgICAgRXhvdGljT2JqZWN0TW9kZSwgbm9WYWx1ZSgpLCBudWxscHRyLAorICAg
ICAgICAgICAgICAgIG1fb3V0LmFib3ZlT3JFcXVhbCgKKyAgICAgICAgICAgICAgICAgICAgaW5k
ZXgsCisgICAgICAgICAgICAgICAgICAgIG1fb3V0LmxvYWQzMk5vbk5lZ2F0aXZlKGJhc2UsIG1f
aGVhcHMuU2NvcGVkQXJndW1lbnRzVGFibGVfbGVuZ3RoKSkpOworICAgICAgICAgICAgCisgICAg
ICAgICAgICBMVmFsdWUgYXJndW1lbnRzID0gbV9vdXQubG9hZFB0cihiYXNlLCBtX2hlYXBzLlNj
b3BlZEFyZ3VtZW50c1RhYmxlX2FyZ3VtZW50cyk7CisgICAgICAgICAgICBMVmFsdWUgc2NvcGVP
ZmZzZXQgPSBtX291dC5sb2FkMzIoCisgICAgICAgICAgICAgICAgYmFzZUluZGV4KG1faGVhcHMu
c2NvcGVkQXJndW1lbnRzVGFibGVBcmd1bWVudHMsIGFyZ3VtZW50cywgaW5kZXgpKTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgc3BlY3VsYXRlKAorICAgICAgICAgICAgICAgIEV4b3RpY09i
amVjdE1vZGUsIG5vVmFsdWUoKSwgbnVsbHB0ciwKKyAgICAgICAgICAgICAgICBtX291dC5lcXVh
bChzY29wZU9mZnNldCwgbV9vdXQuY29uc3RJbnQzMihTY29wZU9mZnNldDo6aW52YWxpZE9mZnNl
dCkpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgc2V0SlNWYWx1ZShtX291dC5sb2FkNjQo
YmFzZUluZGV4KAorICAgICAgICAgICAgICAgIG1faGVhcHMuSlNFbnZpcm9ubWVudFJlY29yZF92
YXJpYWJsZXMsIGJhc2UsIHNjb3BlT2Zmc2V0KSkpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcnJheTo6R2VuZXJpYzogewogICAg
ICAgICAgICAgc2V0SlNWYWx1ZSh2bUNhbGwoCiAgICAgICAgICAgICAgICAgbV9vdXQub3BlcmF0
aW9uKG9wZXJhdGlvbkdldEJ5VmFsKSwgbV9jYWxsRnJhbWUsCkBAIC01MDcwLDExICs1MTMyLDEx
IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBjYWxsOwogICAgIH0KICAgICAKLSAgICBUeXBl
ZFBvaW50ZXIgYmFzZUluZGV4KEluZGV4ZWRBYnN0cmFjdEhlYXAmIGhlYXAsIExWYWx1ZSBzdG9y
YWdlLCBMVmFsdWUgaW5kZXgsIEVkZ2UgZWRnZSkKKyAgICBUeXBlZFBvaW50ZXIgYmFzZUluZGV4
KEluZGV4ZWRBYnN0cmFjdEhlYXAmIGhlYXAsIExWYWx1ZSBzdG9yYWdlLCBMVmFsdWUgaW5kZXgs
IEVkZ2UgZWRnZSwgcHRyZGlmZl90IG9mZnNldCA9IDApCiAgICAgewogICAgICAgICByZXR1cm4g
bV9vdXQuYmFzZUluZGV4KAogICAgICAgICAgICAgaGVhcCwgc3RvcmFnZSwgbV9vdXQuemVyb0V4
dChpbmRleCwgbV9vdXQuaW50UHRyKSwKLSAgICAgICAgICAgIG1fc3RhdGUuZm9yTm9kZShlZGdl
KS5tX3ZhbHVlKTsKKyAgICAgICAgICAgIG1fc3RhdGUuZm9yTm9kZShlZGdlKS5tX3ZhbHVlLCBv
ZmZzZXQpOwogICAgIH0KICAgICAKICAgICB2b2lkIGNvbXBhcmUoCkBAIC02MzQxLDYgKzY0MDMs
MTYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJD
b3JydXB0IGFycmF5IGNsYXNzIik7CiAgICAgICAgIH0KICAgICAgICAgICAgIAorICAgICAgICBj
YXNlIEFycmF5OjpEaXJlY3RBcmd1bWVudHM6CisgICAgICAgICAgICByZXR1cm4gbV9vdXQuZXF1
YWwoCisgICAgICAgICAgICAgICAgbV9vdXQubG9hZDgoY2VsbCwgbV9oZWFwcy5KU0NlbGxfdHlw
ZUluZm9UeXBlKSwKKyAgICAgICAgICAgICAgICBtX291dC5jb25zdEludDgoRGlyZWN0QXJndW1l
bnRzVHlwZSkpOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXJyYXk6OlNjb3BlZEFyZ3Vt
ZW50czoKKyAgICAgICAgICAgIHJldHVybiBtX291dC5lcXVhbCgKKyAgICAgICAgICAgICAgICBt
X291dC5sb2FkOChjZWxsLCBtX2hlYXBzLkpTQ2VsbF90eXBlSW5mb1R5cGUpLAorICAgICAgICAg
ICAgICAgIG1fb3V0LmNvbnN0SW50OChTY29wZWRBcmd1bWVudHNUeXBlKSk7CisgICAgICAgICAg
ICAKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIHJldHVybiBtX291dC5lcXVhbCgKICAg
ICAgICAgICAgICAgICBtX291dC5sb2FkOChjZWxsLCBtX2hlYXBzLkpTQ2VsbF90eXBlSW5mb1R5
cGUpLCAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcHlUb2tlbi5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcHlUb2tlbi5oCShyZXZpc2lv
biAxODA3MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3B5VG9rZW4uaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMzIsNyArMzIsNyBAQCBlbnVtIENvcHlUb2tlbiB7CiAgICAgQnV0dGVyZmx5
Q29weVRva2VuLAogICAgIFR5cGVkQXJyYXlWZWN0b3JDb3B5VG9rZW4sCiAgICAgTWFwQmFja2lu
Z1N0b3JlQ29weVRva2VuLAotICAgIEFyZ3VtZW50c1Nsb3dBcmd1bWVudERhdGFDb3B5VG9rZW4K
KyAgICBEaXJlY3RBcmd1bWVudHNPdmVycmlkZXNDb3B5VG9rZW4KIH07CiAKIH0gLy8gbmFtZXNw
YWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVy
cy5oCShyZXZpc2lvbiAxODA3MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2Vt
Ymx5SGVscGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTMsNiArMTEzLDI2IEBAIHB1YmxpYzoK
ICNlbmRpZgogICAgIH0KICAgICAKKyAgICB2b2lkIGxvYWRWYWx1ZShCYXNlSW5kZXggYWRkcmVz
cywgSlNWYWx1ZVJlZ3MgcmVncykKKyAgICB7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAg
bG9hZDY0KGFkZHJlc3MsIHJlZ3MuZ3ByKCkpOworI2Vsc2UKKyAgICAgICAgaWYgKGFkZHJlc3Mu
YmFzZSA9PSByZWdzLnBheWxvYWRHUFIoKSB8fCBhZGRyZXNzLmluZGV4ID09IHJlZ3MucGF5bG9h
ZEdQUigpKSB7CisgICAgICAgICAgICAvLyBXZSBhY3R1YWxseSBjb3VsZCBoYW5kbGUgdGhlIGNh
c2Ugd2hlcmUgdGhlIHJlZ2lzdGVycyBhcmUgYWxpYXNlZCB0byBib3RoCisgICAgICAgICAgICAv
LyB0YWcgYW5kIHBheWxvYWQsIGJ1dCB3ZSBkb24ndCBmb3Igbm93LgorICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQoYWRkcmVzcy5iYXNlICE9IHJlZ3MudGFnR1BSKCkpOworICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlQoYWRkcmVzcy5pbmRleCAhPSByZWdzLnRhZ0dQUigpKTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgbG9hZDMyKGFkZHJlc3Mud2l0aE9mZnNldChUYWdPZmZzZXQpLCBy
ZWdzLnRhZ0dQUigpKTsKKyAgICAgICAgICAgIGxvYWQzMihhZGRyZXNzLndpdGhPZmZzZXQoUGF5
bG9hZE9mZnNldCksIHJlZ3MucGF5bG9hZEdQUigpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIGxvYWQzMihhZGRyZXNzLndpdGhPZmZzZXQoUGF5bG9hZE9mZnNldCksIHJlZ3MucGF5
bG9hZEdQUigpKTsKKyAgICAgICAgICAgIGxvYWQzMihhZGRyZXNzLndpdGhPZmZzZXQoVGFnT2Zm
c2V0KSwgcmVnLnRhZ0dQUigpKTsKKyAgICAgICAgfQorI2VuZGlmCisgICAgfQorICAgIAogICAg
IHZvaWQgbW92ZVRydXN0ZWRWYWx1ZShKU1ZhbHVlIHZhbHVlLCBKU1ZhbHVlUmVncyByZWdzKQog
ICAgIHsKICNpZiBVU0UoSlNWQUxVRTY0KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCShy
ZXZpc2lvbiAxODA3MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNDYsNiArMzQ2LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEp1
bXBMaXN0IGVtaXREb3VibGVHZXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJh
ZFR5cGUpOwogICAgICAgICBKdW1wTGlzdCBlbWl0Q29udGlndW91c0dldEJ5VmFsKEluc3RydWN0
aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgSW5kZXhpbmdUeXBlIGV4cGVjdGVkU2hhcGUg
PSBDb250aWd1b3VzU2hhcGUpOwogICAgICAgICBKdW1wTGlzdCBlbWl0QXJyYXlTdG9yYWdlR2V0
QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlKTsKKyAgICAgICAgSnVt
cExpc3QgZW1pdERpcmVjdEFyZ3VtZW50c0dldEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxl
SnVtcCYgYmFkVHlwZSk7CisgICAgICAgIEp1bXBMaXN0IGVtaXRTY29wZWRBcmd1bWVudHNHZXRC
eVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUpOwogICAgICAgICBKdW1w
TGlzdCBlbWl0SW50VHlwZWRBcnJheUdldEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVt
cCYgYmFkVHlwZSwgVHlwZWRBcnJheVR5cGUpOwogICAgICAgICBKdW1wTGlzdCBlbWl0RmxvYXRU
eXBlZEFycmF5R2V0QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBU
eXBlZEFycmF5VHlwZSk7CiAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVE9wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAxODA3MjApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MzAsNyAr
NTMwLDcgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsKEV4ZQogICAgICAg
ICBpZiAoaGFzT3B0aW1pemFibGVJbmRleGluZyhvYmplY3QtPnN0cnVjdHVyZSh2bSkpKSB7CiAg
ICAgICAgICAgICAvLyBBdHRlbXB0IHRvIG9wdGltaXplLgogICAgICAgICAgICAgSklUQXJyYXlN
b2RlIGFycmF5TW9kZSA9IGppdEFycmF5TW9kZUZvclN0cnVjdHVyZShvYmplY3QtPnN0cnVjdHVy
ZSh2bSkpOwotICAgICAgICAgICAgaWYgKGFycmF5TW9kZSAhPSBieVZhbEluZm8uYXJyYXlNb2Rl
KSB7CisgICAgICAgICAgICBpZiAoaml0QXJyYXlNb2RlUGVybWl0c1B1dChhcnJheU1vZGUpICYm
IGFycmF5TW9kZSAhPSBieVZhbEluZm8uYXJyYXlNb2RlKSB7CiAgICAgICAgICAgICAgICAgSklU
Ojpjb21waWxlUHV0QnlWYWwoJnZtLCBleGVjLT5jb2RlQmxvY2soKSwgJmJ5VmFsSW5mbywgUmV0
dXJuQWRkcmVzc1B0cihPVVJfUkVUVVJOX0FERFJFU1MpLCBhcnJheU1vZGUpOwogICAgICAgICAg
ICAgICAgIGRpZE9wdGltaXplID0gdHJ1ZTsKICAgICAgICAgICAgIH0KQEAgLTU3NSw3ICs1NzUs
NyBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRGlyZWN0UHV0QnlWCiAgICAgICAgIGlm
IChoYXNPcHRpbWl6YWJsZUluZGV4aW5nKG9iamVjdC0+c3RydWN0dXJlKHZtKSkpIHsKICAgICAg
ICAgICAgIC8vIEF0dGVtcHQgdG8gb3B0aW1pemUuCiAgICAgICAgICAgICBKSVRBcnJheU1vZGUg
YXJyYXlNb2RlID0gaml0QXJyYXlNb2RlRm9yU3RydWN0dXJlKG9iamVjdC0+c3RydWN0dXJlKHZt
KSk7Ci0gICAgICAgICAgICBpZiAoYXJyYXlNb2RlICE9IGJ5VmFsSW5mby5hcnJheU1vZGUpIHsK
KyAgICAgICAgICAgIGlmIChqaXRBcnJheU1vZGVQZXJtaXRzUHV0KGFycmF5TW9kZSkgJiYgYXJy
YXlNb2RlICE9IGJ5VmFsSW5mby5hcnJheU1vZGUpIHsKICAgICAgICAgICAgICAgICBKSVQ6OmNv
bXBpbGVEaXJlY3RQdXRCeVZhbCgmdm0sIGNhbGxGcmFtZS0+Y29kZUJsb2NrKCksICZieVZhbElu
Zm8sIFJldHVybkFkZHJlc3NQdHIoT1VSX1JFVFVSTl9BRERSRVNTKSwgYXJyYXlNb2RlKTsKICAg
ICAgICAgICAgICAgICBkaWRPcHRpbWl6ZSA9IHRydWU7CiAgICAgICAgICAgICB9CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkocmV2
aXNpb24gMTgwNzIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFj
Y2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk1MSw2ICs5NTEsMTIgQEAgdm9pZCBKSVQ6OnBy
aXZhdGVDb21waWxlR2V0QnlWYWwoQnlWYWxJbgogICAgIGNhc2UgSklUQXJyYXlTdG9yYWdlOgog
ICAgICAgICBzbG93Q2FzZXMgPSBlbWl0QXJyYXlTdG9yYWdlR2V0QnlWYWwoY3VycmVudEluc3Ry
dWN0aW9uLCBiYWRUeXBlKTsKICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBKSVREaXJlY3RBcmd1
bWVudHM6CisgICAgICAgIHNsb3dDYXNlcyA9IGVtaXREaXJlY3RBcmd1bWVudHNHZXRCeVZhbChj
dXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEpJ
VFNjb3BlZEFyZ3VtZW50czoKKyAgICAgICAgc2xvd0Nhc2VzID0gZW1pdERpcmVjdEFyZ3VtZW50
c0dldEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSk7CisgICAgICAgIGJyZWFrOwog
ICAgIGRlZmF1bHQ6CiAgICAgICAgIFR5cGVkQXJyYXlUeXBlIHR5cGUgPSB0eXBlZEFycmF5VHlw
ZUZvckpJVEFycmF5TW9kZShhcnJheU1vZGUpOwogICAgICAgICBpZiAoaXNJbnQodHlwZSkpCkBA
IC0xMDQ2LDYgKzEwNTIsNjMgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlWYWwoQnlW
YWxJbgogICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rQ2FsbGVyVG9GdW5jdGlvbihyZXR1cm5BZGRy
ZXNzLCBGdW5jdGlvblB0cihpc0RpcmVjdCA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsR2VuZXJp
YyA6IG9wZXJhdGlvblB1dEJ5VmFsR2VuZXJpYykpOwogfQogCitKSVQ6Okp1bXBMaXN0IEpJVDo6
ZW1pdERpcmVjdEFyZ3VtZW50c0dldEJ5VmFsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUpCit7CisgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwor
ICAgIAorI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgUmVnaXN0ZXJJRCBiYXNlID0gcmVnVDA7Cisg
ICAgUmVnaXN0ZXJJRCBwcm9wZXJ0eSA9IHJlZ1QxOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdCA9
IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICBSZWdpc3RlcklEIHNjcmF0Y2ggPSByZWdUMzsKKyNl
bHNlCisgICAgUmVnaXN0ZXJJRCBiYXNlID0gcmVnVDA7CisgICAgUmVnaXN0ZXJJRCBwcm9wZXJ0
eSA9IHJlZ1QyOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdCA9IEpTVmFsdWVSZWdzKHJlZ1QxLCBy
ZWdUMCk7CisgICAgUmVnaXN0ZXJJRCBzY3JhdGNoID0gcmVnVDM7CisjZW5kaWYKKworICAgIGxv
YWQ4KEFkZHJlc3MoYmFzZSwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIHNjcmF0Y2gp
OworICAgIGJhZFR5cGUgPSBwYXRjaGFibGVCcmFuY2gzMihOb3RFcXVhbCwgc2NyYXRjaCwgVHJ1
c3RlZEltbTMyKERpcmVjdEFyZ3VtZW50c1R5cGUpKTsKKyAgICAKKyAgICBzbG93Q2FzZXMuYXBw
ZW5kKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcHJvcGVydHksIEFkZHJlc3MoYmFzZSwgRGlyZWN0
QXJndW1lbnRzOjpvZmZzZXRPZkxlbmd0aCgpKSkpOworICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJh
bmNoVGVzdFB0cihOb25aZXJvLCBBZGRyZXNzKGJhc2UsIERpcmVjdEFyZ3VtZW50czo6b2Zmc2V0
T2ZPdmVycmlkZXMoKSkpKTsKKyAgICAKKyAgICB6ZXJvRXh0ZW5kMzJUb1B0cihwcm9wZXJ0eSwg
c2NyYXRjaCk7CisgICAgbG9hZFZhbHVlKEJhc2VJbmRleChiYXNlLCBzY3JhdGNoLCBUaW1lc0Vp
Z2h0LCBEaXJlY3RBcmd1bWVudHM6OnN0b3JhZ2VPZmZzZXQoKSksIHJlc3VsdCk7Cit9CisKK0pJ
VDo6SnVtcExpc3QgSklUOjplbWl0U2NvcGVkQXJndW1lbnRzR2V0QnlWYWwoSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSkKK3sKKyAgICBKdW1w
TGlzdCBzbG93Q2FzZXM7CisgICAgCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBSZWdpc3RlcklE
IGJhc2UgPSByZWdUMDsKKyAgICBSZWdpc3RlcklEIHByb3BlcnR5ID0gcmVnVDE7CisgICAgSlNW
YWx1ZVJlZ3MgcmVzdWx0ID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgIFJlZ2lzdGVySUQgc2Ny
YXRjaCA9IHJlZ1QzOworICAgIFJlZ2lzdGVySUQgc2NyYXRjaDIgPSByZWdUNDsKKyNlbHNlCisg
ICAgUmVnaXN0ZXJJRCBiYXNlID0gcmVnVDA7CisgICAgUmVnaXN0ZXJJRCBwcm9wZXJ0eSA9IHJl
Z1QyOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdCA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7
CisgICAgUmVnaXN0ZXJJRCBzY3JhdGNoID0gcmVnVDM7CisgICAgUmVnaXN0ZXJJRCBzY2FydGNo
MiA9IHJlZ1Q0OworI2VuZGlmCisKKyAgICBsb2FkOChBZGRyZXNzKGJhc2UsIEpTQ2VsbDo6dHlw
ZUluZm9UeXBlT2Zmc2V0KCkpLCBzY3JhdGNoKTsKKyAgICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJh
bmNoMzIoTm90RXF1YWwsIHNjcmF0Y2gsIFRydXN0ZWRJbW0zMihEaXJlY3RBcmd1bWVudHNUeXBl
KSk7CisgICAgCisgICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIFNjb3BlZEFyZ3VtZW50czo6b2Zm
c2V0T2ZUYWJsZSgpKSwgc2NyYXRjaCk7CisgICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIFNjb3Bl
ZEFyZ3VtZW50czo6b2Zmc2V0T2ZTY29wZSgpKSwgc2NyYXRjaDIpOworICAgIHNsb3dDYXNlcy5h
cHBlbmQoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCBwcm9wZXJ0eSwgQWRkcmVzcyhzY3JhdGNoLCBT
Y29wZWRBcmd1bWVudHNUYWJsZTo6b2Zmc2V0T2ZMZW5ndGgoKSkpKTsKKyAgICBsb2FkUHRyKEFk
ZHJlc3Moc2NyYXRjaCwgU2NvcGVkQXJndW1lbnRzVGFibGU6Om9mZnNldE9mQXJndW1lbnRzKCkp
LCBzY3JhdGNoKTsKKyAgICBsb2FkMzIoQmFzZUluZGV4KHNjcmF0Y2gsIHByb3BlcnR5LCBUaW1l
c0ZvdXIpLCBzY3JhdGNoKTsKKyAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMyKEVxdWFsLCBz
Y3JhdGNoLCBUcnVzdGVkSW1tMzIoU2NvcGVPZmZzZXQ6OmludmFsaWRPZmZzZXQpKSk7CisgICAg
CisgICAgbG9hZFZhbHVlKEJhc2VJbmRleChzY3JhdGNoMiwgc2NyYXRjaCwgVGltZXNFaWdodCwg
SlNFbnZpcm9ubWVudFJlY29yZDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSksIHJlc3VsdCk7Cit9CisK
IEpJVDo6SnVtcExpc3QgSklUOjplbWl0SW50VHlwZWRBcnJheUdldEJ5VmFsKEluc3RydWN0aW9u
KiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgVHlwZWRBcnJheVR5cGUgdHlwZSkKIHsKICAgICBB
U1NFUlQoaXNJbnQodHlwZSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
QXJndW1lbnRzTW9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0FyZ3VtZW50c01vZGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0FyZ3VtZW50c01vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM5IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
QXJndW1lbnRzTW9kZV9oCisjZGVmaW5lIEFyZ3VtZW50c01vZGVfaAorCituYW1lc3BhY2UgSlND
IHsKKworZW51bSBBcmd1bWVudHNNb2RlIHsKKyAgICBDbG9uZWRBcmd1bWVudHNDcmVhdGlvbk1v
ZGUsCisgICAgRmFrZUFyZ3VtZW50VmFsdWVzQ3JlYXRpb25Nb2RlCit9OworCit9IC8vIG5hbWVz
cGFjZSBKU0MKKworI2VuZGlmIC8vIEFyZ3VtZW50c01vZGVfaAorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9DYXB0dXJlZEFyZ3VtZW50c09mZnNldC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FwdHVyZWRBcmd1bWVudHNPZmZz
ZXQuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2Fw
dHVyZWRBcmd1bWVudHNPZmZzZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDIgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkNhcHR1cmVkQXJndW1lbnRzT2Zmc2V0LmgiCisKK25hbWVz
cGFjZSBKU0MgeworCit2b2lkIENhcHR1cmVkQXJndW1lbnRzT2Zmc2V0OjpkdW1wKFByaW50U3Ry
ZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgaWYgKCEqdGhpcykgeworICAgICAgICBvdXQucHJpbnQo
ImNhcHR1cmVkQXJndW1lbnRJbnZhbGlkIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBvdXQucHJpbnQoImNhcHR1cmVkQXJndW1lbnQiLCBvZmZzZXQoKSk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYXB0dXJl
ZEFyZ3VtZW50c09mZnNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0NhcHR1cmVkQXJndW1lbnRzT2Zmc2V0LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9DYXB0dXJlZEFyZ3VtZW50c09mZnNldC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBDYXB0dXJlZEFyZ3VtZW50c09mZnNldF9oCisjZGVmaW5l
IENhcHR1cmVkQXJndW1lbnRzT2Zmc2V0X2gKKworI2luY2x1ZGUgIkdlbmVyaWNPZmZzZXQuaCIK
KyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIEpTQyB7CisKKy8vIFRo
aXMgaXMgYW4gb2Zmc2V0IGludG8gdGhlIHNwZWNpYWwgYXJndW1lbnRzIG9iamVjdCwgd2hpY2gg
Y2FwdHVyZXMgdGhlIGFyZ3VtZW50cyB0byBhCisvLyBmdW5jdGlvbi4gSXQgb25seSBjb21lcyBp
bnRvIHBsYXkgaXQgdGhlIGFyZ3VtZW50cyBhcmVuJ3QgYWxzbyBsaWZ0ZWQgaW50byB0aGUgYWN0
aXZhdGlvbi4KKy8vIElmIHRoZXkgd2VyZSB0aGVuIGFjY2Vzc2VzIHRvIHRoZSBhcmd1bWVudHMg
d291bGQgcmVzb2x2ZSB0byBhIFNjb3BlT2Zmc2V0IGFuZCBub3QgYQorLy8gQ2FwdHVyZWRBcmd1
bWVudHNPZmZzZXQuCitjbGFzcyBDYXB0dXJlZEFyZ3VtZW50c09mZnNldCA6IHB1YmxpYyBHZW5l
cmljT2Zmc2V0PENhcHR1cmVkQXJndW1lbnRzT2Zmc2V0PiB7CitwdWJsaWM6CisgICAgQ2FwdHVy
ZWRBcmd1bWVudHNPZmZzZXQoKSB7IH0KKyAgICAKKyAgICBleHBsaWNpdCBDYXB0dXJlZEFyZ3Vt
ZW50c09mZnNldCh1bnNpZ25lZCBvZmZzZXQpCisgICAgICAgIDogR2VuZXJpY09mZnNldChvZmZz
ZXQpCisgICAgeworICAgIH0KKyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25z
dDsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gQ2FwdHVyZWRBcmd1bWVu
dHNPZmZzZXRfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RB
cmd1bWVudHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0RpcmVjdEFyZ3VtZW50cy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MTQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJEaXJlY3RBcmd1bWVudHMuaCIKKworI2luY2x1
ZGUgIkdlbmVyaWNBcmd1bWVudHNJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNBcmd1bWVudHNJdGVy
YXRvci5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK1NU
QVRJQ19BU1NFUlRfSVNfVFJJVklBTExZX0RFU1RSVUNUSUJMRShEaXJlY3RBcmd1bWVudHMpOwor
Citjb25zdCBDbGFzc0luZm8gRGlyZWN0QXJndW1lbnRzOjpzX2luZm8gPSB7ICJBcmd1bWVudHMi
LCAmQmFzZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKERpcmVjdEFyZ3VtZW50cykg
fTsKKworRGlyZWN0QXJndW1lbnRzOjpEaXJlY3RBcmd1bWVudHMoVk0mIHZtLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgdW5zaWduZWQgbGVuZ3RoKQorICAgIDogR2VuZXJpY0FyZ3VtZW50cyh2bSwg
c3RydWN0dXJlKQorICAgICwgbV9sZW5ndGgobGVuZ3RoKQoreworfQorCitEaXJlY3RBcmd1bWVu
dHMqIERpcmVjdEFyZ3VtZW50czo6Y3JlYXRlVW5pbml0aWFsaXplZChWTSYgdm0sIFN0cnVjdHVy
ZSogc3RydWN0dXJlLCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgRGlyZWN0QXJndW1lbnRzKiBy
ZXN1bHQgPQorICAgICAgICBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxEaXJlY3RBcmd1bWVu
dHM+KHZtLmhlYXAsIGFsbG9jYXRpb25TaXplKGxlbmd0aCkpKQorICAgICAgICAodm0sIHN0cnVj
dHVyZSk7CisgICAgcmVzdWx0LT5maW5pc2hDcmVhdGlvbih2bSk7CisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKworRGlyZWN0QXJndW1lbnRzKiBEaXJlY3RBcmd1bWVudHM6OmNyZWF0ZShWTSYgdm0s
IFN0cnVjdHVyZSogc3RydWN0dXJlLCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgRGlyZWN0QXJn
dW1lbnRzKiByZXN1bHQgPSBjcmVhdGVVbmluaXRpYWxpemVkKHZtLCBzdHJ1Y3R1cmUsIGxlbmd0
aCk7CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBpID0gbGVuZ3RoOyBpLS07KQorICAgICAgICBy
ZXN1bHQtPnN0b3JhZ2UoKVtpXS5jbGVhcigpOworICAgIAorICAgIHJldHVybiByZXN1bHQ7Cit9
CisKK0RpcmVjdEFyZ3VtZW50cyogRGlyZWN0QXJndW1lbnRzOjpjcmVhdGVCeUNvcHlpbmcoVk0m
IHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgRXhlY1N0YXRlKiBleGVjKQoreworICAgIHVuc2ln
bmVkIGxlbmd0aCA9IGV4ZWMtPmFyZ3VtZW50Q291bnQoKTsKKyAgICBEaXJlY3RBcmd1bWVudHMq
IHJlc3VsdCA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWQodm0sIHN0cnVjdHVyZSwgbGVuZ3RoKTsKKyAg
ICAKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBsZW5ndGg7IGktLTspCisgICAgICAgIHJlc3VsdC0+
c3RvcmFnZSgpW2ldLnNldCh2bSwgcmVzdWx0LCBleGVjLT51bmNoZWNrZWRBcmd1bWVudChpKSk7
CisgICAgCisgICAgcmVzdWx0LT5jYWxsZWUoKS5zZXQodm0sIHJlc3VsdCwganNDYXN0PEpTRnVu
Y3Rpb24qPihleGVjLT5jYWxsZWUoKSkpOworICAgIAorICAgIHJldHVybiByZXN1bHQ7Cit9CisK
K3ZvaWQgRGlyZWN0QXJndW1lbnRzOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogdGhpc0NlbGwsIFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIERpcmVjdEFyZ3VtZW50cyogdGhpc09iamVjdCA9
IHN0YXRpY19jYXN0PERpcmVjdEFyZ3VtZW50cyo+KHRoaXNDZWxsKTsKKyAgICBBU1NFUlRfR0Nf
T0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CisgICAgQmFzZTo6dmlzaXRDaGls
ZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKKyAgICAKKyAgICB2aXNpdG9yLmFwcGVuZFZhbHVl
cyh0aGlzT2JqZWN0LT5zdG9yYWdlKCksIHRoaXNPYmplY3QtPm1fbGVuZ3RoKTsKKyAgICB2aXNp
dG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9jYWxsZWUpOworICAgIAorICAgIGlmICh0aGlzT2Jq
ZWN0LT5tX292ZXJyaWRlcykgeworICAgICAgICB2aXNpdG9yLmNvcHlMYXRlcigKKyAgICAgICAg
ICAgIHRoaXNPYmplY3QsIERpcmVjdEFyZ3VtZW50c092ZXJyaWRlc0NvcHlUb2tlbiwKKyAgICAg
ICAgICAgIHRoaXNPYmplY3QtPm1fb3ZlcnJpZGVzLmdldCgpLCBtX2xlbmd0aCk7CisgICAgfQor
fQorCit2b2lkIERpcmVjdEFyZ3VtZW50czo6Y29weUJhY2tpbmdTdG9yZShKU0NlbGwqIHRoaXND
ZWxsLCBDb3B5VmlzaXRvciYgdmlzaXRvciwgQ29weVRva2VuIHRva2VuKQoreworICAgIERpcmVj
dEFyZ3VtZW50cyogdGhpc09iamVjdCA9IHN0YXRpY19jYXN0PERpcmVjdEFyZ3VtZW50cyo+KHRo
aXNDZWxsKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8o
KSk7CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlQodG9rZW4gPT0gRGlyZWN0QXJndW1lbnRzT3Zl
cnJpZGVzQ29weVRva2VuKTsKKyAgICAKKyAgICBib29sKiBvbGRPdmVycmlkZXMgPSB0aGlzT2Jq
ZWN0LT5tX292ZXJyaWRlcy5nZXQoKTsKKyAgICBpZiAoIW9sZE92ZXJyaWRlcykKKyAgICAgICAg
cmV0dXJuOworICAgIAorICAgIGlmICh2aXNpdG9yLmNoZWNrSWZTaG91bGRDb3B5KG92ZXJyaWRl
cykpIHsKKyAgICAgICAgYm9vbCogbmV3T3ZlcnJpZGVzID0gc3RhdGljX2Nhc3Q8Ym9vbCo+KHZp
c2l0b3IuYWxsb2NhdGVOZXdTcGFjZShtX2xlbmd0aCkpOworICAgICAgICBtZW1jcHkobmV3T3Zl
cnJpZGVzLCBvbGRPdmVycmlkZXMsIG1fbGVuZ3RoKTsKKyAgICAgICAgdGhpc09iamVjdC0+bV9v
dmVycmlkZXMuc2V0V2l0aG91dFdyaXRlQmFycmllcihuZXdPdmVycmlkZXMpOworICAgICAgICB2
aXNpdG9yLmRpZENvcHkob2xkT3ZlcnJpZGVzLCBtX2xlbmd0aCk7CisgICAgfQorfQorCitTdHJ1
Y3R1cmUqIERpcmVjdEFyZ3VtZW50czo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCit7CisgICAgcmV0dXJuIFN0
cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oRGly
ZWN0QXJndW1lbnRzVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworfQorCit2b2lkIERp
cmVjdEFyZ3VtZW50czo6c2xvd0Rvd25BbmRXYXN0ZU1lbW9yeShWTSYgdm0pCit7CisgICAgUkVM
RUFTRV9BU1NFUlQoIW1fb3ZlcnJpZGVzKTsKKyAgICAKKyAgICBwdXREaXJlY3Qodm0sIHZtLnBy
b3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIobV9sZW5ndGgpLCBEb250RW51bSk7CisgICAg
cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5jYWxsZWUsIG1fY2FsbGVlLmdldCgpLCBE
b250RW51bSk7CisgICAgCisgICAgdm9pZCogYmFja2luZ1N0b3JlOworICAgIFJFTEVBU0VfQVNT
RVJUKHZtLmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdlKHRoaXMsIG1fbGVuZ3RoKSwgJmJhY2tpbmdT
dG9yZSk7CisgICAgbV9vdmVycmlkZXMuc2V0KHZtLCB0aGlzLCBzdGF0aWNfY2FzdDxib29sKj4o
YmFja2luZ1N0b3JlKSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gbV9sZW5ndGg7IGktLTspCisg
ICAgICAgIG1fb3ZlcnJpZGVzLmdldCgpW2ldID0gZmFsc2U7Cit9CisKK3ZvaWQgRGlyZWN0QXJn
dW1lbnRzOjpzbG93RG93bkFuZFdhc3RlTWVtb3J5SWZOZWNlc3NhcnkoVk0mIHZtKQoreworICAg
IGlmICghbV9vdmVycmlkZXMpCisgICAgICAgIHNsb3dEb3duQW5kV2FzdGVNZW1vcnkodm0pOwor
fQorCit2b2lkIERpcmVjdEFyZ3VtZW50czo6b3ZlcnJpZGVBcmd1bWVudChWTSYgdm0sIHVuc2ln
bmVkIGkpCit7CisgICAgc2xvd0Rvd25BbmRXYXN0ZU1lbW9yeUlmTmVjZXNzYXJ5KHZtKTsKKyAg
ICBtX292ZXJyaWRlcy5nZXQoKVtpbmRleF0gPSB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBK
U0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJn
dW1lbnRzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9E
aXJlY3RBcmd1bWVudHMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEzNyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERpcmVjdEFy
Z3VtZW50c19oCisjZGVmaW5lIERpcmVjdEFyZ3VtZW50c19oCisKKyNpbmNsdWRlICJHZW5lcmlj
QXJndW1lbnRzLmgiCisKK25hbWVzcGFjZSBKU0MgeworCisvLyBUaGlzIGlzIGFuIEFyZ3VtZW50
cy1jbGFzcyBvYmplY3QgdGhhdCB3ZSBjcmVhdGUgd2hlbiB5b3Ugc2F5ICJhcmd1bWVudHMiIGlu
c2lkZSBhIGZ1bmN0aW9uLAorLy8gYW5kIG5vbmUgb2YgdGhlIGFyZ3VtZW50cyBhcmUgY2FwdHVy
ZWQgaW4gdGhlIGZ1bmN0aW9uJ3MgYWN0aXZhdGlvbi4gVGhlIGZ1bmN0aW9uIHdpbGwgY29weSBh
bGwKKy8vIG9mIGl0cyBhcmd1bWVudHMgaW50byB0aGlzIG9iamVjdCwgYW5kIGFsbCBzdWJzZXF1
ZW50IGFjY2Vzc2VzIHRvIHRoZSBhcmd1bWVudHMgd2lsbCBnbyB0aHJvdWdoCisvLyB0aGlzIG9i
amVjdCB0aGVyZWFmdGVyLiBTcGVjaWFsIHN1cHBvcnQgaXMgaW4gcGxhY2UgZm9yIG1pc2NoZXZp
b3VzIGV2ZW50cyBsaWtlIHRoZSBhcmd1bWVudHMKKy8vIGJlaW5nIGRlbGV0ZWQgKHNvbWV0aGlu
ZyBsaWtlICJkZWxldGUgYXJndW1lbnRzWzBdIikgb3IgcmVjb25maWd1cmVkIChicm9hZGx5LCB3
ZSBzYXkgZGVsZXRpb25zCisvLyBhbmQgcmVjb25maWd1cmF0aW9ucyBtZWFuIHRoYXQgdGhlIHJl
c3BlY3RpdmUgYXJndW1lbnQgd2FzICJvdmVycmlkZGVuIikuCisvLworLy8gVG8gc3BlZWQgYWxs
b2NhdGlvbiwgdGhpcyBvYmplY3Qgd2lsbCBob2xkIGFsbCBvZiB0aGUgYXJndW1lbnRzIGluLXBs
YWNlLiBUaGUgYXJndW1lbnRzIGFzIHdlbGwKKy8vIGFzIGEgdGFibGUgb2YgZmxhZ3Mgc2F5aW5n
IHdoaWNoIGFyZ3VtZW50cyB3ZXJlIG92ZXJyaWRkZW4uCitjbGFzcyBEaXJlY3RBcmd1bWVudHMg
OiBwdWJsaWMgR2VuZXJpY0FyZ3VtZW50czxEaXJlY3RBcmd1bWVudHM+IHsKK3ByaXZhdGU6Cisg
ICAgRGlyZWN0QXJndW1lbnRzKFZNJiwgU3RydWN0dXJlKiwgdW5zaWduZWQgbGVuZ3RoKTsKKyAg
ICAKK3B1YmxpYzoKKyAgICAvLyBDcmVhdGVzIGFuIGFyZ3VtZW50cyBvYmplY3QgYnV0IGxlYXZl
cyBpdCB1bmluaXRpYWxpemVkLgorICAgIHN0YXRpYyBEaXJlY3RBcmd1bWVudHMqIGNyZWF0ZVVu
aW5pdGlhbGl6ZWQoVk0mLCBTdHJ1Y3R1cmUqLCB1bnNpZ25lZCBsZW5ndGgpOworICAgIAorICAg
IC8vIENyZWF0ZXMgYW4gYXJndW1lbnRzIG9iamVjdCBhbmQgaW5pdGlhbGl6ZXMgZXZlcnl0aGlu
ZyB0byB0aGUgZW1wdHkgdmFsdWUuCisgICAgc3RhdGljIERpcmVjdEFyZ3VtZW50cyogY3JlYXRl
KFZNJiwgU3RydWN0dXJlKiwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICAKKyAgICAvLyBDcmVhdGVz
IGFuIGFyZ3VtZW50cyBvYmplY3QgYnkgY29weWluZyB0aGUgYXJndW1uZXRzIGZyb20gdGhlIHN0
YWNrLgorICAgIHN0YXRpYyBEaXJlY3RBcmd1bWVudHMqIGNyZWF0ZUJ5Q29weWluZyhWTSYsIFN0
cnVjdHVyZSosIEV4ZWNTdGF0ZSopOworICAgIAorICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBzdGF0aWMgdm9pZCBjb3B5QmFja2luZ1N0
b3JlKEpTQ2VsbCosIENvcHlWaXNpdG9yJiwgQ29weVRva2VuKTsKKyAgICAKKyAgICB1aW50MzJf
dCBpbnRlcm5hbExlbmd0aCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9sZW5ndGg7
CisgICAgfQorICAgIAorICAgIHVpbnQzMl90IGxlbmd0aChFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0
CisgICAgeworICAgICAgICBpZiAoVU5MSUtFTFkobV9vdmVycmlkZXMpKQorICAgICAgICAgICAg
cmV0dXJuIGdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKS50b1VJbnQzMihl
eGVjKTsKKyAgICAgICAgcmV0dXJuIG1fbGVuZ3RoOworICAgIH0KKyAgICAKKyAgICBib29sIGNh
bkFjY2Vzc0luZGV4UXVpY2tseSh1aW50MzJfdCBpKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIGkgPCBtX2xlbmd0aCAmJiAoIW1fb3ZlcnJpZGVzIHx8ICFtX292ZXJyaWRlcy5nZXQoKVtp
XSk7CisgICAgfQorICAgIAorICAgIEpTVmFsdWUgZ2V0SW5kZXhRdWlja2x5KHVpbnQzMl90IGkp
IGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihj
YW5BY2Nlc3NJbmRleFF1aWNrbHkoaSkpOworICAgICAgICByZXR1cm4gc3RvcmFnZSgpW2ldLmdl
dCgpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNldEluZGV4UXVpY2tseShWTSYgdm0sIHVpbnQz
Ml90IGksIEpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklU
WV9JTVBMSUNBVElPTihjYW5BY2Nlc3NJbmRleFF1aWNrbHkoaSkpOworICAgICAgICBzdG9yYWdl
KClbaV0uc2V0KHZtLCB0aGlzLCB2YWx1ZSk7CisgICAgfQorICAgIAorICAgIFdyaXRlQmFycmll
cjxKU0Z1bmN0aW9uPiYgY2FsbGVlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX2NhbGxlZTsK
KyAgICB9CisgICAgCisgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiBhcmd1bWVudChDYXB0dXJl
ZEFyZ3VtZW50c09mZnNldCBvZmZzZXQpCisgICAgeworICAgICAgICBBU1NFUlQob2Zmc2V0KTsK
KyAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04ob2Zmc2V0Lm9mZnNldCgp
IDwgbV9sZW5ndGgpOworICAgICAgICByZXR1cm4gc3RvcmFnZSgpW29mZnNldC5vZmZzZXQoKV07
CisgICAgfQorICAgIAorICAgIC8vIE1ldGhvZHMgaW50ZW5kZWQgZm9yIHVzZSBieSB0aGUgR2Vu
ZXJpY0FyZ3VtZW50cyBtaXhpbi4KKyAgICBib29sIG92ZXJyb2RlVGhpbmdzKCkgY29uc3QgeyBy
ZXR1cm4gISFtX292ZXJyaWRlczsgfQorICAgIHZvaWQgc2xvd0Rvd25BbmRXYXN0ZU1lbW9yeShW
TSYpOworICAgIHZvaWQgc2xvd0Rvd25BbmRXYXN0ZU1lbW9yeUlmTmVjZXNzYXJ5KFZNJik7Cisg
ICAgdm9pZCBvdmVycmlkZUFyZ3VtZW50KFZNJiwgdW5zaWduZWQgaW5kZXgpOworICAgIAorICAg
IERFQ0xBUkVfSU5GTzsKKyAgICAKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1
cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlKTsKKyAgICAKKyAgICBz
dGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTGVuZ3RoKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9G
KERpcmVjdEFyZ3VtZW50cywgbV9sZW5ndGgpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZz
ZXRPZk92ZXJyaWRlcygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihEaXJlY3RBcmd1bWVudHMs
IG1fb3ZlcnJpZGVzKTsgfQorICAgIAorICAgIHN0YXRpYyBzaXplX3Qgc3RvcmFnZU9mZnNldCgp
CisgICAgeworICAgICAgICByZXR1cm4gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mPHNpemVvZihX
cml0ZUJhcnJpZXI8VW5rbm93bj4pPihzaXplb2YoRGlyZWN0QXJndW1lbnRzKSk7CisgICAgfQor
ICAgIAorICAgIHN0YXRpYyBzaXplX3QgYWxsb2NhdGlvblNpemUodWludDMyX3QgbGVuZ3RoKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIHN0b3JhZ2VPZmZzZXQoKSArIHNpemVvZihXcml0ZUJhcnJp
ZXI8VW5rbm93bj4pICogbGVuZ3RoOworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgV3JpdGVC
YXJyaWVyPFVua25vd24+KiBzdG9yYWdlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBiaXR3aXNl
X2Nhc3Q8V3JpdGVCYXJyaWVyPFVua25vd24+Kj4oYml0d2lzZV9jYXN0PGNoYXIqPih0aGlzKSAr
IHN0b3JhZ2VPZmZzZXQoKSk7CisgICAgfQorICAgIAorICAgIFdyaXRlQmFycmllcjxKU0Z1bmN0
aW9uKj4gbV9jYWxsZWU7CisgICAgdWludDMyX3QgbV9sZW5ndGg7IC8vIEFsd2F5cyB0aGUgYWN0
dWFsIGxlbmd0aCBvZiBjYXB0dXJlZCBhcmd1bWVudHMgYW5kIG5ldmVyIHdoYXQgd2FzIHN0b3Jl
ZCBpbnRvIHRoZSBsZW5ndGggcHJvcGVydHkuCisgICAgQ29weVdyaXRlQmFycmllcjxib29sPiBt
X292ZXJyaWRlczsgLy8gSWYgbm9uLW51bGwsIGl0IG1lYW5zIHRoYXQgbGVuZ3RoLCBjYWxsZWUs
IGFuZCBjYWxsZXIgYXJlIGZ1bGx5IG1hdGVyaWFsaXplZCBwcm9wZXJ0aWVzLgorfTsKKworfSAv
LyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBEaXJlY3RBcmd1bWVudHNfaAorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Gb3JlaWduVmFyaWFibGVJbmRleC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ZvcmVpZ25WYXJpYWJsZUlu
ZGV4LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Gb3Jl
aWduVmFyaWFibGVJbmRleC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBGb3JlaWdu
VmFyaWFibGVJbmRleF9oCisjZGVmaW5lIEZvcmVpZ25WYXJpYWJsZUluZGV4X2gKKworbmFtZXNw
YWNlIEpTQyB7CisKK2NsYXNzIEZvcmVpZ25WYXJpYWJsZUluZGV4IHsKK3B1YmxpYzoKKyAgICBG
b3JlaWduVmFyaWFibGVJbmRleCgpCisgICAgICAgIDogbV9pbmRleChVSU5UX01BWCkKKyAgICB7
CisgICAgfQorICAgIAorICAgIGV4cGxpY2l0IEZvcmVpZ25WYXJpYWJsZUluZGV4KHVuc2lnbmVk
IGluZGV4KQorICAgICAgICA6IG1faW5kZXgoaW5kZXgpCisgICAgeworICAgIH0KKyAgICAKKyAg
ICAKKyAgICAKK3ByaXZhdGU6CisgICAgdW5zaWduZWQgbV9pbmRleDsKK307CisKK30gLy8gbmFt
ZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRm9yZWlnblZhcmlhYmxlSW5kZXhfaAorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50cy5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3Vt
ZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBHZW5lcmljQXJndW1lbnRzX2gK
KyNkZWZpbmUgR2VuZXJpY0FyZ3VtZW50c19oCisKKyNpbmNsdWRlICJKU09iamVjdC5oIgorCitu
YW1lc3BhY2UgSlNDIHsKKworLy8gVGhpcyBpcyBhIG1peGluIGZvciB0aGUgdHdvIGtpbmRzIG9m
IEFyZ3VtZW50cy1jbGFzcyBvYmplY3RzIHRoYXQgYXJpc2Ugd2hlbiB5b3Ugc2F5CisvLyAiYXJn
dW1lbnRzIiBpbnNpZGUgYSBmdW5jdGlvbi4gVGhpcyBjbGFzcyBkb2Vzbid0IHNob3cgdXAgaW4g
dGhlIEpTQ2VsbCBpbmhlcml0YW5jZSBoaWVyYXJjaHkuCit0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBl
PgorY2xhc3MgR2VuZXJpY0FyZ3VtZW50cyA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKK3B1
YmxpYzoKKyAgICB0eXBlZGVmIEpTTm9uRmluYWxPYmplY3QgQmFzZTsKKworICAgIHN0YXRpYyBj
b25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xv
dCB8IEludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05v
dFplcm8gfCBPdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzIHwgSlNPYmplY3Q6OlN0cnVjdHVyZUZs
YWdzOworCitwcm90ZWN0ZWQ6CisgICAgR2VuZXJpY0FyZ3VtZW50cyhWTSYgdm0sIFN0cnVjdHVy
ZSogc3RydWN0dXJlKQorICAgICAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSkKKyAgICB7CisgICAg
fQorCisgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiwgRXhlY1N0
YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgYm9vbCBnZXRP
d25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJv
cGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0
eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJh
dGlvbk1vZGUpOworICAgIHN0YXRpYyB2b2lkIHB1dChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9w
ZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyB2b2lkIHB1
dEJ5SW5kZXgoSlNDZWxsKiwgRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1Zh
bHVlLCBib29sIHNob3VsZFRocm93KTsKKyAgICBzdGF0aWMgdm9pZCBkZWxldGVQcm9wZXJ0eShK
U0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUpOworICAgIHN0YXRpYyB2b2lkIGRlbGV0
ZVByb3BlcnR5QnlJbmRleChKU0NlbGwqLCBFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5h
bWUpOworICAgIHN0YXRpYyB2b2lkIGRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiwgRXhlY1N0
YXRlKiwgUHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHNob3Vs
ZFRocm93KTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gR2VuZXJpY0Fy
Z3VtZW50c19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNB
cmd1bWVudHNJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lubGluZXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHNJbmxpbmVzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwyMTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBHZW5lcmljQXJndW1lbnRzSW5saW5lc19oCisjZGVmaW5l
IEdlbmVyaWNBcmd1bWVudHNJbmxpbmVzX2gKKworI2luY2x1ZGUgIkdlbmVyaWNBcmd1bWVudHMu
aCIKKyNpbmNsdWRlICJKU0FyZ3VtZW50c0l0ZXJhdG9yLmgiCisjaW5jbHVkZSAiSlNDSW5saW5l
cy5oIgorCituYW1lc3BhY2UgSlNDIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4KK2Jvb2wg
R2VuZXJpY0FyZ3VtZW50czxUeXBlPjo6Z2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiBvYmpl
Y3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIGlkZW50LCBQcm9wZXJ0eVNsb3QmIHNs
b3QpCit7CisgICAgVHlwZSogdGhpc09iamVjdCA9IGpzQ2FzdDxUeXBlKj4ob2JqZWN0KTsKKyAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIAorICAgIGlmICghdGhpc09iamVjdC0+b3ZlcnJv
ZGVUaGluZ3MoKSkgeworICAgICAgICBpZiAoaWRlbnQgPT0gdm0ucHJvcGVydHlOYW1lcy0+bGVu
Z3RoKSB7CisgICAgICAgICAgICBzbG90LnNldFZhbHVlKHRoaXNPYmplY3QsIERvbnRFbnVtLCBq
c051bWJlcih0aGlzT2JqZWN0LT5pbnRlcm5hbExlbmd0aCgpKSk7CisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoaWRlbnQgPT0gdm0ucHJvcGVydHlOYW1l
cy0+Y2FsbGVlKSB7CisgICAgICAgICAgICBzbG90LnNldFZhbHVlKHRoaXNPYmplY3QsIERvbnRF
bnVtLCB0aGlzT2JqZWN0LT5jYWxsZWUoKS5nZXQoKSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBpbmRleCA9IGlkZW50LmFz
SW5kZXgoKTsKKyAgICBpZiAodGhpc09iamVjdC0+Y2FuQWNjZXNzSW5kZXhRdWlja2x5KGluZGV4
KSkgeworICAgICAgICBzbG90LnNldFZhbHVlKHRoaXNPYmplY3QsIE5vbmUsIHRoaXNPYmplY3Qt
PmdldEluZGV4UXVpY2tseShpbmRleCkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cisg
ICAgCisgICAgaWYgKEJhc2U6OmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBleGVjLCBp
ZGVudCwgc2xvdCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIAorICAgIGlmIChpZGVudCA9
PSB2bS5wcm9wZXJ0eU5hbWVzLT5pdGVyYXRvclByaXZhdGVOYW1lKSB7CisgICAgICAgIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7Cisg
ICAgICAgIHRoaXNPYmplY3QtPkpTQ19OQVRJVkVfRlVOQ1RJT04odm0ucHJvcGVydHlOYW1lcy0+
aXRlcmF0b3JQcml2YXRlTmFtZSwgYXJndW1lbnRzRnVuY0l0ZXJhdG9yLCBEb250RW51bSwgMCk7
CisgICAgICAgIGlmIChKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIGV4
ZWMsIGlkZW50LCBzbG90KSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFR5cGU+Citib29sIEdl
bmVyaWNBcmd1bWVudHM8VHlwZT46OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNPYmplY3Qq
IG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpbmRleCwgUHJvcGVydHlTbG90JiBz
bG90KQoreworICAgIFR5cGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8VHlwZSo+KG9iamVjdCk7Cisg
ICAgCisgICAgaWYgKHRoaXNPYmplY3QtPmNhbkFjY2Vzc0luZGV4UXVpY2tseShpbmRleCkpIHsK
KyAgICAgICAgc2xvdC5zZXRWYWx1ZSh0aGlzT2JqZWN0LCBOb25lLCB0aGlzT2JqZWN0LT5nZXRJ
bmRleFF1aWNrbHkoaW5kZXgpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAor
ICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KG9iamVjdCwgZXhlYywg
aW5kZXgsIHNsb3QpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPgordm9pZCBHZW5lcmlj
QXJndW1lbnRzPFR5cGU+OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4
ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIGFycmF5LCBFbnVtZXJhdGlvbk1vZGUg
bW9kZSkKK3sKKyAgICBUeXBlKiB0aGlzT2JqZWN0ID0ganNDYXN0PFR5cGUqPihvYmplY3QpOwor
ICAgIAorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0aGlzT2JqZWN0LT5pbnRlcm5hbExl
bmd0aCgpOyArK2kpIHsKKyAgICAgICAgaWYgKCF0aGlzT2JqZWN0LT5jYW5BY2Nlc3NJbmRleFF1
aWNrbHkoaW5kZXgpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGFycmF5LmFkZChJ
ZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGkpKTsKKyAgICB9CisgICAgaWYgKHNob3VsZEluY2x1ZGVE
b250RW51bVByb3BlcnRpZXMobW9kZSkgJiYgIXRoaXNPYmplY3QtPm92ZXJyb2RlVGhpbmdzKCkp
IHsKKyAgICAgICAgYXJyYXkuYWRkKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jYWxsZWUpOworICAg
ICAgICBhcnJheS5hZGQoZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCk7CisgICAgfQorICAg
IEJhc2U6OmdldE93blByb3BlcnR5TmFtZXModGhpc09iamVjdCwgZXhlYywgYXJyYXksIG1vZGUp
OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPgordm9pZCBHZW5lcmljQXJndW1lbnRzPFR5
cGU+OjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBpZGVu
dCwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQoreworICAgIFR5cGUqIHRo
aXNPYmplY3QgPSBqc0Nhc3Q8VHlwZSo+KG9iamVjdCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKKyAgICAKKyAgICBpZiAoIXRoaXNPYmplY3QtPm92ZXJyb2RlVGhpbmdzKCkKKyAgICAgICAg
JiYgKGlkZW50ID09IHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aAorICAgICAgICAgICAgfHwgaWRl
bnQgPT0gdm0ucHJvcGVydHlOYW1lcy0+Y2FsbGVlKSkKKyAgICAgICAgdGhpc09iamVjdC0+c2xv
d0Rvd25BbmRXYXN0ZU1lbW9yeSh2bSk7CisgICAgCisgICAgdW5zaWduZWQgaW5kZXggPSBpZGVu
dC5hc0luZGV4KCk7CisgICAgaWYgKHRoaXNPYmplY3QtPmNhbkFjY2Vzc0luZGV4UXVpY2tseShp
bmRleCkpIHsKKyAgICAgICAgc2V0SW5kZXhRdWlja2x5KHZtLCBpbmRleCwgdmFsdWUpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIEJhc2U6OnB1dCh0aGlzT2JqZWN0LCBleGVj
LCBpZGVudCwgdmFsdWUsIHNsb3QpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPgordm9p
ZCBHZW5lcmljQXJndW1lbnRzPFR5cGU+OjpwdXRCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0
YXRlKiBleGVjLCB1bnNpZ25lZCBpbmRleCwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJv
dykKK3sKKyAgICBUeXBlKiB0aGlzT2JqZWN0ID0ganNDYXN0PFR5cGUqPihvYmplY3QpOworICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgCisgICAgaWYgKHRoaXNPYmplY3QtPmNhblNldElu
ZGV4UXVpY2tseShpbmRleCkpIHsKKyAgICAgICAgc2V0SW5kZXhRdWlja2x5KHZtLCBpbmRleCwg
dmFsdWUpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIHJldHVybiBCYXNlOjpw
dXRCeUluZGV4KGNlbGwsIGV4ZWMsIGluZGV4LCB2YWx1ZSwgc2hvdWxkVGhyb3cpOworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPgordm9pZCBHZW5lcmljQXJndW1lbnRzPFR5cGU+OjpkZWxl
dGVQcm9wZXJ0eShKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIGlk
ZW50KQoreworICAgIFR5cGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8VHlwZSo+KG9iamVjdCk7Cisg
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICAKKyAgICBpZiAoIXRoaXNPYmplY3QtPm92ZXJy
b2RlVGhpbmdzKCkKKyAgICAgICAgJiYgKGlkZW50ID09IHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0
aAorICAgICAgICAgICAgfHwgaWRlbnQgPT0gdm0ucHJvcGVydHlOYW1lcy0+Y2FsbGVlKSkKKyAg
ICAgICAgdGhpc09iamVjdC0+c2xvd0Rvd25BbmRXYXN0ZU1lbW9yeSh2bSk7CisgICAgCisgICAg
dW5zaWduZWQgaW5kZXggPSBpZGVudC5hc0luZGV4KCk7CisgICAgaWYgKHRoaXNPYmplY3QtPmNh
bkFjY2Vzc0luZGV4UXVpY2tseShpbmRleCkpIHsKKyAgICAgICAgdGhpc09iamVjdC0+b3ZlcnJp
ZGVBcmd1bWVudCh2bSwgaW5kZXgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAg
IEJhc2U6OmRlbGV0ZVByb3BlcnR5KHRoaXNPYmplY3QsIGV4ZWMsIGlkZW50KTsKK30KKwordGVt
cGxhdGU8dHlwZW5hbWUgVHlwZT4KK3ZvaWQgR2VuZXJpY0FyZ3VtZW50czxUeXBlPjo6ZGVsZXRl
UHJvcGVydHlCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBp
bmRleCkKK3sKKyAgICBUeXBlKiB0aGlzT2JqZWN0ID0ganNDYXN0PFR5cGUqPihvYmplY3QpOwor
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgCisgICAgaWYgKHRoaXNPYmplY3QtPmNhbkFj
Y2Vzc0luZGV4UXVpY2tseShpbmRleCkpIHsKKyAgICAgICAgdGhpc09iamVjdC0+b3ZlcnJpZGVB
cmd1bWVudCh2bSwgaW5kZXgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIHJl
dHVybiBCYXNlOjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgoY2VsbCwgZXhlYywgaW5kZXgpOworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPgordm9pZCBHZW5lcmljQXJndW1lbnRzPFR5cGU+Ojpk
ZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3Bl
cnR5TmFtZSBpZGVudCwgY29uc3QgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBib29s
IHNob3VsZFRocm93KQoreworICAgIFR5cGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8VHlwZSo+KG9i
amVjdCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICAKKyAgICBpZiAoaWRlbnQgPT0g
dm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoCisgICAgICAgIHx8IGlkZW50ID09IHZtLnByb3BlcnR5
TmFtZXMtPmNhbGxlZSkKKyAgICAgICAgdGhpc09iamVjdC0+c2xvd0Rvd25BbmRXYXN0ZU1lbW9y
eUlmTmVjZXNzYXJ5KHZtKTsKKyAgICBlbHNlIHsKKyAgICAgICAgdW5zaWduZWQgaW5kZXggPSBp
ZGVudC5hc0luZGV4KCk7CisgICAgICAgIGlmICh0aGlzT2JqZWN0LT5jYW5BY2Nlc3NBcmd1bWVu
dFF1aWNrbHkoaW5kZXgpKSB7CisgICAgICAgICAgICBpZiAoIWRlc2NyaXB0b3IuaXNBY2Nlc3Nv
ckRlc2NyaXB0b3IoKSkgeworICAgICAgICAgICAgICAgIC8vIElmIHRoZSBwcm9wZXJ0eSBpcyBu
b3QgZGVsZXRlZCBhbmQgd2UgYXJlIHVzaW5nIGEgbm9uLWFjY2Vzc29yIGRlc2NyaXB0b3IsIHRo
ZW4KKyAgICAgICAgICAgICAgICAvLyBtYWtlIHN1cmUgdGhhdCB0aGUgYWxpYXNlZCBhcmd1bWVu
dCBzZWVzIHRoZSB2YWx1ZS4KKyAgICAgICAgICAgICAgICBpZiAoZGVzY3JpcHRvci52YWx1ZSgp
KQorICAgICAgICAgICAgICAgICAgICB0aGlzT2JqZWN0LT5zZXRJbmRleFF1aWNrbHkodm0sIGks
IGRlc2NyaXB0b3IudmFsdWUoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyBJ
ZiB0aGUgcHJvcGVydHkgaXMgbm90IGRlbGV0ZWQgYW5kIHdlIGFyZSB1c2luZyBhIG5vbi1hY2Nl
c3Nvciwgd3JpdGFibGUKKyAgICAgICAgICAgICAgICAvLyBkZXNjcmlwdG9yLCB0aGVuIHdlIGFy
ZSBkb25lLiBUaGUgYXJndW1lbnQgY29udGludWVzIHRvIGJlIGFsaWFzZWQuIE5vdGUgdGhhdCB3
ZQorICAgICAgICAgICAgICAgIC8vIGlnbm9yZSB0aGUgcmVxdWVzdCB0byBjaGFuZ2UgZW51bWVy
YWJpbGl0eS4gV2UgYXBwZWFyIHRvIGhhdmUgYWx3YXlzIGRvbmUgc28sIGluCisgICAgICAgICAg
ICAgICAgLy8gY2FzZXMgd2hlcmUgdGhlIGFyZ3VtZW50IHdhcyBzdGlsbCBhbGlhc2VkLgorICAg
ICAgICAgICAgICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTQxOTUyCisgICAgICAgICAgICAgICAgaWYgKGRlc2NyaXB0b3Iud3JpdGFibGUoKSkK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAg
IAorICAgICAgICAgICAgLy8gSWYgdGhlIHByb3BlcnR5IGlzIGEgbm9uLWRlbGV0ZWQgYXJndW1l
bnQsIHRoZW4gbW92ZSBpdCBpbnRvIHRoZSBiYXNlIG9iamVjdCBhbmQKKyAgICAgICAgICAgIC8v
IHRoZW4gZGVsZXRlIGl0LgorICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IHRoaXNPYmplY3Qt
PmdldEluZGV4UXVpY2tseShpKTsKKyAgICAgICAgICAgIEFTU0VSVCh2YWx1ZSk7CisgICAgICAg
ICAgICBvYmplY3QtPnB1dERpcmVjdE1heUJlSW5kZXgoZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1
ZSk7CisgICAgICAgICAgICB0aGlzT2JqZWN0LT5vdmVycmlkZUFyZ3VtZW50KHZtLCBpKTsKKyAg
ICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvLyBOb3cganVzdCBsZXQgdGhlIG5vcm1hbCBvYmpl
Y3QgbWFjaGluZXJ5IGRvIGl0cyB0aGluZy4KKyAgICByZXR1cm4gQmFzZTo6ZGVmaW5lT3duUHJv
cGVydHkob2JqZWN0LCBleGVjLCBpZGVudCwgZGVzY3JpcHRvciwgc2hvdWxkVGhyb3cpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEdlbmVyaWNBcmd1bWVudHNJbmxpbmVz
X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY09mZnNldC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNPZmZz
ZXQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVy
aWNPZmZzZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDExMSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEdlbmVyaWNPZmZzZXRf
aAorI2RlZmluZSBHZW5lcmljT2Zmc2V0X2gKKworI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+
CisKK25hbWVzcGFjZSBKU0MgeworCisvLyBBIG1peGluIGZvciBjcmVhdGluZyB0aGUgdmFyaW91
cyBraW5kcyBvZiB2YXJpYWJsZSBvZmZzZXRzIHRoYXQgb3VyIGVuZ2luZSBzdXBwb3J0cy4KK3Rl
bXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBHZW5lcmljT2Zmc2V0IHsKK3B1YmxpYzoKKyAgICBz
dGF0aWMgY29uc3QgdW5zaWduZWQgaW52YWxpZE9mZnNldCA9IFVJTlRfTUFYOworICAgIAorICAg
IEdlbmVyaWNPZmZzZXQoKQorICAgICAgICA6IG1fb2Zmc2V0KGludmFsaWRPZmZzZXQpCisgICAg
eworICAgIH0KKyAgICAKKyAgICBleHBsaWNpdCBHZW5lcmljT2Zmc2V0KHVuc2lnbmVkIG9mZnNl
dCkKKyAgICAgICAgOiBtX29mZnNldChvZmZzZXQpCisgICAgeworICAgIH0KKyAgICAKKyAgICBi
b29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0ID09IGludmFsaWRPZmZzZXQ7
IH0KKyAgICAKKyAgICB1bnNpZ25lZCBvZmZzZXRVbmNoZWNrZWQoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG1fb2Zmc2V0OworICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBvZmZzZXQo
KSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fb2Zmc2V0ICE9IGludmFsaWRPZmZzZXQp
OworICAgICAgICByZXR1cm4gbV9vZmZzZXQ7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBUJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX29mZnNl
dCA9PSBvdGhlci5vZmZzZXRVbmNoZWNrZWQoKTsKKyAgICB9CisgICAgYm9vbCBvcGVyYXRvciE9
KGNvbnN0IFQmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fb2Zmc2V0ICE9
IG90aGVyLm9mZnNldFVuY2hlY2tlZCgpOworICAgIH0KKyAgICBib29sIG9wZXJhdG9yPChjb25z
dCBUJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX29mZnNldCA8IG90aGVy
Lm9mZnNldFVuY2hlY2tlZCgpOworICAgIH0KKyAgICBib29sIG9wZXJhdG9yPihjb25zdCBUJiBv
dGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX29mZnNldCA+IG90aGVyLm9mZnNl
dFVuY2hlY2tlZCgpOworICAgIH0KKyAgICBib29sIG9wZXJhdG9yPD0oY29uc3QgVCYgb3RoZXIp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9vZmZzZXQgPD0gb3RoZXIub2Zmc2V0VW5j
aGVja2VkKCk7CisgICAgfQorICAgIGJvb2wgb3BlcmF0b3I+PShjb25zdCBUJiBvdGhlcikgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX29mZnNldCA+PSBvdGhlci5vZmZzZXRVbmNoZWNr
ZWQoKTsKKyAgICB9CisgICAgCisgICAgVCBvcGVyYXRvcisoaW50IHZhbHVlKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIFQob2Zmc2V0KCkgKyB2YWx1ZSk7CisgICAgfQorICAgIFQgb3Bl
cmF0b3ItKGludCB2YWx1ZSkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBUKG9mZnNldCgp
IC0gdmFsdWUpOworICAgIH0KKyAgICBUJiBvcGVyYXRvcis9KGludCB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiAqdGhpcyA9ICp0aGlzICsgdmFsdWU7CisgICAgfQorICAgIFQmIG9wZXJh
dG9yLT0oaW50IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuICp0aGlzID0gKnRoaXMgLSB2
YWx1ZTsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIHVuc2lnbmVkIG1fb2Zmc2V0OworfTsK
KworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBHZW5lcmljT2Zmc2V0X2gKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcmd1bWVudHNJdGVyYXRvci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcmd1bWVudHNJ
dGVyYXRvci5jcHAJKHJldmlzaW9uIDE4MDcyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQXJndW1lbnRzSXRlcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE1IEFwcGxlLCBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMzLDEwICsz
MywxOCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY29uc3QgQ2xhc3NJbmZvIEpTQXJndW1lbnRzSXRl
cmF0b3I6OnNfaW5mbyA9IHsgIkFyZ3VtZW50c0l0ZXJhdG9yIiwgJkJhc2U6OnNfaW5mbywgMCwg
Q1JFQVRFX01FVEhPRF9UQUJMRShKU0FyZ3VtZW50c0l0ZXJhdG9yKSB9OwogCi12b2lkIEpTQXJn
dW1lbnRzSXRlcmF0b3I6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgQXJndW1lbnRzKiBhcmd1bWVu
dHMpCit2b2lkIEpTQXJndW1lbnRzSXRlcmF0b3I6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgSlNP
YmplY3QqIGFyZ3VtZW50cykKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiAgICAg
bV9hcmd1bWVudHMuc2V0KHZtLCB0aGlzLCBhcmd1bWVudHMpOwogfQogCitFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGFyZ3VtZW50c0Z1bmNJdGVyYXRvcihFeGVjU3RhdGUqIGV4ZWMpCit7
CisgICAgSlNPYmplY3QqIHRoaXNPYmogPSBleGVjLT50aGlzVmFsdWUoKS50b1RoaXMoZXhlYywg
U3RyaWN0TW9kZSkudG9PYmplY3QoZXhlYyk7CisgICAgaWYgKCF0aGlzT2JqLT5pbmhlcml0cyhB
cmd1bWVudHM6OmluZm8oKSkgJiYgIXRoaXNPYmotPmluaGVyaXRzKE91dE9mQmFuZEFyZ3VtZW50
czo6aW5mbygpKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd1R5cGVFcnJv
cihleGVjLCBBU0NJSUxpdGVyYWwoIkF0dGVtcHRlZCB0byB1c2UgQXJndW1lbnRzIGl0ZXJhdG9y
IG9uIG5vbi1Bcmd1bWVudHMgb2JqZWN0IikpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KEpTQXJndW1lbnRzSXRlcmF0b3I6OmNyZWF0ZShleGVjLT52bSgpLCBleGVjLT5jYWxsZWUoKS0+
Z2xvYmFsT2JqZWN0KCktPmFyZ3VtZW50c0l0ZXJhdG9yU3RydWN0dXJlKCksIHRoaXNPYmopKTsK
K30KKwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcmd1bWVudHNJ
dGVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
QXJndW1lbnRzSXRlcmF0b3IuaAkocmV2aXNpb24gMTgwNzIwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNBcmd1bWVudHNJdGVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSwgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE1IEFwcGxlLCBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2
LDcgKzI2LDcgQEAKICNpZm5kZWYgSlNBcmd1bWVudHNJdGVyYXRvcl9oCiAjZGVmaW5lIEpTQXJn
dW1lbnRzSXRlcmF0b3JfaAogCi0jaW5jbHVkZSAiQXJndW1lbnRzLmgiCisjaW5jbHVkZSAiSlNP
YmplY3QuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTQxLDcgKzQxLDcgQEAgcHVibGljOgog
ICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90
eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CiAgICAg
fQogCi0gICAgc3RhdGljIEpTQXJndW1lbnRzSXRlcmF0b3IqIGNyZWF0ZShWTSYgdm0sIFN0cnVj
dHVyZSogc3RydWN0dXJlLCBBcmd1bWVudHMqIGFyZ3VtZW50cykKKyAgICBzdGF0aWMgSlNBcmd1
bWVudHNJdGVyYXRvciogY3JlYXRlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTT2Jq
ZWN0KiBhcmd1bWVudHMpCiAgICAgewogICAgICAgICBKU0FyZ3VtZW50c0l0ZXJhdG9yKiBpbnN0
YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTQXJndW1lbnRzSXRlcmF0b3I+KHZt
LmhlYXApKSBKU0FyZ3VtZW50c0l0ZXJhdG9yKHZtLCBzdHJ1Y3R1cmUpOwogICAgICAgICBpbnN0
YW5jZS0+ZmluaXNoQ3JlYXRpb24odm0sIGFyZ3VtZW50cyk7CkBAIC01MCwxMSArNTAsMTEgQEAg
cHVibGljOgogCiAgICAgYm9vbCBuZXh0KENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU1ZhbHVlJiB2
YWx1ZSkKICAgICB7Ci0gICAgICAgIGlmIChtX25leHRJbmRleCA+PSBtX2FyZ3VtZW50cy0+bGVu
Z3RoKGNhbGxGcmFtZSkpCisgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9CisgICAgICAgICAgICBt
X2FyZ3VtZW50cy0+Z2V0KGNhbGxGcmFtZSwgY2FsbEZyYW1lLT5wcm9wZXJ0eU5hbWVzKCkubGVu
Z3RoKS50b1VJbnQzMihjYWxsRnJhbWUpOworICAgICAgICBpZiAobV9uZXh0SW5kZXggPj0gbGVu
Z3RoKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB2YWx1ZSA9IG1fYXJndW1l
bnRzLT50cnlHZXRBcmd1bWVudChtX25leHRJbmRleCsrKTsKLSAgICAgICAgaWYgKCF2YWx1ZSkK
LSAgICAgICAgICAgIHZhbHVlID0ganNVbmRlZmluZWQoKTsKKyAgICAgICAgdmFsdWUgPSBtX2Fy
Z3VtZW50cy0+Z2V0SW5kZXgoY2FsbEZyYW1lLCBtX25leHRJbmRleCsrKTsKICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQogCkBAIC02OCwxMiArNjgsMTQgQEAgcHJpdmF0ZToKICAgICB7CiAg
ICAgfQogCi0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIEFyZ3VtZW50cyopOworICAgIHZv
aWQgZmluaXNoQ3JlYXRpb24oVk0mLCBKU09iamVjdCopOwogICAgIAotICAgIFdyaXRlQmFycmll
cjxBcmd1bWVudHM+IG1fYXJndW1lbnRzOworICAgIFdyaXRlQmFycmllcjxKU09iamVjdD4gbV9h
cmd1bWVudHM7CiAgICAgc2l6ZV90IG1fbmV4dEluZGV4OwogfTsKIAorRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBhcmd1bWVudHNGdW5jSXRlcmF0b3IoRXhlY1N0YXRlKik7CisKIH0KIAog
I2VuZGlmIC8vICFkZWZpbmVkKEpTQXJndW1lbnRzSXRlcmF0b3JfaCkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRW52aXJvbm1lbnRSZWNvcmQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRW52aXJvbm1lbnRSZWNvcmQuY3Bw
CShyZXZpc2lvbiAxODA3MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Vu
dmlyb25tZW50UmVjb3JkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAyMDEyLCAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMzUsNCArMzUsMTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNvbnN0IENsYXNzSW5mbyBKU0Vu
dmlyb25tZW50UmVjb3JkOjpzX2luZm8gPSB7ICJFbnZpcm9ubWVudFJlY29yZCIsICZCYXNlOjpz
X2luZm8sIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNFbnZpcm9ubWVudFJlY29yZCkgfTsKIAor
dm9pZCBKU0Vudmlyb25tZW50UmVjb3JkOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgSlNFbnZpcm9ubWVudFJlY29yZCogdGhpc09iamVj
dCA9IGpzQ2FzdDxKU0Vudmlyb25tZW50UmVjb3JkKj4oY2VsbCk7CisgICAgQVNTRVJUX0dDX09C
SkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOworICAgIEJhc2U6OnZpc2l0Q2hpbGRy
ZW4odGhpc09iamVjdCwgdmlzaXRvcik7CisgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXModGhpc09i
amVjdC0+dmFyaWFibGVzKCksIG1fc3ltYm9sVGFibGUtPnNjb3BlU2l6ZSgpKTsKK30KKwogfSAv
LyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Vu
dmlyb25tZW50UmVjb3JkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNFbnZpcm9ubWVudFJlY29yZC5oCShyZXZpc2lvbiAxODA3MjApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Vudmlyb25tZW50UmVjb3JkLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQ2LDExICs0NiwyNiBAQCBjbGFzcyBKU0Vudmlyb25tZW50UmVjb3JkIDogcHVibGlj
IEpTU3ltCiBwdWJsaWM6CiAgICAgdHlwZWRlZiBKU1N5bWJvbFRhYmxlT2JqZWN0IEJhc2U7CiAK
LSAgICBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiByZWdpc3RlcnMoKSB7IHJldHVybiBtX3Jl
Z2lzdGVyczsgfQotICAgIFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4mIHJlZ2lzdGVyQXQoaW50
IGluZGV4KSBjb25zdCB7IHJldHVybiBtX3JlZ2lzdGVyc1tpbmRleF07IH0KKyAgICBXcml0ZUJh
cnJpZXJCYXNlPFVua25vd24+KiB2YXJpYWJsZXMoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGJp
dHdpc2VfY2FzdDxXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+Kj4oYml0d2lzZV9jYXN0PGNoYXIq
Pih0aGlzKSArIG9mZnNldE9mVmFyaWFibGVzKCkpOworICAgIH0KKyAgICAKKyAgICBib29sIGlz
VmFsaWQoU2NvcGVPZmZzZXQgb2Zmc2V0KQorICAgIHsKKyAgICAgICAgcmV0dXJuICEhb2Zmc2V0
ICYmIG9mZnNldC5vZmZzZXQoKSA8IG1fc3ltYm9sVGFibGUtPnNjb3BlU2l6ZSgpOworICAgIH0K
KyAgICAKKyAgICBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+JiB2YXJpYWJsZUF0KFNjb3BlT2Zm
c2V0IG9mZnNldCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc1ZhbGlkKG9mZnNldCkp
OworICAgICAgICByZXR1cm4gdmFyaWFibGVzKClbb2Zmc2V0Lm9mZnNldCgpXTsKKyAgICB9CiAK
LSAgICBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiBjb25zdCAqIGFkZHJlc3NPZlJlZ2lzdGVy
cygpIGNvbnN0IHsgcmV0dXJuICZtX3JlZ2lzdGVyczsgfQotICAgIHN0YXRpYyBzaXplX3Qgb2Zm
c2V0T2ZSZWdpc3RlcnMoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNFbnZpcm9ubWVudFJl
Y29yZCwgbV9yZWdpc3RlcnMpOyB9CisgICAgc3RhdGljIHNpemVfdCBvZmZzZXRPZlZhcmlhYmxl
cygpCisgICAgeworICAgICAgICByZXR1cm4gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mPHNpemVv
ZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pPihzaXplb2YoSlNFbnZpcm9ubWVudFJlY29yZCkpOwor
ICAgIH0KIAogICAgIERFQ0xBUkVfSU5GTzsKIApAQCAtNjAsMTUgKzc1LDM1IEBAIHByb3RlY3Rl
ZDoKICAgICBKU0Vudmlyb25tZW50UmVjb3JkKAogICAgICAgICBWTSYgdm0sCiAgICAgICAgIFN0
cnVjdHVyZSogc3RydWN0dXJlLAotICAgICAgICBSZWdpc3RlciogcmVnaXN0ZXJzLAogICAgICAg
ICBKU1Njb3BlKiBzY29wZSwKICAgICAgICAgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlKQogICAg
ICAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSwgc2NvcGUsIHN5bWJvbFRhYmxlKQotICAgICAgICAs
IG1fcmVnaXN0ZXJzKHJlaW50ZXJwcmV0X2Nhc3Q8V3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPio+
KHJlZ2lzdGVycykpCiAgICAgewogICAgIH0KLQotICAgIFdyaXRlQmFycmllckJhc2U8VW5rbm93
bj4qIG1fcmVnaXN0ZXJzOyAvLyAiciIgaW4gdGhlIHN0YWNrLgorICAgIAorICAgIHN0YXRpYyBz
aXplX3QgYWxsb2NhdGlvblNpemVGb3JTY29wZVNpemUodW5zaWduZWQgc2NvcGVTaXplKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIG9mZnNldE9mVmFyaWFibGVzKCkgKyBzY29wZVNpemUgKiBzaXpl
b2YoV3JpdGVCYXJyaWVyPFVua25vd24+KTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIHNpemVf
dCBhbGxvY2F0aW9uU2l6ZShTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUpCisgICAgeworICAgICAg
ICByZXR1cm4gYWxsb2NhdGlvblNpemVGb3JTY29wZVNpemUoc3ltYm9sVGFibGUtPnNjb3BlU2l6
ZSgpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBmaW5pc2hDcmVhdGlvblVuaW5pdGlhbGl6ZWQo
Vk0mIHZtKQorICAgIHsKKyAgICAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOworICAgIH0K
KyAgICAKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiB2bSkKKyAgICB7CisgICAgICAgIGZp
bmlzaENyZWF0aW9uVW5pbml0aWFsaXplZCh2bSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IG1fc3ltYm9sVGFibGUtPnNjb3BlU2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICAvLyBGaWxs
aW5nIHRoaXMgd2l0aCB1bmRlZmluZWQgaXMgdXNlZnVsIGJlY2F1c2UgdGhhdCdzIHdoYXQgdmFy
aWFibGVzIHN0YXJ0IG91dCBhcy4KKyAgICAgICAgICAgIHZhcmlhYmxlQXQoaSkuc2V0VW5kZWZp
bmVkKCk7CisgICAgICAgIH0KKyAgICB9CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTGV4aWNhbEVudmlyb25tZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xleGljYWxFbnZp
cm9ubWVudC5jcHAJKHJldmlzaW9uIDE4MDcyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTTGV4aWNhbEVudmlyb25tZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDksIDIwMTQgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5LCAyMDE0LCAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtNDAsMjcgKzQwLDE5IEBAIG5hbWVzcGFjZSBKU0MgewogCiBjb25zdCBD
bGFzc0luZm8gSlNMZXhpY2FsRW52aXJvbm1lbnQ6OnNfaW5mbyA9IHsgIkpTTGV4aWNhbEVudmly
b25tZW50IiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU0xleGljYWxF
bnZpcm9ubWVudCkgfTsKIAotdm9pZCBKU0xleGljYWxFbnZpcm9ubWVudDo6dmlzaXRDaGlsZHJl
bihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQotewotICAgIEpTTGV4aWNhbEVu
dmlyb25tZW50KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTTGV4aWNhbEVudmlyb25tZW50Kj4oY2Vs
bCk7Ci0gICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwot
ICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7Ci0KLSAgICBmb3Ig
KGludCBpID0gMDsgaSA8IHRoaXNPYmplY3QtPnN5bWJvbFRhYmxlKCktPmNhcHR1cmVDb3VudCgp
OyArK2kpCi0gICAgICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5zdG9yYWdlKClbaV0p
OwotfQotCiBpbmxpbmUgYm9vbCBKU0xleGljYWxFbnZpcm9ubWVudDo6c3ltYm9sVGFibGVHZXQo
UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQogewogICAgIFN5
bWJvbFRhYmxlRW50cnkgZW50cnkgPSBzeW1ib2xUYWJsZSgpLT5pbmxpbmVHZXQocHJvcGVydHlO
YW1lLnVpZCgpKTsKICAgICBpZiAoZW50cnkuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAorICAgIFNjb3BlT2Zmc2V0IG9mZnNldCA9IGVudHJ5LnNjb3BlT2Zmc2V0KCk7CisKICAg
ICAvLyBEZWZlbmQgYWdhaW5zdCB0aGUgaW5zcGVjdG9yIGFza2luZyBmb3IgYSB2YXIgYWZ0ZXIg
aXQgaGFzIGJlZW4gb3B0aW1pemVkIG91dC4KLSAgICBpZiAoIWlzVmFsaWQoZW50cnkpKQorICAg
IGlmICghaXNWYWxpZChvZmZzZXQpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBzbG90
LnNldFZhbHVlKHRoaXMsIERvbnRFbnVtLCByZWdpc3RlckF0KGVudHJ5LmdldEluZGV4KCkpLmdl
dCgpKTsKKyAgICBzbG90LnNldFZhbHVlKHRoaXMsIERvbnRFbnVtLCB2YXJpYWJsZUF0KG9mZnNl
dCkuZ2V0KCkpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC03MCwxMSArNjIsMTMgQEAgaW5s
aW5lIGJvb2wgSlNMZXhpY2FsRW52aXJvbm1lbnQ6OnN5bWJvbAogICAgIGlmIChlbnRyeS5pc051
bGwoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAgU2NvcGVPZmZzZXQgb2Zmc2V0ID0g
ZW50cnkuc2NvcGVPZmZzZXQoKTsKKwogICAgIC8vIERlZmVuZCBhZ2FpbnN0IHRoZSBpbnNwZWN0
b3IgYXNraW5nIGZvciBhIHZhciBhZnRlciBpdCBoYXMgYmVlbiBvcHRpbWl6ZWQgb3V0LgotICAg
IGlmICghaXNWYWxpZChlbnRyeSkpCisgICAgaWYgKCFpc1ZhbGlkKG9mZnNldCkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcihyZWdpc3RlckF0
KGVudHJ5LmdldEluZGV4KCkpLmdldCgpLCBlbnRyeS5nZXRBdHRyaWJ1dGVzKCkpOworICAgIGRl
c2NyaXB0b3Iuc2V0RGVzY3JpcHRvcih2YXJpYWJsZUF0KG9mZnNldCkuZ2V0KCksIGVudHJ5Lmdl
dEF0dHJpYnV0ZXMoKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTk1LDEyICs4OSwxMyBA
QCBpbmxpbmUgYm9vbCBKU0xleGljYWxFbnZpcm9ubWVudDo6c3ltYm9sCiAgICAgICAgICAgICAg
ICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgU3RyaWN0TW9kZVJlYWRvbmx5UHJvcGVydHlXcml0ZUVy
cm9yKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CisgICAgICAgIFNjb3Bl
T2Zmc2V0IG9mZnNldCA9IGl0ZXItPnZhbHVlLnNjb3BlT2Zmc2V0KCk7CiAgICAgICAgIC8vIERl
ZmVuZCBhZ2FpbnN0IHRoZSBpbnNwZWN0b3IgYXNraW5nIGZvciBhIHZhciBhZnRlciBpdCBoYXMg
YmVlbiBvcHRpbWl6ZWQgb3V0LgotICAgICAgICBpZiAoIWlzVmFsaWQoaXRlci0+dmFsdWUpKQor
ICAgICAgICBpZiAoIWlzVmFsaWQob2Zmc2V0KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAgICAgaWYgKFZhcmlhYmxlV2F0Y2hwb2ludFNldCogc2V0ID0gaXRlci0+dmFsdWUud2F0
Y2hwb2ludFNldCgpKQotICAgICAgICAgICAgc2V0LT5pbnZhbGlkYXRlKFZhcmlhYmxlV3JpdGVG
aXJlRGV0YWlsKHRoaXMsIHByb3BlcnR5TmFtZSkpOyAvLyBEb24ndCBtZXNzIGFyb3VuZCAtIGlm
IHdlIGhhZCBmb3VuZCB0aGlzIHN0YXRpY2FsbHksIHdlIHdvdWxkIGhhdmUgaW52Y2FsaWRhdGVk
IGl0LgotICAgICAgICByZWcgPSAmcmVnaXN0ZXJBdChpdGVyLT52YWx1ZS5nZXRJbmRleCgpKTsK
KyAgICAgICAgICAgIHNldC0+aW52YWxpZGF0ZShWYXJpYWJsZVdyaXRlRmlyZURldGFpbCh0aGlz
LCBwcm9wZXJ0eU5hbWUpKTsgLy8gRG9uJ3QgbWVzcyBhcm91bmQgLSBpZiB3ZSBoYWQgZm91bmQg
dGhpcyBzdGF0aWNhbGx5LCB3ZSB3b3VsZCBoYXZlIGludmFsaWRhdGVkIGl0LgorICAgICAgICBy
ZWcgPSAmdmFyaWFibGVBdChvZmZzZXQpOwogICAgIH0KICAgICByZWctPnNldCh2bSwgdGhpcywg
dmFsdWUpOwogICAgIHJldHVybiB0cnVlOwpAQCAtMTE2LDcgKzExMSw3IEBAIHZvaWQgSlNMZXhp
Y2FsRW52aXJvbm1lbnQ6OmdldE93bk5vbkluZGUKICAgICAgICAgZm9yIChTeW1ib2xUYWJsZTo6
TWFwOjppdGVyYXRvciBpdCA9IHRoaXNPYmplY3QtPnN5bWJvbFRhYmxlKCktPmJlZ2luKGxvY2tl
cik7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICAgICAgaWYgKGl0LT52YWx1ZS5nZXRBdHRy
aWJ1dGVzKCkgJiBEb250RW51bSAmJiAhc2hvdWxkSW5jbHVkZURvbnRFbnVtUHJvcGVydGllcyht
b2RlKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGlmICghdGhpc09i
amVjdC0+aXNWYWxpZChpdC0+dmFsdWUpKQorICAgICAgICAgICAgaWYgKCF0aGlzT2JqZWN0LT5p
c1ZhbGlkKGl0LT52YWx1ZS5zY29wZU9mZnNldCgpKSkKICAgICAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXIoZXhlYywgaXQtPmtl
eS5nZXQoKSkpOwogICAgICAgICB9CkBAIC0xMzcsMTEgKzEzMiwxMyBAQCBpbmxpbmUgYm9vbCBK
U0xleGljYWxFbnZpcm9ubWVudDo6c3ltYm9sCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgICAgIFN5bWJvbFRhYmxlRW50cnkmIGVudHJ5ID0gaXRlci0+dmFsdWU7CiAgICAgICAgIEFT
U0VSVCghZW50cnkuaXNOdWxsKCkpOwotICAgICAgICBpZiAoIWlzVmFsaWQoZW50cnkpKQorICAg
ICAgICAKKyAgICAgICAgU2NvcGVPZmZzZXQgb2Zmc2V0ID0gZW50cnkuc2NvcGVPZmZzZXQoKTsK
KyAgICAgICAgaWYgKCFpc1ZhbGlkKG9mZnNldCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgICAgIAogICAgICAgICBlbnRyeS5zZXRBdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpOwotICAg
ICAgICByZWcgPSAmcmVnaXN0ZXJBdChlbnRyeS5nZXRJbmRleCgpKTsKKyAgICAgICAgcmVnID0g
JnZhcmlhYmxlQXQob2Zmc2V0KTsKICAgICB9CiAgICAgcmVnLT5zZXQodm0sIHRoaXMsIHZhbHVl
KTsKICAgICByZXR1cm4gdHJ1ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTTGV4aWNhbEVudmlyb25tZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNMZXhpY2FsRW52aXJvbm1lbnQuaAkocmV2aXNpb24gMTgwNzIwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMZXhpY2FsRW52aXJvbm1lbnQuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIw
MDksIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDA4LCAyMDA5LCAyMDEzLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MSwzMyArNDEsMjcgQEAg
Y2xhc3MgUmVnaXN0ZXI7CiAgICAgCiBjbGFzcyBKU0xleGljYWxFbnZpcm9ubWVudCA6IHB1Ymxp
YyBKU0Vudmlyb25tZW50UmVjb3JkIHsKIHByaXZhdGU6Ci0gICAgSlNMZXhpY2FsRW52aXJvbm1l
bnQoVk0mLCBDYWxsRnJhbWUqLCBSZWdpc3RlciosIEpTU2NvcGUqLCBDb2RlQmxvY2sqKTsKKyAg
ICBKU0xleGljYWxFbnZpcm9ubWVudChWTSYsIFN0cnVjdHVyZSosIEpTU2NvcGUqLCBTeW1ib2xU
YWJsZSopOwogICAgIAogcHVibGljOgogICAgIHR5cGVkZWYgSlNFbnZpcm9ubWVudFJlY29yZCBC
YXNlOwogCi0gICAgc3RhdGljIEpTTGV4aWNhbEVudmlyb25tZW50KiBjcmVhdGUoVk0mIHZtLCBD
YWxsRnJhbWUqIGNhbGxGcmFtZSwgUmVnaXN0ZXIqIHJlZ2lzdGVycywgSlNTY29wZSogY3VycmVu
dFNjb3BlLCBDb2RlQmxvY2sqIGNvZGVCbG9jaykKKyAgICBzdGF0aWMgSlNMZXhpY2FsRW52aXJv
bm1lbnQqIGNyZWF0ZSgKKyAgICAgICAgVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU1Njb3BlKiBjdXJyZW50U2NvcGUsIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSkKICAg
ICB7Ci0gICAgICAgIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSA9IGNvZGVCbG9jay0+c3ltYm9s
VGFibGUoKTsKLSAgICAgICAgQVNTRVJUKGNvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlv
bkNvZGUpOwotICAgICAgICBKU0xleGljYWxFbnZpcm9ubWVudCogbGV4aWNhbEVudmlyb25tZW50
ID0gbmV3ICgKLSAgICAgICAgICAgIE5vdE51bGwsCi0gICAgICAgICAgICBhbGxvY2F0ZUNlbGw8
SlNMZXhpY2FsRW52aXJvbm1lbnQ+KAotICAgICAgICAgICAgICAgIHZtLmhlYXAsCi0gICAgICAg
ICAgICAgICAgYWxsb2NhdGlvblNpemUoc3ltYm9sVGFibGUpCi0gICAgICAgICAgICApCi0gICAg
ICAgICkgSlNMZXhpY2FsRW52aXJvbm1lbnQodm0sIGNhbGxGcmFtZSwgcmVnaXN0ZXJzLCBjdXJy
ZW50U2NvcGUsIGNvZGVCbG9jayk7Ci0gICAgICAgIGxleGljYWxFbnZpcm9ubWVudC0+ZmluaXNo
Q3JlYXRpb24odm0pOwotICAgICAgICByZXR1cm4gbGV4aWNhbEVudmlyb25tZW50OworICAgICAg
ICBKU0xleGljYWxFbnZpcm9ubWVudCogcmVzdWx0ID0KKyAgICAgICAgICAgIG5ldyAoTm90TnVs
bCwgYWxsb2NhdGlvblNpemUoc3ltYm9sVGFibGUpKQorICAgICAgICAgICAgSlNMZXhpY2FsRW52
aXJvbm1lbnQodm0sIGdsb2JhbE9iamVjdC0+YWN0aXZhdGlvblN0cnVjdHVyZSgpLCBjdXJyZW50
U2NvcGUsIHN5bWJvbFRhYmxlKTsKKyAgICAgICAgcmVzdWx0LT5maW5pc2hDcmVhdGlvbih2bSk7
CiAgICAgfQotICAgICAgICAKKyAgICAKICAgICBzdGF0aWMgSlNMZXhpY2FsRW52aXJvbm1lbnQq
IGNyZWF0ZShWTSYgdm0sIENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU1Njb3BlKiBjdXJyZW50U2Nv
cGUsIENvZGVCbG9jayogY29kZUJsb2NrKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZSh2
bSwgY2FsbEZyYW1lLCBjYWxsRnJhbWUtPnJlZ2lzdGVycygpICsgY29kZUJsb2NrLT5mcmFtZVBv
aW50ZXJPZmZzZXRUb0dldEFjdGl2YXRpb25SZWdpc3RlcnMoKSwgY3VycmVudFNjb3BlLCBjb2Rl
QmxvY2spOworICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gY2FsbEZyYW1l
LT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7CisgICAgICAgIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJs
ZSA9IGNvZGVCbG9jay0+c3ltYm9sVGFibGUoKTsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZSh2bSwg
Z2xvYmFsT2JqZWN0LCBjdXJyZW50U2NvcGUsIHN5bWJvbHRhYmxlKTsKICAgICB9Ci0KLSAgICBz
dGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Ci0KKyAgICAg
ICAgCiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiwgRXhlY1N0
YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgdm9pZCBnZXRP
d25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5h
bWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CiAKQEAgLTgxLDEyICs3NSw2IEBAIHB1YmxpYzoK
IAogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QpIHsgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9i
YWxPYmplY3QsIGpzTnVsbCgpLCBUeXBlSW5mbyhBY3RpdmF0aW9uT2JqZWN0VHlwZSwgU3RydWN0
dXJlRmxhZ3MpLCBpbmZvKCkpOyB9CiAKLSAgICBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+JiBy
ZWdpc3RlckF0KGludCkgY29uc3Q7Ci0gICAgYm9vbCBpc1ZhbGlkSW5kZXgoaW50KSBjb25zdDsK
LSAgICBib29sIGlzVmFsaWQoY29uc3QgU3ltYm9sVGFibGVFbnRyeSYpIGNvbnN0OwotICAgIGlu
dCByZWdpc3RlcnNPZmZzZXQoKTsKLSAgICBzdGF0aWMgaW50IHJlZ2lzdGVyc09mZnNldChTeW1i
b2xUYWJsZSopOwotCiBwcm90ZWN0ZWQ6CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVj
dHVyZUZsYWdzID0gT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0UHJv
cGVydHlOYW1lcyB8IEJhc2U6OlN0cnVjdHVyZUZsYWdzOwogCkBAIC05NiwzMiArODQsMTMgQEAg
cHJpdmF0ZToKICAgICBib29sIHN5bWJvbFRhYmxlR2V0KFByb3BlcnR5TmFtZSwgUHJvcGVydHlT
bG90JiwgYm9vbCYgc2xvdElzV3JpdGVhYmxlKTsKICAgICBib29sIHN5bWJvbFRhYmxlUHV0KEV4
ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7CiAgICAg
Ym9vbCBzeW1ib2xUYWJsZVB1dFdpdGhBdHRyaWJ1dGVzKFZNJiwgUHJvcGVydHlOYW1lLCBKU1Zh
bHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKTsKLQotICAgIHN0YXRpYyBzaXplX3QgYWxsb2NhdGlv
blNpemUoU3ltYm9sVGFibGUqKTsKLSAgICBzdGF0aWMgc2l6ZV90IHN0b3JhZ2VPZmZzZXQoKTsK
LQotICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogc3RvcmFnZSgpOyAvLyBjYXB0dXJlQ291bnQo
KSBudW1iZXIgb2YgcmVnaXN0ZXJzLgogfTsKIAotaW5saW5lIEpTTGV4aWNhbEVudmlyb25tZW50
OjpKU0xleGljYWxFbnZpcm9ubWVudChWTSYgdm0sIENhbGxGcmFtZSogY2FsbEZyYW1lLCBSZWdp
c3RlciogcmVnaXN0ZXJzLCBKU1Njb3BlKiBjdXJyZW50U2NvcGUsIENvZGVCbG9jayogY29kZUJs
b2NrKQotICAgIDogQmFzZSgKLSAgICAgICAgdm0sCi0gICAgICAgIGNhbGxGcmFtZS0+bGV4aWNh
bEdsb2JhbE9iamVjdCgpLT5hY3RpdmF0aW9uU3RydWN0dXJlKCksCi0gICAgICAgIHJlZ2lzdGVy
cywKLSAgICAgICAgY3VycmVudFNjb3BlLAotICAgICAgICBjb2RlQmxvY2stPnN5bWJvbFRhYmxl
KCkpCitpbmxpbmUgSlNMZXhpY2FsRW52aXJvbm1lbnQ6OkpTTGV4aWNhbEVudmlyb25tZW50KFZN
JiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTU2NvcGUqIGN1cnJlbnRTY29wZSwgU3ltYm9s
VGFibGUqIHN5bWJvbFRhYmxlKQorICAgIDogQmFzZSh2bSwgc3RydWN0dXJlLCBjdXJyZW50U2Nv
cGUsIHN5bWJvbFRhYmxlKQogewotICAgIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSA9IGNvZGVC
bG9jay0+c3ltYm9sVGFibGUoKTsKLSAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHN0b3JhZ2Ug
PSB0aGlzLT5zdG9yYWdlKCk7Ci0gICAgc2l6ZV90IGNhcHR1cmVDb3VudCA9IHN5bWJvbFRhYmxl
LT5jYXB0dXJlQ291bnQoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNhcHR1cmVDb3Vu
dDsgKytpKQotICAgICAgICBuZXcgKE5vdE51bGwsICZzdG9yYWdlW2ldKSBXcml0ZUJhcnJpZXI8
VW5rbm93bj4oVW5kZWZpbmVkV3JpdGVCYXJyaWVyVGFnKTsKLSAgICBtX3JlZ2lzdGVycyA9IHJl
aW50ZXJwcmV0X2Nhc3RfcHRyPFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qPigKLSAgICAgICAg
cmVpbnRlcnByZXRfY2FzdDxjaGFyKj4odGhpcykgKyByZWdpc3RlcnNPZmZzZXQoc3ltYm9sVGFi
bGUpKTsKIH0KIAotSlNMZXhpY2FsRW52aXJvbm1lbnQqIGFzQWN0aXZhdGlvbihKU1ZhbHVlKTsK
LQogaW5saW5lIEpTTGV4aWNhbEVudmlyb25tZW50KiBhc0FjdGl2YXRpb24oSlNWYWx1ZSB2YWx1
ZSkKIHsKICAgICBBU1NFUlQoYXNPYmplY3QodmFsdWUpLT5pbmhlcml0cyhKU0xleGljYWxFbnZp
cm9ubWVudDo6aW5mbygpKSk7CkBAIC0xMzMsNDkgKzEwMiw2IEBAIEFMV0FZU19JTkxJTkUgSlNM
ZXhpY2FsRW52aXJvbm1lbnQqIFJlZ2kKICAgICByZXR1cm4gYXNBY3RpdmF0aW9uKGpzVmFsdWUo
KSk7CiB9CiAKLWlubGluZSBpbnQgSlNMZXhpY2FsRW52aXJvbm1lbnQ6OnJlZ2lzdGVyc09mZnNl
dChTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUpCi17Ci0gICAgcmV0dXJuIHN0b3JhZ2VPZmZzZXQo
KSArICgoc3ltYm9sVGFibGUtPmNhcHR1cmVDb3VudCgpIC0gc3ltYm9sVGFibGUtPmNhcHR1cmVT
dGFydCgpICAtIDEpICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpOwotfQotCi1pbmxp
bmUgc2l6ZV90IEpTTGV4aWNhbEVudmlyb25tZW50OjpzdG9yYWdlT2Zmc2V0KCkKLXsKLSAgICBy
ZXR1cm4gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mPHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93
bj4pPihzaXplb2YoSlNMZXhpY2FsRW52aXJvbm1lbnQpKTsKLX0KLQotaW5saW5lIFdyaXRlQmFy
cmllcjxVbmtub3duPiogSlNMZXhpY2FsRW52aXJvbm1lbnQ6OnN0b3JhZ2UoKQotewotICAgIHJl
dHVybiByZWludGVycHJldF9jYXN0X3B0cjxXcml0ZUJhcnJpZXI8VW5rbm93bj4qPigKLSAgICAg
ICAgcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4odGhpcykgKyBzdG9yYWdlT2Zmc2V0KCkpOwotfQot
Ci1pbmxpbmUgc2l6ZV90IEpTTGV4aWNhbEVudmlyb25tZW50OjphbGxvY2F0aW9uU2l6ZShTeW1i
b2xUYWJsZSogc3ltYm9sVGFibGUpCi17Ci0gICAgc2l6ZV90IG9iamVjdFNpemVJbkJ5dGVzID0g
V1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mPHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pPihz
aXplb2YoSlNMZXhpY2FsRW52aXJvbm1lbnQpKTsKLSAgICBzaXplX3Qgc3RvcmFnZVNpemVJbkJ5
dGVzID0gc3ltYm9sVGFibGUtPmNhcHR1cmVDb3VudCgpICogc2l6ZW9mKFdyaXRlQmFycmllcjxV
bmtub3duPik7Ci0gICAgcmV0dXJuIG9iamVjdFNpemVJbkJ5dGVzICsgc3RvcmFnZVNpemVJbkJ5
dGVzOwotfQotCi1pbmxpbmUgYm9vbCBKU0xleGljYWxFbnZpcm9ubWVudDo6aXNWYWxpZEluZGV4
KGludCBpbmRleCkgY29uc3QKLXsKLSAgICBpZiAoaW5kZXggPiBzeW1ib2xUYWJsZSgpLT5jYXB0
dXJlU3RhcnQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChpbmRleCA8PSBzeW1i
b2xUYWJsZSgpLT5jYXB0dXJlRW5kKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1
cm4gdHJ1ZTsKLX0KLQotaW5saW5lIGJvb2wgSlNMZXhpY2FsRW52aXJvbm1lbnQ6OmlzVmFsaWQo
Y29uc3QgU3ltYm9sVGFibGVFbnRyeSYgZW50cnkpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGlzVmFs
aWRJbmRleChlbnRyeS5nZXRJbmRleCgpKTsKLX0KLQotaW5saW5lIFdyaXRlQmFycmllckJhc2U8
VW5rbm93bj4mIEpTTGV4aWNhbEVudmlyb25tZW50OjpyZWdpc3RlckF0KGludCBpbmRleCkgY29u
c3QKLXsKLSAgICBBU1NFUlQoaXNWYWxpZEluZGV4KGluZGV4KSk7Ci0gICAgcmV0dXJuIEJhc2U6
OnJlZ2lzdGVyQXQoaW5kZXgpOwotfQotCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8v
IEpTTGV4aWNhbEVudmlyb25tZW50X2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTTmFtZVNjb3BlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU05hbWVTY29wZS5jcHAJKHJldmlzaW9uIDE4MDcyMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTTmFtZVNjb3BlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcs
MTQgKzQ3LDYgQEAgSlNOYW1lU2NvcGUqIEpTTmFtZVNjb3BlOjpjcmVhdGUoVk0mIHZtLAogICAg
IHJldHVybiBudWxscHRyOwogfQogCi12b2lkIEpTTmFtZVNjb3BlOjp2aXNpdENoaWxkcmVuKEpT
Q2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi17Ci0gICAgSlNOYW1lU2NvcGUqIHRo
aXNPYmplY3QgPSBqc0Nhc3Q8SlNOYW1lU2NvcGUqPihjZWxsKTsKLSAgICBBU1NFUlRfR0NfT0JK
RUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7Ci0gICAgQmFzZTo6dmlzaXRDaGlsZHJl
bih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKLSAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+
bV9yZWdpc3RlclN0b3JlKTsKLX0KLQogSlNWYWx1ZSBKU05hbWVTY29wZTo6dG9UaGlzKEpTQ2Vs
bCosIEV4ZWNTdGF0ZSogZXhlYywgRUNNQU1vZGUgZWNtYU1vZGUpCiB7CiAgICAgaWYgKGVjbWFN
b2RlID09IFN0cmljdE1vZGUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U05hbWVTY29wZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTTmFtZVNjb3BlLmgJKHJldmlzaW9uIDE4MDcyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTTmFtZVNjb3BlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDM4ICs0NCwzNyBA
QCBwdWJsaWM6CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KICAgICBzdGF0aWMgVCogY3JlYXRl
KFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNTY29wZSogY3VycmVudFNj
b3BlLCBTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUsIEpTVmFsdWUgdmFsdWUpCiAgICAgewotICAg
ICAgICBUKiBzY29wZU9iamVjdCA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFQ+KHZtLmhl
YXApKSBUKHZtLCBnbG9iYWxPYmplY3QsIGN1cnJlbnRTY29wZSwgc3ltYm9sVGFibGUpOworICAg
ICAgICBUKiBzY29wZU9iamVjdCA9IG5ldyAoCisgICAgICAgICAgICBOb3ROdWxsLCBhbGxvY2F0
ZUNlbGw8VD4odm0uaGVhcCwgYWxsb2NhdGlvblNpemVGb3JTY29wZVNpemUoMSkpCisgICAgICAg
ICAgICBUKHZtLCBnbG9iYWxPYmplY3QsIGN1cnJlbnRTY29wZSwgc3ltYm9sVGFibGUpOwogICAg
ICAgICBzY29wZU9iamVjdC0+ZmluaXNoQ3JlYXRpb24odm0sIHZhbHVlKTsKICAgICAgICAgcmV0
dXJuIHNjb3BlT2JqZWN0OwogICAgIH0KICAgICAKICAgICBzdGF0aWMgSlNOYW1lU2NvcGUqIGNy
ZWF0ZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNTY29wZSogY3VycmVudFNjb3BlLCBTeW1ib2xU
YWJsZSosIEpTVmFsdWUsIFR5cGUpOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihK
U0NlbGwqLCBTbG90VmlzaXRvciYpOwogICAgIHN0YXRpYyBKU1ZhbHVlIHRvVGhpcyhKU0NlbGwq
LCBFeGVjU3RhdGUqLCBFQ01BTW9kZSk7CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlT
bG90KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsK
ICAgICBzdGF0aWMgdm9pZCBwdXQoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBK
U1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKIAogICAgIERFQ0xBUkVfSU5GTzsKIAotICAgIEpT
VmFsdWUgdmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3JlZ2lzdGVyU3RvcmUuZ2V0KCk7IH0KKyAg
ICBKU1ZhbHVlIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gdmFyaWFibGVBdCgwKS5nZXQoKTsgfQog
CiBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYgdm0sIEpTVmFsdWUgdmFs
dWUpCiAgICAgewotICAgICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7Ci0gICAgICAgIG1f
cmVnaXN0ZXJTdG9yZS5zZXQodm0sIHRoaXMsIHZhbHVlKTsKKyAgICAgICAgQmFzZTo6ZmluaXNo
Q3JlYXRpb25VbmluaXRpYWxpemVkKHZtKTsKKyAgICAgICAgdmFyaWFibGVBdCgwKS5zZXQodm0s
IHRoaXMsIHZhbHVlKTsKICAgICB9CiAKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0
dXJlRmxhZ3MgPSBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBCYXNlOjpTdHJ1Y3R1cmVG
bGFnczsKIAogICAgIEpTTmFtZVNjb3BlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpT
U2NvcGUqIG5leHQsIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSkKLSAgICAgICAgOiBCYXNlKHZt
LCBzdHJ1Y3R1cmUsIHJlaW50ZXJwcmV0X2Nhc3Q8UmVnaXN0ZXIqPigmbV9yZWdpc3RlclN0b3Jl
ICsgMSksIG5leHQsIHN5bWJvbFRhYmxlKQorICAgICAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSwg
bmV4dCwgc3ltYm9sVGFibGUpCiAgICAgeworICAgICAgICBBU1NFUlQoc3ltYm9sVGFibGUtPnNj
b3BlU2l6ZSgpID09IDEpOwogICAgIH0KLQotcHJpdmF0ZToKLSAgICBXcml0ZUJhcnJpZXI8VW5r
bm93bj4gbV9yZWdpc3RlclN0b3JlOwogfTsKIAogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5j
cHAJKHJldmlzaW9uIDE4MDcyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
U2VnbWVudGVkVmFyaWFibGVPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMsIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0z
MywzMiArMzMsMzAgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWludCBKU1NlZ21lbnRlZFZhcmlh
YmxlT2JqZWN0OjpmaW5kUmVnaXN0ZXJJbmRleCh2b2lkKiByZWdpc3RlckFkZHJlc3MpCitTY29w
ZU9mZnNldCBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0OjpmaW5kUmVnaXN0ZXJJbmRleCh2b2lk
KiByZWdpc3RlckFkZHJlc3MpCiB7CiAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9s
b2NrKTsKICAgICAKLSAgICBmb3IgKGludCBpID0gbV9yZWdpc3RlcnMuc2l6ZSgpOyBpLS07KSB7
CisgICAgZm9yICh1bnNpZ25lZCBpID0gbV9yZWdpc3RlcnMuc2l6ZSgpOyBpLS07KSB7CiAgICAg
ICAgIGlmICgmbV9yZWdpc3RlcnNbaV0gIT0gcmVnaXN0ZXJBZGRyZXNzKQogICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgIHJldHVybiBpOworICAgICAgICByZXR1cm4gU2NvcGVPZmZzZXQo
aSk7CiAgICAgfQogICAgIENSQVNIKCk7Ci0gICAgcmV0dXJuIC0xOworICAgIHJldHVybiBTY29w
ZU9mZnNldCgpOwogfQogCi1pbnQgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdDo6YWRkUmVnaXN0
ZXJzKGludCBudW1iZXJPZlJlZ2lzdGVyc1RvQWRkKQorU2NvcGVPZmZzZXQgSlNTZWdtZW50ZWRW
YXJpYWJsZU9iamVjdDo6YWRkUmVnaXN0ZXJzKHVuc2lnbmVkIG51bWJlck9mUmVnaXN0ZXJzVG9B
ZGQpCiB7CiAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsKICAgICAKLSAg
ICBBU1NFUlQobnVtYmVyT2ZSZWdpc3RlcnNUb0FkZCA+PSAwKTsKLSAgICAKICAgICBzaXplX3Qg
b2xkU2l6ZSA9IG1fcmVnaXN0ZXJzLnNpemUoKTsKICAgICBtX3JlZ2lzdGVycy5ncm93KG9sZFNp
emUgKyBudW1iZXJPZlJlZ2lzdGVyc1RvQWRkKTsKICAgICAKICAgICBmb3IgKHNpemVfdCBpID0g
bnVtYmVyT2ZSZWdpc3RlcnNUb0FkZDsgaS0tOykKICAgICAgICAgbV9yZWdpc3RlcnNbb2xkU2l6
ZSArIGldLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoanNVbmRlZmluZWQoKSk7CiAgICAgCi0gICAg
cmV0dXJuIHN0YXRpY19jYXN0PGludD4ob2xkU2l6ZSk7CisgICAgcmV0dXJuIFNjb3BlT2Zmc2V0
KG9sZFNpemUpOwogfQogCiB2b2lkIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3Q6OnZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJp
YWJsZU9iamVjdC5oCShyZXZpc2lvbiAxODA3MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTU3
LDI0ICs1NywyMyBAQCBjbGFzcyBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0IDogcHVibGljCiBw
dWJsaWM6CiAgICAgdHlwZWRlZiBKU1N5bWJvbFRhYmxlT2JqZWN0IEJhc2U7CiAKLSAgICBXcml0
ZUJhcnJpZXI8VW5rbm93bj4mIHJlZ2lzdGVyQXQoaW50IGluZGV4KSB7IHJldHVybiBtX3JlZ2lz
dGVyc1tpbmRleF07IH0KKyAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHZhcmlhYmxlQXQoU2Nv
cGVPZmZzZXQgb2Zmc2V0KSB7IHJldHVybiBtX3ZhcmlhYmxlc1tvZmZzZXQub2Zmc2V0KCldOyB9
CiAgICAgCiAgICAgLy8gVGhpcyBpcyBhIHNsb3cgbWV0aG9kIGNhbGwsIHdoaWNoIHNlYXJjaGVz
IHRoZSByZWdpc3RlciBiYW5rIHRvIGZpbmQgdGhlIGluZGV4CiAgICAgLy8gZ2l2ZW4gYSBwb2lu
dGVyLiBJdCB3aWxsIENSQVNIKCkgaWYgaXQgZG9lcyBub3QgZmluZCB0aGUgcmVnaXN0ZXIuIE9u
bHkgdXNlIHRoaXMKICAgICAvLyBpbiBkZWJ1ZyBjb2RlIChsaWtlIGJ5dGVjb2RlIGR1bXBpbmcp
LgotICAgIEpTX0VYUE9SVF9QUklWQVRFIGludCBmaW5kUmVnaXN0ZXJJbmRleCh2b2lkKik7Cisg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgU2NvcGVPZmZzZXQgZmluZFJlZ2lzdGVySW5kZXgodm9pZCop
OwogICAgIAotICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogYXNzZXJ0UmVnaXN0ZXJJc0luVGhp
c09iamVjdChXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHJlZ2lzdGVyUG9pbnRlcikKKyAgICBXcml0
ZUJhcnJpZXI8VW5rbm93bj4qIGFzc2VydFZhcmlhYmxlSXNJblRoaXNPYmplY3QoV3JpdGVCYXJy
aWVyPFVua25vd24+KiB2YXJpYWJsZVBvaW50ZXIpCiAgICAgewotI2lmICFBU1NFUlRfRElTQUJM
RUQKLSAgICAgICAgZmluZFJlZ2lzdGVySW5kZXgocmVnaXN0ZXJQb2ludGVyKTsKLSNlbmRpZgor
ICAgICAgICBpZiAoIUFTU0VSVF9ESVNBQkxFRCkKKyAgICAgICAgICAgIGZpbmRSZWdpc3Rlcklu
ZGV4KHJlZ2lzdGVyUG9pbnRlcik7CiAgICAgICAgIHJldHVybiByZWdpc3RlclBvaW50ZXI7CiAg
ICAgfQogICAgIAogICAgIC8vIEFkZHMgbnVtYmVyT2ZSZWdpc3RlcnNUb0FkZCByZWdpc3RlcnMs
IGluaXRpYWxpemVzIHRoZW0gdG8gVW5kZWZpbmVkLCBhbmQgcmV0dXJucwogICAgIC8vIHRoZSBp
bmRleCBvZiB0aGUgZmlyc3Qgb25lIGFkZGVkLgotICAgIEpTX0VYUE9SVF9QUklWQVRFIGludCBh
ZGRSZWdpc3RlcnMoaW50IG51bWJlck9mUmVnaXN0ZXJzVG9BZGQpOworICAgIEpTX0VYUE9SVF9Q
UklWQVRFIFNjb3BlT2Zmc2V0IGFkZFJlZ2lzdGVycyh1bnNpZ25lZCBudW1iZXJPZlJlZ2lzdGVy
c1RvQWRkKTsKICAgICAKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCB2aXNpdENo
aWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmgJKHJldmlzaW9uIDE4
MDcyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmpl
Y3QuaAkod29ya2luZyBjb3B5KQpAQCAtNzgsNyArNzgsNyBAQCBpbmxpbmUgYm9vbCBzeW1ib2xU
YWJsZUdldCgKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIFN5bWJvbFRhYmxlRW50cnk6OkZh
c3QgZW50cnkgPSBpdGVyLT52YWx1ZTsKICAgICBBU1NFUlQoIWVudHJ5LmlzTnVsbCgpKTsKLSAg
ICBzbG90LnNldFZhbHVlKG9iamVjdCwgZW50cnkuZ2V0QXR0cmlidXRlcygpIHwgRG9udERlbGV0
ZSwgb2JqZWN0LT5yZWdpc3RlckF0KGVudHJ5LmdldEluZGV4KCkpLmdldCgpKTsKKyAgICBzbG90
LnNldFZhbHVlKG9iamVjdCwgZW50cnkuZ2V0QXR0cmlidXRlcygpIHwgRG9udERlbGV0ZSwgb2Jq
ZWN0LT52YXJpYWJsZUF0KGVudHJ5LnNjb3BlT2Zmc2V0KCkpLmdldCgpKTsKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIApAQCAtOTQsNyArOTQsNyBAQCBpbmxpbmUgYm9vbCBzeW1ib2xUYWJsZUdldCgK
ICAgICBTeW1ib2xUYWJsZUVudHJ5OjpGYXN0IGVudHJ5ID0gaXRlci0+dmFsdWU7CiAgICAgQVNT
RVJUKCFlbnRyeS5pc051bGwoKSk7CiAgICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKAotICAg
ICAgICBvYmplY3QtPnJlZ2lzdGVyQXQoZW50cnkuZ2V0SW5kZXgoKSkuZ2V0KCksIGVudHJ5Lmdl
dEF0dHJpYnV0ZXMoKSB8IERvbnREZWxldGUpOworICAgICAgICBvYmplY3QtPnZhcmlhYmxlQXQo
ZW50cnkuc2NvcGVPZmZzZXQoKSkuZ2V0KCksIGVudHJ5LmdldEF0dHJpYnV0ZXMoKSB8IERvbnRE
ZWxldGUpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0xMTAsNyArMTEwLDcgQEAgaW5saW5l
IGJvb2wgc3ltYm9sVGFibGVHZXQoCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBTeW1ib2xU
YWJsZUVudHJ5OjpGYXN0IGVudHJ5ID0gaXRlci0+dmFsdWU7CiAgICAgQVNTRVJUKCFlbnRyeS5p
c051bGwoKSk7Ci0gICAgc2xvdC5zZXRWYWx1ZShvYmplY3QsIGVudHJ5LmdldEF0dHJpYnV0ZXMo
KSB8IERvbnREZWxldGUsIG9iamVjdC0+cmVnaXN0ZXJBdChlbnRyeS5nZXRJbmRleCgpKS5nZXQo
KSk7CisgICAgc2xvdC5zZXRWYWx1ZShvYmplY3QsIGVudHJ5LmdldEF0dHJpYnV0ZXMoKSB8IERv
bnREZWxldGUsIG9iamVjdC0+dmFyaWFibGVBdChlbnRyeS5zY29wZU9mZnNldCgpKS5nZXQoKSk7
CiAgICAgc2xvdElzV3JpdGVhYmxlID0gIWVudHJ5LmlzUmVhZE9ubHkoKTsKICAgICByZXR1cm4g
dHJ1ZTsKIH0KQEAgLTE0NSw3ICsxNDUsNyBAQCBpbmxpbmUgYm9vbCBzeW1ib2xUYWJsZVB1dCgK
ICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
MzQ2MDEKICAgICAgICAgICAgIHNldC0+bm90aWZ5V3JpdGUodm0sIHZhbHVlLCBvYmplY3QsIHBy
b3BlcnR5TmFtZSk7CiAgICAgICAgIH0KLSAgICAgICAgcmVnID0gJm9iamVjdC0+cmVnaXN0ZXJB
dChmYXN0RW50cnkuZ2V0SW5kZXgoKSk7CisgICAgICAgIHJlZyA9ICZvYmplY3QtPnZhcmlhYmxl
QXQoZmFzdEVudHJ5LnNjb3BlT2Zmc2V0KCkpOwogICAgIH0KICAgICAvLyBJJ2QgcHJlZmVyIHdl
IG5vdCBob2xkIGxvY2sgd2hpbGUgZXhlY3V0aW5nIGJhcnJpZXJzLCBzaW5jZSBJIHByZWZlciB0
byByZXNlcnZlCiAgICAgLy8gdGhlIHJpZ2h0IGZvciBiYXJyaWVycyB0byBiZSBhYmxlIHRvIHRy
aWdnZXIgR0MuIEFuZCBJIGRvbid0IHdhbnQgdG8gaG9sZCBWTQpAQCAtMTczLDcgKzE3Myw3IEBA
IGlubGluZSBib29sIHN5bWJvbFRhYmxlUHV0V2l0aEF0dHJpYnV0ZXMKICAgICAgICAgaWYgKFZh
cmlhYmxlV2F0Y2hwb2ludFNldCogc2V0ID0gZW50cnkud2F0Y2hwb2ludFNldCgpKQogICAgICAg
ICAgICAgc2V0LT5ub3RpZnlXcml0ZSh2bSwgdmFsdWUsIG9iamVjdCwgcHJvcGVydHlOYW1lKTsK
ICAgICAgICAgZW50cnkuc2V0QXR0cmlidXRlcyhhdHRyaWJ1dGVzKTsKLSAgICAgICAgcmVnID0g
Jm9iamVjdC0+cmVnaXN0ZXJBdChlbnRyeS5nZXRJbmRleCgpKTsKKyAgICAgICAgcmVnID0gJm9i
amVjdC0+dmFyaWFibGVBdChlbnRyeS5zY29wZU9mZnNldCgpKTsKICAgICB9CiAgICAgcmVnLT5z
ZXQodm0sIG9iamVjdCwgdmFsdWUpOwogICAgIHJldHVybiB0cnVlOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlLmgJKHJldmlzaW9uIDE4MDcyMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01OCw3ICs1
OCw4IEBAIGVudW0gSlNUeXBlIDogdWludDhfdCB7CiAgICAgUHVyZUZvcndhcmRpbmdQcm94eVR5
cGUsCiAgICAgSW1wdXJlUHJveHlUeXBlLAogICAgIFdpdGhTY29wZVR5cGUsCi0gICAgQXJndW1l
bnRzVHlwZSwKKyAgICBEaXJlY3RBcmd1bWVudHNUeXBlLAorICAgIFNjb3BlZEFyZ3VtZW50c1R5
cGUsCiAKICAgICBJbnQ4QXJyYXlUeXBlLAogICAgIEludDE2QXJyYXlUeXBlLApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3V0T2ZCYW5kQXJndW1lbnRzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PdXRPZkJhbmRBcmd1bWVudHMu
Y3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3V0T2ZC
YW5kQXJndW1lbnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIxMyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiT3V0T2ZCYW5kQXJndW1lbnRzLmgiCisKKyNpbmNsdWRlICJKU0FyZ3Vt
ZW50c0l0ZXJhdG9yLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlND
IHsKKworU1RBVElDX0FTU0VSVF9JU19UUklWSUFMTFlfREVTVFJVQ1RJQkxFKE91dE9mQmFuZEFy
Z3VtZW50cyk7CisKK2NvbnN0IENsYXNzSW5mbyBPdXRPZkJhbmRBcmd1bWVudHM6OnNfaW5mbyA9
IHsgIkFyZ3VtZW50cyIsICZCYXNlOjpzX2luZm8sIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoT3V0
T2ZCYW5kQXJndW1lbnRzKSB9OworCitPdXRPZkJhbmRBcmd1bWVudHM6Ok91dE9mQmFuZEFyZ3Vt
ZW50cyhWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIDogQmFzZSh2bSwgc3RydWN0
dXJlLCBudWxscHRyKQorICAgICwgbV9zcGVjaWFsc01hdGVyaWFsaXplZChmYWxzZSkKK3sKK30K
KworT3V0T2ZCYW5kQXJndW1lbnRzKiBPdXRPZkJhbmRBcmd1bWVudHM6OmNyZWF0ZUVtcHR5KAor
ICAgIFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNGdW5jdGlvbiogY2Fs
bGVlKQoreworICAgIE91dE9mQmFuZEFyZ3VtZW50cyogcmVzdWx0ID0gbmV3IChOb3ROdWxsLCBh
bGxvY2F0ZUNlbGw8T3V0T2ZCYW5kQXJndW1lbnRzPih2bS5oZWFwKSkKKyAgICAgICAgT3V0T2ZC
YW5kQXJndW1lbnRzKHZtLCBnbG9iYWxPYmplY3QtPm91dE9mQmFuZEFyZ3VtZW50c1N0cnVjdHVy
ZSgpKTsKKyAgICByZXN1bHQtPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICByZXN1bHQtPm1fY2Fs
bGVlLnNldCh2bSwgdGhpcywgY2FsbGVlKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitPdXRP
ZkJhbmRBcmd1bWVudHMqIE91dE9mQmFuZEFyZ3VtZW50czo6Y3JlYXRlRW1wdHkoRXhlY1N0YXRl
KiBleGVjLCBKU0Z1bmN0aW9uKiBjYWxsZWUpCit7CisgICAgLy8gTkIuIFNvbWUgY2xpZW50cyBt
aWdodCBleHBlY3QgdGhhdCB0aGUgZ2xvYmFsIG9iamVjdCBvZiBvZiB0aGlzIG9iamVjdCBpcyB0
aGUgZ2xvYmFsIG9iamVjdAorICAgIC8vIG9mIHRoZSBjYWxsZWUuIFdlIGRvbid0IGRvIHRoaXMg
Zm9yIG5vdywgYnV0IG1heWJlIHdlIHNob3VsZC4KKyAgICByZXR1cm4gY3JlYXRlRW1wdHkoZXhl
Yy0+dm0oKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBjYWxsZWUpOworfQorCitPdXRP
ZkJhbmRBcmd1bWVudHMqIE91dE9mQmFuZEFyZ3VtZW50czo6Y3JlYXRlV2l0aElubGluZUZyYW1l
KEV4ZWNTdGF0ZSogbXlGcmFtZSwgRXhlY1N0YXRlKiB0YXJnZXRGcmFtZSwgSW5saW5lQ2FsbEZy
YW1lKiBpbmxpbmVDYWxsRnJhbWUsIEFyZ3VtZW50c01vZGUgbW9kZSkKK3sKKyAgICBWTSYgdm0g
PSBteUZyYW1lLT52bSgpOworICAgIAorICAgIEpTRnVuY3Rpb24qIGNhbGxlZTsKKyAgICAKKyAg
ICBpZiAoaW5saW5lQ2FsbEZyYW1lKQorICAgICAgICBjYWxsZWUgPSBqc0Nhc3Q8SlNGdW5jdGlv
bio+KGlubGluZUNhbGxGcmFtZS0+Y2FsbGVlUmVjb3ZlcnkucmVjb3Zlcih0YXJnZXRGcmFtZSkp
OworICAgIGVsc2UKKyAgICAgICAgY2FsbGVlID0ganNDYXN0PEpTRnVuY3Rpb24qPih0YXJnZXRG
cmFtZS0+Y2FsbGVlKCkpOworCisgICAgLy8gTkIuIEl0J3Mgc29tZXdoYXQgYXJiaXRyYXJ5IHRo
YXQgd2UgdGllIHRoZSBzdHJpY3RuZXNzIG9mIHRoaXMgb2JqZWN0IHRvIHRoZSBzdHJpY3RuZXNz
IG9mCisgICAgLy8gdGhlIGNhbGxlZS4KKyAgICBib29sIGlzU3RyaWN0TW9kZSA9IGV4ZWN1dGFi
bGUtPmlzU3RyaWN0TW9kZSgpOworCisgICAgT3V0T2ZCYW5kQXJndW1lbnRzKiByZXN1bHQgPSBj
cmVhdGVFbXB0eShteUZyYW1lLCBjYWxsZWUpOworICAgIAorICAgIHVuc2lnbmVkIGxlbmd0aDsK
KyAgICBzd2l0Y2ggKG1vZGUpIHsKKyAgICBjYXNlIENsb25lZEFyZ3VtZW50c0NyZWF0aW9uTW9k
ZTogeworICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lKSB7CisgICAgICAgICAgICBpZiAoaW5s
aW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50UmVnaXN0ZXIuaXNWYWxpZCgpKQorICAgICAgICAg
ICAgICAgIGxlbmd0aCA9IGV4ZWMtPnIoaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50UmVn
aXN0ZXIpLnVuYm94ZWRJbnQzMigpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
IGxlbmd0aCA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKTsKKyAgICAgICAgICAg
IGxlbmd0aC0tOworICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBs
ZW5ndGg7IGktLTspCisgICAgICAgICAgICAgICAgcmVzdWx0LT5wdXREaXJlY3RJbmRleChteUZy
YW1lLCBpLCBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50c1tpXS5yZWNvdmVyKHRhcmdldEZyYW1l
KSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBsZW5ndGggPSB0YXJnZXRGcmFtZS0+
YXJndW1lbnRDb3VudCgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSBsZW5ndGg7IGktLTspCisgICAgICAgICAgICAgICAgcmVzdWx0LT5wdXREaXJlY3RJbmRl
eChteUZyYW1lLCBpLCB0YXJnZXRGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoaSkpOworICAgICAg
ICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBGYWtlQXJndW1l
bnRWYWx1ZXNDcmVhdGlvbk1vZGU6IHsKKyAgICAgICAgbGVuZ3RoID0gMDsKKyAgICAgICAgYnJl
YWs7CisgICAgfSB9CisgICAgCisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5
TmFtZXMtPmxlbmd0aCwganNOdW1iZXIobGVuZ3RoKSk7CisgICAgaWYgKGlzU3RyaWN0TW9kZSkg
eworICAgICAgICByZXN1bHQtPnB1dERpcmVjdEFjY2Vzc29yKGV4ZWMsIHZtLnByb3BlcnR5TmFt
ZXMtPmNhbGxlZSwgdGhpc09iamVjdC0+Z2xvYmFsT2JqZWN0KCktPnRocm93VHlwZUVycm9yR2V0
dGVyU2V0dGVyKGV4ZWMtPnZtKCkpLCBEb250RGVsZXRlIHwgRG9udEVudW0gfCBBY2Nlc3Nvcik7
CisgICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0QWNjZXNzb3IoZXhlYywgdm0ucHJvcGVydHlOYW1l
cy0+Y2FsbGVlLCB0aGlzT2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+dGhyb3dUeXBlRXJyb3JHZXR0
ZXJTZXR0ZXIoZXhlYy0+dm0oKSksIERvbnREZWxldGUgfCBEb250RW51bSB8IEFjY2Vzc29yKTsK
KyAgICB9IGVsc2UKKyAgICAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFt
ZXMtPmNhbGxlZSwgSlNWYWx1ZShjYWxsZWUpKTsKKyAgICAKKyAgICByZXN1bHQtPkpTQ19OQVRJ
VkVfRlVOQ1RJT04odm0ucHJvcGVydHlOYW1lcy0+aXRlcmF0b3JQcml2YXRlTmFtZSwgYXJndW1l
bnRzRnVuY0l0ZXJhdG9yLCBEb250RW51bSwgMCk7Cit9CisKK091dE9mQmFuZEFyZ3VtZW50cyog
T3V0T2ZCYW5kQXJndW1lbnRzOjpjcmVhdGVXaXRoTWFjaGluZUZyYW1lKEV4ZWNTdGF0ZSogbXlG
cmFtZSwgRXhlY1N0YXRlKiB0YXJnZXRGcmFtZSwgQXJndW1lbnRzTW9kZSBtb2RlKQoreworICAg
IHJldHVybiBjcmVhdGVXaXRoSW5saW5lRnJhbWUobXlGcmFtZSwgdGFyZ2V0RnJhbWUsIG51bGxw
dHIsIG1vZGUpOworfQorCitTdHJ1Y3R1cmUqIE91dE9mQmFuZEFyZ3VtZW50czo6Y3JlYXRlU3Ry
dWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90
b3R5cGUpCit7CisgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3Qs
IHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkp
OworfQorCitib29sIE91dE9mQmFuZEFyZ3VtZW50czo6Z2V0T3duUHJvcGVydHlTbG90KEpTT2Jq
ZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIGlkZW50LCBQcm9wZXJ0
eVNsb3QmIHNsb3QpCit7CisgICAgT3V0T2ZCYW5kQXJndW1lbnRzKiB0aGlzT2JqZWN0ID0ganND
YXN0PE91dE9mQmFuZEFyZ3VtZW50cyo+KG9iamVjdCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKKyAgICAKKyAgICBpZiAoaWRlbnQgPT0gdm0ucHJvcGVydHlOYW1lcy0+Y2FsbGVyCisgICAg
ICAgIHx8IGlkZW50ID09IHZtLnByb3BlcnR5TmFtZXMtPmNhbGxlZSkKKyAgICAgICAgdGhpc09i
amVjdC0+bWF0ZXJpYWxpemVTcGVjaWFsc0lmTmVjZXNzYXJ5KGV4ZWMpOworICAgIAorICAgIGlm
IChCYXNlOjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgZXhlYywgaWRlbnQsIHNsb3Qp
KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICBpZiAoaWRlbnQgPT0gdm0ucHJvcGVy
dHlOYW1lcy0+aXRlcmF0b3JQcml2YXRlTmFtZSkgeworICAgICAgICBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0ID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpOworICAgICAgICB0aGlz
T2JqZWN0LT5KU0NfTkFUSVZFX0ZVTkNUSU9OKHZtLnByb3BlcnR5TmFtZXMtPml0ZXJhdG9yUHJp
dmF0ZU5hbWUsIGFyZ3VtZW50c0Z1bmNJdGVyYXRvciwgRG9udEVudW0sIDApOworICAgICAgICBp
ZiAoSlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBleGVjLCBpZGVudCwg
c2xvdCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgcmV0dXJu
IGZhbHNlOworfQorCit2b2lkIE91dE9mQmFuZEFyZ3VtZW50czo6Z2V0T3duUHJvcGVydHlOYW1l
cyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBh
cnJheSwgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit7CisgICAgT3V0T2ZCYW5kQXJndW1lbnRzKiB0
aGlzT2JqZWN0ID0ganNDYXN0PE91dE9mQmFuZEFyZ3VtZW50cyo+KG9iamVjdCk7CisgICAgdGhp
c09iamVjdC0+bWF0ZXJpYWxpemVTcGVjaWFsc0lmTmVjZXNzYXJ5KGV4ZWMpOworICAgIEJhc2U6
OmdldE93blByb3BlcnR5TmFtZXModGhpc09iamVjdCwgZXhlYywgYXJyYXksIG1vZGUpOworfQor
Cit2b2lkIE91dE9mQmFuZEFyZ3VtZW50czo6cHV0KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBl
eGVjLCBQcm9wZXJ0eU5hbWUgaWRlbnQsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYg
c2xvdCkKK3sKKyAgICBPdXRPZkJhbmRBcmd1bWVudHMqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8T3V0
T2ZCYW5kQXJndW1lbnRzKj4ob2JqZWN0KTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAg
IAorICAgIGlmIChpZGVudCA9PSB2bS5wcm9wZXJ0eU5hbWVzLT5jYWxsZWUKKyAgICAgICAgfHwg
aWRlbnQgPT0gdm0ucHJvcGVydHlOYW1lcy0+Y2FsbGVyKQorICAgICAgICB0aGlzT2JqZWN0LT5t
YXRlcmlhbGl6ZVNwZWNpYWxzSWZOZWNlc3NhcnkoZXhlYyk7CisgICAgCisgICAgQmFzZTo6cHV0
KHRoaXNPYmplY3QsIGV4ZWMsIGlkZW50LCB2YWx1ZSwgc2xvdCk7Cit9CisKK3ZvaWQgT3V0T2ZC
YW5kQXJndW1lbnRzOjpkZWxldGVQcm9wZXJ0eShKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhl
YywgUHJvcGVydHlOYW1lIGlkZW50KQoreworICAgIE91dE9mQmFuZEFyZ3VtZW50cyogdGhpc09i
amVjdCA9IGpzQ2FzdDxPdXRPZkJhbmRBcmd1bWVudHMqPihvYmplY3QpOworICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7CisgICAgCisgICAgaWYgKGlkZW50ID09IHZtLnByb3BlcnR5TmFtZXMtPmNh
bGxlZQorICAgICAgICB8fCBpZGVudCA9PSB2bS5wcm9wZXJ0eU5hbWVzLT5jYWxsZXIpCisgICAg
ICAgIHRoaXNPYmplY3QtPm1hdGVyaWFsaXplU3BlY2lhbHNJZk5lY2Vzc2FyeShleGVjKTsKKyAg
ICAKKyAgICBCYXNlOjpkZWxldGVQcm9wZXJ0eSh0aGlzT2JqZWN0LCBleGVjLCBpZGVudCk7Cit9
CisKK3ZvaWQgT3V0T2ZCYW5kQXJndW1lbnRzOjpkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCog
b2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBpZGVudCwgY29uc3QgUHJvcGVy
dHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBib29sIHNob3VsZFRocm93KQoreworICAgIE91dE9m
QmFuZEFyZ3VtZW50cyogdGhpc09iamVjdCA9IGpzQ2FzdDxPdXRPZkJhbmRBcmd1bWVudHMqPihv
YmplY3QpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgCisgICAgaWYgKGlkZW50ID09
IHZtLnByb3BlcnR5TmFtZXMtPmNhbGxlZQorICAgICAgICB8fCBpZGVudCA9PSB2bS5wcm9wZXJ0
eU5hbWVzLT5jYWxsZXIpCisgICAgICAgIHRoaXNPYmplY3QtPm1hdGVyaWFsaXplU3BlY2lhbHNJ
Zk5lY2Vzc2FyeShleGVjKTsKKyAgICAKKyAgICByZXR1cm4gQmFzZTo6ZGVmaW5lT3duUHJvcGVy
dHkob2JqZWN0LCBleGVjLCBpZGVudCwgZGVzY3JpcHRvciwgc2hvdWxkVGhyb3cpOworfQorCit2
b2lkIE91dE9mQmFuZEFyZ3VtZW50czo6bWF0ZXJpYWxpemVTcGVjaWFscyhFeGVjU3RhdGUqIGV4
ZWMpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoIXNwZWNpYWxzTWF0ZXJpYWxpemVkKCkpOworICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgCisgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVj
dXRhYmxlID0ganNDYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KG1fY2FsbGVlLT5leGVjdXRhYmxl
KCkpOworICAgIGJvb2wgaXNTdHJpY3RNb2RlID0gZXhlY3V0YWJsZS0+aXNTdHJpY3RNb2RlKCk7
CisgICAgCisgICAgaWYgKGlzU3RyaWN0TW9kZSkgeworICAgICAgICBwdXREaXJlY3RBY2Nlc3Nv
cihleGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT5jYWxsZWUsIGdsb2JhbE9iamVjdCgpLT50aHJvd1R5
cGVFcnJvckdldHRlclNldHRlcih2bSksIERvbnREZWxldGUgfCBEb250RW51bSB8IEFjY2Vzc29y
KTsKKyAgICAgICAgcHV0RGlyZWN0QWNjZXNzb3IoZXhlYywgdm0ucHJvcGVydHlOYW1lcy0+Y2Fs
bGVlLCBnbG9iYWxPYmplY3QoKS0+dGhyb3dUeXBlRXJyb3JHZXR0ZXJTZXR0ZXIodm0pLCBEb250
RGVsZXRlIHwgRG9udEVudW0gfCBBY2Nlc3Nvcik7CisgICAgfSBlbHNlCisgICAgICAgIHB1dERp
cmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+Y2FsbGVlLCBKU1ZhbHVlKG1fY2FsbGVlLmdldCgp
KSk7CisgICAgCisgICAgbV9jYWxsZWUuY2xlYXIoKTsKK30KKwordm9pZCBPdXRPZkJhbmRBcmd1
bWVudHM6Om1hdGVyaWFsaXplU3BlY2lhbHNJZk5lY2Vzc2FyeShFeGVjU3RhdGUqIGV4ZWMpCit7
CisgICAgaWYgKCFzcGVjaWFsc01hdGVyaWFsaXplZCgpKQorICAgICAgICBtYXRlcmlhbGl6ZVNw
ZWNpYWxzKGV4ZWMpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvT3V0T2ZCYW5kQXJndW1lbnRzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3V0T2ZCYW5kQXJndW1lbnRzLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PdXRPZkJhbmRBcmd1bWVu
dHMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc3IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgT3V0T2ZCYW5kQXJndW1lbnRzX2gK
KyNkZWZpbmUgT3V0T2ZCYW5kQXJndW1lbnRzX2gKKworI2luY2x1ZGUgIkFyZ3VtZW50c01vZGUu
aCIKKyNpbmNsdWRlICJKU09iamVjdC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworLy8gVGhpcyBp
cyBhbiBBcmd1bWVudHMtY2xhc3Mgb2JqZWN0IHRoYXQgd2UgY3JlYXRlIHdoZW4geW91IGRvIGZ1
bmN0aW9uLmFyZ3VtZW50cywgb3IgeW91IHNheQorLy8gImFyZ3VtZW50cyIgaW5zaWRlIGEgZnVu
Y3Rpb24gaW4gc3RyaWN0IG1vZGUuIEl0IGJlaGF2ZXMgYWxtcHN0IGVudGlyZWx5IGxpa2UgYW4g
b3JkaW5hcnkKKy8vIEphdmFTY3JpcHQgb2JqZWN0LiBBbGwgb2YgdGhlIGFyZ3VtZW50cyB2YWx1
ZXMgYXJlIHNpbXBseSBjb3BpZWQgZnJvbSB0aGUgc3RhY2sgKHBvc3NpYmx5IHZpYQorLy8gc29t
ZSBzb3BoaXN0aWNhdGVkIFZhbHVlUmVjb3ZlcnkncyBpZiBhbiBvcHRpbWl6aW5nIGNvbXBpbGVy
IGlzIGluIHBsYXkpIGFuZCB0aGUgYXBwcm9wcmlhdGUKKy8vIHByb3BlcnRpZXMgb2YgdGhlIG9i
amVjdCBhcmUgcG9wdWxhdGVkLiBUaGUgb25seSByZWFzb24gd2h5IHdlIG5lZWQgYSBzcGVjaWFs
IGNsYXNzIGlzIHRvIG1ha2UKKy8vIHRoZSBvYmplY3QgY2xhaW0gdG8gYmUgIkFyZ3VtZW50cyIg
ZnJvbSBhIHRvU3RyaW5nIHN0YW5kcG9pbnQsIGFuZCB0byBhdm9pZCBtYXRlcmlhbGl6aW5nIHRo
ZQorLy8gY2FsbGVyL2NhbGxlZSBwcm9wZXJ0aWVzIHVubGVzcyBzb21lb25lIGFza3MgZm9yIHRo
ZW0uCitjbGFzcyBPdXRPZkJhbmRBcmd1bWVudHMgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7
CitwdWJsaWM6CisgICAgdHlwZWRlZiBKU05vbkZpbmFsT2JqZWN0IEJhc2U7CisgICAgCitwcml2
YXRlOgorICAgIE91dE9mQmFuZEFyZ3VtZW50cyhWTSYsIFN0cnVjdHVyZSopOworCitwdWJsaWM6
CisgICAgc3RhdGljIE91dE9mQmFuZEFyZ3VtZW50cyogY3JlYXRlRW1wdHkoVk0mLCBKU0dsb2Jh
bE9iamVjdCosIEpTRnVuY3Rpb24qIGNhbGxlZSk7CisgICAgc3RhdGljIE91dE9mQmFuZEFyZ3Vt
ZW50cyogY3JlYXRlRW1wdHkoRXhlY1N0YXRlKiwgSlNGdW5jdGlvbiogY2FsbGVlKTsKKyAgICBz
dGF0aWMgT3V0T2ZCYW5kQXJndW1lbnRzKiBjcmVhdGVXaXRoSW5saW5lRnJhbWUoRXhlY1N0YXRl
KiBteUZyYW1lLCBFeGVjU3RhdGUqIHRhcmdldEZyYW1lLCBJbmxpbmVDYWxsRnJhbWUqLCBBcmd1
bWVudHNNb2RlKTsKKyAgICBzdGF0aWMgT3V0T2ZCYW5kQXJndW1lbnRzKiBjcmVhdGVXaXRoTWFj
aGluZUZyYW1lKEV4ZWNTdGF0ZSogbXlGcmFtZSwgRXhlY1N0YXRlKiB0YXJnZXRGcmFtZSwgQXJn
dW1lbnRzTW9kZSk7CisgICAgCisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJl
KFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHByb3RvdHlwZSk7CisKKyAgICBzdGF0aWMg
Y29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNs
b3QgfCBPdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzIHwgSlNPYmplY3Q6OlN0cnVjdHVyZUZsYWdz
OworCisgICAgREVDTEFSRV9JTkZPOworCitwcml2YXRlOgorICAgIHN0YXRpYyBib29sIGdldE93
blByb3BlcnR5U2xvdChKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVy
dHlTbG90Jik7CisgICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCos
IEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKKyAgICBz
dGF0aWMgdm9pZCBwdXQoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVl
LCBQdXRQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgdm9pZCBkZWxldGVQcm9wZXJ0eShKU0Nl
bGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUpOworICAgIHN0YXRpYyB2b2lkIGRlZmluZU93
blByb3BlcnR5KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBjb25zdCBQcm9w
ZXJ0eURlc2NyaXB0b3ImLCBib29sIHNob3VsZFRocm93KTsKKyAgICAKKyAgICBib29sIHNwZWNp
YWxzTWF0ZXJpYWxpemVkKCkgY29uc3QgeyByZXR1cm4gIW1fY2FsbGVlOyB9CisgICAgdm9pZCBt
YXRlcmlhbGl6ZVNwZWNpYWxzKEV4ZWNTdGF0ZSopOworICAgIHZvaWQgbWF0ZXJpYWxpemVTcGVj
aWFsc0lmTmVjZXNzYXJ5KEV4ZWNTdGF0ZSopOworICAgIAorICAgIFdyaXRlQmFycmllcjxKU0Z1
bmN0aW9uKj4gbV9jYWxsZWU7IC8vIFNldCB0byBudWxscHRyIHdoZW4gd2UgbWF0ZXJpYWxpemUg
YWxsIG9mIG91ciBzcGVjaWFsIHByb3BlcnRpZXMuCit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MK
KworI2VuZGlmIC8vIE91dE9mQmFuZEFyZ3VtZW50c19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1Njb3BlT2Zmc2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TY29wZU9mZnNldC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZU9mZnNldC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2NvcGVPZmZzZXQuaCIKKwor
bmFtZXNwYWNlIEpTQyB7CisKK3ZvaWQgU2NvcGVPZmZzZXQ6OmR1bXAoUHJpbnRTdHJlYW0mIG91
dCkgY29uc3QKK3sKKyAgICBpZiAoISp0aGlzKSB7CisgICAgICAgIG91dC5wcmludCgic2NvcGVJ
bnZhbGlkIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgb3V0LnByaW50KCJz
Y29wZSIsIG9mZnNldCgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlT2Zmc2V0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVPZmZzZXQuaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlT2Zmc2V0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIFNjb3BlT2Zmc2V0X2gKKyNkZWZpbmUgU2NvcGVPZmZzZXRfaAor
CisjaW5jbHVkZSAiR2VuZXJpY09mZnNldC5oIgorI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5o
PgorCituYW1lc3BhY2UgSlNDIHsKKworLy8gVGhpcyBpcyBhbiBvZmZzZXQgaW50byBhIHNjb3Bl
IG9mIHNvbWUga2luZC4gSXQgY291bGQgYmUgYW4gYWN0aXZhdGlvbiBzY29wZSBvciBpdCBjb3Vs
ZCBiZSBhCisvLyBnbG9iYWwgb2JqZWN0LgorY2xhc3MgU2NvcGVPZmZzZXQgOiBwdWJsaWMgR2Vu
ZXJpY09mZnNldDxTY29wZU9mZnNldD4geworcHVibGljOgorICAgIFNjb3BlT2Zmc2V0KCkgeyB9
CisgICAgCisgICAgZXhwbGljaXQgU2NvcGVPZmZzZXQodW5zaWduZWQgb2Zmc2V0KQorICAgICAg
ICA6IEdlbmVyaWNPZmZzZXQob2Zmc2V0KQorICAgIHsKKyAgICB9CisgICAgCisgICAgdm9pZCBk
dW1wKFByaW50U3RyZWFtJikgY29uc3Q7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2Vu
ZGlmIC8vIFNjb3BlT2Zmc2V0X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU2NvcGVkQXJndW1lbnRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TY29wZWRBcmd1bWVudHMuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDEwMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2NvcGVkQXJndW1lbnRzLmgi
CisKKyNpbmNsdWRlICJHZW5lcmljQXJndW1lbnRzSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTQXJn
dW1lbnRzSXRlcmF0b3IuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBK
U0MgeworCitTVEFUSUNfQVNTRVJUX0lTX1RSSVZJQUxMWV9ERVNUUlVDVElCTEUoU2NvcGVkQXJn
dW1lbnRzKTsKKworY29uc3QgQ2xhc3NJbmZvIFNjb3BlZEFyZ3VtZW50czo6c19pbmZvID0geyAi
QXJndW1lbnRzIiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShTY29wZWRB
cmd1bWVudHMpIH07CisKK1Njb3BlZEFyZ3VtZW50czo6U2NvcGVkQXJndW1lbnRzKFZNJiB2bSwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgOiBHZW5lcmljQXJndW1lbnRzKHZtLCBzdHJ1Y3R1
cmUpCisgICAgLCBtX292ZXJyb2RlVGhpbmdzKGZhbHNlKQoreworfQorCit2b2lkIFNjb3BlZEFy
Z3VtZW50czo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBKU0Z1bmN0aW9uKiBjYWxsZWUsIFNjb3Bl
ZEFyZ3VtZW50c1RhYmxlKiB0YWJsZSwgSlNMZXhpY2FsRW52aXJvbm1lbnQqIHNjb3BlKQorewor
ICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICBtX2NhbGxlZS5zZXQodm0sIHRoaXMs
IGNhbGxlZSk7CisgICAgbV90YWJsZS5zZXQodm0sIHRoaXMsIHRhYmxlKTsKKyAgICBtX3Njb3Bl
LnNldCh2bSwgdGhpcywgc2NvcGUpOworfQorCitTY29wZWRBcmd1bWVudHMqIFNjb3BlZEFyZ3Vt
ZW50czo6Y3JlYXRlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRnVuY3Rpb24qIGNh
bGxlZSwgU2NvcGVkQXJndW1lbnRzVGFibGUqIHRhYmxlLCBKU0xleGljYWxFbnZpcm9ubWVudCog
c2NvcGUpCit7CisgICAgU2NvcGVkQXJndW1lbnRzKiByZXN1bHQgPQorICAgICAgICBuZXcgKE5v
dE51bGwsIGFsbG9jYXRlQ2VsbDxTY29wZWRBcmd1bWVudHM+KHZtLmhlYXApKQorICAgICAgICAo
dm0sIHN0cnVjdHVyZSk7CisgICAgcmVzdWx0LT5maW5pc2hDcmVhdGlvbih2bSwgY2FsbGVlLCB0
YWJsZSwgc2NvcGUpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgU2NvcGVkQXJndW1l
bnRzOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7
CisgICAgU2NvcGVkQXJndW1lbnRzKiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8U2NvcGVkQXJn
dW1lbnRzKj4oY2VsbCk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0
LCBpbmZvKCkpOworICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7
CisKKyAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9jYWxsZWUpOworICAgIHZpc2l0
b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX3RhYmxlKTsKKyAgICB2aXNpdG9yLmFwcGVuZCgmdGhp
c09iamVjdC0+bV9zY29wZSk7Cit9CisKK1N0cnVjdHVyZSogU2NvcGVkQXJndW1lbnRzOjpjcmVh
dGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVl
IHByb3RvdHlwZSkKK3sKKyAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9i
amVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhTY29wZWRBcmd1bWVudHNUeXBlLCBTdHJ1Y3R1cmVG
bGFncyksIGluZm8oKSk7Cit9CisKK3ZvaWQgU2NvcGVkQXJndW1lbnRzOjpzbG93RG93bkFuZFdh
c3RlTWVtb3J5KFZNJiB2bSkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVCghbV9vdmVycm9kZVRoaW5n
cyk7CisgICAgCisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpz
TnVtYmVyKG1fdGFibGUtPmxlbmd0aCgpKSwgRG9udEVudW0pOworICAgIHB1dERpcmVjdCh2bSwg
dm0ucHJvcGVydHlOYW1lcy0+Y2FsbGVlLCBtX2NhbGxlZS5nZXQoKSwgRG9udEVudW0pOworICAg
IAorICAgIG1fb3ZlcnJvZGVUaGluZ3MgPSB0cnVlOworfQorCit2b2lkIFNjb3BlZEFyZ3VtZW50
czo6c2xvd0Rvd25BbmRXYXN0ZU1lbW9yeUlmTmVjZXNzYXJ5KFZNJiB2bSkKK3sKKyAgICBpZiAo
IW1fb3ZlcnJvZGVUaGluZ3MpCisgICAgICAgIHNsb3dEb3duQW5kV2FzdGVNZW1vcnkodm0pOwor
fQorCit2b2lkIFNjb3BlZEFyZ3VtZW50czo6b3ZlcnJpZGVBcmd1bWVudChWTSYgdm0sIHVpbnQz
Ml90IGkpCit7CisgICAgbV90YWJsZS5zZXQodm0sIHRoaXMsIG1fdGFibGUtPnNldCh2bSwgaSwg
U2NvcGVPZmZzZXQoKSkpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHMuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDExMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFNjb3BlZEFyZ3VtZW50c19oCisjZGVmaW5l
IFNjb3BlZEFyZ3VtZW50c19oCisKKyNpbmNsdWRlICJHZW5lcmljQXJndW1lbnRzLmgiCisKK25h
bWVzcGFjZSBKU0MgeworCisvLyBUaGlzIGlzIGFuIEFyZ3VtZW50cy1jbGFzcyBvYmplY3QgdGhh
dCB3ZSBjcmVhdGUgd2hlbiB5b3Ugc2F5ICJhcmd1bWVudHMiIGluc2lkZSBhIGZ1bmN0aW9uLAor
Ly8gYW5kIG9uZSBvciBtb3JlIG9mIHRoZSBhcmd1bWVudHMgbWF5IGJlIGNhcHR1cmVkIGluIHRo
ZSBmdW5jdGlvbidzIGFjdGl2YXRpb24uIFRoZSBmdW5jdGlvbgorLy8gd2lsbCBjb3B5IGFsbCBv
ZiBpdHMgYXJndW1lbnRzIGludG8gdGhlIGFjdGl2YXRpb24gYW5kIHRoZW4gY3JlYXRlIHRoaXMg
b2JqZWN0LiBUaGlzIG9iamVjdAorLy8gd2lsbCB1c2UgdGhlIHN5bWJvbCB0YWJsZSdzIFNjb3Bl
ZEFyZ3VtZW50c1RhYmxlIGFuZCB0aGUgYWN0aXZhdGlvbiB0byBoYW5kbGUgYWxsIGluZGV4ZWQK
Ky8vIGxvb2t1cHMuCitjbGFzcyBTY29wZWRBcmd1bWVudHMgOiBwdWJsaWMgR2VuZXJpY0FyZ3Vt
ZW50czxTY29wZWRBcmd1bWVudHM+IHsKK3ByaXZhdGU6CisgICAgU2NvcGVkQXJndW1lbnRzKFZN
JiwgU3RydWN0dXJlKik7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIEpTRnVuY3Rpb24q
IGNhbGxlZSwgU2NvcGVkQXJndW1lbnRzVGFibGUqLCBKU0xleGljYWxFbnZpcm9ubWVudCopOwor
CitwdWJsaWM6CisgICAgc3RhdGljIFNjb3BlZEFyZ3VtZW50cyogY3JlYXRlKFZNJiwgU3RydWN0
dXJlKiwgSlNGdW5jdGlvbiogY2FsbGVlLCBTY29wZWRBcmd1bWVudHNUYWJsZSosIEpTTGV4aWNh
bEVudmlyb25tZW50Kik7CisgICAgCisgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0Nl
bGwqLCBTbG90VmlzaXRvciYpOworICAgIAorICAgIHVpbnQzMl90IGludGVybmFsTGVuZ3RoKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3RhYmxlLT5sZW5ndGgoKTsKKyAgICB9Cisg
ICAgCisgICAgdWludDMyX3QgbGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKKyAgICB7Cisg
ICAgICAgIGlmIChVTkxJS0VMWShtX292ZXJyb2RlTGVuZ3RoKSkKKyAgICAgICAgICAgIHJldHVy
biBnZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCkudG9VSW50MzIoZXhlYyk7
CisgICAgICAgIHJldHVybiBpbnRlcm5hbExlbmd0aCgpOworICAgIH0KKyAgICAKKyAgICBib29s
IGNhbkFjY2Vzc0luZGV4UXVpY2tseSh1aW50MzJfdCBpKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIGkgPCBtX2xlbmd0aCAmJiAhIW1fdGFibGUtPmdldChpKTsKKyAgICB9CisgICAgCisg
ICAgSlNWYWx1ZSBnZXRJbmRleFF1aWNrbHkodWludDMyX3QgaSkgY29uc3QKKyAgICB7CisgICAg
ICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGNhbkFjY2Vzc0luZGV4UXVpY2ts
eShpKSk7CisgICAgICAgIHJldHVybiBtX3Njb3BlLT52YXJpYWJsZUF0KG1fdGFibGUtPmdldChp
KSkuZ2V0KCk7CisgICAgfQorCisgICAgdm9pZCBzZXRJbmRleFF1aWNrbHkoVk0mIHZtLCB1aW50
MzJfdCBpLCBKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJ
VFlfSU1QTElDQVRJT04oY2FuQWNjZXNzSW5kZXhRdWlja2x5KGkpKTsKKyAgICAgICAgcmV0dXJu
IG1fc2NvcGUtPnZhcmlhYmxlQXQobV90YWJsZS0+Z2V0KGkpKS5nZXQoKTsKKyAgICB9CisKKyAg
ICBXcml0ZUJhcnJpZXI8SlNGdW5jdGlvbj4mIGNhbGxlZSgpCisgICAgeworICAgICAgICByZXR1
cm4gbV9jYWxsZWU7CisgICAgfQorICAgIAorICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgYXJn
dW1lbnQoQ2FwdHVyZWRBcmd1bWVudHNPZmZzZXQgb2Zmc2V0KQorICAgIHsKKyAgICAgICAgQVNT
RVJUKG9mZnNldCk7CisgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKG9m
ZnNldC5vZmZzZXQoKSA8IG1fbGVuZ3RoKTsKKyAgICAgICAgcmV0dXJuIHN0b3JhZ2UoKVtvZmZz
ZXQub2Zmc2V0KCldOworICAgIH0KKyAgICAKKyAgICBib29sIG92ZXJyb2RlVGhpbmdzKCkgY29u
c3QgeyByZXR1cm4gbV9vdmVycm9kZVRoaW5nczsgfQorICAgIHZvaWQgc2xvd0Rvd25BbmRXYXN0
ZU1lbW9yeShWTSYpOworICAgIHZvaWQgc2xvd0Rvd25BbmRXYXN0ZU1lbW9yeUlmTmVjZXNzYXJ5
KFZNJik7CisgICAgdm9pZCBvdmVycmlkZUFyZ3VtZW50KFZNJiB2bSwgdWludDMyX3QgaSk7Cisg
ICAgCisgICAgREVDTEFSRV9JTkZPOworICAgIAorICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0
ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUpOworICAg
IAorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZUYWJsZSgpIHsgcmV0dXJuIE9CSkVDVF9P
RkZTRVRPRihTY29wZWRBcmd1bWVudHMsIG1fdGFibGUpOyB9CisgICAgc3RhdGljIHB0cmRpZmZf
dCBvZmZzZXRPZlNjb3BlKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFNjb3BlZEFyZ3VtZW50
cywgbV9zY29wZSk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mT3ZlcnJvZGVUaGlu
Z3MoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoU2NvcGVkQXJndW1lbnRzLCBtX292ZXJyb2Rl
VGhpbmdzKTsgfQorCitwcml2YXRlOgorICAgIGJvb2wgbV9vdmVycm9kZVRoaW5nczsgLy8gVHJ1
ZSBpZiBsZW5ndGgsIGNhbGxlZSwgYW5kIGNhbGxlciBhcmUgZnVsbHkgbWF0ZXJpYWxpemVkIGlu
IHRoZSBvYmplY3QuCisgICAgV3JpdGVCYXJyaWVyPEpTRnVuY3Rpb24qPiBtX2NhbGxlZTsKKyAg
ICBXcml0ZUJhcnJpZXI8U2NvcGVkQXJndW1lbnRzVGFibGU+IG1fdGFibGU7CisgICAgV3JpdGVC
YXJyaWVyPEpTTGV4aWNhbEVudmlyb25tZW50PiBtX3Njb3BlOworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgSlNDCisKKyNlbmRpZiAvLyBTY29wZWRBcmd1bWVudHNfaAorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHNUYWJsZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50c1RhYmxlLmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVu
dHNUYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTQgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBTY29wZWRBcmd1bWVudHNU
YWJsZV9oCisjZGVmaW5lIFNjb3BlZEFyZ3VtZW50c1RhYmxlX2gKKworI2luY2x1ZGUgIkpTQ2Vs
bC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworLy8gVGhpcyBjbGFzcydzIG9ubHkgam9iIGlzIHRv
IGhvbGQgb250byB0aGUgbGlzdCBvZiBTY29wZU9mZnNldHMgZm9yIGVhY2ggYXJndW1lbnQgdGhh
dCBhCisvLyBmdW5jdGlvbiBoYXMuIE1vc3Qgb2YgdGhlIHRpbWUsIHRoZSBCeXRlY29kZUdlbmVy
YXRvciB3aWxsIGNyZWF0ZSBvbmUgb2YgdGhlc2UgYW5kIGl0IHdpbGwKKy8vIG5ldmVyIGJlIG1v
ZGlmaWVkIHN1YnNlcXVlbnRseS4gVGhlcmUgaXMgYSByYXJlIGNhc2Ugd2hlcmUgYSBTY29wZWRB
cmd1bWVudHMgb2JqZWN0IGlzIGNyZWF0ZWQKKy8vIGFuZCBhbGlhc2VzIG9uZSBvZiB0aGVzZSBh
bmQgdGhlbiBkZWNpZGVzIHRvIG1vZGlmeSBpdDsgaW4gdGhhdCBjYXNlIHdlIGRvIGNvcHktb24t
d3JpdGUuIFRoaXMKKy8vIG1ha2VzIHNlbnNlIGJlY2F1c2Ugc3VjaCBtb2RpZmljYXRpb25zIGFy
ZSBzbyB1bmNvbW1vbi4gWW91J2QgaGF2ZSB0byBkbyBzb21ldGhpbmcgY3JhenkgbGlrZQorLy8g
ImRlbGV0ZSBhcmd1bWVudHNbaV0iIG9yIHNvbWUgdmFyaWFudCBvZiBkZWZpbmVPd25Qcm9wZXJ0
eS4KK2NsYXNzIFNjb3BlZEFyZ3VtZW50cyA6IHB1YmxpYyBKU0NlbGwgeworcHVibGljOgorICAg
IHR5cGVkZWYgSlNDZWxsIEJhc2U7CisgICAgCisgICAgc3RhdGljIGNvbnN0IGJvb2wgbmVlZHNE
ZXN0cnVjdGlvbiA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzSW1tb3J0YWxTdHJ1
Y3R1cmUgPSB0cnVlOworCitwcml2YXRlOgorICAgIFNjb3BlZEFyZ3VtZW50c1RhYmxlKFZNJik7
CisgICAgflNjb3BlZEFyZ3VtZW50c1RhYmxlKCk7CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgU2Nv
cGVkQXJndW1lbnRzVGFibGUqIGNyZWF0ZShWTSYpOworICAgIAorICAgIFNjb3BlZEFyZ3VtZW50
cyogY2xvbmUoVk0mKTsKKyAgICAKKyAgICB1aW50MzJfdCBsZW5ndGgoKSBjb25zdCB7IHJldHVy
biBtX2xlbmd0aDsgfQorICAgIFNjb3BlZEFyZ3VtZW50c1RhYmxlKiBzZXRMZW5ndGgoVk0mLCB1
aW50MzJfdCBuZXdMZW5ndGgpOworICAgIAorICAgIFNjb3BlT2Zmc2V0IGdldCh1aW50MzJfdCBp
KSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04o
aSA8IG1fbGVuZ3RoKTsKKyAgICAgICAgcmV0dXJuIG1fYXJndW1lbnRzW2ldOworICAgIH0KKyAg
ICAKKyAgICB2b2lkIGxvY2soKQorICAgIHsKKyAgICAgICAgbV9sb2NrZWQgPSB0cnVlOworICAg
IH0KKyAgICAKKyAgICBTY29wZWRBcmd1bWVudHMqIHNldChWTSYgdm0sIHVpbnQzMl90IGksIFNj
b3BlT2Zmc2V0IHZhbHVlKQorICAgIHsKKyAgICAgICAgU2NvcGVkQXJndW1lbnRzKiByZXN1bHQ7
CisgICAgICAgIGlmIChVTkxJS0VMWShtX2xvY2tlZCkpCisgICAgICAgICAgICByZXN1bHQgPSBj
bG9uZSh2bSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJlc3VsdCA9IHRoaXM7CisgICAg
ICAgIHJlc3VsdC0+c2V0RGlyZWN0KGksIHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KyAgICB9CisgICAgCisgICAgREVDTEFSRV9JTkZPOworICAgIAorICAgIHN0YXRpYyBwdHJkaWZm
X3Qgb2Zmc2V0T2ZMZW5ndGgoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoU2NvcGVkQXJndW1l
bnRzLCBtX2xlbmd0aCk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQXJndW1lbnRz
KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFNjb3BlZEFyZ3VtZW50cywgbV9hcmd1bWVudHMp
OyB9CisKK3ByaXZhdGU6CisgICAgdWludDMyX3QgbV9sZW5ndGg7CisgICAgYm9vbCBtX2xvY2tl
ZDsgLy8gQmVpbmcgbG9ja2VkIG1lYW5zIHRoYXQgdGhlcmUgYXJlIG11bHRpcGxlIHJlZmVyZW5j
ZXMgdG8gdGhpcyBvYmplY3QgYW5kIG5vbmUgb2YgdGhlbSBleHBlY3QgdG8gc2VlIHRoZSBvdGhl
cnMnIG1vZGlmaWNhdGlvbnMuIFRoaXMgbWVhbnMgdGhhdCBtb2RpZmljYXRpb25zIG5lZWQgdG8g
bWFrZSBhIGNvcHkgZmlyc3QuCisgICAgc3RkOjp1bmlxdWVfcHRyPFNjb3BlT2Zmc2V0W10+IG1f
YXJndW1lbnRzOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBTY29wZWRB
cmd1bWVudHNUYWJsZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5
bWJvbFRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TeW1ib2xUYWJsZS5jcHAJKHJldmlzaW9uIDE4MDcyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE0LCAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MTM3LDI5ICsxMzcsMjIgQEAgdm9pZCBTeW1ib2xUYWJsZTo6V2F0Y2hwb2ludENsZWFudXA6OmZp
bgogICAgIH0KIH0KIAotU3ltYm9sVGFibGUqIFN5bWJvbFRhYmxlOjpjbG9uZUNhcHR1cmVkTmFt
ZXMoVk0mIHZtKQorU3ltYm9sVGFibGUqIFN5bWJvbFRhYmxlOjpjbG9uZVNjb3BlUGFydChWTSYg
dm0pCiB7CiAgICAgU3ltYm9sVGFibGUqIHJlc3VsdCA9IFN5bWJvbFRhYmxlOjpjcmVhdGUodm0p
OwogICAgIAotICAgIHJlc3VsdC0+bV9wYXJhbWV0ZXJDb3VudEluY2x1ZGluZ1RoaXMgPSBtX3Bh
cmFtZXRlckNvdW50SW5jbHVkaW5nVGhpczsKICAgICByZXN1bHQtPm1fdXNlc05vblN0cmljdEV2
YWwgPSBtX3VzZXNOb25TdHJpY3RFdmFsOwotICAgIHJlc3VsdC0+bV9jYXB0dXJlU3RhcnQgPSBt
X2NhcHR1cmVTdGFydDsKLSAgICByZXN1bHQtPm1fY2FwdHVyZUVuZCA9IG1fY2FwdHVyZUVuZDsK
IAogICAgIGZvciAoYXV0byBpdGVyID0gbV9tYXAuYmVnaW4oKSwgZW5kID0gbV9tYXAuZW5kKCk7
IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKLSAgICAgICAgaWYgKCFpc0NhcHR1cmVkKGl0ZXItPnZh
bHVlLmdldEluZGV4KCkpKQorICAgICAgICBpZiAoIWl0ZXItPnZhbHVlLnZhck9mZnNldCgpLmlz
U2NvcGUoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICByZXN1bHQtPm1fbWFwLmFk
ZCgKICAgICAgICAgICAgIGl0ZXItPmtleSwKLSAgICAgICAgICAgIFN5bWJvbFRhYmxlRW50cnko
aXRlci0+dmFsdWUuZ2V0SW5kZXgoKSwgaXRlci0+dmFsdWUuZ2V0QXR0cmlidXRlcygpKSk7Cisg
ICAgICAgICAgICBTeW1ib2xUYWJsZUVudHJ5KGl0ZXItPnZhbHVlLnZhck9mZnNldCgpLCBpdGVy
LT52YWx1ZS5nZXRBdHRyaWJ1dGVzKCkpKTsKICAgICB9CiAgICAgCi0gICAgaWYgKG1fc2xvd0Fy
Z3VtZW50cykgewotICAgICAgICByZXN1bHQtPm1fc2xvd0FyZ3VtZW50cyA9IHN0ZDo6bWFrZV91
bmlxdWU8U2xvd0FyZ3VtZW50W10+KHBhcmFtZXRlckNvdW50KCkpOwotICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSBwYXJhbWV0ZXJDb3VudCgpOyBpLS07KQotICAgICAgICAgICAgcmVzdWx0LT5t
X3Nsb3dBcmd1bWVudHNbaV0gPSBtX3Nsb3dBcmd1bWVudHNbaV07Ci0gICAgfQotCisgICAgcmVz
dWx0LT5tX2FyZ3VtZW50cyA9IGFyZ3VtZW50cygpOworICAgIAogICAgIGlmIChtX3R5cGVQcm9m
aWxpbmdSYXJlRGF0YSkgewogICAgICAgICByZXN1bHQtPm1fdHlwZVByb2ZpbGluZ1JhcmVEYXRh
ID0gc3RkOjptYWtlX3VuaXF1ZTxUeXBlUHJvZmlsaW5nUmFyZURhdGE+KCk7CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuaAkocmV2aXNpb24gMTgw
NzIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIw
MDgsIDIwMTItMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMDcsIDIwMDgsIDIwMTItMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMxLDYgKzMxLDcgQEAKIAog
I2luY2x1ZGUgIkNvbmN1cnJlbnRKSVRMb2NrLmgiCiAjaW5jbHVkZSAiSlNPYmplY3QuaCIKKyNp
bmNsdWRlICJTY29wZWRBcmd1bWVudHNUYWJsZS5oIgogI2luY2x1ZGUgIlR5cGVMb2NhdGlvbi5o
IgogI2luY2x1ZGUgIlZhcmlhYmxlV2F0Y2hwb2ludFNldC5oIgogI2luY2x1ZGUgPG1lbW9yeT4K
QEAgLTM5LDI0ICs0MCw2IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1zdHJ1Y3QgU2xvd0FyZ3Vt
ZW50IHsKLXB1YmxpYzoKLSAgICBlbnVtIFN0YXR1cyB7Ci0gICAgICAgIE5vcm1hbCA9IDAsCi0g
ICAgICAgIENhcHR1cmVkID0gMSwKLSAgICAgICAgRGVsZXRlZCA9IDIKLSAgICB9OwotCi0gICAg
U2xvd0FyZ3VtZW50KCkKLSAgICAgICAgOiBzdGF0dXMoTm9ybWFsKQotICAgICAgICAsIGluZGV4
KDApCi0gICAgewotICAgIH0KLQotICAgIFN0YXR1cyBzdGF0dXM7Ci0gICAgaW50IGluZGV4OyAv
LyBJZiBzdGF0dXMgaXMgJ0RlbGV0ZWQnLCBpbmRleCBpcyBib2d1cy4KLX07Ci0KIHN0YXRpYyBB
TFdBWVNfSU5MSU5FIGludCBtaXNzaW5nU3ltYm9sTWFya2VyKCkgeyByZXR1cm4gc3RkOjpudW1l
cmljX2xpbWl0czxpbnQ+OjptYXgoKTsgfQogCiAvLyBUaGUgYml0IHR3aWRkbGluZyBpbiB0aGlz
IGNsYXNzIGFzc3VtZXMgdGhhdCBldmVyeSByZWdpc3RlciBpbmRleCBpcyBhCkBAIC04Niw2ICs2
OSwyOCBAQCBzdGF0aWMgQUxXQVlTX0lOTElORSBpbnQgbWlzc2luZ1N5bWJvbE1hCiAvLyBjb3B5
OiAgICAgU3ltYm9sVGFibGVFbnRyeSAtLT4gRmF0RW50cnkgLS0tLS1eCiAKIHN0cnVjdCBTeW1i
b2xUYWJsZUVudHJ5IHsKK3ByaXZhdGU6CisgICAgc3RhdGljIFZhck9mZnNldCB2YXJPZmZzZXRG
cm9tQml0cyhpbnRwdHJfdCBiaXRzKQorICAgIHsKKyAgICAgICAgVmFyS2luZCBraW5kOworICAg
ICAgICBpZiAoYml0cyAmIFN0YWNrRmxhZykKKyAgICAgICAgICAgIGtpbmQgPSBTdGFja1Zhcktp
bmQ7CisgICAgICAgIGVsc2UgaWYgKGJpdHMgJiBDYXB0dXJlZEFyZ3VtZW50RmxhZykKKyAgICAg
ICAgICAgIGtpbmQgPSBDYXB0dXJlZEFyZ3VtZW50S2luZDsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAga2luZCA9IFNjb3BlVmFyS2luZDsKKyAgICAgICAgcmV0dXJuIFZhck9mZnNldDo6YXNz
ZW1ibGUoa2luZCwgc3RhdGljX2Nhc3Q8aW50PihiaXRzID4+IEZsYWdCaXRzKSk7CisgICAgfQor
ICAgIAorICAgIHN0YXRpYyBTY29wZU9mZnNldCBzY29wZU9mZnNldEZyb21CaXRzKGludHB0cl90
IGJpdHMpCisgICAgeworICAgICAgICBBU1NFUlQoIShiaXRzICYgU3RhY2tGbGFnKSk7CisgICAg
ICAgIEFTU0VSVCghKGJpdHMgJiBDYXB0dXJlZEFyZ3VtZW50RmxhZykpOworICAgICAgICByZXR1
cm4gU2NvcGVPZmZzZXQoc3RhdGljX2Nhc3Q8aW50PihiaXRzID4+IEZsYWdCaXRzKSk7CisgICAg
fQorCitwdWJsaWM6CisgICAgCiAgICAgLy8gVXNlIHRoZSBTeW1ib2xUYWJsZUVudHJ5OjpGYXN0
IGNsYXNzLCBlaXRoZXIgdmlhIGltcGxpY2l0IGNhc3Qgb3IgYnkgY2FsbGluZwogICAgIC8vIGdl
dEZhc3QoKSwgd2hlbiB5b3UgKDEpIG9ubHkgY2FyZSBhYm91dCBpc051bGwoKSwgZ2V0SW5kZXgo
KSwgYW5kIGlzUmVhZE9ubHkoKSwKICAgICAvLyBhbmQgKDIpIHlvdSBhcmUgaW4gYSBob3QgcGF0
aCB3aGVyZSB5b3UgbmVlZCB0byBtaW5pbWl6ZSB0aGUgbnVtYmVyIG9mIHRpbWVzCkBAIC0xMDcs
MTEgKzExMiwxOSBAQCBzdHJ1Y3QgU3ltYm9sVGFibGVFbnRyeSB7CiAgICAgICAgICAgICByZXR1
cm4gIShtX2JpdHMgJiB+U2xpbUZsYWcpOwogICAgICAgICB9CiAKLSAgICAgICAgaW50IGdldElu
ZGV4KCkgY29uc3QKKyAgICAgICAgVmFyT2Zmc2V0IHZhck9mZnNldCgpIGNvbnN0CiAgICAgICAg
IHsKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KG1fYml0cyA+PiBGbGFnQml0
cyk7CisgICAgICAgICAgICByZXR1cm4gdmFyT2Zmc2V0RnJvbUJpdHMobV9iaXRzKTsKICAgICAg
ICAgfQotICAgIAorICAgICAgICAKKyAgICAgICAgLy8gQXNzZXJ0cyBpZiB0aGUgb2Zmc2V0IGlz
IGFueXRoaW5nIGJ1dCBhIHNjb3BlIG9mZnNldC4gVGhpcyBzdHJ1Y3R1cmVzIHRoZSBhc3NlcnRp
b25zCisgICAgICAgIC8vIGluIGEgd2F5IHRoYXQgbWF5IHJlc3VsdCBpbiBiZXR0ZXIgY29kZSwg
ZXZlbiBpbiByZWxlYXNlLCB0aGFuIGRvaW5nCisgICAgICAgIC8vIHZhck9mZnNldCgpLnNjb3Bl
T2Zmc2V0KCkuCisgICAgICAgIFNjb3BlT2Zmc2V0IHNjb3BlT2Zmc2V0KCkgY29uc3QKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIHNjb3BlT2Zmc2V0RnJvbUJpdHMobV9iaXRzKTsKKyAg
ICAgICAgfQorICAgICAgICAKICAgICAgICAgYm9vbCBpc1JlYWRPbmx5KCkgY29uc3QKICAgICAg
ICAgewogICAgICAgICAgICAgcmV0dXJuIG1fYml0cyAmIFJlYWRPbmx5RmxhZzsKQEAgLTE0Miwx
OCArMTU1LDE4IEBAIHN0cnVjdCBTeW1ib2xUYWJsZUVudHJ5IHsKICAgICB7CiAgICAgfQogCi0g
ICAgU3ltYm9sVGFibGVFbnRyeShpbnQgaW5kZXgpCisgICAgU3ltYm9sVGFibGVFbnRyeShWYXJP
ZmZzZXQgb2Zmc2V0KQogICAgICAgICA6IG1fYml0cyhTbGltRmxhZykKICAgICB7Ci0gICAgICAg
IEFTU0VSVChpc1ZhbGlkSW5kZXgoaW5kZXgpKTsKLSAgICAgICAgcGFjayhpbmRleCwgZmFsc2Us
IGZhbHNlKTsKKyAgICAgICAgQVNTRVJUKGlzVmFsaWRWYXJPZmZzZXQob2Zmc2V0KSk7CisgICAg
ICAgIHBhY2sob2Zmc2V0LCBmYWxzZSwgZmFsc2UpOwogICAgIH0KIAotICAgIFN5bWJvbFRhYmxl
RW50cnkoaW50IGluZGV4LCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQorICAgIFN5bWJvbFRhYmxlRW50
cnkoVmFyT2Zmc2V0IG9mZnNldCwgdW5zaWduZWQgYXR0cmlidXRlcykKICAgICAgICAgOiBtX2Jp
dHMoU2xpbUZsYWcpCiAgICAgewotICAgICAgICBBU1NFUlQoaXNWYWxpZEluZGV4KGluZGV4KSk7
Ci0gICAgICAgIHBhY2soaW5kZXgsIGF0dHJpYnV0ZXMgJiBSZWFkT25seSwgYXR0cmlidXRlcyAm
IERvbnRFbnVtKTsKKyAgICAgICAgQVNTRVJUKGlzVmFsaWRWYXJPZmZzZXQob2Zmc2V0KSk7Cisg
ICAgICAgIHBhY2sob2Zmc2V0LCBhdHRyaWJ1dGVzICYgUmVhZE9ubHksIGF0dHJpYnV0ZXMgJiBE
b250RW51bSk7CiAgICAgfQogICAgIAogICAgIH5TeW1ib2xUYWJsZUVudHJ5KCkKQEAgLTE4MSw5
ICsxOTQsMTcgQEAgc3RydWN0IFN5bWJvbFRhYmxlRW50cnkgewogICAgICAgICByZXR1cm4gIShi
aXRzKCkgJiB+U2xpbUZsYWcpOwogICAgIH0KIAotICAgIGludCBnZXRJbmRleCgpIGNvbnN0Cisg
ICAgVmFyT2Zmc2V0IHZhck9mZnNldCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gdmFy
T2Zmc2V0RnJvbUJpdHMoYml0cygpKTsKKyAgICB9CisgICAgCisgICAgLy8gQXNzZXJ0cyBpZiB0
aGUgb2Zmc2V0IGlzIGFueXRoaW5nIGJ1dCBhIHNjb3BlIG9mZnNldC4gVGhpcyBzdHJ1Y3R1cmVz
IHRoZSBhc3NlcnRpb25zCisgICAgLy8gaW4gYSB3YXkgdGhhdCBtYXkgcmVzdWx0IGluIGJldHRl
ciBjb2RlLCBldmVuIGluIHJlbGVhc2UsIHRoYW4gZG9pbmcKKyAgICAvLyB2YXJPZmZzZXQoKS5z
Y29wZU9mZnNldCgpLgorICAgIFNjb3BlT2Zmc2V0IHNjb3BlT2Zmc2V0KCkgY29uc3QKICAgICB7
Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KGJpdHMoKSA+PiBGbGFnQml0cyk7Cisg
ICAgICAgIHJldHVybiBzY29wZU9mZnNldEZyb21CaXRzKGJpdHMoKSk7CiAgICAgfQogICAgIAog
ICAgIEFMV0FZU19JTkxJTkUgRmFzdCBnZXRGYXN0KCkgY29uc3QKQEAgLTIwOSw3ICsyMzAsNyBA
QCBzdHJ1Y3QgU3ltYm9sVGFibGVFbnRyeSB7CiAKICAgICB2b2lkIHNldEF0dHJpYnV0ZXModW5z
aWduZWQgYXR0cmlidXRlcykKICAgICB7Ci0gICAgICAgIHBhY2soZ2V0SW5kZXgoKSwgYXR0cmli
dXRlcyAmIFJlYWRPbmx5LCBhdHRyaWJ1dGVzICYgRG9udEVudW0pOworICAgICAgICBwYWNrKHZh
ck9mZnNldCgpLCBhdHRyaWJ1dGVzICYgUmVhZE9ubHksIGF0dHJpYnV0ZXMgJiBEb250RW51bSk7
CiAgICAgfQogCiAgICAgYm9vbCBpc1JlYWRPbmx5KCkgY29uc3QKQEAgLTI0Miw3ICsyNjMsOSBA
QCBwcml2YXRlOgogICAgIHN0YXRpYyBjb25zdCBpbnRwdHJfdCBSZWFkT25seUZsYWcgPSAweDI7
CiAgICAgc3RhdGljIGNvbnN0IGludHB0cl90IERvbnRFbnVtRmxhZyA9IDB4NDsKICAgICBzdGF0
aWMgY29uc3QgaW50cHRyX3QgTm90TnVsbEZsYWcgPSAweDg7Ci0gICAgc3RhdGljIGNvbnN0IGlu
dHB0cl90IEZsYWdCaXRzID0gNDsKKyAgICBzdGF0aWMgY29uc3QgaW50cHRyX3QgU3RhY2tGbGFn
ID0gMHgxMDsKKyAgICBzdGF0aWMgY29uc3QgaW50cHRyX3QgQ2FwdHVyZWRBcmd1bWVudEZsYWcg
PSAweDIwOworICAgIHN0YXRpYyBjb25zdCBpbnRwdHJfdCBGbGFnQml0cyA9IDY7CiAgICAgCiAg
ICAgY2xhc3MgRmF0RW50cnkgewogICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKQEAg
LTMwOSwyMCArMzMyLDM0IEBAIHByaXZhdGU6CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lk
IGZyZWVGYXRFbnRyeVNsb3coKTsKIAotICAgIHZvaWQgcGFjayhpbnQgaW5kZXgsIGJvb2wgcmVh
ZE9ubHksIGJvb2wgZG9udEVudW0pCisgICAgdm9pZCBwYWNrKFZhck9mZnNldCBvZmZzZXQsIGJv
b2wgcmVhZE9ubHksIGJvb2wgZG9udEVudW0pCiAgICAgewogICAgICAgICBBU1NFUlQoIWlzRmF0
KCkpOwogICAgICAgICBpbnRwdHJfdCYgYml0c1JlZiA9IGJpdHMoKTsKLSAgICAgICAgYml0c1Jl
ZiA9IChzdGF0aWNfY2FzdDxpbnRwdHJfdD4oaW5kZXgpIDw8IEZsYWdCaXRzKSB8IE5vdE51bGxG
bGFnIHwgU2xpbUZsYWc7CisgICAgICAgIGJpdHNSZWYgPQorICAgICAgICAgICAgKHN0YXRpY19j
YXN0PGludHB0cl90PihvZmZzZXQucmF3T2Zmc2V0KCkpIDw8IEZsYWdCaXRzKSB8IE5vdE51bGxG
bGFnIHwgU2xpbUZsYWc7CiAgICAgICAgIGlmIChyZWFkT25seSkKICAgICAgICAgICAgIGJpdHNS
ZWYgfD0gUmVhZE9ubHlGbGFnOwogICAgICAgICBpZiAoZG9udEVudW0pCiAgICAgICAgICAgICBi
aXRzUmVmIHw9IERvbnRFbnVtRmxhZzsKKyAgICAgICAgc3dpdGNoIChvZmZzZXQua2luZCgpKSB7
CisgICAgICAgIGNhc2UgU2NvcGVWYXJLaW5kOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgU3RhY2tWYXJLaW5kOgorICAgICAgICAgICAgYml0c1JlZiB8PSBTdGFja0ZsYWc7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDYXB0dXJlZEFyZ3VtZW50S2luZDoKKyAg
ICAgICAgICAgIGJpdHNSZWYgfD0gQ2FwdHVyZWRBcmd1bWVudEZsYWc7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgIH0KICAgICAKLSAg
ICBib29sIGlzVmFsaWRJbmRleChpbnQgaW5kZXgpCisgICAgc3RhdGljIGJvb2wgaXNWYWxpZFZh
ck9mZnNldChWYXJPZmZzZXQgb2Zmc2V0KQogICAgIHsKLSAgICAgICAgcmV0dXJuICgoc3RhdGlj
X2Nhc3Q8aW50cHRyX3Q+KGluZGV4KSA8PCBGbGFnQml0cykgPj4gRmxhZ0JpdHMpID09IHN0YXRp
Y19jYXN0PGludHB0cl90PihpbmRleCk7CisgICAgICAgIHJldHVybiAoKHN0YXRpY19jYXN0PGlu
dHB0cl90PihvZmZzZXQucmF3T2Zmc2V0KCkpIDw8IEZsYWdCaXRzKSA+PiBGbGFnQml0cykgPT0g
c3RhdGljX2Nhc3Q8aW50cHRyX3Q+KG9mZnNldC5yYXdPZmZzZXQoKSk7CiAgICAgfQogCiAgICAg
aW50cHRyX3QgbV9iaXRzOwpAQCAtMzUxLDcgKzM4OCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMg
U3ltYm9sVGFibGUqIGNyZWF0ZU5hbWVTY29wZVRhYmxlKFZNJiB2bSwgY29uc3QgSWRlbnRpZmll
ciYgaWRlbnQsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCiAgICAgewogICAgICAgICBTeW1ib2xUYWJs
ZSogcmVzdWx0ID0gY3JlYXRlKHZtKTsKLSAgICAgICAgcmVzdWx0LT5hZGQoaWRlbnQuaW1wbCgp
LCBTeW1ib2xUYWJsZUVudHJ5KC0xLCBhdHRyaWJ1dGVzKSk7CisgICAgICAgIHJlc3VsdC0+YWRk
KGlkZW50LmltcGwoKSwgU3ltYm9sVGFibGVFbnRyeShWYXJPZmZzZXQoU2NvcGVPZmZzZXQoMCkp
LCBhdHRyaWJ1dGVzKSk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgIApAQCAt
NDIzLDggKzQ2MCwyOSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBzaXplKGxvY2tlcik7CiAg
ICAgfQogICAgIAorICAgIFNjb3BlT2Zmc2V0IG1heFNjb3BlT2Zmc2V0KCkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBtX21heFNjb3BlT2Zmc2V0OworICAgIH0KKyAgICAKKyAgICB1bnNp
Z25lZCBzY29wZVNpemUoKSBjb25zdAorICAgIHsKKyAgICAgICAgU2NvcGVPZmZzZXQgbWF4U2Nv
cGVPZmZzZXQgPSB0aGlzLT5tYXhTY29wZU9mZnNldCgpOworICAgICAgICAKKyAgICAgICAgLy8g
RG8gc29tZSBjYWxjdWxhdGlvbiB0aGF0IHJlbGllcyBvbiBpbnZhbGlkIHNjb3BlIG9mZnNldCBw
bHVzIG9uZSBiZWluZyB6ZXJvLgorICAgICAgICB1bnNpZ25lZCBmYXN0UmVzdWx0ID0gbWF4U2Nv
cGVPZmZzZXQub2Zmc2V0VW5jaGVja2VkKCkgKyAxOworICAgICAgICAKKyAgICAgICAgLy8gQXNz
ZXJ0IHRoYXQgdGhpcyB3b3Jrcy4KKyAgICAgICAgQVNTRVJUKGZhc3RSZXN1bHQgPT0gKCFtYXhT
Y29wZU9mZnNldCA/IDAgOiBtYXhTY29wZU9mZnNldC5vZmZzZXQoKSArIDEpKTsKKyAgICAgICAg
CisgICAgICAgIHJldHVybiBmYXN0UmVzdWx0OworICAgIH0KKyAgICAKICAgICBNYXA6OkFkZFJl
c3VsdCBhZGQoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYsIFN0cmluZ0ltcGwqIGtleSwgY29u
c3QgU3ltYm9sVGFibGVFbnRyeSYgZW50cnkpCiAgICAgeworICAgICAgICBpZiAoZW50cnkudmFy
T2Zmc2V0KCkuaXNTY29wZSgpCisgICAgICAgICAgICAmJiAoIW1fbWF4U2NvcGVPZmZzZXQgfHwg
bV9tYXhTY29wZU9mZnNldCA8IGVudHJ5LnNjb3BlT2Zmc2V0KCkpKQorICAgICAgICAgICAgbV9t
YXhTY29wZU9mZnNldCA9IGVudHJ5LnNjb3BlT2Zmc2V0KCk7CiAgICAgICAgIHJldHVybiBtX21h
cC5hZGQoa2V5LCBlbnRyeSk7CiAgICAgfQogICAgIApAQCAtNDU2LDYgKzUxNCw0NSBAQCBwdWJs
aWM6CiAgICAgICAgIHJldHVybiBjb250YWlucyhsb2NrZXIsIGtleSk7CiAgICAgfQogICAgIAor
ICAgIC8vIFRoZSBwcmluY2lwbGUgYmVoaW5kIFNjb3BlZEFyZ3VtZW50c1RhYmxlIG1vZGlmaWNh
dGlvbnMgaXMgdGhhdCB3ZSB3aWxsIGNyZWF0ZSBvbmUgYW5kCisgICAgLy8gbGVhdmUgaXQgdW5s
b2NrZWQgLSB0aGVyZWJ5IGFsbG93aW5nIGluLXBsYWNlIGNoYW5nZXMgLSB1bnRpbCBzb21lb25l
IGFza3MgZm9yIGEgcG9pbnRlciB0bworICAgIC8vIHRoZSB0YWJsZS4gVGhlbiwgd2Ugd2lsbCBs
b2NrIGl0LiBUaGVuIGJvdGggb3VyIGZ1dHVyZSBjaGFuZ2VzIGFuZCB0aGVpciBmdXR1cmUgY2hh
bmdlcworICAgIC8vIHdpbGwgZmlyc3QgaGF2ZSB0byBtYWtlIGEgY29weS4gVGhpcyBkaXNjaXBs
aW5lIG1lYW5zIHRoYXQgdXN1YWxseSB3aGVuIHdlIGNyZWF0ZSBhCisgICAgLy8gU2NvcGVkQXJn
dW1lbnRzIG9iamVjdCwgd2UgZG9uJ3QgaGF2ZSB0byBtYWtlIGEgY29weSBvZiB0aGUgU2NvcGVk
QXJndW1lbnRzVGFibGUgLSBpbnN0ZWFkCisgICAgLy8gd2UganVzdCB0YWtlIGEgcmVmZXJlbmNl
IHRvIG9uZSB0aGF0IHdlIGFscmVhZHkgaGF2ZS4KKyAgICAKKyAgICB1aW50MzJfdCBhcmd1bWVu
dHNMZW5ndGgoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKCFtX2FyZ3VtZW50cykKKyAgICAg
ICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbV9hcmd1bWVudHMtPmxlbmd0aCgpOwor
ICAgIH0KKyAgICAKKyAgICB2b2lkIHNldEFyZ3VtZW50c0xlbmd0aChWTSYgdm0sIHVpbnQzMl90
IGxlbmd0aCkKKyAgICB7CisgICAgICAgIGlmIChVTkxJS0VMWSghbV9hcmd1bWVudHMpKQorICAg
ICAgICAgICAgbV9hcmd1bWVudHMuc2V0KHZtLCB0aGlzLCBTY29wZWRBcmd1bWVudHNUYWJsZTo6
Y3JlYXRlKHZtKSk7CisgICAgICAgIG1fYXJndW1lbnRzLnNldCh2bSwgdGhpcywgbV9hcmd1bWVu
dHMtPnNldExlbmd0aCh2bSwgbGVuZ3RoKSk7CisgICAgfQorICAgIAorICAgIFNjb3BlT2Zmc2V0
IGFyZ3VtZW50T2Zmc2V0KHVpbnQzMl90IGkpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlRf
V0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihtX2FyZ3VtZW50cyk7CisgICAgICAgIHJldHVybiBt
X2FyZ3VtZW50cy0+Z2V0KGkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNldEFyZ3VtZW50T2Zm
c2V0KFZNJiB2bSwgdWludDMyX3QgaSwgU2NvcGVPZmZzZXQgb2Zmc2V0KQorICAgIHsKKyAgICAg
ICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04obV9hcmd1bWVudHMpOworICAgICAg
ICBtX2FyZ3VtZW50cy5zZXQodm0sIHRoaXMsIG1fYXJndW1lbnRzLT5zZXQodm0sIGksIG9mZnNl
dCkpOworICAgIH0KKyAgICAKKyAgICBTY29wZWRBcmd1bWVudHNUYWJsZSogYXJndW1lbnRzKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIG1fYXJndW1lbnRzLT5sb2NrKCk7CisgICAgICAgIHJldHVy
biBtX2FyZ3VtZW50cy5nZXQoKTsKKyAgICB9CisgICAgCiAgICAgR2xvYmFsVmFyaWFibGVJRCB1
bmlxdWVJREZvclZhcmlhYmxlKGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImLCBTdHJpbmdJbXBs
KiBrZXksIFZNJiB2bSk7CiAgICAgR2xvYmFsVmFyaWFibGVJRCB1bmlxdWVJREZvclJlZ2lzdGVy
KGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImIGxvY2tlciwgaW50IHJlZ2lzdGVySW5kZXgsIFZN
JiB2bSk7CiAgICAgUmVmUHRyPFR5cGVTZXQ+IGdsb2JhbFR5cGVTZXRGb3JSZWdpc3Rlcihjb25z
dCBDb25jdXJyZW50SklUTG9ja2VyJiBsb2NrZXIsIGludCByZWdpc3RlckluZGV4LCBWTSYgdm0p
OwpAQCAtNDY0LDI4ICs1NjEsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCB1c2VzTm9uU3RyaWN0RXZh
bCgpIHsgcmV0dXJuIG1fdXNlc05vblN0cmljdEV2YWw7IH0KICAgICB2b2lkIHNldFVzZXNOb25T
dHJpY3RFdmFsKGJvb2wgdXNlc05vblN0cmljdEV2YWwpIHsgbV91c2VzTm9uU3RyaWN0RXZhbCA9
IHVzZXNOb25TdHJpY3RFdmFsOyB9CiAKLSAgICBpbnQgY2FwdHVyZVN0YXJ0KCkgY29uc3QgeyBy
ZXR1cm4gbV9jYXB0dXJlU3RhcnQ7IH0KLSAgICB2b2lkIHNldENhcHR1cmVTdGFydChpbnQgY2Fw
dHVyZVN0YXJ0KSB7IG1fY2FwdHVyZVN0YXJ0ID0gY2FwdHVyZVN0YXJ0OyB9Ci0KLSAgICBpbnQg
Y2FwdHVyZUVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fY2FwdHVyZUVuZDsgfQotICAgIHZvaWQgc2V0
Q2FwdHVyZUVuZChpbnQgY2FwdHVyZUVuZCkgeyBtX2NhcHR1cmVFbmQgPSBjYXB0dXJlRW5kOyB9
Ci0KLSAgICBpbnQgY2FwdHVyZUNvdW50KCkgY29uc3QgeyByZXR1cm4gLShtX2NhcHR1cmVFbmQg
LSBtX2NhcHR1cmVTdGFydCk7IH0KLSAgICAKLSAgICBib29sIGlzQ2FwdHVyZWQoaW50IG9wZXJh
bmQpCi0gICAgewotICAgICAgICByZXR1cm4gb3BlcmFuZCA8PSBjYXB0dXJlU3RhcnQoKSAmJiBv
cGVyYW5kID4gY2FwdHVyZUVuZCgpOwotICAgIH0KLQotICAgIGludCBwYXJhbWV0ZXJDb3VudCgp
IHsgcmV0dXJuIG1fcGFyYW1ldGVyQ291bnRJbmNsdWRpbmdUaGlzIC0gMTsgfQotICAgIGludCBw
YXJhbWV0ZXJDb3VudEluY2x1ZGluZ1RoaXMoKSB7IHJldHVybiBtX3BhcmFtZXRlckNvdW50SW5j
bHVkaW5nVGhpczsgfQotICAgIHZvaWQgc2V0UGFyYW1ldGVyQ291bnRJbmNsdWRpbmdUaGlzKGlu
dCBwYXJhbWV0ZXJDb3VudEluY2x1ZGluZ1RoaXMpIHsgbV9wYXJhbWV0ZXJDb3VudEluY2x1ZGlu
Z1RoaXMgPSBwYXJhbWV0ZXJDb3VudEluY2x1ZGluZ1RoaXM7IH0KLQotICAgIC8vIDAgaWYgd2Ug
ZG9uJ3QgY2FwdHVyZSBhbnkgYXJndW1lbnRzOyBwYXJhbWV0ZXJDb3VudCgpIGluIGxlbmd0aCBp
ZiB3ZSBkby4KLSAgICBjb25zdCBTbG93QXJndW1lbnQqIHNsb3dBcmd1bWVudHMoKSB7IHJldHVy
biBtX3Nsb3dBcmd1bWVudHMuZ2V0KCk7IH0KLSAgICB2b2lkIHNldFNsb3dBcmd1bWVudHMoc3Rk
Ojp1bmlxdWVfcHRyPFNsb3dBcmd1bWVudFtdPiBzbG93QXJndW1lbnRzKSB7IG1fc2xvd0FyZ3Vt
ZW50cyA9IFdURjo6bW92ZShzbG93QXJndW1lbnRzKTsgfQotICAgIAotICAgIFN5bWJvbFRhYmxl
KiBjbG9uZUNhcHR1cmVkTmFtZXMoVk0mKTsKKyAgICBTeW1ib2xUYWJsZSogY2xvbmVTY29wZVBh
cnQoVk0mKTsKIAogICAgIHZvaWQgcHJlcGFyZUZvclR5cGVQcm9maWxpbmcoY29uc3QgQ29uY3Vy
cmVudEpJVExvY2tlciYpOwogCkBAIC01MTMsNiArNTg5LDggQEAgcHJpdmF0ZToKICAgICB+U3lt
Ym9sVGFibGUoKTsKIAogICAgIE1hcCBtX21hcDsKKyAgICBTY29wZU9mZnNldCBtX21heFNjb3Bl
T2Zmc2V0OworICAgIAogICAgIHN0cnVjdCBUeXBlUHJvZmlsaW5nUmFyZURhdGEgewogICAgICAg
ICBVbmlxdWVJRE1hcCBtX3VuaXF1ZUlETWFwOwogICAgICAgICBSZWdpc3RlclRvVmFyaWFibGVN
YXAgbV9yZWdpc3RlclRvVmFyaWFibGVNYXA7CkBAIC01MjAsMTMgKzU5OCw5IEBAIHByaXZhdGU6
CiAgICAgfTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8VHlwZVByb2ZpbGluZ1JhcmVEYXRhPiBtX3R5
cGVQcm9maWxpbmdSYXJlRGF0YTsKIAotICAgIGludCBtX3BhcmFtZXRlckNvdW50SW5jbHVkaW5n
VGhpczsKICAgICBib29sIG1fdXNlc05vblN0cmljdEV2YWw7Ci0KLSAgICBpbnQgbV9jYXB0dXJl
U3RhcnQ7Ci0gICAgaW50IG1fY2FwdHVyZUVuZDsKLQotICAgIHN0ZDo6dW5pcXVlX3B0cjxTbG93
QXJndW1lbnRbXT4gbV9zbG93QXJndW1lbnRzOworICAgIAorICAgIFdyaXRlQmFycmllcjxTY29w
ZWRBcmd1bWVudHNUYWJsZT4gbV9hcmd1bWVudHM7CiAgICAgCiAgICAgc3RkOjp1bmlxdWVfcHRy
PFdhdGNocG9pbnRDbGVhbnVwPiBtX3dhdGNocG9pbnRDbGVhbnVwOwogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9WYXJPZmZzZXQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Zhck9mZnNldC5jcHAJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WYXJPZmZzZXQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlZhck9mZnNldC5oIgorCitu
YW1lc3BhY2UgSlNDIHsKKwordm9pZCBWYXJPZmZzZXQ6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkg
Y29uc3QKK3sKKyAgICBzd2l0Y2ggKG1fa2luZCkgeworICAgIGNhc2UgSW52YWxpZFZhcktpbmQ6
CisgICAgICAgIG91dC5wcmludCgiaW52YWxpZCIpOworICAgICAgICByZXR1cm47CisgICAgY2Fz
ZSBTY29wZVZhcktpbmQ6CisgICAgICAgIG91dC5wcmludChzY29wZU9mZnNldCgpKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIGNhc2UgU3RhY2tWYXJLaW5kOgorICAgICAgICBvdXQucHJpbnQoc3Rh
Y2tPZmZzZXQoKSk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENhcHR1cmVkQXJndW1lbnRL
aW5kOgorICAgICAgICBvdXQucHJpbnQoY2FwdHVyZWRBcmd1bWVudE9mZnNldCgpKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBKU0MKKworbmFtZXNwYWNlIFdURiB7CisKK3VzaW5nIG5hbWVzcGFj
ZSBKU0M7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBWYXJLaW5kIHZh
cktpbmQpCit7CisgICAgc3dpdGNoICh2YXJLaW5kKSB7CisgICAgY2FzZSBJbnZhbGlkVmFyS2lu
ZDoKKyAgICAgICAgb3V0LnByaW50KCJJbnZhbGlkIik7CisgICAgICAgIHJldHVybjsKKyAgICBj
YXNlIFNjb3BlVmFyS2luZDoKKyAgICAgICAgb3V0LnByaW50KCJTY29wZSIpOworICAgICAgICBy
ZXR1cm47CisgICAgY2FzZSBTdGFja1ZhcktpbmQ6CisgICAgICAgIG91dC5wcmludCgiU3RhY2si
KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ2FwdHVyZWRBcmd1bWVudEtpbmQ6CisgICAg
ICAgIG91dC5wcmludCgiQ2FwdHVyZWRBcmd1bWVudCIpOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdURgorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WYXJPZmZzZXQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WYXJPZmZzZXQuaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Zhck9mZnNldC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjE0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgVmFyT2Zmc2V0X2gKKyNkZWZpbmUgVmFy
T2Zmc2V0X2gKKworI2luY2x1ZGUgIkNhcHR1cmVkQXJndW1lbnRPZmZzZXQuaCIKKyNpbmNsdWRl
ICJTY29wZU9mZnNldC5oIgorI2luY2x1ZGUgIlZpcnR1YWxSZWdpc3Rlci5oIgorCituYW1lc3Bh
Y2UgSlNDIHsKKworZW51bSBWYXJLaW5kIDogdWludDhfdCB7CisgICAgSW52YWxpZFZhcktpbmQs
CisgICAgU2NvcGVWYXJLaW5kLAorICAgIFN0YWNrVmFyS2luZCwKKyAgICBDYXB0dXJlZEFyZ3Vt
ZW50S2luZAorfTsKKworY2xhc3MgVmFyT2Zmc2V0IHsKK3B1YmxpYzoKKyAgICBWYXJPZmZzZXQo
KQorICAgICAgICA6IG1fa2luZChJbnZhbGlkVmFyS2luZCkKKyAgICAgICAgLCBtX29mZnNldChV
SU5UX01BWCkKKyAgICB7CisgICAgfQorICAgIAorICAgIGV4cGxpY2l0IFZhck9mZnNldChWaXJ0
dWFsUmVnaXN0ZXIgc3RhY2tPZmZzZXQpCisgICAgeworICAgICAgICBpZiAoIXN0YWNrT2Zmc2V0
LmlzVmFsaWQoKSkgeworICAgICAgICAgICAgbV9raW5kID0gSW52YWxpZFZhcktpbmQ7CisgICAg
ICAgICAgICBtX29mZnNldCA9IFVJTlRfTUFYOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgbV9raW5kID0gU3RhY2tWYXJLaW5kOworICAgICAgICAgICAgbV9vZmZzZXQgPSBzdGFja09m
ZnNldC5vZmZzZXQoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBleHBsaWNpdCBWYXJP
ZmZzZXQoU2NvcGVPZmZzZXQgc2NvcGVPZmZzZXQpCisgICAgeworICAgICAgICBpZiAoIXNjb3Bl
T2Zmc2V0KSB7CisgICAgICAgICAgICBtX2tpbmQgPSBJbnZhbGlkVmFyS2luZDsKKyAgICAgICAg
ICAgIG1fb2Zmc2V0ID0gVUlOVF9NQVg7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBt
X2tpbmQgPSBTY29wZVZhcktpbmQ7CisgICAgICAgICAgICBtX29mZnNldCA9IHNjb3BlT2Zmc2V0
Lm9mZnNldCgpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIGV4cGxpY2l0IFZhck9mZnNl
dChDYXB0dXJlZEFyZ3VtZW50T2Zmc2V0IGNhcHR1cmVkQXJndW1lbnRPZmZzZXQpCisgICAgewor
ICAgICAgICBpZiAoIWNhcHR1cmVkQXJndW1lbnRPZmZzZXQpIHsKKyAgICAgICAgICAgIG1fa2lu
ZCA9IEludmFsaWRWYXJLaW5kOworICAgICAgICAgICAgbV9vZmZzZXQgPSBVSU5UX01BWDsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1fa2luZCA9IENhcHR1cmVkQXJndW1lbnRLaW5k
OworICAgICAgICAgICAgbV9vZmZzZXQgPSBjYXB0dXJlZEFyZ3VtZW50T2Zmc2V0Lm9mZnNldCgp
OworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHN0YXRpYyBWYXJPZmZzZXQgYXNzZW1ibGUo
VmFyS2luZCBraW5kLCB1bnNpZ25lZCBvZmZzZXQpCisgICAgeworICAgICAgICBWYXJPZmZzZXQg
cmVzdWx0OworICAgICAgICByZXN1bHQubV9raW5kID0ga2luZDsKKyAgICAgICAgcmVzdWx0Lm1f
b2Zmc2V0ID0gb2Zmc2V0OworICAgICAgICByZXN1bHQuY2hlY2tTYW5pdHkoKTsKKyAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc1ZhbGlkKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBtX2tpbmQgIT0gSW52YWxpZFZhcktpbmQ7CisgICAgfQorICAg
IAorICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhaXNW
YWxpZCgpOworICAgIH0KKyAgICAKKyAgICBWYXJLaW5kIGtpbmQoKSBjb25zdCB7IHJldHVybiBt
X2tpbmQ7IH0KKyAgICAKKyAgICBib29sIGlzU3RhY2soKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIG1fa2luZCA9PSBTdGFja1ZhcktpbmQ7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNT
Y29wZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9raW5kID09IFNjb3BlVmFyS2lu
ZDsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc0NhcHR1cmVkQXJndW1lbnQoKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIG1fa2luZCA9PSBDYXB0dXJlZEFyZ3VtZW50S2luZDsKKyAgICB9
CisgICAgCisgICAgVmlydHVhbFJlZ2lzdGVyIHN0YWNrT2Zmc2V0VW5jaGVja2VkKCkgY29uc3QK
KyAgICB7CisgICAgICAgIGlmICghaXNTdGFjaygpKQorICAgICAgICAgICAgcmV0dXJuIFZpcnR1
YWxSZWdpc3RlcigpOworICAgICAgICByZXR1cm4gVmlydHVhbFJlZ2lzdGVyKG1fb2Zmc2V0KTsK
KyAgICB9CisgICAgCisgICAgU2NvcGVPZmZzZXQgc2NvcGVPZmZzZXRVbmNoZWNrZWQoKSBjb25z
dAorICAgIHsKKyAgICAgICAgaWYgKCFpc1Njb3BlKCkpCisgICAgICAgICAgICByZXR1cm4gU2Nv
cGVPZmZzZXQoKTsKKyAgICAgICAgcmV0dXJuIFNjb3BlT2Zmc2V0KG1fb2Zmc2V0KTsKKyAgICB9
CisgICAgCisgICAgQ2FwdHVyZWRBcmd1bWVudE9mZnNldCBjYXB0dXJlZEFyZ3VtZW50T2Zmc2V0
VW5jaGVja2VkKCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmICghaXNDYXB0dXJlZEFyZ3VtZW50
KCkpCisgICAgICAgICAgICByZXR1cm4gQ2FwdHVyZWRBcmd1bWVudE9mZnNldCgpOworICAgICAg
ICByZXR1cm4gQ2FwdHVyZWRBcmd1bWVudE9mZnNldChtX29mZnNldCk7CisgICAgfQorICAgIAor
ICAgIFZpcnR1YWxSZWdpc3RlciBzdGFja09mZnNldCgpIGNvbnN0CisgICAgeworICAgICAgICBB
U1NFUlQoaXNTdGFjaygpKTsKKyAgICAgICAgcmV0dXJuIFZpcnR1YWxSZWdpc3RlcihtX29mZnNl
dCk7CisgICAgfQorICAgIAorICAgIFNjb3BlT2Zmc2V0IHNjb3BlT2Zmc2V0KCkgY29uc3QKKyAg
ICB7CisgICAgICAgIEFTU0VSVChpc1Njb3BlKCkpOworICAgICAgICByZXR1cm4gU2NvcGVPZmZz
ZXQobV9vZmZzZXQpOworICAgIH0KKyAgICAKKyAgICBDYXB0dXJlZEFyZ3VtZW50T2Zmc2V0IGNh
cHR1cmVkQXJndW1lbnRPZmZzZXQoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzQ2Fw
dHVyZWRBcmd1bWVudCgpKTsKKyAgICAgICAgcmV0dXJuIENhcHR1cmVkQXJndW1lbnRPZmZzZXQo
bV9vZmZzZXQpOworICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCByYXdPZmZzZXQoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgQVNTRVJUKGlzVmFsaWQoKSk7CisgICAgICAgIHJldHVybiBtX29mZnNl
dDsKKyAgICB9CisgICAgCisgICAgdm9pZCBjaGVja1Nhbml0eSgpIGNvbnN0CisgICAgeworICAg
ICAgICBpZiAoQVNTRVJUX0RJU0FCTEVEKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAK
KyAgICAgICAgc3dpdGNoIChtX2tpbmQpIHsKKyAgICAgICAgY2FzZSBJbnZhbGlkVmFyS2luZDoK
KyAgICAgICAgICAgIEFTU0VSVChtX29mZnNldCA9PSBVSU5UX01BWCk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIGNhc2UgU2NvcGVWYXJLaW5kOgorICAgICAgICAgICAgQVNTRVJUKHNj
b3BlT2Zmc2V0KCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIFN0YWNrVmFy
S2luZDoKKyAgICAgICAgICAgIEFTU0VSVChzdGFja09mZnNldCgpKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgY2FzZSBDYXB0dXJlZEFyZ3VtZW50S2luZDoKKyAgICAgICAgICAgIEFT
U0VSVChjYXB0dXJlZEFyZ3VtZW50T2Zmc2V0KCkpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9Cisg
ICAgCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFZhck9mZnNldCYgb3RoZXIpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gbV9raW5kID09IG90aGVyLm1fa2luZAorICAgICAgICAgICAg
JiYgbV9vZmZzZXQgPT0gb3RoZXIubV9vZmZzZXQ7CisgICAgfQorICAgIAorICAgIGJvb2wgb3Bl
cmF0b3IhPShjb25zdCBWYXJPZmZzZXQmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRT
dHJlYW0mKSBjb25zdDsKKyAgICAKK3ByaXZhdGU6CisgICAgVmFyS2luZCBtX2tpbmQ7CisgICAg
dW5zaWduZWQgbV9vZmZzZXQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworbmFtZXNwYWNl
IFdURiB7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6VmFyS2luZCk7
CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gVmFyT2Zmc2V0X2gKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVmFyaWFibGVMb2NhdGlvbi5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZhcmlhYmxlTG9jYXRpb24uaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZhcmlhYmxlTG9j
YXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM4IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgVmFyaWFibGVMb2NhdGlvbl9o
CisjZGVmaW5lIFZhcmlhYmxlTG9jYXRpb25faAorCisjaW5jbHVkZSAiVmlydHVhbFJlZ2lzdGVy
LmgiCisKK25hbWVzcGFjZSBKU0MgeworCisKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRp
ZiAvLyBWYXJpYWJsZUxvY2F0aW9uX2gKKwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>247515</attachid>
            <date>2015-02-27 08:25:18 -0800</date>
            <delta_ts>2015-02-27 13:15:42 -0800</delta_ts>
            <desc>doing real damage to bytecode generator</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>185930</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2Vt
Ymxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJz
dHJhY3RNYWNyb0Fzc2VtYmxlci5oCShyZXZpc2lvbiAxODA3MjApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMjA1LDYgKzIwNSwxMSBAQCBwdWJsaWM6CiAgICAgICAgIFJlZ2lzdGVySUQgaW5kZXg7
CiAgICAgICAgIFNjYWxlIHNjYWxlOwogICAgICAgICBpbnQzMl90IG9mZnNldDsKKyAgICAgICAg
CisgICAgICAgIEJhc2VJbmRleCB3aXRoT2Zmc2V0KGludDMyX3QgYWRkaXRpb25hbE9mZnNldCkK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEJhc2VJbmRleChiYXNlLCBpbmRleCwgc2Nh
bGUsIG9mZnNldCArIGFkZGl0aW9uYWxPZmZzZXQpOworICAgICAgICB9CiAgICAgfTsKIAogICAg
IC8vIEFic29sdXRlQWRkcmVzczoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9CeVZhbEluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQnlWYWxJbmZvLmgJKHJldmlzaW9uIDE4MDcyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9CeVZhbEluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDEsNiArNDEsOCBAQCBlbnVt
IEpJVEFycmF5TW9kZSB7CiAgICAgSklURG91YmxlLAogICAgIEpJVENvbnRpZ3VvdXMsCiAgICAg
SklUQXJyYXlTdG9yYWdlLAorICAgIEpJVERpcmVjdEFyZ3VtZW50cywKKyAgICBKSVRTY29wZWRB
cmd1bWVudHMsCiAgICAgSklUSW50OEFycmF5LAogICAgIEpJVEludDE2QXJyYXksCiAgICAgSklU
SW50MzJBcnJheSwKQEAgLTY1LDYgKzY3LDE3IEBAIGlubGluZSBib29sIGlzT3B0aW1pemFibGVJ
bmRleGluZ1R5cGUoSW4KICAgICB9CiB9CiAKK2lubGluZSBib29sIGhhc09wdGltaXphYmxlSW5k
ZXhpbmdGb3JKU1R5cGUoSlNUeXBlIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAg
Y2FzZSBEaXJlY3RBcmd1bWVudHNUeXBlOgorICAgIGNhc2UgU2NvcGVkQXJndW1lbnRzVHlwZToK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KK30KKwogaW5saW5lIGJvb2wgaGFzT3B0aW1pemFibGVJbmRleGluZ0ZvckNsYXNz
SW5mbyhjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbykKIHsKICAgICByZXR1cm4gaXNUeXBlZFZp
ZXcoY2xhc3NJbmZvLT50eXBlZEFycmF5U3RvcmFnZVR5cGUpOwpAQCAtNzMsNiArODYsNyBAQCBp
bmxpbmUgYm9vbCBoYXNPcHRpbWl6YWJsZUluZGV4aW5nRm9yQ2xhCiBpbmxpbmUgYm9vbCBoYXNP
cHRpbWl6YWJsZUluZGV4aW5nKFN0cnVjdHVyZSogc3RydWN0dXJlKQogewogICAgIHJldHVybiBp
c09wdGltaXphYmxlSW5kZXhpbmdUeXBlKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpCisgICAg
ICAgIHx8IGhhc09wdGltaXphYmxlSW5kZXhpbmdGb3JKU1R5cGUoc3RydWN0dXJlLT50eXBlSW5m
bygpLnR5cGUoKSkKICAgICAgICAgfHwgaGFzT3B0aW1pemFibGVJbmRleGluZ0ZvckNsYXNzSW5m
byhzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpKTsKIH0KIApAQCAtOTMsNiArMTA3LDE5IEBAIGlubGlu
ZSBKSVRBcnJheU1vZGUgaml0QXJyYXlNb2RlRm9ySW5kZXgKICAgICB9CiB9CiAKK2lubGluZSBK
SVRBcnJheU1vZGUgaml0QXJyYXlNb2RlRm9ySlNUeXBlKEpTVHlwZSB0eXBlKQoreworICAgIHN3
aXRjaCAodHlwZSkgeworICAgIGNhc2UgRGlyZWN0QXJndW1lbnRzVHlwZToKKyAgICAgICAgcmV0
dXJuIEpJVERpcmVjdEFyZ3VtZW50czsKKyAgICBjYXNlIFNjb3BlZEFyZ3VtZW50c1R5cGU6Cisg
ICAgICAgIHJldHVybiBKSVRTY29wZWRBcmd1bWVudHM7CisgICAgZGVmYXVsdDoKKyAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIEpJVENvbnRpZ3Vv
dXM7CisgICAgfQorfQorCiBpbmxpbmUgSklUQXJyYXlNb2RlIGppdEFycmF5TW9kZUZvckNsYXNz
SW5mbyhjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbykKIHsKICAgICBzd2l0Y2ggKGNsYXNzSW5m
by0+dHlwZWRBcnJheVN0b3JhZ2VUeXBlKSB7CkBAIC0xMjAsNiArMTQ3LDE5IEBAIGlubGluZSBK
SVRBcnJheU1vZGUgaml0QXJyYXlNb2RlRm9yQ2xhc3MKICAgICB9CiB9CiAKK2lubGluZSBib29s
IGppdEFycmF5TW9kZVBlcm1pdHNQdXQoSklUQXJyYXlNb2RlIG1vZGUpCit7CisgICAgc3dpdGNo
IChtb2RlKSB7CisgICAgY2FzZSBKSVREaXJlY3RBcmd1bWVudHM6CisgICAgY2FzZSBKSVRTY29w
ZWRBcmd1bWVudHM6CisgICAgICAgIC8vIFdlIGNvdWxkIHN1cHBvcnQgcHV0X2J5X3ZhbCBvbiB0
aGVzZSBhdCBzb21lIHBvaW50LCBidXQgaXQncyBqdXN0IG5vdCB0aGF0IHByb2ZpdGFibGUKKyAg
ICAgICAgLy8gYXQgdGhlIG1vbWVudC4KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGRlZmF1
bHQ6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KK30KKwogaW5saW5lIFR5cGVkQXJyYXlU
eXBlIHR5cGVkQXJyYXlUeXBlRm9ySklUQXJyYXlNb2RlKEpJVEFycmF5TW9kZSBtb2RlKQogewog
ICAgIHN3aXRjaCAobW9kZSkgewpAQCAtMTUyLDYgKzE5Miw5IEBAIGlubGluZSBKSVRBcnJheU1v
ZGUgaml0QXJyYXlNb2RlRm9yU3RydWMKICAgICBpZiAoaXNPcHRpbWl6YWJsZUluZGV4aW5nVHlw
ZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSkKICAgICAgICAgcmV0dXJuIGppdEFycmF5TW9k
ZUZvckluZGV4aW5nVHlwZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKTsKICAgICAKKyAgICBp
ZiAoaGFzT3B0aW1pemFibGVJbmRleGluZ0ZvckpTVHlwZShzdHJ1Y3R1cmUtPnR5cGVJbmZvKCku
dHlwZSgpKSkKKyAgICAgICAgcmV0dXJuIGppdEFycmF5TW9kZUZvckpTVHlwZShzdHJ1Y3R1cmUt
PnR5cGVJbmZvKCkudHlwZSgpKTsKKyAgICAKICAgICBBU1NFUlQoaGFzT3B0aW1pemFibGVJbmRl
eGluZ0ZvckNsYXNzSW5mbyhzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpKSk7CiAgICAgcmV0dXJuIGpp
dEFycmF5TW9kZUZvckNsYXNzSW5mbyhzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpKTsKIH0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QuanNvbgo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0Lmpzb24J
KHJldmlzaW9uIDE4MDcyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRl
Y29kZUxpc3QuanNvbgkod29ya2luZyBjb3B5KQpAQCAtOCw3ICs4LDkgQEAKICAgICAgICAgICAg
IHsgIm5hbWUiIDogIm9wX2dldF9zY29wZSIsICJsZW5ndGgiIDogMiB9LAogICAgICAgICAgICAg
eyAibmFtZSIgOiAib3BfdG91Y2hfZW50cnkiLCAibGVuZ3RoIiA6IDEgfSwKICAgICAgICAgICAg
IHsgIm5hbWUiIDogIm9wX2luaXRfbGF6eV9yZWciLCAibGVuZ3RoIiA6IDIgfSwKLSAgICAgICAg
ICAgIHsgIm5hbWUiIDogIm9wX2NyZWF0ZV9hcmd1bWVudHMiLCAibGVuZ3RoIiA6IDMgfSwKKyAg
ICAgICAgICAgIHsgIm5hbWUiIDogIm9wX2NvcHlfYXJndW1lbnRzX3RvX3Njb3BlIiwgImxlbmd0
aCIgOiAyIH0sIC8vIGp1c3QgdGFrZXMgdGhlIHNjb3BlIHJlZ2lzdGVyCisgICAgICAgICAgICB7
ICJuYW1lIiA6ICJvcF9jcmVhdGVfZGlyZWN0X2FyZ3VtZW50cyIsICJsZW5ndGgiIDogMiB9LCAv
LyBqdXN0IHRha2VzIHRoZSBkc3QgcmVnaXN0ZXIKKyAgICAgICAgICAgIHsgIm5hbWUiIDogIm9w
X2NyZWF0ZV9zY29wZWRfYXJndW1lbnRzIiwgImxlbmd0aCIgOiAzIH0sIC8vIGRzdCwgc2NvcGVS
ZWdpc3RlciwgdGFibGUKICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX2NyZWF0ZV90aGlzIiwg
Imxlbmd0aCIgOiA0IH0sCiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9nZXRfY2FsbGVlIiwg
Imxlbmd0aCIgOiAzIH0sCiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF90b190aGlzIiwgImxl
bmd0aCIgOiA0IH0sCkBAIC02MSw3ICs2Myw2IEBACiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJv
cF9nZXRfYnlfaWQiLCAibGVuZ3RoIiA6IDkgIH0sCiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJv
cF9nZXRfYnlfaWRfb3V0X29mX2xpbmUiLCAibGVuZ3RoIiA6IDkgIH0sCiAgICAgICAgICAgICB7
ICJuYW1lIiA6ICJvcF9nZXRfYXJyYXlfbGVuZ3RoIiwgImxlbmd0aCIgOiA5IH0sCi0gICAgICAg
ICAgICB7ICJuYW1lIiA6ICJvcF9nZXRfYXJndW1lbnRzX2xlbmd0aCIsICJsZW5ndGgiIDogNCB9
LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfcHV0X2J5X2lkIiwgImxlbmd0aCIgOiA5IH0s
CiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9wdXRfYnlfaWRfb3V0X29mX2xpbmUiLCAibGVu
Z3RoIiA6IDkgfSwKICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX3B1dF9ieV9pZF90cmFuc2l0
aW9uX2RpcmVjdCIsICJsZW5ndGgiIDogOSB9LApAQCAtNzAsNyArNzEsNiBAQAogICAgICAgICAg
ICAgeyAibmFtZSIgOiAib3BfcHV0X2J5X2lkX3RyYW5zaXRpb25fbm9ybWFsX291dF9vZl9saW5l
IiwgImxlbmd0aCIgOiA5IH0sCiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9kZWxfYnlfaWQi
LCAibGVuZ3RoIiA6IDQgfSwKICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX2dldF9ieV92YWwi
LCAibGVuZ3RoIiA6IDYgfSwKLSAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX2dldF9hcmd1bWVu
dF9ieV92YWwiLCAibGVuZ3RoIiA6IDcgfSwKICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX3B1
dF9ieV92YWwiLCAibGVuZ3RoIiA6IDUgfSwKICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX3B1
dF9ieV92YWxfZGlyZWN0IiwgImxlbmd0aCIgOiA1IH0sCiAgICAgICAgICAgICB7ICJuYW1lIiA6
ICJvcF9kZWxfYnlfdmFsIiwgImxlbmd0aCIgOiA0IH0sCkBAIC05OSw3ICs5OSw2IEBACiAgICAg
ICAgICAgICB7ICJuYW1lIiA6ICJvcF9jYWxsIiwgImxlbmd0aCIgOiA5IH0sCiAgICAgICAgICAg
ICB7ICJuYW1lIiA6ICJvcF9jYWxsX2V2YWwiLCAibGVuZ3RoIiA6IDkgfSwKICAgICAgICAgICAg
IHsgIm5hbWUiIDogIm9wX2NhbGxfdmFyYXJncyIsICJsZW5ndGgiIDogOSB9LAotICAgICAgICAg
ICAgeyAibmFtZSIgOiAib3BfdGVhcl9vZmZfYXJndW1lbnRzIiwgImxlbmd0aCIgOiAzIH0sCiAg
ICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9yZXQiLCAibGVuZ3RoIiA6IDIgfSwKICAgICAgICAg
ICAgIHsgIm5hbWUiIDogIm9wX2NvbnN0cnVjdCIsICJsZW5ndGgiIDogOSB9LAogICAgICAgICAg
ICAgeyAibmFtZSIgOiAib3BfY29uc3RydWN0X3ZhcmFyZ3MiLCAibGVuZ3RoIiA6IDkgfSwKQEAg
LTEwOCw2ICsxMDcsOCBAQAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfcmVzb2x2ZV9zY29w
ZSIsICJsZW5ndGgiIDogNyB9LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfZ2V0X2Zyb21f
c2NvcGUiLCAibGVuZ3RoIiA6IDggfSwKICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX3B1dF90
b19zY29wZSIsICJsZW5ndGgiIDogNyB9LAorICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfZ2V0
X2Zyb21fYXJndW1lbnRzIiwgImxlbmd0aCIgOiA1IH0sIC8vIGRzdCwgYXJndW1lbnRzLCBpbmRl
eCwgcHJvZmlsZQorICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfcHV0X3RvX2FyZ3VtZW50cyIs
ICJsZW5ndGgiIDogNCB9LCAvLyBhcmd1bWVudHMsIGluZGV4LCBzcmMKICAgICAgICAgICAgIHsg
Im5hbWUiIDogIm9wX3B1c2hfd2l0aF9zY29wZSIsICJsZW5ndGgiIDogMyB9LAogICAgICAgICAg
ICAgeyAibmFtZSIgOiAib3BfcG9wX3Njb3BlIiwgImxlbmd0aCIgOiAyIH0sCiAgICAgICAgICAg
ICB7ICJuYW1lIiA6ICJvcF9wdXNoX25hbWVfc2NvcGUiLCAibGVuZ3RoIiA6IDUgfSwKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmNw
cAkocmV2aXNpb24gMTgwNzIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Nw
ZWN1bGF0ZWRUeXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksMTAgKzI5LDExIEBACiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU3BlY3VsYXRlZFR5cGUuaCIKIAotI2luY2x1ZGUg
IkFyZ3VtZW50cy5oIgorI2luY2x1ZGUgIkRpcmVjdEFyZ3VtZW50cy5oIgogI2luY2x1ZGUgIkpT
QXJyYXkuaCIKICNpbmNsdWRlICJKU0Z1bmN0aW9uLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5o
IgorI2luY2x1ZGUgIlNjb3BlZEFyZ3VtZW50cy5oIgogI2luY2x1ZGUgIlN0cmluZ09iamVjdC5o
IgogI2luY2x1ZGUgIlZhbHVlUHJvZmlsZS5oIgogI2luY2x1ZGUgPHd0Zi9Cb3VuZHNDaGVja2Vk
UG9pbnRlci5oPgpAQCAtMTI3LDggKzEyOCwxMyBAQCB2b2lkIGR1bXBTcGVjdWxhdGlvbihQcmlu
dFN0cmVhbSYgb3V0LCBTCiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgaXNUb3Ag
PSBmYWxzZTsKICAgICAKLSAgICAgICAgICAgIGlmICh2YWx1ZSAmIFNwZWNBcmd1bWVudHMpCi0g
ICAgICAgICAgICAgICAgbXlPdXQucHJpbnQoIkFyZ3VtZW50cyIpOworICAgICAgICAgICAgaWYg
KHZhbHVlICYgU3BlY0RpcmVjdEFyZ3VtZW50cykKKyAgICAgICAgICAgICAgICBteU91dC5wcmlu
dCgiRGlyZWN0YXJndW1lbnRzIik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
aXNUb3AgPSBmYWxzZTsKKyAgICAKKyAgICAgICAgICAgIGlmICh2YWx1ZSAmIFNwZWNTY29wZWRB
cmd1bWVudHMpCisgICAgICAgICAgICAgICAgbXlPdXQucHJpbnQoIlNjb3BlZGFyZ3VtZW50cyIp
OwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGlzVG9wID0gZmFsc2U7CiAgICAg
CkBAIC0yMzIsOCArMjM4LDEwIEBAIHN0YXRpYyBjb25zdCBjaGFyKiBzcGVjdWxhdGlvblRvQWJi
cmV2aWEKICAgICAgICAgcmV0dXJuICI8RmxvYXQzMmFycmF5PiI7CiAgICAgaWYgKGlzRmxvYXQ2
NEFycmF5U3BlY3VsYXRpb24ocHJlZGljdGlvbikpCiAgICAgICAgIHJldHVybiAiPEZsb2F0NjRh
cnJheT4iOwotICAgIGlmIChpc0FyZ3VtZW50c1NwZWN1bGF0aW9uKHByZWRpY3Rpb24pKQotICAg
ICAgICByZXR1cm4gIjxBcmd1bWVudHM+IjsKKyAgICBpZiAoaXNEaXJlY3RBcmd1bWVudHNTcGVj
dWxhdGlvbihwcmVkaWN0aW9uKSkKKyAgICAgICAgcmV0dXJuICI8RGlyZWN0QXJndW1lbnRzPiI7
CisgICAgaWYgKGlzU2NvcGVkQXJndW1lbnRzU3BlY3VsYXRpb24ocHJlZGljdGlvbikpCisgICAg
ICAgIHJldHVybiAiPFNjb3BlZEFyZ3VtZW50cz4iOwogICAgIGlmIChpc1N0cmluZ09iamVjdFNw
ZWN1bGF0aW9uKHByZWRpY3Rpb24pKQogICAgICAgICByZXR1cm4gIjxTdHJpbmdPYmplY3Q+IjsK
ICAgICBpZiAoaXNTdHJpbmdPclN0cmluZ09iamVjdFNwZWN1bGF0aW9uKHByZWRpY3Rpb24pKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBl
LmgJKHJldmlzaW9uIDE4MDcyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9T
cGVjdWxhdGVkVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01Miw4ICs1Miw5IEBAIHN0YXRpYyBj
b25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjVWludDMyQXIKIHN0YXRpYyBjb25zdCBTcGVjdWxhdGVk
VHlwZSBTcGVjRmxvYXQzMkFycmF5ICAgICAgID0gMHgwMDAwMDQwMDsgLy8gSXQncyBkZWZpbml0
ZWx5IGFuIFVpbnQxNkFycmF5IG9yIG9uZSBvZiBpdHMgc3ViY2xhc3Nlcy4KIHN0YXRpYyBjb25z
dCBTcGVjdWxhdGVkVHlwZSBTcGVjRmxvYXQ2NEFycmF5ICAgICAgID0gMHgwMDAwMDgwMDsgLy8g
SXQncyBkZWZpbml0ZWx5IGFuIFVpbnQxNkFycmF5IG9yIG9uZSBvZiBpdHMgc3ViY2xhc3Nlcy4K
IHN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjVHlwZWRBcnJheVZpZXcgICAgID0gU3Bl
Y0ludDhBcnJheSB8IFNwZWNJbnQxNkFycmF5IHwgU3BlY0ludDMyQXJyYXkgfCBTcGVjVWludDhB
cnJheSB8IFNwZWNVaW50OENsYW1wZWRBcnJheSB8IFNwZWNVaW50MTZBcnJheSB8IFNwZWNVaW50
MzJBcnJheSB8IFNwZWNGbG9hdDMyQXJyYXkgfCBTcGVjRmxvYXQ2NEFycmF5Owotc3RhdGljIGNv
bnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNBcmd1bWVudHMgICAgICAgICAgPSAweDAwMDAxMDAwOyAv
LyBJdCdzIGRlZmluaXRlbHkgYW4gQXJndW1lbnRzIG9iamVjdC4KLXN0YXRpYyBjb25zdCBTcGVj
dWxhdGVkVHlwZSBTcGVjU3RyaW5nT2JqZWN0ICAgICAgID0gMHgwMDAwMjAwMDsgLy8gSXQncyBk
ZWZpbml0ZWx5IGEgU3RyaW5nT2JqZWN0Lgorc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNw
ZWNEaXJlY3RBcmd1bWVudHMgICAgPSAweDAwMDAxMDAwOyAvLyBJdCdzIGRlZmluaXRlbHkgYSBE
aXJlY3RBcmd1bWVudHMgb2JqZWN0Lgorc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNT
Y29wZWRBcmd1bWVudHMgICAgPSAweDAwMDAyMDAwOyAvLyBJdCdzIGRlZmluaXRlbHkgYSBTY29w
ZWRBcmd1bWVudHMgb2JqZWN0Lgorc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNTdHJp
bmdPYmplY3QgICAgICAgPSAweDAwMDA0MDAwOyAvLyBJdCdzIGRlZmluaXRlbHkgYSBTdHJpbmdP
YmplY3QuCiBzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY09iamVjdE90aGVyICAgICAg
ICA9IDB4MDAwMDgwMDA7IC8vIEl0J3MgZGVmaW5pdGVseSBhbiBvYmplY3QgYnV0IG5vdCBKU0Zp
bmFsT2JqZWN0LCBKU0FycmF5LCBvciBKU0Z1bmN0aW9uLgogc3RhdGljIGNvbnN0IFNwZWN1bGF0
ZWRUeXBlIFNwZWNPYmplY3QgICAgICAgICAgICAgPSAweDAwMDBmZmZmOyAvLyBCaXRtYXNrIHVz
ZWQgZm9yIHRlc3RpbmcgZm9yIGFueSBraW5kIG9mIG9iamVjdCBwcmVkaWN0aW9uLgogc3RhdGlj
IGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNTdHJpbmdJZGVudCAgICAgICAgPSAweDAwMDEwMDAw
OyAvLyBJdCdzIGRlZmluaXRlbHkgYSBKU1N0cmluZywgYW5kIGl0J3MgYW4gaWRlbnRpZmllci4K
QEAgLTE5Myw5ICsxOTQsMTQgQEAgaW5saW5lIGJvb2wgaXNGbG9hdDY0QXJyYXlTcGVjdWxhdGlv
bihTcAogICAgIHJldHVybiB2YWx1ZSA9PSBTcGVjRmxvYXQ2NEFycmF5OwogfQogCi1pbmxpbmUg
Ym9vbCBpc0FyZ3VtZW50c1NwZWN1bGF0aW9uKFNwZWN1bGF0ZWRUeXBlIHZhbHVlKQoraW5saW5l
IGJvb2wgaXNEaXJlY3RBcmd1bWVudHNTcGVjdWxhdGlvbihTcGVjdWxhdGVkVHlwZSB2YWx1ZSkK
IHsKLSAgICByZXR1cm4gISF2YWx1ZSAmJiAodmFsdWUgJiBTcGVjQXJndW1lbnRzKSA9PSB2YWx1
ZTsKKyAgICByZXR1cm4gdmFsdWUgPT0gU3BlY0RpcmVjdEFyZ3VtZW50czsKK30KKworaW5saW5l
IGJvb2wgaXNTY29wZWRBcmd1bWVudHNTcGVjdWxhdGlvbihTcGVjdWxhdGVkVHlwZSB2YWx1ZSkK
K3sKKyAgICByZXR1cm4gdmFsdWUgPT0gU3BlY1Njb3BlZEFyZ3VtZW50czsKIH0KIAogaW5saW5l
IGJvb2wgaXNBY3Rpb25hYmxlSW50TXV0YWJsZUFycmF5U3BlY3VsYXRpb24oU3BlY3VsYXRlZFR5
cGUgdmFsdWUpCkBAIC0yMjQsMTMgKzIzMCwxNCBAQCBpbmxpbmUgYm9vbCBpc0FjdGlvbmFibGVU
eXBlZE11dGFibGVBcnJhCiBpbmxpbmUgYm9vbCBpc0FjdGlvbmFibGVNdXRhYmxlQXJyYXlTcGVj
dWxhdGlvbihTcGVjdWxhdGVkVHlwZSB2YWx1ZSkKIHsKICAgICByZXR1cm4gaXNBcnJheVNwZWN1
bGF0aW9uKHZhbHVlKQotICAgICAgICB8fCBpc0FyZ3VtZW50c1NwZWN1bGF0aW9uKHZhbHVlKQog
ICAgICAgICB8fCBpc0FjdGlvbmFibGVUeXBlZE11dGFibGVBcnJheVNwZWN1bGF0aW9uKHZhbHVl
KTsKIH0KIAogaW5saW5lIGJvb2wgaXNBY3Rpb25hYmxlQXJyYXlTcGVjdWxhdGlvbihTcGVjdWxh
dGVkVHlwZSB2YWx1ZSkKIHsKICAgICByZXR1cm4gaXNTdHJpbmdTcGVjdWxhdGlvbih2YWx1ZSkK
KyAgICAgICAgfHwgaXNEaXJlY3RBcmd1bWVudHNTcGVjdWxhdGlvbih2YWx1ZSkKKyAgICAgICAg
fHwgaXNTY29wZWRBcmd1bWVudHNTcGVjdWxhdGlvbih2YWx1ZSkKICAgICAgICAgfHwgaXNBY3Rp
b25hYmxlTXV0YWJsZUFycmF5U3BlY3VsYXRpb24odmFsdWUpOwogfQogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJh
dG9yLmNwcAkocmV2aXNpb24gMTgwNzIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNiw3ICsx
MTYsNyBAQCBQYXJzZXJFcnJvciBCeXRlY29kZUdlbmVyYXRvcjo6Z2VuZXJhdGUoCiAgICAgbV9j
b2RlQmxvY2stPnNocmlua1RvRml0KCk7CiAKICAgICBpZiAobV9jb2RlQmxvY2stPnN5bWJvbFRh
YmxlKCkgJiYgIW1fY29kZUJsb2NrLT52bSgpLT50eXBlUHJvZmlsZXIoKSkKLSAgICAgICAgbV9j
b2RlQmxvY2stPnNldFN5bWJvbFRhYmxlKG1fY29kZUJsb2NrLT5zeW1ib2xUYWJsZSgpLT5jbG9u
ZUNhcHR1cmVkTmFtZXMoKm1fY29kZUJsb2NrLT52bSgpKSk7CisgICAgICAgIG1fY29kZUJsb2Nr
LT5zZXRTeW1ib2xUYWJsZShtX2NvZGVCbG9jay0+c3ltYm9sVGFibGUoKS0+Y2xvbmVJZ25vcmlu
Z1N0YWNrKCptX2NvZGVCbG9jay0+dm0oKSkpOwogCiAgICAgaWYgKG1fZXhwcmVzc2lvblRvb0Rl
ZXApCiAgICAgICAgIHJldHVybiBQYXJzZXJFcnJvcihQYXJzZXJFcnJvcjo6T3V0T2ZNZW1vcnkp
OwpAQCAtMTI0LDEzICsxMjQsMTkgQEAgUGFyc2VyRXJyb3IgQnl0ZWNvZGVHZW5lcmF0b3I6Omdl
bmVyYXRlKAogfQogCiBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6YWRkVmFyKAotICAg
IGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBDb25zdGFudE1vZGUgY29uc3RhbnRNb2RlLCBXYXRj
aE1vZGUgd2F0Y2hNb2RlKQorICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBDb25zdGFudE1v
ZGUgY29uc3RhbnRNb2RlKQogewogICAgIEFTU0VSVChzdGF0aWNfY2FzdDxzaXplX3Q+KG1fY29k
ZUJsb2NrLT5tX251bVZhcnMpID09IG1fY2FsbGVlUmVnaXN0ZXJzLnNpemUoKSk7CiAgICAgCiAg
ICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIoc3ltYm9sVGFibGUoKS5tX2xvY2spOwotICAg
IGludCBpbmRleCA9IHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKG1fY2FsbGVlUmVnaXN0ZXJzLnNp
emUoKSkub2Zmc2V0KCk7Ci0gICAgU3ltYm9sVGFibGVFbnRyeSBuZXdFbnRyeShpbmRleCwgY29u
c3RhbnRNb2RlID09IElzQ29uc3RhbnQgPyBSZWFkT25seSA6IDApOworICAgIFZhck9mZnNldCB2
YXJPZmZzZXQ7CisgICAgaWYgKHZhcktpbmQgPT0gSGVhcFZhcktpbmQpCisgICAgICAgIHZhck9m
ZnNldCA9IFZhck9mZnNldChIZWFwT2Zmc2V0KG1fbnVtQ2FwdHVyZWRWYXJpYWJsZXMrKykpOwor
ICAgIGVsc2UgeworICAgICAgICBBU1NFUlQodmFyS2luZCA9PSBTdGFja1ZhcktpbmQpOworICAg
ICAgICB2YXJPZmZzZXQgPSBWYXJPZmZzZXQodmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwobV9jYWxs
ZWVSZWdpc3RlcnMuc2l6ZSgpKSk7CisgICAgfQorICAgIFN5bWJvbFRhYmxlRW50cnkgbmV3RW50
cnkodmFyT2Zmc2V0LCBjb25zdGFudE1vZGUgPT0gSXNDb25zdGFudCA/IFJlYWRPbmx5IDogMCk7
CiAgICAgU3ltYm9sVGFibGU6Ok1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IHN5bWJvbFRhYmxlKCku
YWRkKGxvY2tlciwgaWRlbnQuaW1wbCgpLCBuZXdFbnRyeSk7CiAKICAgICBpZiAoIXJlc3VsdC5p
c05ld0VudHJ5KQpAQCAtMTg5LDcgKzE5NSw3IEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29k
ZUdlbmVyYXRvcihWTSYKIHsKICAgICBpZiAobV9pc0J1aWx0aW5GdW5jdGlvbikKICAgICAgICAg
bV9zaG91bGRFbWl0RGVidWdIb29rcyA9IGZhbHNlOwotCisgICAgCiAgICAgbV9zeW1ib2xUYWJs
ZS0+c2V0VXNlc05vblN0cmljdEV2YWwoY29kZUJsb2NrLT51c2VzRXZhbCgpICYmICFjb2RlQmxv
Y2stPmlzU3RyaWN0TW9kZSgpKTsKICAgICBWZWN0b3I8SWRlbnRpZmllcj4gYm91bmRQYXJhbWV0
ZXJQcm9wZXJ0aWVzOwogICAgIEZ1bmN0aW9uUGFyYW1ldGVycyYgcGFyYW1ldGVycyA9ICpmdW5j
dGlvbk5vZGUtPnBhcmFtZXRlcnMoKTsKQEAgLTIyNiw5ICsyMzIsMjcgQEAgQnl0ZWNvZGVHZW5l
cmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFZNJgogICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBl
bmQobV9sZXhpY2FsRW52aXJvbm1lbnRSZWdpc3Rlci0+aW5kZXgoKSk7CiAgICAgICAgIGluc3Ry
dWN0aW9ucygpLmFwcGVuZChzY29wZVJlZ2lzdGVyKCktPmluZGV4KCkpOwogICAgIH0KKyAgICAK
KyAgICAvLyBGaWd1cmUgb3V0IHNvbWUgaW50ZXJlc3RpbmcgZmFjdHMgYWJvdXQgb3VyIGFyZ3Vt
ZW50cy4KKyAgICBib29sIGNhcHR1cmVzQW55QXJndW1lbnRCeU5hbWUgPSBmYWxzZTsKKyAgICBp
ZiAoc2hvdWxkQ2FwdHVyZUFsbFRoZVRoaW5ncykKKyAgICAgICAgY2FwdHVyZXNBbnlBcmd1bWVu
dEJ5TmFtZSA9IHRydWU7CisgICAgZWxzZSBpZiAoZnVuY3Rpb25Ob2RlLT5oYXNDYXB0dXJlZFZh
cmlhYmxlcygpKSB7CisgICAgICAgIEZ1bmN0aW9uUGFyYW1ldGVycyYgcGFyYW1ldGVycyA9ICpm
dW5jdGlvbk5vZGUtPnBhcmFtZXRlcnMoKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBwYXJhbWV0ZXJzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBhdXRvIHBhdHRlcm4gPSBw
YXJhbWV0ZXJzLmF0KGkpOworICAgICAgICAgICAgaWYgKCFwYXR0ZXJuLT5pc0JpbmRpbmdOb2Rl
KCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBjb25zdCBJZGVudGlm
aWVyJiBpZGVudCA9IHN0YXRpY19jYXN0PGNvbnN0IEJpbmRpbmdOb2RlKj4ocGF0dGVybiktPmJv
dW5kUHJvcGVydHkoKTsKKyAgICAgICAgICAgIGNhcHR1cmVzQW55QXJndW1lbnRCeU5hbWUgfD0g
ZnVuY3Rpb25Ob2RlLT5jYXB0dXJlcyhpZGVudCk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisg
ICAgaWYgKGZ1bmN0aW9uTm9kZS0+dXNlc0FyZ3VtZW50cygpIHx8IGNvZGVCbG9jay0+dXNlc0V2
YWwoKSkKKyAgICAgICAgLy8gRklYTUU6IGNyZWF0ZSB0aGUgYXJndW1lbnRzIG5vdz8KKyAgICAK
ICAgICBSZWdpc3RlcklEKiBsb2NhbEFyZ3VtZW50c1JlZ2lzdGVyID0gbnVsbHB0cjsKLSAgICBS
ZWdpc3RlcklEKiBzY3JhdGNoID0gYWRkVmFyKCk7Ci0gICAgbV9zeW1ib2xUYWJsZS0+c2V0Q2Fw
dHVyZVN0YXJ0KHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKG1fY29kZUJsb2NrLT5tX251bVZhcnMp
Lm9mZnNldCgpKTsKKyAgICBSZWdpc3RlcklEKiBzY3JhdGNoID0gYWRkVmFyKCk7IC8vIEZJWE1F
OiBUaGlzIHZhcmlhYmxlIGFsd2F5cyBjcmVhdGVzIGEgaG9sZSBpbiB0aGUgc3RhY2suCiAKICAg
ICBpZiAoZnVuY3Rpb25Ob2RlLT51c2VzQXJndW1lbnRzKCkgfHwgY29kZUJsb2NrLT51c2VzRXZh
bCgpKSB7IC8vIE1heSByZWlmeSBhcmd1bWVudHMgb2JqZWN0LgogICAgICAgICBSZWdpc3RlcklE
KiB1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIgPSBhZGRWYXIoKTsgLy8gQW5vbnltb3VzLCBz
byBpdCBjYW4ndCBiZSBtb2RpZmllZCBieSB1c2VyIGNvZGUuCkBAIC01MzksMTkgKzU2Myw2IEBA
IFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjp1bmNoZWNrZWQKICAgICByZXR1cm4gbV9s
b2NhbEFyZ3VtZW50c1JlZ2lzdGVyOwogfQogCi1SZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRv
cjo6Y3JlYXRlTGF6eVJlZ2lzdGVySWZOZWNlc3NhcnkoUmVnaXN0ZXJJRCogcmVnKQotewotICAg
IGlmICghcmVnLT52aXJ0dWFsUmVnaXN0ZXIoKS5pc0xvY2FsKCkpCi0gICAgICAgIHJldHVybiBy
ZWc7Ci0KLSAgICBpbnQgbG9jYWxWYXJpYWJsZU51bWJlciA9IHJlZy0+dmlydHVhbFJlZ2lzdGVy
KCkudG9Mb2NhbCgpOwotCi0gICAgaWYgKG1fbGFzdExhenlGdW5jdGlvbiA8PSBsb2NhbFZhcmlh
YmxlTnVtYmVyIHx8IGxvY2FsVmFyaWFibGVOdW1iZXIgPCBtX2ZpcnN0TGF6eUZ1bmN0aW9uKQot
ICAgICAgICByZXR1cm4gcmVnOwotICAgIGVtaXRMYXp5TmV3RnVuY3Rpb24ocmVnLCBtX2xhenlG
dW5jdGlvbnMuZ2V0KGxvY2FsVmFyaWFibGVOdW1iZXIpKTsKLSAgICByZXR1cm4gcmVnOwotfQot
CiBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6bmV3UmVnaXN0ZXIoKQogewogICAgIG1f
Y2FsbGVlUmVnaXN0ZXJzLmFwcGVuZCh2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChtX2NhbGxlZVJl
Z2lzdGVycy5zaXplKCkpKTsKQEAgLTExOTAsNDYgKzEyMDEsMzQgQEAgYm9vbCBCeXRlY29kZUdl
bmVyYXRvcjo6aXNDYXB0dXJlZChpbnQgbwogICAgIHJldHVybiBtX3N5bWJvbFRhYmxlICYmIG1f
c3ltYm9sVGFibGUtPmlzQ2FwdHVyZWQob3BlcmFuZCk7CiB9CiAKLUxvY2FsIEJ5dGVjb2RlR2Vu
ZXJhdG9yOjpsb2NhbChjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eSkKK1ZhcmlhYmxlIEJ5dGVj
b2RlR2VuZXJhdG9yOjp2YXJpYWJsZShjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eSkKIHsKLSAg
ICBpZiAocHJvcGVydHkgPT0gcHJvcGVydHlOYW1lcygpLnRoaXNJZGVudGlmaWVyKQotICAgICAg
ICByZXR1cm4gTG9jYWwodGhpc1JlZ2lzdGVyKCksIFJlYWRPbmx5LCBMb2NhbDo6U3BlY2lhbExv
Y2FsKTsKLSAgICBib29sIGlzQXJndW1lbnRzID0gcHJvcGVydHkgPT0gcHJvcGVydHlOYW1lcygp
LmFyZ3VtZW50czsKLSAgICBpZiAoaXNBcmd1bWVudHMpCi0gICAgICAgIGNyZWF0ZUFyZ3VtZW50
c0lmTmVjZXNzYXJ5KCk7Ci0KKyAgICBpZiAocHJvcGVydHkgPT0gcHJvcGVydHlOYW1lcygpLnRo
aXNJZGVudGlmaWVyKSB7CisgICAgICAgIHJldHVybiBWYXJpYWJsZSgKKyAgICAgICAgICAgIHBy
b3BlcnR5LCBWYXJPZmZzZXQodGhpc1JlZ2lzdGVyKCktPnZpcnR1YWxSZWdpc3RlcigpKSwgdGhp
c1JlZ2lzdGVyKCksCisgICAgICAgICAgICBSZWFkT25seSwgTG9jYWw6OlNwZWNpYWxMb2NhbCk7
CisgICAgfQorICAgIAogICAgIGlmICghc2hvdWxkT3B0aW1pemVMb2NhbHMoKSkKLSAgICAgICAg
cmV0dXJuIExvY2FsKCk7Ci0KLSAgICBTeW1ib2xUYWJsZUVudHJ5IGVudHJ5ID0gc3ltYm9sVGFi
bGUoKS5nZXQocHJvcGVydHkuaW1wbCgpKTsKLSAgICBpZiAoZW50cnkuaXNOdWxsKCkpCi0gICAg
ICAgIHJldHVybiBMb2NhbCgpOwotCi0KLSAgICBSZWdpc3RlcklEKiBsb2NhbCA9IGNyZWF0ZUxh
enlSZWdpc3RlcklmTmVjZXNzYXJ5KCZyZWdpc3RlckZvcihlbnRyeS5nZXRJbmRleCgpKSk7Ci0K
LSAgICBpZiAoaXNDYXB0dXJlZChsb2NhbC0+aW5kZXgoKSkgJiYgbV9sZXhpY2FsRW52aXJvbm1l
bnRSZWdpc3RlcikKLSAgICAgICAgcmV0dXJuIExvY2FsKCk7Ci0KLSAgICByZXR1cm4gTG9jYWwo
bG9jYWwsIGVudHJ5LmdldEF0dHJpYnV0ZXMoKSwgaXNBcmd1bWVudHMgPyBMb2NhbDo6U3BlY2lh
bExvY2FsIDogTG9jYWw6Ok5vcm1hbExvY2FsKTsKLX0KLQotTG9jYWwgQnl0ZWNvZGVHZW5lcmF0
b3I6OmNvbnN0TG9jYWwoY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHkpCi17Ci0gICAgaWYgKG1f
Y29kZVR5cGUgIT0gRnVuY3Rpb25Db2RlKQotICAgICAgICByZXR1cm4gTG9jYWwoKTsKLQotICAg
IFN5bWJvbFRhYmxlRW50cnkgZW50cnkgPSBzeW1ib2xUYWJsZSgpLmdldChwcm9wZXJ0eS5pbXBs
KCkpOworICAgICAgICByZXR1cm4gVmFyaWFibGUocHJvcGVydHkpOworICAgIAorICAgIFN5bWJv
bFRhYmxlRW50cnkgZW50cnkgPSBzeW1ib2xUYWJsZS5nZXQocHJvcGVydHkuaW1wbCgpKTsKICAg
ICBpZiAoZW50cnkuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBMb2NhbCgpOwotCi0gICAgUmVn
aXN0ZXJJRCogbG9jYWwgPSBjcmVhdGVMYXp5UmVnaXN0ZXJJZk5lY2Vzc2FyeSgmcmVnaXN0ZXJG
b3IoZW50cnkuZ2V0SW5kZXgoKSkpOwotCi0gICAgYm9vbCBpc0FyZ3VtZW50cyA9IHByb3BlcnR5
ID09IHByb3BlcnR5TmFtZXMoKS5hcmd1bWVudHM7Ci0gICAgaWYgKGlzQ2FwdHVyZWQobG9jYWwt
PmluZGV4KCkpICYmIG1fbGV4aWNhbEVudmlyb25tZW50UmVnaXN0ZXIpCi0gICAgICAgIHJldHVy
biBMb2NhbCgpOwotCi0gICAgcmV0dXJuIExvY2FsKGxvY2FsLCBlbnRyeS5nZXRBdHRyaWJ1dGVz
KCksIGlzQXJndW1lbnRzID8gTG9jYWw6OlNwZWNpYWxMb2NhbCA6IExvY2FsOjpOb3JtYWxMb2Nh
bCk7CisgICAgICAgIHJldHVybiBWYXJpYWJsZShwcm9wZXJ0eSk7CisgICAgCisgICAgVmFyT2Zm
c2V0IG9mZnNldCA9IGVudHJ5LnZhck9mZnNldCgpOworICAgIAorICAgIGlmIChvZmZzZXQuaXNT
Y29wZSgpICYmIG1fbG9jYWxTY29wZURlcHRoKSB7CisgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91
bGQgYmUgYWJsZSB0byBzdGF0aWNhbGx5IHJlc29sdmUgdGhyb3VnaCBvdXIgbG9jYWwgc2NvcGVz
LgorICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQx
ODg1CisgICAgICAgIHJldHVybiBWYXJpYWJsZShwcm9wZXJ0eSk7CisgICAgfQorICAgIAorICAg
IFJlZ2lzdGVySUQqIGxvY2FsOworICAgIGlmIChvZmZzZXQuaXNTdGFjaygpKQorICAgICAgICBs
b2NhbCA9ICZyZWdpc3RlckZvcihvZmZzZXQuc3RhY2tPZmZzZXQoKS5vZmZzZXQoKSk7CisgICAg
CisgICAgcmV0dXJuIFZhcmlhYmxlKHByb3BlcnR5LCB2YXJPZmZzZXQsIGxvY2FsLCBlbnRyeS5n
ZXRBdHRyaWJ1dGVzKCksIExvY2FsOjpOb3JtYWxMb2NhbCk7CiB9CiAKIHZvaWQgQnl0ZWNvZGVH
ZW5lcmF0b3I6OmVtaXRDaGVja0hhc0luc3RhbmNlKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJ
RCogdmFsdWUsIFJlZ2lzdGVySUQqIGJhc2UsIExhYmVsKiB0YXJnZXQpCkBAIC0xMjUzLDM5ICsx
MjUyLDQ4IEBAIFJlc29sdmVUeXBlIEJ5dGVjb2RlR2VuZXJhdG9yOjpyZXNvbHZlVHkKICAgICBy
ZXR1cm4gR2xvYmFsUHJvcGVydHk7CiB9CiAKLVJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9y
OjplbWl0UmVzb2x2ZVNjb3BlKFJlZ2lzdGVySUQqIGRzdCwgY29uc3QgSWRlbnRpZmllciYgaWRl
bnRpZmllciwgUmVzb2x2ZVNjb3BlSW5mbyYgaW5mbykKK1JlZ2lzdGVySUQqIEJ5dGVjb2RlR2Vu
ZXJhdG9yOjplbWl0UmVzb2x2ZVNjb3BlKFJlZ2lzdGVySUQqIGRzdCwgY29uc3QgVmFyaWFibGUm
IHZhcmlhYmxlKQogewotICAgIG1fY29kZUJsb2NrLT5hZGRQcm9wZXJ0eUFjY2Vzc0luc3RydWN0
aW9uKGluc3RydWN0aW9ucygpLnNpemUoKSk7Ci0KLSAgICBpZiAobV9zeW1ib2xUYWJsZSAmJiBt
X2NvZGVUeXBlID09IEZ1bmN0aW9uQ29kZSAmJiAhbV9sb2NhbFNjb3BlRGVwdGgpIHsKLSAgICAg
ICAgU3ltYm9sVGFibGVFbnRyeSBlbnRyeSA9IG1fc3ltYm9sVGFibGUtPmdldChpZGVudGlmaWVy
LmltcGwoKSk7Ci0gICAgICAgIGlmICghZW50cnkuaXNOdWxsKCkpIHsKLSAgICAgICAgICAgIGVt
aXRPcGNvZGUob3BfcmVzb2x2ZV9zY29wZSk7Ci0gICAgICAgICAgICBpbnN0cnVjdGlvbnMoKS5h
cHBlbmQoa2lsbChkc3QpKTsKLSAgICAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChzY29w
ZVJlZ2lzdGVyKCktPmluZGV4KCkpOwotICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5k
KGFkZENvbnN0YW50KGlkZW50aWZpZXIpKTsKLSAgICAgICAgICAgIGluc3RydWN0aW9ucygpLmFw
cGVuZChMb2NhbENsb3N1cmVWYXIpOwotICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5k
KDApOwotICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKDApOwotICAgICAgICAgICAg
aW5mbyA9IFJlc29sdmVTY29wZUluZm8oZW50cnkuZ2V0SW5kZXgoKSk7Ci0gICAgICAgICAgICBy
ZXR1cm4gZHN0OwotICAgICAgICB9CisgICAgc3dpdGNoICh2YXJpYWJsZS52YXJPZmZzZXQoKS5r
aW5kKCkpIHsKKyAgICBjYXNlIFN0YWNrT2Zmc2V0OgorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICAgICAgCisgICAgY2FzZSBDYXB0dXJlZEFyZ3VtZW50S2luZDoKKyAgICAgICAgcmV0dXJu
IGFyZ3VtZW50c1JlZ2lzdGVyKCk7CisgICAgICAgIAorICAgIGNhc2UgU2NvcGVPZmZzZXQ6Cisg
ICAgICAgIG1fY29kZUJsb2NrLT5hZGRQcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uKGluc3RydWN0
aW9ucygpLnNpemUoKSk7CisgICAgICAgIAorICAgICAgICBBU1NFUlQobV9zeW1ib2xUYWJsZSAm
JiBtX2NvZGVUeXBlID09IEZ1bmN0aW9uQ29kZSAmJiAhbV9sb2NhbFNjb3BlRGVwdGgpOworICAg
ICAgICAKKyAgICAgICAgZW1pdE9wY29kZShvcF9yZXNvbHZlX3Njb3BlKTsKKyAgICAgICAgaW5z
dHJ1Y3Rpb25zKCkuYXBwZW5kKGtpbGwoZHN0KSk7CisgICAgICAgIGluc3RydWN0aW9ucygpLmFw
cGVuZChzY29wZVJlZ2lzdGVyKCktPmluZGV4KCkpOworICAgICAgICBpbnN0cnVjdGlvbnMoKS5h
cHBlbmQoYWRkQ29uc3RhbnQodmFyaWFibGUuaWRlbnQoKSkpOworICAgICAgICBpbnN0cnVjdGlv
bnMoKS5hcHBlbmQoTG9jYWxDbG9zdXJlVmFyKTsKKyAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBw
ZW5kKDApOworICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoMCk7CisgICAgICAgIHJldHVy
biBkc3Q7CisgICAgICAgIAorICAgIGNhc2UgSW52YWxpZFZhcktpbmQ6CisgICAgICAgIC8vIElu
ZGljYXRlcyBub24tbG9jYWwgcmVzb2x1dGlvbi4KKyAgICAgICAgCisgICAgICAgIEFTU0VSVCgh
bV9zeW1ib2xUYWJsZSB8fCAhbV9zeW1ib2xUYWJsZS0+Y29udGFpbnMoaWRlbnRpZmllci5pbXBs
KCkpIHx8IHJlc29sdmVUeXBlKCkgPT0gRHluYW1pYyk7CisgICAgICAgIAorICAgICAgICAvLyBy
ZXNvbHZlX3Njb3BlIGRzdCwgaWQsIFJlc29sdmVUeXBlLCBkZXB0aAorICAgICAgICBlbWl0T3Bj
b2RlKG9wX3Jlc29sdmVfc2NvcGUpOworICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoa2ls
bChkc3QpKTsKKyAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHNjb3BlUmVnaXN0ZXIoKS0+
aW5kZXgoKSk7CisgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChhZGRDb25zdGFudCh2YXJp
YWJsZS5pZGVudCgpKSk7CisgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChyZXNvbHZlVHlw
ZSgpKTsKKyAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKDApOworICAgICAgICBpbnN0cnVj
dGlvbnMoKS5hcHBlbmQoMCk7CisgICAgICAgIHJldHVybiBkc3Q7CiAgICAgfQotCi0gICAgQVNT
RVJUKCFtX3N5bWJvbFRhYmxlIHx8ICFtX3N5bWJvbFRhYmxlLT5jb250YWlucyhpZGVudGlmaWVy
LmltcGwoKSkgfHwgcmVzb2x2ZVR5cGUoKSA9PSBEeW5hbWljKTsKLQotICAgIC8vIHJlc29sdmVf
c2NvcGUgZHN0LCBpZCwgUmVzb2x2ZVR5cGUsIGRlcHRoCi0gICAgZW1pdE9wY29kZShvcF9yZXNv
bHZlX3Njb3BlKTsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoa2lsbChkc3QpKTsKLSAgICBp
bnN0cnVjdGlvbnMoKS5hcHBlbmQoc2NvcGVSZWdpc3RlcigpLT5pbmRleCgpKTsKLSAgICBpbnN0
cnVjdGlvbnMoKS5hcHBlbmQoYWRkQ29uc3RhbnQoaWRlbnRpZmllcikpOwotICAgIGluc3RydWN0
aW9ucygpLmFwcGVuZChyZXNvbHZlVHlwZSgpKTsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQo
MCk7Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKDApOwotICAgIHJldHVybiBkc3Q7CisgICAg
CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAotCiBSZWdpc3RlcklEKiBC
eXRlY29kZUdlbmVyYXRvcjo6ZW1pdEdldE93blNjb3BlKFJlZ2lzdGVySUQqIGRzdCwgY29uc3Qg
SWRlbnRpZmllciYgaWRlbnRpZmllciwgT3duU2NvcGVMb29rdXBSdWxlcykKIHsKICAgICBlbWl0
T3Bjb2RlKG9wX3Jlc29sdmVfc2NvcGUpOwpAQCAtMTMwMCw2MSArMTMwOCw4NSBAQCBSZWdpc3Rl
cklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEdldE93CiAgICAgcmV0dXJuIGRzdDsKIH0KIAot
UmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRSZXNvbHZlQ29uc3RhbnRMb2NhbChS
ZWdpc3RlcklEKiBkc3QsIGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIsIFJlc29sdmVTY29w
ZUluZm8mIGluZm8pCitSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEdldEZyb21T
Y29wZShSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHNjb3BlLCBjb25zdCBWYXJpYWJsZSYg
dmFyaWFibGUsIFJlc29sdmVNb2RlIHJlc29sdmVNb2RlKQogewotICAgIGlmICghbV9zeW1ib2xU
YWJsZSB8fCBtX2NvZGVUeXBlICE9IEZ1bmN0aW9uQ29kZSkKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0KLSAgICBTeW1ib2xUYWJsZUVudHJ5IGVudHJ5ID0gbV9zeW1ib2xUYWJsZS0+Z2V0KGlk
ZW50aWZpZXIuaW1wbCgpKTsKLSAgICBpZiAoZW50cnkuaXNOdWxsKCkpCi0gICAgICAgIHJldHVy
biBudWxscHRyOwotICAgIGluZm8gPSBSZXNvbHZlU2NvcGVJbmZvKGVudHJ5LmdldEluZGV4KCkp
OwotICAgIHJldHVybiBlbWl0TW92ZShkc3QsIG1fbGV4aWNhbEVudmlyb25tZW50UmVnaXN0ZXIp
OwotCi19Ci0KLVJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0R2V0RnJvbVNjb3Bl
KFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogc2NvcGUsIGNvbnN0IElkZW50aWZpZXImIGlk
ZW50aWZpZXIsIFJlc29sdmVNb2RlIHJlc29sdmVNb2RlLCBjb25zdCBSZXNvbHZlU2NvcGVJbmZv
JiBpbmZvKQotewotICAgIG1fY29kZUJsb2NrLT5hZGRQcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9u
KGluc3RydWN0aW9ucygpLnNpemUoKSk7Ci0KLSAgICAvLyBnZXRfZnJvbV9zY29wZSBkc3QsIHNj
b3BlLCBpZCwgUmVzb2x2ZU1vZGVBbmRUeXBlLCBTdHJ1Y3R1cmUsIE9wZXJhbmQKLSAgICBVbmxp
bmtlZFZhbHVlUHJvZmlsZSBwcm9maWxlID0gZW1pdFByb2ZpbGVkT3Bjb2RlKG9wX2dldF9mcm9t
X3Njb3BlKTsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoa2lsbChkc3QpKTsKLSAgICBpbnN0
cnVjdGlvbnMoKS5hcHBlbmQoc2NvcGUtPmluZGV4KCkpOwotICAgIGluc3RydWN0aW9ucygpLmFw
cGVuZChhZGRDb25zdGFudChpZGVudGlmaWVyKSk7Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5k
KFJlc29sdmVNb2RlQW5kVHlwZShyZXNvbHZlTW9kZSwgaW5mby5pc0xvY2FsKCkgPyBMb2NhbENs
b3N1cmVWYXIgOiByZXNvbHZlVHlwZSgpKS5vcGVyYW5kKCkpOwotICAgIGluc3RydWN0aW9ucygp
LmFwcGVuZCgwKTsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoaW5mby5sb2NhbEluZGV4KCkp
OwotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChwcm9maWxlKTsKLSAgICByZXR1cm4gZHN0Owor
ICAgIHN3aXRjaCAodmFyaWFibGUudmFyT2Zmc2V0KCkua2luZCgpKSB7CisgICAgY2FzZSBTdGFj
a09mZnNldDoKKyAgICAgICAgcmV0dXJuIGVtaXRNb3ZlKGtpbGwoZHN0KSwgdmFyaWFibGUubG9j
YWwoKSk7CisgICAgICAgIAorICAgIGNhc2UgQ2FwdHVyZWRBcmd1bWVudHNPZmZzZXQ6CisgICAg
ICAgIEFTU0VSVChzY29wZSA9PSBhcmd1bWVudHNSZWdpc3RlcigpKTsKKyAgICAgICAgVW5saW5r
ZWRWYWx1ZVByb2ZpbGUgcHJvZmlsZSA9IGVtaXRQcm9maWxlZE9wY29kZShvcF9nZXRfZnJvbV9h
cmd1bWVudHMpOworICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoa2lsbChkc3QpKTsKKyAg
ICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHNjb3BlLT5pbmRleCgpKTsKKyAgICAgICAgaW5z
dHJ1Y3Rpb25zKCkuYXBwZW5kKHZhcmlhYmxlLnZhck9mZnNldCgpLmNhcHR1cmVkQXJndW1lbnRz
T2Zmc2V0KCkub2Zmc2V0KCkpOworICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQocHJvZmls
ZSk7CisgICAgICAgIHJldHVybiBkc3Q7CisgICAgICAgIAorICAgIGNhc2UgU2NvcGVPZmZzZXQ6
CisgICAgY2FzZSBJbnZhbGlkVmFyS2luZDoKKyAgICAgICAgbV9jb2RlQmxvY2stPmFkZFByb3Bl
cnR5QWNjZXNzSW5zdHJ1Y3Rpb24oaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKTsKKyAgICAgICAgCisg
ICAgICAgIC8vIGdldF9mcm9tX3Njb3BlIGRzdCwgc2NvcGUsIGlkLCBSZXNvbHZlTW9kZUFuZFR5
cGUsIFN0cnVjdHVyZSwgT3BlcmFuZAorICAgICAgICBVbmxpbmtlZFZhbHVlUHJvZmlsZSBwcm9m
aWxlID0gZW1pdFByb2ZpbGVkT3Bjb2RlKG9wX2dldF9mcm9tX3Njb3BlKTsKKyAgICAgICAgaW5z
dHJ1Y3Rpb25zKCkuYXBwZW5kKGtpbGwoZHN0KSk7CisgICAgICAgIGluc3RydWN0aW9ucygpLmFw
cGVuZChzY29wZS0+aW5kZXgoKSk7CisgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChhZGRD
b25zdGFudCh2YXJpYWJsZS5pZGVudGlmaWVyKCkpKTsKKyAgICAgICAgaW5zdHJ1Y3Rpb25zKCku
YXBwZW5kKFJlc29sdmVNb2RlQW5kVHlwZShyZXNvbHZlTW9kZSwgdmFyaWFibGUudmFyT2Zmc2V0
KCkuaXNTY29wZSgpID8gTG9jYWxDbG9zdXJlVmFyIDogcmVzb2x2ZVR5cGUoKSkub3BlcmFuZCgp
KTsKKyAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKDApOworICAgICAgICBpbnN0cnVjdGlv
bnMoKS5hcHBlbmQodmFyaWFibGUudmFyT2Zmc2V0KCkuaXNTY29wZSgpID8gdmFyaWFibGUudmFy
T2Zmc2V0KCkuc2NvcGVPZmZzZXQoKS5vZmZzZXQoKSA6IDApOworICAgICAgICBpbnN0cnVjdGlv
bnMoKS5hcHBlbmQocHJvZmlsZSk7CisgICAgICAgIHJldHVybiBkc3Q7CisgICAgfQorICAgIAor
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKLVJlZ2lzdGVySUQqIEJ5dGVj
b2RlR2VuZXJhdG9yOjplbWl0UHV0VG9TY29wZShSZWdpc3RlcklEKiBzY29wZSwgY29uc3QgSWRl
bnRpZmllciYgaWRlbnRpZmllciwgUmVnaXN0ZXJJRCogdmFsdWUsIFJlc29sdmVNb2RlIHJlc29s
dmVNb2RlLCBjb25zdCBSZXNvbHZlU2NvcGVJbmZvJiBpbmZvKQorUmVnaXN0ZXJJRCogQnl0ZWNv
ZGVHZW5lcmF0b3I6OmVtaXRQdXRUb1Njb3BlKFJlZ2lzdGVySUQqIHNjb3BlLCBjb25zdCBWYXJp
YWJsZSYgdmFyaWFibGUsIFJlZ2lzdGVySUQqIHZhbHVlLCBSZXNvbHZlTW9kZSByZXNvbHZlTW9k
ZSkKIHsKLSAgICBtX2NvZGVCbG9jay0+YWRkUHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbihpbnN0
cnVjdGlvbnMoKS5zaXplKCkpOwotCi0gICAgLy8gcHV0X3RvX3Njb3BlIHNjb3BlLCBpZCwgdmFs
dWUsIFJlc29sdmVNb2RlQW5kVHlwZSwgU3RydWN0dXJlLCBPcGVyYW5kCi0gICAgZW1pdE9wY29k
ZShvcF9wdXRfdG9fc2NvcGUpOwotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChzY29wZS0+aW5k
ZXgoKSk7Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGFkZENvbnN0YW50KGlkZW50aWZpZXIp
KTsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQodmFsdWUtPmluZGV4KCkpOwotICAgIGlmIChp
bmZvLmlzTG9jYWwoKSkgewotICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoUmVzb2x2ZU1v
ZGVBbmRUeXBlKHJlc29sdmVNb2RlLCBMb2NhbENsb3N1cmVWYXIpLm9wZXJhbmQoKSk7Ci0gICAg
ICAgIGludCBvcGVyYW5kID0gcmVnaXN0ZXJGb3IoaW5mby5sb2NhbEluZGV4KCkpLmluZGV4KCk7
Ci0gICAgICAgIGJvb2wgaXNXYXRjaGFibGVWYXJpYWJsZSA9IGhhc1dhdGNoYWJsZVZhcmlhYmxl
KG9wZXJhbmQpOwotICAgICAgICBBU1NFUlQoIWlzV2F0Y2hhYmxlVmFyaWFibGUgfHwgd2F0Y2hh
YmxlVmFyaWFibGVJZGVudGlmaWVyKG9wZXJhbmQpID09IGlkZW50aWZpZXIpOwotICAgICAgICBp
bnN0cnVjdGlvbnMoKS5hcHBlbmQoaXNXYXRjaGFibGVWYXJpYWJsZSk7Ci0gICAgfSBlbHNlIHsK
LSAgICAgICAgQVNTRVJUKHJlc29sdmVUeXBlKCkgIT0gTG9jYWxDbG9zdXJlVmFyKTsKLSAgICAg
ICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKFJlc29sdmVNb2RlQW5kVHlwZShyZXNvbHZlTW9kZSwg
cmVzb2x2ZVR5cGUoKSkub3BlcmFuZCgpKTsKLSAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5k
KGZhbHNlKTsKLSAgICB9Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGluZm8ubG9jYWxJbmRl
eCgpKTsKLSAgICByZXR1cm4gdmFsdWU7CisgICAgc3dpdGNoICh2YXJpYWJsZS52YXJPZmZzZXQo
KS5raW5kKCkpIHsKKyAgICBjYXNlIFN0YWNrT2Zmc2V0OgorICAgICAgICBlbWl0TW92ZSh2YXJp
YWJsZS5sb2NhbCgpLCB2YWx1ZSk7CisgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICAgICAgCisg
ICAgY2FzZSBDYXB0dXJlZEFyZ3VtZW50c09mZnNldDoKKyAgICAgICAgQVNTRVJUKHNjb3BlID09
IGFyZ3VtZW50c1JlZ2lzdGVyKCkpOworICAgICAgICBlbWl0T3Bjb2RlKG9wX3B1dF90b19hcmd1
bWVudHMpOworICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoc2NvcGUpOworICAgICAgICBp
bnN0cnVjdGlvbnMoKS5hcHBlbmQodmFyaWFibGUudmFyT2Zmc2V0KCkuY2FwdHVyZWRBcmd1bWVu
dHNPZmZzZXQoKS5vZmZzZXQoKSk7CisgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCh2YWx1
ZS0+aW5kZXgoKSk7CisgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICAgICAgCisgICAgY2FzZSBT
Y29wZU9mZnNldDoKKyAgICBjYXNlIEludmFsaWRWYXJLaW5kOiB7CisgICAgICAgIG1fY29kZUJs
b2NrLT5hZGRQcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uKGluc3RydWN0aW9ucygpLnNpemUoKSk7
CisgICAgICAgIAorICAgICAgICAvLyBwdXRfdG9fc2NvcGUgc2NvcGUsIGlkLCB2YWx1ZSwgUmVz
b2x2ZU1vZGVBbmRUeXBlLCBTdHJ1Y3R1cmUsIE9wZXJhbmQKKyAgICAgICAgZW1pdE9wY29kZShv
cF9wdXRfdG9fc2NvcGUpOworICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoc2NvcGUtPmlu
ZGV4KCkpOworICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYWRkQ29uc3RhbnQodmFyaWFi
bGUuaWRlbnQoKSkpOworICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQodmFsdWUtPmluZGV4
KCkpOworICAgICAgICBTY29wZU9mZnNldCBvZmZzZXQ7CisgICAgICAgIGlmICh2YXJpYWJsZS52
YXJPZmZzZXQoKS5pc1Njb3BlKCkpIHsKKyAgICAgICAgICAgIG9mZnNldCA9IHZhcmlhYmxlLnZh
ck9mZnNldCgpLnNjb3BlT2Zmc2V0KCk7CisgICAgICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBl
bmQoUmVzb2x2ZU1vZGVBbmRUeXBlKHJlc29sdmVNb2RlLCBMb2NhbENsb3N1cmVWYXIpLm9wZXJh
bmQoKSk7CisgICAgICAgICAgICBib29sIGlzV2F0Y2hhYmxlVmFyaWFibGUgPSBoYXNXYXRjaGFi
bGVWYXJpYWJsZShvZmZzZXQpOworICAgICAgICAgICAgQVNTRVJUKCFpc1dhdGNoYWJsZVZhcmlh
YmxlIHx8IHdhdGNoYWJsZVZhcmlhYmxlSWRlbnRpZmllcihvZmZzZXQpID09IGlkZW50aWZpZXIp
OworICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGlzV2F0Y2hhYmxlVmFyaWFibGUp
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgQVNTRVJUKHJlc29sdmVUeXBlKCkgIT0g
TG9jYWxDbG9zdXJlVmFyKTsKKyAgICAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChSZXNv
bHZlTW9kZUFuZFR5cGUocmVzb2x2ZU1vZGUsIHJlc29sdmVUeXBlKCkpLm9wZXJhbmQoKSk7Cisg
ICAgICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZmFsc2UpOworICAgICAgICB9CisgICAg
ICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChvZmZzZXQuaXNWYWxpZCgpID8gb2Zmc2V0Lm9mZnNl
dCgpIDogMCk7CisgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICB9IH0KKyAgICAKKyAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVy
YXRvcjo6ZW1pdEluc3RhbmNlT2YoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiB2YWx1ZSwg
UmVnaXN0ZXJJRCogYmFzZVByb3RvdHlwZSkKLXsgCit7CiAgICAgZW1pdE9wY29kZShvcF9pbnN0
YW5jZW9mKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZHN0LT5pbmRleCgpKTsKICAgICBp
bnN0cnVjdGlvbnMoKS5hcHBlbmQodmFsdWUtPmluZGV4KCkpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAko
cmV2aXNpb24gMTgwNzIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9C
eXRlY29kZUdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODMsNTggKzE4Myw1NyBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgSXNDYXB0dXJlZAogICAgIH07CiAKLSAgICBjbGFzcyBM
b2NhbCB7CisgICAgY2xhc3MgVmFyaWFibGUgewogICAgIHB1YmxpYzoKLSAgICAgICAgTG9jYWwo
KQotICAgICAgICAgICAgOiBtX2xvY2FsKDApCisgICAgICAgIGVudW0gVmFyaWFibGVLaW5kIHsg
Tm9ybWFsVmFyaWFibGUsIFNwZWNpYWxWYXJpYWJsZSB9OworCisgICAgICAgIFZhcmlhYmxlKCkK
KyAgICAgICAgICAgIDogbV9vZmZzZXQoKQorICAgICAgICAgICAgLCBtX2xvY2FsKG51bGxwdHIp
CiAgICAgICAgICAgICAsIG1fYXR0cmlidXRlcygwKQotICAgICAgICAgICAgLCBtX2tpbmQoTm9y
bWFsTG9jYWwpCisgICAgICAgICAgICAsIG1fa2luZChOb3JtYWxWYXJpYWJsZSkKKyAgICAgICAg
eworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBWYXJpYWJsZShjb25zdCBJZGVudGlmaWVy
JiBpZGVudCkKKyAgICAgICAgICAgIDogbV9pZGVudChpZGVudCkKKyAgICAgICAgICAgICwgbV9s
b2NhbChudWxscHRyKQorICAgICAgICAgICAgLCBtX2F0dHJpYnV0ZXMoMCkKKyAgICAgICAgICAg
ICwgbV9raW5kKE5vcm1hbFZhcmlhYmxlKSAvLyBUaGlzIGlzIHNvbWV3aGF0IG1lYW5pbmdsZXNz
IGhlcmUgZm9yIHRoaXMga2luZCBvZiBWYXJpYWJsZS4KICAgICAgICAgewogICAgICAgICB9CiAK
LSAgICAgICAgZW51bSBMb2NhbEtpbmQgeyBOb3JtYWxMb2NhbCwgU3BlY2lhbExvY2FsIH07Ci0K
LSAgICAgICAgTG9jYWwoUmVnaXN0ZXJJRCogbG9jYWwsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIExv
Y2FsS2luZCBraW5kKQotICAgICAgICAgICAgOiBtX2xvY2FsKGxvY2FsKQorICAgICAgICBWYXJp
YWJsZShjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgVmFyT2Zmc2V0IG9mZnNldCwgUmVnaXN0ZXJJ
RCogbG9jYWwsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIExvY2FsS2luZCBraW5kKQorICAgICAgICAg
ICAgOiBtX2lkZW50KGlkZW50KQorICAgICAgICAgICAgLCBtX29mZnNldChvZmZzZXQpCisgICAg
ICAgICAgICAsIG1fbG9jYWwobG9jYWwpCiAgICAgICAgICAgICAsIG1fYXR0cmlidXRlcyhhdHRy
aWJ1dGVzKQogICAgICAgICAgICAgLCBtX2tpbmQoa2luZCkKICAgICAgICAgewogICAgICAgICB9
CiAKLSAgICAgICAgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuIG1fbG9jYWw7IH0KLQot
ICAgICAgICBSZWdpc3RlcklEKiBnZXQoKSBjb25zdCB7IHJldHVybiBtX2xvY2FsOyB9CisgICAg
ICAgIC8vIElmIGl0J3MgdW5zZXQsIHRoZW4gaXQgaXMgYSBub24tbG9jYWxseS1zY29wZWQgdmFy
aWFibGUuIElmIGl0IGlzIHNldCwgdGhlbiBpdCBjb3VsZCBiZQorICAgICAgICAvLyBhIHN0YWNr
IHZhcmlhYmxlLCBhIHNjb3BlZCB2YXJpYWJsZSBpbiB0aGUgbG9jYWwgc2NvcGUsIG9yIGEgdmFy
aWFibGUgY2FwdHVyZWQgaW4gdGhlCisgICAgICAgIC8vIGRpcmVjdCBhcmd1bWVudHMgb2JqZWN0
LgorICAgICAgICBib29sIGlzUmVzb2x2ZWQoKSBjb25zdCB7IHJldHVybiAhIW1fb2Zmc2V0OyB9
CisgICAgICAgIAorICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCgpIGNvbnN0IHsgcmV0
dXJuIG1faWRlbnQ7IH0KKyAgICAgICAgCisgICAgICAgIFZhck9mZnNldCBvZmZzZXQoKSBjb25z
dCB7IHJldHVybiBtX29mZnNldDsgfQorICAgICAgICBib29sIGlzTG9jYWwoKSBjb25zdCB7IHJl
dHVybiBtX29mZnNldC5pc1N0YWNrKCk7IH0KKyAgICAgICAgUmVnaXN0ZXJJRCogbG9jYWwoKSBj
b25zdCB7IHJldHVybiBtX2xvY2FsOyB9CiAKICAgICAgICAgYm9vbCBpc1JlYWRPbmx5KCkgY29u
c3QgeyByZXR1cm4gbV9hdHRyaWJ1dGVzICYgUmVhZE9ubHk7IH0KLSAgICAgICAgYm9vbCBpc1Nw
ZWNpYWwoKSBjb25zdCB7IHJldHVybiBtX2tpbmQgIT0gTm9ybWFsTG9jYWw7IH0KKyAgICAgICAg
Ym9vbCBpc1NwZWNpYWwoKSBjb25zdCB7IHJldHVybiBtX2tpbmQgIT0gTm9ybWFsVmFyaWFibGU7
IH0KIAogICAgIHByaXZhdGU6CisgICAgICAgIElkZW50aWZpZXIgbV9pZGVudDsKKyAgICAgICAg
VmFyT2ZmZXQgbV9vZmZzdDsKICAgICAgICAgUmVnaXN0ZXJJRCogbV9sb2NhbDsKICAgICAgICAg
dW5zaWduZWQgbV9hdHRyaWJ1dGVzOwogICAgICAgICBMb2NhbEtpbmQgbV9raW5kOwogICAgIH07
CiAKLSAgICBzdHJ1Y3QgUmVzb2x2ZVNjb3BlSW5mbyB7Ci0gICAgICAgIFJlc29sdmVTY29wZUlu
Zm8oKQotICAgICAgICAgICAgOiBtX2xvY2FsSW5kZXgoMCkKLSAgICAgICAgICAgICwgbV9yZXNv
bHZlU2NvcGVLaW5kKE5vbkxvY2FsU2NvcGUpCi0gICAgICAgIHsKLSAgICAgICAgfQotCi0gICAg
ICAgIFJlc29sdmVTY29wZUluZm8oaW50IGluZGV4KQotICAgICAgICAgICAgOiBtX2xvY2FsSW5k
ZXgoaW5kZXgpCi0gICAgICAgICAgICAsIG1fcmVzb2x2ZVNjb3BlS2luZChMb2NhbFNjb3BlKQot
ICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgICAgICBib29sIGlzTG9jYWwoKSBjb25zdCB7IHJl
dHVybiBtX3Jlc29sdmVTY29wZUtpbmQgPT0gTG9jYWxTY29wZTsgfQotICAgICAgICBpbnQgbG9j
YWxJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1fbG9jYWxJbmRleDsgfQotCi0gICAgcHJpdmF0ZToK
LSAgICAgICAgaW50IG1fbG9jYWxJbmRleDsKLSAgICAgICAgZW51bSB7IExvY2FsU2NvcGUsIE5v
bkxvY2FsU2NvcGUgfSBtX3Jlc29sdmVTY29wZUtpbmQ7Ci0gICAgfTsKLQogICAgIHN0cnVjdCBU
cnlSYW5nZSB7CiAgICAgICAgIFJlZlB0cjxMYWJlbD4gc3RhcnQ7CiAgICAgICAgIFJlZlB0cjxM
YWJlbD4gZW5kOwpAQCAtMjg1LDEyICsyODQsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IGJvb2wgaXNDYXB0dXJlZChpbnQgb3BlcmFuZCk7CiAgICAgICAgIENhcHR1cmVNb2RlIGNhcHR1
cmVNb2RlKGludCBvcGVyYW5kKSB7IHJldHVybiBpc0NhcHR1cmVkKG9wZXJhbmQpID8gSXNDYXB0
dXJlZCA6IE5vdENhcHR1cmVkOyB9CiAgICAgICAgIAotICAgICAgICBMb2NhbCBsb2NhbChjb25z
dCBJZGVudGlmaWVyJik7Ci0gICAgICAgIExvY2FsIGNvbnN0TG9jYWwoY29uc3QgSWRlbnRpZmll
ciYpOwotCisgICAgICAgIFZhcmlhYmxlIHZhcmlhYmxlKGNvbnN0IElkZW50aWZpZXImKTsKKyAg
ICAgICAgCiAgICAgICAgIC8vIFJldHVybnMgdGhlIHJlZ2lzdGVyIHN0b3JpbmcgInRoaXMiCiAg
ICAgICAgIFJlZ2lzdGVySUQqIHRoaXNSZWdpc3RlcigpIHsgcmV0dXJuICZtX3RoaXNSZWdpc3Rl
cjsgfQotICAgICAgICAKKyAgICAgICAgUmVnaXN0ZXJJRCogYXJndW1lbnRzUmVnaXN0ZXIoKSB7
IHJldHVybiBtX2FyZ3VtZW50c1JlZ2lzdGVyOyB9CiAgICAgICAgIFJlZ2lzdGVySUQqIHNjb3Bl
UmVnaXN0ZXIoKSB7IHJldHVybiBtX3Njb3BlUmVnaXN0ZXI7IH0KIAogICAgICAgICAvLyBSZXR1
cm5zIHRoZSBuZXh0IGF2YWlsYWJsZSB0ZW1wb3JhcnkgcmVnaXN0ZXIuIFJlZ2lzdGVycyByZXR1
cm5lZCBieQpAQCAtNTAyLDEwICs1MDAsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZv
aWQgZW1pdFRvUHJpbWl0aXZlKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogc3JjKTsKIAog
ICAgICAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSgpOwotICAgICAgICBSZWdpc3RlcklEKiBl
bWl0UmVzb2x2ZUNvbnN0YW50TG9jYWwoUmVnaXN0ZXJJRCogZHN0LCBjb25zdCBJZGVudGlmaWVy
JiwgUmVzb2x2ZVNjb3BlSW5mbyYpOwotICAgICAgICBSZWdpc3RlcklEKiBlbWl0UmVzb2x2ZVNj
b3BlKFJlZ2lzdGVySUQqIGRzdCwgY29uc3QgSWRlbnRpZmllciYsIFJlc29sdmVTY29wZUluZm8m
KTsKLSAgICAgICAgUmVnaXN0ZXJJRCogZW1pdEdldEZyb21TY29wZShSZWdpc3RlcklEKiBkc3Qs
IFJlZ2lzdGVySUQqIHNjb3BlLCBjb25zdCBJZGVudGlmaWVyJiwgUmVzb2x2ZU1vZGUsIGNvbnN0
IFJlc29sdmVTY29wZUluZm8mKTsKLSAgICAgICAgUmVnaXN0ZXJJRCogZW1pdFB1dFRvU2NvcGUo
UmVnaXN0ZXJJRCogc2NvcGUsIGNvbnN0IElkZW50aWZpZXImLCBSZWdpc3RlcklEKiB2YWx1ZSwg
UmVzb2x2ZU1vZGUsIGNvbnN0IFJlc29sdmVTY29wZUluZm8mKTsKKyAgICAgICAgUmVnaXN0ZXJJ
RCogZW1pdFJlc29sdmVDb25zdGFudExvY2FsKFJlZ2lzdGVySUQqIGRzdCwgY29uc3QgVmFyaWFi
bGUmKTsKKyAgICAgICAgUmVnaXN0ZXJJRCogZW1pdFJlc29sdmVTY29wZShSZWdpc3RlcklEKiBk
c3QsIGNvbnN0IFZhcmlhYmxlJik7CisgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRHZXRGcm9tU2Nv
cGUoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBzY29wZSwgY29uc3QgVmFyaWFibGUmLCBS
ZXNvbHZlTW9kZSk7CisgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRQdXRUb1Njb3BlKFJlZ2lzdGVy
SUQqIHNjb3BlLCBjb25zdCBWYXJpYWJsZSYsIFJlZ2lzdGVySUQqIHZhbHVlLCBSZXNvbHZlTW9k
ZSk7CiAKICAgICAgICAgUGFzc1JlZlB0cjxMYWJlbD4gZW1pdExhYmVsKExhYmVsKik7CiAgICAg
ICAgIHZvaWQgZW1pdExvb3BIaW50KCk7CkBAIC02MTMsOSArNjExLDEyIEBAIG5hbWVzcGFjZSBK
U0MgewogCiAgICAgICAgIC8vIEFkZHMgYSB2YXIgc2xvdCBhbmQgbWFwcyBpdCB0byB0aGUgbmFt
ZSBpZGVudCBpbiBzeW1ib2xUYWJsZSgpLgogICAgICAgICBlbnVtIFdhdGNoTW9kZSB7IElzV2F0
Y2hhYmxlLCBOb3RXYXRjaGFibGUgfTsKLSAgICAgICAgUmVnaXN0ZXJJRCogYWRkVmFyKGNvbnN0
IElkZW50aWZpZXImLCBDb25zdGFudE1vZGUsIFdhdGNoTW9kZSk7Ci0KLSAgICAgICAgLy8gQWRk
cyBhbiBhbm9ueW1vdXMgdmFyIHNsb3QuIFRvIGdpdmUgdGhpcyBzbG90IGEgbmFtZSwgYWRkIGl0
IHRvIHN5bWJvbFRhYmxlKCkuCisgICAgICAgIFNjb3BlT2Zmc2V0IGFkZFNjb3BlZFZhcihjb25z
dCBJZGVudGlmaWVyJiBpZGVudCwgQ29uc3RhbnRNb2RlIGNvbnN0YW50TW9kZSwgV2F0Y2hNb2Rl
IHdhdGhNb2RlKTsKKyAgICAgICAgCisgICAgICAgIC8vIEFkZHMgYSBsb2NhbCB2YXIgc2xvdC4K
KyAgICAgICAgUmVnaXN0ZXJJRCogYWRkVmFyKGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBDb25z
dGFudE1vZGUgY29uc3RhbnRNb2RlKTsKKyAgICAgICAgCisgICAgICAgIC8vIEFkZHMgYW4gYW5v
bnltb3VzIGxvY2FsIHZhciBzbG90LiBUbyBnaXZlIHRoaXMgc2xvdCBhIG5hbWUsIGFkZCBpdCB0
byBzeW1ib2xUYWJsZSgpLgogICAgICAgICBSZWdpc3RlcklEKiBhZGRWYXIoKQogICAgICAgICB7
CiAgICAgICAgICAgICArK21fY29kZUJsb2NrLT5tX251bVZhcnM7CkBAIC03MTYsOSArNzE3LDYg
QEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdFRocm93RXhwcmVz
c2lvblRvb0RlZXBFeGNlcHRpb24oKTsKIAotICAgICAgICB2b2lkIGNyZWF0ZUFyZ3VtZW50c0lm
TmVjZXNzYXJ5KCk7Ci0gICAgICAgIFJlZ2lzdGVySUQqIGNyZWF0ZUxhenlSZWdpc3RlcklmTmVj
ZXNzYXJ5KFJlZ2lzdGVySUQqKTsKLSAgICAgICAgCiAgICAgICAgIGJvb2wgaGFzV2F0Y2hhYmxl
VmFyaWFibGUoaW50IG9wZXJhbmQpIGNvbnN0CiAgICAgICAgIHsKICAgICAgICAgICAgIFZpcnR1
YWxSZWdpc3RlciByZWcob3BlcmFuZCk7CkBAIC03NTgsNiArNzU2LDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIFJlZ2lzdGVySUQgbV90aGlzUmVnaXN0ZXI7CiAgICAgICAgIFJlZ2lzdGVy
SUQgbV9jYWxsZWVSZWdpc3RlcjsKICAgICAgICAgUmVnaXN0ZXJJRCogbV9zY29wZVJlZ2lzdGVy
IHsgbnVsbHB0ciB9OworICAgICAgICBSZWdpc3RlcklEKiBtX2FyZ3VtZW50c1JlZ2lzdGVyIHsg
bnVsbHB0ciB9OwogICAgICAgICBSZWdpc3RlcklEKiBtX2xleGljYWxFbnZpcm9ubWVudFJlZ2lz
dGVyIHsgbnVsbHB0ciB9OwogICAgICAgICBSZWdpc3RlcklEKiBtX2VtcHR5VmFsdWVSZWdpc3Rl
ciB7IG51bGxwdHIgfTsKICAgICAgICAgUmVnaXN0ZXJJRCogbV9nbG9iYWxPYmplY3RSZWdpc3Rl
ciB7IG51bGxwdHIgfTsKQEAgLTc2Niw2ICs3NjUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgVmVjdG9yPElkZW50aWZpZXIsIDE2PiBtX3dhdGNoYWJsZVZhcmlhYmxlczsKICAgICAgICAg
U2VnbWVudGVkVmVjdG9yPFJlZ2lzdGVySUQsIDMyPiBtX2NvbnN0YW50UG9vbFJlZ2lzdGVyczsK
ICAgICAgICAgU2VnbWVudGVkVmVjdG9yPFJlZ2lzdGVySUQsIDMyPiBtX2NhbGxlZVJlZ2lzdGVy
czsKKyAgICAgICAgdW5zaWduZWQgbV9udW1DYXB0dXJlZFZhcmlhYmxlczsKICAgICAgICAgU2Vn
bWVudGVkVmVjdG9yPFJlZ2lzdGVySUQsIDMyPiBtX3BhcmFtZXRlcnM7CiAgICAgICAgIFNlZ21l
bnRlZFZlY3RvcjxMYWJlbCwgMzI+IG1fbGFiZWxzOwogICAgICAgICBMYWJlbFNjb3BlU3RvcmUg
bV9sYWJlbFNjb3BlczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIv
Tm9kZXNDb2RlZ2VuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAJKHJldmlzaW9uIDE4MDcyMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtOTYyLDcgKzk2Miw3IEBAIFJlZ2lzdGVySUQqIFZvaWROb2RlOjplbWl0Qnl0ZWNvZGUo
Qnl0ZWMKICAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRMb2FkKGRzdCwganNVbmRlZmluZWQoKSk7
CiB9CiAKLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUeXBlT2ZWYWx1ZU5vZGUg
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLSBUeXBlT2ZSZXNvbHZlTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQogCiBSZWdpc3RlcklEKiBUeXBlT2ZSZXNvbHZlTm9kZTo6ZW1pdEJ5dGVjb2Rl
KEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RIZWFwLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEhlYXAuaAkocmV2aXNpb24g
MTgwNzIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEhlYXAuaAko
d29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNiBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IERGRyB7CiAgICAgbWFjcm8oV29ybGQpIFwKICAgICBtYWNybyhTdGFjaykgXAogICAgIG1hY3Jv
KEhlYXApIFwKLSAgICBtYWNybyhBcmd1bWVudHNfcmVnaXN0ZXJzKSBcCiAgICAgbWFjcm8oQnV0
dGVyZmx5X3B1YmxpY0xlbmd0aCkgXAogICAgIG1hY3JvKEJ1dHRlcmZseV92ZWN0b3JMZW5ndGgp
IFwKICAgICBtYWNybyhHZXR0ZXJTZXR0ZXJfZ2V0dGVyKSBcCkBAIC02NSw3ICs2NCw4IEBAIG5h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICBtYWNybyhJbmRleGVkQ29udGlndW91
c1Byb3BlcnRpZXMpIFwKICAgICBtYWNybyhJbmRleGVkQXJyYXlTdG9yYWdlUHJvcGVydGllcykg
XAogICAgIG1hY3JvKEFycmF5U3RvcmFnZVByb3BlcnRpZXMpIFwKLSAgICBtYWNybyhWYXJpYWJs
ZXMpIFwKKyAgICBtYWNybyhEaXJlY3RBcmd1bWVudHNQcm9wZXJ0aWVzKSBcCisgICAgbWFjcm8o
U2NvcGVkQXJndW1lbnRzUHJvcGVydGllcykgXAogICAgIG1hY3JvKFR5cGVkQXJyYXlQcm9wZXJ0
aWVzKSBcCiAgICAgbWFjcm8oSGVhcE9iamVjdENvdW50KSAvKiBVc2VkIHRvIHJlZmxlY3QgdGhl
IGZhY3QgdGhhdCBzb21lIGFsbG9jYXRpb25zIHJldmVhbCBvYmplY3QgaWRlbnRpdHkgKi9cCiAg
ICAgbWFjcm8oUmVnRXhwU3RhdGUpIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHJldmlzaW9u
IDE4MDcyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnBy
ZXRlcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTAzMCw3ICsxMDMwLDggQEAgYm9vbCBB
YnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgfSBlbHNlCiAg
ICAgICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQobV9ncmFwaCwgbV9ncmFwaC5tX3ZtLnN0
cmluZ1N0cnVjdHVyZS5nZXQoKSk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBB
cnJheTo6QXJndW1lbnRzOgorICAgICAgICBjYXNlIEFycmF5OjpEaXJlY3RBcmd1bWVudHM6Cisg
ICAgICAgIGNhc2UgQXJyYXk6OlNjb3BlZEFyZ3VtZW50czoKICAgICAgICAgICAgIGZvck5vZGUo
bm9kZSkubWFrZUhlYXBUb3AoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFy
cmF5OjpJbnQzMjoKQEAgLTE2MTcsOCArMTYxOCwxMSBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0
ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZToKICAg
ICAgICAgY2FzZSBBcnJheTo6U2xvd1B1dEFycmF5U3RvcmFnZToKICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6Ci0gICAgICAgICAgICBmaWx0ZXIobm9k
ZS0+Y2hpbGQxKCksIFNwZWNBcmd1bWVudHMpOworICAgICAgICBjYXNlIEFycmF5OjpEaXJlY3RB
cmd1bWVudHM6CisgICAgICAgICAgICBmaWx0ZXIobm9kZS0+Y2hpbGQxKCksIFNwZWNEaXJlY3RB
cmd1bWVudHMpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQXJyYXk6OlNjb3Bl
ZEFyZ3VtZW50czoKKyAgICAgICAgICAgIGZpbHRlcihub2RlLT5jaGlsZDEoKSwgU3BlY1Njb3Bl
ZEFyZ3VtZW50cyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6SW50
OEFycmF5OgogICAgICAgICAgICAgZmlsdGVyKG5vZGUtPmNoaWxkMSgpLCBTcGVjSW50OEFycmF5
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5jcHAJKHJl
dmlzaW9uIDE4MDcyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2Rl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk3LDggKzE5NywxNSBAQCBBcnJheU1vZGUgQXJyYXlN
b2RlOjpyZWZpbmUoCiAgICAgICAgIGlmIChpc1N0cmluZ1NwZWN1bGF0aW9uKGJhc2UpKQogICAg
ICAgICAgICAgcmV0dXJuIHdpdGhUeXBlKEFycmF5OjpTdHJpbmcpOwogICAgICAgICAKLSAgICAg
ICAgaWYgKGlzQXJndW1lbnRzU3BlY3VsYXRpb24oYmFzZSkpCi0gICAgICAgICAgICByZXR1cm4g
d2l0aFR5cGUoQXJyYXk6OkFyZ3VtZW50cyk7CisgICAgICAgIGlmIChpc0RpcmVjdEFyZ3VtZW50
c1NwZWN1bGF0aW9uKGJhc2UpIHx8IGlzU2NvcGVkQXJndW1lbnRzU3BlY3VsYXRpb24oYmFzZSkp
IHsKKyAgICAgICAgICAgIC8vIEhhbmRsZSBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGFzIGdlbmVy
aWMgYWNjZXNzZXMuCisgICAgICAgICAgICBpZiAoZ3JhcGguaGFzRXhpdFNpdGUobm9kZS0+b3Jp
Z2luLnNlbWFudGljLCBPdXRPZkJvdW5kcykgfHwgIWlzSW5Cb3VuZHMoKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gQXJyYXlNb2RlKEFycmF5OjpHZW5lcmljKTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgaWYgKGlzRGlyZWN0QXJndW1lbnRzU3BlY3VsYXRpb24oYmFzZSkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIHdpdGhUeXBlKEFycmF5OjpEaXJlY3RBcmd1bWVudHMpOworICAgICAg
ICAgICAgcmV0dXJuIHdpdGhUeXBlKEFycmF5OjpTY29wZWRBcmd1bWVudHMpOworICAgICAgICB9
CiAgICAgICAgIAogICAgICAgICBBcnJheU1vZGUgcmVzdWx0OwogICAgICAgICBzd2l0Y2ggKG5v
ZGUtPm9wKCkpIHsKQEAgLTM5Niw4ICs0MDMsMTEgQEAgYm9vbCBBcnJheU1vZGU6OmFscmVhZHlD
aGVja2VkKEdyYXBoJiBncgogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0gfQog
ICAgICAgICAKLSAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6Ci0gICAgICAgIHJldHVybiBzcGVj
dWxhdGlvbkNoZWNrZWQodmFsdWUubV90eXBlLCBTcGVjQXJndW1lbnRzKTsKKyAgICBjYXNlIEFy
cmF5OjpEaXJlY3RBcmd1bWVudHM6CisgICAgICAgIHJldHVybiBzcGVjdWxhdGlvbkNoZWNrZWQo
dmFsdWUubV90eXBlLCBTcGVjRGlyZWN0QXJndW1lbnRzKTsKKyAgICAgICAgCisgICAgY2FzZSBB
cnJheTo6U2NvcGVkQXJndW1lbnRzOgorICAgICAgICByZXR1cm4gc3BlY3VsYXRpb25DaGVja2Vk
KHZhbHVlLm1fdHlwZSwgU3BlY1Njb3BlZEFyZ3VtZW50cyk7CiAgICAgICAgIAogICAgIGNhc2Ug
QXJyYXk6OkludDhBcnJheToKICAgICAgICAgcmV0dXJuIHNwZWN1bGF0aW9uQ2hlY2tlZCh2YWx1
ZS5tX3R5cGUsIFNwZWNJbnQ4QXJyYXkpOwpAQCAtNDYxLDggKzQ3MSwxMCBAQCBjb25zdCBjaGFy
KiBhcnJheVR5cGVUb1N0cmluZyhBcnJheTo6VHlwCiAgICAgICAgIHJldHVybiAiQXJyYXlTdG9y
YWdlIjsKICAgICBjYXNlIEFycmF5OjpTbG93UHV0QXJyYXlTdG9yYWdlOgogICAgICAgICByZXR1
cm4gIlNsb3dQdXRBcnJheVN0b3JhZ2UiOwotICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czoKLSAg
ICAgICAgcmV0dXJuICJBcmd1bWVudHMiOworICAgIGNhc2UgQXJyYXk6OkRpcmVjdEFyZ3VtZW50
czoKKyAgICAgICAgcmV0dXJuICJEaXJlY3RBcmd1bWVudHMiOworICAgIGNhc2UgQXJyYXk6OlNj
b3BlZEFyZ3VtZW50czoKKyAgICAgICAgcmV0dXJuICJTY29wZWRBcmd1bWVudHMiOwogICAgIGNh
c2UgQXJyYXk6OkludDhBcnJheToKICAgICAgICAgcmV0dXJuICJJbnQ4QXJyYXkiOwogICAgIGNh
c2UgQXJyYXk6OkludDE2QXJyYXk6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0FycmF5TW9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QXJyYXlNb2RlLmgJKHJldmlzaW9uIDE4MDcyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQXJyYXlNb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDEyLCAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjUsNyArNjUsOSBA
QCBlbnVtIFR5cGUgewogICAgIEFycmF5U3RvcmFnZSwKICAgICBTbG93UHV0QXJyYXlTdG9yYWdl
LAogICAgIAotICAgIEFyZ3VtZW50cywKKyAgICBEaXJlY3RBcmd1bWVudHMsCisgICAgU2NvcGVk
QXJndW1lbnRzLAorICAgIAogICAgIEludDhBcnJheSwKICAgICBJbnQxNkFycmF5LAogICAgIElu
dDMyQXJyYXksCkBAIC0yOTQsNyArMjk2LDggQEAgcHVibGljOgogICAgICAgICBjYXNlIEFycmF5
OjpVbnByb2ZpbGVkOgogICAgICAgICBjYXNlIEFycmF5OjpGb3JjZUV4aXQ6CiAgICAgICAgIGNh
c2UgQXJyYXk6OkdlbmVyaWM6Ci0gICAgICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czoKKyAgICAg
ICAgY2FzZSBBcnJheTo6RGlyZWN0QXJndW1lbnRzOgorICAgICAgICBjYXNlIEFycmF5OjpTY29w
ZWRBcmd1bWVudHM6CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGRlZmF1bHQ6
CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTMyMCwxMSArMzIzLDkgQEAgcHVibGljOgog
ICAgIHsKICAgICAgICAgc3dpdGNoICh0eXBlKCkpIHsKICAgICAgICAgY2FzZSBBcnJheTo6U3Ry
aW5nOgorICAgICAgICBjYXNlIEFycmF5OjpEaXJlY3RBcmd1bWVudHM6CisgICAgICAgIGNhc2Ug
QXJyYXk6OlNjb3BlZEFyZ3VtZW50czoKICAgICAgICAgICAgIHJldHVybiBBcnJheU1vZGUoQXJy
YXk6OkdlbmVyaWMpOwotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgICAgIGNhc2UgQXJyYXk6
OkFyZ3VtZW50czoKLSAgICAgICAgICAgIHJldHVybiBBcnJheU1vZGUoQXJyYXk6OkdlbmVyaWMp
OwotI2VuZGlmCiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICByZXR1cm4gKnRoaXM7CiAg
ICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5o
CShyZXZpc2lvbiAxODA3MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2Ji
ZXJpemUuaAkod29ya2luZyBjb3B5KQpAQCAtNDY2LDEwICs0NjYsMTQgQEAgdm9pZCBjbG9iYmVy
aXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgICAgICAgICAgZGVmKFB1cmVWYWx1ZShu
b2RlLCBtb2RlLmFzV29yZCgpKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAK
LSAgICAgICAgY2FzZSBBcnJheTo6QXJndW1lbnRzOgotICAgICAgICAgICAgcmVhZChBcmd1bWVu
dHNfcmVnaXN0ZXJzKTsKLSAgICAgICAgICAgIHJlYWQoVmFyaWFibGVzKTsKLSAgICAgICAgICAg
IGRlZihIZWFwTG9jYXRpb24oSW5kZXhlZFByb3BlcnR5TG9jLCBWYXJpYWJsZXMsIG5vZGUtPmNo
aWxkMSgpLCBub2RlLT5jaGlsZDIoKSksIG5vZGUpOworICAgICAgICBjYXNlIEFycmF5OjpEaXJl
Y3RBcmd1bWVudHM6CisgICAgICAgICAgICByZWFkKERpcmVjdEFyZ3VtZW50c1Byb3BlcnRpZXMp
OworICAgICAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihJbmRleGVkUHJvcGVydHlMb2MsIERpcmVj
dEFyZ3VtZW50c1Byb3BlcnRpZXMsIG5vZGUtPmNoaWxkMSgpLCBub2RlLT5jaGlsZDIoKSksIG5v
ZGUpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXJy
YXk6OlNjb3BlZEFyZ3VtZW50czoKKyAgICAgICAgICAgIHJlYWQoU2NvcGVkQXJndW1lbnRzUHJv
cGVydGllcyk7CisgICAgICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEluZGV4ZWRQcm9wZXJ0eUxv
YywgU2NvcGVkQXJndW1lbnRzUHJvcGVydGllcywgbm9kZS0+Y2hpbGQxKCksIG5vZGUtPmNoaWxk
MigpKSwgbm9kZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAKICAgICAgICAg
Y2FzZSBBcnJheTo6SW50MzI6CkBAIC01NjAsMTMgKzU2NCw2IEBAIHZvaWQgY2xvYmJlcml6ZShH
cmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICAgICAgICAgIHdyaXRlKEhlYXApOwogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50
czoKLSAgICAgICAgICAgIHJlYWQoQXJndW1lbnRzX3JlZ2lzdGVycyk7Ci0gICAgICAgICAgICBy
ZWFkKE1pc2NGaWVsZHMpOwotICAgICAgICAgICAgd3JpdGUoVmFyaWFibGVzKTsKLSAgICAgICAg
ICAgIGRlZihIZWFwTG9jYXRpb24oSW5kZXhlZFByb3BlcnR5TG9jLCBWYXJpYWJsZXMsIGJhc2Us
IGluZGV4KSwgdmFsdWUpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgCiAgICAg
ICAgIGNhc2UgQXJyYXk6OkludDMyOgogICAgICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgp
LmlzT3V0T2ZCb3VuZHMoKSkgewogICAgICAgICAgICAgICAgIHJlYWQoV29ybGQpOwpAQCAtNzYx
LDcgKzc1OCw4IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAg
ICAgICAgICAgIGRlZihQdXJlVmFsdWUobm9kZSwgbW9kZS5hc1dvcmQoKSkpOwogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czoK
KyAgICAgICAgY2FzZSBBcnJheTo6RGlyZWN0QXJndW1lbnRzOgorICAgICAgICBjYXNlIEFycmF5
OjpTY29wZWRBcmd1bWVudHM6CiAgICAgICAgICAgICByZWFkKE1pc2NGaWVsZHMpOwogICAgICAg
ICAgICAgZGVmKEhlYXBMb2NhdGlvbihBcnJheUxlbmd0aExvYywgTWlzY0ZpZWxkcywgbm9kZS0+
Y2hpbGQxKCkpLCBub2RlKTsKICAgICAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkocmV2aXNpb24gMTgwNzIwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNjgyLDcgKzY4Miw2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBjYXNlIEFycmF5OjpD
b250aWd1b3VzOgogICAgICAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlOgogICAgICAg
ICAgICAgY2FzZSBBcnJheTo6U2xvd1B1dEFycmF5U3RvcmFnZToKLSAgICAgICAgICAgIGNhc2Ug
QXJyYXk6OkFyZ3VtZW50czoKICAgICAgICAgICAgICAgICBmaXhFZGdlPEtub3duQ2VsbFVzZT4o
Y2hpbGQxKTsKICAgICAgICAgICAgICAgICBmaXhFZGdlPEludDMyVXNlPihjaGlsZDIpOwogICAg
ICAgICAgICAgICAgIGluc2VydFN0b3JlQmFycmllcihtX2luZGV4SW5CbG9jaywgY2hpbGQxLCBj
aGlsZDMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAxODA3MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTk4LDgg
KzI1OTgsMTEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAg
ICAgICBjYXNlIEFycmF5OjpTdHJpbmc6CiAgICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPblN0
cmluZyhub2RlKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpBcmd1
bWVudHM6Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkFyZ3VtZW50cyhub2RlKTsKKyAg
ICAgICAgY2FzZSBBcnJheTo6RGlyZWN0QXJndW1lbnRzOgorICAgICAgICAgICAgY29tcGlsZUdl
dEJ5VmFsT25EaXJlY3RBcmd1bWVudHMobm9kZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBBcnJheTo6U2NvcGVkQXJndW1lbnRzOgorICAgICAgICAgICAgY29tcGlsZUdldEJ5
VmFsT25TY29wZWRBcmd1bWVudHMobm9kZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ZGVmYXVsdDogewogICAgICAgICAgICAgVHlwZWRBcnJheVR5cGUgdHlwZSA9IG5vZGUtPmFycmF5
TW9kZSgpLnR5cGVkQXJyYXlUeXBlKCk7CkBAIC0yODI5LDQ3ICsyODMyLDYgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KICAgICAgICAgICAgIAotICAgICAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6IHsKLSAg
ICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIGNoaWxkMyk7Ci0gICAgICAgICAg
ICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKLSAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBz
Y3JhdGNoMih0aGlzKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgR1BSUmVnIHZhbHVlUmVn
ID0gdmFsdWUuZ3ByKCk7Ci0gICAgICAgICAgICBHUFJSZWcgc2NyYXRjaFJlZyA9IHNjcmF0Y2gu
Z3ByKCk7Ci0gICAgICAgICAgICBHUFJSZWcgc2NyYXRjaDJSZWcgPSBzY3JhdGNoMi5ncHIoKTsK
LSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQotICAgICAgICAg
ICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgLy8gVHdvIHJlYWxseSBsYW1lIGNoZWNrcy4K
LSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0gICAgICAgICAgICAgICAgVW5jb3VudGFi
bGUsIEpTVmFsdWVTb3VyY2UoKSwgMCwKLSAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2gzMigK
LSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVy
dHlSZWcsCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VS
ZWcsIEFyZ3VtZW50czo6b2Zmc2V0T2ZOdW1Bcmd1bWVudHMoKSkpKTsKLSAgICAgICAgICAgIHNw
ZWN1bGF0aW9uQ2hlY2soCi0gICAgICAgICAgICAgICAgVW5jb3VudGFibGUsIEpTVmFsdWVTb3Vy
Y2UoKSwgMCwKLSAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0UHRyKAotICAgICAgICAg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywKLSAgICAgICAgICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoCi0gICAgICAgICAgICAgICAgICAgICAgICBiYXNlUmVn
LCBBcmd1bWVudHM6Om9mZnNldE9mU2xvd0FyZ3VtZW50RGF0YSgpKSkpOwotCi0gICAgICAgICAg
ICBtX2ppdC5tb3ZlKHByb3BlcnR5UmVnLCBzY3JhdGNoMlJlZyk7Ci0gICAgICAgICAgICBtX2pp
dC5zaWduRXh0ZW5kMzJUb1B0cihzY3JhdGNoMlJlZywgc2NyYXRjaDJSZWcpOwotICAgICAgICAg
ICAgbV9qaXQubG9hZFB0cigKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhiYXNlUmVnLCBBcmd1bWVudHM6Om9mZnNldE9mUmVnaXN0ZXJzKCkpLAotICAgICAgICAgICAg
ICAgIHNjcmF0Y2hSZWcpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBtX2ppdC5zdG9yZTY0
KAotICAgICAgICAgICAgICAgIHZhbHVlUmVnLAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpCYXNlSW5kZXgoCi0gICAgICAgICAgICAgICAgICAgIHNjcmF0Y2hSZWcsIHNjcmF0Y2gy
UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwKLSAgICAgICAgICAgICAgICAgICAgQ2Fs
bEZyYW1lOjp0aGlzQXJndW1lbnRPZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikgKyBzaXplb2Yo
UmVnaXN0ZXIpKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG5vUmVzdWx0KG5vZGUpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAogICAgICAgICBkZWZh
dWx0OiB7CiAgICAgICAgICAgICBUeXBlZEFycmF5VHlwZSB0eXBlID0gYXJyYXlNb2RlLnR5cGVk
QXJyYXlUeXBlKCk7CiAgICAgICAgICAgICBpZiAoaXNJbnQodHlwZSkpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24g
MTgwNzIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTcyMiw5ICs3MjIsMTIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y2hlY2tBcnJheShOb2RlKiBubwogICAgICAgICBub1Jlc3VsdChtX2N1cnJlbnROb2RlKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6Ci0gICAg
ICAgIHNwZWN1bGF0ZUNlbGxUeXBlV2l0aG91dFR5cGVGaWx0ZXJpbmcobm9kZS0+Y2hpbGQxKCks
IGJhc2VSZWcsIEFyZ3VtZW50c1R5cGUpOwotCisgICAgY2FzZSBBcnJheTo6RGlyZWN0QXJndW1l
bnRzOgorICAgICAgICBzcGVjdWxhdGVDZWxsVHlwZVdpdGhvdXRUeXBlRmlsdGVyaW5nKG5vZGUt
PmNoaWxkMSgpLCBiYXNlUmVnLCBEaXJlY3RBcmd1bWVudHNUeXBlKTsKKyAgICAgICAgbm9SZXN1
bHQobV9jdXJyZW50Tm9kZSk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFycmF5OjpTY29w
ZWRBcmd1bWVudHM6CisgICAgICAgIHNwZWN1bGF0ZUNlbGxUeXBlV2l0aG91dFR5cGVGaWx0ZXJp
bmcobm9kZS0+Y2hpbGQxKCksIGJhc2VSZWcsIFNjb3BlZEFyZ3VtZW50c1R5cGUpOwogICAgICAg
ICBub1Jlc3VsdChtX2N1cnJlbnROb2RlKTsKICAgICAgICAgcmV0dXJuOwogICAgIGRlZmF1bHQ6
CkBAIC00MDg4LDcgKzQwOTEsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0VHlw
ZWRBcnJhCiAgICAgaW50MzJSZXN1bHQodmVjdG9yR1BSLCBub2RlKTsKIH0KIAotdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25Bcmd1bWVudHMoTm9kZSogbm9kZSkKK3ZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uRGlyZWN0QXJndW1lbnRzKE5vZGUqIG5v
ZGUpCiB7CiAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEo
KSk7CiAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG5vZGUt
PmNoaWxkMigpKTsKQEAgLTQxMDMsODAgKzQxMDYsODkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZUdldEJ5VmFsT25BcgogICAgIEdQUlJlZyByZXN1bHRSZWcgPSByZXN1bHQuZ3ByKCk7
CiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKICAgICBHUFJSZWcgcmVzdWx0VGFnUmVnID0gcmVzdWx0
VGFnLmdwcigpOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZXN1
bHRUYWdSZWcsIHJlc3VsdFJlZyk7CisjZWxzZQorICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3Mg
PSBKU1ZhbHVlUmVncyhyZXN1bHRSZWcpOwogI2VuZGlmCiAgICAgR1BSUmVnIHNjcmF0Y2hSZWcg
PSBzY3JhdGNoLmdwcigpOwogICAgIAogICAgIGlmICghbV9jb21waWxlT2theSkKICAgICAgICAg
cmV0dXJuOwotICAKLSAgICBBU1NFUlQoQXJyYXlNb2RlKEFycmF5OjpBcmd1bWVudHMpLmFscmVh
ZHlDaGVja2VkKG1faml0LmdyYXBoKCksIG5vZGUsIG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGls
ZDEoKSkpKTsKICAgICAKLSAgICAvLyBUd28gcmVhbGx5IGxhbWUgY2hlY2tzLgotICAgIHNwZWN1
bGF0aW9uQ2hlY2soCi0gICAgICAgIEV4b3RpY09iamVjdE1vZGUsIEpTVmFsdWVTb3VyY2UoKSwg
MCwKLSAgICAgICAgbV9qaXQuYnJhbmNoMzIoCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKGJhc2VSZWcsIEFyZ3VtZW50czo6b2Zmc2V0T2ZOdW1Bcmd1bWVudHMoKSkpKTsKKyAg
ICBBU1NFUlQoQXJyYXlNb2RlKEFycmF5OjpEaXJlY3RBcmd1bWVudHMpLmFscmVhZHlDaGVja2Vk
KG1faml0LmdyYXBoKCksIG5vZGUsIG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSkpKTsK
KyAgICAKICAgICBzcGVjdWxhdGlvbkNoZWNrKAogICAgICAgICBFeG90aWNPYmplY3RNb2RlLCBK
U1ZhbHVlU291cmNlKCksIDAsCiAgICAgICAgIG1faml0LmJyYW5jaFRlc3RQdHIoCiAgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKAotICAgICAgICAgICAgICAgIGJhc2VSZWcsIEFyZ3VtZW50czo6b2Zmc2V0T2ZT
bG93QXJndW1lbnREYXRhKCkpKSk7Ci0gICAgCi0gICAgbV9qaXQubW92ZShwcm9wZXJ0eVJlZywg
cmVzdWx0UmVnKTsKLSAgICBtX2ppdC5zaWduRXh0ZW5kMzJUb1B0cihyZXN1bHRSZWcsIHJlc3Vs
dFJlZyk7Ci0gICAgbV9qaXQubG9hZFB0cigKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3MoYmFzZVJlZywgQXJndW1lbnRzOjpvZmZzZXRPZlJlZ2lzdGVycygpKSwKLSAgICAgICAgc2Ny
YXRjaFJlZyk7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBE
aXJlY3RBcmd1bWVudHM6Om9mZnNldE9mT3ZlcnJpZGVzKCkpKSk7CisgICAgc3BlY3VsYXRpb25D
aGVjaygKKyAgICAgICAgRXhvdGljT2JqZWN0TW9kZSwgSlNWYWx1ZVNvdXJjZSgpLCAwLAorICAg
ICAgICBtX2ppdC5icmFuY2gzMigKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9y
RXF1YWwsIHByb3BlcnR5UmVnLAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
YmFzZVJlZywgRGlyZWN0QXJndW1lbnRzOjpvZmZzZXRPZkxlbmd0aCgpKSkpOwogICAgIAotI2lm
IFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgbV9qaXQubG9hZDMyKAotICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6QmFzZUluZGV4KAotICAgICAgICAgICAgc2NyYXRjaFJlZywgcmVzdWx0UmVnLCBNYWNy
b0Fzc2VtYmxlcjo6VGltZXNFaWdodCwKLSAgICAgICAgICAgIENhbGxGcmFtZTo6dGhpc0FyZ3Vt
ZW50T2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpICsgc2l6ZW9mKFJlZ2lzdGVyKSArCi0gICAg
ICAgICAgICBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSksCi0gICAgICAg
IHJlc3VsdFRhZ1JlZyk7Ci0gICAgbV9qaXQubG9hZDMyKAotICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6QmFzZUluZGV4KAotICAgICAgICAgICAgc2NyYXRjaFJlZywgcmVzdWx0UmVnLCBNYWNyb0Fz
c2VtYmxlcjo6VGltZXNFaWdodCwKLSAgICAgICAgICAgIENhbGxGcmFtZTo6dGhpc0FyZ3VtZW50
T2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpICsgc2l6ZW9mKFJlZ2lzdGVyKSArCi0gICAgICAg
ICAgICBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpLAotICAgICAg
ICByZXN1bHRSZWcpOwotICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0VGFnUmVnLCByZXN1bHRSZWcs
IG5vZGUpOwotI2Vsc2UKLSAgICBtX2ppdC5sb2FkNjQoCisgICAgbV9qaXQubG9hZFZhbHVlKAog
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KAotICAgICAgICAgICAgc2NyYXRjaFJl
ZywgcmVzdWx0UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwKLSAgICAgICAgICAgIENh
bGxGcmFtZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpICsgc2l6ZW9m
KFJlZ2lzdGVyKSksCi0gICAgICAgIHJlc3VsdFJlZyk7Ci0gICAganNWYWx1ZVJlc3VsdChyZXN1
bHRSZWcsIG5vZGUpOwotI2VuZGlmCisgICAgICAgICAgICBiYXNlUmVnLCBwcm9wZXJ0eVJlZywg
VGltZXNFaWdodCwgRGlyZWN0QXJndW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCkpLAorICAgICAgICBy
ZXN1bHRSZWdzKTsKKyAgICAKKyAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG5vZGUpOwog
fQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QXJndW1lbnRzTGVuZ3RoKE5vZGUq
IG5vZGUpCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPblNjb3BlZEFyZ3Vt
ZW50cyhOb2RlKiBub2RlKQogewogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywg
bm9kZS0+Y2hpbGQxKCkpOwotICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgUmV1c2UsIGJh
c2UpOworICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBub2Rl
LT5jaGlsZDIoKSk7CisgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKKyNpZiBVU0UoSlNW
QUxVRTMyXzY0KQorICAgIEdQUlRlbXBvcmFyeSByZXN1bHRUYWcodGhpcyk7CisjZW5kaWYKKyAg
ICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKKyAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaDIo
dGhpcyk7CiAgICAgCiAgICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdwcigpOworICAgIEdQUlJl
ZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOwogICAgIEdQUlJlZyByZXN1bHRSZWcgPSBy
ZXN1bHQuZ3ByKCk7CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICBHUFJSZWcgcmVzdWx0VGFn
UmVnID0gcmVzdWx0VGFnLmdwcigpOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1Zh
bHVlUmVncyhyZXN1bHRUYWdSZWcsIHJlc3VsdFJlZyk7CisjZWxzZQorICAgIEpTVmFsdWVSZWdz
IHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZXN1bHRSZWcpOworI2VuZGlmCisgICAgR1BSUmVn
IHNjcmF0Y2hSZWcgPSBzY3JhdGNoLmdwcigpOworICAgIEdQUlJlZyBzY3JhdGNoMlJlZyA9IHNj
cmF0Y2gyLmdwcigpOwogICAgIAogICAgIGlmICghbV9jb21waWxlT2theSkKICAgICAgICAgcmV0
dXJuOwogICAgIAotICAgIEFTU0VSVChBcnJheU1vZGUoQXJyYXk6OkFyZ3VtZW50cykuYWxyZWFk
eUNoZWNrZWQobV9qaXQuZ3JhcGgoKSwgbm9kZSwgbV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxk
MSgpKSkpOworICAgIEFTU0VSVChBcnJheU1vZGUoQXJyYXk6OlNjb3BlZEFyZ3VtZW50cykuYWxy
ZWFkeUNoZWNrZWQobV9qaXQuZ3JhcGgoKSwgbm9kZSwgbV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNo
aWxkMSgpKSkpOworICAgIAorICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3MoYmFzZVJlZywgU2NvcGVkQXJndW1lbnRzOjpvZmZzZXRPZlRhYmxlKCkpLCBzY3JhdGNoUmVn
KTsKKyAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIFNj
b3BlZEFyZ3VtZW50czo6b2Zmc2V0T2ZTY29wZSgpKSwgc2NyYXRjaDJSZWcpOwogICAgIAogICAg
IHNwZWN1bGF0aW9uQ2hlY2soCiAgICAgICAgIEV4b3RpY09iamVjdE1vZGUsIEpTVmFsdWVTb3Vy
Y2UoKSwgMCwKLSAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDgoCi0gICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6Tm9uWmVybywKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJh
c2VSZWcsIEFyZ3VtZW50czo6b2Zmc2V0T2ZPdmVycm9kZUxlbmd0aCgpKSkpOworICAgICAgICBt
X2ppdC5icmFuY2gzMigKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWws
IHByb3BlcnR5UmVnLAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoU2NvcGVk
QXJndW1lbnRzVGFibGU6Om9mZnNldE9mTGVuZ3RoKCkpKSk7CisgICAgCisgICAgbV9qaXQubG9h
ZFB0cigKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaFJlZywgU2NvcGVk
QXJndW1lbnRzVGFibGU6Om9mZnNldE9mQXJndW1lbnRzKCkpLAorICAgICAgICBzY3JhdGNoUmVn
KTsKKyAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzY3JhdGNoUmVn
LCBwcm9wZXJ0eVJlZywgVGltZXNGb3VyKSwgc2NyYXRjaFJlZyk7CisgICAgCisgICAgc3BlY3Vs
YXRpb25DaGVjaygKKyAgICAgICAgRXhvdGljT2JqZWN0TW9kZSwgSlNWYWx1ZVNvdXJjZSgpLCAw
LAorICAgICAgICBtX2ppdC5icmFuY2gzMigKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpF
cXVhbCwgc2NyYXRjaFJlZywgVHJ1c3RlZEltbTMyKFNjb3BlT2Zmc2V0OjppbnZhbGlkT2Zmc2V0
KSkpOworICAgIAorICAgIG1faml0LmxvYWRWYWx1ZSgKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OkJhc2VJbmRleCgKKyAgICAgICAgICAgIGJhc2UyUmVnLCBwcm9wZXJ0eVJlZywgVGltZXNFaWdo
dCwgSlNFbnZpcm9ubWVudFJlY29yZDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSksCisgICAgICAgIHJl
c3VsdFJlZ3MpOwogICAgIAotICAgIG1faml0LmxvYWQzMigKLSAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MoYmFzZVJlZywgQXJndW1lbnRzOjpvZmZzZXRPZk51bUFyZ3VtZW50cygpKSwK
LSAgICAgICAgcmVzdWx0UmVnKTsKLSAgICBpbnQzMlJlc3VsdChyZXN1bHRSZWcsIG5vZGUpOwor
ICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVncywgbm9kZSk7CiB9CiAKIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVHZXRTY29wZShOb2RlKiBub2RlKQpAQCAtNDIzMiw4ICs0MjQ0LDU2IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRBcnJheUxlbmcKICAgICAgICAgaW50MzJS
ZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIGNhc2Ug
QXJyYXk6OkFyZ3VtZW50czogewotICAgICAgICBjb21waWxlR2V0QXJndW1lbnRzTGVuZ3RoKG5v
ZGUpOworICAgIGNhc2UgQXJyYXk6OkRpcmVjdEFyZ3VtZW50czogeworICAgICAgICBTcGVjdWxh
dGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgR1BSVGVt
cG9yYXJ5IHJlc3VsdCh0aGlzLCBSZXVzZSwgYmFzZSk7CisgICAgICAgIAorICAgICAgICBHUFJS
ZWcgYmFzZVJlZyA9IGJhc2UuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRSZWcgPSByZXN1
bHQuZ3ByKCk7CisgICAgICAgIAorICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBBU1NFUlQoQXJyYXlNb2RlKEFycmF5OjpE
aXJlY3RBcmd1bWVudHMpLmFscmVhZHlDaGVja2VkKG1faml0LmdyYXBoKCksIG5vZGUsIG1fc3Rh
dGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSkpKTsKKyAgICAgICAgCisgICAgICAgIHNwZWN1bGF0
aW9uQ2hlY2soCisgICAgICAgICAgICBFeG90aWNPYmplY3RNb2RlLCBKU1ZhbHVlU291cmNlKCks
IDAsCisgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0UHRyKAorICAgICAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpOb25aZXJvLAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKGJhc2VSZWcsIERpcmVjdEFyZ3VtZW50czo6b2Zmc2V0T2ZPdmVycmlkZXMoKSkpKTsK
KyAgICAgICAgCisgICAgICAgIG1faml0LmxvYWQzMigKKyAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKGJhc2VSZWcsIERpcmVjdEFyZ3VtZW50czo6b2Zmc2V0T2ZMZW5ndGgoKSks
IHJlc3VsdFJlZyk7CisgICAgICAgIAorICAgICAgICBpbnQzMlJlc3VsdChyZXN1bHRSZWcsIG5v
ZGUpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBBcnJheTo6U2NvcGVkQXJndW1l
bnRzOiB7CisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hp
bGQxKCkpOworICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIFJldXNlLCBiYXNlKTsK
KyAgICAgICAgCisgICAgICAgIEdQUlJlZyBiYXNlUmVnID0gYmFzZS5ncHIoKTsKKyAgICAgICAg
R1BSUmVnIHJlc3VsdFJlZyA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgCisgICAgICAgIGlmICgh
bV9jb21waWxlT2theSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIEFT
U0VSVChBcnJheU1vZGUoQXJyYXk6OlNjb3BlZEFyZ3VtZW50cykuYWxyZWFkeUNoZWNrZWQobV9q
aXQuZ3JhcGgoKSwgbm9kZSwgbV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgpKSkpOworICAg
ICAgICAKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKKyAgICAgICAgICAgIEV4b3RpY09iamVj
dE1vZGUsIEpTVmFsdWVTb3VyY2UoKSwgMCwKKyAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3Q4
KAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLAorICAgICAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIFNjb3BlZEFyZ3VtZW50czo6b2Zm
c2V0T2ZPdmVycm9kZVRoaW5ncygpKSkpOworICAgICAgICAKKyAgICAgICAgbV9qaXQubG9hZFB0
cigKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIFNjb3BlZEFy
Z3VtZW50czo6b2Zmc2V0T2ZUYWJsZSgpKSwgcmVzdWx0UmVnKTsKKyAgICAgICAgCisgICAgICAg
IG1faml0LmxvYWQzMigKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJlc3Vs
dFJlZywgU2NvcGVkQXJndW1lbnRzVGFibGU6Om9mZnNldE9mTGVuZ3RoKCkpLAorICAgICAgICAg
ICAgcmVzdWx0UmVnKTsKKyAgICAgICAgCisgICAgICAgIGludDMyUmVzdWx0KHJlc3VsdFJlZywg
bm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBkZWZhdWx0OiB7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCShyZXZpc2lvbiAx
ODA3MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJ
KHdvcmtpbmcgY29weSkKQEAgLTIxNTIsOCArMjE1Miw5IEBAIHB1YmxpYzoKICAgICB2b2lkIGNv
bXBpbGVHZXRCeVZhbE9uU3RyaW5nKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVGcm9tQ2hhckNv
ZGUoTm9kZSopOyAKIAotICAgIHZvaWQgY29tcGlsZUdldEJ5VmFsT25Bcmd1bWVudHMoTm9kZSop
OwotICAgIHZvaWQgY29tcGlsZUdldEFyZ3VtZW50c0xlbmd0aChOb2RlKik7CisgICAgdm9pZCBj
b21waWxlR2V0QnlWYWxPbkRpcmVjdEFyZ3VtZW50cyhOb2RlKik7CisgICAgdm9pZCBjb21waWxl
R2V0QnlWYWxPblNjb3BlZEFyZ3VtZW50cyhOb2RlKik7CisgICAgCiAgICAgdm9pZCBjb21waWxl
R2V0U2NvcGUoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZVNraXBTY29wZShOb2RlKik7CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFw
UmVwb3NpdG9yeS5oCShyZXZpc2lvbiAxODA3MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00Niw2
ICs0Niw4IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKICAgICBtYWNybyhCdXR0
ZXJmbHlfcHVibGljTGVuZ3RoLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpIFwK
ICAgICBtYWNybyhCdXR0ZXJmbHlfdmVjdG9yTGVuZ3RoLCBCdXR0ZXJmbHk6Om9mZnNldE9mVmVj
dG9yTGVuZ3RoKCkpIFwKICAgICBtYWNybyhDYWxsRnJhbWVfY2FsbGVyRnJhbWUsIENhbGxGcmFt
ZTo6Y2FsbGVyRnJhbWVPZmZzZXQoKSkgXAorICAgIG1hY3JvKERpcmVjdEFyZ3VtZW50c19sZW5n
dGgsIERpcmVjdEFyZ3VtZW50czo6b2Zmc2V0T2ZMZW5ndGgoKSkgXAorICAgIG1hY3JvKERpcmVj
dEFyZ3VtZW50c19vdmVycmlkZXMsIERpcmVjdEFyZ3VtZW50czo6b2Zmc2V0T2ZPdmVycmlkZXMo
KSkgXAogICAgIG1hY3JvKEdldHRlclNldHRlcl9nZXR0ZXIsIEdldHRlclNldHRlcjo6b2Zmc2V0
T2ZHZXR0ZXIoKSkgXAogICAgIG1hY3JvKEdldHRlclNldHRlcl9zZXR0ZXIsIEdldHRlclNldHRl
cjo6b2Zmc2V0T2ZTZXR0ZXIoKSkgXAogICAgIG1hY3JvKEpTQXJyYXlCdWZmZXJWaWV3X2xlbmd0
aCwgSlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNldE9mTGVuZ3RoKCkpIFwKQEAgLTcyLDYgKzc0LDEx
IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKICAgICBtYWNybyhKU1dyYXBwZXJP
YmplY3RfaW50ZXJuYWxWYWx1ZSwgSlNXcmFwcGVyT2JqZWN0OjppbnRlcm5hbFZhbHVlT2Zmc2V0
KCkpIFwKICAgICBtYWNybyhNYXJrZWRBbGxvY2F0b3JfZnJlZUxpc3RIZWFkLCBNYXJrZWRBbGxv
Y2F0b3I6Om9mZnNldE9mRnJlZUxpc3RIZWFkKCkpIFwKICAgICBtYWNybyhNYXJrZWRCbG9ja19t
YXJrQml0cywgTWFya2VkQmxvY2s6Om9mZnNldE9mTWFya3MoKSkgXAorICAgIG1hY3JvKFNjb3Bl
ZEFyZ3VtZW50c19vdmVycm9kZVRoaW5ncywgU2NvcGVkQXJndW1lbnRzOjpvZmZzZXRPZk92ZXJy
b2RlVGhpbmdzKCkpKSBcCisgICAgbWFjcm8oU2NvcGVkQXJndW1lbnRzX3Njb3BlLCBTY29wZWRB
cmd1bWVudHM6Om9mZmV0T2ZTY29wZSgpKSkgXAorICAgIG1hY3JvKFNjb3BlZEFyZ3VtZW50c190
YWJsZSwgU2NvcGVkQXJndW1lbnRzOjpvZmZldE9mVGFibGUoKSkpIFwKKyAgICBtYWNybyhTY29w
ZWRBcmd1bWVudHNUYWJsZV9hcmd1bWVudHMsIFNjb3BlZEFyZ3VtZW50c1RhYmxlOjpvZmZldE9m
QXJndW1lbnRzKCkpKSBcCisgICAgbWFjcm8oU2NvcGVkQXJndW1lbnRzVGFibGVfbGVuZ3RoLCBT
Y29wZWRBcmd1bWVudHNUYWJsZTo6b2ZmZXRPZkxlbmd0aCgpKSkgXAogICAgIG1hY3JvKFN0cmlu
Z0ltcGxfZGF0YSwgU3RyaW5nSW1wbDo6ZGF0YU9mZnNldCgpKSBcCiAgICAgbWFjcm8oU3RyaW5n
SW1wbF9oYXNoQW5kRmxhZ3MsIFN0cmluZ0ltcGw6OmZsYWdzT2Zmc2V0KCkpIFwKICAgICBtYWNy
byhTdHJ1Y3R1cmVfY2xhc3NJbmZvLCBTdHJ1Y3R1cmU6OmNsYXNzSW5mb09mZnNldCgpKSBcCkBA
IC04MCw2ICs4Nyw4IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKICAgICBtYWNy
byhTdHJ1Y3R1cmVfc3RydWN0dXJlSUQsIFN0cnVjdHVyZTo6c3RydWN0dXJlSURPZmZzZXQoKSkK
IAogI2RlZmluZSBGT1JfRUFDSF9JTkRFWEVEX0FCU1RSQUNUX0hFQVAobWFjcm8pIFwKKyAgICBt
YWNybyhEaXJlY3RBcmd1bWVudHNfc3RvcmFnZSwgRGlyZWN0QXJndW1lbnRzOjpzdG9yYWdlT2Zm
c2V0KCksIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpIFwKKyAgICBtYWNybyhKU0Vudmlyb25tZW50
UmVjb3JkX3ZhcmlhYmxlLCBKU0Vudmlyb25tZW50UmVjb3JkOjpvZmZzZXRPZlZhcmlhYmxlcygp
LCBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSBcCiAgICAgbWFjcm8oSlNSb3BlU3RyaW5nX2ZpYmVy
cywgSlNSb3BlU3RyaW5nOjpvZmZzZXRPZkZpYmVycygpLCBzaXplb2YoV3JpdGVCYXJyaWVyPEpT
U3RyaW5nPikpIFwKICAgICBtYWNybyhjaGFyYWN0ZXJzOCwgMCwgc2l6ZW9mKExDaGFyKSkgXAog
ICAgIG1hY3JvKGNoYXJhY3RlcnMxNiwgMCwgc2l6ZW9mKFVDaGFyKSkgXApAQCAtODcsNiArOTYs
NyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAgICAgbWFjcm8oaW5kZXhlZERv
dWJsZVByb3BlcnRpZXMsIDAsIHNpemVvZihkb3VibGUpKSBcCiAgICAgbWFjcm8oaW5kZXhlZENv
bnRpZ3VvdXNQcm9wZXJ0aWVzLCAwLCBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSBcCiAgICAgbWFj
cm8oaW5kZXhlZEFycmF5U3RvcmFnZVByb3BlcnRpZXMsIDAsIHNpemVvZihFbmNvZGVkSlNWYWx1
ZSkpIFwKKyAgICBtYWNybyhzY29wZWRBcmd1ZW1udHNUYWJsZUFyZ3VtZW50cywgMCwgc2l6ZW9m
KGludDMyX3QpKSBcCiAgICAgbWFjcm8oc2luZ2xlQ2hhcmFjdGVyU3RyaW5ncywgMCwgc2l6ZW9m
KEpTU3RyaW5nKikpIFwKICAgICBtYWNybyh2YXJpYWJsZXMsIDAsIHNpemVvZihSZWdpc3Rlcikp
CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRp
ZXMuY3BwCShyZXZpc2lvbiAxODA3MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TENhcGFiaWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwOSw2ICsyMDksOCBAQCBpbmxp
bmUgQ2FwYWJpbGl0eUxldmVsIGNhbkNvbXBpbGUoTm9kZSogCiAgICAgICAgIGNhc2UgQXJyYXk6
OkludDMyOgogICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6CiAgICAgICAgIGNhc2UgQXJyYXk6
OkNvbnRpZ3VvdXM6CisgICAgICAgIGNhc2UgQXJyYXk6OkRpcmVjdEFyZ3VtZW50czoKKyAgICAg
ICAgY2FzZSBBcnJheTo6U2NvcGVkQXJndW1lbnRzOgogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBpZiAoaXNUeXBlZFZpZXcobm9kZS0+YXJyYXlNb2Rl
KCkudHlwZWRBcnJheVR5cGUoKSkpCkBAIC0yMjIsNiArMjI0LDggQEAgaW5saW5lIENhcGFiaWxp
dHlMZXZlbCBjYW5Db21waWxlKE5vZGUqIAogICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6CiAg
ICAgICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6CiAgICAgICAgIGNhc2UgQXJyYXk6OlN0cmlu
ZzoKKyAgICAgICAgY2FzZSBBcnJheTo6RGlyZWN0QXJndW1lbnRzOgorICAgICAgICBjYXNlIEFy
cmF5OjpTY29wZWRBcmd1bWVudHM6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVs
dDoKICAgICAgICAgICAgIGlmIChpc1R5cGVkVmlldyhub2RlLT5hcnJheU1vZGUoKS50eXBlZEFy
cmF5VHlwZSgpKSkKQEAgLTI0OCw2ICsyNTIsOCBAQCBpbmxpbmUgQ2FwYWJpbGl0eUxldmVsIGNh
bkNvbXBpbGUoTm9kZSogCiAgICAgICAgIGNhc2UgQXJyYXk6OkludDMyOgogICAgICAgICBjYXNl
IEFycmF5OjpEb3VibGU6CiAgICAgICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6CisgICAgICAg
IGNhc2UgQXJyYXk6OkRpcmVjdEFyZ3VtZW50czoKKyAgICAgICAgY2FzZSBBcnJheTo6U2NvcGVk
QXJndW1lbnRzOgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAg
ICAgICBpZiAoaXNUeXBlZFZpZXcobm9kZS0+YXJyYXlNb2RlKCkudHlwZWRBcnJheVR5cGUoKSkp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZN
LmNwcAkocmV2aXNpb24gMTgwNzIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExM
b3dlckRGR1RvTExWTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxOTUsNiArMjE5NSwyNSBAQCBw
cml2YXRlOgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgICAgICAKKyAg
ICAgICAgY2FzZSBBcnJheTo6RGlyZWN0QXJndW1lbnRzOiB7CisgICAgICAgICAgICBMVmFsdWUg
YXJndW1lbnRzID0gbG93Q2VsbChtX291dC0+Y2hpbGQxKCkpOworICAgICAgICAgICAgc3BlY3Vs
YXRlKAorICAgICAgICAgICAgICAgIEV4b3RpY09iamVjdE1vZGUsIG5vVmFsdWUoKSwgbnVsbHB0
ciwKKyAgICAgICAgICAgICAgICBtX291dC5ub3ROdWxsKG1fb3V0LmxvYWRQdHIoYXJndW1lbnRz
LCBtX2hlYXBzLkRpcmVjdEFyZ3VtZW50c19vdmVycmlkZXMpKSk7CisgICAgICAgICAgICBzZXRJ
bnQzMihtX291dC5sb2FkMzJOb25OZWdhdGl2ZShhcmd1bWVudHMsIG1faGVhcHMuRGlyZWN0QXJn
dW1lbnRzX2xlbmd0aCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAg
ICAgICAKKyAgICAgICAgY2FzZSBBcnJheTo6U2NvcGVkQXJndW1lbnRzOiB7CisgICAgICAgICAg
ICBMVmFsdWUgYXJndW1lbnRzID0gbG93Q2VsbChtX291dC0+Y2hpbGQxKCkpOworICAgICAgICAg
ICAgc3BlY3VsYXRlKAorICAgICAgICAgICAgICAgIEV4b3RpY09iamVjdE1vZGUsIG5vVmFsdWUo
KSwgbnVsbHB0ciwKKyAgICAgICAgICAgICAgICBtX291dC5ub3RaZXJvOChtX291dC5sb2FkUHRy
KGFyZ3VtZW50cywgbV9oZWFwcy5TY29wZWRBcmd1bWVudHNfb3ZlcnJvZGVUaGluZ3MpKSk7Cisg
ICAgICAgICAgICBMVmFsdWUgdGFibGUgPSBtX291dC5sb2FkUHRyKGFyZ3VtZW50cywgbV9oZWFw
cy5TY29wZWRBcmd1bWVudHNfdGFibGUpOworICAgICAgICAgICAgc2V0SW50MzIobV9vdXQubG9h
ZDMyTm9uTmVnYXRpdmUodGFibGUsIG1faGVhcHMuU2NvcGVkQXJndW1lbnRzVGFibGVfbGVuZ3Ro
KSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgICAgIAogICAgICAg
ICBkZWZhdWx0OgogICAgICAgICAgICAgaWYgKGlzVHlwZWRWaWV3KG1fbm9kZS0+YXJyYXlNb2Rl
KCkudHlwZWRBcnJheVR5cGUoKSkpIHsKICAgICAgICAgICAgICAgICBzZXRJbnQzMigKQEAgLTIz
MTIsNiArMjMzMSw0OSBAQCBwcml2YXRlOgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
CiAgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBBcnJheTo6RGlyZWN0QXJndW1lbnRzOiB7Cisg
ICAgICAgICAgICBMVmFsdWUgYmFzZSA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7CisgICAg
ICAgICAgICBMVmFsdWUgaW5kZXggPSBsb3dJbnQzMihtX25vZGUtPmNoaWxkMigpKTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgc3BlY3VsYXRlKAorICAgICAgICAgICAgICAgIEV4b3RpY09i
amVjdE1vZGUsIG5vVmFsdWUoKSwgbnVsbHB0ciwKKyAgICAgICAgICAgICAgICBtX291dC5ub25O
dWxsKG1fb3V0LmxvYWRQdHIoYmFzZSwgbV9oZWFwcy5EaXJlY3RBcmd1bWVudHNfb3ZlcnJpZGVz
KSkpOworICAgICAgICAgICAgc3BlY3VsYXRlKAorICAgICAgICAgICAgICAgIEV4b3RpY09iamVj
dE1vZGUsIG5vVmFsdWUoKSwgbnVsbHB0ciwKKyAgICAgICAgICAgICAgICBtX291dC5hYm92ZU9y
RXF1YWwoCisgICAgICAgICAgICAgICAgICAgIGluZGV4LAorICAgICAgICAgICAgICAgICAgICBt
X291dC5sb2FkMzJOb25OZWdhdGl2ZShiYXNlLCBtX2hlYXBzLkRpcmVjdEFyZ3VtZW50c19sZW5n
dGgpKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHNldEpTVmFsdWUobV9vdXQubG9hZDY0
KGJhc2VJbmRleChtX2hlYXBzLkRpcmVjdEFyZ3VtZW50c19zdG9yYWdlLCBiYXNlLCBpbmRleCkp
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAg
IGNhc2UgQXJyYXk6OlNjb3BlZEFyZ3VtZW50czogeworICAgICAgICAgICAgTFZhbHVlIGJhc2Ug
PSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgTFZhbHVlIGluZGV4ID0g
bG93SW50MzIobV9ub2RlLT5jaGlsZDIoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIExW
YWx1ZSB0YWJsZSA9IG1fb3V0LmxvYWRQdHIoYmFzZSwgbV9oZWFwcy5TY29wZWRBcmd1bWVudHNf
dGFibGUpOworICAgICAgICAgICAgTFZhbHVlIHNjb3BlID0gbV9vdXQubG9hZFB0cihiYXNlLCBt
X2hlYXBzLlNjb3BlZEFyZ3VtZW50c19zY29wZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IHNwZWN1bGF0ZSgKKyAgICAgICAgICAgICAgICBFeG90aWNPYmplY3RNb2RlLCBub1ZhbHVlKCks
IG51bGxwdHIsCisgICAgICAgICAgICAgICAgbV9vdXQuYWJvdmVPckVxdWFsKAorICAgICAgICAg
ICAgICAgICAgICBpbmRleCwKKyAgICAgICAgICAgICAgICAgICAgbV9vdXQubG9hZDMyTm9uTmVn
YXRpdmUoYmFzZSwgbV9oZWFwcy5TY29wZWRBcmd1bWVudHNUYWJsZV9sZW5ndGgpKSk7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIExWYWx1ZSBhcmd1bWVudHMgPSBtX291dC5sb2FkUHRyKGJh
c2UsIG1faGVhcHMuU2NvcGVkQXJndW1lbnRzVGFibGVfYXJndW1lbnRzKTsKKyAgICAgICAgICAg
IExWYWx1ZSBzY29wZU9mZnNldCA9IG1fb3V0LmxvYWQzMigKKyAgICAgICAgICAgICAgICBiYXNl
SW5kZXgobV9oZWFwcy5zY29wZWRBcmd1bWVudHNUYWJsZUFyZ3VtZW50cywgYXJndW1lbnRzLCBp
bmRleCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBzcGVjdWxhdGUoCisgICAgICAgICAg
ICAgICAgRXhvdGljT2JqZWN0TW9kZSwgbm9WYWx1ZSgpLCBudWxscHRyLAorICAgICAgICAgICAg
ICAgIG1fb3V0LmVxdWFsKHNjb3BlT2Zmc2V0LCBtX291dC5jb25zdEludDMyKFNjb3BlT2Zmc2V0
OjppbnZhbGlkT2Zmc2V0KSkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBzZXRKU1ZhbHVl
KG1fb3V0LmxvYWQ2NChiYXNlSW5kZXgoCisgICAgICAgICAgICAgICAgbV9oZWFwcy5KU0Vudmly
b25tZW50UmVjb3JkX3ZhcmlhYmxlcywgYmFzZSwgc2NvcGVPZmZzZXQpKSk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFycmF5OjpH
ZW5lcmljOiB7CiAgICAgICAgICAgICBzZXRKU1ZhbHVlKHZtQ2FsbCgKICAgICAgICAgICAgICAg
ICBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uR2V0QnlWYWwpLCBtX2NhbGxGcmFtZSwKQEAgLTUw
NzAsMTEgKzUxMzIsMTEgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIGNhbGw7CiAgICAgfQog
ICAgIAotICAgIFR5cGVkUG9pbnRlciBiYXNlSW5kZXgoSW5kZXhlZEFic3RyYWN0SGVhcCYgaGVh
cCwgTFZhbHVlIHN0b3JhZ2UsIExWYWx1ZSBpbmRleCwgRWRnZSBlZGdlKQorICAgIFR5cGVkUG9p
bnRlciBiYXNlSW5kZXgoSW5kZXhlZEFic3RyYWN0SGVhcCYgaGVhcCwgTFZhbHVlIHN0b3JhZ2Us
IExWYWx1ZSBpbmRleCwgRWRnZSBlZGdlLCBwdHJkaWZmX3Qgb2Zmc2V0ID0gMCkKICAgICB7CiAg
ICAgICAgIHJldHVybiBtX291dC5iYXNlSW5kZXgoCiAgICAgICAgICAgICBoZWFwLCBzdG9yYWdl
LCBtX291dC56ZXJvRXh0KGluZGV4LCBtX291dC5pbnRQdHIpLAotICAgICAgICAgICAgbV9zdGF0
ZS5mb3JOb2RlKGVkZ2UpLm1fdmFsdWUpOworICAgICAgICAgICAgbV9zdGF0ZS5mb3JOb2RlKGVk
Z2UpLm1fdmFsdWUsIG9mZnNldCk7CiAgICAgfQogICAgIAogICAgIHZvaWQgY29tcGFyZSgKQEAg
LTYzNDEsNiArNjQwMywxNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3Jh
cGgsIG1fbm9kZSwgIkNvcnJ1cHQgYXJyYXkgY2xhc3MiKTsKICAgICAgICAgfQogICAgICAgICAg
ICAgCisgICAgICAgIGNhc2UgQXJyYXk6OkRpcmVjdEFyZ3VtZW50czoKKyAgICAgICAgICAgIHJl
dHVybiBtX291dC5lcXVhbCgKKyAgICAgICAgICAgICAgICBtX291dC5sb2FkOChjZWxsLCBtX2hl
YXBzLkpTQ2VsbF90eXBlSW5mb1R5cGUpLAorICAgICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50
OChEaXJlY3RBcmd1bWVudHNUeXBlKSk7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBBcnJh
eTo6U2NvcGVkQXJndW1lbnRzOgorICAgICAgICAgICAgcmV0dXJuIG1fb3V0LmVxdWFsKAorICAg
ICAgICAgICAgICAgIG1fb3V0LmxvYWQ4KGNlbGwsIG1faGVhcHMuSlNDZWxsX3R5cGVJbmZvVHlw
ZSksCisgICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQ4KFNjb3BlZEFyZ3VtZW50c1R5cGUp
KTsKKyAgICAgICAgICAgIAogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgcmV0dXJuIG1f
b3V0LmVxdWFsKAogICAgICAgICAgICAgICAgIG1fb3V0LmxvYWQ4KGNlbGwsIG1faGVhcHMuSlND
ZWxsX3R5cGVJbmZvVHlwZSksIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29w
eVRva2VuLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29weVRv
a2VuLmgJKHJldmlzaW9uIDE4MDcyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Nv
cHlUb2tlbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMiw3ICszMiw3IEBAIGVudW0gQ29weVRva2VuIHsK
ICAgICBCdXR0ZXJmbHlDb3B5VG9rZW4sCiAgICAgVHlwZWRBcnJheVZlY3RvckNvcHlUb2tlbiwK
ICAgICBNYXBCYWNraW5nU3RvcmVDb3B5VG9rZW4sCi0gICAgQXJndW1lbnRzU2xvd0FyZ3VtZW50
RGF0YUNvcHlUb2tlbgorICAgIERpcmVjdEFyZ3VtZW50c092ZXJyaWRlc0NvcHlUb2tlbgogfTsK
IAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fz
c2VtYmx5SGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
QXNzZW1ibHlIZWxwZXJzLmgJKHJldmlzaW9uIDE4MDcyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTExMyw2ICsxMTMs
MjYgQEAgcHVibGljOgogI2VuZGlmCiAgICAgfQogICAgIAorICAgIHZvaWQgbG9hZFZhbHVlKEJh
c2VJbmRleCBhZGRyZXNzLCBKU1ZhbHVlUmVncyByZWdzKQorICAgIHsKKyNpZiBVU0UoSlNWQUxV
RTY0KQorICAgICAgICBsb2FkNjQoYWRkcmVzcywgcmVncy5ncHIoKSk7CisjZWxzZQorICAgICAg
ICBpZiAoYWRkcmVzcy5iYXNlID09IHJlZ3MucGF5bG9hZEdQUigpIHx8IGFkZHJlc3MuaW5kZXgg
PT0gcmVncy5wYXlsb2FkR1BSKCkpIHsKKyAgICAgICAgICAgIC8vIFdlIGFjdHVhbGx5IGNvdWxk
IGhhbmRsZSB0aGUgY2FzZSB3aGVyZSB0aGUgcmVnaXN0ZXJzIGFyZSBhbGlhc2VkIHRvIGJvdGgK
KyAgICAgICAgICAgIC8vIHRhZyBhbmQgcGF5bG9hZCwgYnV0IHdlIGRvbid0IGZvciBub3cuCisg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChhZGRyZXNzLmJhc2UgIT0gcmVncy50YWdHUFIoKSk7
CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChhZGRyZXNzLmluZGV4ICE9IHJlZ3MudGFnR1BS
KCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBsb2FkMzIoYWRkcmVzcy53aXRoT2Zmc2V0
KFRhZ09mZnNldCksIHJlZ3MudGFnR1BSKCkpOworICAgICAgICAgICAgbG9hZDMyKGFkZHJlc3Mu
d2l0aE9mZnNldChQYXlsb2FkT2Zmc2V0KSwgcmVncy5wYXlsb2FkR1BSKCkpOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgbG9hZDMyKGFkZHJlc3Mud2l0aE9mZnNldChQYXlsb2FkT2Zm
c2V0KSwgcmVncy5wYXlsb2FkR1BSKCkpOworICAgICAgICAgICAgbG9hZDMyKGFkZHJlc3Mud2l0
aE9mZnNldChUYWdPZmZzZXQpLCByZWcudGFnR1BSKCkpOworICAgICAgICB9CisjZW5kaWYKKyAg
ICB9CisgICAgCiAgICAgdm9pZCBtb3ZlVHJ1c3RlZFZhbHVlKEpTVmFsdWUgdmFsdWUsIEpTVmFs
dWVSZWdzIHJlZ3MpCiAgICAgewogI2lmIFVTRShKU1ZBTFVFNjQpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklULmgJKHJldmlzaW9uIDE4MDcyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTM0Niw2ICszNDYsOCBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgSnVtcExpc3QgZW1pdERvdWJsZUdldEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0
Y2hhYmxlSnVtcCYgYmFkVHlwZSk7CiAgICAgICAgIEp1bXBMaXN0IGVtaXRDb250aWd1b3VzR2V0
QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBJbmRleGluZ1R5cGUg
ZXhwZWN0ZWRTaGFwZSA9IENvbnRpZ3VvdXNTaGFwZSk7CiAgICAgICAgIEp1bXBMaXN0IGVtaXRB
cnJheVN0b3JhZ2VHZXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUp
OworICAgICAgICBKdW1wTGlzdCBlbWl0RGlyZWN0QXJndW1lbnRzR2V0QnlWYWwoSW5zdHJ1Y3Rp
b24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlKTsKKyAgICAgICAgSnVtcExpc3QgZW1pdFNjb3Bl
ZEFyZ3VtZW50c0dldEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSk7
CiAgICAgICAgIEp1bXBMaXN0IGVtaXRJbnRUeXBlZEFycmF5R2V0QnlWYWwoSW5zdHJ1Y3Rpb24q
LCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBUeXBlZEFycmF5VHlwZSk7CiAgICAgICAgIEp1bXBM
aXN0IGVtaXRGbG9hdFR5cGVkQXJyYXlHZXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1
bXAmIGJhZFR5cGUsIFR5cGVkQXJyYXlUeXBlKTsKICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDE4MDcyMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTUzMCw3ICs1MzAsNyBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlW
YWwoRXhlCiAgICAgICAgIGlmIChoYXNPcHRpbWl6YWJsZUluZGV4aW5nKG9iamVjdC0+c3RydWN0
dXJlKHZtKSkpIHsKICAgICAgICAgICAgIC8vIEF0dGVtcHQgdG8gb3B0aW1pemUuCiAgICAgICAg
ICAgICBKSVRBcnJheU1vZGUgYXJyYXlNb2RlID0gaml0QXJyYXlNb2RlRm9yU3RydWN0dXJlKG9i
amVjdC0+c3RydWN0dXJlKHZtKSk7Ci0gICAgICAgICAgICBpZiAoYXJyYXlNb2RlICE9IGJ5VmFs
SW5mby5hcnJheU1vZGUpIHsKKyAgICAgICAgICAgIGlmIChqaXRBcnJheU1vZGVQZXJtaXRzUHV0
KGFycmF5TW9kZSkgJiYgYXJyYXlNb2RlICE9IGJ5VmFsSW5mby5hcnJheU1vZGUpIHsKICAgICAg
ICAgICAgICAgICBKSVQ6OmNvbXBpbGVQdXRCeVZhbCgmdm0sIGV4ZWMtPmNvZGVCbG9jaygpLCAm
YnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyKE9VUl9SRVRVUk5fQUREUkVTUyksIGFycmF5TW9k
ZSk7CiAgICAgICAgICAgICAgICAgZGlkT3B0aW1pemUgPSB0cnVlOwogICAgICAgICAgICAgfQpA
QCAtNTc1LDcgKzU3NSw3IEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25EaXJlY3RQdXRC
eVYKICAgICAgICAgaWYgKGhhc09wdGltaXphYmxlSW5kZXhpbmcob2JqZWN0LT5zdHJ1Y3R1cmUo
dm0pKSkgewogICAgICAgICAgICAgLy8gQXR0ZW1wdCB0byBvcHRpbWl6ZS4KICAgICAgICAgICAg
IEpJVEFycmF5TW9kZSBhcnJheU1vZGUgPSBqaXRBcnJheU1vZGVGb3JTdHJ1Y3R1cmUob2JqZWN0
LT5zdHJ1Y3R1cmUodm0pKTsKLSAgICAgICAgICAgIGlmIChhcnJheU1vZGUgIT0gYnlWYWxJbmZv
LmFycmF5TW9kZSkgeworICAgICAgICAgICAgaWYgKGppdEFycmF5TW9kZVBlcm1pdHNQdXQoYXJy
YXlNb2RlKSAmJiBhcnJheU1vZGUgIT0gYnlWYWxJbmZvLmFycmF5TW9kZSkgewogICAgICAgICAg
ICAgICAgIEpJVDo6Y29tcGlsZURpcmVjdFB1dEJ5VmFsKCZ2bSwgY2FsbEZyYW1lLT5jb2RlQmxv
Y2soKSwgJmJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0cihPVVJfUkVUVVJOX0FERFJFU1MpLCBh
cnJheU1vZGUpOwogICAgICAgICAgICAgICAgIGRpZE9wdGltaXplID0gdHJ1ZTsKICAgICAgICAg
ICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3Mu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlB
Y2Nlc3MuY3BwCShyZXZpc2lvbiAxODA3MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTUxLDYgKzk1MSwxMiBA
QCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeVZhbChCeVZhbEluCiAgICAgY2FzZSBKSVRB
cnJheVN0b3JhZ2U6CiAgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRBcnJheVN0b3JhZ2VHZXRCeVZh
bChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUpOwogICAgICAgICBicmVhazsKKyAgICBjYXNl
IEpJVERpcmVjdEFyZ3VtZW50czoKKyAgICAgICAgc2xvd0Nhc2VzID0gZW1pdERpcmVjdEFyZ3Vt
ZW50c0dldEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgSklUU2NvcGVkQXJndW1lbnRzOgorICAgICAgICBzbG93Q2FzZXMgPSBlbWl0
RGlyZWN0QXJndW1lbnRzR2V0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlKTsKKyAg
ICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAgVHlwZWRBcnJheVR5cGUgdHlwZSA9
IHR5cGVkQXJyYXlUeXBlRm9ySklUQXJyYXlNb2RlKGFycmF5TW9kZSk7CiAgICAgICAgIGlmIChp
c0ludCh0eXBlKSkKQEAgLTEwNDYsNiArMTA1Miw2MyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBp
bGVQdXRCeVZhbChCeVZhbEluCiAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmtDYWxsZXJUb0Z1bmN0
aW9uKHJldHVybkFkZHJlc3MsIEZ1bmN0aW9uUHRyKGlzRGlyZWN0ID8gb3BlcmF0aW9uRGlyZWN0
UHV0QnlWYWxHZW5lcmljIDogb3BlcmF0aW9uUHV0QnlWYWxHZW5lcmljKSk7CiB9CiAKK0pJVDo6
SnVtcExpc3QgSklUOjplbWl0RGlyZWN0QXJndW1lbnRzR2V0QnlWYWwoSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSkKK3sKKyAgICBKdW1wTGlz
dCBzbG93Q2FzZXM7CisgICAgCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBSZWdpc3RlcklEIGJh
c2UgPSByZWdUMDsKKyAgICBSZWdpc3RlcklEIHByb3BlcnR5ID0gcmVnVDE7CisgICAgSlNWYWx1
ZVJlZ3MgcmVzdWx0ID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgIFJlZ2lzdGVySUQgc2NyYXRj
aCA9IHJlZ1QzOworI2Vsc2UKKyAgICBSZWdpc3RlcklEIGJhc2UgPSByZWdUMDsKKyAgICBSZWdp
c3RlcklEIHByb3BlcnR5ID0gcmVnVDI7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0ID0gSlNWYWx1
ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKKyAgICBSZWdpc3RlcklEIHNjcmF0Y2ggPSByZWdUMzsKKyNl
bmRpZgorCisgICAgbG9hZDgoQWRkcmVzcyhiYXNlLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNl
dCgpKSwgc2NyYXRjaCk7CisgICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJyYW5jaDMyKE5vdEVxdWFs
LCBzY3JhdGNoLCBUcnVzdGVkSW1tMzIoRGlyZWN0QXJndW1lbnRzVHlwZSkpOworICAgIAorICAg
IHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCBwcm9wZXJ0eSwgQWRkcmVz
cyhiYXNlLCBEaXJlY3RBcmd1bWVudHM6Om9mZnNldE9mTGVuZ3RoKCkpKSk7CisgICAgc2xvd0Nh
c2VzLmFwcGVuZChicmFuY2hUZXN0UHRyKE5vblplcm8sIEFkZHJlc3MoYmFzZSwgRGlyZWN0QXJn
dW1lbnRzOjpvZmZzZXRPZk92ZXJyaWRlcygpKSkpOworICAgIAorICAgIHplcm9FeHRlbmQzMlRv
UHRyKHByb3BlcnR5LCBzY3JhdGNoKTsKKyAgICBsb2FkVmFsdWUoQmFzZUluZGV4KGJhc2UsIHNj
cmF0Y2gsIFRpbWVzRWlnaHQsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZU9mZnNldCgpKSwgcmVz
dWx0KTsKK30KKworSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRTY29wZWRBcmd1bWVudHNHZXRCeVZh
bChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBl
KQoreworICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICAKKyNpZiBVU0UoSlNWQUxVRTY0KQor
ICAgIFJlZ2lzdGVySUQgYmFzZSA9IHJlZ1QwOworICAgIFJlZ2lzdGVySUQgcHJvcGVydHkgPSBy
ZWdUMTsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHQgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAg
UmVnaXN0ZXJJRCBzY3JhdGNoID0gcmVnVDM7CisgICAgUmVnaXN0ZXJJRCBzY3JhdGNoMiA9IHJl
Z1Q0OworI2Vsc2UKKyAgICBSZWdpc3RlcklEIGJhc2UgPSByZWdUMDsKKyAgICBSZWdpc3RlcklE
IHByb3BlcnR5ID0gcmVnVDI7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0ID0gSlNWYWx1ZVJlZ3Mo
cmVnVDEsIHJlZ1QwKTsKKyAgICBSZWdpc3RlcklEIHNjcmF0Y2ggPSByZWdUMzsKKyAgICBSZWdp
c3RlcklEIHNjYXJ0Y2gyID0gcmVnVDQ7CisjZW5kaWYKKworICAgIGxvYWQ4KEFkZHJlc3MoYmFz
ZSwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIHNjcmF0Y2gpOworICAgIGJhZFR5cGUg
PSBwYXRjaGFibGVCcmFuY2gzMihOb3RFcXVhbCwgc2NyYXRjaCwgVHJ1c3RlZEltbTMyKERpcmVj
dEFyZ3VtZW50c1R5cGUpKTsKKyAgICAKKyAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgU2NvcGVk
QXJndW1lbnRzOjpvZmZzZXRPZlRhYmxlKCkpLCBzY3JhdGNoKTsKKyAgICBsb2FkUHRyKEFkZHJl
c3MoYmFzZSwgU2NvcGVkQXJndW1lbnRzOjpvZmZzZXRPZlNjb3BlKCkpLCBzY3JhdGNoMik7Cisg
ICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihBYm92ZU9yRXF1YWwsIHByb3BlcnR5LCBBZGRy
ZXNzKHNjcmF0Y2gsIFNjb3BlZEFyZ3VtZW50c1RhYmxlOjpvZmZzZXRPZkxlbmd0aCgpKSkpOwor
ICAgIGxvYWRQdHIoQWRkcmVzcyhzY3JhdGNoLCBTY29wZWRBcmd1bWVudHNUYWJsZTo6b2Zmc2V0
T2ZBcmd1bWVudHMoKSksIHNjcmF0Y2gpOworICAgIGxvYWQzMihCYXNlSW5kZXgoc2NyYXRjaCwg
cHJvcGVydHksIFRpbWVzRm91ciksIHNjcmF0Y2gpOworICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJh
bmNoMzIoRXF1YWwsIHNjcmF0Y2gsIFRydXN0ZWRJbW0zMihTY29wZU9mZnNldDo6aW52YWxpZE9m
ZnNldCkpKTsKKyAgICAKKyAgICBsb2FkVmFsdWUoQmFzZUluZGV4KHNjcmF0Y2gyLCBzY3JhdGNo
LCBUaW1lc0VpZ2h0LCBKU0Vudmlyb25tZW50UmVjb3JkOjpvZmZzZXRPZlZhcmlhYmxlcygpKSwg
cmVzdWx0KTsKK30KKwogSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRJbnRUeXBlZEFycmF5R2V0QnlW
YWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBUeXBlZEFycmF5VHlwZSB0
eXBlKQogewogICAgIEFTU0VSVChpc0ludCh0eXBlKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Bcmd1bWVudHNNb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQXJndW1lbnRzTW9kZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJndW1lbnRzTW9kZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2lmbmRlZiBBcmd1bWVudHNNb2RlX2gKKyNkZWZpbmUgQXJndW1lbnRzTW9kZV9oCisK
K25hbWVzcGFjZSBKU0MgeworCitlbnVtIEFyZ3VtZW50c01vZGUgeworICAgIENsb25lZEFyZ3Vt
ZW50c0NyZWF0aW9uTW9kZSwKKyAgICBGYWtlQXJndW1lbnRWYWx1ZXNDcmVhdGlvbk1vZGUKK307
CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gQXJndW1lbnRzTW9kZV9oCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhcHR1cmVkQXJndW1lbnRzT2Zmc2V0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYXB0dXJl
ZEFyZ3VtZW50c09mZnNldC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9DYXB0dXJlZEFyZ3VtZW50c09mZnNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ2FwdHVyZWRBcmd1bWVudHNPZmZz
ZXQuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3ZvaWQgQ2FwdHVyZWRBcmd1bWVudHNPZmZzZXQ6
OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBpZiAoISp0aGlzKSB7CisgICAg
ICAgIG91dC5wcmludCgiY2FwdHVyZWRBcmd1bWVudEludmFsaWQiKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIG91dC5wcmludCgiY2FwdHVyZWRBcmd1bWVudCIsIG9mZnNldCgpKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0NhcHR1cmVkQXJndW1lbnRzT2Zmc2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FwdHVyZWRBcmd1bWVudHNPZmZzZXQuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhcHR1cmVkQXJndW1lbnRzT2Zm
c2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIENhcHR1cmVkQXJndW1lbnRzT2Zm
c2V0X2gKKyNkZWZpbmUgQ2FwdHVyZWRBcmd1bWVudHNPZmZzZXRfaAorCisjaW5jbHVkZSAiR2Vu
ZXJpY09mZnNldC5oIgorI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3BhY2Ug
SlNDIHsKKworLy8gVGhpcyBpcyBhbiBvZmZzZXQgaW50byB0aGUgc3BlY2lhbCBhcmd1bWVudHMg
b2JqZWN0LCB3aGljaCBjYXB0dXJlcyB0aGUgYXJndW1lbnRzIHRvIGEKKy8vIGZ1bmN0aW9uLiBJ
dCBvbmx5IGNvbWVzIGludG8gcGxheSBpdCB0aGUgYXJndW1lbnRzIGFyZW4ndCBhbHNvIGxpZnRl
ZCBpbnRvIHRoZSBhY3RpdmF0aW9uLgorLy8gSWYgdGhleSB3ZXJlIHRoZW4gYWNjZXNzZXMgdG8g
dGhlIGFyZ3VtZW50cyB3b3VsZCByZXNvbHZlIHRvIGEgU2NvcGVPZmZzZXQgYW5kIG5vdCBhCisv
LyBDYXB0dXJlZEFyZ3VtZW50c09mZnNldC4KK2NsYXNzIENhcHR1cmVkQXJndW1lbnRzT2Zmc2V0
IDogcHVibGljIEdlbmVyaWNPZmZzZXQ8Q2FwdHVyZWRBcmd1bWVudHNPZmZzZXQ+IHsKK3B1Ymxp
YzoKKyAgICBDYXB0dXJlZEFyZ3VtZW50c09mZnNldCgpIHsgfQorICAgIAorICAgIGV4cGxpY2l0
IENhcHR1cmVkQXJndW1lbnRzT2Zmc2V0KHVuc2lnbmVkIG9mZnNldCkKKyAgICAgICAgOiBHZW5l
cmljT2Zmc2V0KG9mZnNldCkKKyAgICB7CisgICAgfQorICAgIAorICAgIHZvaWQgZHVtcChQcmlu
dFN0cmVhbSYpIGNvbnN0OworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBD
YXB0dXJlZEFyZ3VtZW50c09mZnNldF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0RpcmVjdEFyZ3VtZW50cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRpcmVjdEFyZ3VtZW50
cy5oIgorCisjaW5jbHVkZSAiR2VuZXJpY0FyZ3VtZW50c0lubGluZXMuaCIKKyNpbmNsdWRlICJK
U0FyZ3VtZW50c0l0ZXJhdG9yLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorCituYW1lc3Bh
Y2UgSlNDIHsKKworU1RBVElDX0FTU0VSVF9JU19UUklWSUFMTFlfREVTVFJVQ1RJQkxFKERpcmVj
dEFyZ3VtZW50cyk7CisKK2NvbnN0IENsYXNzSW5mbyBEaXJlY3RBcmd1bWVudHM6OnNfaW5mbyA9
IHsgIkFyZ3VtZW50cyIsICZCYXNlOjpzX2luZm8sIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoRGly
ZWN0QXJndW1lbnRzKSB9OworCitEaXJlY3RBcmd1bWVudHM6OkRpcmVjdEFyZ3VtZW50cyhWTSYg
dm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCB1bnNpZ25lZCBsZW5ndGgpCisgICAgOiBHZW5lcmlj
QXJndW1lbnRzKHZtLCBzdHJ1Y3R1cmUpCisgICAgLCBtX2xlbmd0aChsZW5ndGgpCit7Cit9CisK
K0RpcmVjdEFyZ3VtZW50cyogRGlyZWN0QXJndW1lbnRzOjpjcmVhdGVVbmluaXRpYWxpemVkKFZN
JiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICBEaXJl
Y3RBcmd1bWVudHMqIHJlc3VsdCA9CisgICAgICAgIG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxs
PERpcmVjdEFyZ3VtZW50cz4odm0uaGVhcCwgYWxsb2NhdGlvblNpemUobGVuZ3RoKSkpCisgICAg
ICAgICh2bSwgc3RydWN0dXJlKTsKKyAgICByZXN1bHQtPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCitEaXJlY3RBcmd1bWVudHMqIERpcmVjdEFyZ3VtZW50czo6
Y3JlYXRlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHVuc2lnbmVkIGxlbmd0aCkKK3sK
KyAgICBEaXJlY3RBcmd1bWVudHMqIHJlc3VsdCA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWQodm0sIHN0
cnVjdHVyZSwgbGVuZ3RoKTsKKyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBsZW5ndGg7IGkt
LTspCisgICAgICAgIHJlc3VsdC0+c3RvcmFnZSgpW2ldLmNsZWFyKCk7CisgICAgCisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKworRGlyZWN0QXJndW1lbnRzKiBEaXJlY3RBcmd1bWVudHM6OmNyZWF0
ZUJ5Q29weWluZyhWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBFeGVjU3RhdGUqIGV4ZWMp
Cit7CisgICAgdW5zaWduZWQgbGVuZ3RoID0gZXhlYy0+YXJndW1lbnRDb3VudCgpOworICAgIERp
cmVjdEFyZ3VtZW50cyogcmVzdWx0ID0gY3JlYXRlVW5pbml0aWFsaXplZCh2bSwgc3RydWN0dXJl
LCBsZW5ndGgpOworICAgIAorICAgIGZvciAodW5zaWduZWQgaSA9IGxlbmd0aDsgaS0tOykKKyAg
ICAgICAgcmVzdWx0LT5zdG9yYWdlKClbaV0uc2V0KHZtLCByZXN1bHQsIGV4ZWMtPnVuY2hlY2tl
ZEFyZ3VtZW50KGkpKTsKKyAgICAKKyAgICByZXN1bHQtPmNhbGxlZSgpLnNldCh2bSwgcmVzdWx0
LCBqc0Nhc3Q8SlNGdW5jdGlvbio+KGV4ZWMtPmNhbGxlZSgpKSk7CisgICAgCisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKwordm9pZCBEaXJlY3RBcmd1bWVudHM6OnZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiB0aGlzQ2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgRGlyZWN0QXJndW1lbnRz
KiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8RGlyZWN0QXJndW1lbnRzKj4odGhpc0NlbGwpOwor
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKKyAgICBC
YXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOworICAgIAorICAgIHZpc2l0
b3IuYXBwZW5kVmFsdWVzKHRoaXNPYmplY3QtPnN0b3JhZ2UoKSwgdGhpc09iamVjdC0+bV9sZW5n
dGgpOworICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX2NhbGxlZSk7CisgICAgCisg
ICAgaWYgKHRoaXNPYmplY3QtPm1fb3ZlcnJpZGVzKSB7CisgICAgICAgIHZpc2l0b3IuY29weUxh
dGVyKAorICAgICAgICAgICAgdGhpc09iamVjdCwgRGlyZWN0QXJndW1lbnRzT3ZlcnJpZGVzQ29w
eVRva2VuLAorICAgICAgICAgICAgdGhpc09iamVjdC0+bV9vdmVycmlkZXMuZ2V0KCksIG1fbGVu
Z3RoKTsKKyAgICB9Cit9CisKK3ZvaWQgRGlyZWN0QXJndW1lbnRzOjpjb3B5QmFja2luZ1N0b3Jl
KEpTQ2VsbCogdGhpc0NlbGwsIENvcHlWaXNpdG9yJiB2aXNpdG9yLCBDb3B5VG9rZW4gdG9rZW4p
Cit7CisgICAgRGlyZWN0QXJndW1lbnRzKiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8RGlyZWN0
QXJndW1lbnRzKj4odGhpc0NlbGwpOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhp
c09iamVjdCwgaW5mbygpKTsKKyAgICAKKyAgICBSRUxFQVNFX0FTU0VSVCh0b2tlbiA9PSBEaXJl
Y3RBcmd1bWVudHNPdmVycmlkZXNDb3B5VG9rZW4pOworICAgIAorICAgIGJvb2wqIG9sZE92ZXJy
aWRlcyA9IHRoaXNPYmplY3QtPm1fb3ZlcnJpZGVzLmdldCgpOworICAgIGlmICghb2xkT3ZlcnJp
ZGVzKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgaWYgKHZpc2l0b3IuY2hlY2tJZlNob3Vs
ZENvcHkob3ZlcnJpZGVzKSkgeworICAgICAgICBib29sKiBuZXdPdmVycmlkZXMgPSBzdGF0aWNf
Y2FzdDxib29sKj4odmlzaXRvci5hbGxvY2F0ZU5ld1NwYWNlKG1fbGVuZ3RoKSk7CisgICAgICAg
IG1lbWNweShuZXdPdmVycmlkZXMsIG9sZE92ZXJyaWRlcywgbV9sZW5ndGgpOworICAgICAgICB0
aGlzT2JqZWN0LT5tX292ZXJyaWRlcy5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKG5ld092ZXJyaWRl
cyk7CisgICAgICAgIHZpc2l0b3IuZGlkQ29weShvbGRPdmVycmlkZXMsIG1fbGVuZ3RoKTsKKyAg
ICB9Cit9CisKK1N0cnVjdHVyZSogRGlyZWN0QXJndW1lbnRzOjpjcmVhdGVTdHJ1Y3R1cmUoVk0m
IHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKK3sK
KyAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBl
LCBUeXBlSW5mbyhEaXJlY3RBcmd1bWVudHNUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7
Cit9CisKK3ZvaWQgRGlyZWN0QXJndW1lbnRzOjpzbG93RG93bkFuZFdhc3RlTWVtb3J5KFZNJiB2
bSkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVCghbV9vdmVycmlkZXMpOworICAgIAorICAgIHB1dERp
cmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcihtX2xlbmd0aCksIERv
bnRFbnVtKTsKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmNhbGxlZSwgbV9j
YWxsZWUuZ2V0KCksIERvbnRFbnVtKTsKKyAgICAKKyAgICB2b2lkKiBiYWNraW5nU3RvcmU7Cisg
ICAgUkVMRUFTRV9BU1NFUlQodm0uaGVhcC50cnlBbGxvY2F0ZVN0b3JhZ2UodGhpcywgbV9sZW5n
dGgpLCAmYmFja2luZ1N0b3JlKTsKKyAgICBtX292ZXJyaWRlcy5zZXQodm0sIHRoaXMsIHN0YXRp
Y19jYXN0PGJvb2wqPihiYWNraW5nU3RvcmUpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2xl
bmd0aDsgaS0tOykKKyAgICAgICAgbV9vdmVycmlkZXMuZ2V0KClbaV0gPSBmYWxzZTsKK30KKwor
dm9pZCBEaXJlY3RBcmd1bWVudHM6OnNsb3dEb3duQW5kV2FzdGVNZW1vcnlJZk5lY2Vzc2FyeShW
TSYgdm0pCit7CisgICAgaWYgKCFtX292ZXJyaWRlcykKKyAgICAgICAgc2xvd0Rvd25BbmRXYXN0
ZU1lbW9yeSh2bSk7Cit9CisKK3ZvaWQgRGlyZWN0QXJndW1lbnRzOjpvdmVycmlkZUFyZ3VtZW50
KFZNJiB2bSwgdW5zaWduZWQgaSkKK3sKKyAgICBzbG93RG93bkFuZFdhc3RlTWVtb3J5SWZOZWNl
c3Nhcnkodm0pOworICAgIG1fb3ZlcnJpZGVzLmdldCgpW2luZGV4XSA9IHRydWU7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9E
aXJlY3RBcmd1bWVudHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9EaXJlY3RBcmd1bWVudHMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MTM3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgRGlyZWN0QXJndW1lbnRzX2gKKyNkZWZpbmUgRGlyZWN0QXJndW1lbnRzX2gKKworI2lu
Y2x1ZGUgIkdlbmVyaWNBcmd1bWVudHMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKKy8vIFRoaXMg
aXMgYW4gQXJndW1lbnRzLWNsYXNzIG9iamVjdCB0aGF0IHdlIGNyZWF0ZSB3aGVuIHlvdSBzYXkg
ImFyZ3VtZW50cyIgaW5zaWRlIGEgZnVuY3Rpb24sCisvLyBhbmQgbm9uZSBvZiB0aGUgYXJndW1l
bnRzIGFyZSBjYXB0dXJlZCBpbiB0aGUgZnVuY3Rpb24ncyBhY3RpdmF0aW9uLiBUaGUgZnVuY3Rp
b24gd2lsbCBjb3B5IGFsbAorLy8gb2YgaXRzIGFyZ3VtZW50cyBpbnRvIHRoaXMgb2JqZWN0LCBh
bmQgYWxsIHN1YnNlcXVlbnQgYWNjZXNzZXMgdG8gdGhlIGFyZ3VtZW50cyB3aWxsIGdvIHRocm91
Z2gKKy8vIHRoaXMgb2JqZWN0IHRoZXJlYWZ0ZXIuIFNwZWNpYWwgc3VwcG9ydCBpcyBpbiBwbGFj
ZSBmb3IgbWlzY2hldmlvdXMgZXZlbnRzIGxpa2UgdGhlIGFyZ3VtZW50cworLy8gYmVpbmcgZGVs
ZXRlZCAoc29tZXRoaW5nIGxpa2UgImRlbGV0ZSBhcmd1bWVudHNbMF0iKSBvciByZWNvbmZpZ3Vy
ZWQgKGJyb2FkbHksIHdlIHNheSBkZWxldGlvbnMKKy8vIGFuZCByZWNvbmZpZ3VyYXRpb25zIG1l
YW4gdGhhdCB0aGUgcmVzcGVjdGl2ZSBhcmd1bWVudCB3YXMgIm92ZXJyaWRkZW4iKS4KKy8vCisv
LyBUbyBzcGVlZCBhbGxvY2F0aW9uLCB0aGlzIG9iamVjdCB3aWxsIGhvbGQgYWxsIG9mIHRoZSBh
cmd1bWVudHMgaW4tcGxhY2UuIFRoZSBhcmd1bWVudHMgYXMgd2VsbAorLy8gYXMgYSB0YWJsZSBv
ZiBmbGFncyBzYXlpbmcgd2hpY2ggYXJndW1lbnRzIHdlcmUgb3ZlcnJpZGRlbi4KK2NsYXNzIERp
cmVjdEFyZ3VtZW50cyA6IHB1YmxpYyBHZW5lcmljQXJndW1lbnRzPERpcmVjdEFyZ3VtZW50cz4g
eworcHJpdmF0ZToKKyAgICBEaXJlY3RBcmd1bWVudHMoVk0mLCBTdHJ1Y3R1cmUqLCB1bnNpZ25l
ZCBsZW5ndGgpOworICAgIAorcHVibGljOgorICAgIC8vIENyZWF0ZXMgYW4gYXJndW1lbnRzIG9i
amVjdCBidXQgbGVhdmVzIGl0IHVuaW5pdGlhbGl6ZWQuCisgICAgc3RhdGljIERpcmVjdEFyZ3Vt
ZW50cyogY3JlYXRlVW5pbml0aWFsaXplZChWTSYsIFN0cnVjdHVyZSosIHVuc2lnbmVkIGxlbmd0
aCk7CisgICAgCisgICAgLy8gQ3JlYXRlcyBhbiBhcmd1bWVudHMgb2JqZWN0IGFuZCBpbml0aWFs
aXplcyBldmVyeXRoaW5nIHRvIHRoZSBlbXB0eSB2YWx1ZS4KKyAgICBzdGF0aWMgRGlyZWN0QXJn
dW1lbnRzKiBjcmVhdGUoVk0mLCBTdHJ1Y3R1cmUqLCB1bnNpZ25lZCBsZW5ndGgpOworICAgIAor
ICAgIC8vIENyZWF0ZXMgYW4gYXJndW1lbnRzIG9iamVjdCBieSBjb3B5aW5nIHRoZSBhcmd1bW5l
dHMgZnJvbSB0aGUgc3RhY2suCisgICAgc3RhdGljIERpcmVjdEFyZ3VtZW50cyogY3JlYXRlQnlD
b3B5aW5nKFZNJiwgU3RydWN0dXJlKiwgRXhlY1N0YXRlKik7CisgICAgCisgICAgc3RhdGljIHZv
aWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIHN0YXRpYyB2b2lk
IGNvcHlCYWNraW5nU3RvcmUoSlNDZWxsKiwgQ29weVZpc2l0b3ImLCBDb3B5VG9rZW4pOworICAg
IAorICAgIHVpbnQzMl90IGludGVybmFsTGVuZ3RoKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiBtX2xlbmd0aDsKKyAgICB9CisgICAgCisgICAgdWludDMyX3QgbGVuZ3RoKEV4ZWNTdGF0
ZSogZXhlYykgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChVTkxJS0VMWShtX292ZXJyaWRlcykp
CisgICAgICAgICAgICByZXR1cm4gZ2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5n
dGgpLnRvVUludDMyKGV4ZWMpOworICAgICAgICByZXR1cm4gbV9sZW5ndGg7CisgICAgfQorICAg
IAorICAgIGJvb2wgY2FuQWNjZXNzSW5kZXhRdWlja2x5KHVpbnQzMl90IGkpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gaSA8IG1fbGVuZ3RoICYmICghbV9vdmVycmlkZXMgfHwgIW1fb3Zl
cnJpZGVzLmdldCgpW2ldKTsKKyAgICB9CisgICAgCisgICAgSlNWYWx1ZSBnZXRJbmRleFF1aWNr
bHkodWludDMyX3QgaSkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZ
X0lNUExJQ0FUSU9OKGNhbkFjY2Vzc0luZGV4UXVpY2tseShpKSk7CisgICAgICAgIHJldHVybiBz
dG9yYWdlKClbaV0uZ2V0KCk7CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0SW5kZXhRdWlja2x5
KFZNJiB2bSwgdWludDMyX3QgaSwgSlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIEFTU0VS
VF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGNhbkFjY2Vzc0luZGV4UXVpY2tseShpKSk7Cisg
ICAgICAgIHN0b3JhZ2UoKVtpXS5zZXQodm0sIHRoaXMsIHZhbHVlKTsKKyAgICB9CisgICAgCisg
ICAgV3JpdGVCYXJyaWVyPEpTRnVuY3Rpb24+JiBjYWxsZWUoKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIG1fY2FsbGVlOworICAgIH0KKyAgICAKKyAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGFy
Z3VtZW50KENhcHR1cmVkQXJndW1lbnRzT2Zmc2V0IG9mZnNldCkKKyAgICB7CisgICAgICAgIEFT
U0VSVChvZmZzZXQpOworICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihv
ZmZzZXQub2Zmc2V0KCkgPCBtX2xlbmd0aCk7CisgICAgICAgIHJldHVybiBzdG9yYWdlKClbb2Zm
c2V0Lm9mZnNldCgpXTsKKyAgICB9CisgICAgCisgICAgLy8gTWV0aG9kcyBpbnRlbmRlZCBmb3Ig
dXNlIGJ5IHRoZSBHZW5lcmljQXJndW1lbnRzIG1peGluLgorICAgIGJvb2wgb3ZlcnJvZGVUaGlu
Z3MoKSBjb25zdCB7IHJldHVybiAhIW1fb3ZlcnJpZGVzOyB9CisgICAgdm9pZCBzbG93RG93bkFu
ZFdhc3RlTWVtb3J5KFZNJik7CisgICAgdm9pZCBzbG93RG93bkFuZFdhc3RlTWVtb3J5SWZOZWNl
c3NhcnkoVk0mKTsKKyAgICB2b2lkIG92ZXJyaWRlQXJndW1lbnQoVk0mLCB1bnNpZ25lZCBpbmRl
eCk7CisgICAgCisgICAgREVDTEFSRV9JTkZPOworICAgIAorICAgIHN0YXRpYyBTdHJ1Y3R1cmUq
IGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUp
OworICAgIAorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZMZW5ndGgoKSB7IHJldHVybiBP
QkpFQ1RfT0ZGU0VUT0YoRGlyZWN0QXJndW1lbnRzLCBtX2xlbmd0aCk7IH0KKyAgICBzdGF0aWMg
cHRyZGlmZl90IG9mZnNldE9mT3ZlcnJpZGVzKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKERp
cmVjdEFyZ3VtZW50cywgbV9vdmVycmlkZXMpOyB9CisgICAgCisgICAgc3RhdGljIHNpemVfdCBz
dG9yYWdlT2Zmc2V0KCkKKyAgICB7CisgICAgICAgIHJldHVybiBXVEY6OnJvdW5kVXBUb011bHRp
cGxlT2Y8c2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPik+KHNpemVvZihEaXJlY3RBcmd1bWVu
dHMpKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSh1aW50
MzJfdCBsZW5ndGgpCisgICAgeworICAgICAgICByZXR1cm4gc3RvcmFnZU9mZnNldCgpICsgc2l6
ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikgKiBsZW5ndGg7CisgICAgfQorICAgIAorcHJpdmF0
ZToKKyAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHN0b3JhZ2UoKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGJpdHdpc2VfY2FzdDxXcml0ZUJhcnJpZXI8VW5rbm93bj4qPihiaXR3aXNlX2Nhc3Q8
Y2hhcio+KHRoaXMpICsgc3RvcmFnZU9mZnNldCgpKTsKKyAgICB9CisgICAgCisgICAgV3JpdGVC
YXJyaWVyPEpTRnVuY3Rpb24qPiBtX2NhbGxlZTsKKyAgICB1aW50MzJfdCBtX2xlbmd0aDsgLy8g
QWx3YXlzIHRoZSBhY3R1YWwgbGVuZ3RoIG9mIGNhcHR1cmVkIGFyZ3VtZW50cyBhbmQgbmV2ZXIg
d2hhdCB3YXMgc3RvcmVkIGludG8gdGhlIGxlbmd0aCBwcm9wZXJ0eS4KKyAgICBDb3B5V3JpdGVC
YXJyaWVyPGJvb2w+IG1fb3ZlcnJpZGVzOyAvLyBJZiBub24tbnVsbCwgaXQgbWVhbnMgdGhhdCBs
ZW5ndGgsIGNhbGxlZSwgYW5kIGNhbGxlciBhcmUgZnVsbHkgbWF0ZXJpYWxpemVkIHByb3BlcnRp
ZXMuCit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIERpcmVjdEFyZ3VtZW50
c19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ZvcmVpZ25WYXJpYWJs
ZUluZGV4LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRm9y
ZWlnblZhcmlhYmxlSW5kZXguaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0ZvcmVpZ25WYXJpYWJsZUluZGV4LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIEZvcmVpZ25WYXJpYWJsZUluZGV4X2gKKyNkZWZpbmUgRm9yZWlnblZhcmlhYmxlSW5k
ZXhfaAorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgRm9yZWlnblZhcmlhYmxlSW5kZXggewor
cHVibGljOgorICAgIEZvcmVpZ25WYXJpYWJsZUluZGV4KCkKKyAgICAgICAgOiBtX2luZGV4KFVJ
TlRfTUFYKQorICAgIHsKKyAgICB9CisgICAgCisgICAgZXhwbGljaXQgRm9yZWlnblZhcmlhYmxl
SW5kZXgodW5zaWduZWQgaW5kZXgpCisgICAgICAgIDogbV9pbmRleChpbmRleCkKKyAgICB7Cisg
ICAgfQorICAgIAorICAgIAorICAgIAorcHJpdmF0ZToKKyAgICB1bnNpZ25lZCBtX2luZGV4Owor
fTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBGb3JlaWduVmFyaWFibGVJbmRl
eF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVu
dHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmlj
QXJndW1lbnRzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9HZW5lcmljQXJndW1lbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEdlbmVy
aWNBcmd1bWVudHNfaAorI2RlZmluZSBHZW5lcmljQXJndW1lbnRzX2gKKworI2luY2x1ZGUgIkpT
T2JqZWN0LmgiCisKK25hbWVzcGFjZSBKU0MgeworCisvLyBUaGlzIGlzIGEgbWl4aW4gZm9yIHRo
ZSB0d28ga2luZHMgb2YgQXJndW1lbnRzLWNsYXNzIG9iamVjdHMgdGhhdCBhcmlzZSB3aGVuIHlv
dSBzYXkKKy8vICJhcmd1bWVudHMiIGluc2lkZSBhIGZ1bmN0aW9uLiBUaGlzIGNsYXNzIGRvZXNu
J3Qgc2hvdyB1cCBpbiB0aGUgSlNDZWxsIGluaGVyaXRhbmNlIGhpZXJhcmNoeS4KK3RlbXBsYXRl
PHR5cGVuYW1lIFR5cGU+CitjbGFzcyBHZW5lcmljQXJndW1lbnRzIDogcHVibGljIEpTTm9uRmlu
YWxPYmplY3QgeworcHVibGljOgorICAgIHR5cGVkZWYgSlNOb25GaW5hbE9iamVjdCBCYXNlOwor
CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVzR2V0
T3duUHJvcGVydHlTbG90IHwgSW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVu
V2hlbkxlbmd0aElzTm90WmVybyB8IE92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMgfCBKU09iamVj
dDo6U3RydWN0dXJlRmxhZ3M7CisKK3Byb3RlY3RlZDoKKyAgICBHZW5lcmljQXJndW1lbnRzKFZN
JiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgICAgIDogQmFzZSh2bSwgc3RydWN0dXJl
KQorICAgIHsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNP
YmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOworICAgIHN0
YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNPYmplY3QqLCBFeGVjU3RhdGUq
LCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyB2b2lk
IGdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVB
cnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CisgICAgc3RhdGljIHZvaWQgcHV0KEpTQ2VsbCosIEV4
ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CisgICAg
c3RhdGljIHZvaWQgcHV0QnlJbmRleChKU0NlbGwqLCBFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9w
ZXJ0eU5hbWUsIEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpOworICAgIHN0YXRpYyB2b2lkIGRl
bGV0ZVByb3BlcnR5KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSk7CisgICAgc3Rh
dGljIHZvaWQgZGVsZXRlUHJvcGVydHlCeUluZGV4KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIHVuc2ln
bmVkIHByb3BlcnR5TmFtZSk7CisgICAgc3RhdGljIHZvaWQgZGVmaW5lT3duUHJvcGVydHkoSlNP
YmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5RGVzY3JpcHRv
ciYsIGJvb2wgc2hvdWxkVGhyb3cpOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRp
ZiAvLyBHZW5lcmljQXJndW1lbnRzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzSW5saW5lcy5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lubGlu
ZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIxMiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEdlbmVyaWNBcmd1bWVudHNJbmxp
bmVzX2gKKyNkZWZpbmUgR2VuZXJpY0FyZ3VtZW50c0lubGluZXNfaAorCisjaW5jbHVkZSAiR2Vu
ZXJpY0FyZ3VtZW50cy5oIgorI2luY2x1ZGUgIkpTQXJndW1lbnRzSXRlcmF0b3IuaCIKKyNpbmNs
dWRlICJKU0NJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeworCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUeXBlPgorYm9vbCBHZW5lcmljQXJndW1lbnRzPFR5cGU+OjpnZXRPd25Qcm9wZXJ0eVNsb3Qo
SlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgaWRlbnQsIFBy
b3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICBUeXBlKiB0aGlzT2JqZWN0ID0ganNDYXN0PFR5cGUq
PihvYmplY3QpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgCisgICAgaWYgKCF0aGlz
T2JqZWN0LT5vdmVycm9kZVRoaW5ncygpKSB7CisgICAgICAgIGlmIChpZGVudCA9PSB2bS5wcm9w
ZXJ0eU5hbWVzLT5sZW5ndGgpIHsKKyAgICAgICAgICAgIHNsb3Quc2V0VmFsdWUodGhpc09iamVj
dCwgRG9udEVudW0sIGpzTnVtYmVyKHRoaXNPYmplY3QtPmludGVybmFsTGVuZ3RoKCkpKTsKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmIChpZGVudCA9PSB2
bS5wcm9wZXJ0eU5hbWVzLT5jYWxsZWUpIHsKKyAgICAgICAgICAgIHNsb3Quc2V0VmFsdWUodGhp
c09iamVjdCwgRG9udEVudW0sIHRoaXNPYmplY3QtPmNhbGxlZSgpLmdldCgpKTsKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHVuc2lnbmVkIGlu
ZGV4ID0gaWRlbnQuYXNJbmRleCgpOworICAgIGlmICh0aGlzT2JqZWN0LT5jYW5BY2Nlc3NJbmRl
eFF1aWNrbHkoaW5kZXgpKSB7CisgICAgICAgIHNsb3Quc2V0VmFsdWUodGhpc09iamVjdCwgTm9u
ZSwgdGhpc09iamVjdC0+Z2V0SW5kZXhRdWlja2x5KGluZGV4KSk7CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKyAgICAKKyAgICBpZiAoQmFzZTo6Z2V0T3duUHJvcGVydHlTbG90KHRoaXNP
YmplY3QsIGV4ZWMsIGlkZW50LCBzbG90KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgCisg
ICAgaWYgKGlkZW50ID09IHZtLnByb3BlcnR5TmFtZXMtPml0ZXJhdG9yUHJpdmF0ZU5hbWUpIHsK
KyAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGV4ZWMtPmxleGljYWxHbG9i
YWxPYmplY3QoKTsKKyAgICAgICAgdGhpc09iamVjdC0+SlNDX05BVElWRV9GVU5DVElPTih2bS5w
cm9wZXJ0eU5hbWVzLT5pdGVyYXRvclByaXZhdGVOYW1lLCBhcmd1bWVudHNGdW5jSXRlcmF0b3Is
IERvbnRFbnVtLCAwKTsKKyAgICAgICAgaWYgKEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3Qo
dGhpc09iamVjdCwgZXhlYywgaWRlbnQsIHNsb3QpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorICAgIAorICAgIHJldHVybiBmYWxzZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
VHlwZT4KK2Jvb2wgR2VuZXJpY0FyZ3VtZW50czxUeXBlPjo6Z2V0T3duUHJvcGVydHlTbG90QnlJ
bmRleChKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGluZGV4LCBQ
cm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgVHlwZSogdGhpc09iamVjdCA9IGpzQ2FzdDxUeXBl
Kj4ob2JqZWN0KTsKKyAgICAKKyAgICBpZiAodGhpc09iamVjdC0+Y2FuQWNjZXNzSW5kZXhRdWlj
a2x5KGluZGV4KSkgeworICAgICAgICBzbG90LnNldFZhbHVlKHRoaXNPYmplY3QsIE5vbmUsIHRo
aXNPYmplY3QtPmdldEluZGV4UXVpY2tseShpbmRleCkpOworICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CisgICAgCisgICAgcmV0dXJuIEJhc2U6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgo
b2JqZWN0LCBleGVjLCBpbmRleCwgc2xvdCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFR5cGU+
Cit2b2lkIEdlbmVyaWNBcmd1bWVudHM8VHlwZT46OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmpl
Y3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgYXJyYXksIEVu
dW1lcmF0aW9uTW9kZSBtb2RlKQoreworICAgIFR5cGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8VHlw
ZSo+KG9iamVjdCk7CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRoaXNPYmpl
Y3QtPmludGVybmFsTGVuZ3RoKCk7ICsraSkgeworICAgICAgICBpZiAoIXRoaXNPYmplY3QtPmNh
bkFjY2Vzc0luZGV4UXVpY2tseShpbmRleCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgYXJyYXkuYWRkKElkZW50aWZpZXI6OmZyb20oZXhlYywgaSkpOworICAgIH0KKyAgICBpZiAo
c2hvdWxkSW5jbHVkZURvbnRFbnVtUHJvcGVydGllcyhtb2RlKSAmJiAhdGhpc09iamVjdC0+b3Zl
cnJvZGVUaGluZ3MoKSkgeworICAgICAgICBhcnJheS5hZGQoZXhlYy0+cHJvcGVydHlOYW1lcygp
LmNhbGxlZSk7CisgICAgICAgIGFycmF5LmFkZChleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3Ro
KTsKKyAgICB9CisgICAgQmFzZTo6Z2V0T3duUHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBleGVj
LCBhcnJheSwgbW9kZSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFR5cGU+Cit2b2lkIEdlbmVy
aWNBcmd1bWVudHM8VHlwZT46OnB1dChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJv
cGVydHlOYW1lIGlkZW50LCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCit7
CisgICAgVHlwZSogdGhpc09iamVjdCA9IGpzQ2FzdDxUeXBlKj4ob2JqZWN0KTsKKyAgICBWTSYg
dm0gPSBleGVjLT52bSgpOworICAgIAorICAgIGlmICghdGhpc09iamVjdC0+b3ZlcnJvZGVUaGlu
Z3MoKQorICAgICAgICAmJiAoaWRlbnQgPT0gdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoCisgICAg
ICAgICAgICB8fCBpZGVudCA9PSB2bS5wcm9wZXJ0eU5hbWVzLT5jYWxsZWUpKQorICAgICAgICB0
aGlzT2JqZWN0LT5zbG93RG93bkFuZFdhc3RlTWVtb3J5KHZtKTsKKyAgICAKKyAgICB1bnNpZ25l
ZCBpbmRleCA9IGlkZW50LmFzSW5kZXgoKTsKKyAgICBpZiAodGhpc09iamVjdC0+Y2FuQWNjZXNz
SW5kZXhRdWlja2x5KGluZGV4KSkgeworICAgICAgICBzZXRJbmRleFF1aWNrbHkodm0sIGluZGV4
LCB2YWx1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgQmFzZTo6cHV0KHRo
aXNPYmplY3QsIGV4ZWMsIGlkZW50LCB2YWx1ZSwgc2xvdCk7Cit9CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFR5cGU+Cit2b2lkIEdlbmVyaWNBcmd1bWVudHM8VHlwZT46OnB1dEJ5SW5kZXgoSlNDZWxs
KiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGluZGV4LCBKU1ZhbHVlIHZhbHVlLCBi
b29sIHNob3VsZFRocm93KQoreworICAgIFR5cGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8VHlwZSo+
KG9iamVjdCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICAKKyAgICBpZiAodGhpc09i
amVjdC0+Y2FuU2V0SW5kZXhRdWlja2x5KGluZGV4KSkgeworICAgICAgICBzZXRJbmRleFF1aWNr
bHkodm0sIGluZGV4LCB2YWx1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAg
cmV0dXJuIEJhc2U6OnB1dEJ5SW5kZXgoY2VsbCwgZXhlYywgaW5kZXgsIHZhbHVlLCBzaG91bGRU
aHJvdyk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFR5cGU+Cit2b2lkIEdlbmVyaWNBcmd1bWVu
dHM8VHlwZT46OmRlbGV0ZVByb3BlcnR5KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQ
cm9wZXJ0eU5hbWUgaWRlbnQpCit7CisgICAgVHlwZSogdGhpc09iamVjdCA9IGpzQ2FzdDxUeXBl
Kj4ob2JqZWN0KTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIAorICAgIGlmICghdGhp
c09iamVjdC0+b3ZlcnJvZGVUaGluZ3MoKQorICAgICAgICAmJiAoaWRlbnQgPT0gdm0ucHJvcGVy
dHlOYW1lcy0+bGVuZ3RoCisgICAgICAgICAgICB8fCBpZGVudCA9PSB2bS5wcm9wZXJ0eU5hbWVz
LT5jYWxsZWUpKQorICAgICAgICB0aGlzT2JqZWN0LT5zbG93RG93bkFuZFdhc3RlTWVtb3J5KHZt
KTsKKyAgICAKKyAgICB1bnNpZ25lZCBpbmRleCA9IGlkZW50LmFzSW5kZXgoKTsKKyAgICBpZiAo
dGhpc09iamVjdC0+Y2FuQWNjZXNzSW5kZXhRdWlja2x5KGluZGV4KSkgeworICAgICAgICB0aGlz
T2JqZWN0LT5vdmVycmlkZUFyZ3VtZW50KHZtLCBpbmRleCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgCisgICAgQmFzZTo6ZGVsZXRlUHJvcGVydHkodGhpc09iamVjdCwgZXhlYywgaWRl
bnQpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPgordm9pZCBHZW5lcmljQXJndW1lbnRz
PFR5cGU+OjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4
ZWMsIHVuc2lnbmVkIGluZGV4KQoreworICAgIFR5cGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8VHlw
ZSo+KG9iamVjdCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICAKKyAgICBpZiAodGhp
c09iamVjdC0+Y2FuQWNjZXNzSW5kZXhRdWlja2x5KGluZGV4KSkgeworICAgICAgICB0aGlzT2Jq
ZWN0LT5vdmVycmlkZUFyZ3VtZW50KHZtLCBpbmRleCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgCisgICAgcmV0dXJuIEJhc2U6OmRlbGV0ZVByb3BlcnR5QnlJbmRleChjZWxsLCBleGVj
LCBpbmRleCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFR5cGU+Cit2b2lkIEdlbmVyaWNBcmd1
bWVudHM8VHlwZT46OmRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0
ZSogZXhlYywgUHJvcGVydHlOYW1lIGlkZW50LCBjb25zdCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRl
c2NyaXB0b3IsIGJvb2wgc2hvdWxkVGhyb3cpCit7CisgICAgVHlwZSogdGhpc09iamVjdCA9IGpz
Q2FzdDxUeXBlKj4ob2JqZWN0KTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIAorICAg
IGlmIChpZGVudCA9PSB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgKKyAgICAgICAgfHwgaWRlbnQg
PT0gdm0ucHJvcGVydHlOYW1lcy0+Y2FsbGVlKQorICAgICAgICB0aGlzT2JqZWN0LT5zbG93RG93
bkFuZFdhc3RlTWVtb3J5SWZOZWNlc3Nhcnkodm0pOworICAgIGVsc2UgeworICAgICAgICB1bnNp
Z25lZCBpbmRleCA9IGlkZW50LmFzSW5kZXgoKTsKKyAgICAgICAgaWYgKHRoaXNPYmplY3QtPmNh
bkFjY2Vzc0FyZ3VtZW50UXVpY2tseShpbmRleCkpIHsKKyAgICAgICAgICAgIGlmICghZGVzY3Jp
cHRvci5pc0FjY2Vzc29yRGVzY3JpcHRvcigpKSB7CisgICAgICAgICAgICAgICAgLy8gSWYgdGhl
IHByb3BlcnR5IGlzIG5vdCBkZWxldGVkIGFuZCB3ZSBhcmUgdXNpbmcgYSBub24tYWNjZXNzb3Ig
ZGVzY3JpcHRvciwgdGhlbgorICAgICAgICAgICAgICAgIC8vIG1ha2Ugc3VyZSB0aGF0IHRoZSBh
bGlhc2VkIGFyZ3VtZW50IHNlZXMgdGhlIHZhbHVlLgorICAgICAgICAgICAgICAgIGlmIChkZXNj
cmlwdG9yLnZhbHVlKCkpCisgICAgICAgICAgICAgICAgICAgIHRoaXNPYmplY3QtPnNldEluZGV4
UXVpY2tseSh2bSwgaSwgZGVzY3JpcHRvci52YWx1ZSgpKTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgIC8vIElmIHRoZSBwcm9wZXJ0eSBpcyBub3QgZGVsZXRlZCBhbmQgd2UgYXJlIHVz
aW5nIGEgbm9uLWFjY2Vzc29yLCB3cml0YWJsZQorICAgICAgICAgICAgICAgIC8vIGRlc2NyaXB0
b3IsIHRoZW4gd2UgYXJlIGRvbmUuIFRoZSBhcmd1bWVudCBjb250aW51ZXMgdG8gYmUgYWxpYXNl
ZC4gTm90ZSB0aGF0IHdlCisgICAgICAgICAgICAgICAgLy8gaWdub3JlIHRoZSByZXF1ZXN0IHRv
IGNoYW5nZSBlbnVtZXJhYmlsaXR5LiBXZSBhcHBlYXIgdG8gaGF2ZSBhbHdheXMgZG9uZSBzbywg
aW4KKyAgICAgICAgICAgICAgICAvLyBjYXNlcyB3aGVyZSB0aGUgYXJndW1lbnQgd2FzIHN0aWxs
IGFsaWFzZWQuCisgICAgICAgICAgICAgICAgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNDE5NTIKKyAgICAgICAgICAgICAgICBpZiAoZGVzY3JpcHRv
ci53cml0YWJsZSgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgICAgICAvLyBJZiB0aGUgcHJvcGVydHkgaXMgYSBub24t
ZGVsZXRlZCBhcmd1bWVudCwgdGhlbiBtb3ZlIGl0IGludG8gdGhlIGJhc2Ugb2JqZWN0IGFuZAor
ICAgICAgICAgICAgLy8gdGhlbiBkZWxldGUgaXQuCisgICAgICAgICAgICBKU1ZhbHVlIHZhbHVl
ID0gdGhpc09iamVjdC0+Z2V0SW5kZXhRdWlja2x5KGkpOworICAgICAgICAgICAgQVNTRVJUKHZh
bHVlKTsKKyAgICAgICAgICAgIG9iamVjdC0+cHV0RGlyZWN0TWF5QmVJbmRleChleGVjLCBwcm9w
ZXJ0eU5hbWUsIHZhbHVlKTsKKyAgICAgICAgICAgIHRoaXNPYmplY3QtPm92ZXJyaWRlQXJndW1l
bnQodm0sIGkpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8vIE5vdyBqdXN0IGxldCB0
aGUgbm9ybWFsIG9iamVjdCBtYWNoaW5lcnkgZG8gaXRzIHRoaW5nLgorICAgIHJldHVybiBCYXNl
OjpkZWZpbmVPd25Qcm9wZXJ0eShvYmplY3QsIGV4ZWMsIGlkZW50LCBkZXNjcmlwdG9yLCBzaG91
bGRUaHJvdyk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gR2VuZXJpY0Fy
Z3VtZW50c0lubGluZXNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9H
ZW5lcmljT2Zmc2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvR2VuZXJpY09mZnNldC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvR2VuZXJpY09mZnNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTExIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
R2VuZXJpY09mZnNldF9oCisjZGVmaW5lIEdlbmVyaWNPZmZzZXRfaAorCisjaW5jbHVkZSA8d3Rm
L0Fzc2VydGlvbnMuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKKy8vIEEgbWl4aW4gZm9yIGNyZWF0
aW5nIHRoZSB2YXJpb3VzIGtpbmRzIG9mIHZhcmlhYmxlIG9mZnNldHMgdGhhdCBvdXIgZW5naW5l
IHN1cHBvcnRzLgordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2NsYXNzIEdlbmVyaWNPZmZzZXQgewor
cHVibGljOgorICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnZhbGlkT2Zmc2V0ID0gVUlOVF9N
QVg7CisgICAgCisgICAgR2VuZXJpY09mZnNldCgpCisgICAgICAgIDogbV9vZmZzZXQoaW52YWxp
ZE9mZnNldCkKKyAgICB7CisgICAgfQorICAgIAorICAgIGV4cGxpY2l0IEdlbmVyaWNPZmZzZXQo
dW5zaWduZWQgb2Zmc2V0KQorICAgICAgICA6IG1fb2Zmc2V0KG9mZnNldCkKKyAgICB7CisgICAg
fQorICAgIAorICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQgPT0g
aW52YWxpZE9mZnNldDsgfQorICAgIAorICAgIHVuc2lnbmVkIG9mZnNldFVuY2hlY2tlZCgpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9vZmZzZXQ7CisgICAgfQorICAgIAorICAgIHVu
c2lnbmVkIG9mZnNldCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQobV9vZmZzZXQgIT0g
aW52YWxpZE9mZnNldCk7CisgICAgICAgIHJldHVybiBtX29mZnNldDsKKyAgICB9CisgICAgCisg
ICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFQmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIG1fb2Zmc2V0ID09IG90aGVyLm9mZnNldFVuY2hlY2tlZCgpOworICAgIH0KKyAgICBi
b29sIG9wZXJhdG9yIT0oY29uc3QgVCYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gbV9vZmZzZXQgIT0gb3RoZXIub2Zmc2V0VW5jaGVja2VkKCk7CisgICAgfQorICAgIGJvb2wg
b3BlcmF0b3I8KGNvbnN0IFQmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1f
b2Zmc2V0IDwgb3RoZXIub2Zmc2V0VW5jaGVja2VkKCk7CisgICAgfQorICAgIGJvb2wgb3BlcmF0
b3I+KGNvbnN0IFQmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fb2Zmc2V0
ID4gb3RoZXIub2Zmc2V0VW5jaGVja2VkKCk7CisgICAgfQorICAgIGJvb2wgb3BlcmF0b3I8PShj
b25zdCBUJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX29mZnNldCA8PSBv
dGhlci5vZmZzZXRVbmNoZWNrZWQoKTsKKyAgICB9CisgICAgYm9vbCBvcGVyYXRvcj49KGNvbnN0
IFQmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fb2Zmc2V0ID49IG90aGVy
Lm9mZnNldFVuY2hlY2tlZCgpOworICAgIH0KKyAgICAKKyAgICBUIG9wZXJhdG9yKyhpbnQgdmFs
dWUpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gVChvZmZzZXQoKSArIHZhbHVlKTsKKyAg
ICB9CisgICAgVCBvcGVyYXRvci0oaW50IHZhbHVlKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIFQob2Zmc2V0KCkgLSB2YWx1ZSk7CisgICAgfQorICAgIFQmIG9wZXJhdG9yKz0oaW50IHZh
bHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuICp0aGlzID0gKnRoaXMgKyB2YWx1ZTsKKyAgICB9
CisgICAgVCYgb3BlcmF0b3ItPShpbnQgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gKnRo
aXMgPSAqdGhpcyAtIHZhbHVlOworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgdW5zaWduZWQg
bV9vZmZzZXQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEdlbmVyaWNP
ZmZzZXRfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FyZ3VtZW50
c0l0ZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0FyZ3VtZW50c0l0ZXJhdG9yLmNwcAkocmV2aXNpb24gMTgwNzIwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcmd1bWVudHNJdGVyYXRvci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlLCBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTUgQXBwbGUs
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMzMsMTAgKzMzLDE4IEBAIG5hbWVzcGFjZSBKU0MgewogCiBjb25zdCBDbGFzc0luZm8g
SlNBcmd1bWVudHNJdGVyYXRvcjo6c19pbmZvID0geyAiQXJndW1lbnRzSXRlcmF0b3IiLCAmQmFz
ZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTQXJndW1lbnRzSXRlcmF0b3IpIH07
CiAKLXZvaWQgSlNBcmd1bWVudHNJdGVyYXRvcjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBBcmd1
bWVudHMqIGFyZ3VtZW50cykKK3ZvaWQgSlNBcmd1bWVudHNJdGVyYXRvcjo6ZmluaXNoQ3JlYXRp
b24oVk0mIHZtLCBKU09iamVjdCogYXJndW1lbnRzKQogewogICAgIEJhc2U6OmZpbmlzaENyZWF0
aW9uKHZtKTsKICAgICBtX2FyZ3VtZW50cy5zZXQodm0sIHRoaXMsIGFyZ3VtZW50cyk7CiB9CiAK
K0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJndW1lbnRzRnVuY0l0ZXJhdG9yKEV4ZWNT
dGF0ZSogZXhlYykKK3sKKyAgICBKU09iamVjdCogdGhpc09iaiA9IGV4ZWMtPnRoaXNWYWx1ZSgp
LnRvVGhpcyhleGVjLCBTdHJpY3RNb2RlKS50b09iamVjdChleGVjKTsKKyAgICBpZiAoIXRoaXNP
YmotPmluaGVyaXRzKEFyZ3VtZW50czo6aW5mbygpKSAmJiAhdGhpc09iai0+aW5oZXJpdHMoT3V0
T2ZCYW5kQXJndW1lbnRzOjppbmZvKCkpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHRocm93VHlwZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiQXR0ZW1wdGVkIHRvIHVzZSBBcmd1
bWVudHMgaXRlcmF0b3Igb24gbm9uLUFyZ3VtZW50cyBvYmplY3QiKSkpOworICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoSlNBcmd1bWVudHNJdGVyYXRvcjo6Y3JlYXRlKGV4ZWMtPnZtKCksIGV4
ZWMtPmNhbGxlZSgpLT5nbG9iYWxPYmplY3QoKS0+YXJndW1lbnRzSXRlcmF0b3JTdHJ1Y3R1cmUo
KSwgdGhpc09iaikpOworfQorCiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0FyZ3VtZW50c0l0ZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNBcmd1bWVudHNJdGVyYXRvci5oCShyZXZpc2lvbiAxODA3MjApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FyZ3VtZW50c0l0ZXJhdG9yLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxl
LCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTUg
QXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMjYsNyArMjYsNyBAQAogI2lmbmRlZiBKU0FyZ3VtZW50c0l0ZXJhdG9yX2gK
ICNkZWZpbmUgSlNBcmd1bWVudHNJdGVyYXRvcl9oCiAKLSNpbmNsdWRlICJBcmd1bWVudHMuaCIK
KyNpbmNsdWRlICJKU09iamVjdC5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtNDEsNyArNDEs
NyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFs
T2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwg
aW5mbygpKTsKICAgICB9CiAKLSAgICBzdGF0aWMgSlNBcmd1bWVudHNJdGVyYXRvciogY3JlYXRl
KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEFyZ3VtZW50cyogYXJndW1lbnRzKQorICAg
IHN0YXRpYyBKU0FyZ3VtZW50c0l0ZXJhdG9yKiBjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgSlNPYmplY3QqIGFyZ3VtZW50cykKICAgICB7CiAgICAgICAgIEpTQXJndW1lbnRz
SXRlcmF0b3IqIGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNBcmd1bWVu
dHNJdGVyYXRvcj4odm0uaGVhcCkpIEpTQXJndW1lbnRzSXRlcmF0b3Iodm0sIHN0cnVjdHVyZSk7
CiAgICAgICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbih2bSwgYXJndW1lbnRzKTsKQEAgLTUw
LDExICs1MCwxMSBAQCBwdWJsaWM6CiAKICAgICBib29sIG5leHQoQ2FsbEZyYW1lKiBjYWxsRnJh
bWUsIEpTVmFsdWUmIHZhbHVlKQogICAgIHsKLSAgICAgICAgaWYgKG1fbmV4dEluZGV4ID49IG1f
YXJndW1lbnRzLT5sZW5ndGgoY2FsbEZyYW1lKSkKKyAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0K
KyAgICAgICAgICAgIG1fYXJndW1lbnRzLT5nZXQoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPnByb3Bl
cnR5TmFtZXMoKS5sZW5ndGgpLnRvVUludDMyKGNhbGxGcmFtZSk7CisgICAgICAgIGlmIChtX25l
eHRJbmRleCA+PSBsZW5ndGgpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHZh
bHVlID0gbV9hcmd1bWVudHMtPnRyeUdldEFyZ3VtZW50KG1fbmV4dEluZGV4KyspOwotICAgICAg
ICBpZiAoIXZhbHVlKQotICAgICAgICAgICAgdmFsdWUgPSBqc1VuZGVmaW5lZCgpOworICAgICAg
ICB2YWx1ZSA9IG1fYXJndW1lbnRzLT5nZXRJbmRleChjYWxsRnJhbWUsIG1fbmV4dEluZGV4Kysp
OwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTY4LDEyICs2OCwxNCBAQCBwcml2
YXRlOgogICAgIHsKICAgICB9CiAKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgQXJndW1l
bnRzKik7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIEpTT2JqZWN0Kik7CiAgICAgCi0g
ICAgV3JpdGVCYXJyaWVyPEFyZ3VtZW50cz4gbV9hcmd1bWVudHM7CisgICAgV3JpdGVCYXJyaWVy
PEpTT2JqZWN0PiBtX2FyZ3VtZW50czsKICAgICBzaXplX3QgbV9uZXh0SW5kZXg7CiB9OwogCitF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFyZ3VtZW50c0Z1bmNJdGVyYXRvcihFeGVjU3Rh
dGUqKTsKKwogfQogCiAjZW5kaWYgLy8gIWRlZmluZWQoSlNBcmd1bWVudHNJdGVyYXRvcl9oKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNFbnZpcm9ubWVudFJlY29yZC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNFbnZpcm9u
bWVudFJlY29yZC5jcHAJKHJldmlzaW9uIDE4MDcyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTRW52aXJvbm1lbnRSZWNvcmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAxMiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMTIs
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0zNSw0ICszNSwxMiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY29uc3Qg
Q2xhc3NJbmZvIEpTRW52aXJvbm1lbnRSZWNvcmQ6OnNfaW5mbyA9IHsgIkVudmlyb25tZW50UmVj
b3JkIiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU0Vudmlyb25tZW50
UmVjb3JkKSB9OwogCit2b2lkIEpTRW52aXJvbm1lbnRSZWNvcmQ6OnZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBKU0Vudmlyb25tZW50UmVj
b3JkKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTRW52aXJvbm1lbnRSZWNvcmQqPihjZWxsKTsKKyAg
ICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CisgICAgQmFz
ZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKKyAgICB2aXNpdG9yLmFwcGVu
ZFZhbHVlcyh0aGlzT2JqZWN0LT52YXJpYWJsZXMoKSwgbV9zeW1ib2xUYWJsZS0+c2NvcGVTaXpl
KCkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTRW52aXJvbm1lbnRSZWNvcmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0Vudmlyb25tZW50UmVjb3JkLmgJKHJldmlzaW9uIDE4MDcy
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRW52aXJvbm1lbnRSZWNvcmQu
aAkod29ya2luZyBjb3B5KQpAQCAtNDYsMTEgKzQ2LDI2IEBAIGNsYXNzIEpTRW52aXJvbm1lbnRS
ZWNvcmQgOiBwdWJsaWMgSlNTeW0KIHB1YmxpYzoKICAgICB0eXBlZGVmIEpTU3ltYm9sVGFibGVP
YmplY3QgQmFzZTsKIAotICAgIFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIHJlZ2lzdGVycygp
IHsgcmV0dXJuIG1fcmVnaXN0ZXJzOyB9Ci0gICAgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiYg
cmVnaXN0ZXJBdChpbnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fcmVnaXN0ZXJzW2luZGV4XTsg
fQorICAgIFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIHZhcmlhYmxlcygpCisgICAgeworICAg
ICAgICByZXR1cm4gYml0d2lzZV9jYXN0PFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qPihiaXR3
aXNlX2Nhc3Q8Y2hhcio+KHRoaXMpICsgb2Zmc2V0T2ZWYXJpYWJsZXMoKSk7CisgICAgfQorICAg
IAorICAgIGJvb2wgaXNWYWxpZChTY29wZU9mZnNldCBvZmZzZXQpCisgICAgeworICAgICAgICBy
ZXR1cm4gISFvZmZzZXQgJiYgb2Zmc2V0Lm9mZnNldCgpIDwgbV9zeW1ib2xUYWJsZS0+c2NvcGVT
aXplKCk7CisgICAgfQorICAgIAorICAgIFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4mIHZhcmlh
YmxlQXQoU2NvcGVPZmZzZXQgb2Zmc2V0KSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlz
VmFsaWQob2Zmc2V0KSk7CisgICAgICAgIHJldHVybiB2YXJpYWJsZXMoKVtvZmZzZXQub2Zmc2V0
KCldOworICAgIH0KIAotICAgIFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIGNvbnN0ICogYWRk
cmVzc09mUmVnaXN0ZXJzKCkgY29uc3QgeyByZXR1cm4gJm1fcmVnaXN0ZXJzOyB9Ci0gICAgc3Rh
dGljIHNpemVfdCBvZmZzZXRPZlJlZ2lzdGVycygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihK
U0Vudmlyb25tZW50UmVjb3JkLCBtX3JlZ2lzdGVycyk7IH0KKyAgICBzdGF0aWMgc2l6ZV90IG9m
ZnNldE9mVmFyaWFibGVzKCkKKyAgICB7CisgICAgICAgIHJldHVybiBXVEY6OnJvdW5kVXBUb011
bHRpcGxlT2Y8c2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPik+KHNpemVvZihKU0Vudmlyb25t
ZW50UmVjb3JkKSk7CisgICAgfQogCiAgICAgREVDTEFSRV9JTkZPOwogCkBAIC02MCwxNSArNzUs
MzUgQEAgcHJvdGVjdGVkOgogICAgIEpTRW52aXJvbm1lbnRSZWNvcmQoCiAgICAgICAgIFZNJiB2
bSwKICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsCi0gICAgICAgIFJlZ2lzdGVyKiByZWdp
c3RlcnMsCiAgICAgICAgIEpTU2NvcGUqIHNjb3BlLAogICAgICAgICBTeW1ib2xUYWJsZSogc3lt
Ym9sVGFibGUpCiAgICAgICAgIDogQmFzZSh2bSwgc3RydWN0dXJlLCBzY29wZSwgc3ltYm9sVGFi
bGUpCi0gICAgICAgICwgbV9yZWdpc3RlcnMocmVpbnRlcnByZXRfY2FzdDxXcml0ZUJhcnJpZXJC
YXNlPFVua25vd24+Kj4ocmVnaXN0ZXJzKSkKICAgICB7CiAgICAgfQotCi0gICAgV3JpdGVCYXJy
aWVyQmFzZTxVbmtub3duPiogbV9yZWdpc3RlcnM7IC8vICJyIiBpbiB0aGUgc3RhY2suCisgICAg
CisgICAgc3RhdGljIHNpemVfdCBhbGxvY2F0aW9uU2l6ZUZvclNjb3BlU2l6ZSh1bnNpZ25lZCBz
Y29wZVNpemUpCisgICAgeworICAgICAgICByZXR1cm4gb2Zmc2V0T2ZWYXJpYWJsZXMoKSArIHNj
b3BlU2l6ZSAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pOworICAgIH0KKyAgICAKKyAg
ICBzdGF0aWMgc2l6ZV90IGFsbG9jYXRpb25TaXplKFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSkK
KyAgICB7CisgICAgICAgIHJldHVybiBhbGxvY2F0aW9uU2l6ZUZvclNjb3BlU2l6ZShzeW1ib2xU
YWJsZS0+c2NvcGVTaXplKCkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9u
VW5pbml0aWFsaXplZChWTSYgdm0pCisgICAgeworICAgICAgICBCYXNlOjpmaW5pc2hDcmVhdGlv
bih2bSk7CisgICAgfQorICAgIAorICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mIHZtKQorICAg
IHsKKyAgICAgICAgZmluaXNoQ3JlYXRpb25VbmluaXRpYWxpemVkKHZtKTsKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gbV9zeW1ib2xUYWJsZS0+c2NvcGVTaXplKCk7IGktLTspIHsKKyAgICAg
ICAgICAgIC8vIEZpbGxpbmcgdGhpcyB3aXRoIHVuZGVmaW5lZCBpcyB1c2VmdWwgYmVjYXVzZSB0
aGF0J3Mgd2hhdCB2YXJpYWJsZXMgc3RhcnQgb3V0IGFzLgorICAgICAgICAgICAgdmFyaWFibGVB
dChpKS5zZXRVbmRlZmluZWQoKTsKKyAgICAgICAgfQorICAgIH0KIH07CiAKIH0gLy8gbmFtZXNw
YWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMZXhpY2FsRW52
aXJvbm1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTTGV4aWNhbEVudmlyb25tZW50LmNwcAkocmV2aXNpb24gMTgwNzIwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMZXhpY2FsRW52aXJvbm1lbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSwgMjAx
NCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgs
IDIwMDksIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MCwyNyArNDAsMTkgQEAgbmFtZXNwYWNlIEpT
QyB7CiAKIGNvbnN0IENsYXNzSW5mbyBKU0xleGljYWxFbnZpcm9ubWVudDo6c19pbmZvID0geyAi
SlNMZXhpY2FsRW52aXJvbm1lbnQiLCAmQmFzZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RB
QkxFKEpTTGV4aWNhbEVudmlyb25tZW50KSB9OwogCi12b2lkIEpTTGV4aWNhbEVudmlyb25tZW50
Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi17Ci0g
ICAgSlNMZXhpY2FsRW52aXJvbm1lbnQqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNMZXhpY2FsRW52
aXJvbm1lbnQqPihjZWxsKTsKLSAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmpl
Y3QsIGluZm8oKSk7Ci0gICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9y
KTsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdGhpc09iamVjdC0+c3ltYm9sVGFibGUoKS0+
Y2FwdHVyZUNvdW50KCk7ICsraSkKLSAgICAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3Qt
PnN0b3JhZ2UoKVtpXSk7Ci19Ci0KIGlubGluZSBib29sIEpTTGV4aWNhbEVudmlyb25tZW50Ojpz
eW1ib2xUYWJsZUdldChQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNs
b3QpCiB7CiAgICAgU3ltYm9sVGFibGVFbnRyeSBlbnRyeSA9IHN5bWJvbFRhYmxlKCktPmlubGlu
ZUdldChwcm9wZXJ0eU5hbWUudWlkKCkpOwogICAgIGlmIChlbnRyeS5pc051bGwoKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCisgICAgU2NvcGVPZmZzZXQgb2Zmc2V0ID0gZW50cnkuc2NvcGVP
ZmZzZXQoKTsKKwogICAgIC8vIERlZmVuZCBhZ2FpbnN0IHRoZSBpbnNwZWN0b3IgYXNraW5nIGZv
ciBhIHZhciBhZnRlciBpdCBoYXMgYmVlbiBvcHRpbWl6ZWQgb3V0LgotICAgIGlmICghaXNWYWxp
ZChlbnRyeSkpCisgICAgaWYgKCFpc1ZhbGlkKG9mZnNldCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAotICAgIHNsb3Quc2V0VmFsdWUodGhpcywgRG9udEVudW0sIHJlZ2lzdGVyQXQoZW50cnku
Z2V0SW5kZXgoKSkuZ2V0KCkpOworICAgIHNsb3Quc2V0VmFsdWUodGhpcywgRG9udEVudW0sIHZh
cmlhYmxlQXQob2Zmc2V0KS5nZXQoKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTcwLDEx
ICs2MiwxMyBAQCBpbmxpbmUgYm9vbCBKU0xleGljYWxFbnZpcm9ubWVudDo6c3ltYm9sCiAgICAg
aWYgKGVudHJ5LmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICBTY29wZU9m
ZnNldCBvZmZzZXQgPSBlbnRyeS5zY29wZU9mZnNldCgpOworCiAgICAgLy8gRGVmZW5kIGFnYWlu
c3QgdGhlIGluc3BlY3RvciBhc2tpbmcgZm9yIGEgdmFyIGFmdGVyIGl0IGhhcyBiZWVuIG9wdGlt
aXplZCBvdXQuCi0gICAgaWYgKCFpc1ZhbGlkKGVudHJ5KSkKKyAgICBpZiAoIWlzVmFsaWQob2Zm
c2V0KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgZGVzY3JpcHRvci5zZXREZXNjcmlw
dG9yKHJlZ2lzdGVyQXQoZW50cnkuZ2V0SW5kZXgoKSkuZ2V0KCksIGVudHJ5LmdldEF0dHJpYnV0
ZXMoKSk7CisgICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKHZhcmlhYmxlQXQob2Zmc2V0KS5n
ZXQoKSwgZW50cnkuZ2V0QXR0cmlidXRlcygpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAt
OTUsMTIgKzg5LDEzIEBAIGlubGluZSBib29sIEpTTGV4aWNhbEVudmlyb25tZW50OjpzeW1ib2wK
ICAgICAgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBTdHJpY3RNb2RlUmVhZG9ubHlQ
cm9wZXJ0eVdyaXRlRXJyb3IpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0K
KyAgICAgICAgU2NvcGVPZmZzZXQgb2Zmc2V0ID0gaXRlci0+dmFsdWUuc2NvcGVPZmZzZXQoKTsK
ICAgICAgICAgLy8gRGVmZW5kIGFnYWluc3QgdGhlIGluc3BlY3RvciBhc2tpbmcgZm9yIGEgdmFy
IGFmdGVyIGl0IGhhcyBiZWVuIG9wdGltaXplZCBvdXQuCi0gICAgICAgIGlmICghaXNWYWxpZChp
dGVyLT52YWx1ZSkpCisgICAgICAgIGlmICghaXNWYWxpZChvZmZzZXQpKQogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgICAgICBpZiAoVmFyaWFibGVXYXRjaHBvaW50U2V0KiBzZXQgPSBp
dGVyLT52YWx1ZS53YXRjaHBvaW50U2V0KCkpCi0gICAgICAgICAgICBzZXQtPmludmFsaWRhdGUo
VmFyaWFibGVXcml0ZUZpcmVEZXRhaWwodGhpcywgcHJvcGVydHlOYW1lKSk7IC8vIERvbid0IG1l
c3MgYXJvdW5kIC0gaWYgd2UgaGFkIGZvdW5kIHRoaXMgc3RhdGljYWxseSwgd2Ugd291bGQgaGF2
ZSBpbnZjYWxpZGF0ZWQgaXQuCi0gICAgICAgIHJlZyA9ICZyZWdpc3RlckF0KGl0ZXItPnZhbHVl
LmdldEluZGV4KCkpOworICAgICAgICAgICAgc2V0LT5pbnZhbGlkYXRlKFZhcmlhYmxlV3JpdGVG
aXJlRGV0YWlsKHRoaXMsIHByb3BlcnR5TmFtZSkpOyAvLyBEb24ndCBtZXNzIGFyb3VuZCAtIGlm
IHdlIGhhZCBmb3VuZCB0aGlzIHN0YXRpY2FsbHksIHdlIHdvdWxkIGhhdmUgaW52YWxpZGF0ZWQg
aXQuCisgICAgICAgIHJlZyA9ICZ2YXJpYWJsZUF0KG9mZnNldCk7CiAgICAgfQogICAgIHJlZy0+
c2V0KHZtLCB0aGlzLCB2YWx1ZSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC0xMTYsNyArMTExLDcg
QEAgdm9pZCBKU0xleGljYWxFbnZpcm9ubWVudDo6Z2V0T3duTm9uSW5kZQogICAgICAgICBmb3Ig
KFN5bWJvbFRhYmxlOjpNYXA6Oml0ZXJhdG9yIGl0ID0gdGhpc09iamVjdC0+c3ltYm9sVGFibGUo
KS0+YmVnaW4obG9ja2VyKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgICAgICBpZiAoaXQt
PnZhbHVlLmdldEF0dHJpYnV0ZXMoKSAmIERvbnRFbnVtICYmICFzaG91bGRJbmNsdWRlRG9udEVu
dW1Qcm9wZXJ0aWVzKG1vZGUpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAg
ICAgaWYgKCF0aGlzT2JqZWN0LT5pc1ZhbGlkKGl0LT52YWx1ZSkpCisgICAgICAgICAgICBpZiAo
IXRoaXNPYmplY3QtPmlzVmFsaWQoaXQtPnZhbHVlLnNjb3BlT2Zmc2V0KCkpKQogICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmll
cihleGVjLCBpdC0+a2V5LmdldCgpKSk7CiAgICAgICAgIH0KQEAgLTEzNywxMSArMTMyLDEzIEBA
IGlubGluZSBib29sIEpTTGV4aWNhbEVudmlyb25tZW50OjpzeW1ib2wKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgICAgU3ltYm9sVGFibGVFbnRyeSYgZW50cnkgPSBpdGVyLT52YWx1
ZTsKICAgICAgICAgQVNTRVJUKCFlbnRyeS5pc051bGwoKSk7Ci0gICAgICAgIGlmICghaXNWYWxp
ZChlbnRyeSkpCisgICAgICAgIAorICAgICAgICBTY29wZU9mZnNldCBvZmZzZXQgPSBlbnRyeS5z
Y29wZU9mZnNldCgpOworICAgICAgICBpZiAoIWlzVmFsaWQob2Zmc2V0KSkKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAgICAgCiAgICAgICAgIGVudHJ5LnNldEF0dHJpYnV0ZXMoYXR0
cmlidXRlcyk7Ci0gICAgICAgIHJlZyA9ICZyZWdpc3RlckF0KGVudHJ5LmdldEluZGV4KCkpOwor
ICAgICAgICByZWcgPSAmdmFyaWFibGVBdChvZmZzZXQpOwogICAgIH0KICAgICByZWctPnNldCh2
bSwgdGhpcywgdmFsdWUpOwogICAgIHJldHVybiB0cnVlOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNMZXhpY2FsRW52aXJvbm1lbnQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xleGljYWxFbnZpcm9ubWVudC5oCShyZXZpc2lv
biAxODA3MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xleGljYWxFbnZp
cm9ubWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwOCwgMjAwOSwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDksIDIwMTMtMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQx
LDMzICs0MSwyNyBAQCBjbGFzcyBSZWdpc3RlcjsKICAgICAKIGNsYXNzIEpTTGV4aWNhbEVudmly
b25tZW50IDogcHVibGljIEpTRW52aXJvbm1lbnRSZWNvcmQgewogcHJpdmF0ZToKLSAgICBKU0xl
eGljYWxFbnZpcm9ubWVudChWTSYsIENhbGxGcmFtZSosIFJlZ2lzdGVyKiwgSlNTY29wZSosIENv
ZGVCbG9jayopOworICAgIEpTTGV4aWNhbEVudmlyb25tZW50KFZNJiwgU3RydWN0dXJlKiwgSlNT
Y29wZSosIFN5bWJvbFRhYmxlKik7CiAgICAgCiBwdWJsaWM6CiAgICAgdHlwZWRlZiBKU0Vudmly
b25tZW50UmVjb3JkIEJhc2U7CiAKLSAgICBzdGF0aWMgSlNMZXhpY2FsRW52aXJvbm1lbnQqIGNy
ZWF0ZShWTSYgdm0sIENhbGxGcmFtZSogY2FsbEZyYW1lLCBSZWdpc3RlciogcmVnaXN0ZXJzLCBK
U1Njb3BlKiBjdXJyZW50U2NvcGUsIENvZGVCbG9jayogY29kZUJsb2NrKQorICAgIHN0YXRpYyBK
U0xleGljYWxFbnZpcm9ubWVudCogY3JlYXRlKAorICAgICAgICBWTSYgdm0sIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTU2NvcGUqIGN1cnJlbnRTY29wZSwgU3ltYm9sVGFibGUqIHN5
bWJvbFRhYmxlKQogICAgIHsKLSAgICAgICAgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlID0gY29k
ZUJsb2NrLT5zeW1ib2xUYWJsZSgpOwotICAgICAgICBBU1NFUlQoY29kZUJsb2NrLT5jb2RlVHlw
ZSgpID09IEZ1bmN0aW9uQ29kZSk7Ci0gICAgICAgIEpTTGV4aWNhbEVudmlyb25tZW50KiBsZXhp
Y2FsRW52aXJvbm1lbnQgPSBuZXcgKAotICAgICAgICAgICAgTm90TnVsbCwKLSAgICAgICAgICAg
IGFsbG9jYXRlQ2VsbDxKU0xleGljYWxFbnZpcm9ubWVudD4oCi0gICAgICAgICAgICAgICAgdm0u
aGVhcCwKLSAgICAgICAgICAgICAgICBhbGxvY2F0aW9uU2l6ZShzeW1ib2xUYWJsZSkKLSAgICAg
ICAgICAgICkKLSAgICAgICAgKSBKU0xleGljYWxFbnZpcm9ubWVudCh2bSwgY2FsbEZyYW1lLCBy
ZWdpc3RlcnMsIGN1cnJlbnRTY29wZSwgY29kZUJsb2NrKTsKLSAgICAgICAgbGV4aWNhbEVudmly
b25tZW50LT5maW5pc2hDcmVhdGlvbih2bSk7Ci0gICAgICAgIHJldHVybiBsZXhpY2FsRW52aXJv
bm1lbnQ7CisgICAgICAgIEpTTGV4aWNhbEVudmlyb25tZW50KiByZXN1bHQgPQorICAgICAgICAg
ICAgbmV3IChOb3ROdWxsLCBhbGxvY2F0aW9uU2l6ZShzeW1ib2xUYWJsZSkpCisgICAgICAgICAg
ICBKU0xleGljYWxFbnZpcm9ubWVudCh2bSwgZ2xvYmFsT2JqZWN0LT5hY3RpdmF0aW9uU3RydWN0
dXJlKCksIGN1cnJlbnRTY29wZSwgc3ltYm9sVGFibGUpOworICAgICAgICByZXN1bHQtPmZpbmlz
aENyZWF0aW9uKHZtKTsKICAgICB9Ci0gICAgICAgIAorICAgIAogICAgIHN0YXRpYyBKU0xleGlj
YWxFbnZpcm9ubWVudCogY3JlYXRlKFZNJiB2bSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTU2Nv
cGUqIGN1cnJlbnRTY29wZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2spCiAgICAgewotICAgICAgICBy
ZXR1cm4gY3JlYXRlKHZtLCBjYWxsRnJhbWUsIGNhbGxGcmFtZS0+cmVnaXN0ZXJzKCkgKyBjb2Rl
QmxvY2stPmZyYW1lUG9pbnRlck9mZnNldFRvR2V0QWN0aXZhdGlvblJlZ2lzdGVycygpLCBjdXJy
ZW50U2NvcGUsIGNvZGVCbG9jayk7CisgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QgPSBjYWxsRnJhbWUtPmxleGljYWxHbG9iYWxPYmplY3QoKTsKKyAgICAgICAgU3ltYm9sVGFi
bGUqIHN5bWJvbFRhYmxlID0gY29kZUJsb2NrLT5zeW1ib2xUYWJsZSgpOworICAgICAgICByZXR1
cm4gY3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIGN1cnJlbnRTY29wZSwgc3ltYm9sdGFibGUpOwog
ICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0
b3ImKTsKLQorICAgICAgICAKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNP
YmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogICAgIHN0
YXRpYyB2b2lkIGdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0
ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKIApAQCAtODEsMTIgKzc1
LDYgQEAgcHVibGljOgogCiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZN
JiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkgeyByZXR1cm4gU3RydWN0dXJlOjpj
cmVhdGUodm0sIGdsb2JhbE9iamVjdCwganNOdWxsKCksIFR5cGVJbmZvKEFjdGl2YXRpb25PYmpl
Y3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7IH0KIAotICAgIFdyaXRlQmFycmllckJh
c2U8VW5rbm93bj4mIHJlZ2lzdGVyQXQoaW50KSBjb25zdDsKLSAgICBib29sIGlzVmFsaWRJbmRl
eChpbnQpIGNvbnN0OwotICAgIGJvb2wgaXNWYWxpZChjb25zdCBTeW1ib2xUYWJsZUVudHJ5Jikg
Y29uc3Q7Ci0gICAgaW50IHJlZ2lzdGVyc09mZnNldCgpOwotICAgIHN0YXRpYyBpbnQgcmVnaXN0
ZXJzT2Zmc2V0KFN5bWJvbFRhYmxlKik7Ci0KIHByb3RlY3RlZDoKICAgICBzdGF0aWMgY29uc3Qg
dW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBP
dmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzIHwgQmFzZTo6U3RydWN0dXJlRmxhZ3M7CiAKQEAgLTk2
LDMyICs4NCwxMyBAQCBwcml2YXRlOgogICAgIGJvb2wgc3ltYm9sVGFibGVHZXQoUHJvcGVydHlO
YW1lLCBQcm9wZXJ0eVNsb3QmLCBib29sJiBzbG90SXNXcml0ZWFibGUpOwogICAgIGJvb2wgc3lt
Ym9sVGFibGVQdXQoRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBib29sIHNob3Vs
ZFRocm93KTsKICAgICBib29sIHN5bWJvbFRhYmxlUHV0V2l0aEF0dHJpYnV0ZXMoVk0mLCBQcm9w
ZXJ0eU5hbWUsIEpTVmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpOwotCi0gICAgc3RhdGljIHNp
emVfdCBhbGxvY2F0aW9uU2l6ZShTeW1ib2xUYWJsZSopOwotICAgIHN0YXRpYyBzaXplX3Qgc3Rv
cmFnZU9mZnNldCgpOwotCi0gICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiBzdG9yYWdlKCk7IC8v
IGNhcHR1cmVDb3VudCgpIG51bWJlciBvZiByZWdpc3RlcnMuCiB9OwogCi1pbmxpbmUgSlNMZXhp
Y2FsRW52aXJvbm1lbnQ6OkpTTGV4aWNhbEVudmlyb25tZW50KFZNJiB2bSwgQ2FsbEZyYW1lKiBj
YWxsRnJhbWUsIFJlZ2lzdGVyKiByZWdpc3RlcnMsIEpTU2NvcGUqIGN1cnJlbnRTY29wZSwgQ29k
ZUJsb2NrKiBjb2RlQmxvY2spCi0gICAgOiBCYXNlKAotICAgICAgICB2bSwKLSAgICAgICAgY2Fs
bEZyYW1lLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmFjdGl2YXRpb25TdHJ1Y3R1cmUoKSwKLSAg
ICAgICAgcmVnaXN0ZXJzLAotICAgICAgICBjdXJyZW50U2NvcGUsCi0gICAgICAgIGNvZGVCbG9j
ay0+c3ltYm9sVGFibGUoKSkKK2lubGluZSBKU0xleGljYWxFbnZpcm9ubWVudDo6SlNMZXhpY2Fs
RW52aXJvbm1lbnQoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNTY29wZSogY3VycmVu
dFNjb3BlLCBTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUpCisgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1
cmUsIGN1cnJlbnRTY29wZSwgc3ltYm9sVGFibGUpCiB7Ci0gICAgU3ltYm9sVGFibGUqIHN5bWJv
bFRhYmxlID0gY29kZUJsb2NrLT5zeW1ib2xUYWJsZSgpOwotICAgIFdyaXRlQmFycmllcjxVbmtu
b3duPiogc3RvcmFnZSA9IHRoaXMtPnN0b3JhZ2UoKTsKLSAgICBzaXplX3QgY2FwdHVyZUNvdW50
ID0gc3ltYm9sVGFibGUtPmNhcHR1cmVDb3VudCgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgY2FwdHVyZUNvdW50OyArK2kpCi0gICAgICAgIG5ldyAoTm90TnVsbCwgJnN0b3JhZ2VbaV0p
IFdyaXRlQmFycmllcjxVbmtub3duPihVbmRlZmluZWRXcml0ZUJhcnJpZXJUYWcpOwotICAgIG1f
cmVnaXN0ZXJzID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8V3JpdGVCYXJyaWVyQmFzZTxVbmtub3du
Pio+KAotICAgICAgICByZWludGVycHJldF9jYXN0PGNoYXIqPih0aGlzKSArIHJlZ2lzdGVyc09m
ZnNldChzeW1ib2xUYWJsZSkpOwogfQogCi1KU0xleGljYWxFbnZpcm9ubWVudCogYXNBY3RpdmF0
aW9uKEpTVmFsdWUpOwotCiBpbmxpbmUgSlNMZXhpY2FsRW52aXJvbm1lbnQqIGFzQWN0aXZhdGlv
bihKU1ZhbHVlIHZhbHVlKQogewogICAgIEFTU0VSVChhc09iamVjdCh2YWx1ZSktPmluaGVyaXRz
KEpTTGV4aWNhbEVudmlyb25tZW50OjppbmZvKCkpKTsKQEAgLTEzMyw0OSArMTAyLDYgQEAgQUxX
QVlTX0lOTElORSBKU0xleGljYWxFbnZpcm9ubWVudCogUmVnaQogICAgIHJldHVybiBhc0FjdGl2
YXRpb24oanNWYWx1ZSgpKTsKIH0KIAotaW5saW5lIGludCBKU0xleGljYWxFbnZpcm9ubWVudDo6
cmVnaXN0ZXJzT2Zmc2V0KFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSkKLXsKLSAgICByZXR1cm4g
c3RvcmFnZU9mZnNldCgpICsgKChzeW1ib2xUYWJsZS0+Y2FwdHVyZUNvdW50KCkgLSBzeW1ib2xU
YWJsZS0+Y2FwdHVyZVN0YXJ0KCkgIC0gMSkgKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+
KSk7Ci19Ci0KLWlubGluZSBzaXplX3QgSlNMZXhpY2FsRW52aXJvbm1lbnQ6OnN0b3JhZ2VPZmZz
ZXQoKQotewotICAgIHJldHVybiBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Y8c2l6ZW9mKFdyaXRl
QmFycmllcjxVbmtub3duPik+KHNpemVvZihKU0xleGljYWxFbnZpcm9ubWVudCkpOwotfQotCi1p
bmxpbmUgV3JpdGVCYXJyaWVyPFVua25vd24+KiBKU0xleGljYWxFbnZpcm9ubWVudDo6c3RvcmFn
ZSgpCi17Ci0gICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3RfcHRyPFdyaXRlQmFycmllcjxVbmtu
b3duPio+KAotICAgICAgICByZWludGVycHJldF9jYXN0PGNoYXIqPih0aGlzKSArIHN0b3JhZ2VP
ZmZzZXQoKSk7Ci19Ci0KLWlubGluZSBzaXplX3QgSlNMZXhpY2FsRW52aXJvbm1lbnQ6OmFsbG9j
YXRpb25TaXplKFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSkKLXsKLSAgICBzaXplX3Qgb2JqZWN0
U2l6ZUluQnl0ZXMgPSBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Y8c2l6ZW9mKFdyaXRlQmFycmll
cjxVbmtub3duPik+KHNpemVvZihKU0xleGljYWxFbnZpcm9ubWVudCkpOwotICAgIHNpemVfdCBz
dG9yYWdlU2l6ZUluQnl0ZXMgPSBzeW1ib2xUYWJsZS0+Y2FwdHVyZUNvdW50KCkgKiBzaXplb2Yo
V3JpdGVCYXJyaWVyPFVua25vd24+KTsKLSAgICByZXR1cm4gb2JqZWN0U2l6ZUluQnl0ZXMgKyBz
dG9yYWdlU2l6ZUluQnl0ZXM7Ci19Ci0KLWlubGluZSBib29sIEpTTGV4aWNhbEVudmlyb25tZW50
Ojppc1ZhbGlkSW5kZXgoaW50IGluZGV4KSBjb25zdAotewotICAgIGlmIChpbmRleCA+IHN5bWJv
bFRhYmxlKCktPmNhcHR1cmVTdGFydCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYg
KGluZGV4IDw9IHN5bWJvbFRhYmxlKCktPmNhcHR1cmVFbmQoKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIHJldHVybiB0cnVlOwotfQotCi1pbmxpbmUgYm9vbCBKU0xleGljYWxFbnZpcm9u
bWVudDo6aXNWYWxpZChjb25zdCBTeW1ib2xUYWJsZUVudHJ5JiBlbnRyeSkgY29uc3QKLXsKLSAg
ICByZXR1cm4gaXNWYWxpZEluZGV4KGVudHJ5LmdldEluZGV4KCkpOwotfQotCi1pbmxpbmUgV3Jp
dGVCYXJyaWVyQmFzZTxVbmtub3duPiYgSlNMZXhpY2FsRW52aXJvbm1lbnQ6OnJlZ2lzdGVyQXQo
aW50IGluZGV4KSBjb25zdAotewotICAgIEFTU0VSVChpc1ZhbGlkSW5kZXgoaW5kZXgpKTsKLSAg
ICByZXR1cm4gQmFzZTo6cmVnaXN0ZXJBdChpbmRleCk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIEpT
QwogCiAjZW5kaWYgLy8gSlNMZXhpY2FsRW52aXJvbm1lbnRfaApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNOYW1lU2NvcGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTmFtZVNjb3BlLmNwcAkocmV2aXNpb24gMTgwNzIwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNOYW1lU2NvcGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00NywxNCArNDcsNiBAQCBKU05hbWVTY29wZSogSlNOYW1lU2NvcGU6OmNyZWF0
ZShWTSYgdm0sCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLXZvaWQgSlNOYW1lU2NvcGU6OnZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKLXsKLSAgICBK
U05hbWVTY29wZSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU05hbWVTY29wZSo+KGNlbGwpOwotICAg
IEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKLSAgICBCYXNl
Ojp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwotICAgIHZpc2l0b3IuYXBwZW5k
KCZ0aGlzT2JqZWN0LT5tX3JlZ2lzdGVyU3RvcmUpOwotfQotCiBKU1ZhbHVlIEpTTmFtZVNjb3Bl
Ojp0b1RoaXMoSlNDZWxsKiwgRXhlY1N0YXRlKiBleGVjLCBFQ01BTW9kZSBlY21hTW9kZSkKIHsK
ICAgICBpZiAoZWNtYU1vZGUgPT0gU3RyaWN0TW9kZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTTmFtZVNjb3BlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNOYW1lU2NvcGUuaAkocmV2aXNpb24gMTgwNzIwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNOYW1lU2NvcGUuaAkod29ya2luZyBjb3B5KQpAQCAt
NDQsMzggKzQ0LDM3IEBAIHB1YmxpYzoKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogICAgIHN0
YXRpYyBUKiBjcmVhdGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1Nj
b3BlKiBjdXJyZW50U2NvcGUsIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSwgSlNWYWx1ZSB2YWx1
ZSkKICAgICB7Ci0gICAgICAgIFQqIHNjb3BlT2JqZWN0ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0
ZUNlbGw8VD4odm0uaGVhcCkpIFQodm0sIGdsb2JhbE9iamVjdCwgY3VycmVudFNjb3BlLCBzeW1i
b2xUYWJsZSk7CisgICAgICAgIFQqIHNjb3BlT2JqZWN0ID0gbmV3ICgKKyAgICAgICAgICAgIE5v
dE51bGwsIGFsbG9jYXRlQ2VsbDxUPih2bS5oZWFwLCBhbGxvY2F0aW9uU2l6ZUZvclNjb3BlU2l6
ZSgxKSkKKyAgICAgICAgICAgIFQodm0sIGdsb2JhbE9iamVjdCwgY3VycmVudFNjb3BlLCBzeW1i
b2xUYWJsZSk7CiAgICAgICAgIHNjb3BlT2JqZWN0LT5maW5pc2hDcmVhdGlvbih2bSwgdmFsdWUp
OwogICAgICAgICByZXR1cm4gc2NvcGVPYmplY3Q7CiAgICAgfQogICAgIAogICAgIHN0YXRpYyBK
U05hbWVTY29wZSogY3JlYXRlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1Njb3BlKiBjdXJyZW50
U2NvcGUsIFN5bWJvbFRhYmxlKiwgSlNWYWx1ZSwgVHlwZSk7CiAKLSAgICBzdGF0aWMgdm9pZCB2
aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAgICAgc3RhdGljIEpTVmFsdWUg
dG9UaGlzKEpTQ2VsbCosIEV4ZWNTdGF0ZSosIEVDTUFNb2RlKTsKICAgICBzdGF0aWMgYm9vbCBn
ZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFBy
b3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyB2b2lkIHB1dChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQ
cm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOwogCiAgICAgREVDTEFSRV9J
TkZPOwogCi0gICAgSlNWYWx1ZSB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVnaXN0ZXJTdG9y
ZS5nZXQoKTsgfQorICAgIEpTVmFsdWUgdmFsdWUoKSBjb25zdCB7IHJldHVybiB2YXJpYWJsZUF0
KDApLmdldCgpOyB9CiAKIHByb3RlY3RlZDoKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiB2
bSwgSlNWYWx1ZSB2YWx1ZSkKICAgICB7Ci0gICAgICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZt
KTsKLSAgICAgICAgbV9yZWdpc3RlclN0b3JlLnNldCh2bSwgdGhpcywgdmFsdWUpOworICAgICAg
ICBCYXNlOjpmaW5pc2hDcmVhdGlvblVuaW5pdGlhbGl6ZWQodm0pOworICAgICAgICB2YXJpYWJs
ZUF0KDApLnNldCh2bSwgdGhpcywgdmFsdWUpOwogICAgIH0KIAogICAgIHN0YXRpYyBjb25zdCB1
bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEJh
c2U6OlN0cnVjdHVyZUZsYWdzOwogCiAgICAgSlNOYW1lU2NvcGUoVk0mIHZtLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgSlNTY29wZSogbmV4dCwgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlKQotICAg
ICAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSwgcmVpbnRlcnByZXRfY2FzdDxSZWdpc3Rlcio+KCZt
X3JlZ2lzdGVyU3RvcmUgKyAxKSwgbmV4dCwgc3ltYm9sVGFibGUpCisgICAgICAgIDogQmFzZSh2
bSwgc3RydWN0dXJlLCBuZXh0LCBzeW1ib2xUYWJsZSkKICAgICB7CisgICAgICAgIEFTU0VSVChz
eW1ib2xUYWJsZS0+c2NvcGVTaXplKCkgPT0gMSk7CiAgICAgfQotCi1wcml2YXRlOgotICAgIFdy
aXRlQmFycmllcjxVbmtub3duPiBtX3JlZ2lzdGVyU3RvcmU7CiB9OwogCiB9CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZh
cmlhYmxlT2JqZWN0LmNwcAkocmV2aXNpb24gMTgwNzIwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDEzIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMywgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTMzLDMyICszMywzMCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotaW50IEpT
U2VnbWVudGVkVmFyaWFibGVPYmplY3Q6OmZpbmRSZWdpc3RlckluZGV4KHZvaWQqIHJlZ2lzdGVy
QWRkcmVzcykKK1Njb3BlT2Zmc2V0IEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3Q6OmZpbmRSZWdp
c3RlckluZGV4KHZvaWQqIHJlZ2lzdGVyQWRkcmVzcykKIHsKICAgICBDb25jdXJyZW50SklUTG9j
a2VyIGxvY2tlcihtX2xvY2spOwogICAgIAotICAgIGZvciAoaW50IGkgPSBtX3JlZ2lzdGVycy5z
aXplKCk7IGktLTspIHsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX3JlZ2lzdGVycy5zaXplKCk7
IGktLTspIHsKICAgICAgICAgaWYgKCZtX3JlZ2lzdGVyc1tpXSAhPSByZWdpc3RlckFkZHJlc3Mp
CiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgcmV0dXJuIGk7CisgICAgICAgIHJldHVy
biBTY29wZU9mZnNldChpKTsKICAgICB9CiAgICAgQ1JBU0goKTsKLSAgICByZXR1cm4gLTE7Cisg
ICAgcmV0dXJuIFNjb3BlT2Zmc2V0KCk7CiB9CiAKLWludCBKU1NlZ21lbnRlZFZhcmlhYmxlT2Jq
ZWN0OjphZGRSZWdpc3RlcnMoaW50IG51bWJlck9mUmVnaXN0ZXJzVG9BZGQpCitTY29wZU9mZnNl
dCBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0OjphZGRSZWdpc3RlcnModW5zaWduZWQgbnVtYmVy
T2ZSZWdpc3RlcnNUb0FkZCkKIHsKICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xv
Y2spOwogICAgIAotICAgIEFTU0VSVChudW1iZXJPZlJlZ2lzdGVyc1RvQWRkID49IDApOwotICAg
IAogICAgIHNpemVfdCBvbGRTaXplID0gbV9yZWdpc3RlcnMuc2l6ZSgpOwogICAgIG1fcmVnaXN0
ZXJzLmdyb3cob2xkU2l6ZSArIG51bWJlck9mUmVnaXN0ZXJzVG9BZGQpOwogICAgIAogICAgIGZv
ciAoc2l6ZV90IGkgPSBudW1iZXJPZlJlZ2lzdGVyc1RvQWRkOyBpLS07KQogICAgICAgICBtX3Jl
Z2lzdGVyc1tvbGRTaXplICsgaV0uc2V0V2l0aG91dFdyaXRlQmFycmllcihqc1VuZGVmaW5lZCgp
KTsKICAgICAKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PihvbGRTaXplKTsKKyAgICByZXR1
cm4gU2NvcGVPZmZzZXQob2xkU2l6ZSk7CiB9CiAKIHZvaWQgSlNTZWdtZW50ZWRWYXJpYWJsZU9i
amVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiBzbG90VmlzaXRv
cikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFi
bGVPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmgJKHJldmlzaW9uIDE4MDcyMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNTcsMjQgKzU3LDIzIEBAIGNsYXNzIEpTU2VnbWVudGVkVmFyaWFibGVPYmpl
Y3QgOiBwdWJsaWMKIHB1YmxpYzoKICAgICB0eXBlZGVmIEpTU3ltYm9sVGFibGVPYmplY3QgQmFz
ZTsKIAotICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgcmVnaXN0ZXJBdChpbnQgaW5kZXgpIHsg
cmV0dXJuIG1fcmVnaXN0ZXJzW2luZGV4XTsgfQorICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYg
dmFyaWFibGVBdChTY29wZU9mZnNldCBvZmZzZXQpIHsgcmV0dXJuIG1fdmFyaWFibGVzW29mZnNl
dC5vZmZzZXQoKV07IH0KICAgICAKICAgICAvLyBUaGlzIGlzIGEgc2xvdyBtZXRob2QgY2FsbCwg
d2hpY2ggc2VhcmNoZXMgdGhlIHJlZ2lzdGVyIGJhbmsgdG8gZmluZCB0aGUgaW5kZXgKICAgICAv
LyBnaXZlbiBhIHBvaW50ZXIuIEl0IHdpbGwgQ1JBU0goKSBpZiBpdCBkb2VzIG5vdCBmaW5kIHRo
ZSByZWdpc3Rlci4gT25seSB1c2UgdGhpcwogICAgIC8vIGluIGRlYnVnIGNvZGUgKGxpa2UgYnl0
ZWNvZGUgZHVtcGluZykuCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgaW50IGZpbmRSZWdpc3Rlcklu
ZGV4KHZvaWQqKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBTY29wZU9mZnNldCBmaW5kUmVnaXN0
ZXJJbmRleCh2b2lkKik7CiAgICAgCi0gICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiBhc3NlcnRS
ZWdpc3RlcklzSW5UaGlzT2JqZWN0KFdyaXRlQmFycmllcjxVbmtub3duPiogcmVnaXN0ZXJQb2lu
dGVyKQorICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogYXNzZXJ0VmFyaWFibGVJc0luVGhpc09i
amVjdChXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHZhcmlhYmxlUG9pbnRlcikKICAgICB7Ci0jaWYg
IUFTU0VSVF9ESVNBQkxFRAotICAgICAgICBmaW5kUmVnaXN0ZXJJbmRleChyZWdpc3RlclBvaW50
ZXIpOwotI2VuZGlmCisgICAgICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKQorICAgICAgICAgICAg
ZmluZFJlZ2lzdGVySW5kZXgocmVnaXN0ZXJQb2ludGVyKTsKICAgICAgICAgcmV0dXJuIHJlZ2lz
dGVyUG9pbnRlcjsKICAgICB9CiAgICAgCiAgICAgLy8gQWRkcyBudW1iZXJPZlJlZ2lzdGVyc1Rv
QWRkIHJlZ2lzdGVycywgaW5pdGlhbGl6ZXMgdGhlbSB0byBVbmRlZmluZWQsIGFuZCByZXR1cm5z
CiAgICAgLy8gdGhlIGluZGV4IG9mIHRoZSBmaXJzdCBvbmUgYWRkZWQuCi0gICAgSlNfRVhQT1JU
X1BSSVZBVEUgaW50IGFkZFJlZ2lzdGVycyhpbnQgbnVtYmVyT2ZSZWdpc3RlcnNUb0FkZCk7Cisg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgU2NvcGVPZmZzZXQgYWRkUmVnaXN0ZXJzKHVuc2lnbmVkIG51
bWJlck9mUmVnaXN0ZXJzVG9BZGQpOwogICAgIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRp
YyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3Qu
aAkocmV2aXNpb24gMTgwNzIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNT
eW1ib2xUYWJsZU9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC03OCw3ICs3OCw3IEBAIGlubGlu
ZSBib29sIHN5bWJvbFRhYmxlR2V0KAogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgU3ltYm9s
VGFibGVFbnRyeTo6RmFzdCBlbnRyeSA9IGl0ZXItPnZhbHVlOwogICAgIEFTU0VSVCghZW50cnku
aXNOdWxsKCkpOwotICAgIHNsb3Quc2V0VmFsdWUob2JqZWN0LCBlbnRyeS5nZXRBdHRyaWJ1dGVz
KCkgfCBEb250RGVsZXRlLCBvYmplY3QtPnJlZ2lzdGVyQXQoZW50cnkuZ2V0SW5kZXgoKSkuZ2V0
KCkpOworICAgIHNsb3Quc2V0VmFsdWUob2JqZWN0LCBlbnRyeS5nZXRBdHRyaWJ1dGVzKCkgfCBE
b250RGVsZXRlLCBvYmplY3QtPnZhcmlhYmxlQXQoZW50cnkuc2NvcGVPZmZzZXQoKSkuZ2V0KCkp
OwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC05NCw3ICs5NCw3IEBAIGlubGluZSBib29sIHN5
bWJvbFRhYmxlR2V0KAogICAgIFN5bWJvbFRhYmxlRW50cnk6OkZhc3QgZW50cnkgPSBpdGVyLT52
YWx1ZTsKICAgICBBU1NFUlQoIWVudHJ5LmlzTnVsbCgpKTsKICAgICBkZXNjcmlwdG9yLnNldERl
c2NyaXB0b3IoCi0gICAgICAgIG9iamVjdC0+cmVnaXN0ZXJBdChlbnRyeS5nZXRJbmRleCgpKS5n
ZXQoKSwgZW50cnkuZ2V0QXR0cmlidXRlcygpIHwgRG9udERlbGV0ZSk7CisgICAgICAgIG9iamVj
dC0+dmFyaWFibGVBdChlbnRyeS5zY29wZU9mZnNldCgpKS5nZXQoKSwgZW50cnkuZ2V0QXR0cmli
dXRlcygpIHwgRG9udERlbGV0ZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTExMCw3ICsx
MTAsNyBAQCBpbmxpbmUgYm9vbCBzeW1ib2xUYWJsZUdldCgKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIFN5bWJvbFRhYmxlRW50cnk6OkZhc3QgZW50cnkgPSBpdGVyLT52YWx1ZTsKICAgICBB
U1NFUlQoIWVudHJ5LmlzTnVsbCgpKTsKLSAgICBzbG90LnNldFZhbHVlKG9iamVjdCwgZW50cnku
Z2V0QXR0cmlidXRlcygpIHwgRG9udERlbGV0ZSwgb2JqZWN0LT5yZWdpc3RlckF0KGVudHJ5Lmdl
dEluZGV4KCkpLmdldCgpKTsKKyAgICBzbG90LnNldFZhbHVlKG9iamVjdCwgZW50cnkuZ2V0QXR0
cmlidXRlcygpIHwgRG9udERlbGV0ZSwgb2JqZWN0LT52YXJpYWJsZUF0KGVudHJ5LnNjb3BlT2Zm
c2V0KCkpLmdldCgpKTsKICAgICBzbG90SXNXcml0ZWFibGUgPSAhZW50cnkuaXNSZWFkT25seSgp
OwogICAgIHJldHVybiB0cnVlOwogfQpAQCAtMTQ1LDcgKzE0NSw3IEBAIGlubGluZSBib29sIHN5
bWJvbFRhYmxlUHV0KAogICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTEzNDYwMQogICAgICAgICAgICAgc2V0LT5ub3RpZnlXcml0ZSh2bSwgdmFs
dWUsIG9iamVjdCwgcHJvcGVydHlOYW1lKTsKICAgICAgICAgfQotICAgICAgICByZWcgPSAmb2Jq
ZWN0LT5yZWdpc3RlckF0KGZhc3RFbnRyeS5nZXRJbmRleCgpKTsKKyAgICAgICAgcmVnID0gJm9i
amVjdC0+dmFyaWFibGVBdChmYXN0RW50cnkuc2NvcGVPZmZzZXQoKSk7CiAgICAgfQogICAgIC8v
IEknZCBwcmVmZXIgd2Ugbm90IGhvbGQgbG9jayB3aGlsZSBleGVjdXRpbmcgYmFycmllcnMsIHNp
bmNlIEkgcHJlZmVyIHRvIHJlc2VydmUKICAgICAvLyB0aGUgcmlnaHQgZm9yIGJhcnJpZXJzIHRv
IGJlIGFibGUgdG8gdHJpZ2dlciBHQy4gQW5kIEkgZG9uJ3Qgd2FudCB0byBob2xkIFZNCkBAIC0x
NzMsNyArMTczLDcgQEAgaW5saW5lIGJvb2wgc3ltYm9sVGFibGVQdXRXaXRoQXR0cmlidXRlcwog
ICAgICAgICBpZiAoVmFyaWFibGVXYXRjaHBvaW50U2V0KiBzZXQgPSBlbnRyeS53YXRjaHBvaW50
U2V0KCkpCiAgICAgICAgICAgICBzZXQtPm5vdGlmeVdyaXRlKHZtLCB2YWx1ZSwgb2JqZWN0LCBw
cm9wZXJ0eU5hbWUpOwogICAgICAgICBlbnRyeS5zZXRBdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpOwot
ICAgICAgICByZWcgPSAmb2JqZWN0LT5yZWdpc3RlckF0KGVudHJ5LmdldEluZGV4KCkpOworICAg
ICAgICByZWcgPSAmb2JqZWN0LT52YXJpYWJsZUF0KGVudHJ5LnNjb3BlT2Zmc2V0KCkpOwogICAg
IH0KICAgICByZWctPnNldCh2bSwgb2JqZWN0LCB2YWx1ZSk7CiAgICAgcmV0dXJuIHRydWU7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGUuaAkocmV2aXNpb24gMTgwNzIw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTU4LDcgKzU4LDggQEAgZW51bSBKU1R5cGUgOiB1aW50OF90IHsKICAgICBQdXJlRm9y
d2FyZGluZ1Byb3h5VHlwZSwKICAgICBJbXB1cmVQcm94eVR5cGUsCiAgICAgV2l0aFNjb3BlVHlw
ZSwKLSAgICBBcmd1bWVudHNUeXBlLAorICAgIERpcmVjdEFyZ3VtZW50c1R5cGUsCisgICAgU2Nv
cGVkQXJndW1lbnRzVHlwZSwKIAogICAgIEludDhBcnJheVR5cGUsCiAgICAgSW50MTZBcnJheVR5
cGUsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PdXRPZkJhbmRBcmd1bWVu
dHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL091dE9m
QmFuZEFyZ3VtZW50cy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9PdXRPZkJhbmRBcmd1bWVudHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MjEzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJPdXRPZkJhbmRBcmd1bWVudHMuaCIKKworI2lu
Y2x1ZGUgIkpTQXJndW1lbnRzSXRlcmF0b3IuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisK
K25hbWVzcGFjZSBKU0MgeworCitTVEFUSUNfQVNTRVJUX0lTX1RSSVZJQUxMWV9ERVNUUlVDVElC
TEUoT3V0T2ZCYW5kQXJndW1lbnRzKTsKKworY29uc3QgQ2xhc3NJbmZvIE91dE9mQmFuZEFyZ3Vt
ZW50czo6c19pbmZvID0geyAiQXJndW1lbnRzIiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRFX01F
VEhPRF9UQUJMRShPdXRPZkJhbmRBcmd1bWVudHMpIH07CisKK091dE9mQmFuZEFyZ3VtZW50czo6
T3V0T2ZCYW5kQXJndW1lbnRzKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgOiBC
YXNlKHZtLCBzdHJ1Y3R1cmUsIG51bGxwdHIpCisgICAgLCBtX3NwZWNpYWxzTWF0ZXJpYWxpemVk
KGZhbHNlKQoreworfQorCitPdXRPZkJhbmRBcmd1bWVudHMqIE91dE9mQmFuZEFyZ3VtZW50czo6
Y3JlYXRlRW1wdHkoCisgICAgVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBK
U0Z1bmN0aW9uKiBjYWxsZWUpCit7CisgICAgT3V0T2ZCYW5kQXJndW1lbnRzKiByZXN1bHQgPSBu
ZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxPdXRPZkJhbmRBcmd1bWVudHM+KHZtLmhlYXApKQor
ICAgICAgICBPdXRPZkJhbmRBcmd1bWVudHModm0sIGdsb2JhbE9iamVjdC0+b3V0T2ZCYW5kQXJn
dW1lbnRzU3RydWN0dXJlKCkpOworICAgIHJlc3VsdC0+ZmluaXNoQ3JlYXRpb24odm0pOworICAg
IHJlc3VsdC0+bV9jYWxsZWUuc2V0KHZtLCB0aGlzLCBjYWxsZWUpOworICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK091dE9mQmFuZEFyZ3VtZW50cyogT3V0T2ZCYW5kQXJndW1lbnRzOjpjcmVhdGVF
bXB0eShFeGVjU3RhdGUqIGV4ZWMsIEpTRnVuY3Rpb24qIGNhbGxlZSkKK3sKKyAgICAvLyBOQi4g
U29tZSBjbGllbnRzIG1pZ2h0IGV4cGVjdCB0aGF0IHRoZSBnbG9iYWwgb2JqZWN0IG9mIG9mIHRo
aXMgb2JqZWN0IGlzIHRoZSBnbG9iYWwgb2JqZWN0CisgICAgLy8gb2YgdGhlIGNhbGxlZS4gV2Ug
ZG9uJ3QgZG8gdGhpcyBmb3Igbm93LCBidXQgbWF5YmUgd2Ugc2hvdWxkLgorICAgIHJldHVybiBj
cmVhdGVFbXB0eShleGVjLT52bSgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGNhbGxl
ZSk7Cit9CisKK091dE9mQmFuZEFyZ3VtZW50cyogT3V0T2ZCYW5kQXJndW1lbnRzOjpjcmVhdGVX
aXRoSW5saW5lRnJhbWUoRXhlY1N0YXRlKiBteUZyYW1lLCBFeGVjU3RhdGUqIHRhcmdldEZyYW1l
LCBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSwgQXJndW1lbnRzTW9kZSBtb2RlKQor
eworICAgIFZNJiB2bSA9IG15RnJhbWUtPnZtKCk7CisgICAgCisgICAgSlNGdW5jdGlvbiogY2Fs
bGVlOworICAgIAorICAgIGlmIChpbmxpbmVDYWxsRnJhbWUpCisgICAgICAgIGNhbGxlZSA9IGpz
Q2FzdDxKU0Z1bmN0aW9uKj4oaW5saW5lQ2FsbEZyYW1lLT5jYWxsZWVSZWNvdmVyeS5yZWNvdmVy
KHRhcmdldEZyYW1lKSk7CisgICAgZWxzZQorICAgICAgICBjYWxsZWUgPSBqc0Nhc3Q8SlNGdW5j
dGlvbio+KHRhcmdldEZyYW1lLT5jYWxsZWUoKSk7CisKKyAgICAvLyBOQi4gSXQncyBzb21ld2hh
dCBhcmJpdHJhcnkgdGhhdCB3ZSB0aWUgdGhlIHN0cmljdG5lc3Mgb2YgdGhpcyBvYmplY3QgdG8g
dGhlIHN0cmljdG5lc3Mgb2YKKyAgICAvLyB0aGUgY2FsbGVlLgorICAgIGJvb2wgaXNTdHJpY3RN
b2RlID0gZXhlY3V0YWJsZS0+aXNTdHJpY3RNb2RlKCk7CisKKyAgICBPdXRPZkJhbmRBcmd1bWVu
dHMqIHJlc3VsdCA9IGNyZWF0ZUVtcHR5KG15RnJhbWUsIGNhbGxlZSk7CisgICAgCisgICAgdW5z
aWduZWQgbGVuZ3RoOworICAgIHN3aXRjaCAobW9kZSkgeworICAgIGNhc2UgQ2xvbmVkQXJndW1l
bnRzQ3JlYXRpb25Nb2RlOiB7CisgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUpIHsKKyAgICAg
ICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRSZWdpc3Rlci5pc1ZhbGlk
KCkpCisgICAgICAgICAgICAgICAgbGVuZ3RoID0gZXhlYy0+cihpbmxpbmVDYWxsRnJhbWUtPmFy
Z3VtZW50Q291bnRSZWdpc3RlcikudW5ib3hlZEludDMyKCk7CisgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgbGVuZ3RoID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgp
OworICAgICAgICAgICAgbGVuZ3RoLS07CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IGxlbmd0aDsgaS0tOykKKyAgICAgICAgICAgICAgICByZXN1bHQtPnB1dERp
cmVjdEluZGV4KG15RnJhbWUsIGksIGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzW2ldLnJlY292
ZXIodGFyZ2V0RnJhbWUpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGxlbmd0aCA9
IHRhcmdldEZyYW1lLT5hcmd1bWVudENvdW50KCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IGxlbmd0aDsgaS0tOykKKyAgICAgICAgICAgICAgICByZXN1bHQt
PnB1dERpcmVjdEluZGV4KG15RnJhbWUsIGksIHRhcmdldEZyYW1lLT51bmNoZWNrZWRBcmd1bWVu
dChpKSk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAKKyAgICBj
YXNlIEZha2VBcmd1bWVudFZhbHVlc0NyZWF0aW9uTW9kZTogeworICAgICAgICBsZW5ndGggPSAw
OworICAgICAgICBicmVhazsKKyAgICB9IH0KKyAgICAKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2
bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcihsZW5ndGgpKTsKKyAgICBpZiAo
aXNTdHJpY3RNb2RlKSB7CisgICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0QWNjZXNzb3IoZXhlYywg
dm0ucHJvcGVydHlOYW1lcy0+Y2FsbGVlLCB0aGlzT2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+dGhy
b3dUeXBlRXJyb3JHZXR0ZXJTZXR0ZXIoZXhlYy0+dm0oKSksIERvbnREZWxldGUgfCBEb250RW51
bSB8IEFjY2Vzc29yKTsKKyAgICAgICAgcmVzdWx0LT5wdXREaXJlY3RBY2Nlc3NvcihleGVjLCB2
bS5wcm9wZXJ0eU5hbWVzLT5jYWxsZWUsIHRoaXNPYmplY3QtPmdsb2JhbE9iamVjdCgpLT50aHJv
d1R5cGVFcnJvckdldHRlclNldHRlcihleGVjLT52bSgpKSwgRG9udERlbGV0ZSB8IERvbnRFbnVt
IHwgQWNjZXNzb3IpOworICAgIH0gZWxzZQorICAgICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwg
dm0ucHJvcGVydHlOYW1lcy0+Y2FsbGVlLCBKU1ZhbHVlKGNhbGxlZSkpOworICAgIAorICAgIHJl
c3VsdC0+SlNDX05BVElWRV9GVU5DVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5pdGVyYXRvclByaXZh
dGVOYW1lLCBhcmd1bWVudHNGdW5jSXRlcmF0b3IsIERvbnRFbnVtLCAwKTsKK30KKworT3V0T2ZC
YW5kQXJndW1lbnRzKiBPdXRPZkJhbmRBcmd1bWVudHM6OmNyZWF0ZVdpdGhNYWNoaW5lRnJhbWUo
RXhlY1N0YXRlKiBteUZyYW1lLCBFeGVjU3RhdGUqIHRhcmdldEZyYW1lLCBBcmd1bWVudHNNb2Rl
IG1vZGUpCit7CisgICAgcmV0dXJuIGNyZWF0ZVdpdGhJbmxpbmVGcmFtZShteUZyYW1lLCB0YXJn
ZXRGcmFtZSwgbnVsbHB0ciwgbW9kZSk7Cit9CisKK1N0cnVjdHVyZSogT3V0T2ZCYW5kQXJndW1l
bnRzOjpjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU1ZhbHVlIHByb3RvdHlwZSkKK3sKKyAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0s
IGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVG
bGFncyksIGluZm8oKSk7Cit9CisKK2Jvb2wgT3V0T2ZCYW5kQXJndW1lbnRzOjpnZXRPd25Qcm9w
ZXJ0eVNsb3QoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUg
aWRlbnQsIFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICBPdXRPZkJhbmRBcmd1bWVudHMqIHRo
aXNPYmplY3QgPSBqc0Nhc3Q8T3V0T2ZCYW5kQXJndW1lbnRzKj4ob2JqZWN0KTsKKyAgICBWTSYg
dm0gPSBleGVjLT52bSgpOworICAgIAorICAgIGlmIChpZGVudCA9PSB2bS5wcm9wZXJ0eU5hbWVz
LT5jYWxsZXIKKyAgICAgICAgfHwgaWRlbnQgPT0gdm0ucHJvcGVydHlOYW1lcy0+Y2FsbGVlKQor
ICAgICAgICB0aGlzT2JqZWN0LT5tYXRlcmlhbGl6ZVNwZWNpYWxzSWZOZWNlc3NhcnkoZXhlYyk7
CisgICAgCisgICAgaWYgKEJhc2U6OmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBleGVj
LCBpZGVudCwgc2xvdCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIAorICAgIGlmIChpZGVu
dCA9PSB2bS5wcm9wZXJ0eU5hbWVzLT5pdGVyYXRvclByaXZhdGVOYW1lKSB7CisgICAgICAgIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7
CisgICAgICAgIHRoaXNPYmplY3QtPkpTQ19OQVRJVkVfRlVOQ1RJT04odm0ucHJvcGVydHlOYW1l
cy0+aXRlcmF0b3JQcml2YXRlTmFtZSwgYXJndW1lbnRzRnVuY0l0ZXJhdG9yLCBEb250RW51bSwg
MCk7CisgICAgICAgIGlmIChKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3Qs
IGV4ZWMsIGlkZW50LCBzbG90KSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAg
ICAKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgT3V0T2ZCYW5kQXJndW1lbnRzOjpnZXRP
d25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVy
dHlOYW1lQXJyYXkmIGFycmF5LCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3sKKyAgICBPdXRPZkJh
bmRBcmd1bWVudHMqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8T3V0T2ZCYW5kQXJndW1lbnRzKj4ob2Jq
ZWN0KTsKKyAgICB0aGlzT2JqZWN0LT5tYXRlcmlhbGl6ZVNwZWNpYWxzSWZOZWNlc3NhcnkoZXhl
Yyk7CisgICAgQmFzZTo6Z2V0T3duUHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBleGVjLCBhcnJh
eSwgbW9kZSk7Cit9CisKK3ZvaWQgT3V0T2ZCYW5kQXJndW1lbnRzOjpwdXQoSlNDZWxsKiBjZWxs
LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBpZGVudCwgSlNWYWx1ZSB2YWx1ZSwgUHV0
UHJvcGVydHlTbG90JiBzbG90KQoreworICAgIE91dE9mQmFuZEFyZ3VtZW50cyogdGhpc09iamVj
dCA9IGpzQ2FzdDxPdXRPZkJhbmRBcmd1bWVudHMqPihvYmplY3QpOworICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7CisgICAgCisgICAgaWYgKGlkZW50ID09IHZtLnByb3BlcnR5TmFtZXMtPmNhbGxl
ZQorICAgICAgICB8fCBpZGVudCA9PSB2bS5wcm9wZXJ0eU5hbWVzLT5jYWxsZXIpCisgICAgICAg
IHRoaXNPYmplY3QtPm1hdGVyaWFsaXplU3BlY2lhbHNJZk5lY2Vzc2FyeShleGVjKTsKKyAgICAK
KyAgICBCYXNlOjpwdXQodGhpc09iamVjdCwgZXhlYywgaWRlbnQsIHZhbHVlLCBzbG90KTsKK30K
Kwordm9pZCBPdXRPZkJhbmRBcmd1bWVudHM6OmRlbGV0ZVByb3BlcnR5KEpTQ2VsbCogY2VsbCwg
RXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgaWRlbnQpCit7CisgICAgT3V0T2ZCYW5kQXJn
dW1lbnRzKiB0aGlzT2JqZWN0ID0ganNDYXN0PE91dE9mQmFuZEFyZ3VtZW50cyo+KG9iamVjdCk7
CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICAKKyAgICBpZiAoaWRlbnQgPT0gdm0ucHJv
cGVydHlOYW1lcy0+Y2FsbGVlCisgICAgICAgIHx8IGlkZW50ID09IHZtLnByb3BlcnR5TmFtZXMt
PmNhbGxlcikKKyAgICAgICAgdGhpc09iamVjdC0+bWF0ZXJpYWxpemVTcGVjaWFsc0lmTmVjZXNz
YXJ5KGV4ZWMpOworICAgIAorICAgIEJhc2U6OmRlbGV0ZVByb3BlcnR5KHRoaXNPYmplY3QsIGV4
ZWMsIGlkZW50KTsKK30KKwordm9pZCBPdXRPZkJhbmRBcmd1bWVudHM6OmRlZmluZU93blByb3Bl
cnR5KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIGlkZW50
LCBjb25zdCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIGJvb2wgc2hvdWxkVGhyb3cp
Cit7CisgICAgT3V0T2ZCYW5kQXJndW1lbnRzKiB0aGlzT2JqZWN0ID0ganNDYXN0PE91dE9mQmFu
ZEFyZ3VtZW50cyo+KG9iamVjdCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICAKKyAg
ICBpZiAoaWRlbnQgPT0gdm0ucHJvcGVydHlOYW1lcy0+Y2FsbGVlCisgICAgICAgIHx8IGlkZW50
ID09IHZtLnByb3BlcnR5TmFtZXMtPmNhbGxlcikKKyAgICAgICAgdGhpc09iamVjdC0+bWF0ZXJp
YWxpemVTcGVjaWFsc0lmTmVjZXNzYXJ5KGV4ZWMpOworICAgIAorICAgIHJldHVybiBCYXNlOjpk
ZWZpbmVPd25Qcm9wZXJ0eShvYmplY3QsIGV4ZWMsIGlkZW50LCBkZXNjcmlwdG9yLCBzaG91bGRU
aHJvdyk7Cit9CisKK3ZvaWQgT3V0T2ZCYW5kQXJndW1lbnRzOjptYXRlcmlhbGl6ZVNwZWNpYWxz
KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBSRUxFQVNFX0FTU0VSVCghc3BlY2lhbHNNYXRlcmlh
bGl6ZWQoKSk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICAKKyAgICBGdW5jdGlvbkV4
ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBqc0Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4obV9jYWxs
ZWUtPmV4ZWN1dGFibGUoKSk7CisgICAgYm9vbCBpc1N0cmljdE1vZGUgPSBleGVjdXRhYmxlLT5p
c1N0cmljdE1vZGUoKTsKKyAgICAKKyAgICBpZiAoaXNTdHJpY3RNb2RlKSB7CisgICAgICAgIHB1
dERpcmVjdEFjY2Vzc29yKGV4ZWMsIHZtLnByb3BlcnR5TmFtZXMtPmNhbGxlZSwgZ2xvYmFsT2Jq
ZWN0KCktPnRocm93VHlwZUVycm9yR2V0dGVyU2V0dGVyKHZtKSwgRG9udERlbGV0ZSB8IERvbnRF
bnVtIHwgQWNjZXNzb3IpOworICAgICAgICBwdXREaXJlY3RBY2Nlc3NvcihleGVjLCB2bS5wcm9w
ZXJ0eU5hbWVzLT5jYWxsZWUsIGdsb2JhbE9iamVjdCgpLT50aHJvd1R5cGVFcnJvckdldHRlclNl
dHRlcih2bSksIERvbnREZWxldGUgfCBEb250RW51bSB8IEFjY2Vzc29yKTsKKyAgICB9IGVsc2UK
KyAgICAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5jYWxsZWUsIEpTVmFsdWUo
bV9jYWxsZWUuZ2V0KCkpKTsKKyAgICAKKyAgICBtX2NhbGxlZS5jbGVhcigpOworfQorCit2b2lk
IE91dE9mQmFuZEFyZ3VtZW50czo6bWF0ZXJpYWxpemVTcGVjaWFsc0lmTmVjZXNzYXJ5KEV4ZWNT
dGF0ZSogZXhlYykKK3sKKyAgICBpZiAoIXNwZWNpYWxzTWF0ZXJpYWxpemVkKCkpCisgICAgICAg
IG1hdGVyaWFsaXplU3BlY2lhbHMoZXhlYyk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PdXRPZkJhbmRBcmd1bWVudHMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PdXRPZkJhbmRBcmd1
bWVudHMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL091
dE9mQmFuZEFyZ3VtZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzcgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBPdXRPZkJh
bmRBcmd1bWVudHNfaAorI2RlZmluZSBPdXRPZkJhbmRBcmd1bWVudHNfaAorCisjaW5jbHVkZSAi
QXJndW1lbnRzTW9kZS5oIgorI2luY2x1ZGUgIkpTT2JqZWN0LmgiCisKK25hbWVzcGFjZSBKU0Mg
eworCisvLyBUaGlzIGlzIGFuIEFyZ3VtZW50cy1jbGFzcyBvYmplY3QgdGhhdCB3ZSBjcmVhdGUg
d2hlbiB5b3UgZG8gZnVuY3Rpb24uYXJndW1lbnRzLCBvciB5b3Ugc2F5CisvLyAiYXJndW1lbnRz
IiBpbnNpZGUgYSBmdW5jdGlvbiBpbiBzdHJpY3QgbW9kZS4gSXQgYmVoYXZlcyBhbG1wc3QgZW50
aXJlbHkgbGlrZSBhbiBvcmRpbmFyeQorLy8gSmF2YVNjcmlwdCBvYmplY3QuIEFsbCBvZiB0aGUg
YXJndW1lbnRzIHZhbHVlcyBhcmUgc2ltcGx5IGNvcGllZCBmcm9tIHRoZSBzdGFjayAocG9zc2li
bHkgdmlhCisvLyBzb21lIHNvcGhpc3RpY2F0ZWQgVmFsdWVSZWNvdmVyeSdzIGlmIGFuIG9wdGlt
aXppbmcgY29tcGlsZXIgaXMgaW4gcGxheSkgYW5kIHRoZSBhcHByb3ByaWF0ZQorLy8gcHJvcGVy
dGllcyBvZiB0aGUgb2JqZWN0IGFyZSBwb3B1bGF0ZWQuIFRoZSBvbmx5IHJlYXNvbiB3aHkgd2Ug
bmVlZCBhIHNwZWNpYWwgY2xhc3MgaXMgdG8gbWFrZQorLy8gdGhlIG9iamVjdCBjbGFpbSB0byBi
ZSAiQXJndW1lbnRzIiBmcm9tIGEgdG9TdHJpbmcgc3RhbmRwb2ludCwgYW5kIHRvIGF2b2lkIG1h
dGVyaWFsaXppbmcgdGhlCisvLyBjYWxsZXIvY2FsbGVlIHByb3BlcnRpZXMgdW5sZXNzIHNvbWVv
bmUgYXNrcyBmb3IgdGhlbS4KK2NsYXNzIE91dE9mQmFuZEFyZ3VtZW50cyA6IHB1YmxpYyBKU05v
bkZpbmFsT2JqZWN0IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTTm9uRmluYWxPYmplY3QgQmFz
ZTsKKyAgICAKK3ByaXZhdGU6CisgICAgT3V0T2ZCYW5kQXJndW1lbnRzKFZNJiwgU3RydWN0dXJl
Kik7CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgT3V0T2ZCYW5kQXJndW1lbnRzKiBjcmVhdGVFbXB0
eShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNGdW5jdGlvbiogY2FsbGVlKTsKKyAgICBzdGF0aWMg
T3V0T2ZCYW5kQXJndW1lbnRzKiBjcmVhdGVFbXB0eShFeGVjU3RhdGUqLCBKU0Z1bmN0aW9uKiBj
YWxsZWUpOworICAgIHN0YXRpYyBPdXRPZkJhbmRBcmd1bWVudHMqIGNyZWF0ZVdpdGhJbmxpbmVG
cmFtZShFeGVjU3RhdGUqIG15RnJhbWUsIEV4ZWNTdGF0ZSogdGFyZ2V0RnJhbWUsIElubGluZUNh
bGxGcmFtZSosIEFyZ3VtZW50c01vZGUpOworICAgIHN0YXRpYyBPdXRPZkJhbmRBcmd1bWVudHMq
IGNyZWF0ZVdpdGhNYWNoaW5lRnJhbWUoRXhlY1N0YXRlKiBteUZyYW1lLCBFeGVjU3RhdGUqIHRh
cmdldEZyYW1lLCBBcmd1bWVudHNNb2RlKTsKKyAgICAKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBj
cmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlKTsK
KworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRlc0dl
dE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMgfCBKU09iamVjdDo6
U3RydWN0dXJlRmxhZ3M7CisKKyAgICBERUNMQVJFX0lORk87CisKK3ByaXZhdGU6CisgICAgc3Rh
dGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVy
dHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5h
bWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlv
bk1vZGUpOworICAgIHN0YXRpYyB2b2lkIHB1dChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0
eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyB2b2lkIGRlbGV0
ZVByb3BlcnR5KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSk7CisgICAgc3RhdGlj
IHZvaWQgZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5h
bWUsIGNvbnN0IFByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgc2hvdWxkVGhyb3cpOworICAgIAor
ICAgIGJvb2wgc3BlY2lhbHNNYXRlcmlhbGl6ZWQoKSBjb25zdCB7IHJldHVybiAhbV9jYWxsZWU7
IH0KKyAgICB2b2lkIG1hdGVyaWFsaXplU3BlY2lhbHMoRXhlY1N0YXRlKik7CisgICAgdm9pZCBt
YXRlcmlhbGl6ZVNwZWNpYWxzSWZOZWNlc3NhcnkoRXhlY1N0YXRlKik7CisgICAgCisgICAgV3Jp
dGVCYXJyaWVyPEpTRnVuY3Rpb24qPiBtX2NhbGxlZTsgLy8gU2V0IHRvIG51bGxwdHIgd2hlbiB3
ZSBtYXRlcmlhbGl6ZSBhbGwgb2Ygb3VyIHNwZWNpYWwgcHJvcGVydGllcy4KK307CisKK30gLy8g
bmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gT3V0T2ZCYW5kQXJndW1lbnRzX2gKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVPZmZzZXQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlT2Zmc2V0LmNwcAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlT2Zmc2V0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTY29w
ZU9mZnNldC5oIgorCituYW1lc3BhY2UgSlNDIHsKKwordm9pZCBTY29wZU9mZnNldDo6ZHVtcChQ
cmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIGlmICghKnRoaXMpIHsKKyAgICAgICAgb3V0
LnByaW50KCJzY29wZUludmFsaWQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAg
ICBvdXQucHJpbnQoInNjb3BlIiwgb2Zmc2V0KCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVPZmZzZXQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZU9mZnNldC5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVPZmZzZXQu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgU2NvcGVPZmZzZXRfaAorI2RlZmluZSBT
Y29wZU9mZnNldF9oCisKKyNpbmNsdWRlICJHZW5lcmljT2Zmc2V0LmgiCisjaW5jbHVkZSA8d3Rm
L1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBKU0MgeworCisvLyBUaGlzIGlzIGFuIG9mZnNl
dCBpbnRvIGEgc2NvcGUgb2Ygc29tZSBraW5kLiBJdCBjb3VsZCBiZSBhbiBhY3RpdmF0aW9uIHNj
b3BlIG9yIGl0IGNvdWxkIGJlIGEKKy8vIGdsb2JhbCBvYmplY3QuCitjbGFzcyBTY29wZU9mZnNl
dCA6IHB1YmxpYyBHZW5lcmljT2Zmc2V0PFNjb3BlT2Zmc2V0PiB7CitwdWJsaWM6CisgICAgU2Nv
cGVPZmZzZXQoKSB7IH0KKyAgICAKKyAgICBleHBsaWNpdCBTY29wZU9mZnNldCh1bnNpZ25lZCBv
ZmZzZXQpCisgICAgICAgIDogR2VuZXJpY09mZnNldChvZmZzZXQpCisgICAgeworICAgIH0KKyAg
ICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKK307CisKK30gLy8gbmFtZXNw
YWNlIEpTQworCisjZW5kaWYgLy8gU2NvcGVPZmZzZXRfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50cy5jcHAJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTY29w
ZWRBcmd1bWVudHMuaCIKKworI2luY2x1ZGUgIkdlbmVyaWNBcmd1bWVudHNJbmxpbmVzLmgiCisj
aW5jbHVkZSAiSlNBcmd1bWVudHNJdGVyYXRvci5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIK
KworbmFtZXNwYWNlIEpTQyB7CisKK1NUQVRJQ19BU1NFUlRfSVNfVFJJVklBTExZX0RFU1RSVUNU
SUJMRShTY29wZWRBcmd1bWVudHMpOworCitjb25zdCBDbGFzc0luZm8gU2NvcGVkQXJndW1lbnRz
OjpzX2luZm8gPSB7ICJBcmd1bWVudHMiLCAmQmFzZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9E
X1RBQkxFKFNjb3BlZEFyZ3VtZW50cykgfTsKKworU2NvcGVkQXJndW1lbnRzOjpTY29wZWRBcmd1
bWVudHMoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICA6IEdlbmVyaWNBcmd1bWVu
dHModm0sIHN0cnVjdHVyZSkKKyAgICAsIG1fb3ZlcnJvZGVUaGluZ3MoZmFsc2UpCit7Cit9CisK
K3ZvaWQgU2NvcGVkQXJndW1lbnRzOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIEpTRnVuY3Rpb24q
IGNhbGxlZSwgU2NvcGVkQXJndW1lbnRzVGFibGUqIHRhYmxlLCBKU0xleGljYWxFbnZpcm9ubWVu
dCogc2NvcGUpCit7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOworICAgIG1fY2FsbGVl
LnNldCh2bSwgdGhpcywgY2FsbGVlKTsKKyAgICBtX3RhYmxlLnNldCh2bSwgdGhpcywgdGFibGUp
OworICAgIG1fc2NvcGUuc2V0KHZtLCB0aGlzLCBzY29wZSk7Cit9CisKK1Njb3BlZEFyZ3VtZW50
cyogU2NvcGVkQXJndW1lbnRzOjpjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
SlNGdW5jdGlvbiogY2FsbGVlLCBTY29wZWRBcmd1bWVudHNUYWJsZSogdGFibGUsIEpTTGV4aWNh
bEVudmlyb25tZW50KiBzY29wZSkKK3sKKyAgICBTY29wZWRBcmd1bWVudHMqIHJlc3VsdCA9Cisg
ICAgICAgIG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFNjb3BlZEFyZ3VtZW50cz4odm0uaGVh
cCkpCisgICAgICAgICh2bSwgc3RydWN0dXJlKTsKKyAgICByZXN1bHQtPmZpbmlzaENyZWF0aW9u
KHZtLCBjYWxsZWUsIHRhYmxlLCBzY29wZSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9p
ZCBTY29wZWRBcmd1bWVudHM6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRv
ciYgdmlzaXRvcikKK3sKKyAgICBTY29wZWRBcmd1bWVudHMqIHRoaXNPYmplY3QgPSBzdGF0aWNf
Y2FzdDxTY29wZWRBcmd1bWVudHMqPihjZWxsKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVS
SVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CisgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2Jq
ZWN0LCB2aXNpdG9yKTsKKworICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX2NhbGxl
ZSk7CisgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fdGFibGUpOworICAgIHZpc2l0
b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX3Njb3BlKTsKK30KKworU3RydWN0dXJlKiBTY29wZWRB
cmd1bWVudHM6OmNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQoreworICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0
ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKFNjb3BlZEFyZ3VtZW50c1R5
cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKK30KKwordm9pZCBTY29wZWRBcmd1bWVudHM6
OnNsb3dEb3duQW5kV2FzdGVNZW1vcnkoVk0mIHZtKQoreworICAgIFJFTEVBU0VfQVNTRVJUKCFt
X292ZXJyb2RlVGhpbmdzKTsKKyAgICAKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFt
ZXMtPmxlbmd0aCwganNOdW1iZXIobV90YWJsZS0+bGVuZ3RoKCkpLCBEb250RW51bSk7CisgICAg
cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5jYWxsZWUsIG1fY2FsbGVlLmdldCgpLCBE
b250RW51bSk7CisgICAgCisgICAgbV9vdmVycm9kZVRoaW5ncyA9IHRydWU7Cit9CisKK3ZvaWQg
U2NvcGVkQXJndW1lbnRzOjpzbG93RG93bkFuZFdhc3RlTWVtb3J5SWZOZWNlc3NhcnkoVk0mIHZt
KQoreworICAgIGlmICghbV9vdmVycm9kZVRoaW5ncykKKyAgICAgICAgc2xvd0Rvd25BbmRXYXN0
ZU1lbW9yeSh2bSk7Cit9CisKK3ZvaWQgU2NvcGVkQXJndW1lbnRzOjpvdmVycmlkZUFyZ3VtZW50
KFZNJiB2bSwgdWludDMyX3QgaSkKK3sKKyAgICBtX3RhYmxlLnNldCh2bSwgdGhpcywgbV90YWJs
ZS0+c2V0KHZtLCBpLCBTY29wZU9mZnNldCgpKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVu
dHMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3Bl
ZEFyZ3VtZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTEyIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgU2NvcGVkQXJndW1l
bnRzX2gKKyNkZWZpbmUgU2NvcGVkQXJndW1lbnRzX2gKKworI2luY2x1ZGUgIkdlbmVyaWNBcmd1
bWVudHMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKKy8vIFRoaXMgaXMgYW4gQXJndW1lbnRzLWNs
YXNzIG9iamVjdCB0aGF0IHdlIGNyZWF0ZSB3aGVuIHlvdSBzYXkgImFyZ3VtZW50cyIgaW5zaWRl
IGEgZnVuY3Rpb24sCisvLyBhbmQgb25lIG9yIG1vcmUgb2YgdGhlIGFyZ3VtZW50cyBtYXkgYmUg
Y2FwdHVyZWQgaW4gdGhlIGZ1bmN0aW9uJ3MgYWN0aXZhdGlvbi4gVGhlIGZ1bmN0aW9uCisvLyB3
aWxsIGNvcHkgYWxsIG9mIGl0cyBhcmd1bWVudHMgaW50byB0aGUgYWN0aXZhdGlvbiBhbmQgdGhl
biBjcmVhdGUgdGhpcyBvYmplY3QuIFRoaXMgb2JqZWN0CisvLyB3aWxsIHVzZSB0aGUgc3ltYm9s
IHRhYmxlJ3MgU2NvcGVkQXJndW1lbnRzVGFibGUgYW5kIHRoZSBhY3RpdmF0aW9uIHRvIGhhbmRs
ZSBhbGwgaW5kZXhlZAorLy8gbG9va3Vwcy4KK2NsYXNzIFNjb3BlZEFyZ3VtZW50cyA6IHB1Ymxp
YyBHZW5lcmljQXJndW1lbnRzPFNjb3BlZEFyZ3VtZW50cz4geworcHJpdmF0ZToKKyAgICBTY29w
ZWRBcmd1bWVudHMoVk0mLCBTdHJ1Y3R1cmUqKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZN
JiwgSlNGdW5jdGlvbiogY2FsbGVlLCBTY29wZWRBcmd1bWVudHNUYWJsZSosIEpTTGV4aWNhbEVu
dmlyb25tZW50Kik7CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgU2NvcGVkQXJndW1lbnRzKiBjcmVh
dGUoVk0mLCBTdHJ1Y3R1cmUqLCBKU0Z1bmN0aW9uKiBjYWxsZWUsIFNjb3BlZEFyZ3VtZW50c1Rh
YmxlKiwgSlNMZXhpY2FsRW52aXJvbm1lbnQqKTsKKyAgICAKKyAgICBzdGF0aWMgdm9pZCB2aXNp
dENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgCisgICAgdWludDMyX3QgaW50
ZXJuYWxMZW5ndGgoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdGFibGUtPmxlbmd0
aCgpOworICAgIH0KKyAgICAKKyAgICB1aW50MzJfdCBsZW5ndGgoRXhlY1N0YXRlKiBleGVjKSBj
b25zdAorICAgIHsKKyAgICAgICAgaWYgKFVOTElLRUxZKG1fb3ZlcnJvZGVMZW5ndGgpKQorICAg
ICAgICAgICAgcmV0dXJuIGdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKS50
b1VJbnQzMihleGVjKTsKKyAgICAgICAgcmV0dXJuIGludGVybmFsTGVuZ3RoKCk7CisgICAgfQor
ICAgIAorICAgIGJvb2wgY2FuQWNjZXNzSW5kZXhRdWlja2x5KHVpbnQzMl90IGkpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gaSA8IG1fbGVuZ3RoICYmICEhbV90YWJsZS0+Z2V0KGkpOwor
ICAgIH0KKyAgICAKKyAgICBKU1ZhbHVlIGdldEluZGV4UXVpY2tseSh1aW50MzJfdCBpKSBjb25z
dAorICAgIHsKKyAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oY2FuQWNj
ZXNzSW5kZXhRdWlja2x5KGkpKTsKKyAgICAgICAgcmV0dXJuIG1fc2NvcGUtPnZhcmlhYmxlQXQo
bV90YWJsZS0+Z2V0KGkpKS5nZXQoKTsKKyAgICB9CisKKyAgICB2b2lkIHNldEluZGV4UXVpY2ts
eShWTSYgdm0sIHVpbnQzMl90IGksIEpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBBU1NF
UlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihjYW5BY2Nlc3NJbmRleFF1aWNrbHkoaSkpOwor
ICAgICAgICByZXR1cm4gbV9zY29wZS0+dmFyaWFibGVBdChtX3RhYmxlLT5nZXQoaSkpLmdldCgp
OworICAgIH0KKworICAgIFdyaXRlQmFycmllcjxKU0Z1bmN0aW9uPiYgY2FsbGVlKCkKKyAgICB7
CisgICAgICAgIHJldHVybiBtX2NhbGxlZTsKKyAgICB9CisgICAgCisgICAgV3JpdGVCYXJyaWVy
PFVua25vd24+JiBhcmd1bWVudChDYXB0dXJlZEFyZ3VtZW50c09mZnNldCBvZmZzZXQpCisgICAg
eworICAgICAgICBBU1NFUlQob2Zmc2V0KTsKKyAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlf
SU1QTElDQVRJT04ob2Zmc2V0Lm9mZnNldCgpIDwgbV9sZW5ndGgpOworICAgICAgICByZXR1cm4g
c3RvcmFnZSgpW29mZnNldC5vZmZzZXQoKV07CisgICAgfQorICAgIAorICAgIGJvb2wgb3ZlcnJv
ZGVUaGluZ3MoKSBjb25zdCB7IHJldHVybiBtX292ZXJyb2RlVGhpbmdzOyB9CisgICAgdm9pZCBz
bG93RG93bkFuZFdhc3RlTWVtb3J5KFZNJik7CisgICAgdm9pZCBzbG93RG93bkFuZFdhc3RlTWVt
b3J5SWZOZWNlc3NhcnkoVk0mKTsKKyAgICB2b2lkIG92ZXJyaWRlQXJndW1lbnQoVk0mIHZtLCB1
aW50MzJfdCBpKTsKKyAgICAKKyAgICBERUNMQVJFX0lORk87CisgICAgCisgICAgc3RhdGljIFN0
cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHBy
b3RvdHlwZSk7CisgICAgCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlRhYmxlKCkgeyBy
ZXR1cm4gT0JKRUNUX09GRlNFVE9GKFNjb3BlZEFyZ3VtZW50cywgbV90YWJsZSk7IH0KKyAgICBz
dGF0aWMgcHRyZGlmZl90IG9mZnNldE9mU2NvcGUoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0Yo
U2NvcGVkQXJndW1lbnRzLCBtX3Njb3BlKTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0
T2ZPdmVycm9kZVRoaW5ncygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihTY29wZWRBcmd1bWVu
dHMsIG1fb3ZlcnJvZGVUaGluZ3MpOyB9CisKK3ByaXZhdGU6CisgICAgYm9vbCBtX292ZXJyb2Rl
VGhpbmdzOyAvLyBUcnVlIGlmIGxlbmd0aCwgY2FsbGVlLCBhbmQgY2FsbGVyIGFyZSBmdWxseSBt
YXRlcmlhbGl6ZWQgaW4gdGhlIG9iamVjdC4KKyAgICBXcml0ZUJhcnJpZXI8SlNGdW5jdGlvbio+
IG1fY2FsbGVlOworICAgIFdyaXRlQmFycmllcjxTY29wZWRBcmd1bWVudHNUYWJsZT4gbV90YWJs
ZTsKKyAgICBXcml0ZUJhcnJpZXI8SlNMZXhpY2FsRW52aXJvbm1lbnQ+IG1fc2NvcGU7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIFNjb3BlZEFyZ3VtZW50c19oCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50c1RhYmxlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1l
bnRzVGFibGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1Njb3BlZEFyZ3VtZW50c1RhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5NCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFNj
b3BlZEFyZ3VtZW50c1RhYmxlX2gKKyNkZWZpbmUgU2NvcGVkQXJndW1lbnRzVGFibGVfaAorCisj
aW5jbHVkZSAiSlNDZWxsLmgiCisKK25hbWVzcGFjZSBKU0MgeworCisvLyBUaGlzIGNsYXNzJ3Mg
b25seSBqb2IgaXMgdG8gaG9sZCBvbnRvIHRoZSBsaXN0IG9mIFNjb3BlT2Zmc2V0cyBmb3IgZWFj
aCBhcmd1bWVudCB0aGF0IGEKKy8vIGZ1bmN0aW9uIGhhcy4gTW9zdCBvZiB0aGUgdGltZSwgdGhl
IEJ5dGVjb2RlR2VuZXJhdG9yIHdpbGwgY3JlYXRlIG9uZSBvZiB0aGVzZSBhbmQgaXQgd2lsbAor
Ly8gbmV2ZXIgYmUgbW9kaWZpZWQgc3Vic2VxdWVudGx5LiBUaGVyZSBpcyBhIHJhcmUgY2FzZSB3
aGVyZSBhIFNjb3BlZEFyZ3VtZW50cyBvYmplY3QgaXMgY3JlYXRlZAorLy8gYW5kIGFsaWFzZXMg
b25lIG9mIHRoZXNlIGFuZCB0aGVuIGRlY2lkZXMgdG8gbW9kaWZ5IGl0OyBpbiB0aGF0IGNhc2Ug
d2UgZG8gY29weS1vbi13cml0ZS4gVGhpcworLy8gbWFrZXMgc2Vuc2UgYmVjYXVzZSBzdWNoIG1v
ZGlmaWNhdGlvbnMgYXJlIHNvIHVuY29tbW9uLiBZb3UnZCBoYXZlIHRvIGRvIHNvbWV0aGluZyBj
cmF6eSBsaWtlCisvLyAiZGVsZXRlIGFyZ3VtZW50c1tpXSIgb3Igc29tZSB2YXJpYW50IG9mIGRl
ZmluZU93blByb3BlcnR5LgorY2xhc3MgU2NvcGVkQXJndW1lbnRzIDogcHVibGljIEpTQ2VsbCB7
CitwdWJsaWM6CisgICAgdHlwZWRlZiBKU0NlbGwgQmFzZTsKKyAgICAKKyAgICBzdGF0aWMgY29u
c3QgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBo
YXNJbW1vcnRhbFN0cnVjdHVyZSA9IHRydWU7CisKK3ByaXZhdGU6CisgICAgU2NvcGVkQXJndW1l
bnRzVGFibGUoVk0mKTsKKyAgICB+U2NvcGVkQXJndW1lbnRzVGFibGUoKTsKKworcHVibGljOgor
ICAgIHN0YXRpYyBTY29wZWRBcmd1bWVudHNUYWJsZSogY3JlYXRlKFZNJik7CisgICAgCisgICAg
U2NvcGVkQXJndW1lbnRzKiBjbG9uZShWTSYpOworICAgIAorICAgIHVpbnQzMl90IGxlbmd0aCgp
IGNvbnN0IHsgcmV0dXJuIG1fbGVuZ3RoOyB9CisgICAgU2NvcGVkQXJndW1lbnRzVGFibGUqIHNl
dExlbmd0aChWTSYsIHVpbnQzMl90IG5ld0xlbmd0aCk7CisgICAgCisgICAgU2NvcGVPZmZzZXQg
Z2V0KHVpbnQzMl90IGkpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklU
WV9JTVBMSUNBVElPTihpIDwgbV9sZW5ndGgpOworICAgICAgICByZXR1cm4gbV9hcmd1bWVudHNb
aV07CisgICAgfQorICAgIAorICAgIHZvaWQgbG9jaygpCisgICAgeworICAgICAgICBtX2xvY2tl
ZCA9IHRydWU7CisgICAgfQorICAgIAorICAgIFNjb3BlZEFyZ3VtZW50cyogc2V0KFZNJiB2bSwg
dWludDMyX3QgaSwgU2NvcGVPZmZzZXQgdmFsdWUpCisgICAgeworICAgICAgICBTY29wZWRBcmd1
bWVudHMqIHJlc3VsdDsKKyAgICAgICAgaWYgKFVOTElLRUxZKG1fbG9ja2VkKSkKKyAgICAgICAg
ICAgIHJlc3VsdCA9IGNsb25lKHZtKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmVzdWx0
ID0gdGhpczsKKyAgICAgICAgcmVzdWx0LT5zZXREaXJlY3QoaSwgdmFsdWUpOworICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBERUNMQVJFX0lORk87CisgICAgCisgICAg
c3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkxlbmd0aCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRP
RihTY29wZWRBcmd1bWVudHMsIG1fbGVuZ3RoKTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zm
c2V0T2ZBcmd1bWVudHMoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoU2NvcGVkQXJndW1lbnRz
LCBtX2FyZ3VtZW50cyk7IH0KKworcHJpdmF0ZToKKyAgICB1aW50MzJfdCBtX2xlbmd0aDsKKyAg
ICBib29sIG1fbG9ja2VkOyAvLyBCZWluZyBsb2NrZWQgbWVhbnMgdGhhdCB0aGVyZSBhcmUgbXVs
dGlwbGUgcmVmZXJlbmNlcyB0byB0aGlzIG9iamVjdCBhbmQgbm9uZSBvZiB0aGVtIGV4cGVjdCB0
byBzZWUgdGhlIG90aGVycycgbW9kaWZpY2F0aW9ucy4gVGhpcyBtZWFucyB0aGF0IG1vZGlmaWNh
dGlvbnMgbmVlZCB0byBtYWtlIGEgY29weSBmaXJzdC4KKyAgICBzdGQ6OnVuaXF1ZV9wdHI8U2Nv
cGVPZmZzZXRbXT4gbV9hcmd1bWVudHM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2Vu
ZGlmIC8vIFNjb3BlZEFyZ3VtZW50c1RhYmxlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmNwcAkocmV2aXNpb24gMTgwNzIwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxNCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTQsIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0xMzcsMjkgKzEzNywyMiBAQCB2b2lkIFN5bWJvbFRhYmxlOjpXYXRjaHBv
aW50Q2xlYW51cDo6ZmluCiAgICAgfQogfQogCi1TeW1ib2xUYWJsZSogU3ltYm9sVGFibGU6OmNs
b25lQ2FwdHVyZWROYW1lcyhWTSYgdm0pCitTeW1ib2xUYWJsZSogU3ltYm9sVGFibGU6OmNsb25l
U2NvcGVQYXJ0KFZNJiB2bSkKIHsKICAgICBTeW1ib2xUYWJsZSogcmVzdWx0ID0gU3ltYm9sVGFi
bGU6OmNyZWF0ZSh2bSk7CiAgICAgCi0gICAgcmVzdWx0LT5tX3BhcmFtZXRlckNvdW50SW5jbHVk
aW5nVGhpcyA9IG1fcGFyYW1ldGVyQ291bnRJbmNsdWRpbmdUaGlzOwogICAgIHJlc3VsdC0+bV91
c2VzTm9uU3RyaWN0RXZhbCA9IG1fdXNlc05vblN0cmljdEV2YWw7Ci0gICAgcmVzdWx0LT5tX2Nh
cHR1cmVTdGFydCA9IG1fY2FwdHVyZVN0YXJ0OwotICAgIHJlc3VsdC0+bV9jYXB0dXJlRW5kID0g
bV9jYXB0dXJlRW5kOwogCiAgICAgZm9yIChhdXRvIGl0ZXIgPSBtX21hcC5iZWdpbigpLCBlbmQg
PSBtX21hcC5lbmQoKTsgaXRlciAhPSBlbmQ7ICsraXRlcikgewotICAgICAgICBpZiAoIWlzQ2Fw
dHVyZWQoaXRlci0+dmFsdWUuZ2V0SW5kZXgoKSkpCisgICAgICAgIGlmICghaXRlci0+dmFsdWUu
dmFyT2Zmc2V0KCkuaXNTY29wZSgpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIHJl
c3VsdC0+bV9tYXAuYWRkKAogICAgICAgICAgICAgaXRlci0+a2V5LAotICAgICAgICAgICAgU3lt
Ym9sVGFibGVFbnRyeShpdGVyLT52YWx1ZS5nZXRJbmRleCgpLCBpdGVyLT52YWx1ZS5nZXRBdHRy
aWJ1dGVzKCkpKTsKKyAgICAgICAgICAgIFN5bWJvbFRhYmxlRW50cnkoaXRlci0+dmFsdWUudmFy
T2Zmc2V0KCksIGl0ZXItPnZhbHVlLmdldEF0dHJpYnV0ZXMoKSkpOwogICAgIH0KICAgICAKLSAg
ICBpZiAobV9zbG93QXJndW1lbnRzKSB7Ci0gICAgICAgIHJlc3VsdC0+bV9zbG93QXJndW1lbnRz
ID0gc3RkOjptYWtlX3VuaXF1ZTxTbG93QXJndW1lbnRbXT4ocGFyYW1ldGVyQ291bnQoKSk7Ci0g
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IHBhcmFtZXRlckNvdW50KCk7IGktLTspCi0gICAgICAg
ICAgICByZXN1bHQtPm1fc2xvd0FyZ3VtZW50c1tpXSA9IG1fc2xvd0FyZ3VtZW50c1tpXTsKLSAg
ICB9Ci0KKyAgICByZXN1bHQtPm1fYXJndW1lbnRzID0gYXJndW1lbnRzKCk7CisgICAgCiAgICAg
aWYgKG1fdHlwZVByb2ZpbGluZ1JhcmVEYXRhKSB7CiAgICAgICAgIHJlc3VsdC0+bV90eXBlUHJv
ZmlsaW5nUmFyZURhdGEgPSBzdGQ6Om1ha2VfdW5pcXVlPFR5cGVQcm9maWxpbmdSYXJlRGF0YT4o
KTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5o
CShyZXZpc2lvbiAxODA3MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1i
b2xUYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwNywgMjAwOCwgMjAxMi0yMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAxMi0yMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzEs
NiArMzEsNyBAQAogCiAjaW5jbHVkZSAiQ29uY3VycmVudEpJVExvY2suaCIKICNpbmNsdWRlICJK
U09iamVjdC5oIgorI2luY2x1ZGUgIlNjb3BlZEFyZ3VtZW50c1RhYmxlLmgiCiAjaW5jbHVkZSAi
VHlwZUxvY2F0aW9uLmgiCiAjaW5jbHVkZSAiVmFyaWFibGVXYXRjaHBvaW50U2V0LmgiCiAjaW5j
bHVkZSA8bWVtb3J5PgpAQCAtMzksMjQgKzQwLDYgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLXN0
cnVjdCBTbG93QXJndW1lbnQgewotcHVibGljOgotICAgIGVudW0gU3RhdHVzIHsKLSAgICAgICAg
Tm9ybWFsID0gMCwKLSAgICAgICAgQ2FwdHVyZWQgPSAxLAotICAgICAgICBEZWxldGVkID0gMgot
ICAgIH07Ci0KLSAgICBTbG93QXJndW1lbnQoKQotICAgICAgICA6IHN0YXR1cyhOb3JtYWwpCi0g
ICAgICAgICwgaW5kZXgoMCkKLSAgICB7Ci0gICAgfQotCi0gICAgU3RhdHVzIHN0YXR1czsKLSAg
ICBpbnQgaW5kZXg7IC8vIElmIHN0YXR1cyBpcyAnRGVsZXRlZCcsIGluZGV4IGlzIGJvZ3VzLgot
fTsKLQogc3RhdGljIEFMV0FZU19JTkxJTkUgaW50IG1pc3NpbmdTeW1ib2xNYXJrZXIoKSB7IHJl
dHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpOyB9CiAKIC8vIFRoZSBiaXQgdHdp
ZGRsaW5nIGluIHRoaXMgY2xhc3MgYXNzdW1lcyB0aGF0IGV2ZXJ5IHJlZ2lzdGVyIGluZGV4IGlz
IGEKQEAgLTg2LDYgKzY5LDI4IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIGludCBtaXNzaW5nU3lt
Ym9sTWEKIC8vIGNvcHk6ICAgICBTeW1ib2xUYWJsZUVudHJ5IC0tPiBGYXRFbnRyeSAtLS0tLV4K
IAogc3RydWN0IFN5bWJvbFRhYmxlRW50cnkgeworcHJpdmF0ZToKKyAgICBzdGF0aWMgVmFyT2Zm
c2V0IHZhck9mZnNldEZyb21CaXRzKGludHB0cl90IGJpdHMpCisgICAgeworICAgICAgICBWYXJL
aW5kIGtpbmQ7CisgICAgICAgIGlmIChiaXRzICYgU3RhY2tGbGFnKQorICAgICAgICAgICAga2lu
ZCA9IFN0YWNrVmFyS2luZDsKKyAgICAgICAgZWxzZSBpZiAoYml0cyAmIENhcHR1cmVkQXJndW1l
bnRGbGFnKQorICAgICAgICAgICAga2luZCA9IENhcHR1cmVkQXJndW1lbnRLaW5kOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICBraW5kID0gU2NvcGVWYXJLaW5kOworICAgICAgICByZXR1cm4g
VmFyT2Zmc2V0Ojphc3NlbWJsZShraW5kLCBzdGF0aWNfY2FzdDxpbnQ+KGJpdHMgPj4gRmxhZ0Jp
dHMpKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIFNjb3BlT2Zmc2V0IHNjb3BlT2Zmc2V0RnJv
bUJpdHMoaW50cHRyX3QgYml0cykKKyAgICB7CisgICAgICAgIEFTU0VSVCghKGJpdHMgJiBTdGFj
a0ZsYWcpKTsKKyAgICAgICAgQVNTRVJUKCEoYml0cyAmIENhcHR1cmVkQXJndW1lbnRGbGFnKSk7
CisgICAgICAgIHJldHVybiBTY29wZU9mZnNldChzdGF0aWNfY2FzdDxpbnQ+KGJpdHMgPj4gRmxh
Z0JpdHMpKTsKKyAgICB9CisKK3B1YmxpYzoKKyAgICAKICAgICAvLyBVc2UgdGhlIFN5bWJvbFRh
YmxlRW50cnk6OkZhc3QgY2xhc3MsIGVpdGhlciB2aWEgaW1wbGljaXQgY2FzdCBvciBieSBjYWxs
aW5nCiAgICAgLy8gZ2V0RmFzdCgpLCB3aGVuIHlvdSAoMSkgb25seSBjYXJlIGFib3V0IGlzTnVs
bCgpLCBnZXRJbmRleCgpLCBhbmQgaXNSZWFkT25seSgpLAogICAgIC8vIGFuZCAoMikgeW91IGFy
ZSBpbiBhIGhvdCBwYXRoIHdoZXJlIHlvdSBuZWVkIHRvIG1pbmltaXplIHRoZSBudW1iZXIgb2Yg
dGltZXMKQEAgLTEwNywxMSArMTEyLDE5IEBAIHN0cnVjdCBTeW1ib2xUYWJsZUVudHJ5IHsKICAg
ICAgICAgICAgIHJldHVybiAhKG1fYml0cyAmIH5TbGltRmxhZyk7CiAgICAgICAgIH0KIAotICAg
ICAgICBpbnQgZ2V0SW5kZXgoKSBjb25zdAorICAgICAgICBWYXJPZmZzZXQgdmFyT2Zmc2V0KCkg
Y29uc3QKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4obV9i
aXRzID4+IEZsYWdCaXRzKTsKKyAgICAgICAgICAgIHJldHVybiB2YXJPZmZzZXRGcm9tQml0cyht
X2JpdHMpOwogICAgICAgICB9Ci0gICAgCisgICAgICAgIAorICAgICAgICAvLyBBc3NlcnRzIGlm
IHRoZSBvZmZzZXQgaXMgYW55dGhpbmcgYnV0IGEgc2NvcGUgb2Zmc2V0LiBUaGlzIHN0cnVjdHVy
ZXMgdGhlIGFzc2VydGlvbnMKKyAgICAgICAgLy8gaW4gYSB3YXkgdGhhdCBtYXkgcmVzdWx0IGlu
IGJldHRlciBjb2RlLCBldmVuIGluIHJlbGVhc2UsIHRoYW4gZG9pbmcKKyAgICAgICAgLy8gdmFy
T2Zmc2V0KCkuc2NvcGVPZmZzZXQoKS4KKyAgICAgICAgU2NvcGVPZmZzZXQgc2NvcGVPZmZzZXQo
KSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gc2NvcGVPZmZzZXRGcm9tQml0
cyhtX2JpdHMpOworICAgICAgICB9CisgICAgICAgIAogICAgICAgICBib29sIGlzUmVhZE9ubHko
KSBjb25zdAogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gbV9iaXRzICYgUmVhZE9ubHlG
bGFnOwpAQCAtMTQyLDE4ICsxNTUsMTggQEAgc3RydWN0IFN5bWJvbFRhYmxlRW50cnkgewogICAg
IHsKICAgICB9CiAKLSAgICBTeW1ib2xUYWJsZUVudHJ5KGludCBpbmRleCkKKyAgICBTeW1ib2xU
YWJsZUVudHJ5KFZhck9mZnNldCBvZmZzZXQpCiAgICAgICAgIDogbV9iaXRzKFNsaW1GbGFnKQog
ICAgIHsKLSAgICAgICAgQVNTRVJUKGlzVmFsaWRJbmRleChpbmRleCkpOwotICAgICAgICBwYWNr
KGluZGV4LCBmYWxzZSwgZmFsc2UpOworICAgICAgICBBU1NFUlQoaXNWYWxpZFZhck9mZnNldChv
ZmZzZXQpKTsKKyAgICAgICAgcGFjayhvZmZzZXQsIGZhbHNlLCBmYWxzZSk7CiAgICAgfQogCi0g
ICAgU3ltYm9sVGFibGVFbnRyeShpbnQgaW5kZXgsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCisgICAg
U3ltYm9sVGFibGVFbnRyeShWYXJPZmZzZXQgb2Zmc2V0LCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQog
ICAgICAgICA6IG1fYml0cyhTbGltRmxhZykKICAgICB7Ci0gICAgICAgIEFTU0VSVChpc1ZhbGlk
SW5kZXgoaW5kZXgpKTsKLSAgICAgICAgcGFjayhpbmRleCwgYXR0cmlidXRlcyAmIFJlYWRPbmx5
LCBhdHRyaWJ1dGVzICYgRG9udEVudW0pOworICAgICAgICBBU1NFUlQoaXNWYWxpZFZhck9mZnNl
dChvZmZzZXQpKTsKKyAgICAgICAgcGFjayhvZmZzZXQsIGF0dHJpYnV0ZXMgJiBSZWFkT25seSwg
YXR0cmlidXRlcyAmIERvbnRFbnVtKTsKICAgICB9CiAgICAgCiAgICAgflN5bWJvbFRhYmxlRW50
cnkoKQpAQCAtMTgxLDkgKzE5NCwxNyBAQCBzdHJ1Y3QgU3ltYm9sVGFibGVFbnRyeSB7CiAgICAg
ICAgIHJldHVybiAhKGJpdHMoKSAmIH5TbGltRmxhZyk7CiAgICAgfQogCi0gICAgaW50IGdldElu
ZGV4KCkgY29uc3QKKyAgICBWYXJPZmZzZXQgdmFyT2Zmc2V0KCkgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiB2YXJPZmZzZXRGcm9tQml0cyhiaXRzKCkpOworICAgIH0KKyAgICAKKyAgICAv
LyBBc3NlcnRzIGlmIHRoZSBvZmZzZXQgaXMgYW55dGhpbmcgYnV0IGEgc2NvcGUgb2Zmc2V0LiBU
aGlzIHN0cnVjdHVyZXMgdGhlIGFzc2VydGlvbnMKKyAgICAvLyBpbiBhIHdheSB0aGF0IG1heSBy
ZXN1bHQgaW4gYmV0dGVyIGNvZGUsIGV2ZW4gaW4gcmVsZWFzZSwgdGhhbiBkb2luZworICAgIC8v
IHZhck9mZnNldCgpLnNjb3BlT2Zmc2V0KCkuCisgICAgU2NvcGVPZmZzZXQgc2NvcGVPZmZzZXQo
KSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4oYml0cygpID4+
IEZsYWdCaXRzKTsKKyAgICAgICAgcmV0dXJuIHNjb3BlT2Zmc2V0RnJvbUJpdHMoYml0cygpKTsK
ICAgICB9CiAgICAgCiAgICAgQUxXQVlTX0lOTElORSBGYXN0IGdldEZhc3QoKSBjb25zdApAQCAt
MjA5LDcgKzIzMCw3IEBAIHN0cnVjdCBTeW1ib2xUYWJsZUVudHJ5IHsKIAogICAgIHZvaWQgc2V0
QXR0cmlidXRlcyh1bnNpZ25lZCBhdHRyaWJ1dGVzKQogICAgIHsKLSAgICAgICAgcGFjayhnZXRJ
bmRleCgpLCBhdHRyaWJ1dGVzICYgUmVhZE9ubHksIGF0dHJpYnV0ZXMgJiBEb250RW51bSk7Cisg
ICAgICAgIHBhY2sodmFyT2Zmc2V0KCksIGF0dHJpYnV0ZXMgJiBSZWFkT25seSwgYXR0cmlidXRl
cyAmIERvbnRFbnVtKTsKICAgICB9CiAKICAgICBib29sIGlzUmVhZE9ubHkoKSBjb25zdApAQCAt
MjQyLDcgKzI2Myw5IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIGNvbnN0IGludHB0cl90IFJlYWRP
bmx5RmxhZyA9IDB4MjsKICAgICBzdGF0aWMgY29uc3QgaW50cHRyX3QgRG9udEVudW1GbGFnID0g
MHg0OwogICAgIHN0YXRpYyBjb25zdCBpbnRwdHJfdCBOb3ROdWxsRmxhZyA9IDB4ODsKLSAgICBz
dGF0aWMgY29uc3QgaW50cHRyX3QgRmxhZ0JpdHMgPSA0OworICAgIHN0YXRpYyBjb25zdCBpbnRw
dHJfdCBTdGFja0ZsYWcgPSAweDEwOworICAgIHN0YXRpYyBjb25zdCBpbnRwdHJfdCBDYXB0dXJl
ZEFyZ3VtZW50RmxhZyA9IDB4MjA7CisgICAgc3RhdGljIGNvbnN0IGludHB0cl90IEZsYWdCaXRz
ID0gNjsKICAgICAKICAgICBjbGFzcyBGYXRFbnRyeSB7CiAgICAgICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOwpAQCAtMzA5LDIwICszMzIsMzQgQEAgcHJpdmF0ZToKIAogICAgIEpTX0VYUE9S
VF9QUklWQVRFIHZvaWQgZnJlZUZhdEVudHJ5U2xvdygpOwogCi0gICAgdm9pZCBwYWNrKGludCBp
bmRleCwgYm9vbCByZWFkT25seSwgYm9vbCBkb250RW51bSkKKyAgICB2b2lkIHBhY2soVmFyT2Zm
c2V0IG9mZnNldCwgYm9vbCByZWFkT25seSwgYm9vbCBkb250RW51bSkKICAgICB7CiAgICAgICAg
IEFTU0VSVCghaXNGYXQoKSk7CiAgICAgICAgIGludHB0cl90JiBiaXRzUmVmID0gYml0cygpOwot
ICAgICAgICBiaXRzUmVmID0gKHN0YXRpY19jYXN0PGludHB0cl90PihpbmRleCkgPDwgRmxhZ0Jp
dHMpIHwgTm90TnVsbEZsYWcgfCBTbGltRmxhZzsKKyAgICAgICAgYml0c1JlZiA9CisgICAgICAg
ICAgICAoc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KG9mZnNldC5yYXdPZmZzZXQoKSkgPDwgRmxhZ0Jp
dHMpIHwgTm90TnVsbEZsYWcgfCBTbGltRmxhZzsKICAgICAgICAgaWYgKHJlYWRPbmx5KQogICAg
ICAgICAgICAgYml0c1JlZiB8PSBSZWFkT25seUZsYWc7CiAgICAgICAgIGlmIChkb250RW51bSkK
ICAgICAgICAgICAgIGJpdHNSZWYgfD0gRG9udEVudW1GbGFnOworICAgICAgICBzd2l0Y2ggKG9m
ZnNldC5raW5kKCkpIHsKKyAgICAgICAgY2FzZSBTY29wZVZhcktpbmQ6CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBTdGFja1ZhcktpbmQ6CisgICAgICAgICAgICBiaXRzUmVmIHw9
IFN0YWNrRmxhZzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENhcHR1cmVkQXJn
dW1lbnRLaW5kOgorICAgICAgICAgICAgYml0c1JlZiB8PSBDYXB0dXJlZEFyZ3VtZW50RmxhZzsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAg
ICAgfQogICAgIAotICAgIGJvb2wgaXNWYWxpZEluZGV4KGludCBpbmRleCkKKyAgICBzdGF0aWMg
Ym9vbCBpc1ZhbGlkVmFyT2Zmc2V0KFZhck9mZnNldCBvZmZzZXQpCiAgICAgewotICAgICAgICBy
ZXR1cm4gKChzdGF0aWNfY2FzdDxpbnRwdHJfdD4oaW5kZXgpIDw8IEZsYWdCaXRzKSA+PiBGbGFn
Qml0cykgPT0gc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KGluZGV4KTsKKyAgICAgICAgcmV0dXJuICgo
c3RhdGljX2Nhc3Q8aW50cHRyX3Q+KG9mZnNldC5yYXdPZmZzZXQoKSkgPDwgRmxhZ0JpdHMpID4+
IEZsYWdCaXRzKSA9PSBzdGF0aWNfY2FzdDxpbnRwdHJfdD4ob2Zmc2V0LnJhd09mZnNldCgpKTsK
ICAgICB9CiAKICAgICBpbnRwdHJfdCBtX2JpdHM7CkBAIC0zNTEsNyArMzg4LDcgQEAgcHVibGlj
OgogICAgIHN0YXRpYyBTeW1ib2xUYWJsZSogY3JlYXRlTmFtZVNjb3BlVGFibGUoVk0mIHZtLCBj
b25zdCBJZGVudGlmaWVyJiBpZGVudCwgdW5zaWduZWQgYXR0cmlidXRlcykKICAgICB7CiAgICAg
ICAgIFN5bWJvbFRhYmxlKiByZXN1bHQgPSBjcmVhdGUodm0pOwotICAgICAgICByZXN1bHQtPmFk
ZChpZGVudC5pbXBsKCksIFN5bWJvbFRhYmxlRW50cnkoLTEsIGF0dHJpYnV0ZXMpKTsKKyAgICAg
ICAgcmVzdWx0LT5hZGQoaWRlbnQuaW1wbCgpLCBTeW1ib2xUYWJsZUVudHJ5KFZhck9mZnNldChT
Y29wZU9mZnNldCgwKSksIGF0dHJpYnV0ZXMpKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAg
ICB9CiAgICAgCkBAIC00MjMsOCArNDYwLDI5IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHNp
emUobG9ja2VyKTsKICAgICB9CiAgICAgCisgICAgU2NvcGVPZmZzZXQgbWF4U2NvcGVPZmZzZXQo
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbWF4U2NvcGVPZmZzZXQ7CisgICAgfQor
ICAgIAorICAgIHVuc2lnbmVkIHNjb3BlU2l6ZSgpIGNvbnN0CisgICAgeworICAgICAgICBTY29w
ZU9mZnNldCBtYXhTY29wZU9mZnNldCA9IHRoaXMtPm1heFNjb3BlT2Zmc2V0KCk7CisgICAgICAg
IAorICAgICAgICAvLyBEbyBzb21lIGNhbGN1bGF0aW9uIHRoYXQgcmVsaWVzIG9uIGludmFsaWQg
c2NvcGUgb2Zmc2V0IHBsdXMgb25lIGJlaW5nIHplcm8uCisgICAgICAgIHVuc2lnbmVkIGZhc3RS
ZXN1bHQgPSBtYXhTY29wZU9mZnNldC5vZmZzZXRVbmNoZWNrZWQoKSArIDE7CisgICAgICAgIAor
ICAgICAgICAvLyBBc3NlcnQgdGhhdCB0aGlzIHdvcmtzLgorICAgICAgICBBU1NFUlQoZmFzdFJl
c3VsdCA9PSAoIW1heFNjb3BlT2Zmc2V0ID8gMCA6IG1heFNjb3BlT2Zmc2V0Lm9mZnNldCgpICsg
MSkpOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIGZhc3RSZXN1bHQ7CisgICAgfQorICAgIAog
ICAgIE1hcDo6QWRkUmVzdWx0IGFkZChjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiwgU3RyaW5n
SW1wbCoga2V5LCBjb25zdCBTeW1ib2xUYWJsZUVudHJ5JiBlbnRyeSkKICAgICB7CisgICAgICAg
IGlmIChlbnRyeS52YXJPZmZzZXQoKS5pc1Njb3BlKCkKKyAgICAgICAgICAgICYmICghbV9tYXhT
Y29wZU9mZnNldCB8fCBtX21heFNjb3BlT2Zmc2V0IDwgZW50cnkuc2NvcGVPZmZzZXQoKSkpCisg
ICAgICAgICAgICBtX21heFNjb3BlT2Zmc2V0ID0gZW50cnkuc2NvcGVPZmZzZXQoKTsKICAgICAg
ICAgcmV0dXJuIG1fbWFwLmFkZChrZXksIGVudHJ5KTsKICAgICB9CiAgICAgCkBAIC00NTYsNiAr
NTE0LDQ1IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGNvbnRhaW5zKGxvY2tlciwga2V5KTsK
ICAgICB9CiAgICAgCisgICAgLy8gVGhlIHByaW5jaXBsZSBiZWhpbmQgU2NvcGVkQXJndW1lbnRz
VGFibGUgbW9kaWZpY2F0aW9ucyBpcyB0aGF0IHdlIHdpbGwgY3JlYXRlIG9uZSBhbmQKKyAgICAv
LyBsZWF2ZSBpdCB1bmxvY2tlZCAtIHRoZXJlYnkgYWxsb3dpbmcgaW4tcGxhY2UgY2hhbmdlcyAt
IHVudGlsIHNvbWVvbmUgYXNrcyBmb3IgYSBwb2ludGVyIHRvCisgICAgLy8gdGhlIHRhYmxlLiBU
aGVuLCB3ZSB3aWxsIGxvY2sgaXQuIFRoZW4gYm90aCBvdXIgZnV0dXJlIGNoYW5nZXMgYW5kIHRo
ZWlyIGZ1dHVyZSBjaGFuZ2VzCisgICAgLy8gd2lsbCBmaXJzdCBoYXZlIHRvIG1ha2UgYSBjb3B5
LiBUaGlzIGRpc2NpcGxpbmUgbWVhbnMgdGhhdCB1c3VhbGx5IHdoZW4gd2UgY3JlYXRlIGEKKyAg
ICAvLyBTY29wZWRBcmd1bWVudHMgb2JqZWN0LCB3ZSBkb24ndCBoYXZlIHRvIG1ha2UgYSBjb3B5
IG9mIHRoZSBTY29wZWRBcmd1bWVudHNUYWJsZSAtIGluc3RlYWQKKyAgICAvLyB3ZSBqdXN0IHRh
a2UgYSByZWZlcmVuY2UgdG8gb25lIHRoYXQgd2UgYWxyZWFkeSBoYXZlLgorICAgIAorICAgIHVp
bnQzMl90IGFyZ3VtZW50c0xlbmd0aCgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoIW1fYXJn
dW1lbnRzKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBtX2FyZ3VtZW50
cy0+bGVuZ3RoKCk7CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0QXJndW1lbnRzTGVuZ3RoKFZN
JiB2bSwgdWludDMyX3QgbGVuZ3RoKQorICAgIHsKKyAgICAgICAgaWYgKFVOTElLRUxZKCFtX2Fy
Z3VtZW50cykpCisgICAgICAgICAgICBtX2FyZ3VtZW50cy5zZXQodm0sIHRoaXMsIFNjb3BlZEFy
Z3VtZW50c1RhYmxlOjpjcmVhdGUodm0pKTsKKyAgICAgICAgbV9hcmd1bWVudHMuc2V0KHZtLCB0
aGlzLCBtX2FyZ3VtZW50cy0+c2V0TGVuZ3RoKHZtLCBsZW5ndGgpKTsKKyAgICB9CisgICAgCisg
ICAgU2NvcGVPZmZzZXQgYXJndW1lbnRPZmZzZXQodWludDMyX3QgaSkgY29uc3QKKyAgICB7Cisg
ICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKG1fYXJndW1lbnRzKTsKKyAg
ICAgICAgcmV0dXJuIG1fYXJndW1lbnRzLT5nZXQoaSk7CisgICAgfQorICAgIAorICAgIHZvaWQg
c2V0QXJndW1lbnRPZmZzZXQoVk0mIHZtLCB1aW50MzJfdCBpLCBTY29wZU9mZnNldCBvZmZzZXQp
CisgICAgeworICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihtX2FyZ3Vt
ZW50cyk7CisgICAgICAgIG1fYXJndW1lbnRzLnNldCh2bSwgdGhpcywgbV9hcmd1bWVudHMtPnNl
dCh2bSwgaSwgb2Zmc2V0KSk7CisgICAgfQorICAgIAorICAgIFNjb3BlZEFyZ3VtZW50c1RhYmxl
KiBhcmd1bWVudHMoKSBjb25zdAorICAgIHsKKyAgICAgICAgbV9hcmd1bWVudHMtPmxvY2soKTsK
KyAgICAgICAgcmV0dXJuIG1fYXJndW1lbnRzLmdldCgpOworICAgIH0KKyAgICAKICAgICBHbG9i
YWxWYXJpYWJsZUlEIHVuaXF1ZUlERm9yVmFyaWFibGUoY29uc3QgQ29uY3VycmVudEpJVExvY2tl
ciYsIFN0cmluZ0ltcGwqIGtleSwgVk0mIHZtKTsKICAgICBHbG9iYWxWYXJpYWJsZUlEIHVuaXF1
ZUlERm9yUmVnaXN0ZXIoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYgbG9ja2VyLCBpbnQgcmVn
aXN0ZXJJbmRleCwgVk0mIHZtKTsKICAgICBSZWZQdHI8VHlwZVNldD4gZ2xvYmFsVHlwZVNldEZv
clJlZ2lzdGVyKGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImIGxvY2tlciwgaW50IHJlZ2lzdGVy
SW5kZXgsIFZNJiB2bSk7CkBAIC00NjQsMjggKzU2MSw3IEBAIHB1YmxpYzoKICAgICBib29sIHVz
ZXNOb25TdHJpY3RFdmFsKCkgeyByZXR1cm4gbV91c2VzTm9uU3RyaWN0RXZhbDsgfQogICAgIHZv
aWQgc2V0VXNlc05vblN0cmljdEV2YWwoYm9vbCB1c2VzTm9uU3RyaWN0RXZhbCkgeyBtX3VzZXNO
b25TdHJpY3RFdmFsID0gdXNlc05vblN0cmljdEV2YWw7IH0KIAotICAgIGludCBjYXB0dXJlU3Rh
cnQoKSBjb25zdCB7IHJldHVybiBtX2NhcHR1cmVTdGFydDsgfQotICAgIHZvaWQgc2V0Q2FwdHVy
ZVN0YXJ0KGludCBjYXB0dXJlU3RhcnQpIHsgbV9jYXB0dXJlU3RhcnQgPSBjYXB0dXJlU3RhcnQ7
IH0KLQotICAgIGludCBjYXB0dXJlRW5kKCkgY29uc3QgeyByZXR1cm4gbV9jYXB0dXJlRW5kOyB9
Ci0gICAgdm9pZCBzZXRDYXB0dXJlRW5kKGludCBjYXB0dXJlRW5kKSB7IG1fY2FwdHVyZUVuZCA9
IGNhcHR1cmVFbmQ7IH0KLQotICAgIGludCBjYXB0dXJlQ291bnQoKSBjb25zdCB7IHJldHVybiAt
KG1fY2FwdHVyZUVuZCAtIG1fY2FwdHVyZVN0YXJ0KTsgfQotICAgIAotICAgIGJvb2wgaXNDYXB0
dXJlZChpbnQgb3BlcmFuZCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBvcGVyYW5kIDw9IGNhcHR1
cmVTdGFydCgpICYmIG9wZXJhbmQgPiBjYXB0dXJlRW5kKCk7Ci0gICAgfQotCi0gICAgaW50IHBh
cmFtZXRlckNvdW50KCkgeyByZXR1cm4gbV9wYXJhbWV0ZXJDb3VudEluY2x1ZGluZ1RoaXMgLSAx
OyB9Ci0gICAgaW50IHBhcmFtZXRlckNvdW50SW5jbHVkaW5nVGhpcygpIHsgcmV0dXJuIG1fcGFy
YW1ldGVyQ291bnRJbmNsdWRpbmdUaGlzOyB9Ci0gICAgdm9pZCBzZXRQYXJhbWV0ZXJDb3VudElu
Y2x1ZGluZ1RoaXMoaW50IHBhcmFtZXRlckNvdW50SW5jbHVkaW5nVGhpcykgeyBtX3BhcmFtZXRl
ckNvdW50SW5jbHVkaW5nVGhpcyA9IHBhcmFtZXRlckNvdW50SW5jbHVkaW5nVGhpczsgfQotCi0g
ICAgLy8gMCBpZiB3ZSBkb24ndCBjYXB0dXJlIGFueSBhcmd1bWVudHM7IHBhcmFtZXRlckNvdW50
KCkgaW4gbGVuZ3RoIGlmIHdlIGRvLgotICAgIGNvbnN0IFNsb3dBcmd1bWVudCogc2xvd0FyZ3Vt
ZW50cygpIHsgcmV0dXJuIG1fc2xvd0FyZ3VtZW50cy5nZXQoKTsgfQotICAgIHZvaWQgc2V0U2xv
d0FyZ3VtZW50cyhzdGQ6OnVuaXF1ZV9wdHI8U2xvd0FyZ3VtZW50W10+IHNsb3dBcmd1bWVudHMp
IHsgbV9zbG93QXJndW1lbnRzID0gV1RGOjptb3ZlKHNsb3dBcmd1bWVudHMpOyB9Ci0gICAgCi0g
ICAgU3ltYm9sVGFibGUqIGNsb25lQ2FwdHVyZWROYW1lcyhWTSYpOworICAgIFN5bWJvbFRhYmxl
KiBjbG9uZVNjb3BlUGFydChWTSYpOwogCiAgICAgdm9pZCBwcmVwYXJlRm9yVHlwZVByb2ZpbGlu
Zyhjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJik7CiAKQEAgLTUxMyw2ICs1ODksOCBAQCBwcml2
YXRlOgogICAgIH5TeW1ib2xUYWJsZSgpOwogCiAgICAgTWFwIG1fbWFwOworICAgIFNjb3BlT2Zm
c2V0IG1fbWF4U2NvcGVPZmZzZXQ7CisgICAgCiAgICAgc3RydWN0IFR5cGVQcm9maWxpbmdSYXJl
RGF0YSB7CiAgICAgICAgIFVuaXF1ZUlETWFwIG1fdW5pcXVlSURNYXA7CiAgICAgICAgIFJlZ2lz
dGVyVG9WYXJpYWJsZU1hcCBtX3JlZ2lzdGVyVG9WYXJpYWJsZU1hcDsKQEAgLTUyMCwxMyArNTk4
LDkgQEAgcHJpdmF0ZToKICAgICB9OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxUeXBlUHJvZmlsaW5n
UmFyZURhdGE+IG1fdHlwZVByb2ZpbGluZ1JhcmVEYXRhOwogCi0gICAgaW50IG1fcGFyYW1ldGVy
Q291bnRJbmNsdWRpbmdUaGlzOwogICAgIGJvb2wgbV91c2VzTm9uU3RyaWN0RXZhbDsKLQotICAg
IGludCBtX2NhcHR1cmVTdGFydDsKLSAgICBpbnQgbV9jYXB0dXJlRW5kOwotCi0gICAgc3RkOjp1
bmlxdWVfcHRyPFNsb3dBcmd1bWVudFtdPiBtX3Nsb3dBcmd1bWVudHM7CisgICAgCisgICAgV3Jp
dGVCYXJyaWVyPFNjb3BlZEFyZ3VtZW50c1RhYmxlPiBtX2FyZ3VtZW50czsKICAgICAKICAgICBz
dGQ6OnVuaXF1ZV9wdHI8V2F0Y2hwb2ludENsZWFudXA+IG1fd2F0Y2hwb2ludENsZWFudXA7CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Zhck9mZnNldC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVmFyT2Zmc2V0LmNwcAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Zhck9mZnNldC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVmFy
T2Zmc2V0LmgiCisKK25hbWVzcGFjZSBKU0MgeworCit2b2lkIFZhck9mZnNldDo6ZHVtcChQcmlu
dFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIHN3aXRjaCAobV9raW5kKSB7CisgICAgY2FzZSBJ
bnZhbGlkVmFyS2luZDoKKyAgICAgICAgb3V0LnByaW50KCJpbnZhbGlkIik7CisgICAgICAgIHJl
dHVybjsKKyAgICBjYXNlIFNjb3BlVmFyS2luZDoKKyAgICAgICAgb3V0LnByaW50KHNjb3BlT2Zm
c2V0KCkpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBTdGFja1ZhcktpbmQ6CisgICAgICAg
IG91dC5wcmludChzdGFja09mZnNldCgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ2Fw
dHVyZWRBcmd1bWVudEtpbmQ6CisgICAgICAgIG91dC5wcmludChjYXB0dXJlZEFyZ3VtZW50T2Zm
c2V0KCkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCituYW1lc3BhY2UgV1RGIHsKKwor
dXNpbmcgbmFtZXNwYWNlIEpTQzsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBv
dXQsIFZhcktpbmQgdmFyS2luZCkKK3sKKyAgICBzd2l0Y2ggKHZhcktpbmQpIHsKKyAgICBjYXNl
IEludmFsaWRWYXJLaW5kOgorICAgICAgICBvdXQucHJpbnQoIkludmFsaWQiKTsKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgU2NvcGVWYXJLaW5kOgorICAgICAgICBvdXQucHJpbnQoIlNjb3Bl
Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFN0YWNrVmFyS2luZDoKKyAgICAgICAgb3V0
LnByaW50KCJTdGFjayIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBDYXB0dXJlZEFyZ3Vt
ZW50S2luZDoKKyAgICAgICAgb3V0LnByaW50KCJDYXB0dXJlZEFyZ3VtZW50Iik7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV1RGCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1Zhck9mZnNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1Zhck9mZnNldC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVmFyT2Zmc2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMTQgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBWYXJPZmZzZXRf
aAorI2RlZmluZSBWYXJPZmZzZXRfaAorCisjaW5jbHVkZSAiQ2FwdHVyZWRBcmd1bWVudHNPZmZz
ZXQuaCIKKyNpbmNsdWRlICJTY29wZU9mZnNldC5oIgorI2luY2x1ZGUgIlZpcnR1YWxSZWdpc3Rl
ci5oIgorCituYW1lc3BhY2UgSlNDIHsKKworZW51bSBWYXJLaW5kIDogdWludDhfdCB7CisgICAg
SW52YWxpZFZhcktpbmQsCisgICAgU2NvcGVWYXJLaW5kLAorICAgIFN0YWNrVmFyS2luZCwKKyAg
ICBDYXB0dXJlZEFyZ3VtZW50S2luZAorfTsKKworY2xhc3MgVmFyT2Zmc2V0IHsKK3B1YmxpYzoK
KyAgICBWYXJPZmZzZXQoKQorICAgICAgICA6IG1fa2luZChJbnZhbGlkVmFyS2luZCkKKyAgICAg
ICAgLCBtX29mZnNldChVSU5UX01BWCkKKyAgICB7CisgICAgfQorICAgIAorICAgIGV4cGxpY2l0
IFZhck9mZnNldChWaXJ0dWFsUmVnaXN0ZXIgc3RhY2tPZmZzZXQpCisgICAgeworICAgICAgICBp
ZiAoIXN0YWNrT2Zmc2V0LmlzVmFsaWQoKSkgeworICAgICAgICAgICAgbV9raW5kID0gSW52YWxp
ZFZhcktpbmQ7CisgICAgICAgICAgICBtX29mZnNldCA9IFVJTlRfTUFYOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgbV9raW5kID0gU3RhY2tWYXJLaW5kOworICAgICAgICAgICAgbV9v
ZmZzZXQgPSBzdGFja09mZnNldC5vZmZzZXQoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAg
ICBleHBsaWNpdCBWYXJPZmZzZXQoU2NvcGVPZmZzZXQgc2NvcGVPZmZzZXQpCisgICAgeworICAg
ICAgICBpZiAoIXNjb3BlT2Zmc2V0KSB7CisgICAgICAgICAgICBtX2tpbmQgPSBJbnZhbGlkVmFy
S2luZDsKKyAgICAgICAgICAgIG1fb2Zmc2V0ID0gVUlOVF9NQVg7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICBtX2tpbmQgPSBTY29wZVZhcktpbmQ7CisgICAgICAgICAgICBtX29mZnNl
dCA9IHNjb3BlT2Zmc2V0Lm9mZnNldCgpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIGV4
cGxpY2l0IFZhck9mZnNldChDYXB0dXJlZEFyZ3VtZW50c09mZnNldCBjYXB0dXJlZEFyZ3VtZW50
c09mZnNldCkKKyAgICB7CisgICAgICAgIGlmICghY2FwdHVyZWRBcmd1bWVudHNPZmZzZXQpIHsK
KyAgICAgICAgICAgIG1fa2luZCA9IEludmFsaWRWYXJLaW5kOworICAgICAgICAgICAgbV9vZmZz
ZXQgPSBVSU5UX01BWDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1fa2luZCA9IENh
cHR1cmVkQXJndW1lbnRLaW5kOworICAgICAgICAgICAgbV9vZmZzZXQgPSBjYXB0dXJlZEFyZ3Vt
ZW50c09mZnNldC5vZmZzZXQoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBzdGF0aWMg
VmFyT2Zmc2V0IGFzc2VtYmxlKFZhcktpbmQga2luZCwgdW5zaWduZWQgb2Zmc2V0KQorICAgIHsK
KyAgICAgICAgVmFyT2Zmc2V0IHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IGtpbmQ7
CisgICAgICAgIHJlc3VsdC5tX29mZnNldCA9IG9mZnNldDsKKyAgICAgICAgcmVzdWx0LmNoZWNr
U2FuaXR5KCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIGJvb2wg
aXNWYWxpZCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9raW5kICE9IEludmFsaWRW
YXJLaW5kOworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gIWlzVmFsaWQoKTsKKyAgICB9CisgICAgCisgICAgVmFyS2luZCBraW5k
KCkgY29uc3QgeyByZXR1cm4gbV9raW5kOyB9CisgICAgCisgICAgYm9vbCBpc1N0YWNrKCkgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2tpbmQgPT0gU3RhY2tWYXJLaW5kOworICAgIH0K
KyAgICAKKyAgICBib29sIGlzU2NvcGUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1f
a2luZCA9PSBTY29wZVZhcktpbmQ7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNDYXB0dXJlZEFy
Z3VtZW50KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2tpbmQgPT0gQ2FwdHVyZWRB
cmd1bWVudEtpbmQ7CisgICAgfQorICAgIAorICAgIFZpcnR1YWxSZWdpc3RlciBzdGFja09mZnNl
dFVuY2hlY2tlZCgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoIWlzU3RhY2soKSkKKyAgICAg
ICAgICAgIHJldHVybiBWaXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICAgICAgcmV0dXJuIFZpcnR1YWxS
ZWdpc3RlcihtX29mZnNldCk7CisgICAgfQorICAgIAorICAgIFNjb3BlT2Zmc2V0IHNjb3BlT2Zm
c2V0VW5jaGVja2VkKCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmICghaXNTY29wZSgpKQorICAg
ICAgICAgICAgcmV0dXJuIFNjb3BlT2Zmc2V0KCk7CisgICAgICAgIHJldHVybiBTY29wZU9mZnNl
dChtX29mZnNldCk7CisgICAgfQorICAgIAorICAgIENhcHR1cmVkQXJndW1lbnRzT2Zmc2V0IGNh
cHR1cmVkQXJndW1lbnRzT2Zmc2V0VW5jaGVja2VkKCkgY29uc3QKKyAgICB7CisgICAgICAgIGlm
ICghaXNDYXB0dXJlZEFyZ3VtZW50KCkpCisgICAgICAgICAgICByZXR1cm4gQ2FwdHVyZWRBcmd1
bWVudHNPZmZzZXQoKTsKKyAgICAgICAgcmV0dXJuIENhcHR1cmVkQXJndW1lbnRzT2Zmc2V0KG1f
b2Zmc2V0KTsKKyAgICB9CisgICAgCisgICAgVmlydHVhbFJlZ2lzdGVyIHN0YWNrT2Zmc2V0KCkg
Y29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc1N0YWNrKCkpOworICAgICAgICByZXR1cm4g
VmlydHVhbFJlZ2lzdGVyKG1fb2Zmc2V0KTsKKyAgICB9CisgICAgCisgICAgU2NvcGVPZmZzZXQg
c2NvcGVPZmZzZXQoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzU2NvcGUoKSk7Cisg
ICAgICAgIHJldHVybiBTY29wZU9mZnNldChtX29mZnNldCk7CisgICAgfQorICAgIAorICAgIENh
cHR1cmVkQXJndW1lbnRzT2Zmc2V0IGNhcHR1cmVkQXJndW1lbnRzT2Zmc2V0KCkgY29uc3QKKyAg
ICB7CisgICAgICAgIEFTU0VSVChpc0NhcHR1cmVkQXJndW1lbnQoKSk7CisgICAgICAgIHJldHVy
biBDYXB0dXJlZEFyZ3VtZW50c09mZnNldChtX29mZnNldCk7CisgICAgfQorICAgIAorICAgIHVu
c2lnbmVkIHJhd09mZnNldCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaXNWYWxpZCgp
KTsKKyAgICAgICAgcmV0dXJuIG1fb2Zmc2V0OworICAgIH0KKyAgICAKKyAgICB2b2lkIGNoZWNr
U2FuaXR5KCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChBU1NFUlRfRElTQUJMRUQpCisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBzd2l0Y2ggKG1fa2luZCkgeworICAg
ICAgICBjYXNlIEludmFsaWRWYXJLaW5kOgorICAgICAgICAgICAgQVNTRVJUKG1fb2Zmc2V0ID09
IFVJTlRfTUFYKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBTY29wZVZhcktp
bmQ6CisgICAgICAgICAgICBBU1NFUlQoc2NvcGVPZmZzZXQoKSk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIGNhc2UgU3RhY2tWYXJLaW5kOgorICAgICAgICAgICAgQVNTRVJUKHN0YWNr
T2Zmc2V0KCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIENhcHR1cmVkQXJn
dW1lbnRLaW5kOgorICAgICAgICAgICAgQVNTRVJUKGNhcHR1cmVkQXJndW1lbnRzT2Zmc2V0KCkp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IFZhck9mZnNldCYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9raW5kID09
IG90aGVyLm1fa2luZAorICAgICAgICAgICAgJiYgbV9vZmZzZXQgPT0gb3RoZXIubV9vZmZzZXQ7
CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBWYXJPZmZzZXQmIG90aGVy
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgIH0K
KyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAKK3ByaXZhdGU6
CisgICAgVmFyS2luZCBtX2tpbmQ7CisgICAgdW5zaWduZWQgbV9vZmZzZXQ7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBKU0MKKworbmFtZXNwYWNlIFdURiB7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQ
cmludFN0cmVhbSYsIEpTQzo6VmFyS2luZCk7CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5k
aWYgLy8gVmFyT2Zmc2V0X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
VmFyaWFibGVMb2NhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1ZhcmlhYmxlTG9jYXRpb24uaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1ZhcmlhYmxlTG9jYXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDM4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgVmFyaWFibGVMb2NhdGlvbl9oCisjZGVmaW5lIFZhcmlhYmxlTG9jYXRpb25faAor
CisjaW5jbHVkZSAiVmlydHVhbFJlZ2lzdGVyLmgiCisKK25hbWVzcGFjZSBKU0MgeworCisKKwor
fSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBWYXJpYWJsZUxvY2F0aW9uX2gKKwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>247539</attachid>
            <date>2015-02-27 13:15:42 -0800</date>
            <delta_ts>2015-02-28 20:10:00 -0800</delta_ts>
            <desc>a bit more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>183494</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2Vt
Ymxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJz
dHJhY3RNYWNyb0Fzc2VtYmxlci5oCShyZXZpc2lvbiAxODA3MjApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMjA1LDYgKzIwNSwxMSBAQCBwdWJsaWM6CiAgICAgICAgIFJlZ2lzdGVySUQgaW5kZXg7
CiAgICAgICAgIFNjYWxlIHNjYWxlOwogICAgICAgICBpbnQzMl90IG9mZnNldDsKKyAgICAgICAg
CisgICAgICAgIEJhc2VJbmRleCB3aXRoT2Zmc2V0KGludDMyX3QgYWRkaXRpb25hbE9mZnNldCkK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEJhc2VJbmRleChiYXNlLCBpbmRleCwgc2Nh
bGUsIG9mZnNldCArIGFkZGl0aW9uYWxPZmZzZXQpOworICAgICAgICB9CiAgICAgfTsKIAogICAg
IC8vIEFic29sdXRlQWRkcmVzczoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9CeVZhbEluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQnlWYWxJbmZvLmgJKHJldmlzaW9uIDE4MDcyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9CeVZhbEluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDEsNiArNDEsOCBAQCBlbnVt
IEpJVEFycmF5TW9kZSB7CiAgICAgSklURG91YmxlLAogICAgIEpJVENvbnRpZ3VvdXMsCiAgICAg
SklUQXJyYXlTdG9yYWdlLAorICAgIEpJVERpcmVjdEFyZ3VtZW50cywKKyAgICBKSVRTY29wZWRB
cmd1bWVudHMsCiAgICAgSklUSW50OEFycmF5LAogICAgIEpJVEludDE2QXJyYXksCiAgICAgSklU
SW50MzJBcnJheSwKQEAgLTY1LDYgKzY3LDE3IEBAIGlubGluZSBib29sIGlzT3B0aW1pemFibGVJ
bmRleGluZ1R5cGUoSW4KICAgICB9CiB9CiAKK2lubGluZSBib29sIGhhc09wdGltaXphYmxlSW5k
ZXhpbmdGb3JKU1R5cGUoSlNUeXBlIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAg
Y2FzZSBEaXJlY3RBcmd1bWVudHNUeXBlOgorICAgIGNhc2UgU2NvcGVkQXJndW1lbnRzVHlwZToK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KK30KKwogaW5saW5lIGJvb2wgaGFzT3B0aW1pemFibGVJbmRleGluZ0ZvckNsYXNz
SW5mbyhjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbykKIHsKICAgICByZXR1cm4gaXNUeXBlZFZp
ZXcoY2xhc3NJbmZvLT50eXBlZEFycmF5U3RvcmFnZVR5cGUpOwpAQCAtNzMsNiArODYsNyBAQCBp
bmxpbmUgYm9vbCBoYXNPcHRpbWl6YWJsZUluZGV4aW5nRm9yQ2xhCiBpbmxpbmUgYm9vbCBoYXNP
cHRpbWl6YWJsZUluZGV4aW5nKFN0cnVjdHVyZSogc3RydWN0dXJlKQogewogICAgIHJldHVybiBp
c09wdGltaXphYmxlSW5kZXhpbmdUeXBlKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpCisgICAg
ICAgIHx8IGhhc09wdGltaXphYmxlSW5kZXhpbmdGb3JKU1R5cGUoc3RydWN0dXJlLT50eXBlSW5m
bygpLnR5cGUoKSkKICAgICAgICAgfHwgaGFzT3B0aW1pemFibGVJbmRleGluZ0ZvckNsYXNzSW5m
byhzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpKTsKIH0KIApAQCAtOTMsNiArMTA3LDE5IEBAIGlubGlu
ZSBKSVRBcnJheU1vZGUgaml0QXJyYXlNb2RlRm9ySW5kZXgKICAgICB9CiB9CiAKK2lubGluZSBK
SVRBcnJheU1vZGUgaml0QXJyYXlNb2RlRm9ySlNUeXBlKEpTVHlwZSB0eXBlKQoreworICAgIHN3
aXRjaCAodHlwZSkgeworICAgIGNhc2UgRGlyZWN0QXJndW1lbnRzVHlwZToKKyAgICAgICAgcmV0
dXJuIEpJVERpcmVjdEFyZ3VtZW50czsKKyAgICBjYXNlIFNjb3BlZEFyZ3VtZW50c1R5cGU6Cisg
ICAgICAgIHJldHVybiBKSVRTY29wZWRBcmd1bWVudHM7CisgICAgZGVmYXVsdDoKKyAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIEpJVENvbnRpZ3Vv
dXM7CisgICAgfQorfQorCiBpbmxpbmUgSklUQXJyYXlNb2RlIGppdEFycmF5TW9kZUZvckNsYXNz
SW5mbyhjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbykKIHsKICAgICBzd2l0Y2ggKGNsYXNzSW5m
by0+dHlwZWRBcnJheVN0b3JhZ2VUeXBlKSB7CkBAIC0xMjAsNiArMTQ3LDE5IEBAIGlubGluZSBK
SVRBcnJheU1vZGUgaml0QXJyYXlNb2RlRm9yQ2xhc3MKICAgICB9CiB9CiAKK2lubGluZSBib29s
IGppdEFycmF5TW9kZVBlcm1pdHNQdXQoSklUQXJyYXlNb2RlIG1vZGUpCit7CisgICAgc3dpdGNo
IChtb2RlKSB7CisgICAgY2FzZSBKSVREaXJlY3RBcmd1bWVudHM6CisgICAgY2FzZSBKSVRTY29w
ZWRBcmd1bWVudHM6CisgICAgICAgIC8vIFdlIGNvdWxkIHN1cHBvcnQgcHV0X2J5X3ZhbCBvbiB0
aGVzZSBhdCBzb21lIHBvaW50LCBidXQgaXQncyBqdXN0IG5vdCB0aGF0IHByb2ZpdGFibGUKKyAg
ICAgICAgLy8gYXQgdGhlIG1vbWVudC4KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGRlZmF1
bHQ6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KK30KKwogaW5saW5lIFR5cGVkQXJyYXlU
eXBlIHR5cGVkQXJyYXlUeXBlRm9ySklUQXJyYXlNb2RlKEpJVEFycmF5TW9kZSBtb2RlKQogewog
ICAgIHN3aXRjaCAobW9kZSkgewpAQCAtMTUyLDYgKzE5Miw5IEBAIGlubGluZSBKSVRBcnJheU1v
ZGUgaml0QXJyYXlNb2RlRm9yU3RydWMKICAgICBpZiAoaXNPcHRpbWl6YWJsZUluZGV4aW5nVHlw
ZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSkKICAgICAgICAgcmV0dXJuIGppdEFycmF5TW9k
ZUZvckluZGV4aW5nVHlwZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKTsKICAgICAKKyAgICBp
ZiAoaGFzT3B0aW1pemFibGVJbmRleGluZ0ZvckpTVHlwZShzdHJ1Y3R1cmUtPnR5cGVJbmZvKCku
dHlwZSgpKSkKKyAgICAgICAgcmV0dXJuIGppdEFycmF5TW9kZUZvckpTVHlwZShzdHJ1Y3R1cmUt
PnR5cGVJbmZvKCkudHlwZSgpKTsKKyAgICAKICAgICBBU1NFUlQoaGFzT3B0aW1pemFibGVJbmRl
eGluZ0ZvckNsYXNzSW5mbyhzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpKSk7CiAgICAgcmV0dXJuIGpp
dEFycmF5TW9kZUZvckNsYXNzSW5mbyhzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpKTsKIH0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QuanNvbgo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0Lmpzb24J
KHJldmlzaW9uIDE4MDcyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRl
Y29kZUxpc3QuanNvbgkod29ya2luZyBjb3B5KQpAQCAtOCw3ICs4LDkgQEAKICAgICAgICAgICAg
IHsgIm5hbWUiIDogIm9wX2dldF9zY29wZSIsICJsZW5ndGgiIDogMiB9LAogICAgICAgICAgICAg
eyAibmFtZSIgOiAib3BfdG91Y2hfZW50cnkiLCAibGVuZ3RoIiA6IDEgfSwKICAgICAgICAgICAg
IHsgIm5hbWUiIDogIm9wX2luaXRfbGF6eV9yZWciLCAibGVuZ3RoIiA6IDIgfSwKLSAgICAgICAg
ICAgIHsgIm5hbWUiIDogIm9wX2NyZWF0ZV9hcmd1bWVudHMiLCAibGVuZ3RoIiA6IDMgfSwKKyAg
ICAgICAgICAgIHsgIm5hbWUiIDogIm9wX2NvcHlfYXJndW1lbnRzX3RvX3Njb3BlIiwgImxlbmd0
aCIgOiAyIH0sIC8vIGp1c3QgdGFrZXMgdGhlIHNjb3BlIHJlZ2lzdGVyCisgICAgICAgICAgICB7
ICJuYW1lIiA6ICJvcF9jcmVhdGVfZGlyZWN0X2FyZ3VtZW50cyIsICJsZW5ndGgiIDogMiB9LCAv
LyBqdXN0IHRha2VzIHRoZSBkc3QgcmVnaXN0ZXIKKyAgICAgICAgICAgIHsgIm5hbWUiIDogIm9w
X2NyZWF0ZV9zY29wZWRfYXJndW1lbnRzIiwgImxlbmd0aCIgOiAzIH0sIC8vIGRzdCwgc2NvcGVS
ZWdpc3RlciwgdGFibGUKICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX2NyZWF0ZV90aGlzIiwg
Imxlbmd0aCIgOiA0IH0sCiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9nZXRfY2FsbGVlIiwg
Imxlbmd0aCIgOiAzIH0sCiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF90b190aGlzIiwgImxl
bmd0aCIgOiA0IH0sCkBAIC02MSw3ICs2Myw2IEBACiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJv
cF9nZXRfYnlfaWQiLCAibGVuZ3RoIiA6IDkgIH0sCiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJv
cF9nZXRfYnlfaWRfb3V0X29mX2xpbmUiLCAibGVuZ3RoIiA6IDkgIH0sCiAgICAgICAgICAgICB7
ICJuYW1lIiA6ICJvcF9nZXRfYXJyYXlfbGVuZ3RoIiwgImxlbmd0aCIgOiA5IH0sCi0gICAgICAg
ICAgICB7ICJuYW1lIiA6ICJvcF9nZXRfYXJndW1lbnRzX2xlbmd0aCIsICJsZW5ndGgiIDogNCB9
LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfcHV0X2J5X2lkIiwgImxlbmd0aCIgOiA5IH0s
CiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9wdXRfYnlfaWRfb3V0X29mX2xpbmUiLCAibGVu
Z3RoIiA6IDkgfSwKICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX3B1dF9ieV9pZF90cmFuc2l0
aW9uX2RpcmVjdCIsICJsZW5ndGgiIDogOSB9LApAQCAtNzAsNyArNzEsNiBAQAogICAgICAgICAg
ICAgeyAibmFtZSIgOiAib3BfcHV0X2J5X2lkX3RyYW5zaXRpb25fbm9ybWFsX291dF9vZl9saW5l
IiwgImxlbmd0aCIgOiA5IH0sCiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9kZWxfYnlfaWQi
LCAibGVuZ3RoIiA6IDQgfSwKICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX2dldF9ieV92YWwi
LCAibGVuZ3RoIiA6IDYgfSwKLSAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX2dldF9hcmd1bWVu
dF9ieV92YWwiLCAibGVuZ3RoIiA6IDcgfSwKICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX3B1
dF9ieV92YWwiLCAibGVuZ3RoIiA6IDUgfSwKICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX3B1
dF9ieV92YWxfZGlyZWN0IiwgImxlbmd0aCIgOiA1IH0sCiAgICAgICAgICAgICB7ICJuYW1lIiA6
ICJvcF9kZWxfYnlfdmFsIiwgImxlbmd0aCIgOiA0IH0sCkBAIC05OSw3ICs5OSw2IEBACiAgICAg
ICAgICAgICB7ICJuYW1lIiA6ICJvcF9jYWxsIiwgImxlbmd0aCIgOiA5IH0sCiAgICAgICAgICAg
ICB7ICJuYW1lIiA6ICJvcF9jYWxsX2V2YWwiLCAibGVuZ3RoIiA6IDkgfSwKICAgICAgICAgICAg
IHsgIm5hbWUiIDogIm9wX2NhbGxfdmFyYXJncyIsICJsZW5ndGgiIDogOSB9LAotICAgICAgICAg
ICAgeyAibmFtZSIgOiAib3BfdGVhcl9vZmZfYXJndW1lbnRzIiwgImxlbmd0aCIgOiAzIH0sCiAg
ICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9yZXQiLCAibGVuZ3RoIiA6IDIgfSwKICAgICAgICAg
ICAgIHsgIm5hbWUiIDogIm9wX2NvbnN0cnVjdCIsICJsZW5ndGgiIDogOSB9LAogICAgICAgICAg
ICAgeyAibmFtZSIgOiAib3BfY29uc3RydWN0X3ZhcmFyZ3MiLCAibGVuZ3RoIiA6IDkgfSwKQEAg
LTEwOCw2ICsxMDcsOCBAQAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfcmVzb2x2ZV9zY29w
ZSIsICJsZW5ndGgiIDogNyB9LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfZ2V0X2Zyb21f
c2NvcGUiLCAibGVuZ3RoIiA6IDggfSwKICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX3B1dF90
b19zY29wZSIsICJsZW5ndGgiIDogNyB9LAorICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfZ2V0
X2Zyb21fYXJndW1lbnRzIiwgImxlbmd0aCIgOiA1IH0sIC8vIGRzdCwgYXJndW1lbnRzLCBpbmRl
eCwgcHJvZmlsZQorICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfcHV0X3RvX2FyZ3VtZW50cyIs
ICJsZW5ndGgiIDogNCB9LCAvLyBhcmd1bWVudHMsIGluZGV4LCBzcmMKICAgICAgICAgICAgIHsg
Im5hbWUiIDogIm9wX3B1c2hfd2l0aF9zY29wZSIsICJsZW5ndGgiIDogMyB9LAogICAgICAgICAg
ICAgeyAibmFtZSIgOiAib3BfcG9wX3Njb3BlIiwgImxlbmd0aCIgOiAyIH0sCiAgICAgICAgICAg
ICB7ICJuYW1lIiA6ICJvcF9wdXNoX25hbWVfc2NvcGUiLCAibGVuZ3RoIiA6IDUgfSwKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmNw
cAkocmV2aXNpb24gMTgwNzIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Nw
ZWN1bGF0ZWRUeXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksMTAgKzI5LDExIEBACiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU3BlY3VsYXRlZFR5cGUuaCIKIAotI2luY2x1ZGUg
IkFyZ3VtZW50cy5oIgorI2luY2x1ZGUgIkRpcmVjdEFyZ3VtZW50cy5oIgogI2luY2x1ZGUgIkpT
QXJyYXkuaCIKICNpbmNsdWRlICJKU0Z1bmN0aW9uLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5o
IgorI2luY2x1ZGUgIlNjb3BlZEFyZ3VtZW50cy5oIgogI2luY2x1ZGUgIlN0cmluZ09iamVjdC5o
IgogI2luY2x1ZGUgIlZhbHVlUHJvZmlsZS5oIgogI2luY2x1ZGUgPHd0Zi9Cb3VuZHNDaGVja2Vk
UG9pbnRlci5oPgpAQCAtMTI3LDggKzEyOCwxMyBAQCB2b2lkIGR1bXBTcGVjdWxhdGlvbihQcmlu
dFN0cmVhbSYgb3V0LCBTCiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgaXNUb3Ag
PSBmYWxzZTsKICAgICAKLSAgICAgICAgICAgIGlmICh2YWx1ZSAmIFNwZWNBcmd1bWVudHMpCi0g
ICAgICAgICAgICAgICAgbXlPdXQucHJpbnQoIkFyZ3VtZW50cyIpOworICAgICAgICAgICAgaWYg
KHZhbHVlICYgU3BlY0RpcmVjdEFyZ3VtZW50cykKKyAgICAgICAgICAgICAgICBteU91dC5wcmlu
dCgiRGlyZWN0YXJndW1lbnRzIik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
aXNUb3AgPSBmYWxzZTsKKyAgICAKKyAgICAgICAgICAgIGlmICh2YWx1ZSAmIFNwZWNTY29wZWRB
cmd1bWVudHMpCisgICAgICAgICAgICAgICAgbXlPdXQucHJpbnQoIlNjb3BlZGFyZ3VtZW50cyIp
OwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGlzVG9wID0gZmFsc2U7CiAgICAg
CkBAIC0yMzIsOCArMjM4LDEwIEBAIHN0YXRpYyBjb25zdCBjaGFyKiBzcGVjdWxhdGlvblRvQWJi
cmV2aWEKICAgICAgICAgcmV0dXJuICI8RmxvYXQzMmFycmF5PiI7CiAgICAgaWYgKGlzRmxvYXQ2
NEFycmF5U3BlY3VsYXRpb24ocHJlZGljdGlvbikpCiAgICAgICAgIHJldHVybiAiPEZsb2F0NjRh
cnJheT4iOwotICAgIGlmIChpc0FyZ3VtZW50c1NwZWN1bGF0aW9uKHByZWRpY3Rpb24pKQotICAg
ICAgICByZXR1cm4gIjxBcmd1bWVudHM+IjsKKyAgICBpZiAoaXNEaXJlY3RBcmd1bWVudHNTcGVj
dWxhdGlvbihwcmVkaWN0aW9uKSkKKyAgICAgICAgcmV0dXJuICI8RGlyZWN0QXJndW1lbnRzPiI7
CisgICAgaWYgKGlzU2NvcGVkQXJndW1lbnRzU3BlY3VsYXRpb24ocHJlZGljdGlvbikpCisgICAg
ICAgIHJldHVybiAiPFNjb3BlZEFyZ3VtZW50cz4iOwogICAgIGlmIChpc1N0cmluZ09iamVjdFNw
ZWN1bGF0aW9uKHByZWRpY3Rpb24pKQogICAgICAgICByZXR1cm4gIjxTdHJpbmdPYmplY3Q+IjsK
ICAgICBpZiAoaXNTdHJpbmdPclN0cmluZ09iamVjdFNwZWN1bGF0aW9uKHByZWRpY3Rpb24pKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBl
LmgJKHJldmlzaW9uIDE4MDcyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9T
cGVjdWxhdGVkVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01Miw4ICs1Miw5IEBAIHN0YXRpYyBj
b25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjVWludDMyQXIKIHN0YXRpYyBjb25zdCBTcGVjdWxhdGVk
VHlwZSBTcGVjRmxvYXQzMkFycmF5ICAgICAgID0gMHgwMDAwMDQwMDsgLy8gSXQncyBkZWZpbml0
ZWx5IGFuIFVpbnQxNkFycmF5IG9yIG9uZSBvZiBpdHMgc3ViY2xhc3Nlcy4KIHN0YXRpYyBjb25z
dCBTcGVjdWxhdGVkVHlwZSBTcGVjRmxvYXQ2NEFycmF5ICAgICAgID0gMHgwMDAwMDgwMDsgLy8g
SXQncyBkZWZpbml0ZWx5IGFuIFVpbnQxNkFycmF5IG9yIG9uZSBvZiBpdHMgc3ViY2xhc3Nlcy4K
IHN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjVHlwZWRBcnJheVZpZXcgICAgID0gU3Bl
Y0ludDhBcnJheSB8IFNwZWNJbnQxNkFycmF5IHwgU3BlY0ludDMyQXJyYXkgfCBTcGVjVWludDhB
cnJheSB8IFNwZWNVaW50OENsYW1wZWRBcnJheSB8IFNwZWNVaW50MTZBcnJheSB8IFNwZWNVaW50
MzJBcnJheSB8IFNwZWNGbG9hdDMyQXJyYXkgfCBTcGVjRmxvYXQ2NEFycmF5Owotc3RhdGljIGNv
bnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNBcmd1bWVudHMgICAgICAgICAgPSAweDAwMDAxMDAwOyAv
LyBJdCdzIGRlZmluaXRlbHkgYW4gQXJndW1lbnRzIG9iamVjdC4KLXN0YXRpYyBjb25zdCBTcGVj
dWxhdGVkVHlwZSBTcGVjU3RyaW5nT2JqZWN0ICAgICAgID0gMHgwMDAwMjAwMDsgLy8gSXQncyBk
ZWZpbml0ZWx5IGEgU3RyaW5nT2JqZWN0Lgorc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNw
ZWNEaXJlY3RBcmd1bWVudHMgICAgPSAweDAwMDAxMDAwOyAvLyBJdCdzIGRlZmluaXRlbHkgYSBE
aXJlY3RBcmd1bWVudHMgb2JqZWN0Lgorc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNT
Y29wZWRBcmd1bWVudHMgICAgPSAweDAwMDAyMDAwOyAvLyBJdCdzIGRlZmluaXRlbHkgYSBTY29w
ZWRBcmd1bWVudHMgb2JqZWN0Lgorc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNTdHJp
bmdPYmplY3QgICAgICAgPSAweDAwMDA0MDAwOyAvLyBJdCdzIGRlZmluaXRlbHkgYSBTdHJpbmdP
YmplY3QuCiBzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY09iamVjdE90aGVyICAgICAg
ICA9IDB4MDAwMDgwMDA7IC8vIEl0J3MgZGVmaW5pdGVseSBhbiBvYmplY3QgYnV0IG5vdCBKU0Zp
bmFsT2JqZWN0LCBKU0FycmF5LCBvciBKU0Z1bmN0aW9uLgogc3RhdGljIGNvbnN0IFNwZWN1bGF0
ZWRUeXBlIFNwZWNPYmplY3QgICAgICAgICAgICAgPSAweDAwMDBmZmZmOyAvLyBCaXRtYXNrIHVz
ZWQgZm9yIHRlc3RpbmcgZm9yIGFueSBraW5kIG9mIG9iamVjdCBwcmVkaWN0aW9uLgogc3RhdGlj
IGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNTdHJpbmdJZGVudCAgICAgICAgPSAweDAwMDEwMDAw
OyAvLyBJdCdzIGRlZmluaXRlbHkgYSBKU1N0cmluZywgYW5kIGl0J3MgYW4gaWRlbnRpZmllci4K
QEAgLTE5Myw5ICsxOTQsMTQgQEAgaW5saW5lIGJvb2wgaXNGbG9hdDY0QXJyYXlTcGVjdWxhdGlv
bihTcAogICAgIHJldHVybiB2YWx1ZSA9PSBTcGVjRmxvYXQ2NEFycmF5OwogfQogCi1pbmxpbmUg
Ym9vbCBpc0FyZ3VtZW50c1NwZWN1bGF0aW9uKFNwZWN1bGF0ZWRUeXBlIHZhbHVlKQoraW5saW5l
IGJvb2wgaXNEaXJlY3RBcmd1bWVudHNTcGVjdWxhdGlvbihTcGVjdWxhdGVkVHlwZSB2YWx1ZSkK
IHsKLSAgICByZXR1cm4gISF2YWx1ZSAmJiAodmFsdWUgJiBTcGVjQXJndW1lbnRzKSA9PSB2YWx1
ZTsKKyAgICByZXR1cm4gdmFsdWUgPT0gU3BlY0RpcmVjdEFyZ3VtZW50czsKK30KKworaW5saW5l
IGJvb2wgaXNTY29wZWRBcmd1bWVudHNTcGVjdWxhdGlvbihTcGVjdWxhdGVkVHlwZSB2YWx1ZSkK
K3sKKyAgICByZXR1cm4gdmFsdWUgPT0gU3BlY1Njb3BlZEFyZ3VtZW50czsKIH0KIAogaW5saW5l
IGJvb2wgaXNBY3Rpb25hYmxlSW50TXV0YWJsZUFycmF5U3BlY3VsYXRpb24oU3BlY3VsYXRlZFR5
cGUgdmFsdWUpCkBAIC0yMjQsMTMgKzIzMCwxNCBAQCBpbmxpbmUgYm9vbCBpc0FjdGlvbmFibGVU
eXBlZE11dGFibGVBcnJhCiBpbmxpbmUgYm9vbCBpc0FjdGlvbmFibGVNdXRhYmxlQXJyYXlTcGVj
dWxhdGlvbihTcGVjdWxhdGVkVHlwZSB2YWx1ZSkKIHsKICAgICByZXR1cm4gaXNBcnJheVNwZWN1
bGF0aW9uKHZhbHVlKQotICAgICAgICB8fCBpc0FyZ3VtZW50c1NwZWN1bGF0aW9uKHZhbHVlKQog
ICAgICAgICB8fCBpc0FjdGlvbmFibGVUeXBlZE11dGFibGVBcnJheVNwZWN1bGF0aW9uKHZhbHVl
KTsKIH0KIAogaW5saW5lIGJvb2wgaXNBY3Rpb25hYmxlQXJyYXlTcGVjdWxhdGlvbihTcGVjdWxh
dGVkVHlwZSB2YWx1ZSkKIHsKICAgICByZXR1cm4gaXNTdHJpbmdTcGVjdWxhdGlvbih2YWx1ZSkK
KyAgICAgICAgfHwgaXNEaXJlY3RBcmd1bWVudHNTcGVjdWxhdGlvbih2YWx1ZSkKKyAgICAgICAg
fHwgaXNTY29wZWRBcmd1bWVudHNTcGVjdWxhdGlvbih2YWx1ZSkKICAgICAgICAgfHwgaXNBY3Rp
b25hYmxlTXV0YWJsZUFycmF5U3BlY3VsYXRpb24odmFsdWUpOwogfQogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJh
dG9yLmNwcAkocmV2aXNpb24gMTgwNzIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNiw3ICsx
MTYsNyBAQCBQYXJzZXJFcnJvciBCeXRlY29kZUdlbmVyYXRvcjo6Z2VuZXJhdGUoCiAgICAgbV9j
b2RlQmxvY2stPnNocmlua1RvRml0KCk7CiAKICAgICBpZiAobV9jb2RlQmxvY2stPnN5bWJvbFRh
YmxlKCkgJiYgIW1fY29kZUJsb2NrLT52bSgpLT50eXBlUHJvZmlsZXIoKSkKLSAgICAgICAgbV9j
b2RlQmxvY2stPnNldFN5bWJvbFRhYmxlKG1fY29kZUJsb2NrLT5zeW1ib2xUYWJsZSgpLT5jbG9u
ZUNhcHR1cmVkTmFtZXMoKm1fY29kZUJsb2NrLT52bSgpKSk7CisgICAgICAgIG1fY29kZUJsb2Nr
LT5zZXRTeW1ib2xUYWJsZShtX2NvZGVCbG9jay0+c3ltYm9sVGFibGUoKS0+Y2xvbmVJZ25vcmlu
Z1N0YWNrKCptX2NvZGVCbG9jay0+dm0oKSkpOwogCiAgICAgaWYgKG1fZXhwcmVzc2lvblRvb0Rl
ZXApCiAgICAgICAgIHJldHVybiBQYXJzZXJFcnJvcihQYXJzZXJFcnJvcjo6T3V0T2ZNZW1vcnkp
OwpAQCAtMTI0LDEzICsxMjQsMTkgQEAgUGFyc2VyRXJyb3IgQnl0ZWNvZGVHZW5lcmF0b3I6Omdl
bmVyYXRlKAogfQogCiBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6YWRkVmFyKAotICAg
IGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBDb25zdGFudE1vZGUgY29uc3RhbnRNb2RlLCBXYXRj
aE1vZGUgd2F0Y2hNb2RlKQorICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBDb25zdGFudE1v
ZGUgY29uc3RhbnRNb2RlKQogewogICAgIEFTU0VSVChzdGF0aWNfY2FzdDxzaXplX3Q+KG1fY29k
ZUJsb2NrLT5tX251bVZhcnMpID09IG1fY2FsbGVlUmVnaXN0ZXJzLnNpemUoKSk7CiAgICAgCiAg
ICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIoc3ltYm9sVGFibGUoKS5tX2xvY2spOwotICAg
IGludCBpbmRleCA9IHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKG1fY2FsbGVlUmVnaXN0ZXJzLnNp
emUoKSkub2Zmc2V0KCk7Ci0gICAgU3ltYm9sVGFibGVFbnRyeSBuZXdFbnRyeShpbmRleCwgY29u
c3RhbnRNb2RlID09IElzQ29uc3RhbnQgPyBSZWFkT25seSA6IDApOworICAgIFZhck9mZnNldCB2
YXJPZmZzZXQ7CisgICAgaWYgKHZhcktpbmQgPT0gSGVhcFZhcktpbmQpCisgICAgICAgIHZhck9m
ZnNldCA9IFZhck9mZnNldChIZWFwT2Zmc2V0KG1fbnVtQ2FwdHVyZWRWYXJpYWJsZXMrKykpOwor
ICAgIGVsc2UgeworICAgICAgICBBU1NFUlQodmFyS2luZCA9PSBTdGFja1ZhcktpbmQpOworICAg
ICAgICB2YXJPZmZzZXQgPSBWYXJPZmZzZXQodmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwobV9jYWxs
ZWVSZWdpc3RlcnMuc2l6ZSgpKSk7CisgICAgfQorICAgIFN5bWJvbFRhYmxlRW50cnkgbmV3RW50
cnkodmFyT2Zmc2V0LCBjb25zdGFudE1vZGUgPT0gSXNDb25zdGFudCA/IFJlYWRPbmx5IDogMCk7
CiAgICAgU3ltYm9sVGFibGU6Ok1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IHN5bWJvbFRhYmxlKCku
YWRkKGxvY2tlciwgaWRlbnQuaW1wbCgpLCBuZXdFbnRyeSk7CiAKICAgICBpZiAoIXJlc3VsdC5p
c05ld0VudHJ5KQpAQCAtMTg5LDcgKzE5NSw3IEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29k
ZUdlbmVyYXRvcihWTSYKIHsKICAgICBpZiAobV9pc0J1aWx0aW5GdW5jdGlvbikKICAgICAgICAg
bV9zaG91bGRFbWl0RGVidWdIb29rcyA9IGZhbHNlOwotCisgICAgCiAgICAgbV9zeW1ib2xUYWJs
ZS0+c2V0VXNlc05vblN0cmljdEV2YWwoY29kZUJsb2NrLT51c2VzRXZhbCgpICYmICFjb2RlQmxv
Y2stPmlzU3RyaWN0TW9kZSgpKTsKICAgICBWZWN0b3I8SWRlbnRpZmllcj4gYm91bmRQYXJhbWV0
ZXJQcm9wZXJ0aWVzOwogICAgIEZ1bmN0aW9uUGFyYW1ldGVycyYgcGFyYW1ldGVycyA9ICpmdW5j
dGlvbk5vZGUtPnBhcmFtZXRlcnMoKTsKQEAgLTIyNiw5ICsyMzIsNTkgQEAgQnl0ZWNvZGVHZW5l
cmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFZNJgogICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBl
bmQobV9sZXhpY2FsRW52aXJvbm1lbnRSZWdpc3Rlci0+aW5kZXgoKSk7CiAgICAgICAgIGluc3Ry
dWN0aW9ucygpLmFwcGVuZChzY29wZVJlZ2lzdGVyKCktPmluZGV4KCkpOwogICAgIH0KKyAgICAK
KyAgICAvLyBGaWd1cmUgb3V0IHNvbWUgaW50ZXJlc3RpbmcgZmFjdHMgYWJvdXQgb3VyIGFyZ3Vt
ZW50cy4KKyAgICBib29sIGNhcHR1cmVzQW55QXJndW1lbnRCeU5hbWUgPSBmYWxzZTsKKyAgICBp
ZiAoc2hvdWxkQ2FwdHVyZUFsbFRoZVRoaW5ncykKKyAgICAgICAgY2FwdHVyZXNBbnlBcmd1bWVu
dEJ5TmFtZSA9IHRydWU7CisgICAgZWxzZSBpZiAoZnVuY3Rpb25Ob2RlLT5oYXNDYXB0dXJlZFZh
cmlhYmxlcygpKSB7CisgICAgICAgIEZ1bmN0aW9uUGFyYW1ldGVycyYgcGFyYW1ldGVycyA9ICpm
dW5jdGlvbk5vZGUtPnBhcmFtZXRlcnMoKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBwYXJhbWV0ZXJzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBhdXRvIHBhdHRlcm4gPSBw
YXJhbWV0ZXJzLmF0KGkpOworICAgICAgICAgICAgaWYgKCFwYXR0ZXJuLT5pc0JpbmRpbmdOb2Rl
KCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBjb25zdCBJZGVudGlm
aWVyJiBpZGVudCA9IHN0YXRpY19jYXN0PGNvbnN0IEJpbmRpbmdOb2RlKj4ocGF0dGVybiktPmJv
dW5kUHJvcGVydHkoKTsKKyAgICAgICAgICAgIGNhcHR1cmVzQW55QXJndW1lbnRCeU5hbWUgfD0g
ZnVuY3Rpb25Ob2RlLT5jYXB0dXJlcyhpZGVudCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBp
ZiAoY2FwdHVyZXNBbnlBcmd1bWVudEJ5TmFtZSkKKyAgICAgICAgQVNTRVJUKG1fbGV4aWNhbEVu
dmlyb25tZW50UmVnaXN0ZXIpOworICAgIAorICAgIC8vIE5lZWQgdG8ga25vdyB3aGF0IG91ciBm
dW5jdGlvbnMgYXJlIGNhbGxlZC4gUGFyYW1ldGVycyBoYXZlIHNvbWUgZ29vZnkgYmVoYXZpb3Jz
IHdoZW4gaXQKKyAgICAvLyBjb21lcyB0byBmdW5jdGlvbnMgb2YgdGhlIHNhbWUgbmFtZS4KKyAg
ICBmb3IgKEZ1bmN0aW9uQm9keU5vZGUqIGZ1bmN0aW9uIDogZnVuY3Rpb25Ob2RlLT5mdW5jdGlv
blN0YWNrKCkpCisgICAgICAgIG1fZnVuY3Rpb25zLmFkZChmdW5jdGlvbi0+aWRlbnQoKS5pbXBs
KCkpOworICAgIAorICAgIGJvb2wgbmVlZHNBcmd1bWVudHMgPSBmdW5jdGlvbk5vZGUtPnVzZXNB
cmd1bWVudHMoKSB8fCBjb2RlQmxvY2stPnVzZXNFdmFsKCk7CisgICAgCisgICAgaWYgKG5lZWRz
QXJndW1lbnRzICYmICFjb2RlQmxvY2stPmlzU3RyaWN0TW9kZSgpKSB7CisgICAgICAgIC8vIENy
ZWF0ZSB0aGUgYXJndW1lbnRzIG9iamVjdCBub3cuIFdlIG1heSBwdXQgdGhlIGFyZ3VtZW50cyBv
YmplY3QgaW50byB0aGUgYWN0aXZhdGlvbiBpZgorICAgICAgICAvLyBpdCBpcyBjYXB0dXJlZC4g
RWl0aGVyIHdheSwgd2UgY3JlYXRlIHR3byBhcmd1bWVudHMgb2JqZWN0IHZhcmlhYmxlczogb25l
IGlzIG91cgorICAgICAgICAvLyBwcml2YXRlIHZhcmlhYmxlIHRoYXQgaXMgaW1tdXRhYmxlLCBh
bmQgYW5vdGhlciB0aGF0IGlzIHRoZSB1c2VyLXZpc2libGUgdmFyaWFibGUuIFRoZQorICAgICAg
ICAvLyBpbW11dGFibGUgb25lIGlzIG9ubHkgdXNlZCBoZXJlLCBvciBkdXJpbmcgZm9ybWFsIHBh
cmFtZXRlciByZXNvbHV0aW9ucyBpZiB3ZSBvcHQgZm9yCisgICAgICAgIC8vIERpcmVjdEFyZ3Vt
ZW50cy4KKyAgICAgICAgCisgICAgICAgIG1fYXJndW1lbnRzUmVnaXN0ZXIgPSBhZGRWYXIoKTsK
KyAgICAgICAgbV9hcmd1bWVudHNSZWdpc3Rlci0+cmVmKCk7CisgICAgICAgIAorICAgICAgICAv
LyBJZiB3ZSBjYXB0dXJlZCBhbnkgZm9ybWFsIHBhcmFtZXRlciBieSBuYW1lLCB0aGVuIHdlIHVz
ZSBTY29wZWRBcmd1bWVudHMuIE90aGVyd2lzZSB3ZQorICAgICAgICAvLyB1c2UgRGlyZWN0QXJn
dW1lbnRzLiBXaXRoIFNjb3BlZEFyZ3VtZW50cywgd2UgbGlmdCBhbGwgb2Ygb3VyIGFyZ3VtZW50
cyBpbnRvIHRoZQorICAgICAgICAvLyBhY3RpdmF0aW9uLgorICAgICAgICAKKyAgICAgICAgaWYg
KGNhcHR1cmVzQW55QXJndW1lbnRCeU5hbWUpIHsKKyAgICAgICAgICAgIGVtaXRPcGNvZGUoKTsK
KyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIC8vIENyZWF0ZSB0aGUgZm9ybWFsIHBh
cmFtZXRlcnMgdGhlIG5vcm1hbCB3YXkuCisgICAgfQorICAgIAorICAgIGlmIChuZWVkc0FyZ3Vt
ZW50cyAmJiBjb2RlQmxvY2stPmlzU3RyaWN0TW9kZSgpKSB7CisgICAgICAgIC8vIEFsbG9jYXRl
IGFuIG91dC1vZi1iYW5kcyBhcmd1bWVudHMgb2JqZWN0LgorICAgIH0KKyAgICAKICAgICBSZWdp
c3RlcklEKiBsb2NhbEFyZ3VtZW50c1JlZ2lzdGVyID0gbnVsbHB0cjsKLSAgICBSZWdpc3RlcklE
KiBzY3JhdGNoID0gYWRkVmFyKCk7Ci0gICAgbV9zeW1ib2xUYWJsZS0+c2V0Q2FwdHVyZVN0YXJ0
KHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKG1fY29kZUJsb2NrLT5tX251bVZhcnMpLm9mZnNldCgp
KTsKKyAgICBSZWdpc3RlcklEKiBzY3JhdGNoID0gYWRkVmFyKCk7IC8vIEZJWE1FOiBUaGlzIHZh
cmlhYmxlIGFsd2F5cyBjcmVhdGVzIGEgaG9sZSBpbiB0aGUgc3RhY2suCiAKICAgICBpZiAoZnVu
Y3Rpb25Ob2RlLT51c2VzQXJndW1lbnRzKCkgfHwgY29kZUJsb2NrLT51c2VzRXZhbCgpKSB7IC8v
IE1heSByZWlmeSBhcmd1bWVudHMgb2JqZWN0LgogICAgICAgICBSZWdpc3RlcklEKiB1bm1vZGlm
aWVkQXJndW1lbnRzUmVnaXN0ZXIgPSBhZGRWYXIoKTsgLy8gQW5vbnltb3VzLCBzbyBpdCBjYW4n
dCBiZSBtb2RpZmllZCBieSB1c2VyIGNvZGUuCkBAIC01MzksMTkgKzU5NSw2IEBAIFJlZ2lzdGVy
SUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjp1bmNoZWNrZWQKICAgICByZXR1cm4gbV9sb2NhbEFyZ3Vt
ZW50c1JlZ2lzdGVyOwogfQogCi1SZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6Y3JlYXRl
TGF6eVJlZ2lzdGVySWZOZWNlc3NhcnkoUmVnaXN0ZXJJRCogcmVnKQotewotICAgIGlmICghcmVn
LT52aXJ0dWFsUmVnaXN0ZXIoKS5pc0xvY2FsKCkpCi0gICAgICAgIHJldHVybiByZWc7Ci0KLSAg
ICBpbnQgbG9jYWxWYXJpYWJsZU51bWJlciA9IHJlZy0+dmlydHVhbFJlZ2lzdGVyKCkudG9Mb2Nh
bCgpOwotCi0gICAgaWYgKG1fbGFzdExhenlGdW5jdGlvbiA8PSBsb2NhbFZhcmlhYmxlTnVtYmVy
IHx8IGxvY2FsVmFyaWFibGVOdW1iZXIgPCBtX2ZpcnN0TGF6eUZ1bmN0aW9uKQotICAgICAgICBy
ZXR1cm4gcmVnOwotICAgIGVtaXRMYXp5TmV3RnVuY3Rpb24ocmVnLCBtX2xhenlGdW5jdGlvbnMu
Z2V0KGxvY2FsVmFyaWFibGVOdW1iZXIpKTsKLSAgICByZXR1cm4gcmVnOwotfQotCiBSZWdpc3Rl
cklEKiBCeXRlY29kZUdlbmVyYXRvcjo6bmV3UmVnaXN0ZXIoKQogewogICAgIG1fY2FsbGVlUmVn
aXN0ZXJzLmFwcGVuZCh2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChtX2NhbGxlZVJlZ2lzdGVycy5z
aXplKCkpKTsKQEAgLTExOTAsNDYgKzEyMzMsMzQgQEAgYm9vbCBCeXRlY29kZUdlbmVyYXRvcjo6
aXNDYXB0dXJlZChpbnQgbwogICAgIHJldHVybiBtX3N5bWJvbFRhYmxlICYmIG1fc3ltYm9sVGFi
bGUtPmlzQ2FwdHVyZWQob3BlcmFuZCk7CiB9CiAKLUxvY2FsIEJ5dGVjb2RlR2VuZXJhdG9yOjps
b2NhbChjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eSkKK1ZhcmlhYmxlIEJ5dGVjb2RlR2VuZXJh
dG9yOjp2YXJpYWJsZShjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eSkKIHsKLSAgICBpZiAocHJv
cGVydHkgPT0gcHJvcGVydHlOYW1lcygpLnRoaXNJZGVudGlmaWVyKQotICAgICAgICByZXR1cm4g
TG9jYWwodGhpc1JlZ2lzdGVyKCksIFJlYWRPbmx5LCBMb2NhbDo6U3BlY2lhbExvY2FsKTsKLSAg
ICBib29sIGlzQXJndW1lbnRzID0gcHJvcGVydHkgPT0gcHJvcGVydHlOYW1lcygpLmFyZ3VtZW50
czsKLSAgICBpZiAoaXNBcmd1bWVudHMpCi0gICAgICAgIGNyZWF0ZUFyZ3VtZW50c0lmTmVjZXNz
YXJ5KCk7Ci0KKyAgICBpZiAocHJvcGVydHkgPT0gcHJvcGVydHlOYW1lcygpLnRoaXNJZGVudGlm
aWVyKSB7CisgICAgICAgIHJldHVybiBWYXJpYWJsZSgKKyAgICAgICAgICAgIHByb3BlcnR5LCBW
YXJPZmZzZXQodGhpc1JlZ2lzdGVyKCktPnZpcnR1YWxSZWdpc3RlcigpKSwgdGhpc1JlZ2lzdGVy
KCksCisgICAgICAgICAgICBSZWFkT25seSwgTG9jYWw6OlNwZWNpYWxMb2NhbCk7CisgICAgfQor
ICAgIAogICAgIGlmICghc2hvdWxkT3B0aW1pemVMb2NhbHMoKSkKLSAgICAgICAgcmV0dXJuIExv
Y2FsKCk7Ci0KLSAgICBTeW1ib2xUYWJsZUVudHJ5IGVudHJ5ID0gc3ltYm9sVGFibGUoKS5nZXQo
cHJvcGVydHkuaW1wbCgpKTsKLSAgICBpZiAoZW50cnkuaXNOdWxsKCkpCi0gICAgICAgIHJldHVy
biBMb2NhbCgpOwotCi0KLSAgICBSZWdpc3RlcklEKiBsb2NhbCA9IGNyZWF0ZUxhenlSZWdpc3Rl
cklmTmVjZXNzYXJ5KCZyZWdpc3RlckZvcihlbnRyeS5nZXRJbmRleCgpKSk7Ci0KLSAgICBpZiAo
aXNDYXB0dXJlZChsb2NhbC0+aW5kZXgoKSkgJiYgbV9sZXhpY2FsRW52aXJvbm1lbnRSZWdpc3Rl
cikKLSAgICAgICAgcmV0dXJuIExvY2FsKCk7Ci0KLSAgICByZXR1cm4gTG9jYWwobG9jYWwsIGVu
dHJ5LmdldEF0dHJpYnV0ZXMoKSwgaXNBcmd1bWVudHMgPyBMb2NhbDo6U3BlY2lhbExvY2FsIDog
TG9jYWw6Ok5vcm1hbExvY2FsKTsKLX0KLQotTG9jYWwgQnl0ZWNvZGVHZW5lcmF0b3I6OmNvbnN0
TG9jYWwoY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHkpCi17Ci0gICAgaWYgKG1fY29kZVR5cGUg
IT0gRnVuY3Rpb25Db2RlKQotICAgICAgICByZXR1cm4gTG9jYWwoKTsKLQotICAgIFN5bWJvbFRh
YmxlRW50cnkgZW50cnkgPSBzeW1ib2xUYWJsZSgpLmdldChwcm9wZXJ0eS5pbXBsKCkpOworICAg
ICAgICByZXR1cm4gVmFyaWFibGUocHJvcGVydHkpOworICAgIAorICAgIFN5bWJvbFRhYmxlRW50
cnkgZW50cnkgPSBzeW1ib2xUYWJsZS5nZXQocHJvcGVydHkuaW1wbCgpKTsKICAgICBpZiAoZW50
cnkuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBMb2NhbCgpOwotCi0gICAgUmVnaXN0ZXJJRCog
bG9jYWwgPSBjcmVhdGVMYXp5UmVnaXN0ZXJJZk5lY2Vzc2FyeSgmcmVnaXN0ZXJGb3IoZW50cnku
Z2V0SW5kZXgoKSkpOwotCi0gICAgYm9vbCBpc0FyZ3VtZW50cyA9IHByb3BlcnR5ID09IHByb3Bl
cnR5TmFtZXMoKS5hcmd1bWVudHM7Ci0gICAgaWYgKGlzQ2FwdHVyZWQobG9jYWwtPmluZGV4KCkp
ICYmIG1fbGV4aWNhbEVudmlyb25tZW50UmVnaXN0ZXIpCi0gICAgICAgIHJldHVybiBMb2NhbCgp
OwotCi0gICAgcmV0dXJuIExvY2FsKGxvY2FsLCBlbnRyeS5nZXRBdHRyaWJ1dGVzKCksIGlzQXJn
dW1lbnRzID8gTG9jYWw6OlNwZWNpYWxMb2NhbCA6IExvY2FsOjpOb3JtYWxMb2NhbCk7CisgICAg
ICAgIHJldHVybiBWYXJpYWJsZShwcm9wZXJ0eSk7CisgICAgCisgICAgVmFyT2Zmc2V0IG9mZnNl
dCA9IGVudHJ5LnZhck9mZnNldCgpOworICAgIAorICAgIGlmIChvZmZzZXQuaXNTY29wZSgpICYm
IG1fbG9jYWxTY29wZURlcHRoKSB7CisgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYmUgYWJs
ZSB0byBzdGF0aWNhbGx5IHJlc29sdmUgdGhyb3VnaCBvdXIgbG9jYWwgc2NvcGVzLgorICAgICAg
ICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQxODg1CisgICAg
ICAgIHJldHVybiBWYXJpYWJsZShwcm9wZXJ0eSk7CisgICAgfQorICAgIAorICAgIFJlZ2lzdGVy
SUQqIGxvY2FsOworICAgIGlmIChvZmZzZXQuaXNTdGFjaygpKQorICAgICAgICBsb2NhbCA9ICZy
ZWdpc3RlckZvcihvZmZzZXQuc3RhY2tPZmZzZXQoKS5vZmZzZXQoKSk7CisgICAgCisgICAgcmV0
dXJuIFZhcmlhYmxlKHByb3BlcnR5LCB2YXJPZmZzZXQsIGxvY2FsLCBlbnRyeS5nZXRBdHRyaWJ1
dGVzKCksIExvY2FsOjpOb3JtYWxMb2NhbCk7CiB9CiAKIHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6
OmVtaXRDaGVja0hhc0luc3RhbmNlKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogdmFsdWUs
IFJlZ2lzdGVySUQqIGJhc2UsIExhYmVsKiB0YXJnZXQpCkBAIC0xMjUzLDM5ICsxMjg0LDQ4IEBA
IFJlc29sdmVUeXBlIEJ5dGVjb2RlR2VuZXJhdG9yOjpyZXNvbHZlVHkKICAgICByZXR1cm4gR2xv
YmFsUHJvcGVydHk7CiB9CiAKLVJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0UmVz
b2x2ZVNjb3BlKFJlZ2lzdGVySUQqIGRzdCwgY29uc3QgSWRlbnRpZmllciYgaWRlbnRpZmllciwg
UmVzb2x2ZVNjb3BlSW5mbyYgaW5mbykKK1JlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjpl
bWl0UmVzb2x2ZVNjb3BlKFJlZ2lzdGVySUQqIGRzdCwgY29uc3QgVmFyaWFibGUmIHZhcmlhYmxl
KQogewotICAgIG1fY29kZUJsb2NrLT5hZGRQcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uKGluc3Ry
dWN0aW9ucygpLnNpemUoKSk7Ci0KLSAgICBpZiAobV9zeW1ib2xUYWJsZSAmJiBtX2NvZGVUeXBl
ID09IEZ1bmN0aW9uQ29kZSAmJiAhbV9sb2NhbFNjb3BlRGVwdGgpIHsKLSAgICAgICAgU3ltYm9s
VGFibGVFbnRyeSBlbnRyeSA9IG1fc3ltYm9sVGFibGUtPmdldChpZGVudGlmaWVyLmltcGwoKSk7
Ci0gICAgICAgIGlmICghZW50cnkuaXNOdWxsKCkpIHsKLSAgICAgICAgICAgIGVtaXRPcGNvZGUo
b3BfcmVzb2x2ZV9zY29wZSk7Ci0gICAgICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoa2ls
bChkc3QpKTsKLSAgICAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChzY29wZVJlZ2lzdGVy
KCktPmluZGV4KCkpOwotICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGFkZENvbnN0
YW50KGlkZW50aWZpZXIpKTsKLSAgICAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChMb2Nh
bENsb3N1cmVWYXIpOwotICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKDApOwotICAg
ICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKDApOwotICAgICAgICAgICAgaW5mbyA9IFJl
c29sdmVTY29wZUluZm8oZW50cnkuZ2V0SW5kZXgoKSk7Ci0gICAgICAgICAgICByZXR1cm4gZHN0
OwotICAgICAgICB9CisgICAgc3dpdGNoICh2YXJpYWJsZS52YXJPZmZzZXQoKS5raW5kKCkpIHsK
KyAgICBjYXNlIFN0YWNrT2Zmc2V0OgorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAg
CisgICAgY2FzZSBDYXB0dXJlZEFyZ3VtZW50S2luZDoKKyAgICAgICAgcmV0dXJuIGFyZ3VtZW50
c1JlZ2lzdGVyKCk7CisgICAgICAgIAorICAgIGNhc2UgU2NvcGVPZmZzZXQ6CisgICAgICAgIG1f
Y29kZUJsb2NrLT5hZGRQcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uKGluc3RydWN0aW9ucygpLnNp
emUoKSk7CisgICAgICAgIAorICAgICAgICBBU1NFUlQobV9zeW1ib2xUYWJsZSAmJiBtX2NvZGVU
eXBlID09IEZ1bmN0aW9uQ29kZSAmJiAhbV9sb2NhbFNjb3BlRGVwdGgpOworICAgICAgICAKKyAg
ICAgICAgZW1pdE9wY29kZShvcF9yZXNvbHZlX3Njb3BlKTsKKyAgICAgICAgaW5zdHJ1Y3Rpb25z
KCkuYXBwZW5kKGtpbGwoZHN0KSk7CisgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChzY29w
ZVJlZ2lzdGVyKCktPmluZGV4KCkpOworICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYWRk
Q29uc3RhbnQodmFyaWFibGUuaWRlbnQoKSkpOworICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBl
bmQoTG9jYWxDbG9zdXJlVmFyKTsKKyAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKDApOwor
ICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoMCk7CisgICAgICAgIHJldHVybiBkc3Q7Cisg
ICAgICAgIAorICAgIGNhc2UgSW52YWxpZFZhcktpbmQ6CisgICAgICAgIC8vIEluZGljYXRlcyBu
b24tbG9jYWwgcmVzb2x1dGlvbi4KKyAgICAgICAgCisgICAgICAgIEFTU0VSVCghbV9zeW1ib2xU
YWJsZSB8fCAhbV9zeW1ib2xUYWJsZS0+Y29udGFpbnMoaWRlbnRpZmllci5pbXBsKCkpIHx8IHJl
c29sdmVUeXBlKCkgPT0gRHluYW1pYyk7CisgICAgICAgIAorICAgICAgICAvLyByZXNvbHZlX3Nj
b3BlIGRzdCwgaWQsIFJlc29sdmVUeXBlLCBkZXB0aAorICAgICAgICBlbWl0T3Bjb2RlKG9wX3Jl
c29sdmVfc2NvcGUpOworICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoa2lsbChkc3QpKTsK
KyAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHNjb3BlUmVnaXN0ZXIoKS0+aW5kZXgoKSk7
CisgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChhZGRDb25zdGFudCh2YXJpYWJsZS5pZGVu
dCgpKSk7CisgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChyZXNvbHZlVHlwZSgpKTsKKyAg
ICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKDApOworICAgICAgICBpbnN0cnVjdGlvbnMoKS5h
cHBlbmQoMCk7CisgICAgICAgIHJldHVybiBkc3Q7CiAgICAgfQotCi0gICAgQVNTRVJUKCFtX3N5
bWJvbFRhYmxlIHx8ICFtX3N5bWJvbFRhYmxlLT5jb250YWlucyhpZGVudGlmaWVyLmltcGwoKSkg
fHwgcmVzb2x2ZVR5cGUoKSA9PSBEeW5hbWljKTsKLQotICAgIC8vIHJlc29sdmVfc2NvcGUgZHN0
LCBpZCwgUmVzb2x2ZVR5cGUsIGRlcHRoCi0gICAgZW1pdE9wY29kZShvcF9yZXNvbHZlX3Njb3Bl
KTsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoa2lsbChkc3QpKTsKLSAgICBpbnN0cnVjdGlv
bnMoKS5hcHBlbmQoc2NvcGVSZWdpc3RlcigpLT5pbmRleCgpKTsKLSAgICBpbnN0cnVjdGlvbnMo
KS5hcHBlbmQoYWRkQ29uc3RhbnQoaWRlbnRpZmllcikpOwotICAgIGluc3RydWN0aW9ucygpLmFw
cGVuZChyZXNvbHZlVHlwZSgpKTsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoMCk7Ci0gICAg
aW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKDApOwotICAgIHJldHVybiBkc3Q7CisgICAgCisgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAotCiBSZWdpc3RlcklEKiBCeXRlY29kZUdl
bmVyYXRvcjo6ZW1pdEdldE93blNjb3BlKFJlZ2lzdGVySUQqIGRzdCwgY29uc3QgSWRlbnRpZmll
ciYgaWRlbnRpZmllciwgT3duU2NvcGVMb29rdXBSdWxlcykKIHsKICAgICBlbWl0T3Bjb2RlKG9w
X3Jlc29sdmVfc2NvcGUpOwpAQCAtMTMwMCw2MSArMTM0MCw4NSBAQCBSZWdpc3RlcklEKiBCeXRl
Y29kZUdlbmVyYXRvcjo6ZW1pdEdldE93CiAgICAgcmV0dXJuIGRzdDsKIH0KIAotUmVnaXN0ZXJJ
RCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRSZXNvbHZlQ29uc3RhbnRMb2NhbChSZWdpc3RlcklE
KiBkc3QsIGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIsIFJlc29sdmVTY29wZUluZm8mIGlu
Zm8pCi17Ci0gICAgaWYgKCFtX3N5bWJvbFRhYmxlIHx8IG1fY29kZVR5cGUgIT0gRnVuY3Rpb25D
b2RlKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIFN5bWJvbFRhYmxlRW50cnkgZW50
cnkgPSBtX3N5bWJvbFRhYmxlLT5nZXQoaWRlbnRpZmllci5pbXBsKCkpOwotICAgIGlmIChlbnRy
eS5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgaW5mbyA9IFJlc29sdmVT
Y29wZUluZm8oZW50cnkuZ2V0SW5kZXgoKSk7Ci0gICAgcmV0dXJuIGVtaXRNb3ZlKGRzdCwgbV9s
ZXhpY2FsRW52aXJvbm1lbnRSZWdpc3Rlcik7Ci0KLX0KLQotUmVnaXN0ZXJJRCogQnl0ZWNvZGVH
ZW5lcmF0b3I6OmVtaXRHZXRGcm9tU2NvcGUoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBz
Y29wZSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnRpZmllciwgUmVzb2x2ZU1vZGUgcmVzb2x2ZU1v
ZGUsIGNvbnN0IFJlc29sdmVTY29wZUluZm8mIGluZm8pCitSZWdpc3RlcklEKiBCeXRlY29kZUdl
bmVyYXRvcjo6ZW1pdEdldEZyb21TY29wZShSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHNj
b3BlLCBjb25zdCBWYXJpYWJsZSYgdmFyaWFibGUsIFJlc29sdmVNb2RlIHJlc29sdmVNb2RlKQog
ewotICAgIG1fY29kZUJsb2NrLT5hZGRQcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uKGluc3RydWN0
aW9ucygpLnNpemUoKSk7Ci0KLSAgICAvLyBnZXRfZnJvbV9zY29wZSBkc3QsIHNjb3BlLCBpZCwg
UmVzb2x2ZU1vZGVBbmRUeXBlLCBTdHJ1Y3R1cmUsIE9wZXJhbmQKLSAgICBVbmxpbmtlZFZhbHVl
UHJvZmlsZSBwcm9maWxlID0gZW1pdFByb2ZpbGVkT3Bjb2RlKG9wX2dldF9mcm9tX3Njb3BlKTsK
LSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoa2lsbChkc3QpKTsKLSAgICBpbnN0cnVjdGlvbnMo
KS5hcHBlbmQoc2NvcGUtPmluZGV4KCkpOwotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChhZGRD
b25zdGFudChpZGVudGlmaWVyKSk7Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKFJlc29sdmVN
b2RlQW5kVHlwZShyZXNvbHZlTW9kZSwgaW5mby5pc0xvY2FsKCkgPyBMb2NhbENsb3N1cmVWYXIg
OiByZXNvbHZlVHlwZSgpKS5vcGVyYW5kKCkpOwotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCgw
KTsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoaW5mby5sb2NhbEluZGV4KCkpOwotICAgIGlu
c3RydWN0aW9ucygpLmFwcGVuZChwcm9maWxlKTsKLSAgICByZXR1cm4gZHN0OworICAgIHN3aXRj
aCAodmFyaWFibGUudmFyT2Zmc2V0KCkua2luZCgpKSB7CisgICAgY2FzZSBTdGFja09mZnNldDoK
KyAgICAgICAgcmV0dXJuIGVtaXRNb3ZlKGtpbGwoZHN0KSwgdmFyaWFibGUubG9jYWwoKSk7Cisg
ICAgICAgIAorICAgIGNhc2UgQ2FwdHVyZWRBcmd1bWVudHNPZmZzZXQ6CisgICAgICAgIEFTU0VS
VChzY29wZSA9PSBhcmd1bWVudHNSZWdpc3RlcigpKTsKKyAgICAgICAgVW5saW5rZWRWYWx1ZVBy
b2ZpbGUgcHJvZmlsZSA9IGVtaXRQcm9maWxlZE9wY29kZShvcF9nZXRfZnJvbV9hcmd1bWVudHMp
OworICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoa2lsbChkc3QpKTsKKyAgICAgICAgaW5z
dHJ1Y3Rpb25zKCkuYXBwZW5kKHNjb3BlLT5pbmRleCgpKTsKKyAgICAgICAgaW5zdHJ1Y3Rpb25z
KCkuYXBwZW5kKHZhcmlhYmxlLnZhck9mZnNldCgpLmNhcHR1cmVkQXJndW1lbnRzT2Zmc2V0KCku
b2Zmc2V0KCkpOworICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQocHJvZmlsZSk7CisgICAg
ICAgIHJldHVybiBkc3Q7CisgICAgICAgIAorICAgIGNhc2UgU2NvcGVPZmZzZXQ6CisgICAgY2Fz
ZSBJbnZhbGlkVmFyS2luZDoKKyAgICAgICAgbV9jb2RlQmxvY2stPmFkZFByb3BlcnR5QWNjZXNz
SW5zdHJ1Y3Rpb24oaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKTsKKyAgICAgICAgCisgICAgICAgIC8v
IGdldF9mcm9tX3Njb3BlIGRzdCwgc2NvcGUsIGlkLCBSZXNvbHZlTW9kZUFuZFR5cGUsIFN0cnVj
dHVyZSwgT3BlcmFuZAorICAgICAgICBVbmxpbmtlZFZhbHVlUHJvZmlsZSBwcm9maWxlID0gZW1p
dFByb2ZpbGVkT3Bjb2RlKG9wX2dldF9mcm9tX3Njb3BlKTsKKyAgICAgICAgaW5zdHJ1Y3Rpb25z
KCkuYXBwZW5kKGtpbGwoZHN0KSk7CisgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChzY29w
ZS0+aW5kZXgoKSk7CisgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChhZGRDb25zdGFudCh2
YXJpYWJsZS5pZGVudGlmaWVyKCkpKTsKKyAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKFJl
c29sdmVNb2RlQW5kVHlwZShyZXNvbHZlTW9kZSwgdmFyaWFibGUudmFyT2Zmc2V0KCkuaXNTY29w
ZSgpID8gTG9jYWxDbG9zdXJlVmFyIDogcmVzb2x2ZVR5cGUoKSkub3BlcmFuZCgpKTsKKyAgICAg
ICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKDApOworICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBl
bmQodmFyaWFibGUudmFyT2Zmc2V0KCkuaXNTY29wZSgpID8gdmFyaWFibGUudmFyT2Zmc2V0KCku
c2NvcGVPZmZzZXQoKS5vZmZzZXQoKSA6IDApOworICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBl
bmQocHJvZmlsZSk7CisgICAgICAgIHJldHVybiBkc3Q7CisgICAgfQorICAgIAorICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKLVJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJh
dG9yOjplbWl0UHV0VG9TY29wZShSZWdpc3RlcklEKiBzY29wZSwgY29uc3QgSWRlbnRpZmllciYg
aWRlbnRpZmllciwgUmVnaXN0ZXJJRCogdmFsdWUsIFJlc29sdmVNb2RlIHJlc29sdmVNb2RlLCBj
b25zdCBSZXNvbHZlU2NvcGVJbmZvJiBpbmZvKQorUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0
b3I6OmVtaXRQdXRUb1Njb3BlKFJlZ2lzdGVySUQqIHNjb3BlLCBjb25zdCBWYXJpYWJsZSYgdmFy
aWFibGUsIFJlZ2lzdGVySUQqIHZhbHVlLCBSZXNvbHZlTW9kZSByZXNvbHZlTW9kZSkKIHsKLSAg
ICBtX2NvZGVCbG9jay0+YWRkUHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbihpbnN0cnVjdGlvbnMo
KS5zaXplKCkpOwotCi0gICAgLy8gcHV0X3RvX3Njb3BlIHNjb3BlLCBpZCwgdmFsdWUsIFJlc29s
dmVNb2RlQW5kVHlwZSwgU3RydWN0dXJlLCBPcGVyYW5kCi0gICAgZW1pdE9wY29kZShvcF9wdXRf
dG9fc2NvcGUpOwotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChzY29wZS0+aW5kZXgoKSk7Ci0g
ICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGFkZENvbnN0YW50KGlkZW50aWZpZXIpKTsKLSAgICBp
bnN0cnVjdGlvbnMoKS5hcHBlbmQodmFsdWUtPmluZGV4KCkpOwotICAgIGlmIChpbmZvLmlzTG9j
YWwoKSkgewotICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoUmVzb2x2ZU1vZGVBbmRUeXBl
KHJlc29sdmVNb2RlLCBMb2NhbENsb3N1cmVWYXIpLm9wZXJhbmQoKSk7Ci0gICAgICAgIGludCBv
cGVyYW5kID0gcmVnaXN0ZXJGb3IoaW5mby5sb2NhbEluZGV4KCkpLmluZGV4KCk7Ci0gICAgICAg
IGJvb2wgaXNXYXRjaGFibGVWYXJpYWJsZSA9IGhhc1dhdGNoYWJsZVZhcmlhYmxlKG9wZXJhbmQp
OwotICAgICAgICBBU1NFUlQoIWlzV2F0Y2hhYmxlVmFyaWFibGUgfHwgd2F0Y2hhYmxlVmFyaWFi
bGVJZGVudGlmaWVyKG9wZXJhbmQpID09IGlkZW50aWZpZXIpOwotICAgICAgICBpbnN0cnVjdGlv
bnMoKS5hcHBlbmQoaXNXYXRjaGFibGVWYXJpYWJsZSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAg
QVNTRVJUKHJlc29sdmVUeXBlKCkgIT0gTG9jYWxDbG9zdXJlVmFyKTsKLSAgICAgICAgaW5zdHJ1
Y3Rpb25zKCkuYXBwZW5kKFJlc29sdmVNb2RlQW5kVHlwZShyZXNvbHZlTW9kZSwgcmVzb2x2ZVR5
cGUoKSkub3BlcmFuZCgpKTsKLSAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGZhbHNlKTsK
LSAgICB9Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGluZm8ubG9jYWxJbmRleCgpKTsKLSAg
ICByZXR1cm4gdmFsdWU7CisgICAgc3dpdGNoICh2YXJpYWJsZS52YXJPZmZzZXQoKS5raW5kKCkp
IHsKKyAgICBjYXNlIFN0YWNrT2Zmc2V0OgorICAgICAgICBlbWl0TW92ZSh2YXJpYWJsZS5sb2Nh
bCgpLCB2YWx1ZSk7CisgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICAgICAgCisgICAgY2FzZSBD
YXB0dXJlZEFyZ3VtZW50c09mZnNldDoKKyAgICAgICAgQVNTRVJUKHNjb3BlID09IGFyZ3VtZW50
c1JlZ2lzdGVyKCkpOworICAgICAgICBlbWl0T3Bjb2RlKG9wX3B1dF90b19hcmd1bWVudHMpOwor
ICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoc2NvcGUpOworICAgICAgICBpbnN0cnVjdGlv
bnMoKS5hcHBlbmQodmFyaWFibGUudmFyT2Zmc2V0KCkuY2FwdHVyZWRBcmd1bWVudHNPZmZzZXQo
KS5vZmZzZXQoKSk7CisgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCh2YWx1ZS0+aW5kZXgo
KSk7CisgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICAgICAgCisgICAgY2FzZSBTY29wZU9mZnNl
dDoKKyAgICBjYXNlIEludmFsaWRWYXJLaW5kOiB7CisgICAgICAgIG1fY29kZUJsb2NrLT5hZGRQ
cm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uKGluc3RydWN0aW9ucygpLnNpemUoKSk7CisgICAgICAg
IAorICAgICAgICAvLyBwdXRfdG9fc2NvcGUgc2NvcGUsIGlkLCB2YWx1ZSwgUmVzb2x2ZU1vZGVB
bmRUeXBlLCBTdHJ1Y3R1cmUsIE9wZXJhbmQKKyAgICAgICAgZW1pdE9wY29kZShvcF9wdXRfdG9f
c2NvcGUpOworICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoc2NvcGUtPmluZGV4KCkpOwor
ICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYWRkQ29uc3RhbnQodmFyaWFibGUuaWRlbnQo
KSkpOworICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQodmFsdWUtPmluZGV4KCkpOworICAg
ICAgICBTY29wZU9mZnNldCBvZmZzZXQ7CisgICAgICAgIGlmICh2YXJpYWJsZS52YXJPZmZzZXQo
KS5pc1Njb3BlKCkpIHsKKyAgICAgICAgICAgIG9mZnNldCA9IHZhcmlhYmxlLnZhck9mZnNldCgp
LnNjb3BlT2Zmc2V0KCk7CisgICAgICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoUmVzb2x2
ZU1vZGVBbmRUeXBlKHJlc29sdmVNb2RlLCBMb2NhbENsb3N1cmVWYXIpLm9wZXJhbmQoKSk7Cisg
ICAgICAgICAgICBib29sIGlzV2F0Y2hhYmxlVmFyaWFibGUgPSBoYXNXYXRjaGFibGVWYXJpYWJs
ZShvZmZzZXQpOworICAgICAgICAgICAgQVNTRVJUKCFpc1dhdGNoYWJsZVZhcmlhYmxlIHx8IHdh
dGNoYWJsZVZhcmlhYmxlSWRlbnRpZmllcihvZmZzZXQpID09IGlkZW50aWZpZXIpOworICAgICAg
ICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGlzV2F0Y2hhYmxlVmFyaWFibGUpOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgQVNTRVJUKHJlc29sdmVUeXBlKCkgIT0gTG9jYWxDbG9z
dXJlVmFyKTsKKyAgICAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChSZXNvbHZlTW9kZUFu
ZFR5cGUocmVzb2x2ZU1vZGUsIHJlc29sdmVUeXBlKCkpLm9wZXJhbmQoKSk7CisgICAgICAgICAg
ICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZmFsc2UpOworICAgICAgICB9CisgICAgICAgIGluc3Ry
dWN0aW9ucygpLmFwcGVuZChvZmZzZXQuaXNWYWxpZCgpID8gb2Zmc2V0Lm9mZnNldCgpIDogMCk7
CisgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICB9IH0KKyAgICAKKyAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOwogfQogCiBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1p
dEluc3RhbmNlT2YoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiB2YWx1ZSwgUmVnaXN0ZXJJ
RCogYmFzZVByb3RvdHlwZSkKLXsgCit7CiAgICAgZW1pdE9wY29kZShvcF9pbnN0YW5jZW9mKTsK
ICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZHN0LT5pbmRleCgpKTsKICAgICBpbnN0cnVjdGlv
bnMoKS5hcHBlbmQodmFsdWUtPmluZGV4KCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAkocmV2aXNpb24g
MTgwNzIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdl
bmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODMsNTggKzE4Myw1NyBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgSXNDYXB0dXJlZAogICAgIH07CiAKLSAgICBjbGFzcyBMb2NhbCB7Cisg
ICAgY2xhc3MgVmFyaWFibGUgewogICAgIHB1YmxpYzoKLSAgICAgICAgTG9jYWwoKQotICAgICAg
ICAgICAgOiBtX2xvY2FsKDApCisgICAgICAgIGVudW0gVmFyaWFibGVLaW5kIHsgTm9ybWFsVmFy
aWFibGUsIFNwZWNpYWxWYXJpYWJsZSB9OworCisgICAgICAgIFZhcmlhYmxlKCkKKyAgICAgICAg
ICAgIDogbV9vZmZzZXQoKQorICAgICAgICAgICAgLCBtX2xvY2FsKG51bGxwdHIpCiAgICAgICAg
ICAgICAsIG1fYXR0cmlidXRlcygwKQotICAgICAgICAgICAgLCBtX2tpbmQoTm9ybWFsTG9jYWwp
CisgICAgICAgICAgICAsIG1fa2luZChOb3JtYWxWYXJpYWJsZSkKKyAgICAgICAgeworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBWYXJpYWJsZShjb25zdCBJZGVudGlmaWVyJiBpZGVudCkK
KyAgICAgICAgICAgIDogbV9pZGVudChpZGVudCkKKyAgICAgICAgICAgICwgbV9sb2NhbChudWxs
cHRyKQorICAgICAgICAgICAgLCBtX2F0dHJpYnV0ZXMoMCkKKyAgICAgICAgICAgICwgbV9raW5k
KE5vcm1hbFZhcmlhYmxlKSAvLyBUaGlzIGlzIHNvbWV3aGF0IG1lYW5pbmdsZXNzIGhlcmUgZm9y
IHRoaXMga2luZCBvZiBWYXJpYWJsZS4KICAgICAgICAgewogICAgICAgICB9CiAKLSAgICAgICAg
ZW51bSBMb2NhbEtpbmQgeyBOb3JtYWxMb2NhbCwgU3BlY2lhbExvY2FsIH07Ci0KLSAgICAgICAg
TG9jYWwoUmVnaXN0ZXJJRCogbG9jYWwsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIExvY2FsS2luZCBr
aW5kKQotICAgICAgICAgICAgOiBtX2xvY2FsKGxvY2FsKQorICAgICAgICBWYXJpYWJsZShjb25z
dCBJZGVudGlmaWVyJiBpZGVudCwgVmFyT2Zmc2V0IG9mZnNldCwgUmVnaXN0ZXJJRCogbG9jYWws
IHVuc2lnbmVkIGF0dHJpYnV0ZXMsIExvY2FsS2luZCBraW5kKQorICAgICAgICAgICAgOiBtX2lk
ZW50KGlkZW50KQorICAgICAgICAgICAgLCBtX29mZnNldChvZmZzZXQpCisgICAgICAgICAgICAs
IG1fbG9jYWwobG9jYWwpCiAgICAgICAgICAgICAsIG1fYXR0cmlidXRlcyhhdHRyaWJ1dGVzKQog
ICAgICAgICAgICAgLCBtX2tpbmQoa2luZCkKICAgICAgICAgewogICAgICAgICB9CiAKLSAgICAg
ICAgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuIG1fbG9jYWw7IH0KLQotICAgICAgICBS
ZWdpc3RlcklEKiBnZXQoKSBjb25zdCB7IHJldHVybiBtX2xvY2FsOyB9CisgICAgICAgIC8vIElm
IGl0J3MgdW5zZXQsIHRoZW4gaXQgaXMgYSBub24tbG9jYWxseS1zY29wZWQgdmFyaWFibGUuIElm
IGl0IGlzIHNldCwgdGhlbiBpdCBjb3VsZCBiZQorICAgICAgICAvLyBhIHN0YWNrIHZhcmlhYmxl
LCBhIHNjb3BlZCB2YXJpYWJsZSBpbiB0aGUgbG9jYWwgc2NvcGUsIG9yIGEgdmFyaWFibGUgY2Fw
dHVyZWQgaW4gdGhlCisgICAgICAgIC8vIGRpcmVjdCBhcmd1bWVudHMgb2JqZWN0LgorICAgICAg
ICBib29sIGlzUmVzb2x2ZWQoKSBjb25zdCB7IHJldHVybiAhIW1fb2Zmc2V0OyB9CisgICAgICAg
IAorICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCgpIGNvbnN0IHsgcmV0dXJuIG1faWRl
bnQ7IH0KKyAgICAgICAgCisgICAgICAgIFZhck9mZnNldCBvZmZzZXQoKSBjb25zdCB7IHJldHVy
biBtX29mZnNldDsgfQorICAgICAgICBib29sIGlzTG9jYWwoKSBjb25zdCB7IHJldHVybiBtX29m
ZnNldC5pc1N0YWNrKCk7IH0KKyAgICAgICAgUmVnaXN0ZXJJRCogbG9jYWwoKSBjb25zdCB7IHJl
dHVybiBtX2xvY2FsOyB9CiAKICAgICAgICAgYm9vbCBpc1JlYWRPbmx5KCkgY29uc3QgeyByZXR1
cm4gbV9hdHRyaWJ1dGVzICYgUmVhZE9ubHk7IH0KLSAgICAgICAgYm9vbCBpc1NwZWNpYWwoKSBj
b25zdCB7IHJldHVybiBtX2tpbmQgIT0gTm9ybWFsTG9jYWw7IH0KKyAgICAgICAgYm9vbCBpc1Nw
ZWNpYWwoKSBjb25zdCB7IHJldHVybiBtX2tpbmQgIT0gTm9ybWFsVmFyaWFibGU7IH0KIAogICAg
IHByaXZhdGU6CisgICAgICAgIElkZW50aWZpZXIgbV9pZGVudDsKKyAgICAgICAgVmFyT2ZmZXQg
bV9vZmZzdDsKICAgICAgICAgUmVnaXN0ZXJJRCogbV9sb2NhbDsKICAgICAgICAgdW5zaWduZWQg
bV9hdHRyaWJ1dGVzOwogICAgICAgICBMb2NhbEtpbmQgbV9raW5kOwogICAgIH07CiAKLSAgICBz
dHJ1Y3QgUmVzb2x2ZVNjb3BlSW5mbyB7Ci0gICAgICAgIFJlc29sdmVTY29wZUluZm8oKQotICAg
ICAgICAgICAgOiBtX2xvY2FsSW5kZXgoMCkKLSAgICAgICAgICAgICwgbV9yZXNvbHZlU2NvcGVL
aW5kKE5vbkxvY2FsU2NvcGUpCi0gICAgICAgIHsKLSAgICAgICAgfQotCi0gICAgICAgIFJlc29s
dmVTY29wZUluZm8oaW50IGluZGV4KQotICAgICAgICAgICAgOiBtX2xvY2FsSW5kZXgoaW5kZXgp
Ci0gICAgICAgICAgICAsIG1fcmVzb2x2ZVNjb3BlS2luZChMb2NhbFNjb3BlKQotICAgICAgICB7
Ci0gICAgICAgIH0KLQotICAgICAgICBib29sIGlzTG9jYWwoKSBjb25zdCB7IHJldHVybiBtX3Jl
c29sdmVTY29wZUtpbmQgPT0gTG9jYWxTY29wZTsgfQotICAgICAgICBpbnQgbG9jYWxJbmRleCgp
IGNvbnN0IHsgcmV0dXJuIG1fbG9jYWxJbmRleDsgfQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAg
aW50IG1fbG9jYWxJbmRleDsKLSAgICAgICAgZW51bSB7IExvY2FsU2NvcGUsIE5vbkxvY2FsU2Nv
cGUgfSBtX3Jlc29sdmVTY29wZUtpbmQ7Ci0gICAgfTsKLQogICAgIHN0cnVjdCBUcnlSYW5nZSB7
CiAgICAgICAgIFJlZlB0cjxMYWJlbD4gc3RhcnQ7CiAgICAgICAgIFJlZlB0cjxMYWJlbD4gZW5k
OwpAQCAtMjg1LDEyICsyODQsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgaXND
YXB0dXJlZChpbnQgb3BlcmFuZCk7CiAgICAgICAgIENhcHR1cmVNb2RlIGNhcHR1cmVNb2RlKGlu
dCBvcGVyYW5kKSB7IHJldHVybiBpc0NhcHR1cmVkKG9wZXJhbmQpID8gSXNDYXB0dXJlZCA6IE5v
dENhcHR1cmVkOyB9CiAgICAgICAgIAotICAgICAgICBMb2NhbCBsb2NhbChjb25zdCBJZGVudGlm
aWVyJik7Ci0gICAgICAgIExvY2FsIGNvbnN0TG9jYWwoY29uc3QgSWRlbnRpZmllciYpOwotCisg
ICAgICAgIFZhcmlhYmxlIHZhcmlhYmxlKGNvbnN0IElkZW50aWZpZXImKTsKKyAgICAgICAgCiAg
ICAgICAgIC8vIFJldHVybnMgdGhlIHJlZ2lzdGVyIHN0b3JpbmcgInRoaXMiCiAgICAgICAgIFJl
Z2lzdGVySUQqIHRoaXNSZWdpc3RlcigpIHsgcmV0dXJuICZtX3RoaXNSZWdpc3RlcjsgfQotICAg
ICAgICAKKyAgICAgICAgUmVnaXN0ZXJJRCogYXJndW1lbnRzUmVnaXN0ZXIoKSB7IHJldHVybiBt
X2FyZ3VtZW50c1JlZ2lzdGVyOyB9CiAgICAgICAgIFJlZ2lzdGVySUQqIHNjb3BlUmVnaXN0ZXIo
KSB7IHJldHVybiBtX3Njb3BlUmVnaXN0ZXI7IH0KIAogICAgICAgICAvLyBSZXR1cm5zIHRoZSBu
ZXh0IGF2YWlsYWJsZSB0ZW1wb3JhcnkgcmVnaXN0ZXIuIFJlZ2lzdGVycyByZXR1cm5lZCBieQpA
QCAtNTAyLDEwICs1MDAsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdFRv
UHJpbWl0aXZlKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogc3JjKTsKIAogICAgICAgICBS
ZXNvbHZlVHlwZSByZXNvbHZlVHlwZSgpOwotICAgICAgICBSZWdpc3RlcklEKiBlbWl0UmVzb2x2
ZUNvbnN0YW50TG9jYWwoUmVnaXN0ZXJJRCogZHN0LCBjb25zdCBJZGVudGlmaWVyJiwgUmVzb2x2
ZVNjb3BlSW5mbyYpOwotICAgICAgICBSZWdpc3RlcklEKiBlbWl0UmVzb2x2ZVNjb3BlKFJlZ2lz
dGVySUQqIGRzdCwgY29uc3QgSWRlbnRpZmllciYsIFJlc29sdmVTY29wZUluZm8mKTsKLSAgICAg
ICAgUmVnaXN0ZXJJRCogZW1pdEdldEZyb21TY29wZShSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVy
SUQqIHNjb3BlLCBjb25zdCBJZGVudGlmaWVyJiwgUmVzb2x2ZU1vZGUsIGNvbnN0IFJlc29sdmVT
Y29wZUluZm8mKTsKLSAgICAgICAgUmVnaXN0ZXJJRCogZW1pdFB1dFRvU2NvcGUoUmVnaXN0ZXJJ
RCogc2NvcGUsIGNvbnN0IElkZW50aWZpZXImLCBSZWdpc3RlcklEKiB2YWx1ZSwgUmVzb2x2ZU1v
ZGUsIGNvbnN0IFJlc29sdmVTY29wZUluZm8mKTsKKyAgICAgICAgUmVnaXN0ZXJJRCogZW1pdFJl
c29sdmVDb25zdGFudExvY2FsKFJlZ2lzdGVySUQqIGRzdCwgY29uc3QgVmFyaWFibGUmKTsKKyAg
ICAgICAgUmVnaXN0ZXJJRCogZW1pdFJlc29sdmVTY29wZShSZWdpc3RlcklEKiBkc3QsIGNvbnN0
IFZhcmlhYmxlJik7CisgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRHZXRGcm9tU2NvcGUoUmVnaXN0
ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBzY29wZSwgY29uc3QgVmFyaWFibGUmLCBSZXNvbHZlTW9k
ZSk7CisgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRQdXRUb1Njb3BlKFJlZ2lzdGVySUQqIHNjb3Bl
LCBjb25zdCBWYXJpYWJsZSYsIFJlZ2lzdGVySUQqIHZhbHVlLCBSZXNvbHZlTW9kZSk7CiAKICAg
ICAgICAgUGFzc1JlZlB0cjxMYWJlbD4gZW1pdExhYmVsKExhYmVsKik7CiAgICAgICAgIHZvaWQg
ZW1pdExvb3BIaW50KCk7CkBAIC02MTMsOSArNjExLDEyIEBAIG5hbWVzcGFjZSBKU0MgewogCiAg
ICAgICAgIC8vIEFkZHMgYSB2YXIgc2xvdCBhbmQgbWFwcyBpdCB0byB0aGUgbmFtZSBpZGVudCBp
biBzeW1ib2xUYWJsZSgpLgogICAgICAgICBlbnVtIFdhdGNoTW9kZSB7IElzV2F0Y2hhYmxlLCBO
b3RXYXRjaGFibGUgfTsKLSAgICAgICAgUmVnaXN0ZXJJRCogYWRkVmFyKGNvbnN0IElkZW50aWZp
ZXImLCBDb25zdGFudE1vZGUsIFdhdGNoTW9kZSk7Ci0KLSAgICAgICAgLy8gQWRkcyBhbiBhbm9u
eW1vdXMgdmFyIHNsb3QuIFRvIGdpdmUgdGhpcyBzbG90IGEgbmFtZSwgYWRkIGl0IHRvIHN5bWJv
bFRhYmxlKCkuCisgICAgICAgIFNjb3BlT2Zmc2V0IGFkZFNjb3BlZFZhcihjb25zdCBJZGVudGlm
aWVyJiBpZGVudCwgQ29uc3RhbnRNb2RlIGNvbnN0YW50TW9kZSwgV2F0Y2hNb2RlIHdhdGhNb2Rl
KTsKKyAgICAgICAgCisgICAgICAgIC8vIEFkZHMgYSBsb2NhbCB2YXIgc2xvdC4KKyAgICAgICAg
UmVnaXN0ZXJJRCogYWRkVmFyKGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBDb25zdGFudE1vZGUg
Y29uc3RhbnRNb2RlKTsKKyAgICAgICAgCisgICAgICAgIC8vIEFkZHMgYW4gYW5vbnltb3VzIGxv
Y2FsIHZhciBzbG90LiBUbyBnaXZlIHRoaXMgc2xvdCBhIG5hbWUsIGFkZCBpdCB0byBzeW1ib2xU
YWJsZSgpLgogICAgICAgICBSZWdpc3RlcklEKiBhZGRWYXIoKQogICAgICAgICB7CiAgICAgICAg
ICAgICArK21fY29kZUJsb2NrLT5tX251bVZhcnM7CkBAIC03MTYsOSArNzE3LDYgQEAgbmFtZXNw
YWNlIEpTQyB7CiAKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdFRocm93RXhwcmVzc2lvblRvb0Rl
ZXBFeGNlcHRpb24oKTsKIAotICAgICAgICB2b2lkIGNyZWF0ZUFyZ3VtZW50c0lmTmVjZXNzYXJ5
KCk7Ci0gICAgICAgIFJlZ2lzdGVySUQqIGNyZWF0ZUxhenlSZWdpc3RlcklmTmVjZXNzYXJ5KFJl
Z2lzdGVySUQqKTsKLSAgICAgICAgCiAgICAgICAgIGJvb2wgaGFzV2F0Y2hhYmxlVmFyaWFibGUo
aW50IG9wZXJhbmQpIGNvbnN0CiAgICAgICAgIHsKICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3Rl
ciByZWcob3BlcmFuZCk7CkBAIC03NTgsNiArNzU2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIFJlZ2lzdGVySUQgbV90aGlzUmVnaXN0ZXI7CiAgICAgICAgIFJlZ2lzdGVySUQgbV9jYWxs
ZWVSZWdpc3RlcjsKICAgICAgICAgUmVnaXN0ZXJJRCogbV9zY29wZVJlZ2lzdGVyIHsgbnVsbHB0
ciB9OworICAgICAgICBSZWdpc3RlcklEKiBtX2FyZ3VtZW50c1JlZ2lzdGVyIHsgbnVsbHB0ciB9
OwogICAgICAgICBSZWdpc3RlcklEKiBtX2xleGljYWxFbnZpcm9ubWVudFJlZ2lzdGVyIHsgbnVs
bHB0ciB9OwogICAgICAgICBSZWdpc3RlcklEKiBtX2VtcHR5VmFsdWVSZWdpc3RlciB7IG51bGxw
dHIgfTsKICAgICAgICAgUmVnaXN0ZXJJRCogbV9nbG9iYWxPYmplY3RSZWdpc3RlciB7IG51bGxw
dHIgfTsKQEAgLTc2Niw2ICs3NjUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgVmVjdG9y
PElkZW50aWZpZXIsIDE2PiBtX3dhdGNoYWJsZVZhcmlhYmxlczsKICAgICAgICAgU2VnbWVudGVk
VmVjdG9yPFJlZ2lzdGVySUQsIDMyPiBtX2NvbnN0YW50UG9vbFJlZ2lzdGVyczsKICAgICAgICAg
U2VnbWVudGVkVmVjdG9yPFJlZ2lzdGVySUQsIDMyPiBtX2NhbGxlZVJlZ2lzdGVyczsKKyAgICAg
ICAgdW5zaWduZWQgbV9udW1DYXB0dXJlZFZhcmlhYmxlczsKICAgICAgICAgU2VnbWVudGVkVmVj
dG9yPFJlZ2lzdGVySUQsIDMyPiBtX3BhcmFtZXRlcnM7CiAgICAgICAgIFNlZ21lbnRlZFZlY3Rv
cjxMYWJlbCwgMzI+IG1fbGFiZWxzOwogICAgICAgICBMYWJlbFNjb3BlU3RvcmUgbV9sYWJlbFNj
b3BlczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2Rl
Z2VuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVy
L05vZGVzQ29kZWdlbi5jcHAJKHJldmlzaW9uIDE4MDcyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTYy
LDcgKzk2Miw3IEBAIFJlZ2lzdGVySUQqIFZvaWROb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWMKICAg
ICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRMb2FkKGRzdCwganNVbmRlZmluZWQoKSk7CiB9CiAKLS8v
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUeXBlT2ZWYWx1ZU5vZGUgLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLSBUeXBlT2ZSZXNvbHZlTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQogCiBSZWdpc3RlcklEKiBUeXBlT2ZSZXNvbHZlTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2Rl
R2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RIZWFwLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEhlYXAuaAkocmV2aXNpb24gMTgwNzIwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEhlYXAuaAkod29ya2luZyBj
b3B5KQpAQCAtNDcsNyArNDcsNiBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAg
ICAgbWFjcm8oV29ybGQpIFwKICAgICBtYWNybyhTdGFjaykgXAogICAgIG1hY3JvKEhlYXApIFwK
LSAgICBtYWNybyhBcmd1bWVudHNfcmVnaXN0ZXJzKSBcCiAgICAgbWFjcm8oQnV0dGVyZmx5X3B1
YmxpY0xlbmd0aCkgXAogICAgIG1hY3JvKEJ1dHRlcmZseV92ZWN0b3JMZW5ndGgpIFwKICAgICBt
YWNybyhHZXR0ZXJTZXR0ZXJfZ2V0dGVyKSBcCkBAIC02NSw3ICs2NCw4IEBAIG5hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICBtYWNybyhJbmRleGVkQ29udGlndW91c1Byb3BlcnRp
ZXMpIFwKICAgICBtYWNybyhJbmRleGVkQXJyYXlTdG9yYWdlUHJvcGVydGllcykgXAogICAgIG1h
Y3JvKEFycmF5U3RvcmFnZVByb3BlcnRpZXMpIFwKLSAgICBtYWNybyhWYXJpYWJsZXMpIFwKKyAg
ICBtYWNybyhEaXJlY3RBcmd1bWVudHNQcm9wZXJ0aWVzKSBcCisgICAgbWFjcm8oU2NvcGVkQXJn
dW1lbnRzUHJvcGVydGllcykgXAogICAgIG1hY3JvKFR5cGVkQXJyYXlQcm9wZXJ0aWVzKSBcCiAg
ICAgbWFjcm8oSGVhcE9iamVjdENvdW50KSAvKiBVc2VkIHRvIHJlZmxlY3QgdGhlIGZhY3QgdGhh
dCBzb21lIGFsbG9jYXRpb25zIHJldmVhbCBvYmplY3QgaWRlbnRpdHkgKi9cCiAgICAgbWFjcm8o
UmVnRXhwU3RhdGUpIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJh
Y3RJbnRlcnByZXRlcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHJldmlzaW9uIDE4MDcyMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGlu
ZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTAzMCw3ICsxMDMwLDggQEAgYm9vbCBBYnN0cmFjdElu
dGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAg
ICAgICAgZm9yTm9kZShub2RlKS5zZXQobV9ncmFwaCwgbV9ncmFwaC5tX3ZtLnN0cmluZ1N0cnVj
dHVyZS5nZXQoKSk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6QXJn
dW1lbnRzOgorICAgICAgICBjYXNlIEFycmF5OjpEaXJlY3RBcmd1bWVudHM6CisgICAgICAgIGNh
c2UgQXJyYXk6OlNjb3BlZEFyZ3VtZW50czoKICAgICAgICAgICAgIGZvck5vZGUobm9kZSkubWFr
ZUhlYXBUb3AoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpJbnQz
MjoKQEAgLTE2MTcsOCArMTYxOCwxMSBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJh
Y3RTdGF0ZVR5CiAgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZToKICAgICAgICAgY2Fz
ZSBBcnJheTo6U2xvd1B1dEFycmF5U3RvcmFnZToKICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIEFycmF5OjpBcmd1bWVudHM6Ci0gICAgICAgICAgICBmaWx0ZXIobm9kZS0+Y2hpbGQx
KCksIFNwZWNBcmd1bWVudHMpOworICAgICAgICBjYXNlIEFycmF5OjpEaXJlY3RBcmd1bWVudHM6
CisgICAgICAgICAgICBmaWx0ZXIobm9kZS0+Y2hpbGQxKCksIFNwZWNEaXJlY3RBcmd1bWVudHMp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQXJyYXk6OlNjb3BlZEFyZ3VtZW50
czoKKyAgICAgICAgICAgIGZpbHRlcihub2RlLT5jaGlsZDEoKSwgU3BlY1Njb3BlZEFyZ3VtZW50
cyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6SW50OEFycmF5Ogog
ICAgICAgICAgICAgZmlsdGVyKG5vZGUtPmNoaWxkMSgpLCBTcGVjSW50OEFycmF5KTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5jcHAJKHJldmlzaW9uIDE4
MDcyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTk3LDggKzE5NywxNSBAQCBBcnJheU1vZGUgQXJyYXlNb2RlOjpyZWZp
bmUoCiAgICAgICAgIGlmIChpc1N0cmluZ1NwZWN1bGF0aW9uKGJhc2UpKQogICAgICAgICAgICAg
cmV0dXJuIHdpdGhUeXBlKEFycmF5OjpTdHJpbmcpOwogICAgICAgICAKLSAgICAgICAgaWYgKGlz
QXJndW1lbnRzU3BlY3VsYXRpb24oYmFzZSkpCi0gICAgICAgICAgICByZXR1cm4gd2l0aFR5cGUo
QXJyYXk6OkFyZ3VtZW50cyk7CisgICAgICAgIGlmIChpc0RpcmVjdEFyZ3VtZW50c1NwZWN1bGF0
aW9uKGJhc2UpIHx8IGlzU2NvcGVkQXJndW1lbnRzU3BlY3VsYXRpb24oYmFzZSkpIHsKKyAgICAg
ICAgICAgIC8vIEhhbmRsZSBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGFzIGdlbmVyaWMgYWNjZXNz
ZXMuCisgICAgICAgICAgICBpZiAoZ3JhcGguaGFzRXhpdFNpdGUobm9kZS0+b3JpZ2luLnNlbWFu
dGljLCBPdXRPZkJvdW5kcykgfHwgIWlzSW5Cb3VuZHMoKSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gQXJyYXlNb2RlKEFycmF5OjpHZW5lcmljKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
aWYgKGlzRGlyZWN0QXJndW1lbnRzU3BlY3VsYXRpb24oYmFzZSkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIHdpdGhUeXBlKEFycmF5OjpEaXJlY3RBcmd1bWVudHMpOworICAgICAgICAgICAgcmV0
dXJuIHdpdGhUeXBlKEFycmF5OjpTY29wZWRBcmd1bWVudHMpOworICAgICAgICB9CiAgICAgICAg
IAogICAgICAgICBBcnJheU1vZGUgcmVzdWx0OwogICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkp
IHsKQEAgLTM5Niw4ICs0MDMsMTEgQEAgYm9vbCBBcnJheU1vZGU6OmFscmVhZHlDaGVja2VkKEdy
YXBoJiBncgogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0gfQogICAgICAgICAK
LSAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6Ci0gICAgICAgIHJldHVybiBzcGVjdWxhdGlvbkNo
ZWNrZWQodmFsdWUubV90eXBlLCBTcGVjQXJndW1lbnRzKTsKKyAgICBjYXNlIEFycmF5OjpEaXJl
Y3RBcmd1bWVudHM6CisgICAgICAgIHJldHVybiBzcGVjdWxhdGlvbkNoZWNrZWQodmFsdWUubV90
eXBlLCBTcGVjRGlyZWN0QXJndW1lbnRzKTsKKyAgICAgICAgCisgICAgY2FzZSBBcnJheTo6U2Nv
cGVkQXJndW1lbnRzOgorICAgICAgICByZXR1cm4gc3BlY3VsYXRpb25DaGVja2VkKHZhbHVlLm1f
dHlwZSwgU3BlY1Njb3BlZEFyZ3VtZW50cyk7CiAgICAgICAgIAogICAgIGNhc2UgQXJyYXk6Oklu
dDhBcnJheToKICAgICAgICAgcmV0dXJuIHNwZWN1bGF0aW9uQ2hlY2tlZCh2YWx1ZS5tX3R5cGUs
IFNwZWNJbnQ4QXJyYXkpOwpAQCAtNDYxLDggKzQ3MSwxMCBAQCBjb25zdCBjaGFyKiBhcnJheVR5
cGVUb1N0cmluZyhBcnJheTo6VHlwCiAgICAgICAgIHJldHVybiAiQXJyYXlTdG9yYWdlIjsKICAg
ICBjYXNlIEFycmF5OjpTbG93UHV0QXJyYXlTdG9yYWdlOgogICAgICAgICByZXR1cm4gIlNsb3dQ
dXRBcnJheVN0b3JhZ2UiOwotICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czoKLSAgICAgICAgcmV0
dXJuICJBcmd1bWVudHMiOworICAgIGNhc2UgQXJyYXk6OkRpcmVjdEFyZ3VtZW50czoKKyAgICAg
ICAgcmV0dXJuICJEaXJlY3RBcmd1bWVudHMiOworICAgIGNhc2UgQXJyYXk6OlNjb3BlZEFyZ3Vt
ZW50czoKKyAgICAgICAgcmV0dXJuICJTY29wZWRBcmd1bWVudHMiOwogICAgIGNhc2UgQXJyYXk6
OkludDhBcnJheToKICAgICAgICAgcmV0dXJuICJJbnQ4QXJyYXkiOwogICAgIGNhc2UgQXJyYXk6
OkludDE2QXJyYXk6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9k
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2Rl
LmgJKHJldmlzaW9uIDE4MDcyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJy
YXlNb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDEyLCAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMi0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjUsNyArNjUsOSBAQCBlbnVtIFR5
cGUgewogICAgIEFycmF5U3RvcmFnZSwKICAgICBTbG93UHV0QXJyYXlTdG9yYWdlLAogICAgIAot
ICAgIEFyZ3VtZW50cywKKyAgICBEaXJlY3RBcmd1bWVudHMsCisgICAgU2NvcGVkQXJndW1lbnRz
LAorICAgIAogICAgIEludDhBcnJheSwKICAgICBJbnQxNkFycmF5LAogICAgIEludDMyQXJyYXks
CkBAIC0yOTQsNyArMjk2LDggQEAgcHVibGljOgogICAgICAgICBjYXNlIEFycmF5OjpVbnByb2Zp
bGVkOgogICAgICAgICBjYXNlIEFycmF5OjpGb3JjZUV4aXQ6CiAgICAgICAgIGNhc2UgQXJyYXk6
OkdlbmVyaWM6Ci0gICAgICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czoKKyAgICAgICAgY2FzZSBB
cnJheTo6RGlyZWN0QXJndW1lbnRzOgorICAgICAgICBjYXNlIEFycmF5OjpTY29wZWRBcmd1bWVu
dHM6CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKQEAgLTMyMCwxMSArMzIzLDkgQEAgcHVibGljOgogICAgIHsKICAg
ICAgICAgc3dpdGNoICh0eXBlKCkpIHsKICAgICAgICAgY2FzZSBBcnJheTo6U3RyaW5nOgorICAg
ICAgICBjYXNlIEFycmF5OjpEaXJlY3RBcmd1bWVudHM6CisgICAgICAgIGNhc2UgQXJyYXk6OlNj
b3BlZEFyZ3VtZW50czoKICAgICAgICAgICAgIHJldHVybiBBcnJheU1vZGUoQXJyYXk6OkdlbmVy
aWMpOwotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50
czoKLSAgICAgICAgICAgIHJldHVybiBBcnJheU1vZGUoQXJyYXk6OkdlbmVyaWMpOwotI2VuZGlm
CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgICAgIH0K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCShyZXZpc2lv
biAxODA3MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAko
d29ya2luZyBjb3B5KQpAQCAtNDY2LDEwICs0NjYsMTQgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBo
JiBncmFwaCwgTm9kZSogbm9kZQogICAgICAgICAgICAgZGVmKFB1cmVWYWx1ZShub2RlLCBtb2Rl
LmFzV29yZCgpKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAKLSAgICAgICAg
Y2FzZSBBcnJheTo6QXJndW1lbnRzOgotICAgICAgICAgICAgcmVhZChBcmd1bWVudHNfcmVnaXN0
ZXJzKTsKLSAgICAgICAgICAgIHJlYWQoVmFyaWFibGVzKTsKLSAgICAgICAgICAgIGRlZihIZWFw
TG9jYXRpb24oSW5kZXhlZFByb3BlcnR5TG9jLCBWYXJpYWJsZXMsIG5vZGUtPmNoaWxkMSgpLCBu
b2RlLT5jaGlsZDIoKSksIG5vZGUpOworICAgICAgICBjYXNlIEFycmF5OjpEaXJlY3RBcmd1bWVu
dHM6CisgICAgICAgICAgICByZWFkKERpcmVjdEFyZ3VtZW50c1Byb3BlcnRpZXMpOworICAgICAg
ICAgICAgZGVmKEhlYXBMb2NhdGlvbihJbmRleGVkUHJvcGVydHlMb2MsIERpcmVjdEFyZ3VtZW50
c1Byb3BlcnRpZXMsIG5vZGUtPmNoaWxkMSgpLCBub2RlLT5jaGlsZDIoKSksIG5vZGUpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXJyYXk6OlNjb3Bl
ZEFyZ3VtZW50czoKKyAgICAgICAgICAgIHJlYWQoU2NvcGVkQXJndW1lbnRzUHJvcGVydGllcyk7
CisgICAgICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEluZGV4ZWRQcm9wZXJ0eUxvYywgU2NvcGVk
QXJndW1lbnRzUHJvcGVydGllcywgbm9kZS0+Y2hpbGQxKCksIG5vZGUtPmNoaWxkMigpKSwgbm9k
ZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcnJh
eTo6SW50MzI6CkBAIC01NjAsMTMgKzU2NCw2IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3Jh
cGgsIE5vZGUqIG5vZGUKICAgICAgICAgICAgIHdyaXRlKEhlYXApOwogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czoKLSAgICAg
ICAgICAgIHJlYWQoQXJndW1lbnRzX3JlZ2lzdGVycyk7Ci0gICAgICAgICAgICByZWFkKE1pc2NG
aWVsZHMpOwotICAgICAgICAgICAgd3JpdGUoVmFyaWFibGVzKTsKLSAgICAgICAgICAgIGRlZihI
ZWFwTG9jYXRpb24oSW5kZXhlZFByb3BlcnR5TG9jLCBWYXJpYWJsZXMsIGJhc2UsIGluZGV4KSwg
dmFsdWUpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgCiAgICAgICAgIGNhc2Ug
QXJyYXk6OkludDMyOgogICAgICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzT3V0T2ZC
b3VuZHMoKSkgewogICAgICAgICAgICAgICAgIHJlYWQoV29ybGQpOwpAQCAtNzYxLDcgKzc1OCw4
IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICAgICAgICAg
IGRlZihQdXJlVmFsdWUobm9kZSwgbW9kZS5hc1dvcmQoKSkpOwogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czoKKyAgICAgICAg
Y2FzZSBBcnJheTo6RGlyZWN0QXJndW1lbnRzOgorICAgICAgICBjYXNlIEFycmF5OjpTY29wZWRB
cmd1bWVudHM6CiAgICAgICAgICAgICByZWFkKE1pc2NGaWVsZHMpOwogICAgICAgICAgICAgZGVm
KEhlYXBMb2NhdGlvbihBcnJheUxlbmd0aExvYywgTWlzY0ZpZWxkcywgbm9kZS0+Y2hpbGQxKCkp
LCBub2RlKTsKICAgICAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkocmV2aXNpb24gMTgwNzIwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjgy
LDcgKzY4Miw2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBjYXNlIEFycmF5OjpDb250aWd1b3Vz
OgogICAgICAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlOgogICAgICAgICAgICAgY2Fz
ZSBBcnJheTo6U2xvd1B1dEFycmF5U3RvcmFnZToKLSAgICAgICAgICAgIGNhc2UgQXJyYXk6OkFy
Z3VtZW50czoKICAgICAgICAgICAgICAgICBmaXhFZGdlPEtub3duQ2VsbFVzZT4oY2hpbGQxKTsK
ICAgICAgICAgICAgICAgICBmaXhFZGdlPEludDMyVXNlPihjaGlsZDIpOwogICAgICAgICAgICAg
ICAgIGluc2VydFN0b3JlQmFycmllcihtX2luZGV4SW5CbG9jaywgY2hpbGQxLCBjaGlsZDMpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
NjQuY3BwCShyZXZpc2lvbiAxODA3MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTk4LDggKzI1OTgsMTEg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBjYXNl
IEFycmF5OjpTdHJpbmc6CiAgICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPblN0cmluZyhub2Rl
KTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6Ci0g
ICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkFyZ3VtZW50cyhub2RlKTsKKyAgICAgICAgY2Fz
ZSBBcnJheTo6RGlyZWN0QXJndW1lbnRzOgorICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25E
aXJlY3RBcmd1bWVudHMobm9kZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBB
cnJheTo6U2NvcGVkQXJndW1lbnRzOgorICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25TY29w
ZWRBcmd1bWVudHMobm9kZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDog
ewogICAgICAgICAgICAgVHlwZWRBcnJheVR5cGUgdHlwZSA9IG5vZGUtPmFycmF5TW9kZSgpLnR5
cGVkQXJyYXlUeXBlKCk7CkBAIC0yODI5LDQ3ICsyODMyLDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAg
ICAgICAgICAgIAotICAgICAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6IHsKLSAgICAgICAgICAg
IEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIGNoaWxkMyk7Ci0gICAgICAgICAgICBHUFJUZW1w
b3Jhcnkgc2NyYXRjaCh0aGlzKTsKLSAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoMih0
aGlzKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgR1BSUmVnIHZhbHVlUmVnID0gdmFsdWUu
Z3ByKCk7Ci0gICAgICAgICAgICBHUFJSZWcgc2NyYXRjaFJlZyA9IHNjcmF0Y2guZ3ByKCk7Ci0g
ICAgICAgICAgICBHUFJSZWcgc2NyYXRjaDJSZWcgPSBzY3JhdGNoMi5ncHIoKTsKLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQotICAgICAgICAgICAgICAgIHJl
dHVybjsKLQotICAgICAgICAgICAgLy8gVHdvIHJlYWxseSBsYW1lIGNoZWNrcy4KLSAgICAgICAg
ICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0gICAgICAgICAgICAgICAgVW5jb3VudGFibGUsIEpTVmFs
dWVTb3VyY2UoKSwgMCwKLSAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2gzMigKLSAgICAgICAg
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsCi0g
ICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEFyZ3Vt
ZW50czo6b2Zmc2V0T2ZOdW1Bcmd1bWVudHMoKSkpKTsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9u
Q2hlY2soCi0gICAgICAgICAgICAgICAgVW5jb3VudGFibGUsIEpTVmFsdWVTb3VyY2UoKSwgMCwK
LSAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0UHRyKAotICAgICAgICAgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3MoCi0gICAgICAgICAgICAgICAgICAgICAgICBiYXNlUmVnLCBBcmd1bWVu
dHM6Om9mZnNldE9mU2xvd0FyZ3VtZW50RGF0YSgpKSkpOwotCi0gICAgICAgICAgICBtX2ppdC5t
b3ZlKHByb3BlcnR5UmVnLCBzY3JhdGNoMlJlZyk7Ci0gICAgICAgICAgICBtX2ppdC5zaWduRXh0
ZW5kMzJUb1B0cihzY3JhdGNoMlJlZywgc2NyYXRjaDJSZWcpOwotICAgICAgICAgICAgbV9qaXQu
bG9hZFB0cigKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVn
LCBBcmd1bWVudHM6Om9mZnNldE9mUmVnaXN0ZXJzKCkpLAotICAgICAgICAgICAgICAgIHNjcmF0
Y2hSZWcpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBtX2ppdC5zdG9yZTY0KAotICAgICAg
ICAgICAgICAgIHZhbHVlUmVnLAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpCYXNl
SW5kZXgoCi0gICAgICAgICAgICAgICAgICAgIHNjcmF0Y2hSZWcsIHNjcmF0Y2gyUmVnLCBNYWNy
b0Fzc2VtYmxlcjo6VGltZXNFaWdodCwKLSAgICAgICAgICAgICAgICAgICAgQ2FsbEZyYW1lOjp0
aGlzQXJndW1lbnRPZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikgKyBzaXplb2YoUmVnaXN0ZXIp
KSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG5vUmVzdWx0KG5vZGUpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAogICAgICAgICBkZWZhdWx0OiB7CiAg
ICAgICAgICAgICBUeXBlZEFycmF5VHlwZSB0eXBlID0gYXJyYXlNb2RlLnR5cGVkQXJyYXlUeXBl
KCk7CiAgICAgICAgICAgICBpZiAoaXNJbnQodHlwZSkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gMTgwNzIwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTcyMiw5ICs3MjIsMTIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2hlY2tB
cnJheShOb2RlKiBubwogICAgICAgICBub1Jlc3VsdChtX2N1cnJlbnROb2RlKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KLSAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6Ci0gICAgICAgIHNwZWN1
bGF0ZUNlbGxUeXBlV2l0aG91dFR5cGVGaWx0ZXJpbmcobm9kZS0+Y2hpbGQxKCksIGJhc2VSZWcs
IEFyZ3VtZW50c1R5cGUpOwotCisgICAgY2FzZSBBcnJheTo6RGlyZWN0QXJndW1lbnRzOgorICAg
ICAgICBzcGVjdWxhdGVDZWxsVHlwZVdpdGhvdXRUeXBlRmlsdGVyaW5nKG5vZGUtPmNoaWxkMSgp
LCBiYXNlUmVnLCBEaXJlY3RBcmd1bWVudHNUeXBlKTsKKyAgICAgICAgbm9SZXN1bHQobV9jdXJy
ZW50Tm9kZSk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFycmF5OjpTY29wZWRBcmd1bWVu
dHM6CisgICAgICAgIHNwZWN1bGF0ZUNlbGxUeXBlV2l0aG91dFR5cGVGaWx0ZXJpbmcobm9kZS0+
Y2hpbGQxKCksIGJhc2VSZWcsIFNjb3BlZEFyZ3VtZW50c1R5cGUpOwogICAgICAgICBub1Jlc3Vs
dChtX2N1cnJlbnROb2RlKTsKICAgICAgICAgcmV0dXJuOwogICAgIGRlZmF1bHQ6CkBAIC00MDg4
LDcgKzQwOTEsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0VHlwZWRBcnJhCiAg
ICAgaW50MzJSZXN1bHQodmVjdG9yR1BSLCBub2RlKTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZUdldEJ5VmFsT25Bcmd1bWVudHMoTm9kZSogbm9kZSkKK3ZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uRGlyZWN0QXJndW1lbnRzKE5vZGUqIG5vZGUpCiB7CiAg
ICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAg
U3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG5vZGUtPmNoaWxkMigp
KTsKQEAgLTQxMDMsODAgKzQxMDYsODkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdl
dEJ5VmFsT25BcgogICAgIEdQUlJlZyByZXN1bHRSZWcgPSByZXN1bHQuZ3ByKCk7CiAjaWYgVVNF
KEpTVkFMVUUzMl82NCkKICAgICBHUFJSZWcgcmVzdWx0VGFnUmVnID0gcmVzdWx0VGFnLmdwcigp
OworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZXN1bHRUYWdSZWcs
IHJlc3VsdFJlZyk7CisjZWxzZQorICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVl
UmVncyhyZXN1bHRSZWcpOwogI2VuZGlmCiAgICAgR1BSUmVnIHNjcmF0Y2hSZWcgPSBzY3JhdGNo
LmdwcigpOwogICAgIAogICAgIGlmICghbV9jb21waWxlT2theSkKICAgICAgICAgcmV0dXJuOwot
ICAKLSAgICBBU1NFUlQoQXJyYXlNb2RlKEFycmF5OjpBcmd1bWVudHMpLmFscmVhZHlDaGVja2Vk
KG1faml0LmdyYXBoKCksIG5vZGUsIG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSkpKTsK
ICAgICAKLSAgICAvLyBUd28gcmVhbGx5IGxhbWUgY2hlY2tzLgotICAgIHNwZWN1bGF0aW9uQ2hl
Y2soCi0gICAgICAgIEV4b3RpY09iamVjdE1vZGUsIEpTVmFsdWVTb3VyY2UoKSwgMCwKLSAgICAg
ICAgbV9qaXQuYnJhbmNoMzIoCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVx
dWFsLCBwcm9wZXJ0eVJlZywKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJh
c2VSZWcsIEFyZ3VtZW50czo6b2Zmc2V0T2ZOdW1Bcmd1bWVudHMoKSkpKTsKKyAgICBBU1NFUlQo
QXJyYXlNb2RlKEFycmF5OjpEaXJlY3RBcmd1bWVudHMpLmFscmVhZHlDaGVja2VkKG1faml0Lmdy
YXBoKCksIG5vZGUsIG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSkpKTsKKyAgICAKICAg
ICBzcGVjdWxhdGlvbkNoZWNrKAogICAgICAgICBFeG90aWNPYmplY3RNb2RlLCBKU1ZhbHVlU291
cmNlKCksIDAsCiAgICAgICAgIG1faml0LmJyYW5jaFRlc3RQdHIoCiAgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6Tm9uWmVybywKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KAotICAgICAgICAgICAgICAgIGJhc2VSZWcsIEFyZ3VtZW50czo6b2Zmc2V0T2ZTbG93QXJndW1l
bnREYXRhKCkpKSk7Ci0gICAgCi0gICAgbV9qaXQubW92ZShwcm9wZXJ0eVJlZywgcmVzdWx0UmVn
KTsKLSAgICBtX2ppdC5zaWduRXh0ZW5kMzJUb1B0cihyZXN1bHRSZWcsIHJlc3VsdFJlZyk7Ci0g
ICAgbV9qaXQubG9hZFB0cigKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJl
ZywgQXJndW1lbnRzOjpvZmZzZXRPZlJlZ2lzdGVycygpKSwKLSAgICAgICAgc2NyYXRjaFJlZyk7
CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBEaXJlY3RBcmd1
bWVudHM6Om9mZnNldE9mT3ZlcnJpZGVzKCkpKSk7CisgICAgc3BlY3VsYXRpb25DaGVjaygKKyAg
ICAgICAgRXhvdGljT2JqZWN0TW9kZSwgSlNWYWx1ZVNvdXJjZSgpLCAwLAorICAgICAgICBtX2pp
dC5icmFuY2gzMigKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHBy
b3BlcnR5UmVnLAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywg
RGlyZWN0QXJndW1lbnRzOjpvZmZzZXRPZkxlbmd0aCgpKSkpOwogICAgIAotI2lmIFVTRShKU1ZB
TFVFMzJfNjQpCi0gICAgbV9qaXQubG9hZDMyKAotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QmFz
ZUluZGV4KAotICAgICAgICAgICAgc2NyYXRjaFJlZywgcmVzdWx0UmVnLCBNYWNyb0Fzc2VtYmxl
cjo6VGltZXNFaWdodCwKLSAgICAgICAgICAgIENhbGxGcmFtZTo6dGhpc0FyZ3VtZW50T2Zmc2V0
KCkgKiBzaXplb2YoUmVnaXN0ZXIpICsgc2l6ZW9mKFJlZ2lzdGVyKSArCi0gICAgICAgICAgICBP
QkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSksCi0gICAgICAgIHJlc3VsdFRh
Z1JlZyk7Ci0gICAgbV9qaXQubG9hZDMyKAotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QmFzZUlu
ZGV4KAotICAgICAgICAgICAgc2NyYXRjaFJlZywgcmVzdWx0UmVnLCBNYWNyb0Fzc2VtYmxlcjo6
VGltZXNFaWdodCwKLSAgICAgICAgICAgIENhbGxGcmFtZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCkg
KiBzaXplb2YoUmVnaXN0ZXIpICsgc2l6ZW9mKFJlZ2lzdGVyKSArCi0gICAgICAgICAgICBPQkpF
Q1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpLAotICAgICAgICByZXN1bHRS
ZWcpOwotICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0VGFnUmVnLCByZXN1bHRSZWcsIG5vZGUpOwot
I2Vsc2UKLSAgICBtX2ppdC5sb2FkNjQoCisgICAgbV9qaXQubG9hZFZhbHVlKAogICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KAotICAgICAgICAgICAgc2NyYXRjaFJlZywgcmVzdWx0
UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwKLSAgICAgICAgICAgIENhbGxGcmFtZTo6
dGhpc0FyZ3VtZW50T2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpICsgc2l6ZW9mKFJlZ2lzdGVy
KSksCi0gICAgICAgIHJlc3VsdFJlZyk7Ci0gICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWcsIG5v
ZGUpOwotI2VuZGlmCisgICAgICAgICAgICBiYXNlUmVnLCBwcm9wZXJ0eVJlZywgVGltZXNFaWdo
dCwgRGlyZWN0QXJndW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCkpLAorICAgICAgICByZXN1bHRSZWdz
KTsKKyAgICAKKyAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG5vZGUpOwogfQogCi12b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QXJndW1lbnRzTGVuZ3RoKE5vZGUqIG5vZGUpCit2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPblNjb3BlZEFyZ3VtZW50cyhOb2Rl
KiBub2RlKQogewogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hp
bGQxKCkpOwotICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgUmV1c2UsIGJhc2UpOworICAg
IFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBub2RlLT5jaGlsZDIo
KSk7CisgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKKyNpZiBVU0UoSlNWQUxVRTMyXzY0
KQorICAgIEdQUlRlbXBvcmFyeSByZXN1bHRUYWcodGhpcyk7CisjZW5kaWYKKyAgICBHUFJUZW1w
b3Jhcnkgc2NyYXRjaCh0aGlzKTsKKyAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaDIodGhpcyk7CiAg
ICAgCiAgICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdwcigpOworICAgIEdQUlJlZyBwcm9wZXJ0
eVJlZyA9IHByb3BlcnR5LmdwcigpOwogICAgIEdQUlJlZyByZXN1bHRSZWcgPSByZXN1bHQuZ3By
KCk7CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICBHUFJSZWcgcmVzdWx0VGFnUmVnID0gcmVz
dWx0VGFnLmdwcigpOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhy
ZXN1bHRUYWdSZWcsIHJlc3VsdFJlZyk7CisjZWxzZQorICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJl
Z3MgPSBKU1ZhbHVlUmVncyhyZXN1bHRSZWcpOworI2VuZGlmCisgICAgR1BSUmVnIHNjcmF0Y2hS
ZWcgPSBzY3JhdGNoLmdwcigpOworICAgIEdQUlJlZyBzY3JhdGNoMlJlZyA9IHNjcmF0Y2gyLmdw
cigpOwogICAgIAogICAgIGlmICghbV9jb21waWxlT2theSkKICAgICAgICAgcmV0dXJuOwogICAg
IAotICAgIEFTU0VSVChBcnJheU1vZGUoQXJyYXk6OkFyZ3VtZW50cykuYWxyZWFkeUNoZWNrZWQo
bV9qaXQuZ3JhcGgoKSwgbm9kZSwgbV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgpKSkpOwor
ICAgIEFTU0VSVChBcnJheU1vZGUoQXJyYXk6OlNjb3BlZEFyZ3VtZW50cykuYWxyZWFkeUNoZWNr
ZWQobV9qaXQuZ3JhcGgoKSwgbm9kZSwgbV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgpKSkp
OworICAgIAorICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJl
ZywgU2NvcGVkQXJndW1lbnRzOjpvZmZzZXRPZlRhYmxlKCkpLCBzY3JhdGNoUmVnKTsKKyAgICBt
X2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIFNjb3BlZEFyZ3Vt
ZW50czo6b2Zmc2V0T2ZTY29wZSgpKSwgc2NyYXRjaDJSZWcpOwogICAgIAogICAgIHNwZWN1bGF0
aW9uQ2hlY2soCiAgICAgICAgIEV4b3RpY09iamVjdE1vZGUsIEpTVmFsdWVTb3VyY2UoKSwgMCwK
LSAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDgoCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
Tm9uWmVybywKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEFy
Z3VtZW50czo6b2Zmc2V0T2ZPdmVycm9kZUxlbmd0aCgpKSkpOworICAgICAgICBtX2ppdC5icmFu
Y2gzMigKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5
UmVnLAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoU2NvcGVkQXJndW1lbnRz
VGFibGU6Om9mZnNldE9mTGVuZ3RoKCkpKSk7CisgICAgCisgICAgbV9qaXQubG9hZFB0cigKKyAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaFJlZywgU2NvcGVkQXJndW1lbnRz
VGFibGU6Om9mZnNldE9mQXJndW1lbnRzKCkpLAorICAgICAgICBzY3JhdGNoUmVnKTsKKyAgICBt
X2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzY3JhdGNoUmVnLCBwcm9wZXJ0
eVJlZywgVGltZXNGb3VyKSwgc2NyYXRjaFJlZyk7CisgICAgCisgICAgc3BlY3VsYXRpb25DaGVj
aygKKyAgICAgICAgRXhvdGljT2JqZWN0TW9kZSwgSlNWYWx1ZVNvdXJjZSgpLCAwLAorICAgICAg
ICBtX2ppdC5icmFuY2gzMigKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgc2Ny
YXRjaFJlZywgVHJ1c3RlZEltbTMyKFNjb3BlT2Zmc2V0OjppbnZhbGlkT2Zmc2V0KSkpOworICAg
IAorICAgIG1faml0LmxvYWRWYWx1ZSgKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRl
eCgKKyAgICAgICAgICAgIGJhc2UyUmVnLCBwcm9wZXJ0eVJlZywgVGltZXNFaWdodCwgSlNFbnZp
cm9ubWVudFJlY29yZDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSksCisgICAgICAgIHJlc3VsdFJlZ3Mp
OwogICAgIAotICAgIG1faml0LmxvYWQzMigKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3MoYmFzZVJlZywgQXJndW1lbnRzOjpvZmZzZXRPZk51bUFyZ3VtZW50cygpKSwKLSAgICAgICAg
cmVzdWx0UmVnKTsKLSAgICBpbnQzMlJlc3VsdChyZXN1bHRSZWcsIG5vZGUpOworICAgIGpzVmFs
dWVSZXN1bHQocmVzdWx0UmVncywgbm9kZSk7CiB9CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVHZXRTY29wZShOb2RlKiBub2RlKQpAQCAtNDIzMiw4ICs0MjQ0LDU2IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRBcnJheUxlbmcKICAgICAgICAgaW50MzJSZXN1bHQocmVz
dWx0R1BSLCBub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIGNhc2UgQXJyYXk6OkFy
Z3VtZW50czogewotICAgICAgICBjb21waWxlR2V0QXJndW1lbnRzTGVuZ3RoKG5vZGUpOworICAg
IGNhc2UgQXJyYXk6OkRpcmVjdEFyZ3VtZW50czogeworICAgICAgICBTcGVjdWxhdGVDZWxsT3Bl
cmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHJl
c3VsdCh0aGlzLCBSZXVzZSwgYmFzZSk7CisgICAgICAgIAorICAgICAgICBHUFJSZWcgYmFzZVJl
ZyA9IGJhc2UuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRSZWcgPSByZXN1bHQuZ3ByKCk7
CisgICAgICAgIAorICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIAorICAgICAgICBBU1NFUlQoQXJyYXlNb2RlKEFycmF5OjpEaXJlY3RBcmd1
bWVudHMpLmFscmVhZHlDaGVja2VkKG1faml0LmdyYXBoKCksIG5vZGUsIG1fc3RhdGUuZm9yTm9k
ZShub2RlLT5jaGlsZDEoKSkpKTsKKyAgICAgICAgCisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2so
CisgICAgICAgICAgICBFeG90aWNPYmplY3RNb2RlLCBKU1ZhbHVlU291cmNlKCksIDAsCisgICAg
ICAgICAgICBtX2ppdC5icmFuY2hUZXN0UHRyKAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpOb25aZXJvLAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJh
c2VSZWcsIERpcmVjdEFyZ3VtZW50czo6b2Zmc2V0T2ZPdmVycmlkZXMoKSkpKTsKKyAgICAgICAg
CisgICAgICAgIG1faml0LmxvYWQzMigKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKGJhc2VSZWcsIERpcmVjdEFyZ3VtZW50czo6b2Zmc2V0T2ZMZW5ndGgoKSksIHJlc3VsdFJl
Zyk7CisgICAgICAgIAorICAgICAgICBpbnQzMlJlc3VsdChyZXN1bHRSZWcsIG5vZGUpOworICAg
ICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBBcnJheTo6U2NvcGVkQXJndW1lbnRzOiB7Cisg
ICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwor
ICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIFJldXNlLCBiYXNlKTsKKyAgICAgICAg
CisgICAgICAgIEdQUlJlZyBiYXNlUmVnID0gYmFzZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJl
c3VsdFJlZyA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgCisgICAgICAgIGlmICghbV9jb21waWxl
T2theSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIEFTU0VSVChBcnJh
eU1vZGUoQXJyYXk6OlNjb3BlZEFyZ3VtZW50cykuYWxyZWFkeUNoZWNrZWQobV9qaXQuZ3JhcGgo
KSwgbm9kZSwgbV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgpKSkpOworICAgICAgICAKKyAg
ICAgICAgc3BlY3VsYXRpb25DaGVjaygKKyAgICAgICAgICAgIEV4b3RpY09iamVjdE1vZGUsIEpT
VmFsdWVTb3VyY2UoKSwgMCwKKyAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3Q4KAorICAgICAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLAorICAgICAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIFNjb3BlZEFyZ3VtZW50czo6b2Zmc2V0T2ZPdmVy
cm9kZVRoaW5ncygpKSkpOworICAgICAgICAKKyAgICAgICAgbV9qaXQubG9hZFB0cigKKyAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIFNjb3BlZEFyZ3VtZW50czo6
b2Zmc2V0T2ZUYWJsZSgpKSwgcmVzdWx0UmVnKTsKKyAgICAgICAgCisgICAgICAgIG1faml0Lmxv
YWQzMigKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJlc3VsdFJlZywgU2Nv
cGVkQXJndW1lbnRzVGFibGU6Om9mZnNldE9mTGVuZ3RoKCkpLAorICAgICAgICAgICAgcmVzdWx0
UmVnKTsKKyAgICAgICAgCisgICAgICAgIGludDMyUmVzdWx0KHJlc3VsdFJlZywgbm9kZSk7CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KICAgICBkZWZhdWx0OiB7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCShyZXZpc2lvbiAxODA3MjApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHdvcmtpbmcg
Y29weSkKQEAgLTIxNTIsOCArMjE1Miw5IEBAIHB1YmxpYzoKICAgICB2b2lkIGNvbXBpbGVHZXRC
eVZhbE9uU3RyaW5nKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVGcm9tQ2hhckNvZGUoTm9kZSop
OyAKIAotICAgIHZvaWQgY29tcGlsZUdldEJ5VmFsT25Bcmd1bWVudHMoTm9kZSopOwotICAgIHZv
aWQgY29tcGlsZUdldEFyZ3VtZW50c0xlbmd0aChOb2RlKik7CisgICAgdm9pZCBjb21waWxlR2V0
QnlWYWxPbkRpcmVjdEFyZ3VtZW50cyhOb2RlKik7CisgICAgdm9pZCBjb21waWxlR2V0QnlWYWxP
blNjb3BlZEFyZ3VtZW50cyhOb2RlKik7CisgICAgCiAgICAgdm9pZCBjb21waWxlR2V0U2NvcGUo
Tm9kZSopOwogICAgIHZvaWQgY29tcGlsZVNraXBTY29wZShOb2RlKik7CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9y
eS5oCShyZXZpc2lvbiAxODA3MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFi
c3RyYWN0SGVhcFJlcG9zaXRvcnkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00Niw2ICs0Niw4IEBA
IG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKICAgICBtYWNybyhCdXR0ZXJmbHlfcHVi
bGljTGVuZ3RoLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpIFwKICAgICBtYWNy
byhCdXR0ZXJmbHlfdmVjdG9yTGVuZ3RoLCBCdXR0ZXJmbHk6Om9mZnNldE9mVmVjdG9yTGVuZ3Ro
KCkpIFwKICAgICBtYWNybyhDYWxsRnJhbWVfY2FsbGVyRnJhbWUsIENhbGxGcmFtZTo6Y2FsbGVy
RnJhbWVPZmZzZXQoKSkgXAorICAgIG1hY3JvKERpcmVjdEFyZ3VtZW50c19sZW5ndGgsIERpcmVj
dEFyZ3VtZW50czo6b2Zmc2V0T2ZMZW5ndGgoKSkgXAorICAgIG1hY3JvKERpcmVjdEFyZ3VtZW50
c19vdmVycmlkZXMsIERpcmVjdEFyZ3VtZW50czo6b2Zmc2V0T2ZPdmVycmlkZXMoKSkgXAogICAg
IG1hY3JvKEdldHRlclNldHRlcl9nZXR0ZXIsIEdldHRlclNldHRlcjo6b2Zmc2V0T2ZHZXR0ZXIo
KSkgXAogICAgIG1hY3JvKEdldHRlclNldHRlcl9zZXR0ZXIsIEdldHRlclNldHRlcjo6b2Zmc2V0
T2ZTZXR0ZXIoKSkgXAogICAgIG1hY3JvKEpTQXJyYXlCdWZmZXJWaWV3X2xlbmd0aCwgSlNBcnJh
eUJ1ZmZlclZpZXc6Om9mZnNldE9mTGVuZ3RoKCkpIFwKQEAgLTcyLDYgKzc0LDExIEBAIG5hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKICAgICBtYWNybyhKU1dyYXBwZXJPYmplY3RfaW50
ZXJuYWxWYWx1ZSwgSlNXcmFwcGVyT2JqZWN0OjppbnRlcm5hbFZhbHVlT2Zmc2V0KCkpIFwKICAg
ICBtYWNybyhNYXJrZWRBbGxvY2F0b3JfZnJlZUxpc3RIZWFkLCBNYXJrZWRBbGxvY2F0b3I6Om9m
ZnNldE9mRnJlZUxpc3RIZWFkKCkpIFwKICAgICBtYWNybyhNYXJrZWRCbG9ja19tYXJrQml0cywg
TWFya2VkQmxvY2s6Om9mZnNldE9mTWFya3MoKSkgXAorICAgIG1hY3JvKFNjb3BlZEFyZ3VtZW50
c19vdmVycm9kZVRoaW5ncywgU2NvcGVkQXJndW1lbnRzOjpvZmZzZXRPZk92ZXJyb2RlVGhpbmdz
KCkpKSBcCisgICAgbWFjcm8oU2NvcGVkQXJndW1lbnRzX3Njb3BlLCBTY29wZWRBcmd1bWVudHM6
Om9mZmV0T2ZTY29wZSgpKSkgXAorICAgIG1hY3JvKFNjb3BlZEFyZ3VtZW50c190YWJsZSwgU2Nv
cGVkQXJndW1lbnRzOjpvZmZldE9mVGFibGUoKSkpIFwKKyAgICBtYWNybyhTY29wZWRBcmd1bWVu
dHNUYWJsZV9hcmd1bWVudHMsIFNjb3BlZEFyZ3VtZW50c1RhYmxlOjpvZmZldE9mQXJndW1lbnRz
KCkpKSBcCisgICAgbWFjcm8oU2NvcGVkQXJndW1lbnRzVGFibGVfbGVuZ3RoLCBTY29wZWRBcmd1
bWVudHNUYWJsZTo6b2ZmZXRPZkxlbmd0aCgpKSkgXAogICAgIG1hY3JvKFN0cmluZ0ltcGxfZGF0
YSwgU3RyaW5nSW1wbDo6ZGF0YU9mZnNldCgpKSBcCiAgICAgbWFjcm8oU3RyaW5nSW1wbF9oYXNo
QW5kRmxhZ3MsIFN0cmluZ0ltcGw6OmZsYWdzT2Zmc2V0KCkpIFwKICAgICBtYWNybyhTdHJ1Y3R1
cmVfY2xhc3NJbmZvLCBTdHJ1Y3R1cmU6OmNsYXNzSW5mb09mZnNldCgpKSBcCkBAIC04MCw2ICs4
Nyw4IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKICAgICBtYWNybyhTdHJ1Y3R1
cmVfc3RydWN0dXJlSUQsIFN0cnVjdHVyZTo6c3RydWN0dXJlSURPZmZzZXQoKSkKIAogI2RlZmlu
ZSBGT1JfRUFDSF9JTkRFWEVEX0FCU1RSQUNUX0hFQVAobWFjcm8pIFwKKyAgICBtYWNybyhEaXJl
Y3RBcmd1bWVudHNfc3RvcmFnZSwgRGlyZWN0QXJndW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCksIHNp
emVvZihFbmNvZGVkSlNWYWx1ZSkpIFwKKyAgICBtYWNybyhKU0Vudmlyb25tZW50UmVjb3JkX3Zh
cmlhYmxlLCBKU0Vudmlyb25tZW50UmVjb3JkOjpvZmZzZXRPZlZhcmlhYmxlcygpLCBzaXplb2Yo
RW5jb2RlZEpTVmFsdWUpKSBcCiAgICAgbWFjcm8oSlNSb3BlU3RyaW5nX2ZpYmVycywgSlNSb3Bl
U3RyaW5nOjpvZmZzZXRPZkZpYmVycygpLCBzaXplb2YoV3JpdGVCYXJyaWVyPEpTU3RyaW5nPikp
IFwKICAgICBtYWNybyhjaGFyYWN0ZXJzOCwgMCwgc2l6ZW9mKExDaGFyKSkgXAogICAgIG1hY3Jv
KGNoYXJhY3RlcnMxNiwgMCwgc2l6ZW9mKFVDaGFyKSkgXApAQCAtODcsNiArOTYsNyBAQCBuYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAgICAgbWFjcm8oaW5kZXhlZERvdWJsZVByb3Bl
cnRpZXMsIDAsIHNpemVvZihkb3VibGUpKSBcCiAgICAgbWFjcm8oaW5kZXhlZENvbnRpZ3VvdXNQ
cm9wZXJ0aWVzLCAwLCBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSBcCiAgICAgbWFjcm8oaW5kZXhl
ZEFycmF5U3RvcmFnZVByb3BlcnRpZXMsIDAsIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpIFwKKyAg
ICBtYWNybyhzY29wZWRBcmd1ZW1udHNUYWJsZUFyZ3VtZW50cywgMCwgc2l6ZW9mKGludDMyX3Qp
KSBcCiAgICAgbWFjcm8oc2luZ2xlQ2hhcmFjdGVyU3RyaW5ncywgMCwgc2l6ZW9mKEpTU3RyaW5n
KikpIFwKICAgICBtYWNybyh2YXJpYWJsZXMsIDAsIHNpemVvZihSZWdpc3RlcikpCiAgICAgCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCShy
ZXZpc2lvbiAxODA3MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxp
dGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwOSw2ICsyMDksOCBAQCBpbmxpbmUgQ2FwYWJp
bGl0eUxldmVsIGNhbkNvbXBpbGUoTm9kZSogCiAgICAgICAgIGNhc2UgQXJyYXk6OkludDMyOgog
ICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6CiAgICAgICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3Vv
dXM6CisgICAgICAgIGNhc2UgQXJyYXk6OkRpcmVjdEFyZ3VtZW50czoKKyAgICAgICAgY2FzZSBB
cnJheTo6U2NvcGVkQXJndW1lbnRzOgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1
bHQ6CiAgICAgICAgICAgICBpZiAoaXNUeXBlZFZpZXcobm9kZS0+YXJyYXlNb2RlKCkudHlwZWRB
cnJheVR5cGUoKSkpCkBAIC0yMjIsNiArMjI0LDggQEAgaW5saW5lIENhcGFiaWxpdHlMZXZlbCBj
YW5Db21waWxlKE5vZGUqIAogICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6CiAgICAgICAgIGNh
c2UgQXJyYXk6OkNvbnRpZ3VvdXM6CiAgICAgICAgIGNhc2UgQXJyYXk6OlN0cmluZzoKKyAgICAg
ICAgY2FzZSBBcnJheTo6RGlyZWN0QXJndW1lbnRzOgorICAgICAgICBjYXNlIEFycmF5OjpTY29w
ZWRBcmd1bWVudHM6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKICAgICAg
ICAgICAgIGlmIChpc1R5cGVkVmlldyhub2RlLT5hcnJheU1vZGUoKS50eXBlZEFycmF5VHlwZSgp
KSkKQEAgLTI0OCw2ICsyNTIsOCBAQCBpbmxpbmUgQ2FwYWJpbGl0eUxldmVsIGNhbkNvbXBpbGUo
Tm9kZSogCiAgICAgICAgIGNhc2UgQXJyYXk6OkludDMyOgogICAgICAgICBjYXNlIEFycmF5OjpE
b3VibGU6CiAgICAgICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6CisgICAgICAgIGNhc2UgQXJy
YXk6OkRpcmVjdEFyZ3VtZW50czoKKyAgICAgICAgY2FzZSBBcnJheTo6U2NvcGVkQXJndW1lbnRz
OgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBpZiAo
aXNUeXBlZFZpZXcobm9kZS0+YXJyYXlNb2RlKCkudHlwZWRBcnJheVR5cGUoKSkpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkocmV2
aXNpb24gMTgwNzIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1Rv
TExWTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxOTUsNiArMjE5NSwyNSBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgICAgICAKKyAgICAgICAgY2Fz
ZSBBcnJheTo6RGlyZWN0QXJndW1lbnRzOiB7CisgICAgICAgICAgICBMVmFsdWUgYXJndW1lbnRz
ID0gbG93Q2VsbChtX291dC0+Y2hpbGQxKCkpOworICAgICAgICAgICAgc3BlY3VsYXRlKAorICAg
ICAgICAgICAgICAgIEV4b3RpY09iamVjdE1vZGUsIG5vVmFsdWUoKSwgbnVsbHB0ciwKKyAgICAg
ICAgICAgICAgICBtX291dC5ub3ROdWxsKG1fb3V0LmxvYWRQdHIoYXJndW1lbnRzLCBtX2hlYXBz
LkRpcmVjdEFyZ3VtZW50c19vdmVycmlkZXMpKSk7CisgICAgICAgICAgICBzZXRJbnQzMihtX291
dC5sb2FkMzJOb25OZWdhdGl2ZShhcmd1bWVudHMsIG1faGVhcHMuRGlyZWN0QXJndW1lbnRzX2xl
bmd0aCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgICAgICAKKyAg
ICAgICAgY2FzZSBBcnJheTo6U2NvcGVkQXJndW1lbnRzOiB7CisgICAgICAgICAgICBMVmFsdWUg
YXJndW1lbnRzID0gbG93Q2VsbChtX291dC0+Y2hpbGQxKCkpOworICAgICAgICAgICAgc3BlY3Vs
YXRlKAorICAgICAgICAgICAgICAgIEV4b3RpY09iamVjdE1vZGUsIG5vVmFsdWUoKSwgbnVsbHB0
ciwKKyAgICAgICAgICAgICAgICBtX291dC5ub3RaZXJvOChtX291dC5sb2FkUHRyKGFyZ3VtZW50
cywgbV9oZWFwcy5TY29wZWRBcmd1bWVudHNfb3ZlcnJvZGVUaGluZ3MpKSk7CisgICAgICAgICAg
ICBMVmFsdWUgdGFibGUgPSBtX291dC5sb2FkUHRyKGFyZ3VtZW50cywgbV9oZWFwcy5TY29wZWRB
cmd1bWVudHNfdGFibGUpOworICAgICAgICAgICAgc2V0SW50MzIobV9vdXQubG9hZDMyTm9uTmVn
YXRpdmUodGFibGUsIG1faGVhcHMuU2NvcGVkQXJndW1lbnRzVGFibGVfbGVuZ3RoKSk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgICAgIAogICAgICAgICBkZWZhdWx0
OgogICAgICAgICAgICAgaWYgKGlzVHlwZWRWaWV3KG1fbm9kZS0+YXJyYXlNb2RlKCkudHlwZWRB
cnJheVR5cGUoKSkpIHsKICAgICAgICAgICAgICAgICBzZXRJbnQzMigKQEAgLTIzMTIsNiArMjMz
MSw0OSBAQCBwcml2YXRlOgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAg
ICAgICAKKyAgICAgICAgY2FzZSBBcnJheTo6RGlyZWN0QXJndW1lbnRzOiB7CisgICAgICAgICAg
ICBMVmFsdWUgYmFzZSA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBM
VmFsdWUgaW5kZXggPSBsb3dJbnQzMihtX25vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgc3BlY3VsYXRlKAorICAgICAgICAgICAgICAgIEV4b3RpY09iamVjdE1vZGUs
IG5vVmFsdWUoKSwgbnVsbHB0ciwKKyAgICAgICAgICAgICAgICBtX291dC5ub25OdWxsKG1fb3V0
LmxvYWRQdHIoYmFzZSwgbV9oZWFwcy5EaXJlY3RBcmd1bWVudHNfb3ZlcnJpZGVzKSkpOworICAg
ICAgICAgICAgc3BlY3VsYXRlKAorICAgICAgICAgICAgICAgIEV4b3RpY09iamVjdE1vZGUsIG5v
VmFsdWUoKSwgbnVsbHB0ciwKKyAgICAgICAgICAgICAgICBtX291dC5hYm92ZU9yRXF1YWwoCisg
ICAgICAgICAgICAgICAgICAgIGluZGV4LAorICAgICAgICAgICAgICAgICAgICBtX291dC5sb2Fk
MzJOb25OZWdhdGl2ZShiYXNlLCBtX2hlYXBzLkRpcmVjdEFyZ3VtZW50c19sZW5ndGgpKSk7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIHNldEpTVmFsdWUobV9vdXQubG9hZDY0KGJhc2VJbmRl
eChtX2hlYXBzLkRpcmVjdEFyZ3VtZW50c19zdG9yYWdlLCBiYXNlLCBpbmRleCkpKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXJy
YXk6OlNjb3BlZEFyZ3VtZW50czogeworICAgICAgICAgICAgTFZhbHVlIGJhc2UgPSBsb3dDZWxs
KG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgTFZhbHVlIGluZGV4ID0gbG93SW50MzIo
bV9ub2RlLT5jaGlsZDIoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIExWYWx1ZSB0YWJs
ZSA9IG1fb3V0LmxvYWRQdHIoYmFzZSwgbV9oZWFwcy5TY29wZWRBcmd1bWVudHNfdGFibGUpOwor
ICAgICAgICAgICAgTFZhbHVlIHNjb3BlID0gbV9vdXQubG9hZFB0cihiYXNlLCBtX2hlYXBzLlNj
b3BlZEFyZ3VtZW50c19zY29wZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHNwZWN1bGF0
ZSgKKyAgICAgICAgICAgICAgICBFeG90aWNPYmplY3RNb2RlLCBub1ZhbHVlKCksIG51bGxwdHIs
CisgICAgICAgICAgICAgICAgbV9vdXQuYWJvdmVPckVxdWFsKAorICAgICAgICAgICAgICAgICAg
ICBpbmRleCwKKyAgICAgICAgICAgICAgICAgICAgbV9vdXQubG9hZDMyTm9uTmVnYXRpdmUoYmFz
ZSwgbV9oZWFwcy5TY29wZWRBcmd1bWVudHNUYWJsZV9sZW5ndGgpKSk7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIExWYWx1ZSBhcmd1bWVudHMgPSBtX291dC5sb2FkUHRyKGJhc2UsIG1faGVh
cHMuU2NvcGVkQXJndW1lbnRzVGFibGVfYXJndW1lbnRzKTsKKyAgICAgICAgICAgIExWYWx1ZSBz
Y29wZU9mZnNldCA9IG1fb3V0LmxvYWQzMigKKyAgICAgICAgICAgICAgICBiYXNlSW5kZXgobV9o
ZWFwcy5zY29wZWRBcmd1bWVudHNUYWJsZUFyZ3VtZW50cywgYXJndW1lbnRzLCBpbmRleCkpOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICBzcGVjdWxhdGUoCisgICAgICAgICAgICAgICAgRXhv
dGljT2JqZWN0TW9kZSwgbm9WYWx1ZSgpLCBudWxscHRyLAorICAgICAgICAgICAgICAgIG1fb3V0
LmVxdWFsKHNjb3BlT2Zmc2V0LCBtX291dC5jb25zdEludDMyKFNjb3BlT2Zmc2V0OjppbnZhbGlk
T2Zmc2V0KSkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0Lmxv
YWQ2NChiYXNlSW5kZXgoCisgICAgICAgICAgICAgICAgbV9oZWFwcy5KU0Vudmlyb25tZW50UmVj
b3JkX3ZhcmlhYmxlcywgYmFzZSwgc2NvcGVPZmZzZXQpKSk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFycmF5OjpHZW5lcmljOiB7
CiAgICAgICAgICAgICBzZXRKU1ZhbHVlKHZtQ2FsbCgKICAgICAgICAgICAgICAgICBtX291dC5v
cGVyYXRpb24ob3BlcmF0aW9uR2V0QnlWYWwpLCBtX2NhbGxGcmFtZSwKQEAgLTUwNzAsMTEgKzUx
MzIsMTEgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIGNhbGw7CiAgICAgfQogICAgIAotICAg
IFR5cGVkUG9pbnRlciBiYXNlSW5kZXgoSW5kZXhlZEFic3RyYWN0SGVhcCYgaGVhcCwgTFZhbHVl
IHN0b3JhZ2UsIExWYWx1ZSBpbmRleCwgRWRnZSBlZGdlKQorICAgIFR5cGVkUG9pbnRlciBiYXNl
SW5kZXgoSW5kZXhlZEFic3RyYWN0SGVhcCYgaGVhcCwgTFZhbHVlIHN0b3JhZ2UsIExWYWx1ZSBp
bmRleCwgRWRnZSBlZGdlLCBwdHJkaWZmX3Qgb2Zmc2V0ID0gMCkKICAgICB7CiAgICAgICAgIHJl
dHVybiBtX291dC5iYXNlSW5kZXgoCiAgICAgICAgICAgICBoZWFwLCBzdG9yYWdlLCBtX291dC56
ZXJvRXh0KGluZGV4LCBtX291dC5pbnRQdHIpLAotICAgICAgICAgICAgbV9zdGF0ZS5mb3JOb2Rl
KGVkZ2UpLm1fdmFsdWUpOworICAgICAgICAgICAgbV9zdGF0ZS5mb3JOb2RlKGVkZ2UpLm1fdmFs
dWUsIG9mZnNldCk7CiAgICAgfQogICAgIAogICAgIHZvaWQgY29tcGFyZSgKQEAgLTYzNDEsNiAr
NjQwMywxNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9k
ZSwgIkNvcnJ1cHQgYXJyYXkgY2xhc3MiKTsKICAgICAgICAgfQogICAgICAgICAgICAgCisgICAg
ICAgIGNhc2UgQXJyYXk6OkRpcmVjdEFyZ3VtZW50czoKKyAgICAgICAgICAgIHJldHVybiBtX291
dC5lcXVhbCgKKyAgICAgICAgICAgICAgICBtX291dC5sb2FkOChjZWxsLCBtX2hlYXBzLkpTQ2Vs
bF90eXBlSW5mb1R5cGUpLAorICAgICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50OChEaXJlY3RB
cmd1bWVudHNUeXBlKSk7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBBcnJheTo6U2NvcGVk
QXJndW1lbnRzOgorICAgICAgICAgICAgcmV0dXJuIG1fb3V0LmVxdWFsKAorICAgICAgICAgICAg
ICAgIG1fb3V0LmxvYWQ4KGNlbGwsIG1faGVhcHMuSlNDZWxsX3R5cGVJbmZvVHlwZSksCisgICAg
ICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQ4KFNjb3BlZEFyZ3VtZW50c1R5cGUpKTsKKyAgICAg
ICAgICAgIAogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgcmV0dXJuIG1fb3V0LmVxdWFs
KAogICAgICAgICAgICAgICAgIG1fb3V0LmxvYWQ4KGNlbGwsIG1faGVhcHMuSlNDZWxsX3R5cGVJ
bmZvVHlwZSksIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29weVRva2VuLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29weVRva2VuLmgJKHJl
dmlzaW9uIDE4MDcyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcHlUb2tlbi5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMs
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0zMiw3ICszMiw3IEBAIGVudW0gQ29weVRva2VuIHsKICAgICBCdXR0
ZXJmbHlDb3B5VG9rZW4sCiAgICAgVHlwZWRBcnJheVZlY3RvckNvcHlUb2tlbiwKICAgICBNYXBC
YWNraW5nU3RvcmVDb3B5VG9rZW4sCi0gICAgQXJndW1lbnRzU2xvd0FyZ3VtZW50RGF0YUNvcHlU
b2tlbgorICAgIERpcmVjdEFyZ3VtZW50c092ZXJyaWRlc0NvcHlUb2tlbgogfTsKIAogfSAvLyBu
YW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVs
cGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlI
ZWxwZXJzLmgJKHJldmlzaW9uIDE4MDcyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
QXNzZW1ibHlIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTExMyw2ICsxMTMsMjYgQEAgcHVi
bGljOgogI2VuZGlmCiAgICAgfQogICAgIAorICAgIHZvaWQgbG9hZFZhbHVlKEJhc2VJbmRleCBh
ZGRyZXNzLCBKU1ZhbHVlUmVncyByZWdzKQorICAgIHsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAg
ICAgICBsb2FkNjQoYWRkcmVzcywgcmVncy5ncHIoKSk7CisjZWxzZQorICAgICAgICBpZiAoYWRk
cmVzcy5iYXNlID09IHJlZ3MucGF5bG9hZEdQUigpIHx8IGFkZHJlc3MuaW5kZXggPT0gcmVncy5w
YXlsb2FkR1BSKCkpIHsKKyAgICAgICAgICAgIC8vIFdlIGFjdHVhbGx5IGNvdWxkIGhhbmRsZSB0
aGUgY2FzZSB3aGVyZSB0aGUgcmVnaXN0ZXJzIGFyZSBhbGlhc2VkIHRvIGJvdGgKKyAgICAgICAg
ICAgIC8vIHRhZyBhbmQgcGF5bG9hZCwgYnV0IHdlIGRvbid0IGZvciBub3cuCisgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVChhZGRyZXNzLmJhc2UgIT0gcmVncy50YWdHUFIoKSk7CisgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVChhZGRyZXNzLmluZGV4ICE9IHJlZ3MudGFnR1BSKCkpOworICAg
ICAgICAgICAgCisgICAgICAgICAgICBsb2FkMzIoYWRkcmVzcy53aXRoT2Zmc2V0KFRhZ09mZnNl
dCksIHJlZ3MudGFnR1BSKCkpOworICAgICAgICAgICAgbG9hZDMyKGFkZHJlc3Mud2l0aE9mZnNl
dChQYXlsb2FkT2Zmc2V0KSwgcmVncy5wYXlsb2FkR1BSKCkpOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgbG9hZDMyKGFkZHJlc3Mud2l0aE9mZnNldChQYXlsb2FkT2Zmc2V0KSwgcmVn
cy5wYXlsb2FkR1BSKCkpOworICAgICAgICAgICAgbG9hZDMyKGFkZHJlc3Mud2l0aE9mZnNldChU
YWdPZmZzZXQpLCByZWcudGFnR1BSKCkpOworICAgICAgICB9CisjZW5kaWYKKyAgICB9CisgICAg
CiAgICAgdm9pZCBtb3ZlVHJ1c3RlZFZhbHVlKEpTVmFsdWUgdmFsdWUsIEpTVmFsdWVSZWdzIHJl
Z3MpCiAgICAgewogI2lmIFVTRShKU1ZBTFVFNjQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
LmgJKHJldmlzaW9uIDE4MDcyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM0Niw2ICszNDYsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgSnVtcExpc3QgZW1pdERvdWJsZUdldEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVt
cCYgYmFkVHlwZSk7CiAgICAgICAgIEp1bXBMaXN0IGVtaXRDb250aWd1b3VzR2V0QnlWYWwoSW5z
dHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBJbmRleGluZ1R5cGUgZXhwZWN0ZWRT
aGFwZSA9IENvbnRpZ3VvdXNTaGFwZSk7CiAgICAgICAgIEp1bXBMaXN0IGVtaXRBcnJheVN0b3Jh
Z2VHZXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUpOworICAgICAg
ICBKdW1wTGlzdCBlbWl0RGlyZWN0QXJndW1lbnRzR2V0QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQYXRj
aGFibGVKdW1wJiBiYWRUeXBlKTsKKyAgICAgICAgSnVtcExpc3QgZW1pdFNjb3BlZEFyZ3VtZW50
c0dldEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSk7CiAgICAgICAg
IEp1bXBMaXN0IGVtaXRJbnRUeXBlZEFycmF5R2V0QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFi
bGVKdW1wJiBiYWRUeXBlLCBUeXBlZEFycmF5VHlwZSk7CiAgICAgICAgIEp1bXBMaXN0IGVtaXRG
bG9hdFR5cGVkQXJyYXlHZXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5
cGUsIFR5cGVkQXJyYXlUeXBlKTsKICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDE4MDcyMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUz
MCw3ICs1MzAsNyBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWwoRXhlCiAg
ICAgICAgIGlmIChoYXNPcHRpbWl6YWJsZUluZGV4aW5nKG9iamVjdC0+c3RydWN0dXJlKHZtKSkp
IHsKICAgICAgICAgICAgIC8vIEF0dGVtcHQgdG8gb3B0aW1pemUuCiAgICAgICAgICAgICBKSVRB
cnJheU1vZGUgYXJyYXlNb2RlID0gaml0QXJyYXlNb2RlRm9yU3RydWN0dXJlKG9iamVjdC0+c3Ry
dWN0dXJlKHZtKSk7Ci0gICAgICAgICAgICBpZiAoYXJyYXlNb2RlICE9IGJ5VmFsSW5mby5hcnJh
eU1vZGUpIHsKKyAgICAgICAgICAgIGlmIChqaXRBcnJheU1vZGVQZXJtaXRzUHV0KGFycmF5TW9k
ZSkgJiYgYXJyYXlNb2RlICE9IGJ5VmFsSW5mby5hcnJheU1vZGUpIHsKICAgICAgICAgICAgICAg
ICBKSVQ6OmNvbXBpbGVQdXRCeVZhbCgmdm0sIGV4ZWMtPmNvZGVCbG9jaygpLCAmYnlWYWxJbmZv
LCBSZXR1cm5BZGRyZXNzUHRyKE9VUl9SRVRVUk5fQUREUkVTUyksIGFycmF5TW9kZSk7CiAgICAg
ICAgICAgICAgICAgZGlkT3B0aW1pemUgPSB0cnVlOwogICAgICAgICAgICAgfQpAQCAtNTc1LDcg
KzU3NSw3IEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25EaXJlY3RQdXRCeVYKICAgICAg
ICAgaWYgKGhhc09wdGltaXphYmxlSW5kZXhpbmcob2JqZWN0LT5zdHJ1Y3R1cmUodm0pKSkgewog
ICAgICAgICAgICAgLy8gQXR0ZW1wdCB0byBvcHRpbWl6ZS4KICAgICAgICAgICAgIEpJVEFycmF5
TW9kZSBhcnJheU1vZGUgPSBqaXRBcnJheU1vZGVGb3JTdHJ1Y3R1cmUob2JqZWN0LT5zdHJ1Y3R1
cmUodm0pKTsKLSAgICAgICAgICAgIGlmIChhcnJheU1vZGUgIT0gYnlWYWxJbmZvLmFycmF5TW9k
ZSkgeworICAgICAgICAgICAgaWYgKGppdEFycmF5TW9kZVBlcm1pdHNQdXQoYXJyYXlNb2RlKSAm
JiBhcnJheU1vZGUgIT0gYnlWYWxJbmZvLmFycmF5TW9kZSkgewogICAgICAgICAgICAgICAgIEpJ
VDo6Y29tcGlsZURpcmVjdFB1dEJ5VmFsKCZ2bSwgY2FsbEZyYW1lLT5jb2RlQmxvY2soKSwgJmJ5
VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0cihPVVJfUkVUVVJOX0FERFJFU1MpLCBhcnJheU1vZGUp
OwogICAgICAgICAgICAgICAgIGRpZE9wdGltaXplID0gdHJ1ZTsKICAgICAgICAgICAgIH0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3Bw
CShyZXZpc2lvbiAxODA3MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3Bl
cnR5QWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTUxLDYgKzk1MSwxMiBAQCB2b2lkIEpJ
VDo6cHJpdmF0ZUNvbXBpbGVHZXRCeVZhbChCeVZhbEluCiAgICAgY2FzZSBKSVRBcnJheVN0b3Jh
Z2U6CiAgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRBcnJheVN0b3JhZ2VHZXRCeVZhbChjdXJyZW50
SW5zdHJ1Y3Rpb24sIGJhZFR5cGUpOwogICAgICAgICBicmVhazsKKyAgICBjYXNlIEpJVERpcmVj
dEFyZ3VtZW50czoKKyAgICAgICAgc2xvd0Nhc2VzID0gZW1pdERpcmVjdEFyZ3VtZW50c0dldEJ5
VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgSklUU2NvcGVkQXJndW1lbnRzOgorICAgICAgICBzbG93Q2FzZXMgPSBlbWl0RGlyZWN0QXJn
dW1lbnRzR2V0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlKTsKKyAgICAgICAgYnJl
YWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAgVHlwZWRBcnJheVR5cGUgdHlwZSA9IHR5cGVkQXJy
YXlUeXBlRm9ySklUQXJyYXlNb2RlKGFycmF5TW9kZSk7CiAgICAgICAgIGlmIChpc0ludCh0eXBl
KSkKQEAgLTEwNDYsNiArMTA1Miw2MyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeVZh
bChCeVZhbEluCiAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmtDYWxsZXJUb0Z1bmN0aW9uKHJldHVy
bkFkZHJlc3MsIEZ1bmN0aW9uUHRyKGlzRGlyZWN0ID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxH
ZW5lcmljIDogb3BlcmF0aW9uUHV0QnlWYWxHZW5lcmljKSk7CiB9CiAKK0pJVDo6SnVtcExpc3Qg
SklUOjplbWl0RGlyZWN0QXJndW1lbnRzR2V0QnlWYWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSkKK3sKKyAgICBKdW1wTGlzdCBzbG93Q2Fz
ZXM7CisgICAgCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBSZWdpc3RlcklEIGJhc2UgPSByZWdU
MDsKKyAgICBSZWdpc3RlcklEIHByb3BlcnR5ID0gcmVnVDE7CisgICAgSlNWYWx1ZVJlZ3MgcmVz
dWx0ID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgIFJlZ2lzdGVySUQgc2NyYXRjaCA9IHJlZ1Qz
OworI2Vsc2UKKyAgICBSZWdpc3RlcklEIGJhc2UgPSByZWdUMDsKKyAgICBSZWdpc3RlcklEIHBy
b3BlcnR5ID0gcmVnVDI7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0ID0gSlNWYWx1ZVJlZ3MocmVn
VDEsIHJlZ1QwKTsKKyAgICBSZWdpc3RlcklEIHNjcmF0Y2ggPSByZWdUMzsKKyNlbmRpZgorCisg
ICAgbG9hZDgoQWRkcmVzcyhiYXNlLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgc2Ny
YXRjaCk7CisgICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJyYW5jaDMyKE5vdEVxdWFsLCBzY3JhdGNo
LCBUcnVzdGVkSW1tMzIoRGlyZWN0QXJndW1lbnRzVHlwZSkpOworICAgIAorICAgIHNsb3dDYXNl
cy5hcHBlbmQoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCBwcm9wZXJ0eSwgQWRkcmVzcyhiYXNlLCBE
aXJlY3RBcmd1bWVudHM6Om9mZnNldE9mTGVuZ3RoKCkpKSk7CisgICAgc2xvd0Nhc2VzLmFwcGVu
ZChicmFuY2hUZXN0UHRyKE5vblplcm8sIEFkZHJlc3MoYmFzZSwgRGlyZWN0QXJndW1lbnRzOjpv
ZmZzZXRPZk92ZXJyaWRlcygpKSkpOworICAgIAorICAgIHplcm9FeHRlbmQzMlRvUHRyKHByb3Bl
cnR5LCBzY3JhdGNoKTsKKyAgICBsb2FkVmFsdWUoQmFzZUluZGV4KGJhc2UsIHNjcmF0Y2gsIFRp
bWVzRWlnaHQsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZU9mZnNldCgpKSwgcmVzdWx0KTsKK30K
KworSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRTY29wZWRBcmd1bWVudHNHZXRCeVZhbChJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlKQoreworICAg
IEp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICAKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIFJlZ2lz
dGVySUQgYmFzZSA9IHJlZ1QwOworICAgIFJlZ2lzdGVySUQgcHJvcGVydHkgPSByZWdUMTsKKyAg
ICBKU1ZhbHVlUmVncyByZXN1bHQgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgUmVnaXN0ZXJJ
RCBzY3JhdGNoID0gcmVnVDM7CisgICAgUmVnaXN0ZXJJRCBzY3JhdGNoMiA9IHJlZ1Q0OworI2Vs
c2UKKyAgICBSZWdpc3RlcklEIGJhc2UgPSByZWdUMDsKKyAgICBSZWdpc3RlcklEIHByb3BlcnR5
ID0gcmVnVDI7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0ID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJl
Z1QwKTsKKyAgICBSZWdpc3RlcklEIHNjcmF0Y2ggPSByZWdUMzsKKyAgICBSZWdpc3RlcklEIHNj
YXJ0Y2gyID0gcmVnVDQ7CisjZW5kaWYKKworICAgIGxvYWQ4KEFkZHJlc3MoYmFzZSwgSlNDZWxs
Ojp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIHNjcmF0Y2gpOworICAgIGJhZFR5cGUgPSBwYXRjaGFi
bGVCcmFuY2gzMihOb3RFcXVhbCwgc2NyYXRjaCwgVHJ1c3RlZEltbTMyKERpcmVjdEFyZ3VtZW50
c1R5cGUpKTsKKyAgICAKKyAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgU2NvcGVkQXJndW1lbnRz
OjpvZmZzZXRPZlRhYmxlKCkpLCBzY3JhdGNoKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwg
U2NvcGVkQXJndW1lbnRzOjpvZmZzZXRPZlNjb3BlKCkpLCBzY3JhdGNoMik7CisgICAgc2xvd0Nh
c2VzLmFwcGVuZChicmFuY2gzMihBYm92ZU9yRXF1YWwsIHByb3BlcnR5LCBBZGRyZXNzKHNjcmF0
Y2gsIFNjb3BlZEFyZ3VtZW50c1RhYmxlOjpvZmZzZXRPZkxlbmd0aCgpKSkpOworICAgIGxvYWRQ
dHIoQWRkcmVzcyhzY3JhdGNoLCBTY29wZWRBcmd1bWVudHNUYWJsZTo6b2Zmc2V0T2ZBcmd1bWVu
dHMoKSksIHNjcmF0Y2gpOworICAgIGxvYWQzMihCYXNlSW5kZXgoc2NyYXRjaCwgcHJvcGVydHks
IFRpbWVzRm91ciksIHNjcmF0Y2gpOworICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoRXF1
YWwsIHNjcmF0Y2gsIFRydXN0ZWRJbW0zMihTY29wZU9mZnNldDo6aW52YWxpZE9mZnNldCkpKTsK
KyAgICAKKyAgICBsb2FkVmFsdWUoQmFzZUluZGV4KHNjcmF0Y2gyLCBzY3JhdGNoLCBUaW1lc0Vp
Z2h0LCBKU0Vudmlyb25tZW50UmVjb3JkOjpvZmZzZXRPZlZhcmlhYmxlcygpKSwgcmVzdWx0KTsK
K30KKwogSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRJbnRUeXBlZEFycmF5R2V0QnlWYWwoSW5zdHJ1
Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBUeXBlZEFycmF5VHlwZSB0eXBlKQogewog
ICAgIEFTU0VSVChpc0ludCh0eXBlKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Bcmd1bWVudHNNb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQXJndW1lbnRzTW9kZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQXJndW1lbnRzTW9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lm
bmRlZiBBcmd1bWVudHNNb2RlX2gKKyNkZWZpbmUgQXJndW1lbnRzTW9kZV9oCisKK25hbWVzcGFj
ZSBKU0MgeworCitlbnVtIEFyZ3VtZW50c01vZGUgeworICAgIENsb25lZEFyZ3VtZW50c0NyZWF0
aW9uTW9kZSwKKyAgICBGYWtlQXJndW1lbnRWYWx1ZXNDcmVhdGlvbk1vZGUKK307CisKK30gLy8g
bmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gQXJndW1lbnRzTW9kZV9oCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhcHR1cmVkQXJndW1lbnRzT2Zmc2V0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYXB0dXJlZEFyZ3VtZW50
c09mZnNldC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9DYXB0dXJlZEFyZ3VtZW50c09mZnNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0
MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ2FwdHVyZWRBcmd1bWVudHNPZmZzZXQuaCIKKwor
bmFtZXNwYWNlIEpTQyB7CisKK3ZvaWQgQ2FwdHVyZWRBcmd1bWVudHNPZmZzZXQ6OmR1bXAoUHJp
bnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBpZiAoISp0aGlzKSB7CisgICAgICAgIG91dC5w
cmludCgiY2FwdHVyZWRBcmd1bWVudEludmFsaWQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIG91dC5wcmludCgiY2FwdHVyZWRBcmd1bWVudCIsIG9mZnNldCgpKTsKK30KKworfSAv
LyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nh
cHR1cmVkQXJndW1lbnRzT2Zmc2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ2FwdHVyZWRBcmd1bWVudHNPZmZzZXQuaAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhcHR1cmVkQXJndW1lbnRzT2Zmc2V0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIENhcHR1cmVkQXJndW1lbnRzT2Zmc2V0X2gKKyNk
ZWZpbmUgQ2FwdHVyZWRBcmd1bWVudHNPZmZzZXRfaAorCisjaW5jbHVkZSAiR2VuZXJpY09mZnNl
dC5oIgorI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgSlNDIHsKKwor
Ly8gVGhpcyBpcyBhbiBvZmZzZXQgaW50byB0aGUgc3BlY2lhbCBhcmd1bWVudHMgb2JqZWN0LCB3
aGljaCBjYXB0dXJlcyB0aGUgYXJndW1lbnRzIHRvIGEKKy8vIGZ1bmN0aW9uLiBJdCBvbmx5IGNv
bWVzIGludG8gcGxheSBpdCB0aGUgYXJndW1lbnRzIGFyZW4ndCBhbHNvIGxpZnRlZCBpbnRvIHRo
ZSBhY3RpdmF0aW9uLgorLy8gSWYgdGhleSB3ZXJlIHRoZW4gYWNjZXNzZXMgdG8gdGhlIGFyZ3Vt
ZW50cyB3b3VsZCByZXNvbHZlIHRvIGEgU2NvcGVPZmZzZXQgYW5kIG5vdCBhCisvLyBDYXB0dXJl
ZEFyZ3VtZW50c09mZnNldC4KK2NsYXNzIENhcHR1cmVkQXJndW1lbnRzT2Zmc2V0IDogcHVibGlj
IEdlbmVyaWNPZmZzZXQ8Q2FwdHVyZWRBcmd1bWVudHNPZmZzZXQ+IHsKK3B1YmxpYzoKKyAgICBD
YXB0dXJlZEFyZ3VtZW50c09mZnNldCgpIHsgfQorICAgIAorICAgIGV4cGxpY2l0IENhcHR1cmVk
QXJndW1lbnRzT2Zmc2V0KHVuc2lnbmVkIG9mZnNldCkKKyAgICAgICAgOiBHZW5lcmljT2Zmc2V0
KG9mZnNldCkKKyAgICB7CisgICAgfQorICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYp
IGNvbnN0OworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBDYXB0dXJlZEFy
Z3VtZW50c09mZnNldF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Rp
cmVjdEFyZ3VtZW50cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRGlyZWN0QXJndW1lbnRzLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwxNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRpcmVjdEFyZ3VtZW50cy5oIgorCisj
aW5jbHVkZSAiR2VuZXJpY0FyZ3VtZW50c0lubGluZXMuaCIKKyNpbmNsdWRlICJKU0FyZ3VtZW50
c0l0ZXJhdG9yLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsK
KworU1RBVElDX0FTU0VSVF9JU19UUklWSUFMTFlfREVTVFJVQ1RJQkxFKERpcmVjdEFyZ3VtZW50
cyk7CisKK2NvbnN0IENsYXNzSW5mbyBEaXJlY3RBcmd1bWVudHM6OnNfaW5mbyA9IHsgIkFyZ3Vt
ZW50cyIsICZCYXNlOjpzX2luZm8sIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoRGlyZWN0QXJndW1l
bnRzKSB9OworCitEaXJlY3RBcmd1bWVudHM6OkRpcmVjdEFyZ3VtZW50cyhWTSYgdm0sIFN0cnVj
dHVyZSogc3RydWN0dXJlLCB1bnNpZ25lZCBsZW5ndGgpCisgICAgOiBHZW5lcmljQXJndW1lbnRz
KHZtLCBzdHJ1Y3R1cmUpCisgICAgLCBtX2xlbmd0aChsZW5ndGgpCit7Cit9CisKK0RpcmVjdEFy
Z3VtZW50cyogRGlyZWN0QXJndW1lbnRzOjpjcmVhdGVVbmluaXRpYWxpemVkKFZNJiB2bSwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICBEaXJlY3RBcmd1bWVu
dHMqIHJlc3VsdCA9CisgICAgICAgIG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPERpcmVjdEFy
Z3VtZW50cz4odm0uaGVhcCwgYWxsb2NhdGlvblNpemUobGVuZ3RoKSkpCisgICAgICAgICh2bSwg
c3RydWN0dXJlKTsKKyAgICByZXN1bHQtPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCitEaXJlY3RBcmd1bWVudHMqIERpcmVjdEFyZ3VtZW50czo6Y3JlYXRlKFZN
JiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICBEaXJl
Y3RBcmd1bWVudHMqIHJlc3VsdCA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWQodm0sIHN0cnVjdHVyZSwg
bGVuZ3RoKTsKKyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBsZW5ndGg7IGktLTspCisgICAg
ICAgIHJlc3VsdC0+c3RvcmFnZSgpW2ldLmNsZWFyKCk7CisgICAgCisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKworRGlyZWN0QXJndW1lbnRzKiBEaXJlY3RBcmd1bWVudHM6OmNyZWF0ZUJ5Q29weWlu
ZyhWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAg
dW5zaWduZWQgbGVuZ3RoID0gZXhlYy0+YXJndW1lbnRDb3VudCgpOworICAgIERpcmVjdEFyZ3Vt
ZW50cyogcmVzdWx0ID0gY3JlYXRlVW5pbml0aWFsaXplZCh2bSwgc3RydWN0dXJlLCBsZW5ndGgp
OworICAgIAorICAgIGZvciAodW5zaWduZWQgaSA9IGxlbmd0aDsgaS0tOykKKyAgICAgICAgcmVz
dWx0LT5zdG9yYWdlKClbaV0uc2V0KHZtLCByZXN1bHQsIGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50
KGkpKTsKKyAgICAKKyAgICByZXN1bHQtPmNhbGxlZSgpLnNldCh2bSwgcmVzdWx0LCBqc0Nhc3Q8
SlNGdW5jdGlvbio+KGV4ZWMtPmNhbGxlZSgpKSk7CisgICAgCisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKwordm9pZCBEaXJlY3RBcmd1bWVudHM6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiB0aGlzQ2Vs
bCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgRGlyZWN0QXJndW1lbnRzKiB0aGlzT2Jq
ZWN0ID0gc3RhdGljX2Nhc3Q8RGlyZWN0QXJndW1lbnRzKj4odGhpc0NlbGwpOworICAgIEFTU0VS
VF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKKyAgICBCYXNlOjp2aXNp
dENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOworICAgIAorICAgIHZpc2l0b3IuYXBwZW5k
VmFsdWVzKHRoaXNPYmplY3QtPnN0b3JhZ2UoKSwgdGhpc09iamVjdC0+bV9sZW5ndGgpOworICAg
IHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX2NhbGxlZSk7CisgICAgCisgICAgaWYgKHRo
aXNPYmplY3QtPm1fb3ZlcnJpZGVzKSB7CisgICAgICAgIHZpc2l0b3IuY29weUxhdGVyKAorICAg
ICAgICAgICAgdGhpc09iamVjdCwgRGlyZWN0QXJndW1lbnRzT3ZlcnJpZGVzQ29weVRva2VuLAor
ICAgICAgICAgICAgdGhpc09iamVjdC0+bV9vdmVycmlkZXMuZ2V0KCksIG1fbGVuZ3RoKTsKKyAg
ICB9Cit9CisKK3ZvaWQgRGlyZWN0QXJndW1lbnRzOjpjb3B5QmFja2luZ1N0b3JlKEpTQ2VsbCog
dGhpc0NlbGwsIENvcHlWaXNpdG9yJiB2aXNpdG9yLCBDb3B5VG9rZW4gdG9rZW4pCit7CisgICAg
RGlyZWN0QXJndW1lbnRzKiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8RGlyZWN0QXJndW1lbnRz
Kj4odGhpc0NlbGwpOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwg
aW5mbygpKTsKKyAgICAKKyAgICBSRUxFQVNFX0FTU0VSVCh0b2tlbiA9PSBEaXJlY3RBcmd1bWVu
dHNPdmVycmlkZXNDb3B5VG9rZW4pOworICAgIAorICAgIGJvb2wqIG9sZE92ZXJyaWRlcyA9IHRo
aXNPYmplY3QtPm1fb3ZlcnJpZGVzLmdldCgpOworICAgIGlmICghb2xkT3ZlcnJpZGVzKQorICAg
ICAgICByZXR1cm47CisgICAgCisgICAgaWYgKHZpc2l0b3IuY2hlY2tJZlNob3VsZENvcHkob3Zl
cnJpZGVzKSkgeworICAgICAgICBib29sKiBuZXdPdmVycmlkZXMgPSBzdGF0aWNfY2FzdDxib29s
Kj4odmlzaXRvci5hbGxvY2F0ZU5ld1NwYWNlKG1fbGVuZ3RoKSk7CisgICAgICAgIG1lbWNweShu
ZXdPdmVycmlkZXMsIG9sZE92ZXJyaWRlcywgbV9sZW5ndGgpOworICAgICAgICB0aGlzT2JqZWN0
LT5tX292ZXJyaWRlcy5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKG5ld092ZXJyaWRlcyk7CisgICAg
ICAgIHZpc2l0b3IuZGlkQ29weShvbGRPdmVycmlkZXMsIG1fbGVuZ3RoKTsKKyAgICB9Cit9CisK
K1N0cnVjdHVyZSogRGlyZWN0QXJndW1lbnRzOjpjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKK3sKKyAgICByZXR1
cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5m
byhEaXJlY3RBcmd1bWVudHNUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Cit9CisKK3Zv
aWQgRGlyZWN0QXJndW1lbnRzOjpzbG93RG93bkFuZFdhc3RlTWVtb3J5KFZNJiB2bSkKK3sKKyAg
ICBSRUxFQVNFX0FTU0VSVCghbV9vdmVycmlkZXMpOworICAgIAorICAgIHB1dERpcmVjdCh2bSwg
dm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcihtX2xlbmd0aCksIERvbnRFbnVtKTsK
KyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmNhbGxlZSwgbV9jYWxsZWUuZ2V0
KCksIERvbnRFbnVtKTsKKyAgICAKKyAgICB2b2lkKiBiYWNraW5nU3RvcmU7CisgICAgUkVMRUFT
RV9BU1NFUlQodm0uaGVhcC50cnlBbGxvY2F0ZVN0b3JhZ2UodGhpcywgbV9sZW5ndGgpLCAmYmFj
a2luZ1N0b3JlKTsKKyAgICBtX292ZXJyaWRlcy5zZXQodm0sIHRoaXMsIHN0YXRpY19jYXN0PGJv
b2wqPihiYWNraW5nU3RvcmUpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2xlbmd0aDsgaS0t
OykKKyAgICAgICAgbV9vdmVycmlkZXMuZ2V0KClbaV0gPSBmYWxzZTsKK30KKwordm9pZCBEaXJl
Y3RBcmd1bWVudHM6OnNsb3dEb3duQW5kV2FzdGVNZW1vcnlJZk5lY2Vzc2FyeShWTSYgdm0pCit7
CisgICAgaWYgKCFtX292ZXJyaWRlcykKKyAgICAgICAgc2xvd0Rvd25BbmRXYXN0ZU1lbW9yeSh2
bSk7Cit9CisKK3ZvaWQgRGlyZWN0QXJndW1lbnRzOjpvdmVycmlkZUFyZ3VtZW50KFZNJiB2bSwg
dW5zaWduZWQgaSkKK3sKKyAgICBzbG93RG93bkFuZFdhc3RlTWVtb3J5SWZOZWNlc3Nhcnkodm0p
OworICAgIG1fb3ZlcnJpZGVzLmdldCgpW2luZGV4XSA9IHRydWU7Cit9CisKK30gLy8gbmFtZXNw
YWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1
bWVudHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJl
Y3RBcmd1bWVudHMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0RpcmVjdEFyZ3VtZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTM3IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgRGly
ZWN0QXJndW1lbnRzX2gKKyNkZWZpbmUgRGlyZWN0QXJndW1lbnRzX2gKKworI2luY2x1ZGUgIkdl
bmVyaWNBcmd1bWVudHMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKKy8vIFRoaXMgaXMgYW4gQXJn
dW1lbnRzLWNsYXNzIG9iamVjdCB0aGF0IHdlIGNyZWF0ZSB3aGVuIHlvdSBzYXkgImFyZ3VtZW50
cyIgaW5zaWRlIGEgZnVuY3Rpb24sCisvLyBhbmQgbm9uZSBvZiB0aGUgYXJndW1lbnRzIGFyZSBj
YXB0dXJlZCBpbiB0aGUgZnVuY3Rpb24ncyBhY3RpdmF0aW9uLiBUaGUgZnVuY3Rpb24gd2lsbCBj
b3B5IGFsbAorLy8gb2YgaXRzIGFyZ3VtZW50cyBpbnRvIHRoaXMgb2JqZWN0LCBhbmQgYWxsIHN1
YnNlcXVlbnQgYWNjZXNzZXMgdG8gdGhlIGFyZ3VtZW50cyB3aWxsIGdvIHRocm91Z2gKKy8vIHRo
aXMgb2JqZWN0IHRoZXJlYWZ0ZXIuIFNwZWNpYWwgc3VwcG9ydCBpcyBpbiBwbGFjZSBmb3IgbWlz
Y2hldmlvdXMgZXZlbnRzIGxpa2UgdGhlIGFyZ3VtZW50cworLy8gYmVpbmcgZGVsZXRlZCAoc29t
ZXRoaW5nIGxpa2UgImRlbGV0ZSBhcmd1bWVudHNbMF0iKSBvciByZWNvbmZpZ3VyZWQgKGJyb2Fk
bHksIHdlIHNheSBkZWxldGlvbnMKKy8vIGFuZCByZWNvbmZpZ3VyYXRpb25zIG1lYW4gdGhhdCB0
aGUgcmVzcGVjdGl2ZSBhcmd1bWVudCB3YXMgIm92ZXJyaWRkZW4iKS4KKy8vCisvLyBUbyBzcGVl
ZCBhbGxvY2F0aW9uLCB0aGlzIG9iamVjdCB3aWxsIGhvbGQgYWxsIG9mIHRoZSBhcmd1bWVudHMg
aW4tcGxhY2UuIFRoZSBhcmd1bWVudHMgYXMgd2VsbAorLy8gYXMgYSB0YWJsZSBvZiBmbGFncyBz
YXlpbmcgd2hpY2ggYXJndW1lbnRzIHdlcmUgb3ZlcnJpZGRlbi4KK2NsYXNzIERpcmVjdEFyZ3Vt
ZW50cyA6IHB1YmxpYyBHZW5lcmljQXJndW1lbnRzPERpcmVjdEFyZ3VtZW50cz4geworcHJpdmF0
ZToKKyAgICBEaXJlY3RBcmd1bWVudHMoVk0mLCBTdHJ1Y3R1cmUqLCB1bnNpZ25lZCBsZW5ndGgp
OworICAgIAorcHVibGljOgorICAgIC8vIENyZWF0ZXMgYW4gYXJndW1lbnRzIG9iamVjdCBidXQg
bGVhdmVzIGl0IHVuaW5pdGlhbGl6ZWQuCisgICAgc3RhdGljIERpcmVjdEFyZ3VtZW50cyogY3Jl
YXRlVW5pbml0aWFsaXplZChWTSYsIFN0cnVjdHVyZSosIHVuc2lnbmVkIGxlbmd0aCk7CisgICAg
CisgICAgLy8gQ3JlYXRlcyBhbiBhcmd1bWVudHMgb2JqZWN0IGFuZCBpbml0aWFsaXplcyBldmVy
eXRoaW5nIHRvIHRoZSBlbXB0eSB2YWx1ZS4KKyAgICBzdGF0aWMgRGlyZWN0QXJndW1lbnRzKiBj
cmVhdGUoVk0mLCBTdHJ1Y3R1cmUqLCB1bnNpZ25lZCBsZW5ndGgpOworICAgIAorICAgIC8vIENy
ZWF0ZXMgYW4gYXJndW1lbnRzIG9iamVjdCBieSBjb3B5aW5nIHRoZSBhcmd1bW5ldHMgZnJvbSB0
aGUgc3RhY2suCisgICAgc3RhdGljIERpcmVjdEFyZ3VtZW50cyogY3JlYXRlQnlDb3B5aW5nKFZN
JiwgU3RydWN0dXJlKiwgRXhlY1N0YXRlKik7CisgICAgCisgICAgc3RhdGljIHZvaWQgdmlzaXRD
aGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIHN0YXRpYyB2b2lkIGNvcHlCYWNr
aW5nU3RvcmUoSlNDZWxsKiwgQ29weVZpc2l0b3ImLCBDb3B5VG9rZW4pOworICAgIAorICAgIHVp
bnQzMl90IGludGVybmFsTGVuZ3RoKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2xl
bmd0aDsKKyAgICB9CisgICAgCisgICAgdWludDMyX3QgbGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYykg
Y29uc3QKKyAgICB7CisgICAgICAgIGlmIChVTkxJS0VMWShtX292ZXJyaWRlcykpCisgICAgICAg
ICAgICByZXR1cm4gZ2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpLnRvVUlu
dDMyKGV4ZWMpOworICAgICAgICByZXR1cm4gbV9sZW5ndGg7CisgICAgfQorICAgIAorICAgIGJv
b2wgY2FuQWNjZXNzSW5kZXhRdWlja2x5KHVpbnQzMl90IGkpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gaSA8IG1fbGVuZ3RoICYmICghbV9vdmVycmlkZXMgfHwgIW1fb3ZlcnJpZGVzLmdl
dCgpW2ldKTsKKyAgICB9CisgICAgCisgICAgSlNWYWx1ZSBnZXRJbmRleFF1aWNrbHkodWludDMy
X3QgaSkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FU
SU9OKGNhbkFjY2Vzc0luZGV4UXVpY2tseShpKSk7CisgICAgICAgIHJldHVybiBzdG9yYWdlKClb
aV0uZ2V0KCk7CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0SW5kZXhRdWlja2x5KFZNJiB2bSwg
dWludDMyX3QgaSwgSlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIEFTU0VSVF9XSVRIX1NF
Q1VSSVRZX0lNUExJQ0FUSU9OKGNhbkFjY2Vzc0luZGV4UXVpY2tseShpKSk7CisgICAgICAgIHN0
b3JhZ2UoKVtpXS5zZXQodm0sIHRoaXMsIHZhbHVlKTsKKyAgICB9CisgICAgCisgICAgV3JpdGVC
YXJyaWVyPEpTRnVuY3Rpb24+JiBjYWxsZWUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fY2Fs
bGVlOworICAgIH0KKyAgICAKKyAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGFyZ3VtZW50KENh
cHR1cmVkQXJndW1lbnRzT2Zmc2V0IG9mZnNldCkKKyAgICB7CisgICAgICAgIEFTU0VSVChvZmZz
ZXQpOworICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihvZmZzZXQub2Zm
c2V0KCkgPCBtX2xlbmd0aCk7CisgICAgICAgIHJldHVybiBzdG9yYWdlKClbb2Zmc2V0Lm9mZnNl
dCgpXTsKKyAgICB9CisgICAgCisgICAgLy8gTWV0aG9kcyBpbnRlbmRlZCBmb3IgdXNlIGJ5IHRo
ZSBHZW5lcmljQXJndW1lbnRzIG1peGluLgorICAgIGJvb2wgb3ZlcnJvZGVUaGluZ3MoKSBjb25z
dCB7IHJldHVybiAhIW1fb3ZlcnJpZGVzOyB9CisgICAgdm9pZCBzbG93RG93bkFuZFdhc3RlTWVt
b3J5KFZNJik7CisgICAgdm9pZCBzbG93RG93bkFuZFdhc3RlTWVtb3J5SWZOZWNlc3NhcnkoVk0m
KTsKKyAgICB2b2lkIG92ZXJyaWRlQXJndW1lbnQoVk0mLCB1bnNpZ25lZCBpbmRleCk7CisgICAg
CisgICAgREVDTEFSRV9JTkZPOworICAgIAorICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0
cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUpOworICAgIAor
ICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZMZW5ndGgoKSB7IHJldHVybiBPQkpFQ1RfT0ZG
U0VUT0YoRGlyZWN0QXJndW1lbnRzLCBtX2xlbmd0aCk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90
IG9mZnNldE9mT3ZlcnJpZGVzKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKERpcmVjdEFyZ3Vt
ZW50cywgbV9vdmVycmlkZXMpOyB9CisgICAgCisgICAgc3RhdGljIHNpemVfdCBzdG9yYWdlT2Zm
c2V0KCkKKyAgICB7CisgICAgICAgIHJldHVybiBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Y8c2l6
ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPik+KHNpemVvZihEaXJlY3RBcmd1bWVudHMpKTsKKyAg
ICB9CisgICAgCisgICAgc3RhdGljIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSh1aW50MzJfdCBsZW5n
dGgpCisgICAgeworICAgICAgICByZXR1cm4gc3RvcmFnZU9mZnNldCgpICsgc2l6ZW9mKFdyaXRl
QmFycmllcjxVbmtub3duPikgKiBsZW5ndGg7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICBX
cml0ZUJhcnJpZXI8VW5rbm93bj4qIHN0b3JhZ2UoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGJp
dHdpc2VfY2FzdDxXcml0ZUJhcnJpZXI8VW5rbm93bj4qPihiaXR3aXNlX2Nhc3Q8Y2hhcio+KHRo
aXMpICsgc3RvcmFnZU9mZnNldCgpKTsKKyAgICB9CisgICAgCisgICAgV3JpdGVCYXJyaWVyPEpT
RnVuY3Rpb24qPiBtX2NhbGxlZTsKKyAgICB1aW50MzJfdCBtX2xlbmd0aDsgLy8gQWx3YXlzIHRo
ZSBhY3R1YWwgbGVuZ3RoIG9mIGNhcHR1cmVkIGFyZ3VtZW50cyBhbmQgbmV2ZXIgd2hhdCB3YXMg
c3RvcmVkIGludG8gdGhlIGxlbmd0aCBwcm9wZXJ0eS4KKyAgICBDb3B5V3JpdGVCYXJyaWVyPGJv
b2w+IG1fb3ZlcnJpZGVzOyAvLyBJZiBub24tbnVsbCwgaXQgbWVhbnMgdGhhdCBsZW5ndGgsIGNh
bGxlZSwgYW5kIGNhbGxlciBhcmUgZnVsbHkgbWF0ZXJpYWxpemVkIHByb3BlcnRpZXMuCit9Owor
Cit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIERpcmVjdEFyZ3VtZW50c19oCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRz
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmlj
QXJndW1lbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEdlbmVyaWNBcmd1bWVu
dHNfaAorI2RlZmluZSBHZW5lcmljQXJndW1lbnRzX2gKKworI2luY2x1ZGUgIkpTT2JqZWN0Lmgi
CisKK25hbWVzcGFjZSBKU0MgeworCisvLyBUaGlzIGlzIGEgbWl4aW4gZm9yIHRoZSB0d28ga2lu
ZHMgb2YgQXJndW1lbnRzLWNsYXNzIG9iamVjdHMgdGhhdCBhcmlzZSB3aGVuIHlvdSBzYXkKKy8v
ICJhcmd1bWVudHMiIGluc2lkZSBhIGZ1bmN0aW9uLiBUaGlzIGNsYXNzIGRvZXNuJ3Qgc2hvdyB1
cCBpbiB0aGUgSlNDZWxsIGluaGVyaXRhbmNlIGhpZXJhcmNoeS4KK3RlbXBsYXRlPHR5cGVuYW1l
IFR5cGU+CitjbGFzcyBHZW5lcmljQXJndW1lbnRzIDogcHVibGljIEpTTm9uRmluYWxPYmplY3Qg
eworcHVibGljOgorICAgIHR5cGVkZWYgSlNOb25GaW5hbE9iamVjdCBCYXNlOworCisgICAgc3Rh
dGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVzR2V0T3duUHJvcGVy
dHlTbG90IHwgSW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0
aElzTm90WmVybyB8IE92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMgfCBKU09iamVjdDo6U3RydWN0
dXJlRmxhZ3M7CisKK3Byb3RlY3RlZDoKKyAgICBHZW5lcmljQXJndW1lbnRzKFZNJiB2bSwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQorICAgIHsK
KyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqLCBF
eGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyBib29s
IGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCB1bnNpZ25l
ZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyB2b2lkIGdldE93blBy
b3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVu
dW1lcmF0aW9uTW9kZSk7CisgICAgc3RhdGljIHZvaWQgcHV0KEpTQ2VsbCosIEV4ZWNTdGF0ZSos
IFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIHZv
aWQgcHV0QnlJbmRleChKU0NlbGwqLCBFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUs
IEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpOworICAgIHN0YXRpYyB2b2lkIGRlbGV0ZVByb3Bl
cnR5KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSk7CisgICAgc3RhdGljIHZvaWQg
ZGVsZXRlUHJvcGVydHlCeUluZGV4KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3Bl
cnR5TmFtZSk7CisgICAgc3RhdGljIHZvaWQgZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3QqLCBF
eGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wg
c2hvdWxkVGhyb3cpOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBHZW5l
cmljQXJndW1lbnRzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2Vu
ZXJpY0FyZ3VtZW50c0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzSW5saW5lcy5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lubGluZXMuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDIxMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEdlbmVyaWNBcmd1bWVudHNJbmxpbmVzX2gKKyNk
ZWZpbmUgR2VuZXJpY0FyZ3VtZW50c0lubGluZXNfaAorCisjaW5jbHVkZSAiR2VuZXJpY0FyZ3Vt
ZW50cy5oIgorI2luY2x1ZGUgIkpTQXJndW1lbnRzSXRlcmF0b3IuaCIKKyNpbmNsdWRlICJKU0NJ
bmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPgor
Ym9vbCBHZW5lcmljQXJndW1lbnRzPFR5cGU+OjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3Qq
IG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgaWRlbnQsIFByb3BlcnR5U2xv
dCYgc2xvdCkKK3sKKyAgICBUeXBlKiB0aGlzT2JqZWN0ID0ganNDYXN0PFR5cGUqPihvYmplY3Qp
OworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgCisgICAgaWYgKCF0aGlzT2JqZWN0LT5v
dmVycm9kZVRoaW5ncygpKSB7CisgICAgICAgIGlmIChpZGVudCA9PSB2bS5wcm9wZXJ0eU5hbWVz
LT5sZW5ndGgpIHsKKyAgICAgICAgICAgIHNsb3Quc2V0VmFsdWUodGhpc09iamVjdCwgRG9udEVu
dW0sIGpzTnVtYmVyKHRoaXNPYmplY3QtPmludGVybmFsTGVuZ3RoKCkpKTsKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmIChpZGVudCA9PSB2bS5wcm9wZXJ0
eU5hbWVzLT5jYWxsZWUpIHsKKyAgICAgICAgICAgIHNsb3Quc2V0VmFsdWUodGhpc09iamVjdCwg
RG9udEVudW0sIHRoaXNPYmplY3QtPmNhbGxlZSgpLmdldCgpKTsKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHVuc2lnbmVkIGluZGV4ID0gaWRl
bnQuYXNJbmRleCgpOworICAgIGlmICh0aGlzT2JqZWN0LT5jYW5BY2Nlc3NJbmRleFF1aWNrbHko
aW5kZXgpKSB7CisgICAgICAgIHNsb3Quc2V0VmFsdWUodGhpc09iamVjdCwgTm9uZSwgdGhpc09i
amVjdC0+Z2V0SW5kZXhRdWlja2x5KGluZGV4KSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KKyAgICAKKyAgICBpZiAoQmFzZTo6Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIGV4
ZWMsIGlkZW50LCBzbG90KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgCisgICAgaWYgKGlk
ZW50ID09IHZtLnByb3BlcnR5TmFtZXMtPml0ZXJhdG9yUHJpdmF0ZU5hbWUpIHsKKyAgICAgICAg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3Qo
KTsKKyAgICAgICAgdGhpc09iamVjdC0+SlNDX05BVElWRV9GVU5DVElPTih2bS5wcm9wZXJ0eU5h
bWVzLT5pdGVyYXRvclByaXZhdGVOYW1lLCBhcmd1bWVudHNGdW5jSXRlcmF0b3IsIERvbnRFbnVt
LCAwKTsKKyAgICAgICAgaWYgKEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVj
dCwgZXhlYywgaWRlbnQsIHNsb3QpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
ICAgIAorICAgIHJldHVybiBmYWxzZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4KK2Jv
b2wgR2VuZXJpY0FyZ3VtZW50czxUeXBlPjo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU09i
amVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGluZGV4LCBQcm9wZXJ0eVNs
b3QmIHNsb3QpCit7CisgICAgVHlwZSogdGhpc09iamVjdCA9IGpzQ2FzdDxUeXBlKj4ob2JqZWN0
KTsKKyAgICAKKyAgICBpZiAodGhpc09iamVjdC0+Y2FuQWNjZXNzSW5kZXhRdWlja2x5KGluZGV4
KSkgeworICAgICAgICBzbG90LnNldFZhbHVlKHRoaXNPYmplY3QsIE5vbmUsIHRoaXNPYmplY3Qt
PmdldEluZGV4UXVpY2tseShpbmRleCkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cisg
ICAgCisgICAgcmV0dXJuIEJhc2U6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgob2JqZWN0LCBl
eGVjLCBpbmRleCwgc2xvdCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFR5cGU+Cit2b2lkIEdl
bmVyaWNBcmd1bWVudHM8VHlwZT46OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVj
dCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgYXJyYXksIEVudW1lcmF0aW9u
TW9kZSBtb2RlKQoreworICAgIFR5cGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8VHlwZSo+KG9iamVj
dCk7CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRoaXNPYmplY3QtPmludGVy
bmFsTGVuZ3RoKCk7ICsraSkgeworICAgICAgICBpZiAoIXRoaXNPYmplY3QtPmNhbkFjY2Vzc0lu
ZGV4UXVpY2tseShpbmRleCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgYXJyYXku
YWRkKElkZW50aWZpZXI6OmZyb20oZXhlYywgaSkpOworICAgIH0KKyAgICBpZiAoc2hvdWxkSW5j
bHVkZURvbnRFbnVtUHJvcGVydGllcyhtb2RlKSAmJiAhdGhpc09iamVjdC0+b3ZlcnJvZGVUaGlu
Z3MoKSkgeworICAgICAgICBhcnJheS5hZGQoZXhlYy0+cHJvcGVydHlOYW1lcygpLmNhbGxlZSk7
CisgICAgICAgIGFycmF5LmFkZChleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKTsKKyAgICB9
CisgICAgQmFzZTo6Z2V0T3duUHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBleGVjLCBhcnJheSwg
bW9kZSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFR5cGU+Cit2b2lkIEdlbmVyaWNBcmd1bWVu
dHM8VHlwZT46OnB1dChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1l
IGlkZW50LCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgVHlw
ZSogdGhpc09iamVjdCA9IGpzQ2FzdDxUeXBlKj4ob2JqZWN0KTsKKyAgICBWTSYgdm0gPSBleGVj
LT52bSgpOworICAgIAorICAgIGlmICghdGhpc09iamVjdC0+b3ZlcnJvZGVUaGluZ3MoKQorICAg
ICAgICAmJiAoaWRlbnQgPT0gdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoCisgICAgICAgICAgICB8
fCBpZGVudCA9PSB2bS5wcm9wZXJ0eU5hbWVzLT5jYWxsZWUpKQorICAgICAgICB0aGlzT2JqZWN0
LT5zbG93RG93bkFuZFdhc3RlTWVtb3J5KHZtKTsKKyAgICAKKyAgICB1bnNpZ25lZCBpbmRleCA9
IGlkZW50LmFzSW5kZXgoKTsKKyAgICBpZiAodGhpc09iamVjdC0+Y2FuQWNjZXNzSW5kZXhRdWlj
a2x5KGluZGV4KSkgeworICAgICAgICBzZXRJbmRleFF1aWNrbHkodm0sIGluZGV4LCB2YWx1ZSk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgQmFzZTo6cHV0KHRoaXNPYmplY3Qs
IGV4ZWMsIGlkZW50LCB2YWx1ZSwgc2xvdCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFR5cGU+
Cit2b2lkIEdlbmVyaWNBcmd1bWVudHM8VHlwZT46OnB1dEJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBF
eGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGluZGV4LCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3Vs
ZFRocm93KQoreworICAgIFR5cGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8VHlwZSo+KG9iamVjdCk7
CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICAKKyAgICBpZiAodGhpc09iamVjdC0+Y2Fu
U2V0SW5kZXhRdWlja2x5KGluZGV4KSkgeworICAgICAgICBzZXRJbmRleFF1aWNrbHkodm0sIGlu
ZGV4LCB2YWx1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIEJh
c2U6OnB1dEJ5SW5kZXgoY2VsbCwgZXhlYywgaW5kZXgsIHZhbHVlLCBzaG91bGRUaHJvdyk7Cit9
CisKK3RlbXBsYXRlPHR5cGVuYW1lIFR5cGU+Cit2b2lkIEdlbmVyaWNBcmd1bWVudHM8VHlwZT46
OmRlbGV0ZVByb3BlcnR5KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5h
bWUgaWRlbnQpCit7CisgICAgVHlwZSogdGhpc09iamVjdCA9IGpzQ2FzdDxUeXBlKj4ob2JqZWN0
KTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIAorICAgIGlmICghdGhpc09iamVjdC0+
b3ZlcnJvZGVUaGluZ3MoKQorICAgICAgICAmJiAoaWRlbnQgPT0gdm0ucHJvcGVydHlOYW1lcy0+
bGVuZ3RoCisgICAgICAgICAgICB8fCBpZGVudCA9PSB2bS5wcm9wZXJ0eU5hbWVzLT5jYWxsZWUp
KQorICAgICAgICB0aGlzT2JqZWN0LT5zbG93RG93bkFuZFdhc3RlTWVtb3J5KHZtKTsKKyAgICAK
KyAgICB1bnNpZ25lZCBpbmRleCA9IGlkZW50LmFzSW5kZXgoKTsKKyAgICBpZiAodGhpc09iamVj
dC0+Y2FuQWNjZXNzSW5kZXhRdWlja2x5KGluZGV4KSkgeworICAgICAgICB0aGlzT2JqZWN0LT5v
dmVycmlkZUFyZ3VtZW50KHZtLCBpbmRleCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
CisgICAgQmFzZTo6ZGVsZXRlUHJvcGVydHkodGhpc09iamVjdCwgZXhlYywgaWRlbnQpOworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPgordm9pZCBHZW5lcmljQXJndW1lbnRzPFR5cGU+Ojpk
ZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2ln
bmVkIGluZGV4KQoreworICAgIFR5cGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8VHlwZSo+KG9iamVj
dCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICAKKyAgICBpZiAodGhpc09iamVjdC0+
Y2FuQWNjZXNzSW5kZXhRdWlja2x5KGluZGV4KSkgeworICAgICAgICB0aGlzT2JqZWN0LT5vdmVy
cmlkZUFyZ3VtZW50KHZtLCBpbmRleCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisg
ICAgcmV0dXJuIEJhc2U6OmRlbGV0ZVByb3BlcnR5QnlJbmRleChjZWxsLCBleGVjLCBpbmRleCk7
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFR5cGU+Cit2b2lkIEdlbmVyaWNBcmd1bWVudHM8VHlw
ZT46OmRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywg
UHJvcGVydHlOYW1lIGlkZW50LCBjb25zdCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3Is
IGJvb2wgc2hvdWxkVGhyb3cpCit7CisgICAgVHlwZSogdGhpc09iamVjdCA9IGpzQ2FzdDxUeXBl
Kj4ob2JqZWN0KTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIAorICAgIGlmIChpZGVu
dCA9PSB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgKKyAgICAgICAgfHwgaWRlbnQgPT0gdm0ucHJv
cGVydHlOYW1lcy0+Y2FsbGVlKQorICAgICAgICB0aGlzT2JqZWN0LT5zbG93RG93bkFuZFdhc3Rl
TWVtb3J5SWZOZWNlc3Nhcnkodm0pOworICAgIGVsc2UgeworICAgICAgICB1bnNpZ25lZCBpbmRl
eCA9IGlkZW50LmFzSW5kZXgoKTsKKyAgICAgICAgaWYgKHRoaXNPYmplY3QtPmNhbkFjY2Vzc0Fy
Z3VtZW50UXVpY2tseShpbmRleCkpIHsKKyAgICAgICAgICAgIGlmICghZGVzY3JpcHRvci5pc0Fj
Y2Vzc29yRGVzY3JpcHRvcigpKSB7CisgICAgICAgICAgICAgICAgLy8gSWYgdGhlIHByb3BlcnR5
IGlzIG5vdCBkZWxldGVkIGFuZCB3ZSBhcmUgdXNpbmcgYSBub24tYWNjZXNzb3IgZGVzY3JpcHRv
ciwgdGhlbgorICAgICAgICAgICAgICAgIC8vIG1ha2Ugc3VyZSB0aGF0IHRoZSBhbGlhc2VkIGFy
Z3VtZW50IHNlZXMgdGhlIHZhbHVlLgorICAgICAgICAgICAgICAgIGlmIChkZXNjcmlwdG9yLnZh
bHVlKCkpCisgICAgICAgICAgICAgICAgICAgIHRoaXNPYmplY3QtPnNldEluZGV4UXVpY2tseSh2
bSwgaSwgZGVzY3JpcHRvci52YWx1ZSgpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
IC8vIElmIHRoZSBwcm9wZXJ0eSBpcyBub3QgZGVsZXRlZCBhbmQgd2UgYXJlIHVzaW5nIGEgbm9u
LWFjY2Vzc29yLCB3cml0YWJsZQorICAgICAgICAgICAgICAgIC8vIGRlc2NyaXB0b3IsIHRoZW4g
d2UgYXJlIGRvbmUuIFRoZSBhcmd1bWVudCBjb250aW51ZXMgdG8gYmUgYWxpYXNlZC4gTm90ZSB0
aGF0IHdlCisgICAgICAgICAgICAgICAgLy8gaWdub3JlIHRoZSByZXF1ZXN0IHRvIGNoYW5nZSBl
bnVtZXJhYmlsaXR5LiBXZSBhcHBlYXIgdG8gaGF2ZSBhbHdheXMgZG9uZSBzbywgaW4KKyAgICAg
ICAgICAgICAgICAvLyBjYXNlcyB3aGVyZSB0aGUgYXJndW1lbnQgd2FzIHN0aWxsIGFsaWFzZWQu
CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNDE5NTIKKyAgICAgICAgICAgICAgICBpZiAoZGVzY3JpcHRvci53cml0YWJs
ZSgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgICAgICAvLyBJZiB0aGUgcHJvcGVydHkgaXMgYSBub24tZGVsZXRlZCBh
cmd1bWVudCwgdGhlbiBtb3ZlIGl0IGludG8gdGhlIGJhc2Ugb2JqZWN0IGFuZAorICAgICAgICAg
ICAgLy8gdGhlbiBkZWxldGUgaXQuCisgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gdGhpc09i
amVjdC0+Z2V0SW5kZXhRdWlja2x5KGkpOworICAgICAgICAgICAgQVNTRVJUKHZhbHVlKTsKKyAg
ICAgICAgICAgIG9iamVjdC0+cHV0RGlyZWN0TWF5QmVJbmRleChleGVjLCBwcm9wZXJ0eU5hbWUs
IHZhbHVlKTsKKyAgICAgICAgICAgIHRoaXNPYmplY3QtPm92ZXJyaWRlQXJndW1lbnQodm0sIGkp
OworICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8vIE5vdyBqdXN0IGxldCB0aGUgbm9ybWFs
IG9iamVjdCBtYWNoaW5lcnkgZG8gaXRzIHRoaW5nLgorICAgIHJldHVybiBCYXNlOjpkZWZpbmVP
d25Qcm9wZXJ0eShvYmplY3QsIGV4ZWMsIGlkZW50LCBkZXNjcmlwdG9yLCBzaG91bGRUaHJvdyk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gR2VuZXJpY0FyZ3VtZW50c0lu
bGluZXNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljT2Zm
c2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJp
Y09mZnNldC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
R2VuZXJpY09mZnNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTExIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgR2VuZXJpY09m
ZnNldF9oCisjZGVmaW5lIEdlbmVyaWNPZmZzZXRfaAorCisjaW5jbHVkZSA8d3RmL0Fzc2VydGlv
bnMuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKKy8vIEEgbWl4aW4gZm9yIGNyZWF0aW5nIHRoZSB2
YXJpb3VzIGtpbmRzIG9mIHZhcmlhYmxlIG9mZnNldHMgdGhhdCBvdXIgZW5naW5lIHN1cHBvcnRz
LgordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2NsYXNzIEdlbmVyaWNPZmZzZXQgeworcHVibGljOgor
ICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnZhbGlkT2Zmc2V0ID0gVUlOVF9NQVg7CisgICAg
CisgICAgR2VuZXJpY09mZnNldCgpCisgICAgICAgIDogbV9vZmZzZXQoaW52YWxpZE9mZnNldCkK
KyAgICB7CisgICAgfQorICAgIAorICAgIGV4cGxpY2l0IEdlbmVyaWNPZmZzZXQodW5zaWduZWQg
b2Zmc2V0KQorICAgICAgICA6IG1fb2Zmc2V0KG9mZnNldCkKKyAgICB7CisgICAgfQorICAgIAor
ICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQgPT0gaW52YWxpZE9m
ZnNldDsgfQorICAgIAorICAgIHVuc2lnbmVkIG9mZnNldFVuY2hlY2tlZCgpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gbV9vZmZzZXQ7CisgICAgfQorICAgIAorICAgIHVuc2lnbmVkIG9m
ZnNldCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQobV9vZmZzZXQgIT0gaW52YWxpZE9m
ZnNldCk7CisgICAgICAgIHJldHVybiBtX29mZnNldDsKKyAgICB9CisgICAgCisgICAgYm9vbCBv
cGVyYXRvcj09KGNvbnN0IFQmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1f
b2Zmc2V0ID09IG90aGVyLm9mZnNldFVuY2hlY2tlZCgpOworICAgIH0KKyAgICBib29sIG9wZXJh
dG9yIT0oY29uc3QgVCYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9vZmZz
ZXQgIT0gb3RoZXIub2Zmc2V0VW5jaGVja2VkKCk7CisgICAgfQorICAgIGJvb2wgb3BlcmF0b3I8
KGNvbnN0IFQmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fb2Zmc2V0IDwg
b3RoZXIub2Zmc2V0VW5jaGVja2VkKCk7CisgICAgfQorICAgIGJvb2wgb3BlcmF0b3I+KGNvbnN0
IFQmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fb2Zmc2V0ID4gb3RoZXIu
b2Zmc2V0VW5jaGVja2VkKCk7CisgICAgfQorICAgIGJvb2wgb3BlcmF0b3I8PShjb25zdCBUJiBv
dGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX29mZnNldCA8PSBvdGhlci5vZmZz
ZXRVbmNoZWNrZWQoKTsKKyAgICB9CisgICAgYm9vbCBvcGVyYXRvcj49KGNvbnN0IFQmIG90aGVy
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fb2Zmc2V0ID49IG90aGVyLm9mZnNldFVu
Y2hlY2tlZCgpOworICAgIH0KKyAgICAKKyAgICBUIG9wZXJhdG9yKyhpbnQgdmFsdWUpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gVChvZmZzZXQoKSArIHZhbHVlKTsKKyAgICB9CisgICAg
VCBvcGVyYXRvci0oaW50IHZhbHVlKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIFQob2Zm
c2V0KCkgLSB2YWx1ZSk7CisgICAgfQorICAgIFQmIG9wZXJhdG9yKz0oaW50IHZhbHVlKQorICAg
IHsKKyAgICAgICAgcmV0dXJuICp0aGlzID0gKnRoaXMgKyB2YWx1ZTsKKyAgICB9CisgICAgVCYg
b3BlcmF0b3ItPShpbnQgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gKnRoaXMgPSAqdGhp
cyAtIHZhbHVlOworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgdW5zaWduZWQgbV9vZmZzZXQ7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEdlbmVyaWNPZmZzZXRfaAor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FyZ3VtZW50c0l0ZXJhdG9y
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FyZ3Vt
ZW50c0l0ZXJhdG9yLmNwcAkocmV2aXNpb24gMTgwNzIwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNBcmd1bWVudHNJdGVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlLCBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTUgQXBwbGUsIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzMs
MTAgKzMzLDE4IEBAIG5hbWVzcGFjZSBKU0MgewogCiBjb25zdCBDbGFzc0luZm8gSlNBcmd1bWVu
dHNJdGVyYXRvcjo6c19pbmZvID0geyAiQXJndW1lbnRzSXRlcmF0b3IiLCAmQmFzZTo6c19pbmZv
LCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTQXJndW1lbnRzSXRlcmF0b3IpIH07CiAKLXZvaWQg
SlNBcmd1bWVudHNJdGVyYXRvcjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBBcmd1bWVudHMqIGFy
Z3VtZW50cykKK3ZvaWQgSlNBcmd1bWVudHNJdGVyYXRvcjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZt
LCBKU09iamVjdCogYXJndW1lbnRzKQogewogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsK
ICAgICBtX2FyZ3VtZW50cy5zZXQodm0sIHRoaXMsIGFyZ3VtZW50cyk7CiB9CiAKK0VuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJndW1lbnRzRnVuY0l0ZXJhdG9yKEV4ZWNTdGF0ZSogZXhl
YykKK3sKKyAgICBKU09iamVjdCogdGhpc09iaiA9IGV4ZWMtPnRoaXNWYWx1ZSgpLnRvVGhpcyhl
eGVjLCBTdHJpY3RNb2RlKS50b09iamVjdChleGVjKTsKKyAgICBpZiAoIXRoaXNPYmotPmluaGVy
aXRzKEFyZ3VtZW50czo6aW5mbygpKSAmJiAhdGhpc09iai0+aW5oZXJpdHMoT3V0T2ZCYW5kQXJn
dW1lbnRzOjppbmZvKCkpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93VHlw
ZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiQXR0ZW1wdGVkIHRvIHVzZSBBcmd1bWVudHMgaXRl
cmF0b3Igb24gbm9uLUFyZ3VtZW50cyBvYmplY3QiKSkpOworICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoSlNBcmd1bWVudHNJdGVyYXRvcjo6Y3JlYXRlKGV4ZWMtPnZtKCksIGV4ZWMtPmNhbGxl
ZSgpLT5nbG9iYWxPYmplY3QoKS0+YXJndW1lbnRzSXRlcmF0b3JTdHJ1Y3R1cmUoKSwgdGhpc09i
aikpOworfQorCiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FyZ3Vt
ZW50c0l0ZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNBcmd1bWVudHNJdGVyYXRvci5oCShyZXZpc2lvbiAxODA3MjApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0FyZ3VtZW50c0l0ZXJhdG9yLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlLCBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTUgQXBwbGUsIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMjYsNyArMjYsNyBAQAogI2lmbmRlZiBKU0FyZ3VtZW50c0l0ZXJhdG9yX2gKICNkZWZpbmUg
SlNBcmd1bWVudHNJdGVyYXRvcl9oCiAKLSNpbmNsdWRlICJBcmd1bWVudHMuaCIKKyNpbmNsdWRl
ICJKU09iamVjdC5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtNDEsNyArNDEsNyBAQCBwdWJs
aWM6CiAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBw
cm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsK
ICAgICB9CiAKLSAgICBzdGF0aWMgSlNBcmd1bWVudHNJdGVyYXRvciogY3JlYXRlKFZNJiB2bSwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEFyZ3VtZW50cyogYXJndW1lbnRzKQorICAgIHN0YXRpYyBK
U0FyZ3VtZW50c0l0ZXJhdG9yKiBjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
SlNPYmplY3QqIGFyZ3VtZW50cykKICAgICB7CiAgICAgICAgIEpTQXJndW1lbnRzSXRlcmF0b3Iq
IGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNBcmd1bWVudHNJdGVyYXRv
cj4odm0uaGVhcCkpIEpTQXJndW1lbnRzSXRlcmF0b3Iodm0sIHN0cnVjdHVyZSk7CiAgICAgICAg
IGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbih2bSwgYXJndW1lbnRzKTsKQEAgLTUwLDExICs1MCwx
MSBAQCBwdWJsaWM6CiAKICAgICBib29sIG5leHQoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTVmFs
dWUmIHZhbHVlKQogICAgIHsKLSAgICAgICAgaWYgKG1fbmV4dEluZGV4ID49IG1fYXJndW1lbnRz
LT5sZW5ndGgoY2FsbEZyYW1lKSkKKyAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0KKyAgICAgICAg
ICAgIG1fYXJndW1lbnRzLT5nZXQoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPnByb3BlcnR5TmFtZXMo
KS5sZW5ndGgpLnRvVUludDMyKGNhbGxGcmFtZSk7CisgICAgICAgIGlmIChtX25leHRJbmRleCA+
PSBsZW5ndGgpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHZhbHVlID0gbV9h
cmd1bWVudHMtPnRyeUdldEFyZ3VtZW50KG1fbmV4dEluZGV4KyspOwotICAgICAgICBpZiAoIXZh
bHVlKQotICAgICAgICAgICAgdmFsdWUgPSBqc1VuZGVmaW5lZCgpOworICAgICAgICB2YWx1ZSA9
IG1fYXJndW1lbnRzLT5nZXRJbmRleChjYWxsRnJhbWUsIG1fbmV4dEluZGV4KyspOwogICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTY4LDEyICs2OCwxNCBAQCBwcml2YXRlOgogICAg
IHsKICAgICB9CiAKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgQXJndW1lbnRzKik7Cisg
ICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIEpTT2JqZWN0Kik7CiAgICAgCi0gICAgV3JpdGVC
YXJyaWVyPEFyZ3VtZW50cz4gbV9hcmd1bWVudHM7CisgICAgV3JpdGVCYXJyaWVyPEpTT2JqZWN0
PiBtX2FyZ3VtZW50czsKICAgICBzaXplX3QgbV9uZXh0SW5kZXg7CiB9OwogCitFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGFyZ3VtZW50c0Z1bmNJdGVyYXRvcihFeGVjU3RhdGUqKTsKKwog
fQogCiAjZW5kaWYgLy8gIWRlZmluZWQoSlNBcmd1bWVudHNJdGVyYXRvcl9oKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNFbnZpcm9ubWVudFJlY29yZC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNFbnZpcm9ubWVudFJlY29y
ZC5jcHAJKHJldmlzaW9uIDE4MDcyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTRW52aXJvbm1lbnRSZWNvcmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMTIsIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0zNSw0ICszNSwxMiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY29uc3QgQ2xhc3NJbmZv
IEpTRW52aXJvbm1lbnRSZWNvcmQ6OnNfaW5mbyA9IHsgIkVudmlyb25tZW50UmVjb3JkIiwgJkJh
c2U6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU0Vudmlyb25tZW50UmVjb3JkKSB9
OwogCit2b2lkIEpTRW52aXJvbm1lbnRSZWNvcmQ6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxs
LCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBKU0Vudmlyb25tZW50UmVjb3JkKiB0aGlz
T2JqZWN0ID0ganNDYXN0PEpTRW52aXJvbm1lbnRSZWNvcmQqPihjZWxsKTsKKyAgICBBU1NFUlRf
R0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CisgICAgQmFzZTo6dmlzaXRD
aGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKKyAgICB2aXNpdG9yLmFwcGVuZFZhbHVlcyh0
aGlzT2JqZWN0LT52YXJpYWJsZXMoKSwgbV9zeW1ib2xUYWJsZS0+c2NvcGVTaXplKCkpOworfQor
CiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTRW52aXJvbm1lbnRSZWNvcmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0Vudmlyb25tZW50UmVjb3JkLmgJKHJldmlzaW9uIDE4MDcyMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRW52aXJvbm1lbnRSZWNvcmQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDYsMTEgKzQ2LDI2IEBAIGNsYXNzIEpTRW52aXJvbm1lbnRSZWNvcmQgOiBw
dWJsaWMgSlNTeW0KIHB1YmxpYzoKICAgICB0eXBlZGVmIEpTU3ltYm9sVGFibGVPYmplY3QgQmFz
ZTsKIAotICAgIFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIHJlZ2lzdGVycygpIHsgcmV0dXJu
IG1fcmVnaXN0ZXJzOyB9Ci0gICAgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiYgcmVnaXN0ZXJB
dChpbnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fcmVnaXN0ZXJzW2luZGV4XTsgfQorICAgIFdy
aXRlQmFycmllckJhc2U8VW5rbm93bj4qIHZhcmlhYmxlcygpCisgICAgeworICAgICAgICByZXR1
cm4gYml0d2lzZV9jYXN0PFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qPihiaXR3aXNlX2Nhc3Q8
Y2hhcio+KHRoaXMpICsgb2Zmc2V0T2ZWYXJpYWJsZXMoKSk7CisgICAgfQorICAgIAorICAgIGJv
b2wgaXNWYWxpZChTY29wZU9mZnNldCBvZmZzZXQpCisgICAgeworICAgICAgICByZXR1cm4gISFv
ZmZzZXQgJiYgb2Zmc2V0Lm9mZnNldCgpIDwgbV9zeW1ib2xUYWJsZS0+c2NvcGVTaXplKCk7Cisg
ICAgfQorICAgIAorICAgIFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4mIHZhcmlhYmxlQXQoU2Nv
cGVPZmZzZXQgb2Zmc2V0KSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzVmFsaWQob2Zm
c2V0KSk7CisgICAgICAgIHJldHVybiB2YXJpYWJsZXMoKVtvZmZzZXQub2Zmc2V0KCldOworICAg
IH0KIAotICAgIFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIGNvbnN0ICogYWRkcmVzc09mUmVn
aXN0ZXJzKCkgY29uc3QgeyByZXR1cm4gJm1fcmVnaXN0ZXJzOyB9Ci0gICAgc3RhdGljIHNpemVf
dCBvZmZzZXRPZlJlZ2lzdGVycygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU0Vudmlyb25t
ZW50UmVjb3JkLCBtX3JlZ2lzdGVycyk7IH0KKyAgICBzdGF0aWMgc2l6ZV90IG9mZnNldE9mVmFy
aWFibGVzKCkKKyAgICB7CisgICAgICAgIHJldHVybiBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Y8
c2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPik+KHNpemVvZihKU0Vudmlyb25tZW50UmVjb3Jk
KSk7CisgICAgfQogCiAgICAgREVDTEFSRV9JTkZPOwogCkBAIC02MCwxNSArNzUsMzUgQEAgcHJv
dGVjdGVkOgogICAgIEpTRW52aXJvbm1lbnRSZWNvcmQoCiAgICAgICAgIFZNJiB2bSwKICAgICAg
ICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsCi0gICAgICAgIFJlZ2lzdGVyKiByZWdpc3RlcnMsCiAg
ICAgICAgIEpTU2NvcGUqIHNjb3BlLAogICAgICAgICBTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUp
CiAgICAgICAgIDogQmFzZSh2bSwgc3RydWN0dXJlLCBzY29wZSwgc3ltYm9sVGFibGUpCi0gICAg
ICAgICwgbV9yZWdpc3RlcnMocmVpbnRlcnByZXRfY2FzdDxXcml0ZUJhcnJpZXJCYXNlPFVua25v
d24+Kj4ocmVnaXN0ZXJzKSkKICAgICB7CiAgICAgfQotCi0gICAgV3JpdGVCYXJyaWVyQmFzZTxV
bmtub3duPiogbV9yZWdpc3RlcnM7IC8vICJyIiBpbiB0aGUgc3RhY2suCisgICAgCisgICAgc3Rh
dGljIHNpemVfdCBhbGxvY2F0aW9uU2l6ZUZvclNjb3BlU2l6ZSh1bnNpZ25lZCBzY29wZVNpemUp
CisgICAgeworICAgICAgICByZXR1cm4gb2Zmc2V0T2ZWYXJpYWJsZXMoKSArIHNjb3BlU2l6ZSAq
IHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMg
c2l6ZV90IGFsbG9jYXRpb25TaXplKFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBhbGxvY2F0aW9uU2l6ZUZvclNjb3BlU2l6ZShzeW1ib2xUYWJsZS0+c2Nv
cGVTaXplKCkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uVW5pbml0aWFs
aXplZChWTSYgdm0pCisgICAgeworICAgICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7Cisg
ICAgfQorICAgIAorICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mIHZtKQorICAgIHsKKyAgICAg
ICAgZmluaXNoQ3JlYXRpb25VbmluaXRpYWxpemVkKHZtKTsKKyAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gbV9zeW1ib2xUYWJsZS0+c2NvcGVTaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgIC8v
IEZpbGxpbmcgdGhpcyB3aXRoIHVuZGVmaW5lZCBpcyB1c2VmdWwgYmVjYXVzZSB0aGF0J3Mgd2hh
dCB2YXJpYWJsZXMgc3RhcnQgb3V0IGFzLgorICAgICAgICAgICAgdmFyaWFibGVBdChpKS5zZXRV
bmRlZmluZWQoKTsKKyAgICAgICAgfQorICAgIH0KIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMZXhpY2FsRW52aXJvbm1lbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTGV4aWNh
bEVudmlyb25tZW50LmNwcAkocmV2aXNpb24gMTgwNzIwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNMZXhpY2FsRW52aXJvbm1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSwgMjAxNCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDksIDIw
MTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC00MCwyNyArNDAsMTkgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNv
bnN0IENsYXNzSW5mbyBKU0xleGljYWxFbnZpcm9ubWVudDo6c19pbmZvID0geyAiSlNMZXhpY2Fs
RW52aXJvbm1lbnQiLCAmQmFzZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTTGV4
aWNhbEVudmlyb25tZW50KSB9OwogCi12b2lkIEpTTGV4aWNhbEVudmlyb25tZW50Ojp2aXNpdENo
aWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi17Ci0gICAgSlNMZXhp
Y2FsRW52aXJvbm1lbnQqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNMZXhpY2FsRW52aXJvbm1lbnQq
PihjZWxsKTsKLSAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8o
KSk7Ci0gICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKLQotICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgdGhpc09iamVjdC0+c3ltYm9sVGFibGUoKS0+Y2FwdHVyZUNv
dW50KCk7ICsraSkKLSAgICAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPnN0b3JhZ2Uo
KVtpXSk7Ci19Ci0KIGlubGluZSBib29sIEpTTGV4aWNhbEVudmlyb25tZW50OjpzeW1ib2xUYWJs
ZUdldChQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAg
ICAgU3ltYm9sVGFibGVFbnRyeSBlbnRyeSA9IHN5bWJvbFRhYmxlKCktPmlubGluZUdldChwcm9w
ZXJ0eU5hbWUudWlkKCkpOwogICAgIGlmIChlbnRyeS5pc051bGwoKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCisgICAgU2NvcGVPZmZzZXQgb2Zmc2V0ID0gZW50cnkuc2NvcGVPZmZzZXQoKTsK
KwogICAgIC8vIERlZmVuZCBhZ2FpbnN0IHRoZSBpbnNwZWN0b3IgYXNraW5nIGZvciBhIHZhciBh
ZnRlciBpdCBoYXMgYmVlbiBvcHRpbWl6ZWQgb3V0LgotICAgIGlmICghaXNWYWxpZChlbnRyeSkp
CisgICAgaWYgKCFpc1ZhbGlkKG9mZnNldCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAg
IHNsb3Quc2V0VmFsdWUodGhpcywgRG9udEVudW0sIHJlZ2lzdGVyQXQoZW50cnkuZ2V0SW5kZXgo
KSkuZ2V0KCkpOworICAgIHNsb3Quc2V0VmFsdWUodGhpcywgRG9udEVudW0sIHZhcmlhYmxlQXQo
b2Zmc2V0KS5nZXQoKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTcwLDExICs2MiwxMyBA
QCBpbmxpbmUgYm9vbCBKU0xleGljYWxFbnZpcm9ubWVudDo6c3ltYm9sCiAgICAgaWYgKGVudHJ5
LmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICBTY29wZU9mZnNldCBvZmZz
ZXQgPSBlbnRyeS5zY29wZU9mZnNldCgpOworCiAgICAgLy8gRGVmZW5kIGFnYWluc3QgdGhlIGlu
c3BlY3RvciBhc2tpbmcgZm9yIGEgdmFyIGFmdGVyIGl0IGhhcyBiZWVuIG9wdGltaXplZCBvdXQu
Ci0gICAgaWYgKCFpc1ZhbGlkKGVudHJ5KSkKKyAgICBpZiAoIWlzVmFsaWQob2Zmc2V0KSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKHJlZ2lz
dGVyQXQoZW50cnkuZ2V0SW5kZXgoKSkuZ2V0KCksIGVudHJ5LmdldEF0dHJpYnV0ZXMoKSk7Cisg
ICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKHZhcmlhYmxlQXQob2Zmc2V0KS5nZXQoKSwgZW50
cnkuZ2V0QXR0cmlidXRlcygpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtOTUsMTIgKzg5
LDEzIEBAIGlubGluZSBib29sIEpTTGV4aWNhbEVudmlyb25tZW50OjpzeW1ib2wKICAgICAgICAg
ICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBTdHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdy
aXRlRXJyb3IpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KKyAgICAgICAg
U2NvcGVPZmZzZXQgb2Zmc2V0ID0gaXRlci0+dmFsdWUuc2NvcGVPZmZzZXQoKTsKICAgICAgICAg
Ly8gRGVmZW5kIGFnYWluc3QgdGhlIGluc3BlY3RvciBhc2tpbmcgZm9yIGEgdmFyIGFmdGVyIGl0
IGhhcyBiZWVuIG9wdGltaXplZCBvdXQuCi0gICAgICAgIGlmICghaXNWYWxpZChpdGVyLT52YWx1
ZSkpCisgICAgICAgIGlmICghaXNWYWxpZChvZmZzZXQpKQogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICBpZiAoVmFyaWFibGVXYXRjaHBvaW50U2V0KiBzZXQgPSBpdGVyLT52YWx1
ZS53YXRjaHBvaW50U2V0KCkpCi0gICAgICAgICAgICBzZXQtPmludmFsaWRhdGUoVmFyaWFibGVX
cml0ZUZpcmVEZXRhaWwodGhpcywgcHJvcGVydHlOYW1lKSk7IC8vIERvbid0IG1lc3MgYXJvdW5k
IC0gaWYgd2UgaGFkIGZvdW5kIHRoaXMgc3RhdGljYWxseSwgd2Ugd291bGQgaGF2ZSBpbnZjYWxp
ZGF0ZWQgaXQuCi0gICAgICAgIHJlZyA9ICZyZWdpc3RlckF0KGl0ZXItPnZhbHVlLmdldEluZGV4
KCkpOworICAgICAgICAgICAgc2V0LT5pbnZhbGlkYXRlKFZhcmlhYmxlV3JpdGVGaXJlRGV0YWls
KHRoaXMsIHByb3BlcnR5TmFtZSkpOyAvLyBEb24ndCBtZXNzIGFyb3VuZCAtIGlmIHdlIGhhZCBm
b3VuZCB0aGlzIHN0YXRpY2FsbHksIHdlIHdvdWxkIGhhdmUgaW52YWxpZGF0ZWQgaXQuCisgICAg
ICAgIHJlZyA9ICZ2YXJpYWJsZUF0KG9mZnNldCk7CiAgICAgfQogICAgIHJlZy0+c2V0KHZtLCB0
aGlzLCB2YWx1ZSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC0xMTYsNyArMTExLDcgQEAgdm9pZCBK
U0xleGljYWxFbnZpcm9ubWVudDo6Z2V0T3duTm9uSW5kZQogICAgICAgICBmb3IgKFN5bWJvbFRh
YmxlOjpNYXA6Oml0ZXJhdG9yIGl0ID0gdGhpc09iamVjdC0+c3ltYm9sVGFibGUoKS0+YmVnaW4o
bG9ja2VyKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgICAgICBpZiAoaXQtPnZhbHVlLmdl
dEF0dHJpYnV0ZXMoKSAmIERvbnRFbnVtICYmICFzaG91bGRJbmNsdWRlRG9udEVudW1Qcm9wZXJ0
aWVzKG1vZGUpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgaWYgKCF0
aGlzT2JqZWN0LT5pc1ZhbGlkKGl0LT52YWx1ZSkpCisgICAgICAgICAgICBpZiAoIXRoaXNPYmpl
Y3QtPmlzVmFsaWQoaXQtPnZhbHVlLnNjb3BlT2Zmc2V0KCkpKQogICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcihleGVjLCBp
dC0+a2V5LmdldCgpKSk7CiAgICAgICAgIH0KQEAgLTEzNywxMSArMTMyLDEzIEBAIGlubGluZSBi
b29sIEpTTGV4aWNhbEVudmlyb25tZW50OjpzeW1ib2wKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgU3ltYm9sVGFibGVFbnRyeSYgZW50cnkgPSBpdGVyLT52YWx1ZTsKICAgICAg
ICAgQVNTRVJUKCFlbnRyeS5pc051bGwoKSk7Ci0gICAgICAgIGlmICghaXNWYWxpZChlbnRyeSkp
CisgICAgICAgIAorICAgICAgICBTY29wZU9mZnNldCBvZmZzZXQgPSBlbnRyeS5zY29wZU9mZnNl
dCgpOworICAgICAgICBpZiAoIWlzVmFsaWQob2Zmc2V0KSkKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICAgCiAgICAgICAgIGVudHJ5LnNldEF0dHJpYnV0ZXMoYXR0cmlidXRlcyk7
Ci0gICAgICAgIHJlZyA9ICZyZWdpc3RlckF0KGVudHJ5LmdldEluZGV4KCkpOworICAgICAgICBy
ZWcgPSAmdmFyaWFibGVBdChvZmZzZXQpOwogICAgIH0KICAgICByZWctPnNldCh2bSwgdGhpcywg
dmFsdWUpOwogICAgIHJldHVybiB0cnVlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNMZXhpY2FsRW52aXJvbm1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0xleGljYWxFbnZpcm9ubWVudC5oCShyZXZpc2lvbiAxODA3MjAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xleGljYWxFbnZpcm9ubWVudC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
OCwgMjAwOSwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDgsIDIwMDksIDIwMTMtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQxLDMzICs0MSwy
NyBAQCBjbGFzcyBSZWdpc3RlcjsKICAgICAKIGNsYXNzIEpTTGV4aWNhbEVudmlyb25tZW50IDog
cHVibGljIEpTRW52aXJvbm1lbnRSZWNvcmQgewogcHJpdmF0ZToKLSAgICBKU0xleGljYWxFbnZp
cm9ubWVudChWTSYsIENhbGxGcmFtZSosIFJlZ2lzdGVyKiwgSlNTY29wZSosIENvZGVCbG9jayop
OworICAgIEpTTGV4aWNhbEVudmlyb25tZW50KFZNJiwgU3RydWN0dXJlKiwgSlNTY29wZSosIFN5
bWJvbFRhYmxlKik7CiAgICAgCiBwdWJsaWM6CiAgICAgdHlwZWRlZiBKU0Vudmlyb25tZW50UmVj
b3JkIEJhc2U7CiAKLSAgICBzdGF0aWMgSlNMZXhpY2FsRW52aXJvbm1lbnQqIGNyZWF0ZShWTSYg
dm0sIENhbGxGcmFtZSogY2FsbEZyYW1lLCBSZWdpc3RlciogcmVnaXN0ZXJzLCBKU1Njb3BlKiBj
dXJyZW50U2NvcGUsIENvZGVCbG9jayogY29kZUJsb2NrKQorICAgIHN0YXRpYyBKU0xleGljYWxF
bnZpcm9ubWVudCogY3JlYXRlKAorICAgICAgICBWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTU2NvcGUqIGN1cnJlbnRTY29wZSwgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxl
KQogICAgIHsKLSAgICAgICAgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlID0gY29kZUJsb2NrLT5z
eW1ib2xUYWJsZSgpOwotICAgICAgICBBU1NFUlQoY29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1
bmN0aW9uQ29kZSk7Ci0gICAgICAgIEpTTGV4aWNhbEVudmlyb25tZW50KiBsZXhpY2FsRW52aXJv
bm1lbnQgPSBuZXcgKAotICAgICAgICAgICAgTm90TnVsbCwKLSAgICAgICAgICAgIGFsbG9jYXRl
Q2VsbDxKU0xleGljYWxFbnZpcm9ubWVudD4oCi0gICAgICAgICAgICAgICAgdm0uaGVhcCwKLSAg
ICAgICAgICAgICAgICBhbGxvY2F0aW9uU2l6ZShzeW1ib2xUYWJsZSkKLSAgICAgICAgICAgICkK
LSAgICAgICAgKSBKU0xleGljYWxFbnZpcm9ubWVudCh2bSwgY2FsbEZyYW1lLCByZWdpc3RlcnMs
IGN1cnJlbnRTY29wZSwgY29kZUJsb2NrKTsKLSAgICAgICAgbGV4aWNhbEVudmlyb25tZW50LT5m
aW5pc2hDcmVhdGlvbih2bSk7Ci0gICAgICAgIHJldHVybiBsZXhpY2FsRW52aXJvbm1lbnQ7Cisg
ICAgICAgIEpTTGV4aWNhbEVudmlyb25tZW50KiByZXN1bHQgPQorICAgICAgICAgICAgbmV3IChO
b3ROdWxsLCBhbGxvY2F0aW9uU2l6ZShzeW1ib2xUYWJsZSkpCisgICAgICAgICAgICBKU0xleGlj
YWxFbnZpcm9ubWVudCh2bSwgZ2xvYmFsT2JqZWN0LT5hY3RpdmF0aW9uU3RydWN0dXJlKCksIGN1
cnJlbnRTY29wZSwgc3ltYm9sVGFibGUpOworICAgICAgICByZXN1bHQtPmZpbmlzaENyZWF0aW9u
KHZtKTsKICAgICB9Ci0gICAgICAgIAorICAgIAogICAgIHN0YXRpYyBKU0xleGljYWxFbnZpcm9u
bWVudCogY3JlYXRlKFZNJiB2bSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTU2NvcGUqIGN1cnJl
bnRTY29wZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2spCiAgICAgewotICAgICAgICByZXR1cm4gY3Jl
YXRlKHZtLCBjYWxsRnJhbWUsIGNhbGxGcmFtZS0+cmVnaXN0ZXJzKCkgKyBjb2RlQmxvY2stPmZy
YW1lUG9pbnRlck9mZnNldFRvR2V0QWN0aXZhdGlvblJlZ2lzdGVycygpLCBjdXJyZW50U2NvcGUs
IGNvZGVCbG9jayk7CisgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBjYWxs
RnJhbWUtPmxleGljYWxHbG9iYWxPYmplY3QoKTsKKyAgICAgICAgU3ltYm9sVGFibGUqIHN5bWJv
bFRhYmxlID0gY29kZUJsb2NrLT5zeW1ib2xUYWJsZSgpOworICAgICAgICByZXR1cm4gY3JlYXRl
KHZtLCBnbG9iYWxPYmplY3QsIGN1cnJlbnRTY29wZSwgc3ltYm9sdGFibGUpOwogICAgIH0KLQot
ICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKLQor
ICAgICAgICAKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqLCBF
eGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyB2b2lk
IGdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3Bl
cnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKIApAQCAtODEsMTIgKzc1LDYgQEAgcHVi
bGljOgogCiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkgeyByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0s
IGdsb2JhbE9iamVjdCwganNOdWxsKCksIFR5cGVJbmZvKEFjdGl2YXRpb25PYmplY3RUeXBlLCBT
dHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7IH0KIAotICAgIFdyaXRlQmFycmllckJhc2U8VW5rbm93
bj4mIHJlZ2lzdGVyQXQoaW50KSBjb25zdDsKLSAgICBib29sIGlzVmFsaWRJbmRleChpbnQpIGNv
bnN0OwotICAgIGJvb2wgaXNWYWxpZChjb25zdCBTeW1ib2xUYWJsZUVudHJ5JikgY29uc3Q7Ci0g
ICAgaW50IHJlZ2lzdGVyc09mZnNldCgpOwotICAgIHN0YXRpYyBpbnQgcmVnaXN0ZXJzT2Zmc2V0
KFN5bWJvbFRhYmxlKik7Ci0KIHByb3RlY3RlZDoKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQg
U3RydWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNH
ZXRQcm9wZXJ0eU5hbWVzIHwgQmFzZTo6U3RydWN0dXJlRmxhZ3M7CiAKQEAgLTk2LDMyICs4NCwx
MyBAQCBwcml2YXRlOgogICAgIGJvb2wgc3ltYm9sVGFibGVHZXQoUHJvcGVydHlOYW1lLCBQcm9w
ZXJ0eVNsb3QmLCBib29sJiBzbG90SXNXcml0ZWFibGUpOwogICAgIGJvb2wgc3ltYm9sVGFibGVQ
dXQoRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsK
ICAgICBib29sIHN5bWJvbFRhYmxlUHV0V2l0aEF0dHJpYnV0ZXMoVk0mLCBQcm9wZXJ0eU5hbWUs
IEpTVmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpOwotCi0gICAgc3RhdGljIHNpemVfdCBhbGxv
Y2F0aW9uU2l6ZShTeW1ib2xUYWJsZSopOwotICAgIHN0YXRpYyBzaXplX3Qgc3RvcmFnZU9mZnNl
dCgpOwotCi0gICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiBzdG9yYWdlKCk7IC8vIGNhcHR1cmVD
b3VudCgpIG51bWJlciBvZiByZWdpc3RlcnMuCiB9OwogCi1pbmxpbmUgSlNMZXhpY2FsRW52aXJv
bm1lbnQ6OkpTTGV4aWNhbEVudmlyb25tZW50KFZNJiB2bSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUs
IFJlZ2lzdGVyKiByZWdpc3RlcnMsIEpTU2NvcGUqIGN1cnJlbnRTY29wZSwgQ29kZUJsb2NrKiBj
b2RlQmxvY2spCi0gICAgOiBCYXNlKAotICAgICAgICB2bSwKLSAgICAgICAgY2FsbEZyYW1lLT5s
ZXhpY2FsR2xvYmFsT2JqZWN0KCktPmFjdGl2YXRpb25TdHJ1Y3R1cmUoKSwKLSAgICAgICAgcmVn
aXN0ZXJzLAotICAgICAgICBjdXJyZW50U2NvcGUsCi0gICAgICAgIGNvZGVCbG9jay0+c3ltYm9s
VGFibGUoKSkKK2lubGluZSBKU0xleGljYWxFbnZpcm9ubWVudDo6SlNMZXhpY2FsRW52aXJvbm1l
bnQoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNTY29wZSogY3VycmVudFNjb3BlLCBT
eW1ib2xUYWJsZSogc3ltYm9sVGFibGUpCisgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUsIGN1cnJl
bnRTY29wZSwgc3ltYm9sVGFibGUpCiB7Ci0gICAgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlID0g
Y29kZUJsb2NrLT5zeW1ib2xUYWJsZSgpOwotICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogc3Rv
cmFnZSA9IHRoaXMtPnN0b3JhZ2UoKTsKLSAgICBzaXplX3QgY2FwdHVyZUNvdW50ID0gc3ltYm9s
VGFibGUtPmNhcHR1cmVDb3VudCgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2FwdHVy
ZUNvdW50OyArK2kpCi0gICAgICAgIG5ldyAoTm90TnVsbCwgJnN0b3JhZ2VbaV0pIFdyaXRlQmFy
cmllcjxVbmtub3duPihVbmRlZmluZWRXcml0ZUJhcnJpZXJUYWcpOwotICAgIG1fcmVnaXN0ZXJz
ID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8V3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPio+KAotICAg
ICAgICByZWludGVycHJldF9jYXN0PGNoYXIqPih0aGlzKSArIHJlZ2lzdGVyc09mZnNldChzeW1i
b2xUYWJsZSkpOwogfQogCi1KU0xleGljYWxFbnZpcm9ubWVudCogYXNBY3RpdmF0aW9uKEpTVmFs
dWUpOwotCiBpbmxpbmUgSlNMZXhpY2FsRW52aXJvbm1lbnQqIGFzQWN0aXZhdGlvbihKU1ZhbHVl
IHZhbHVlKQogewogICAgIEFTU0VSVChhc09iamVjdCh2YWx1ZSktPmluaGVyaXRzKEpTTGV4aWNh
bEVudmlyb25tZW50OjppbmZvKCkpKTsKQEAgLTEzMyw0OSArMTAyLDYgQEAgQUxXQVlTX0lOTElO
RSBKU0xleGljYWxFbnZpcm9ubWVudCogUmVnaQogICAgIHJldHVybiBhc0FjdGl2YXRpb24oanNW
YWx1ZSgpKTsKIH0KIAotaW5saW5lIGludCBKU0xleGljYWxFbnZpcm9ubWVudDo6cmVnaXN0ZXJz
T2Zmc2V0KFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSkKLXsKLSAgICByZXR1cm4gc3RvcmFnZU9m
ZnNldCgpICsgKChzeW1ib2xUYWJsZS0+Y2FwdHVyZUNvdW50KCkgLSBzeW1ib2xUYWJsZS0+Y2Fw
dHVyZVN0YXJ0KCkgIC0gMSkgKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSk7Ci19Ci0K
LWlubGluZSBzaXplX3QgSlNMZXhpY2FsRW52aXJvbm1lbnQ6OnN0b3JhZ2VPZmZzZXQoKQotewot
ICAgIHJldHVybiBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Y8c2l6ZW9mKFdyaXRlQmFycmllcjxV
bmtub3duPik+KHNpemVvZihKU0xleGljYWxFbnZpcm9ubWVudCkpOwotfQotCi1pbmxpbmUgV3Jp
dGVCYXJyaWVyPFVua25vd24+KiBKU0xleGljYWxFbnZpcm9ubWVudDo6c3RvcmFnZSgpCi17Ci0g
ICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3RfcHRyPFdyaXRlQmFycmllcjxVbmtub3duPio+KAot
ICAgICAgICByZWludGVycHJldF9jYXN0PGNoYXIqPih0aGlzKSArIHN0b3JhZ2VPZmZzZXQoKSk7
Ci19Ci0KLWlubGluZSBzaXplX3QgSlNMZXhpY2FsRW52aXJvbm1lbnQ6OmFsbG9jYXRpb25TaXpl
KFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSkKLXsKLSAgICBzaXplX3Qgb2JqZWN0U2l6ZUluQnl0
ZXMgPSBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Y8c2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3du
Pik+KHNpemVvZihKU0xleGljYWxFbnZpcm9ubWVudCkpOwotICAgIHNpemVfdCBzdG9yYWdlU2l6
ZUluQnl0ZXMgPSBzeW1ib2xUYWJsZS0+Y2FwdHVyZUNvdW50KCkgKiBzaXplb2YoV3JpdGVCYXJy
aWVyPFVua25vd24+KTsKLSAgICByZXR1cm4gb2JqZWN0U2l6ZUluQnl0ZXMgKyBzdG9yYWdlU2l6
ZUluQnl0ZXM7Ci19Ci0KLWlubGluZSBib29sIEpTTGV4aWNhbEVudmlyb25tZW50Ojppc1ZhbGlk
SW5kZXgoaW50IGluZGV4KSBjb25zdAotewotICAgIGlmIChpbmRleCA+IHN5bWJvbFRhYmxlKCkt
PmNhcHR1cmVTdGFydCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGluZGV4IDw9
IHN5bWJvbFRhYmxlKCktPmNhcHR1cmVFbmQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IHJldHVybiB0cnVlOwotfQotCi1pbmxpbmUgYm9vbCBKU0xleGljYWxFbnZpcm9ubWVudDo6aXNW
YWxpZChjb25zdCBTeW1ib2xUYWJsZUVudHJ5JiBlbnRyeSkgY29uc3QKLXsKLSAgICByZXR1cm4g
aXNWYWxpZEluZGV4KGVudHJ5LmdldEluZGV4KCkpOwotfQotCi1pbmxpbmUgV3JpdGVCYXJyaWVy
QmFzZTxVbmtub3duPiYgSlNMZXhpY2FsRW52aXJvbm1lbnQ6OnJlZ2lzdGVyQXQoaW50IGluZGV4
KSBjb25zdAotewotICAgIEFTU0VSVChpc1ZhbGlkSW5kZXgoaW5kZXgpKTsKLSAgICByZXR1cm4g
QmFzZTo6cmVnaXN0ZXJBdChpbmRleCk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5k
aWYgLy8gSlNMZXhpY2FsRW52aXJvbm1lbnRfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNOYW1lU2NvcGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTTmFtZVNjb3BlLmNwcAkocmV2aXNpb24gMTgwNzIwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNOYW1lU2NvcGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00NywxNCArNDcsNiBAQCBKU05hbWVTY29wZSogSlNOYW1lU2NvcGU6OmNyZWF0ZShWTSYgdm0s
CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLXZvaWQgSlNOYW1lU2NvcGU6OnZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKLXsKLSAgICBKU05hbWVTY29w
ZSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU05hbWVTY29wZSo+KGNlbGwpOwotICAgIEFTU0VSVF9H
Q19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKLSAgICBCYXNlOjp2aXNpdENo
aWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwotICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2Jq
ZWN0LT5tX3JlZ2lzdGVyU3RvcmUpOwotfQotCiBKU1ZhbHVlIEpTTmFtZVNjb3BlOjp0b1RoaXMo
SlNDZWxsKiwgRXhlY1N0YXRlKiBleGVjLCBFQ01BTW9kZSBlY21hTW9kZSkKIHsKICAgICBpZiAo
ZWNtYU1vZGUgPT0gU3RyaWN0TW9kZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTTmFtZVNjb3BlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNOYW1lU2NvcGUuaAkocmV2aXNpb24gMTgwNzIwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNOYW1lU2NvcGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsMzggKzQ0
LDM3IEBAIHB1YmxpYzoKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogICAgIHN0YXRpYyBUKiBj
cmVhdGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1Njb3BlKiBjdXJy
ZW50U2NvcGUsIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSwgSlNWYWx1ZSB2YWx1ZSkKICAgICB7
Ci0gICAgICAgIFQqIHNjb3BlT2JqZWN0ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8VD4o
dm0uaGVhcCkpIFQodm0sIGdsb2JhbE9iamVjdCwgY3VycmVudFNjb3BlLCBzeW1ib2xUYWJsZSk7
CisgICAgICAgIFQqIHNjb3BlT2JqZWN0ID0gbmV3ICgKKyAgICAgICAgICAgIE5vdE51bGwsIGFs
bG9jYXRlQ2VsbDxUPih2bS5oZWFwLCBhbGxvY2F0aW9uU2l6ZUZvclNjb3BlU2l6ZSgxKSkKKyAg
ICAgICAgICAgIFQodm0sIGdsb2JhbE9iamVjdCwgY3VycmVudFNjb3BlLCBzeW1ib2xUYWJsZSk7
CiAgICAgICAgIHNjb3BlT2JqZWN0LT5maW5pc2hDcmVhdGlvbih2bSwgdmFsdWUpOwogICAgICAg
ICByZXR1cm4gc2NvcGVPYmplY3Q7CiAgICAgfQogICAgIAogICAgIHN0YXRpYyBKU05hbWVTY29w
ZSogY3JlYXRlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1Njb3BlKiBjdXJyZW50U2NvcGUsIFN5
bWJvbFRhYmxlKiwgSlNWYWx1ZSwgVHlwZSk7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxk
cmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAgICAgc3RhdGljIEpTVmFsdWUgdG9UaGlzKEpT
Q2VsbCosIEV4ZWNTdGF0ZSosIEVDTUFNb2RlKTsKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9w
ZXJ0eVNsb3QoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xv
dCYpOwogICAgIHN0YXRpYyB2b2lkIHB1dChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5h
bWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOwogCiAgICAgREVDTEFSRV9JTkZPOwogCi0g
ICAgSlNWYWx1ZSB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVnaXN0ZXJTdG9yZS5nZXQoKTsg
fQorICAgIEpTVmFsdWUgdmFsdWUoKSBjb25zdCB7IHJldHVybiB2YXJpYWJsZUF0KDApLmdldCgp
OyB9CiAKIHByb3RlY3RlZDoKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiB2bSwgSlNWYWx1
ZSB2YWx1ZSkKICAgICB7Ci0gICAgICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKLSAgICAg
ICAgbV9yZWdpc3RlclN0b3JlLnNldCh2bSwgdGhpcywgdmFsdWUpOworICAgICAgICBCYXNlOjpm
aW5pc2hDcmVhdGlvblVuaW5pdGlhbGl6ZWQodm0pOworICAgICAgICB2YXJpYWJsZUF0KDApLnNl
dCh2bSwgdGhpcywgdmFsdWUpOwogICAgIH0KIAogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBT
dHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEJhc2U6OlN0cnVj
dHVyZUZsYWdzOwogCiAgICAgSlNOYW1lU2NvcGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgSlNTY29wZSogbmV4dCwgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlKQotICAgICAgICA6IEJh
c2Uodm0sIHN0cnVjdHVyZSwgcmVpbnRlcnByZXRfY2FzdDxSZWdpc3Rlcio+KCZtX3JlZ2lzdGVy
U3RvcmUgKyAxKSwgbmV4dCwgc3ltYm9sVGFibGUpCisgICAgICAgIDogQmFzZSh2bSwgc3RydWN0
dXJlLCBuZXh0LCBzeW1ib2xUYWJsZSkKICAgICB7CisgICAgICAgIEFTU0VSVChzeW1ib2xUYWJs
ZS0+c2NvcGVTaXplKCkgPT0gMSk7CiAgICAgfQotCi1wcml2YXRlOgotICAgIFdyaXRlQmFycmll
cjxVbmtub3duPiBtX3JlZ2lzdGVyU3RvcmU7CiB9OwogCiB9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2Jq
ZWN0LmNwcAkocmV2aXNpb24gMTgwNzIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMywgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTMzLDMyICszMywzMCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotaW50IEpTU2VnbWVudGVk
VmFyaWFibGVPYmplY3Q6OmZpbmRSZWdpc3RlckluZGV4KHZvaWQqIHJlZ2lzdGVyQWRkcmVzcykK
K1Njb3BlT2Zmc2V0IEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3Q6OmZpbmRSZWdpc3RlckluZGV4
KHZvaWQqIHJlZ2lzdGVyQWRkcmVzcykKIHsKICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tl
cihtX2xvY2spOwogICAgIAotICAgIGZvciAoaW50IGkgPSBtX3JlZ2lzdGVycy5zaXplKCk7IGkt
LTspIHsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX3JlZ2lzdGVycy5zaXplKCk7IGktLTspIHsK
ICAgICAgICAgaWYgKCZtX3JlZ2lzdGVyc1tpXSAhPSByZWdpc3RlckFkZHJlc3MpCiAgICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgcmV0dXJuIGk7CisgICAgICAgIHJldHVybiBTY29wZU9m
ZnNldChpKTsKICAgICB9CiAgICAgQ1JBU0goKTsKLSAgICByZXR1cm4gLTE7CisgICAgcmV0dXJu
IFNjb3BlT2Zmc2V0KCk7CiB9CiAKLWludCBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0OjphZGRS
ZWdpc3RlcnMoaW50IG51bWJlck9mUmVnaXN0ZXJzVG9BZGQpCitTY29wZU9mZnNldCBKU1NlZ21l
bnRlZFZhcmlhYmxlT2JqZWN0OjphZGRSZWdpc3RlcnModW5zaWduZWQgbnVtYmVyT2ZSZWdpc3Rl
cnNUb0FkZCkKIHsKICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2spOwogICAg
IAotICAgIEFTU0VSVChudW1iZXJPZlJlZ2lzdGVyc1RvQWRkID49IDApOwotICAgIAogICAgIHNp
emVfdCBvbGRTaXplID0gbV9yZWdpc3RlcnMuc2l6ZSgpOwogICAgIG1fcmVnaXN0ZXJzLmdyb3co
b2xkU2l6ZSArIG51bWJlck9mUmVnaXN0ZXJzVG9BZGQpOwogICAgIAogICAgIGZvciAoc2l6ZV90
IGkgPSBudW1iZXJPZlJlZ2lzdGVyc1RvQWRkOyBpLS07KQogICAgICAgICBtX3JlZ2lzdGVyc1tv
bGRTaXplICsgaV0uc2V0V2l0aG91dFdyaXRlQmFycmllcihqc1VuZGVmaW5lZCgpKTsKICAgICAK
LSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PihvbGRTaXplKTsKKyAgICByZXR1cm4gU2NvcGVP
ZmZzZXQob2xkU2l6ZSk7CiB9CiAKIHZvaWQgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdDo6dmlz
aXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3Qu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRl
ZFZhcmlhYmxlT2JqZWN0LmgJKHJldmlzaW9uIDE4MDcyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuaAkod29ya2luZyBjb3B5KQpA
QCAtNTcsMjQgKzU3LDIzIEBAIGNsYXNzIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3QgOiBwdWJs
aWMKIHB1YmxpYzoKICAgICB0eXBlZGVmIEpTU3ltYm9sVGFibGVPYmplY3QgQmFzZTsKIAotICAg
IFdyaXRlQmFycmllcjxVbmtub3duPiYgcmVnaXN0ZXJBdChpbnQgaW5kZXgpIHsgcmV0dXJuIG1f
cmVnaXN0ZXJzW2luZGV4XTsgfQorICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgdmFyaWFibGVB
dChTY29wZU9mZnNldCBvZmZzZXQpIHsgcmV0dXJuIG1fdmFyaWFibGVzW29mZnNldC5vZmZzZXQo
KV07IH0KICAgICAKICAgICAvLyBUaGlzIGlzIGEgc2xvdyBtZXRob2QgY2FsbCwgd2hpY2ggc2Vh
cmNoZXMgdGhlIHJlZ2lzdGVyIGJhbmsgdG8gZmluZCB0aGUgaW5kZXgKICAgICAvLyBnaXZlbiBh
IHBvaW50ZXIuIEl0IHdpbGwgQ1JBU0goKSBpZiBpdCBkb2VzIG5vdCBmaW5kIHRoZSByZWdpc3Rl
ci4gT25seSB1c2UgdGhpcwogICAgIC8vIGluIGRlYnVnIGNvZGUgKGxpa2UgYnl0ZWNvZGUgZHVt
cGluZykuCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgaW50IGZpbmRSZWdpc3RlckluZGV4KHZvaWQq
KTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBTY29wZU9mZnNldCBmaW5kUmVnaXN0ZXJJbmRleCh2
b2lkKik7CiAgICAgCi0gICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiBhc3NlcnRSZWdpc3Rlcklz
SW5UaGlzT2JqZWN0KFdyaXRlQmFycmllcjxVbmtub3duPiogcmVnaXN0ZXJQb2ludGVyKQorICAg
IFdyaXRlQmFycmllcjxVbmtub3duPiogYXNzZXJ0VmFyaWFibGVJc0luVGhpc09iamVjdChXcml0
ZUJhcnJpZXI8VW5rbm93bj4qIHZhcmlhYmxlUG9pbnRlcikKICAgICB7Ci0jaWYgIUFTU0VSVF9E
SVNBQkxFRAotICAgICAgICBmaW5kUmVnaXN0ZXJJbmRleChyZWdpc3RlclBvaW50ZXIpOwotI2Vu
ZGlmCisgICAgICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKQorICAgICAgICAgICAgZmluZFJlZ2lz
dGVySW5kZXgocmVnaXN0ZXJQb2ludGVyKTsKICAgICAgICAgcmV0dXJuIHJlZ2lzdGVyUG9pbnRl
cjsKICAgICB9CiAgICAgCiAgICAgLy8gQWRkcyBudW1iZXJPZlJlZ2lzdGVyc1RvQWRkIHJlZ2lz
dGVycywgaW5pdGlhbGl6ZXMgdGhlbSB0byBVbmRlZmluZWQsIGFuZCByZXR1cm5zCiAgICAgLy8g
dGhlIGluZGV4IG9mIHRoZSBmaXJzdCBvbmUgYWRkZWQuCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUg
aW50IGFkZFJlZ2lzdGVycyhpbnQgbnVtYmVyT2ZSZWdpc3RlcnNUb0FkZCk7CisgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgU2NvcGVPZmZzZXQgYWRkUmVnaXN0ZXJzKHVuc2lnbmVkIG51bWJlck9mUmVn
aXN0ZXJzVG9BZGQpOwogICAgIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuaAkocmV2aXNp
b24gMTgwNzIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJs
ZU9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC03OCw3ICs3OCw3IEBAIGlubGluZSBib29sIHN5
bWJvbFRhYmxlR2V0KAogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgU3ltYm9sVGFibGVFbnRy
eTo6RmFzdCBlbnRyeSA9IGl0ZXItPnZhbHVlOwogICAgIEFTU0VSVCghZW50cnkuaXNOdWxsKCkp
OwotICAgIHNsb3Quc2V0VmFsdWUob2JqZWN0LCBlbnRyeS5nZXRBdHRyaWJ1dGVzKCkgfCBEb250
RGVsZXRlLCBvYmplY3QtPnJlZ2lzdGVyQXQoZW50cnkuZ2V0SW5kZXgoKSkuZ2V0KCkpOworICAg
IHNsb3Quc2V0VmFsdWUob2JqZWN0LCBlbnRyeS5nZXRBdHRyaWJ1dGVzKCkgfCBEb250RGVsZXRl
LCBvYmplY3QtPnZhcmlhYmxlQXQoZW50cnkuc2NvcGVPZmZzZXQoKSkuZ2V0KCkpOwogICAgIHJl
dHVybiB0cnVlOwogfQogCkBAIC05NCw3ICs5NCw3IEBAIGlubGluZSBib29sIHN5bWJvbFRhYmxl
R2V0KAogICAgIFN5bWJvbFRhYmxlRW50cnk6OkZhc3QgZW50cnkgPSBpdGVyLT52YWx1ZTsKICAg
ICBBU1NFUlQoIWVudHJ5LmlzTnVsbCgpKTsKICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3Io
Ci0gICAgICAgIG9iamVjdC0+cmVnaXN0ZXJBdChlbnRyeS5nZXRJbmRleCgpKS5nZXQoKSwgZW50
cnkuZ2V0QXR0cmlidXRlcygpIHwgRG9udERlbGV0ZSk7CisgICAgICAgIG9iamVjdC0+dmFyaWFi
bGVBdChlbnRyeS5zY29wZU9mZnNldCgpKS5nZXQoKSwgZW50cnkuZ2V0QXR0cmlidXRlcygpIHwg
RG9udERlbGV0ZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTExMCw3ICsxMTAsNyBAQCBp
bmxpbmUgYm9vbCBzeW1ib2xUYWJsZUdldCgKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIFN5
bWJvbFRhYmxlRW50cnk6OkZhc3QgZW50cnkgPSBpdGVyLT52YWx1ZTsKICAgICBBU1NFUlQoIWVu
dHJ5LmlzTnVsbCgpKTsKLSAgICBzbG90LnNldFZhbHVlKG9iamVjdCwgZW50cnkuZ2V0QXR0cmli
dXRlcygpIHwgRG9udERlbGV0ZSwgb2JqZWN0LT5yZWdpc3RlckF0KGVudHJ5LmdldEluZGV4KCkp
LmdldCgpKTsKKyAgICBzbG90LnNldFZhbHVlKG9iamVjdCwgZW50cnkuZ2V0QXR0cmlidXRlcygp
IHwgRG9udERlbGV0ZSwgb2JqZWN0LT52YXJpYWJsZUF0KGVudHJ5LnNjb3BlT2Zmc2V0KCkpLmdl
dCgpKTsKICAgICBzbG90SXNXcml0ZWFibGUgPSAhZW50cnkuaXNSZWFkT25seSgpOwogICAgIHJl
dHVybiB0cnVlOwogfQpAQCAtMTQ1LDcgKzE0NSw3IEBAIGlubGluZSBib29sIHN5bWJvbFRhYmxl
UHV0KAogICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTEzNDYwMQogICAgICAgICAgICAgc2V0LT5ub3RpZnlXcml0ZSh2bSwgdmFsdWUsIG9iamVj
dCwgcHJvcGVydHlOYW1lKTsKICAgICAgICAgfQotICAgICAgICByZWcgPSAmb2JqZWN0LT5yZWdp
c3RlckF0KGZhc3RFbnRyeS5nZXRJbmRleCgpKTsKKyAgICAgICAgcmVnID0gJm9iamVjdC0+dmFy
aWFibGVBdChmYXN0RW50cnkuc2NvcGVPZmZzZXQoKSk7CiAgICAgfQogICAgIC8vIEknZCBwcmVm
ZXIgd2Ugbm90IGhvbGQgbG9jayB3aGlsZSBleGVjdXRpbmcgYmFycmllcnMsIHNpbmNlIEkgcHJl
ZmVyIHRvIHJlc2VydmUKICAgICAvLyB0aGUgcmlnaHQgZm9yIGJhcnJpZXJzIHRvIGJlIGFibGUg
dG8gdHJpZ2dlciBHQy4gQW5kIEkgZG9uJ3Qgd2FudCB0byBob2xkIFZNCkBAIC0xNzMsNyArMTcz
LDcgQEAgaW5saW5lIGJvb2wgc3ltYm9sVGFibGVQdXRXaXRoQXR0cmlidXRlcwogICAgICAgICBp
ZiAoVmFyaWFibGVXYXRjaHBvaW50U2V0KiBzZXQgPSBlbnRyeS53YXRjaHBvaW50U2V0KCkpCiAg
ICAgICAgICAgICBzZXQtPm5vdGlmeVdyaXRlKHZtLCB2YWx1ZSwgb2JqZWN0LCBwcm9wZXJ0eU5h
bWUpOwogICAgICAgICBlbnRyeS5zZXRBdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpOwotICAgICAgICBy
ZWcgPSAmb2JqZWN0LT5yZWdpc3RlckF0KGVudHJ5LmdldEluZGV4KCkpOworICAgICAgICByZWcg
PSAmb2JqZWN0LT52YXJpYWJsZUF0KGVudHJ5LnNjb3BlT2Zmc2V0KCkpOwogICAgIH0KICAgICBy
ZWctPnNldCh2bSwgb2JqZWN0LCB2YWx1ZSk7CiAgICAgcmV0dXJuIHRydWU7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGUuaAkocmV2aXNpb24gMTgwNzIwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU4
LDcgKzU4LDggQEAgZW51bSBKU1R5cGUgOiB1aW50OF90IHsKICAgICBQdXJlRm9yd2FyZGluZ1By
b3h5VHlwZSwKICAgICBJbXB1cmVQcm94eVR5cGUsCiAgICAgV2l0aFNjb3BlVHlwZSwKLSAgICBB
cmd1bWVudHNUeXBlLAorICAgIERpcmVjdEFyZ3VtZW50c1R5cGUsCisgICAgU2NvcGVkQXJndW1l
bnRzVHlwZSwKIAogICAgIEludDhBcnJheVR5cGUsCiAgICAgSW50MTZBcnJheVR5cGUsCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PdXRPZkJhbmRBcmd1bWVudHMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL091dE9mQmFuZEFyZ3Vt
ZW50cy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9P
dXRPZkJhbmRBcmd1bWVudHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjEzIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJPdXRPZkJhbmRBcmd1bWVudHMuaCIKKworI2luY2x1ZGUgIkpT
QXJndW1lbnRzSXRlcmF0b3IuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisKK25hbWVzcGFj
ZSBKU0MgeworCitTVEFUSUNfQVNTRVJUX0lTX1RSSVZJQUxMWV9ERVNUUlVDVElCTEUoT3V0T2ZC
YW5kQXJndW1lbnRzKTsKKworY29uc3QgQ2xhc3NJbmZvIE91dE9mQmFuZEFyZ3VtZW50czo6c19p
bmZvID0geyAiQXJndW1lbnRzIiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJM
RShPdXRPZkJhbmRBcmd1bWVudHMpIH07CisKK091dE9mQmFuZEFyZ3VtZW50czo6T3V0T2ZCYW5k
QXJndW1lbnRzKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgOiBCYXNlKHZtLCBz
dHJ1Y3R1cmUsIG51bGxwdHIpCisgICAgLCBtX3NwZWNpYWxzTWF0ZXJpYWxpemVkKGZhbHNlKQor
eworfQorCitPdXRPZkJhbmRBcmd1bWVudHMqIE91dE9mQmFuZEFyZ3VtZW50czo6Y3JlYXRlRW1w
dHkoCisgICAgVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0Z1bmN0aW9u
KiBjYWxsZWUpCit7CisgICAgT3V0T2ZCYW5kQXJndW1lbnRzKiByZXN1bHQgPSBuZXcgKE5vdE51
bGwsIGFsbG9jYXRlQ2VsbDxPdXRPZkJhbmRBcmd1bWVudHM+KHZtLmhlYXApKQorICAgICAgICBP
dXRPZkJhbmRBcmd1bWVudHModm0sIGdsb2JhbE9iamVjdC0+b3V0T2ZCYW5kQXJndW1lbnRzU3Ry
dWN0dXJlKCkpOworICAgIHJlc3VsdC0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgIHJlc3VsdC0+
bV9jYWxsZWUuc2V0KHZtLCB0aGlzLCBjYWxsZWUpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisK
K091dE9mQmFuZEFyZ3VtZW50cyogT3V0T2ZCYW5kQXJndW1lbnRzOjpjcmVhdGVFbXB0eShFeGVj
U3RhdGUqIGV4ZWMsIEpTRnVuY3Rpb24qIGNhbGxlZSkKK3sKKyAgICAvLyBOQi4gU29tZSBjbGll
bnRzIG1pZ2h0IGV4cGVjdCB0aGF0IHRoZSBnbG9iYWwgb2JqZWN0IG9mIG9mIHRoaXMgb2JqZWN0
IGlzIHRoZSBnbG9iYWwgb2JqZWN0CisgICAgLy8gb2YgdGhlIGNhbGxlZS4gV2UgZG9uJ3QgZG8g
dGhpcyBmb3Igbm93LCBidXQgbWF5YmUgd2Ugc2hvdWxkLgorICAgIHJldHVybiBjcmVhdGVFbXB0
eShleGVjLT52bSgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGNhbGxlZSk7Cit9CisK
K091dE9mQmFuZEFyZ3VtZW50cyogT3V0T2ZCYW5kQXJndW1lbnRzOjpjcmVhdGVXaXRoSW5saW5l
RnJhbWUoRXhlY1N0YXRlKiBteUZyYW1lLCBFeGVjU3RhdGUqIHRhcmdldEZyYW1lLCBJbmxpbmVD
YWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSwgQXJndW1lbnRzTW9kZSBtb2RlKQoreworICAgIFZN
JiB2bSA9IG15RnJhbWUtPnZtKCk7CisgICAgCisgICAgSlNGdW5jdGlvbiogY2FsbGVlOworICAg
IAorICAgIGlmIChpbmxpbmVDYWxsRnJhbWUpCisgICAgICAgIGNhbGxlZSA9IGpzQ2FzdDxKU0Z1
bmN0aW9uKj4oaW5saW5lQ2FsbEZyYW1lLT5jYWxsZWVSZWNvdmVyeS5yZWNvdmVyKHRhcmdldEZy
YW1lKSk7CisgICAgZWxzZQorICAgICAgICBjYWxsZWUgPSBqc0Nhc3Q8SlNGdW5jdGlvbio+KHRh
cmdldEZyYW1lLT5jYWxsZWUoKSk7CisKKyAgICAvLyBOQi4gSXQncyBzb21ld2hhdCBhcmJpdHJh
cnkgdGhhdCB3ZSB0aWUgdGhlIHN0cmljdG5lc3Mgb2YgdGhpcyBvYmplY3QgdG8gdGhlIHN0cmlj
dG5lc3Mgb2YKKyAgICAvLyB0aGUgY2FsbGVlLgorICAgIGJvb2wgaXNTdHJpY3RNb2RlID0gZXhl
Y3V0YWJsZS0+aXNTdHJpY3RNb2RlKCk7CisKKyAgICBPdXRPZkJhbmRBcmd1bWVudHMqIHJlc3Vs
dCA9IGNyZWF0ZUVtcHR5KG15RnJhbWUsIGNhbGxlZSk7CisgICAgCisgICAgdW5zaWduZWQgbGVu
Z3RoOworICAgIHN3aXRjaCAobW9kZSkgeworICAgIGNhc2UgQ2xvbmVkQXJndW1lbnRzQ3JlYXRp
b25Nb2RlOiB7CisgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUpIHsKKyAgICAgICAgICAgIGlm
IChpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRSZWdpc3Rlci5pc1ZhbGlkKCkpCisgICAg
ICAgICAgICAgICAgbGVuZ3RoID0gZXhlYy0+cihpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291
bnRSZWdpc3RlcikudW5ib3hlZEludDMyKCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgbGVuZ3RoID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpOworICAgICAg
ICAgICAgbGVuZ3RoLS07CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IGxlbmd0aDsgaS0tOykKKyAgICAgICAgICAgICAgICByZXN1bHQtPnB1dERpcmVjdEluZGV4
KG15RnJhbWUsIGksIGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzW2ldLnJlY292ZXIodGFyZ2V0
RnJhbWUpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGxlbmd0aCA9IHRhcmdldEZy
YW1lLT5hcmd1bWVudENvdW50KCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IGxlbmd0aDsgaS0tOykKKyAgICAgICAgICAgICAgICByZXN1bHQtPnB1dERpcmVj
dEluZGV4KG15RnJhbWUsIGksIHRhcmdldEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudChpKSk7Cisg
ICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAKKyAgICBjYXNlIEZha2VB
cmd1bWVudFZhbHVlc0NyZWF0aW9uTW9kZTogeworICAgICAgICBsZW5ndGggPSAwOworICAgICAg
ICBicmVhazsKKyAgICB9IH0KKyAgICAKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgdm0ucHJv
cGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcihsZW5ndGgpKTsKKyAgICBpZiAoaXNTdHJpY3RN
b2RlKSB7CisgICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0QWNjZXNzb3IoZXhlYywgdm0ucHJvcGVy
dHlOYW1lcy0+Y2FsbGVlLCB0aGlzT2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+dGhyb3dUeXBlRXJy
b3JHZXR0ZXJTZXR0ZXIoZXhlYy0+dm0oKSksIERvbnREZWxldGUgfCBEb250RW51bSB8IEFjY2Vz
c29yKTsKKyAgICAgICAgcmVzdWx0LT5wdXREaXJlY3RBY2Nlc3NvcihleGVjLCB2bS5wcm9wZXJ0
eU5hbWVzLT5jYWxsZWUsIHRoaXNPYmplY3QtPmdsb2JhbE9iamVjdCgpLT50aHJvd1R5cGVFcnJv
ckdldHRlclNldHRlcihleGVjLT52bSgpKSwgRG9udERlbGV0ZSB8IERvbnRFbnVtIHwgQWNjZXNz
b3IpOworICAgIH0gZWxzZQorICAgICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVy
dHlOYW1lcy0+Y2FsbGVlLCBKU1ZhbHVlKGNhbGxlZSkpOworICAgIAorICAgIHJlc3VsdC0+SlND
X05BVElWRV9GVU5DVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5pdGVyYXRvclByaXZhdGVOYW1lLCBh
cmd1bWVudHNGdW5jSXRlcmF0b3IsIERvbnRFbnVtLCAwKTsKK30KKworT3V0T2ZCYW5kQXJndW1l
bnRzKiBPdXRPZkJhbmRBcmd1bWVudHM6OmNyZWF0ZVdpdGhNYWNoaW5lRnJhbWUoRXhlY1N0YXRl
KiBteUZyYW1lLCBFeGVjU3RhdGUqIHRhcmdldEZyYW1lLCBBcmd1bWVudHNNb2RlIG1vZGUpCit7
CisgICAgcmV0dXJuIGNyZWF0ZVdpdGhJbmxpbmVGcmFtZShteUZyYW1lLCB0YXJnZXRGcmFtZSwg
bnVsbHB0ciwgbW9kZSk7Cit9CisKK1N0cnVjdHVyZSogT3V0T2ZCYW5kQXJndW1lbnRzOjpjcmVh
dGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVl
IHByb3RvdHlwZSkKK3sKKyAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9i
amVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGlu
Zm8oKSk7Cit9CisKK2Jvb2wgT3V0T2ZCYW5kQXJndW1lbnRzOjpnZXRPd25Qcm9wZXJ0eVNsb3Qo
SlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgaWRlbnQsIFBy
b3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICBPdXRPZkJhbmRBcmd1bWVudHMqIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8T3V0T2ZCYW5kQXJndW1lbnRzKj4ob2JqZWN0KTsKKyAgICBWTSYgdm0gPSBleGVj
LT52bSgpOworICAgIAorICAgIGlmIChpZGVudCA9PSB2bS5wcm9wZXJ0eU5hbWVzLT5jYWxsZXIK
KyAgICAgICAgfHwgaWRlbnQgPT0gdm0ucHJvcGVydHlOYW1lcy0+Y2FsbGVlKQorICAgICAgICB0
aGlzT2JqZWN0LT5tYXRlcmlhbGl6ZVNwZWNpYWxzSWZOZWNlc3NhcnkoZXhlYyk7CisgICAgCisg
ICAgaWYgKEJhc2U6OmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBleGVjLCBpZGVudCwg
c2xvdCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIAorICAgIGlmIChpZGVudCA9PSB2bS5w
cm9wZXJ0eU5hbWVzLT5pdGVyYXRvclByaXZhdGVOYW1lKSB7CisgICAgICAgIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7CisgICAgICAg
IHRoaXNPYmplY3QtPkpTQ19OQVRJVkVfRlVOQ1RJT04odm0ucHJvcGVydHlOYW1lcy0+aXRlcmF0
b3JQcml2YXRlTmFtZSwgYXJndW1lbnRzRnVuY0l0ZXJhdG9yLCBEb250RW51bSwgMCk7CisgICAg
ICAgIGlmIChKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIGV4ZWMsIGlk
ZW50LCBzbG90KSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgT3V0T2ZCYW5kQXJndW1lbnRzOjpnZXRPd25Qcm9wZXJ0
eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJy
YXkmIGFycmF5LCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3sKKyAgICBPdXRPZkJhbmRBcmd1bWVu
dHMqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8T3V0T2ZCYW5kQXJndW1lbnRzKj4ob2JqZWN0KTsKKyAg
ICB0aGlzT2JqZWN0LT5tYXRlcmlhbGl6ZVNwZWNpYWxzSWZOZWNlc3NhcnkoZXhlYyk7CisgICAg
QmFzZTo6Z2V0T3duUHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBleGVjLCBhcnJheSwgbW9kZSk7
Cit9CisKK3ZvaWQgT3V0T2ZCYW5kQXJndW1lbnRzOjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVjU3Rh
dGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBpZGVudCwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlT
bG90JiBzbG90KQoreworICAgIE91dE9mQmFuZEFyZ3VtZW50cyogdGhpc09iamVjdCA9IGpzQ2Fz
dDxPdXRPZkJhbmRBcmd1bWVudHMqPihvYmplY3QpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
CisgICAgCisgICAgaWYgKGlkZW50ID09IHZtLnByb3BlcnR5TmFtZXMtPmNhbGxlZQorICAgICAg
ICB8fCBpZGVudCA9PSB2bS5wcm9wZXJ0eU5hbWVzLT5jYWxsZXIpCisgICAgICAgIHRoaXNPYmpl
Y3QtPm1hdGVyaWFsaXplU3BlY2lhbHNJZk5lY2Vzc2FyeShleGVjKTsKKyAgICAKKyAgICBCYXNl
OjpwdXQodGhpc09iamVjdCwgZXhlYywgaWRlbnQsIHZhbHVlLCBzbG90KTsKK30KKwordm9pZCBP
dXRPZkJhbmRBcmd1bWVudHM6OmRlbGV0ZVByb3BlcnR5KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRl
KiBleGVjLCBQcm9wZXJ0eU5hbWUgaWRlbnQpCit7CisgICAgT3V0T2ZCYW5kQXJndW1lbnRzKiB0
aGlzT2JqZWN0ID0ganNDYXN0PE91dE9mQmFuZEFyZ3VtZW50cyo+KG9iamVjdCk7CisgICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKKyAgICAKKyAgICBpZiAoaWRlbnQgPT0gdm0ucHJvcGVydHlOYW1l
cy0+Y2FsbGVlCisgICAgICAgIHx8IGlkZW50ID09IHZtLnByb3BlcnR5TmFtZXMtPmNhbGxlcikK
KyAgICAgICAgdGhpc09iamVjdC0+bWF0ZXJpYWxpemVTcGVjaWFsc0lmTmVjZXNzYXJ5KGV4ZWMp
OworICAgIAorICAgIEJhc2U6OmRlbGV0ZVByb3BlcnR5KHRoaXNPYmplY3QsIGV4ZWMsIGlkZW50
KTsKK30KKwordm9pZCBPdXRPZkJhbmRBcmd1bWVudHM6OmRlZmluZU93blByb3BlcnR5KEpTT2Jq
ZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIGlkZW50LCBjb25zdCBQ
cm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIGJvb2wgc2hvdWxkVGhyb3cpCit7CisgICAg
T3V0T2ZCYW5kQXJndW1lbnRzKiB0aGlzT2JqZWN0ID0ganNDYXN0PE91dE9mQmFuZEFyZ3VtZW50
cyo+KG9iamVjdCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICAKKyAgICBpZiAoaWRl
bnQgPT0gdm0ucHJvcGVydHlOYW1lcy0+Y2FsbGVlCisgICAgICAgIHx8IGlkZW50ID09IHZtLnBy
b3BlcnR5TmFtZXMtPmNhbGxlcikKKyAgICAgICAgdGhpc09iamVjdC0+bWF0ZXJpYWxpemVTcGVj
aWFsc0lmTmVjZXNzYXJ5KGV4ZWMpOworICAgIAorICAgIHJldHVybiBCYXNlOjpkZWZpbmVPd25Q
cm9wZXJ0eShvYmplY3QsIGV4ZWMsIGlkZW50LCBkZXNjcmlwdG9yLCBzaG91bGRUaHJvdyk7Cit9
CisKK3ZvaWQgT3V0T2ZCYW5kQXJndW1lbnRzOjptYXRlcmlhbGl6ZVNwZWNpYWxzKEV4ZWNTdGF0
ZSogZXhlYykKK3sKKyAgICBSRUxFQVNFX0FTU0VSVCghc3BlY2lhbHNNYXRlcmlhbGl6ZWQoKSk7
CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICAKKyAgICBGdW5jdGlvbkV4ZWN1dGFibGUq
IGV4ZWN1dGFibGUgPSBqc0Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4obV9jYWxsZWUtPmV4ZWN1
dGFibGUoKSk7CisgICAgYm9vbCBpc1N0cmljdE1vZGUgPSBleGVjdXRhYmxlLT5pc1N0cmljdE1v
ZGUoKTsKKyAgICAKKyAgICBpZiAoaXNTdHJpY3RNb2RlKSB7CisgICAgICAgIHB1dERpcmVjdEFj
Y2Vzc29yKGV4ZWMsIHZtLnByb3BlcnR5TmFtZXMtPmNhbGxlZSwgZ2xvYmFsT2JqZWN0KCktPnRo
cm93VHlwZUVycm9yR2V0dGVyU2V0dGVyKHZtKSwgRG9udERlbGV0ZSB8IERvbnRFbnVtIHwgQWNj
ZXNzb3IpOworICAgICAgICBwdXREaXJlY3RBY2Nlc3NvcihleGVjLCB2bS5wcm9wZXJ0eU5hbWVz
LT5jYWxsZWUsIGdsb2JhbE9iamVjdCgpLT50aHJvd1R5cGVFcnJvckdldHRlclNldHRlcih2bSks
IERvbnREZWxldGUgfCBEb250RW51bSB8IEFjY2Vzc29yKTsKKyAgICB9IGVsc2UKKyAgICAgICAg
cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5jYWxsZWUsIEpTVmFsdWUobV9jYWxsZWUu
Z2V0KCkpKTsKKyAgICAKKyAgICBtX2NhbGxlZS5jbGVhcigpOworfQorCit2b2lkIE91dE9mQmFu
ZEFyZ3VtZW50czo6bWF0ZXJpYWxpemVTcGVjaWFsc0lmTmVjZXNzYXJ5KEV4ZWNTdGF0ZSogZXhl
YykKK3sKKyAgICBpZiAoIXNwZWNpYWxzTWF0ZXJpYWxpemVkKCkpCisgICAgICAgIG1hdGVyaWFs
aXplU3BlY2lhbHMoZXhlYyk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PdXRPZkJhbmRBcmd1bWVudHMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PdXRPZkJhbmRBcmd1bWVudHMuaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL091dE9mQmFuZEFy
Z3VtZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzcgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBPdXRPZkJhbmRBcmd1bWVu
dHNfaAorI2RlZmluZSBPdXRPZkJhbmRBcmd1bWVudHNfaAorCisjaW5jbHVkZSAiQXJndW1lbnRz
TW9kZS5oIgorI2luY2x1ZGUgIkpTT2JqZWN0LmgiCisKK25hbWVzcGFjZSBKU0MgeworCisvLyBU
aGlzIGlzIGFuIEFyZ3VtZW50cy1jbGFzcyBvYmplY3QgdGhhdCB3ZSBjcmVhdGUgd2hlbiB5b3Ug
ZG8gZnVuY3Rpb24uYXJndW1lbnRzLCBvciB5b3Ugc2F5CisvLyAiYXJndW1lbnRzIiBpbnNpZGUg
YSBmdW5jdGlvbiBpbiBzdHJpY3QgbW9kZS4gSXQgYmVoYXZlcyBhbG1wc3QgZW50aXJlbHkgbGlr
ZSBhbiBvcmRpbmFyeQorLy8gSmF2YVNjcmlwdCBvYmplY3QuIEFsbCBvZiB0aGUgYXJndW1lbnRz
IHZhbHVlcyBhcmUgc2ltcGx5IGNvcGllZCBmcm9tIHRoZSBzdGFjayAocG9zc2libHkgdmlhCisv
LyBzb21lIHNvcGhpc3RpY2F0ZWQgVmFsdWVSZWNvdmVyeSdzIGlmIGFuIG9wdGltaXppbmcgY29t
cGlsZXIgaXMgaW4gcGxheSkgYW5kIHRoZSBhcHByb3ByaWF0ZQorLy8gcHJvcGVydGllcyBvZiB0
aGUgb2JqZWN0IGFyZSBwb3B1bGF0ZWQuIFRoZSBvbmx5IHJlYXNvbiB3aHkgd2UgbmVlZCBhIHNw
ZWNpYWwgY2xhc3MgaXMgdG8gbWFrZQorLy8gdGhlIG9iamVjdCBjbGFpbSB0byBiZSAiQXJndW1l
bnRzIiBmcm9tIGEgdG9TdHJpbmcgc3RhbmRwb2ludCwgYW5kIHRvIGF2b2lkIG1hdGVyaWFsaXpp
bmcgdGhlCisvLyBjYWxsZXIvY2FsbGVlIHByb3BlcnRpZXMgdW5sZXNzIHNvbWVvbmUgYXNrcyBm
b3IgdGhlbS4KK2NsYXNzIE91dE9mQmFuZEFyZ3VtZW50cyA6IHB1YmxpYyBKU05vbkZpbmFsT2Jq
ZWN0IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTTm9uRmluYWxPYmplY3QgQmFzZTsKKyAgICAK
K3ByaXZhdGU6CisgICAgT3V0T2ZCYW5kQXJndW1lbnRzKFZNJiwgU3RydWN0dXJlKik7CisKK3B1
YmxpYzoKKyAgICBzdGF0aWMgT3V0T2ZCYW5kQXJndW1lbnRzKiBjcmVhdGVFbXB0eShWTSYsIEpT
R2xvYmFsT2JqZWN0KiwgSlNGdW5jdGlvbiogY2FsbGVlKTsKKyAgICBzdGF0aWMgT3V0T2ZCYW5k
QXJndW1lbnRzKiBjcmVhdGVFbXB0eShFeGVjU3RhdGUqLCBKU0Z1bmN0aW9uKiBjYWxsZWUpOwor
ICAgIHN0YXRpYyBPdXRPZkJhbmRBcmd1bWVudHMqIGNyZWF0ZVdpdGhJbmxpbmVGcmFtZShFeGVj
U3RhdGUqIG15RnJhbWUsIEV4ZWNTdGF0ZSogdGFyZ2V0RnJhbWUsIElubGluZUNhbGxGcmFtZSos
IEFyZ3VtZW50c01vZGUpOworICAgIHN0YXRpYyBPdXRPZkJhbmRBcmd1bWVudHMqIGNyZWF0ZVdp
dGhNYWNoaW5lRnJhbWUoRXhlY1N0YXRlKiBteUZyYW1lLCBFeGVjU3RhdGUqIHRhcmdldEZyYW1l
LCBBcmd1bWVudHNNb2RlKTsKKyAgICAKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1
Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlKTsKKworICAgIHN0
YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRlc0dldE93blByb3Bl
cnR5U2xvdCB8IE92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMgfCBKU09iamVjdDo6U3RydWN0dXJl
RmxhZ3M7CisKKyAgICBERUNMQVJFX0lORk87CisKK3ByaXZhdGU6CisgICAgc3RhdGljIGJvb2wg
Z2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQ
cm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2Jq
ZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOwor
ICAgIHN0YXRpYyB2b2lkIHB1dChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpT
VmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyB2b2lkIGRlbGV0ZVByb3BlcnR5
KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSk7CisgICAgc3RhdGljIHZvaWQgZGVm
aW5lT3duUHJvcGVydHkoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIGNvbnN0
IFByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgc2hvdWxkVGhyb3cpOworICAgIAorICAgIGJvb2wg
c3BlY2lhbHNNYXRlcmlhbGl6ZWQoKSBjb25zdCB7IHJldHVybiAhbV9jYWxsZWU7IH0KKyAgICB2
b2lkIG1hdGVyaWFsaXplU3BlY2lhbHMoRXhlY1N0YXRlKik7CisgICAgdm9pZCBtYXRlcmlhbGl6
ZVNwZWNpYWxzSWZOZWNlc3NhcnkoRXhlY1N0YXRlKik7CisgICAgCisgICAgV3JpdGVCYXJyaWVy
PEpTRnVuY3Rpb24qPiBtX2NhbGxlZTsgLy8gU2V0IHRvIG51bGxwdHIgd2hlbiB3ZSBtYXRlcmlh
bGl6ZSBhbGwgb2Ygb3VyIHNwZWNpYWwgcHJvcGVydGllcy4KK307CisKK30gLy8gbmFtZXNwYWNl
IEpTQworCisjZW5kaWYgLy8gT3V0T2ZCYW5kQXJndW1lbnRzX2gKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVPZmZzZXQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlT2Zmc2V0LmNwcAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlT2Zmc2V0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDQyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTY29wZU9mZnNldC5o
IgorCituYW1lc3BhY2UgSlNDIHsKKwordm9pZCBTY29wZU9mZnNldDo6ZHVtcChQcmludFN0cmVh
bSYgb3V0KSBjb25zdAoreworICAgIGlmICghKnRoaXMpIHsKKyAgICAgICAgb3V0LnByaW50KCJz
Y29wZUludmFsaWQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBvdXQucHJp
bnQoInNjb3BlIiwgb2Zmc2V0KCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVPZmZzZXQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZU9mZnNldC5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVPZmZzZXQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpZm5kZWYgU2NvcGVPZmZzZXRfaAorI2RlZmluZSBTY29wZU9mZnNl
dF9oCisKKyNpbmNsdWRlICJHZW5lcmljT2Zmc2V0LmgiCisjaW5jbHVkZSA8d3RmL1ByaW50U3Ry
ZWFtLmg+CisKK25hbWVzcGFjZSBKU0MgeworCisvLyBUaGlzIGlzIGFuIG9mZnNldCBpbnRvIGEg
c2NvcGUgb2Ygc29tZSBraW5kLiBJdCBjb3VsZCBiZSBhbiBhY3RpdmF0aW9uIHNjb3BlIG9yIGl0
IGNvdWxkIGJlIGEKKy8vIGdsb2JhbCBvYmplY3QuCitjbGFzcyBTY29wZU9mZnNldCA6IHB1Ymxp
YyBHZW5lcmljT2Zmc2V0PFNjb3BlT2Zmc2V0PiB7CitwdWJsaWM6CisgICAgU2NvcGVPZmZzZXQo
KSB7IH0KKyAgICAKKyAgICBleHBsaWNpdCBTY29wZU9mZnNldCh1bnNpZ25lZCBvZmZzZXQpCisg
ICAgICAgIDogR2VuZXJpY09mZnNldChvZmZzZXQpCisgICAgeworICAgIH0KKyAgICAKKyAgICB2
b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQwor
CisjZW5kaWYgLy8gU2NvcGVPZmZzZXRfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TY29wZWRBcmd1bWVudHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50cy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMTAwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTY29wZWRBcmd1bWVu
dHMuaCIKKworI2luY2x1ZGUgIkdlbmVyaWNBcmd1bWVudHNJbmxpbmVzLmgiCisjaW5jbHVkZSAi
SlNBcmd1bWVudHNJdGVyYXRvci5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKworbmFtZXNw
YWNlIEpTQyB7CisKK1NUQVRJQ19BU1NFUlRfSVNfVFJJVklBTExZX0RFU1RSVUNUSUJMRShTY29w
ZWRBcmd1bWVudHMpOworCitjb25zdCBDbGFzc0luZm8gU2NvcGVkQXJndW1lbnRzOjpzX2luZm8g
PSB7ICJBcmd1bWVudHMiLCAmQmFzZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKFNj
b3BlZEFyZ3VtZW50cykgfTsKKworU2NvcGVkQXJndW1lbnRzOjpTY29wZWRBcmd1bWVudHMoVk0m
IHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICA6IEdlbmVyaWNBcmd1bWVudHModm0sIHN0
cnVjdHVyZSkKKyAgICAsIG1fb3ZlcnJvZGVUaGluZ3MoZmFsc2UpCit7Cit9CisKK3ZvaWQgU2Nv
cGVkQXJndW1lbnRzOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIEpTRnVuY3Rpb24qIGNhbGxlZSwg
U2NvcGVkQXJndW1lbnRzVGFibGUqIHRhYmxlLCBKU0xleGljYWxFbnZpcm9ubWVudCogc2NvcGUp
Cit7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOworICAgIG1fY2FsbGVlLnNldCh2bSwg
dGhpcywgY2FsbGVlKTsKKyAgICBtX3RhYmxlLnNldCh2bSwgdGhpcywgdGFibGUpOworICAgIG1f
c2NvcGUuc2V0KHZtLCB0aGlzLCBzY29wZSk7Cit9CisKK1Njb3BlZEFyZ3VtZW50cyogU2NvcGVk
QXJndW1lbnRzOjpjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNGdW5jdGlv
biogY2FsbGVlLCBTY29wZWRBcmd1bWVudHNUYWJsZSogdGFibGUsIEpTTGV4aWNhbEVudmlyb25t
ZW50KiBzY29wZSkKK3sKKyAgICBTY29wZWRBcmd1bWVudHMqIHJlc3VsdCA9CisgICAgICAgIG5l
dyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFNjb3BlZEFyZ3VtZW50cz4odm0uaGVhcCkpCisgICAg
ICAgICh2bSwgc3RydWN0dXJlKTsKKyAgICByZXN1bHQtPmZpbmlzaENyZWF0aW9uKHZtLCBjYWxs
ZWUsIHRhYmxlLCBzY29wZSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBTY29wZWRB
cmd1bWVudHM6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRv
cikKK3sKKyAgICBTY29wZWRBcmd1bWVudHMqIHRoaXNPYmplY3QgPSBzdGF0aWNfY2FzdDxTY29w
ZWRBcmd1bWVudHMqPihjZWxsKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNP
YmplY3QsIGluZm8oKSk7CisgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNp
dG9yKTsKKworICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX2NhbGxlZSk7CisgICAg
dmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fdGFibGUpOworICAgIHZpc2l0b3IuYXBwZW5k
KCZ0aGlzT2JqZWN0LT5tX3Njb3BlKTsKK30KKworU3RydWN0dXJlKiBTY29wZWRBcmd1bWVudHM6
OmNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
VmFsdWUgcHJvdG90eXBlKQoreworICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xv
YmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKFNjb3BlZEFyZ3VtZW50c1R5cGUsIFN0cnVj
dHVyZUZsYWdzKSwgaW5mbygpKTsKK30KKwordm9pZCBTY29wZWRBcmd1bWVudHM6OnNsb3dEb3du
QW5kV2FzdGVNZW1vcnkoVk0mIHZtKQoreworICAgIFJFTEVBU0VfQVNTRVJUKCFtX292ZXJyb2Rl
VGhpbmdzKTsKKyAgICAKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0
aCwganNOdW1iZXIobV90YWJsZS0+bGVuZ3RoKCkpLCBEb250RW51bSk7CisgICAgcHV0RGlyZWN0
KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5jYWxsZWUsIG1fY2FsbGVlLmdldCgpLCBEb250RW51bSk7
CisgICAgCisgICAgbV9vdmVycm9kZVRoaW5ncyA9IHRydWU7Cit9CisKK3ZvaWQgU2NvcGVkQXJn
dW1lbnRzOjpzbG93RG93bkFuZFdhc3RlTWVtb3J5SWZOZWNlc3NhcnkoVk0mIHZtKQoreworICAg
IGlmICghbV9vdmVycm9kZVRoaW5ncykKKyAgICAgICAgc2xvd0Rvd25BbmRXYXN0ZU1lbW9yeSh2
bSk7Cit9CisKK3ZvaWQgU2NvcGVkQXJndW1lbnRzOjpvdmVycmlkZUFyZ3VtZW50KFZNJiB2bSwg
dWludDMyX3QgaSkKK3sKKyAgICBtX3RhYmxlLnNldCh2bSwgdGhpcywgbV90YWJsZS0+c2V0KHZt
LCBpLCBTY29wZU9mZnNldCgpKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHMuaAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTEyIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgU2NvcGVkQXJndW1lbnRzX2gKKyNk
ZWZpbmUgU2NvcGVkQXJndW1lbnRzX2gKKworI2luY2x1ZGUgIkdlbmVyaWNBcmd1bWVudHMuaCIK
KworbmFtZXNwYWNlIEpTQyB7CisKKy8vIFRoaXMgaXMgYW4gQXJndW1lbnRzLWNsYXNzIG9iamVj
dCB0aGF0IHdlIGNyZWF0ZSB3aGVuIHlvdSBzYXkgImFyZ3VtZW50cyIgaW5zaWRlIGEgZnVuY3Rp
b24sCisvLyBhbmQgb25lIG9yIG1vcmUgb2YgdGhlIGFyZ3VtZW50cyBtYXkgYmUgY2FwdHVyZWQg
aW4gdGhlIGZ1bmN0aW9uJ3MgYWN0aXZhdGlvbi4gVGhlIGZ1bmN0aW9uCisvLyB3aWxsIGNvcHkg
YWxsIG9mIGl0cyBhcmd1bWVudHMgaW50byB0aGUgYWN0aXZhdGlvbiBhbmQgdGhlbiBjcmVhdGUg
dGhpcyBvYmplY3QuIFRoaXMgb2JqZWN0CisvLyB3aWxsIHVzZSB0aGUgc3ltYm9sIHRhYmxlJ3Mg
U2NvcGVkQXJndW1lbnRzVGFibGUgYW5kIHRoZSBhY3RpdmF0aW9uIHRvIGhhbmRsZSBhbGwgaW5k
ZXhlZAorLy8gbG9va3Vwcy4KK2NsYXNzIFNjb3BlZEFyZ3VtZW50cyA6IHB1YmxpYyBHZW5lcmlj
QXJndW1lbnRzPFNjb3BlZEFyZ3VtZW50cz4geworcHJpdmF0ZToKKyAgICBTY29wZWRBcmd1bWVu
dHMoVk0mLCBTdHJ1Y3R1cmUqKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgSlNGdW5j
dGlvbiogY2FsbGVlLCBTY29wZWRBcmd1bWVudHNUYWJsZSosIEpTTGV4aWNhbEVudmlyb25tZW50
Kik7CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgU2NvcGVkQXJndW1lbnRzKiBjcmVhdGUoVk0mLCBT
dHJ1Y3R1cmUqLCBKU0Z1bmN0aW9uKiBjYWxsZWUsIFNjb3BlZEFyZ3VtZW50c1RhYmxlKiwgSlNM
ZXhpY2FsRW52aXJvbm1lbnQqKTsKKyAgICAKKyAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVu
KEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgCisgICAgdWludDMyX3QgaW50ZXJuYWxMZW5n
dGgoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdGFibGUtPmxlbmd0aCgpOworICAg
IH0KKyAgICAKKyAgICB1aW50MzJfdCBsZW5ndGgoRXhlY1N0YXRlKiBleGVjKSBjb25zdAorICAg
IHsKKyAgICAgICAgaWYgKFVOTElLRUxZKG1fb3ZlcnJvZGVMZW5ndGgpKQorICAgICAgICAgICAg
cmV0dXJuIGdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKS50b1VJbnQzMihl
eGVjKTsKKyAgICAgICAgcmV0dXJuIGludGVybmFsTGVuZ3RoKCk7CisgICAgfQorICAgIAorICAg
IGJvb2wgY2FuQWNjZXNzSW5kZXhRdWlja2x5KHVpbnQzMl90IGkpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gaSA8IG1fbGVuZ3RoICYmICEhbV90YWJsZS0+Z2V0KGkpOworICAgIH0KKyAg
ICAKKyAgICBKU1ZhbHVlIGdldEluZGV4UXVpY2tseSh1aW50MzJfdCBpKSBjb25zdAorICAgIHsK
KyAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oY2FuQWNjZXNzSW5kZXhR
dWlja2x5KGkpKTsKKyAgICAgICAgcmV0dXJuIG1fc2NvcGUtPnZhcmlhYmxlQXQobV90YWJsZS0+
Z2V0KGkpKS5nZXQoKTsKKyAgICB9CisKKyAgICB2b2lkIHNldEluZGV4UXVpY2tseShWTSYgdm0s
IHVpbnQzMl90IGksIEpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBBU1NFUlRfV0lUSF9T
RUNVUklUWV9JTVBMSUNBVElPTihjYW5BY2Nlc3NJbmRleFF1aWNrbHkoaSkpOworICAgICAgICBy
ZXR1cm4gbV9zY29wZS0+dmFyaWFibGVBdChtX3RhYmxlLT5nZXQoaSkpLmdldCgpOworICAgIH0K
KworICAgIFdyaXRlQmFycmllcjxKU0Z1bmN0aW9uPiYgY2FsbGVlKCkKKyAgICB7CisgICAgICAg
IHJldHVybiBtX2NhbGxlZTsKKyAgICB9CisgICAgCisgICAgV3JpdGVCYXJyaWVyPFVua25vd24+
JiBhcmd1bWVudChDYXB0dXJlZEFyZ3VtZW50c09mZnNldCBvZmZzZXQpCisgICAgeworICAgICAg
ICBBU1NFUlQob2Zmc2V0KTsKKyAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJ
T04ob2Zmc2V0Lm9mZnNldCgpIDwgbV9sZW5ndGgpOworICAgICAgICByZXR1cm4gc3RvcmFnZSgp
W29mZnNldC5vZmZzZXQoKV07CisgICAgfQorICAgIAorICAgIGJvb2wgb3ZlcnJvZGVUaGluZ3Mo
KSBjb25zdCB7IHJldHVybiBtX292ZXJyb2RlVGhpbmdzOyB9CisgICAgdm9pZCBzbG93RG93bkFu
ZFdhc3RlTWVtb3J5KFZNJik7CisgICAgdm9pZCBzbG93RG93bkFuZFdhc3RlTWVtb3J5SWZOZWNl
c3NhcnkoVk0mKTsKKyAgICB2b2lkIG92ZXJyaWRlQXJndW1lbnQoVk0mIHZtLCB1aW50MzJfdCBp
KTsKKyAgICAKKyAgICBERUNMQVJFX0lORk87CisgICAgCisgICAgc3RhdGljIFN0cnVjdHVyZSog
Y3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHByb3RvdHlwZSk7
CisgICAgCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlRhYmxlKCkgeyByZXR1cm4gT0JK
RUNUX09GRlNFVE9GKFNjb3BlZEFyZ3VtZW50cywgbV90YWJsZSk7IH0KKyAgICBzdGF0aWMgcHRy
ZGlmZl90IG9mZnNldE9mU2NvcGUoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoU2NvcGVkQXJn
dW1lbnRzLCBtX3Njb3BlKTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZPdmVycm9k
ZVRoaW5ncygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihTY29wZWRBcmd1bWVudHMsIG1fb3Zl
cnJvZGVUaGluZ3MpOyB9CisKK3ByaXZhdGU6CisgICAgYm9vbCBtX292ZXJyb2RlVGhpbmdzOyAv
LyBUcnVlIGlmIGxlbmd0aCwgY2FsbGVlLCBhbmQgY2FsbGVyIGFyZSBmdWxseSBtYXRlcmlhbGl6
ZWQgaW4gdGhlIG9iamVjdC4KKyAgICBXcml0ZUJhcnJpZXI8SlNGdW5jdGlvbio+IG1fY2FsbGVl
OworICAgIFdyaXRlQmFycmllcjxTY29wZWRBcmd1bWVudHNUYWJsZT4gbV90YWJsZTsKKyAgICBX
cml0ZUJhcnJpZXI8SlNMZXhpY2FsRW52aXJvbm1lbnQ+IG1fc2NvcGU7Cit9OworCit9IC8vIG5h
bWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIFNjb3BlZEFyZ3VtZW50c19oCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50c1RhYmxlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzVGFibGUu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFy
Z3VtZW50c1RhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5NCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFNjb3BlZEFyZ3Vt
ZW50c1RhYmxlX2gKKyNkZWZpbmUgU2NvcGVkQXJndW1lbnRzVGFibGVfaAorCisjaW5jbHVkZSAi
SlNDZWxsLmgiCisKK25hbWVzcGFjZSBKU0MgeworCisvLyBUaGlzIGNsYXNzJ3Mgb25seSBqb2Ig
aXMgdG8gaG9sZCBvbnRvIHRoZSBsaXN0IG9mIFNjb3BlT2Zmc2V0cyBmb3IgZWFjaCBhcmd1bWVu
dCB0aGF0IGEKKy8vIGZ1bmN0aW9uIGhhcy4gTW9zdCBvZiB0aGUgdGltZSwgdGhlIEJ5dGVjb2Rl
R2VuZXJhdG9yIHdpbGwgY3JlYXRlIG9uZSBvZiB0aGVzZSBhbmQgaXQgd2lsbAorLy8gbmV2ZXIg
YmUgbW9kaWZpZWQgc3Vic2VxdWVudGx5LiBUaGVyZSBpcyBhIHJhcmUgY2FzZSB3aGVyZSBhIFNj
b3BlZEFyZ3VtZW50cyBvYmplY3QgaXMgY3JlYXRlZAorLy8gYW5kIGFsaWFzZXMgb25lIG9mIHRo
ZXNlIGFuZCB0aGVuIGRlY2lkZXMgdG8gbW9kaWZ5IGl0OyBpbiB0aGF0IGNhc2Ugd2UgZG8gY29w
eS1vbi13cml0ZS4gVGhpcworLy8gbWFrZXMgc2Vuc2UgYmVjYXVzZSBzdWNoIG1vZGlmaWNhdGlv
bnMgYXJlIHNvIHVuY29tbW9uLiBZb3UnZCBoYXZlIHRvIGRvIHNvbWV0aGluZyBjcmF6eSBsaWtl
CisvLyAiZGVsZXRlIGFyZ3VtZW50c1tpXSIgb3Igc29tZSB2YXJpYW50IG9mIGRlZmluZU93blBy
b3BlcnR5LgorY2xhc3MgU2NvcGVkQXJndW1lbnRzIDogcHVibGljIEpTQ2VsbCB7CitwdWJsaWM6
CisgICAgdHlwZWRlZiBKU0NlbGwgQmFzZTsKKyAgICAKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBu
ZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNJbW1vcnRh
bFN0cnVjdHVyZSA9IHRydWU7CisKK3ByaXZhdGU6CisgICAgU2NvcGVkQXJndW1lbnRzVGFibGUo
Vk0mKTsKKyAgICB+U2NvcGVkQXJndW1lbnRzVGFibGUoKTsKKworcHVibGljOgorICAgIHN0YXRp
YyBTY29wZWRBcmd1bWVudHNUYWJsZSogY3JlYXRlKFZNJik7CisgICAgCisgICAgU2NvcGVkQXJn
dW1lbnRzKiBjbG9uZShWTSYpOworICAgIAorICAgIHVpbnQzMl90IGxlbmd0aCgpIGNvbnN0IHsg
cmV0dXJuIG1fbGVuZ3RoOyB9CisgICAgU2NvcGVkQXJndW1lbnRzVGFibGUqIHNldExlbmd0aChW
TSYsIHVpbnQzMl90IG5ld0xlbmd0aCk7CisgICAgCisgICAgU2NvcGVPZmZzZXQgZ2V0KHVpbnQz
Ml90IGkpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNB
VElPTihpIDwgbV9sZW5ndGgpOworICAgICAgICByZXR1cm4gbV9hcmd1bWVudHNbaV07CisgICAg
fQorICAgIAorICAgIHZvaWQgbG9jaygpCisgICAgeworICAgICAgICBtX2xvY2tlZCA9IHRydWU7
CisgICAgfQorICAgIAorICAgIFNjb3BlZEFyZ3VtZW50cyogc2V0KFZNJiB2bSwgdWludDMyX3Qg
aSwgU2NvcGVPZmZzZXQgdmFsdWUpCisgICAgeworICAgICAgICBTY29wZWRBcmd1bWVudHMqIHJl
c3VsdDsKKyAgICAgICAgaWYgKFVOTElLRUxZKG1fbG9ja2VkKSkKKyAgICAgICAgICAgIHJlc3Vs
dCA9IGNsb25lKHZtKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmVzdWx0ID0gdGhpczsK
KyAgICAgICAgcmVzdWx0LT5zZXREaXJlY3QoaSwgdmFsdWUpOworICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgIH0KKyAgICAKKyAgICBERUNMQVJFX0lORk87CisgICAgCisgICAgc3RhdGljIHB0
cmRpZmZfdCBvZmZzZXRPZkxlbmd0aCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihTY29wZWRB
cmd1bWVudHMsIG1fbGVuZ3RoKTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZBcmd1
bWVudHMoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoU2NvcGVkQXJndW1lbnRzLCBtX2FyZ3Vt
ZW50cyk7IH0KKworcHJpdmF0ZToKKyAgICB1aW50MzJfdCBtX2xlbmd0aDsKKyAgICBib29sIG1f
bG9ja2VkOyAvLyBCZWluZyBsb2NrZWQgbWVhbnMgdGhhdCB0aGVyZSBhcmUgbXVsdGlwbGUgcmVm
ZXJlbmNlcyB0byB0aGlzIG9iamVjdCBhbmQgbm9uZSBvZiB0aGVtIGV4cGVjdCB0byBzZWUgdGhl
IG90aGVycycgbW9kaWZpY2F0aW9ucy4gVGhpcyBtZWFucyB0aGF0IG1vZGlmaWNhdGlvbnMgbmVl
ZCB0byBtYWtlIGEgY29weSBmaXJzdC4KKyAgICBzdGQ6OnVuaXF1ZV9wdHI8U2NvcGVPZmZzZXRb
XT4gbV9hcmd1bWVudHM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIFNj
b3BlZEFyZ3VtZW50c1RhYmxlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3ltYm9sVGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N5bWJvbFRhYmxlLmNwcAkocmV2aXNpb24gMTgwNzIwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxNCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTQsIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0xMzcsMjkgKzEzNywyMiBAQCB2b2lkIFN5bWJvbFRhYmxlOjpXYXRjaHBvaW50Q2xlYW51
cDo6ZmluCiAgICAgfQogfQogCi1TeW1ib2xUYWJsZSogU3ltYm9sVGFibGU6OmNsb25lQ2FwdHVy
ZWROYW1lcyhWTSYgdm0pCitTeW1ib2xUYWJsZSogU3ltYm9sVGFibGU6OmNsb25lU2NvcGVQYXJ0
KFZNJiB2bSkKIHsKICAgICBTeW1ib2xUYWJsZSogcmVzdWx0ID0gU3ltYm9sVGFibGU6OmNyZWF0
ZSh2bSk7CiAgICAgCi0gICAgcmVzdWx0LT5tX3BhcmFtZXRlckNvdW50SW5jbHVkaW5nVGhpcyA9
IG1fcGFyYW1ldGVyQ291bnRJbmNsdWRpbmdUaGlzOwogICAgIHJlc3VsdC0+bV91c2VzTm9uU3Ry
aWN0RXZhbCA9IG1fdXNlc05vblN0cmljdEV2YWw7Ci0gICAgcmVzdWx0LT5tX2NhcHR1cmVTdGFy
dCA9IG1fY2FwdHVyZVN0YXJ0OwotICAgIHJlc3VsdC0+bV9jYXB0dXJlRW5kID0gbV9jYXB0dXJl
RW5kOwogCiAgICAgZm9yIChhdXRvIGl0ZXIgPSBtX21hcC5iZWdpbigpLCBlbmQgPSBtX21hcC5l
bmQoKTsgaXRlciAhPSBlbmQ7ICsraXRlcikgewotICAgICAgICBpZiAoIWlzQ2FwdHVyZWQoaXRl
ci0+dmFsdWUuZ2V0SW5kZXgoKSkpCisgICAgICAgIGlmICghaXRlci0+dmFsdWUudmFyT2Zmc2V0
KCkuaXNTY29wZSgpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIHJlc3VsdC0+bV9t
YXAuYWRkKAogICAgICAgICAgICAgaXRlci0+a2V5LAotICAgICAgICAgICAgU3ltYm9sVGFibGVF
bnRyeShpdGVyLT52YWx1ZS5nZXRJbmRleCgpLCBpdGVyLT52YWx1ZS5nZXRBdHRyaWJ1dGVzKCkp
KTsKKyAgICAgICAgICAgIFN5bWJvbFRhYmxlRW50cnkoaXRlci0+dmFsdWUudmFyT2Zmc2V0KCks
IGl0ZXItPnZhbHVlLmdldEF0dHJpYnV0ZXMoKSkpOwogICAgIH0KICAgICAKLSAgICBpZiAobV9z
bG93QXJndW1lbnRzKSB7Ci0gICAgICAgIHJlc3VsdC0+bV9zbG93QXJndW1lbnRzID0gc3RkOjpt
YWtlX3VuaXF1ZTxTbG93QXJndW1lbnRbXT4ocGFyYW1ldGVyQ291bnQoKSk7Ci0gICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IHBhcmFtZXRlckNvdW50KCk7IGktLTspCi0gICAgICAgICAgICByZXN1
bHQtPm1fc2xvd0FyZ3VtZW50c1tpXSA9IG1fc2xvd0FyZ3VtZW50c1tpXTsKLSAgICB9Ci0KKyAg
ICByZXN1bHQtPm1fYXJndW1lbnRzID0gYXJndW1lbnRzKCk7CisgICAgCiAgICAgaWYgKG1fdHlw
ZVByb2ZpbGluZ1JhcmVEYXRhKSB7CiAgICAgICAgIHJlc3VsdC0+bV90eXBlUHJvZmlsaW5nUmFy
ZURhdGEgPSBzdGQ6Om1ha2VfdW5pcXVlPFR5cGVQcm9maWxpbmdSYXJlRGF0YT4oKTsKIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5oCShyZXZpc2lv
biAxODA3MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
NywgMjAwOCwgMjAxMi0yMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAxMi0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzEsNiArMzEsNyBA
QAogCiAjaW5jbHVkZSAiQ29uY3VycmVudEpJVExvY2suaCIKICNpbmNsdWRlICJKU09iamVjdC5o
IgorI2luY2x1ZGUgIlNjb3BlZEFyZ3VtZW50c1RhYmxlLmgiCiAjaW5jbHVkZSAiVHlwZUxvY2F0
aW9uLmgiCiAjaW5jbHVkZSAiVmFyaWFibGVXYXRjaHBvaW50U2V0LmgiCiAjaW5jbHVkZSA8bWVt
b3J5PgpAQCAtMzksMjQgKzQwLDYgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLXN0cnVjdCBTbG93
QXJndW1lbnQgewotcHVibGljOgotICAgIGVudW0gU3RhdHVzIHsKLSAgICAgICAgTm9ybWFsID0g
MCwKLSAgICAgICAgQ2FwdHVyZWQgPSAxLAotICAgICAgICBEZWxldGVkID0gMgotICAgIH07Ci0K
LSAgICBTbG93QXJndW1lbnQoKQotICAgICAgICA6IHN0YXR1cyhOb3JtYWwpCi0gICAgICAgICwg
aW5kZXgoMCkKLSAgICB7Ci0gICAgfQotCi0gICAgU3RhdHVzIHN0YXR1czsKLSAgICBpbnQgaW5k
ZXg7IC8vIElmIHN0YXR1cyBpcyAnRGVsZXRlZCcsIGluZGV4IGlzIGJvZ3VzLgotfTsKLQogc3Rh
dGljIEFMV0FZU19JTkxJTkUgaW50IG1pc3NpbmdTeW1ib2xNYXJrZXIoKSB7IHJldHVybiBzdGQ6
Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpOyB9CiAKIC8vIFRoZSBiaXQgdHdpZGRsaW5nIGlu
IHRoaXMgY2xhc3MgYXNzdW1lcyB0aGF0IGV2ZXJ5IHJlZ2lzdGVyIGluZGV4IGlzIGEKQEAgLTg2
LDYgKzY5LDI4IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIGludCBtaXNzaW5nU3ltYm9sTWEKIC8v
IGNvcHk6ICAgICBTeW1ib2xUYWJsZUVudHJ5IC0tPiBGYXRFbnRyeSAtLS0tLV4KIAogc3RydWN0
IFN5bWJvbFRhYmxlRW50cnkgeworcHJpdmF0ZToKKyAgICBzdGF0aWMgVmFyT2Zmc2V0IHZhck9m
ZnNldEZyb21CaXRzKGludHB0cl90IGJpdHMpCisgICAgeworICAgICAgICBWYXJLaW5kIGtpbmQ7
CisgICAgICAgIGlmIChiaXRzICYgU3RhY2tGbGFnKQorICAgICAgICAgICAga2luZCA9IFN0YWNr
VmFyS2luZDsKKyAgICAgICAgZWxzZSBpZiAoYml0cyAmIENhcHR1cmVkQXJndW1lbnRGbGFnKQor
ICAgICAgICAgICAga2luZCA9IENhcHR1cmVkQXJndW1lbnRLaW5kOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBraW5kID0gU2NvcGVWYXJLaW5kOworICAgICAgICByZXR1cm4gVmFyT2Zmc2V0
Ojphc3NlbWJsZShraW5kLCBzdGF0aWNfY2FzdDxpbnQ+KGJpdHMgPj4gRmxhZ0JpdHMpKTsKKyAg
ICB9CisgICAgCisgICAgc3RhdGljIFNjb3BlT2Zmc2V0IHNjb3BlT2Zmc2V0RnJvbUJpdHMoaW50
cHRyX3QgYml0cykKKyAgICB7CisgICAgICAgIEFTU0VSVCghKGJpdHMgJiBTdGFja0ZsYWcpKTsK
KyAgICAgICAgQVNTRVJUKCEoYml0cyAmIENhcHR1cmVkQXJndW1lbnRGbGFnKSk7CisgICAgICAg
IHJldHVybiBTY29wZU9mZnNldChzdGF0aWNfY2FzdDxpbnQ+KGJpdHMgPj4gRmxhZ0JpdHMpKTsK
KyAgICB9CisKK3B1YmxpYzoKKyAgICAKICAgICAvLyBVc2UgdGhlIFN5bWJvbFRhYmxlRW50cnk6
OkZhc3QgY2xhc3MsIGVpdGhlciB2aWEgaW1wbGljaXQgY2FzdCBvciBieSBjYWxsaW5nCiAgICAg
Ly8gZ2V0RmFzdCgpLCB3aGVuIHlvdSAoMSkgb25seSBjYXJlIGFib3V0IGlzTnVsbCgpLCBnZXRJ
bmRleCgpLCBhbmQgaXNSZWFkT25seSgpLAogICAgIC8vIGFuZCAoMikgeW91IGFyZSBpbiBhIGhv
dCBwYXRoIHdoZXJlIHlvdSBuZWVkIHRvIG1pbmltaXplIHRoZSBudW1iZXIgb2YgdGltZXMKQEAg
LTEwNywxMSArMTEyLDE5IEBAIHN0cnVjdCBTeW1ib2xUYWJsZUVudHJ5IHsKICAgICAgICAgICAg
IHJldHVybiAhKG1fYml0cyAmIH5TbGltRmxhZyk7CiAgICAgICAgIH0KIAotICAgICAgICBpbnQg
Z2V0SW5kZXgoKSBjb25zdAorICAgICAgICBWYXJPZmZzZXQgdmFyT2Zmc2V0KCkgY29uc3QKICAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4obV9iaXRzID4+IEZs
YWdCaXRzKTsKKyAgICAgICAgICAgIHJldHVybiB2YXJPZmZzZXRGcm9tQml0cyhtX2JpdHMpOwog
ICAgICAgICB9Ci0gICAgCisgICAgICAgIAorICAgICAgICAvLyBBc3NlcnRzIGlmIHRoZSBvZmZz
ZXQgaXMgYW55dGhpbmcgYnV0IGEgc2NvcGUgb2Zmc2V0LiBUaGlzIHN0cnVjdHVyZXMgdGhlIGFz
c2VydGlvbnMKKyAgICAgICAgLy8gaW4gYSB3YXkgdGhhdCBtYXkgcmVzdWx0IGluIGJldHRlciBj
b2RlLCBldmVuIGluIHJlbGVhc2UsIHRoYW4gZG9pbmcKKyAgICAgICAgLy8gdmFyT2Zmc2V0KCku
c2NvcGVPZmZzZXQoKS4KKyAgICAgICAgU2NvcGVPZmZzZXQgc2NvcGVPZmZzZXQoKSBjb25zdAor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gc2NvcGVPZmZzZXRGcm9tQml0cyhtX2JpdHMp
OworICAgICAgICB9CisgICAgICAgIAogICAgICAgICBib29sIGlzUmVhZE9ubHkoKSBjb25zdAog
ICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gbV9iaXRzICYgUmVhZE9ubHlGbGFnOwpAQCAt
MTQyLDE4ICsxNTUsMTggQEAgc3RydWN0IFN5bWJvbFRhYmxlRW50cnkgewogICAgIHsKICAgICB9
CiAKLSAgICBTeW1ib2xUYWJsZUVudHJ5KGludCBpbmRleCkKKyAgICBTeW1ib2xUYWJsZUVudHJ5
KFZhck9mZnNldCBvZmZzZXQpCiAgICAgICAgIDogbV9iaXRzKFNsaW1GbGFnKQogICAgIHsKLSAg
ICAgICAgQVNTRVJUKGlzVmFsaWRJbmRleChpbmRleCkpOwotICAgICAgICBwYWNrKGluZGV4LCBm
YWxzZSwgZmFsc2UpOworICAgICAgICBBU1NFUlQoaXNWYWxpZFZhck9mZnNldChvZmZzZXQpKTsK
KyAgICAgICAgcGFjayhvZmZzZXQsIGZhbHNlLCBmYWxzZSk7CiAgICAgfQogCi0gICAgU3ltYm9s
VGFibGVFbnRyeShpbnQgaW5kZXgsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCisgICAgU3ltYm9sVGFi
bGVFbnRyeShWYXJPZmZzZXQgb2Zmc2V0LCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQogICAgICAgICA6
IG1fYml0cyhTbGltRmxhZykKICAgICB7Ci0gICAgICAgIEFTU0VSVChpc1ZhbGlkSW5kZXgoaW5k
ZXgpKTsKLSAgICAgICAgcGFjayhpbmRleCwgYXR0cmlidXRlcyAmIFJlYWRPbmx5LCBhdHRyaWJ1
dGVzICYgRG9udEVudW0pOworICAgICAgICBBU1NFUlQoaXNWYWxpZFZhck9mZnNldChvZmZzZXQp
KTsKKyAgICAgICAgcGFjayhvZmZzZXQsIGF0dHJpYnV0ZXMgJiBSZWFkT25seSwgYXR0cmlidXRl
cyAmIERvbnRFbnVtKTsKICAgICB9CiAgICAgCiAgICAgflN5bWJvbFRhYmxlRW50cnkoKQpAQCAt
MTgxLDkgKzE5NCwxNyBAQCBzdHJ1Y3QgU3ltYm9sVGFibGVFbnRyeSB7CiAgICAgICAgIHJldHVy
biAhKGJpdHMoKSAmIH5TbGltRmxhZyk7CiAgICAgfQogCi0gICAgaW50IGdldEluZGV4KCkgY29u
c3QKKyAgICBWYXJPZmZzZXQgdmFyT2Zmc2V0KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biB2YXJPZmZzZXRGcm9tQml0cyhiaXRzKCkpOworICAgIH0KKyAgICAKKyAgICAvLyBBc3NlcnRz
IGlmIHRoZSBvZmZzZXQgaXMgYW55dGhpbmcgYnV0IGEgc2NvcGUgb2Zmc2V0LiBUaGlzIHN0cnVj
dHVyZXMgdGhlIGFzc2VydGlvbnMKKyAgICAvLyBpbiBhIHdheSB0aGF0IG1heSByZXN1bHQgaW4g
YmV0dGVyIGNvZGUsIGV2ZW4gaW4gcmVsZWFzZSwgdGhhbiBkb2luZworICAgIC8vIHZhck9mZnNl
dCgpLnNjb3BlT2Zmc2V0KCkuCisgICAgU2NvcGVPZmZzZXQgc2NvcGVPZmZzZXQoKSBjb25zdAog
ICAgIHsKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4oYml0cygpID4+IEZsYWdCaXRz
KTsKKyAgICAgICAgcmV0dXJuIHNjb3BlT2Zmc2V0RnJvbUJpdHMoYml0cygpKTsKICAgICB9CiAg
ICAgCiAgICAgQUxXQVlTX0lOTElORSBGYXN0IGdldEZhc3QoKSBjb25zdApAQCAtMjA5LDcgKzIz
MCw3IEBAIHN0cnVjdCBTeW1ib2xUYWJsZUVudHJ5IHsKIAogICAgIHZvaWQgc2V0QXR0cmlidXRl
cyh1bnNpZ25lZCBhdHRyaWJ1dGVzKQogICAgIHsKLSAgICAgICAgcGFjayhnZXRJbmRleCgpLCBh
dHRyaWJ1dGVzICYgUmVhZE9ubHksIGF0dHJpYnV0ZXMgJiBEb250RW51bSk7CisgICAgICAgIHBh
Y2sodmFyT2Zmc2V0KCksIGF0dHJpYnV0ZXMgJiBSZWFkT25seSwgYXR0cmlidXRlcyAmIERvbnRF
bnVtKTsKICAgICB9CiAKICAgICBib29sIGlzUmVhZE9ubHkoKSBjb25zdApAQCAtMjQyLDcgKzI2
Myw5IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIGNvbnN0IGludHB0cl90IFJlYWRPbmx5RmxhZyA9
IDB4MjsKICAgICBzdGF0aWMgY29uc3QgaW50cHRyX3QgRG9udEVudW1GbGFnID0gMHg0OwogICAg
IHN0YXRpYyBjb25zdCBpbnRwdHJfdCBOb3ROdWxsRmxhZyA9IDB4ODsKLSAgICBzdGF0aWMgY29u
c3QgaW50cHRyX3QgRmxhZ0JpdHMgPSA0OworICAgIHN0YXRpYyBjb25zdCBpbnRwdHJfdCBTdGFj
a0ZsYWcgPSAweDEwOworICAgIHN0YXRpYyBjb25zdCBpbnRwdHJfdCBDYXB0dXJlZEFyZ3VtZW50
RmxhZyA9IDB4MjA7CisgICAgc3RhdGljIGNvbnN0IGludHB0cl90IEZsYWdCaXRzID0gNjsKICAg
ICAKICAgICBjbGFzcyBGYXRFbnRyeSB7CiAgICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OwpAQCAtMzA5LDIwICszMzIsMzQgQEAgcHJpdmF0ZToKIAogICAgIEpTX0VYUE9SVF9QUklWQVRF
IHZvaWQgZnJlZUZhdEVudHJ5U2xvdygpOwogCi0gICAgdm9pZCBwYWNrKGludCBpbmRleCwgYm9v
bCByZWFkT25seSwgYm9vbCBkb250RW51bSkKKyAgICB2b2lkIHBhY2soVmFyT2Zmc2V0IG9mZnNl
dCwgYm9vbCByZWFkT25seSwgYm9vbCBkb250RW51bSkKICAgICB7CiAgICAgICAgIEFTU0VSVCgh
aXNGYXQoKSk7CiAgICAgICAgIGludHB0cl90JiBiaXRzUmVmID0gYml0cygpOwotICAgICAgICBi
aXRzUmVmID0gKHN0YXRpY19jYXN0PGludHB0cl90PihpbmRleCkgPDwgRmxhZ0JpdHMpIHwgTm90
TnVsbEZsYWcgfCBTbGltRmxhZzsKKyAgICAgICAgYml0c1JlZiA9CisgICAgICAgICAgICAoc3Rh
dGljX2Nhc3Q8aW50cHRyX3Q+KG9mZnNldC5yYXdPZmZzZXQoKSkgPDwgRmxhZ0JpdHMpIHwgTm90
TnVsbEZsYWcgfCBTbGltRmxhZzsKICAgICAgICAgaWYgKHJlYWRPbmx5KQogICAgICAgICAgICAg
Yml0c1JlZiB8PSBSZWFkT25seUZsYWc7CiAgICAgICAgIGlmIChkb250RW51bSkKICAgICAgICAg
ICAgIGJpdHNSZWYgfD0gRG9udEVudW1GbGFnOworICAgICAgICBzd2l0Y2ggKG9mZnNldC5raW5k
KCkpIHsKKyAgICAgICAgY2FzZSBTY29wZVZhcktpbmQ6CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBTdGFja1ZhcktpbmQ6CisgICAgICAgICAgICBiaXRzUmVmIHw9IFN0YWNrRmxh
ZzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENhcHR1cmVkQXJndW1lbnRLaW5k
OgorICAgICAgICAgICAgYml0c1JlZiB8PSBDYXB0dXJlZEFyZ3VtZW50RmxhZzsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgfQogICAg
IAotICAgIGJvb2wgaXNWYWxpZEluZGV4KGludCBpbmRleCkKKyAgICBzdGF0aWMgYm9vbCBpc1Zh
bGlkVmFyT2Zmc2V0KFZhck9mZnNldCBvZmZzZXQpCiAgICAgewotICAgICAgICByZXR1cm4gKChz
dGF0aWNfY2FzdDxpbnRwdHJfdD4oaW5kZXgpIDw8IEZsYWdCaXRzKSA+PiBGbGFnQml0cykgPT0g
c3RhdGljX2Nhc3Q8aW50cHRyX3Q+KGluZGV4KTsKKyAgICAgICAgcmV0dXJuICgoc3RhdGljX2Nh
c3Q8aW50cHRyX3Q+KG9mZnNldC5yYXdPZmZzZXQoKSkgPDwgRmxhZ0JpdHMpID4+IEZsYWdCaXRz
KSA9PSBzdGF0aWNfY2FzdDxpbnRwdHJfdD4ob2Zmc2V0LnJhd09mZnNldCgpKTsKICAgICB9CiAK
ICAgICBpbnRwdHJfdCBtX2JpdHM7CkBAIC0zNTEsNyArMzg4LDcgQEAgcHVibGljOgogICAgIHN0
YXRpYyBTeW1ib2xUYWJsZSogY3JlYXRlTmFtZVNjb3BlVGFibGUoVk0mIHZtLCBjb25zdCBJZGVu
dGlmaWVyJiBpZGVudCwgdW5zaWduZWQgYXR0cmlidXRlcykKICAgICB7CiAgICAgICAgIFN5bWJv
bFRhYmxlKiByZXN1bHQgPSBjcmVhdGUodm0pOwotICAgICAgICByZXN1bHQtPmFkZChpZGVudC5p
bXBsKCksIFN5bWJvbFRhYmxlRW50cnkoLTEsIGF0dHJpYnV0ZXMpKTsKKyAgICAgICAgcmVzdWx0
LT5hZGQoaWRlbnQuaW1wbCgpLCBTeW1ib2xUYWJsZUVudHJ5KFZhck9mZnNldChTY29wZU9mZnNl
dCgwKSksIGF0dHJpYnV0ZXMpKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAg
CkBAIC00MjMsOCArNDYwLDI5IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHNpemUobG9ja2Vy
KTsKICAgICB9CiAgICAgCisgICAgU2NvcGVPZmZzZXQgbWF4U2NvcGVPZmZzZXQoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbWF4U2NvcGVPZmZzZXQ7CisgICAgfQorICAgIAorICAg
IHVuc2lnbmVkIHNjb3BlU2l6ZSgpIGNvbnN0CisgICAgeworICAgICAgICBTY29wZU9mZnNldCBt
YXhTY29wZU9mZnNldCA9IHRoaXMtPm1heFNjb3BlT2Zmc2V0KCk7CisgICAgICAgIAorICAgICAg
ICAvLyBEbyBzb21lIGNhbGN1bGF0aW9uIHRoYXQgcmVsaWVzIG9uIGludmFsaWQgc2NvcGUgb2Zm
c2V0IHBsdXMgb25lIGJlaW5nIHplcm8uCisgICAgICAgIHVuc2lnbmVkIGZhc3RSZXN1bHQgPSBt
YXhTY29wZU9mZnNldC5vZmZzZXRVbmNoZWNrZWQoKSArIDE7CisgICAgICAgIAorICAgICAgICAv
LyBBc3NlcnQgdGhhdCB0aGlzIHdvcmtzLgorICAgICAgICBBU1NFUlQoZmFzdFJlc3VsdCA9PSAo
IW1heFNjb3BlT2Zmc2V0ID8gMCA6IG1heFNjb3BlT2Zmc2V0Lm9mZnNldCgpICsgMSkpOworICAg
ICAgICAKKyAgICAgICAgcmV0dXJuIGZhc3RSZXN1bHQ7CisgICAgfQorICAgIAogICAgIE1hcDo6
QWRkUmVzdWx0IGFkZChjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiwgU3RyaW5nSW1wbCoga2V5
LCBjb25zdCBTeW1ib2xUYWJsZUVudHJ5JiBlbnRyeSkKICAgICB7CisgICAgICAgIGlmIChlbnRy
eS52YXJPZmZzZXQoKS5pc1Njb3BlKCkKKyAgICAgICAgICAgICYmICghbV9tYXhTY29wZU9mZnNl
dCB8fCBtX21heFNjb3BlT2Zmc2V0IDwgZW50cnkuc2NvcGVPZmZzZXQoKSkpCisgICAgICAgICAg
ICBtX21heFNjb3BlT2Zmc2V0ID0gZW50cnkuc2NvcGVPZmZzZXQoKTsKICAgICAgICAgcmV0dXJu
IG1fbWFwLmFkZChrZXksIGVudHJ5KTsKICAgICB9CiAgICAgCkBAIC00NTYsNiArNTE0LDQ1IEBA
IHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGNvbnRhaW5zKGxvY2tlciwga2V5KTsKICAgICB9CiAg
ICAgCisgICAgLy8gVGhlIHByaW5jaXBsZSBiZWhpbmQgU2NvcGVkQXJndW1lbnRzVGFibGUgbW9k
aWZpY2F0aW9ucyBpcyB0aGF0IHdlIHdpbGwgY3JlYXRlIG9uZSBhbmQKKyAgICAvLyBsZWF2ZSBp
dCB1bmxvY2tlZCAtIHRoZXJlYnkgYWxsb3dpbmcgaW4tcGxhY2UgY2hhbmdlcyAtIHVudGlsIHNv
bWVvbmUgYXNrcyBmb3IgYSBwb2ludGVyIHRvCisgICAgLy8gdGhlIHRhYmxlLiBUaGVuLCB3ZSB3
aWxsIGxvY2sgaXQuIFRoZW4gYm90aCBvdXIgZnV0dXJlIGNoYW5nZXMgYW5kIHRoZWlyIGZ1dHVy
ZSBjaGFuZ2VzCisgICAgLy8gd2lsbCBmaXJzdCBoYXZlIHRvIG1ha2UgYSBjb3B5LiBUaGlzIGRp
c2NpcGxpbmUgbWVhbnMgdGhhdCB1c3VhbGx5IHdoZW4gd2UgY3JlYXRlIGEKKyAgICAvLyBTY29w
ZWRBcmd1bWVudHMgb2JqZWN0LCB3ZSBkb24ndCBoYXZlIHRvIG1ha2UgYSBjb3B5IG9mIHRoZSBT
Y29wZWRBcmd1bWVudHNUYWJsZSAtIGluc3RlYWQKKyAgICAvLyB3ZSBqdXN0IHRha2UgYSByZWZl
cmVuY2UgdG8gb25lIHRoYXQgd2UgYWxyZWFkeSBoYXZlLgorICAgIAorICAgIHVpbnQzMl90IGFy
Z3VtZW50c0xlbmd0aCgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoIW1fYXJndW1lbnRzKQor
ICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBtX2FyZ3VtZW50cy0+bGVuZ3Ro
KCk7CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0QXJndW1lbnRzTGVuZ3RoKFZNJiB2bSwgdWlu
dDMyX3QgbGVuZ3RoKQorICAgIHsKKyAgICAgICAgaWYgKFVOTElLRUxZKCFtX2FyZ3VtZW50cykp
CisgICAgICAgICAgICBtX2FyZ3VtZW50cy5zZXQodm0sIHRoaXMsIFNjb3BlZEFyZ3VtZW50c1Rh
YmxlOjpjcmVhdGUodm0pKTsKKyAgICAgICAgbV9hcmd1bWVudHMuc2V0KHZtLCB0aGlzLCBtX2Fy
Z3VtZW50cy0+c2V0TGVuZ3RoKHZtLCBsZW5ndGgpKTsKKyAgICB9CisgICAgCisgICAgU2NvcGVP
ZmZzZXQgYXJndW1lbnRPZmZzZXQodWludDMyX3QgaSkgY29uc3QKKyAgICB7CisgICAgICAgIEFT
U0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKG1fYXJndW1lbnRzKTsKKyAgICAgICAgcmV0
dXJuIG1fYXJndW1lbnRzLT5nZXQoaSk7CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0QXJndW1l
bnRPZmZzZXQoVk0mIHZtLCB1aW50MzJfdCBpLCBTY29wZU9mZnNldCBvZmZzZXQpCisgICAgewor
ICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihtX2FyZ3VtZW50cyk7Cisg
ICAgICAgIG1fYXJndW1lbnRzLnNldCh2bSwgdGhpcywgbV9hcmd1bWVudHMtPnNldCh2bSwgaSwg
b2Zmc2V0KSk7CisgICAgfQorICAgIAorICAgIFNjb3BlZEFyZ3VtZW50c1RhYmxlKiBhcmd1bWVu
dHMoKSBjb25zdAorICAgIHsKKyAgICAgICAgbV9hcmd1bWVudHMtPmxvY2soKTsKKyAgICAgICAg
cmV0dXJuIG1fYXJndW1lbnRzLmdldCgpOworICAgIH0KKyAgICAKICAgICBHbG9iYWxWYXJpYWJs
ZUlEIHVuaXF1ZUlERm9yVmFyaWFibGUoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYsIFN0cmlu
Z0ltcGwqIGtleSwgVk0mIHZtKTsKICAgICBHbG9iYWxWYXJpYWJsZUlEIHVuaXF1ZUlERm9yUmVn
aXN0ZXIoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYgbG9ja2VyLCBpbnQgcmVnaXN0ZXJJbmRl
eCwgVk0mIHZtKTsKICAgICBSZWZQdHI8VHlwZVNldD4gZ2xvYmFsVHlwZVNldEZvclJlZ2lzdGVy
KGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImIGxvY2tlciwgaW50IHJlZ2lzdGVySW5kZXgsIFZN
JiB2bSk7CkBAIC00NjQsMjggKzU2MSw3IEBAIHB1YmxpYzoKICAgICBib29sIHVzZXNOb25TdHJp
Y3RFdmFsKCkgeyByZXR1cm4gbV91c2VzTm9uU3RyaWN0RXZhbDsgfQogICAgIHZvaWQgc2V0VXNl
c05vblN0cmljdEV2YWwoYm9vbCB1c2VzTm9uU3RyaWN0RXZhbCkgeyBtX3VzZXNOb25TdHJpY3RF
dmFsID0gdXNlc05vblN0cmljdEV2YWw7IH0KIAotICAgIGludCBjYXB0dXJlU3RhcnQoKSBjb25z
dCB7IHJldHVybiBtX2NhcHR1cmVTdGFydDsgfQotICAgIHZvaWQgc2V0Q2FwdHVyZVN0YXJ0KGlu
dCBjYXB0dXJlU3RhcnQpIHsgbV9jYXB0dXJlU3RhcnQgPSBjYXB0dXJlU3RhcnQ7IH0KLQotICAg
IGludCBjYXB0dXJlRW5kKCkgY29uc3QgeyByZXR1cm4gbV9jYXB0dXJlRW5kOyB9Ci0gICAgdm9p
ZCBzZXRDYXB0dXJlRW5kKGludCBjYXB0dXJlRW5kKSB7IG1fY2FwdHVyZUVuZCA9IGNhcHR1cmVF
bmQ7IH0KLQotICAgIGludCBjYXB0dXJlQ291bnQoKSBjb25zdCB7IHJldHVybiAtKG1fY2FwdHVy
ZUVuZCAtIG1fY2FwdHVyZVN0YXJ0KTsgfQotICAgIAotICAgIGJvb2wgaXNDYXB0dXJlZChpbnQg
b3BlcmFuZCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBvcGVyYW5kIDw9IGNhcHR1cmVTdGFydCgp
ICYmIG9wZXJhbmQgPiBjYXB0dXJlRW5kKCk7Ci0gICAgfQotCi0gICAgaW50IHBhcmFtZXRlckNv
dW50KCkgeyByZXR1cm4gbV9wYXJhbWV0ZXJDb3VudEluY2x1ZGluZ1RoaXMgLSAxOyB9Ci0gICAg
aW50IHBhcmFtZXRlckNvdW50SW5jbHVkaW5nVGhpcygpIHsgcmV0dXJuIG1fcGFyYW1ldGVyQ291
bnRJbmNsdWRpbmdUaGlzOyB9Ci0gICAgdm9pZCBzZXRQYXJhbWV0ZXJDb3VudEluY2x1ZGluZ1Ro
aXMoaW50IHBhcmFtZXRlckNvdW50SW5jbHVkaW5nVGhpcykgeyBtX3BhcmFtZXRlckNvdW50SW5j
bHVkaW5nVGhpcyA9IHBhcmFtZXRlckNvdW50SW5jbHVkaW5nVGhpczsgfQotCi0gICAgLy8gMCBp
ZiB3ZSBkb24ndCBjYXB0dXJlIGFueSBhcmd1bWVudHM7IHBhcmFtZXRlckNvdW50KCkgaW4gbGVu
Z3RoIGlmIHdlIGRvLgotICAgIGNvbnN0IFNsb3dBcmd1bWVudCogc2xvd0FyZ3VtZW50cygpIHsg
cmV0dXJuIG1fc2xvd0FyZ3VtZW50cy5nZXQoKTsgfQotICAgIHZvaWQgc2V0U2xvd0FyZ3VtZW50
cyhzdGQ6OnVuaXF1ZV9wdHI8U2xvd0FyZ3VtZW50W10+IHNsb3dBcmd1bWVudHMpIHsgbV9zbG93
QXJndW1lbnRzID0gV1RGOjptb3ZlKHNsb3dBcmd1bWVudHMpOyB9Ci0gICAgCi0gICAgU3ltYm9s
VGFibGUqIGNsb25lQ2FwdHVyZWROYW1lcyhWTSYpOworICAgIFN5bWJvbFRhYmxlKiBjbG9uZVNj
b3BlUGFydChWTSYpOwogCiAgICAgdm9pZCBwcmVwYXJlRm9yVHlwZVByb2ZpbGluZyhjb25zdCBD
b25jdXJyZW50SklUTG9ja2VyJik7CiAKQEAgLTUxMyw2ICs1ODksOCBAQCBwcml2YXRlOgogICAg
IH5TeW1ib2xUYWJsZSgpOwogCiAgICAgTWFwIG1fbWFwOworICAgIFNjb3BlT2Zmc2V0IG1fbWF4
U2NvcGVPZmZzZXQ7CisgICAgCiAgICAgc3RydWN0IFR5cGVQcm9maWxpbmdSYXJlRGF0YSB7CiAg
ICAgICAgIFVuaXF1ZUlETWFwIG1fdW5pcXVlSURNYXA7CiAgICAgICAgIFJlZ2lzdGVyVG9WYXJp
YWJsZU1hcCBtX3JlZ2lzdGVyVG9WYXJpYWJsZU1hcDsKQEAgLTUyMCwxMyArNTk4LDkgQEAgcHJp
dmF0ZToKICAgICB9OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxUeXBlUHJvZmlsaW5nUmFyZURhdGE+
IG1fdHlwZVByb2ZpbGluZ1JhcmVEYXRhOwogCi0gICAgaW50IG1fcGFyYW1ldGVyQ291bnRJbmNs
dWRpbmdUaGlzOwogICAgIGJvb2wgbV91c2VzTm9uU3RyaWN0RXZhbDsKLQotICAgIGludCBtX2Nh
cHR1cmVTdGFydDsKLSAgICBpbnQgbV9jYXB0dXJlRW5kOwotCi0gICAgc3RkOjp1bmlxdWVfcHRy
PFNsb3dBcmd1bWVudFtdPiBtX3Nsb3dBcmd1bWVudHM7CisgICAgCisgICAgV3JpdGVCYXJyaWVy
PFNjb3BlZEFyZ3VtZW50c1RhYmxlPiBtX2FyZ3VtZW50czsKICAgICAKICAgICBzdGQ6OnVuaXF1
ZV9wdHI8V2F0Y2hwb2ludENsZWFudXA+IG1fd2F0Y2hwb2ludENsZWFudXA7CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Zhck9mZnNldC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVmFyT2Zmc2V0LmNwcAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Zhck9mZnNldC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw3NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVmFyT2Zmc2V0Lmgi
CisKK25hbWVzcGFjZSBKU0MgeworCit2b2lkIFZhck9mZnNldDo6ZHVtcChQcmludFN0cmVhbSYg
b3V0KSBjb25zdAoreworICAgIHN3aXRjaCAobV9raW5kKSB7CisgICAgY2FzZSBJbnZhbGlkVmFy
S2luZDoKKyAgICAgICAgb3V0LnByaW50KCJpbnZhbGlkIik7CisgICAgICAgIHJldHVybjsKKyAg
ICBjYXNlIFNjb3BlVmFyS2luZDoKKyAgICAgICAgb3V0LnByaW50KHNjb3BlT2Zmc2V0KCkpOwor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBTdGFja1ZhcktpbmQ6CisgICAgICAgIG91dC5wcmlu
dChzdGFja09mZnNldCgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ2FwdHVyZWRBcmd1
bWVudEtpbmQ6CisgICAgICAgIG91dC5wcmludChjYXB0dXJlZEFyZ3VtZW50T2Zmc2V0KCkpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCituYW1lc3BhY2UgV1RGIHsKKwordXNpbmcgbmFt
ZXNwYWNlIEpTQzsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIFZhcktp
bmQgdmFyS2luZCkKK3sKKyAgICBzd2l0Y2ggKHZhcktpbmQpIHsKKyAgICBjYXNlIEludmFsaWRW
YXJLaW5kOgorICAgICAgICBvdXQucHJpbnQoIkludmFsaWQiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2UgU2NvcGVWYXJLaW5kOgorICAgICAgICBvdXQucHJpbnQoIlNjb3BlIik7CisgICAg
ICAgIHJldHVybjsKKyAgICBjYXNlIFN0YWNrVmFyS2luZDoKKyAgICAgICAgb3V0LnByaW50KCJT
dGFjayIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBDYXB0dXJlZEFyZ3VtZW50S2luZDoK
KyAgICAgICAgb3V0LnByaW50KCJDYXB0dXJlZEFyZ3VtZW50Iik7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgV1RGCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Zhck9mZnNl
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Zhck9mZnNl
dC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVmFyT2Zm
c2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMTQgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBWYXJPZmZzZXRfaAorI2RlZmlu
ZSBWYXJPZmZzZXRfaAorCisjaW5jbHVkZSAiQ2FwdHVyZWRBcmd1bWVudHNPZmZzZXQuaCIKKyNp
bmNsdWRlICJTY29wZU9mZnNldC5oIgorI2luY2x1ZGUgIlZpcnR1YWxSZWdpc3Rlci5oIgorCitu
YW1lc3BhY2UgSlNDIHsKKworZW51bSBWYXJLaW5kIDogdWludDhfdCB7CisgICAgSW52YWxpZFZh
cktpbmQsCisgICAgU2NvcGVWYXJLaW5kLAorICAgIFN0YWNrVmFyS2luZCwKKyAgICBDYXB0dXJl
ZEFyZ3VtZW50S2luZAorfTsKKworY2xhc3MgVmFyT2Zmc2V0IHsKK3B1YmxpYzoKKyAgICBWYXJP
ZmZzZXQoKQorICAgICAgICA6IG1fa2luZChJbnZhbGlkVmFyS2luZCkKKyAgICAgICAgLCBtX29m
ZnNldChVSU5UX01BWCkKKyAgICB7CisgICAgfQorICAgIAorICAgIGV4cGxpY2l0IFZhck9mZnNl
dChWaXJ0dWFsUmVnaXN0ZXIgc3RhY2tPZmZzZXQpCisgICAgeworICAgICAgICBpZiAoIXN0YWNr
T2Zmc2V0LmlzVmFsaWQoKSkgeworICAgICAgICAgICAgbV9raW5kID0gSW52YWxpZFZhcktpbmQ7
CisgICAgICAgICAgICBtX29mZnNldCA9IFVJTlRfTUFYOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgbV9raW5kID0gU3RhY2tWYXJLaW5kOworICAgICAgICAgICAgbV9vZmZzZXQgPSBz
dGFja09mZnNldC5vZmZzZXQoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBleHBsaWNp
dCBWYXJPZmZzZXQoU2NvcGVPZmZzZXQgc2NvcGVPZmZzZXQpCisgICAgeworICAgICAgICBpZiAo
IXNjb3BlT2Zmc2V0KSB7CisgICAgICAgICAgICBtX2tpbmQgPSBJbnZhbGlkVmFyS2luZDsKKyAg
ICAgICAgICAgIG1fb2Zmc2V0ID0gVUlOVF9NQVg7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICBtX2tpbmQgPSBTY29wZVZhcktpbmQ7CisgICAgICAgICAgICBtX29mZnNldCA9IHNjb3Bl
T2Zmc2V0Lm9mZnNldCgpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIGV4cGxpY2l0IFZh
ck9mZnNldChDYXB0dXJlZEFyZ3VtZW50c09mZnNldCBjYXB0dXJlZEFyZ3VtZW50c09mZnNldCkK
KyAgICB7CisgICAgICAgIGlmICghY2FwdHVyZWRBcmd1bWVudHNPZmZzZXQpIHsKKyAgICAgICAg
ICAgIG1fa2luZCA9IEludmFsaWRWYXJLaW5kOworICAgICAgICAgICAgbV9vZmZzZXQgPSBVSU5U
X01BWDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1fa2luZCA9IENhcHR1cmVkQXJn
dW1lbnRLaW5kOworICAgICAgICAgICAgbV9vZmZzZXQgPSBjYXB0dXJlZEFyZ3VtZW50c09mZnNl
dC5vZmZzZXQoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBzdGF0aWMgVmFyT2Zmc2V0
IGFzc2VtYmxlKFZhcktpbmQga2luZCwgdW5zaWduZWQgb2Zmc2V0KQorICAgIHsKKyAgICAgICAg
VmFyT2Zmc2V0IHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IGtpbmQ7CisgICAgICAg
IHJlc3VsdC5tX29mZnNldCA9IG9mZnNldDsKKyAgICAgICAgcmVzdWx0LmNoZWNrU2FuaXR5KCk7
CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNWYWxpZCgp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9raW5kICE9IEludmFsaWRWYXJLaW5kOwor
ICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gIWlzVmFsaWQoKTsKKyAgICB9CisgICAgCisgICAgVmFyS2luZCBraW5kKCkgY29uc3Qg
eyByZXR1cm4gbV9raW5kOyB9CisgICAgCisgICAgYm9vbCBpc1N0YWNrKCkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBtX2tpbmQgPT0gU3RhY2tWYXJLaW5kOworICAgIH0KKyAgICAKKyAg
ICBib29sIGlzU2NvcGUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fa2luZCA9PSBT
Y29wZVZhcktpbmQ7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNDYXB0dXJlZEFyZ3VtZW50KCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2tpbmQgPT0gQ2FwdHVyZWRBcmd1bWVudEtp
bmQ7CisgICAgfQorICAgIAorICAgIFZpcnR1YWxSZWdpc3RlciBzdGFja09mZnNldFVuY2hlY2tl
ZCgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoIWlzU3RhY2soKSkKKyAgICAgICAgICAgIHJl
dHVybiBWaXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICAgICAgcmV0dXJuIFZpcnR1YWxSZWdpc3Rlciht
X29mZnNldCk7CisgICAgfQorICAgIAorICAgIFNjb3BlT2Zmc2V0IHNjb3BlT2Zmc2V0VW5jaGVj
a2VkKCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmICghaXNTY29wZSgpKQorICAgICAgICAgICAg
cmV0dXJuIFNjb3BlT2Zmc2V0KCk7CisgICAgICAgIHJldHVybiBTY29wZU9mZnNldChtX29mZnNl
dCk7CisgICAgfQorICAgIAorICAgIENhcHR1cmVkQXJndW1lbnRzT2Zmc2V0IGNhcHR1cmVkQXJn
dW1lbnRzT2Zmc2V0VW5jaGVja2VkKCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmICghaXNDYXB0
dXJlZEFyZ3VtZW50KCkpCisgICAgICAgICAgICByZXR1cm4gQ2FwdHVyZWRBcmd1bWVudHNPZmZz
ZXQoKTsKKyAgICAgICAgcmV0dXJuIENhcHR1cmVkQXJndW1lbnRzT2Zmc2V0KG1fb2Zmc2V0KTsK
KyAgICB9CisgICAgCisgICAgVmlydHVhbFJlZ2lzdGVyIHN0YWNrT2Zmc2V0KCkgY29uc3QKKyAg
ICB7CisgICAgICAgIEFTU0VSVChpc1N0YWNrKCkpOworICAgICAgICByZXR1cm4gVmlydHVhbFJl
Z2lzdGVyKG1fb2Zmc2V0KTsKKyAgICB9CisgICAgCisgICAgU2NvcGVPZmZzZXQgc2NvcGVPZmZz
ZXQoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzU2NvcGUoKSk7CisgICAgICAgIHJl
dHVybiBTY29wZU9mZnNldChtX29mZnNldCk7CisgICAgfQorICAgIAorICAgIENhcHR1cmVkQXJn
dW1lbnRzT2Zmc2V0IGNhcHR1cmVkQXJndW1lbnRzT2Zmc2V0KCkgY29uc3QKKyAgICB7CisgICAg
ICAgIEFTU0VSVChpc0NhcHR1cmVkQXJndW1lbnQoKSk7CisgICAgICAgIHJldHVybiBDYXB0dXJl
ZEFyZ3VtZW50c09mZnNldChtX29mZnNldCk7CisgICAgfQorICAgIAorICAgIHVuc2lnbmVkIHJh
d09mZnNldCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaXNWYWxpZCgpKTsKKyAgICAg
ICAgcmV0dXJuIG1fb2Zmc2V0OworICAgIH0KKyAgICAKKyAgICB2b2lkIGNoZWNrU2FuaXR5KCkg
Y29uc3QKKyAgICB7CisgICAgICAgIGlmIChBU1NFUlRfRElTQUJMRUQpCisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIAorICAgICAgICBzd2l0Y2ggKG1fa2luZCkgeworICAgICAgICBjYXNl
IEludmFsaWRWYXJLaW5kOgorICAgICAgICAgICAgQVNTRVJUKG1fb2Zmc2V0ID09IFVJTlRfTUFY
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBTY29wZVZhcktpbmQ6CisgICAg
ICAgICAgICBBU1NFUlQoc2NvcGVPZmZzZXQoKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIGNhc2UgU3RhY2tWYXJLaW5kOgorICAgICAgICAgICAgQVNTRVJUKHN0YWNrT2Zmc2V0KCkp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIENhcHR1cmVkQXJndW1lbnRLaW5k
OgorICAgICAgICAgICAgQVNTRVJUKGNhcHR1cmVkQXJndW1lbnRzT2Zmc2V0KCkpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFZhck9mZnNl
dCYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9raW5kID09IG90aGVyLm1f
a2luZAorICAgICAgICAgICAgJiYgbV9vZmZzZXQgPT0gb3RoZXIubV9vZmZzZXQ7CisgICAgfQor
ICAgIAorICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBWYXJPZmZzZXQmIG90aGVyKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgIH0KKyAgICAKKyAg
ICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAKK3ByaXZhdGU6CisgICAgVmFy
S2luZCBtX2tpbmQ7CisgICAgdW5zaWduZWQgbV9vZmZzZXQ7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBKU0MKKworbmFtZXNwYWNlIFdURiB7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVh
bSYsIEpTQzo6VmFyS2luZCk7CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gVmFy
T2Zmc2V0X2gKKwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>247623</attachid>
            <date>2015-02-28 20:10:00 -0800</date>
            <delta_ts>2015-03-01 12:46:59 -0800</delta_ts>
            <desc>getting closer to figuring out the whole arguments thing</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>201604</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2Vt
Ymxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJz
dHJhY3RNYWNyb0Fzc2VtYmxlci5oCShyZXZpc2lvbiAxODA3MjApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMjA1LDYgKzIwNSwxMSBAQCBwdWJsaWM6CiAgICAgICAgIFJlZ2lzdGVySUQgaW5kZXg7
CiAgICAgICAgIFNjYWxlIHNjYWxlOwogICAgICAgICBpbnQzMl90IG9mZnNldDsKKyAgICAgICAg
CisgICAgICAgIEJhc2VJbmRleCB3aXRoT2Zmc2V0KGludDMyX3QgYWRkaXRpb25hbE9mZnNldCkK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEJhc2VJbmRleChiYXNlLCBpbmRleCwgc2Nh
bGUsIG9mZnNldCArIGFkZGl0aW9uYWxPZmZzZXQpOworICAgICAgICB9CiAgICAgfTsKIAogICAg
IC8vIEFic29sdXRlQWRkcmVzczoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9CeVZhbEluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQnlWYWxJbmZvLmgJKHJldmlzaW9uIDE4MDcyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9CeVZhbEluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDEsNiArNDEsOCBAQCBlbnVt
IEpJVEFycmF5TW9kZSB7CiAgICAgSklURG91YmxlLAogICAgIEpJVENvbnRpZ3VvdXMsCiAgICAg
SklUQXJyYXlTdG9yYWdlLAorICAgIEpJVERpcmVjdEFyZ3VtZW50cywKKyAgICBKSVRTY29wZWRB
cmd1bWVudHMsCiAgICAgSklUSW50OEFycmF5LAogICAgIEpJVEludDE2QXJyYXksCiAgICAgSklU
SW50MzJBcnJheSwKQEAgLTY1LDYgKzY3LDE3IEBAIGlubGluZSBib29sIGlzT3B0aW1pemFibGVJ
bmRleGluZ1R5cGUoSW4KICAgICB9CiB9CiAKK2lubGluZSBib29sIGhhc09wdGltaXphYmxlSW5k
ZXhpbmdGb3JKU1R5cGUoSlNUeXBlIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAg
Y2FzZSBEaXJlY3RBcmd1bWVudHNUeXBlOgorICAgIGNhc2UgU2NvcGVkQXJndW1lbnRzVHlwZToK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KK30KKwogaW5saW5lIGJvb2wgaGFzT3B0aW1pemFibGVJbmRleGluZ0ZvckNsYXNz
SW5mbyhjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbykKIHsKICAgICByZXR1cm4gaXNUeXBlZFZp
ZXcoY2xhc3NJbmZvLT50eXBlZEFycmF5U3RvcmFnZVR5cGUpOwpAQCAtNzMsNiArODYsNyBAQCBp
bmxpbmUgYm9vbCBoYXNPcHRpbWl6YWJsZUluZGV4aW5nRm9yQ2xhCiBpbmxpbmUgYm9vbCBoYXNP
cHRpbWl6YWJsZUluZGV4aW5nKFN0cnVjdHVyZSogc3RydWN0dXJlKQogewogICAgIHJldHVybiBp
c09wdGltaXphYmxlSW5kZXhpbmdUeXBlKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpCisgICAg
ICAgIHx8IGhhc09wdGltaXphYmxlSW5kZXhpbmdGb3JKU1R5cGUoc3RydWN0dXJlLT50eXBlSW5m
bygpLnR5cGUoKSkKICAgICAgICAgfHwgaGFzT3B0aW1pemFibGVJbmRleGluZ0ZvckNsYXNzSW5m
byhzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpKTsKIH0KIApAQCAtOTMsNiArMTA3LDE5IEBAIGlubGlu
ZSBKSVRBcnJheU1vZGUgaml0QXJyYXlNb2RlRm9ySW5kZXgKICAgICB9CiB9CiAKK2lubGluZSBK
SVRBcnJheU1vZGUgaml0QXJyYXlNb2RlRm9ySlNUeXBlKEpTVHlwZSB0eXBlKQoreworICAgIHN3
aXRjaCAodHlwZSkgeworICAgIGNhc2UgRGlyZWN0QXJndW1lbnRzVHlwZToKKyAgICAgICAgcmV0
dXJuIEpJVERpcmVjdEFyZ3VtZW50czsKKyAgICBjYXNlIFNjb3BlZEFyZ3VtZW50c1R5cGU6Cisg
ICAgICAgIHJldHVybiBKSVRTY29wZWRBcmd1bWVudHM7CisgICAgZGVmYXVsdDoKKyAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIEpJVENvbnRpZ3Vv
dXM7CisgICAgfQorfQorCiBpbmxpbmUgSklUQXJyYXlNb2RlIGppdEFycmF5TW9kZUZvckNsYXNz
SW5mbyhjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbykKIHsKICAgICBzd2l0Y2ggKGNsYXNzSW5m
by0+dHlwZWRBcnJheVN0b3JhZ2VUeXBlKSB7CkBAIC0xMjAsNiArMTQ3LDE5IEBAIGlubGluZSBK
SVRBcnJheU1vZGUgaml0QXJyYXlNb2RlRm9yQ2xhc3MKICAgICB9CiB9CiAKK2lubGluZSBib29s
IGppdEFycmF5TW9kZVBlcm1pdHNQdXQoSklUQXJyYXlNb2RlIG1vZGUpCit7CisgICAgc3dpdGNo
IChtb2RlKSB7CisgICAgY2FzZSBKSVREaXJlY3RBcmd1bWVudHM6CisgICAgY2FzZSBKSVRTY29w
ZWRBcmd1bWVudHM6CisgICAgICAgIC8vIFdlIGNvdWxkIHN1cHBvcnQgcHV0X2J5X3ZhbCBvbiB0
aGVzZSBhdCBzb21lIHBvaW50LCBidXQgaXQncyBqdXN0IG5vdCB0aGF0IHByb2ZpdGFibGUKKyAg
ICAgICAgLy8gYXQgdGhlIG1vbWVudC4KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGRlZmF1
bHQ6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KK30KKwogaW5saW5lIFR5cGVkQXJyYXlU
eXBlIHR5cGVkQXJyYXlUeXBlRm9ySklUQXJyYXlNb2RlKEpJVEFycmF5TW9kZSBtb2RlKQogewog
ICAgIHN3aXRjaCAobW9kZSkgewpAQCAtMTUyLDYgKzE5Miw5IEBAIGlubGluZSBKSVRBcnJheU1v
ZGUgaml0QXJyYXlNb2RlRm9yU3RydWMKICAgICBpZiAoaXNPcHRpbWl6YWJsZUluZGV4aW5nVHlw
ZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSkKICAgICAgICAgcmV0dXJuIGppdEFycmF5TW9k
ZUZvckluZGV4aW5nVHlwZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKTsKICAgICAKKyAgICBp
ZiAoaGFzT3B0aW1pemFibGVJbmRleGluZ0ZvckpTVHlwZShzdHJ1Y3R1cmUtPnR5cGVJbmZvKCku
dHlwZSgpKSkKKyAgICAgICAgcmV0dXJuIGppdEFycmF5TW9kZUZvckpTVHlwZShzdHJ1Y3R1cmUt
PnR5cGVJbmZvKCkudHlwZSgpKTsKKyAgICAKICAgICBBU1NFUlQoaGFzT3B0aW1pemFibGVJbmRl
eGluZ0ZvckNsYXNzSW5mbyhzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpKSk7CiAgICAgcmV0dXJuIGpp
dEFycmF5TW9kZUZvckNsYXNzSW5mbyhzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpKTsKIH0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QuanNvbgo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0Lmpzb24J
KHJldmlzaW9uIDE4MDcyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRl
Y29kZUxpc3QuanNvbgkod29ya2luZyBjb3B5KQpAQCAtOCw3ICs4LDkgQEAKICAgICAgICAgICAg
IHsgIm5hbWUiIDogIm9wX2dldF9zY29wZSIsICJsZW5ndGgiIDogMiB9LAogICAgICAgICAgICAg
eyAibmFtZSIgOiAib3BfdG91Y2hfZW50cnkiLCAibGVuZ3RoIiA6IDEgfSwKICAgICAgICAgICAg
IHsgIm5hbWUiIDogIm9wX2luaXRfbGF6eV9yZWciLCAibGVuZ3RoIiA6IDIgfSwKLSAgICAgICAg
ICAgIHsgIm5hbWUiIDogIm9wX2NyZWF0ZV9hcmd1bWVudHMiLCAibGVuZ3RoIiA6IDMgfSwKKyAg
ICAgICAgICAgIHsgIm5hbWUiIDogIm9wX2NyZWF0ZV9kaXJlY3RfYXJndW1lbnRzIiwgImxlbmd0
aCIgOiAyIH0sIC8vIGp1c3QgdGFrZXMgdGhlIGRzdCByZWdpc3RlcgorICAgICAgICAgICAgeyAi
bmFtZSIgOiAib3BfY3JlYXRlX3Njb3BlZF9hcmd1bWVudHMiLCAibGVuZ3RoIiA6IDMgfSwgLy8g
ZHN0LCBzY29wZVJlZ2lzdGVyLCBpbXBsaWNpdGx5IHVzZXMgdGhlIFNjb3BlZEFyZ3VtZW50c1Rh
YmxlIGluIHRoZSBTeW1ib2xUYWJsZSBvZiB0aGUgQ29kZUJsb2NrCisgICAgICAgICAgICB7ICJu
YW1lIiA6ICJvcF9jcmVhdGVfb3V0X29mX2JhbmRfYXJndW1lbnRzIiwgImxlbmd0aCIgOiAyIH0s
CiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9jcmVhdGVfdGhpcyIsICJsZW5ndGgiIDogNCB9
LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfZ2V0X2NhbGxlZSIsICJsZW5ndGgiIDogMyB9
LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfdG9fdGhpcyIsICJsZW5ndGgiIDogNCB9LApA
QCAtNjEsNyArNjMsNiBAQAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfZ2V0X2J5X2lkIiwg
Imxlbmd0aCIgOiA5ICB9LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfZ2V0X2J5X2lkX291
dF9vZl9saW5lIiwgImxlbmd0aCIgOiA5ICB9LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3Bf
Z2V0X2FycmF5X2xlbmd0aCIsICJsZW5ndGgiIDogOSB9LAotICAgICAgICAgICAgeyAibmFtZSIg
OiAib3BfZ2V0X2FyZ3VtZW50c19sZW5ndGgiLCAibGVuZ3RoIiA6IDQgfSwKICAgICAgICAgICAg
IHsgIm5hbWUiIDogIm9wX3B1dF9ieV9pZCIsICJsZW5ndGgiIDogOSB9LAogICAgICAgICAgICAg
eyAibmFtZSIgOiAib3BfcHV0X2J5X2lkX291dF9vZl9saW5lIiwgImxlbmd0aCIgOiA5IH0sCiAg
ICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9wdXRfYnlfaWRfdHJhbnNpdGlvbl9kaXJlY3QiLCAi
bGVuZ3RoIiA6IDkgfSwKQEAgLTcwLDcgKzcxLDYgQEAKICAgICAgICAgICAgIHsgIm5hbWUiIDog
Im9wX3B1dF9ieV9pZF90cmFuc2l0aW9uX25vcm1hbF9vdXRfb2ZfbGluZSIsICJsZW5ndGgiIDog
OSB9LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfZGVsX2J5X2lkIiwgImxlbmd0aCIgOiA0
IH0sCiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9nZXRfYnlfdmFsIiwgImxlbmd0aCIgOiA2
IH0sCi0gICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9nZXRfYXJndW1lbnRfYnlfdmFsIiwgImxl
bmd0aCIgOiA3IH0sCiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9wdXRfYnlfdmFsIiwgImxl
bmd0aCIgOiA1IH0sCiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9wdXRfYnlfdmFsX2RpcmVj
dCIsICJsZW5ndGgiIDogNSB9LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfZGVsX2J5X3Zh
bCIsICJsZW5ndGgiIDogNCB9LApAQCAtOTksNyArOTksNiBAQAogICAgICAgICAgICAgeyAibmFt
ZSIgOiAib3BfY2FsbCIsICJsZW5ndGgiIDogOSB9LAogICAgICAgICAgICAgeyAibmFtZSIgOiAi
b3BfY2FsbF9ldmFsIiwgImxlbmd0aCIgOiA5IH0sCiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJv
cF9jYWxsX3ZhcmFyZ3MiLCAibGVuZ3RoIiA6IDkgfSwKLSAgICAgICAgICAgIHsgIm5hbWUiIDog
Im9wX3RlYXJfb2ZmX2FyZ3VtZW50cyIsICJsZW5ndGgiIDogMyB9LAogICAgICAgICAgICAgeyAi
bmFtZSIgOiAib3BfcmV0IiwgImxlbmd0aCIgOiAyIH0sCiAgICAgICAgICAgICB7ICJuYW1lIiA6
ICJvcF9jb25zdHJ1Y3QiLCAibGVuZ3RoIiA6IDkgfSwKICAgICAgICAgICAgIHsgIm5hbWUiIDog
Im9wX2NvbnN0cnVjdF92YXJhcmdzIiwgImxlbmd0aCIgOiA5IH0sCkBAIC0xMDgsNiArMTA3LDgg
QEAKICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX3Jlc29sdmVfc2NvcGUiLCAibGVuZ3RoIiA6
IDcgfSwKICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX2dldF9mcm9tX3Njb3BlIiwgImxlbmd0
aCIgOiA4IH0sCiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9wdXRfdG9fc2NvcGUiLCAibGVu
Z3RoIiA6IDcgfSwKKyAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX2dldF9mcm9tX2FyZ3VtZW50
cyIsICJsZW5ndGgiIDogNSB9LCAvLyBkc3QsIGFyZ3VtZW50cywgaW5kZXgsIHByb2ZpbGUKKyAg
ICAgICAgICAgIHsgIm5hbWUiIDogIm9wX3B1dF90b19hcmd1bWVudHMiLCAibGVuZ3RoIiA6IDQg
fSwgLy8gYXJndW1lbnRzLCBpbmRleCwgc3JjCiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9w
dXNoX3dpdGhfc2NvcGUiLCAibGVuZ3RoIiA6IDMgfSwKICAgICAgICAgICAgIHsgIm5hbWUiIDog
Im9wX3BvcF9zY29wZSIsICJsZW5ndGgiIDogMiB9LAogICAgICAgICAgICAgeyAibmFtZSIgOiAi
b3BfcHVzaF9uYW1lX3Njb3BlIiwgImxlbmd0aCIgOiA1IH0sCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMTgwNzIwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE3MTcsOCArMTcxNyw4IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFNjcmlwdEV4ZWN1
dGFibGUqIG8KICAgICAgICAgICAgIHN5bWJvbFRhYmxlLT5wcmVwYXJlRm9yVHlwZVByb2ZpbGlu
Zyhsb2NrZXIpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKGNvZGVUeXBlKCkgPT0gRnVuY3Rp
b25Db2RlICYmIHN5bWJvbFRhYmxlLT5jYXB0dXJlQ291bnQoKSkgewotICAgICAgICAgICAgbV9z
eW1ib2xUYWJsZS5zZXQoKm1fdm0sIG1fb3duZXJFeGVjdXRhYmxlLmdldCgpLCBzeW1ib2xUYWJs
ZS0+Y2xvbmVDYXB0dXJlZE5hbWVzKCptX3ZtKSk7CisgICAgICAgIGlmIChjb2RlVHlwZSgpID09
IEZ1bmN0aW9uQ29kZSAmJiBzeW1ib2xUYWJsZS0+c2NvcGVTaXplKSkgeworICAgICAgICAgICAg
bV9zeW1ib2xUYWJsZS5zZXQoKm1fdm0sIG1fb3duZXJFeGVjdXRhYmxlLmdldCgpLCBzeW1ib2xU
YWJsZS0+Y2xvbmVTY29wZVBhcnQoKm1fdm0pKTsKICAgICAgICAgICAgIGRpZENsb25lU3ltYm9s
VGFibGUgPSB0cnVlOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIG1fc3ltYm9sVGFibGUu
c2V0KCptX3ZtLCBtX293bmVyRXhlY3V0YWJsZS5nZXQoKSwgc3ltYm9sVGFibGUpOwpAQCAtMTk2
MiwxMyArMTk2MiwxNCBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBv
CiAKICAgICAgICAgICAgIC8vIGdldF9mcm9tX3Njb3BlIGRzdCwgc2NvcGUsIGlkLCBSZXNvbHZl
TW9kZUFuZFR5cGUsIFN0cnVjdHVyZSwgT3BlcmFuZAogCi0gICAgICAgICAgICBjb25zdCBJZGVu
dGlmaWVyJiBpZGVudCA9IGlkZW50aWZpZXIocGNbM10udS5vcGVyYW5kKTsKICAgICAgICAgICAg
IFJlc29sdmVNb2RlQW5kVHlwZSBtb2RlQW5kVHlwZSA9IFJlc29sdmVNb2RlQW5kVHlwZShwY1s0
XS51Lm9wZXJhbmQpOwogICAgICAgICAgICAgaWYgKG1vZGVBbmRUeXBlLnR5cGUoKSA9PSBMb2Nh
bENsb3N1cmVWYXIpIHsKICAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIDRdID0gUmVz
b2x2ZU1vZGVBbmRUeXBlKG1vZGVBbmRUeXBlLm1vZGUoKSwgQ2xvc3VyZVZhcikub3BlcmFuZCgp
OwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogCisgICAgICAgICAgICBj
b25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGlkZW50aWZpZXIocGNbM10udS5vcGVyYW5kKTsKKwog
ICAgICAgICAgICAgUmVzb2x2ZU9wIG9wID0gSlNTY29wZTo6YWJzdHJhY3RSZXNvbHZlKG1fZ2xv
YmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIG5lZWRzQWN0aXZhdGlvbigpLCBzY29wZSwgaWRlbnQs
IEdldCwgbW9kZUFuZFR5cGUudHlwZSgpKTsKIAogICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kg
KyA0XS51Lm9wZXJhbmQgPSBSZXNvbHZlTW9kZUFuZFR5cGUobW9kZUFuZFR5cGUubW9kZSgpLCBv
cC50eXBlKS5vcGVyYW5kKCk7CkBAIC0xOTgzLDE4ICsxOTg0LDEzIEBAIENvZGVCbG9jazo6Q29k
ZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUqIG8KIAogICAgICAgICBjYXNlIG9wX3B1dF90b19zY29w
ZTogewogICAgICAgICAgICAgLy8gcHV0X3RvX3Njb3BlIHNjb3BlLCBpZCwgdmFsdWUsIFJlc29s
dmVNb2RlQW5kVHlwZSwgU3RydWN0dXJlLCBPcGVyYW5kCi0gICAgICAgICAgICBjb25zdCBJZGVu
dGlmaWVyJiBpZGVudCA9IGlkZW50aWZpZXIocGNbMl0udS5vcGVyYW5kKTsKLQogICAgICAgICAg
ICAgUmVzb2x2ZU1vZGVBbmRUeXBlIG1vZGVBbmRUeXBlID0gUmVzb2x2ZU1vZGVBbmRUeXBlKHBj
WzRdLnUub3BlcmFuZCk7CiAgICAgICAgICAgICBpZiAobW9kZUFuZFR5cGUudHlwZSgpID09IExv
Y2FsQ2xvc3VyZVZhcikgewotICAgICAgICAgICAgICAgIGJvb2wgaXNXYXRjaGFibGVWYXJpYWJs
ZSA9IHBjWzVdLnUub3BlcmFuZDsKLSAgICAgICAgICAgICAgICBpZiAoIWlzV2F0Y2hhYmxlVmFy
aWFibGUpIHsKLSAgICAgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyA1XS51LndhdGNo
cG9pbnRTZXQgPSBudWxscHRyOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgU3RyaW5nSW1wbCogdWlkID0gaWRlbnQuaW1wbCgp
OwotICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGRpZENsb25lU3ltYm9sVGFibGUpOwot
ICAgICAgICAgICAgICAgIGlmIChpZGVudCAhPSBtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5hcmd1bWVu
dHMpIHsKKyAgICAgICAgICAgICAgICAvLyBPbmx5IGRvIHdhdGNoaW5nIGlmIHRoZSBwcm9wZXJ0
eSB3ZSdyZSBwdXR0aW5nIHRvIGlzIG5vdCBhbm9ueW1vdXMuCisgICAgICAgICAgICAgICAgaWYg
KHN0YXRpY19jYXN0PHVuc2lnbmVkPihwY1syXS51Lm9wZXJhbmQpICE9IFVJTlRfTUFYKSB7Cisg
ICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGRpZENsb25lU3ltYm9sVGFibGUpOwor
ICAgICAgICAgICAgICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGlkZW50aWZpZXIo
cGNbMl0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgICAgICAgICAgU3RyaW5nSW1wbCogdWlkID0g
aWRlbnQuaW1wbCgpOwogICAgICAgICAgICAgICAgICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxv
Y2tlcihtX3N5bWJvbFRhYmxlLT5tX2xvY2spOwogICAgICAgICAgICAgICAgICAgICBTeW1ib2xU
YWJsZTo6TWFwOjppdGVyYXRvciBpdGVyID0gbV9zeW1ib2xUYWJsZS0+ZmluZChsb2NrZXIsIHVp
ZCk7CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChpdGVyICE9IG1fc3ltYm9sVGFibGUtPmVu
ZChsb2NrZXIpKTsKQEAgLTIwMDUsNiArMjAwMSw4IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFNj
cmlwdEV4ZWN1dGFibGUqIG8KICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0K
IAorICAgICAgICAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBpZGVudGlmaWVyKHBjWzJd
LnUub3BlcmFuZCk7CisKICAgICAgICAgICAgIFJlc29sdmVPcCBvcCA9IEpTU2NvcGU6OmFic3Ry
YWN0UmVzb2x2ZShtX2dsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLCBuZWVkc0FjdGl2YXRpb24o
KSwgc2NvcGUsIGlkZW50LCBQdXQsIG1vZGVBbmRUeXBlLnR5cGUoKSk7CiAKICAgICAgICAgICAg
IGluc3RydWN0aW9uc1tpICsgNF0udS5vcGVyYW5kID0gUmVzb2x2ZU1vZGVBbmRUeXBlKG1vZGVB
bmRUeXBlLm1vZGUoKSwgb3AudHlwZSkub3BlcmFuZCgpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuY3BwCShyZXZpc2lvbiAxODA3
MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yOSwxMCArMjksMTEgQEAKICNpbmNsdWRlICJjb25maWcuaCIK
ICNpbmNsdWRlICJTcGVjdWxhdGVkVHlwZS5oIgogCi0jaW5jbHVkZSAiQXJndW1lbnRzLmgiCisj
aW5jbHVkZSAiRGlyZWN0QXJndW1lbnRzLmgiCiAjaW5jbHVkZSAiSlNBcnJheS5oIgogI2luY2x1
ZGUgIkpTRnVuY3Rpb24uaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiU2Nv
cGVkQXJndW1lbnRzLmgiCiAjaW5jbHVkZSAiU3RyaW5nT2JqZWN0LmgiCiAjaW5jbHVkZSAiVmFs
dWVQcm9maWxlLmgiCiAjaW5jbHVkZSA8d3RmL0JvdW5kc0NoZWNrZWRQb2ludGVyLmg+CkBAIC0x
MjcsOCArMTI4LDEzIEBAIHZvaWQgZHVtcFNwZWN1bGF0aW9uKFByaW50U3RyZWFtJiBvdXQsIFMK
ICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBpc1RvcCA9IGZhbHNlOwogICAgIAot
ICAgICAgICAgICAgaWYgKHZhbHVlICYgU3BlY0FyZ3VtZW50cykKLSAgICAgICAgICAgICAgICBt
eU91dC5wcmludCgiQXJndW1lbnRzIik7CisgICAgICAgICAgICBpZiAodmFsdWUgJiBTcGVjRGly
ZWN0QXJndW1lbnRzKQorICAgICAgICAgICAgICAgIG15T3V0LnByaW50KCJEaXJlY3Rhcmd1bWVu
dHMiKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBpc1RvcCA9IGZhbHNlOwor
ICAgIAorICAgICAgICAgICAgaWYgKHZhbHVlICYgU3BlY1Njb3BlZEFyZ3VtZW50cykKKyAgICAg
ICAgICAgICAgICBteU91dC5wcmludCgiU2NvcGVkYXJndW1lbnRzIik7CiAgICAgICAgICAgICBl
bHNlCiAgICAgICAgICAgICAgICAgaXNUb3AgPSBmYWxzZTsKICAgICAKQEAgLTIzMiw4ICsyMzgs
MTAgQEAgc3RhdGljIGNvbnN0IGNoYXIqIHNwZWN1bGF0aW9uVG9BYmJyZXZpYQogICAgICAgICBy
ZXR1cm4gIjxGbG9hdDMyYXJyYXk+IjsKICAgICBpZiAoaXNGbG9hdDY0QXJyYXlTcGVjdWxhdGlv
bihwcmVkaWN0aW9uKSkKICAgICAgICAgcmV0dXJuICI8RmxvYXQ2NGFycmF5PiI7Ci0gICAgaWYg
KGlzQXJndW1lbnRzU3BlY3VsYXRpb24ocHJlZGljdGlvbikpCi0gICAgICAgIHJldHVybiAiPEFy
Z3VtZW50cz4iOworICAgIGlmIChpc0RpcmVjdEFyZ3VtZW50c1NwZWN1bGF0aW9uKHByZWRpY3Rp
b24pKQorICAgICAgICByZXR1cm4gIjxEaXJlY3RBcmd1bWVudHM+IjsKKyAgICBpZiAoaXNTY29w
ZWRBcmd1bWVudHNTcGVjdWxhdGlvbihwcmVkaWN0aW9uKSkKKyAgICAgICAgcmV0dXJuICI8U2Nv
cGVkQXJndW1lbnRzPiI7CiAgICAgaWYgKGlzU3RyaW5nT2JqZWN0U3BlY3VsYXRpb24ocHJlZGlj
dGlvbikpCiAgICAgICAgIHJldHVybiAiPFN0cmluZ09iamVjdD4iOwogICAgIGlmIChpc1N0cmlu
Z09yU3RyaW5nT2JqZWN0U3BlY3VsYXRpb24ocHJlZGljdGlvbikpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuaAkocmV2aXNpb24gMTgw
NzIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTUyLDggKzUyLDkgQEAgc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRU
eXBlIFNwZWNVaW50MzJBcgogc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNGbG9hdDMy
QXJyYXkgICAgICAgPSAweDAwMDAwNDAwOyAvLyBJdCdzIGRlZmluaXRlbHkgYW4gVWludDE2QXJy
YXkgb3Igb25lIG9mIGl0cyBzdWJjbGFzc2VzLgogc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBl
IFNwZWNGbG9hdDY0QXJyYXkgICAgICAgPSAweDAwMDAwODAwOyAvLyBJdCdzIGRlZmluaXRlbHkg
YW4gVWludDE2QXJyYXkgb3Igb25lIG9mIGl0cyBzdWJjbGFzc2VzLgogc3RhdGljIGNvbnN0IFNw
ZWN1bGF0ZWRUeXBlIFNwZWNUeXBlZEFycmF5VmlldyAgICAgPSBTcGVjSW50OEFycmF5IHwgU3Bl
Y0ludDE2QXJyYXkgfCBTcGVjSW50MzJBcnJheSB8IFNwZWNVaW50OEFycmF5IHwgU3BlY1VpbnQ4
Q2xhbXBlZEFycmF5IHwgU3BlY1VpbnQxNkFycmF5IHwgU3BlY1VpbnQzMkFycmF5IHwgU3BlY0Zs
b2F0MzJBcnJheSB8IFNwZWNGbG9hdDY0QXJyYXk7Ci1zdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5
cGUgU3BlY0FyZ3VtZW50cyAgICAgICAgICA9IDB4MDAwMDEwMDA7IC8vIEl0J3MgZGVmaW5pdGVs
eSBhbiBBcmd1bWVudHMgb2JqZWN0Lgotc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNT
dHJpbmdPYmplY3QgICAgICAgPSAweDAwMDAyMDAwOyAvLyBJdCdzIGRlZmluaXRlbHkgYSBTdHJp
bmdPYmplY3QuCitzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0RpcmVjdEFyZ3VtZW50
cyAgICA9IDB4MDAwMDEwMDA7IC8vIEl0J3MgZGVmaW5pdGVseSBhIERpcmVjdEFyZ3VtZW50cyBv
YmplY3QuCitzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY1Njb3BlZEFyZ3VtZW50cyAg
ICA9IDB4MDAwMDIwMDA7IC8vIEl0J3MgZGVmaW5pdGVseSBhIFNjb3BlZEFyZ3VtZW50cyBvYmpl
Y3QuCitzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY1N0cmluZ09iamVjdCAgICAgICA9
IDB4MDAwMDQwMDA7IC8vIEl0J3MgZGVmaW5pdGVseSBhIFN0cmluZ09iamVjdC4KIHN0YXRpYyBj
b25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjT2JqZWN0T3RoZXIgICAgICAgID0gMHgwMDAwODAwMDsg
Ly8gSXQncyBkZWZpbml0ZWx5IGFuIG9iamVjdCBidXQgbm90IEpTRmluYWxPYmplY3QsIEpTQXJy
YXksIG9yIEpTRnVuY3Rpb24uCiBzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY09iamVj
dCAgICAgICAgICAgICA9IDB4MDAwMGZmZmY7IC8vIEJpdG1hc2sgdXNlZCBmb3IgdGVzdGluZyBm
b3IgYW55IGtpbmQgb2Ygb2JqZWN0IHByZWRpY3Rpb24uCiBzdGF0aWMgY29uc3QgU3BlY3VsYXRl
ZFR5cGUgU3BlY1N0cmluZ0lkZW50ICAgICAgICA9IDB4MDAwMTAwMDA7IC8vIEl0J3MgZGVmaW5p
dGVseSBhIEpTU3RyaW5nLCBhbmQgaXQncyBhbiBpZGVudGlmaWVyLgpAQCAtMTkzLDkgKzE5NCwx
NCBAQCBpbmxpbmUgYm9vbCBpc0Zsb2F0NjRBcnJheVNwZWN1bGF0aW9uKFNwCiAgICAgcmV0dXJu
IHZhbHVlID09IFNwZWNGbG9hdDY0QXJyYXk7CiB9CiAKLWlubGluZSBib29sIGlzQXJndW1lbnRz
U3BlY3VsYXRpb24oU3BlY3VsYXRlZFR5cGUgdmFsdWUpCitpbmxpbmUgYm9vbCBpc0RpcmVjdEFy
Z3VtZW50c1NwZWN1bGF0aW9uKFNwZWN1bGF0ZWRUeXBlIHZhbHVlKQogewotICAgIHJldHVybiAh
IXZhbHVlICYmICh2YWx1ZSAmIFNwZWNBcmd1bWVudHMpID09IHZhbHVlOworICAgIHJldHVybiB2
YWx1ZSA9PSBTcGVjRGlyZWN0QXJndW1lbnRzOworfQorCitpbmxpbmUgYm9vbCBpc1Njb3BlZEFy
Z3VtZW50c1NwZWN1bGF0aW9uKFNwZWN1bGF0ZWRUeXBlIHZhbHVlKQoreworICAgIHJldHVybiB2
YWx1ZSA9PSBTcGVjU2NvcGVkQXJndW1lbnRzOwogfQogCiBpbmxpbmUgYm9vbCBpc0FjdGlvbmFi
bGVJbnRNdXRhYmxlQXJyYXlTcGVjdWxhdGlvbihTcGVjdWxhdGVkVHlwZSB2YWx1ZSkKQEAgLTIy
NCwxMyArMjMwLDE0IEBAIGlubGluZSBib29sIGlzQWN0aW9uYWJsZVR5cGVkTXV0YWJsZUFycmEK
IGlubGluZSBib29sIGlzQWN0aW9uYWJsZU11dGFibGVBcnJheVNwZWN1bGF0aW9uKFNwZWN1bGF0
ZWRUeXBlIHZhbHVlKQogewogICAgIHJldHVybiBpc0FycmF5U3BlY3VsYXRpb24odmFsdWUpCi0g
ICAgICAgIHx8IGlzQXJndW1lbnRzU3BlY3VsYXRpb24odmFsdWUpCiAgICAgICAgIHx8IGlzQWN0
aW9uYWJsZVR5cGVkTXV0YWJsZUFycmF5U3BlY3VsYXRpb24odmFsdWUpOwogfQogCiBpbmxpbmUg
Ym9vbCBpc0FjdGlvbmFibGVBcnJheVNwZWN1bGF0aW9uKFNwZWN1bGF0ZWRUeXBlIHZhbHVlKQog
ewogICAgIHJldHVybiBpc1N0cmluZ1NwZWN1bGF0aW9uKHZhbHVlKQorICAgICAgICB8fCBpc0Rp
cmVjdEFyZ3VtZW50c1NwZWN1bGF0aW9uKHZhbHVlKQorICAgICAgICB8fCBpc1Njb3BlZEFyZ3Vt
ZW50c1NwZWN1bGF0aW9uKHZhbHVlKQogICAgICAgICB8fCBpc0FjdGlvbmFibGVNdXRhYmxlQXJy
YXlTcGVjdWxhdGlvbih2YWx1ZSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCShyZXZpc2lv
biAxODA3MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2Rl
R2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE2LDIxICsxMTYsMjYgQEAgUGFyc2Vy
RXJyb3IgQnl0ZWNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlKAogICAgIG1fY29kZUJsb2NrLT5zaHJp
bmtUb0ZpdCgpOwogCiAgICAgaWYgKG1fY29kZUJsb2NrLT5zeW1ib2xUYWJsZSgpICYmICFtX2Nv
ZGVCbG9jay0+dm0oKS0+dHlwZVByb2ZpbGVyKCkpCi0gICAgICAgIG1fY29kZUJsb2NrLT5zZXRT
eW1ib2xUYWJsZShtX2NvZGVCbG9jay0+c3ltYm9sVGFibGUoKS0+Y2xvbmVDYXB0dXJlZE5hbWVz
KCptX2NvZGVCbG9jay0+dm0oKSkpOworICAgICAgICBtX2NvZGVCbG9jay0+c2V0U3ltYm9sVGFi
bGUobV9jb2RlQmxvY2stPnN5bWJvbFRhYmxlKCktPmNsb25lSWdub3JpbmdTdGFjaygqbV9jb2Rl
QmxvY2stPnZtKCkpKTsKIAogICAgIGlmIChtX2V4cHJlc3Npb25Ub29EZWVwKQogICAgICAgICBy
ZXR1cm4gUGFyc2VyRXJyb3IoUGFyc2VyRXJyb3I6Ok91dE9mTWVtb3J5KTsKICAgICByZXR1cm4g
UGFyc2VyRXJyb3IoUGFyc2VyRXJyb3I6OkVycm9yTm9uZSk7CiB9CiAKLVJlZ2lzdGVySUQqIEJ5
dGVjb2RlR2VuZXJhdG9yOjphZGRWYXIoCi0gICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIENv
bnN0YW50TW9kZSBjb25zdGFudE1vZGUsIFdhdGNoTW9kZSB3YXRjaE1vZGUpCitSZWdpc3RlcklE
KiBCeXRlY29kZUdlbmVyYXRvcjo6YWRkVmFyKGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBDb25z
dGFudE1vZGUgY29uc3RhbnRNb2RlKQogewogICAgIEFTU0VSVChzdGF0aWNfY2FzdDxzaXplX3Q+
KG1fY29kZUJsb2NrLT5tX251bVZhcnMpID09IG1fY2FsbGVlUmVnaXN0ZXJzLnNpemUoKSk7CiAg
ICAgCiAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIoc3ltYm9sVGFibGUoKS5tX2xvY2sp
OwotICAgIGludCBpbmRleCA9IHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKG1fY2FsbGVlUmVnaXN0
ZXJzLnNpemUoKSkub2Zmc2V0KCk7Ci0gICAgU3ltYm9sVGFibGVFbnRyeSBuZXdFbnRyeShpbmRl
eCwgY29uc3RhbnRNb2RlID09IElzQ29uc3RhbnQgPyBSZWFkT25seSA6IDApOworICAgIFZhck9m
ZnNldCB2YXJPZmZzZXQ7CisgICAgaWYgKHZhcktpbmQgPT0gSGVhcFZhcktpbmQpCisgICAgICAg
IHZhck9mZnNldCA9IFZhck9mZnNldChIZWFwT2Zmc2V0KG1fbnVtQ2FwdHVyZWRWYXJpYWJsZXMr
KykpOworICAgIGVsc2UgeworICAgICAgICBBU1NFUlQodmFyS2luZCA9PSBTdGFja1ZhcktpbmQp
OworICAgICAgICB2YXJPZmZzZXQgPSBWYXJPZmZzZXQodmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwo
bV9jYWxsZWVSZWdpc3RlcnMuc2l6ZSgpKSk7CisgICAgfQorICAgIFN5bWJvbFRhYmxlRW50cnkg
bmV3RW50cnkodmFyT2Zmc2V0LCBjb25zdGFudE1vZGUgPT0gSXNDb25zdGFudCA/IFJlYWRPbmx5
IDogMCk7CiAgICAgU3ltYm9sVGFibGU6Ok1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IHN5bWJvbFRh
YmxlKCkuYWRkKGxvY2tlciwgaWRlbnQuaW1wbCgpLCBuZXdFbnRyeSk7CiAKICAgICBpZiAoIXJl
c3VsdC5pc05ld0VudHJ5KQpAQCAtMTg5LDcgKzE5NCw3IEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjpC
eXRlY29kZUdlbmVyYXRvcihWTSYKIHsKICAgICBpZiAobV9pc0J1aWx0aW5GdW5jdGlvbikKICAg
ICAgICAgbV9zaG91bGRFbWl0RGVidWdIb29rcyA9IGZhbHNlOwotCisgICAgCiAgICAgbV9zeW1i
b2xUYWJsZS0+c2V0VXNlc05vblN0cmljdEV2YWwoY29kZUJsb2NrLT51c2VzRXZhbCgpICYmICFj
b2RlQmxvY2stPmlzU3RyaWN0TW9kZSgpKTsKICAgICBWZWN0b3I8SWRlbnRpZmllcj4gYm91bmRQ
YXJhbWV0ZXJQcm9wZXJ0aWVzOwogICAgIEZ1bmN0aW9uUGFyYW1ldGVycyYgcGFyYW1ldGVycyA9
ICpmdW5jdGlvbk5vZGUtPnBhcmFtZXRlcnMoKTsKQEAgLTIwMiw2ICsyMDcsMTEgQEAgQnl0ZWNv
ZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFZNJgogICAgIH0KICAgICBtX3N5bWJvbFRh
YmxlLT5zZXRQYXJhbWV0ZXJDb3VudEluY2x1ZGluZ1RoaXMoZnVuY3Rpb25Ob2RlLT5wYXJhbWV0
ZXJzKCktPnNpemUoKSArIDEpOwogCisgICAgYm9vbCBzaG91bGRDYXB0dXJlQWxsVGhlVGhpbmdz
ID0gbV9zaG91bGRFbWl0RGVidWdIb29rcyB8fCBjb2RlQmxvY2stPnVzZXNFdmFsKCk7CisgICAg
YXV0byBjYXB0dXJlcyA9IFsmXSAoU3RyaW5nSW1wbCogdWlkKSAtPiBib29sIHsKKyAgICAgICAg
cmV0dXJuIHNob3VsZENhcHR1cmVBbGxUaGVUaGluZ3MgfHwgZnVuY3Rpb25Ob2RlLT5jYXB0dXJl
cyh1aWQpOworICAgIH07CisKICAgICBlbWl0T3Bjb2RlKG9wX2VudGVyKTsKIAogICAgIGFsbG9j
YXRlQW5kRW1pdFNjb3BlKCk7CkBAIC0yMjYsOSArMjM2LDEzNyBAQCBCeXRlY29kZUdlbmVyYXRv
cjo6Qnl0ZWNvZGVHZW5lcmF0b3IoVk0mCiAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCht
X2xleGljYWxFbnZpcm9ubWVudFJlZ2lzdGVyLT5pbmRleCgpKTsKICAgICAgICAgaW5zdHJ1Y3Rp
b25zKCkuYXBwZW5kKHNjb3BlUmVnaXN0ZXIoKS0+aW5kZXgoKSk7CiAgICAgfQorICAgIAorICAg
IC8vIE1ha2Ugc3VyZSB0aGUgY29kZSBibG9jayBrbm93cyBhYm91dCBhbGwgb2Ygb3VyIHBhcmFt
ZXRlcnMsIGFuZCBtYWtlIHN1cmUgdGhhdCBwYXJhbWV0ZXJzCisgICAgLy8gbmVlZGluZyBkZWNv
bnN0cnVjdGlvbiBhcmUgbm90ZWQuCisgICAgaW5pdGlhbGl6ZU5leHRQYXJhbWV0ZXIoKTsgLy8g
dGhpcworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwYXJhbWV0ZXJzLnNpemUoKTsgKytp
KSB7CisgICAgICAgIGF1dG8gcGF0dGVybiA9IHBhcmFtZXRlcnMuYXQoaSk7CisgICAgICAgIFJl
Z2lzdGVySUQqIHJlZyA9IGluaXRpYWxpemVOZXh0UGFyYW1ldGVyKCk7CisgICAgICAgIGlmICgh
cGF0dGVybi0+aXNCaW5kaW5nTm9kZSgpKQorICAgICAgICAgICAgbV9kZWNvbnN0cnVjdGVkUGFy
YW1ldGVycy5hcHBlbmQoc3RkOjptYWtlX3BhaXIocmVnLCBwYXR0ZXJuKSk7CisgICAgfQorICAg
IAorICAgIC8vIEZpZ3VyZSBvdXQgc29tZSBpbnRlcmVzdGluZyBmYWN0cyBhYm91dCBvdXIgYXJn
dW1lbnRzLgorICAgIGJvb2wgY2FwdHVyZXNBbnlBcmd1bWVudEJ5TmFtZSA9IGZhbHNlOworICAg
IGlmIChmdW5jdGlvbk5vZGUtPmhhc0NhcHR1cmVkVmFyaWFibGVzKCkpIHsKKyAgICAgICAgRnVu
Y3Rpb25QYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzID0gKmZ1bmN0aW9uTm9kZS0+cGFyYW1ldGVycygp
OworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBhcmFtZXRlcnMuc2l6ZSgpOyArK2kp
IHsKKyAgICAgICAgICAgIGF1dG8gcGF0dGVybiA9IHBhcmFtZXRlcnMuYXQoaSk7CisgICAgICAg
ICAgICBpZiAoIXBhdHRlcm4tPmlzQmluZGluZ05vZGUoKSkKKyAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gc3RhdGljX2Nhc3Q8
Y29uc3QgQmluZGluZ05vZGUqPihwYXR0ZXJuKS0+Ym91bmRQcm9wZXJ0eSgpOworICAgICAgICAg
ICAgY2FwdHVyZXNBbnlBcmd1bWVudEJ5TmFtZSB8PSBjYXB0dXJlcyhpZGVudC5pbXBsKCkpOwor
ICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGNhcHR1cmVzQW55QXJndW1lbnRCeU5hbWUpCisg
ICAgICAgIEFTU0VSVChtX2xleGljYWxFbnZpcm9ubWVudFJlZ2lzdGVyKTsKKyAgICAKKyAgICAv
LyBOZWVkIHRvIGtub3cgd2hhdCBvdXIgZnVuY3Rpb25zIGFyZSBjYWxsZWQuIFBhcmFtZXRlcnMg
aGF2ZSBzb21lIGdvb2Z5IGJlaGF2aW9ycyB3aGVuIGl0CisgICAgLy8gY29tZXMgdG8gZnVuY3Rp
b25zIG9mIHRoZSBzYW1lIG5hbWUuCisgICAgZm9yIChGdW5jdGlvbkJvZHlOb2RlKiBmdW5jdGlv
biA6IGZ1bmN0aW9uTm9kZS0+ZnVuY3Rpb25TdGFjaygpKQorICAgICAgICBtX2Z1bmN0aW9ucy5h
ZGQoZnVuY3Rpb24tPmlkZW50KCkuaW1wbCgpKTsKKyAgICAKKyAgICBib29sIG5lZWRzQXJndW1l
bnRzID0gZnVuY3Rpb25Ob2RlLT51c2VzQXJndW1lbnRzKCkgfHwgY29kZUJsb2NrLT51c2VzRXZh
bCgpOworICAgIAorICAgIGlmIChuZWVkc0FyZ3VtZW50cykgeworICAgICAgICAvLyBDcmVhdGUg
dGhlIGFyZ3VtZW50cyBvYmplY3Qgbm93LiBXZSBtYXkgcHV0IHRoZSBhcmd1bWVudHMgb2JqZWN0
IGludG8gdGhlIGFjdGl2YXRpb24gaWYKKyAgICAgICAgLy8gaXQgaXMgY2FwdHVyZWQuIEVpdGhl
ciB3YXksIHdlIGNyZWF0ZSB0d28gYXJndW1lbnRzIG9iamVjdCB2YXJpYWJsZXM6IG9uZSBpcyBv
dXIKKyAgICAgICAgLy8gcHJpdmF0ZSB2YXJpYWJsZSB0aGF0IGlzIGltbXV0YWJsZSwgYW5kIGFu
b3RoZXIgdGhhdCBpcyB0aGUgdXNlci12aXNpYmxlIHZhcmlhYmxlLiBUaGUKKyAgICAgICAgLy8g
aW1tdXRhYmxlIG9uZSBpcyBvbmx5IHVzZWQgaGVyZSwgb3IgZHVyaW5nIGZvcm1hbCBwYXJhbWV0
ZXIgcmVzb2x1dGlvbnMgaWYgd2Ugb3B0IGZvcgorICAgICAgICAvLyBEaXJlY3RBcmd1bWVudHMu
CisgICAgICAgIAorICAgICAgICBtX2FyZ3VtZW50c1JlZ2lzdGVyID0gYWRkVmFyKCk7CisgICAg
ICAgIG1fYXJndW1lbnRzUmVnaXN0ZXItPnJlZigpOworICAgIH0KKyAgICAKKyAgICBpZiAobmVl
ZHNBcmd1bWVudHMgJiYgIWNvZGVCbG9jay0+aXNTdHJpY3RNb2RlKCkpIHsKKyAgICAgICAgLy8g
SWYgd2UgY2FwdHVyZWQgYW55IGZvcm1hbCBwYXJhbWV0ZXIgYnkgbmFtZSwgdGhlbiB3ZSB1c2Ug
U2NvcGVkQXJndW1lbnRzLiBPdGhlcndpc2Ugd2UKKyAgICAgICAgLy8gdXNlIERpcmVjdEFyZ3Vt
ZW50cy4gV2l0aCBTY29wZWRBcmd1bWVudHMsIHdlIGxpZnQgYWxsIG9mIG91ciBhcmd1bWVudHMg
aW50byB0aGUKKyAgICAgICAgLy8gYWN0aXZhdGlvbi4KKyAgICAgICAgCisgICAgICAgIGlmIChj
YXB0dXJlc0FueUFyZ3VtZW50QnlOYW1lKSB7CisgICAgICAgICAgICBtX3N5bWJvbFRhYmxlLT5z
ZXRBcmd1bWVudHNMZW5ndGgodm0sIHBhcmFtZXRlcnMuc2l6ZSgpKTsKKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgLy8gRm9yIGVhY2ggcGFyYW1ldGVyLCB3ZSBoYXZlIHR3byBwb3NzaWJpbGl0
aWVzOgorICAgICAgICAgICAgLy8gRWl0aGVyIGl0J3MgYSBiaW5kaW5nIG5vZGUgd2l0aCBubyBm
dW5jdGlvbiBvdmVybGFwLCBpbiB3aGljaCBjYXNlIGl0IGdldHMgYSBuYW1lCisgICAgICAgICAg
ICAvLyBpbiB0aGUgc3ltYm9sIHRhYmxlIC0gb3IgaXQganVzdCBnZXRzIHNwYWNlIHJlc2VydmVk
IGluIHRoZSBzeW1ib2wgdGFibGUuIEVpdGhlcgorICAgICAgICAgICAgLy8gd2F5IHdlIGxpZnQg
dGhlIHZhbHVlIGludG8gdGhlIHNjb3BlLgorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHBhcmFtZXRlcnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBTY29wZU9m
ZnNldCBvZmZzZXQgPSBtX3N5bWJvbFRhYmxlLT50YWtlTmV4dFNjb3BlT2Zmc2V0KCk7CisgICAg
ICAgICAgICAgICAgaWYgKFN0cmluZ0ltcGwqIG5hbWUgPSB2aXNpYmxlTmFtZUZvclBhcmFtZXRl
cihwYXJhbWV0ZXJzLmF0KGkpKSkgeworICAgICAgICAgICAgICAgICAgICBTeW1ib2xUYWJsZUVu
dHJ5IGVudHJ5KG9mZnNldCk7CisgICAgICAgICAgICAgICAgICAgIC8vIFN0b3JlcyB0byB0aGVz
ZSB2YXJpYWJsZXMgdmlhIHRoZSBTY29wZWRBcmd1bWVudHMgb2JqZWN0IHdpbGwgbm90IGRvCisg
ICAgICAgICAgICAgICAgICAgIC8vIG5vdGlmeVdyaXRlKCksIHNpbmNlIHRoYXQgd291bGQgYmUg
Y3VtYmVyc29tZS4gQWxzbywgd2F0Y2hpbmcgZm9ybWFsCisgICAgICAgICAgICAgICAgICAgIC8v
IHBhcmFtZXRlcnMgd2hlbiAiYXJndW1lbnRzIiBpcyBpbiBwbGF5IGlzIHVubGlrZWx5IHRvIGJl
IHN1cGVyIHByb2ZpdGFibGUuCisgICAgICAgICAgICAgICAgICAgIC8vIFNvLCB3ZSBqdXN0IGRp
c2FibGUgaXQuCisgICAgICAgICAgICAgICAgICAgIGVudHJ5LmRpc2FibGVXYXRjaGluZygpOwor
ICAgICAgICAgICAgICAgICAgICBtX3N5bWJvbFRhYmxlLT5zZXQobmFtZSwgb2Zmc2V0KTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYWRkT3Bjb2RlKG9wX3B1dF90b19zY29w
ZSk7CisgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKG1fbGV4aWNhbEVudmly
b25tZW50UmVnaXN0ZXItPmluZGV4KCkpOworICAgICAgICAgICAgICAgIGluc3RydWN0aW9ucygp
LmFwcGVuZChVSU5UX01BWCk7CisgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5k
KCZyZWdpc3RlckZvcih2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgxICsgaSkpKTsKKyAgICAg
ICAgICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoUmVzb2x2ZU1vZGVBbmRUeXBlKFRocm93
SWZOb3RGb3VuZCwgTG9jYWxDbG9zdXJlVmFyKSk7CisgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rp
b25zKCkuYXBwZW5kKDApOworICAgICAgICAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChv
ZmZzZXQub2Zmc2V0KCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAg
ICAvLyBUaGlzIGNyZWF0ZXMgYSBzY29wZWQgYXJndW1lbnRzIG9iamVjdCBhbmQgY29waWVzIHRo
ZSBvdmVyZmxvdyBhcmd1bWVudHMgaW50byB0aGUKKyAgICAgICAgICAgIC8vIHNjb3BlLiBJdCdz
IHRoZSBlcXVpdmFsZW50IG9mIGNhbGxpbmcgU2NvcGVkQXJndW1lbnRzOjpjcmVhdGVCeUNvcHlp
bmcoKS4KKyAgICAgICAgICAgIGVtaXRPcGNvZGUob3BfY3JlYXRlX3Njb3BlZF9hcmd1bWVudHMp
OworICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKG1fYXJndW1lbnRzUmVnaXN0ZXIt
PmluZGV4KCkpOworICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKG1fbGV4aWNhbEVu
dmlyb25tZW50UmVnaXN0ZXItPmluZGV4KCkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgLy8gV2UncmUgZ29pbmcgdG8gcHV0IGFsbCBwYXJhbWV0ZXJzIGludG8gdGhlIERpcmVjdEFy
Z3VtZW50cyBvYmplY3QuIEZpcnN0IGVuc3VyZQorICAgICAgICAgICAgLy8gdGhhdCB0aGUgc3lt
Ym9sIHRhYmxlIGtub3dzIHRoYXQgdGhpcyBpcyBoYXBwZW5pbmcuCisgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgcGFyYW1ldGVycy5zaXplKCk7ICsraSkgeworICAgICAgICAg
ICAgICAgIGlmIChTdHJpbmdJbXBsKiBuYW1lID0gdmlzaWJsZU5hbWVGb3JQYXJhbWV0ZXIocGFy
YW1ldGVycy5hdChpKSkpCisgICAgICAgICAgICAgICAgICAgIG1fc3ltYm9sVGFibGUtPnNldChu
YW1lLCBDYXB0dXJlZEFyZ3VtZW50c09mZnNldChpKSk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIGVtaXRPcGNvZGUob3BfY3JlYXRlX2RpcmVjdF9hcmd1bWVudHMp
OworICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKG1fYXJndW1lbnRzUmVnaXN0ZXIt
PmluZGV4KCkpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gQ3JlYXRlIHRo
ZSBmb3JtYWwgcGFyYW1ldGVycyB0aGUgbm9ybWFsIHdheS4gQW55IG9mIHRoZW0gY291bGQgYmUg
Y2FwdHVyZWQsIG9yIG5vdC4gSWYKKyAgICAgICAgLy8gY2FwdHVyZWQsIGxpZnQgdGhlbSBpbnRv
IHRoZSBzY29wZS4KKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBhcmFtZXRlcnMu
c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIFN0cmluZ0ltcGwqIG5hbWUgPSB2aXNpYmxlTmFt
ZUZvclBhcmFtZXRlcihwYXJhbWV0ZXJzLmF0KGkpKTsKKyAgICAgICAgICAgIGlmICghbmFtZSkK
KyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYg
KCFjYXB0dXJlcyhuYW1lKSkgeworICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIGVhc3kg
Y2FzZSAtIGp1c3QgdGVsbCB0aGUgc3ltYm9sIHRhYmxlIGFib3V0IHRoZSBhcmd1bWVudC4gSXQg
d2lsbAorICAgICAgICAgICAgICAgIC8vIGJlIGFjY2Vzc2VkIGRpcmVjdGx5LgorICAgICAgICAg
ICAgICAgIG1fc3ltYm9sVGFibGUtPnNldChuYW1lLCB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVu
dCgxICsgaSkpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgCisgICAgICAgICAgICBTY29wZU9mZnNldCBvZmZzZXQgPSBtX3N5bWJvbFRhYmxl
LT50YWtlTmV4dFNjb3BlT2Zmc2V0KCk7CisgICAgICAgICAgICBJZGVudGlmaWVyJiBpZGVudCA9
CisgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Y29uc3QgQmluZGluZ05vZGUqPihwYXJhbWV0
ZXJzLmF0KGkpKS0+Ym91bmRQcm9wZXJ0eSgpOworICAgICAgICAgICAgbV9zeW1ib2xUYWJsZS0+
c2V0KG5hbWUsIG9mZnNldCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGFkZE9wY29kZShv
cF9wdXRfdG9fc2NvcGUpOworICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKG1fbGV4
aWNhbEVudmlyb25tZW50UmVnaXN0ZXItPmluZGV4KCkpOworICAgICAgICAgICAgaW5zdHJ1Y3Rp
b25zKCkuYXBwZW5kKGFkZENvbnN0YW50KGlkZW50KSk7CisgICAgICAgICAgICBpbnN0cnVjdGlv
bnMoKS5hcHBlbmQoJnJlZ2lzdGVyRm9yKHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDEgKyBp
KSkpOworICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKFJlc29sdmVNb2RlQW5kVHlw
ZShUaHJvd0lmTm90Rm91bmQsIExvY2FsQ2xvc3VyZVZhcikpOworICAgICAgICAgICAgaW5zdHJ1
Y3Rpb25zKCkuYXBwZW5kKDApOworICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKG9m
ZnNldC5vZmZzZXQoKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgaWYgKG5lZWRzQXJn
dW1lbnRzICYmIGNvZGVCbG9jay0+aXNTdHJpY3RNb2RlKCkpIHsKKyAgICAgICAgLy8gQWxsb2Nh
dGUgYW4gb3V0LW9mLWJhbmRzIGFyZ3VtZW50cyBvYmplY3QuCisgICAgICAgIGFkZE9wY29kZShv
cF9jcmVhdGVfb3V0X29mX2JhbmRfYXJndW1lbnRzKTsKKyAgICAgICAgaW5zdHJ1Y3Rpb25zKCku
YXBwZW5kKG1fYXJndWVudHNSZWdpc3Rlci0+aW5kZXgoKSk7CisgICAgfQorICAgIAogICAgIFJl
Z2lzdGVySUQqIGxvY2FsQXJndW1lbnRzUmVnaXN0ZXIgPSBudWxscHRyOwotICAgIFJlZ2lzdGVy
SUQqIHNjcmF0Y2ggPSBhZGRWYXIoKTsKLSAgICBtX3N5bWJvbFRhYmxlLT5zZXRDYXB0dXJlU3Rh
cnQodmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwobV9jb2RlQmxvY2stPm1fbnVtVmFycykub2Zmc2V0
KCkpOworICAgIFJlZ2lzdGVySUQqIHNjcmF0Y2ggPSBhZGRWYXIoKTsgLy8gRklYTUU6IFRoaXMg
dmFyaWFibGUgYWx3YXlzIGNyZWF0ZXMgYSBob2xlIGluIHRoZSBzdGFjay4KIAogICAgIGlmIChm
dW5jdGlvbk5vZGUtPnVzZXNBcmd1bWVudHMoKSB8fCBjb2RlQmxvY2stPnVzZXNFdmFsKCkpIHsg
Ly8gTWF5IHJlaWZ5IGFyZ3VtZW50cyBvYmplY3QuCiAgICAgICAgIFJlZ2lzdGVySUQqIHVubW9k
aWZpZWRBcmd1bWVudHNSZWdpc3RlciA9IGFkZFZhcigpOyAvLyBBbm9ueW1vdXMsIHNvIGl0IGNh
bid0IGJlIG1vZGlmaWVkIGJ5IHVzZXIgY29kZS4KQEAgLTI2OCw4ICs0MDYsNiBAQCBCeXRlY29k
ZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoVk0mCiAgICAgICAgIH0KICAgICB9CiAKLSAg
ICBib29sIHNob3VsZENhcHR1cmVBbGxUaGVUaGluZ3MgPSBtX3Nob3VsZEVtaXREZWJ1Z0hvb2tz
IHx8IGNvZGVCbG9jay0+dXNlc0V2YWwoKTsKLQogICAgIGJvb2wgY2FwdHVyZXNBbnlBcmd1bWVu
dEJ5TmFtZSA9IGZhbHNlOwogICAgIFZlY3RvcjxSZWdpc3RlcklEKiwgMCwgVW5zYWZlVmVjdG9y
T3ZlcmZsb3c+IGNhcHR1cmVkQXJndW1lbnRzOwogICAgIGlmIChmdW5jdGlvbk5vZGUtPmhhc0Nh
cHR1cmVkVmFyaWFibGVzKCkgfHwgc2hvdWxkQ2FwdHVyZUFsbFRoZVRoaW5ncykgewpAQCAtNDk2
LDIxICs2MzIsMjQgQEAgdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6YWRkQ2FsbGVlKEZ1bmN0aQog
ICAgIHN5bWJvbFRhYmxlKCkuYWRkKGZ1bmN0aW9uTm9kZS0+aWRlbnQoKS5pbXBsKCksIFN5bWJv
bFRhYmxlRW50cnkoY2FsbGVlUmVnaXN0ZXItPmluZGV4KCksIFJlYWRPbmx5KSk7CiB9CiAKLXZv
aWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmFkZFBhcmFtZXRlcihjb25zdCBJZGVudGlmaWVyJiBpZGVu
dCwgaW50IHBhcmFtZXRlckluZGV4KQorUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6Omlu
aXRpYWxpemVOZXh0UGFyYW1ldGVyKCkKIHsKLSAgICAvLyBQYXJhbWV0ZXJzIG92ZXJ3cml0ZSB2
YXIgZGVjbGFyYXRpb25zLCBidXQgbm90IGZ1bmN0aW9uIGRlY2xhcmF0aW9ucy4KLSAgICBTdHJp
bmdJbXBsKiByZXAgPSBpZGVudC5pbXBsKCk7Ci0gICAgaWYgKCFtX2Z1bmN0aW9ucy5jb250YWlu
cyhyZXApKSB7Ci0gICAgICAgIHN5bWJvbFRhYmxlKCkuc2V0KHJlcCwgcGFyYW1ldGVySW5kZXgp
OwotICAgICAgICBSZWdpc3RlcklEJiBwYXJhbWV0ZXIgPSByZWdpc3RlckZvcihwYXJhbWV0ZXJJ
bmRleCk7Ci0gICAgICAgIHBhcmFtZXRlci5zZXRJbmRleChwYXJhbWV0ZXJJbmRleCk7Ci0gICAg
fQotCi0gICAgLy8gVG8gbWFpbnRhaW4gdGhlIGNhbGxpbmcgY29udmVudGlvbiwgd2UgaGF2ZSB0
byBhbGxvY2F0ZSB1bmlxdWUgc3BhY2UgZm9yCi0gICAgLy8gZWFjaCBwYXJhbWV0ZXIsIGV2ZW4g
aWYgdGhlIHBhcmFtZXRlciBkb2Vzbid0IG1ha2UgaXQgaW50byB0aGUgc3ltYm9sIHRhYmxlLgor
ICAgIFZpcnR1YWxSZWdpc3RlciByZWcgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChtX2Nv
ZGVCbG9jay0+bnVtUGFyYW1ldGVycygpKTsKKyAgICBSZWdpc3RlcklEJiBwYXJhbWV0ZXIgPSBy
ZWdpc3RlckZvcihyZWcpOworICAgIHBhcmFtZXRlci5zZXRJbmRleChyZWcpOwogICAgIG1fY29k
ZUJsb2NrLT5hZGRQYXJhbWV0ZXIoKTsKIH0KIAorU3RyaW5nSW1wbCogQnl0ZWNvZGVHZW5lcmF0
b3I6OnZpc2libGVOYW1lRm9yUGFyYW1ldGVyKERlY29uc3RydWN0aW9uUGF0dGVybk5vZGUqIHBh
dHRlcm4pCit7CisgICAgaWYgKHBhdHRlcm4tPmlzQmluZGluZ05vZGUoKSkgeworICAgICAgICBj
b25zdCBJZGVudGlmaWVyJiBpZGVudCA9IHN0YXRpY19jYXN0PGNvbnN0IEJpbmRpbmdOb2RlKj4o
cGF0dGVybiktPmJvdW5kUHJvcGVydHkoKTsKKyAgICAgICAgaWYgKCFtX2Z1bmN0aW9ucy5jb250
YWlucyhpZGVudC5pbXBsKCkpKQorICAgICAgICAgICAgcmV0dXJuIGlkZW50LmltcGwoKTsKKyAg
ICB9CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKIGJvb2wgQnl0ZWNvZGVHZW5lcmF0b3I6Ondp
bGxSZXNvbHZlVG9Bcmd1bWVudHNSZWdpc3Rlcihjb25zdCBJZGVudGlmaWVyJiBpZGVudCkKIHsK
ICAgICBpZiAoaWRlbnQgIT0gcHJvcGVydHlOYW1lcygpLmFyZ3VtZW50cykKQEAgLTUzOSwxOSAr
Njc4LDYgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OnVuY2hlY2tlZAogICAgIHJl
dHVybiBtX2xvY2FsQXJndW1lbnRzUmVnaXN0ZXI7CiB9CiAKLVJlZ2lzdGVySUQqIEJ5dGVjb2Rl
R2VuZXJhdG9yOjpjcmVhdGVMYXp5UmVnaXN0ZXJJZk5lY2Vzc2FyeShSZWdpc3RlcklEKiByZWcp
Ci17Ci0gICAgaWYgKCFyZWctPnZpcnR1YWxSZWdpc3RlcigpLmlzTG9jYWwoKSkKLSAgICAgICAg
cmV0dXJuIHJlZzsKLQotICAgIGludCBsb2NhbFZhcmlhYmxlTnVtYmVyID0gcmVnLT52aXJ0dWFs
UmVnaXN0ZXIoKS50b0xvY2FsKCk7Ci0KLSAgICBpZiAobV9sYXN0TGF6eUZ1bmN0aW9uIDw9IGxv
Y2FsVmFyaWFibGVOdW1iZXIgfHwgbG9jYWxWYXJpYWJsZU51bWJlciA8IG1fZmlyc3RMYXp5RnVu
Y3Rpb24pCi0gICAgICAgIHJldHVybiByZWc7Ci0gICAgZW1pdExhenlOZXdGdW5jdGlvbihyZWcs
IG1fbGF6eUZ1bmN0aW9ucy5nZXQobG9jYWxWYXJpYWJsZU51bWJlcikpOwotICAgIHJldHVybiBy
ZWc7Ci19Ci0KIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjpuZXdSZWdpc3RlcigpCiB7
CiAgICAgbV9jYWxsZWVSZWdpc3RlcnMuYXBwZW5kKHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKG1f
Y2FsbGVlUmVnaXN0ZXJzLnNpemUoKSkpOwpAQCAtOTU0LDcgKzEwODAsNyBAQCBib29sIEJ5dGVj
b2RlR2VuZXJhdG9yOjpoYXNDb25zdGFudChjb25zCiAgICAgU3RyaW5nSW1wbCogcmVwID0gaWRl
bnQuaW1wbCgpOwogICAgIHJldHVybiBtX2lkZW50aWZpZXJNYXAuY29udGFpbnMocmVwKTsKIH0K
LSAgICAKKwogdW5zaWduZWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmFkZENvbnN0YW50KGNvbnN0IElk
ZW50aWZpZXImIGlkZW50KQogewogICAgIFN0cmluZ0ltcGwqIHJlcCA9IGlkZW50LmltcGwoKTsK
QEAgLTExOTAsNDYgKzEzMTYsMzQgQEAgYm9vbCBCeXRlY29kZUdlbmVyYXRvcjo6aXNDYXB0dXJl
ZChpbnQgbwogICAgIHJldHVybiBtX3N5bWJvbFRhYmxlICYmIG1fc3ltYm9sVGFibGUtPmlzQ2Fw
dHVyZWQob3BlcmFuZCk7CiB9CiAKLUxvY2FsIEJ5dGVjb2RlR2VuZXJhdG9yOjpsb2NhbChjb25z
dCBJZGVudGlmaWVyJiBwcm9wZXJ0eSkKK1ZhcmlhYmxlIEJ5dGVjb2RlR2VuZXJhdG9yOjp2YXJp
YWJsZShjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eSkKIHsKLSAgICBpZiAocHJvcGVydHkgPT0g
cHJvcGVydHlOYW1lcygpLnRoaXNJZGVudGlmaWVyKQotICAgICAgICByZXR1cm4gTG9jYWwodGhp
c1JlZ2lzdGVyKCksIFJlYWRPbmx5LCBMb2NhbDo6U3BlY2lhbExvY2FsKTsKLSAgICBib29sIGlz
QXJndW1lbnRzID0gcHJvcGVydHkgPT0gcHJvcGVydHlOYW1lcygpLmFyZ3VtZW50czsKLSAgICBp
ZiAoaXNBcmd1bWVudHMpCi0gICAgICAgIGNyZWF0ZUFyZ3VtZW50c0lmTmVjZXNzYXJ5KCk7Ci0K
KyAgICBpZiAocHJvcGVydHkgPT0gcHJvcGVydHlOYW1lcygpLnRoaXNJZGVudGlmaWVyKSB7Cisg
ICAgICAgIHJldHVybiBWYXJpYWJsZSgKKyAgICAgICAgICAgIHByb3BlcnR5LCBWYXJPZmZzZXQo
dGhpc1JlZ2lzdGVyKCktPnZpcnR1YWxSZWdpc3RlcigpKSwgdGhpc1JlZ2lzdGVyKCksCisgICAg
ICAgICAgICBSZWFkT25seSwgTG9jYWw6OlNwZWNpYWxMb2NhbCk7CisgICAgfQorICAgIAogICAg
IGlmICghc2hvdWxkT3B0aW1pemVMb2NhbHMoKSkKLSAgICAgICAgcmV0dXJuIExvY2FsKCk7Ci0K
LSAgICBTeW1ib2xUYWJsZUVudHJ5IGVudHJ5ID0gc3ltYm9sVGFibGUoKS5nZXQocHJvcGVydHku
aW1wbCgpKTsKLSAgICBpZiAoZW50cnkuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBMb2NhbCgp
OwotCi0KLSAgICBSZWdpc3RlcklEKiBsb2NhbCA9IGNyZWF0ZUxhenlSZWdpc3RlcklmTmVjZXNz
YXJ5KCZyZWdpc3RlckZvcihlbnRyeS5nZXRJbmRleCgpKSk7Ci0KLSAgICBpZiAoaXNDYXB0dXJl
ZChsb2NhbC0+aW5kZXgoKSkgJiYgbV9sZXhpY2FsRW52aXJvbm1lbnRSZWdpc3RlcikKLSAgICAg
ICAgcmV0dXJuIExvY2FsKCk7Ci0KLSAgICByZXR1cm4gTG9jYWwobG9jYWwsIGVudHJ5LmdldEF0
dHJpYnV0ZXMoKSwgaXNBcmd1bWVudHMgPyBMb2NhbDo6U3BlY2lhbExvY2FsIDogTG9jYWw6Ok5v
cm1hbExvY2FsKTsKLX0KLQotTG9jYWwgQnl0ZWNvZGVHZW5lcmF0b3I6OmNvbnN0TG9jYWwoY29u
c3QgSWRlbnRpZmllciYgcHJvcGVydHkpCi17Ci0gICAgaWYgKG1fY29kZVR5cGUgIT0gRnVuY3Rp
b25Db2RlKQotICAgICAgICByZXR1cm4gTG9jYWwoKTsKLQotICAgIFN5bWJvbFRhYmxlRW50cnkg
ZW50cnkgPSBzeW1ib2xUYWJsZSgpLmdldChwcm9wZXJ0eS5pbXBsKCkpOworICAgICAgICByZXR1
cm4gVmFyaWFibGUocHJvcGVydHkpOworICAgIAorICAgIFN5bWJvbFRhYmxlRW50cnkgZW50cnkg
PSBzeW1ib2xUYWJsZS5nZXQocHJvcGVydHkuaW1wbCgpKTsKICAgICBpZiAoZW50cnkuaXNOdWxs
KCkpCi0gICAgICAgIHJldHVybiBMb2NhbCgpOwotCi0gICAgUmVnaXN0ZXJJRCogbG9jYWwgPSBj
cmVhdGVMYXp5UmVnaXN0ZXJJZk5lY2Vzc2FyeSgmcmVnaXN0ZXJGb3IoZW50cnkuZ2V0SW5kZXgo
KSkpOwotCi0gICAgYm9vbCBpc0FyZ3VtZW50cyA9IHByb3BlcnR5ID09IHByb3BlcnR5TmFtZXMo
KS5hcmd1bWVudHM7Ci0gICAgaWYgKGlzQ2FwdHVyZWQobG9jYWwtPmluZGV4KCkpICYmIG1fbGV4
aWNhbEVudmlyb25tZW50UmVnaXN0ZXIpCi0gICAgICAgIHJldHVybiBMb2NhbCgpOwotCi0gICAg
cmV0dXJuIExvY2FsKGxvY2FsLCBlbnRyeS5nZXRBdHRyaWJ1dGVzKCksIGlzQXJndW1lbnRzID8g
TG9jYWw6OlNwZWNpYWxMb2NhbCA6IExvY2FsOjpOb3JtYWxMb2NhbCk7CisgICAgICAgIHJldHVy
biBWYXJpYWJsZShwcm9wZXJ0eSk7CisgICAgCisgICAgVmFyT2Zmc2V0IG9mZnNldCA9IGVudHJ5
LnZhck9mZnNldCgpOworICAgIAorICAgIGlmIChvZmZzZXQuaXNTY29wZSgpICYmIG1fbG9jYWxT
Y29wZURlcHRoKSB7CisgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYmUgYWJsZSB0byBzdGF0
aWNhbGx5IHJlc29sdmUgdGhyb3VnaCBvdXIgbG9jYWwgc2NvcGVzLgorICAgICAgICAvLyBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQxODg1CisgICAgICAgIHJldHVy
biBWYXJpYWJsZShwcm9wZXJ0eSk7CisgICAgfQorICAgIAorICAgIFJlZ2lzdGVySUQqIGxvY2Fs
OworICAgIGlmIChvZmZzZXQuaXNTdGFjaygpKQorICAgICAgICBsb2NhbCA9ICZyZWdpc3RlckZv
cihvZmZzZXQuc3RhY2tPZmZzZXQoKS5vZmZzZXQoKSk7CisgICAgCisgICAgcmV0dXJuIFZhcmlh
YmxlKHByb3BlcnR5LCB2YXJPZmZzZXQsIGxvY2FsLCBlbnRyeS5nZXRBdHRyaWJ1dGVzKCksIExv
Y2FsOjpOb3JtYWxMb2NhbCk7CiB9CiAKIHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRDaGVj
a0hhc0luc3RhbmNlKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogdmFsdWUsIFJlZ2lzdGVy
SUQqIGJhc2UsIExhYmVsKiB0YXJnZXQpCkBAIC0xMjUzLDM5ICsxMzY3LDQ4IEBAIFJlc29sdmVU
eXBlIEJ5dGVjb2RlR2VuZXJhdG9yOjpyZXNvbHZlVHkKICAgICByZXR1cm4gR2xvYmFsUHJvcGVy
dHk7CiB9CiAKLVJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0UmVzb2x2ZVNjb3Bl
KFJlZ2lzdGVySUQqIGRzdCwgY29uc3QgSWRlbnRpZmllciYgaWRlbnRpZmllciwgUmVzb2x2ZVNj
b3BlSW5mbyYgaW5mbykKK1JlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0UmVzb2x2
ZVNjb3BlKFJlZ2lzdGVySUQqIGRzdCwgY29uc3QgVmFyaWFibGUmIHZhcmlhYmxlKQogewotICAg
IG1fY29kZUJsb2NrLT5hZGRQcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uKGluc3RydWN0aW9ucygp
LnNpemUoKSk7Ci0KLSAgICBpZiAobV9zeW1ib2xUYWJsZSAmJiBtX2NvZGVUeXBlID09IEZ1bmN0
aW9uQ29kZSAmJiAhbV9sb2NhbFNjb3BlRGVwdGgpIHsKLSAgICAgICAgU3ltYm9sVGFibGVFbnRy
eSBlbnRyeSA9IG1fc3ltYm9sVGFibGUtPmdldChpZGVudGlmaWVyLmltcGwoKSk7Ci0gICAgICAg
IGlmICghZW50cnkuaXNOdWxsKCkpIHsKLSAgICAgICAgICAgIGVtaXRPcGNvZGUob3BfcmVzb2x2
ZV9zY29wZSk7Ci0gICAgICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoa2lsbChkc3QpKTsK
LSAgICAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChzY29wZVJlZ2lzdGVyKCktPmluZGV4
KCkpOwotICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGFkZENvbnN0YW50KGlkZW50
aWZpZXIpKTsKLSAgICAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChMb2NhbENsb3N1cmVW
YXIpOwotICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKDApOwotICAgICAgICAgICAg
aW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKDApOwotICAgICAgICAgICAgaW5mbyA9IFJlc29sdmVTY29w
ZUluZm8oZW50cnkuZ2V0SW5kZXgoKSk7Ci0gICAgICAgICAgICByZXR1cm4gZHN0OwotICAgICAg
ICB9CisgICAgc3dpdGNoICh2YXJpYWJsZS52YXJPZmZzZXQoKS5raW5kKCkpIHsKKyAgICBjYXNl
IFN0YWNrT2Zmc2V0OgorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgCisgICAgY2Fz
ZSBDYXB0dXJlZEFyZ3VtZW50S2luZDoKKyAgICAgICAgcmV0dXJuIGFyZ3VtZW50c1JlZ2lzdGVy
KCk7CisgICAgICAgIAorICAgIGNhc2UgU2NvcGVPZmZzZXQ6CisgICAgICAgIG1fY29kZUJsb2Nr
LT5hZGRQcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uKGluc3RydWN0aW9ucygpLnNpemUoKSk7Cisg
ICAgICAgIAorICAgICAgICBBU1NFUlQobV9zeW1ib2xUYWJsZSAmJiBtX2NvZGVUeXBlID09IEZ1
bmN0aW9uQ29kZSAmJiAhbV9sb2NhbFNjb3BlRGVwdGgpOworICAgICAgICAKKyAgICAgICAgZW1p
dE9wY29kZShvcF9yZXNvbHZlX3Njb3BlKTsKKyAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5k
KGtpbGwoZHN0KSk7CisgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChzY29wZVJlZ2lzdGVy
KCktPmluZGV4KCkpOworICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYWRkQ29uc3RhbnQo
dmFyaWFibGUuaWRlbnQoKSkpOworICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoTG9jYWxD
bG9zdXJlVmFyKTsKKyAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKDApOworICAgICAgICBp
bnN0cnVjdGlvbnMoKS5hcHBlbmQoMCk7CisgICAgICAgIHJldHVybiBkc3Q7CisgICAgICAgIAor
ICAgIGNhc2UgSW52YWxpZFZhcktpbmQ6CisgICAgICAgIC8vIEluZGljYXRlcyBub24tbG9jYWwg
cmVzb2x1dGlvbi4KKyAgICAgICAgCisgICAgICAgIEFTU0VSVCghbV9zeW1ib2xUYWJsZSB8fCAh
bV9zeW1ib2xUYWJsZS0+Y29udGFpbnMoaWRlbnRpZmllci5pbXBsKCkpIHx8IHJlc29sdmVUeXBl
KCkgPT0gRHluYW1pYyk7CisgICAgICAgIAorICAgICAgICAvLyByZXNvbHZlX3Njb3BlIGRzdCwg
aWQsIFJlc29sdmVUeXBlLCBkZXB0aAorICAgICAgICBlbWl0T3Bjb2RlKG9wX3Jlc29sdmVfc2Nv
cGUpOworICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoa2lsbChkc3QpKTsKKyAgICAgICAg
aW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHNjb3BlUmVnaXN0ZXIoKS0+aW5kZXgoKSk7CisgICAgICAg
IGluc3RydWN0aW9ucygpLmFwcGVuZChhZGRDb25zdGFudCh2YXJpYWJsZS5pZGVudCgpKSk7Cisg
ICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChyZXNvbHZlVHlwZSgpKTsKKyAgICAgICAgaW5z
dHJ1Y3Rpb25zKCkuYXBwZW5kKDApOworICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoMCk7
CisgICAgICAgIHJldHVybiBkc3Q7CiAgICAgfQotCi0gICAgQVNTRVJUKCFtX3N5bWJvbFRhYmxl
IHx8ICFtX3N5bWJvbFRhYmxlLT5jb250YWlucyhpZGVudGlmaWVyLmltcGwoKSkgfHwgcmVzb2x2
ZVR5cGUoKSA9PSBEeW5hbWljKTsKLQotICAgIC8vIHJlc29sdmVfc2NvcGUgZHN0LCBpZCwgUmVz
b2x2ZVR5cGUsIGRlcHRoCi0gICAgZW1pdE9wY29kZShvcF9yZXNvbHZlX3Njb3BlKTsKLSAgICBp
bnN0cnVjdGlvbnMoKS5hcHBlbmQoa2lsbChkc3QpKTsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBl
bmQoc2NvcGVSZWdpc3RlcigpLT5pbmRleCgpKTsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQo
YWRkQ29uc3RhbnQoaWRlbnRpZmllcikpOwotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChyZXNv
bHZlVHlwZSgpKTsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoMCk7Ci0gICAgaW5zdHJ1Y3Rp
b25zKCkuYXBwZW5kKDApOwotICAgIHJldHVybiBkc3Q7CisgICAgCisgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKIH0KIAotCiBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6
ZW1pdEdldE93blNjb3BlKFJlZ2lzdGVySUQqIGRzdCwgY29uc3QgSWRlbnRpZmllciYgaWRlbnRp
ZmllciwgT3duU2NvcGVMb29rdXBSdWxlcykKIHsKICAgICBlbWl0T3Bjb2RlKG9wX3Jlc29sdmVf
c2NvcGUpOwpAQCAtMTMwMCw2MSArMTQyMyw4MiBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVy
YXRvcjo6ZW1pdEdldE93CiAgICAgcmV0dXJuIGRzdDsKIH0KIAotUmVnaXN0ZXJJRCogQnl0ZWNv
ZGVHZW5lcmF0b3I6OmVtaXRSZXNvbHZlQ29uc3RhbnRMb2NhbChSZWdpc3RlcklEKiBkc3QsIGNv
bnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIsIFJlc29sdmVTY29wZUluZm8mIGluZm8pCi17Ci0g
ICAgaWYgKCFtX3N5bWJvbFRhYmxlIHx8IG1fY29kZVR5cGUgIT0gRnVuY3Rpb25Db2RlKQotICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIFN5bWJvbFRhYmxlRW50cnkgZW50cnkgPSBtX3N5
bWJvbFRhYmxlLT5nZXQoaWRlbnRpZmllci5pbXBsKCkpOwotICAgIGlmIChlbnRyeS5pc051bGwo
KSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgaW5mbyA9IFJlc29sdmVTY29wZUluZm8o
ZW50cnkuZ2V0SW5kZXgoKSk7Ci0gICAgcmV0dXJuIGVtaXRNb3ZlKGRzdCwgbV9sZXhpY2FsRW52
aXJvbm1lbnRSZWdpc3Rlcik7Ci0KLX0KLQotUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6
OmVtaXRHZXRGcm9tU2NvcGUoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBzY29wZSwgY29u
c3QgSWRlbnRpZmllciYgaWRlbnRpZmllciwgUmVzb2x2ZU1vZGUgcmVzb2x2ZU1vZGUsIGNvbnN0
IFJlc29sdmVTY29wZUluZm8mIGluZm8pCitSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6
ZW1pdEdldEZyb21TY29wZShSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHNjb3BlLCBjb25z
dCBWYXJpYWJsZSYgdmFyaWFibGUsIFJlc29sdmVNb2RlIHJlc29sdmVNb2RlKQogewotICAgIG1f
Y29kZUJsb2NrLT5hZGRQcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uKGluc3RydWN0aW9ucygpLnNp
emUoKSk7Ci0KLSAgICAvLyBnZXRfZnJvbV9zY29wZSBkc3QsIHNjb3BlLCBpZCwgUmVzb2x2ZU1v
ZGVBbmRUeXBlLCBTdHJ1Y3R1cmUsIE9wZXJhbmQKLSAgICBVbmxpbmtlZFZhbHVlUHJvZmlsZSBw
cm9maWxlID0gZW1pdFByb2ZpbGVkT3Bjb2RlKG9wX2dldF9mcm9tX3Njb3BlKTsKLSAgICBpbnN0
cnVjdGlvbnMoKS5hcHBlbmQoa2lsbChkc3QpKTsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQo
c2NvcGUtPmluZGV4KCkpOwotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChhZGRDb25zdGFudChp
ZGVudGlmaWVyKSk7Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKFJlc29sdmVNb2RlQW5kVHlw
ZShyZXNvbHZlTW9kZSwgaW5mby5pc0xvY2FsKCkgPyBMb2NhbENsb3N1cmVWYXIgOiByZXNvbHZl
VHlwZSgpKS5vcGVyYW5kKCkpOwotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCgwKTsKLSAgICBp
bnN0cnVjdGlvbnMoKS5hcHBlbmQoaW5mby5sb2NhbEluZGV4KCkpOwotICAgIGluc3RydWN0aW9u
cygpLmFwcGVuZChwcm9maWxlKTsKLSAgICByZXR1cm4gZHN0OworICAgIHN3aXRjaCAodmFyaWFi
bGUudmFyT2Zmc2V0KCkua2luZCgpKSB7CisgICAgY2FzZSBTdGFja09mZnNldDoKKyAgICAgICAg
cmV0dXJuIGVtaXRNb3ZlKGtpbGwoZHN0KSwgdmFyaWFibGUubG9jYWwoKSk7CisgICAgICAgIAor
ICAgIGNhc2UgQ2FwdHVyZWRBcmd1bWVudHNPZmZzZXQ6CisgICAgICAgIEFTU0VSVChzY29wZSA9
PSBhcmd1bWVudHNSZWdpc3RlcigpKTsKKyAgICAgICAgVW5saW5rZWRWYWx1ZVByb2ZpbGUgcHJv
ZmlsZSA9IGVtaXRQcm9maWxlZE9wY29kZShvcF9nZXRfZnJvbV9hcmd1bWVudHMpOworICAgICAg
ICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoa2lsbChkc3QpKTsKKyAgICAgICAgaW5zdHJ1Y3Rpb25z
KCkuYXBwZW5kKHNjb3BlLT5pbmRleCgpKTsKKyAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5k
KHZhcmlhYmxlLnZhck9mZnNldCgpLmNhcHR1cmVkQXJndW1lbnRzT2Zmc2V0KCkub2Zmc2V0KCkp
OworICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQocHJvZmlsZSk7CisgICAgICAgIHJldHVy
biBkc3Q7CisgICAgICAgIAorICAgIGNhc2UgU2NvcGVPZmZzZXQ6CisgICAgY2FzZSBJbnZhbGlk
VmFyS2luZDoKKyAgICAgICAgbV9jb2RlQmxvY2stPmFkZFByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rp
b24oaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKTsKKyAgICAgICAgCisgICAgICAgIC8vIGdldF9mcm9t
X3Njb3BlIGRzdCwgc2NvcGUsIGlkLCBSZXNvbHZlTW9kZUFuZFR5cGUsIFN0cnVjdHVyZSwgT3Bl
cmFuZAorICAgICAgICBVbmxpbmtlZFZhbHVlUHJvZmlsZSBwcm9maWxlID0gZW1pdFByb2ZpbGVk
T3Bjb2RlKG9wX2dldF9mcm9tX3Njb3BlKTsKKyAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5k
KGtpbGwoZHN0KSk7CisgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChzY29wZS0+aW5kZXgo
KSk7CisgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChhZGRDb25zdGFudCh2YXJpYWJsZS5p
ZGVudGlmaWVyKCkpKTsKKyAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKFJlc29sdmVNb2Rl
QW5kVHlwZShyZXNvbHZlTW9kZSwgdmFyaWFibGUudmFyT2Zmc2V0KCkuaXNTY29wZSgpID8gTG9j
YWxDbG9zdXJlVmFyIDogcmVzb2x2ZVR5cGUoKSkub3BlcmFuZCgpKTsKKyAgICAgICAgaW5zdHJ1
Y3Rpb25zKCkuYXBwZW5kKDApOworICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQodmFyaWFi
bGUudmFyT2Zmc2V0KCkuaXNTY29wZSgpID8gdmFyaWFibGUudmFyT2Zmc2V0KCkuc2NvcGVPZmZz
ZXQoKS5vZmZzZXQoKSA6IDApOworICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQocHJvZmls
ZSk7CisgICAgICAgIHJldHVybiBkc3Q7CisgICAgfQorICAgIAorICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiB9CiAKLVJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0
UHV0VG9TY29wZShSZWdpc3RlcklEKiBzY29wZSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnRpZmll
ciwgUmVnaXN0ZXJJRCogdmFsdWUsIFJlc29sdmVNb2RlIHJlc29sdmVNb2RlLCBjb25zdCBSZXNv
bHZlU2NvcGVJbmZvJiBpbmZvKQorUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRQ
dXRUb1Njb3BlKFJlZ2lzdGVySUQqIHNjb3BlLCBjb25zdCBWYXJpYWJsZSYgdmFyaWFibGUsIFJl
Z2lzdGVySUQqIHZhbHVlLCBSZXNvbHZlTW9kZSByZXNvbHZlTW9kZSkKIHsKLSAgICBtX2NvZGVC
bG9jay0+YWRkUHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbihpbnN0cnVjdGlvbnMoKS5zaXplKCkp
OwotCi0gICAgLy8gcHV0X3RvX3Njb3BlIHNjb3BlLCBpZCwgdmFsdWUsIFJlc29sdmVNb2RlQW5k
VHlwZSwgU3RydWN0dXJlLCBPcGVyYW5kCi0gICAgZW1pdE9wY29kZShvcF9wdXRfdG9fc2NvcGUp
OwotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChzY29wZS0+aW5kZXgoKSk7Ci0gICAgaW5zdHJ1
Y3Rpb25zKCkuYXBwZW5kKGFkZENvbnN0YW50KGlkZW50aWZpZXIpKTsKLSAgICBpbnN0cnVjdGlv
bnMoKS5hcHBlbmQodmFsdWUtPmluZGV4KCkpOwotICAgIGlmIChpbmZvLmlzTG9jYWwoKSkgewot
ICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoUmVzb2x2ZU1vZGVBbmRUeXBlKHJlc29sdmVN
b2RlLCBMb2NhbENsb3N1cmVWYXIpLm9wZXJhbmQoKSk7Ci0gICAgICAgIGludCBvcGVyYW5kID0g
cmVnaXN0ZXJGb3IoaW5mby5sb2NhbEluZGV4KCkpLmluZGV4KCk7Ci0gICAgICAgIGJvb2wgaXNX
YXRjaGFibGVWYXJpYWJsZSA9IGhhc1dhdGNoYWJsZVZhcmlhYmxlKG9wZXJhbmQpOwotICAgICAg
ICBBU1NFUlQoIWlzV2F0Y2hhYmxlVmFyaWFibGUgfHwgd2F0Y2hhYmxlVmFyaWFibGVJZGVudGlm
aWVyKG9wZXJhbmQpID09IGlkZW50aWZpZXIpOwotICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBl
bmQoaXNXYXRjaGFibGVWYXJpYWJsZSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgQVNTRVJUKHJl
c29sdmVUeXBlKCkgIT0gTG9jYWxDbG9zdXJlVmFyKTsKLSAgICAgICAgaW5zdHJ1Y3Rpb25zKCku
YXBwZW5kKFJlc29sdmVNb2RlQW5kVHlwZShyZXNvbHZlTW9kZSwgcmVzb2x2ZVR5cGUoKSkub3Bl
cmFuZCgpKTsKLSAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGZhbHNlKTsKLSAgICB9Ci0g
ICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGluZm8ubG9jYWxJbmRleCgpKTsKLSAgICByZXR1cm4g
dmFsdWU7CisgICAgc3dpdGNoICh2YXJpYWJsZS52YXJPZmZzZXQoKS5raW5kKCkpIHsKKyAgICBj
YXNlIFN0YWNrT2Zmc2V0OgorICAgICAgICBlbWl0TW92ZSh2YXJpYWJsZS5sb2NhbCgpLCB2YWx1
ZSk7CisgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICAgICAgCisgICAgY2FzZSBDYXB0dXJlZEFy
Z3VtZW50c09mZnNldDoKKyAgICAgICAgQVNTRVJUKHNjb3BlID09IGFyZ3VtZW50c1JlZ2lzdGVy
KCkpOworICAgICAgICBlbWl0T3Bjb2RlKG9wX3B1dF90b19hcmd1bWVudHMpOworICAgICAgICBp
bnN0cnVjdGlvbnMoKS5hcHBlbmQoc2NvcGUpOworICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBl
bmQodmFyaWFibGUudmFyT2Zmc2V0KCkuY2FwdHVyZWRBcmd1bWVudHNPZmZzZXQoKS5vZmZzZXQo
KSk7CisgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCh2YWx1ZS0+aW5kZXgoKSk7CisgICAg
ICAgIHJldHVybiB2YWx1ZTsKKyAgICAgICAgCisgICAgY2FzZSBTY29wZU9mZnNldDoKKyAgICBj
YXNlIEludmFsaWRWYXJLaW5kOiB7CisgICAgICAgIG1fY29kZUJsb2NrLT5hZGRQcm9wZXJ0eUFj
Y2Vzc0luc3RydWN0aW9uKGluc3RydWN0aW9ucygpLnNpemUoKSk7CisgICAgICAgIAorICAgICAg
ICAvLyBwdXRfdG9fc2NvcGUgc2NvcGUsIGlkLCB2YWx1ZSwgUmVzb2x2ZU1vZGVBbmRUeXBlLCBT
dHJ1Y3R1cmUsIE9wZXJhbmQKKyAgICAgICAgZW1pdE9wY29kZShvcF9wdXRfdG9fc2NvcGUpOwor
ICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoc2NvcGUtPmluZGV4KCkpOworICAgICAgICBp
bnN0cnVjdGlvbnMoKS5hcHBlbmQoYWRkQ29uc3RhbnQodmFyaWFibGUuaWRlbnQoKSkpOworICAg
ICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQodmFsdWUtPmluZGV4KCkpOworICAgICAgICBTY29w
ZU9mZnNldCBvZmZzZXQ7CisgICAgICAgIGlmICh2YXJpYWJsZS52YXJPZmZzZXQoKS5pc1Njb3Bl
KCkpIHsKKyAgICAgICAgICAgIG9mZnNldCA9IHZhcmlhYmxlLnZhck9mZnNldCgpLnNjb3BlT2Zm
c2V0KCk7CisgICAgICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoUmVzb2x2ZU1vZGVBbmRU
eXBlKHJlc29sdmVNb2RlLCBMb2NhbENsb3N1cmVWYXIpLm9wZXJhbmQoKSk7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICBBU1NFUlQocmVzb2x2ZVR5cGUoKSAhPSBMb2NhbENsb3N1cmVW
YXIpOworICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKFJlc29sdmVNb2RlQW5kVHlw
ZShyZXNvbHZlTW9kZSwgcmVzb2x2ZVR5cGUoKSkub3BlcmFuZCgpKTsKKyAgICAgICAgfQorICAg
ICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoMCk7CisgICAgICAgIGluc3RydWN0aW9ucygpLmFw
cGVuZChvZmZzZXQuaXNWYWxpZCgpID8gb2Zmc2V0Lm9mZnNldCgpIDogMCk7CisgICAgICAgIHJl
dHVybiB2YWx1ZTsKKyAgICB9IH0KKyAgICAKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogfQogCiBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEluc3RhbmNlT2Yo
UmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiB2YWx1ZSwgUmVnaXN0ZXJJRCogYmFzZVByb3Rv
dHlwZSkKLXsgCit7CiAgICAgZW1pdE9wY29kZShvcF9pbnN0YW5jZW9mKTsKICAgICBpbnN0cnVj
dGlvbnMoKS5hcHBlbmQoZHN0LT5pbmRleCgpKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQo
dmFsdWUtPmluZGV4KCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxl
ci9CeXRlY29kZUdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAkocmV2aXNpb24gMTgwNzIwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xODMsNTggKzE4Myw1NyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgSXNDYXB0dXJlZAogICAgIH07CiAKLSAgICBjbGFzcyBMb2NhbCB7CisgICAgY2xhc3MgVmFy
aWFibGUgewogICAgIHB1YmxpYzoKLSAgICAgICAgTG9jYWwoKQotICAgICAgICAgICAgOiBtX2xv
Y2FsKDApCisgICAgICAgIGVudW0gVmFyaWFibGVLaW5kIHsgTm9ybWFsVmFyaWFibGUsIFNwZWNp
YWxWYXJpYWJsZSB9OworCisgICAgICAgIFZhcmlhYmxlKCkKKyAgICAgICAgICAgIDogbV9vZmZz
ZXQoKQorICAgICAgICAgICAgLCBtX2xvY2FsKG51bGxwdHIpCiAgICAgICAgICAgICAsIG1fYXR0
cmlidXRlcygwKQotICAgICAgICAgICAgLCBtX2tpbmQoTm9ybWFsTG9jYWwpCisgICAgICAgICAg
ICAsIG1fa2luZChOb3JtYWxWYXJpYWJsZSkKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICBWYXJpYWJsZShjb25zdCBJZGVudGlmaWVyJiBpZGVudCkKKyAgICAgICAgICAg
IDogbV9pZGVudChpZGVudCkKKyAgICAgICAgICAgICwgbV9sb2NhbChudWxscHRyKQorICAgICAg
ICAgICAgLCBtX2F0dHJpYnV0ZXMoMCkKKyAgICAgICAgICAgICwgbV9raW5kKE5vcm1hbFZhcmlh
YmxlKSAvLyBUaGlzIGlzIHNvbWV3aGF0IG1lYW5pbmdsZXNzIGhlcmUgZm9yIHRoaXMga2luZCBv
ZiBWYXJpYWJsZS4KICAgICAgICAgewogICAgICAgICB9CiAKLSAgICAgICAgZW51bSBMb2NhbEtp
bmQgeyBOb3JtYWxMb2NhbCwgU3BlY2lhbExvY2FsIH07Ci0KLSAgICAgICAgTG9jYWwoUmVnaXN0
ZXJJRCogbG9jYWwsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIExvY2FsS2luZCBraW5kKQotICAgICAg
ICAgICAgOiBtX2xvY2FsKGxvY2FsKQorICAgICAgICBWYXJpYWJsZShjb25zdCBJZGVudGlmaWVy
JiBpZGVudCwgVmFyT2Zmc2V0IG9mZnNldCwgUmVnaXN0ZXJJRCogbG9jYWwsIHVuc2lnbmVkIGF0
dHJpYnV0ZXMsIExvY2FsS2luZCBraW5kKQorICAgICAgICAgICAgOiBtX2lkZW50KGlkZW50KQor
ICAgICAgICAgICAgLCBtX29mZnNldChvZmZzZXQpCisgICAgICAgICAgICAsIG1fbG9jYWwobG9j
YWwpCiAgICAgICAgICAgICAsIG1fYXR0cmlidXRlcyhhdHRyaWJ1dGVzKQogICAgICAgICAgICAg
LCBtX2tpbmQoa2luZCkKICAgICAgICAgewogICAgICAgICB9CiAKLSAgICAgICAgb3BlcmF0b3Ig
Ym9vbCgpIGNvbnN0IHsgcmV0dXJuIG1fbG9jYWw7IH0KLQotICAgICAgICBSZWdpc3RlcklEKiBn
ZXQoKSBjb25zdCB7IHJldHVybiBtX2xvY2FsOyB9CisgICAgICAgIC8vIElmIGl0J3MgdW5zZXQs
IHRoZW4gaXQgaXMgYSBub24tbG9jYWxseS1zY29wZWQgdmFyaWFibGUuIElmIGl0IGlzIHNldCwg
dGhlbiBpdCBjb3VsZCBiZQorICAgICAgICAvLyBhIHN0YWNrIHZhcmlhYmxlLCBhIHNjb3BlZCB2
YXJpYWJsZSBpbiB0aGUgbG9jYWwgc2NvcGUsIG9yIGEgdmFyaWFibGUgY2FwdHVyZWQgaW4gdGhl
CisgICAgICAgIC8vIGRpcmVjdCBhcmd1bWVudHMgb2JqZWN0LgorICAgICAgICBib29sIGlzUmVz
b2x2ZWQoKSBjb25zdCB7IHJldHVybiAhIW1fb2Zmc2V0OyB9CisgICAgICAgIAorICAgICAgICBj
b25zdCBJZGVudGlmaWVyJiBpZGVudCgpIGNvbnN0IHsgcmV0dXJuIG1faWRlbnQ7IH0KKyAgICAg
ICAgCisgICAgICAgIFZhck9mZnNldCBvZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX29mZnNldDsg
fQorICAgICAgICBib29sIGlzTG9jYWwoKSBjb25zdCB7IHJldHVybiBtX29mZnNldC5pc1N0YWNr
KCk7IH0KKyAgICAgICAgUmVnaXN0ZXJJRCogbG9jYWwoKSBjb25zdCB7IHJldHVybiBtX2xvY2Fs
OyB9CiAKICAgICAgICAgYm9vbCBpc1JlYWRPbmx5KCkgY29uc3QgeyByZXR1cm4gbV9hdHRyaWJ1
dGVzICYgUmVhZE9ubHk7IH0KLSAgICAgICAgYm9vbCBpc1NwZWNpYWwoKSBjb25zdCB7IHJldHVy
biBtX2tpbmQgIT0gTm9ybWFsTG9jYWw7IH0KKyAgICAgICAgYm9vbCBpc1NwZWNpYWwoKSBjb25z
dCB7IHJldHVybiBtX2tpbmQgIT0gTm9ybWFsVmFyaWFibGU7IH0KIAogICAgIHByaXZhdGU6Cisg
ICAgICAgIElkZW50aWZpZXIgbV9pZGVudDsKKyAgICAgICAgVmFyT2ZmZXQgbV9vZmZzdDsKICAg
ICAgICAgUmVnaXN0ZXJJRCogbV9sb2NhbDsKICAgICAgICAgdW5zaWduZWQgbV9hdHRyaWJ1dGVz
OwogICAgICAgICBMb2NhbEtpbmQgbV9raW5kOwogICAgIH07CiAKLSAgICBzdHJ1Y3QgUmVzb2x2
ZVNjb3BlSW5mbyB7Ci0gICAgICAgIFJlc29sdmVTY29wZUluZm8oKQotICAgICAgICAgICAgOiBt
X2xvY2FsSW5kZXgoMCkKLSAgICAgICAgICAgICwgbV9yZXNvbHZlU2NvcGVLaW5kKE5vbkxvY2Fs
U2NvcGUpCi0gICAgICAgIHsKLSAgICAgICAgfQotCi0gICAgICAgIFJlc29sdmVTY29wZUluZm8o
aW50IGluZGV4KQotICAgICAgICAgICAgOiBtX2xvY2FsSW5kZXgoaW5kZXgpCi0gICAgICAgICAg
ICAsIG1fcmVzb2x2ZVNjb3BlS2luZChMb2NhbFNjb3BlKQotICAgICAgICB7Ci0gICAgICAgIH0K
LQotICAgICAgICBib29sIGlzTG9jYWwoKSBjb25zdCB7IHJldHVybiBtX3Jlc29sdmVTY29wZUtp
bmQgPT0gTG9jYWxTY29wZTsgfQotICAgICAgICBpbnQgbG9jYWxJbmRleCgpIGNvbnN0IHsgcmV0
dXJuIG1fbG9jYWxJbmRleDsgfQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgaW50IG1fbG9jYWxJ
bmRleDsKLSAgICAgICAgZW51bSB7IExvY2FsU2NvcGUsIE5vbkxvY2FsU2NvcGUgfSBtX3Jlc29s
dmVTY29wZUtpbmQ7Ci0gICAgfTsKLQogICAgIHN0cnVjdCBUcnlSYW5nZSB7CiAgICAgICAgIFJl
ZlB0cjxMYWJlbD4gc3RhcnQ7CiAgICAgICAgIFJlZlB0cjxMYWJlbD4gZW5kOwpAQCAtMjg1LDEy
ICsyODQsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgaXNDYXB0dXJlZChpbnQg
b3BlcmFuZCk7CiAgICAgICAgIENhcHR1cmVNb2RlIGNhcHR1cmVNb2RlKGludCBvcGVyYW5kKSB7
IHJldHVybiBpc0NhcHR1cmVkKG9wZXJhbmQpID8gSXNDYXB0dXJlZCA6IE5vdENhcHR1cmVkOyB9
CiAgICAgICAgIAotICAgICAgICBMb2NhbCBsb2NhbChjb25zdCBJZGVudGlmaWVyJik7Ci0gICAg
ICAgIExvY2FsIGNvbnN0TG9jYWwoY29uc3QgSWRlbnRpZmllciYpOwotCisgICAgICAgIFZhcmlh
YmxlIHZhcmlhYmxlKGNvbnN0IElkZW50aWZpZXImKTsKKyAgICAgICAgCiAgICAgICAgIC8vIFJl
dHVybnMgdGhlIHJlZ2lzdGVyIHN0b3JpbmcgInRoaXMiCiAgICAgICAgIFJlZ2lzdGVySUQqIHRo
aXNSZWdpc3RlcigpIHsgcmV0dXJuICZtX3RoaXNSZWdpc3RlcjsgfQotICAgICAgICAKKyAgICAg
ICAgUmVnaXN0ZXJJRCogYXJndW1lbnRzUmVnaXN0ZXIoKSB7IHJldHVybiBtX2FyZ3VtZW50c1Jl
Z2lzdGVyOyB9CiAgICAgICAgIFJlZ2lzdGVySUQqIHNjb3BlUmVnaXN0ZXIoKSB7IHJldHVybiBt
X3Njb3BlUmVnaXN0ZXI7IH0KIAogICAgICAgICAvLyBSZXR1cm5zIHRoZSBuZXh0IGF2YWlsYWJs
ZSB0ZW1wb3JhcnkgcmVnaXN0ZXIuIFJlZ2lzdGVycyByZXR1cm5lZCBieQpAQCAtNTAyLDEwICs1
MDAsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdFRvUHJpbWl0aXZlKFJl
Z2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogc3JjKTsKIAogICAgICAgICBSZXNvbHZlVHlwZSBy
ZXNvbHZlVHlwZSgpOwotICAgICAgICBSZWdpc3RlcklEKiBlbWl0UmVzb2x2ZUNvbnN0YW50TG9j
YWwoUmVnaXN0ZXJJRCogZHN0LCBjb25zdCBJZGVudGlmaWVyJiwgUmVzb2x2ZVNjb3BlSW5mbyYp
OwotICAgICAgICBSZWdpc3RlcklEKiBlbWl0UmVzb2x2ZVNjb3BlKFJlZ2lzdGVySUQqIGRzdCwg
Y29uc3QgSWRlbnRpZmllciYsIFJlc29sdmVTY29wZUluZm8mKTsKLSAgICAgICAgUmVnaXN0ZXJJ
RCogZW1pdEdldEZyb21TY29wZShSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHNjb3BlLCBj
b25zdCBJZGVudGlmaWVyJiwgUmVzb2x2ZU1vZGUsIGNvbnN0IFJlc29sdmVTY29wZUluZm8mKTsK
LSAgICAgICAgUmVnaXN0ZXJJRCogZW1pdFB1dFRvU2NvcGUoUmVnaXN0ZXJJRCogc2NvcGUsIGNv
bnN0IElkZW50aWZpZXImLCBSZWdpc3RlcklEKiB2YWx1ZSwgUmVzb2x2ZU1vZGUsIGNvbnN0IFJl
c29sdmVTY29wZUluZm8mKTsKKyAgICAgICAgUmVnaXN0ZXJJRCogZW1pdFJlc29sdmVDb25zdGFu
dExvY2FsKFJlZ2lzdGVySUQqIGRzdCwgY29uc3QgVmFyaWFibGUmKTsKKyAgICAgICAgUmVnaXN0
ZXJJRCogZW1pdFJlc29sdmVTY29wZShSZWdpc3RlcklEKiBkc3QsIGNvbnN0IFZhcmlhYmxlJik7
CisgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRHZXRGcm9tU2NvcGUoUmVnaXN0ZXJJRCogZHN0LCBS
ZWdpc3RlcklEKiBzY29wZSwgY29uc3QgVmFyaWFibGUmLCBSZXNvbHZlTW9kZSk7CisgICAgICAg
IFJlZ2lzdGVySUQqIGVtaXRQdXRUb1Njb3BlKFJlZ2lzdGVySUQqIHNjb3BlLCBjb25zdCBWYXJp
YWJsZSYsIFJlZ2lzdGVySUQqIHZhbHVlLCBSZXNvbHZlTW9kZSk7CiAKICAgICAgICAgUGFzc1Jl
ZlB0cjxMYWJlbD4gZW1pdExhYmVsKExhYmVsKik7CiAgICAgICAgIHZvaWQgZW1pdExvb3BIaW50
KCk7CkBAIC02MTMsOSArNjExLDEyIEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIC8vIEFk
ZHMgYSB2YXIgc2xvdCBhbmQgbWFwcyBpdCB0byB0aGUgbmFtZSBpZGVudCBpbiBzeW1ib2xUYWJs
ZSgpLgogICAgICAgICBlbnVtIFdhdGNoTW9kZSB7IElzV2F0Y2hhYmxlLCBOb3RXYXRjaGFibGUg
fTsKLSAgICAgICAgUmVnaXN0ZXJJRCogYWRkVmFyKGNvbnN0IElkZW50aWZpZXImLCBDb25zdGFu
dE1vZGUsIFdhdGNoTW9kZSk7Ci0KLSAgICAgICAgLy8gQWRkcyBhbiBhbm9ueW1vdXMgdmFyIHNs
b3QuIFRvIGdpdmUgdGhpcyBzbG90IGEgbmFtZSwgYWRkIGl0IHRvIHN5bWJvbFRhYmxlKCkuCisg
ICAgICAgIFNjb3BlT2Zmc2V0IGFkZFNjb3BlZFZhcihjb25zdCBJZGVudGlmaWVyJiBpZGVudCwg
Q29uc3RhbnRNb2RlIGNvbnN0YW50TW9kZSwgV2F0Y2hNb2RlIHdhdGhNb2RlKTsKKyAgICAgICAg
CisgICAgICAgIC8vIEFkZHMgYSBsb2NhbCB2YXIgc2xvdC4KKyAgICAgICAgUmVnaXN0ZXJJRCog
YWRkVmFyKGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBDb25zdGFudE1vZGUgY29uc3RhbnRNb2Rl
KTsKKyAgICAgICAgCisgICAgICAgIC8vIEFkZHMgYW4gYW5vbnltb3VzIGxvY2FsIHZhciBzbG90
LiBUbyBnaXZlIHRoaXMgc2xvdCBhIG5hbWUsIGFkZCBpdCB0byBzeW1ib2xUYWJsZSgpLgogICAg
ICAgICBSZWdpc3RlcklEKiBhZGRWYXIoKQogICAgICAgICB7CiAgICAgICAgICAgICArK21fY29k
ZUJsb2NrLT5tX251bVZhcnM7CkBAIC02MjUsMTQgKzYyNiwxNiBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIH0KIAotICAgICAgICAvLyBSZXR1
cm5zIHRoZSBpbmRleCBvZiB0aGUgYWRkZWQgdmFyLgotICAgICAgICB2b2lkIGFkZFBhcmFtZXRl
cihjb25zdCBJZGVudGlmaWVyJiwgaW50IHBhcmFtZXRlckluZGV4KTsKKyAgICAgICAgLy8gSW5p
dGlhbGl6ZXMgdGhlIHN0YWNrIGZvcm0gdGhlIHBhcmFtZXRlcjsgZG9lcyBub3RoaW5nIGZvciB0
aGUgc3ltYm9sIHRhYmxlLgorICAgICAgICBSZWdpc3RlcklEKiBpbml0aWFsaXplTmV4dFBhcmFt
ZXRlcigpOworICAgICAgICBTdHJpbmdJbXBsKiB2aXNpYmxlTmFtZUZvclBhcmFtZXRlcihEZWNv
bnN0cnVjdGlvblBhdHRlcm5Ob2RlKiBwYXR0ZXJuKTsKKyAgICAgICAgCiAgICAgICAgIFJlZ2lz
dGVySUQqIHJlc29sdmVDYWxsZWUoRnVuY3Rpb25Ob2RlKik7CiAgICAgICAgIHZvaWQgYWRkQ2Fs
bGVlKEZ1bmN0aW9uTm9kZSosIFJlZ2lzdGVySUQqKTsKIAogICAgICAgICB2b2lkIHByZXNlcnZl
TGFzdFZhcigpOwogCi0gICAgICAgIFJlZ2lzdGVySUQmIHJlZ2lzdGVyRm9yKGludCBpbmRleCkK
KyAgICAgICAgUmVnaXN0ZXJJRCYgcmVnaXN0ZXJGb3IoVmlydHVhbFJlZ2lzdGVyKQogICAgICAg
ICB7CiAgICAgICAgICAgICBpZiAob3BlcmFuZElzTG9jYWwoaW5kZXgpKQogICAgICAgICAgICAg
ICAgIHJldHVybiBtX2NhbGxlZVJlZ2lzdGVyc1tWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgpLnRvTG9j
YWwoKV07CkBAIC03MTYsMzAgKzcxOSw2IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIFJl
Z2lzdGVySUQqIGVtaXRUaHJvd0V4cHJlc3Npb25Ub29EZWVwRXhjZXB0aW9uKCk7CiAKLSAgICAg
ICAgdm9pZCBjcmVhdGVBcmd1bWVudHNJZk5lY2Vzc2FyeSgpOwotICAgICAgICBSZWdpc3RlcklE
KiBjcmVhdGVMYXp5UmVnaXN0ZXJJZk5lY2Vzc2FyeShSZWdpc3RlcklEKik7Ci0gICAgICAgIAot
ICAgICAgICBib29sIGhhc1dhdGNoYWJsZVZhcmlhYmxlKGludCBvcGVyYW5kKSBjb25zdAotICAg
ICAgICB7Ci0gICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnKG9wZXJhbmQpOwotICAgICAg
ICAgICAgaWYgKCFyZWcuaXNMb2NhbCgpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgICAgIGlmIChzdGF0aWNfY2FzdDxzaXplX3Q+KHJlZy50b0xvY2FsKCkpID49IG1f
d2F0Y2hhYmxlVmFyaWFibGVzLnNpemUoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IG1fd2F0Y2hhYmxlVmFyaWFi
bGVzW3JlZy50b0xvY2FsKCldOwotICAgICAgICAgICAgaWYgKGlkZW50LmlzTnVsbCgpKQotICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIEFTU0VSVChoYXNDb25zdGFu
dChpZGVudCkpOyAvLyBTaG91bGQgaGF2ZSBhbHJlYWR5IGJlZW4gYWRkZWQuCi0gICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgY29uc3QgSWRlbnRp
ZmllciYgd2F0Y2hhYmxlVmFyaWFibGVJZGVudGlmaWVyKGludCBvcGVyYW5kKSBjb25zdAotICAg
ICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQoaGFzV2F0Y2hhYmxlVmFyaWFibGUob3BlcmFuZCkp
OwotICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZyhvcGVyYW5kKTsKLSAgICAgICAgICAg
IHJldHVybiBtX3dhdGNoYWJsZVZhcmlhYmxlc1tyZWcudG9Mb2NhbCgpXTsKLSAgICAgICAgfQot
CiAgICAgcHJpdmF0ZToKICAgICAgICAgVmVjdG9yPFVubGlua2VkSW5zdHJ1Y3Rpb24sIDAsIFVu
c2FmZVZlY3Rvck92ZXJmbG93PiBtX2luc3RydWN0aW9uczsKIApAQCAtNzU4LDE0ICs3MzcsMTUg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFJlZ2lzdGVySUQgbV90aGlzUmVnaXN0ZXI7CiAg
ICAgICAgIFJlZ2lzdGVySUQgbV9jYWxsZWVSZWdpc3RlcjsKICAgICAgICAgUmVnaXN0ZXJJRCog
bV9zY29wZVJlZ2lzdGVyIHsgbnVsbHB0ciB9OworICAgICAgICBSZWdpc3RlcklEKiBtX2FyZ3Vt
ZW50c1JlZ2lzdGVyIHsgbnVsbHB0ciB9OwogICAgICAgICBSZWdpc3RlcklEKiBtX2xleGljYWxF
bnZpcm9ubWVudFJlZ2lzdGVyIHsgbnVsbHB0ciB9OwogICAgICAgICBSZWdpc3RlcklEKiBtX2Vt
cHR5VmFsdWVSZWdpc3RlciB7IG51bGxwdHIgfTsKICAgICAgICAgUmVnaXN0ZXJJRCogbV9nbG9i
YWxPYmplY3RSZWdpc3RlciB7IG51bGxwdHIgfTsKICAgICAgICAgUmVnaXN0ZXJJRCogbV9sb2Nh
bEFyZ3VtZW50c1JlZ2lzdGVyIHsgbnVsbHB0ciB9OwogCi0gICAgICAgIFZlY3RvcjxJZGVudGlm
aWVyLCAxNj4gbV93YXRjaGFibGVWYXJpYWJsZXM7CiAgICAgICAgIFNlZ21lbnRlZFZlY3RvcjxS
ZWdpc3RlcklELCAzMj4gbV9jb25zdGFudFBvb2xSZWdpc3RlcnM7CiAgICAgICAgIFNlZ21lbnRl
ZFZlY3RvcjxSZWdpc3RlcklELCAzMj4gbV9jYWxsZWVSZWdpc3RlcnM7CisgICAgICAgIHVuc2ln
bmVkIG1fbnVtQ2FwdHVyZWRWYXJpYWJsZXM7CiAgICAgICAgIFNlZ21lbnRlZFZlY3RvcjxSZWdp
c3RlcklELCAzMj4gbV9wYXJhbWV0ZXJzOwogICAgICAgICBTZWdtZW50ZWRWZWN0b3I8TGFiZWws
IDMyPiBtX2xhYmVsczsKICAgICAgICAgTGFiZWxTY29wZVN0b3JlIG1fbGFiZWxTY29wZXM7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0Nv
ZGVnZW4uY3BwCShyZXZpc2lvbiAxODA3MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk2Miw3ICs5NjIs
NyBAQCBSZWdpc3RlcklEKiBWb2lkTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjCiAgICAgcmV0dXJu
IGdlbmVyYXRvci5lbWl0TG9hZChkc3QsIGpzVW5kZWZpbmVkKCkpOwogfQogCi0vLyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVHlwZU9mVmFsdWVOb2RlIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVHlw
ZU9mUmVzb2x2ZU5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogUmVn
aXN0ZXJJRCogVHlwZU9mUmVzb2x2ZU5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRv
ciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Fic3RyYWN0SGVhcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQWJzdHJhY3RIZWFwLmgJKHJldmlzaW9uIDE4MDcyMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RIZWFwLmgJKHdvcmtpbmcgY29weSkKQEAg
LTQ3LDcgKzQ3LDYgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAgIG1hY3Jv
KFdvcmxkKSBcCiAgICAgbWFjcm8oU3RhY2spIFwKICAgICBtYWNybyhIZWFwKSBcCi0gICAgbWFj
cm8oQXJndW1lbnRzX3JlZ2lzdGVycykgXAogICAgIG1hY3JvKEJ1dHRlcmZseV9wdWJsaWNMZW5n
dGgpIFwKICAgICBtYWNybyhCdXR0ZXJmbHlfdmVjdG9yTGVuZ3RoKSBcCiAgICAgbWFjcm8oR2V0
dGVyU2V0dGVyX2dldHRlcikgXApAQCAtNjUsNyArNjQsOCBAQCBuYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIERGRyB7CiAgICAgbWFjcm8oSW5kZXhlZENvbnRpZ3VvdXNQcm9wZXJ0aWVzKSBcCiAg
ICAgbWFjcm8oSW5kZXhlZEFycmF5U3RvcmFnZVByb3BlcnRpZXMpIFwKICAgICBtYWNybyhBcnJh
eVN0b3JhZ2VQcm9wZXJ0aWVzKSBcCi0gICAgbWFjcm8oVmFyaWFibGVzKSBcCisgICAgbWFjcm8o
RGlyZWN0QXJndW1lbnRzUHJvcGVydGllcykgXAorICAgIG1hY3JvKFNjb3BlZEFyZ3VtZW50c1By
b3BlcnRpZXMpIFwKICAgICBtYWNybyhUeXBlZEFycmF5UHJvcGVydGllcykgXAogICAgIG1hY3Jv
KEhlYXBPYmplY3RDb3VudCkgLyogVXNlZCB0byByZWZsZWN0IHRoZSBmYWN0IHRoYXQgc29tZSBh
bGxvY2F0aW9ucyByZXZlYWwgb2JqZWN0IGlkZW50aXR5ICovXAogICAgIG1hY3JvKFJlZ0V4cFN0
YXRlKSBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJw
cmV0ZXJJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCShyZXZpc2lvbiAxODA3MjApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEwMzAsNyArMTAzMCw4IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRl
cjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgIGZv
ck5vZGUobm9kZSkuc2V0KG1fZ3JhcGgsIG1fZ3JhcGgubV92bS5zdHJpbmdTdHJ1Y3R1cmUuZ2V0
KCkpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czoK
KyAgICAgICAgY2FzZSBBcnJheTo6RGlyZWN0QXJndW1lbnRzOgorICAgICAgICBjYXNlIEFycmF5
OjpTY29wZWRBcmd1bWVudHM6CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VIZWFwVG9w
KCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6SW50MzI6CkBAIC0x
NjE3LDggKzE2MTgsMTEgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVU
eQogICAgICAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6CiAgICAgICAgIGNhc2UgQXJyYXk6
OlNsb3dQdXRBcnJheVN0b3JhZ2U6CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBB
cnJheTo6QXJndW1lbnRzOgotICAgICAgICAgICAgZmlsdGVyKG5vZGUtPmNoaWxkMSgpLCBTcGVj
QXJndW1lbnRzKTsKKyAgICAgICAgY2FzZSBBcnJheTo6RGlyZWN0QXJndW1lbnRzOgorICAgICAg
ICAgICAgZmlsdGVyKG5vZGUtPmNoaWxkMSgpLCBTcGVjRGlyZWN0QXJndW1lbnRzKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFycmF5OjpTY29wZWRBcmd1bWVudHM6CisgICAg
ICAgICAgICBmaWx0ZXIobm9kZS0+Y2hpbGQxKCksIFNwZWNTY29wZWRBcmd1bWVudHMpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkludDhBcnJheToKICAgICAgICAg
ICAgIGZpbHRlcihub2RlLT5jaGlsZDEoKSwgU3BlY0ludDhBcnJheSk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuY3BwCShyZXZpc2lvbiAxODA3MjApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE5Nyw4ICsxOTcsMTUgQEAgQXJyYXlNb2RlIEFycmF5TW9kZTo6cmVmaW5lKAogICAg
ICAgICBpZiAoaXNTdHJpbmdTcGVjdWxhdGlvbihiYXNlKSkKICAgICAgICAgICAgIHJldHVybiB3
aXRoVHlwZShBcnJheTo6U3RyaW5nKTsKICAgICAgICAgCi0gICAgICAgIGlmIChpc0FyZ3VtZW50
c1NwZWN1bGF0aW9uKGJhc2UpKQotICAgICAgICAgICAgcmV0dXJuIHdpdGhUeXBlKEFycmF5OjpB
cmd1bWVudHMpOworICAgICAgICBpZiAoaXNEaXJlY3RBcmd1bWVudHNTcGVjdWxhdGlvbihiYXNl
KSB8fCBpc1Njb3BlZEFyZ3VtZW50c1NwZWN1bGF0aW9uKGJhc2UpKSB7CisgICAgICAgICAgICAv
LyBIYW5kbGUgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBhcyBnZW5lcmljIGFjY2Vzc2VzLgorICAg
ICAgICAgICAgaWYgKGdyYXBoLmhhc0V4aXRTaXRlKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgT3V0
T2ZCb3VuZHMpIHx8ICFpc0luQm91bmRzKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIEFycmF5
TW9kZShBcnJheTo6R2VuZXJpYyk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChpc0Rp
cmVjdEFyZ3VtZW50c1NwZWN1bGF0aW9uKGJhc2UpKQorICAgICAgICAgICAgICAgIHJldHVybiB3
aXRoVHlwZShBcnJheTo6RGlyZWN0QXJndW1lbnRzKTsKKyAgICAgICAgICAgIHJldHVybiB3aXRo
VHlwZShBcnJheTo6U2NvcGVkQXJndW1lbnRzKTsKKyAgICAgICAgfQogICAgICAgICAKICAgICAg
ICAgQXJyYXlNb2RlIHJlc3VsdDsKICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CkBAIC0z
OTYsOCArNDAzLDExIEBAIGJvb2wgQXJyYXlNb2RlOjphbHJlYWR5Q2hlY2tlZChHcmFwaCYgZ3IK
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9IH0KICAgICAgICAgCi0gICAgY2Fz
ZSBBcnJheTo6QXJndW1lbnRzOgotICAgICAgICByZXR1cm4gc3BlY3VsYXRpb25DaGVja2VkKHZh
bHVlLm1fdHlwZSwgU3BlY0FyZ3VtZW50cyk7CisgICAgY2FzZSBBcnJheTo6RGlyZWN0QXJndW1l
bnRzOgorICAgICAgICByZXR1cm4gc3BlY3VsYXRpb25DaGVja2VkKHZhbHVlLm1fdHlwZSwgU3Bl
Y0RpcmVjdEFyZ3VtZW50cyk7CisgICAgICAgIAorICAgIGNhc2UgQXJyYXk6OlNjb3BlZEFyZ3Vt
ZW50czoKKyAgICAgICAgcmV0dXJuIHNwZWN1bGF0aW9uQ2hlY2tlZCh2YWx1ZS5tX3R5cGUsIFNw
ZWNTY29wZWRBcmd1bWVudHMpOwogICAgICAgICAKICAgICBjYXNlIEFycmF5OjpJbnQ4QXJyYXk6
CiAgICAgICAgIHJldHVybiBzcGVjdWxhdGlvbkNoZWNrZWQodmFsdWUubV90eXBlLCBTcGVjSW50
OEFycmF5KTsKQEAgLTQ2MSw4ICs0NzEsMTAgQEAgY29uc3QgY2hhciogYXJyYXlUeXBlVG9TdHJp
bmcoQXJyYXk6OlR5cAogICAgICAgICByZXR1cm4gIkFycmF5U3RvcmFnZSI7CiAgICAgY2FzZSBB
cnJheTo6U2xvd1B1dEFycmF5U3RvcmFnZToKICAgICAgICAgcmV0dXJuICJTbG93UHV0QXJyYXlT
dG9yYWdlIjsKLSAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6Ci0gICAgICAgIHJldHVybiAiQXJn
dW1lbnRzIjsKKyAgICBjYXNlIEFycmF5OjpEaXJlY3RBcmd1bWVudHM6CisgICAgICAgIHJldHVy
biAiRGlyZWN0QXJndW1lbnRzIjsKKyAgICBjYXNlIEFycmF5OjpTY29wZWRBcmd1bWVudHM6Cisg
ICAgICAgIHJldHVybiAiU2NvcGVkQXJndW1lbnRzIjsKICAgICBjYXNlIEFycmF5OjpJbnQ4QXJy
YXk6CiAgICAgICAgIHJldHVybiAiSW50OEFycmF5IjsKICAgICBjYXNlIEFycmF5OjpJbnQxNkFy
cmF5OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5oCShyZXZp
c2lvbiAxODA3MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MiwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTItMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY1LDcgKzY1LDkgQEAgZW51bSBUeXBlIHsKICAg
ICBBcnJheVN0b3JhZ2UsCiAgICAgU2xvd1B1dEFycmF5U3RvcmFnZSwKICAgICAKLSAgICBBcmd1
bWVudHMsCisgICAgRGlyZWN0QXJndW1lbnRzLAorICAgIFNjb3BlZEFyZ3VtZW50cywKKyAgICAK
ICAgICBJbnQ4QXJyYXksCiAgICAgSW50MTZBcnJheSwKICAgICBJbnQzMkFycmF5LApAQCAtMjk0
LDcgKzI5Niw4IEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBBcnJheTo6VW5wcm9maWxlZDoKICAg
ICAgICAgY2FzZSBBcnJheTo6Rm9yY2VFeGl0OgogICAgICAgICBjYXNlIEFycmF5OjpHZW5lcmlj
OgotICAgICAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6CisgICAgICAgIGNhc2UgQXJyYXk6OkRp
cmVjdEFyZ3VtZW50czoKKyAgICAgICAgY2FzZSBBcnJheTo6U2NvcGVkQXJndW1lbnRzOgogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgcmV0
dXJuIHRydWU7CkBAIC0zMjAsMTEgKzMyMyw5IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHN3
aXRjaCAodHlwZSgpKSB7CiAgICAgICAgIGNhc2UgQXJyYXk6OlN0cmluZzoKKyAgICAgICAgY2Fz
ZSBBcnJheTo6RGlyZWN0QXJndW1lbnRzOgorICAgICAgICBjYXNlIEFycmF5OjpTY29wZWRBcmd1
bWVudHM6CiAgICAgICAgICAgICByZXR1cm4gQXJyYXlNb2RlKEFycmF5OjpHZW5lcmljKTsKLSNp
ZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgICAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6Ci0gICAg
ICAgICAgICByZXR1cm4gQXJyYXlNb2RlKEFycmF5OjpHZW5lcmljKTsKLSNlbmRpZgogICAgICAg
ICBkZWZhdWx0OgogICAgICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICAgICB9CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkocmV2aXNpb24gMTgwNzIw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQ2NiwxMCArNDY2LDE0IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgs
IE5vZGUqIG5vZGUKICAgICAgICAgICAgIGRlZihQdXJlVmFsdWUobm9kZSwgbW9kZS5hc1dvcmQo
KSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQXJy
YXk6OkFyZ3VtZW50czoKLSAgICAgICAgICAgIHJlYWQoQXJndW1lbnRzX3JlZ2lzdGVycyk7Ci0g
ICAgICAgICAgICByZWFkKFZhcmlhYmxlcyk7Ci0gICAgICAgICAgICBkZWYoSGVhcExvY2F0aW9u
KEluZGV4ZWRQcm9wZXJ0eUxvYywgVmFyaWFibGVzLCBub2RlLT5jaGlsZDEoKSwgbm9kZS0+Y2hp
bGQyKCkpLCBub2RlKTsKKyAgICAgICAgY2FzZSBBcnJheTo6RGlyZWN0QXJndW1lbnRzOgorICAg
ICAgICAgICAgcmVhZChEaXJlY3RBcmd1bWVudHNQcm9wZXJ0aWVzKTsKKyAgICAgICAgICAgIGRl
ZihIZWFwTG9jYXRpb24oSW5kZXhlZFByb3BlcnR5TG9jLCBEaXJlY3RBcmd1bWVudHNQcm9wZXJ0
aWVzLCBub2RlLT5jaGlsZDEoKSwgbm9kZS0+Y2hpbGQyKCkpLCBub2RlKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEFycmF5OjpTY29wZWRBcmd1bWVu
dHM6CisgICAgICAgICAgICByZWFkKFNjb3BlZEFyZ3VtZW50c1Byb3BlcnRpZXMpOworICAgICAg
ICAgICAgZGVmKEhlYXBMb2NhdGlvbihJbmRleGVkUHJvcGVydHlMb2MsIFNjb3BlZEFyZ3VtZW50
c1Byb3BlcnRpZXMsIG5vZGUtPmNoaWxkMSgpLCBub2RlLT5jaGlsZDIoKSksIG5vZGUpOwogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQXJyYXk6OkludDMy
OgpAQCAtNTYwLDEzICs1NjQsNiBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2Rl
KiBub2RlCiAgICAgICAgICAgICB3cml0ZShIZWFwKTsKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgICAgIAotICAgICAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6Ci0gICAgICAgICAgICBy
ZWFkKEFyZ3VtZW50c19yZWdpc3RlcnMpOwotICAgICAgICAgICAgcmVhZChNaXNjRmllbGRzKTsK
LSAgICAgICAgICAgIHdyaXRlKFZhcmlhYmxlcyk7Ci0gICAgICAgICAgICBkZWYoSGVhcExvY2F0
aW9uKEluZGV4ZWRQcm9wZXJ0eUxvYywgVmFyaWFibGVzLCBiYXNlLCBpbmRleCksIHZhbHVlKTsK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFycmF5OjpJ
bnQzMjoKICAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5pc091dE9mQm91bmRzKCkp
IHsKICAgICAgICAgICAgICAgICByZWFkKFdvcmxkKTsKQEAgLTc2MSw3ICs3NTgsOCBAQCB2b2lk
IGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgICAgICAgICBkZWYoUHVy
ZVZhbHVlKG5vZGUsIG1vZGUuYXNXb3JkKCkpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgICAgIAotICAgICAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6CisgICAgICAgIGNhc2UgQXJy
YXk6OkRpcmVjdEFyZ3VtZW50czoKKyAgICAgICAgY2FzZSBBcnJheTo6U2NvcGVkQXJndW1lbnRz
OgogICAgICAgICAgICAgcmVhZChNaXNjRmllbGRzKTsKICAgICAgICAgICAgIGRlZihIZWFwTG9j
YXRpb24oQXJyYXlMZW5ndGhMb2MsIE1pc2NGaWVsZHMsIG5vZGUtPmNoaWxkMSgpKSwgbm9kZSk7
CiAgICAgICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0ZpeHVwUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHRml4dXBQaGFzZS5jcHAJKHJldmlzaW9uIDE4MDcyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY4Miw3ICs2ODIs
NiBAQCBwcml2YXRlOgogICAgICAgICAgICAgY2FzZSBBcnJheTo6Q29udGlndW91czoKICAgICAg
ICAgICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZToKICAgICAgICAgICAgIGNhc2UgQXJyYXk6
OlNsb3dQdXRBcnJheVN0b3JhZ2U6Ci0gICAgICAgICAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6
CiAgICAgICAgICAgICAgICAgZml4RWRnZTxLbm93bkNlbGxVc2U+KGNoaWxkMSk7CiAgICAgICAg
ICAgICAgICAgZml4RWRnZTxJbnQzMlVzZT4oY2hpbGQyKTsKICAgICAgICAgICAgICAgICBpbnNl
cnRTdG9yZUJhcnJpZXIobV9pbmRleEluQmxvY2ssIGNoaWxkMSwgY2hpbGQzKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAko
cmV2aXNpb24gMTgwNzIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjU5OCw4ICsyNTk4LDExIEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgY2FzZSBBcnJheTo6
U3RyaW5nOgogICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25TdHJpbmcobm9kZSk7CiAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6QXJndW1lbnRzOgotICAgICAgICAg
ICAgY29tcGlsZUdldEJ5VmFsT25Bcmd1bWVudHMobm9kZSk7CisgICAgICAgIGNhc2UgQXJyYXk6
OkRpcmVjdEFyZ3VtZW50czoKKyAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uRGlyZWN0QXJn
dW1lbnRzKG5vZGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQXJyYXk6OlNj
b3BlZEFyZ3VtZW50czoKKyAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uU2NvcGVkQXJndW1l
bnRzKG5vZGUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6IHsKICAgICAg
ICAgICAgIFR5cGVkQXJyYXlUeXBlIHR5cGUgPSBub2RlLT5hcnJheU1vZGUoKS50eXBlZEFycmF5
VHlwZSgpOwpAQCAtMjgyOSw0NyArMjgzMiw2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGUoTm9kZSogbm9kZSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAg
ICAKLSAgICAgICAgY2FzZSBBcnJheTo6QXJndW1lbnRzOiB7Ci0gICAgICAgICAgICBKU1ZhbHVl
T3BlcmFuZCB2YWx1ZSh0aGlzLCBjaGlsZDMpOwotICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHNj
cmF0Y2godGhpcyk7Ci0gICAgICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaDIodGhpcyk7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIEdQUlJlZyB2YWx1ZVJlZyA9IHZhbHVlLmdwcigpOwot
ICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hSZWcgPSBzY3JhdGNoLmdwcigpOwotICAgICAgICAg
ICAgR1BSUmVnIHNjcmF0Y2gyUmVnID0gc2NyYXRjaDIuZ3ByKCk7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0K
LSAgICAgICAgICAgIC8vIFR3byByZWFsbHkgbGFtZSBjaGVja3MuCi0gICAgICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKAotICAgICAgICAgICAgICAgIFVuY291bnRhYmxlLCBKU1ZhbHVlU291cmNl
KCksIDAsCi0gICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoMzIoCi0gICAgICAgICAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLAotICAgICAgICAg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBBcmd1bWVudHM6Om9m
ZnNldE9mTnVtQXJndW1lbnRzKCkpKSk7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAot
ICAgICAgICAgICAgICAgIFVuY291bnRhYmxlLCBKU1ZhbHVlU291cmNlKCksIDAsCi0gICAgICAg
ICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdFB0cigKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6Ok5vblplcm8sCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKAotICAgICAgICAgICAgICAgICAgICAgICAgYmFzZVJlZywgQXJndW1lbnRzOjpvZmZz
ZXRPZlNsb3dBcmd1bWVudERhdGEoKSkpKTsKLQotICAgICAgICAgICAgbV9qaXQubW92ZShwcm9w
ZXJ0eVJlZywgc2NyYXRjaDJSZWcpOwotICAgICAgICAgICAgbV9qaXQuc2lnbkV4dGVuZDMyVG9Q
dHIoc2NyYXRjaDJSZWcsIHNjcmF0Y2gyUmVnKTsKLSAgICAgICAgICAgIG1faml0LmxvYWRQdHIo
Ci0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgQXJndW1l
bnRzOjpvZmZzZXRPZlJlZ2lzdGVycygpKSwKLSAgICAgICAgICAgICAgICBzY3JhdGNoUmVnKTsK
LSAgICAgICAgICAgIAotICAgICAgICAgICAgbV9qaXQuc3RvcmU2NCgKLSAgICAgICAgICAgICAg
ICB2YWx1ZVJlZywKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KAot
ICAgICAgICAgICAgICAgICAgICBzY3JhdGNoUmVnLCBzY3JhdGNoMlJlZywgTWFjcm9Bc3NlbWJs
ZXI6OlRpbWVzRWlnaHQsCi0gICAgICAgICAgICAgICAgICAgIENhbGxGcmFtZTo6dGhpc0FyZ3Vt
ZW50T2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpICsgc2l6ZW9mKFJlZ2lzdGVyKSkpOwotICAg
ICAgICAgICAgCi0gICAgICAgICAgICBub1Jlc3VsdChub2RlKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0gICAgICAgICAgICAKICAgICAgICAgZGVmYXVsdDogewogICAgICAgICAg
ICAgVHlwZWRBcnJheVR5cGUgdHlwZSA9IGFycmF5TW9kZS50eXBlZEFycmF5VHlwZSgpOwogICAg
ICAgICAgICAgaWYgKGlzSW50KHR5cGUpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDE4MDcyMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC03MjIsOSArNzIyLDEyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNoZWNrQXJyYXkoTm9k
ZSogbm8KICAgICAgICAgbm9SZXN1bHQobV9jdXJyZW50Tm9kZSk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9Ci0gICAgY2FzZSBBcnJheTo6QXJndW1lbnRzOgotICAgICAgICBzcGVjdWxhdGVDZWxs
VHlwZVdpdGhvdXRUeXBlRmlsdGVyaW5nKG5vZGUtPmNoaWxkMSgpLCBiYXNlUmVnLCBBcmd1bWVu
dHNUeXBlKTsKLQorICAgIGNhc2UgQXJyYXk6OkRpcmVjdEFyZ3VtZW50czoKKyAgICAgICAgc3Bl
Y3VsYXRlQ2VsbFR5cGVXaXRob3V0VHlwZUZpbHRlcmluZyhub2RlLT5jaGlsZDEoKSwgYmFzZVJl
ZywgRGlyZWN0QXJndW1lbnRzVHlwZSk7CisgICAgICAgIG5vUmVzdWx0KG1fY3VycmVudE5vZGUp
OworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBcnJheTo6U2NvcGVkQXJndW1lbnRzOgorICAg
ICAgICBzcGVjdWxhdGVDZWxsVHlwZVdpdGhvdXRUeXBlRmlsdGVyaW5nKG5vZGUtPmNoaWxkMSgp
LCBiYXNlUmVnLCBTY29wZWRBcmd1bWVudHNUeXBlKTsKICAgICAgICAgbm9SZXN1bHQobV9jdXJy
ZW50Tm9kZSk7CiAgICAgICAgIHJldHVybjsKICAgICBkZWZhdWx0OgpAQCAtNDA4OCw3ICs0MDkx
LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldFR5cGVkQXJyYQogICAgIGludDMy
UmVzdWx0KHZlY3RvckdQUiwgbm9kZSk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVHZXRCeVZhbE9uQXJndW1lbnRzKE5vZGUqIG5vZGUpCit2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlR2V0QnlWYWxPbkRpcmVjdEFyZ3VtZW50cyhOb2RlKiBub2RlKQogewogICAgIFNwZWN1
bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgIFNwZWN1bGF0
ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBub2RlLT5jaGlsZDIoKSk7CkBAIC00
MTAzLDgwICs0MTA2LDg5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9u
QXIKICAgICBHUFJSZWcgcmVzdWx0UmVnID0gcmVzdWx0LmdwcigpOwogI2lmIFVTRShKU1ZBTFVF
MzJfNjQpCiAgICAgR1BSUmVnIHJlc3VsdFRhZ1JlZyA9IHJlc3VsdFRhZy5ncHIoKTsKKyAgICBK
U1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVzdWx0VGFnUmVnLCByZXN1bHRS
ZWcpOworI2Vsc2UKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVz
dWx0UmVnKTsKICNlbmRpZgogICAgIEdQUlJlZyBzY3JhdGNoUmVnID0gc2NyYXRjaC5ncHIoKTsK
ICAgICAKICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCiAgICAgICAgIHJldHVybjsKLSAgCi0gICAg
QVNTRVJUKEFycmF5TW9kZShBcnJheTo6QXJndW1lbnRzKS5hbHJlYWR5Q2hlY2tlZChtX2ppdC5n
cmFwaCgpLCBub2RlLCBtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpKSk7CiAgICAgCi0g
ICAgLy8gVHdvIHJlYWxseSBsYW1lIGNoZWNrcy4KLSAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAg
ICAgICBFeG90aWNPYmplY3RNb2RlLCBKU1ZhbHVlU291cmNlKCksIDAsCi0gICAgICAgIG1faml0
LmJyYW5jaDMyKAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJv
cGVydHlSZWcsCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBB
cmd1bWVudHM6Om9mZnNldE9mTnVtQXJndW1lbnRzKCkpKSk7CisgICAgQVNTRVJUKEFycmF5TW9k
ZShBcnJheTo6RGlyZWN0QXJndW1lbnRzKS5hbHJlYWR5Q2hlY2tlZChtX2ppdC5ncmFwaCgpLCBu
b2RlLCBtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpKSk7CisgICAgCiAgICAgc3BlY3Vs
YXRpb25DaGVjaygKICAgICAgICAgRXhvdGljT2JqZWN0TW9kZSwgSlNWYWx1ZVNvdXJjZSgpLCAw
LAogICAgICAgICBtX2ppdC5icmFuY2hUZXN0UHRyKAogICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6Ok5vblplcm8sCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcygKLSAgICAg
ICAgICAgICAgICBiYXNlUmVnLCBBcmd1bWVudHM6Om9mZnNldE9mU2xvd0FyZ3VtZW50RGF0YSgp
KSkpOwotICAgIAotICAgIG1faml0Lm1vdmUocHJvcGVydHlSZWcsIHJlc3VsdFJlZyk7Ci0gICAg
bV9qaXQuc2lnbkV4dGVuZDMyVG9QdHIocmVzdWx0UmVnLCByZXN1bHRSZWcpOwotICAgIG1faml0
LmxvYWRQdHIoCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEFyZ3Vt
ZW50czo6b2Zmc2V0T2ZSZWdpc3RlcnMoKSksCi0gICAgICAgIHNjcmF0Y2hSZWcpOworICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgRGlyZWN0QXJndW1lbnRzOjpv
ZmZzZXRPZk92ZXJyaWRlcygpKSkpOworICAgIHNwZWN1bGF0aW9uQ2hlY2soCisgICAgICAgIEV4
b3RpY09iamVjdE1vZGUsIEpTVmFsdWVTb3VyY2UoKSwgMCwKKyAgICAgICAgbV9qaXQuYnJhbmNo
MzIoCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJl
ZywKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIERpcmVjdEFy
Z3VtZW50czo6b2Zmc2V0T2ZMZW5ndGgoKSkpKTsKICAgICAKLSNpZiBVU0UoSlNWQUxVRTMyXzY0
KQotICAgIG1faml0LmxvYWQzMigKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleCgK
LSAgICAgICAgICAgIHNjcmF0Y2hSZWcsIHJlc3VsdFJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVz
RWlnaHQsCi0gICAgICAgICAgICBDYWxsRnJhbWU6OnRoaXNBcmd1bWVudE9mZnNldCgpICogc2l6
ZW9mKFJlZ2lzdGVyKSArIHNpemVvZihSZWdpc3RlcikgKwotICAgICAgICAgICAgT0JKRUNUX09G
RlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLAotICAgICAgICByZXN1bHRUYWdSZWcpOwot
ICAgIG1faml0LmxvYWQzMigKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleCgKLSAg
ICAgICAgICAgIHNjcmF0Y2hSZWcsIHJlc3VsdFJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWln
aHQsCi0gICAgICAgICAgICBDYWxsRnJhbWU6OnRoaXNBcmd1bWVudE9mZnNldCgpICogc2l6ZW9m
KFJlZ2lzdGVyKSArIHNpemVvZihSZWdpc3RlcikgKwotICAgICAgICAgICAgT0JKRUNUX09GRlNF
VE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwKLSAgICAgICAgcmVzdWx0UmVnKTsKLSAg
ICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFRhZ1JlZywgcmVzdWx0UmVnLCBub2RlKTsKLSNlbHNlCi0g
ICAgbV9qaXQubG9hZDY0KAorICAgIG1faml0LmxvYWRWYWx1ZSgKICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkJhc2VJbmRleCgKLSAgICAgICAgICAgIHNjcmF0Y2hSZWcsIHJlc3VsdFJlZywgTWFj
cm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsCi0gICAgICAgICAgICBDYWxsRnJhbWU6OnRoaXNBcmd1
bWVudE9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSArIHNpemVvZihSZWdpc3RlcikpLAotICAg
ICAgICByZXN1bHRSZWcpOwotICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVnLCBub2RlKTsKLSNl
bmRpZgorICAgICAgICAgICAgYmFzZVJlZywgcHJvcGVydHlSZWcsIFRpbWVzRWlnaHQsIERpcmVj
dEFyZ3VtZW50czo6c3RvcmFnZU9mZnNldCgpKSwKKyAgICAgICAgcmVzdWx0UmVncyk7CisgICAg
CisgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBub2RlKTsKIH0KIAotdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZUdldEFyZ3VtZW50c0xlbmd0aChOb2RlKiBub2RlKQordm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25TY29wZWRBcmd1bWVudHMoTm9kZSogbm9kZSkK
IHsKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsK
LSAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIFJldXNlLCBiYXNlKTsKKyAgICBTcGVjdWxh
dGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbm9kZS0+Y2hpbGQyKCkpOworICAg
IEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICBH
UFJUZW1wb3JhcnkgcmVzdWx0VGFnKHRoaXMpOworI2VuZGlmCisgICAgR1BSVGVtcG9yYXJ5IHNj
cmF0Y2godGhpcyk7CisgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2gyKHRoaXMpOwogICAgIAogICAg
IEdQUlJlZyBiYXNlUmVnID0gYmFzZS5ncHIoKTsKKyAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBw
cm9wZXJ0eS5ncHIoKTsKICAgICBHUFJSZWcgcmVzdWx0UmVnID0gcmVzdWx0LmdwcigpOworI2lm
IFVTRShKU1ZBTFVFMzJfNjQpCisgICAgR1BSUmVnIHJlc3VsdFRhZ1JlZyA9IHJlc3VsdFRhZy5n
cHIoKTsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVzdWx0VGFn
UmVnLCByZXN1bHRSZWcpOworI2Vsc2UKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNW
YWx1ZVJlZ3MocmVzdWx0UmVnKTsKKyNlbmRpZgorICAgIEdQUlJlZyBzY3JhdGNoUmVnID0gc2Ny
YXRjaC5ncHIoKTsKKyAgICBHUFJSZWcgc2NyYXRjaDJSZWcgPSBzY3JhdGNoMi5ncHIoKTsKICAg
ICAKICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBB
U1NFUlQoQXJyYXlNb2RlKEFycmF5OjpBcmd1bWVudHMpLmFscmVhZHlDaGVja2VkKG1faml0Lmdy
YXBoKCksIG5vZGUsIG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSkpKTsKKyAgICBBU1NF
UlQoQXJyYXlNb2RlKEFycmF5OjpTY29wZWRBcmd1bWVudHMpLmFscmVhZHlDaGVja2VkKG1faml0
LmdyYXBoKCksIG5vZGUsIG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSkpKTsKKyAgICAK
KyAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIFNjb3Bl
ZEFyZ3VtZW50czo6b2Zmc2V0T2ZUYWJsZSgpKSwgc2NyYXRjaFJlZyk7CisgICAgbV9qaXQubG9h
ZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBTY29wZWRBcmd1bWVudHM6Om9m
ZnNldE9mU2NvcGUoKSksIHNjcmF0Y2gyUmVnKTsKICAgICAKICAgICBzcGVjdWxhdGlvbkNoZWNr
KAogICAgICAgICBFeG90aWNPYmplY3RNb2RlLCBKU1ZhbHVlU291cmNlKCksIDAsCi0gICAgICAg
IG1faml0LmJyYW5jaFRlc3Q4KAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8s
Ci0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBBcmd1bWVudHM6
Om9mZnNldE9mT3ZlcnJvZGVMZW5ndGgoKSkpKTsKKyAgICAgICAgbV9qaXQuYnJhbmNoMzIoCisg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywKKyAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKFNjb3BlZEFyZ3VtZW50c1RhYmxlOjpv
ZmZzZXRPZkxlbmd0aCgpKSkpOworICAgIAorICAgIG1faml0LmxvYWRQdHIoCisgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hSZWcsIFNjb3BlZEFyZ3VtZW50c1RhYmxlOjpv
ZmZzZXRPZkFyZ3VtZW50cygpKSwKKyAgICAgICAgc2NyYXRjaFJlZyk7CisgICAgbV9qaXQubG9h
ZDMyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc2NyYXRjaFJlZywgcHJvcGVydHlSZWcsIFRp
bWVzRm91ciksIHNjcmF0Y2hSZWcpOworICAgIAorICAgIHNwZWN1bGF0aW9uQ2hlY2soCisgICAg
ICAgIEV4b3RpY09iamVjdE1vZGUsIEpTVmFsdWVTb3VyY2UoKSwgMCwKKyAgICAgICAgbV9qaXQu
YnJhbmNoMzIoCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHNjcmF0Y2hSZWcs
IFRydXN0ZWRJbW0zMihTY29wZU9mZnNldDo6aW52YWxpZE9mZnNldCkpKTsKKyAgICAKKyAgICBt
X2ppdC5sb2FkVmFsdWUoCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoCisgICAg
ICAgICAgICBiYXNlMlJlZywgcHJvcGVydHlSZWcsIFRpbWVzRWlnaHQsIEpTRW52aXJvbm1lbnRS
ZWNvcmQ6Om9mZnNldE9mVmFyaWFibGVzKCkpLAorICAgICAgICByZXN1bHRSZWdzKTsKICAgICAK
LSAgICBtX2ppdC5sb2FkMzIoCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VS
ZWcsIEFyZ3VtZW50czo6b2Zmc2V0T2ZOdW1Bcmd1bWVudHMoKSksCi0gICAgICAgIHJlc3VsdFJl
Zyk7Ci0gICAgaW50MzJSZXN1bHQocmVzdWx0UmVnLCBub2RlKTsKKyAgICBqc1ZhbHVlUmVzdWx0
KHJlc3VsdFJlZ3MsIG5vZGUpOwogfQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0
U2NvcGUoTm9kZSogbm9kZSkKQEAgLTQyMzIsOCArNDI0NCw1NiBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlR2V0QXJyYXlMZW5nCiAgICAgICAgIGludDMyUmVzdWx0KHJlc3VsdEdQUiwg
bm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6
IHsKLSAgICAgICAgY29tcGlsZUdldEFyZ3VtZW50c0xlbmd0aChub2RlKTsKKyAgICBjYXNlIEFy
cmF5OjpEaXJlY3RBcmd1bWVudHM6IHsKKyAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFz
ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhp
cywgUmV1c2UsIGJhc2UpOworICAgICAgICAKKyAgICAgICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNl
LmdwcigpOworICAgICAgICBHUFJSZWcgcmVzdWx0UmVnID0gcmVzdWx0LmdwcigpOworICAgICAg
ICAKKyAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQorICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAKKyAgICAgICAgQVNTRVJUKEFycmF5TW9kZShBcnJheTo6RGlyZWN0QXJndW1lbnRzKS5h
bHJlYWR5Q2hlY2tlZChtX2ppdC5ncmFwaCgpLCBub2RlLCBtX3N0YXRlLmZvck5vZGUobm9kZS0+
Y2hpbGQxKCkpKSk7CisgICAgICAgIAorICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAorICAgICAg
ICAgICAgRXhvdGljT2JqZWN0TW9kZSwgSlNWYWx1ZVNvdXJjZSgpLCAwLAorICAgICAgICAgICAg
bV9qaXQuYnJhbmNoVGVzdFB0cigKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm9u
WmVybywKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBE
aXJlY3RBcmd1bWVudHM6Om9mZnNldE9mT3ZlcnJpZGVzKCkpKSk7CisgICAgICAgIAorICAgICAg
ICBtX2ppdC5sb2FkMzIoCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNl
UmVnLCBEaXJlY3RBcmd1bWVudHM6Om9mZnNldE9mTGVuZ3RoKCkpLCByZXN1bHRSZWcpOworICAg
ICAgICAKKyAgICAgICAgaW50MzJSZXN1bHQocmVzdWx0UmVnLCBub2RlKTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorICAgIGNhc2UgQXJyYXk6OlNjb3BlZEFyZ3VtZW50czogeworICAgICAgICBT
cGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAg
R1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBSZXVzZSwgYmFzZSk7CisgICAgICAgIAorICAgICAg
ICBHUFJSZWcgYmFzZVJlZyA9IGJhc2UuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRSZWcg
PSByZXN1bHQuZ3ByKCk7CisgICAgICAgIAorICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBBU1NFUlQoQXJyYXlNb2RlKEFy
cmF5OjpTY29wZWRBcmd1bWVudHMpLmFscmVhZHlDaGVja2VkKG1faml0LmdyYXBoKCksIG5vZGUs
IG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSkpKTsKKyAgICAgICAgCisgICAgICAgIHNw
ZWN1bGF0aW9uQ2hlY2soCisgICAgICAgICAgICBFeG90aWNPYmplY3RNb2RlLCBKU1ZhbHVlU291
cmNlKCksIDAsCisgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0OCgKKyAgICAgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhiYXNlUmVnLCBTY29wZWRBcmd1bWVudHM6Om9mZnNldE9mT3ZlcnJvZGVUaGlu
Z3MoKSkpKTsKKyAgICAgICAgCisgICAgICAgIG1faml0LmxvYWRQdHIoCisgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBTY29wZWRBcmd1bWVudHM6Om9mZnNldE9m
VGFibGUoKSksIHJlc3VsdFJlZyk7CisgICAgICAgIAorICAgICAgICBtX2ppdC5sb2FkMzIoCisg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRSZWcsIFNjb3BlZEFyZ3Vt
ZW50c1RhYmxlOjpvZmZzZXRPZkxlbmd0aCgpKSwKKyAgICAgICAgICAgIHJlc3VsdFJlZyk7Cisg
ICAgICAgIAorICAgICAgICBpbnQzMlJlc3VsdChyZXN1bHRSZWcsIG5vZGUpOwogICAgICAgICBi
cmVhazsKICAgICB9CiAgICAgZGVmYXVsdDogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24gMTgwNzIwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yMTUyLDggKzIxNTIsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBjb21waWxlR2V0QnlWYWxPblN0
cmluZyhOb2RlKik7CiAgICAgdm9pZCBjb21waWxlRnJvbUNoYXJDb2RlKE5vZGUqKTsgCiAKLSAg
ICB2b2lkIGNvbXBpbGVHZXRCeVZhbE9uQXJndW1lbnRzKE5vZGUqKTsKLSAgICB2b2lkIGNvbXBp
bGVHZXRBcmd1bWVudHNMZW5ndGgoTm9kZSopOworICAgIHZvaWQgY29tcGlsZUdldEJ5VmFsT25E
aXJlY3RBcmd1bWVudHMoTm9kZSopOworICAgIHZvaWQgY29tcGlsZUdldEJ5VmFsT25TY29wZWRB
cmd1bWVudHMoTm9kZSopOworICAgIAogICAgIHZvaWQgY29tcGlsZUdldFNjb3BlKE5vZGUqKTsK
ICAgICB2b2lkIGNvbXBpbGVTa2lwU2NvcGUoTm9kZSopOwogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuaAkocmV2
aXNpb24gMTgwNzIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhl
YXBSZXBvc2l0b3J5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDYsNiArNDYsOCBAQCBuYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAgICAgbWFjcm8oQnV0dGVyZmx5X3B1YmxpY0xlbmd0
aCwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSBcCiAgICAgbWFjcm8oQnV0dGVy
Zmx5X3ZlY3Rvckxlbmd0aCwgQnV0dGVyZmx5OjpvZmZzZXRPZlZlY3Rvckxlbmd0aCgpKSBcCiAg
ICAgbWFjcm8oQ2FsbEZyYW1lX2NhbGxlckZyYW1lLCBDYWxsRnJhbWU6OmNhbGxlckZyYW1lT2Zm
c2V0KCkpIFwKKyAgICBtYWNybyhEaXJlY3RBcmd1bWVudHNfbGVuZ3RoLCBEaXJlY3RBcmd1bWVu
dHM6Om9mZnNldE9mTGVuZ3RoKCkpIFwKKyAgICBtYWNybyhEaXJlY3RBcmd1bWVudHNfb3ZlcnJp
ZGVzLCBEaXJlY3RBcmd1bWVudHM6Om9mZnNldE9mT3ZlcnJpZGVzKCkpIFwKICAgICBtYWNybyhH
ZXR0ZXJTZXR0ZXJfZ2V0dGVyLCBHZXR0ZXJTZXR0ZXI6Om9mZnNldE9mR2V0dGVyKCkpIFwKICAg
ICBtYWNybyhHZXR0ZXJTZXR0ZXJfc2V0dGVyLCBHZXR0ZXJTZXR0ZXI6Om9mZnNldE9mU2V0dGVy
KCkpIFwKICAgICBtYWNybyhKU0FycmF5QnVmZmVyVmlld19sZW5ndGgsIEpTQXJyYXlCdWZmZXJW
aWV3OjpvZmZzZXRPZkxlbmd0aCgpKSBcCkBAIC03Miw2ICs3NCwxMSBAQCBuYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIEZUTCB7CiAgICAgbWFjcm8oSlNXcmFwcGVyT2JqZWN0X2ludGVybmFsVmFs
dWUsIEpTV3JhcHBlck9iamVjdDo6aW50ZXJuYWxWYWx1ZU9mZnNldCgpKSBcCiAgICAgbWFjcm8o
TWFya2VkQWxsb2NhdG9yX2ZyZWVMaXN0SGVhZCwgTWFya2VkQWxsb2NhdG9yOjpvZmZzZXRPZkZy
ZWVMaXN0SGVhZCgpKSBcCiAgICAgbWFjcm8oTWFya2VkQmxvY2tfbWFya0JpdHMsIE1hcmtlZEJs
b2NrOjpvZmZzZXRPZk1hcmtzKCkpIFwKKyAgICBtYWNybyhTY29wZWRBcmd1bWVudHNfb3ZlcnJv
ZGVUaGluZ3MsIFNjb3BlZEFyZ3VtZW50czo6b2Zmc2V0T2ZPdmVycm9kZVRoaW5ncygpKSkgXAor
ICAgIG1hY3JvKFNjb3BlZEFyZ3VtZW50c19zY29wZSwgU2NvcGVkQXJndW1lbnRzOjpvZmZldE9m
U2NvcGUoKSkpIFwKKyAgICBtYWNybyhTY29wZWRBcmd1bWVudHNfdGFibGUsIFNjb3BlZEFyZ3Vt
ZW50czo6b2ZmZXRPZlRhYmxlKCkpKSBcCisgICAgbWFjcm8oU2NvcGVkQXJndW1lbnRzVGFibGVf
YXJndW1lbnRzLCBTY29wZWRBcmd1bWVudHNUYWJsZTo6b2ZmZXRPZkFyZ3VtZW50cygpKSkgXAor
ICAgIG1hY3JvKFNjb3BlZEFyZ3VtZW50c1RhYmxlX2xlbmd0aCwgU2NvcGVkQXJndW1lbnRzVGFi
bGU6Om9mZmV0T2ZMZW5ndGgoKSkpIFwKICAgICBtYWNybyhTdHJpbmdJbXBsX2RhdGEsIFN0cmlu
Z0ltcGw6OmRhdGFPZmZzZXQoKSkgXAogICAgIG1hY3JvKFN0cmluZ0ltcGxfaGFzaEFuZEZsYWdz
LCBTdHJpbmdJbXBsOjpmbGFnc09mZnNldCgpKSBcCiAgICAgbWFjcm8oU3RydWN0dXJlX2NsYXNz
SW5mbywgU3RydWN0dXJlOjpjbGFzc0luZm9PZmZzZXQoKSkgXApAQCAtODAsNiArODcsOCBAQCBu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAgICAgbWFjcm8oU3RydWN0dXJlX3N0cnVj
dHVyZUlELCBTdHJ1Y3R1cmU6OnN0cnVjdHVyZUlET2Zmc2V0KCkpCiAKICNkZWZpbmUgRk9SX0VB
Q0hfSU5ERVhFRF9BQlNUUkFDVF9IRUFQKG1hY3JvKSBcCisgICAgbWFjcm8oRGlyZWN0QXJndW1l
bnRzX3N0b3JhZ2UsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZU9mZnNldCgpLCBzaXplb2YoRW5j
b2RlZEpTVmFsdWUpKSBcCisgICAgbWFjcm8oSlNFbnZpcm9ubWVudFJlY29yZF92YXJpYWJsZSwg
SlNFbnZpcm9ubWVudFJlY29yZDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSwgc2l6ZW9mKEVuY29kZWRK
U1ZhbHVlKSkgXAogICAgIG1hY3JvKEpTUm9wZVN0cmluZ19maWJlcnMsIEpTUm9wZVN0cmluZzo6
b2Zmc2V0T2ZGaWJlcnMoKSwgc2l6ZW9mKFdyaXRlQmFycmllcjxKU1N0cmluZz4pKSBcCiAgICAg
bWFjcm8oY2hhcmFjdGVyczgsIDAsIHNpemVvZihMQ2hhcikpIFwKICAgICBtYWNybyhjaGFyYWN0
ZXJzMTYsIDAsIHNpemVvZihVQ2hhcikpIFwKQEAgLTg3LDYgKzk2LDcgQEAgbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBGVEwgewogICAgIG1hY3JvKGluZGV4ZWREb3VibGVQcm9wZXJ0aWVzLCAw
LCBzaXplb2YoZG91YmxlKSkgXAogICAgIG1hY3JvKGluZGV4ZWRDb250aWd1b3VzUHJvcGVydGll
cywgMCwgc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkgXAogICAgIG1hY3JvKGluZGV4ZWRBcnJheVN0
b3JhZ2VQcm9wZXJ0aWVzLCAwLCBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSBcCisgICAgbWFjcm8o
c2NvcGVkQXJndWVtbnRzVGFibGVBcmd1bWVudHMsIDAsIHNpemVvZihpbnQzMl90KSkgXAogICAg
IG1hY3JvKHNpbmdsZUNoYXJhY3RlclN0cmluZ3MsIDAsIHNpemVvZihKU1N0cmluZyopKSBcCiAg
ICAgbWFjcm8odmFyaWFibGVzLCAwLCBzaXplb2YoUmVnaXN0ZXIpKQogICAgIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAkocmV2aXNpb24g
MTgwNzIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yMDksNiArMjA5LDggQEAgaW5saW5lIENhcGFiaWxpdHlMZXZl
bCBjYW5Db21waWxlKE5vZGUqIAogICAgICAgICBjYXNlIEFycmF5OjpJbnQzMjoKICAgICAgICAg
Y2FzZSBBcnJheTo6RG91YmxlOgogICAgICAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOgorICAg
ICAgICBjYXNlIEFycmF5OjpEaXJlY3RBcmd1bWVudHM6CisgICAgICAgIGNhc2UgQXJyYXk6OlNj
b3BlZEFyZ3VtZW50czoKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgogICAg
ICAgICAgICAgaWYgKGlzVHlwZWRWaWV3KG5vZGUtPmFycmF5TW9kZSgpLnR5cGVkQXJyYXlUeXBl
KCkpKQpAQCAtMjIyLDYgKzIyNCw4IEBAIGlubGluZSBDYXBhYmlsaXR5TGV2ZWwgY2FuQ29tcGls
ZShOb2RlKiAKICAgICAgICAgY2FzZSBBcnJheTo6RG91YmxlOgogICAgICAgICBjYXNlIEFycmF5
OjpDb250aWd1b3VzOgogICAgICAgICBjYXNlIEFycmF5OjpTdHJpbmc6CisgICAgICAgIGNhc2Ug
QXJyYXk6OkRpcmVjdEFyZ3VtZW50czoKKyAgICAgICAgY2FzZSBBcnJheTo6U2NvcGVkQXJndW1l
bnRzOgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBp
ZiAoaXNUeXBlZFZpZXcobm9kZS0+YXJyYXlNb2RlKCkudHlwZWRBcnJheVR5cGUoKSkpCkBAIC0y
NDgsNiArMjUyLDggQEAgaW5saW5lIENhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxlKE5vZGUqIAog
ICAgICAgICBjYXNlIEFycmF5OjpJbnQzMjoKICAgICAgICAgY2FzZSBBcnJheTo6RG91YmxlOgog
ICAgICAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOgorICAgICAgICBjYXNlIEFycmF5OjpEaXJl
Y3RBcmd1bWVudHM6CisgICAgICAgIGNhc2UgQXJyYXk6OlNjb3BlZEFyZ3VtZW50czoKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgaWYgKGlzVHlwZWRW
aWV3KG5vZGUtPmFycmF5TW9kZSgpLnR5cGVkQXJyYXlUeXBlKCkpKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHJldmlzaW9uIDE4
MDcyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yMTk1LDYgKzIxOTUsMjUgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXJyYXk6
OkRpcmVjdEFyZ3VtZW50czogeworICAgICAgICAgICAgTFZhbHVlIGFyZ3VtZW50cyA9IGxvd0Nl
bGwobV9vdXQtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZSgKKyAgICAgICAgICAg
ICAgICBFeG90aWNPYmplY3RNb2RlLCBub1ZhbHVlKCksIG51bGxwdHIsCisgICAgICAgICAgICAg
ICAgbV9vdXQubm90TnVsbChtX291dC5sb2FkUHRyKGFyZ3VtZW50cywgbV9oZWFwcy5EaXJlY3RB
cmd1bWVudHNfb3ZlcnJpZGVzKSkpOworICAgICAgICAgICAgc2V0SW50MzIobV9vdXQubG9hZDMy
Tm9uTmVnYXRpdmUoYXJndW1lbnRzLCBtX2hlYXBzLkRpcmVjdEFyZ3VtZW50c19sZW5ndGgpKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNh
c2UgQXJyYXk6OlNjb3BlZEFyZ3VtZW50czogeworICAgICAgICAgICAgTFZhbHVlIGFyZ3VtZW50
cyA9IGxvd0NlbGwobV9vdXQtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZSgKKyAg
ICAgICAgICAgICAgICBFeG90aWNPYmplY3RNb2RlLCBub1ZhbHVlKCksIG51bGxwdHIsCisgICAg
ICAgICAgICAgICAgbV9vdXQubm90WmVybzgobV9vdXQubG9hZFB0cihhcmd1bWVudHMsIG1faGVh
cHMuU2NvcGVkQXJndW1lbnRzX292ZXJyb2RlVGhpbmdzKSkpOworICAgICAgICAgICAgTFZhbHVl
IHRhYmxlID0gbV9vdXQubG9hZFB0cihhcmd1bWVudHMsIG1faGVhcHMuU2NvcGVkQXJndW1lbnRz
X3RhYmxlKTsKKyAgICAgICAgICAgIHNldEludDMyKG1fb3V0LmxvYWQzMk5vbk5lZ2F0aXZlKHRh
YmxlLCBtX2hlYXBzLlNjb3BlZEFyZ3VtZW50c1RhYmxlX2xlbmd0aCkpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisgICAgICAgICAgICAKICAgICAgICAgZGVmYXVsdDoKICAgICAg
ICAgICAgIGlmIChpc1R5cGVkVmlldyhtX25vZGUtPmFycmF5TW9kZSgpLnR5cGVkQXJyYXlUeXBl
KCkpKSB7CiAgICAgICAgICAgICAgICAgc2V0SW50MzIoCkBAIC0yMzEyLDYgKzIzMzEsNDkgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAgICAgCisg
ICAgICAgIGNhc2UgQXJyYXk6OkRpcmVjdEFyZ3VtZW50czogeworICAgICAgICAgICAgTFZhbHVl
IGJhc2UgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgTFZhbHVlIGlu
ZGV4ID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDIoKSk7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIHNwZWN1bGF0ZSgKKyAgICAgICAgICAgICAgICBFeG90aWNPYmplY3RNb2RlLCBub1ZhbHVl
KCksIG51bGxwdHIsCisgICAgICAgICAgICAgICAgbV9vdXQubm9uTnVsbChtX291dC5sb2FkUHRy
KGJhc2UsIG1faGVhcHMuRGlyZWN0QXJndW1lbnRzX292ZXJyaWRlcykpKTsKKyAgICAgICAgICAg
IHNwZWN1bGF0ZSgKKyAgICAgICAgICAgICAgICBFeG90aWNPYmplY3RNb2RlLCBub1ZhbHVlKCks
IG51bGxwdHIsCisgICAgICAgICAgICAgICAgbV9vdXQuYWJvdmVPckVxdWFsKAorICAgICAgICAg
ICAgICAgICAgICBpbmRleCwKKyAgICAgICAgICAgICAgICAgICAgbV9vdXQubG9hZDMyTm9uTmVn
YXRpdmUoYmFzZSwgbV9oZWFwcy5EaXJlY3RBcmd1bWVudHNfbGVuZ3RoKSkpOworICAgICAgICAg
ICAgCisgICAgICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LmxvYWQ2NChiYXNlSW5kZXgobV9oZWFw
cy5EaXJlY3RBcmd1bWVudHNfc3RvcmFnZSwgYmFzZSwgaW5kZXgpKSk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEFycmF5OjpTY29w
ZWRBcmd1bWVudHM6IHsKKyAgICAgICAgICAgIExWYWx1ZSBiYXNlID0gbG93Q2VsbChtX25vZGUt
PmNoaWxkMSgpKTsKKyAgICAgICAgICAgIExWYWx1ZSBpbmRleCA9IGxvd0ludDMyKG1fbm9kZS0+
Y2hpbGQyKCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBMVmFsdWUgdGFibGUgPSBtX291
dC5sb2FkUHRyKGJhc2UsIG1faGVhcHMuU2NvcGVkQXJndW1lbnRzX3RhYmxlKTsKKyAgICAgICAg
ICAgIExWYWx1ZSBzY29wZSA9IG1fb3V0LmxvYWRQdHIoYmFzZSwgbV9oZWFwcy5TY29wZWRBcmd1
bWVudHNfc2NvcGUpOworICAgICAgICAgICAgCisgICAgICAgICAgICBzcGVjdWxhdGUoCisgICAg
ICAgICAgICAgICAgRXhvdGljT2JqZWN0TW9kZSwgbm9WYWx1ZSgpLCBudWxscHRyLAorICAgICAg
ICAgICAgICAgIG1fb3V0LmFib3ZlT3JFcXVhbCgKKyAgICAgICAgICAgICAgICAgICAgaW5kZXgs
CisgICAgICAgICAgICAgICAgICAgIG1fb3V0LmxvYWQzMk5vbk5lZ2F0aXZlKGJhc2UsIG1faGVh
cHMuU2NvcGVkQXJndW1lbnRzVGFibGVfbGVuZ3RoKSkpOworICAgICAgICAgICAgCisgICAgICAg
ICAgICBMVmFsdWUgYXJndW1lbnRzID0gbV9vdXQubG9hZFB0cihiYXNlLCBtX2hlYXBzLlNjb3Bl
ZEFyZ3VtZW50c1RhYmxlX2FyZ3VtZW50cyk7CisgICAgICAgICAgICBMVmFsdWUgc2NvcGVPZmZz
ZXQgPSBtX291dC5sb2FkMzIoCisgICAgICAgICAgICAgICAgYmFzZUluZGV4KG1faGVhcHMuc2Nv
cGVkQXJndW1lbnRzVGFibGVBcmd1bWVudHMsIGFyZ3VtZW50cywgaW5kZXgpKTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgc3BlY3VsYXRlKAorICAgICAgICAgICAgICAgIEV4b3RpY09iamVj
dE1vZGUsIG5vVmFsdWUoKSwgbnVsbHB0ciwKKyAgICAgICAgICAgICAgICBtX291dC5lcXVhbChz
Y29wZU9mZnNldCwgbV9vdXQuY29uc3RJbnQzMihTY29wZU9mZnNldDo6aW52YWxpZE9mZnNldCkp
KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgc2V0SlNWYWx1ZShtX291dC5sb2FkNjQoYmFz
ZUluZGV4KAorICAgICAgICAgICAgICAgIG1faGVhcHMuSlNFbnZpcm9ubWVudFJlY29yZF92YXJp
YWJsZXMsIGJhc2UsIHNjb3BlT2Zmc2V0KSkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcnJheTo6R2VuZXJpYzogewogICAgICAg
ICAgICAgc2V0SlNWYWx1ZSh2bUNhbGwoCiAgICAgICAgICAgICAgICAgbV9vdXQub3BlcmF0aW9u
KG9wZXJhdGlvbkdldEJ5VmFsKSwgbV9jYWxsRnJhbWUsCkBAIC01MDcwLDExICs1MTMyLDExIEBA
IHByaXZhdGU6CiAgICAgICAgIHJldHVybiBjYWxsOwogICAgIH0KICAgICAKLSAgICBUeXBlZFBv
aW50ZXIgYmFzZUluZGV4KEluZGV4ZWRBYnN0cmFjdEhlYXAmIGhlYXAsIExWYWx1ZSBzdG9yYWdl
LCBMVmFsdWUgaW5kZXgsIEVkZ2UgZWRnZSkKKyAgICBUeXBlZFBvaW50ZXIgYmFzZUluZGV4KElu
ZGV4ZWRBYnN0cmFjdEhlYXAmIGhlYXAsIExWYWx1ZSBzdG9yYWdlLCBMVmFsdWUgaW5kZXgsIEVk
Z2UgZWRnZSwgcHRyZGlmZl90IG9mZnNldCA9IDApCiAgICAgewogICAgICAgICByZXR1cm4gbV9v
dXQuYmFzZUluZGV4KAogICAgICAgICAgICAgaGVhcCwgc3RvcmFnZSwgbV9vdXQuemVyb0V4dChp
bmRleCwgbV9vdXQuaW50UHRyKSwKLSAgICAgICAgICAgIG1fc3RhdGUuZm9yTm9kZShlZGdlKS5t
X3ZhbHVlKTsKKyAgICAgICAgICAgIG1fc3RhdGUuZm9yTm9kZShlZGdlKS5tX3ZhbHVlLCBvZmZz
ZXQpOwogICAgIH0KICAgICAKICAgICB2b2lkIGNvbXBhcmUoCkBAIC02MzQxLDYgKzY0MDMsMTYg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJDb3Jy
dXB0IGFycmF5IGNsYXNzIik7CiAgICAgICAgIH0KICAgICAgICAgICAgIAorICAgICAgICBjYXNl
IEFycmF5OjpEaXJlY3RBcmd1bWVudHM6CisgICAgICAgICAgICByZXR1cm4gbV9vdXQuZXF1YWwo
CisgICAgICAgICAgICAgICAgbV9vdXQubG9hZDgoY2VsbCwgbV9oZWFwcy5KU0NlbGxfdHlwZUlu
Zm9UeXBlKSwKKyAgICAgICAgICAgICAgICBtX291dC5jb25zdEludDgoRGlyZWN0QXJndW1lbnRz
VHlwZSkpOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXJyYXk6OlNjb3BlZEFyZ3VtZW50
czoKKyAgICAgICAgICAgIHJldHVybiBtX291dC5lcXVhbCgKKyAgICAgICAgICAgICAgICBtX291
dC5sb2FkOChjZWxsLCBtX2hlYXBzLkpTQ2VsbF90eXBlSW5mb1R5cGUpLAorICAgICAgICAgICAg
ICAgIG1fb3V0LmNvbnN0SW50OChTY29wZWRBcmd1bWVudHNUeXBlKSk7CisgICAgICAgICAgICAK
ICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIHJldHVybiBtX291dC5lcXVhbCgKICAgICAg
ICAgICAgICAgICBtX291dC5sb2FkOChjZWxsLCBtX2hlYXBzLkpTQ2VsbF90eXBlSW5mb1R5cGUp
LCAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcHlUb2tlbi5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcHlUb2tlbi5oCShyZXZpc2lvbiAx
ODA3MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3B5VG9rZW4uaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMzIsNyArMzIsNyBAQCBlbnVtIENvcHlUb2tlbiB7CiAgICAgQnV0dGVyZmx5Q29w
eVRva2VuLAogICAgIFR5cGVkQXJyYXlWZWN0b3JDb3B5VG9rZW4sCiAgICAgTWFwQmFja2luZ1N0
b3JlQ29weVRva2VuLAotICAgIEFyZ3VtZW50c1Nsb3dBcmd1bWVudERhdGFDb3B5VG9rZW4KKyAg
ICBEaXJlY3RBcmd1bWVudHNPdmVycmlkZXNDb3B5VG9rZW4KIH07CiAKIH0gLy8gbmFtZXNwYWNl
IEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5o
CShyZXZpc2lvbiAxODA3MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5
SGVscGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTMsNiArMTEzLDI2IEBAIHB1YmxpYzoKICNl
bmRpZgogICAgIH0KICAgICAKKyAgICB2b2lkIGxvYWRWYWx1ZShCYXNlSW5kZXggYWRkcmVzcywg
SlNWYWx1ZVJlZ3MgcmVncykKKyAgICB7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgbG9h
ZDY0KGFkZHJlc3MsIHJlZ3MuZ3ByKCkpOworI2Vsc2UKKyAgICAgICAgaWYgKGFkZHJlc3MuYmFz
ZSA9PSByZWdzLnBheWxvYWRHUFIoKSB8fCBhZGRyZXNzLmluZGV4ID09IHJlZ3MucGF5bG9hZEdQ
UigpKSB7CisgICAgICAgICAgICAvLyBXZSBhY3R1YWxseSBjb3VsZCBoYW5kbGUgdGhlIGNhc2Ug
d2hlcmUgdGhlIHJlZ2lzdGVycyBhcmUgYWxpYXNlZCB0byBib3RoCisgICAgICAgICAgICAvLyB0
YWcgYW5kIHBheWxvYWQsIGJ1dCB3ZSBkb24ndCBmb3Igbm93LgorICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlQoYWRkcmVzcy5iYXNlICE9IHJlZ3MudGFnR1BSKCkpOworICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQoYWRkcmVzcy5pbmRleCAhPSByZWdzLnRhZ0dQUigpKTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgbG9hZDMyKGFkZHJlc3Mud2l0aE9mZnNldChUYWdPZmZzZXQpLCByZWdz
LnRhZ0dQUigpKTsKKyAgICAgICAgICAgIGxvYWQzMihhZGRyZXNzLndpdGhPZmZzZXQoUGF5bG9h
ZE9mZnNldCksIHJlZ3MucGF5bG9hZEdQUigpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIGxvYWQzMihhZGRyZXNzLndpdGhPZmZzZXQoUGF5bG9hZE9mZnNldCksIHJlZ3MucGF5bG9h
ZEdQUigpKTsKKyAgICAgICAgICAgIGxvYWQzMihhZGRyZXNzLndpdGhPZmZzZXQoVGFnT2Zmc2V0
KSwgcmVnLnRhZ0dQUigpKTsKKyAgICAgICAgfQorI2VuZGlmCisgICAgfQorICAgIAogICAgIHZv
aWQgbW92ZVRydXN0ZWRWYWx1ZShKU1ZhbHVlIHZhbHVlLCBKU1ZhbHVlUmVncyByZWdzKQogICAg
IHsKICNpZiBVU0UoSlNWQUxVRTY0KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCShyZXZp
c2lvbiAxODA3MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zNDYsNiArMzQ2LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEp1bXBM
aXN0IGVtaXREb3VibGVHZXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5
cGUpOwogICAgICAgICBKdW1wTGlzdCBlbWl0Q29udGlndW91c0dldEJ5VmFsKEluc3RydWN0aW9u
KiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgSW5kZXhpbmdUeXBlIGV4cGVjdGVkU2hhcGUgPSBD
b250aWd1b3VzU2hhcGUpOwogICAgICAgICBKdW1wTGlzdCBlbWl0QXJyYXlTdG9yYWdlR2V0QnlW
YWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlKTsKKyAgICAgICAgSnVtcExp
c3QgZW1pdERpcmVjdEFyZ3VtZW50c0dldEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVt
cCYgYmFkVHlwZSk7CisgICAgICAgIEp1bXBMaXN0IGVtaXRTY29wZWRBcmd1bWVudHNHZXRCeVZh
bChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUpOwogICAgICAgICBKdW1wTGlz
dCBlbWl0SW50VHlwZWRBcnJheUdldEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYg
YmFkVHlwZSwgVHlwZWRBcnJheVR5cGUpOwogICAgICAgICBKdW1wTGlzdCBlbWl0RmxvYXRUeXBl
ZEFycmF5R2V0QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBUeXBl
ZEFycmF5VHlwZSk7CiAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVE9wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAxODA3MjApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MzAsNyArNTMw
LDcgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsKEV4ZQogICAgICAgICBp
ZiAoaGFzT3B0aW1pemFibGVJbmRleGluZyhvYmplY3QtPnN0cnVjdHVyZSh2bSkpKSB7CiAgICAg
ICAgICAgICAvLyBBdHRlbXB0IHRvIG9wdGltaXplLgogICAgICAgICAgICAgSklUQXJyYXlNb2Rl
IGFycmF5TW9kZSA9IGppdEFycmF5TW9kZUZvclN0cnVjdHVyZShvYmplY3QtPnN0cnVjdHVyZSh2
bSkpOwotICAgICAgICAgICAgaWYgKGFycmF5TW9kZSAhPSBieVZhbEluZm8uYXJyYXlNb2RlKSB7
CisgICAgICAgICAgICBpZiAoaml0QXJyYXlNb2RlUGVybWl0c1B1dChhcnJheU1vZGUpICYmIGFy
cmF5TW9kZSAhPSBieVZhbEluZm8uYXJyYXlNb2RlKSB7CiAgICAgICAgICAgICAgICAgSklUOjpj
b21waWxlUHV0QnlWYWwoJnZtLCBleGVjLT5jb2RlQmxvY2soKSwgJmJ5VmFsSW5mbywgUmV0dXJu
QWRkcmVzc1B0cihPVVJfUkVUVVJOX0FERFJFU1MpLCBhcnJheU1vZGUpOwogICAgICAgICAgICAg
ICAgIGRpZE9wdGltaXplID0gdHJ1ZTsKICAgICAgICAgICAgIH0KQEAgLTU3NSw3ICs1NzUsNyBA
QCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRGlyZWN0UHV0QnlWCiAgICAgICAgIGlmICho
YXNPcHRpbWl6YWJsZUluZGV4aW5nKG9iamVjdC0+c3RydWN0dXJlKHZtKSkpIHsKICAgICAgICAg
ICAgIC8vIEF0dGVtcHQgdG8gb3B0aW1pemUuCiAgICAgICAgICAgICBKSVRBcnJheU1vZGUgYXJy
YXlNb2RlID0gaml0QXJyYXlNb2RlRm9yU3RydWN0dXJlKG9iamVjdC0+c3RydWN0dXJlKHZtKSk7
Ci0gICAgICAgICAgICBpZiAoYXJyYXlNb2RlICE9IGJ5VmFsSW5mby5hcnJheU1vZGUpIHsKKyAg
ICAgICAgICAgIGlmIChqaXRBcnJheU1vZGVQZXJtaXRzUHV0KGFycmF5TW9kZSkgJiYgYXJyYXlN
b2RlICE9IGJ5VmFsSW5mby5hcnJheU1vZGUpIHsKICAgICAgICAgICAgICAgICBKSVQ6OmNvbXBp
bGVEaXJlY3RQdXRCeVZhbCgmdm0sIGNhbGxGcmFtZS0+Y29kZUJsb2NrKCksICZieVZhbEluZm8s
IFJldHVybkFkZHJlc3NQdHIoT1VSX1JFVFVSTl9BRERSRVNTKSwgYXJyYXlNb2RlKTsKICAgICAg
ICAgICAgICAgICBkaWRPcHRpbWl6ZSA9IHRydWU7CiAgICAgICAgICAgICB9CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkocmV2aXNp
b24gMTgwNzIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vz
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk1MSw2ICs5NTEsMTIgQEAgdm9pZCBKSVQ6OnByaXZh
dGVDb21waWxlR2V0QnlWYWwoQnlWYWxJbgogICAgIGNhc2UgSklUQXJyYXlTdG9yYWdlOgogICAg
ICAgICBzbG93Q2FzZXMgPSBlbWl0QXJyYXlTdG9yYWdlR2V0QnlWYWwoY3VycmVudEluc3RydWN0
aW9uLCBiYWRUeXBlKTsKICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBKSVREaXJlY3RBcmd1bWVu
dHM6CisgICAgICAgIHNsb3dDYXNlcyA9IGVtaXREaXJlY3RBcmd1bWVudHNHZXRCeVZhbChjdXJy
ZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEpJVFNj
b3BlZEFyZ3VtZW50czoKKyAgICAgICAgc2xvd0Nhc2VzID0gZW1pdERpcmVjdEFyZ3VtZW50c0dl
dEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSk7CisgICAgICAgIGJyZWFrOwogICAg
IGRlZmF1bHQ6CiAgICAgICAgIFR5cGVkQXJyYXlUeXBlIHR5cGUgPSB0eXBlZEFycmF5VHlwZUZv
ckpJVEFycmF5TW9kZShhcnJheU1vZGUpOwogICAgICAgICBpZiAoaXNJbnQodHlwZSkpCkBAIC0x
MDQ2LDYgKzEwNTIsNjMgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlWYWwoQnlWYWxJ
bgogICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rQ2FsbGVyVG9GdW5jdGlvbihyZXR1cm5BZGRyZXNz
LCBGdW5jdGlvblB0cihpc0RpcmVjdCA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsR2VuZXJpYyA6
IG9wZXJhdGlvblB1dEJ5VmFsR2VuZXJpYykpOwogfQogCitKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1p
dERpcmVjdEFyZ3VtZW50c0dldEJ5VmFsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUpCit7CisgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOworICAg
IAorI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgUmVnaXN0ZXJJRCBiYXNlID0gcmVnVDA7CisgICAg
UmVnaXN0ZXJJRCBwcm9wZXJ0eSA9IHJlZ1QxOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdCA9IEpT
VmFsdWVSZWdzKHJlZ1QwKTsKKyAgICBSZWdpc3RlcklEIHNjcmF0Y2ggPSByZWdUMzsKKyNlbHNl
CisgICAgUmVnaXN0ZXJJRCBiYXNlID0gcmVnVDA7CisgICAgUmVnaXN0ZXJJRCBwcm9wZXJ0eSA9
IHJlZ1QyOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdCA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdU
MCk7CisgICAgUmVnaXN0ZXJJRCBzY3JhdGNoID0gcmVnVDM7CisjZW5kaWYKKworICAgIGxvYWQ4
KEFkZHJlc3MoYmFzZSwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIHNjcmF0Y2gpOwor
ICAgIGJhZFR5cGUgPSBwYXRjaGFibGVCcmFuY2gzMihOb3RFcXVhbCwgc2NyYXRjaCwgVHJ1c3Rl
ZEltbTMyKERpcmVjdEFyZ3VtZW50c1R5cGUpKTsKKyAgICAKKyAgICBzbG93Q2FzZXMuYXBwZW5k
KGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcHJvcGVydHksIEFkZHJlc3MoYmFzZSwgRGlyZWN0QXJn
dW1lbnRzOjpvZmZzZXRPZkxlbmd0aCgpKSkpOworICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNo
VGVzdFB0cihOb25aZXJvLCBBZGRyZXNzKGJhc2UsIERpcmVjdEFyZ3VtZW50czo6b2Zmc2V0T2ZP
dmVycmlkZXMoKSkpKTsKKyAgICAKKyAgICB6ZXJvRXh0ZW5kMzJUb1B0cihwcm9wZXJ0eSwgc2Ny
YXRjaCk7CisgICAgbG9hZFZhbHVlKEJhc2VJbmRleChiYXNlLCBzY3JhdGNoLCBUaW1lc0VpZ2h0
LCBEaXJlY3RBcmd1bWVudHM6OnN0b3JhZ2VPZmZzZXQoKSksIHJlc3VsdCk7Cit9CisKK0pJVDo6
SnVtcExpc3QgSklUOjplbWl0U2NvcGVkQXJndW1lbnRzR2V0QnlWYWwoSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSkKK3sKKyAgICBKdW1wTGlz
dCBzbG93Q2FzZXM7CisgICAgCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBSZWdpc3RlcklEIGJh
c2UgPSByZWdUMDsKKyAgICBSZWdpc3RlcklEIHByb3BlcnR5ID0gcmVnVDE7CisgICAgSlNWYWx1
ZVJlZ3MgcmVzdWx0ID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgIFJlZ2lzdGVySUQgc2NyYXRj
aCA9IHJlZ1QzOworICAgIFJlZ2lzdGVySUQgc2NyYXRjaDIgPSByZWdUNDsKKyNlbHNlCisgICAg
UmVnaXN0ZXJJRCBiYXNlID0gcmVnVDA7CisgICAgUmVnaXN0ZXJJRCBwcm9wZXJ0eSA9IHJlZ1Qy
OworICAgIEpTVmFsdWVSZWdzIHJlc3VsdCA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7Cisg
ICAgUmVnaXN0ZXJJRCBzY3JhdGNoID0gcmVnVDM7CisgICAgUmVnaXN0ZXJJRCBzY2FydGNoMiA9
IHJlZ1Q0OworI2VuZGlmCisKKyAgICBsb2FkOChBZGRyZXNzKGJhc2UsIEpTQ2VsbDo6dHlwZUlu
Zm9UeXBlT2Zmc2V0KCkpLCBzY3JhdGNoKTsKKyAgICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNo
MzIoTm90RXF1YWwsIHNjcmF0Y2gsIFRydXN0ZWRJbW0zMihEaXJlY3RBcmd1bWVudHNUeXBlKSk7
CisgICAgCisgICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIFNjb3BlZEFyZ3VtZW50czo6b2Zmc2V0
T2ZUYWJsZSgpKSwgc2NyYXRjaCk7CisgICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIFNjb3BlZEFy
Z3VtZW50czo6b2Zmc2V0T2ZTY29wZSgpKSwgc2NyYXRjaDIpOworICAgIHNsb3dDYXNlcy5hcHBl
bmQoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCBwcm9wZXJ0eSwgQWRkcmVzcyhzY3JhdGNoLCBTY29w
ZWRBcmd1bWVudHNUYWJsZTo6b2Zmc2V0T2ZMZW5ndGgoKSkpKTsKKyAgICBsb2FkUHRyKEFkZHJl
c3Moc2NyYXRjaCwgU2NvcGVkQXJndW1lbnRzVGFibGU6Om9mZnNldE9mQXJndW1lbnRzKCkpLCBz
Y3JhdGNoKTsKKyAgICBsb2FkMzIoQmFzZUluZGV4KHNjcmF0Y2gsIHByb3BlcnR5LCBUaW1lc0Zv
dXIpLCBzY3JhdGNoKTsKKyAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMyKEVxdWFsLCBzY3Jh
dGNoLCBUcnVzdGVkSW1tMzIoU2NvcGVPZmZzZXQ6OmludmFsaWRPZmZzZXQpKSk7CisgICAgCisg
ICAgbG9hZFZhbHVlKEJhc2VJbmRleChzY3JhdGNoMiwgc2NyYXRjaCwgVGltZXNFaWdodCwgSlNF
bnZpcm9ubWVudFJlY29yZDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSksIHJlc3VsdCk7Cit9CisKIEpJ
VDo6SnVtcExpc3QgSklUOjplbWl0SW50VHlwZWRBcnJheUdldEJ5VmFsKEluc3RydWN0aW9uKiwg
UGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgVHlwZWRBcnJheVR5cGUgdHlwZSkKIHsKICAgICBBU1NF
UlQoaXNJbnQodHlwZSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rl
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuaAko
cmV2aXNpb24gMTgwNzIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xNDM4LDcgKzE0MzgsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgYm9vbCBoYXNDYXB0dXJlZFZhcmlhYmxlcygpIGNvbnN0IHsgcmV0dXJuICEhbV9jYXB0
dXJlZFZhcmlhYmxlcy5zaXplKCk7IH0KICAgICAgICAgc2l6ZV90IGNhcHR1cmVkVmFyaWFibGVD
b3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fY2FwdHVyZWRWYXJpYWJsZXMuc2l6ZSgpOyB9CiAgICAg
ICAgIGNvbnN0IElkZW50aWZpZXJTZXQmIGNhcHR1cmVkVmFyaWFibGVzKCkgY29uc3QgeyByZXR1
cm4gbV9jYXB0dXJlZFZhcmlhYmxlczsgfQotICAgICAgICBib29sIGNhcHR1cmVzKGNvbnN0IElk
ZW50aWZpZXImIGlkZW50KSB7IHJldHVybiBtX2NhcHR1cmVkVmFyaWFibGVzLmNvbnRhaW5zKGlk
ZW50LmltcGwoKSk7IH0KKyAgICAgICAgYm9vbCBjYXB0dXJlcyhTdHJpbmdJbXBsKiB1aWQpIHsg
cmV0dXJuIG1fY2FwdHVyZWRWYXJpYWJsZXMuY29udGFpbnModWlkKTsgfQorICAgICAgICBib29s
IGNhcHR1cmVzKGNvbnN0IElkZW50aWZpZXImIGlkZW50KSB7IHJldHVybiBjYXB0dXJlcyhpZGVu
dC5pbXBsKCkpOyB9CiAKICAgICAgICAgVmFyU3RhY2smIHZhclN0YWNrKCkgeyByZXR1cm4gbV92
YXJTdGFjazsgfQogICAgICAgICBGdW5jdGlvblN0YWNrJiBmdW5jdGlvblN0YWNrKCkgeyByZXR1
cm4gbV9mdW5jdGlvblN0YWNrOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Bcmd1bWVudHNNb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQXJndW1lbnRzTW9kZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQXJndW1lbnRzTW9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzkg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBBcmd1bWVudHNNb2RlX2gKKyNkZWZpbmUgQXJndW1lbnRzTW9kZV9oCisKK25hbWVzcGFjZSBK
U0MgeworCitlbnVtIEFyZ3VtZW50c01vZGUgeworICAgIENsb25lZEFyZ3VtZW50c0NyZWF0aW9u
TW9kZSwKKyAgICBGYWtlQXJndW1lbnRWYWx1ZXNDcmVhdGlvbk1vZGUKK307CisKK30gLy8gbmFt
ZXNwYWNlIEpTQworCisjZW5kaWYgLy8gQXJndW1lbnRzTW9kZV9oCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhcHR1cmVkQXJndW1lbnRzT2Zmc2V0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYXB0dXJlZEFyZ3VtZW50c09m
ZnNldC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9D
YXB0dXJlZEFyZ3VtZW50c09mZnNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ2FwdHVyZWRBcmd1bWVudHNPZmZzZXQuaCIKKworbmFt
ZXNwYWNlIEpTQyB7CisKK3ZvaWQgQ2FwdHVyZWRBcmd1bWVudHNPZmZzZXQ6OmR1bXAoUHJpbnRT
dHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBpZiAoISp0aGlzKSB7CisgICAgICAgIG91dC5wcmlu
dCgiY2FwdHVyZWRBcmd1bWVudEludmFsaWQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIG91dC5wcmludCgiY2FwdHVyZWRBcmd1bWVudCIsIG9mZnNldCgpKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhcHR1
cmVkQXJndW1lbnRzT2Zmc2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQ2FwdHVyZWRBcmd1bWVudHNPZmZzZXQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhcHR1cmVkQXJndW1lbnRzT2Zmc2V0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaWZuZGVmIENhcHR1cmVkQXJndW1lbnRzT2Zmc2V0X2gKKyNkZWZp
bmUgQ2FwdHVyZWRBcmd1bWVudHNPZmZzZXRfaAorCisjaW5jbHVkZSAiR2VuZXJpY09mZnNldC5o
IgorI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgSlNDIHsKKworLy8g
VGhpcyBpcyBhbiBvZmZzZXQgaW50byB0aGUgc3BlY2lhbCBhcmd1bWVudHMgb2JqZWN0LCB3aGlj
aCBjYXB0dXJlcyB0aGUgYXJndW1lbnRzIHRvIGEKKy8vIGZ1bmN0aW9uLiBJdCBvbmx5IGNvbWVz
IGludG8gcGxheSBpdCB0aGUgYXJndW1lbnRzIGFyZW4ndCBhbHNvIGxpZnRlZCBpbnRvIHRoZSBh
Y3RpdmF0aW9uLgorLy8gSWYgdGhleSB3ZXJlIHRoZW4gYWNjZXNzZXMgdG8gdGhlIGFyZ3VtZW50
cyB3b3VsZCByZXNvbHZlIHRvIGEgU2NvcGVPZmZzZXQgYW5kIG5vdCBhCisvLyBDYXB0dXJlZEFy
Z3VtZW50c09mZnNldC4KK2NsYXNzIENhcHR1cmVkQXJndW1lbnRzT2Zmc2V0IDogcHVibGljIEdl
bmVyaWNPZmZzZXQ8Q2FwdHVyZWRBcmd1bWVudHNPZmZzZXQ+IHsKK3B1YmxpYzoKKyAgICBDYXB0
dXJlZEFyZ3VtZW50c09mZnNldCgpIHsgfQorICAgIAorICAgIGV4cGxpY2l0IENhcHR1cmVkQXJn
dW1lbnRzT2Zmc2V0KHVuc2lnbmVkIG9mZnNldCkKKyAgICAgICAgOiBHZW5lcmljT2Zmc2V0KG9m
ZnNldCkKKyAgICB7CisgICAgfQorICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNv
bnN0OworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBDYXB0dXJlZEFyZ3Vt
ZW50c09mZnNldF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVj
dEFyZ3VtZW50cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRGlyZWN0QXJndW1lbnRzLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwxNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRpcmVjdEFyZ3VtZW50cy5oIgorCisjaW5j
bHVkZSAiR2VuZXJpY0FyZ3VtZW50c0lubGluZXMuaCIKKyNpbmNsdWRlICJKU0FyZ3VtZW50c0l0
ZXJhdG9yLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsKKwor
U1RBVElDX0FTU0VSVF9JU19UUklWSUFMTFlfREVTVFJVQ1RJQkxFKERpcmVjdEFyZ3VtZW50cyk7
CisKK2NvbnN0IENsYXNzSW5mbyBEaXJlY3RBcmd1bWVudHM6OnNfaW5mbyA9IHsgIkFyZ3VtZW50
cyIsICZCYXNlOjpzX2luZm8sIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoRGlyZWN0QXJndW1lbnRz
KSB9OworCitEaXJlY3RBcmd1bWVudHM6OkRpcmVjdEFyZ3VtZW50cyhWTSYgdm0sIFN0cnVjdHVy
ZSogc3RydWN0dXJlLCB1bnNpZ25lZCBsZW5ndGgpCisgICAgOiBHZW5lcmljQXJndW1lbnRzKHZt
LCBzdHJ1Y3R1cmUpCisgICAgLCBtX2xlbmd0aChsZW5ndGgpCit7Cit9CisKK0RpcmVjdEFyZ3Vt
ZW50cyogRGlyZWN0QXJndW1lbnRzOjpjcmVhdGVVbmluaXRpYWxpemVkKFZNJiB2bSwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICBEaXJlY3RBcmd1bWVudHMq
IHJlc3VsdCA9CisgICAgICAgIG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPERpcmVjdEFyZ3Vt
ZW50cz4odm0uaGVhcCwgYWxsb2NhdGlvblNpemUobGVuZ3RoKSkpCisgICAgICAgICh2bSwgc3Ry
dWN0dXJlKTsKKyAgICByZXN1bHQtPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCitEaXJlY3RBcmd1bWVudHMqIERpcmVjdEFyZ3VtZW50czo6Y3JlYXRlKFZNJiB2
bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICBEaXJlY3RB
cmd1bWVudHMqIHJlc3VsdCA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWQodm0sIHN0cnVjdHVyZSwgbGVu
Z3RoKTsKKyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBsZW5ndGg7IGktLTspCisgICAgICAg
IHJlc3VsdC0+c3RvcmFnZSgpW2ldLmNsZWFyKCk7CisgICAgCisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKworRGlyZWN0QXJndW1lbnRzKiBEaXJlY3RBcmd1bWVudHM6OmNyZWF0ZUJ5Q29weWluZyhW
TSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgdW5z
aWduZWQgbGVuZ3RoID0gZXhlYy0+YXJndW1lbnRDb3VudCgpOworICAgIERpcmVjdEFyZ3VtZW50
cyogcmVzdWx0ID0gY3JlYXRlVW5pbml0aWFsaXplZCh2bSwgc3RydWN0dXJlLCBsZW5ndGgpOwor
ICAgIAorICAgIGZvciAodW5zaWduZWQgaSA9IGxlbmd0aDsgaS0tOykKKyAgICAgICAgcmVzdWx0
LT5zdG9yYWdlKClbaV0uc2V0KHZtLCByZXN1bHQsIGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KGkp
KTsKKyAgICAKKyAgICByZXN1bHQtPmNhbGxlZSgpLnNldCh2bSwgcmVzdWx0LCBqc0Nhc3Q8SlNG
dW5jdGlvbio+KGV4ZWMtPmNhbGxlZSgpKSk7CisgICAgCisgICAgcmV0dXJuIHJlc3VsdDsKK30K
Kwordm9pZCBEaXJlY3RBcmd1bWVudHM6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiB0aGlzQ2VsbCwg
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgRGlyZWN0QXJndW1lbnRzKiB0aGlzT2JqZWN0
ID0gc3RhdGljX2Nhc3Q8RGlyZWN0QXJndW1lbnRzKj4odGhpc0NlbGwpOworICAgIEFTU0VSVF9H
Q19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKKyAgICBCYXNlOjp2aXNpdENo
aWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOworICAgIAorICAgIHZpc2l0b3IuYXBwZW5kVmFs
dWVzKHRoaXNPYmplY3QtPnN0b3JhZ2UoKSwgdGhpc09iamVjdC0+bV9sZW5ndGgpOworICAgIHZp
c2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX2NhbGxlZSk7CisgICAgCisgICAgaWYgKHRoaXNP
YmplY3QtPm1fb3ZlcnJpZGVzKSB7CisgICAgICAgIHZpc2l0b3IuY29weUxhdGVyKAorICAgICAg
ICAgICAgdGhpc09iamVjdCwgRGlyZWN0QXJndW1lbnRzT3ZlcnJpZGVzQ29weVRva2VuLAorICAg
ICAgICAgICAgdGhpc09iamVjdC0+bV9vdmVycmlkZXMuZ2V0KCksIG1fbGVuZ3RoKTsKKyAgICB9
Cit9CisKK3ZvaWQgRGlyZWN0QXJndW1lbnRzOjpjb3B5QmFja2luZ1N0b3JlKEpTQ2VsbCogdGhp
c0NlbGwsIENvcHlWaXNpdG9yJiB2aXNpdG9yLCBDb3B5VG9rZW4gdG9rZW4pCit7CisgICAgRGly
ZWN0QXJndW1lbnRzKiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8RGlyZWN0QXJndW1lbnRzKj4o
dGhpc0NlbGwpOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5m
bygpKTsKKyAgICAKKyAgICBSRUxFQVNFX0FTU0VSVCh0b2tlbiA9PSBEaXJlY3RBcmd1bWVudHNP
dmVycmlkZXNDb3B5VG9rZW4pOworICAgIAorICAgIGJvb2wqIG9sZE92ZXJyaWRlcyA9IHRoaXNP
YmplY3QtPm1fb3ZlcnJpZGVzLmdldCgpOworICAgIGlmICghb2xkT3ZlcnJpZGVzKQorICAgICAg
ICByZXR1cm47CisgICAgCisgICAgaWYgKHZpc2l0b3IuY2hlY2tJZlNob3VsZENvcHkob3ZlcnJp
ZGVzKSkgeworICAgICAgICBib29sKiBuZXdPdmVycmlkZXMgPSBzdGF0aWNfY2FzdDxib29sKj4o
dmlzaXRvci5hbGxvY2F0ZU5ld1NwYWNlKG1fbGVuZ3RoKSk7CisgICAgICAgIG1lbWNweShuZXdP
dmVycmlkZXMsIG9sZE92ZXJyaWRlcywgbV9sZW5ndGgpOworICAgICAgICB0aGlzT2JqZWN0LT5t
X292ZXJyaWRlcy5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKG5ld092ZXJyaWRlcyk7CisgICAgICAg
IHZpc2l0b3IuZGlkQ29weShvbGRPdmVycmlkZXMsIG1fbGVuZ3RoKTsKKyAgICB9Cit9CisKK1N0
cnVjdHVyZSogRGlyZWN0QXJndW1lbnRzOjpjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKK3sKKyAgICByZXR1cm4g
U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhE
aXJlY3RBcmd1bWVudHNUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Cit9CisKK3ZvaWQg
RGlyZWN0QXJndW1lbnRzOjpzbG93RG93bkFuZFdhc3RlTWVtb3J5KFZNJiB2bSkKK3sKKyAgICBS
RUxFQVNFX0FTU0VSVCghbV9vdmVycmlkZXMpOworICAgIAorICAgIHB1dERpcmVjdCh2bSwgdm0u
cHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcihtX2xlbmd0aCksIERvbnRFbnVtKTsKKyAg
ICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmNhbGxlZSwgbV9jYWxsZWUuZ2V0KCks
IERvbnRFbnVtKTsKKyAgICAKKyAgICB2b2lkKiBiYWNraW5nU3RvcmU7CisgICAgUkVMRUFTRV9B
U1NFUlQodm0uaGVhcC50cnlBbGxvY2F0ZVN0b3JhZ2UodGhpcywgbV9sZW5ndGgpLCAmYmFja2lu
Z1N0b3JlKTsKKyAgICBtX292ZXJyaWRlcy5zZXQodm0sIHRoaXMsIHN0YXRpY19jYXN0PGJvb2wq
PihiYWNraW5nU3RvcmUpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2xlbmd0aDsgaS0tOykK
KyAgICAgICAgbV9vdmVycmlkZXMuZ2V0KClbaV0gPSBmYWxzZTsKK30KKwordm9pZCBEaXJlY3RB
cmd1bWVudHM6OnNsb3dEb3duQW5kV2FzdGVNZW1vcnlJZk5lY2Vzc2FyeShWTSYgdm0pCit7Cisg
ICAgaWYgKCFtX292ZXJyaWRlcykKKyAgICAgICAgc2xvd0Rvd25BbmRXYXN0ZU1lbW9yeSh2bSk7
Cit9CisKK3ZvaWQgRGlyZWN0QXJndW1lbnRzOjpvdmVycmlkZUFyZ3VtZW50KFZNJiB2bSwgdW5z
aWduZWQgaSkKK3sKKyAgICBzbG93RG93bkFuZFdhc3RlTWVtb3J5SWZOZWNlc3Nhcnkodm0pOwor
ICAgIG1fb3ZlcnJpZGVzLmdldCgpW2luZGV4XSA9IHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNl
IEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVu
dHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RB
cmd1bWVudHMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0RpcmVjdEFyZ3VtZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTM5IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgRGlyZWN0
QXJndW1lbnRzX2gKKyNkZWZpbmUgRGlyZWN0QXJndW1lbnRzX2gKKworI2luY2x1ZGUgIkdlbmVy
aWNBcmd1bWVudHMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKKy8vIFRoaXMgaXMgYW4gQXJndW1l
bnRzLWNsYXNzIG9iamVjdCB0aGF0IHdlIGNyZWF0ZSB3aGVuIHlvdSBzYXkgImFyZ3VtZW50cyIg
aW5zaWRlIGEgZnVuY3Rpb24sCisvLyBhbmQgbm9uZSBvZiB0aGUgYXJndW1lbnRzIGFyZSBjYXB0
dXJlZCBpbiB0aGUgZnVuY3Rpb24ncyBhY3RpdmF0aW9uLiBUaGUgZnVuY3Rpb24gd2lsbCBjb3B5
IGFsbAorLy8gb2YgaXRzIGFyZ3VtZW50cyBpbnRvIHRoaXMgb2JqZWN0LCBhbmQgYWxsIHN1YnNl
cXVlbnQgYWNjZXNzZXMgdG8gdGhlIGFyZ3VtZW50cyB3aWxsIGdvIHRocm91Z2gKKy8vIHRoaXMg
b2JqZWN0IHRoZXJlYWZ0ZXIuIFNwZWNpYWwgc3VwcG9ydCBpcyBpbiBwbGFjZSBmb3IgbWlzY2hl
dmlvdXMgZXZlbnRzIGxpa2UgdGhlIGFyZ3VtZW50cworLy8gYmVpbmcgZGVsZXRlZCAoc29tZXRo
aW5nIGxpa2UgImRlbGV0ZSBhcmd1bWVudHNbMF0iKSBvciByZWNvbmZpZ3VyZWQgKGJyb2FkbHks
IHdlIHNheSBkZWxldGlvbnMKKy8vIGFuZCByZWNvbmZpZ3VyYXRpb25zIG1lYW4gdGhhdCB0aGUg
cmVzcGVjdGl2ZSBhcmd1bWVudCB3YXMgIm92ZXJyaWRkZW4iKS4KKy8vCisvLyBUbyBzcGVlZCBh
bGxvY2F0aW9uLCB0aGlzIG9iamVjdCB3aWxsIGhvbGQgYWxsIG9mIHRoZSBhcmd1bWVudHMgaW4t
cGxhY2UuIFRoZSBhcmd1bWVudHMgYXMgd2VsbAorLy8gYXMgYSB0YWJsZSBvZiBmbGFncyBzYXlp
bmcgd2hpY2ggYXJndW1lbnRzIHdlcmUgb3ZlcnJpZGRlbi4KK2NsYXNzIERpcmVjdEFyZ3VtZW50
cyA6IHB1YmxpYyBHZW5lcmljQXJndW1lbnRzPERpcmVjdEFyZ3VtZW50cz4geworcHJpdmF0ZToK
KyAgICBEaXJlY3RBcmd1bWVudHMoVk0mLCBTdHJ1Y3R1cmUqLCB1bnNpZ25lZCBsZW5ndGgpOwor
ICAgIAorcHVibGljOgorICAgIC8vIENyZWF0ZXMgYW4gYXJndW1lbnRzIG9iamVjdCBidXQgbGVh
dmVzIGl0IHVuaW5pdGlhbGl6ZWQuIFRoaXMgaXMgZGFuZ2Vyb3VzIGlmIHdlIEdDIHJpZ2h0Cisg
ICAgLy8gYWZ0ZXIgYWxsb2NhdGlvbi4KKyAgICBzdGF0aWMgRGlyZWN0QXJndW1lbnRzKiBjcmVh
dGVVbmluaXRpYWxpemVkKFZNJiwgU3RydWN0dXJlKiwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICAK
KyAgICAvLyBDcmVhdGVzIGFuIGFyZ3VtZW50cyBvYmplY3QgYW5kIGluaXRpYWxpemVzIGV2ZXJ5
dGhpbmcgdG8gdGhlIGVtcHR5IHZhbHVlLiBVc2UgdGhpcyBpZiB5b3UKKyAgICAvLyBjYW5ub3Qg
Z3VhcmFudGVlIHRoYXQgeW91J2xsIGltbWVkaWF0ZWx5IGluaXRpYWxpemUgYWxsIG9mIHRoZSBl
bGVtZW50cy4KKyAgICBzdGF0aWMgRGlyZWN0QXJndW1lbnRzKiBjcmVhdGUoVk0mLCBTdHJ1Y3R1
cmUqLCB1bnNpZ25lZCBsZW5ndGgpOworICAgIAorICAgIC8vIENyZWF0ZXMgYW4gYXJndW1lbnRz
IG9iamVjdCBieSBjb3B5aW5nIHRoZSBhcmd1bW5ldHMgZnJvbSB0aGUgc3RhY2suCisgICAgc3Rh
dGljIERpcmVjdEFyZ3VtZW50cyogY3JlYXRlQnlDb3B5aW5nKFZNJiwgU3RydWN0dXJlKiwgRXhl
Y1N0YXRlKik7CisgICAgCisgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBT
bG90VmlzaXRvciYpOworICAgIHN0YXRpYyB2b2lkIGNvcHlCYWNraW5nU3RvcmUoSlNDZWxsKiwg
Q29weVZpc2l0b3ImLCBDb3B5VG9rZW4pOworICAgIAorICAgIHVpbnQzMl90IGludGVybmFsTGVu
Z3RoKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2xlbmd0aDsKKyAgICB9CisgICAg
CisgICAgdWludDMyX3QgbGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKKyAgICB7CisgICAg
ICAgIGlmIChVTkxJS0VMWShtX292ZXJyaWRlcykpCisgICAgICAgICAgICByZXR1cm4gZ2V0KGV4
ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpLnRvVUludDMyKGV4ZWMpOworICAgICAg
ICByZXR1cm4gbV9sZW5ndGg7CisgICAgfQorICAgIAorICAgIGJvb2wgY2FuQWNjZXNzSW5kZXhR
dWlja2x5KHVpbnQzMl90IGkpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaSA8IG1fbGVu
Z3RoICYmICghbV9vdmVycmlkZXMgfHwgIW1fb3ZlcnJpZGVzLmdldCgpW2ldKTsKKyAgICB9Cisg
ICAgCisgICAgSlNWYWx1ZSBnZXRJbmRleFF1aWNrbHkodWludDMyX3QgaSkgY29uc3QKKyAgICB7
CisgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGNhbkFjY2Vzc0luZGV4
UXVpY2tseShpKSk7CisgICAgICAgIHJldHVybiBzdG9yYWdlKClbaV0uZ2V0KCk7CisgICAgfQor
ICAgIAorICAgIHZvaWQgc2V0SW5kZXhRdWlja2x5KFZNJiB2bSwgdWludDMyX3QgaSwgSlNWYWx1
ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9O
KGNhbkFjY2Vzc0luZGV4UXVpY2tseShpKSk7CisgICAgICAgIHN0b3JhZ2UoKVtpXS5zZXQodm0s
IHRoaXMsIHZhbHVlKTsKKyAgICB9CisgICAgCisgICAgV3JpdGVCYXJyaWVyPEpTRnVuY3Rpb24+
JiBjYWxsZWUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fY2FsbGVlOworICAgIH0KKyAgICAK
KyAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGFyZ3VtZW50KENhcHR1cmVkQXJndW1lbnRzT2Zm
c2V0IG9mZnNldCkKKyAgICB7CisgICAgICAgIEFTU0VSVChvZmZzZXQpOworICAgICAgICBBU1NF
UlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihvZmZzZXQub2Zmc2V0KCkgPCBtX2xlbmd0aCk7
CisgICAgICAgIHJldHVybiBzdG9yYWdlKClbb2Zmc2V0Lm9mZnNldCgpXTsKKyAgICB9CisgICAg
CisgICAgLy8gTWV0aG9kcyBpbnRlbmRlZCBmb3IgdXNlIGJ5IHRoZSBHZW5lcmljQXJndW1lbnRz
IG1peGluLgorICAgIGJvb2wgb3ZlcnJvZGVUaGluZ3MoKSBjb25zdCB7IHJldHVybiAhIW1fb3Zl
cnJpZGVzOyB9CisgICAgdm9pZCBzbG93RG93bkFuZFdhc3RlTWVtb3J5KFZNJik7CisgICAgdm9p
ZCBzbG93RG93bkFuZFdhc3RlTWVtb3J5SWZOZWNlc3NhcnkoVk0mKTsKKyAgICB2b2lkIG92ZXJy
aWRlQXJndW1lbnQoVk0mLCB1bnNpZ25lZCBpbmRleCk7CisgICAgCisgICAgREVDTEFSRV9JTkZP
OworICAgIAorICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xv
YmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUpOworICAgIAorICAgIHN0YXRpYyBwdHJkaWZm
X3Qgb2Zmc2V0T2ZMZW5ndGgoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoRGlyZWN0QXJndW1l
bnRzLCBtX2xlbmd0aCk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mT3ZlcnJpZGVz
KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKERpcmVjdEFyZ3VtZW50cywgbV9vdmVycmlkZXMp
OyB9CisgICAgCisgICAgc3RhdGljIHNpemVfdCBzdG9yYWdlT2Zmc2V0KCkKKyAgICB7CisgICAg
ICAgIHJldHVybiBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Y8c2l6ZW9mKFdyaXRlQmFycmllcjxV
bmtub3duPik+KHNpemVvZihEaXJlY3RBcmd1bWVudHMpKTsKKyAgICB9CisgICAgCisgICAgc3Rh
dGljIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSh1aW50MzJfdCBsZW5ndGgpCisgICAgeworICAgICAg
ICByZXR1cm4gc3RvcmFnZU9mZnNldCgpICsgc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikg
KiBsZW5ndGg7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICBXcml0ZUJhcnJpZXI8VW5rbm93
bj4qIHN0b3JhZ2UoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxXcml0ZUJh
cnJpZXI8VW5rbm93bj4qPihiaXR3aXNlX2Nhc3Q8Y2hhcio+KHRoaXMpICsgc3RvcmFnZU9mZnNl
dCgpKTsKKyAgICB9CisgICAgCisgICAgV3JpdGVCYXJyaWVyPEpTRnVuY3Rpb24qPiBtX2NhbGxl
ZTsKKyAgICB1aW50MzJfdCBtX2xlbmd0aDsgLy8gQWx3YXlzIHRoZSBhY3R1YWwgbGVuZ3RoIG9m
IGNhcHR1cmVkIGFyZ3VtZW50cyBhbmQgbmV2ZXIgd2hhdCB3YXMgc3RvcmVkIGludG8gdGhlIGxl
bmd0aCBwcm9wZXJ0eS4KKyAgICBDb3B5V3JpdGVCYXJyaWVyPGJvb2w+IG1fb3ZlcnJpZGVzOyAv
LyBJZiBub24tbnVsbCwgaXQgbWVhbnMgdGhhdCBsZW5ndGgsIGNhbGxlZSwgYW5kIGNhbGxlciBh
cmUgZnVsbHkgbWF0ZXJpYWxpemVkIHByb3BlcnRpZXMuCit9OworCit9IC8vIG5hbWVzcGFjZSBK
U0MKKworI2VuZGlmIC8vIERpcmVjdEFyZ3VtZW50c19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzLmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaWZuZGVmIEdlbmVyaWNBcmd1bWVudHNfaAorI2RlZmluZSBHZW5l
cmljQXJndW1lbnRzX2gKKworI2luY2x1ZGUgIkpTT2JqZWN0LmgiCisKK25hbWVzcGFjZSBKU0Mg
eworCisvLyBUaGlzIGlzIGEgbWl4aW4gZm9yIHRoZSB0d28ga2luZHMgb2YgQXJndW1lbnRzLWNs
YXNzIG9iamVjdHMgdGhhdCBhcmlzZSB3aGVuIHlvdSBzYXkKKy8vICJhcmd1bWVudHMiIGluc2lk
ZSBhIGZ1bmN0aW9uLiBUaGlzIGNsYXNzIGRvZXNuJ3Qgc2hvdyB1cCBpbiB0aGUgSlNDZWxsIGlu
aGVyaXRhbmNlIGhpZXJhcmNoeS4KK3RlbXBsYXRlPHR5cGVuYW1lIFR5cGU+CitjbGFzcyBHZW5l
cmljQXJndW1lbnRzIDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgeworcHVibGljOgorICAgIHR5
cGVkZWYgSlNOb25GaW5hbE9iamVjdCBCYXNlOworCisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVk
IFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSW50ZXJjZXB0
c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IE92ZXJy
aWRlc0dldFByb3BlcnR5TmFtZXMgfCBKU09iamVjdDo6U3RydWN0dXJlRmxhZ3M7CisKK3Byb3Rl
Y3RlZDoKKyAgICBHZW5lcmljQXJndW1lbnRzKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUp
CisgICAgICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQorICAgIHsKKyAgICB9CisKKyAgICBzdGF0
aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0
eU5hbWUsIFByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xv
dEJ5SW5kZXgoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFBy
b3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNPYmpl
Y3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7Cisg
ICAgc3RhdGljIHZvaWQgcHV0KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNW
YWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIHZvaWQgcHV0QnlJbmRleChKU0Nl
bGwqLCBFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIGJvb2wgc2hv
dWxkVGhyb3cpOworICAgIHN0YXRpYyB2b2lkIGRlbGV0ZVByb3BlcnR5KEpTQ2VsbCosIEV4ZWNT
dGF0ZSosIFByb3BlcnR5TmFtZSk7CisgICAgc3RhdGljIHZvaWQgZGVsZXRlUHJvcGVydHlCeUlu
ZGV4KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSk7CisgICAgc3Rh
dGljIHZvaWQgZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0
eU5hbWUsIGNvbnN0IFByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgc2hvdWxkVGhyb3cpOworfTsK
KworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBHZW5lcmljQXJndW1lbnRzX2gKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lubGlu
ZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmlj
QXJndW1lbnRzSW5saW5lcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDIxMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaWZuZGVmIEdlbmVyaWNBcmd1bWVudHNJbmxpbmVzX2gKKyNkZWZpbmUgR2VuZXJpY0FyZ3Vt
ZW50c0lubGluZXNfaAorCisjaW5jbHVkZSAiR2VuZXJpY0FyZ3VtZW50cy5oIgorI2luY2x1ZGUg
IkpTQXJndW1lbnRzSXRlcmF0b3IuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisKK25hbWVz
cGFjZSBKU0MgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPgorYm9vbCBHZW5lcmljQXJndW1l
bnRzPFR5cGU+OjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRl
KiBleGVjLCBQcm9wZXJ0eU5hbWUgaWRlbnQsIFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICBU
eXBlKiB0aGlzT2JqZWN0ID0ganNDYXN0PFR5cGUqPihvYmplY3QpOworICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7CisgICAgCisgICAgaWYgKCF0aGlzT2JqZWN0LT5vdmVycm9kZVRoaW5ncygpKSB7
CisgICAgICAgIGlmIChpZGVudCA9PSB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgpIHsKKyAgICAg
ICAgICAgIHNsb3Quc2V0VmFsdWUodGhpc09iamVjdCwgRG9udEVudW0sIGpzTnVtYmVyKHRoaXNP
YmplY3QtPmludGVybmFsTGVuZ3RoKCkpKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICB9CisgICAgICAgIGlmIChpZGVudCA9PSB2bS5wcm9wZXJ0eU5hbWVzLT5jYWxsZWUpIHsK
KyAgICAgICAgICAgIHNsb3Quc2V0VmFsdWUodGhpc09iamVjdCwgRG9udEVudW0sIHRoaXNPYmpl
Y3QtPmNhbGxlZSgpLmdldCgpKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9
CisgICAgfQorICAgIAorICAgIHVuc2lnbmVkIGluZGV4ID0gaWRlbnQuYXNJbmRleCgpOworICAg
IGlmICh0aGlzT2JqZWN0LT5jYW5BY2Nlc3NJbmRleFF1aWNrbHkoaW5kZXgpKSB7CisgICAgICAg
IHNsb3Quc2V0VmFsdWUodGhpc09iamVjdCwgTm9uZSwgdGhpc09iamVjdC0+Z2V0SW5kZXhRdWlj
a2x5KGluZGV4KSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICBpZiAo
QmFzZTo6Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIGV4ZWMsIGlkZW50LCBzbG90KSkK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgCisgICAgaWYgKGlkZW50ID09IHZtLnByb3BlcnR5
TmFtZXMtPml0ZXJhdG9yUHJpdmF0ZU5hbWUpIHsKKyAgICAgICAgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKTsKKyAgICAgICAgdGhpc09i
amVjdC0+SlNDX05BVElWRV9GVU5DVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5pdGVyYXRvclByaXZh
dGVOYW1lLCBhcmd1bWVudHNGdW5jSXRlcmF0b3IsIERvbnRFbnVtLCAwKTsKKyAgICAgICAgaWYg
KEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgZXhlYywgaWRlbnQsIHNs
b3QpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIHJldHVybiBm
YWxzZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4KK2Jvb2wgR2VuZXJpY0FyZ3VtZW50
czxUeXBlPjo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU09iamVjdCogb2JqZWN0LCBFeGVj
U3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGluZGV4LCBQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAg
VHlwZSogdGhpc09iamVjdCA9IGpzQ2FzdDxUeXBlKj4ob2JqZWN0KTsKKyAgICAKKyAgICBpZiAo
dGhpc09iamVjdC0+Y2FuQWNjZXNzSW5kZXhRdWlja2x5KGluZGV4KSkgeworICAgICAgICBzbG90
LnNldFZhbHVlKHRoaXNPYmplY3QsIE5vbmUsIHRoaXNPYmplY3QtPmdldEluZGV4UXVpY2tseShp
bmRleCkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIEJh
c2U6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgob2JqZWN0LCBleGVjLCBpbmRleCwgc2xvdCk7
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFR5cGU+Cit2b2lkIEdlbmVyaWNBcmd1bWVudHM8VHlw
ZT46OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVj
LCBQcm9wZXJ0eU5hbWVBcnJheSYgYXJyYXksIEVudW1lcmF0aW9uTW9kZSBtb2RlKQoreworICAg
IFR5cGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8VHlwZSo+KG9iamVjdCk7CisgICAgCisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHRoaXNPYmplY3QtPmludGVybmFsTGVuZ3RoKCk7ICsraSkg
eworICAgICAgICBpZiAoIXRoaXNPYmplY3QtPmNhbkFjY2Vzc0luZGV4UXVpY2tseShpbmRleCkp
CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgYXJyYXkuYWRkKElkZW50aWZpZXI6OmZy
b20oZXhlYywgaSkpOworICAgIH0KKyAgICBpZiAoc2hvdWxkSW5jbHVkZURvbnRFbnVtUHJvcGVy
dGllcyhtb2RlKSAmJiAhdGhpc09iamVjdC0+b3ZlcnJvZGVUaGluZ3MoKSkgeworICAgICAgICBh
cnJheS5hZGQoZXhlYy0+cHJvcGVydHlOYW1lcygpLmNhbGxlZSk7CisgICAgICAgIGFycmF5LmFk
ZChleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKTsKKyAgICB9CisgICAgQmFzZTo6Z2V0T3du
UHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBleGVjLCBhcnJheSwgbW9kZSk7Cit9CisKK3RlbXBs
YXRlPHR5cGVuYW1lIFR5cGU+Cit2b2lkIEdlbmVyaWNBcmd1bWVudHM8VHlwZT46OnB1dChKU0Nl
bGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIGlkZW50LCBKU1ZhbHVlIHZh
bHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgVHlwZSogdGhpc09iamVjdCA9IGpz
Q2FzdDxUeXBlKj4ob2JqZWN0KTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIAorICAg
IGlmICghdGhpc09iamVjdC0+b3ZlcnJvZGVUaGluZ3MoKQorICAgICAgICAmJiAoaWRlbnQgPT0g
dm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoCisgICAgICAgICAgICB8fCBpZGVudCA9PSB2bS5wcm9w
ZXJ0eU5hbWVzLT5jYWxsZWUpKQorICAgICAgICB0aGlzT2JqZWN0LT5zbG93RG93bkFuZFdhc3Rl
TWVtb3J5KHZtKTsKKyAgICAKKyAgICB1bnNpZ25lZCBpbmRleCA9IGlkZW50LmFzSW5kZXgoKTsK
KyAgICBpZiAodGhpc09iamVjdC0+Y2FuQWNjZXNzSW5kZXhRdWlja2x5KGluZGV4KSkgeworICAg
ICAgICBzZXRJbmRleFF1aWNrbHkodm0sIGluZGV4LCB2YWx1ZSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgCisgICAgQmFzZTo6cHV0KHRoaXNPYmplY3QsIGV4ZWMsIGlkZW50LCB2YWx1
ZSwgc2xvdCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFR5cGU+Cit2b2lkIEdlbmVyaWNBcmd1
bWVudHM8VHlwZT46OnB1dEJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVu
c2lnbmVkIGluZGV4LCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93KQoreworICAgIFR5
cGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8VHlwZSo+KG9iamVjdCk7CisgICAgVk0mIHZtID0gZXhl
Yy0+dm0oKTsKKyAgICAKKyAgICBpZiAodGhpc09iamVjdC0+Y2FuU2V0SW5kZXhRdWlja2x5KGlu
ZGV4KSkgeworICAgICAgICBzZXRJbmRleFF1aWNrbHkodm0sIGluZGV4LCB2YWx1ZSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIEJhc2U6OnB1dEJ5SW5kZXgoY2Vs
bCwgZXhlYywgaW5kZXgsIHZhbHVlLCBzaG91bGRUaHJvdyk7Cit9CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFR5cGU+Cit2b2lkIEdlbmVyaWNBcmd1bWVudHM8VHlwZT46OmRlbGV0ZVByb3BlcnR5KEpT
Q2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgaWRlbnQpCit7CisgICAg
VHlwZSogdGhpc09iamVjdCA9IGpzQ2FzdDxUeXBlKj4ob2JqZWN0KTsKKyAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOworICAgIAorICAgIGlmICghdGhpc09iamVjdC0+b3ZlcnJvZGVUaGluZ3MoKQor
ICAgICAgICAmJiAoaWRlbnQgPT0gdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoCisgICAgICAgICAg
ICB8fCBpZGVudCA9PSB2bS5wcm9wZXJ0eU5hbWVzLT5jYWxsZWUpKQorICAgICAgICB0aGlzT2Jq
ZWN0LT5zbG93RG93bkFuZFdhc3RlTWVtb3J5KHZtKTsKKyAgICAKKyAgICB1bnNpZ25lZCBpbmRl
eCA9IGlkZW50LmFzSW5kZXgoKTsKKyAgICBpZiAodGhpc09iamVjdC0+Y2FuQWNjZXNzSW5kZXhR
dWlja2x5KGluZGV4KSkgeworICAgICAgICB0aGlzT2JqZWN0LT5vdmVycmlkZUFyZ3VtZW50KHZt
LCBpbmRleCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgQmFzZTo6ZGVsZXRl
UHJvcGVydHkodGhpc09iamVjdCwgZXhlYywgaWRlbnQpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUeXBlPgordm9pZCBHZW5lcmljQXJndW1lbnRzPFR5cGU+OjpkZWxldGVQcm9wZXJ0eUJ5SW5k
ZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGluZGV4KQoreworICAg
IFR5cGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8VHlwZSo+KG9iamVjdCk7CisgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKKyAgICAKKyAgICBpZiAodGhpc09iamVjdC0+Y2FuQWNjZXNzSW5kZXhRdWlj
a2x5KGluZGV4KSkgeworICAgICAgICB0aGlzT2JqZWN0LT5vdmVycmlkZUFyZ3VtZW50KHZtLCBp
bmRleCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIEJhc2U6OmRl
bGV0ZVByb3BlcnR5QnlJbmRleChjZWxsLCBleGVjLCBpbmRleCk7Cit9CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFR5cGU+Cit2b2lkIEdlbmVyaWNBcmd1bWVudHM8VHlwZT46OmRlZmluZU93blByb3Bl
cnR5KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIGlkZW50
LCBjb25zdCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIGJvb2wgc2hvdWxkVGhyb3cp
Cit7CisgICAgVHlwZSogdGhpc09iamVjdCA9IGpzQ2FzdDxUeXBlKj4ob2JqZWN0KTsKKyAgICBW
TSYgdm0gPSBleGVjLT52bSgpOworICAgIAorICAgIGlmIChpZGVudCA9PSB2bS5wcm9wZXJ0eU5h
bWVzLT5sZW5ndGgKKyAgICAgICAgfHwgaWRlbnQgPT0gdm0ucHJvcGVydHlOYW1lcy0+Y2FsbGVl
KQorICAgICAgICB0aGlzT2JqZWN0LT5zbG93RG93bkFuZFdhc3RlTWVtb3J5SWZOZWNlc3Nhcnko
dm0pOworICAgIGVsc2UgeworICAgICAgICB1bnNpZ25lZCBpbmRleCA9IGlkZW50LmFzSW5kZXgo
KTsKKyAgICAgICAgaWYgKHRoaXNPYmplY3QtPmNhbkFjY2Vzc0FyZ3VtZW50UXVpY2tseShpbmRl
eCkpIHsKKyAgICAgICAgICAgIGlmICghZGVzY3JpcHRvci5pc0FjY2Vzc29yRGVzY3JpcHRvcigp
KSB7CisgICAgICAgICAgICAgICAgLy8gSWYgdGhlIHByb3BlcnR5IGlzIG5vdCBkZWxldGVkIGFu
ZCB3ZSBhcmUgdXNpbmcgYSBub24tYWNjZXNzb3IgZGVzY3JpcHRvciwgdGhlbgorICAgICAgICAg
ICAgICAgIC8vIG1ha2Ugc3VyZSB0aGF0IHRoZSBhbGlhc2VkIGFyZ3VtZW50IHNlZXMgdGhlIHZh
bHVlLgorICAgICAgICAgICAgICAgIGlmIChkZXNjcmlwdG9yLnZhbHVlKCkpCisgICAgICAgICAg
ICAgICAgICAgIHRoaXNPYmplY3QtPnNldEluZGV4UXVpY2tseSh2bSwgaSwgZGVzY3JpcHRvci52
YWx1ZSgpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIElmIHRoZSBwcm9wZXJ0
eSBpcyBub3QgZGVsZXRlZCBhbmQgd2UgYXJlIHVzaW5nIGEgbm9uLWFjY2Vzc29yLCB3cml0YWJs
ZQorICAgICAgICAgICAgICAgIC8vIGRlc2NyaXB0b3IsIHRoZW4gd2UgYXJlIGRvbmUuIFRoZSBh
cmd1bWVudCBjb250aW51ZXMgdG8gYmUgYWxpYXNlZC4gTm90ZSB0aGF0IHdlCisgICAgICAgICAg
ICAgICAgLy8gaWdub3JlIHRoZSByZXF1ZXN0IHRvIGNoYW5nZSBlbnVtZXJhYmlsaXR5LiBXZSBh
cHBlYXIgdG8gaGF2ZSBhbHdheXMgZG9uZSBzbywgaW4KKyAgICAgICAgICAgICAgICAvLyBjYXNl
cyB3aGVyZSB0aGUgYXJndW1lbnQgd2FzIHN0aWxsIGFsaWFzZWQuCisgICAgICAgICAgICAgICAg
Ly8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDE5NTIK
KyAgICAgICAgICAgICAgICBpZiAoZGVzY3JpcHRvci53cml0YWJsZSgpKQorICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgICAg
ICAvLyBJZiB0aGUgcHJvcGVydHkgaXMgYSBub24tZGVsZXRlZCBhcmd1bWVudCwgdGhlbiBtb3Zl
IGl0IGludG8gdGhlIGJhc2Ugb2JqZWN0IGFuZAorICAgICAgICAgICAgLy8gdGhlbiBkZWxldGUg
aXQuCisgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gdGhpc09iamVjdC0+Z2V0SW5kZXhRdWlj
a2x5KGkpOworICAgICAgICAgICAgQVNTRVJUKHZhbHVlKTsKKyAgICAgICAgICAgIG9iamVjdC0+
cHV0RGlyZWN0TWF5QmVJbmRleChleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlKTsKKyAgICAgICAg
ICAgIHRoaXNPYmplY3QtPm92ZXJyaWRlQXJndW1lbnQodm0sIGkpOworICAgICAgICB9CisgICAg
fQorICAgIAorICAgIC8vIE5vdyBqdXN0IGxldCB0aGUgbm9ybWFsIG9iamVjdCBtYWNoaW5lcnkg
ZG8gaXRzIHRoaW5nLgorICAgIHJldHVybiBCYXNlOjpkZWZpbmVPd25Qcm9wZXJ0eShvYmplY3Qs
IGV4ZWMsIGlkZW50LCBkZXNjcmlwdG9yLCBzaG91bGRUaHJvdyk7Cit9CisKK30gLy8gbmFtZXNw
YWNlIEpTQworCisjZW5kaWYgLy8gR2VuZXJpY0FyZ3VtZW50c0lubGluZXNfaAorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljT2Zmc2V0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY09mZnNldC5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY09mZnNldC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTExIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgR2VuZXJpY09mZnNldF9oCisjZGVmaW5lIEdl
bmVyaWNPZmZzZXRfaAorCisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKworbmFtZXNwYWNl
IEpTQyB7CisKKy8vIEEgbWl4aW4gZm9yIGNyZWF0aW5nIHRoZSB2YXJpb3VzIGtpbmRzIG9mIHZh
cmlhYmxlIG9mZnNldHMgdGhhdCBvdXIgZW5naW5lIHN1cHBvcnRzLgordGVtcGxhdGU8dHlwZW5h
bWUgVD4KK2NsYXNzIEdlbmVyaWNPZmZzZXQgeworcHVibGljOgorICAgIHN0YXRpYyBjb25zdCB1
bnNpZ25lZCBpbnZhbGlkT2Zmc2V0ID0gVUlOVF9NQVg7CisgICAgCisgICAgR2VuZXJpY09mZnNl
dCgpCisgICAgICAgIDogbV9vZmZzZXQoaW52YWxpZE9mZnNldCkKKyAgICB7CisgICAgfQorICAg
IAorICAgIGV4cGxpY2l0IEdlbmVyaWNPZmZzZXQodW5zaWduZWQgb2Zmc2V0KQorICAgICAgICA6
IG1fb2Zmc2V0KG9mZnNldCkKKyAgICB7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3Ih
KCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQgPT0gaW52YWxpZE9mZnNldDsgfQorICAgIAorICAg
IHVuc2lnbmVkIG9mZnNldFVuY2hlY2tlZCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
bV9vZmZzZXQ7CisgICAgfQorICAgIAorICAgIHVuc2lnbmVkIG9mZnNldCgpIGNvbnN0CisgICAg
eworICAgICAgICBBU1NFUlQobV9vZmZzZXQgIT0gaW52YWxpZE9mZnNldCk7CisgICAgICAgIHJl
dHVybiBtX29mZnNldDsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFQm
IG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fb2Zmc2V0ID09IG90aGVyLm9m
ZnNldFVuY2hlY2tlZCgpOworICAgIH0KKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgVCYgb3Ro
ZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9vZmZzZXQgIT0gb3RoZXIub2Zmc2V0
VW5jaGVja2VkKCk7CisgICAgfQorICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IFQmIG90aGVyKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fb2Zmc2V0IDwgb3RoZXIub2Zmc2V0VW5jaGVj
a2VkKCk7CisgICAgfQorICAgIGJvb2wgb3BlcmF0b3I+KGNvbnN0IFQmIG90aGVyKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIG1fb2Zmc2V0ID4gb3RoZXIub2Zmc2V0VW5jaGVja2VkKCk7
CisgICAgfQorICAgIGJvb2wgb3BlcmF0b3I8PShjb25zdCBUJiBvdGhlcikgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBtX29mZnNldCA8PSBvdGhlci5vZmZzZXRVbmNoZWNrZWQoKTsKKyAg
ICB9CisgICAgYm9vbCBvcGVyYXRvcj49KGNvbnN0IFQmIG90aGVyKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG1fb2Zmc2V0ID49IG90aGVyLm9mZnNldFVuY2hlY2tlZCgpOworICAgIH0K
KyAgICAKKyAgICBUIG9wZXJhdG9yKyhpbnQgdmFsdWUpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gVChvZmZzZXQoKSArIHZhbHVlKTsKKyAgICB9CisgICAgVCBvcGVyYXRvci0oaW50IHZh
bHVlKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIFQob2Zmc2V0KCkgLSB2YWx1ZSk7Cisg
ICAgfQorICAgIFQmIG9wZXJhdG9yKz0oaW50IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJu
ICp0aGlzID0gKnRoaXMgKyB2YWx1ZTsKKyAgICB9CisgICAgVCYgb3BlcmF0b3ItPShpbnQgdmFs
dWUpCisgICAgeworICAgICAgICByZXR1cm4gKnRoaXMgPSAqdGhpcyAtIHZhbHVlOworICAgIH0K
KyAgICAKK3ByaXZhdGU6CisgICAgdW5zaWduZWQgbV9vZmZzZXQ7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBKU0MKKworI2VuZGlmIC8vIEdlbmVyaWNPZmZzZXRfaAorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0FyZ3VtZW50c0l0ZXJhdG9yLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FyZ3VtZW50c0l0ZXJhdG9yLmNwcAko
cmV2aXNpb24gMTgwNzIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcmd1
bWVudHNJdGVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDEzIEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMsIDIwMTUgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzMsMTAgKzMzLDE4IEBAIG5hbWVz
cGFjZSBKU0MgewogCiBjb25zdCBDbGFzc0luZm8gSlNBcmd1bWVudHNJdGVyYXRvcjo6c19pbmZv
ID0geyAiQXJndW1lbnRzSXRlcmF0b3IiLCAmQmFzZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9E
X1RBQkxFKEpTQXJndW1lbnRzSXRlcmF0b3IpIH07CiAKLXZvaWQgSlNBcmd1bWVudHNJdGVyYXRv
cjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBBcmd1bWVudHMqIGFyZ3VtZW50cykKK3ZvaWQgSlNB
cmd1bWVudHNJdGVyYXRvcjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBKU09iamVjdCogYXJndW1l
bnRzKQogewogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICBtX2FyZ3VtZW50cy5z
ZXQodm0sIHRoaXMsIGFyZ3VtZW50cyk7CiB9CiAKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgYXJndW1lbnRzRnVuY0l0ZXJhdG9yKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBKU09iamVj
dCogdGhpc09iaiA9IGV4ZWMtPnRoaXNWYWx1ZSgpLnRvVGhpcyhleGVjLCBTdHJpY3RNb2RlKS50
b09iamVjdChleGVjKTsKKyAgICBpZiAoIXRoaXNPYmotPmluaGVyaXRzKEFyZ3VtZW50czo6aW5m
bygpKSAmJiAhdGhpc09iai0+aW5oZXJpdHMoT3V0T2ZCYW5kQXJndW1lbnRzOjppbmZvKCkpKQor
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93VHlwZUVycm9yKGV4ZWMsIEFTQ0lJ
TGl0ZXJhbCgiQXR0ZW1wdGVkIHRvIHVzZSBBcmd1bWVudHMgaXRlcmF0b3Igb24gbm9uLUFyZ3Vt
ZW50cyBvYmplY3QiKSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNBcmd1bWVudHNJ
dGVyYXRvcjo6Y3JlYXRlKGV4ZWMtPnZtKCksIGV4ZWMtPmNhbGxlZSgpLT5nbG9iYWxPYmplY3Qo
KS0+YXJndW1lbnRzSXRlcmF0b3JTdHJ1Y3R1cmUoKSwgdGhpc09iaikpOworfQorCiB9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FyZ3VtZW50c0l0ZXJhdG9yLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcmd1bWVudHNJdGVy
YXRvci5oCShyZXZpc2lvbiAxODA3MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0FyZ3VtZW50c0l0ZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTUgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsNyArMjYsNyBAQAog
I2lmbmRlZiBKU0FyZ3VtZW50c0l0ZXJhdG9yX2gKICNkZWZpbmUgSlNBcmd1bWVudHNJdGVyYXRv
cl9oCiAKLSNpbmNsdWRlICJBcmd1bWVudHMuaCIKKyNpbmNsdWRlICJKU09iamVjdC5oIgogCiBu
YW1lc3BhY2UgSlNDIHsKIApAQCAtNDEsNyArNDEsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVy
biBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZv
KE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKICAgICB9CiAKLSAgICBzdGF0
aWMgSlNBcmd1bWVudHNJdGVyYXRvciogY3JlYXRlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIEFyZ3VtZW50cyogYXJndW1lbnRzKQorICAgIHN0YXRpYyBKU0FyZ3VtZW50c0l0ZXJhdG9y
KiBjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNPYmplY3QqIGFyZ3VtZW50
cykKICAgICB7CiAgICAgICAgIEpTQXJndW1lbnRzSXRlcmF0b3IqIGluc3RhbmNlID0gbmV3IChO
b3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNBcmd1bWVudHNJdGVyYXRvcj4odm0uaGVhcCkpIEpTQXJn
dW1lbnRzSXRlcmF0b3Iodm0sIHN0cnVjdHVyZSk7CiAgICAgICAgIGluc3RhbmNlLT5maW5pc2hD
cmVhdGlvbih2bSwgYXJndW1lbnRzKTsKQEAgLTUwLDExICs1MCwxMSBAQCBwdWJsaWM6CiAKICAg
ICBib29sIG5leHQoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTVmFsdWUmIHZhbHVlKQogICAgIHsK
LSAgICAgICAgaWYgKG1fbmV4dEluZGV4ID49IG1fYXJndW1lbnRzLT5sZW5ndGgoY2FsbEZyYW1l
KSkKKyAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0KKyAgICAgICAgICAgIG1fYXJndW1lbnRzLT5n
ZXQoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpLnRvVUludDMy
KGNhbGxGcmFtZSk7CisgICAgICAgIGlmIChtX25leHRJbmRleCA+PSBsZW5ndGgpCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHZhbHVlID0gbV9hcmd1bWVudHMtPnRyeUdldEFy
Z3VtZW50KG1fbmV4dEluZGV4KyspOwotICAgICAgICBpZiAoIXZhbHVlKQotICAgICAgICAgICAg
dmFsdWUgPSBqc1VuZGVmaW5lZCgpOworICAgICAgICB2YWx1ZSA9IG1fYXJndW1lbnRzLT5nZXRJ
bmRleChjYWxsRnJhbWUsIG1fbmV4dEluZGV4KyspOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICB9CiAKQEAgLTY4LDEyICs2OCwxNCBAQCBwcml2YXRlOgogICAgIHsKICAgICB9CiAKLSAgICB2
b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgQXJndW1lbnRzKik7CisgICAgdm9pZCBmaW5pc2hDcmVh
dGlvbihWTSYsIEpTT2JqZWN0Kik7CiAgICAgCi0gICAgV3JpdGVCYXJyaWVyPEFyZ3VtZW50cz4g
bV9hcmd1bWVudHM7CisgICAgV3JpdGVCYXJyaWVyPEpTT2JqZWN0PiBtX2FyZ3VtZW50czsKICAg
ICBzaXplX3QgbV9uZXh0SW5kZXg7CiB9OwogCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGFyZ3VtZW50c0Z1bmNJdGVyYXRvcihFeGVjU3RhdGUqKTsKKwogfQogCiAjZW5kaWYgLy8gIWRl
ZmluZWQoSlNBcmd1bWVudHNJdGVyYXRvcl9oKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNFbnZpcm9ubWVudFJlY29yZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNFbnZpcm9ubWVudFJlY29yZC5jcHAJKHJldmlzaW9uIDE4
MDcyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRW52aXJvbm1lbnRSZWNv
cmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwNywgMjAwOCwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMTIsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNSw0ICszNSwx
MiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY29uc3QgQ2xhc3NJbmZvIEpTRW52aXJvbm1lbnRSZWNv
cmQ6OnNfaW5mbyA9IHsgIkVudmlyb25tZW50UmVjb3JkIiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JF
QVRFX01FVEhPRF9UQUJMRShKU0Vudmlyb25tZW50UmVjb3JkKSB9OwogCit2b2lkIEpTRW52aXJv
bm1lbnRSZWNvcmQ6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlz
aXRvcikKK3sKKyAgICBKU0Vudmlyb25tZW50UmVjb3JkKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpT
RW52aXJvbm1lbnRSZWNvcmQqPihjZWxsKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRT
KHRoaXNPYmplY3QsIGluZm8oKSk7CisgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0
LCB2aXNpdG9yKTsKKyAgICB2aXNpdG9yLmFwcGVuZFZhbHVlcyh0aGlzT2JqZWN0LT52YXJpYWJs
ZXMoKSwgbV9zeW1ib2xUYWJsZS0+c2NvcGVTaXplKCkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBK
U0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRW52aXJvbm1lbnRSZWNv
cmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Vudmly
b25tZW50UmVjb3JkLmgJKHJldmlzaW9uIDE4MDcyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTRW52aXJvbm1lbnRSZWNvcmQuaAkod29ya2luZyBjb3B5KQpAQCAtNDYsMTEg
KzQ2LDI2IEBAIGNsYXNzIEpTRW52aXJvbm1lbnRSZWNvcmQgOiBwdWJsaWMgSlNTeW0KIHB1Ymxp
YzoKICAgICB0eXBlZGVmIEpTU3ltYm9sVGFibGVPYmplY3QgQmFzZTsKIAotICAgIFdyaXRlQmFy
cmllckJhc2U8VW5rbm93bj4qIHJlZ2lzdGVycygpIHsgcmV0dXJuIG1fcmVnaXN0ZXJzOyB9Ci0g
ICAgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiYgcmVnaXN0ZXJBdChpbnQgaW5kZXgpIGNvbnN0
IHsgcmV0dXJuIG1fcmVnaXN0ZXJzW2luZGV4XTsgfQorICAgIFdyaXRlQmFycmllckJhc2U8VW5r
bm93bj4qIHZhcmlhYmxlcygpCisgICAgeworICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PFdy
aXRlQmFycmllckJhc2U8VW5rbm93bj4qPihiaXR3aXNlX2Nhc3Q8Y2hhcio+KHRoaXMpICsgb2Zm
c2V0T2ZWYXJpYWJsZXMoKSk7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNWYWxpZChTY29wZU9m
ZnNldCBvZmZzZXQpCisgICAgeworICAgICAgICByZXR1cm4gISFvZmZzZXQgJiYgb2Zmc2V0Lm9m
ZnNldCgpIDwgbV9zeW1ib2xUYWJsZS0+c2NvcGVTaXplKCk7CisgICAgfQorICAgIAorICAgIFdy
aXRlQmFycmllckJhc2U8VW5rbm93bj4mIHZhcmlhYmxlQXQoU2NvcGVPZmZzZXQgb2Zmc2V0KSBj
b25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzVmFsaWQob2Zmc2V0KSk7CisgICAgICAgIHJl
dHVybiB2YXJpYWJsZXMoKVtvZmZzZXQub2Zmc2V0KCldOworICAgIH0KIAotICAgIFdyaXRlQmFy
cmllckJhc2U8VW5rbm93bj4qIGNvbnN0ICogYWRkcmVzc09mUmVnaXN0ZXJzKCkgY29uc3QgeyBy
ZXR1cm4gJm1fcmVnaXN0ZXJzOyB9Ci0gICAgc3RhdGljIHNpemVfdCBvZmZzZXRPZlJlZ2lzdGVy
cygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU0Vudmlyb25tZW50UmVjb3JkLCBtX3JlZ2lz
dGVycyk7IH0KKyAgICBzdGF0aWMgc2l6ZV90IG9mZnNldE9mVmFyaWFibGVzKCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Y8c2l6ZW9mKFdyaXRlQmFycmll
cjxVbmtub3duPik+KHNpemVvZihKU0Vudmlyb25tZW50UmVjb3JkKSk7CisgICAgfQogCiAgICAg
REVDTEFSRV9JTkZPOwogCkBAIC02MCwxNSArNzUsMzUgQEAgcHJvdGVjdGVkOgogICAgIEpTRW52
aXJvbm1lbnRSZWNvcmQoCiAgICAgICAgIFZNJiB2bSwKICAgICAgICAgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsCi0gICAgICAgIFJlZ2lzdGVyKiByZWdpc3RlcnMsCiAgICAgICAgIEpTU2NvcGUqIHNj
b3BlLAogICAgICAgICBTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUpCiAgICAgICAgIDogQmFzZSh2
bSwgc3RydWN0dXJlLCBzY29wZSwgc3ltYm9sVGFibGUpCi0gICAgICAgICwgbV9yZWdpc3RlcnMo
cmVpbnRlcnByZXRfY2FzdDxXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+Kj4ocmVnaXN0ZXJzKSkK
ICAgICB7CiAgICAgfQotCi0gICAgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiogbV9yZWdpc3Rl
cnM7IC8vICJyIiBpbiB0aGUgc3RhY2suCisgICAgCisgICAgc3RhdGljIHNpemVfdCBhbGxvY2F0
aW9uU2l6ZUZvclNjb3BlU2l6ZSh1bnNpZ25lZCBzY29wZVNpemUpCisgICAgeworICAgICAgICBy
ZXR1cm4gb2Zmc2V0T2ZWYXJpYWJsZXMoKSArIHNjb3BlU2l6ZSAqIHNpemVvZihXcml0ZUJhcnJp
ZXI8VW5rbm93bj4pOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgc2l6ZV90IGFsbG9jYXRpb25T
aXplKFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhbGxv
Y2F0aW9uU2l6ZUZvclNjb3BlU2l6ZShzeW1ib2xUYWJsZS0+c2NvcGVTaXplKCkpOworICAgIH0K
KyAgICAKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uVW5pbml0aWFsaXplZChWTSYgdm0pCisgICAg
eworICAgICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CisgICAgfQorICAgIAorICAgIHZv
aWQgZmluaXNoQ3JlYXRpb24oVk0mIHZtKQorICAgIHsKKyAgICAgICAgZmluaXNoQ3JlYXRpb25V
bmluaXRpYWxpemVkKHZtKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9zeW1ib2xUYWJs
ZS0+c2NvcGVTaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgIC8vIEZpbGxpbmcgdGhpcyB3aXRo
IHVuZGVmaW5lZCBpcyB1c2VmdWwgYmVjYXVzZSB0aGF0J3Mgd2hhdCB2YXJpYWJsZXMgc3RhcnQg
b3V0IGFzLgorICAgICAgICAgICAgdmFyaWFibGVBdChpKS5zZXRVbmRlZmluZWQoKTsKKyAgICAg
ICAgfQorICAgIH0KIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNMZXhpY2FsRW52aXJvbm1lbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTGV4aWNhbEVudmlyb25tZW50LmNwcAko
cmV2aXNpb24gMTgwNzIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMZXhp
Y2FsRW52aXJvbm1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDksIDIwMTQsIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC00MCwyNyArNDAsMTkgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNvbnN0IENsYXNzSW5mbyBKU0xl
eGljYWxFbnZpcm9ubWVudDo6c19pbmZvID0geyAiSlNMZXhpY2FsRW52aXJvbm1lbnQiLCAmQmFz
ZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTTGV4aWNhbEVudmlyb25tZW50KSB9
OwogCi12b2lkIEpTTGV4aWNhbEVudmlyb25tZW50Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2Vs
bCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi17Ci0gICAgSlNMZXhpY2FsRW52aXJvbm1lbnQqIHRo
aXNPYmplY3QgPSBqc0Nhc3Q8SlNMZXhpY2FsRW52aXJvbm1lbnQqPihjZWxsKTsKLSAgICBBU1NF
UlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7Ci0gICAgQmFzZTo6dmlz
aXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKLQotICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgdGhpc09iamVjdC0+c3ltYm9sVGFibGUoKS0+Y2FwdHVyZUNvdW50KCk7ICsraSkKLSAgICAg
ICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPnN0b3JhZ2UoKVtpXSk7Ci19Ci0KIGlubGlu
ZSBib29sIEpTTGV4aWNhbEVudmlyb25tZW50OjpzeW1ib2xUYWJsZUdldChQcm9wZXJ0eU5hbWUg
cHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgU3ltYm9sVGFibGVFbnRy
eSBlbnRyeSA9IHN5bWJvbFRhYmxlKCktPmlubGluZUdldChwcm9wZXJ0eU5hbWUudWlkKCkpOwog
ICAgIGlmIChlbnRyeS5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAgU2Nv
cGVPZmZzZXQgb2Zmc2V0ID0gZW50cnkuc2NvcGVPZmZzZXQoKTsKKwogICAgIC8vIERlZmVuZCBh
Z2FpbnN0IHRoZSBpbnNwZWN0b3IgYXNraW5nIGZvciBhIHZhciBhZnRlciBpdCBoYXMgYmVlbiBv
cHRpbWl6ZWQgb3V0LgotICAgIGlmICghaXNWYWxpZChlbnRyeSkpCisgICAgaWYgKCFpc1ZhbGlk
KG9mZnNldCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHNsb3Quc2V0VmFsdWUodGhp
cywgRG9udEVudW0sIHJlZ2lzdGVyQXQoZW50cnkuZ2V0SW5kZXgoKSkuZ2V0KCkpOworICAgIHNs
b3Quc2V0VmFsdWUodGhpcywgRG9udEVudW0sIHZhcmlhYmxlQXQob2Zmc2V0KS5nZXQoKSk7CiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTcwLDExICs2MiwxMyBAQCBpbmxpbmUgYm9vbCBKU0xl
eGljYWxFbnZpcm9ubWVudDo6c3ltYm9sCiAgICAgaWYgKGVudHJ5LmlzTnVsbCgpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKKyAgICBTY29wZU9mZnNldCBvZmZzZXQgPSBlbnRyeS5zY29wZU9m
ZnNldCgpOworCiAgICAgLy8gRGVmZW5kIGFnYWluc3QgdGhlIGluc3BlY3RvciBhc2tpbmcgZm9y
IGEgdmFyIGFmdGVyIGl0IGhhcyBiZWVuIG9wdGltaXplZCBvdXQuCi0gICAgaWYgKCFpc1ZhbGlk
KGVudHJ5KSkKKyAgICBpZiAoIWlzVmFsaWQob2Zmc2V0KSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKHJlZ2lzdGVyQXQoZW50cnkuZ2V0SW5k
ZXgoKSkuZ2V0KCksIGVudHJ5LmdldEF0dHJpYnV0ZXMoKSk7CisgICAgZGVzY3JpcHRvci5zZXRE
ZXNjcmlwdG9yKHZhcmlhYmxlQXQob2Zmc2V0KS5nZXQoKSwgZW50cnkuZ2V0QXR0cmlidXRlcygp
KTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtOTUsMTIgKzg5LDEzIEBAIGlubGluZSBib29s
IEpTTGV4aWNhbEVudmlyb25tZW50OjpzeW1ib2wKICAgICAgICAgICAgICAgICB0aHJvd1R5cGVF
cnJvcihleGVjLCBTdHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOwogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KKyAgICAgICAgU2NvcGVPZmZzZXQgb2Zmc2V0
ID0gaXRlci0+dmFsdWUuc2NvcGVPZmZzZXQoKTsKICAgICAgICAgLy8gRGVmZW5kIGFnYWluc3Qg
dGhlIGluc3BlY3RvciBhc2tpbmcgZm9yIGEgdmFyIGFmdGVyIGl0IGhhcyBiZWVuIG9wdGltaXpl
ZCBvdXQuCi0gICAgICAgIGlmICghaXNWYWxpZChpdGVyLT52YWx1ZSkpCisgICAgICAgIGlmICgh
aXNWYWxpZChvZmZzZXQpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBpZiAo
VmFyaWFibGVXYXRjaHBvaW50U2V0KiBzZXQgPSBpdGVyLT52YWx1ZS53YXRjaHBvaW50U2V0KCkp
Ci0gICAgICAgICAgICBzZXQtPmludmFsaWRhdGUoVmFyaWFibGVXcml0ZUZpcmVEZXRhaWwodGhp
cywgcHJvcGVydHlOYW1lKSk7IC8vIERvbid0IG1lc3MgYXJvdW5kIC0gaWYgd2UgaGFkIGZvdW5k
IHRoaXMgc3RhdGljYWxseSwgd2Ugd291bGQgaGF2ZSBpbnZjYWxpZGF0ZWQgaXQuCi0gICAgICAg
IHJlZyA9ICZyZWdpc3RlckF0KGl0ZXItPnZhbHVlLmdldEluZGV4KCkpOworICAgICAgICAgICAg
c2V0LT5pbnZhbGlkYXRlKFZhcmlhYmxlV3JpdGVGaXJlRGV0YWlsKHRoaXMsIHByb3BlcnR5TmFt
ZSkpOyAvLyBEb24ndCBtZXNzIGFyb3VuZCAtIGlmIHdlIGhhZCBmb3VuZCB0aGlzIHN0YXRpY2Fs
bHksIHdlIHdvdWxkIGhhdmUgaW52YWxpZGF0ZWQgaXQuCisgICAgICAgIHJlZyA9ICZ2YXJpYWJs
ZUF0KG9mZnNldCk7CiAgICAgfQogICAgIHJlZy0+c2V0KHZtLCB0aGlzLCB2YWx1ZSk7CiAgICAg
cmV0dXJuIHRydWU7CkBAIC0xMTYsNyArMTExLDcgQEAgdm9pZCBKU0xleGljYWxFbnZpcm9ubWVu
dDo6Z2V0T3duTm9uSW5kZQogICAgICAgICBmb3IgKFN5bWJvbFRhYmxlOjpNYXA6Oml0ZXJhdG9y
IGl0ID0gdGhpc09iamVjdC0+c3ltYm9sVGFibGUoKS0+YmVnaW4obG9ja2VyKTsgaXQgIT0gZW5k
OyArK2l0KSB7CiAgICAgICAgICAgICBpZiAoaXQtPnZhbHVlLmdldEF0dHJpYnV0ZXMoKSAmIERv
bnRFbnVtICYmICFzaG91bGRJbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKG1vZGUpKQogICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgaWYgKCF0aGlzT2JqZWN0LT5pc1ZhbGlk
KGl0LT52YWx1ZSkpCisgICAgICAgICAgICBpZiAoIXRoaXNPYmplY3QtPmlzVmFsaWQoaXQtPnZh
bHVlLnNjb3BlT2Zmc2V0KCkpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAg
ICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcihleGVjLCBpdC0+a2V5LmdldCgpKSk7CiAg
ICAgICAgIH0KQEAgLTEzNywxMSArMTMyLDEzIEBAIGlubGluZSBib29sIEpTTGV4aWNhbEVudmly
b25tZW50OjpzeW1ib2wKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgU3ltYm9s
VGFibGVFbnRyeSYgZW50cnkgPSBpdGVyLT52YWx1ZTsKICAgICAgICAgQVNTRVJUKCFlbnRyeS5p
c051bGwoKSk7Ci0gICAgICAgIGlmICghaXNWYWxpZChlbnRyeSkpCisgICAgICAgIAorICAgICAg
ICBTY29wZU9mZnNldCBvZmZzZXQgPSBlbnRyeS5zY29wZU9mZnNldCgpOworICAgICAgICBpZiAo
IWlzVmFsaWQob2Zmc2V0KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgCiAg
ICAgICAgIGVudHJ5LnNldEF0dHJpYnV0ZXMoYXR0cmlidXRlcyk7Ci0gICAgICAgIHJlZyA9ICZy
ZWdpc3RlckF0KGVudHJ5LmdldEluZGV4KCkpOworICAgICAgICByZWcgPSAmdmFyaWFibGVBdChv
ZmZzZXQpOwogICAgIH0KICAgICByZWctPnNldCh2bSwgdGhpcywgdmFsdWUpOwogICAgIHJldHVy
biB0cnVlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMZXhpY2FsRW52
aXJvbm1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0xleGljYWxFbnZpcm9ubWVudC5oCShyZXZpc2lvbiAxODA3MjApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0xleGljYWxFbnZpcm9ubWVudC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSwgMjAxMywgMjAx
NCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgs
IDIwMDksIDIwMTMtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQxLDMzICs0MSwyNyBAQCBjbGFzcyBSZWdpc3Rl
cjsKICAgICAKIGNsYXNzIEpTTGV4aWNhbEVudmlyb25tZW50IDogcHVibGljIEpTRW52aXJvbm1l
bnRSZWNvcmQgewogcHJpdmF0ZToKLSAgICBKU0xleGljYWxFbnZpcm9ubWVudChWTSYsIENhbGxG
cmFtZSosIFJlZ2lzdGVyKiwgSlNTY29wZSosIENvZGVCbG9jayopOworICAgIEpTTGV4aWNhbEVu
dmlyb25tZW50KFZNJiwgU3RydWN0dXJlKiwgSlNTY29wZSosIFN5bWJvbFRhYmxlKik7CiAgICAg
CiBwdWJsaWM6CiAgICAgdHlwZWRlZiBKU0Vudmlyb25tZW50UmVjb3JkIEJhc2U7CiAKLSAgICBz
dGF0aWMgSlNMZXhpY2FsRW52aXJvbm1lbnQqIGNyZWF0ZShWTSYgdm0sIENhbGxGcmFtZSogY2Fs
bEZyYW1lLCBSZWdpc3RlciogcmVnaXN0ZXJzLCBKU1Njb3BlKiBjdXJyZW50U2NvcGUsIENvZGVC
bG9jayogY29kZUJsb2NrKQorICAgIHN0YXRpYyBKU0xleGljYWxFbnZpcm9ubWVudCogY3JlYXRl
KAorICAgICAgICBWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTU2NvcGUq
IGN1cnJlbnRTY29wZSwgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlKQogICAgIHsKLSAgICAgICAg
U3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlID0gY29kZUJsb2NrLT5zeW1ib2xUYWJsZSgpOwotICAg
ICAgICBBU1NFUlQoY29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSk7Ci0gICAg
ICAgIEpTTGV4aWNhbEVudmlyb25tZW50KiBsZXhpY2FsRW52aXJvbm1lbnQgPSBuZXcgKAotICAg
ICAgICAgICAgTm90TnVsbCwKLSAgICAgICAgICAgIGFsbG9jYXRlQ2VsbDxKU0xleGljYWxFbnZp
cm9ubWVudD4oCi0gICAgICAgICAgICAgICAgdm0uaGVhcCwKLSAgICAgICAgICAgICAgICBhbGxv
Y2F0aW9uU2l6ZShzeW1ib2xUYWJsZSkKLSAgICAgICAgICAgICkKLSAgICAgICAgKSBKU0xleGlj
YWxFbnZpcm9ubWVudCh2bSwgY2FsbEZyYW1lLCByZWdpc3RlcnMsIGN1cnJlbnRTY29wZSwgY29k
ZUJsb2NrKTsKLSAgICAgICAgbGV4aWNhbEVudmlyb25tZW50LT5maW5pc2hDcmVhdGlvbih2bSk7
Ci0gICAgICAgIHJldHVybiBsZXhpY2FsRW52aXJvbm1lbnQ7CisgICAgICAgIEpTTGV4aWNhbEVu
dmlyb25tZW50KiByZXN1bHQgPQorICAgICAgICAgICAgbmV3IChOb3ROdWxsLCBhbGxvY2F0aW9u
U2l6ZShzeW1ib2xUYWJsZSkpCisgICAgICAgICAgICBKU0xleGljYWxFbnZpcm9ubWVudCh2bSwg
Z2xvYmFsT2JqZWN0LT5hY3RpdmF0aW9uU3RydWN0dXJlKCksIGN1cnJlbnRTY29wZSwgc3ltYm9s
VGFibGUpOworICAgICAgICByZXN1bHQtPmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICB9Ci0gICAg
ICAgIAorICAgIAogICAgIHN0YXRpYyBKU0xleGljYWxFbnZpcm9ubWVudCogY3JlYXRlKFZNJiB2
bSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTU2NvcGUqIGN1cnJlbnRTY29wZSwgQ29kZUJsb2Nr
KiBjb2RlQmxvY2spCiAgICAgewotICAgICAgICByZXR1cm4gY3JlYXRlKHZtLCBjYWxsRnJhbWUs
IGNhbGxGcmFtZS0+cmVnaXN0ZXJzKCkgKyBjb2RlQmxvY2stPmZyYW1lUG9pbnRlck9mZnNldFRv
R2V0QWN0aXZhdGlvblJlZ2lzdGVycygpLCBjdXJyZW50U2NvcGUsIGNvZGVCbG9jayk7CisgICAg
ICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBjYWxsRnJhbWUtPmxleGljYWxHbG9i
YWxPYmplY3QoKTsKKyAgICAgICAgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlID0gY29kZUJsb2Nr
LT5zeW1ib2xUYWJsZSgpOworICAgICAgICByZXR1cm4gY3JlYXRlKHZtLCBnbG9iYWxPYmplY3Qs
IGN1cnJlbnRTY29wZSwgc3ltYm9sdGFibGUpOwogICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIHZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKLQorICAgICAgICAKICAgICBzdGF0
aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0
eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyB2b2lkIGdldE93bk5vbkluZGV4UHJv
cGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51
bWVyYXRpb25Nb2RlKTsKIApAQCAtODEsMTIgKzc1LDYgQEAgcHVibGljOgogCiAgICAgc3RhdGlj
IFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCkgeyByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwganNO
dWxsKCksIFR5cGVJbmZvKEFjdGl2YXRpb25PYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGlu
Zm8oKSk7IH0KIAotICAgIFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4mIHJlZ2lzdGVyQXQoaW50
KSBjb25zdDsKLSAgICBib29sIGlzVmFsaWRJbmRleChpbnQpIGNvbnN0OwotICAgIGJvb2wgaXNW
YWxpZChjb25zdCBTeW1ib2xUYWJsZUVudHJ5JikgY29uc3Q7Ci0gICAgaW50IHJlZ2lzdGVyc09m
ZnNldCgpOwotICAgIHN0YXRpYyBpbnQgcmVnaXN0ZXJzT2Zmc2V0KFN5bWJvbFRhYmxlKik7Ci0K
IHByb3RlY3RlZDoKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBP
dmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzIHwg
QmFzZTo6U3RydWN0dXJlRmxhZ3M7CiAKQEAgLTk2LDMyICs4NCwxMyBAQCBwcml2YXRlOgogICAg
IGJvb2wgc3ltYm9sVGFibGVHZXQoUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmLCBib29sJiBz
bG90SXNXcml0ZWFibGUpOwogICAgIGJvb2wgc3ltYm9sVGFibGVQdXQoRXhlY1N0YXRlKiwgUHJv
cGVydHlOYW1lLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKICAgICBib29sIHN5bWJvbFRh
YmxlUHV0V2l0aEF0dHJpYnV0ZXMoVk0mLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIHVuc2lnbmVk
IGF0dHJpYnV0ZXMpOwotCi0gICAgc3RhdGljIHNpemVfdCBhbGxvY2F0aW9uU2l6ZShTeW1ib2xU
YWJsZSopOwotICAgIHN0YXRpYyBzaXplX3Qgc3RvcmFnZU9mZnNldCgpOwotCi0gICAgV3JpdGVC
YXJyaWVyPFVua25vd24+KiBzdG9yYWdlKCk7IC8vIGNhcHR1cmVDb3VudCgpIG51bWJlciBvZiBy
ZWdpc3RlcnMuCiB9OwogCi1pbmxpbmUgSlNMZXhpY2FsRW52aXJvbm1lbnQ6OkpTTGV4aWNhbEVu
dmlyb25tZW50KFZNJiB2bSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIFJlZ2lzdGVyKiByZWdpc3Rl
cnMsIEpTU2NvcGUqIGN1cnJlbnRTY29wZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2spCi0gICAgOiBC
YXNlKAotICAgICAgICB2bSwKLSAgICAgICAgY2FsbEZyYW1lLT5sZXhpY2FsR2xvYmFsT2JqZWN0
KCktPmFjdGl2YXRpb25TdHJ1Y3R1cmUoKSwKLSAgICAgICAgcmVnaXN0ZXJzLAotICAgICAgICBj
dXJyZW50U2NvcGUsCi0gICAgICAgIGNvZGVCbG9jay0+c3ltYm9sVGFibGUoKSkKK2lubGluZSBK
U0xleGljYWxFbnZpcm9ubWVudDo6SlNMZXhpY2FsRW52aXJvbm1lbnQoVk0mIHZtLCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgSlNTY29wZSogY3VycmVudFNjb3BlLCBTeW1ib2xUYWJsZSogc3ltYm9s
VGFibGUpCisgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUsIGN1cnJlbnRTY29wZSwgc3ltYm9sVGFi
bGUpCiB7Ci0gICAgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlID0gY29kZUJsb2NrLT5zeW1ib2xU
YWJsZSgpOwotICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogc3RvcmFnZSA9IHRoaXMtPnN0b3Jh
Z2UoKTsKLSAgICBzaXplX3QgY2FwdHVyZUNvdW50ID0gc3ltYm9sVGFibGUtPmNhcHR1cmVDb3Vu
dCgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2FwdHVyZUNvdW50OyArK2kpCi0gICAg
ICAgIG5ldyAoTm90TnVsbCwgJnN0b3JhZ2VbaV0pIFdyaXRlQmFycmllcjxVbmtub3duPihVbmRl
ZmluZWRXcml0ZUJhcnJpZXJUYWcpOwotICAgIG1fcmVnaXN0ZXJzID0gcmVpbnRlcnByZXRfY2Fz
dF9wdHI8V3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPio+KAotICAgICAgICByZWludGVycHJldF9j
YXN0PGNoYXIqPih0aGlzKSArIHJlZ2lzdGVyc09mZnNldChzeW1ib2xUYWJsZSkpOwogfQogCi1K
U0xleGljYWxFbnZpcm9ubWVudCogYXNBY3RpdmF0aW9uKEpTVmFsdWUpOwotCiBpbmxpbmUgSlNM
ZXhpY2FsRW52aXJvbm1lbnQqIGFzQWN0aXZhdGlvbihKU1ZhbHVlIHZhbHVlKQogewogICAgIEFT
U0VSVChhc09iamVjdCh2YWx1ZSktPmluaGVyaXRzKEpTTGV4aWNhbEVudmlyb25tZW50OjppbmZv
KCkpKTsKQEAgLTEzMyw0OSArMTAyLDYgQEAgQUxXQVlTX0lOTElORSBKU0xleGljYWxFbnZpcm9u
bWVudCogUmVnaQogICAgIHJldHVybiBhc0FjdGl2YXRpb24oanNWYWx1ZSgpKTsKIH0KIAotaW5s
aW5lIGludCBKU0xleGljYWxFbnZpcm9ubWVudDo6cmVnaXN0ZXJzT2Zmc2V0KFN5bWJvbFRhYmxl
KiBzeW1ib2xUYWJsZSkKLXsKLSAgICByZXR1cm4gc3RvcmFnZU9mZnNldCgpICsgKChzeW1ib2xU
YWJsZS0+Y2FwdHVyZUNvdW50KCkgLSBzeW1ib2xUYWJsZS0+Y2FwdHVyZVN0YXJ0KCkgIC0gMSkg
KiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSk7Ci19Ci0KLWlubGluZSBzaXplX3QgSlNM
ZXhpY2FsRW52aXJvbm1lbnQ6OnN0b3JhZ2VPZmZzZXQoKQotewotICAgIHJldHVybiBXVEY6OnJv
dW5kVXBUb011bHRpcGxlT2Y8c2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPik+KHNpemVvZihK
U0xleGljYWxFbnZpcm9ubWVudCkpOwotfQotCi1pbmxpbmUgV3JpdGVCYXJyaWVyPFVua25vd24+
KiBKU0xleGljYWxFbnZpcm9ubWVudDo6c3RvcmFnZSgpCi17Ci0gICAgcmV0dXJuIHJlaW50ZXJw
cmV0X2Nhc3RfcHRyPFdyaXRlQmFycmllcjxVbmtub3duPio+KAotICAgICAgICByZWludGVycHJl
dF9jYXN0PGNoYXIqPih0aGlzKSArIHN0b3JhZ2VPZmZzZXQoKSk7Ci19Ci0KLWlubGluZSBzaXpl
X3QgSlNMZXhpY2FsRW52aXJvbm1lbnQ6OmFsbG9jYXRpb25TaXplKFN5bWJvbFRhYmxlKiBzeW1i
b2xUYWJsZSkKLXsKLSAgICBzaXplX3Qgb2JqZWN0U2l6ZUluQnl0ZXMgPSBXVEY6OnJvdW5kVXBU
b011bHRpcGxlT2Y8c2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPik+KHNpemVvZihKU0xleGlj
YWxFbnZpcm9ubWVudCkpOwotICAgIHNpemVfdCBzdG9yYWdlU2l6ZUluQnl0ZXMgPSBzeW1ib2xU
YWJsZS0+Y2FwdHVyZUNvdW50KCkgKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KTsKLSAg
ICByZXR1cm4gb2JqZWN0U2l6ZUluQnl0ZXMgKyBzdG9yYWdlU2l6ZUluQnl0ZXM7Ci19Ci0KLWlu
bGluZSBib29sIEpTTGV4aWNhbEVudmlyb25tZW50Ojppc1ZhbGlkSW5kZXgoaW50IGluZGV4KSBj
b25zdAotewotICAgIGlmIChpbmRleCA+IHN5bWJvbFRhYmxlKCktPmNhcHR1cmVTdGFydCgpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGluZGV4IDw9IHN5bWJvbFRhYmxlKCktPmNh
cHR1cmVFbmQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiB0cnVlOwotfQot
Ci1pbmxpbmUgYm9vbCBKU0xleGljYWxFbnZpcm9ubWVudDo6aXNWYWxpZChjb25zdCBTeW1ib2xU
YWJsZUVudHJ5JiBlbnRyeSkgY29uc3QKLXsKLSAgICByZXR1cm4gaXNWYWxpZEluZGV4KGVudHJ5
LmdldEluZGV4KCkpOwotfQotCi1pbmxpbmUgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiYgSlNM
ZXhpY2FsRW52aXJvbm1lbnQ6OnJlZ2lzdGVyQXQoaW50IGluZGV4KSBjb25zdAotewotICAgIEFT
U0VSVChpc1ZhbGlkSW5kZXgoaW5kZXgpKTsKLSAgICByZXR1cm4gQmFzZTo6cmVnaXN0ZXJBdChp
bmRleCk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gSlNMZXhpY2FsRW52
aXJvbm1lbnRfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNOYW1lU2Nv
cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTmFt
ZVNjb3BlLmNwcAkocmV2aXNpb24gMTgwNzIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNOYW1lU2NvcGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NywxNCArNDcsNiBAQCBK
U05hbWVTY29wZSogSlNOYW1lU2NvcGU6OmNyZWF0ZShWTSYgdm0sCiAgICAgcmV0dXJuIG51bGxw
dHI7CiB9CiAKLXZvaWQgSlNOYW1lU2NvcGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBT
bG90VmlzaXRvciYgdmlzaXRvcikKLXsKLSAgICBKU05hbWVTY29wZSogdGhpc09iamVjdCA9IGpz
Q2FzdDxKU05hbWVTY29wZSo+KGNlbGwpOwotICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMo
dGhpc09iamVjdCwgaW5mbygpKTsKLSAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3Qs
IHZpc2l0b3IpOwotICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX3JlZ2lzdGVyU3Rv
cmUpOwotfQotCiBKU1ZhbHVlIEpTTmFtZVNjb3BlOjp0b1RoaXMoSlNDZWxsKiwgRXhlY1N0YXRl
KiBleGVjLCBFQ01BTW9kZSBlY21hTW9kZSkKIHsKICAgICBpZiAoZWNtYU1vZGUgPT0gU3RyaWN0
TW9kZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTmFtZVNjb3BlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNOYW1lU2NvcGUu
aAkocmV2aXNpb24gMTgwNzIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNO
YW1lU2NvcGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsMzggKzQ0LDM3IEBAIHB1YmxpYzoKICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogICAgIHN0YXRpYyBUKiBjcmVhdGUoVk0mIHZtLCBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1Njb3BlKiBjdXJyZW50U2NvcGUsIFN5bWJvbFRh
YmxlKiBzeW1ib2xUYWJsZSwgSlNWYWx1ZSB2YWx1ZSkKICAgICB7Ci0gICAgICAgIFQqIHNjb3Bl
T2JqZWN0ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8VD4odm0uaGVhcCkpIFQodm0sIGds
b2JhbE9iamVjdCwgY3VycmVudFNjb3BlLCBzeW1ib2xUYWJsZSk7CisgICAgICAgIFQqIHNjb3Bl
T2JqZWN0ID0gbmV3ICgKKyAgICAgICAgICAgIE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxUPih2bS5o
ZWFwLCBhbGxvY2F0aW9uU2l6ZUZvclNjb3BlU2l6ZSgxKSkKKyAgICAgICAgICAgIFQodm0sIGds
b2JhbE9iamVjdCwgY3VycmVudFNjb3BlLCBzeW1ib2xUYWJsZSk7CiAgICAgICAgIHNjb3BlT2Jq
ZWN0LT5maW5pc2hDcmVhdGlvbih2bSwgdmFsdWUpOwogICAgICAgICByZXR1cm4gc2NvcGVPYmpl
Y3Q7CiAgICAgfQogICAgIAogICAgIHN0YXRpYyBKU05hbWVTY29wZSogY3JlYXRlKFZNJiwgSlNH
bG9iYWxPYmplY3QqLCBKU1Njb3BlKiBjdXJyZW50U2NvcGUsIFN5bWJvbFRhYmxlKiwgSlNWYWx1
ZSwgVHlwZSk7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RW
aXNpdG9yJik7CiAgICAgc3RhdGljIEpTVmFsdWUgdG9UaGlzKEpTQ2VsbCosIEV4ZWNTdGF0ZSos
IEVDTUFNb2RlKTsKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3Qq
LCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyB2
b2lkIHB1dChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFBy
b3BlcnR5U2xvdCYpOwogCiAgICAgREVDTEFSRV9JTkZPOwogCi0gICAgSlNWYWx1ZSB2YWx1ZSgp
IGNvbnN0IHsgcmV0dXJuIG1fcmVnaXN0ZXJTdG9yZS5nZXQoKTsgfQorICAgIEpTVmFsdWUgdmFs
dWUoKSBjb25zdCB7IHJldHVybiB2YXJpYWJsZUF0KDApLmdldCgpOyB9CiAKIHByb3RlY3RlZDoK
ICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiB2bSwgSlNWYWx1ZSB2YWx1ZSkKICAgICB7Ci0g
ICAgICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKLSAgICAgICAgbV9yZWdpc3RlclN0b3Jl
LnNldCh2bSwgdGhpcywgdmFsdWUpOworICAgICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvblVuaW5p
dGlhbGl6ZWQodm0pOworICAgICAgICB2YXJpYWJsZUF0KDApLnNldCh2bSwgdGhpcywgdmFsdWUp
OwogICAgIH0KIAogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92
ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEJhc2U6OlN0cnVjdHVyZUZsYWdzOwogCiAgICAg
SlNOYW1lU2NvcGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNTY29wZSogbmV4dCwg
U3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlKQotICAgICAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSwg
cmVpbnRlcnByZXRfY2FzdDxSZWdpc3Rlcio+KCZtX3JlZ2lzdGVyU3RvcmUgKyAxKSwgbmV4dCwg
c3ltYm9sVGFibGUpCisgICAgICAgIDogQmFzZSh2bSwgc3RydWN0dXJlLCBuZXh0LCBzeW1ib2xU
YWJsZSkKICAgICB7CisgICAgICAgIEFTU0VSVChzeW1ib2xUYWJsZS0+c2NvcGVTaXplKCkgPT0g
MSk7CiAgICAgfQotCi1wcml2YXRlOgotICAgIFdyaXRlQmFycmllcjxVbmtub3duPiBtX3JlZ2lz
dGVyU3RvcmU7CiB9OwogCiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmNwcAkocmV2aXNpb24g
MTgwNzIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJp
YWJsZU9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMiwgMjAxMywgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMzLDMyICszMywzMCBA
QAogCiBuYW1lc3BhY2UgSlNDIHsKIAotaW50IEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3Q6OmZp
bmRSZWdpc3RlckluZGV4KHZvaWQqIHJlZ2lzdGVyQWRkcmVzcykKK1Njb3BlT2Zmc2V0IEpTU2Vn
bWVudGVkVmFyaWFibGVPYmplY3Q6OmZpbmRSZWdpc3RlckluZGV4KHZvaWQqIHJlZ2lzdGVyQWRk
cmVzcykKIHsKICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2spOwogICAgIAot
ICAgIGZvciAoaW50IGkgPSBtX3JlZ2lzdGVycy5zaXplKCk7IGktLTspIHsKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSBtX3JlZ2lzdGVycy5zaXplKCk7IGktLTspIHsKICAgICAgICAgaWYgKCZtX3Jl
Z2lzdGVyc1tpXSAhPSByZWdpc3RlckFkZHJlc3MpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgcmV0dXJuIGk7CisgICAgICAgIHJldHVybiBTY29wZU9mZnNldChpKTsKICAgICB9CiAg
ICAgQ1JBU0goKTsKLSAgICByZXR1cm4gLTE7CisgICAgcmV0dXJuIFNjb3BlT2Zmc2V0KCk7CiB9
CiAKLWludCBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0OjphZGRSZWdpc3RlcnMoaW50IG51bWJl
ck9mUmVnaXN0ZXJzVG9BZGQpCitTY29wZU9mZnNldCBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0
OjphZGRSZWdpc3RlcnModW5zaWduZWQgbnVtYmVyT2ZSZWdpc3RlcnNUb0FkZCkKIHsKICAgICBD
b25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2spOwogICAgIAotICAgIEFTU0VSVChudW1i
ZXJPZlJlZ2lzdGVyc1RvQWRkID49IDApOwotICAgIAogICAgIHNpemVfdCBvbGRTaXplID0gbV9y
ZWdpc3RlcnMuc2l6ZSgpOwogICAgIG1fcmVnaXN0ZXJzLmdyb3cob2xkU2l6ZSArIG51bWJlck9m
UmVnaXN0ZXJzVG9BZGQpOwogICAgIAogICAgIGZvciAoc2l6ZV90IGkgPSBudW1iZXJPZlJlZ2lz
dGVyc1RvQWRkOyBpLS07KQogICAgICAgICBtX3JlZ2lzdGVyc1tvbGRTaXplICsgaV0uc2V0V2l0
aG91dFdyaXRlQmFycmllcihqc1VuZGVmaW5lZCgpKTsKICAgICAKLSAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8aW50PihvbGRTaXplKTsKKyAgICByZXR1cm4gU2NvcGVPZmZzZXQob2xkU2l6ZSk7CiB9
CiAKIHZvaWQgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwq
IGNlbGwsIFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmgJ
KHJldmlzaW9uIDE4MDcyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2Vn
bWVudGVkVmFyaWFibGVPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNTcsMjQgKzU3LDIzIEBA
IGNsYXNzIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3QgOiBwdWJsaWMKIHB1YmxpYzoKICAgICB0
eXBlZGVmIEpTU3ltYm9sVGFibGVPYmplY3QgQmFzZTsKIAotICAgIFdyaXRlQmFycmllcjxVbmtu
b3duPiYgcmVnaXN0ZXJBdChpbnQgaW5kZXgpIHsgcmV0dXJuIG1fcmVnaXN0ZXJzW2luZGV4XTsg
fQorICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgdmFyaWFibGVBdChTY29wZU9mZnNldCBvZmZz
ZXQpIHsgcmV0dXJuIG1fdmFyaWFibGVzW29mZnNldC5vZmZzZXQoKV07IH0KICAgICAKICAgICAv
LyBUaGlzIGlzIGEgc2xvdyBtZXRob2QgY2FsbCwgd2hpY2ggc2VhcmNoZXMgdGhlIHJlZ2lzdGVy
IGJhbmsgdG8gZmluZCB0aGUgaW5kZXgKICAgICAvLyBnaXZlbiBhIHBvaW50ZXIuIEl0IHdpbGwg
Q1JBU0goKSBpZiBpdCBkb2VzIG5vdCBmaW5kIHRoZSByZWdpc3Rlci4gT25seSB1c2UgdGhpcwog
ICAgIC8vIGluIGRlYnVnIGNvZGUgKGxpa2UgYnl0ZWNvZGUgZHVtcGluZykuCi0gICAgSlNfRVhQ
T1JUX1BSSVZBVEUgaW50IGZpbmRSZWdpc3RlckluZGV4KHZvaWQqKTsKKyAgICBKU19FWFBPUlRf
UFJJVkFURSBTY29wZU9mZnNldCBmaW5kUmVnaXN0ZXJJbmRleCh2b2lkKik7CiAgICAgCi0gICAg
V3JpdGVCYXJyaWVyPFVua25vd24+KiBhc3NlcnRSZWdpc3RlcklzSW5UaGlzT2JqZWN0KFdyaXRl
QmFycmllcjxVbmtub3duPiogcmVnaXN0ZXJQb2ludGVyKQorICAgIFdyaXRlQmFycmllcjxVbmtu
b3duPiogYXNzZXJ0VmFyaWFibGVJc0luVGhpc09iamVjdChXcml0ZUJhcnJpZXI8VW5rbm93bj4q
IHZhcmlhYmxlUG9pbnRlcikKICAgICB7Ci0jaWYgIUFTU0VSVF9ESVNBQkxFRAotICAgICAgICBm
aW5kUmVnaXN0ZXJJbmRleChyZWdpc3RlclBvaW50ZXIpOwotI2VuZGlmCisgICAgICAgIGlmICgh
QVNTRVJUX0RJU0FCTEVEKQorICAgICAgICAgICAgZmluZFJlZ2lzdGVySW5kZXgocmVnaXN0ZXJQ
b2ludGVyKTsKICAgICAgICAgcmV0dXJuIHJlZ2lzdGVyUG9pbnRlcjsKICAgICB9CiAgICAgCiAg
ICAgLy8gQWRkcyBudW1iZXJPZlJlZ2lzdGVyc1RvQWRkIHJlZ2lzdGVycywgaW5pdGlhbGl6ZXMg
dGhlbSB0byBVbmRlZmluZWQsIGFuZCByZXR1cm5zCiAgICAgLy8gdGhlIGluZGV4IG9mIHRoZSBm
aXJzdCBvbmUgYWRkZWQuCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgaW50IGFkZFJlZ2lzdGVycyhp
bnQgbnVtYmVyT2ZSZWdpc3RlcnNUb0FkZCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgU2NvcGVP
ZmZzZXQgYWRkUmVnaXN0ZXJzKHVuc2lnbmVkIG51bWJlck9mUmVnaXN0ZXJzVG9BZGQpOwogICAg
IAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiwgU2xvdFZpc2l0b3ImKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNTeW1ib2xUYWJsZU9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuaAkocmV2aXNpb24gMTgwNzIwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5oCSh3b3JraW5n
IGNvcHkpCkBAIC03OCw3ICs3OCw3IEBAIGlubGluZSBib29sIHN5bWJvbFRhYmxlR2V0KAogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgU3ltYm9sVGFibGVFbnRyeTo6RmFzdCBlbnRyeSA9IGl0
ZXItPnZhbHVlOwogICAgIEFTU0VSVCghZW50cnkuaXNOdWxsKCkpOwotICAgIHNsb3Quc2V0VmFs
dWUob2JqZWN0LCBlbnRyeS5nZXRBdHRyaWJ1dGVzKCkgfCBEb250RGVsZXRlLCBvYmplY3QtPnJl
Z2lzdGVyQXQoZW50cnkuZ2V0SW5kZXgoKSkuZ2V0KCkpOworICAgIHNsb3Quc2V0VmFsdWUob2Jq
ZWN0LCBlbnRyeS5nZXRBdHRyaWJ1dGVzKCkgfCBEb250RGVsZXRlLCBvYmplY3QtPnZhcmlhYmxl
QXQoZW50cnkuc2NvcGVPZmZzZXQoKSkuZ2V0KCkpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBA
IC05NCw3ICs5NCw3IEBAIGlubGluZSBib29sIHN5bWJvbFRhYmxlR2V0KAogICAgIFN5bWJvbFRh
YmxlRW50cnk6OkZhc3QgZW50cnkgPSBpdGVyLT52YWx1ZTsKICAgICBBU1NFUlQoIWVudHJ5Lmlz
TnVsbCgpKTsKICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3IoCi0gICAgICAgIG9iamVjdC0+
cmVnaXN0ZXJBdChlbnRyeS5nZXRJbmRleCgpKS5nZXQoKSwgZW50cnkuZ2V0QXR0cmlidXRlcygp
IHwgRG9udERlbGV0ZSk7CisgICAgICAgIG9iamVjdC0+dmFyaWFibGVBdChlbnRyeS5zY29wZU9m
ZnNldCgpKS5nZXQoKSwgZW50cnkuZ2V0QXR0cmlidXRlcygpIHwgRG9udERlbGV0ZSk7CiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKQEAgLTExMCw3ICsxMTAsNyBAQCBpbmxpbmUgYm9vbCBzeW1ib2xU
YWJsZUdldCgKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIFN5bWJvbFRhYmxlRW50cnk6OkZh
c3QgZW50cnkgPSBpdGVyLT52YWx1ZTsKICAgICBBU1NFUlQoIWVudHJ5LmlzTnVsbCgpKTsKLSAg
ICBzbG90LnNldFZhbHVlKG9iamVjdCwgZW50cnkuZ2V0QXR0cmlidXRlcygpIHwgRG9udERlbGV0
ZSwgb2JqZWN0LT5yZWdpc3RlckF0KGVudHJ5LmdldEluZGV4KCkpLmdldCgpKTsKKyAgICBzbG90
LnNldFZhbHVlKG9iamVjdCwgZW50cnkuZ2V0QXR0cmlidXRlcygpIHwgRG9udERlbGV0ZSwgb2Jq
ZWN0LT52YXJpYWJsZUF0KGVudHJ5LnNjb3BlT2Zmc2V0KCkpLmdldCgpKTsKICAgICBzbG90SXNX
cml0ZWFibGUgPSAhZW50cnkuaXNSZWFkT25seSgpOwogICAgIHJldHVybiB0cnVlOwogfQpAQCAt
MTQ1LDcgKzE0NSw3IEBAIGlubGluZSBib29sIHN5bWJvbFRhYmxlUHV0KAogICAgICAgICAgICAg
Ly8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNDYwMQogICAgICAg
ICAgICAgc2V0LT5ub3RpZnlXcml0ZSh2bSwgdmFsdWUsIG9iamVjdCwgcHJvcGVydHlOYW1lKTsK
ICAgICAgICAgfQotICAgICAgICByZWcgPSAmb2JqZWN0LT5yZWdpc3RlckF0KGZhc3RFbnRyeS5n
ZXRJbmRleCgpKTsKKyAgICAgICAgcmVnID0gJm9iamVjdC0+dmFyaWFibGVBdChmYXN0RW50cnku
c2NvcGVPZmZzZXQoKSk7CiAgICAgfQogICAgIC8vIEknZCBwcmVmZXIgd2Ugbm90IGhvbGQgbG9j
ayB3aGlsZSBleGVjdXRpbmcgYmFycmllcnMsIHNpbmNlIEkgcHJlZmVyIHRvIHJlc2VydmUKICAg
ICAvLyB0aGUgcmlnaHQgZm9yIGJhcnJpZXJzIHRvIGJlIGFibGUgdG8gdHJpZ2dlciBHQy4gQW5k
IEkgZG9uJ3Qgd2FudCB0byBob2xkIFZNCkBAIC0xNzMsNyArMTczLDcgQEAgaW5saW5lIGJvb2wg
c3ltYm9sVGFibGVQdXRXaXRoQXR0cmlidXRlcwogICAgICAgICBpZiAoVmFyaWFibGVXYXRjaHBv
aW50U2V0KiBzZXQgPSBlbnRyeS53YXRjaHBvaW50U2V0KCkpCiAgICAgICAgICAgICBzZXQtPm5v
dGlmeVdyaXRlKHZtLCB2YWx1ZSwgb2JqZWN0LCBwcm9wZXJ0eU5hbWUpOwogICAgICAgICBlbnRy
eS5zZXRBdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpOwotICAgICAgICByZWcgPSAmb2JqZWN0LT5yZWdp
c3RlckF0KGVudHJ5LmdldEluZGV4KCkpOworICAgICAgICByZWcgPSAmb2JqZWN0LT52YXJpYWJs
ZUF0KGVudHJ5LnNjb3BlT2Zmc2V0KCkpOwogICAgIH0KICAgICByZWctPnNldCh2bSwgb2JqZWN0
LCB2YWx1ZSk7CiAgICAgcmV0dXJuIHRydWU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1R5cGUuaAkocmV2aXNpb24gMTgwNzIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU4LDcgKzU4LDggQEAgZW51bSBK
U1R5cGUgOiB1aW50OF90IHsKICAgICBQdXJlRm9yd2FyZGluZ1Byb3h5VHlwZSwKICAgICBJbXB1
cmVQcm94eVR5cGUsCiAgICAgV2l0aFNjb3BlVHlwZSwKLSAgICBBcmd1bWVudHNUeXBlLAorICAg
IERpcmVjdEFyZ3VtZW50c1R5cGUsCisgICAgU2NvcGVkQXJndW1lbnRzVHlwZSwKIAogICAgIElu
dDhBcnJheVR5cGUsCiAgICAgSW50MTZBcnJheVR5cGUsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9PdXRPZkJhbmRBcmd1bWVudHMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL091dE9mQmFuZEFyZ3VtZW50cy5jcHAJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PdXRPZkJhbmRBcmd1bWVudHMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjEzIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJPdXRPZkJhbmRBcmd1bWVudHMuaCIKKworI2luY2x1ZGUgIkpTQXJndW1lbnRzSXRlcmF0b3Iu
aCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitTVEFUSUNf
QVNTRVJUX0lTX1RSSVZJQUxMWV9ERVNUUlVDVElCTEUoT3V0T2ZCYW5kQXJndW1lbnRzKTsKKwor
Y29uc3QgQ2xhc3NJbmZvIE91dE9mQmFuZEFyZ3VtZW50czo6c19pbmZvID0geyAiQXJndW1lbnRz
IiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShPdXRPZkJhbmRBcmd1bWVu
dHMpIH07CisKK091dE9mQmFuZEFyZ3VtZW50czo6T3V0T2ZCYW5kQXJndW1lbnRzKFZNJiB2bSwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUsIG51bGxwdHIp
CisgICAgLCBtX3NwZWNpYWxzTWF0ZXJpYWxpemVkKGZhbHNlKQoreworfQorCitPdXRPZkJhbmRB
cmd1bWVudHMqIE91dE9mQmFuZEFyZ3VtZW50czo6Y3JlYXRlRW1wdHkoCisgICAgVk0mIHZtLCBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0Z1bmN0aW9uKiBjYWxsZWUpCit7CisgICAg
T3V0T2ZCYW5kQXJndW1lbnRzKiByZXN1bHQgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxP
dXRPZkJhbmRBcmd1bWVudHM+KHZtLmhlYXApKQorICAgICAgICBPdXRPZkJhbmRBcmd1bWVudHMo
dm0sIGdsb2JhbE9iamVjdC0+b3V0T2ZCYW5kQXJndW1lbnRzU3RydWN0dXJlKCkpOworICAgIHJl
c3VsdC0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgIHJlc3VsdC0+bV9jYWxsZWUuc2V0KHZtLCB0
aGlzLCBjYWxsZWUpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK091dE9mQmFuZEFyZ3VtZW50
cyogT3V0T2ZCYW5kQXJndW1lbnRzOjpjcmVhdGVFbXB0eShFeGVjU3RhdGUqIGV4ZWMsIEpTRnVu
Y3Rpb24qIGNhbGxlZSkKK3sKKyAgICAvLyBOQi4gU29tZSBjbGllbnRzIG1pZ2h0IGV4cGVjdCB0
aGF0IHRoZSBnbG9iYWwgb2JqZWN0IG9mIG9mIHRoaXMgb2JqZWN0IGlzIHRoZSBnbG9iYWwgb2Jq
ZWN0CisgICAgLy8gb2YgdGhlIGNhbGxlZS4gV2UgZG9uJ3QgZG8gdGhpcyBmb3Igbm93LCBidXQg
bWF5YmUgd2Ugc2hvdWxkLgorICAgIHJldHVybiBjcmVhdGVFbXB0eShleGVjLT52bSgpLCBleGVj
LT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGNhbGxlZSk7Cit9CisKK091dE9mQmFuZEFyZ3VtZW50
cyogT3V0T2ZCYW5kQXJndW1lbnRzOjpjcmVhdGVXaXRoSW5saW5lRnJhbWUoRXhlY1N0YXRlKiBt
eUZyYW1lLCBFeGVjU3RhdGUqIHRhcmdldEZyYW1lLCBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNh
bGxGcmFtZSwgQXJndW1lbnRzTW9kZSBtb2RlKQoreworICAgIFZNJiB2bSA9IG15RnJhbWUtPnZt
KCk7CisgICAgCisgICAgSlNGdW5jdGlvbiogY2FsbGVlOworICAgIAorICAgIGlmIChpbmxpbmVD
YWxsRnJhbWUpCisgICAgICAgIGNhbGxlZSA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4oaW5saW5lQ2Fs
bEZyYW1lLT5jYWxsZWVSZWNvdmVyeS5yZWNvdmVyKHRhcmdldEZyYW1lKSk7CisgICAgZWxzZQor
ICAgICAgICBjYWxsZWUgPSBqc0Nhc3Q8SlNGdW5jdGlvbio+KHRhcmdldEZyYW1lLT5jYWxsZWUo
KSk7CisKKyAgICAvLyBOQi4gSXQncyBzb21ld2hhdCBhcmJpdHJhcnkgdGhhdCB3ZSB0aWUgdGhl
IHN0cmljdG5lc3Mgb2YgdGhpcyBvYmplY3QgdG8gdGhlIHN0cmljdG5lc3Mgb2YKKyAgICAvLyB0
aGUgY2FsbGVlLgorICAgIGJvb2wgaXNTdHJpY3RNb2RlID0gZXhlY3V0YWJsZS0+aXNTdHJpY3RN
b2RlKCk7CisKKyAgICBPdXRPZkJhbmRBcmd1bWVudHMqIHJlc3VsdCA9IGNyZWF0ZUVtcHR5KG15
RnJhbWUsIGNhbGxlZSk7CisgICAgCisgICAgdW5zaWduZWQgbGVuZ3RoOworICAgIHN3aXRjaCAo
bW9kZSkgeworICAgIGNhc2UgQ2xvbmVkQXJndW1lbnRzQ3JlYXRpb25Nb2RlOiB7CisgICAgICAg
IGlmIChpbmxpbmVDYWxsRnJhbWUpIHsKKyAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUt
PmFyZ3VtZW50Q291bnRSZWdpc3Rlci5pc1ZhbGlkKCkpCisgICAgICAgICAgICAgICAgbGVuZ3Ro
ID0gZXhlYy0+cihpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRSZWdpc3RlcikudW5ib3hl
ZEludDMyKCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbGVuZ3RoID0gaW5s
aW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpOworICAgICAgICAgICAgbGVuZ3RoLS07Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGxlbmd0aDsgaS0tOykK
KyAgICAgICAgICAgICAgICByZXN1bHQtPnB1dERpcmVjdEluZGV4KG15RnJhbWUsIGksIGlubGlu
ZUNhbGxGcmFtZS0+YXJndW1lbnRzW2ldLnJlY292ZXIodGFyZ2V0RnJhbWUpKTsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIGxlbmd0aCA9IHRhcmdldEZyYW1lLT5hcmd1bWVudENvdW50
KCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGxlbmd0aDsg
aS0tOykKKyAgICAgICAgICAgICAgICByZXN1bHQtPnB1dERpcmVjdEluZGV4KG15RnJhbWUsIGks
IHRhcmdldEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudChpKSk7CisgICAgICAgIH0KKyAgICAgICAg
YnJlYWs7CisgICAgfQorICAgICAgICAKKyAgICBjYXNlIEZha2VBcmd1bWVudFZhbHVlc0NyZWF0
aW9uTW9kZTogeworICAgICAgICBsZW5ndGggPSAwOworICAgICAgICBicmVhazsKKyAgICB9IH0K
KyAgICAKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3Ro
LCBqc051bWJlcihsZW5ndGgpKTsKKyAgICBpZiAoaXNTdHJpY3RNb2RlKSB7CisgICAgICAgIHJl
c3VsdC0+cHV0RGlyZWN0QWNjZXNzb3IoZXhlYywgdm0ucHJvcGVydHlOYW1lcy0+Y2FsbGVlLCB0
aGlzT2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+dGhyb3dUeXBlRXJyb3JHZXR0ZXJTZXR0ZXIoZXhl
Yy0+dm0oKSksIERvbnREZWxldGUgfCBEb250RW51bSB8IEFjY2Vzc29yKTsKKyAgICAgICAgcmVz
dWx0LT5wdXREaXJlY3RBY2Nlc3NvcihleGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT5jYWxsZWUsIHRo
aXNPYmplY3QtPmdsb2JhbE9iamVjdCgpLT50aHJvd1R5cGVFcnJvckdldHRlclNldHRlcihleGVj
LT52bSgpKSwgRG9udERlbGV0ZSB8IERvbnRFbnVtIHwgQWNjZXNzb3IpOworICAgIH0gZWxzZQor
ICAgICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+Y2FsbGVlLCBK
U1ZhbHVlKGNhbGxlZSkpOworICAgIAorICAgIHJlc3VsdC0+SlNDX05BVElWRV9GVU5DVElPTih2
bS5wcm9wZXJ0eU5hbWVzLT5pdGVyYXRvclByaXZhdGVOYW1lLCBhcmd1bWVudHNGdW5jSXRlcmF0
b3IsIERvbnRFbnVtLCAwKTsKK30KKworT3V0T2ZCYW5kQXJndW1lbnRzKiBPdXRPZkJhbmRBcmd1
bWVudHM6OmNyZWF0ZVdpdGhNYWNoaW5lRnJhbWUoRXhlY1N0YXRlKiBteUZyYW1lLCBFeGVjU3Rh
dGUqIHRhcmdldEZyYW1lLCBBcmd1bWVudHNNb2RlIG1vZGUpCit7CisgICAgcmV0dXJuIGNyZWF0
ZVdpdGhJbmxpbmVGcmFtZShteUZyYW1lLCB0YXJnZXRGcmFtZSwgbnVsbHB0ciwgbW9kZSk7Cit9
CisKK1N0cnVjdHVyZSogT3V0T2ZCYW5kQXJndW1lbnRzOjpjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZt
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKK3sKKyAg
ICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBU
eXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Cit9CisKK2Jvb2wg
T3V0T2ZCYW5kQXJndW1lbnRzOjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqIG9iamVjdCwg
RXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgaWRlbnQsIFByb3BlcnR5U2xvdCYgc2xvdCkK
K3sKKyAgICBPdXRPZkJhbmRBcmd1bWVudHMqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8T3V0T2ZCYW5k
QXJndW1lbnRzKj4ob2JqZWN0KTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIAorICAg
IGlmIChpZGVudCA9PSB2bS5wcm9wZXJ0eU5hbWVzLT5jYWxsZXIKKyAgICAgICAgfHwgaWRlbnQg
PT0gdm0ucHJvcGVydHlOYW1lcy0+Y2FsbGVlKQorICAgICAgICB0aGlzT2JqZWN0LT5tYXRlcmlh
bGl6ZVNwZWNpYWxzSWZOZWNlc3NhcnkoZXhlYyk7CisgICAgCisgICAgaWYgKEJhc2U6OmdldE93
blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBleGVjLCBpZGVudCwgc2xvdCkpCisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIAorICAgIGlmIChpZGVudCA9PSB2bS5wcm9wZXJ0eU5hbWVzLT5pdGVy
YXRvclByaXZhdGVOYW1lKSB7CisgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qg
PSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7CisgICAgICAgIHRoaXNPYmplY3QtPkpTQ19O
QVRJVkVfRlVOQ1RJT04odm0ucHJvcGVydHlOYW1lcy0+aXRlcmF0b3JQcml2YXRlTmFtZSwgYXJn
dW1lbnRzRnVuY0l0ZXJhdG9yLCBEb250RW51bSwgMCk7CisgICAgICAgIGlmIChKU09iamVjdDo6
Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIGV4ZWMsIGlkZW50LCBzbG90KSkKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K3ZvaWQgT3V0T2ZCYW5kQXJndW1lbnRzOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBv
YmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIGFycmF5LCBFbnVtZXJh
dGlvbk1vZGUgbW9kZSkKK3sKKyAgICBPdXRPZkJhbmRBcmd1bWVudHMqIHRoaXNPYmplY3QgPSBq
c0Nhc3Q8T3V0T2ZCYW5kQXJndW1lbnRzKj4ob2JqZWN0KTsKKyAgICB0aGlzT2JqZWN0LT5tYXRl
cmlhbGl6ZVNwZWNpYWxzSWZOZWNlc3NhcnkoZXhlYyk7CisgICAgQmFzZTo6Z2V0T3duUHJvcGVy
dHlOYW1lcyh0aGlzT2JqZWN0LCBleGVjLCBhcnJheSwgbW9kZSk7Cit9CisKK3ZvaWQgT3V0T2ZC
YW5kQXJndW1lbnRzOjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5
TmFtZSBpZGVudCwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQoreworICAg
IE91dE9mQmFuZEFyZ3VtZW50cyogdGhpc09iamVjdCA9IGpzQ2FzdDxPdXRPZkJhbmRBcmd1bWVu
dHMqPihvYmplY3QpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgCisgICAgaWYgKGlk
ZW50ID09IHZtLnByb3BlcnR5TmFtZXMtPmNhbGxlZQorICAgICAgICB8fCBpZGVudCA9PSB2bS5w
cm9wZXJ0eU5hbWVzLT5jYWxsZXIpCisgICAgICAgIHRoaXNPYmplY3QtPm1hdGVyaWFsaXplU3Bl
Y2lhbHNJZk5lY2Vzc2FyeShleGVjKTsKKyAgICAKKyAgICBCYXNlOjpwdXQodGhpc09iamVjdCwg
ZXhlYywgaWRlbnQsIHZhbHVlLCBzbG90KTsKK30KKwordm9pZCBPdXRPZkJhbmRBcmd1bWVudHM6
OmRlbGV0ZVByb3BlcnR5KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5h
bWUgaWRlbnQpCit7CisgICAgT3V0T2ZCYW5kQXJndW1lbnRzKiB0aGlzT2JqZWN0ID0ganNDYXN0
PE91dE9mQmFuZEFyZ3VtZW50cyo+KG9iamVjdCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsK
KyAgICAKKyAgICBpZiAoaWRlbnQgPT0gdm0ucHJvcGVydHlOYW1lcy0+Y2FsbGVlCisgICAgICAg
IHx8IGlkZW50ID09IHZtLnByb3BlcnR5TmFtZXMtPmNhbGxlcikKKyAgICAgICAgdGhpc09iamVj
dC0+bWF0ZXJpYWxpemVTcGVjaWFsc0lmTmVjZXNzYXJ5KGV4ZWMpOworICAgIAorICAgIEJhc2U6
OmRlbGV0ZVByb3BlcnR5KHRoaXNPYmplY3QsIGV4ZWMsIGlkZW50KTsKK30KKwordm9pZCBPdXRP
ZkJhbmRBcmd1bWVudHM6OmRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNT
dGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIGlkZW50LCBjb25zdCBQcm9wZXJ0eURlc2NyaXB0b3Im
IGRlc2NyaXB0b3IsIGJvb2wgc2hvdWxkVGhyb3cpCit7CisgICAgT3V0T2ZCYW5kQXJndW1lbnRz
KiB0aGlzT2JqZWN0ID0ganNDYXN0PE91dE9mQmFuZEFyZ3VtZW50cyo+KG9iamVjdCk7CisgICAg
Vk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICAKKyAgICBpZiAoaWRlbnQgPT0gdm0ucHJvcGVydHlO
YW1lcy0+Y2FsbGVlCisgICAgICAgIHx8IGlkZW50ID09IHZtLnByb3BlcnR5TmFtZXMtPmNhbGxl
cikKKyAgICAgICAgdGhpc09iamVjdC0+bWF0ZXJpYWxpemVTcGVjaWFsc0lmTmVjZXNzYXJ5KGV4
ZWMpOworICAgIAorICAgIHJldHVybiBCYXNlOjpkZWZpbmVPd25Qcm9wZXJ0eShvYmplY3QsIGV4
ZWMsIGlkZW50LCBkZXNjcmlwdG9yLCBzaG91bGRUaHJvdyk7Cit9CisKK3ZvaWQgT3V0T2ZCYW5k
QXJndW1lbnRzOjptYXRlcmlhbGl6ZVNwZWNpYWxzKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBS
RUxFQVNFX0FTU0VSVCghc3BlY2lhbHNNYXRlcmlhbGl6ZWQoKSk7CisgICAgVk0mIHZtID0gZXhl
Yy0+dm0oKTsKKyAgICAKKyAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBqc0Nh
c3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4obV9jYWxsZWUtPmV4ZWN1dGFibGUoKSk7CisgICAgYm9v
bCBpc1N0cmljdE1vZGUgPSBleGVjdXRhYmxlLT5pc1N0cmljdE1vZGUoKTsKKyAgICAKKyAgICBp
ZiAoaXNTdHJpY3RNb2RlKSB7CisgICAgICAgIHB1dERpcmVjdEFjY2Vzc29yKGV4ZWMsIHZtLnBy
b3BlcnR5TmFtZXMtPmNhbGxlZSwgZ2xvYmFsT2JqZWN0KCktPnRocm93VHlwZUVycm9yR2V0dGVy
U2V0dGVyKHZtKSwgRG9udERlbGV0ZSB8IERvbnRFbnVtIHwgQWNjZXNzb3IpOworICAgICAgICBw
dXREaXJlY3RBY2Nlc3NvcihleGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT5jYWxsZWUsIGdsb2JhbE9i
amVjdCgpLT50aHJvd1R5cGVFcnJvckdldHRlclNldHRlcih2bSksIERvbnREZWxldGUgfCBEb250
RW51bSB8IEFjY2Vzc29yKTsKKyAgICB9IGVsc2UKKyAgICAgICAgcHV0RGlyZWN0KHZtLCB2bS5w
cm9wZXJ0eU5hbWVzLT5jYWxsZWUsIEpTVmFsdWUobV9jYWxsZWUuZ2V0KCkpKTsKKyAgICAKKyAg
ICBtX2NhbGxlZS5jbGVhcigpOworfQorCit2b2lkIE91dE9mQmFuZEFyZ3VtZW50czo6bWF0ZXJp
YWxpemVTcGVjaWFsc0lmTmVjZXNzYXJ5KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBpZiAoIXNw
ZWNpYWxzTWF0ZXJpYWxpemVkKCkpCisgICAgICAgIG1hdGVyaWFsaXplU3BlY2lhbHMoZXhlYyk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9PdXRPZkJhbmRBcmd1bWVudHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9PdXRPZkJhbmRBcmd1bWVudHMuaAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL091dE9mQmFuZEFyZ3VtZW50cy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBPdXRPZkJhbmRBcmd1bWVudHNfaAorI2RlZmluZSBPdXRP
ZkJhbmRBcmd1bWVudHNfaAorCisjaW5jbHVkZSAiQXJndW1lbnRzTW9kZS5oIgorI2luY2x1ZGUg
IkpTT2JqZWN0LmgiCisKK25hbWVzcGFjZSBKU0MgeworCisvLyBUaGlzIGlzIGFuIEFyZ3VtZW50
cy1jbGFzcyBvYmplY3QgdGhhdCB3ZSBjcmVhdGUgd2hlbiB5b3UgZG8gZnVuY3Rpb24uYXJndW1l
bnRzLCBvciB5b3Ugc2F5CisvLyAiYXJndW1lbnRzIiBpbnNpZGUgYSBmdW5jdGlvbiBpbiBzdHJp
Y3QgbW9kZS4gSXQgYmVoYXZlcyBhbG1wc3QgZW50aXJlbHkgbGlrZSBhbiBvcmRpbmFyeQorLy8g
SmF2YVNjcmlwdCBvYmplY3QuIEFsbCBvZiB0aGUgYXJndW1lbnRzIHZhbHVlcyBhcmUgc2ltcGx5
IGNvcGllZCBmcm9tIHRoZSBzdGFjayAocG9zc2libHkgdmlhCisvLyBzb21lIHNvcGhpc3RpY2F0
ZWQgVmFsdWVSZWNvdmVyeSdzIGlmIGFuIG9wdGltaXppbmcgY29tcGlsZXIgaXMgaW4gcGxheSkg
YW5kIHRoZSBhcHByb3ByaWF0ZQorLy8gcHJvcGVydGllcyBvZiB0aGUgb2JqZWN0IGFyZSBwb3B1
bGF0ZWQuIFRoZSBvbmx5IHJlYXNvbiB3aHkgd2UgbmVlZCBhIHNwZWNpYWwgY2xhc3MgaXMgdG8g
bWFrZQorLy8gdGhlIG9iamVjdCBjbGFpbSB0byBiZSAiQXJndW1lbnRzIiBmcm9tIGEgdG9TdHJp
bmcgc3RhbmRwb2ludCwgYW5kIHRvIGF2b2lkIG1hdGVyaWFsaXppbmcgdGhlCisvLyBjYWxsZXIv
Y2FsbGVlIHByb3BlcnRpZXMgdW5sZXNzIHNvbWVvbmUgYXNrcyBmb3IgdGhlbS4KK2NsYXNzIE91
dE9mQmFuZEFyZ3VtZW50cyA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKK3B1YmxpYzoKKyAg
ICB0eXBlZGVmIEpTTm9uRmluYWxPYmplY3QgQmFzZTsKKyAgICAKK3ByaXZhdGU6CisgICAgT3V0
T2ZCYW5kQXJndW1lbnRzKFZNJiwgU3RydWN0dXJlKik7CisKK3B1YmxpYzoKKyAgICBzdGF0aWMg
T3V0T2ZCYW5kQXJndW1lbnRzKiBjcmVhdGVFbXB0eShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNG
dW5jdGlvbiogY2FsbGVlKTsKKyAgICBzdGF0aWMgT3V0T2ZCYW5kQXJndW1lbnRzKiBjcmVhdGVF
bXB0eShFeGVjU3RhdGUqLCBKU0Z1bmN0aW9uKiBjYWxsZWUpOworICAgIHN0YXRpYyBPdXRPZkJh
bmRBcmd1bWVudHMqIGNyZWF0ZVdpdGhJbmxpbmVGcmFtZShFeGVjU3RhdGUqIG15RnJhbWUsIEV4
ZWNTdGF0ZSogdGFyZ2V0RnJhbWUsIElubGluZUNhbGxGcmFtZSosIEFyZ3VtZW50c01vZGUpOwor
ICAgIHN0YXRpYyBPdXRPZkJhbmRBcmd1bWVudHMqIGNyZWF0ZVdpdGhNYWNoaW5lRnJhbWUoRXhl
Y1N0YXRlKiBteUZyYW1lLCBFeGVjU3RhdGUqIHRhcmdldEZyYW1lLCBBcmd1bWVudHNNb2RlKTsK
KyAgICAKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2Jh
bE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlKTsKKworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25l
ZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRl
c0dldFByb3BlcnR5TmFtZXMgfCBKU09iamVjdDo6U3RydWN0dXJlRmxhZ3M7CisKKyAgICBERUNM
QVJFX0lORk87CisKK3ByaXZhdGU6CisgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90
KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKKyAg
ICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwg
UHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOworICAgIHN0YXRpYyB2b2lkIHB1
dChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5
U2xvdCYpOworICAgIHN0YXRpYyB2b2lkIGRlbGV0ZVByb3BlcnR5KEpTQ2VsbCosIEV4ZWNTdGF0
ZSosIFByb3BlcnR5TmFtZSk7CisgICAgc3RhdGljIHZvaWQgZGVmaW5lT3duUHJvcGVydHkoSlNP
YmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5RGVzY3JpcHRv
ciYsIGJvb2wgc2hvdWxkVGhyb3cpOworICAgIAorICAgIGJvb2wgc3BlY2lhbHNNYXRlcmlhbGl6
ZWQoKSBjb25zdCB7IHJldHVybiAhbV9jYWxsZWU7IH0KKyAgICB2b2lkIG1hdGVyaWFsaXplU3Bl
Y2lhbHMoRXhlY1N0YXRlKik7CisgICAgdm9pZCBtYXRlcmlhbGl6ZVNwZWNpYWxzSWZOZWNlc3Nh
cnkoRXhlY1N0YXRlKik7CisgICAgCisgICAgV3JpdGVCYXJyaWVyPEpTRnVuY3Rpb24qPiBtX2Nh
bGxlZTsgLy8gU2V0IHRvIG51bGxwdHIgd2hlbiB3ZSBtYXRlcmlhbGl6ZSBhbGwgb2Ygb3VyIHNw
ZWNpYWwgcHJvcGVydGllcy4KK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8g
T3V0T2ZCYW5kQXJndW1lbnRzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU2NvcGVPZmZzZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1Njb3BlT2Zmc2V0LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1Njb3BlT2Zmc2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQy
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTY29wZU9mZnNldC5oIgorCituYW1lc3BhY2UgSlND
IHsKKwordm9pZCBTY29wZU9mZnNldDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorewor
ICAgIGlmICghKnRoaXMpIHsKKyAgICAgICAgb3V0LnByaW50KCJzY29wZUludmFsaWQiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBvdXQucHJpbnQoInNjb3BlIiwgb2Zmc2V0
KCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU2NvcGVPZmZzZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TY29wZU9mZnNldC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVPZmZzZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgU2NvcGVPZmZzZXRfaAorI2RlZmluZSBTY29wZU9mZnNldF9oCisKKyNpbmNsdWRlICJH
ZW5lcmljT2Zmc2V0LmgiCisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFj
ZSBKU0MgeworCisvLyBUaGlzIGlzIGFuIG9mZnNldCBpbnRvIGEgc2NvcGUgb2Ygc29tZSBraW5k
LiBJdCBjb3VsZCBiZSBhbiBhY3RpdmF0aW9uIHNjb3BlIG9yIGl0IGNvdWxkIGJlIGEKKy8vIGds
b2JhbCBvYmplY3QuCitjbGFzcyBTY29wZU9mZnNldCA6IHB1YmxpYyBHZW5lcmljT2Zmc2V0PFNj
b3BlT2Zmc2V0PiB7CitwdWJsaWM6CisgICAgU2NvcGVPZmZzZXQoKSB7IH0KKyAgICAKKyAgICBl
eHBsaWNpdCBTY29wZU9mZnNldCh1bnNpZ25lZCBvZmZzZXQpCisgICAgICAgIDogR2VuZXJpY09m
ZnNldChvZmZzZXQpCisgICAgeworICAgIH0KKyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJl
YW0mKSBjb25zdDsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gU2NvcGVP
ZmZzZXRfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1
bWVudHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Nj
b3BlZEFyZ3VtZW50cy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TY29wZWRBcmd1bWVudHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTM3
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTY29wZWRBcmd1bWVudHMuaCIKKworI2luY2x1ZGUg
IkdlbmVyaWNBcmd1bWVudHNJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNBcmd1bWVudHNJdGVyYXRv
ci5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK1NUQVRJ
Q19BU1NFUlRfSVNfVFJJVklBTExZX0RFU1RSVUNUSUJMRShTY29wZWRBcmd1bWVudHMpOworCitj
b25zdCBDbGFzc0luZm8gU2NvcGVkQXJndW1lbnRzOjpzX2luZm8gPSB7ICJBcmd1bWVudHMiLCAm
QmFzZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKFNjb3BlZEFyZ3VtZW50cykgfTsK
KworU2NvcGVkQXJndW1lbnRzOjpTY29wZWRBcmd1bWVudHMoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgdW5zaWduZWQgdG90YWxMZW5ndGgpCisgICAgOiBHZW5lcmljQXJndW1lbnRzKHZt
LCBzdHJ1Y3R1cmUpCisgICAgLCBtX292ZXJyb2RlVGhpbmdzKGZhbHNlKQorICAgICwgbV90b3Rh
bExlbmd0aChsZW5ndGgpCit7Cit9CisKK3ZvaWQgU2NvcGVkQXJndW1lbnRzOjpmaW5pc2hDcmVh
dGlvbihWTSYgdm0sIEpTRnVuY3Rpb24qIGNhbGxlZSwgU2NvcGVkQXJndW1lbnRzVGFibGUqIHRh
YmxlLCBKU0xleGljYWxFbnZpcm9ubWVudCogc2NvcGUpCit7CisgICAgQmFzZTo6ZmluaXNoQ3Jl
YXRpb24odm0pOworICAgIG1fY2FsbGVlLnNldCh2bSwgdGhpcywgY2FsbGVlKTsKKyAgICBtX3Rh
YmxlLnNldCh2bSwgdGhpcywgdGFibGUpOworICAgIG1fc2NvcGUuc2V0KHZtLCB0aGlzLCBzY29w
ZSk7Cit9CisKK1Njb3BlZEFyZ3VtZW50cyogU2NvcGVkQXJndW1lbnRzOjpjcmVhdGVVbmluaXRp
YWxpemVkKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRnVuY3Rpb24qIGNhbGxlZSwg
U2NvcGVkQXJndW1lbnRzVGFibGUqIHRhYmxlLCBKU0xleGljYWxFbnZpcm9ubWVudCogc2NvcGUs
IHVuc2lnbmVkIHRvdGFsTGVuZ3RoKQoreworICAgIEFTU0VSVCh0b3RhbExlbmd0aCA+PSB0YWJs
ZS0+bGVuZ3RoKCkpOworICAgIFNjb3BlZEFyZ3VtZW50cyogcmVzdWx0ID0gbmV3ICgKKyAgICAg
ICAgTm90TnVsbCwKKyAgICAgICAgYWxsb2NhdGVDZWxsPFNjb3BlZEFyZ3VtZW50cz4odm0uaGVh
cCwgYWxsb2NhdGlvblNpemUodG90YWxMZW5ndGggLSB0YWJsZS0+bGVuZ3RoKCkpKSkKKyAgICAg
ICAgKHZtLCBzdHJ1Y3R1cmUsIHRvdGFsTGVuZ3RoKTsKKyAgICByZXN1bHQtPmZpbmlzaENyZWF0
aW9uKHZtLCBjYWxsZWUsIHRhYmxlLCBzY29wZSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwor
U2NvcGVkQXJndW1lbnRzKiBTY29wZWRBcmd1bWVudHM6OmNyZWF0ZShWTSYgdm0sIFN0cnVjdHVy
ZSogc3RydWN0dXJlLCBKU0Z1bmN0aW9uKiBjYWxsZWUsIFNjb3BlZEFyZ3VtZW50c1RhYmxlKiB0
YWJsZSwgSlNMZXhpY2FsRW52aXJvbm1lbnQqIHNjb3BlLCB1bnNpZ25lZCB0b3RhbExlbmd0aCkK
K3sKKyAgICBTY29wZWRBcmd1bWVudHMqIHJlc3VsdCA9CisgICAgICAgIGNyZWF0ZVVuaW5pdGlh
bGl6ZWQodm0sIHN0cnVjdHVyZSwgY2FsbGVlLCB0YWJsZSwgc2NvcGUsIHRvdGFsTGVuZ3RoKTsK
KyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSB0b3RhbExlbmd0aCAtIHRhYmxlLT5sZW5ndGgo
KTsgaS0tOykKKyAgICAgICAgcmVzdWx0LT5vdmVyZmxvd1N0b3JhZ2UoKVtpXS5jbGVhcigpOwor
ICAgIAorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1Njb3BlZEFyZ3VtZW50cyogU2NvcGVkQXJn
dW1lbnRzOjpjcmVhdGVCeUNvcHlpbmcoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgRXhl
Y1N0YXRlKiBleGVjLCBTY29wZWRBcmd1bWVudHNUYWJsZSogdGFibGUsIEpTTGV4aWNhbEVudmly
b25tZW50KiBzY29wZSkKK3sKKyAgICB1bnNpZ25lZCBuYW1lZExlbmd0aCA9IHRhYmxlLT5sZW5n
dGgoKTsKKyAgICB1bnNpZ25lZCB0b3RhbExlbmd0aCA9IGV4ZWMtPmFyZ3VtZW50Q291bnQoKTsK
KyAgICAKKyAgICBTY29wZWRBcmd1bWVudHMqIHJlc3VsdCA9CisgICAgICAgIGNyZWF0ZVVuaW5p
dGlhbGl6ZWQodm0sIHN0cnVjdHVyZSwgY2FsbGVlLCB0YWJsZSwgc2NvcGUsIHRvdGFsTGVuZ3Ro
KTsKKyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSB0b3RhbExlbmd0aCAtIG5hbWVkTGVuZ3Ro
OyBpLS07KQorICAgICAgICByZXN1bHQtPm92ZXJmbG93U3RvcmFnZSgpW2ldLnNldCh2bSwgcmVz
dWx0LCBleGVjLT51bmNoZWNrZWRBcmd1bWVudHMoaSArIG5hbWVkTGVuZ3RoKSk7CisgICAgCisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBTY29wZWRBcmd1bWVudHM6OnZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBTY29wZWRBcmd1
bWVudHMqIHRoaXNPYmplY3QgPSBzdGF0aWNfY2FzdDxTY29wZWRBcmd1bWVudHMqPihjZWxsKTsK
KyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CisgICAg
QmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKKworICAgIHZpc2l0b3Iu
YXBwZW5kKCZ0aGlzT2JqZWN0LT5tX2NhbGxlZSk7CisgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNP
YmplY3QtPm1fdGFibGUpOworICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX3Njb3Bl
KTsKKyAgICAKKyAgICB2aXNpdG9yLmFwcGVuZFZhbHVlcygKKyAgICAgICAgdGhpc09iamVjdC0+
b3ZlcmZsb3dTdG9yYWdlKCksIHRoaXNPYmplY3QtPm1fdG90YWxMZW5ndGggLSB0aGlzT2JqZWN0
LT5tX3RhYmxlLT5sZW5ndGgoKSk7Cit9CisKK1N0cnVjdHVyZSogU2NvcGVkQXJndW1lbnRzOjpj
cmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1Zh
bHVlIHByb3RvdHlwZSkKK3sKKyAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2Jh
bE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhTY29wZWRBcmd1bWVudHNUeXBlLCBTdHJ1Y3R1
cmVGbGFncyksIGluZm8oKSk7Cit9CisKK3ZvaWQgU2NvcGVkQXJndW1lbnRzOjpzbG93RG93bkFu
ZFdhc3RlTWVtb3J5KFZNJiB2bSkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVCghbV9vdmVycm9kZVRo
aW5ncyk7CisgICAgCisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgs
IGpzTnVtYmVyKG1fdGFibGUtPmxlbmd0aCgpKSwgRG9udEVudW0pOworICAgIHB1dERpcmVjdCh2
bSwgdm0ucHJvcGVydHlOYW1lcy0+Y2FsbGVlLCBtX2NhbGxlZS5nZXQoKSwgRG9udEVudW0pOwor
ICAgIAorICAgIG1fb3ZlcnJvZGVUaGluZ3MgPSB0cnVlOworfQorCit2b2lkIFNjb3BlZEFyZ3Vt
ZW50czo6c2xvd0Rvd25BbmRXYXN0ZU1lbW9yeUlmTmVjZXNzYXJ5KFZNJiB2bSkKK3sKKyAgICBp
ZiAoIW1fb3ZlcnJvZGVUaGluZ3MpCisgICAgICAgIHNsb3dEb3duQW5kV2FzdGVNZW1vcnkodm0p
OworfQorCit2b2lkIFNjb3BlZEFyZ3VtZW50czo6b3ZlcnJpZGVBcmd1bWVudChWTSYgdm0sIHVp
bnQzMl90IGkpCit7CisgICAgdW5zaWduZWQgbmFtZWRMZW5ndGggPSBtX3RhYmxlLT5sZW5ndGgo
KTsKKyAgICBpZiAoaSA8IG5hbWVkTGVuZ3RoKQorICAgICAgICBtX3RhYmxlLnNldCh2bSwgdGhp
cywgbV90YWJsZS0+c2V0KHZtLCBpLCBTY29wZU9mZnNldCgpKSk7CisgICAgZWxzZSB7CisgICAg
ICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGkgPCBtX3RvdGFsTGVuZ3RoKTsK
KyAgICAgICAgb3ZlcmZsb3dTdG9yYWdlKClbaSAtIG5hbWVkTGVuZ3RoXS5jbGVhcigpOworICAg
IH0KK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50cy5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwxNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2lmbmRlZiBTY29wZWRBcmd1bWVudHNfaAorI2RlZmluZSBTY29wZWRBcmd1bWVu
dHNfaAorCisjaW5jbHVkZSAiR2VuZXJpY0FyZ3VtZW50cy5oIgorCituYW1lc3BhY2UgSlNDIHsK
KworLy8gVGhpcyBpcyBhbiBBcmd1bWVudHMtY2xhc3Mgb2JqZWN0IHRoYXQgd2UgY3JlYXRlIHdo
ZW4geW91IHNheSAiYXJndW1lbnRzIiBpbnNpZGUgYSBmdW5jdGlvbiwKKy8vIGFuZCBvbmUgb3Ig
bW9yZSBvZiB0aGUgYXJndW1lbnRzIG1heSBiZSBjYXB0dXJlZCBpbiB0aGUgZnVuY3Rpb24ncyBh
Y3RpdmF0aW9uLiBUaGUgZnVuY3Rpb24KKy8vIHdpbGwgY29weSBpdHMgZm9ybWFsbHkgZGVjbGFy
ZWQgYXJndW1lbnRzIGludG8gdGhlIGFjdGl2YXRpb24gYW5kIHRoZW4gY3JlYXRlIHRoaXMgb2Jq
ZWN0LiBUaGlzCisvLyBvYmplY3Qgd2lsbCBzdG9yZSB0aGUgb3ZlcmZsb3cgYXJndW1lbnRzLCBp
ZiB0aGVyZSBhcmUgYW55LiBUaGlzIG9iamVjdCB3aWxsIHVzZSB0aGUgc3ltYm9sCisvLyB0YWJs
ZSdzIFNjb3BlZEFyZ3VtZW50c1RhYmxlIGFuZCB0aGUgYWN0aXZhdGlvbiwgb3IgaXRzIG92ZXJm
bG93IHN0b3JhZ2UsIHRvIGhhbmRsZSBhbGwgaW5kZXhlZAorLy8gbG9va3Vwcy4KK2NsYXNzIFNj
b3BlZEFyZ3VtZW50cyA6IHB1YmxpYyBHZW5lcmljQXJndW1lbnRzPFNjb3BlZEFyZ3VtZW50cz4g
eworcHJpdmF0ZToKKyAgICBTY29wZWRBcmd1bWVudHMoVk0mLCBTdHJ1Y3R1cmUqLCB1bnNpZ25l
ZCB0b3RhbExlbmd0aCk7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIEpTRnVuY3Rpb24q
IGNhbGxlZSwgU2NvcGVkQXJndW1lbnRzVGFibGUqLCBKU0xleGljYWxFbnZpcm9ubWVudCopOwor
CitwdWJsaWM6CisgICAgLy8gQ3JlYXRlcyBhbiBhcmd1bWVudHMgb2JqZWN0IGJ1dCBsZWF2ZXMg
aXQgdW5pbml0aWFsaXplZC4gVGhpcyBpcyBkYW5nZXJvdXMgaWYgd2UgR0MgcmlnaHQKKyAgICAv
LyBhZnRlciBhbGxvY2F0aW9uLgorICAgIHN0YXRpYyBTY29wZWRBcmd1bWVudHMqIGNyZWF0ZVVu
aW5pdGlhbGl6ZWQoVk0mLCBTdHJ1Y3R1cmUqLCBKU0Z1bmN0aW9uKiBjYWxsZWUsIFNjb3BlZEFy
Z3VtZW50c1RhYmxlKiwgSlNMZXhpY2FsRW52aXJvbm1lbnQqLCB1bnNpZ25lZCB0b3RhbExlbmd0
aCk7CisgICAgCisgICAgLy8gQ3JlYXRlcyBhbiBhcmd1bWVudHMgb2JqZWN0IGFuZCBpbml0aWFs
aXplcyBldmVyeXRoaW5nIHRvIHRoZSBlbXB0eSB2YWx1ZS4gVXNlIHRoaXMgaWYgeW91CisgICAg
Ly8gY2Fubm90IGd1YXJhbnRlZSB0aGF0IHlvdSdsbCBpbW1lZGlhdGVseSBpbml0aWFsaXplIGFs
bCBvZiB0aGUgZWxlbWVudHMuCisgICAgc3RhdGljIFNjb3BlZEFyZ3VtZW50cyogY3JlYXRlKFZN
JiwgU3RydWN0dXJlKiwgSlNGdW5jdGlvbiogY2FsbGVlLCBTY29wZWRBcmd1bWVudHNUYWJsZSos
IEpTTGV4aWNhbEVudmlyb25tZW50KiwgdW5zaWduZWQgdG90YWxMZW5ndGgpOworICAgIAorICAg
IC8vIENyZWF0ZXMgYW4gYXJndW1lbnRzIG9iamVjdCBieSBjb3B5aW5nIHRoZSBhcmd1bW5ldHMg
ZnJvbSB0aGUgc3RhY2suCisgICAgc3RhdGljIFNjb3BlZEFyZ3VtZW50cyogY3JlYXRlQnlDb3B5
aW5nKFZNJiwgU3RydWN0dXJlKiwgRXhlY1N0YXRlKiwgU2NvcGVkQXJndW1lbnRzVGFibGUqLCBK
U0xleGljYWxFbnZpcm9ubWVudCopOworICAgIAorICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICAKKyAgICB1aW50MzJfdCBpbnRlcm5hbExl
bmd0aCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV90b3RhbExlbmd0aDsKKyAgICB9
CisgICAgCisgICAgdWludDMyX3QgbGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKKyAgICB7
CisgICAgICAgIGlmIChVTkxJS0VMWShtX292ZXJyb2RlVGhpbmdzKSkKKyAgICAgICAgICAgIHJl
dHVybiBnZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCkudG9VSW50MzIoZXhl
Yyk7CisgICAgICAgIHJldHVybiBpbnRlcm5hbExlbmd0aCgpOworICAgIH0KKyAgICAKKyAgICBi
b29sIGNhbkFjY2Vzc0luZGV4UXVpY2tseSh1aW50MzJfdCBpKSBjb25zdAorICAgIHsKKyAgICAg
ICAgdW5zaWduZWQgbmFtZWRMZW5ndGggPSBtX3RhYmxlLT5sZW5ndGgoKTsKKyAgICAgICAgaWYg
KGkgPCBuYW1lZExlbmd0aCkKKyAgICAgICAgICAgIHJldHVybiAhIW1fdGFibGUtPmdldChpKTsK
KyAgICAgICAgaWYgKGkgPCBtX3RvdGFsTGVuZ3RoKQorICAgICAgICAgICAgcmV0dXJuICEhb3Zl
cmZsb3dTdG9yYWdlKClbaSAtIG5hbWVkTGVuZ3RoXS5nZXQoKTsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKyAgICAKKyAgICBKU1ZhbHVlIGdldEluZGV4UXVpY2tseSh1aW50MzJfdCBp
KSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04o
Y2FuQWNjZXNzSW5kZXhRdWlja2x5KGkpKTsKKyAgICAgICAgdW5zaWduZWQgbmFtZWRMZW5ndGgg
PSBtX3RhYmxlLT5sZW5ndGgoKTsKKyAgICAgICAgaWYgKGkgPCBuYW1lZExlbmd0aCkKKyAgICAg
ICAgICAgIHJldHVybiBtX3Njb3BlLT52YXJpYWJsZUF0KG1fdGFibGUtPmdldChpKSkuZ2V0KCk7
CisgICAgICAgIHJldHVybiBvdmVyZmxvd1N0b3JhZ2UoKVtpIC0gbmFtZWRMZW5ndGhdLmdldCgp
OworICAgIH0KKworICAgIHZvaWQgc2V0SW5kZXhRdWlja2x5KFZNJiB2bSwgdWludDMyX3QgaSwg
SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJ
Q0FUSU9OKGNhbkFjY2Vzc0luZGV4UXVpY2tseShpKSk7CisgICAgICAgIHVuc2lnbmVkIG5hbWVk
TGVuZ3RoID0gbV90YWJsZS0+bGVuZ3RoKCk7CisgICAgICAgIGlmIChpIDwgbmFtZWRMZW5ndGgp
CisgICAgICAgICAgICBtX3Njb3BlLT52YXJpYWJsZWF0KG1fdGFibGUtPmdldChpKSkuc2V0KHZt
LCB0aGlzLCB2YWx1ZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG92ZXJmbG93U3RvcmFn
ZSgpW2kgLSBuYW1lZExlbmd0aF0uc2V0KHZtLCB0aGlzLCB2YWx1ZSk7CisgICAgfQorCisgICAg
V3JpdGVCYXJyaWVyPEpTRnVuY3Rpb24+JiBjYWxsZWUoKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IG1fY2FsbGVlOworICAgIH0KKyAgICAKKyAgICBib29sIG92ZXJyb2RlVGhpbmdzKCkgY29uc3Qg
eyByZXR1cm4gbV9vdmVycm9kZVRoaW5nczsgfQorICAgIHZvaWQgc2xvd0Rvd25BbmRXYXN0ZU1l
bW9yeShWTSYpOworICAgIHZvaWQgc2xvd0Rvd25BbmRXYXN0ZU1lbW9yeUlmTmVjZXNzYXJ5KFZN
Jik7CisgICAgdm9pZCBvdmVycmlkZUFyZ3VtZW50KFZNJiB2bSwgdWludDMyX3QgaSk7CisgICAg
CisgICAgREVDTEFSRV9JTkZPOworICAgIAorICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0
cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUpOworICAgIAor
ICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZPdmVycm9kZVRoaW5ncygpIHsgcmV0dXJuIE9C
SkVDVF9PRkZTRVRPRihTY29wZWRBcmd1bWVudHMsIG1fb3ZlcnJvZGVUaGluZ3MpOyB9CisgICAg
c3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlRvdGFsTGVuZ3RoKCkgeyByZXR1cm4gT0JKRUNUX09G
RlNFVE9GKFNjb3BlZEFyZ3VtZW50cywgbV90b3RhbExlbmd0aCk7IH0KKyAgICBzdGF0aWMgcHRy
ZGlmZl90IG9mZnNldE9mVGFibGUoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoU2NvcGVkQXJn
dW1lbnRzLCBtX3RhYmxlKTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZTY29wZSgp
IHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihTY29wZWRBcmd1bWVudHMsIG1fc2NvcGUpOyB9Cisg
ICAgCisgICAgc3RhdGljIHNpemVfdCBvdmVyZmxvd1N0b3JhZ2VPZmZzZXQoKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZjxzaXplb2YoV3JpdGVCYXJyaWVy
PFVua25vd24+KT4oc2l6ZW9mKFNjb3BlZEFyZ3VtZW50cykpOworICAgIH0KKyAgICAKKyAgICBz
dGF0aWMgc2l6ZV90IGFsbG9jYXRpb25TaXplKHVuc2lnbmVkIG92ZXJmbG93QXJndW1lbnRzTGVu
Z3RoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0b3JhZ2VPZmZzZXQoKSArIHNpemVvZihXcml0
ZUJhcnJpZXI8VW5rbm93bj4pICogb3ZlcmZsb3dBcmd1bWVudHNMZW5ndGg7CisgICAgfQorCitw
cml2YXRlOgorICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogb3ZlcmZsb3dTdG9yYWdlKCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8V3JpdGVCYXJyaWVyPFVua25vd24+Kj4o
CisgICAgICAgICAgICBiaXR3aXNlX2Nhc3Q8Y2hhcio+KHRoaXMpICsgb3ZlcmZsb3dTdG9yYWdl
T2Zmc2V0KCkpOworICAgIH0KKyAgICAKKyAgICBib29sIG1fb3ZlcnJvZGVUaGluZ3M7IC8vIFRy
dWUgaWYgbGVuZ3RoLCBjYWxsZWUsIGFuZCBjYWxsZXIgYXJlIGZ1bGx5IG1hdGVyaWFsaXplZCBp
biB0aGUgb2JqZWN0LgorICAgIHVuc2lnbmVkIG1fdG90YWxMZW5ndGg7IC8vIFRoZSBsZW5ndGgg
b2YgZGVjbGFyZWQgcGx1cyBvdmVyZmxvdyBhcmd1bWVudHMuCisgICAgV3JpdGVCYXJyaWVyPEpT
RnVuY3Rpb24qPiBtX2NhbGxlZTsKKyAgICBXcml0ZUJhcnJpZXI8U2NvcGVkQXJndW1lbnRzVGFi
bGU+IG1fdGFibGU7CisgICAgV3JpdGVCYXJyaWVyPEpTTGV4aWNhbEVudmlyb25tZW50PiBtX3Nj
b3BlOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBTY29wZWRBcmd1bWVu
dHNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVu
dHNUYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Nj
b3BlZEFyZ3VtZW50c1RhYmxlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TY29wZWRBcmd1bWVudHNUYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsOTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBTY29wZWRBcmd1bWVudHNUYWJsZV9oCisjZGVmaW5lIFNjb3BlZEFyZ3VtZW50c1Rh
YmxlX2gKKworI2luY2x1ZGUgIkpTQ2VsbC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworLy8gVGhp
cyBjbGFzcydzIG9ubHkgam9iIGlzIHRvIGhvbGQgb250byB0aGUgbGlzdCBvZiBTY29wZU9mZnNl
dHMgZm9yIGVhY2ggYXJndW1lbnQgdGhhdCBhCisvLyBmdW5jdGlvbiBoYXMuIE1vc3Qgb2YgdGhl
IHRpbWUsIHRoZSBCeXRlY29kZUdlbmVyYXRvciB3aWxsIGNyZWF0ZSBvbmUgb2YgdGhlc2UgYW5k
IGl0IHdpbGwKKy8vIG5ldmVyIGJlIG1vZGlmaWVkIHN1YnNlcXVlbnRseS4gVGhlcmUgaXMgYSBy
YXJlIGNhc2Ugd2hlcmUgYSBTY29wZWRBcmd1bWVudHMgb2JqZWN0IGlzIGNyZWF0ZWQKKy8vIGFu
ZCBhbGlhc2VzIG9uZSBvZiB0aGVzZSBhbmQgdGhlbiBkZWNpZGVzIHRvIG1vZGlmeSBpdDsgaW4g
dGhhdCBjYXNlIHdlIGRvIGNvcHktb24td3JpdGUuIFRoaXMKKy8vIG1ha2VzIHNlbnNlIGJlY2F1
c2Ugc3VjaCBtb2RpZmljYXRpb25zIGFyZSBzbyB1bmNvbW1vbi4gWW91J2QgaGF2ZSB0byBkbyBz
b21ldGhpbmcgY3JhenkgbGlrZQorLy8gImRlbGV0ZSBhcmd1bWVudHNbaV0iIG9yIHNvbWUgdmFy
aWFudCBvZiBkZWZpbmVPd25Qcm9wZXJ0eS4KK2NsYXNzIFNjb3BlZEFyZ3VtZW50cyA6IHB1Ymxp
YyBKU0NlbGwgeworcHVibGljOgorICAgIHR5cGVkZWYgSlNDZWxsIEJhc2U7CisgICAgCisgICAg
c3RhdGljIGNvbnN0IGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7CisgICAgc3RhdGljIGNv
bnN0IGJvb2wgaGFzSW1tb3J0YWxTdHJ1Y3R1cmUgPSB0cnVlOworCitwcml2YXRlOgorICAgIFNj
b3BlZEFyZ3VtZW50c1RhYmxlKFZNJik7CisgICAgflNjb3BlZEFyZ3VtZW50c1RhYmxlKCk7CisK
K3B1YmxpYzoKKyAgICBzdGF0aWMgU2NvcGVkQXJndW1lbnRzVGFibGUqIGNyZWF0ZShWTSYpOwor
ICAgIAorICAgIFNjb3BlZEFyZ3VtZW50cyogY2xvbmUoVk0mKTsKKyAgICAKKyAgICB1aW50MzJf
dCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2xlbmd0aDsgfQorICAgIFNjb3BlZEFyZ3VtZW50
c1RhYmxlKiBzZXRMZW5ndGgoVk0mLCB1aW50MzJfdCBuZXdMZW5ndGgpOworICAgIAorICAgIFNj
b3BlT2Zmc2V0IGdldCh1aW50MzJfdCBpKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUX1dJ
VEhfU0VDVVJJVFlfSU1QTElDQVRJT04oaSA8IG1fbGVuZ3RoKTsKKyAgICAgICAgcmV0dXJuIG1f
YXJndW1lbnRzW2ldOworICAgIH0KKyAgICAKKyAgICB2b2lkIGxvY2soKQorICAgIHsKKyAgICAg
ICAgbV9sb2NrZWQgPSB0cnVlOworICAgIH0KKyAgICAKKyAgICBTY29wZWRBcmd1bWVudHMqIHNl
dChWTSYgdm0sIHVpbnQzMl90IGksIFNjb3BlT2Zmc2V0IHZhbHVlKQorICAgIHsKKyAgICAgICAg
U2NvcGVkQXJndW1lbnRzKiByZXN1bHQ7CisgICAgICAgIGlmIChVTkxJS0VMWShtX2xvY2tlZCkp
CisgICAgICAgICAgICByZXN1bHQgPSBjbG9uZSh2bSk7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIHJlc3VsdCA9IHRoaXM7CisgICAgICAgIHJlc3VsdC0+c2V0RGlyZWN0KGksIHZhbHVlKTsK
KyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgREVDTEFSRV9JTkZPOwor
ICAgIAorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZMZW5ndGgoKSB7IHJldHVybiBPQkpF
Q1RfT0ZGU0VUT0YoU2NvcGVkQXJndW1lbnRzLCBtX2xlbmd0aCk7IH0KKyAgICBzdGF0aWMgcHRy
ZGlmZl90IG9mZnNldE9mQXJndW1lbnRzKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFNjb3Bl
ZEFyZ3VtZW50cywgbV9hcmd1bWVudHMpOyB9CisKK3ByaXZhdGU6CisgICAgdWludDMyX3QgbV9s
ZW5ndGg7CisgICAgYm9vbCBtX2xvY2tlZDsgLy8gQmVpbmcgbG9ja2VkIG1lYW5zIHRoYXQgdGhl
cmUgYXJlIG11bHRpcGxlIHJlZmVyZW5jZXMgdG8gdGhpcyBvYmplY3QgYW5kIG5vbmUgb2YgdGhl
bSBleHBlY3QgdG8gc2VlIHRoZSBvdGhlcnMnIG1vZGlmaWNhdGlvbnMuIFRoaXMgbWVhbnMgdGhh
dCBtb2RpZmljYXRpb25zIG5lZWQgdG8gbWFrZSBhIGNvcHkgZmlyc3QuCisgICAgc3RkOjp1bmlx
dWVfcHRyPFNjb3BlT2Zmc2V0W10+IG1fYXJndW1lbnRzOworfTsKKworfSAvLyBuYW1lc3BhY2Ug
SlNDCisKKyNlbmRpZiAvLyBTY29wZWRBcmd1bWVudHNUYWJsZV9oCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5jcHAJKHJldmlzaW9uIDE4MDcy
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIw
MTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEy
LCAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjksNiArNjksOCBAQCBKU1ZhbHVlIFN5bWJvbFRhYmxl
RW50cnk6OmluZmVycmVkVmFsdWUoCiAKIHZvaWQgU3ltYm9sVGFibGVFbnRyeTo6cHJlcGFyZVRv
V2F0Y2goU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlKQogeworICAgIGlmICghaXNXYXRjaGFibGUo
KSkKKyAgICAgICAgcmV0dXJuOwogICAgIEZhdEVudHJ5KiBlbnRyeSA9IGluZmxhdGUoKTsKICAg
ICBpZiAoZW50cnktPm1fd2F0Y2hwb2ludHMpCiAgICAgICAgIHJldHVybjsKQEAgLTEzNywyOSAr
MTM5LDIyIEBAIHZvaWQgU3ltYm9sVGFibGU6OldhdGNocG9pbnRDbGVhbnVwOjpmaW4KICAgICB9
CiB9CiAKLVN5bWJvbFRhYmxlKiBTeW1ib2xUYWJsZTo6Y2xvbmVDYXB0dXJlZE5hbWVzKFZNJiB2
bSkKK1N5bWJvbFRhYmxlKiBTeW1ib2xUYWJsZTo6Y2xvbmVTY29wZVBhcnQoVk0mIHZtKQogewog
ICAgIFN5bWJvbFRhYmxlKiByZXN1bHQgPSBTeW1ib2xUYWJsZTo6Y3JlYXRlKHZtKTsKICAgICAK
LSAgICByZXN1bHQtPm1fcGFyYW1ldGVyQ291bnRJbmNsdWRpbmdUaGlzID0gbV9wYXJhbWV0ZXJD
b3VudEluY2x1ZGluZ1RoaXM7CiAgICAgcmVzdWx0LT5tX3VzZXNOb25TdHJpY3RFdmFsID0gbV91
c2VzTm9uU3RyaWN0RXZhbDsKLSAgICByZXN1bHQtPm1fY2FwdHVyZVN0YXJ0ID0gbV9jYXB0dXJl
U3RhcnQ7Ci0gICAgcmVzdWx0LT5tX2NhcHR1cmVFbmQgPSBtX2NhcHR1cmVFbmQ7CiAKICAgICBm
b3IgKGF1dG8gaXRlciA9IG1fbWFwLmJlZ2luKCksIGVuZCA9IG1fbWFwLmVuZCgpOyBpdGVyICE9
IGVuZDsgKytpdGVyKSB7Ci0gICAgICAgIGlmICghaXNDYXB0dXJlZChpdGVyLT52YWx1ZS5nZXRJ
bmRleCgpKSkKKyAgICAgICAgaWYgKCFpdGVyLT52YWx1ZS52YXJPZmZzZXQoKS5pc1Njb3BlKCkp
CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgcmVzdWx0LT5tX21hcC5hZGQoCiAgICAg
ICAgICAgICBpdGVyLT5rZXksCi0gICAgICAgICAgICBTeW1ib2xUYWJsZUVudHJ5KGl0ZXItPnZh
bHVlLmdldEluZGV4KCksIGl0ZXItPnZhbHVlLmdldEF0dHJpYnV0ZXMoKSkpOworICAgICAgICAg
ICAgU3ltYm9sVGFibGVFbnRyeShpdGVyLT52YWx1ZS52YXJPZmZzZXQoKSwgaXRlci0+dmFsdWUu
Z2V0QXR0cmlidXRlcygpKSk7CiAgICAgfQogICAgIAotICAgIGlmIChtX3Nsb3dBcmd1bWVudHMp
IHsKLSAgICAgICAgcmVzdWx0LT5tX3Nsb3dBcmd1bWVudHMgPSBzdGQ6Om1ha2VfdW5pcXVlPFNs
b3dBcmd1bWVudFtdPihwYXJhbWV0ZXJDb3VudCgpKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gcGFyYW1ldGVyQ291bnQoKTsgaS0tOykKLSAgICAgICAgICAgIHJlc3VsdC0+bV9zbG93QXJn
dW1lbnRzW2ldID0gbV9zbG93QXJndW1lbnRzW2ldOwotICAgIH0KLQorICAgIHJlc3VsdC0+bV9h
cmd1bWVudHMgPSBhcmd1bWVudHMoKTsKKyAgICAKICAgICBpZiAobV90eXBlUHJvZmlsaW5nUmFy
ZURhdGEpIHsKICAgICAgICAgcmVzdWx0LT5tX3R5cGVQcm9maWxpbmdSYXJlRGF0YSA9IHN0ZDo6
bWFrZV91bmlxdWU8VHlwZVByb2ZpbGluZ1JhcmVEYXRhPigpOwogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmgJKHJldmlzaW9uIDE4MDcyMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAyMDEy
LTIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDA3LCAyMDA4LCAyMDEyLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMSw2ICszMSw3IEBACiAKICNpbmNsdWRl
ICJDb25jdXJyZW50SklUTG9jay5oIgogI2luY2x1ZGUgIkpTT2JqZWN0LmgiCisjaW5jbHVkZSAi
U2NvcGVkQXJndW1lbnRzVGFibGUuaCIKICNpbmNsdWRlICJUeXBlTG9jYXRpb24uaCIKICNpbmNs
dWRlICJWYXJpYWJsZVdhdGNocG9pbnRTZXQuaCIKICNpbmNsdWRlIDxtZW1vcnk+CkBAIC0zOSwy
NCArNDAsNiBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotc3RydWN0IFNsb3dBcmd1bWVudCB7Ci1w
dWJsaWM6Ci0gICAgZW51bSBTdGF0dXMgewotICAgICAgICBOb3JtYWwgPSAwLAotICAgICAgICBD
YXB0dXJlZCA9IDEsCi0gICAgICAgIERlbGV0ZWQgPSAyCi0gICAgfTsKLQotICAgIFNsb3dBcmd1
bWVudCgpCi0gICAgICAgIDogc3RhdHVzKE5vcm1hbCkKLSAgICAgICAgLCBpbmRleCgwKQotICAg
IHsKLSAgICB9Ci0KLSAgICBTdGF0dXMgc3RhdHVzOwotICAgIGludCBpbmRleDsgLy8gSWYgc3Rh
dHVzIGlzICdEZWxldGVkJywgaW5kZXggaXMgYm9ndXMuCi19OwotCiBzdGF0aWMgQUxXQVlTX0lO
TElORSBpbnQgbWlzc2luZ1N5bWJvbE1hcmtlcigpIHsgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1p
dHM8aW50Pjo6bWF4KCk7IH0KIAogLy8gVGhlIGJpdCB0d2lkZGxpbmcgaW4gdGhpcyBjbGFzcyBh
c3N1bWVzIHRoYXQgZXZlcnkgcmVnaXN0ZXIgaW5kZXggaXMgYQpAQCAtODYsNiArNjksMjkgQEAg
c3RhdGljIEFMV0FZU19JTkxJTkUgaW50IG1pc3NpbmdTeW1ib2xNYQogLy8gY29weTogICAgIFN5
bWJvbFRhYmxlRW50cnkgLS0+IEZhdEVudHJ5IC0tLS0tXgogCiBzdHJ1Y3QgU3ltYm9sVGFibGVF
bnRyeSB7Citwcml2YXRlOgorICAgIHN0YXRpYyBWYXJPZmZzZXQgdmFyT2Zmc2V0RnJvbUJpdHMo
aW50cHRyX3QgYml0cykKKyAgICB7CisgICAgICAgIFZhcktpbmQga2luZDsKKyAgICAgICAgaW50
cHRyX3Qga2luZEJpdHMgPSBiaXRzICYgS2luZE1hc2s7CisgICAgICAgIGlmIChraW5kQml0cyA8
PSBVbndhdGNoYWJsZVNjb3BlS2luZEJpdHMpCisgICAgICAgICAgICBraW5kID0gU2NvcGVWYXJL
aW5kOworICAgICAgICBlbHNlIGlmIChraW5kQml0cyA9PSBTdGFja0tpbmRCaXRzKQorICAgICAg
ICAgICAga2luZCA9IFN0YWNrVmFyS2luZDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAga2lu
ZCA9IENhcHR1cmVkQXJndW1lbnRLaW5kOworICAgICAgICByZXR1cm4gVmFyT2Zmc2V0Ojphc3Nl
bWJsZShraW5kLCBzdGF0aWNfY2FzdDxpbnQ+KGJpdHMgPj4gRmxhZ0JpdHMpKTsKKyAgICB9Cisg
ICAgCisgICAgc3RhdGljIFNjb3BlT2Zmc2V0IHNjb3BlT2Zmc2V0RnJvbUJpdHMoaW50cHRyX3Qg
Yml0cykKKyAgICB7CisgICAgICAgIEFTU0VSVCghKGJpdHMgJiBTdGFja0ZsYWcpKTsKKyAgICAg
ICAgQVNTRVJUKCEoYml0cyAmIENhcHR1cmVkQXJndW1lbnRGbGFnKSk7CisgICAgICAgIHJldHVy
biBTY29wZU9mZnNldChzdGF0aWNfY2FzdDxpbnQ+KGJpdHMgPj4gRmxhZ0JpdHMpKTsKKyAgICB9
CisKK3B1YmxpYzoKKyAgICAKICAgICAvLyBVc2UgdGhlIFN5bWJvbFRhYmxlRW50cnk6OkZhc3Qg
Y2xhc3MsIGVpdGhlciB2aWEgaW1wbGljaXQgY2FzdCBvciBieSBjYWxsaW5nCiAgICAgLy8gZ2V0
RmFzdCgpLCB3aGVuIHlvdSAoMSkgb25seSBjYXJlIGFib3V0IGlzTnVsbCgpLCBnZXRJbmRleCgp
LCBhbmQgaXNSZWFkT25seSgpLAogICAgIC8vIGFuZCAoMikgeW91IGFyZSBpbiBhIGhvdCBwYXRo
IHdoZXJlIHlvdSBuZWVkIHRvIG1pbmltaXplIHRoZSBudW1iZXIgb2YgdGltZXMKQEAgLTEwNywx
MSArMTEzLDE5IEBAIHN0cnVjdCBTeW1ib2xUYWJsZUVudHJ5IHsKICAgICAgICAgICAgIHJldHVy
biAhKG1fYml0cyAmIH5TbGltRmxhZyk7CiAgICAgICAgIH0KIAotICAgICAgICBpbnQgZ2V0SW5k
ZXgoKSBjb25zdAorICAgICAgICBWYXJPZmZzZXQgdmFyT2Zmc2V0KCkgY29uc3QKICAgICAgICAg
ewotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4obV9iaXRzID4+IEZsYWdCaXRz
KTsKKyAgICAgICAgICAgIHJldHVybiB2YXJPZmZzZXRGcm9tQml0cyhtX2JpdHMpOwogICAgICAg
ICB9Ci0gICAgCisgICAgICAgIAorICAgICAgICAvLyBBc3NlcnRzIGlmIHRoZSBvZmZzZXQgaXMg
YW55dGhpbmcgYnV0IGEgc2NvcGUgb2Zmc2V0LiBUaGlzIHN0cnVjdHVyZXMgdGhlIGFzc2VydGlv
bnMKKyAgICAgICAgLy8gaW4gYSB3YXkgdGhhdCBtYXkgcmVzdWx0IGluIGJldHRlciBjb2RlLCBl
dmVuIGluIHJlbGVhc2UsIHRoYW4gZG9pbmcKKyAgICAgICAgLy8gdmFyT2Zmc2V0KCkuc2NvcGVP
ZmZzZXQoKS4KKyAgICAgICAgU2NvcGVPZmZzZXQgc2NvcGVPZmZzZXQoKSBjb25zdAorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gc2NvcGVPZmZzZXRGcm9tQml0cyhtX2JpdHMpOworICAg
ICAgICB9CisgICAgICAgIAogICAgICAgICBib29sIGlzUmVhZE9ubHkoKSBjb25zdAogICAgICAg
ICB7CiAgICAgICAgICAgICByZXR1cm4gbV9iaXRzICYgUmVhZE9ubHlGbGFnOwpAQCAtMTQyLDE4
ICsxNTYsMTggQEAgc3RydWN0IFN5bWJvbFRhYmxlRW50cnkgewogICAgIHsKICAgICB9CiAKLSAg
ICBTeW1ib2xUYWJsZUVudHJ5KGludCBpbmRleCkKKyAgICBTeW1ib2xUYWJsZUVudHJ5KFZhck9m
ZnNldCBvZmZzZXQpCiAgICAgICAgIDogbV9iaXRzKFNsaW1GbGFnKQogICAgIHsKLSAgICAgICAg
QVNTRVJUKGlzVmFsaWRJbmRleChpbmRleCkpOwotICAgICAgICBwYWNrKGluZGV4LCBmYWxzZSwg
ZmFsc2UpOworICAgICAgICBBU1NFUlQoaXNWYWxpZFZhck9mZnNldChvZmZzZXQpKTsKKyAgICAg
ICAgcGFjayhvZmZzZXQsIGZhbHNlLCBmYWxzZSk7CiAgICAgfQogCi0gICAgU3ltYm9sVGFibGVF
bnRyeShpbnQgaW5kZXgsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCisgICAgU3ltYm9sVGFibGVFbnRy
eShWYXJPZmZzZXQgb2Zmc2V0LCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQogICAgICAgICA6IG1fYml0
cyhTbGltRmxhZykKICAgICB7Ci0gICAgICAgIEFTU0VSVChpc1ZhbGlkSW5kZXgoaW5kZXgpKTsK
LSAgICAgICAgcGFjayhpbmRleCwgYXR0cmlidXRlcyAmIFJlYWRPbmx5LCBhdHRyaWJ1dGVzICYg
RG9udEVudW0pOworICAgICAgICBBU1NFUlQoaXNWYWxpZFZhck9mZnNldChvZmZzZXQpKTsKKyAg
ICAgICAgcGFjayhvZmZzZXQsIGF0dHJpYnV0ZXMgJiBSZWFkT25seSwgYXR0cmlidXRlcyAmIERv
bnRFbnVtKTsKICAgICB9CiAgICAgCiAgICAgflN5bWJvbFRhYmxlRW50cnkoKQpAQCAtMTgxLDkg
KzE5NSwyMiBAQCBzdHJ1Y3QgU3ltYm9sVGFibGVFbnRyeSB7CiAgICAgICAgIHJldHVybiAhKGJp
dHMoKSAmIH5TbGltRmxhZyk7CiAgICAgfQogCi0gICAgaW50IGdldEluZGV4KCkgY29uc3QKKyAg
ICBWYXJPZmZzZXQgdmFyT2Zmc2V0KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB2YXJP
ZmZzZXRGcm9tQml0cyhiaXRzKCkpOworICAgIH0KKyAgICAKKyAgICBib29sIGlzV2F0Y2hhYmxl
KCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KGJpdHMoKSA+
PiBGbGFnQml0cyk7CisgICAgICAgIHJldHVybiAobV9iaXRzICYgS2luZEJpdHNNYXNrKSA9PSBT
Y29wZUtpbmRCaXRzOworICAgIH0KKyAgICAKKyAgICAvLyBBc3NlcnRzIGlmIHRoZSBvZmZzZXQg
aXMgYW55dGhpbmcgYnV0IGEgc2NvcGUgb2Zmc2V0LiBUaGlzIHN0cnVjdHVyZXMgdGhlIGFzc2Vy
dGlvbnMKKyAgICAvLyBpbiBhIHdheSB0aGF0IG1heSByZXN1bHQgaW4gYmV0dGVyIGNvZGUsIGV2
ZW4gaW4gcmVsZWFzZSwgdGhhbiBkb2luZworICAgIC8vIHZhck9mZnNldCgpLnNjb3BlT2Zmc2V0
KCkuCisgICAgU2NvcGVPZmZzZXQgc2NvcGVPZmZzZXQoKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIHNjb3BlT2Zmc2V0RnJvbUJpdHMoYml0cygpKTsKICAgICB9CiAgICAgCiAgICAgQUxX
QVlTX0lOTElORSBGYXN0IGdldEZhc3QoKSBjb25zdApAQCAtMjA2LDEwICsyMzMsMTAgQEAgc3Ry
dWN0IFN5bWJvbFRhYmxlRW50cnkgewogICAgIHsKICAgICAgICAgcmV0dXJuIGdldEZhc3QoKS5n
ZXRBdHRyaWJ1dGVzKCk7CiAgICAgfQotCisgICAgCiAgICAgdm9pZCBzZXRBdHRyaWJ1dGVzKHVu
c2lnbmVkIGF0dHJpYnV0ZXMpCiAgICAgewotICAgICAgICBwYWNrKGdldEluZGV4KCksIGF0dHJp
YnV0ZXMgJiBSZWFkT25seSwgYXR0cmlidXRlcyAmIERvbnRFbnVtKTsKKyAgICAgICAgcGFjayh2
YXJPZmZzZXQoKSwgaXNXYXRjaGFibGUoKSwgYXR0cmlidXRlcyAmIFJlYWRPbmx5LCBhdHRyaWJ1
dGVzICYgRG9udEVudW0pOwogICAgIH0KIAogICAgIGJvb2wgaXNSZWFkT25seSgpIGNvbnN0CkBA
IC0yMTgsNiArMjQ1LDEyIEBAIHN0cnVjdCBTeW1ib2xUYWJsZUVudHJ5IHsKICAgICB9CiAgICAg
CiAgICAgSlNWYWx1ZSBpbmZlcnJlZFZhbHVlKCk7CisKKyAgICB2b2lkIGRpc2FibGVXYXRjaGlu
ZygpCisgICAgeworICAgICAgICBpZiAodmFyT2Zmc2V0KCkuaXNTY29wZSgpKQorICAgICAgICAg
ICAgcGFjayh2YXJPZmZzZXQoKSwgZmFsc2UsIGF0dHJpYnV0ZXMgJiBSZWFkT25seSwgYXR0cmli
dXRlcyAmIERvbnRFbnVtKTsKKyAgICB9CiAgICAgCiAgICAgdm9pZCBwcmVwYXJlVG9XYXRjaChT
eW1ib2xUYWJsZSopOwogICAgIApAQCAtMjQyLDcgKzI3NSwxMiBAQCBwcml2YXRlOgogICAgIHN0
YXRpYyBjb25zdCBpbnRwdHJfdCBSZWFkT25seUZsYWcgPSAweDI7CiAgICAgc3RhdGljIGNvbnN0
IGludHB0cl90IERvbnRFbnVtRmxhZyA9IDB4NDsKICAgICBzdGF0aWMgY29uc3QgaW50cHRyX3Qg
Tm90TnVsbEZsYWcgPSAweDg7Ci0gICAgc3RhdGljIGNvbnN0IGludHB0cl90IEZsYWdCaXRzID0g
NDsKKyAgICBzdGF0aWMgY29uc3QgaW50cHRyX3QgS2luZEJpdHNNYXNrID0gMHgzMDsKKyAgICBz
dGF0aWMgY29uc3QgaW50cHRyX3QgU2NvcGVLaW5kQml0cyA9IDB4MDA7CisgICAgc3RhdGljIGNv
bnN0IGludHB0cl90IFVud2F0Y2hhYmxlU2NvcGVLaW5kQml0cyA9IDB4MTA7CisgICAgc3RhdGlj
IGNvbnN0IGludHB0cl90IFN0YWNrS2luZEJpdHMgPSAweDIwOworICAgIHN0YXRpYyBjb25zdCBp
bnRwdHJfdCBDYXB0dXJlZEFyZ3VtZW50S2luZEJpdHMgPSAweDMwOworICAgIHN0YXRpYyBjb25z
dCBpbnRwdHJfdCBGbGFnQml0cyA9IDY7CiAgICAgCiAgICAgY2xhc3MgRmF0RW50cnkgewogICAg
ICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKQEAgLTMwOSwyMCArMzQ3LDQwIEBAIHByaXZh
dGU6CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGZyZWVGYXRFbnRyeVNsb3coKTsKIAot
ICAgIHZvaWQgcGFjayhpbnQgaW5kZXgsIGJvb2wgcmVhZE9ubHksIGJvb2wgZG9udEVudW0pCisg
ICAgdm9pZCBwYWNrKFZhck9mZnNldCBvZmZzZXQsIGJvb2wgaXNXYXRjaGFibGUsIGJvb2wgcmVh
ZE9ubHksIGJvb2wgZG9udEVudW0pCiAgICAgewogICAgICAgICBBU1NFUlQoIWlzRmF0KCkpOwog
ICAgICAgICBpbnRwdHJfdCYgYml0c1JlZiA9IGJpdHMoKTsKLSAgICAgICAgYml0c1JlZiA9IChz
dGF0aWNfY2FzdDxpbnRwdHJfdD4oaW5kZXgpIDw8IEZsYWdCaXRzKSB8IE5vdE51bGxGbGFnIHwg
U2xpbUZsYWc7CisgICAgICAgIGJpdHNSZWYgPQorICAgICAgICAgICAgKHN0YXRpY19jYXN0PGlu
dHB0cl90PihvZmZzZXQucmF3T2Zmc2V0KCkpIDw8IEZsYWdCaXRzKSB8IE5vdE51bGxGbGFnIHwg
U2xpbUZsYWc7CiAgICAgICAgIGlmIChyZWFkT25seSkKICAgICAgICAgICAgIGJpdHNSZWYgfD0g
UmVhZE9ubHlGbGFnOwogICAgICAgICBpZiAoZG9udEVudW0pCiAgICAgICAgICAgICBiaXRzUmVm
IHw9IERvbnRFbnVtRmxhZzsKKyAgICAgICAgc3dpdGNoIChvZmZzZXQua2luZCgpKSB7CisgICAg
ICAgIGNhc2UgU2NvcGVWYXJLaW5kOgorICAgICAgICAgICAgaWYgKGlzV2F0Y2hhYmxlKQorICAg
ICAgICAgICAgICAgIGJpdHNSZWYgfD0gU2NvcGVLaW5kQml0czsKKyAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICBiaXRzUmVmIHw9IFVud2F0Y2hhYmxlU2NvcGVLaW5kQml0czsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFN0YWNrVmFyS2luZDoKKyAgICAgICAgICAg
IEFTU0VSVCghaXNXYXRjaGFibGUpOworICAgICAgICAgICAgYml0c1JlZiB8PSBTdGFja0tpbmRC
aXRzOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ2FwdHVyZWRBcmd1bWVudEtp
bmQ6CisgICAgICAgICAgICBBU1NFUlQoIWlzV2F0Y2hhYmxlKTsKKyAgICAgICAgICAgIGJpdHNS
ZWYgfD0gQ2FwdHVyZWRBcmd1bWVudEtpbmRCaXRzOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgYm9vbCBpc1Zh
bGlkSW5kZXgoaW50IGluZGV4KQorICAgIHN0YXRpYyBib29sIGlzVmFsaWRWYXJPZmZzZXQoVmFy
T2Zmc2V0IG9mZnNldCkKICAgICB7Ci0gICAgICAgIHJldHVybiAoKHN0YXRpY19jYXN0PGludHB0
cl90PihpbmRleCkgPDwgRmxhZ0JpdHMpID4+IEZsYWdCaXRzKSA9PSBzdGF0aWNfY2FzdDxpbnRw
dHJfdD4oaW5kZXgpOworICAgICAgICByZXR1cm4gKChzdGF0aWNfY2FzdDxpbnRwdHJfdD4ob2Zm
c2V0LnJhd09mZnNldCgpKSA8PCBGbGFnQml0cykgPj4gRmxhZ0JpdHMpID09IHN0YXRpY19jYXN0
PGludHB0cl90PihvZmZzZXQucmF3T2Zmc2V0KCkpOwogICAgIH0KIAogICAgIGludHB0cl90IG1f
Yml0czsKQEAgLTM1MSw3ICs0MDksNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFN5bWJvbFRhYmxl
KiBjcmVhdGVOYW1lU2NvcGVUYWJsZShWTSYgdm0sIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCB1
bnNpZ25lZCBhdHRyaWJ1dGVzKQogICAgIHsKICAgICAgICAgU3ltYm9sVGFibGUqIHJlc3VsdCA9
IGNyZWF0ZSh2bSk7Ci0gICAgICAgIHJlc3VsdC0+YWRkKGlkZW50LmltcGwoKSwgU3ltYm9sVGFi
bGVFbnRyeSgtMSwgYXR0cmlidXRlcykpOworICAgICAgICByZXN1bHQtPmFkZChpZGVudC5pbXBs
KCksIFN5bWJvbFRhYmxlRW50cnkoVmFyT2Zmc2V0KFNjb3BlT2Zmc2V0KDApKSwgYXR0cmlidXRl
cykpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICAKQEAgLTQyMyw4ICs0ODEs
NTEgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gc2l6ZShsb2NrZXIpOwogICAgIH0KICAgICAK
KyAgICBTY29wZU9mZnNldCBtYXhTY29wZU9mZnNldCgpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gbV9tYXhTY29wZU9mZnNldDsKKyAgICB9CisgICAgCisgICAgdm9pZCBkaWRVc2VTY29w
ZU9mZnNldChTY29wZU9mZnNldCBvZmZzZXQpCisgICAgeworICAgICAgICBpZiAoIW1fbWF4U2Nv
cGVPZmZzZXQgfHwgbV9tYXhTY29wZU9mZnNldCA8IG9mZmV0KQorICAgICAgICAgICAgbV9tYXhT
Y29wZU9mZnNldCA9IG9mZnNldDsKKyAgICB9CisgICAgCisgICAgdm9pZCBkaWRVc2VWYXJPZmZz
ZXQoVmFyT2Zmc2V0IG9mZnNldCkKKyAgICB7CisgICAgICAgIGlmIChvZmZzZXQuaXNTY29wZSgp
KQorICAgICAgICAgICAgZGlkVXNlU2NvcGVPZmZzZXQob2Zmc2V0KTsKKyAgICB9CisgICAgCisg
ICAgdW5zaWduZWQgc2NvcGVTaXplKCkgY29uc3QKKyAgICB7CisgICAgICAgIFNjb3BlT2Zmc2V0
IG1heFNjb3BlT2Zmc2V0ID0gdGhpcy0+bWF4U2NvcGVPZmZzZXQoKTsKKyAgICAgICAgCisgICAg
ICAgIC8vIERvIHNvbWUgY2FsY3VsYXRpb24gdGhhdCByZWxpZXMgb24gaW52YWxpZCBzY29wZSBv
ZmZzZXQgcGx1cyBvbmUgYmVpbmcgemVyby4KKyAgICAgICAgdW5zaWduZWQgZmFzdFJlc3VsdCA9
IG1heFNjb3BlT2Zmc2V0Lm9mZnNldFVuY2hlY2tlZCgpICsgMTsKKyAgICAgICAgCisgICAgICAg
IC8vIEFzc2VydCB0aGF0IHRoaXMgd29ya3MuCisgICAgICAgIEFTU0VSVChmYXN0UmVzdWx0ID09
ICghbWF4U2NvcGVPZmZzZXQgPyAwIDogbWF4U2NvcGVPZmZzZXQub2Zmc2V0KCkgKyAxKSk7Cisg
ICAgICAgIAorICAgICAgICByZXR1cm4gZmFzdFJlc3VsdDsKKyAgICB9CisgICAgCisgICAgU2Nv
cGVPZmZzZXQgbmV4dFNjb3BlT2Zmc2V0KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBT
Y29wZU9mZnNldChzY29wZVNpemUoKSk7CisgICAgfQorICAgIAorICAgIFNjb3BlT2Zmc2V0IHRh
a2VOZXh0U2NvcGVPZmZzZXQoKQorICAgIHsKKyAgICAgICAgU2NvcGVPZmZzZXQgcmVzdWx0ID0g
bmV4dFNjb3BlT2Zmc2V0KCk7CisgICAgICAgIG1fbWF4U2NvcGVPZmZzZXQgPSByZXN1bHQ7Cisg
ICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAogICAgIE1hcDo6QWRkUmVzdWx0IGFk
ZChjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiwgU3RyaW5nSW1wbCoga2V5LCBjb25zdCBTeW1i
b2xUYWJsZUVudHJ5JiBlbnRyeSkKICAgICB7CisgICAgICAgIGRpZFVzZVZhck9mZnNldChlbnRy
eS52YXJPZmZzZXQoKSk7CiAgICAgICAgIHJldHVybiBtX21hcC5hZGQoa2V5LCBlbnRyeSk7CiAg
ICAgfQogICAgIApAQCAtNDM2LDYgKzUzNyw3IEBAIHB1YmxpYzoKICAgICAKICAgICBNYXA6OkFk
ZFJlc3VsdCBzZXQoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYsIFN0cmluZ0ltcGwqIGtleSwg
Y29uc3QgU3ltYm9sVGFibGVFbnRyeSYgZW50cnkpCiAgICAgeworICAgICAgICBkaWRVc2VWYXJP
ZmZzZXQoZW50cnkudmFyT2Zmc2V0KCkpOwogICAgICAgICByZXR1cm4gbV9tYXAuc2V0KGtleSwg
ZW50cnkpOwogICAgIH0KICAgICAKQEAgLTQ1Niw2ICs1NTgsNDUgQEAgcHVibGljOgogICAgICAg
ICByZXR1cm4gY29udGFpbnMobG9ja2VyLCBrZXkpOwogICAgIH0KICAgICAKKyAgICAvLyBUaGUg
cHJpbmNpcGxlIGJlaGluZCBTY29wZWRBcmd1bWVudHNUYWJsZSBtb2RpZmljYXRpb25zIGlzIHRo
YXQgd2Ugd2lsbCBjcmVhdGUgb25lIGFuZAorICAgIC8vIGxlYXZlIGl0IHVubG9ja2VkIC0gdGhl
cmVieSBhbGxvd2luZyBpbi1wbGFjZSBjaGFuZ2VzIC0gdW50aWwgc29tZW9uZSBhc2tzIGZvciBh
IHBvaW50ZXIgdG8KKyAgICAvLyB0aGUgdGFibGUuIFRoZW4sIHdlIHdpbGwgbG9jayBpdC4gVGhl
biBib3RoIG91ciBmdXR1cmUgY2hhbmdlcyBhbmQgdGhlaXIgZnV0dXJlIGNoYW5nZXMKKyAgICAv
LyB3aWxsIGZpcnN0IGhhdmUgdG8gbWFrZSBhIGNvcHkuIFRoaXMgZGlzY2lwbGluZSBtZWFucyB0
aGF0IHVzdWFsbHkgd2hlbiB3ZSBjcmVhdGUgYQorICAgIC8vIFNjb3BlZEFyZ3VtZW50cyBvYmpl
Y3QsIHdlIGRvbid0IGhhdmUgdG8gbWFrZSBhIGNvcHkgb2YgdGhlIFNjb3BlZEFyZ3VtZW50c1Rh
YmxlIC0gaW5zdGVhZAorICAgIC8vIHdlIGp1c3QgdGFrZSBhIHJlZmVyZW5jZSB0byBvbmUgdGhh
dCB3ZSBhbHJlYWR5IGhhdmUuCisgICAgCisgICAgdWludDMyX3QgYXJndW1lbnRzTGVuZ3RoKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIGlmICghbV9hcmd1bWVudHMpCisgICAgICAgICAgICByZXR1
cm4gMDsKKyAgICAgICAgcmV0dXJuIG1fYXJndW1lbnRzLT5sZW5ndGgoKTsKKyAgICB9CisgICAg
CisgICAgdm9pZCBzZXRBcmd1bWVudHNMZW5ndGgoVk0mIHZtLCB1aW50MzJfdCBsZW5ndGgpCisg
ICAgeworICAgICAgICBpZiAoVU5MSUtFTFkoIW1fYXJndW1lbnRzKSkKKyAgICAgICAgICAgIG1f
YXJndW1lbnRzLnNldCh2bSwgdGhpcywgU2NvcGVkQXJndW1lbnRzVGFibGU6OmNyZWF0ZSh2bSkp
OworICAgICAgICBtX2FyZ3VtZW50cy5zZXQodm0sIHRoaXMsIG1fYXJndW1lbnRzLT5zZXRMZW5n
dGgodm0sIGxlbmd0aCkpOworICAgIH0KKyAgICAKKyAgICBTY29wZU9mZnNldCBhcmd1bWVudE9m
ZnNldCh1aW50MzJfdCBpKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJ
VFlfSU1QTElDQVRJT04obV9hcmd1bWVudHMpOworICAgICAgICByZXR1cm4gbV9hcmd1bWVudHMt
PmdldChpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzZXRBcmd1bWVudE9mZnNldChWTSYgdm0s
IHVpbnQzMl90IGksIFNjb3BlT2Zmc2V0IG9mZnNldCkKKyAgICB7CisgICAgICAgIEFTU0VSVF9X
SVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKG1fYXJndW1lbnRzKTsKKyAgICAgICAgbV9hcmd1bWVu
dHMuc2V0KHZtLCB0aGlzLCBtX2FyZ3VtZW50cy0+c2V0KHZtLCBpLCBvZmZzZXQpKTsKKyAgICB9
CisgICAgCisgICAgU2NvcGVkQXJndW1lbnRzVGFibGUqIGFyZ3VtZW50cygpIGNvbnN0CisgICAg
eworICAgICAgICBtX2FyZ3VtZW50cy0+bG9jaygpOworICAgICAgICByZXR1cm4gbV9hcmd1bWVu
dHMuZ2V0KCk7CisgICAgfQorICAgIAogICAgIEdsb2JhbFZhcmlhYmxlSUQgdW5pcXVlSURGb3JW
YXJpYWJsZShjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiwgU3RyaW5nSW1wbCoga2V5LCBWTSYg
dm0pOwogICAgIEdsb2JhbFZhcmlhYmxlSUQgdW5pcXVlSURGb3JSZWdpc3Rlcihjb25zdCBDb25j
dXJyZW50SklUTG9ja2VyJiBsb2NrZXIsIGludCByZWdpc3RlckluZGV4LCBWTSYgdm0pOwogICAg
IFJlZlB0cjxUeXBlU2V0PiBnbG9iYWxUeXBlU2V0Rm9yUmVnaXN0ZXIoY29uc3QgQ29uY3VycmVu
dEpJVExvY2tlciYgbG9ja2VyLCBpbnQgcmVnaXN0ZXJJbmRleCwgVk0mIHZtKTsKQEAgLTQ2NCwy
OCArNjA1LDcgQEAgcHVibGljOgogICAgIGJvb2wgdXNlc05vblN0cmljdEV2YWwoKSB7IHJldHVy
biBtX3VzZXNOb25TdHJpY3RFdmFsOyB9CiAgICAgdm9pZCBzZXRVc2VzTm9uU3RyaWN0RXZhbChi
b29sIHVzZXNOb25TdHJpY3RFdmFsKSB7IG1fdXNlc05vblN0cmljdEV2YWwgPSB1c2VzTm9uU3Ry
aWN0RXZhbDsgfQogCi0gICAgaW50IGNhcHR1cmVTdGFydCgpIGNvbnN0IHsgcmV0dXJuIG1fY2Fw
dHVyZVN0YXJ0OyB9Ci0gICAgdm9pZCBzZXRDYXB0dXJlU3RhcnQoaW50IGNhcHR1cmVTdGFydCkg
eyBtX2NhcHR1cmVTdGFydCA9IGNhcHR1cmVTdGFydDsgfQotCi0gICAgaW50IGNhcHR1cmVFbmQo
KSBjb25zdCB7IHJldHVybiBtX2NhcHR1cmVFbmQ7IH0KLSAgICB2b2lkIHNldENhcHR1cmVFbmQo
aW50IGNhcHR1cmVFbmQpIHsgbV9jYXB0dXJlRW5kID0gY2FwdHVyZUVuZDsgfQotCi0gICAgaW50
IGNhcHR1cmVDb3VudCgpIGNvbnN0IHsgcmV0dXJuIC0obV9jYXB0dXJlRW5kIC0gbV9jYXB0dXJl
U3RhcnQpOyB9Ci0gICAgCi0gICAgYm9vbCBpc0NhcHR1cmVkKGludCBvcGVyYW5kKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIG9wZXJhbmQgPD0gY2FwdHVyZVN0YXJ0KCkgJiYgb3BlcmFuZCA+IGNh
cHR1cmVFbmQoKTsKLSAgICB9Ci0KLSAgICBpbnQgcGFyYW1ldGVyQ291bnQoKSB7IHJldHVybiBt
X3BhcmFtZXRlckNvdW50SW5jbHVkaW5nVGhpcyAtIDE7IH0KLSAgICBpbnQgcGFyYW1ldGVyQ291
bnRJbmNsdWRpbmdUaGlzKCkgeyByZXR1cm4gbV9wYXJhbWV0ZXJDb3VudEluY2x1ZGluZ1RoaXM7
IH0KLSAgICB2b2lkIHNldFBhcmFtZXRlckNvdW50SW5jbHVkaW5nVGhpcyhpbnQgcGFyYW1ldGVy
Q291bnRJbmNsdWRpbmdUaGlzKSB7IG1fcGFyYW1ldGVyQ291bnRJbmNsdWRpbmdUaGlzID0gcGFy
YW1ldGVyQ291bnRJbmNsdWRpbmdUaGlzOyB9Ci0KLSAgICAvLyAwIGlmIHdlIGRvbid0IGNhcHR1
cmUgYW55IGFyZ3VtZW50czsgcGFyYW1ldGVyQ291bnQoKSBpbiBsZW5ndGggaWYgd2UgZG8uCi0g
ICAgY29uc3QgU2xvd0FyZ3VtZW50KiBzbG93QXJndW1lbnRzKCkgeyByZXR1cm4gbV9zbG93QXJn
dW1lbnRzLmdldCgpOyB9Ci0gICAgdm9pZCBzZXRTbG93QXJndW1lbnRzKHN0ZDo6dW5pcXVlX3B0
cjxTbG93QXJndW1lbnRbXT4gc2xvd0FyZ3VtZW50cykgeyBtX3Nsb3dBcmd1bWVudHMgPSBXVEY6
Om1vdmUoc2xvd0FyZ3VtZW50cyk7IH0KLSAgICAKLSAgICBTeW1ib2xUYWJsZSogY2xvbmVDYXB0
dXJlZE5hbWVzKFZNJik7CisgICAgU3ltYm9sVGFibGUqIGNsb25lU2NvcGVQYXJ0KFZNJik7CiAK
ICAgICB2b2lkIHByZXBhcmVGb3JUeXBlUHJvZmlsaW5nKGNvbnN0IENvbmN1cnJlbnRKSVRMb2Nr
ZXImKTsKIApAQCAtNTEzLDYgKzYzMyw4IEBAIHByaXZhdGU6CiAgICAgflN5bWJvbFRhYmxlKCk7
CiAKICAgICBNYXAgbV9tYXA7CisgICAgU2NvcGVPZmZzZXQgbV9tYXhTY29wZU9mZnNldDsKKyAg
ICAKICAgICBzdHJ1Y3QgVHlwZVByb2ZpbGluZ1JhcmVEYXRhIHsKICAgICAgICAgVW5pcXVlSURN
YXAgbV91bmlxdWVJRE1hcDsKICAgICAgICAgUmVnaXN0ZXJUb1ZhcmlhYmxlTWFwIG1fcmVnaXN0
ZXJUb1ZhcmlhYmxlTWFwOwpAQCAtNTIwLDEzICs2NDIsOSBAQCBwcml2YXRlOgogICAgIH07CiAg
ICAgc3RkOjp1bmlxdWVfcHRyPFR5cGVQcm9maWxpbmdSYXJlRGF0YT4gbV90eXBlUHJvZmlsaW5n
UmFyZURhdGE7CiAKLSAgICBpbnQgbV9wYXJhbWV0ZXJDb3VudEluY2x1ZGluZ1RoaXM7CiAgICAg
Ym9vbCBtX3VzZXNOb25TdHJpY3RFdmFsOwotCi0gICAgaW50IG1fY2FwdHVyZVN0YXJ0OwotICAg
IGludCBtX2NhcHR1cmVFbmQ7Ci0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8U2xvd0FyZ3VtZW50W10+
IG1fc2xvd0FyZ3VtZW50czsKKyAgICAKKyAgICBXcml0ZUJhcnJpZXI8U2NvcGVkQXJndW1lbnRz
VGFibGU+IG1fYXJndW1lbnRzOwogICAgIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxXYXRjaHBvaW50
Q2xlYW51cD4gbV93YXRjaHBvaW50Q2xlYW51cDsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVmFyT2Zmc2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9WYXJPZmZzZXQuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVmFyT2Zmc2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDc2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJWYXJPZmZzZXQuaCIKKworbmFtZXNwYWNlIEpT
QyB7CisKK3ZvaWQgVmFyT2Zmc2V0OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7Cisg
ICAgc3dpdGNoIChtX2tpbmQpIHsKKyAgICBjYXNlIEludmFsaWRWYXJLaW5kOgorICAgICAgICBv
dXQucHJpbnQoImludmFsaWQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU2NvcGVWYXJL
aW5kOgorICAgICAgICBvdXQucHJpbnQoc2NvcGVPZmZzZXQoKSk7CisgICAgICAgIHJldHVybjsK
KyAgICBjYXNlIFN0YWNrVmFyS2luZDoKKyAgICAgICAgb3V0LnByaW50KHN0YWNrT2Zmc2V0KCkp
OworICAgICAgICByZXR1cm47CisgICAgY2FzZSBDYXB0dXJlZEFyZ3VtZW50S2luZDoKKyAgICAg
ICAgb3V0LnByaW50KGNhcHR1cmVkQXJndW1lbnRPZmZzZXQoKSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgSlNDCisKK25hbWVzcGFjZSBXVEYgeworCit1c2luZyBuYW1lc3BhY2UgSlNDOworCit2
b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgVmFyS2luZCB2YXJLaW5kKQorewor
ICAgIHN3aXRjaCAodmFyS2luZCkgeworICAgIGNhc2UgSW52YWxpZFZhcktpbmQ6CisgICAgICAg
IG91dC5wcmludCgiSW52YWxpZCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBTY29wZVZh
cktpbmQ6CisgICAgICAgIG91dC5wcmludCgiU2NvcGUiKTsKKyAgICAgICAgcmV0dXJuOworICAg
IGNhc2UgU3RhY2tWYXJLaW5kOgorICAgICAgICBvdXQucHJpbnQoIlN0YWNrIik7CisgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIENhcHR1cmVkQXJndW1lbnRLaW5kOgorICAgICAgICBvdXQucHJp
bnQoIkNhcHR1cmVkQXJndW1lbnQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVmFyT2Zmc2V0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVmFyT2Zmc2V0LmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WYXJPZmZzZXQuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDIxNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaWZuZGVmIFZhck9mZnNldF9oCisjZGVmaW5lIFZhck9mZnNldF9oCisK
KyNpbmNsdWRlICJDYXB0dXJlZEFyZ3VtZW50c09mZnNldC5oIgorI2luY2x1ZGUgIlNjb3BlT2Zm
c2V0LmgiCisjaW5jbHVkZSAiVmlydHVhbFJlZ2lzdGVyLmgiCisKK25hbWVzcGFjZSBKU0Mgewor
CitlbnVtIFZhcktpbmQgOiB1aW50OF90IHsKKyAgICBJbnZhbGlkVmFyS2luZCwKKyAgICBTY29w
ZVZhcktpbmQsCisgICAgU3RhY2tWYXJLaW5kLAorICAgIENhcHR1cmVkQXJndW1lbnRLaW5kCit9
OworCitjbGFzcyBWYXJPZmZzZXQgeworcHVibGljOgorICAgIFZhck9mZnNldCgpCisgICAgICAg
IDogbV9raW5kKEludmFsaWRWYXJLaW5kKQorICAgICAgICAsIG1fb2Zmc2V0KFVJTlRfTUFYKQor
ICAgIHsKKyAgICB9CisgICAgCisgICAgZXhwbGljaXQgVmFyT2Zmc2V0KFZpcnR1YWxSZWdpc3Rl
ciBzdGFja09mZnNldCkKKyAgICB7CisgICAgICAgIGlmICghc3RhY2tPZmZzZXQuaXNWYWxpZCgp
KSB7CisgICAgICAgICAgICBtX2tpbmQgPSBJbnZhbGlkVmFyS2luZDsKKyAgICAgICAgICAgIG1f
b2Zmc2V0ID0gVUlOVF9NQVg7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX2tpbmQg
PSBTdGFja1ZhcktpbmQ7CisgICAgICAgICAgICBtX29mZnNldCA9IHN0YWNrT2Zmc2V0Lm9mZnNl
dCgpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIGV4cGxpY2l0IFZhck9mZnNldChTY29w
ZU9mZnNldCBzY29wZU9mZnNldCkKKyAgICB7CisgICAgICAgIGlmICghc2NvcGVPZmZzZXQpIHsK
KyAgICAgICAgICAgIG1fa2luZCA9IEludmFsaWRWYXJLaW5kOworICAgICAgICAgICAgbV9vZmZz
ZXQgPSBVSU5UX01BWDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1fa2luZCA9IFNj
b3BlVmFyS2luZDsKKyAgICAgICAgICAgIG1fb2Zmc2V0ID0gc2NvcGVPZmZzZXQub2Zmc2V0KCk7
CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgZXhwbGljaXQgVmFyT2Zmc2V0KENhcHR1cmVk
QXJndW1lbnRzT2Zmc2V0IGNhcHR1cmVkQXJndW1lbnRzT2Zmc2V0KQorICAgIHsKKyAgICAgICAg
aWYgKCFjYXB0dXJlZEFyZ3VtZW50c09mZnNldCkgeworICAgICAgICAgICAgbV9raW5kID0gSW52
YWxpZFZhcktpbmQ7CisgICAgICAgICAgICBtX29mZnNldCA9IFVJTlRfTUFYOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgbV9raW5kID0gQ2FwdHVyZWRBcmd1bWVudEtpbmQ7CisgICAg
ICAgICAgICBtX29mZnNldCA9IGNhcHR1cmVkQXJndW1lbnRzT2Zmc2V0Lm9mZnNldCgpOworICAg
ICAgICB9CisgICAgfQorICAgIAorICAgIHN0YXRpYyBWYXJPZmZzZXQgYXNzZW1ibGUoVmFyS2lu
ZCBraW5kLCB1bnNpZ25lZCBvZmZzZXQpCisgICAgeworICAgICAgICBWYXJPZmZzZXQgcmVzdWx0
OworICAgICAgICByZXN1bHQubV9raW5kID0ga2luZDsKKyAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0
ID0gb2Zmc2V0OworICAgICAgICByZXN1bHQuY2hlY2tTYW5pdHkoKTsKKyAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc1ZhbGlkKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBtX2tpbmQgIT0gSW52YWxpZFZhcktpbmQ7CisgICAgfQorICAgIAorICAg
IGJvb2wgb3BlcmF0b3IhKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhaXNWYWxpZCgp
OworICAgIH0KKyAgICAKKyAgICBWYXJLaW5kIGtpbmQoKSBjb25zdCB7IHJldHVybiBtX2tpbmQ7
IH0KKyAgICAKKyAgICBib29sIGlzU3RhY2soKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IG1fa2luZCA9PSBTdGFja1ZhcktpbmQ7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNTY29wZSgp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9raW5kID09IFNjb3BlVmFyS2luZDsKKyAg
ICB9CisgICAgCisgICAgYm9vbCBpc0NhcHR1cmVkQXJndW1lbnQoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG1fa2luZCA9PSBDYXB0dXJlZEFyZ3VtZW50S2luZDsKKyAgICB9CisgICAg
CisgICAgVmlydHVhbFJlZ2lzdGVyIHN0YWNrT2Zmc2V0VW5jaGVja2VkKCkgY29uc3QKKyAgICB7
CisgICAgICAgIGlmICghaXNTdGFjaygpKQorICAgICAgICAgICAgcmV0dXJuIFZpcnR1YWxSZWdp
c3RlcigpOworICAgICAgICByZXR1cm4gVmlydHVhbFJlZ2lzdGVyKG1fb2Zmc2V0KTsKKyAgICB9
CisgICAgCisgICAgU2NvcGVPZmZzZXQgc2NvcGVPZmZzZXRVbmNoZWNrZWQoKSBjb25zdAorICAg
IHsKKyAgICAgICAgaWYgKCFpc1Njb3BlKCkpCisgICAgICAgICAgICByZXR1cm4gU2NvcGVPZmZz
ZXQoKTsKKyAgICAgICAgcmV0dXJuIFNjb3BlT2Zmc2V0KG1fb2Zmc2V0KTsKKyAgICB9CisgICAg
CisgICAgQ2FwdHVyZWRBcmd1bWVudHNPZmZzZXQgY2FwdHVyZWRBcmd1bWVudHNPZmZzZXRVbmNo
ZWNrZWQoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKCFpc0NhcHR1cmVkQXJndW1lbnQoKSkK
KyAgICAgICAgICAgIHJldHVybiBDYXB0dXJlZEFyZ3VtZW50c09mZnNldCgpOworICAgICAgICBy
ZXR1cm4gQ2FwdHVyZWRBcmd1bWVudHNPZmZzZXQobV9vZmZzZXQpOworICAgIH0KKyAgICAKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgc3RhY2tPZmZzZXQoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNT
RVJUKGlzU3RhY2soKSk7CisgICAgICAgIHJldHVybiBWaXJ0dWFsUmVnaXN0ZXIobV9vZmZzZXQp
OworICAgIH0KKyAgICAKKyAgICBTY29wZU9mZnNldCBzY29wZU9mZnNldCgpIGNvbnN0CisgICAg
eworICAgICAgICBBU1NFUlQoaXNTY29wZSgpKTsKKyAgICAgICAgcmV0dXJuIFNjb3BlT2Zmc2V0
KG1fb2Zmc2V0KTsKKyAgICB9CisgICAgCisgICAgQ2FwdHVyZWRBcmd1bWVudHNPZmZzZXQgY2Fw
dHVyZWRBcmd1bWVudHNPZmZzZXQoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzQ2Fw
dHVyZWRBcmd1bWVudCgpKTsKKyAgICAgICAgcmV0dXJuIENhcHR1cmVkQXJndW1lbnRzT2Zmc2V0
KG1fb2Zmc2V0KTsKKyAgICB9CisgICAgCisgICAgdW5zaWduZWQgcmF3T2Zmc2V0KCkgY29uc3QK
KyAgICB7CisgICAgICAgIEFTU0VSVChpc1ZhbGlkKCkpOworICAgICAgICByZXR1cm4gbV9vZmZz
ZXQ7CisgICAgfQorICAgIAorICAgIHZvaWQgY2hlY2tTYW5pdHkoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgaWYgKEFTU0VSVF9ESVNBQkxFRCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
CisgICAgICAgIHN3aXRjaCAobV9raW5kKSB7CisgICAgICAgIGNhc2UgSW52YWxpZFZhcktpbmQ6
CisgICAgICAgICAgICBBU1NFUlQobV9vZmZzZXQgPT0gVUlOVF9NQVgpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICBjYXNlIFNjb3BlVmFyS2luZDoKKyAgICAgICAgICAgIEFTU0VSVChz
Y29wZU9mZnNldCgpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBTdGFja1Zh
cktpbmQ6CisgICAgICAgICAgICBBU1NFUlQoc3RhY2tPZmZzZXQoKSk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIGNhc2UgQ2FwdHVyZWRBcmd1bWVudEtpbmQ6CisgICAgICAgICAgICBB
U1NFUlQoY2FwdHVyZWRBcmd1bWVudHNPZmZzZXQoKSk7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0K
KyAgICAKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgVmFyT2Zmc2V0JiBvdGhlcikgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBtX2tpbmQgPT0gb3RoZXIubV9raW5kCisgICAgICAgICAg
ICAmJiBtX29mZnNldCA9PSBvdGhlci5tX29mZnNldDsKKyAgICB9CisgICAgCisgICAgYm9vbCBv
cGVyYXRvciE9KGNvbnN0IFZhck9mZnNldCYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgfQorICAgIAorICAgIHZvaWQgZHVtcChQcmlu
dFN0cmVhbSYpIGNvbnN0OworICAgIAorcHJpdmF0ZToKKyAgICBWYXJLaW5kIG1fa2luZDsKKyAg
ICB1bnNpZ25lZCBtX29mZnNldDsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCituYW1lc3Bh
Y2UgV1RGIHsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpWYXJLaW5k
KTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBWYXJPZmZzZXRfaAorCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>247636</attachid>
            <date>2015-03-01 12:46:59 -0800</date>
            <delta_ts>2015-03-01 16:44:37 -0800</delta_ts>
            <desc>just a little bit more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>211929</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2Vt
Ymxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJz
dHJhY3RNYWNyb0Fzc2VtYmxlci5oCShyZXZpc2lvbiAxODA3MjApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMjA1LDYgKzIwNSwxMSBAQCBwdWJsaWM6CiAgICAgICAgIFJlZ2lzdGVySUQgaW5kZXg7
CiAgICAgICAgIFNjYWxlIHNjYWxlOwogICAgICAgICBpbnQzMl90IG9mZnNldDsKKyAgICAgICAg
CisgICAgICAgIEJhc2VJbmRleCB3aXRoT2Zmc2V0KGludDMyX3QgYWRkaXRpb25hbE9mZnNldCkK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEJhc2VJbmRleChiYXNlLCBpbmRleCwgc2Nh
bGUsIG9mZnNldCArIGFkZGl0aW9uYWxPZmZzZXQpOworICAgICAgICB9CiAgICAgfTsKIAogICAg
IC8vIEFic29sdXRlQWRkcmVzczoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9CeVZhbEluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQnlWYWxJbmZvLmgJKHJldmlzaW9uIDE4MDcyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9CeVZhbEluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDEsNiArNDEsOCBAQCBlbnVt
IEpJVEFycmF5TW9kZSB7CiAgICAgSklURG91YmxlLAogICAgIEpJVENvbnRpZ3VvdXMsCiAgICAg
SklUQXJyYXlTdG9yYWdlLAorICAgIEpJVERpcmVjdEFyZ3VtZW50cywKKyAgICBKSVRTY29wZWRB
cmd1bWVudHMsCiAgICAgSklUSW50OEFycmF5LAogICAgIEpJVEludDE2QXJyYXksCiAgICAgSklU
SW50MzJBcnJheSwKQEAgLTY1LDYgKzY3LDE3IEBAIGlubGluZSBib29sIGlzT3B0aW1pemFibGVJ
bmRleGluZ1R5cGUoSW4KICAgICB9CiB9CiAKK2lubGluZSBib29sIGhhc09wdGltaXphYmxlSW5k
ZXhpbmdGb3JKU1R5cGUoSlNUeXBlIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAg
Y2FzZSBEaXJlY3RBcmd1bWVudHNUeXBlOgorICAgIGNhc2UgU2NvcGVkQXJndW1lbnRzVHlwZToK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KK30KKwogaW5saW5lIGJvb2wgaGFzT3B0aW1pemFibGVJbmRleGluZ0ZvckNsYXNz
SW5mbyhjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbykKIHsKICAgICByZXR1cm4gaXNUeXBlZFZp
ZXcoY2xhc3NJbmZvLT50eXBlZEFycmF5U3RvcmFnZVR5cGUpOwpAQCAtNzMsNiArODYsNyBAQCBp
bmxpbmUgYm9vbCBoYXNPcHRpbWl6YWJsZUluZGV4aW5nRm9yQ2xhCiBpbmxpbmUgYm9vbCBoYXNP
cHRpbWl6YWJsZUluZGV4aW5nKFN0cnVjdHVyZSogc3RydWN0dXJlKQogewogICAgIHJldHVybiBp
c09wdGltaXphYmxlSW5kZXhpbmdUeXBlKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpCisgICAg
ICAgIHx8IGhhc09wdGltaXphYmxlSW5kZXhpbmdGb3JKU1R5cGUoc3RydWN0dXJlLT50eXBlSW5m
bygpLnR5cGUoKSkKICAgICAgICAgfHwgaGFzT3B0aW1pemFibGVJbmRleGluZ0ZvckNsYXNzSW5m
byhzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpKTsKIH0KIApAQCAtOTMsNiArMTA3LDE5IEBAIGlubGlu
ZSBKSVRBcnJheU1vZGUgaml0QXJyYXlNb2RlRm9ySW5kZXgKICAgICB9CiB9CiAKK2lubGluZSBK
SVRBcnJheU1vZGUgaml0QXJyYXlNb2RlRm9ySlNUeXBlKEpTVHlwZSB0eXBlKQoreworICAgIHN3
aXRjaCAodHlwZSkgeworICAgIGNhc2UgRGlyZWN0QXJndW1lbnRzVHlwZToKKyAgICAgICAgcmV0
dXJuIEpJVERpcmVjdEFyZ3VtZW50czsKKyAgICBjYXNlIFNjb3BlZEFyZ3VtZW50c1R5cGU6Cisg
ICAgICAgIHJldHVybiBKSVRTY29wZWRBcmd1bWVudHM7CisgICAgZGVmYXVsdDoKKyAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIEpJVENvbnRpZ3Vv
dXM7CisgICAgfQorfQorCiBpbmxpbmUgSklUQXJyYXlNb2RlIGppdEFycmF5TW9kZUZvckNsYXNz
SW5mbyhjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbykKIHsKICAgICBzd2l0Y2ggKGNsYXNzSW5m
by0+dHlwZWRBcnJheVN0b3JhZ2VUeXBlKSB7CkBAIC0xMjAsNiArMTQ3LDE5IEBAIGlubGluZSBK
SVRBcnJheU1vZGUgaml0QXJyYXlNb2RlRm9yQ2xhc3MKICAgICB9CiB9CiAKK2lubGluZSBib29s
IGppdEFycmF5TW9kZVBlcm1pdHNQdXQoSklUQXJyYXlNb2RlIG1vZGUpCit7CisgICAgc3dpdGNo
IChtb2RlKSB7CisgICAgY2FzZSBKSVREaXJlY3RBcmd1bWVudHM6CisgICAgY2FzZSBKSVRTY29w
ZWRBcmd1bWVudHM6CisgICAgICAgIC8vIFdlIGNvdWxkIHN1cHBvcnQgcHV0X2J5X3ZhbCBvbiB0
aGVzZSBhdCBzb21lIHBvaW50LCBidXQgaXQncyBqdXN0IG5vdCB0aGF0IHByb2ZpdGFibGUKKyAg
ICAgICAgLy8gYXQgdGhlIG1vbWVudC4KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGRlZmF1
bHQ6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KK30KKwogaW5saW5lIFR5cGVkQXJyYXlU
eXBlIHR5cGVkQXJyYXlUeXBlRm9ySklUQXJyYXlNb2RlKEpJVEFycmF5TW9kZSBtb2RlKQogewog
ICAgIHN3aXRjaCAobW9kZSkgewpAQCAtMTUyLDYgKzE5Miw5IEBAIGlubGluZSBKSVRBcnJheU1v
ZGUgaml0QXJyYXlNb2RlRm9yU3RydWMKICAgICBpZiAoaXNPcHRpbWl6YWJsZUluZGV4aW5nVHlw
ZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSkKICAgICAgICAgcmV0dXJuIGppdEFycmF5TW9k
ZUZvckluZGV4aW5nVHlwZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKTsKICAgICAKKyAgICBp
ZiAoaGFzT3B0aW1pemFibGVJbmRleGluZ0ZvckpTVHlwZShzdHJ1Y3R1cmUtPnR5cGVJbmZvKCku
dHlwZSgpKSkKKyAgICAgICAgcmV0dXJuIGppdEFycmF5TW9kZUZvckpTVHlwZShzdHJ1Y3R1cmUt
PnR5cGVJbmZvKCkudHlwZSgpKTsKKyAgICAKICAgICBBU1NFUlQoaGFzT3B0aW1pemFibGVJbmRl
eGluZ0ZvckNsYXNzSW5mbyhzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpKSk7CiAgICAgcmV0dXJuIGpp
dEFycmF5TW9kZUZvckNsYXNzSW5mbyhzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpKTsKIH0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QuanNvbgo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0Lmpzb24J
KHJldmlzaW9uIDE4MDcyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRl
Y29kZUxpc3QuanNvbgkod29ya2luZyBjb3B5KQpAQCAtOCw3ICs4LDkgQEAKICAgICAgICAgICAg
IHsgIm5hbWUiIDogIm9wX2dldF9zY29wZSIsICJsZW5ndGgiIDogMiB9LAogICAgICAgICAgICAg
eyAibmFtZSIgOiAib3BfdG91Y2hfZW50cnkiLCAibGVuZ3RoIiA6IDEgfSwKICAgICAgICAgICAg
IHsgIm5hbWUiIDogIm9wX2luaXRfbGF6eV9yZWciLCAibGVuZ3RoIiA6IDIgfSwKLSAgICAgICAg
ICAgIHsgIm5hbWUiIDogIm9wX2NyZWF0ZV9hcmd1bWVudHMiLCAibGVuZ3RoIiA6IDMgfSwKKyAg
ICAgICAgICAgIHsgIm5hbWUiIDogIm9wX2NyZWF0ZV9kaXJlY3RfYXJndW1lbnRzIiwgImxlbmd0
aCIgOiAyIH0sIC8vIGp1c3QgdGFrZXMgdGhlIGRzdCByZWdpc3RlcgorICAgICAgICAgICAgeyAi
bmFtZSIgOiAib3BfY3JlYXRlX3Njb3BlZF9hcmd1bWVudHMiLCAibGVuZ3RoIiA6IDMgfSwgLy8g
ZHN0LCBzY29wZVJlZ2lzdGVyLCBpbXBsaWNpdGx5IHVzZXMgdGhlIFNjb3BlZEFyZ3VtZW50c1Rh
YmxlIGluIHRoZSBTeW1ib2xUYWJsZSBvZiB0aGUgQ29kZUJsb2NrCisgICAgICAgICAgICB7ICJu
YW1lIiA6ICJvcF9jcmVhdGVfb3V0X29mX2JhbmRfYXJndW1lbnRzIiwgImxlbmd0aCIgOiAyIH0s
CiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9jcmVhdGVfdGhpcyIsICJsZW5ndGgiIDogNCB9
LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfZ2V0X2NhbGxlZSIsICJsZW5ndGgiIDogMyB9
LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfdG9fdGhpcyIsICJsZW5ndGgiIDogNCB9LApA
QCAtNjEsNyArNjMsNiBAQAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfZ2V0X2J5X2lkIiwg
Imxlbmd0aCIgOiA5ICB9LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfZ2V0X2J5X2lkX291
dF9vZl9saW5lIiwgImxlbmd0aCIgOiA5ICB9LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3Bf
Z2V0X2FycmF5X2xlbmd0aCIsICJsZW5ndGgiIDogOSB9LAotICAgICAgICAgICAgeyAibmFtZSIg
OiAib3BfZ2V0X2FyZ3VtZW50c19sZW5ndGgiLCAibGVuZ3RoIiA6IDQgfSwKICAgICAgICAgICAg
IHsgIm5hbWUiIDogIm9wX3B1dF9ieV9pZCIsICJsZW5ndGgiIDogOSB9LAogICAgICAgICAgICAg
eyAibmFtZSIgOiAib3BfcHV0X2J5X2lkX291dF9vZl9saW5lIiwgImxlbmd0aCIgOiA5IH0sCiAg
ICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9wdXRfYnlfaWRfdHJhbnNpdGlvbl9kaXJlY3QiLCAi
bGVuZ3RoIiA6IDkgfSwKQEAgLTcwLDcgKzcxLDYgQEAKICAgICAgICAgICAgIHsgIm5hbWUiIDog
Im9wX3B1dF9ieV9pZF90cmFuc2l0aW9uX25vcm1hbF9vdXRfb2ZfbGluZSIsICJsZW5ndGgiIDog
OSB9LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfZGVsX2J5X2lkIiwgImxlbmd0aCIgOiA0
IH0sCiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9nZXRfYnlfdmFsIiwgImxlbmd0aCIgOiA2
IH0sCi0gICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9nZXRfYXJndW1lbnRfYnlfdmFsIiwgImxl
bmd0aCIgOiA3IH0sCiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9wdXRfYnlfdmFsIiwgImxl
bmd0aCIgOiA1IH0sCiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9wdXRfYnlfdmFsX2RpcmVj
dCIsICJsZW5ndGgiIDogNSB9LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfZGVsX2J5X3Zh
bCIsICJsZW5ndGgiIDogNCB9LApAQCAtOTksNyArOTksNiBAQAogICAgICAgICAgICAgeyAibmFt
ZSIgOiAib3BfY2FsbCIsICJsZW5ndGgiIDogOSB9LAogICAgICAgICAgICAgeyAibmFtZSIgOiAi
b3BfY2FsbF9ldmFsIiwgImxlbmd0aCIgOiA5IH0sCiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJv
cF9jYWxsX3ZhcmFyZ3MiLCAibGVuZ3RoIiA6IDkgfSwKLSAgICAgICAgICAgIHsgIm5hbWUiIDog
Im9wX3RlYXJfb2ZmX2FyZ3VtZW50cyIsICJsZW5ndGgiIDogMyB9LAogICAgICAgICAgICAgeyAi
bmFtZSIgOiAib3BfcmV0IiwgImxlbmd0aCIgOiAyIH0sCiAgICAgICAgICAgICB7ICJuYW1lIiA6
ICJvcF9jb25zdHJ1Y3QiLCAibGVuZ3RoIiA6IDkgfSwKICAgICAgICAgICAgIHsgIm5hbWUiIDog
Im9wX2NvbnN0cnVjdF92YXJhcmdzIiwgImxlbmd0aCIgOiA5IH0sCkBAIC0xMDgsNiArMTA3LDgg
QEAKICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX3Jlc29sdmVfc2NvcGUiLCAibGVuZ3RoIiA6
IDcgfSwKICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX2dldF9mcm9tX3Njb3BlIiwgImxlbmd0
aCIgOiA4IH0sCiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9wdXRfdG9fc2NvcGUiLCAibGVu
Z3RoIiA6IDcgfSwKKyAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX2dldF9mcm9tX2FyZ3VtZW50
cyIsICJsZW5ndGgiIDogNSB9LCAvLyBkc3QsIGFyZ3VtZW50cywgaW5kZXgsIHByb2ZpbGUKKyAg
ICAgICAgICAgIHsgIm5hbWUiIDogIm9wX3B1dF90b19hcmd1bWVudHMiLCAibGVuZ3RoIiA6IDQg
fSwgLy8gYXJndW1lbnRzLCBpbmRleCwgc3JjCiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9w
dXNoX3dpdGhfc2NvcGUiLCAibGVuZ3RoIiA6IDMgfSwKICAgICAgICAgICAgIHsgIm5hbWUiIDog
Im9wX3BvcF9zY29wZSIsICJsZW5ndGgiIDogMiB9LAogICAgICAgICAgICAgeyAibmFtZSIgOiAi
b3BfcHVzaF9uYW1lX3Njb3BlIiwgImxlbmd0aCIgOiA1IH0sCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMTgwNzIwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE3MTcsOCArMTcxNyw4IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFNjcmlwdEV4ZWN1
dGFibGUqIG8KICAgICAgICAgICAgIHN5bWJvbFRhYmxlLT5wcmVwYXJlRm9yVHlwZVByb2ZpbGlu
Zyhsb2NrZXIpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKGNvZGVUeXBlKCkgPT0gRnVuY3Rp
b25Db2RlICYmIHN5bWJvbFRhYmxlLT5jYXB0dXJlQ291bnQoKSkgewotICAgICAgICAgICAgbV9z
eW1ib2xUYWJsZS5zZXQoKm1fdm0sIG1fb3duZXJFeGVjdXRhYmxlLmdldCgpLCBzeW1ib2xUYWJs
ZS0+Y2xvbmVDYXB0dXJlZE5hbWVzKCptX3ZtKSk7CisgICAgICAgIGlmIChjb2RlVHlwZSgpID09
IEZ1bmN0aW9uQ29kZSAmJiBzeW1ib2xUYWJsZS0+c2NvcGVTaXplKSkgeworICAgICAgICAgICAg
bV9zeW1ib2xUYWJsZS5zZXQoKm1fdm0sIG1fb3duZXJFeGVjdXRhYmxlLmdldCgpLCBzeW1ib2xU
YWJsZS0+Y2xvbmVTY29wZVBhcnQoKm1fdm0pKTsKICAgICAgICAgICAgIGRpZENsb25lU3ltYm9s
VGFibGUgPSB0cnVlOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIG1fc3ltYm9sVGFibGUu
c2V0KCptX3ZtLCBtX293bmVyRXhlY3V0YWJsZS5nZXQoKSwgc3ltYm9sVGFibGUpOwpAQCAtMTk2
MiwxMyArMTk2MiwxNCBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBv
CiAKICAgICAgICAgICAgIC8vIGdldF9mcm9tX3Njb3BlIGRzdCwgc2NvcGUsIGlkLCBSZXNvbHZl
TW9kZUFuZFR5cGUsIFN0cnVjdHVyZSwgT3BlcmFuZAogCi0gICAgICAgICAgICBjb25zdCBJZGVu
dGlmaWVyJiBpZGVudCA9IGlkZW50aWZpZXIocGNbM10udS5vcGVyYW5kKTsKICAgICAgICAgICAg
IFJlc29sdmVNb2RlQW5kVHlwZSBtb2RlQW5kVHlwZSA9IFJlc29sdmVNb2RlQW5kVHlwZShwY1s0
XS51Lm9wZXJhbmQpOwogICAgICAgICAgICAgaWYgKG1vZGVBbmRUeXBlLnR5cGUoKSA9PSBMb2Nh
bENsb3N1cmVWYXIpIHsKICAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIDRdID0gUmVz
b2x2ZU1vZGVBbmRUeXBlKG1vZGVBbmRUeXBlLm1vZGUoKSwgQ2xvc3VyZVZhcikub3BlcmFuZCgp
OwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogCisgICAgICAgICAgICBj
b25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGlkZW50aWZpZXIocGNbM10udS5vcGVyYW5kKTsKKwog
ICAgICAgICAgICAgUmVzb2x2ZU9wIG9wID0gSlNTY29wZTo6YWJzdHJhY3RSZXNvbHZlKG1fZ2xv
YmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIG5lZWRzQWN0aXZhdGlvbigpLCBzY29wZSwgaWRlbnQs
IEdldCwgbW9kZUFuZFR5cGUudHlwZSgpKTsKIAogICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kg
KyA0XS51Lm9wZXJhbmQgPSBSZXNvbHZlTW9kZUFuZFR5cGUobW9kZUFuZFR5cGUubW9kZSgpLCBv
cC50eXBlKS5vcGVyYW5kKCk7CkBAIC0xOTgzLDE4ICsxOTg0LDEzIEBAIENvZGVCbG9jazo6Q29k
ZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUqIG8KIAogICAgICAgICBjYXNlIG9wX3B1dF90b19zY29w
ZTogewogICAgICAgICAgICAgLy8gcHV0X3RvX3Njb3BlIHNjb3BlLCBpZCwgdmFsdWUsIFJlc29s
dmVNb2RlQW5kVHlwZSwgU3RydWN0dXJlLCBPcGVyYW5kCi0gICAgICAgICAgICBjb25zdCBJZGVu
dGlmaWVyJiBpZGVudCA9IGlkZW50aWZpZXIocGNbMl0udS5vcGVyYW5kKTsKLQogICAgICAgICAg
ICAgUmVzb2x2ZU1vZGVBbmRUeXBlIG1vZGVBbmRUeXBlID0gUmVzb2x2ZU1vZGVBbmRUeXBlKHBj
WzRdLnUub3BlcmFuZCk7CiAgICAgICAgICAgICBpZiAobW9kZUFuZFR5cGUudHlwZSgpID09IExv
Y2FsQ2xvc3VyZVZhcikgewotICAgICAgICAgICAgICAgIGJvb2wgaXNXYXRjaGFibGVWYXJpYWJs
ZSA9IHBjWzVdLnUub3BlcmFuZDsKLSAgICAgICAgICAgICAgICBpZiAoIWlzV2F0Y2hhYmxlVmFy
aWFibGUpIHsKLSAgICAgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyA1XS51LndhdGNo
cG9pbnRTZXQgPSBudWxscHRyOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgU3RyaW5nSW1wbCogdWlkID0gaWRlbnQuaW1wbCgp
OwotICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGRpZENsb25lU3ltYm9sVGFibGUpOwot
ICAgICAgICAgICAgICAgIGlmIChpZGVudCAhPSBtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5hcmd1bWVu
dHMpIHsKKyAgICAgICAgICAgICAgICAvLyBPbmx5IGRvIHdhdGNoaW5nIGlmIHRoZSBwcm9wZXJ0
eSB3ZSdyZSBwdXR0aW5nIHRvIGlzIG5vdCBhbm9ueW1vdXMuCisgICAgICAgICAgICAgICAgaWYg
KHN0YXRpY19jYXN0PHVuc2lnbmVkPihwY1syXS51Lm9wZXJhbmQpICE9IFVJTlRfTUFYKSB7Cisg
ICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGRpZENsb25lU3ltYm9sVGFibGUpOwor
ICAgICAgICAgICAgICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGlkZW50aWZpZXIo
cGNbMl0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgICAgICAgICAgU3RyaW5nSW1wbCogdWlkID0g
aWRlbnQuaW1wbCgpOwogICAgICAgICAgICAgICAgICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxv
Y2tlcihtX3N5bWJvbFRhYmxlLT5tX2xvY2spOwogICAgICAgICAgICAgICAgICAgICBTeW1ib2xU
YWJsZTo6TWFwOjppdGVyYXRvciBpdGVyID0gbV9zeW1ib2xUYWJsZS0+ZmluZChsb2NrZXIsIHVp
ZCk7CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChpdGVyICE9IG1fc3ltYm9sVGFibGUtPmVu
ZChsb2NrZXIpKTsKQEAgLTIwMDUsNiArMjAwMSw4IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFNj
cmlwdEV4ZWN1dGFibGUqIG8KICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0K
IAorICAgICAgICAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBpZGVudGlmaWVyKHBjWzJd
LnUub3BlcmFuZCk7CisKICAgICAgICAgICAgIFJlc29sdmVPcCBvcCA9IEpTU2NvcGU6OmFic3Ry
YWN0UmVzb2x2ZShtX2dsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLCBuZWVkc0FjdGl2YXRpb24o
KSwgc2NvcGUsIGlkZW50LCBQdXQsIG1vZGVBbmRUeXBlLnR5cGUoKSk7CiAKICAgICAgICAgICAg
IGluc3RydWN0aW9uc1tpICsgNF0udS5vcGVyYW5kID0gUmVzb2x2ZU1vZGVBbmRUeXBlKG1vZGVB
bmRUeXBlLm1vZGUoKSwgb3AudHlwZSkub3BlcmFuZCgpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuY3BwCShyZXZpc2lvbiAxODA3
MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yOSwxMCArMjksMTEgQEAKICNpbmNsdWRlICJjb25maWcuaCIK
ICNpbmNsdWRlICJTcGVjdWxhdGVkVHlwZS5oIgogCi0jaW5jbHVkZSAiQXJndW1lbnRzLmgiCisj
aW5jbHVkZSAiRGlyZWN0QXJndW1lbnRzLmgiCiAjaW5jbHVkZSAiSlNBcnJheS5oIgogI2luY2x1
ZGUgIkpTRnVuY3Rpb24uaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiU2Nv
cGVkQXJndW1lbnRzLmgiCiAjaW5jbHVkZSAiU3RyaW5nT2JqZWN0LmgiCiAjaW5jbHVkZSAiVmFs
dWVQcm9maWxlLmgiCiAjaW5jbHVkZSA8d3RmL0JvdW5kc0NoZWNrZWRQb2ludGVyLmg+CkBAIC0x
MjcsOCArMTI4LDEzIEBAIHZvaWQgZHVtcFNwZWN1bGF0aW9uKFByaW50U3RyZWFtJiBvdXQsIFMK
ICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBpc1RvcCA9IGZhbHNlOwogICAgIAot
ICAgICAgICAgICAgaWYgKHZhbHVlICYgU3BlY0FyZ3VtZW50cykKLSAgICAgICAgICAgICAgICBt
eU91dC5wcmludCgiQXJndW1lbnRzIik7CisgICAgICAgICAgICBpZiAodmFsdWUgJiBTcGVjRGly
ZWN0QXJndW1lbnRzKQorICAgICAgICAgICAgICAgIG15T3V0LnByaW50KCJEaXJlY3Rhcmd1bWVu
dHMiKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBpc1RvcCA9IGZhbHNlOwor
ICAgIAorICAgICAgICAgICAgaWYgKHZhbHVlICYgU3BlY1Njb3BlZEFyZ3VtZW50cykKKyAgICAg
ICAgICAgICAgICBteU91dC5wcmludCgiU2NvcGVkYXJndW1lbnRzIik7CiAgICAgICAgICAgICBl
bHNlCiAgICAgICAgICAgICAgICAgaXNUb3AgPSBmYWxzZTsKICAgICAKQEAgLTIzMiw4ICsyMzgs
MTAgQEAgc3RhdGljIGNvbnN0IGNoYXIqIHNwZWN1bGF0aW9uVG9BYmJyZXZpYQogICAgICAgICBy
ZXR1cm4gIjxGbG9hdDMyYXJyYXk+IjsKICAgICBpZiAoaXNGbG9hdDY0QXJyYXlTcGVjdWxhdGlv
bihwcmVkaWN0aW9uKSkKICAgICAgICAgcmV0dXJuICI8RmxvYXQ2NGFycmF5PiI7Ci0gICAgaWYg
KGlzQXJndW1lbnRzU3BlY3VsYXRpb24ocHJlZGljdGlvbikpCi0gICAgICAgIHJldHVybiAiPEFy
Z3VtZW50cz4iOworICAgIGlmIChpc0RpcmVjdEFyZ3VtZW50c1NwZWN1bGF0aW9uKHByZWRpY3Rp
b24pKQorICAgICAgICByZXR1cm4gIjxEaXJlY3RBcmd1bWVudHM+IjsKKyAgICBpZiAoaXNTY29w
ZWRBcmd1bWVudHNTcGVjdWxhdGlvbihwcmVkaWN0aW9uKSkKKyAgICAgICAgcmV0dXJuICI8U2Nv
cGVkQXJndW1lbnRzPiI7CiAgICAgaWYgKGlzU3RyaW5nT2JqZWN0U3BlY3VsYXRpb24ocHJlZGlj
dGlvbikpCiAgICAgICAgIHJldHVybiAiPFN0cmluZ09iamVjdD4iOwogICAgIGlmIChpc1N0cmlu
Z09yU3RyaW5nT2JqZWN0U3BlY3VsYXRpb24ocHJlZGljdGlvbikpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuaAkocmV2aXNpb24gMTgw
NzIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTUyLDggKzUyLDkgQEAgc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRU
eXBlIFNwZWNVaW50MzJBcgogc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNGbG9hdDMy
QXJyYXkgICAgICAgPSAweDAwMDAwNDAwOyAvLyBJdCdzIGRlZmluaXRlbHkgYW4gVWludDE2QXJy
YXkgb3Igb25lIG9mIGl0cyBzdWJjbGFzc2VzLgogc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBl
IFNwZWNGbG9hdDY0QXJyYXkgICAgICAgPSAweDAwMDAwODAwOyAvLyBJdCdzIGRlZmluaXRlbHkg
YW4gVWludDE2QXJyYXkgb3Igb25lIG9mIGl0cyBzdWJjbGFzc2VzLgogc3RhdGljIGNvbnN0IFNw
ZWN1bGF0ZWRUeXBlIFNwZWNUeXBlZEFycmF5VmlldyAgICAgPSBTcGVjSW50OEFycmF5IHwgU3Bl
Y0ludDE2QXJyYXkgfCBTcGVjSW50MzJBcnJheSB8IFNwZWNVaW50OEFycmF5IHwgU3BlY1VpbnQ4
Q2xhbXBlZEFycmF5IHwgU3BlY1VpbnQxNkFycmF5IHwgU3BlY1VpbnQzMkFycmF5IHwgU3BlY0Zs
b2F0MzJBcnJheSB8IFNwZWNGbG9hdDY0QXJyYXk7Ci1zdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5
cGUgU3BlY0FyZ3VtZW50cyAgICAgICAgICA9IDB4MDAwMDEwMDA7IC8vIEl0J3MgZGVmaW5pdGVs
eSBhbiBBcmd1bWVudHMgb2JqZWN0Lgotc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNT
dHJpbmdPYmplY3QgICAgICAgPSAweDAwMDAyMDAwOyAvLyBJdCdzIGRlZmluaXRlbHkgYSBTdHJp
bmdPYmplY3QuCitzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0RpcmVjdEFyZ3VtZW50
cyAgICA9IDB4MDAwMDEwMDA7IC8vIEl0J3MgZGVmaW5pdGVseSBhIERpcmVjdEFyZ3VtZW50cyBv
YmplY3QuCitzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY1Njb3BlZEFyZ3VtZW50cyAg
ICA9IDB4MDAwMDIwMDA7IC8vIEl0J3MgZGVmaW5pdGVseSBhIFNjb3BlZEFyZ3VtZW50cyBvYmpl
Y3QuCitzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY1N0cmluZ09iamVjdCAgICAgICA9
IDB4MDAwMDQwMDA7IC8vIEl0J3MgZGVmaW5pdGVseSBhIFN0cmluZ09iamVjdC4KIHN0YXRpYyBj
b25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjT2JqZWN0T3RoZXIgICAgICAgID0gMHgwMDAwODAwMDsg
Ly8gSXQncyBkZWZpbml0ZWx5IGFuIG9iamVjdCBidXQgbm90IEpTRmluYWxPYmplY3QsIEpTQXJy
YXksIG9yIEpTRnVuY3Rpb24uCiBzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY09iamVj
dCAgICAgICAgICAgICA9IDB4MDAwMGZmZmY7IC8vIEJpdG1hc2sgdXNlZCBmb3IgdGVzdGluZyBm
b3IgYW55IGtpbmQgb2Ygb2JqZWN0IHByZWRpY3Rpb24uCiBzdGF0aWMgY29uc3QgU3BlY3VsYXRl
ZFR5cGUgU3BlY1N0cmluZ0lkZW50ICAgICAgICA9IDB4MDAwMTAwMDA7IC8vIEl0J3MgZGVmaW5p
dGVseSBhIEpTU3RyaW5nLCBhbmQgaXQncyBhbiBpZGVudGlmaWVyLgpAQCAtMTkzLDkgKzE5NCwx
NCBAQCBpbmxpbmUgYm9vbCBpc0Zsb2F0NjRBcnJheVNwZWN1bGF0aW9uKFNwCiAgICAgcmV0dXJu
IHZhbHVlID09IFNwZWNGbG9hdDY0QXJyYXk7CiB9CiAKLWlubGluZSBib29sIGlzQXJndW1lbnRz
U3BlY3VsYXRpb24oU3BlY3VsYXRlZFR5cGUgdmFsdWUpCitpbmxpbmUgYm9vbCBpc0RpcmVjdEFy
Z3VtZW50c1NwZWN1bGF0aW9uKFNwZWN1bGF0ZWRUeXBlIHZhbHVlKQogewotICAgIHJldHVybiAh
IXZhbHVlICYmICh2YWx1ZSAmIFNwZWNBcmd1bWVudHMpID09IHZhbHVlOworICAgIHJldHVybiB2
YWx1ZSA9PSBTcGVjRGlyZWN0QXJndW1lbnRzOworfQorCitpbmxpbmUgYm9vbCBpc1Njb3BlZEFy
Z3VtZW50c1NwZWN1bGF0aW9uKFNwZWN1bGF0ZWRUeXBlIHZhbHVlKQoreworICAgIHJldHVybiB2
YWx1ZSA9PSBTcGVjU2NvcGVkQXJndW1lbnRzOwogfQogCiBpbmxpbmUgYm9vbCBpc0FjdGlvbmFi
bGVJbnRNdXRhYmxlQXJyYXlTcGVjdWxhdGlvbihTcGVjdWxhdGVkVHlwZSB2YWx1ZSkKQEAgLTIy
NCwxMyArMjMwLDE0IEBAIGlubGluZSBib29sIGlzQWN0aW9uYWJsZVR5cGVkTXV0YWJsZUFycmEK
IGlubGluZSBib29sIGlzQWN0aW9uYWJsZU11dGFibGVBcnJheVNwZWN1bGF0aW9uKFNwZWN1bGF0
ZWRUeXBlIHZhbHVlKQogewogICAgIHJldHVybiBpc0FycmF5U3BlY3VsYXRpb24odmFsdWUpCi0g
ICAgICAgIHx8IGlzQXJndW1lbnRzU3BlY3VsYXRpb24odmFsdWUpCiAgICAgICAgIHx8IGlzQWN0
aW9uYWJsZVR5cGVkTXV0YWJsZUFycmF5U3BlY3VsYXRpb24odmFsdWUpOwogfQogCiBpbmxpbmUg
Ym9vbCBpc0FjdGlvbmFibGVBcnJheVNwZWN1bGF0aW9uKFNwZWN1bGF0ZWRUeXBlIHZhbHVlKQog
ewogICAgIHJldHVybiBpc1N0cmluZ1NwZWN1bGF0aW9uKHZhbHVlKQorICAgICAgICB8fCBpc0Rp
cmVjdEFyZ3VtZW50c1NwZWN1bGF0aW9uKHZhbHVlKQorICAgICAgICB8fCBpc1Njb3BlZEFyZ3Vt
ZW50c1NwZWN1bGF0aW9uKHZhbHVlKQogICAgICAgICB8fCBpc0FjdGlvbmFibGVNdXRhYmxlQXJy
YXlTcGVjdWxhdGlvbih2YWx1ZSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCShyZXZpc2lv
biAxODA3MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2Rl
R2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE2LDM4ICsxMTYsMTMgQEAgUGFyc2Vy
RXJyb3IgQnl0ZWNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlKAogICAgIG1fY29kZUJsb2NrLT5zaHJp
bmtUb0ZpdCgpOwogCiAgICAgaWYgKG1fY29kZUJsb2NrLT5zeW1ib2xUYWJsZSgpICYmICFtX2Nv
ZGVCbG9jay0+dm0oKS0+dHlwZVByb2ZpbGVyKCkpCi0gICAgICAgIG1fY29kZUJsb2NrLT5zZXRT
eW1ib2xUYWJsZShtX2NvZGVCbG9jay0+c3ltYm9sVGFibGUoKS0+Y2xvbmVDYXB0dXJlZE5hbWVz
KCptX2NvZGVCbG9jay0+dm0oKSkpOworICAgICAgICBtX2NvZGVCbG9jay0+c2V0U3ltYm9sVGFi
bGUobV9jb2RlQmxvY2stPnN5bWJvbFRhYmxlKCktPmNsb25lSWdub3JpbmdTdGFjaygqbV9jb2Rl
QmxvY2stPnZtKCkpKTsKIAogICAgIGlmIChtX2V4cHJlc3Npb25Ub29EZWVwKQogICAgICAgICBy
ZXR1cm4gUGFyc2VyRXJyb3IoUGFyc2VyRXJyb3I6Ok91dE9mTWVtb3J5KTsKICAgICByZXR1cm4g
UGFyc2VyRXJyb3IoUGFyc2VyRXJyb3I6OkVycm9yTm9uZSk7CiB9CiAKLVJlZ2lzdGVySUQqIEJ5
dGVjb2RlR2VuZXJhdG9yOjphZGRWYXIoCi0gICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIENv
bnN0YW50TW9kZSBjb25zdGFudE1vZGUsIFdhdGNoTW9kZSB3YXRjaE1vZGUpCi17Ci0gICAgQVNT
RVJUKHN0YXRpY19jYXN0PHNpemVfdD4obV9jb2RlQmxvY2stPm1fbnVtVmFycykgPT0gbV9jYWxs
ZWVSZWdpc3RlcnMuc2l6ZSgpKTsKLSAgICAKLSAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tl
cihzeW1ib2xUYWJsZSgpLm1fbG9jayk7Ci0gICAgaW50IGluZGV4ID0gdmlydHVhbFJlZ2lzdGVy
Rm9yTG9jYWwobV9jYWxsZWVSZWdpc3RlcnMuc2l6ZSgpKS5vZmZzZXQoKTsKLSAgICBTeW1ib2xU
YWJsZUVudHJ5IG5ld0VudHJ5KGluZGV4LCBjb25zdGFudE1vZGUgPT0gSXNDb25zdGFudCA/IFJl
YWRPbmx5IDogMCk7Ci0gICAgU3ltYm9sVGFibGU6Ok1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IHN5
bWJvbFRhYmxlKCkuYWRkKGxvY2tlciwgaWRlbnQuaW1wbCgpLCBuZXdFbnRyeSk7Ci0KLSAgICBp
ZiAoIXJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICByZXR1cm4gJnJlZ2lzdGVyRm9yKHJlc3Vs
dC5pdGVyYXRvci0+dmFsdWUuZ2V0SW5kZXgoKSk7Ci0gICAgCi0gICAgaWYgKHdhdGNoTW9kZSA9
PSBJc1dhdGNoYWJsZSkgewotICAgICAgICB3aGlsZSAobV93YXRjaGFibGVWYXJpYWJsZXMuc2l6
ZSgpIDwgc3RhdGljX2Nhc3Q8c2l6ZV90PihtX2NvZGVCbG9jay0+bV9udW1WYXJzKSkKLSAgICAg
ICAgICAgIG1fd2F0Y2hhYmxlVmFyaWFibGVzLmFwcGVuZChJZGVudGlmaWVyKCkpOwotICAgICAg
ICBtX3dhdGNoYWJsZVZhcmlhYmxlcy5hcHBlbmQoaWRlbnQpOwotICAgIH0KLSAgICAKLSAgICBS
ZWdpc3RlcklEKiByZWdJRCA9IGFkZFZhcigpOwotICAgIEFTU0VSVCh3YXRjaE1vZGUgPT0gTm90
V2F0Y2hhYmxlIHx8IHN0YXRpY19jYXN0PHNpemVfdD4obV9jb2RlQmxvY2stPm1fbnVtVmFycykg
PT0gbV93YXRjaGFibGVWYXJpYWJsZXMuc2l6ZSgpKTsKLSAgICAKLSAgICByZXR1cm4gcmVnSUQ7
Ci19Ci0KIEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihWTSYgdm0sIFByb2dy
YW1Ob2RlKiBwcm9ncmFtTm9kZSwgVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IERlYnVnZ2VyTW9kZSBkZWJ1Z2dlck1vZGUsIFByb2ZpbGVyTW9kZSBwcm9maWxlck1vZGUpCiAg
ICAgOiBtX3Nob3VsZEVtaXREZWJ1Z0hvb2tzKE9wdGlvbnM6OmZvcmNlRGVidWdnZXJCeXRlY29k
ZUdlbmVyYXRpb24oKSB8fCBkZWJ1Z2dlck1vZGUgPT0gRGVidWdnZXJPbikKICAgICAsIG1fc2hv
dWxkRW1pdFByb2ZpbGVIb29rcyhPcHRpb25zOjpmb3JjZVByb2ZpbGVyQnl0ZWNvZGVHZW5lcmF0
aW9uKCkgfHwgcHJvZmlsZXJNb2RlID09IFByb2ZpbGVyT24pCkBAIC0xODksNyArMTY0LDcgQEAg
Qnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFZNJgogewogICAgIGlmIChtX2lz
QnVpbHRpbkZ1bmN0aW9uKQogICAgICAgICBtX3Nob3VsZEVtaXREZWJ1Z0hvb2tzID0gZmFsc2U7
Ci0KKyAgICAKICAgICBtX3N5bWJvbFRhYmxlLT5zZXRVc2VzTm9uU3RyaWN0RXZhbChjb2RlQmxv
Y2stPnVzZXNFdmFsKCkgJiYgIWNvZGVCbG9jay0+aXNTdHJpY3RNb2RlKCkpOwogICAgIFZlY3Rv
cjxJZGVudGlmaWVyPiBib3VuZFBhcmFtZXRlclByb3BlcnRpZXM7CiAgICAgRnVuY3Rpb25QYXJh
bWV0ZXJzJiBwYXJhbWV0ZXJzID0gKmZ1bmN0aW9uTm9kZS0+cGFyYW1ldGVycygpOwpAQCAtMjAy
LDYgKzE3NywxNCBAQCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoVk0mCiAg
ICAgfQogICAgIG1fc3ltYm9sVGFibGUtPnNldFBhcmFtZXRlckNvdW50SW5jbHVkaW5nVGhpcyhm
dW5jdGlvbk5vZGUtPnBhcmFtZXRlcnMoKS0+c2l6ZSgpICsgMSk7CiAKKyAgICBib29sIHNob3Vs
ZENhcHR1cmVBbGxUaGVUaGluZ3MgPSBtX3Nob3VsZEVtaXREZWJ1Z0hvb2tzIHx8IGNvZGVCbG9j
ay0+dXNlc0V2YWwoKTsKKyAgICBhdXRvIGNhcHR1cmVzID0gWyZdIChTdHJpbmdJbXBsKiB1aWQp
IC0+IGJvb2wgeworICAgICAgICByZXR1cm4gc2hvdWxkQ2FwdHVyZUFsbFRoZVRoaW5ncyB8fCBm
dW5jdGlvbk5vZGUtPmNhcHR1cmVzKHVpZCk7CisgICAgfTsKKyAgICBhdXRvIHZhcktpbmQgPSBb
Jl0gKFN0cmluZ0ltcGwqIHVpZCkgLT4gVmFyS2luZCB7CisgICAgICAgIHJldHVybiBjYXB0dXJl
cyh1aWQpID8gU2NvcGVWYXJLaW5kIDogU3RhY2tWYXJLaW5kOworICAgIH0KKwogICAgIGVtaXRP
cGNvZGUob3BfZW50ZXIpOwogCiAgICAgYWxsb2NhdGVBbmRFbWl0U2NvcGUoKTsKQEAgLTIyNiw4
MyArMjA5LDE0OSBAQCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoVk0mCiAg
ICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChtX2xleGljYWxFbnZpcm9ubWVudFJlZ2lzdGVy
LT5pbmRleCgpKTsKICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHNjb3BlUmVnaXN0ZXIo
KS0+aW5kZXgoKSk7CiAgICAgfQotICAgIFJlZ2lzdGVySUQqIGxvY2FsQXJndW1lbnRzUmVnaXN0
ZXIgPSBudWxscHRyOwotICAgIFJlZ2lzdGVySUQqIHNjcmF0Y2ggPSBhZGRWYXIoKTsKLSAgICBt
X3N5bWJvbFRhYmxlLT5zZXRDYXB0dXJlU3RhcnQodmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwobV9j
b2RlQmxvY2stPm1fbnVtVmFycykub2Zmc2V0KCkpOwotCi0gICAgaWYgKGZ1bmN0aW9uTm9kZS0+
dXNlc0FyZ3VtZW50cygpIHx8IGNvZGVCbG9jay0+dXNlc0V2YWwoKSkgeyAvLyBNYXkgcmVpZnkg
YXJndW1lbnRzIG9iamVjdC4KLSAgICAgICAgUmVnaXN0ZXJJRCogdW5tb2RpZmllZEFyZ3VtZW50
c1JlZ2lzdGVyID0gYWRkVmFyKCk7IC8vIEFub255bW91cywgc28gaXQgY2FuJ3QgYmUgbW9kaWZp
ZWQgYnkgdXNlciBjb2RlLgotICAgICAgICBSZWdpc3RlcklEKiBhcmd1bWVudHNSZWdpc3RlciA9
IGFkZFZhcihwcm9wZXJ0eU5hbWVzKCkuYXJndW1lbnRzLCBJc1ZhcmlhYmxlLCBOb3RXYXRjaGFi
bGUpOyAvLyBDYW4gYmUgY2hhbmdlZCBieSBhc3NpZ25pbmcgdG8gJ2FyZ3VtZW50cycuCi0KLSAg
ICAgICAgbG9jYWxBcmd1bWVudHNSZWdpc3RlciA9IGFyZ3VtZW50c1JlZ2lzdGVyOwotCi0gICAg
ICAgIC8vIFdlIGNhbiBzYXZlIGEgbGl0dGxlIHNwYWNlIGJ5IGhhcmQtY29kaW5nIHRoZSBrbm93
bGVkZ2UgdGhhdCB0aGUgdHdvCi0gICAgICAgIC8vICdhcmd1bWVudHMnIHZhbHVlcyBhcmUgc3Rv
cmVkIGluIGNvbnNlY3V0aXZlIHJlZ2lzdGVycywgYW5kIHN0b3JpbmcKLSAgICAgICAgLy8gb25s
eSB0aGUgaW5kZXggb2YgdGhlIGFzc2lnbmFibGUgb25lLgotICAgICAgICBjb2RlQmxvY2stPnNl
dEFyZ3VtZW50c1JlZ2lzdGVyKGFyZ3VtZW50c1JlZ2lzdGVyLT52aXJ0dWFsUmVnaXN0ZXIoKSk7
Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQodW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVyLCB1bm1v
ZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXItPnZpcnR1YWxSZWdpc3RlcigpID09IEpTQzo6dW5tb2Rp
ZmllZEFyZ3VtZW50c1JlZ2lzdGVyKGNvZGVCbG9jay0+YXJndW1lbnRzUmVnaXN0ZXIoKSkpOwot
Ci0gICAgICAgIGVtaXRJbml0TGF6eVJlZ2lzdGVyKGFyZ3VtZW50c1JlZ2lzdGVyKTsKLSAgICAg
ICAgZW1pdEluaXRMYXp5UmVnaXN0ZXIodW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVyKTsKLSAg
ICAgICAgCi0gICAgICAgIGlmIChzaG91bGRDcmVhdGVBcmd1bWVudHNFYWdlcmx5KCkgfHwgc2hv
dWxkVGVhck9mZkFyZ3VtZW50c0VhZ2VybHkoKSkgewotICAgICAgICAgICAgZW1pdE9wY29kZShv
cF9jcmVhdGVfYXJndW1lbnRzKTsKLSAgICAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChh
cmd1bWVudHNSZWdpc3Rlci0+aW5kZXgoKSk7Ci0gICAgICAgICAgICBpbnN0cnVjdGlvbnMoKS5h
cHBlbmQobV9jb2RlQmxvY2stPmFjdGl2YXRpb25SZWdpc3RlcigpLm9mZnNldCgpKTsKLQotICAg
ICAgICAgICAgaWYgKG1fY29kZUJsb2NrLT5oYXNBY3RpdmF0aW9uUmVnaXN0ZXIoKSkgewotICAg
ICAgICAgICAgICAgIFJlZ2lzdGVySUQqIGFyZ3VtZW50c1JlZ2lzdGVyID0gJnJlZ2lzdGVyRm9y
KG1fY29kZUJsb2NrLT5hcmd1bWVudHNSZWdpc3RlcigpLm9mZnNldCgpKTsKLSAgICAgICAgICAg
ICAgICBpbml0aWFsaXplQ2FwdHVyZWRWYXJpYWJsZShhcmd1bWVudHNSZWdpc3RlciwgcHJvcGVy
dHlOYW1lcygpLmFyZ3VtZW50cywgYXJndW1lbnRzUmVnaXN0ZXIpOwotICAgICAgICAgICAgICAg
IFJlZ2lzdGVySUQqIHVuY2hlY2tlZEFyZ3VtZW50c1JlZ2lzdGVyID0gJnJlZ2lzdGVyRm9yKEpT
Qzo6dW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVyKG1fY29kZUJsb2NrLT5hcmd1bWVudHNSZWdp
c3RlcigpKS5vZmZzZXQoKSk7Ci0gICAgICAgICAgICAgICAgaW5pdGlhbGl6ZUNhcHR1cmVkVmFy
aWFibGUodW5jaGVja2VkQXJndW1lbnRzUmVnaXN0ZXIsIHByb3BlcnR5TmFtZXMoKS5hcmd1bWVu
dHMsIHVuY2hlY2tlZEFyZ3VtZW50c1JlZ2lzdGVyKTsKLSAgICAgICAgICAgICAgICBpZiAoZnVu
Y3Rpb25Ob2RlLT5tb2RpZmllc0FyZ3VtZW50cygpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGVt
aXRPcGNvZGUob3BfbW92KTsKLSAgICAgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBw
ZW5kKGFyZ3VtZW50c1JlZ2lzdGVyLT5pbmRleCgpKTsKLSAgICAgICAgICAgICAgICAgICAgaW5z
dHJ1Y3Rpb25zKCkuYXBwZW5kKGFkZENvbnN0YW50VmFsdWUoanNVbmRlZmluZWQoKSktPmluZGV4
KCkpOwotICAgICAgICAgICAgICAgICAgICBlbWl0T3Bjb2RlKG9wX21vdik7Ci0gICAgICAgICAg
ICAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCh1bmNoZWNrZWRBcmd1bWVudHNSZWdpc3Rl
ci0+aW5kZXgoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChh
ZGRDb25zdGFudFZhbHVlKGpzVW5kZWZpbmVkKCkpLT5pbmRleCgpKTsKLSAgICAgICAgICAgICAg
ICAgICAgbG9jYWxBcmd1bWVudHNSZWdpc3RlciA9IG51bGxwdHI7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfQotICAgICAgICB9CisgICAgCisgICAgLy8gTWFrZSBzdXJlIHRoZSBj
b2RlIGJsb2NrIGtub3dzIGFib3V0IGFsbCBvZiBvdXIgcGFyYW1ldGVycywgYW5kIG1ha2Ugc3Vy
ZSB0aGF0IHBhcmFtZXRlcnMKKyAgICAvLyBuZWVkaW5nIGRlY29uc3RydWN0aW9uIGFyZSBub3Rl
ZC4KKyAgICBpbml0aWFsaXplTmV4dFBhcmFtZXRlcigpOyAvLyB0aGlzCisgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHBhcmFtZXRlcnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgYXV0byBw
YXR0ZXJuID0gcGFyYW1ldGVycy5hdChpKTsKKyAgICAgICAgUmVnaXN0ZXJJRCogcmVnID0gaW5p
dGlhbGl6ZU5leHRQYXJhbWV0ZXIoKTsKKyAgICAgICAgaWYgKCFwYXR0ZXJuLT5pc0JpbmRpbmdO
b2RlKCkpCisgICAgICAgICAgICBtX2RlY29uc3RydWN0ZWRQYXJhbWV0ZXJzLmFwcGVuZChzdGQ6
Om1ha2VfcGFpcihyZWcsIHBhdHRlcm4pKTsKICAgICB9Ci0KLSAgICBib29sIHNob3VsZENhcHR1
cmVBbGxUaGVUaGluZ3MgPSBtX3Nob3VsZEVtaXREZWJ1Z0hvb2tzIHx8IGNvZGVCbG9jay0+dXNl
c0V2YWwoKTsKLQorICAgIAorICAgIC8vIEZpZ3VyZSBvdXQgc29tZSBpbnRlcmVzdGluZyBmYWN0
cyBhYm91dCBvdXIgYXJndW1lbnRzLgogICAgIGJvb2wgY2FwdHVyZXNBbnlBcmd1bWVudEJ5TmFt
ZSA9IGZhbHNlOwotICAgIFZlY3RvcjxSZWdpc3RlcklEKiwgMCwgVW5zYWZlVmVjdG9yT3ZlcmZs
b3c+IGNhcHR1cmVkQXJndW1lbnRzOwotICAgIGlmIChmdW5jdGlvbk5vZGUtPmhhc0NhcHR1cmVk
VmFyaWFibGVzKCkgfHwgc2hvdWxkQ2FwdHVyZUFsbFRoZVRoaW5ncykgeworICAgIGlmIChmdW5j
dGlvbk5vZGUtPmhhc0NhcHR1cmVkVmFyaWFibGVzKCkpIHsKICAgICAgICAgRnVuY3Rpb25QYXJh
bWV0ZXJzJiBwYXJhbWV0ZXJzID0gKmZ1bmN0aW9uTm9kZS0+cGFyYW1ldGVycygpOwotICAgICAg
ICBjYXB0dXJlZEFyZ3VtZW50cy5yZXNpemUocGFyYW1ldGVycy5zaXplKCkpOwogICAgICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IHBhcmFtZXRlcnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAg
ICAgIGNhcHR1cmVkQXJndW1lbnRzW2ldID0gMDsKICAgICAgICAgICAgIGF1dG8gcGF0dGVybiA9
IHBhcmFtZXRlcnMuYXQoaSk7CiAgICAgICAgICAgICBpZiAoIXBhdHRlcm4tPmlzQmluZGluZ05v
ZGUoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIGNvbnN0IElkZW50
aWZpZXImIGlkZW50ID0gc3RhdGljX2Nhc3Q8Y29uc3QgQmluZGluZ05vZGUqPihwYXR0ZXJuKS0+
Ym91bmRQcm9wZXJ0eSgpOwotICAgICAgICAgICAgaWYgKCFmdW5jdGlvbk5vZGUtPmNhcHR1cmVz
KGlkZW50KSAmJiAhc2hvdWxkQ2FwdHVyZUFsbFRoZVRoaW5ncykKLSAgICAgICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgICAgIGNhcHR1cmVzQW55QXJndW1lbnRCeU5hbWUgPSB0cnVlOwot
ICAgICAgICAgICAgY2FwdHVyZWRBcmd1bWVudHNbaV0gPSBhZGRWYXIoaWRlbnQsIElzVmFyaWFi
bGUsIElzV2F0Y2hhYmxlKTsKKyAgICAgICAgICAgIGNhcHR1cmVzQW55QXJndW1lbnRCeU5hbWUg
fD0gY2FwdHVyZXMoaWRlbnQuaW1wbCgpKTsKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChj
YXB0dXJlc0FueUFyZ3VtZW50QnlOYW1lICYmICFzaG91bGRUZWFyT2ZmQXJndW1lbnRzRWFnZXJs
eSgpKSB7Ci0gICAgICAgIHNpemVfdCBwYXJhbWV0ZXJDb3VudCA9IG1fc3ltYm9sVGFibGUtPnBh
cmFtZXRlckNvdW50KCk7Ci0gICAgICAgIGF1dG8gc2xvd0FyZ3VtZW50cyA9IHN0ZDo6bWFrZV91
bmlxdWU8U2xvd0FyZ3VtZW50W10+KHBhcmFtZXRlckNvdW50KTsKLSAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBwYXJhbWV0ZXJDb3VudDsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoIWNh
cHR1cmVkQXJndW1lbnRzW2ldKSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKHNsb3dBcmd1bWVu
dHNbaV0uc3RhdHVzID09IFNsb3dBcmd1bWVudDo6Tm9ybWFsKTsKLSAgICAgICAgICAgICAgICBz
bG93QXJndW1lbnRzW2ldLmluZGV4ID0gQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNldChpKTsKKyAg
ICBpZiAoY2FwdHVyZXNBbnlBcmd1bWVudEJ5TmFtZSkKKyAgICAgICAgQVNTRVJUKG1fbGV4aWNh
bEVudmlyb25tZW50UmVnaXN0ZXIpOworICAgIAorICAgIC8vIE5lZWQgdG8ga25vdyB3aGF0IG91
ciBmdW5jdGlvbnMgYXJlIGNhbGxlZC4gUGFyYW1ldGVycyBoYXZlIHNvbWUgZ29vZnkgYmVoYXZp
b3JzIHdoZW4gaXQKKyAgICAvLyBjb21lcyB0byBmdW5jdGlvbnMgb2YgdGhlIHNhbWUgbmFtZS4K
KyAgICBmb3IgKEZ1bmN0aW9uQm9keU5vZGUqIGZ1bmN0aW9uIDogZnVuY3Rpb25Ob2RlLT5mdW5j
dGlvblN0YWNrKCkpCisgICAgICAgIG1fZnVuY3Rpb25zLmFkZChmdW5jdGlvbi0+aWRlbnQoKS5p
bXBsKCkpOworICAgIAorICAgIGJvb2wgbmVlZHNBcmd1bWVudHMgPSBmdW5jdGlvbk5vZGUtPnVz
ZXNBcmd1bWVudHMoKSB8fCBjb2RlQmxvY2stPnVzZXNFdmFsKCk7CisgICAgCisgICAgaWYgKG5l
ZWRzQXJndW1lbnRzKSB7CisgICAgICAgIC8vIENyZWF0ZSB0aGUgYXJndW1lbnRzIG9iamVjdCBu
b3cuIFdlIG1heSBwdXQgdGhlIGFyZ3VtZW50cyBvYmplY3QgaW50byB0aGUgYWN0aXZhdGlvbiBp
ZgorICAgICAgICAvLyBpdCBpcyBjYXB0dXJlZC4gRWl0aGVyIHdheSwgd2UgY3JlYXRlIHR3byBh
cmd1bWVudHMgb2JqZWN0IHZhcmlhYmxlczogb25lIGlzIG91cgorICAgICAgICAvLyBwcml2YXRl
IHZhcmlhYmxlIHRoYXQgaXMgaW1tdXRhYmxlLCBhbmQgYW5vdGhlciB0aGF0IGlzIHRoZSB1c2Vy
LXZpc2libGUgdmFyaWFibGUuIFRoZQorICAgICAgICAvLyBpbW11dGFibGUgb25lIGlzIG9ubHkg
dXNlZCBoZXJlLCBvciBkdXJpbmcgZm9ybWFsIHBhcmFtZXRlciByZXNvbHV0aW9ucyBpZiB3ZSBv
cHQgZm9yCisgICAgICAgIC8vIERpcmVjdEFyZ3VtZW50cy4KKyAgICAgICAgCisgICAgICAgIG1f
YXJndW1lbnRzUmVnaXN0ZXIgPSBhZGRWYXIoKTsKKyAgICAgICAgbV9hcmd1bWVudHNSZWdpc3Rl
ci0+cmVmKCk7CisgICAgfQorICAgIAorICAgIGlmIChuZWVkc0FyZ3VtZW50cyAmJiAhY29kZUJs
b2NrLT5pc1N0cmljdE1vZGUoKSkgeworICAgICAgICAvLyBJZiB3ZSBjYXB0dXJlZCBhbnkgZm9y
bWFsIHBhcmFtZXRlciBieSBuYW1lLCB0aGVuIHdlIHVzZSBTY29wZWRBcmd1bWVudHMuIE90aGVy
d2lzZSB3ZQorICAgICAgICAvLyB1c2UgRGlyZWN0QXJndW1lbnRzLiBXaXRoIFNjb3BlZEFyZ3Vt
ZW50cywgd2UgbGlmdCBhbGwgb2Ygb3VyIGFyZ3VtZW50cyBpbnRvIHRoZQorICAgICAgICAvLyBh
Y3RpdmF0aW9uLgorICAgICAgICAKKyAgICAgICAgaWYgKGNhcHR1cmVzQW55QXJndW1lbnRCeU5h
bWUpIHsKKyAgICAgICAgICAgIG1fc3ltYm9sVGFibGUtPnNldEFyZ3VtZW50c0xlbmd0aCh2bSwg
cGFyYW1ldGVycy5zaXplKCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBGb3IgZWFj
aCBwYXJhbWV0ZXIsIHdlIGhhdmUgdHdvIHBvc3NpYmlsaXRpZXM6CisgICAgICAgICAgICAvLyBF
aXRoZXIgaXQncyBhIGJpbmRpbmcgbm9kZSB3aXRoIG5vIGZ1bmN0aW9uIG92ZXJsYXAsIGluIHdo
aWNoIGNhc2UgaXQgZ2V0cyBhIG5hbWUKKyAgICAgICAgICAgIC8vIGluIHRoZSBzeW1ib2wgdGFi
bGUgLSBvciBpdCBqdXN0IGdldHMgc3BhY2UgcmVzZXJ2ZWQgaW4gdGhlIHN5bWJvbCB0YWJsZS4g
RWl0aGVyCisgICAgICAgICAgICAvLyB3YXkgd2UgbGlmdCB0aGUgdmFsdWUgaW50byB0aGUgc2Nv
cGUuCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcGFyYW1ldGVycy5zaXpl
KCk7ICsraSkgeworICAgICAgICAgICAgICAgIFNjb3BlT2Zmc2V0IG9mZnNldCA9IG1fc3ltYm9s
VGFibGUtPnRha2VOZXh0U2NvcGVPZmZzZXQoKTsKKyAgICAgICAgICAgICAgICBpZiAoU3RyaW5n
SW1wbCogbmFtZSA9IHZpc2libGVOYW1lRm9yUGFyYW1ldGVyKHBhcmFtZXRlcnMuYXQoaSkpKSB7
CisgICAgICAgICAgICAgICAgICAgIFN5bWJvbFRhYmxlRW50cnkgZW50cnkob2Zmc2V0KTsKKyAg
ICAgICAgICAgICAgICAgICAgLy8gU3RvcmVzIHRvIHRoZXNlIHZhcmlhYmxlcyB2aWEgdGhlIFNj
b3BlZEFyZ3VtZW50cyBvYmplY3Qgd2lsbCBub3QgZG8KKyAgICAgICAgICAgICAgICAgICAgLy8g
bm90aWZ5V3JpdGUoKSwgc2luY2UgdGhhdCB3b3VsZCBiZSBjdW1iZXJzb21lLiBBbHNvLCB3YXRj
aGluZyBmb3JtYWwKKyAgICAgICAgICAgICAgICAgICAgLy8gcGFyYW1ldGVycyB3aGVuICJhcmd1
bWVudHMiIGlzIGluIHBsYXkgaXMgdW5saWtlbHkgdG8gYmUgc3VwZXIgcHJvZml0YWJsZS4KKyAg
ICAgICAgICAgICAgICAgICAgLy8gU28sIHdlIGp1c3QgZGlzYWJsZSBpdC4KKyAgICAgICAgICAg
ICAgICAgICAgZW50cnkuZGlzYWJsZVdhdGNoaW5nKCk7CisgICAgICAgICAgICAgICAgICAgIG1f
c3ltYm9sVGFibGUtPnNldChuYW1lLCBvZmZzZXQpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBhZGRPcGNvZGUob3BfcHV0X3RvX3Njb3BlKTsKKyAgICAgICAgICAgICAgICBp
bnN0cnVjdGlvbnMoKS5hcHBlbmQobV9sZXhpY2FsRW52aXJvbm1lbnRSZWdpc3Rlci0+aW5kZXgo
KSk7CisgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKFVJTlRfTUFYKTsKKyAg
ICAgICAgICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoJnJlZ2lzdGVyRm9yKHZpcnR1YWxS
ZWdpc3RlckZvckFyZ3VtZW50KDEgKyBpKSkpOworICAgICAgICAgICAgICAgIGluc3RydWN0aW9u
cygpLmFwcGVuZChSZXNvbHZlTW9kZUFuZFR5cGUoVGhyb3dJZk5vdEZvdW5kLCBMb2NhbENsb3N1
cmVWYXIpKTsKKyAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoMCk7CisgICAg
ICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKG9mZnNldC5vZmZzZXQoKSk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFRoaXMgY3JlYXRlcyBhIHNj
b3BlZCBhcmd1bWVudHMgb2JqZWN0IGFuZCBjb3BpZXMgdGhlIG92ZXJmbG93IGFyZ3VtZW50cyBp
bnRvIHRoZQorICAgICAgICAgICAgLy8gc2NvcGUuIEl0J3MgdGhlIGVxdWl2YWxlbnQgb2YgY2Fs
bGluZyBTY29wZWRBcmd1bWVudHM6OmNyZWF0ZUJ5Q29weWluZygpLgorICAgICAgICAgICAgZW1p
dE9wY29kZShvcF9jcmVhdGVfc2NvcGVkX2FyZ3VtZW50cyk7CisgICAgICAgICAgICBpbnN0cnVj
dGlvbnMoKS5hcHBlbmQobV9hcmd1bWVudHNSZWdpc3Rlci0+aW5kZXgoKSk7CisgICAgICAgICAg
ICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQobV9sZXhpY2FsRW52aXJvbm1lbnRSZWdpc3Rlci0+aW5k
ZXgoKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBXZSdyZSBnb2luZyB0byBw
dXQgYWxsIHBhcmFtZXRlcnMgaW50byB0aGUgRGlyZWN0QXJndW1lbnRzIG9iamVjdC4gRmlyc3Qg
ZW5zdXJlCisgICAgICAgICAgICAvLyB0aGF0IHRoZSBzeW1ib2wgdGFibGUga25vd3MgdGhhdCB0
aGlzIGlzIGhhcHBlbmluZy4KKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBw
YXJhbWV0ZXJzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgaWYgKFN0cmluZ0ltcGwq
IG5hbWUgPSB2aXNpYmxlTmFtZUZvclBhcmFtZXRlcihwYXJhbWV0ZXJzLmF0KGkpKSkKKyAgICAg
ICAgICAgICAgICAgICAgbV9zeW1ib2xUYWJsZS0+c2V0KG5hbWUsIENhcHR1cmVkQXJndW1lbnRz
T2Zmc2V0KGkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgZW1p
dE9wY29kZShvcF9jcmVhdGVfZGlyZWN0X2FyZ3VtZW50cyk7CisgICAgICAgICAgICBpbnN0cnVj
dGlvbnMoKS5hcHBlbmQobV9hcmd1bWVudHNSZWdpc3Rlci0+aW5kZXgoKSk7CisgICAgICAgIH0K
KyAgICB9IGVsc2UgeworICAgICAgICAvLyBDcmVhdGUgdGhlIGZvcm1hbCBwYXJhbWV0ZXJzIHRo
ZSBub3JtYWwgd2F5LiBBbnkgb2YgdGhlbSBjb3VsZCBiZSBjYXB0dXJlZCwgb3Igbm90LiBJZgor
ICAgICAgICAvLyBjYXB0dXJlZCwgbGlmdCB0aGVtIGludG8gdGhlIHNjb3BlLgorICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcGFyYW1ldGVycy5zaXplKCk7ICsraSkgeworICAgICAg
ICAgICAgU3RyaW5nSW1wbCogbmFtZSA9IHZpc2libGVOYW1lRm9yUGFyYW1ldGVyKHBhcmFtZXRl
cnMuYXQoaSkpOworICAgICAgICAgICAgaWYgKCFuYW1lKQorICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoIWNhcHR1cmVzKG5hbWUpKSB7Cisg
ICAgICAgICAgICAgICAgLy8gVGhpcyBpcyB0aGUgZWFzeSBjYXNlIC0ganVzdCB0ZWxsIHRoZSBz
eW1ib2wgdGFibGUgYWJvdXQgdGhlIGFyZ3VtZW50LiBJdCB3aWxsCisgICAgICAgICAgICAgICAg
Ly8gYmUgYWNjZXNzZWQgZGlyZWN0bHkuCisgICAgICAgICAgICAgICAgbV9zeW1ib2xUYWJsZS0+
c2V0KG5hbWUsIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDEgKyBpKSk7CiAgICAgICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBzbG93QXJndW1lbnRz
W2ldLnN0YXR1cyA9IFNsb3dBcmd1bWVudDo6Q2FwdHVyZWQ7Ci0gICAgICAgICAgICBzbG93QXJn
dW1lbnRzW2ldLmluZGV4ID0gY2FwdHVyZWRBcmd1bWVudHNbaV0tPmluZGV4KCk7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIFNjb3BlT2Zmc2V0IG9mZnNldCA9IG1fc3ltYm9sVGFibGUtPnRh
a2VOZXh0U2NvcGVPZmZzZXQoKTsKKyAgICAgICAgICAgIElkZW50aWZpZXImIGlkZW50ID0KKyAg
ICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxjb25zdCBCaW5kaW5nTm9kZSo+KHBhcmFtZXRlcnMu
YXQoaSkpLT5ib3VuZFByb3BlcnR5KCk7CisgICAgICAgICAgICBtX3N5bWJvbFRhYmxlLT5zZXQo
bmFtZSwgb2Zmc2V0KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgYWRkT3Bjb2RlKG9wX3B1
dF90b19zY29wZSk7CisgICAgICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQobV9sZXhpY2Fs
RW52aXJvbm1lbnRSZWdpc3Rlci0+aW5kZXgoKSk7CisgICAgICAgICAgICBpbnN0cnVjdGlvbnMo
KS5hcHBlbmQoYWRkQ29uc3RhbnQoaWRlbnQpKTsKKyAgICAgICAgICAgIGluc3RydWN0aW9ucygp
LmFwcGVuZCgmcmVnaXN0ZXJGb3IodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMSArIGkpKSk7
CisgICAgICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoUmVzb2x2ZU1vZGVBbmRUeXBlKFRo
cm93SWZOb3RGb3VuZCwgTG9jYWxDbG9zdXJlVmFyKSk7CisgICAgICAgICAgICBpbnN0cnVjdGlv
bnMoKS5hcHBlbmQoMCk7CisgICAgICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQob2Zmc2V0
Lm9mZnNldCgpKTsKICAgICAgICAgfQotICAgICAgICBtX3N5bWJvbFRhYmxlLT5zZXRTbG93QXJn
dW1lbnRzKFdURjo6bW92ZShzbG93QXJndW1lbnRzKSk7CiAgICAgfQotCisgICAgCisgICAgaWYg
KG5lZWRzQXJndW1lbnRzICYmIGNvZGVCbG9jay0+aXNTdHJpY3RNb2RlKCkpIHsKKyAgICAgICAg
Ly8gQWxsb2NhdGUgYW4gb3V0LW9mLWJhbmRzIGFyZ3VtZW50cyBvYmplY3QuCisgICAgICAgIGFk
ZE9wY29kZShvcF9jcmVhdGVfb3V0X29mX2JhbmRfYXJndW1lbnRzKTsKKyAgICAgICAgaW5zdHJ1
Y3Rpb25zKCkuYXBwZW5kKG1fYXJndWVudHNSZWdpc3Rlci0+aW5kZXgoKSk7CisgICAgfQorICAg
IAorICAgIC8vIE5vdyBkZWNsYXJlIGFsbCB2YXJpYWJsZXMuCisgICAgZm9yIChjb25zdCBJZGVu
dGlmaWVyJiBpZGVudCA6IGJvdW5kUGFyYW1ldGVyUHJvcGVydGllcykKKyAgICAgICAgY3JlYXRl
VmFyaWFibGUoaWRlbnQsIHZhcktpbmQoaWRlbnQuaW1wbCgpKSwgSXNWYXJpYWJsZSk7CisgICAg
Zm9yIChGdW5jdGlvbkJvZHlOb2RlKiBmdW5jdGlvbiA6IGZ1bmN0aW5Ob2RlLT5mdW5jdGlvblN0
YWNrKCkpIHsKKyAgICAgICAgVmFyaWFibGUgdmFyaWFibGUgPSBjcmVhdGVWYXJpYWJsZShkZW50
LCB2YXJLaW5kKGlkZW50LmltcGwoKSksIElzVmFyaWFibGUpLnZhcmlhYmxlOworICAgICAgICBl
bWl0TmV3RnVuY3Rpb24oc2NyYXRjaCwgZnVuY3Rpb24pOworICAgICAgICBpbml0aWFsaXplVmFy
aWFibGUodmFyaWFibGUsIHNjcmF0Y2gpOworICAgIH0KKyAgICBmb3IgKGF1dG8mIGVudHJ5IDog
ZnVuY3Rpb25Ob2RlLT52YXJTdGFjaygpKSB7CisgICAgICAgIGNyZWF0ZVZhcmlhYmxlKAorICAg
ICAgICAgICAgZW50cnkuZmlyc3QsIHZhcktpbmQoZW50cnkuZmlyc3QuaW1wbCgpKSwKKyAgICAg
ICAgICAgIChlbnRyeS5zZWNvbmQgJiBEZWNsYXJhdGlvblN0YWNrczo6SXNDb25zdGFudCkgPyBJ
c0NvbnN0YW50IDogSXNWYXJpYWJsZSk7CisgICAgfQorICAgIAogICAgIFJlZ2lzdGVySUQqIGNh
bGxlZVJlZ2lzdGVyID0gcmVzb2x2ZUNhbGxlZShmdW5jdGlvbk5vZGUpOyAvLyBNYXkgcHVzaCB0
byB0aGUgc2NvcGUgY2hhaW4gYW5kL29yIGFkZCBhIGNhcHR1cmVkIHZhci4KIAogICAgIGNvbnN0
IERlY2xhcmF0aW9uU3RhY2tzOjpGdW5jdGlvblN0YWNrJiBmdW5jdGlvblN0YWNrID0gZnVuY3Rp
b25Ob2RlLT5mdW5jdGlvblN0YWNrKCk7CkBAIC00NDgsMzEgKzQ5Nyw2IEBAIEJ5dGVjb2RlR2Vu
ZXJhdG9yOjp+Qnl0ZWNvZGVHZW5lcmF0b3IoKQogewogfQogCi1SZWdpc3RlcklEKiBCeXRlY29k
ZUdlbmVyYXRvcjo6ZW1pdEluaXRMYXp5UmVnaXN0ZXIoUmVnaXN0ZXJJRCogcmVnKQotewotICAg
IGVtaXRPcGNvZGUob3BfaW5pdF9sYXp5X3JlZyk7Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5k
KHJlZy0+aW5kZXgoKSk7Ci0gICAgQVNTRVJUKCFoYXNXYXRjaGFibGVWYXJpYWJsZShyZWctPmlu
ZGV4KCkpKTsKLSAgICByZXR1cm4gcmVnOwotfQotCi1SZWdpc3RlcklEKiBCeXRlY29kZUdlbmVy
YXRvcjo6aW5pdGlhbGl6ZUNhcHR1cmVkVmFyaWFibGUoUmVnaXN0ZXJJRCogZHN0LCBjb25zdCBJ
ZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFJlZ2lzdGVySUQqIHZhbHVlKQotewotCi0gICAgbV9j
b2RlQmxvY2stPmFkZFByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb24oaW5zdHJ1Y3Rpb25zKCkuc2l6
ZSgpKTsKLSAgICBlbWl0T3Bjb2RlKG9wX3B1dF90b19zY29wZSk7Ci0gICAgaW5zdHJ1Y3Rpb25z
KCkuYXBwZW5kKG1fbGV4aWNhbEVudmlyb25tZW50UmVnaXN0ZXItPmluZGV4KCkpOwotICAgIGlu
c3RydWN0aW9ucygpLmFwcGVuZChhZGRDb25zdGFudChwcm9wZXJ0eU5hbWUpKTsKLSAgICBpbnN0
cnVjdGlvbnMoKS5hcHBlbmQodmFsdWUtPmluZGV4KCkpOwotICAgIGluc3RydWN0aW9ucygpLmFw
cGVuZChSZXNvbHZlTW9kZUFuZFR5cGUoVGhyb3dJZk5vdEZvdW5kLCBMb2NhbENsb3N1cmVWYXIp
Lm9wZXJhbmQoKSk7Ci0gICAgaW50IG9wZXJhbmQgPSByZWdpc3RlckZvcihkc3QtPmluZGV4KCkp
LmluZGV4KCk7Ci0gICAgYm9vbCBpc1dhdGNoYWJsZVZhcmlhYmxlID0gaGFzV2F0Y2hhYmxlVmFy
aWFibGUob3BlcmFuZCk7Ci0gICAgQVNTRVJUKCFpc1dhdGNoYWJsZVZhcmlhYmxlIHx8IHdhdGNo
YWJsZVZhcmlhYmxlSWRlbnRpZmllcihvcGVyYW5kKSA9PSBwcm9wZXJ0eU5hbWUpOwotICAgIGlu
c3RydWN0aW9ucygpLmFwcGVuZChpc1dhdGNoYWJsZVZhcmlhYmxlKTsKLSAgICBpbnN0cnVjdGlv
bnMoKS5hcHBlbmQoZHN0LT5pbmRleCgpKTsKLSAgICByZXR1cm4gZHN0OwotfQotCiBSZWdpc3Rl
cklEKiBCeXRlY29kZUdlbmVyYXRvcjo6cmVzb2x2ZUNhbGxlZShGdW5jdGlvbk5vZGUqIGZ1bmN0
aW9uTm9kZSkKIHsKICAgICBpZiAoIWZ1bmN0aW9uTmFtZUlzSW5TY29wZShmdW5jdGlvbk5vZGUt
PmlkZW50KCksIGZ1bmN0aW9uTm9kZS0+ZnVuY3Rpb25Nb2RlKCkpKQpAQCAtNDk2LDIxICs1MjAs
MjQgQEAgdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6YWRkQ2FsbGVlKEZ1bmN0aQogICAgIHN5bWJv
bFRhYmxlKCkuYWRkKGZ1bmN0aW9uTm9kZS0+aWRlbnQoKS5pbXBsKCksIFN5bWJvbFRhYmxlRW50
cnkoY2FsbGVlUmVnaXN0ZXItPmluZGV4KCksIFJlYWRPbmx5KSk7CiB9CiAKLXZvaWQgQnl0ZWNv
ZGVHZW5lcmF0b3I6OmFkZFBhcmFtZXRlcihjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgaW50IHBh
cmFtZXRlckluZGV4KQorUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmluaXRpYWxpemVO
ZXh0UGFyYW1ldGVyKCkKIHsKLSAgICAvLyBQYXJhbWV0ZXJzIG92ZXJ3cml0ZSB2YXIgZGVjbGFy
YXRpb25zLCBidXQgbm90IGZ1bmN0aW9uIGRlY2xhcmF0aW9ucy4KLSAgICBTdHJpbmdJbXBsKiBy
ZXAgPSBpZGVudC5pbXBsKCk7Ci0gICAgaWYgKCFtX2Z1bmN0aW9ucy5jb250YWlucyhyZXApKSB7
Ci0gICAgICAgIHN5bWJvbFRhYmxlKCkuc2V0KHJlcCwgcGFyYW1ldGVySW5kZXgpOwotICAgICAg
ICBSZWdpc3RlcklEJiBwYXJhbWV0ZXIgPSByZWdpc3RlckZvcihwYXJhbWV0ZXJJbmRleCk7Ci0g
ICAgICAgIHBhcmFtZXRlci5zZXRJbmRleChwYXJhbWV0ZXJJbmRleCk7Ci0gICAgfQotCi0gICAg
Ly8gVG8gbWFpbnRhaW4gdGhlIGNhbGxpbmcgY29udmVudGlvbiwgd2UgaGF2ZSB0byBhbGxvY2F0
ZSB1bmlxdWUgc3BhY2UgZm9yCi0gICAgLy8gZWFjaCBwYXJhbWV0ZXIsIGV2ZW4gaWYgdGhlIHBh
cmFtZXRlciBkb2Vzbid0IG1ha2UgaXQgaW50byB0aGUgc3ltYm9sIHRhYmxlLgorICAgIFZpcnR1
YWxSZWdpc3RlciByZWcgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChtX2NvZGVCbG9jay0+
bnVtUGFyYW1ldGVycygpKTsKKyAgICBSZWdpc3RlcklEJiBwYXJhbWV0ZXIgPSByZWdpc3RlckZv
cihyZWcpOworICAgIHBhcmFtZXRlci5zZXRJbmRleChyZWcpOwogICAgIG1fY29kZUJsb2NrLT5h
ZGRQYXJhbWV0ZXIoKTsKIH0KIAorU3RyaW5nSW1wbCogQnl0ZWNvZGVHZW5lcmF0b3I6OnZpc2li
bGVOYW1lRm9yUGFyYW1ldGVyKERlY29uc3RydWN0aW9uUGF0dGVybk5vZGUqIHBhdHRlcm4pCit7
CisgICAgaWYgKHBhdHRlcm4tPmlzQmluZGluZ05vZGUoKSkgeworICAgICAgICBjb25zdCBJZGVu
dGlmaWVyJiBpZGVudCA9IHN0YXRpY19jYXN0PGNvbnN0IEJpbmRpbmdOb2RlKj4ocGF0dGVybikt
PmJvdW5kUHJvcGVydHkoKTsKKyAgICAgICAgaWYgKCFtX2Z1bmN0aW9ucy5jb250YWlucyhpZGVu
dC5pbXBsKCkpKQorICAgICAgICAgICAgcmV0dXJuIGlkZW50LmltcGwoKTsKKyAgICB9CisgICAg
cmV0dXJuIG51bGxwdHI7Cit9CisKIGJvb2wgQnl0ZWNvZGVHZW5lcmF0b3I6OndpbGxSZXNvbHZl
VG9Bcmd1bWVudHNSZWdpc3Rlcihjb25zdCBJZGVudGlmaWVyJiBpZGVudCkKIHsKICAgICBpZiAo
aWRlbnQgIT0gcHJvcGVydHlOYW1lcygpLmFyZ3VtZW50cykKQEAgLTUzOSwxOSArNTY2LDYgQEAg
UmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OnVuY2hlY2tlZAogICAgIHJldHVybiBtX2xv
Y2FsQXJndW1lbnRzUmVnaXN0ZXI7CiB9CiAKLVJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9y
OjpjcmVhdGVMYXp5UmVnaXN0ZXJJZk5lY2Vzc2FyeShSZWdpc3RlcklEKiByZWcpCi17Ci0gICAg
aWYgKCFyZWctPnZpcnR1YWxSZWdpc3RlcigpLmlzTG9jYWwoKSkKLSAgICAgICAgcmV0dXJuIHJl
ZzsKLQotICAgIGludCBsb2NhbFZhcmlhYmxlTnVtYmVyID0gcmVnLT52aXJ0dWFsUmVnaXN0ZXIo
KS50b0xvY2FsKCk7Ci0KLSAgICBpZiAobV9sYXN0TGF6eUZ1bmN0aW9uIDw9IGxvY2FsVmFyaWFi
bGVOdW1iZXIgfHwgbG9jYWxWYXJpYWJsZU51bWJlciA8IG1fZmlyc3RMYXp5RnVuY3Rpb24pCi0g
ICAgICAgIHJldHVybiByZWc7Ci0gICAgZW1pdExhenlOZXdGdW5jdGlvbihyZWcsIG1fbGF6eUZ1
bmN0aW9ucy5nZXQobG9jYWxWYXJpYWJsZU51bWJlcikpOwotICAgIHJldHVybiByZWc7Ci19Ci0K
IFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjpuZXdSZWdpc3RlcigpCiB7CiAgICAgbV9j
YWxsZWVSZWdpc3RlcnMuYXBwZW5kKHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKG1fY2FsbGVlUmVn
aXN0ZXJzLnNpemUoKSkpOwpAQCAtOTU0LDcgKzk2OCw3IEBAIGJvb2wgQnl0ZWNvZGVHZW5lcmF0
b3I6Omhhc0NvbnN0YW50KGNvbnMKICAgICBTdHJpbmdJbXBsKiByZXAgPSBpZGVudC5pbXBsKCk7
CiAgICAgcmV0dXJuIG1faWRlbnRpZmllck1hcC5jb250YWlucyhyZXApOwogfQotICAgIAorCiB1
bnNpZ25lZCBCeXRlY29kZUdlbmVyYXRvcjo6YWRkQ29uc3RhbnQoY29uc3QgSWRlbnRpZmllciYg
aWRlbnQpCiB7CiAgICAgU3RyaW5nSW1wbCogcmVwID0gaWRlbnQuaW1wbCgpOwpAQCAtMTE5MCw0
NiArMTIwNCw5OSBAQCBib29sIEJ5dGVjb2RlR2VuZXJhdG9yOjppc0NhcHR1cmVkKGludCBvCiAg
ICAgcmV0dXJuIG1fc3ltYm9sVGFibGUgJiYgbV9zeW1ib2xUYWJsZS0+aXNDYXB0dXJlZChvcGVy
YW5kKTsKIH0KIAotTG9jYWwgQnl0ZWNvZGVHZW5lcmF0b3I6OmxvY2FsKGNvbnN0IElkZW50aWZp
ZXImIHByb3BlcnR5KQorVmFyaWFibGUgQnl0ZWNvZGVHZW5lcmF0b3I6OnZhcmlhYmxlKGNvbnN0
IElkZW50aWZpZXImIHByb3BlcnR5KQogewotICAgIGlmIChwcm9wZXJ0eSA9PSBwcm9wZXJ0eU5h
bWVzKCkudGhpc0lkZW50aWZpZXIpCi0gICAgICAgIHJldHVybiBMb2NhbCh0aGlzUmVnaXN0ZXIo
KSwgUmVhZE9ubHksIExvY2FsOjpTcGVjaWFsTG9jYWwpOwotICAgIGJvb2wgaXNBcmd1bWVudHMg
PSBwcm9wZXJ0eSA9PSBwcm9wZXJ0eU5hbWVzKCkuYXJndW1lbnRzOwotICAgIGlmIChpc0FyZ3Vt
ZW50cykKLSAgICAgICAgY3JlYXRlQXJndW1lbnRzSWZOZWNlc3NhcnkoKTsKLQorICAgIGlmIChw
cm9wZXJ0eSA9PSBwcm9wZXJ0eU5hbWVzKCkudGhpc0lkZW50aWZpZXIpIHsKKyAgICAgICAgcmV0
dXJuIFZhcmlhYmxlKAorICAgICAgICAgICAgcHJvcGVydHksIFZhck9mZnNldCh0aGlzUmVnaXN0
ZXIoKS0+dmlydHVhbFJlZ2lzdGVyKCkpLCB0aGlzUmVnaXN0ZXIoKSwKKyAgICAgICAgICAgIFJl
YWRPbmx5LCBMb2NhbDo6U3BlY2lhbExvY2FsKTsKKyAgICB9CisgICAgCiAgICAgaWYgKCFzaG91
bGRPcHRpbWl6ZUxvY2FscygpKQotICAgICAgICByZXR1cm4gTG9jYWwoKTsKLQorICAgICAgICBy
ZXR1cm4gVmFyaWFibGUocHJvcGVydHkpOworICAgIAogICAgIFN5bWJvbFRhYmxlRW50cnkgZW50
cnkgPSBzeW1ib2xUYWJsZSgpLmdldChwcm9wZXJ0eS5pbXBsKCkpOwogICAgIGlmIChlbnRyeS5p
c051bGwoKSkKLSAgICAgICAgcmV0dXJuIExvY2FsKCk7Ci0KLQotICAgIFJlZ2lzdGVySUQqIGxv
Y2FsID0gY3JlYXRlTGF6eVJlZ2lzdGVySWZOZWNlc3NhcnkoJnJlZ2lzdGVyRm9yKGVudHJ5Lmdl
dEluZGV4KCkpKTsKLQotICAgIGlmIChpc0NhcHR1cmVkKGxvY2FsLT5pbmRleCgpKSAmJiBtX2xl
eGljYWxFbnZpcm9ubWVudFJlZ2lzdGVyKQotICAgICAgICByZXR1cm4gTG9jYWwoKTsKLQotICAg
IHJldHVybiBMb2NhbChsb2NhbCwgZW50cnkuZ2V0QXR0cmlidXRlcygpLCBpc0FyZ3VtZW50cyA/
IExvY2FsOjpTcGVjaWFsTG9jYWwgOiBMb2NhbDo6Tm9ybWFsTG9jYWwpOworICAgICAgICByZXR1
cm4gVmFyaWFibGUocHJvcGVydHkpOworICAgIAorICAgIFZhck9mZnNldCBvZmZzZXQgPSBlbnRy
eS52YXJPZmZzZXQoKTsKKyAgICAKKyAgICBpZiAob2Zmc2V0LmlzU2NvcGUoKSAmJiBtX2xvY2Fs
U2NvcGVEZXB0aCkgeworICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGJlIGFibGUgdG8gc3Rh
dGljYWxseSByZXNvbHZlIHRocm91Z2ggb3VyIGxvY2FsIHNjb3Blcy4KKyAgICAgICAgLy8gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MTg4NQorICAgICAgICByZXR1
cm4gVmFyaWFibGUocHJvcGVydHkpOworICAgIH0KKyAgICAKKyAgICBSZWdpc3RlcklEKiBsb2Nh
bDsKKyAgICBpZiAob2Zmc2V0LmlzU3RhY2soKSkKKyAgICAgICAgbG9jYWwgPSAmcmVnaXN0ZXJG
b3Iob2Zmc2V0LnN0YWNrT2Zmc2V0KCkub2Zmc2V0KCkpOworICAgIGVsc2UKKyAgICAgICAgbG9j
YWwgPSBudWxscHRyOworICAgIAorICAgIHJldHVybiBWYXJpYWJsZShwcm9wZXJ0eSwgdmFyT2Zm
c2V0LCBsb2NhbCwgZW50cnkuZ2V0QXR0cmlidXRlcygpLCBMb2NhbDo6Tm9ybWFsTG9jYWwpOwog
fQogCi1Mb2NhbCBCeXRlY29kZUdlbmVyYXRvcjo6Y29uc3RMb2NhbChjb25zdCBJZGVudGlmaWVy
JiBwcm9wZXJ0eSkKK1ZhcmlhYmxlIEJ5dGVjb2RlR2VuZXJhdG9yOjpoYXNWYXJpYWJsZURpcmVj
dChjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eSkKIHsKLSAgICBpZiAobV9jb2RlVHlwZSAhPSBG
dW5jdGlvbkNvZGUpCi0gICAgICAgIHJldHVybiBMb2NhbCgpOworICAgIEFTU0VSVChwcm9wZXJ0
eSAhPSBwcm9wZXJ0eU5hbWVzKCkudGhpc0lkZW50aWZpZXIpOworICAgIAorICAgIHJldHVybiAh
c3ltYm9sVGFibGUoKS5nZXQocHJvcGVydHkuaW1wbCgpKS5pc051bGwoKTsKK30KIAorVmFyaWFi
bGVBZGRSZXN1bHQgQnl0ZWNvZGVHZW5lcmF0b3I6OmNyZWF0ZVZhcmlhYmxlKAorICAgIGNvbnN0
IElkZW50aWZpZXImIHByb3BlcnR5LCBWYXJLaW5kIHZhcktpbmQsIENvbnN0YW50TW9kZSBjb25z
dGFudE1vZGUpCit7CisgICAgQVNTRVJUKHByb3BlcnR5ICE9IHByb3BlcnR5TmFtZXMoKS50aGlz
SWRlbnRpZmllcik7CisgICAgCisgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIoc3ltYm9s
VGFibGUoKS5tX2xvY2spOwogICAgIFN5bWJvbFRhYmxlRW50cnkgZW50cnkgPSBzeW1ib2xUYWJs
ZSgpLmdldChwcm9wZXJ0eS5pbXBsKCkpOwotICAgIGlmIChlbnRyeS5pc051bGwoKSkKLSAgICAg
ICAgcmV0dXJuIExvY2FsKCk7Ci0KLSAgICBSZWdpc3RlcklEKiBsb2NhbCA9IGNyZWF0ZUxhenlS
ZWdpc3RlcklmTmVjZXNzYXJ5KCZyZWdpc3RlckZvcihlbnRyeS5nZXRJbmRleCgpKSk7Ci0KLSAg
ICBib29sIGlzQXJndW1lbnRzID0gcHJvcGVydHkgPT0gcHJvcGVydHlOYW1lcygpLmFyZ3VtZW50
czsKLSAgICBpZiAoaXNDYXB0dXJlZChsb2NhbC0+aW5kZXgoKSkgJiYgbV9sZXhpY2FsRW52aXJv
bm1lbnRSZWdpc3RlcikKLSAgICAgICAgcmV0dXJuIExvY2FsKCk7Ci0KLSAgICByZXR1cm4gTG9j
YWwobG9jYWwsIGVudHJ5LmdldEF0dHJpYnV0ZXMoKSwgaXNBcmd1bWVudHMgPyBMb2NhbDo6U3Bl
Y2lhbExvY2FsIDogTG9jYWw6Ok5vcm1hbExvY2FsKTsKKyAgICAKKyAgICBpZiAoIWVudHJ5Lmlz
TnVsbCgpKSB7CisgICAgICAgIC8vIFRoaXMgaXMgc2ltaWxhciB0byB3aGF0IEJ5dGVjb2RlR2Vu
ZXJhdG9yOjp2YXJpYWJsZSgpIGRvZXMsIGV4Y2VwdCB0aGF0IGl0J3MgZm9yIGNhc2VzCisgICAg
ICAgIC8vIHdoZXJlIHdlIGtub3cgdGhhdCB3ZSdyZSBkZWFsaW5nIHdpdGggdGhlIGxvY2FsIHNj
b3BlLgorICAgICAgICAKKyAgICAgICAgVmFyT2Zmc2V0IG9mZnNldCA9IGVudHJ5LnZhck9mZnNl
dCgpOworICAgICAgICAKKyAgICAgICAgLy8gV2UgY2FuJ3QgY2hhbmdlIG91ciBtaW5kcyBhYm91
dCB3aGV0aGVyIGl0J3MgY2FwdHVyZWQuCisgICAgICAgIEFTU0VSVChvZmZzZXQua2luZCgpID09
IHZhcktpbmQpOworICAgICAgICAKKyAgICAgICAgLy8gSXQncyBmaW5lIHRvIGV4cGVjdCBhIHZh
cmlhYmxlIHRvIGJlIGNvbnN0YW50IGlmIGl0IHByZXZpb3VzbHkgd2Fzbid0LCBidXQgaXQncyBu
b3QKKyAgICAgICAgLy8gT0sgZm9yIGEgcHJldmlvdXNseSBjb25zdGFudCB2YXJpYWJsZSB0byBs
YXRlciBiZSBleHBlY3RlZCB0byBiZSBub24tY29uc3RhbnQuIFRoaXMgYWxsCisgICAgICAgIC8v
IHdvcmtzIG91dCBiZWNhdXNlIGNvbnN0YW50cyBvbmx5IGNvbWUgaW50byBwbGF5IHdpdGggbG9j
YWwgdmFyaWFibGUgZGVjbGFyYXRpb25zLCBhbmQKKyAgICAgICAgLy8gdGhvc2UgYXJlIGFsd2F5
cyBhZGRlZCBsYXN0LgorICAgICAgICBpZiAoY29uc3RhbnRNb2RlID09IElzVmFyaWFibGUpCisg
ICAgICAgICAgICBBU1NFUlQoIWVudHJ5LmlzUmVhZE9ubHkoKSk7CisgICAgICAgIAorICAgICAg
ICBSZWdpc3RlcklEKiBsb2NhbDsKKyAgICAgICAgaWYgKG9mZnNldC5pc1N0YWNrKCkpCisgICAg
ICAgICAgICBsb2NhbCA9ICZyZWdpc3RlckZvcihvZmZzZXQuc3RhY2tPZmZzZXQoKS5vZmZzZXQo
KSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGxvY2FsID0gbnVsbHB0cjsKKyAgICAgICAg
cmV0dXJuIFZhcmlhYmxlQWRkUmVzdWx0KAorICAgICAgICAgICAgVmFyaWFibGUocHJvcGVydHks
IHZhck9mZnNldCwgbG9jYWwsIGVudHJ5LmdldEF0dHJpYnV0ZXMoKSwgTG9jYWw6Ok5vcm1hbExv
Y2FsKSwKKyAgICAgICAgICAgIC8qIGlzTmV3VmFyaWFibGUgPSAqLyBmYWxzZSk7CisgICAgfQor
ICAgIAorICAgIFZhck9mZnNldCB2YXJPZmZzZXQ7CisgICAgaWYgKHZhcktpbmQgPT0gU2NvcGVW
YXJLaW5kKQorICAgICAgICB2YXJPZmZzZXQgPSBWYXJPZmZzZXQoc3ltYm9sVGFibGUoKS50YWtl
TmV4dFNjb3BlT2Zmc2V0KCkpOworICAgIGVsc2UgeworICAgICAgICBBU1NFUlQodmFyS2luZCA9
PSBTdGFja1ZhcktpbmQpOworICAgICAgICB2YXJPZmZzZXQgPSBWYXJPZmZzZXQodmlydHVhbFJl
Z2lzdGVyRm9yTG9jYWwobV9jYWxsZWVSZWdpc3RlcnMuc2l6ZSgpKSk7CisgICAgfQorICAgIFN5
bWJvbFRhYmxlRW50cnkgbmV3RW50cnkodmFyT2Zmc2V0LCBjb25zdGFudE1vZGUgPT0gSXNDb25z
dGFudCA/IFJlYWRPbmx5IDogMCk7CisgICAgc3ltYm9sVGFibGUoKS5hZGQobG9ja2VyLCBpZGVu
dC5pbXBsKCksIG5ld0VudHJ5KTsKKyAgICAKKyAgICBSZWdpc3RlcklEKiBsb2NhbDsKKyAgICBp
ZiAodmFyS2luZCA9PSBTdGFja1ZhcktpbmQpIHsKKyAgICAgICAgbG9jYWwgPSBhZGRWYXIoKTsK
KyAgICAgICAgQVNTRVJUKGxvY2FsLT5pbmRleCgpID09IHZhck9mZnNldC5zdGFja09mZnNldCgp
Lm9mZnNldCgpKTsKKyAgICB9IGVsc2UKKyAgICAgICAgbG9jYWwgPSBudWxscHRyOworICAgIAor
ICAgIHJldHVybiBWYXJpYWJsZUFkZFJlc3VsdCgKKyAgICAgICAgVmFyaWFibGUocHJvcGVydHks
IHZhck9mZnNldCwgbG9jYWwsIGVudHJ5LmdldEF0dHJpYnV0ZXMoKSwgTG9jYWw6Ok5vcm1hbExv
Y2FsKSwKKyAgICAgICAgLyogaXNOZXdWYXJpYWJsZSA9ICovIHRydWUpOwogfQogCiB2b2lkIEJ5
dGVjb2RlR2VuZXJhdG9yOjplbWl0Q2hlY2tIYXNJbnN0YW5jZShSZWdpc3RlcklEKiBkc3QsIFJl
Z2lzdGVySUQqIHZhbHVlLCBSZWdpc3RlcklEKiBiYXNlLCBMYWJlbCogdGFyZ2V0KQpAQCAtMTI1
MywzOSArMTMyMCw0OCBAQCBSZXNvbHZlVHlwZSBCeXRlY29kZUdlbmVyYXRvcjo6cmVzb2x2ZVR5
CiAgICAgcmV0dXJuIEdsb2JhbFByb3BlcnR5OwogfQogCi1SZWdpc3RlcklEKiBCeXRlY29kZUdl
bmVyYXRvcjo6ZW1pdFJlc29sdmVTY29wZShSZWdpc3RlcklEKiBkc3QsIGNvbnN0IElkZW50aWZp
ZXImIGlkZW50aWZpZXIsIFJlc29sdmVTY29wZUluZm8mIGluZm8pCitSZWdpc3RlcklEKiBCeXRl
Y29kZUdlbmVyYXRvcjo6ZW1pdFJlc29sdmVTY29wZShSZWdpc3RlcklEKiBkc3QsIGNvbnN0IFZh
cmlhYmxlJiB2YXJpYWJsZSkKIHsKLSAgICBtX2NvZGVCbG9jay0+YWRkUHJvcGVydHlBY2Nlc3NJ
bnN0cnVjdGlvbihpbnN0cnVjdGlvbnMoKS5zaXplKCkpOwotCi0gICAgaWYgKG1fc3ltYm9sVGFi
bGUgJiYgbV9jb2RlVHlwZSA9PSBGdW5jdGlvbkNvZGUgJiYgIW1fbG9jYWxTY29wZURlcHRoKSB7
Ci0gICAgICAgIFN5bWJvbFRhYmxlRW50cnkgZW50cnkgPSBtX3N5bWJvbFRhYmxlLT5nZXQoaWRl
bnRpZmllci5pbXBsKCkpOwotICAgICAgICBpZiAoIWVudHJ5LmlzTnVsbCgpKSB7Ci0gICAgICAg
ICAgICBlbWl0T3Bjb2RlKG9wX3Jlc29sdmVfc2NvcGUpOwotICAgICAgICAgICAgaW5zdHJ1Y3Rp
b25zKCkuYXBwZW5kKGtpbGwoZHN0KSk7Ci0gICAgICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBl
bmQoc2NvcGVSZWdpc3RlcigpLT5pbmRleCgpKTsKLSAgICAgICAgICAgIGluc3RydWN0aW9ucygp
LmFwcGVuZChhZGRDb25zdGFudChpZGVudGlmaWVyKSk7Ci0gICAgICAgICAgICBpbnN0cnVjdGlv
bnMoKS5hcHBlbmQoTG9jYWxDbG9zdXJlVmFyKTsKLSAgICAgICAgICAgIGluc3RydWN0aW9ucygp
LmFwcGVuZCgwKTsKLSAgICAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCgwKTsKLSAgICAg
ICAgICAgIGluZm8gPSBSZXNvbHZlU2NvcGVJbmZvKGVudHJ5LmdldEluZGV4KCkpOwotICAgICAg
ICAgICAgcmV0dXJuIGRzdDsKLSAgICAgICAgfQorICAgIHN3aXRjaCAodmFyaWFibGUudmFyT2Zm
c2V0KCkua2luZCgpKSB7CisgICAgY2FzZSBTdGFja09mZnNldDoKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgICAgIAorICAgIGNhc2UgQ2FwdHVyZWRBcmd1bWVudEtpbmQ6CisgICAgICAg
IHJldHVybiBhcmd1bWVudHNSZWdpc3RlcigpOworICAgICAgICAKKyAgICBjYXNlIFNjb3BlT2Zm
c2V0OgorICAgICAgICBtX2NvZGVCbG9jay0+YWRkUHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbihp
bnN0cnVjdGlvbnMoKS5zaXplKCkpOworICAgICAgICAKKyAgICAgICAgQVNTRVJUKG1fc3ltYm9s
VGFibGUgJiYgbV9jb2RlVHlwZSA9PSBGdW5jdGlvbkNvZGUgJiYgIW1fbG9jYWxTY29wZURlcHRo
KTsKKyAgICAgICAgCisgICAgICAgIGVtaXRPcGNvZGUob3BfcmVzb2x2ZV9zY29wZSk7CisgICAg
ICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChraWxsKGRzdCkpOworICAgICAgICBpbnN0cnVjdGlv
bnMoKS5hcHBlbmQoc2NvcGVSZWdpc3RlcigpLT5pbmRleCgpKTsKKyAgICAgICAgaW5zdHJ1Y3Rp
b25zKCkuYXBwZW5kKGFkZENvbnN0YW50KHZhcmlhYmxlLmlkZW50KCkpKTsKKyAgICAgICAgaW5z
dHJ1Y3Rpb25zKCkuYXBwZW5kKExvY2FsQ2xvc3VyZVZhcik7CisgICAgICAgIGluc3RydWN0aW9u
cygpLmFwcGVuZCgwKTsKKyAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKDApOworICAgICAg
ICByZXR1cm4gZHN0OworICAgICAgICAKKyAgICBjYXNlIEludmFsaWRWYXJLaW5kOgorICAgICAg
ICAvLyBJbmRpY2F0ZXMgbm9uLWxvY2FsIHJlc29sdXRpb24uCisgICAgICAgIAorICAgICAgICBB
U1NFUlQoIW1fc3ltYm9sVGFibGUgfHwgIW1fc3ltYm9sVGFibGUtPmNvbnRhaW5zKGlkZW50aWZp
ZXIuaW1wbCgpKSB8fCByZXNvbHZlVHlwZSgpID09IER5bmFtaWMpOworICAgICAgICAKKyAgICAg
ICAgLy8gcmVzb2x2ZV9zY29wZSBkc3QsIGlkLCBSZXNvbHZlVHlwZSwgZGVwdGgKKyAgICAgICAg
ZW1pdE9wY29kZShvcF9yZXNvbHZlX3Njb3BlKTsKKyAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBw
ZW5kKGtpbGwoZHN0KSk7CisgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChzY29wZVJlZ2lz
dGVyKCktPmluZGV4KCkpOworICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYWRkQ29uc3Rh
bnQodmFyaWFibGUuaWRlbnQoKSkpOworICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQocmVz
b2x2ZVR5cGUoKSk7CisgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCgwKTsKKyAgICAgICAg
aW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKDApOworICAgICAgICByZXR1cm4gZHN0OwogICAgIH0KLQot
ICAgIEFTU0VSVCghbV9zeW1ib2xUYWJsZSB8fCAhbV9zeW1ib2xUYWJsZS0+Y29udGFpbnMoaWRl
bnRpZmllci5pbXBsKCkpIHx8IHJlc29sdmVUeXBlKCkgPT0gRHluYW1pYyk7Ci0KLSAgICAvLyBy
ZXNvbHZlX3Njb3BlIGRzdCwgaWQsIFJlc29sdmVUeXBlLCBkZXB0aAotICAgIGVtaXRPcGNvZGUo
b3BfcmVzb2x2ZV9zY29wZSk7Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGtpbGwoZHN0KSk7
Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHNjb3BlUmVnaXN0ZXIoKS0+aW5kZXgoKSk7Ci0g
ICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGFkZENvbnN0YW50KGlkZW50aWZpZXIpKTsKLSAgICBp
bnN0cnVjdGlvbnMoKS5hcHBlbmQocmVzb2x2ZVR5cGUoKSk7Ci0gICAgaW5zdHJ1Y3Rpb25zKCku
YXBwZW5kKDApOwotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCgwKTsKLSAgICByZXR1cm4gZHN0
OworICAgIAorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKLQogUmVnaXN0
ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRHZXRPd25TY29wZShSZWdpc3RlcklEKiBkc3Qs
IGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIsIE93blNjb3BlTG9va3VwUnVsZXMpCiB7CiAg
ICAgZW1pdE9wY29kZShvcF9yZXNvbHZlX3Njb3BlKTsKQEAgLTEzMDAsNjEgKzEzNzYsMTA3IEBA
IFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0R2V0T3cKICAgICByZXR1cm4gZHN0
OwogfQogCi1SZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFJlc29sdmVDb25zdGFu
dExvY2FsKFJlZ2lzdGVySUQqIGRzdCwgY29uc3QgSWRlbnRpZmllciYgaWRlbnRpZmllciwgUmVz
b2x2ZVNjb3BlSW5mbyYgaW5mbykKK1JlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0
R2V0RnJvbVNjb3BlKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogc2NvcGUsIGNvbnN0IFZh
cmlhYmxlJiB2YXJpYWJsZSwgUmVzb2x2ZU1vZGUgcmVzb2x2ZU1vZGUpCiB7Ci0gICAgaWYgKCFt
X3N5bWJvbFRhYmxlIHx8IG1fY29kZVR5cGUgIT0gRnVuY3Rpb25Db2RlKQotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLQotICAgIFN5bWJvbFRhYmxlRW50cnkgZW50cnkgPSBtX3N5bWJvbFRhYmxl
LT5nZXQoaWRlbnRpZmllci5pbXBsKCkpOwotICAgIGlmIChlbnRyeS5pc051bGwoKSkKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgaW5mbyA9IFJlc29sdmVTY29wZUluZm8oZW50cnkuZ2V0
SW5kZXgoKSk7Ci0gICAgcmV0dXJuIGVtaXRNb3ZlKGRzdCwgbV9sZXhpY2FsRW52aXJvbm1lbnRS
ZWdpc3Rlcik7Ci0KKyAgICBzd2l0Y2ggKHZhcmlhYmxlLnZhck9mZnNldCgpLmtpbmQoKSkgewor
ICAgIGNhc2UgU3RhY2tPZmZzZXQ6CisgICAgICAgIHJldHVybiBlbWl0TW92ZShraWxsKGRzdCks
IHZhcmlhYmxlLmxvY2FsKCkpOworICAgICAgICAKKyAgICBjYXNlIENhcHR1cmVkQXJndW1lbnRz
T2Zmc2V0OgorICAgICAgICBBU1NFUlQoc2NvcGUgPT0gYXJndW1lbnRzUmVnaXN0ZXIoKSk7Cisg
ICAgICAgIFVubGlua2VkVmFsdWVQcm9maWxlIHByb2ZpbGUgPSBlbWl0UHJvZmlsZWRPcGNvZGUo
b3BfZ2V0X2Zyb21fYXJndW1lbnRzKTsKKyAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGtp
bGwoZHN0KSk7CisgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChzY29wZS0+aW5kZXgoKSk7
CisgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCh2YXJpYWJsZS52YXJPZmZzZXQoKS5jYXB0
dXJlZEFyZ3VtZW50c09mZnNldCgpLm9mZnNldCgpKTsKKyAgICAgICAgaW5zdHJ1Y3Rpb25zKCku
YXBwZW5kKHByb2ZpbGUpOworICAgICAgICByZXR1cm4gZHN0OworICAgICAgICAKKyAgICBjYXNl
IFNjb3BlT2Zmc2V0OgorICAgIGNhc2UgSW52YWxpZFZhcktpbmQ6CisgICAgICAgIG1fY29kZUJs
b2NrLT5hZGRQcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uKGluc3RydWN0aW9ucygpLnNpemUoKSk7
CisgICAgICAgIAorICAgICAgICAvLyBnZXRfZnJvbV9zY29wZSBkc3QsIHNjb3BlLCBpZCwgUmVz
b2x2ZU1vZGVBbmRUeXBlLCBTdHJ1Y3R1cmUsIE9wZXJhbmQKKyAgICAgICAgVW5saW5rZWRWYWx1
ZVByb2ZpbGUgcHJvZmlsZSA9IGVtaXRQcm9maWxlZE9wY29kZShvcF9nZXRfZnJvbV9zY29wZSk7
CisgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChraWxsKGRzdCkpOworICAgICAgICBpbnN0
cnVjdGlvbnMoKS5hcHBlbmQoc2NvcGUtPmluZGV4KCkpOworICAgICAgICBpbnN0cnVjdGlvbnMo
KS5hcHBlbmQoYWRkQ29uc3RhbnQodmFyaWFibGUuaWRlbnRpZmllcigpKSk7CisgICAgICAgIGlu
c3RydWN0aW9ucygpLmFwcGVuZChSZXNvbHZlTW9kZUFuZFR5cGUocmVzb2x2ZU1vZGUsIHZhcmlh
YmxlLnZhck9mZnNldCgpLmlzU2NvcGUoKSA/IExvY2FsQ2xvc3VyZVZhciA6IHJlc29sdmVUeXBl
KCkpLm9wZXJhbmQoKSk7CisgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCgwKTsKKyAgICAg
ICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHZhcmlhYmxlLnZhck9mZnNldCgpLmlzU2NvcGUoKSA/
IHZhcmlhYmxlLnZhck9mZnNldCgpLnNjb3BlT2Zmc2V0KCkub2Zmc2V0KCkgOiAwKTsKKyAgICAg
ICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHByb2ZpbGUpOworICAgICAgICByZXR1cm4gZHN0Owor
ICAgIH0KKyAgICAKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCi1SZWdp
c3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEdldEZyb21TY29wZShSZWdpc3RlcklEKiBk
c3QsIFJlZ2lzdGVySUQqIHNjb3BlLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVyLCBSZXNv
bHZlTW9kZSByZXNvbHZlTW9kZSwgY29uc3QgUmVzb2x2ZVNjb3BlSW5mbyYgaW5mbykKK1JlZ2lz
dGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0UHV0VG9TY29wZShSZWdpc3RlcklEKiBzY29w
ZSwgY29uc3QgVmFyaWFibGUmIHZhcmlhYmxlLCBSZWdpc3RlcklEKiB2YWx1ZSwgUmVzb2x2ZU1v
ZGUgcmVzb2x2ZU1vZGUpCiB7Ci0gICAgbV9jb2RlQmxvY2stPmFkZFByb3BlcnR5QWNjZXNzSW5z
dHJ1Y3Rpb24oaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKTsKLQotICAgIC8vIGdldF9mcm9tX3Njb3Bl
IGRzdCwgc2NvcGUsIGlkLCBSZXNvbHZlTW9kZUFuZFR5cGUsIFN0cnVjdHVyZSwgT3BlcmFuZAot
ICAgIFVubGlua2VkVmFsdWVQcm9maWxlIHByb2ZpbGUgPSBlbWl0UHJvZmlsZWRPcGNvZGUob3Bf
Z2V0X2Zyb21fc2NvcGUpOwotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChraWxsKGRzdCkpOwot
ICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChzY29wZS0+aW5kZXgoKSk7Ci0gICAgaW5zdHJ1Y3Rp
b25zKCkuYXBwZW5kKGFkZENvbnN0YW50KGlkZW50aWZpZXIpKTsKLSAgICBpbnN0cnVjdGlvbnMo
KS5hcHBlbmQoUmVzb2x2ZU1vZGVBbmRUeXBlKHJlc29sdmVNb2RlLCBpbmZvLmlzTG9jYWwoKSA/
IExvY2FsQ2xvc3VyZVZhciA6IHJlc29sdmVUeXBlKCkpLm9wZXJhbmQoKSk7Ci0gICAgaW5zdHJ1
Y3Rpb25zKCkuYXBwZW5kKDApOwotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChpbmZvLmxvY2Fs
SW5kZXgoKSk7Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHByb2ZpbGUpOwotICAgIHJldHVy
biBkc3Q7CisgICAgc3dpdGNoICh2YXJpYWJsZS52YXJPZmZzZXQoKS5raW5kKCkpIHsKKyAgICBj
YXNlIFN0YWNrT2Zmc2V0OgorICAgICAgICBlbWl0TW92ZSh2YXJpYWJsZS5sb2NhbCgpLCB2YWx1
ZSk7CisgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICAgICAgCisgICAgY2FzZSBDYXB0dXJlZEFy
Z3VtZW50c09mZnNldDoKKyAgICAgICAgQVNTRVJUKHNjb3BlID09IGFyZ3VtZW50c1JlZ2lzdGVy
KCkpOworICAgICAgICBlbWl0T3Bjb2RlKG9wX3B1dF90b19hcmd1bWVudHMpOworICAgICAgICBp
bnN0cnVjdGlvbnMoKS5hcHBlbmQoc2NvcGUpOworICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBl
bmQodmFyaWFibGUudmFyT2Zmc2V0KCkuY2FwdHVyZWRBcmd1bWVudHNPZmZzZXQoKS5vZmZzZXQo
KSk7CisgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCh2YWx1ZS0+aW5kZXgoKSk7CisgICAg
ICAgIHJldHVybiB2YWx1ZTsKKyAgICAgICAgCisgICAgY2FzZSBTY29wZU9mZnNldDoKKyAgICBj
YXNlIEludmFsaWRWYXJLaW5kOiB7CisgICAgICAgIG1fY29kZUJsb2NrLT5hZGRQcm9wZXJ0eUFj
Y2Vzc0luc3RydWN0aW9uKGluc3RydWN0aW9ucygpLnNpemUoKSk7CisgICAgICAgIAorICAgICAg
ICAvLyBwdXRfdG9fc2NvcGUgc2NvcGUsIGlkLCB2YWx1ZSwgUmVzb2x2ZU1vZGVBbmRUeXBlLCBT
dHJ1Y3R1cmUsIE9wZXJhbmQKKyAgICAgICAgZW1pdE9wY29kZShvcF9wdXRfdG9fc2NvcGUpOwor
ICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoc2NvcGUtPmluZGV4KCkpOworICAgICAgICBp
bnN0cnVjdGlvbnMoKS5hcHBlbmQoYWRkQ29uc3RhbnQodmFyaWFibGUuaWRlbnQoKSkpOworICAg
ICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQodmFsdWUtPmluZGV4KCkpOworICAgICAgICBTY29w
ZU9mZnNldCBvZmZzZXQ7CisgICAgICAgIGlmICh2YXJpYWJsZS52YXJPZmZzZXQoKS5pc1Njb3Bl
KCkpIHsKKyAgICAgICAgICAgIG9mZnNldCA9IHZhcmlhYmxlLnZhck9mZnNldCgpLnNjb3BlT2Zm
c2V0KCk7CisgICAgICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoUmVzb2x2ZU1vZGVBbmRU
eXBlKHJlc29sdmVNb2RlLCBMb2NhbENsb3N1cmVWYXIpLm9wZXJhbmQoKSk7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICBBU1NFUlQocmVzb2x2ZVR5cGUoKSAhPSBMb2NhbENsb3N1cmVW
YXIpOworICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKFJlc29sdmVNb2RlQW5kVHlw
ZShyZXNvbHZlTW9kZSwgcmVzb2x2ZVR5cGUoKSkub3BlcmFuZCgpKTsKKyAgICAgICAgfQorICAg
ICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoMCk7CisgICAgICAgIGluc3RydWN0aW9ucygpLmFw
cGVuZChvZmZzZXQuaXNWYWxpZCgpID8gb2Zmc2V0Lm9mZnNldCgpIDogMCk7CisgICAgICAgIHJl
dHVybiB2YWx1ZTsKKyAgICB9IH0KKyAgICAKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogfQogCi1SZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFB1dFRvU2NvcGUo
UmVnaXN0ZXJJRCogc2NvcGUsIGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIsIFJlZ2lzdGVy
SUQqIHZhbHVlLCBSZXNvbHZlTW9kZSByZXNvbHZlTW9kZSwgY29uc3QgUmVzb2x2ZVNjb3BlSW5m
byYgaW5mbykKK1JlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjppbml0aWFsaXplVmFyaWFi
bGUoY29uc3QgVmFyaWFibGUmIHZhcmlhYmxlLCBSZWdpc3RlcklEKiB2YWx1ZSkKIHsKLSAgICBt
X2NvZGVCbG9jay0+YWRkUHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbihpbnN0cnVjdGlvbnMoKS5z
aXplKCkpOwotCi0gICAgLy8gcHV0X3RvX3Njb3BlIHNjb3BlLCBpZCwgdmFsdWUsIFJlc29sdmVN
b2RlQW5kVHlwZSwgU3RydWN0dXJlLCBPcGVyYW5kCi0gICAgZW1pdE9wY29kZShvcF9wdXRfdG9f
c2NvcGUpOwotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChzY29wZS0+aW5kZXgoKSk7Ci0gICAg
aW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGFkZENvbnN0YW50KGlkZW50aWZpZXIpKTsKLSAgICBpbnN0
cnVjdGlvbnMoKS5hcHBlbmQodmFsdWUtPmluZGV4KCkpOwotICAgIGlmIChpbmZvLmlzTG9jYWwo
KSkgewotICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoUmVzb2x2ZU1vZGVBbmRUeXBlKHJl
c29sdmVNb2RlLCBMb2NhbENsb3N1cmVWYXIpLm9wZXJhbmQoKSk7Ci0gICAgICAgIGludCBvcGVy
YW5kID0gcmVnaXN0ZXJGb3IoaW5mby5sb2NhbEluZGV4KCkpLmluZGV4KCk7Ci0gICAgICAgIGJv
b2wgaXNXYXRjaGFibGVWYXJpYWJsZSA9IGhhc1dhdGNoYWJsZVZhcmlhYmxlKG9wZXJhbmQpOwot
ICAgICAgICBBU1NFUlQoIWlzV2F0Y2hhYmxlVmFyaWFibGUgfHwgd2F0Y2hhYmxlVmFyaWFibGVJ
ZGVudGlmaWVyKG9wZXJhbmQpID09IGlkZW50aWZpZXIpOwotICAgICAgICBpbnN0cnVjdGlvbnMo
KS5hcHBlbmQoaXNXYXRjaGFibGVWYXJpYWJsZSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgQVNT
RVJUKHJlc29sdmVUeXBlKCkgIT0gTG9jYWxDbG9zdXJlVmFyKTsKLSAgICAgICAgaW5zdHJ1Y3Rp
b25zKCkuYXBwZW5kKFJlc29sdmVNb2RlQW5kVHlwZShyZXNvbHZlTW9kZSwgcmVzb2x2ZVR5cGUo
KSkub3BlcmFuZCgpKTsKLSAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGZhbHNlKTsKKyAg
ICBSZWdpc3RlcklEKiBzY29wZTsKKyAgICBzd2l0Y2ggKHZhcmlhYmxlLnZhck9mZnNldCgpLmtp
bmQoKSkgeworICAgIGNhc2UgU3RhY2tPZmZzZXQ6CisgICAgICAgIHNjb3BlID0gbnVsbHB0cjsK
KyAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgIGNhc2UgQ2FwdHVyZWRBcmd1bWVudEtpbmQ6
CisgICAgICAgIHNjb3BlID0gYXJndW1lbnRzUmVnaXN0ZXIoKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgICAgIAorICAgIGNhc2UgU2NvcGVPZmZzZXQ6CisgICAgICAgIHNjb3BlID0gc2NvcGVSZWdp
c3RlcigpOworICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgc2NvcGUgPSBudWxscHRyOwor
ICAgICAgICBicmVhazsKICAgICB9Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGluZm8ubG9j
YWxJbmRleCgpKTsKLSAgICByZXR1cm4gdmFsdWU7CisKKyAgICByZXR1cm4gZW1pdFB1dFRvU2Nv
cGUoc2NvcGUsIHZhcmlhYmxlLCB2YWx1ZSwgVGhyb3dJZk5vdEZvdW5kKTsKIH0KIAogUmVnaXN0
ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRJbnN0YW5jZU9mKFJlZ2lzdGVySUQqIGRzdCwg
UmVnaXN0ZXJJRCogdmFsdWUsIFJlZ2lzdGVySUQqIGJhc2VQcm90b3R5cGUpCi17IAorewogICAg
IGVtaXRPcGNvZGUob3BfaW5zdGFuY2VvZik7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGRz
dC0+aW5kZXgoKSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHZhbHVlLT5pbmRleCgpKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0
b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5
dGVjb2RlR2VuZXJhdG9yLmgJKHJldmlzaW9uIDE4MDcyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAt
MTgzLDU2ICsxODMsNzEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIElzQ2FwdHVyZWQKICAg
ICB9OwogCi0gICAgY2xhc3MgTG9jYWwgeworICAgIGNsYXNzIFZhcmlhYmxlIHsKICAgICBwdWJs
aWM6Ci0gICAgICAgIExvY2FsKCkKLSAgICAgICAgICAgIDogbV9sb2NhbCgwKQorICAgICAgICBl
bnVtIFZhcmlhYmxlS2luZCB7IE5vcm1hbFZhcmlhYmxlLCBTcGVjaWFsVmFyaWFibGUgfTsKKwor
ICAgICAgICBWYXJpYWJsZSgpCisgICAgICAgICAgICA6IG1fb2Zmc2V0KCkKKyAgICAgICAgICAg
ICwgbV9sb2NhbChudWxscHRyKQogICAgICAgICAgICAgLCBtX2F0dHJpYnV0ZXMoMCkKLSAgICAg
ICAgICAgICwgbV9raW5kKE5vcm1hbExvY2FsKQorICAgICAgICAgICAgLCBtX2tpbmQoTm9ybWFs
VmFyaWFibGUpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgVmFyaWFi
bGUoY29uc3QgSWRlbnRpZmllciYgaWRlbnQpCisgICAgICAgICAgICA6IG1faWRlbnQoaWRlbnQp
CisgICAgICAgICAgICAsIG1fbG9jYWwobnVsbHB0cikKKyAgICAgICAgICAgICwgbV9hdHRyaWJ1
dGVzKDApCisgICAgICAgICAgICAsIG1fa2luZChOb3JtYWxWYXJpYWJsZSkgLy8gVGhpcyBpcyBz
b21ld2hhdCBtZWFuaW5nbGVzcyBoZXJlIGZvciB0aGlzIGtpbmQgb2YgVmFyaWFibGUuCiAgICAg
ICAgIHsKICAgICAgICAgfQogCi0gICAgICAgIGVudW0gTG9jYWxLaW5kIHsgTm9ybWFsTG9jYWws
IFNwZWNpYWxMb2NhbCB9OwotCi0gICAgICAgIExvY2FsKFJlZ2lzdGVySUQqIGxvY2FsLCB1bnNp
Z25lZCBhdHRyaWJ1dGVzLCBMb2NhbEtpbmQga2luZCkKLSAgICAgICAgICAgIDogbV9sb2NhbChs
b2NhbCkKKyAgICAgICAgVmFyaWFibGUoY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIFZhck9mZnNl
dCBvZmZzZXQsIFJlZ2lzdGVySUQqIGxvY2FsLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBMb2NhbEtp
bmQga2luZCkKKyAgICAgICAgICAgIDogbV9pZGVudChpZGVudCkKKyAgICAgICAgICAgICwgbV9v
ZmZzZXQob2Zmc2V0KQorICAgICAgICAgICAgLCBtX2xvY2FsKGxvY2FsKQogICAgICAgICAgICAg
LCBtX2F0dHJpYnV0ZXMoYXR0cmlidXRlcykKICAgICAgICAgICAgICwgbV9raW5kKGtpbmQpCiAg
ICAgICAgIHsKICAgICAgICAgfQogCi0gICAgICAgIG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJl
dHVybiBtX2xvY2FsOyB9Ci0KLSAgICAgICAgUmVnaXN0ZXJJRCogZ2V0KCkgY29uc3QgeyByZXR1
cm4gbV9sb2NhbDsgfQorICAgICAgICAvLyBJZiBpdCdzIHVuc2V0LCB0aGVuIGl0IGlzIGEgbm9u
LWxvY2FsbHktc2NvcGVkIHZhcmlhYmxlLiBJZiBpdCBpcyBzZXQsIHRoZW4gaXQgY291bGQgYmUK
KyAgICAgICAgLy8gYSBzdGFjayB2YXJpYWJsZSwgYSBzY29wZWQgdmFyaWFibGUgaW4gdGhlIGxv
Y2FsIHNjb3BlLCBvciBhIHZhcmlhYmxlIGNhcHR1cmVkIGluIHRoZQorICAgICAgICAvLyBkaXJl
Y3QgYXJndW1lbnRzIG9iamVjdC4KKyAgICAgICAgYm9vbCBpc1Jlc29sdmVkKCkgY29uc3QgeyBy
ZXR1cm4gISFtX29mZnNldDsgfQorICAgICAgICAKKyAgICAgICAgY29uc3QgSWRlbnRpZmllciYg
aWRlbnQoKSBjb25zdCB7IHJldHVybiBtX2lkZW50OyB9CisgICAgICAgIAorICAgICAgICBWYXJP
ZmZzZXQgb2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQ7IH0KKyAgICAgICAgYm9vbCBp
c0xvY2FsKCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQuaXNTdGFjaygpOyB9CisgICAgICAgIFJl
Z2lzdGVySUQqIGxvY2FsKCkgY29uc3QgeyByZXR1cm4gbV9sb2NhbDsgfQogCiAgICAgICAgIGJv
b2wgaXNSZWFkT25seSgpIGNvbnN0IHsgcmV0dXJuIG1fYXR0cmlidXRlcyAmIFJlYWRPbmx5OyB9
Ci0gICAgICAgIGJvb2wgaXNTcGVjaWFsKCkgY29uc3QgeyByZXR1cm4gbV9raW5kICE9IE5vcm1h
bExvY2FsOyB9CisgICAgICAgIGJvb2wgaXNTcGVjaWFsKCkgY29uc3QgeyByZXR1cm4gbV9raW5k
ICE9IE5vcm1hbFZhcmlhYmxlOyB9CiAKICAgICBwcml2YXRlOgorICAgICAgICBJZGVudGlmaWVy
IG1faWRlbnQ7CisgICAgICAgIFZhck9mZmV0IG1fb2Zmc3Q7CiAgICAgICAgIFJlZ2lzdGVySUQq
IG1fbG9jYWw7CiAgICAgICAgIHVuc2lnbmVkIG1fYXR0cmlidXRlczsKICAgICAgICAgTG9jYWxL
aW5kIG1fa2luZDsKICAgICB9OwogCi0gICAgc3RydWN0IFJlc29sdmVTY29wZUluZm8gewotICAg
ICAgICBSZXNvbHZlU2NvcGVJbmZvKCkKLSAgICAgICAgICAgIDogbV9sb2NhbEluZGV4KDApCi0g
ICAgICAgICAgICAsIG1fcmVzb2x2ZVNjb3BlS2luZChOb25Mb2NhbFNjb3BlKQorICAgIHN0cnVj
dCBWYXJpYWJsZUFkZFJlc3VsdCB7CisgICAgICAgIFZhcmlhYmxlQWRkUmVzdWx0KCkKKyAgICAg
ICAgICAgIDogaXNOZXdWYXJpYWJsZShmYWxzZSkKICAgICAgICAgewogICAgICAgICB9Ci0KLSAg
ICAgICAgUmVzb2x2ZVNjb3BlSW5mbyhpbnQgaW5kZXgpCi0gICAgICAgICAgICA6IG1fbG9jYWxJ
bmRleChpbmRleCkKLSAgICAgICAgICAgICwgbV9yZXNvbHZlU2NvcGVLaW5kKExvY2FsU2NvcGUp
CisgICAgICAgIAorICAgICAgICBWYXJpYWJsZUFkZFJlc3VsdChjb25zdCBWYXJpYWJsZSYgdmFy
aWFibGUsIGJvb2wgaXNOZXdWYXJpYWJsZSkKKyAgICAgICAgICAgIDogdmFyaWFibGUodmFyaWFi
bGUpCisgICAgICAgICAgICAsIGlzTmV3VmFyaWFibGUoaXNOZXdWYXJpYWJsZSkKICAgICAgICAg
ewogICAgICAgICB9Ci0KLSAgICAgICAgYm9vbCBpc0xvY2FsKCkgY29uc3QgeyByZXR1cm4gbV9y
ZXNvbHZlU2NvcGVLaW5kID09IExvY2FsU2NvcGU7IH0KLSAgICAgICAgaW50IGxvY2FsSW5kZXgo
KSBjb25zdCB7IHJldHVybiBtX2xvY2FsSW5kZXg7IH0KLQotICAgIHByaXZhdGU6Ci0gICAgICAg
IGludCBtX2xvY2FsSW5kZXg7Ci0gICAgICAgIGVudW0geyBMb2NhbFNjb3BlLCBOb25Mb2NhbFNj
b3BlIH0gbV9yZXNvbHZlU2NvcGVLaW5kOworICAgICAgICAKKyAgICAgICAgVmFyaWFibGUgdmFy
aWFibGU7CisgICAgICAgIGJvb2wgaXNOZXdWYXJpYWJsZTsKICAgICB9OwogCiAgICAgc3RydWN0
IFRyeVJhbmdlIHsKQEAgLTI4NSwxMiArMzAwLDEzIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICBib29sIGlzQ2FwdHVyZWQoaW50IG9wZXJhbmQpOwogICAgICAgICBDYXB0dXJlTW9kZSBjYXB0
dXJlTW9kZShpbnQgb3BlcmFuZCkgeyByZXR1cm4gaXNDYXB0dXJlZChvcGVyYW5kKSA/IElzQ2Fw
dHVyZWQgOiBOb3RDYXB0dXJlZDsgfQogICAgICAgICAKLSAgICAgICAgTG9jYWwgbG9jYWwoY29u
c3QgSWRlbnRpZmllciYpOwotICAgICAgICBMb2NhbCBjb25zdExvY2FsKGNvbnN0IElkZW50aWZp
ZXImKTsKLQorICAgICAgICBWYXJpYWJsZSB2YXJpYWJsZShjb25zdCBJZGVudGlmaWVyJik7Cisg
ICAgICAgIGJvb2wgaGFzVmFyaWFibGVEaXJlY3QoY29uc3QgSWRlbnRpZmllciYpOyAvLyBUcnVl
IGlmIGNyZWF0ZVZhcmlhYmxlKCkgd2lsbCBjcmVhdGUgYSBuZXcgdmFyaWFibGUuCisgICAgICAg
IFZhcmlhYmxlQWRkUmVzdWx0IGNyZWF0ZVZhcmlhYmxlKGNvbnN0IElkZW50aWZpZXImLCBWYXJL
aW5kLCBDb25zdGFudE1vZGUpOworICAgICAgICAKICAgICAgICAgLy8gUmV0dXJucyB0aGUgcmVn
aXN0ZXIgc3RvcmluZyAidGhpcyIKICAgICAgICAgUmVnaXN0ZXJJRCogdGhpc1JlZ2lzdGVyKCkg
eyByZXR1cm4gJm1fdGhpc1JlZ2lzdGVyOyB9Ci0gICAgICAgIAorICAgICAgICBSZWdpc3RlcklE
KiBhcmd1bWVudHNSZWdpc3RlcigpIHsgcmV0dXJuIG1fYXJndW1lbnRzUmVnaXN0ZXI7IH0KICAg
ICAgICAgUmVnaXN0ZXJJRCogc2NvcGVSZWdpc3RlcigpIHsgcmV0dXJuIG1fc2NvcGVSZWdpc3Rl
cjsgfQogCiAgICAgICAgIC8vIFJldHVybnMgdGhlIG5leHQgYXZhaWxhYmxlIHRlbXBvcmFyeSBy
ZWdpc3Rlci4gUmVnaXN0ZXJzIHJldHVybmVkIGJ5CkBAIC01MDIsMTAgKzUxOCwxMSBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0VG9QcmltaXRpdmUoUmVnaXN0ZXJJRCogZHN0
LCBSZWdpc3RlcklEKiBzcmMpOwogCiAgICAgICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKCk7
Ci0gICAgICAgIFJlZ2lzdGVySUQqIGVtaXRSZXNvbHZlQ29uc3RhbnRMb2NhbChSZWdpc3RlcklE
KiBkc3QsIGNvbnN0IElkZW50aWZpZXImLCBSZXNvbHZlU2NvcGVJbmZvJik7Ci0gICAgICAgIFJl
Z2lzdGVySUQqIGVtaXRSZXNvbHZlU2NvcGUoUmVnaXN0ZXJJRCogZHN0LCBjb25zdCBJZGVudGlm
aWVyJiwgUmVzb2x2ZVNjb3BlSW5mbyYpOwotICAgICAgICBSZWdpc3RlcklEKiBlbWl0R2V0RnJv
bVNjb3BlKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogc2NvcGUsIGNvbnN0IElkZW50aWZp
ZXImLCBSZXNvbHZlTW9kZSwgY29uc3QgUmVzb2x2ZVNjb3BlSW5mbyYpOwotICAgICAgICBSZWdp
c3RlcklEKiBlbWl0UHV0VG9TY29wZShSZWdpc3RlcklEKiBzY29wZSwgY29uc3QgSWRlbnRpZmll
ciYsIFJlZ2lzdGVySUQqIHZhbHVlLCBSZXNvbHZlTW9kZSwgY29uc3QgUmVzb2x2ZVNjb3BlSW5m
byYpOworICAgICAgICBSZWdpc3RlcklEKiBlbWl0UmVzb2x2ZUNvbnN0YW50TG9jYWwoUmVnaXN0
ZXJJRCogZHN0LCBjb25zdCBWYXJpYWJsZSYpOworICAgICAgICBSZWdpc3RlcklEKiBlbWl0UmVz
b2x2ZVNjb3BlKFJlZ2lzdGVySUQqIGRzdCwgY29uc3QgVmFyaWFibGUmKTsKKyAgICAgICAgUmVn
aXN0ZXJJRCogZW1pdEdldEZyb21TY29wZShSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHNj
b3BlLCBjb25zdCBWYXJpYWJsZSYsIFJlc29sdmVNb2RlKTsKKyAgICAgICAgUmVnaXN0ZXJJRCog
ZW1pdFB1dFRvU2NvcGUoUmVnaXN0ZXJJRCogc2NvcGUsIGNvbnN0IFZhcmlhYmxlJiwgUmVnaXN0
ZXJJRCogdmFsdWUsIFJlc29sdmVNb2RlKTsKKyAgICAgICAgUmVnaXN0ZXJJRCogaW5pdGlhbGl6
ZVZhcmlhYmxlKGNvbnN0IFZhcmlhYmxlJiwgUmVnaXN0ZXJJRCogdmFsdWUpOwogCiAgICAgICAg
IFBhc3NSZWZQdHI8TGFiZWw+IGVtaXRMYWJlbChMYWJlbCopOwogICAgICAgICB2b2lkIGVtaXRM
b29wSGludCgpOwpAQCAtNjExLDExICs2MjgsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAg
ICBSZWdpc3RlcklEKiBuZXdSZWdpc3RlcigpOwogCi0gICAgICAgIC8vIEFkZHMgYSB2YXIgc2xv
dCBhbmQgbWFwcyBpdCB0byB0aGUgbmFtZSBpZGVudCBpbiBzeW1ib2xUYWJsZSgpLgotICAgICAg
ICBlbnVtIFdhdGNoTW9kZSB7IElzV2F0Y2hhYmxlLCBOb3RXYXRjaGFibGUgfTsKLSAgICAgICAg
UmVnaXN0ZXJJRCogYWRkVmFyKGNvbnN0IElkZW50aWZpZXImLCBDb25zdGFudE1vZGUsIFdhdGNo
TW9kZSk7Ci0KLSAgICAgICAgLy8gQWRkcyBhbiBhbm9ueW1vdXMgdmFyIHNsb3QuIFRvIGdpdmUg
dGhpcyBzbG90IGEgbmFtZSwgYWRkIGl0IHRvIHN5bWJvbFRhYmxlKCkuCisgICAgICAgIC8vIEFk
ZHMgYW4gYW5vbnltb3VzIGxvY2FsIHZhciBzbG90LiBUbyBnaXZlIHRoaXMgc2xvdCBhIG5hbWUs
IGFkZCBpdCB0byBzeW1ib2xUYWJsZSgpLgogICAgICAgICBSZWdpc3RlcklEKiBhZGRWYXIoKQog
ICAgICAgICB7CiAgICAgICAgICAgICArK21fY29kZUJsb2NrLT5tX251bVZhcnM7CkBAIC02MjUs
MTQgKzYzOCwxNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7
CiAgICAgICAgIH0KIAotICAgICAgICAvLyBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgYWRkZWQg
dmFyLgotICAgICAgICB2b2lkIGFkZFBhcmFtZXRlcihjb25zdCBJZGVudGlmaWVyJiwgaW50IHBh
cmFtZXRlckluZGV4KTsKKyAgICAgICAgLy8gSW5pdGlhbGl6ZXMgdGhlIHN0YWNrIGZvcm0gdGhl
IHBhcmFtZXRlcjsgZG9lcyBub3RoaW5nIGZvciB0aGUgc3ltYm9sIHRhYmxlLgorICAgICAgICBS
ZWdpc3RlcklEKiBpbml0aWFsaXplTmV4dFBhcmFtZXRlcigpOworICAgICAgICBTdHJpbmdJbXBs
KiB2aXNpYmxlTmFtZUZvclBhcmFtZXRlcihEZWNvbnN0cnVjdGlvblBhdHRlcm5Ob2RlKiBwYXR0
ZXJuKTsKKyAgICAgICAgCiAgICAgICAgIFJlZ2lzdGVySUQqIHJlc29sdmVDYWxsZWUoRnVuY3Rp
b25Ob2RlKik7CiAgICAgICAgIHZvaWQgYWRkQ2FsbGVlKEZ1bmN0aW9uTm9kZSosIFJlZ2lzdGVy
SUQqKTsKIAogICAgICAgICB2b2lkIHByZXNlcnZlTGFzdFZhcigpOwogCi0gICAgICAgIFJlZ2lz
dGVySUQmIHJlZ2lzdGVyRm9yKGludCBpbmRleCkKKyAgICAgICAgUmVnaXN0ZXJJRCYgcmVnaXN0
ZXJGb3IoVmlydHVhbFJlZ2lzdGVyKQogICAgICAgICB7CiAgICAgICAgICAgICBpZiAob3BlcmFu
ZElzTG9jYWwoaW5kZXgpKQogICAgICAgICAgICAgICAgIHJldHVybiBtX2NhbGxlZVJlZ2lzdGVy
c1tWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgpLnRvTG9jYWwoKV07CkBAIC02NjEsNyArNjc2LDYgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIAogICAgICAgICBSZWdpc3RlcklEKiBlbWl0Q29uc3Ry
dWN0VmFyYXJncyhSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGZ1bmMsIFJlZ2lzdGVySUQq
IHRoaXNSZWdpc3RlciwgUmVnaXN0ZXJJRCogYXJndW1lbnRzLCBSZWdpc3RlcklEKiBmaXJzdEZy
ZWVSZWdpc3RlciwgaW50MzJfdCBmaXJzdFZhckFyZ09mZnNldCwgUmVnaXN0ZXJJRCogcHJvZmls
ZUhvb2tSZWdpc3RlciwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90LCBjb25zdCBKU1RleHRQ
b3NpdGlvbiYgZGl2b3RTdGFydCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90RW5kKTsKICAg
ICAgICAgUmVnaXN0ZXJJRCogZW1pdENhbGxWYXJhcmdzKE9wY29kZUlELCBSZWdpc3RlcklEKiBk
c3QsIFJlZ2lzdGVySUQqIGZ1bmMsIFJlZ2lzdGVySUQqIHRoaXNSZWdpc3RlciwgUmVnaXN0ZXJJ
RCogYXJndW1lbnRzLCBSZWdpc3RlcklEKiBmaXJzdEZyZWVSZWdpc3RlciwgaW50MzJfdCBmaXJz
dFZhckFyZ09mZnNldCwgUmVnaXN0ZXJJRCogcHJvZmlsZUhvb2tSZWdpc3RlciwgY29uc3QgSlNU
ZXh0UG9zaXRpb24mIGRpdm90LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RTdGFydCwgY29u
c3QgSlNUZXh0UG9zaXRpb24mIGRpdm90RW5kKTsKLSAgICAgICAgUmVnaXN0ZXJJRCogaW5pdGlh
bGl6ZUNhcHR1cmVkVmFyaWFibGUoUmVnaXN0ZXJJRCogZHN0LCBjb25zdCBJZGVudGlmaWVyJiwg
UmVnaXN0ZXJJRCopOwogCiAgICAgICAgIC8vIFdlJ2xsIG1heSB3YW50IGEgbm9uLXJldHVybiBt
b2RlIGluIGZ1dHVyZSwgYnV0IGN1cnJlbnRseQogICAgICAgICAvLyB0aGlzIGlzIG9ubHkgdXNl
ZCBkdXJpbmcgZW1pdFJldHVybigpLiBlbWl0UmV0dXJuKCkgb2NjdXJzCkBAIC03MTYsMzAgKzcz
MCw2IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRUaHJvd0V4
cHJlc3Npb25Ub29EZWVwRXhjZXB0aW9uKCk7CiAKLSAgICAgICAgdm9pZCBjcmVhdGVBcmd1bWVu
dHNJZk5lY2Vzc2FyeSgpOwotICAgICAgICBSZWdpc3RlcklEKiBjcmVhdGVMYXp5UmVnaXN0ZXJJ
Zk5lY2Vzc2FyeShSZWdpc3RlcklEKik7Ci0gICAgICAgIAotICAgICAgICBib29sIGhhc1dhdGNo
YWJsZVZhcmlhYmxlKGludCBvcGVyYW5kKSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICBW
aXJ0dWFsUmVnaXN0ZXIgcmVnKG9wZXJhbmQpOwotICAgICAgICAgICAgaWYgKCFyZWcuaXNMb2Nh
bCgpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGlmIChzdGF0
aWNfY2FzdDxzaXplX3Q+KHJlZy50b0xvY2FsKCkpID49IG1fd2F0Y2hhYmxlVmFyaWFibGVzLnNp
emUoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBjb25zdCBJ
ZGVudGlmaWVyJiBpZGVudCA9IG1fd2F0Y2hhYmxlVmFyaWFibGVzW3JlZy50b0xvY2FsKCldOwot
ICAgICAgICAgICAgaWYgKGlkZW50LmlzTnVsbCgpKQotICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgICAgIEFTU0VSVChoYXNDb25zdGFudChpZGVudCkpOyAvLyBTaG91bGQg
aGF2ZSBhbHJlYWR5IGJlZW4gYWRkZWQuCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAg
ICAgfQotICAgICAgICAKLSAgICAgICAgY29uc3QgSWRlbnRpZmllciYgd2F0Y2hhYmxlVmFyaWFi
bGVJZGVudGlmaWVyKGludCBvcGVyYW5kKSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICBB
U1NFUlQoaGFzV2F0Y2hhYmxlVmFyaWFibGUob3BlcmFuZCkpOwotICAgICAgICAgICAgVmlydHVh
bFJlZ2lzdGVyIHJlZyhvcGVyYW5kKTsKLSAgICAgICAgICAgIHJldHVybiBtX3dhdGNoYWJsZVZh
cmlhYmxlc1tyZWcudG9Mb2NhbCgpXTsKLSAgICAgICAgfQotCiAgICAgcHJpdmF0ZToKICAgICAg
ICAgVmVjdG9yPFVubGlua2VkSW5zdHJ1Y3Rpb24sIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93PiBt
X2luc3RydWN0aW9uczsKIApAQCAtNzU4LDE0ICs3NDgsMTUgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIFJlZ2lzdGVySUQgbV90aGlzUmVnaXN0ZXI7CiAgICAgICAgIFJlZ2lzdGVySUQgbV9j
YWxsZWVSZWdpc3RlcjsKICAgICAgICAgUmVnaXN0ZXJJRCogbV9zY29wZVJlZ2lzdGVyIHsgbnVs
bHB0ciB9OworICAgICAgICBSZWdpc3RlcklEKiBtX2FyZ3VtZW50c1JlZ2lzdGVyIHsgbnVsbHB0
ciB9OwogICAgICAgICBSZWdpc3RlcklEKiBtX2xleGljYWxFbnZpcm9ubWVudFJlZ2lzdGVyIHsg
bnVsbHB0ciB9OwogICAgICAgICBSZWdpc3RlcklEKiBtX2VtcHR5VmFsdWVSZWdpc3RlciB7IG51
bGxwdHIgfTsKICAgICAgICAgUmVnaXN0ZXJJRCogbV9nbG9iYWxPYmplY3RSZWdpc3RlciB7IG51
bGxwdHIgfTsKICAgICAgICAgUmVnaXN0ZXJJRCogbV9sb2NhbEFyZ3VtZW50c1JlZ2lzdGVyIHsg
bnVsbHB0ciB9OwogCi0gICAgICAgIFZlY3RvcjxJZGVudGlmaWVyLCAxNj4gbV93YXRjaGFibGVW
YXJpYWJsZXM7CiAgICAgICAgIFNlZ21lbnRlZFZlY3RvcjxSZWdpc3RlcklELCAzMj4gbV9jb25z
dGFudFBvb2xSZWdpc3RlcnM7CiAgICAgICAgIFNlZ21lbnRlZFZlY3RvcjxSZWdpc3RlcklELCAz
Mj4gbV9jYWxsZWVSZWdpc3RlcnM7CisgICAgICAgIHVuc2lnbmVkIG1fbnVtQ2FwdHVyZWRWYXJp
YWJsZXM7CiAgICAgICAgIFNlZ21lbnRlZFZlY3RvcjxSZWdpc3RlcklELCAzMj4gbV9wYXJhbWV0
ZXJzOwogICAgICAgICBTZWdtZW50ZWRWZWN0b3I8TGFiZWwsIDMyPiBtX2xhYmVsczsKICAgICAg
ICAgTGFiZWxTY29wZVN0b3JlIG1fbGFiZWxTY29wZXM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCShyZXZpc2lvbiAx
ODA3MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdl
bi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk2Miw3ICs5NjIsNyBAQCBSZWdpc3RlcklEKiBWb2lk
Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjCiAgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0TG9hZChk
c3QsIGpzVW5kZWZpbmVkKCkpOwogfQogCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0gVHlwZU9mVmFsdWVOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisv
LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVHlwZU9mUmVzb2x2ZU5vZGUgLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogUmVnaXN0ZXJJRCogVHlwZU9mUmVzb2x2
ZU5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3Rl
cklEKiBkc3QpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0
SGVhcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJh
Y3RIZWFwLmgJKHJldmlzaW9uIDE4MDcyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQWJzdHJhY3RIZWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDcgKzQ3LDYgQEAgbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAgIG1hY3JvKFdvcmxkKSBcCiAgICAgbWFjcm8o
U3RhY2spIFwKICAgICBtYWNybyhIZWFwKSBcCi0gICAgbWFjcm8oQXJndW1lbnRzX3JlZ2lzdGVy
cykgXAogICAgIG1hY3JvKEJ1dHRlcmZseV9wdWJsaWNMZW5ndGgpIFwKICAgICBtYWNybyhCdXR0
ZXJmbHlfdmVjdG9yTGVuZ3RoKSBcCiAgICAgbWFjcm8oR2V0dGVyU2V0dGVyX2dldHRlcikgXApA
QCAtNjUsNyArNjQsOCBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAgbWFj
cm8oSW5kZXhlZENvbnRpZ3VvdXNQcm9wZXJ0aWVzKSBcCiAgICAgbWFjcm8oSW5kZXhlZEFycmF5
U3RvcmFnZVByb3BlcnRpZXMpIFwKICAgICBtYWNybyhBcnJheVN0b3JhZ2VQcm9wZXJ0aWVzKSBc
Ci0gICAgbWFjcm8oVmFyaWFibGVzKSBcCisgICAgbWFjcm8oRGlyZWN0QXJndW1lbnRzUHJvcGVy
dGllcykgXAorICAgIG1hY3JvKFNjb3BlZEFyZ3VtZW50c1Byb3BlcnRpZXMpIFwKICAgICBtYWNy
byhUeXBlZEFycmF5UHJvcGVydGllcykgXAogICAgIG1hY3JvKEhlYXBPYmplY3RDb3VudCkgLyog
VXNlZCB0byByZWZsZWN0IHRoZSBmYWN0IHRoYXQgc29tZSBhbGxvY2F0aW9ucyByZXZlYWwgb2Jq
ZWN0IGlkZW50aXR5ICovXAogICAgIG1hY3JvKFJlZ0V4cFN0YXRlKSBcCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVy
SW5saW5lcy5oCShyZXZpc2lvbiAxODA3MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMzAs
NyArMTAzMCw4IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAg
ICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KG1fZ3Jh
cGgsIG1fZ3JhcGgubV92bS5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpOwogICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czoKKyAgICAgICAgY2FzZSBBcnJheTo6
RGlyZWN0QXJndW1lbnRzOgorICAgICAgICBjYXNlIEFycmF5OjpTY29wZWRBcmd1bWVudHM6CiAg
ICAgICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VIZWFwVG9wKCk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgY2FzZSBBcnJheTo6SW50MzI6CkBAIC0xNjE3LDggKzE2MTgsMTEgQEAgYm9v
bCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICBjYXNlIEFycmF5
OjpBcnJheVN0b3JhZ2U6CiAgICAgICAgIGNhc2UgQXJyYXk6OlNsb3dQdXRBcnJheVN0b3JhZ2U6
CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6QXJndW1lbnRzOgotICAg
ICAgICAgICAgZmlsdGVyKG5vZGUtPmNoaWxkMSgpLCBTcGVjQXJndW1lbnRzKTsKKyAgICAgICAg
Y2FzZSBBcnJheTo6RGlyZWN0QXJndW1lbnRzOgorICAgICAgICAgICAgZmlsdGVyKG5vZGUtPmNo
aWxkMSgpLCBTcGVjRGlyZWN0QXJndW1lbnRzKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIEFycmF5OjpTY29wZWRBcmd1bWVudHM6CisgICAgICAgICAgICBmaWx0ZXIobm9kZS0+
Y2hpbGQxKCksIFNwZWNTY29wZWRBcmd1bWVudHMpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIGNhc2UgQXJyYXk6OkludDhBcnJheToKICAgICAgICAgICAgIGZpbHRlcihub2RlLT5jaGls
ZDEoKSwgU3BlY0ludDhBcnJheSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0FycmF5TW9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBcnJheU1vZGUuY3BwCShyZXZpc2lvbiAxODA3MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0FycmF5TW9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5Nyw4ICsxOTcsMTUg
QEAgQXJyYXlNb2RlIEFycmF5TW9kZTo6cmVmaW5lKAogICAgICAgICBpZiAoaXNTdHJpbmdTcGVj
dWxhdGlvbihiYXNlKSkKICAgICAgICAgICAgIHJldHVybiB3aXRoVHlwZShBcnJheTo6U3RyaW5n
KTsKICAgICAgICAgCi0gICAgICAgIGlmIChpc0FyZ3VtZW50c1NwZWN1bGF0aW9uKGJhc2UpKQot
ICAgICAgICAgICAgcmV0dXJuIHdpdGhUeXBlKEFycmF5OjpBcmd1bWVudHMpOworICAgICAgICBp
ZiAoaXNEaXJlY3RBcmd1bWVudHNTcGVjdWxhdGlvbihiYXNlKSB8fCBpc1Njb3BlZEFyZ3VtZW50
c1NwZWN1bGF0aW9uKGJhc2UpKSB7CisgICAgICAgICAgICAvLyBIYW5kbGUgb3V0LW9mLWJvdW5k
cyBhY2Nlc3NlcyBhcyBnZW5lcmljIGFjY2Vzc2VzLgorICAgICAgICAgICAgaWYgKGdyYXBoLmhh
c0V4aXRTaXRlKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgT3V0T2ZCb3VuZHMpIHx8ICFpc0luQm91
bmRzKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIEFycmF5TW9kZShBcnJheTo6R2VuZXJpYyk7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChpc0RpcmVjdEFyZ3VtZW50c1NwZWN1bGF0
aW9uKGJhc2UpKQorICAgICAgICAgICAgICAgIHJldHVybiB3aXRoVHlwZShBcnJheTo6RGlyZWN0
QXJndW1lbnRzKTsKKyAgICAgICAgICAgIHJldHVybiB3aXRoVHlwZShBcnJheTo6U2NvcGVkQXJn
dW1lbnRzKTsKKyAgICAgICAgfQogICAgICAgICAKICAgICAgICAgQXJyYXlNb2RlIHJlc3VsdDsK
ICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CkBAIC0zOTYsOCArNDAzLDExIEBAIGJvb2wg
QXJyYXlNb2RlOjphbHJlYWR5Q2hlY2tlZChHcmFwaCYgZ3IKICAgICAgICAgICAgIHJldHVybiB0
cnVlOwogICAgICAgICB9IH0KICAgICAgICAgCi0gICAgY2FzZSBBcnJheTo6QXJndW1lbnRzOgot
ICAgICAgICByZXR1cm4gc3BlY3VsYXRpb25DaGVja2VkKHZhbHVlLm1fdHlwZSwgU3BlY0FyZ3Vt
ZW50cyk7CisgICAgY2FzZSBBcnJheTo6RGlyZWN0QXJndW1lbnRzOgorICAgICAgICByZXR1cm4g
c3BlY3VsYXRpb25DaGVja2VkKHZhbHVlLm1fdHlwZSwgU3BlY0RpcmVjdEFyZ3VtZW50cyk7Cisg
ICAgICAgIAorICAgIGNhc2UgQXJyYXk6OlNjb3BlZEFyZ3VtZW50czoKKyAgICAgICAgcmV0dXJu
IHNwZWN1bGF0aW9uQ2hlY2tlZCh2YWx1ZS5tX3R5cGUsIFNwZWNTY29wZWRBcmd1bWVudHMpOwog
ICAgICAgICAKICAgICBjYXNlIEFycmF5OjpJbnQ4QXJyYXk6CiAgICAgICAgIHJldHVybiBzcGVj
dWxhdGlvbkNoZWNrZWQodmFsdWUubV90eXBlLCBTcGVjSW50OEFycmF5KTsKQEAgLTQ2MSw4ICs0
NzEsMTAgQEAgY29uc3QgY2hhciogYXJyYXlUeXBlVG9TdHJpbmcoQXJyYXk6OlR5cAogICAgICAg
ICByZXR1cm4gIkFycmF5U3RvcmFnZSI7CiAgICAgY2FzZSBBcnJheTo6U2xvd1B1dEFycmF5U3Rv
cmFnZToKICAgICAgICAgcmV0dXJuICJTbG93UHV0QXJyYXlTdG9yYWdlIjsKLSAgICBjYXNlIEFy
cmF5OjpBcmd1bWVudHM6Ci0gICAgICAgIHJldHVybiAiQXJndW1lbnRzIjsKKyAgICBjYXNlIEFy
cmF5OjpEaXJlY3RBcmd1bWVudHM6CisgICAgICAgIHJldHVybiAiRGlyZWN0QXJndW1lbnRzIjsK
KyAgICBjYXNlIEFycmF5OjpTY29wZWRBcmd1bWVudHM6CisgICAgICAgIHJldHVybiAiU2NvcGVk
QXJndW1lbnRzIjsKICAgICBjYXNlIEFycmF5OjpJbnQ4QXJyYXk6CiAgICAgICAgIHJldHVybiAi
SW50OEFycmF5IjsKICAgICBjYXNlIEFycmF5OjpJbnQxNkFycmF5OgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5oCShyZXZpc2lvbiAxODA3MjApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMywgMjAxNCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTY1LDcgKzY1LDkgQEAgZW51bSBUeXBlIHsKICAgICBBcnJheVN0b3JhZ2UsCiAgICAg
U2xvd1B1dEFycmF5U3RvcmFnZSwKICAgICAKLSAgICBBcmd1bWVudHMsCisgICAgRGlyZWN0QXJn
dW1lbnRzLAorICAgIFNjb3BlZEFyZ3VtZW50cywKKyAgICAKICAgICBJbnQ4QXJyYXksCiAgICAg
SW50MTZBcnJheSwKICAgICBJbnQzMkFycmF5LApAQCAtMjk0LDcgKzI5Niw4IEBAIHB1YmxpYzoK
ICAgICAgICAgY2FzZSBBcnJheTo6VW5wcm9maWxlZDoKICAgICAgICAgY2FzZSBBcnJheTo6Rm9y
Y2VFeGl0OgogICAgICAgICBjYXNlIEFycmF5OjpHZW5lcmljOgotICAgICAgICBjYXNlIEFycmF5
OjpBcmd1bWVudHM6CisgICAgICAgIGNhc2UgQXJyYXk6OkRpcmVjdEFyZ3VtZW50czoKKyAgICAg
ICAgY2FzZSBBcnJheTo6U2NvcGVkQXJndW1lbnRzOgogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0zMjAsMTEg
KzMyMyw5IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHN3aXRjaCAodHlwZSgpKSB7CiAgICAg
ICAgIGNhc2UgQXJyYXk6OlN0cmluZzoKKyAgICAgICAgY2FzZSBBcnJheTo6RGlyZWN0QXJndW1l
bnRzOgorICAgICAgICBjYXNlIEFycmF5OjpTY29wZWRBcmd1bWVudHM6CiAgICAgICAgICAgICBy
ZXR1cm4gQXJyYXlNb2RlKEFycmF5OjpHZW5lcmljKTsKLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQot
ICAgICAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6Ci0gICAgICAgICAgICByZXR1cm4gQXJyYXlN
b2RlKEFycmF5OjpHZW5lcmljKTsKLSNlbmRpZgogICAgICAgICBkZWZhdWx0OgogICAgICAgICAg
ICAgcmV0dXJuICp0aGlzOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Nsb2JiZXJpemUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Nsb2JiZXJpemUuaAkocmV2aXNpb24gMTgwNzIwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2NiwxMCArNDY2
LDE0IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICAgICAg
ICAgIGRlZihQdXJlVmFsdWUobm9kZSwgbW9kZS5hc1dvcmQoKSkpOwogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czoKLSAgICAg
ICAgICAgIHJlYWQoQXJndW1lbnRzX3JlZ2lzdGVycyk7Ci0gICAgICAgICAgICByZWFkKFZhcmlh
Ymxlcyk7Ci0gICAgICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEluZGV4ZWRQcm9wZXJ0eUxvYywg
VmFyaWFibGVzLCBub2RlLT5jaGlsZDEoKSwgbm9kZS0+Y2hpbGQyKCkpLCBub2RlKTsKKyAgICAg
ICAgY2FzZSBBcnJheTo6RGlyZWN0QXJndW1lbnRzOgorICAgICAgICAgICAgcmVhZChEaXJlY3RB
cmd1bWVudHNQcm9wZXJ0aWVzKTsKKyAgICAgICAgICAgIGRlZihIZWFwTG9jYXRpb24oSW5kZXhl
ZFByb3BlcnR5TG9jLCBEaXJlY3RBcmd1bWVudHNQcm9wZXJ0aWVzLCBub2RlLT5jaGlsZDEoKSwg
bm9kZS0+Y2hpbGQyKCkpLCBub2RlKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IAorICAgICAgICBjYXNlIEFycmF5OjpTY29wZWRBcmd1bWVudHM6CisgICAgICAgICAgICByZWFk
KFNjb3BlZEFyZ3VtZW50c1Byb3BlcnRpZXMpOworICAgICAgICAgICAgZGVmKEhlYXBMb2NhdGlv
bihJbmRleGVkUHJvcGVydHlMb2MsIFNjb3BlZEFyZ3VtZW50c1Byb3BlcnRpZXMsIG5vZGUtPmNo
aWxkMSgpLCBub2RlLT5jaGlsZDIoKSksIG5vZGUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICAgICAgCiAgICAgICAgIGNhc2UgQXJyYXk6OkludDMyOgpAQCAtNTYwLDEzICs1NjQsNiBA
QCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgICAgICAgICB3
cml0ZShIZWFwKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIAotICAgICAgICBj
YXNlIEFycmF5OjpBcmd1bWVudHM6Ci0gICAgICAgICAgICByZWFkKEFyZ3VtZW50c19yZWdpc3Rl
cnMpOwotICAgICAgICAgICAgcmVhZChNaXNjRmllbGRzKTsKLSAgICAgICAgICAgIHdyaXRlKFZh
cmlhYmxlcyk7Ci0gICAgICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEluZGV4ZWRQcm9wZXJ0eUxv
YywgVmFyaWFibGVzLCBiYXNlLCBpbmRleCksIHZhbHVlKTsKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFycmF5OjpJbnQzMjoKICAgICAgICAgICAgIGlm
IChub2RlLT5hcnJheU1vZGUoKS5pc091dE9mQm91bmRzKCkpIHsKICAgICAgICAgICAgICAgICBy
ZWFkKFdvcmxkKTsKQEAgLTc2MSw3ICs3NTgsOCBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdy
YXBoLCBOb2RlKiBub2RlCiAgICAgICAgICAgICBkZWYoUHVyZVZhbHVlKG5vZGUsIG1vZGUuYXNX
b3JkKCkpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIAotICAgICAgICBjYXNl
IEFycmF5OjpBcmd1bWVudHM6CisgICAgICAgIGNhc2UgQXJyYXk6OkRpcmVjdEFyZ3VtZW50czoK
KyAgICAgICAgY2FzZSBBcnJheTo6U2NvcGVkQXJndW1lbnRzOgogICAgICAgICAgICAgcmVhZChN
aXNjRmllbGRzKTsKICAgICAgICAgICAgIGRlZihIZWFwTG9jYXRpb24oQXJyYXlMZW5ndGhMb2Ms
IE1pc2NGaWVsZHMsIG5vZGUtPmNoaWxkMSgpKSwgbm9kZSk7CiAgICAgICAgICAgICByZXR1cm47
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHJl
dmlzaW9uIDE4MDcyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFz
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY4Miw3ICs2ODIsNiBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgY2FzZSBBcnJheTo6Q29udGlndW91czoKICAgICAgICAgICAgIGNhc2UgQXJyYXk6OkFy
cmF5U3RvcmFnZToKICAgICAgICAgICAgIGNhc2UgQXJyYXk6OlNsb3dQdXRBcnJheVN0b3JhZ2U6
Ci0gICAgICAgICAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6CiAgICAgICAgICAgICAgICAgZml4
RWRnZTxLbm93bkNlbGxVc2U+KGNoaWxkMSk7CiAgICAgICAgICAgICAgICAgZml4RWRnZTxJbnQz
MlVzZT4oY2hpbGQyKTsKICAgICAgICAgICAgICAgICBpbnNlcnRTdG9yZUJhcnJpZXIobV9pbmRl
eEluQmxvY2ssIGNoaWxkMSwgY2hpbGQzKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMTgwNzIwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjU5OCw4ICsyNTk4LDExIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGUoTm9kZSogbm9kZSkKICAgICAgICAgY2FzZSBBcnJheTo6U3RyaW5nOgogICAgICAgICAgICAg
Y29tcGlsZUdldEJ5VmFsT25TdHJpbmcobm9kZSk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBBcnJheTo6QXJndW1lbnRzOgotICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25B
cmd1bWVudHMobm9kZSk7CisgICAgICAgIGNhc2UgQXJyYXk6OkRpcmVjdEFyZ3VtZW50czoKKyAg
ICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uRGlyZWN0QXJndW1lbnRzKG5vZGUpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQXJyYXk6OlNjb3BlZEFyZ3VtZW50czoKKyAgICAg
ICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uU2NvcGVkQXJndW1lbnRzKG5vZGUpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6IHsKICAgICAgICAgICAgIFR5cGVkQXJyYXlUeXBl
IHR5cGUgPSBub2RlLT5hcnJheU1vZGUoKS50eXBlZEFycmF5VHlwZSgpOwpAQCAtMjgyOSw0NyAr
MjgzMiw2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgY2FzZSBBcnJh
eTo6QXJndW1lbnRzOiB7Ci0gICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBj
aGlsZDMpOwotICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7Ci0gICAgICAg
ICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaDIodGhpcyk7Ci0gICAgICAgICAgICAKLSAgICAgICAg
ICAgIEdQUlJlZyB2YWx1ZVJlZyA9IHZhbHVlLmdwcigpOwotICAgICAgICAgICAgR1BSUmVnIHNj
cmF0Y2hSZWcgPSBzY3JhdGNoLmdwcigpOwotICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2gyUmVn
ID0gc2NyYXRjaDIuZ3ByKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICghbV9jb21w
aWxlT2theSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgIC8vIFR3byBy
ZWFsbHkgbGFtZSBjaGVja3MuCi0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAg
ICAgICAgICAgIFVuY291bnRhYmxlLCBKU1ZhbHVlU291cmNlKCksIDAsCi0gICAgICAgICAgICAg
ICAgbV9qaXQuYnJhbmNoMzIoCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpB
Ym92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLAotICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhiYXNlUmVnLCBBcmd1bWVudHM6Om9mZnNldE9mTnVtQXJndW1lbnRzKCkp
KSk7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAgICAgICAgICAgIFVuY291
bnRhYmxlLCBKU1ZhbHVlU291cmNlKCksIDAsCi0gICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNo
VGVzdFB0cigKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sCi0g
ICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKAotICAgICAgICAgICAg
ICAgICAgICAgICAgYmFzZVJlZywgQXJndW1lbnRzOjpvZmZzZXRPZlNsb3dBcmd1bWVudERhdGEo
KSkpKTsKLQotICAgICAgICAgICAgbV9qaXQubW92ZShwcm9wZXJ0eVJlZywgc2NyYXRjaDJSZWcp
OwotICAgICAgICAgICAgbV9qaXQuc2lnbkV4dGVuZDMyVG9QdHIoc2NyYXRjaDJSZWcsIHNjcmF0
Y2gyUmVnKTsKLSAgICAgICAgICAgIG1faml0LmxvYWRQdHIoCi0gICAgICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgQXJndW1lbnRzOjpvZmZzZXRPZlJlZ2lzdGVy
cygpKSwKLSAgICAgICAgICAgICAgICBzY3JhdGNoUmVnKTsKLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgbV9qaXQuc3RvcmU2NCgKLSAgICAgICAgICAgICAgICB2YWx1ZVJlZywKLSAgICAgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KAotICAgICAgICAgICAgICAgICAgICBz
Y3JhdGNoUmVnLCBzY3JhdGNoMlJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsCi0gICAg
ICAgICAgICAgICAgICAgIENhbGxGcmFtZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCkgKiBzaXplb2Yo
UmVnaXN0ZXIpICsgc2l6ZW9mKFJlZ2lzdGVyKSkpOwotICAgICAgICAgICAgCi0gICAgICAgICAg
ICBub1Jlc3VsdChub2RlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAg
ICAgICAKICAgICAgICAgZGVmYXVsdDogewogICAgICAgICAgICAgVHlwZWRBcnJheVR5cGUgdHlw
ZSA9IGFycmF5TW9kZS50eXBlZEFycmF5VHlwZSgpOwogICAgICAgICAgICAgaWYgKGlzSW50KHR5
cGUpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5jcHAJKHJldmlzaW9uIDE4MDcyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MjIsOSArNzIyLDEyIEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNoZWNrQXJyYXkoTm9kZSogbm8KICAgICAgICAgbm9SZXN1
bHQobV9jdXJyZW50Tm9kZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgY2FzZSBBcnJh
eTo6QXJndW1lbnRzOgotICAgICAgICBzcGVjdWxhdGVDZWxsVHlwZVdpdGhvdXRUeXBlRmlsdGVy
aW5nKG5vZGUtPmNoaWxkMSgpLCBiYXNlUmVnLCBBcmd1bWVudHNUeXBlKTsKLQorICAgIGNhc2Ug
QXJyYXk6OkRpcmVjdEFyZ3VtZW50czoKKyAgICAgICAgc3BlY3VsYXRlQ2VsbFR5cGVXaXRob3V0
VHlwZUZpbHRlcmluZyhub2RlLT5jaGlsZDEoKSwgYmFzZVJlZywgRGlyZWN0QXJndW1lbnRzVHlw
ZSk7CisgICAgICAgIG5vUmVzdWx0KG1fY3VycmVudE5vZGUpOworICAgICAgICByZXR1cm47Cisg
ICAgY2FzZSBBcnJheTo6U2NvcGVkQXJndW1lbnRzOgorICAgICAgICBzcGVjdWxhdGVDZWxsVHlw
ZVdpdGhvdXRUeXBlRmlsdGVyaW5nKG5vZGUtPmNoaWxkMSgpLCBiYXNlUmVnLCBTY29wZWRBcmd1
bWVudHNUeXBlKTsKICAgICAgICAgbm9SZXN1bHQobV9jdXJyZW50Tm9kZSk7CiAgICAgICAgIHJl
dHVybjsKICAgICBkZWZhdWx0OgpAQCAtNDA4OCw3ICs0MDkxLDcgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZUdldFR5cGVkQXJyYQogICAgIGludDMyUmVzdWx0KHZlY3RvckdQUiwgbm9k
ZSk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uQXJndW1lbnRz
KE5vZGUqIG5vZGUpCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkRpcmVj
dEFyZ3VtZW50cyhOb2RlKiBub2RlKQogewogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2Uo
dGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBw
cm9wZXJ0eSh0aGlzLCBub2RlLT5jaGlsZDIoKSk7CkBAIC00MTAzLDgwICs0MTA2LDg5IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uQXIKICAgICBHUFJSZWcgcmVzdWx0
UmVnID0gcmVzdWx0LmdwcigpOwogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgR1BSUmVnIHJl
c3VsdFRhZ1JlZyA9IHJlc3VsdFRhZy5ncHIoKTsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdz
ID0gSlNWYWx1ZVJlZ3MocmVzdWx0VGFnUmVnLCByZXN1bHRSZWcpOworI2Vsc2UKKyAgICBKU1Zh
bHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVzdWx0UmVnKTsKICNlbmRpZgogICAg
IEdQUlJlZyBzY3JhdGNoUmVnID0gc2NyYXRjaC5ncHIoKTsKICAgICAKICAgICBpZiAoIW1fY29t
cGlsZU9rYXkpCiAgICAgICAgIHJldHVybjsKLSAgCi0gICAgQVNTRVJUKEFycmF5TW9kZShBcnJh
eTo6QXJndW1lbnRzKS5hbHJlYWR5Q2hlY2tlZChtX2ppdC5ncmFwaCgpLCBub2RlLCBtX3N0YXRl
LmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpKSk7CiAgICAgCi0gICAgLy8gVHdvIHJlYWxseSBsYW1l
IGNoZWNrcy4KLSAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAgICBFeG90aWNPYmplY3RNb2Rl
LCBKU1ZhbHVlU291cmNlKCksIDAsCi0gICAgICAgIG1faml0LmJyYW5jaDMyKAotICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsCi0gICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBBcmd1bWVudHM6Om9mZnNldE9mTnVt
QXJndW1lbnRzKCkpKSk7CisgICAgQVNTRVJUKEFycmF5TW9kZShBcnJheTo6RGlyZWN0QXJndW1l
bnRzKS5hbHJlYWR5Q2hlY2tlZChtX2ppdC5ncmFwaCgpLCBub2RlLCBtX3N0YXRlLmZvck5vZGUo
bm9kZS0+Y2hpbGQxKCkpKSk7CisgICAgCiAgICAgc3BlY3VsYXRpb25DaGVjaygKICAgICAgICAg
RXhvdGljT2JqZWN0TW9kZSwgSlNWYWx1ZVNvdXJjZSgpLCAwLAogICAgICAgICBtX2ppdC5icmFu
Y2hUZXN0UHRyKAogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sCi0gICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcygKLSAgICAgICAgICAgICAgICBiYXNlUmVnLCBB
cmd1bWVudHM6Om9mZnNldE9mU2xvd0FyZ3VtZW50RGF0YSgpKSkpOwotICAgIAotICAgIG1faml0
Lm1vdmUocHJvcGVydHlSZWcsIHJlc3VsdFJlZyk7Ci0gICAgbV9qaXQuc2lnbkV4dGVuZDMyVG9Q
dHIocmVzdWx0UmVnLCByZXN1bHRSZWcpOwotICAgIG1faml0LmxvYWRQdHIoCi0gICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEFyZ3VtZW50czo6b2Zmc2V0T2ZSZWdpc3Rl
cnMoKSksCi0gICAgICAgIHNjcmF0Y2hSZWcpOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MoYmFzZVJlZywgRGlyZWN0QXJndW1lbnRzOjpvZmZzZXRPZk92ZXJyaWRlcygpKSkp
OworICAgIHNwZWN1bGF0aW9uQ2hlY2soCisgICAgICAgIEV4b3RpY09iamVjdE1vZGUsIEpTVmFs
dWVTb3VyY2UoKSwgMCwKKyAgICAgICAgbV9qaXQuYnJhbmNoMzIoCisgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywKKyAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIERpcmVjdEFyZ3VtZW50czo6b2Zmc2V0T2ZMZW5n
dGgoKSkpKTsKICAgICAKLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgIG1faml0LmxvYWQzMigK
LSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleCgKLSAgICAgICAgICAgIHNjcmF0Y2hS
ZWcsIHJlc3VsdFJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsCi0gICAgICAgICAgICBD
YWxsRnJhbWU6OnRoaXNBcmd1bWVudE9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSArIHNpemVv
ZihSZWdpc3RlcikgKwotICAgICAgICAgICAgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNC
aXRzLnRhZykpLAotICAgICAgICByZXN1bHRUYWdSZWcpOwotICAgIG1faml0LmxvYWQzMigKLSAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleCgKLSAgICAgICAgICAgIHNjcmF0Y2hSZWcs
IHJlc3VsdFJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsCi0gICAgICAgICAgICBDYWxs
RnJhbWU6OnRoaXNBcmd1bWVudE9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSArIHNpemVvZihS
ZWdpc3RlcikgKwotICAgICAgICAgICAgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRz
LnBheWxvYWQpKSwKLSAgICAgICAgcmVzdWx0UmVnKTsKLSAgICBqc1ZhbHVlUmVzdWx0KHJlc3Vs
dFRhZ1JlZywgcmVzdWx0UmVnLCBub2RlKTsKLSNlbHNlCi0gICAgbV9qaXQubG9hZDY0KAorICAg
IG1faml0LmxvYWRWYWx1ZSgKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleCgKLSAg
ICAgICAgICAgIHNjcmF0Y2hSZWcsIHJlc3VsdFJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWln
aHQsCi0gICAgICAgICAgICBDYWxsRnJhbWU6OnRoaXNBcmd1bWVudE9mZnNldCgpICogc2l6ZW9m
KFJlZ2lzdGVyKSArIHNpemVvZihSZWdpc3RlcikpLAotICAgICAgICByZXN1bHRSZWcpOwotICAg
IGpzVmFsdWVSZXN1bHQocmVzdWx0UmVnLCBub2RlKTsKLSNlbmRpZgorICAgICAgICAgICAgYmFz
ZVJlZywgcHJvcGVydHlSZWcsIFRpbWVzRWlnaHQsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZU9m
ZnNldCgpKSwKKyAgICAgICAgcmVzdWx0UmVncyk7CisgICAgCisgICAganNWYWx1ZVJlc3VsdChy
ZXN1bHRSZWdzLCBub2RlKTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEFy
Z3VtZW50c0xlbmd0aChOb2RlKiBub2RlKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdl
dEJ5VmFsT25TY29wZWRBcmd1bWVudHMoTm9kZSogbm9kZSkKIHsKICAgICBTcGVjdWxhdGVDZWxs
T3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICBHUFJUZW1wb3JhcnkgcmVz
dWx0KHRoaXMsIFJldXNlLCBiYXNlKTsKKyAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQg
cHJvcGVydHkodGhpcywgbm9kZS0+Y2hpbGQyKCkpOworICAgIEdQUlRlbXBvcmFyeSByZXN1bHQo
dGhpcyk7CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICBHUFJUZW1wb3JhcnkgcmVzdWx0VGFn
KHRoaXMpOworI2VuZGlmCisgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CisgICAgR1BS
VGVtcG9yYXJ5IHNjcmF0Y2gyKHRoaXMpOwogICAgIAogICAgIEdQUlJlZyBiYXNlUmVnID0gYmFz
ZS5ncHIoKTsKKyAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKICAgICBH
UFJSZWcgcmVzdWx0UmVnID0gcmVzdWx0LmdwcigpOworI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisg
ICAgR1BSUmVnIHJlc3VsdFRhZ1JlZyA9IHJlc3VsdFRhZy5ncHIoKTsKKyAgICBKU1ZhbHVlUmVn
cyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVzdWx0VGFnUmVnLCByZXN1bHRSZWcpOworI2Vs
c2UKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVzdWx0UmVnKTsK
KyNlbmRpZgorICAgIEdQUlJlZyBzY3JhdGNoUmVnID0gc2NyYXRjaC5ncHIoKTsKKyAgICBHUFJS
ZWcgc2NyYXRjaDJSZWcgPSBzY3JhdGNoMi5ncHIoKTsKICAgICAKICAgICBpZiAoIW1fY29tcGls
ZU9rYXkpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBBU1NFUlQoQXJyYXlNb2RlKEFycmF5
OjpBcmd1bWVudHMpLmFscmVhZHlDaGVja2VkKG1faml0LmdyYXBoKCksIG5vZGUsIG1fc3RhdGUu
Zm9yTm9kZShub2RlLT5jaGlsZDEoKSkpKTsKKyAgICBBU1NFUlQoQXJyYXlNb2RlKEFycmF5OjpT
Y29wZWRBcmd1bWVudHMpLmFscmVhZHlDaGVja2VkKG1faml0LmdyYXBoKCksIG5vZGUsIG1fc3Rh
dGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSkpKTsKKyAgICAKKyAgICBtX2ppdC5sb2FkUHRyKE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIFNjb3BlZEFyZ3VtZW50czo6b2Zmc2V0T2ZU
YWJsZSgpKSwgc2NyYXRjaFJlZyk7CisgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhiYXNlUmVnLCBTY29wZWRBcmd1bWVudHM6Om9mZnNldE9mU2NvcGUoKSksIHNjcmF0
Y2gyUmVnKTsKICAgICAKICAgICBzcGVjdWxhdGlvbkNoZWNrKAogICAgICAgICBFeG90aWNPYmpl
Y3RNb2RlLCBKU1ZhbHVlU291cmNlKCksIDAsCi0gICAgICAgIG1faml0LmJyYW5jaFRlc3Q4KAot
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sCi0gICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBBcmd1bWVudHM6Om9mZnNldE9mT3ZlcnJvZGVMZW5n
dGgoKSkpKTsKKyAgICAgICAgbV9qaXQuYnJhbmNoMzIoCisgICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywKKyAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKFNjb3BlZEFyZ3VtZW50c1RhYmxlOjpvZmZzZXRPZkxlbmd0aCgpKSkpOwor
ICAgIAorICAgIG1faml0LmxvYWRQdHIoCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KHNjcmF0Y2hSZWcsIFNjb3BlZEFyZ3VtZW50c1RhYmxlOjpvZmZzZXRPZkFyZ3VtZW50cygpKSwK
KyAgICAgICAgc2NyYXRjaFJlZyk7CisgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpC
YXNlSW5kZXgoc2NyYXRjaFJlZywgcHJvcGVydHlSZWcsIFRpbWVzRm91ciksIHNjcmF0Y2hSZWcp
OworICAgIAorICAgIHNwZWN1bGF0aW9uQ2hlY2soCisgICAgICAgIEV4b3RpY09iamVjdE1vZGUs
IEpTVmFsdWVTb3VyY2UoKSwgMCwKKyAgICAgICAgbV9qaXQuYnJhbmNoMzIoCisgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHNjcmF0Y2hSZWcsIFRydXN0ZWRJbW0zMihTY29wZU9m
ZnNldDo6aW52YWxpZE9mZnNldCkpKTsKKyAgICAKKyAgICBtX2ppdC5sb2FkVmFsdWUoCisgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoCisgICAgICAgICAgICBiYXNlMlJlZywgcHJv
cGVydHlSZWcsIFRpbWVzRWlnaHQsIEpTRW52aXJvbm1lbnRSZWNvcmQ6Om9mZnNldE9mVmFyaWFi
bGVzKCkpLAorICAgICAgICByZXN1bHRSZWdzKTsKICAgICAKLSAgICBtX2ppdC5sb2FkMzIoCi0g
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEFyZ3VtZW50czo6b2Zmc2V0
T2ZOdW1Bcmd1bWVudHMoKSksCi0gICAgICAgIHJlc3VsdFJlZyk7Ci0gICAgaW50MzJSZXN1bHQo
cmVzdWx0UmVnLCBub2RlKTsKKyAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG5vZGUpOwog
fQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0U2NvcGUoTm9kZSogbm9kZSkKQEAg
LTQyMzIsOCArNDI0NCw1NiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QXJyYXlM
ZW5nCiAgICAgICAgIGludDMyUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CiAgICAgICAgIGJyZWFr
OwogICAgIH0KLSAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6IHsKLSAgICAgICAgY29tcGlsZUdl
dEFyZ3VtZW50c0xlbmd0aChub2RlKTsKKyAgICBjYXNlIEFycmF5OjpEaXJlY3RBcmd1bWVudHM6
IHsKKyAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEo
KSk7CisgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgUmV1c2UsIGJhc2UpOworICAg
ICAgICAKKyAgICAgICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdwcigpOworICAgICAgICBHUFJS
ZWcgcmVzdWx0UmVnID0gcmVzdWx0LmdwcigpOworICAgICAgICAKKyAgICAgICAgaWYgKCFtX2Nv
bXBpbGVPa2F5KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgQVNTRVJU
KEFycmF5TW9kZShBcnJheTo6RGlyZWN0QXJndW1lbnRzKS5hbHJlYWR5Q2hlY2tlZChtX2ppdC5n
cmFwaCgpLCBub2RlLCBtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpKSk7CisgICAgICAg
IAorICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAorICAgICAgICAgICAgRXhvdGljT2JqZWN0TW9k
ZSwgSlNWYWx1ZVNvdXJjZSgpLCAwLAorICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdFB0cigK
KyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywKKyAgICAgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBEaXJlY3RBcmd1bWVudHM6Om9mZnNl
dE9mT3ZlcnJpZGVzKCkpKSk7CisgICAgICAgIAorICAgICAgICBtX2ppdC5sb2FkMzIoCisgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBEaXJlY3RBcmd1bWVudHM6
Om9mZnNldE9mTGVuZ3RoKCkpLCByZXN1bHRSZWcpOworICAgICAgICAKKyAgICAgICAgaW50MzJS
ZXN1bHQocmVzdWx0UmVnLCBub2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2Ug
QXJyYXk6OlNjb3BlZEFyZ3VtZW50czogeworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBi
YXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0
aGlzLCBSZXVzZSwgYmFzZSk7CisgICAgICAgIAorICAgICAgICBHUFJSZWcgYmFzZVJlZyA9IGJh
c2UuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRSZWcgPSByZXN1bHQuZ3ByKCk7CisgICAg
ICAgIAorICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIAorICAgICAgICBBU1NFUlQoQXJyYXlNb2RlKEFycmF5OjpTY29wZWRBcmd1bWVudHMp
LmFscmVhZHlDaGVja2VkKG1faml0LmdyYXBoKCksIG5vZGUsIG1fc3RhdGUuZm9yTm9kZShub2Rl
LT5jaGlsZDEoKSkpKTsKKyAgICAgICAgCisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCisgICAg
ICAgICAgICBFeG90aWNPYmplY3RNb2RlLCBKU1ZhbHVlU291cmNlKCksIDAsCisgICAgICAgICAg
ICBtX2ppdC5icmFuY2hUZXN0OCgKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm9u
WmVybywKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBT
Y29wZWRBcmd1bWVudHM6Om9mZnNldE9mT3ZlcnJvZGVUaGluZ3MoKSkpKTsKKyAgICAgICAgCisg
ICAgICAgIG1faml0LmxvYWRQdHIoCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhiYXNlUmVnLCBTY29wZWRBcmd1bWVudHM6Om9mZnNldE9mVGFibGUoKSksIHJlc3VsdFJlZyk7
CisgICAgICAgIAorICAgICAgICBtX2ppdC5sb2FkMzIoCisgICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhyZXN1bHRSZWcsIFNjb3BlZEFyZ3VtZW50c1RhYmxlOjpvZmZzZXRPZkxl
bmd0aCgpKSwKKyAgICAgICAgICAgIHJlc3VsdFJlZyk7CisgICAgICAgIAorICAgICAgICBpbnQz
MlJlc3VsdChyZXN1bHRSZWcsIG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgZGVm
YXVsdDogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQuaAkocmV2aXNpb24gMTgwNzIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMTUyLDggKzIxNTIsOSBAQCBw
dWJsaWM6CiAgICAgdm9pZCBjb21waWxlR2V0QnlWYWxPblN0cmluZyhOb2RlKik7CiAgICAgdm9p
ZCBjb21waWxlRnJvbUNoYXJDb2RlKE5vZGUqKTsgCiAKLSAgICB2b2lkIGNvbXBpbGVHZXRCeVZh
bE9uQXJndW1lbnRzKE5vZGUqKTsKLSAgICB2b2lkIGNvbXBpbGVHZXRBcmd1bWVudHNMZW5ndGgo
Tm9kZSopOworICAgIHZvaWQgY29tcGlsZUdldEJ5VmFsT25EaXJlY3RBcmd1bWVudHMoTm9kZSop
OworICAgIHZvaWQgY29tcGlsZUdldEJ5VmFsT25TY29wZWRBcmd1bWVudHMoTm9kZSopOworICAg
IAogICAgIHZvaWQgY29tcGlsZUdldFNjb3BlKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVTa2lw
U2NvcGUoTm9kZSopOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3Ry
YWN0SGVhcFJlcG9zaXRvcnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuaAkocmV2aXNpb24gMTgwNzIwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtNDYsNiArNDYsOCBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZU
TCB7CiAgICAgbWFjcm8oQnV0dGVyZmx5X3B1YmxpY0xlbmd0aCwgQnV0dGVyZmx5OjpvZmZzZXRP
ZlB1YmxpY0xlbmd0aCgpKSBcCiAgICAgbWFjcm8oQnV0dGVyZmx5X3ZlY3Rvckxlbmd0aCwgQnV0
dGVyZmx5OjpvZmZzZXRPZlZlY3Rvckxlbmd0aCgpKSBcCiAgICAgbWFjcm8oQ2FsbEZyYW1lX2Nh
bGxlckZyYW1lLCBDYWxsRnJhbWU6OmNhbGxlckZyYW1lT2Zmc2V0KCkpIFwKKyAgICBtYWNybyhE
aXJlY3RBcmd1bWVudHNfbGVuZ3RoLCBEaXJlY3RBcmd1bWVudHM6Om9mZnNldE9mTGVuZ3RoKCkp
IFwKKyAgICBtYWNybyhEaXJlY3RBcmd1bWVudHNfb3ZlcnJpZGVzLCBEaXJlY3RBcmd1bWVudHM6
Om9mZnNldE9mT3ZlcnJpZGVzKCkpIFwKICAgICBtYWNybyhHZXR0ZXJTZXR0ZXJfZ2V0dGVyLCBH
ZXR0ZXJTZXR0ZXI6Om9mZnNldE9mR2V0dGVyKCkpIFwKICAgICBtYWNybyhHZXR0ZXJTZXR0ZXJf
c2V0dGVyLCBHZXR0ZXJTZXR0ZXI6Om9mZnNldE9mU2V0dGVyKCkpIFwKICAgICBtYWNybyhKU0Fy
cmF5QnVmZmVyVmlld19sZW5ndGgsIEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZkxlbmd0aCgp
KSBcCkBAIC03Miw2ICs3NCwxMSBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAg
ICAgbWFjcm8oSlNXcmFwcGVyT2JqZWN0X2ludGVybmFsVmFsdWUsIEpTV3JhcHBlck9iamVjdDo6
aW50ZXJuYWxWYWx1ZU9mZnNldCgpKSBcCiAgICAgbWFjcm8oTWFya2VkQWxsb2NhdG9yX2ZyZWVM
aXN0SGVhZCwgTWFya2VkQWxsb2NhdG9yOjpvZmZzZXRPZkZyZWVMaXN0SGVhZCgpKSBcCiAgICAg
bWFjcm8oTWFya2VkQmxvY2tfbWFya0JpdHMsIE1hcmtlZEJsb2NrOjpvZmZzZXRPZk1hcmtzKCkp
IFwKKyAgICBtYWNybyhTY29wZWRBcmd1bWVudHNfb3ZlcnJvZGVUaGluZ3MsIFNjb3BlZEFyZ3Vt
ZW50czo6b2Zmc2V0T2ZPdmVycm9kZVRoaW5ncygpKSkgXAorICAgIG1hY3JvKFNjb3BlZEFyZ3Vt
ZW50c19zY29wZSwgU2NvcGVkQXJndW1lbnRzOjpvZmZldE9mU2NvcGUoKSkpIFwKKyAgICBtYWNy
byhTY29wZWRBcmd1bWVudHNfdGFibGUsIFNjb3BlZEFyZ3VtZW50czo6b2ZmZXRPZlRhYmxlKCkp
KSBcCisgICAgbWFjcm8oU2NvcGVkQXJndW1lbnRzVGFibGVfYXJndW1lbnRzLCBTY29wZWRBcmd1
bWVudHNUYWJsZTo6b2ZmZXRPZkFyZ3VtZW50cygpKSkgXAorICAgIG1hY3JvKFNjb3BlZEFyZ3Vt
ZW50c1RhYmxlX2xlbmd0aCwgU2NvcGVkQXJndW1lbnRzVGFibGU6Om9mZmV0T2ZMZW5ndGgoKSkp
IFwKICAgICBtYWNybyhTdHJpbmdJbXBsX2RhdGEsIFN0cmluZ0ltcGw6OmRhdGFPZmZzZXQoKSkg
XAogICAgIG1hY3JvKFN0cmluZ0ltcGxfaGFzaEFuZEZsYWdzLCBTdHJpbmdJbXBsOjpmbGFnc09m
ZnNldCgpKSBcCiAgICAgbWFjcm8oU3RydWN0dXJlX2NsYXNzSW5mbywgU3RydWN0dXJlOjpjbGFz
c0luZm9PZmZzZXQoKSkgXApAQCAtODAsNiArODcsOCBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIEZUTCB7CiAgICAgbWFjcm8oU3RydWN0dXJlX3N0cnVjdHVyZUlELCBTdHJ1Y3R1cmU6OnN0
cnVjdHVyZUlET2Zmc2V0KCkpCiAKICNkZWZpbmUgRk9SX0VBQ0hfSU5ERVhFRF9BQlNUUkFDVF9I
RUFQKG1hY3JvKSBcCisgICAgbWFjcm8oRGlyZWN0QXJndW1lbnRzX3N0b3JhZ2UsIERpcmVjdEFy
Z3VtZW50czo6c3RvcmFnZU9mZnNldCgpLCBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSBcCisgICAg
bWFjcm8oSlNFbnZpcm9ubWVudFJlY29yZF92YXJpYWJsZSwgSlNFbnZpcm9ubWVudFJlY29yZDo6
b2Zmc2V0T2ZWYXJpYWJsZXMoKSwgc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkgXAogICAgIG1hY3Jv
KEpTUm9wZVN0cmluZ19maWJlcnMsIEpTUm9wZVN0cmluZzo6b2Zmc2V0T2ZGaWJlcnMoKSwgc2l6
ZW9mKFdyaXRlQmFycmllcjxKU1N0cmluZz4pKSBcCiAgICAgbWFjcm8oY2hhcmFjdGVyczgsIDAs
IHNpemVvZihMQ2hhcikpIFwKICAgICBtYWNybyhjaGFyYWN0ZXJzMTYsIDAsIHNpemVvZihVQ2hh
cikpIFwKQEAgLTg3LDYgKzk2LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewog
ICAgIG1hY3JvKGluZGV4ZWREb3VibGVQcm9wZXJ0aWVzLCAwLCBzaXplb2YoZG91YmxlKSkgXAog
ICAgIG1hY3JvKGluZGV4ZWRDb250aWd1b3VzUHJvcGVydGllcywgMCwgc2l6ZW9mKEVuY29kZWRK
U1ZhbHVlKSkgXAogICAgIG1hY3JvKGluZGV4ZWRBcnJheVN0b3JhZ2VQcm9wZXJ0aWVzLCAwLCBz
aXplb2YoRW5jb2RlZEpTVmFsdWUpKSBcCisgICAgbWFjcm8oc2NvcGVkQXJndWVtbnRzVGFibGVB
cmd1bWVudHMsIDAsIHNpemVvZihpbnQzMl90KSkgXAogICAgIG1hY3JvKHNpbmdsZUNoYXJhY3Rl
clN0cmluZ3MsIDAsIHNpemVvZihKU1N0cmluZyopKSBcCiAgICAgbWFjcm8odmFyaWFibGVzLCAw
LCBzaXplb2YoUmVnaXN0ZXIpKQogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExDYXBhYmlsaXRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAkocmV2aXNpb24gMTgwNzIwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
MDksNiArMjA5LDggQEAgaW5saW5lIENhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxlKE5vZGUqIAog
ICAgICAgICBjYXNlIEFycmF5OjpJbnQzMjoKICAgICAgICAgY2FzZSBBcnJheTo6RG91YmxlOgog
ICAgICAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOgorICAgICAgICBjYXNlIEFycmF5OjpEaXJl
Y3RBcmd1bWVudHM6CisgICAgICAgIGNhc2UgQXJyYXk6OlNjb3BlZEFyZ3VtZW50czoKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgaWYgKGlzVHlwZWRW
aWV3KG5vZGUtPmFycmF5TW9kZSgpLnR5cGVkQXJyYXlUeXBlKCkpKQpAQCAtMjIyLDYgKzIyNCw4
IEBAIGlubGluZSBDYXBhYmlsaXR5TGV2ZWwgY2FuQ29tcGlsZShOb2RlKiAKICAgICAgICAgY2Fz
ZSBBcnJheTo6RG91YmxlOgogICAgICAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOgogICAgICAg
ICBjYXNlIEFycmF5OjpTdHJpbmc6CisgICAgICAgIGNhc2UgQXJyYXk6OkRpcmVjdEFyZ3VtZW50
czoKKyAgICAgICAgY2FzZSBBcnJheTo6U2NvcGVkQXJndW1lbnRzOgogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBpZiAoaXNUeXBlZFZpZXcobm9kZS0+
YXJyYXlNb2RlKCkudHlwZWRBcnJheVR5cGUoKSkpCkBAIC0yNDgsNiArMjUyLDggQEAgaW5saW5l
IENhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxlKE5vZGUqIAogICAgICAgICBjYXNlIEFycmF5OjpJ
bnQzMjoKICAgICAgICAgY2FzZSBBcnJheTo6RG91YmxlOgogICAgICAgICBjYXNlIEFycmF5OjpD
b250aWd1b3VzOgorICAgICAgICBjYXNlIEFycmF5OjpEaXJlY3RBcmd1bWVudHM6CisgICAgICAg
IGNhc2UgQXJyYXk6OlNjb3BlZEFyZ3VtZW50czoKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICBkZWZhdWx0OgogICAgICAgICAgICAgaWYgKGlzVHlwZWRWaWV3KG5vZGUtPmFycmF5TW9kZSgp
LnR5cGVkQXJyYXlUeXBlKCkpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExM
b3dlckRGR1RvTExWTS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHJldmlzaW9uIDE4MDcyMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
MTk1LDYgKzIxOTUsMjUgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQogICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXJyYXk6OkRpcmVjdEFyZ3VtZW50czogewor
ICAgICAgICAgICAgTFZhbHVlIGFyZ3VtZW50cyA9IGxvd0NlbGwobV9vdXQtPmNoaWxkMSgpKTsK
KyAgICAgICAgICAgIHNwZWN1bGF0ZSgKKyAgICAgICAgICAgICAgICBFeG90aWNPYmplY3RNb2Rl
LCBub1ZhbHVlKCksIG51bGxwdHIsCisgICAgICAgICAgICAgICAgbV9vdXQubm90TnVsbChtX291
dC5sb2FkUHRyKGFyZ3VtZW50cywgbV9oZWFwcy5EaXJlY3RBcmd1bWVudHNfb3ZlcnJpZGVzKSkp
OworICAgICAgICAgICAgc2V0SW50MzIobV9vdXQubG9hZDMyTm9uTmVnYXRpdmUoYXJndW1lbnRz
LCBtX2hlYXBzLkRpcmVjdEFyZ3VtZW50c19sZW5ndGgpKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXJyYXk6OlNjb3BlZEFyZ3Vt
ZW50czogeworICAgICAgICAgICAgTFZhbHVlIGFyZ3VtZW50cyA9IGxvd0NlbGwobV9vdXQtPmNo
aWxkMSgpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZSgKKyAgICAgICAgICAgICAgICBFeG90aWNP
YmplY3RNb2RlLCBub1ZhbHVlKCksIG51bGxwdHIsCisgICAgICAgICAgICAgICAgbV9vdXQubm90
WmVybzgobV9vdXQubG9hZFB0cihhcmd1bWVudHMsIG1faGVhcHMuU2NvcGVkQXJndW1lbnRzX292
ZXJyb2RlVGhpbmdzKSkpOworICAgICAgICAgICAgTFZhbHVlIHRhYmxlID0gbV9vdXQubG9hZFB0
cihhcmd1bWVudHMsIG1faGVhcHMuU2NvcGVkQXJndW1lbnRzX3RhYmxlKTsKKyAgICAgICAgICAg
IHNldEludDMyKG1fb3V0LmxvYWQzMk5vbk5lZ2F0aXZlKHRhYmxlLCBtX2hlYXBzLlNjb3BlZEFy
Z3VtZW50c1RhYmxlX2xlbmd0aCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cisg
ICAgICAgICAgICAKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIGlmIChpc1R5cGVkVmll
dyhtX25vZGUtPmFycmF5TW9kZSgpLnR5cGVkQXJyYXlUeXBlKCkpKSB7CiAgICAgICAgICAgICAg
ICAgc2V0SW50MzIoCkBAIC0yMzEyLDYgKzIzMzEsNDkgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgfQogICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXJyYXk6OkRp
cmVjdEFyZ3VtZW50czogeworICAgICAgICAgICAgTFZhbHVlIGJhc2UgPSBsb3dDZWxsKG1fbm9k
ZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgTFZhbHVlIGluZGV4ID0gbG93SW50MzIobV9ub2Rl
LT5jaGlsZDIoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHNwZWN1bGF0ZSgKKyAgICAg
ICAgICAgICAgICBFeG90aWNPYmplY3RNb2RlLCBub1ZhbHVlKCksIG51bGxwdHIsCisgICAgICAg
ICAgICAgICAgbV9vdXQubm9uTnVsbChtX291dC5sb2FkUHRyKGJhc2UsIG1faGVhcHMuRGlyZWN0
QXJndW1lbnRzX292ZXJyaWRlcykpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZSgKKyAgICAgICAg
ICAgICAgICBFeG90aWNPYmplY3RNb2RlLCBub1ZhbHVlKCksIG51bGxwdHIsCisgICAgICAgICAg
ICAgICAgbV9vdXQuYWJvdmVPckVxdWFsKAorICAgICAgICAgICAgICAgICAgICBpbmRleCwKKyAg
ICAgICAgICAgICAgICAgICAgbV9vdXQubG9hZDMyTm9uTmVnYXRpdmUoYmFzZSwgbV9oZWFwcy5E
aXJlY3RBcmd1bWVudHNfbGVuZ3RoKSkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBzZXRK
U1ZhbHVlKG1fb3V0LmxvYWQ2NChiYXNlSW5kZXgobV9oZWFwcy5EaXJlY3RBcmd1bWVudHNfc3Rv
cmFnZSwgYmFzZSwgaW5kZXgpKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg
ICAgICAgICAgIAorICAgICAgICBjYXNlIEFycmF5OjpTY29wZWRBcmd1bWVudHM6IHsKKyAgICAg
ICAgICAgIExWYWx1ZSBiYXNlID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAg
ICAgIExWYWx1ZSBpbmRleCA9IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAg
ICAgCisgICAgICAgICAgICBMVmFsdWUgdGFibGUgPSBtX291dC5sb2FkUHRyKGJhc2UsIG1faGVh
cHMuU2NvcGVkQXJndW1lbnRzX3RhYmxlKTsKKyAgICAgICAgICAgIExWYWx1ZSBzY29wZSA9IG1f
b3V0LmxvYWRQdHIoYmFzZSwgbV9oZWFwcy5TY29wZWRBcmd1bWVudHNfc2NvcGUpOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBzcGVjdWxhdGUoCisgICAgICAgICAgICAgICAgRXhvdGljT2Jq
ZWN0TW9kZSwgbm9WYWx1ZSgpLCBudWxscHRyLAorICAgICAgICAgICAgICAgIG1fb3V0LmFib3Zl
T3JFcXVhbCgKKyAgICAgICAgICAgICAgICAgICAgaW5kZXgsCisgICAgICAgICAgICAgICAgICAg
IG1fb3V0LmxvYWQzMk5vbk5lZ2F0aXZlKGJhc2UsIG1faGVhcHMuU2NvcGVkQXJndW1lbnRzVGFi
bGVfbGVuZ3RoKSkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBMVmFsdWUgYXJndW1lbnRz
ID0gbV9vdXQubG9hZFB0cihiYXNlLCBtX2hlYXBzLlNjb3BlZEFyZ3VtZW50c1RhYmxlX2FyZ3Vt
ZW50cyk7CisgICAgICAgICAgICBMVmFsdWUgc2NvcGVPZmZzZXQgPSBtX291dC5sb2FkMzIoCisg
ICAgICAgICAgICAgICAgYmFzZUluZGV4KG1faGVhcHMuc2NvcGVkQXJndW1lbnRzVGFibGVBcmd1
bWVudHMsIGFyZ3VtZW50cywgaW5kZXgpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgc3Bl
Y3VsYXRlKAorICAgICAgICAgICAgICAgIEV4b3RpY09iamVjdE1vZGUsIG5vVmFsdWUoKSwgbnVs
bHB0ciwKKyAgICAgICAgICAgICAgICBtX291dC5lcXVhbChzY29wZU9mZnNldCwgbV9vdXQuY29u
c3RJbnQzMihTY29wZU9mZnNldDo6aW52YWxpZE9mZnNldCkpKTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgc2V0SlNWYWx1ZShtX291dC5sb2FkNjQoYmFzZUluZGV4KAorICAgICAgICAgICAg
ICAgIG1faGVhcHMuSlNFbnZpcm9ubWVudFJlY29yZF92YXJpYWJsZXMsIGJhc2UsIHNjb3BlT2Zm
c2V0KSkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgICAgICAKICAg
ICAgICAgY2FzZSBBcnJheTo6R2VuZXJpYzogewogICAgICAgICAgICAgc2V0SlNWYWx1ZSh2bUNh
bGwoCiAgICAgICAgICAgICAgICAgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbkdldEJ5VmFsKSwg
bV9jYWxsRnJhbWUsCkBAIC01MDcwLDExICs1MTMyLDExIEBAIHByaXZhdGU6CiAgICAgICAgIHJl
dHVybiBjYWxsOwogICAgIH0KICAgICAKLSAgICBUeXBlZFBvaW50ZXIgYmFzZUluZGV4KEluZGV4
ZWRBYnN0cmFjdEhlYXAmIGhlYXAsIExWYWx1ZSBzdG9yYWdlLCBMVmFsdWUgaW5kZXgsIEVkZ2Ug
ZWRnZSkKKyAgICBUeXBlZFBvaW50ZXIgYmFzZUluZGV4KEluZGV4ZWRBYnN0cmFjdEhlYXAmIGhl
YXAsIExWYWx1ZSBzdG9yYWdlLCBMVmFsdWUgaW5kZXgsIEVkZ2UgZWRnZSwgcHRyZGlmZl90IG9m
ZnNldCA9IDApCiAgICAgewogICAgICAgICByZXR1cm4gbV9vdXQuYmFzZUluZGV4KAogICAgICAg
ICAgICAgaGVhcCwgc3RvcmFnZSwgbV9vdXQuemVyb0V4dChpbmRleCwgbV9vdXQuaW50UHRyKSwK
LSAgICAgICAgICAgIG1fc3RhdGUuZm9yTm9kZShlZGdlKS5tX3ZhbHVlKTsKKyAgICAgICAgICAg
IG1fc3RhdGUuZm9yTm9kZShlZGdlKS5tX3ZhbHVlLCBvZmZzZXQpOwogICAgIH0KICAgICAKICAg
ICB2b2lkIGNvbXBhcmUoCkBAIC02MzQxLDYgKzY0MDMsMTYgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJDb3JydXB0IGFycmF5IGNsYXNzIik7CiAg
ICAgICAgIH0KICAgICAgICAgICAgIAorICAgICAgICBjYXNlIEFycmF5OjpEaXJlY3RBcmd1bWVu
dHM6CisgICAgICAgICAgICByZXR1cm4gbV9vdXQuZXF1YWwoCisgICAgICAgICAgICAgICAgbV9v
dXQubG9hZDgoY2VsbCwgbV9oZWFwcy5KU0NlbGxfdHlwZUluZm9UeXBlKSwKKyAgICAgICAgICAg
ICAgICBtX291dC5jb25zdEludDgoRGlyZWN0QXJndW1lbnRzVHlwZSkpOworICAgICAgICAgICAg
CisgICAgICAgIGNhc2UgQXJyYXk6OlNjb3BlZEFyZ3VtZW50czoKKyAgICAgICAgICAgIHJldHVy
biBtX291dC5lcXVhbCgKKyAgICAgICAgICAgICAgICBtX291dC5sb2FkOChjZWxsLCBtX2hlYXBz
LkpTQ2VsbF90eXBlSW5mb1R5cGUpLAorICAgICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50OChT
Y29wZWRBcmd1bWVudHNUeXBlKSk7CisgICAgICAgICAgICAKICAgICAgICAgZGVmYXVsdDoKICAg
ICAgICAgICAgIHJldHVybiBtX291dC5lcXVhbCgKICAgICAgICAgICAgICAgICBtX291dC5sb2Fk
OChjZWxsLCBtX2hlYXBzLkpTQ2VsbF90eXBlSW5mb1R5cGUpLCAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0NvcHlUb2tlbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0NvcHlUb2tlbi5oCShyZXZpc2lvbiAxODA3MjApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9Db3B5VG9rZW4uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzIsNyArMzIsNyBA
QCBlbnVtIENvcHlUb2tlbiB7CiAgICAgQnV0dGVyZmx5Q29weVRva2VuLAogICAgIFR5cGVkQXJy
YXlWZWN0b3JDb3B5VG9rZW4sCiAgICAgTWFwQmFja2luZ1N0b3JlQ29weVRva2VuLAotICAgIEFy
Z3VtZW50c1Nsb3dBcmd1bWVudERhdGFDb3B5VG9rZW4KKyAgICBEaXJlY3RBcmd1bWVudHNPdmVy
cmlkZXNDb3B5VG9rZW4KIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCShyZXZpc2lvbiAxODA3MjApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMTMsNiArMTEzLDI2IEBAIHB1YmxpYzoKICNlbmRpZgogICAgIH0KICAgICAKKyAg
ICB2b2lkIGxvYWRWYWx1ZShCYXNlSW5kZXggYWRkcmVzcywgSlNWYWx1ZVJlZ3MgcmVncykKKyAg
ICB7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgbG9hZDY0KGFkZHJlc3MsIHJlZ3MuZ3By
KCkpOworI2Vsc2UKKyAgICAgICAgaWYgKGFkZHJlc3MuYmFzZSA9PSByZWdzLnBheWxvYWRHUFIo
KSB8fCBhZGRyZXNzLmluZGV4ID09IHJlZ3MucGF5bG9hZEdQUigpKSB7CisgICAgICAgICAgICAv
LyBXZSBhY3R1YWxseSBjb3VsZCBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgdGhlIHJlZ2lzdGVycyBh
cmUgYWxpYXNlZCB0byBib3RoCisgICAgICAgICAgICAvLyB0YWcgYW5kIHBheWxvYWQsIGJ1dCB3
ZSBkb24ndCBmb3Igbm93LgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoYWRkcmVzcy5iYXNl
ICE9IHJlZ3MudGFnR1BSKCkpOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoYWRkcmVzcy5p
bmRleCAhPSByZWdzLnRhZ0dQUigpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbG9hZDMy
KGFkZHJlc3Mud2l0aE9mZnNldChUYWdPZmZzZXQpLCByZWdzLnRhZ0dQUigpKTsKKyAgICAgICAg
ICAgIGxvYWQzMihhZGRyZXNzLndpdGhPZmZzZXQoUGF5bG9hZE9mZnNldCksIHJlZ3MucGF5bG9h
ZEdQUigpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGxvYWQzMihhZGRyZXNzLndp
dGhPZmZzZXQoUGF5bG9hZE9mZnNldCksIHJlZ3MucGF5bG9hZEdQUigpKTsKKyAgICAgICAgICAg
IGxvYWQzMihhZGRyZXNzLndpdGhPZmZzZXQoVGFnT2Zmc2V0KSwgcmVnLnRhZ0dQUigpKTsKKyAg
ICAgICAgfQorI2VuZGlmCisgICAgfQorICAgIAogICAgIHZvaWQgbW92ZVRydXN0ZWRWYWx1ZShK
U1ZhbHVlIHZhbHVlLCBKU1ZhbHVlUmVncyByZWdzKQogICAgIHsKICNpZiBVU0UoSlNWQUxVRTY0
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCShyZXZpc2lvbiAxODA3MjApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNDYsNiArMzQ2
LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEp1bXBMaXN0IGVtaXREb3VibGVHZXRCeVZh
bChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUpOwogICAgICAgICBKdW1wTGlz
dCBlbWl0Q29udGlndW91c0dldEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFk
VHlwZSwgSW5kZXhpbmdUeXBlIGV4cGVjdGVkU2hhcGUgPSBDb250aWd1b3VzU2hhcGUpOwogICAg
ICAgICBKdW1wTGlzdCBlbWl0QXJyYXlTdG9yYWdlR2V0QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQYXRj
aGFibGVKdW1wJiBiYWRUeXBlKTsKKyAgICAgICAgSnVtcExpc3QgZW1pdERpcmVjdEFyZ3VtZW50
c0dldEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSk7CisgICAgICAg
IEp1bXBMaXN0IGVtaXRTY29wZWRBcmd1bWVudHNHZXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNo
YWJsZUp1bXAmIGJhZFR5cGUpOwogICAgICAgICBKdW1wTGlzdCBlbWl0SW50VHlwZWRBcnJheUdl
dEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgVHlwZWRBcnJheVR5
cGUpOwogICAgICAgICBKdW1wTGlzdCBlbWl0RmxvYXRUeXBlZEFycmF5R2V0QnlWYWwoSW5zdHJ1
Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBUeXBlZEFycmF5VHlwZSk7CiAgICAgICAg
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCShy
ZXZpc2lvbiAxODA3MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlv
bnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MzAsNyArNTMwLDcgQEAgdm9pZCBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvblB1dEJ5VmFsKEV4ZQogICAgICAgICBpZiAoaGFzT3B0aW1pemFibGVJbmRl
eGluZyhvYmplY3QtPnN0cnVjdHVyZSh2bSkpKSB7CiAgICAgICAgICAgICAvLyBBdHRlbXB0IHRv
IG9wdGltaXplLgogICAgICAgICAgICAgSklUQXJyYXlNb2RlIGFycmF5TW9kZSA9IGppdEFycmF5
TW9kZUZvclN0cnVjdHVyZShvYmplY3QtPnN0cnVjdHVyZSh2bSkpOwotICAgICAgICAgICAgaWYg
KGFycmF5TW9kZSAhPSBieVZhbEluZm8uYXJyYXlNb2RlKSB7CisgICAgICAgICAgICBpZiAoaml0
QXJyYXlNb2RlUGVybWl0c1B1dChhcnJheU1vZGUpICYmIGFycmF5TW9kZSAhPSBieVZhbEluZm8u
YXJyYXlNb2RlKSB7CiAgICAgICAgICAgICAgICAgSklUOjpjb21waWxlUHV0QnlWYWwoJnZtLCBl
eGVjLT5jb2RlQmxvY2soKSwgJmJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0cihPVVJfUkVUVVJO
X0FERFJFU1MpLCBhcnJheU1vZGUpOwogICAgICAgICAgICAgICAgIGRpZE9wdGltaXplID0gdHJ1
ZTsKICAgICAgICAgICAgIH0KQEAgLTU3NSw3ICs1NzUsNyBAQCB2b2lkIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uRGlyZWN0UHV0QnlWCiAgICAgICAgIGlmIChoYXNPcHRpbWl6YWJsZUluZGV4aW5n
KG9iamVjdC0+c3RydWN0dXJlKHZtKSkpIHsKICAgICAgICAgICAgIC8vIEF0dGVtcHQgdG8gb3B0
aW1pemUuCiAgICAgICAgICAgICBKSVRBcnJheU1vZGUgYXJyYXlNb2RlID0gaml0QXJyYXlNb2Rl
Rm9yU3RydWN0dXJlKG9iamVjdC0+c3RydWN0dXJlKHZtKSk7Ci0gICAgICAgICAgICBpZiAoYXJy
YXlNb2RlICE9IGJ5VmFsSW5mby5hcnJheU1vZGUpIHsKKyAgICAgICAgICAgIGlmIChqaXRBcnJh
eU1vZGVQZXJtaXRzUHV0KGFycmF5TW9kZSkgJiYgYXJyYXlNb2RlICE9IGJ5VmFsSW5mby5hcnJh
eU1vZGUpIHsKICAgICAgICAgICAgICAgICBKSVQ6OmNvbXBpbGVEaXJlY3RQdXRCeVZhbCgmdm0s
IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCksICZieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIoT1VS
X1JFVFVSTl9BRERSRVNTKSwgYXJyYXlNb2RlKTsKICAgICAgICAgICAgICAgICBkaWRPcHRpbWl6
ZSA9IHRydWU7CiAgICAgICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVFByb3BlcnR5QWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkocmV2aXNpb24gMTgwNzIwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTk1MSw2ICs5NTEsMTIgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlWYWwoQnlW
YWxJbgogICAgIGNhc2UgSklUQXJyYXlTdG9yYWdlOgogICAgICAgICBzbG93Q2FzZXMgPSBlbWl0
QXJyYXlTdG9yYWdlR2V0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlKTsKICAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBKSVREaXJlY3RBcmd1bWVudHM6CisgICAgICAgIHNsb3dDYXNl
cyA9IGVtaXREaXJlY3RBcmd1bWVudHNHZXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5
cGUpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEpJVFNjb3BlZEFyZ3VtZW50czoKKyAgICAg
ICAgc2xvd0Nhc2VzID0gZW1pdERpcmVjdEFyZ3VtZW50c0dldEJ5VmFsKGN1cnJlbnRJbnN0cnVj
dGlvbiwgYmFkVHlwZSk7CisgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIFR5
cGVkQXJyYXlUeXBlIHR5cGUgPSB0eXBlZEFycmF5VHlwZUZvckpJVEFycmF5TW9kZShhcnJheU1v
ZGUpOwogICAgICAgICBpZiAoaXNJbnQodHlwZSkpCkBAIC0xMDQ2LDYgKzEwNTIsNjMgQEAgdm9p
ZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlWYWwoQnlWYWxJbgogICAgIHJlcGF0Y2hCdWZmZXIu
cmVsaW5rQ2FsbGVyVG9GdW5jdGlvbihyZXR1cm5BZGRyZXNzLCBGdW5jdGlvblB0cihpc0RpcmVj
dCA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsR2VuZXJpYyA6IG9wZXJhdGlvblB1dEJ5VmFsR2Vu
ZXJpYykpOwogfQogCitKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdERpcmVjdEFyZ3VtZW50c0dldEJ5
VmFsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFBhdGNoYWJsZUp1bXAmIGJhZFR5
cGUpCit7CisgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOworICAgIAorI2lmIFVTRShKU1ZBTFVFNjQp
CisgICAgUmVnaXN0ZXJJRCBiYXNlID0gcmVnVDA7CisgICAgUmVnaXN0ZXJJRCBwcm9wZXJ0eSA9
IHJlZ1QxOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdCA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAg
ICBSZWdpc3RlcklEIHNjcmF0Y2ggPSByZWdUMzsKKyNlbHNlCisgICAgUmVnaXN0ZXJJRCBiYXNl
ID0gcmVnVDA7CisgICAgUmVnaXN0ZXJJRCBwcm9wZXJ0eSA9IHJlZ1QyOworICAgIEpTVmFsdWVS
ZWdzIHJlc3VsdCA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7CisgICAgUmVnaXN0ZXJJRCBz
Y3JhdGNoID0gcmVnVDM7CisjZW5kaWYKKworICAgIGxvYWQ4KEFkZHJlc3MoYmFzZSwgSlNDZWxs
Ojp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIHNjcmF0Y2gpOworICAgIGJhZFR5cGUgPSBwYXRjaGFi
bGVCcmFuY2gzMihOb3RFcXVhbCwgc2NyYXRjaCwgVHJ1c3RlZEltbTMyKERpcmVjdEFyZ3VtZW50
c1R5cGUpKTsKKyAgICAKKyAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMyKEFib3ZlT3JFcXVh
bCwgcHJvcGVydHksIEFkZHJlc3MoYmFzZSwgRGlyZWN0QXJndW1lbnRzOjpvZmZzZXRPZkxlbmd0
aCgpKSkpOworICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoVGVzdFB0cihOb25aZXJvLCBBZGRy
ZXNzKGJhc2UsIERpcmVjdEFyZ3VtZW50czo6b2Zmc2V0T2ZPdmVycmlkZXMoKSkpKTsKKyAgICAK
KyAgICB6ZXJvRXh0ZW5kMzJUb1B0cihwcm9wZXJ0eSwgc2NyYXRjaCk7CisgICAgbG9hZFZhbHVl
KEJhc2VJbmRleChiYXNlLCBzY3JhdGNoLCBUaW1lc0VpZ2h0LCBEaXJlY3RBcmd1bWVudHM6OnN0
b3JhZ2VPZmZzZXQoKSksIHJlc3VsdCk7Cit9CisKK0pJVDo6SnVtcExpc3QgSklUOjplbWl0U2Nv
cGVkQXJndW1lbnRzR2V0QnlWYWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUGF0
Y2hhYmxlSnVtcCYgYmFkVHlwZSkKK3sKKyAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgCisj
aWYgVVNFKEpTVkFMVUU2NCkKKyAgICBSZWdpc3RlcklEIGJhc2UgPSByZWdUMDsKKyAgICBSZWdp
c3RlcklEIHByb3BlcnR5ID0gcmVnVDE7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0ID0gSlNWYWx1
ZVJlZ3MocmVnVDApOworICAgIFJlZ2lzdGVySUQgc2NyYXRjaCA9IHJlZ1QzOworICAgIFJlZ2lz
dGVySUQgc2NyYXRjaDIgPSByZWdUNDsKKyNlbHNlCisgICAgUmVnaXN0ZXJJRCBiYXNlID0gcmVn
VDA7CisgICAgUmVnaXN0ZXJJRCBwcm9wZXJ0eSA9IHJlZ1QyOworICAgIEpTVmFsdWVSZWdzIHJl
c3VsdCA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7CisgICAgUmVnaXN0ZXJJRCBzY3JhdGNo
ID0gcmVnVDM7CisgICAgUmVnaXN0ZXJJRCBzY2FydGNoMiA9IHJlZ1Q0OworI2VuZGlmCisKKyAg
ICBsb2FkOChBZGRyZXNzKGJhc2UsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBzY3Jh
dGNoKTsKKyAgICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNoMzIoTm90RXF1YWwsIHNjcmF0Y2gs
IFRydXN0ZWRJbW0zMihEaXJlY3RBcmd1bWVudHNUeXBlKSk7CisgICAgCisgICAgbG9hZFB0cihB
ZGRyZXNzKGJhc2UsIFNjb3BlZEFyZ3VtZW50czo6b2Zmc2V0T2ZUYWJsZSgpKSwgc2NyYXRjaCk7
CisgICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIFNjb3BlZEFyZ3VtZW50czo6b2Zmc2V0T2ZTY29w
ZSgpKSwgc2NyYXRjaDIpOworICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoQWJvdmVPckVx
dWFsLCBwcm9wZXJ0eSwgQWRkcmVzcyhzY3JhdGNoLCBTY29wZWRBcmd1bWVudHNUYWJsZTo6b2Zm
c2V0T2ZMZW5ndGgoKSkpKTsKKyAgICBsb2FkUHRyKEFkZHJlc3Moc2NyYXRjaCwgU2NvcGVkQXJn
dW1lbnRzVGFibGU6Om9mZnNldE9mQXJndW1lbnRzKCkpLCBzY3JhdGNoKTsKKyAgICBsb2FkMzIo
QmFzZUluZGV4KHNjcmF0Y2gsIHByb3BlcnR5LCBUaW1lc0ZvdXIpLCBzY3JhdGNoKTsKKyAgICBz
bG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMyKEVxdWFsLCBzY3JhdGNoLCBUcnVzdGVkSW1tMzIoU2Nv
cGVPZmZzZXQ6OmludmFsaWRPZmZzZXQpKSk7CisgICAgCisgICAgbG9hZFZhbHVlKEJhc2VJbmRl
eChzY3JhdGNoMiwgc2NyYXRjaCwgVGltZXNFaWdodCwgSlNFbnZpcm9ubWVudFJlY29yZDo6b2Zm
c2V0T2ZWYXJpYWJsZXMoKSksIHJlc3VsdCk7Cit9CisKIEpJVDo6SnVtcExpc3QgSklUOjplbWl0
SW50VHlwZWRBcnJheUdldEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlw
ZSwgVHlwZWRBcnJheVR5cGUgdHlwZSkKIHsKICAgICBBU1NFUlQoaXNJbnQodHlwZSkpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuaAkocmV2aXNpb24gMTgwNzIwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
NDM4LDcgKzE0MzgsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgYm9vbCBoYXNDYXB0dXJl
ZFZhcmlhYmxlcygpIGNvbnN0IHsgcmV0dXJuICEhbV9jYXB0dXJlZFZhcmlhYmxlcy5zaXplKCk7
IH0KICAgICAgICAgc2l6ZV90IGNhcHR1cmVkVmFyaWFibGVDb3VudCgpIGNvbnN0IHsgcmV0dXJu
IG1fY2FwdHVyZWRWYXJpYWJsZXMuc2l6ZSgpOyB9CiAgICAgICAgIGNvbnN0IElkZW50aWZpZXJT
ZXQmIGNhcHR1cmVkVmFyaWFibGVzKCkgY29uc3QgeyByZXR1cm4gbV9jYXB0dXJlZFZhcmlhYmxl
czsgfQotICAgICAgICBib29sIGNhcHR1cmVzKGNvbnN0IElkZW50aWZpZXImIGlkZW50KSB7IHJl
dHVybiBtX2NhcHR1cmVkVmFyaWFibGVzLmNvbnRhaW5zKGlkZW50LmltcGwoKSk7IH0KKyAgICAg
ICAgYm9vbCBjYXB0dXJlcyhTdHJpbmdJbXBsKiB1aWQpIHsgcmV0dXJuIG1fY2FwdHVyZWRWYXJp
YWJsZXMuY29udGFpbnModWlkKTsgfQorICAgICAgICBib29sIGNhcHR1cmVzKGNvbnN0IElkZW50
aWZpZXImIGlkZW50KSB7IHJldHVybiBjYXB0dXJlcyhpZGVudC5pbXBsKCkpOyB9CiAKICAgICAg
ICAgVmFyU3RhY2smIHZhclN0YWNrKCkgeyByZXR1cm4gbV92YXJTdGFjazsgfQogICAgICAgICBG
dW5jdGlvblN0YWNrJiBmdW5jdGlvblN0YWNrKCkgeyByZXR1cm4gbV9mdW5jdGlvblN0YWNrOyB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Bcmd1bWVudHNNb2RlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJndW1lbnRzTW9kZS5o
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJndW1lbnRz
TW9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBcmd1bWVudHNNb2RlX2gKKyNk
ZWZpbmUgQXJndW1lbnRzTW9kZV9oCisKK25hbWVzcGFjZSBKU0MgeworCitlbnVtIEFyZ3VtZW50
c01vZGUgeworICAgIENsb25lZEFyZ3VtZW50c0NyZWF0aW9uTW9kZSwKKyAgICBGYWtlQXJndW1l
bnRWYWx1ZXNDcmVhdGlvbk1vZGUKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYg
Ly8gQXJndW1lbnRzTW9kZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0NhcHR1cmVkQXJndW1lbnRzT2Zmc2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9DYXB0dXJlZEFyZ3VtZW50c09mZnNldC5jcHAJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYXB0dXJlZEFyZ3VtZW50c09mZnNl
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiQ2FwdHVyZWRBcmd1bWVudHNPZmZzZXQuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3ZvaWQg
Q2FwdHVyZWRBcmd1bWVudHNPZmZzZXQ6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sK
KyAgICBpZiAoISp0aGlzKSB7CisgICAgICAgIG91dC5wcmludCgiY2FwdHVyZWRBcmd1bWVudElu
dmFsaWQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG91dC5wcmludCgiY2FwdHVy
ZWRBcmd1bWVudCIsIG9mZnNldCgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhcHR1cmVkQXJndW1lbnRzT2Zmc2V0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FwdHVyZWRBcmd1
bWVudHNPZmZzZXQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0NhcHR1cmVkQXJndW1lbnRzT2Zmc2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1
MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIENhcHR1cmVkQXJndW1lbnRzT2Zmc2V0X2gKKyNkZWZpbmUgQ2FwdHVyZWRBcmd1bWVudHNP
ZmZzZXRfaAorCisjaW5jbHVkZSAiR2VuZXJpY09mZnNldC5oIgorI2luY2x1ZGUgPHd0Zi9Qcmlu
dFN0cmVhbS5oPgorCituYW1lc3BhY2UgSlNDIHsKKworLy8gVGhpcyBpcyBhbiBvZmZzZXQgaW50
byB0aGUgc3BlY2lhbCBhcmd1bWVudHMgb2JqZWN0LCB3aGljaCBjYXB0dXJlcyB0aGUgYXJndW1l
bnRzIHRvIGEKKy8vIGZ1bmN0aW9uLiBJdCBvbmx5IGNvbWVzIGludG8gcGxheSBpdCB0aGUgYXJn
dW1lbnRzIGFyZW4ndCBhbHNvIGxpZnRlZCBpbnRvIHRoZSBhY3RpdmF0aW9uLgorLy8gSWYgdGhl
eSB3ZXJlIHRoZW4gYWNjZXNzZXMgdG8gdGhlIGFyZ3VtZW50cyB3b3VsZCByZXNvbHZlIHRvIGEg
U2NvcGVPZmZzZXQgYW5kIG5vdCBhCisvLyBDYXB0dXJlZEFyZ3VtZW50c09mZnNldC4KK2NsYXNz
IENhcHR1cmVkQXJndW1lbnRzT2Zmc2V0IDogcHVibGljIEdlbmVyaWNPZmZzZXQ8Q2FwdHVyZWRB
cmd1bWVudHNPZmZzZXQ+IHsKK3B1YmxpYzoKKyAgICBDYXB0dXJlZEFyZ3VtZW50c09mZnNldCgp
IHsgfQorICAgIAorICAgIGV4cGxpY2l0IENhcHR1cmVkQXJndW1lbnRzT2Zmc2V0KHVuc2lnbmVk
IG9mZnNldCkKKyAgICAgICAgOiBHZW5lcmljT2Zmc2V0KG9mZnNldCkKKyAgICB7CisgICAgfQor
ICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworfTsKKworfSAvLyBuYW1l
c3BhY2UgSlNDCisKKyNlbmRpZiAvLyBDYXB0dXJlZEFyZ3VtZW50c09mZnNldF9oCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmNw
cAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFy
Z3VtZW50cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNDQgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkRpcmVjdEFyZ3VtZW50cy5oIgorCisjaW5jbHVkZSAiR2VuZXJpY0FyZ3VtZW50
c0lubGluZXMuaCIKKyNpbmNsdWRlICJKU0FyZ3VtZW50c0l0ZXJhdG9yLmgiCisjaW5jbHVkZSAi
SlNDSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsKKworU1RBVElDX0FTU0VSVF9JU19UUklW
SUFMTFlfREVTVFJVQ1RJQkxFKERpcmVjdEFyZ3VtZW50cyk7CisKK2NvbnN0IENsYXNzSW5mbyBE
aXJlY3RBcmd1bWVudHM6OnNfaW5mbyA9IHsgIkFyZ3VtZW50cyIsICZCYXNlOjpzX2luZm8sIDAs
IENSRUFURV9NRVRIT0RfVEFCTEUoRGlyZWN0QXJndW1lbnRzKSB9OworCitEaXJlY3RBcmd1bWVu
dHM6OkRpcmVjdEFyZ3VtZW50cyhWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCB1bnNpZ25l
ZCBsZW5ndGgpCisgICAgOiBHZW5lcmljQXJndW1lbnRzKHZtLCBzdHJ1Y3R1cmUpCisgICAgLCBt
X2xlbmd0aChsZW5ndGgpCit7Cit9CisKK0RpcmVjdEFyZ3VtZW50cyogRGlyZWN0QXJndW1lbnRz
OjpjcmVhdGVVbmluaXRpYWxpemVkKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHVuc2ln
bmVkIGxlbmd0aCkKK3sKKyAgICBEaXJlY3RBcmd1bWVudHMqIHJlc3VsdCA9CisgICAgICAgIG5l
dyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPERpcmVjdEFyZ3VtZW50cz4odm0uaGVhcCwgYWxsb2Nh
dGlvblNpemUobGVuZ3RoKSkpCisgICAgICAgICh2bSwgc3RydWN0dXJlKTsKKyAgICByZXN1bHQt
PmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitEaXJlY3RBcmd1
bWVudHMqIERpcmVjdEFyZ3VtZW50czo6Y3JlYXRlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICBEaXJlY3RBcmd1bWVudHMqIHJlc3VsdCA9IGNy
ZWF0ZVVuaW5pdGlhbGl6ZWQodm0sIHN0cnVjdHVyZSwgbGVuZ3RoKTsKKyAgICAKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBsZW5ndGg7IGktLTspCisgICAgICAgIHJlc3VsdC0+c3RvcmFnZSgpW2ld
LmNsZWFyKCk7CisgICAgCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworRGlyZWN0QXJndW1lbnRz
KiBEaXJlY3RBcmd1bWVudHM6OmNyZWF0ZUJ5Q29weWluZyhWTSYgdm0sIFN0cnVjdHVyZSogc3Ry
dWN0dXJlLCBFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgdW5zaWduZWQgbGVuZ3RoID0gZXhlYy0+
YXJndW1lbnRDb3VudCgpOworICAgIERpcmVjdEFyZ3VtZW50cyogcmVzdWx0ID0gY3JlYXRlVW5p
bml0aWFsaXplZCh2bSwgc3RydWN0dXJlLCBsZW5ndGgpOworICAgIAorICAgIGZvciAodW5zaWdu
ZWQgaSA9IGxlbmd0aDsgaS0tOykKKyAgICAgICAgcmVzdWx0LT5zdG9yYWdlKClbaV0uc2V0KHZt
LCByZXN1bHQsIGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KGkpKTsKKyAgICAKKyAgICByZXN1bHQt
PmNhbGxlZSgpLnNldCh2bSwgcmVzdWx0LCBqc0Nhc3Q8SlNGdW5jdGlvbio+KGV4ZWMtPmNhbGxl
ZSgpKSk7CisgICAgCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBEaXJlY3RBcmd1bWVu
dHM6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiB0aGlzQ2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Cit7CisgICAgRGlyZWN0QXJndW1lbnRzKiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8RGlyZWN0
QXJndW1lbnRzKj4odGhpc0NlbGwpOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhp
c09iamVjdCwgaW5mbygpKTsKKyAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZp
c2l0b3IpOworICAgIAorICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzKHRoaXNPYmplY3QtPnN0b3Jh
Z2UoKSwgdGhpc09iamVjdC0+bV9sZW5ndGgpOworICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2Jq
ZWN0LT5tX2NhbGxlZSk7CisgICAgCisgICAgaWYgKHRoaXNPYmplY3QtPm1fb3ZlcnJpZGVzKSB7
CisgICAgICAgIHZpc2l0b3IuY29weUxhdGVyKAorICAgICAgICAgICAgdGhpc09iamVjdCwgRGly
ZWN0QXJndW1lbnRzT3ZlcnJpZGVzQ29weVRva2VuLAorICAgICAgICAgICAgdGhpc09iamVjdC0+
bV9vdmVycmlkZXMuZ2V0KCksIG1fbGVuZ3RoKTsKKyAgICB9Cit9CisKK3ZvaWQgRGlyZWN0QXJn
dW1lbnRzOjpjb3B5QmFja2luZ1N0b3JlKEpTQ2VsbCogdGhpc0NlbGwsIENvcHlWaXNpdG9yJiB2
aXNpdG9yLCBDb3B5VG9rZW4gdG9rZW4pCit7CisgICAgRGlyZWN0QXJndW1lbnRzKiB0aGlzT2Jq
ZWN0ID0gc3RhdGljX2Nhc3Q8RGlyZWN0QXJndW1lbnRzKj4odGhpc0NlbGwpOworICAgIEFTU0VS
VF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKKyAgICAKKyAgICBSRUxF
QVNFX0FTU0VSVCh0b2tlbiA9PSBEaXJlY3RBcmd1bWVudHNPdmVycmlkZXNDb3B5VG9rZW4pOwor
ICAgIAorICAgIGJvb2wqIG9sZE92ZXJyaWRlcyA9IHRoaXNPYmplY3QtPm1fb3ZlcnJpZGVzLmdl
dCgpOworICAgIGlmICghb2xkT3ZlcnJpZGVzKQorICAgICAgICByZXR1cm47CisgICAgCisgICAg
aWYgKHZpc2l0b3IuY2hlY2tJZlNob3VsZENvcHkob3ZlcnJpZGVzKSkgeworICAgICAgICBib29s
KiBuZXdPdmVycmlkZXMgPSBzdGF0aWNfY2FzdDxib29sKj4odmlzaXRvci5hbGxvY2F0ZU5ld1Nw
YWNlKG1fbGVuZ3RoKSk7CisgICAgICAgIG1lbWNweShuZXdPdmVycmlkZXMsIG9sZE92ZXJyaWRl
cywgbV9sZW5ndGgpOworICAgICAgICB0aGlzT2JqZWN0LT5tX292ZXJyaWRlcy5zZXRXaXRob3V0
V3JpdGVCYXJyaWVyKG5ld092ZXJyaWRlcyk7CisgICAgICAgIHZpc2l0b3IuZGlkQ29weShvbGRP
dmVycmlkZXMsIG1fbGVuZ3RoKTsKKyAgICB9Cit9CisKK1N0cnVjdHVyZSogRGlyZWN0QXJndW1l
bnRzOjpjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU1ZhbHVlIHByb3RvdHlwZSkKK3sKKyAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0s
IGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhEaXJlY3RBcmd1bWVudHNUeXBlLCBT
dHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Cit9CisKK3ZvaWQgRGlyZWN0QXJndW1lbnRzOjpzbG93
RG93bkFuZFdhc3RlTWVtb3J5KFZNJiB2bSkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVCghbV9vdmVy
cmlkZXMpOworICAgIAorICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3Ro
LCBqc051bWJlcihtX2xlbmd0aCksIERvbnRFbnVtKTsKKyAgICBwdXREaXJlY3Qodm0sIHZtLnBy
b3BlcnR5TmFtZXMtPmNhbGxlZSwgbV9jYWxsZWUuZ2V0KCksIERvbnRFbnVtKTsKKyAgICAKKyAg
ICB2b2lkKiBiYWNraW5nU3RvcmU7CisgICAgUkVMRUFTRV9BU1NFUlQodm0uaGVhcC50cnlBbGxv
Y2F0ZVN0b3JhZ2UodGhpcywgbV9sZW5ndGgpLCAmYmFja2luZ1N0b3JlKTsKKyAgICBtX292ZXJy
aWRlcy5zZXQodm0sIHRoaXMsIHN0YXRpY19jYXN0PGJvb2wqPihiYWNraW5nU3RvcmUpKTsKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBtX2xlbmd0aDsgaS0tOykKKyAgICAgICAgbV9vdmVycmlkZXMu
Z2V0KClbaV0gPSBmYWxzZTsKK30KKwordm9pZCBEaXJlY3RBcmd1bWVudHM6OnNsb3dEb3duQW5k
V2FzdGVNZW1vcnlJZk5lY2Vzc2FyeShWTSYgdm0pCit7CisgICAgaWYgKCFtX292ZXJyaWRlcykK
KyAgICAgICAgc2xvd0Rvd25BbmRXYXN0ZU1lbW9yeSh2bSk7Cit9CisKK3ZvaWQgRGlyZWN0QXJn
dW1lbnRzOjpvdmVycmlkZUFyZ3VtZW50KFZNJiB2bSwgdW5zaWduZWQgaSkKK3sKKyAgICBzbG93
RG93bkFuZFdhc3RlTWVtb3J5SWZOZWNlc3Nhcnkodm0pOworICAgIG1fb3ZlcnJpZGVzLmdldCgp
W2luZGV4XSA9IHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTM5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgRGlyZWN0QXJndW1lbnRzX2gKKyNkZWZpbmUg
RGlyZWN0QXJndW1lbnRzX2gKKworI2luY2x1ZGUgIkdlbmVyaWNBcmd1bWVudHMuaCIKKworbmFt
ZXNwYWNlIEpTQyB7CisKKy8vIFRoaXMgaXMgYW4gQXJndW1lbnRzLWNsYXNzIG9iamVjdCB0aGF0
IHdlIGNyZWF0ZSB3aGVuIHlvdSBzYXkgImFyZ3VtZW50cyIgaW5zaWRlIGEgZnVuY3Rpb24sCisv
LyBhbmQgbm9uZSBvZiB0aGUgYXJndW1lbnRzIGFyZSBjYXB0dXJlZCBpbiB0aGUgZnVuY3Rpb24n
cyBhY3RpdmF0aW9uLiBUaGUgZnVuY3Rpb24gd2lsbCBjb3B5IGFsbAorLy8gb2YgaXRzIGFyZ3Vt
ZW50cyBpbnRvIHRoaXMgb2JqZWN0LCBhbmQgYWxsIHN1YnNlcXVlbnQgYWNjZXNzZXMgdG8gdGhl
IGFyZ3VtZW50cyB3aWxsIGdvIHRocm91Z2gKKy8vIHRoaXMgb2JqZWN0IHRoZXJlYWZ0ZXIuIFNw
ZWNpYWwgc3VwcG9ydCBpcyBpbiBwbGFjZSBmb3IgbWlzY2hldmlvdXMgZXZlbnRzIGxpa2UgdGhl
IGFyZ3VtZW50cworLy8gYmVpbmcgZGVsZXRlZCAoc29tZXRoaW5nIGxpa2UgImRlbGV0ZSBhcmd1
bWVudHNbMF0iKSBvciByZWNvbmZpZ3VyZWQgKGJyb2FkbHksIHdlIHNheSBkZWxldGlvbnMKKy8v
IGFuZCByZWNvbmZpZ3VyYXRpb25zIG1lYW4gdGhhdCB0aGUgcmVzcGVjdGl2ZSBhcmd1bWVudCB3
YXMgIm92ZXJyaWRkZW4iKS4KKy8vCisvLyBUbyBzcGVlZCBhbGxvY2F0aW9uLCB0aGlzIG9iamVj
dCB3aWxsIGhvbGQgYWxsIG9mIHRoZSBhcmd1bWVudHMgaW4tcGxhY2UuIFRoZSBhcmd1bWVudHMg
YXMgd2VsbAorLy8gYXMgYSB0YWJsZSBvZiBmbGFncyBzYXlpbmcgd2hpY2ggYXJndW1lbnRzIHdl
cmUgb3ZlcnJpZGRlbi4KK2NsYXNzIERpcmVjdEFyZ3VtZW50cyA6IHB1YmxpYyBHZW5lcmljQXJn
dW1lbnRzPERpcmVjdEFyZ3VtZW50cz4geworcHJpdmF0ZToKKyAgICBEaXJlY3RBcmd1bWVudHMo
Vk0mLCBTdHJ1Y3R1cmUqLCB1bnNpZ25lZCBsZW5ndGgpOworICAgIAorcHVibGljOgorICAgIC8v
IENyZWF0ZXMgYW4gYXJndW1lbnRzIG9iamVjdCBidXQgbGVhdmVzIGl0IHVuaW5pdGlhbGl6ZWQu
IFRoaXMgaXMgZGFuZ2Vyb3VzIGlmIHdlIEdDIHJpZ2h0CisgICAgLy8gYWZ0ZXIgYWxsb2NhdGlv
bi4KKyAgICBzdGF0aWMgRGlyZWN0QXJndW1lbnRzKiBjcmVhdGVVbmluaXRpYWxpemVkKFZNJiwg
U3RydWN0dXJlKiwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICAKKyAgICAvLyBDcmVhdGVzIGFuIGFy
Z3VtZW50cyBvYmplY3QgYW5kIGluaXRpYWxpemVzIGV2ZXJ5dGhpbmcgdG8gdGhlIGVtcHR5IHZh
bHVlLiBVc2UgdGhpcyBpZiB5b3UKKyAgICAvLyBjYW5ub3QgZ3VhcmFudGVlIHRoYXQgeW91J2xs
IGltbWVkaWF0ZWx5IGluaXRpYWxpemUgYWxsIG9mIHRoZSBlbGVtZW50cy4KKyAgICBzdGF0aWMg
RGlyZWN0QXJndW1lbnRzKiBjcmVhdGUoVk0mLCBTdHJ1Y3R1cmUqLCB1bnNpZ25lZCBsZW5ndGgp
OworICAgIAorICAgIC8vIENyZWF0ZXMgYW4gYXJndW1lbnRzIG9iamVjdCBieSBjb3B5aW5nIHRo
ZSBhcmd1bW5ldHMgZnJvbSB0aGUgc3RhY2suCisgICAgc3RhdGljIERpcmVjdEFyZ3VtZW50cyog
Y3JlYXRlQnlDb3B5aW5nKFZNJiwgU3RydWN0dXJlKiwgRXhlY1N0YXRlKik7CisgICAgCisgICAg
c3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIHN0
YXRpYyB2b2lkIGNvcHlCYWNraW5nU3RvcmUoSlNDZWxsKiwgQ29weVZpc2l0b3ImLCBDb3B5VG9r
ZW4pOworICAgIAorICAgIHVpbnQzMl90IGludGVybmFsTGVuZ3RoKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBtX2xlbmd0aDsKKyAgICB9CisgICAgCisgICAgdWludDMyX3QgbGVuZ3Ro
KEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChVTkxJS0VMWShtX292
ZXJyaWRlcykpCisgICAgICAgICAgICByZXR1cm4gZ2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFt
ZXMoKS5sZW5ndGgpLnRvVUludDMyKGV4ZWMpOworICAgICAgICByZXR1cm4gbV9sZW5ndGg7Cisg
ICAgfQorICAgIAorICAgIGJvb2wgY2FuQWNjZXNzSW5kZXhRdWlja2x5KHVpbnQzMl90IGkpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gaSA8IG1fbGVuZ3RoICYmICghbV9vdmVycmlkZXMg
fHwgIW1fb3ZlcnJpZGVzLmdldCgpW2ldKTsKKyAgICB9CisgICAgCisgICAgSlNWYWx1ZSBnZXRJ
bmRleFF1aWNrbHkodWludDMyX3QgaSkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVF9XSVRI
X1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGNhbkFjY2Vzc0luZGV4UXVpY2tseShpKSk7CisgICAgICAg
IHJldHVybiBzdG9yYWdlKClbaV0uZ2V0KCk7CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0SW5k
ZXhRdWlja2x5KFZNJiB2bSwgdWludDMyX3QgaSwgSlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAg
ICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGNhbkFjY2Vzc0luZGV4UXVpY2ts
eShpKSk7CisgICAgICAgIHN0b3JhZ2UoKVtpXS5zZXQodm0sIHRoaXMsIHZhbHVlKTsKKyAgICB9
CisgICAgCisgICAgV3JpdGVCYXJyaWVyPEpTRnVuY3Rpb24+JiBjYWxsZWUoKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG1fY2FsbGVlOworICAgIH0KKyAgICAKKyAgICBXcml0ZUJhcnJpZXI8VW5r
bm93bj4mIGFyZ3VtZW50KENhcHR1cmVkQXJndW1lbnRzT2Zmc2V0IG9mZnNldCkKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChvZmZzZXQpOworICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBM
SUNBVElPTihvZmZzZXQub2Zmc2V0KCkgPCBtX2xlbmd0aCk7CisgICAgICAgIHJldHVybiBzdG9y
YWdlKClbb2Zmc2V0Lm9mZnNldCgpXTsKKyAgICB9CisgICAgCisgICAgLy8gTWV0aG9kcyBpbnRl
bmRlZCBmb3IgdXNlIGJ5IHRoZSBHZW5lcmljQXJndW1lbnRzIG1peGluLgorICAgIGJvb2wgb3Zl
cnJvZGVUaGluZ3MoKSBjb25zdCB7IHJldHVybiAhIW1fb3ZlcnJpZGVzOyB9CisgICAgdm9pZCBz
bG93RG93bkFuZFdhc3RlTWVtb3J5KFZNJik7CisgICAgdm9pZCBzbG93RG93bkFuZFdhc3RlTWVt
b3J5SWZOZWNlc3NhcnkoVk0mKTsKKyAgICB2b2lkIG92ZXJyaWRlQXJndW1lbnQoVk0mLCB1bnNp
Z25lZCBpbmRleCk7CisgICAgCisgICAgREVDTEFSRV9JTkZPOworICAgIAorICAgIHN0YXRpYyBT
dHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBw
cm90b3R5cGUpOworICAgIAorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZMZW5ndGgoKSB7
IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoRGlyZWN0QXJndW1lbnRzLCBtX2xlbmd0aCk7IH0KKyAg
ICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mT3ZlcnJpZGVzKCkgeyByZXR1cm4gT0JKRUNUX09G
RlNFVE9GKERpcmVjdEFyZ3VtZW50cywgbV9vdmVycmlkZXMpOyB9CisgICAgCisgICAgc3RhdGlj
IHNpemVfdCBzdG9yYWdlT2Zmc2V0KCkKKyAgICB7CisgICAgICAgIHJldHVybiBXVEY6OnJvdW5k
VXBUb011bHRpcGxlT2Y8c2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPik+KHNpemVvZihEaXJl
Y3RBcmd1bWVudHMpKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIHNpemVfdCBhbGxvY2F0aW9u
U2l6ZSh1aW50MzJfdCBsZW5ndGgpCisgICAgeworICAgICAgICByZXR1cm4gc3RvcmFnZU9mZnNl
dCgpICsgc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikgKiBsZW5ndGg7CisgICAgfQorICAg
IAorcHJpdmF0ZToKKyAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHN0b3JhZ2UoKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxXcml0ZUJhcnJpZXI8VW5rbm93bj4qPihiaXR3
aXNlX2Nhc3Q8Y2hhcio+KHRoaXMpICsgc3RvcmFnZU9mZnNldCgpKTsKKyAgICB9CisgICAgCisg
ICAgV3JpdGVCYXJyaWVyPEpTRnVuY3Rpb24qPiBtX2NhbGxlZTsKKyAgICB1aW50MzJfdCBtX2xl
bmd0aDsgLy8gQWx3YXlzIHRoZSBhY3R1YWwgbGVuZ3RoIG9mIGNhcHR1cmVkIGFyZ3VtZW50cyBh
bmQgbmV2ZXIgd2hhdCB3YXMgc3RvcmVkIGludG8gdGhlIGxlbmd0aCBwcm9wZXJ0eS4KKyAgICBD
b3B5V3JpdGVCYXJyaWVyPGJvb2w+IG1fb3ZlcnJpZGVzOyAvLyBJZiBub24tbnVsbCwgaXQgbWVh
bnMgdGhhdCBsZW5ndGgsIGNhbGxlZSwgYW5kIGNhbGxlciBhcmUgZnVsbHkgbWF0ZXJpYWxpemVk
IHByb3BlcnRpZXMuCit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIERpcmVj
dEFyZ3VtZW50c19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVy
aWNBcmd1bWVudHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9HZW5lcmljQXJndW1lbnRzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2
MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIEdlbmVyaWNBcmd1bWVudHNfaAorI2RlZmluZSBHZW5lcmljQXJndW1lbnRzX2gKKworI2lu
Y2x1ZGUgIkpTT2JqZWN0LmgiCisKK25hbWVzcGFjZSBKU0MgeworCisvLyBUaGlzIGlzIGEgbWl4
aW4gZm9yIHRoZSB0d28ga2luZHMgb2YgQXJndW1lbnRzLWNsYXNzIG9iamVjdHMgdGhhdCBhcmlz
ZSB3aGVuIHlvdSBzYXkKKy8vICJhcmd1bWVudHMiIGluc2lkZSBhIGZ1bmN0aW9uLiBUaGlzIGNs
YXNzIGRvZXNuJ3Qgc2hvdyB1cCBpbiB0aGUgSlNDZWxsIGluaGVyaXRhbmNlIGhpZXJhcmNoeS4K
K3RlbXBsYXRlPHR5cGVuYW1lIFR5cGU+CitjbGFzcyBHZW5lcmljQXJndW1lbnRzIDogcHVibGlj
IEpTTm9uRmluYWxPYmplY3QgeworcHVibGljOgorICAgIHR5cGVkZWYgSlNOb25GaW5hbE9iamVj
dCBCYXNlOworCisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gT3Zl
cnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5
SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IE92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMg
fCBKU09iamVjdDo6U3RydWN0dXJlRmxhZ3M7CisKK3Byb3RlY3RlZDoKKyAgICBHZW5lcmljQXJn
dW1lbnRzKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgICAgIDogQmFzZSh2bSwg
c3RydWN0dXJlKQorICAgIHsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0
eVNsb3QoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYp
OworICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNPYmplY3QqLCBF
eGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOworICAgIHN0
YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9w
ZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CisgICAgc3RhdGljIHZvaWQgcHV0KEpT
Q2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90
Jik7CisgICAgc3RhdGljIHZvaWQgcHV0QnlJbmRleChKU0NlbGwqLCBFeGVjU3RhdGUqLCB1bnNp
Z25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpOworICAgIHN0YXRp
YyB2b2lkIGRlbGV0ZVByb3BlcnR5KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSk7
CisgICAgc3RhdGljIHZvaWQgZGVsZXRlUHJvcGVydHlCeUluZGV4KEpTQ2VsbCosIEV4ZWNTdGF0
ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSk7CisgICAgc3RhdGljIHZvaWQgZGVmaW5lT3duUHJv
cGVydHkoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5
RGVzY3JpcHRvciYsIGJvb2wgc2hvdWxkVGhyb3cpOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlND
CisKKyNlbmRpZiAvLyBHZW5lcmljQXJndW1lbnRzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lubGluZXMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzSW5saW5lcy5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3Vt
ZW50c0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIxMiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEdlbmVyaWNBcmd1
bWVudHNJbmxpbmVzX2gKKyNkZWZpbmUgR2VuZXJpY0FyZ3VtZW50c0lubGluZXNfaAorCisjaW5j
bHVkZSAiR2VuZXJpY0FyZ3VtZW50cy5oIgorI2luY2x1ZGUgIkpTQXJndW1lbnRzSXRlcmF0b3Iu
aCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeworCit0ZW1wbGF0
ZTx0eXBlbmFtZSBUeXBlPgorYm9vbCBHZW5lcmljQXJndW1lbnRzPFR5cGU+OjpnZXRPd25Qcm9w
ZXJ0eVNsb3QoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUg
aWRlbnQsIFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICBUeXBlKiB0aGlzT2JqZWN0ID0ganND
YXN0PFR5cGUqPihvYmplY3QpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgCisgICAg
aWYgKCF0aGlzT2JqZWN0LT5vdmVycm9kZVRoaW5ncygpKSB7CisgICAgICAgIGlmIChpZGVudCA9
PSB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgpIHsKKyAgICAgICAgICAgIHNsb3Quc2V0VmFsdWUo
dGhpc09iamVjdCwgRG9udEVudW0sIGpzTnVtYmVyKHRoaXNPYmplY3QtPmludGVybmFsTGVuZ3Ro
KCkpKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmIChp
ZGVudCA9PSB2bS5wcm9wZXJ0eU5hbWVzLT5jYWxsZWUpIHsKKyAgICAgICAgICAgIHNsb3Quc2V0
VmFsdWUodGhpc09iamVjdCwgRG9udEVudW0sIHRoaXNPYmplY3QtPmNhbGxlZSgpLmdldCgpKTsK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHVu
c2lnbmVkIGluZGV4ID0gaWRlbnQuYXNJbmRleCgpOworICAgIGlmICh0aGlzT2JqZWN0LT5jYW5B
Y2Nlc3NJbmRleFF1aWNrbHkoaW5kZXgpKSB7CisgICAgICAgIHNsb3Quc2V0VmFsdWUodGhpc09i
amVjdCwgTm9uZSwgdGhpc09iamVjdC0+Z2V0SW5kZXhRdWlja2x5KGluZGV4KSk7CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICBpZiAoQmFzZTo6Z2V0T3duUHJvcGVydHlT
bG90KHRoaXNPYmplY3QsIGV4ZWMsIGlkZW50LCBzbG90KSkKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgCisgICAgaWYgKGlkZW50ID09IHZtLnByb3BlcnR5TmFtZXMtPml0ZXJhdG9yUHJpdmF0
ZU5hbWUpIHsKKyAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGV4ZWMtPmxl
eGljYWxHbG9iYWxPYmplY3QoKTsKKyAgICAgICAgdGhpc09iamVjdC0+SlNDX05BVElWRV9GVU5D
VElPTih2bS5wcm9wZXJ0eU5hbWVzLT5pdGVyYXRvclByaXZhdGVOYW1lLCBhcmd1bWVudHNGdW5j
SXRlcmF0b3IsIERvbnRFbnVtLCAwKTsKKyAgICAgICAgaWYgKEpTT2JqZWN0OjpnZXRPd25Qcm9w
ZXJ0eVNsb3QodGhpc09iamVjdCwgZXhlYywgaWRlbnQsIHNsb3QpKQorICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIHJldHVybiBmYWxzZTsKK30KKwordGVtcGxhdGU8
dHlwZW5hbWUgVHlwZT4KK2Jvb2wgR2VuZXJpY0FyZ3VtZW50czxUeXBlPjo6Z2V0T3duUHJvcGVy
dHlTbG90QnlJbmRleChKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVk
IGluZGV4LCBQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgVHlwZSogdGhpc09iamVjdCA9IGpz
Q2FzdDxUeXBlKj4ob2JqZWN0KTsKKyAgICAKKyAgICBpZiAodGhpc09iamVjdC0+Y2FuQWNjZXNz
SW5kZXhRdWlja2x5KGluZGV4KSkgeworICAgICAgICBzbG90LnNldFZhbHVlKHRoaXNPYmplY3Qs
IE5vbmUsIHRoaXNPYmplY3QtPmdldEluZGV4UXVpY2tseShpbmRleCkpOworICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIEJhc2U6OmdldE93blByb3BlcnR5U2xv
dEJ5SW5kZXgob2JqZWN0LCBleGVjLCBpbmRleCwgc2xvdCk7Cit9CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFR5cGU+Cit2b2lkIEdlbmVyaWNBcmd1bWVudHM8VHlwZT46OmdldE93blByb3BlcnR5TmFt
ZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYg
YXJyYXksIEVudW1lcmF0aW9uTW9kZSBtb2RlKQoreworICAgIFR5cGUqIHRoaXNPYmplY3QgPSBq
c0Nhc3Q8VHlwZSo+KG9iamVjdCk7CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHRoaXNPYmplY3QtPmludGVybmFsTGVuZ3RoKCk7ICsraSkgeworICAgICAgICBpZiAoIXRoaXNP
YmplY3QtPmNhbkFjY2Vzc0luZGV4UXVpY2tseShpbmRleCkpCisgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgYXJyYXkuYWRkKElkZW50aWZpZXI6OmZyb20oZXhlYywgaSkpOworICAgIH0K
KyAgICBpZiAoc2hvdWxkSW5jbHVkZURvbnRFbnVtUHJvcGVydGllcyhtb2RlKSAmJiAhdGhpc09i
amVjdC0+b3ZlcnJvZGVUaGluZ3MoKSkgeworICAgICAgICBhcnJheS5hZGQoZXhlYy0+cHJvcGVy
dHlOYW1lcygpLmNhbGxlZSk7CisgICAgICAgIGFycmF5LmFkZChleGVjLT5wcm9wZXJ0eU5hbWVz
KCkubGVuZ3RoKTsKKyAgICB9CisgICAgQmFzZTo6Z2V0T3duUHJvcGVydHlOYW1lcyh0aGlzT2Jq
ZWN0LCBleGVjLCBhcnJheSwgbW9kZSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFR5cGU+Cit2
b2lkIEdlbmVyaWNBcmd1bWVudHM8VHlwZT46OnB1dChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSog
ZXhlYywgUHJvcGVydHlOYW1lIGlkZW50LCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3Qm
IHNsb3QpCit7CisgICAgVHlwZSogdGhpc09iamVjdCA9IGpzQ2FzdDxUeXBlKj4ob2JqZWN0KTsK
KyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIAorICAgIGlmICghdGhpc09iamVjdC0+b3Zl
cnJvZGVUaGluZ3MoKQorICAgICAgICAmJiAoaWRlbnQgPT0gdm0ucHJvcGVydHlOYW1lcy0+bGVu
Z3RoCisgICAgICAgICAgICB8fCBpZGVudCA9PSB2bS5wcm9wZXJ0eU5hbWVzLT5jYWxsZWUpKQor
ICAgICAgICB0aGlzT2JqZWN0LT5zbG93RG93bkFuZFdhc3RlTWVtb3J5KHZtKTsKKyAgICAKKyAg
ICB1bnNpZ25lZCBpbmRleCA9IGlkZW50LmFzSW5kZXgoKTsKKyAgICBpZiAodGhpc09iamVjdC0+
Y2FuQWNjZXNzSW5kZXhRdWlja2x5KGluZGV4KSkgeworICAgICAgICBzZXRJbmRleFF1aWNrbHko
dm0sIGluZGV4LCB2YWx1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgQmFz
ZTo6cHV0KHRoaXNPYmplY3QsIGV4ZWMsIGlkZW50LCB2YWx1ZSwgc2xvdCk7Cit9CisKK3RlbXBs
YXRlPHR5cGVuYW1lIFR5cGU+Cit2b2lkIEdlbmVyaWNBcmd1bWVudHM8VHlwZT46OnB1dEJ5SW5k
ZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGluZGV4LCBKU1ZhbHVl
IHZhbHVlLCBib29sIHNob3VsZFRocm93KQoreworICAgIFR5cGUqIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8VHlwZSo+KG9iamVjdCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICAKKyAgICBp
ZiAodGhpc09iamVjdC0+Y2FuU2V0SW5kZXhRdWlja2x5KGluZGV4KSkgeworICAgICAgICBzZXRJ
bmRleFF1aWNrbHkodm0sIGluZGV4LCB2YWx1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgCisgICAgcmV0dXJuIEJhc2U6OnB1dEJ5SW5kZXgoY2VsbCwgZXhlYywgaW5kZXgsIHZhbHVl
LCBzaG91bGRUaHJvdyk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFR5cGU+Cit2b2lkIEdlbmVy
aWNBcmd1bWVudHM8VHlwZT46OmRlbGV0ZVByb3BlcnR5KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRl
KiBleGVjLCBQcm9wZXJ0eU5hbWUgaWRlbnQpCit7CisgICAgVHlwZSogdGhpc09iamVjdCA9IGpz
Q2FzdDxUeXBlKj4ob2JqZWN0KTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIAorICAg
IGlmICghdGhpc09iamVjdC0+b3ZlcnJvZGVUaGluZ3MoKQorICAgICAgICAmJiAoaWRlbnQgPT0g
dm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoCisgICAgICAgICAgICB8fCBpZGVudCA9PSB2bS5wcm9w
ZXJ0eU5hbWVzLT5jYWxsZWUpKQorICAgICAgICB0aGlzT2JqZWN0LT5zbG93RG93bkFuZFdhc3Rl
TWVtb3J5KHZtKTsKKyAgICAKKyAgICB1bnNpZ25lZCBpbmRleCA9IGlkZW50LmFzSW5kZXgoKTsK
KyAgICBpZiAodGhpc09iamVjdC0+Y2FuQWNjZXNzSW5kZXhRdWlja2x5KGluZGV4KSkgeworICAg
ICAgICB0aGlzT2JqZWN0LT5vdmVycmlkZUFyZ3VtZW50KHZtLCBpbmRleCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgCisgICAgQmFzZTo6ZGVsZXRlUHJvcGVydHkodGhpc09iamVjdCwg
ZXhlYywgaWRlbnQpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPgordm9pZCBHZW5lcmlj
QXJndW1lbnRzPFR5cGU+OjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVj
U3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGluZGV4KQoreworICAgIFR5cGUqIHRoaXNPYmplY3QgPSBq
c0Nhc3Q8VHlwZSo+KG9iamVjdCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICAKKyAg
ICBpZiAodGhpc09iamVjdC0+Y2FuQWNjZXNzSW5kZXhRdWlja2x5KGluZGV4KSkgeworICAgICAg
ICB0aGlzT2JqZWN0LT5vdmVycmlkZUFyZ3VtZW50KHZtLCBpbmRleCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIEJhc2U6OmRlbGV0ZVByb3BlcnR5QnlJbmRleChj
ZWxsLCBleGVjLCBpbmRleCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFR5cGU+Cit2b2lkIEdl
bmVyaWNBcmd1bWVudHM8VHlwZT46OmRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiBvYmplY3Qs
IEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIGlkZW50LCBjb25zdCBQcm9wZXJ0eURlc2Ny
aXB0b3ImIGRlc2NyaXB0b3IsIGJvb2wgc2hvdWxkVGhyb3cpCit7CisgICAgVHlwZSogdGhpc09i
amVjdCA9IGpzQ2FzdDxUeXBlKj4ob2JqZWN0KTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwor
ICAgIAorICAgIGlmIChpZGVudCA9PSB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgKKyAgICAgICAg
fHwgaWRlbnQgPT0gdm0ucHJvcGVydHlOYW1lcy0+Y2FsbGVlKQorICAgICAgICB0aGlzT2JqZWN0
LT5zbG93RG93bkFuZFdhc3RlTWVtb3J5SWZOZWNlc3Nhcnkodm0pOworICAgIGVsc2UgeworICAg
ICAgICB1bnNpZ25lZCBpbmRleCA9IGlkZW50LmFzSW5kZXgoKTsKKyAgICAgICAgaWYgKHRoaXNP
YmplY3QtPmNhbkFjY2Vzc0FyZ3VtZW50UXVpY2tseShpbmRleCkpIHsKKyAgICAgICAgICAgIGlm
ICghZGVzY3JpcHRvci5pc0FjY2Vzc29yRGVzY3JpcHRvcigpKSB7CisgICAgICAgICAgICAgICAg
Ly8gSWYgdGhlIHByb3BlcnR5IGlzIG5vdCBkZWxldGVkIGFuZCB3ZSBhcmUgdXNpbmcgYSBub24t
YWNjZXNzb3IgZGVzY3JpcHRvciwgdGhlbgorICAgICAgICAgICAgICAgIC8vIG1ha2Ugc3VyZSB0
aGF0IHRoZSBhbGlhc2VkIGFyZ3VtZW50IHNlZXMgdGhlIHZhbHVlLgorICAgICAgICAgICAgICAg
IGlmIChkZXNjcmlwdG9yLnZhbHVlKCkpCisgICAgICAgICAgICAgICAgICAgIHRoaXNPYmplY3Qt
PnNldEluZGV4UXVpY2tseSh2bSwgaSwgZGVzY3JpcHRvci52YWx1ZSgpKTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgIC8vIElmIHRoZSBwcm9wZXJ0eSBpcyBub3QgZGVsZXRlZCBhbmQg
d2UgYXJlIHVzaW5nIGEgbm9uLWFjY2Vzc29yLCB3cml0YWJsZQorICAgICAgICAgICAgICAgIC8v
IGRlc2NyaXB0b3IsIHRoZW4gd2UgYXJlIGRvbmUuIFRoZSBhcmd1bWVudCBjb250aW51ZXMgdG8g
YmUgYWxpYXNlZC4gTm90ZSB0aGF0IHdlCisgICAgICAgICAgICAgICAgLy8gaWdub3JlIHRoZSBy
ZXF1ZXN0IHRvIGNoYW5nZSBlbnVtZXJhYmlsaXR5LiBXZSBhcHBlYXIgdG8gaGF2ZSBhbHdheXMg
ZG9uZSBzbywgaW4KKyAgICAgICAgICAgICAgICAvLyBjYXNlcyB3aGVyZSB0aGUgYXJndW1lbnQg
d2FzIHN0aWxsIGFsaWFzZWQuCisgICAgICAgICAgICAgICAgLy8gRklYTUU6IGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDE5NTIKKyAgICAgICAgICAgICAgICBpZiAo
ZGVzY3JpcHRvci53cml0YWJsZSgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgICAgICAvLyBJZiB0aGUgcHJvcGVydHkg
aXMgYSBub24tZGVsZXRlZCBhcmd1bWVudCwgdGhlbiBtb3ZlIGl0IGludG8gdGhlIGJhc2Ugb2Jq
ZWN0IGFuZAorICAgICAgICAgICAgLy8gdGhlbiBkZWxldGUgaXQuCisgICAgICAgICAgICBKU1Zh
bHVlIHZhbHVlID0gdGhpc09iamVjdC0+Z2V0SW5kZXhRdWlja2x5KGkpOworICAgICAgICAgICAg
QVNTRVJUKHZhbHVlKTsKKyAgICAgICAgICAgIG9iamVjdC0+cHV0RGlyZWN0TWF5QmVJbmRleChl
eGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlKTsKKyAgICAgICAgICAgIHRoaXNPYmplY3QtPm92ZXJy
aWRlQXJndW1lbnQodm0sIGkpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8vIE5vdyBq
dXN0IGxldCB0aGUgbm9ybWFsIG9iamVjdCBtYWNoaW5lcnkgZG8gaXRzIHRoaW5nLgorICAgIHJl
dHVybiBCYXNlOjpkZWZpbmVPd25Qcm9wZXJ0eShvYmplY3QsIGV4ZWMsIGlkZW50LCBkZXNjcmlw
dG9yLCBzaG91bGRUaHJvdyk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8g
R2VuZXJpY0FyZ3VtZW50c0lubGluZXNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9HZW5lcmljT2Zmc2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvR2VuZXJpY09mZnNldC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY09mZnNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMTExIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgR2VuZXJpY09mZnNldF9oCisjZGVmaW5lIEdlbmVyaWNPZmZzZXRfaAorCisjaW5j
bHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKKy8vIEEgbWl4aW4g
Zm9yIGNyZWF0aW5nIHRoZSB2YXJpb3VzIGtpbmRzIG9mIHZhcmlhYmxlIG9mZnNldHMgdGhhdCBv
dXIgZW5naW5lIHN1cHBvcnRzLgordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2NsYXNzIEdlbmVyaWNP
ZmZzZXQgeworcHVibGljOgorICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnZhbGlkT2Zmc2V0
ID0gVUlOVF9NQVg7CisgICAgCisgICAgR2VuZXJpY09mZnNldCgpCisgICAgICAgIDogbV9vZmZz
ZXQoaW52YWxpZE9mZnNldCkKKyAgICB7CisgICAgfQorICAgIAorICAgIGV4cGxpY2l0IEdlbmVy
aWNPZmZzZXQodW5zaWduZWQgb2Zmc2V0KQorICAgICAgICA6IG1fb2Zmc2V0KG9mZnNldCkKKyAg
ICB7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gbV9v
ZmZzZXQgPT0gaW52YWxpZE9mZnNldDsgfQorICAgIAorICAgIHVuc2lnbmVkIG9mZnNldFVuY2hl
Y2tlZCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9vZmZzZXQ7CisgICAgfQorICAg
IAorICAgIHVuc2lnbmVkIG9mZnNldCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQobV9v
ZmZzZXQgIT0gaW52YWxpZE9mZnNldCk7CisgICAgICAgIHJldHVybiBtX29mZnNldDsKKyAgICB9
CisgICAgCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFQmIG90aGVyKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIG1fb2Zmc2V0ID09IG90aGVyLm9mZnNldFVuY2hlY2tlZCgpOworICAg
IH0KKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgVCYgb3RoZXIpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gbV9vZmZzZXQgIT0gb3RoZXIub2Zmc2V0VW5jaGVja2VkKCk7CisgICAgfQor
ICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IFQmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIG1fb2Zmc2V0IDwgb3RoZXIub2Zmc2V0VW5jaGVja2VkKCk7CisgICAgfQorICAgIGJv
b2wgb3BlcmF0b3I+KGNvbnN0IFQmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IG1fb2Zmc2V0ID4gb3RoZXIub2Zmc2V0VW5jaGVja2VkKCk7CisgICAgfQorICAgIGJvb2wgb3Bl
cmF0b3I8PShjb25zdCBUJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX29m
ZnNldCA8PSBvdGhlci5vZmZzZXRVbmNoZWNrZWQoKTsKKyAgICB9CisgICAgYm9vbCBvcGVyYXRv
cj49KGNvbnN0IFQmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fb2Zmc2V0
ID49IG90aGVyLm9mZnNldFVuY2hlY2tlZCgpOworICAgIH0KKyAgICAKKyAgICBUIG9wZXJhdG9y
KyhpbnQgdmFsdWUpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gVChvZmZzZXQoKSArIHZh
bHVlKTsKKyAgICB9CisgICAgVCBvcGVyYXRvci0oaW50IHZhbHVlKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIFQob2Zmc2V0KCkgLSB2YWx1ZSk7CisgICAgfQorICAgIFQmIG9wZXJhdG9y
Kz0oaW50IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuICp0aGlzID0gKnRoaXMgKyB2YWx1
ZTsKKyAgICB9CisgICAgVCYgb3BlcmF0b3ItPShpbnQgdmFsdWUpCisgICAgeworICAgICAgICBy
ZXR1cm4gKnRoaXMgPSAqdGhpcyAtIHZhbHVlOworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAg
dW5zaWduZWQgbV9vZmZzZXQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8v
IEdlbmVyaWNPZmZzZXRfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0FyZ3VtZW50c0l0ZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0FyZ3VtZW50c0l0ZXJhdG9yLmNwcAkocmV2aXNpb24gMTgwNzIwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcmd1bWVudHNJdGVyYXRvci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFw
cGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIw
MTUgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMzMsMTAgKzMzLDE4IEBAIG5hbWVzcGFjZSBKU0MgewogCiBjb25zdCBD
bGFzc0luZm8gSlNBcmd1bWVudHNJdGVyYXRvcjo6c19pbmZvID0geyAiQXJndW1lbnRzSXRlcmF0
b3IiLCAmQmFzZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTQXJndW1lbnRzSXRl
cmF0b3IpIH07CiAKLXZvaWQgSlNBcmd1bWVudHNJdGVyYXRvcjo6ZmluaXNoQ3JlYXRpb24oVk0m
IHZtLCBBcmd1bWVudHMqIGFyZ3VtZW50cykKK3ZvaWQgSlNBcmd1bWVudHNJdGVyYXRvcjo6Zmlu
aXNoQ3JlYXRpb24oVk0mIHZtLCBKU09iamVjdCogYXJndW1lbnRzKQogewogICAgIEJhc2U6OmZp
bmlzaENyZWF0aW9uKHZtKTsKICAgICBtX2FyZ3VtZW50cy5zZXQodm0sIHRoaXMsIGFyZ3VtZW50
cyk7CiB9CiAKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJndW1lbnRzRnVuY0l0ZXJh
dG9yKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBKU09iamVjdCogdGhpc09iaiA9IGV4ZWMtPnRo
aXNWYWx1ZSgpLnRvVGhpcyhleGVjLCBTdHJpY3RNb2RlKS50b09iamVjdChleGVjKTsKKyAgICBp
ZiAoIXRoaXNPYmotPmluaGVyaXRzKEFyZ3VtZW50czo6aW5mbygpKSAmJiAhdGhpc09iai0+aW5o
ZXJpdHMoT3V0T2ZCYW5kQXJndW1lbnRzOjppbmZvKCkpKQorICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKHRocm93VHlwZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiQXR0ZW1wdGVkIHRv
IHVzZSBBcmd1bWVudHMgaXRlcmF0b3Igb24gbm9uLUFyZ3VtZW50cyBvYmplY3QiKSkpOworICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNBcmd1bWVudHNJdGVyYXRvcjo6Y3JlYXRlKGV4ZWMt
PnZtKCksIGV4ZWMtPmNhbGxlZSgpLT5nbG9iYWxPYmplY3QoKS0+YXJndW1lbnRzSXRlcmF0b3JT
dHJ1Y3R1cmUoKSwgdGhpc09iaikpOworfQorCiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0FyZ3VtZW50c0l0ZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcmd1bWVudHNJdGVyYXRvci5oCShyZXZpc2lvbiAxODA3
MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FyZ3VtZW50c0l0ZXJhdG9y
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDEzIEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMsIDIwMTUgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsNyArMjYsNyBAQAogI2lmbmRlZiBKU0FyZ3VtZW50c0l0
ZXJhdG9yX2gKICNkZWZpbmUgSlNBcmd1bWVudHNJdGVyYXRvcl9oCiAKLSNpbmNsdWRlICJBcmd1
bWVudHMuaCIKKyNpbmNsdWRlICJKU09iamVjdC5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAt
NDEsNyArNDEsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2
bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVy
ZUZsYWdzKSwgaW5mbygpKTsKICAgICB9CiAKLSAgICBzdGF0aWMgSlNBcmd1bWVudHNJdGVyYXRv
ciogY3JlYXRlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEFyZ3VtZW50cyogYXJndW1l
bnRzKQorICAgIHN0YXRpYyBKU0FyZ3VtZW50c0l0ZXJhdG9yKiBjcmVhdGUoVk0mIHZtLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgSlNPYmplY3QqIGFyZ3VtZW50cykKICAgICB7CiAgICAgICAgIEpT
QXJndW1lbnRzSXRlcmF0b3IqIGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8
SlNBcmd1bWVudHNJdGVyYXRvcj4odm0uaGVhcCkpIEpTQXJndW1lbnRzSXRlcmF0b3Iodm0sIHN0
cnVjdHVyZSk7CiAgICAgICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbih2bSwgYXJndW1lbnRz
KTsKQEAgLTUwLDExICs1MCwxMSBAQCBwdWJsaWM6CiAKICAgICBib29sIG5leHQoQ2FsbEZyYW1l
KiBjYWxsRnJhbWUsIEpTVmFsdWUmIHZhbHVlKQogICAgIHsKLSAgICAgICAgaWYgKG1fbmV4dElu
ZGV4ID49IG1fYXJndW1lbnRzLT5sZW5ndGgoY2FsbEZyYW1lKSkKKyAgICAgICAgdW5zaWduZWQg
bGVuZ3RoID0KKyAgICAgICAgICAgIG1fYXJndW1lbnRzLT5nZXQoY2FsbEZyYW1lLCBjYWxsRnJh
bWUtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpLnRvVUludDMyKGNhbGxGcmFtZSk7CisgICAgICAg
IGlmIChtX25leHRJbmRleCA+PSBsZW5ndGgpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgIHZhbHVlID0gbV9hcmd1bWVudHMtPnRyeUdldEFyZ3VtZW50KG1fbmV4dEluZGV4Kysp
OwotICAgICAgICBpZiAoIXZhbHVlKQotICAgICAgICAgICAgdmFsdWUgPSBqc1VuZGVmaW5lZCgp
OworICAgICAgICB2YWx1ZSA9IG1fYXJndW1lbnRzLT5nZXRJbmRleChjYWxsRnJhbWUsIG1fbmV4
dEluZGV4KyspOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTY4LDEyICs2OCwx
NCBAQCBwcml2YXRlOgogICAgIHsKICAgICB9CiAKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZN
JiwgQXJndW1lbnRzKik7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIEpTT2JqZWN0Kik7
CiAgICAgCi0gICAgV3JpdGVCYXJyaWVyPEFyZ3VtZW50cz4gbV9hcmd1bWVudHM7CisgICAgV3Jp
dGVCYXJyaWVyPEpTT2JqZWN0PiBtX2FyZ3VtZW50czsKICAgICBzaXplX3QgbV9uZXh0SW5kZXg7
CiB9OwogCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFyZ3VtZW50c0Z1bmNJdGVyYXRv
cihFeGVjU3RhdGUqKTsKKwogfQogCiAjZW5kaWYgLy8gIWRlZmluZWQoSlNBcmd1bWVudHNJdGVy
YXRvcl9oKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNFbnZpcm9ubWVu
dFJlY29yZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNFbnZpcm9ubWVudFJlY29yZC5jcHAJKHJldmlzaW9uIDE4MDcyMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTRW52aXJvbm1lbnRSZWNvcmQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAxMiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIw
MDgsIDIwMTIsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNSw0ICszNSwxMiBAQCBuYW1lc3BhY2UgSlNDIHsK
IAogY29uc3QgQ2xhc3NJbmZvIEpTRW52aXJvbm1lbnRSZWNvcmQ6OnNfaW5mbyA9IHsgIkVudmly
b25tZW50UmVjb3JkIiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU0Vu
dmlyb25tZW50UmVjb3JkKSB9OwogCit2b2lkIEpTRW52aXJvbm1lbnRSZWNvcmQ6OnZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBKU0Vudmly
b25tZW50UmVjb3JkKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTRW52aXJvbm1lbnRSZWNvcmQqPihj
ZWxsKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7
CisgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKKyAgICB2aXNp
dG9yLmFwcGVuZFZhbHVlcyh0aGlzT2JqZWN0LT52YXJpYWJsZXMoKSwgbV9zeW1ib2xUYWJsZS0+
c2NvcGVTaXplKCkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTRW52aXJvbm1lbnRSZWNvcmQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Vudmlyb25tZW50UmVjb3JkLmgJKHJldmlz
aW9uIDE4MDcyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRW52aXJvbm1l
bnRSZWNvcmQuaAkod29ya2luZyBjb3B5KQpAQCAtNDYsMTEgKzQ2LDI2IEBAIGNsYXNzIEpTRW52
aXJvbm1lbnRSZWNvcmQgOiBwdWJsaWMgSlNTeW0KIHB1YmxpYzoKICAgICB0eXBlZGVmIEpTU3lt
Ym9sVGFibGVPYmplY3QgQmFzZTsKIAotICAgIFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIHJl
Z2lzdGVycygpIHsgcmV0dXJuIG1fcmVnaXN0ZXJzOyB9Ci0gICAgV3JpdGVCYXJyaWVyQmFzZTxV
bmtub3duPiYgcmVnaXN0ZXJBdChpbnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fcmVnaXN0ZXJz
W2luZGV4XTsgfQorICAgIFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIHZhcmlhYmxlcygpCisg
ICAgeworICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PFdyaXRlQmFycmllckJhc2U8VW5rbm93
bj4qPihiaXR3aXNlX2Nhc3Q8Y2hhcio+KHRoaXMpICsgb2Zmc2V0T2ZWYXJpYWJsZXMoKSk7Cisg
ICAgfQorICAgIAorICAgIGJvb2wgaXNWYWxpZChTY29wZU9mZnNldCBvZmZzZXQpCisgICAgewor
ICAgICAgICByZXR1cm4gISFvZmZzZXQgJiYgb2Zmc2V0Lm9mZnNldCgpIDwgbV9zeW1ib2xUYWJs
ZS0+c2NvcGVTaXplKCk7CisgICAgfQorICAgIAorICAgIFdyaXRlQmFycmllckJhc2U8VW5rbm93
bj4mIHZhcmlhYmxlQXQoU2NvcGVPZmZzZXQgb2Zmc2V0KSBjb25zdAorICAgIHsKKyAgICAgICAg
QVNTRVJUKGlzVmFsaWQob2Zmc2V0KSk7CisgICAgICAgIHJldHVybiB2YXJpYWJsZXMoKVtvZmZz
ZXQub2Zmc2V0KCldOworICAgIH0KIAotICAgIFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIGNv
bnN0ICogYWRkcmVzc09mUmVnaXN0ZXJzKCkgY29uc3QgeyByZXR1cm4gJm1fcmVnaXN0ZXJzOyB9
Ci0gICAgc3RhdGljIHNpemVfdCBvZmZzZXRPZlJlZ2lzdGVycygpIHsgcmV0dXJuIE9CSkVDVF9P
RkZTRVRPRihKU0Vudmlyb25tZW50UmVjb3JkLCBtX3JlZ2lzdGVycyk7IH0KKyAgICBzdGF0aWMg
c2l6ZV90IG9mZnNldE9mVmFyaWFibGVzKCkKKyAgICB7CisgICAgICAgIHJldHVybiBXVEY6OnJv
dW5kVXBUb011bHRpcGxlT2Y8c2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPik+KHNpemVvZihK
U0Vudmlyb25tZW50UmVjb3JkKSk7CisgICAgfQogCiAgICAgREVDTEFSRV9JTkZPOwogCkBAIC02
MCwxNSArNzUsMzUgQEAgcHJvdGVjdGVkOgogICAgIEpTRW52aXJvbm1lbnRSZWNvcmQoCiAgICAg
ICAgIFZNJiB2bSwKICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsCi0gICAgICAgIFJlZ2lz
dGVyKiByZWdpc3RlcnMsCiAgICAgICAgIEpTU2NvcGUqIHNjb3BlLAogICAgICAgICBTeW1ib2xU
YWJsZSogc3ltYm9sVGFibGUpCiAgICAgICAgIDogQmFzZSh2bSwgc3RydWN0dXJlLCBzY29wZSwg
c3ltYm9sVGFibGUpCi0gICAgICAgICwgbV9yZWdpc3RlcnMocmVpbnRlcnByZXRfY2FzdDxXcml0
ZUJhcnJpZXJCYXNlPFVua25vd24+Kj4ocmVnaXN0ZXJzKSkKICAgICB7CiAgICAgfQotCi0gICAg
V3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiogbV9yZWdpc3RlcnM7IC8vICJyIiBpbiB0aGUgc3Rh
Y2suCisgICAgCisgICAgc3RhdGljIHNpemVfdCBhbGxvY2F0aW9uU2l6ZUZvclNjb3BlU2l6ZSh1
bnNpZ25lZCBzY29wZVNpemUpCisgICAgeworICAgICAgICByZXR1cm4gb2Zmc2V0T2ZWYXJpYWJs
ZXMoKSArIHNjb3BlU2l6ZSAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pOworICAgIH0K
KyAgICAKKyAgICBzdGF0aWMgc2l6ZV90IGFsbG9jYXRpb25TaXplKFN5bWJvbFRhYmxlKiBzeW1i
b2xUYWJsZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhbGxvY2F0aW9uU2l6ZUZvclNjb3BlU2l6
ZShzeW1ib2xUYWJsZS0+c2NvcGVTaXplKCkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGZpbmlz
aENyZWF0aW9uVW5pbml0aWFsaXplZChWTSYgdm0pCisgICAgeworICAgICAgICBCYXNlOjpmaW5p
c2hDcmVhdGlvbih2bSk7CisgICAgfQorICAgIAorICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0m
IHZtKQorICAgIHsKKyAgICAgICAgZmluaXNoQ3JlYXRpb25VbmluaXRpYWxpemVkKHZtKTsKKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9zeW1ib2xUYWJsZS0+c2NvcGVTaXplKCk7IGktLTsp
IHsKKyAgICAgICAgICAgIC8vIEZpbGxpbmcgdGhpcyB3aXRoIHVuZGVmaW5lZCBpcyB1c2VmdWwg
YmVjYXVzZSB0aGF0J3Mgd2hhdCB2YXJpYWJsZXMgc3RhcnQgb3V0IGFzLgorICAgICAgICAgICAg
dmFyaWFibGVBdChpKS5zZXRVbmRlZmluZWQoKTsKKyAgICAgICAgfQorICAgIH0KIH07CiAKIH0g
Ly8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNM
ZXhpY2FsRW52aXJvbm1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTTGV4aWNhbEVudmlyb25tZW50LmNwcAkocmV2aXNpb24gMTgwNzIwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMZXhpY2FsRW52aXJvbm1lbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwg
MjAwOSwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDgsIDIwMDksIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MCwyNyArNDAsMTkgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAKIGNvbnN0IENsYXNzSW5mbyBKU0xleGljYWxFbnZpcm9ubWVudDo6c19p
bmZvID0geyAiSlNMZXhpY2FsRW52aXJvbm1lbnQiLCAmQmFzZTo6c19pbmZvLCAwLCBDUkVBVEVf
TUVUSE9EX1RBQkxFKEpTTGV4aWNhbEVudmlyb25tZW50KSB9OwogCi12b2lkIEpTTGV4aWNhbEVu
dmlyb25tZW50Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCi17Ci0gICAgSlNMZXhpY2FsRW52aXJvbm1lbnQqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNM
ZXhpY2FsRW52aXJvbm1lbnQqPihjZWxsKTsKLSAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRT
KHRoaXNPYmplY3QsIGluZm8oKSk7Ci0gICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0
LCB2aXNpdG9yKTsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdGhpc09iamVjdC0+c3ltYm9s
VGFibGUoKS0+Y2FwdHVyZUNvdW50KCk7ICsraSkKLSAgICAgICAgdmlzaXRvci5hcHBlbmQoJnRo
aXNPYmplY3QtPnN0b3JhZ2UoKVtpXSk7Ci19Ci0KIGlubGluZSBib29sIEpTTGV4aWNhbEVudmly
b25tZW50OjpzeW1ib2xUYWJsZUdldChQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0
eVNsb3QmIHNsb3QpCiB7CiAgICAgU3ltYm9sVGFibGVFbnRyeSBlbnRyeSA9IHN5bWJvbFRhYmxl
KCktPmlubGluZUdldChwcm9wZXJ0eU5hbWUudWlkKCkpOwogICAgIGlmIChlbnRyeS5pc051bGwo
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAgU2NvcGVPZmZzZXQgb2Zmc2V0ID0gZW50
cnkuc2NvcGVPZmZzZXQoKTsKKwogICAgIC8vIERlZmVuZCBhZ2FpbnN0IHRoZSBpbnNwZWN0b3Ig
YXNraW5nIGZvciBhIHZhciBhZnRlciBpdCBoYXMgYmVlbiBvcHRpbWl6ZWQgb3V0LgotICAgIGlm
ICghaXNWYWxpZChlbnRyeSkpCisgICAgaWYgKCFpc1ZhbGlkKG9mZnNldCkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgIHNsb3Quc2V0VmFsdWUodGhpcywgRG9udEVudW0sIHJlZ2lzdGVy
QXQoZW50cnkuZ2V0SW5kZXgoKSkuZ2V0KCkpOworICAgIHNsb3Quc2V0VmFsdWUodGhpcywgRG9u
dEVudW0sIHZhcmlhYmxlQXQob2Zmc2V0KS5nZXQoKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
QEAgLTcwLDExICs2MiwxMyBAQCBpbmxpbmUgYm9vbCBKU0xleGljYWxFbnZpcm9ubWVudDo6c3lt
Ym9sCiAgICAgaWYgKGVudHJ5LmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAg
ICBTY29wZU9mZnNldCBvZmZzZXQgPSBlbnRyeS5zY29wZU9mZnNldCgpOworCiAgICAgLy8gRGVm
ZW5kIGFnYWluc3QgdGhlIGluc3BlY3RvciBhc2tpbmcgZm9yIGEgdmFyIGFmdGVyIGl0IGhhcyBi
ZWVuIG9wdGltaXplZCBvdXQuCi0gICAgaWYgKCFpc1ZhbGlkKGVudHJ5KSkKKyAgICBpZiAoIWlz
VmFsaWQob2Zmc2V0KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgZGVzY3JpcHRvci5z
ZXREZXNjcmlwdG9yKHJlZ2lzdGVyQXQoZW50cnkuZ2V0SW5kZXgoKSkuZ2V0KCksIGVudHJ5Lmdl
dEF0dHJpYnV0ZXMoKSk7CisgICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKHZhcmlhYmxlQXQo
b2Zmc2V0KS5nZXQoKSwgZW50cnkuZ2V0QXR0cmlidXRlcygpKTsKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIApAQCAtOTUsMTIgKzg5LDEzIEBAIGlubGluZSBib29sIEpTTGV4aWNhbEVudmlyb25tZW50
OjpzeW1ib2wKICAgICAgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBTdHJpY3RNb2Rl
UmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgICAgIH0KKyAgICAgICAgU2NvcGVPZmZzZXQgb2Zmc2V0ID0gaXRlci0+dmFsdWUuc2NvcGVP
ZmZzZXQoKTsKICAgICAgICAgLy8gRGVmZW5kIGFnYWluc3QgdGhlIGluc3BlY3RvciBhc2tpbmcg
Zm9yIGEgdmFyIGFmdGVyIGl0IGhhcyBiZWVuIG9wdGltaXplZCBvdXQuCi0gICAgICAgIGlmICgh
aXNWYWxpZChpdGVyLT52YWx1ZSkpCisgICAgICAgIGlmICghaXNWYWxpZChvZmZzZXQpKQogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBpZiAoVmFyaWFibGVXYXRjaHBvaW50U2V0
KiBzZXQgPSBpdGVyLT52YWx1ZS53YXRjaHBvaW50U2V0KCkpCi0gICAgICAgICAgICBzZXQtPmlu
dmFsaWRhdGUoVmFyaWFibGVXcml0ZUZpcmVEZXRhaWwodGhpcywgcHJvcGVydHlOYW1lKSk7IC8v
IERvbid0IG1lc3MgYXJvdW5kIC0gaWYgd2UgaGFkIGZvdW5kIHRoaXMgc3RhdGljYWxseSwgd2Ug
d291bGQgaGF2ZSBpbnZjYWxpZGF0ZWQgaXQuCi0gICAgICAgIHJlZyA9ICZyZWdpc3RlckF0KGl0
ZXItPnZhbHVlLmdldEluZGV4KCkpOworICAgICAgICAgICAgc2V0LT5pbnZhbGlkYXRlKFZhcmlh
YmxlV3JpdGVGaXJlRGV0YWlsKHRoaXMsIHByb3BlcnR5TmFtZSkpOyAvLyBEb24ndCBtZXNzIGFy
b3VuZCAtIGlmIHdlIGhhZCBmb3VuZCB0aGlzIHN0YXRpY2FsbHksIHdlIHdvdWxkIGhhdmUgaW52
YWxpZGF0ZWQgaXQuCisgICAgICAgIHJlZyA9ICZ2YXJpYWJsZUF0KG9mZnNldCk7CiAgICAgfQog
ICAgIHJlZy0+c2V0KHZtLCB0aGlzLCB2YWx1ZSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC0xMTYs
NyArMTExLDcgQEAgdm9pZCBKU0xleGljYWxFbnZpcm9ubWVudDo6Z2V0T3duTm9uSW5kZQogICAg
ICAgICBmb3IgKFN5bWJvbFRhYmxlOjpNYXA6Oml0ZXJhdG9yIGl0ID0gdGhpc09iamVjdC0+c3lt
Ym9sVGFibGUoKS0+YmVnaW4obG9ja2VyKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgICAg
ICBpZiAoaXQtPnZhbHVlLmdldEF0dHJpYnV0ZXMoKSAmIERvbnRFbnVtICYmICFzaG91bGRJbmNs
dWRlRG9udEVudW1Qcm9wZXJ0aWVzKG1vZGUpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICAgICAgaWYgKCF0aGlzT2JqZWN0LT5pc1ZhbGlkKGl0LT52YWx1ZSkpCisgICAgICAg
ICAgICBpZiAoIXRoaXNPYmplY3QtPmlzVmFsaWQoaXQtPnZhbHVlLnNjb3BlT2Zmc2V0KCkpKQog
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQo
SWRlbnRpZmllcihleGVjLCBpdC0+a2V5LmdldCgpKSk7CiAgICAgICAgIH0KQEAgLTEzNywxMSAr
MTMyLDEzIEBAIGlubGluZSBib29sIEpTTGV4aWNhbEVudmlyb25tZW50OjpzeW1ib2wKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgU3ltYm9sVGFibGVFbnRyeSYgZW50cnkgPSBp
dGVyLT52YWx1ZTsKICAgICAgICAgQVNTRVJUKCFlbnRyeS5pc051bGwoKSk7Ci0gICAgICAgIGlm
ICghaXNWYWxpZChlbnRyeSkpCisgICAgICAgIAorICAgICAgICBTY29wZU9mZnNldCBvZmZzZXQg
PSBlbnRyeS5zY29wZU9mZnNldCgpOworICAgICAgICBpZiAoIWlzVmFsaWQob2Zmc2V0KSkKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgCiAgICAgICAgIGVudHJ5LnNldEF0dHJp
YnV0ZXMoYXR0cmlidXRlcyk7Ci0gICAgICAgIHJlZyA9ICZyZWdpc3RlckF0KGVudHJ5LmdldElu
ZGV4KCkpOworICAgICAgICByZWcgPSAmdmFyaWFibGVBdChvZmZzZXQpOwogICAgIH0KICAgICBy
ZWctPnNldCh2bSwgdGhpcywgdmFsdWUpOwogICAgIHJldHVybiB0cnVlOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMZXhpY2FsRW52aXJvbm1lbnQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xleGljYWxFbnZpcm9ubWVudC5o
CShyZXZpc2lvbiAxODA3MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xl
eGljYWxFbnZpcm9ubWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDksIDIwMTMtMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTQxLDMzICs0MSwyNyBAQCBjbGFzcyBSZWdpc3RlcjsKICAgICAKIGNsYXNzIEpTTGV4
aWNhbEVudmlyb25tZW50IDogcHVibGljIEpTRW52aXJvbm1lbnRSZWNvcmQgewogcHJpdmF0ZToK
LSAgICBKU0xleGljYWxFbnZpcm9ubWVudChWTSYsIENhbGxGcmFtZSosIFJlZ2lzdGVyKiwgSlNT
Y29wZSosIENvZGVCbG9jayopOworICAgIEpTTGV4aWNhbEVudmlyb25tZW50KFZNJiwgU3RydWN0
dXJlKiwgSlNTY29wZSosIFN5bWJvbFRhYmxlKik7CiAgICAgCiBwdWJsaWM6CiAgICAgdHlwZWRl
ZiBKU0Vudmlyb25tZW50UmVjb3JkIEJhc2U7CiAKLSAgICBzdGF0aWMgSlNMZXhpY2FsRW52aXJv
bm1lbnQqIGNyZWF0ZShWTSYgdm0sIENhbGxGcmFtZSogY2FsbEZyYW1lLCBSZWdpc3RlciogcmVn
aXN0ZXJzLCBKU1Njb3BlKiBjdXJyZW50U2NvcGUsIENvZGVCbG9jayogY29kZUJsb2NrKQorICAg
IHN0YXRpYyBKU0xleGljYWxFbnZpcm9ubWVudCogY3JlYXRlKAorICAgICAgICBWTSYgdm0sIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTU2NvcGUqIGN1cnJlbnRTY29wZSwgU3ltYm9s
VGFibGUqIHN5bWJvbFRhYmxlKQogICAgIHsKLSAgICAgICAgU3ltYm9sVGFibGUqIHN5bWJvbFRh
YmxlID0gY29kZUJsb2NrLT5zeW1ib2xUYWJsZSgpOwotICAgICAgICBBU1NFUlQoY29kZUJsb2Nr
LT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSk7Ci0gICAgICAgIEpTTGV4aWNhbEVudmlyb25t
ZW50KiBsZXhpY2FsRW52aXJvbm1lbnQgPSBuZXcgKAotICAgICAgICAgICAgTm90TnVsbCwKLSAg
ICAgICAgICAgIGFsbG9jYXRlQ2VsbDxKU0xleGljYWxFbnZpcm9ubWVudD4oCi0gICAgICAgICAg
ICAgICAgdm0uaGVhcCwKLSAgICAgICAgICAgICAgICBhbGxvY2F0aW9uU2l6ZShzeW1ib2xUYWJs
ZSkKLSAgICAgICAgICAgICkKLSAgICAgICAgKSBKU0xleGljYWxFbnZpcm9ubWVudCh2bSwgY2Fs
bEZyYW1lLCByZWdpc3RlcnMsIGN1cnJlbnRTY29wZSwgY29kZUJsb2NrKTsKLSAgICAgICAgbGV4
aWNhbEVudmlyb25tZW50LT5maW5pc2hDcmVhdGlvbih2bSk7Ci0gICAgICAgIHJldHVybiBsZXhp
Y2FsRW52aXJvbm1lbnQ7CisgICAgICAgIEpTTGV4aWNhbEVudmlyb25tZW50KiByZXN1bHQgPQor
ICAgICAgICAgICAgbmV3IChOb3ROdWxsLCBhbGxvY2F0aW9uU2l6ZShzeW1ib2xUYWJsZSkpCisg
ICAgICAgICAgICBKU0xleGljYWxFbnZpcm9ubWVudCh2bSwgZ2xvYmFsT2JqZWN0LT5hY3RpdmF0
aW9uU3RydWN0dXJlKCksIGN1cnJlbnRTY29wZSwgc3ltYm9sVGFibGUpOworICAgICAgICByZXN1
bHQtPmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICB9Ci0gICAgICAgIAorICAgIAogICAgIHN0YXRp
YyBKU0xleGljYWxFbnZpcm9ubWVudCogY3JlYXRlKFZNJiB2bSwgQ2FsbEZyYW1lKiBjYWxsRnJh
bWUsIEpTU2NvcGUqIGN1cnJlbnRTY29wZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2spCiAgICAgewot
ICAgICAgICByZXR1cm4gY3JlYXRlKHZtLCBjYWxsRnJhbWUsIGNhbGxGcmFtZS0+cmVnaXN0ZXJz
KCkgKyBjb2RlQmxvY2stPmZyYW1lUG9pbnRlck9mZnNldFRvR2V0QWN0aXZhdGlvblJlZ2lzdGVy
cygpLCBjdXJyZW50U2NvcGUsIGNvZGVCbG9jayk7CisgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QgPSBjYWxsRnJhbWUtPmxleGljYWxHbG9iYWxPYmplY3QoKTsKKyAgICAgICAg
U3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlID0gY29kZUJsb2NrLT5zeW1ib2xUYWJsZSgpOworICAg
ICAgICByZXR1cm4gY3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIGN1cnJlbnRTY29wZSwgc3ltYm9s
dGFibGUpOwogICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwg
U2xvdFZpc2l0b3ImKTsKLQorICAgICAgICAKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0
eVNsb3QoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYp
OwogICAgIHN0YXRpYyB2b2lkIGdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCos
IEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKIApAQCAt
ODEsMTIgKzc1LDYgQEAgcHVibGljOgogCiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3Ry
dWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkgeyByZXR1cm4gU3Ry
dWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwganNOdWxsKCksIFR5cGVJbmZvKEFjdGl2
YXRpb25PYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7IH0KIAotICAgIFdyaXRl
QmFycmllckJhc2U8VW5rbm93bj4mIHJlZ2lzdGVyQXQoaW50KSBjb25zdDsKLSAgICBib29sIGlz
VmFsaWRJbmRleChpbnQpIGNvbnN0OwotICAgIGJvb2wgaXNWYWxpZChjb25zdCBTeW1ib2xUYWJs
ZUVudHJ5JikgY29uc3Q7Ci0gICAgaW50IHJlZ2lzdGVyc09mZnNldCgpOwotICAgIHN0YXRpYyBp
bnQgcmVnaXN0ZXJzT2Zmc2V0KFN5bWJvbFRhYmxlKik7Ci0KIHByb3RlY3RlZDoKICAgICBzdGF0
aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0
eVNsb3QgfCBPdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzIHwgQmFzZTo6U3RydWN0dXJlRmxhZ3M7
CiAKQEAgLTk2LDMyICs4NCwxMyBAQCBwcml2YXRlOgogICAgIGJvb2wgc3ltYm9sVGFibGVHZXQo
UHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmLCBib29sJiBzbG90SXNXcml0ZWFibGUpOwogICAg
IGJvb2wgc3ltYm9sVGFibGVQdXQoRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBi
b29sIHNob3VsZFRocm93KTsKICAgICBib29sIHN5bWJvbFRhYmxlUHV0V2l0aEF0dHJpYnV0ZXMo
Vk0mLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpOwotCi0gICAg
c3RhdGljIHNpemVfdCBhbGxvY2F0aW9uU2l6ZShTeW1ib2xUYWJsZSopOwotICAgIHN0YXRpYyBz
aXplX3Qgc3RvcmFnZU9mZnNldCgpOwotCi0gICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiBzdG9y
YWdlKCk7IC8vIGNhcHR1cmVDb3VudCgpIG51bWJlciBvZiByZWdpc3RlcnMuCiB9OwogCi1pbmxp
bmUgSlNMZXhpY2FsRW52aXJvbm1lbnQ6OkpTTGV4aWNhbEVudmlyb25tZW50KFZNJiB2bSwgQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUsIFJlZ2lzdGVyKiByZWdpc3RlcnMsIEpTU2NvcGUqIGN1cnJlbnRT
Y29wZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2spCi0gICAgOiBCYXNlKAotICAgICAgICB2bSwKLSAg
ICAgICAgY2FsbEZyYW1lLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmFjdGl2YXRpb25TdHJ1Y3R1
cmUoKSwKLSAgICAgICAgcmVnaXN0ZXJzLAotICAgICAgICBjdXJyZW50U2NvcGUsCi0gICAgICAg
IGNvZGVCbG9jay0+c3ltYm9sVGFibGUoKSkKK2lubGluZSBKU0xleGljYWxFbnZpcm9ubWVudDo6
SlNMZXhpY2FsRW52aXJvbm1lbnQoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNTY29w
ZSogY3VycmVudFNjb3BlLCBTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUpCisgICAgOiBCYXNlKHZt
LCBzdHJ1Y3R1cmUsIGN1cnJlbnRTY29wZSwgc3ltYm9sVGFibGUpCiB7Ci0gICAgU3ltYm9sVGFi
bGUqIHN5bWJvbFRhYmxlID0gY29kZUJsb2NrLT5zeW1ib2xUYWJsZSgpOwotICAgIFdyaXRlQmFy
cmllcjxVbmtub3duPiogc3RvcmFnZSA9IHRoaXMtPnN0b3JhZ2UoKTsKLSAgICBzaXplX3QgY2Fw
dHVyZUNvdW50ID0gc3ltYm9sVGFibGUtPmNhcHR1cmVDb3VudCgpOwotICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgY2FwdHVyZUNvdW50OyArK2kpCi0gICAgICAgIG5ldyAoTm90TnVsbCwgJnN0
b3JhZ2VbaV0pIFdyaXRlQmFycmllcjxVbmtub3duPihVbmRlZmluZWRXcml0ZUJhcnJpZXJUYWcp
OwotICAgIG1fcmVnaXN0ZXJzID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8V3JpdGVCYXJyaWVyQmFz
ZTxVbmtub3duPio+KAotICAgICAgICByZWludGVycHJldF9jYXN0PGNoYXIqPih0aGlzKSArIHJl
Z2lzdGVyc09mZnNldChzeW1ib2xUYWJsZSkpOwogfQogCi1KU0xleGljYWxFbnZpcm9ubWVudCog
YXNBY3RpdmF0aW9uKEpTVmFsdWUpOwotCiBpbmxpbmUgSlNMZXhpY2FsRW52aXJvbm1lbnQqIGFz
QWN0aXZhdGlvbihKU1ZhbHVlIHZhbHVlKQogewogICAgIEFTU0VSVChhc09iamVjdCh2YWx1ZSkt
PmluaGVyaXRzKEpTTGV4aWNhbEVudmlyb25tZW50OjppbmZvKCkpKTsKQEAgLTEzMyw0OSArMTAy
LDYgQEAgQUxXQVlTX0lOTElORSBKU0xleGljYWxFbnZpcm9ubWVudCogUmVnaQogICAgIHJldHVy
biBhc0FjdGl2YXRpb24oanNWYWx1ZSgpKTsKIH0KIAotaW5saW5lIGludCBKU0xleGljYWxFbnZp
cm9ubWVudDo6cmVnaXN0ZXJzT2Zmc2V0KFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSkKLXsKLSAg
ICByZXR1cm4gc3RvcmFnZU9mZnNldCgpICsgKChzeW1ib2xUYWJsZS0+Y2FwdHVyZUNvdW50KCkg
LSBzeW1ib2xUYWJsZS0+Y2FwdHVyZVN0YXJ0KCkgIC0gMSkgKiBzaXplb2YoV3JpdGVCYXJyaWVy
PFVua25vd24+KSk7Ci19Ci0KLWlubGluZSBzaXplX3QgSlNMZXhpY2FsRW52aXJvbm1lbnQ6OnN0
b3JhZ2VPZmZzZXQoKQotewotICAgIHJldHVybiBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Y8c2l6
ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPik+KHNpemVvZihKU0xleGljYWxFbnZpcm9ubWVudCkp
OwotfQotCi1pbmxpbmUgV3JpdGVCYXJyaWVyPFVua25vd24+KiBKU0xleGljYWxFbnZpcm9ubWVu
dDo6c3RvcmFnZSgpCi17Ci0gICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3RfcHRyPFdyaXRlQmFy
cmllcjxVbmtub3duPio+KAotICAgICAgICByZWludGVycHJldF9jYXN0PGNoYXIqPih0aGlzKSAr
IHN0b3JhZ2VPZmZzZXQoKSk7Ci19Ci0KLWlubGluZSBzaXplX3QgSlNMZXhpY2FsRW52aXJvbm1l
bnQ6OmFsbG9jYXRpb25TaXplKFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSkKLXsKLSAgICBzaXpl
X3Qgb2JqZWN0U2l6ZUluQnl0ZXMgPSBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Y8c2l6ZW9mKFdy
aXRlQmFycmllcjxVbmtub3duPik+KHNpemVvZihKU0xleGljYWxFbnZpcm9ubWVudCkpOwotICAg
IHNpemVfdCBzdG9yYWdlU2l6ZUluQnl0ZXMgPSBzeW1ib2xUYWJsZS0+Y2FwdHVyZUNvdW50KCkg
KiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KTsKLSAgICByZXR1cm4gb2JqZWN0U2l6ZUlu
Qnl0ZXMgKyBzdG9yYWdlU2l6ZUluQnl0ZXM7Ci19Ci0KLWlubGluZSBib29sIEpTTGV4aWNhbEVu
dmlyb25tZW50Ojppc1ZhbGlkSW5kZXgoaW50IGluZGV4KSBjb25zdAotewotICAgIGlmIChpbmRl
eCA+IHN5bWJvbFRhYmxlKCktPmNhcHR1cmVTdGFydCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgaWYgKGluZGV4IDw9IHN5bWJvbFRhYmxlKCktPmNhcHR1cmVFbmQoKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIHJldHVybiB0cnVlOwotfQotCi1pbmxpbmUgYm9vbCBKU0xleGlj
YWxFbnZpcm9ubWVudDo6aXNWYWxpZChjb25zdCBTeW1ib2xUYWJsZUVudHJ5JiBlbnRyeSkgY29u
c3QKLXsKLSAgICByZXR1cm4gaXNWYWxpZEluZGV4KGVudHJ5LmdldEluZGV4KCkpOwotfQotCi1p
bmxpbmUgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiYgSlNMZXhpY2FsRW52aXJvbm1lbnQ6OnJl
Z2lzdGVyQXQoaW50IGluZGV4KSBjb25zdAotewotICAgIEFTU0VSVChpc1ZhbGlkSW5kZXgoaW5k
ZXgpKTsKLSAgICByZXR1cm4gQmFzZTo6cmVnaXN0ZXJBdChpbmRleCk7Ci19Ci0KIH0gLy8gbmFt
ZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gSlNMZXhpY2FsRW52aXJvbm1lbnRfaApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNOYW1lU2NvcGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTmFtZVNjb3BlLmNwcAkocmV2aXNpb24g
MTgwNzIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNOYW1lU2NvcGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00NywxNCArNDcsNiBAQCBKU05hbWVTY29wZSogSlNOYW1lU2Nv
cGU6OmNyZWF0ZShWTSYgdm0sCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLXZvaWQgSlNOYW1l
U2NvcGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikK
LXsKLSAgICBKU05hbWVTY29wZSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU05hbWVTY29wZSo+KGNl
bGwpOwotICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsK
LSAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwotICAgIHZpc2l0
b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX3JlZ2lzdGVyU3RvcmUpOwotfQotCiBKU1ZhbHVlIEpT
TmFtZVNjb3BlOjp0b1RoaXMoSlNDZWxsKiwgRXhlY1N0YXRlKiBleGVjLCBFQ01BTW9kZSBlY21h
TW9kZSkKIHsKICAgICBpZiAoZWNtYU1vZGUgPT0gU3RyaWN0TW9kZSkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTmFtZVNjb3BlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNOYW1lU2NvcGUuaAkocmV2aXNpb24gMTgwNzIwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNOYW1lU2NvcGUuaAkod29ya2luZyBj
b3B5KQpAQCAtNDQsMzggKzQ0LDM3IEBAIHB1YmxpYzoKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PgogICAgIHN0YXRpYyBUKiBjcmVhdGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU1Njb3BlKiBjdXJyZW50U2NvcGUsIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSwgSlNW
YWx1ZSB2YWx1ZSkKICAgICB7Ci0gICAgICAgIFQqIHNjb3BlT2JqZWN0ID0gbmV3IChOb3ROdWxs
LCBhbGxvY2F0ZUNlbGw8VD4odm0uaGVhcCkpIFQodm0sIGdsb2JhbE9iamVjdCwgY3VycmVudFNj
b3BlLCBzeW1ib2xUYWJsZSk7CisgICAgICAgIFQqIHNjb3BlT2JqZWN0ID0gbmV3ICgKKyAgICAg
ICAgICAgIE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxUPih2bS5oZWFwLCBhbGxvY2F0aW9uU2l6ZUZv
clNjb3BlU2l6ZSgxKSkKKyAgICAgICAgICAgIFQodm0sIGdsb2JhbE9iamVjdCwgY3VycmVudFNj
b3BlLCBzeW1ib2xUYWJsZSk7CiAgICAgICAgIHNjb3BlT2JqZWN0LT5maW5pc2hDcmVhdGlvbih2
bSwgdmFsdWUpOwogICAgICAgICByZXR1cm4gc2NvcGVPYmplY3Q7CiAgICAgfQogICAgIAogICAg
IHN0YXRpYyBKU05hbWVTY29wZSogY3JlYXRlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1Njb3Bl
KiBjdXJyZW50U2NvcGUsIFN5bWJvbFRhYmxlKiwgSlNWYWx1ZSwgVHlwZSk7CiAKLSAgICBzdGF0
aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAgICAgc3RhdGlj
IEpTVmFsdWUgdG9UaGlzKEpTQ2VsbCosIEV4ZWNTdGF0ZSosIEVDTUFNb2RlKTsKICAgICBzdGF0
aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0
eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyB2b2lkIHB1dChKU0NlbGwqLCBFeGVj
U3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOwogCiAgICAg
REVDTEFSRV9JTkZPOwogCi0gICAgSlNWYWx1ZSB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVn
aXN0ZXJTdG9yZS5nZXQoKTsgfQorICAgIEpTVmFsdWUgdmFsdWUoKSBjb25zdCB7IHJldHVybiB2
YXJpYWJsZUF0KDApLmdldCgpOyB9CiAKIHByb3RlY3RlZDoKICAgICB2b2lkIGZpbmlzaENyZWF0
aW9uKFZNJiB2bSwgSlNWYWx1ZSB2YWx1ZSkKICAgICB7Ci0gICAgICAgIEJhc2U6OmZpbmlzaENy
ZWF0aW9uKHZtKTsKLSAgICAgICAgbV9yZWdpc3RlclN0b3JlLnNldCh2bSwgdGhpcywgdmFsdWUp
OworICAgICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvblVuaW5pdGlhbGl6ZWQodm0pOworICAgICAg
ICB2YXJpYWJsZUF0KDApLnNldCh2bSwgdGhpcywgdmFsdWUpOwogICAgIH0KIAogICAgIHN0YXRp
YyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRlc0dldE93blByb3BlcnR5
U2xvdCB8IEJhc2U6OlN0cnVjdHVyZUZsYWdzOwogCiAgICAgSlNOYW1lU2NvcGUoVk0mIHZtLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNTY29wZSogbmV4dCwgU3ltYm9sVGFibGUqIHN5bWJvbFRh
YmxlKQotICAgICAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSwgcmVpbnRlcnByZXRfY2FzdDxSZWdp
c3Rlcio+KCZtX3JlZ2lzdGVyU3RvcmUgKyAxKSwgbmV4dCwgc3ltYm9sVGFibGUpCisgICAgICAg
IDogQmFzZSh2bSwgc3RydWN0dXJlLCBuZXh0LCBzeW1ib2xUYWJsZSkKICAgICB7CisgICAgICAg
IEFTU0VSVChzeW1ib2xUYWJsZS0+c2NvcGVTaXplKCkgPT0gMSk7CiAgICAgfQotCi1wcml2YXRl
OgotICAgIFdyaXRlQmFycmllcjxVbmtub3duPiBtX3JlZ2lzdGVyU3RvcmU7CiB9OwogCiB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2Jq
ZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Nl
Z21lbnRlZFZhcmlhYmxlT2JqZWN0LmNwcAkocmV2aXNpb24gMTgwNzIwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDEz
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiwg
MjAxMywgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTMzLDMyICszMywzMCBAQAogCiBuYW1lc3BhY2UgSlNDIHsK
IAotaW50IEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3Q6OmZpbmRSZWdpc3RlckluZGV4KHZvaWQq
IHJlZ2lzdGVyQWRkcmVzcykKK1Njb3BlT2Zmc2V0IEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3Q6
OmZpbmRSZWdpc3RlckluZGV4KHZvaWQqIHJlZ2lzdGVyQWRkcmVzcykKIHsKICAgICBDb25jdXJy
ZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2spOwogICAgIAotICAgIGZvciAoaW50IGkgPSBtX3Jl
Z2lzdGVycy5zaXplKCk7IGktLTspIHsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX3JlZ2lzdGVy
cy5zaXplKCk7IGktLTspIHsKICAgICAgICAgaWYgKCZtX3JlZ2lzdGVyc1tpXSAhPSByZWdpc3Rl
ckFkZHJlc3MpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgcmV0dXJuIGk7CisgICAg
ICAgIHJldHVybiBTY29wZU9mZnNldChpKTsKICAgICB9CiAgICAgQ1JBU0goKTsKLSAgICByZXR1
cm4gLTE7CisgICAgcmV0dXJuIFNjb3BlT2Zmc2V0KCk7CiB9CiAKLWludCBKU1NlZ21lbnRlZFZh
cmlhYmxlT2JqZWN0OjphZGRSZWdpc3RlcnMoaW50IG51bWJlck9mUmVnaXN0ZXJzVG9BZGQpCitT
Y29wZU9mZnNldCBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0OjphZGRSZWdpc3RlcnModW5zaWdu
ZWQgbnVtYmVyT2ZSZWdpc3RlcnNUb0FkZCkKIHsKICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxv
Y2tlcihtX2xvY2spOwogICAgIAotICAgIEFTU0VSVChudW1iZXJPZlJlZ2lzdGVyc1RvQWRkID49
IDApOwotICAgIAogICAgIHNpemVfdCBvbGRTaXplID0gbV9yZWdpc3RlcnMuc2l6ZSgpOwogICAg
IG1fcmVnaXN0ZXJzLmdyb3cob2xkU2l6ZSArIG51bWJlck9mUmVnaXN0ZXJzVG9BZGQpOwogICAg
IAogICAgIGZvciAoc2l6ZV90IGkgPSBudW1iZXJPZlJlZ2lzdGVyc1RvQWRkOyBpLS07KQogICAg
ICAgICBtX3JlZ2lzdGVyc1tvbGRTaXplICsgaV0uc2V0V2l0aG91dFdyaXRlQmFycmllcihqc1Vu
ZGVmaW5lZCgpKTsKICAgICAKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PihvbGRTaXplKTsK
KyAgICByZXR1cm4gU2NvcGVPZmZzZXQob2xkU2l6ZSk7CiB9CiAKIHZvaWQgSlNTZWdtZW50ZWRW
YXJpYWJsZU9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiBz
bG90VmlzaXRvcikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVu
dGVkVmFyaWFibGVPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmgJKHJldmlzaW9uIDE4MDcyMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3Qu
aAkod29ya2luZyBjb3B5KQpAQCAtNTcsMjQgKzU3LDIzIEBAIGNsYXNzIEpTU2VnbWVudGVkVmFy
aWFibGVPYmplY3QgOiBwdWJsaWMKIHB1YmxpYzoKICAgICB0eXBlZGVmIEpTU3ltYm9sVGFibGVP
YmplY3QgQmFzZTsKIAotICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgcmVnaXN0ZXJBdChpbnQg
aW5kZXgpIHsgcmV0dXJuIG1fcmVnaXN0ZXJzW2luZGV4XTsgfQorICAgIFdyaXRlQmFycmllcjxV
bmtub3duPiYgdmFyaWFibGVBdChTY29wZU9mZnNldCBvZmZzZXQpIHsgcmV0dXJuIG1fdmFyaWFi
bGVzW29mZnNldC5vZmZzZXQoKV07IH0KICAgICAKICAgICAvLyBUaGlzIGlzIGEgc2xvdyBtZXRo
b2QgY2FsbCwgd2hpY2ggc2VhcmNoZXMgdGhlIHJlZ2lzdGVyIGJhbmsgdG8gZmluZCB0aGUgaW5k
ZXgKICAgICAvLyBnaXZlbiBhIHBvaW50ZXIuIEl0IHdpbGwgQ1JBU0goKSBpZiBpdCBkb2VzIG5v
dCBmaW5kIHRoZSByZWdpc3Rlci4gT25seSB1c2UgdGhpcwogICAgIC8vIGluIGRlYnVnIGNvZGUg
KGxpa2UgYnl0ZWNvZGUgZHVtcGluZykuCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgaW50IGZpbmRS
ZWdpc3RlckluZGV4KHZvaWQqKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBTY29wZU9mZnNldCBm
aW5kUmVnaXN0ZXJJbmRleCh2b2lkKik7CiAgICAgCi0gICAgV3JpdGVCYXJyaWVyPFVua25vd24+
KiBhc3NlcnRSZWdpc3RlcklzSW5UaGlzT2JqZWN0KFdyaXRlQmFycmllcjxVbmtub3duPiogcmVn
aXN0ZXJQb2ludGVyKQorICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogYXNzZXJ0VmFyaWFibGVJ
c0luVGhpc09iamVjdChXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHZhcmlhYmxlUG9pbnRlcikKICAg
ICB7Ci0jaWYgIUFTU0VSVF9ESVNBQkxFRAotICAgICAgICBmaW5kUmVnaXN0ZXJJbmRleChyZWdp
c3RlclBvaW50ZXIpOwotI2VuZGlmCisgICAgICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKQorICAg
ICAgICAgICAgZmluZFJlZ2lzdGVySW5kZXgocmVnaXN0ZXJQb2ludGVyKTsKICAgICAgICAgcmV0
dXJuIHJlZ2lzdGVyUG9pbnRlcjsKICAgICB9CiAgICAgCiAgICAgLy8gQWRkcyBudW1iZXJPZlJl
Z2lzdGVyc1RvQWRkIHJlZ2lzdGVycywgaW5pdGlhbGl6ZXMgdGhlbSB0byBVbmRlZmluZWQsIGFu
ZCByZXR1cm5zCiAgICAgLy8gdGhlIGluZGV4IG9mIHRoZSBmaXJzdCBvbmUgYWRkZWQuCi0gICAg
SlNfRVhQT1JUX1BSSVZBVEUgaW50IGFkZFJlZ2lzdGVycyhpbnQgbnVtYmVyT2ZSZWdpc3RlcnNU
b0FkZCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgU2NvcGVPZmZzZXQgYWRkUmVnaXN0ZXJzKHVu
c2lnbmVkIG51bWJlck9mUmVnaXN0ZXJzVG9BZGQpOwogICAgIAogICAgIEpTX0VYUE9SVF9QUklW
QVRFIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFi
bGVPYmplY3QuaAkocmV2aXNpb24gMTgwNzIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC03OCw3ICs3OCw3
IEBAIGlubGluZSBib29sIHN5bWJvbFRhYmxlR2V0KAogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgU3ltYm9sVGFibGVFbnRyeTo6RmFzdCBlbnRyeSA9IGl0ZXItPnZhbHVlOwogICAgIEFTU0VS
VCghZW50cnkuaXNOdWxsKCkpOwotICAgIHNsb3Quc2V0VmFsdWUob2JqZWN0LCBlbnRyeS5nZXRB
dHRyaWJ1dGVzKCkgfCBEb250RGVsZXRlLCBvYmplY3QtPnJlZ2lzdGVyQXQoZW50cnkuZ2V0SW5k
ZXgoKSkuZ2V0KCkpOworICAgIHNsb3Quc2V0VmFsdWUob2JqZWN0LCBlbnRyeS5nZXRBdHRyaWJ1
dGVzKCkgfCBEb250RGVsZXRlLCBvYmplY3QtPnZhcmlhYmxlQXQoZW50cnkuc2NvcGVPZmZzZXQo
KSkuZ2V0KCkpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC05NCw3ICs5NCw3IEBAIGlubGlu
ZSBib29sIHN5bWJvbFRhYmxlR2V0KAogICAgIFN5bWJvbFRhYmxlRW50cnk6OkZhc3QgZW50cnkg
PSBpdGVyLT52YWx1ZTsKICAgICBBU1NFUlQoIWVudHJ5LmlzTnVsbCgpKTsKICAgICBkZXNjcmlw
dG9yLnNldERlc2NyaXB0b3IoCi0gICAgICAgIG9iamVjdC0+cmVnaXN0ZXJBdChlbnRyeS5nZXRJ
bmRleCgpKS5nZXQoKSwgZW50cnkuZ2V0QXR0cmlidXRlcygpIHwgRG9udERlbGV0ZSk7CisgICAg
ICAgIG9iamVjdC0+dmFyaWFibGVBdChlbnRyeS5zY29wZU9mZnNldCgpKS5nZXQoKSwgZW50cnku
Z2V0QXR0cmlidXRlcygpIHwgRG9udERlbGV0ZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAg
LTExMCw3ICsxMTAsNyBAQCBpbmxpbmUgYm9vbCBzeW1ib2xUYWJsZUdldCgKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIFN5bWJvbFRhYmxlRW50cnk6OkZhc3QgZW50cnkgPSBpdGVyLT52YWx1
ZTsKICAgICBBU1NFUlQoIWVudHJ5LmlzTnVsbCgpKTsKLSAgICBzbG90LnNldFZhbHVlKG9iamVj
dCwgZW50cnkuZ2V0QXR0cmlidXRlcygpIHwgRG9udERlbGV0ZSwgb2JqZWN0LT5yZWdpc3RlckF0
KGVudHJ5LmdldEluZGV4KCkpLmdldCgpKTsKKyAgICBzbG90LnNldFZhbHVlKG9iamVjdCwgZW50
cnkuZ2V0QXR0cmlidXRlcygpIHwgRG9udERlbGV0ZSwgb2JqZWN0LT52YXJpYWJsZUF0KGVudHJ5
LnNjb3BlT2Zmc2V0KCkpLmdldCgpKTsKICAgICBzbG90SXNXcml0ZWFibGUgPSAhZW50cnkuaXNS
ZWFkT25seSgpOwogICAgIHJldHVybiB0cnVlOwogfQpAQCAtMTQ1LDcgKzE0NSw3IEBAIGlubGlu
ZSBib29sIHN5bWJvbFRhYmxlUHV0KAogICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNDYwMQogICAgICAgICAgICAgc2V0LT5ub3RpZnlXcml0
ZSh2bSwgdmFsdWUsIG9iamVjdCwgcHJvcGVydHlOYW1lKTsKICAgICAgICAgfQotICAgICAgICBy
ZWcgPSAmb2JqZWN0LT5yZWdpc3RlckF0KGZhc3RFbnRyeS5nZXRJbmRleCgpKTsKKyAgICAgICAg
cmVnID0gJm9iamVjdC0+dmFyaWFibGVBdChmYXN0RW50cnkuc2NvcGVPZmZzZXQoKSk7CiAgICAg
fQogICAgIC8vIEknZCBwcmVmZXIgd2Ugbm90IGhvbGQgbG9jayB3aGlsZSBleGVjdXRpbmcgYmFy
cmllcnMsIHNpbmNlIEkgcHJlZmVyIHRvIHJlc2VydmUKICAgICAvLyB0aGUgcmlnaHQgZm9yIGJh
cnJpZXJzIHRvIGJlIGFibGUgdG8gdHJpZ2dlciBHQy4gQW5kIEkgZG9uJ3Qgd2FudCB0byBob2xk
IFZNCkBAIC0xNzMsNyArMTczLDcgQEAgaW5saW5lIGJvb2wgc3ltYm9sVGFibGVQdXRXaXRoQXR0
cmlidXRlcwogICAgICAgICBpZiAoVmFyaWFibGVXYXRjaHBvaW50U2V0KiBzZXQgPSBlbnRyeS53
YXRjaHBvaW50U2V0KCkpCiAgICAgICAgICAgICBzZXQtPm5vdGlmeVdyaXRlKHZtLCB2YWx1ZSwg
b2JqZWN0LCBwcm9wZXJ0eU5hbWUpOwogICAgICAgICBlbnRyeS5zZXRBdHRyaWJ1dGVzKGF0dHJp
YnV0ZXMpOwotICAgICAgICByZWcgPSAmb2JqZWN0LT5yZWdpc3RlckF0KGVudHJ5LmdldEluZGV4
KCkpOworICAgICAgICByZWcgPSAmb2JqZWN0LT52YXJpYWJsZUF0KGVudHJ5LnNjb3BlT2Zmc2V0
KCkpOwogICAgIH0KICAgICByZWctPnNldCh2bSwgb2JqZWN0LCB2YWx1ZSk7CiAgICAgcmV0dXJu
IHRydWU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGUuaAkocmV2aXNp
b24gMTgwNzIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTU4LDcgKzU4LDggQEAgZW51bSBKU1R5cGUgOiB1aW50OF90IHsKICAg
ICBQdXJlRm9yd2FyZGluZ1Byb3h5VHlwZSwKICAgICBJbXB1cmVQcm94eVR5cGUsCiAgICAgV2l0
aFNjb3BlVHlwZSwKLSAgICBBcmd1bWVudHNUeXBlLAorICAgIERpcmVjdEFyZ3VtZW50c1R5cGUs
CisgICAgU2NvcGVkQXJndW1lbnRzVHlwZSwKIAogICAgIEludDhBcnJheVR5cGUsCiAgICAgSW50
MTZBcnJheVR5cGUsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PdXRPZkJh
bmRBcmd1bWVudHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL091dE9mQmFuZEFyZ3VtZW50cy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9PdXRPZkJhbmRBcmd1bWVudHMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMjEzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJPdXRPZkJhbmRBcmd1bWVudHMu
aCIKKworI2luY2x1ZGUgIkpTQXJndW1lbnRzSXRlcmF0b3IuaCIKKyNpbmNsdWRlICJKU0NJbmxp
bmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitTVEFUSUNfQVNTRVJUX0lTX1RSSVZJQUxMWV9E
RVNUUlVDVElCTEUoT3V0T2ZCYW5kQXJndW1lbnRzKTsKKworY29uc3QgQ2xhc3NJbmZvIE91dE9m
QmFuZEFyZ3VtZW50czo6c19pbmZvID0geyAiQXJndW1lbnRzIiwgJkJhc2U6OnNfaW5mbywgMCwg
Q1JFQVRFX01FVEhPRF9UQUJMRShPdXRPZkJhbmRBcmd1bWVudHMpIH07CisKK091dE9mQmFuZEFy
Z3VtZW50czo6T3V0T2ZCYW5kQXJndW1lbnRzKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUp
CisgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUsIG51bGxwdHIpCisgICAgLCBtX3NwZWNpYWxzTWF0
ZXJpYWxpemVkKGZhbHNlKQoreworfQorCitPdXRPZkJhbmRBcmd1bWVudHMqIE91dE9mQmFuZEFy
Z3VtZW50czo6Y3JlYXRlRW1wdHkoCisgICAgVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU0Z1bmN0aW9uKiBjYWxsZWUpCit7CisgICAgT3V0T2ZCYW5kQXJndW1lbnRzKiBy
ZXN1bHQgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxPdXRPZkJhbmRBcmd1bWVudHM+KHZt
LmhlYXApKQorICAgICAgICBPdXRPZkJhbmRBcmd1bWVudHModm0sIGdsb2JhbE9iamVjdC0+b3V0
T2ZCYW5kQXJndW1lbnRzU3RydWN0dXJlKCkpOworICAgIHJlc3VsdC0+ZmluaXNoQ3JlYXRpb24o
dm0pOworICAgIHJlc3VsdC0+bV9jYWxsZWUuc2V0KHZtLCB0aGlzLCBjYWxsZWUpOworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKK091dE9mQmFuZEFyZ3VtZW50cyogT3V0T2ZCYW5kQXJndW1lbnRz
OjpjcmVhdGVFbXB0eShFeGVjU3RhdGUqIGV4ZWMsIEpTRnVuY3Rpb24qIGNhbGxlZSkKK3sKKyAg
ICAvLyBOQi4gU29tZSBjbGllbnRzIG1pZ2h0IGV4cGVjdCB0aGF0IHRoZSBnbG9iYWwgb2JqZWN0
IG9mIG9mIHRoaXMgb2JqZWN0IGlzIHRoZSBnbG9iYWwgb2JqZWN0CisgICAgLy8gb2YgdGhlIGNh
bGxlZS4gV2UgZG9uJ3QgZG8gdGhpcyBmb3Igbm93LCBidXQgbWF5YmUgd2Ugc2hvdWxkLgorICAg
IHJldHVybiBjcmVhdGVFbXB0eShleGVjLT52bSgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0
KCksIGNhbGxlZSk7Cit9CisKK091dE9mQmFuZEFyZ3VtZW50cyogT3V0T2ZCYW5kQXJndW1lbnRz
OjpjcmVhdGVXaXRoSW5saW5lRnJhbWUoRXhlY1N0YXRlKiBteUZyYW1lLCBFeGVjU3RhdGUqIHRh
cmdldEZyYW1lLCBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSwgQXJndW1lbnRzTW9k
ZSBtb2RlKQoreworICAgIFZNJiB2bSA9IG15RnJhbWUtPnZtKCk7CisgICAgCisgICAgSlNGdW5j
dGlvbiogY2FsbGVlOworICAgIAorICAgIGlmIChpbmxpbmVDYWxsRnJhbWUpCisgICAgICAgIGNh
bGxlZSA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4oaW5saW5lQ2FsbEZyYW1lLT5jYWxsZWVSZWNvdmVy
eS5yZWNvdmVyKHRhcmdldEZyYW1lKSk7CisgICAgZWxzZQorICAgICAgICBjYWxsZWUgPSBqc0Nh
c3Q8SlNGdW5jdGlvbio+KHRhcmdldEZyYW1lLT5jYWxsZWUoKSk7CisKKyAgICAvLyBOQi4gSXQn
cyBzb21ld2hhdCBhcmJpdHJhcnkgdGhhdCB3ZSB0aWUgdGhlIHN0cmljdG5lc3Mgb2YgdGhpcyBv
YmplY3QgdG8gdGhlIHN0cmljdG5lc3Mgb2YKKyAgICAvLyB0aGUgY2FsbGVlLgorICAgIGJvb2wg
aXNTdHJpY3RNb2RlID0gZXhlY3V0YWJsZS0+aXNTdHJpY3RNb2RlKCk7CisKKyAgICBPdXRPZkJh
bmRBcmd1bWVudHMqIHJlc3VsdCA9IGNyZWF0ZUVtcHR5KG15RnJhbWUsIGNhbGxlZSk7CisgICAg
CisgICAgdW5zaWduZWQgbGVuZ3RoOworICAgIHN3aXRjaCAobW9kZSkgeworICAgIGNhc2UgQ2xv
bmVkQXJndW1lbnRzQ3JlYXRpb25Nb2RlOiB7CisgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUp
IHsKKyAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRSZWdpc3Rl
ci5pc1ZhbGlkKCkpCisgICAgICAgICAgICAgICAgbGVuZ3RoID0gZXhlYy0+cihpbmxpbmVDYWxs
RnJhbWUtPmFyZ3VtZW50Q291bnRSZWdpc3RlcikudW5ib3hlZEludDMyKCk7CisgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgbGVuZ3RoID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVu
dHMuc2l6ZSgpOworICAgICAgICAgICAgbGVuZ3RoLS07CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IGxlbmd0aDsgaS0tOykKKyAgICAgICAgICAgICAgICByZXN1
bHQtPnB1dERpcmVjdEluZGV4KG15RnJhbWUsIGksIGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRz
W2ldLnJlY292ZXIodGFyZ2V0RnJhbWUpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IGxlbmd0aCA9IHRhcmdldEZyYW1lLT5hcmd1bWVudENvdW50KCk7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGxlbmd0aDsgaS0tOykKKyAgICAgICAgICAgICAg
ICByZXN1bHQtPnB1dERpcmVjdEluZGV4KG15RnJhbWUsIGksIHRhcmdldEZyYW1lLT51bmNoZWNr
ZWRBcmd1bWVudChpKSk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAg
ICAKKyAgICBjYXNlIEZha2VBcmd1bWVudFZhbHVlc0NyZWF0aW9uTW9kZTogeworICAgICAgICBs
ZW5ndGggPSAwOworICAgICAgICBicmVhazsKKyAgICB9IH0KKyAgICAKKyAgICByZXN1bHQtPnB1
dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcihsZW5ndGgpKTsK
KyAgICBpZiAoaXNTdHJpY3RNb2RlKSB7CisgICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0QWNjZXNz
b3IoZXhlYywgdm0ucHJvcGVydHlOYW1lcy0+Y2FsbGVlLCB0aGlzT2JqZWN0LT5nbG9iYWxPYmpl
Y3QoKS0+dGhyb3dUeXBlRXJyb3JHZXR0ZXJTZXR0ZXIoZXhlYy0+dm0oKSksIERvbnREZWxldGUg
fCBEb250RW51bSB8IEFjY2Vzc29yKTsKKyAgICAgICAgcmVzdWx0LT5wdXREaXJlY3RBY2Nlc3Nv
cihleGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT5jYWxsZWUsIHRoaXNPYmplY3QtPmdsb2JhbE9iamVj
dCgpLT50aHJvd1R5cGVFcnJvckdldHRlclNldHRlcihleGVjLT52bSgpKSwgRG9udERlbGV0ZSB8
IERvbnRFbnVtIHwgQWNjZXNzb3IpOworICAgIH0gZWxzZQorICAgICAgICByZXN1bHQtPnB1dERp
cmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+Y2FsbGVlLCBKU1ZhbHVlKGNhbGxlZSkpOworICAg
IAorICAgIHJlc3VsdC0+SlNDX05BVElWRV9GVU5DVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5pdGVy
YXRvclByaXZhdGVOYW1lLCBhcmd1bWVudHNGdW5jSXRlcmF0b3IsIERvbnRFbnVtLCAwKTsKK30K
KworT3V0T2ZCYW5kQXJndW1lbnRzKiBPdXRPZkJhbmRBcmd1bWVudHM6OmNyZWF0ZVdpdGhNYWNo
aW5lRnJhbWUoRXhlY1N0YXRlKiBteUZyYW1lLCBFeGVjU3RhdGUqIHRhcmdldEZyYW1lLCBBcmd1
bWVudHNNb2RlIG1vZGUpCit7CisgICAgcmV0dXJuIGNyZWF0ZVdpdGhJbmxpbmVGcmFtZShteUZy
YW1lLCB0YXJnZXRGcmFtZSwgbnVsbHB0ciwgbW9kZSk7Cit9CisKK1N0cnVjdHVyZSogT3V0T2ZC
YW5kQXJndW1lbnRzOjpjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKK3sKKyAgICByZXR1cm4gU3RydWN0dXJlOjpj
cmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBT
dHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Cit9CisKK2Jvb2wgT3V0T2ZCYW5kQXJndW1lbnRzOjpn
ZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9w
ZXJ0eU5hbWUgaWRlbnQsIFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICBPdXRPZkJhbmRBcmd1
bWVudHMqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8T3V0T2ZCYW5kQXJndW1lbnRzKj4ob2JqZWN0KTsK
KyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIAorICAgIGlmIChpZGVudCA9PSB2bS5wcm9w
ZXJ0eU5hbWVzLT5jYWxsZXIKKyAgICAgICAgfHwgaWRlbnQgPT0gdm0ucHJvcGVydHlOYW1lcy0+
Y2FsbGVlKQorICAgICAgICB0aGlzT2JqZWN0LT5tYXRlcmlhbGl6ZVNwZWNpYWxzSWZOZWNlc3Nh
cnkoZXhlYyk7CisgICAgCisgICAgaWYgKEJhc2U6OmdldE93blByb3BlcnR5U2xvdCh0aGlzT2Jq
ZWN0LCBleGVjLCBpZGVudCwgc2xvdCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIAorICAg
IGlmIChpZGVudCA9PSB2bS5wcm9wZXJ0eU5hbWVzLT5pdGVyYXRvclByaXZhdGVOYW1lKSB7Cisg
ICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBleGVjLT5sZXhpY2FsR2xvYmFs
T2JqZWN0KCk7CisgICAgICAgIHRoaXNPYmplY3QtPkpTQ19OQVRJVkVfRlVOQ1RJT04odm0ucHJv
cGVydHlOYW1lcy0+aXRlcmF0b3JQcml2YXRlTmFtZSwgYXJndW1lbnRzRnVuY0l0ZXJhdG9yLCBE
b250RW51bSwgMCk7CisgICAgICAgIGlmIChKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90KHRo
aXNPYmplY3QsIGV4ZWMsIGlkZW50LCBzbG90KSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KKyAgICAKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgT3V0T2ZCYW5kQXJndW1l
bnRzOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhl
YywgUHJvcGVydHlOYW1lQXJyYXkmIGFycmF5LCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3sKKyAg
ICBPdXRPZkJhbmRBcmd1bWVudHMqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8T3V0T2ZCYW5kQXJndW1l
bnRzKj4ob2JqZWN0KTsKKyAgICB0aGlzT2JqZWN0LT5tYXRlcmlhbGl6ZVNwZWNpYWxzSWZOZWNl
c3NhcnkoZXhlYyk7CisgICAgQmFzZTo6Z2V0T3duUHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBl
eGVjLCBhcnJheSwgbW9kZSk7Cit9CisKK3ZvaWQgT3V0T2ZCYW5kQXJndW1lbnRzOjpwdXQoSlND
ZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBpZGVudCwgSlNWYWx1ZSB2
YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQoreworICAgIE91dE9mQmFuZEFyZ3VtZW50cyog
dGhpc09iamVjdCA9IGpzQ2FzdDxPdXRPZkJhbmRBcmd1bWVudHMqPihvYmplY3QpOworICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgCisgICAgaWYgKGlkZW50ID09IHZtLnByb3BlcnR5TmFt
ZXMtPmNhbGxlZQorICAgICAgICB8fCBpZGVudCA9PSB2bS5wcm9wZXJ0eU5hbWVzLT5jYWxsZXIp
CisgICAgICAgIHRoaXNPYmplY3QtPm1hdGVyaWFsaXplU3BlY2lhbHNJZk5lY2Vzc2FyeShleGVj
KTsKKyAgICAKKyAgICBCYXNlOjpwdXQodGhpc09iamVjdCwgZXhlYywgaWRlbnQsIHZhbHVlLCBz
bG90KTsKK30KKwordm9pZCBPdXRPZkJhbmRBcmd1bWVudHM6OmRlbGV0ZVByb3BlcnR5KEpTQ2Vs
bCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgaWRlbnQpCit7CisgICAgT3V0
T2ZCYW5kQXJndW1lbnRzKiB0aGlzT2JqZWN0ID0ganNDYXN0PE91dE9mQmFuZEFyZ3VtZW50cyo+
KG9iamVjdCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICAKKyAgICBpZiAoaWRlbnQg
PT0gdm0ucHJvcGVydHlOYW1lcy0+Y2FsbGVlCisgICAgICAgIHx8IGlkZW50ID09IHZtLnByb3Bl
cnR5TmFtZXMtPmNhbGxlcikKKyAgICAgICAgdGhpc09iamVjdC0+bWF0ZXJpYWxpemVTcGVjaWFs
c0lmTmVjZXNzYXJ5KGV4ZWMpOworICAgIAorICAgIEJhc2U6OmRlbGV0ZVByb3BlcnR5KHRoaXNP
YmplY3QsIGV4ZWMsIGlkZW50KTsKK30KKwordm9pZCBPdXRPZkJhbmRBcmd1bWVudHM6OmRlZmlu
ZU93blByb3BlcnR5KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlO
YW1lIGlkZW50LCBjb25zdCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIGJvb2wgc2hv
dWxkVGhyb3cpCit7CisgICAgT3V0T2ZCYW5kQXJndW1lbnRzKiB0aGlzT2JqZWN0ID0ganNDYXN0
PE91dE9mQmFuZEFyZ3VtZW50cyo+KG9iamVjdCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsK
KyAgICAKKyAgICBpZiAoaWRlbnQgPT0gdm0ucHJvcGVydHlOYW1lcy0+Y2FsbGVlCisgICAgICAg
IHx8IGlkZW50ID09IHZtLnByb3BlcnR5TmFtZXMtPmNhbGxlcikKKyAgICAgICAgdGhpc09iamVj
dC0+bWF0ZXJpYWxpemVTcGVjaWFsc0lmTmVjZXNzYXJ5KGV4ZWMpOworICAgIAorICAgIHJldHVy
biBCYXNlOjpkZWZpbmVPd25Qcm9wZXJ0eShvYmplY3QsIGV4ZWMsIGlkZW50LCBkZXNjcmlwdG9y
LCBzaG91bGRUaHJvdyk7Cit9CisKK3ZvaWQgT3V0T2ZCYW5kQXJndW1lbnRzOjptYXRlcmlhbGl6
ZVNwZWNpYWxzKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBSRUxFQVNFX0FTU0VSVCghc3BlY2lh
bHNNYXRlcmlhbGl6ZWQoKSk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICAKKyAgICBG
dW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBqc0Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxl
Kj4obV9jYWxsZWUtPmV4ZWN1dGFibGUoKSk7CisgICAgYm9vbCBpc1N0cmljdE1vZGUgPSBleGVj
dXRhYmxlLT5pc1N0cmljdE1vZGUoKTsKKyAgICAKKyAgICBpZiAoaXNTdHJpY3RNb2RlKSB7Cisg
ICAgICAgIHB1dERpcmVjdEFjY2Vzc29yKGV4ZWMsIHZtLnByb3BlcnR5TmFtZXMtPmNhbGxlZSwg
Z2xvYmFsT2JqZWN0KCktPnRocm93VHlwZUVycm9yR2V0dGVyU2V0dGVyKHZtKSwgRG9udERlbGV0
ZSB8IERvbnRFbnVtIHwgQWNjZXNzb3IpOworICAgICAgICBwdXREaXJlY3RBY2Nlc3NvcihleGVj
LCB2bS5wcm9wZXJ0eU5hbWVzLT5jYWxsZWUsIGdsb2JhbE9iamVjdCgpLT50aHJvd1R5cGVFcnJv
ckdldHRlclNldHRlcih2bSksIERvbnREZWxldGUgfCBEb250RW51bSB8IEFjY2Vzc29yKTsKKyAg
ICB9IGVsc2UKKyAgICAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5jYWxsZWUs
IEpTVmFsdWUobV9jYWxsZWUuZ2V0KCkpKTsKKyAgICAKKyAgICBtX2NhbGxlZS5jbGVhcigpOwor
fQorCit2b2lkIE91dE9mQmFuZEFyZ3VtZW50czo6bWF0ZXJpYWxpemVTcGVjaWFsc0lmTmVjZXNz
YXJ5KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBpZiAoIXNwZWNpYWxzTWF0ZXJpYWxpemVkKCkp
CisgICAgICAgIG1hdGVyaWFsaXplU3BlY2lhbHMoZXhlYyk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PdXRPZkJhbmRBcmd1
bWVudHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PdXRP
ZkJhbmRBcmd1bWVudHMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL091dE9mQmFuZEFyZ3VtZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzcg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBPdXRPZkJhbmRBcmd1bWVudHNfaAorI2RlZmluZSBPdXRPZkJhbmRBcmd1bWVudHNfaAorCisj
aW5jbHVkZSAiQXJndW1lbnRzTW9kZS5oIgorI2luY2x1ZGUgIkpTT2JqZWN0LmgiCisKK25hbWVz
cGFjZSBKU0MgeworCisvLyBUaGlzIGlzIGFuIEFyZ3VtZW50cy1jbGFzcyBvYmplY3QgdGhhdCB3
ZSBjcmVhdGUgd2hlbiB5b3UgZG8gZnVuY3Rpb24uYXJndW1lbnRzLCBvciB5b3Ugc2F5CisvLyAi
YXJndW1lbnRzIiBpbnNpZGUgYSBmdW5jdGlvbiBpbiBzdHJpY3QgbW9kZS4gSXQgYmVoYXZlcyBh
bG1wc3QgZW50aXJlbHkgbGlrZSBhbiBvcmRpbmFyeQorLy8gSmF2YVNjcmlwdCBvYmplY3QuIEFs
bCBvZiB0aGUgYXJndW1lbnRzIHZhbHVlcyBhcmUgc2ltcGx5IGNvcGllZCBmcm9tIHRoZSBzdGFj
ayAocG9zc2libHkgdmlhCisvLyBzb21lIHNvcGhpc3RpY2F0ZWQgVmFsdWVSZWNvdmVyeSdzIGlm
IGFuIG9wdGltaXppbmcgY29tcGlsZXIgaXMgaW4gcGxheSkgYW5kIHRoZSBhcHByb3ByaWF0ZQor
Ly8gcHJvcGVydGllcyBvZiB0aGUgb2JqZWN0IGFyZSBwb3B1bGF0ZWQuIFRoZSBvbmx5IHJlYXNv
biB3aHkgd2UgbmVlZCBhIHNwZWNpYWwgY2xhc3MgaXMgdG8gbWFrZQorLy8gdGhlIG9iamVjdCBj
bGFpbSB0byBiZSAiQXJndW1lbnRzIiBmcm9tIGEgdG9TdHJpbmcgc3RhbmRwb2ludCwgYW5kIHRv
IGF2b2lkIG1hdGVyaWFsaXppbmcgdGhlCisvLyBjYWxsZXIvY2FsbGVlIHByb3BlcnRpZXMgdW5s
ZXNzIHNvbWVvbmUgYXNrcyBmb3IgdGhlbS4KK2NsYXNzIE91dE9mQmFuZEFyZ3VtZW50cyA6IHB1
YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTTm9uRmluYWxP
YmplY3QgQmFzZTsKKyAgICAKK3ByaXZhdGU6CisgICAgT3V0T2ZCYW5kQXJndW1lbnRzKFZNJiwg
U3RydWN0dXJlKik7CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgT3V0T2ZCYW5kQXJndW1lbnRzKiBj
cmVhdGVFbXB0eShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNGdW5jdGlvbiogY2FsbGVlKTsKKyAg
ICBzdGF0aWMgT3V0T2ZCYW5kQXJndW1lbnRzKiBjcmVhdGVFbXB0eShFeGVjU3RhdGUqLCBKU0Z1
bmN0aW9uKiBjYWxsZWUpOworICAgIHN0YXRpYyBPdXRPZkJhbmRBcmd1bWVudHMqIGNyZWF0ZVdp
dGhJbmxpbmVGcmFtZShFeGVjU3RhdGUqIG15RnJhbWUsIEV4ZWNTdGF0ZSogdGFyZ2V0RnJhbWUs
IElubGluZUNhbGxGcmFtZSosIEFyZ3VtZW50c01vZGUpOworICAgIHN0YXRpYyBPdXRPZkJhbmRB
cmd1bWVudHMqIGNyZWF0ZVdpdGhNYWNoaW5lRnJhbWUoRXhlY1N0YXRlKiBteUZyYW1lLCBFeGVj
U3RhdGUqIHRhcmdldEZyYW1lLCBBcmd1bWVudHNNb2RlKTsKKyAgICAKKyAgICBzdGF0aWMgU3Ry
dWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJv
dG90eXBlKTsKKworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92
ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMgfCBK
U09iamVjdDo6U3RydWN0dXJlRmxhZ3M7CisKKyAgICBERUNMQVJFX0lORk87CisKK3ByaXZhdGU6
CisgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiwgRXhlY1N0YXRl
KiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgdm9pZCBnZXRPd25Q
cm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBF
bnVtZXJhdGlvbk1vZGUpOworICAgIHN0YXRpYyB2b2lkIHB1dChKU0NlbGwqLCBFeGVjU3RhdGUq
LCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyB2
b2lkIGRlbGV0ZVByb3BlcnR5KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSk7Cisg
ICAgc3RhdGljIHZvaWQgZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQ
cm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgc2hvdWxkVGhyb3cp
OworICAgIAorICAgIGJvb2wgc3BlY2lhbHNNYXRlcmlhbGl6ZWQoKSBjb25zdCB7IHJldHVybiAh
bV9jYWxsZWU7IH0KKyAgICB2b2lkIG1hdGVyaWFsaXplU3BlY2lhbHMoRXhlY1N0YXRlKik7Cisg
ICAgdm9pZCBtYXRlcmlhbGl6ZVNwZWNpYWxzSWZOZWNlc3NhcnkoRXhlY1N0YXRlKik7CisgICAg
CisgICAgV3JpdGVCYXJyaWVyPEpTRnVuY3Rpb24qPiBtX2NhbGxlZTsgLy8gU2V0IHRvIG51bGxw
dHIgd2hlbiB3ZSBtYXRlcmlhbGl6ZSBhbGwgb2Ygb3VyIHNwZWNpYWwgcHJvcGVydGllcy4KK307
CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gT3V0T2ZCYW5kQXJndW1lbnRzX2gK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVPZmZzZXQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlT2Zmc2V0LmNw
cAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlT2Zm
c2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQyIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJTY29wZU9mZnNldC5oIgorCituYW1lc3BhY2UgSlNDIHsKKwordm9pZCBTY29wZU9mZnNl
dDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIGlmICghKnRoaXMpIHsKKyAg
ICAgICAgb3V0LnByaW50KCJzY29wZUludmFsaWQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICAKKyAgICBvdXQucHJpbnQoInNjb3BlIiwgb2Zmc2V0KCkpOworfQorCit9IC8vIG5hbWVz
cGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVPZmZz
ZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZU9m
ZnNldC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2Nv
cGVPZmZzZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUxIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgU2NvcGVPZmZzZXRfaAor
I2RlZmluZSBTY29wZU9mZnNldF9oCisKKyNpbmNsdWRlICJHZW5lcmljT2Zmc2V0LmgiCisjaW5j
bHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBKU0MgeworCisvLyBUaGlzIGlz
IGFuIG9mZnNldCBpbnRvIGEgc2NvcGUgb2Ygc29tZSBraW5kLiBJdCBjb3VsZCBiZSBhbiBhY3Rp
dmF0aW9uIHNjb3BlIG9yIGl0IGNvdWxkIGJlIGEKKy8vIGdsb2JhbCBvYmplY3QuCitjbGFzcyBT
Y29wZU9mZnNldCA6IHB1YmxpYyBHZW5lcmljT2Zmc2V0PFNjb3BlT2Zmc2V0PiB7CitwdWJsaWM6
CisgICAgU2NvcGVPZmZzZXQoKSB7IH0KKyAgICAKKyAgICBleHBsaWNpdCBTY29wZU9mZnNldCh1
bnNpZ25lZCBvZmZzZXQpCisgICAgICAgIDogR2VuZXJpY09mZnNldChvZmZzZXQpCisgICAgewor
ICAgIH0KKyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKK307CisKK30g
Ly8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gU2NvcGVPZmZzZXRfaAorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50cy5jcHAJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVu
dHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTM3IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJTY29wZWRBcmd1bWVudHMuaCIKKworI2luY2x1ZGUgIkdlbmVyaWNBcmd1bWVudHNJbmxp
bmVzLmgiCisjaW5jbHVkZSAiSlNBcmd1bWVudHNJdGVyYXRvci5oIgorI2luY2x1ZGUgIkpTQ0lu
bGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK1NUQVRJQ19BU1NFUlRfSVNfVFJJVklBTExZ
X0RFU1RSVUNUSUJMRShTY29wZWRBcmd1bWVudHMpOworCitjb25zdCBDbGFzc0luZm8gU2NvcGVk
QXJndW1lbnRzOjpzX2luZm8gPSB7ICJBcmd1bWVudHMiLCAmQmFzZTo6c19pbmZvLCAwLCBDUkVB
VEVfTUVUSE9EX1RBQkxFKFNjb3BlZEFyZ3VtZW50cykgfTsKKworU2NvcGVkQXJndW1lbnRzOjpT
Y29wZWRBcmd1bWVudHMoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgdW5zaWduZWQgdG90
YWxMZW5ndGgpCisgICAgOiBHZW5lcmljQXJndW1lbnRzKHZtLCBzdHJ1Y3R1cmUpCisgICAgLCBt
X292ZXJyb2RlVGhpbmdzKGZhbHNlKQorICAgICwgbV90b3RhbExlbmd0aChsZW5ndGgpCit7Cit9
CisKK3ZvaWQgU2NvcGVkQXJndW1lbnRzOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIEpTRnVuY3Rp
b24qIGNhbGxlZSwgU2NvcGVkQXJndW1lbnRzVGFibGUqIHRhYmxlLCBKU0xleGljYWxFbnZpcm9u
bWVudCogc2NvcGUpCit7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOworICAgIG1fY2Fs
bGVlLnNldCh2bSwgdGhpcywgY2FsbGVlKTsKKyAgICBtX3RhYmxlLnNldCh2bSwgdGhpcywgdGFi
bGUpOworICAgIG1fc2NvcGUuc2V0KHZtLCB0aGlzLCBzY29wZSk7Cit9CisKK1Njb3BlZEFyZ3Vt
ZW50cyogU2NvcGVkQXJndW1lbnRzOjpjcmVhdGVVbmluaXRpYWxpemVkKFZNJiB2bSwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIEpTRnVuY3Rpb24qIGNhbGxlZSwgU2NvcGVkQXJndW1lbnRzVGFibGUq
IHRhYmxlLCBKU0xleGljYWxFbnZpcm9ubWVudCogc2NvcGUsIHVuc2lnbmVkIHRvdGFsTGVuZ3Ro
KQoreworICAgIEFTU0VSVCh0b3RhbExlbmd0aCA+PSB0YWJsZS0+bGVuZ3RoKCkpOworICAgIFNj
b3BlZEFyZ3VtZW50cyogcmVzdWx0ID0gbmV3ICgKKyAgICAgICAgTm90TnVsbCwKKyAgICAgICAg
YWxsb2NhdGVDZWxsPFNjb3BlZEFyZ3VtZW50cz4odm0uaGVhcCwgYWxsb2NhdGlvblNpemUodG90
YWxMZW5ndGggLSB0YWJsZS0+bGVuZ3RoKCkpKSkKKyAgICAgICAgKHZtLCBzdHJ1Y3R1cmUsIHRv
dGFsTGVuZ3RoKTsKKyAgICByZXN1bHQtPmZpbmlzaENyZWF0aW9uKHZtLCBjYWxsZWUsIHRhYmxl
LCBzY29wZSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworU2NvcGVkQXJndW1lbnRzKiBTY29w
ZWRBcmd1bWVudHM6OmNyZWF0ZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0Z1bmN0
aW9uKiBjYWxsZWUsIFNjb3BlZEFyZ3VtZW50c1RhYmxlKiB0YWJsZSwgSlNMZXhpY2FsRW52aXJv
bm1lbnQqIHNjb3BlLCB1bnNpZ25lZCB0b3RhbExlbmd0aCkKK3sKKyAgICBTY29wZWRBcmd1bWVu
dHMqIHJlc3VsdCA9CisgICAgICAgIGNyZWF0ZVVuaW5pdGlhbGl6ZWQodm0sIHN0cnVjdHVyZSwg
Y2FsbGVlLCB0YWJsZSwgc2NvcGUsIHRvdGFsTGVuZ3RoKTsKKyAgICAKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSB0b3RhbExlbmd0aCAtIHRhYmxlLT5sZW5ndGgoKTsgaS0tOykKKyAgICAgICAgcmVz
dWx0LT5vdmVyZmxvd1N0b3JhZ2UoKVtpXS5jbGVhcigpOworICAgIAorICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK1Njb3BlZEFyZ3VtZW50cyogU2NvcGVkQXJndW1lbnRzOjpjcmVhdGVCeUNvcHlp
bmcoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgRXhlY1N0YXRlKiBleGVjLCBTY29wZWRB
cmd1bWVudHNUYWJsZSogdGFibGUsIEpTTGV4aWNhbEVudmlyb25tZW50KiBzY29wZSkKK3sKKyAg
ICB1bnNpZ25lZCBuYW1lZExlbmd0aCA9IHRhYmxlLT5sZW5ndGgoKTsKKyAgICB1bnNpZ25lZCB0
b3RhbExlbmd0aCA9IGV4ZWMtPmFyZ3VtZW50Q291bnQoKTsKKyAgICAKKyAgICBTY29wZWRBcmd1
bWVudHMqIHJlc3VsdCA9CisgICAgICAgIGNyZWF0ZVVuaW5pdGlhbGl6ZWQodm0sIHN0cnVjdHVy
ZSwgY2FsbGVlLCB0YWJsZSwgc2NvcGUsIHRvdGFsTGVuZ3RoKTsKKyAgICAKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSB0b3RhbExlbmd0aCAtIG5hbWVkTGVuZ3RoOyBpLS07KQorICAgICAgICByZXN1
bHQtPm92ZXJmbG93U3RvcmFnZSgpW2ldLnNldCh2bSwgcmVzdWx0LCBleGVjLT51bmNoZWNrZWRB
cmd1bWVudHMoaSArIG5hbWVkTGVuZ3RoKSk7CisgICAgCisgICAgcmV0dXJuIHJlc3VsdDsKK30K
Kwordm9pZCBTY29wZWRBcmd1bWVudHM6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90
VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBTY29wZWRBcmd1bWVudHMqIHRoaXNPYmplY3QgPSBz
dGF0aWNfY2FzdDxTY29wZWRBcmd1bWVudHMqPihjZWxsKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNU
X0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CisgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0
aGlzT2JqZWN0LCB2aXNpdG9yKTsKKworICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5t
X2NhbGxlZSk7CisgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fdGFibGUpOworICAg
IHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX3Njb3BlKTsKKyAgICAKKyAgICB2aXNpdG9y
LmFwcGVuZFZhbHVlcygKKyAgICAgICAgdGhpc09iamVjdC0+b3ZlcmZsb3dTdG9yYWdlKCksIHRo
aXNPYmplY3QtPm1fdG90YWxMZW5ndGggLSB0aGlzT2JqZWN0LT5tX3RhYmxlLT5sZW5ndGgoKSk7
Cit9CisKK1N0cnVjdHVyZSogU2NvcGVkQXJndW1lbnRzOjpjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZt
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKK3sKKyAg
ICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBU
eXBlSW5mbyhTY29wZWRBcmd1bWVudHNUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Cit9
CisKK3ZvaWQgU2NvcGVkQXJndW1lbnRzOjpzbG93RG93bkFuZFdhc3RlTWVtb3J5KFZNJiB2bSkK
K3sKKyAgICBSRUxFQVNFX0FTU0VSVCghbV9vdmVycm9kZVRoaW5ncyk7CisgICAgCisgICAgcHV0
RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKG1fdGFibGUtPmxl
bmd0aCgpKSwgRG9udEVudW0pOworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+
Y2FsbGVlLCBtX2NhbGxlZS5nZXQoKSwgRG9udEVudW0pOworICAgIAorICAgIG1fb3ZlcnJvZGVU
aGluZ3MgPSB0cnVlOworfQorCit2b2lkIFNjb3BlZEFyZ3VtZW50czo6c2xvd0Rvd25BbmRXYXN0
ZU1lbW9yeUlmTmVjZXNzYXJ5KFZNJiB2bSkKK3sKKyAgICBpZiAoIW1fb3ZlcnJvZGVUaGluZ3Mp
CisgICAgICAgIHNsb3dEb3duQW5kV2FzdGVNZW1vcnkodm0pOworfQorCit2b2lkIFNjb3BlZEFy
Z3VtZW50czo6b3ZlcnJpZGVBcmd1bWVudChWTSYgdm0sIHVpbnQzMl90IGkpCit7CisgICAgdW5z
aWduZWQgbmFtZWRMZW5ndGggPSBtX3RhYmxlLT5sZW5ndGgoKTsKKyAgICBpZiAoaSA8IG5hbWVk
TGVuZ3RoKQorICAgICAgICBtX3RhYmxlLnNldCh2bSwgdGhpcywgbV90YWJsZS0+c2V0KHZtLCBp
LCBTY29wZU9mZnNldCgpKSk7CisgICAgZWxzZSB7CisgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VS
SVRZX0lNUExJQ0FUSU9OKGkgPCBtX3RvdGFsTGVuZ3RoKTsKKyAgICAgICAgb3ZlcmZsb3dTdG9y
YWdlKClbaSAtIG5hbWVkTGVuZ3RoXS5jbGVhcigpOworICAgIH0KK30KKworfSAvLyBuYW1lc3Bh
Y2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3Vt
ZW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3Bl
ZEFyZ3VtZW50cy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU2NvcGVkQXJndW1lbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNDUgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBTY29w
ZWRBcmd1bWVudHNfaAorI2RlZmluZSBTY29wZWRBcmd1bWVudHNfaAorCisjaW5jbHVkZSAiR2Vu
ZXJpY0FyZ3VtZW50cy5oIgorCituYW1lc3BhY2UgSlNDIHsKKworLy8gVGhpcyBpcyBhbiBBcmd1
bWVudHMtY2xhc3Mgb2JqZWN0IHRoYXQgd2UgY3JlYXRlIHdoZW4geW91IHNheSAiYXJndW1lbnRz
IiBpbnNpZGUgYSBmdW5jdGlvbiwKKy8vIGFuZCBvbmUgb3IgbW9yZSBvZiB0aGUgYXJndW1lbnRz
IG1heSBiZSBjYXB0dXJlZCBpbiB0aGUgZnVuY3Rpb24ncyBhY3RpdmF0aW9uLiBUaGUgZnVuY3Rp
b24KKy8vIHdpbGwgY29weSBpdHMgZm9ybWFsbHkgZGVjbGFyZWQgYXJndW1lbnRzIGludG8gdGhl
IGFjdGl2YXRpb24gYW5kIHRoZW4gY3JlYXRlIHRoaXMgb2JqZWN0LiBUaGlzCisvLyBvYmplY3Qg
d2lsbCBzdG9yZSB0aGUgb3ZlcmZsb3cgYXJndW1lbnRzLCBpZiB0aGVyZSBhcmUgYW55LiBUaGlz
IG9iamVjdCB3aWxsIHVzZSB0aGUgc3ltYm9sCisvLyB0YWJsZSdzIFNjb3BlZEFyZ3VtZW50c1Rh
YmxlIGFuZCB0aGUgYWN0aXZhdGlvbiwgb3IgaXRzIG92ZXJmbG93IHN0b3JhZ2UsIHRvIGhhbmRs
ZSBhbGwgaW5kZXhlZAorLy8gbG9va3Vwcy4KK2NsYXNzIFNjb3BlZEFyZ3VtZW50cyA6IHB1Ymxp
YyBHZW5lcmljQXJndW1lbnRzPFNjb3BlZEFyZ3VtZW50cz4geworcHJpdmF0ZToKKyAgICBTY29w
ZWRBcmd1bWVudHMoVk0mLCBTdHJ1Y3R1cmUqLCB1bnNpZ25lZCB0b3RhbExlbmd0aCk7CisgICAg
dm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIEpTRnVuY3Rpb24qIGNhbGxlZSwgU2NvcGVkQXJndW1l
bnRzVGFibGUqLCBKU0xleGljYWxFbnZpcm9ubWVudCopOworCitwdWJsaWM6CisgICAgLy8gQ3Jl
YXRlcyBhbiBhcmd1bWVudHMgb2JqZWN0IGJ1dCBsZWF2ZXMgaXQgdW5pbml0aWFsaXplZC4gVGhp
cyBpcyBkYW5nZXJvdXMgaWYgd2UgR0MgcmlnaHQKKyAgICAvLyBhZnRlciBhbGxvY2F0aW9uLgor
ICAgIHN0YXRpYyBTY29wZWRBcmd1bWVudHMqIGNyZWF0ZVVuaW5pdGlhbGl6ZWQoVk0mLCBTdHJ1
Y3R1cmUqLCBKU0Z1bmN0aW9uKiBjYWxsZWUsIFNjb3BlZEFyZ3VtZW50c1RhYmxlKiwgSlNMZXhp
Y2FsRW52aXJvbm1lbnQqLCB1bnNpZ25lZCB0b3RhbExlbmd0aCk7CisgICAgCisgICAgLy8gQ3Jl
YXRlcyBhbiBhcmd1bWVudHMgb2JqZWN0IGFuZCBpbml0aWFsaXplcyBldmVyeXRoaW5nIHRvIHRo
ZSBlbXB0eSB2YWx1ZS4gVXNlIHRoaXMgaWYgeW91CisgICAgLy8gY2Fubm90IGd1YXJhbnRlZSB0
aGF0IHlvdSdsbCBpbW1lZGlhdGVseSBpbml0aWFsaXplIGFsbCBvZiB0aGUgZWxlbWVudHMuCisg
ICAgc3RhdGljIFNjb3BlZEFyZ3VtZW50cyogY3JlYXRlKFZNJiwgU3RydWN0dXJlKiwgSlNGdW5j
dGlvbiogY2FsbGVlLCBTY29wZWRBcmd1bWVudHNUYWJsZSosIEpTTGV4aWNhbEVudmlyb25tZW50
KiwgdW5zaWduZWQgdG90YWxMZW5ndGgpOworICAgIAorICAgIC8vIENyZWF0ZXMgYW4gYXJndW1l
bnRzIG9iamVjdCBieSBjb3B5aW5nIHRoZSBhcmd1bW5ldHMgZnJvbSB0aGUgc3RhY2suCisgICAg
c3RhdGljIFNjb3BlZEFyZ3VtZW50cyogY3JlYXRlQnlDb3B5aW5nKFZNJiwgU3RydWN0dXJlKiwg
RXhlY1N0YXRlKiwgU2NvcGVkQXJndW1lbnRzVGFibGUqLCBKU0xleGljYWxFbnZpcm9ubWVudCop
OworICAgIAorICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0
b3ImKTsKKyAgICAKKyAgICB1aW50MzJfdCBpbnRlcm5hbExlbmd0aCgpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gbV90b3RhbExlbmd0aDsKKyAgICB9CisgICAgCisgICAgdWludDMyX3Qg
bGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChVTkxJS0VM
WShtX292ZXJyb2RlVGhpbmdzKSkKKyAgICAgICAgICAgIHJldHVybiBnZXQoZXhlYywgZXhlYy0+
cHJvcGVydHlOYW1lcygpLmxlbmd0aCkudG9VSW50MzIoZXhlYyk7CisgICAgICAgIHJldHVybiBp
bnRlcm5hbExlbmd0aCgpOworICAgIH0KKyAgICAKKyAgICBib29sIGNhbkFjY2Vzc0luZGV4UXVp
Y2tseSh1aW50MzJfdCBpKSBjb25zdAorICAgIHsKKyAgICAgICAgdW5zaWduZWQgbmFtZWRMZW5n
dGggPSBtX3RhYmxlLT5sZW5ndGgoKTsKKyAgICAgICAgaWYgKGkgPCBuYW1lZExlbmd0aCkKKyAg
ICAgICAgICAgIHJldHVybiAhIW1fdGFibGUtPmdldChpKTsKKyAgICAgICAgaWYgKGkgPCBtX3Rv
dGFsTGVuZ3RoKQorICAgICAgICAgICAgcmV0dXJuICEhb3ZlcmZsb3dTdG9yYWdlKClbaSAtIG5h
bWVkTGVuZ3RoXS5nZXQoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAg
ICBKU1ZhbHVlIGdldEluZGV4UXVpY2tseSh1aW50MzJfdCBpKSBjb25zdAorICAgIHsKKyAgICAg
ICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oY2FuQWNjZXNzSW5kZXhRdWlja2x5
KGkpKTsKKyAgICAgICAgdW5zaWduZWQgbmFtZWRMZW5ndGggPSBtX3RhYmxlLT5sZW5ndGgoKTsK
KyAgICAgICAgaWYgKGkgPCBuYW1lZExlbmd0aCkKKyAgICAgICAgICAgIHJldHVybiBtX3Njb3Bl
LT52YXJpYWJsZUF0KG1fdGFibGUtPmdldChpKSkuZ2V0KCk7CisgICAgICAgIHJldHVybiBvdmVy
Zmxvd1N0b3JhZ2UoKVtpIC0gbmFtZWRMZW5ndGhdLmdldCgpOworICAgIH0KKworICAgIHZvaWQg
c2V0SW5kZXhRdWlja2x5KFZNJiB2bSwgdWludDMyX3QgaSwgSlNWYWx1ZSB2YWx1ZSkKKyAgICB7
CisgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGNhbkFjY2Vzc0luZGV4
UXVpY2tseShpKSk7CisgICAgICAgIHVuc2lnbmVkIG5hbWVkTGVuZ3RoID0gbV90YWJsZS0+bGVu
Z3RoKCk7CisgICAgICAgIGlmIChpIDwgbmFtZWRMZW5ndGgpCisgICAgICAgICAgICBtX3Njb3Bl
LT52YXJpYWJsZWF0KG1fdGFibGUtPmdldChpKSkuc2V0KHZtLCB0aGlzLCB2YWx1ZSk7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIG92ZXJmbG93U3RvcmFnZSgpW2kgLSBuYW1lZExlbmd0aF0u
c2V0KHZtLCB0aGlzLCB2YWx1ZSk7CisgICAgfQorCisgICAgV3JpdGVCYXJyaWVyPEpTRnVuY3Rp
b24+JiBjYWxsZWUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fY2FsbGVlOworICAgIH0KKyAg
ICAKKyAgICBib29sIG92ZXJyb2RlVGhpbmdzKCkgY29uc3QgeyByZXR1cm4gbV9vdmVycm9kZVRo
aW5nczsgfQorICAgIHZvaWQgc2xvd0Rvd25BbmRXYXN0ZU1lbW9yeShWTSYpOworICAgIHZvaWQg
c2xvd0Rvd25BbmRXYXN0ZU1lbW9yeUlmTmVjZXNzYXJ5KFZNJik7CisgICAgdm9pZCBvdmVycmlk
ZUFyZ3VtZW50KFZNJiB2bSwgdWludDMyX3QgaSk7CisgICAgCisgICAgREVDTEFSRV9JTkZPOwor
ICAgIAorICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFs
T2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUpOworICAgIAorICAgIHN0YXRpYyBwdHJkaWZmX3Qg
b2Zmc2V0T2ZPdmVycm9kZVRoaW5ncygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihTY29wZWRB
cmd1bWVudHMsIG1fb3ZlcnJvZGVUaGluZ3MpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZz
ZXRPZlRvdGFsTGVuZ3RoKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFNjb3BlZEFyZ3VtZW50
cywgbV90b3RhbExlbmd0aCk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mVGFibGUo
KSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoU2NvcGVkQXJndW1lbnRzLCBtX3RhYmxlKTsgfQor
ICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZTY29wZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZT
RVRPRihTY29wZWRBcmd1bWVudHMsIG1fc2NvcGUpOyB9CisgICAgCisgICAgc3RhdGljIHNpemVf
dCBvdmVyZmxvd1N0b3JhZ2VPZmZzZXQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFdURjo6cm91
bmRVcFRvTXVsdGlwbGVPZjxzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KT4oc2l6ZW9mKFNj
b3BlZEFyZ3VtZW50cykpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgc2l6ZV90IGFsbG9jYXRp
b25TaXplKHVuc2lnbmVkIG92ZXJmbG93QXJndW1lbnRzTGVuZ3RoKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIHN0b3JhZ2VPZmZzZXQoKSArIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pICog
b3ZlcmZsb3dBcmd1bWVudHNMZW5ndGg7CisgICAgfQorCitwcml2YXRlOgorICAgIFdyaXRlQmFy
cmllcjxVbmtub3duPiogb3ZlcmZsb3dTdG9yYWdlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBi
aXR3aXNlX2Nhc3Q8V3JpdGVCYXJyaWVyPFVua25vd24+Kj4oCisgICAgICAgICAgICBiaXR3aXNl
X2Nhc3Q8Y2hhcio+KHRoaXMpICsgb3ZlcmZsb3dTdG9yYWdlT2Zmc2V0KCkpOworICAgIH0KKyAg
ICAKKyAgICBib29sIG1fb3ZlcnJvZGVUaGluZ3M7IC8vIFRydWUgaWYgbGVuZ3RoLCBjYWxsZWUs
IGFuZCBjYWxsZXIgYXJlIGZ1bGx5IG1hdGVyaWFsaXplZCBpbiB0aGUgb2JqZWN0LgorICAgIHVu
c2lnbmVkIG1fdG90YWxMZW5ndGg7IC8vIFRoZSBsZW5ndGggb2YgZGVjbGFyZWQgcGx1cyBvdmVy
ZmxvdyBhcmd1bWVudHMuCisgICAgV3JpdGVCYXJyaWVyPEpTRnVuY3Rpb24qPiBtX2NhbGxlZTsK
KyAgICBXcml0ZUJhcnJpZXI8U2NvcGVkQXJndW1lbnRzVGFibGU+IG1fdGFibGU7CisgICAgV3Jp
dGVCYXJyaWVyPEpTTGV4aWNhbEVudmlyb25tZW50PiBtX3Njb3BlOworfTsKKworfSAvLyBuYW1l
c3BhY2UgSlNDCisKKyNlbmRpZiAvLyBTY29wZWRBcmd1bWVudHNfaAorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHNUYWJsZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50c1RhYmxlLmgJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1
bWVudHNUYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTQgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBTY29wZWRBcmd1bWVu
dHNUYWJsZV9oCisjZGVmaW5lIFNjb3BlZEFyZ3VtZW50c1RhYmxlX2gKKworI2luY2x1ZGUgIkpT
Q2VsbC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworLy8gVGhpcyBjbGFzcydzIG9ubHkgam9iIGlz
IHRvIGhvbGQgb250byB0aGUgbGlzdCBvZiBTY29wZU9mZnNldHMgZm9yIGVhY2ggYXJndW1lbnQg
dGhhdCBhCisvLyBmdW5jdGlvbiBoYXMuIE1vc3Qgb2YgdGhlIHRpbWUsIHRoZSBCeXRlY29kZUdl
bmVyYXRvciB3aWxsIGNyZWF0ZSBvbmUgb2YgdGhlc2UgYW5kIGl0IHdpbGwKKy8vIG5ldmVyIGJl
IG1vZGlmaWVkIHN1YnNlcXVlbnRseS4gVGhlcmUgaXMgYSByYXJlIGNhc2Ugd2hlcmUgYSBTY29w
ZWRBcmd1bWVudHMgb2JqZWN0IGlzIGNyZWF0ZWQKKy8vIGFuZCBhbGlhc2VzIG9uZSBvZiB0aGVz
ZSBhbmQgdGhlbiBkZWNpZGVzIHRvIG1vZGlmeSBpdDsgaW4gdGhhdCBjYXNlIHdlIGRvIGNvcHkt
b24td3JpdGUuIFRoaXMKKy8vIG1ha2VzIHNlbnNlIGJlY2F1c2Ugc3VjaCBtb2RpZmljYXRpb25z
IGFyZSBzbyB1bmNvbW1vbi4gWW91J2QgaGF2ZSB0byBkbyBzb21ldGhpbmcgY3JhenkgbGlrZQor
Ly8gImRlbGV0ZSBhcmd1bWVudHNbaV0iIG9yIHNvbWUgdmFyaWFudCBvZiBkZWZpbmVPd25Qcm9w
ZXJ0eS4KK2NsYXNzIFNjb3BlZEFyZ3VtZW50cyA6IHB1YmxpYyBKU0NlbGwgeworcHVibGljOgor
ICAgIHR5cGVkZWYgSlNDZWxsIEJhc2U7CisgICAgCisgICAgc3RhdGljIGNvbnN0IGJvb2wgbmVl
ZHNEZXN0cnVjdGlvbiA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzSW1tb3J0YWxT
dHJ1Y3R1cmUgPSB0cnVlOworCitwcml2YXRlOgorICAgIFNjb3BlZEFyZ3VtZW50c1RhYmxlKFZN
Jik7CisgICAgflNjb3BlZEFyZ3VtZW50c1RhYmxlKCk7CisKK3B1YmxpYzoKKyAgICBzdGF0aWMg
U2NvcGVkQXJndW1lbnRzVGFibGUqIGNyZWF0ZShWTSYpOworICAgIAorICAgIFNjb3BlZEFyZ3Vt
ZW50cyogY2xvbmUoVk0mKTsKKyAgICAKKyAgICB1aW50MzJfdCBsZW5ndGgoKSBjb25zdCB7IHJl
dHVybiBtX2xlbmd0aDsgfQorICAgIFNjb3BlZEFyZ3VtZW50c1RhYmxlKiBzZXRMZW5ndGgoVk0m
LCB1aW50MzJfdCBuZXdMZW5ndGgpOworICAgIAorICAgIFNjb3BlT2Zmc2V0IGdldCh1aW50MzJf
dCBpKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJ
T04oaSA8IG1fbGVuZ3RoKTsKKyAgICAgICAgcmV0dXJuIG1fYXJndW1lbnRzW2ldOworICAgIH0K
KyAgICAKKyAgICB2b2lkIGxvY2soKQorICAgIHsKKyAgICAgICAgbV9sb2NrZWQgPSB0cnVlOwor
ICAgIH0KKyAgICAKKyAgICBTY29wZWRBcmd1bWVudHMqIHNldChWTSYgdm0sIHVpbnQzMl90IGks
IFNjb3BlT2Zmc2V0IHZhbHVlKQorICAgIHsKKyAgICAgICAgU2NvcGVkQXJndW1lbnRzKiByZXN1
bHQ7CisgICAgICAgIGlmIChVTkxJS0VMWShtX2xvY2tlZCkpCisgICAgICAgICAgICByZXN1bHQg
PSBjbG9uZSh2bSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJlc3VsdCA9IHRoaXM7Cisg
ICAgICAgIHJlc3VsdC0+c2V0RGlyZWN0KGksIHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICB9CisgICAgCisgICAgREVDTEFSRV9JTkZPOworICAgIAorICAgIHN0YXRpYyBwdHJk
aWZmX3Qgb2Zmc2V0T2ZMZW5ndGgoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoU2NvcGVkQXJn
dW1lbnRzLCBtX2xlbmd0aCk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQXJndW1l
bnRzKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFNjb3BlZEFyZ3VtZW50cywgbV9hcmd1bWVu
dHMpOyB9CisKK3ByaXZhdGU6CisgICAgdWludDMyX3QgbV9sZW5ndGg7CisgICAgYm9vbCBtX2xv
Y2tlZDsgLy8gQmVpbmcgbG9ja2VkIG1lYW5zIHRoYXQgdGhlcmUgYXJlIG11bHRpcGxlIHJlZmVy
ZW5jZXMgdG8gdGhpcyBvYmplY3QgYW5kIG5vbmUgb2YgdGhlbSBleHBlY3QgdG8gc2VlIHRoZSBv
dGhlcnMnIG1vZGlmaWNhdGlvbnMuIFRoaXMgbWVhbnMgdGhhdCBtb2RpZmljYXRpb25zIG5lZWQg
dG8gbWFrZSBhIGNvcHkgZmlyc3QuCisgICAgc3RkOjp1bmlxdWVfcHRyPFNjb3BlT2Zmc2V0W10+
IG1fYXJndW1lbnRzOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBTY29w
ZWRBcmd1bWVudHNUYWJsZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1N5bWJvbFRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TeW1ib2xUYWJsZS5jcHAJKHJldmlzaW9uIDE4MDcyMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE0LCAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtNjksNiArNjksOCBAQCBKU1ZhbHVlIFN5bWJvbFRhYmxlRW50cnk6OmluZmVycmVkVmFsdWUo
CiAKIHZvaWQgU3ltYm9sVGFibGVFbnRyeTo6cHJlcGFyZVRvV2F0Y2goU3ltYm9sVGFibGUqIHN5
bWJvbFRhYmxlKQogeworICAgIGlmICghaXNXYXRjaGFibGUoKSkKKyAgICAgICAgcmV0dXJuOwog
ICAgIEZhdEVudHJ5KiBlbnRyeSA9IGluZmxhdGUoKTsKICAgICBpZiAoZW50cnktPm1fd2F0Y2hw
b2ludHMpCiAgICAgICAgIHJldHVybjsKQEAgLTEzNywyOSArMTM5LDIyIEBAIHZvaWQgU3ltYm9s
VGFibGU6OldhdGNocG9pbnRDbGVhbnVwOjpmaW4KICAgICB9CiB9CiAKLVN5bWJvbFRhYmxlKiBT
eW1ib2xUYWJsZTo6Y2xvbmVDYXB0dXJlZE5hbWVzKFZNJiB2bSkKK1N5bWJvbFRhYmxlKiBTeW1i
b2xUYWJsZTo6Y2xvbmVTY29wZVBhcnQoVk0mIHZtKQogewogICAgIFN5bWJvbFRhYmxlKiByZXN1
bHQgPSBTeW1ib2xUYWJsZTo6Y3JlYXRlKHZtKTsKICAgICAKLSAgICByZXN1bHQtPm1fcGFyYW1l
dGVyQ291bnRJbmNsdWRpbmdUaGlzID0gbV9wYXJhbWV0ZXJDb3VudEluY2x1ZGluZ1RoaXM7CiAg
ICAgcmVzdWx0LT5tX3VzZXNOb25TdHJpY3RFdmFsID0gbV91c2VzTm9uU3RyaWN0RXZhbDsKLSAg
ICByZXN1bHQtPm1fY2FwdHVyZVN0YXJ0ID0gbV9jYXB0dXJlU3RhcnQ7Ci0gICAgcmVzdWx0LT5t
X2NhcHR1cmVFbmQgPSBtX2NhcHR1cmVFbmQ7CiAKICAgICBmb3IgKGF1dG8gaXRlciA9IG1fbWFw
LmJlZ2luKCksIGVuZCA9IG1fbWFwLmVuZCgpOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7Ci0gICAg
ICAgIGlmICghaXNDYXB0dXJlZChpdGVyLT52YWx1ZS5nZXRJbmRleCgpKSkKKyAgICAgICAgaWYg
KCFpdGVyLT52YWx1ZS52YXJPZmZzZXQoKS5pc1Njb3BlKCkpCiAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgcmVzdWx0LT5tX21hcC5hZGQoCiAgICAgICAgICAgICBpdGVyLT5rZXksCi0g
ICAgICAgICAgICBTeW1ib2xUYWJsZUVudHJ5KGl0ZXItPnZhbHVlLmdldEluZGV4KCksIGl0ZXIt
PnZhbHVlLmdldEF0dHJpYnV0ZXMoKSkpOworICAgICAgICAgICAgU3ltYm9sVGFibGVFbnRyeShp
dGVyLT52YWx1ZS52YXJPZmZzZXQoKSwgaXRlci0+dmFsdWUuZ2V0QXR0cmlidXRlcygpKSk7CiAg
ICAgfQogICAgIAotICAgIGlmIChtX3Nsb3dBcmd1bWVudHMpIHsKLSAgICAgICAgcmVzdWx0LT5t
X3Nsb3dBcmd1bWVudHMgPSBzdGQ6Om1ha2VfdW5pcXVlPFNsb3dBcmd1bWVudFtdPihwYXJhbWV0
ZXJDb3VudCgpKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gcGFyYW1ldGVyQ291bnQoKTsg
aS0tOykKLSAgICAgICAgICAgIHJlc3VsdC0+bV9zbG93QXJndW1lbnRzW2ldID0gbV9zbG93QXJn
dW1lbnRzW2ldOwotICAgIH0KLQorICAgIHJlc3VsdC0+bV9hcmd1bWVudHMgPSBhcmd1bWVudHMo
KTsKKyAgICAKICAgICBpZiAobV90eXBlUHJvZmlsaW5nUmFyZURhdGEpIHsKICAgICAgICAgcmVz
dWx0LT5tX3R5cGVQcm9maWxpbmdSYXJlRGF0YSA9IHN0ZDo6bWFrZV91bmlxdWU8VHlwZVByb2Zp
bGluZ1JhcmVEYXRhPigpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
eW1ib2xUYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1N5bWJvbFRhYmxlLmgJKHJldmlzaW9uIDE4MDcyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1N5bWJvbFRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAyMDEyLTIwMTQgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAyMDEyLTIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0zMSw2ICszMSw3IEBACiAKICNpbmNsdWRlICJDb25jdXJyZW50SklUTG9jay5o
IgogI2luY2x1ZGUgIkpTT2JqZWN0LmgiCisjaW5jbHVkZSAiU2NvcGVkQXJndW1lbnRzVGFibGUu
aCIKICNpbmNsdWRlICJUeXBlTG9jYXRpb24uaCIKICNpbmNsdWRlICJWYXJpYWJsZVdhdGNocG9p
bnRTZXQuaCIKICNpbmNsdWRlIDxtZW1vcnk+CkBAIC0zOSwyNCArNDAsNiBAQAogCiBuYW1lc3Bh
Y2UgSlNDIHsKIAotc3RydWN0IFNsb3dBcmd1bWVudCB7Ci1wdWJsaWM6Ci0gICAgZW51bSBTdGF0
dXMgewotICAgICAgICBOb3JtYWwgPSAwLAotICAgICAgICBDYXB0dXJlZCA9IDEsCi0gICAgICAg
IERlbGV0ZWQgPSAyCi0gICAgfTsKLQotICAgIFNsb3dBcmd1bWVudCgpCi0gICAgICAgIDogc3Rh
dHVzKE5vcm1hbCkKLSAgICAgICAgLCBpbmRleCgwKQotICAgIHsKLSAgICB9Ci0KLSAgICBTdGF0
dXMgc3RhdHVzOwotICAgIGludCBpbmRleDsgLy8gSWYgc3RhdHVzIGlzICdEZWxldGVkJywgaW5k
ZXggaXMgYm9ndXMuCi19OwotCiBzdGF0aWMgQUxXQVlTX0lOTElORSBpbnQgbWlzc2luZ1N5bWJv
bE1hcmtlcigpIHsgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCk7IH0KIAog
Ly8gVGhlIGJpdCB0d2lkZGxpbmcgaW4gdGhpcyBjbGFzcyBhc3N1bWVzIHRoYXQgZXZlcnkgcmVn
aXN0ZXIgaW5kZXggaXMgYQpAQCAtODYsNiArNjksMjkgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUg
aW50IG1pc3NpbmdTeW1ib2xNYQogLy8gY29weTogICAgIFN5bWJvbFRhYmxlRW50cnkgLS0+IEZh
dEVudHJ5IC0tLS0tXgogCiBzdHJ1Y3QgU3ltYm9sVGFibGVFbnRyeSB7Citwcml2YXRlOgorICAg
IHN0YXRpYyBWYXJPZmZzZXQgdmFyT2Zmc2V0RnJvbUJpdHMoaW50cHRyX3QgYml0cykKKyAgICB7
CisgICAgICAgIFZhcktpbmQga2luZDsKKyAgICAgICAgaW50cHRyX3Qga2luZEJpdHMgPSBiaXRz
ICYgS2luZE1hc2s7CisgICAgICAgIGlmIChraW5kQml0cyA8PSBVbndhdGNoYWJsZVNjb3BlS2lu
ZEJpdHMpCisgICAgICAgICAgICBraW5kID0gU2NvcGVWYXJLaW5kOworICAgICAgICBlbHNlIGlm
IChraW5kQml0cyA9PSBTdGFja0tpbmRCaXRzKQorICAgICAgICAgICAga2luZCA9IFN0YWNrVmFy
S2luZDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAga2luZCA9IENhcHR1cmVkQXJndW1lbnRL
aW5kOworICAgICAgICByZXR1cm4gVmFyT2Zmc2V0Ojphc3NlbWJsZShraW5kLCBzdGF0aWNfY2Fz
dDxpbnQ+KGJpdHMgPj4gRmxhZ0JpdHMpKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIFNjb3Bl
T2Zmc2V0IHNjb3BlT2Zmc2V0RnJvbUJpdHMoaW50cHRyX3QgYml0cykKKyAgICB7CisgICAgICAg
IEFTU0VSVCghKGJpdHMgJiBTdGFja0ZsYWcpKTsKKyAgICAgICAgQVNTRVJUKCEoYml0cyAmIENh
cHR1cmVkQXJndW1lbnRGbGFnKSk7CisgICAgICAgIHJldHVybiBTY29wZU9mZnNldChzdGF0aWNf
Y2FzdDxpbnQ+KGJpdHMgPj4gRmxhZ0JpdHMpKTsKKyAgICB9CisKK3B1YmxpYzoKKyAgICAKICAg
ICAvLyBVc2UgdGhlIFN5bWJvbFRhYmxlRW50cnk6OkZhc3QgY2xhc3MsIGVpdGhlciB2aWEgaW1w
bGljaXQgY2FzdCBvciBieSBjYWxsaW5nCiAgICAgLy8gZ2V0RmFzdCgpLCB3aGVuIHlvdSAoMSkg
b25seSBjYXJlIGFib3V0IGlzTnVsbCgpLCBnZXRJbmRleCgpLCBhbmQgaXNSZWFkT25seSgpLAog
ICAgIC8vIGFuZCAoMikgeW91IGFyZSBpbiBhIGhvdCBwYXRoIHdoZXJlIHlvdSBuZWVkIHRvIG1p
bmltaXplIHRoZSBudW1iZXIgb2YgdGltZXMKQEAgLTEwNywxMSArMTEzLDE5IEBAIHN0cnVjdCBT
eW1ib2xUYWJsZUVudHJ5IHsKICAgICAgICAgICAgIHJldHVybiAhKG1fYml0cyAmIH5TbGltRmxh
Zyk7CiAgICAgICAgIH0KIAotICAgICAgICBpbnQgZ2V0SW5kZXgoKSBjb25zdAorICAgICAgICBW
YXJPZmZzZXQgdmFyT2Zmc2V0KCkgY29uc3QKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PGludD4obV9iaXRzID4+IEZsYWdCaXRzKTsKKyAgICAgICAgICAgIHJldHVy
biB2YXJPZmZzZXRGcm9tQml0cyhtX2JpdHMpOwogICAgICAgICB9Ci0gICAgCisgICAgICAgIAor
ICAgICAgICAvLyBBc3NlcnRzIGlmIHRoZSBvZmZzZXQgaXMgYW55dGhpbmcgYnV0IGEgc2NvcGUg
b2Zmc2V0LiBUaGlzIHN0cnVjdHVyZXMgdGhlIGFzc2VydGlvbnMKKyAgICAgICAgLy8gaW4gYSB3
YXkgdGhhdCBtYXkgcmVzdWx0IGluIGJldHRlciBjb2RlLCBldmVuIGluIHJlbGVhc2UsIHRoYW4g
ZG9pbmcKKyAgICAgICAgLy8gdmFyT2Zmc2V0KCkuc2NvcGVPZmZzZXQoKS4KKyAgICAgICAgU2Nv
cGVPZmZzZXQgc2NvcGVPZmZzZXQoKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gc2NvcGVPZmZzZXRGcm9tQml0cyhtX2JpdHMpOworICAgICAgICB9CisgICAgICAgIAogICAg
ICAgICBib29sIGlzUmVhZE9ubHkoKSBjb25zdAogICAgICAgICB7CiAgICAgICAgICAgICByZXR1
cm4gbV9iaXRzICYgUmVhZE9ubHlGbGFnOwpAQCAtMTQyLDE4ICsxNTYsMTggQEAgc3RydWN0IFN5
bWJvbFRhYmxlRW50cnkgewogICAgIHsKICAgICB9CiAKLSAgICBTeW1ib2xUYWJsZUVudHJ5KGlu
dCBpbmRleCkKKyAgICBTeW1ib2xUYWJsZUVudHJ5KFZhck9mZnNldCBvZmZzZXQpCiAgICAgICAg
IDogbV9iaXRzKFNsaW1GbGFnKQogICAgIHsKLSAgICAgICAgQVNTRVJUKGlzVmFsaWRJbmRleChp
bmRleCkpOwotICAgICAgICBwYWNrKGluZGV4LCBmYWxzZSwgZmFsc2UpOworICAgICAgICBBU1NF
UlQoaXNWYWxpZFZhck9mZnNldChvZmZzZXQpKTsKKyAgICAgICAgcGFjayhvZmZzZXQsIGZhbHNl
LCBmYWxzZSk7CiAgICAgfQogCi0gICAgU3ltYm9sVGFibGVFbnRyeShpbnQgaW5kZXgsIHVuc2ln
bmVkIGF0dHJpYnV0ZXMpCisgICAgU3ltYm9sVGFibGVFbnRyeShWYXJPZmZzZXQgb2Zmc2V0LCB1
bnNpZ25lZCBhdHRyaWJ1dGVzKQogICAgICAgICA6IG1fYml0cyhTbGltRmxhZykKICAgICB7Ci0g
ICAgICAgIEFTU0VSVChpc1ZhbGlkSW5kZXgoaW5kZXgpKTsKLSAgICAgICAgcGFjayhpbmRleCwg
YXR0cmlidXRlcyAmIFJlYWRPbmx5LCBhdHRyaWJ1dGVzICYgRG9udEVudW0pOworICAgICAgICBB
U1NFUlQoaXNWYWxpZFZhck9mZnNldChvZmZzZXQpKTsKKyAgICAgICAgcGFjayhvZmZzZXQsIGF0
dHJpYnV0ZXMgJiBSZWFkT25seSwgYXR0cmlidXRlcyAmIERvbnRFbnVtKTsKICAgICB9CiAgICAg
CiAgICAgflN5bWJvbFRhYmxlRW50cnkoKQpAQCAtMTgxLDkgKzE5NSwyMiBAQCBzdHJ1Y3QgU3lt
Ym9sVGFibGVFbnRyeSB7CiAgICAgICAgIHJldHVybiAhKGJpdHMoKSAmIH5TbGltRmxhZyk7CiAg
ICAgfQogCi0gICAgaW50IGdldEluZGV4KCkgY29uc3QKKyAgICBWYXJPZmZzZXQgdmFyT2Zmc2V0
KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB2YXJPZmZzZXRGcm9tQml0cyhiaXRzKCkp
OworICAgIH0KKyAgICAKKyAgICBib29sIGlzV2F0Y2hhYmxlKCkgY29uc3QKICAgICB7Ci0gICAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KGJpdHMoKSA+PiBGbGFnQml0cyk7CisgICAgICAg
IHJldHVybiAobV9iaXRzICYgS2luZEJpdHNNYXNrKSA9PSBTY29wZUtpbmRCaXRzOworICAgIH0K
KyAgICAKKyAgICAvLyBBc3NlcnRzIGlmIHRoZSBvZmZzZXQgaXMgYW55dGhpbmcgYnV0IGEgc2Nv
cGUgb2Zmc2V0LiBUaGlzIHN0cnVjdHVyZXMgdGhlIGFzc2VydGlvbnMKKyAgICAvLyBpbiBhIHdh
eSB0aGF0IG1heSByZXN1bHQgaW4gYmV0dGVyIGNvZGUsIGV2ZW4gaW4gcmVsZWFzZSwgdGhhbiBk
b2luZworICAgIC8vIHZhck9mZnNldCgpLnNjb3BlT2Zmc2V0KCkuCisgICAgU2NvcGVPZmZzZXQg
c2NvcGVPZmZzZXQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHNjb3BlT2Zmc2V0RnJv
bUJpdHMoYml0cygpKTsKICAgICB9CiAgICAgCiAgICAgQUxXQVlTX0lOTElORSBGYXN0IGdldEZh
c3QoKSBjb25zdApAQCAtMjA2LDEwICsyMzMsMTAgQEAgc3RydWN0IFN5bWJvbFRhYmxlRW50cnkg
ewogICAgIHsKICAgICAgICAgcmV0dXJuIGdldEZhc3QoKS5nZXRBdHRyaWJ1dGVzKCk7CiAgICAg
fQotCisgICAgCiAgICAgdm9pZCBzZXRBdHRyaWJ1dGVzKHVuc2lnbmVkIGF0dHJpYnV0ZXMpCiAg
ICAgewotICAgICAgICBwYWNrKGdldEluZGV4KCksIGF0dHJpYnV0ZXMgJiBSZWFkT25seSwgYXR0
cmlidXRlcyAmIERvbnRFbnVtKTsKKyAgICAgICAgcGFjayh2YXJPZmZzZXQoKSwgaXNXYXRjaGFi
bGUoKSwgYXR0cmlidXRlcyAmIFJlYWRPbmx5LCBhdHRyaWJ1dGVzICYgRG9udEVudW0pOwogICAg
IH0KIAogICAgIGJvb2wgaXNSZWFkT25seSgpIGNvbnN0CkBAIC0yMTgsNiArMjQ1LDEyIEBAIHN0
cnVjdCBTeW1ib2xUYWJsZUVudHJ5IHsKICAgICB9CiAgICAgCiAgICAgSlNWYWx1ZSBpbmZlcnJl
ZFZhbHVlKCk7CisKKyAgICB2b2lkIGRpc2FibGVXYXRjaGluZygpCisgICAgeworICAgICAgICBp
ZiAodmFyT2Zmc2V0KCkuaXNTY29wZSgpKQorICAgICAgICAgICAgcGFjayh2YXJPZmZzZXQoKSwg
ZmFsc2UsIGF0dHJpYnV0ZXMgJiBSZWFkT25seSwgYXR0cmlidXRlcyAmIERvbnRFbnVtKTsKKyAg
ICB9CiAgICAgCiAgICAgdm9pZCBwcmVwYXJlVG9XYXRjaChTeW1ib2xUYWJsZSopOwogICAgIApA
QCAtMjQyLDcgKzI3NSwxMiBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBjb25zdCBpbnRwdHJfdCBS
ZWFkT25seUZsYWcgPSAweDI7CiAgICAgc3RhdGljIGNvbnN0IGludHB0cl90IERvbnRFbnVtRmxh
ZyA9IDB4NDsKICAgICBzdGF0aWMgY29uc3QgaW50cHRyX3QgTm90TnVsbEZsYWcgPSAweDg7Ci0g
ICAgc3RhdGljIGNvbnN0IGludHB0cl90IEZsYWdCaXRzID0gNDsKKyAgICBzdGF0aWMgY29uc3Qg
aW50cHRyX3QgS2luZEJpdHNNYXNrID0gMHgzMDsKKyAgICBzdGF0aWMgY29uc3QgaW50cHRyX3Qg
U2NvcGVLaW5kQml0cyA9IDB4MDA7CisgICAgc3RhdGljIGNvbnN0IGludHB0cl90IFVud2F0Y2hh
YmxlU2NvcGVLaW5kQml0cyA9IDB4MTA7CisgICAgc3RhdGljIGNvbnN0IGludHB0cl90IFN0YWNr
S2luZEJpdHMgPSAweDIwOworICAgIHN0YXRpYyBjb25zdCBpbnRwdHJfdCBDYXB0dXJlZEFyZ3Vt
ZW50S2luZEJpdHMgPSAweDMwOworICAgIHN0YXRpYyBjb25zdCBpbnRwdHJfdCBGbGFnQml0cyA9
IDY7CiAgICAgCiAgICAgY2xhc3MgRmF0RW50cnkgewogICAgICAgICBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKQEAgLTMwOSwyMCArMzQ3LDQwIEBAIHByaXZhdGU6CiAKICAgICBKU19FWFBPUlRf
UFJJVkFURSB2b2lkIGZyZWVGYXRFbnRyeVNsb3coKTsKIAotICAgIHZvaWQgcGFjayhpbnQgaW5k
ZXgsIGJvb2wgcmVhZE9ubHksIGJvb2wgZG9udEVudW0pCisgICAgdm9pZCBwYWNrKFZhck9mZnNl
dCBvZmZzZXQsIGJvb2wgaXNXYXRjaGFibGUsIGJvb2wgcmVhZE9ubHksIGJvb2wgZG9udEVudW0p
CiAgICAgewogICAgICAgICBBU1NFUlQoIWlzRmF0KCkpOwogICAgICAgICBpbnRwdHJfdCYgYml0
c1JlZiA9IGJpdHMoKTsKLSAgICAgICAgYml0c1JlZiA9IChzdGF0aWNfY2FzdDxpbnRwdHJfdD4o
aW5kZXgpIDw8IEZsYWdCaXRzKSB8IE5vdE51bGxGbGFnIHwgU2xpbUZsYWc7CisgICAgICAgIGJp
dHNSZWYgPQorICAgICAgICAgICAgKHN0YXRpY19jYXN0PGludHB0cl90PihvZmZzZXQucmF3T2Zm
c2V0KCkpIDw8IEZsYWdCaXRzKSB8IE5vdE51bGxGbGFnIHwgU2xpbUZsYWc7CiAgICAgICAgIGlm
IChyZWFkT25seSkKICAgICAgICAgICAgIGJpdHNSZWYgfD0gUmVhZE9ubHlGbGFnOwogICAgICAg
ICBpZiAoZG9udEVudW0pCiAgICAgICAgICAgICBiaXRzUmVmIHw9IERvbnRFbnVtRmxhZzsKKyAg
ICAgICAgc3dpdGNoIChvZmZzZXQua2luZCgpKSB7CisgICAgICAgIGNhc2UgU2NvcGVWYXJLaW5k
OgorICAgICAgICAgICAgaWYgKGlzV2F0Y2hhYmxlKQorICAgICAgICAgICAgICAgIGJpdHNSZWYg
fD0gU2NvcGVLaW5kQml0czsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBiaXRz
UmVmIHw9IFVud2F0Y2hhYmxlU2NvcGVLaW5kQml0czsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIFN0YWNrVmFyS2luZDoKKyAgICAgICAgICAgIEFTU0VSVCghaXNXYXRjaGFibGUp
OworICAgICAgICAgICAgYml0c1JlZiB8PSBTdGFja0tpbmRCaXRzOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgQ2FwdHVyZWRBcmd1bWVudEtpbmQ6CisgICAgICAgICAgICBBU1NF
UlQoIWlzV2F0Y2hhYmxlKTsKKyAgICAgICAgICAgIGJpdHNSZWYgfD0gQ2FwdHVyZWRBcmd1bWVu
dEtpbmRCaXRzOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgYm9vbCBpc1ZhbGlkSW5kZXgoaW50IGluZGV4KQor
ICAgIHN0YXRpYyBib29sIGlzVmFsaWRWYXJPZmZzZXQoVmFyT2Zmc2V0IG9mZnNldCkKICAgICB7
Ci0gICAgICAgIHJldHVybiAoKHN0YXRpY19jYXN0PGludHB0cl90PihpbmRleCkgPDwgRmxhZ0Jp
dHMpID4+IEZsYWdCaXRzKSA9PSBzdGF0aWNfY2FzdDxpbnRwdHJfdD4oaW5kZXgpOworICAgICAg
ICByZXR1cm4gKChzdGF0aWNfY2FzdDxpbnRwdHJfdD4ob2Zmc2V0LnJhd09mZnNldCgpKSA8PCBG
bGFnQml0cykgPj4gRmxhZ0JpdHMpID09IHN0YXRpY19jYXN0PGludHB0cl90PihvZmZzZXQucmF3
T2Zmc2V0KCkpOwogICAgIH0KIAogICAgIGludHB0cl90IG1fYml0czsKQEAgLTM1MSw3ICs0MDks
NyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFN5bWJvbFRhYmxlKiBjcmVhdGVOYW1lU2NvcGVUYWJs
ZShWTSYgdm0sIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQog
ICAgIHsKICAgICAgICAgU3ltYm9sVGFibGUqIHJlc3VsdCA9IGNyZWF0ZSh2bSk7Ci0gICAgICAg
IHJlc3VsdC0+YWRkKGlkZW50LmltcGwoKSwgU3ltYm9sVGFibGVFbnRyeSgtMSwgYXR0cmlidXRl
cykpOworICAgICAgICByZXN1bHQtPmFkZChpZGVudC5pbXBsKCksIFN5bWJvbFRhYmxlRW50cnko
VmFyT2Zmc2V0KFNjb3BlT2Zmc2V0KDApKSwgYXR0cmlidXRlcykpOwogICAgICAgICByZXR1cm4g
cmVzdWx0OwogICAgIH0KICAgICAKQEAgLTQyMyw5ICs0ODEsNTMgQEAgcHVibGljOgogICAgICAg
ICByZXR1cm4gc2l6ZShsb2NrZXIpOwogICAgIH0KICAgICAKLSAgICBNYXA6OkFkZFJlc3VsdCBh
ZGQoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYsIFN0cmluZ0ltcGwqIGtleSwgY29uc3QgU3lt
Ym9sVGFibGVFbnRyeSYgZW50cnkpCisgICAgU2NvcGVPZmZzZXQgbWF4U2NvcGVPZmZzZXQoKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbWF4U2NvcGVPZmZzZXQ7CisgICAgfQorICAg
IAorICAgIHZvaWQgZGlkVXNlU2NvcGVPZmZzZXQoU2NvcGVPZmZzZXQgb2Zmc2V0KQorICAgIHsK
KyAgICAgICAgaWYgKCFtX21heFNjb3BlT2Zmc2V0IHx8IG1fbWF4U2NvcGVPZmZzZXQgPCBvZmZl
dCkKKyAgICAgICAgICAgIG1fbWF4U2NvcGVPZmZzZXQgPSBvZmZzZXQ7CisgICAgfQorICAgIAor
ICAgIHZvaWQgZGlkVXNlVmFyT2Zmc2V0KFZhck9mZnNldCBvZmZzZXQpCisgICAgeworICAgICAg
ICBpZiAob2Zmc2V0LmlzU2NvcGUoKSkKKyAgICAgICAgICAgIGRpZFVzZVNjb3BlT2Zmc2V0KG9m
ZnNldCk7CisgICAgfQorICAgIAorICAgIHVuc2lnbmVkIHNjb3BlU2l6ZSgpIGNvbnN0CisgICAg
eworICAgICAgICBTY29wZU9mZnNldCBtYXhTY29wZU9mZnNldCA9IHRoaXMtPm1heFNjb3BlT2Zm
c2V0KCk7CisgICAgICAgIAorICAgICAgICAvLyBEbyBzb21lIGNhbGN1bGF0aW9uIHRoYXQgcmVs
aWVzIG9uIGludmFsaWQgc2NvcGUgb2Zmc2V0IHBsdXMgb25lIGJlaW5nIHplcm8uCisgICAgICAg
IHVuc2lnbmVkIGZhc3RSZXN1bHQgPSBtYXhTY29wZU9mZnNldC5vZmZzZXRVbmNoZWNrZWQoKSAr
IDE7CisgICAgICAgIAorICAgICAgICAvLyBBc3NlcnQgdGhhdCB0aGlzIHdvcmtzLgorICAgICAg
ICBBU1NFUlQoZmFzdFJlc3VsdCA9PSAoIW1heFNjb3BlT2Zmc2V0ID8gMCA6IG1heFNjb3BlT2Zm
c2V0Lm9mZnNldCgpICsgMSkpOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIGZhc3RSZXN1bHQ7
CisgICAgfQorICAgIAorICAgIFNjb3BlT2Zmc2V0IG5leHRTY29wZU9mZnNldCgpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gU2NvcGVPZmZzZXQoc2NvcGVTaXplKCkpOworICAgIH0KKyAg
ICAKKyAgICBTY29wZU9mZnNldCB0YWtlTmV4dFNjb3BlT2Zmc2V0KCkKKyAgICB7CisgICAgICAg
IFNjb3BlT2Zmc2V0IHJlc3VsdCA9IG5leHRTY29wZU9mZnNldCgpOworICAgICAgICBtX21heFNj
b3BlT2Zmc2V0ID0gcmVzdWx0OworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAK
KyAgICB2b2lkIGFkZChjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiwgU3RyaW5nSW1wbCoga2V5
LCBjb25zdCBTeW1ib2xUYWJsZUVudHJ5JiBlbnRyeSkKICAgICB7Ci0gICAgICAgIHJldHVybiBt
X21hcC5hZGQoa2V5LCBlbnRyeSk7CisgICAgICAgIGRpZFVzZVZhck9mZnNldChlbnRyeS52YXJP
ZmZzZXQoKSk7CisgICAgICAgIE1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IG1fbWFwLmFkZChrZXks
IGVudHJ5KTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChyZXN1bHQsIHJlc3VsdC5pc05ld0VudHJ5
KTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBhZGQoU3RyaW5nSW1wbCoga2V5LCBjb25zdCBTeW1i
b2xUYWJsZUVudHJ5JiBlbnRyeSkKQEAgLTQzNCw5ICs1MzYsMTAgQEAgcHVibGljOgogICAgICAg
ICBhZGQobG9ja2VyLCBrZXksIGVudHJ5KTsKICAgICB9CiAgICAgCi0gICAgTWFwOjpBZGRSZXN1
bHQgc2V0KGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImLCBTdHJpbmdJbXBsKiBrZXksIGNvbnN0
IFN5bWJvbFRhYmxlRW50cnkmIGVudHJ5KQorICAgIHZvaWQgc2V0KGNvbnN0IENvbmN1cnJlbnRK
SVRMb2NrZXImLCBTdHJpbmdJbXBsKiBrZXksIGNvbnN0IFN5bWJvbFRhYmxlRW50cnkmIGVudHJ5
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fbWFwLnNldChrZXksIGVudHJ5KTsKKyAgICAgICAg
ZGlkVXNlVmFyT2Zmc2V0KGVudHJ5LnZhck9mZnNldCgpKTsKKyAgICAgICAgbV9tYXAuc2V0KGtl
eSwgZW50cnkpOwogICAgIH0KICAgICAKICAgICB2b2lkIHNldChTdHJpbmdJbXBsKiBrZXksIGNv
bnN0IFN5bWJvbFRhYmxlRW50cnkmIGVudHJ5KQpAQCAtNDU2LDYgKzU1OSw0NSBAQCBwdWJsaWM6
CiAgICAgICAgIHJldHVybiBjb250YWlucyhsb2NrZXIsIGtleSk7CiAgICAgfQogICAgIAorICAg
IC8vIFRoZSBwcmluY2lwbGUgYmVoaW5kIFNjb3BlZEFyZ3VtZW50c1RhYmxlIG1vZGlmaWNhdGlv
bnMgaXMgdGhhdCB3ZSB3aWxsIGNyZWF0ZSBvbmUgYW5kCisgICAgLy8gbGVhdmUgaXQgdW5sb2Nr
ZWQgLSB0aGVyZWJ5IGFsbG93aW5nIGluLXBsYWNlIGNoYW5nZXMgLSB1bnRpbCBzb21lb25lIGFz
a3MgZm9yIGEgcG9pbnRlciB0bworICAgIC8vIHRoZSB0YWJsZS4gVGhlbiwgd2Ugd2lsbCBsb2Nr
IGl0LiBUaGVuIGJvdGggb3VyIGZ1dHVyZSBjaGFuZ2VzIGFuZCB0aGVpciBmdXR1cmUgY2hhbmdl
cworICAgIC8vIHdpbGwgZmlyc3QgaGF2ZSB0byBtYWtlIGEgY29weS4gVGhpcyBkaXNjaXBsaW5l
IG1lYW5zIHRoYXQgdXN1YWxseSB3aGVuIHdlIGNyZWF0ZSBhCisgICAgLy8gU2NvcGVkQXJndW1l
bnRzIG9iamVjdCwgd2UgZG9uJ3QgaGF2ZSB0byBtYWtlIGEgY29weSBvZiB0aGUgU2NvcGVkQXJn
dW1lbnRzVGFibGUgLSBpbnN0ZWFkCisgICAgLy8gd2UganVzdCB0YWtlIGEgcmVmZXJlbmNlIHRv
IG9uZSB0aGF0IHdlIGFscmVhZHkgaGF2ZS4KKyAgICAKKyAgICB1aW50MzJfdCBhcmd1bWVudHNM
ZW5ndGgoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKCFtX2FyZ3VtZW50cykKKyAgICAgICAg
ICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbV9hcmd1bWVudHMtPmxlbmd0aCgpOworICAg
IH0KKyAgICAKKyAgICB2b2lkIHNldEFyZ3VtZW50c0xlbmd0aChWTSYgdm0sIHVpbnQzMl90IGxl
bmd0aCkKKyAgICB7CisgICAgICAgIGlmIChVTkxJS0VMWSghbV9hcmd1bWVudHMpKQorICAgICAg
ICAgICAgbV9hcmd1bWVudHMuc2V0KHZtLCB0aGlzLCBTY29wZWRBcmd1bWVudHNUYWJsZTo6Y3Jl
YXRlKHZtKSk7CisgICAgICAgIG1fYXJndW1lbnRzLnNldCh2bSwgdGhpcywgbV9hcmd1bWVudHMt
PnNldExlbmd0aCh2bSwgbGVuZ3RoKSk7CisgICAgfQorICAgIAorICAgIFNjb3BlT2Zmc2V0IGFy
Z3VtZW50T2Zmc2V0KHVpbnQzMl90IGkpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlRfV0lU
SF9TRUNVUklUWV9JTVBMSUNBVElPTihtX2FyZ3VtZW50cyk7CisgICAgICAgIHJldHVybiBtX2Fy
Z3VtZW50cy0+Z2V0KGkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNldEFyZ3VtZW50T2Zmc2V0
KFZNJiB2bSwgdWludDMyX3QgaSwgU2NvcGVPZmZzZXQgb2Zmc2V0KQorICAgIHsKKyAgICAgICAg
QVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04obV9hcmd1bWVudHMpOworICAgICAgICBt
X2FyZ3VtZW50cy5zZXQodm0sIHRoaXMsIG1fYXJndW1lbnRzLT5zZXQodm0sIGksIG9mZnNldCkp
OworICAgIH0KKyAgICAKKyAgICBTY29wZWRBcmd1bWVudHNUYWJsZSogYXJndW1lbnRzKCkgY29u
c3QKKyAgICB7CisgICAgICAgIG1fYXJndW1lbnRzLT5sb2NrKCk7CisgICAgICAgIHJldHVybiBt
X2FyZ3VtZW50cy5nZXQoKTsKKyAgICB9CisgICAgCiAgICAgR2xvYmFsVmFyaWFibGVJRCB1bmlx
dWVJREZvclZhcmlhYmxlKGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImLCBTdHJpbmdJbXBsKiBr
ZXksIFZNJiB2bSk7CiAgICAgR2xvYmFsVmFyaWFibGVJRCB1bmlxdWVJREZvclJlZ2lzdGVyKGNv
bnN0IENvbmN1cnJlbnRKSVRMb2NrZXImIGxvY2tlciwgaW50IHJlZ2lzdGVySW5kZXgsIFZNJiB2
bSk7CiAgICAgUmVmUHRyPFR5cGVTZXQ+IGdsb2JhbFR5cGVTZXRGb3JSZWdpc3Rlcihjb25zdCBD
b25jdXJyZW50SklUTG9ja2VyJiBsb2NrZXIsIGludCByZWdpc3RlckluZGV4LCBWTSYgdm0pOwpA
QCAtNDY0LDI4ICs2MDYsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCB1c2VzTm9uU3RyaWN0RXZhbCgp
IHsgcmV0dXJuIG1fdXNlc05vblN0cmljdEV2YWw7IH0KICAgICB2b2lkIHNldFVzZXNOb25TdHJp
Y3RFdmFsKGJvb2wgdXNlc05vblN0cmljdEV2YWwpIHsgbV91c2VzTm9uU3RyaWN0RXZhbCA9IHVz
ZXNOb25TdHJpY3RFdmFsOyB9CiAKLSAgICBpbnQgY2FwdHVyZVN0YXJ0KCkgY29uc3QgeyByZXR1
cm4gbV9jYXB0dXJlU3RhcnQ7IH0KLSAgICB2b2lkIHNldENhcHR1cmVTdGFydChpbnQgY2FwdHVy
ZVN0YXJ0KSB7IG1fY2FwdHVyZVN0YXJ0ID0gY2FwdHVyZVN0YXJ0OyB9Ci0KLSAgICBpbnQgY2Fw
dHVyZUVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fY2FwdHVyZUVuZDsgfQotICAgIHZvaWQgc2V0Q2Fw
dHVyZUVuZChpbnQgY2FwdHVyZUVuZCkgeyBtX2NhcHR1cmVFbmQgPSBjYXB0dXJlRW5kOyB9Ci0K
LSAgICBpbnQgY2FwdHVyZUNvdW50KCkgY29uc3QgeyByZXR1cm4gLShtX2NhcHR1cmVFbmQgLSBt
X2NhcHR1cmVTdGFydCk7IH0KLSAgICAKLSAgICBib29sIGlzQ2FwdHVyZWQoaW50IG9wZXJhbmQp
Ci0gICAgewotICAgICAgICByZXR1cm4gb3BlcmFuZCA8PSBjYXB0dXJlU3RhcnQoKSAmJiBvcGVy
YW5kID4gY2FwdHVyZUVuZCgpOwotICAgIH0KLQotICAgIGludCBwYXJhbWV0ZXJDb3VudCgpIHsg
cmV0dXJuIG1fcGFyYW1ldGVyQ291bnRJbmNsdWRpbmdUaGlzIC0gMTsgfQotICAgIGludCBwYXJh
bWV0ZXJDb3VudEluY2x1ZGluZ1RoaXMoKSB7IHJldHVybiBtX3BhcmFtZXRlckNvdW50SW5jbHVk
aW5nVGhpczsgfQotICAgIHZvaWQgc2V0UGFyYW1ldGVyQ291bnRJbmNsdWRpbmdUaGlzKGludCBw
YXJhbWV0ZXJDb3VudEluY2x1ZGluZ1RoaXMpIHsgbV9wYXJhbWV0ZXJDb3VudEluY2x1ZGluZ1Ro
aXMgPSBwYXJhbWV0ZXJDb3VudEluY2x1ZGluZ1RoaXM7IH0KLQotICAgIC8vIDAgaWYgd2UgZG9u
J3QgY2FwdHVyZSBhbnkgYXJndW1lbnRzOyBwYXJhbWV0ZXJDb3VudCgpIGluIGxlbmd0aCBpZiB3
ZSBkby4KLSAgICBjb25zdCBTbG93QXJndW1lbnQqIHNsb3dBcmd1bWVudHMoKSB7IHJldHVybiBt
X3Nsb3dBcmd1bWVudHMuZ2V0KCk7IH0KLSAgICB2b2lkIHNldFNsb3dBcmd1bWVudHMoc3RkOjp1
bmlxdWVfcHRyPFNsb3dBcmd1bWVudFtdPiBzbG93QXJndW1lbnRzKSB7IG1fc2xvd0FyZ3VtZW50
cyA9IFdURjo6bW92ZShzbG93QXJndW1lbnRzKTsgfQotICAgIAotICAgIFN5bWJvbFRhYmxlKiBj
bG9uZUNhcHR1cmVkTmFtZXMoVk0mKTsKKyAgICBTeW1ib2xUYWJsZSogY2xvbmVTY29wZVBhcnQo
Vk0mKTsKIAogICAgIHZvaWQgcHJlcGFyZUZvclR5cGVQcm9maWxpbmcoY29uc3QgQ29uY3VycmVu
dEpJVExvY2tlciYpOwogCkBAIC01MTMsNiArNjM0LDggQEAgcHJpdmF0ZToKICAgICB+U3ltYm9s
VGFibGUoKTsKIAogICAgIE1hcCBtX21hcDsKKyAgICBTY29wZU9mZnNldCBtX21heFNjb3BlT2Zm
c2V0OworICAgIAogICAgIHN0cnVjdCBUeXBlUHJvZmlsaW5nUmFyZURhdGEgewogICAgICAgICBV
bmlxdWVJRE1hcCBtX3VuaXF1ZUlETWFwOwogICAgICAgICBSZWdpc3RlclRvVmFyaWFibGVNYXAg
bV9yZWdpc3RlclRvVmFyaWFibGVNYXA7CkBAIC01MjAsMTMgKzY0Myw5IEBAIHByaXZhdGU6CiAg
ICAgfTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8VHlwZVByb2ZpbGluZ1JhcmVEYXRhPiBtX3R5cGVQ
cm9maWxpbmdSYXJlRGF0YTsKIAotICAgIGludCBtX3BhcmFtZXRlckNvdW50SW5jbHVkaW5nVGhp
czsKICAgICBib29sIG1fdXNlc05vblN0cmljdEV2YWw7Ci0KLSAgICBpbnQgbV9jYXB0dXJlU3Rh
cnQ7Ci0gICAgaW50IG1fY2FwdHVyZUVuZDsKLQotICAgIHN0ZDo6dW5pcXVlX3B0cjxTbG93QXJn
dW1lbnRbXT4gbV9zbG93QXJndW1lbnRzOworICAgIAorICAgIFdyaXRlQmFycmllcjxTY29wZWRB
cmd1bWVudHNUYWJsZT4gbV9hcmd1bWVudHM7CiAgICAgCiAgICAgc3RkOjp1bmlxdWVfcHRyPFdh
dGNocG9pbnRDbGVhbnVwPiBtX3dhdGNocG9pbnRDbGVhbnVwOwogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9WYXJPZmZzZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1Zhck9mZnNldC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WYXJPZmZzZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlZhck9mZnNldC5oIgorCituYW1l
c3BhY2UgSlNDIHsKKwordm9pZCBWYXJPZmZzZXQ6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29u
c3QKK3sKKyAgICBzd2l0Y2ggKG1fa2luZCkgeworICAgIGNhc2UgSW52YWxpZFZhcktpbmQ6Cisg
ICAgICAgIG91dC5wcmludCgiaW52YWxpZCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBT
Y29wZVZhcktpbmQ6CisgICAgICAgIG91dC5wcmludChzY29wZU9mZnNldCgpKTsKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgU3RhY2tWYXJLaW5kOgorICAgICAgICBvdXQucHJpbnQoc3RhY2tP
ZmZzZXQoKSk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENhcHR1cmVkQXJndW1lbnRLaW5k
OgorICAgICAgICBvdXQucHJpbnQoY2FwdHVyZWRBcmd1bWVudE9mZnNldCgpKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9
IC8vIG5hbWVzcGFjZSBKU0MKKworbmFtZXNwYWNlIFdURiB7CisKK3VzaW5nIG5hbWVzcGFjZSBK
U0M7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBWYXJLaW5kIHZhcktp
bmQpCit7CisgICAgc3dpdGNoICh2YXJLaW5kKSB7CisgICAgY2FzZSBJbnZhbGlkVmFyS2luZDoK
KyAgICAgICAgb3V0LnByaW50KCJJbnZhbGlkIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IFNjb3BlVmFyS2luZDoKKyAgICAgICAgb3V0LnByaW50KCJTY29wZSIpOworICAgICAgICByZXR1
cm47CisgICAgY2FzZSBTdGFja1ZhcktpbmQ6CisgICAgICAgIG91dC5wcmludCgiU3RhY2siKTsK
KyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ2FwdHVyZWRBcmd1bWVudEtpbmQ6CisgICAgICAg
IG91dC5wcmludCgiQ2FwdHVyZWRBcmd1bWVudCIpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdU
RgorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WYXJPZmZzZXQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WYXJPZmZzZXQuaAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Zhck9mZnNldC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjE0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgVmFyT2Zmc2V0X2gKKyNkZWZpbmUgVmFyT2Zm
c2V0X2gKKworI2luY2x1ZGUgIkNhcHR1cmVkQXJndW1lbnRzT2Zmc2V0LmgiCisjaW5jbHVkZSAi
U2NvcGVPZmZzZXQuaCIKKyNpbmNsdWRlICJWaXJ0dWFsUmVnaXN0ZXIuaCIKKworbmFtZXNwYWNl
IEpTQyB7CisKK2VudW0gVmFyS2luZCA6IHVpbnQ4X3QgeworICAgIEludmFsaWRWYXJLaW5kLAor
ICAgIFNjb3BlVmFyS2luZCwKKyAgICBTdGFja1ZhcktpbmQsCisgICAgQ2FwdHVyZWRBcmd1bWVu
dEtpbmQKK307CisKK2NsYXNzIFZhck9mZnNldCB7CitwdWJsaWM6CisgICAgVmFyT2Zmc2V0KCkK
KyAgICAgICAgOiBtX2tpbmQoSW52YWxpZFZhcktpbmQpCisgICAgICAgICwgbV9vZmZzZXQoVUlO
VF9NQVgpCisgICAgeworICAgIH0KKyAgICAKKyAgICBleHBsaWNpdCBWYXJPZmZzZXQoVmlydHVh
bFJlZ2lzdGVyIHN0YWNrT2Zmc2V0KQorICAgIHsKKyAgICAgICAgaWYgKCFzdGFja09mZnNldC5p
c1ZhbGlkKCkpIHsKKyAgICAgICAgICAgIG1fa2luZCA9IEludmFsaWRWYXJLaW5kOworICAgICAg
ICAgICAgbV9vZmZzZXQgPSBVSU5UX01BWDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IG1fa2luZCA9IFN0YWNrVmFyS2luZDsKKyAgICAgICAgICAgIG1fb2Zmc2V0ID0gc3RhY2tPZmZz
ZXQub2Zmc2V0KCk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgZXhwbGljaXQgVmFyT2Zm
c2V0KFNjb3BlT2Zmc2V0IHNjb3BlT2Zmc2V0KQorICAgIHsKKyAgICAgICAgaWYgKCFzY29wZU9m
ZnNldCkgeworICAgICAgICAgICAgbV9raW5kID0gSW52YWxpZFZhcktpbmQ7CisgICAgICAgICAg
ICBtX29mZnNldCA9IFVJTlRfTUFYOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbV9r
aW5kID0gU2NvcGVWYXJLaW5kOworICAgICAgICAgICAgbV9vZmZzZXQgPSBzY29wZU9mZnNldC5v
ZmZzZXQoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBleHBsaWNpdCBWYXJPZmZzZXQo
Q2FwdHVyZWRBcmd1bWVudHNPZmZzZXQgY2FwdHVyZWRBcmd1bWVudHNPZmZzZXQpCisgICAgewor
ICAgICAgICBpZiAoIWNhcHR1cmVkQXJndW1lbnRzT2Zmc2V0KSB7CisgICAgICAgICAgICBtX2tp
bmQgPSBJbnZhbGlkVmFyS2luZDsKKyAgICAgICAgICAgIG1fb2Zmc2V0ID0gVUlOVF9NQVg7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX2tpbmQgPSBDYXB0dXJlZEFyZ3VtZW50S2lu
ZDsKKyAgICAgICAgICAgIG1fb2Zmc2V0ID0gY2FwdHVyZWRBcmd1bWVudHNPZmZzZXQub2Zmc2V0
KCk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgc3RhdGljIFZhck9mZnNldCBhc3NlbWJs
ZShWYXJLaW5kIGtpbmQsIHVuc2lnbmVkIG9mZnNldCkKKyAgICB7CisgICAgICAgIFZhck9mZnNl
dCByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBraW5kOworICAgICAgICByZXN1bHQu
bV9vZmZzZXQgPSBvZmZzZXQ7CisgICAgICAgIHJlc3VsdC5jaGVja1Nhbml0eSgpOworICAgICAg
ICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBib29sIGlzVmFsaWQoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIG1fa2luZCAhPSBJbnZhbGlkVmFyS2luZDsKKyAgICB9Cisg
ICAgCisgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICFp
c1ZhbGlkKCk7CisgICAgfQorICAgIAorICAgIFZhcktpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJu
IG1fa2luZDsgfQorICAgIAorICAgIGJvb2wgaXNTdGFjaygpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gbV9raW5kID09IFN0YWNrVmFyS2luZDsKKyAgICB9CisgICAgCisgICAgYm9vbCBp
c1Njb3BlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2tpbmQgPT0gU2NvcGVWYXJL
aW5kOworICAgIH0KKyAgICAKKyAgICBib29sIGlzQ2FwdHVyZWRBcmd1bWVudCgpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gbV9raW5kID09IENhcHR1cmVkQXJndW1lbnRLaW5kOworICAg
IH0KKyAgICAKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3RhY2tPZmZzZXRVbmNoZWNrZWQoKSBjb25z
dAorICAgIHsKKyAgICAgICAgaWYgKCFpc1N0YWNrKCkpCisgICAgICAgICAgICByZXR1cm4gVmly
dHVhbFJlZ2lzdGVyKCk7CisgICAgICAgIHJldHVybiBWaXJ0dWFsUmVnaXN0ZXIobV9vZmZzZXQp
OworICAgIH0KKyAgICAKKyAgICBTY29wZU9mZnNldCBzY29wZU9mZnNldFVuY2hlY2tlZCgpIGNv
bnN0CisgICAgeworICAgICAgICBpZiAoIWlzU2NvcGUoKSkKKyAgICAgICAgICAgIHJldHVybiBT
Y29wZU9mZnNldCgpOworICAgICAgICByZXR1cm4gU2NvcGVPZmZzZXQobV9vZmZzZXQpOworICAg
IH0KKyAgICAKKyAgICBDYXB0dXJlZEFyZ3VtZW50c09mZnNldCBjYXB0dXJlZEFyZ3VtZW50c09m
ZnNldFVuY2hlY2tlZCgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoIWlzQ2FwdHVyZWRBcmd1
bWVudCgpKQorICAgICAgICAgICAgcmV0dXJuIENhcHR1cmVkQXJndW1lbnRzT2Zmc2V0KCk7Cisg
ICAgICAgIHJldHVybiBDYXB0dXJlZEFyZ3VtZW50c09mZnNldChtX29mZnNldCk7CisgICAgfQor
ICAgIAorICAgIFZpcnR1YWxSZWdpc3RlciBzdGFja09mZnNldCgpIGNvbnN0CisgICAgeworICAg
ICAgICBBU1NFUlQoaXNTdGFjaygpKTsKKyAgICAgICAgcmV0dXJuIFZpcnR1YWxSZWdpc3Rlciht
X29mZnNldCk7CisgICAgfQorICAgIAorICAgIFNjb3BlT2Zmc2V0IHNjb3BlT2Zmc2V0KCkgY29u
c3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc1Njb3BlKCkpOworICAgICAgICByZXR1cm4gU2Nv
cGVPZmZzZXQobV9vZmZzZXQpOworICAgIH0KKyAgICAKKyAgICBDYXB0dXJlZEFyZ3VtZW50c09m
ZnNldCBjYXB0dXJlZEFyZ3VtZW50c09mZnNldCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NF
UlQoaXNDYXB0dXJlZEFyZ3VtZW50KCkpOworICAgICAgICByZXR1cm4gQ2FwdHVyZWRBcmd1bWVu
dHNPZmZzZXQobV9vZmZzZXQpOworICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCByYXdPZmZzZXQo
KSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzVmFsaWQoKSk7CisgICAgICAgIHJldHVy
biBtX29mZnNldDsKKyAgICB9CisgICAgCisgICAgdm9pZCBjaGVja1Nhbml0eSgpIGNvbnN0Cisg
ICAgeworICAgICAgICBpZiAoQVNTRVJUX0RJU0FCTEVEKQorICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAKKyAgICAgICAgc3dpdGNoIChtX2tpbmQpIHsKKyAgICAgICAgY2FzZSBJbnZhbGlk
VmFyS2luZDoKKyAgICAgICAgICAgIEFTU0VSVChtX29mZnNldCA9PSBVSU5UX01BWCk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIGNhc2UgU2NvcGVWYXJLaW5kOgorICAgICAgICAgICAg
QVNTRVJUKHNjb3BlT2Zmc2V0KCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNl
IFN0YWNrVmFyS2luZDoKKyAgICAgICAgICAgIEFTU0VSVChzdGFja09mZnNldCgpKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBDYXB0dXJlZEFyZ3VtZW50S2luZDoKKyAgICAg
ICAgICAgIEFTU0VSVChjYXB0dXJlZEFyZ3VtZW50c09mZnNldCgpKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBWYXJPZmZzZXQmIG90aGVy
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fa2luZCA9PSBvdGhlci5tX2tpbmQKKyAg
ICAgICAgICAgICYmIG1fb2Zmc2V0ID09IG90aGVyLm1fb2Zmc2V0OworICAgIH0KKyAgICAKKyAg
ICBib29sIG9wZXJhdG9yIT0oY29uc3QgVmFyT2Zmc2V0JiBvdGhlcikgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBk
dW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgCitwcml2YXRlOgorICAgIFZhcktpbmQgbV9r
aW5kOworICAgIHVuc2lnbmVkIG1fb2Zmc2V0OworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisK
K25hbWVzcGFjZSBXVEYgeworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6
OlZhcktpbmQpOworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIFZhck9mZnNldF9o
CisK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>247643</attachid>
            <date>2015-03-01 16:44:37 -0800</date>
            <delta_ts>2015-03-01 18:38:58 -0800</delta_ts>
            <desc>bytecode generation initialization is done</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>226250</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2Vt
Ymxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJz
dHJhY3RNYWNyb0Fzc2VtYmxlci5oCShyZXZpc2lvbiAxODA3MjApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMjA1LDYgKzIwNSwxMSBAQCBwdWJsaWM6CiAgICAgICAgIFJlZ2lzdGVySUQgaW5kZXg7
CiAgICAgICAgIFNjYWxlIHNjYWxlOwogICAgICAgICBpbnQzMl90IG9mZnNldDsKKyAgICAgICAg
CisgICAgICAgIEJhc2VJbmRleCB3aXRoT2Zmc2V0KGludDMyX3QgYWRkaXRpb25hbE9mZnNldCkK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEJhc2VJbmRleChiYXNlLCBpbmRleCwgc2Nh
bGUsIG9mZnNldCArIGFkZGl0aW9uYWxPZmZzZXQpOworICAgICAgICB9CiAgICAgfTsKIAogICAg
IC8vIEFic29sdXRlQWRkcmVzczoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9CeVZhbEluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQnlWYWxJbmZvLmgJKHJldmlzaW9uIDE4MDcyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9CeVZhbEluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDEsNiArNDEsOCBAQCBlbnVt
IEpJVEFycmF5TW9kZSB7CiAgICAgSklURG91YmxlLAogICAgIEpJVENvbnRpZ3VvdXMsCiAgICAg
SklUQXJyYXlTdG9yYWdlLAorICAgIEpJVERpcmVjdEFyZ3VtZW50cywKKyAgICBKSVRTY29wZWRB
cmd1bWVudHMsCiAgICAgSklUSW50OEFycmF5LAogICAgIEpJVEludDE2QXJyYXksCiAgICAgSklU
SW50MzJBcnJheSwKQEAgLTY1LDYgKzY3LDE3IEBAIGlubGluZSBib29sIGlzT3B0aW1pemFibGVJ
bmRleGluZ1R5cGUoSW4KICAgICB9CiB9CiAKK2lubGluZSBib29sIGhhc09wdGltaXphYmxlSW5k
ZXhpbmdGb3JKU1R5cGUoSlNUeXBlIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAg
Y2FzZSBEaXJlY3RBcmd1bWVudHNUeXBlOgorICAgIGNhc2UgU2NvcGVkQXJndW1lbnRzVHlwZToK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KK30KKwogaW5saW5lIGJvb2wgaGFzT3B0aW1pemFibGVJbmRleGluZ0ZvckNsYXNz
SW5mbyhjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbykKIHsKICAgICByZXR1cm4gaXNUeXBlZFZp
ZXcoY2xhc3NJbmZvLT50eXBlZEFycmF5U3RvcmFnZVR5cGUpOwpAQCAtNzMsNiArODYsNyBAQCBp
bmxpbmUgYm9vbCBoYXNPcHRpbWl6YWJsZUluZGV4aW5nRm9yQ2xhCiBpbmxpbmUgYm9vbCBoYXNP
cHRpbWl6YWJsZUluZGV4aW5nKFN0cnVjdHVyZSogc3RydWN0dXJlKQogewogICAgIHJldHVybiBp
c09wdGltaXphYmxlSW5kZXhpbmdUeXBlKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpCisgICAg
ICAgIHx8IGhhc09wdGltaXphYmxlSW5kZXhpbmdGb3JKU1R5cGUoc3RydWN0dXJlLT50eXBlSW5m
bygpLnR5cGUoKSkKICAgICAgICAgfHwgaGFzT3B0aW1pemFibGVJbmRleGluZ0ZvckNsYXNzSW5m
byhzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpKTsKIH0KIApAQCAtOTMsNiArMTA3LDE5IEBAIGlubGlu
ZSBKSVRBcnJheU1vZGUgaml0QXJyYXlNb2RlRm9ySW5kZXgKICAgICB9CiB9CiAKK2lubGluZSBK
SVRBcnJheU1vZGUgaml0QXJyYXlNb2RlRm9ySlNUeXBlKEpTVHlwZSB0eXBlKQoreworICAgIHN3
aXRjaCAodHlwZSkgeworICAgIGNhc2UgRGlyZWN0QXJndW1lbnRzVHlwZToKKyAgICAgICAgcmV0
dXJuIEpJVERpcmVjdEFyZ3VtZW50czsKKyAgICBjYXNlIFNjb3BlZEFyZ3VtZW50c1R5cGU6Cisg
ICAgICAgIHJldHVybiBKSVRTY29wZWRBcmd1bWVudHM7CisgICAgZGVmYXVsdDoKKyAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIEpJVENvbnRpZ3Vv
dXM7CisgICAgfQorfQorCiBpbmxpbmUgSklUQXJyYXlNb2RlIGppdEFycmF5TW9kZUZvckNsYXNz
SW5mbyhjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbykKIHsKICAgICBzd2l0Y2ggKGNsYXNzSW5m
by0+dHlwZWRBcnJheVN0b3JhZ2VUeXBlKSB7CkBAIC0xMjAsNiArMTQ3LDE5IEBAIGlubGluZSBK
SVRBcnJheU1vZGUgaml0QXJyYXlNb2RlRm9yQ2xhc3MKICAgICB9CiB9CiAKK2lubGluZSBib29s
IGppdEFycmF5TW9kZVBlcm1pdHNQdXQoSklUQXJyYXlNb2RlIG1vZGUpCit7CisgICAgc3dpdGNo
IChtb2RlKSB7CisgICAgY2FzZSBKSVREaXJlY3RBcmd1bWVudHM6CisgICAgY2FzZSBKSVRTY29w
ZWRBcmd1bWVudHM6CisgICAgICAgIC8vIFdlIGNvdWxkIHN1cHBvcnQgcHV0X2J5X3ZhbCBvbiB0
aGVzZSBhdCBzb21lIHBvaW50LCBidXQgaXQncyBqdXN0IG5vdCB0aGF0IHByb2ZpdGFibGUKKyAg
ICAgICAgLy8gYXQgdGhlIG1vbWVudC4KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGRlZmF1
bHQ6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KK30KKwogaW5saW5lIFR5cGVkQXJyYXlU
eXBlIHR5cGVkQXJyYXlUeXBlRm9ySklUQXJyYXlNb2RlKEpJVEFycmF5TW9kZSBtb2RlKQogewog
ICAgIHN3aXRjaCAobW9kZSkgewpAQCAtMTUyLDYgKzE5Miw5IEBAIGlubGluZSBKSVRBcnJheU1v
ZGUgaml0QXJyYXlNb2RlRm9yU3RydWMKICAgICBpZiAoaXNPcHRpbWl6YWJsZUluZGV4aW5nVHlw
ZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSkKICAgICAgICAgcmV0dXJuIGppdEFycmF5TW9k
ZUZvckluZGV4aW5nVHlwZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKTsKICAgICAKKyAgICBp
ZiAoaGFzT3B0aW1pemFibGVJbmRleGluZ0ZvckpTVHlwZShzdHJ1Y3R1cmUtPnR5cGVJbmZvKCku
dHlwZSgpKSkKKyAgICAgICAgcmV0dXJuIGppdEFycmF5TW9kZUZvckpTVHlwZShzdHJ1Y3R1cmUt
PnR5cGVJbmZvKCkudHlwZSgpKTsKKyAgICAKICAgICBBU1NFUlQoaGFzT3B0aW1pemFibGVJbmRl
eGluZ0ZvckNsYXNzSW5mbyhzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpKSk7CiAgICAgcmV0dXJuIGpp
dEFycmF5TW9kZUZvckNsYXNzSW5mbyhzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpKTsKIH0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QuanNvbgo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0Lmpzb24J
KHJldmlzaW9uIDE4MDcyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRl
Y29kZUxpc3QuanNvbgkod29ya2luZyBjb3B5KQpAQCAtOCw3ICs4LDkgQEAKICAgICAgICAgICAg
IHsgIm5hbWUiIDogIm9wX2dldF9zY29wZSIsICJsZW5ndGgiIDogMiB9LAogICAgICAgICAgICAg
eyAibmFtZSIgOiAib3BfdG91Y2hfZW50cnkiLCAibGVuZ3RoIiA6IDEgfSwKICAgICAgICAgICAg
IHsgIm5hbWUiIDogIm9wX2luaXRfbGF6eV9yZWciLCAibGVuZ3RoIiA6IDIgfSwKLSAgICAgICAg
ICAgIHsgIm5hbWUiIDogIm9wX2NyZWF0ZV9hcmd1bWVudHMiLCAibGVuZ3RoIiA6IDMgfSwKKyAg
ICAgICAgICAgIHsgIm5hbWUiIDogIm9wX2NyZWF0ZV9kaXJlY3RfYXJndW1lbnRzIiwgImxlbmd0
aCIgOiAyIH0sIC8vIGp1c3QgdGFrZXMgdGhlIGRzdCByZWdpc3RlcgorICAgICAgICAgICAgeyAi
bmFtZSIgOiAib3BfY3JlYXRlX3Njb3BlZF9hcmd1bWVudHMiLCAibGVuZ3RoIiA6IDMgfSwgLy8g
ZHN0LCBzY29wZVJlZ2lzdGVyLCBpbXBsaWNpdGx5IHVzZXMgdGhlIFNjb3BlZEFyZ3VtZW50c1Rh
YmxlIGluIHRoZSBTeW1ib2xUYWJsZSBvZiB0aGUgQ29kZUJsb2NrCisgICAgICAgICAgICB7ICJu
YW1lIiA6ICJvcF9jcmVhdGVfb3V0X29mX2JhbmRfYXJndW1lbnRzIiwgImxlbmd0aCIgOiAyIH0s
CiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9jcmVhdGVfdGhpcyIsICJsZW5ndGgiIDogNCB9
LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfZ2V0X2NhbGxlZSIsICJsZW5ndGgiIDogMyB9
LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfdG9fdGhpcyIsICJsZW5ndGgiIDogNCB9LApA
QCAtNjEsNyArNjMsNiBAQAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfZ2V0X2J5X2lkIiwg
Imxlbmd0aCIgOiA5ICB9LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfZ2V0X2J5X2lkX291
dF9vZl9saW5lIiwgImxlbmd0aCIgOiA5ICB9LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3Bf
Z2V0X2FycmF5X2xlbmd0aCIsICJsZW5ndGgiIDogOSB9LAotICAgICAgICAgICAgeyAibmFtZSIg
OiAib3BfZ2V0X2FyZ3VtZW50c19sZW5ndGgiLCAibGVuZ3RoIiA6IDQgfSwKICAgICAgICAgICAg
IHsgIm5hbWUiIDogIm9wX3B1dF9ieV9pZCIsICJsZW5ndGgiIDogOSB9LAogICAgICAgICAgICAg
eyAibmFtZSIgOiAib3BfcHV0X2J5X2lkX291dF9vZl9saW5lIiwgImxlbmd0aCIgOiA5IH0sCiAg
ICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9wdXRfYnlfaWRfdHJhbnNpdGlvbl9kaXJlY3QiLCAi
bGVuZ3RoIiA6IDkgfSwKQEAgLTcwLDcgKzcxLDYgQEAKICAgICAgICAgICAgIHsgIm5hbWUiIDog
Im9wX3B1dF9ieV9pZF90cmFuc2l0aW9uX25vcm1hbF9vdXRfb2ZfbGluZSIsICJsZW5ndGgiIDog
OSB9LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfZGVsX2J5X2lkIiwgImxlbmd0aCIgOiA0
IH0sCiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9nZXRfYnlfdmFsIiwgImxlbmd0aCIgOiA2
IH0sCi0gICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9nZXRfYXJndW1lbnRfYnlfdmFsIiwgImxl
bmd0aCIgOiA3IH0sCiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9wdXRfYnlfdmFsIiwgImxl
bmd0aCIgOiA1IH0sCiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9wdXRfYnlfdmFsX2RpcmVj
dCIsICJsZW5ndGgiIDogNSB9LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfZGVsX2J5X3Zh
bCIsICJsZW5ndGgiIDogNCB9LApAQCAtOTQsMTIgKzk0LDExIEBACiAgICAgICAgICAgICB7ICJu
YW1lIiA6ICJvcF9zd2l0Y2hfaW1tIiwgImxlbmd0aCIgOiA0IH0sCiAgICAgICAgICAgICB7ICJu
YW1lIiA6ICJvcF9zd2l0Y2hfY2hhciIsICJsZW5ndGgiIDogNCB9LAogICAgICAgICAgICAgeyAi
bmFtZSIgOiAib3Bfc3dpdGNoX3N0cmluZyIsICJsZW5ndGgiIDogNCB9LAotICAgICAgICAgICAg
eyAibmFtZSIgOiAib3BfbmV3X2Z1bmMiLCAibGVuZ3RoIiA6IDUgfSwKKyAgICAgICAgICAgIHsg
Im5hbWUiIDogIm9wX25ld19mdW5jIiwgImxlbmd0aCIgOiA0IH0sCiAgICAgICAgICAgICB7ICJu
YW1lIiA6ICJvcF9uZXdfZnVuY19leHAiLCAibGVuZ3RoIiA6IDQgfSwKICAgICAgICAgICAgIHsg
Im5hbWUiIDogIm9wX2NhbGwiLCAibGVuZ3RoIiA6IDkgfSwKICAgICAgICAgICAgIHsgIm5hbWUi
IDogIm9wX2NhbGxfZXZhbCIsICJsZW5ndGgiIDogOSB9LAogICAgICAgICAgICAgeyAibmFtZSIg
OiAib3BfY2FsbF92YXJhcmdzIiwgImxlbmd0aCIgOiA5IH0sCi0gICAgICAgICAgICB7ICJuYW1l
IiA6ICJvcF90ZWFyX29mZl9hcmd1bWVudHMiLCAibGVuZ3RoIiA6IDMgfSwKICAgICAgICAgICAg
IHsgIm5hbWUiIDogIm9wX3JldCIsICJsZW5ndGgiIDogMiB9LAogICAgICAgICAgICAgeyAibmFt
ZSIgOiAib3BfY29uc3RydWN0IiwgImxlbmd0aCIgOiA5IH0sCiAgICAgICAgICAgICB7ICJuYW1l
IiA6ICJvcF9jb25zdHJ1Y3RfdmFyYXJncyIsICJsZW5ndGgiIDogOSB9LApAQCAtMTA4LDYgKzEw
Nyw4IEBACiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9yZXNvbHZlX3Njb3BlIiwgImxlbmd0
aCIgOiA3IH0sCiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9nZXRfZnJvbV9zY29wZSIsICJs
ZW5ndGgiIDogOCB9LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfcHV0X3RvX3Njb3BlIiwg
Imxlbmd0aCIgOiA3IH0sCisgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9nZXRfZnJvbV9hcmd1
bWVudHMiLCAibGVuZ3RoIiA6IDUgfSwgLy8gZHN0LCBhcmd1bWVudHMsIGluZGV4LCBwcm9maWxl
CisgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9wdXRfdG9fYXJndW1lbnRzIiwgImxlbmd0aCIg
OiA0IH0sIC8vIGFyZ3VtZW50cywgaW5kZXgsIHNyYwogICAgICAgICAgICAgeyAibmFtZSIgOiAi
b3BfcHVzaF93aXRoX3Njb3BlIiwgImxlbmd0aCIgOiAzIH0sCiAgICAgICAgICAgICB7ICJuYW1l
IiA6ICJvcF9wb3Bfc2NvcGUiLCAibGVuZ3RoIiA6IDIgfSwKICAgICAgICAgICAgIHsgIm5hbWUi
IDogIm9wX3B1c2hfbmFtZV9zY29wZSIsICJsZW5ndGgiIDogNSB9LApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDE4MDcyMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNzE3LDggKzE3MTcsOCBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhTY3JpcHRF
eGVjdXRhYmxlKiBvCiAgICAgICAgICAgICBzeW1ib2xUYWJsZS0+cHJlcGFyZUZvclR5cGVQcm9m
aWxpbmcobG9ja2VyKTsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChjb2RlVHlwZSgpID09IEZ1
bmN0aW9uQ29kZSAmJiBzeW1ib2xUYWJsZS0+Y2FwdHVyZUNvdW50KCkpIHsKLSAgICAgICAgICAg
IG1fc3ltYm9sVGFibGUuc2V0KCptX3ZtLCBtX293bmVyRXhlY3V0YWJsZS5nZXQoKSwgc3ltYm9s
VGFibGUtPmNsb25lQ2FwdHVyZWROYW1lcygqbV92bSkpOworICAgICAgICBpZiAoY29kZVR5cGUo
KSA9PSBGdW5jdGlvbkNvZGUgJiYgc3ltYm9sVGFibGUtPnNjb3BlU2l6ZSkpIHsKKyAgICAgICAg
ICAgIG1fc3ltYm9sVGFibGUuc2V0KCptX3ZtLCBtX293bmVyRXhlY3V0YWJsZS5nZXQoKSwgc3lt
Ym9sVGFibGUtPmNsb25lU2NvcGVQYXJ0KCptX3ZtKSk7CiAgICAgICAgICAgICBkaWRDbG9uZVN5
bWJvbFRhYmxlID0gdHJ1ZTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBtX3N5bWJvbFRh
YmxlLnNldCgqbV92bSwgbV9vd25lckV4ZWN1dGFibGUuZ2V0KCksIHN5bWJvbFRhYmxlKTsKQEAg
LTE5NjIsMTMgKzE5NjIsMTQgQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soU2NyaXB0RXhlY3V0YWJs
ZSogbwogCiAgICAgICAgICAgICAvLyBnZXRfZnJvbV9zY29wZSBkc3QsIHNjb3BlLCBpZCwgUmVz
b2x2ZU1vZGVBbmRUeXBlLCBTdHJ1Y3R1cmUsIE9wZXJhbmQKIAotICAgICAgICAgICAgY29uc3Qg
SWRlbnRpZmllciYgaWRlbnQgPSBpZGVudGlmaWVyKHBjWzNdLnUub3BlcmFuZCk7CiAgICAgICAg
ICAgICBSZXNvbHZlTW9kZUFuZFR5cGUgbW9kZUFuZFR5cGUgPSBSZXNvbHZlTW9kZUFuZFR5cGUo
cGNbNF0udS5vcGVyYW5kKTsKICAgICAgICAgICAgIGlmIChtb2RlQW5kVHlwZS50eXBlKCkgPT0g
TG9jYWxDbG9zdXJlVmFyKSB7CiAgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyA0XSA9
IFJlc29sdmVNb2RlQW5kVHlwZShtb2RlQW5kVHlwZS5tb2RlKCksIENsb3N1cmVWYXIpLm9wZXJh
bmQoKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KIAorICAgICAgICAg
ICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBpZGVudGlmaWVyKHBjWzNdLnUub3BlcmFuZCk7
CisKICAgICAgICAgICAgIFJlc29sdmVPcCBvcCA9IEpTU2NvcGU6OmFic3RyYWN0UmVzb2x2ZSht
X2dsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLCBuZWVkc0FjdGl2YXRpb24oKSwgc2NvcGUsIGlk
ZW50LCBHZXQsIG1vZGVBbmRUeXBlLnR5cGUoKSk7CiAKICAgICAgICAgICAgIGluc3RydWN0aW9u
c1tpICsgNF0udS5vcGVyYW5kID0gUmVzb2x2ZU1vZGVBbmRUeXBlKG1vZGVBbmRUeXBlLm1vZGUo
KSwgb3AudHlwZSkub3BlcmFuZCgpOwpAQCAtMTk4MywxOCArMTk4NCwxMyBAQCBDb2RlQmxvY2s6
OkNvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBvCiAKICAgICAgICAgY2FzZSBvcF9wdXRfdG9f
c2NvcGU6IHsKICAgICAgICAgICAgIC8vIHB1dF90b19zY29wZSBzY29wZSwgaWQsIHZhbHVlLCBS
ZXNvbHZlTW9kZUFuZFR5cGUsIFN0cnVjdHVyZSwgT3BlcmFuZAotICAgICAgICAgICAgY29uc3Qg
SWRlbnRpZmllciYgaWRlbnQgPSBpZGVudGlmaWVyKHBjWzJdLnUub3BlcmFuZCk7Ci0KICAgICAg
ICAgICAgIFJlc29sdmVNb2RlQW5kVHlwZSBtb2RlQW5kVHlwZSA9IFJlc29sdmVNb2RlQW5kVHlw
ZShwY1s0XS51Lm9wZXJhbmQpOwogICAgICAgICAgICAgaWYgKG1vZGVBbmRUeXBlLnR5cGUoKSA9
PSBMb2NhbENsb3N1cmVWYXIpIHsKLSAgICAgICAgICAgICAgICBib29sIGlzV2F0Y2hhYmxlVmFy
aWFibGUgPSBwY1s1XS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICAgICAgaWYgKCFpc1dhdGNoYWJs
ZVZhcmlhYmxlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgNV0udS53
YXRjaHBvaW50U2V0ID0gbnVsbHB0cjsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIFN0cmluZ0ltcGwqIHVpZCA9IGlkZW50Lmlt
cGwoKTsKLSAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChkaWRDbG9uZVN5bWJvbFRhYmxl
KTsKLSAgICAgICAgICAgICAgICBpZiAoaWRlbnQgIT0gbV92bS0+cHJvcGVydHlOYW1lcy0+YXJn
dW1lbnRzKSB7CisgICAgICAgICAgICAgICAgLy8gT25seSBkbyB3YXRjaGluZyBpZiB0aGUgcHJv
cGVydHkgd2UncmUgcHV0dGluZyB0byBpcyBub3QgYW5vbnltb3VzLgorICAgICAgICAgICAgICAg
IGlmIChzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocGNbMl0udS5vcGVyYW5kKSAhPSBVSU5UX01BWCkg
eworICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChkaWRDbG9uZVN5bWJvbFRhYmxl
KTsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBpZGVudGlm
aWVyKHBjWzJdLnUub3BlcmFuZCk7CisgICAgICAgICAgICAgICAgICAgIFN0cmluZ0ltcGwqIHVp
ZCA9IGlkZW50LmltcGwoKTsKICAgICAgICAgICAgICAgICAgICAgQ29uY3VycmVudEpJVExvY2tl
ciBsb2NrZXIobV9zeW1ib2xUYWJsZS0+bV9sb2NrKTsKICAgICAgICAgICAgICAgICAgICAgU3lt
Ym9sVGFibGU6Ok1hcDo6aXRlcmF0b3IgaXRlciA9IG1fc3ltYm9sVGFibGUtPmZpbmQobG9ja2Vy
LCB1aWQpOwogICAgICAgICAgICAgICAgICAgICBBU1NFUlQoaXRlciAhPSBtX3N5bWJvbFRhYmxl
LT5lbmQobG9ja2VyKSk7CkBAIC0yMDA1LDYgKzIwMDEsOCBAQCBDb2RlQmxvY2s6OkNvZGVCbG9j
ayhTY3JpcHRFeGVjdXRhYmxlKiBvCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICB9CiAKKyAgICAgICAgICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gaWRlbnRpZmllcihw
Y1syXS51Lm9wZXJhbmQpOworCiAgICAgICAgICAgICBSZXNvbHZlT3Agb3AgPSBKU1Njb3BlOjph
YnN0cmFjdFJlc29sdmUobV9nbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwgbmVlZHNBY3RpdmF0
aW9uKCksIHNjb3BlLCBpZGVudCwgUHV0LCBtb2RlQW5kVHlwZS50eXBlKCkpOwogCiAgICAgICAg
ICAgICBpbnN0cnVjdGlvbnNbaSArIDRdLnUub3BlcmFuZCA9IFJlc29sdmVNb2RlQW5kVHlwZSht
b2RlQW5kVHlwZS5tb2RlKCksIG9wLnR5cGUpLm9wZXJhbmQoKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmNwcAkocmV2aXNpb24g
MTgwNzIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksMTAgKzI5LDExIEBACiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiU3BlY3VsYXRlZFR5cGUuaCIKIAotI2luY2x1ZGUgIkFyZ3VtZW50cy5o
IgorI2luY2x1ZGUgIkRpcmVjdEFyZ3VtZW50cy5oIgogI2luY2x1ZGUgIkpTQXJyYXkuaCIKICNp
bmNsdWRlICJKU0Z1bmN0aW9uLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUg
IlNjb3BlZEFyZ3VtZW50cy5oIgogI2luY2x1ZGUgIlN0cmluZ09iamVjdC5oIgogI2luY2x1ZGUg
IlZhbHVlUHJvZmlsZS5oIgogI2luY2x1ZGUgPHd0Zi9Cb3VuZHNDaGVja2VkUG9pbnRlci5oPgpA
QCAtMTI3LDggKzEyOCwxMyBAQCB2b2lkIGR1bXBTcGVjdWxhdGlvbihQcmludFN0cmVhbSYgb3V0
LCBTCiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgaXNUb3AgPSBmYWxzZTsKICAg
ICAKLSAgICAgICAgICAgIGlmICh2YWx1ZSAmIFNwZWNBcmd1bWVudHMpCi0gICAgICAgICAgICAg
ICAgbXlPdXQucHJpbnQoIkFyZ3VtZW50cyIpOworICAgICAgICAgICAgaWYgKHZhbHVlICYgU3Bl
Y0RpcmVjdEFyZ3VtZW50cykKKyAgICAgICAgICAgICAgICBteU91dC5wcmludCgiRGlyZWN0YXJn
dW1lbnRzIik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgaXNUb3AgPSBmYWxz
ZTsKKyAgICAKKyAgICAgICAgICAgIGlmICh2YWx1ZSAmIFNwZWNTY29wZWRBcmd1bWVudHMpCisg
ICAgICAgICAgICAgICAgbXlPdXQucHJpbnQoIlNjb3BlZGFyZ3VtZW50cyIpOwogICAgICAgICAg
ICAgZWxzZQogICAgICAgICAgICAgICAgIGlzVG9wID0gZmFsc2U7CiAgICAgCkBAIC0yMzIsOCAr
MjM4LDEwIEBAIHN0YXRpYyBjb25zdCBjaGFyKiBzcGVjdWxhdGlvblRvQWJicmV2aWEKICAgICAg
ICAgcmV0dXJuICI8RmxvYXQzMmFycmF5PiI7CiAgICAgaWYgKGlzRmxvYXQ2NEFycmF5U3BlY3Vs
YXRpb24ocHJlZGljdGlvbikpCiAgICAgICAgIHJldHVybiAiPEZsb2F0NjRhcnJheT4iOwotICAg
IGlmIChpc0FyZ3VtZW50c1NwZWN1bGF0aW9uKHByZWRpY3Rpb24pKQotICAgICAgICByZXR1cm4g
IjxBcmd1bWVudHM+IjsKKyAgICBpZiAoaXNEaXJlY3RBcmd1bWVudHNTcGVjdWxhdGlvbihwcmVk
aWN0aW9uKSkKKyAgICAgICAgcmV0dXJuICI8RGlyZWN0QXJndW1lbnRzPiI7CisgICAgaWYgKGlz
U2NvcGVkQXJndW1lbnRzU3BlY3VsYXRpb24ocHJlZGljdGlvbikpCisgICAgICAgIHJldHVybiAi
PFNjb3BlZEFyZ3VtZW50cz4iOwogICAgIGlmIChpc1N0cmluZ09iamVjdFNwZWN1bGF0aW9uKHBy
ZWRpY3Rpb24pKQogICAgICAgICByZXR1cm4gIjxTdHJpbmdPYmplY3Q+IjsKICAgICBpZiAoaXNT
dHJpbmdPclN0cmluZ09iamVjdFNwZWN1bGF0aW9uKHByZWRpY3Rpb24pKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgJKHJldmlzaW9u
IDE4MDcyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlw
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01Miw4ICs1Miw5IEBAIHN0YXRpYyBjb25zdCBTcGVjdWxh
dGVkVHlwZSBTcGVjVWludDMyQXIKIHN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjRmxv
YXQzMkFycmF5ICAgICAgID0gMHgwMDAwMDQwMDsgLy8gSXQncyBkZWZpbml0ZWx5IGFuIFVpbnQx
NkFycmF5IG9yIG9uZSBvZiBpdHMgc3ViY2xhc3Nlcy4KIHN0YXRpYyBjb25zdCBTcGVjdWxhdGVk
VHlwZSBTcGVjRmxvYXQ2NEFycmF5ICAgICAgID0gMHgwMDAwMDgwMDsgLy8gSXQncyBkZWZpbml0
ZWx5IGFuIFVpbnQxNkFycmF5IG9yIG9uZSBvZiBpdHMgc3ViY2xhc3Nlcy4KIHN0YXRpYyBjb25z
dCBTcGVjdWxhdGVkVHlwZSBTcGVjVHlwZWRBcnJheVZpZXcgICAgID0gU3BlY0ludDhBcnJheSB8
IFNwZWNJbnQxNkFycmF5IHwgU3BlY0ludDMyQXJyYXkgfCBTcGVjVWludDhBcnJheSB8IFNwZWNV
aW50OENsYW1wZWRBcnJheSB8IFNwZWNVaW50MTZBcnJheSB8IFNwZWNVaW50MzJBcnJheSB8IFNw
ZWNGbG9hdDMyQXJyYXkgfCBTcGVjRmxvYXQ2NEFycmF5Owotc3RhdGljIGNvbnN0IFNwZWN1bGF0
ZWRUeXBlIFNwZWNBcmd1bWVudHMgICAgICAgICAgPSAweDAwMDAxMDAwOyAvLyBJdCdzIGRlZmlu
aXRlbHkgYW4gQXJndW1lbnRzIG9iamVjdC4KLXN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBT
cGVjU3RyaW5nT2JqZWN0ICAgICAgID0gMHgwMDAwMjAwMDsgLy8gSXQncyBkZWZpbml0ZWx5IGEg
U3RyaW5nT2JqZWN0Lgorc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNEaXJlY3RBcmd1
bWVudHMgICAgPSAweDAwMDAxMDAwOyAvLyBJdCdzIGRlZmluaXRlbHkgYSBEaXJlY3RBcmd1bWVu
dHMgb2JqZWN0Lgorc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNTY29wZWRBcmd1bWVu
dHMgICAgPSAweDAwMDAyMDAwOyAvLyBJdCdzIGRlZmluaXRlbHkgYSBTY29wZWRBcmd1bWVudHMg
b2JqZWN0Lgorc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNTdHJpbmdPYmplY3QgICAg
ICAgPSAweDAwMDA0MDAwOyAvLyBJdCdzIGRlZmluaXRlbHkgYSBTdHJpbmdPYmplY3QuCiBzdGF0
aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY09iamVjdE90aGVyICAgICAgICA9IDB4MDAwMDgw
MDA7IC8vIEl0J3MgZGVmaW5pdGVseSBhbiBvYmplY3QgYnV0IG5vdCBKU0ZpbmFsT2JqZWN0LCBK
U0FycmF5LCBvciBKU0Z1bmN0aW9uLgogc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNP
YmplY3QgICAgICAgICAgICAgPSAweDAwMDBmZmZmOyAvLyBCaXRtYXNrIHVzZWQgZm9yIHRlc3Rp
bmcgZm9yIGFueSBraW5kIG9mIG9iamVjdCBwcmVkaWN0aW9uLgogc3RhdGljIGNvbnN0IFNwZWN1
bGF0ZWRUeXBlIFNwZWNTdHJpbmdJZGVudCAgICAgICAgPSAweDAwMDEwMDAwOyAvLyBJdCdzIGRl
ZmluaXRlbHkgYSBKU1N0cmluZywgYW5kIGl0J3MgYW4gaWRlbnRpZmllci4KQEAgLTE5Myw5ICsx
OTQsMTQgQEAgaW5saW5lIGJvb2wgaXNGbG9hdDY0QXJyYXlTcGVjdWxhdGlvbihTcAogICAgIHJl
dHVybiB2YWx1ZSA9PSBTcGVjRmxvYXQ2NEFycmF5OwogfQogCi1pbmxpbmUgYm9vbCBpc0FyZ3Vt
ZW50c1NwZWN1bGF0aW9uKFNwZWN1bGF0ZWRUeXBlIHZhbHVlKQoraW5saW5lIGJvb2wgaXNEaXJl
Y3RBcmd1bWVudHNTcGVjdWxhdGlvbihTcGVjdWxhdGVkVHlwZSB2YWx1ZSkKIHsKLSAgICByZXR1
cm4gISF2YWx1ZSAmJiAodmFsdWUgJiBTcGVjQXJndW1lbnRzKSA9PSB2YWx1ZTsKKyAgICByZXR1
cm4gdmFsdWUgPT0gU3BlY0RpcmVjdEFyZ3VtZW50czsKK30KKworaW5saW5lIGJvb2wgaXNTY29w
ZWRBcmd1bWVudHNTcGVjdWxhdGlvbihTcGVjdWxhdGVkVHlwZSB2YWx1ZSkKK3sKKyAgICByZXR1
cm4gdmFsdWUgPT0gU3BlY1Njb3BlZEFyZ3VtZW50czsKIH0KIAogaW5saW5lIGJvb2wgaXNBY3Rp
b25hYmxlSW50TXV0YWJsZUFycmF5U3BlY3VsYXRpb24oU3BlY3VsYXRlZFR5cGUgdmFsdWUpCkBA
IC0yMjQsMTMgKzIzMCwxNCBAQCBpbmxpbmUgYm9vbCBpc0FjdGlvbmFibGVUeXBlZE11dGFibGVB
cnJhCiBpbmxpbmUgYm9vbCBpc0FjdGlvbmFibGVNdXRhYmxlQXJyYXlTcGVjdWxhdGlvbihTcGVj
dWxhdGVkVHlwZSB2YWx1ZSkKIHsKICAgICByZXR1cm4gaXNBcnJheVNwZWN1bGF0aW9uKHZhbHVl
KQotICAgICAgICB8fCBpc0FyZ3VtZW50c1NwZWN1bGF0aW9uKHZhbHVlKQogICAgICAgICB8fCBp
c0FjdGlvbmFibGVUeXBlZE11dGFibGVBcnJheVNwZWN1bGF0aW9uKHZhbHVlKTsKIH0KIAogaW5s
aW5lIGJvb2wgaXNBY3Rpb25hYmxlQXJyYXlTcGVjdWxhdGlvbihTcGVjdWxhdGVkVHlwZSB2YWx1
ZSkKIHsKICAgICByZXR1cm4gaXNTdHJpbmdTcGVjdWxhdGlvbih2YWx1ZSkKKyAgICAgICAgfHwg
aXNEaXJlY3RBcmd1bWVudHNTcGVjdWxhdGlvbih2YWx1ZSkKKyAgICAgICAgfHwgaXNTY29wZWRB
cmd1bWVudHNTcGVjdWxhdGlvbih2YWx1ZSkKICAgICAgICAgfHwgaXNBY3Rpb25hYmxlTXV0YWJs
ZUFycmF5U3BlY3VsYXRpb24odmFsdWUpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkocmV2
aXNpb24gMTgwNzIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRl
Y29kZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzLDYgKzYzLDIwIEBAIFBhcnNl
ckVycm9yIEJ5dGVjb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZSgKICAgICBTYW1wbGluZ1JlZ2lvbiBz
YW1wbGluZ1JlZ2lvbigiQnl0ZWNvZGUgR2VuZXJhdGlvbiIpOwogICAgIAogICAgIG1fY29kZUJs
b2NrLT5zZXRUaGlzUmVnaXN0ZXIobV90aGlzUmVnaXN0ZXIudmlydHVhbFJlZ2lzdGVyKCkpOwor
ICAgIAorICAgIC8vIElmIHdlIGhhdmUgZGVjbGFyZWQgYSB2YXJpYWJsZSBuYW1lZCAiYXJndW1l
bnRzIiBhbmQgd2UgYXJlIHVzaW5nIGFyZ3VtZW50cyB0aGVuIHdlIHNob3VsZAorICAgIC8vIHBl
cmZvcm0gdGhhdCBhc3NpZ25tZW50IG5vdy4KKyAgICBpZiAobV9uZWVkVG9Jbml0aWFsaXplQXJn
dW1lbnRzKQorICAgICAgICBpbml0aWFsaXplVmFyaWFibGUodmFyaWFibGUocHJvcGVydHlOYW1l
cygpLmFyZ3VtZW50cyksIG1fYXJndW1lbnRzUmVnaXN0ZXIpOworICAgIAorICAgIHsKKyAgICAg
ICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHRlbXAgPSBuZXdUZW1wb3JhcnkoKTsKKyAgICAgICAgZm9y
IChGdW5jdGlvbkJvZHlOb2RlKiBmdW5jdGlvbkJvZHkgOiBtX2Z1bmN0aW9uc1RvSW5pdGlhbGl6
ZSkgeworICAgICAgICAgICAgZW1pdE5ld0Z1bmN0aW9uKHRlbXAuZ2V0KCksIGZ1bmN0aW9uQm9k
eSk7CisgICAgICAgICAgICBpbml0aWFsaXplVmFyaWFibGUodmFyaWFibGUoZnVuY3Rpb25Cb2R5
LT5pZGVudCgpKSwgdGVtcC5nZXQoKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgCiAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBtX2RlY29uc3RydWN0ZWRQYXJhbWV0ZXJzLnNpemUoKTsgaSsr
KSB7CiAgICAgICAgIGF1dG8mIGVudHJ5ID0gbV9kZWNvbnN0cnVjdGVkUGFyYW1ldGVyc1tpXTsK
ICAgICAgICAgZW50cnkuc2Vjb25kLT5iaW5kVmFsdWUoKnRoaXMsIGVudHJ5LmZpcnN0LmdldCgp
KTsKQEAgLTExNiwzOCArMTMwLDEzIEBAIFBhcnNlckVycm9yIEJ5dGVjb2RlR2VuZXJhdG9yOjpn
ZW5lcmF0ZSgKICAgICBtX2NvZGVCbG9jay0+c2hyaW5rVG9GaXQoKTsKIAogICAgIGlmIChtX2Nv
ZGVCbG9jay0+c3ltYm9sVGFibGUoKSAmJiAhbV9jb2RlQmxvY2stPnZtKCktPnR5cGVQcm9maWxl
cigpKQotICAgICAgICBtX2NvZGVCbG9jay0+c2V0U3ltYm9sVGFibGUobV9jb2RlQmxvY2stPnN5
bWJvbFRhYmxlKCktPmNsb25lQ2FwdHVyZWROYW1lcygqbV9jb2RlQmxvY2stPnZtKCkpKTsKKyAg
ICAgICAgbV9jb2RlQmxvY2stPnNldFN5bWJvbFRhYmxlKG1fY29kZUJsb2NrLT5zeW1ib2xUYWJs
ZSgpLT5jbG9uZUlnbm9yaW5nU3RhY2soKm1fY29kZUJsb2NrLT52bSgpKSk7CiAKICAgICBpZiAo
bV9leHByZXNzaW9uVG9vRGVlcCkKICAgICAgICAgcmV0dXJuIFBhcnNlckVycm9yKFBhcnNlckVy
cm9yOjpPdXRPZk1lbW9yeSk7CiAgICAgcmV0dXJuIFBhcnNlckVycm9yKFBhcnNlckVycm9yOjpF
cnJvck5vbmUpOwogfQogCi1SZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6YWRkVmFyKAot
ICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBDb25zdGFudE1vZGUgY29uc3RhbnRNb2RlLCBX
YXRjaE1vZGUgd2F0Y2hNb2RlKQotewotICAgIEFTU0VSVChzdGF0aWNfY2FzdDxzaXplX3Q+KG1f
Y29kZUJsb2NrLT5tX251bVZhcnMpID09IG1fY2FsbGVlUmVnaXN0ZXJzLnNpemUoKSk7Ci0gICAg
Ci0gICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIoc3ltYm9sVGFibGUoKS5tX2xvY2spOwot
ICAgIGludCBpbmRleCA9IHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKG1fY2FsbGVlUmVnaXN0ZXJz
LnNpemUoKSkub2Zmc2V0KCk7Ci0gICAgU3ltYm9sVGFibGVFbnRyeSBuZXdFbnRyeShpbmRleCwg
Y29uc3RhbnRNb2RlID09IElzQ29uc3RhbnQgPyBSZWFkT25seSA6IDApOwotICAgIFN5bWJvbFRh
YmxlOjpNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBzeW1ib2xUYWJsZSgpLmFkZChsb2NrZXIsIGlk
ZW50LmltcGwoKSwgbmV3RW50cnkpOwotCi0gICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkKLSAg
ICAgICAgcmV0dXJuICZyZWdpc3RlckZvcihyZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmdldEluZGV4
KCkpOwotICAgIAotICAgIGlmICh3YXRjaE1vZGUgPT0gSXNXYXRjaGFibGUpIHsKLSAgICAgICAg
d2hpbGUgKG1fd2F0Y2hhYmxlVmFyaWFibGVzLnNpemUoKSA8IHN0YXRpY19jYXN0PHNpemVfdD4o
bV9jb2RlQmxvY2stPm1fbnVtVmFycykpCi0gICAgICAgICAgICBtX3dhdGNoYWJsZVZhcmlhYmxl
cy5hcHBlbmQoSWRlbnRpZmllcigpKTsKLSAgICAgICAgbV93YXRjaGFibGVWYXJpYWJsZXMuYXBw
ZW5kKGlkZW50KTsKLSAgICB9Ci0gICAgCi0gICAgUmVnaXN0ZXJJRCogcmVnSUQgPSBhZGRWYXIo
KTsKLSAgICBBU1NFUlQod2F0Y2hNb2RlID09IE5vdFdhdGNoYWJsZSB8fCBzdGF0aWNfY2FzdDxz
aXplX3Q+KG1fY29kZUJsb2NrLT5tX251bVZhcnMpID09IG1fd2F0Y2hhYmxlVmFyaWFibGVzLnNp
emUoKSk7Ci0gICAgCi0gICAgcmV0dXJuIHJlZ0lEOwotfQotCiBCeXRlY29kZUdlbmVyYXRvcjo6
Qnl0ZWNvZGVHZW5lcmF0b3IoVk0mIHZtLCBQcm9ncmFtTm9kZSogcHJvZ3JhbU5vZGUsIFVubGlu
a2VkUHJvZ3JhbUNvZGVCbG9jayogY29kZUJsb2NrLCBEZWJ1Z2dlck1vZGUgZGVidWdnZXJNb2Rl
LCBQcm9maWxlck1vZGUgcHJvZmlsZXJNb2RlKQogICAgIDogbV9zaG91bGRFbWl0RGVidWdIb29r
cyhPcHRpb25zOjpmb3JjZURlYnVnZ2VyQnl0ZWNvZGVHZW5lcmF0aW9uKCkgfHwgZGVidWdnZXJN
b2RlID09IERlYnVnZ2VyT24pCiAgICAgLCBtX3Nob3VsZEVtaXRQcm9maWxlSG9va3MoT3B0aW9u
czo6Zm9yY2VQcm9maWxlckJ5dGVjb2RlR2VuZXJhdGlvbigpIHx8IHByb2ZpbGVyTW9kZSA9PSBQ
cm9maWxlck9uKQpAQCAtMTg5LDcgKzE3OCw3IEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29k
ZUdlbmVyYXRvcihWTSYKIHsKICAgICBpZiAobV9pc0J1aWx0aW5GdW5jdGlvbikKICAgICAgICAg
bV9zaG91bGRFbWl0RGVidWdIb29rcyA9IGZhbHNlOwotCisgICAgCiAgICAgbV9zeW1ib2xUYWJs
ZS0+c2V0VXNlc05vblN0cmljdEV2YWwoY29kZUJsb2NrLT51c2VzRXZhbCgpICYmICFjb2RlQmxv
Y2stPmlzU3RyaWN0TW9kZSgpKTsKICAgICBWZWN0b3I8SWRlbnRpZmllcj4gYm91bmRQYXJhbWV0
ZXJQcm9wZXJ0aWVzOwogICAgIEZ1bmN0aW9uUGFyYW1ldGVycyYgcGFyYW1ldGVycyA9ICpmdW5j
dGlvbk5vZGUtPnBhcmFtZXRlcnMoKTsKQEAgLTIwMiwxMCArMTkxLDIwIEBAIEJ5dGVjb2RlR2Vu
ZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihWTSYKICAgICB9CiAgICAgbV9zeW1ib2xUYWJsZS0+
c2V0UGFyYW1ldGVyQ291bnRJbmNsdWRpbmdUaGlzKGZ1bmN0aW9uTm9kZS0+cGFyYW1ldGVycygp
LT5zaXplKCkgKyAxKTsKIAorICAgIGJvb2wgc2hvdWxkQ2FwdHVyZUFsbFRoZVRoaW5ncyA9IG1f
c2hvdWxkRW1pdERlYnVnSG9va3MgfHwgY29kZUJsb2NrLT51c2VzRXZhbCgpOworICAgIGF1dG8g
Y2FwdHVyZXMgPSBbJl0gKFN0cmluZ0ltcGwqIHVpZCkgLT4gYm9vbCB7CisgICAgICAgIHJldHVy
biBzaG91bGRDYXB0dXJlQWxsVGhlVGhpbmdzIHx8IGZ1bmN0aW9uTm9kZS0+Y2FwdHVyZXModWlk
KTsKKyAgICB9OworICAgIGF1dG8gdmFyS2luZCA9IFsmXSAoU3RyaW5nSW1wbCogdWlkKSAtPiBW
YXJLaW5kIHsKKyAgICAgICAgcmV0dXJuIGNhcHR1cmVzKHVpZCkgPyBTY29wZVZhcktpbmQgOiBT
dGFja1ZhcktpbmQ7CisgICAgfQorCiAgICAgZW1pdE9wY29kZShvcF9lbnRlcik7CiAKICAgICBh
bGxvY2F0ZUFuZEVtaXRTY29wZSgpOwogICAgIAorICAgIG1fY2FsbGVlUmVnaXN0ZXIuc2V0SW5k
ZXgoSlNTdGFjazo6Q2FsbGVlKTsKKyAgICAKICAgICBpZiAoZnVuY3Rpb25OYW1lSXNJblNjb3Bl
KGZ1bmN0aW9uTm9kZS0+aWRlbnQoKSwgZnVuY3Rpb25Ob2RlLT5mdW5jdGlvbk1vZGUoKSkKICAg
ICAgICAgJiYgZnVuY3Rpb25OYW1lU2NvcGVJc0R5bmFtaWMoY29kZUJsb2NrLT51c2VzRXZhbCgp
LCBjb2RlQmxvY2stPmlzU3RyaWN0TW9kZSgpKSkgewogICAgICAgICAvLyBXaGVuIHdlIGRvIHRo
aXMsIHdlIHNob3VsZCBtYWtlIG91ciBsb2NhbCBzY29wZSBzdGFjayBrbm93IGFib3V0IHRoZSBm
dW5jdGlvbiBuYW1lIHN5bWJvbApAQCAtMjE0LDkgKzIxMyw3IEBAIEJ5dGVjb2RlR2VuZXJhdG9y
OjpCeXRlY29kZUdlbmVyYXRvcihWTSYKICAgICAgICAgLy8gQWxzbywgd2UgY291bGQgY3JlYXRl
IHRoZSBzY29wZSBvbmNlIHBlciBKU0Z1bmN0aW9uIGluc3RhbmNlIHRoYXQgbmVlZHMgaXQuIFRo
YXQgd291bGRuJ3QKICAgICAgICAgLy8gYmUgYW55IG1vcmUgY29ycmVjdCwgYnV0IGl0IHdvdWxk
IGJlIG1vcmUgcGVyZm9ybWFudC4KICAgICAgICAgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDE4ODcKLSAgICAgICAgUmVnaXN0ZXJJRCBjYWxsZWVS
ZWdpc3RlcjsKLSAgICAgICAgY2FsbGVlUmVnaXN0ZXIuc2V0SW5kZXgoSlNTdGFjazo6Q2FsbGVl
KTsKLSAgICAgICAgZW1pdFB1c2hGdW5jdGlvbk5hbWVTY29wZShtX3Njb3BlUmVnaXN0ZXIsIGZ1
bmN0aW9uTm9kZS0+aWRlbnQoKSwgJmNhbGxlZVJlZ2lzdGVyLCBSZWFkT25seSB8IERvbnREZWxl
dGUpOworICAgICAgICBlbWl0UHVzaEZ1bmN0aW9uTmFtZVNjb3BlKG1fc2NvcGVSZWdpc3Rlciwg
ZnVuY3Rpb25Ob2RlLT5pZGVudCgpLCAmbV9jYWxsZWVSZWdpc3RlciwgUmVhZE9ubHkgfCBEb250
RGVsZXRlKTsKICAgICB9CiAKICAgICBpZiAobV9jb2RlQmxvY2stPm5lZWRzRnVsbFNjb3BlQ2hh
aW4oKSB8fCBtX3Nob3VsZEVtaXREZWJ1Z0hvb2tzKSB7CkBAIC0yMjYsMTc5ICsyMjMsMjI1IEBA
IEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihWTSYKICAgICAgICAgaW5zdHJ1
Y3Rpb25zKCkuYXBwZW5kKG1fbGV4aWNhbEVudmlyb25tZW50UmVnaXN0ZXItPmluZGV4KCkpOwog
ICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoc2NvcGVSZWdpc3RlcigpLT5pbmRleCgpKTsK
ICAgICB9Ci0gICAgUmVnaXN0ZXJJRCogbG9jYWxBcmd1bWVudHNSZWdpc3RlciA9IG51bGxwdHI7
Ci0gICAgUmVnaXN0ZXJJRCogc2NyYXRjaCA9IGFkZFZhcigpOwotICAgIG1fc3ltYm9sVGFibGUt
PnNldENhcHR1cmVTdGFydCh2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChtX2NvZGVCbG9jay0+bV9u
dW1WYXJzKS5vZmZzZXQoKSk7Ci0KLSAgICBpZiAoZnVuY3Rpb25Ob2RlLT51c2VzQXJndW1lbnRz
KCkgfHwgY29kZUJsb2NrLT51c2VzRXZhbCgpKSB7IC8vIE1heSByZWlmeSBhcmd1bWVudHMgb2Jq
ZWN0LgotICAgICAgICBSZWdpc3RlcklEKiB1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIgPSBh
ZGRWYXIoKTsgLy8gQW5vbnltb3VzLCBzbyBpdCBjYW4ndCBiZSBtb2RpZmllZCBieSB1c2VyIGNv
ZGUuCi0gICAgICAgIFJlZ2lzdGVySUQqIGFyZ3VtZW50c1JlZ2lzdGVyID0gYWRkVmFyKHByb3Bl
cnR5TmFtZXMoKS5hcmd1bWVudHMsIElzVmFyaWFibGUsIE5vdFdhdGNoYWJsZSk7IC8vIENhbiBi
ZSBjaGFuZ2VkIGJ5IGFzc2lnbmluZyB0byAnYXJndW1lbnRzJy4KLQotICAgICAgICBsb2NhbEFy
Z3VtZW50c1JlZ2lzdGVyID0gYXJndW1lbnRzUmVnaXN0ZXI7Ci0KLSAgICAgICAgLy8gV2UgY2Fu
IHNhdmUgYSBsaXR0bGUgc3BhY2UgYnkgaGFyZC1jb2RpbmcgdGhlIGtub3dsZWRnZSB0aGF0IHRo
ZSB0d28KLSAgICAgICAgLy8gJ2FyZ3VtZW50cycgdmFsdWVzIGFyZSBzdG9yZWQgaW4gY29uc2Vj
dXRpdmUgcmVnaXN0ZXJzLCBhbmQgc3RvcmluZwotICAgICAgICAvLyBvbmx5IHRoZSBpbmRleCBv
ZiB0aGUgYXNzaWduYWJsZSBvbmUuCi0gICAgICAgIGNvZGVCbG9jay0+c2V0QXJndW1lbnRzUmVn
aXN0ZXIoYXJndW1lbnRzUmVnaXN0ZXItPnZpcnR1YWxSZWdpc3RlcigpKTsKLSAgICAgICAgQVNT
RVJUX1VOVVNFRCh1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIsIHVubW9kaWZpZWRBcmd1bWVu
dHNSZWdpc3Rlci0+dmlydHVhbFJlZ2lzdGVyKCkgPT0gSlNDOjp1bm1vZGlmaWVkQXJndW1lbnRz
UmVnaXN0ZXIoY29kZUJsb2NrLT5hcmd1bWVudHNSZWdpc3RlcigpKSk7Ci0KLSAgICAgICAgZW1p
dEluaXRMYXp5UmVnaXN0ZXIoYXJndW1lbnRzUmVnaXN0ZXIpOwotICAgICAgICBlbWl0SW5pdExh
enlSZWdpc3Rlcih1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIpOwotICAgICAgICAKLSAgICAg
ICAgaWYgKHNob3VsZENyZWF0ZUFyZ3VtZW50c0VhZ2VybHkoKSB8fCBzaG91bGRUZWFyT2ZmQXJn
dW1lbnRzRWFnZXJseSgpKSB7Ci0gICAgICAgICAgICBlbWl0T3Bjb2RlKG9wX2NyZWF0ZV9hcmd1
bWVudHMpOwotICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGFyZ3VtZW50c1JlZ2lz
dGVyLT5pbmRleCgpKTsKLSAgICAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChtX2NvZGVC
bG9jay0+YWN0aXZhdGlvblJlZ2lzdGVyKCkub2Zmc2V0KCkpOwotCi0gICAgICAgICAgICBpZiAo
bV9jb2RlQmxvY2stPmhhc0FjdGl2YXRpb25SZWdpc3RlcigpKSB7Ci0gICAgICAgICAgICAgICAg
UmVnaXN0ZXJJRCogYXJndW1lbnRzUmVnaXN0ZXIgPSAmcmVnaXN0ZXJGb3IobV9jb2RlQmxvY2st
PmFyZ3VtZW50c1JlZ2lzdGVyKCkub2Zmc2V0KCkpOwotICAgICAgICAgICAgICAgIGluaXRpYWxp
emVDYXB0dXJlZFZhcmlhYmxlKGFyZ3VtZW50c1JlZ2lzdGVyLCBwcm9wZXJ0eU5hbWVzKCkuYXJn
dW1lbnRzLCBhcmd1bWVudHNSZWdpc3Rlcik7Ci0gICAgICAgICAgICAgICAgUmVnaXN0ZXJJRCog
dW5jaGVja2VkQXJndW1lbnRzUmVnaXN0ZXIgPSAmcmVnaXN0ZXJGb3IoSlNDOjp1bm1vZGlmaWVk
QXJndW1lbnRzUmVnaXN0ZXIobV9jb2RlQmxvY2stPmFyZ3VtZW50c1JlZ2lzdGVyKCkpLm9mZnNl
dCgpKTsKLSAgICAgICAgICAgICAgICBpbml0aWFsaXplQ2FwdHVyZWRWYXJpYWJsZSh1bmNoZWNr
ZWRBcmd1bWVudHNSZWdpc3RlciwgcHJvcGVydHlOYW1lcygpLmFyZ3VtZW50cywgdW5jaGVja2Vk
QXJndW1lbnRzUmVnaXN0ZXIpOwotICAgICAgICAgICAgICAgIGlmIChmdW5jdGlvbk5vZGUtPm1v
ZGlmaWVzQXJndW1lbnRzKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgZW1pdE9wY29kZShvcF9t
b3YpOwotICAgICAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYXJndW1lbnRz
UmVnaXN0ZXItPmluZGV4KCkpOwotICAgICAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbnMoKS5h
cHBlbmQoYWRkQ29uc3RhbnRWYWx1ZShqc1VuZGVmaW5lZCgpKS0+aW5kZXgoKSk7Ci0gICAgICAg
ICAgICAgICAgICAgIGVtaXRPcGNvZGUob3BfbW92KTsKLSAgICAgICAgICAgICAgICAgICAgaW5z
dHJ1Y3Rpb25zKCkuYXBwZW5kKHVuY2hlY2tlZEFyZ3VtZW50c1JlZ2lzdGVyLT5pbmRleCgpKTsK
LSAgICAgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGFkZENvbnN0YW50VmFs
dWUoanNVbmRlZmluZWQoKSktPmluZGV4KCkpOwotICAgICAgICAgICAgICAgICAgICBsb2NhbEFy
Z3VtZW50c1JlZ2lzdGVyID0gbnVsbHB0cjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KKyAgICAKKyAgICAvLyBNYWtlIHN1cmUgdGhlIGNvZGUgYmxvY2sga25v
d3MgYWJvdXQgYWxsIG9mIG91ciBwYXJhbWV0ZXJzLCBhbmQgbWFrZSBzdXJlIHRoYXQgcGFyYW1l
dGVycworICAgIC8vIG5lZWRpbmcgZGVjb25zdHJ1Y3Rpb24gYXJlIG5vdGVkLgorICAgIG1fcGFy
YW1ldGVycy5ncm93KHBhcmFtZXRlcnMuc2l6ZSgpICsgMSk7IC8vIHJlc2VydmUgc3BhY2UgZm9y
ICJ0aGlzIgorICAgIGluaXRpYWxpemVOZXh0UGFyYW1ldGVyKCk7IC8vIHRoaXMKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgcGFyYW1ldGVycy5zaXplKCk7ICsraSkgeworICAgICAgICBh
dXRvIHBhdHRlcm4gPSBwYXJhbWV0ZXJzLmF0KGkpOworICAgICAgICBSZWdpc3RlcklEKiByZWcg
PSBpbml0aWFsaXplTmV4dFBhcmFtZXRlcigpOworICAgICAgICBpZiAoIXBhdHRlcm4tPmlzQmlu
ZGluZ05vZGUoKSkKKyAgICAgICAgICAgIG1fZGVjb25zdHJ1Y3RlZFBhcmFtZXRlcnMuYXBwZW5k
KHN0ZDo6bWFrZV9wYWlyKHJlZywgcGF0dGVybikpOwogICAgIH0KLQotICAgIGJvb2wgc2hvdWxk
Q2FwdHVyZUFsbFRoZVRoaW5ncyA9IG1fc2hvdWxkRW1pdERlYnVnSG9va3MgfHwgY29kZUJsb2Nr
LT51c2VzRXZhbCgpOwotCisgICAgCisgICAgLy8gRmlndXJlIG91dCBzb21lIGludGVyZXN0aW5n
IGZhY3RzIGFib3V0IG91ciBhcmd1bWVudHMuCiAgICAgYm9vbCBjYXB0dXJlc0FueUFyZ3VtZW50
QnlOYW1lID0gZmFsc2U7Ci0gICAgVmVjdG9yPFJlZ2lzdGVySUQqLCAwLCBVbnNhZmVWZWN0b3JP
dmVyZmxvdz4gY2FwdHVyZWRBcmd1bWVudHM7Ci0gICAgaWYgKGZ1bmN0aW9uTm9kZS0+aGFzQ2Fw
dHVyZWRWYXJpYWJsZXMoKSB8fCBzaG91bGRDYXB0dXJlQWxsVGhlVGhpbmdzKSB7CisgICAgaWYg
KGZ1bmN0aW9uTm9kZS0+aGFzQ2FwdHVyZWRWYXJpYWJsZXMoKSkgewogICAgICAgICBGdW5jdGlv
blBhcmFtZXRlcnMmIHBhcmFtZXRlcnMgPSAqZnVuY3Rpb25Ob2RlLT5wYXJhbWV0ZXJzKCk7Ci0g
ICAgICAgIGNhcHR1cmVkQXJndW1lbnRzLnJlc2l6ZShwYXJhbWV0ZXJzLnNpemUoKSk7CiAgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcGFyYW1ldGVycy5zaXplKCk7ICsraSkgewotICAg
ICAgICAgICAgY2FwdHVyZWRBcmd1bWVudHNbaV0gPSAwOwogICAgICAgICAgICAgYXV0byBwYXR0
ZXJuID0gcGFyYW1ldGVycy5hdChpKTsKICAgICAgICAgICAgIGlmICghcGF0dGVybi0+aXNCaW5k
aW5nTm9kZSgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgY29uc3Qg
SWRlbnRpZmllciYgaWRlbnQgPSBzdGF0aWNfY2FzdDxjb25zdCBCaW5kaW5nTm9kZSo+KHBhdHRl
cm4pLT5ib3VuZFByb3BlcnR5KCk7Ci0gICAgICAgICAgICBpZiAoIWZ1bmN0aW9uTm9kZS0+Y2Fw
dHVyZXMoaWRlbnQpICYmICFzaG91bGRDYXB0dXJlQWxsVGhlVGhpbmdzKQotICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgY2FwdHVyZXNBbnlBcmd1bWVudEJ5TmFtZSA9IHRy
dWU7Ci0gICAgICAgICAgICBjYXB0dXJlZEFyZ3VtZW50c1tpXSA9IGFkZFZhcihpZGVudCwgSXNW
YXJpYWJsZSwgSXNXYXRjaGFibGUpOworICAgICAgICAgICAgY2FwdHVyZXNBbnlBcmd1bWVudEJ5
TmFtZSB8PSBjYXB0dXJlcyhpZGVudC5pbXBsKCkpOwogICAgICAgICB9CiAgICAgfQogCi0gICAg
aWYgKGNhcHR1cmVzQW55QXJndW1lbnRCeU5hbWUgJiYgIXNob3VsZFRlYXJPZmZBcmd1bWVudHNF
YWdlcmx5KCkpIHsKLSAgICAgICAgc2l6ZV90IHBhcmFtZXRlckNvdW50ID0gbV9zeW1ib2xUYWJs
ZS0+cGFyYW1ldGVyQ291bnQoKTsKLSAgICAgICAgYXV0byBzbG93QXJndW1lbnRzID0gc3RkOjpt
YWtlX3VuaXF1ZTxTbG93QXJndW1lbnRbXT4ocGFyYW1ldGVyQ291bnQpOwotICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IHBhcmFtZXRlckNvdW50OyArK2kpIHsKLSAgICAgICAgICAgIGlm
ICghY2FwdHVyZWRBcmd1bWVudHNbaV0pIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQoc2xvd0Fy
Z3VtZW50c1tpXS5zdGF0dXMgPT0gU2xvd0FyZ3VtZW50OjpOb3JtYWwpOwotICAgICAgICAgICAg
ICAgIHNsb3dBcmd1bWVudHNbaV0uaW5kZXggPSBDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0KGkp
OwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
c2xvd0FyZ3VtZW50c1tpXS5zdGF0dXMgPSBTbG93QXJndW1lbnQ6OkNhcHR1cmVkOwotICAgICAg
ICAgICAgc2xvd0FyZ3VtZW50c1tpXS5pbmRleCA9IGNhcHR1cmVkQXJndW1lbnRzW2ldLT5pbmRl
eCgpOwotICAgICAgICB9Ci0gICAgICAgIG1fc3ltYm9sVGFibGUtPnNldFNsb3dBcmd1bWVudHMo
V1RGOjptb3ZlKHNsb3dBcmd1bWVudHMpKTsKLSAgICB9Ci0KLSAgICBSZWdpc3RlcklEKiBjYWxs
ZWVSZWdpc3RlciA9IHJlc29sdmVDYWxsZWUoZnVuY3Rpb25Ob2RlKTsgLy8gTWF5IHB1c2ggdG8g
dGhlIHNjb3BlIGNoYWluIGFuZC9vciBhZGQgYSBjYXB0dXJlZCB2YXIuCi0KLSAgICBjb25zdCBE
ZWNsYXJhdGlvblN0YWNrczo6RnVuY3Rpb25TdGFjayYgZnVuY3Rpb25TdGFjayA9IGZ1bmN0aW9u
Tm9kZS0+ZnVuY3Rpb25TdGFjaygpOwotICAgIGNvbnN0IERlY2xhcmF0aW9uU3RhY2tzOjpWYXJT
dGFjayYgdmFyU3RhY2sgPSBmdW5jdGlvbk5vZGUtPnZhclN0YWNrKCk7Ci0gICAgSWRlbnRpZmll
clNldCB0ZXN0OwotCi0gICAgLy8gQ2FwdHVyZWQgdmFyaWFibGVzIGFuZCBmdW5jdGlvbnMgZ28g
Zmlyc3Qgc28gdGhhdCBhY3RpdmF0aW9ucyBkb24ndCBoYXZlCi0gICAgLy8gdG8gc3RlcCBvdmVy
IHRoZSBub24tY2FwdHVyZWQgbG9jYWxzIHRvIG1hcmsgdGhlbS4KLSAgICBpZiAoZnVuY3Rpb25O
b2RlLT5oYXNDYXB0dXJlZFZhcmlhYmxlcygpIHx8IHNob3VsZENhcHR1cmVBbGxUaGVUaGluZ3Mp
IHsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBib3VuZFBhcmFtZXRlclByb3BlcnRp
ZXMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0g
Ym91bmRQYXJhbWV0ZXJQcm9wZXJ0aWVzW2ldOwotICAgICAgICAgICAgaWYgKGZ1bmN0aW9uTm9k
ZS0+Y2FwdHVyZXMoaWRlbnQpIHx8IHNob3VsZENhcHR1cmVBbGxUaGVUaGluZ3MpCi0gICAgICAg
ICAgICAgICAgYWRkVmFyKGlkZW50LCBJc1ZhcmlhYmxlLCBJc1dhdGNoYWJsZSk7Ci0gICAgICAg
IH0KLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmdW5jdGlvblN0YWNrLnNpemUoKTsg
KytpKSB7Ci0gICAgICAgICAgICBGdW5jdGlvbkJvZHlOb2RlKiBmdW5jdGlvbiA9IGZ1bmN0aW9u
U3RhY2tbaV07Ci0gICAgICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGZ1bmN0aW9u
LT5pZGVudCgpOwotICAgICAgICAgICAgaWYgKGZ1bmN0aW9uTm9kZS0+Y2FwdHVyZXMoaWRlbnQp
IHx8IHNob3VsZENhcHR1cmVBbGxUaGVUaGluZ3MpIHsKLSAgICAgICAgICAgICAgICBtX2Z1bmN0
aW9ucy5hZGQoaWRlbnQuaW1wbCgpKTsKLSAgICAgICAgICAgICAgICBlbWl0TmV3RnVuY3Rpb24o
c2NyYXRjaCwgZnVuY3Rpb24pOwotICAgICAgICAgICAgICAgIGluaXRpYWxpemVDYXB0dXJlZFZh
cmlhYmxlKGFkZFZhcihpZGVudCwgSXNWYXJpYWJsZSwgSXNXYXRjaGFibGUpLCBpZGVudCwgc2Ny
YXRjaCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCB2YXJTdGFjay5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgY29uc3QgSWRlbnRp
ZmllciYgaWRlbnQgPSB2YXJTdGFja1tpXS5maXJzdDsKLSAgICAgICAgICAgIGlmIChmdW5jdGlv
bk5vZGUtPmNhcHR1cmVzKGlkZW50KSB8fCBzaG91bGRDYXB0dXJlQWxsVGhlVGhpbmdzKQotICAg
ICAgICAgICAgICAgIGFkZFZhcihpZGVudCwgKHZhclN0YWNrW2ldLnNlY29uZCAmIERlY2xhcmF0
aW9uU3RhY2tzOjpJc0NvbnN0YW50KSA/IElzQ29uc3RhbnQgOiBJc1ZhcmlhYmxlLCBJc1dhdGNo
YWJsZSk7Ci0gICAgICAgIH0KKyAgICBpZiAoY2FwdHVyZXNBbnlBcmd1bWVudEJ5TmFtZSkKKyAg
ICAgICAgQVNTRVJUKG1fbGV4aWNhbEVudmlyb25tZW50UmVnaXN0ZXIpOworICAgIAorICAgIC8v
IE5lZWQgdG8ga25vdyB3aGF0IG91ciBmdW5jdGlvbnMgYXJlIGNhbGxlZC4gUGFyYW1ldGVycyBo
YXZlIHNvbWUgZ29vZnkgYmVoYXZpb3JzIHdoZW4gaXQKKyAgICAvLyBjb21lcyB0byBmdW5jdGlv
bnMgb2YgdGhlIHNhbWUgbmFtZS4KKyAgICBmb3IgKEZ1bmN0aW9uQm9keU5vZGUqIGZ1bmN0aW9u
IDogZnVuY3Rpb25Ob2RlLT5mdW5jdGlvblN0YWNrKCkpCisgICAgICAgIG1fZnVuY3Rpb25zLmFk
ZChmdW5jdGlvbi0+aWRlbnQoKS5pbXBsKCkpOworICAgIAorICAgIGJvb2wgbmVlZHNBcmd1bWVu
dHMgPSBmdW5jdGlvbk5vZGUtPnVzZXNBcmd1bWVudHMoKSB8fCBjb2RlQmxvY2stPnVzZXNFdmFs
KCk7CisgICAgCisgICAgaWYgKG5lZWRzQXJndW1lbnRzKSB7CisgICAgICAgIC8vIENyZWF0ZSB0
aGUgYXJndW1lbnRzIG9iamVjdCBub3cuIFdlIG1heSBwdXQgdGhlIGFyZ3VtZW50cyBvYmplY3Qg
aW50byB0aGUgYWN0aXZhdGlvbiBpZgorICAgICAgICAvLyBpdCBpcyBjYXB0dXJlZC4gRWl0aGVy
IHdheSwgd2UgY3JlYXRlIHR3byBhcmd1bWVudHMgb2JqZWN0IHZhcmlhYmxlczogb25lIGlzIG91
cgorICAgICAgICAvLyBwcml2YXRlIHZhcmlhYmxlIHRoYXQgaXMgaW1tdXRhYmxlLCBhbmQgYW5v
dGhlciB0aGF0IGlzIHRoZSB1c2VyLXZpc2libGUgdmFyaWFibGUuIFRoZQorICAgICAgICAvLyBp
bW11dGFibGUgb25lIGlzIG9ubHkgdXNlZCBoZXJlLCBvciBkdXJpbmcgZm9ybWFsIHBhcmFtZXRl
ciByZXNvbHV0aW9ucyBpZiB3ZSBvcHQgZm9yCisgICAgICAgIC8vIERpcmVjdEFyZ3VtZW50cy4K
KyAgICAgICAgCisgICAgICAgIG1fYXJndW1lbnRzUmVnaXN0ZXIgPSBhZGRWYXIoKTsKKyAgICAg
ICAgbV9hcmd1bWVudHNSZWdpc3Rlci0+cmVmKCk7CiAgICAgfQotCi0gICAgbV9zeW1ib2xUYWJs
ZS0+c2V0Q2FwdHVyZUVuZCh2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChjb2RlQmxvY2stPm1fbnVt
VmFycykub2Zmc2V0KCkpOwotCi0gICAgYm9vbCBjYW5MYXppbHlDcmVhdGVGdW5jdGlvbnMgPSAh
ZnVuY3Rpb25Ob2RlLT5uZWVkc0FjdGl2YXRpb25Gb3JNb3JlVGhhblZhcmlhYmxlcygpICYmICFt
X3Nob3VsZEVtaXREZWJ1Z0hvb2tzICYmICFtX3ZtLT50eXBlUHJvZmlsZXIoKSAmJiAhbV92bS0+
Y29udHJvbEZsb3dQcm9maWxlcigpOwotICAgIG1fZmlyc3RMYXp5RnVuY3Rpb24gPSBjb2RlQmxv
Y2stPm1fbnVtVmFyczsKLSAgICBpZiAoIXNob3VsZENhcHR1cmVBbGxUaGVUaGluZ3MpIHsKLSAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmdW5jdGlvblN0YWNrLnNpemUoKTsgKytpKSB7
Ci0gICAgICAgICAgICBGdW5jdGlvbkJvZHlOb2RlKiBmdW5jdGlvbiA9IGZ1bmN0aW9uU3RhY2tb
aV07Ci0gICAgICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGZ1bmN0aW9uLT5pZGVu
dCgpOwotICAgICAgICAgICAgaWYgKCFmdW5jdGlvbk5vZGUtPmNhcHR1cmVzKGlkZW50KSkgewot
ICAgICAgICAgICAgICAgIG1fZnVuY3Rpb25zLmFkZChpZGVudC5pbXBsKCkpOwotICAgICAgICAg
ICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiByZWcgPSBhZGRWYXIoaWRlbnQsIElzVmFyaWFibGUs
IE5vdFdhdGNoYWJsZSk7Ci0gICAgICAgICAgICAgICAgLy8gRG9uJ3QgbGF6aWx5IGNyZWF0ZSBm
dW5jdGlvbnMgdGhhdCBvdmVycmlkZSB0aGUgbmFtZSAnYXJndW1lbnRzJwotICAgICAgICAgICAg
ICAgIC8vIGFzIHRoaXMgd291bGQgY29tcGxpY2F0ZSBsYXp5IGluc3RhbnRpYXRpb24gb2YgYWN0
dWFsIGFyZ3VtZW50cy4KLSAgICAgICAgICAgICAgICBpZiAoIWNhbkxhemlseUNyZWF0ZUZ1bmN0
aW9ucyB8fCBpZGVudCA9PSBwcm9wZXJ0eU5hbWVzKCkuYXJndW1lbnRzKQotICAgICAgICAgICAg
ICAgICAgICBlbWl0TmV3RnVuY3Rpb24ocmVnLmdldCgpLCBmdW5jdGlvbik7Ci0gICAgICAgICAg
ICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGVtaXRJbml0TGF6eVJlZ2lzdGVyKHJl
Zy5nZXQoKSk7Ci0gICAgICAgICAgICAgICAgICAgIG1fbGF6eUZ1bmN0aW9ucy5zZXQocmVnLT52
aXJ0dWFsUmVnaXN0ZXIoKS50b0xvY2FsKCksIGZ1bmN0aW9uKTsKKyAgICAKKyAgICBpZiAobmVl
ZHNBcmd1bWVudHMgJiYgIWNvZGVCbG9jay0+aXNTdHJpY3RNb2RlKCkpIHsKKyAgICAgICAgLy8g
SWYgd2UgY2FwdHVyZWQgYW55IGZvcm1hbCBwYXJhbWV0ZXIgYnkgbmFtZSwgdGhlbiB3ZSB1c2Ug
U2NvcGVkQXJndW1lbnRzLiBPdGhlcndpc2Ugd2UKKyAgICAgICAgLy8gdXNlIERpcmVjdEFyZ3Vt
ZW50cy4gV2l0aCBTY29wZWRBcmd1bWVudHMsIHdlIGxpZnQgYWxsIG9mIG91ciBhcmd1bWVudHMg
aW50byB0aGUKKyAgICAgICAgLy8gYWN0aXZhdGlvbi4KKyAgICAgICAgCisgICAgICAgIGlmIChj
YXB0dXJlc0FueUFyZ3VtZW50QnlOYW1lKSB7CisgICAgICAgICAgICBtX3N5bWJvbFRhYmxlLT5z
ZXRBcmd1bWVudHNMZW5ndGgodm0sIHBhcmFtZXRlcnMuc2l6ZSgpKTsKKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgLy8gRm9yIGVhY2ggcGFyYW1ldGVyLCB3ZSBoYXZlIHR3byBwb3NzaWJpbGl0
aWVzOgorICAgICAgICAgICAgLy8gRWl0aGVyIGl0J3MgYSBiaW5kaW5nIG5vZGUgd2l0aCBubyBm
dW5jdGlvbiBvdmVybGFwLCBpbiB3aGljaCBjYXNlIGl0IGdldHMgYSBuYW1lCisgICAgICAgICAg
ICAvLyBpbiB0aGUgc3ltYm9sIHRhYmxlIC0gb3IgaXQganVzdCBnZXRzIHNwYWNlIHJlc2VydmVk
IGluIHRoZSBzeW1ib2wgdGFibGUuIEVpdGhlcgorICAgICAgICAgICAgLy8gd2F5IHdlIGxpZnQg
dGhlIHZhbHVlIGludG8gdGhlIHNjb3BlLgorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHBhcmFtZXRlcnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBTY29wZU9m
ZnNldCBvZmZzZXQgPSBtX3N5bWJvbFRhYmxlLT50YWtlTmV4dFNjb3BlT2Zmc2V0KCk7CisgICAg
ICAgICAgICAgICAgaWYgKFN0cmluZ0ltcGwqIG5hbWUgPSB2aXNpYmxlTmFtZUZvclBhcmFtZXRl
cihwYXJhbWV0ZXJzLmF0KGkpKSkgeworICAgICAgICAgICAgICAgICAgICBTeW1ib2xUYWJsZUVu
dHJ5IGVudHJ5KG9mZnNldCk7CisgICAgICAgICAgICAgICAgICAgIC8vIFN0b3JlcyB0byB0aGVz
ZSB2YXJpYWJsZXMgdmlhIHRoZSBTY29wZWRBcmd1bWVudHMgb2JqZWN0IHdpbGwgbm90IGRvCisg
ICAgICAgICAgICAgICAgICAgIC8vIG5vdGlmeVdyaXRlKCksIHNpbmNlIHRoYXQgd291bGQgYmUg
Y3VtYmVyc29tZS4gQWxzbywgd2F0Y2hpbmcgZm9ybWFsCisgICAgICAgICAgICAgICAgICAgIC8v
IHBhcmFtZXRlcnMgd2hlbiAiYXJndW1lbnRzIiBpcyBpbiBwbGF5IGlzIHVubGlrZWx5IHRvIGJl
IHN1cGVyIHByb2ZpdGFibGUuCisgICAgICAgICAgICAgICAgICAgIC8vIFNvLCB3ZSBqdXN0IGRp
c2FibGUgaXQuCisgICAgICAgICAgICAgICAgICAgIGVudHJ5LmRpc2FibGVXYXRjaGluZygpOwor
ICAgICAgICAgICAgICAgICAgICBtX3N5bWJvbFRhYmxlLT5zZXQobmFtZSwgb2Zmc2V0KTsKICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYWRkT3Bjb2RlKG9wX3B1dF90b19zY29w
ZSk7CisgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKG1fbGV4aWNhbEVudmly
b25tZW50UmVnaXN0ZXItPmluZGV4KCkpOworICAgICAgICAgICAgICAgIGluc3RydWN0aW9ucygp
LmFwcGVuZChVSU5UX01BWCk7CisgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5k
KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDEgKyBpKS5vZmZzZXQoKSk7CisgICAgICAgICAg
ICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKFJlc29sdmVNb2RlQW5kVHlwZShUaHJvd0lmTm90
Rm91bmQsIExvY2FsQ2xvc3VyZVZhcikpOworICAgICAgICAgICAgICAgIGluc3RydWN0aW9ucygp
LmFwcGVuZCgwKTsKKyAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQob2Zmc2V0
Lm9mZnNldCgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8g
VGhpcyBjcmVhdGVzIGEgc2NvcGVkIGFyZ3VtZW50cyBvYmplY3QgYW5kIGNvcGllcyB0aGUgb3Zl
cmZsb3cgYXJndW1lbnRzIGludG8gdGhlCisgICAgICAgICAgICAvLyBzY29wZS4gSXQncyB0aGUg
ZXF1aXZhbGVudCBvZiBjYWxsaW5nIFNjb3BlZEFyZ3VtZW50czo6Y3JlYXRlQnlDb3B5aW5nKCku
CisgICAgICAgICAgICBlbWl0T3Bjb2RlKG9wX2NyZWF0ZV9zY29wZWRfYXJndW1lbnRzKTsKKyAg
ICAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChtX2FyZ3VtZW50c1JlZ2lzdGVyLT5pbmRl
eCgpKTsKKyAgICAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChtX2xleGljYWxFbnZpcm9u
bWVudFJlZ2lzdGVyLT5pbmRleCgpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8v
IFdlJ3JlIGdvaW5nIHRvIHB1dCBhbGwgcGFyYW1ldGVycyBpbnRvIHRoZSBEaXJlY3RBcmd1bWVu
dHMgb2JqZWN0LiBGaXJzdCBlbnN1cmUKKyAgICAgICAgICAgIC8vIHRoYXQgdGhlIHN5bWJvbCB0
YWJsZSBrbm93cyB0aGF0IHRoaXMgaXMgaGFwcGVuaW5nLgorICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHBhcmFtZXRlcnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgICAg
ICBpZiAoU3RyaW5nSW1wbCogbmFtZSA9IHZpc2libGVOYW1lRm9yUGFyYW1ldGVyKHBhcmFtZXRl
cnMuYXQoaSkpKQorICAgICAgICAgICAgICAgICAgICBtX3N5bWJvbFRhYmxlLT5zZXQobmFtZSwg
Q2FwdHVyZWRBcmd1bWVudHNPZmZzZXQoaSkpOwogICAgICAgICAgICAgfQorICAgICAgICAgICAg
CisgICAgICAgICAgICBlbWl0T3Bjb2RlKG9wX2NyZWF0ZV9kaXJlY3RfYXJndW1lbnRzKTsKKyAg
ICAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChtX2FyZ3VtZW50c1JlZ2lzdGVyLT5pbmRl
eCgpKTsKICAgICAgICAgfQotICAgICAgICBtX2xhc3RMYXp5RnVuY3Rpb24gPSBjYW5MYXppbHlD
cmVhdGVGdW5jdGlvbnMgPyBjb2RlQmxvY2stPm1fbnVtVmFycyA6IG1fZmlyc3RMYXp5RnVuY3Rp
b247Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYm91bmRQYXJhbWV0ZXJQcm9wZXJ0
aWVzLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9
IGJvdW5kUGFyYW1ldGVyUHJvcGVydGllc1tpXTsKLSAgICAgICAgICAgIGlmICghZnVuY3Rpb25O
b2RlLT5jYXB0dXJlcyhpZGVudCkpCi0gICAgICAgICAgICAgICAgYWRkVmFyKGlkZW50LCBJc1Zh
cmlhYmxlLCBJc1dhdGNoYWJsZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gQ3JlYXRlIHRo
ZSBmb3JtYWwgcGFyYW1ldGVycyB0aGUgbm9ybWFsIHdheS4gQW55IG9mIHRoZW0gY291bGQgYmUg
Y2FwdHVyZWQsIG9yIG5vdC4gSWYKKyAgICAgICAgLy8gY2FwdHVyZWQsIGxpZnQgdGhlbSBpbnRv
IHRoZSBzY29wZS4KKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBhcmFtZXRlcnMu
c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIFN0cmluZ0ltcGwqIG5hbWUgPSB2aXNpYmxlTmFt
ZUZvclBhcmFtZXRlcihwYXJhbWV0ZXJzLmF0KGkpKTsKKyAgICAgICAgICAgIGlmICghbmFtZSkK
KyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYg
KCFjYXB0dXJlcyhuYW1lKSkgeworICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIGVhc3kg
Y2FzZSAtIGp1c3QgdGVsbCB0aGUgc3ltYm9sIHRhYmxlIGFib3V0IHRoZSBhcmd1bWVudC4gSXQg
d2lsbAorICAgICAgICAgICAgICAgIC8vIGJlIGFjY2Vzc2VkIGRpcmVjdGx5LgorICAgICAgICAg
ICAgICAgIG1fc3ltYm9sVGFibGUtPnNldChuYW1lLCB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVu
dCgxICsgaSkpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgCisgICAgICAgICAgICBTY29wZU9mZnNldCBvZmZzZXQgPSBtX3N5bWJvbFRhYmxl
LT50YWtlTmV4dFNjb3BlT2Zmc2V0KCk7CisgICAgICAgICAgICBJZGVudGlmaWVyJiBpZGVudCA9
CisgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Y29uc3QgQmluZGluZ05vZGUqPihwYXJhbWV0
ZXJzLmF0KGkpKS0+Ym91bmRQcm9wZXJ0eSgpOworICAgICAgICAgICAgbV9zeW1ib2xUYWJsZS0+
c2V0KG5hbWUsIG9mZnNldCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGFkZE9wY29kZShv
cF9wdXRfdG9fc2NvcGUpOworICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKG1fbGV4
aWNhbEVudmlyb25tZW50UmVnaXN0ZXItPmluZGV4KCkpOworICAgICAgICAgICAgaW5zdHJ1Y3Rp
b25zKCkuYXBwZW5kKGFkZENvbnN0YW50KGlkZW50KSk7CisgICAgICAgICAgICBpbnN0cnVjdGlv
bnMoKS5hcHBlbmQoJnJlZ2lzdGVyRm9yKHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDEgKyBp
KSkpOworICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKFJlc29sdmVNb2RlQW5kVHlw
ZShUaHJvd0lmTm90Rm91bmQsIExvY2FsQ2xvc3VyZVZhcikpOworICAgICAgICAgICAgaW5zdHJ1
Y3Rpb25zKCkuYXBwZW5kKDApOworICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKG9m
ZnNldC5vZmZzZXQoKSk7CiAgICAgICAgIH0KLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCB2YXJTdGFjay5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgY29uc3QgSWRlbnRpZmllciYg
aWRlbnQgPSB2YXJTdGFja1tpXS5maXJzdDsKLSAgICAgICAgICAgIGlmICghZnVuY3Rpb25Ob2Rl
LT5jYXB0dXJlcyhpZGVudCkpCi0gICAgICAgICAgICAgICAgYWRkVmFyKGlkZW50LCAodmFyU3Rh
Y2tbaV0uc2Vjb25kICYgRGVjbGFyYXRpb25TdGFja3M6OklzQ29uc3RhbnQpID8gSXNDb25zdGFu
dCA6IElzVmFyaWFibGUsIE5vdFdhdGNoYWJsZSk7CisgICAgfQorICAgIAorICAgIGlmIChuZWVk
c0FyZ3VtZW50cyAmJiBjb2RlQmxvY2stPmlzU3RyaWN0TW9kZSgpKSB7CisgICAgICAgIC8vIEFs
bG9jYXRlIGFuIG91dC1vZi1iYW5kcyBhcmd1bWVudHMgb2JqZWN0LgorICAgICAgICBhZGRPcGNv
ZGUob3BfY3JlYXRlX291dF9vZl9iYW5kX2FyZ3VtZW50cyk7CisgICAgICAgIGluc3RydWN0aW9u
cygpLmFwcGVuZChtX2FyZ3VlbnRzUmVnaXN0ZXItPmluZGV4KCkpOworICAgIH0KKyAgICAKKyAg
ICAvLyBOb3cgZGVjbGFyZSBhbGwgdmFyaWFibGVzLgorICAgIGZvciAoY29uc3QgSWRlbnRpZmll
ciYgaWRlbnQgOiBib3VuZFBhcmFtZXRlclByb3BlcnRpZXMpCisgICAgICAgIGNyZWF0ZVZhcmlh
YmxlKGlkZW50LCB2YXJLaW5kKGlkZW50LmltcGwoKSksIElzVmFyaWFibGUpOworICAgIGZvciAo
RnVuY3Rpb25Cb2R5Tm9kZSogZnVuY3Rpb24gOiBmdW5jdGlvbk5vZGUtPmZ1bmN0aW9uU3RhY2so
KSkgeworICAgICAgICBjcmVhdGVWYXJpYWJsZShkZW50LCB2YXJLaW5kKGlkZW50LmltcGwoKSks
IElzVmFyaWFibGUpOworICAgICAgICBtX2Z1bmN0aW9uc1RvSW5pdGlhbGl6ZS5hcHBlbmQoZnVu
Y3Rpb24pOworICAgIH0KKyAgICBmb3IgKGF1dG8mIGVudHJ5IDogZnVuY3Rpb25Ob2RlLT52YXJT
dGFjaygpKSB7CisgICAgICAgIGNyZWF0ZVZhcmlhYmxlKAorICAgICAgICAgICAgZW50cnkuZmly
c3QsIHZhcktpbmQoZW50cnkuZmlyc3QuaW1wbCgpKSwKKyAgICAgICAgICAgIChlbnRyeS5zZWNv
bmQgJiBEZWNsYXJhdGlvblN0YWNrczo6SXNDb25zdGFudCkgPyBJc0NvbnN0YW50IDogSXNWYXJp
YWJsZSk7CisgICAgfQorICAgIAorICAgIC8vIFRoZXJlIGFyZSBzb21lIHZhcmlhYmxlcyB0aGF0
IG5lZWQgdG8gYmUgcHJlaW5pdGlhbGl6ZWQgdG8gc29tZXRoaW5nIG90aGVyIHRoYW4gVW5kZWZp
bmVkOgorICAgIC8vCisgICAgLy8gLSAiYXJndW1lbnRzIjogdW5sZXNzIGl0J3MgdXNlZCBhcyBh
IGZ1bmN0aW9uIG9yIHBhcmFtZXRlciwgdGhpcyBzaG91bGQgcmVmZXIgdG8gdGhlCisgICAgLy8g
ICBhcmd1bWVudHMgb2JqZWN0LgorICAgIC8vCisgICAgLy8gLSBjYWxsZWU6IHVubGVzcyBpdCdz
IHVzZWQgYXMgYSB2YXIsIGZ1bmN0aW9uLCBvciBwYXJhbWV0ZXIsIHRoaXMgc2hvdWxkIHJlZmVy
IHRvIHRoZQorICAgIC8vICAgY2FsbGVlIChpLmUuIG91ciBmdW5jdGlvbikuCisgICAgLy8KKyAg
ICAvLyAtIGZ1bmN0aW9uczogdGhlc2UgYWx3YXlzIG92ZXJyaWRlIGV2ZXJ5dGhpbmcgZWxzZS4K
KyAgICAvLworICAgIC8vIFRoZSBtb3N0IGxvZ2ljYWwgd2F5IHRvIGRvIGFsbCBvZiB0aGlzIGlz
IHRvIGluaXRpYWxpemUgbm9uZSBvZiB0aGUgdmFyaWFibGVzIHVudGlsIG5vdywKKyAgICAvLyBh
bmQgdGhlbiBpbml0aWFsaXplIHRoZW0gaW4gQnl0ZWNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlKCkg
aW4gc3VjaCBhbiBvcmRlciB0aGF0IHRoZSBydWxlcworICAgIC8vIGZvciBob3cgdGhlc2UgdGhp
bmdzIG92ZXJyaWRlIGVhY2ggb3RoZXIgZW5kIHVwIGhvbGRpbmcuIFdlIHdvdWxkIGluaXRpYWxp
emUgdGhlIGNhbGxlZQorICAgIC8vIGZpcnN0LCB0aGVuICJhcmd1bWVudHMiLCB0aGVuIGFsbCBh
cmd1bWVudHMsIHRoZW4gdGhlIGZ1bmN0aW9ucy4KKyAgICAvLworICAgIC8vIEJ1dCBzb21lIGFy
Z3VtZW50cyBhcmUgYWxyZWFkeSBpbml0aWFsaXplZCBieSBkZWZhdWx0LCBzaW5jZSBpZiB0aGV5
IGFyZW4ndCBjYXB0dXJlZCBhbmQgd2UKKyAgICAvLyBkb24ndCBoYXZlICJhcmd1bWVudHMiIHRo
ZW4gd2UganVzdCBwb2ludCB0aGUgc3ltYm9sIHRhYmxlIGF0IHRoZSBzdGFjayBzbG90IG9mIHRo
b3NlCisgICAgLy8gYXJndW1lbnRzLiBXZSBlbmQgdXAgaW5pdGlhbGl6aW5nIHRoZSByZXN0IG9m
IHRoZSBhcmd1bWVudHMgdGhhdCBoYXZlIGFuIHVuY29tcGxpY2F0ZWQKKyAgICAvLyBiaW5kaW5n
IChpLmUuIGRvbid0IGludm9sdmUgZGVjb25zdHJ1Y3Rpb24pIGFib3ZlIHdoZW4gZmlndXJpbmcg
b3V0IGhvdyB0byBsYXkgdGhlbSBvdXQsCisgICAgLy8gYmVjYXVzZSB0aGF0J3MganVzdCB0aGUg
c2ltcGxlc3QgdGhpbmcuIFRoaXMgbWVhbnMgdGhhdCB3aGVuIHdlIGluaXRpYWxpemUgdGhlbSwg
d2UgaGF2ZSB0bworICAgIC8vIHdhdGNoIG91dCBmb3IgdGhlIHRoaW5ncyB0aGF0IG92ZXJyaWRl
IGFyZ3VtZW50cyAobmFtZWx5LCBmdW5jdGlvbnMpLgorICAgIC8vCisgICAgLy8gV2UgYWxzbyBp
bml0aWFsaXplIGNhbGxlZSBoZXJlIGFzIHdlbGwsIGp1c3QgYmVjYXVzZSBpdCdzIHNvIHdlaXJk
LiBXZSBrbm93IHdoZXRoZXIgd2Ugd2FudAorICAgIC8vIHRvIGRvIHRoaXMgYmVjYXVzZSB3ZSBj
YW4ganVzdCBjaGVjayBpZiBpdCdzIGluIHRoZSBzeW1ib2wgdGFibGUuCisgICAgaWYgKGZ1bmN0
aW9uTmFtZUlzSW5TY29wZShmdW5jdGlvbk5vZGUtPmlkZW50KCksIGZ1bmN0aW9uTm9kZS0+ZnVu
Y3Rpb25Nb2RlKCkpCisgICAgICAgICYmICFmdW5jdGlvbk5hbWVTY29wZUlzRHluYW1pYyhjb2Rl
QmxvY2stPnVzZXNFdmFsKCksIGNvZGVCbG9jay0+aXNTdHJpY3RNb2RlKCkpCisgICAgICAgICYm
IG1fc3ltYm9sVGFibGUtPmdldChmdW5jdGlvbk5vZGUtPmlkZW50KCkpLmlzTnVsbCgpKSB7Cisg
ICAgICAgIGlmIChjYXB0dXJlcyhmdW5jdGlvbk5vZGUtPmlkZW50KCkuaW1wbCgpKSkgeworICAg
ICAgICAgICAgU2NvcGVPZmZzZXQgb2Zmc2V0ID0gbV9zeW1ib2xUYWJsZS0+dGFrZU5leHRTY29w
ZU9mZnNldCgpOworICAgICAgICAgICAgbV9zeW1ib2xUYWJsZS0+YWRkKAorICAgICAgICAgICAg
ICAgIGZ1bmN0aW9uTm9kZS0+aWRlbnQoKS5pbXBsKCksCisgICAgICAgICAgICAgICAgU3ltYm9s
VGFibGVFbnRyeShWYXJPZmZzZXQob2Zmc2V0KSwgUmVhZE9ubHkpKTsKKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgYWRkT3Bjb2RlKG9wX3B1dF90b19zY29wZSk7CisgICAgICAgICAgICBpbnN0
cnVjdGlvbnMoKS5hcHBlbmQobV9sZXhpY2FsRW52aXJvbm1lbnRSZWdpc3Rlci0+aW5kZXgoKSk7
CisgICAgICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYWRkQ29uc3RhbnQoZnVuY3Rpb25O
b2RlLT5pZGVudCgpKSk7CisgICAgICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQobV9jYWxs
ZWVSZWdpc3Rlci5pbmRleCgpKTsKKyAgICAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChS
ZXNvbHZlTW9kZUFuZFR5cGUoVGhyb3dJZk5vdEZvdW5kLCBMb2NhbENsb3N1cmVWYXIpKTsKKyAg
ICAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCgwKTsKKyAgICAgICAgICAgIGluc3RydWN0
aW9ucygpLmFwcGVuZChvZmZzZXQub2Zmc2V0KCkpOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgbV9zeW1ib2xUYWJsZS0+YWRkKAorICAgICAgICAgICAgICAgIGZ1bmN0aW9uTm9kZS0+
aWRlbnQoKS5pbXBsKCksCisgICAgICAgICAgICAgICAgU3ltYm9sVGFibGVFbnRyeShWYXJPZmZz
ZXQobV9jYWxsZWVSZWdpc3Rlci52aXJ0dWFsUmVnaXN0ZXIoKSksIFJlYWRPbmx5KSk7CiAgICAg
ICAgIH0KICAgICB9Ci0KLSAgICBpZiAobV9zeW1ib2xUYWJsZS0+Y2FwdHVyZUNvdW50KCkpCi0g
ICAgICAgIGVtaXRPcGNvZGUob3BfdG91Y2hfZW50cnkpOwogICAgIAotICAgIG1fcGFyYW1ldGVy
cy5ncm93KHBhcmFtZXRlcnMuc2l6ZSgpICsgMSk7IC8vIHJlc2VydmUgc3BhY2UgZm9yICJ0aGlz
IgotCi0gICAgLy8gQWRkICJ0aGlzIiBhcyBhIHBhcmFtZXRlcgotICAgIGludCBuZXh0UGFyYW1l
dGVySW5kZXggPSBDYWxsRnJhbWU6OnRoaXNBcmd1bWVudE9mZnNldCgpOwotICAgIG1fdGhpc1Jl
Z2lzdGVyLnNldEluZGV4KG5leHRQYXJhbWV0ZXJJbmRleCsrKTsKLSAgICBtX2NvZGVCbG9jay0+
YWRkUGFyYW1ldGVyKCk7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBhcmFtZXRlcnMu
c2l6ZSgpOyArK2ksICsrbmV4dFBhcmFtZXRlckluZGV4KSB7Ci0gICAgICAgIGludCBpbmRleCA9
IG5leHRQYXJhbWV0ZXJJbmRleDsKLSAgICAgICAgYXV0byBwYXR0ZXJuID0gcGFyYW1ldGVycy5h
dChpKTsKLSAgICAgICAgaWYgKCFwYXR0ZXJuLT5pc0JpbmRpbmdOb2RlKCkpIHsKLSAgICAgICAg
ICAgIG1fY29kZUJsb2NrLT5hZGRQYXJhbWV0ZXIoKTsKLSAgICAgICAgICAgIFJlZ2lzdGVySUQm
IHBhcmFtZXRlciA9IHJlZ2lzdGVyRm9yKGluZGV4KTsKLSAgICAgICAgICAgIHBhcmFtZXRlci5z
ZXRJbmRleChpbmRleCk7Ci0gICAgICAgICAgICBtX2RlY29uc3RydWN0ZWRQYXJhbWV0ZXJzLmFw
cGVuZChzdGQ6Om1ha2VfcGFpcigmcGFyYW1ldGVyLCBwYXR0ZXJuKSk7Ci0gICAgICAgICAgICBj
b250aW51ZTsKKyAgICAvLyBUaGlzIGlzIG91ciBmaW5hbCBhY3Qgb2Ygd2VpcmRuZXNzLiAiYXJn
dW1lbnRzIiBpcyBvdmVycmlkZGVuIGJ5IGV2ZXJ5dGhpbmcgZXhjZXB0IHRoZQorICAgIC8vIGNh
bGxlZS4gV2UgYWRkIGl0IHRvIHRoZSBzeW1ib2wgdGFibGUgaWYgaXQncyBub3QgYWxyZWFkeSB0
aGVyZSBhbmQgaXQncyBub3QgYW4gYXJndW1lbnQuCisgICAgaWYgKG5lZWRzQXJndW1lbnRzKSB7
CisgICAgICAgIC8vIElmICJhcmd1bWVudHMiIGlzIG92ZXJyaWRkZW4gYnkgYSBmdW5jdGlvbiBv
ciBkZWNvbnN0cnVjdGVkIHBhcmFtZXRlciBuYW1lLCB0aGVuIGl0J3MKKyAgICAgICAgLy8gT0sg
Zm9yIHVzIHRvIGNhbGwgY3JlYXRlVmFyaWFibGUoKSBiZWNhdXNlIGl0IHdvbid0IGNoYW5nZSBh
bnl0aGluZy4gSXQncyBhbHNvIE9LIGZvcgorICAgICAgICAvLyB1cyB0byB0aGVtIHRlbGwgQnl0
ZWNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlKCkgdG8gd3JpdGUgdG8gaXQgYmVjYXVzZSBpdCB3aWxs
IGRvIHNvCisgICAgICAgIC8vIGJlZm9yZSBpdCBpbml0aWFsaXplcyBmdW5jdGlvbnMgYW5kIGRl
Y29uc3RydWN0ZWQgcGFyYW1ldGVycy4gQnV0IGlmICJhcmd1bWVudHMiIGlzCisgICAgICAgIC8v
IG92ZXJyaWRkZW4gYnkgYSAic2ltcGxlIiBmdW5jdGlvbiBwYXJhbWV0ZXIsIHRoZW4gd2UgaGF2
ZSB0byBiYWlsOiBjcmVhdGVWYXJpYWJsZSgpCisgICAgICAgIC8vIHdvdWxkIGFzc2VydCBhbmQg
Qnl0ZWNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlKCkgd291bGQgd3JpdGUgdGhlICJhcmd1bWVudHMi
IGFmdGVyIHRoZQorICAgICAgICAvLyBhcmd1bWVudCB2YWx1ZSBoYWQgYWxyZWFkeSBiZWVuIHBy
b3Blcmx5IGluaXRpYWxpemVkLgorICAgICAgICAKKyAgICAgICAgYm9vbCBoYXZlUGFyYW1ldGVy
TmFtZWRBcmd1bWVudHMgPSBmYWxzZTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHBhcmFtZXRlcnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIFN0cmluZ0ltcGwqIG5hbWUg
PSB2aXNpYmxlTmFtZUZvclBhcmFtZXRlcihwYXJhbWV0ZXJzLmF0KGkpKTsKKyAgICAgICAgICAg
IGlmIChuYW1lID09IHByb3BlcnR5TmFtZXMoKS5hcmd1bWVudHMuaW1wbCgpKSB7CisgICAgICAg
ICAgICAgICAgaGF2ZVBhcmFtZXRlck5hbWVkQXJndW1lbnRzID0gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBhdXRvIHNpbXBs
ZVBhcmFtZXRlciA9IHN0YXRpY19jYXN0PGNvbnN0IEJpbmRpbmdOb2RlKj4ocGF0dGVybik7Ci0g
ICAgICAgIGlmIChjYXB0dXJlZEFyZ3VtZW50cy5zaXplKCkgJiYgY2FwdHVyZWRBcmd1bWVudHNb
aV0pIHsKLSAgICAgICAgICAgIEFTU0VSVCgoZnVuY3Rpb25Ob2RlLT5oYXNDYXB0dXJlZFZhcmlh
YmxlcygpICYmIGZ1bmN0aW9uTm9kZS0+Y2FwdHVyZXMoc2ltcGxlUGFyYW1ldGVyLT5ib3VuZFBy
b3BlcnR5KCkpKSB8fCBzaG91bGRDYXB0dXJlQWxsVGhlVGhpbmdzKTsKLSAgICAgICAgICAgIGlu
ZGV4ID0gY2FwdHVyZWRBcmd1bWVudHNbaV0tPmluZGV4KCk7Ci0gICAgICAgICAgICBSZWdpc3Rl
cklEIG9yaWdpbmFsKG5leHRQYXJhbWV0ZXJJbmRleCk7Ci0gICAgICAgICAgICBpbml0aWFsaXpl
Q2FwdHVyZWRWYXJpYWJsZShjYXB0dXJlZEFyZ3VtZW50c1tpXSwgc2ltcGxlUGFyYW1ldGVyLT5i
b3VuZFByb3BlcnR5KCksICZvcmlnaW5hbCk7CisgICAgICAgIAorICAgICAgICBpZiAoIWhhdmVQ
YXJhbWV0ZXJOYW1lZEFyZ3VtZW50cykgeworICAgICAgICAgICAgY3JlYXRlVmFyaWFibGUoCisg
ICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lcygpLmFyZ3VtZW50cywgdmFyS2luZChwcm9wZXJ0
eU5hbWVzKCkuYXJndW1lbnRzLmltcGwoKSksIElzVmFyaWFibGUpOworICAgICAgICAgICAgbV9u
ZWVkVG9Jbml0aWFsaXplQXJndW1lbnRzID0gdHJ1ZTsKICAgICAgICAgfQotICAgICAgICBhZGRQ
YXJhbWV0ZXIoc2ltcGxlUGFyYW1ldGVyLT5ib3VuZFByb3BlcnR5KCksIGluZGV4KTsKICAgICB9
Ci0KLSAgICAvLyBXZSBkZWNsYXJlIHRoZSBjYWxsZWUncyBuYW1lIGxhc3QgYmVjYXVzZSBpdCBz
aG91bGQgbG9zZSB0byBhIHZhciwgZnVuY3Rpb24sIGFuZC9vciBwYXJhbWV0ZXIgZGVjbGFyYXRp
b24uCi0gICAgYWRkQ2FsbGVlKGZ1bmN0aW9uTm9kZSwgY2FsbGVlUmVnaXN0ZXIpOworICAgIAor
ICAgIGlmIChtX3N5bWJvbFRhYmxlLT5zY29wZVNpemUoKSkKKyAgICAgICAgZW1pdE9wY29kZShv
cF90b3VjaF9lbnRyeSk7CiAKICAgICBpZiAoaXNDb25zdHJ1Y3RvcigpKSB7CiAgICAgICAgIGVt
aXRDcmVhdGVUaGlzKCZtX3RoaXNSZWdpc3Rlcik7CkBAIC00MDksNyArNDUyLDYgQEAgQnl0ZWNv
ZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFZNJgogICAgICAgICBpbnN0cnVjdGlvbnMo
KS5hcHBlbmQoMCk7CiAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCgwKTsKICAgICB9Ci0g
ICAgbV9sb2NhbEFyZ3VtZW50c1JlZ2lzdGVyID0gbG9jYWxBcmd1bWVudHNSZWdpc3RlcjsKIH0K
IAogQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFZNJiB2bSwgRXZhbE5vZGUq
IGV2YWxOb2RlLCBVbmxpbmtlZEV2YWxDb2RlQmxvY2sqIGNvZGVCbG9jaywgRGVidWdnZXJNb2Rl
IGRlYnVnZ2VyTW9kZSwgUHJvZmlsZXJNb2RlIHByb2ZpbGVyTW9kZSkKQEAgLTQ0OCw2NyArNDkw
LDIyIEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjp+Qnl0ZWNvZGVHZW5lcmF0b3IoKQogewogfQogCi1S
ZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEluaXRMYXp5UmVnaXN0ZXIoUmVnaXN0
ZXJJRCogcmVnKQotewotICAgIGVtaXRPcGNvZGUob3BfaW5pdF9sYXp5X3JlZyk7Ci0gICAgaW5z
dHJ1Y3Rpb25zKCkuYXBwZW5kKHJlZy0+aW5kZXgoKSk7Ci0gICAgQVNTRVJUKCFoYXNXYXRjaGFi
bGVWYXJpYWJsZShyZWctPmluZGV4KCkpKTsKLSAgICByZXR1cm4gcmVnOwotfQotCi1SZWdpc3Rl
cklEKiBCeXRlY29kZUdlbmVyYXRvcjo6aW5pdGlhbGl6ZUNhcHR1cmVkVmFyaWFibGUoUmVnaXN0
ZXJJRCogZHN0LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFJlZ2lzdGVySUQqIHZh
bHVlKQorUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmluaXRpYWxpemVOZXh0UGFyYW1l
dGVyKCkKIHsKLQotICAgIG1fY29kZUJsb2NrLT5hZGRQcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9u
KGluc3RydWN0aW9ucygpLnNpemUoKSk7Ci0gICAgZW1pdE9wY29kZShvcF9wdXRfdG9fc2NvcGUp
OwotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChtX2xleGljYWxFbnZpcm9ubWVudFJlZ2lzdGVy
LT5pbmRleCgpKTsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYWRkQ29uc3RhbnQocHJvcGVy
dHlOYW1lKSk7Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHZhbHVlLT5pbmRleCgpKTsKLSAg
ICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoUmVzb2x2ZU1vZGVBbmRUeXBlKFRocm93SWZOb3RGb3Vu
ZCwgTG9jYWxDbG9zdXJlVmFyKS5vcGVyYW5kKCkpOwotICAgIGludCBvcGVyYW5kID0gcmVnaXN0
ZXJGb3IoZHN0LT5pbmRleCgpKS5pbmRleCgpOwotICAgIGJvb2wgaXNXYXRjaGFibGVWYXJpYWJs
ZSA9IGhhc1dhdGNoYWJsZVZhcmlhYmxlKG9wZXJhbmQpOwotICAgIEFTU0VSVCghaXNXYXRjaGFi
bGVWYXJpYWJsZSB8fCB3YXRjaGFibGVWYXJpYWJsZUlkZW50aWZpZXIob3BlcmFuZCkgPT0gcHJv
cGVydHlOYW1lKTsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoaXNXYXRjaGFibGVWYXJpYWJs
ZSk7Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGRzdC0+aW5kZXgoKSk7Ci0gICAgcmV0dXJu
IGRzdDsKLX0KLQotUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OnJlc29sdmVDYWxsZWUo
RnVuY3Rpb25Ob2RlKiBmdW5jdGlvbk5vZGUpCi17Ci0gICAgaWYgKCFmdW5jdGlvbk5hbWVJc0lu
U2NvcGUoZnVuY3Rpb25Ob2RlLT5pZGVudCgpLCBmdW5jdGlvbk5vZGUtPmZ1bmN0aW9uTW9kZSgp
KSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpZiAoZnVuY3Rpb25OYW1lU2NvcGVJc0R5bmFt
aWMobV9jb2RlQmxvY2stPnVzZXNFdmFsKCksIG1fY29kZUJsb2NrLT5pc1N0cmljdE1vZGUoKSkp
Ci0gICAgICAgIHJldHVybiAwOwotCi0gICAgbV9jYWxsZWVSZWdpc3Rlci5zZXRJbmRleChKU1N0
YWNrOjpDYWxsZWUpOwotICAgIGlmIChmdW5jdGlvbk5vZGUtPmNhcHR1cmVzKGZ1bmN0aW9uTm9k
ZS0+aWRlbnQoKSkpCi0gICAgICAgIHJldHVybiBpbml0aWFsaXplQ2FwdHVyZWRWYXJpYWJsZShh
ZGRWYXIoKSwgZnVuY3Rpb25Ob2RlLT5pZGVudCgpLCAmbV9jYWxsZWVSZWdpc3Rlcik7Ci0KLSAg
ICByZXR1cm4gJm1fY2FsbGVlUmVnaXN0ZXI7Ci19Ci0KLXZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6
OmFkZENhbGxlZShGdW5jdGlvbk5vZGUqIGZ1bmN0aW9uTm9kZSwgUmVnaXN0ZXJJRCogY2FsbGVl
UmVnaXN0ZXIpCi17Ci0gICAgaWYgKCFjYWxsZWVSZWdpc3RlcikKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgc3ltYm9sVGFibGUoKS5hZGQoZnVuY3Rpb25Ob2RlLT5pZGVudCgpLmltcGwoKSwgU3lt
Ym9sVGFibGVFbnRyeShjYWxsZWVSZWdpc3Rlci0+aW5kZXgoKSwgUmVhZE9ubHkpKTsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgcmVnID0gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQobV9jb2RlQmxv
Y2stPm51bVBhcmFtZXRlcnMoKSk7CisgICAgUmVnaXN0ZXJJRCYgcGFyYW1ldGVyID0gcmVnaXN0
ZXJGb3IocmVnKTsKKyAgICBwYXJhbWV0ZXIuc2V0SW5kZXgocmVnKTsKKyAgICBtX2NvZGVCbG9j
ay0+YWRkUGFyYW1ldGVyKCk7CiB9CiAKLXZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmFkZFBhcmFt
ZXRlcihjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgaW50IHBhcmFtZXRlckluZGV4KQorU3RyaW5n
SW1wbCogQnl0ZWNvZGVHZW5lcmF0b3I6OnZpc2libGVOYW1lRm9yUGFyYW1ldGVyKERlY29uc3Ry
dWN0aW9uUGF0dGVybk5vZGUqIHBhdHRlcm4pCiB7Ci0gICAgLy8gUGFyYW1ldGVycyBvdmVyd3Jp
dGUgdmFyIGRlY2xhcmF0aW9ucywgYnV0IG5vdCBmdW5jdGlvbiBkZWNsYXJhdGlvbnMuCi0gICAg
U3RyaW5nSW1wbCogcmVwID0gaWRlbnQuaW1wbCgpOwotICAgIGlmICghbV9mdW5jdGlvbnMuY29u
dGFpbnMocmVwKSkgewotICAgICAgICBzeW1ib2xUYWJsZSgpLnNldChyZXAsIHBhcmFtZXRlcklu
ZGV4KTsKLSAgICAgICAgUmVnaXN0ZXJJRCYgcGFyYW1ldGVyID0gcmVnaXN0ZXJGb3IocGFyYW1l
dGVySW5kZXgpOwotICAgICAgICBwYXJhbWV0ZXIuc2V0SW5kZXgocGFyYW1ldGVySW5kZXgpOwor
ICAgIGlmIChwYXR0ZXJuLT5pc0JpbmRpbmdOb2RlKCkpIHsKKyAgICAgICAgY29uc3QgSWRlbnRp
ZmllciYgaWRlbnQgPSBzdGF0aWNfY2FzdDxjb25zdCBCaW5kaW5nTm9kZSo+KHBhdHRlcm4pLT5i
b3VuZFByb3BlcnR5KCk7CisgICAgICAgIGlmICghbV9mdW5jdGlvbnMuY29udGFpbnMoaWRlbnQu
aW1wbCgpKSkKKyAgICAgICAgICAgIHJldHVybiBpZGVudC5pbXBsKCk7CiAgICAgfQotCi0gICAg
Ly8gVG8gbWFpbnRhaW4gdGhlIGNhbGxpbmcgY29udmVudGlvbiwgd2UgaGF2ZSB0byBhbGxvY2F0
ZSB1bmlxdWUgc3BhY2UgZm9yCi0gICAgLy8gZWFjaCBwYXJhbWV0ZXIsIGV2ZW4gaWYgdGhlIHBh
cmFtZXRlciBkb2Vzbid0IG1ha2UgaXQgaW50byB0aGUgc3ltYm9sIHRhYmxlLgotICAgIG1fY29k
ZUJsb2NrLT5hZGRQYXJhbWV0ZXIoKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAogYm9vbCBC
eXRlY29kZUdlbmVyYXRvcjo6d2lsbFJlc29sdmVUb0FyZ3VtZW50c1JlZ2lzdGVyKGNvbnN0IElk
ZW50aWZpZXImIGlkZW50KQpAQCAtNTM5LDE5ICs1MzYsNiBAQCBSZWdpc3RlcklEKiBCeXRlY29k
ZUdlbmVyYXRvcjo6dW5jaGVja2VkCiAgICAgcmV0dXJuIG1fbG9jYWxBcmd1bWVudHNSZWdpc3Rl
cjsKIH0KIAotUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmNyZWF0ZUxhenlSZWdpc3Rl
cklmTmVjZXNzYXJ5KFJlZ2lzdGVySUQqIHJlZykKLXsKLSAgICBpZiAoIXJlZy0+dmlydHVhbFJl
Z2lzdGVyKCkuaXNMb2NhbCgpKQotICAgICAgICByZXR1cm4gcmVnOwotCi0gICAgaW50IGxvY2Fs
VmFyaWFibGVOdW1iZXIgPSByZWctPnZpcnR1YWxSZWdpc3RlcigpLnRvTG9jYWwoKTsKLQotICAg
IGlmIChtX2xhc3RMYXp5RnVuY3Rpb24gPD0gbG9jYWxWYXJpYWJsZU51bWJlciB8fCBsb2NhbFZh
cmlhYmxlTnVtYmVyIDwgbV9maXJzdExhenlGdW5jdGlvbikKLSAgICAgICAgcmV0dXJuIHJlZzsK
LSAgICBlbWl0TGF6eU5ld0Z1bmN0aW9uKHJlZywgbV9sYXp5RnVuY3Rpb25zLmdldChsb2NhbFZh
cmlhYmxlTnVtYmVyKSk7Ci0gICAgcmV0dXJuIHJlZzsKLX0KLQogUmVnaXN0ZXJJRCogQnl0ZWNv
ZGVHZW5lcmF0b3I6Om5ld1JlZ2lzdGVyKCkKIHsKICAgICBtX2NhbGxlZVJlZ2lzdGVycy5hcHBl
bmQodmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwobV9jYWxsZWVSZWdpc3RlcnMuc2l6ZSgpKSk7CkBA
IC05NTQsNyArOTM4LDcgQEAgYm9vbCBCeXRlY29kZUdlbmVyYXRvcjo6aGFzQ29uc3RhbnQoY29u
cwogICAgIFN0cmluZ0ltcGwqIHJlcCA9IGlkZW50LmltcGwoKTsKICAgICByZXR1cm4gbV9pZGVu
dGlmaWVyTWFwLmNvbnRhaW5zKHJlcCk7CiB9Ci0gICAgCisKIHVuc2lnbmVkIEJ5dGVjb2RlR2Vu
ZXJhdG9yOjphZGRDb25zdGFudChjb25zdCBJZGVudGlmaWVyJiBpZGVudCkKIHsKICAgICBTdHJp
bmdJbXBsKiByZXAgPSBpZGVudC5pbXBsKCk7CkBAIC0xMTkwLDQ2ICsxMTc0LDg2IEBAIGJvb2wg
Qnl0ZWNvZGVHZW5lcmF0b3I6OmlzQ2FwdHVyZWQoaW50IG8KICAgICByZXR1cm4gbV9zeW1ib2xU
YWJsZSAmJiBtX3N5bWJvbFRhYmxlLT5pc0NhcHR1cmVkKG9wZXJhbmQpOwogfQogCi1Mb2NhbCBC
eXRlY29kZUdlbmVyYXRvcjo6bG9jYWwoY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHkpCitWYXJp
YWJsZSBCeXRlY29kZUdlbmVyYXRvcjo6dmFyaWFibGUoY29uc3QgSWRlbnRpZmllciYgcHJvcGVy
dHkpCiB7Ci0gICAgaWYgKHByb3BlcnR5ID09IHByb3BlcnR5TmFtZXMoKS50aGlzSWRlbnRpZmll
cikKLSAgICAgICAgcmV0dXJuIExvY2FsKHRoaXNSZWdpc3RlcigpLCBSZWFkT25seSwgTG9jYWw6
OlNwZWNpYWxMb2NhbCk7Ci0gICAgYm9vbCBpc0FyZ3VtZW50cyA9IHByb3BlcnR5ID09IHByb3Bl
cnR5TmFtZXMoKS5hcmd1bWVudHM7Ci0gICAgaWYgKGlzQXJndW1lbnRzKQotICAgICAgICBjcmVh
dGVBcmd1bWVudHNJZk5lY2Vzc2FyeSgpOwotCisgICAgaWYgKHByb3BlcnR5ID09IHByb3BlcnR5
TmFtZXMoKS50aGlzSWRlbnRpZmllcikgeworICAgICAgICByZXR1cm4gVmFyaWFibGUoCisgICAg
ICAgICAgICBwcm9wZXJ0eSwgVmFyT2Zmc2V0KHRoaXNSZWdpc3RlcigpLT52aXJ0dWFsUmVnaXN0
ZXIoKSksIHRoaXNSZWdpc3RlcigpLAorICAgICAgICAgICAgUmVhZE9ubHksIExvY2FsOjpTcGVj
aWFsTG9jYWwpOworICAgIH0KKyAgICAKICAgICBpZiAoIXNob3VsZE9wdGltaXplTG9jYWxzKCkp
Ci0gICAgICAgIHJldHVybiBMb2NhbCgpOwotCisgICAgICAgIHJldHVybiBWYXJpYWJsZShwcm9w
ZXJ0eSk7CisgICAgCiAgICAgU3ltYm9sVGFibGVFbnRyeSBlbnRyeSA9IHN5bWJvbFRhYmxlKCku
Z2V0KHByb3BlcnR5LmltcGwoKSk7CiAgICAgaWYgKGVudHJ5LmlzTnVsbCgpKQotICAgICAgICBy
ZXR1cm4gTG9jYWwoKTsKLQotCi0gICAgUmVnaXN0ZXJJRCogbG9jYWwgPSBjcmVhdGVMYXp5UmVn
aXN0ZXJJZk5lY2Vzc2FyeSgmcmVnaXN0ZXJGb3IoZW50cnkuZ2V0SW5kZXgoKSkpOwotCi0gICAg
aWYgKGlzQ2FwdHVyZWQobG9jYWwtPmluZGV4KCkpICYmIG1fbGV4aWNhbEVudmlyb25tZW50UmVn
aXN0ZXIpCi0gICAgICAgIHJldHVybiBMb2NhbCgpOwotCi0gICAgcmV0dXJuIExvY2FsKGxvY2Fs
LCBlbnRyeS5nZXRBdHRyaWJ1dGVzKCksIGlzQXJndW1lbnRzID8gTG9jYWw6OlNwZWNpYWxMb2Nh
bCA6IExvY2FsOjpOb3JtYWxMb2NhbCk7CisgICAgICAgIHJldHVybiBWYXJpYWJsZShwcm9wZXJ0
eSk7CisgICAgCisgICAgVmFyT2Zmc2V0IG9mZnNldCA9IGVudHJ5LnZhck9mZnNldCgpOworICAg
IAorICAgIGlmIChvZmZzZXQuaXNTY29wZSgpICYmIG1fbG9jYWxTY29wZURlcHRoKSB7CisgICAg
ICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYmUgYWJsZSB0byBzdGF0aWNhbGx5IHJlc29sdmUgdGhy
b3VnaCBvdXIgbG9jYWwgc2NvcGVzLgorICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTQxODg1CisgICAgICAgIHJldHVybiBWYXJpYWJsZShwcm9wZXJ0
eSk7CisgICAgfQorICAgIAorICAgIFJlZ2lzdGVySUQqIGxvY2FsOworICAgIGlmIChvZmZzZXQu
aXNTdGFjaygpKQorICAgICAgICBsb2NhbCA9ICZyZWdpc3RlckZvcihvZmZzZXQuc3RhY2tPZmZz
ZXQoKS5vZmZzZXQoKSk7CisgICAgZWxzZQorICAgICAgICBsb2NhbCA9IG51bGxwdHI7CisgICAg
CisgICAgcmV0dXJuIFZhcmlhYmxlKHByb3BlcnR5LCB2YXJPZmZzZXQsIGxvY2FsLCBlbnRyeS5n
ZXRBdHRyaWJ1dGVzKCksIExvY2FsOjpOb3JtYWxMb2NhbCk7CiB9CiAKLUxvY2FsIEJ5dGVjb2Rl
R2VuZXJhdG9yOjpjb25zdExvY2FsKGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5KQorVmFyaWFi
bGUgQnl0ZWNvZGVHZW5lcmF0b3I6Omhhc1ZhcmlhYmxlRGlyZWN0KGNvbnN0IElkZW50aWZpZXIm
IHByb3BlcnR5KQogewotICAgIGlmIChtX2NvZGVUeXBlICE9IEZ1bmN0aW9uQ29kZSkKLSAgICAg
ICAgcmV0dXJuIExvY2FsKCk7CisgICAgQVNTRVJUKHByb3BlcnR5ICE9IHByb3BlcnR5TmFtZXMo
KS50aGlzSWRlbnRpZmllcik7CisgICAgCisgICAgcmV0dXJuICFzeW1ib2xUYWJsZSgpLmdldChw
cm9wZXJ0eS5pbXBsKCkpLmlzTnVsbCgpOworfQogCit2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpj
cmVhdGVWYXJpYWJsZSgKKyAgICBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eSwgVmFyS2luZCB2
YXJLaW5kLCBDb25zdGFudE1vZGUgY29uc3RhbnRNb2RlKQoreworICAgIEFTU0VSVChwcm9wZXJ0
eSAhPSBwcm9wZXJ0eU5hbWVzKCkudGhpc0lkZW50aWZpZXIpOworICAgIAorICAgIENvbmN1cnJl
bnRKSVRMb2NrZXIgbG9ja2VyKHN5bWJvbFRhYmxlKCkubV9sb2NrKTsKICAgICBTeW1ib2xUYWJs
ZUVudHJ5IGVudHJ5ID0gc3ltYm9sVGFibGUoKS5nZXQocHJvcGVydHkuaW1wbCgpKTsKLSAgICBp
ZiAoZW50cnkuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBMb2NhbCgpOwotCi0gICAgUmVnaXN0
ZXJJRCogbG9jYWwgPSBjcmVhdGVMYXp5UmVnaXN0ZXJJZk5lY2Vzc2FyeSgmcmVnaXN0ZXJGb3Io
ZW50cnkuZ2V0SW5kZXgoKSkpOwotCi0gICAgYm9vbCBpc0FyZ3VtZW50cyA9IHByb3BlcnR5ID09
IHByb3BlcnR5TmFtZXMoKS5hcmd1bWVudHM7Ci0gICAgaWYgKGlzQ2FwdHVyZWQobG9jYWwtPmlu
ZGV4KCkpICYmIG1fbGV4aWNhbEVudmlyb25tZW50UmVnaXN0ZXIpCi0gICAgICAgIHJldHVybiBM
b2NhbCgpOworICAgIAorICAgIGlmICghZW50cnkuaXNOdWxsKCkpIHsKKyAgICAgICAgLy8gRG8g
c29tZSBjaGVja3MgdG8gZW5zdXJlIHRoYXQgdGhlIHZhcmlhYmxlIHdlJ3JlIGJlaW5nIGFza2Vk
IHRvIGNyZWF0ZSBpcyBzdWZmaWNpZW50bHkKKyAgICAgICAgLy8gY29tcGF0aWJsZSB3aXRoIHRo
ZSBvbmUgd2UgaGF2ZSBhbHJlYWR5IGNyZWF0ZWQuCiAKLSAgICByZXR1cm4gTG9jYWwobG9jYWws
IGVudHJ5LmdldEF0dHJpYnV0ZXMoKSwgaXNBcmd1bWVudHMgPyBMb2NhbDo6U3BlY2lhbExvY2Fs
IDogTG9jYWw6Ok5vcm1hbExvY2FsKTsKKyAgICAgICAgVmFyT2Zmc2V0IG9mZnNldCA9IGVudHJ5
LnZhck9mZnNldCgpOworICAgICAgICAKKyAgICAgICAgLy8gV2UgY2FuJ3QgY2hhbmdlIG91ciBt
aW5kcyBhYm91dCB3aGV0aGVyIGl0J3MgY2FwdHVyZWQuCisgICAgICAgIFJFTEVBU0VfQVNTRVJU
KG9mZnNldC5raW5kKCkgPT0gdmFyS2luZCk7CisgICAgICAgIAorICAgICAgICAvLyBJdCdzIGZp
bmUgdG8gZXhwZWN0IGEgdmFyaWFibGUgdG8gYmUgY29uc3RhbnQgaWYgaXQgcHJldmlvdXNseSB3
YXNuJ3QsIGJ1dCBpdCdzIG5vdAorICAgICAgICAvLyBPSyBmb3IgYSBwcmV2aW91c2x5IGNvbnN0
YW50IHZhcmlhYmxlIHRvIGxhdGVyIGJlIGV4cGVjdGVkIHRvIGJlIG5vbi1jb25zdGFudC4gVGhp
cyBhbGwKKyAgICAgICAgLy8gd29ya3Mgb3V0IGJlY2F1c2UgY29uc3RhbnRzIG9ubHkgY29tZSBp
bnRvIHBsYXkgd2l0aCBsb2NhbCB2YXJpYWJsZSBkZWNsYXJhdGlvbnMsIGFuZAorICAgICAgICAv
LyB0aG9zZSBhcmUgYWx3YXlzIGFkZGVkIGxhc3QuCisgICAgICAgIGlmIChjb25zdGFudE1vZGUg
PT0gSXNWYXJpYWJsZSkKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFlbnRyeS5pc1JlYWRP
bmx5KCkpOworICAgICAgICAKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBWYXJP
ZmZzZXQgdmFyT2Zmc2V0OworICAgIGlmICh2YXJLaW5kID09IFNjb3BlVmFyS2luZCkKKyAgICAg
ICAgdmFyT2Zmc2V0ID0gVmFyT2Zmc2V0KHN5bWJvbFRhYmxlKCkudGFrZU5leHRTY29wZU9mZnNl
dCgpKTsKKyAgICBlbHNlIHsKKyAgICAgICAgQVNTRVJUKHZhcktpbmQgPT0gU3RhY2tWYXJLaW5k
KTsKKyAgICAgICAgdmFyT2Zmc2V0ID0gVmFyT2Zmc2V0KHZpcnR1YWxSZWdpc3RlckZvckxvY2Fs
KG1fY2FsbGVlUmVnaXN0ZXJzLnNpemUoKSkpOworICAgIH0KKyAgICBTeW1ib2xUYWJsZUVudHJ5
IG5ld0VudHJ5KHZhck9mZnNldCwgY29uc3RhbnRNb2RlID09IElzQ29uc3RhbnQgPyBSZWFkT25s
eSA6IDApOworICAgIHN5bWJvbFRhYmxlKCkuYWRkKGxvY2tlciwgaWRlbnQuaW1wbCgpLCBuZXdF
bnRyeSk7CisgICAgCisgICAgaWYgKHZhcktpbmQgPT0gU3RhY2tWYXJLaW5kKSB7CisgICAgICAg
IFJlZ2lzdGVySUQqIGxvY2FsID0gYWRkVmFyKCk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGxv
Y2FsLT5pbmRleCgpID09IHZhck9mZnNldC5zdGFja09mZnNldCgpLm9mZnNldCgpKTsKKyAgICB9
CiB9CiAKIHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRDaGVja0hhc0luc3RhbmNlKFJlZ2lz
dGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogdmFsdWUsIFJlZ2lzdGVySUQqIGJhc2UsIExhYmVsKiB0
YXJnZXQpCkBAIC0xMjUzLDM5ICsxMjc3LDM3IEBAIFJlc29sdmVUeXBlIEJ5dGVjb2RlR2VuZXJh
dG9yOjpyZXNvbHZlVHkKICAgICByZXR1cm4gR2xvYmFsUHJvcGVydHk7CiB9CiAKLVJlZ2lzdGVy
SUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0UmVzb2x2ZVNjb3BlKFJlZ2lzdGVySUQqIGRzdCwg
Y29uc3QgSWRlbnRpZmllciYgaWRlbnRpZmllciwgUmVzb2x2ZVNjb3BlSW5mbyYgaW5mbykKK1Jl
Z2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0UmVzb2x2ZVNjb3BlKFJlZ2lzdGVySUQq
IGRzdCwgY29uc3QgVmFyaWFibGUmIHZhcmlhYmxlKQogewotICAgIG1fY29kZUJsb2NrLT5hZGRQ
cm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uKGluc3RydWN0aW9ucygpLnNpemUoKSk7Ci0KLSAgICBp
ZiAobV9zeW1ib2xUYWJsZSAmJiBtX2NvZGVUeXBlID09IEZ1bmN0aW9uQ29kZSAmJiAhbV9sb2Nh
bFNjb3BlRGVwdGgpIHsKLSAgICAgICAgU3ltYm9sVGFibGVFbnRyeSBlbnRyeSA9IG1fc3ltYm9s
VGFibGUtPmdldChpZGVudGlmaWVyLmltcGwoKSk7Ci0gICAgICAgIGlmICghZW50cnkuaXNOdWxs
KCkpIHsKLSAgICAgICAgICAgIGVtaXRPcGNvZGUob3BfcmVzb2x2ZV9zY29wZSk7Ci0gICAgICAg
ICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoa2lsbChkc3QpKTsKLSAgICAgICAgICAgIGluc3Ry
dWN0aW9ucygpLmFwcGVuZChzY29wZVJlZ2lzdGVyKCktPmluZGV4KCkpOwotICAgICAgICAgICAg
aW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGFkZENvbnN0YW50KGlkZW50aWZpZXIpKTsKLSAgICAgICAg
ICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChMb2NhbENsb3N1cmVWYXIpOwotICAgICAgICAgICAg
aW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKDApOwotICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBw
ZW5kKDApOwotICAgICAgICAgICAgaW5mbyA9IFJlc29sdmVTY29wZUluZm8oZW50cnkuZ2V0SW5k
ZXgoKSk7Ci0gICAgICAgICAgICByZXR1cm4gZHN0OwotICAgICAgICB9CisgICAgc3dpdGNoICh2
YXJpYWJsZS52YXJPZmZzZXQoKS5raW5kKCkpIHsKKyAgICBjYXNlIFN0YWNrT2Zmc2V0OgorICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgCisgICAgY2FzZSBDYXB0dXJlZEFyZ3VtZW50
S2luZDoKKyAgICAgICAgcmV0dXJuIGFyZ3VtZW50c1JlZ2lzdGVyKCk7CisgICAgICAgIAorICAg
IGNhc2UgU2NvcGVPZmZzZXQ6CisgICAgICAgIHJldHVybiBzY29wZVJlZ2lzdGVyKCk7CisgICAg
ICAgIAorICAgIGNhc2UgSW52YWxpZFZhcktpbmQ6CisgICAgICAgIC8vIEluZGljYXRlcyBub24t
bG9jYWwgcmVzb2x1dGlvbi4KKyAgICAgICAgCisgICAgICAgIEFTU0VSVCghbV9zeW1ib2xUYWJs
ZSB8fCAhbV9zeW1ib2xUYWJsZS0+Y29udGFpbnMoaWRlbnRpZmllci5pbXBsKCkpIHx8IHJlc29s
dmVUeXBlKCkgPT0gRHluYW1pYyk7CisgICAgICAgIAorICAgICAgICAvLyByZXNvbHZlX3Njb3Bl
IGRzdCwgaWQsIFJlc29sdmVUeXBlLCBkZXB0aAorICAgICAgICBlbWl0T3Bjb2RlKG9wX3Jlc29s
dmVfc2NvcGUpOworICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoa2lsbChkc3QpKTsKKyAg
ICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHNjb3BlUmVnaXN0ZXIoKS0+aW5kZXgoKSk7Cisg
ICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChhZGRDb25zdGFudCh2YXJpYWJsZS5pZGVudCgp
KSk7CisgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChyZXNvbHZlVHlwZSgpKTsKKyAgICAg
ICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKDApOworICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBl
bmQoMCk7CisgICAgICAgIHJldHVybiBkc3Q7CiAgICAgfQotCi0gICAgQVNTRVJUKCFtX3N5bWJv
bFRhYmxlIHx8ICFtX3N5bWJvbFRhYmxlLT5jb250YWlucyhpZGVudGlmaWVyLmltcGwoKSkgfHwg
cmVzb2x2ZVR5cGUoKSA9PSBEeW5hbWljKTsKLQotICAgIC8vIHJlc29sdmVfc2NvcGUgZHN0LCBp
ZCwgUmVzb2x2ZVR5cGUsIGRlcHRoCi0gICAgZW1pdE9wY29kZShvcF9yZXNvbHZlX3Njb3BlKTsK
LSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoa2lsbChkc3QpKTsKLSAgICBpbnN0cnVjdGlvbnMo
KS5hcHBlbmQoc2NvcGVSZWdpc3RlcigpLT5pbmRleCgpKTsKLSAgICBpbnN0cnVjdGlvbnMoKS5h
cHBlbmQoYWRkQ29uc3RhbnQoaWRlbnRpZmllcikpOwotICAgIGluc3RydWN0aW9ucygpLmFwcGVu
ZChyZXNvbHZlVHlwZSgpKTsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoMCk7Ci0gICAgaW5z
dHJ1Y3Rpb25zKCkuYXBwZW5kKDApOwotICAgIHJldHVybiBkc3Q7CisgICAgCisgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAotCiBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVy
YXRvcjo6ZW1pdEdldE93blNjb3BlKFJlZ2lzdGVySUQqIGRzdCwgY29uc3QgSWRlbnRpZmllciYg
aWRlbnRpZmllciwgT3duU2NvcGVMb29rdXBSdWxlcykKIHsKICAgICBlbWl0T3Bjb2RlKG9wX3Jl
c29sdmVfc2NvcGUpOwpAQCAtMTMwMCw2MSArMTMyMiwxMDcgQEAgUmVnaXN0ZXJJRCogQnl0ZWNv
ZGVHZW5lcmF0b3I6OmVtaXRHZXRPdwogICAgIHJldHVybiBkc3Q7CiB9CiAKLVJlZ2lzdGVySUQq
IEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0UmVzb2x2ZUNvbnN0YW50TG9jYWwoUmVnaXN0ZXJJRCog
ZHN0LCBjb25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVyLCBSZXNvbHZlU2NvcGVJbmZvJiBpbmZv
KQorUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRHZXRGcm9tU2NvcGUoUmVnaXN0
ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBzY29wZSwgY29uc3QgVmFyaWFibGUmIHZhcmlhYmxlLCBS
ZXNvbHZlTW9kZSByZXNvbHZlTW9kZSkKIHsKLSAgICBpZiAoIW1fc3ltYm9sVGFibGUgfHwgbV9j
b2RlVHlwZSAhPSBGdW5jdGlvbkNvZGUpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAg
U3ltYm9sVGFibGVFbnRyeSBlbnRyeSA9IG1fc3ltYm9sVGFibGUtPmdldChpZGVudGlmaWVyLmlt
cGwoKSk7Ci0gICAgaWYgKGVudHJ5LmlzTnVsbCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LSAgICBpbmZvID0gUmVzb2x2ZVNjb3BlSW5mbyhlbnRyeS5nZXRJbmRleCgpKTsKLSAgICByZXR1
cm4gZW1pdE1vdmUoZHN0LCBtX2xleGljYWxFbnZpcm9ubWVudFJlZ2lzdGVyKTsKLQorICAgIHN3
aXRjaCAodmFyaWFibGUudmFyT2Zmc2V0KCkua2luZCgpKSB7CisgICAgY2FzZSBTdGFja09mZnNl
dDoKKyAgICAgICAgcmV0dXJuIGVtaXRNb3ZlKGtpbGwoZHN0KSwgdmFyaWFibGUubG9jYWwoKSk7
CisgICAgICAgIAorICAgIGNhc2UgQ2FwdHVyZWRBcmd1bWVudHNPZmZzZXQ6CisgICAgICAgIEFT
U0VSVChzY29wZSA9PSBhcmd1bWVudHNSZWdpc3RlcigpKTsKKyAgICAgICAgVW5saW5rZWRWYWx1
ZVByb2ZpbGUgcHJvZmlsZSA9IGVtaXRQcm9maWxlZE9wY29kZShvcF9nZXRfZnJvbV9hcmd1bWVu
dHMpOworICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoa2lsbChkc3QpKTsKKyAgICAgICAg
aW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHNjb3BlLT5pbmRleCgpKTsKKyAgICAgICAgaW5zdHJ1Y3Rp
b25zKCkuYXBwZW5kKHZhcmlhYmxlLnZhck9mZnNldCgpLmNhcHR1cmVkQXJndW1lbnRzT2Zmc2V0
KCkub2Zmc2V0KCkpOworICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQocHJvZmlsZSk7Cisg
ICAgICAgIHJldHVybiBkc3Q7CisgICAgICAgIAorICAgIGNhc2UgU2NvcGVPZmZzZXQ6CisgICAg
Y2FzZSBJbnZhbGlkVmFyS2luZDoKKyAgICAgICAgbV9jb2RlQmxvY2stPmFkZFByb3BlcnR5QWNj
ZXNzSW5zdHJ1Y3Rpb24oaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKTsKKyAgICAgICAgCisgICAgICAg
IC8vIGdldF9mcm9tX3Njb3BlIGRzdCwgc2NvcGUsIGlkLCBSZXNvbHZlTW9kZUFuZFR5cGUsIFN0
cnVjdHVyZSwgT3BlcmFuZAorICAgICAgICBVbmxpbmtlZFZhbHVlUHJvZmlsZSBwcm9maWxlID0g
ZW1pdFByb2ZpbGVkT3Bjb2RlKG9wX2dldF9mcm9tX3Njb3BlKTsKKyAgICAgICAgaW5zdHJ1Y3Rp
b25zKCkuYXBwZW5kKGtpbGwoZHN0KSk7CisgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChz
Y29wZS0+aW5kZXgoKSk7CisgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChhZGRDb25zdGFu
dCh2YXJpYWJsZS5pZGVudGlmaWVyKCkpKTsKKyAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5k
KFJlc29sdmVNb2RlQW5kVHlwZShyZXNvbHZlTW9kZSwgdmFyaWFibGUudmFyT2Zmc2V0KCkuaXNT
Y29wZSgpID8gTG9jYWxDbG9zdXJlVmFyIDogcmVzb2x2ZVR5cGUoKSkub3BlcmFuZCgpKTsKKyAg
ICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKDApOworICAgICAgICBpbnN0cnVjdGlvbnMoKS5h
cHBlbmQodmFyaWFibGUudmFyT2Zmc2V0KCkuaXNTY29wZSgpID8gdmFyaWFibGUudmFyT2Zmc2V0
KCkuc2NvcGVPZmZzZXQoKS5vZmZzZXQoKSA6IDApOworICAgICAgICBpbnN0cnVjdGlvbnMoKS5h
cHBlbmQocHJvZmlsZSk7CisgICAgICAgIHJldHVybiBkc3Q7CisgICAgfQorICAgIAorICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKLVJlZ2lzdGVySUQqIEJ5dGVjb2RlR2Vu
ZXJhdG9yOjplbWl0R2V0RnJvbVNjb3BlKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogc2Nv
cGUsIGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIsIFJlc29sdmVNb2RlIHJlc29sdmVNb2Rl
LCBjb25zdCBSZXNvbHZlU2NvcGVJbmZvJiBpbmZvKQorUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5l
cmF0b3I6OmVtaXRQdXRUb1Njb3BlKFJlZ2lzdGVySUQqIHNjb3BlLCBjb25zdCBWYXJpYWJsZSYg
dmFyaWFibGUsIFJlZ2lzdGVySUQqIHZhbHVlLCBSZXNvbHZlTW9kZSByZXNvbHZlTW9kZSkKIHsK
LSAgICBtX2NvZGVCbG9jay0+YWRkUHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbihpbnN0cnVjdGlv
bnMoKS5zaXplKCkpOwotCi0gICAgLy8gZ2V0X2Zyb21fc2NvcGUgZHN0LCBzY29wZSwgaWQsIFJl
c29sdmVNb2RlQW5kVHlwZSwgU3RydWN0dXJlLCBPcGVyYW5kCi0gICAgVW5saW5rZWRWYWx1ZVBy
b2ZpbGUgcHJvZmlsZSA9IGVtaXRQcm9maWxlZE9wY29kZShvcF9nZXRfZnJvbV9zY29wZSk7Ci0g
ICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGtpbGwoZHN0KSk7Ci0gICAgaW5zdHJ1Y3Rpb25zKCku
YXBwZW5kKHNjb3BlLT5pbmRleCgpKTsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYWRkQ29u
c3RhbnQoaWRlbnRpZmllcikpOwotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChSZXNvbHZlTW9k
ZUFuZFR5cGUocmVzb2x2ZU1vZGUsIGluZm8uaXNMb2NhbCgpID8gTG9jYWxDbG9zdXJlVmFyIDog
cmVzb2x2ZVR5cGUoKSkub3BlcmFuZCgpKTsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoMCk7
Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGluZm8ubG9jYWxJbmRleCgpKTsKLSAgICBpbnN0
cnVjdGlvbnMoKS5hcHBlbmQocHJvZmlsZSk7Ci0gICAgcmV0dXJuIGRzdDsKKyAgICBzd2l0Y2gg
KHZhcmlhYmxlLnZhck9mZnNldCgpLmtpbmQoKSkgeworICAgIGNhc2UgU3RhY2tPZmZzZXQ6Cisg
ICAgICAgIGVtaXRNb3ZlKHZhcmlhYmxlLmxvY2FsKCksIHZhbHVlKTsKKyAgICAgICAgcmV0dXJu
IHZhbHVlOworICAgICAgICAKKyAgICBjYXNlIENhcHR1cmVkQXJndW1lbnRzT2Zmc2V0OgorICAg
ICAgICBBU1NFUlQoc2NvcGUgPT0gYXJndW1lbnRzUmVnaXN0ZXIoKSk7CisgICAgICAgIGVtaXRP
cGNvZGUob3BfcHV0X3RvX2FyZ3VtZW50cyk7CisgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVu
ZChzY29wZSk7CisgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCh2YXJpYWJsZS52YXJPZmZz
ZXQoKS5jYXB0dXJlZEFyZ3VtZW50c09mZnNldCgpLm9mZnNldCgpKTsKKyAgICAgICAgaW5zdHJ1
Y3Rpb25zKCkuYXBwZW5kKHZhbHVlLT5pbmRleCgpKTsKKyAgICAgICAgcmV0dXJuIHZhbHVlOwor
ICAgICAgICAKKyAgICBjYXNlIFNjb3BlT2Zmc2V0OgorICAgIGNhc2UgSW52YWxpZFZhcktpbmQ6
IHsKKyAgICAgICAgbV9jb2RlQmxvY2stPmFkZFByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb24oaW5z
dHJ1Y3Rpb25zKCkuc2l6ZSgpKTsKKyAgICAgICAgCisgICAgICAgIC8vIHB1dF90b19zY29wZSBz
Y29wZSwgaWQsIHZhbHVlLCBSZXNvbHZlTW9kZUFuZFR5cGUsIFN0cnVjdHVyZSwgT3BlcmFuZAor
ICAgICAgICBlbWl0T3Bjb2RlKG9wX3B1dF90b19zY29wZSk7CisgICAgICAgIGluc3RydWN0aW9u
cygpLmFwcGVuZChzY29wZS0+aW5kZXgoKSk7CisgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVu
ZChhZGRDb25zdGFudCh2YXJpYWJsZS5pZGVudCgpKSk7CisgICAgICAgIGluc3RydWN0aW9ucygp
LmFwcGVuZCh2YWx1ZS0+aW5kZXgoKSk7CisgICAgICAgIFNjb3BlT2Zmc2V0IG9mZnNldDsKKyAg
ICAgICAgaWYgKHZhcmlhYmxlLnZhck9mZnNldCgpLmlzU2NvcGUoKSkgeworICAgICAgICAgICAg
b2Zmc2V0ID0gdmFyaWFibGUudmFyT2Zmc2V0KCkuc2NvcGVPZmZzZXQoKTsKKyAgICAgICAgICAg
IGluc3RydWN0aW9ucygpLmFwcGVuZChSZXNvbHZlTW9kZUFuZFR5cGUocmVzb2x2ZU1vZGUsIExv
Y2FsQ2xvc3VyZVZhcikub3BlcmFuZCgpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IEFTU0VSVChyZXNvbHZlVHlwZSgpICE9IExvY2FsQ2xvc3VyZVZhcik7CisgICAgICAgICAgICBp
bnN0cnVjdGlvbnMoKS5hcHBlbmQoUmVzb2x2ZU1vZGVBbmRUeXBlKHJlc29sdmVNb2RlLCByZXNv
bHZlVHlwZSgpKS5vcGVyYW5kKCkpOworICAgICAgICB9CisgICAgICAgIGluc3RydWN0aW9ucygp
LmFwcGVuZCgwKTsKKyAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKG9mZnNldC5pc1ZhbGlk
KCkgPyBvZmZzZXQub2Zmc2V0KCkgOiAwKTsKKyAgICAgICAgcmV0dXJuIHZhbHVlOworICAgIH0g
fQorICAgIAorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKLVJlZ2lzdGVy
SUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0UHV0VG9TY29wZShSZWdpc3RlcklEKiBzY29wZSwg
Y29uc3QgSWRlbnRpZmllciYgaWRlbnRpZmllciwgUmVnaXN0ZXJJRCogdmFsdWUsIFJlc29sdmVN
b2RlIHJlc29sdmVNb2RlLCBjb25zdCBSZXNvbHZlU2NvcGVJbmZvJiBpbmZvKQorUmVnaXN0ZXJJ
RCogQnl0ZWNvZGVHZW5lcmF0b3I6OmluaXRpYWxpemVWYXJpYWJsZShjb25zdCBWYXJpYWJsZSYg
dmFyaWFibGUsIFJlZ2lzdGVySUQqIHZhbHVlKQogewotICAgIG1fY29kZUJsb2NrLT5hZGRQcm9w
ZXJ0eUFjY2Vzc0luc3RydWN0aW9uKGluc3RydWN0aW9ucygpLnNpemUoKSk7Ci0KLSAgICAvLyBw
dXRfdG9fc2NvcGUgc2NvcGUsIGlkLCB2YWx1ZSwgUmVzb2x2ZU1vZGVBbmRUeXBlLCBTdHJ1Y3R1
cmUsIE9wZXJhbmQKLSAgICBlbWl0T3Bjb2RlKG9wX3B1dF90b19zY29wZSk7Ci0gICAgaW5zdHJ1
Y3Rpb25zKCkuYXBwZW5kKHNjb3BlLT5pbmRleCgpKTsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBl
bmQoYWRkQ29uc3RhbnQoaWRlbnRpZmllcikpOwotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCh2
YWx1ZS0+aW5kZXgoKSk7Ci0gICAgaWYgKGluZm8uaXNMb2NhbCgpKSB7Ci0gICAgICAgIGluc3Ry
dWN0aW9ucygpLmFwcGVuZChSZXNvbHZlTW9kZUFuZFR5cGUocmVzb2x2ZU1vZGUsIExvY2FsQ2xv
c3VyZVZhcikub3BlcmFuZCgpKTsKLSAgICAgICAgaW50IG9wZXJhbmQgPSByZWdpc3RlckZvcihp
bmZvLmxvY2FsSW5kZXgoKSkuaW5kZXgoKTsKLSAgICAgICAgYm9vbCBpc1dhdGNoYWJsZVZhcmlh
YmxlID0gaGFzV2F0Y2hhYmxlVmFyaWFibGUob3BlcmFuZCk7Ci0gICAgICAgIEFTU0VSVCghaXNX
YXRjaGFibGVWYXJpYWJsZSB8fCB3YXRjaGFibGVWYXJpYWJsZUlkZW50aWZpZXIob3BlcmFuZCkg
PT0gaWRlbnRpZmllcik7Ci0gICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChpc1dhdGNoYWJs
ZVZhcmlhYmxlKTsKLSAgICB9IGVsc2UgewotICAgICAgICBBU1NFUlQocmVzb2x2ZVR5cGUoKSAh
PSBMb2NhbENsb3N1cmVWYXIpOwotICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoUmVzb2x2
ZU1vZGVBbmRUeXBlKHJlc29sdmVNb2RlLCByZXNvbHZlVHlwZSgpKS5vcGVyYW5kKCkpOwotICAg
ICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZmFsc2UpOworICAgIFJlZ2lzdGVySUQqIHNjb3Bl
OworICAgIHN3aXRjaCAodmFyaWFibGUudmFyT2Zmc2V0KCkua2luZCgpKSB7CisgICAgY2FzZSBT
dGFja09mZnNldDoKKyAgICAgICAgc2NvcGUgPSBudWxscHRyOworICAgICAgICBicmVhazsKKyAg
ICAgICAgCisgICAgY2FzZSBDYXB0dXJlZEFyZ3VtZW50S2luZDoKKyAgICAgICAgc2NvcGUgPSBh
cmd1bWVudHNSZWdpc3RlcigpOworICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgY2FzZSBT
Y29wZU9mZnNldDoKKyAgICAgICAgc2NvcGUgPSBzY29wZVJlZ2lzdGVyKCk7CisgICAgICAgIGJy
ZWFrOworICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICBzY29wZSA9IG51bGxwdHI7CisgICAgICAgIGJyZWFrOwogICAg
IH0KLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoaW5mby5sb2NhbEluZGV4KCkpOwotICAgIHJl
dHVybiB2YWx1ZTsKKworICAgIHJldHVybiBlbWl0UHV0VG9TY29wZShzY29wZSwgdmFyaWFibGUs
IHZhbHVlLCBUaHJvd0lmTm90Rm91bmQpOwogfQogCiBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVy
YXRvcjo6ZW1pdEluc3RhbmNlT2YoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiB2YWx1ZSwg
UmVnaXN0ZXJJRCogYmFzZVByb3RvdHlwZSkKLXsgCit7CiAgICAgZW1pdE9wY29kZShvcF9pbnN0
YW5jZW9mKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZHN0LT5pbmRleCgpKTsKICAgICBp
bnN0cnVjdGlvbnMoKS5hcHBlbmQodmFsdWUtPmluZGV4KCkpOwpAQCAtMTY1NiwyNCArMTcyNCwx
NSBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdE5ld0FyCiAKIFJlZ2lzdGVy
SUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TmV3RnVuY3Rpb24oUmVnaXN0ZXJJRCogZHN0LCBG
dW5jdGlvbkJvZHlOb2RlKiBmdW5jdGlvbikKIHsKLSAgICByZXR1cm4gZW1pdE5ld0Z1bmN0aW9u
SW50ZXJuYWwoZHN0LCBtX2NvZGVCbG9jay0+YWRkRnVuY3Rpb25EZWNsKG1ha2VGdW5jdGlvbihm
dW5jdGlvbikpLCBmYWxzZSk7Ci19Ci0KLVJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjpl
bWl0TGF6eU5ld0Z1bmN0aW9uKFJlZ2lzdGVySUQqIGRzdCwgRnVuY3Rpb25Cb2R5Tm9kZSogZnVu
Y3Rpb24pCi17Ci0gICAgRnVuY3Rpb25PZmZzZXRNYXA6OkFkZFJlc3VsdCBwdHIgPSBtX2Z1bmN0
aW9uT2Zmc2V0cy5hZGQoZnVuY3Rpb24sIDApOwotICAgIGlmIChwdHIuaXNOZXdFbnRyeSkKLSAg
ICAgICAgcHRyLml0ZXJhdG9yLT52YWx1ZSA9IG1fY29kZUJsb2NrLT5hZGRGdW5jdGlvbkRlY2wo
bWFrZUZ1bmN0aW9uKGZ1bmN0aW9uKSk7Ci0gICAgcmV0dXJuIGVtaXROZXdGdW5jdGlvbkludGVy
bmFsKGRzdCwgcHRyLml0ZXJhdG9yLT52YWx1ZSwgdHJ1ZSk7CisgICAgcmV0dXJuIGVtaXROZXdG
dW5jdGlvbkludGVybmFsKGRzdCwgbV9jb2RlQmxvY2stPmFkZEZ1bmN0aW9uRGVjbChtYWtlRnVu
Y3Rpb24oZnVuY3Rpb24pKSk7CiB9CiAKLVJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjpl
bWl0TmV3RnVuY3Rpb25JbnRlcm5hbChSZWdpc3RlcklEKiBkc3QsIHVuc2lnbmVkIGluZGV4LCBi
b29sIGRvTnVsbENoZWNrKQorUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXROZXdG
dW5jdGlvbkludGVybmFsKFJlZ2lzdGVySUQqIGRzdCwgdW5zaWduZWQgaW5kZXgpCiB7CiAgICAg
ZW1pdE9wY29kZShvcF9uZXdfZnVuYyk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGRzdC0+
aW5kZXgoKSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHNjb3BlUmVnaXN0ZXIoKS0+aW5k
ZXgoKSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGluZGV4KTsKLSAgICBpbnN0cnVjdGlv
bnMoKS5hcHBlbmQoZG9OdWxsQ2hlY2spOwogICAgIHJldHVybiBkc3Q7CiB9CiAKQEAgLTI1MjMs
OSArMjU4Miw5IEBAIHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OnNldElzTnVtZXJpY0NvbXAKIAog
Ym9vbCBCeXRlY29kZUdlbmVyYXRvcjo6aXNBcmd1bWVudE51bWJlcihjb25zdCBJZGVudGlmaWVy
JiBpZGVudCwgaW50IGFyZ3VtZW50TnVtYmVyKQogewotICAgIFJlZ2lzdGVySUQqIHJlZ2lzdGVy
SUQgPSBsb2NhbChpZGVudCkuZ2V0KCk7Ci0gICAgaWYgKCFyZWdpc3RlcklEIHx8IHJlZ2lzdGVy
SUQtPmluZGV4KCkgPj0gMCkKLSAgICAgICAgIHJldHVybiAwOworICAgIFJlZ2lzdGVySUQqIHJl
Z2lzdGVySUQgPSB2YXJpYWJsZShpZGVudCkubG9jYWwoKTsKKyAgICBpZiAoIXJlZ2lzdGVySUQp
CisgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIHJlZ2lzdGVySUQtPmluZGV4KCkg
PT0gQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNldChhcmd1bWVudE51bWJlcik7CiB9CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2Rl
R2VuZXJhdG9yLmgJKHJldmlzaW9uIDE4MDcyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMTgzLDU4
ICsxODMsNTcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIElzQ2FwdHVyZWQKICAgICB9Owog
Ci0gICAgY2xhc3MgTG9jYWwgeworICAgIGNsYXNzIFZhcmlhYmxlIHsKICAgICBwdWJsaWM6Ci0g
ICAgICAgIExvY2FsKCkKLSAgICAgICAgICAgIDogbV9sb2NhbCgwKQorICAgICAgICBlbnVtIFZh
cmlhYmxlS2luZCB7IE5vcm1hbFZhcmlhYmxlLCBTcGVjaWFsVmFyaWFibGUgfTsKKworICAgICAg
ICBWYXJpYWJsZSgpCisgICAgICAgICAgICA6IG1fb2Zmc2V0KCkKKyAgICAgICAgICAgICwgbV9s
b2NhbChudWxscHRyKQogICAgICAgICAgICAgLCBtX2F0dHJpYnV0ZXMoMCkKLSAgICAgICAgICAg
ICwgbV9raW5kKE5vcm1hbExvY2FsKQorICAgICAgICAgICAgLCBtX2tpbmQoTm9ybWFsVmFyaWFi
bGUpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgVmFyaWFibGUoY29u
c3QgSWRlbnRpZmllciYgaWRlbnQpCisgICAgICAgICAgICA6IG1faWRlbnQoaWRlbnQpCisgICAg
ICAgICAgICAsIG1fbG9jYWwobnVsbHB0cikKKyAgICAgICAgICAgICwgbV9hdHRyaWJ1dGVzKDAp
CisgICAgICAgICAgICAsIG1fa2luZChOb3JtYWxWYXJpYWJsZSkgLy8gVGhpcyBpcyBzb21ld2hh
dCBtZWFuaW5nbGVzcyBoZXJlIGZvciB0aGlzIGtpbmQgb2YgVmFyaWFibGUuCiAgICAgICAgIHsK
ICAgICAgICAgfQogCi0gICAgICAgIGVudW0gTG9jYWxLaW5kIHsgTm9ybWFsTG9jYWwsIFNwZWNp
YWxMb2NhbCB9OwotCi0gICAgICAgIExvY2FsKFJlZ2lzdGVySUQqIGxvY2FsLCB1bnNpZ25lZCBh
dHRyaWJ1dGVzLCBMb2NhbEtpbmQga2luZCkKLSAgICAgICAgICAgIDogbV9sb2NhbChsb2NhbCkK
KyAgICAgICAgVmFyaWFibGUoY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIFZhck9mZnNldCBvZmZz
ZXQsIFJlZ2lzdGVySUQqIGxvY2FsLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBMb2NhbEtpbmQga2lu
ZCkKKyAgICAgICAgICAgIDogbV9pZGVudChpZGVudCkKKyAgICAgICAgICAgICwgbV9vZmZzZXQo
b2Zmc2V0KQorICAgICAgICAgICAgLCBtX2xvY2FsKGxvY2FsKQogICAgICAgICAgICAgLCBtX2F0
dHJpYnV0ZXMoYXR0cmlidXRlcykKICAgICAgICAgICAgICwgbV9raW5kKGtpbmQpCiAgICAgICAg
IHsKICAgICAgICAgfQogCi0gICAgICAgIG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiBt
X2xvY2FsOyB9Ci0KLSAgICAgICAgUmVnaXN0ZXJJRCogZ2V0KCkgY29uc3QgeyByZXR1cm4gbV9s
b2NhbDsgfQorICAgICAgICAvLyBJZiBpdCdzIHVuc2V0LCB0aGVuIGl0IGlzIGEgbm9uLWxvY2Fs
bHktc2NvcGVkIHZhcmlhYmxlLiBJZiBpdCBpcyBzZXQsIHRoZW4gaXQgY291bGQgYmUKKyAgICAg
ICAgLy8gYSBzdGFjayB2YXJpYWJsZSwgYSBzY29wZWQgdmFyaWFibGUgaW4gdGhlIGxvY2FsIHNj
b3BlLCBvciBhIHZhcmlhYmxlIGNhcHR1cmVkIGluIHRoZQorICAgICAgICAvLyBkaXJlY3QgYXJn
dW1lbnRzIG9iamVjdC4KKyAgICAgICAgYm9vbCBpc1Jlc29sdmVkKCkgY29uc3QgeyByZXR1cm4g
ISFtX29mZnNldDsgfQorICAgICAgICAKKyAgICAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQo
KSBjb25zdCB7IHJldHVybiBtX2lkZW50OyB9CisgICAgICAgIAorICAgICAgICBWYXJPZmZzZXQg
b2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQ7IH0KKyAgICAgICAgYm9vbCBpc0xvY2Fs
KCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQuaXNTdGFjaygpOyB9CisgICAgICAgIFJlZ2lzdGVy
SUQqIGxvY2FsKCkgY29uc3QgeyByZXR1cm4gbV9sb2NhbDsgfQogCiAgICAgICAgIGJvb2wgaXNS
ZWFkT25seSgpIGNvbnN0IHsgcmV0dXJuIG1fYXR0cmlidXRlcyAmIFJlYWRPbmx5OyB9Ci0gICAg
ICAgIGJvb2wgaXNTcGVjaWFsKCkgY29uc3QgeyByZXR1cm4gbV9raW5kICE9IE5vcm1hbExvY2Fs
OyB9CisgICAgICAgIGJvb2wgaXNTcGVjaWFsKCkgY29uc3QgeyByZXR1cm4gbV9raW5kICE9IE5v
cm1hbFZhcmlhYmxlOyB9CiAKICAgICBwcml2YXRlOgorICAgICAgICBJZGVudGlmaWVyIG1faWRl
bnQ7CisgICAgICAgIFZhck9mZmV0IG1fb2Zmc3Q7CiAgICAgICAgIFJlZ2lzdGVySUQqIG1fbG9j
YWw7CiAgICAgICAgIHVuc2lnbmVkIG1fYXR0cmlidXRlczsKICAgICAgICAgTG9jYWxLaW5kIG1f
a2luZDsKICAgICB9OwogCi0gICAgc3RydWN0IFJlc29sdmVTY29wZUluZm8gewotICAgICAgICBS
ZXNvbHZlU2NvcGVJbmZvKCkKLSAgICAgICAgICAgIDogbV9sb2NhbEluZGV4KDApCi0gICAgICAg
ICAgICAsIG1fcmVzb2x2ZVNjb3BlS2luZChOb25Mb2NhbFNjb3BlKQotICAgICAgICB7Ci0gICAg
ICAgIH0KLQotICAgICAgICBSZXNvbHZlU2NvcGVJbmZvKGludCBpbmRleCkKLSAgICAgICAgICAg
IDogbV9sb2NhbEluZGV4KGluZGV4KQotICAgICAgICAgICAgLCBtX3Jlc29sdmVTY29wZUtpbmQo
TG9jYWxTY29wZSkKLSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAgYm9vbCBpc0xvY2Fs
KCkgY29uc3QgeyByZXR1cm4gbV9yZXNvbHZlU2NvcGVLaW5kID09IExvY2FsU2NvcGU7IH0KLSAg
ICAgICAgaW50IGxvY2FsSW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2xvY2FsSW5kZXg7IH0KLQot
ICAgIHByaXZhdGU6Ci0gICAgICAgIGludCBtX2xvY2FsSW5kZXg7Ci0gICAgICAgIGVudW0geyBM
b2NhbFNjb3BlLCBOb25Mb2NhbFNjb3BlIH0gbV9yZXNvbHZlU2NvcGVLaW5kOwotICAgIH07Ci0K
ICAgICBzdHJ1Y3QgVHJ5UmFuZ2UgewogICAgICAgICBSZWZQdHI8TGFiZWw+IHN0YXJ0OwogICAg
ICAgICBSZWZQdHI8TGFiZWw+IGVuZDsKQEAgLTI4NSwxMiArMjg0LDEyIEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICBib29sIGlzQ2FwdHVyZWQoaW50IG9wZXJhbmQpOwogICAgICAgICBDYXB0
dXJlTW9kZSBjYXB0dXJlTW9kZShpbnQgb3BlcmFuZCkgeyByZXR1cm4gaXNDYXB0dXJlZChvcGVy
YW5kKSA/IElzQ2FwdHVyZWQgOiBOb3RDYXB0dXJlZDsgfQogICAgICAgICAKLSAgICAgICAgTG9j
YWwgbG9jYWwoY29uc3QgSWRlbnRpZmllciYpOwotICAgICAgICBMb2NhbCBjb25zdExvY2FsKGNv
bnN0IElkZW50aWZpZXImKTsKLQorICAgICAgICBWYXJpYWJsZSB2YXJpYWJsZShjb25zdCBJZGVu
dGlmaWVyJik7CisgICAgICAgIHZvaWQgY3JlYXRlVmFyaWFibGUoY29uc3QgSWRlbnRpZmllciYs
IFZhcktpbmQsIENvbnN0YW50TW9kZSk7IC8vIENyZWF0ZXMgdGhlIHZhcmlhYmxlLCBvciBhc3Nl
cnRzIHRoYXQgdGhlIGFscmVhZHktY3JlYXRlZCB2YXJpYWJsZSBpcyBzdWZmaWNpZW50bHkgY29t
cGF0aWJsZS4KKyAgICAgICAgCiAgICAgICAgIC8vIFJldHVybnMgdGhlIHJlZ2lzdGVyIHN0b3Jp
bmcgInRoaXMiCiAgICAgICAgIFJlZ2lzdGVySUQqIHRoaXNSZWdpc3RlcigpIHsgcmV0dXJuICZt
X3RoaXNSZWdpc3RlcjsgfQotICAgICAgICAKKyAgICAgICAgUmVnaXN0ZXJJRCogYXJndW1lbnRz
UmVnaXN0ZXIoKSB7IHJldHVybiBtX2FyZ3VtZW50c1JlZ2lzdGVyOyB9CiAgICAgICAgIFJlZ2lz
dGVySUQqIHNjb3BlUmVnaXN0ZXIoKSB7IHJldHVybiBtX3Njb3BlUmVnaXN0ZXI7IH0KIAogICAg
ICAgICAvLyBSZXR1cm5zIHRoZSBuZXh0IGF2YWlsYWJsZSB0ZW1wb3JhcnkgcmVnaXN0ZXIuIFJl
Z2lzdGVycyByZXR1cm5lZCBieQpAQCAtNDU2LDggKzQ1NSw3IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICBSZWdpc3RlcklEKiBlbWl0TmV3QXJyYXkoUmVnaXN0ZXJJRCogZHN0LCBFbGVtZW50
Tm9kZSosIHVuc2lnbmVkIGxlbmd0aCk7IC8vIHN0b3BzIGF0IGZpcnN0IGVsaXNpb24KIAogICAg
ICAgICBSZWdpc3RlcklEKiBlbWl0TmV3RnVuY3Rpb24oUmVnaXN0ZXJJRCogZHN0LCBGdW5jdGlv
bkJvZHlOb2RlKik7Ci0gICAgICAgIFJlZ2lzdGVySUQqIGVtaXRMYXp5TmV3RnVuY3Rpb24oUmVn
aXN0ZXJJRCogZHN0LCBGdW5jdGlvbkJvZHlOb2RlKiBib2R5KTsKLSAgICAgICAgUmVnaXN0ZXJJ
RCogZW1pdE5ld0Z1bmN0aW9uSW50ZXJuYWwoUmVnaXN0ZXJJRCogZHN0LCB1bnNpZ25lZCBpbmRl
eCwgYm9vbCBzaG91bGROdWxsQ2hlY2spOworICAgICAgICBSZWdpc3RlcklEKiBlbWl0TmV3RnVu
Y3Rpb25JbnRlcm5hbChSZWdpc3RlcklEKiBkc3QsIHVuc2lnbmVkIGluZGV4KTsKICAgICAgICAg
UmVnaXN0ZXJJRCogZW1pdE5ld0Z1bmN0aW9uRXhwcmVzc2lvbihSZWdpc3RlcklEKiBkc3QsIEZ1
bmNFeHByTm9kZSogZnVuYyk7CiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXROZXdSZWdFeHAoUmVn
aXN0ZXJJRCogZHN0LCBSZWdFeHAqKTsKIApAQCAtNTAyLDEwICs1MDAsMTEgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdFRvUHJpbWl0aXZlKFJlZ2lzdGVySUQqIGRzdCwgUmVn
aXN0ZXJJRCogc3JjKTsKIAogICAgICAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSgpOwotICAg
ICAgICBSZWdpc3RlcklEKiBlbWl0UmVzb2x2ZUNvbnN0YW50TG9jYWwoUmVnaXN0ZXJJRCogZHN0
LCBjb25zdCBJZGVudGlmaWVyJiwgUmVzb2x2ZVNjb3BlSW5mbyYpOwotICAgICAgICBSZWdpc3Rl
cklEKiBlbWl0UmVzb2x2ZVNjb3BlKFJlZ2lzdGVySUQqIGRzdCwgY29uc3QgSWRlbnRpZmllciYs
IFJlc29sdmVTY29wZUluZm8mKTsKLSAgICAgICAgUmVnaXN0ZXJJRCogZW1pdEdldEZyb21TY29w
ZShSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHNjb3BlLCBjb25zdCBJZGVudGlmaWVyJiwg
UmVzb2x2ZU1vZGUsIGNvbnN0IFJlc29sdmVTY29wZUluZm8mKTsKLSAgICAgICAgUmVnaXN0ZXJJ
RCogZW1pdFB1dFRvU2NvcGUoUmVnaXN0ZXJJRCogc2NvcGUsIGNvbnN0IElkZW50aWZpZXImLCBS
ZWdpc3RlcklEKiB2YWx1ZSwgUmVzb2x2ZU1vZGUsIGNvbnN0IFJlc29sdmVTY29wZUluZm8mKTsK
KyAgICAgICAgUmVnaXN0ZXJJRCogZW1pdFJlc29sdmVDb25zdGFudExvY2FsKFJlZ2lzdGVySUQq
IGRzdCwgY29uc3QgVmFyaWFibGUmKTsKKyAgICAgICAgUmVnaXN0ZXJJRCogZW1pdFJlc29sdmVT
Y29wZShSZWdpc3RlcklEKiBkc3QsIGNvbnN0IFZhcmlhYmxlJik7CisgICAgICAgIFJlZ2lzdGVy
SUQqIGVtaXRHZXRGcm9tU2NvcGUoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBzY29wZSwg
Y29uc3QgVmFyaWFibGUmLCBSZXNvbHZlTW9kZSk7CisgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRQ
dXRUb1Njb3BlKFJlZ2lzdGVySUQqIHNjb3BlLCBjb25zdCBWYXJpYWJsZSYsIFJlZ2lzdGVySUQq
IHZhbHVlLCBSZXNvbHZlTW9kZSk7CisgICAgICAgIFJlZ2lzdGVySUQqIGluaXRpYWxpemVWYXJp
YWJsZShjb25zdCBWYXJpYWJsZSYsIFJlZ2lzdGVySUQqIHZhbHVlKTsKIAogICAgICAgICBQYXNz
UmVmUHRyPExhYmVsPiBlbWl0TGFiZWwoTGFiZWwqKTsKICAgICAgICAgdm9pZCBlbWl0TG9vcEhp
bnQoKTsKQEAgLTYxMSwxMSArNjEwLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgUmVn
aXN0ZXJJRCogbmV3UmVnaXN0ZXIoKTsKIAotICAgICAgICAvLyBBZGRzIGEgdmFyIHNsb3QgYW5k
IG1hcHMgaXQgdG8gdGhlIG5hbWUgaWRlbnQgaW4gc3ltYm9sVGFibGUoKS4KLSAgICAgICAgZW51
bSBXYXRjaE1vZGUgeyBJc1dhdGNoYWJsZSwgTm90V2F0Y2hhYmxlIH07Ci0gICAgICAgIFJlZ2lz
dGVySUQqIGFkZFZhcihjb25zdCBJZGVudGlmaWVyJiwgQ29uc3RhbnRNb2RlLCBXYXRjaE1vZGUp
OwotCi0gICAgICAgIC8vIEFkZHMgYW4gYW5vbnltb3VzIHZhciBzbG90LiBUbyBnaXZlIHRoaXMg
c2xvdCBhIG5hbWUsIGFkZCBpdCB0byBzeW1ib2xUYWJsZSgpLgorICAgICAgICAvLyBBZGRzIGFu
IGFub255bW91cyBsb2NhbCB2YXIgc2xvdC4gVG8gZ2l2ZSB0aGlzIHNsb3QgYSBuYW1lLCBhZGQg
aXQgdG8gc3ltYm9sVGFibGUoKS4KICAgICAgICAgUmVnaXN0ZXJJRCogYWRkVmFyKCkKICAgICAg
ICAgewogICAgICAgICAgICAgKyttX2NvZGVCbG9jay0+bV9udW1WYXJzOwpAQCAtNjI1LDE0ICs2
MjAsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAg
ICAgICB9CiAKLSAgICAgICAgLy8gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIGFkZGVkIHZhci4K
LSAgICAgICAgdm9pZCBhZGRQYXJhbWV0ZXIoY29uc3QgSWRlbnRpZmllciYsIGludCBwYXJhbWV0
ZXJJbmRleCk7Ci0gICAgICAgIFJlZ2lzdGVySUQqIHJlc29sdmVDYWxsZWUoRnVuY3Rpb25Ob2Rl
Kik7Ci0gICAgICAgIHZvaWQgYWRkQ2FsbGVlKEZ1bmN0aW9uTm9kZSosIFJlZ2lzdGVySUQqKTsK
LQotICAgICAgICB2b2lkIHByZXNlcnZlTGFzdFZhcigpOwotCi0gICAgICAgIFJlZ2lzdGVySUQm
IHJlZ2lzdGVyRm9yKGludCBpbmRleCkKKyAgICAgICAgLy8gSW5pdGlhbGl6ZXMgdGhlIHN0YWNr
IGZvcm0gdGhlIHBhcmFtZXRlcjsgZG9lcyBub3RoaW5nIGZvciB0aGUgc3ltYm9sIHRhYmxlLgor
ICAgICAgICBSZWdpc3RlcklEKiBpbml0aWFsaXplTmV4dFBhcmFtZXRlcigpOworICAgICAgICBT
dHJpbmdJbXBsKiB2aXNpYmxlTmFtZUZvclBhcmFtZXRlcihEZWNvbnN0cnVjdGlvblBhdHRlcm5O
b2RlKiBwYXR0ZXJuKTsKKyAgICAgICAgCisgICAgICAgIFJlZ2lzdGVySUQmIHJlZ2lzdGVyRm9y
KFZpcnR1YWxSZWdpc3RlcikKICAgICAgICAgewogICAgICAgICAgICAgaWYgKG9wZXJhbmRJc0xv
Y2FsKGluZGV4KSkKICAgICAgICAgICAgICAgICByZXR1cm4gbV9jYWxsZWVSZWdpc3RlcnNbVmly
dHVhbFJlZ2lzdGVyKGluZGV4KS50b0xvY2FsKCldOwpAQCAtNjU3LDExICs2NDksOCBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJs
ZTo6Y3JlYXRlKG1fdm0sIG1fc2NvcGVOb2RlLT5zb3VyY2UoKSwgYm9keSwgaXNCdWlsdGluRnVu
Y3Rpb24oKSA/IFVubGlua2VkQnVpbHRpbkZ1bmN0aW9uIDogVW5saW5rZWROb3JtYWxGdW5jdGlv
bik7CiAgICAgICAgIH0KIAotICAgICAgICBSZWdpc3RlcklEKiBlbWl0SW5pdExhenlSZWdpc3Rl
cihSZWdpc3RlcklEKik7Ci0gICAgICAgIAogICAgICAgICBSZWdpc3RlcklEKiBlbWl0Q29uc3Ry
dWN0VmFyYXJncyhSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGZ1bmMsIFJlZ2lzdGVySUQq
IHRoaXNSZWdpc3RlciwgUmVnaXN0ZXJJRCogYXJndW1lbnRzLCBSZWdpc3RlcklEKiBmaXJzdEZy
ZWVSZWdpc3RlciwgaW50MzJfdCBmaXJzdFZhckFyZ09mZnNldCwgUmVnaXN0ZXJJRCogcHJvZmls
ZUhvb2tSZWdpc3RlciwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90LCBjb25zdCBKU1RleHRQ
b3NpdGlvbiYgZGl2b3RTdGFydCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90RW5kKTsKICAg
ICAgICAgUmVnaXN0ZXJJRCogZW1pdENhbGxWYXJhcmdzKE9wY29kZUlELCBSZWdpc3RlcklEKiBk
c3QsIFJlZ2lzdGVySUQqIGZ1bmMsIFJlZ2lzdGVySUQqIHRoaXNSZWdpc3RlciwgUmVnaXN0ZXJJ
RCogYXJndW1lbnRzLCBSZWdpc3RlcklEKiBmaXJzdEZyZWVSZWdpc3RlciwgaW50MzJfdCBmaXJz
dFZhckFyZ09mZnNldCwgUmVnaXN0ZXJJRCogcHJvZmlsZUhvb2tSZWdpc3RlciwgY29uc3QgSlNU
ZXh0UG9zaXRpb24mIGRpdm90LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RTdGFydCwgY29u
c3QgSlNUZXh0UG9zaXRpb24mIGRpdm90RW5kKTsKLSAgICAgICAgUmVnaXN0ZXJJRCogaW5pdGlh
bGl6ZUNhcHR1cmVkVmFyaWFibGUoUmVnaXN0ZXJJRCogZHN0LCBjb25zdCBJZGVudGlmaWVyJiwg
UmVnaXN0ZXJJRCopOwogCiAgICAgICAgIC8vIFdlJ2xsIG1heSB3YW50IGEgbm9uLXJldHVybiBt
b2RlIGluIGZ1dHVyZSwgYnV0IGN1cnJlbnRseQogICAgICAgICAvLyB0aGlzIGlzIG9ubHkgdXNl
ZCBkdXJpbmcgZW1pdFJldHVybigpLiBlbWl0UmV0dXJuKCkgb2NjdXJzCkBAIC03MTYsMzAgKzcw
NSw2IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRUaHJvd0V4
cHJlc3Npb25Ub29EZWVwRXhjZXB0aW9uKCk7CiAKLSAgICAgICAgdm9pZCBjcmVhdGVBcmd1bWVu
dHNJZk5lY2Vzc2FyeSgpOwotICAgICAgICBSZWdpc3RlcklEKiBjcmVhdGVMYXp5UmVnaXN0ZXJJ
Zk5lY2Vzc2FyeShSZWdpc3RlcklEKik7Ci0gICAgICAgIAotICAgICAgICBib29sIGhhc1dhdGNo
YWJsZVZhcmlhYmxlKGludCBvcGVyYW5kKSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICBW
aXJ0dWFsUmVnaXN0ZXIgcmVnKG9wZXJhbmQpOwotICAgICAgICAgICAgaWYgKCFyZWcuaXNMb2Nh
bCgpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGlmIChzdGF0
aWNfY2FzdDxzaXplX3Q+KHJlZy50b0xvY2FsKCkpID49IG1fd2F0Y2hhYmxlVmFyaWFibGVzLnNp
emUoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBjb25zdCBJ
ZGVudGlmaWVyJiBpZGVudCA9IG1fd2F0Y2hhYmxlVmFyaWFibGVzW3JlZy50b0xvY2FsKCldOwot
ICAgICAgICAgICAgaWYgKGlkZW50LmlzTnVsbCgpKQotICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgICAgIEFTU0VSVChoYXNDb25zdGFudChpZGVudCkpOyAvLyBTaG91bGQg
aGF2ZSBhbHJlYWR5IGJlZW4gYWRkZWQuCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAg
ICAgfQotICAgICAgICAKLSAgICAgICAgY29uc3QgSWRlbnRpZmllciYgd2F0Y2hhYmxlVmFyaWFi
bGVJZGVudGlmaWVyKGludCBvcGVyYW5kKSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICBB
U1NFUlQoaGFzV2F0Y2hhYmxlVmFyaWFibGUob3BlcmFuZCkpOwotICAgICAgICAgICAgVmlydHVh
bFJlZ2lzdGVyIHJlZyhvcGVyYW5kKTsKLSAgICAgICAgICAgIHJldHVybiBtX3dhdGNoYWJsZVZh
cmlhYmxlc1tyZWcudG9Mb2NhbCgpXTsKLSAgICAgICAgfQotCiAgICAgcHJpdmF0ZToKICAgICAg
ICAgVmVjdG9yPFVubGlua2VkSW5zdHJ1Y3Rpb24sIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93PiBt
X2luc3RydWN0aW9uczsKIApAQCAtNzU4LDE0ICs3MjMsMTUgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIFJlZ2lzdGVySUQgbV90aGlzUmVnaXN0ZXI7CiAgICAgICAgIFJlZ2lzdGVySUQgbV9j
YWxsZWVSZWdpc3RlcjsKICAgICAgICAgUmVnaXN0ZXJJRCogbV9zY29wZVJlZ2lzdGVyIHsgbnVs
bHB0ciB9OworICAgICAgICBSZWdpc3RlcklEKiBtX2FyZ3VtZW50c1JlZ2lzdGVyIHsgbnVsbHB0
ciB9OwogICAgICAgICBSZWdpc3RlcklEKiBtX2xleGljYWxFbnZpcm9ubWVudFJlZ2lzdGVyIHsg
bnVsbHB0ciB9OwogICAgICAgICBSZWdpc3RlcklEKiBtX2VtcHR5VmFsdWVSZWdpc3RlciB7IG51
bGxwdHIgfTsKICAgICAgICAgUmVnaXN0ZXJJRCogbV9nbG9iYWxPYmplY3RSZWdpc3RlciB7IG51
bGxwdHIgfTsKICAgICAgICAgUmVnaXN0ZXJJRCogbV9sb2NhbEFyZ3VtZW50c1JlZ2lzdGVyIHsg
bnVsbHB0ciB9OwogCi0gICAgICAgIFZlY3RvcjxJZGVudGlmaWVyLCAxNj4gbV93YXRjaGFibGVW
YXJpYWJsZXM7CiAgICAgICAgIFNlZ21lbnRlZFZlY3RvcjxSZWdpc3RlcklELCAzMj4gbV9jb25z
dGFudFBvb2xSZWdpc3RlcnM7CiAgICAgICAgIFNlZ21lbnRlZFZlY3RvcjxSZWdpc3RlcklELCAz
Mj4gbV9jYWxsZWVSZWdpc3RlcnM7CisgICAgICAgIHVuc2lnbmVkIG1fbnVtQ2FwdHVyZWRWYXJp
YWJsZXM7CiAgICAgICAgIFNlZ21lbnRlZFZlY3RvcjxSZWdpc3RlcklELCAzMj4gbV9wYXJhbWV0
ZXJzOwogICAgICAgICBTZWdtZW50ZWRWZWN0b3I8TGFiZWwsIDMyPiBtX2xhYmVsczsKICAgICAg
ICAgTGFiZWxTY29wZVN0b3JlIG1fbGFiZWxTY29wZXM7CkBAIC03NzgsMTUgKzc0NCwxNCBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxGb3JJbkNvbnRl
eHQ+PiBtX2ZvckluQ29udGV4dFN0YWNrOwogICAgICAgICBWZWN0b3I8VHJ5Q29udGV4dD4gbV90
cnlDb250ZXh0U3RhY2s7CiAgICAgICAgIFZlY3RvcjxzdGQ6OnBhaXI8UmVmUHRyPFJlZ2lzdGVy
SUQ+LCBjb25zdCBEZWNvbnN0cnVjdGlvblBhdHRlcm5Ob2RlKj4+IG1fZGVjb25zdHJ1Y3RlZFBh
cmFtZXRlcnM7CisgICAgICAgIFZlY3RvcjxGdW5jdGlvbkJvZHlOb2RlKj4gbV9mdW5jdGlvbnNU
b0luaXRpYWxpemU7CisgICAgICAgIGJvb2wgbV9uZWVkVG9Jbml0aWFsaXplQXJndW1lbnRzIHsg
ZmFsc2UgfTsKICAgICAgICAgCiAgICAgICAgIFZlY3RvcjxUcnlSYW5nZT4gbV90cnlSYW5nZXM7
CiAgICAgICAgIFNlZ21lbnRlZFZlY3RvcjxUcnlEYXRhLCA4PiBtX3RyeURhdGE7CiAKICAgICAg
ICAgaW50IG1fbmV4dENvbnN0YW50T2Zmc2V0IHsgMCB9OwogCi0gICAgICAgIGludCBtX2ZpcnN0
TGF6eUZ1bmN0aW9uIHsgMCB9OwotICAgICAgICBpbnQgbV9sYXN0TGF6eUZ1bmN0aW9uIHsgMCB9
OwotICAgICAgICBIYXNoTWFwPHVuc2lnbmVkIGludCwgRnVuY3Rpb25Cb2R5Tm9kZSosIFdURjo6
SW50SGFzaDx1bnNpZ25lZCBpbnQ+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRz
PHVuc2lnbmVkIGludD4+IG1fbGF6eUZ1bmN0aW9uczsKICAgICAgICAgdHlwZWRlZiBIYXNoTWFw
PEZ1bmN0aW9uQm9keU5vZGUqLCB1bnNpZ25lZD4gRnVuY3Rpb25PZmZzZXRNYXA7CiAgICAgICAg
IEZ1bmN0aW9uT2Zmc2V0TWFwIG1fZnVuY3Rpb25PZmZzZXRzOwogICAgICAgICAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5j
cHAJKHJldmlzaW9uIDE4MDcyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGls
ZXIvTm9kZXNDb2RlZ2VuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTYyLDcgKzk2Miw3IEBAIFJl
Z2lzdGVySUQqIFZvaWROb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWMKICAgICByZXR1cm4gZ2VuZXJh
dG9yLmVtaXRMb2FkKGRzdCwganNVbmRlZmluZWQoKSk7CiB9CiAKLS8vIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLSBUeXBlT2ZWYWx1ZU5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUeXBlT2ZSZXNv
bHZlTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBSZWdpc3RlcklE
KiBUeXBlT2ZSZXNvbHZlTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5l
cmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQWJzdHJhY3RIZWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBYnN0cmFjdEhlYXAuaAkocmV2aXNpb24gMTgwNzIwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEhlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyAr
NDcsNiBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAgbWFjcm8oV29ybGQp
IFwKICAgICBtYWNybyhTdGFjaykgXAogICAgIG1hY3JvKEhlYXApIFwKLSAgICBtYWNybyhBcmd1
bWVudHNfcmVnaXN0ZXJzKSBcCiAgICAgbWFjcm8oQnV0dGVyZmx5X3B1YmxpY0xlbmd0aCkgXAog
ICAgIG1hY3JvKEJ1dHRlcmZseV92ZWN0b3JMZW5ndGgpIFwKICAgICBtYWNybyhHZXR0ZXJTZXR0
ZXJfZ2V0dGVyKSBcCkBAIC02NSw3ICs2NCw4IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
REZHIHsKICAgICBtYWNybyhJbmRleGVkQ29udGlndW91c1Byb3BlcnRpZXMpIFwKICAgICBtYWNy
byhJbmRleGVkQXJyYXlTdG9yYWdlUHJvcGVydGllcykgXAogICAgIG1hY3JvKEFycmF5U3RvcmFn
ZVByb3BlcnRpZXMpIFwKLSAgICBtYWNybyhWYXJpYWJsZXMpIFwKKyAgICBtYWNybyhEaXJlY3RB
cmd1bWVudHNQcm9wZXJ0aWVzKSBcCisgICAgbWFjcm8oU2NvcGVkQXJndW1lbnRzUHJvcGVydGll
cykgXAogICAgIG1hY3JvKFR5cGVkQXJyYXlQcm9wZXJ0aWVzKSBcCiAgICAgbWFjcm8oSGVhcE9i
amVjdENvdW50KSAvKiBVc2VkIHRvIHJlZmxlY3QgdGhlIGZhY3QgdGhhdCBzb21lIGFsbG9jYXRp
b25zIHJldmVhbCBvYmplY3QgaWRlbnRpdHkgKi9cCiAgICAgbWFjcm8oUmVnRXhwU3RhdGUpIFwK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklu
bGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3Ry
YWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHJldmlzaW9uIDE4MDcyMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkod29ya2luZyBj
b3B5KQpAQCAtMTAzMCw3ICsxMDMwLDggQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3Ry
YWN0U3RhdGVUeQogICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgZm9yTm9kZShu
b2RlKS5zZXQobV9ncmFwaCwgbV9ncmFwaC5tX3ZtLnN0cmluZ1N0cnVjdHVyZS5nZXQoKSk7CiAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6QXJndW1lbnRzOgorICAgICAg
ICBjYXNlIEFycmF5OjpEaXJlY3RBcmd1bWVudHM6CisgICAgICAgIGNhc2UgQXJyYXk6OlNjb3Bl
ZEFyZ3VtZW50czoKICAgICAgICAgICAgIGZvck5vZGUobm9kZSkubWFrZUhlYXBUb3AoKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpJbnQzMjoKQEAgLTE2MTcsOCAr
MTYxOCwxMSBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAg
ICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZToKICAgICAgICAgY2FzZSBBcnJheTo6U2xvd1B1
dEFycmF5U3RvcmFnZToKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpB
cmd1bWVudHM6Ci0gICAgICAgICAgICBmaWx0ZXIobm9kZS0+Y2hpbGQxKCksIFNwZWNBcmd1bWVu
dHMpOworICAgICAgICBjYXNlIEFycmF5OjpEaXJlY3RBcmd1bWVudHM6CisgICAgICAgICAgICBm
aWx0ZXIobm9kZS0+Y2hpbGQxKCksIFNwZWNEaXJlY3RBcmd1bWVudHMpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgQXJyYXk6OlNjb3BlZEFyZ3VtZW50czoKKyAgICAgICAgICAg
IGZpbHRlcihub2RlLT5jaGlsZDEoKSwgU3BlY1Njb3BlZEFyZ3VtZW50cyk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6SW50OEFycmF5OgogICAgICAgICAgICAgZmls
dGVyKG5vZGUtPmNoaWxkMSgpLCBTcGVjSW50OEFycmF5KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5jcHAJKHJldmlzaW9uIDE4MDcyMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTk3LDggKzE5NywxNSBAQCBBcnJheU1vZGUgQXJyYXlNb2RlOjpyZWZpbmUoCiAgICAgICAgIGlm
IChpc1N0cmluZ1NwZWN1bGF0aW9uKGJhc2UpKQogICAgICAgICAgICAgcmV0dXJuIHdpdGhUeXBl
KEFycmF5OjpTdHJpbmcpOwogICAgICAgICAKLSAgICAgICAgaWYgKGlzQXJndW1lbnRzU3BlY3Vs
YXRpb24oYmFzZSkpCi0gICAgICAgICAgICByZXR1cm4gd2l0aFR5cGUoQXJyYXk6OkFyZ3VtZW50
cyk7CisgICAgICAgIGlmIChpc0RpcmVjdEFyZ3VtZW50c1NwZWN1bGF0aW9uKGJhc2UpIHx8IGlz
U2NvcGVkQXJndW1lbnRzU3BlY3VsYXRpb24oYmFzZSkpIHsKKyAgICAgICAgICAgIC8vIEhhbmRs
ZSBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGFzIGdlbmVyaWMgYWNjZXNzZXMuCisgICAgICAgICAg
ICBpZiAoZ3JhcGguaGFzRXhpdFNpdGUobm9kZS0+b3JpZ2luLnNlbWFudGljLCBPdXRPZkJvdW5k
cykgfHwgIWlzSW5Cb3VuZHMoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gQXJyYXlNb2RlKEFy
cmF5OjpHZW5lcmljKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKGlzRGlyZWN0QXJn
dW1lbnRzU3BlY3VsYXRpb24oYmFzZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHdpdGhUeXBl
KEFycmF5OjpEaXJlY3RBcmd1bWVudHMpOworICAgICAgICAgICAgcmV0dXJuIHdpdGhUeXBlKEFy
cmF5OjpTY29wZWRBcmd1bWVudHMpOworICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBBcnJh
eU1vZGUgcmVzdWx0OwogICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKQEAgLTM5Niw4ICs0
MDMsMTEgQEAgYm9vbCBBcnJheU1vZGU6OmFscmVhZHlDaGVja2VkKEdyYXBoJiBncgogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0gfQogICAgICAgICAKLSAgICBjYXNlIEFycmF5
OjpBcmd1bWVudHM6Ci0gICAgICAgIHJldHVybiBzcGVjdWxhdGlvbkNoZWNrZWQodmFsdWUubV90
eXBlLCBTcGVjQXJndW1lbnRzKTsKKyAgICBjYXNlIEFycmF5OjpEaXJlY3RBcmd1bWVudHM6Cisg
ICAgICAgIHJldHVybiBzcGVjdWxhdGlvbkNoZWNrZWQodmFsdWUubV90eXBlLCBTcGVjRGlyZWN0
QXJndW1lbnRzKTsKKyAgICAgICAgCisgICAgY2FzZSBBcnJheTo6U2NvcGVkQXJndW1lbnRzOgor
ICAgICAgICByZXR1cm4gc3BlY3VsYXRpb25DaGVja2VkKHZhbHVlLm1fdHlwZSwgU3BlY1Njb3Bl
ZEFyZ3VtZW50cyk7CiAgICAgICAgIAogICAgIGNhc2UgQXJyYXk6OkludDhBcnJheToKICAgICAg
ICAgcmV0dXJuIHNwZWN1bGF0aW9uQ2hlY2tlZCh2YWx1ZS5tX3R5cGUsIFNwZWNJbnQ4QXJyYXkp
OwpAQCAtNDYxLDggKzQ3MSwxMCBAQCBjb25zdCBjaGFyKiBhcnJheVR5cGVUb1N0cmluZyhBcnJh
eTo6VHlwCiAgICAgICAgIHJldHVybiAiQXJyYXlTdG9yYWdlIjsKICAgICBjYXNlIEFycmF5OjpT
bG93UHV0QXJyYXlTdG9yYWdlOgogICAgICAgICByZXR1cm4gIlNsb3dQdXRBcnJheVN0b3JhZ2Ui
OwotICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czoKLSAgICAgICAgcmV0dXJuICJBcmd1bWVudHMi
OworICAgIGNhc2UgQXJyYXk6OkRpcmVjdEFyZ3VtZW50czoKKyAgICAgICAgcmV0dXJuICJEaXJl
Y3RBcmd1bWVudHMiOworICAgIGNhc2UgQXJyYXk6OlNjb3BlZEFyZ3VtZW50czoKKyAgICAgICAg
cmV0dXJuICJTY29wZWRBcmd1bWVudHMiOwogICAgIGNhc2UgQXJyYXk6OkludDhBcnJheToKICAg
ICAgICAgcmV0dXJuICJJbnQ4QXJyYXkiOwogICAgIGNhc2UgQXJyYXk6OkludDE2QXJyYXk6Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmgJKHJldmlzaW9uIDE4
MDcyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDEz
LCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMi0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtNjUsNyArNjUsOSBAQCBlbnVtIFR5cGUgewogICAgIEFycmF5
U3RvcmFnZSwKICAgICBTbG93UHV0QXJyYXlTdG9yYWdlLAogICAgIAotICAgIEFyZ3VtZW50cywK
KyAgICBEaXJlY3RBcmd1bWVudHMsCisgICAgU2NvcGVkQXJndW1lbnRzLAorICAgIAogICAgIElu
dDhBcnJheSwKICAgICBJbnQxNkFycmF5LAogICAgIEludDMyQXJyYXksCkBAIC0yOTQsNyArMjk2
LDggQEAgcHVibGljOgogICAgICAgICBjYXNlIEFycmF5OjpVbnByb2ZpbGVkOgogICAgICAgICBj
YXNlIEFycmF5OjpGb3JjZUV4aXQ6CiAgICAgICAgIGNhc2UgQXJyYXk6OkdlbmVyaWM6Ci0gICAg
ICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czoKKyAgICAgICAgY2FzZSBBcnJheTo6RGlyZWN0QXJn
dW1lbnRzOgorICAgICAgICBjYXNlIEFycmF5OjpTY29wZWRBcmd1bWVudHM6CiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKQEAgLTMyMCwxMSArMzIzLDkgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgc3dpdGNoICh0
eXBlKCkpIHsKICAgICAgICAgY2FzZSBBcnJheTo6U3RyaW5nOgorICAgICAgICBjYXNlIEFycmF5
OjpEaXJlY3RBcmd1bWVudHM6CisgICAgICAgIGNhc2UgQXJyYXk6OlNjb3BlZEFyZ3VtZW50czoK
ICAgICAgICAgICAgIHJldHVybiBBcnJheU1vZGUoQXJyYXk6OkdlbmVyaWMpOwotI2lmIFVTRShK
U1ZBTFVFMzJfNjQpCi0gICAgICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czoKLSAgICAgICAgICAg
IHJldHVybiBBcnJheU1vZGUoQXJyYXk6OkdlbmVyaWMpOwotI2VuZGlmCiAgICAgICAgIGRlZmF1
bHQ6CiAgICAgICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCShyZXZpc2lvbiAxODA3MjApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkod29ya2luZyBjb3B5KQpA
QCAtNDY2LDEwICs0NjYsMTQgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSog
bm9kZQogICAgICAgICAgICAgZGVmKFB1cmVWYWx1ZShub2RlLCBtb2RlLmFzV29yZCgpKSk7CiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAKLSAgICAgICAgY2FzZSBBcnJheTo6QXJn
dW1lbnRzOgotICAgICAgICAgICAgcmVhZChBcmd1bWVudHNfcmVnaXN0ZXJzKTsKLSAgICAgICAg
ICAgIHJlYWQoVmFyaWFibGVzKTsKLSAgICAgICAgICAgIGRlZihIZWFwTG9jYXRpb24oSW5kZXhl
ZFByb3BlcnR5TG9jLCBWYXJpYWJsZXMsIG5vZGUtPmNoaWxkMSgpLCBub2RlLT5jaGlsZDIoKSks
IG5vZGUpOworICAgICAgICBjYXNlIEFycmF5OjpEaXJlY3RBcmd1bWVudHM6CisgICAgICAgICAg
ICByZWFkKERpcmVjdEFyZ3VtZW50c1Byb3BlcnRpZXMpOworICAgICAgICAgICAgZGVmKEhlYXBM
b2NhdGlvbihJbmRleGVkUHJvcGVydHlMb2MsIERpcmVjdEFyZ3VtZW50c1Byb3BlcnRpZXMsIG5v
ZGUtPmNoaWxkMSgpLCBub2RlLT5jaGlsZDIoKSksIG5vZGUpOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXJyYXk6OlNjb3BlZEFyZ3VtZW50czoKKyAg
ICAgICAgICAgIHJlYWQoU2NvcGVkQXJndW1lbnRzUHJvcGVydGllcyk7CisgICAgICAgICAgICBk
ZWYoSGVhcExvY2F0aW9uKEluZGV4ZWRQcm9wZXJ0eUxvYywgU2NvcGVkQXJndW1lbnRzUHJvcGVy
dGllcywgbm9kZS0+Y2hpbGQxKCksIG5vZGUtPmNoaWxkMigpKSwgbm9kZSk7CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcnJheTo6SW50MzI6CkBAIC01
NjAsMTMgKzU2NCw2IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUK
ICAgICAgICAgICAgIHdyaXRlKEhlYXApOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAg
ICAgCi0gICAgICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czoKLSAgICAgICAgICAgIHJlYWQoQXJn
dW1lbnRzX3JlZ2lzdGVycyk7Ci0gICAgICAgICAgICByZWFkKE1pc2NGaWVsZHMpOwotICAgICAg
ICAgICAgd3JpdGUoVmFyaWFibGVzKTsKLSAgICAgICAgICAgIGRlZihIZWFwTG9jYXRpb24oSW5k
ZXhlZFByb3BlcnR5TG9jLCBWYXJpYWJsZXMsIGJhc2UsIGluZGV4KSwgdmFsdWUpOwotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQXJyYXk6OkludDMyOgog
ICAgICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzT3V0T2ZCb3VuZHMoKSkgewogICAg
ICAgICAgICAgICAgIHJlYWQoV29ybGQpOwpAQCAtNzYxLDcgKzc1OCw4IEBAIHZvaWQgY2xvYmJl
cml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICAgICAgICAgIGRlZihQdXJlVmFsdWUo
bm9kZSwgbW9kZS5hc1dvcmQoKSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAg
Ci0gICAgICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czoKKyAgICAgICAgY2FzZSBBcnJheTo6RGly
ZWN0QXJndW1lbnRzOgorICAgICAgICBjYXNlIEFycmF5OjpTY29wZWRBcmd1bWVudHM6CiAgICAg
ICAgICAgICByZWFkKE1pc2NGaWVsZHMpOwogICAgICAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihB
cnJheUxlbmd0aExvYywgTWlzY0ZpZWxkcywgbm9kZS0+Y2hpbGQxKCkpLCBub2RlKTsKICAgICAg
ICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQ
aGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1
cFBoYXNlLmNwcAkocmV2aXNpb24gMTgwNzIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdGaXh1cFBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjgyLDcgKzY4Miw2IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOgogICAgICAgICAgICAg
Y2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlOgogICAgICAgICAgICAgY2FzZSBBcnJheTo6U2xvd1B1
dEFycmF5U3RvcmFnZToKLSAgICAgICAgICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czoKICAgICAg
ICAgICAgICAgICBmaXhFZGdlPEtub3duQ2VsbFVzZT4oY2hpbGQxKTsKICAgICAgICAgICAgICAg
ICBmaXhFZGdlPEludDMyVXNlPihjaGlsZDIpOwogICAgICAgICAgICAgICAgIGluc2VydFN0b3Jl
QmFycmllcihtX2luZGV4SW5CbG9jaywgY2hpbGQxLCBjaGlsZDMpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lv
biAxODA3MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
NjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTk4LDggKzI1OTgsMTEgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBjYXNlIEFycmF5OjpTdHJpbmc6
CiAgICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPblN0cmluZyhub2RlKTsKICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6Ci0gICAgICAgICAgICBjb21w
aWxlR2V0QnlWYWxPbkFyZ3VtZW50cyhub2RlKTsKKyAgICAgICAgY2FzZSBBcnJheTo6RGlyZWN0
QXJndW1lbnRzOgorICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25EaXJlY3RBcmd1bWVudHMo
bm9kZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBcnJheTo6U2NvcGVkQXJn
dW1lbnRzOgorICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25TY29wZWRBcmd1bWVudHMobm9k
ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDogewogICAgICAgICAgICAg
VHlwZWRBcnJheVR5cGUgdHlwZSA9IG5vZGUtPmFycmF5TW9kZSgpLnR5cGVkQXJyYXlUeXBlKCk7
CkBAIC0yODI5LDQ3ICsyODMyLDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2Rl
KiBub2RlKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAotICAg
ICAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6IHsKLSAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5k
IHZhbHVlKHRoaXMsIGNoaWxkMyk7Ci0gICAgICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0
aGlzKTsKLSAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoMih0aGlzKTsKLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgR1BSUmVnIHZhbHVlUmVnID0gdmFsdWUuZ3ByKCk7Ci0gICAgICAg
ICAgICBHUFJSZWcgc2NyYXRjaFJlZyA9IHNjcmF0Y2guZ3ByKCk7Ci0gICAgICAgICAgICBHUFJS
ZWcgc2NyYXRjaDJSZWcgPSBzY3JhdGNoMi5ncHIoKTsKLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgaWYgKCFtX2NvbXBpbGVPa2F5KQotICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAg
ICAgICAgLy8gVHdvIHJlYWxseSBsYW1lIGNoZWNrcy4KLSAgICAgICAgICAgIHNwZWN1bGF0aW9u
Q2hlY2soCi0gICAgICAgICAgICAgICAgVW5jb3VudGFibGUsIEpTVmFsdWVTb3VyY2UoKSwgMCwK
LSAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2gzMigKLSAgICAgICAgICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsCi0gICAgICAgICAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEFyZ3VtZW50czo6b2Zmc2V0T2ZO
dW1Bcmd1bWVudHMoKSkpKTsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0gICAgICAg
ICAgICAgICAgVW5jb3VudGFibGUsIEpTVmFsdWVTb3VyY2UoKSwgMCwKLSAgICAgICAgICAgICAg
ICBtX2ppdC5icmFuY2hUZXN0UHRyKAotICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6Tm9uWmVybywKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
Ci0gICAgICAgICAgICAgICAgICAgICAgICBiYXNlUmVnLCBBcmd1bWVudHM6Om9mZnNldE9mU2xv
d0FyZ3VtZW50RGF0YSgpKSkpOwotCi0gICAgICAgICAgICBtX2ppdC5tb3ZlKHByb3BlcnR5UmVn
LCBzY3JhdGNoMlJlZyk7Ci0gICAgICAgICAgICBtX2ppdC5zaWduRXh0ZW5kMzJUb1B0cihzY3Jh
dGNoMlJlZywgc2NyYXRjaDJSZWcpOwotICAgICAgICAgICAgbV9qaXQubG9hZFB0cigKLSAgICAg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBBcmd1bWVudHM6Om9m
ZnNldE9mUmVnaXN0ZXJzKCkpLAotICAgICAgICAgICAgICAgIHNjcmF0Y2hSZWcpOwotICAgICAg
ICAgICAgCi0gICAgICAgICAgICBtX2ppdC5zdG9yZTY0KAotICAgICAgICAgICAgICAgIHZhbHVl
UmVnLAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoCi0gICAgICAg
ICAgICAgICAgICAgIHNjcmF0Y2hSZWcsIHNjcmF0Y2gyUmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGlt
ZXNFaWdodCwKLSAgICAgICAgICAgICAgICAgICAgQ2FsbEZyYW1lOjp0aGlzQXJndW1lbnRPZmZz
ZXQoKSAqIHNpemVvZihSZWdpc3RlcikgKyBzaXplb2YoUmVnaXN0ZXIpKSk7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIG5vUmVzdWx0KG5vZGUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICAgICAgICAgIAogICAgICAgICBkZWZhdWx0OiB7CiAgICAgICAgICAgICBUeXBl
ZEFycmF5VHlwZSB0eXBlID0gYXJyYXlNb2RlLnR5cGVkQXJyYXlUeXBlKCk7CiAgICAgICAgICAg
ICBpZiAoaXNJbnQodHlwZSkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gMTgwNzIwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcy
Miw5ICs3MjIsMTIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2hlY2tBcnJheShOb2RlKiBubwog
ICAgICAgICBub1Jlc3VsdChtX2N1cnJlbnROb2RlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
LSAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6Ci0gICAgICAgIHNwZWN1bGF0ZUNlbGxUeXBlV2l0
aG91dFR5cGVGaWx0ZXJpbmcobm9kZS0+Y2hpbGQxKCksIGJhc2VSZWcsIEFyZ3VtZW50c1R5cGUp
OwotCisgICAgY2FzZSBBcnJheTo6RGlyZWN0QXJndW1lbnRzOgorICAgICAgICBzcGVjdWxhdGVD
ZWxsVHlwZVdpdGhvdXRUeXBlRmlsdGVyaW5nKG5vZGUtPmNoaWxkMSgpLCBiYXNlUmVnLCBEaXJl
Y3RBcmd1bWVudHNUeXBlKTsKKyAgICAgICAgbm9SZXN1bHQobV9jdXJyZW50Tm9kZSk7CisgICAg
ICAgIHJldHVybjsKKyAgICBjYXNlIEFycmF5OjpTY29wZWRBcmd1bWVudHM6CisgICAgICAgIHNw
ZWN1bGF0ZUNlbGxUeXBlV2l0aG91dFR5cGVGaWx0ZXJpbmcobm9kZS0+Y2hpbGQxKCksIGJhc2VS
ZWcsIFNjb3BlZEFyZ3VtZW50c1R5cGUpOwogICAgICAgICBub1Jlc3VsdChtX2N1cnJlbnROb2Rl
KTsKICAgICAgICAgcmV0dXJuOwogICAgIGRlZmF1bHQ6CkBAIC00MDg4LDcgKzQwOTEsNyBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0VHlwZWRBcnJhCiAgICAgaW50MzJSZXN1bHQo
dmVjdG9yR1BSLCBub2RlKTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5
VmFsT25Bcmd1bWVudHMoTm9kZSogbm9kZSkKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVH
ZXRCeVZhbE9uRGlyZWN0QXJndW1lbnRzKE5vZGUqIG5vZGUpCiB7CiAgICAgU3BlY3VsYXRlQ2Vs
bE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgU3BlY3VsYXRlU3RyaWN0
SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKQEAgLTQxMDMsODAg
KzQxMDYsODkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25BcgogICAg
IEdQUlJlZyByZXN1bHRSZWcgPSByZXN1bHQuZ3ByKCk7CiAjaWYgVVNFKEpTVkFMVUUzMl82NCkK
ICAgICBHUFJSZWcgcmVzdWx0VGFnUmVnID0gcmVzdWx0VGFnLmdwcigpOworICAgIEpTVmFsdWVS
ZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZXN1bHRUYWdSZWcsIHJlc3VsdFJlZyk7Cisj
ZWxzZQorICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZXN1bHRSZWcp
OwogI2VuZGlmCiAgICAgR1BSUmVnIHNjcmF0Y2hSZWcgPSBzY3JhdGNoLmdwcigpOwogICAgIAog
ICAgIGlmICghbV9jb21waWxlT2theSkKICAgICAgICAgcmV0dXJuOwotICAKLSAgICBBU1NFUlQo
QXJyYXlNb2RlKEFycmF5OjpBcmd1bWVudHMpLmFscmVhZHlDaGVja2VkKG1faml0LmdyYXBoKCks
IG5vZGUsIG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSkpKTsKICAgICAKLSAgICAvLyBU
d28gcmVhbGx5IGxhbWUgY2hlY2tzLgotICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0gICAgICAgIEV4
b3RpY09iamVjdE1vZGUsIEpTVmFsdWVTb3VyY2UoKSwgMCwKLSAgICAgICAgbV9qaXQuYnJhbmNo
MzIoCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJl
ZywKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEFyZ3VtZW50
czo6b2Zmc2V0T2ZOdW1Bcmd1bWVudHMoKSkpKTsKKyAgICBBU1NFUlQoQXJyYXlNb2RlKEFycmF5
OjpEaXJlY3RBcmd1bWVudHMpLmFscmVhZHlDaGVja2VkKG1faml0LmdyYXBoKCksIG5vZGUsIG1f
c3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSkpKTsKKyAgICAKICAgICBzcGVjdWxhdGlvbkNo
ZWNrKAogICAgICAgICBFeG90aWNPYmplY3RNb2RlLCBKU1ZhbHVlU291cmNlKCksIDAsCiAgICAg
ICAgIG1faml0LmJyYW5jaFRlc3RQdHIoCiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm9u
WmVybywKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKAotICAgICAgICAgICAg
ICAgIGJhc2VSZWcsIEFyZ3VtZW50czo6b2Zmc2V0T2ZTbG93QXJndW1lbnREYXRhKCkpKSk7Ci0g
ICAgCi0gICAgbV9qaXQubW92ZShwcm9wZXJ0eVJlZywgcmVzdWx0UmVnKTsKLSAgICBtX2ppdC5z
aWduRXh0ZW5kMzJUb1B0cihyZXN1bHRSZWcsIHJlc3VsdFJlZyk7Ci0gICAgbV9qaXQubG9hZFB0
cigKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgQXJndW1lbnRzOjpv
ZmZzZXRPZlJlZ2lzdGVycygpKSwKLSAgICAgICAgc2NyYXRjaFJlZyk7CisgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBEaXJlY3RBcmd1bWVudHM6Om9mZnNldE9m
T3ZlcnJpZGVzKCkpKSk7CisgICAgc3BlY3VsYXRpb25DaGVjaygKKyAgICAgICAgRXhvdGljT2Jq
ZWN0TW9kZSwgSlNWYWx1ZVNvdXJjZSgpLCAwLAorICAgICAgICBtX2ppdC5icmFuY2gzMigKKyAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLAorICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgRGlyZWN0QXJndW1lbnRz
OjpvZmZzZXRPZkxlbmd0aCgpKSkpOwogICAgIAotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAg
bV9qaXQubG9hZDMyKAotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KAotICAgICAg
ICAgICAgc2NyYXRjaFJlZywgcmVzdWx0UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwK
LSAgICAgICAgICAgIENhbGxGcmFtZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCkgKiBzaXplb2YoUmVn
aXN0ZXIpICsgc2l6ZW9mKFJlZ2lzdGVyKSArCi0gICAgICAgICAgICBPQkpFQ1RfT0ZGU0VUT0Yo
SlNWYWx1ZSwgdS5hc0JpdHMudGFnKSksCi0gICAgICAgIHJlc3VsdFRhZ1JlZyk7Ci0gICAgbV9q
aXQubG9hZDMyKAotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KAotICAgICAgICAg
ICAgc2NyYXRjaFJlZywgcmVzdWx0UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwKLSAg
ICAgICAgICAgIENhbGxGcmFtZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0
ZXIpICsgc2l6ZW9mKFJlZ2lzdGVyKSArCi0gICAgICAgICAgICBPQkpFQ1RfT0ZGU0VUT0YoSlNW
YWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpLAotICAgICAgICByZXN1bHRSZWcpOwotICAgIGpzVmFs
dWVSZXN1bHQocmVzdWx0VGFnUmVnLCByZXN1bHRSZWcsIG5vZGUpOwotI2Vsc2UKLSAgICBtX2pp
dC5sb2FkNjQoCisgICAgbV9qaXQubG9hZFZhbHVlKAogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
QmFzZUluZGV4KAotICAgICAgICAgICAgc2NyYXRjaFJlZywgcmVzdWx0UmVnLCBNYWNyb0Fzc2Vt
Ymxlcjo6VGltZXNFaWdodCwKLSAgICAgICAgICAgIENhbGxGcmFtZTo6dGhpc0FyZ3VtZW50T2Zm
c2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpICsgc2l6ZW9mKFJlZ2lzdGVyKSksCi0gICAgICAgIHJl
c3VsdFJlZyk7Ci0gICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWcsIG5vZGUpOwotI2VuZGlmCisg
ICAgICAgICAgICBiYXNlUmVnLCBwcm9wZXJ0eVJlZywgVGltZXNFaWdodCwgRGlyZWN0QXJndW1l
bnRzOjpzdG9yYWdlT2Zmc2V0KCkpLAorICAgICAgICByZXN1bHRSZWdzKTsKKyAgICAKKyAgICBq
c1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG5vZGUpOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlR2V0QXJndW1lbnRzTGVuZ3RoKE5vZGUqIG5vZGUpCit2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlR2V0QnlWYWxPblNjb3BlZEFyZ3VtZW50cyhOb2RlKiBub2RlKQogewogICAg
IFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgIEdQ
UlRlbXBvcmFyeSByZXN1bHQodGhpcywgUmV1c2UsIGJhc2UpOworICAgIFNwZWN1bGF0ZVN0cmlj
dEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBub2RlLT5jaGlsZDIoKSk7CisgICAgR1BSVGVt
cG9yYXJ5IHJlc3VsdCh0aGlzKTsKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgIEdQUlRlbXBv
cmFyeSByZXN1bHRUYWcodGhpcyk7CisjZW5kaWYKKyAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0
aGlzKTsKKyAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaDIodGhpcyk7CiAgICAgCiAgICAgR1BSUmVn
IGJhc2VSZWcgPSBiYXNlLmdwcigpOworICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5
LmdwcigpOwogICAgIEdQUlJlZyByZXN1bHRSZWcgPSByZXN1bHQuZ3ByKCk7CisjaWYgVVNFKEpT
VkFMVUUzMl82NCkKKyAgICBHUFJSZWcgcmVzdWx0VGFnUmVnID0gcmVzdWx0VGFnLmdwcigpOwor
ICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZXN1bHRUYWdSZWcsIHJl
c3VsdFJlZyk7CisjZWxzZQorICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVn
cyhyZXN1bHRSZWcpOworI2VuZGlmCisgICAgR1BSUmVnIHNjcmF0Y2hSZWcgPSBzY3JhdGNoLmdw
cigpOworICAgIEdQUlJlZyBzY3JhdGNoMlJlZyA9IHNjcmF0Y2gyLmdwcigpOwogICAgIAogICAg
IGlmICghbV9jb21waWxlT2theSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIEFTU0VSVChB
cnJheU1vZGUoQXJyYXk6OkFyZ3VtZW50cykuYWxyZWFkeUNoZWNrZWQobV9qaXQuZ3JhcGgoKSwg
bm9kZSwgbV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgpKSkpOworICAgIEFTU0VSVChBcnJh
eU1vZGUoQXJyYXk6OlNjb3BlZEFyZ3VtZW50cykuYWxyZWFkeUNoZWNrZWQobV9qaXQuZ3JhcGgo
KSwgbm9kZSwgbV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgpKSkpOworICAgIAorICAgIG1f
aml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgU2NvcGVkQXJndW1l
bnRzOjpvZmZzZXRPZlRhYmxlKCkpLCBzY3JhdGNoUmVnKTsKKyAgICBtX2ppdC5sb2FkUHRyKE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIFNjb3BlZEFyZ3VtZW50czo6b2Zmc2V0T2ZT
Y29wZSgpKSwgc2NyYXRjaDJSZWcpOwogICAgIAogICAgIHNwZWN1bGF0aW9uQ2hlY2soCiAgICAg
ICAgIEV4b3RpY09iamVjdE1vZGUsIEpTVmFsdWVTb3VyY2UoKSwgMCwKLSAgICAgICAgbV9qaXQu
YnJhbmNoVGVzdDgoCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywKLSAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEFyZ3VtZW50czo6b2Zmc2V0
T2ZPdmVycm9kZUxlbmd0aCgpKSkpOworICAgICAgICBtX2ppdC5icmFuY2gzMigKKyAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLAorICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoU2NvcGVkQXJndW1lbnRzVGFibGU6Om9mZnNldE9m
TGVuZ3RoKCkpKSk7CisgICAgCisgICAgbV9qaXQubG9hZFB0cigKKyAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3Moc2NyYXRjaFJlZywgU2NvcGVkQXJndW1lbnRzVGFibGU6Om9mZnNldE9m
QXJndW1lbnRzKCkpLAorICAgICAgICBzY3JhdGNoUmVnKTsKKyAgICBtX2ppdC5sb2FkMzIoTWFj
cm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzY3JhdGNoUmVnLCBwcm9wZXJ0eVJlZywgVGltZXNGb3Vy
KSwgc2NyYXRjaFJlZyk7CisgICAgCisgICAgc3BlY3VsYXRpb25DaGVjaygKKyAgICAgICAgRXhv
dGljT2JqZWN0TW9kZSwgSlNWYWx1ZVNvdXJjZSgpLCAwLAorICAgICAgICBtX2ppdC5icmFuY2gz
MigKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgc2NyYXRjaFJlZywgVHJ1c3Rl
ZEltbTMyKFNjb3BlT2Zmc2V0OjppbnZhbGlkT2Zmc2V0KSkpOworICAgIAorICAgIG1faml0Lmxv
YWRWYWx1ZSgKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleCgKKyAgICAgICAgICAg
IGJhc2UyUmVnLCBwcm9wZXJ0eVJlZywgVGltZXNFaWdodCwgSlNFbnZpcm9ubWVudFJlY29yZDo6
b2Zmc2V0T2ZWYXJpYWJsZXMoKSksCisgICAgICAgIHJlc3VsdFJlZ3MpOwogICAgIAotICAgIG1f
aml0LmxvYWQzMigKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgQXJn
dW1lbnRzOjpvZmZzZXRPZk51bUFyZ3VtZW50cygpKSwKLSAgICAgICAgcmVzdWx0UmVnKTsKLSAg
ICBpbnQzMlJlc3VsdChyZXN1bHRSZWcsIG5vZGUpOworICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0
UmVncywgbm9kZSk7CiB9CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRTY29wZShO
b2RlKiBub2RlKQpAQCAtNDIzMiw4ICs0MjQ0LDU2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVHZXRBcnJheUxlbmcKICAgICAgICAgaW50MzJSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czogewotICAg
ICAgICBjb21waWxlR2V0QXJndW1lbnRzTGVuZ3RoKG5vZGUpOworICAgIGNhc2UgQXJyYXk6OkRp
cmVjdEFyZ3VtZW50czogeworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMs
IG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBSZXVz
ZSwgYmFzZSk7CisgICAgICAgIAorICAgICAgICBHUFJSZWcgYmFzZVJlZyA9IGJhc2UuZ3ByKCk7
CisgICAgICAgIEdQUlJlZyByZXN1bHRSZWcgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIAorICAg
ICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAor
ICAgICAgICBBU1NFUlQoQXJyYXlNb2RlKEFycmF5OjpEaXJlY3RBcmd1bWVudHMpLmFscmVhZHlD
aGVja2VkKG1faml0LmdyYXBoKCksIG5vZGUsIG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEo
KSkpKTsKKyAgICAgICAgCisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCisgICAgICAgICAgICBF
eG90aWNPYmplY3RNb2RlLCBKU1ZhbHVlU291cmNlKCksIDAsCisgICAgICAgICAgICBtX2ppdC5i
cmFuY2hUZXN0UHRyKAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLAor
ICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIERpcmVjdEFy
Z3VtZW50czo6b2Zmc2V0T2ZPdmVycmlkZXMoKSkpKTsKKyAgICAgICAgCisgICAgICAgIG1faml0
LmxvYWQzMigKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIERp
cmVjdEFyZ3VtZW50czo6b2Zmc2V0T2ZMZW5ndGgoKSksIHJlc3VsdFJlZyk7CisgICAgICAgIAor
ICAgICAgICBpbnQzMlJlc3VsdChyZXN1bHRSZWcsIG5vZGUpOworICAgICAgICBicmVhazsKKyAg
ICB9CisgICAgY2FzZSBBcnJheTo6U2NvcGVkQXJndW1lbnRzOiB7CisgICAgICAgIFNwZWN1bGF0
ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBHUFJUZW1w
b3JhcnkgcmVzdWx0KHRoaXMsIFJldXNlLCBiYXNlKTsKKyAgICAgICAgCisgICAgICAgIEdQUlJl
ZyBiYXNlUmVnID0gYmFzZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdFJlZyA9IHJlc3Vs
dC5ncHIoKTsKKyAgICAgICAgCisgICAgICAgIGlmICghbV9jb21waWxlT2theSkKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIEFTU0VSVChBcnJheU1vZGUoQXJyYXk6OlNj
b3BlZEFyZ3VtZW50cykuYWxyZWFkeUNoZWNrZWQobV9qaXQuZ3JhcGgoKSwgbm9kZSwgbV9zdGF0
ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgpKSkpOworICAgICAgICAKKyAgICAgICAgc3BlY3VsYXRp
b25DaGVjaygKKyAgICAgICAgICAgIEV4b3RpY09iamVjdE1vZGUsIEpTVmFsdWVTb3VyY2UoKSwg
MCwKKyAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3Q4KAorICAgICAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpOb25aZXJvLAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKGJhc2VSZWcsIFNjb3BlZEFyZ3VtZW50czo6b2Zmc2V0T2ZPdmVycm9kZVRoaW5ncygpKSkp
OworICAgICAgICAKKyAgICAgICAgbV9qaXQubG9hZFB0cigKKyAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIFNjb3BlZEFyZ3VtZW50czo6b2Zmc2V0T2ZUYWJsZSgp
KSwgcmVzdWx0UmVnKTsKKyAgICAgICAgCisgICAgICAgIG1faml0LmxvYWQzMigKKyAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJlc3VsdFJlZywgU2NvcGVkQXJndW1lbnRzVGFi
bGU6Om9mZnNldE9mTGVuZ3RoKCkpLAorICAgICAgICAgICAgcmVzdWx0UmVnKTsKKyAgICAgICAg
CisgICAgICAgIGludDMyUmVzdWx0KHJlc3VsdFJlZywgbm9kZSk7CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KICAgICBkZWZhdWx0OiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVC5oCShyZXZpc2lvbiAxODA3MjApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTIxNTIs
OCArMjE1Miw5IEBAIHB1YmxpYzoKICAgICB2b2lkIGNvbXBpbGVHZXRCeVZhbE9uU3RyaW5nKE5v
ZGUqKTsKICAgICB2b2lkIGNvbXBpbGVGcm9tQ2hhckNvZGUoTm9kZSopOyAKIAotICAgIHZvaWQg
Y29tcGlsZUdldEJ5VmFsT25Bcmd1bWVudHMoTm9kZSopOwotICAgIHZvaWQgY29tcGlsZUdldEFy
Z3VtZW50c0xlbmd0aChOb2RlKik7CisgICAgdm9pZCBjb21waWxlR2V0QnlWYWxPbkRpcmVjdEFy
Z3VtZW50cyhOb2RlKik7CisgICAgdm9pZCBjb21waWxlR2V0QnlWYWxPblNjb3BlZEFyZ3VtZW50
cyhOb2RlKik7CisgICAgCiAgICAgdm9pZCBjb21waWxlR2V0U2NvcGUoTm9kZSopOwogICAgIHZv
aWQgY29tcGlsZVNraXBTY29wZShOb2RlKik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5oCShyZXZpc2lvbiAx
ODA3MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9z
aXRvcnkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00Niw2ICs0Niw4IEBAIG5hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgRlRMIHsKICAgICBtYWNybyhCdXR0ZXJmbHlfcHVibGljTGVuZ3RoLCBCdXR0
ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpIFwKICAgICBtYWNybyhCdXR0ZXJmbHlfdmVj
dG9yTGVuZ3RoLCBCdXR0ZXJmbHk6Om9mZnNldE9mVmVjdG9yTGVuZ3RoKCkpIFwKICAgICBtYWNy
byhDYWxsRnJhbWVfY2FsbGVyRnJhbWUsIENhbGxGcmFtZTo6Y2FsbGVyRnJhbWVPZmZzZXQoKSkg
XAorICAgIG1hY3JvKERpcmVjdEFyZ3VtZW50c19sZW5ndGgsIERpcmVjdEFyZ3VtZW50czo6b2Zm
c2V0T2ZMZW5ndGgoKSkgXAorICAgIG1hY3JvKERpcmVjdEFyZ3VtZW50c19vdmVycmlkZXMsIERp
cmVjdEFyZ3VtZW50czo6b2Zmc2V0T2ZPdmVycmlkZXMoKSkgXAogICAgIG1hY3JvKEdldHRlclNl
dHRlcl9nZXR0ZXIsIEdldHRlclNldHRlcjo6b2Zmc2V0T2ZHZXR0ZXIoKSkgXAogICAgIG1hY3Jv
KEdldHRlclNldHRlcl9zZXR0ZXIsIEdldHRlclNldHRlcjo6b2Zmc2V0T2ZTZXR0ZXIoKSkgXAog
ICAgIG1hY3JvKEpTQXJyYXlCdWZmZXJWaWV3X2xlbmd0aCwgSlNBcnJheUJ1ZmZlclZpZXc6Om9m
ZnNldE9mTGVuZ3RoKCkpIFwKQEAgLTcyLDYgKzc0LDExIEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgRlRMIHsKICAgICBtYWNybyhKU1dyYXBwZXJPYmplY3RfaW50ZXJuYWxWYWx1ZSwgSlNX
cmFwcGVyT2JqZWN0OjppbnRlcm5hbFZhbHVlT2Zmc2V0KCkpIFwKICAgICBtYWNybyhNYXJrZWRB
bGxvY2F0b3JfZnJlZUxpc3RIZWFkLCBNYXJrZWRBbGxvY2F0b3I6Om9mZnNldE9mRnJlZUxpc3RI
ZWFkKCkpIFwKICAgICBtYWNybyhNYXJrZWRCbG9ja19tYXJrQml0cywgTWFya2VkQmxvY2s6Om9m
ZnNldE9mTWFya3MoKSkgXAorICAgIG1hY3JvKFNjb3BlZEFyZ3VtZW50c19vdmVycm9kZVRoaW5n
cywgU2NvcGVkQXJndW1lbnRzOjpvZmZzZXRPZk92ZXJyb2RlVGhpbmdzKCkpKSBcCisgICAgbWFj
cm8oU2NvcGVkQXJndW1lbnRzX3Njb3BlLCBTY29wZWRBcmd1bWVudHM6Om9mZmV0T2ZTY29wZSgp
KSkgXAorICAgIG1hY3JvKFNjb3BlZEFyZ3VtZW50c190YWJsZSwgU2NvcGVkQXJndW1lbnRzOjpv
ZmZldE9mVGFibGUoKSkpIFwKKyAgICBtYWNybyhTY29wZWRBcmd1bWVudHNUYWJsZV9hcmd1bWVu
dHMsIFNjb3BlZEFyZ3VtZW50c1RhYmxlOjpvZmZldE9mQXJndW1lbnRzKCkpKSBcCisgICAgbWFj
cm8oU2NvcGVkQXJndW1lbnRzVGFibGVfbGVuZ3RoLCBTY29wZWRBcmd1bWVudHNUYWJsZTo6b2Zm
ZXRPZkxlbmd0aCgpKSkgXAogICAgIG1hY3JvKFN0cmluZ0ltcGxfZGF0YSwgU3RyaW5nSW1wbDo6
ZGF0YU9mZnNldCgpKSBcCiAgICAgbWFjcm8oU3RyaW5nSW1wbF9oYXNoQW5kRmxhZ3MsIFN0cmlu
Z0ltcGw6OmZsYWdzT2Zmc2V0KCkpIFwKICAgICBtYWNybyhTdHJ1Y3R1cmVfY2xhc3NJbmZvLCBT
dHJ1Y3R1cmU6OmNsYXNzSW5mb09mZnNldCgpKSBcCkBAIC04MCw2ICs4Nyw4IEBAIG5hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKICAgICBtYWNybyhTdHJ1Y3R1cmVfc3RydWN0dXJlSUQs
IFN0cnVjdHVyZTo6c3RydWN0dXJlSURPZmZzZXQoKSkKIAogI2RlZmluZSBGT1JfRUFDSF9JTkRF
WEVEX0FCU1RSQUNUX0hFQVAobWFjcm8pIFwKKyAgICBtYWNybyhEaXJlY3RBcmd1bWVudHNfc3Rv
cmFnZSwgRGlyZWN0QXJndW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCksIHNpemVvZihFbmNvZGVkSlNW
YWx1ZSkpIFwKKyAgICBtYWNybyhKU0Vudmlyb25tZW50UmVjb3JkX3ZhcmlhYmxlLCBKU0Vudmly
b25tZW50UmVjb3JkOjpvZmZzZXRPZlZhcmlhYmxlcygpLCBzaXplb2YoRW5jb2RlZEpTVmFsdWUp
KSBcCiAgICAgbWFjcm8oSlNSb3BlU3RyaW5nX2ZpYmVycywgSlNSb3BlU3RyaW5nOjpvZmZzZXRP
ZkZpYmVycygpLCBzaXplb2YoV3JpdGVCYXJyaWVyPEpTU3RyaW5nPikpIFwKICAgICBtYWNybyhj
aGFyYWN0ZXJzOCwgMCwgc2l6ZW9mKExDaGFyKSkgXAogICAgIG1hY3JvKGNoYXJhY3RlcnMxNiwg
MCwgc2l6ZW9mKFVDaGFyKSkgXApAQCAtODcsNiArOTYsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIEZUTCB7CiAgICAgbWFjcm8oaW5kZXhlZERvdWJsZVByb3BlcnRpZXMsIDAsIHNpemVv
Zihkb3VibGUpKSBcCiAgICAgbWFjcm8oaW5kZXhlZENvbnRpZ3VvdXNQcm9wZXJ0aWVzLCAwLCBz
aXplb2YoRW5jb2RlZEpTVmFsdWUpKSBcCiAgICAgbWFjcm8oaW5kZXhlZEFycmF5U3RvcmFnZVBy
b3BlcnRpZXMsIDAsIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpIFwKKyAgICBtYWNybyhzY29wZWRB
cmd1ZW1udHNUYWJsZUFyZ3VtZW50cywgMCwgc2l6ZW9mKGludDMyX3QpKSBcCiAgICAgbWFjcm8o
c2luZ2xlQ2hhcmFjdGVyU3RyaW5ncywgMCwgc2l6ZW9mKEpTU3RyaW5nKikpIFwKICAgICBtYWNy
byh2YXJpYWJsZXMsIDAsIHNpemVvZihSZWdpc3RlcikpCiAgICAgCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCShyZXZpc2lvbiAxODA3MjAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIwOSw2ICsyMDksOCBAQCBpbmxpbmUgQ2FwYWJpbGl0eUxldmVsIGNhbkNv
bXBpbGUoTm9kZSogCiAgICAgICAgIGNhc2UgQXJyYXk6OkludDMyOgogICAgICAgICBjYXNlIEFy
cmF5OjpEb3VibGU6CiAgICAgICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6CisgICAgICAgIGNh
c2UgQXJyYXk6OkRpcmVjdEFyZ3VtZW50czoKKyAgICAgICAgY2FzZSBBcnJheTo6U2NvcGVkQXJn
dW1lbnRzOgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAg
ICBpZiAoaXNUeXBlZFZpZXcobm9kZS0+YXJyYXlNb2RlKCkudHlwZWRBcnJheVR5cGUoKSkpCkBA
IC0yMjIsNiArMjI0LDggQEAgaW5saW5lIENhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxlKE5vZGUq
IAogICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6CiAgICAgICAgIGNhc2UgQXJyYXk6OkNvbnRp
Z3VvdXM6CiAgICAgICAgIGNhc2UgQXJyYXk6OlN0cmluZzoKKyAgICAgICAgY2FzZSBBcnJheTo6
RGlyZWN0QXJndW1lbnRzOgorICAgICAgICBjYXNlIEFycmF5OjpTY29wZWRBcmd1bWVudHM6CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIGlmIChpc1R5
cGVkVmlldyhub2RlLT5hcnJheU1vZGUoKS50eXBlZEFycmF5VHlwZSgpKSkKQEAgLTI0OCw2ICsy
NTIsOCBAQCBpbmxpbmUgQ2FwYWJpbGl0eUxldmVsIGNhbkNvbXBpbGUoTm9kZSogCiAgICAgICAg
IGNhc2UgQXJyYXk6OkludDMyOgogICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6CiAgICAgICAg
IGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6CisgICAgICAgIGNhc2UgQXJyYXk6OkRpcmVjdEFyZ3Vt
ZW50czoKKyAgICAgICAgY2FzZSBBcnJheTo6U2NvcGVkQXJndW1lbnRzOgogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBpZiAoaXNUeXBlZFZpZXcobm9k
ZS0+YXJyYXlNb2RlKCkudHlwZWRBcnJheVR5cGUoKSkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkocmV2aXNpb24gMTgwNzIwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIxOTUsNiArMjE5NSwyNSBAQCBwcml2YXRlOgogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9CiAgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBBcnJheTo6RGlyZWN0
QXJndW1lbnRzOiB7CisgICAgICAgICAgICBMVmFsdWUgYXJndW1lbnRzID0gbG93Q2VsbChtX291
dC0+Y2hpbGQxKCkpOworICAgICAgICAgICAgc3BlY3VsYXRlKAorICAgICAgICAgICAgICAgIEV4
b3RpY09iamVjdE1vZGUsIG5vVmFsdWUoKSwgbnVsbHB0ciwKKyAgICAgICAgICAgICAgICBtX291
dC5ub3ROdWxsKG1fb3V0LmxvYWRQdHIoYXJndW1lbnRzLCBtX2hlYXBzLkRpcmVjdEFyZ3VtZW50
c19vdmVycmlkZXMpKSk7CisgICAgICAgICAgICBzZXRJbnQzMihtX291dC5sb2FkMzJOb25OZWdh
dGl2ZShhcmd1bWVudHMsIG1faGVhcHMuRGlyZWN0QXJndW1lbnRzX2xlbmd0aCkpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBBcnJh
eTo6U2NvcGVkQXJndW1lbnRzOiB7CisgICAgICAgICAgICBMVmFsdWUgYXJndW1lbnRzID0gbG93
Q2VsbChtX291dC0+Y2hpbGQxKCkpOworICAgICAgICAgICAgc3BlY3VsYXRlKAorICAgICAgICAg
ICAgICAgIEV4b3RpY09iamVjdE1vZGUsIG5vVmFsdWUoKSwgbnVsbHB0ciwKKyAgICAgICAgICAg
ICAgICBtX291dC5ub3RaZXJvOChtX291dC5sb2FkUHRyKGFyZ3VtZW50cywgbV9oZWFwcy5TY29w
ZWRBcmd1bWVudHNfb3ZlcnJvZGVUaGluZ3MpKSk7CisgICAgICAgICAgICBMVmFsdWUgdGFibGUg
PSBtX291dC5sb2FkUHRyKGFyZ3VtZW50cywgbV9oZWFwcy5TY29wZWRBcmd1bWVudHNfdGFibGUp
OworICAgICAgICAgICAgc2V0SW50MzIobV9vdXQubG9hZDMyTm9uTmVnYXRpdmUodGFibGUsIG1f
aGVhcHMuU2NvcGVkQXJndW1lbnRzVGFibGVfbGVuZ3RoKSk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICAgICAgICAgIAogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAg
aWYgKGlzVHlwZWRWaWV3KG1fbm9kZS0+YXJyYXlNb2RlKCkudHlwZWRBcnJheVR5cGUoKSkpIHsK
ICAgICAgICAgICAgICAgICBzZXRJbnQzMigKQEAgLTIzMTIsNiArMjMzMSw0OSBAQCBwcml2YXRl
OgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgICAgICAKKyAgICAgICAg
Y2FzZSBBcnJheTo6RGlyZWN0QXJndW1lbnRzOiB7CisgICAgICAgICAgICBMVmFsdWUgYmFzZSA9
IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBMVmFsdWUgaW5kZXggPSBs
b3dJbnQzMihtX25vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgc3Bl
Y3VsYXRlKAorICAgICAgICAgICAgICAgIEV4b3RpY09iamVjdE1vZGUsIG5vVmFsdWUoKSwgbnVs
bHB0ciwKKyAgICAgICAgICAgICAgICBtX291dC5ub25OdWxsKG1fb3V0LmxvYWRQdHIoYmFzZSwg
bV9oZWFwcy5EaXJlY3RBcmd1bWVudHNfb3ZlcnJpZGVzKSkpOworICAgICAgICAgICAgc3BlY3Vs
YXRlKAorICAgICAgICAgICAgICAgIEV4b3RpY09iamVjdE1vZGUsIG5vVmFsdWUoKSwgbnVsbHB0
ciwKKyAgICAgICAgICAgICAgICBtX291dC5hYm92ZU9yRXF1YWwoCisgICAgICAgICAgICAgICAg
ICAgIGluZGV4LAorICAgICAgICAgICAgICAgICAgICBtX291dC5sb2FkMzJOb25OZWdhdGl2ZShi
YXNlLCBtX2hlYXBzLkRpcmVjdEFyZ3VtZW50c19sZW5ndGgpKSk7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIHNldEpTVmFsdWUobV9vdXQubG9hZDY0KGJhc2VJbmRleChtX2hlYXBzLkRpcmVj
dEFyZ3VtZW50c19zdG9yYWdlLCBiYXNlLCBpbmRleCkpKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXJyYXk6OlNjb3BlZEFyZ3Vt
ZW50czogeworICAgICAgICAgICAgTFZhbHVlIGJhc2UgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQx
KCkpOworICAgICAgICAgICAgTFZhbHVlIGluZGV4ID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDIo
KSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIExWYWx1ZSB0YWJsZSA9IG1fb3V0LmxvYWRQ
dHIoYmFzZSwgbV9oZWFwcy5TY29wZWRBcmd1bWVudHNfdGFibGUpOworICAgICAgICAgICAgTFZh
bHVlIHNjb3BlID0gbV9vdXQubG9hZFB0cihiYXNlLCBtX2hlYXBzLlNjb3BlZEFyZ3VtZW50c19z
Y29wZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHNwZWN1bGF0ZSgKKyAgICAgICAgICAg
ICAgICBFeG90aWNPYmplY3RNb2RlLCBub1ZhbHVlKCksIG51bGxwdHIsCisgICAgICAgICAgICAg
ICAgbV9vdXQuYWJvdmVPckVxdWFsKAorICAgICAgICAgICAgICAgICAgICBpbmRleCwKKyAgICAg
ICAgICAgICAgICAgICAgbV9vdXQubG9hZDMyTm9uTmVnYXRpdmUoYmFzZSwgbV9oZWFwcy5TY29w
ZWRBcmd1bWVudHNUYWJsZV9sZW5ndGgpKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIExW
YWx1ZSBhcmd1bWVudHMgPSBtX291dC5sb2FkUHRyKGJhc2UsIG1faGVhcHMuU2NvcGVkQXJndW1l
bnRzVGFibGVfYXJndW1lbnRzKTsKKyAgICAgICAgICAgIExWYWx1ZSBzY29wZU9mZnNldCA9IG1f
b3V0LmxvYWQzMigKKyAgICAgICAgICAgICAgICBiYXNlSW5kZXgobV9oZWFwcy5zY29wZWRBcmd1
bWVudHNUYWJsZUFyZ3VtZW50cywgYXJndW1lbnRzLCBpbmRleCkpOworICAgICAgICAgICAgCisg
ICAgICAgICAgICBzcGVjdWxhdGUoCisgICAgICAgICAgICAgICAgRXhvdGljT2JqZWN0TW9kZSwg
bm9WYWx1ZSgpLCBudWxscHRyLAorICAgICAgICAgICAgICAgIG1fb3V0LmVxdWFsKHNjb3BlT2Zm
c2V0LCBtX291dC5jb25zdEludDMyKFNjb3BlT2Zmc2V0OjppbnZhbGlkT2Zmc2V0KSkpOworICAg
ICAgICAgICAgCisgICAgICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LmxvYWQ2NChiYXNlSW5kZXgo
CisgICAgICAgICAgICAgICAgbV9oZWFwcy5KU0Vudmlyb25tZW50UmVjb3JkX3ZhcmlhYmxlcywg
YmFzZSwgc2NvcGVPZmZzZXQpKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg
ICAgICAgICAgIAogICAgICAgICBjYXNlIEFycmF5OjpHZW5lcmljOiB7CiAgICAgICAgICAgICBz
ZXRKU1ZhbHVlKHZtQ2FsbCgKICAgICAgICAgICAgICAgICBtX291dC5vcGVyYXRpb24ob3BlcmF0
aW9uR2V0QnlWYWwpLCBtX2NhbGxGcmFtZSwKQEAgLTUwNzAsMTEgKzUxMzIsMTEgQEAgcHJpdmF0
ZToKICAgICAgICAgcmV0dXJuIGNhbGw7CiAgICAgfQogICAgIAotICAgIFR5cGVkUG9pbnRlciBi
YXNlSW5kZXgoSW5kZXhlZEFic3RyYWN0SGVhcCYgaGVhcCwgTFZhbHVlIHN0b3JhZ2UsIExWYWx1
ZSBpbmRleCwgRWRnZSBlZGdlKQorICAgIFR5cGVkUG9pbnRlciBiYXNlSW5kZXgoSW5kZXhlZEFi
c3RyYWN0SGVhcCYgaGVhcCwgTFZhbHVlIHN0b3JhZ2UsIExWYWx1ZSBpbmRleCwgRWRnZSBlZGdl
LCBwdHJkaWZmX3Qgb2Zmc2V0ID0gMCkKICAgICB7CiAgICAgICAgIHJldHVybiBtX291dC5iYXNl
SW5kZXgoCiAgICAgICAgICAgICBoZWFwLCBzdG9yYWdlLCBtX291dC56ZXJvRXh0KGluZGV4LCBt
X291dC5pbnRQdHIpLAotICAgICAgICAgICAgbV9zdGF0ZS5mb3JOb2RlKGVkZ2UpLm1fdmFsdWUp
OworICAgICAgICAgICAgbV9zdGF0ZS5mb3JOb2RlKGVkZ2UpLm1fdmFsdWUsIG9mZnNldCk7CiAg
ICAgfQogICAgIAogICAgIHZvaWQgY29tcGFyZSgKQEAgLTYzNDEsNiArNjQwMywxNiBAQCBwcml2
YXRlOgogICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkNvcnJ1cHQgYXJy
YXkgY2xhc3MiKTsKICAgICAgICAgfQogICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXJyYXk6
OkRpcmVjdEFyZ3VtZW50czoKKyAgICAgICAgICAgIHJldHVybiBtX291dC5lcXVhbCgKKyAgICAg
ICAgICAgICAgICBtX291dC5sb2FkOChjZWxsLCBtX2hlYXBzLkpTQ2VsbF90eXBlSW5mb1R5cGUp
LAorICAgICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50OChEaXJlY3RBcmd1bWVudHNUeXBlKSk7
CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBBcnJheTo6U2NvcGVkQXJndW1lbnRzOgorICAg
ICAgICAgICAgcmV0dXJuIG1fb3V0LmVxdWFsKAorICAgICAgICAgICAgICAgIG1fb3V0LmxvYWQ4
KGNlbGwsIG1faGVhcHMuSlNDZWxsX3R5cGVJbmZvVHlwZSksCisgICAgICAgICAgICAgICAgbV9v
dXQuY29uc3RJbnQ4KFNjb3BlZEFyZ3VtZW50c1R5cGUpKTsKKyAgICAgICAgICAgIAogICAgICAg
ICBkZWZhdWx0OgogICAgICAgICAgICAgcmV0dXJuIG1fb3V0LmVxdWFsKAogICAgICAgICAgICAg
ICAgIG1fb3V0LmxvYWQ4KGNlbGwsIG1faGVhcHMuSlNDZWxsX3R5cGVJbmZvVHlwZSksIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29weVRva2VuLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29weVRva2VuLmgJKHJldmlzaW9uIDE4MDcyMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcHlUb2tlbi5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0zMiw3ICszMiw3IEBAIGVudW0gQ29weVRva2VuIHsKICAgICBCdXR0ZXJmbHlDb3B5VG9rZW4s
CiAgICAgVHlwZWRBcnJheVZlY3RvckNvcHlUb2tlbiwKICAgICBNYXBCYWNraW5nU3RvcmVDb3B5
VG9rZW4sCi0gICAgQXJndW1lbnRzU2xvd0FyZ3VtZW50RGF0YUNvcHlUb2tlbgorICAgIERpcmVj
dEFyZ3VtZW50c092ZXJyaWRlc0NvcHlUb2tlbgogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHJldmlz
aW9uIDE4MDcyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTExMyw2ICsxMTMsMjYgQEAgcHVibGljOgogI2VuZGlmCiAg
ICAgfQogICAgIAorICAgIHZvaWQgbG9hZFZhbHVlKEJhc2VJbmRleCBhZGRyZXNzLCBKU1ZhbHVl
UmVncyByZWdzKQorICAgIHsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICBsb2FkNjQoYWRk
cmVzcywgcmVncy5ncHIoKSk7CisjZWxzZQorICAgICAgICBpZiAoYWRkcmVzcy5iYXNlID09IHJl
Z3MucGF5bG9hZEdQUigpIHx8IGFkZHJlc3MuaW5kZXggPT0gcmVncy5wYXlsb2FkR1BSKCkpIHsK
KyAgICAgICAgICAgIC8vIFdlIGFjdHVhbGx5IGNvdWxkIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSB0
aGUgcmVnaXN0ZXJzIGFyZSBhbGlhc2VkIHRvIGJvdGgKKyAgICAgICAgICAgIC8vIHRhZyBhbmQg
cGF5bG9hZCwgYnV0IHdlIGRvbid0IGZvciBub3cuCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VChhZGRyZXNzLmJhc2UgIT0gcmVncy50YWdHUFIoKSk7CisgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVChhZGRyZXNzLmluZGV4ICE9IHJlZ3MudGFnR1BSKCkpOworICAgICAgICAgICAgCisgICAg
ICAgICAgICBsb2FkMzIoYWRkcmVzcy53aXRoT2Zmc2V0KFRhZ09mZnNldCksIHJlZ3MudGFnR1BS
KCkpOworICAgICAgICAgICAgbG9hZDMyKGFkZHJlc3Mud2l0aE9mZnNldChQYXlsb2FkT2Zmc2V0
KSwgcmVncy5wYXlsb2FkR1BSKCkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbG9h
ZDMyKGFkZHJlc3Mud2l0aE9mZnNldChQYXlsb2FkT2Zmc2V0KSwgcmVncy5wYXlsb2FkR1BSKCkp
OworICAgICAgICAgICAgbG9hZDMyKGFkZHJlc3Mud2l0aE9mZnNldChUYWdPZmZzZXQpLCByZWcu
dGFnR1BSKCkpOworICAgICAgICB9CisjZW5kaWYKKyAgICB9CisgICAgCiAgICAgdm9pZCBtb3Zl
VHJ1c3RlZFZhbHVlKEpTVmFsdWUgdmFsdWUsIEpTVmFsdWVSZWdzIHJlZ3MpCiAgICAgewogI2lm
IFVTRShKU1ZBTFVFNjQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHJldmlzaW9uIDE4
MDcyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHdvcmtpbmcgY29weSkK
QEAgLTM0Niw2ICszNDYsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgSnVtcExpc3QgZW1p
dERvdWJsZUdldEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSk7CiAg
ICAgICAgIEp1bXBMaXN0IGVtaXRDb250aWd1b3VzR2V0QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQYXRj
aGFibGVKdW1wJiBiYWRUeXBlLCBJbmRleGluZ1R5cGUgZXhwZWN0ZWRTaGFwZSA9IENvbnRpZ3Vv
dXNTaGFwZSk7CiAgICAgICAgIEp1bXBMaXN0IGVtaXRBcnJheVN0b3JhZ2VHZXRCeVZhbChJbnN0
cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUpOworICAgICAgICBKdW1wTGlzdCBlbWl0
RGlyZWN0QXJndW1lbnRzR2V0QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRU
eXBlKTsKKyAgICAgICAgSnVtcExpc3QgZW1pdFNjb3BlZEFyZ3VtZW50c0dldEJ5VmFsKEluc3Ry
dWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSk7CiAgICAgICAgIEp1bXBMaXN0IGVtaXRJ
bnRUeXBlZEFycmF5R2V0QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBl
LCBUeXBlZEFycmF5VHlwZSk7CiAgICAgICAgIEp1bXBMaXN0IGVtaXRGbG9hdFR5cGVkQXJyYXlH
ZXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIFR5cGVkQXJyYXlU
eXBlKTsKICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJh
dGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bl
cmF0aW9ucy5jcHAJKHJldmlzaW9uIDE4MDcyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzMCw3ICs1MzAsNyBAQCB2
b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWwoRXhlCiAgICAgICAgIGlmIChoYXNP
cHRpbWl6YWJsZUluZGV4aW5nKG9iamVjdC0+c3RydWN0dXJlKHZtKSkpIHsKICAgICAgICAgICAg
IC8vIEF0dGVtcHQgdG8gb3B0aW1pemUuCiAgICAgICAgICAgICBKSVRBcnJheU1vZGUgYXJyYXlN
b2RlID0gaml0QXJyYXlNb2RlRm9yU3RydWN0dXJlKG9iamVjdC0+c3RydWN0dXJlKHZtKSk7Ci0g
ICAgICAgICAgICBpZiAoYXJyYXlNb2RlICE9IGJ5VmFsSW5mby5hcnJheU1vZGUpIHsKKyAgICAg
ICAgICAgIGlmIChqaXRBcnJheU1vZGVQZXJtaXRzUHV0KGFycmF5TW9kZSkgJiYgYXJyYXlNb2Rl
ICE9IGJ5VmFsSW5mby5hcnJheU1vZGUpIHsKICAgICAgICAgICAgICAgICBKSVQ6OmNvbXBpbGVQ
dXRCeVZhbCgmdm0sIGV4ZWMtPmNvZGVCbG9jaygpLCAmYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNz
UHRyKE9VUl9SRVRVUk5fQUREUkVTUyksIGFycmF5TW9kZSk7CiAgICAgICAgICAgICAgICAgZGlk
T3B0aW1pemUgPSB0cnVlOwogICAgICAgICAgICAgfQpAQCAtNTc1LDcgKzU3NSw3IEBAIHZvaWQg
SklUX09QRVJBVElPTiBvcGVyYXRpb25EaXJlY3RQdXRCeVYKICAgICAgICAgaWYgKGhhc09wdGlt
aXphYmxlSW5kZXhpbmcob2JqZWN0LT5zdHJ1Y3R1cmUodm0pKSkgewogICAgICAgICAgICAgLy8g
QXR0ZW1wdCB0byBvcHRpbWl6ZS4KICAgICAgICAgICAgIEpJVEFycmF5TW9kZSBhcnJheU1vZGUg
PSBqaXRBcnJheU1vZGVGb3JTdHJ1Y3R1cmUob2JqZWN0LT5zdHJ1Y3R1cmUodm0pKTsKLSAgICAg
ICAgICAgIGlmIChhcnJheU1vZGUgIT0gYnlWYWxJbmZvLmFycmF5TW9kZSkgeworICAgICAgICAg
ICAgaWYgKGppdEFycmF5TW9kZVBlcm1pdHNQdXQoYXJyYXlNb2RlKSAmJiBhcnJheU1vZGUgIT0g
YnlWYWxJbmZvLmFycmF5TW9kZSkgewogICAgICAgICAgICAgICAgIEpJVDo6Y29tcGlsZURpcmVj
dFB1dEJ5VmFsKCZ2bSwgY2FsbEZyYW1lLT5jb2RlQmxvY2soKSwgJmJ5VmFsSW5mbywgUmV0dXJu
QWRkcmVzc1B0cihPVVJfUkVUVVJOX0FERFJFU1MpLCBhcnJheU1vZGUpOwogICAgICAgICAgICAg
ICAgIGRpZE9wdGltaXplID0gdHJ1ZTsKICAgICAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCShyZXZpc2lvbiAxODA3
MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtOTUxLDYgKzk1MSwxMiBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBp
bGVHZXRCeVZhbChCeVZhbEluCiAgICAgY2FzZSBKSVRBcnJheVN0b3JhZ2U6CiAgICAgICAgIHNs
b3dDYXNlcyA9IGVtaXRBcnJheVN0b3JhZ2VHZXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJh
ZFR5cGUpOwogICAgICAgICBicmVhazsKKyAgICBjYXNlIEpJVERpcmVjdEFyZ3VtZW50czoKKyAg
ICAgICAgc2xvd0Nhc2VzID0gZW1pdERpcmVjdEFyZ3VtZW50c0dldEJ5VmFsKGN1cnJlbnRJbnN0
cnVjdGlvbiwgYmFkVHlwZSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSklUU2NvcGVkQXJn
dW1lbnRzOgorICAgICAgICBzbG93Q2FzZXMgPSBlbWl0RGlyZWN0QXJndW1lbnRzR2V0QnlWYWwo
Y3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlKTsKKyAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVs
dDoKICAgICAgICAgVHlwZWRBcnJheVR5cGUgdHlwZSA9IHR5cGVkQXJyYXlUeXBlRm9ySklUQXJy
YXlNb2RlKGFycmF5TW9kZSk7CiAgICAgICAgIGlmIChpc0ludCh0eXBlKSkKQEAgLTEwNDYsNiAr
MTA1Miw2MyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeVZhbChCeVZhbEluCiAgICAg
cmVwYXRjaEJ1ZmZlci5yZWxpbmtDYWxsZXJUb0Z1bmN0aW9uKHJldHVybkFkZHJlc3MsIEZ1bmN0
aW9uUHRyKGlzRGlyZWN0ID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxHZW5lcmljIDogb3BlcmF0
aW9uUHV0QnlWYWxHZW5lcmljKSk7CiB9CiAKK0pJVDo6SnVtcExpc3QgSklUOjplbWl0RGlyZWN0
QXJndW1lbnRzR2V0QnlWYWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUGF0Y2hh
YmxlSnVtcCYgYmFkVHlwZSkKK3sKKyAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgCisjaWYg
VVNFKEpTVkFMVUU2NCkKKyAgICBSZWdpc3RlcklEIGJhc2UgPSByZWdUMDsKKyAgICBSZWdpc3Rl
cklEIHByb3BlcnR5ID0gcmVnVDE7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0ID0gSlNWYWx1ZVJl
Z3MocmVnVDApOworICAgIFJlZ2lzdGVySUQgc2NyYXRjaCA9IHJlZ1QzOworI2Vsc2UKKyAgICBS
ZWdpc3RlcklEIGJhc2UgPSByZWdUMDsKKyAgICBSZWdpc3RlcklEIHByb3BlcnR5ID0gcmVnVDI7
CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0ID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKKyAg
ICBSZWdpc3RlcklEIHNjcmF0Y2ggPSByZWdUMzsKKyNlbmRpZgorCisgICAgbG9hZDgoQWRkcmVz
cyhiYXNlLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgc2NyYXRjaCk7CisgICAgYmFk
VHlwZSA9IHBhdGNoYWJsZUJyYW5jaDMyKE5vdEVxdWFsLCBzY3JhdGNoLCBUcnVzdGVkSW1tMzIo
RGlyZWN0QXJndW1lbnRzVHlwZSkpOworICAgIAorICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNo
MzIoQWJvdmVPckVxdWFsLCBwcm9wZXJ0eSwgQWRkcmVzcyhiYXNlLCBEaXJlY3RBcmd1bWVudHM6
Om9mZnNldE9mTGVuZ3RoKCkpKSk7CisgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hUZXN0UHRy
KE5vblplcm8sIEFkZHJlc3MoYmFzZSwgRGlyZWN0QXJndW1lbnRzOjpvZmZzZXRPZk92ZXJyaWRl
cygpKSkpOworICAgIAorICAgIHplcm9FeHRlbmQzMlRvUHRyKHByb3BlcnR5LCBzY3JhdGNoKTsK
KyAgICBsb2FkVmFsdWUoQmFzZUluZGV4KGJhc2UsIHNjcmF0Y2gsIFRpbWVzRWlnaHQsIERpcmVj
dEFyZ3VtZW50czo6c3RvcmFnZU9mZnNldCgpKSwgcmVzdWx0KTsKK30KKworSklUOjpKdW1wTGlz
dCBKSVQ6OmVtaXRTY29wZWRBcmd1bWVudHNHZXRCeVZhbChJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlKQoreworICAgIEp1bXBMaXN0IHNsb3dD
YXNlczsKKyAgICAKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIFJlZ2lzdGVySUQgYmFzZSA9IHJl
Z1QwOworICAgIFJlZ2lzdGVySUQgcHJvcGVydHkgPSByZWdUMTsKKyAgICBKU1ZhbHVlUmVncyBy
ZXN1bHQgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgUmVnaXN0ZXJJRCBzY3JhdGNoID0gcmVn
VDM7CisgICAgUmVnaXN0ZXJJRCBzY3JhdGNoMiA9IHJlZ1Q0OworI2Vsc2UKKyAgICBSZWdpc3Rl
cklEIGJhc2UgPSByZWdUMDsKKyAgICBSZWdpc3RlcklEIHByb3BlcnR5ID0gcmVnVDI7CisgICAg
SlNWYWx1ZVJlZ3MgcmVzdWx0ID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKKyAgICBSZWdp
c3RlcklEIHNjcmF0Y2ggPSByZWdUMzsKKyAgICBSZWdpc3RlcklEIHNjYXJ0Y2gyID0gcmVnVDQ7
CisjZW5kaWYKKworICAgIGxvYWQ4KEFkZHJlc3MoYmFzZSwgSlNDZWxsOjp0eXBlSW5mb1R5cGVP
ZmZzZXQoKSksIHNjcmF0Y2gpOworICAgIGJhZFR5cGUgPSBwYXRjaGFibGVCcmFuY2gzMihOb3RF
cXVhbCwgc2NyYXRjaCwgVHJ1c3RlZEltbTMyKERpcmVjdEFyZ3VtZW50c1R5cGUpKTsKKyAgICAK
KyAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgU2NvcGVkQXJndW1lbnRzOjpvZmZzZXRPZlRhYmxl
KCkpLCBzY3JhdGNoKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgU2NvcGVkQXJndW1lbnRz
OjpvZmZzZXRPZlNjb3BlKCkpLCBzY3JhdGNoMik7CisgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFu
Y2gzMihBYm92ZU9yRXF1YWwsIHByb3BlcnR5LCBBZGRyZXNzKHNjcmF0Y2gsIFNjb3BlZEFyZ3Vt
ZW50c1RhYmxlOjpvZmZzZXRPZkxlbmd0aCgpKSkpOworICAgIGxvYWRQdHIoQWRkcmVzcyhzY3Jh
dGNoLCBTY29wZWRBcmd1bWVudHNUYWJsZTo6b2Zmc2V0T2ZBcmd1bWVudHMoKSksIHNjcmF0Y2gp
OworICAgIGxvYWQzMihCYXNlSW5kZXgoc2NyYXRjaCwgcHJvcGVydHksIFRpbWVzRm91ciksIHNj
cmF0Y2gpOworICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoRXF1YWwsIHNjcmF0Y2gsIFRy
dXN0ZWRJbW0zMihTY29wZU9mZnNldDo6aW52YWxpZE9mZnNldCkpKTsKKyAgICAKKyAgICBsb2Fk
VmFsdWUoQmFzZUluZGV4KHNjcmF0Y2gyLCBzY3JhdGNoLCBUaW1lc0VpZ2h0LCBKU0Vudmlyb25t
ZW50UmVjb3JkOjpvZmZzZXRPZlZhcmlhYmxlcygpKSwgcmVzdWx0KTsKK30KKwogSklUOjpKdW1w
TGlzdCBKSVQ6OmVtaXRJbnRUeXBlZEFycmF5R2V0QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFi
bGVKdW1wJiBiYWRUeXBlLCBUeXBlZEFycmF5VHlwZSB0eXBlKQogewogICAgIEFTU0VSVChpc0lu
dCh0eXBlKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5oCShyZXZpc2lv
biAxODA3MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTE0MzgsNyArMTQzOCw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBi
b29sIGhhc0NhcHR1cmVkVmFyaWFibGVzKCkgY29uc3QgeyByZXR1cm4gISFtX2NhcHR1cmVkVmFy
aWFibGVzLnNpemUoKTsgfQogICAgICAgICBzaXplX3QgY2FwdHVyZWRWYXJpYWJsZUNvdW50KCkg
Y29uc3QgeyByZXR1cm4gbV9jYXB0dXJlZFZhcmlhYmxlcy5zaXplKCk7IH0KICAgICAgICAgY29u
c3QgSWRlbnRpZmllclNldCYgY2FwdHVyZWRWYXJpYWJsZXMoKSBjb25zdCB7IHJldHVybiBtX2Nh
cHR1cmVkVmFyaWFibGVzOyB9Ci0gICAgICAgIGJvb2wgY2FwdHVyZXMoY29uc3QgSWRlbnRpZmll
ciYgaWRlbnQpIHsgcmV0dXJuIG1fY2FwdHVyZWRWYXJpYWJsZXMuY29udGFpbnMoaWRlbnQuaW1w
bCgpKTsgfQorICAgICAgICBib29sIGNhcHR1cmVzKFN0cmluZ0ltcGwqIHVpZCkgeyByZXR1cm4g
bV9jYXB0dXJlZFZhcmlhYmxlcy5jb250YWlucyh1aWQpOyB9CisgICAgICAgIGJvb2wgY2FwdHVy
ZXMoY29uc3QgSWRlbnRpZmllciYgaWRlbnQpIHsgcmV0dXJuIGNhcHR1cmVzKGlkZW50LmltcGwo
KSk7IH0KIAogICAgICAgICBWYXJTdGFjayYgdmFyU3RhY2soKSB7IHJldHVybiBtX3ZhclN0YWNr
OyB9CiAgICAgICAgIEZ1bmN0aW9uU3RhY2smIGZ1bmN0aW9uU3RhY2soKSB7IHJldHVybiBtX2Z1
bmN0aW9uU3RhY2s7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ3Vt
ZW50c01vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9B
cmd1bWVudHNNb2RlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Bcmd1bWVudHNNb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzOSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFyZ3Vt
ZW50c01vZGVfaAorI2RlZmluZSBBcmd1bWVudHNNb2RlX2gKKworbmFtZXNwYWNlIEpTQyB7CisK
K2VudW0gQXJndW1lbnRzTW9kZSB7CisgICAgQ2xvbmVkQXJndW1lbnRzQ3JlYXRpb25Nb2RlLAor
ICAgIEZha2VBcmd1bWVudFZhbHVlc0NyZWF0aW9uTW9kZQorfTsKKworfSAvLyBuYW1lc3BhY2Ug
SlNDCisKKyNlbmRpZiAvLyBBcmd1bWVudHNNb2RlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQ2FwdHVyZWRBcmd1bWVudHNPZmZzZXQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhcHR1cmVkQXJndW1lbnRzT2Zmc2V0LmNw
cAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhcHR1cmVk
QXJndW1lbnRzT2Zmc2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQyIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJDYXB0dXJlZEFyZ3VtZW50c09mZnNldC5oIgorCituYW1lc3BhY2Ug
SlNDIHsKKwordm9pZCBDYXB0dXJlZEFyZ3VtZW50c09mZnNldDo6ZHVtcChQcmludFN0cmVhbSYg
b3V0KSBjb25zdAoreworICAgIGlmICghKnRoaXMpIHsKKyAgICAgICAgb3V0LnByaW50KCJjYXB0
dXJlZEFyZ3VtZW50SW52YWxpZCIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgb3V0
LnByaW50KCJjYXB0dXJlZEFyZ3VtZW50Iiwgb2Zmc2V0KCkpOworfQorCit9IC8vIG5hbWVzcGFj
ZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FwdHVyZWRBcmd1
bWVudHNPZmZzZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9DYXB0dXJlZEFyZ3VtZW50c09mZnNldC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQ2FwdHVyZWRBcmd1bWVudHNPZmZzZXQuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgQ2FwdHVyZWRBcmd1bWVudHNPZmZzZXRfaAorI2RlZmluZSBDYXB0
dXJlZEFyZ3VtZW50c09mZnNldF9oCisKKyNpbmNsdWRlICJHZW5lcmljT2Zmc2V0LmgiCisjaW5j
bHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBKU0MgeworCisvLyBUaGlzIGlz
IGFuIG9mZnNldCBpbnRvIHRoZSBzcGVjaWFsIGFyZ3VtZW50cyBvYmplY3QsIHdoaWNoIGNhcHR1
cmVzIHRoZSBhcmd1bWVudHMgdG8gYQorLy8gZnVuY3Rpb24uIEl0IG9ubHkgY29tZXMgaW50byBw
bGF5IGl0IHRoZSBhcmd1bWVudHMgYXJlbid0IGFsc28gbGlmdGVkIGludG8gdGhlIGFjdGl2YXRp
b24uCisvLyBJZiB0aGV5IHdlcmUgdGhlbiBhY2Nlc3NlcyB0byB0aGUgYXJndW1lbnRzIHdvdWxk
IHJlc29sdmUgdG8gYSBTY29wZU9mZnNldCBhbmQgbm90IGEKKy8vIENhcHR1cmVkQXJndW1lbnRz
T2Zmc2V0LgorY2xhc3MgQ2FwdHVyZWRBcmd1bWVudHNPZmZzZXQgOiBwdWJsaWMgR2VuZXJpY09m
ZnNldDxDYXB0dXJlZEFyZ3VtZW50c09mZnNldD4geworcHVibGljOgorICAgIENhcHR1cmVkQXJn
dW1lbnRzT2Zmc2V0KCkgeyB9CisgICAgCisgICAgZXhwbGljaXQgQ2FwdHVyZWRBcmd1bWVudHNP
ZmZzZXQodW5zaWduZWQgb2Zmc2V0KQorICAgICAgICA6IEdlbmVyaWNPZmZzZXQob2Zmc2V0KQor
ICAgIHsKKyAgICB9CisgICAgCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIENhcHR1cmVkQXJndW1lbnRzT2Zm
c2V0X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1l
bnRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJl
Y3RBcmd1bWVudHMuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRGlyZWN0QXJndW1lbnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE0NCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRGlyZWN0QXJndW1lbnRzLmgiCisKKyNpbmNsdWRlICJH
ZW5lcmljQXJndW1lbnRzSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTQXJndW1lbnRzSXRlcmF0b3Iu
aCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitTVEFUSUNf
QVNTRVJUX0lTX1RSSVZJQUxMWV9ERVNUUlVDVElCTEUoRGlyZWN0QXJndW1lbnRzKTsKKworY29u
c3QgQ2xhc3NJbmZvIERpcmVjdEFyZ3VtZW50czo6c19pbmZvID0geyAiQXJndW1lbnRzIiwgJkJh
c2U6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShEaXJlY3RBcmd1bWVudHMpIH07CisK
K0RpcmVjdEFyZ3VtZW50czo6RGlyZWN0QXJndW1lbnRzKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIHVuc2lnbmVkIGxlbmd0aCkKKyAgICA6IEdlbmVyaWNBcmd1bWVudHModm0sIHN0cnVj
dHVyZSkKKyAgICAsIG1fbGVuZ3RoKGxlbmd0aCkKK3sKK30KKworRGlyZWN0QXJndW1lbnRzKiBE
aXJlY3RBcmd1bWVudHM6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIERpcmVjdEFyZ3VtZW50cyogcmVzdWx0
ID0KKyAgICAgICAgbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8RGlyZWN0QXJndW1lbnRzPih2
bS5oZWFwLCBhbGxvY2F0aW9uU2l6ZShsZW5ndGgpKSkKKyAgICAgICAgKHZtLCBzdHJ1Y3R1cmUp
OworICAgIHJlc3VsdC0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgIHJldHVybiByZXN1bHQ7Cit9
CisKK0RpcmVjdEFyZ3VtZW50cyogRGlyZWN0QXJndW1lbnRzOjpjcmVhdGUoVk0mIHZtLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIERpcmVjdEFyZ3VtZW50
cyogcmVzdWx0ID0gY3JlYXRlVW5pbml0aWFsaXplZCh2bSwgc3RydWN0dXJlLCBsZW5ndGgpOwor
ICAgIAorICAgIGZvciAodW5zaWduZWQgaSA9IGxlbmd0aDsgaS0tOykKKyAgICAgICAgcmVzdWx0
LT5zdG9yYWdlKClbaV0uY2xlYXIoKTsKKyAgICAKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitE
aXJlY3RBcmd1bWVudHMqIERpcmVjdEFyZ3VtZW50czo6Y3JlYXRlQnlDb3B5aW5nKFZNJiB2bSwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICB1bnNpZ25lZCBs
ZW5ndGggPSBleGVjLT5hcmd1bWVudENvdW50KCk7CisgICAgRGlyZWN0QXJndW1lbnRzKiByZXN1
bHQgPSBjcmVhdGVVbmluaXRpYWxpemVkKHZtLCBzdHJ1Y3R1cmUsIGxlbmd0aCk7CisgICAgCisg
ICAgZm9yICh1bnNpZ25lZCBpID0gbGVuZ3RoOyBpLS07KQorICAgICAgICByZXN1bHQtPnN0b3Jh
Z2UoKVtpXS5zZXQodm0sIHJlc3VsdCwgZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoaSkpOworICAg
IAorICAgIHJlc3VsdC0+Y2FsbGVlKCkuc2V0KHZtLCByZXN1bHQsIGpzQ2FzdDxKU0Z1bmN0aW9u
Kj4oZXhlYy0+Y2FsbGVlKCkpKTsKKyAgICAKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lk
IERpcmVjdEFyZ3VtZW50czo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIHRoaXNDZWxsLCBTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3sKKyAgICBEaXJlY3RBcmd1bWVudHMqIHRoaXNPYmplY3QgPSBzdGF0
aWNfY2FzdDxEaXJlY3RBcmd1bWVudHMqPih0aGlzQ2VsbCk7CisgICAgQVNTRVJUX0dDX09CSkVD
VF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOworICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4o
dGhpc09iamVjdCwgdmlzaXRvcik7CisgICAgCisgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXModGhp
c09iamVjdC0+c3RvcmFnZSgpLCB0aGlzT2JqZWN0LT5tX2xlbmd0aCk7CisgICAgdmlzaXRvci5h
cHBlbmQoJnRoaXNPYmplY3QtPm1fY2FsbGVlKTsKKyAgICAKKyAgICBpZiAodGhpc09iamVjdC0+
bV9vdmVycmlkZXMpIHsKKyAgICAgICAgdmlzaXRvci5jb3B5TGF0ZXIoCisgICAgICAgICAgICB0
aGlzT2JqZWN0LCBEaXJlY3RBcmd1bWVudHNPdmVycmlkZXNDb3B5VG9rZW4sCisgICAgICAgICAg
ICB0aGlzT2JqZWN0LT5tX292ZXJyaWRlcy5nZXQoKSwgbV9sZW5ndGgpOworICAgIH0KK30KKwor
dm9pZCBEaXJlY3RBcmd1bWVudHM6OmNvcHlCYWNraW5nU3RvcmUoSlNDZWxsKiB0aGlzQ2VsbCwg
Q29weVZpc2l0b3ImIHZpc2l0b3IsIENvcHlUb2tlbiB0b2tlbikKK3sKKyAgICBEaXJlY3RBcmd1
bWVudHMqIHRoaXNPYmplY3QgPSBzdGF0aWNfY2FzdDxEaXJlY3RBcmd1bWVudHMqPih0aGlzQ2Vs
bCk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwor
ICAgIAorICAgIFJFTEVBU0VfQVNTRVJUKHRva2VuID09IERpcmVjdEFyZ3VtZW50c092ZXJyaWRl
c0NvcHlUb2tlbik7CisgICAgCisgICAgYm9vbCogb2xkT3ZlcnJpZGVzID0gdGhpc09iamVjdC0+
bV9vdmVycmlkZXMuZ2V0KCk7CisgICAgaWYgKCFvbGRPdmVycmlkZXMpCisgICAgICAgIHJldHVy
bjsKKyAgICAKKyAgICBpZiAodmlzaXRvci5jaGVja0lmU2hvdWxkQ29weShvdmVycmlkZXMpKSB7
CisgICAgICAgIGJvb2wqIG5ld092ZXJyaWRlcyA9IHN0YXRpY19jYXN0PGJvb2wqPih2aXNpdG9y
LmFsbG9jYXRlTmV3U3BhY2UobV9sZW5ndGgpKTsKKyAgICAgICAgbWVtY3B5KG5ld092ZXJyaWRl
cywgb2xkT3ZlcnJpZGVzLCBtX2xlbmd0aCk7CisgICAgICAgIHRoaXNPYmplY3QtPm1fb3ZlcnJp
ZGVzLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIobmV3T3ZlcnJpZGVzKTsKKyAgICAgICAgdmlzaXRv
ci5kaWRDb3B5KG9sZE92ZXJyaWRlcywgbV9sZW5ndGgpOworICAgIH0KK30KKworU3RydWN0dXJl
KiBEaXJlY3RBcmd1bWVudHM6OmNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQoreworICAgIHJldHVybiBTdHJ1Y3R1
cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKERpcmVjdEFy
Z3VtZW50c1R5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKK30KKwordm9pZCBEaXJlY3RB
cmd1bWVudHM6OnNsb3dEb3duQW5kV2FzdGVNZW1vcnkoVk0mIHZtKQoreworICAgIFJFTEVBU0Vf
QVNTRVJUKCFtX292ZXJyaWRlcyk7CisgICAgCisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0
eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKG1fbGVuZ3RoKSwgRG9udEVudW0pOworICAgIHB1dERp
cmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+Y2FsbGVlLCBtX2NhbGxlZS5nZXQoKSwgRG9udEVu
dW0pOworICAgIAorICAgIHZvaWQqIGJhY2tpbmdTdG9yZTsKKyAgICBSRUxFQVNFX0FTU0VSVCh2
bS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZSh0aGlzLCBtX2xlbmd0aCksICZiYWNraW5nU3RvcmUp
OworICAgIG1fb3ZlcnJpZGVzLnNldCh2bSwgdGhpcywgc3RhdGljX2Nhc3Q8Ym9vbCo+KGJhY2tp
bmdTdG9yZSkpOworICAgIGZvciAodW5zaWduZWQgaSA9IG1fbGVuZ3RoOyBpLS07KQorICAgICAg
ICBtX292ZXJyaWRlcy5nZXQoKVtpXSA9IGZhbHNlOworfQorCit2b2lkIERpcmVjdEFyZ3VtZW50
czo6c2xvd0Rvd25BbmRXYXN0ZU1lbW9yeUlmTmVjZXNzYXJ5KFZNJiB2bSkKK3sKKyAgICBpZiAo
IW1fb3ZlcnJpZGVzKQorICAgICAgICBzbG93RG93bkFuZFdhc3RlTWVtb3J5KHZtKTsKK30KKwor
dm9pZCBEaXJlY3RBcmd1bWVudHM6Om92ZXJyaWRlQXJndW1lbnQoVk0mIHZtLCB1bnNpZ25lZCBp
KQoreworICAgIHNsb3dEb3duQW5kV2FzdGVNZW1vcnlJZk5lY2Vzc2FyeSh2bSk7CisgICAgbV9v
dmVycmlkZXMuZ2V0KClbaW5kZXhdID0gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50
cy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0
QXJndW1lbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMzkgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBEaXJlY3RBcmd1bWVu
dHNfaAorI2RlZmluZSBEaXJlY3RBcmd1bWVudHNfaAorCisjaW5jbHVkZSAiR2VuZXJpY0FyZ3Vt
ZW50cy5oIgorCituYW1lc3BhY2UgSlNDIHsKKworLy8gVGhpcyBpcyBhbiBBcmd1bWVudHMtY2xh
c3Mgb2JqZWN0IHRoYXQgd2UgY3JlYXRlIHdoZW4geW91IHNheSAiYXJndW1lbnRzIiBpbnNpZGUg
YSBmdW5jdGlvbiwKKy8vIGFuZCBub25lIG9mIHRoZSBhcmd1bWVudHMgYXJlIGNhcHR1cmVkIGlu
IHRoZSBmdW5jdGlvbidzIGFjdGl2YXRpb24uIFRoZSBmdW5jdGlvbiB3aWxsIGNvcHkgYWxsCisv
LyBvZiBpdHMgYXJndW1lbnRzIGludG8gdGhpcyBvYmplY3QsIGFuZCBhbGwgc3Vic2VxdWVudCBh
Y2Nlc3NlcyB0byB0aGUgYXJndW1lbnRzIHdpbGwgZ28gdGhyb3VnaAorLy8gdGhpcyBvYmplY3Qg
dGhlcmVhZnRlci4gU3BlY2lhbCBzdXBwb3J0IGlzIGluIHBsYWNlIGZvciBtaXNjaGV2aW91cyBl
dmVudHMgbGlrZSB0aGUgYXJndW1lbnRzCisvLyBiZWluZyBkZWxldGVkIChzb21ldGhpbmcgbGlr
ZSAiZGVsZXRlIGFyZ3VtZW50c1swXSIpIG9yIHJlY29uZmlndXJlZCAoYnJvYWRseSwgd2Ugc2F5
IGRlbGV0aW9ucworLy8gYW5kIHJlY29uZmlndXJhdGlvbnMgbWVhbiB0aGF0IHRoZSByZXNwZWN0
aXZlIGFyZ3VtZW50IHdhcyAib3ZlcnJpZGRlbiIpLgorLy8KKy8vIFRvIHNwZWVkIGFsbG9jYXRp
b24sIHRoaXMgb2JqZWN0IHdpbGwgaG9sZCBhbGwgb2YgdGhlIGFyZ3VtZW50cyBpbi1wbGFjZS4g
VGhlIGFyZ3VtZW50cyBhcyB3ZWxsCisvLyBhcyBhIHRhYmxlIG9mIGZsYWdzIHNheWluZyB3aGlj
aCBhcmd1bWVudHMgd2VyZSBvdmVycmlkZGVuLgorY2xhc3MgRGlyZWN0QXJndW1lbnRzIDogcHVi
bGljIEdlbmVyaWNBcmd1bWVudHM8RGlyZWN0QXJndW1lbnRzPiB7Citwcml2YXRlOgorICAgIERp
cmVjdEFyZ3VtZW50cyhWTSYsIFN0cnVjdHVyZSosIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgCitw
dWJsaWM6CisgICAgLy8gQ3JlYXRlcyBhbiBhcmd1bWVudHMgb2JqZWN0IGJ1dCBsZWF2ZXMgaXQg
dW5pbml0aWFsaXplZC4gVGhpcyBpcyBkYW5nZXJvdXMgaWYgd2UgR0MgcmlnaHQKKyAgICAvLyBh
ZnRlciBhbGxvY2F0aW9uLgorICAgIHN0YXRpYyBEaXJlY3RBcmd1bWVudHMqIGNyZWF0ZVVuaW5p
dGlhbGl6ZWQoVk0mLCBTdHJ1Y3R1cmUqLCB1bnNpZ25lZCBsZW5ndGgpOworICAgIAorICAgIC8v
IENyZWF0ZXMgYW4gYXJndW1lbnRzIG9iamVjdCBhbmQgaW5pdGlhbGl6ZXMgZXZlcnl0aGluZyB0
byB0aGUgZW1wdHkgdmFsdWUuIFVzZSB0aGlzIGlmIHlvdQorICAgIC8vIGNhbm5vdCBndWFyYW50
ZWUgdGhhdCB5b3UnbGwgaW1tZWRpYXRlbHkgaW5pdGlhbGl6ZSBhbGwgb2YgdGhlIGVsZW1lbnRz
LgorICAgIHN0YXRpYyBEaXJlY3RBcmd1bWVudHMqIGNyZWF0ZShWTSYsIFN0cnVjdHVyZSosIHVu
c2lnbmVkIGxlbmd0aCk7CisgICAgCisgICAgLy8gQ3JlYXRlcyBhbiBhcmd1bWVudHMgb2JqZWN0
IGJ5IGNvcHlpbmcgdGhlIGFyZ3VtbmV0cyBmcm9tIHRoZSBzdGFjay4KKyAgICBzdGF0aWMgRGly
ZWN0QXJndW1lbnRzKiBjcmVhdGVCeUNvcHlpbmcoVk0mLCBTdHJ1Y3R1cmUqLCBFeGVjU3RhdGUq
KTsKKyAgICAKKyAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNp
dG9yJik7CisgICAgc3RhdGljIHZvaWQgY29weUJhY2tpbmdTdG9yZShKU0NlbGwqLCBDb3B5Vmlz
aXRvciYsIENvcHlUb2tlbik7CisgICAgCisgICAgdWludDMyX3QgaW50ZXJuYWxMZW5ndGgoKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbGVuZ3RoOworICAgIH0KKyAgICAKKyAgICB1
aW50MzJfdCBsZW5ndGgoRXhlY1N0YXRlKiBleGVjKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYg
KFVOTElLRUxZKG1fb3ZlcnJpZGVzKSkKKyAgICAgICAgICAgIHJldHVybiBnZXQoZXhlYywgZXhl
Yy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCkudG9VSW50MzIoZXhlYyk7CisgICAgICAgIHJldHVy
biBtX2xlbmd0aDsKKyAgICB9CisgICAgCisgICAgYm9vbCBjYW5BY2Nlc3NJbmRleFF1aWNrbHko
dWludDMyX3QgaSkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBpIDwgbV9sZW5ndGggJiYg
KCFtX292ZXJyaWRlcyB8fCAhbV9vdmVycmlkZXMuZ2V0KClbaV0pOworICAgIH0KKyAgICAKKyAg
ICBKU1ZhbHVlIGdldEluZGV4UXVpY2tseSh1aW50MzJfdCBpKSBjb25zdAorICAgIHsKKyAgICAg
ICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oY2FuQWNjZXNzSW5kZXhRdWlja2x5
KGkpKTsKKyAgICAgICAgcmV0dXJuIHN0b3JhZ2UoKVtpXS5nZXQoKTsKKyAgICB9CisgICAgCisg
ICAgdm9pZCBzZXRJbmRleFF1aWNrbHkoVk0mIHZtLCB1aW50MzJfdCBpLCBKU1ZhbHVlIHZhbHVl
KQorICAgIHsKKyAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oY2FuQWNj
ZXNzSW5kZXhRdWlja2x5KGkpKTsKKyAgICAgICAgc3RvcmFnZSgpW2ldLnNldCh2bSwgdGhpcywg
dmFsdWUpOworICAgIH0KKyAgICAKKyAgICBXcml0ZUJhcnJpZXI8SlNGdW5jdGlvbj4mIGNhbGxl
ZSgpCisgICAgeworICAgICAgICByZXR1cm4gbV9jYWxsZWU7CisgICAgfQorICAgIAorICAgIFdy
aXRlQmFycmllcjxVbmtub3duPiYgYXJndW1lbnQoQ2FwdHVyZWRBcmd1bWVudHNPZmZzZXQgb2Zm
c2V0KQorICAgIHsKKyAgICAgICAgQVNTRVJUKG9mZnNldCk7CisgICAgICAgIEFTU0VSVF9XSVRI
X1NFQ1VSSVRZX0lNUExJQ0FUSU9OKG9mZnNldC5vZmZzZXQoKSA8IG1fbGVuZ3RoKTsKKyAgICAg
ICAgcmV0dXJuIHN0b3JhZ2UoKVtvZmZzZXQub2Zmc2V0KCldOworICAgIH0KKyAgICAKKyAgICAv
LyBNZXRob2RzIGludGVuZGVkIGZvciB1c2UgYnkgdGhlIEdlbmVyaWNBcmd1bWVudHMgbWl4aW4u
CisgICAgYm9vbCBvdmVycm9kZVRoaW5ncygpIGNvbnN0IHsgcmV0dXJuICEhbV9vdmVycmlkZXM7
IH0KKyAgICB2b2lkIHNsb3dEb3duQW5kV2FzdGVNZW1vcnkoVk0mKTsKKyAgICB2b2lkIHNsb3dE
b3duQW5kV2FzdGVNZW1vcnlJZk5lY2Vzc2FyeShWTSYpOworICAgIHZvaWQgb3ZlcnJpZGVBcmd1
bWVudChWTSYsIHVuc2lnbmVkIGluZGV4KTsKKyAgICAKKyAgICBERUNMQVJFX0lORk87CisgICAg
CisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmpl
Y3QqLCBKU1ZhbHVlIHByb3RvdHlwZSk7CisgICAgCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZz
ZXRPZkxlbmd0aCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihEaXJlY3RBcmd1bWVudHMsIG1f
bGVuZ3RoKTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZPdmVycmlkZXMoKSB7IHJl
dHVybiBPQkpFQ1RfT0ZGU0VUT0YoRGlyZWN0QXJndW1lbnRzLCBtX292ZXJyaWRlcyk7IH0KKyAg
ICAKKyAgICBzdGF0aWMgc2l6ZV90IHN0b3JhZ2VPZmZzZXQoKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZjxzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+
KT4oc2l6ZW9mKERpcmVjdEFyZ3VtZW50cykpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgc2l6
ZV90IGFsbG9jYXRpb25TaXplKHVpbnQzMl90IGxlbmd0aCkKKyAgICB7CisgICAgICAgIHJldHVy
biBzdG9yYWdlT2Zmc2V0KCkgKyBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSAqIGxlbmd0
aDsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogc3Rv
cmFnZSgpCisgICAgeworICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PFdyaXRlQmFycmllcjxV
bmtub3duPio+KGJpdHdpc2VfY2FzdDxjaGFyKj4odGhpcykgKyBzdG9yYWdlT2Zmc2V0KCkpOwor
ICAgIH0KKyAgICAKKyAgICBXcml0ZUJhcnJpZXI8SlNGdW5jdGlvbio+IG1fY2FsbGVlOworICAg
IHVpbnQzMl90IG1fbGVuZ3RoOyAvLyBBbHdheXMgdGhlIGFjdHVhbCBsZW5ndGggb2YgY2FwdHVy
ZWQgYXJndW1lbnRzIGFuZCBuZXZlciB3aGF0IHdhcyBzdG9yZWQgaW50byB0aGUgbGVuZ3RoIHBy
b3BlcnR5LgorICAgIENvcHlXcml0ZUJhcnJpZXI8Ym9vbD4gbV9vdmVycmlkZXM7IC8vIElmIG5v
bi1udWxsLCBpdCBtZWFucyB0aGF0IGxlbmd0aCwgY2FsbGVlLCBhbmQgY2FsbGVyIGFyZSBmdWxs
eSBtYXRlcmlhbGl6ZWQgcHJvcGVydGllcy4KK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisj
ZW5kaWYgLy8gRGlyZWN0QXJndW1lbnRzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHMuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDYxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgR2VuZXJpY0FyZ3VtZW50c19oCisjZGVmaW5lIEdlbmVyaWNBcmd1
bWVudHNfaAorCisjaW5jbHVkZSAiSlNPYmplY3QuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKKy8v
IFRoaXMgaXMgYSBtaXhpbiBmb3IgdGhlIHR3byBraW5kcyBvZiBBcmd1bWVudHMtY2xhc3Mgb2Jq
ZWN0cyB0aGF0IGFyaXNlIHdoZW4geW91IHNheQorLy8gImFyZ3VtZW50cyIgaW5zaWRlIGEgZnVu
Y3Rpb24uIFRoaXMgY2xhc3MgZG9lc24ndCBzaG93IHVwIGluIHRoZSBKU0NlbGwgaW5oZXJpdGFu
Y2UgaGllcmFyY2h5LgordGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4KK2NsYXNzIEdlbmVyaWNBcmd1
bWVudHMgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBK
U05vbkZpbmFsT2JqZWN0IEJhc2U7CisKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0
dXJlRmxhZ3MgPSBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBJbnRlcmNlcHRzR2V0T3du
UHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgT3ZlcnJpZGVzR2V0
UHJvcGVydHlOYW1lcyB8IEpTT2JqZWN0OjpTdHJ1Y3R1cmVGbGFnczsKKworcHJvdGVjdGVkOgor
ICAgIEdlbmVyaWNBcmd1bWVudHMoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICAg
ICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCisgICAgeworICAgIH0KKworICAgIHN0YXRpYyBib29s
IGdldE93blByb3BlcnR5U2xvdChKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwg
UHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90QnlJbmRl
eChKU09iamVjdCosIEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgUHJvcGVydHlT
bG90Jik7CisgICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4
ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKKyAgICBzdGF0
aWMgdm9pZCBwdXQoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQ
dXRQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgdm9pZCBwdXRCeUluZGV4KEpTQ2VsbCosIEV4
ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJv
dyk7CisgICAgc3RhdGljIHZvaWQgZGVsZXRlUHJvcGVydHkoSlNDZWxsKiwgRXhlY1N0YXRlKiwg
UHJvcGVydHlOYW1lKTsKKyAgICBzdGF0aWMgdm9pZCBkZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlND
ZWxsKiwgRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lKTsKKyAgICBzdGF0aWMgdm9p
ZCBkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwg
Y29uc3QgUHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCBzaG91bGRUaHJvdyk7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEdlbmVyaWNBcmd1bWVudHNfaAorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzSW5saW5lcy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVu
dHNJbmxpbmVzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9HZW5lcmljQXJndW1lbnRzSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjEy
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgR2VuZXJpY0FyZ3VtZW50c0lubGluZXNfaAorI2RlZmluZSBHZW5lcmljQXJndW1lbnRzSW5s
aW5lc19oCisKKyNpbmNsdWRlICJHZW5lcmljQXJndW1lbnRzLmgiCisjaW5jbHVkZSAiSlNBcmd1
bWVudHNJdGVyYXRvci5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKworbmFtZXNwYWNlIEpT
QyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFR5cGU+Citib29sIEdlbmVyaWNBcmd1bWVudHM8VHlw
ZT46OmdldE93blByb3BlcnR5U2xvdChKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMs
IFByb3BlcnR5TmFtZSBpZGVudCwgUHJvcGVydHlTbG90JiBzbG90KQoreworICAgIFR5cGUqIHRo
aXNPYmplY3QgPSBqc0Nhc3Q8VHlwZSo+KG9iamVjdCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKKyAgICAKKyAgICBpZiAoIXRoaXNPYmplY3QtPm92ZXJyb2RlVGhpbmdzKCkpIHsKKyAgICAg
ICAgaWYgKGlkZW50ID09IHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCkgeworICAgICAgICAgICAg
c2xvdC5zZXRWYWx1ZSh0aGlzT2JqZWN0LCBEb250RW51bSwganNOdW1iZXIodGhpc09iamVjdC0+
aW50ZXJuYWxMZW5ndGgoKSkpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0K
KyAgICAgICAgaWYgKGlkZW50ID09IHZtLnByb3BlcnR5TmFtZXMtPmNhbGxlZSkgeworICAgICAg
ICAgICAgc2xvdC5zZXRWYWx1ZSh0aGlzT2JqZWN0LCBEb250RW51bSwgdGhpc09iamVjdC0+Y2Fs
bGVlKCkuZ2V0KCkpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9
CisgICAgCisgICAgdW5zaWduZWQgaW5kZXggPSBpZGVudC5hc0luZGV4KCk7CisgICAgaWYgKHRo
aXNPYmplY3QtPmNhbkFjY2Vzc0luZGV4UXVpY2tseShpbmRleCkpIHsKKyAgICAgICAgc2xvdC5z
ZXRWYWx1ZSh0aGlzT2JqZWN0LCBOb25lLCB0aGlzT2JqZWN0LT5nZXRJbmRleFF1aWNrbHkoaW5k
ZXgpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIGlmIChCYXNlOjpn
ZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgZXhlYywgaWRlbnQsIHNsb3QpKQorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICBpZiAoaWRlbnQgPT0gdm0ucHJvcGVydHlOYW1lcy0+
aXRlcmF0b3JQcml2YXRlTmFtZSkgeworICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0ID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpOworICAgICAgICB0aGlzT2JqZWN0LT5K
U0NfTkFUSVZFX0ZVTkNUSU9OKHZtLnByb3BlcnR5TmFtZXMtPml0ZXJhdG9yUHJpdmF0ZU5hbWUs
IGFyZ3VtZW50c0Z1bmNJdGVyYXRvciwgRG9udEVudW0sIDApOworICAgICAgICBpZiAoSlNPYmpl
Y3Q6OmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBleGVjLCBpZGVudCwgc2xvdCkpCisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIGZhbHNlOwor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPgorYm9vbCBHZW5lcmljQXJndW1lbnRzPFR5cGU+
OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSog
ZXhlYywgdW5zaWduZWQgaW5kZXgsIFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICBUeXBlKiB0
aGlzT2JqZWN0ID0ganNDYXN0PFR5cGUqPihvYmplY3QpOworICAgIAorICAgIGlmICh0aGlzT2Jq
ZWN0LT5jYW5BY2Nlc3NJbmRleFF1aWNrbHkoaW5kZXgpKSB7CisgICAgICAgIHNsb3Quc2V0VmFs
dWUodGhpc09iamVjdCwgTm9uZSwgdGhpc09iamVjdC0+Z2V0SW5kZXhRdWlja2x5KGluZGV4KSk7
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gQmFzZTo6Z2V0
T3duUHJvcGVydHlTbG90QnlJbmRleChvYmplY3QsIGV4ZWMsIGluZGV4LCBzbG90KTsKK30KKwor
dGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4KK3ZvaWQgR2VuZXJpY0FyZ3VtZW50czxUeXBlPjo6Z2V0
T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3Bl
cnR5TmFtZUFycmF5JiBhcnJheSwgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit7CisgICAgVHlwZSog
dGhpc09iamVjdCA9IGpzQ2FzdDxUeXBlKj4ob2JqZWN0KTsKKyAgICAKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgdGhpc09iamVjdC0+aW50ZXJuYWxMZW5ndGgoKTsgKytpKSB7CisgICAg
ICAgIGlmICghdGhpc09iamVjdC0+Y2FuQWNjZXNzSW5kZXhRdWlja2x5KGluZGV4KSkKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICBhcnJheS5hZGQoSWRlbnRpZmllcjo6ZnJvbShleGVj
LCBpKSk7CisgICAgfQorICAgIGlmIChzaG91bGRJbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKG1v
ZGUpICYmICF0aGlzT2JqZWN0LT5vdmVycm9kZVRoaW5ncygpKSB7CisgICAgICAgIGFycmF5LmFk
ZChleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY2FsbGVlKTsKKyAgICAgICAgYXJyYXkuYWRkKGV4ZWMt
PnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpOworICAgIH0KKyAgICBCYXNlOjpnZXRPd25Qcm9wZXJ0
eU5hbWVzKHRoaXNPYmplY3QsIGV4ZWMsIGFycmF5LCBtb2RlKTsKK30KKwordGVtcGxhdGU8dHlw
ZW5hbWUgVHlwZT4KK3ZvaWQgR2VuZXJpY0FyZ3VtZW50czxUeXBlPjo6cHV0KEpTQ2VsbCogY2Vs
bCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgaWRlbnQsIEpTVmFsdWUgdmFsdWUsIFB1
dFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICBUeXBlKiB0aGlzT2JqZWN0ID0ganNDYXN0PFR5
cGUqPihvYmplY3QpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgCisgICAgaWYgKCF0
aGlzT2JqZWN0LT5vdmVycm9kZVRoaW5ncygpCisgICAgICAgICYmIChpZGVudCA9PSB2bS5wcm9w
ZXJ0eU5hbWVzLT5sZW5ndGgKKyAgICAgICAgICAgIHx8IGlkZW50ID09IHZtLnByb3BlcnR5TmFt
ZXMtPmNhbGxlZSkpCisgICAgICAgIHRoaXNPYmplY3QtPnNsb3dEb3duQW5kV2FzdGVNZW1vcnko
dm0pOworICAgIAorICAgIHVuc2lnbmVkIGluZGV4ID0gaWRlbnQuYXNJbmRleCgpOworICAgIGlm
ICh0aGlzT2JqZWN0LT5jYW5BY2Nlc3NJbmRleFF1aWNrbHkoaW5kZXgpKSB7CisgICAgICAgIHNl
dEluZGV4UXVpY2tseSh2bSwgaW5kZXgsIHZhbHVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICAKKyAgICBCYXNlOjpwdXQodGhpc09iamVjdCwgZXhlYywgaWRlbnQsIHZhbHVlLCBzbG90
KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4KK3ZvaWQgR2VuZXJpY0FyZ3VtZW50czxU
eXBlPjo6cHV0QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQg
aW5kZXgsIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCit7CisgICAgVHlwZSogdGhp
c09iamVjdCA9IGpzQ2FzdDxUeXBlKj4ob2JqZWN0KTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgp
OworICAgIAorICAgIGlmICh0aGlzT2JqZWN0LT5jYW5TZXRJbmRleFF1aWNrbHkoaW5kZXgpKSB7
CisgICAgICAgIHNldEluZGV4UXVpY2tseSh2bSwgaW5kZXgsIHZhbHVlKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gQmFzZTo6cHV0QnlJbmRleChjZWxsLCBleGVj
LCBpbmRleCwgdmFsdWUsIHNob3VsZFRocm93KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVHlw
ZT4KK3ZvaWQgR2VuZXJpY0FyZ3VtZW50czxUeXBlPjo6ZGVsZXRlUHJvcGVydHkoSlNDZWxsKiBj
ZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBpZGVudCkKK3sKKyAgICBUeXBlKiB0
aGlzT2JqZWN0ID0ganNDYXN0PFR5cGUqPihvYmplY3QpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7CisgICAgCisgICAgaWYgKCF0aGlzT2JqZWN0LT5vdmVycm9kZVRoaW5ncygpCisgICAgICAg
ICYmIChpZGVudCA9PSB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgKKyAgICAgICAgICAgIHx8IGlk
ZW50ID09IHZtLnByb3BlcnR5TmFtZXMtPmNhbGxlZSkpCisgICAgICAgIHRoaXNPYmplY3QtPnNs
b3dEb3duQW5kV2FzdGVNZW1vcnkodm0pOworICAgIAorICAgIHVuc2lnbmVkIGluZGV4ID0gaWRl
bnQuYXNJbmRleCgpOworICAgIGlmICh0aGlzT2JqZWN0LT5jYW5BY2Nlc3NJbmRleFF1aWNrbHko
aW5kZXgpKSB7CisgICAgICAgIHRoaXNPYmplY3QtPm92ZXJyaWRlQXJndW1lbnQodm0sIGluZGV4
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBCYXNlOjpkZWxldGVQcm9wZXJ0
eSh0aGlzT2JqZWN0LCBleGVjLCBpZGVudCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFR5cGU+
Cit2b2lkIEdlbmVyaWNBcmd1bWVudHM8VHlwZT46OmRlbGV0ZVByb3BlcnR5QnlJbmRleChKU0Nl
bGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaW5kZXgpCit7CisgICAgVHlwZSog
dGhpc09iamVjdCA9IGpzQ2FzdDxUeXBlKj4ob2JqZWN0KTsKKyAgICBWTSYgdm0gPSBleGVjLT52
bSgpOworICAgIAorICAgIGlmICh0aGlzT2JqZWN0LT5jYW5BY2Nlc3NJbmRleFF1aWNrbHkoaW5k
ZXgpKSB7CisgICAgICAgIHRoaXNPYmplY3QtPm92ZXJyaWRlQXJndW1lbnQodm0sIGluZGV4KTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gQmFzZTo6ZGVsZXRlUHJv
cGVydHlCeUluZGV4KGNlbGwsIGV4ZWMsIGluZGV4KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
VHlwZT4KK3ZvaWQgR2VuZXJpY0FyZ3VtZW50czxUeXBlPjo6ZGVmaW5lT3duUHJvcGVydHkoSlNP
YmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgaWRlbnQsIGNvbnN0
IFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgYm9vbCBzaG91bGRUaHJvdykKK3sKKyAg
ICBUeXBlKiB0aGlzT2JqZWN0ID0ganNDYXN0PFR5cGUqPihvYmplY3QpOworICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7CisgICAgCisgICAgaWYgKGlkZW50ID09IHZtLnByb3BlcnR5TmFtZXMtPmxl
bmd0aAorICAgICAgICB8fCBpZGVudCA9PSB2bS5wcm9wZXJ0eU5hbWVzLT5jYWxsZWUpCisgICAg
ICAgIHRoaXNPYmplY3QtPnNsb3dEb3duQW5kV2FzdGVNZW1vcnlJZk5lY2Vzc2FyeSh2bSk7Cisg
ICAgZWxzZSB7CisgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gaWRlbnQuYXNJbmRleCgpOworICAg
ICAgICBpZiAodGhpc09iamVjdC0+Y2FuQWNjZXNzQXJndW1lbnRRdWlja2x5KGluZGV4KSkgewor
ICAgICAgICAgICAgaWYgKCFkZXNjcmlwdG9yLmlzQWNjZXNzb3JEZXNjcmlwdG9yKCkpIHsKKyAg
ICAgICAgICAgICAgICAvLyBJZiB0aGUgcHJvcGVydHkgaXMgbm90IGRlbGV0ZWQgYW5kIHdlIGFy
ZSB1c2luZyBhIG5vbi1hY2Nlc3NvciBkZXNjcmlwdG9yLCB0aGVuCisgICAgICAgICAgICAgICAg
Ly8gbWFrZSBzdXJlIHRoYXQgdGhlIGFsaWFzZWQgYXJndW1lbnQgc2VlcyB0aGUgdmFsdWUuCisg
ICAgICAgICAgICAgICAgaWYgKGRlc2NyaXB0b3IudmFsdWUoKSkKKyAgICAgICAgICAgICAgICAg
ICAgdGhpc09iamVjdC0+c2V0SW5kZXhRdWlja2x5KHZtLCBpLCBkZXNjcmlwdG9yLnZhbHVlKCkp
OworICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gSWYgdGhlIHByb3BlcnR5IGlzIG5v
dCBkZWxldGVkIGFuZCB3ZSBhcmUgdXNpbmcgYSBub24tYWNjZXNzb3IsIHdyaXRhYmxlCisgICAg
ICAgICAgICAgICAgLy8gZGVzY3JpcHRvciwgdGhlbiB3ZSBhcmUgZG9uZS4gVGhlIGFyZ3VtZW50
IGNvbnRpbnVlcyB0byBiZSBhbGlhc2VkLiBOb3RlIHRoYXQgd2UKKyAgICAgICAgICAgICAgICAv
LyBpZ25vcmUgdGhlIHJlcXVlc3QgdG8gY2hhbmdlIGVudW1lcmFiaWxpdHkuIFdlIGFwcGVhciB0
byBoYXZlIGFsd2F5cyBkb25lIHNvLCBpbgorICAgICAgICAgICAgICAgIC8vIGNhc2VzIHdoZXJl
IHRoZSBhcmd1bWVudCB3YXMgc3RpbGwgYWxpYXNlZC4KKyAgICAgICAgICAgICAgICAvLyBGSVhN
RTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MTk1MgorICAgICAg
ICAgICAgICAgIGlmIChkZXNjcmlwdG9yLndyaXRhYmxlKCkpCisgICAgICAgICAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgICAgIC8vIElm
IHRoZSBwcm9wZXJ0eSBpcyBhIG5vbi1kZWxldGVkIGFyZ3VtZW50LCB0aGVuIG1vdmUgaXQgaW50
byB0aGUgYmFzZSBvYmplY3QgYW5kCisgICAgICAgICAgICAvLyB0aGVuIGRlbGV0ZSBpdC4KKyAg
ICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSB0aGlzT2JqZWN0LT5nZXRJbmRleFF1aWNrbHkoaSk7
CisgICAgICAgICAgICBBU1NFUlQodmFsdWUpOworICAgICAgICAgICAgb2JqZWN0LT5wdXREaXJl
Y3RNYXlCZUluZGV4KGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUpOworICAgICAgICAgICAgdGhp
c09iamVjdC0+b3ZlcnJpZGVBcmd1bWVudCh2bSwgaSk7CisgICAgICAgIH0KKyAgICB9CisgICAg
CisgICAgLy8gTm93IGp1c3QgbGV0IHRoZSBub3JtYWwgb2JqZWN0IG1hY2hpbmVyeSBkbyBpdHMg
dGhpbmcuCisgICAgcmV0dXJuIEJhc2U6OmRlZmluZU93blByb3BlcnR5KG9iamVjdCwgZXhlYywg
aWRlbnQsIGRlc2NyaXB0b3IsIHNob3VsZFRocm93KTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlND
CisKKyNlbmRpZiAvLyBHZW5lcmljQXJndW1lbnRzSW5saW5lc19oCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNPZmZzZXQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljT2Zmc2V0LmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljT2Zmc2V0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwxMTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBHZW5lcmljT2Zmc2V0X2gKKyNkZWZpbmUgR2VuZXJpY09m
ZnNldF9oCisKKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorCituYW1lc3BhY2UgSlNDIHsK
KworLy8gQSBtaXhpbiBmb3IgY3JlYXRpbmcgdGhlIHZhcmlvdXMga2luZHMgb2YgdmFyaWFibGUg
b2Zmc2V0cyB0aGF0IG91ciBlbmdpbmUgc3VwcG9ydHMuCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgor
Y2xhc3MgR2VuZXJpY09mZnNldCB7CitwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVk
IGludmFsaWRPZmZzZXQgPSBVSU5UX01BWDsKKyAgICAKKyAgICBHZW5lcmljT2Zmc2V0KCkKKyAg
ICAgICAgOiBtX29mZnNldChpbnZhbGlkT2Zmc2V0KQorICAgIHsKKyAgICB9CisgICAgCisgICAg
ZXhwbGljaXQgR2VuZXJpY09mZnNldCh1bnNpZ25lZCBvZmZzZXQpCisgICAgICAgIDogbV9vZmZz
ZXQob2Zmc2V0KQorICAgIHsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvciEoKSBjb25z
dCB7IHJldHVybiBtX29mZnNldCA9PSBpbnZhbGlkT2Zmc2V0OyB9CisgICAgCisgICAgdW5zaWdu
ZWQgb2Zmc2V0VW5jaGVja2VkKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX29mZnNl
dDsKKyAgICB9CisgICAgCisgICAgdW5zaWduZWQgb2Zmc2V0KCkgY29uc3QKKyAgICB7CisgICAg
ICAgIEFTU0VSVChtX29mZnNldCAhPSBpbnZhbGlkT2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIG1f
b2Zmc2V0OworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgVCYgb3RoZXIp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9vZmZzZXQgPT0gb3RoZXIub2Zmc2V0VW5j
aGVja2VkKCk7CisgICAgfQorICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBUJiBvdGhlcikgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX29mZnNldCAhPSBvdGhlci5vZmZzZXRVbmNoZWNr
ZWQoKTsKKyAgICB9CisgICAgYm9vbCBvcGVyYXRvcjwoY29uc3QgVCYgb3RoZXIpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gbV9vZmZzZXQgPCBvdGhlci5vZmZzZXRVbmNoZWNrZWQoKTsK
KyAgICB9CisgICAgYm9vbCBvcGVyYXRvcj4oY29uc3QgVCYgb3RoZXIpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gbV9vZmZzZXQgPiBvdGhlci5vZmZzZXRVbmNoZWNrZWQoKTsKKyAgICB9
CisgICAgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IFQmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIG1fb2Zmc2V0IDw9IG90aGVyLm9mZnNldFVuY2hlY2tlZCgpOworICAgIH0KKyAg
ICBib29sIG9wZXJhdG9yPj0oY29uc3QgVCYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gbV9vZmZzZXQgPj0gb3RoZXIub2Zmc2V0VW5jaGVja2VkKCk7CisgICAgfQorICAgIAor
ICAgIFQgb3BlcmF0b3IrKGludCB2YWx1ZSkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBU
KG9mZnNldCgpICsgdmFsdWUpOworICAgIH0KKyAgICBUIG9wZXJhdG9yLShpbnQgdmFsdWUpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gVChvZmZzZXQoKSAtIHZhbHVlKTsKKyAgICB9Cisg
ICAgVCYgb3BlcmF0b3IrPShpbnQgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gKnRoaXMg
PSAqdGhpcyArIHZhbHVlOworICAgIH0KKyAgICBUJiBvcGVyYXRvci09KGludCB2YWx1ZSkKKyAg
ICB7CisgICAgICAgIHJldHVybiAqdGhpcyA9ICp0aGlzIC0gdmFsdWU7CisgICAgfQorICAgIAor
cHJpdmF0ZToKKyAgICB1bnNpZ25lZCBtX29mZnNldDsKK307CisKK30gLy8gbmFtZXNwYWNlIEpT
QworCisjZW5kaWYgLy8gR2VuZXJpY09mZnNldF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQXJndW1lbnRzSXRlcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJndW1lbnRzSXRlcmF0b3IuY3BwCShyZXZpc2lv
biAxODA3MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FyZ3VtZW50c0l0
ZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMywgMjAxNSBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMywxMCArMzMsMTggQEAgbmFtZXNwYWNlIEpT
QyB7CiAKIGNvbnN0IENsYXNzSW5mbyBKU0FyZ3VtZW50c0l0ZXJhdG9yOjpzX2luZm8gPSB7ICJB
cmd1bWVudHNJdGVyYXRvciIsICZCYXNlOjpzX2luZm8sIDAsIENSRUFURV9NRVRIT0RfVEFCTEUo
SlNBcmd1bWVudHNJdGVyYXRvcikgfTsKIAotdm9pZCBKU0FyZ3VtZW50c0l0ZXJhdG9yOjpmaW5p
c2hDcmVhdGlvbihWTSYgdm0sIEFyZ3VtZW50cyogYXJndW1lbnRzKQordm9pZCBKU0FyZ3VtZW50
c0l0ZXJhdG9yOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIEpTT2JqZWN0KiBhcmd1bWVudHMpCiB7
CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIG1fYXJndW1lbnRzLnNldCh2bSwg
dGhpcywgYXJndW1lbnRzKTsKIH0KIAorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcmd1
bWVudHNGdW5jSXRlcmF0b3IoRXhlY1N0YXRlKiBleGVjKQoreworICAgIEpTT2JqZWN0KiB0aGlz
T2JqID0gZXhlYy0+dGhpc1ZhbHVlKCkudG9UaGlzKGV4ZWMsIFN0cmljdE1vZGUpLnRvT2JqZWN0
KGV4ZWMpOworICAgIGlmICghdGhpc09iai0+aW5oZXJpdHMoQXJndW1lbnRzOjppbmZvKCkpICYm
ICF0aGlzT2JqLT5pbmhlcml0cyhPdXRPZkJhbmRBcmd1bWVudHM6OmluZm8oKSkpCisgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dUeXBlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFs
KCJBdHRlbXB0ZWQgdG8gdXNlIEFyZ3VtZW50cyBpdGVyYXRvciBvbiBub24tQXJndW1lbnRzIG9i
amVjdCIpKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU0FyZ3VtZW50c0l0ZXJhdG9y
OjpjcmVhdGUoZXhlYy0+dm0oKSwgZXhlYy0+Y2FsbGVlKCktPmdsb2JhbE9iamVjdCgpLT5hcmd1
bWVudHNJdGVyYXRvclN0cnVjdHVyZSgpLCB0aGlzT2JqKSk7Cit9CisKIH0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJndW1lbnRzSXRlcmF0b3IuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FyZ3VtZW50c0l0ZXJhdG9yLmgJ
KHJldmlzaW9uIDE4MDcyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJn
dW1lbnRzSXRlcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMywgMjAxNSBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiw3ICsyNiw3IEBACiAjaWZuZGVm
IEpTQXJndW1lbnRzSXRlcmF0b3JfaAogI2RlZmluZSBKU0FyZ3VtZW50c0l0ZXJhdG9yX2gKIAot
I2luY2x1ZGUgIkFyZ3VtZW50cy5oIgorI2luY2x1ZGUgIkpTT2JqZWN0LmgiCiAKIG5hbWVzcGFj
ZSBKU0MgewogCkBAIC00MSw3ICs0MSw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIFN0cnVj
dHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0
VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwogICAgIH0KIAotICAgIHN0YXRpYyBKU0Fy
Z3VtZW50c0l0ZXJhdG9yKiBjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQXJn
dW1lbnRzKiBhcmd1bWVudHMpCisgICAgc3RhdGljIEpTQXJndW1lbnRzSXRlcmF0b3IqIGNyZWF0
ZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU09iamVjdCogYXJndW1lbnRzKQogICAg
IHsKICAgICAgICAgSlNBcmd1bWVudHNJdGVyYXRvciogaW5zdGFuY2UgPSBuZXcgKE5vdE51bGws
IGFsbG9jYXRlQ2VsbDxKU0FyZ3VtZW50c0l0ZXJhdG9yPih2bS5oZWFwKSkgSlNBcmd1bWVudHNJ
dGVyYXRvcih2bSwgc3RydWN0dXJlKTsKICAgICAgICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9u
KHZtLCBhcmd1bWVudHMpOwpAQCAtNTAsMTEgKzUwLDExIEBAIHB1YmxpYzoKIAogICAgIGJvb2wg
bmV4dChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNWYWx1ZSYgdmFsdWUpCiAgICAgewotICAgICAg
ICBpZiAobV9uZXh0SW5kZXggPj0gbV9hcmd1bWVudHMtPmxlbmd0aChjYWxsRnJhbWUpKQorICAg
ICAgICB1bnNpZ25lZCBsZW5ndGggPQorICAgICAgICAgICAgbV9hcmd1bWVudHMtPmdldChjYWxs
RnJhbWUsIGNhbGxGcmFtZS0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCkudG9VSW50MzIoY2FsbEZy
YW1lKTsKKyAgICAgICAgaWYgKG1fbmV4dEluZGV4ID49IGxlbmd0aCkKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgdmFsdWUgPSBtX2FyZ3VtZW50cy0+dHJ5R2V0QXJndW1lbnQo
bV9uZXh0SW5kZXgrKyk7Ci0gICAgICAgIGlmICghdmFsdWUpCi0gICAgICAgICAgICB2YWx1ZSA9
IGpzVW5kZWZpbmVkKCk7CisgICAgICAgIHZhbHVlID0gbV9hcmd1bWVudHMtPmdldEluZGV4KGNh
bGxGcmFtZSwgbV9uZXh0SW5kZXgrKyk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApA
QCAtNjgsMTIgKzY4LDE0IEBAIHByaXZhdGU6CiAgICAgewogICAgIH0KIAotICAgIHZvaWQgZmlu
aXNoQ3JlYXRpb24oVk0mLCBBcmd1bWVudHMqKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZN
JiwgSlNPYmplY3QqKTsKICAgICAKLSAgICBXcml0ZUJhcnJpZXI8QXJndW1lbnRzPiBtX2FyZ3Vt
ZW50czsKKyAgICBXcml0ZUJhcnJpZXI8SlNPYmplY3Q+IG1fYXJndW1lbnRzOwogICAgIHNpemVf
dCBtX25leHRJbmRleDsKIH07CiAKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJndW1l
bnRzRnVuY0l0ZXJhdG9yKEV4ZWNTdGF0ZSopOworCiB9CiAKICNlbmRpZiAvLyAhZGVmaW5lZChK
U0FyZ3VtZW50c0l0ZXJhdG9yX2gpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0Vudmlyb25tZW50UmVjb3JkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0Vudmlyb25tZW50UmVjb3JkLmNwcAkocmV2aXNpb24gMTgwNzIwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNFbnZpcm9ubWVudFJlY29yZC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3
LCAyMDA4LCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAwNywgMjAwOCwgMjAxMiwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM1LDQgKzM1LDEyIEBAIG5h
bWVzcGFjZSBKU0MgewogCiBjb25zdCBDbGFzc0luZm8gSlNFbnZpcm9ubWVudFJlY29yZDo6c19p
bmZvID0geyAiRW52aXJvbm1lbnRSZWNvcmQiLCAmQmFzZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVU
SE9EX1RBQkxFKEpTRW52aXJvbm1lbnRSZWNvcmQpIH07CiAKK3ZvaWQgSlNFbnZpcm9ubWVudFJl
Y29yZDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
eworICAgIEpTRW52aXJvbm1lbnRSZWNvcmQqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNFbnZpcm9u
bWVudFJlY29yZCo+KGNlbGwpOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09i
amVjdCwgaW5mbygpKTsKKyAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0
b3IpOworICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzKHRoaXNPYmplY3QtPnZhcmlhYmxlcygpLCBt
X3N5bWJvbFRhYmxlLT5zY29wZVNpemUoKSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNFbnZpcm9ubWVudFJlY29yZC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRW52aXJvbm1lbnRS
ZWNvcmQuaAkocmV2aXNpb24gMTgwNzIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNFbnZpcm9ubWVudFJlY29yZC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NiwxMSArNDYsMjYg
QEAgY2xhc3MgSlNFbnZpcm9ubWVudFJlY29yZCA6IHB1YmxpYyBKU1N5bQogcHVibGljOgogICAg
IHR5cGVkZWYgSlNTeW1ib2xUYWJsZU9iamVjdCBCYXNlOwogCi0gICAgV3JpdGVCYXJyaWVyQmFz
ZTxVbmtub3duPiogcmVnaXN0ZXJzKCkgeyByZXR1cm4gbV9yZWdpc3RlcnM7IH0KLSAgICBXcml0
ZUJhcnJpZXJCYXNlPFVua25vd24+JiByZWdpc3RlckF0KGludCBpbmRleCkgY29uc3QgeyByZXR1
cm4gbV9yZWdpc3RlcnNbaW5kZXhdOyB9CisgICAgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiog
dmFyaWFibGVzKCkKKyAgICB7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8V3JpdGVCYXJy
aWVyQmFzZTxVbmtub3duPio+KGJpdHdpc2VfY2FzdDxjaGFyKj4odGhpcykgKyBvZmZzZXRPZlZh
cmlhYmxlcygpKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc1ZhbGlkKFNjb3BlT2Zmc2V0IG9m
ZnNldCkKKyAgICB7CisgICAgICAgIHJldHVybiAhIW9mZnNldCAmJiBvZmZzZXQub2Zmc2V0KCkg
PCBtX3N5bWJvbFRhYmxlLT5zY29wZVNpemUoKTsKKyAgICB9CisgICAgCisgICAgV3JpdGVCYXJy
aWVyQmFzZTxVbmtub3duPiYgdmFyaWFibGVBdChTY29wZU9mZnNldCBvZmZzZXQpIGNvbnN0Cisg
ICAgeworICAgICAgICBBU1NFUlQoaXNWYWxpZChvZmZzZXQpKTsKKyAgICAgICAgcmV0dXJuIHZh
cmlhYmxlcygpW29mZnNldC5vZmZzZXQoKV07CisgICAgfQogCi0gICAgV3JpdGVCYXJyaWVyQmFz
ZTxVbmtub3duPiogY29uc3QgKiBhZGRyZXNzT2ZSZWdpc3RlcnMoKSBjb25zdCB7IHJldHVybiAm
bV9yZWdpc3RlcnM7IH0KLSAgICBzdGF0aWMgc2l6ZV90IG9mZnNldE9mUmVnaXN0ZXJzKCkgeyBy
ZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTRW52aXJvbm1lbnRSZWNvcmQsIG1fcmVnaXN0ZXJzKTsg
fQorICAgIHN0YXRpYyBzaXplX3Qgb2Zmc2V0T2ZWYXJpYWJsZXMoKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZjxzaXplb2YoV3JpdGVCYXJyaWVyPFVua25v
d24+KT4oc2l6ZW9mKEpTRW52aXJvbm1lbnRSZWNvcmQpKTsKKyAgICB9CiAKICAgICBERUNMQVJF
X0lORk87CiAKQEAgLTYwLDE1ICs3NSwzNSBAQCBwcm90ZWN0ZWQ6CiAgICAgSlNFbnZpcm9ubWVu
dFJlY29yZCgKICAgICAgICAgVk0mIHZtLAogICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwK
LSAgICAgICAgUmVnaXN0ZXIqIHJlZ2lzdGVycywKICAgICAgICAgSlNTY29wZSogc2NvcGUsCiAg
ICAgICAgIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSkKICAgICAgICAgOiBCYXNlKHZtLCBzdHJ1
Y3R1cmUsIHNjb3BlLCBzeW1ib2xUYWJsZSkKLSAgICAgICAgLCBtX3JlZ2lzdGVycyhyZWludGVy
cHJldF9jYXN0PFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qPihyZWdpc3RlcnMpKQogICAgIHsK
ICAgICB9Ci0KLSAgICBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiBtX3JlZ2lzdGVyczsgLy8g
InIiIGluIHRoZSBzdGFjay4KKyAgICAKKyAgICBzdGF0aWMgc2l6ZV90IGFsbG9jYXRpb25TaXpl
Rm9yU2NvcGVTaXplKHVuc2lnbmVkIHNjb3BlU2l6ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBv
ZmZzZXRPZlZhcmlhYmxlcygpICsgc2NvcGVTaXplICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtu
b3duPik7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBzaXplX3QgYWxsb2NhdGlvblNpemUoU3lt
Ym9sVGFibGUqIHN5bWJvbFRhYmxlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFsbG9jYXRpb25T
aXplRm9yU2NvcGVTaXplKHN5bWJvbFRhYmxlLT5zY29wZVNpemUoKSk7CisgICAgfQorICAgIAor
ICAgIHZvaWQgZmluaXNoQ3JlYXRpb25VbmluaXRpYWxpemVkKFZNJiB2bSkKKyAgICB7CisgICAg
ICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBmaW5p
c2hDcmVhdGlvbihWTSYgdm0pCisgICAgeworICAgICAgICBmaW5pc2hDcmVhdGlvblVuaW5pdGlh
bGl6ZWQodm0pOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX3N5bWJvbFRhYmxlLT5zY29w
ZVNpemUoKTsgaS0tOykgeworICAgICAgICAgICAgLy8gRmlsbGluZyB0aGlzIHdpdGggdW5kZWZp
bmVkIGlzIHVzZWZ1bCBiZWNhdXNlIHRoYXQncyB3aGF0IHZhcmlhYmxlcyBzdGFydCBvdXQgYXMu
CisgICAgICAgICAgICB2YXJpYWJsZUF0KGkpLnNldFVuZGVmaW5lZCgpOworICAgICAgICB9Cisg
ICAgfQogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0xleGljYWxFbnZpcm9ubWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMZXhpY2FsRW52aXJvbm1lbnQuY3BwCShyZXZpc2lv
biAxODA3MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xleGljYWxFbnZp
cm9ubWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDA4LCAyMDA5LCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSwgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQwLDI3
ICs0MCwxOSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY29uc3QgQ2xhc3NJbmZvIEpTTGV4aWNhbEVu
dmlyb25tZW50OjpzX2luZm8gPSB7ICJKU0xleGljYWxFbnZpcm9ubWVudCIsICZCYXNlOjpzX2lu
Zm8sIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNMZXhpY2FsRW52aXJvbm1lbnQpIH07CiAKLXZv
aWQgSlNMZXhpY2FsRW52aXJvbm1lbnQ6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90
VmlzaXRvciYgdmlzaXRvcikKLXsKLSAgICBKU0xleGljYWxFbnZpcm9ubWVudCogdGhpc09iamVj
dCA9IGpzQ2FzdDxKU0xleGljYWxFbnZpcm9ubWVudCo+KGNlbGwpOwotICAgIEFTU0VSVF9HQ19P
QkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKLSAgICBCYXNlOjp2aXNpdENoaWxk
cmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0aGlz
T2JqZWN0LT5zeW1ib2xUYWJsZSgpLT5jYXB0dXJlQ291bnQoKTsgKytpKQotICAgICAgICB2aXNp
dG9yLmFwcGVuZCgmdGhpc09iamVjdC0+c3RvcmFnZSgpW2ldKTsKLX0KLQogaW5saW5lIGJvb2wg
SlNMZXhpY2FsRW52aXJvbm1lbnQ6OnN5bWJvbFRhYmxlR2V0KFByb3BlcnR5TmFtZSBwcm9wZXJ0
eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBTeW1ib2xUYWJsZUVudHJ5IGVudHJ5
ID0gc3ltYm9sVGFibGUoKS0+aW5saW5lR2V0KHByb3BlcnR5TmFtZS51aWQoKSk7CiAgICAgaWYg
KGVudHJ5LmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICBTY29wZU9mZnNl
dCBvZmZzZXQgPSBlbnRyeS5zY29wZU9mZnNldCgpOworCiAgICAgLy8gRGVmZW5kIGFnYWluc3Qg
dGhlIGluc3BlY3RvciBhc2tpbmcgZm9yIGEgdmFyIGFmdGVyIGl0IGhhcyBiZWVuIG9wdGltaXpl
ZCBvdXQuCi0gICAgaWYgKCFpc1ZhbGlkKGVudHJ5KSkKKyAgICBpZiAoIWlzVmFsaWQob2Zmc2V0
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgc2xvdC5zZXRWYWx1ZSh0aGlzLCBEb250
RW51bSwgcmVnaXN0ZXJBdChlbnRyeS5nZXRJbmRleCgpKS5nZXQoKSk7CisgICAgc2xvdC5zZXRW
YWx1ZSh0aGlzLCBEb250RW51bSwgdmFyaWFibGVBdChvZmZzZXQpLmdldCgpKTsKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIApAQCAtNzAsMTEgKzYyLDEzIEBAIGlubGluZSBib29sIEpTTGV4aWNhbEVu
dmlyb25tZW50OjpzeW1ib2wKICAgICBpZiAoZW50cnkuaXNOdWxsKCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAorICAgIFNjb3BlT2Zmc2V0IG9mZnNldCA9IGVudHJ5LnNjb3BlT2Zmc2V0KCk7
CisKICAgICAvLyBEZWZlbmQgYWdhaW5zdCB0aGUgaW5zcGVjdG9yIGFza2luZyBmb3IgYSB2YXIg
YWZ0ZXIgaXQgaGFzIGJlZW4gb3B0aW1pemVkIG91dC4KLSAgICBpZiAoIWlzVmFsaWQoZW50cnkp
KQorICAgIGlmICghaXNWYWxpZChvZmZzZXQpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAg
ICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3IocmVnaXN0ZXJBdChlbnRyeS5nZXRJbmRleCgpKS5n
ZXQoKSwgZW50cnkuZ2V0QXR0cmlidXRlcygpKTsKKyAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0
b3IodmFyaWFibGVBdChvZmZzZXQpLmdldCgpLCBlbnRyeS5nZXRBdHRyaWJ1dGVzKCkpOwogICAg
IHJldHVybiB0cnVlOwogfQogCkBAIC05NSwxMiArODksMTMgQEAgaW5saW5lIGJvb2wgSlNMZXhp
Y2FsRW52aXJvbm1lbnQ6OnN5bWJvbAogICAgICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4
ZWMsIFN0cmljdE1vZGVSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7CiAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICAgICAgfQorICAgICAgICBTY29wZU9mZnNldCBvZmZzZXQgPSBpdGVy
LT52YWx1ZS5zY29wZU9mZnNldCgpOwogICAgICAgICAvLyBEZWZlbmQgYWdhaW5zdCB0aGUgaW5z
cGVjdG9yIGFza2luZyBmb3IgYSB2YXIgYWZ0ZXIgaXQgaGFzIGJlZW4gb3B0aW1pemVkIG91dC4K
LSAgICAgICAgaWYgKCFpc1ZhbGlkKGl0ZXItPnZhbHVlKSkKKyAgICAgICAgaWYgKCFpc1ZhbGlk
KG9mZnNldCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGlmIChWYXJpYWJs
ZVdhdGNocG9pbnRTZXQqIHNldCA9IGl0ZXItPnZhbHVlLndhdGNocG9pbnRTZXQoKSkKLSAgICAg
ICAgICAgIHNldC0+aW52YWxpZGF0ZShWYXJpYWJsZVdyaXRlRmlyZURldGFpbCh0aGlzLCBwcm9w
ZXJ0eU5hbWUpKTsgLy8gRG9uJ3QgbWVzcyBhcm91bmQgLSBpZiB3ZSBoYWQgZm91bmQgdGhpcyBz
dGF0aWNhbGx5LCB3ZSB3b3VsZCBoYXZlIGludmNhbGlkYXRlZCBpdC4KLSAgICAgICAgcmVnID0g
JnJlZ2lzdGVyQXQoaXRlci0+dmFsdWUuZ2V0SW5kZXgoKSk7CisgICAgICAgICAgICBzZXQtPmlu
dmFsaWRhdGUoVmFyaWFibGVXcml0ZUZpcmVEZXRhaWwodGhpcywgcHJvcGVydHlOYW1lKSk7IC8v
IERvbid0IG1lc3MgYXJvdW5kIC0gaWYgd2UgaGFkIGZvdW5kIHRoaXMgc3RhdGljYWxseSwgd2Ug
d291bGQgaGF2ZSBpbnZhbGlkYXRlZCBpdC4KKyAgICAgICAgcmVnID0gJnZhcmlhYmxlQXQob2Zm
c2V0KTsKICAgICB9CiAgICAgcmVnLT5zZXQodm0sIHRoaXMsIHZhbHVlKTsKICAgICByZXR1cm4g
dHJ1ZTsKQEAgLTExNiw3ICsxMTEsNyBAQCB2b2lkIEpTTGV4aWNhbEVudmlyb25tZW50OjpnZXRP
d25Ob25JbmRlCiAgICAgICAgIGZvciAoU3ltYm9sVGFibGU6Ok1hcDo6aXRlcmF0b3IgaXQgPSB0
aGlzT2JqZWN0LT5zeW1ib2xUYWJsZSgpLT5iZWdpbihsb2NrZXIpOyBpdCAhPSBlbmQ7ICsraXQp
IHsKICAgICAgICAgICAgIGlmIChpdC0+dmFsdWUuZ2V0QXR0cmlidXRlcygpICYgRG9udEVudW0g
JiYgIXNob3VsZEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMobW9kZSkpCiAgICAgICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgICAgICBpZiAoIXRoaXNPYmplY3QtPmlzVmFsaWQoaXQtPnZh
bHVlKSkKKyAgICAgICAgICAgIGlmICghdGhpc09iamVjdC0+aXNWYWxpZChpdC0+dmFsdWUuc2Nv
cGVPZmZzZXQoKSkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBwcm9w
ZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyKGV4ZWMsIGl0LT5rZXkuZ2V0KCkpKTsKICAgICAgICAg
fQpAQCAtMTM3LDExICsxMzIsMTMgQEAgaW5saW5lIGJvb2wgSlNMZXhpY2FsRW52aXJvbm1lbnQ6
OnN5bWJvbAogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBTeW1ib2xUYWJsZUVu
dHJ5JiBlbnRyeSA9IGl0ZXItPnZhbHVlOwogICAgICAgICBBU1NFUlQoIWVudHJ5LmlzTnVsbCgp
KTsKLSAgICAgICAgaWYgKCFpc1ZhbGlkKGVudHJ5KSkKKyAgICAgICAgCisgICAgICAgIFNjb3Bl
T2Zmc2V0IG9mZnNldCA9IGVudHJ5LnNjb3BlT2Zmc2V0KCk7CisgICAgICAgIGlmICghaXNWYWxp
ZChvZmZzZXQpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKICAgICAgICAg
ZW50cnkuc2V0QXR0cmlidXRlcyhhdHRyaWJ1dGVzKTsKLSAgICAgICAgcmVnID0gJnJlZ2lzdGVy
QXQoZW50cnkuZ2V0SW5kZXgoKSk7CisgICAgICAgIHJlZyA9ICZ2YXJpYWJsZUF0KG9mZnNldCk7
CiAgICAgfQogICAgIHJlZy0+c2V0KHZtLCB0aGlzLCB2YWx1ZSk7CiAgICAgcmV0dXJuIHRydWU7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xleGljYWxFbnZpcm9ubWVu
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTGV4aWNh
bEVudmlyb25tZW50LmgJKHJldmlzaW9uIDE4MDcyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTTGV4aWNhbEVudmlyb25tZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5LCAyMDEzLCAyMDE0IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSwg
MjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtNDEsMzMgKzQxLDI3IEBAIGNsYXNzIFJlZ2lzdGVyOwogICAg
IAogY2xhc3MgSlNMZXhpY2FsRW52aXJvbm1lbnQgOiBwdWJsaWMgSlNFbnZpcm9ubWVudFJlY29y
ZCB7CiBwcml2YXRlOgotICAgIEpTTGV4aWNhbEVudmlyb25tZW50KFZNJiwgQ2FsbEZyYW1lKiwg
UmVnaXN0ZXIqLCBKU1Njb3BlKiwgQ29kZUJsb2NrKik7CisgICAgSlNMZXhpY2FsRW52aXJvbm1l
bnQoVk0mLCBTdHJ1Y3R1cmUqLCBKU1Njb3BlKiwgU3ltYm9sVGFibGUqKTsKICAgICAKIHB1Ymxp
YzoKICAgICB0eXBlZGVmIEpTRW52aXJvbm1lbnRSZWNvcmQgQmFzZTsKIAotICAgIHN0YXRpYyBK
U0xleGljYWxFbnZpcm9ubWVudCogY3JlYXRlKFZNJiB2bSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUs
IFJlZ2lzdGVyKiByZWdpc3RlcnMsIEpTU2NvcGUqIGN1cnJlbnRTY29wZSwgQ29kZUJsb2NrKiBj
b2RlQmxvY2spCisgICAgc3RhdGljIEpTTGV4aWNhbEVudmlyb25tZW50KiBjcmVhdGUoCisgICAg
ICAgIFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNTY29wZSogY3VycmVu
dFNjb3BlLCBTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUpCiAgICAgewotICAgICAgICBTeW1ib2xU
YWJsZSogc3ltYm9sVGFibGUgPSBjb2RlQmxvY2stPnN5bWJvbFRhYmxlKCk7Ci0gICAgICAgIEFT
U0VSVChjb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlKTsKLSAgICAgICAgSlNM
ZXhpY2FsRW52aXJvbm1lbnQqIGxleGljYWxFbnZpcm9ubWVudCA9IG5ldyAoCi0gICAgICAgICAg
ICBOb3ROdWxsLAotICAgICAgICAgICAgYWxsb2NhdGVDZWxsPEpTTGV4aWNhbEVudmlyb25tZW50
PigKLSAgICAgICAgICAgICAgICB2bS5oZWFwLAotICAgICAgICAgICAgICAgIGFsbG9jYXRpb25T
aXplKHN5bWJvbFRhYmxlKQotICAgICAgICAgICAgKQotICAgICAgICApIEpTTGV4aWNhbEVudmly
b25tZW50KHZtLCBjYWxsRnJhbWUsIHJlZ2lzdGVycywgY3VycmVudFNjb3BlLCBjb2RlQmxvY2sp
OwotICAgICAgICBsZXhpY2FsRW52aXJvbm1lbnQtPmZpbmlzaENyZWF0aW9uKHZtKTsKLSAgICAg
ICAgcmV0dXJuIGxleGljYWxFbnZpcm9ubWVudDsKKyAgICAgICAgSlNMZXhpY2FsRW52aXJvbm1l
bnQqIHJlc3VsdCA9CisgICAgICAgICAgICBuZXcgKE5vdE51bGwsIGFsbG9jYXRpb25TaXplKHN5
bWJvbFRhYmxlKSkKKyAgICAgICAgICAgIEpTTGV4aWNhbEVudmlyb25tZW50KHZtLCBnbG9iYWxP
YmplY3QtPmFjdGl2YXRpb25TdHJ1Y3R1cmUoKSwgY3VycmVudFNjb3BlLCBzeW1ib2xUYWJsZSk7
CisgICAgICAgIHJlc3VsdC0+ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIH0KLSAgICAgICAgCisg
ICAgCiAgICAgc3RhdGljIEpTTGV4aWNhbEVudmlyb25tZW50KiBjcmVhdGUoVk0mIHZtLCBDYWxs
RnJhbWUqIGNhbGxGcmFtZSwgSlNTY29wZSogY3VycmVudFNjb3BlLCBDb2RlQmxvY2sqIGNvZGVC
bG9jaykKICAgICB7Ci0gICAgICAgIHJldHVybiBjcmVhdGUodm0sIGNhbGxGcmFtZSwgY2FsbEZy
YW1lLT5yZWdpc3RlcnMoKSArIGNvZGVCbG9jay0+ZnJhbWVQb2ludGVyT2Zmc2V0VG9HZXRBY3Rp
dmF0aW9uUmVnaXN0ZXJzKCksIGN1cnJlbnRTY29wZSwgY29kZUJsb2NrKTsKKyAgICAgICAgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGNhbGxGcmFtZS0+bGV4aWNhbEdsb2JhbE9iamVj
dCgpOworICAgICAgICBTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUgPSBjb2RlQmxvY2stPnN5bWJv
bFRhYmxlKCk7CisgICAgICAgIHJldHVybiBjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgY3VycmVu
dFNjb3BlLCBzeW1ib2x0YWJsZSk7CiAgICAgfQotCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGls
ZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwotCisgICAgICAgIAogICAgIHN0YXRpYyBib29s
IGdldE93blByb3BlcnR5U2xvdChKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwg
UHJvcGVydHlTbG90Jik7CiAgICAgc3RhdGljIHZvaWQgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5h
bWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlv
bk1vZGUpOwogCkBAIC04MSwxMiArNzUsNiBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgU3RydWN0
dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
KSB7IHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBqc051bGwoKSwg
VHlwZUluZm8oQWN0aXZhdGlvbk9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsg
fQogCi0gICAgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiYgcmVnaXN0ZXJBdChpbnQpIGNvbnN0
OwotICAgIGJvb2wgaXNWYWxpZEluZGV4KGludCkgY29uc3Q7Ci0gICAgYm9vbCBpc1ZhbGlkKGNv
bnN0IFN5bWJvbFRhYmxlRW50cnkmKSBjb25zdDsKLSAgICBpbnQgcmVnaXN0ZXJzT2Zmc2V0KCk7
Ci0gICAgc3RhdGljIGludCByZWdpc3RlcnNPZmZzZXQoU3ltYm9sVGFibGUqKTsKLQogcHJvdGVj
dGVkOgogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRl
c0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMgfCBCYXNlOjpT
dHJ1Y3R1cmVGbGFnczsKIApAQCAtOTYsMzIgKzg0LDEzIEBAIHByaXZhdGU6CiAgICAgYm9vbCBz
eW1ib2xUYWJsZUdldChQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYsIGJvb2wmIHNsb3RJc1dy
aXRlYWJsZSk7CiAgICAgYm9vbCBzeW1ib2xUYWJsZVB1dChFeGVjU3RhdGUqLCBQcm9wZXJ0eU5h
bWUsIEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpOwogICAgIGJvb2wgc3ltYm9sVGFibGVQdXRX
aXRoQXR0cmlidXRlcyhWTSYsIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgdW5zaWduZWQgYXR0cmli
dXRlcyk7Ci0KLSAgICBzdGF0aWMgc2l6ZV90IGFsbG9jYXRpb25TaXplKFN5bWJvbFRhYmxlKik7
Ci0gICAgc3RhdGljIHNpemVfdCBzdG9yYWdlT2Zmc2V0KCk7Ci0KLSAgICBXcml0ZUJhcnJpZXI8
VW5rbm93bj4qIHN0b3JhZ2UoKTsgLy8gY2FwdHVyZUNvdW50KCkgbnVtYmVyIG9mIHJlZ2lzdGVy
cy4KIH07CiAKLWlubGluZSBKU0xleGljYWxFbnZpcm9ubWVudDo6SlNMZXhpY2FsRW52aXJvbm1l
bnQoVk0mIHZtLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgUmVnaXN0ZXIqIHJlZ2lzdGVycywgSlNT
Y29wZSogY3VycmVudFNjb3BlLCBDb2RlQmxvY2sqIGNvZGVCbG9jaykKLSAgICA6IEJhc2UoCi0g
ICAgICAgIHZtLAotICAgICAgICBjYWxsRnJhbWUtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+YWN0
aXZhdGlvblN0cnVjdHVyZSgpLAotICAgICAgICByZWdpc3RlcnMsCi0gICAgICAgIGN1cnJlbnRT
Y29wZSwKLSAgICAgICAgY29kZUJsb2NrLT5zeW1ib2xUYWJsZSgpKQoraW5saW5lIEpTTGV4aWNh
bEVudmlyb25tZW50OjpKU0xleGljYWxFbnZpcm9ubWVudChWTSYgdm0sIFN0cnVjdHVyZSogc3Ry
dWN0dXJlLCBKU1Njb3BlKiBjdXJyZW50U2NvcGUsIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSkK
KyAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSwgY3VycmVudFNjb3BlLCBzeW1ib2xUYWJsZSkKIHsK
LSAgICBTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUgPSBjb2RlQmxvY2stPnN5bWJvbFRhYmxlKCk7
Ci0gICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiBzdG9yYWdlID0gdGhpcy0+c3RvcmFnZSgpOwot
ICAgIHNpemVfdCBjYXB0dXJlQ291bnQgPSBzeW1ib2xUYWJsZS0+Y2FwdHVyZUNvdW50KCk7Ci0g
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjYXB0dXJlQ291bnQ7ICsraSkKLSAgICAgICAgbmV3
IChOb3ROdWxsLCAmc3RvcmFnZVtpXSkgV3JpdGVCYXJyaWVyPFVua25vd24+KFVuZGVmaW5lZFdy
aXRlQmFycmllclRhZyk7Ci0gICAgbV9yZWdpc3RlcnMgPSByZWludGVycHJldF9jYXN0X3B0cjxX
cml0ZUJhcnJpZXJCYXNlPFVua25vd24+Kj4oCi0gICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hh
cio+KHRoaXMpICsgcmVnaXN0ZXJzT2Zmc2V0KHN5bWJvbFRhYmxlKSk7CiB9CiAKLUpTTGV4aWNh
bEVudmlyb25tZW50KiBhc0FjdGl2YXRpb24oSlNWYWx1ZSk7Ci0KIGlubGluZSBKU0xleGljYWxF
bnZpcm9ubWVudCogYXNBY3RpdmF0aW9uKEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgQVNTRVJUKGFz
T2JqZWN0KHZhbHVlKS0+aW5oZXJpdHMoSlNMZXhpY2FsRW52aXJvbm1lbnQ6OmluZm8oKSkpOwpA
QCAtMTMzLDQ5ICsxMDIsNiBAQCBBTFdBWVNfSU5MSU5FIEpTTGV4aWNhbEVudmlyb25tZW50KiBS
ZWdpCiAgICAgcmV0dXJuIGFzQWN0aXZhdGlvbihqc1ZhbHVlKCkpOwogfQogCi1pbmxpbmUgaW50
IEpTTGV4aWNhbEVudmlyb25tZW50OjpyZWdpc3RlcnNPZmZzZXQoU3ltYm9sVGFibGUqIHN5bWJv
bFRhYmxlKQotewotICAgIHJldHVybiBzdG9yYWdlT2Zmc2V0KCkgKyAoKHN5bWJvbFRhYmxlLT5j
YXB0dXJlQ291bnQoKSAtIHN5bWJvbFRhYmxlLT5jYXB0dXJlU3RhcnQoKSAgLSAxKSAqIHNpemVv
ZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKTsKLX0KLQotaW5saW5lIHNpemVfdCBKU0xleGljYWxF
bnZpcm9ubWVudDo6c3RvcmFnZU9mZnNldCgpCi17Ci0gICAgcmV0dXJuIFdURjo6cm91bmRVcFRv
TXVsdGlwbGVPZjxzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KT4oc2l6ZW9mKEpTTGV4aWNh
bEVudmlyb25tZW50KSk7Ci19Ci0KLWlubGluZSBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIEpTTGV4
aWNhbEVudmlyb25tZW50OjpzdG9yYWdlKCkKLXsKLSAgICByZXR1cm4gcmVpbnRlcnByZXRfY2Fz
dF9wdHI8V3JpdGVCYXJyaWVyPFVua25vd24+Kj4oCi0gICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8
Y2hhcio+KHRoaXMpICsgc3RvcmFnZU9mZnNldCgpKTsKLX0KLQotaW5saW5lIHNpemVfdCBKU0xl
eGljYWxFbnZpcm9ubWVudDo6YWxsb2NhdGlvblNpemUoU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxl
KQotewotICAgIHNpemVfdCBvYmplY3RTaXplSW5CeXRlcyA9IFdURjo6cm91bmRVcFRvTXVsdGlw
bGVPZjxzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KT4oc2l6ZW9mKEpTTGV4aWNhbEVudmly
b25tZW50KSk7Ci0gICAgc2l6ZV90IHN0b3JhZ2VTaXplSW5CeXRlcyA9IHN5bWJvbFRhYmxlLT5j
YXB0dXJlQ291bnQoKSAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pOwotICAgIHJldHVy
biBvYmplY3RTaXplSW5CeXRlcyArIHN0b3JhZ2VTaXplSW5CeXRlczsKLX0KLQotaW5saW5lIGJv
b2wgSlNMZXhpY2FsRW52aXJvbm1lbnQ6OmlzVmFsaWRJbmRleChpbnQgaW5kZXgpIGNvbnN0Ci17
Ci0gICAgaWYgKGluZGV4ID4gc3ltYm9sVGFibGUoKS0+Y2FwdHVyZVN0YXJ0KCkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBpZiAoaW5kZXggPD0gc3ltYm9sVGFibGUoKS0+Y2FwdHVyZUVu
ZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWlubGlu
ZSBib29sIEpTTGV4aWNhbEVudmlyb25tZW50Ojppc1ZhbGlkKGNvbnN0IFN5bWJvbFRhYmxlRW50
cnkmIGVudHJ5KSBjb25zdAotewotICAgIHJldHVybiBpc1ZhbGlkSW5kZXgoZW50cnkuZ2V0SW5k
ZXgoKSk7Ci19Ci0KLWlubGluZSBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+JiBKU0xleGljYWxF
bnZpcm9ubWVudDo6cmVnaXN0ZXJBdChpbnQgaW5kZXgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKGlz
VmFsaWRJbmRleChpbmRleCkpOwotICAgIHJldHVybiBCYXNlOjpyZWdpc3RlckF0KGluZGV4KTsK
LX0KLQogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBKU0xleGljYWxFbnZpcm9ubWVu
dF9oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU05hbWVTY29wZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNOYW1lU2NvcGUu
Y3BwCShyZXZpc2lvbiAxODA3MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U05hbWVTY29wZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDE0ICs0Nyw2IEBAIEpTTmFtZVNj
b3BlKiBKU05hbWVTY29wZTo6Y3JlYXRlKFZNJiB2bSwKICAgICByZXR1cm4gbnVsbHB0cjsKIH0K
IAotdm9pZCBKU05hbWVTY29wZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQotewotICAgIEpTTmFtZVNjb3BlKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpT
TmFtZVNjb3BlKj4oY2VsbCk7Ci0gICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2Jq
ZWN0LCBpbmZvKCkpOwotICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRv
cik7Ci0gICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fcmVnaXN0ZXJTdG9yZSk7Ci19
Ci0KIEpTVmFsdWUgSlNOYW1lU2NvcGU6OnRvVGhpcyhKU0NlbGwqLCBFeGVjU3RhdGUqIGV4ZWMs
IEVDTUFNb2RlIGVjbWFNb2RlKQogewogICAgIGlmIChlY21hTW9kZSA9PSBTdHJpY3RNb2RlKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNOYW1lU2NvcGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU05hbWVTY29wZS5oCShyZXZp
c2lvbiAxODA3MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU05hbWVTY29w
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCwzOCArNDQsMzcgQEAgcHVibGljOgogICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+CiAgICAgc3RhdGljIFQqIGNyZWF0ZShWTSYgdm0sIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTU2NvcGUqIGN1cnJlbnRTY29wZSwgU3ltYm9sVGFibGUqIHN5
bWJvbFRhYmxlLCBKU1ZhbHVlIHZhbHVlKQogICAgIHsKLSAgICAgICAgVCogc2NvcGVPYmplY3Qg
PSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxUPih2bS5oZWFwKSkgVCh2bSwgZ2xvYmFsT2Jq
ZWN0LCBjdXJyZW50U2NvcGUsIHN5bWJvbFRhYmxlKTsKKyAgICAgICAgVCogc2NvcGVPYmplY3Qg
PSBuZXcgKAorICAgICAgICAgICAgTm90TnVsbCwgYWxsb2NhdGVDZWxsPFQ+KHZtLmhlYXAsIGFs
bG9jYXRpb25TaXplRm9yU2NvcGVTaXplKDEpKQorICAgICAgICAgICAgVCh2bSwgZ2xvYmFsT2Jq
ZWN0LCBjdXJyZW50U2NvcGUsIHN5bWJvbFRhYmxlKTsKICAgICAgICAgc2NvcGVPYmplY3QtPmZp
bmlzaENyZWF0aW9uKHZtLCB2YWx1ZSk7CiAgICAgICAgIHJldHVybiBzY29wZU9iamVjdDsKICAg
ICB9CiAgICAgCiAgICAgc3RhdGljIEpTTmFtZVNjb3BlKiBjcmVhdGUoVk0mLCBKU0dsb2JhbE9i
amVjdCosIEpTU2NvcGUqIGN1cnJlbnRTY29wZSwgU3ltYm9sVGFibGUqLCBKU1ZhbHVlLCBUeXBl
KTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3Im
KTsKICAgICBzdGF0aWMgSlNWYWx1ZSB0b1RoaXMoSlNDZWxsKiwgRXhlY1N0YXRlKiwgRUNNQU1v
ZGUpOwogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU09iamVjdCosIEV4ZWNT
dGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CiAgICAgc3RhdGljIHZvaWQgcHV0
KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlT
bG90Jik7CiAKICAgICBERUNMQVJFX0lORk87CiAKLSAgICBKU1ZhbHVlIHZhbHVlKCkgY29uc3Qg
eyByZXR1cm4gbV9yZWdpc3RlclN0b3JlLmdldCgpOyB9CisgICAgSlNWYWx1ZSB2YWx1ZSgpIGNv
bnN0IHsgcmV0dXJuIHZhcmlhYmxlQXQoMCkuZ2V0KCk7IH0KIAogcHJvdGVjdGVkOgogICAgIHZv
aWQgZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBKU1ZhbHVlIHZhbHVlKQogICAgIHsKLSAgICAgICAg
QmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwotICAgICAgICBtX3JlZ2lzdGVyU3RvcmUuc2V0KHZt
LCB0aGlzLCB2YWx1ZSk7CisgICAgICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uVW5pbml0aWFsaXpl
ZCh2bSk7CisgICAgICAgIHZhcmlhYmxlQXQoMCkuc2V0KHZtLCB0aGlzLCB2YWx1ZSk7CiAgICAg
fQogCiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVz
R2V0T3duUHJvcGVydHlTbG90IHwgQmFzZTo6U3RydWN0dXJlRmxhZ3M7CiAKICAgICBKU05hbWVT
Y29wZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU1Njb3BlKiBuZXh0LCBTeW1ib2xU
YWJsZSogc3ltYm9sVGFibGUpCi0gICAgICAgIDogQmFzZSh2bSwgc3RydWN0dXJlLCByZWludGVy
cHJldF9jYXN0PFJlZ2lzdGVyKj4oJm1fcmVnaXN0ZXJTdG9yZSArIDEpLCBuZXh0LCBzeW1ib2xU
YWJsZSkKKyAgICAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUsIG5leHQsIHN5bWJvbFRhYmxlKQog
ICAgIHsKKyAgICAgICAgQVNTRVJUKHN5bWJvbFRhYmxlLT5zY29wZVNpemUoKSA9PSAxKTsKICAg
ICB9Ci0KLXByaXZhdGU6Ci0gICAgV3JpdGVCYXJyaWVyPFVua25vd24+IG1fcmVnaXN0ZXJTdG9y
ZTsKIH07CiAKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVu
dGVkVmFyaWFibGVPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuY3BwCShyZXZpc2lvbiAxODA3MjAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2Jq
ZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEyLCAyMDEzLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzMsMzIgKzMzLDMwIEBACiAKIG5h
bWVzcGFjZSBKU0MgewogCi1pbnQgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdDo6ZmluZFJlZ2lz
dGVySW5kZXgodm9pZCogcmVnaXN0ZXJBZGRyZXNzKQorU2NvcGVPZmZzZXQgSlNTZWdtZW50ZWRW
YXJpYWJsZU9iamVjdDo6ZmluZFJlZ2lzdGVySW5kZXgodm9pZCogcmVnaXN0ZXJBZGRyZXNzKQog
ewogICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7CiAgICAgCi0gICAgZm9y
IChpbnQgaSA9IG1fcmVnaXN0ZXJzLnNpemUoKTsgaS0tOykgeworICAgIGZvciAodW5zaWduZWQg
aSA9IG1fcmVnaXN0ZXJzLnNpemUoKTsgaS0tOykgewogICAgICAgICBpZiAoJm1fcmVnaXN0ZXJz
W2ldICE9IHJlZ2lzdGVyQWRkcmVzcykKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBy
ZXR1cm4gaTsKKyAgICAgICAgcmV0dXJuIFNjb3BlT2Zmc2V0KGkpOwogICAgIH0KICAgICBDUkFT
SCgpOwotICAgIHJldHVybiAtMTsKKyAgICByZXR1cm4gU2NvcGVPZmZzZXQoKTsKIH0KIAotaW50
IEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3Q6OmFkZFJlZ2lzdGVycyhpbnQgbnVtYmVyT2ZSZWdp
c3RlcnNUb0FkZCkKK1Njb3BlT2Zmc2V0IEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3Q6OmFkZFJl
Z2lzdGVycyh1bnNpZ25lZCBudW1iZXJPZlJlZ2lzdGVyc1RvQWRkKQogewogICAgIENvbmN1cnJl
bnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7CiAgICAgCi0gICAgQVNTRVJUKG51bWJlck9mUmVn
aXN0ZXJzVG9BZGQgPj0gMCk7Ci0gICAgCiAgICAgc2l6ZV90IG9sZFNpemUgPSBtX3JlZ2lzdGVy
cy5zaXplKCk7CiAgICAgbV9yZWdpc3RlcnMuZ3JvdyhvbGRTaXplICsgbnVtYmVyT2ZSZWdpc3Rl
cnNUb0FkZCk7CiAgICAgCiAgICAgZm9yIChzaXplX3QgaSA9IG51bWJlck9mUmVnaXN0ZXJzVG9B
ZGQ7IGktLTspCiAgICAgICAgIG1fcmVnaXN0ZXJzW29sZFNpemUgKyBpXS5zZXRXaXRob3V0V3Jp
dGVCYXJyaWVyKGpzVW5kZWZpbmVkKCkpOwogICAgIAotICAgIHJldHVybiBzdGF0aWNfY2FzdDxp
bnQ+KG9sZFNpemUpOworICAgIHJldHVybiBTY29wZU9mZnNldChvbGRTaXplKTsKIH0KIAogdm9p
ZCBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwg
U2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuaAkocmV2aXNp
b24gMTgwNzIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRW
YXJpYWJsZU9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC01NywyNCArNTcsMjMgQEAgY2xhc3Mg
SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdCA6IHB1YmxpYwogcHVibGljOgogICAgIHR5cGVkZWYg
SlNTeW1ib2xUYWJsZU9iamVjdCBCYXNlOwogCi0gICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiBy
ZWdpc3RlckF0KGludCBpbmRleCkgeyByZXR1cm4gbV9yZWdpc3RlcnNbaW5kZXhdOyB9CisgICAg
V3JpdGVCYXJyaWVyPFVua25vd24+JiB2YXJpYWJsZUF0KFNjb3BlT2Zmc2V0IG9mZnNldCkgeyBy
ZXR1cm4gbV92YXJpYWJsZXNbb2Zmc2V0Lm9mZnNldCgpXTsgfQogICAgIAogICAgIC8vIFRoaXMg
aXMgYSBzbG93IG1ldGhvZCBjYWxsLCB3aGljaCBzZWFyY2hlcyB0aGUgcmVnaXN0ZXIgYmFuayB0
byBmaW5kIHRoZSBpbmRleAogICAgIC8vIGdpdmVuIGEgcG9pbnRlci4gSXQgd2lsbCBDUkFTSCgp
IGlmIGl0IGRvZXMgbm90IGZpbmQgdGhlIHJlZ2lzdGVyLiBPbmx5IHVzZSB0aGlzCiAgICAgLy8g
aW4gZGVidWcgY29kZSAobGlrZSBieXRlY29kZSBkdW1waW5nKS4KLSAgICBKU19FWFBPUlRfUFJJ
VkFURSBpbnQgZmluZFJlZ2lzdGVySW5kZXgodm9pZCopOworICAgIEpTX0VYUE9SVF9QUklWQVRF
IFNjb3BlT2Zmc2V0IGZpbmRSZWdpc3RlckluZGV4KHZvaWQqKTsKICAgICAKLSAgICBXcml0ZUJh
cnJpZXI8VW5rbm93bj4qIGFzc2VydFJlZ2lzdGVySXNJblRoaXNPYmplY3QoV3JpdGVCYXJyaWVy
PFVua25vd24+KiByZWdpc3RlclBvaW50ZXIpCisgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiBh
c3NlcnRWYXJpYWJsZUlzSW5UaGlzT2JqZWN0KFdyaXRlQmFycmllcjxVbmtub3duPiogdmFyaWFi
bGVQb2ludGVyKQogICAgIHsKLSNpZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgICAgIGZpbmRSZWdp
c3RlckluZGV4KHJlZ2lzdGVyUG9pbnRlcik7Ci0jZW5kaWYKKyAgICAgICAgaWYgKCFBU1NFUlRf
RElTQUJMRUQpCisgICAgICAgICAgICBmaW5kUmVnaXN0ZXJJbmRleChyZWdpc3RlclBvaW50ZXIp
OwogICAgICAgICByZXR1cm4gcmVnaXN0ZXJQb2ludGVyOwogICAgIH0KICAgICAKICAgICAvLyBB
ZGRzIG51bWJlck9mUmVnaXN0ZXJzVG9BZGQgcmVnaXN0ZXJzLCBpbml0aWFsaXplcyB0aGVtIHRv
IFVuZGVmaW5lZCwgYW5kIHJldHVybnMKICAgICAvLyB0aGUgaW5kZXggb2YgdGhlIGZpcnN0IG9u
ZSBhZGRlZC4KLSAgICBKU19FWFBPUlRfUFJJVkFURSBpbnQgYWRkUmVnaXN0ZXJzKGludCBudW1i
ZXJPZlJlZ2lzdGVyc1RvQWRkKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBTY29wZU9mZnNldCBh
ZGRSZWdpc3RlcnModW5zaWduZWQgbnVtYmVyT2ZSZWdpc3RlcnNUb0FkZCk7CiAgICAgCiAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90
VmlzaXRvciYpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJv
bFRhYmxlT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNTeW1ib2xUYWJsZU9iamVjdC5oCShyZXZpc2lvbiAxODA3MjApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTc4LDcgKzc4LDcgQEAgaW5saW5lIGJvb2wgc3ltYm9sVGFibGVHZXQoCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICBTeW1ib2xUYWJsZUVudHJ5OjpGYXN0IGVudHJ5ID0gaXRlci0+dmFs
dWU7CiAgICAgQVNTRVJUKCFlbnRyeS5pc051bGwoKSk7Ci0gICAgc2xvdC5zZXRWYWx1ZShvYmpl
Y3QsIGVudHJ5LmdldEF0dHJpYnV0ZXMoKSB8IERvbnREZWxldGUsIG9iamVjdC0+cmVnaXN0ZXJB
dChlbnRyeS5nZXRJbmRleCgpKS5nZXQoKSk7CisgICAgc2xvdC5zZXRWYWx1ZShvYmplY3QsIGVu
dHJ5LmdldEF0dHJpYnV0ZXMoKSB8IERvbnREZWxldGUsIG9iamVjdC0+dmFyaWFibGVBdChlbnRy
eS5zY29wZU9mZnNldCgpKS5nZXQoKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTk0LDcg
Kzk0LDcgQEAgaW5saW5lIGJvb2wgc3ltYm9sVGFibGVHZXQoCiAgICAgU3ltYm9sVGFibGVFbnRy
eTo6RmFzdCBlbnRyeSA9IGl0ZXItPnZhbHVlOwogICAgIEFTU0VSVCghZW50cnkuaXNOdWxsKCkp
OwogICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcigKLSAgICAgICAgb2JqZWN0LT5yZWdpc3Rl
ckF0KGVudHJ5LmdldEluZGV4KCkpLmdldCgpLCBlbnRyeS5nZXRBdHRyaWJ1dGVzKCkgfCBEb250
RGVsZXRlKTsKKyAgICAgICAgb2JqZWN0LT52YXJpYWJsZUF0KGVudHJ5LnNjb3BlT2Zmc2V0KCkp
LmdldCgpLCBlbnRyeS5nZXRBdHRyaWJ1dGVzKCkgfCBEb250RGVsZXRlKTsKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIApAQCAtMTEwLDcgKzExMCw3IEBAIGlubGluZSBib29sIHN5bWJvbFRhYmxlR2V0
KAogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgU3ltYm9sVGFibGVFbnRyeTo6RmFzdCBlbnRy
eSA9IGl0ZXItPnZhbHVlOwogICAgIEFTU0VSVCghZW50cnkuaXNOdWxsKCkpOwotICAgIHNsb3Qu
c2V0VmFsdWUob2JqZWN0LCBlbnRyeS5nZXRBdHRyaWJ1dGVzKCkgfCBEb250RGVsZXRlLCBvYmpl
Y3QtPnJlZ2lzdGVyQXQoZW50cnkuZ2V0SW5kZXgoKSkuZ2V0KCkpOworICAgIHNsb3Quc2V0VmFs
dWUob2JqZWN0LCBlbnRyeS5nZXRBdHRyaWJ1dGVzKCkgfCBEb250RGVsZXRlLCBvYmplY3QtPnZh
cmlhYmxlQXQoZW50cnkuc2NvcGVPZmZzZXQoKSkuZ2V0KCkpOwogICAgIHNsb3RJc1dyaXRlYWJs
ZSA9ICFlbnRyeS5pc1JlYWRPbmx5KCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC0xNDUsNyAr
MTQ1LDcgQEAgaW5saW5lIGJvb2wgc3ltYm9sVGFibGVQdXQoCiAgICAgICAgICAgICAvLyBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM0NjAxCiAgICAgICAgICAgICBz
ZXQtPm5vdGlmeVdyaXRlKHZtLCB2YWx1ZSwgb2JqZWN0LCBwcm9wZXJ0eU5hbWUpOwogICAgICAg
ICB9Ci0gICAgICAgIHJlZyA9ICZvYmplY3QtPnJlZ2lzdGVyQXQoZmFzdEVudHJ5LmdldEluZGV4
KCkpOworICAgICAgICByZWcgPSAmb2JqZWN0LT52YXJpYWJsZUF0KGZhc3RFbnRyeS5zY29wZU9m
ZnNldCgpKTsKICAgICB9CiAgICAgLy8gSSdkIHByZWZlciB3ZSBub3QgaG9sZCBsb2NrIHdoaWxl
IGV4ZWN1dGluZyBiYXJyaWVycywgc2luY2UgSSBwcmVmZXIgdG8gcmVzZXJ2ZQogICAgIC8vIHRo
ZSByaWdodCBmb3IgYmFycmllcnMgdG8gYmUgYWJsZSB0byB0cmlnZ2VyIEdDLiBBbmQgSSBkb24n
dCB3YW50IHRvIGhvbGQgVk0KQEAgLTE3Myw3ICsxNzMsNyBAQCBpbmxpbmUgYm9vbCBzeW1ib2xU
YWJsZVB1dFdpdGhBdHRyaWJ1dGVzCiAgICAgICAgIGlmIChWYXJpYWJsZVdhdGNocG9pbnRTZXQq
IHNldCA9IGVudHJ5LndhdGNocG9pbnRTZXQoKSkKICAgICAgICAgICAgIHNldC0+bm90aWZ5V3Jp
dGUodm0sIHZhbHVlLCBvYmplY3QsIHByb3BlcnR5TmFtZSk7CiAgICAgICAgIGVudHJ5LnNldEF0
dHJpYnV0ZXMoYXR0cmlidXRlcyk7Ci0gICAgICAgIHJlZyA9ICZvYmplY3QtPnJlZ2lzdGVyQXQo
ZW50cnkuZ2V0SW5kZXgoKSk7CisgICAgICAgIHJlZyA9ICZvYmplY3QtPnZhcmlhYmxlQXQoZW50
cnkuc2NvcGVPZmZzZXQoKSk7CiAgICAgfQogICAgIHJlZy0+c2V0KHZtLCBvYmplY3QsIHZhbHVl
KTsKICAgICByZXR1cm4gdHJ1ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
VHlwZS5oCShyZXZpc2lvbiAxODA3MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTgsNyArNTgsOCBAQCBlbnVtIEpTVHlwZSA6
IHVpbnQ4X3QgewogICAgIFB1cmVGb3J3YXJkaW5nUHJveHlUeXBlLAogICAgIEltcHVyZVByb3h5
VHlwZSwKICAgICBXaXRoU2NvcGVUeXBlLAotICAgIEFyZ3VtZW50c1R5cGUsCisgICAgRGlyZWN0
QXJndW1lbnRzVHlwZSwKKyAgICBTY29wZWRBcmd1bWVudHNUeXBlLAogCiAgICAgSW50OEFycmF5
VHlwZSwKICAgICBJbnQxNkFycmF5VHlwZSwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL091dE9mQmFuZEFyZ3VtZW50cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvT3V0T2ZCYW5kQXJndW1lbnRzLmNwcAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL091dE9mQmFuZEFyZ3VtZW50cy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwyMTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk91dE9m
QmFuZEFyZ3VtZW50cy5oIgorCisjaW5jbHVkZSAiSlNBcmd1bWVudHNJdGVyYXRvci5oIgorI2lu
Y2x1ZGUgIkpTQ0lubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK1NUQVRJQ19BU1NFUlRf
SVNfVFJJVklBTExZX0RFU1RSVUNUSUJMRShPdXRPZkJhbmRBcmd1bWVudHMpOworCitjb25zdCBD
bGFzc0luZm8gT3V0T2ZCYW5kQXJndW1lbnRzOjpzX2luZm8gPSB7ICJBcmd1bWVudHMiLCAmQmFz
ZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKE91dE9mQmFuZEFyZ3VtZW50cykgfTsK
KworT3V0T2ZCYW5kQXJndW1lbnRzOjpPdXRPZkJhbmRBcmd1bWVudHMoVk0mIHZtLCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSkKKyAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSwgbnVsbHB0cikKKyAgICAs
IG1fc3BlY2lhbHNNYXRlcmlhbGl6ZWQoZmFsc2UpCit7Cit9CisKK091dE9mQmFuZEFyZ3VtZW50
cyogT3V0T2ZCYW5kQXJndW1lbnRzOjpjcmVhdGVFbXB0eSgKKyAgICBWTSYgdm0sIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTRnVuY3Rpb24qIGNhbGxlZSkKK3sKKyAgICBPdXRPZkJh
bmRBcmd1bWVudHMqIHJlc3VsdCA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPE91dE9mQmFu
ZEFyZ3VtZW50cz4odm0uaGVhcCkpCisgICAgICAgIE91dE9mQmFuZEFyZ3VtZW50cyh2bSwgZ2xv
YmFsT2JqZWN0LT5vdXRPZkJhbmRBcmd1bWVudHNTdHJ1Y3R1cmUoKSk7CisgICAgcmVzdWx0LT5m
aW5pc2hDcmVhdGlvbih2bSk7CisgICAgcmVzdWx0LT5tX2NhbGxlZS5zZXQodm0sIHRoaXMsIGNh
bGxlZSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworT3V0T2ZCYW5kQXJndW1lbnRzKiBPdXRP
ZkJhbmRBcmd1bWVudHM6OmNyZWF0ZUVtcHR5KEV4ZWNTdGF0ZSogZXhlYywgSlNGdW5jdGlvbiog
Y2FsbGVlKQoreworICAgIC8vIE5CLiBTb21lIGNsaWVudHMgbWlnaHQgZXhwZWN0IHRoYXQgdGhl
IGdsb2JhbCBvYmplY3Qgb2Ygb2YgdGhpcyBvYmplY3QgaXMgdGhlIGdsb2JhbCBvYmplY3QKKyAg
ICAvLyBvZiB0aGUgY2FsbGVlLiBXZSBkb24ndCBkbyB0aGlzIGZvciBub3csIGJ1dCBtYXliZSB3
ZSBzaG91bGQuCisgICAgcmV0dXJuIGNyZWF0ZUVtcHR5KGV4ZWMtPnZtKCksIGV4ZWMtPmxleGlj
YWxHbG9iYWxPYmplY3QoKSwgY2FsbGVlKTsKK30KKworT3V0T2ZCYW5kQXJndW1lbnRzKiBPdXRP
ZkJhbmRBcmd1bWVudHM6OmNyZWF0ZVdpdGhJbmxpbmVGcmFtZShFeGVjU3RhdGUqIG15RnJhbWUs
IEV4ZWNTdGF0ZSogdGFyZ2V0RnJhbWUsIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1l
LCBBcmd1bWVudHNNb2RlIG1vZGUpCit7CisgICAgVk0mIHZtID0gbXlGcmFtZS0+dm0oKTsKKyAg
ICAKKyAgICBKU0Z1bmN0aW9uKiBjYWxsZWU7CisgICAgCisgICAgaWYgKGlubGluZUNhbGxGcmFt
ZSkKKyAgICAgICAgY2FsbGVlID0ganNDYXN0PEpTRnVuY3Rpb24qPihpbmxpbmVDYWxsRnJhbWUt
PmNhbGxlZVJlY292ZXJ5LnJlY292ZXIodGFyZ2V0RnJhbWUpKTsKKyAgICBlbHNlCisgICAgICAg
IGNhbGxlZSA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4odGFyZ2V0RnJhbWUtPmNhbGxlZSgpKTsKKwor
ICAgIC8vIE5CLiBJdCdzIHNvbWV3aGF0IGFyYml0cmFyeSB0aGF0IHdlIHRpZSB0aGUgc3RyaWN0
bmVzcyBvZiB0aGlzIG9iamVjdCB0byB0aGUgc3RyaWN0bmVzcyBvZgorICAgIC8vIHRoZSBjYWxs
ZWUuCisgICAgYm9vbCBpc1N0cmljdE1vZGUgPSBleGVjdXRhYmxlLT5pc1N0cmljdE1vZGUoKTsK
KworICAgIE91dE9mQmFuZEFyZ3VtZW50cyogcmVzdWx0ID0gY3JlYXRlRW1wdHkobXlGcmFtZSwg
Y2FsbGVlKTsKKyAgICAKKyAgICB1bnNpZ25lZCBsZW5ndGg7CisgICAgc3dpdGNoIChtb2RlKSB7
CisgICAgY2FzZSBDbG9uZWRBcmd1bWVudHNDcmVhdGlvbk1vZGU6IHsKKyAgICAgICAgaWYgKGlu
bGluZUNhbGxGcmFtZSkgeworICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+YXJndW1l
bnRDb3VudFJlZ2lzdGVyLmlzVmFsaWQoKSkKKyAgICAgICAgICAgICAgICBsZW5ndGggPSBleGVj
LT5yKGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudFJlZ2lzdGVyKS51bmJveGVkSW50MzIo
KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBsZW5ndGggPSBpbmxpbmVDYWxs
RnJhbWUtPmFyZ3VtZW50cy5zaXplKCk7CisgICAgICAgICAgICBsZW5ndGgtLTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbGVuZ3RoOyBpLS07KQorICAgICAg
ICAgICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0SW5kZXgobXlGcmFtZSwgaSwgaW5saW5lQ2FsbEZy
YW1lLT5hcmd1bWVudHNbaV0ucmVjb3Zlcih0YXJnZXRGcmFtZSkpOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgbGVuZ3RoID0gdGFyZ2V0RnJhbWUtPmFyZ3VtZW50Q291bnQoKTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbGVuZ3RoOyBpLS07KQor
ICAgICAgICAgICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0SW5kZXgobXlGcmFtZSwgaSwgdGFyZ2V0
RnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KGkpKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsK
KyAgICB9CisgICAgICAgIAorICAgIGNhc2UgRmFrZUFyZ3VtZW50VmFsdWVzQ3JlYXRpb25Nb2Rl
OiB7CisgICAgICAgIGxlbmd0aCA9IDA7CisgICAgICAgIGJyZWFrOworICAgIH0gfQorICAgIAor
ICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVt
YmVyKGxlbmd0aCkpOworICAgIGlmIChpc1N0cmljdE1vZGUpIHsKKyAgICAgICAgcmVzdWx0LT5w
dXREaXJlY3RBY2Nlc3NvcihleGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT5jYWxsZWUsIHRoaXNPYmpl
Y3QtPmdsb2JhbE9iamVjdCgpLT50aHJvd1R5cGVFcnJvckdldHRlclNldHRlcihleGVjLT52bSgp
KSwgRG9udERlbGV0ZSB8IERvbnRFbnVtIHwgQWNjZXNzb3IpOworICAgICAgICByZXN1bHQtPnB1
dERpcmVjdEFjY2Vzc29yKGV4ZWMsIHZtLnByb3BlcnR5TmFtZXMtPmNhbGxlZSwgdGhpc09iamVj
dC0+Z2xvYmFsT2JqZWN0KCktPnRocm93VHlwZUVycm9yR2V0dGVyU2V0dGVyKGV4ZWMtPnZtKCkp
LCBEb250RGVsZXRlIHwgRG9udEVudW0gfCBBY2Nlc3Nvcik7CisgICAgfSBlbHNlCisgICAgICAg
IHJlc3VsdC0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5jYWxsZWUsIEpTVmFsdWUo
Y2FsbGVlKSk7CisgICAgCisgICAgcmVzdWx0LT5KU0NfTkFUSVZFX0ZVTkNUSU9OKHZtLnByb3Bl
cnR5TmFtZXMtPml0ZXJhdG9yUHJpdmF0ZU5hbWUsIGFyZ3VtZW50c0Z1bmNJdGVyYXRvciwgRG9u
dEVudW0sIDApOworfQorCitPdXRPZkJhbmRBcmd1bWVudHMqIE91dE9mQmFuZEFyZ3VtZW50czo6
Y3JlYXRlV2l0aE1hY2hpbmVGcmFtZShFeGVjU3RhdGUqIG15RnJhbWUsIEV4ZWNTdGF0ZSogdGFy
Z2V0RnJhbWUsIEFyZ3VtZW50c01vZGUgbW9kZSkKK3sKKyAgICByZXR1cm4gY3JlYXRlV2l0aElu
bGluZUZyYW1lKG15RnJhbWUsIHRhcmdldEZyYW1lLCBudWxscHRyLCBtb2RlKTsKK30KKworU3Ry
dWN0dXJlKiBPdXRPZkJhbmRBcmd1bWVudHM6OmNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQoreworICAgIHJldHVy
biBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZv
KE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKK30KKworYm9vbCBPdXRPZkJh
bmRBcmd1bWVudHM6OmdldE93blByb3BlcnR5U2xvdChKU09iamVjdCogb2JqZWN0LCBFeGVjU3Rh
dGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBpZGVudCwgUHJvcGVydHlTbG90JiBzbG90KQoreworICAg
IE91dE9mQmFuZEFyZ3VtZW50cyogdGhpc09iamVjdCA9IGpzQ2FzdDxPdXRPZkJhbmRBcmd1bWVu
dHMqPihvYmplY3QpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgCisgICAgaWYgKGlk
ZW50ID09IHZtLnByb3BlcnR5TmFtZXMtPmNhbGxlcgorICAgICAgICB8fCBpZGVudCA9PSB2bS5w
cm9wZXJ0eU5hbWVzLT5jYWxsZWUpCisgICAgICAgIHRoaXNPYmplY3QtPm1hdGVyaWFsaXplU3Bl
Y2lhbHNJZk5lY2Vzc2FyeShleGVjKTsKKyAgICAKKyAgICBpZiAoQmFzZTo6Z2V0T3duUHJvcGVy
dHlTbG90KHRoaXNPYmplY3QsIGV4ZWMsIGlkZW50LCBzbG90KSkKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgCisgICAgaWYgKGlkZW50ID09IHZtLnByb3BlcnR5TmFtZXMtPml0ZXJhdG9yUHJp
dmF0ZU5hbWUpIHsKKyAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGV4ZWMt
PmxleGljYWxHbG9iYWxPYmplY3QoKTsKKyAgICAgICAgdGhpc09iamVjdC0+SlNDX05BVElWRV9G
VU5DVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5pdGVyYXRvclByaXZhdGVOYW1lLCBhcmd1bWVudHNG
dW5jSXRlcmF0b3IsIERvbnRFbnVtLCAwKTsKKyAgICAgICAgaWYgKEpTT2JqZWN0OjpnZXRPd25Q
cm9wZXJ0eVNsb3QodGhpc09iamVjdCwgZXhlYywgaWRlbnQsIHNsb3QpKQorICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBP
dXRPZkJhbmRBcmd1bWVudHM6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwg
RXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgYXJyYXksIEVudW1lcmF0aW9uTW9k
ZSBtb2RlKQoreworICAgIE91dE9mQmFuZEFyZ3VtZW50cyogdGhpc09iamVjdCA9IGpzQ2FzdDxP
dXRPZkJhbmRBcmd1bWVudHMqPihvYmplY3QpOworICAgIHRoaXNPYmplY3QtPm1hdGVyaWFsaXpl
U3BlY2lhbHNJZk5lY2Vzc2FyeShleGVjKTsKKyAgICBCYXNlOjpnZXRPd25Qcm9wZXJ0eU5hbWVz
KHRoaXNPYmplY3QsIGV4ZWMsIGFycmF5LCBtb2RlKTsKK30KKwordm9pZCBPdXRPZkJhbmRBcmd1
bWVudHM6OnB1dChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIGlk
ZW50LCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgT3V0T2ZC
YW5kQXJndW1lbnRzKiB0aGlzT2JqZWN0ID0ganNDYXN0PE91dE9mQmFuZEFyZ3VtZW50cyo+KG9i
amVjdCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICAKKyAgICBpZiAoaWRlbnQgPT0g
dm0ucHJvcGVydHlOYW1lcy0+Y2FsbGVlCisgICAgICAgIHx8IGlkZW50ID09IHZtLnByb3BlcnR5
TmFtZXMtPmNhbGxlcikKKyAgICAgICAgdGhpc09iamVjdC0+bWF0ZXJpYWxpemVTcGVjaWFsc0lm
TmVjZXNzYXJ5KGV4ZWMpOworICAgIAorICAgIEJhc2U6OnB1dCh0aGlzT2JqZWN0LCBleGVjLCBp
ZGVudCwgdmFsdWUsIHNsb3QpOworfQorCit2b2lkIE91dE9mQmFuZEFyZ3VtZW50czo6ZGVsZXRl
UHJvcGVydHkoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBpZGVu
dCkKK3sKKyAgICBPdXRPZkJhbmRBcmd1bWVudHMqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8T3V0T2ZC
YW5kQXJndW1lbnRzKj4ob2JqZWN0KTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIAor
ICAgIGlmIChpZGVudCA9PSB2bS5wcm9wZXJ0eU5hbWVzLT5jYWxsZWUKKyAgICAgICAgfHwgaWRl
bnQgPT0gdm0ucHJvcGVydHlOYW1lcy0+Y2FsbGVyKQorICAgICAgICB0aGlzT2JqZWN0LT5tYXRl
cmlhbGl6ZVNwZWNpYWxzSWZOZWNlc3NhcnkoZXhlYyk7CisgICAgCisgICAgQmFzZTo6ZGVsZXRl
UHJvcGVydHkodGhpc09iamVjdCwgZXhlYywgaWRlbnQpOworfQorCit2b2lkIE91dE9mQmFuZEFy
Z3VtZW50czo6ZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBl
eGVjLCBQcm9wZXJ0eU5hbWUgaWRlbnQsIGNvbnN0IFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3Jp
cHRvciwgYm9vbCBzaG91bGRUaHJvdykKK3sKKyAgICBPdXRPZkJhbmRBcmd1bWVudHMqIHRoaXNP
YmplY3QgPSBqc0Nhc3Q8T3V0T2ZCYW5kQXJndW1lbnRzKj4ob2JqZWN0KTsKKyAgICBWTSYgdm0g
PSBleGVjLT52bSgpOworICAgIAorICAgIGlmIChpZGVudCA9PSB2bS5wcm9wZXJ0eU5hbWVzLT5j
YWxsZWUKKyAgICAgICAgfHwgaWRlbnQgPT0gdm0ucHJvcGVydHlOYW1lcy0+Y2FsbGVyKQorICAg
ICAgICB0aGlzT2JqZWN0LT5tYXRlcmlhbGl6ZVNwZWNpYWxzSWZOZWNlc3NhcnkoZXhlYyk7Cisg
ICAgCisgICAgcmV0dXJuIEJhc2U6OmRlZmluZU93blByb3BlcnR5KG9iamVjdCwgZXhlYywgaWRl
bnQsIGRlc2NyaXB0b3IsIHNob3VsZFRocm93KTsKK30KKwordm9pZCBPdXRPZkJhbmRBcmd1bWVu
dHM6Om1hdGVyaWFsaXplU3BlY2lhbHMoRXhlY1N0YXRlKiBleGVjKQoreworICAgIFJFTEVBU0Vf
QVNTRVJUKCFzcGVjaWFsc01hdGVyaWFsaXplZCgpKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgp
OworICAgIAorICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IGpzQ2FzdDxGdW5j
dGlvbkV4ZWN1dGFibGUqPihtX2NhbGxlZS0+ZXhlY3V0YWJsZSgpKTsKKyAgICBib29sIGlzU3Ry
aWN0TW9kZSA9IGV4ZWN1dGFibGUtPmlzU3RyaWN0TW9kZSgpOworICAgIAorICAgIGlmIChpc1N0
cmljdE1vZGUpIHsKKyAgICAgICAgcHV0RGlyZWN0QWNjZXNzb3IoZXhlYywgdm0ucHJvcGVydHlO
YW1lcy0+Y2FsbGVlLCBnbG9iYWxPYmplY3QoKS0+dGhyb3dUeXBlRXJyb3JHZXR0ZXJTZXR0ZXIo
dm0pLCBEb250RGVsZXRlIHwgRG9udEVudW0gfCBBY2Nlc3Nvcik7CisgICAgICAgIHB1dERpcmVj
dEFjY2Vzc29yKGV4ZWMsIHZtLnByb3BlcnR5TmFtZXMtPmNhbGxlZSwgZ2xvYmFsT2JqZWN0KCkt
PnRocm93VHlwZUVycm9yR2V0dGVyU2V0dGVyKHZtKSwgRG9udERlbGV0ZSB8IERvbnRFbnVtIHwg
QWNjZXNzb3IpOworICAgIH0gZWxzZQorICAgICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5
TmFtZXMtPmNhbGxlZSwgSlNWYWx1ZShtX2NhbGxlZS5nZXQoKSkpOworICAgIAorICAgIG1fY2Fs
bGVlLmNsZWFyKCk7Cit9CisKK3ZvaWQgT3V0T2ZCYW5kQXJndW1lbnRzOjptYXRlcmlhbGl6ZVNw
ZWNpYWxzSWZOZWNlc3NhcnkoRXhlY1N0YXRlKiBleGVjKQoreworICAgIGlmICghc3BlY2lhbHNN
YXRlcmlhbGl6ZWQoKSkKKyAgICAgICAgbWF0ZXJpYWxpemVTcGVjaWFscyhleGVjKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L091dE9mQmFuZEFyZ3VtZW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL091dE9mQmFuZEFyZ3VtZW50cy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvT3V0T2ZCYW5kQXJndW1lbnRzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw3NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaWZuZGVmIE91dE9mQmFuZEFyZ3VtZW50c19oCisjZGVmaW5lIE91dE9mQmFuZEFy
Z3VtZW50c19oCisKKyNpbmNsdWRlICJBcmd1bWVudHNNb2RlLmgiCisjaW5jbHVkZSAiSlNPYmpl
Y3QuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKKy8vIFRoaXMgaXMgYW4gQXJndW1lbnRzLWNsYXNz
IG9iamVjdCB0aGF0IHdlIGNyZWF0ZSB3aGVuIHlvdSBkbyBmdW5jdGlvbi5hcmd1bWVudHMsIG9y
IHlvdSBzYXkKKy8vICJhcmd1bWVudHMiIGluc2lkZSBhIGZ1bmN0aW9uIGluIHN0cmljdCBtb2Rl
LiBJdCBiZWhhdmVzIGFsbXBzdCBlbnRpcmVseSBsaWtlIGFuIG9yZGluYXJ5CisvLyBKYXZhU2Ny
aXB0IG9iamVjdC4gQWxsIG9mIHRoZSBhcmd1bWVudHMgdmFsdWVzIGFyZSBzaW1wbHkgY29waWVk
IGZyb20gdGhlIHN0YWNrIChwb3NzaWJseSB2aWEKKy8vIHNvbWUgc29waGlzdGljYXRlZCBWYWx1
ZVJlY292ZXJ5J3MgaWYgYW4gb3B0aW1pemluZyBjb21waWxlciBpcyBpbiBwbGF5KSBhbmQgdGhl
IGFwcHJvcHJpYXRlCisvLyBwcm9wZXJ0aWVzIG9mIHRoZSBvYmplY3QgYXJlIHBvcHVsYXRlZC4g
VGhlIG9ubHkgcmVhc29uIHdoeSB3ZSBuZWVkIGEgc3BlY2lhbCBjbGFzcyBpcyB0byBtYWtlCisv
LyB0aGUgb2JqZWN0IGNsYWltIHRvIGJlICJBcmd1bWVudHMiIGZyb20gYSB0b1N0cmluZyBzdGFu
ZHBvaW50LCBhbmQgdG8gYXZvaWQgbWF0ZXJpYWxpemluZyB0aGUKKy8vIGNhbGxlci9jYWxsZWUg
cHJvcGVydGllcyB1bmxlc3Mgc29tZW9uZSBhc2tzIGZvciB0aGVtLgorY2xhc3MgT3V0T2ZCYW5k
QXJndW1lbnRzIDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgeworcHVibGljOgorICAgIHR5cGVk
ZWYgSlNOb25GaW5hbE9iamVjdCBCYXNlOworICAgIAorcHJpdmF0ZToKKyAgICBPdXRPZkJhbmRB
cmd1bWVudHMoVk0mLCBTdHJ1Y3R1cmUqKTsKKworcHVibGljOgorICAgIHN0YXRpYyBPdXRPZkJh
bmRBcmd1bWVudHMqIGNyZWF0ZUVtcHR5KFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU0Z1bmN0aW9u
KiBjYWxsZWUpOworICAgIHN0YXRpYyBPdXRPZkJhbmRBcmd1bWVudHMqIGNyZWF0ZUVtcHR5KEV4
ZWNTdGF0ZSosIEpTRnVuY3Rpb24qIGNhbGxlZSk7CisgICAgc3RhdGljIE91dE9mQmFuZEFyZ3Vt
ZW50cyogY3JlYXRlV2l0aElubGluZUZyYW1lKEV4ZWNTdGF0ZSogbXlGcmFtZSwgRXhlY1N0YXRl
KiB0YXJnZXRGcmFtZSwgSW5saW5lQ2FsbEZyYW1lKiwgQXJndW1lbnRzTW9kZSk7CisgICAgc3Rh
dGljIE91dE9mQmFuZEFyZ3VtZW50cyogY3JlYXRlV2l0aE1hY2hpbmVGcmFtZShFeGVjU3RhdGUq
IG15RnJhbWUsIEV4ZWNTdGF0ZSogdGFyZ2V0RnJhbWUsIEFyZ3VtZW50c01vZGUpOworICAgIAor
ICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0
KiwgSlNWYWx1ZSBwcm90b3R5cGUpOworCisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVj
dHVyZUZsYWdzID0gT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0UHJv
cGVydHlOYW1lcyB8IEpTT2JqZWN0OjpTdHJ1Y3R1cmVGbGFnczsKKworICAgIERFQ0xBUkVfSU5G
TzsKKworcHJpdmF0ZToKKyAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmpl
Y3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOworICAgIHN0YXRp
YyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0
eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CisgICAgc3RhdGljIHZvaWQgcHV0KEpTQ2Vs
bCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7
CisgICAgc3RhdGljIHZvaWQgZGVsZXRlUHJvcGVydHkoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJv
cGVydHlOYW1lKTsKKyAgICBzdGF0aWMgdm9pZCBkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCos
IEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlEZXNjcmlwdG9yJiwgYm9v
bCBzaG91bGRUaHJvdyk7CisgICAgCisgICAgYm9vbCBzcGVjaWFsc01hdGVyaWFsaXplZCgpIGNv
bnN0IHsgcmV0dXJuICFtX2NhbGxlZTsgfQorICAgIHZvaWQgbWF0ZXJpYWxpemVTcGVjaWFscyhF
eGVjU3RhdGUqKTsKKyAgICB2b2lkIG1hdGVyaWFsaXplU3BlY2lhbHNJZk5lY2Vzc2FyeShFeGVj
U3RhdGUqKTsKKyAgICAKKyAgICBXcml0ZUJhcnJpZXI8SlNGdW5jdGlvbio+IG1fY2FsbGVlOyAv
LyBTZXQgdG8gbnVsbHB0ciB3aGVuIHdlIG1hdGVyaWFsaXplIGFsbCBvZiBvdXIgc3BlY2lhbCBw
cm9wZXJ0aWVzLgorfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBPdXRPZkJh
bmRBcmd1bWVudHNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29w
ZU9mZnNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U2NvcGVPZmZzZXQuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU2NvcGVPZmZzZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDIgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIlNjb3BlT2Zmc2V0LmgiCisKK25hbWVzcGFjZSBKU0MgeworCit2
b2lkIFNjb3BlT2Zmc2V0OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgaWYg
KCEqdGhpcykgeworICAgICAgICBvdXQucHJpbnQoInNjb3BlSW52YWxpZCIpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIAorICAgIG91dC5wcmludCgic2NvcGUiLCBvZmZzZXQoKSk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TY29wZU9mZnNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1Njb3BlT2Zmc2V0LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TY29wZU9mZnNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTEgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBT
Y29wZU9mZnNldF9oCisjZGVmaW5lIFNjb3BlT2Zmc2V0X2gKKworI2luY2x1ZGUgIkdlbmVyaWNP
ZmZzZXQuaCIKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIEpTQyB7
CisKKy8vIFRoaXMgaXMgYW4gb2Zmc2V0IGludG8gYSBzY29wZSBvZiBzb21lIGtpbmQuIEl0IGNv
dWxkIGJlIGFuIGFjdGl2YXRpb24gc2NvcGUgb3IgaXQgY291bGQgYmUgYQorLy8gZ2xvYmFsIG9i
amVjdC4KK2NsYXNzIFNjb3BlT2Zmc2V0IDogcHVibGljIEdlbmVyaWNPZmZzZXQ8U2NvcGVPZmZz
ZXQ+IHsKK3B1YmxpYzoKKyAgICBTY29wZU9mZnNldCgpIHsgfQorICAgIAorICAgIGV4cGxpY2l0
IFNjb3BlT2Zmc2V0KHVuc2lnbmVkIG9mZnNldCkKKyAgICAgICAgOiBHZW5lcmljT2Zmc2V0KG9m
ZnNldCkKKyAgICB7CisgICAgfQorICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNv
bnN0OworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBTY29wZU9mZnNldF9o
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50cy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJn
dW1lbnRzLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1Njb3BlZEFyZ3VtZW50cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMzcgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIlNjb3BlZEFyZ3VtZW50cy5oIgorCisjaW5jbHVkZSAiR2VuZXJp
Y0FyZ3VtZW50c0lubGluZXMuaCIKKyNpbmNsdWRlICJKU0FyZ3VtZW50c0l0ZXJhdG9yLmgiCisj
aW5jbHVkZSAiSlNDSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsKKworU1RBVElDX0FTU0VS
VF9JU19UUklWSUFMTFlfREVTVFJVQ1RJQkxFKFNjb3BlZEFyZ3VtZW50cyk7CisKK2NvbnN0IENs
YXNzSW5mbyBTY29wZWRBcmd1bWVudHM6OnNfaW5mbyA9IHsgIkFyZ3VtZW50cyIsICZCYXNlOjpz
X2luZm8sIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoU2NvcGVkQXJndW1lbnRzKSB9OworCitTY29w
ZWRBcmd1bWVudHM6OlNjb3BlZEFyZ3VtZW50cyhWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJl
LCB1bnNpZ25lZCB0b3RhbExlbmd0aCkKKyAgICA6IEdlbmVyaWNBcmd1bWVudHModm0sIHN0cnVj
dHVyZSkKKyAgICAsIG1fb3ZlcnJvZGVUaGluZ3MoZmFsc2UpCisgICAgLCBtX3RvdGFsTGVuZ3Ro
KGxlbmd0aCkKK3sKK30KKwordm9pZCBTY29wZWRBcmd1bWVudHM6OmZpbmlzaENyZWF0aW9uKFZN
JiB2bSwgSlNGdW5jdGlvbiogY2FsbGVlLCBTY29wZWRBcmd1bWVudHNUYWJsZSogdGFibGUsIEpT
TGV4aWNhbEVudmlyb25tZW50KiBzY29wZSkKK3sKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2
bSk7CisgICAgbV9jYWxsZWUuc2V0KHZtLCB0aGlzLCBjYWxsZWUpOworICAgIG1fdGFibGUuc2V0
KHZtLCB0aGlzLCB0YWJsZSk7CisgICAgbV9zY29wZS5zZXQodm0sIHRoaXMsIHNjb3BlKTsKK30K
KworU2NvcGVkQXJndW1lbnRzKiBTY29wZWRBcmd1bWVudHM6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQo
Vk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNGdW5jdGlvbiogY2FsbGVlLCBTY29wZWRB
cmd1bWVudHNUYWJsZSogdGFibGUsIEpTTGV4aWNhbEVudmlyb25tZW50KiBzY29wZSwgdW5zaWdu
ZWQgdG90YWxMZW5ndGgpCit7CisgICAgQVNTRVJUKHRvdGFsTGVuZ3RoID49IHRhYmxlLT5sZW5n
dGgoKSk7CisgICAgU2NvcGVkQXJndW1lbnRzKiByZXN1bHQgPSBuZXcgKAorICAgICAgICBOb3RO
dWxsLAorICAgICAgICBhbGxvY2F0ZUNlbGw8U2NvcGVkQXJndW1lbnRzPih2bS5oZWFwLCBhbGxv
Y2F0aW9uU2l6ZSh0b3RhbExlbmd0aCAtIHRhYmxlLT5sZW5ndGgoKSkpKQorICAgICAgICAodm0s
IHN0cnVjdHVyZSwgdG90YWxMZW5ndGgpOworICAgIHJlc3VsdC0+ZmluaXNoQ3JlYXRpb24odm0s
IGNhbGxlZSwgdGFibGUsIHNjb3BlKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitTY29wZWRB
cmd1bWVudHMqIFNjb3BlZEFyZ3VtZW50czo6Y3JlYXRlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIEpTRnVuY3Rpb24qIGNhbGxlZSwgU2NvcGVkQXJndW1lbnRzVGFibGUqIHRhYmxlLCBK
U0xleGljYWxFbnZpcm9ubWVudCogc2NvcGUsIHVuc2lnbmVkIHRvdGFsTGVuZ3RoKQoreworICAg
IFNjb3BlZEFyZ3VtZW50cyogcmVzdWx0ID0KKyAgICAgICAgY3JlYXRlVW5pbml0aWFsaXplZCh2
bSwgc3RydWN0dXJlLCBjYWxsZWUsIHRhYmxlLCBzY29wZSwgdG90YWxMZW5ndGgpOworICAgIAor
ICAgIGZvciAodW5zaWduZWQgaSA9IHRvdGFsTGVuZ3RoIC0gdGFibGUtPmxlbmd0aCgpOyBpLS07
KQorICAgICAgICByZXN1bHQtPm92ZXJmbG93U3RvcmFnZSgpW2ldLmNsZWFyKCk7CisgICAgCisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKworU2NvcGVkQXJndW1lbnRzKiBTY29wZWRBcmd1bWVudHM6
OmNyZWF0ZUJ5Q29weWluZyhWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBFeGVjU3RhdGUq
IGV4ZWMsIFNjb3BlZEFyZ3VtZW50c1RhYmxlKiB0YWJsZSwgSlNMZXhpY2FsRW52aXJvbm1lbnQq
IHNjb3BlKQoreworICAgIHVuc2lnbmVkIG5hbWVkTGVuZ3RoID0gdGFibGUtPmxlbmd0aCgpOwor
ICAgIHVuc2lnbmVkIHRvdGFsTGVuZ3RoID0gZXhlYy0+YXJndW1lbnRDb3VudCgpOworICAgIAor
ICAgIFNjb3BlZEFyZ3VtZW50cyogcmVzdWx0ID0KKyAgICAgICAgY3JlYXRlVW5pbml0aWFsaXpl
ZCh2bSwgc3RydWN0dXJlLCBjYWxsZWUsIHRhYmxlLCBzY29wZSwgdG90YWxMZW5ndGgpOworICAg
IAorICAgIGZvciAodW5zaWduZWQgaSA9IHRvdGFsTGVuZ3RoIC0gbmFtZWRMZW5ndGg7IGktLTsp
CisgICAgICAgIHJlc3VsdC0+b3ZlcmZsb3dTdG9yYWdlKClbaV0uc2V0KHZtLCByZXN1bHQsIGV4
ZWMtPnVuY2hlY2tlZEFyZ3VtZW50cyhpICsgbmFtZWRMZW5ndGgpKTsKKyAgICAKKyAgICByZXR1
cm4gcmVzdWx0OworfQorCit2b2lkIFNjb3BlZEFyZ3VtZW50czo6dmlzaXRDaGlsZHJlbihKU0Nl
bGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIFNjb3BlZEFyZ3VtZW50cyog
dGhpc09iamVjdCA9IHN0YXRpY19jYXN0PFNjb3BlZEFyZ3VtZW50cyo+KGNlbGwpOworICAgIEFT
U0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKKyAgICBCYXNlOjp2
aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOworCisgICAgdmlzaXRvci5hcHBlbmQo
JnRoaXNPYmplY3QtPm1fY2FsbGVlKTsKKyAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+
bV90YWJsZSk7CisgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fc2NvcGUpOworICAg
IAorICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzKAorICAgICAgICB0aGlzT2JqZWN0LT5vdmVyZmxv
d1N0b3JhZ2UoKSwgdGhpc09iamVjdC0+bV90b3RhbExlbmd0aCAtIHRoaXNPYmplY3QtPm1fdGFi
bGUtPmxlbmd0aCgpKTsKK30KKworU3RydWN0dXJlKiBTY29wZWRBcmd1bWVudHM6OmNyZWF0ZVN0
cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJv
dG90eXBlKQoreworICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0
LCBwcm90b3R5cGUsIFR5cGVJbmZvKFNjb3BlZEFyZ3VtZW50c1R5cGUsIFN0cnVjdHVyZUZsYWdz
KSwgaW5mbygpKTsKK30KKwordm9pZCBTY29wZWRBcmd1bWVudHM6OnNsb3dEb3duQW5kV2FzdGVN
ZW1vcnkoVk0mIHZtKQoreworICAgIFJFTEVBU0VfQVNTRVJUKCFtX292ZXJyb2RlVGhpbmdzKTsK
KyAgICAKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1i
ZXIobV90YWJsZS0+bGVuZ3RoKCkpLCBEb250RW51bSk7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5w
cm9wZXJ0eU5hbWVzLT5jYWxsZWUsIG1fY2FsbGVlLmdldCgpLCBEb250RW51bSk7CisgICAgCisg
ICAgbV9vdmVycm9kZVRoaW5ncyA9IHRydWU7Cit9CisKK3ZvaWQgU2NvcGVkQXJndW1lbnRzOjpz
bG93RG93bkFuZFdhc3RlTWVtb3J5SWZOZWNlc3NhcnkoVk0mIHZtKQoreworICAgIGlmICghbV9v
dmVycm9kZVRoaW5ncykKKyAgICAgICAgc2xvd0Rvd25BbmRXYXN0ZU1lbW9yeSh2bSk7Cit9CisK
K3ZvaWQgU2NvcGVkQXJndW1lbnRzOjpvdmVycmlkZUFyZ3VtZW50KFZNJiB2bSwgdWludDMyX3Qg
aSkKK3sKKyAgICB1bnNpZ25lZCBuYW1lZExlbmd0aCA9IG1fdGFibGUtPmxlbmd0aCgpOworICAg
IGlmIChpIDwgbmFtZWRMZW5ndGgpCisgICAgICAgIG1fdGFibGUuc2V0KHZtLCB0aGlzLCBtX3Rh
YmxlLT5zZXQodm0sIGksIFNjb3BlT2Zmc2V0KCkpKTsKKyAgICBlbHNlIHsKKyAgICAgICAgQVNT
RVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oaSA8IG1fdG90YWxMZW5ndGgpOworICAgICAg
ICBvdmVyZmxvd1N0b3JhZ2UoKVtpIC0gbmFtZWRMZW5ndGhdLmNsZWFyKCk7CisgICAgfQorfQor
Cit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU2NvcGVkQXJndW1lbnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHMuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDE0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaWZuZGVmIFNjb3BlZEFyZ3VtZW50c19oCisjZGVmaW5lIFNjb3BlZEFyZ3VtZW50c19oCisK
KyNpbmNsdWRlICJHZW5lcmljQXJndW1lbnRzLmgiCisKK25hbWVzcGFjZSBKU0MgeworCisvLyBU
aGlzIGlzIGFuIEFyZ3VtZW50cy1jbGFzcyBvYmplY3QgdGhhdCB3ZSBjcmVhdGUgd2hlbiB5b3Ug
c2F5ICJhcmd1bWVudHMiIGluc2lkZSBhIGZ1bmN0aW9uLAorLy8gYW5kIG9uZSBvciBtb3JlIG9m
IHRoZSBhcmd1bWVudHMgbWF5IGJlIGNhcHR1cmVkIGluIHRoZSBmdW5jdGlvbidzIGFjdGl2YXRp
b24uIFRoZSBmdW5jdGlvbgorLy8gd2lsbCBjb3B5IGl0cyBmb3JtYWxseSBkZWNsYXJlZCBhcmd1
bWVudHMgaW50byB0aGUgYWN0aXZhdGlvbiBhbmQgdGhlbiBjcmVhdGUgdGhpcyBvYmplY3QuIFRo
aXMKKy8vIG9iamVjdCB3aWxsIHN0b3JlIHRoZSBvdmVyZmxvdyBhcmd1bWVudHMsIGlmIHRoZXJl
IGFyZSBhbnkuIFRoaXMgb2JqZWN0IHdpbGwgdXNlIHRoZSBzeW1ib2wKKy8vIHRhYmxlJ3MgU2Nv
cGVkQXJndW1lbnRzVGFibGUgYW5kIHRoZSBhY3RpdmF0aW9uLCBvciBpdHMgb3ZlcmZsb3cgc3Rv
cmFnZSwgdG8gaGFuZGxlIGFsbCBpbmRleGVkCisvLyBsb29rdXBzLgorY2xhc3MgU2NvcGVkQXJn
dW1lbnRzIDogcHVibGljIEdlbmVyaWNBcmd1bWVudHM8U2NvcGVkQXJndW1lbnRzPiB7Citwcml2
YXRlOgorICAgIFNjb3BlZEFyZ3VtZW50cyhWTSYsIFN0cnVjdHVyZSosIHVuc2lnbmVkIHRvdGFs
TGVuZ3RoKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgSlNGdW5jdGlvbiogY2FsbGVl
LCBTY29wZWRBcmd1bWVudHNUYWJsZSosIEpTTGV4aWNhbEVudmlyb25tZW50Kik7CisKK3B1Ymxp
YzoKKyAgICAvLyBDcmVhdGVzIGFuIGFyZ3VtZW50cyBvYmplY3QgYnV0IGxlYXZlcyBpdCB1bmlu
aXRpYWxpemVkLiBUaGlzIGlzIGRhbmdlcm91cyBpZiB3ZSBHQyByaWdodAorICAgIC8vIGFmdGVy
IGFsbG9jYXRpb24uCisgICAgc3RhdGljIFNjb3BlZEFyZ3VtZW50cyogY3JlYXRlVW5pbml0aWFs
aXplZChWTSYsIFN0cnVjdHVyZSosIEpTRnVuY3Rpb24qIGNhbGxlZSwgU2NvcGVkQXJndW1lbnRz
VGFibGUqLCBKU0xleGljYWxFbnZpcm9ubWVudCosIHVuc2lnbmVkIHRvdGFsTGVuZ3RoKTsKKyAg
ICAKKyAgICAvLyBDcmVhdGVzIGFuIGFyZ3VtZW50cyBvYmplY3QgYW5kIGluaXRpYWxpemVzIGV2
ZXJ5dGhpbmcgdG8gdGhlIGVtcHR5IHZhbHVlLiBVc2UgdGhpcyBpZiB5b3UKKyAgICAvLyBjYW5u
b3QgZ3VhcmFudGVlIHRoYXQgeW91J2xsIGltbWVkaWF0ZWx5IGluaXRpYWxpemUgYWxsIG9mIHRo
ZSBlbGVtZW50cy4KKyAgICBzdGF0aWMgU2NvcGVkQXJndW1lbnRzKiBjcmVhdGUoVk0mLCBTdHJ1
Y3R1cmUqLCBKU0Z1bmN0aW9uKiBjYWxsZWUsIFNjb3BlZEFyZ3VtZW50c1RhYmxlKiwgSlNMZXhp
Y2FsRW52aXJvbm1lbnQqLCB1bnNpZ25lZCB0b3RhbExlbmd0aCk7CisgICAgCisgICAgLy8gQ3Jl
YXRlcyBhbiBhcmd1bWVudHMgb2JqZWN0IGJ5IGNvcHlpbmcgdGhlIGFyZ3VtbmV0cyBmcm9tIHRo
ZSBzdGFjay4KKyAgICBzdGF0aWMgU2NvcGVkQXJndW1lbnRzKiBjcmVhdGVCeUNvcHlpbmcoVk0m
LCBTdHJ1Y3R1cmUqLCBFeGVjU3RhdGUqLCBTY29wZWRBcmd1bWVudHNUYWJsZSosIEpTTGV4aWNh
bEVudmlyb25tZW50Kik7CisgICAgCisgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0Nl
bGwqLCBTbG90VmlzaXRvciYpOworICAgIAorICAgIHVpbnQzMl90IGludGVybmFsTGVuZ3RoKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3RvdGFsTGVuZ3RoOworICAgIH0KKyAgICAK
KyAgICB1aW50MzJfdCBsZW5ndGgoRXhlY1N0YXRlKiBleGVjKSBjb25zdAorICAgIHsKKyAgICAg
ICAgaWYgKFVOTElLRUxZKG1fb3ZlcnJvZGVUaGluZ3MpKQorICAgICAgICAgICAgcmV0dXJuIGdl
dChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKS50b1VJbnQzMihleGVjKTsKKyAg
ICAgICAgcmV0dXJuIGludGVybmFsTGVuZ3RoKCk7CisgICAgfQorICAgIAorICAgIGJvb2wgY2Fu
QWNjZXNzSW5kZXhRdWlja2x5KHVpbnQzMl90IGkpIGNvbnN0CisgICAgeworICAgICAgICB1bnNp
Z25lZCBuYW1lZExlbmd0aCA9IG1fdGFibGUtPmxlbmd0aCgpOworICAgICAgICBpZiAoaSA8IG5h
bWVkTGVuZ3RoKQorICAgICAgICAgICAgcmV0dXJuICEhbV90YWJsZS0+Z2V0KGkpOworICAgICAg
ICBpZiAoaSA8IG1fdG90YWxMZW5ndGgpCisgICAgICAgICAgICByZXR1cm4gISFvdmVyZmxvd1N0
b3JhZ2UoKVtpIC0gbmFtZWRMZW5ndGhdLmdldCgpOworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorICAgIAorICAgIEpTVmFsdWUgZ2V0SW5kZXhRdWlja2x5KHVpbnQzMl90IGkpIGNvbnN0
CisgICAgeworICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihjYW5BY2Nl
c3NJbmRleFF1aWNrbHkoaSkpOworICAgICAgICB1bnNpZ25lZCBuYW1lZExlbmd0aCA9IG1fdGFi
bGUtPmxlbmd0aCgpOworICAgICAgICBpZiAoaSA8IG5hbWVkTGVuZ3RoKQorICAgICAgICAgICAg
cmV0dXJuIG1fc2NvcGUtPnZhcmlhYmxlQXQobV90YWJsZS0+Z2V0KGkpKS5nZXQoKTsKKyAgICAg
ICAgcmV0dXJuIG92ZXJmbG93U3RvcmFnZSgpW2kgLSBuYW1lZExlbmd0aF0uZ2V0KCk7CisgICAg
fQorCisgICAgdm9pZCBzZXRJbmRleFF1aWNrbHkoVk0mIHZtLCB1aW50MzJfdCBpLCBKU1ZhbHVl
IHZhbHVlKQorICAgIHsKKyAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04o
Y2FuQWNjZXNzSW5kZXhRdWlja2x5KGkpKTsKKyAgICAgICAgdW5zaWduZWQgbmFtZWRMZW5ndGgg
PSBtX3RhYmxlLT5sZW5ndGgoKTsKKyAgICAgICAgaWYgKGkgPCBuYW1lZExlbmd0aCkKKyAgICAg
ICAgICAgIG1fc2NvcGUtPnZhcmlhYmxlYXQobV90YWJsZS0+Z2V0KGkpKS5zZXQodm0sIHRoaXMs
IHZhbHVlKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgb3ZlcmZsb3dTdG9yYWdlKClbaSAt
IG5hbWVkTGVuZ3RoXS5zZXQodm0sIHRoaXMsIHZhbHVlKTsKKyAgICB9CisKKyAgICBXcml0ZUJh
cnJpZXI8SlNGdW5jdGlvbj4mIGNhbGxlZSgpCisgICAgeworICAgICAgICByZXR1cm4gbV9jYWxs
ZWU7CisgICAgfQorICAgIAorICAgIGJvb2wgb3ZlcnJvZGVUaGluZ3MoKSBjb25zdCB7IHJldHVy
biBtX292ZXJyb2RlVGhpbmdzOyB9CisgICAgdm9pZCBzbG93RG93bkFuZFdhc3RlTWVtb3J5KFZN
Jik7CisgICAgdm9pZCBzbG93RG93bkFuZFdhc3RlTWVtb3J5SWZOZWNlc3NhcnkoVk0mKTsKKyAg
ICB2b2lkIG92ZXJyaWRlQXJndW1lbnQoVk0mIHZtLCB1aW50MzJfdCBpKTsKKyAgICAKKyAgICBE
RUNMQVJFX0lORk87CisgICAgCisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJl
KFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHByb3RvdHlwZSk7CisgICAgCisgICAgc3Rh
dGljIHB0cmRpZmZfdCBvZmZzZXRPZk92ZXJyb2RlVGhpbmdzKCkgeyByZXR1cm4gT0JKRUNUX09G
RlNFVE9GKFNjb3BlZEFyZ3VtZW50cywgbV9vdmVycm9kZVRoaW5ncyk7IH0KKyAgICBzdGF0aWMg
cHRyZGlmZl90IG9mZnNldE9mVG90YWxMZW5ndGgoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0Yo
U2NvcGVkQXJndW1lbnRzLCBtX3RvdGFsTGVuZ3RoKTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qg
b2Zmc2V0T2ZUYWJsZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihTY29wZWRBcmd1bWVudHMs
IG1fdGFibGUpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlNjb3BlKCkgeyByZXR1
cm4gT0JKRUNUX09GRlNFVE9GKFNjb3BlZEFyZ3VtZW50cywgbV9zY29wZSk7IH0KKyAgICAKKyAg
ICBzdGF0aWMgc2l6ZV90IG92ZXJmbG93U3RvcmFnZU9mZnNldCgpCisgICAgeworICAgICAgICBy
ZXR1cm4gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mPHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93
bj4pPihzaXplb2YoU2NvcGVkQXJndW1lbnRzKSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBz
aXplX3QgYWxsb2NhdGlvblNpemUodW5zaWduZWQgb3ZlcmZsb3dBcmd1bWVudHNMZW5ndGgpCisg
ICAgeworICAgICAgICByZXR1cm4gc3RvcmFnZU9mZnNldCgpICsgc2l6ZW9mKFdyaXRlQmFycmll
cjxVbmtub3duPikgKiBvdmVyZmxvd0FyZ3VtZW50c0xlbmd0aDsKKyAgICB9CisKK3ByaXZhdGU6
CisgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiBvdmVyZmxvd1N0b3JhZ2UoKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxXcml0ZUJhcnJpZXI8VW5rbm93bj4qPigKKyAgICAg
ICAgICAgIGJpdHdpc2VfY2FzdDxjaGFyKj4odGhpcykgKyBvdmVyZmxvd1N0b3JhZ2VPZmZzZXQo
KSk7CisgICAgfQorICAgIAorICAgIGJvb2wgbV9vdmVycm9kZVRoaW5nczsgLy8gVHJ1ZSBpZiBs
ZW5ndGgsIGNhbGxlZSwgYW5kIGNhbGxlciBhcmUgZnVsbHkgbWF0ZXJpYWxpemVkIGluIHRoZSBv
YmplY3QuCisgICAgdW5zaWduZWQgbV90b3RhbExlbmd0aDsgLy8gVGhlIGxlbmd0aCBvZiBkZWNs
YXJlZCBwbHVzIG92ZXJmbG93IGFyZ3VtZW50cy4KKyAgICBXcml0ZUJhcnJpZXI8SlNGdW5jdGlv
bio+IG1fY2FsbGVlOworICAgIFdyaXRlQmFycmllcjxTY29wZWRBcmd1bWVudHNUYWJsZT4gbV90
YWJsZTsKKyAgICBXcml0ZUJhcnJpZXI8SlNMZXhpY2FsRW52aXJvbm1lbnQ+IG1fc2NvcGU7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIFNjb3BlZEFyZ3VtZW50c19oCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50c1RhYmxl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJn
dW1lbnRzVGFibGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1Njb3BlZEFyZ3VtZW50c1RhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5NCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IFNjb3BlZEFyZ3VtZW50c1RhYmxlX2gKKyNkZWZpbmUgU2NvcGVkQXJndW1lbnRzVGFibGVfaAor
CisjaW5jbHVkZSAiSlNDZWxsLmgiCisKK25hbWVzcGFjZSBKU0MgeworCisvLyBUaGlzIGNsYXNz
J3Mgb25seSBqb2IgaXMgdG8gaG9sZCBvbnRvIHRoZSBsaXN0IG9mIFNjb3BlT2Zmc2V0cyBmb3Ig
ZWFjaCBhcmd1bWVudCB0aGF0IGEKKy8vIGZ1bmN0aW9uIGhhcy4gTW9zdCBvZiB0aGUgdGltZSwg
dGhlIEJ5dGVjb2RlR2VuZXJhdG9yIHdpbGwgY3JlYXRlIG9uZSBvZiB0aGVzZSBhbmQgaXQgd2ls
bAorLy8gbmV2ZXIgYmUgbW9kaWZpZWQgc3Vic2VxdWVudGx5LiBUaGVyZSBpcyBhIHJhcmUgY2Fz
ZSB3aGVyZSBhIFNjb3BlZEFyZ3VtZW50cyBvYmplY3QgaXMgY3JlYXRlZAorLy8gYW5kIGFsaWFz
ZXMgb25lIG9mIHRoZXNlIGFuZCB0aGVuIGRlY2lkZXMgdG8gbW9kaWZ5IGl0OyBpbiB0aGF0IGNh
c2Ugd2UgZG8gY29weS1vbi13cml0ZS4gVGhpcworLy8gbWFrZXMgc2Vuc2UgYmVjYXVzZSBzdWNo
IG1vZGlmaWNhdGlvbnMgYXJlIHNvIHVuY29tbW9uLiBZb3UnZCBoYXZlIHRvIGRvIHNvbWV0aGlu
ZyBjcmF6eSBsaWtlCisvLyAiZGVsZXRlIGFyZ3VtZW50c1tpXSIgb3Igc29tZSB2YXJpYW50IG9m
IGRlZmluZU93blByb3BlcnR5LgorY2xhc3MgU2NvcGVkQXJndW1lbnRzIDogcHVibGljIEpTQ2Vs
bCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBKU0NlbGwgQmFzZTsKKyAgICAKKyAgICBzdGF0aWMg
Y29uc3QgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3QgYm9v
bCBoYXNJbW1vcnRhbFN0cnVjdHVyZSA9IHRydWU7CisKK3ByaXZhdGU6CisgICAgU2NvcGVkQXJn
dW1lbnRzVGFibGUoVk0mKTsKKyAgICB+U2NvcGVkQXJndW1lbnRzVGFibGUoKTsKKworcHVibGlj
OgorICAgIHN0YXRpYyBTY29wZWRBcmd1bWVudHNUYWJsZSogY3JlYXRlKFZNJik7CisgICAgCisg
ICAgU2NvcGVkQXJndW1lbnRzKiBjbG9uZShWTSYpOworICAgIAorICAgIHVpbnQzMl90IGxlbmd0
aCgpIGNvbnN0IHsgcmV0dXJuIG1fbGVuZ3RoOyB9CisgICAgU2NvcGVkQXJndW1lbnRzVGFibGUq
IHNldExlbmd0aChWTSYsIHVpbnQzMl90IG5ld0xlbmd0aCk7CisgICAgCisgICAgU2NvcGVPZmZz
ZXQgZ2V0KHVpbnQzMl90IGkpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlRfV0lUSF9TRUNV
UklUWV9JTVBMSUNBVElPTihpIDwgbV9sZW5ndGgpOworICAgICAgICByZXR1cm4gbV9hcmd1bWVu
dHNbaV07CisgICAgfQorICAgIAorICAgIHZvaWQgbG9jaygpCisgICAgeworICAgICAgICBtX2xv
Y2tlZCA9IHRydWU7CisgICAgfQorICAgIAorICAgIFNjb3BlZEFyZ3VtZW50cyogc2V0KFZNJiB2
bSwgdWludDMyX3QgaSwgU2NvcGVPZmZzZXQgdmFsdWUpCisgICAgeworICAgICAgICBTY29wZWRB
cmd1bWVudHMqIHJlc3VsdDsKKyAgICAgICAgaWYgKFVOTElLRUxZKG1fbG9ja2VkKSkKKyAgICAg
ICAgICAgIHJlc3VsdCA9IGNsb25lKHZtKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmVz
dWx0ID0gdGhpczsKKyAgICAgICAgcmVzdWx0LT5zZXREaXJlY3QoaSwgdmFsdWUpOworICAgICAg
ICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBERUNMQVJFX0lORk87CisgICAgCisg
ICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkxlbmd0aCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZT
RVRPRihTY29wZWRBcmd1bWVudHMsIG1fbGVuZ3RoKTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qg
b2Zmc2V0T2ZBcmd1bWVudHMoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoU2NvcGVkQXJndW1l
bnRzLCBtX2FyZ3VtZW50cyk7IH0KKworcHJpdmF0ZToKKyAgICB1aW50MzJfdCBtX2xlbmd0aDsK
KyAgICBib29sIG1fbG9ja2VkOyAvLyBCZWluZyBsb2NrZWQgbWVhbnMgdGhhdCB0aGVyZSBhcmUg
bXVsdGlwbGUgcmVmZXJlbmNlcyB0byB0aGlzIG9iamVjdCBhbmQgbm9uZSBvZiB0aGVtIGV4cGVj
dCB0byBzZWUgdGhlIG90aGVycycgbW9kaWZpY2F0aW9ucy4gVGhpcyBtZWFucyB0aGF0IG1vZGlm
aWNhdGlvbnMgbmVlZCB0byBtYWtlIGEgY29weSBmaXJzdC4KKyAgICBzdGQ6OnVuaXF1ZV9wdHI8
U2NvcGVPZmZzZXRbXT4gbV9hcmd1bWVudHM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKwor
I2VuZGlmIC8vIFNjb3BlZEFyZ3VtZW50c1RhYmxlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmNwcAkocmV2aXNpb24gMTgwNzIwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxNCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTQs
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC02OSw2ICs2OSw4IEBAIEpTVmFsdWUgU3ltYm9sVGFibGVFbnRyeTo6
aW5mZXJyZWRWYWx1ZSgKIAogdm9pZCBTeW1ib2xUYWJsZUVudHJ5OjpwcmVwYXJlVG9XYXRjaChT
eW1ib2xUYWJsZSogc3ltYm9sVGFibGUpCiB7CisgICAgaWYgKCFpc1dhdGNoYWJsZSgpKQorICAg
ICAgICByZXR1cm47CiAgICAgRmF0RW50cnkqIGVudHJ5ID0gaW5mbGF0ZSgpOwogICAgIGlmIChl
bnRyeS0+bV93YXRjaHBvaW50cykKICAgICAgICAgcmV0dXJuOwpAQCAtMTM3LDI5ICsxMzksMjIg
QEAgdm9pZCBTeW1ib2xUYWJsZTo6V2F0Y2hwb2ludENsZWFudXA6OmZpbgogICAgIH0KIH0KIAot
U3ltYm9sVGFibGUqIFN5bWJvbFRhYmxlOjpjbG9uZUNhcHR1cmVkTmFtZXMoVk0mIHZtKQorU3lt
Ym9sVGFibGUqIFN5bWJvbFRhYmxlOjpjbG9uZVNjb3BlUGFydChWTSYgdm0pCiB7CiAgICAgU3lt
Ym9sVGFibGUqIHJlc3VsdCA9IFN5bWJvbFRhYmxlOjpjcmVhdGUodm0pOwogICAgIAotICAgIHJl
c3VsdC0+bV9wYXJhbWV0ZXJDb3VudEluY2x1ZGluZ1RoaXMgPSBtX3BhcmFtZXRlckNvdW50SW5j
bHVkaW5nVGhpczsKICAgICByZXN1bHQtPm1fdXNlc05vblN0cmljdEV2YWwgPSBtX3VzZXNOb25T
dHJpY3RFdmFsOwotICAgIHJlc3VsdC0+bV9jYXB0dXJlU3RhcnQgPSBtX2NhcHR1cmVTdGFydDsK
LSAgICByZXN1bHQtPm1fY2FwdHVyZUVuZCA9IG1fY2FwdHVyZUVuZDsKIAogICAgIGZvciAoYXV0
byBpdGVyID0gbV9tYXAuYmVnaW4oKSwgZW5kID0gbV9tYXAuZW5kKCk7IGl0ZXIgIT0gZW5kOyAr
K2l0ZXIpIHsKLSAgICAgICAgaWYgKCFpc0NhcHR1cmVkKGl0ZXItPnZhbHVlLmdldEluZGV4KCkp
KQorICAgICAgICBpZiAoIWl0ZXItPnZhbHVlLnZhck9mZnNldCgpLmlzU2NvcGUoKSkKICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICByZXN1bHQtPm1fbWFwLmFkZCgKICAgICAgICAgICAg
IGl0ZXItPmtleSwKLSAgICAgICAgICAgIFN5bWJvbFRhYmxlRW50cnkoaXRlci0+dmFsdWUuZ2V0
SW5kZXgoKSwgaXRlci0+dmFsdWUuZ2V0QXR0cmlidXRlcygpKSk7CisgICAgICAgICAgICBTeW1i
b2xUYWJsZUVudHJ5KGl0ZXItPnZhbHVlLnZhck9mZnNldCgpLCBpdGVyLT52YWx1ZS5nZXRBdHRy
aWJ1dGVzKCkpKTsKICAgICB9CiAgICAgCi0gICAgaWYgKG1fc2xvd0FyZ3VtZW50cykgewotICAg
ICAgICByZXN1bHQtPm1fc2xvd0FyZ3VtZW50cyA9IHN0ZDo6bWFrZV91bmlxdWU8U2xvd0FyZ3Vt
ZW50W10+KHBhcmFtZXRlckNvdW50KCkpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBwYXJh
bWV0ZXJDb3VudCgpOyBpLS07KQotICAgICAgICAgICAgcmVzdWx0LT5tX3Nsb3dBcmd1bWVudHNb
aV0gPSBtX3Nsb3dBcmd1bWVudHNbaV07Ci0gICAgfQotCisgICAgcmVzdWx0LT5tX2FyZ3VtZW50
cyA9IGFyZ3VtZW50cygpOworICAgIAogICAgIGlmIChtX3R5cGVQcm9maWxpbmdSYXJlRGF0YSkg
ewogICAgICAgICByZXN1bHQtPm1fdHlwZVByb2ZpbGluZ1JhcmVEYXRhID0gc3RkOjptYWtlX3Vu
aXF1ZTxUeXBlUHJvZmlsaW5nUmFyZURhdGE+KCk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuaAkocmV2aXNpb24gMTgwNzIwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMTItMjAxNCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIw
MDgsIDIwMTItMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMxLDYgKzMxLDcgQEAKIAogI2luY2x1ZGUgIkNvbmN1
cnJlbnRKSVRMb2NrLmgiCiAjaW5jbHVkZSAiSlNPYmplY3QuaCIKKyNpbmNsdWRlICJTY29wZWRB
cmd1bWVudHNUYWJsZS5oIgogI2luY2x1ZGUgIlR5cGVMb2NhdGlvbi5oIgogI2luY2x1ZGUgIlZh
cmlhYmxlV2F0Y2hwb2ludFNldC5oIgogI2luY2x1ZGUgPG1lbW9yeT4KQEAgLTM5LDI0ICs0MCw2
IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1zdHJ1Y3QgU2xvd0FyZ3VtZW50IHsKLXB1YmxpYzoK
LSAgICBlbnVtIFN0YXR1cyB7Ci0gICAgICAgIE5vcm1hbCA9IDAsCi0gICAgICAgIENhcHR1cmVk
ID0gMSwKLSAgICAgICAgRGVsZXRlZCA9IDIKLSAgICB9OwotCi0gICAgU2xvd0FyZ3VtZW50KCkK
LSAgICAgICAgOiBzdGF0dXMoTm9ybWFsKQotICAgICAgICAsIGluZGV4KDApCi0gICAgewotICAg
IH0KLQotICAgIFN0YXR1cyBzdGF0dXM7Ci0gICAgaW50IGluZGV4OyAvLyBJZiBzdGF0dXMgaXMg
J0RlbGV0ZWQnLCBpbmRleCBpcyBib2d1cy4KLX07Ci0KIHN0YXRpYyBBTFdBWVNfSU5MSU5FIGlu
dCBtaXNzaW5nU3ltYm9sTWFya2VyKCkgeyByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+
OjptYXgoKTsgfQogCiAvLyBUaGUgYml0IHR3aWRkbGluZyBpbiB0aGlzIGNsYXNzIGFzc3VtZXMg
dGhhdCBldmVyeSByZWdpc3RlciBpbmRleCBpcyBhCkBAIC04Niw2ICs2OSwyOSBAQCBzdGF0aWMg
QUxXQVlTX0lOTElORSBpbnQgbWlzc2luZ1N5bWJvbE1hCiAvLyBjb3B5OiAgICAgU3ltYm9sVGFi
bGVFbnRyeSAtLT4gRmF0RW50cnkgLS0tLS1eCiAKIHN0cnVjdCBTeW1ib2xUYWJsZUVudHJ5IHsK
K3ByaXZhdGU6CisgICAgc3RhdGljIFZhck9mZnNldCB2YXJPZmZzZXRGcm9tQml0cyhpbnRwdHJf
dCBiaXRzKQorICAgIHsKKyAgICAgICAgVmFyS2luZCBraW5kOworICAgICAgICBpbnRwdHJfdCBr
aW5kQml0cyA9IGJpdHMgJiBLaW5kTWFzazsKKyAgICAgICAgaWYgKGtpbmRCaXRzIDw9IFVud2F0
Y2hhYmxlU2NvcGVLaW5kQml0cykKKyAgICAgICAgICAgIGtpbmQgPSBTY29wZVZhcktpbmQ7Cisg
ICAgICAgIGVsc2UgaWYgKGtpbmRCaXRzID09IFN0YWNrS2luZEJpdHMpCisgICAgICAgICAgICBr
aW5kID0gU3RhY2tWYXJLaW5kOworICAgICAgICBlbHNlCisgICAgICAgICAgICBraW5kID0gQ2Fw
dHVyZWRBcmd1bWVudEtpbmQ7CisgICAgICAgIHJldHVybiBWYXJPZmZzZXQ6OmFzc2VtYmxlKGtp
bmQsIHN0YXRpY19jYXN0PGludD4oYml0cyA+PiBGbGFnQml0cykpOworICAgIH0KKyAgICAKKyAg
ICBzdGF0aWMgU2NvcGVPZmZzZXQgc2NvcGVPZmZzZXRGcm9tQml0cyhpbnRwdHJfdCBiaXRzKQor
ICAgIHsKKyAgICAgICAgQVNTRVJUKCEoYml0cyAmIFN0YWNrRmxhZykpOworICAgICAgICBBU1NF
UlQoIShiaXRzICYgQ2FwdHVyZWRBcmd1bWVudEZsYWcpKTsKKyAgICAgICAgcmV0dXJuIFNjb3Bl
T2Zmc2V0KHN0YXRpY19jYXN0PGludD4oYml0cyA+PiBGbGFnQml0cykpOworICAgIH0KKworcHVi
bGljOgorICAgIAogICAgIC8vIFVzZSB0aGUgU3ltYm9sVGFibGVFbnRyeTo6RmFzdCBjbGFzcywg
ZWl0aGVyIHZpYSBpbXBsaWNpdCBjYXN0IG9yIGJ5IGNhbGxpbmcKICAgICAvLyBnZXRGYXN0KCks
IHdoZW4geW91ICgxKSBvbmx5IGNhcmUgYWJvdXQgaXNOdWxsKCksIGdldEluZGV4KCksIGFuZCBp
c1JlYWRPbmx5KCksCiAgICAgLy8gYW5kICgyKSB5b3UgYXJlIGluIGEgaG90IHBhdGggd2hlcmUg
eW91IG5lZWQgdG8gbWluaW1pemUgdGhlIG51bWJlciBvZiB0aW1lcwpAQCAtMTA3LDExICsxMTMs
MTkgQEAgc3RydWN0IFN5bWJvbFRhYmxlRW50cnkgewogICAgICAgICAgICAgcmV0dXJuICEobV9i
aXRzICYgflNsaW1GbGFnKTsKICAgICAgICAgfQogCi0gICAgICAgIGludCBnZXRJbmRleCgpIGNv
bnN0CisgICAgICAgIFZhck9mZnNldCB2YXJPZmZzZXQoKSBjb25zdAogICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PihtX2JpdHMgPj4gRmxhZ0JpdHMpOworICAg
ICAgICAgICAgcmV0dXJuIHZhck9mZnNldEZyb21CaXRzKG1fYml0cyk7CiAgICAgICAgIH0KLSAg
ICAKKyAgICAgICAgCisgICAgICAgIC8vIEFzc2VydHMgaWYgdGhlIG9mZnNldCBpcyBhbnl0aGlu
ZyBidXQgYSBzY29wZSBvZmZzZXQuIFRoaXMgc3RydWN0dXJlcyB0aGUgYXNzZXJ0aW9ucworICAg
ICAgICAvLyBpbiBhIHdheSB0aGF0IG1heSByZXN1bHQgaW4gYmV0dGVyIGNvZGUsIGV2ZW4gaW4g
cmVsZWFzZSwgdGhhbiBkb2luZworICAgICAgICAvLyB2YXJPZmZzZXQoKS5zY29wZU9mZnNldCgp
LgorICAgICAgICBTY29wZU9mZnNldCBzY29wZU9mZnNldCgpIGNvbnN0CisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBzY29wZU9mZnNldEZyb21CaXRzKG1fYml0cyk7CisgICAgICAgIH0K
KyAgICAgICAgCiAgICAgICAgIGJvb2wgaXNSZWFkT25seSgpIGNvbnN0CiAgICAgICAgIHsKICAg
ICAgICAgICAgIHJldHVybiBtX2JpdHMgJiBSZWFkT25seUZsYWc7CkBAIC0xNDIsMTggKzE1Niwx
OCBAQCBzdHJ1Y3QgU3ltYm9sVGFibGVFbnRyeSB7CiAgICAgewogICAgIH0KIAotICAgIFN5bWJv
bFRhYmxlRW50cnkoaW50IGluZGV4KQorICAgIFN5bWJvbFRhYmxlRW50cnkoVmFyT2Zmc2V0IG9m
ZnNldCkKICAgICAgICAgOiBtX2JpdHMoU2xpbUZsYWcpCiAgICAgewotICAgICAgICBBU1NFUlQo
aXNWYWxpZEluZGV4KGluZGV4KSk7Ci0gICAgICAgIHBhY2soaW5kZXgsIGZhbHNlLCBmYWxzZSk7
CisgICAgICAgIEFTU0VSVChpc1ZhbGlkVmFyT2Zmc2V0KG9mZnNldCkpOworICAgICAgICBwYWNr
KG9mZnNldCwgZmFsc2UsIGZhbHNlKTsKICAgICB9CiAKLSAgICBTeW1ib2xUYWJsZUVudHJ5KGlu
dCBpbmRleCwgdW5zaWduZWQgYXR0cmlidXRlcykKKyAgICBTeW1ib2xUYWJsZUVudHJ5KFZhck9m
ZnNldCBvZmZzZXQsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCiAgICAgICAgIDogbV9iaXRzKFNsaW1G
bGFnKQogICAgIHsKLSAgICAgICAgQVNTRVJUKGlzVmFsaWRJbmRleChpbmRleCkpOwotICAgICAg
ICBwYWNrKGluZGV4LCBhdHRyaWJ1dGVzICYgUmVhZE9ubHksIGF0dHJpYnV0ZXMgJiBEb250RW51
bSk7CisgICAgICAgIEFTU0VSVChpc1ZhbGlkVmFyT2Zmc2V0KG9mZnNldCkpOworICAgICAgICBw
YWNrKG9mZnNldCwgYXR0cmlidXRlcyAmIFJlYWRPbmx5LCBhdHRyaWJ1dGVzICYgRG9udEVudW0p
OwogICAgIH0KICAgICAKICAgICB+U3ltYm9sVGFibGVFbnRyeSgpCkBAIC0xODEsOSArMTk1LDIy
IEBAIHN0cnVjdCBTeW1ib2xUYWJsZUVudHJ5IHsKICAgICAgICAgcmV0dXJuICEoYml0cygpICYg
flNsaW1GbGFnKTsKICAgICB9CiAKLSAgICBpbnQgZ2V0SW5kZXgoKSBjb25zdAorICAgIFZhck9m
ZnNldCB2YXJPZmZzZXQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHZhck9mZnNldEZy
b21CaXRzKGJpdHMoKSk7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNXYXRjaGFibGUoKSBjb25z
dAogICAgIHsKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4oYml0cygpID4+IEZsYWdC
aXRzKTsKKyAgICAgICAgcmV0dXJuIChtX2JpdHMgJiBLaW5kQml0c01hc2spID09IFNjb3BlS2lu
ZEJpdHM7CisgICAgfQorICAgIAorICAgIC8vIEFzc2VydHMgaWYgdGhlIG9mZnNldCBpcyBhbnl0
aGluZyBidXQgYSBzY29wZSBvZmZzZXQuIFRoaXMgc3RydWN0dXJlcyB0aGUgYXNzZXJ0aW9ucwor
ICAgIC8vIGluIGEgd2F5IHRoYXQgbWF5IHJlc3VsdCBpbiBiZXR0ZXIgY29kZSwgZXZlbiBpbiBy
ZWxlYXNlLCB0aGFuIGRvaW5nCisgICAgLy8gdmFyT2Zmc2V0KCkuc2NvcGVPZmZzZXQoKS4KKyAg
ICBTY29wZU9mZnNldCBzY29wZU9mZnNldCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
c2NvcGVPZmZzZXRGcm9tQml0cyhiaXRzKCkpOwogICAgIH0KICAgICAKICAgICBBTFdBWVNfSU5M
SU5FIEZhc3QgZ2V0RmFzdCgpIGNvbnN0CkBAIC0yMDYsMTAgKzIzMywxMCBAQCBzdHJ1Y3QgU3lt
Ym9sVGFibGVFbnRyeSB7CiAgICAgewogICAgICAgICByZXR1cm4gZ2V0RmFzdCgpLmdldEF0dHJp
YnV0ZXMoKTsKICAgICB9Ci0KKyAgICAKICAgICB2b2lkIHNldEF0dHJpYnV0ZXModW5zaWduZWQg
YXR0cmlidXRlcykKICAgICB7Ci0gICAgICAgIHBhY2soZ2V0SW5kZXgoKSwgYXR0cmlidXRlcyAm
IFJlYWRPbmx5LCBhdHRyaWJ1dGVzICYgRG9udEVudW0pOworICAgICAgICBwYWNrKHZhck9mZnNl
dCgpLCBpc1dhdGNoYWJsZSgpLCBhdHRyaWJ1dGVzICYgUmVhZE9ubHksIGF0dHJpYnV0ZXMgJiBE
b250RW51bSk7CiAgICAgfQogCiAgICAgYm9vbCBpc1JlYWRPbmx5KCkgY29uc3QKQEAgLTIxOCw2
ICsyNDUsMTIgQEAgc3RydWN0IFN5bWJvbFRhYmxlRW50cnkgewogICAgIH0KICAgICAKICAgICBK
U1ZhbHVlIGluZmVycmVkVmFsdWUoKTsKKworICAgIHZvaWQgZGlzYWJsZVdhdGNoaW5nKCkKKyAg
ICB7CisgICAgICAgIGlmICh2YXJPZmZzZXQoKS5pc1Njb3BlKCkpCisgICAgICAgICAgICBwYWNr
KHZhck9mZnNldCgpLCBmYWxzZSwgYXR0cmlidXRlcyAmIFJlYWRPbmx5LCBhdHRyaWJ1dGVzICYg
RG9udEVudW0pOworICAgIH0KICAgICAKICAgICB2b2lkIHByZXBhcmVUb1dhdGNoKFN5bWJvbFRh
YmxlKik7CiAgICAgCkBAIC0yNDIsNyArMjc1LDEyIEBAIHByaXZhdGU6CiAgICAgc3RhdGljIGNv
bnN0IGludHB0cl90IFJlYWRPbmx5RmxhZyA9IDB4MjsKICAgICBzdGF0aWMgY29uc3QgaW50cHRy
X3QgRG9udEVudW1GbGFnID0gMHg0OwogICAgIHN0YXRpYyBjb25zdCBpbnRwdHJfdCBOb3ROdWxs
RmxhZyA9IDB4ODsKLSAgICBzdGF0aWMgY29uc3QgaW50cHRyX3QgRmxhZ0JpdHMgPSA0OworICAg
IHN0YXRpYyBjb25zdCBpbnRwdHJfdCBLaW5kQml0c01hc2sgPSAweDMwOworICAgIHN0YXRpYyBj
b25zdCBpbnRwdHJfdCBTY29wZUtpbmRCaXRzID0gMHgwMDsKKyAgICBzdGF0aWMgY29uc3QgaW50
cHRyX3QgVW53YXRjaGFibGVTY29wZUtpbmRCaXRzID0gMHgxMDsKKyAgICBzdGF0aWMgY29uc3Qg
aW50cHRyX3QgU3RhY2tLaW5kQml0cyA9IDB4MjA7CisgICAgc3RhdGljIGNvbnN0IGludHB0cl90
IENhcHR1cmVkQXJndW1lbnRLaW5kQml0cyA9IDB4MzA7CisgICAgc3RhdGljIGNvbnN0IGludHB0
cl90IEZsYWdCaXRzID0gNjsKICAgICAKICAgICBjbGFzcyBGYXRFbnRyeSB7CiAgICAgICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwpAQCAtMzA5LDIwICszNDcsNDAgQEAgcHJpdmF0ZToKIAog
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZnJlZUZhdEVudHJ5U2xvdygpOwogCi0gICAgdm9p
ZCBwYWNrKGludCBpbmRleCwgYm9vbCByZWFkT25seSwgYm9vbCBkb250RW51bSkKKyAgICB2b2lk
IHBhY2soVmFyT2Zmc2V0IG9mZnNldCwgYm9vbCBpc1dhdGNoYWJsZSwgYm9vbCByZWFkT25seSwg
Ym9vbCBkb250RW51bSkKICAgICB7CiAgICAgICAgIEFTU0VSVCghaXNGYXQoKSk7CiAgICAgICAg
IGludHB0cl90JiBiaXRzUmVmID0gYml0cygpOwotICAgICAgICBiaXRzUmVmID0gKHN0YXRpY19j
YXN0PGludHB0cl90PihpbmRleCkgPDwgRmxhZ0JpdHMpIHwgTm90TnVsbEZsYWcgfCBTbGltRmxh
ZzsKKyAgICAgICAgYml0c1JlZiA9CisgICAgICAgICAgICAoc3RhdGljX2Nhc3Q8aW50cHRyX3Q+
KG9mZnNldC5yYXdPZmZzZXQoKSkgPDwgRmxhZ0JpdHMpIHwgTm90TnVsbEZsYWcgfCBTbGltRmxh
ZzsKICAgICAgICAgaWYgKHJlYWRPbmx5KQogICAgICAgICAgICAgYml0c1JlZiB8PSBSZWFkT25s
eUZsYWc7CiAgICAgICAgIGlmIChkb250RW51bSkKICAgICAgICAgICAgIGJpdHNSZWYgfD0gRG9u
dEVudW1GbGFnOworICAgICAgICBzd2l0Y2ggKG9mZnNldC5raW5kKCkpIHsKKyAgICAgICAgY2Fz
ZSBTY29wZVZhcktpbmQ6CisgICAgICAgICAgICBpZiAoaXNXYXRjaGFibGUpCisgICAgICAgICAg
ICAgICAgYml0c1JlZiB8PSBTY29wZUtpbmRCaXRzOworICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgIGJpdHNSZWYgfD0gVW53YXRjaGFibGVTY29wZUtpbmRCaXRzOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgU3RhY2tWYXJLaW5kOgorICAgICAgICAgICAgQVNTRVJU
KCFpc1dhdGNoYWJsZSk7CisgICAgICAgICAgICBiaXRzUmVmIHw9IFN0YWNrS2luZEJpdHM7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDYXB0dXJlZEFyZ3VtZW50S2luZDoKKyAg
ICAgICAgICAgIEFTU0VSVCghaXNXYXRjaGFibGUpOworICAgICAgICAgICAgYml0c1JlZiB8PSBD
YXB0dXJlZEFyZ3VtZW50S2luZEJpdHM7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQogICAgIH0KICAgICAKLSAgICBib29sIGlzVmFsaWRJbmRl
eChpbnQgaW5kZXgpCisgICAgc3RhdGljIGJvb2wgaXNWYWxpZFZhck9mZnNldChWYXJPZmZzZXQg
b2Zmc2V0KQogICAgIHsKLSAgICAgICAgcmV0dXJuICgoc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KGlu
ZGV4KSA8PCBGbGFnQml0cykgPj4gRmxhZ0JpdHMpID09IHN0YXRpY19jYXN0PGludHB0cl90Pihp
bmRleCk7CisgICAgICAgIHJldHVybiAoKHN0YXRpY19jYXN0PGludHB0cl90PihvZmZzZXQucmF3
T2Zmc2V0KCkpIDw8IEZsYWdCaXRzKSA+PiBGbGFnQml0cykgPT0gc3RhdGljX2Nhc3Q8aW50cHRy
X3Q+KG9mZnNldC5yYXdPZmZzZXQoKSk7CiAgICAgfQogCiAgICAgaW50cHRyX3QgbV9iaXRzOwpA
QCAtMzUxLDcgKzQwOSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgU3ltYm9sVGFibGUqIGNyZWF0
ZU5hbWVTY29wZVRhYmxlKFZNJiB2bSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIHVuc2lnbmVk
IGF0dHJpYnV0ZXMpCiAgICAgewogICAgICAgICBTeW1ib2xUYWJsZSogcmVzdWx0ID0gY3JlYXRl
KHZtKTsKLSAgICAgICAgcmVzdWx0LT5hZGQoaWRlbnQuaW1wbCgpLCBTeW1ib2xUYWJsZUVudHJ5
KC0xLCBhdHRyaWJ1dGVzKSk7CisgICAgICAgIHJlc3VsdC0+YWRkKGlkZW50LmltcGwoKSwgU3lt
Ym9sVGFibGVFbnRyeShWYXJPZmZzZXQoU2NvcGVPZmZzZXQoMCkpLCBhdHRyaWJ1dGVzKSk7CiAg
ICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgIApAQCAtNDIzLDkgKzQ4MSw1MyBAQCBw
dWJsaWM6CiAgICAgICAgIHJldHVybiBzaXplKGxvY2tlcik7CiAgICAgfQogICAgIAotICAgIE1h
cDo6QWRkUmVzdWx0IGFkZChjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiwgU3RyaW5nSW1wbCog
a2V5LCBjb25zdCBTeW1ib2xUYWJsZUVudHJ5JiBlbnRyeSkKKyAgICBTY29wZU9mZnNldCBtYXhT
Y29wZU9mZnNldCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9tYXhTY29wZU9mZnNl
dDsKKyAgICB9CisgICAgCisgICAgdm9pZCBkaWRVc2VTY29wZU9mZnNldChTY29wZU9mZnNldCBv
ZmZzZXQpCisgICAgeworICAgICAgICBpZiAoIW1fbWF4U2NvcGVPZmZzZXQgfHwgbV9tYXhTY29w
ZU9mZnNldCA8IG9mZmV0KQorICAgICAgICAgICAgbV9tYXhTY29wZU9mZnNldCA9IG9mZnNldDsK
KyAgICB9CisgICAgCisgICAgdm9pZCBkaWRVc2VWYXJPZmZzZXQoVmFyT2Zmc2V0IG9mZnNldCkK
KyAgICB7CisgICAgICAgIGlmIChvZmZzZXQuaXNTY29wZSgpKQorICAgICAgICAgICAgZGlkVXNl
U2NvcGVPZmZzZXQob2Zmc2V0KTsKKyAgICB9CisgICAgCisgICAgdW5zaWduZWQgc2NvcGVTaXpl
KCkgY29uc3QKKyAgICB7CisgICAgICAgIFNjb3BlT2Zmc2V0IG1heFNjb3BlT2Zmc2V0ID0gdGhp
cy0+bWF4U2NvcGVPZmZzZXQoKTsKKyAgICAgICAgCisgICAgICAgIC8vIERvIHNvbWUgY2FsY3Vs
YXRpb24gdGhhdCByZWxpZXMgb24gaW52YWxpZCBzY29wZSBvZmZzZXQgcGx1cyBvbmUgYmVpbmcg
emVyby4KKyAgICAgICAgdW5zaWduZWQgZmFzdFJlc3VsdCA9IG1heFNjb3BlT2Zmc2V0Lm9mZnNl
dFVuY2hlY2tlZCgpICsgMTsKKyAgICAgICAgCisgICAgICAgIC8vIEFzc2VydCB0aGF0IHRoaXMg
d29ya3MuCisgICAgICAgIEFTU0VSVChmYXN0UmVzdWx0ID09ICghbWF4U2NvcGVPZmZzZXQgPyAw
IDogbWF4U2NvcGVPZmZzZXQub2Zmc2V0KCkgKyAxKSk7CisgICAgICAgIAorICAgICAgICByZXR1
cm4gZmFzdFJlc3VsdDsKKyAgICB9CisgICAgCisgICAgU2NvcGVPZmZzZXQgbmV4dFNjb3BlT2Zm
c2V0KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBTY29wZU9mZnNldChzY29wZVNpemUo
KSk7CisgICAgfQorICAgIAorICAgIFNjb3BlT2Zmc2V0IHRha2VOZXh0U2NvcGVPZmZzZXQoKQor
ICAgIHsKKyAgICAgICAgU2NvcGVPZmZzZXQgcmVzdWx0ID0gbmV4dFNjb3BlT2Zmc2V0KCk7Cisg
ICAgICAgIG1fbWF4U2NvcGVPZmZzZXQgPSByZXN1bHQ7CisgICAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgfQorICAgIAorICAgIHZvaWQgYWRkKGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImLCBT
dHJpbmdJbXBsKiBrZXksIGNvbnN0IFN5bWJvbFRhYmxlRW50cnkmIGVudHJ5KQogICAgIHsKLSAg
ICAgICAgcmV0dXJuIG1fbWFwLmFkZChrZXksIGVudHJ5KTsKKyAgICAgICAgZGlkVXNlVmFyT2Zm
c2V0KGVudHJ5LnZhck9mZnNldCgpKTsKKyAgICAgICAgTWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0g
bV9tYXAuYWRkKGtleSwgZW50cnkpOworICAgICAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgcmVz
dWx0LmlzTmV3RW50cnkpOwogICAgIH0KICAgICAKICAgICB2b2lkIGFkZChTdHJpbmdJbXBsKiBr
ZXksIGNvbnN0IFN5bWJvbFRhYmxlRW50cnkmIGVudHJ5KQpAQCAtNDM0LDkgKzUzNiwxMCBAQCBw
dWJsaWM6CiAgICAgICAgIGFkZChsb2NrZXIsIGtleSwgZW50cnkpOwogICAgIH0KICAgICAKLSAg
ICBNYXA6OkFkZFJlc3VsdCBzZXQoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYsIFN0cmluZ0lt
cGwqIGtleSwgY29uc3QgU3ltYm9sVGFibGVFbnRyeSYgZW50cnkpCisgICAgdm9pZCBzZXQoY29u
c3QgQ29uY3VycmVudEpJVExvY2tlciYsIFN0cmluZ0ltcGwqIGtleSwgY29uc3QgU3ltYm9sVGFi
bGVFbnRyeSYgZW50cnkpCiAgICAgewotICAgICAgICByZXR1cm4gbV9tYXAuc2V0KGtleSwgZW50
cnkpOworICAgICAgICBkaWRVc2VWYXJPZmZzZXQoZW50cnkudmFyT2Zmc2V0KCkpOworICAgICAg
ICBtX21hcC5zZXQoa2V5LCBlbnRyeSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgc2V0KFN0cmlu
Z0ltcGwqIGtleSwgY29uc3QgU3ltYm9sVGFibGVFbnRyeSYgZW50cnkpCkBAIC00NTYsNiArNTU5
LDQ1IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGNvbnRhaW5zKGxvY2tlciwga2V5KTsKICAg
ICB9CiAgICAgCisgICAgLy8gVGhlIHByaW5jaXBsZSBiZWhpbmQgU2NvcGVkQXJndW1lbnRzVGFi
bGUgbW9kaWZpY2F0aW9ucyBpcyB0aGF0IHdlIHdpbGwgY3JlYXRlIG9uZSBhbmQKKyAgICAvLyBs
ZWF2ZSBpdCB1bmxvY2tlZCAtIHRoZXJlYnkgYWxsb3dpbmcgaW4tcGxhY2UgY2hhbmdlcyAtIHVu
dGlsIHNvbWVvbmUgYXNrcyBmb3IgYSBwb2ludGVyIHRvCisgICAgLy8gdGhlIHRhYmxlLiBUaGVu
LCB3ZSB3aWxsIGxvY2sgaXQuIFRoZW4gYm90aCBvdXIgZnV0dXJlIGNoYW5nZXMgYW5kIHRoZWly
IGZ1dHVyZSBjaGFuZ2VzCisgICAgLy8gd2lsbCBmaXJzdCBoYXZlIHRvIG1ha2UgYSBjb3B5LiBU
aGlzIGRpc2NpcGxpbmUgbWVhbnMgdGhhdCB1c3VhbGx5IHdoZW4gd2UgY3JlYXRlIGEKKyAgICAv
LyBTY29wZWRBcmd1bWVudHMgb2JqZWN0LCB3ZSBkb24ndCBoYXZlIHRvIG1ha2UgYSBjb3B5IG9m
IHRoZSBTY29wZWRBcmd1bWVudHNUYWJsZSAtIGluc3RlYWQKKyAgICAvLyB3ZSBqdXN0IHRha2Ug
YSByZWZlcmVuY2UgdG8gb25lIHRoYXQgd2UgYWxyZWFkeSBoYXZlLgorICAgIAorICAgIHVpbnQz
Ml90IGFyZ3VtZW50c0xlbmd0aCgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoIW1fYXJndW1l
bnRzKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBtX2FyZ3VtZW50cy0+
bGVuZ3RoKCk7CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0QXJndW1lbnRzTGVuZ3RoKFZNJiB2
bSwgdWludDMyX3QgbGVuZ3RoKQorICAgIHsKKyAgICAgICAgaWYgKFVOTElLRUxZKCFtX2FyZ3Vt
ZW50cykpCisgICAgICAgICAgICBtX2FyZ3VtZW50cy5zZXQodm0sIHRoaXMsIFNjb3BlZEFyZ3Vt
ZW50c1RhYmxlOjpjcmVhdGUodm0pKTsKKyAgICAgICAgbV9hcmd1bWVudHMuc2V0KHZtLCB0aGlz
LCBtX2FyZ3VtZW50cy0+c2V0TGVuZ3RoKHZtLCBsZW5ndGgpKTsKKyAgICB9CisgICAgCisgICAg
U2NvcGVPZmZzZXQgYXJndW1lbnRPZmZzZXQodWludDMyX3QgaSkgY29uc3QKKyAgICB7CisgICAg
ICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKG1fYXJndW1lbnRzKTsKKyAgICAg
ICAgcmV0dXJuIG1fYXJndW1lbnRzLT5nZXQoaSk7CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0
QXJndW1lbnRPZmZzZXQoVk0mIHZtLCB1aW50MzJfdCBpLCBTY29wZU9mZnNldCBvZmZzZXQpCisg
ICAgeworICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihtX2FyZ3VtZW50
cyk7CisgICAgICAgIG1fYXJndW1lbnRzLnNldCh2bSwgdGhpcywgbV9hcmd1bWVudHMtPnNldCh2
bSwgaSwgb2Zmc2V0KSk7CisgICAgfQorICAgIAorICAgIFNjb3BlZEFyZ3VtZW50c1RhYmxlKiBh
cmd1bWVudHMoKSBjb25zdAorICAgIHsKKyAgICAgICAgbV9hcmd1bWVudHMtPmxvY2soKTsKKyAg
ICAgICAgcmV0dXJuIG1fYXJndW1lbnRzLmdldCgpOworICAgIH0KKyAgICAKICAgICBHbG9iYWxW
YXJpYWJsZUlEIHVuaXF1ZUlERm9yVmFyaWFibGUoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYs
IFN0cmluZ0ltcGwqIGtleSwgVk0mIHZtKTsKICAgICBHbG9iYWxWYXJpYWJsZUlEIHVuaXF1ZUlE
Rm9yUmVnaXN0ZXIoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYgbG9ja2VyLCBpbnQgcmVnaXN0
ZXJJbmRleCwgVk0mIHZtKTsKICAgICBSZWZQdHI8VHlwZVNldD4gZ2xvYmFsVHlwZVNldEZvclJl
Z2lzdGVyKGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImIGxvY2tlciwgaW50IHJlZ2lzdGVySW5k
ZXgsIFZNJiB2bSk7CkBAIC00NjQsMjggKzYwNiw3IEBAIHB1YmxpYzoKICAgICBib29sIHVzZXNO
b25TdHJpY3RFdmFsKCkgeyByZXR1cm4gbV91c2VzTm9uU3RyaWN0RXZhbDsgfQogICAgIHZvaWQg
c2V0VXNlc05vblN0cmljdEV2YWwoYm9vbCB1c2VzTm9uU3RyaWN0RXZhbCkgeyBtX3VzZXNOb25T
dHJpY3RFdmFsID0gdXNlc05vblN0cmljdEV2YWw7IH0KIAotICAgIGludCBjYXB0dXJlU3RhcnQo
KSBjb25zdCB7IHJldHVybiBtX2NhcHR1cmVTdGFydDsgfQotICAgIHZvaWQgc2V0Q2FwdHVyZVN0
YXJ0KGludCBjYXB0dXJlU3RhcnQpIHsgbV9jYXB0dXJlU3RhcnQgPSBjYXB0dXJlU3RhcnQ7IH0K
LQotICAgIGludCBjYXB0dXJlRW5kKCkgY29uc3QgeyByZXR1cm4gbV9jYXB0dXJlRW5kOyB9Ci0g
ICAgdm9pZCBzZXRDYXB0dXJlRW5kKGludCBjYXB0dXJlRW5kKSB7IG1fY2FwdHVyZUVuZCA9IGNh
cHR1cmVFbmQ7IH0KLQotICAgIGludCBjYXB0dXJlQ291bnQoKSBjb25zdCB7IHJldHVybiAtKG1f
Y2FwdHVyZUVuZCAtIG1fY2FwdHVyZVN0YXJ0KTsgfQotICAgIAotICAgIGJvb2wgaXNDYXB0dXJl
ZChpbnQgb3BlcmFuZCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBvcGVyYW5kIDw9IGNhcHR1cmVT
dGFydCgpICYmIG9wZXJhbmQgPiBjYXB0dXJlRW5kKCk7Ci0gICAgfQotCi0gICAgaW50IHBhcmFt
ZXRlckNvdW50KCkgeyByZXR1cm4gbV9wYXJhbWV0ZXJDb3VudEluY2x1ZGluZ1RoaXMgLSAxOyB9
Ci0gICAgaW50IHBhcmFtZXRlckNvdW50SW5jbHVkaW5nVGhpcygpIHsgcmV0dXJuIG1fcGFyYW1l
dGVyQ291bnRJbmNsdWRpbmdUaGlzOyB9Ci0gICAgdm9pZCBzZXRQYXJhbWV0ZXJDb3VudEluY2x1
ZGluZ1RoaXMoaW50IHBhcmFtZXRlckNvdW50SW5jbHVkaW5nVGhpcykgeyBtX3BhcmFtZXRlckNv
dW50SW5jbHVkaW5nVGhpcyA9IHBhcmFtZXRlckNvdW50SW5jbHVkaW5nVGhpczsgfQotCi0gICAg
Ly8gMCBpZiB3ZSBkb24ndCBjYXB0dXJlIGFueSBhcmd1bWVudHM7IHBhcmFtZXRlckNvdW50KCkg
aW4gbGVuZ3RoIGlmIHdlIGRvLgotICAgIGNvbnN0IFNsb3dBcmd1bWVudCogc2xvd0FyZ3VtZW50
cygpIHsgcmV0dXJuIG1fc2xvd0FyZ3VtZW50cy5nZXQoKTsgfQotICAgIHZvaWQgc2V0U2xvd0Fy
Z3VtZW50cyhzdGQ6OnVuaXF1ZV9wdHI8U2xvd0FyZ3VtZW50W10+IHNsb3dBcmd1bWVudHMpIHsg
bV9zbG93QXJndW1lbnRzID0gV1RGOjptb3ZlKHNsb3dBcmd1bWVudHMpOyB9Ci0gICAgCi0gICAg
U3ltYm9sVGFibGUqIGNsb25lQ2FwdHVyZWROYW1lcyhWTSYpOworICAgIFN5bWJvbFRhYmxlKiBj
bG9uZVNjb3BlUGFydChWTSYpOwogCiAgICAgdm9pZCBwcmVwYXJlRm9yVHlwZVByb2ZpbGluZyhj
b25zdCBDb25jdXJyZW50SklUTG9ja2VyJik7CiAKQEAgLTUxMyw2ICs2MzQsOCBAQCBwcml2YXRl
OgogICAgIH5TeW1ib2xUYWJsZSgpOwogCiAgICAgTWFwIG1fbWFwOworICAgIFNjb3BlT2Zmc2V0
IG1fbWF4U2NvcGVPZmZzZXQ7CisgICAgCiAgICAgc3RydWN0IFR5cGVQcm9maWxpbmdSYXJlRGF0
YSB7CiAgICAgICAgIFVuaXF1ZUlETWFwIG1fdW5pcXVlSURNYXA7CiAgICAgICAgIFJlZ2lzdGVy
VG9WYXJpYWJsZU1hcCBtX3JlZ2lzdGVyVG9WYXJpYWJsZU1hcDsKQEAgLTUyMCwxMyArNjQzLDkg
QEAgcHJpdmF0ZToKICAgICB9OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxUeXBlUHJvZmlsaW5nUmFy
ZURhdGE+IG1fdHlwZVByb2ZpbGluZ1JhcmVEYXRhOwogCi0gICAgaW50IG1fcGFyYW1ldGVyQ291
bnRJbmNsdWRpbmdUaGlzOwogICAgIGJvb2wgbV91c2VzTm9uU3RyaWN0RXZhbDsKLQotICAgIGlu
dCBtX2NhcHR1cmVTdGFydDsKLSAgICBpbnQgbV9jYXB0dXJlRW5kOwotCi0gICAgc3RkOjp1bmlx
dWVfcHRyPFNsb3dBcmd1bWVudFtdPiBtX3Nsb3dBcmd1bWVudHM7CisgICAgCisgICAgV3JpdGVC
YXJyaWVyPFNjb3BlZEFyZ3VtZW50c1RhYmxlPiBtX2FyZ3VtZW50czsKICAgICAKICAgICBzdGQ6
OnVuaXF1ZV9wdHI8V2F0Y2hwb2ludENsZWFudXA+IG1fd2F0Y2hwb2ludENsZWFudXA7CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Zhck9mZnNldC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVmFyT2Zmc2V0LmNwcAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Zhck9mZnNldC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw3NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVmFyT2Zm
c2V0LmgiCisKK25hbWVzcGFjZSBKU0MgeworCit2b2lkIFZhck9mZnNldDo6ZHVtcChQcmludFN0
cmVhbSYgb3V0KSBjb25zdAoreworICAgIHN3aXRjaCAobV9raW5kKSB7CisgICAgY2FzZSBJbnZh
bGlkVmFyS2luZDoKKyAgICAgICAgb3V0LnByaW50KCJpbnZhbGlkIik7CisgICAgICAgIHJldHVy
bjsKKyAgICBjYXNlIFNjb3BlVmFyS2luZDoKKyAgICAgICAgb3V0LnByaW50KHNjb3BlT2Zmc2V0
KCkpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBTdGFja1ZhcktpbmQ6CisgICAgICAgIG91
dC5wcmludChzdGFja09mZnNldCgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ2FwdHVy
ZWRBcmd1bWVudEtpbmQ6CisgICAgICAgIG91dC5wcmludChjYXB0dXJlZEFyZ3VtZW50T2Zmc2V0
KCkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCituYW1lc3BhY2UgV1RGIHsKKwordXNp
bmcgbmFtZXNwYWNlIEpTQzsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQs
IFZhcktpbmQgdmFyS2luZCkKK3sKKyAgICBzd2l0Y2ggKHZhcktpbmQpIHsKKyAgICBjYXNlIElu
dmFsaWRWYXJLaW5kOgorICAgICAgICBvdXQucHJpbnQoIkludmFsaWQiKTsKKyAgICAgICAgcmV0
dXJuOworICAgIGNhc2UgU2NvcGVWYXJLaW5kOgorICAgICAgICBvdXQucHJpbnQoIlNjb3BlIik7
CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFN0YWNrVmFyS2luZDoKKyAgICAgICAgb3V0LnBy
aW50KCJTdGFjayIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBDYXB0dXJlZEFyZ3VtZW50
S2luZDoKKyAgICAgICAgb3V0LnByaW50KCJDYXB0dXJlZEFyZ3VtZW50Iik7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV1RGCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Zh
ck9mZnNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Zh
ck9mZnNldC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
VmFyT2Zmc2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMTQgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBWYXJPZmZzZXRfaAor
I2RlZmluZSBWYXJPZmZzZXRfaAorCisjaW5jbHVkZSAiQ2FwdHVyZWRBcmd1bWVudHNPZmZzZXQu
aCIKKyNpbmNsdWRlICJTY29wZU9mZnNldC5oIgorI2luY2x1ZGUgIlZpcnR1YWxSZWdpc3Rlci5o
IgorCituYW1lc3BhY2UgSlNDIHsKKworZW51bSBWYXJLaW5kIDogdWludDhfdCB7CisgICAgSW52
YWxpZFZhcktpbmQsCisgICAgU2NvcGVWYXJLaW5kLAorICAgIFN0YWNrVmFyS2luZCwKKyAgICBD
YXB0dXJlZEFyZ3VtZW50S2luZAorfTsKKworY2xhc3MgVmFyT2Zmc2V0IHsKK3B1YmxpYzoKKyAg
ICBWYXJPZmZzZXQoKQorICAgICAgICA6IG1fa2luZChJbnZhbGlkVmFyS2luZCkKKyAgICAgICAg
LCBtX29mZnNldChVSU5UX01BWCkKKyAgICB7CisgICAgfQorICAgIAorICAgIGV4cGxpY2l0IFZh
ck9mZnNldChWaXJ0dWFsUmVnaXN0ZXIgc3RhY2tPZmZzZXQpCisgICAgeworICAgICAgICBpZiAo
IXN0YWNrT2Zmc2V0LmlzVmFsaWQoKSkgeworICAgICAgICAgICAgbV9raW5kID0gSW52YWxpZFZh
cktpbmQ7CisgICAgICAgICAgICBtX29mZnNldCA9IFVJTlRfTUFYOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgbV9raW5kID0gU3RhY2tWYXJLaW5kOworICAgICAgICAgICAgbV9vZmZz
ZXQgPSBzdGFja09mZnNldC5vZmZzZXQoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBl
eHBsaWNpdCBWYXJPZmZzZXQoU2NvcGVPZmZzZXQgc2NvcGVPZmZzZXQpCisgICAgeworICAgICAg
ICBpZiAoIXNjb3BlT2Zmc2V0KSB7CisgICAgICAgICAgICBtX2tpbmQgPSBJbnZhbGlkVmFyS2lu
ZDsKKyAgICAgICAgICAgIG1fb2Zmc2V0ID0gVUlOVF9NQVg7CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICBtX2tpbmQgPSBTY29wZVZhcktpbmQ7CisgICAgICAgICAgICBtX29mZnNldCA9
IHNjb3BlT2Zmc2V0Lm9mZnNldCgpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIGV4cGxp
Y2l0IFZhck9mZnNldChDYXB0dXJlZEFyZ3VtZW50c09mZnNldCBjYXB0dXJlZEFyZ3VtZW50c09m
ZnNldCkKKyAgICB7CisgICAgICAgIGlmICghY2FwdHVyZWRBcmd1bWVudHNPZmZzZXQpIHsKKyAg
ICAgICAgICAgIG1fa2luZCA9IEludmFsaWRWYXJLaW5kOworICAgICAgICAgICAgbV9vZmZzZXQg
PSBVSU5UX01BWDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1fa2luZCA9IENhcHR1
cmVkQXJndW1lbnRLaW5kOworICAgICAgICAgICAgbV9vZmZzZXQgPSBjYXB0dXJlZEFyZ3VtZW50
c09mZnNldC5vZmZzZXQoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBzdGF0aWMgVmFy
T2Zmc2V0IGFzc2VtYmxlKFZhcktpbmQga2luZCwgdW5zaWduZWQgb2Zmc2V0KQorICAgIHsKKyAg
ICAgICAgVmFyT2Zmc2V0IHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IGtpbmQ7Cisg
ICAgICAgIHJlc3VsdC5tX29mZnNldCA9IG9mZnNldDsKKyAgICAgICAgcmVzdWx0LmNoZWNrU2Fu
aXR5KCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNW
YWxpZCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9raW5kICE9IEludmFsaWRWYXJL
aW5kOworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gIWlzVmFsaWQoKTsKKyAgICB9CisgICAgCisgICAgVmFyS2luZCBraW5kKCkg
Y29uc3QgeyByZXR1cm4gbV9raW5kOyB9CisgICAgCisgICAgYm9vbCBpc1N0YWNrKCkgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBtX2tpbmQgPT0gU3RhY2tWYXJLaW5kOworICAgIH0KKyAg
ICAKKyAgICBib29sIGlzU2NvcGUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fa2lu
ZCA9PSBTY29wZVZhcktpbmQ7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNDYXB0dXJlZEFyZ3Vt
ZW50KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2tpbmQgPT0gQ2FwdHVyZWRBcmd1
bWVudEtpbmQ7CisgICAgfQorICAgIAorICAgIFZpcnR1YWxSZWdpc3RlciBzdGFja09mZnNldFVu
Y2hlY2tlZCgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoIWlzU3RhY2soKSkKKyAgICAgICAg
ICAgIHJldHVybiBWaXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICAgICAgcmV0dXJuIFZpcnR1YWxSZWdp
c3RlcihtX29mZnNldCk7CisgICAgfQorICAgIAorICAgIFNjb3BlT2Zmc2V0IHNjb3BlT2Zmc2V0
VW5jaGVja2VkKCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmICghaXNTY29wZSgpKQorICAgICAg
ICAgICAgcmV0dXJuIFNjb3BlT2Zmc2V0KCk7CisgICAgICAgIHJldHVybiBTY29wZU9mZnNldCht
X29mZnNldCk7CisgICAgfQorICAgIAorICAgIENhcHR1cmVkQXJndW1lbnRzT2Zmc2V0IGNhcHR1
cmVkQXJndW1lbnRzT2Zmc2V0VW5jaGVja2VkKCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmICgh
aXNDYXB0dXJlZEFyZ3VtZW50KCkpCisgICAgICAgICAgICByZXR1cm4gQ2FwdHVyZWRBcmd1bWVu
dHNPZmZzZXQoKTsKKyAgICAgICAgcmV0dXJuIENhcHR1cmVkQXJndW1lbnRzT2Zmc2V0KG1fb2Zm
c2V0KTsKKyAgICB9CisgICAgCisgICAgVmlydHVhbFJlZ2lzdGVyIHN0YWNrT2Zmc2V0KCkgY29u
c3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc1N0YWNrKCkpOworICAgICAgICByZXR1cm4gVmly
dHVhbFJlZ2lzdGVyKG1fb2Zmc2V0KTsKKyAgICB9CisgICAgCisgICAgU2NvcGVPZmZzZXQgc2Nv
cGVPZmZzZXQoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzU2NvcGUoKSk7CisgICAg
ICAgIHJldHVybiBTY29wZU9mZnNldChtX29mZnNldCk7CisgICAgfQorICAgIAorICAgIENhcHR1
cmVkQXJndW1lbnRzT2Zmc2V0IGNhcHR1cmVkQXJndW1lbnRzT2Zmc2V0KCkgY29uc3QKKyAgICB7
CisgICAgICAgIEFTU0VSVChpc0NhcHR1cmVkQXJndW1lbnQoKSk7CisgICAgICAgIHJldHVybiBD
YXB0dXJlZEFyZ3VtZW50c09mZnNldChtX29mZnNldCk7CisgICAgfQorICAgIAorICAgIHVuc2ln
bmVkIHJhd09mZnNldCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaXNWYWxpZCgpKTsK
KyAgICAgICAgcmV0dXJuIG1fb2Zmc2V0OworICAgIH0KKyAgICAKKyAgICB2b2lkIGNoZWNrU2Fu
aXR5KCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChBU1NFUlRfRElTQUJMRUQpCisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBzd2l0Y2ggKG1fa2luZCkgeworICAgICAg
ICBjYXNlIEludmFsaWRWYXJLaW5kOgorICAgICAgICAgICAgQVNTRVJUKG1fb2Zmc2V0ID09IFVJ
TlRfTUFYKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBTY29wZVZhcktpbmQ6
CisgICAgICAgICAgICBBU1NFUlQoc2NvcGVPZmZzZXQoKSk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIGNhc2UgU3RhY2tWYXJLaW5kOgorICAgICAgICAgICAgQVNTRVJUKHN0YWNrT2Zm
c2V0KCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIENhcHR1cmVkQXJndW1l
bnRLaW5kOgorICAgICAgICAgICAgQVNTRVJUKGNhcHR1cmVkQXJndW1lbnRzT2Zmc2V0KCkpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFZh
ck9mZnNldCYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9raW5kID09IG90
aGVyLm1fa2luZAorICAgICAgICAgICAgJiYgbV9vZmZzZXQgPT0gb3RoZXIubV9vZmZzZXQ7Cisg
ICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBWYXJPZmZzZXQmIG90aGVyKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgIH0KKyAg
ICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAKK3ByaXZhdGU6Cisg
ICAgVmFyS2luZCBtX2tpbmQ7CisgICAgdW5zaWduZWQgbV9vZmZzZXQ7Cit9OworCit9IC8vIG5h
bWVzcGFjZSBKU0MKKworbmFtZXNwYWNlIFdURiB7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmlu
dFN0cmVhbSYsIEpTQzo6VmFyS2luZCk7CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYg
Ly8gVmFyT2Zmc2V0X2gKKwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>247650</attachid>
            <date>2015-03-01 18:38:58 -0800</date>
            <delta_ts>2015-03-01 20:35:50 -0800</delta_ts>
            <desc>let the carnage begin!</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>263547</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2Vt
Ymxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJz
dHJhY3RNYWNyb0Fzc2VtYmxlci5oCShyZXZpc2lvbiAxODA4NzUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMjA1LDYgKzIwNSwxMSBAQCBwdWJsaWM6CiAgICAgICAgIFJlZ2lzdGVySUQgaW5kZXg7
CiAgICAgICAgIFNjYWxlIHNjYWxlOwogICAgICAgICBpbnQzMl90IG9mZnNldDsKKyAgICAgICAg
CisgICAgICAgIEJhc2VJbmRleCB3aXRoT2Zmc2V0KGludDMyX3QgYWRkaXRpb25hbE9mZnNldCkK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEJhc2VJbmRleChiYXNlLCBpbmRleCwgc2Nh
bGUsIG9mZnNldCArIGFkZGl0aW9uYWxPZmZzZXQpOworICAgICAgICB9CiAgICAgfTsKIAogICAg
IC8vIEFic29sdXRlQWRkcmVzczoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9CeVZhbEluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQnlWYWxJbmZvLmgJKHJldmlzaW9uIDE4MDg3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9CeVZhbEluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDEsNiArNDEsOCBAQCBlbnVt
IEpJVEFycmF5TW9kZSB7CiAgICAgSklURG91YmxlLAogICAgIEpJVENvbnRpZ3VvdXMsCiAgICAg
SklUQXJyYXlTdG9yYWdlLAorICAgIEpJVERpcmVjdEFyZ3VtZW50cywKKyAgICBKSVRTY29wZWRB
cmd1bWVudHMsCiAgICAgSklUSW50OEFycmF5LAogICAgIEpJVEludDE2QXJyYXksCiAgICAgSklU
SW50MzJBcnJheSwKQEAgLTY1LDYgKzY3LDE3IEBAIGlubGluZSBib29sIGlzT3B0aW1pemFibGVJ
bmRleGluZ1R5cGUoSW4KICAgICB9CiB9CiAKK2lubGluZSBib29sIGhhc09wdGltaXphYmxlSW5k
ZXhpbmdGb3JKU1R5cGUoSlNUeXBlIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAg
Y2FzZSBEaXJlY3RBcmd1bWVudHNUeXBlOgorICAgIGNhc2UgU2NvcGVkQXJndW1lbnRzVHlwZToK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KK30KKwogaW5saW5lIGJvb2wgaGFzT3B0aW1pemFibGVJbmRleGluZ0ZvckNsYXNz
SW5mbyhjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbykKIHsKICAgICByZXR1cm4gaXNUeXBlZFZp
ZXcoY2xhc3NJbmZvLT50eXBlZEFycmF5U3RvcmFnZVR5cGUpOwpAQCAtNzMsNiArODYsNyBAQCBp
bmxpbmUgYm9vbCBoYXNPcHRpbWl6YWJsZUluZGV4aW5nRm9yQ2xhCiBpbmxpbmUgYm9vbCBoYXNP
cHRpbWl6YWJsZUluZGV4aW5nKFN0cnVjdHVyZSogc3RydWN0dXJlKQogewogICAgIHJldHVybiBp
c09wdGltaXphYmxlSW5kZXhpbmdUeXBlKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpCisgICAg
ICAgIHx8IGhhc09wdGltaXphYmxlSW5kZXhpbmdGb3JKU1R5cGUoc3RydWN0dXJlLT50eXBlSW5m
bygpLnR5cGUoKSkKICAgICAgICAgfHwgaGFzT3B0aW1pemFibGVJbmRleGluZ0ZvckNsYXNzSW5m
byhzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpKTsKIH0KIApAQCAtOTMsNiArMTA3LDE5IEBAIGlubGlu
ZSBKSVRBcnJheU1vZGUgaml0QXJyYXlNb2RlRm9ySW5kZXgKICAgICB9CiB9CiAKK2lubGluZSBK
SVRBcnJheU1vZGUgaml0QXJyYXlNb2RlRm9ySlNUeXBlKEpTVHlwZSB0eXBlKQoreworICAgIHN3
aXRjaCAodHlwZSkgeworICAgIGNhc2UgRGlyZWN0QXJndW1lbnRzVHlwZToKKyAgICAgICAgcmV0
dXJuIEpJVERpcmVjdEFyZ3VtZW50czsKKyAgICBjYXNlIFNjb3BlZEFyZ3VtZW50c1R5cGU6Cisg
ICAgICAgIHJldHVybiBKSVRTY29wZWRBcmd1bWVudHM7CisgICAgZGVmYXVsdDoKKyAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIEpJVENvbnRpZ3Vv
dXM7CisgICAgfQorfQorCiBpbmxpbmUgSklUQXJyYXlNb2RlIGppdEFycmF5TW9kZUZvckNsYXNz
SW5mbyhjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbykKIHsKICAgICBzd2l0Y2ggKGNsYXNzSW5m
by0+dHlwZWRBcnJheVN0b3JhZ2VUeXBlKSB7CkBAIC0xMjAsNiArMTQ3LDE5IEBAIGlubGluZSBK
SVRBcnJheU1vZGUgaml0QXJyYXlNb2RlRm9yQ2xhc3MKICAgICB9CiB9CiAKK2lubGluZSBib29s
IGppdEFycmF5TW9kZVBlcm1pdHNQdXQoSklUQXJyYXlNb2RlIG1vZGUpCit7CisgICAgc3dpdGNo
IChtb2RlKSB7CisgICAgY2FzZSBKSVREaXJlY3RBcmd1bWVudHM6CisgICAgY2FzZSBKSVRTY29w
ZWRBcmd1bWVudHM6CisgICAgICAgIC8vIFdlIGNvdWxkIHN1cHBvcnQgcHV0X2J5X3ZhbCBvbiB0
aGVzZSBhdCBzb21lIHBvaW50LCBidXQgaXQncyBqdXN0IG5vdCB0aGF0IHByb2ZpdGFibGUKKyAg
ICAgICAgLy8gYXQgdGhlIG1vbWVudC4KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGRlZmF1
bHQ6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KK30KKwogaW5saW5lIFR5cGVkQXJyYXlU
eXBlIHR5cGVkQXJyYXlUeXBlRm9ySklUQXJyYXlNb2RlKEpJVEFycmF5TW9kZSBtb2RlKQogewog
ICAgIHN3aXRjaCAobW9kZSkgewpAQCAtMTUyLDYgKzE5Miw5IEBAIGlubGluZSBKSVRBcnJheU1v
ZGUgaml0QXJyYXlNb2RlRm9yU3RydWMKICAgICBpZiAoaXNPcHRpbWl6YWJsZUluZGV4aW5nVHlw
ZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSkKICAgICAgICAgcmV0dXJuIGppdEFycmF5TW9k
ZUZvckluZGV4aW5nVHlwZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKTsKICAgICAKKyAgICBp
ZiAoaGFzT3B0aW1pemFibGVJbmRleGluZ0ZvckpTVHlwZShzdHJ1Y3R1cmUtPnR5cGVJbmZvKCku
dHlwZSgpKSkKKyAgICAgICAgcmV0dXJuIGppdEFycmF5TW9kZUZvckpTVHlwZShzdHJ1Y3R1cmUt
PnR5cGVJbmZvKCkudHlwZSgpKTsKKyAgICAKICAgICBBU1NFUlQoaGFzT3B0aW1pemFibGVJbmRl
eGluZ0ZvckNsYXNzSW5mbyhzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpKSk7CiAgICAgcmV0dXJuIGpp
dEFycmF5TW9kZUZvckNsYXNzSW5mbyhzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpKTsKIH0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QuanNvbgo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0Lmpzb24J
KHJldmlzaW9uIDE4MDg3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRl
Y29kZUxpc3QuanNvbgkod29ya2luZyBjb3B5KQpAQCAtOCw3ICs4LDkgQEAKICAgICAgICAgICAg
IHsgIm5hbWUiIDogIm9wX2dldF9zY29wZSIsICJsZW5ndGgiIDogMiB9LAogICAgICAgICAgICAg
eyAibmFtZSIgOiAib3BfdG91Y2hfZW50cnkiLCAibGVuZ3RoIiA6IDEgfSwKICAgICAgICAgICAg
IHsgIm5hbWUiIDogIm9wX2luaXRfbGF6eV9yZWciLCAibGVuZ3RoIiA6IDIgfSwKLSAgICAgICAg
ICAgIHsgIm5hbWUiIDogIm9wX2NyZWF0ZV9hcmd1bWVudHMiLCAibGVuZ3RoIiA6IDMgfSwKKyAg
ICAgICAgICAgIHsgIm5hbWUiIDogIm9wX2NyZWF0ZV9kaXJlY3RfYXJndW1lbnRzIiwgImxlbmd0
aCIgOiAyIH0sIC8vIGp1c3QgdGFrZXMgdGhlIGRzdCByZWdpc3RlcgorICAgICAgICAgICAgeyAi
bmFtZSIgOiAib3BfY3JlYXRlX3Njb3BlZF9hcmd1bWVudHMiLCAibGVuZ3RoIiA6IDMgfSwgLy8g
ZHN0LCBzY29wZVJlZ2lzdGVyLCBpbXBsaWNpdGx5IHVzZXMgdGhlIFNjb3BlZEFyZ3VtZW50c1Rh
YmxlIGluIHRoZSBTeW1ib2xUYWJsZSBvZiB0aGUgQ29kZUJsb2NrCisgICAgICAgICAgICB7ICJu
YW1lIiA6ICJvcF9jcmVhdGVfb3V0X29mX2JhbmRfYXJndW1lbnRzIiwgImxlbmd0aCIgOiAyIH0s
CiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9jcmVhdGVfdGhpcyIsICJsZW5ndGgiIDogNCB9
LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfZ2V0X2NhbGxlZSIsICJsZW5ndGgiIDogMyB9
LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfdG9fdGhpcyIsICJsZW5ndGgiIDogNCB9LApA
QCAtNjEsNyArNjMsNiBAQAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfZ2V0X2J5X2lkIiwg
Imxlbmd0aCIgOiA5ICB9LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfZ2V0X2J5X2lkX291
dF9vZl9saW5lIiwgImxlbmd0aCIgOiA5ICB9LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3Bf
Z2V0X2FycmF5X2xlbmd0aCIsICJsZW5ndGgiIDogOSB9LAotICAgICAgICAgICAgeyAibmFtZSIg
OiAib3BfZ2V0X2FyZ3VtZW50c19sZW5ndGgiLCAibGVuZ3RoIiA6IDQgfSwKICAgICAgICAgICAg
IHsgIm5hbWUiIDogIm9wX3B1dF9ieV9pZCIsICJsZW5ndGgiIDogOSB9LAogICAgICAgICAgICAg
eyAibmFtZSIgOiAib3BfcHV0X2J5X2lkX291dF9vZl9saW5lIiwgImxlbmd0aCIgOiA5IH0sCiAg
ICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9wdXRfYnlfaWRfdHJhbnNpdGlvbl9kaXJlY3QiLCAi
bGVuZ3RoIiA6IDkgfSwKQEAgLTcwLDcgKzcxLDYgQEAKICAgICAgICAgICAgIHsgIm5hbWUiIDog
Im9wX3B1dF9ieV9pZF90cmFuc2l0aW9uX25vcm1hbF9vdXRfb2ZfbGluZSIsICJsZW5ndGgiIDog
OSB9LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfZGVsX2J5X2lkIiwgImxlbmd0aCIgOiA0
IH0sCiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9nZXRfYnlfdmFsIiwgImxlbmd0aCIgOiA2
IH0sCi0gICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9nZXRfYXJndW1lbnRfYnlfdmFsIiwgImxl
bmd0aCIgOiA3IH0sCiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9wdXRfYnlfdmFsIiwgImxl
bmd0aCIgOiA1IH0sCiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9wdXRfYnlfdmFsX2RpcmVj
dCIsICJsZW5ndGgiIDogNSB9LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfZGVsX2J5X3Zh
bCIsICJsZW5ndGgiIDogNCB9LApAQCAtOTQsMTIgKzk0LDExIEBACiAgICAgICAgICAgICB7ICJu
YW1lIiA6ICJvcF9zd2l0Y2hfaW1tIiwgImxlbmd0aCIgOiA0IH0sCiAgICAgICAgICAgICB7ICJu
YW1lIiA6ICJvcF9zd2l0Y2hfY2hhciIsICJsZW5ndGgiIDogNCB9LAogICAgICAgICAgICAgeyAi
bmFtZSIgOiAib3Bfc3dpdGNoX3N0cmluZyIsICJsZW5ndGgiIDogNCB9LAotICAgICAgICAgICAg
eyAibmFtZSIgOiAib3BfbmV3X2Z1bmMiLCAibGVuZ3RoIiA6IDUgfSwKKyAgICAgICAgICAgIHsg
Im5hbWUiIDogIm9wX25ld19mdW5jIiwgImxlbmd0aCIgOiA0IH0sCiAgICAgICAgICAgICB7ICJu
YW1lIiA6ICJvcF9uZXdfZnVuY19leHAiLCAibGVuZ3RoIiA6IDQgfSwKICAgICAgICAgICAgIHsg
Im5hbWUiIDogIm9wX2NhbGwiLCAibGVuZ3RoIiA6IDkgfSwKICAgICAgICAgICAgIHsgIm5hbWUi
IDogIm9wX2NhbGxfZXZhbCIsICJsZW5ndGgiIDogOSB9LAogICAgICAgICAgICAgeyAibmFtZSIg
OiAib3BfY2FsbF92YXJhcmdzIiwgImxlbmd0aCIgOiA5IH0sCi0gICAgICAgICAgICB7ICJuYW1l
IiA6ICJvcF90ZWFyX29mZl9hcmd1bWVudHMiLCAibGVuZ3RoIiA6IDMgfSwKICAgICAgICAgICAg
IHsgIm5hbWUiIDogIm9wX3JldCIsICJsZW5ndGgiIDogMiB9LAogICAgICAgICAgICAgeyAibmFt
ZSIgOiAib3BfY29uc3RydWN0IiwgImxlbmd0aCIgOiA5IH0sCiAgICAgICAgICAgICB7ICJuYW1l
IiA6ICJvcF9jb25zdHJ1Y3RfdmFyYXJncyIsICJsZW5ndGgiIDogOSB9LApAQCAtMTA4LDYgKzEw
Nyw4IEBACiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9yZXNvbHZlX3Njb3BlIiwgImxlbmd0
aCIgOiA3IH0sCiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9nZXRfZnJvbV9zY29wZSIsICJs
ZW5ndGgiIDogOCB9LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfcHV0X3RvX3Njb3BlIiwg
Imxlbmd0aCIgOiA3IH0sCisgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9nZXRfZnJvbV9hcmd1
bWVudHMiLCAibGVuZ3RoIiA6IDUgfSwgLy8gZHN0LCBhcmd1bWVudHMsIGluZGV4LCBwcm9maWxl
CisgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9wdXRfdG9fYXJndW1lbnRzIiwgImxlbmd0aCIg
OiA0IH0sIC8vIGFyZ3VtZW50cywgaW5kZXgsIHNyYwogICAgICAgICAgICAgeyAibmFtZSIgOiAi
b3BfcHVzaF93aXRoX3Njb3BlIiwgImxlbmd0aCIgOiAzIH0sCiAgICAgICAgICAgICB7ICJuYW1l
IiA6ICJvcF9wb3Bfc2NvcGUiLCAibGVuZ3RoIiA6IDIgfSwKICAgICAgICAgICAgIHsgIm5hbWUi
IDogIm9wX3B1c2hfbmFtZV9zY29wZSIsICJsZW5ndGgiIDogNSB9LApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDE4MDg3NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01NjksMTcgKzU2OSw2IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wQnl0ZWNvZGUo
UHJpbnRTdHJlYW0KICAgICAgICAgc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4oaW5zdHJ1Y3Rp
b25zKCkuc2l6ZSgpKSwKICAgICAgICAgc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4oaW5zdHJ1
Y3Rpb25zKCkuc2l6ZSgpICogc2l6ZW9mKEluc3RydWN0aW9uKSksCiAgICAgICAgIG1fbnVtUGFy
YW1ldGVycywgbV9udW1DYWxsZWVSZWdpc3RlcnMsIG1fbnVtVmFycyk7Ci0gICAgaWYgKHN5bWJv
bFRhYmxlKCkgJiYgc3ltYm9sVGFibGUoKS0+Y2FwdHVyZUNvdW50KCkpIHsKLSAgICAgICAgb3V0
LnByaW50ZigKLSAgICAgICAgICAgICI7ICVkIGNhcHR1cmVkIHZhcihzKSAoZnJvbSByJWQgdG8g
ciVkLCBpbmNsdXNpdmUpIiwKLSAgICAgICAgICAgIHN5bWJvbFRhYmxlKCktPmNhcHR1cmVDb3Vu
dCgpLCBzeW1ib2xUYWJsZSgpLT5jYXB0dXJlU3RhcnQoKSwgc3ltYm9sVGFibGUoKS0+Y2FwdHVy
ZUVuZCgpICsgMSk7Ci0gICAgfQotICAgIGlmICh1c2VzQXJndW1lbnRzKCkpIHsKLSAgICAgICAg
b3V0LnByaW50ZigKLSAgICAgICAgICAgICI7IHVzZXMgYXJndW1lbnRzLCBpbiByJWQsIHIlZCIs
Ci0gICAgICAgICAgICBhcmd1bWVudHNSZWdpc3RlcigpLm9mZnNldCgpLAotICAgICAgICAgICAg
dW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVyKGFyZ3VtZW50c1JlZ2lzdGVyKCkpLm9mZnNldCgp
KTsKLSAgICB9CiAgICAgaWYgKG5lZWRzQWN0aXZhdGlvbigpICYmIGNvZGVUeXBlKCkgPT0gRnVu
Y3Rpb25Db2RlKQogICAgICAgICBvdXQucHJpbnRmKCI7IGxleGljYWwgZW52aXJvbm1lbnQgaW4g
ciVkIiwgYWN0aXZhdGlvblJlZ2lzdGVyKCkub2Zmc2V0KCkpOwogICAgIG91dC5wcmludGYoIlxu
Iik7CkBAIC0xNjQxLDcgKzE2MzAsNiBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhDb3B5UGFyc2Vk
QmxvY2tUYWcsCiAgICAgLCBtX2luc3RydWN0aW9ucyhvdGhlci5tX2luc3RydWN0aW9ucykKICAg
ICAsIG1fdGhpc1JlZ2lzdGVyKG90aGVyLm1fdGhpc1JlZ2lzdGVyKQogICAgICwgbV9zY29wZVJl
Z2lzdGVyKG90aGVyLm1fc2NvcGVSZWdpc3RlcikKLSAgICAsIG1fYXJndW1lbnRzUmVnaXN0ZXIo
b3RoZXIubV9hcmd1bWVudHNSZWdpc3RlcikKICAgICAsIG1fbGV4aWNhbEVudmlyb25tZW50UmVn
aXN0ZXIob3RoZXIubV9sZXhpY2FsRW52aXJvbm1lbnRSZWdpc3RlcikKICAgICAsIG1faXNTdHJp
Y3RNb2RlKG90aGVyLm1faXNTdHJpY3RNb2RlKQogICAgICwgbV9uZWVkc0FjdGl2YXRpb24ob3Ro
ZXIubV9uZWVkc0FjdGl2YXRpb24pCkBAIC0xNzAzLDcgKzE2OTEsNiBAQCBDb2RlQmxvY2s6OkNv
ZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBvCiAgICAgLCBtX3ZtKHVubGlua2VkQ29kZUJsb2Nr
LT52bSgpKQogICAgICwgbV90aGlzUmVnaXN0ZXIodW5saW5rZWRDb2RlQmxvY2stPnRoaXNSZWdp
c3RlcigpKQogICAgICwgbV9zY29wZVJlZ2lzdGVyKHVubGlua2VkQ29kZUJsb2NrLT5zY29wZVJl
Z2lzdGVyKCkpCi0gICAgLCBtX2FyZ3VtZW50c1JlZ2lzdGVyKHVubGlua2VkQ29kZUJsb2NrLT5h
cmd1bWVudHNSZWdpc3RlcigpKQogICAgICwgbV9sZXhpY2FsRW52aXJvbm1lbnRSZWdpc3Rlcih1
bmxpbmtlZENvZGVCbG9jay0+YWN0aXZhdGlvblJlZ2lzdGVyKCkpCiAgICAgLCBtX2lzU3RyaWN0
TW9kZSh1bmxpbmtlZENvZGVCbG9jay0+aXNTdHJpY3RNb2RlKCkpCiAgICAgLCBtX25lZWRzQWN0
aXZhdGlvbih1bmxpbmtlZENvZGVCbG9jay0+aGFzQWN0aXZhdGlvblJlZ2lzdGVyKCkgJiYgdW5s
aW5rZWRDb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlKQpAQCAtMTczMSw4ICsx
NzE4LDggQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soU2NyaXB0RXhlY3V0YWJsZSogbwogICAgICAg
ICAgICAgc3ltYm9sVGFibGUtPnByZXBhcmVGb3JUeXBlUHJvZmlsaW5nKGxvY2tlcik7CiAgICAg
ICAgIH0KIAotICAgICAgICBpZiAoY29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUgJiYgc3ltYm9s
VGFibGUtPmNhcHR1cmVDb3VudCgpKSB7Ci0gICAgICAgICAgICBtX3N5bWJvbFRhYmxlLnNldCgq
bV92bSwgbV9vd25lckV4ZWN1dGFibGUuZ2V0KCksIHN5bWJvbFRhYmxlLT5jbG9uZUNhcHR1cmVk
TmFtZXMoKm1fdm0pKTsKKyAgICAgICAgaWYgKGNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlICYm
IHN5bWJvbFRhYmxlLT5zY29wZVNpemUpKSB7CisgICAgICAgICAgICBtX3N5bWJvbFRhYmxlLnNl
dCgqbV92bSwgbV9vd25lckV4ZWN1dGFibGUuZ2V0KCksIHN5bWJvbFRhYmxlLT5jbG9uZVNjb3Bl
UGFydCgqbV92bSkpOwogICAgICAgICAgICAgZGlkQ2xvbmVTeW1ib2xUYWJsZSA9IHRydWU7CiAg
ICAgICAgIH0gZWxzZQogICAgICAgICAgICAgbV9zeW1ib2xUYWJsZS5zZXQoKm1fdm0sIG1fb3du
ZXJFeGVjdXRhYmxlLmdldCgpLCBzeW1ib2xUYWJsZSk7CkBAIC0xOTczLDEzICsxOTYwLDE0IEBA
IENvZGVCbG9jazo6Q29kZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUqIG8KIAogICAgICAgICAgICAg
Ly8gZ2V0X2Zyb21fc2NvcGUgZHN0LCBzY29wZSwgaWQsIFJlc29sdmVNb2RlQW5kVHlwZSwgU3Ry
dWN0dXJlLCBPcGVyYW5kCiAKLSAgICAgICAgICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0g
aWRlbnRpZmllcihwY1szXS51Lm9wZXJhbmQpOwogICAgICAgICAgICAgUmVzb2x2ZU1vZGVBbmRU
eXBlIG1vZGVBbmRUeXBlID0gUmVzb2x2ZU1vZGVBbmRUeXBlKHBjWzRdLnUub3BlcmFuZCk7CiAg
ICAgICAgICAgICBpZiAobW9kZUFuZFR5cGUudHlwZSgpID09IExvY2FsQ2xvc3VyZVZhcikgewog
ICAgICAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgNF0gPSBSZXNvbHZlTW9kZUFuZFR5cGUo
bW9kZUFuZFR5cGUubW9kZSgpLCBDbG9zdXJlVmFyKS5vcGVyYW5kKCk7CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAKKyAgICAgICAgICAgIGNvbnN0IElkZW50aWZpZXIm
IGlkZW50ID0gaWRlbnRpZmllcihwY1szXS51Lm9wZXJhbmQpOworCiAgICAgICAgICAgICBSZXNv
bHZlT3Agb3AgPSBKU1Njb3BlOjphYnN0cmFjdFJlc29sdmUobV9nbG9iYWxPYmplY3QtPmdsb2Jh
bEV4ZWMoKSwgbmVlZHNBY3RpdmF0aW9uKCksIHNjb3BlLCBpZGVudCwgR2V0LCBtb2RlQW5kVHlw
ZS50eXBlKCkpOwogCiAgICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIDRdLnUub3BlcmFuZCA9
IFJlc29sdmVNb2RlQW5kVHlwZShtb2RlQW5kVHlwZS5tb2RlKCksIG9wLnR5cGUpLm9wZXJhbmQo
KTsKQEAgLTE5OTQsMTggKzE5ODIsMTMgQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soU2NyaXB0RXhl
Y3V0YWJsZSogbwogCiAgICAgICAgIGNhc2Ugb3BfcHV0X3RvX3Njb3BlOiB7CiAgICAgICAgICAg
ICAvLyBwdXRfdG9fc2NvcGUgc2NvcGUsIGlkLCB2YWx1ZSwgUmVzb2x2ZU1vZGVBbmRUeXBlLCBT
dHJ1Y3R1cmUsIE9wZXJhbmQKLSAgICAgICAgICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0g
aWRlbnRpZmllcihwY1syXS51Lm9wZXJhbmQpOwotCiAgICAgICAgICAgICBSZXNvbHZlTW9kZUFu
ZFR5cGUgbW9kZUFuZFR5cGUgPSBSZXNvbHZlTW9kZUFuZFR5cGUocGNbNF0udS5vcGVyYW5kKTsK
ICAgICAgICAgICAgIGlmIChtb2RlQW5kVHlwZS50eXBlKCkgPT0gTG9jYWxDbG9zdXJlVmFyKSB7
Ci0gICAgICAgICAgICAgICAgYm9vbCBpc1dhdGNoYWJsZVZhcmlhYmxlID0gcGNbNV0udS5vcGVy
YW5kOwotICAgICAgICAgICAgICAgIGlmICghaXNXYXRjaGFibGVWYXJpYWJsZSkgewotICAgICAg
ICAgICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIDVdLnUud2F0Y2hwb2ludFNldCA9IG51bGxw
dHI7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICBTdHJpbmdJbXBsKiB1aWQgPSBpZGVudC5pbXBsKCk7Ci0gICAgICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoZGlkQ2xvbmVTeW1ib2xUYWJsZSk7Ci0gICAgICAgICAgICAgICAg
aWYgKGlkZW50ICE9IG1fdm0tPnByb3BlcnR5TmFtZXMtPmFyZ3VtZW50cykgeworICAgICAgICAg
ICAgICAgIC8vIE9ubHkgZG8gd2F0Y2hpbmcgaWYgdGhlIHByb3BlcnR5IHdlJ3JlIHB1dHRpbmcg
dG8gaXMgbm90IGFub255bW91cy4KKyAgICAgICAgICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KHBjWzJdLnUub3BlcmFuZCkgIT0gVUlOVF9NQVgpIHsKKyAgICAgICAgICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoZGlkQ2xvbmVTeW1ib2xUYWJsZSk7CisgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gaWRlbnRpZmllcihwY1syXS51Lm9wZXJhbmQp
OworICAgICAgICAgICAgICAgICAgICBTdHJpbmdJbXBsKiB1aWQgPSBpZGVudC5pbXBsKCk7CiAg
ICAgICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fc3ltYm9sVGFi
bGUtPm1fbG9jayk7CiAgICAgICAgICAgICAgICAgICAgIFN5bWJvbFRhYmxlOjpNYXA6Oml0ZXJh
dG9yIGl0ZXIgPSBtX3N5bWJvbFRhYmxlLT5maW5kKGxvY2tlciwgdWlkKTsKICAgICAgICAgICAg
ICAgICAgICAgQVNTRVJUKGl0ZXIgIT0gbV9zeW1ib2xUYWJsZS0+ZW5kKGxvY2tlcikpOwpAQCAt
MjAxNiw2ICsxOTk5LDggQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soU2NyaXB0RXhlY3V0YWJsZSog
bwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogCisgICAgICAgICAgICBj
b25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGlkZW50aWZpZXIocGNbMl0udS5vcGVyYW5kKTsKKwog
ICAgICAgICAgICAgUmVzb2x2ZU9wIG9wID0gSlNTY29wZTo6YWJzdHJhY3RSZXNvbHZlKG1fZ2xv
YmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIG5lZWRzQWN0aXZhdGlvbigpLCBzY29wZSwgaWRlbnQs
IFB1dCwgbW9kZUFuZFR5cGUudHlwZSgpKTsKIAogICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kg
KyA0XS51Lm9wZXJhbmQgPSBSZXNvbHZlTW9kZUFuZFR5cGUobW9kZUFuZFR5cGUubW9kZSgpLCBv
cC50eXBlKS5vcGVyYW5kKCk7CkBAIC0yODYzLDYzICsyODQ4LDYgQEAgYm9vbCBDb2RlQmxvY2s6
Omhhc09wdGltaXplZFJlcGxhY2VtZW50KAogfQogI2VuZGlmCiAKLWJvb2wgQ29kZUJsb2NrOjpp
c0NhcHR1cmVkKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBJbmxpbmVDYWxsRnJhbWUqIGlubGlu
ZUNhbGxGcmFtZSkgY29uc3QKLXsKLSAgICBpZiAob3BlcmFuZC5pc0FyZ3VtZW50KCkpCi0gICAg
ICAgIHJldHVybiBvcGVyYW5kLnRvQXJndW1lbnQoKSAmJiB1c2VzQXJndW1lbnRzKCk7Ci0KLSAg
ICBpZiAoaW5saW5lQ2FsbEZyYW1lKQotICAgICAgICByZXR1cm4gaW5saW5lQ2FsbEZyYW1lLT5j
YXB0dXJlZFZhcnMuZ2V0KG9wZXJhbmQudG9Mb2NhbCgpKTsKLQotICAgIC8vIFRoZSBsZXhpY2Fs
IGVudmlyb25tZW50IG9iamVjdCBpc24ndCBpbiB0aGUgY2FwdHVyZWQgcmVnaW9uLCBidXQgaXQn
cyAiY2FwdHVyZWQiCi0gICAgLy8gaW4gdGhlIHNlbnNlIHRoYXQgc3RvcmVzIHRvIGl0cyBsb2Nh
dGlvbiBjYW4gYmUgb2JzZXJ2ZWQgaW5kaXJlY3RseS4KLSAgICBpZiAobmVlZHNBY3RpdmF0aW9u
KCkgJiYgb3BlcmFuZCA9PSBhY3RpdmF0aW9uUmVnaXN0ZXIoKSkKLSAgICAgICAgcmV0dXJuIHRy
dWU7Ci0KLSAgICAvLyBEaXR0byBmb3IgdGhlIGFyZ3VtZW50cyBvYmplY3QuCi0gICAgaWYgKHVz
ZXNBcmd1bWVudHMoKSAmJiBvcGVyYW5kID09IGFyZ3VtZW50c1JlZ2lzdGVyKCkpCi0gICAgICAg
IHJldHVybiB0cnVlOwotICAgIGlmICh1c2VzQXJndW1lbnRzKCkgJiYgb3BlcmFuZCA9PSB1bm1v
ZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIoYXJndW1lbnRzUmVnaXN0ZXIoKSkpCi0gICAgICAgIHJl
dHVybiB0cnVlOwotCi0gICAgLy8gV2UncmUgaW4gZ2xvYmFsIGNvZGUgc28gdGhlcmUgYXJlIG5v
IGxvY2FscyB0byBjYXB0dXJlCi0gICAgaWYgKCFzeW1ib2xUYWJsZSgpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gc3ltYm9sVGFibGUoKS0+aXNDYXB0dXJlZChvcGVyYW5k
Lm9mZnNldCgpKTsKLX0KLQotaW50IENvZGVCbG9jazo6ZnJhbWVQb2ludGVyT2Zmc2V0VG9HZXRB
Y3RpdmF0aW9uUmVnaXN0ZXJzKGludCBtYWNoaW5lQ2FwdHVyZVN0YXJ0KQotewotICAgIC8vIFdl
J2xsIGJlIGFkZGluZyB0aGlzIHRvIHRoZSBzdGFjayBwb2ludGVyIHRvIGdldCBhIHJlZ2lzdGVy
cyBwb2ludGVyIHRoYXQgbG9va3MKLSAgICAvLyBsaWtlIGl0IHdvdWxkIGhhdmUgbG9va2VkIGlu
IHRoZSBiYXNlbGluZSBlbmdpbmUuIEZvciBleGFtcGxlLCBpZiBieXRlY29kZSB3b3VsZAotICAg
IC8vIGhhdmUgcHV0IHRoZSBmaXJzdCBjYXB0dXJlZCB2YXJpYWJsZSBhdCBvZmZzZXQgLTUgYnV0
IHdlIHB1dCBpdCBhdCBvZmZzZXQgLTEsIHRoZW4KLSAgICAvLyB3ZSdsbCBoYXZlIGFuIG9mZnNl
dCBvZiA0LgotICAgIGludDMyX3Qgb2Zmc2V0ID0gMDsKLSAgICAKLSAgICAvLyBDb21wdXRlIHdo
ZXJlIHdlIHB1dCB0aGUgY2FwdHVyZWQgdmFyaWFibGVzLiBUaGlzIG9mZnNldCB3aWxsIHBvaW50
IHRoZSByZWdpc3RlcnMKLSAgICAvLyBwb2ludGVyIGRpcmVjdGx5IGF0IHRoZSBmaXJzdCBjYXB0
dXJlZCB2YXIuCi0gICAgb2Zmc2V0ICs9IG1hY2hpbmVDYXB0dXJlU3RhcnQ7Ci0gICAgCi0gICAg
Ly8gTm93IGNvbXB1dGUgdGhlIG9mZnNldCBuZWVkZWQgdG8gbWFrZSB0aGUgcnVudGltZSBzZWUg
dGhlIGNhcHR1cmVkIHZhcmlhYmxlcyBhdCB0aGUKLSAgICAvLyBzYW1lIG9mZnNldCB0aGF0IHRo
ZSBieXRlY29kZSB3b3VsZCBoYXZlIHVzZWQuCi0gICAgb2Zmc2V0IC09IHN5bWJvbFRhYmxlKCkt
PmNhcHR1cmVTdGFydCgpOwotICAgIAotICAgIHJldHVybiBvZmZzZXQ7Ci19Ci0KLWludCBDb2Rl
QmxvY2s6OmZyYW1lUG9pbnRlck9mZnNldFRvR2V0QWN0aXZhdGlvblJlZ2lzdGVycygpCi17Ci0g
ICAgaWYgKCFKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkKLSAgICAgICAgcmV0
dXJuIDA7Ci0jaWYgRU5BQkxFKERGR19KSVQpCi0gICAgcmV0dXJuIGZyYW1lUG9pbnRlck9mZnNl
dFRvR2V0QWN0aXZhdGlvblJlZ2lzdGVycyhqaXRDb2RlKCktPmRmZ0NvbW1vbigpLT5tYWNoaW5l
Q2FwdHVyZVN0YXJ0KTsKLSNlbHNlCi0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LSAgICByZXR1cm4gMDsKLSNlbmRpZgotfQotCiBIYW5kbGVySW5mbyogQ29kZUJsb2NrOjpoYW5k
bGVyRm9yQnl0ZWNvZGVPZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpCiB7CiAgICAgUkVM
RUFTRV9BU1NFUlQoYnl0ZWNvZGVPZmZzZXQgPCBpbnN0cnVjdGlvbnMoKS5zaXplKCkpOwpAQCAt
MzA5OCwxOCArMzAyNiw2IEBAIFBhc3NSZWZQdHI8Q29kZUJsb2NrPiBDb2RlQmxvY2s6Om5ld1Jl
cGwKICAgICByZXR1cm4gb3duZXJFeGVjdXRhYmxlKCktPm5ld1JlcGxhY2VtZW50Q29kZUJsb2Nr
Rm9yKHNwZWNpYWxpemF0aW9uS2luZCgpKTsKIH0KIAotY29uc3QgU2xvd0FyZ3VtZW50KiBDb2Rl
QmxvY2s6Om1hY2hpbmVTbG93QXJndW1lbnRzKCkKLXsKLSAgICBpZiAoIUpJVENvZGU6OmlzT3B0
aW1pemluZ0pJVChqaXRUeXBlKCkpKQotICAgICAgICByZXR1cm4gc3ltYm9sVGFibGUoKS0+c2xv
d0FyZ3VtZW50cygpOwotICAgIAotI2lmIEVOQUJMRShERkdfSklUKQotICAgIHJldHVybiBqaXRD
b2RlKCktPmRmZ0NvbW1vbigpLT5zbG93QXJndW1lbnRzLmdldCgpOwotI2Vsc2UgLy8gRU5BQkxF
KERGR19KSVQpCi0gICAgcmV0dXJuIDA7Ci0jZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCi19Ci0K
ICNpZiBFTkFCTEUoSklUKQogQ29kZUJsb2NrKiBQcm9ncmFtQ29kZUJsb2NrOjpyZXBsYWNlbWVu
dCgpCiB7CkBAIC0zOTAyLDYzICszODE4LDEyIEBAIFN0cmluZyBDb2RlQmxvY2s6Om5hbWVGb3JS
ZWdpc3RlcihWaXJ0dWEKICAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgibGV4aWNhbCBlbnZp
cm9ubWVudCIpOwogICAgIGlmICh2aXJ0dWFsUmVnaXN0ZXIgPT0gdGhpc1JlZ2lzdGVyKCkpCiAg
ICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoInRoaXMiKTsKLSAgICBpZiAodXNlc0FyZ3VtZW50
cygpKSB7Ci0gICAgICAgIGlmICh2aXJ0dWFsUmVnaXN0ZXIgPT0gYXJndW1lbnRzUmVnaXN0ZXIo
KSkKLSAgICAgICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoImFyZ3VtZW50cyIpOwotICAgICAg
ICBpZiAodW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVyKGFyZ3VtZW50c1JlZ2lzdGVyKCkpID09
IHZpcnR1YWxSZWdpc3RlcikKLSAgICAgICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoInJlYWwg
YXJndW1lbnRzIik7Ci0gICAgfQogICAgIGlmICh2aXJ0dWFsUmVnaXN0ZXIuaXNBcmd1bWVudCgp
KQogICAgICAgICByZXR1cm4gU3RyaW5nOjpmb3JtYXQoImFyZ3VtZW50c1slM2RdIiwgdmlydHVh
bFJlZ2lzdGVyLnRvQXJndW1lbnQoKSk7CiAKICAgICByZXR1cm4gIiI7CiB9CiAKLW5hbWVzcGFj
ZSB7Ci0KLXN0cnVjdCBWZXJpZnlDYXB0dXJlZERlZiB7Ci0gICAgdm9pZCBvcGVyYXRvcigpKENv
ZGVCbG9jayogY29kZUJsb2NrLCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIE9wY29kZUlEIG9w
Y29kZUlELCBpbnQgb3BlcmFuZCkKLSAgICB7Ci0gICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zm
c2V0ID0gaW5zdHJ1Y3Rpb24gLSBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmJlZ2luKCk7Ci0g
ICAgICAgIAotICAgICAgICBpZiAoY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChv
cGVyYW5kKSkgewotICAgICAgICAgICAgY29kZUJsb2NrLT5iZWdpblZhbGlkYXRpb25EaWRGYWls
KCk7Ci0gICAgICAgICAgICBkYXRhTG9nKCIgICAgQXQgYmMjIiwgYnl0ZWNvZGVPZmZzZXQsICIg
ZW5jb3VudGVyZWQgYSBkZWZpbml0aW9uIG9mIGEgY29uc3RhbnQuXG4iKTsKLSAgICAgICAgICAg
IGNvZGVCbG9jay0+ZW5kVmFsaWRhdGlvbkRpZEZhaWwoKTsKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgfQotCi0gICAgICAgIHN3aXRjaCAob3Bjb2RlSUQpIHsKLSAgICAgICAgY2FzZSBv
cF9lbnRlcjoKLSAgICAgICAgY2FzZSBvcF9pbml0X2xhenlfcmVnOgotICAgICAgICBjYXNlIG9w
X2NyZWF0ZV9hcmd1bWVudHM6Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIFZpcnR1YWxSZWdpc3Rl
ciB2aXJ0dWFsUmVnKG9wZXJhbmQpOwotICAgICAgICBpZiAoIXZpcnR1YWxSZWcuaXNMb2NhbCgp
KQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGlmIChjb2RlQmxvY2stPnVzZXNBcmd1
bWVudHMoKSAmJiB2aXJ0dWFsUmVnID09IGNvZGVCbG9jay0+YXJndW1lbnRzUmVnaXN0ZXIoKSkK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaWYgKGNvZGVCbG9jay0+dXNlc0FyZ3VtZW50
cygpICYmIHZpcnR1YWxSZWcgPT0gdW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVyKGNvZGVCbG9j
ay0+YXJndW1lbnRzUmVnaXN0ZXIoKSkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAg
aWYgKGNvZGVCbG9jay0+Y2FwdHVyZUNvdW50KCkgJiYgY29kZUJsb2NrLT5zeW1ib2xUYWJsZSgp
LT5pc0NhcHR1cmVkKG9wZXJhbmQpKSB7Ci0gICAgICAgICAgICBjb2RlQmxvY2stPmJlZ2luVmFs
aWRhdGlvbkRpZEZhaWwoKTsKLSAgICAgICAgICAgIGRhdGFMb2coIiAgICBBdCBiYyMiLCBieXRl
Y29kZU9mZnNldCwgIiBlbmNvdW50ZXJlZCBpbnZhbGlkIGFzc2lnbm1lbnQgdG8gY2FwdHVyZWQg
dmFyaWFibGUgIiwgdmlydHVhbFJlZywgIi5cbiIpOwotICAgICAgICAgICAgY29kZUJsb2NrLT5l
bmRWYWxpZGF0aW9uRGlkRmFpbCgpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0g
ICAgICAgIAotICAgICAgICByZXR1cm47Ci0gICAgfQotfTsKLQotfSAvLyBhbm9ueW1vdXMgbmFt
ZXNwYWNlCi0KIHZvaWQgQ29kZUJsb2NrOjp2YWxpZGF0ZSgpCiB7CiAgICAgQnl0ZWNvZGVMaXZl
bmVzc0FuYWx5c2lzIGxpdmVuZXNzKHRoaXMpOyAvLyBDb21wdXRlIGRpcmVjdGx5IGZyb20gc2Ny
YXRjaCBzbyBpdCBkb2Vzbid0IGVmZmVjdCBDb2RlQmxvY2sgZm9vdHByaW50LgpAQCAtMzk3NCwz
OCArMzgzOSwxNSBAQCB2b2lkIENvZGVCbG9jazo6dmFsaWRhdGUoKQogICAgIH0KICAgICAKICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBtX251bUNhbGxlZVJlZ2lzdGVyczsgaS0tOykgewotICAgICAg
ICBib29sIGlzQ2FwdHVyZWQgPSBmYWxzZTsKICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZyA9
IHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGkpOwogICAgICAgICAKLSAgICAgICAgaWYgKGNhcHR1
cmVDb3VudCgpKQotICAgICAgICAgICAgaXNDYXB0dXJlZCA9IHJlZy5vZmZzZXQoKSA8PSBjYXB0
dXJlU3RhcnQoKSAmJiByZWcub2Zmc2V0KCkgPiBjYXB0dXJlRW5kKCk7Ci0gICAgICAgIAotICAg
ICAgICBpZiAoaXNDYXB0dXJlZCkgewotICAgICAgICAgICAgaWYgKCFsaXZlQXRIZWFkLmdldChp
KSkgewotICAgICAgICAgICAgICAgIGJlZ2luVmFsaWRhdGlvbkRpZEZhaWwoKTsKLSAgICAgICAg
ICAgICAgICBkYXRhTG9nKCIgICAgVmFyaWFibGUgbG9jIiwgaSwgIiBpcyBleHBlY3RlZCB0byBi
ZSBsaXZlIGJlY2F1c2UgaXQgaXMgY2FwdHVyZWQsIGJ1dCBpdCBpc24ndCBsaXZlLlxuIik7Ci0g
ICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIFJlc3VsdDogIiwgbGl2ZUF0SGVhZCwgIlxuIik7
Ci0gICAgICAgICAgICAgICAgZW5kVmFsaWRhdGlvbkRpZEZhaWwoKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChsaXZlQXRIZWFkLmdldChpKSkgewot
ICAgICAgICAgICAgICAgIGJlZ2luVmFsaWRhdGlvbkRpZEZhaWwoKTsKLSAgICAgICAgICAgICAg
ICBkYXRhTG9nKCIgICAgVmFyaWFibGUgbG9jIiwgaSwgIiBpcyBleHBlY3RlZCB0byBiZSBkZWFk
LlxuIik7Ci0gICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIFJlc3VsdDogIiwgbGl2ZUF0SGVh
ZCwgIlxuIik7Ci0gICAgICAgICAgICAgICAgZW5kVmFsaWRhdGlvbkRpZEZhaWwoKTsKLSAgICAg
ICAgICAgIH0KKyAgICAgICAgaWYgKGxpdmVBdEhlYWQuZ2V0KGkpKSB7CisgICAgICAgICAgICBi
ZWdpblZhbGlkYXRpb25EaWRGYWlsKCk7CisgICAgICAgICAgICBkYXRhTG9nKCIgICAgVmFyaWFi
bGUgbG9jIiwgaSwgIiBpcyBleHBlY3RlZCB0byBiZSBkZWFkLlxuIik7CisgICAgICAgICAgICBk
YXRhTG9nKCIgICAgUmVzdWx0OiAiLCBsaXZlQXRIZWFkLCAiXG4iKTsKKyAgICAgICAgICAgIGVu
ZFZhbGlkYXRpb25EaWRGYWlsKCk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCi0gICAgZm9yICh1
bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IDA7IGJ5dGVjb2RlT2Zmc2V0IDwgaW5zdHJ1Y3Rpb25z
KCkuc2l6ZSgpOykgewotICAgICAgICBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0g
aW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKSArIGJ5dGVjb2RlT2Zmc2V0OwotICAgICAgICBPcGNvZGVJ
RCBvcGNvZGVJRCA9IG1fdm0tPmludGVycHJldGVyLT5nZXRPcGNvZGVJRChjdXJyZW50SW5zdHJ1
Y3Rpb24tPnUub3Bjb2RlKTsKLSAgICAgICAgCi0gICAgICAgIFZlcmlmeUNhcHR1cmVkRGVmIHZl
cmlmeUNhcHR1cmVkRGVmOwotICAgICAgICBjb21wdXRlRGVmc0ZvckJ5dGVjb2RlT2Zmc2V0KHRo
aXMsIGJ5dGVjb2RlT2Zmc2V0LCB2ZXJpZnlDYXB0dXJlZERlZik7Ci0gICAgICAgIAotICAgICAg
ICBieXRlY29kZU9mZnNldCArPSBvcGNvZGVMZW5ndGgob3Bjb2RlSUQpOwotICAgIH0KIH0KIAog
dm9pZCBDb2RlQmxvY2s6OmJlZ2luVmFsaWRhdGlvbkRpZEZhaWwoKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2aXNpb24gMTgwODc1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkp
CkBAIC04Myw4ICs4Myw2IEBAIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKIGNsYXNzIFJl
cGF0Y2hCdWZmZXI7CiBjbGFzcyBUeXBlTG9jYXRpb247CiAKLWlubGluZSBWaXJ0dWFsUmVnaXN0
ZXIgdW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudHNS
ZWdpc3RlcikgeyByZXR1cm4gVmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50c1JlZ2lzdGVyLm9mZnNl
dCgpICsgMSk7IH0KLQogZW51bSBSZW9wdGltaXphdGlvbk1vZGUgeyBEb250Q291bnRSZW9wdGlt
aXphdGlvbiwgQ291bnRSZW9wdGltaXphdGlvbiB9OwogCiBjbGFzcyBDb2RlQmxvY2sgOiBwdWJs
aWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8Q29kZUJsb2NrPiwgcHVibGljIFVuY29uZGl0aW9uYWxG
aW5hbGl6ZXIsIHB1YmxpYyBXZWFrUmVmZXJlbmNlSGFydmVzdGVyIHsKQEAgLTI1OSwxMSArMjU3
LDYgQEAgcHVibGljOgogCiAgICAgdW5zaWduZWQgaW5zdHJ1Y3Rpb25Db3VudCgpIGNvbnN0IHsg
cmV0dXJuIG1faW5zdHJ1Y3Rpb25zLnNpemUoKTsgfQogCi0gICAgaW50IGFyZ3VtZW50SW5kZXhB
ZnRlckNhcHR1cmUoc2l6ZV90IGFyZ3VtZW50KTsKLSAgICAKLSAgICBib29sIGhhc1Nsb3dBcmd1
bWVudHMoKTsKLSAgICBjb25zdCBTbG93QXJndW1lbnQqIG1hY2hpbmVTbG93QXJndW1lbnRzKCk7
Ci0KICAgICAvLyBFeGFjdGx5IGVxdWl2YWxlbnQgdG8gY29kZUJsb2NrLT5vd25lckV4ZWN1dGFi
bGUoKS0+aW5zdGFsbENvZGUoY29kZUJsb2NrKTsKICAgICB2b2lkIGluc3RhbGwoKTsKICAgICAK
QEAgLTMyNywyNCArMzIwLDYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9zY29wZVJlZ2lz
dGVyOwogICAgIH0KIAotICAgIHZvaWQgc2V0QXJndW1lbnRzUmVnaXN0ZXIoVmlydHVhbFJlZ2lz
dGVyIGFyZ3VtZW50c1JlZ2lzdGVyKQotICAgIHsKLSAgICAgICAgQVNTRVJUKGFyZ3VtZW50c1Jl
Z2lzdGVyLmlzVmFsaWQoKSk7Ci0gICAgICAgIG1fYXJndW1lbnRzUmVnaXN0ZXIgPSBhcmd1bWVu
dHNSZWdpc3RlcjsKLSAgICAgICAgQVNTRVJUKHVzZXNBcmd1bWVudHMoKSk7Ci0gICAgfQotICAg
IFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudHNSZWdpc3RlcigpIGNvbnN0Ci0gICAgewotICAgICAg
ICBBU1NFUlQodXNlc0FyZ3VtZW50cygpKTsKLSAgICAgICAgcmV0dXJuIG1fYXJndW1lbnRzUmVn
aXN0ZXI7Ci0gICAgfQotICAgIFZpcnR1YWxSZWdpc3RlciB1bmNoZWNrZWRBcmd1bWVudHNSZWdp
c3RlcigpCi0gICAgewotICAgICAgICBpZiAoIXVzZXNBcmd1bWVudHMoKSkKLSAgICAgICAgICAg
IHJldHVybiBWaXJ0dWFsUmVnaXN0ZXIoKTsKLSAgICAgICAgcmV0dXJuIGFyZ3VtZW50c1JlZ2lz
dGVyKCk7Ci0gICAgfQotCiAgICAgdm9pZCBzZXRBY3RpdmF0aW9uUmVnaXN0ZXIoVmlydHVhbFJl
Z2lzdGVyIGFjdGl2YXRpb25SZWdpc3RlcikKICAgICB7CiAgICAgICAgIG1fbGV4aWNhbEVudmly
b25tZW50UmVnaXN0ZXIgPSBhY3RpdmF0aW9uUmVnaXN0ZXI7CkBAIC0zNjEsNDAgKzMzNiwxMiBA
QCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX2xleGljYWxFbnZpcm9ubWVudFJlZ2lzdGVyOwog
ICAgIH0KIAotICAgIGJvb2wgdXNlc0FyZ3VtZW50cygpIGNvbnN0IHsgcmV0dXJuIG1fYXJndW1l
bnRzUmVnaXN0ZXIuaXNWYWxpZCgpOyB9Ci0KICAgICBib29sIG5lZWRzQWN0aXZhdGlvbigpIGNv
bnN0CiAgICAgewogICAgICAgICBBU1NFUlQobV9sZXhpY2FsRW52aXJvbm1lbnRSZWdpc3Rlci5p
c1ZhbGlkKCkgPT0gbV9uZWVkc0FjdGl2YXRpb24pOwogICAgICAgICByZXR1cm4gbV9uZWVkc0Fj
dGl2YXRpb247CiAgICAgfQogICAgIAotICAgIHVuc2lnbmVkIGNhcHR1cmVDb3VudCgpIGNvbnN0
Ci0gICAgewotICAgICAgICBpZiAoIXN5bWJvbFRhYmxlKCkpCi0gICAgICAgICAgICByZXR1cm4g
MDsKLSAgICAgICAgcmV0dXJuIHN5bWJvbFRhYmxlKCktPmNhcHR1cmVDb3VudCgpOwotICAgIH0K
LSAgICAKLSAgICBpbnQgY2FwdHVyZVN0YXJ0KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIGlmICgh
c3ltYm9sVGFibGUoKSkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICByZXR1cm4gc3lt
Ym9sVGFibGUoKS0+Y2FwdHVyZVN0YXJ0KCk7Ci0gICAgfQotICAgIAotICAgIGludCBjYXB0dXJl
RW5kKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIGlmICghc3ltYm9sVGFibGUoKSkKLSAgICAgICAg
ICAgIHJldHVybiAwOwotICAgICAgICByZXR1cm4gc3ltYm9sVGFibGUoKS0+Y2FwdHVyZUVuZCgp
OwotICAgIH0KLSAgICAKLSAgICBib29sIGlzQ2FwdHVyZWQoVmlydHVhbFJlZ2lzdGVyIG9wZXJh
bmQsIElubGluZUNhbGxGcmFtZSogPSAwKSBjb25zdDsKLSAgICAKLSAgICBpbnQgZnJhbWVQb2lu
dGVyT2Zmc2V0VG9HZXRBY3RpdmF0aW9uUmVnaXN0ZXJzKGludCBtYWNoaW5lQ2FwdHVyZVN0YXJ0
KTsKLSAgICBpbnQgZnJhbWVQb2ludGVyT2Zmc2V0VG9HZXRBY3RpdmF0aW9uUmVnaXN0ZXJzKCk7
Ci0KICAgICBDb2RlVHlwZSBjb2RlVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRDb2Rl
LT5jb2RlVHlwZSgpOyB9CiAgICAgUHV0UHJvcGVydHlTbG90OjpDb250ZXh0IHB1dEJ5SWRDb250
ZXh0KCkgY29uc3QKICAgICB7CkBAIC0xMDU3LDcgKzEwMDQsNiBAQCBwcml2YXRlOgogICAgIFdy
aXRlQmFycmllcjxTeW1ib2xUYWJsZT4gbV9zeW1ib2xUYWJsZTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgbV90aGlzUmVnaXN0ZXI7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG1fc2NvcGVSZWdpc3RlcjsK
LSAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9hcmd1bWVudHNSZWdpc3RlcjsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgbV9sZXhpY2FsRW52aXJvbm1lbnRSZWdpc3RlcjsKIAogICAgIGJvb2wgbV9pc1N0cmlj
dE1vZGU7CkBAIC0xMjE4LDI0ICsxMTY0LDYgQEAgaW5saW5lIENvZGVCbG9jayogYmFzZWxpbmVD
b2RlQmxvY2tGb3JPcgogICAgIHJldHVybiBiYXNlbGluZUNvZGVCbG9jazsKIH0KIAotaW5saW5l
IGludCBDb2RlQmxvY2s6OmFyZ3VtZW50SW5kZXhBZnRlckNhcHR1cmUoc2l6ZV90IGFyZ3VtZW50
KQotewotICAgIGlmIChhcmd1bWVudCA+PSBzdGF0aWNfY2FzdDxzaXplX3Q+KHN5bWJvbFRhYmxl
KCktPnBhcmFtZXRlckNvdW50KCkpKQotICAgICAgICByZXR1cm4gQ2FsbEZyYW1lOjphcmd1bWVu
dE9mZnNldChhcmd1bWVudCk7Ci0gICAgCi0gICAgY29uc3QgU2xvd0FyZ3VtZW50KiBzbG93QXJn
dW1lbnRzID0gc3ltYm9sVGFibGUoKS0+c2xvd0FyZ3VtZW50cygpOwotICAgIGlmICghc2xvd0Fy
Z3VtZW50cyB8fCBzbG93QXJndW1lbnRzW2FyZ3VtZW50XS5zdGF0dXMgPT0gU2xvd0FyZ3VtZW50
OjpOb3JtYWwpCi0gICAgICAgIHJldHVybiBDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0KGFyZ3Vt
ZW50KTsKLSAgICAKLSAgICBBU1NFUlQoc2xvd0FyZ3VtZW50c1thcmd1bWVudF0uc3RhdHVzID09
IFNsb3dBcmd1bWVudDo6Q2FwdHVyZWQpOwotICAgIHJldHVybiBzbG93QXJndW1lbnRzW2FyZ3Vt
ZW50XS5pbmRleDsKLX0KLQotaW5saW5lIGJvb2wgQ29kZUJsb2NrOjpoYXNTbG93QXJndW1lbnRz
KCkKLXsKLSAgICByZXR1cm4gISFzeW1ib2xUYWJsZSgpLT5zbG93QXJndW1lbnRzKCk7Ci19Ci0K
IGlubGluZSBSZWdpc3RlciYgRXhlY1N0YXRlOjpyKGludCBpbmRleCkKIHsKICAgICBDb2RlQmxv
Y2sqIGNvZGVCbG9jayA9IHRoaXMtPmNvZGVCbG9jaygpOwpAQCAtMTI2MCwxNyArMTE4OCw2IEBA
IGlubGluZSBSZWdpc3RlciYgRXhlY1N0YXRlOjp1bmNoZWNrZWRSKFYKICAgICByZXR1cm4gdW5j
aGVja2VkUihyZWcub2Zmc2V0KCkpOwogfQogCi1pbmxpbmUgSlNWYWx1ZSBFeGVjU3RhdGU6OmFy
Z3VtZW50QWZ0ZXJDYXB0dXJlKHNpemVfdCBhcmd1bWVudCkKLXsKLSAgICBpZiAoYXJndW1lbnQg
Pj0gYXJndW1lbnRDb3VudCgpKQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICAK
LSAgICBpZiAoIWNvZGVCbG9jaygpKQotICAgICAgICByZXR1cm4gdGhpc1thcmd1bWVudE9mZnNl
dChhcmd1bWVudCldLmpzVmFsdWUoKTsKLSAgICAKLSAgICByZXR1cm4gdGhpc1tjb2RlQmxvY2so
KS0+YXJndW1lbnRJbmRleEFmdGVyQ2FwdHVyZShhcmd1bWVudCldLmpzVmFsdWUoKTsKLX0KLQog
aW5saW5lIHZvaWQgQ29kZUJsb2NrU2V0OjptYXJrKHZvaWQqIGNhbmRpZGF0ZUNvZGVCbG9jaykK
IHsKICAgICAvLyBXZSBoYXZlIHRvIGNoZWNrIGZvciAwIGFuZCAtMSBiZWNhdXNlIHRob3NlIGFy
ZSB1c2VkIGJ5IHRoZSBIYXNoTWFwIGFzIG1hcmtlcnMuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmgJKHJldmlzaW9uIDE4MDg3NSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmgJKHdvcmtpbmcgY29weSkKQEAg
LTE4OSw3ICsxODksNiBAQCBzdHJ1Y3QgSW5saW5lQ2FsbEZyYW1lIHsKICAgICBXcml0ZUJhcnJp
ZXI8U2NyaXB0RXhlY3V0YWJsZT4gZXhlY3V0YWJsZTsKICAgICBWYWx1ZVJlY292ZXJ5IGNhbGxl
ZVJlY292ZXJ5OwogICAgIENvZGVPcmlnaW4gY2FsbGVyOwotICAgIEJpdFZlY3RvciBjYXB0dXJl
ZFZhcnM7IC8vIEluZGV4ZWQgYnkgdGhlIG1hY2hpbmUgY2FsbCBmcmFtZSdzIHZhcmlhYmxlIG51
bWJlcmluZy4KIAogICAgIHNpZ25lZCBzdGFja09mZnNldCA6IDI4OwogICAgIHVuc2lnbmVkIGtp
bmQgOiAzOyAvLyByZWFsIHR5cGUgaXMgS2luZApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuY3BwCShyZXZpc2lvbiAxODA4NzUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOSwxMCArMjksMTEgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNs
dWRlICJTcGVjdWxhdGVkVHlwZS5oIgogCi0jaW5jbHVkZSAiQXJndW1lbnRzLmgiCisjaW5jbHVk
ZSAiRGlyZWN0QXJndW1lbnRzLmgiCiAjaW5jbHVkZSAiSlNBcnJheS5oIgogI2luY2x1ZGUgIkpT
RnVuY3Rpb24uaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiU2NvcGVkQXJn
dW1lbnRzLmgiCiAjaW5jbHVkZSAiU3RyaW5nT2JqZWN0LmgiCiAjaW5jbHVkZSAiVmFsdWVQcm9m
aWxlLmgiCiAjaW5jbHVkZSA8d3RmL0JvdW5kc0NoZWNrZWRQb2ludGVyLmg+CkBAIC0xMjcsOCAr
MTI4LDEzIEBAIHZvaWQgZHVtcFNwZWN1bGF0aW9uKFByaW50U3RyZWFtJiBvdXQsIFMKICAgICAg
ICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBpc1RvcCA9IGZhbHNlOwogICAgIAotICAgICAg
ICAgICAgaWYgKHZhbHVlICYgU3BlY0FyZ3VtZW50cykKLSAgICAgICAgICAgICAgICBteU91dC5w
cmludCgiQXJndW1lbnRzIik7CisgICAgICAgICAgICBpZiAodmFsdWUgJiBTcGVjRGlyZWN0QXJn
dW1lbnRzKQorICAgICAgICAgICAgICAgIG15T3V0LnByaW50KCJEaXJlY3Rhcmd1bWVudHMiKTsK
KyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBpc1RvcCA9IGZhbHNlOworICAgIAor
ICAgICAgICAgICAgaWYgKHZhbHVlICYgU3BlY1Njb3BlZEFyZ3VtZW50cykKKyAgICAgICAgICAg
ICAgICBteU91dC5wcmludCgiU2NvcGVkYXJndW1lbnRzIik7CiAgICAgICAgICAgICBlbHNlCiAg
ICAgICAgICAgICAgICAgaXNUb3AgPSBmYWxzZTsKICAgICAKQEAgLTIzMiw4ICsyMzgsMTAgQEAg
c3RhdGljIGNvbnN0IGNoYXIqIHNwZWN1bGF0aW9uVG9BYmJyZXZpYQogICAgICAgICByZXR1cm4g
IjxGbG9hdDMyYXJyYXk+IjsKICAgICBpZiAoaXNGbG9hdDY0QXJyYXlTcGVjdWxhdGlvbihwcmVk
aWN0aW9uKSkKICAgICAgICAgcmV0dXJuICI8RmxvYXQ2NGFycmF5PiI7Ci0gICAgaWYgKGlzQXJn
dW1lbnRzU3BlY3VsYXRpb24ocHJlZGljdGlvbikpCi0gICAgICAgIHJldHVybiAiPEFyZ3VtZW50
cz4iOworICAgIGlmIChpc0RpcmVjdEFyZ3VtZW50c1NwZWN1bGF0aW9uKHByZWRpY3Rpb24pKQor
ICAgICAgICByZXR1cm4gIjxEaXJlY3RBcmd1bWVudHM+IjsKKyAgICBpZiAoaXNTY29wZWRBcmd1
bWVudHNTcGVjdWxhdGlvbihwcmVkaWN0aW9uKSkKKyAgICAgICAgcmV0dXJuICI8U2NvcGVkQXJn
dW1lbnRzPiI7CiAgICAgaWYgKGlzU3RyaW5nT2JqZWN0U3BlY3VsYXRpb24ocHJlZGljdGlvbikp
CiAgICAgICAgIHJldHVybiAiPFN0cmluZ09iamVjdD4iOwogICAgIGlmIChpc1N0cmluZ09yU3Ry
aW5nT2JqZWN0U3BlY3VsYXRpb24ocHJlZGljdGlvbikpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuaAkocmV2aXNpb24gMTgwODc1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTUyLDggKzUyLDkgQEAgc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNw
ZWNVaW50MzJBcgogc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNGbG9hdDMyQXJyYXkg
ICAgICAgPSAweDAwMDAwNDAwOyAvLyBJdCdzIGRlZmluaXRlbHkgYW4gVWludDE2QXJyYXkgb3Ig
b25lIG9mIGl0cyBzdWJjbGFzc2VzLgogc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNG
bG9hdDY0QXJyYXkgICAgICAgPSAweDAwMDAwODAwOyAvLyBJdCdzIGRlZmluaXRlbHkgYW4gVWlu
dDE2QXJyYXkgb3Igb25lIG9mIGl0cyBzdWJjbGFzc2VzLgogc3RhdGljIGNvbnN0IFNwZWN1bGF0
ZWRUeXBlIFNwZWNUeXBlZEFycmF5VmlldyAgICAgPSBTcGVjSW50OEFycmF5IHwgU3BlY0ludDE2
QXJyYXkgfCBTcGVjSW50MzJBcnJheSB8IFNwZWNVaW50OEFycmF5IHwgU3BlY1VpbnQ4Q2xhbXBl
ZEFycmF5IHwgU3BlY1VpbnQxNkFycmF5IHwgU3BlY1VpbnQzMkFycmF5IHwgU3BlY0Zsb2F0MzJB
cnJheSB8IFNwZWNGbG9hdDY0QXJyYXk7Ci1zdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3Bl
Y0FyZ3VtZW50cyAgICAgICAgICA9IDB4MDAwMDEwMDA7IC8vIEl0J3MgZGVmaW5pdGVseSBhbiBB
cmd1bWVudHMgb2JqZWN0Lgotc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNTdHJpbmdP
YmplY3QgICAgICAgPSAweDAwMDAyMDAwOyAvLyBJdCdzIGRlZmluaXRlbHkgYSBTdHJpbmdPYmpl
Y3QuCitzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0RpcmVjdEFyZ3VtZW50cyAgICA9
IDB4MDAwMDEwMDA7IC8vIEl0J3MgZGVmaW5pdGVseSBhIERpcmVjdEFyZ3VtZW50cyBvYmplY3Qu
CitzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY1Njb3BlZEFyZ3VtZW50cyAgICA9IDB4
MDAwMDIwMDA7IC8vIEl0J3MgZGVmaW5pdGVseSBhIFNjb3BlZEFyZ3VtZW50cyBvYmplY3QuCitz
dGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY1N0cmluZ09iamVjdCAgICAgICA9IDB4MDAw
MDQwMDA7IC8vIEl0J3MgZGVmaW5pdGVseSBhIFN0cmluZ09iamVjdC4KIHN0YXRpYyBjb25zdCBT
cGVjdWxhdGVkVHlwZSBTcGVjT2JqZWN0T3RoZXIgICAgICAgID0gMHgwMDAwODAwMDsgLy8gSXQn
cyBkZWZpbml0ZWx5IGFuIG9iamVjdCBidXQgbm90IEpTRmluYWxPYmplY3QsIEpTQXJyYXksIG9y
IEpTRnVuY3Rpb24uCiBzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY09iamVjdCAgICAg
ICAgICAgICA9IDB4MDAwMGZmZmY7IC8vIEJpdG1hc2sgdXNlZCBmb3IgdGVzdGluZyBmb3IgYW55
IGtpbmQgb2Ygb2JqZWN0IHByZWRpY3Rpb24uCiBzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUg
U3BlY1N0cmluZ0lkZW50ICAgICAgICA9IDB4MDAwMTAwMDA7IC8vIEl0J3MgZGVmaW5pdGVseSBh
IEpTU3RyaW5nLCBhbmQgaXQncyBhbiBpZGVudGlmaWVyLgpAQCAtMTkzLDkgKzE5NCwxNCBAQCBp
bmxpbmUgYm9vbCBpc0Zsb2F0NjRBcnJheVNwZWN1bGF0aW9uKFNwCiAgICAgcmV0dXJuIHZhbHVl
ID09IFNwZWNGbG9hdDY0QXJyYXk7CiB9CiAKLWlubGluZSBib29sIGlzQXJndW1lbnRzU3BlY3Vs
YXRpb24oU3BlY3VsYXRlZFR5cGUgdmFsdWUpCitpbmxpbmUgYm9vbCBpc0RpcmVjdEFyZ3VtZW50
c1NwZWN1bGF0aW9uKFNwZWN1bGF0ZWRUeXBlIHZhbHVlKQogewotICAgIHJldHVybiAhIXZhbHVl
ICYmICh2YWx1ZSAmIFNwZWNBcmd1bWVudHMpID09IHZhbHVlOworICAgIHJldHVybiB2YWx1ZSA9
PSBTcGVjRGlyZWN0QXJndW1lbnRzOworfQorCitpbmxpbmUgYm9vbCBpc1Njb3BlZEFyZ3VtZW50
c1NwZWN1bGF0aW9uKFNwZWN1bGF0ZWRUeXBlIHZhbHVlKQoreworICAgIHJldHVybiB2YWx1ZSA9
PSBTcGVjU2NvcGVkQXJndW1lbnRzOwogfQogCiBpbmxpbmUgYm9vbCBpc0FjdGlvbmFibGVJbnRN
dXRhYmxlQXJyYXlTcGVjdWxhdGlvbihTcGVjdWxhdGVkVHlwZSB2YWx1ZSkKQEAgLTIyNCwxMyAr
MjMwLDE0IEBAIGlubGluZSBib29sIGlzQWN0aW9uYWJsZVR5cGVkTXV0YWJsZUFycmEKIGlubGlu
ZSBib29sIGlzQWN0aW9uYWJsZU11dGFibGVBcnJheVNwZWN1bGF0aW9uKFNwZWN1bGF0ZWRUeXBl
IHZhbHVlKQogewogICAgIHJldHVybiBpc0FycmF5U3BlY3VsYXRpb24odmFsdWUpCi0gICAgICAg
IHx8IGlzQXJndW1lbnRzU3BlY3VsYXRpb24odmFsdWUpCiAgICAgICAgIHx8IGlzQWN0aW9uYWJs
ZVR5cGVkTXV0YWJsZUFycmF5U3BlY3VsYXRpb24odmFsdWUpOwogfQogCiBpbmxpbmUgYm9vbCBp
c0FjdGlvbmFibGVBcnJheVNwZWN1bGF0aW9uKFNwZWN1bGF0ZWRUeXBlIHZhbHVlKQogewogICAg
IHJldHVybiBpc1N0cmluZ1NwZWN1bGF0aW9uKHZhbHVlKQorICAgICAgICB8fCBpc0RpcmVjdEFy
Z3VtZW50c1NwZWN1bGF0aW9uKHZhbHVlKQorICAgICAgICB8fCBpc1Njb3BlZEFyZ3VtZW50c1Nw
ZWN1bGF0aW9uKHZhbHVlKQogICAgICAgICB8fCBpc0FjdGlvbmFibGVNdXRhYmxlQXJyYXlTcGVj
dWxhdGlvbih2YWx1ZSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29t
cGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAxODA4
NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJh
dG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMsNiArNjMsMjAgQEAgUGFyc2VyRXJyb3IgQnl0
ZWNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlKAogICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVn
aW9uKCJCeXRlY29kZSBHZW5lcmF0aW9uIik7CiAgICAgCiAgICAgbV9jb2RlQmxvY2stPnNldFRo
aXNSZWdpc3RlcihtX3RoaXNSZWdpc3Rlci52aXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgCisgICAg
Ly8gSWYgd2UgaGF2ZSBkZWNsYXJlZCBhIHZhcmlhYmxlIG5hbWVkICJhcmd1bWVudHMiIGFuZCB3
ZSBhcmUgdXNpbmcgYXJndW1lbnRzIHRoZW4gd2Ugc2hvdWxkCisgICAgLy8gcGVyZm9ybSB0aGF0
IGFzc2lnbm1lbnQgbm93LgorICAgIGlmIChtX25lZWRUb0luaXRpYWxpemVBcmd1bWVudHMpCisg
ICAgICAgIGluaXRpYWxpemVWYXJpYWJsZSh2YXJpYWJsZShwcm9wZXJ0eU5hbWVzKCkuYXJndW1l
bnRzKSwgbV9hcmd1bWVudHNSZWdpc3Rlcik7CisgICAgCisgICAgeworICAgICAgICBSZWZQdHI8
UmVnaXN0ZXJJRD4gdGVtcCA9IG5ld1RlbXBvcmFyeSgpOworICAgICAgICBmb3IgKEZ1bmN0aW9u
Qm9keU5vZGUqIGZ1bmN0aW9uQm9keSA6IG1fZnVuY3Rpb25zVG9Jbml0aWFsaXplKSB7CisgICAg
ICAgICAgICBlbWl0TmV3RnVuY3Rpb24odGVtcC5nZXQoKSwgZnVuY3Rpb25Cb2R5KTsKKyAgICAg
ICAgICAgIGluaXRpYWxpemVWYXJpYWJsZSh2YXJpYWJsZShmdW5jdGlvbkJvZHktPmlkZW50KCkp
LCB0ZW1wLmdldCgpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IG1fZGVjb25zdHJ1Y3RlZFBhcmFtZXRlcnMuc2l6ZSgpOyBpKyspIHsKICAgICAg
ICAgYXV0byYgZW50cnkgPSBtX2RlY29uc3RydWN0ZWRQYXJhbWV0ZXJzW2ldOwogICAgICAgICBl
bnRyeS5zZWNvbmQtPmJpbmRWYWx1ZSgqdGhpcywgZW50cnkuZmlyc3QuZ2V0KCkpOwpAQCAtMTE2
LDM4ICsxMzAsMTMgQEAgUGFyc2VyRXJyb3IgQnl0ZWNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlKAog
ICAgIG1fY29kZUJsb2NrLT5zaHJpbmtUb0ZpdCgpOwogCiAgICAgaWYgKG1fY29kZUJsb2NrLT5z
eW1ib2xUYWJsZSgpICYmICFtX2NvZGVCbG9jay0+dm0oKS0+dHlwZVByb2ZpbGVyKCkpCi0gICAg
ICAgIG1fY29kZUJsb2NrLT5zZXRTeW1ib2xUYWJsZShtX2NvZGVCbG9jay0+c3ltYm9sVGFibGUo
KS0+Y2xvbmVDYXB0dXJlZE5hbWVzKCptX2NvZGVCbG9jay0+dm0oKSkpOworICAgICAgICBtX2Nv
ZGVCbG9jay0+c2V0U3ltYm9sVGFibGUobV9jb2RlQmxvY2stPnN5bWJvbFRhYmxlKCktPmNsb25l
SWdub3JpbmdTdGFjaygqbV9jb2RlQmxvY2stPnZtKCkpKTsKIAogICAgIGlmIChtX2V4cHJlc3Np
b25Ub29EZWVwKQogICAgICAgICByZXR1cm4gUGFyc2VyRXJyb3IoUGFyc2VyRXJyb3I6Ok91dE9m
TWVtb3J5KTsKICAgICByZXR1cm4gUGFyc2VyRXJyb3IoUGFyc2VyRXJyb3I6OkVycm9yTm9uZSk7
CiB9CiAKLVJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjphZGRWYXIoCi0gICAgY29uc3Qg
SWRlbnRpZmllciYgaWRlbnQsIENvbnN0YW50TW9kZSBjb25zdGFudE1vZGUsIFdhdGNoTW9kZSB3
YXRjaE1vZGUpCi17Ci0gICAgQVNTRVJUKHN0YXRpY19jYXN0PHNpemVfdD4obV9jb2RlQmxvY2st
Pm1fbnVtVmFycykgPT0gbV9jYWxsZWVSZWdpc3RlcnMuc2l6ZSgpKTsKLSAgICAKLSAgICBDb25j
dXJyZW50SklUTG9ja2VyIGxvY2tlcihzeW1ib2xUYWJsZSgpLm1fbG9jayk7Ci0gICAgaW50IGlu
ZGV4ID0gdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwobV9jYWxsZWVSZWdpc3RlcnMuc2l6ZSgpKS5v
ZmZzZXQoKTsKLSAgICBTeW1ib2xUYWJsZUVudHJ5IG5ld0VudHJ5KGluZGV4LCBjb25zdGFudE1v
ZGUgPT0gSXNDb25zdGFudCA/IFJlYWRPbmx5IDogMCk7Ci0gICAgU3ltYm9sVGFibGU6Ok1hcDo6
QWRkUmVzdWx0IHJlc3VsdCA9IHN5bWJvbFRhYmxlKCkuYWRkKGxvY2tlciwgaWRlbnQuaW1wbCgp
LCBuZXdFbnRyeSk7Ci0KLSAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICByZXR1
cm4gJnJlZ2lzdGVyRm9yKHJlc3VsdC5pdGVyYXRvci0+dmFsdWUuZ2V0SW5kZXgoKSk7Ci0gICAg
Ci0gICAgaWYgKHdhdGNoTW9kZSA9PSBJc1dhdGNoYWJsZSkgewotICAgICAgICB3aGlsZSAobV93
YXRjaGFibGVWYXJpYWJsZXMuc2l6ZSgpIDwgc3RhdGljX2Nhc3Q8c2l6ZV90PihtX2NvZGVCbG9j
ay0+bV9udW1WYXJzKSkKLSAgICAgICAgICAgIG1fd2F0Y2hhYmxlVmFyaWFibGVzLmFwcGVuZChJ
ZGVudGlmaWVyKCkpOwotICAgICAgICBtX3dhdGNoYWJsZVZhcmlhYmxlcy5hcHBlbmQoaWRlbnQp
OwotICAgIH0KLSAgICAKLSAgICBSZWdpc3RlcklEKiByZWdJRCA9IGFkZFZhcigpOwotICAgIEFT
U0VSVCh3YXRjaE1vZGUgPT0gTm90V2F0Y2hhYmxlIHx8IHN0YXRpY19jYXN0PHNpemVfdD4obV9j
b2RlQmxvY2stPm1fbnVtVmFycykgPT0gbV93YXRjaGFibGVWYXJpYWJsZXMuc2l6ZSgpKTsKLSAg
ICAKLSAgICByZXR1cm4gcmVnSUQ7Ci19Ci0KIEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdl
bmVyYXRvcihWTSYgdm0sIFByb2dyYW1Ob2RlKiBwcm9ncmFtTm9kZSwgVW5saW5rZWRQcm9ncmFt
Q29kZUJsb2NrKiBjb2RlQmxvY2ssIERlYnVnZ2VyTW9kZSBkZWJ1Z2dlck1vZGUsIFByb2ZpbGVy
TW9kZSBwcm9maWxlck1vZGUpCiAgICAgOiBtX3Nob3VsZEVtaXREZWJ1Z0hvb2tzKE9wdGlvbnM6
OmZvcmNlRGVidWdnZXJCeXRlY29kZUdlbmVyYXRpb24oKSB8fCBkZWJ1Z2dlck1vZGUgPT0gRGVi
dWdnZXJPbikKICAgICAsIG1fc2hvdWxkRW1pdFByb2ZpbGVIb29rcyhPcHRpb25zOjpmb3JjZVBy
b2ZpbGVyQnl0ZWNvZGVHZW5lcmF0aW9uKCkgfHwgcHJvZmlsZXJNb2RlID09IFByb2ZpbGVyT24p
CkBAIC0xODksNyArMTc4LDcgQEAgQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9y
KFZNJgogewogICAgIGlmIChtX2lzQnVpbHRpbkZ1bmN0aW9uKQogICAgICAgICBtX3Nob3VsZEVt
aXREZWJ1Z0hvb2tzID0gZmFsc2U7Ci0KKyAgICAKICAgICBtX3N5bWJvbFRhYmxlLT5zZXRVc2Vz
Tm9uU3RyaWN0RXZhbChjb2RlQmxvY2stPnVzZXNFdmFsKCkgJiYgIWNvZGVCbG9jay0+aXNTdHJp
Y3RNb2RlKCkpOwogICAgIFZlY3RvcjxJZGVudGlmaWVyPiBib3VuZFBhcmFtZXRlclByb3BlcnRp
ZXM7CiAgICAgRnVuY3Rpb25QYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzID0gKmZ1bmN0aW9uTm9kZS0+
cGFyYW1ldGVycygpOwpAQCAtMjAyLDEwICsxOTEsMjAgQEAgQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5
dGVjb2RlR2VuZXJhdG9yKFZNJgogICAgIH0KICAgICBtX3N5bWJvbFRhYmxlLT5zZXRQYXJhbWV0
ZXJDb3VudEluY2x1ZGluZ1RoaXMoZnVuY3Rpb25Ob2RlLT5wYXJhbWV0ZXJzKCktPnNpemUoKSAr
IDEpOwogCisgICAgYm9vbCBzaG91bGRDYXB0dXJlQWxsVGhlVGhpbmdzID0gbV9zaG91bGRFbWl0
RGVidWdIb29rcyB8fCBjb2RlQmxvY2stPnVzZXNFdmFsKCk7CisgICAgYXV0byBjYXB0dXJlcyA9
IFsmXSAoU3RyaW5nSW1wbCogdWlkKSAtPiBib29sIHsKKyAgICAgICAgcmV0dXJuIHNob3VsZENh
cHR1cmVBbGxUaGVUaGluZ3MgfHwgZnVuY3Rpb25Ob2RlLT5jYXB0dXJlcyh1aWQpOworICAgIH07
CisgICAgYXV0byB2YXJLaW5kID0gWyZdIChTdHJpbmdJbXBsKiB1aWQpIC0+IFZhcktpbmQgewor
ICAgICAgICByZXR1cm4gY2FwdHVyZXModWlkKSA/IFNjb3BlVmFyS2luZCA6IFN0YWNrVmFyS2lu
ZDsKKyAgICB9CisKICAgICBlbWl0T3Bjb2RlKG9wX2VudGVyKTsKIAogICAgIGFsbG9jYXRlQW5k
RW1pdFNjb3BlKCk7CiAgICAgCisgICAgbV9jYWxsZWVSZWdpc3Rlci5zZXRJbmRleChKU1N0YWNr
OjpDYWxsZWUpOworICAgIAogICAgIGlmIChmdW5jdGlvbk5hbWVJc0luU2NvcGUoZnVuY3Rpb25O
b2RlLT5pZGVudCgpLCBmdW5jdGlvbk5vZGUtPmZ1bmN0aW9uTW9kZSgpKQogICAgICAgICAmJiBm
dW5jdGlvbk5hbWVTY29wZUlzRHluYW1pYyhjb2RlQmxvY2stPnVzZXNFdmFsKCksIGNvZGVCbG9j
ay0+aXNTdHJpY3RNb2RlKCkpKSB7CiAgICAgICAgIC8vIFdoZW4gd2UgZG8gdGhpcywgd2Ugc2hv
dWxkIG1ha2Ugb3VyIGxvY2FsIHNjb3BlIHN0YWNrIGtub3cgYWJvdXQgdGhlIGZ1bmN0aW9uIG5h
bWUgc3ltYm9sCkBAIC0yMTQsOSArMjEzLDcgQEAgQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2Rl
R2VuZXJhdG9yKFZNJgogICAgICAgICAvLyBBbHNvLCB3ZSBjb3VsZCBjcmVhdGUgdGhlIHNjb3Bl
IG9uY2UgcGVyIEpTRnVuY3Rpb24gaW5zdGFuY2UgdGhhdCBuZWVkcyBpdC4gVGhhdCB3b3VsZG4n
dAogICAgICAgICAvLyBiZSBhbnkgbW9yZSBjb3JyZWN0LCBidXQgaXQgd291bGQgYmUgbW9yZSBw
ZXJmb3JtYW50LgogICAgICAgICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE0MTg4NwotICAgICAgICBSZWdpc3RlcklEIGNhbGxlZVJlZ2lzdGVyOwot
ICAgICAgICBjYWxsZWVSZWdpc3Rlci5zZXRJbmRleChKU1N0YWNrOjpDYWxsZWUpOwotICAgICAg
ICBlbWl0UHVzaEZ1bmN0aW9uTmFtZVNjb3BlKG1fc2NvcGVSZWdpc3RlciwgZnVuY3Rpb25Ob2Rl
LT5pZGVudCgpLCAmY2FsbGVlUmVnaXN0ZXIsIFJlYWRPbmx5IHwgRG9udERlbGV0ZSk7CisgICAg
ICAgIGVtaXRQdXNoRnVuY3Rpb25OYW1lU2NvcGUobV9zY29wZVJlZ2lzdGVyLCBmdW5jdGlvbk5v
ZGUtPmlkZW50KCksICZtX2NhbGxlZVJlZ2lzdGVyLCBSZWFkT25seSB8IERvbnREZWxldGUpOwog
ICAgIH0KIAogICAgIGlmIChtX2NvZGVCbG9jay0+bmVlZHNGdWxsU2NvcGVDaGFpbigpIHx8IG1f
c2hvdWxkRW1pdERlYnVnSG9va3MpIHsKQEAgLTIyNiwxNzkgKzIyMywyMjUgQEAgQnl0ZWNvZGVH
ZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFZNJgogICAgICAgICBpbnN0cnVjdGlvbnMoKS5h
cHBlbmQobV9sZXhpY2FsRW52aXJvbm1lbnRSZWdpc3Rlci0+aW5kZXgoKSk7CiAgICAgICAgIGlu
c3RydWN0aW9ucygpLmFwcGVuZChzY29wZVJlZ2lzdGVyKCktPmluZGV4KCkpOwogICAgIH0KLSAg
ICBSZWdpc3RlcklEKiBsb2NhbEFyZ3VtZW50c1JlZ2lzdGVyID0gbnVsbHB0cjsKLSAgICBSZWdp
c3RlcklEKiBzY3JhdGNoID0gYWRkVmFyKCk7Ci0gICAgbV9zeW1ib2xUYWJsZS0+c2V0Q2FwdHVy
ZVN0YXJ0KHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKG1fY29kZUJsb2NrLT5tX251bVZhcnMpLm9m
ZnNldCgpKTsKLQotICAgIGlmIChmdW5jdGlvbk5vZGUtPnVzZXNBcmd1bWVudHMoKSB8fCBjb2Rl
QmxvY2stPnVzZXNFdmFsKCkpIHsgLy8gTWF5IHJlaWZ5IGFyZ3VtZW50cyBvYmplY3QuCi0gICAg
ICAgIFJlZ2lzdGVySUQqIHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3RlciA9IGFkZFZhcigpOyAv
LyBBbm9ueW1vdXMsIHNvIGl0IGNhbid0IGJlIG1vZGlmaWVkIGJ5IHVzZXIgY29kZS4KLSAgICAg
ICAgUmVnaXN0ZXJJRCogYXJndW1lbnRzUmVnaXN0ZXIgPSBhZGRWYXIocHJvcGVydHlOYW1lcygp
LmFyZ3VtZW50cywgSXNWYXJpYWJsZSwgTm90V2F0Y2hhYmxlKTsgLy8gQ2FuIGJlIGNoYW5nZWQg
YnkgYXNzaWduaW5nIHRvICdhcmd1bWVudHMnLgotCi0gICAgICAgIGxvY2FsQXJndW1lbnRzUmVn
aXN0ZXIgPSBhcmd1bWVudHNSZWdpc3RlcjsKLQotICAgICAgICAvLyBXZSBjYW4gc2F2ZSBhIGxp
dHRsZSBzcGFjZSBieSBoYXJkLWNvZGluZyB0aGUga25vd2xlZGdlIHRoYXQgdGhlIHR3bwotICAg
ICAgICAvLyAnYXJndW1lbnRzJyB2YWx1ZXMgYXJlIHN0b3JlZCBpbiBjb25zZWN1dGl2ZSByZWdp
c3RlcnMsIGFuZCBzdG9yaW5nCi0gICAgICAgIC8vIG9ubHkgdGhlIGluZGV4IG9mIHRoZSBhc3Np
Z25hYmxlIG9uZS4KLSAgICAgICAgY29kZUJsb2NrLT5zZXRBcmd1bWVudHNSZWdpc3Rlcihhcmd1
bWVudHNSZWdpc3Rlci0+dmlydHVhbFJlZ2lzdGVyKCkpOwotICAgICAgICBBU1NFUlRfVU5VU0VE
KHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3RlciwgdW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVy
LT52aXJ0dWFsUmVnaXN0ZXIoKSA9PSBKU0M6OnVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3Rlcihj
b2RlQmxvY2stPmFyZ3VtZW50c1JlZ2lzdGVyKCkpKTsKLQotICAgICAgICBlbWl0SW5pdExhenlS
ZWdpc3Rlcihhcmd1bWVudHNSZWdpc3Rlcik7Ci0gICAgICAgIGVtaXRJbml0TGF6eVJlZ2lzdGVy
KHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3Rlcik7Ci0gICAgICAgIAotICAgICAgICBpZiAoc2hv
dWxkQ3JlYXRlQXJndW1lbnRzRWFnZXJseSgpIHx8IHNob3VsZFRlYXJPZmZBcmd1bWVudHNFYWdl
cmx5KCkpIHsKLSAgICAgICAgICAgIGVtaXRPcGNvZGUob3BfY3JlYXRlX2FyZ3VtZW50cyk7Ci0g
ICAgICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYXJndW1lbnRzUmVnaXN0ZXItPmluZGV4
KCkpOwotICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKG1fY29kZUJsb2NrLT5hY3Rp
dmF0aW9uUmVnaXN0ZXIoKS5vZmZzZXQoKSk7Ci0KLSAgICAgICAgICAgIGlmIChtX2NvZGVCbG9j
ay0+aGFzQWN0aXZhdGlvblJlZ2lzdGVyKCkpIHsKLSAgICAgICAgICAgICAgICBSZWdpc3RlcklE
KiBhcmd1bWVudHNSZWdpc3RlciA9ICZyZWdpc3RlckZvcihtX2NvZGVCbG9jay0+YXJndW1lbnRz
UmVnaXN0ZXIoKS5vZmZzZXQoKSk7Ci0gICAgICAgICAgICAgICAgaW5pdGlhbGl6ZUNhcHR1cmVk
VmFyaWFibGUoYXJndW1lbnRzUmVnaXN0ZXIsIHByb3BlcnR5TmFtZXMoKS5hcmd1bWVudHMsIGFy
Z3VtZW50c1JlZ2lzdGVyKTsKLSAgICAgICAgICAgICAgICBSZWdpc3RlcklEKiB1bmNoZWNrZWRB
cmd1bWVudHNSZWdpc3RlciA9ICZyZWdpc3RlckZvcihKU0M6OnVubW9kaWZpZWRBcmd1bWVudHNS
ZWdpc3RlcihtX2NvZGVCbG9jay0+YXJndW1lbnRzUmVnaXN0ZXIoKSkub2Zmc2V0KCkpOwotICAg
ICAgICAgICAgICAgIGluaXRpYWxpemVDYXB0dXJlZFZhcmlhYmxlKHVuY2hlY2tlZEFyZ3VtZW50
c1JlZ2lzdGVyLCBwcm9wZXJ0eU5hbWVzKCkuYXJndW1lbnRzLCB1bmNoZWNrZWRBcmd1bWVudHNS
ZWdpc3Rlcik7Ci0gICAgICAgICAgICAgICAgaWYgKGZ1bmN0aW9uTm9kZS0+bW9kaWZpZXNBcmd1
bWVudHMoKSkgewotICAgICAgICAgICAgICAgICAgICBlbWl0T3Bjb2RlKG9wX21vdik7Ci0gICAg
ICAgICAgICAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChhcmd1bWVudHNSZWdpc3Rlci0+
aW5kZXgoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChhZGRD
b25zdGFudFZhbHVlKGpzVW5kZWZpbmVkKCkpLT5pbmRleCgpKTsKLSAgICAgICAgICAgICAgICAg
ICAgZW1pdE9wY29kZShvcF9tb3YpOwotICAgICAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbnMo
KS5hcHBlbmQodW5jaGVja2VkQXJndW1lbnRzUmVnaXN0ZXItPmluZGV4KCkpOwotICAgICAgICAg
ICAgICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYWRkQ29uc3RhbnRWYWx1ZShqc1VuZGVm
aW5lZCgpKS0+aW5kZXgoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGxvY2FsQXJndW1lbnRzUmVn
aXN0ZXIgPSBudWxscHRyOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQorICAgIAorICAgIC8vIE1ha2Ugc3VyZSB0aGUgY29kZSBibG9jayBrbm93cyBhYm91dCBh
bGwgb2Ygb3VyIHBhcmFtZXRlcnMsIGFuZCBtYWtlIHN1cmUgdGhhdCBwYXJhbWV0ZXJzCisgICAg
Ly8gbmVlZGluZyBkZWNvbnN0cnVjdGlvbiBhcmUgbm90ZWQuCisgICAgbV9wYXJhbWV0ZXJzLmdy
b3cocGFyYW1ldGVycy5zaXplKCkgKyAxKTsgLy8gcmVzZXJ2ZSBzcGFjZSBmb3IgInRoaXMiCisg
ICAgaW5pdGlhbGl6ZU5leHRQYXJhbWV0ZXIoKTsgLy8gdGhpcworICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBwYXJhbWV0ZXJzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGF1dG8gcGF0dGVy
biA9IHBhcmFtZXRlcnMuYXQoaSk7CisgICAgICAgIFJlZ2lzdGVySUQqIHJlZyA9IGluaXRpYWxp
emVOZXh0UGFyYW1ldGVyKCk7CisgICAgICAgIGlmICghcGF0dGVybi0+aXNCaW5kaW5nTm9kZSgp
KQorICAgICAgICAgICAgbV9kZWNvbnN0cnVjdGVkUGFyYW1ldGVycy5hcHBlbmQoc3RkOjptYWtl
X3BhaXIocmVnLCBwYXR0ZXJuKSk7CiAgICAgfQotCi0gICAgYm9vbCBzaG91bGRDYXB0dXJlQWxs
VGhlVGhpbmdzID0gbV9zaG91bGRFbWl0RGVidWdIb29rcyB8fCBjb2RlQmxvY2stPnVzZXNFdmFs
KCk7Ci0KKyAgICAKKyAgICAvLyBGaWd1cmUgb3V0IHNvbWUgaW50ZXJlc3RpbmcgZmFjdHMgYWJv
dXQgb3VyIGFyZ3VtZW50cy4KICAgICBib29sIGNhcHR1cmVzQW55QXJndW1lbnRCeU5hbWUgPSBm
YWxzZTsKLSAgICBWZWN0b3I8UmVnaXN0ZXJJRCosIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93PiBj
YXB0dXJlZEFyZ3VtZW50czsKLSAgICBpZiAoZnVuY3Rpb25Ob2RlLT5oYXNDYXB0dXJlZFZhcmlh
YmxlcygpIHx8IHNob3VsZENhcHR1cmVBbGxUaGVUaGluZ3MpIHsKKyAgICBpZiAoZnVuY3Rpb25O
b2RlLT5oYXNDYXB0dXJlZFZhcmlhYmxlcygpKSB7CiAgICAgICAgIEZ1bmN0aW9uUGFyYW1ldGVy
cyYgcGFyYW1ldGVycyA9ICpmdW5jdGlvbk5vZGUtPnBhcmFtZXRlcnMoKTsKLSAgICAgICAgY2Fw
dHVyZWRBcmd1bWVudHMucmVzaXplKHBhcmFtZXRlcnMuc2l6ZSgpKTsKICAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBwYXJhbWV0ZXJzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBj
YXB0dXJlZEFyZ3VtZW50c1tpXSA9IDA7CiAgICAgICAgICAgICBhdXRvIHBhdHRlcm4gPSBwYXJh
bWV0ZXJzLmF0KGkpOwogICAgICAgICAgICAgaWYgKCFwYXR0ZXJuLT5pc0JpbmRpbmdOb2RlKCkp
CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBjb25zdCBJZGVudGlmaWVy
JiBpZGVudCA9IHN0YXRpY19jYXN0PGNvbnN0IEJpbmRpbmdOb2RlKj4ocGF0dGVybiktPmJvdW5k
UHJvcGVydHkoKTsKLSAgICAgICAgICAgIGlmICghZnVuY3Rpb25Ob2RlLT5jYXB0dXJlcyhpZGVu
dCkgJiYgIXNob3VsZENhcHR1cmVBbGxUaGVUaGluZ3MpCi0gICAgICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgICAgICBjYXB0dXJlc0FueUFyZ3VtZW50QnlOYW1lID0gdHJ1ZTsKLSAgICAg
ICAgICAgIGNhcHR1cmVkQXJndW1lbnRzW2ldID0gYWRkVmFyKGlkZW50LCBJc1ZhcmlhYmxlLCBJ
c1dhdGNoYWJsZSk7CisgICAgICAgICAgICBjYXB0dXJlc0FueUFyZ3VtZW50QnlOYW1lIHw9IGNh
cHR1cmVzKGlkZW50LmltcGwoKSk7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAoY2FwdHVy
ZXNBbnlBcmd1bWVudEJ5TmFtZSAmJiAhc2hvdWxkVGVhck9mZkFyZ3VtZW50c0VhZ2VybHkoKSkg
ewotICAgICAgICBzaXplX3QgcGFyYW1ldGVyQ291bnQgPSBtX3N5bWJvbFRhYmxlLT5wYXJhbWV0
ZXJDb3VudCgpOwotICAgICAgICBhdXRvIHNsb3dBcmd1bWVudHMgPSBzdGQ6Om1ha2VfdW5pcXVl
PFNsb3dBcmd1bWVudFtdPihwYXJhbWV0ZXJDb3VudCk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgcGFyYW1ldGVyQ291bnQ7ICsraSkgewotICAgICAgICAgICAgaWYgKCFjYXB0dXJl
ZEFyZ3VtZW50c1tpXSkgewotICAgICAgICAgICAgICAgIEFTU0VSVChzbG93QXJndW1lbnRzW2ld
LnN0YXR1cyA9PSBTbG93QXJndW1lbnQ6Ok5vcm1hbCk7Ci0gICAgICAgICAgICAgICAgc2xvd0Fy
Z3VtZW50c1tpXS5pbmRleCA9IENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXQoaSk7Ci0gICAgICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBzbG93QXJndW1l
bnRzW2ldLnN0YXR1cyA9IFNsb3dBcmd1bWVudDo6Q2FwdHVyZWQ7Ci0gICAgICAgICAgICBzbG93
QXJndW1lbnRzW2ldLmluZGV4ID0gY2FwdHVyZWRBcmd1bWVudHNbaV0tPmluZGV4KCk7Ci0gICAg
ICAgIH0KLSAgICAgICAgbV9zeW1ib2xUYWJsZS0+c2V0U2xvd0FyZ3VtZW50cyhXVEY6Om1vdmUo
c2xvd0FyZ3VtZW50cykpOwotICAgIH0KLQotICAgIFJlZ2lzdGVySUQqIGNhbGxlZVJlZ2lzdGVy
ID0gcmVzb2x2ZUNhbGxlZShmdW5jdGlvbk5vZGUpOyAvLyBNYXkgcHVzaCB0byB0aGUgc2NvcGUg
Y2hhaW4gYW5kL29yIGFkZCBhIGNhcHR1cmVkIHZhci4KLQotICAgIGNvbnN0IERlY2xhcmF0aW9u
U3RhY2tzOjpGdW5jdGlvblN0YWNrJiBmdW5jdGlvblN0YWNrID0gZnVuY3Rpb25Ob2RlLT5mdW5j
dGlvblN0YWNrKCk7Ci0gICAgY29uc3QgRGVjbGFyYXRpb25TdGFja3M6OlZhclN0YWNrJiB2YXJT
dGFjayA9IGZ1bmN0aW9uTm9kZS0+dmFyU3RhY2soKTsKLSAgICBJZGVudGlmaWVyU2V0IHRlc3Q7
Ci0KLSAgICAvLyBDYXB0dXJlZCB2YXJpYWJsZXMgYW5kIGZ1bmN0aW9ucyBnbyBmaXJzdCBzbyB0
aGF0IGFjdGl2YXRpb25zIGRvbid0IGhhdmUKLSAgICAvLyB0byBzdGVwIG92ZXIgdGhlIG5vbi1j
YXB0dXJlZCBsb2NhbHMgdG8gbWFyayB0aGVtLgotICAgIGlmIChmdW5jdGlvbk5vZGUtPmhhc0Nh
cHR1cmVkVmFyaWFibGVzKCkgfHwgc2hvdWxkQ2FwdHVyZUFsbFRoZVRoaW5ncykgewotICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJvdW5kUGFyYW1ldGVyUHJvcGVydGllcy5zaXplKCk7
IGkrKykgewotICAgICAgICAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBib3VuZFBhcmFt
ZXRlclByb3BlcnRpZXNbaV07Ci0gICAgICAgICAgICBpZiAoZnVuY3Rpb25Ob2RlLT5jYXB0dXJl
cyhpZGVudCkgfHwgc2hvdWxkQ2FwdHVyZUFsbFRoZVRoaW5ncykKLSAgICAgICAgICAgICAgICBh
ZGRWYXIoaWRlbnQsIElzVmFyaWFibGUsIElzV2F0Y2hhYmxlKTsKLSAgICAgICAgfQotICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZ1bmN0aW9uU3RhY2suc2l6ZSgpOyArK2kpIHsKLSAg
ICAgICAgICAgIEZ1bmN0aW9uQm9keU5vZGUqIGZ1bmN0aW9uID0gZnVuY3Rpb25TdGFja1tpXTsK
LSAgICAgICAgICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gZnVuY3Rpb24tPmlkZW50KCk7
Ci0gICAgICAgICAgICBpZiAoZnVuY3Rpb25Ob2RlLT5jYXB0dXJlcyhpZGVudCkgfHwgc2hvdWxk
Q2FwdHVyZUFsbFRoZVRoaW5ncykgewotICAgICAgICAgICAgICAgIG1fZnVuY3Rpb25zLmFkZChp
ZGVudC5pbXBsKCkpOwotICAgICAgICAgICAgICAgIGVtaXROZXdGdW5jdGlvbihzY3JhdGNoLCBm
dW5jdGlvbik7Ci0gICAgICAgICAgICAgICAgaW5pdGlhbGl6ZUNhcHR1cmVkVmFyaWFibGUoYWRk
VmFyKGlkZW50LCBJc1ZhcmlhYmxlLCBJc1dhdGNoYWJsZSksIGlkZW50LCBzY3JhdGNoKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHZh
clN0YWNrLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVu
dCA9IHZhclN0YWNrW2ldLmZpcnN0OwotICAgICAgICAgICAgaWYgKGZ1bmN0aW9uTm9kZS0+Y2Fw
dHVyZXMoaWRlbnQpIHx8IHNob3VsZENhcHR1cmVBbGxUaGVUaGluZ3MpCi0gICAgICAgICAgICAg
ICAgYWRkVmFyKGlkZW50LCAodmFyU3RhY2tbaV0uc2Vjb25kICYgRGVjbGFyYXRpb25TdGFja3M6
OklzQ29uc3RhbnQpID8gSXNDb25zdGFudCA6IElzVmFyaWFibGUsIElzV2F0Y2hhYmxlKTsKLSAg
ICAgICAgfQorICAgIGlmIChjYXB0dXJlc0FueUFyZ3VtZW50QnlOYW1lKQorICAgICAgICBBU1NF
UlQobV9sZXhpY2FsRW52aXJvbm1lbnRSZWdpc3Rlcik7CisgICAgCisgICAgLy8gTmVlZCB0byBr
bm93IHdoYXQgb3VyIGZ1bmN0aW9ucyBhcmUgY2FsbGVkLiBQYXJhbWV0ZXJzIGhhdmUgc29tZSBn
b29meSBiZWhhdmlvcnMgd2hlbiBpdAorICAgIC8vIGNvbWVzIHRvIGZ1bmN0aW9ucyBvZiB0aGUg
c2FtZSBuYW1lLgorICAgIGZvciAoRnVuY3Rpb25Cb2R5Tm9kZSogZnVuY3Rpb24gOiBmdW5jdGlv
bk5vZGUtPmZ1bmN0aW9uU3RhY2soKSkKKyAgICAgICAgbV9mdW5jdGlvbnMuYWRkKGZ1bmN0aW9u
LT5pZGVudCgpLmltcGwoKSk7CisgICAgCisgICAgYm9vbCBuZWVkc0FyZ3VtZW50cyA9IGZ1bmN0
aW9uTm9kZS0+dXNlc0FyZ3VtZW50cygpIHx8IGNvZGVCbG9jay0+dXNlc0V2YWwoKTsKKyAgICAK
KyAgICBpZiAobmVlZHNBcmd1bWVudHMpIHsKKyAgICAgICAgLy8gQ3JlYXRlIHRoZSBhcmd1bWVu
dHMgb2JqZWN0IG5vdy4gV2UgbWF5IHB1dCB0aGUgYXJndW1lbnRzIG9iamVjdCBpbnRvIHRoZSBh
Y3RpdmF0aW9uIGlmCisgICAgICAgIC8vIGl0IGlzIGNhcHR1cmVkLiBFaXRoZXIgd2F5LCB3ZSBj
cmVhdGUgdHdvIGFyZ3VtZW50cyBvYmplY3QgdmFyaWFibGVzOiBvbmUgaXMgb3VyCisgICAgICAg
IC8vIHByaXZhdGUgdmFyaWFibGUgdGhhdCBpcyBpbW11dGFibGUsIGFuZCBhbm90aGVyIHRoYXQg
aXMgdGhlIHVzZXItdmlzaWJsZSB2YXJpYWJsZS4gVGhlCisgICAgICAgIC8vIGltbXV0YWJsZSBv
bmUgaXMgb25seSB1c2VkIGhlcmUsIG9yIGR1cmluZyBmb3JtYWwgcGFyYW1ldGVyIHJlc29sdXRp
b25zIGlmIHdlIG9wdCBmb3IKKyAgICAgICAgLy8gRGlyZWN0QXJndW1lbnRzLgorICAgICAgICAK
KyAgICAgICAgbV9hcmd1bWVudHNSZWdpc3RlciA9IGFkZFZhcigpOworICAgICAgICBtX2FyZ3Vt
ZW50c1JlZ2lzdGVyLT5yZWYoKTsKICAgICB9Ci0KLSAgICBtX3N5bWJvbFRhYmxlLT5zZXRDYXB0
dXJlRW5kKHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGNvZGVCbG9jay0+bV9udW1WYXJzKS5vZmZz
ZXQoKSk7Ci0KLSAgICBib29sIGNhbkxhemlseUNyZWF0ZUZ1bmN0aW9ucyA9ICFmdW5jdGlvbk5v
ZGUtPm5lZWRzQWN0aXZhdGlvbkZvck1vcmVUaGFuVmFyaWFibGVzKCkgJiYgIW1fc2hvdWxkRW1p
dERlYnVnSG9va3MgJiYgIW1fdm0tPnR5cGVQcm9maWxlcigpICYmICFtX3ZtLT5jb250cm9sRmxv
d1Byb2ZpbGVyKCk7Ci0gICAgbV9maXJzdExhenlGdW5jdGlvbiA9IGNvZGVCbG9jay0+bV9udW1W
YXJzOwotICAgIGlmICghc2hvdWxkQ2FwdHVyZUFsbFRoZVRoaW5ncykgewotICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGZ1bmN0aW9uU3RhY2suc2l6ZSgpOyArK2kpIHsKLSAgICAgICAg
ICAgIEZ1bmN0aW9uQm9keU5vZGUqIGZ1bmN0aW9uID0gZnVuY3Rpb25TdGFja1tpXTsKLSAgICAg
ICAgICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gZnVuY3Rpb24tPmlkZW50KCk7Ci0gICAg
ICAgICAgICBpZiAoIWZ1bmN0aW9uTm9kZS0+Y2FwdHVyZXMoaWRlbnQpKSB7Ci0gICAgICAgICAg
ICAgICAgbV9mdW5jdGlvbnMuYWRkKGlkZW50LmltcGwoKSk7Ci0gICAgICAgICAgICAgICAgUmVm
UHRyPFJlZ2lzdGVySUQ+IHJlZyA9IGFkZFZhcihpZGVudCwgSXNWYXJpYWJsZSwgTm90V2F0Y2hh
YmxlKTsKLSAgICAgICAgICAgICAgICAvLyBEb24ndCBsYXppbHkgY3JlYXRlIGZ1bmN0aW9ucyB0
aGF0IG92ZXJyaWRlIHRoZSBuYW1lICdhcmd1bWVudHMnCi0gICAgICAgICAgICAgICAgLy8gYXMg
dGhpcyB3b3VsZCBjb21wbGljYXRlIGxhenkgaW5zdGFudGlhdGlvbiBvZiBhY3R1YWwgYXJndW1l
bnRzLgotICAgICAgICAgICAgICAgIGlmICghY2FuTGF6aWx5Q3JlYXRlRnVuY3Rpb25zIHx8IGlk
ZW50ID09IHByb3BlcnR5TmFtZXMoKS5hcmd1bWVudHMpCi0gICAgICAgICAgICAgICAgICAgIGVt
aXROZXdGdW5jdGlvbihyZWcuZ2V0KCksIGZ1bmN0aW9uKTsKLSAgICAgICAgICAgICAgICBlbHNl
IHsKLSAgICAgICAgICAgICAgICAgICAgZW1pdEluaXRMYXp5UmVnaXN0ZXIocmVnLmdldCgpKTsK
LSAgICAgICAgICAgICAgICAgICAgbV9sYXp5RnVuY3Rpb25zLnNldChyZWctPnZpcnR1YWxSZWdp
c3RlcigpLnRvTG9jYWwoKSwgZnVuY3Rpb24pOworICAgIAorICAgIGlmIChuZWVkc0FyZ3VtZW50
cyAmJiAhY29kZUJsb2NrLT5pc1N0cmljdE1vZGUoKSkgeworICAgICAgICAvLyBJZiB3ZSBjYXB0
dXJlZCBhbnkgZm9ybWFsIHBhcmFtZXRlciBieSBuYW1lLCB0aGVuIHdlIHVzZSBTY29wZWRBcmd1
bWVudHMuIE90aGVyd2lzZSB3ZQorICAgICAgICAvLyB1c2UgRGlyZWN0QXJndW1lbnRzLiBXaXRo
IFNjb3BlZEFyZ3VtZW50cywgd2UgbGlmdCBhbGwgb2Ygb3VyIGFyZ3VtZW50cyBpbnRvIHRoZQor
ICAgICAgICAvLyBhY3RpdmF0aW9uLgorICAgICAgICAKKyAgICAgICAgaWYgKGNhcHR1cmVzQW55
QXJndW1lbnRCeU5hbWUpIHsKKyAgICAgICAgICAgIG1fc3ltYm9sVGFibGUtPnNldEFyZ3VtZW50
c0xlbmd0aCh2bSwgcGFyYW1ldGVycy5zaXplKCkpOworICAgICAgICAgICAgCisgICAgICAgICAg
ICAvLyBGb3IgZWFjaCBwYXJhbWV0ZXIsIHdlIGhhdmUgdHdvIHBvc3NpYmlsaXRpZXM6CisgICAg
ICAgICAgICAvLyBFaXRoZXIgaXQncyBhIGJpbmRpbmcgbm9kZSB3aXRoIG5vIGZ1bmN0aW9uIG92
ZXJsYXAsIGluIHdoaWNoIGNhc2UgaXQgZ2V0cyBhIG5hbWUKKyAgICAgICAgICAgIC8vIGluIHRo
ZSBzeW1ib2wgdGFibGUgLSBvciBpdCBqdXN0IGdldHMgc3BhY2UgcmVzZXJ2ZWQgaW4gdGhlIHN5
bWJvbCB0YWJsZS4gRWl0aGVyCisgICAgICAgICAgICAvLyB3YXkgd2UgbGlmdCB0aGUgdmFsdWUg
aW50byB0aGUgc2NvcGUuCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcGFy
YW1ldGVycy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgICAgIFNjb3BlT2Zmc2V0IG9mZnNl
dCA9IG1fc3ltYm9sVGFibGUtPnRha2VOZXh0U2NvcGVPZmZzZXQoKTsKKyAgICAgICAgICAgICAg
ICBpZiAoU3RyaW5nSW1wbCogbmFtZSA9IHZpc2libGVOYW1lRm9yUGFyYW1ldGVyKHBhcmFtZXRl
cnMuYXQoaSkpKSB7CisgICAgICAgICAgICAgICAgICAgIFN5bWJvbFRhYmxlRW50cnkgZW50cnko
b2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgICAgLy8gU3RvcmVzIHRvIHRoZXNlIHZhcmlhYmxl
cyB2aWEgdGhlIFNjb3BlZEFyZ3VtZW50cyBvYmplY3Qgd2lsbCBub3QgZG8KKyAgICAgICAgICAg
ICAgICAgICAgLy8gbm90aWZ5V3JpdGUoKSwgc2luY2UgdGhhdCB3b3VsZCBiZSBjdW1iZXJzb21l
LiBBbHNvLCB3YXRjaGluZyBmb3JtYWwKKyAgICAgICAgICAgICAgICAgICAgLy8gcGFyYW1ldGVy
cyB3aGVuICJhcmd1bWVudHMiIGlzIGluIHBsYXkgaXMgdW5saWtlbHkgdG8gYmUgc3VwZXIgcHJv
Zml0YWJsZS4KKyAgICAgICAgICAgICAgICAgICAgLy8gU28sIHdlIGp1c3QgZGlzYWJsZSBpdC4K
KyAgICAgICAgICAgICAgICAgICAgZW50cnkuZGlzYWJsZVdhdGNoaW5nKCk7CisgICAgICAgICAg
ICAgICAgICAgIG1fc3ltYm9sVGFibGUtPnNldChuYW1lLCBvZmZzZXQpOwogICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBhZGRPcGNvZGUob3BfcHV0X3RvX3Njb3BlKTsKKyAgICAg
ICAgICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQobV9sZXhpY2FsRW52aXJvbm1lbnRSZWdp
c3Rlci0+aW5kZXgoKSk7CisgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKFVJ
TlRfTUFYKTsKKyAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQodmlydHVhbFJl
Z2lzdGVyRm9yQXJndW1lbnQoMSArIGkpLm9mZnNldCgpKTsKKyAgICAgICAgICAgICAgICBpbnN0
cnVjdGlvbnMoKS5hcHBlbmQoUmVzb2x2ZU1vZGVBbmRUeXBlKFRocm93SWZOb3RGb3VuZCwgTG9j
YWxDbG9zdXJlVmFyKSk7CisgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKDAp
OworICAgICAgICAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChvZmZzZXQub2Zmc2V0KCkp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBUaGlzIGNyZWF0
ZXMgYSBzY29wZWQgYXJndW1lbnRzIG9iamVjdCBhbmQgY29waWVzIHRoZSBvdmVyZmxvdyBhcmd1
bWVudHMgaW50byB0aGUKKyAgICAgICAgICAgIC8vIHNjb3BlLiBJdCdzIHRoZSBlcXVpdmFsZW50
IG9mIGNhbGxpbmcgU2NvcGVkQXJndW1lbnRzOjpjcmVhdGVCeUNvcHlpbmcoKS4KKyAgICAgICAg
ICAgIGVtaXRPcGNvZGUob3BfY3JlYXRlX3Njb3BlZF9hcmd1bWVudHMpOworICAgICAgICAgICAg
aW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKG1fYXJndW1lbnRzUmVnaXN0ZXItPmluZGV4KCkpOworICAg
ICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKG1fbGV4aWNhbEVudmlyb25tZW50UmVnaXN0
ZXItPmluZGV4KCkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gV2UncmUgZ29p
bmcgdG8gcHV0IGFsbCBwYXJhbWV0ZXJzIGludG8gdGhlIERpcmVjdEFyZ3VtZW50cyBvYmplY3Qu
IEZpcnN0IGVuc3VyZQorICAgICAgICAgICAgLy8gdGhhdCB0aGUgc3ltYm9sIHRhYmxlIGtub3dz
IHRoYXQgdGhpcyBpcyBoYXBwZW5pbmcuCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgcGFyYW1ldGVycy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgICAgIGlmIChTdHJp
bmdJbXBsKiBuYW1lID0gdmlzaWJsZU5hbWVGb3JQYXJhbWV0ZXIocGFyYW1ldGVycy5hdChpKSkp
CisgICAgICAgICAgICAgICAgICAgIG1fc3ltYm9sVGFibGUtPnNldChuYW1lLCBDYXB0dXJlZEFy
Z3VtZW50c09mZnNldChpKSk7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIGVtaXRPcGNvZGUob3BfY3JlYXRlX2RpcmVjdF9hcmd1bWVudHMpOworICAgICAgICAgICAg
aW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKG1fYXJndW1lbnRzUmVnaXN0ZXItPmluZGV4KCkpOwogICAg
ICAgICB9Ci0gICAgICAgIG1fbGFzdExhenlGdW5jdGlvbiA9IGNhbkxhemlseUNyZWF0ZUZ1bmN0
aW9ucyA/IGNvZGVCbG9jay0+bV9udW1WYXJzIDogbV9maXJzdExhenlGdW5jdGlvbjsKLSAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBib3VuZFBhcmFtZXRlclByb3BlcnRpZXMuc2l6ZSgp
OyBpKyspIHsKLSAgICAgICAgICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gYm91bmRQYXJh
bWV0ZXJQcm9wZXJ0aWVzW2ldOwotICAgICAgICAgICAgaWYgKCFmdW5jdGlvbk5vZGUtPmNhcHR1
cmVzKGlkZW50KSkKLSAgICAgICAgICAgICAgICBhZGRWYXIoaWRlbnQsIElzVmFyaWFibGUsIElz
V2F0Y2hhYmxlKTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBDcmVhdGUgdGhlIGZvcm1hbCBw
YXJhbWV0ZXJzIHRoZSBub3JtYWwgd2F5LiBBbnkgb2YgdGhlbSBjb3VsZCBiZSBjYXB0dXJlZCwg
b3Igbm90LiBJZgorICAgICAgICAvLyBjYXB0dXJlZCwgbGlmdCB0aGVtIGludG8gdGhlIHNjb3Bl
LgorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcGFyYW1ldGVycy5zaXplKCk7ICsr
aSkgeworICAgICAgICAgICAgU3RyaW5nSW1wbCogbmFtZSA9IHZpc2libGVOYW1lRm9yUGFyYW1l
dGVyKHBhcmFtZXRlcnMuYXQoaSkpOworICAgICAgICAgICAgaWYgKCFuYW1lKQorICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoIWNhcHR1cmVz
KG5hbWUpKSB7CisgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyB0aGUgZWFzeSBjYXNlIC0ganVz
dCB0ZWxsIHRoZSBzeW1ib2wgdGFibGUgYWJvdXQgdGhlIGFyZ3VtZW50LiBJdCB3aWxsCisgICAg
ICAgICAgICAgICAgLy8gYmUgYWNjZXNzZWQgZGlyZWN0bHkuCisgICAgICAgICAgICAgICAgbV9z
eW1ib2xUYWJsZS0+c2V0KG5hbWUsIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDEgKyBpKSk7
CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIFNjb3BlT2Zmc2V0IG9mZnNldCA9IG1fc3ltYm9sVGFibGUtPnRha2VOZXh0
U2NvcGVPZmZzZXQoKTsKKyAgICAgICAgICAgIElkZW50aWZpZXImIGlkZW50ID0KKyAgICAgICAg
ICAgICAgICBzdGF0aWNfY2FzdDxjb25zdCBCaW5kaW5nTm9kZSo+KHBhcmFtZXRlcnMuYXQoaSkp
LT5ib3VuZFByb3BlcnR5KCk7CisgICAgICAgICAgICBtX3N5bWJvbFRhYmxlLT5zZXQobmFtZSwg
b2Zmc2V0KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgYWRkT3Bjb2RlKG9wX3B1dF90b19z
Y29wZSk7CisgICAgICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQobV9sZXhpY2FsRW52aXJv
bm1lbnRSZWdpc3Rlci0+aW5kZXgoKSk7CisgICAgICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBl
bmQoYWRkQ29uc3RhbnQoaWRlbnQpKTsKKyAgICAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVu
ZCgmcmVnaXN0ZXJGb3IodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMSArIGkpKSk7CisgICAg
ICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoUmVzb2x2ZU1vZGVBbmRUeXBlKFRocm93SWZO
b3RGb3VuZCwgTG9jYWxDbG9zdXJlVmFyKSk7CisgICAgICAgICAgICBpbnN0cnVjdGlvbnMoKS5h
cHBlbmQoMCk7CisgICAgICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQob2Zmc2V0Lm9mZnNl
dCgpKTsKICAgICAgICAgfQotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHZhclN0YWNr
LnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IHZh
clN0YWNrW2ldLmZpcnN0OwotICAgICAgICAgICAgaWYgKCFmdW5jdGlvbk5vZGUtPmNhcHR1cmVz
KGlkZW50KSkKLSAgICAgICAgICAgICAgICBhZGRWYXIoaWRlbnQsICh2YXJTdGFja1tpXS5zZWNv
bmQgJiBEZWNsYXJhdGlvblN0YWNrczo6SXNDb25zdGFudCkgPyBJc0NvbnN0YW50IDogSXNWYXJp
YWJsZSwgTm90V2F0Y2hhYmxlKTsKKyAgICB9CisgICAgCisgICAgaWYgKG5lZWRzQXJndW1lbnRz
ICYmIGNvZGVCbG9jay0+aXNTdHJpY3RNb2RlKCkpIHsKKyAgICAgICAgLy8gQWxsb2NhdGUgYW4g
b3V0LW9mLWJhbmRzIGFyZ3VtZW50cyBvYmplY3QuCisgICAgICAgIGFkZE9wY29kZShvcF9jcmVh
dGVfb3V0X29mX2JhbmRfYXJndW1lbnRzKTsKKyAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5k
KG1fYXJndWVudHNSZWdpc3Rlci0+aW5kZXgoKSk7CisgICAgfQorICAgIAorICAgIC8vIE5vdyBk
ZWNsYXJlIGFsbCB2YXJpYWJsZXMuCisgICAgZm9yIChjb25zdCBJZGVudGlmaWVyJiBpZGVudCA6
IGJvdW5kUGFyYW1ldGVyUHJvcGVydGllcykKKyAgICAgICAgY3JlYXRlVmFyaWFibGUoaWRlbnQs
IHZhcktpbmQoaWRlbnQuaW1wbCgpKSwgSXNWYXJpYWJsZSk7CisgICAgZm9yIChGdW5jdGlvbkJv
ZHlOb2RlKiBmdW5jdGlvbiA6IGZ1bmN0aW9uTm9kZS0+ZnVuY3Rpb25TdGFjaygpKSB7CisgICAg
ICAgIGNyZWF0ZVZhcmlhYmxlKGRlbnQsIHZhcktpbmQoaWRlbnQuaW1wbCgpKSwgSXNWYXJpYWJs
ZSk7CisgICAgICAgIG1fZnVuY3Rpb25zVG9Jbml0aWFsaXplLmFwcGVuZChmdW5jdGlvbik7Cisg
ICAgfQorICAgIGZvciAoYXV0byYgZW50cnkgOiBmdW5jdGlvbk5vZGUtPnZhclN0YWNrKCkpIHsK
KyAgICAgICAgY3JlYXRlVmFyaWFibGUoCisgICAgICAgICAgICBlbnRyeS5maXJzdCwgdmFyS2lu
ZChlbnRyeS5maXJzdC5pbXBsKCkpLAorICAgICAgICAgICAgKGVudHJ5LnNlY29uZCAmIERlY2xh
cmF0aW9uU3RhY2tzOjpJc0NvbnN0YW50KSA/IElzQ29uc3RhbnQgOiBJc1ZhcmlhYmxlKTsKKyAg
ICB9CisgICAgCisgICAgLy8gVGhlcmUgYXJlIHNvbWUgdmFyaWFibGVzIHRoYXQgbmVlZCB0byBi
ZSBwcmVpbml0aWFsaXplZCB0byBzb21ldGhpbmcgb3RoZXIgdGhhbiBVbmRlZmluZWQ6CisgICAg
Ly8KKyAgICAvLyAtICJhcmd1bWVudHMiOiB1bmxlc3MgaXQncyB1c2VkIGFzIGEgZnVuY3Rpb24g
b3IgcGFyYW1ldGVyLCB0aGlzIHNob3VsZCByZWZlciB0byB0aGUKKyAgICAvLyAgIGFyZ3VtZW50
cyBvYmplY3QuCisgICAgLy8KKyAgICAvLyAtIGNhbGxlZTogdW5sZXNzIGl0J3MgdXNlZCBhcyBh
IHZhciwgZnVuY3Rpb24sIG9yIHBhcmFtZXRlciwgdGhpcyBzaG91bGQgcmVmZXIgdG8gdGhlCisg
ICAgLy8gICBjYWxsZWUgKGkuZS4gb3VyIGZ1bmN0aW9uKS4KKyAgICAvLworICAgIC8vIC0gZnVu
Y3Rpb25zOiB0aGVzZSBhbHdheXMgb3ZlcnJpZGUgZXZlcnl0aGluZyBlbHNlLgorICAgIC8vCisg
ICAgLy8gVGhlIG1vc3QgbG9naWNhbCB3YXkgdG8gZG8gYWxsIG9mIHRoaXMgaXMgdG8gaW5pdGlh
bGl6ZSBub25lIG9mIHRoZSB2YXJpYWJsZXMgdW50aWwgbm93LAorICAgIC8vIGFuZCB0aGVuIGlu
aXRpYWxpemUgdGhlbSBpbiBCeXRlY29kZUdlbmVyYXRvcjo6Z2VuZXJhdGUoKSBpbiBzdWNoIGFu
IG9yZGVyIHRoYXQgdGhlIHJ1bGVzCisgICAgLy8gZm9yIGhvdyB0aGVzZSB0aGluZ3Mgb3ZlcnJp
ZGUgZWFjaCBvdGhlciBlbmQgdXAgaG9sZGluZy4gV2Ugd291bGQgaW5pdGlhbGl6ZSB0aGUgY2Fs
bGVlCisgICAgLy8gZmlyc3QsIHRoZW4gImFyZ3VtZW50cyIsIHRoZW4gYWxsIGFyZ3VtZW50cywg
dGhlbiB0aGUgZnVuY3Rpb25zLgorICAgIC8vCisgICAgLy8gQnV0IHNvbWUgYXJndW1lbnRzIGFy
ZSBhbHJlYWR5IGluaXRpYWxpemVkIGJ5IGRlZmF1bHQsIHNpbmNlIGlmIHRoZXkgYXJlbid0IGNh
cHR1cmVkIGFuZCB3ZQorICAgIC8vIGRvbid0IGhhdmUgImFyZ3VtZW50cyIgdGhlbiB3ZSBqdXN0
IHBvaW50IHRoZSBzeW1ib2wgdGFibGUgYXQgdGhlIHN0YWNrIHNsb3Qgb2YgdGhvc2UKKyAgICAv
LyBhcmd1bWVudHMuIFdlIGVuZCB1cCBpbml0aWFsaXppbmcgdGhlIHJlc3Qgb2YgdGhlIGFyZ3Vt
ZW50cyB0aGF0IGhhdmUgYW4gdW5jb21wbGljYXRlZAorICAgIC8vIGJpbmRpbmcgKGkuZS4gZG9u
J3QgaW52b2x2ZSBkZWNvbnN0cnVjdGlvbikgYWJvdmUgd2hlbiBmaWd1cmluZyBvdXQgaG93IHRv
IGxheSB0aGVtIG91dCwKKyAgICAvLyBiZWNhdXNlIHRoYXQncyBqdXN0IHRoZSBzaW1wbGVzdCB0
aGluZy4gVGhpcyBtZWFucyB0aGF0IHdoZW4gd2UgaW5pdGlhbGl6ZSB0aGVtLCB3ZSBoYXZlIHRv
CisgICAgLy8gd2F0Y2ggb3V0IGZvciB0aGUgdGhpbmdzIHRoYXQgb3ZlcnJpZGUgYXJndW1lbnRz
IChuYW1lbHksIGZ1bmN0aW9ucykuCisgICAgLy8KKyAgICAvLyBXZSBhbHNvIGluaXRpYWxpemUg
Y2FsbGVlIGhlcmUgYXMgd2VsbCwganVzdCBiZWNhdXNlIGl0J3Mgc28gd2VpcmQuIFdlIGtub3cg
d2hldGhlciB3ZSB3YW50CisgICAgLy8gdG8gZG8gdGhpcyBiZWNhdXNlIHdlIGNhbiBqdXN0IGNo
ZWNrIGlmIGl0J3MgaW4gdGhlIHN5bWJvbCB0YWJsZS4KKyAgICBpZiAoZnVuY3Rpb25OYW1lSXNJ
blNjb3BlKGZ1bmN0aW9uTm9kZS0+aWRlbnQoKSwgZnVuY3Rpb25Ob2RlLT5mdW5jdGlvbk1vZGUo
KSkKKyAgICAgICAgJiYgIWZ1bmN0aW9uTmFtZVNjb3BlSXNEeW5hbWljKGNvZGVCbG9jay0+dXNl
c0V2YWwoKSwgY29kZUJsb2NrLT5pc1N0cmljdE1vZGUoKSkKKyAgICAgICAgJiYgbV9zeW1ib2xU
YWJsZS0+Z2V0KGZ1bmN0aW9uTm9kZS0+aWRlbnQoKSkuaXNOdWxsKCkpIHsKKyAgICAgICAgaWYg
KGNhcHR1cmVzKGZ1bmN0aW9uTm9kZS0+aWRlbnQoKS5pbXBsKCkpKSB7CisgICAgICAgICAgICBT
Y29wZU9mZnNldCBvZmZzZXQgPSBtX3N5bWJvbFRhYmxlLT50YWtlTmV4dFNjb3BlT2Zmc2V0KCk7
CisgICAgICAgICAgICBtX3N5bWJvbFRhYmxlLT5hZGQoCisgICAgICAgICAgICAgICAgZnVuY3Rp
b25Ob2RlLT5pZGVudCgpLmltcGwoKSwKKyAgICAgICAgICAgICAgICBTeW1ib2xUYWJsZUVudHJ5
KFZhck9mZnNldChvZmZzZXQpLCBSZWFkT25seSkpOworICAgICAgICAgICAgCisgICAgICAgICAg
ICBhZGRPcGNvZGUob3BfcHV0X3RvX3Njb3BlKTsKKyAgICAgICAgICAgIGluc3RydWN0aW9ucygp
LmFwcGVuZChtX2xleGljYWxFbnZpcm9ubWVudFJlZ2lzdGVyLT5pbmRleCgpKTsKKyAgICAgICAg
ICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChhZGRDb25zdGFudChmdW5jdGlvbk5vZGUtPmlkZW50
KCkpKTsKKyAgICAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChtX2NhbGxlZVJlZ2lzdGVy
LmluZGV4KCkpOworICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKFJlc29sdmVNb2Rl
QW5kVHlwZShUaHJvd0lmTm90Rm91bmQsIExvY2FsQ2xvc3VyZVZhcikpOworICAgICAgICAgICAg
aW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKDApOworICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBw
ZW5kKG9mZnNldC5vZmZzZXQoKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX3N5
bWJvbFRhYmxlLT5hZGQoCisgICAgICAgICAgICAgICAgZnVuY3Rpb25Ob2RlLT5pZGVudCgpLmlt
cGwoKSwKKyAgICAgICAgICAgICAgICBTeW1ib2xUYWJsZUVudHJ5KFZhck9mZnNldChtX2NhbGxl
ZVJlZ2lzdGVyLnZpcnR1YWxSZWdpc3RlcigpKSwgUmVhZE9ubHkpKTsKICAgICAgICAgfQogICAg
IH0KLQotICAgIGlmIChtX3N5bWJvbFRhYmxlLT5jYXB0dXJlQ291bnQoKSkKLSAgICAgICAgZW1p
dE9wY29kZShvcF90b3VjaF9lbnRyeSk7CiAgICAgCi0gICAgbV9wYXJhbWV0ZXJzLmdyb3cocGFy
YW1ldGVycy5zaXplKCkgKyAxKTsgLy8gcmVzZXJ2ZSBzcGFjZSBmb3IgInRoaXMiCi0KLSAgICAv
LyBBZGQgInRoaXMiIGFzIGEgcGFyYW1ldGVyCi0gICAgaW50IG5leHRQYXJhbWV0ZXJJbmRleCA9
IENhbGxGcmFtZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCk7Ci0gICAgbV90aGlzUmVnaXN0ZXIuc2V0
SW5kZXgobmV4dFBhcmFtZXRlckluZGV4KyspOwotICAgIG1fY29kZUJsb2NrLT5hZGRQYXJhbWV0
ZXIoKTsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcGFyYW1ldGVycy5zaXplKCk7ICsr
aSwgKytuZXh0UGFyYW1ldGVySW5kZXgpIHsKLSAgICAgICAgaW50IGluZGV4ID0gbmV4dFBhcmFt
ZXRlckluZGV4OwotICAgICAgICBhdXRvIHBhdHRlcm4gPSBwYXJhbWV0ZXJzLmF0KGkpOwotICAg
ICAgICBpZiAoIXBhdHRlcm4tPmlzQmluZGluZ05vZGUoKSkgewotICAgICAgICAgICAgbV9jb2Rl
QmxvY2stPmFkZFBhcmFtZXRlcigpOwotICAgICAgICAgICAgUmVnaXN0ZXJJRCYgcGFyYW1ldGVy
ID0gcmVnaXN0ZXJGb3IoaW5kZXgpOwotICAgICAgICAgICAgcGFyYW1ldGVyLnNldEluZGV4KGlu
ZGV4KTsKLSAgICAgICAgICAgIG1fZGVjb25zdHJ1Y3RlZFBhcmFtZXRlcnMuYXBwZW5kKHN0ZDo6
bWFrZV9wYWlyKCZwYXJhbWV0ZXIsIHBhdHRlcm4pKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgIC8vIFRoaXMgaXMgb3VyIGZpbmFsIGFjdCBvZiB3ZWlyZG5lc3MuICJhcmd1bWVudHMiIGlz
IG92ZXJyaWRkZW4gYnkgZXZlcnl0aGluZyBleGNlcHQgdGhlCisgICAgLy8gY2FsbGVlLiBXZSBh
ZGQgaXQgdG8gdGhlIHN5bWJvbCB0YWJsZSBpZiBpdCdzIG5vdCBhbHJlYWR5IHRoZXJlIGFuZCBp
dCdzIG5vdCBhbiBhcmd1bWVudC4KKyAgICBpZiAobmVlZHNBcmd1bWVudHMpIHsKKyAgICAgICAg
Ly8gSWYgImFyZ3VtZW50cyIgaXMgb3ZlcnJpZGRlbiBieSBhIGZ1bmN0aW9uIG9yIGRlY29uc3Ry
dWN0ZWQgcGFyYW1ldGVyIG5hbWUsIHRoZW4gaXQncworICAgICAgICAvLyBPSyBmb3IgdXMgdG8g
Y2FsbCBjcmVhdGVWYXJpYWJsZSgpIGJlY2F1c2UgaXQgd29uJ3QgY2hhbmdlIGFueXRoaW5nLiBJ
dCdzIGFsc28gT0sgZm9yCisgICAgICAgIC8vIHVzIHRvIHRoZW0gdGVsbCBCeXRlY29kZUdlbmVy
YXRvcjo6Z2VuZXJhdGUoKSB0byB3cml0ZSB0byBpdCBiZWNhdXNlIGl0IHdpbGwgZG8gc28KKyAg
ICAgICAgLy8gYmVmb3JlIGl0IGluaXRpYWxpemVzIGZ1bmN0aW9ucyBhbmQgZGVjb25zdHJ1Y3Rl
ZCBwYXJhbWV0ZXJzLiBCdXQgaWYgImFyZ3VtZW50cyIgaXMKKyAgICAgICAgLy8gb3ZlcnJpZGRl
biBieSBhICJzaW1wbGUiIGZ1bmN0aW9uIHBhcmFtZXRlciwgdGhlbiB3ZSBoYXZlIHRvIGJhaWw6
IGNyZWF0ZVZhcmlhYmxlKCkKKyAgICAgICAgLy8gd291bGQgYXNzZXJ0IGFuZCBCeXRlY29kZUdl
bmVyYXRvcjo6Z2VuZXJhdGUoKSB3b3VsZCB3cml0ZSB0aGUgImFyZ3VtZW50cyIgYWZ0ZXIgdGhl
CisgICAgICAgIC8vIGFyZ3VtZW50IHZhbHVlIGhhZCBhbHJlYWR5IGJlZW4gcHJvcGVybHkgaW5p
dGlhbGl6ZWQuCisgICAgICAgIAorICAgICAgICBib29sIGhhdmVQYXJhbWV0ZXJOYW1lZEFyZ3Vt
ZW50cyA9IGZhbHNlOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcGFyYW1ldGVy
cy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgU3RyaW5nSW1wbCogbmFtZSA9IHZpc2libGVO
YW1lRm9yUGFyYW1ldGVyKHBhcmFtZXRlcnMuYXQoaSkpOworICAgICAgICAgICAgaWYgKG5hbWUg
PT0gcHJvcGVydHlOYW1lcygpLmFyZ3VtZW50cy5pbXBsKCkpIHsKKyAgICAgICAgICAgICAgICBo
YXZlUGFyYW1ldGVyTmFtZWRBcmd1bWVudHMgPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIGF1dG8gc2ltcGxlUGFyYW1ldGVy
ID0gc3RhdGljX2Nhc3Q8Y29uc3QgQmluZGluZ05vZGUqPihwYXR0ZXJuKTsKLSAgICAgICAgaWYg
KGNhcHR1cmVkQXJndW1lbnRzLnNpemUoKSAmJiBjYXB0dXJlZEFyZ3VtZW50c1tpXSkgewotICAg
ICAgICAgICAgQVNTRVJUKChmdW5jdGlvbk5vZGUtPmhhc0NhcHR1cmVkVmFyaWFibGVzKCkgJiYg
ZnVuY3Rpb25Ob2RlLT5jYXB0dXJlcyhzaW1wbGVQYXJhbWV0ZXItPmJvdW5kUHJvcGVydHkoKSkp
IHx8IHNob3VsZENhcHR1cmVBbGxUaGVUaGluZ3MpOwotICAgICAgICAgICAgaW5kZXggPSBjYXB0
dXJlZEFyZ3VtZW50c1tpXS0+aW5kZXgoKTsKLSAgICAgICAgICAgIFJlZ2lzdGVySUQgb3JpZ2lu
YWwobmV4dFBhcmFtZXRlckluZGV4KTsKLSAgICAgICAgICAgIGluaXRpYWxpemVDYXB0dXJlZFZh
cmlhYmxlKGNhcHR1cmVkQXJndW1lbnRzW2ldLCBzaW1wbGVQYXJhbWV0ZXItPmJvdW5kUHJvcGVy
dHkoKSwgJm9yaWdpbmFsKTsKKyAgICAgICAgCisgICAgICAgIGlmICghaGF2ZVBhcmFtZXRlck5h
bWVkQXJndW1lbnRzKSB7CisgICAgICAgICAgICBjcmVhdGVWYXJpYWJsZSgKKyAgICAgICAgICAg
ICAgICBwcm9wZXJ0eU5hbWVzKCkuYXJndW1lbnRzLCB2YXJLaW5kKHByb3BlcnR5TmFtZXMoKS5h
cmd1bWVudHMuaW1wbCgpKSwgSXNWYXJpYWJsZSk7CisgICAgICAgICAgICBtX25lZWRUb0luaXRp
YWxpemVBcmd1bWVudHMgPSB0cnVlOwogICAgICAgICB9Ci0gICAgICAgIGFkZFBhcmFtZXRlcihz
aW1wbGVQYXJhbWV0ZXItPmJvdW5kUHJvcGVydHkoKSwgaW5kZXgpOwogICAgIH0KLQotICAgIC8v
IFdlIGRlY2xhcmUgdGhlIGNhbGxlZSdzIG5hbWUgbGFzdCBiZWNhdXNlIGl0IHNob3VsZCBsb3Nl
IHRvIGEgdmFyLCBmdW5jdGlvbiwgYW5kL29yIHBhcmFtZXRlciBkZWNsYXJhdGlvbi4KLSAgICBh
ZGRDYWxsZWUoZnVuY3Rpb25Ob2RlLCBjYWxsZWVSZWdpc3Rlcik7CisgICAgCisgICAgaWYgKG1f
c3ltYm9sVGFibGUtPnNjb3BlU2l6ZSgpKQorICAgICAgICBlbWl0T3Bjb2RlKG9wX3RvdWNoX2Vu
dHJ5KTsKIAogICAgIGlmIChpc0NvbnN0cnVjdG9yKCkpIHsKICAgICAgICAgZW1pdENyZWF0ZVRo
aXMoJm1fdGhpc1JlZ2lzdGVyKTsKQEAgLTQwOSw3ICs0NTIsNiBAQCBCeXRlY29kZUdlbmVyYXRv
cjo6Qnl0ZWNvZGVHZW5lcmF0b3IoVk0mCiAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCgw
KTsKICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKDApOwogICAgIH0KLSAgICBtX2xvY2Fs
QXJndW1lbnRzUmVnaXN0ZXIgPSBsb2NhbEFyZ3VtZW50c1JlZ2lzdGVyOwogfQogCiBCeXRlY29k
ZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoVk0mIHZtLCBFdmFsTm9kZSogZXZhbE5vZGUs
IFVubGlua2VkRXZhbENvZGVCbG9jayogY29kZUJsb2NrLCBEZWJ1Z2dlck1vZGUgZGVidWdnZXJN
b2RlLCBQcm9maWxlck1vZGUgcHJvZmlsZXJNb2RlKQpAQCAtNDQ4LDEwOCArNDkwLDIyIEBAIEJ5
dGVjb2RlR2VuZXJhdG9yOjp+Qnl0ZWNvZGVHZW5lcmF0b3IoKQogewogfQogCi1SZWdpc3RlcklE
KiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEluaXRMYXp5UmVnaXN0ZXIoUmVnaXN0ZXJJRCogcmVn
KQorUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmluaXRpYWxpemVOZXh0UGFyYW1ldGVy
KCkKIHsKLSAgICBlbWl0T3Bjb2RlKG9wX2luaXRfbGF6eV9yZWcpOwotICAgIGluc3RydWN0aW9u
cygpLmFwcGVuZChyZWctPmluZGV4KCkpOwotICAgIEFTU0VSVCghaGFzV2F0Y2hhYmxlVmFyaWFi
bGUocmVnLT5pbmRleCgpKSk7Ci0gICAgcmV0dXJuIHJlZzsKLX0KLQotUmVnaXN0ZXJJRCogQnl0
ZWNvZGVHZW5lcmF0b3I6OmluaXRpYWxpemVDYXB0dXJlZFZhcmlhYmxlKFJlZ2lzdGVySUQqIGRz
dCwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBSZWdpc3RlcklEKiB2YWx1ZSkKLXsK
LQotICAgIG1fY29kZUJsb2NrLT5hZGRQcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uKGluc3RydWN0
aW9ucygpLnNpemUoKSk7Ci0gICAgZW1pdE9wY29kZShvcF9wdXRfdG9fc2NvcGUpOwotICAgIGlu
c3RydWN0aW9ucygpLmFwcGVuZChtX2xleGljYWxFbnZpcm9ubWVudFJlZ2lzdGVyLT5pbmRleCgp
KTsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYWRkQ29uc3RhbnQocHJvcGVydHlOYW1lKSk7
Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHZhbHVlLT5pbmRleCgpKTsKLSAgICBpbnN0cnVj
dGlvbnMoKS5hcHBlbmQoUmVzb2x2ZU1vZGVBbmRUeXBlKFRocm93SWZOb3RGb3VuZCwgTG9jYWxD
bG9zdXJlVmFyKS5vcGVyYW5kKCkpOwotICAgIGludCBvcGVyYW5kID0gcmVnaXN0ZXJGb3IoZHN0
LT5pbmRleCgpKS5pbmRleCgpOwotICAgIGJvb2wgaXNXYXRjaGFibGVWYXJpYWJsZSA9IGhhc1dh
dGNoYWJsZVZhcmlhYmxlKG9wZXJhbmQpOwotICAgIEFTU0VSVCghaXNXYXRjaGFibGVWYXJpYWJs
ZSB8fCB3YXRjaGFibGVWYXJpYWJsZUlkZW50aWZpZXIob3BlcmFuZCkgPT0gcHJvcGVydHlOYW1l
KTsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoaXNXYXRjaGFibGVWYXJpYWJsZSk7Ci0gICAg
aW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGRzdC0+aW5kZXgoKSk7Ci0gICAgcmV0dXJuIGRzdDsKLX0K
LQotUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OnJlc29sdmVDYWxsZWUoRnVuY3Rpb25O
b2RlKiBmdW5jdGlvbk5vZGUpCi17Ci0gICAgaWYgKCFmdW5jdGlvbk5hbWVJc0luU2NvcGUoZnVu
Y3Rpb25Ob2RlLT5pZGVudCgpLCBmdW5jdGlvbk5vZGUtPmZ1bmN0aW9uTW9kZSgpKSkKLSAgICAg
ICAgcmV0dXJuIDA7Ci0KLSAgICBpZiAoZnVuY3Rpb25OYW1lU2NvcGVJc0R5bmFtaWMobV9jb2Rl
QmxvY2stPnVzZXNFdmFsKCksIG1fY29kZUJsb2NrLT5pc1N0cmljdE1vZGUoKSkpCi0gICAgICAg
IHJldHVybiAwOwotCi0gICAgbV9jYWxsZWVSZWdpc3Rlci5zZXRJbmRleChKU1N0YWNrOjpDYWxs
ZWUpOwotICAgIGlmIChmdW5jdGlvbk5vZGUtPmNhcHR1cmVzKGZ1bmN0aW9uTm9kZS0+aWRlbnQo
KSkpCi0gICAgICAgIHJldHVybiBpbml0aWFsaXplQ2FwdHVyZWRWYXJpYWJsZShhZGRWYXIoKSwg
ZnVuY3Rpb25Ob2RlLT5pZGVudCgpLCAmbV9jYWxsZWVSZWdpc3Rlcik7Ci0KLSAgICByZXR1cm4g
Jm1fY2FsbGVlUmVnaXN0ZXI7Ci19Ci0KLXZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmFkZENhbGxl
ZShGdW5jdGlvbk5vZGUqIGZ1bmN0aW9uTm9kZSwgUmVnaXN0ZXJJRCogY2FsbGVlUmVnaXN0ZXIp
Ci17Ci0gICAgaWYgKCFjYWxsZWVSZWdpc3RlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgc3lt
Ym9sVGFibGUoKS5hZGQoZnVuY3Rpb25Ob2RlLT5pZGVudCgpLmltcGwoKSwgU3ltYm9sVGFibGVF
bnRyeShjYWxsZWVSZWdpc3Rlci0+aW5kZXgoKSwgUmVhZE9ubHkpKTsKLX0KLQotdm9pZCBCeXRl
Y29kZUdlbmVyYXRvcjo6YWRkUGFyYW1ldGVyKGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBpbnQg
cGFyYW1ldGVySW5kZXgpCi17Ci0gICAgLy8gUGFyYW1ldGVycyBvdmVyd3JpdGUgdmFyIGRlY2xh
cmF0aW9ucywgYnV0IG5vdCBmdW5jdGlvbiBkZWNsYXJhdGlvbnMuCi0gICAgU3RyaW5nSW1wbCog
cmVwID0gaWRlbnQuaW1wbCgpOwotICAgIGlmICghbV9mdW5jdGlvbnMuY29udGFpbnMocmVwKSkg
ewotICAgICAgICBzeW1ib2xUYWJsZSgpLnNldChyZXAsIHBhcmFtZXRlckluZGV4KTsKLSAgICAg
ICAgUmVnaXN0ZXJJRCYgcGFyYW1ldGVyID0gcmVnaXN0ZXJGb3IocGFyYW1ldGVySW5kZXgpOwot
ICAgICAgICBwYXJhbWV0ZXIuc2V0SW5kZXgocGFyYW1ldGVySW5kZXgpOwotICAgIH0KLQotICAg
IC8vIFRvIG1haW50YWluIHRoZSBjYWxsaW5nIGNvbnZlbnRpb24sIHdlIGhhdmUgdG8gYWxsb2Nh
dGUgdW5pcXVlIHNwYWNlIGZvcgotICAgIC8vIGVhY2ggcGFyYW1ldGVyLCBldmVuIGlmIHRoZSBw
YXJhbWV0ZXIgZG9lc24ndCBtYWtlIGl0IGludG8gdGhlIHN5bWJvbCB0YWJsZS4KKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgcmVnID0gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQobV9jb2RlQmxvY2st
Pm51bVBhcmFtZXRlcnMoKSk7CisgICAgUmVnaXN0ZXJJRCYgcGFyYW1ldGVyID0gcmVnaXN0ZXJG
b3IocmVnKTsKKyAgICBwYXJhbWV0ZXIuc2V0SW5kZXgocmVnKTsKICAgICBtX2NvZGVCbG9jay0+
YWRkUGFyYW1ldGVyKCk7CiB9CiAKLWJvb2wgQnl0ZWNvZGVHZW5lcmF0b3I6OndpbGxSZXNvbHZl
VG9Bcmd1bWVudHNSZWdpc3Rlcihjb25zdCBJZGVudGlmaWVyJiBpZGVudCkKLXsKLSAgICBpZiAo
aWRlbnQgIT0gcHJvcGVydHlOYW1lcygpLmFyZ3VtZW50cykKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIAotICAgIGlmICghc2hvdWxkT3B0aW1pemVMb2NhbHMoKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIAotICAgIFN5bWJvbFRhYmxlRW50cnkgZW50cnkgPSBzeW1ib2xUYWJsZSgp
LmdldChpZGVudC5pbXBsKCkpOwotICAgIGlmIChlbnRyeS5pc051bGwoKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgaWYgKG1fbG9jYWxBcmd1bWVudHNSZWdpc3RlciAmJiBpc0NhcHR1
cmVkKG1fbG9jYWxBcmd1bWVudHNSZWdpc3Rlci0+aW5kZXgoKSkgJiYgbV9sZXhpY2FsRW52aXJv
bm1lbnRSZWdpc3RlcikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKG1fY29kZUJs
b2NrLT51c2VzQXJndW1lbnRzKCkgJiYgbV9jb2RlVHlwZSA9PSBGdW5jdGlvbkNvZGUgJiYgbV9s
b2NhbEFyZ3VtZW50c1JlZ2lzdGVyKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAKLSAgICBy
ZXR1cm4gZmFsc2U7Ci19Ci0KLVJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjp1bmNoZWNr
ZWRMb2NhbEFyZ3VtZW50c1JlZ2lzdGVyKCkKLXsKLSAgICBBU1NFUlQod2lsbFJlc29sdmVUb0Fy
Z3VtZW50c1JlZ2lzdGVyKHByb3BlcnR5TmFtZXMoKS5hcmd1bWVudHMpKTsKLSAgICBBU1NFUlQo
bV9sb2NhbEFyZ3VtZW50c1JlZ2lzdGVyKTsKLSAgICByZXR1cm4gbV9sb2NhbEFyZ3VtZW50c1Jl
Z2lzdGVyOwotfQotCi1SZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6Y3JlYXRlTGF6eVJl
Z2lzdGVySWZOZWNlc3NhcnkoUmVnaXN0ZXJJRCogcmVnKQorU3RyaW5nSW1wbCogQnl0ZWNvZGVH
ZW5lcmF0b3I6OnZpc2libGVOYW1lRm9yUGFyYW1ldGVyKERlY29uc3RydWN0aW9uUGF0dGVybk5v
ZGUqIHBhdHRlcm4pCiB7Ci0gICAgaWYgKCFyZWctPnZpcnR1YWxSZWdpc3RlcigpLmlzTG9jYWwo
KSkKLSAgICAgICAgcmV0dXJuIHJlZzsKLQotICAgIGludCBsb2NhbFZhcmlhYmxlTnVtYmVyID0g
cmVnLT52aXJ0dWFsUmVnaXN0ZXIoKS50b0xvY2FsKCk7Ci0KLSAgICBpZiAobV9sYXN0TGF6eUZ1
bmN0aW9uIDw9IGxvY2FsVmFyaWFibGVOdW1iZXIgfHwgbG9jYWxWYXJpYWJsZU51bWJlciA8IG1f
Zmlyc3RMYXp5RnVuY3Rpb24pCi0gICAgICAgIHJldHVybiByZWc7Ci0gICAgZW1pdExhenlOZXdG
dW5jdGlvbihyZWcsIG1fbGF6eUZ1bmN0aW9ucy5nZXQobG9jYWxWYXJpYWJsZU51bWJlcikpOwot
ICAgIHJldHVybiByZWc7CisgICAgaWYgKHBhdHRlcm4tPmlzQmluZGluZ05vZGUoKSkgeworICAg
ICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IHN0YXRpY19jYXN0PGNvbnN0IEJpbmRpbmdO
b2RlKj4ocGF0dGVybiktPmJvdW5kUHJvcGVydHkoKTsKKyAgICAgICAgaWYgKCFtX2Z1bmN0aW9u
cy5jb250YWlucyhpZGVudC5pbXBsKCkpKQorICAgICAgICAgICAgcmV0dXJuIGlkZW50LmltcGwo
KTsKKyAgICB9CisgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKIFJlZ2lzdGVySUQqIEJ5dGVjb2Rl
R2VuZXJhdG9yOjpuZXdSZWdpc3RlcigpCkBAIC05NTQsNyArOTEwLDcgQEAgYm9vbCBCeXRlY29k
ZUdlbmVyYXRvcjo6aGFzQ29uc3RhbnQoY29ucwogICAgIFN0cmluZ0ltcGwqIHJlcCA9IGlkZW50
LmltcGwoKTsKICAgICByZXR1cm4gbV9pZGVudGlmaWVyTWFwLmNvbnRhaW5zKHJlcCk7CiB9Ci0g
ICAgCisKIHVuc2lnbmVkIEJ5dGVjb2RlR2VuZXJhdG9yOjphZGRDb25zdGFudChjb25zdCBJZGVu
dGlmaWVyJiBpZGVudCkKIHsKICAgICBTdHJpbmdJbXBsKiByZXAgPSBpZGVudC5pbXBsKCk7CkBA
IC0xMTkyLDQ2ICsxMTQ4LDg2IEBAIGJvb2wgQnl0ZWNvZGVHZW5lcmF0b3I6OmlzQ2FwdHVyZWQo
aW50IG8KICAgICByZXR1cm4gbV9zeW1ib2xUYWJsZSAmJiBtX3N5bWJvbFRhYmxlLT5pc0NhcHR1
cmVkKG9wZXJhbmQpOwogfQogCi1Mb2NhbCBCeXRlY29kZUdlbmVyYXRvcjo6bG9jYWwoY29uc3Qg
SWRlbnRpZmllciYgcHJvcGVydHkpCitWYXJpYWJsZSBCeXRlY29kZUdlbmVyYXRvcjo6dmFyaWFi
bGUoY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHkpCiB7Ci0gICAgaWYgKHByb3BlcnR5ID09IHBy
b3BlcnR5TmFtZXMoKS50aGlzSWRlbnRpZmllcikKLSAgICAgICAgcmV0dXJuIExvY2FsKHRoaXNS
ZWdpc3RlcigpLCBSZWFkT25seSwgTG9jYWw6OlNwZWNpYWxMb2NhbCk7Ci0gICAgYm9vbCBpc0Fy
Z3VtZW50cyA9IHByb3BlcnR5ID09IHByb3BlcnR5TmFtZXMoKS5hcmd1bWVudHM7Ci0gICAgaWYg
KGlzQXJndW1lbnRzKQotICAgICAgICBjcmVhdGVBcmd1bWVudHNJZk5lY2Vzc2FyeSgpOwotCisg
ICAgaWYgKHByb3BlcnR5ID09IHByb3BlcnR5TmFtZXMoKS50aGlzSWRlbnRpZmllcikgeworICAg
ICAgICByZXR1cm4gVmFyaWFibGUoCisgICAgICAgICAgICBwcm9wZXJ0eSwgVmFyT2Zmc2V0KHRo
aXNSZWdpc3RlcigpLT52aXJ0dWFsUmVnaXN0ZXIoKSksIHRoaXNSZWdpc3RlcigpLAorICAgICAg
ICAgICAgUmVhZE9ubHksIExvY2FsOjpTcGVjaWFsTG9jYWwpOworICAgIH0KKyAgICAKICAgICBp
ZiAoIXNob3VsZE9wdGltaXplTG9jYWxzKCkpCi0gICAgICAgIHJldHVybiBMb2NhbCgpOwotCisg
ICAgICAgIHJldHVybiBWYXJpYWJsZShwcm9wZXJ0eSk7CisgICAgCiAgICAgU3ltYm9sVGFibGVF
bnRyeSBlbnRyeSA9IHN5bWJvbFRhYmxlKCkuZ2V0KHByb3BlcnR5LmltcGwoKSk7CiAgICAgaWYg
KGVudHJ5LmlzTnVsbCgpKQotICAgICAgICByZXR1cm4gTG9jYWwoKTsKLQotCi0gICAgUmVnaXN0
ZXJJRCogbG9jYWwgPSBjcmVhdGVMYXp5UmVnaXN0ZXJJZk5lY2Vzc2FyeSgmcmVnaXN0ZXJGb3Io
ZW50cnkuZ2V0SW5kZXgoKSkpOwotCi0gICAgaWYgKGlzQ2FwdHVyZWQobG9jYWwtPmluZGV4KCkp
ICYmIG1fbGV4aWNhbEVudmlyb25tZW50UmVnaXN0ZXIpCi0gICAgICAgIHJldHVybiBMb2NhbCgp
OwotCi0gICAgcmV0dXJuIExvY2FsKGxvY2FsLCBlbnRyeS5nZXRBdHRyaWJ1dGVzKCksIGlzQXJn
dW1lbnRzID8gTG9jYWw6OlNwZWNpYWxMb2NhbCA6IExvY2FsOjpOb3JtYWxMb2NhbCk7CisgICAg
ICAgIHJldHVybiBWYXJpYWJsZShwcm9wZXJ0eSk7CisgICAgCisgICAgVmFyT2Zmc2V0IG9mZnNl
dCA9IGVudHJ5LnZhck9mZnNldCgpOworICAgIAorICAgIGlmIChvZmZzZXQuaXNTY29wZSgpICYm
IG1fbG9jYWxTY29wZURlcHRoKSB7CisgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYmUgYWJs
ZSB0byBzdGF0aWNhbGx5IHJlc29sdmUgdGhyb3VnaCBvdXIgbG9jYWwgc2NvcGVzLgorICAgICAg
ICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQxODg1CisgICAg
ICAgIHJldHVybiBWYXJpYWJsZShwcm9wZXJ0eSk7CisgICAgfQorICAgIAorICAgIFJlZ2lzdGVy
SUQqIGxvY2FsOworICAgIGlmIChvZmZzZXQuaXNTdGFjaygpKQorICAgICAgICBsb2NhbCA9ICZy
ZWdpc3RlckZvcihvZmZzZXQuc3RhY2tPZmZzZXQoKS5vZmZzZXQoKSk7CisgICAgZWxzZQorICAg
ICAgICBsb2NhbCA9IG51bGxwdHI7CisgICAgCisgICAgcmV0dXJuIFZhcmlhYmxlKHByb3BlcnR5
LCB2YXJPZmZzZXQsIGxvY2FsLCBlbnRyeS5nZXRBdHRyaWJ1dGVzKCksIExvY2FsOjpOb3JtYWxM
b2NhbCk7CiB9CiAKLUxvY2FsIEJ5dGVjb2RlR2VuZXJhdG9yOjpjb25zdExvY2FsKGNvbnN0IElk
ZW50aWZpZXImIHByb3BlcnR5KQorVmFyaWFibGUgQnl0ZWNvZGVHZW5lcmF0b3I6Omhhc1Zhcmlh
YmxlRGlyZWN0KGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5KQogewotICAgIGlmIChtX2NvZGVU
eXBlICE9IEZ1bmN0aW9uQ29kZSkKLSAgICAgICAgcmV0dXJuIExvY2FsKCk7CisgICAgQVNTRVJU
KHByb3BlcnR5ICE9IHByb3BlcnR5TmFtZXMoKS50aGlzSWRlbnRpZmllcik7CisgICAgCisgICAg
cmV0dXJuICFzeW1ib2xUYWJsZSgpLmdldChwcm9wZXJ0eS5pbXBsKCkpLmlzTnVsbCgpOworfQog
Cit2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpjcmVhdGVWYXJpYWJsZSgKKyAgICBjb25zdCBJZGVu
dGlmaWVyJiBwcm9wZXJ0eSwgVmFyS2luZCB2YXJLaW5kLCBDb25zdGFudE1vZGUgY29uc3RhbnRN
b2RlKQoreworICAgIEFTU0VSVChwcm9wZXJ0eSAhPSBwcm9wZXJ0eU5hbWVzKCkudGhpc0lkZW50
aWZpZXIpOworICAgIAorICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKHN5bWJvbFRhYmxl
KCkubV9sb2NrKTsKICAgICBTeW1ib2xUYWJsZUVudHJ5IGVudHJ5ID0gc3ltYm9sVGFibGUoKS5n
ZXQocHJvcGVydHkuaW1wbCgpKTsKLSAgICBpZiAoZW50cnkuaXNOdWxsKCkpCi0gICAgICAgIHJl
dHVybiBMb2NhbCgpOwotCi0gICAgUmVnaXN0ZXJJRCogbG9jYWwgPSBjcmVhdGVMYXp5UmVnaXN0
ZXJJZk5lY2Vzc2FyeSgmcmVnaXN0ZXJGb3IoZW50cnkuZ2V0SW5kZXgoKSkpOwotCi0gICAgYm9v
bCBpc0FyZ3VtZW50cyA9IHByb3BlcnR5ID09IHByb3BlcnR5TmFtZXMoKS5hcmd1bWVudHM7Ci0g
ICAgaWYgKGlzQ2FwdHVyZWQobG9jYWwtPmluZGV4KCkpICYmIG1fbGV4aWNhbEVudmlyb25tZW50
UmVnaXN0ZXIpCi0gICAgICAgIHJldHVybiBMb2NhbCgpOworICAgIAorICAgIGlmICghZW50cnku
aXNOdWxsKCkpIHsKKyAgICAgICAgLy8gRG8gc29tZSBjaGVja3MgdG8gZW5zdXJlIHRoYXQgdGhl
IHZhcmlhYmxlIHdlJ3JlIGJlaW5nIGFza2VkIHRvIGNyZWF0ZSBpcyBzdWZmaWNpZW50bHkKKyAg
ICAgICAgLy8gY29tcGF0aWJsZSB3aXRoIHRoZSBvbmUgd2UgaGF2ZSBhbHJlYWR5IGNyZWF0ZWQu
CiAKLSAgICByZXR1cm4gTG9jYWwobG9jYWwsIGVudHJ5LmdldEF0dHJpYnV0ZXMoKSwgaXNBcmd1
bWVudHMgPyBMb2NhbDo6U3BlY2lhbExvY2FsIDogTG9jYWw6Ok5vcm1hbExvY2FsKTsKKyAgICAg
ICAgVmFyT2Zmc2V0IG9mZnNldCA9IGVudHJ5LnZhck9mZnNldCgpOworICAgICAgICAKKyAgICAg
ICAgLy8gV2UgY2FuJ3QgY2hhbmdlIG91ciBtaW5kcyBhYm91dCB3aGV0aGVyIGl0J3MgY2FwdHVy
ZWQuCisgICAgICAgIFJFTEVBU0VfQVNTRVJUKG9mZnNldC5raW5kKCkgPT0gdmFyS2luZCk7Cisg
ICAgICAgIAorICAgICAgICAvLyBJdCdzIGZpbmUgdG8gZXhwZWN0IGEgdmFyaWFibGUgdG8gYmUg
Y29uc3RhbnQgaWYgaXQgcHJldmlvdXNseSB3YXNuJ3QsIGJ1dCBpdCdzIG5vdAorICAgICAgICAv
LyBPSyBmb3IgYSBwcmV2aW91c2x5IGNvbnN0YW50IHZhcmlhYmxlIHRvIGxhdGVyIGJlIGV4cGVj
dGVkIHRvIGJlIG5vbi1jb25zdGFudC4gVGhpcyBhbGwKKyAgICAgICAgLy8gd29ya3Mgb3V0IGJl
Y2F1c2UgY29uc3RhbnRzIG9ubHkgY29tZSBpbnRvIHBsYXkgd2l0aCBsb2NhbCB2YXJpYWJsZSBk
ZWNsYXJhdGlvbnMsIGFuZAorICAgICAgICAvLyB0aG9zZSBhcmUgYWx3YXlzIGFkZGVkIGxhc3Qu
CisgICAgICAgIGlmIChjb25zdGFudE1vZGUgPT0gSXNWYXJpYWJsZSkKKyAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKCFlbnRyeS5pc1JlYWRPbmx5KCkpOworICAgICAgICAKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICAKKyAgICBWYXJPZmZzZXQgdmFyT2Zmc2V0OworICAgIGlmICh2YXJL
aW5kID09IFNjb3BlVmFyS2luZCkKKyAgICAgICAgdmFyT2Zmc2V0ID0gVmFyT2Zmc2V0KHN5bWJv
bFRhYmxlKCkudGFrZU5leHRTY29wZU9mZnNldCgpKTsKKyAgICBlbHNlIHsKKyAgICAgICAgQVNT
RVJUKHZhcktpbmQgPT0gU3RhY2tWYXJLaW5kKTsKKyAgICAgICAgdmFyT2Zmc2V0ID0gVmFyT2Zm
c2V0KHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKG1fY2FsbGVlUmVnaXN0ZXJzLnNpemUoKSkpOwor
ICAgIH0KKyAgICBTeW1ib2xUYWJsZUVudHJ5IG5ld0VudHJ5KHZhck9mZnNldCwgY29uc3RhbnRN
b2RlID09IElzQ29uc3RhbnQgPyBSZWFkT25seSA6IDApOworICAgIHN5bWJvbFRhYmxlKCkuYWRk
KGxvY2tlciwgaWRlbnQuaW1wbCgpLCBuZXdFbnRyeSk7CisgICAgCisgICAgaWYgKHZhcktpbmQg
PT0gU3RhY2tWYXJLaW5kKSB7CisgICAgICAgIFJlZ2lzdGVySUQqIGxvY2FsID0gYWRkVmFyKCk7
CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGxvY2FsLT5pbmRleCgpID09IHZhck9mZnNldC5zdGFj
a09mZnNldCgpLm9mZnNldCgpKTsKKyAgICB9CiB9CiAKIHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6
OmVtaXRDaGVja0hhc0luc3RhbmNlKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogdmFsdWUs
IFJlZ2lzdGVySUQqIGJhc2UsIExhYmVsKiB0YXJnZXQpCkBAIC0xMjU1LDg4ICsxMjUxLDEzOSBA
QCBSZXNvbHZlVHlwZSBCeXRlY29kZUdlbmVyYXRvcjo6cmVzb2x2ZVR5CiAgICAgcmV0dXJuIEds
b2JhbFByb3BlcnR5OwogfQogCi1SZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFJl
c29sdmVTY29wZShSZWdpc3RlcklEKiBkc3QsIGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIs
IFJlc29sdmVTY29wZUluZm8mIGluZm8pCitSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6
ZW1pdFJlc29sdmVTY29wZShSZWdpc3RlcklEKiBkc3QsIGNvbnN0IFZhcmlhYmxlJiB2YXJpYWJs
ZSkKIHsKLSAgICBpZiAobV9zeW1ib2xUYWJsZSAmJiBtX2NvZGVUeXBlID09IEZ1bmN0aW9uQ29k
ZSAmJiAhbV9sb2NhbFNjb3BlRGVwdGgpIHsKLSAgICAgICAgU3ltYm9sVGFibGVFbnRyeSBlbnRy
eSA9IG1fc3ltYm9sVGFibGUtPmdldChpZGVudGlmaWVyLmltcGwoKSk7Ci0gICAgICAgIGlmICgh
ZW50cnkuaXNOdWxsKCkpIHsKLSAgICAgICAgICAgIGluZm8gPSBSZXNvbHZlU2NvcGVJbmZvKGVu
dHJ5LmdldEluZGV4KCkpOwotICAgICAgICAgICAgcmV0dXJuIHNjb3BlUmVnaXN0ZXIoKTsKLSAg
ICAgICAgfQorICAgIHN3aXRjaCAodmFyaWFibGUudmFyT2Zmc2V0KCkua2luZCgpKSB7CisgICAg
Y2FzZSBTdGFja09mZnNldDoKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIAorICAg
IGNhc2UgQ2FwdHVyZWRBcmd1bWVudEtpbmQ6CisgICAgICAgIHJldHVybiBhcmd1bWVudHNSZWdp
c3RlcigpOworICAgICAgICAKKyAgICBjYXNlIFNjb3BlT2Zmc2V0OgorICAgICAgICByZXR1cm4g
c2NvcGVSZWdpc3RlcigpOworICAgICAgICAKKyAgICBjYXNlIEludmFsaWRWYXJLaW5kOgorICAg
ICAgICAvLyBJbmRpY2F0ZXMgbm9uLWxvY2FsIHJlc29sdXRpb24uCisgICAgICAgIAorICAgICAg
ICBBU1NFUlQoIW1fc3ltYm9sVGFibGUgfHwgIW1fc3ltYm9sVGFibGUtPmNvbnRhaW5zKGlkZW50
aWZpZXIuaW1wbCgpKSB8fCByZXNvbHZlVHlwZSgpID09IER5bmFtaWMpOworICAgICAgICAKKyAg
ICAgICAgLy8gcmVzb2x2ZV9zY29wZSBkc3QsIGlkLCBSZXNvbHZlVHlwZSwgZGVwdGgKKyAgICAg
ICAgZW1pdE9wY29kZShvcF9yZXNvbHZlX3Njb3BlKTsKKyAgICAgICAgaW5zdHJ1Y3Rpb25zKCku
YXBwZW5kKGtpbGwoZHN0KSk7CisgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChzY29wZVJl
Z2lzdGVyKCktPmluZGV4KCkpOworICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYWRkQ29u
c3RhbnQodmFyaWFibGUuaWRlbnQoKSkpOworICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQo
cmVzb2x2ZVR5cGUoKSk7CisgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCgwKTsKKyAgICAg
ICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKDApOworICAgICAgICByZXR1cm4gZHN0OwogICAgIH0K
LQotICAgIEFTU0VSVCghbV9zeW1ib2xUYWJsZSB8fCAhbV9zeW1ib2xUYWJsZS0+Y29udGFpbnMo
aWRlbnRpZmllci5pbXBsKCkpIHx8IHJlc29sdmVUeXBlKCkgPT0gRHluYW1pYyk7Ci0KLSAgICBt
X2NvZGVCbG9jay0+YWRkUHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbihpbnN0cnVjdGlvbnMoKS5z
aXplKCkpOwotCi0gICAgLy8gcmVzb2x2ZV9zY29wZSBkc3QsIGlkLCBSZXNvbHZlVHlwZSwgZGVw
dGgKLSAgICBlbWl0T3Bjb2RlKG9wX3Jlc29sdmVfc2NvcGUpOwotICAgIGRzdCA9IHRlbXBEZXN0
aW5hdGlvbihkc3QpOwotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChraWxsKGRzdCkpOwotICAg
IGluc3RydWN0aW9ucygpLmFwcGVuZChzY29wZVJlZ2lzdGVyKCktPmluZGV4KCkpOwotICAgIGlu
c3RydWN0aW9ucygpLmFwcGVuZChhZGRDb25zdGFudChpZGVudGlmaWVyKSk7Ci0gICAgaW5zdHJ1
Y3Rpb25zKCkuYXBwZW5kKHJlc29sdmVUeXBlKCkpOwotICAgIGluc3RydWN0aW9ucygpLmFwcGVu
ZCgwKTsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoMCk7Ci0gICAgcmV0dXJuIGRzdDsKKyAg
ICAKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBudWxscHRy
OwogfQogCi0KLVJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0UmVzb2x2ZUNvbnN0
YW50TG9jYWwoUmVnaXN0ZXJJRCogZHN0LCBjb25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVyLCBS
ZXNvbHZlU2NvcGVJbmZvJiBpbmZvKQorUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVt
aXRHZXRGcm9tU2NvcGUoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBzY29wZSwgY29uc3Qg
VmFyaWFibGUmIHZhcmlhYmxlLCBSZXNvbHZlTW9kZSByZXNvbHZlTW9kZSkKIHsKLSAgICBpZiAo
IW1fc3ltYm9sVGFibGUgfHwgbV9jb2RlVHlwZSAhPSBGdW5jdGlvbkNvZGUpCi0gICAgICAgIHJl
dHVybiBudWxscHRyOwotCi0gICAgU3ltYm9sVGFibGVFbnRyeSBlbnRyeSA9IG1fc3ltYm9sVGFi
bGUtPmdldChpZGVudGlmaWVyLmltcGwoKSk7Ci0gICAgaWYgKGVudHJ5LmlzTnVsbCgpKQotICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBpbmZvID0gUmVzb2x2ZVNjb3BlSW5mbyhlbnRyeS5n
ZXRJbmRleCgpKTsKLSAgICByZXR1cm4gZW1pdE1vdmUoZHN0LCBtX2xleGljYWxFbnZpcm9ubWVu
dFJlZ2lzdGVyKTsKLQorICAgIHN3aXRjaCAodmFyaWFibGUudmFyT2Zmc2V0KCkua2luZCgpKSB7
CisgICAgY2FzZSBTdGFja09mZnNldDoKKyAgICAgICAgcmV0dXJuIGVtaXRNb3ZlKGtpbGwoZHN0
KSwgdmFyaWFibGUubG9jYWwoKSk7CisgICAgICAgIAorICAgIGNhc2UgQ2FwdHVyZWRBcmd1bWVu
dHNPZmZzZXQ6CisgICAgICAgIEFTU0VSVChzY29wZSA9PSBhcmd1bWVudHNSZWdpc3RlcigpKTsK
KyAgICAgICAgVW5saW5rZWRWYWx1ZVByb2ZpbGUgcHJvZmlsZSA9IGVtaXRQcm9maWxlZE9wY29k
ZShvcF9nZXRfZnJvbV9hcmd1bWVudHMpOworICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQo
a2lsbChkc3QpKTsKKyAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHNjb3BlLT5pbmRleCgp
KTsKKyAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHZhcmlhYmxlLnZhck9mZnNldCgpLmNh
cHR1cmVkQXJndW1lbnRzT2Zmc2V0KCkub2Zmc2V0KCkpOworICAgICAgICBpbnN0cnVjdGlvbnMo
KS5hcHBlbmQocHJvZmlsZSk7CisgICAgICAgIHJldHVybiBkc3Q7CisgICAgICAgIAorICAgIGNh
c2UgU2NvcGVPZmZzZXQ6CisgICAgY2FzZSBJbnZhbGlkVmFyS2luZDoKKyAgICAgICAgbV9jb2Rl
QmxvY2stPmFkZFByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb24oaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgp
KTsKKyAgICAgICAgCisgICAgICAgIC8vIGdldF9mcm9tX3Njb3BlIGRzdCwgc2NvcGUsIGlkLCBS
ZXNvbHZlTW9kZUFuZFR5cGUsIFN0cnVjdHVyZSwgT3BlcmFuZAorICAgICAgICBVbmxpbmtlZFZh
bHVlUHJvZmlsZSBwcm9maWxlID0gZW1pdFByb2ZpbGVkT3Bjb2RlKG9wX2dldF9mcm9tX3Njb3Bl
KTsKKyAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGtpbGwoZHN0KSk7CisgICAgICAgIGlu
c3RydWN0aW9ucygpLmFwcGVuZChzY29wZS0+aW5kZXgoKSk7CisgICAgICAgIGluc3RydWN0aW9u
cygpLmFwcGVuZChhZGRDb25zdGFudCh2YXJpYWJsZS5pZGVudGlmaWVyKCkpKTsKKyAgICAgICAg
aW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKFJlc29sdmVNb2RlQW5kVHlwZShyZXNvbHZlTW9kZSwgdmFy
aWFibGUudmFyT2Zmc2V0KCkuaXNTY29wZSgpID8gTG9jYWxDbG9zdXJlVmFyIDogcmVzb2x2ZVR5
cGUoKSkub3BlcmFuZCgpKTsKKyAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKDApOworICAg
ICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQodmFyaWFibGUudmFyT2Zmc2V0KCkuaXNTY29wZSgp
ID8gdmFyaWFibGUudmFyT2Zmc2V0KCkuc2NvcGVPZmZzZXQoKS5vZmZzZXQoKSA6IDApOworICAg
ICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQocHJvZmlsZSk7CisgICAgICAgIHJldHVybiBkc3Q7
CisgICAgfQorICAgIAorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKLVJl
Z2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0R2V0RnJvbVNjb3BlKFJlZ2lzdGVySUQq
IGRzdCwgUmVnaXN0ZXJJRCogc2NvcGUsIGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIsIFJl
c29sdmVNb2RlIHJlc29sdmVNb2RlLCBjb25zdCBSZXNvbHZlU2NvcGVJbmZvJiBpbmZvKQorUmVn
aXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRQdXRUb1Njb3BlKFJlZ2lzdGVySUQqIHNj
b3BlLCBjb25zdCBWYXJpYWJsZSYgdmFyaWFibGUsIFJlZ2lzdGVySUQqIHZhbHVlLCBSZXNvbHZl
TW9kZSByZXNvbHZlTW9kZSkKIHsKLSAgICBtX2NvZGVCbG9jay0+YWRkUHJvcGVydHlBY2Nlc3NJ
bnN0cnVjdGlvbihpbnN0cnVjdGlvbnMoKS5zaXplKCkpOwotCi0gICAgLy8gZ2V0X2Zyb21fc2Nv
cGUgZHN0LCBzY29wZSwgaWQsIFJlc29sdmVNb2RlQW5kVHlwZSwgU3RydWN0dXJlLCBPcGVyYW5k
Ci0gICAgVW5saW5rZWRWYWx1ZVByb2ZpbGUgcHJvZmlsZSA9IGVtaXRQcm9maWxlZE9wY29kZShv
cF9nZXRfZnJvbV9zY29wZSk7Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGtpbGwoZHN0KSk7
Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHNjb3BlLT5pbmRleCgpKTsKLSAgICBpbnN0cnVj
dGlvbnMoKS5hcHBlbmQoYWRkQ29uc3RhbnQoaWRlbnRpZmllcikpOwotICAgIGluc3RydWN0aW9u
cygpLmFwcGVuZChSZXNvbHZlTW9kZUFuZFR5cGUocmVzb2x2ZU1vZGUsIGluZm8uaXNMb2NhbCgp
ID8gTG9jYWxDbG9zdXJlVmFyIDogcmVzb2x2ZVR5cGUoKSkub3BlcmFuZCgpKTsKLSAgICBpbnN0
cnVjdGlvbnMoKS5hcHBlbmQoMCk7Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGluZm8ubG9j
YWxJbmRleCgpKTsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQocHJvZmlsZSk7Ci0gICAgcmV0
dXJuIGRzdDsKKyAgICBzd2l0Y2ggKHZhcmlhYmxlLnZhck9mZnNldCgpLmtpbmQoKSkgeworICAg
IGNhc2UgU3RhY2tPZmZzZXQ6CisgICAgICAgIGVtaXRNb3ZlKHZhcmlhYmxlLmxvY2FsKCksIHZh
bHVlKTsKKyAgICAgICAgcmV0dXJuIHZhbHVlOworICAgICAgICAKKyAgICBjYXNlIENhcHR1cmVk
QXJndW1lbnRzT2Zmc2V0OgorICAgICAgICBBU1NFUlQoc2NvcGUgPT0gYXJndW1lbnRzUmVnaXN0
ZXIoKSk7CisgICAgICAgIGVtaXRPcGNvZGUob3BfcHV0X3RvX2FyZ3VtZW50cyk7CisgICAgICAg
IGluc3RydWN0aW9ucygpLmFwcGVuZChzY29wZSk7CisgICAgICAgIGluc3RydWN0aW9ucygpLmFw
cGVuZCh2YXJpYWJsZS52YXJPZmZzZXQoKS5jYXB0dXJlZEFyZ3VtZW50c09mZnNldCgpLm9mZnNl
dCgpKTsKKyAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHZhbHVlLT5pbmRleCgpKTsKKyAg
ICAgICAgcmV0dXJuIHZhbHVlOworICAgICAgICAKKyAgICBjYXNlIFNjb3BlT2Zmc2V0OgorICAg
IGNhc2UgSW52YWxpZFZhcktpbmQ6IHsKKyAgICAgICAgbV9jb2RlQmxvY2stPmFkZFByb3BlcnR5
QWNjZXNzSW5zdHJ1Y3Rpb24oaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKTsKKyAgICAgICAgCisgICAg
ICAgIC8vIHB1dF90b19zY29wZSBzY29wZSwgaWQsIHZhbHVlLCBSZXNvbHZlTW9kZUFuZFR5cGUs
IFN0cnVjdHVyZSwgT3BlcmFuZAorICAgICAgICBlbWl0T3Bjb2RlKG9wX3B1dF90b19zY29wZSk7
CisgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChzY29wZS0+aW5kZXgoKSk7CisgICAgICAg
IGluc3RydWN0aW9ucygpLmFwcGVuZChhZGRDb25zdGFudCh2YXJpYWJsZS5pZGVudCgpKSk7Cisg
ICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCh2YWx1ZS0+aW5kZXgoKSk7CisgICAgICAgIFNj
b3BlT2Zmc2V0IG9mZnNldDsKKyAgICAgICAgaWYgKHZhcmlhYmxlLnZhck9mZnNldCgpLmlzU2Nv
cGUoKSkgeworICAgICAgICAgICAgb2Zmc2V0ID0gdmFyaWFibGUudmFyT2Zmc2V0KCkuc2NvcGVP
ZmZzZXQoKTsKKyAgICAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChSZXNvbHZlTW9kZUFu
ZFR5cGUocmVzb2x2ZU1vZGUsIExvY2FsQ2xvc3VyZVZhcikub3BlcmFuZCgpKTsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VSVChyZXNvbHZlVHlwZSgpICE9IExvY2FsQ2xvc3Vy
ZVZhcik7CisgICAgICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoUmVzb2x2ZU1vZGVBbmRU
eXBlKHJlc29sdmVNb2RlLCByZXNvbHZlVHlwZSgpKS5vcGVyYW5kKCkpOworICAgICAgICB9Cisg
ICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCgwKTsKKyAgICAgICAgaW5zdHJ1Y3Rpb25zKCku
YXBwZW5kKG9mZnNldC5pc1ZhbGlkKCkgPyBvZmZzZXQub2Zmc2V0KCkgOiAwKTsKKyAgICAgICAg
cmV0dXJuIHZhbHVlOworICAgIH0gfQorICAgIAorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiB9CiAKLVJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0UHV0VG9TY29w
ZShSZWdpc3RlcklEKiBzY29wZSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnRpZmllciwgUmVnaXN0
ZXJJRCogdmFsdWUsIFJlc29sdmVNb2RlIHJlc29sdmVNb2RlLCBjb25zdCBSZXNvbHZlU2NvcGVJ
bmZvJiBpbmZvKQorUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmluaXRpYWxpemVWYXJp
YWJsZShjb25zdCBWYXJpYWJsZSYgdmFyaWFibGUsIFJlZ2lzdGVySUQqIHZhbHVlKQogewotICAg
IG1fY29kZUJsb2NrLT5hZGRQcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uKGluc3RydWN0aW9ucygp
LnNpemUoKSk7Ci0KLSAgICAvLyBwdXRfdG9fc2NvcGUgc2NvcGUsIGlkLCB2YWx1ZSwgUmVzb2x2
ZU1vZGVBbmRUeXBlLCBTdHJ1Y3R1cmUsIE9wZXJhbmQKLSAgICBlbWl0T3Bjb2RlKG9wX3B1dF90
b19zY29wZSk7Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHNjb3BlLT5pbmRleCgpKTsKLSAg
ICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYWRkQ29uc3RhbnQoaWRlbnRpZmllcikpOwotICAgIGlu
c3RydWN0aW9ucygpLmFwcGVuZCh2YWx1ZS0+aW5kZXgoKSk7Ci0gICAgaWYgKGluZm8uaXNMb2Nh
bCgpKSB7Ci0gICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChSZXNvbHZlTW9kZUFuZFR5cGUo
cmVzb2x2ZU1vZGUsIExvY2FsQ2xvc3VyZVZhcikub3BlcmFuZCgpKTsKLSAgICAgICAgaW50IG9w
ZXJhbmQgPSByZWdpc3RlckZvcihpbmZvLmxvY2FsSW5kZXgoKSkuaW5kZXgoKTsKLSAgICAgICAg
Ym9vbCBpc1dhdGNoYWJsZVZhcmlhYmxlID0gaGFzV2F0Y2hhYmxlVmFyaWFibGUob3BlcmFuZCk7
Ci0gICAgICAgIEFTU0VSVCghaXNXYXRjaGFibGVWYXJpYWJsZSB8fCB3YXRjaGFibGVWYXJpYWJs
ZUlkZW50aWZpZXIob3BlcmFuZCkgPT0gaWRlbnRpZmllcik7Ci0gICAgICAgIGluc3RydWN0aW9u
cygpLmFwcGVuZChpc1dhdGNoYWJsZVZhcmlhYmxlKTsKLSAgICB9IGVsc2UgewotICAgICAgICBB
U1NFUlQocmVzb2x2ZVR5cGUoKSAhPSBMb2NhbENsb3N1cmVWYXIpOwotICAgICAgICBpbnN0cnVj
dGlvbnMoKS5hcHBlbmQoUmVzb2x2ZU1vZGVBbmRUeXBlKHJlc29sdmVNb2RlLCByZXNvbHZlVHlw
ZSgpKS5vcGVyYW5kKCkpOwotICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZmFsc2UpOwor
ICAgIFJlZ2lzdGVySUQqIHNjb3BlOworICAgIHN3aXRjaCAodmFyaWFibGUudmFyT2Zmc2V0KCku
a2luZCgpKSB7CisgICAgY2FzZSBTdGFja09mZnNldDoKKyAgICAgICAgc2NvcGUgPSBudWxscHRy
OworICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgY2FzZSBDYXB0dXJlZEFyZ3VtZW50S2lu
ZDoKKyAgICAgICAgc2NvcGUgPSBhcmd1bWVudHNSZWdpc3RlcigpOworICAgICAgICBicmVhazsK
KyAgICAgICAgCisgICAgY2FzZSBTY29wZU9mZnNldDoKKyAgICAgICAgc2NvcGUgPSBzY29wZVJl
Z2lzdGVyKCk7CisgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBzY29wZSA9IG51bGxwdHI7
CisgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoaW5mby5s
b2NhbEluZGV4KCkpOwotICAgIHJldHVybiB2YWx1ZTsKKworICAgIHJldHVybiBlbWl0UHV0VG9T
Y29wZShzY29wZSwgdmFyaWFibGUsIHZhbHVlLCBUaHJvd0lmTm90Rm91bmQpOwogfQogCiBSZWdp
c3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEluc3RhbmNlT2YoUmVnaXN0ZXJJRCogZHN0
LCBSZWdpc3RlcklEKiB2YWx1ZSwgUmVnaXN0ZXJJRCogYmFzZVByb3RvdHlwZSkKLXsgCit7CiAg
ICAgZW1pdE9wY29kZShvcF9pbnN0YW5jZW9mKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQo
ZHN0LT5pbmRleCgpKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQodmFsdWUtPmluZGV4KCkp
OwpAQCAtMTYzOCwyNCArMTY4NSwxNSBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6
ZW1pdE5ld0FyCiAKIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TmV3RnVuY3Rp
b24oUmVnaXN0ZXJJRCogZHN0LCBGdW5jdGlvbkJvZHlOb2RlKiBmdW5jdGlvbikKIHsKLSAgICBy
ZXR1cm4gZW1pdE5ld0Z1bmN0aW9uSW50ZXJuYWwoZHN0LCBtX2NvZGVCbG9jay0+YWRkRnVuY3Rp
b25EZWNsKG1ha2VGdW5jdGlvbihmdW5jdGlvbikpLCBmYWxzZSk7Ci19Ci0KLVJlZ2lzdGVySUQq
IEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TGF6eU5ld0Z1bmN0aW9uKFJlZ2lzdGVySUQqIGRzdCwg
RnVuY3Rpb25Cb2R5Tm9kZSogZnVuY3Rpb24pCi17Ci0gICAgRnVuY3Rpb25PZmZzZXRNYXA6OkFk
ZFJlc3VsdCBwdHIgPSBtX2Z1bmN0aW9uT2Zmc2V0cy5hZGQoZnVuY3Rpb24sIDApOwotICAgIGlm
IChwdHIuaXNOZXdFbnRyeSkKLSAgICAgICAgcHRyLml0ZXJhdG9yLT52YWx1ZSA9IG1fY29kZUJs
b2NrLT5hZGRGdW5jdGlvbkRlY2wobWFrZUZ1bmN0aW9uKGZ1bmN0aW9uKSk7Ci0gICAgcmV0dXJu
IGVtaXROZXdGdW5jdGlvbkludGVybmFsKGRzdCwgcHRyLml0ZXJhdG9yLT52YWx1ZSwgdHJ1ZSk7
CisgICAgcmV0dXJuIGVtaXROZXdGdW5jdGlvbkludGVybmFsKGRzdCwgbV9jb2RlQmxvY2stPmFk
ZEZ1bmN0aW9uRGVjbChtYWtlRnVuY3Rpb24oZnVuY3Rpb24pKSk7CiB9CiAKLVJlZ2lzdGVySUQq
IEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TmV3RnVuY3Rpb25JbnRlcm5hbChSZWdpc3RlcklEKiBk
c3QsIHVuc2lnbmVkIGluZGV4LCBib29sIGRvTnVsbENoZWNrKQorUmVnaXN0ZXJJRCogQnl0ZWNv
ZGVHZW5lcmF0b3I6OmVtaXROZXdGdW5jdGlvbkludGVybmFsKFJlZ2lzdGVySUQqIGRzdCwgdW5z
aWduZWQgaW5kZXgpCiB7CiAgICAgZW1pdE9wY29kZShvcF9uZXdfZnVuYyk7CiAgICAgaW5zdHJ1
Y3Rpb25zKCkuYXBwZW5kKGRzdC0+aW5kZXgoKSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5k
KHNjb3BlUmVnaXN0ZXIoKS0+aW5kZXgoKSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGlu
ZGV4KTsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZG9OdWxsQ2hlY2spOwogICAgIHJldHVy
biBkc3Q7CiB9CiAKQEAgLTI1MDQsOSArMjU0Miw5IEBAIHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6
OnNldElzTnVtZXJpY0NvbXAKIAogYm9vbCBCeXRlY29kZUdlbmVyYXRvcjo6aXNBcmd1bWVudE51
bWJlcihjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgaW50IGFyZ3VtZW50TnVtYmVyKQogewotICAg
IFJlZ2lzdGVySUQqIHJlZ2lzdGVySUQgPSBsb2NhbChpZGVudCkuZ2V0KCk7Ci0gICAgaWYgKCFy
ZWdpc3RlcklEIHx8IHJlZ2lzdGVySUQtPmluZGV4KCkgPj0gMCkKLSAgICAgICAgIHJldHVybiAw
OworICAgIFJlZ2lzdGVySUQqIHJlZ2lzdGVySUQgPSB2YXJpYWJsZShpZGVudCkubG9jYWwoKTsK
KyAgICBpZiAoIXJlZ2lzdGVySUQpCisgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJu
IHJlZ2lzdGVySUQtPmluZGV4KCkgPT0gQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNldChhcmd1bWVu
dE51bWJlcik7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIv
Qnl0ZWNvZGVHZW5lcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgJKHJldmlzaW9uIDE4MDg3NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAkod29y
a2luZyBjb3B5KQpAQCAtMTgzLDU4ICsxODMsNTcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IElzQ2FwdHVyZWQKICAgICB9OwogCi0gICAgY2xhc3MgTG9jYWwgeworICAgIGNsYXNzIFZhcmlh
YmxlIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIExvY2FsKCkKLSAgICAgICAgICAgIDogbV9sb2Nh
bCgwKQorICAgICAgICBlbnVtIFZhcmlhYmxlS2luZCB7IE5vcm1hbFZhcmlhYmxlLCBTcGVjaWFs
VmFyaWFibGUgfTsKKworICAgICAgICBWYXJpYWJsZSgpCisgICAgICAgICAgICA6IG1fb2Zmc2V0
KCkKKyAgICAgICAgICAgICwgbV9sb2NhbChudWxscHRyKQogICAgICAgICAgICAgLCBtX2F0dHJp
YnV0ZXMoMCkKLSAgICAgICAgICAgICwgbV9raW5kKE5vcm1hbExvY2FsKQorICAgICAgICAgICAg
LCBtX2tpbmQoTm9ybWFsVmFyaWFibGUpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgVmFyaWFibGUoY29uc3QgSWRlbnRpZmllciYgaWRlbnQpCisgICAgICAgICAgICA6
IG1faWRlbnQoaWRlbnQpCisgICAgICAgICAgICAsIG1fbG9jYWwobnVsbHB0cikKKyAgICAgICAg
ICAgICwgbV9hdHRyaWJ1dGVzKDApCisgICAgICAgICAgICAsIG1fa2luZChOb3JtYWxWYXJpYWJs
ZSkgLy8gVGhpcyBpcyBzb21ld2hhdCBtZWFuaW5nbGVzcyBoZXJlIGZvciB0aGlzIGtpbmQgb2Yg
VmFyaWFibGUuCiAgICAgICAgIHsKICAgICAgICAgfQogCi0gICAgICAgIGVudW0gTG9jYWxLaW5k
IHsgTm9ybWFsTG9jYWwsIFNwZWNpYWxMb2NhbCB9OwotCi0gICAgICAgIExvY2FsKFJlZ2lzdGVy
SUQqIGxvY2FsLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBMb2NhbEtpbmQga2luZCkKLSAgICAgICAg
ICAgIDogbV9sb2NhbChsb2NhbCkKKyAgICAgICAgVmFyaWFibGUoY29uc3QgSWRlbnRpZmllciYg
aWRlbnQsIFZhck9mZnNldCBvZmZzZXQsIFJlZ2lzdGVySUQqIGxvY2FsLCB1bnNpZ25lZCBhdHRy
aWJ1dGVzLCBMb2NhbEtpbmQga2luZCkKKyAgICAgICAgICAgIDogbV9pZGVudChpZGVudCkKKyAg
ICAgICAgICAgICwgbV9vZmZzZXQob2Zmc2V0KQorICAgICAgICAgICAgLCBtX2xvY2FsKGxvY2Fs
KQogICAgICAgICAgICAgLCBtX2F0dHJpYnV0ZXMoYXR0cmlidXRlcykKICAgICAgICAgICAgICwg
bV9raW5kKGtpbmQpCiAgICAgICAgIHsKICAgICAgICAgfQogCi0gICAgICAgIG9wZXJhdG9yIGJv
b2woKSBjb25zdCB7IHJldHVybiBtX2xvY2FsOyB9Ci0KLSAgICAgICAgUmVnaXN0ZXJJRCogZ2V0
KCkgY29uc3QgeyByZXR1cm4gbV9sb2NhbDsgfQorICAgICAgICAvLyBJZiBpdCdzIHVuc2V0LCB0
aGVuIGl0IGlzIGEgbm9uLWxvY2FsbHktc2NvcGVkIHZhcmlhYmxlLiBJZiBpdCBpcyBzZXQsIHRo
ZW4gaXQgY291bGQgYmUKKyAgICAgICAgLy8gYSBzdGFjayB2YXJpYWJsZSwgYSBzY29wZWQgdmFy
aWFibGUgaW4gdGhlIGxvY2FsIHNjb3BlLCBvciBhIHZhcmlhYmxlIGNhcHR1cmVkIGluIHRoZQor
ICAgICAgICAvLyBkaXJlY3QgYXJndW1lbnRzIG9iamVjdC4KKyAgICAgICAgYm9vbCBpc1Jlc29s
dmVkKCkgY29uc3QgeyByZXR1cm4gISFtX29mZnNldDsgfQorICAgICAgICAKKyAgICAgICAgY29u
c3QgSWRlbnRpZmllciYgaWRlbnQoKSBjb25zdCB7IHJldHVybiBtX2lkZW50OyB9CisgICAgICAg
IAorICAgICAgICBWYXJPZmZzZXQgb2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQ7IH0K
KyAgICAgICAgYm9vbCBpc0xvY2FsKCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQuaXNTdGFjaygp
OyB9CisgICAgICAgIFJlZ2lzdGVySUQqIGxvY2FsKCkgY29uc3QgeyByZXR1cm4gbV9sb2NhbDsg
fQogCiAgICAgICAgIGJvb2wgaXNSZWFkT25seSgpIGNvbnN0IHsgcmV0dXJuIG1fYXR0cmlidXRl
cyAmIFJlYWRPbmx5OyB9Ci0gICAgICAgIGJvb2wgaXNTcGVjaWFsKCkgY29uc3QgeyByZXR1cm4g
bV9raW5kICE9IE5vcm1hbExvY2FsOyB9CisgICAgICAgIGJvb2wgaXNTcGVjaWFsKCkgY29uc3Qg
eyByZXR1cm4gbV9raW5kICE9IE5vcm1hbFZhcmlhYmxlOyB9CiAKICAgICBwcml2YXRlOgorICAg
ICAgICBJZGVudGlmaWVyIG1faWRlbnQ7CisgICAgICAgIFZhck9mZmV0IG1fb2Zmc3Q7CiAgICAg
ICAgIFJlZ2lzdGVySUQqIG1fbG9jYWw7CiAgICAgICAgIHVuc2lnbmVkIG1fYXR0cmlidXRlczsK
ICAgICAgICAgTG9jYWxLaW5kIG1fa2luZDsKICAgICB9OwogCi0gICAgc3RydWN0IFJlc29sdmVT
Y29wZUluZm8gewotICAgICAgICBSZXNvbHZlU2NvcGVJbmZvKCkKLSAgICAgICAgICAgIDogbV9s
b2NhbEluZGV4KDApCi0gICAgICAgICAgICAsIG1fcmVzb2x2ZVNjb3BlS2luZChOb25Mb2NhbFNj
b3BlKQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgICAgICBSZXNvbHZlU2NvcGVJbmZvKGlu
dCBpbmRleCkKLSAgICAgICAgICAgIDogbV9sb2NhbEluZGV4KGluZGV4KQotICAgICAgICAgICAg
LCBtX3Jlc29sdmVTY29wZUtpbmQoTG9jYWxTY29wZSkKLSAgICAgICAgewotICAgICAgICB9Ci0K
LSAgICAgICAgYm9vbCBpc0xvY2FsKCkgY29uc3QgeyByZXR1cm4gbV9yZXNvbHZlU2NvcGVLaW5k
ID09IExvY2FsU2NvcGU7IH0KLSAgICAgICAgaW50IGxvY2FsSW5kZXgoKSBjb25zdCB7IHJldHVy
biBtX2xvY2FsSW5kZXg7IH0KLQotICAgIHByaXZhdGU6Ci0gICAgICAgIGludCBtX2xvY2FsSW5k
ZXg7Ci0gICAgICAgIGVudW0geyBMb2NhbFNjb3BlLCBOb25Mb2NhbFNjb3BlIH0gbV9yZXNvbHZl
U2NvcGVLaW5kOwotICAgIH07Ci0KICAgICBzdHJ1Y3QgVHJ5UmFuZ2UgewogICAgICAgICBSZWZQ
dHI8TGFiZWw+IHN0YXJ0OwogICAgICAgICBSZWZQdHI8TGFiZWw+IGVuZDsKQEAgLTI4NSwxMiAr
Mjg0LDEyIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBib29sIGlzQ2FwdHVyZWQoaW50IG9w
ZXJhbmQpOwogICAgICAgICBDYXB0dXJlTW9kZSBjYXB0dXJlTW9kZShpbnQgb3BlcmFuZCkgeyBy
ZXR1cm4gaXNDYXB0dXJlZChvcGVyYW5kKSA/IElzQ2FwdHVyZWQgOiBOb3RDYXB0dXJlZDsgfQog
ICAgICAgICAKLSAgICAgICAgTG9jYWwgbG9jYWwoY29uc3QgSWRlbnRpZmllciYpOwotICAgICAg
ICBMb2NhbCBjb25zdExvY2FsKGNvbnN0IElkZW50aWZpZXImKTsKLQorICAgICAgICBWYXJpYWJs
ZSB2YXJpYWJsZShjb25zdCBJZGVudGlmaWVyJik7CisgICAgICAgIHZvaWQgY3JlYXRlVmFyaWFi
bGUoY29uc3QgSWRlbnRpZmllciYsIFZhcktpbmQsIENvbnN0YW50TW9kZSk7IC8vIENyZWF0ZXMg
dGhlIHZhcmlhYmxlLCBvciBhc3NlcnRzIHRoYXQgdGhlIGFscmVhZHktY3JlYXRlZCB2YXJpYWJs
ZSBpcyBzdWZmaWNpZW50bHkgY29tcGF0aWJsZS4KKyAgICAgICAgCiAgICAgICAgIC8vIFJldHVy
bnMgdGhlIHJlZ2lzdGVyIHN0b3JpbmcgInRoaXMiCiAgICAgICAgIFJlZ2lzdGVySUQqIHRoaXNS
ZWdpc3RlcigpIHsgcmV0dXJuICZtX3RoaXNSZWdpc3RlcjsgfQotICAgICAgICAKKyAgICAgICAg
UmVnaXN0ZXJJRCogYXJndW1lbnRzUmVnaXN0ZXIoKSB7IHJldHVybiBtX2FyZ3VtZW50c1JlZ2lz
dGVyOyB9CiAgICAgICAgIFJlZ2lzdGVySUQqIHNjb3BlUmVnaXN0ZXIoKSB7IHJldHVybiBtX3Nj
b3BlUmVnaXN0ZXI7IH0KIAogICAgICAgICAvLyBSZXR1cm5zIHRoZSBuZXh0IGF2YWlsYWJsZSB0
ZW1wb3JhcnkgcmVnaXN0ZXIuIFJlZ2lzdGVycyByZXR1cm5lZCBieQpAQCAtNDU2LDggKzQ1NSw3
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBSZWdpc3RlcklEKiBlbWl0TmV3QXJyYXkoUmVn
aXN0ZXJJRCogZHN0LCBFbGVtZW50Tm9kZSosIHVuc2lnbmVkIGxlbmd0aCk7IC8vIHN0b3BzIGF0
IGZpcnN0IGVsaXNpb24KIAogICAgICAgICBSZWdpc3RlcklEKiBlbWl0TmV3RnVuY3Rpb24oUmVn
aXN0ZXJJRCogZHN0LCBGdW5jdGlvbkJvZHlOb2RlKik7Ci0gICAgICAgIFJlZ2lzdGVySUQqIGVt
aXRMYXp5TmV3RnVuY3Rpb24oUmVnaXN0ZXJJRCogZHN0LCBGdW5jdGlvbkJvZHlOb2RlKiBib2R5
KTsKLSAgICAgICAgUmVnaXN0ZXJJRCogZW1pdE5ld0Z1bmN0aW9uSW50ZXJuYWwoUmVnaXN0ZXJJ
RCogZHN0LCB1bnNpZ25lZCBpbmRleCwgYm9vbCBzaG91bGROdWxsQ2hlY2spOworICAgICAgICBS
ZWdpc3RlcklEKiBlbWl0TmV3RnVuY3Rpb25JbnRlcm5hbChSZWdpc3RlcklEKiBkc3QsIHVuc2ln
bmVkIGluZGV4KTsKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdE5ld0Z1bmN0aW9uRXhwcmVzc2lv
bihSZWdpc3RlcklEKiBkc3QsIEZ1bmNFeHByTm9kZSogZnVuYyk7CiAgICAgICAgIFJlZ2lzdGVy
SUQqIGVtaXROZXdSZWdFeHAoUmVnaXN0ZXJJRCogZHN0LCBSZWdFeHAqKTsKIApAQCAtNDc1LDcg
KzQ3Myw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBSZWdpc3RlcklEKiBlbWl0SW5pdEds
b2JhbENvbnN0KGNvbnN0IElkZW50aWZpZXImLCBSZWdpc3RlcklEKiB2YWx1ZSk7CiAKICAgICAg
ICAgUmVnaXN0ZXJJRCogZW1pdEdldEJ5SWQoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBi
YXNlLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eSk7Ci0gICAgICAgIFJlZ2lzdGVySUQqIGVt
aXRHZXRBcmd1bWVudHNMZW5ndGgoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBiYXNlKTsK
ICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdFB1dEJ5SWQoUmVnaXN0ZXJJRCogYmFzZSwgY29uc3Qg
SWRlbnRpZmllciYgcHJvcGVydHksIFJlZ2lzdGVySUQqIHZhbHVlKTsKICAgICAgICAgUmVnaXN0
ZXJJRCogZW1pdERpcmVjdFB1dEJ5SWQoUmVnaXN0ZXJJRCogYmFzZSwgY29uc3QgSWRlbnRpZmll
ciYgcHJvcGVydHksIFJlZ2lzdGVySUQqIHZhbHVlKTsKICAgICAgICAgUmVnaXN0ZXJJRCogZW1p
dERlbGV0ZUJ5SWQoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBiYXNlLCBjb25zdCBJZGVu
dGlmaWVyJik7CkBAIC01MDIsMTQgKzQ5OSwxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
dm9pZCBlbWl0VG9QcmltaXRpdmUoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBzcmMpOwog
CiAgICAgICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKCk7Ci0gICAgICAgIFJlZ2lzdGVySUQq
IGVtaXRSZXNvbHZlQ29uc3RhbnRMb2NhbChSZWdpc3RlcklEKiBkc3QsIGNvbnN0IElkZW50aWZp
ZXImLCBSZXNvbHZlU2NvcGVJbmZvJik7Ci0gICAgICAgIC8vIENhbGxzIHRlbXBEZXN0aW5hdGlv
bihkc3QpLCBzbyBpdCdzIHNhZmUgdG8gcGFzcyBudWxscHRyLiBJdCdzIGFsc28gcmVkdW5kYW50
IHRvIGNhbGwKLSAgICAgICAgLy8gdGVtcERlc3RpbmF0aW9uKGRzdCkgb24gdGhlIHRoaW5nIHlv
dSBwYXNzIGFzIHRoZSBkZXN0aW5hdGlvbi4gVGhlIHJlYXNvbiB3aHkgdGhpcwotICAgICAgICAv
LyBjYWxscyB0ZW1wRGVzdGluYXRpb24oKSBmb3IgeW91IGlzIHRoYXQgaXQgbWF5IG5vdCBuZWVk
IGEgc3BhcmUgcmVnaXN0ZXIuIEl0IG1heSByZXR1cm4KLSAgICAgICAgLy8gc2NvcGVSZWdpc3Rl
cigpIGRpcmVjdGx5LiBTbywgeW91IGNhbm5vdCByZWx5IG9uIHRoaXMgc3RvcmluZyB0byBkc3Qu
Ci0gICAgICAgIFJlZ2lzdGVySUQqIGVtaXRSZXNvbHZlU2NvcGUoUmVnaXN0ZXJJRCogZHN0LCBj
b25zdCBJZGVudGlmaWVyJiwgUmVzb2x2ZVNjb3BlSW5mbyYpOwotICAgICAgICBSZWdpc3RlcklE
KiBlbWl0R2V0RnJvbVNjb3BlKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogc2NvcGUsIGNv
bnN0IElkZW50aWZpZXImLCBSZXNvbHZlTW9kZSwgY29uc3QgUmVzb2x2ZVNjb3BlSW5mbyYpOwot
ICAgICAgICBSZWdpc3RlcklEKiBlbWl0UHV0VG9TY29wZShSZWdpc3RlcklEKiBzY29wZSwgY29u
c3QgSWRlbnRpZmllciYsIFJlZ2lzdGVySUQqIHZhbHVlLCBSZXNvbHZlTW9kZSwgY29uc3QgUmVz
b2x2ZVNjb3BlSW5mbyYpOworICAgICAgICBSZWdpc3RlcklEKiBlbWl0UmVzb2x2ZUNvbnN0YW50
TG9jYWwoUmVnaXN0ZXJJRCogZHN0LCBjb25zdCBWYXJpYWJsZSYpOworICAgICAgICBSZWdpc3Rl
cklEKiBlbWl0UmVzb2x2ZVNjb3BlKFJlZ2lzdGVySUQqIGRzdCwgY29uc3QgVmFyaWFibGUmKTsK
KyAgICAgICAgUmVnaXN0ZXJJRCogZW1pdEdldEZyb21TY29wZShSZWdpc3RlcklEKiBkc3QsIFJl
Z2lzdGVySUQqIHNjb3BlLCBjb25zdCBWYXJpYWJsZSYsIFJlc29sdmVNb2RlKTsKKyAgICAgICAg
UmVnaXN0ZXJJRCogZW1pdFB1dFRvU2NvcGUoUmVnaXN0ZXJJRCogc2NvcGUsIGNvbnN0IFZhcmlh
YmxlJiwgUmVnaXN0ZXJJRCogdmFsdWUsIFJlc29sdmVNb2RlKTsKKyAgICAgICAgUmVnaXN0ZXJJ
RCogaW5pdGlhbGl6ZVZhcmlhYmxlKGNvbnN0IFZhcmlhYmxlJiwgUmVnaXN0ZXJJRCogdmFsdWUp
OwogCiAgICAgICAgIFBhc3NSZWZQdHI8TGFiZWw+IGVtaXRMYWJlbChMYWJlbCopOwogICAgICAg
ICB2b2lkIGVtaXRMb29wSGludCgpOwpAQCAtNjE1LDExICs2MDksNyBAQCBuYW1lc3BhY2UgSlND
IHsKIAogICAgICAgICBSZWdpc3RlcklEKiBuZXdSZWdpc3RlcigpOwogCi0gICAgICAgIC8vIEFk
ZHMgYSB2YXIgc2xvdCBhbmQgbWFwcyBpdCB0byB0aGUgbmFtZSBpZGVudCBpbiBzeW1ib2xUYWJs
ZSgpLgotICAgICAgICBlbnVtIFdhdGNoTW9kZSB7IElzV2F0Y2hhYmxlLCBOb3RXYXRjaGFibGUg
fTsKLSAgICAgICAgUmVnaXN0ZXJJRCogYWRkVmFyKGNvbnN0IElkZW50aWZpZXImLCBDb25zdGFu
dE1vZGUsIFdhdGNoTW9kZSk7Ci0KLSAgICAgICAgLy8gQWRkcyBhbiBhbm9ueW1vdXMgdmFyIHNs
b3QuIFRvIGdpdmUgdGhpcyBzbG90IGEgbmFtZSwgYWRkIGl0IHRvIHN5bWJvbFRhYmxlKCkuCisg
ICAgICAgIC8vIEFkZHMgYW4gYW5vbnltb3VzIGxvY2FsIHZhciBzbG90LiBUbyBnaXZlIHRoaXMg
c2xvdCBhIG5hbWUsIGFkZCBpdCB0byBzeW1ib2xUYWJsZSgpLgogICAgICAgICBSZWdpc3RlcklE
KiBhZGRWYXIoKQogICAgICAgICB7CiAgICAgICAgICAgICArK21fY29kZUJsb2NrLT5tX251bVZh
cnM7CkBAIC02MjksMTQgKzYxOSwxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJl
dHVybiByZXN1bHQ7CiAgICAgICAgIH0KIAotICAgICAgICAvLyBSZXR1cm5zIHRoZSBpbmRleCBv
ZiB0aGUgYWRkZWQgdmFyLgotICAgICAgICB2b2lkIGFkZFBhcmFtZXRlcihjb25zdCBJZGVudGlm
aWVyJiwgaW50IHBhcmFtZXRlckluZGV4KTsKLSAgICAgICAgUmVnaXN0ZXJJRCogcmVzb2x2ZUNh
bGxlZShGdW5jdGlvbk5vZGUqKTsKLSAgICAgICAgdm9pZCBhZGRDYWxsZWUoRnVuY3Rpb25Ob2Rl
KiwgUmVnaXN0ZXJJRCopOwotCi0gICAgICAgIHZvaWQgcHJlc2VydmVMYXN0VmFyKCk7Ci0KLSAg
ICAgICAgUmVnaXN0ZXJJRCYgcmVnaXN0ZXJGb3IoaW50IGluZGV4KQorICAgICAgICAvLyBJbml0
aWFsaXplcyB0aGUgc3RhY2sgZm9ybSB0aGUgcGFyYW1ldGVyOyBkb2VzIG5vdGhpbmcgZm9yIHRo
ZSBzeW1ib2wgdGFibGUuCisgICAgICAgIFJlZ2lzdGVySUQqIGluaXRpYWxpemVOZXh0UGFyYW1l
dGVyKCk7CisgICAgICAgIFN0cmluZ0ltcGwqIHZpc2libGVOYW1lRm9yUGFyYW1ldGVyKERlY29u
c3RydWN0aW9uUGF0dGVybk5vZGUqIHBhdHRlcm4pOworICAgICAgICAKKyAgICAgICAgUmVnaXN0
ZXJJRCYgcmVnaXN0ZXJGb3IoVmlydHVhbFJlZ2lzdGVyKQogICAgICAgICB7CiAgICAgICAgICAg
ICBpZiAob3BlcmFuZElzTG9jYWwoaW5kZXgpKQogICAgICAgICAgICAgICAgIHJldHVybiBtX2Nh
bGxlZVJlZ2lzdGVyc1tWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgpLnRvTG9jYWwoKV07CkBAIC02NjEs
MTEgKzY0OCw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJuIFVubGlua2Vk
RnVuY3Rpb25FeGVjdXRhYmxlOjpjcmVhdGUobV92bSwgbV9zY29wZU5vZGUtPnNvdXJjZSgpLCBi
b2R5LCBpc0J1aWx0aW5GdW5jdGlvbigpID8gVW5saW5rZWRCdWlsdGluRnVuY3Rpb24gOiBVbmxp
bmtlZE5vcm1hbEZ1bmN0aW9uKTsKICAgICAgICAgfQogCi0gICAgICAgIFJlZ2lzdGVySUQqIGVt
aXRJbml0TGF6eVJlZ2lzdGVyKFJlZ2lzdGVySUQqKTsKLSAgICAgICAgCiAgICAgICAgIFJlZ2lz
dGVySUQqIGVtaXRDb25zdHJ1Y3RWYXJhcmdzKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCog
ZnVuYywgUmVnaXN0ZXJJRCogdGhpc1JlZ2lzdGVyLCBSZWdpc3RlcklEKiBhcmd1bWVudHMsIFJl
Z2lzdGVySUQqIGZpcnN0RnJlZVJlZ2lzdGVyLCBpbnQzMl90IGZpcnN0VmFyQXJnT2Zmc2V0LCBS
ZWdpc3RlcklEKiBwcm9maWxlSG9va1JlZ2lzdGVyLCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2
b3QsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdFN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlv
biYgZGl2b3RFbmQpOwogICAgICAgICBSZWdpc3RlcklEKiBlbWl0Q2FsbFZhcmFyZ3MoT3Bjb2Rl
SUQsIFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogZnVuYywgUmVnaXN0ZXJJRCogdGhpc1Jl
Z2lzdGVyLCBSZWdpc3RlcklEKiBhcmd1bWVudHMsIFJlZ2lzdGVySUQqIGZpcnN0RnJlZVJlZ2lz
dGVyLCBpbnQzMl90IGZpcnN0VmFyQXJnT2Zmc2V0LCBSZWdpc3RlcklEKiBwcm9maWxlSG9va1Jl
Z2lzdGVyLCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0aW9u
JiBkaXZvdFN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RFbmQpOwotICAgICAgICBS
ZWdpc3RlcklEKiBpbml0aWFsaXplQ2FwdHVyZWRWYXJpYWJsZShSZWdpc3RlcklEKiBkc3QsIGNv
bnN0IElkZW50aWZpZXImLCBSZWdpc3RlcklEKik7CiAKICAgICBwdWJsaWM6CiAgICAgICAgIEpT
U3RyaW5nKiBhZGRTdHJpbmdDb25zdGFudChjb25zdCBJZGVudGlmaWVyJik7CkBAIC02OTksNDQg
KzY4Myw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
ICAgIH0KIAotICAgICAgICBib29sIHNob3VsZFRlYXJPZmZBcmd1bWVudHNFYWdlcmx5KCkKLSAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1fY29kZVR5cGUgPT0gRnVuY3Rpb25Db2RlICYm
IGlzU3RyaWN0TW9kZSgpICYmIG1fc2NvcGVOb2RlLT5tb2RpZmllc1BhcmFtZXRlcigpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgYm9vbCBzaG91bGRDcmVhdGVBcmd1bWVudHNFYWdlcmx5KCkKLSAg
ICAgICAgewotICAgICAgICAgICAgaWYgKG1fY29kZVR5cGUgIT0gRnVuY3Rpb25Db2RlKQotICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIHJldHVybiBtX2xleGljYWxF
bnZpcm9ubWVudFJlZ2lzdGVyICYmIG1fY29kZUJsb2NrLT51c2VzQXJndW1lbnRzKCk7Ci0gICAg
ICAgIH0KLQogICAgICAgICBSZWdpc3RlcklEKiBlbWl0VGhyb3dFeHByZXNzaW9uVG9vRGVlcEV4
Y2VwdGlvbigpOwogCi0gICAgICAgIHZvaWQgY3JlYXRlQXJndW1lbnRzSWZOZWNlc3NhcnkoKTsK
LSAgICAgICAgUmVnaXN0ZXJJRCogY3JlYXRlTGF6eVJlZ2lzdGVySWZOZWNlc3NhcnkoUmVnaXN0
ZXJJRCopOwotICAgICAgICAKLSAgICAgICAgYm9vbCBoYXNXYXRjaGFibGVWYXJpYWJsZShpbnQg
b3BlcmFuZCkgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJl
ZyhvcGVyYW5kKTsKLSAgICAgICAgICAgIGlmICghcmVnLmlzTG9jYWwoKSkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8c2l6ZV90Pihy
ZWcudG9Mb2NhbCgpKSA+PSBtX3dhdGNoYWJsZVZhcmlhYmxlcy5zaXplKCkpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQg
PSBtX3dhdGNoYWJsZVZhcmlhYmxlc1tyZWcudG9Mb2NhbCgpXTsKLSAgICAgICAgICAgIGlmIChp
ZGVudC5pc051bGwoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAg
ICBBU1NFUlQoaGFzQ29uc3RhbnQoaWRlbnQpKTsgLy8gU2hvdWxkIGhhdmUgYWxyZWFkeSBiZWVu
IGFkZGVkLgotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgCi0g
ICAgICAgIGNvbnN0IElkZW50aWZpZXImIHdhdGNoYWJsZVZhcmlhYmxlSWRlbnRpZmllcihpbnQg
b3BlcmFuZCkgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKGhhc1dhdGNoYWJs
ZVZhcmlhYmxlKG9wZXJhbmQpKTsKLSAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciByZWcob3Bl
cmFuZCk7Ci0gICAgICAgICAgICByZXR1cm4gbV93YXRjaGFibGVWYXJpYWJsZXNbcmVnLnRvTG9j
YWwoKV07Ci0gICAgICAgIH0KLQogICAgIHByaXZhdGU6CiAgICAgICAgIFZlY3RvcjxVbmxpbmtl
ZEluc3RydWN0aW9uLCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4gbV9pbnN0cnVjdGlvbnM7CiAK
QEAgLTc1NSwxNCArNzAzLDE0IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBSZWdpc3RlcklE
IG1fdGhpc1JlZ2lzdGVyOwogICAgICAgICBSZWdpc3RlcklEIG1fY2FsbGVlUmVnaXN0ZXI7CiAg
ICAgICAgIFJlZ2lzdGVySUQqIG1fc2NvcGVSZWdpc3RlciB7IG51bGxwdHIgfTsKKyAgICAgICAg
UmVnaXN0ZXJJRCogbV9hcmd1bWVudHNSZWdpc3RlciB7IG51bGxwdHIgfTsKICAgICAgICAgUmVn
aXN0ZXJJRCogbV9sZXhpY2FsRW52aXJvbm1lbnRSZWdpc3RlciB7IG51bGxwdHIgfTsKICAgICAg
ICAgUmVnaXN0ZXJJRCogbV9lbXB0eVZhbHVlUmVnaXN0ZXIgeyBudWxscHRyIH07CiAgICAgICAg
IFJlZ2lzdGVySUQqIG1fZ2xvYmFsT2JqZWN0UmVnaXN0ZXIgeyBudWxscHRyIH07Ci0gICAgICAg
IFJlZ2lzdGVySUQqIG1fbG9jYWxBcmd1bWVudHNSZWdpc3RlciB7IG51bGxwdHIgfTsKIAotICAg
ICAgICBWZWN0b3I8SWRlbnRpZmllciwgMTY+IG1fd2F0Y2hhYmxlVmFyaWFibGVzOwogICAgICAg
ICBTZWdtZW50ZWRWZWN0b3I8UmVnaXN0ZXJJRCwgMzI+IG1fY29uc3RhbnRQb29sUmVnaXN0ZXJz
OwogICAgICAgICBTZWdtZW50ZWRWZWN0b3I8UmVnaXN0ZXJJRCwgMzI+IG1fY2FsbGVlUmVnaXN0
ZXJzOworICAgICAgICB1bnNpZ25lZCBtX251bUNhcHR1cmVkVmFyaWFibGVzOwogICAgICAgICBT
ZWdtZW50ZWRWZWN0b3I8UmVnaXN0ZXJJRCwgMzI+IG1fcGFyYW1ldGVyczsKICAgICAgICAgU2Vn
bWVudGVkVmVjdG9yPExhYmVsLCAzMj4gbV9sYWJlbHM7CiAgICAgICAgIExhYmVsU2NvcGVTdG9y
ZSBtX2xhYmVsU2NvcGVzOwpAQCAtNzc1LDE1ICs3MjMsMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8Rm9ySW5Db250ZXh0Pj4gbV9mb3JJbkNvbnRl
eHRTdGFjazsKICAgICAgICAgVmVjdG9yPFRyeUNvbnRleHQ+IG1fdHJ5Q29udGV4dFN0YWNrOwog
ICAgICAgICBWZWN0b3I8c3RkOjpwYWlyPFJlZlB0cjxSZWdpc3RlcklEPiwgY29uc3QgRGVjb25z
dHJ1Y3Rpb25QYXR0ZXJuTm9kZSo+PiBtX2RlY29uc3RydWN0ZWRQYXJhbWV0ZXJzOworICAgICAg
ICBWZWN0b3I8RnVuY3Rpb25Cb2R5Tm9kZSo+IG1fZnVuY3Rpb25zVG9Jbml0aWFsaXplOworICAg
ICAgICBib29sIG1fbmVlZFRvSW5pdGlhbGl6ZUFyZ3VtZW50cyB7IGZhbHNlIH07CiAgICAgICAg
IAogICAgICAgICBWZWN0b3I8VHJ5UmFuZ2U+IG1fdHJ5UmFuZ2VzOwogICAgICAgICBTZWdtZW50
ZWRWZWN0b3I8VHJ5RGF0YSwgOD4gbV90cnlEYXRhOwogCiAgICAgICAgIGludCBtX25leHRDb25z
dGFudE9mZnNldCB7IDAgfTsKIAotICAgICAgICBpbnQgbV9maXJzdExhenlGdW5jdGlvbiB7IDAg
fTsKLSAgICAgICAgaW50IG1fbGFzdExhenlGdW5jdGlvbiB7IDAgfTsKLSAgICAgICAgSGFzaE1h
cDx1bnNpZ25lZCBpbnQsIEZ1bmN0aW9uQm9keU5vZGUqLCBXVEY6OkludEhhc2g8dW5zaWduZWQg
aW50PiwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1bnNpZ25lZCBpbnQ+PiBt
X2xhenlGdW5jdGlvbnM7CiAgICAgICAgIHR5cGVkZWYgSGFzaE1hcDxGdW5jdGlvbkJvZHlOb2Rl
KiwgdW5zaWduZWQ+IEZ1bmN0aW9uT2Zmc2V0TWFwOwogICAgICAgICBGdW5jdGlvbk9mZnNldE1h
cCBtX2Z1bmN0aW9uT2Zmc2V0czsKICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCShyZXZpc2lvbiAxODA4
NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTk3NSw3ICs5NzUsNyBAQCBSZWdpc3RlcklEKiBWb2lkTm9k
ZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjCiAgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0TG9hZChkc3Qs
IGpzVW5kZWZpbmVkKCkpOwogfQogCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0g
VHlwZU9mVmFsdWVOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVHlwZU9mUmVzb2x2ZU5vZGUgLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogUmVnaXN0ZXJJRCogVHlwZU9mUmVzb2x2ZU5v
ZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklE
KiBkc3QpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SGVh
cC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RI
ZWFwLmgJKHJldmlzaW9uIDE4MDg3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QWJzdHJhY3RIZWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDcgKzQ3LDYgQEAgbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAgIG1hY3JvKFdvcmxkKSBcCiAgICAgbWFjcm8oU3Rh
Y2spIFwKICAgICBtYWNybyhIZWFwKSBcCi0gICAgbWFjcm8oQXJndW1lbnRzX3JlZ2lzdGVycykg
XAogICAgIG1hY3JvKEJ1dHRlcmZseV9wdWJsaWNMZW5ndGgpIFwKICAgICBtYWNybyhCdXR0ZXJm
bHlfdmVjdG9yTGVuZ3RoKSBcCiAgICAgbWFjcm8oR2V0dGVyU2V0dGVyX2dldHRlcikgXApAQCAt
NjUsNyArNjQsOCBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAgbWFjcm8o
SW5kZXhlZENvbnRpZ3VvdXNQcm9wZXJ0aWVzKSBcCiAgICAgbWFjcm8oSW5kZXhlZEFycmF5U3Rv
cmFnZVByb3BlcnRpZXMpIFwKICAgICBtYWNybyhBcnJheVN0b3JhZ2VQcm9wZXJ0aWVzKSBcCi0g
ICAgbWFjcm8oVmFyaWFibGVzKSBcCisgICAgbWFjcm8oRGlyZWN0QXJndW1lbnRzUHJvcGVydGll
cykgXAorICAgIG1hY3JvKFNjb3BlZEFyZ3VtZW50c1Byb3BlcnRpZXMpIFwKICAgICBtYWNybyhU
eXBlZEFycmF5UHJvcGVydGllcykgXAogICAgIG1hY3JvKEhlYXBPYmplY3RDb3VudCkgLyogVXNl
ZCB0byByZWZsZWN0IHRoZSBmYWN0IHRoYXQgc29tZSBhbGxvY2F0aW9ucyByZXZlYWwgb2JqZWN0
IGlkZW50aXR5ICovXAogICAgIG1hY3JvKFJlZ0V4cFN0YXRlKSBcCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5s
aW5lcy5oCShyZXZpc2lvbiAxODA4NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMzAsNyAr
MTAzMCw4IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAg
ICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KG1fZ3JhcGgs
IG1fZ3JhcGgubV92bS5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpOwogICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czoKKyAgICAgICAgY2FzZSBBcnJheTo6RGly
ZWN0QXJndW1lbnRzOgorICAgICAgICBjYXNlIEFycmF5OjpTY29wZWRBcmd1bWVudHM6CiAgICAg
ICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VIZWFwVG9wKCk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgY2FzZSBBcnJheTo6SW50MzI6CkBAIC0xNjE3LDggKzE2MTgsMTEgQEAgYm9vbCBB
YnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICBjYXNlIEFycmF5OjpB
cnJheVN0b3JhZ2U6CiAgICAgICAgIGNhc2UgQXJyYXk6OlNsb3dQdXRBcnJheVN0b3JhZ2U6CiAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6QXJndW1lbnRzOgotICAgICAg
ICAgICAgZmlsdGVyKG5vZGUtPmNoaWxkMSgpLCBTcGVjQXJndW1lbnRzKTsKKyAgICAgICAgY2Fz
ZSBBcnJheTo6RGlyZWN0QXJndW1lbnRzOgorICAgICAgICAgICAgZmlsdGVyKG5vZGUtPmNoaWxk
MSgpLCBTcGVjRGlyZWN0QXJndW1lbnRzKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIEFycmF5OjpTY29wZWRBcmd1bWVudHM6CisgICAgICAgICAgICBmaWx0ZXIobm9kZS0+Y2hp
bGQxKCksIFNwZWNTY29wZWRBcmd1bWVudHMpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IGNhc2UgQXJyYXk6OkludDhBcnJheToKICAgICAgICAgICAgIGZpbHRlcihub2RlLT5jaGlsZDEo
KSwgU3BlY0ludDhBcnJheSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fy
cmF5TW9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
cnJheU1vZGUuY3BwCShyZXZpc2lvbiAxODA4NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0FycmF5TW9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5Nyw4ICsxOTcsMTUgQEAg
QXJyYXlNb2RlIEFycmF5TW9kZTo6cmVmaW5lKAogICAgICAgICBpZiAoaXNTdHJpbmdTcGVjdWxh
dGlvbihiYXNlKSkKICAgICAgICAgICAgIHJldHVybiB3aXRoVHlwZShBcnJheTo6U3RyaW5nKTsK
ICAgICAgICAgCi0gICAgICAgIGlmIChpc0FyZ3VtZW50c1NwZWN1bGF0aW9uKGJhc2UpKQotICAg
ICAgICAgICAgcmV0dXJuIHdpdGhUeXBlKEFycmF5OjpBcmd1bWVudHMpOworICAgICAgICBpZiAo
aXNEaXJlY3RBcmd1bWVudHNTcGVjdWxhdGlvbihiYXNlKSB8fCBpc1Njb3BlZEFyZ3VtZW50c1Nw
ZWN1bGF0aW9uKGJhc2UpKSB7CisgICAgICAgICAgICAvLyBIYW5kbGUgb3V0LW9mLWJvdW5kcyBh
Y2Nlc3NlcyBhcyBnZW5lcmljIGFjY2Vzc2VzLgorICAgICAgICAgICAgaWYgKGdyYXBoLmhhc0V4
aXRTaXRlKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgT3V0T2ZCb3VuZHMpIHx8ICFpc0luQm91bmRz
KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIEFycmF5TW9kZShBcnJheTo6R2VuZXJpYyk7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChpc0RpcmVjdEFyZ3VtZW50c1NwZWN1bGF0aW9u
KGJhc2UpKQorICAgICAgICAgICAgICAgIHJldHVybiB3aXRoVHlwZShBcnJheTo6RGlyZWN0QXJn
dW1lbnRzKTsKKyAgICAgICAgICAgIHJldHVybiB3aXRoVHlwZShBcnJheTo6U2NvcGVkQXJndW1l
bnRzKTsKKyAgICAgICAgfQogICAgICAgICAKICAgICAgICAgQXJyYXlNb2RlIHJlc3VsdDsKICAg
ICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CkBAIC0zOTYsOCArNDAzLDExIEBAIGJvb2wgQXJy
YXlNb2RlOjphbHJlYWR5Q2hlY2tlZChHcmFwaCYgZ3IKICAgICAgICAgICAgIHJldHVybiB0cnVl
OwogICAgICAgICB9IH0KICAgICAgICAgCi0gICAgY2FzZSBBcnJheTo6QXJndW1lbnRzOgotICAg
ICAgICByZXR1cm4gc3BlY3VsYXRpb25DaGVja2VkKHZhbHVlLm1fdHlwZSwgU3BlY0FyZ3VtZW50
cyk7CisgICAgY2FzZSBBcnJheTo6RGlyZWN0QXJndW1lbnRzOgorICAgICAgICByZXR1cm4gc3Bl
Y3VsYXRpb25DaGVja2VkKHZhbHVlLm1fdHlwZSwgU3BlY0RpcmVjdEFyZ3VtZW50cyk7CisgICAg
ICAgIAorICAgIGNhc2UgQXJyYXk6OlNjb3BlZEFyZ3VtZW50czoKKyAgICAgICAgcmV0dXJuIHNw
ZWN1bGF0aW9uQ2hlY2tlZCh2YWx1ZS5tX3R5cGUsIFNwZWNTY29wZWRBcmd1bWVudHMpOwogICAg
ICAgICAKICAgICBjYXNlIEFycmF5OjpJbnQ4QXJyYXk6CiAgICAgICAgIHJldHVybiBzcGVjdWxh
dGlvbkNoZWNrZWQodmFsdWUubV90eXBlLCBTcGVjSW50OEFycmF5KTsKQEAgLTQ2MSw4ICs0NzEs
MTAgQEAgY29uc3QgY2hhciogYXJyYXlUeXBlVG9TdHJpbmcoQXJyYXk6OlR5cAogICAgICAgICBy
ZXR1cm4gIkFycmF5U3RvcmFnZSI7CiAgICAgY2FzZSBBcnJheTo6U2xvd1B1dEFycmF5U3RvcmFn
ZToKICAgICAgICAgcmV0dXJuICJTbG93UHV0QXJyYXlTdG9yYWdlIjsKLSAgICBjYXNlIEFycmF5
OjpBcmd1bWVudHM6Ci0gICAgICAgIHJldHVybiAiQXJndW1lbnRzIjsKKyAgICBjYXNlIEFycmF5
OjpEaXJlY3RBcmd1bWVudHM6CisgICAgICAgIHJldHVybiAiRGlyZWN0QXJndW1lbnRzIjsKKyAg
ICBjYXNlIEFycmF5OjpTY29wZWRBcmd1bWVudHM6CisgICAgICAgIHJldHVybiAiU2NvcGVkQXJn
dW1lbnRzIjsKICAgICBjYXNlIEFycmF5OjpJbnQ4QXJyYXk6CiAgICAgICAgIHJldHVybiAiSW50
OEFycmF5IjsKICAgICBjYXNlIEFycmF5OjpJbnQxNkFycmF5OgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5oCShyZXZpc2lvbiAxODA4NzUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMywgMjAxNCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTY1LDcgKzY1LDkgQEAgZW51bSBUeXBlIHsKICAgICBBcnJheVN0b3JhZ2UsCiAgICAgU2xv
d1B1dEFycmF5U3RvcmFnZSwKICAgICAKLSAgICBBcmd1bWVudHMsCisgICAgRGlyZWN0QXJndW1l
bnRzLAorICAgIFNjb3BlZEFyZ3VtZW50cywKKyAgICAKICAgICBJbnQ4QXJyYXksCiAgICAgSW50
MTZBcnJheSwKICAgICBJbnQzMkFycmF5LApAQCAtMjk0LDcgKzI5Niw4IEBAIHB1YmxpYzoKICAg
ICAgICAgY2FzZSBBcnJheTo6VW5wcm9maWxlZDoKICAgICAgICAgY2FzZSBBcnJheTo6Rm9yY2VF
eGl0OgogICAgICAgICBjYXNlIEFycmF5OjpHZW5lcmljOgotICAgICAgICBjYXNlIEFycmF5OjpB
cmd1bWVudHM6CisgICAgICAgIGNhc2UgQXJyYXk6OkRpcmVjdEFyZ3VtZW50czoKKyAgICAgICAg
Y2FzZSBBcnJheTo6U2NvcGVkQXJndW1lbnRzOgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0zMjAsMTEgKzMy
Myw5IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHN3aXRjaCAodHlwZSgpKSB7CiAgICAgICAg
IGNhc2UgQXJyYXk6OlN0cmluZzoKKyAgICAgICAgY2FzZSBBcnJheTo6RGlyZWN0QXJndW1lbnRz
OgorICAgICAgICBjYXNlIEFycmF5OjpTY29wZWRBcmd1bWVudHM6CiAgICAgICAgICAgICByZXR1
cm4gQXJyYXlNb2RlKEFycmF5OjpHZW5lcmljKTsKLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAg
ICAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6Ci0gICAgICAgICAgICByZXR1cm4gQXJyYXlNb2Rl
KEFycmF5OjpHZW5lcmljKTsKLSNlbmRpZgogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAg
cmV0dXJuICp0aGlzOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gMTgwODc1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTIyNSwxMSArMjI1LDExIEBAIHByaXZhdGU6CiAgICAgdm9pZCBsaW5rQmxvY2soQmFzaWNC
bG9jayosIFZlY3RvcjxCYXNpY0Jsb2NrKj4mIHBvc3NpYmxlVGFyZ2V0cyk7CiAgICAgdm9pZCBs
aW5rQmxvY2tzKFZlY3RvcjxVbmxpbmtlZEJsb2NrPiYgdW5saW5rZWRCbG9ja3MsIFZlY3RvcjxC
YXNpY0Jsb2NrKj4mIHBvc3NpYmxlVGFyZ2V0cyk7CiAgICAgCi0gICAgVmFyaWFibGVBY2Nlc3NE
YXRhKiBuZXdWYXJpYWJsZUFjY2Vzc0RhdGEoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIGJvb2wg
aXNDYXB0dXJlZCkKKyAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIG5ld1ZhcmlhYmxlQWNjZXNzRGF0
YShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKICAgICB7CiAgICAgICAgIEFTU0VSVCghb3BlcmFu
ZC5pc0NvbnN0YW50KCkpOwogICAgICAgICAKLSAgICAgICAgbV9ncmFwaC5tX3ZhcmlhYmxlQWNj
ZXNzRGF0YS5hcHBlbmQoVmFyaWFibGVBY2Nlc3NEYXRhKG9wZXJhbmQsIGlzQ2FwdHVyZWQpKTsK
KyAgICAgICAgbV9ncmFwaC5tX3ZhcmlhYmxlQWNjZXNzRGF0YS5hcHBlbmQoVmFyaWFibGVBY2Nl
c3NEYXRhKG9wZXJhbmQpKTsKICAgICAgICAgcmV0dXJuICZtX2dyYXBoLm1fdmFyaWFibGVBY2Nl
c3NEYXRhLmxhc3QoKTsKICAgICB9CiAgICAgCkBAIC0zNTgsNyArMzU4LDYgQEAgcHJpdmF0ZToK
ICAgICAgICAgfQogCiAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2N1cnJlbnRCbG9jay0+dmFyaWFi
bGVzQXRUYWlsLmxvY2FsKGxvY2FsKTsKLSAgICAgICAgYm9vbCBpc0NhcHR1cmVkID0gbV9jb2Rl
QmxvY2stPmlzQ2FwdHVyZWQob3BlcmFuZCwgaW5saW5lQ2FsbEZyYW1lKCkpOwogICAgICAgICAK
ICAgICAgICAgLy8gVGhpcyBoYXMgdHdvIGdvYWxzOiAxKSBsaW5rIHRvZ2V0aGVyIHZhcmlhYmxl
IGFjY2VzcyBkYXRhcywgYW5kIDIpCiAgICAgICAgIC8vIHRyeSB0byBhdm9pZCBjcmVhdGluZyBy
ZWR1bmRhbnQgR2V0TG9jYWxzLiAoMSkgaXMgcmVxdWlyZWQgZm9yCkBAIC0zNzAsMjAgKzM2OSwx
NyBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgaWYgKG5vZGUpIHsKICAgICAgICAgICAg
IHZhcmlhYmxlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7Ci0gICAgICAgICAgICB2YXJp
YWJsZS0+bWVyZ2VJc0NhcHR1cmVkKGlzQ2FwdHVyZWQpOwogICAgICAgICAgICAgCi0gICAgICAg
ICAgICBpZiAoIWlzQ2FwdHVyZWQpIHsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9w
KCkpIHsKLSAgICAgICAgICAgICAgICBjYXNlIEdldExvY2FsOgotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gbm9kZTsKLSAgICAgICAgICAgICAgICBjYXNlIFNldExvY2FsOgotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOwotICAgICAgICAgICAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgeworICAgICAgICAgICAgY2FzZSBHZXRM
b2NhbDoKKyAgICAgICAgICAgICAgICByZXR1cm4gbm9kZTsKKyAgICAgICAgICAgIGNhc2UgU2V0
TG9jYWw6CisgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAg
ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9
CiAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgdmFyaWFibGUgPSBuZXdWYXJpYWJsZUFjY2Vz
c0RhdGEob3BlcmFuZCwgaXNDYXB0dXJlZCk7CisgICAgICAgICAgICB2YXJpYWJsZSA9IG5ld1Zh
cmlhYmxlQWNjZXNzRGF0YShvcGVyYW5kKTsKICAgICAgICAgCiAgICAgICAgIG5vZGUgPSBpbmpl
Y3RMYXp5T3BlcmFuZFNwZWN1bGF0aW9uKGFkZFRvR3JhcGgoR2V0TG9jYWwsIE9wSW5mbyh2YXJp
YWJsZSkpKTsKICAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5sb2NhbChs
b2NhbCkgPSBub2RlOwpAQCAtMzk2LDE1ICszOTIsMTQgQEAgcHJpdmF0ZToKICAgICAgICAgbV9j
dXJyZW50U2VtYW50aWNPcmlnaW4gPSBzZW1hbnRpY09yaWdpbjsKIAogICAgICAgICB1bnNpZ25l
ZCBsb2NhbCA9IG9wZXJhbmQudG9Mb2NhbCgpOwotICAgICAgICBib29sIGlzQ2FwdHVyZWQgPSBt
X2NvZGVCbG9jay0+aXNDYXB0dXJlZChvcGVyYW5kLCBpbmxpbmVDYWxsRnJhbWUoKSk7CiAgICAg
ICAgIAogICAgICAgICBpZiAoc2V0TW9kZSAhPSBJbW1lZGlhdGVOYWtlZFNldCkgewogICAgICAg
ICAgICAgQXJndW1lbnRQb3NpdGlvbiogYXJndW1lbnRQb3NpdGlvbiA9IGZpbmRBcmd1bWVudFBv
c2l0aW9uRm9yTG9jYWwob3BlcmFuZCk7Ci0gICAgICAgICAgICBpZiAoaXNDYXB0dXJlZCB8fCBh
cmd1bWVudFBvc2l0aW9uKQorICAgICAgICAgICAgaWYgKGFyZ3VtZW50UG9zaXRpb24pCiAgICAg
ICAgICAgICAgICAgZmx1c2hEaXJlY3Qob3BlcmFuZCwgYXJndW1lbnRQb3NpdGlvbik7CiAgICAg
ICAgIH0KIAotICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9
IG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShvcGVyYW5kLCBpc0NhcHR1cmVkKTsKKyAgICAgICAgVmFy
aWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBuZXdWYXJpYWJsZUFjY2Vzc0Rh
dGEob3BlcmFuZCk7CiAgICAgICAgIHZhcmlhYmxlQWNjZXNzRGF0YS0+bWVyZ2VTdHJ1Y3R1cmVD
aGVja0hvaXN0aW5nRmFpbGVkKAogICAgICAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0
UHJvZmlsZS5oYXNFeGl0U2l0ZShzZW1hbnRpY09yaWdpbi5ieXRlY29kZUluZGV4LCBCYWRDYWNo
ZSkpOwogICAgICAgICB2YXJpYWJsZUFjY2Vzc0RhdGEtPm1lcmdlQ2hlY2tBcnJheUhvaXN0aW5n
RmFpbGVkKApAQCAtNDIzLDI2ICs0MTgsMjIgQEAgcHJpdmF0ZToKICAgICAgICAgQVNTRVJUKGFy
Z3VtZW50IDwgbV9udW1Bcmd1bWVudHMpOwogICAgICAgICAKICAgICAgICAgTm9kZSogbm9kZSA9
IG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwuYXJndW1lbnQoYXJndW1lbnQpOwotICAg
ICAgICBib29sIGlzQ2FwdHVyZWQgPSBtX2NvZGVCbG9jay0+aXNDYXB0dXJlZChvcGVyYW5kKTsK
IAogICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlOwogICAgICAgICAKICAgICAg
ICAgaWYgKG5vZGUpIHsKICAgICAgICAgICAgIHZhcmlhYmxlID0gbm9kZS0+dmFyaWFibGVBY2Nl
c3NEYXRhKCk7Ci0gICAgICAgICAgICB2YXJpYWJsZS0+bWVyZ2VJc0NhcHR1cmVkKGlzQ2FwdHVy
ZWQpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoIWlzQ2FwdHVyZWQpIHsKLSAgICAg
ICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKLSAgICAgICAgICAgICAgICBjYXNlIEdl
dExvY2FsOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZTsKLSAgICAgICAgICAgICAg
ICBjYXNlIFNldExvY2FsOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZS0+Y2hpbGQx
KCkubm9kZSgpOwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3Ao
KSkgeworICAgICAgICAgICAgY2FzZSBHZXRMb2NhbDoKKyAgICAgICAgICAgICAgICByZXR1cm4g
bm9kZTsKKyAgICAgICAgICAgIGNhc2UgU2V0TG9jYWw6CisgICAgICAgICAgICAgICAgcmV0dXJu
IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAg
dmFyaWFibGUgPSBuZXdWYXJpYWJsZUFjY2Vzc0RhdGEob3BlcmFuZCwgaXNDYXB0dXJlZCk7Cisg
ICAgICAgICAgICB2YXJpYWJsZSA9IG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShvcGVyYW5kKTsKICAg
ICAgICAgCiAgICAgICAgIG5vZGUgPSBpbmplY3RMYXp5T3BlcmFuZFNwZWN1bGF0aW9uKGFkZFRv
R3JhcGgoR2V0TG9jYWwsIE9wSW5mbyh2YXJpYWJsZSkpKTsKICAgICAgICAgbV9jdXJyZW50Qmxv
Y2stPnZhcmlhYmxlc0F0VGFpbC5hcmd1bWVudChhcmd1bWVudCkgPSBub2RlOwpAQCAtNDU2LDkg
KzQ0Nyw3IEBAIHByaXZhdGU6CiAgICAgICAgIHVuc2lnbmVkIGFyZ3VtZW50ID0gb3BlcmFuZC50
b0FyZ3VtZW50KCk7CiAgICAgICAgIEFTU0VSVChhcmd1bWVudCA8IG1fbnVtQXJndW1lbnRzKTsK
ICAgICAgICAgCi0gICAgICAgIGJvb2wgaXNDYXB0dXJlZCA9IG1fY29kZUJsb2NrLT5pc0NhcHR1
cmVkKG9wZXJhbmQpOwotCi0gICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nl
c3NEYXRhID0gbmV3VmFyaWFibGVBY2Nlc3NEYXRhKG9wZXJhbmQsIGlzQ2FwdHVyZWQpOworICAg
ICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5ld1ZhcmlhYmxl
QWNjZXNzRGF0YShvcGVyYW5kKTsKIAogICAgICAgICAvLyBBbHdheXMgZmx1c2ggYXJndW1lbnRz
LCBleGNlcHQgZm9yICd0aGlzJy4gSWYgJ3RoaXMnIGlzIGNyZWF0ZWQgYnkgdXMsCiAgICAgICAg
IC8vIHRoZW4gbWFrZSBzdXJlIHRoYXQgaXQncyBuZXZlciB1bmJveGVkLgpAQCAtNTI0LDE5ICs1
MTMsMTYgQEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lkIGZsdXNoRGlyZWN0KFZpcnR1YWxSZWdp
c3RlciBvcGVyYW5kLCBBcmd1bWVudFBvc2l0aW9uKiBhcmd1bWVudFBvc2l0aW9uKQogICAgIHsK
LSAgICAgICAgYm9vbCBpc0NhcHR1cmVkID0gbV9jb2RlQmxvY2stPmlzQ2FwdHVyZWQob3BlcmFu
ZCwgaW5saW5lQ2FsbEZyYW1lKCkpOwotICAgICAgICAKICAgICAgICAgQVNTRVJUKCFvcGVyYW5k
LmlzQ29uc3RhbnQoKSk7CiAgICAgICAgIAogICAgICAgICBOb2RlKiBub2RlID0gbV9jdXJyZW50
QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKG9wZXJhbmQpOwogICAgICAgICAKICAgICAg
ICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZTsKICAgICAgICAgCi0gICAgICAgIGlmIChu
b2RlKSB7CisgICAgICAgIGlmIChub2RlKQogICAgICAgICAgICAgdmFyaWFibGUgPSBub2RlLT52
YXJpYWJsZUFjY2Vzc0RhdGEoKTsKLSAgICAgICAgICAgIHZhcmlhYmxlLT5tZXJnZUlzQ2FwdHVy
ZWQoaXNDYXB0dXJlZCk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgdmFyaWFibGUgPSBu
ZXdWYXJpYWJsZUFjY2Vzc0RhdGEob3BlcmFuZCwgaXNDYXB0dXJlZCk7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIHZhcmlhYmxlID0gbmV3VmFyaWFibGVBY2Nlc3NEYXRhKG9wZXJhbmQpOwog
ICAgICAgICAKICAgICAgICAgbm9kZSA9IGFkZFRvR3JhcGgoRmx1c2gsIE9wSW5mbyh2YXJpYWJs
ZSkpOwogICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQob3Bl
cmFuZCkgPSBub2RlOwpAQCAtNTU3LDExICs1NDMsNiBAQCBwcml2YXRlOgogICAgICAgICAgICAg
bnVtQXJndW1lbnRzID0gaW5saW5lU3RhY2tFbnRyeS0+bV9jb2RlQmxvY2stPm51bVBhcmFtZXRl
cnMoKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBhcmd1bWVudCA9IG51bUFyZ3VtZW50czsgYXJn
dW1lbnQtLSA+IDE7KQogICAgICAgICAgICAgZmx1c2hEaXJlY3QoaW5saW5lU3RhY2tFbnRyeS0+
cmVtYXBPcGVyYW5kKHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGFyZ3VtZW50KSkpOwotICAg
ICAgICBmb3IgKGludCBsb2NhbCA9IDA7IGxvY2FsIDwgaW5saW5lU3RhY2tFbnRyeS0+bV9jb2Rl
QmxvY2stPm1fbnVtVmFyczsgKytsb2NhbCkgewotICAgICAgICAgICAgaWYgKCFpbmxpbmVTdGFj
a0VudHJ5LT5tX2NvZGVCbG9jay0+aXNDYXB0dXJlZCh2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChs
b2NhbCkpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgZmx1c2hEaXJl
Y3QoaW5saW5lU3RhY2tFbnRyeS0+cmVtYXBPcGVyYW5kKHZpcnR1YWxSZWdpc3RlckZvckxvY2Fs
KGxvY2FsKSkpOwotICAgICAgICB9CiAgICAgfQogCiAgICAgdm9pZCBmbHVzaEZvclRlcm1pbmFs
KCkKQEAgLTI1MzksNyArMjUyMCw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2so
dW5zaWduZWQKICAgICAgICAgbV9ncmFwaC5tX2FyZ3VtZW50cy5yZXNpemUobV9udW1Bcmd1bWVu
dHMpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0gMDsgYXJndW1lbnQgPCBtX251
bUFyZ3VtZW50czsgKythcmd1bWVudCkgewogICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRh
KiB2YXJpYWJsZSA9IG5ld1ZhcmlhYmxlQWNjZXNzRGF0YSgKLSAgICAgICAgICAgICAgICB2aXJ0
dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChhcmd1bWVudCksIG1fY29kZUJsb2NrLT5pc0NhcHR1cmVk
KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGFyZ3VtZW50KSkpOworICAgICAgICAgICAgICAg
IHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGFyZ3VtZW50KSk7CiAgICAgICAgICAgICB2YXJp
YWJsZS0+bWVyZ2VTdHJ1Y3R1cmVDaGVja0hvaXN0aW5nRmFpbGVkKAogICAgICAgICAgICAgICAg
IG1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5k
ZXgsIEJhZENhY2hlKSk7CiAgICAgICAgICAgICB2YXJpYWJsZS0+bWVyZ2VDaGVja0FycmF5SG9p
c3RpbmdGYWlsZWQoCkBAIC0zOTQ3LDIyICszOTI4LDYgQEAgQnl0ZUNvZGVQYXJzZXI6OklubGlu
ZVN0YWNrRW50cnk6OklubGluZQogICAgICAgICBtX2lubGluZUNhbGxGcmFtZS0+YXJndW1lbnRz
LnJlc2l6ZShhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyk7IC8vIFNldCB0aGUgbnVtYmVyIG9m
IGFyZ3VtZW50cyBpbmNsdWRpbmcgdGhpcywgYnV0IGRvbid0IGNvbmZpZ3VyZSB0aGUgdmFsdWUg
cmVjb3ZlcmllcywgeWV0LgogICAgICAgICBtX2lubGluZUNhbGxGcmFtZS0+a2luZCA9IGtpbmQ7
CiAgICAgICAgIAotICAgICAgICBpZiAobV9pbmxpbmVDYWxsRnJhbWUtPmNhbGxlci5pbmxpbmVD
YWxsRnJhbWUpCi0gICAgICAgICAgICBtX2lubGluZUNhbGxGcmFtZS0+Y2FwdHVyZWRWYXJzID0g
bV9pbmxpbmVDYWxsRnJhbWUtPmNhbGxlci5pbmxpbmVDYWxsRnJhbWUtPmNhcHR1cmVkVmFyczsK
LSAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9pbmxpbmVDYWxsRnJhbWUtPmNhcHR1cmVkVmFy
cyA9IGJ5dGVDb2RlUGFyc2VyLT5tX2dyYXBoLm1fb3V0ZXJtb3N0Q2FwdHVyZWRWYXJzOwotCi0g
ICAgICAgIGZvciAoaW50IGkgPSBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpczsgaS0tOykgewot
ICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50ID0gdmlydHVhbFJlZ2lzdGVyRm9y
QXJndW1lbnQoaSk7Ci0gICAgICAgICAgICBpZiAoY29kZUJsb2NrLT5pc0NhcHR1cmVkKGFyZ3Vt
ZW50KSkKLSAgICAgICAgICAgICAgICBtX2lubGluZUNhbGxGcmFtZS0+Y2FwdHVyZWRWYXJzLnNl
dChWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnQub2Zmc2V0KCkgKyBtX2lubGluZUNhbGxGcmFtZS0+
c3RhY2tPZmZzZXQpLnRvTG9jYWwoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgZm9yIChzaXplX3Qg
aSA9IGNvZGVCbG9jay0+bV9udW1WYXJzOyBpLS07KSB7Ci0gICAgICAgICAgICBWaXJ0dWFsUmVn
aXN0ZXIgbG9jYWwgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpKTsKLSAgICAgICAgICAgIGlm
IChjb2RlQmxvY2stPmlzQ2FwdHVyZWQobG9jYWwpKQotICAgICAgICAgICAgICAgIG1faW5saW5l
Q2FsbEZyYW1lLT5jYXB0dXJlZFZhcnMuc2V0KFZpcnR1YWxSZWdpc3Rlcihsb2NhbC5vZmZzZXQo
KSArIG1faW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCkudG9Mb2NhbCgpKTsKLSAgICAgICAg
fQotCiAgICAgICAgIGJ5dGVDb2RlUGFyc2VyLT5idWlsZE9wZXJhbmRNYXBzSWZOZWNlc3Nhcnko
KTsKICAgICAgICAgCiAgICAgICAgIG1faWRlbnRpZmllclJlbWFwLnJlc2l6ZShjb2RlQmxvY2st
Pm51bWJlck9mSWRlbnRpZmllcnMoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Nsb2JiZXJpemUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Nsb2JiZXJpemUuaAkocmV2aXNpb24gMTgwODc1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5Niw3ICsyOTYsNyBA
QCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgICAgIHJldHVy
bjsKIAogICAgIGNhc2UgRmx1c2g6Ci0gICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKFZhcmlhYmxl
cywgbm9kZS0+bG9jYWwoKSkpOworICAgICAgICByZWFkKEFic3RyYWN0SGVhcChTdGFjaywgbm9k
ZS0+bG9jYWwoKSkpOwogICAgICAgICB3cml0ZShTaWRlU3RhdGUpOwogICAgICAgICByZXR1cm47
CiAKQEAgLTMxOSw3ICszMTksNyBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2Rl
KiBub2RlCiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBDcmVhdGVBcmd1bWVu
dHM6Ci0gICAgICAgIHJlYWQoVmFyaWFibGVzKTsKKyAgICAgICAgcmVhZChTdGFjayk7CiAgICAg
ICAgIHJlYWQoSGVhcE9iamVjdENvdW50KTsKICAgICAgICAgd3JpdGUoSGVhcE9iamVjdENvdW50
KTsKICAgICAgICAgd3JpdGUoU2lkZVN0YXRlKTsKQEAgLTM5NiwzMSArMzk2LDMxIEBAIHZvaWQg
Y2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICAgICAgcmV0dXJuOwogICAg
ICAgICAKICAgICBjYXNlIEdldENhbGxlZToKLSAgICAgICAgcmVhZChBYnN0cmFjdEhlYXAoVmFy
aWFibGVzLCBKU1N0YWNrOjpDYWxsZWUpKTsKLSAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihWYXJp
YWJsZUxvYywgQWJzdHJhY3RIZWFwKFZhcmlhYmxlcywgSlNTdGFjazo6Q2FsbGVlKSksIG5vZGUp
OworICAgICAgICByZWFkKEFic3RyYWN0SGVhcChTdGFjaywgSlNTdGFjazo6Q2FsbGVlKSk7Cisg
ICAgICAgIGRlZihIZWFwTG9jYXRpb24oU3RhY2tMb2MsIEFic3RyYWN0SGVhcChTdGFjaywgSlNT
dGFjazo6Q2FsbGVlKSksIG5vZGUpOwogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIGNh
c2UgR2V0TG9jYWw6Ci0gICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKFZhcmlhYmxlcywgbm9kZS0+
bG9jYWwoKSkpOwotICAgICAgICBkZWYoSGVhcExvY2F0aW9uKFZhcmlhYmxlTG9jLCBBYnN0cmFj
dEhlYXAoVmFyaWFibGVzLCBub2RlLT5sb2NhbCgpKSksIG5vZGUpOworICAgICAgICByZWFkKEFi
c3RyYWN0SGVhcChTdGFjaywgbm9kZS0+bG9jYWwoKSkpOworICAgICAgICBkZWYoSGVhcExvY2F0
aW9uKFN0YWNrTG9jLCBBYnN0cmFjdEhlYXAoU3RhY2ssIG5vZGUtPmxvY2FsKCkpKSwgbm9kZSk7
CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBTZXRMb2NhbDoKLSAgICAgICAg
d3JpdGUoQWJzdHJhY3RIZWFwKFZhcmlhYmxlcywgbm9kZS0+bG9jYWwoKSkpOwotICAgICAgICBk
ZWYoSGVhcExvY2F0aW9uKFZhcmlhYmxlTG9jLCBBYnN0cmFjdEhlYXAoVmFyaWFibGVzLCBub2Rl
LT5sb2NhbCgpKSksIG5vZGUtPmNoaWxkMSgpLm5vZGUoKSk7CisgICAgICAgIHdyaXRlKEFic3Ry
YWN0SGVhcChTdGFjaywgbm9kZS0+bG9jYWwoKSkpOworICAgICAgICBkZWYoSGVhcExvY2F0aW9u
KFN0YWNrTG9jLCBBYnN0cmFjdEhlYXAoU3RhY2ssIG5vZGUtPmxvY2FsKCkpKSwgbm9kZS0+Y2hp
bGQxKCkubm9kZSgpKTsKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICBjYXNlIEdldFN0
YWNrOiB7Ci0gICAgICAgIEFic3RyYWN0SGVhcCBoZWFwKFZhcmlhYmxlcywgbm9kZS0+c3RhY2tB
Y2Nlc3NEYXRhKCktPmxvY2FsKTsKKyAgICAgICAgQWJzdHJhY3RIZWFwIGhlYXAoU3RhY2ssIG5v
ZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5sb2NhbCk7CiAgICAgICAgIHJlYWQoaGVhcCk7Ci0gICAg
ICAgIGRlZihIZWFwTG9jYXRpb24oVmFyaWFibGVMb2MsIGhlYXApLCBub2RlKTsKKyAgICAgICAg
ZGVmKEhlYXBMb2NhdGlvbihTdGFja0xvYywgaGVhcCksIG5vZGUpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIFB1dFN0YWNrOiB7Ci0gICAgICAgIEFic3RyYWN0
SGVhcCBoZWFwKFZhcmlhYmxlcywgbm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCktPmxvY2FsKTsKKyAg
ICAgICAgQWJzdHJhY3RIZWFwIGhlYXAoU3RhY2ssIG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5s
b2NhbCk7CiAgICAgICAgIHdyaXRlKGhlYXApOwotICAgICAgICBkZWYoSGVhcExvY2F0aW9uKFZh
cmlhYmxlTG9jLCBoZWFwKSwgbm9kZS0+Y2hpbGQxKCkubm9kZSgpKTsKKyAgICAgICAgZGVmKEhl
YXBMb2NhdGlvbihTdGFja0xvYywgaGVhcCksIG5vZGUtPmNoaWxkMSgpLm5vZGUoKSk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAgICAgICAgIApAQCAtNDMyLDggKzQzMiw4IEBAIHZvaWQgY2xv
YmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICAgICAgcmV0dXJuOwogICAgICAg
ICAKICAgICBjYXNlIEdldExvY2FsVW5saW5rZWQ6Ci0gICAgICAgIHJlYWQoQWJzdHJhY3RIZWFw
KFZhcmlhYmxlcywgbm9kZS0+dW5saW5rZWRMb2NhbCgpKSk7Ci0gICAgICAgIGRlZihIZWFwTG9j
YXRpb24oVmFyaWFibGVMb2MsIEFic3RyYWN0SGVhcChWYXJpYWJsZXMsIG5vZGUtPnVubGlua2Vk
TG9jYWwoKSkpLCBub2RlKTsKKyAgICAgICAgcmVhZChBYnN0cmFjdEhlYXAoU3RhY2ssIG5vZGUt
PnVubGlua2VkTG9jYWwoKSkpOworICAgICAgICBkZWYoSGVhcExvY2F0aW9uKFN0YWNrTG9jLCBB
YnN0cmFjdEhlYXAoU3RhY2ssIG5vZGUtPnVubGlua2VkTG9jYWwoKSkpLCBub2RlKTsKICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAKICAgICBjYXNlIEdldEJ5VmFsOiB7CkBAIC00NjYsMTAgKzQ2
NiwxNCBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgICAg
ICAgICBkZWYoUHVyZVZhbHVlKG5vZGUsIG1vZGUuYXNXb3JkKCkpKTsKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgICAgIAotICAgICAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6Ci0gICAg
ICAgICAgICByZWFkKEFyZ3VtZW50c19yZWdpc3RlcnMpOwotICAgICAgICAgICAgcmVhZChWYXJp
YWJsZXMpOwotICAgICAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihJbmRleGVkUHJvcGVydHlMb2Ms
IFZhcmlhYmxlcywgbm9kZS0+Y2hpbGQxKCksIG5vZGUtPmNoaWxkMigpKSwgbm9kZSk7CisgICAg
ICAgIGNhc2UgQXJyYXk6OkRpcmVjdEFyZ3VtZW50czoKKyAgICAgICAgICAgIHJlYWQoRGlyZWN0
QXJndW1lbnRzUHJvcGVydGllcyk7CisgICAgICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEluZGV4
ZWRQcm9wZXJ0eUxvYywgRGlyZWN0QXJndW1lbnRzUHJvcGVydGllcywgbm9kZS0+Y2hpbGQxKCks
IG5vZGUtPmNoaWxkMigpKSwgbm9kZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICAKKyAgICAgICAgY2FzZSBBcnJheTo6U2NvcGVkQXJndW1lbnRzOgorICAgICAgICAgICAgcmVh
ZChTY29wZWRBcmd1bWVudHNQcm9wZXJ0aWVzKTsKKyAgICAgICAgICAgIGRlZihIZWFwTG9jYXRp
b24oSW5kZXhlZFByb3BlcnR5TG9jLCBTY29wZWRBcmd1bWVudHNQcm9wZXJ0aWVzLCBub2RlLT5j
aGlsZDEoKSwgbm9kZS0+Y2hpbGQyKCkpLCBub2RlKTsKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgICAgIAogICAgICAgICBjYXNlIEFycmF5OjpJbnQzMjoKQEAgLTU2MCwxMyArNTY0LDYg
QEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgICAgICAgICAg
d3JpdGUoSGVhcCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAKLSAgICAgICAg
Y2FzZSBBcnJheTo6QXJndW1lbnRzOgotICAgICAgICAgICAgcmVhZChBcmd1bWVudHNfcmVnaXN0
ZXJzKTsKLSAgICAgICAgICAgIHJlYWQoTWlzY0ZpZWxkcyk7Ci0gICAgICAgICAgICB3cml0ZShW
YXJpYWJsZXMpOwotICAgICAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihJbmRleGVkUHJvcGVydHlM
b2MsIFZhcmlhYmxlcywgYmFzZSwgaW5kZXgpLCB2YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcnJheTo6SW50MzI6CiAgICAgICAgICAgICBp
ZiAobm9kZS0+YXJyYXlNb2RlKCkuaXNPdXRPZkJvdW5kcygpKSB7CiAgICAgICAgICAgICAgICAg
cmVhZChXb3JsZCk7CkBAIC03NjEsNyArNzU4LDggQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBn
cmFwaCwgTm9kZSogbm9kZQogICAgICAgICAgICAgZGVmKFB1cmVWYWx1ZShub2RlLCBtb2RlLmFz
V29yZCgpKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAKLSAgICAgICAgY2Fz
ZSBBcnJheTo6QXJndW1lbnRzOgorICAgICAgICBjYXNlIEFycmF5OjpEaXJlY3RBcmd1bWVudHM6
CisgICAgICAgIGNhc2UgQXJyYXk6OlNjb3BlZEFyZ3VtZW50czoKICAgICAgICAgICAgIHJlYWQo
TWlzY0ZpZWxkcyk7CiAgICAgICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEFycmF5TGVuZ3RoTG9j
LCBNaXNjRmllbGRzLCBub2RlLT5jaGlsZDEoKSksIG5vZGUpOwogICAgICAgICAgICAgcmV0dXJu
OwpAQCAtODcwLDI4ICs4NjgsMjMgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9k
ZSogbm9kZQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIAotICAgIGNh
c2UgVGVhck9mZkFyZ3VtZW50czoKLSAgICAgICAgcmVhZChWYXJpYWJsZXMpOwotICAgICAgICB3
cml0ZShBcmd1bWVudHNfcmVnaXN0ZXJzKTsKLSAgICAgICAgcmV0dXJuOwotICAgICAgICAKICAg
ICBjYXNlIEdldE15QXJndW1lbnRzTGVuZ3RoOgotICAgICAgICByZWFkKEFic3RyYWN0SGVhcChW
YXJpYWJsZXMsIGdyYXBoLmFyZ3VtZW50c1JlZ2lzdGVyRm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRp
YykpKTsKLSAgICAgICAgcmVhZChBYnN0cmFjdEhlYXAoVmFyaWFibGVzLCBKU1N0YWNrOjpBcmd1
bWVudENvdW50KSk7CisgICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKFN0YWNrLCBncmFwaC5hcmd1
bWVudHNSZWdpc3RlckZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSk7CisgICAgICAgIHJlYWQo
QWJzdHJhY3RIZWFwKFN0YWNrLCBKU1N0YWNrOjpBcmd1bWVudENvdW50KSk7CiAgICAgICAgIC8v
IEZJWE1FOiBXZSBjb3VsZCBkZWYoKSB0aGlzIGJ5IHNwZWNpZnlpbmcgdGhlIGNvZGUgb3JpZ2lu
IGFzIGEga2luZCBvZiBtX2luZm8sIGxpa2Ugd2UKICAgICAgICAgLy8gaGF2ZSBmb3IgUHVyZVZh
bHVlLgogICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTM0Nzk3CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBHZXRNeUFyZ3VtZW50
QnlWYWw6Ci0gICAgICAgIHJlYWQoVmFyaWFibGVzKTsKKyAgICAgICAgcmVhZChTdGFjayk7CiAg
ICAgICAgIC8vIEZJWE1FOiBXZSBjb3VsZCBkZWYoKSB0aGlzIGJ5IHNwZWNpZnlpbmcgdGhlIGNv
ZGUgb3JpZ2luIGFzIGEga2luZCBvZiBtX2luZm8sIGxpa2Ugd2UKICAgICAgICAgLy8gaGF2ZSBm
b3IgUHVyZVZhbHVlLgogICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTM0Nzk3CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBDaGVj
a0FyZ3VtZW50c05vdENyZWF0ZWQ6Ci0gICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKFZhcmlhYmxl
cywgZ3JhcGguYXJndW1lbnRzUmVnaXN0ZXJGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSkpOwor
ICAgICAgICByZWFkKEFic3RyYWN0SGVhcChTdGFjaywgZ3JhcGguYXJndW1lbnRzUmVnaXN0ZXJG
b3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSkpOwogICAgICAgICByZXR1cm47CiAKICAgICBjYXNl
IFRocm93UmVmZXJlbmNlRXJyb3I6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0ZpeHVwUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHRml4dXBQaGFzZS5jcHAJKHJldmlzaW9uIDE4MDg3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY4NCw3ICs2ODQs
NiBAQCBwcml2YXRlOgogICAgICAgICAgICAgY2FzZSBBcnJheTo6Q29udGlndW91czoKICAgICAg
ICAgICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZToKICAgICAgICAgICAgIGNhc2UgQXJyYXk6
OlNsb3dQdXRBcnJheVN0b3JhZ2U6Ci0gICAgICAgICAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6
CiAgICAgICAgICAgICAgICAgZml4RWRnZTxLbm93bkNlbGxVc2U+KGNoaWxkMSk7CiAgICAgICAg
ICAgICAgICAgZml4RWRnZTxJbnQzMlVzZT4oY2hpbGQyKTsKICAgICAgICAgICAgICAgICBpbnNl
cnRTdG9yZUJhcnJpZXIobV9pbmRleEluQmxvY2ssIGNoaWxkMSwgY2hpbGQzKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiAxODA4NzUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NzUsMTEgKzc1LDYgQEAgR3JhcGg6OkdyYXBoKFZNJiB2bSwgUGxhbiYgcGxhbiwgTG9uZ0xpdgog
ICAgIAogICAgIGZvciAodW5zaWduZWQgaSA9IG1fbXVzdEhhbmRsZVZhbHVlcy5zaXplKCk7IGkt
LTspCiAgICAgICAgIG1fbXVzdEhhbmRsZVZhbHVlc1tpXSA9IGZyZWV6ZUZyYWdpbGUocGxhbi5t
dXN0SGFuZGxlVmFsdWVzW2ldKTsKLSAgICAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2NvZGVC
bG9jay0+bV9udW1WYXJzOyBpLS07KSB7Ci0gICAgICAgIGlmIChtX2NvZGVCbG9jay0+aXNDYXB0
dXJlZCh2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpKSkpCi0gICAgICAgICAgICBtX291dGVybW9z
dENhcHR1cmVkVmFycy5zZXQoaSk7Ci0gICAgfQogfQogCiBHcmFwaDo6fkdyYXBoKCkKQEAgLTc1
NSwxMCArNzUwLDYgQEAgdm9pZCBHcmFwaDo6aW52YWxpZGF0ZUNGRygpCiAKIHZvaWQgR3JhcGg6
OnN1YnN0aXR1dGVHZXRMb2NhbChCYXNpY0Jsb2NrJiBibG9jaywgdW5zaWduZWQgc3RhcnRJbmRl
eEluQmxvY2ssIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhLCBOb2RlKiBu
ZXdHZXRMb2NhbCkKIHsKLSAgICBpZiAodmFyaWFibGVBY2Nlc3NEYXRhLT5pc0NhcHR1cmVkKCkp
IHsKLSAgICAgICAgLy8gTGV0IENTRSB3b3JyeSBhYm91dCB0aGlzIG9uZS4KLSAgICAgICAgcmV0
dXJuOwotICAgIH0KICAgICBmb3IgKHVuc2lnbmVkIGluZGV4SW5CbG9jayA9IHN0YXJ0SW5kZXhJ
bkJsb2NrOyBpbmRleEluQmxvY2sgPCBibG9jay5zaXplKCk7ICsraW5kZXhJbkJsb2NrKSB7CiAg
ICAgICAgIE5vZGUqIG5vZGUgPSBibG9ja1tpbmRleEluQmxvY2tdOwogICAgICAgICBib29sIHNo
b3VsZENvbnRpbnVlID0gdHJ1ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
R3JhcGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBo
LmgJKHJldmlzaW9uIDE4MDg3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3Jh
cGguaAkod29ya2luZyBjb3B5KQpAQCAtMzY3LDEzICszNjcsNiBAQCBwdWJsaWM6CiAgICAgICAg
IHJldHVybiBiYXNlbGluZUNvZGVCbG9ja0Zvck9yaWdpbkFuZEJhc2VsaW5lQ29kZUJsb2NrKGNv
ZGVPcmlnaW4sIG1fcHJvZmlsZWRCbG9jayk7CiAgICAgfQogICAgIAotICAgIGNvbnN0IEJpdFZl
Y3RvciYgY2FwdHVyZWRWYXJzRm9yKElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lKQot
ICAgIHsKLSAgICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUpCi0gICAgICAgICAgICByZXR1cm4g
bV9vdXRlcm1vc3RDYXB0dXJlZFZhcnM7Ci0gICAgICAgIHJldHVybiBpbmxpbmVDYWxsRnJhbWUt
PmNhcHR1cmVkVmFyczsKLSAgICB9Ci0gICAgCiAgICAgYm9vbCBpc1N0cmljdE1vZGVGb3IoQ29k
ZU9yaWdpbiBjb2RlT3JpZ2luKQogICAgIHsKICAgICAgICAgaWYgKCFjb2RlT3JpZ2luLmlubGlu
ZUNhbGxGcmFtZSkKQEAgLTgzNSw3ICs4MjgsNiBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgbV9w
YXJhbWV0ZXJTbG90czsKICAgICBpbnQgbV9tYWNoaW5lQ2FwdHVyZVN0YXJ0OwogICAgIHN0ZDo6
dW5pcXVlX3B0cjxTbG93QXJndW1lbnRbXT4gbV9zbG93QXJndW1lbnRzOwotICAgIEJpdFZlY3Rv
ciBtX291dGVybW9zdENhcHR1cmVkVmFyczsKIAogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAg
c3RkOjp1bm9yZGVyZWRfbWFwPGludDY0X3QsIGRvdWJsZSo+IG1fZG91YmxlQ29uc3RhbnRzTWFw
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdIZWFwTG9jYXRpb24uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0hlYXBMb2NhdGlvbi5oCShy
ZXZpc2lvbiAxODA4NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0hlYXBMb2Nh
dGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC01OSw3ICs1OSw3IEBAIGVudW0gTG9jYXRpb25LaW5k
IHsKICAgICBUeXBlT2ZMb2MsCiAgICAgVHlwZWRBcnJheUJ5dGVPZmZzZXRMb2MsCiAgICAgVmFy
SW5qZWN0aW9uV2F0Y2hwb2ludExvYywKLSAgICBWYXJpYWJsZUxvYworICAgIFN0YWNrTG9jCiB9
OwogCiBjbGFzcyBIZWFwTG9jYXRpb24gewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdQcmVjaXNlTG9jYWxDbG9iYmVyaXplLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdQcmVjaXNlTG9jYWxDbG9iYmVyaXplLmgJKHJldmlzaW9uIDE4MDg3
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlY2lzZUxvY2FsQ2xvYmJlcml6
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjEsMTIgKzEyMSw2IEBAIHByaXZhdGU6CiAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBKU1N0YWNrOjpUaGlzQXJndW1lbnQ7ICsraSkKICAg
ICAgICAgICAgIG1fcmVhZChWaXJ0dWFsUmVnaXN0ZXIoaSkpOwogICAgICAgICAKLSAgICAgICAg
Ly8gUmVhZCBhbGwgb2YgdGhlIGNhcHR1cmVkIHZhcmlhYmxlcy4KLSAgICAgICAgY29uc3QgQml0
VmVjdG9yJiBjYXB0dXJlZFZhcnMgPQotICAgICAgICAgICAgbV9ncmFwaC5jYXB0dXJlZFZhcnNG
b3IobV9ub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKTsKLSAgICAgICAgZm9y
ICh1bnNpZ25lZCBpIDogY2FwdHVyZWRWYXJzLnNldEJpdHMoKSkKLSAgICAgICAgICAgIG1fcmVh
ZCh2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpKSk7Ci0gICAgICAgIAogICAgICAgICAvLyBSZWFk
IGFsbCBvZiB0aGUgaW5saW5lIGFyZ3VtZW50cyBhbmQgY2FsbCBmcmFtZSBoZWFkZXJzIHRoYXQg
d2UgZGlkbid0IGFscmVhZHkgY2FwdHVyZS4KICAgICAgICAgZm9yIChJbmxpbmVDYWxsRnJhbWUq
IGlubGluZUNhbGxGcmFtZSA9IG1fbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFt
ZTsgaW5saW5lQ2FsbEZyYW1lOyBpbmxpbmVDYWxsRnJhbWUgPSBpbmxpbmVDYWxsRnJhbWUtPmNh
bGxlci5pbmxpbmVDYWxsRnJhbWUpIHsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGlu
bGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKTsgaS0tID4gMTspCkBAIC0xMzYsNiArMTMw
LDkgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJn
cygpKQogICAgICAgICAgICAgICAgIG1fcmVhZChWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZy
YW1lLT5zdGFja09mZnNldCArIEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpKTsKICAgICAgICAgfQor
CisgICAgICAgIC8vIE5vdGUgdGhhdCB3ZSBkb24ndCBuZWVkIHRvIGRvIGFueXRoaW5nIHNwZWNp
YWwgZm9yIENhbGxGb3J3YXJkVmFyYXJncywgc2luY2UgaXQgcmVhZHMKKyAgICAgICAgLy8gb3Vy
IGFyZ3VtZW50cyB0aGUgc2FtZSB3YXkgdGhhdCBhbnkgZWZmZWN0ZnVsIHRoaW5nIG1pZ2h0Lgog
ICAgIH0KICAgICAKICAgICB2b2lkIHdyaXRlVG9wKCkKQEAgLTE0OCwxOSArMTQ1LDYgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGRhdGEtPmxpbWl0OyBpLS07KQog
ICAgICAgICAgICAgICAgIG1fd3JpdGUoVmlydHVhbFJlZ2lzdGVyKGRhdGEtPnN0YXJ0Lm9mZnNl
dCgpICsgaSkpOwogICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAvLyBOb3RlIHRoYXQgd2Ug
ZG9uJ3QgbmVlZCB0byBkbyBhbnl0aGluZyBzcGVjaWFsIGZvciBDYWxsRm9yd2FyZFZhcmFyZ3Ms
IHNpbmNlIGl0IHJlYWRzCi0gICAgICAgIC8vIG91ciBhcmd1bWVudHMgdGhlIHNhbWUgd2F5IHRo
YXQgYW55IGVmZmVjdGZ1bCB0aGluZyBtaWdodC4KLSAgICAgICAgCi0gICAgICAgIGlmIChtX2dy
YXBoLm1fY29kZUJsb2NrLT51c2VzQXJndW1lbnRzKCkpIHsKLSAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IG1fZ3JhcGgubV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKTsgaS0tID4gMTsp
Ci0gICAgICAgICAgICAgICAgbV93cml0ZSh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpKSk7
Ci0gICAgICAgIH0KLQotICAgICAgICBjb25zdCBCaXRWZWN0b3ImIGNhcHR1cmVkVmFycyA9Ci0g
ICAgICAgICAgICBtX2dyYXBoLmNhcHR1cmVkVmFyc0ZvcihtX25vZGUtPm9yaWdpbi5zZW1hbnRp
Yy5pbmxpbmVDYWxsRnJhbWUpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgOiBjYXB0dXJlZFZh
cnMuc2V0Qml0cygpKQotICAgICAgICAgICAgbV93cml0ZSh2aXJ0dWFsUmVnaXN0ZXJGb3JMb2Nh
bChpKSk7CiAgICAgfQogICAgIAogICAgIEdyYXBoJiBtX2dyYXBoOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lv
biAxODA4NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
NjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTk4LDggKzI1OTgsMTEgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBjYXNlIEFycmF5OjpTdHJpbmc6
CiAgICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPblN0cmluZyhub2RlKTsKICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6Ci0gICAgICAgICAgICBjb21w
aWxlR2V0QnlWYWxPbkFyZ3VtZW50cyhub2RlKTsKKyAgICAgICAgY2FzZSBBcnJheTo6RGlyZWN0
QXJndW1lbnRzOgorICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25EaXJlY3RBcmd1bWVudHMo
bm9kZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBcnJheTo6U2NvcGVkQXJn
dW1lbnRzOgorICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25TY29wZWRBcmd1bWVudHMobm9k
ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDogewogICAgICAgICAgICAg
VHlwZWRBcnJheVR5cGUgdHlwZSA9IG5vZGUtPmFycmF5TW9kZSgpLnR5cGVkQXJyYXlUeXBlKCk7
CkBAIC0yODI5LDQ3ICsyODMyLDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2Rl
KiBub2RlKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAotICAg
ICAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6IHsKLSAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5k
IHZhbHVlKHRoaXMsIGNoaWxkMyk7Ci0gICAgICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0
aGlzKTsKLSAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoMih0aGlzKTsKLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgR1BSUmVnIHZhbHVlUmVnID0gdmFsdWUuZ3ByKCk7Ci0gICAgICAg
ICAgICBHUFJSZWcgc2NyYXRjaFJlZyA9IHNjcmF0Y2guZ3ByKCk7Ci0gICAgICAgICAgICBHUFJS
ZWcgc2NyYXRjaDJSZWcgPSBzY3JhdGNoMi5ncHIoKTsKLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgaWYgKCFtX2NvbXBpbGVPa2F5KQotICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAg
ICAgICAgLy8gVHdvIHJlYWxseSBsYW1lIGNoZWNrcy4KLSAgICAgICAgICAgIHNwZWN1bGF0aW9u
Q2hlY2soCi0gICAgICAgICAgICAgICAgVW5jb3VudGFibGUsIEpTVmFsdWVTb3VyY2UoKSwgMCwK
LSAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2gzMigKLSAgICAgICAgICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsCi0gICAgICAgICAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEFyZ3VtZW50czo6b2Zmc2V0T2ZO
dW1Bcmd1bWVudHMoKSkpKTsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0gICAgICAg
ICAgICAgICAgVW5jb3VudGFibGUsIEpTVmFsdWVTb3VyY2UoKSwgMCwKLSAgICAgICAgICAgICAg
ICBtX2ppdC5icmFuY2hUZXN0UHRyKAotICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6Tm9uWmVybywKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
Ci0gICAgICAgICAgICAgICAgICAgICAgICBiYXNlUmVnLCBBcmd1bWVudHM6Om9mZnNldE9mU2xv
d0FyZ3VtZW50RGF0YSgpKSkpOwotCi0gICAgICAgICAgICBtX2ppdC5tb3ZlKHByb3BlcnR5UmVn
LCBzY3JhdGNoMlJlZyk7Ci0gICAgICAgICAgICBtX2ppdC5zaWduRXh0ZW5kMzJUb1B0cihzY3Jh
dGNoMlJlZywgc2NyYXRjaDJSZWcpOwotICAgICAgICAgICAgbV9qaXQubG9hZFB0cigKLSAgICAg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBBcmd1bWVudHM6Om9m
ZnNldE9mUmVnaXN0ZXJzKCkpLAotICAgICAgICAgICAgICAgIHNjcmF0Y2hSZWcpOwotICAgICAg
ICAgICAgCi0gICAgICAgICAgICBtX2ppdC5zdG9yZTY0KAotICAgICAgICAgICAgICAgIHZhbHVl
UmVnLAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoCi0gICAgICAg
ICAgICAgICAgICAgIHNjcmF0Y2hSZWcsIHNjcmF0Y2gyUmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGlt
ZXNFaWdodCwKLSAgICAgICAgICAgICAgICAgICAgQ2FsbEZyYW1lOjp0aGlzQXJndW1lbnRPZmZz
ZXQoKSAqIHNpemVvZihSZWdpc3RlcikgKyBzaXplb2YoUmVnaXN0ZXIpKSk7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIG5vUmVzdWx0KG5vZGUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICAgICAgICAgIAogICAgICAgICBkZWZhdWx0OiB7CiAgICAgICAgICAgICBUeXBl
ZEFycmF5VHlwZSB0eXBlID0gYXJyYXlNb2RlLnR5cGVkQXJyYXlUeXBlKCk7CiAgICAgICAgICAg
ICBpZiAoaXNJbnQodHlwZSkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gMTgwODc1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcy
Miw5ICs3MjIsMTIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2hlY2tBcnJheShOb2RlKiBubwog
ICAgICAgICBub1Jlc3VsdChtX2N1cnJlbnROb2RlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
LSAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6Ci0gICAgICAgIHNwZWN1bGF0ZUNlbGxUeXBlV2l0
aG91dFR5cGVGaWx0ZXJpbmcobm9kZS0+Y2hpbGQxKCksIGJhc2VSZWcsIEFyZ3VtZW50c1R5cGUp
OwotCisgICAgY2FzZSBBcnJheTo6RGlyZWN0QXJndW1lbnRzOgorICAgICAgICBzcGVjdWxhdGVD
ZWxsVHlwZVdpdGhvdXRUeXBlRmlsdGVyaW5nKG5vZGUtPmNoaWxkMSgpLCBiYXNlUmVnLCBEaXJl
Y3RBcmd1bWVudHNUeXBlKTsKKyAgICAgICAgbm9SZXN1bHQobV9jdXJyZW50Tm9kZSk7CisgICAg
ICAgIHJldHVybjsKKyAgICBjYXNlIEFycmF5OjpTY29wZWRBcmd1bWVudHM6CisgICAgICAgIHNw
ZWN1bGF0ZUNlbGxUeXBlV2l0aG91dFR5cGVGaWx0ZXJpbmcobm9kZS0+Y2hpbGQxKCksIGJhc2VS
ZWcsIFNjb3BlZEFyZ3VtZW50c1R5cGUpOwogICAgICAgICBub1Jlc3VsdChtX2N1cnJlbnROb2Rl
KTsKICAgICAgICAgcmV0dXJuOwogICAgIGRlZmF1bHQ6CkBAIC00MDg4LDcgKzQwOTEsNyBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0VHlwZWRBcnJhCiAgICAgaW50MzJSZXN1bHQo
dmVjdG9yR1BSLCBub2RlKTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5
VmFsT25Bcmd1bWVudHMoTm9kZSogbm9kZSkKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVH
ZXRCeVZhbE9uRGlyZWN0QXJndW1lbnRzKE5vZGUqIG5vZGUpCiB7CiAgICAgU3BlY3VsYXRlQ2Vs
bE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgU3BlY3VsYXRlU3RyaWN0
SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKQEAgLTQxMDMsODAg
KzQxMDYsODkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25BcgogICAg
IEdQUlJlZyByZXN1bHRSZWcgPSByZXN1bHQuZ3ByKCk7CiAjaWYgVVNFKEpTVkFMVUUzMl82NCkK
ICAgICBHUFJSZWcgcmVzdWx0VGFnUmVnID0gcmVzdWx0VGFnLmdwcigpOworICAgIEpTVmFsdWVS
ZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZXN1bHRUYWdSZWcsIHJlc3VsdFJlZyk7Cisj
ZWxzZQorICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZXN1bHRSZWcp
OwogI2VuZGlmCiAgICAgR1BSUmVnIHNjcmF0Y2hSZWcgPSBzY3JhdGNoLmdwcigpOwogICAgIAog
ICAgIGlmICghbV9jb21waWxlT2theSkKICAgICAgICAgcmV0dXJuOwotICAKLSAgICBBU1NFUlQo
QXJyYXlNb2RlKEFycmF5OjpBcmd1bWVudHMpLmFscmVhZHlDaGVja2VkKG1faml0LmdyYXBoKCks
IG5vZGUsIG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSkpKTsKICAgICAKLSAgICAvLyBU
d28gcmVhbGx5IGxhbWUgY2hlY2tzLgotICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0gICAgICAgIEV4
b3RpY09iamVjdE1vZGUsIEpTVmFsdWVTb3VyY2UoKSwgMCwKLSAgICAgICAgbV9qaXQuYnJhbmNo
MzIoCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJl
ZywKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEFyZ3VtZW50
czo6b2Zmc2V0T2ZOdW1Bcmd1bWVudHMoKSkpKTsKKyAgICBBU1NFUlQoQXJyYXlNb2RlKEFycmF5
OjpEaXJlY3RBcmd1bWVudHMpLmFscmVhZHlDaGVja2VkKG1faml0LmdyYXBoKCksIG5vZGUsIG1f
c3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSkpKTsKKyAgICAKICAgICBzcGVjdWxhdGlvbkNo
ZWNrKAogICAgICAgICBFeG90aWNPYmplY3RNb2RlLCBKU1ZhbHVlU291cmNlKCksIDAsCiAgICAg
ICAgIG1faml0LmJyYW5jaFRlc3RQdHIoCiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm9u
WmVybywKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKAotICAgICAgICAgICAg
ICAgIGJhc2VSZWcsIEFyZ3VtZW50czo6b2Zmc2V0T2ZTbG93QXJndW1lbnREYXRhKCkpKSk7Ci0g
ICAgCi0gICAgbV9qaXQubW92ZShwcm9wZXJ0eVJlZywgcmVzdWx0UmVnKTsKLSAgICBtX2ppdC5z
aWduRXh0ZW5kMzJUb1B0cihyZXN1bHRSZWcsIHJlc3VsdFJlZyk7Ci0gICAgbV9qaXQubG9hZFB0
cigKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgQXJndW1lbnRzOjpv
ZmZzZXRPZlJlZ2lzdGVycygpKSwKLSAgICAgICAgc2NyYXRjaFJlZyk7CisgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBEaXJlY3RBcmd1bWVudHM6Om9mZnNldE9m
T3ZlcnJpZGVzKCkpKSk7CisgICAgc3BlY3VsYXRpb25DaGVjaygKKyAgICAgICAgRXhvdGljT2Jq
ZWN0TW9kZSwgSlNWYWx1ZVNvdXJjZSgpLCAwLAorICAgICAgICBtX2ppdC5icmFuY2gzMigKKyAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLAorICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgRGlyZWN0QXJndW1lbnRz
OjpvZmZzZXRPZkxlbmd0aCgpKSkpOwogICAgIAotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAg
bV9qaXQubG9hZDMyKAotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KAotICAgICAg
ICAgICAgc2NyYXRjaFJlZywgcmVzdWx0UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwK
LSAgICAgICAgICAgIENhbGxGcmFtZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCkgKiBzaXplb2YoUmVn
aXN0ZXIpICsgc2l6ZW9mKFJlZ2lzdGVyKSArCi0gICAgICAgICAgICBPQkpFQ1RfT0ZGU0VUT0Yo
SlNWYWx1ZSwgdS5hc0JpdHMudGFnKSksCi0gICAgICAgIHJlc3VsdFRhZ1JlZyk7Ci0gICAgbV9q
aXQubG9hZDMyKAotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KAotICAgICAgICAg
ICAgc2NyYXRjaFJlZywgcmVzdWx0UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwKLSAg
ICAgICAgICAgIENhbGxGcmFtZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0
ZXIpICsgc2l6ZW9mKFJlZ2lzdGVyKSArCi0gICAgICAgICAgICBPQkpFQ1RfT0ZGU0VUT0YoSlNW
YWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpLAotICAgICAgICByZXN1bHRSZWcpOwotICAgIGpzVmFs
dWVSZXN1bHQocmVzdWx0VGFnUmVnLCByZXN1bHRSZWcsIG5vZGUpOwotI2Vsc2UKLSAgICBtX2pp
dC5sb2FkNjQoCisgICAgbV9qaXQubG9hZFZhbHVlKAogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
QmFzZUluZGV4KAotICAgICAgICAgICAgc2NyYXRjaFJlZywgcmVzdWx0UmVnLCBNYWNyb0Fzc2Vt
Ymxlcjo6VGltZXNFaWdodCwKLSAgICAgICAgICAgIENhbGxGcmFtZTo6dGhpc0FyZ3VtZW50T2Zm
c2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpICsgc2l6ZW9mKFJlZ2lzdGVyKSksCi0gICAgICAgIHJl
c3VsdFJlZyk7Ci0gICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWcsIG5vZGUpOwotI2VuZGlmCisg
ICAgICAgICAgICBiYXNlUmVnLCBwcm9wZXJ0eVJlZywgVGltZXNFaWdodCwgRGlyZWN0QXJndW1l
bnRzOjpzdG9yYWdlT2Zmc2V0KCkpLAorICAgICAgICByZXN1bHRSZWdzKTsKKyAgICAKKyAgICBq
c1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG5vZGUpOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlR2V0QXJndW1lbnRzTGVuZ3RoKE5vZGUqIG5vZGUpCit2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlR2V0QnlWYWxPblNjb3BlZEFyZ3VtZW50cyhOb2RlKiBub2RlKQogewogICAg
IFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgIEdQ
UlRlbXBvcmFyeSByZXN1bHQodGhpcywgUmV1c2UsIGJhc2UpOworICAgIFNwZWN1bGF0ZVN0cmlj
dEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBub2RlLT5jaGlsZDIoKSk7CisgICAgR1BSVGVt
cG9yYXJ5IHJlc3VsdCh0aGlzKTsKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgIEdQUlRlbXBv
cmFyeSByZXN1bHRUYWcodGhpcyk7CisjZW5kaWYKKyAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0
aGlzKTsKKyAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaDIodGhpcyk7CiAgICAgCiAgICAgR1BSUmVn
IGJhc2VSZWcgPSBiYXNlLmdwcigpOworICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5
LmdwcigpOwogICAgIEdQUlJlZyByZXN1bHRSZWcgPSByZXN1bHQuZ3ByKCk7CisjaWYgVVNFKEpT
VkFMVUUzMl82NCkKKyAgICBHUFJSZWcgcmVzdWx0VGFnUmVnID0gcmVzdWx0VGFnLmdwcigpOwor
ICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZXN1bHRUYWdSZWcsIHJl
c3VsdFJlZyk7CisjZWxzZQorICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVn
cyhyZXN1bHRSZWcpOworI2VuZGlmCisgICAgR1BSUmVnIHNjcmF0Y2hSZWcgPSBzY3JhdGNoLmdw
cigpOworICAgIEdQUlJlZyBzY3JhdGNoMlJlZyA9IHNjcmF0Y2gyLmdwcigpOwogICAgIAogICAg
IGlmICghbV9jb21waWxlT2theSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIEFTU0VSVChB
cnJheU1vZGUoQXJyYXk6OkFyZ3VtZW50cykuYWxyZWFkeUNoZWNrZWQobV9qaXQuZ3JhcGgoKSwg
bm9kZSwgbV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgpKSkpOworICAgIEFTU0VSVChBcnJh
eU1vZGUoQXJyYXk6OlNjb3BlZEFyZ3VtZW50cykuYWxyZWFkeUNoZWNrZWQobV9qaXQuZ3JhcGgo
KSwgbm9kZSwgbV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgpKSkpOworICAgIAorICAgIG1f
aml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgU2NvcGVkQXJndW1l
bnRzOjpvZmZzZXRPZlRhYmxlKCkpLCBzY3JhdGNoUmVnKTsKKyAgICBtX2ppdC5sb2FkUHRyKE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIFNjb3BlZEFyZ3VtZW50czo6b2Zmc2V0T2ZT
Y29wZSgpKSwgc2NyYXRjaDJSZWcpOwogICAgIAogICAgIHNwZWN1bGF0aW9uQ2hlY2soCiAgICAg
ICAgIEV4b3RpY09iamVjdE1vZGUsIEpTVmFsdWVTb3VyY2UoKSwgMCwKLSAgICAgICAgbV9qaXQu
YnJhbmNoVGVzdDgoCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywKLSAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEFyZ3VtZW50czo6b2Zmc2V0
T2ZPdmVycm9kZUxlbmd0aCgpKSkpOworICAgICAgICBtX2ppdC5icmFuY2gzMigKKyAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLAorICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoU2NvcGVkQXJndW1lbnRzVGFibGU6Om9mZnNldE9m
TGVuZ3RoKCkpKSk7CisgICAgCisgICAgbV9qaXQubG9hZFB0cigKKyAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3Moc2NyYXRjaFJlZywgU2NvcGVkQXJndW1lbnRzVGFibGU6Om9mZnNldE9m
QXJndW1lbnRzKCkpLAorICAgICAgICBzY3JhdGNoUmVnKTsKKyAgICBtX2ppdC5sb2FkMzIoTWFj
cm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzY3JhdGNoUmVnLCBwcm9wZXJ0eVJlZywgVGltZXNGb3Vy
KSwgc2NyYXRjaFJlZyk7CisgICAgCisgICAgc3BlY3VsYXRpb25DaGVjaygKKyAgICAgICAgRXhv
dGljT2JqZWN0TW9kZSwgSlNWYWx1ZVNvdXJjZSgpLCAwLAorICAgICAgICBtX2ppdC5icmFuY2gz
MigKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgc2NyYXRjaFJlZywgVHJ1c3Rl
ZEltbTMyKFNjb3BlT2Zmc2V0OjppbnZhbGlkT2Zmc2V0KSkpOworICAgIAorICAgIG1faml0Lmxv
YWRWYWx1ZSgKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleCgKKyAgICAgICAgICAg
IGJhc2UyUmVnLCBwcm9wZXJ0eVJlZywgVGltZXNFaWdodCwgSlNFbnZpcm9ubWVudFJlY29yZDo6
b2Zmc2V0T2ZWYXJpYWJsZXMoKSksCisgICAgICAgIHJlc3VsdFJlZ3MpOwogICAgIAotICAgIG1f
aml0LmxvYWQzMigKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgQXJn
dW1lbnRzOjpvZmZzZXRPZk51bUFyZ3VtZW50cygpKSwKLSAgICAgICAgcmVzdWx0UmVnKTsKLSAg
ICBpbnQzMlJlc3VsdChyZXN1bHRSZWcsIG5vZGUpOworICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0
UmVncywgbm9kZSk7CiB9CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRTY29wZShO
b2RlKiBub2RlKQpAQCAtNDIzMiw4ICs0MjQ0LDU2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVHZXRBcnJheUxlbmcKICAgICAgICAgaW50MzJSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czogewotICAg
ICAgICBjb21waWxlR2V0QXJndW1lbnRzTGVuZ3RoKG5vZGUpOworICAgIGNhc2UgQXJyYXk6OkRp
cmVjdEFyZ3VtZW50czogeworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMs
IG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBSZXVz
ZSwgYmFzZSk7CisgICAgICAgIAorICAgICAgICBHUFJSZWcgYmFzZVJlZyA9IGJhc2UuZ3ByKCk7
CisgICAgICAgIEdQUlJlZyByZXN1bHRSZWcgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIAorICAg
ICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAor
ICAgICAgICBBU1NFUlQoQXJyYXlNb2RlKEFycmF5OjpEaXJlY3RBcmd1bWVudHMpLmFscmVhZHlD
aGVja2VkKG1faml0LmdyYXBoKCksIG5vZGUsIG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEo
KSkpKTsKKyAgICAgICAgCisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCisgICAgICAgICAgICBF
eG90aWNPYmplY3RNb2RlLCBKU1ZhbHVlU291cmNlKCksIDAsCisgICAgICAgICAgICBtX2ppdC5i
cmFuY2hUZXN0UHRyKAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLAor
ICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIERpcmVjdEFy
Z3VtZW50czo6b2Zmc2V0T2ZPdmVycmlkZXMoKSkpKTsKKyAgICAgICAgCisgICAgICAgIG1faml0
LmxvYWQzMigKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIERp
cmVjdEFyZ3VtZW50czo6b2Zmc2V0T2ZMZW5ndGgoKSksIHJlc3VsdFJlZyk7CisgICAgICAgIAor
ICAgICAgICBpbnQzMlJlc3VsdChyZXN1bHRSZWcsIG5vZGUpOworICAgICAgICBicmVhazsKKyAg
ICB9CisgICAgY2FzZSBBcnJheTo6U2NvcGVkQXJndW1lbnRzOiB7CisgICAgICAgIFNwZWN1bGF0
ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBHUFJUZW1w
b3JhcnkgcmVzdWx0KHRoaXMsIFJldXNlLCBiYXNlKTsKKyAgICAgICAgCisgICAgICAgIEdQUlJl
ZyBiYXNlUmVnID0gYmFzZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdFJlZyA9IHJlc3Vs
dC5ncHIoKTsKKyAgICAgICAgCisgICAgICAgIGlmICghbV9jb21waWxlT2theSkKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIEFTU0VSVChBcnJheU1vZGUoQXJyYXk6OlNj
b3BlZEFyZ3VtZW50cykuYWxyZWFkeUNoZWNrZWQobV9qaXQuZ3JhcGgoKSwgbm9kZSwgbV9zdGF0
ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgpKSkpOworICAgICAgICAKKyAgICAgICAgc3BlY3VsYXRp
b25DaGVjaygKKyAgICAgICAgICAgIEV4b3RpY09iamVjdE1vZGUsIEpTVmFsdWVTb3VyY2UoKSwg
MCwKKyAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3Q4KAorICAgICAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpOb25aZXJvLAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKGJhc2VSZWcsIFNjb3BlZEFyZ3VtZW50czo6b2Zmc2V0T2ZPdmVycm9kZVRoaW5ncygpKSkp
OworICAgICAgICAKKyAgICAgICAgbV9qaXQubG9hZFB0cigKKyAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIFNjb3BlZEFyZ3VtZW50czo6b2Zmc2V0T2ZUYWJsZSgp
KSwgcmVzdWx0UmVnKTsKKyAgICAgICAgCisgICAgICAgIG1faml0LmxvYWQzMigKKyAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJlc3VsdFJlZywgU2NvcGVkQXJndW1lbnRzVGFi
bGU6Om9mZnNldE9mTGVuZ3RoKCkpLAorICAgICAgICAgICAgcmVzdWx0UmVnKTsKKyAgICAgICAg
CisgICAgICAgIGludDMyUmVzdWx0KHJlc3VsdFJlZywgbm9kZSk7CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KICAgICBkZWZhdWx0OiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVC5oCShyZXZpc2lvbiAxODA4NzUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTIxNTIs
OCArMjE1Miw5IEBAIHB1YmxpYzoKICAgICB2b2lkIGNvbXBpbGVHZXRCeVZhbE9uU3RyaW5nKE5v
ZGUqKTsKICAgICB2b2lkIGNvbXBpbGVGcm9tQ2hhckNvZGUoTm9kZSopOyAKIAotICAgIHZvaWQg
Y29tcGlsZUdldEJ5VmFsT25Bcmd1bWVudHMoTm9kZSopOwotICAgIHZvaWQgY29tcGlsZUdldEFy
Z3VtZW50c0xlbmd0aChOb2RlKik7CisgICAgdm9pZCBjb21waWxlR2V0QnlWYWxPbkRpcmVjdEFy
Z3VtZW50cyhOb2RlKik7CisgICAgdm9pZCBjb21waWxlR2V0QnlWYWxPblNjb3BlZEFyZ3VtZW50
cyhOb2RlKik7CisgICAgCiAgICAgdm9pZCBjb21waWxlR2V0U2NvcGUoTm9kZSopOwogICAgIHZv
aWQgY29tcGlsZVNraXBTY29wZShOb2RlKik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5jcHAJKHJldmlzaW9uIDE4MDg3
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0
LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMzUsNyArMzUsNiBAQCBWYXJpYWJsZUFjY2Vzc0RhdGE6OlZhcmlh
YmxlQWNjZXNzRGF0YSgpCiAgICAgLCBtX3ByZWRpY3Rpb24oU3BlY05vbmUpCiAgICAgLCBtX2Fy
Z3VtZW50QXdhcmVQcmVkaWN0aW9uKFNwZWNOb25lKQogICAgICwgbV9mbGFncygwKQotICAgICwg
bV9pc0NhcHR1cmVkKGZhbHNlKQogICAgICwgbV9zaG91bGROZXZlclVuYm94KGZhbHNlKQogICAg
ICwgbV9pc0FyZ3VtZW50c0FsaWFzKGZhbHNlKQogICAgICwgbV9zdHJ1Y3R1cmVDaGVja0hvaXN0
aW5nRmFpbGVkKGZhbHNlKQpAQCAtNDcsMTMgKzQ2LDEyIEBAIFZhcmlhYmxlQWNjZXNzRGF0YTo6
VmFyaWFibGVBY2Nlc3NEYXRhKCkKICAgICBjbGVhclZvdGVzKCk7CiB9CiAKLVZhcmlhYmxlQWNj
ZXNzRGF0YTo6VmFyaWFibGVBY2Nlc3NEYXRhKFZpcnR1YWxSZWdpc3RlciBsb2NhbCwgYm9vbCBp
c0NhcHR1cmVkKQorVmFyaWFibGVBY2Nlc3NEYXRhOjpWYXJpYWJsZUFjY2Vzc0RhdGEoVmlydHVh
bFJlZ2lzdGVyIGxvY2FsKQogICAgIDogbV9sb2NhbChsb2NhbCkKICAgICAsIG1fcHJlZGljdGlv
bihTcGVjTm9uZSkKICAgICAsIG1fYXJndW1lbnRBd2FyZVByZWRpY3Rpb24oU3BlY05vbmUpCiAg
ICAgLCBtX2ZsYWdzKDApCi0gICAgLCBtX2lzQ2FwdHVyZWQoaXNDYXB0dXJlZCkKLSAgICAsIG1f
c2hvdWxkTmV2ZXJVbmJveChpc0NhcHR1cmVkKQorICAgICwgbV9zaG91bGROZXZlclVuYm94KGZh
bHNlKQogICAgICwgbV9pc0FyZ3VtZW50c0FsaWFzKGZhbHNlKQogICAgICwgbV9zdHJ1Y3R1cmVD
aGVja0hvaXN0aW5nRmFpbGVkKGZhbHNlKQogICAgICwgbV9jaGVja0FycmF5SG9pc3RpbmdGYWls
ZWQoZmFsc2UpCkBAIC02NCwxMiArNjIsNiBAQCBWYXJpYWJsZUFjY2Vzc0RhdGE6OlZhcmlhYmxl
QWNjZXNzRGF0YShWCiAgICAgY2xlYXJWb3RlcygpOwogfQogCi1ib29sIFZhcmlhYmxlQWNjZXNz
RGF0YTo6bWVyZ2VJc0NhcHR1cmVkKGJvb2wgaXNDYXB0dXJlZCkKLXsKLSAgICByZXR1cm4gY2hl
Y2tBbmRTZXQobV9zaG91bGROZXZlclVuYm94LCBtX3Nob3VsZE5ldmVyVW5ib3ggfHwgaXNDYXB0
dXJlZCkKLSAgICAgICAgfCBjaGVja0FuZFNldChtX2lzQ2FwdHVyZWQsIG1faXNDYXB0dXJlZCB8
fCBpc0NhcHR1cmVkKTsKLX0KLQogYm9vbCBWYXJpYWJsZUFjY2Vzc0RhdGE6Om1lcmdlU2hvdWxk
TmV2ZXJVbmJveChib29sIHNob3VsZE5ldmVyVW5ib3gpCiB7CiAgICAgYm9vbCBuZXdTaG91bGRO
ZXZlclVuYm94ID0gbV9zaG91bGROZXZlclVuYm94IHwgc2hvdWxkTmV2ZXJVbmJveDsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEu
aAkocmV2aXNpb24gMTgwODc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJp
YWJsZUFjY2Vzc0RhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTEtMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ4LDcgKzQ4LDcgQEAgZW51bSBE
b3VibGVCYWxsb3QgeyBWb3RlVmFsdWUsIFZvdGVEb3VibAogY2xhc3MgVmFyaWFibGVBY2Nlc3NE
YXRhIDogcHVibGljIFVuaW9uRmluZDxWYXJpYWJsZUFjY2Vzc0RhdGE+IHsKIHB1YmxpYzoKICAg
ICBWYXJpYWJsZUFjY2Vzc0RhdGEoKTsKLSAgICBWYXJpYWJsZUFjY2Vzc0RhdGEoVmlydHVhbFJl
Z2lzdGVyIGxvY2FsLCBib29sIGlzQ2FwdHVyZWQpOworICAgIFZhcmlhYmxlQWNjZXNzRGF0YShW
aXJ0dWFsUmVnaXN0ZXIgbG9jYWwpOwogICAgIAogICAgIFZpcnR1YWxSZWdpc3RlciBsb2NhbCgp
CiAgICAgewpAQCAtNjIsMTMgKzYyLDYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9tYWNo
aW5lTG9jYWw7CiAgICAgfQogCi0gICAgYm9vbCBtZXJnZUlzQ2FwdHVyZWQoYm9vbCBpc0NhcHR1
cmVkKTsKLSAgICAKLSAgICBib29sIGlzQ2FwdHVyZWQoKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IG1faXNDYXB0dXJlZDsKLSAgICB9Ci0gICAgCiAgICAgYm9vbCBtZXJnZUlzUHJvZml0YWJsZVRv
VW5ib3goYm9vbCBpc1Byb2ZpdGFibGVUb1VuYm94KQogICAgIHsKICAgICAgICAgcmV0dXJuIGNo
ZWNrQW5kU2V0KG1faXNQcm9maXRhYmxlVG9VbmJveCwgbV9pc1Byb2ZpdGFibGVUb1VuYm94IHx8
IGlzUHJvZml0YWJsZVRvVW5ib3gpOwpAQCAtODYsNyArNzksNiBAQCBwdWJsaWM6CiAgICAgLy8g
bWVhbiB0aGF0IHdlIGhhdmUgYWN0dWFsbHkgZG9uZSBzby4KICAgICBib29sIHNob3VsZE5ldmVy
VW5ib3goKQogICAgIHsKLSAgICAgICAgQVNTRVJUKCEobV9pc0NhcHR1cmVkICYmICFtX3Nob3Vs
ZE5ldmVyVW5ib3gpKTsKICAgICAgICAgcmV0dXJuIG1fc2hvdWxkTmV2ZXJVbmJveDsKICAgICB9
CiAgICAgCkBAIC0xOTMsNyArMTg1LDYgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQoaXNSb290
KCkpOwogICAgICAgICBib29sIGRvdWJsZVN0YXRlID0gbV9kb3VibGVGb3JtYXRTdGF0ZSA9PSBV
c2luZ0RvdWJsZUZvcm1hdDsKICAgICAgICAgQVNTRVJUKCEoZG91YmxlU3RhdGUgJiYgc2hvdWxk
TmV2ZXJVbmJveCgpKSk7Ci0gICAgICAgIEFTU0VSVCghKGRvdWJsZVN0YXRlICYmIGlzQ2FwdHVy
ZWQoKSkpOwogICAgICAgICByZXR1cm4gZG91YmxlU3RhdGUgJiYgaXNQcm9maXRhYmxlVG9VbmJv
eCgpOwogICAgIH0KICAgICAKQEAgLTIzMyw3ICsyMjQsNiBAQCBwcml2YXRlOgogICAgIFNwZWN1
bGF0ZWRUeXBlIG1fYXJndW1lbnRBd2FyZVByZWRpY3Rpb247CiAgICAgTm9kZUZsYWdzIG1fZmxh
Z3M7CiAKLSAgICBib29sIG1faXNDYXB0dXJlZDsKICAgICBib29sIG1fc2hvdWxkTmV2ZXJVbmJv
eDsKICAgICBib29sIG1faXNBcmd1bWVudHNBbGlhczsKICAgICBib29sIG1fc3RydWN0dXJlQ2hl
Y2tIb2lzdGluZ0ZhaWxlZDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFy
aWFibGVBY2Nlc3NEYXRhRHVtcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmNwcAkocmV2aXNpb24gMTgwODc1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNjIsOSArNjIsNyBAQCB2b2lkIFZhcmlhYmxlQWNjZXNzRGF0
YUR1bXA6OmR1bXAoUHJpbnRTCiAgICAgICAgIGluZGV4IC89IDI2OwogICAgIH0KICAgICAKLSAg
ICBpZiAobV9kYXRhLT5pc0NhcHR1cmVkKCkpCi0gICAgICAgIG91dC5wcmludCgiKiIpOwotICAg
IGVsc2UgaWYgKG1fZGF0YS0+c2hvdWxkTmV2ZXJVbmJveCgpKQorICAgIGlmIChtX2RhdGEtPnNo
b3VsZE5ldmVyVW5ib3goKSkKICAgICAgICAgb3V0LnByaW50KCIhIik7CiAgICAgZWxzZSBpZiAo
IW1fZGF0YS0+c2hvdWxkVW5ib3hJZlBvc3NpYmxlKCkpCiAgICAgICAgIG91dC5wcmludCgifiIp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGFE
dW1wLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJs
ZUFjY2Vzc0RhdGFEdW1wLmgJKHJldmlzaW9uIDE4MDg3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9z
aXRvcnkuaAkocmV2aXNpb24gMTgwODc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDYsNiArNDYs
OCBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAgICAgbWFjcm8oQnV0dGVyZmx5
X3B1YmxpY0xlbmd0aCwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSBcCiAgICAg
bWFjcm8oQnV0dGVyZmx5X3ZlY3Rvckxlbmd0aCwgQnV0dGVyZmx5OjpvZmZzZXRPZlZlY3Rvckxl
bmd0aCgpKSBcCiAgICAgbWFjcm8oQ2FsbEZyYW1lX2NhbGxlckZyYW1lLCBDYWxsRnJhbWU6OmNh
bGxlckZyYW1lT2Zmc2V0KCkpIFwKKyAgICBtYWNybyhEaXJlY3RBcmd1bWVudHNfbGVuZ3RoLCBE
aXJlY3RBcmd1bWVudHM6Om9mZnNldE9mTGVuZ3RoKCkpIFwKKyAgICBtYWNybyhEaXJlY3RBcmd1
bWVudHNfb3ZlcnJpZGVzLCBEaXJlY3RBcmd1bWVudHM6Om9mZnNldE9mT3ZlcnJpZGVzKCkpIFwK
ICAgICBtYWNybyhHZXR0ZXJTZXR0ZXJfZ2V0dGVyLCBHZXR0ZXJTZXR0ZXI6Om9mZnNldE9mR2V0
dGVyKCkpIFwKICAgICBtYWNybyhHZXR0ZXJTZXR0ZXJfc2V0dGVyLCBHZXR0ZXJTZXR0ZXI6Om9m
ZnNldE9mU2V0dGVyKCkpIFwKICAgICBtYWNybyhKU0FycmF5QnVmZmVyVmlld19sZW5ndGgsIEpT
QXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZkxlbmd0aCgpKSBcCkBAIC03Miw2ICs3NCwxMSBAQCBu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAgICAgbWFjcm8oSlNXcmFwcGVyT2JqZWN0
X2ludGVybmFsVmFsdWUsIEpTV3JhcHBlck9iamVjdDo6aW50ZXJuYWxWYWx1ZU9mZnNldCgpKSBc
CiAgICAgbWFjcm8oTWFya2VkQWxsb2NhdG9yX2ZyZWVMaXN0SGVhZCwgTWFya2VkQWxsb2NhdG9y
OjpvZmZzZXRPZkZyZWVMaXN0SGVhZCgpKSBcCiAgICAgbWFjcm8oTWFya2VkQmxvY2tfbWFya0Jp
dHMsIE1hcmtlZEJsb2NrOjpvZmZzZXRPZk1hcmtzKCkpIFwKKyAgICBtYWNybyhTY29wZWRBcmd1
bWVudHNfb3ZlcnJvZGVUaGluZ3MsIFNjb3BlZEFyZ3VtZW50czo6b2Zmc2V0T2ZPdmVycm9kZVRo
aW5ncygpKSkgXAorICAgIG1hY3JvKFNjb3BlZEFyZ3VtZW50c19zY29wZSwgU2NvcGVkQXJndW1l
bnRzOjpvZmZldE9mU2NvcGUoKSkpIFwKKyAgICBtYWNybyhTY29wZWRBcmd1bWVudHNfdGFibGUs
IFNjb3BlZEFyZ3VtZW50czo6b2ZmZXRPZlRhYmxlKCkpKSBcCisgICAgbWFjcm8oU2NvcGVkQXJn
dW1lbnRzVGFibGVfYXJndW1lbnRzLCBTY29wZWRBcmd1bWVudHNUYWJsZTo6b2ZmZXRPZkFyZ3Vt
ZW50cygpKSkgXAorICAgIG1hY3JvKFNjb3BlZEFyZ3VtZW50c1RhYmxlX2xlbmd0aCwgU2NvcGVk
QXJndW1lbnRzVGFibGU6Om9mZmV0T2ZMZW5ndGgoKSkpIFwKICAgICBtYWNybyhTdHJpbmdJbXBs
X2RhdGEsIFN0cmluZ0ltcGw6OmRhdGFPZmZzZXQoKSkgXAogICAgIG1hY3JvKFN0cmluZ0ltcGxf
aGFzaEFuZEZsYWdzLCBTdHJpbmdJbXBsOjpmbGFnc09mZnNldCgpKSBcCiAgICAgbWFjcm8oU3Ry
dWN0dXJlX2NsYXNzSW5mbywgU3RydWN0dXJlOjpjbGFzc0luZm9PZmZzZXQoKSkgXApAQCAtODAs
NiArODcsOCBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAgICAgbWFjcm8oU3Ry
dWN0dXJlX3N0cnVjdHVyZUlELCBTdHJ1Y3R1cmU6OnN0cnVjdHVyZUlET2Zmc2V0KCkpCiAKICNk
ZWZpbmUgRk9SX0VBQ0hfSU5ERVhFRF9BQlNUUkFDVF9IRUFQKG1hY3JvKSBcCisgICAgbWFjcm8o
RGlyZWN0QXJndW1lbnRzX3N0b3JhZ2UsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZU9mZnNldCgp
LCBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSBcCisgICAgbWFjcm8oSlNFbnZpcm9ubWVudFJlY29y
ZF92YXJpYWJsZSwgSlNFbnZpcm9ubWVudFJlY29yZDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSwgc2l6
ZW9mKEVuY29kZWRKU1ZhbHVlKSkgXAogICAgIG1hY3JvKEpTUm9wZVN0cmluZ19maWJlcnMsIEpT
Um9wZVN0cmluZzo6b2Zmc2V0T2ZGaWJlcnMoKSwgc2l6ZW9mKFdyaXRlQmFycmllcjxKU1N0cmlu
Zz4pKSBcCiAgICAgbWFjcm8oY2hhcmFjdGVyczgsIDAsIHNpemVvZihMQ2hhcikpIFwKICAgICBt
YWNybyhjaGFyYWN0ZXJzMTYsIDAsIHNpemVvZihVQ2hhcikpIFwKQEAgLTg3LDYgKzk2LDcgQEAg
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewogICAgIG1hY3JvKGluZGV4ZWREb3VibGVQ
cm9wZXJ0aWVzLCAwLCBzaXplb2YoZG91YmxlKSkgXAogICAgIG1hY3JvKGluZGV4ZWRDb250aWd1
b3VzUHJvcGVydGllcywgMCwgc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkgXAogICAgIG1hY3JvKGlu
ZGV4ZWRBcnJheVN0b3JhZ2VQcm9wZXJ0aWVzLCAwLCBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSBc
CisgICAgbWFjcm8oc2NvcGVkQXJndWVtbnRzVGFibGVBcmd1bWVudHMsIDAsIHNpemVvZihpbnQz
Ml90KSkgXAogICAgIG1hY3JvKHNpbmdsZUNoYXJhY3RlclN0cmluZ3MsIDAsIHNpemVvZihKU1N0
cmluZyopKSBcCiAgICAgbWFjcm8odmFyaWFibGVzLCAwLCBzaXplb2YoUmVnaXN0ZXIpKQogICAg
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNw
cAkocmV2aXNpb24gMTgwODc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBh
YmlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDksNiArMjA5LDggQEAgaW5saW5lIENh
cGFiaWxpdHlMZXZlbCBjYW5Db21waWxlKE5vZGUqIAogICAgICAgICBjYXNlIEFycmF5OjpJbnQz
MjoKICAgICAgICAgY2FzZSBBcnJheTo6RG91YmxlOgogICAgICAgICBjYXNlIEFycmF5OjpDb250
aWd1b3VzOgorICAgICAgICBjYXNlIEFycmF5OjpEaXJlY3RBcmd1bWVudHM6CisgICAgICAgIGNh
c2UgQXJyYXk6OlNjb3BlZEFyZ3VtZW50czoKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBk
ZWZhdWx0OgogICAgICAgICAgICAgaWYgKGlzVHlwZWRWaWV3KG5vZGUtPmFycmF5TW9kZSgpLnR5
cGVkQXJyYXlUeXBlKCkpKQpAQCAtMjIyLDYgKzIyNCw4IEBAIGlubGluZSBDYXBhYmlsaXR5TGV2
ZWwgY2FuQ29tcGlsZShOb2RlKiAKICAgICAgICAgY2FzZSBBcnJheTo6RG91YmxlOgogICAgICAg
ICBjYXNlIEFycmF5OjpDb250aWd1b3VzOgogICAgICAgICBjYXNlIEFycmF5OjpTdHJpbmc6Cisg
ICAgICAgIGNhc2UgQXJyYXk6OkRpcmVjdEFyZ3VtZW50czoKKyAgICAgICAgY2FzZSBBcnJheTo6
U2NvcGVkQXJndW1lbnRzOgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAg
ICAgICAgICAgICBpZiAoaXNUeXBlZFZpZXcobm9kZS0+YXJyYXlNb2RlKCkudHlwZWRBcnJheVR5
cGUoKSkpCkBAIC0yNDgsNiArMjUyLDggQEAgaW5saW5lIENhcGFiaWxpdHlMZXZlbCBjYW5Db21w
aWxlKE5vZGUqIAogICAgICAgICBjYXNlIEFycmF5OjpJbnQzMjoKICAgICAgICAgY2FzZSBBcnJh
eTo6RG91YmxlOgogICAgICAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOgorICAgICAgICBjYXNl
IEFycmF5OjpEaXJlY3RBcmd1bWVudHM6CisgICAgICAgIGNhc2UgQXJyYXk6OlNjb3BlZEFyZ3Vt
ZW50czoKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAg
aWYgKGlzVHlwZWRWaWV3KG5vZGUtPmFycmF5TW9kZSgpLnR5cGVkQXJyYXlUeXBlKCkpKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJ
KHJldmlzaW9uIDE4MDg3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJE
RkdUb0xMVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTk1LDYgKzIxOTUsMjUgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAgICAgCisgICAgICAg
IGNhc2UgQXJyYXk6OkRpcmVjdEFyZ3VtZW50czogeworICAgICAgICAgICAgTFZhbHVlIGFyZ3Vt
ZW50cyA9IGxvd0NlbGwobV9vdXQtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZSgK
KyAgICAgICAgICAgICAgICBFeG90aWNPYmplY3RNb2RlLCBub1ZhbHVlKCksIG51bGxwdHIsCisg
ICAgICAgICAgICAgICAgbV9vdXQubm90TnVsbChtX291dC5sb2FkUHRyKGFyZ3VtZW50cywgbV9o
ZWFwcy5EaXJlY3RBcmd1bWVudHNfb3ZlcnJpZGVzKSkpOworICAgICAgICAgICAgc2V0SW50MzIo
bV9vdXQubG9hZDMyTm9uTmVnYXRpdmUoYXJndW1lbnRzLCBtX2hlYXBzLkRpcmVjdEFyZ3VtZW50
c19sZW5ndGgpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAgICAg
CisgICAgICAgIGNhc2UgQXJyYXk6OlNjb3BlZEFyZ3VtZW50czogeworICAgICAgICAgICAgTFZh
bHVlIGFyZ3VtZW50cyA9IGxvd0NlbGwobV9vdXQtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIHNw
ZWN1bGF0ZSgKKyAgICAgICAgICAgICAgICBFeG90aWNPYmplY3RNb2RlLCBub1ZhbHVlKCksIG51
bGxwdHIsCisgICAgICAgICAgICAgICAgbV9vdXQubm90WmVybzgobV9vdXQubG9hZFB0cihhcmd1
bWVudHMsIG1faGVhcHMuU2NvcGVkQXJndW1lbnRzX292ZXJyb2RlVGhpbmdzKSkpOworICAgICAg
ICAgICAgTFZhbHVlIHRhYmxlID0gbV9vdXQubG9hZFB0cihhcmd1bWVudHMsIG1faGVhcHMuU2Nv
cGVkQXJndW1lbnRzX3RhYmxlKTsKKyAgICAgICAgICAgIHNldEludDMyKG1fb3V0LmxvYWQzMk5v
bk5lZ2F0aXZlKHRhYmxlLCBtX2hlYXBzLlNjb3BlZEFyZ3VtZW50c1RhYmxlX2xlbmd0aCkpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgICAgICAKICAgICAgICAgZGVm
YXVsdDoKICAgICAgICAgICAgIGlmIChpc1R5cGVkVmlldyhtX25vZGUtPmFycmF5TW9kZSgpLnR5
cGVkQXJyYXlUeXBlKCkpKSB7CiAgICAgICAgICAgICAgICAgc2V0SW50MzIoCkBAIC0yMzEyLDYg
KzIzMzEsNDkgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAg
ICAgICAgICAgCisgICAgICAgIGNhc2UgQXJyYXk6OkRpcmVjdEFyZ3VtZW50czogeworICAgICAg
ICAgICAgTFZhbHVlIGJhc2UgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAg
ICAgTFZhbHVlIGluZGV4ID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDIoKSk7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIHNwZWN1bGF0ZSgKKyAgICAgICAgICAgICAgICBFeG90aWNPYmplY3RN
b2RlLCBub1ZhbHVlKCksIG51bGxwdHIsCisgICAgICAgICAgICAgICAgbV9vdXQubm9uTnVsbCht
X291dC5sb2FkUHRyKGJhc2UsIG1faGVhcHMuRGlyZWN0QXJndW1lbnRzX292ZXJyaWRlcykpKTsK
KyAgICAgICAgICAgIHNwZWN1bGF0ZSgKKyAgICAgICAgICAgICAgICBFeG90aWNPYmplY3RNb2Rl
LCBub1ZhbHVlKCksIG51bGxwdHIsCisgICAgICAgICAgICAgICAgbV9vdXQuYWJvdmVPckVxdWFs
KAorICAgICAgICAgICAgICAgICAgICBpbmRleCwKKyAgICAgICAgICAgICAgICAgICAgbV9vdXQu
bG9hZDMyTm9uTmVnYXRpdmUoYmFzZSwgbV9oZWFwcy5EaXJlY3RBcmd1bWVudHNfbGVuZ3RoKSkp
OworICAgICAgICAgICAgCisgICAgICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LmxvYWQ2NChiYXNl
SW5kZXgobV9oZWFwcy5EaXJlY3RBcmd1bWVudHNfc3RvcmFnZSwgYmFzZSwgaW5kZXgpKSk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNl
IEFycmF5OjpTY29wZWRBcmd1bWVudHM6IHsKKyAgICAgICAgICAgIExWYWx1ZSBiYXNlID0gbG93
Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIExWYWx1ZSBpbmRleCA9IGxvd0lu
dDMyKG1fbm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBMVmFsdWUg
dGFibGUgPSBtX291dC5sb2FkUHRyKGJhc2UsIG1faGVhcHMuU2NvcGVkQXJndW1lbnRzX3RhYmxl
KTsKKyAgICAgICAgICAgIExWYWx1ZSBzY29wZSA9IG1fb3V0LmxvYWRQdHIoYmFzZSwgbV9oZWFw
cy5TY29wZWRBcmd1bWVudHNfc2NvcGUpOworICAgICAgICAgICAgCisgICAgICAgICAgICBzcGVj
dWxhdGUoCisgICAgICAgICAgICAgICAgRXhvdGljT2JqZWN0TW9kZSwgbm9WYWx1ZSgpLCBudWxs
cHRyLAorICAgICAgICAgICAgICAgIG1fb3V0LmFib3ZlT3JFcXVhbCgKKyAgICAgICAgICAgICAg
ICAgICAgaW5kZXgsCisgICAgICAgICAgICAgICAgICAgIG1fb3V0LmxvYWQzMk5vbk5lZ2F0aXZl
KGJhc2UsIG1faGVhcHMuU2NvcGVkQXJndW1lbnRzVGFibGVfbGVuZ3RoKSkpOworICAgICAgICAg
ICAgCisgICAgICAgICAgICBMVmFsdWUgYXJndW1lbnRzID0gbV9vdXQubG9hZFB0cihiYXNlLCBt
X2hlYXBzLlNjb3BlZEFyZ3VtZW50c1RhYmxlX2FyZ3VtZW50cyk7CisgICAgICAgICAgICBMVmFs
dWUgc2NvcGVPZmZzZXQgPSBtX291dC5sb2FkMzIoCisgICAgICAgICAgICAgICAgYmFzZUluZGV4
KG1faGVhcHMuc2NvcGVkQXJndW1lbnRzVGFibGVBcmd1bWVudHMsIGFyZ3VtZW50cywgaW5kZXgp
KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgc3BlY3VsYXRlKAorICAgICAgICAgICAgICAg
IEV4b3RpY09iamVjdE1vZGUsIG5vVmFsdWUoKSwgbnVsbHB0ciwKKyAgICAgICAgICAgICAgICBt
X291dC5lcXVhbChzY29wZU9mZnNldCwgbV9vdXQuY29uc3RJbnQzMihTY29wZU9mZnNldDo6aW52
YWxpZE9mZnNldCkpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgc2V0SlNWYWx1ZShtX291
dC5sb2FkNjQoYmFzZUluZGV4KAorICAgICAgICAgICAgICAgIG1faGVhcHMuSlNFbnZpcm9ubWVu
dFJlY29yZF92YXJpYWJsZXMsIGJhc2UsIHNjb3BlT2Zmc2V0KSkpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcnJheTo6R2VuZXJp
YzogewogICAgICAgICAgICAgc2V0SlNWYWx1ZSh2bUNhbGwoCiAgICAgICAgICAgICAgICAgbV9v
dXQub3BlcmF0aW9uKG9wZXJhdGlvbkdldEJ5VmFsKSwgbV9jYWxsRnJhbWUsCkBAIC01MDcwLDEx
ICs1MTMyLDExIEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBjYWxsOwogICAgIH0KICAgICAK
LSAgICBUeXBlZFBvaW50ZXIgYmFzZUluZGV4KEluZGV4ZWRBYnN0cmFjdEhlYXAmIGhlYXAsIExW
YWx1ZSBzdG9yYWdlLCBMVmFsdWUgaW5kZXgsIEVkZ2UgZWRnZSkKKyAgICBUeXBlZFBvaW50ZXIg
YmFzZUluZGV4KEluZGV4ZWRBYnN0cmFjdEhlYXAmIGhlYXAsIExWYWx1ZSBzdG9yYWdlLCBMVmFs
dWUgaW5kZXgsIEVkZ2UgZWRnZSwgcHRyZGlmZl90IG9mZnNldCA9IDApCiAgICAgewogICAgICAg
ICByZXR1cm4gbV9vdXQuYmFzZUluZGV4KAogICAgICAgICAgICAgaGVhcCwgc3RvcmFnZSwgbV9v
dXQuemVyb0V4dChpbmRleCwgbV9vdXQuaW50UHRyKSwKLSAgICAgICAgICAgIG1fc3RhdGUuZm9y
Tm9kZShlZGdlKS5tX3ZhbHVlKTsKKyAgICAgICAgICAgIG1fc3RhdGUuZm9yTm9kZShlZGdlKS5t
X3ZhbHVlLCBvZmZzZXQpOwogICAgIH0KICAgICAKICAgICB2b2lkIGNvbXBhcmUoCkBAIC02MzQx
LDYgKzY0MDMsMTYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBt
X25vZGUsICJDb3JydXB0IGFycmF5IGNsYXNzIik7CiAgICAgICAgIH0KICAgICAgICAgICAgIAor
ICAgICAgICBjYXNlIEFycmF5OjpEaXJlY3RBcmd1bWVudHM6CisgICAgICAgICAgICByZXR1cm4g
bV9vdXQuZXF1YWwoCisgICAgICAgICAgICAgICAgbV9vdXQubG9hZDgoY2VsbCwgbV9oZWFwcy5K
U0NlbGxfdHlwZUluZm9UeXBlKSwKKyAgICAgICAgICAgICAgICBtX291dC5jb25zdEludDgoRGly
ZWN0QXJndW1lbnRzVHlwZSkpOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXJyYXk6OlNj
b3BlZEFyZ3VtZW50czoKKyAgICAgICAgICAgIHJldHVybiBtX291dC5lcXVhbCgKKyAgICAgICAg
ICAgICAgICBtX291dC5sb2FkOChjZWxsLCBtX2hlYXBzLkpTQ2VsbF90eXBlSW5mb1R5cGUpLAor
ICAgICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50OChTY29wZWRBcmd1bWVudHNUeXBlKSk7Cisg
ICAgICAgICAgICAKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIHJldHVybiBtX291dC5l
cXVhbCgKICAgICAgICAgICAgICAgICBtX291dC5sb2FkOChjZWxsLCBtX2hlYXBzLkpTQ2VsbF90
eXBlSW5mb1R5cGUpLCAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcHlUb2tl
bi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcHlUb2tlbi5o
CShyZXZpc2lvbiAxODA4NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3B5VG9r
ZW4uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMzIsNyArMzIsNyBAQCBlbnVtIENvcHlUb2tlbiB7CiAgICAg
QnV0dGVyZmx5Q29weVRva2VuLAogICAgIFR5cGVkQXJyYXlWZWN0b3JDb3B5VG9rZW4sCiAgICAg
TWFwQmFja2luZ1N0b3JlQ29weVRva2VuLAotICAgIEFyZ3VtZW50c1Nsb3dBcmd1bWVudERhdGFD
b3B5VG9rZW4KKyAgICBEaXJlY3RBcmd1bWVudHNPdmVycmlkZXNDb3B5VG9rZW4KIH07CiAKIH0g
Ly8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJs
eUhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2Vt
Ymx5SGVscGVycy5oCShyZXZpc2lvbiAxODA4NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0Fzc2VtYmx5SGVscGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTMsNiArMTEzLDI2IEBA
IHB1YmxpYzoKICNlbmRpZgogICAgIH0KICAgICAKKyAgICB2b2lkIGxvYWRWYWx1ZShCYXNlSW5k
ZXggYWRkcmVzcywgSlNWYWx1ZVJlZ3MgcmVncykKKyAgICB7CisjaWYgVVNFKEpTVkFMVUU2NCkK
KyAgICAgICAgbG9hZDY0KGFkZHJlc3MsIHJlZ3MuZ3ByKCkpOworI2Vsc2UKKyAgICAgICAgaWYg
KGFkZHJlc3MuYmFzZSA9PSByZWdzLnBheWxvYWRHUFIoKSB8fCBhZGRyZXNzLmluZGV4ID09IHJl
Z3MucGF5bG9hZEdQUigpKSB7CisgICAgICAgICAgICAvLyBXZSBhY3R1YWxseSBjb3VsZCBoYW5k
bGUgdGhlIGNhc2Ugd2hlcmUgdGhlIHJlZ2lzdGVycyBhcmUgYWxpYXNlZCB0byBib3RoCisgICAg
ICAgICAgICAvLyB0YWcgYW5kIHBheWxvYWQsIGJ1dCB3ZSBkb24ndCBmb3Igbm93LgorICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoYWRkcmVzcy5iYXNlICE9IHJlZ3MudGFnR1BSKCkpOworICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQoYWRkcmVzcy5pbmRleCAhPSByZWdzLnRhZ0dQUigpKTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgbG9hZDMyKGFkZHJlc3Mud2l0aE9mZnNldChUYWdP
ZmZzZXQpLCByZWdzLnRhZ0dQUigpKTsKKyAgICAgICAgICAgIGxvYWQzMihhZGRyZXNzLndpdGhP
ZmZzZXQoUGF5bG9hZE9mZnNldCksIHJlZ3MucGF5bG9hZEdQUigpKTsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIGxvYWQzMihhZGRyZXNzLndpdGhPZmZzZXQoUGF5bG9hZE9mZnNldCks
IHJlZ3MucGF5bG9hZEdQUigpKTsKKyAgICAgICAgICAgIGxvYWQzMihhZGRyZXNzLndpdGhPZmZz
ZXQoVGFnT2Zmc2V0KSwgcmVnLnRhZ0dQUigpKTsKKyAgICAgICAgfQorI2VuZGlmCisgICAgfQor
ICAgIAogICAgIHZvaWQgbW92ZVRydXN0ZWRWYWx1ZShKU1ZhbHVlIHZhbHVlLCBKU1ZhbHVlUmVn
cyByZWdzKQogICAgIHsKICNpZiBVU0UoSlNWQUxVRTY0KQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVC5oCShyZXZpc2lvbiAxODA4NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNDYsNiArMzQ2LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIEp1bXBMaXN0IGVtaXREb3VibGVHZXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJs
ZUp1bXAmIGJhZFR5cGUpOwogICAgICAgICBKdW1wTGlzdCBlbWl0Q29udGlndW91c0dldEJ5VmFs
KEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgSW5kZXhpbmdUeXBlIGV4cGVj
dGVkU2hhcGUgPSBDb250aWd1b3VzU2hhcGUpOwogICAgICAgICBKdW1wTGlzdCBlbWl0QXJyYXlT
dG9yYWdlR2V0QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlKTsKKyAg
ICAgICAgSnVtcExpc3QgZW1pdERpcmVjdEFyZ3VtZW50c0dldEJ5VmFsKEluc3RydWN0aW9uKiwg
UGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSk7CisgICAgICAgIEp1bXBMaXN0IGVtaXRTY29wZWRBcmd1
bWVudHNHZXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUpOwogICAg
ICAgICBKdW1wTGlzdCBlbWl0SW50VHlwZWRBcnJheUdldEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0
Y2hhYmxlSnVtcCYgYmFkVHlwZSwgVHlwZWRBcnJheVR5cGUpOwogICAgICAgICBKdW1wTGlzdCBl
bWl0RmxvYXRUeXBlZEFycmF5R2V0QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBi
YWRUeXBlLCBUeXBlZEFycmF5VHlwZSk7CiAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAxODA4NzUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01MzAsNyArNTMwLDcgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsKEV4
ZQogICAgICAgICBpZiAoaGFzT3B0aW1pemFibGVJbmRleGluZyhvYmplY3QtPnN0cnVjdHVyZSh2
bSkpKSB7CiAgICAgICAgICAgICAvLyBBdHRlbXB0IHRvIG9wdGltaXplLgogICAgICAgICAgICAg
SklUQXJyYXlNb2RlIGFycmF5TW9kZSA9IGppdEFycmF5TW9kZUZvclN0cnVjdHVyZShvYmplY3Qt
PnN0cnVjdHVyZSh2bSkpOwotICAgICAgICAgICAgaWYgKGFycmF5TW9kZSAhPSBieVZhbEluZm8u
YXJyYXlNb2RlKSB7CisgICAgICAgICAgICBpZiAoaml0QXJyYXlNb2RlUGVybWl0c1B1dChhcnJh
eU1vZGUpICYmIGFycmF5TW9kZSAhPSBieVZhbEluZm8uYXJyYXlNb2RlKSB7CiAgICAgICAgICAg
ICAgICAgSklUOjpjb21waWxlUHV0QnlWYWwoJnZtLCBleGVjLT5jb2RlQmxvY2soKSwgJmJ5VmFs
SW5mbywgUmV0dXJuQWRkcmVzc1B0cihPVVJfUkVUVVJOX0FERFJFU1MpLCBhcnJheU1vZGUpOwog
ICAgICAgICAgICAgICAgIGRpZE9wdGltaXplID0gdHJ1ZTsKICAgICAgICAgICAgIH0KQEAgLTU3
NSw3ICs1NzUsNyBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRGlyZWN0UHV0QnlWCiAg
ICAgICAgIGlmIChoYXNPcHRpbWl6YWJsZUluZGV4aW5nKG9iamVjdC0+c3RydWN0dXJlKHZtKSkp
IHsKICAgICAgICAgICAgIC8vIEF0dGVtcHQgdG8gb3B0aW1pemUuCiAgICAgICAgICAgICBKSVRB
cnJheU1vZGUgYXJyYXlNb2RlID0gaml0QXJyYXlNb2RlRm9yU3RydWN0dXJlKG9iamVjdC0+c3Ry
dWN0dXJlKHZtKSk7Ci0gICAgICAgICAgICBpZiAoYXJyYXlNb2RlICE9IGJ5VmFsSW5mby5hcnJh
eU1vZGUpIHsKKyAgICAgICAgICAgIGlmIChqaXRBcnJheU1vZGVQZXJtaXRzUHV0KGFycmF5TW9k
ZSkgJiYgYXJyYXlNb2RlICE9IGJ5VmFsSW5mby5hcnJheU1vZGUpIHsKICAgICAgICAgICAgICAg
ICBKSVQ6OmNvbXBpbGVEaXJlY3RQdXRCeVZhbCgmdm0sIGNhbGxGcmFtZS0+Y29kZUJsb2NrKCks
ICZieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIoT1VSX1JFVFVSTl9BRERSRVNTKSwgYXJyYXlN
b2RlKTsKICAgICAgICAgICAgICAgICBkaWRPcHRpbWl6ZSA9IHRydWU7CiAgICAgICAgICAgICB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNz
LmNwcAkocmV2aXNpb24gMTgwODc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQ
cm9wZXJ0eUFjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk1MSw2ICs5NTEsMTIgQEAgdm9p
ZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlWYWwoQnlWYWxJbgogICAgIGNhc2UgSklUQXJyYXlT
dG9yYWdlOgogICAgICAgICBzbG93Q2FzZXMgPSBlbWl0QXJyYXlTdG9yYWdlR2V0QnlWYWwoY3Vy
cmVudEluc3RydWN0aW9uLCBiYWRUeXBlKTsKICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBKSVRE
aXJlY3RBcmd1bWVudHM6CisgICAgICAgIHNsb3dDYXNlcyA9IGVtaXREaXJlY3RBcmd1bWVudHNH
ZXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEpJVFNjb3BlZEFyZ3VtZW50czoKKyAgICAgICAgc2xvd0Nhc2VzID0gZW1pdERpcmVj
dEFyZ3VtZW50c0dldEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSk7CisgICAgICAg
IGJyZWFrOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIFR5cGVkQXJyYXlUeXBlIHR5cGUgPSB0eXBl
ZEFycmF5VHlwZUZvckpJVEFycmF5TW9kZShhcnJheU1vZGUpOwogICAgICAgICBpZiAoaXNJbnQo
dHlwZSkpCkBAIC0xMDQ2LDYgKzEwNTIsNjMgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0
QnlWYWwoQnlWYWxJbgogICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rQ2FsbGVyVG9GdW5jdGlvbihy
ZXR1cm5BZGRyZXNzLCBGdW5jdGlvblB0cihpc0RpcmVjdCA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5
VmFsR2VuZXJpYyA6IG9wZXJhdGlvblB1dEJ5VmFsR2VuZXJpYykpOwogfQogCitKSVQ6Okp1bXBM
aXN0IEpJVDo6ZW1pdERpcmVjdEFyZ3VtZW50c0dldEJ5VmFsKEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUpCit7CisgICAgSnVtcExpc3Qgc2xv
d0Nhc2VzOworICAgIAorI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgUmVnaXN0ZXJJRCBiYXNlID0g
cmVnVDA7CisgICAgUmVnaXN0ZXJJRCBwcm9wZXJ0eSA9IHJlZ1QxOworICAgIEpTVmFsdWVSZWdz
IHJlc3VsdCA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICBSZWdpc3RlcklEIHNjcmF0Y2ggPSBy
ZWdUMzsKKyNlbHNlCisgICAgUmVnaXN0ZXJJRCBiYXNlID0gcmVnVDA7CisgICAgUmVnaXN0ZXJJ
RCBwcm9wZXJ0eSA9IHJlZ1QyOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdCA9IEpTVmFsdWVSZWdz
KHJlZ1QxLCByZWdUMCk7CisgICAgUmVnaXN0ZXJJRCBzY3JhdGNoID0gcmVnVDM7CisjZW5kaWYK
KworICAgIGxvYWQ4KEFkZHJlc3MoYmFzZSwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSks
IHNjcmF0Y2gpOworICAgIGJhZFR5cGUgPSBwYXRjaGFibGVCcmFuY2gzMihOb3RFcXVhbCwgc2Ny
YXRjaCwgVHJ1c3RlZEltbTMyKERpcmVjdEFyZ3VtZW50c1R5cGUpKTsKKyAgICAKKyAgICBzbG93
Q2FzZXMuYXBwZW5kKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcHJvcGVydHksIEFkZHJlc3MoYmFz
ZSwgRGlyZWN0QXJndW1lbnRzOjpvZmZzZXRPZkxlbmd0aCgpKSkpOworICAgIHNsb3dDYXNlcy5h
cHBlbmQoYnJhbmNoVGVzdFB0cihOb25aZXJvLCBBZGRyZXNzKGJhc2UsIERpcmVjdEFyZ3VtZW50
czo6b2Zmc2V0T2ZPdmVycmlkZXMoKSkpKTsKKyAgICAKKyAgICB6ZXJvRXh0ZW5kMzJUb1B0cihw
cm9wZXJ0eSwgc2NyYXRjaCk7CisgICAgbG9hZFZhbHVlKEJhc2VJbmRleChiYXNlLCBzY3JhdGNo
LCBUaW1lc0VpZ2h0LCBEaXJlY3RBcmd1bWVudHM6OnN0b3JhZ2VPZmZzZXQoKSksIHJlc3VsdCk7
Cit9CisKK0pJVDo6SnVtcExpc3QgSklUOjplbWl0U2NvcGVkQXJndW1lbnRzR2V0QnlWYWwoSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSkKK3sK
KyAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBS
ZWdpc3RlcklEIGJhc2UgPSByZWdUMDsKKyAgICBSZWdpc3RlcklEIHByb3BlcnR5ID0gcmVnVDE7
CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0ID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgIFJlZ2lz
dGVySUQgc2NyYXRjaCA9IHJlZ1QzOworICAgIFJlZ2lzdGVySUQgc2NyYXRjaDIgPSByZWdUNDsK
KyNlbHNlCisgICAgUmVnaXN0ZXJJRCBiYXNlID0gcmVnVDA7CisgICAgUmVnaXN0ZXJJRCBwcm9w
ZXJ0eSA9IHJlZ1QyOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdCA9IEpTVmFsdWVSZWdzKHJlZ1Qx
LCByZWdUMCk7CisgICAgUmVnaXN0ZXJJRCBzY3JhdGNoID0gcmVnVDM7CisgICAgUmVnaXN0ZXJJ
RCBzY2FydGNoMiA9IHJlZ1Q0OworI2VuZGlmCisKKyAgICBsb2FkOChBZGRyZXNzKGJhc2UsIEpT
Q2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBzY3JhdGNoKTsKKyAgICBiYWRUeXBlID0gcGF0
Y2hhYmxlQnJhbmNoMzIoTm90RXF1YWwsIHNjcmF0Y2gsIFRydXN0ZWRJbW0zMihEaXJlY3RBcmd1
bWVudHNUeXBlKSk7CisgICAgCisgICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIFNjb3BlZEFyZ3Vt
ZW50czo6b2Zmc2V0T2ZUYWJsZSgpKSwgc2NyYXRjaCk7CisgICAgbG9hZFB0cihBZGRyZXNzKGJh
c2UsIFNjb3BlZEFyZ3VtZW50czo6b2Zmc2V0T2ZTY29wZSgpKSwgc2NyYXRjaDIpOworICAgIHNs
b3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCBwcm9wZXJ0eSwgQWRkcmVzcyhz
Y3JhdGNoLCBTY29wZWRBcmd1bWVudHNUYWJsZTo6b2Zmc2V0T2ZMZW5ndGgoKSkpKTsKKyAgICBs
b2FkUHRyKEFkZHJlc3Moc2NyYXRjaCwgU2NvcGVkQXJndW1lbnRzVGFibGU6Om9mZnNldE9mQXJn
dW1lbnRzKCkpLCBzY3JhdGNoKTsKKyAgICBsb2FkMzIoQmFzZUluZGV4KHNjcmF0Y2gsIHByb3Bl
cnR5LCBUaW1lc0ZvdXIpLCBzY3JhdGNoKTsKKyAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMy
KEVxdWFsLCBzY3JhdGNoLCBUcnVzdGVkSW1tMzIoU2NvcGVPZmZzZXQ6OmludmFsaWRPZmZzZXQp
KSk7CisgICAgCisgICAgbG9hZFZhbHVlKEJhc2VJbmRleChzY3JhdGNoMiwgc2NyYXRjaCwgVGlt
ZXNFaWdodCwgSlNFbnZpcm9ubWVudFJlY29yZDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSksIHJlc3Vs
dCk7Cit9CisKIEpJVDo6SnVtcExpc3QgSklUOjplbWl0SW50VHlwZWRBcnJheUdldEJ5VmFsKElu
c3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgVHlwZWRBcnJheVR5cGUgdHlwZSkK
IHsKICAgICBBU1NFUlQoaXNJbnQodHlwZSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3BhcnNlci9Ob2Rlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJz
ZXIvTm9kZXMuaAkocmV2aXNpb24gMTgwODc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Bh
cnNlci9Ob2Rlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDU0LDcgKzE0NTQsOCBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgYm9vbCBoYXNDYXB0dXJlZFZhcmlhYmxlcygpIGNvbnN0IHsgcmV0
dXJuICEhbV9jYXB0dXJlZFZhcmlhYmxlcy5zaXplKCk7IH0KICAgICAgICAgc2l6ZV90IGNhcHR1
cmVkVmFyaWFibGVDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fY2FwdHVyZWRWYXJpYWJsZXMuc2l6
ZSgpOyB9CiAgICAgICAgIGNvbnN0IElkZW50aWZpZXJTZXQmIGNhcHR1cmVkVmFyaWFibGVzKCkg
Y29uc3QgeyByZXR1cm4gbV9jYXB0dXJlZFZhcmlhYmxlczsgfQotICAgICAgICBib29sIGNhcHR1
cmVzKGNvbnN0IElkZW50aWZpZXImIGlkZW50KSB7IHJldHVybiBtX2NhcHR1cmVkVmFyaWFibGVz
LmNvbnRhaW5zKGlkZW50LmltcGwoKSk7IH0KKyAgICAgICAgYm9vbCBjYXB0dXJlcyhTdHJpbmdJ
bXBsKiB1aWQpIHsgcmV0dXJuIG1fY2FwdHVyZWRWYXJpYWJsZXMuY29udGFpbnModWlkKTsgfQor
ICAgICAgICBib29sIGNhcHR1cmVzKGNvbnN0IElkZW50aWZpZXImIGlkZW50KSB7IHJldHVybiBj
YXB0dXJlcyhpZGVudC5pbXBsKCkpOyB9CiAKICAgICAgICAgVmFyU3RhY2smIHZhclN0YWNrKCkg
eyByZXR1cm4gbV92YXJTdGFjazsgfQogICAgICAgICBGdW5jdGlvblN0YWNrJiBmdW5jdGlvblN0
YWNrKCkgeyByZXR1cm4gbV9mdW5jdGlvblN0YWNrOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Bcmd1bWVudHNNb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQXJndW1lbnRzTW9kZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJndW1lbnRzTW9kZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2lmbmRlZiBBcmd1bWVudHNNb2RlX2gKKyNkZWZpbmUgQXJndW1lbnRzTW9kZV9oCisK
K25hbWVzcGFjZSBKU0MgeworCitlbnVtIEFyZ3VtZW50c01vZGUgeworICAgIENsb25lZEFyZ3Vt
ZW50c0NyZWF0aW9uTW9kZSwKKyAgICBGYWtlQXJndW1lbnRWYWx1ZXNDcmVhdGlvbk1vZGUKK307
CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gQXJndW1lbnRzTW9kZV9oCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhcHR1cmVkQXJndW1lbnRzT2Zmc2V0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYXB0dXJl
ZEFyZ3VtZW50c09mZnNldC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9DYXB0dXJlZEFyZ3VtZW50c09mZnNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ2FwdHVyZWRBcmd1bWVudHNPZmZz
ZXQuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3ZvaWQgQ2FwdHVyZWRBcmd1bWVudHNPZmZzZXQ6
OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBpZiAoISp0aGlzKSB7CisgICAg
ICAgIG91dC5wcmludCgiY2FwdHVyZWRBcmd1bWVudEludmFsaWQiKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIG91dC5wcmludCgiY2FwdHVyZWRBcmd1bWVudCIsIG9mZnNldCgpKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0NhcHR1cmVkQXJndW1lbnRzT2Zmc2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FwdHVyZWRBcmd1bWVudHNPZmZzZXQuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhcHR1cmVkQXJndW1lbnRzT2Zm
c2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIENhcHR1cmVkQXJndW1lbnRzT2Zm
c2V0X2gKKyNkZWZpbmUgQ2FwdHVyZWRBcmd1bWVudHNPZmZzZXRfaAorCisjaW5jbHVkZSAiR2Vu
ZXJpY09mZnNldC5oIgorI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3BhY2Ug
SlNDIHsKKworLy8gVGhpcyBpcyBhbiBvZmZzZXQgaW50byB0aGUgc3BlY2lhbCBhcmd1bWVudHMg
b2JqZWN0LCB3aGljaCBjYXB0dXJlcyB0aGUgYXJndW1lbnRzIHRvIGEKKy8vIGZ1bmN0aW9uLiBJ
dCBvbmx5IGNvbWVzIGludG8gcGxheSBpdCB0aGUgYXJndW1lbnRzIGFyZW4ndCBhbHNvIGxpZnRl
ZCBpbnRvIHRoZSBhY3RpdmF0aW9uLgorLy8gSWYgdGhleSB3ZXJlIHRoZW4gYWNjZXNzZXMgdG8g
dGhlIGFyZ3VtZW50cyB3b3VsZCByZXNvbHZlIHRvIGEgU2NvcGVPZmZzZXQgYW5kIG5vdCBhCisv
LyBDYXB0dXJlZEFyZ3VtZW50c09mZnNldC4KK2NsYXNzIENhcHR1cmVkQXJndW1lbnRzT2Zmc2V0
IDogcHVibGljIEdlbmVyaWNPZmZzZXQ8Q2FwdHVyZWRBcmd1bWVudHNPZmZzZXQ+IHsKK3B1Ymxp
YzoKKyAgICBDYXB0dXJlZEFyZ3VtZW50c09mZnNldCgpIHsgfQorICAgIAorICAgIGV4cGxpY2l0
IENhcHR1cmVkQXJndW1lbnRzT2Zmc2V0KHVuc2lnbmVkIG9mZnNldCkKKyAgICAgICAgOiBHZW5l
cmljT2Zmc2V0KG9mZnNldCkKKyAgICB7CisgICAgfQorICAgIAorICAgIHZvaWQgZHVtcChQcmlu
dFN0cmVhbSYpIGNvbnN0OworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBD
YXB0dXJlZEFyZ3VtZW50c09mZnNldF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0RpcmVjdEFyZ3VtZW50cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRpcmVjdEFyZ3VtZW50
cy5oIgorCisjaW5jbHVkZSAiR2VuZXJpY0FyZ3VtZW50c0lubGluZXMuaCIKKyNpbmNsdWRlICJK
U0FyZ3VtZW50c0l0ZXJhdG9yLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorCituYW1lc3Bh
Y2UgSlNDIHsKKworU1RBVElDX0FTU0VSVF9JU19UUklWSUFMTFlfREVTVFJVQ1RJQkxFKERpcmVj
dEFyZ3VtZW50cyk7CisKK2NvbnN0IENsYXNzSW5mbyBEaXJlY3RBcmd1bWVudHM6OnNfaW5mbyA9
IHsgIkFyZ3VtZW50cyIsICZCYXNlOjpzX2luZm8sIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoRGly
ZWN0QXJndW1lbnRzKSB9OworCitEaXJlY3RBcmd1bWVudHM6OkRpcmVjdEFyZ3VtZW50cyhWTSYg
dm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCB1bnNpZ25lZCBsZW5ndGgpCisgICAgOiBHZW5lcmlj
QXJndW1lbnRzKHZtLCBzdHJ1Y3R1cmUpCisgICAgLCBtX2xlbmd0aChsZW5ndGgpCit7Cit9CisK
K0RpcmVjdEFyZ3VtZW50cyogRGlyZWN0QXJndW1lbnRzOjpjcmVhdGVVbmluaXRpYWxpemVkKFZN
JiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICBEaXJl
Y3RBcmd1bWVudHMqIHJlc3VsdCA9CisgICAgICAgIG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxs
PERpcmVjdEFyZ3VtZW50cz4odm0uaGVhcCwgYWxsb2NhdGlvblNpemUobGVuZ3RoKSkpCisgICAg
ICAgICh2bSwgc3RydWN0dXJlKTsKKyAgICByZXN1bHQtPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCitEaXJlY3RBcmd1bWVudHMqIERpcmVjdEFyZ3VtZW50czo6
Y3JlYXRlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHVuc2lnbmVkIGxlbmd0aCkKK3sK
KyAgICBEaXJlY3RBcmd1bWVudHMqIHJlc3VsdCA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWQodm0sIHN0
cnVjdHVyZSwgbGVuZ3RoKTsKKyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBsZW5ndGg7IGkt
LTspCisgICAgICAgIHJlc3VsdC0+c3RvcmFnZSgpW2ldLmNsZWFyKCk7CisgICAgCisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKworRGlyZWN0QXJndW1lbnRzKiBEaXJlY3RBcmd1bWVudHM6OmNyZWF0
ZUJ5Q29weWluZyhWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBFeGVjU3RhdGUqIGV4ZWMp
Cit7CisgICAgdW5zaWduZWQgbGVuZ3RoID0gZXhlYy0+YXJndW1lbnRDb3VudCgpOworICAgIERp
cmVjdEFyZ3VtZW50cyogcmVzdWx0ID0gY3JlYXRlVW5pbml0aWFsaXplZCh2bSwgc3RydWN0dXJl
LCBsZW5ndGgpOworICAgIAorICAgIGZvciAodW5zaWduZWQgaSA9IGxlbmd0aDsgaS0tOykKKyAg
ICAgICAgcmVzdWx0LT5zdG9yYWdlKClbaV0uc2V0KHZtLCByZXN1bHQsIGV4ZWMtPnVuY2hlY2tl
ZEFyZ3VtZW50KGkpKTsKKyAgICAKKyAgICByZXN1bHQtPmNhbGxlZSgpLnNldCh2bSwgcmVzdWx0
LCBqc0Nhc3Q8SlNGdW5jdGlvbio+KGV4ZWMtPmNhbGxlZSgpKSk7CisgICAgCisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKwordm9pZCBEaXJlY3RBcmd1bWVudHM6OnZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiB0aGlzQ2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgRGlyZWN0QXJndW1lbnRz
KiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8RGlyZWN0QXJndW1lbnRzKj4odGhpc0NlbGwpOwor
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKKyAgICBC
YXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOworICAgIAorICAgIHZpc2l0
b3IuYXBwZW5kVmFsdWVzKHRoaXNPYmplY3QtPnN0b3JhZ2UoKSwgdGhpc09iamVjdC0+bV9sZW5n
dGgpOworICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX2NhbGxlZSk7CisgICAgCisg
ICAgaWYgKHRoaXNPYmplY3QtPm1fb3ZlcnJpZGVzKSB7CisgICAgICAgIHZpc2l0b3IuY29weUxh
dGVyKAorICAgICAgICAgICAgdGhpc09iamVjdCwgRGlyZWN0QXJndW1lbnRzT3ZlcnJpZGVzQ29w
eVRva2VuLAorICAgICAgICAgICAgdGhpc09iamVjdC0+bV9vdmVycmlkZXMuZ2V0KCksIG1fbGVu
Z3RoKTsKKyAgICB9Cit9CisKK3ZvaWQgRGlyZWN0QXJndW1lbnRzOjpjb3B5QmFja2luZ1N0b3Jl
KEpTQ2VsbCogdGhpc0NlbGwsIENvcHlWaXNpdG9yJiB2aXNpdG9yLCBDb3B5VG9rZW4gdG9rZW4p
Cit7CisgICAgRGlyZWN0QXJndW1lbnRzKiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8RGlyZWN0
QXJndW1lbnRzKj4odGhpc0NlbGwpOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhp
c09iamVjdCwgaW5mbygpKTsKKyAgICAKKyAgICBSRUxFQVNFX0FTU0VSVCh0b2tlbiA9PSBEaXJl
Y3RBcmd1bWVudHNPdmVycmlkZXNDb3B5VG9rZW4pOworICAgIAorICAgIGJvb2wqIG9sZE92ZXJy
aWRlcyA9IHRoaXNPYmplY3QtPm1fb3ZlcnJpZGVzLmdldCgpOworICAgIGlmICghb2xkT3ZlcnJp
ZGVzKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgaWYgKHZpc2l0b3IuY2hlY2tJZlNob3Vs
ZENvcHkob3ZlcnJpZGVzKSkgeworICAgICAgICBib29sKiBuZXdPdmVycmlkZXMgPSBzdGF0aWNf
Y2FzdDxib29sKj4odmlzaXRvci5hbGxvY2F0ZU5ld1NwYWNlKG1fbGVuZ3RoKSk7CisgICAgICAg
IG1lbWNweShuZXdPdmVycmlkZXMsIG9sZE92ZXJyaWRlcywgbV9sZW5ndGgpOworICAgICAgICB0
aGlzT2JqZWN0LT5tX292ZXJyaWRlcy5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKG5ld092ZXJyaWRl
cyk7CisgICAgICAgIHZpc2l0b3IuZGlkQ29weShvbGRPdmVycmlkZXMsIG1fbGVuZ3RoKTsKKyAg
ICB9Cit9CisKK1N0cnVjdHVyZSogRGlyZWN0QXJndW1lbnRzOjpjcmVhdGVTdHJ1Y3R1cmUoVk0m
IHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKK3sK
KyAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBl
LCBUeXBlSW5mbyhEaXJlY3RBcmd1bWVudHNUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7
Cit9CisKK3ZvaWQgRGlyZWN0QXJndW1lbnRzOjpzbG93RG93bkFuZFdhc3RlTWVtb3J5KFZNJiB2
bSkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVCghbV9vdmVycmlkZXMpOworICAgIAorICAgIHB1dERp
cmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcihtX2xlbmd0aCksIERv
bnRFbnVtKTsKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmNhbGxlZSwgbV9j
YWxsZWUuZ2V0KCksIERvbnRFbnVtKTsKKyAgICAKKyAgICB2b2lkKiBiYWNraW5nU3RvcmU7Cisg
ICAgUkVMRUFTRV9BU1NFUlQodm0uaGVhcC50cnlBbGxvY2F0ZVN0b3JhZ2UodGhpcywgbV9sZW5n
dGgpLCAmYmFja2luZ1N0b3JlKTsKKyAgICBtX292ZXJyaWRlcy5zZXQodm0sIHRoaXMsIHN0YXRp
Y19jYXN0PGJvb2wqPihiYWNraW5nU3RvcmUpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2xl
bmd0aDsgaS0tOykKKyAgICAgICAgbV9vdmVycmlkZXMuZ2V0KClbaV0gPSBmYWxzZTsKK30KKwor
dm9pZCBEaXJlY3RBcmd1bWVudHM6OnNsb3dEb3duQW5kV2FzdGVNZW1vcnlJZk5lY2Vzc2FyeShW
TSYgdm0pCit7CisgICAgaWYgKCFtX292ZXJyaWRlcykKKyAgICAgICAgc2xvd0Rvd25BbmRXYXN0
ZU1lbW9yeSh2bSk7Cit9CisKK3ZvaWQgRGlyZWN0QXJndW1lbnRzOjpvdmVycmlkZUFyZ3VtZW50
KFZNJiB2bSwgdW5zaWduZWQgaSkKK3sKKyAgICBzbG93RG93bkFuZFdhc3RlTWVtb3J5SWZOZWNl
c3Nhcnkodm0pOworICAgIG1fb3ZlcnJpZGVzLmdldCgpW2luZGV4XSA9IHRydWU7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9E
aXJlY3RBcmd1bWVudHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9EaXJlY3RBcmd1bWVudHMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MTM5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgRGlyZWN0QXJndW1lbnRzX2gKKyNkZWZpbmUgRGlyZWN0QXJndW1lbnRzX2gKKworI2lu
Y2x1ZGUgIkdlbmVyaWNBcmd1bWVudHMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKKy8vIFRoaXMg
aXMgYW4gQXJndW1lbnRzLWNsYXNzIG9iamVjdCB0aGF0IHdlIGNyZWF0ZSB3aGVuIHlvdSBzYXkg
ImFyZ3VtZW50cyIgaW5zaWRlIGEgZnVuY3Rpb24sCisvLyBhbmQgbm9uZSBvZiB0aGUgYXJndW1l
bnRzIGFyZSBjYXB0dXJlZCBpbiB0aGUgZnVuY3Rpb24ncyBhY3RpdmF0aW9uLiBUaGUgZnVuY3Rp
b24gd2lsbCBjb3B5IGFsbAorLy8gb2YgaXRzIGFyZ3VtZW50cyBpbnRvIHRoaXMgb2JqZWN0LCBh
bmQgYWxsIHN1YnNlcXVlbnQgYWNjZXNzZXMgdG8gdGhlIGFyZ3VtZW50cyB3aWxsIGdvIHRocm91
Z2gKKy8vIHRoaXMgb2JqZWN0IHRoZXJlYWZ0ZXIuIFNwZWNpYWwgc3VwcG9ydCBpcyBpbiBwbGFj
ZSBmb3IgbWlzY2hldmlvdXMgZXZlbnRzIGxpa2UgdGhlIGFyZ3VtZW50cworLy8gYmVpbmcgZGVs
ZXRlZCAoc29tZXRoaW5nIGxpa2UgImRlbGV0ZSBhcmd1bWVudHNbMF0iKSBvciByZWNvbmZpZ3Vy
ZWQgKGJyb2FkbHksIHdlIHNheSBkZWxldGlvbnMKKy8vIGFuZCByZWNvbmZpZ3VyYXRpb25zIG1l
YW4gdGhhdCB0aGUgcmVzcGVjdGl2ZSBhcmd1bWVudCB3YXMgIm92ZXJyaWRkZW4iKS4KKy8vCisv
LyBUbyBzcGVlZCBhbGxvY2F0aW9uLCB0aGlzIG9iamVjdCB3aWxsIGhvbGQgYWxsIG9mIHRoZSBh
cmd1bWVudHMgaW4tcGxhY2UuIFRoZSBhcmd1bWVudHMgYXMgd2VsbAorLy8gYXMgYSB0YWJsZSBv
ZiBmbGFncyBzYXlpbmcgd2hpY2ggYXJndW1lbnRzIHdlcmUgb3ZlcnJpZGRlbi4KK2NsYXNzIERp
cmVjdEFyZ3VtZW50cyA6IHB1YmxpYyBHZW5lcmljQXJndW1lbnRzPERpcmVjdEFyZ3VtZW50cz4g
eworcHJpdmF0ZToKKyAgICBEaXJlY3RBcmd1bWVudHMoVk0mLCBTdHJ1Y3R1cmUqLCB1bnNpZ25l
ZCBsZW5ndGgpOworICAgIAorcHVibGljOgorICAgIC8vIENyZWF0ZXMgYW4gYXJndW1lbnRzIG9i
amVjdCBidXQgbGVhdmVzIGl0IHVuaW5pdGlhbGl6ZWQuIFRoaXMgaXMgZGFuZ2Vyb3VzIGlmIHdl
IEdDIHJpZ2h0CisgICAgLy8gYWZ0ZXIgYWxsb2NhdGlvbi4KKyAgICBzdGF0aWMgRGlyZWN0QXJn
dW1lbnRzKiBjcmVhdGVVbmluaXRpYWxpemVkKFZNJiwgU3RydWN0dXJlKiwgdW5zaWduZWQgbGVu
Z3RoKTsKKyAgICAKKyAgICAvLyBDcmVhdGVzIGFuIGFyZ3VtZW50cyBvYmplY3QgYW5kIGluaXRp
YWxpemVzIGV2ZXJ5dGhpbmcgdG8gdGhlIGVtcHR5IHZhbHVlLiBVc2UgdGhpcyBpZiB5b3UKKyAg
ICAvLyBjYW5ub3QgZ3VhcmFudGVlIHRoYXQgeW91J2xsIGltbWVkaWF0ZWx5IGluaXRpYWxpemUg
YWxsIG9mIHRoZSBlbGVtZW50cy4KKyAgICBzdGF0aWMgRGlyZWN0QXJndW1lbnRzKiBjcmVhdGUo
Vk0mLCBTdHJ1Y3R1cmUqLCB1bnNpZ25lZCBsZW5ndGgpOworICAgIAorICAgIC8vIENyZWF0ZXMg
YW4gYXJndW1lbnRzIG9iamVjdCBieSBjb3B5aW5nIHRoZSBhcmd1bW5ldHMgZnJvbSB0aGUgc3Rh
Y2suCisgICAgc3RhdGljIERpcmVjdEFyZ3VtZW50cyogY3JlYXRlQnlDb3B5aW5nKFZNJiwgU3Ry
dWN0dXJlKiwgRXhlY1N0YXRlKik7CisgICAgCisgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJl
bihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIHN0YXRpYyB2b2lkIGNvcHlCYWNraW5nU3Rv
cmUoSlNDZWxsKiwgQ29weVZpc2l0b3ImLCBDb3B5VG9rZW4pOworICAgIAorICAgIHVpbnQzMl90
IGludGVybmFsTGVuZ3RoKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2xlbmd0aDsK
KyAgICB9CisgICAgCisgICAgdWludDMyX3QgbGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QK
KyAgICB7CisgICAgICAgIGlmIChVTkxJS0VMWShtX292ZXJyaWRlcykpCisgICAgICAgICAgICBy
ZXR1cm4gZ2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpLnRvVUludDMyKGV4
ZWMpOworICAgICAgICByZXR1cm4gbV9sZW5ndGg7CisgICAgfQorICAgIAorICAgIGJvb2wgY2Fu
QWNjZXNzSW5kZXhRdWlja2x5KHVpbnQzMl90IGkpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gaSA8IG1fbGVuZ3RoICYmICghbV9vdmVycmlkZXMgfHwgIW1fb3ZlcnJpZGVzLmdldCgpW2ld
KTsKKyAgICB9CisgICAgCisgICAgSlNWYWx1ZSBnZXRJbmRleFF1aWNrbHkodWludDMyX3QgaSkg
Y29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGNh
bkFjY2Vzc0luZGV4UXVpY2tseShpKSk7CisgICAgICAgIHJldHVybiBzdG9yYWdlKClbaV0uZ2V0
KCk7CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0SW5kZXhRdWlja2x5KFZNJiB2bSwgdWludDMy
X3QgaSwgSlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZ
X0lNUExJQ0FUSU9OKGNhbkFjY2Vzc0luZGV4UXVpY2tseShpKSk7CisgICAgICAgIHN0b3JhZ2Uo
KVtpXS5zZXQodm0sIHRoaXMsIHZhbHVlKTsKKyAgICB9CisgICAgCisgICAgV3JpdGVCYXJyaWVy
PEpTRnVuY3Rpb24+JiBjYWxsZWUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fY2FsbGVlOwor
ICAgIH0KKyAgICAKKyAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGFyZ3VtZW50KENhcHR1cmVk
QXJndW1lbnRzT2Zmc2V0IG9mZnNldCkKKyAgICB7CisgICAgICAgIEFTU0VSVChvZmZzZXQpOwor
ICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihvZmZzZXQub2Zmc2V0KCkg
PCBtX2xlbmd0aCk7CisgICAgICAgIHJldHVybiBzdG9yYWdlKClbb2Zmc2V0Lm9mZnNldCgpXTsK
KyAgICB9CisgICAgCisgICAgLy8gTWV0aG9kcyBpbnRlbmRlZCBmb3IgdXNlIGJ5IHRoZSBHZW5l
cmljQXJndW1lbnRzIG1peGluLgorICAgIGJvb2wgb3ZlcnJvZGVUaGluZ3MoKSBjb25zdCB7IHJl
dHVybiAhIW1fb3ZlcnJpZGVzOyB9CisgICAgdm9pZCBzbG93RG93bkFuZFdhc3RlTWVtb3J5KFZN
Jik7CisgICAgdm9pZCBzbG93RG93bkFuZFdhc3RlTWVtb3J5SWZOZWNlc3NhcnkoVk0mKTsKKyAg
ICB2b2lkIG92ZXJyaWRlQXJndW1lbnQoVk0mLCB1bnNpZ25lZCBpbmRleCk7CisgICAgCisgICAg
REVDTEFSRV9JTkZPOworICAgIAorICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVy
ZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUpOworICAgIAorICAgIHN0
YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZMZW5ndGgoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0Yo
RGlyZWN0QXJndW1lbnRzLCBtX2xlbmd0aCk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNl
dE9mT3ZlcnJpZGVzKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKERpcmVjdEFyZ3VtZW50cywg
bV9vdmVycmlkZXMpOyB9CisgICAgCisgICAgc3RhdGljIHNpemVfdCBzdG9yYWdlT2Zmc2V0KCkK
KyAgICB7CisgICAgICAgIHJldHVybiBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Y8c2l6ZW9mKFdy
aXRlQmFycmllcjxVbmtub3duPik+KHNpemVvZihEaXJlY3RBcmd1bWVudHMpKTsKKyAgICB9Cisg
ICAgCisgICAgc3RhdGljIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSh1aW50MzJfdCBsZW5ndGgpCisg
ICAgeworICAgICAgICByZXR1cm4gc3RvcmFnZU9mZnNldCgpICsgc2l6ZW9mKFdyaXRlQmFycmll
cjxVbmtub3duPikgKiBsZW5ndGg7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICBXcml0ZUJh
cnJpZXI8VW5rbm93bj4qIHN0b3JhZ2UoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGJpdHdpc2Vf
Y2FzdDxXcml0ZUJhcnJpZXI8VW5rbm93bj4qPihiaXR3aXNlX2Nhc3Q8Y2hhcio+KHRoaXMpICsg
c3RvcmFnZU9mZnNldCgpKTsKKyAgICB9CisgICAgCisgICAgV3JpdGVCYXJyaWVyPEpTRnVuY3Rp
b24qPiBtX2NhbGxlZTsKKyAgICB1aW50MzJfdCBtX2xlbmd0aDsgLy8gQWx3YXlzIHRoZSBhY3R1
YWwgbGVuZ3RoIG9mIGNhcHR1cmVkIGFyZ3VtZW50cyBhbmQgbmV2ZXIgd2hhdCB3YXMgc3RvcmVk
IGludG8gdGhlIGxlbmd0aCBwcm9wZXJ0eS4KKyAgICBDb3B5V3JpdGVCYXJyaWVyPGJvb2w+IG1f
b3ZlcnJpZGVzOyAvLyBJZiBub24tbnVsbCwgaXQgbWVhbnMgdGhhdCBsZW5ndGgsIGNhbGxlZSwg
YW5kIGNhbGxlciBhcmUgZnVsbHkgbWF0ZXJpYWxpemVkIHByb3BlcnRpZXMuCit9OworCit9IC8v
IG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIERpcmVjdEFyZ3VtZW50c19oCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzLmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1l
bnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEdlbmVyaWNBcmd1bWVudHNfaAor
I2RlZmluZSBHZW5lcmljQXJndW1lbnRzX2gKKworI2luY2x1ZGUgIkpTT2JqZWN0LmgiCisKK25h
bWVzcGFjZSBKU0MgeworCisvLyBUaGlzIGlzIGEgbWl4aW4gZm9yIHRoZSB0d28ga2luZHMgb2Yg
QXJndW1lbnRzLWNsYXNzIG9iamVjdHMgdGhhdCBhcmlzZSB3aGVuIHlvdSBzYXkKKy8vICJhcmd1
bWVudHMiIGluc2lkZSBhIGZ1bmN0aW9uLiBUaGlzIGNsYXNzIGRvZXNuJ3Qgc2hvdyB1cCBpbiB0
aGUgSlNDZWxsIGluaGVyaXRhbmNlIGhpZXJhcmNoeS4KK3RlbXBsYXRlPHR5cGVuYW1lIFR5cGU+
CitjbGFzcyBHZW5lcmljQXJndW1lbnRzIDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgeworcHVi
bGljOgorICAgIHR5cGVkZWYgSlNOb25GaW5hbE9iamVjdCBCYXNlOworCisgICAgc3RhdGljIGNv
bnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90
IHwgSW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90
WmVybyB8IE92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMgfCBKU09iamVjdDo6U3RydWN0dXJlRmxh
Z3M7CisKK3Byb3RlY3RlZDoKKyAgICBHZW5lcmljQXJndW1lbnRzKFZNJiB2bSwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUpCisgICAgICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQorICAgIHsKKyAgICB9
CisKKyAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqLCBFeGVjU3Rh
dGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyBib29sIGdldE93
blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9w
ZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5
TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0
aW9uTW9kZSk7CisgICAgc3RhdGljIHZvaWQgcHV0KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3Bl
cnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIHZvaWQgcHV0
QnlJbmRleChKU0NlbGwqLCBFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFs
dWUsIGJvb2wgc2hvdWxkVGhyb3cpOworICAgIHN0YXRpYyB2b2lkIGRlbGV0ZVByb3BlcnR5KEpT
Q2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSk7CisgICAgc3RhdGljIHZvaWQgZGVsZXRl
UHJvcGVydHlCeUluZGV4KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFt
ZSk7CisgICAgc3RhdGljIHZvaWQgZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3QqLCBFeGVjU3Rh
dGUqLCBQcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgc2hvdWxk
VGhyb3cpOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBHZW5lcmljQXJn
dW1lbnRzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0Fy
Z3VtZW50c0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9HZW5lcmljQXJndW1lbnRzSW5saW5lcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lubGluZXMuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDIxMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaWZuZGVmIEdlbmVyaWNBcmd1bWVudHNJbmxpbmVzX2gKKyNkZWZpbmUg
R2VuZXJpY0FyZ3VtZW50c0lubGluZXNfaAorCisjaW5jbHVkZSAiR2VuZXJpY0FyZ3VtZW50cy5o
IgorI2luY2x1ZGUgIkpTQXJndW1lbnRzSXRlcmF0b3IuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVz
LmgiCisKK25hbWVzcGFjZSBKU0MgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPgorYm9vbCBH
ZW5lcmljQXJndW1lbnRzPFR5cGU+OjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqIG9iamVj
dCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgaWRlbnQsIFByb3BlcnR5U2xvdCYgc2xv
dCkKK3sKKyAgICBUeXBlKiB0aGlzT2JqZWN0ID0ganNDYXN0PFR5cGUqPihvYmplY3QpOworICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgCisgICAgaWYgKCF0aGlzT2JqZWN0LT5vdmVycm9k
ZVRoaW5ncygpKSB7CisgICAgICAgIGlmIChpZGVudCA9PSB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5n
dGgpIHsKKyAgICAgICAgICAgIHNsb3Quc2V0VmFsdWUodGhpc09iamVjdCwgRG9udEVudW0sIGpz
TnVtYmVyKHRoaXNPYmplY3QtPmludGVybmFsTGVuZ3RoKCkpKTsKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmIChpZGVudCA9PSB2bS5wcm9wZXJ0eU5hbWVz
LT5jYWxsZWUpIHsKKyAgICAgICAgICAgIHNsb3Quc2V0VmFsdWUodGhpc09iamVjdCwgRG9udEVu
dW0sIHRoaXNPYmplY3QtPmNhbGxlZSgpLmdldCgpKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHVuc2lnbmVkIGluZGV4ID0gaWRlbnQuYXNJ
bmRleCgpOworICAgIGlmICh0aGlzT2JqZWN0LT5jYW5BY2Nlc3NJbmRleFF1aWNrbHkoaW5kZXgp
KSB7CisgICAgICAgIHNsb3Quc2V0VmFsdWUodGhpc09iamVjdCwgTm9uZSwgdGhpc09iamVjdC0+
Z2V0SW5kZXhRdWlja2x5KGluZGV4KSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAg
ICAKKyAgICBpZiAoQmFzZTo6Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIGV4ZWMsIGlk
ZW50LCBzbG90KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgCisgICAgaWYgKGlkZW50ID09
IHZtLnByb3BlcnR5TmFtZXMtPml0ZXJhdG9yUHJpdmF0ZU5hbWUpIHsKKyAgICAgICAgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKTsKKyAg
ICAgICAgdGhpc09iamVjdC0+SlNDX05BVElWRV9GVU5DVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5p
dGVyYXRvclByaXZhdGVOYW1lLCBhcmd1bWVudHNGdW5jSXRlcmF0b3IsIERvbnRFbnVtLCAwKTsK
KyAgICAgICAgaWYgKEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgZXhl
YywgaWRlbnQsIHNsb3QpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAor
ICAgIHJldHVybiBmYWxzZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4KK2Jvb2wgR2Vu
ZXJpY0FyZ3VtZW50czxUeXBlPjo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU09iamVjdCog
b2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGluZGV4LCBQcm9wZXJ0eVNsb3QmIHNs
b3QpCit7CisgICAgVHlwZSogdGhpc09iamVjdCA9IGpzQ2FzdDxUeXBlKj4ob2JqZWN0KTsKKyAg
ICAKKyAgICBpZiAodGhpc09iamVjdC0+Y2FuQWNjZXNzSW5kZXhRdWlja2x5KGluZGV4KSkgewor
ICAgICAgICBzbG90LnNldFZhbHVlKHRoaXNPYmplY3QsIE5vbmUsIHRoaXNPYmplY3QtPmdldElu
ZGV4UXVpY2tseShpbmRleCkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisg
ICAgcmV0dXJuIEJhc2U6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgob2JqZWN0LCBleGVjLCBp
bmRleCwgc2xvdCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFR5cGU+Cit2b2lkIEdlbmVyaWNB
cmd1bWVudHM8VHlwZT46OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhl
Y1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgYXJyYXksIEVudW1lcmF0aW9uTW9kZSBt
b2RlKQoreworICAgIFR5cGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8VHlwZSo+KG9iamVjdCk7Cisg
ICAgCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRoaXNPYmplY3QtPmludGVybmFsTGVu
Z3RoKCk7ICsraSkgeworICAgICAgICBpZiAoIXRoaXNPYmplY3QtPmNhbkFjY2Vzc0luZGV4UXVp
Y2tseShpbmRleCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgYXJyYXkuYWRkKElk
ZW50aWZpZXI6OmZyb20oZXhlYywgaSkpOworICAgIH0KKyAgICBpZiAoc2hvdWxkSW5jbHVkZURv
bnRFbnVtUHJvcGVydGllcyhtb2RlKSAmJiAhdGhpc09iamVjdC0+b3ZlcnJvZGVUaGluZ3MoKSkg
eworICAgICAgICBhcnJheS5hZGQoZXhlYy0+cHJvcGVydHlOYW1lcygpLmNhbGxlZSk7CisgICAg
ICAgIGFycmF5LmFkZChleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKTsKKyAgICB9CisgICAg
QmFzZTo6Z2V0T3duUHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBleGVjLCBhcnJheSwgbW9kZSk7
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFR5cGU+Cit2b2lkIEdlbmVyaWNBcmd1bWVudHM8VHlw
ZT46OnB1dChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIGlkZW50
LCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgVHlwZSogdGhp
c09iamVjdCA9IGpzQ2FzdDxUeXBlKj4ob2JqZWN0KTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgp
OworICAgIAorICAgIGlmICghdGhpc09iamVjdC0+b3ZlcnJvZGVUaGluZ3MoKQorICAgICAgICAm
JiAoaWRlbnQgPT0gdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoCisgICAgICAgICAgICB8fCBpZGVu
dCA9PSB2bS5wcm9wZXJ0eU5hbWVzLT5jYWxsZWUpKQorICAgICAgICB0aGlzT2JqZWN0LT5zbG93
RG93bkFuZFdhc3RlTWVtb3J5KHZtKTsKKyAgICAKKyAgICB1bnNpZ25lZCBpbmRleCA9IGlkZW50
LmFzSW5kZXgoKTsKKyAgICBpZiAodGhpc09iamVjdC0+Y2FuQWNjZXNzSW5kZXhRdWlja2x5KGlu
ZGV4KSkgeworICAgICAgICBzZXRJbmRleFF1aWNrbHkodm0sIGluZGV4LCB2YWx1ZSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgQmFzZTo6cHV0KHRoaXNPYmplY3QsIGV4ZWMs
IGlkZW50LCB2YWx1ZSwgc2xvdCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFR5cGU+Cit2b2lk
IEdlbmVyaWNBcmd1bWVudHM8VHlwZT46OnB1dEJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3Rh
dGUqIGV4ZWMsIHVuc2lnbmVkIGluZGV4LCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93
KQoreworICAgIFR5cGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8VHlwZSo+KG9iamVjdCk7CisgICAg
Vk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICAKKyAgICBpZiAodGhpc09iamVjdC0+Y2FuU2V0SW5k
ZXhRdWlja2x5KGluZGV4KSkgeworICAgICAgICBzZXRJbmRleFF1aWNrbHkodm0sIGluZGV4LCB2
YWx1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIEJhc2U6OnB1
dEJ5SW5kZXgoY2VsbCwgZXhlYywgaW5kZXgsIHZhbHVlLCBzaG91bGRUaHJvdyk7Cit9CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFR5cGU+Cit2b2lkIEdlbmVyaWNBcmd1bWVudHM8VHlwZT46OmRlbGV0
ZVByb3BlcnR5KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgaWRl
bnQpCit7CisgICAgVHlwZSogdGhpc09iamVjdCA9IGpzQ2FzdDxUeXBlKj4ob2JqZWN0KTsKKyAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIAorICAgIGlmICghdGhpc09iamVjdC0+b3ZlcnJv
ZGVUaGluZ3MoKQorICAgICAgICAmJiAoaWRlbnQgPT0gdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3Ro
CisgICAgICAgICAgICB8fCBpZGVudCA9PSB2bS5wcm9wZXJ0eU5hbWVzLT5jYWxsZWUpKQorICAg
ICAgICB0aGlzT2JqZWN0LT5zbG93RG93bkFuZFdhc3RlTWVtb3J5KHZtKTsKKyAgICAKKyAgICB1
bnNpZ25lZCBpbmRleCA9IGlkZW50LmFzSW5kZXgoKTsKKyAgICBpZiAodGhpc09iamVjdC0+Y2Fu
QWNjZXNzSW5kZXhRdWlja2x5KGluZGV4KSkgeworICAgICAgICB0aGlzT2JqZWN0LT5vdmVycmlk
ZUFyZ3VtZW50KHZtLCBpbmRleCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAg
QmFzZTo6ZGVsZXRlUHJvcGVydHkodGhpc09iamVjdCwgZXhlYywgaWRlbnQpOworfQorCit0ZW1w
bGF0ZTx0eXBlbmFtZSBUeXBlPgordm9pZCBHZW5lcmljQXJndW1lbnRzPFR5cGU+OjpkZWxldGVQ
cm9wZXJ0eUJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGlu
ZGV4KQoreworICAgIFR5cGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8VHlwZSo+KG9iamVjdCk7Cisg
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICAKKyAgICBpZiAodGhpc09iamVjdC0+Y2FuQWNj
ZXNzSW5kZXhRdWlja2x5KGluZGV4KSkgeworICAgICAgICB0aGlzT2JqZWN0LT5vdmVycmlkZUFy
Z3VtZW50KHZtLCBpbmRleCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgcmV0
dXJuIEJhc2U6OmRlbGV0ZVByb3BlcnR5QnlJbmRleChjZWxsLCBleGVjLCBpbmRleCk7Cit9CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFR5cGU+Cit2b2lkIEdlbmVyaWNBcmd1bWVudHM8VHlwZT46OmRl
ZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVy
dHlOYW1lIGlkZW50LCBjb25zdCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIGJvb2wg
c2hvdWxkVGhyb3cpCit7CisgICAgVHlwZSogdGhpc09iamVjdCA9IGpzQ2FzdDxUeXBlKj4ob2Jq
ZWN0KTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIAorICAgIGlmIChpZGVudCA9PSB2
bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgKKyAgICAgICAgfHwgaWRlbnQgPT0gdm0ucHJvcGVydHlO
YW1lcy0+Y2FsbGVlKQorICAgICAgICB0aGlzT2JqZWN0LT5zbG93RG93bkFuZFdhc3RlTWVtb3J5
SWZOZWNlc3Nhcnkodm0pOworICAgIGVsc2UgeworICAgICAgICB1bnNpZ25lZCBpbmRleCA9IGlk
ZW50LmFzSW5kZXgoKTsKKyAgICAgICAgaWYgKHRoaXNPYmplY3QtPmNhbkFjY2Vzc0FyZ3VtZW50
UXVpY2tseShpbmRleCkpIHsKKyAgICAgICAgICAgIGlmICghZGVzY3JpcHRvci5pc0FjY2Vzc29y
RGVzY3JpcHRvcigpKSB7CisgICAgICAgICAgICAgICAgLy8gSWYgdGhlIHByb3BlcnR5IGlzIG5v
dCBkZWxldGVkIGFuZCB3ZSBhcmUgdXNpbmcgYSBub24tYWNjZXNzb3IgZGVzY3JpcHRvciwgdGhl
bgorICAgICAgICAgICAgICAgIC8vIG1ha2Ugc3VyZSB0aGF0IHRoZSBhbGlhc2VkIGFyZ3VtZW50
IHNlZXMgdGhlIHZhbHVlLgorICAgICAgICAgICAgICAgIGlmIChkZXNjcmlwdG9yLnZhbHVlKCkp
CisgICAgICAgICAgICAgICAgICAgIHRoaXNPYmplY3QtPnNldEluZGV4UXVpY2tseSh2bSwgaSwg
ZGVzY3JpcHRvci52YWx1ZSgpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIElm
IHRoZSBwcm9wZXJ0eSBpcyBub3QgZGVsZXRlZCBhbmQgd2UgYXJlIHVzaW5nIGEgbm9uLWFjY2Vz
c29yLCB3cml0YWJsZQorICAgICAgICAgICAgICAgIC8vIGRlc2NyaXB0b3IsIHRoZW4gd2UgYXJl
IGRvbmUuIFRoZSBhcmd1bWVudCBjb250aW51ZXMgdG8gYmUgYWxpYXNlZC4gTm90ZSB0aGF0IHdl
CisgICAgICAgICAgICAgICAgLy8gaWdub3JlIHRoZSByZXF1ZXN0IHRvIGNoYW5nZSBlbnVtZXJh
YmlsaXR5LiBXZSBhcHBlYXIgdG8gaGF2ZSBhbHdheXMgZG9uZSBzbywgaW4KKyAgICAgICAgICAg
ICAgICAvLyBjYXNlcyB3aGVyZSB0aGUgYXJndW1lbnQgd2FzIHN0aWxsIGFsaWFzZWQuCisgICAg
ICAgICAgICAgICAgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNDE5NTIKKyAgICAgICAgICAgICAgICBpZiAoZGVzY3JpcHRvci53cml0YWJsZSgpKQor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgICAgICAvLyBJZiB0aGUgcHJvcGVydHkgaXMgYSBub24tZGVsZXRlZCBhcmd1bWVu
dCwgdGhlbiBtb3ZlIGl0IGludG8gdGhlIGJhc2Ugb2JqZWN0IGFuZAorICAgICAgICAgICAgLy8g
dGhlbiBkZWxldGUgaXQuCisgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gdGhpc09iamVjdC0+
Z2V0SW5kZXhRdWlja2x5KGkpOworICAgICAgICAgICAgQVNTRVJUKHZhbHVlKTsKKyAgICAgICAg
ICAgIG9iamVjdC0+cHV0RGlyZWN0TWF5QmVJbmRleChleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVl
KTsKKyAgICAgICAgICAgIHRoaXNPYmplY3QtPm92ZXJyaWRlQXJndW1lbnQodm0sIGkpOworICAg
ICAgICB9CisgICAgfQorICAgIAorICAgIC8vIE5vdyBqdXN0IGxldCB0aGUgbm9ybWFsIG9iamVj
dCBtYWNoaW5lcnkgZG8gaXRzIHRoaW5nLgorICAgIHJldHVybiBCYXNlOjpkZWZpbmVPd25Qcm9w
ZXJ0eShvYmplY3QsIGV4ZWMsIGlkZW50LCBkZXNjcmlwdG9yLCBzaG91bGRUaHJvdyk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gR2VuZXJpY0FyZ3VtZW50c0lubGluZXNf
aAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljT2Zmc2V0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY09mZnNl
dC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJp
Y09mZnNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTExIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgR2VuZXJpY09mZnNldF9o
CisjZGVmaW5lIEdlbmVyaWNPZmZzZXRfaAorCisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4K
KworbmFtZXNwYWNlIEpTQyB7CisKKy8vIEEgbWl4aW4gZm9yIGNyZWF0aW5nIHRoZSB2YXJpb3Vz
IGtpbmRzIG9mIHZhcmlhYmxlIG9mZnNldHMgdGhhdCBvdXIgZW5naW5lIHN1cHBvcnRzLgordGVt
cGxhdGU8dHlwZW5hbWUgVD4KK2NsYXNzIEdlbmVyaWNPZmZzZXQgeworcHVibGljOgorICAgIHN0
YXRpYyBjb25zdCB1bnNpZ25lZCBpbnZhbGlkT2Zmc2V0ID0gVUlOVF9NQVg7CisgICAgCisgICAg
R2VuZXJpY09mZnNldCgpCisgICAgICAgIDogbV9vZmZzZXQoaW52YWxpZE9mZnNldCkKKyAgICB7
CisgICAgfQorICAgIAorICAgIGV4cGxpY2l0IEdlbmVyaWNPZmZzZXQodW5zaWduZWQgb2Zmc2V0
KQorICAgICAgICA6IG1fb2Zmc2V0KG9mZnNldCkKKyAgICB7CisgICAgfQorICAgIAorICAgIGJv
b2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQgPT0gaW52YWxpZE9mZnNldDsg
fQorICAgIAorICAgIHVuc2lnbmVkIG9mZnNldFVuY2hlY2tlZCgpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gbV9vZmZzZXQ7CisgICAgfQorICAgIAorICAgIHVuc2lnbmVkIG9mZnNldCgp
IGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQobV9vZmZzZXQgIT0gaW52YWxpZE9mZnNldCk7
CisgICAgICAgIHJldHVybiBtX29mZnNldDsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRv
cj09KGNvbnN0IFQmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fb2Zmc2V0
ID09IG90aGVyLm9mZnNldFVuY2hlY2tlZCgpOworICAgIH0KKyAgICBib29sIG9wZXJhdG9yIT0o
Y29uc3QgVCYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9vZmZzZXQgIT0g
b3RoZXIub2Zmc2V0VW5jaGVja2VkKCk7CisgICAgfQorICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0
IFQmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fb2Zmc2V0IDwgb3RoZXIu
b2Zmc2V0VW5jaGVja2VkKCk7CisgICAgfQorICAgIGJvb2wgb3BlcmF0b3I+KGNvbnN0IFQmIG90
aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fb2Zmc2V0ID4gb3RoZXIub2Zmc2V0
VW5jaGVja2VkKCk7CisgICAgfQorICAgIGJvb2wgb3BlcmF0b3I8PShjb25zdCBUJiBvdGhlcikg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX29mZnNldCA8PSBvdGhlci5vZmZzZXRVbmNo
ZWNrZWQoKTsKKyAgICB9CisgICAgYm9vbCBvcGVyYXRvcj49KGNvbnN0IFQmIG90aGVyKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fb2Zmc2V0ID49IG90aGVyLm9mZnNldFVuY2hlY2tl
ZCgpOworICAgIH0KKyAgICAKKyAgICBUIG9wZXJhdG9yKyhpbnQgdmFsdWUpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gVChvZmZzZXQoKSArIHZhbHVlKTsKKyAgICB9CisgICAgVCBvcGVy
YXRvci0oaW50IHZhbHVlKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIFQob2Zmc2V0KCkg
LSB2YWx1ZSk7CisgICAgfQorICAgIFQmIG9wZXJhdG9yKz0oaW50IHZhbHVlKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuICp0aGlzID0gKnRoaXMgKyB2YWx1ZTsKKyAgICB9CisgICAgVCYgb3BlcmF0
b3ItPShpbnQgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gKnRoaXMgPSAqdGhpcyAtIHZh
bHVlOworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgdW5zaWduZWQgbV9vZmZzZXQ7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEdlbmVyaWNPZmZzZXRfaAorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FyZ3VtZW50c0l0ZXJhdG9yLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FyZ3VtZW50c0l0
ZXJhdG9yLmNwcAkocmV2aXNpb24gMTgwODc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNBcmd1bWVudHNJdGVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTUgQXBwbGUsIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzMsMTAgKzMz
LDE4IEBAIG5hbWVzcGFjZSBKU0MgewogCiBjb25zdCBDbGFzc0luZm8gSlNBcmd1bWVudHNJdGVy
YXRvcjo6c19pbmZvID0geyAiQXJndW1lbnRzSXRlcmF0b3IiLCAmQmFzZTo6c19pbmZvLCAwLCBD
UkVBVEVfTUVUSE9EX1RBQkxFKEpTQXJndW1lbnRzSXRlcmF0b3IpIH07CiAKLXZvaWQgSlNBcmd1
bWVudHNJdGVyYXRvcjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBBcmd1bWVudHMqIGFyZ3VtZW50
cykKK3ZvaWQgSlNBcmd1bWVudHNJdGVyYXRvcjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBKU09i
amVjdCogYXJndW1lbnRzKQogewogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICBt
X2FyZ3VtZW50cy5zZXQodm0sIHRoaXMsIGFyZ3VtZW50cyk7CiB9CiAKK0VuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgYXJndW1lbnRzRnVuY0l0ZXJhdG9yKEV4ZWNTdGF0ZSogZXhlYykKK3sK
KyAgICBKU09iamVjdCogdGhpc09iaiA9IGV4ZWMtPnRoaXNWYWx1ZSgpLnRvVGhpcyhleGVjLCBT
dHJpY3RNb2RlKS50b09iamVjdChleGVjKTsKKyAgICBpZiAoIXRoaXNPYmotPmluaGVyaXRzKEFy
Z3VtZW50czo6aW5mbygpKSAmJiAhdGhpc09iai0+aW5oZXJpdHMoT3V0T2ZCYW5kQXJndW1lbnRz
OjppbmZvKCkpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93VHlwZUVycm9y
KGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiQXR0ZW1wdGVkIHRvIHVzZSBBcmd1bWVudHMgaXRlcmF0b3Ig
b24gbm9uLUFyZ3VtZW50cyBvYmplY3QiKSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
SlNBcmd1bWVudHNJdGVyYXRvcjo6Y3JlYXRlKGV4ZWMtPnZtKCksIGV4ZWMtPmNhbGxlZSgpLT5n
bG9iYWxPYmplY3QoKS0+YXJndW1lbnRzSXRlcmF0b3JTdHJ1Y3R1cmUoKSwgdGhpc09iaikpOwor
fQorCiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FyZ3VtZW50c0l0
ZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNB
cmd1bWVudHNJdGVyYXRvci5oCShyZXZpc2lvbiAxODA4NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0FyZ3VtZW50c0l0ZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlLCBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTUgQXBwbGUsIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYs
NyArMjYsNyBAQAogI2lmbmRlZiBKU0FyZ3VtZW50c0l0ZXJhdG9yX2gKICNkZWZpbmUgSlNBcmd1
bWVudHNJdGVyYXRvcl9oCiAKLSNpbmNsdWRlICJBcmd1bWVudHMuaCIKKyNpbmNsdWRlICJKU09i
amVjdC5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtNDEsNyArNDEsNyBAQCBwdWJsaWM6CiAg
ICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5
cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKICAgICB9
CiAKLSAgICBzdGF0aWMgSlNBcmd1bWVudHNJdGVyYXRvciogY3JlYXRlKFZNJiB2bSwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIEFyZ3VtZW50cyogYXJndW1lbnRzKQorICAgIHN0YXRpYyBKU0FyZ3Vt
ZW50c0l0ZXJhdG9yKiBjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNPYmpl
Y3QqIGFyZ3VtZW50cykKICAgICB7CiAgICAgICAgIEpTQXJndW1lbnRzSXRlcmF0b3IqIGluc3Rh
bmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNBcmd1bWVudHNJdGVyYXRvcj4odm0u
aGVhcCkpIEpTQXJndW1lbnRzSXRlcmF0b3Iodm0sIHN0cnVjdHVyZSk7CiAgICAgICAgIGluc3Rh
bmNlLT5maW5pc2hDcmVhdGlvbih2bSwgYXJndW1lbnRzKTsKQEAgLTUwLDExICs1MCwxMSBAQCBw
dWJsaWM6CiAKICAgICBib29sIG5leHQoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTVmFsdWUmIHZh
bHVlKQogICAgIHsKLSAgICAgICAgaWYgKG1fbmV4dEluZGV4ID49IG1fYXJndW1lbnRzLT5sZW5n
dGgoY2FsbEZyYW1lKSkKKyAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0KKyAgICAgICAgICAgIG1f
YXJndW1lbnRzLT5nZXQoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPnByb3BlcnR5TmFtZXMoKS5sZW5n
dGgpLnRvVUludDMyKGNhbGxGcmFtZSk7CisgICAgICAgIGlmIChtX25leHRJbmRleCA+PSBsZW5n
dGgpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHZhbHVlID0gbV9hcmd1bWVu
dHMtPnRyeUdldEFyZ3VtZW50KG1fbmV4dEluZGV4KyspOwotICAgICAgICBpZiAoIXZhbHVlKQot
ICAgICAgICAgICAgdmFsdWUgPSBqc1VuZGVmaW5lZCgpOworICAgICAgICB2YWx1ZSA9IG1fYXJn
dW1lbnRzLT5nZXRJbmRleChjYWxsRnJhbWUsIG1fbmV4dEluZGV4KyspOwogICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTY4LDEyICs2OCwxNCBAQCBwcml2YXRlOgogICAgIHsKICAg
ICB9CiAKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgQXJndW1lbnRzKik7CisgICAgdm9p
ZCBmaW5pc2hDcmVhdGlvbihWTSYsIEpTT2JqZWN0Kik7CiAgICAgCi0gICAgV3JpdGVCYXJyaWVy
PEFyZ3VtZW50cz4gbV9hcmd1bWVudHM7CisgICAgV3JpdGVCYXJyaWVyPEpTT2JqZWN0PiBtX2Fy
Z3VtZW50czsKICAgICBzaXplX3QgbV9uZXh0SW5kZXg7CiB9OwogCitFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGFyZ3VtZW50c0Z1bmNJdGVyYXRvcihFeGVjU3RhdGUqKTsKKwogfQogCiAj
ZW5kaWYgLy8gIWRlZmluZWQoSlNBcmd1bWVudHNJdGVyYXRvcl9oKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNFbnZpcm9ubWVudFJlY29yZC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNFbnZpcm9ubWVudFJlY29yZC5jcHAJ
KHJldmlzaW9uIDE4MDg3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRW52
aXJvbm1lbnRSZWNvcmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMTIsIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0zNSw0ICszNSwxMiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY29uc3QgQ2xhc3NJbmZvIEpTRW52
aXJvbm1lbnRSZWNvcmQ6OnNfaW5mbyA9IHsgIkVudmlyb25tZW50UmVjb3JkIiwgJkJhc2U6OnNf
aW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU0Vudmlyb25tZW50UmVjb3JkKSB9OwogCit2
b2lkIEpTRW52aXJvbm1lbnRSZWNvcmQ6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90
VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBKU0Vudmlyb25tZW50UmVjb3JkKiB0aGlzT2JqZWN0
ID0ganNDYXN0PEpTRW52aXJvbm1lbnRSZWNvcmQqPihjZWxsKTsKKyAgICBBU1NFUlRfR0NfT0JK
RUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CisgICAgQmFzZTo6dmlzaXRDaGlsZHJl
bih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKKyAgICB2aXNpdG9yLmFwcGVuZFZhbHVlcyh0aGlzT2Jq
ZWN0LT52YXJpYWJsZXMoKSwgbV9zeW1ib2xUYWJsZS0+c2NvcGVTaXplKCkpOworfQorCiB9IC8v
IG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRW52
aXJvbm1lbnRSZWNvcmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0Vudmlyb25tZW50UmVjb3JkLmgJKHJldmlzaW9uIDE4MDg3NSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRW52aXJvbm1lbnRSZWNvcmQuaAkod29ya2luZyBjb3B5
KQpAQCAtNDYsMTEgKzQ2LDI2IEBAIGNsYXNzIEpTRW52aXJvbm1lbnRSZWNvcmQgOiBwdWJsaWMg
SlNTeW0KIHB1YmxpYzoKICAgICB0eXBlZGVmIEpTU3ltYm9sVGFibGVPYmplY3QgQmFzZTsKIAot
ICAgIFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIHJlZ2lzdGVycygpIHsgcmV0dXJuIG1fcmVn
aXN0ZXJzOyB9Ci0gICAgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiYgcmVnaXN0ZXJBdChpbnQg
aW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fcmVnaXN0ZXJzW2luZGV4XTsgfQorICAgIFdyaXRlQmFy
cmllckJhc2U8VW5rbm93bj4qIHZhcmlhYmxlcygpCisgICAgeworICAgICAgICByZXR1cm4gYml0
d2lzZV9jYXN0PFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qPihiaXR3aXNlX2Nhc3Q8Y2hhcio+
KHRoaXMpICsgb2Zmc2V0T2ZWYXJpYWJsZXMoKSk7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNW
YWxpZChTY29wZU9mZnNldCBvZmZzZXQpCisgICAgeworICAgICAgICByZXR1cm4gISFvZmZzZXQg
JiYgb2Zmc2V0Lm9mZnNldCgpIDwgbV9zeW1ib2xUYWJsZS0+c2NvcGVTaXplKCk7CisgICAgfQor
ICAgIAorICAgIFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4mIHZhcmlhYmxlQXQoU2NvcGVPZmZz
ZXQgb2Zmc2V0KSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzVmFsaWQob2Zmc2V0KSk7
CisgICAgICAgIHJldHVybiB2YXJpYWJsZXMoKVtvZmZzZXQub2Zmc2V0KCldOworICAgIH0KIAot
ICAgIFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIGNvbnN0ICogYWRkcmVzc09mUmVnaXN0ZXJz
KCkgY29uc3QgeyByZXR1cm4gJm1fcmVnaXN0ZXJzOyB9Ci0gICAgc3RhdGljIHNpemVfdCBvZmZz
ZXRPZlJlZ2lzdGVycygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU0Vudmlyb25tZW50UmVj
b3JkLCBtX3JlZ2lzdGVycyk7IH0KKyAgICBzdGF0aWMgc2l6ZV90IG9mZnNldE9mVmFyaWFibGVz
KCkKKyAgICB7CisgICAgICAgIHJldHVybiBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Y8c2l6ZW9m
KFdyaXRlQmFycmllcjxVbmtub3duPik+KHNpemVvZihKU0Vudmlyb25tZW50UmVjb3JkKSk7Cisg
ICAgfQogCiAgICAgREVDTEFSRV9JTkZPOwogCkBAIC02MCwxNSArNzUsMzUgQEAgcHJvdGVjdGVk
OgogICAgIEpTRW52aXJvbm1lbnRSZWNvcmQoCiAgICAgICAgIFZNJiB2bSwKICAgICAgICAgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsCi0gICAgICAgIFJlZ2lzdGVyKiByZWdpc3RlcnMsCiAgICAgICAg
IEpTU2NvcGUqIHNjb3BlLAogICAgICAgICBTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUpCiAgICAg
ICAgIDogQmFzZSh2bSwgc3RydWN0dXJlLCBzY29wZSwgc3ltYm9sVGFibGUpCi0gICAgICAgICwg
bV9yZWdpc3RlcnMocmVpbnRlcnByZXRfY2FzdDxXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+Kj4o
cmVnaXN0ZXJzKSkKICAgICB7CiAgICAgfQotCi0gICAgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3du
PiogbV9yZWdpc3RlcnM7IC8vICJyIiBpbiB0aGUgc3RhY2suCisgICAgCisgICAgc3RhdGljIHNp
emVfdCBhbGxvY2F0aW9uU2l6ZUZvclNjb3BlU2l6ZSh1bnNpZ25lZCBzY29wZVNpemUpCisgICAg
eworICAgICAgICByZXR1cm4gb2Zmc2V0T2ZWYXJpYWJsZXMoKSArIHNjb3BlU2l6ZSAqIHNpemVv
ZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgc2l6ZV90
IGFsbG9jYXRpb25TaXplKFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSkKKyAgICB7CisgICAgICAg
IHJldHVybiBhbGxvY2F0aW9uU2l6ZUZvclNjb3BlU2l6ZShzeW1ib2xUYWJsZS0+c2NvcGVTaXpl
KCkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uVW5pbml0aWFsaXplZChW
TSYgdm0pCisgICAgeworICAgICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CisgICAgfQor
ICAgIAorICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mIHZtKQorICAgIHsKKyAgICAgICAgZmlu
aXNoQ3JlYXRpb25VbmluaXRpYWxpemVkKHZtKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
bV9zeW1ib2xUYWJsZS0+c2NvcGVTaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgIC8vIEZpbGxp
bmcgdGhpcyB3aXRoIHVuZGVmaW5lZCBpcyB1c2VmdWwgYmVjYXVzZSB0aGF0J3Mgd2hhdCB2YXJp
YWJsZXMgc3RhcnQgb3V0IGFzLgorICAgICAgICAgICAgdmFyaWFibGVBdChpKS5zZXRVbmRlZmlu
ZWQoKTsKKyAgICAgICAgfQorICAgIH0KIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMZXhpY2FsRW52aXJvbm1lbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTGV4aWNhbEVudmly
b25tZW50LmNwcAkocmV2aXNpb24gMTgwODc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNMZXhpY2FsRW52aXJvbm1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSwgMjAxNCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDksIDIwMTQsIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC00MCwyNyArNDAsMTkgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNvbnN0IENs
YXNzSW5mbyBKU0xleGljYWxFbnZpcm9ubWVudDo6c19pbmZvID0geyAiSlNMZXhpY2FsRW52aXJv
bm1lbnQiLCAmQmFzZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTTGV4aWNhbEVu
dmlyb25tZW50KSB9OwogCi12b2lkIEpTTGV4aWNhbEVudmlyb25tZW50Ojp2aXNpdENoaWxkcmVu
KEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi17Ci0gICAgSlNMZXhpY2FsRW52
aXJvbm1lbnQqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNMZXhpY2FsRW52aXJvbm1lbnQqPihjZWxs
KTsKLSAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7Ci0g
ICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKLQotICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgdGhpc09iamVjdC0+c3ltYm9sVGFibGUoKS0+Y2FwdHVyZUNvdW50KCk7
ICsraSkKLSAgICAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPnN0b3JhZ2UoKVtpXSk7
Ci19Ci0KIGlubGluZSBib29sIEpTTGV4aWNhbEVudmlyb25tZW50OjpzeW1ib2xUYWJsZUdldChQ
cm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgU3lt
Ym9sVGFibGVFbnRyeSBlbnRyeSA9IHN5bWJvbFRhYmxlKCktPmlubGluZUdldChwcm9wZXJ0eU5h
bWUudWlkKCkpOwogICAgIGlmIChlbnRyeS5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCisgICAgU2NvcGVPZmZzZXQgb2Zmc2V0ID0gZW50cnkuc2NvcGVPZmZzZXQoKTsKKwogICAg
IC8vIERlZmVuZCBhZ2FpbnN0IHRoZSBpbnNwZWN0b3IgYXNraW5nIGZvciBhIHZhciBhZnRlciBp
dCBoYXMgYmVlbiBvcHRpbWl6ZWQgb3V0LgotICAgIGlmICghaXNWYWxpZChlbnRyeSkpCisgICAg
aWYgKCFpc1ZhbGlkKG9mZnNldCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHNsb3Qu
c2V0VmFsdWUodGhpcywgRG9udEVudW0sIHJlZ2lzdGVyQXQoZW50cnkuZ2V0SW5kZXgoKSkuZ2V0
KCkpOworICAgIHNsb3Quc2V0VmFsdWUodGhpcywgRG9udEVudW0sIHZhcmlhYmxlQXQob2Zmc2V0
KS5nZXQoKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTcwLDExICs2MiwxMyBAQCBpbmxp
bmUgYm9vbCBKU0xleGljYWxFbnZpcm9ubWVudDo6c3ltYm9sCiAgICAgaWYgKGVudHJ5LmlzTnVs
bCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICBTY29wZU9mZnNldCBvZmZzZXQgPSBl
bnRyeS5zY29wZU9mZnNldCgpOworCiAgICAgLy8gRGVmZW5kIGFnYWluc3QgdGhlIGluc3BlY3Rv
ciBhc2tpbmcgZm9yIGEgdmFyIGFmdGVyIGl0IGhhcyBiZWVuIG9wdGltaXplZCBvdXQuCi0gICAg
aWYgKCFpc1ZhbGlkKGVudHJ5KSkKKyAgICBpZiAoIWlzVmFsaWQob2Zmc2V0KSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCi0gICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKHJlZ2lzdGVyQXQo
ZW50cnkuZ2V0SW5kZXgoKSkuZ2V0KCksIGVudHJ5LmdldEF0dHJpYnV0ZXMoKSk7CisgICAgZGVz
Y3JpcHRvci5zZXREZXNjcmlwdG9yKHZhcmlhYmxlQXQob2Zmc2V0KS5nZXQoKSwgZW50cnkuZ2V0
QXR0cmlidXRlcygpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtOTUsMTIgKzg5LDEzIEBA
IGlubGluZSBib29sIEpTTGV4aWNhbEVudmlyb25tZW50OjpzeW1ib2wKICAgICAgICAgICAgICAg
ICB0aHJvd1R5cGVFcnJvcihleGVjLCBTdHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJy
b3IpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KKyAgICAgICAgU2NvcGVP
ZmZzZXQgb2Zmc2V0ID0gaXRlci0+dmFsdWUuc2NvcGVPZmZzZXQoKTsKICAgICAgICAgLy8gRGVm
ZW5kIGFnYWluc3QgdGhlIGluc3BlY3RvciBhc2tpbmcgZm9yIGEgdmFyIGFmdGVyIGl0IGhhcyBi
ZWVuIG9wdGltaXplZCBvdXQuCi0gICAgICAgIGlmICghaXNWYWxpZChpdGVyLT52YWx1ZSkpCisg
ICAgICAgIGlmICghaXNWYWxpZChvZmZzZXQpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICAgICBpZiAoVmFyaWFibGVXYXRjaHBvaW50U2V0KiBzZXQgPSBpdGVyLT52YWx1ZS53YXRj
aHBvaW50U2V0KCkpCi0gICAgICAgICAgICBzZXQtPmludmFsaWRhdGUoVmFyaWFibGVXcml0ZUZp
cmVEZXRhaWwodGhpcywgcHJvcGVydHlOYW1lKSk7IC8vIERvbid0IG1lc3MgYXJvdW5kIC0gaWYg
d2UgaGFkIGZvdW5kIHRoaXMgc3RhdGljYWxseSwgd2Ugd291bGQgaGF2ZSBpbnZjYWxpZGF0ZWQg
aXQuCi0gICAgICAgIHJlZyA9ICZyZWdpc3RlckF0KGl0ZXItPnZhbHVlLmdldEluZGV4KCkpOwor
ICAgICAgICAgICAgc2V0LT5pbnZhbGlkYXRlKFZhcmlhYmxlV3JpdGVGaXJlRGV0YWlsKHRoaXMs
IHByb3BlcnR5TmFtZSkpOyAvLyBEb24ndCBtZXNzIGFyb3VuZCAtIGlmIHdlIGhhZCBmb3VuZCB0
aGlzIHN0YXRpY2FsbHksIHdlIHdvdWxkIGhhdmUgaW52YWxpZGF0ZWQgaXQuCisgICAgICAgIHJl
ZyA9ICZ2YXJpYWJsZUF0KG9mZnNldCk7CiAgICAgfQogICAgIHJlZy0+c2V0KHZtLCB0aGlzLCB2
YWx1ZSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC0xMTYsNyArMTExLDcgQEAgdm9pZCBKU0xleGlj
YWxFbnZpcm9ubWVudDo6Z2V0T3duTm9uSW5kZQogICAgICAgICBmb3IgKFN5bWJvbFRhYmxlOjpN
YXA6Oml0ZXJhdG9yIGl0ID0gdGhpc09iamVjdC0+c3ltYm9sVGFibGUoKS0+YmVnaW4obG9ja2Vy
KTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgICAgICBpZiAoaXQtPnZhbHVlLmdldEF0dHJp
YnV0ZXMoKSAmIERvbnRFbnVtICYmICFzaG91bGRJbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKG1v
ZGUpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgaWYgKCF0aGlzT2Jq
ZWN0LT5pc1ZhbGlkKGl0LT52YWx1ZSkpCisgICAgICAgICAgICBpZiAoIXRoaXNPYmplY3QtPmlz
VmFsaWQoaXQtPnZhbHVlLnNjb3BlT2Zmc2V0KCkpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcihleGVjLCBpdC0+a2V5
LmdldCgpKSk7CiAgICAgICAgIH0KQEAgLTEzNywxMSArMTMyLDEzIEBAIGlubGluZSBib29sIEpT
TGV4aWNhbEVudmlyb25tZW50OjpzeW1ib2wKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAgICAgU3ltYm9sVGFibGVFbnRyeSYgZW50cnkgPSBpdGVyLT52YWx1ZTsKICAgICAgICAgQVNT
RVJUKCFlbnRyeS5pc051bGwoKSk7Ci0gICAgICAgIGlmICghaXNWYWxpZChlbnRyeSkpCisgICAg
ICAgIAorICAgICAgICBTY29wZU9mZnNldCBvZmZzZXQgPSBlbnRyeS5zY29wZU9mZnNldCgpOwor
ICAgICAgICBpZiAoIWlzVmFsaWQob2Zmc2V0KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAgICAgCiAgICAgICAgIGVudHJ5LnNldEF0dHJpYnV0ZXMoYXR0cmlidXRlcyk7Ci0gICAg
ICAgIHJlZyA9ICZyZWdpc3RlckF0KGVudHJ5LmdldEluZGV4KCkpOworICAgICAgICByZWcgPSAm
dmFyaWFibGVBdChvZmZzZXQpOwogICAgIH0KICAgICByZWctPnNldCh2bSwgdGhpcywgdmFsdWUp
OwogICAgIHJldHVybiB0cnVlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNMZXhpY2FsRW52aXJvbm1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0xleGljYWxFbnZpcm9ubWVudC5oCShyZXZpc2lvbiAxODA4NzUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xleGljYWxFbnZpcm9ubWVudC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAw
OSwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMDgsIDIwMDksIDIwMTMtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQxLDMzICs0MSwyNyBAQCBj
bGFzcyBSZWdpc3RlcjsKICAgICAKIGNsYXNzIEpTTGV4aWNhbEVudmlyb25tZW50IDogcHVibGlj
IEpTRW52aXJvbm1lbnRSZWNvcmQgewogcHJpdmF0ZToKLSAgICBKU0xleGljYWxFbnZpcm9ubWVu
dChWTSYsIENhbGxGcmFtZSosIFJlZ2lzdGVyKiwgSlNTY29wZSosIENvZGVCbG9jayopOworICAg
IEpTTGV4aWNhbEVudmlyb25tZW50KFZNJiwgU3RydWN0dXJlKiwgSlNTY29wZSosIFN5bWJvbFRh
YmxlKik7CiAgICAgCiBwdWJsaWM6CiAgICAgdHlwZWRlZiBKU0Vudmlyb25tZW50UmVjb3JkIEJh
c2U7CiAKLSAgICBzdGF0aWMgSlNMZXhpY2FsRW52aXJvbm1lbnQqIGNyZWF0ZShWTSYgdm0sIENh
bGxGcmFtZSogY2FsbEZyYW1lLCBSZWdpc3RlciogcmVnaXN0ZXJzLCBKU1Njb3BlKiBjdXJyZW50
U2NvcGUsIENvZGVCbG9jayogY29kZUJsb2NrKQorICAgIHN0YXRpYyBKU0xleGljYWxFbnZpcm9u
bWVudCogY3JlYXRlKAorICAgICAgICBWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTU2NvcGUqIGN1cnJlbnRTY29wZSwgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlKQogICAg
IHsKLSAgICAgICAgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlID0gY29kZUJsb2NrLT5zeW1ib2xU
YWJsZSgpOwotICAgICAgICBBU1NFUlQoY29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9u
Q29kZSk7Ci0gICAgICAgIEpTTGV4aWNhbEVudmlyb25tZW50KiBsZXhpY2FsRW52aXJvbm1lbnQg
PSBuZXcgKAotICAgICAgICAgICAgTm90TnVsbCwKLSAgICAgICAgICAgIGFsbG9jYXRlQ2VsbDxK
U0xleGljYWxFbnZpcm9ubWVudD4oCi0gICAgICAgICAgICAgICAgdm0uaGVhcCwKLSAgICAgICAg
ICAgICAgICBhbGxvY2F0aW9uU2l6ZShzeW1ib2xUYWJsZSkKLSAgICAgICAgICAgICkKLSAgICAg
ICAgKSBKU0xleGljYWxFbnZpcm9ubWVudCh2bSwgY2FsbEZyYW1lLCByZWdpc3RlcnMsIGN1cnJl
bnRTY29wZSwgY29kZUJsb2NrKTsKLSAgICAgICAgbGV4aWNhbEVudmlyb25tZW50LT5maW5pc2hD
cmVhdGlvbih2bSk7Ci0gICAgICAgIHJldHVybiBsZXhpY2FsRW52aXJvbm1lbnQ7CisgICAgICAg
IEpTTGV4aWNhbEVudmlyb25tZW50KiByZXN1bHQgPQorICAgICAgICAgICAgbmV3IChOb3ROdWxs
LCBhbGxvY2F0aW9uU2l6ZShzeW1ib2xUYWJsZSkpCisgICAgICAgICAgICBKU0xleGljYWxFbnZp
cm9ubWVudCh2bSwgZ2xvYmFsT2JqZWN0LT5hY3RpdmF0aW9uU3RydWN0dXJlKCksIGN1cnJlbnRT
Y29wZSwgc3ltYm9sVGFibGUpOworICAgICAgICByZXN1bHQtPmZpbmlzaENyZWF0aW9uKHZtKTsK
ICAgICB9Ci0gICAgICAgIAorICAgIAogICAgIHN0YXRpYyBKU0xleGljYWxFbnZpcm9ubWVudCog
Y3JlYXRlKFZNJiB2bSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTU2NvcGUqIGN1cnJlbnRTY29w
ZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2spCiAgICAgewotICAgICAgICByZXR1cm4gY3JlYXRlKHZt
LCBjYWxsRnJhbWUsIGNhbGxGcmFtZS0+cmVnaXN0ZXJzKCkgKyBjb2RlQmxvY2stPmZyYW1lUG9p
bnRlck9mZnNldFRvR2V0QWN0aXZhdGlvblJlZ2lzdGVycygpLCBjdXJyZW50U2NvcGUsIGNvZGVC
bG9jayk7CisgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBjYWxsRnJhbWUt
PmxleGljYWxHbG9iYWxPYmplY3QoKTsKKyAgICAgICAgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxl
ID0gY29kZUJsb2NrLT5zeW1ib2xUYWJsZSgpOworICAgICAgICByZXR1cm4gY3JlYXRlKHZtLCBn
bG9iYWxPYmplY3QsIGN1cnJlbnRTY29wZSwgc3ltYm9sdGFibGUpOwogICAgIH0KLQotICAgIHN0
YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKLQorICAgICAg
ICAKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqLCBFeGVjU3Rh
dGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyB2b2lkIGdldE93
bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFt
ZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKIApAQCAtODEsMTIgKzc1LDYgQEAgcHVibGljOgog
CiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCkgeyByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2Jh
bE9iamVjdCwganNOdWxsKCksIFR5cGVJbmZvKEFjdGl2YXRpb25PYmplY3RUeXBlLCBTdHJ1Y3R1
cmVGbGFncyksIGluZm8oKSk7IH0KIAotICAgIFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4mIHJl
Z2lzdGVyQXQoaW50KSBjb25zdDsKLSAgICBib29sIGlzVmFsaWRJbmRleChpbnQpIGNvbnN0Owot
ICAgIGJvb2wgaXNWYWxpZChjb25zdCBTeW1ib2xUYWJsZUVudHJ5JikgY29uc3Q7Ci0gICAgaW50
IHJlZ2lzdGVyc09mZnNldCgpOwotICAgIHN0YXRpYyBpbnQgcmVnaXN0ZXJzT2Zmc2V0KFN5bWJv
bFRhYmxlKik7Ci0KIHByb3RlY3RlZDoKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0
dXJlRmxhZ3MgPSBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNHZXRQcm9w
ZXJ0eU5hbWVzIHwgQmFzZTo6U3RydWN0dXJlRmxhZ3M7CiAKQEAgLTk2LDMyICs4NCwxMyBAQCBw
cml2YXRlOgogICAgIGJvb2wgc3ltYm9sVGFibGVHZXQoUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNs
b3QmLCBib29sJiBzbG90SXNXcml0ZWFibGUpOwogICAgIGJvb2wgc3ltYm9sVGFibGVQdXQoRXhl
Y1N0YXRlKiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKICAgICBi
b29sIHN5bWJvbFRhYmxlUHV0V2l0aEF0dHJpYnV0ZXMoVk0mLCBQcm9wZXJ0eU5hbWUsIEpTVmFs
dWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpOwotCi0gICAgc3RhdGljIHNpemVfdCBhbGxvY2F0aW9u
U2l6ZShTeW1ib2xUYWJsZSopOwotICAgIHN0YXRpYyBzaXplX3Qgc3RvcmFnZU9mZnNldCgpOwot
Ci0gICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiBzdG9yYWdlKCk7IC8vIGNhcHR1cmVDb3VudCgp
IG51bWJlciBvZiByZWdpc3RlcnMuCiB9OwogCi1pbmxpbmUgSlNMZXhpY2FsRW52aXJvbm1lbnQ6
OkpTTGV4aWNhbEVudmlyb25tZW50KFZNJiB2bSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIFJlZ2lz
dGVyKiByZWdpc3RlcnMsIEpTU2NvcGUqIGN1cnJlbnRTY29wZSwgQ29kZUJsb2NrKiBjb2RlQmxv
Y2spCi0gICAgOiBCYXNlKAotICAgICAgICB2bSwKLSAgICAgICAgY2FsbEZyYW1lLT5sZXhpY2Fs
R2xvYmFsT2JqZWN0KCktPmFjdGl2YXRpb25TdHJ1Y3R1cmUoKSwKLSAgICAgICAgcmVnaXN0ZXJz
LAotICAgICAgICBjdXJyZW50U2NvcGUsCi0gICAgICAgIGNvZGVCbG9jay0+c3ltYm9sVGFibGUo
KSkKK2lubGluZSBKU0xleGljYWxFbnZpcm9ubWVudDo6SlNMZXhpY2FsRW52aXJvbm1lbnQoVk0m
IHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNTY29wZSogY3VycmVudFNjb3BlLCBTeW1ib2xU
YWJsZSogc3ltYm9sVGFibGUpCisgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUsIGN1cnJlbnRTY29w
ZSwgc3ltYm9sVGFibGUpCiB7Ci0gICAgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlID0gY29kZUJs
b2NrLT5zeW1ib2xUYWJsZSgpOwotICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogc3RvcmFnZSA9
IHRoaXMtPnN0b3JhZ2UoKTsKLSAgICBzaXplX3QgY2FwdHVyZUNvdW50ID0gc3ltYm9sVGFibGUt
PmNhcHR1cmVDb3VudCgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2FwdHVyZUNvdW50
OyArK2kpCi0gICAgICAgIG5ldyAoTm90TnVsbCwgJnN0b3JhZ2VbaV0pIFdyaXRlQmFycmllcjxV
bmtub3duPihVbmRlZmluZWRXcml0ZUJhcnJpZXJUYWcpOwotICAgIG1fcmVnaXN0ZXJzID0gcmVp
bnRlcnByZXRfY2FzdF9wdHI8V3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPio+KAotICAgICAgICBy
ZWludGVycHJldF9jYXN0PGNoYXIqPih0aGlzKSArIHJlZ2lzdGVyc09mZnNldChzeW1ib2xUYWJs
ZSkpOwogfQogCi1KU0xleGljYWxFbnZpcm9ubWVudCogYXNBY3RpdmF0aW9uKEpTVmFsdWUpOwot
CiBpbmxpbmUgSlNMZXhpY2FsRW52aXJvbm1lbnQqIGFzQWN0aXZhdGlvbihKU1ZhbHVlIHZhbHVl
KQogewogICAgIEFTU0VSVChhc09iamVjdCh2YWx1ZSktPmluaGVyaXRzKEpTTGV4aWNhbEVudmly
b25tZW50OjppbmZvKCkpKTsKQEAgLTEzMyw0OSArMTAyLDYgQEAgQUxXQVlTX0lOTElORSBKU0xl
eGljYWxFbnZpcm9ubWVudCogUmVnaQogICAgIHJldHVybiBhc0FjdGl2YXRpb24oanNWYWx1ZSgp
KTsKIH0KIAotaW5saW5lIGludCBKU0xleGljYWxFbnZpcm9ubWVudDo6cmVnaXN0ZXJzT2Zmc2V0
KFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSkKLXsKLSAgICByZXR1cm4gc3RvcmFnZU9mZnNldCgp
ICsgKChzeW1ib2xUYWJsZS0+Y2FwdHVyZUNvdW50KCkgLSBzeW1ib2xUYWJsZS0+Y2FwdHVyZVN0
YXJ0KCkgIC0gMSkgKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSk7Ci19Ci0KLWlubGlu
ZSBzaXplX3QgSlNMZXhpY2FsRW52aXJvbm1lbnQ6OnN0b3JhZ2VPZmZzZXQoKQotewotICAgIHJl
dHVybiBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Y8c2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3du
Pik+KHNpemVvZihKU0xleGljYWxFbnZpcm9ubWVudCkpOwotfQotCi1pbmxpbmUgV3JpdGVCYXJy
aWVyPFVua25vd24+KiBKU0xleGljYWxFbnZpcm9ubWVudDo6c3RvcmFnZSgpCi17Ci0gICAgcmV0
dXJuIHJlaW50ZXJwcmV0X2Nhc3RfcHRyPFdyaXRlQmFycmllcjxVbmtub3duPio+KAotICAgICAg
ICByZWludGVycHJldF9jYXN0PGNoYXIqPih0aGlzKSArIHN0b3JhZ2VPZmZzZXQoKSk7Ci19Ci0K
LWlubGluZSBzaXplX3QgSlNMZXhpY2FsRW52aXJvbm1lbnQ6OmFsbG9jYXRpb25TaXplKFN5bWJv
bFRhYmxlKiBzeW1ib2xUYWJsZSkKLXsKLSAgICBzaXplX3Qgb2JqZWN0U2l6ZUluQnl0ZXMgPSBX
VEY6OnJvdW5kVXBUb011bHRpcGxlT2Y8c2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPik+KHNp
emVvZihKU0xleGljYWxFbnZpcm9ubWVudCkpOwotICAgIHNpemVfdCBzdG9yYWdlU2l6ZUluQnl0
ZXMgPSBzeW1ib2xUYWJsZS0+Y2FwdHVyZUNvdW50KCkgKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVu
a25vd24+KTsKLSAgICByZXR1cm4gb2JqZWN0U2l6ZUluQnl0ZXMgKyBzdG9yYWdlU2l6ZUluQnl0
ZXM7Ci19Ci0KLWlubGluZSBib29sIEpTTGV4aWNhbEVudmlyb25tZW50Ojppc1ZhbGlkSW5kZXgo
aW50IGluZGV4KSBjb25zdAotewotICAgIGlmIChpbmRleCA+IHN5bWJvbFRhYmxlKCktPmNhcHR1
cmVTdGFydCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGluZGV4IDw9IHN5bWJv
bFRhYmxlKCktPmNhcHR1cmVFbmQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVy
biB0cnVlOwotfQotCi1pbmxpbmUgYm9vbCBKU0xleGljYWxFbnZpcm9ubWVudDo6aXNWYWxpZChj
b25zdCBTeW1ib2xUYWJsZUVudHJ5JiBlbnRyeSkgY29uc3QKLXsKLSAgICByZXR1cm4gaXNWYWxp
ZEluZGV4KGVudHJ5LmdldEluZGV4KCkpOwotfQotCi1pbmxpbmUgV3JpdGVCYXJyaWVyQmFzZTxV
bmtub3duPiYgSlNMZXhpY2FsRW52aXJvbm1lbnQ6OnJlZ2lzdGVyQXQoaW50IGluZGV4KSBjb25z
dAotewotICAgIEFTU0VSVChpc1ZhbGlkSW5kZXgoaW5kZXgpKTsKLSAgICByZXR1cm4gQmFzZTo6
cmVnaXN0ZXJBdChpbmRleCk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8g
SlNMZXhpY2FsRW52aXJvbm1lbnRfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNOYW1lU2NvcGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTTmFtZVNjb3BlLmNwcAkocmV2aXNpb24gMTgwODc1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNOYW1lU2NvcGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Nywx
NCArNDcsNiBAQCBKU05hbWVTY29wZSogSlNOYW1lU2NvcGU6OmNyZWF0ZShWTSYgdm0sCiAgICAg
cmV0dXJuIG51bGxwdHI7CiB9CiAKLXZvaWQgSlNOYW1lU2NvcGU6OnZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKLXsKLSAgICBKU05hbWVTY29wZSogdGhp
c09iamVjdCA9IGpzQ2FzdDxKU05hbWVTY29wZSo+KGNlbGwpOwotICAgIEFTU0VSVF9HQ19PQkpF
Q1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKLSAgICBCYXNlOjp2aXNpdENoaWxkcmVu
KHRoaXNPYmplY3QsIHZpc2l0b3IpOwotICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5t
X3JlZ2lzdGVyU3RvcmUpOwotfQotCiBKU1ZhbHVlIEpTTmFtZVNjb3BlOjp0b1RoaXMoSlNDZWxs
KiwgRXhlY1N0YXRlKiBleGVjLCBFQ01BTW9kZSBlY21hTW9kZSkKIHsKICAgICBpZiAoZWNtYU1v
ZGUgPT0gU3RyaWN0TW9kZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
TmFtZVNjb3BlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNOYW1lU2NvcGUuaAkocmV2aXNpb24gMTgwODc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNOYW1lU2NvcGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsMzggKzQ0LDM3IEBA
IHB1YmxpYzoKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogICAgIHN0YXRpYyBUKiBjcmVhdGUo
Vk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1Njb3BlKiBjdXJyZW50U2Nv
cGUsIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSwgSlNWYWx1ZSB2YWx1ZSkKICAgICB7Ci0gICAg
ICAgIFQqIHNjb3BlT2JqZWN0ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8VD4odm0uaGVh
cCkpIFQodm0sIGdsb2JhbE9iamVjdCwgY3VycmVudFNjb3BlLCBzeW1ib2xUYWJsZSk7CisgICAg
ICAgIFQqIHNjb3BlT2JqZWN0ID0gbmV3ICgKKyAgICAgICAgICAgIE5vdE51bGwsIGFsbG9jYXRl
Q2VsbDxUPih2bS5oZWFwLCBhbGxvY2F0aW9uU2l6ZUZvclNjb3BlU2l6ZSgxKSkKKyAgICAgICAg
ICAgIFQodm0sIGdsb2JhbE9iamVjdCwgY3VycmVudFNjb3BlLCBzeW1ib2xUYWJsZSk7CiAgICAg
ICAgIHNjb3BlT2JqZWN0LT5maW5pc2hDcmVhdGlvbih2bSwgdmFsdWUpOwogICAgICAgICByZXR1
cm4gc2NvcGVPYmplY3Q7CiAgICAgfQogICAgIAogICAgIHN0YXRpYyBKU05hbWVTY29wZSogY3Jl
YXRlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1Njb3BlKiBjdXJyZW50U2NvcGUsIFN5bWJvbFRh
YmxlKiwgSlNWYWx1ZSwgVHlwZSk7CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpT
Q2VsbCosIFNsb3RWaXNpdG9yJik7CiAgICAgc3RhdGljIEpTVmFsdWUgdG9UaGlzKEpTQ2VsbCos
IEV4ZWNTdGF0ZSosIEVDTUFNb2RlKTsKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNs
b3QoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwog
ICAgIHN0YXRpYyB2b2lkIHB1dChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpT
VmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOwogCiAgICAgREVDTEFSRV9JTkZPOwogCi0gICAgSlNW
YWx1ZSB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVnaXN0ZXJTdG9yZS5nZXQoKTsgfQorICAg
IEpTVmFsdWUgdmFsdWUoKSBjb25zdCB7IHJldHVybiB2YXJpYWJsZUF0KDApLmdldCgpOyB9CiAK
IHByb3RlY3RlZDoKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiB2bSwgSlNWYWx1ZSB2YWx1
ZSkKICAgICB7Ci0gICAgICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKLSAgICAgICAgbV9y
ZWdpc3RlclN0b3JlLnNldCh2bSwgdGhpcywgdmFsdWUpOworICAgICAgICBCYXNlOjpmaW5pc2hD
cmVhdGlvblVuaW5pdGlhbGl6ZWQodm0pOworICAgICAgICB2YXJpYWJsZUF0KDApLnNldCh2bSwg
dGhpcywgdmFsdWUpOwogICAgIH0KIAogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1
cmVGbGFncyA9IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEJhc2U6OlN0cnVjdHVyZUZs
YWdzOwogCiAgICAgSlNOYW1lU2NvcGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNT
Y29wZSogbmV4dCwgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlKQotICAgICAgICA6IEJhc2Uodm0s
IHN0cnVjdHVyZSwgcmVpbnRlcnByZXRfY2FzdDxSZWdpc3Rlcio+KCZtX3JlZ2lzdGVyU3RvcmUg
KyAxKSwgbmV4dCwgc3ltYm9sVGFibGUpCisgICAgICAgIDogQmFzZSh2bSwgc3RydWN0dXJlLCBu
ZXh0LCBzeW1ib2xUYWJsZSkKICAgICB7CisgICAgICAgIEFTU0VSVChzeW1ib2xUYWJsZS0+c2Nv
cGVTaXplKCkgPT0gMSk7CiAgICAgfQotCi1wcml2YXRlOgotICAgIFdyaXRlQmFycmllcjxVbmtu
b3duPiBtX3JlZ2lzdGVyU3RvcmU7CiB9OwogCiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmNw
cAkocmV2aXNpb24gMTgwODc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNT
ZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMywgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMz
LDMyICszMywzMCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotaW50IEpTU2VnbWVudGVkVmFyaWFi
bGVPYmplY3Q6OmZpbmRSZWdpc3RlckluZGV4KHZvaWQqIHJlZ2lzdGVyQWRkcmVzcykKK1Njb3Bl
T2Zmc2V0IEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3Q6OmZpbmRSZWdpc3RlckluZGV4KHZvaWQq
IHJlZ2lzdGVyQWRkcmVzcykKIHsKICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xv
Y2spOwogICAgIAotICAgIGZvciAoaW50IGkgPSBtX3JlZ2lzdGVycy5zaXplKCk7IGktLTspIHsK
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX3JlZ2lzdGVycy5zaXplKCk7IGktLTspIHsKICAgICAg
ICAgaWYgKCZtX3JlZ2lzdGVyc1tpXSAhPSByZWdpc3RlckFkZHJlc3MpCiAgICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgcmV0dXJuIGk7CisgICAgICAgIHJldHVybiBTY29wZU9mZnNldChp
KTsKICAgICB9CiAgICAgQ1JBU0goKTsKLSAgICByZXR1cm4gLTE7CisgICAgcmV0dXJuIFNjb3Bl
T2Zmc2V0KCk7CiB9CiAKLWludCBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0OjphZGRSZWdpc3Rl
cnMoaW50IG51bWJlck9mUmVnaXN0ZXJzVG9BZGQpCitTY29wZU9mZnNldCBKU1NlZ21lbnRlZFZh
cmlhYmxlT2JqZWN0OjphZGRSZWdpc3RlcnModW5zaWduZWQgbnVtYmVyT2ZSZWdpc3RlcnNUb0Fk
ZCkKIHsKICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2spOwogICAgIAotICAg
IEFTU0VSVChudW1iZXJPZlJlZ2lzdGVyc1RvQWRkID49IDApOwotICAgIAogICAgIHNpemVfdCBv
bGRTaXplID0gbV9yZWdpc3RlcnMuc2l6ZSgpOwogICAgIG1fcmVnaXN0ZXJzLmdyb3cob2xkU2l6
ZSArIG51bWJlck9mUmVnaXN0ZXJzVG9BZGQpOwogICAgIAogICAgIGZvciAoc2l6ZV90IGkgPSBu
dW1iZXJPZlJlZ2lzdGVyc1RvQWRkOyBpLS07KQogICAgICAgICBtX3JlZ2lzdGVyc1tvbGRTaXpl
ICsgaV0uc2V0V2l0aG91dFdyaXRlQmFycmllcihqc1VuZGVmaW5lZCgpKTsKICAgICAKLSAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8aW50PihvbGRTaXplKTsKKyAgICByZXR1cm4gU2NvcGVPZmZzZXQo
b2xkU2l6ZSk7CiB9CiAKIHZvaWQgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdDo6dmlzaXRDaGls
ZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlh
YmxlT2JqZWN0LmgJKHJldmlzaW9uIDE4MDg3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNTcs
MjQgKzU3LDIzIEBAIGNsYXNzIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3QgOiBwdWJsaWMKIHB1
YmxpYzoKICAgICB0eXBlZGVmIEpTU3ltYm9sVGFibGVPYmplY3QgQmFzZTsKIAotICAgIFdyaXRl
QmFycmllcjxVbmtub3duPiYgcmVnaXN0ZXJBdChpbnQgaW5kZXgpIHsgcmV0dXJuIG1fcmVnaXN0
ZXJzW2luZGV4XTsgfQorICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgdmFyaWFibGVBdChTY29w
ZU9mZnNldCBvZmZzZXQpIHsgcmV0dXJuIG1fdmFyaWFibGVzW29mZnNldC5vZmZzZXQoKV07IH0K
ICAgICAKICAgICAvLyBUaGlzIGlzIGEgc2xvdyBtZXRob2QgY2FsbCwgd2hpY2ggc2VhcmNoZXMg
dGhlIHJlZ2lzdGVyIGJhbmsgdG8gZmluZCB0aGUgaW5kZXgKICAgICAvLyBnaXZlbiBhIHBvaW50
ZXIuIEl0IHdpbGwgQ1JBU0goKSBpZiBpdCBkb2VzIG5vdCBmaW5kIHRoZSByZWdpc3Rlci4gT25s
eSB1c2UgdGhpcwogICAgIC8vIGluIGRlYnVnIGNvZGUgKGxpa2UgYnl0ZWNvZGUgZHVtcGluZyku
Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgaW50IGZpbmRSZWdpc3RlckluZGV4KHZvaWQqKTsKKyAg
ICBKU19FWFBPUlRfUFJJVkFURSBTY29wZU9mZnNldCBmaW5kUmVnaXN0ZXJJbmRleCh2b2lkKik7
CiAgICAgCi0gICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiBhc3NlcnRSZWdpc3RlcklzSW5UaGlz
T2JqZWN0KFdyaXRlQmFycmllcjxVbmtub3duPiogcmVnaXN0ZXJQb2ludGVyKQorICAgIFdyaXRl
QmFycmllcjxVbmtub3duPiogYXNzZXJ0VmFyaWFibGVJc0luVGhpc09iamVjdChXcml0ZUJhcnJp
ZXI8VW5rbm93bj4qIHZhcmlhYmxlUG9pbnRlcikKICAgICB7Ci0jaWYgIUFTU0VSVF9ESVNBQkxF
RAotICAgICAgICBmaW5kUmVnaXN0ZXJJbmRleChyZWdpc3RlclBvaW50ZXIpOwotI2VuZGlmCisg
ICAgICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKQorICAgICAgICAgICAgZmluZFJlZ2lzdGVySW5k
ZXgocmVnaXN0ZXJQb2ludGVyKTsKICAgICAgICAgcmV0dXJuIHJlZ2lzdGVyUG9pbnRlcjsKICAg
ICB9CiAgICAgCiAgICAgLy8gQWRkcyBudW1iZXJPZlJlZ2lzdGVyc1RvQWRkIHJlZ2lzdGVycywg
aW5pdGlhbGl6ZXMgdGhlbSB0byBVbmRlZmluZWQsIGFuZCByZXR1cm5zCiAgICAgLy8gdGhlIGlu
ZGV4IG9mIHRoZSBmaXJzdCBvbmUgYWRkZWQuCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgaW50IGFk
ZFJlZ2lzdGVycyhpbnQgbnVtYmVyT2ZSZWdpc3RlcnNUb0FkZCk7CisgICAgSlNfRVhQT1JUX1BS
SVZBVEUgU2NvcGVPZmZzZXQgYWRkUmVnaXN0ZXJzKHVuc2lnbmVkIG51bWJlck9mUmVnaXN0ZXJz
VG9BZGQpOwogICAgIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuaAkocmV2aXNpb24gMTgw
ODc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVj
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC03OCw3ICs3OCw3IEBAIGlubGluZSBib29sIHN5bWJvbFRh
YmxlR2V0KAogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgU3ltYm9sVGFibGVFbnRyeTo6RmFz
dCBlbnRyeSA9IGl0ZXItPnZhbHVlOwogICAgIEFTU0VSVCghZW50cnkuaXNOdWxsKCkpOwotICAg
IHNsb3Quc2V0VmFsdWUob2JqZWN0LCBlbnRyeS5nZXRBdHRyaWJ1dGVzKCkgfCBEb250RGVsZXRl
LCBvYmplY3QtPnJlZ2lzdGVyQXQoZW50cnkuZ2V0SW5kZXgoKSkuZ2V0KCkpOworICAgIHNsb3Qu
c2V0VmFsdWUob2JqZWN0LCBlbnRyeS5nZXRBdHRyaWJ1dGVzKCkgfCBEb250RGVsZXRlLCBvYmpl
Y3QtPnZhcmlhYmxlQXQoZW50cnkuc2NvcGVPZmZzZXQoKSkuZ2V0KCkpOwogICAgIHJldHVybiB0
cnVlOwogfQogCkBAIC05NCw3ICs5NCw3IEBAIGlubGluZSBib29sIHN5bWJvbFRhYmxlR2V0KAog
ICAgIFN5bWJvbFRhYmxlRW50cnk6OkZhc3QgZW50cnkgPSBpdGVyLT52YWx1ZTsKICAgICBBU1NF
UlQoIWVudHJ5LmlzTnVsbCgpKTsKICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3IoCi0gICAg
ICAgIG9iamVjdC0+cmVnaXN0ZXJBdChlbnRyeS5nZXRJbmRleCgpKS5nZXQoKSwgZW50cnkuZ2V0
QXR0cmlidXRlcygpIHwgRG9udERlbGV0ZSk7CisgICAgICAgIG9iamVjdC0+dmFyaWFibGVBdChl
bnRyeS5zY29wZU9mZnNldCgpKS5nZXQoKSwgZW50cnkuZ2V0QXR0cmlidXRlcygpIHwgRG9udERl
bGV0ZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTExMCw3ICsxMTAsNyBAQCBpbmxpbmUg
Ym9vbCBzeW1ib2xUYWJsZUdldCgKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIFN5bWJvbFRh
YmxlRW50cnk6OkZhc3QgZW50cnkgPSBpdGVyLT52YWx1ZTsKICAgICBBU1NFUlQoIWVudHJ5Lmlz
TnVsbCgpKTsKLSAgICBzbG90LnNldFZhbHVlKG9iamVjdCwgZW50cnkuZ2V0QXR0cmlidXRlcygp
IHwgRG9udERlbGV0ZSwgb2JqZWN0LT5yZWdpc3RlckF0KGVudHJ5LmdldEluZGV4KCkpLmdldCgp
KTsKKyAgICBzbG90LnNldFZhbHVlKG9iamVjdCwgZW50cnkuZ2V0QXR0cmlidXRlcygpIHwgRG9u
dERlbGV0ZSwgb2JqZWN0LT52YXJpYWJsZUF0KGVudHJ5LnNjb3BlT2Zmc2V0KCkpLmdldCgpKTsK
ICAgICBzbG90SXNXcml0ZWFibGUgPSAhZW50cnkuaXNSZWFkT25seSgpOwogICAgIHJldHVybiB0
cnVlOwogfQpAQCAtMTQ1LDcgKzE0NSw3IEBAIGlubGluZSBib29sIHN5bWJvbFRhYmxlUHV0KAog
ICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEz
NDYwMQogICAgICAgICAgICAgc2V0LT5ub3RpZnlXcml0ZSh2bSwgdmFsdWUsIG9iamVjdCwgcHJv
cGVydHlOYW1lKTsKICAgICAgICAgfQotICAgICAgICByZWcgPSAmb2JqZWN0LT5yZWdpc3RlckF0
KGZhc3RFbnRyeS5nZXRJbmRleCgpKTsKKyAgICAgICAgcmVnID0gJm9iamVjdC0+dmFyaWFibGVB
dChmYXN0RW50cnkuc2NvcGVPZmZzZXQoKSk7CiAgICAgfQogICAgIC8vIEknZCBwcmVmZXIgd2Ug
bm90IGhvbGQgbG9jayB3aGlsZSBleGVjdXRpbmcgYmFycmllcnMsIHNpbmNlIEkgcHJlZmVyIHRv
IHJlc2VydmUKICAgICAvLyB0aGUgcmlnaHQgZm9yIGJhcnJpZXJzIHRvIGJlIGFibGUgdG8gdHJp
Z2dlciBHQy4gQW5kIEkgZG9uJ3Qgd2FudCB0byBob2xkIFZNCkBAIC0xNzMsNyArMTczLDcgQEAg
aW5saW5lIGJvb2wgc3ltYm9sVGFibGVQdXRXaXRoQXR0cmlidXRlcwogICAgICAgICBpZiAoVmFy
aWFibGVXYXRjaHBvaW50U2V0KiBzZXQgPSBlbnRyeS53YXRjaHBvaW50U2V0KCkpCiAgICAgICAg
ICAgICBzZXQtPm5vdGlmeVdyaXRlKHZtLCB2YWx1ZSwgb2JqZWN0LCBwcm9wZXJ0eU5hbWUpOwog
ICAgICAgICBlbnRyeS5zZXRBdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpOwotICAgICAgICByZWcgPSAm
b2JqZWN0LT5yZWdpc3RlckF0KGVudHJ5LmdldEluZGV4KCkpOworICAgICAgICByZWcgPSAmb2Jq
ZWN0LT52YXJpYWJsZUF0KGVudHJ5LnNjb3BlT2Zmc2V0KCkpOwogICAgIH0KICAgICByZWctPnNl
dCh2bSwgb2JqZWN0LCB2YWx1ZSk7CiAgICAgcmV0dXJuIHRydWU7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1R5cGUuaAkocmV2aXNpb24gMTgwODc1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU4LDcgKzU4
LDggQEAgZW51bSBKU1R5cGUgOiB1aW50OF90IHsKICAgICBQdXJlRm9yd2FyZGluZ1Byb3h5VHlw
ZSwKICAgICBJbXB1cmVQcm94eVR5cGUsCiAgICAgV2l0aFNjb3BlVHlwZSwKLSAgICBBcmd1bWVu
dHNUeXBlLAorICAgIERpcmVjdEFyZ3VtZW50c1R5cGUsCisgICAgU2NvcGVkQXJndW1lbnRzVHlw
ZSwKIAogICAgIEludDhBcnJheVR5cGUsCiAgICAgSW50MTZBcnJheVR5cGUsCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PdXRPZkJhbmRBcmd1bWVudHMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL091dE9mQmFuZEFyZ3VtZW50cy5j
cHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PdXRPZkJh
bmRBcmd1bWVudHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjEzIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJPdXRPZkJhbmRBcmd1bWVudHMuaCIKKworI2luY2x1ZGUgIkpTQXJndW1l
bnRzSXRlcmF0b3IuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0Mg
eworCitTVEFUSUNfQVNTRVJUX0lTX1RSSVZJQUxMWV9ERVNUUlVDVElCTEUoT3V0T2ZCYW5kQXJn
dW1lbnRzKTsKKworY29uc3QgQ2xhc3NJbmZvIE91dE9mQmFuZEFyZ3VtZW50czo6c19pbmZvID0g
eyAiQXJndW1lbnRzIiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShPdXRP
ZkJhbmRBcmd1bWVudHMpIH07CisKK091dE9mQmFuZEFyZ3VtZW50czo6T3V0T2ZCYW5kQXJndW1l
bnRzKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1
cmUsIG51bGxwdHIpCisgICAgLCBtX3NwZWNpYWxzTWF0ZXJpYWxpemVkKGZhbHNlKQoreworfQor
CitPdXRPZkJhbmRBcmd1bWVudHMqIE91dE9mQmFuZEFyZ3VtZW50czo6Y3JlYXRlRW1wdHkoCisg
ICAgVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0Z1bmN0aW9uKiBjYWxs
ZWUpCit7CisgICAgT3V0T2ZCYW5kQXJndW1lbnRzKiByZXN1bHQgPSBuZXcgKE5vdE51bGwsIGFs
bG9jYXRlQ2VsbDxPdXRPZkJhbmRBcmd1bWVudHM+KHZtLmhlYXApKQorICAgICAgICBPdXRPZkJh
bmRBcmd1bWVudHModm0sIGdsb2JhbE9iamVjdC0+b3V0T2ZCYW5kQXJndW1lbnRzU3RydWN0dXJl
KCkpOworICAgIHJlc3VsdC0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgIHJlc3VsdC0+bV9jYWxs
ZWUuc2V0KHZtLCB0aGlzLCBjYWxsZWUpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK091dE9m
QmFuZEFyZ3VtZW50cyogT3V0T2ZCYW5kQXJndW1lbnRzOjpjcmVhdGVFbXB0eShFeGVjU3RhdGUq
IGV4ZWMsIEpTRnVuY3Rpb24qIGNhbGxlZSkKK3sKKyAgICAvLyBOQi4gU29tZSBjbGllbnRzIG1p
Z2h0IGV4cGVjdCB0aGF0IHRoZSBnbG9iYWwgb2JqZWN0IG9mIG9mIHRoaXMgb2JqZWN0IGlzIHRo
ZSBnbG9iYWwgb2JqZWN0CisgICAgLy8gb2YgdGhlIGNhbGxlZS4gV2UgZG9uJ3QgZG8gdGhpcyBm
b3Igbm93LCBidXQgbWF5YmUgd2Ugc2hvdWxkLgorICAgIHJldHVybiBjcmVhdGVFbXB0eShleGVj
LT52bSgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGNhbGxlZSk7Cit9CisKK091dE9m
QmFuZEFyZ3VtZW50cyogT3V0T2ZCYW5kQXJndW1lbnRzOjpjcmVhdGVXaXRoSW5saW5lRnJhbWUo
RXhlY1N0YXRlKiBteUZyYW1lLCBFeGVjU3RhdGUqIHRhcmdldEZyYW1lLCBJbmxpbmVDYWxsRnJh
bWUqIGlubGluZUNhbGxGcmFtZSwgQXJndW1lbnRzTW9kZSBtb2RlKQoreworICAgIFZNJiB2bSA9
IG15RnJhbWUtPnZtKCk7CisgICAgCisgICAgSlNGdW5jdGlvbiogY2FsbGVlOworICAgIAorICAg
IGlmIChpbmxpbmVDYWxsRnJhbWUpCisgICAgICAgIGNhbGxlZSA9IGpzQ2FzdDxKU0Z1bmN0aW9u
Kj4oaW5saW5lQ2FsbEZyYW1lLT5jYWxsZWVSZWNvdmVyeS5yZWNvdmVyKHRhcmdldEZyYW1lKSk7
CisgICAgZWxzZQorICAgICAgICBjYWxsZWUgPSBqc0Nhc3Q8SlNGdW5jdGlvbio+KHRhcmdldEZy
YW1lLT5jYWxsZWUoKSk7CisKKyAgICAvLyBOQi4gSXQncyBzb21ld2hhdCBhcmJpdHJhcnkgdGhh
dCB3ZSB0aWUgdGhlIHN0cmljdG5lc3Mgb2YgdGhpcyBvYmplY3QgdG8gdGhlIHN0cmljdG5lc3Mg
b2YKKyAgICAvLyB0aGUgY2FsbGVlLgorICAgIGJvb2wgaXNTdHJpY3RNb2RlID0gZXhlY3V0YWJs
ZS0+aXNTdHJpY3RNb2RlKCk7CisKKyAgICBPdXRPZkJhbmRBcmd1bWVudHMqIHJlc3VsdCA9IGNy
ZWF0ZUVtcHR5KG15RnJhbWUsIGNhbGxlZSk7CisgICAgCisgICAgdW5zaWduZWQgbGVuZ3RoOwor
ICAgIHN3aXRjaCAobW9kZSkgeworICAgIGNhc2UgQ2xvbmVkQXJndW1lbnRzQ3JlYXRpb25Nb2Rl
OiB7CisgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUpIHsKKyAgICAgICAgICAgIGlmIChpbmxp
bmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRSZWdpc3Rlci5pc1ZhbGlkKCkpCisgICAgICAgICAg
ICAgICAgbGVuZ3RoID0gZXhlYy0+cihpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRSZWdp
c3RlcikudW5ib3hlZEludDMyKCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
bGVuZ3RoID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpOworICAgICAgICAgICAg
bGVuZ3RoLS07CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGxl
bmd0aDsgaS0tOykKKyAgICAgICAgICAgICAgICByZXN1bHQtPnB1dERpcmVjdEluZGV4KG15RnJh
bWUsIGksIGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzW2ldLnJlY292ZXIodGFyZ2V0RnJhbWUp
KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGxlbmd0aCA9IHRhcmdldEZyYW1lLT5h
cmd1bWVudENvdW50KCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IGxlbmd0aDsgaS0tOykKKyAgICAgICAgICAgICAgICByZXN1bHQtPnB1dERpcmVjdEluZGV4
KG15RnJhbWUsIGksIHRhcmdldEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudChpKSk7CisgICAgICAg
IH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAKKyAgICBjYXNlIEZha2VBcmd1bWVu
dFZhbHVlc0NyZWF0aW9uTW9kZTogeworICAgICAgICBsZW5ndGggPSAwOworICAgICAgICBicmVh
azsKKyAgICB9IH0KKyAgICAKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlO
YW1lcy0+bGVuZ3RoLCBqc051bWJlcihsZW5ndGgpKTsKKyAgICBpZiAoaXNTdHJpY3RNb2RlKSB7
CisgICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0QWNjZXNzb3IoZXhlYywgdm0ucHJvcGVydHlOYW1l
cy0+Y2FsbGVlLCB0aGlzT2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+dGhyb3dUeXBlRXJyb3JHZXR0
ZXJTZXR0ZXIoZXhlYy0+dm0oKSksIERvbnREZWxldGUgfCBEb250RW51bSB8IEFjY2Vzc29yKTsK
KyAgICAgICAgcmVzdWx0LT5wdXREaXJlY3RBY2Nlc3NvcihleGVjLCB2bS5wcm9wZXJ0eU5hbWVz
LT5jYWxsZWUsIHRoaXNPYmplY3QtPmdsb2JhbE9iamVjdCgpLT50aHJvd1R5cGVFcnJvckdldHRl
clNldHRlcihleGVjLT52bSgpKSwgRG9udERlbGV0ZSB8IERvbnRFbnVtIHwgQWNjZXNzb3IpOwor
ICAgIH0gZWxzZQorICAgICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1l
cy0+Y2FsbGVlLCBKU1ZhbHVlKGNhbGxlZSkpOworICAgIAorICAgIHJlc3VsdC0+SlNDX05BVElW
RV9GVU5DVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5pdGVyYXRvclByaXZhdGVOYW1lLCBhcmd1bWVu
dHNGdW5jSXRlcmF0b3IsIERvbnRFbnVtLCAwKTsKK30KKworT3V0T2ZCYW5kQXJndW1lbnRzKiBP
dXRPZkJhbmRBcmd1bWVudHM6OmNyZWF0ZVdpdGhNYWNoaW5lRnJhbWUoRXhlY1N0YXRlKiBteUZy
YW1lLCBFeGVjU3RhdGUqIHRhcmdldEZyYW1lLCBBcmd1bWVudHNNb2RlIG1vZGUpCit7CisgICAg
cmV0dXJuIGNyZWF0ZVdpdGhJbmxpbmVGcmFtZShteUZyYW1lLCB0YXJnZXRGcmFtZSwgbnVsbHB0
ciwgbW9kZSk7Cit9CisKK1N0cnVjdHVyZSogT3V0T2ZCYW5kQXJndW1lbnRzOjpjcmVhdGVTdHJ1
Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3Rv
dHlwZSkKK3sKKyAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwg
cHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7
Cit9CisKK2Jvb2wgT3V0T2ZCYW5kQXJndW1lbnRzOjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmpl
Y3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgaWRlbnQsIFByb3BlcnR5
U2xvdCYgc2xvdCkKK3sKKyAgICBPdXRPZkJhbmRBcmd1bWVudHMqIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8T3V0T2ZCYW5kQXJndW1lbnRzKj4ob2JqZWN0KTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgp
OworICAgIAorICAgIGlmIChpZGVudCA9PSB2bS5wcm9wZXJ0eU5hbWVzLT5jYWxsZXIKKyAgICAg
ICAgfHwgaWRlbnQgPT0gdm0ucHJvcGVydHlOYW1lcy0+Y2FsbGVlKQorICAgICAgICB0aGlzT2Jq
ZWN0LT5tYXRlcmlhbGl6ZVNwZWNpYWxzSWZOZWNlc3NhcnkoZXhlYyk7CisgICAgCisgICAgaWYg
KEJhc2U6OmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBleGVjLCBpZGVudCwgc2xvdCkp
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIAorICAgIGlmIChpZGVudCA9PSB2bS5wcm9wZXJ0
eU5hbWVzLT5pdGVyYXRvclByaXZhdGVOYW1lKSB7CisgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7CisgICAgICAgIHRoaXNP
YmplY3QtPkpTQ19OQVRJVkVfRlVOQ1RJT04odm0ucHJvcGVydHlOYW1lcy0+aXRlcmF0b3JQcml2
YXRlTmFtZSwgYXJndW1lbnRzRnVuY0l0ZXJhdG9yLCBEb250RW51bSwgMCk7CisgICAgICAgIGlm
IChKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIGV4ZWMsIGlkZW50LCBz
bG90KSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK3ZvaWQgT3V0T2ZCYW5kQXJndW1lbnRzOjpnZXRPd25Qcm9wZXJ0eU5hbWVz
KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIGFy
cmF5LCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3sKKyAgICBPdXRPZkJhbmRBcmd1bWVudHMqIHRo
aXNPYmplY3QgPSBqc0Nhc3Q8T3V0T2ZCYW5kQXJndW1lbnRzKj4ob2JqZWN0KTsKKyAgICB0aGlz
T2JqZWN0LT5tYXRlcmlhbGl6ZVNwZWNpYWxzSWZOZWNlc3NhcnkoZXhlYyk7CisgICAgQmFzZTo6
Z2V0T3duUHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBleGVjLCBhcnJheSwgbW9kZSk7Cit9CisK
K3ZvaWQgT3V0T2ZCYW5kQXJndW1lbnRzOjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4
ZWMsIFByb3BlcnR5TmFtZSBpZGVudCwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBz
bG90KQoreworICAgIE91dE9mQmFuZEFyZ3VtZW50cyogdGhpc09iamVjdCA9IGpzQ2FzdDxPdXRP
ZkJhbmRBcmd1bWVudHMqPihvYmplY3QpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAg
CisgICAgaWYgKGlkZW50ID09IHZtLnByb3BlcnR5TmFtZXMtPmNhbGxlZQorICAgICAgICB8fCBp
ZGVudCA9PSB2bS5wcm9wZXJ0eU5hbWVzLT5jYWxsZXIpCisgICAgICAgIHRoaXNPYmplY3QtPm1h
dGVyaWFsaXplU3BlY2lhbHNJZk5lY2Vzc2FyeShleGVjKTsKKyAgICAKKyAgICBCYXNlOjpwdXQo
dGhpc09iamVjdCwgZXhlYywgaWRlbnQsIHZhbHVlLCBzbG90KTsKK30KKwordm9pZCBPdXRPZkJh
bmRBcmd1bWVudHM6OmRlbGV0ZVByb3BlcnR5KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVj
LCBQcm9wZXJ0eU5hbWUgaWRlbnQpCit7CisgICAgT3V0T2ZCYW5kQXJndW1lbnRzKiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PE91dE9mQmFuZEFyZ3VtZW50cyo+KG9iamVjdCk7CisgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKKyAgICAKKyAgICBpZiAoaWRlbnQgPT0gdm0ucHJvcGVydHlOYW1lcy0+Y2Fs
bGVlCisgICAgICAgIHx8IGlkZW50ID09IHZtLnByb3BlcnR5TmFtZXMtPmNhbGxlcikKKyAgICAg
ICAgdGhpc09iamVjdC0+bWF0ZXJpYWxpemVTcGVjaWFsc0lmTmVjZXNzYXJ5KGV4ZWMpOworICAg
IAorICAgIEJhc2U6OmRlbGV0ZVByb3BlcnR5KHRoaXNPYmplY3QsIGV4ZWMsIGlkZW50KTsKK30K
Kwordm9pZCBPdXRPZkJhbmRBcmd1bWVudHM6OmRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiBv
YmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIGlkZW50LCBjb25zdCBQcm9wZXJ0
eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIGJvb2wgc2hvdWxkVGhyb3cpCit7CisgICAgT3V0T2ZC
YW5kQXJndW1lbnRzKiB0aGlzT2JqZWN0ID0ganNDYXN0PE91dE9mQmFuZEFyZ3VtZW50cyo+KG9i
amVjdCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICAKKyAgICBpZiAoaWRlbnQgPT0g
dm0ucHJvcGVydHlOYW1lcy0+Y2FsbGVlCisgICAgICAgIHx8IGlkZW50ID09IHZtLnByb3BlcnR5
TmFtZXMtPmNhbGxlcikKKyAgICAgICAgdGhpc09iamVjdC0+bWF0ZXJpYWxpemVTcGVjaWFsc0lm
TmVjZXNzYXJ5KGV4ZWMpOworICAgIAorICAgIHJldHVybiBCYXNlOjpkZWZpbmVPd25Qcm9wZXJ0
eShvYmplY3QsIGV4ZWMsIGlkZW50LCBkZXNjcmlwdG9yLCBzaG91bGRUaHJvdyk7Cit9CisKK3Zv
aWQgT3V0T2ZCYW5kQXJndW1lbnRzOjptYXRlcmlhbGl6ZVNwZWNpYWxzKEV4ZWNTdGF0ZSogZXhl
YykKK3sKKyAgICBSRUxFQVNFX0FTU0VSVCghc3BlY2lhbHNNYXRlcmlhbGl6ZWQoKSk7CisgICAg
Vk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICAKKyAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1
dGFibGUgPSBqc0Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4obV9jYWxsZWUtPmV4ZWN1dGFibGUo
KSk7CisgICAgYm9vbCBpc1N0cmljdE1vZGUgPSBleGVjdXRhYmxlLT5pc1N0cmljdE1vZGUoKTsK
KyAgICAKKyAgICBpZiAoaXNTdHJpY3RNb2RlKSB7CisgICAgICAgIHB1dERpcmVjdEFjY2Vzc29y
KGV4ZWMsIHZtLnByb3BlcnR5TmFtZXMtPmNhbGxlZSwgZ2xvYmFsT2JqZWN0KCktPnRocm93VHlw
ZUVycm9yR2V0dGVyU2V0dGVyKHZtKSwgRG9udERlbGV0ZSB8IERvbnRFbnVtIHwgQWNjZXNzb3Ip
OworICAgICAgICBwdXREaXJlY3RBY2Nlc3NvcihleGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT5jYWxs
ZWUsIGdsb2JhbE9iamVjdCgpLT50aHJvd1R5cGVFcnJvckdldHRlclNldHRlcih2bSksIERvbnRE
ZWxldGUgfCBEb250RW51bSB8IEFjY2Vzc29yKTsKKyAgICB9IGVsc2UKKyAgICAgICAgcHV0RGly
ZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5jYWxsZWUsIEpTVmFsdWUobV9jYWxsZWUuZ2V0KCkp
KTsKKyAgICAKKyAgICBtX2NhbGxlZS5jbGVhcigpOworfQorCit2b2lkIE91dE9mQmFuZEFyZ3Vt
ZW50czo6bWF0ZXJpYWxpemVTcGVjaWFsc0lmTmVjZXNzYXJ5KEV4ZWNTdGF0ZSogZXhlYykKK3sK
KyAgICBpZiAoIXNwZWNpYWxzTWF0ZXJpYWxpemVkKCkpCisgICAgICAgIG1hdGVyaWFsaXplU3Bl
Y2lhbHMoZXhlYyk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9PdXRPZkJhbmRBcmd1bWVudHMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PdXRPZkJhbmRBcmd1bWVudHMuaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL091dE9mQmFuZEFyZ3VtZW50
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBPdXRPZkJhbmRBcmd1bWVudHNfaAor
I2RlZmluZSBPdXRPZkJhbmRBcmd1bWVudHNfaAorCisjaW5jbHVkZSAiQXJndW1lbnRzTW9kZS5o
IgorI2luY2x1ZGUgIkpTT2JqZWN0LmgiCisKK25hbWVzcGFjZSBKU0MgeworCisvLyBUaGlzIGlz
IGFuIEFyZ3VtZW50cy1jbGFzcyBvYmplY3QgdGhhdCB3ZSBjcmVhdGUgd2hlbiB5b3UgZG8gZnVu
Y3Rpb24uYXJndW1lbnRzLCBvciB5b3Ugc2F5CisvLyAiYXJndW1lbnRzIiBpbnNpZGUgYSBmdW5j
dGlvbiBpbiBzdHJpY3QgbW9kZS4gSXQgYmVoYXZlcyBhbG1wc3QgZW50aXJlbHkgbGlrZSBhbiBv
cmRpbmFyeQorLy8gSmF2YVNjcmlwdCBvYmplY3QuIEFsbCBvZiB0aGUgYXJndW1lbnRzIHZhbHVl
cyBhcmUgc2ltcGx5IGNvcGllZCBmcm9tIHRoZSBzdGFjayAocG9zc2libHkgdmlhCisvLyBzb21l
IHNvcGhpc3RpY2F0ZWQgVmFsdWVSZWNvdmVyeSdzIGlmIGFuIG9wdGltaXppbmcgY29tcGlsZXIg
aXMgaW4gcGxheSkgYW5kIHRoZSBhcHByb3ByaWF0ZQorLy8gcHJvcGVydGllcyBvZiB0aGUgb2Jq
ZWN0IGFyZSBwb3B1bGF0ZWQuIFRoZSBvbmx5IHJlYXNvbiB3aHkgd2UgbmVlZCBhIHNwZWNpYWwg
Y2xhc3MgaXMgdG8gbWFrZQorLy8gdGhlIG9iamVjdCBjbGFpbSB0byBiZSAiQXJndW1lbnRzIiBm
cm9tIGEgdG9TdHJpbmcgc3RhbmRwb2ludCwgYW5kIHRvIGF2b2lkIG1hdGVyaWFsaXppbmcgdGhl
CisvLyBjYWxsZXIvY2FsbGVlIHByb3BlcnRpZXMgdW5sZXNzIHNvbWVvbmUgYXNrcyBmb3IgdGhl
bS4KK2NsYXNzIE91dE9mQmFuZEFyZ3VtZW50cyA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsK
K3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTTm9uRmluYWxPYmplY3QgQmFzZTsKKyAgICAKK3ByaXZh
dGU6CisgICAgT3V0T2ZCYW5kQXJndW1lbnRzKFZNJiwgU3RydWN0dXJlKik7CisKK3B1YmxpYzoK
KyAgICBzdGF0aWMgT3V0T2ZCYW5kQXJndW1lbnRzKiBjcmVhdGVFbXB0eShWTSYsIEpTR2xvYmFs
T2JqZWN0KiwgSlNGdW5jdGlvbiogY2FsbGVlKTsKKyAgICBzdGF0aWMgT3V0T2ZCYW5kQXJndW1l
bnRzKiBjcmVhdGVFbXB0eShFeGVjU3RhdGUqLCBKU0Z1bmN0aW9uKiBjYWxsZWUpOworICAgIHN0
YXRpYyBPdXRPZkJhbmRBcmd1bWVudHMqIGNyZWF0ZVdpdGhJbmxpbmVGcmFtZShFeGVjU3RhdGUq
IG15RnJhbWUsIEV4ZWNTdGF0ZSogdGFyZ2V0RnJhbWUsIElubGluZUNhbGxGcmFtZSosIEFyZ3Vt
ZW50c01vZGUpOworICAgIHN0YXRpYyBPdXRPZkJhbmRBcmd1bWVudHMqIGNyZWF0ZVdpdGhNYWNo
aW5lRnJhbWUoRXhlY1N0YXRlKiBteUZyYW1lLCBFeGVjU3RhdGUqIHRhcmdldEZyYW1lLCBBcmd1
bWVudHNNb2RlKTsKKyAgICAKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUo
Vk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlKTsKKworICAgIHN0YXRpYyBj
b25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xv
dCB8IE92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMgfCBKU09iamVjdDo6U3RydWN0dXJlRmxhZ3M7
CisKKyAgICBERUNMQVJFX0lORk87CisKK3ByaXZhdGU6CisgICAgc3RhdGljIGJvb2wgZ2V0T3du
UHJvcGVydHlTbG90KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0
eVNsb3QmKTsKKyAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0Kiwg
RXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOworICAgIHN0
YXRpYyB2b2lkIHB1dChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUs
IFB1dFByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyB2b2lkIGRlbGV0ZVByb3BlcnR5KEpTQ2Vs
bCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSk7CisgICAgc3RhdGljIHZvaWQgZGVmaW5lT3du
UHJvcGVydHkoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3Bl
cnR5RGVzY3JpcHRvciYsIGJvb2wgc2hvdWxkVGhyb3cpOworICAgIAorICAgIGJvb2wgc3BlY2lh
bHNNYXRlcmlhbGl6ZWQoKSBjb25zdCB7IHJldHVybiAhbV9jYWxsZWU7IH0KKyAgICB2b2lkIG1h
dGVyaWFsaXplU3BlY2lhbHMoRXhlY1N0YXRlKik7CisgICAgdm9pZCBtYXRlcmlhbGl6ZVNwZWNp
YWxzSWZOZWNlc3NhcnkoRXhlY1N0YXRlKik7CisgICAgCisgICAgV3JpdGVCYXJyaWVyPEpTRnVu
Y3Rpb24qPiBtX2NhbGxlZTsgLy8gU2V0IHRvIG51bGxwdHIgd2hlbiB3ZSBtYXRlcmlhbGl6ZSBh
bGwgb2Ygb3VyIHNwZWNpYWwgcHJvcGVydGllcy4KK307CisKK30gLy8gbmFtZXNwYWNlIEpTQwor
CisjZW5kaWYgLy8gT3V0T2ZCYW5kQXJndW1lbnRzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU2NvcGVPZmZzZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlT2Zmc2V0LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlT2Zmc2V0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDQyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTY29wZU9mZnNldC5oIgorCitu
YW1lc3BhY2UgSlNDIHsKKwordm9pZCBTY29wZU9mZnNldDo6ZHVtcChQcmludFN0cmVhbSYgb3V0
KSBjb25zdAoreworICAgIGlmICghKnRoaXMpIHsKKyAgICAgICAgb3V0LnByaW50KCJzY29wZUlu
dmFsaWQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBvdXQucHJpbnQoInNj
b3BlIiwgb2Zmc2V0KCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVPZmZzZXQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZU9mZnNldC5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVPZmZzZXQuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgU2NvcGVPZmZzZXRfaAorI2RlZmluZSBTY29wZU9mZnNldF9oCisK
KyNpbmNsdWRlICJHZW5lcmljT2Zmc2V0LmgiCisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+
CisKK25hbWVzcGFjZSBKU0MgeworCisvLyBUaGlzIGlzIGFuIG9mZnNldCBpbnRvIGEgc2NvcGUg
b2Ygc29tZSBraW5kLiBJdCBjb3VsZCBiZSBhbiBhY3RpdmF0aW9uIHNjb3BlIG9yIGl0IGNvdWxk
IGJlIGEKKy8vIGdsb2JhbCBvYmplY3QuCitjbGFzcyBTY29wZU9mZnNldCA6IHB1YmxpYyBHZW5l
cmljT2Zmc2V0PFNjb3BlT2Zmc2V0PiB7CitwdWJsaWM6CisgICAgU2NvcGVPZmZzZXQoKSB7IH0K
KyAgICAKKyAgICBleHBsaWNpdCBTY29wZU9mZnNldCh1bnNpZ25lZCBvZmZzZXQpCisgICAgICAg
IDogR2VuZXJpY09mZnNldChvZmZzZXQpCisgICAgeworICAgIH0KKyAgICAKKyAgICB2b2lkIGR1
bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5k
aWYgLy8gU2NvcGVPZmZzZXRfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TY29wZWRBcmd1bWVudHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50cy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMTM3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTY29wZWRBcmd1bWVudHMuaCIK
KworI2luY2x1ZGUgIkdlbmVyaWNBcmd1bWVudHNJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNBcmd1
bWVudHNJdGVyYXRvci5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKworbmFtZXNwYWNlIEpT
QyB7CisKK1NUQVRJQ19BU1NFUlRfSVNfVFJJVklBTExZX0RFU1RSVUNUSUJMRShTY29wZWRBcmd1
bWVudHMpOworCitjb25zdCBDbGFzc0luZm8gU2NvcGVkQXJndW1lbnRzOjpzX2luZm8gPSB7ICJB
cmd1bWVudHMiLCAmQmFzZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKFNjb3BlZEFy
Z3VtZW50cykgfTsKKworU2NvcGVkQXJndW1lbnRzOjpTY29wZWRBcmd1bWVudHMoVk0mIHZtLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgdW5zaWduZWQgdG90YWxMZW5ndGgpCisgICAgOiBHZW5lcmlj
QXJndW1lbnRzKHZtLCBzdHJ1Y3R1cmUpCisgICAgLCBtX292ZXJyb2RlVGhpbmdzKGZhbHNlKQor
ICAgICwgbV90b3RhbExlbmd0aChsZW5ndGgpCit7Cit9CisKK3ZvaWQgU2NvcGVkQXJndW1lbnRz
OjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIEpTRnVuY3Rpb24qIGNhbGxlZSwgU2NvcGVkQXJndW1l
bnRzVGFibGUqIHRhYmxlLCBKU0xleGljYWxFbnZpcm9ubWVudCogc2NvcGUpCit7CisgICAgQmFz
ZTo6ZmluaXNoQ3JlYXRpb24odm0pOworICAgIG1fY2FsbGVlLnNldCh2bSwgdGhpcywgY2FsbGVl
KTsKKyAgICBtX3RhYmxlLnNldCh2bSwgdGhpcywgdGFibGUpOworICAgIG1fc2NvcGUuc2V0KHZt
LCB0aGlzLCBzY29wZSk7Cit9CisKK1Njb3BlZEFyZ3VtZW50cyogU2NvcGVkQXJndW1lbnRzOjpj
cmVhdGVVbmluaXRpYWxpemVkKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRnVuY3Rp
b24qIGNhbGxlZSwgU2NvcGVkQXJndW1lbnRzVGFibGUqIHRhYmxlLCBKU0xleGljYWxFbnZpcm9u
bWVudCogc2NvcGUsIHVuc2lnbmVkIHRvdGFsTGVuZ3RoKQoreworICAgIEFTU0VSVCh0b3RhbExl
bmd0aCA+PSB0YWJsZS0+bGVuZ3RoKCkpOworICAgIFNjb3BlZEFyZ3VtZW50cyogcmVzdWx0ID0g
bmV3ICgKKyAgICAgICAgTm90TnVsbCwKKyAgICAgICAgYWxsb2NhdGVDZWxsPFNjb3BlZEFyZ3Vt
ZW50cz4odm0uaGVhcCwgYWxsb2NhdGlvblNpemUodG90YWxMZW5ndGggLSB0YWJsZS0+bGVuZ3Ro
KCkpKSkKKyAgICAgICAgKHZtLCBzdHJ1Y3R1cmUsIHRvdGFsTGVuZ3RoKTsKKyAgICByZXN1bHQt
PmZpbmlzaENyZWF0aW9uKHZtLCBjYWxsZWUsIHRhYmxlLCBzY29wZSk7CisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKworU2NvcGVkQXJndW1lbnRzKiBTY29wZWRBcmd1bWVudHM6OmNyZWF0ZShWTSYg
dm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0Z1bmN0aW9uKiBjYWxsZWUsIFNjb3BlZEFyZ3Vt
ZW50c1RhYmxlKiB0YWJsZSwgSlNMZXhpY2FsRW52aXJvbm1lbnQqIHNjb3BlLCB1bnNpZ25lZCB0
b3RhbExlbmd0aCkKK3sKKyAgICBTY29wZWRBcmd1bWVudHMqIHJlc3VsdCA9CisgICAgICAgIGNy
ZWF0ZVVuaW5pdGlhbGl6ZWQodm0sIHN0cnVjdHVyZSwgY2FsbGVlLCB0YWJsZSwgc2NvcGUsIHRv
dGFsTGVuZ3RoKTsKKyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSB0b3RhbExlbmd0aCAtIHRh
YmxlLT5sZW5ndGgoKTsgaS0tOykKKyAgICAgICAgcmVzdWx0LT5vdmVyZmxvd1N0b3JhZ2UoKVtp
XS5jbGVhcigpOworICAgIAorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1Njb3BlZEFyZ3VtZW50
cyogU2NvcGVkQXJndW1lbnRzOjpjcmVhdGVCeUNvcHlpbmcoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgRXhlY1N0YXRlKiBleGVjLCBTY29wZWRBcmd1bWVudHNUYWJsZSogdGFibGUsIEpT
TGV4aWNhbEVudmlyb25tZW50KiBzY29wZSkKK3sKKyAgICB1bnNpZ25lZCBuYW1lZExlbmd0aCA9
IHRhYmxlLT5sZW5ndGgoKTsKKyAgICB1bnNpZ25lZCB0b3RhbExlbmd0aCA9IGV4ZWMtPmFyZ3Vt
ZW50Q291bnQoKTsKKyAgICAKKyAgICBTY29wZWRBcmd1bWVudHMqIHJlc3VsdCA9CisgICAgICAg
IGNyZWF0ZVVuaW5pdGlhbGl6ZWQodm0sIHN0cnVjdHVyZSwgY2FsbGVlLCB0YWJsZSwgc2NvcGUs
IHRvdGFsTGVuZ3RoKTsKKyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSB0b3RhbExlbmd0aCAt
IG5hbWVkTGVuZ3RoOyBpLS07KQorICAgICAgICByZXN1bHQtPm92ZXJmbG93U3RvcmFnZSgpW2ld
LnNldCh2bSwgcmVzdWx0LCBleGVjLT51bmNoZWNrZWRBcmd1bWVudHMoaSArIG5hbWVkTGVuZ3Ro
KSk7CisgICAgCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBTY29wZWRBcmd1bWVudHM6
OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAg
ICBTY29wZWRBcmd1bWVudHMqIHRoaXNPYmplY3QgPSBzdGF0aWNfY2FzdDxTY29wZWRBcmd1bWVu
dHMqPihjZWxsKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGlu
Zm8oKSk7CisgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKKwor
ICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX2NhbGxlZSk7CisgICAgdmlzaXRvci5h
cHBlbmQoJnRoaXNPYmplY3QtPm1fdGFibGUpOworICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2Jq
ZWN0LT5tX3Njb3BlKTsKKyAgICAKKyAgICB2aXNpdG9yLmFwcGVuZFZhbHVlcygKKyAgICAgICAg
dGhpc09iamVjdC0+b3ZlcmZsb3dTdG9yYWdlKCksIHRoaXNPYmplY3QtPm1fdG90YWxMZW5ndGgg
LSB0aGlzT2JqZWN0LT5tX3RhYmxlLT5sZW5ndGgoKSk7Cit9CisKK1N0cnVjdHVyZSogU2NvcGVk
QXJndW1lbnRzOjpjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKK3sKKyAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVh
dGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhTY29wZWRBcmd1bWVudHNU
eXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Cit9CisKK3ZvaWQgU2NvcGVkQXJndW1lbnRz
OjpzbG93RG93bkFuZFdhc3RlTWVtb3J5KFZNJiB2bSkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVCgh
bV9vdmVycm9kZVRoaW5ncyk7CisgICAgCisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5h
bWVzLT5sZW5ndGgsIGpzTnVtYmVyKG1fdGFibGUtPmxlbmd0aCgpKSwgRG9udEVudW0pOworICAg
IHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+Y2FsbGVlLCBtX2NhbGxlZS5nZXQoKSwg
RG9udEVudW0pOworICAgIAorICAgIG1fb3ZlcnJvZGVUaGluZ3MgPSB0cnVlOworfQorCit2b2lk
IFNjb3BlZEFyZ3VtZW50czo6c2xvd0Rvd25BbmRXYXN0ZU1lbW9yeUlmTmVjZXNzYXJ5KFZNJiB2
bSkKK3sKKyAgICBpZiAoIW1fb3ZlcnJvZGVUaGluZ3MpCisgICAgICAgIHNsb3dEb3duQW5kV2Fz
dGVNZW1vcnkodm0pOworfQorCit2b2lkIFNjb3BlZEFyZ3VtZW50czo6b3ZlcnJpZGVBcmd1bWVu
dChWTSYgdm0sIHVpbnQzMl90IGkpCit7CisgICAgdW5zaWduZWQgbmFtZWRMZW5ndGggPSBtX3Rh
YmxlLT5sZW5ndGgoKTsKKyAgICBpZiAoaSA8IG5hbWVkTGVuZ3RoKQorICAgICAgICBtX3RhYmxl
LnNldCh2bSwgdGhpcywgbV90YWJsZS0+c2V0KHZtLCBpLCBTY29wZU9mZnNldCgpKSk7CisgICAg
ZWxzZSB7CisgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGkgPCBtX3Rv
dGFsTGVuZ3RoKTsKKyAgICAgICAgb3ZlcmZsb3dTdG9yYWdlKClbaSAtIG5hbWVkTGVuZ3RoXS5j
bGVhcigpOworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50cy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50cy5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwxNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBTY29wZWRBcmd1bWVudHNfaAorI2RlZmluZSBT
Y29wZWRBcmd1bWVudHNfaAorCisjaW5jbHVkZSAiR2VuZXJpY0FyZ3VtZW50cy5oIgorCituYW1l
c3BhY2UgSlNDIHsKKworLy8gVGhpcyBpcyBhbiBBcmd1bWVudHMtY2xhc3Mgb2JqZWN0IHRoYXQg
d2UgY3JlYXRlIHdoZW4geW91IHNheSAiYXJndW1lbnRzIiBpbnNpZGUgYSBmdW5jdGlvbiwKKy8v
IGFuZCBvbmUgb3IgbW9yZSBvZiB0aGUgYXJndW1lbnRzIG1heSBiZSBjYXB0dXJlZCBpbiB0aGUg
ZnVuY3Rpb24ncyBhY3RpdmF0aW9uLiBUaGUgZnVuY3Rpb24KKy8vIHdpbGwgY29weSBpdHMgZm9y
bWFsbHkgZGVjbGFyZWQgYXJndW1lbnRzIGludG8gdGhlIGFjdGl2YXRpb24gYW5kIHRoZW4gY3Jl
YXRlIHRoaXMgb2JqZWN0LiBUaGlzCisvLyBvYmplY3Qgd2lsbCBzdG9yZSB0aGUgb3ZlcmZsb3cg
YXJndW1lbnRzLCBpZiB0aGVyZSBhcmUgYW55LiBUaGlzIG9iamVjdCB3aWxsIHVzZSB0aGUgc3lt
Ym9sCisvLyB0YWJsZSdzIFNjb3BlZEFyZ3VtZW50c1RhYmxlIGFuZCB0aGUgYWN0aXZhdGlvbiwg
b3IgaXRzIG92ZXJmbG93IHN0b3JhZ2UsIHRvIGhhbmRsZSBhbGwgaW5kZXhlZAorLy8gbG9va3Vw
cy4KK2NsYXNzIFNjb3BlZEFyZ3VtZW50cyA6IHB1YmxpYyBHZW5lcmljQXJndW1lbnRzPFNjb3Bl
ZEFyZ3VtZW50cz4geworcHJpdmF0ZToKKyAgICBTY29wZWRBcmd1bWVudHMoVk0mLCBTdHJ1Y3R1
cmUqLCB1bnNpZ25lZCB0b3RhbExlbmd0aCk7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYs
IEpTRnVuY3Rpb24qIGNhbGxlZSwgU2NvcGVkQXJndW1lbnRzVGFibGUqLCBKU0xleGljYWxFbnZp
cm9ubWVudCopOworCitwdWJsaWM6CisgICAgLy8gQ3JlYXRlcyBhbiBhcmd1bWVudHMgb2JqZWN0
IGJ1dCBsZWF2ZXMgaXQgdW5pbml0aWFsaXplZC4gVGhpcyBpcyBkYW5nZXJvdXMgaWYgd2UgR0Mg
cmlnaHQKKyAgICAvLyBhZnRlciBhbGxvY2F0aW9uLgorICAgIHN0YXRpYyBTY29wZWRBcmd1bWVu
dHMqIGNyZWF0ZVVuaW5pdGlhbGl6ZWQoVk0mLCBTdHJ1Y3R1cmUqLCBKU0Z1bmN0aW9uKiBjYWxs
ZWUsIFNjb3BlZEFyZ3VtZW50c1RhYmxlKiwgSlNMZXhpY2FsRW52aXJvbm1lbnQqLCB1bnNpZ25l
ZCB0b3RhbExlbmd0aCk7CisgICAgCisgICAgLy8gQ3JlYXRlcyBhbiBhcmd1bWVudHMgb2JqZWN0
IGFuZCBpbml0aWFsaXplcyBldmVyeXRoaW5nIHRvIHRoZSBlbXB0eSB2YWx1ZS4gVXNlIHRoaXMg
aWYgeW91CisgICAgLy8gY2Fubm90IGd1YXJhbnRlZSB0aGF0IHlvdSdsbCBpbW1lZGlhdGVseSBp
bml0aWFsaXplIGFsbCBvZiB0aGUgZWxlbWVudHMuCisgICAgc3RhdGljIFNjb3BlZEFyZ3VtZW50
cyogY3JlYXRlKFZNJiwgU3RydWN0dXJlKiwgSlNGdW5jdGlvbiogY2FsbGVlLCBTY29wZWRBcmd1
bWVudHNUYWJsZSosIEpTTGV4aWNhbEVudmlyb25tZW50KiwgdW5zaWduZWQgdG90YWxMZW5ndGgp
OworICAgIAorICAgIC8vIENyZWF0ZXMgYW4gYXJndW1lbnRzIG9iamVjdCBieSBjb3B5aW5nIHRo
ZSBhcmd1bW5ldHMgZnJvbSB0aGUgc3RhY2suCisgICAgc3RhdGljIFNjb3BlZEFyZ3VtZW50cyog
Y3JlYXRlQnlDb3B5aW5nKFZNJiwgU3RydWN0dXJlKiwgRXhlY1N0YXRlKiwgU2NvcGVkQXJndW1l
bnRzVGFibGUqLCBKU0xleGljYWxFbnZpcm9ubWVudCopOworICAgIAorICAgIHN0YXRpYyB2b2lk
IHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICAKKyAgICB1aW50MzJf
dCBpbnRlcm5hbExlbmd0aCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV90b3RhbExl
bmd0aDsKKyAgICB9CisgICAgCisgICAgdWludDMyX3QgbGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYykg
Y29uc3QKKyAgICB7CisgICAgICAgIGlmIChVTkxJS0VMWShtX292ZXJyb2RlVGhpbmdzKSkKKyAg
ICAgICAgICAgIHJldHVybiBnZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCku
dG9VSW50MzIoZXhlYyk7CisgICAgICAgIHJldHVybiBpbnRlcm5hbExlbmd0aCgpOworICAgIH0K
KyAgICAKKyAgICBib29sIGNhbkFjY2Vzc0luZGV4UXVpY2tseSh1aW50MzJfdCBpKSBjb25zdAor
ICAgIHsKKyAgICAgICAgdW5zaWduZWQgbmFtZWRMZW5ndGggPSBtX3RhYmxlLT5sZW5ndGgoKTsK
KyAgICAgICAgaWYgKGkgPCBuYW1lZExlbmd0aCkKKyAgICAgICAgICAgIHJldHVybiAhIW1fdGFi
bGUtPmdldChpKTsKKyAgICAgICAgaWYgKGkgPCBtX3RvdGFsTGVuZ3RoKQorICAgICAgICAgICAg
cmV0dXJuICEhb3ZlcmZsb3dTdG9yYWdlKClbaSAtIG5hbWVkTGVuZ3RoXS5nZXQoKTsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICBKU1ZhbHVlIGdldEluZGV4UXVpY2ts
eSh1aW50MzJfdCBpKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlf
SU1QTElDQVRJT04oY2FuQWNjZXNzSW5kZXhRdWlja2x5KGkpKTsKKyAgICAgICAgdW5zaWduZWQg
bmFtZWRMZW5ndGggPSBtX3RhYmxlLT5sZW5ndGgoKTsKKyAgICAgICAgaWYgKGkgPCBuYW1lZExl
bmd0aCkKKyAgICAgICAgICAgIHJldHVybiBtX3Njb3BlLT52YXJpYWJsZUF0KG1fdGFibGUtPmdl
dChpKSkuZ2V0KCk7CisgICAgICAgIHJldHVybiBvdmVyZmxvd1N0b3JhZ2UoKVtpIC0gbmFtZWRM
ZW5ndGhdLmdldCgpOworICAgIH0KKworICAgIHZvaWQgc2V0SW5kZXhRdWlja2x5KFZNJiB2bSwg
dWludDMyX3QgaSwgSlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIEFTU0VSVF9XSVRIX1NF
Q1VSSVRZX0lNUExJQ0FUSU9OKGNhbkFjY2Vzc0luZGV4UXVpY2tseShpKSk7CisgICAgICAgIHVu
c2lnbmVkIG5hbWVkTGVuZ3RoID0gbV90YWJsZS0+bGVuZ3RoKCk7CisgICAgICAgIGlmIChpIDwg
bmFtZWRMZW5ndGgpCisgICAgICAgICAgICBtX3Njb3BlLT52YXJpYWJsZWF0KG1fdGFibGUtPmdl
dChpKSkuc2V0KHZtLCB0aGlzLCB2YWx1ZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG92
ZXJmbG93U3RvcmFnZSgpW2kgLSBuYW1lZExlbmd0aF0uc2V0KHZtLCB0aGlzLCB2YWx1ZSk7Cisg
ICAgfQorCisgICAgV3JpdGVCYXJyaWVyPEpTRnVuY3Rpb24+JiBjYWxsZWUoKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG1fY2FsbGVlOworICAgIH0KKyAgICAKKyAgICBib29sIG92ZXJyb2RlVGhp
bmdzKCkgY29uc3QgeyByZXR1cm4gbV9vdmVycm9kZVRoaW5nczsgfQorICAgIHZvaWQgc2xvd0Rv
d25BbmRXYXN0ZU1lbW9yeShWTSYpOworICAgIHZvaWQgc2xvd0Rvd25BbmRXYXN0ZU1lbW9yeUlm
TmVjZXNzYXJ5KFZNJik7CisgICAgdm9pZCBvdmVycmlkZUFyZ3VtZW50KFZNJiB2bSwgdWludDMy
X3QgaSk7CisgICAgCisgICAgREVDTEFSRV9JTkZPOworICAgIAorICAgIHN0YXRpYyBTdHJ1Y3R1
cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5
cGUpOworICAgIAorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZPdmVycm9kZVRoaW5ncygp
IHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihTY29wZWRBcmd1bWVudHMsIG1fb3ZlcnJvZGVUaGlu
Z3MpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlRvdGFsTGVuZ3RoKCkgeyByZXR1
cm4gT0JKRUNUX09GRlNFVE9GKFNjb3BlZEFyZ3VtZW50cywgbV90b3RhbExlbmd0aCk7IH0KKyAg
ICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mVGFibGUoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VU
T0YoU2NvcGVkQXJndW1lbnRzLCBtX3RhYmxlKTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zm
c2V0T2ZTY29wZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihTY29wZWRBcmd1bWVudHMsIG1f
c2NvcGUpOyB9CisgICAgCisgICAgc3RhdGljIHNpemVfdCBvdmVyZmxvd1N0b3JhZ2VPZmZzZXQo
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZjxzaXplb2Yo
V3JpdGVCYXJyaWVyPFVua25vd24+KT4oc2l6ZW9mKFNjb3BlZEFyZ3VtZW50cykpOworICAgIH0K
KyAgICAKKyAgICBzdGF0aWMgc2l6ZV90IGFsbG9jYXRpb25TaXplKHVuc2lnbmVkIG92ZXJmbG93
QXJndW1lbnRzTGVuZ3RoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0b3JhZ2VPZmZzZXQoKSAr
IHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pICogb3ZlcmZsb3dBcmd1bWVudHNMZW5ndGg7
CisgICAgfQorCitwcml2YXRlOgorICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogb3ZlcmZsb3dT
dG9yYWdlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8V3JpdGVCYXJyaWVy
PFVua25vd24+Kj4oCisgICAgICAgICAgICBiaXR3aXNlX2Nhc3Q8Y2hhcio+KHRoaXMpICsgb3Zl
cmZsb3dTdG9yYWdlT2Zmc2V0KCkpOworICAgIH0KKyAgICAKKyAgICBib29sIG1fb3ZlcnJvZGVU
aGluZ3M7IC8vIFRydWUgaWYgbGVuZ3RoLCBjYWxsZWUsIGFuZCBjYWxsZXIgYXJlIGZ1bGx5IG1h
dGVyaWFsaXplZCBpbiB0aGUgb2JqZWN0LgorICAgIHVuc2lnbmVkIG1fdG90YWxMZW5ndGg7IC8v
IFRoZSBsZW5ndGggb2YgZGVjbGFyZWQgcGx1cyBvdmVyZmxvdyBhcmd1bWVudHMuCisgICAgV3Jp
dGVCYXJyaWVyPEpTRnVuY3Rpb24qPiBtX2NhbGxlZTsKKyAgICBXcml0ZUJhcnJpZXI8U2NvcGVk
QXJndW1lbnRzVGFibGU+IG1fdGFibGU7CisgICAgV3JpdGVCYXJyaWVyPEpTTGV4aWNhbEVudmly
b25tZW50PiBtX3Njb3BlOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBT
Y29wZWRBcmd1bWVudHNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
Y29wZWRBcmd1bWVudHNUYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50c1RhYmxlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHNUYWJsZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsOTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBTY29wZWRBcmd1bWVudHNUYWJsZV9oCisjZGVmaW5lIFNjb3Bl
ZEFyZ3VtZW50c1RhYmxlX2gKKworI2luY2x1ZGUgIkpTQ2VsbC5oIgorCituYW1lc3BhY2UgSlND
IHsKKworLy8gVGhpcyBjbGFzcydzIG9ubHkgam9iIGlzIHRvIGhvbGQgb250byB0aGUgbGlzdCBv
ZiBTY29wZU9mZnNldHMgZm9yIGVhY2ggYXJndW1lbnQgdGhhdCBhCisvLyBmdW5jdGlvbiBoYXMu
IE1vc3Qgb2YgdGhlIHRpbWUsIHRoZSBCeXRlY29kZUdlbmVyYXRvciB3aWxsIGNyZWF0ZSBvbmUg
b2YgdGhlc2UgYW5kIGl0IHdpbGwKKy8vIG5ldmVyIGJlIG1vZGlmaWVkIHN1YnNlcXVlbnRseS4g
VGhlcmUgaXMgYSByYXJlIGNhc2Ugd2hlcmUgYSBTY29wZWRBcmd1bWVudHMgb2JqZWN0IGlzIGNy
ZWF0ZWQKKy8vIGFuZCBhbGlhc2VzIG9uZSBvZiB0aGVzZSBhbmQgdGhlbiBkZWNpZGVzIHRvIG1v
ZGlmeSBpdDsgaW4gdGhhdCBjYXNlIHdlIGRvIGNvcHktb24td3JpdGUuIFRoaXMKKy8vIG1ha2Vz
IHNlbnNlIGJlY2F1c2Ugc3VjaCBtb2RpZmljYXRpb25zIGFyZSBzbyB1bmNvbW1vbi4gWW91J2Qg
aGF2ZSB0byBkbyBzb21ldGhpbmcgY3JhenkgbGlrZQorLy8gImRlbGV0ZSBhcmd1bWVudHNbaV0i
IG9yIHNvbWUgdmFyaWFudCBvZiBkZWZpbmVPd25Qcm9wZXJ0eS4KK2NsYXNzIFNjb3BlZEFyZ3Vt
ZW50cyA6IHB1YmxpYyBKU0NlbGwgeworcHVibGljOgorICAgIHR5cGVkZWYgSlNDZWxsIEJhc2U7
CisgICAgCisgICAgc3RhdGljIGNvbnN0IGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7Cisg
ICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzSW1tb3J0YWxTdHJ1Y3R1cmUgPSB0cnVlOworCitwcml2
YXRlOgorICAgIFNjb3BlZEFyZ3VtZW50c1RhYmxlKFZNJik7CisgICAgflNjb3BlZEFyZ3VtZW50
c1RhYmxlKCk7CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgU2NvcGVkQXJndW1lbnRzVGFibGUqIGNy
ZWF0ZShWTSYpOworICAgIAorICAgIFNjb3BlZEFyZ3VtZW50cyogY2xvbmUoVk0mKTsKKyAgICAK
KyAgICB1aW50MzJfdCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2xlbmd0aDsgfQorICAgIFNj
b3BlZEFyZ3VtZW50c1RhYmxlKiBzZXRMZW5ndGgoVk0mLCB1aW50MzJfdCBuZXdMZW5ndGgpOwor
ICAgIAorICAgIFNjb3BlT2Zmc2V0IGdldCh1aW50MzJfdCBpKSBjb25zdAorICAgIHsKKyAgICAg
ICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oaSA8IG1fbGVuZ3RoKTsKKyAgICAg
ICAgcmV0dXJuIG1fYXJndW1lbnRzW2ldOworICAgIH0KKyAgICAKKyAgICB2b2lkIGxvY2soKQor
ICAgIHsKKyAgICAgICAgbV9sb2NrZWQgPSB0cnVlOworICAgIH0KKyAgICAKKyAgICBTY29wZWRB
cmd1bWVudHMqIHNldChWTSYgdm0sIHVpbnQzMl90IGksIFNjb3BlT2Zmc2V0IHZhbHVlKQorICAg
IHsKKyAgICAgICAgU2NvcGVkQXJndW1lbnRzKiByZXN1bHQ7CisgICAgICAgIGlmIChVTkxJS0VM
WShtX2xvY2tlZCkpCisgICAgICAgICAgICByZXN1bHQgPSBjbG9uZSh2bSk7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIHJlc3VsdCA9IHRoaXM7CisgICAgICAgIHJlc3VsdC0+c2V0RGlyZWN0
KGksIHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgREVD
TEFSRV9JTkZPOworICAgIAorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZMZW5ndGgoKSB7
IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoU2NvcGVkQXJndW1lbnRzLCBtX2xlbmd0aCk7IH0KKyAg
ICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQXJndW1lbnRzKCkgeyByZXR1cm4gT0JKRUNUX09G
RlNFVE9GKFNjb3BlZEFyZ3VtZW50cywgbV9hcmd1bWVudHMpOyB9CisKK3ByaXZhdGU6CisgICAg
dWludDMyX3QgbV9sZW5ndGg7CisgICAgYm9vbCBtX2xvY2tlZDsgLy8gQmVpbmcgbG9ja2VkIG1l
YW5zIHRoYXQgdGhlcmUgYXJlIG11bHRpcGxlIHJlZmVyZW5jZXMgdG8gdGhpcyBvYmplY3QgYW5k
IG5vbmUgb2YgdGhlbSBleHBlY3QgdG8gc2VlIHRoZSBvdGhlcnMnIG1vZGlmaWNhdGlvbnMuIFRo
aXMgbWVhbnMgdGhhdCBtb2RpZmljYXRpb25zIG5lZWQgdG8gbWFrZSBhIGNvcHkgZmlyc3QuCisg
ICAgc3RkOjp1bmlxdWVfcHRyPFNjb3BlT2Zmc2V0W10+IG1fYXJndW1lbnRzOworfTsKKworfSAv
LyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBTY29wZWRBcmd1bWVudHNUYWJsZV9oCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5jcHAJKHJl
dmlzaW9uIDE4MDg3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRh
YmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTIsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEyLCAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjksNiArNjksOCBAQCBKU1ZhbHVl
IFN5bWJvbFRhYmxlRW50cnk6OmluZmVycmVkVmFsdWUoCiAKIHZvaWQgU3ltYm9sVGFibGVFbnRy
eTo6cHJlcGFyZVRvV2F0Y2goU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlKQogeworICAgIGlmICgh
aXNXYXRjaGFibGUoKSkKKyAgICAgICAgcmV0dXJuOwogICAgIEZhdEVudHJ5KiBlbnRyeSA9IGlu
ZmxhdGUoKTsKICAgICBpZiAoZW50cnktPm1fd2F0Y2hwb2ludHMpCiAgICAgICAgIHJldHVybjsK
QEAgLTEzNywyOSArMTM5LDIyIEBAIHZvaWQgU3ltYm9sVGFibGU6OldhdGNocG9pbnRDbGVhbnVw
OjpmaW4KICAgICB9CiB9CiAKLVN5bWJvbFRhYmxlKiBTeW1ib2xUYWJsZTo6Y2xvbmVDYXB0dXJl
ZE5hbWVzKFZNJiB2bSkKK1N5bWJvbFRhYmxlKiBTeW1ib2xUYWJsZTo6Y2xvbmVTY29wZVBhcnQo
Vk0mIHZtKQogewogICAgIFN5bWJvbFRhYmxlKiByZXN1bHQgPSBTeW1ib2xUYWJsZTo6Y3JlYXRl
KHZtKTsKICAgICAKLSAgICByZXN1bHQtPm1fcGFyYW1ldGVyQ291bnRJbmNsdWRpbmdUaGlzID0g
bV9wYXJhbWV0ZXJDb3VudEluY2x1ZGluZ1RoaXM7CiAgICAgcmVzdWx0LT5tX3VzZXNOb25TdHJp
Y3RFdmFsID0gbV91c2VzTm9uU3RyaWN0RXZhbDsKLSAgICByZXN1bHQtPm1fY2FwdHVyZVN0YXJ0
ID0gbV9jYXB0dXJlU3RhcnQ7Ci0gICAgcmVzdWx0LT5tX2NhcHR1cmVFbmQgPSBtX2NhcHR1cmVF
bmQ7CiAKICAgICBmb3IgKGF1dG8gaXRlciA9IG1fbWFwLmJlZ2luKCksIGVuZCA9IG1fbWFwLmVu
ZCgpOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7Ci0gICAgICAgIGlmICghaXNDYXB0dXJlZChpdGVy
LT52YWx1ZS5nZXRJbmRleCgpKSkKKyAgICAgICAgaWYgKCFpdGVyLT52YWx1ZS52YXJPZmZzZXQo
KS5pc1Njb3BlKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgcmVzdWx0LT5tX21h
cC5hZGQoCiAgICAgICAgICAgICBpdGVyLT5rZXksCi0gICAgICAgICAgICBTeW1ib2xUYWJsZUVu
dHJ5KGl0ZXItPnZhbHVlLmdldEluZGV4KCksIGl0ZXItPnZhbHVlLmdldEF0dHJpYnV0ZXMoKSkp
OworICAgICAgICAgICAgU3ltYm9sVGFibGVFbnRyeShpdGVyLT52YWx1ZS52YXJPZmZzZXQoKSwg
aXRlci0+dmFsdWUuZ2V0QXR0cmlidXRlcygpKSk7CiAgICAgfQogICAgIAotICAgIGlmIChtX3Ns
b3dBcmd1bWVudHMpIHsKLSAgICAgICAgcmVzdWx0LT5tX3Nsb3dBcmd1bWVudHMgPSBzdGQ6Om1h
a2VfdW5pcXVlPFNsb3dBcmd1bWVudFtdPihwYXJhbWV0ZXJDb3VudCgpKTsKLSAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gcGFyYW1ldGVyQ291bnQoKTsgaS0tOykKLSAgICAgICAgICAgIHJlc3Vs
dC0+bV9zbG93QXJndW1lbnRzW2ldID0gbV9zbG93QXJndW1lbnRzW2ldOwotICAgIH0KLQorICAg
IHJlc3VsdC0+bV9hcmd1bWVudHMgPSBhcmd1bWVudHMoKTsKKyAgICAKICAgICBpZiAobV90eXBl
UHJvZmlsaW5nUmFyZURhdGEpIHsKICAgICAgICAgcmVzdWx0LT5tX3R5cGVQcm9maWxpbmdSYXJl
RGF0YSA9IHN0ZDo6bWFrZV91bmlxdWU8VHlwZVByb2ZpbGluZ1JhcmVEYXRhPigpOwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmgJKHJldmlzaW9u
IDE4MDg3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3
LCAyMDA4LCAyMDEyLTIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAyMDEyLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMSw2ICszMSw3IEBA
CiAKICNpbmNsdWRlICJDb25jdXJyZW50SklUTG9jay5oIgogI2luY2x1ZGUgIkpTT2JqZWN0Lmgi
CisjaW5jbHVkZSAiU2NvcGVkQXJndW1lbnRzVGFibGUuaCIKICNpbmNsdWRlICJUeXBlTG9jYXRp
b24uaCIKICNpbmNsdWRlICJWYXJpYWJsZVdhdGNocG9pbnRTZXQuaCIKICNpbmNsdWRlIDxtZW1v
cnk+CkBAIC0zOSwyNCArNDAsNiBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotc3RydWN0IFNsb3dB
cmd1bWVudCB7Ci1wdWJsaWM6Ci0gICAgZW51bSBTdGF0dXMgewotICAgICAgICBOb3JtYWwgPSAw
LAotICAgICAgICBDYXB0dXJlZCA9IDEsCi0gICAgICAgIERlbGV0ZWQgPSAyCi0gICAgfTsKLQot
ICAgIFNsb3dBcmd1bWVudCgpCi0gICAgICAgIDogc3RhdHVzKE5vcm1hbCkKLSAgICAgICAgLCBp
bmRleCgwKQotICAgIHsKLSAgICB9Ci0KLSAgICBTdGF0dXMgc3RhdHVzOwotICAgIGludCBpbmRl
eDsgLy8gSWYgc3RhdHVzIGlzICdEZWxldGVkJywgaW5kZXggaXMgYm9ndXMuCi19OwotCiBzdGF0
aWMgQUxXQVlTX0lOTElORSBpbnQgbWlzc2luZ1N5bWJvbE1hcmtlcigpIHsgcmV0dXJuIHN0ZDo6
bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCk7IH0KIAogLy8gVGhlIGJpdCB0d2lkZGxpbmcgaW4g
dGhpcyBjbGFzcyBhc3N1bWVzIHRoYXQgZXZlcnkgcmVnaXN0ZXIgaW5kZXggaXMgYQpAQCAtODYs
NiArNjksMjkgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgaW50IG1pc3NpbmdTeW1ib2xNYQogLy8g
Y29weTogICAgIFN5bWJvbFRhYmxlRW50cnkgLS0+IEZhdEVudHJ5IC0tLS0tXgogCiBzdHJ1Y3Qg
U3ltYm9sVGFibGVFbnRyeSB7Citwcml2YXRlOgorICAgIHN0YXRpYyBWYXJPZmZzZXQgdmFyT2Zm
c2V0RnJvbUJpdHMoaW50cHRyX3QgYml0cykKKyAgICB7CisgICAgICAgIFZhcktpbmQga2luZDsK
KyAgICAgICAgaW50cHRyX3Qga2luZEJpdHMgPSBiaXRzICYgS2luZE1hc2s7CisgICAgICAgIGlm
IChraW5kQml0cyA8PSBVbndhdGNoYWJsZVNjb3BlS2luZEJpdHMpCisgICAgICAgICAgICBraW5k
ID0gU2NvcGVWYXJLaW5kOworICAgICAgICBlbHNlIGlmIChraW5kQml0cyA9PSBTdGFja0tpbmRC
aXRzKQorICAgICAgICAgICAga2luZCA9IFN0YWNrVmFyS2luZDsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAga2luZCA9IENhcHR1cmVkQXJndW1lbnRLaW5kOworICAgICAgICByZXR1cm4gVmFy
T2Zmc2V0Ojphc3NlbWJsZShraW5kLCBzdGF0aWNfY2FzdDxpbnQ+KGJpdHMgPj4gRmxhZ0JpdHMp
KTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIFNjb3BlT2Zmc2V0IHNjb3BlT2Zmc2V0RnJvbUJp
dHMoaW50cHRyX3QgYml0cykKKyAgICB7CisgICAgICAgIEFTU0VSVCghKGJpdHMgJiBTdGFja0Zs
YWcpKTsKKyAgICAgICAgQVNTRVJUKCEoYml0cyAmIENhcHR1cmVkQXJndW1lbnRGbGFnKSk7Cisg
ICAgICAgIHJldHVybiBTY29wZU9mZnNldChzdGF0aWNfY2FzdDxpbnQ+KGJpdHMgPj4gRmxhZ0Jp
dHMpKTsKKyAgICB9CisKK3B1YmxpYzoKKyAgICAKICAgICAvLyBVc2UgdGhlIFN5bWJvbFRhYmxl
RW50cnk6OkZhc3QgY2xhc3MsIGVpdGhlciB2aWEgaW1wbGljaXQgY2FzdCBvciBieSBjYWxsaW5n
CiAgICAgLy8gZ2V0RmFzdCgpLCB3aGVuIHlvdSAoMSkgb25seSBjYXJlIGFib3V0IGlzTnVsbCgp
LCBnZXRJbmRleCgpLCBhbmQgaXNSZWFkT25seSgpLAogICAgIC8vIGFuZCAoMikgeW91IGFyZSBp
biBhIGhvdCBwYXRoIHdoZXJlIHlvdSBuZWVkIHRvIG1pbmltaXplIHRoZSBudW1iZXIgb2YgdGlt
ZXMKQEAgLTEwNywxMSArMTEzLDE5IEBAIHN0cnVjdCBTeW1ib2xUYWJsZUVudHJ5IHsKICAgICAg
ICAgICAgIHJldHVybiAhKG1fYml0cyAmIH5TbGltRmxhZyk7CiAgICAgICAgIH0KIAotICAgICAg
ICBpbnQgZ2V0SW5kZXgoKSBjb25zdAorICAgICAgICBWYXJPZmZzZXQgdmFyT2Zmc2V0KCkgY29u
c3QKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4obV9iaXRz
ID4+IEZsYWdCaXRzKTsKKyAgICAgICAgICAgIHJldHVybiB2YXJPZmZzZXRGcm9tQml0cyhtX2Jp
dHMpOwogICAgICAgICB9Ci0gICAgCisgICAgICAgIAorICAgICAgICAvLyBBc3NlcnRzIGlmIHRo
ZSBvZmZzZXQgaXMgYW55dGhpbmcgYnV0IGEgc2NvcGUgb2Zmc2V0LiBUaGlzIHN0cnVjdHVyZXMg
dGhlIGFzc2VydGlvbnMKKyAgICAgICAgLy8gaW4gYSB3YXkgdGhhdCBtYXkgcmVzdWx0IGluIGJl
dHRlciBjb2RlLCBldmVuIGluIHJlbGVhc2UsIHRoYW4gZG9pbmcKKyAgICAgICAgLy8gdmFyT2Zm
c2V0KCkuc2NvcGVPZmZzZXQoKS4KKyAgICAgICAgU2NvcGVPZmZzZXQgc2NvcGVPZmZzZXQoKSBj
b25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gc2NvcGVPZmZzZXRGcm9tQml0cyht
X2JpdHMpOworICAgICAgICB9CisgICAgICAgIAogICAgICAgICBib29sIGlzUmVhZE9ubHkoKSBj
b25zdAogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gbV9iaXRzICYgUmVhZE9ubHlGbGFn
OwpAQCAtMTQyLDE4ICsxNTYsMTggQEAgc3RydWN0IFN5bWJvbFRhYmxlRW50cnkgewogICAgIHsK
ICAgICB9CiAKLSAgICBTeW1ib2xUYWJsZUVudHJ5KGludCBpbmRleCkKKyAgICBTeW1ib2xUYWJs
ZUVudHJ5KFZhck9mZnNldCBvZmZzZXQpCiAgICAgICAgIDogbV9iaXRzKFNsaW1GbGFnKQogICAg
IHsKLSAgICAgICAgQVNTRVJUKGlzVmFsaWRJbmRleChpbmRleCkpOwotICAgICAgICBwYWNrKGlu
ZGV4LCBmYWxzZSwgZmFsc2UpOworICAgICAgICBBU1NFUlQoaXNWYWxpZFZhck9mZnNldChvZmZz
ZXQpKTsKKyAgICAgICAgcGFjayhvZmZzZXQsIGZhbHNlLCBmYWxzZSk7CiAgICAgfQogCi0gICAg
U3ltYm9sVGFibGVFbnRyeShpbnQgaW5kZXgsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCisgICAgU3lt
Ym9sVGFibGVFbnRyeShWYXJPZmZzZXQgb2Zmc2V0LCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQogICAg
ICAgICA6IG1fYml0cyhTbGltRmxhZykKICAgICB7Ci0gICAgICAgIEFTU0VSVChpc1ZhbGlkSW5k
ZXgoaW5kZXgpKTsKLSAgICAgICAgcGFjayhpbmRleCwgYXR0cmlidXRlcyAmIFJlYWRPbmx5LCBh
dHRyaWJ1dGVzICYgRG9udEVudW0pOworICAgICAgICBBU1NFUlQoaXNWYWxpZFZhck9mZnNldChv
ZmZzZXQpKTsKKyAgICAgICAgcGFjayhvZmZzZXQsIGF0dHJpYnV0ZXMgJiBSZWFkT25seSwgYXR0
cmlidXRlcyAmIERvbnRFbnVtKTsKICAgICB9CiAgICAgCiAgICAgflN5bWJvbFRhYmxlRW50cnko
KQpAQCAtMTgxLDkgKzE5NSwyMiBAQCBzdHJ1Y3QgU3ltYm9sVGFibGVFbnRyeSB7CiAgICAgICAg
IHJldHVybiAhKGJpdHMoKSAmIH5TbGltRmxhZyk7CiAgICAgfQogCi0gICAgaW50IGdldEluZGV4
KCkgY29uc3QKKyAgICBWYXJPZmZzZXQgdmFyT2Zmc2V0KCkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiB2YXJPZmZzZXRGcm9tQml0cyhiaXRzKCkpOworICAgIH0KKyAgICAKKyAgICBib29s
IGlzV2F0Y2hhYmxlKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxp
bnQ+KGJpdHMoKSA+PiBGbGFnQml0cyk7CisgICAgICAgIHJldHVybiAobV9iaXRzICYgS2luZEJp
dHNNYXNrKSA9PSBTY29wZUtpbmRCaXRzOworICAgIH0KKyAgICAKKyAgICAvLyBBc3NlcnRzIGlm
IHRoZSBvZmZzZXQgaXMgYW55dGhpbmcgYnV0IGEgc2NvcGUgb2Zmc2V0LiBUaGlzIHN0cnVjdHVy
ZXMgdGhlIGFzc2VydGlvbnMKKyAgICAvLyBpbiBhIHdheSB0aGF0IG1heSByZXN1bHQgaW4gYmV0
dGVyIGNvZGUsIGV2ZW4gaW4gcmVsZWFzZSwgdGhhbiBkb2luZworICAgIC8vIHZhck9mZnNldCgp
LnNjb3BlT2Zmc2V0KCkuCisgICAgU2NvcGVPZmZzZXQgc2NvcGVPZmZzZXQoKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIHNjb3BlT2Zmc2V0RnJvbUJpdHMoYml0cygpKTsKICAgICB9CiAg
ICAgCiAgICAgQUxXQVlTX0lOTElORSBGYXN0IGdldEZhc3QoKSBjb25zdApAQCAtMjA2LDEwICsy
MzMsMTAgQEAgc3RydWN0IFN5bWJvbFRhYmxlRW50cnkgewogICAgIHsKICAgICAgICAgcmV0dXJu
IGdldEZhc3QoKS5nZXRBdHRyaWJ1dGVzKCk7CiAgICAgfQotCisgICAgCiAgICAgdm9pZCBzZXRB
dHRyaWJ1dGVzKHVuc2lnbmVkIGF0dHJpYnV0ZXMpCiAgICAgewotICAgICAgICBwYWNrKGdldElu
ZGV4KCksIGF0dHJpYnV0ZXMgJiBSZWFkT25seSwgYXR0cmlidXRlcyAmIERvbnRFbnVtKTsKKyAg
ICAgICAgcGFjayh2YXJPZmZzZXQoKSwgaXNXYXRjaGFibGUoKSwgYXR0cmlidXRlcyAmIFJlYWRP
bmx5LCBhdHRyaWJ1dGVzICYgRG9udEVudW0pOwogICAgIH0KIAogICAgIGJvb2wgaXNSZWFkT25s
eSgpIGNvbnN0CkBAIC0yMTgsNiArMjQ1LDEyIEBAIHN0cnVjdCBTeW1ib2xUYWJsZUVudHJ5IHsK
ICAgICB9CiAgICAgCiAgICAgSlNWYWx1ZSBpbmZlcnJlZFZhbHVlKCk7CisKKyAgICB2b2lkIGRp
c2FibGVXYXRjaGluZygpCisgICAgeworICAgICAgICBpZiAodmFyT2Zmc2V0KCkuaXNTY29wZSgp
KQorICAgICAgICAgICAgcGFjayh2YXJPZmZzZXQoKSwgZmFsc2UsIGF0dHJpYnV0ZXMgJiBSZWFk
T25seSwgYXR0cmlidXRlcyAmIERvbnRFbnVtKTsKKyAgICB9CiAgICAgCiAgICAgdm9pZCBwcmVw
YXJlVG9XYXRjaChTeW1ib2xUYWJsZSopOwogICAgIApAQCAtMjQyLDcgKzI3NSwxMiBAQCBwcml2
YXRlOgogICAgIHN0YXRpYyBjb25zdCBpbnRwdHJfdCBSZWFkT25seUZsYWcgPSAweDI7CiAgICAg
c3RhdGljIGNvbnN0IGludHB0cl90IERvbnRFbnVtRmxhZyA9IDB4NDsKICAgICBzdGF0aWMgY29u
c3QgaW50cHRyX3QgTm90TnVsbEZsYWcgPSAweDg7Ci0gICAgc3RhdGljIGNvbnN0IGludHB0cl90
IEZsYWdCaXRzID0gNDsKKyAgICBzdGF0aWMgY29uc3QgaW50cHRyX3QgS2luZEJpdHNNYXNrID0g
MHgzMDsKKyAgICBzdGF0aWMgY29uc3QgaW50cHRyX3QgU2NvcGVLaW5kQml0cyA9IDB4MDA7Cisg
ICAgc3RhdGljIGNvbnN0IGludHB0cl90IFVud2F0Y2hhYmxlU2NvcGVLaW5kQml0cyA9IDB4MTA7
CisgICAgc3RhdGljIGNvbnN0IGludHB0cl90IFN0YWNrS2luZEJpdHMgPSAweDIwOworICAgIHN0
YXRpYyBjb25zdCBpbnRwdHJfdCBDYXB0dXJlZEFyZ3VtZW50S2luZEJpdHMgPSAweDMwOworICAg
IHN0YXRpYyBjb25zdCBpbnRwdHJfdCBGbGFnQml0cyA9IDY7CiAgICAgCiAgICAgY2xhc3MgRmF0
RW50cnkgewogICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKQEAgLTMwOSwyMCArMzQ3
LDQwIEBAIHByaXZhdGU6CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGZyZWVGYXRFbnRy
eVNsb3coKTsKIAotICAgIHZvaWQgcGFjayhpbnQgaW5kZXgsIGJvb2wgcmVhZE9ubHksIGJvb2wg
ZG9udEVudW0pCisgICAgdm9pZCBwYWNrKFZhck9mZnNldCBvZmZzZXQsIGJvb2wgaXNXYXRjaGFi
bGUsIGJvb2wgcmVhZE9ubHksIGJvb2wgZG9udEVudW0pCiAgICAgewogICAgICAgICBBU1NFUlQo
IWlzRmF0KCkpOwogICAgICAgICBpbnRwdHJfdCYgYml0c1JlZiA9IGJpdHMoKTsKLSAgICAgICAg
Yml0c1JlZiA9IChzdGF0aWNfY2FzdDxpbnRwdHJfdD4oaW5kZXgpIDw8IEZsYWdCaXRzKSB8IE5v
dE51bGxGbGFnIHwgU2xpbUZsYWc7CisgICAgICAgIGJpdHNSZWYgPQorICAgICAgICAgICAgKHN0
YXRpY19jYXN0PGludHB0cl90PihvZmZzZXQucmF3T2Zmc2V0KCkpIDw8IEZsYWdCaXRzKSB8IE5v
dE51bGxGbGFnIHwgU2xpbUZsYWc7CiAgICAgICAgIGlmIChyZWFkT25seSkKICAgICAgICAgICAg
IGJpdHNSZWYgfD0gUmVhZE9ubHlGbGFnOwogICAgICAgICBpZiAoZG9udEVudW0pCiAgICAgICAg
ICAgICBiaXRzUmVmIHw9IERvbnRFbnVtRmxhZzsKKyAgICAgICAgc3dpdGNoIChvZmZzZXQua2lu
ZCgpKSB7CisgICAgICAgIGNhc2UgU2NvcGVWYXJLaW5kOgorICAgICAgICAgICAgaWYgKGlzV2F0
Y2hhYmxlKQorICAgICAgICAgICAgICAgIGJpdHNSZWYgfD0gU2NvcGVLaW5kQml0czsKKyAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBiaXRzUmVmIHw9IFVud2F0Y2hhYmxlU2NvcGVL
aW5kQml0czsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFN0YWNrVmFyS2luZDoK
KyAgICAgICAgICAgIEFTU0VSVCghaXNXYXRjaGFibGUpOworICAgICAgICAgICAgYml0c1JlZiB8
PSBTdGFja0tpbmRCaXRzOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ2FwdHVy
ZWRBcmd1bWVudEtpbmQ6CisgICAgICAgICAgICBBU1NFUlQoIWlzV2F0Y2hhYmxlKTsKKyAgICAg
ICAgICAgIGJpdHNSZWYgfD0gQ2FwdHVyZWRBcmd1bWVudEtpbmRCaXRzOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICB9CiAgICAgCi0g
ICAgYm9vbCBpc1ZhbGlkSW5kZXgoaW50IGluZGV4KQorICAgIHN0YXRpYyBib29sIGlzVmFsaWRW
YXJPZmZzZXQoVmFyT2Zmc2V0IG9mZnNldCkKICAgICB7Ci0gICAgICAgIHJldHVybiAoKHN0YXRp
Y19jYXN0PGludHB0cl90PihpbmRleCkgPDwgRmxhZ0JpdHMpID4+IEZsYWdCaXRzKSA9PSBzdGF0
aWNfY2FzdDxpbnRwdHJfdD4oaW5kZXgpOworICAgICAgICByZXR1cm4gKChzdGF0aWNfY2FzdDxp
bnRwdHJfdD4ob2Zmc2V0LnJhd09mZnNldCgpKSA8PCBGbGFnQml0cykgPj4gRmxhZ0JpdHMpID09
IHN0YXRpY19jYXN0PGludHB0cl90PihvZmZzZXQucmF3T2Zmc2V0KCkpOwogICAgIH0KIAogICAg
IGludHB0cl90IG1fYml0czsKQEAgLTM1MSw3ICs0MDksNyBAQCBwdWJsaWM6CiAgICAgc3RhdGlj
IFN5bWJvbFRhYmxlKiBjcmVhdGVOYW1lU2NvcGVUYWJsZShWTSYgdm0sIGNvbnN0IElkZW50aWZp
ZXImIGlkZW50LCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQogICAgIHsKICAgICAgICAgU3ltYm9sVGFi
bGUqIHJlc3VsdCA9IGNyZWF0ZSh2bSk7Ci0gICAgICAgIHJlc3VsdC0+YWRkKGlkZW50LmltcGwo
KSwgU3ltYm9sVGFibGVFbnRyeSgtMSwgYXR0cmlidXRlcykpOworICAgICAgICByZXN1bHQtPmFk
ZChpZGVudC5pbXBsKCksIFN5bWJvbFRhYmxlRW50cnkoVmFyT2Zmc2V0KFNjb3BlT2Zmc2V0KDAp
KSwgYXR0cmlidXRlcykpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICAKQEAg
LTQyMyw5ICs0ODEsNTMgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gc2l6ZShsb2NrZXIpOwog
ICAgIH0KICAgICAKLSAgICBNYXA6OkFkZFJlc3VsdCBhZGQoY29uc3QgQ29uY3VycmVudEpJVExv
Y2tlciYsIFN0cmluZ0ltcGwqIGtleSwgY29uc3QgU3ltYm9sVGFibGVFbnRyeSYgZW50cnkpCisg
ICAgU2NvcGVPZmZzZXQgbWF4U2NvcGVPZmZzZXQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIG1fbWF4U2NvcGVPZmZzZXQ7CisgICAgfQorICAgIAorICAgIHZvaWQgZGlkVXNlU2NvcGVP
ZmZzZXQoU2NvcGVPZmZzZXQgb2Zmc2V0KQorICAgIHsKKyAgICAgICAgaWYgKCFtX21heFNjb3Bl
T2Zmc2V0IHx8IG1fbWF4U2NvcGVPZmZzZXQgPCBvZmZldCkKKyAgICAgICAgICAgIG1fbWF4U2Nv
cGVPZmZzZXQgPSBvZmZzZXQ7CisgICAgfQorICAgIAorICAgIHZvaWQgZGlkVXNlVmFyT2Zmc2V0
KFZhck9mZnNldCBvZmZzZXQpCisgICAgeworICAgICAgICBpZiAob2Zmc2V0LmlzU2NvcGUoKSkK
KyAgICAgICAgICAgIGRpZFVzZVNjb3BlT2Zmc2V0KG9mZnNldCk7CisgICAgfQorICAgIAorICAg
IHVuc2lnbmVkIHNjb3BlU2l6ZSgpIGNvbnN0CisgICAgeworICAgICAgICBTY29wZU9mZnNldCBt
YXhTY29wZU9mZnNldCA9IHRoaXMtPm1heFNjb3BlT2Zmc2V0KCk7CisgICAgICAgIAorICAgICAg
ICAvLyBEbyBzb21lIGNhbGN1bGF0aW9uIHRoYXQgcmVsaWVzIG9uIGludmFsaWQgc2NvcGUgb2Zm
c2V0IHBsdXMgb25lIGJlaW5nIHplcm8uCisgICAgICAgIHVuc2lnbmVkIGZhc3RSZXN1bHQgPSBt
YXhTY29wZU9mZnNldC5vZmZzZXRVbmNoZWNrZWQoKSArIDE7CisgICAgICAgIAorICAgICAgICAv
LyBBc3NlcnQgdGhhdCB0aGlzIHdvcmtzLgorICAgICAgICBBU1NFUlQoZmFzdFJlc3VsdCA9PSAo
IW1heFNjb3BlT2Zmc2V0ID8gMCA6IG1heFNjb3BlT2Zmc2V0Lm9mZnNldCgpICsgMSkpOworICAg
ICAgICAKKyAgICAgICAgcmV0dXJuIGZhc3RSZXN1bHQ7CisgICAgfQorICAgIAorICAgIFNjb3Bl
T2Zmc2V0IG5leHRTY29wZU9mZnNldCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gU2Nv
cGVPZmZzZXQoc2NvcGVTaXplKCkpOworICAgIH0KKyAgICAKKyAgICBTY29wZU9mZnNldCB0YWtl
TmV4dFNjb3BlT2Zmc2V0KCkKKyAgICB7CisgICAgICAgIFNjb3BlT2Zmc2V0IHJlc3VsdCA9IG5l
eHRTY29wZU9mZnNldCgpOworICAgICAgICBtX21heFNjb3BlT2Zmc2V0ID0gcmVzdWx0OworICAg
ICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICB2b2lkIGFkZChjb25zdCBDb25j
dXJyZW50SklUTG9ja2VyJiwgU3RyaW5nSW1wbCoga2V5LCBjb25zdCBTeW1ib2xUYWJsZUVudHJ5
JiBlbnRyeSkKICAgICB7Ci0gICAgICAgIHJldHVybiBtX21hcC5hZGQoa2V5LCBlbnRyeSk7Cisg
ICAgICAgIGRpZFVzZVZhck9mZnNldChlbnRyeS52YXJPZmZzZXQoKSk7CisgICAgICAgIE1hcDo6
QWRkUmVzdWx0IHJlc3VsdCA9IG1fbWFwLmFkZChrZXksIGVudHJ5KTsKKyAgICAgICAgQVNTRVJU
X1VOVVNFRChyZXN1bHQsIHJlc3VsdC5pc05ld0VudHJ5KTsKICAgICB9CiAgICAgCiAgICAgdm9p
ZCBhZGQoU3RyaW5nSW1wbCoga2V5LCBjb25zdCBTeW1ib2xUYWJsZUVudHJ5JiBlbnRyeSkKQEAg
LTQzNCw5ICs1MzYsMTAgQEAgcHVibGljOgogICAgICAgICBhZGQobG9ja2VyLCBrZXksIGVudHJ5
KTsKICAgICB9CiAgICAgCi0gICAgTWFwOjpBZGRSZXN1bHQgc2V0KGNvbnN0IENvbmN1cnJlbnRK
SVRMb2NrZXImLCBTdHJpbmdJbXBsKiBrZXksIGNvbnN0IFN5bWJvbFRhYmxlRW50cnkmIGVudHJ5
KQorICAgIHZvaWQgc2V0KGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImLCBTdHJpbmdJbXBsKiBr
ZXksIGNvbnN0IFN5bWJvbFRhYmxlRW50cnkmIGVudHJ5KQogICAgIHsKLSAgICAgICAgcmV0dXJu
IG1fbWFwLnNldChrZXksIGVudHJ5KTsKKyAgICAgICAgZGlkVXNlVmFyT2Zmc2V0KGVudHJ5LnZh
ck9mZnNldCgpKTsKKyAgICAgICAgbV9tYXAuc2V0KGtleSwgZW50cnkpOwogICAgIH0KICAgICAK
ICAgICB2b2lkIHNldChTdHJpbmdJbXBsKiBrZXksIGNvbnN0IFN5bWJvbFRhYmxlRW50cnkmIGVu
dHJ5KQpAQCAtNDU2LDYgKzU1OSw0NSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBjb250YWlu
cyhsb2NrZXIsIGtleSk7CiAgICAgfQogICAgIAorICAgIC8vIFRoZSBwcmluY2lwbGUgYmVoaW5k
IFNjb3BlZEFyZ3VtZW50c1RhYmxlIG1vZGlmaWNhdGlvbnMgaXMgdGhhdCB3ZSB3aWxsIGNyZWF0
ZSBvbmUgYW5kCisgICAgLy8gbGVhdmUgaXQgdW5sb2NrZWQgLSB0aGVyZWJ5IGFsbG93aW5nIGlu
LXBsYWNlIGNoYW5nZXMgLSB1bnRpbCBzb21lb25lIGFza3MgZm9yIGEgcG9pbnRlciB0bworICAg
IC8vIHRoZSB0YWJsZS4gVGhlbiwgd2Ugd2lsbCBsb2NrIGl0LiBUaGVuIGJvdGggb3VyIGZ1dHVy
ZSBjaGFuZ2VzIGFuZCB0aGVpciBmdXR1cmUgY2hhbmdlcworICAgIC8vIHdpbGwgZmlyc3QgaGF2
ZSB0byBtYWtlIGEgY29weS4gVGhpcyBkaXNjaXBsaW5lIG1lYW5zIHRoYXQgdXN1YWxseSB3aGVu
IHdlIGNyZWF0ZSBhCisgICAgLy8gU2NvcGVkQXJndW1lbnRzIG9iamVjdCwgd2UgZG9uJ3QgaGF2
ZSB0byBtYWtlIGEgY29weSBvZiB0aGUgU2NvcGVkQXJndW1lbnRzVGFibGUgLSBpbnN0ZWFkCisg
ICAgLy8gd2UganVzdCB0YWtlIGEgcmVmZXJlbmNlIHRvIG9uZSB0aGF0IHdlIGFscmVhZHkgaGF2
ZS4KKyAgICAKKyAgICB1aW50MzJfdCBhcmd1bWVudHNMZW5ndGgoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgaWYgKCFtX2FyZ3VtZW50cykKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBy
ZXR1cm4gbV9hcmd1bWVudHMtPmxlbmd0aCgpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNldEFy
Z3VtZW50c0xlbmd0aChWTSYgdm0sIHVpbnQzMl90IGxlbmd0aCkKKyAgICB7CisgICAgICAgIGlm
IChVTkxJS0VMWSghbV9hcmd1bWVudHMpKQorICAgICAgICAgICAgbV9hcmd1bWVudHMuc2V0KHZt
LCB0aGlzLCBTY29wZWRBcmd1bWVudHNUYWJsZTo6Y3JlYXRlKHZtKSk7CisgICAgICAgIG1fYXJn
dW1lbnRzLnNldCh2bSwgdGhpcywgbV9hcmd1bWVudHMtPnNldExlbmd0aCh2bSwgbGVuZ3RoKSk7
CisgICAgfQorICAgIAorICAgIFNjb3BlT2Zmc2V0IGFyZ3VtZW50T2Zmc2V0KHVpbnQzMl90IGkp
IGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTiht
X2FyZ3VtZW50cyk7CisgICAgICAgIHJldHVybiBtX2FyZ3VtZW50cy0+Z2V0KGkpOworICAgIH0K
KyAgICAKKyAgICB2b2lkIHNldEFyZ3VtZW50T2Zmc2V0KFZNJiB2bSwgdWludDMyX3QgaSwgU2Nv
cGVPZmZzZXQgb2Zmc2V0KQorICAgIHsKKyAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1Q
TElDQVRJT04obV9hcmd1bWVudHMpOworICAgICAgICBtX2FyZ3VtZW50cy5zZXQodm0sIHRoaXMs
IG1fYXJndW1lbnRzLT5zZXQodm0sIGksIG9mZnNldCkpOworICAgIH0KKyAgICAKKyAgICBTY29w
ZWRBcmd1bWVudHNUYWJsZSogYXJndW1lbnRzKCkgY29uc3QKKyAgICB7CisgICAgICAgIG1fYXJn
dW1lbnRzLT5sb2NrKCk7CisgICAgICAgIHJldHVybiBtX2FyZ3VtZW50cy5nZXQoKTsKKyAgICB9
CisgICAgCiAgICAgR2xvYmFsVmFyaWFibGVJRCB1bmlxdWVJREZvclZhcmlhYmxlKGNvbnN0IENv
bmN1cnJlbnRKSVRMb2NrZXImLCBTdHJpbmdJbXBsKiBrZXksIFZNJiB2bSk7CiAgICAgR2xvYmFs
VmFyaWFibGVJRCB1bmlxdWVJREZvclJlZ2lzdGVyKGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXIm
IGxvY2tlciwgaW50IHJlZ2lzdGVySW5kZXgsIFZNJiB2bSk7CiAgICAgUmVmUHRyPFR5cGVTZXQ+
IGdsb2JhbFR5cGVTZXRGb3JSZWdpc3Rlcihjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiBsb2Nr
ZXIsIGludCByZWdpc3RlckluZGV4LCBWTSYgdm0pOwpAQCAtNDY0LDI4ICs2MDYsNyBAQCBwdWJs
aWM6CiAgICAgYm9vbCB1c2VzTm9uU3RyaWN0RXZhbCgpIHsgcmV0dXJuIG1fdXNlc05vblN0cmlj
dEV2YWw7IH0KICAgICB2b2lkIHNldFVzZXNOb25TdHJpY3RFdmFsKGJvb2wgdXNlc05vblN0cmlj
dEV2YWwpIHsgbV91c2VzTm9uU3RyaWN0RXZhbCA9IHVzZXNOb25TdHJpY3RFdmFsOyB9CiAKLSAg
ICBpbnQgY2FwdHVyZVN0YXJ0KCkgY29uc3QgeyByZXR1cm4gbV9jYXB0dXJlU3RhcnQ7IH0KLSAg
ICB2b2lkIHNldENhcHR1cmVTdGFydChpbnQgY2FwdHVyZVN0YXJ0KSB7IG1fY2FwdHVyZVN0YXJ0
ID0gY2FwdHVyZVN0YXJ0OyB9Ci0KLSAgICBpbnQgY2FwdHVyZUVuZCgpIGNvbnN0IHsgcmV0dXJu
IG1fY2FwdHVyZUVuZDsgfQotICAgIHZvaWQgc2V0Q2FwdHVyZUVuZChpbnQgY2FwdHVyZUVuZCkg
eyBtX2NhcHR1cmVFbmQgPSBjYXB0dXJlRW5kOyB9Ci0KLSAgICBpbnQgY2FwdHVyZUNvdW50KCkg
Y29uc3QgeyByZXR1cm4gLShtX2NhcHR1cmVFbmQgLSBtX2NhcHR1cmVTdGFydCk7IH0KLSAgICAK
LSAgICBib29sIGlzQ2FwdHVyZWQoaW50IG9wZXJhbmQpCi0gICAgewotICAgICAgICByZXR1cm4g
b3BlcmFuZCA8PSBjYXB0dXJlU3RhcnQoKSAmJiBvcGVyYW5kID4gY2FwdHVyZUVuZCgpOwotICAg
IH0KLQotICAgIGludCBwYXJhbWV0ZXJDb3VudCgpIHsgcmV0dXJuIG1fcGFyYW1ldGVyQ291bnRJ
bmNsdWRpbmdUaGlzIC0gMTsgfQotICAgIGludCBwYXJhbWV0ZXJDb3VudEluY2x1ZGluZ1RoaXMo
KSB7IHJldHVybiBtX3BhcmFtZXRlckNvdW50SW5jbHVkaW5nVGhpczsgfQotICAgIHZvaWQgc2V0
UGFyYW1ldGVyQ291bnRJbmNsdWRpbmdUaGlzKGludCBwYXJhbWV0ZXJDb3VudEluY2x1ZGluZ1Ro
aXMpIHsgbV9wYXJhbWV0ZXJDb3VudEluY2x1ZGluZ1RoaXMgPSBwYXJhbWV0ZXJDb3VudEluY2x1
ZGluZ1RoaXM7IH0KLQotICAgIC8vIDAgaWYgd2UgZG9uJ3QgY2FwdHVyZSBhbnkgYXJndW1lbnRz
OyBwYXJhbWV0ZXJDb3VudCgpIGluIGxlbmd0aCBpZiB3ZSBkby4KLSAgICBjb25zdCBTbG93QXJn
dW1lbnQqIHNsb3dBcmd1bWVudHMoKSB7IHJldHVybiBtX3Nsb3dBcmd1bWVudHMuZ2V0KCk7IH0K
LSAgICB2b2lkIHNldFNsb3dBcmd1bWVudHMoc3RkOjp1bmlxdWVfcHRyPFNsb3dBcmd1bWVudFtd
PiBzbG93QXJndW1lbnRzKSB7IG1fc2xvd0FyZ3VtZW50cyA9IFdURjo6bW92ZShzbG93QXJndW1l
bnRzKTsgfQotICAgIAotICAgIFN5bWJvbFRhYmxlKiBjbG9uZUNhcHR1cmVkTmFtZXMoVk0mKTsK
KyAgICBTeW1ib2xUYWJsZSogY2xvbmVTY29wZVBhcnQoVk0mKTsKIAogICAgIHZvaWQgcHJlcGFy
ZUZvclR5cGVQcm9maWxpbmcoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYpOwogCkBAIC01MTMs
NiArNjM0LDggQEAgcHJpdmF0ZToKICAgICB+U3ltYm9sVGFibGUoKTsKIAogICAgIE1hcCBtX21h
cDsKKyAgICBTY29wZU9mZnNldCBtX21heFNjb3BlT2Zmc2V0OworICAgIAogICAgIHN0cnVjdCBU
eXBlUHJvZmlsaW5nUmFyZURhdGEgewogICAgICAgICBVbmlxdWVJRE1hcCBtX3VuaXF1ZUlETWFw
OwogICAgICAgICBSZWdpc3RlclRvVmFyaWFibGVNYXAgbV9yZWdpc3RlclRvVmFyaWFibGVNYXA7
CkBAIC01MjAsMTMgKzY0Myw5IEBAIHByaXZhdGU6CiAgICAgfTsKICAgICBzdGQ6OnVuaXF1ZV9w
dHI8VHlwZVByb2ZpbGluZ1JhcmVEYXRhPiBtX3R5cGVQcm9maWxpbmdSYXJlRGF0YTsKIAotICAg
IGludCBtX3BhcmFtZXRlckNvdW50SW5jbHVkaW5nVGhpczsKICAgICBib29sIG1fdXNlc05vblN0
cmljdEV2YWw7Ci0KLSAgICBpbnQgbV9jYXB0dXJlU3RhcnQ7Ci0gICAgaW50IG1fY2FwdHVyZUVu
ZDsKLQotICAgIHN0ZDo6dW5pcXVlX3B0cjxTbG93QXJndW1lbnRbXT4gbV9zbG93QXJndW1lbnRz
OworICAgIAorICAgIFdyaXRlQmFycmllcjxTY29wZWRBcmd1bWVudHNUYWJsZT4gbV9hcmd1bWVu
dHM7CiAgICAgCiAgICAgc3RkOjp1bmlxdWVfcHRyPFdhdGNocG9pbnRDbGVhbnVwPiBtX3dhdGNo
cG9pbnRDbGVhbnVwOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WYXJP
ZmZzZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Zh
ck9mZnNldC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9WYXJPZmZzZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzYgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIlZhck9mZnNldC5oIgorCituYW1lc3BhY2UgSlNDIHsKKwordm9pZCBWYXJP
ZmZzZXQ6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKG1fa2lu
ZCkgeworICAgIGNhc2UgSW52YWxpZFZhcktpbmQ6CisgICAgICAgIG91dC5wcmludCgiaW52YWxp
ZCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBTY29wZVZhcktpbmQ6CisgICAgICAgIG91
dC5wcmludChzY29wZU9mZnNldCgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU3RhY2tW
YXJLaW5kOgorICAgICAgICBvdXQucHJpbnQoc3RhY2tPZmZzZXQoKSk7CisgICAgICAgIHJldHVy
bjsKKyAgICBjYXNlIENhcHR1cmVkQXJndW1lbnRLaW5kOgorICAgICAgICBvdXQucHJpbnQoY2Fw
dHVyZWRBcmd1bWVudE9mZnNldCgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworbmFt
ZXNwYWNlIFdURiB7CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M7CisKK3ZvaWQgcHJpbnRJbnRlcm5h
bChQcmludFN0cmVhbSYgb3V0LCBWYXJLaW5kIHZhcktpbmQpCit7CisgICAgc3dpdGNoICh2YXJL
aW5kKSB7CisgICAgY2FzZSBJbnZhbGlkVmFyS2luZDoKKyAgICAgICAgb3V0LnByaW50KCJJbnZh
bGlkIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFNjb3BlVmFyS2luZDoKKyAgICAgICAg
b3V0LnByaW50KCJTY29wZSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBTdGFja1Zhcktp
bmQ6CisgICAgICAgIG91dC5wcmludCgiU3RhY2siKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNh
c2UgQ2FwdHVyZWRBcmd1bWVudEtpbmQ6CisgICAgICAgIG91dC5wcmludCgiQ2FwdHVyZWRBcmd1
bWVudCIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9WYXJPZmZzZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9WYXJPZmZzZXQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1Zhck9mZnNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MjE0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgVmFyT2Zmc2V0X2gKKyNkZWZpbmUgVmFyT2Zmc2V0X2gKKworI2luY2x1ZGUgIkNhcHR1
cmVkQXJndW1lbnRzT2Zmc2V0LmgiCisjaW5jbHVkZSAiU2NvcGVPZmZzZXQuaCIKKyNpbmNsdWRl
ICJWaXJ0dWFsUmVnaXN0ZXIuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2VudW0gVmFyS2luZCA6
IHVpbnQ4X3QgeworICAgIEludmFsaWRWYXJLaW5kLAorICAgIFNjb3BlVmFyS2luZCwKKyAgICBT
dGFja1ZhcktpbmQsCisgICAgQ2FwdHVyZWRBcmd1bWVudEtpbmQKK307CisKK2NsYXNzIFZhck9m
ZnNldCB7CitwdWJsaWM6CisgICAgVmFyT2Zmc2V0KCkKKyAgICAgICAgOiBtX2tpbmQoSW52YWxp
ZFZhcktpbmQpCisgICAgICAgICwgbV9vZmZzZXQoVUlOVF9NQVgpCisgICAgeworICAgIH0KKyAg
ICAKKyAgICBleHBsaWNpdCBWYXJPZmZzZXQoVmlydHVhbFJlZ2lzdGVyIHN0YWNrT2Zmc2V0KQor
ICAgIHsKKyAgICAgICAgaWYgKCFzdGFja09mZnNldC5pc1ZhbGlkKCkpIHsKKyAgICAgICAgICAg
IG1fa2luZCA9IEludmFsaWRWYXJLaW5kOworICAgICAgICAgICAgbV9vZmZzZXQgPSBVSU5UX01B
WDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1fa2luZCA9IFN0YWNrVmFyS2luZDsK
KyAgICAgICAgICAgIG1fb2Zmc2V0ID0gc3RhY2tPZmZzZXQub2Zmc2V0KCk7CisgICAgICAgIH0K
KyAgICB9CisgICAgCisgICAgZXhwbGljaXQgVmFyT2Zmc2V0KFNjb3BlT2Zmc2V0IHNjb3BlT2Zm
c2V0KQorICAgIHsKKyAgICAgICAgaWYgKCFzY29wZU9mZnNldCkgeworICAgICAgICAgICAgbV9r
aW5kID0gSW52YWxpZFZhcktpbmQ7CisgICAgICAgICAgICBtX29mZnNldCA9IFVJTlRfTUFYOwor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbV9raW5kID0gU2NvcGVWYXJLaW5kOworICAg
ICAgICAgICAgbV9vZmZzZXQgPSBzY29wZU9mZnNldC5vZmZzZXQoKTsKKyAgICAgICAgfQorICAg
IH0KKyAgICAKKyAgICBleHBsaWNpdCBWYXJPZmZzZXQoQ2FwdHVyZWRBcmd1bWVudHNPZmZzZXQg
Y2FwdHVyZWRBcmd1bWVudHNPZmZzZXQpCisgICAgeworICAgICAgICBpZiAoIWNhcHR1cmVkQXJn
dW1lbnRzT2Zmc2V0KSB7CisgICAgICAgICAgICBtX2tpbmQgPSBJbnZhbGlkVmFyS2luZDsKKyAg
ICAgICAgICAgIG1fb2Zmc2V0ID0gVUlOVF9NQVg7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICBtX2tpbmQgPSBDYXB0dXJlZEFyZ3VtZW50S2luZDsKKyAgICAgICAgICAgIG1fb2Zmc2V0
ID0gY2FwdHVyZWRBcmd1bWVudHNPZmZzZXQub2Zmc2V0KCk7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgCisgICAgc3RhdGljIFZhck9mZnNldCBhc3NlbWJsZShWYXJLaW5kIGtpbmQsIHVuc2lnbmVk
IG9mZnNldCkKKyAgICB7CisgICAgICAgIFZhck9mZnNldCByZXN1bHQ7CisgICAgICAgIHJlc3Vs
dC5tX2tpbmQgPSBraW5kOworICAgICAgICByZXN1bHQubV9vZmZzZXQgPSBvZmZzZXQ7CisgICAg
ICAgIHJlc3VsdC5jaGVja1Nhbml0eSgpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0K
KyAgICAKKyAgICBib29sIGlzVmFsaWQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1f
a2luZCAhPSBJbnZhbGlkVmFyS2luZDsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvciEo
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICFpc1ZhbGlkKCk7CisgICAgfQorICAgIAor
ICAgIFZhcktpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQorICAgIAorICAgIGJv
b2wgaXNTdGFjaygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9raW5kID09IFN0YWNr
VmFyS2luZDsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc1Njb3BlKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBtX2tpbmQgPT0gU2NvcGVWYXJLaW5kOworICAgIH0KKyAgICAKKyAgICBi
b29sIGlzQ2FwdHVyZWRBcmd1bWVudCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9r
aW5kID09IENhcHR1cmVkQXJndW1lbnRLaW5kOworICAgIH0KKyAgICAKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgc3RhY2tPZmZzZXRVbmNoZWNrZWQoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKCFp
c1N0YWNrKCkpCisgICAgICAgICAgICByZXR1cm4gVmlydHVhbFJlZ2lzdGVyKCk7CisgICAgICAg
IHJldHVybiBWaXJ0dWFsUmVnaXN0ZXIobV9vZmZzZXQpOworICAgIH0KKyAgICAKKyAgICBTY29w
ZU9mZnNldCBzY29wZU9mZnNldFVuY2hlY2tlZCgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAo
IWlzU2NvcGUoKSkKKyAgICAgICAgICAgIHJldHVybiBTY29wZU9mZnNldCgpOworICAgICAgICBy
ZXR1cm4gU2NvcGVPZmZzZXQobV9vZmZzZXQpOworICAgIH0KKyAgICAKKyAgICBDYXB0dXJlZEFy
Z3VtZW50c09mZnNldCBjYXB0dXJlZEFyZ3VtZW50c09mZnNldFVuY2hlY2tlZCgpIGNvbnN0Cisg
ICAgeworICAgICAgICBpZiAoIWlzQ2FwdHVyZWRBcmd1bWVudCgpKQorICAgICAgICAgICAgcmV0
dXJuIENhcHR1cmVkQXJndW1lbnRzT2Zmc2V0KCk7CisgICAgICAgIHJldHVybiBDYXB0dXJlZEFy
Z3VtZW50c09mZnNldChtX29mZnNldCk7CisgICAgfQorICAgIAorICAgIFZpcnR1YWxSZWdpc3Rl
ciBzdGFja09mZnNldCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaXNTdGFjaygpKTsK
KyAgICAgICAgcmV0dXJuIFZpcnR1YWxSZWdpc3RlcihtX29mZnNldCk7CisgICAgfQorICAgIAor
ICAgIFNjb3BlT2Zmc2V0IHNjb3BlT2Zmc2V0KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VS
VChpc1Njb3BlKCkpOworICAgICAgICByZXR1cm4gU2NvcGVPZmZzZXQobV9vZmZzZXQpOworICAg
IH0KKyAgICAKKyAgICBDYXB0dXJlZEFyZ3VtZW50c09mZnNldCBjYXB0dXJlZEFyZ3VtZW50c09m
ZnNldCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaXNDYXB0dXJlZEFyZ3VtZW50KCkp
OworICAgICAgICByZXR1cm4gQ2FwdHVyZWRBcmd1bWVudHNPZmZzZXQobV9vZmZzZXQpOworICAg
IH0KKyAgICAKKyAgICB1bnNpZ25lZCByYXdPZmZzZXQoKSBjb25zdAorICAgIHsKKyAgICAgICAg
QVNTRVJUKGlzVmFsaWQoKSk7CisgICAgICAgIHJldHVybiBtX29mZnNldDsKKyAgICB9CisgICAg
CisgICAgdm9pZCBjaGVja1Nhbml0eSgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoQVNTRVJU
X0RJU0FCTEVEKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgc3dpdGNo
IChtX2tpbmQpIHsKKyAgICAgICAgY2FzZSBJbnZhbGlkVmFyS2luZDoKKyAgICAgICAgICAgIEFT
U0VSVChtX29mZnNldCA9PSBVSU5UX01BWCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IGNhc2UgU2NvcGVWYXJLaW5kOgorICAgICAgICAgICAgQVNTRVJUKHNjb3BlT2Zmc2V0KCkpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIFN0YWNrVmFyS2luZDoKKyAgICAgICAg
ICAgIEFTU0VSVChzdGFja09mZnNldCgpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
Y2FzZSBDYXB0dXJlZEFyZ3VtZW50S2luZDoKKyAgICAgICAgICAgIEFTU0VSVChjYXB0dXJlZEFy
Z3VtZW50c09mZnNldCgpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorICAgIAorICAgIGJvb2wg
b3BlcmF0b3I9PShjb25zdCBWYXJPZmZzZXQmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIG1fa2luZCA9PSBvdGhlci5tX2tpbmQKKyAgICAgICAgICAgICYmIG1fb2Zmc2V0ID09
IG90aGVyLm1fb2Zmc2V0OworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3Qg
VmFyT2Zmc2V0JiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhKCp0aGlzID09
IG90aGVyKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7
CisgICAgCitwcml2YXRlOgorICAgIFZhcktpbmQgbV9raW5kOworICAgIHVuc2lnbmVkIG1fb2Zm
c2V0OworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKK25hbWVzcGFjZSBXVEYgeworCit2b2lk
IHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OlZhcktpbmQpOworCit9IC8vIG5hbWVz
cGFjZSBXVEYKKworI2VuZGlmIC8vIFZhck9mZnNldF9oCisK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>247651</attachid>
            <date>2015-03-01 20:35:50 -0800</date>
            <delta_ts>2015-03-01 20:48:35 -0800</delta_ts>
            <desc>NodesCodegen is done?</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>294670</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2Vt
Ymxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJz
dHJhY3RNYWNyb0Fzc2VtYmxlci5oCShyZXZpc2lvbiAxODA4NzUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMjA1LDYgKzIwNSwxMSBAQCBwdWJsaWM6CiAgICAgICAgIFJlZ2lzdGVySUQgaW5kZXg7
CiAgICAgICAgIFNjYWxlIHNjYWxlOwogICAgICAgICBpbnQzMl90IG9mZnNldDsKKyAgICAgICAg
CisgICAgICAgIEJhc2VJbmRleCB3aXRoT2Zmc2V0KGludDMyX3QgYWRkaXRpb25hbE9mZnNldCkK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEJhc2VJbmRleChiYXNlLCBpbmRleCwgc2Nh
bGUsIG9mZnNldCArIGFkZGl0aW9uYWxPZmZzZXQpOworICAgICAgICB9CiAgICAgfTsKIAogICAg
IC8vIEFic29sdXRlQWRkcmVzczoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9CeVZhbEluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQnlWYWxJbmZvLmgJKHJldmlzaW9uIDE4MDg3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9CeVZhbEluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDEsNiArNDEsOCBAQCBlbnVt
IEpJVEFycmF5TW9kZSB7CiAgICAgSklURG91YmxlLAogICAgIEpJVENvbnRpZ3VvdXMsCiAgICAg
SklUQXJyYXlTdG9yYWdlLAorICAgIEpJVERpcmVjdEFyZ3VtZW50cywKKyAgICBKSVRTY29wZWRB
cmd1bWVudHMsCiAgICAgSklUSW50OEFycmF5LAogICAgIEpJVEludDE2QXJyYXksCiAgICAgSklU
SW50MzJBcnJheSwKQEAgLTY1LDYgKzY3LDE3IEBAIGlubGluZSBib29sIGlzT3B0aW1pemFibGVJ
bmRleGluZ1R5cGUoSW4KICAgICB9CiB9CiAKK2lubGluZSBib29sIGhhc09wdGltaXphYmxlSW5k
ZXhpbmdGb3JKU1R5cGUoSlNUeXBlIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAg
Y2FzZSBEaXJlY3RBcmd1bWVudHNUeXBlOgorICAgIGNhc2UgU2NvcGVkQXJndW1lbnRzVHlwZToK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KK30KKwogaW5saW5lIGJvb2wgaGFzT3B0aW1pemFibGVJbmRleGluZ0ZvckNsYXNz
SW5mbyhjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbykKIHsKICAgICByZXR1cm4gaXNUeXBlZFZp
ZXcoY2xhc3NJbmZvLT50eXBlZEFycmF5U3RvcmFnZVR5cGUpOwpAQCAtNzMsNiArODYsNyBAQCBp
bmxpbmUgYm9vbCBoYXNPcHRpbWl6YWJsZUluZGV4aW5nRm9yQ2xhCiBpbmxpbmUgYm9vbCBoYXNP
cHRpbWl6YWJsZUluZGV4aW5nKFN0cnVjdHVyZSogc3RydWN0dXJlKQogewogICAgIHJldHVybiBp
c09wdGltaXphYmxlSW5kZXhpbmdUeXBlKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpCisgICAg
ICAgIHx8IGhhc09wdGltaXphYmxlSW5kZXhpbmdGb3JKU1R5cGUoc3RydWN0dXJlLT50eXBlSW5m
bygpLnR5cGUoKSkKICAgICAgICAgfHwgaGFzT3B0aW1pemFibGVJbmRleGluZ0ZvckNsYXNzSW5m
byhzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpKTsKIH0KIApAQCAtOTMsNiArMTA3LDE5IEBAIGlubGlu
ZSBKSVRBcnJheU1vZGUgaml0QXJyYXlNb2RlRm9ySW5kZXgKICAgICB9CiB9CiAKK2lubGluZSBK
SVRBcnJheU1vZGUgaml0QXJyYXlNb2RlRm9ySlNUeXBlKEpTVHlwZSB0eXBlKQoreworICAgIHN3
aXRjaCAodHlwZSkgeworICAgIGNhc2UgRGlyZWN0QXJndW1lbnRzVHlwZToKKyAgICAgICAgcmV0
dXJuIEpJVERpcmVjdEFyZ3VtZW50czsKKyAgICBjYXNlIFNjb3BlZEFyZ3VtZW50c1R5cGU6Cisg
ICAgICAgIHJldHVybiBKSVRTY29wZWRBcmd1bWVudHM7CisgICAgZGVmYXVsdDoKKyAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIEpJVENvbnRpZ3Vv
dXM7CisgICAgfQorfQorCiBpbmxpbmUgSklUQXJyYXlNb2RlIGppdEFycmF5TW9kZUZvckNsYXNz
SW5mbyhjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbykKIHsKICAgICBzd2l0Y2ggKGNsYXNzSW5m
by0+dHlwZWRBcnJheVN0b3JhZ2VUeXBlKSB7CkBAIC0xMjAsNiArMTQ3LDE5IEBAIGlubGluZSBK
SVRBcnJheU1vZGUgaml0QXJyYXlNb2RlRm9yQ2xhc3MKICAgICB9CiB9CiAKK2lubGluZSBib29s
IGppdEFycmF5TW9kZVBlcm1pdHNQdXQoSklUQXJyYXlNb2RlIG1vZGUpCit7CisgICAgc3dpdGNo
IChtb2RlKSB7CisgICAgY2FzZSBKSVREaXJlY3RBcmd1bWVudHM6CisgICAgY2FzZSBKSVRTY29w
ZWRBcmd1bWVudHM6CisgICAgICAgIC8vIFdlIGNvdWxkIHN1cHBvcnQgcHV0X2J5X3ZhbCBvbiB0
aGVzZSBhdCBzb21lIHBvaW50LCBidXQgaXQncyBqdXN0IG5vdCB0aGF0IHByb2ZpdGFibGUKKyAg
ICAgICAgLy8gYXQgdGhlIG1vbWVudC4KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGRlZmF1
bHQ6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KK30KKwogaW5saW5lIFR5cGVkQXJyYXlU
eXBlIHR5cGVkQXJyYXlUeXBlRm9ySklUQXJyYXlNb2RlKEpJVEFycmF5TW9kZSBtb2RlKQogewog
ICAgIHN3aXRjaCAobW9kZSkgewpAQCAtMTUyLDYgKzE5Miw5IEBAIGlubGluZSBKSVRBcnJheU1v
ZGUgaml0QXJyYXlNb2RlRm9yU3RydWMKICAgICBpZiAoaXNPcHRpbWl6YWJsZUluZGV4aW5nVHlw
ZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSkKICAgICAgICAgcmV0dXJuIGppdEFycmF5TW9k
ZUZvckluZGV4aW5nVHlwZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKTsKICAgICAKKyAgICBp
ZiAoaGFzT3B0aW1pemFibGVJbmRleGluZ0ZvckpTVHlwZShzdHJ1Y3R1cmUtPnR5cGVJbmZvKCku
dHlwZSgpKSkKKyAgICAgICAgcmV0dXJuIGppdEFycmF5TW9kZUZvckpTVHlwZShzdHJ1Y3R1cmUt
PnR5cGVJbmZvKCkudHlwZSgpKTsKKyAgICAKICAgICBBU1NFUlQoaGFzT3B0aW1pemFibGVJbmRl
eGluZ0ZvckNsYXNzSW5mbyhzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpKSk7CiAgICAgcmV0dXJuIGpp
dEFycmF5TW9kZUZvckNsYXNzSW5mbyhzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpKTsKIH0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QuanNvbgo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0Lmpzb24J
KHJldmlzaW9uIDE4MDg3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRl
Y29kZUxpc3QuanNvbgkod29ya2luZyBjb3B5KQpAQCAtOCw3ICs4LDkgQEAKICAgICAgICAgICAg
IHsgIm5hbWUiIDogIm9wX2dldF9zY29wZSIsICJsZW5ndGgiIDogMiB9LAogICAgICAgICAgICAg
eyAibmFtZSIgOiAib3BfdG91Y2hfZW50cnkiLCAibGVuZ3RoIiA6IDEgfSwKICAgICAgICAgICAg
IHsgIm5hbWUiIDogIm9wX2luaXRfbGF6eV9yZWciLCAibGVuZ3RoIiA6IDIgfSwKLSAgICAgICAg
ICAgIHsgIm5hbWUiIDogIm9wX2NyZWF0ZV9hcmd1bWVudHMiLCAibGVuZ3RoIiA6IDMgfSwKKyAg
ICAgICAgICAgIHsgIm5hbWUiIDogIm9wX2NyZWF0ZV9kaXJlY3RfYXJndW1lbnRzIiwgImxlbmd0
aCIgOiAyIH0sIC8vIGp1c3QgdGFrZXMgdGhlIGRzdCByZWdpc3RlcgorICAgICAgICAgICAgeyAi
bmFtZSIgOiAib3BfY3JlYXRlX3Njb3BlZF9hcmd1bWVudHMiLCAibGVuZ3RoIiA6IDMgfSwgLy8g
ZHN0LCBzY29wZVJlZ2lzdGVyLCBpbXBsaWNpdGx5IHVzZXMgdGhlIFNjb3BlZEFyZ3VtZW50c1Rh
YmxlIGluIHRoZSBTeW1ib2xUYWJsZSBvZiB0aGUgQ29kZUJsb2NrCisgICAgICAgICAgICB7ICJu
YW1lIiA6ICJvcF9jcmVhdGVfb3V0X29mX2JhbmRfYXJndW1lbnRzIiwgImxlbmd0aCIgOiAyIH0s
CiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9jcmVhdGVfdGhpcyIsICJsZW5ndGgiIDogNCB9
LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfZ2V0X2NhbGxlZSIsICJsZW5ndGgiIDogMyB9
LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfdG9fdGhpcyIsICJsZW5ndGgiIDogNCB9LApA
QCAtNjEsNyArNjMsNiBAQAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfZ2V0X2J5X2lkIiwg
Imxlbmd0aCIgOiA5ICB9LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfZ2V0X2J5X2lkX291
dF9vZl9saW5lIiwgImxlbmd0aCIgOiA5ICB9LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3Bf
Z2V0X2FycmF5X2xlbmd0aCIsICJsZW5ndGgiIDogOSB9LAotICAgICAgICAgICAgeyAibmFtZSIg
OiAib3BfZ2V0X2FyZ3VtZW50c19sZW5ndGgiLCAibGVuZ3RoIiA6IDQgfSwKICAgICAgICAgICAg
IHsgIm5hbWUiIDogIm9wX3B1dF9ieV9pZCIsICJsZW5ndGgiIDogOSB9LAogICAgICAgICAgICAg
eyAibmFtZSIgOiAib3BfcHV0X2J5X2lkX291dF9vZl9saW5lIiwgImxlbmd0aCIgOiA5IH0sCiAg
ICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9wdXRfYnlfaWRfdHJhbnNpdGlvbl9kaXJlY3QiLCAi
bGVuZ3RoIiA6IDkgfSwKQEAgLTcwLDcgKzcxLDYgQEAKICAgICAgICAgICAgIHsgIm5hbWUiIDog
Im9wX3B1dF9ieV9pZF90cmFuc2l0aW9uX25vcm1hbF9vdXRfb2ZfbGluZSIsICJsZW5ndGgiIDog
OSB9LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfZGVsX2J5X2lkIiwgImxlbmd0aCIgOiA0
IH0sCiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9nZXRfYnlfdmFsIiwgImxlbmd0aCIgOiA2
IH0sCi0gICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9nZXRfYXJndW1lbnRfYnlfdmFsIiwgImxl
bmd0aCIgOiA3IH0sCiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9wdXRfYnlfdmFsIiwgImxl
bmd0aCIgOiA1IH0sCiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9wdXRfYnlfdmFsX2RpcmVj
dCIsICJsZW5ndGgiIDogNSB9LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfZGVsX2J5X3Zh
bCIsICJsZW5ndGgiIDogNCB9LApAQCAtOTQsMTIgKzk0LDExIEBACiAgICAgICAgICAgICB7ICJu
YW1lIiA6ICJvcF9zd2l0Y2hfaW1tIiwgImxlbmd0aCIgOiA0IH0sCiAgICAgICAgICAgICB7ICJu
YW1lIiA6ICJvcF9zd2l0Y2hfY2hhciIsICJsZW5ndGgiIDogNCB9LAogICAgICAgICAgICAgeyAi
bmFtZSIgOiAib3Bfc3dpdGNoX3N0cmluZyIsICJsZW5ndGgiIDogNCB9LAotICAgICAgICAgICAg
eyAibmFtZSIgOiAib3BfbmV3X2Z1bmMiLCAibGVuZ3RoIiA6IDUgfSwKKyAgICAgICAgICAgIHsg
Im5hbWUiIDogIm9wX25ld19mdW5jIiwgImxlbmd0aCIgOiA0IH0sCiAgICAgICAgICAgICB7ICJu
YW1lIiA6ICJvcF9uZXdfZnVuY19leHAiLCAibGVuZ3RoIiA6IDQgfSwKICAgICAgICAgICAgIHsg
Im5hbWUiIDogIm9wX2NhbGwiLCAibGVuZ3RoIiA6IDkgfSwKICAgICAgICAgICAgIHsgIm5hbWUi
IDogIm9wX2NhbGxfZXZhbCIsICJsZW5ndGgiIDogOSB9LAogICAgICAgICAgICAgeyAibmFtZSIg
OiAib3BfY2FsbF92YXJhcmdzIiwgImxlbmd0aCIgOiA5IH0sCi0gICAgICAgICAgICB7ICJuYW1l
IiA6ICJvcF90ZWFyX29mZl9hcmd1bWVudHMiLCAibGVuZ3RoIiA6IDMgfSwKICAgICAgICAgICAg
IHsgIm5hbWUiIDogIm9wX3JldCIsICJsZW5ndGgiIDogMiB9LAogICAgICAgICAgICAgeyAibmFt
ZSIgOiAib3BfY29uc3RydWN0IiwgImxlbmd0aCIgOiA5IH0sCiAgICAgICAgICAgICB7ICJuYW1l
IiA6ICJvcF9jb25zdHJ1Y3RfdmFyYXJncyIsICJsZW5ndGgiIDogOSB9LApAQCAtMTA4LDYgKzEw
Nyw4IEBACiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9yZXNvbHZlX3Njb3BlIiwgImxlbmd0
aCIgOiA3IH0sCiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9nZXRfZnJvbV9zY29wZSIsICJs
ZW5ndGgiIDogOCB9LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfcHV0X3RvX3Njb3BlIiwg
Imxlbmd0aCIgOiA3IH0sCisgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9nZXRfZnJvbV9hcmd1
bWVudHMiLCAibGVuZ3RoIiA6IDUgfSwgLy8gZHN0LCBhcmd1bWVudHMsIGluZGV4LCBwcm9maWxl
CisgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9wdXRfdG9fYXJndW1lbnRzIiwgImxlbmd0aCIg
OiA0IH0sIC8vIGFyZ3VtZW50cywgaW5kZXgsIHNyYwogICAgICAgICAgICAgeyAibmFtZSIgOiAi
b3BfcHVzaF93aXRoX3Njb3BlIiwgImxlbmd0aCIgOiAzIH0sCiAgICAgICAgICAgICB7ICJuYW1l
IiA6ICJvcF9wb3Bfc2NvcGUiLCAibGVuZ3RoIiA6IDIgfSwKICAgICAgICAgICAgIHsgIm5hbWUi
IDogIm9wX3B1c2hfbmFtZV9zY29wZSIsICJsZW5ndGgiIDogNSB9LApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDE4MDg3NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01NjksMTcgKzU2OSw2IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wQnl0ZWNvZGUo
UHJpbnRTdHJlYW0KICAgICAgICAgc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4oaW5zdHJ1Y3Rp
b25zKCkuc2l6ZSgpKSwKICAgICAgICAgc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4oaW5zdHJ1
Y3Rpb25zKCkuc2l6ZSgpICogc2l6ZW9mKEluc3RydWN0aW9uKSksCiAgICAgICAgIG1fbnVtUGFy
YW1ldGVycywgbV9udW1DYWxsZWVSZWdpc3RlcnMsIG1fbnVtVmFycyk7Ci0gICAgaWYgKHN5bWJv
bFRhYmxlKCkgJiYgc3ltYm9sVGFibGUoKS0+Y2FwdHVyZUNvdW50KCkpIHsKLSAgICAgICAgb3V0
LnByaW50ZigKLSAgICAgICAgICAgICI7ICVkIGNhcHR1cmVkIHZhcihzKSAoZnJvbSByJWQgdG8g
ciVkLCBpbmNsdXNpdmUpIiwKLSAgICAgICAgICAgIHN5bWJvbFRhYmxlKCktPmNhcHR1cmVDb3Vu
dCgpLCBzeW1ib2xUYWJsZSgpLT5jYXB0dXJlU3RhcnQoKSwgc3ltYm9sVGFibGUoKS0+Y2FwdHVy
ZUVuZCgpICsgMSk7Ci0gICAgfQotICAgIGlmICh1c2VzQXJndW1lbnRzKCkpIHsKLSAgICAgICAg
b3V0LnByaW50ZigKLSAgICAgICAgICAgICI7IHVzZXMgYXJndW1lbnRzLCBpbiByJWQsIHIlZCIs
Ci0gICAgICAgICAgICBhcmd1bWVudHNSZWdpc3RlcigpLm9mZnNldCgpLAotICAgICAgICAgICAg
dW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVyKGFyZ3VtZW50c1JlZ2lzdGVyKCkpLm9mZnNldCgp
KTsKLSAgICB9CiAgICAgaWYgKG5lZWRzQWN0aXZhdGlvbigpICYmIGNvZGVUeXBlKCkgPT0gRnVu
Y3Rpb25Db2RlKQogICAgICAgICBvdXQucHJpbnRmKCI7IGxleGljYWwgZW52aXJvbm1lbnQgaW4g
ciVkIiwgYWN0aXZhdGlvblJlZ2lzdGVyKCkub2Zmc2V0KCkpOwogICAgIG91dC5wcmludGYoIlxu
Iik7CkBAIC0xNjQxLDcgKzE2MzAsNiBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhDb3B5UGFyc2Vk
QmxvY2tUYWcsCiAgICAgLCBtX2luc3RydWN0aW9ucyhvdGhlci5tX2luc3RydWN0aW9ucykKICAg
ICAsIG1fdGhpc1JlZ2lzdGVyKG90aGVyLm1fdGhpc1JlZ2lzdGVyKQogICAgICwgbV9zY29wZVJl
Z2lzdGVyKG90aGVyLm1fc2NvcGVSZWdpc3RlcikKLSAgICAsIG1fYXJndW1lbnRzUmVnaXN0ZXIo
b3RoZXIubV9hcmd1bWVudHNSZWdpc3RlcikKICAgICAsIG1fbGV4aWNhbEVudmlyb25tZW50UmVn
aXN0ZXIob3RoZXIubV9sZXhpY2FsRW52aXJvbm1lbnRSZWdpc3RlcikKICAgICAsIG1faXNTdHJp
Y3RNb2RlKG90aGVyLm1faXNTdHJpY3RNb2RlKQogICAgICwgbV9uZWVkc0FjdGl2YXRpb24ob3Ro
ZXIubV9uZWVkc0FjdGl2YXRpb24pCkBAIC0xNzAzLDcgKzE2OTEsNiBAQCBDb2RlQmxvY2s6OkNv
ZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBvCiAgICAgLCBtX3ZtKHVubGlua2VkQ29kZUJsb2Nr
LT52bSgpKQogICAgICwgbV90aGlzUmVnaXN0ZXIodW5saW5rZWRDb2RlQmxvY2stPnRoaXNSZWdp
c3RlcigpKQogICAgICwgbV9zY29wZVJlZ2lzdGVyKHVubGlua2VkQ29kZUJsb2NrLT5zY29wZVJl
Z2lzdGVyKCkpCi0gICAgLCBtX2FyZ3VtZW50c1JlZ2lzdGVyKHVubGlua2VkQ29kZUJsb2NrLT5h
cmd1bWVudHNSZWdpc3RlcigpKQogICAgICwgbV9sZXhpY2FsRW52aXJvbm1lbnRSZWdpc3Rlcih1
bmxpbmtlZENvZGVCbG9jay0+YWN0aXZhdGlvblJlZ2lzdGVyKCkpCiAgICAgLCBtX2lzU3RyaWN0
TW9kZSh1bmxpbmtlZENvZGVCbG9jay0+aXNTdHJpY3RNb2RlKCkpCiAgICAgLCBtX25lZWRzQWN0
aXZhdGlvbih1bmxpbmtlZENvZGVCbG9jay0+aGFzQWN0aXZhdGlvblJlZ2lzdGVyKCkgJiYgdW5s
aW5rZWRDb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlKQpAQCAtMTczMSw4ICsx
NzE4LDggQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soU2NyaXB0RXhlY3V0YWJsZSogbwogICAgICAg
ICAgICAgc3ltYm9sVGFibGUtPnByZXBhcmVGb3JUeXBlUHJvZmlsaW5nKGxvY2tlcik7CiAgICAg
ICAgIH0KIAotICAgICAgICBpZiAoY29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUgJiYgc3ltYm9s
VGFibGUtPmNhcHR1cmVDb3VudCgpKSB7Ci0gICAgICAgICAgICBtX3N5bWJvbFRhYmxlLnNldCgq
bV92bSwgbV9vd25lckV4ZWN1dGFibGUuZ2V0KCksIHN5bWJvbFRhYmxlLT5jbG9uZUNhcHR1cmVk
TmFtZXMoKm1fdm0pKTsKKyAgICAgICAgaWYgKGNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlICYm
IHN5bWJvbFRhYmxlLT5zY29wZVNpemUpKSB7CisgICAgICAgICAgICBtX3N5bWJvbFRhYmxlLnNl
dCgqbV92bSwgbV9vd25lckV4ZWN1dGFibGUuZ2V0KCksIHN5bWJvbFRhYmxlLT5jbG9uZVNjb3Bl
UGFydCgqbV92bSkpOwogICAgICAgICAgICAgZGlkQ2xvbmVTeW1ib2xUYWJsZSA9IHRydWU7CiAg
ICAgICAgIH0gZWxzZQogICAgICAgICAgICAgbV9zeW1ib2xUYWJsZS5zZXQoKm1fdm0sIG1fb3du
ZXJFeGVjdXRhYmxlLmdldCgpLCBzeW1ib2xUYWJsZSk7CkBAIC0xOTczLDEzICsxOTYwLDE0IEBA
IENvZGVCbG9jazo6Q29kZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUqIG8KIAogICAgICAgICAgICAg
Ly8gZ2V0X2Zyb21fc2NvcGUgZHN0LCBzY29wZSwgaWQsIFJlc29sdmVNb2RlQW5kVHlwZSwgU3Ry
dWN0dXJlLCBPcGVyYW5kCiAKLSAgICAgICAgICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0g
aWRlbnRpZmllcihwY1szXS51Lm9wZXJhbmQpOwogICAgICAgICAgICAgUmVzb2x2ZU1vZGVBbmRU
eXBlIG1vZGVBbmRUeXBlID0gUmVzb2x2ZU1vZGVBbmRUeXBlKHBjWzRdLnUub3BlcmFuZCk7CiAg
ICAgICAgICAgICBpZiAobW9kZUFuZFR5cGUudHlwZSgpID09IExvY2FsQ2xvc3VyZVZhcikgewog
ICAgICAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgNF0gPSBSZXNvbHZlTW9kZUFuZFR5cGUo
bW9kZUFuZFR5cGUubW9kZSgpLCBDbG9zdXJlVmFyKS5vcGVyYW5kKCk7CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAKKyAgICAgICAgICAgIGNvbnN0IElkZW50aWZpZXIm
IGlkZW50ID0gaWRlbnRpZmllcihwY1szXS51Lm9wZXJhbmQpOworCiAgICAgICAgICAgICBSZXNv
bHZlT3Agb3AgPSBKU1Njb3BlOjphYnN0cmFjdFJlc29sdmUobV9nbG9iYWxPYmplY3QtPmdsb2Jh
bEV4ZWMoKSwgbmVlZHNBY3RpdmF0aW9uKCksIHNjb3BlLCBpZGVudCwgR2V0LCBtb2RlQW5kVHlw
ZS50eXBlKCkpOwogCiAgICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIDRdLnUub3BlcmFuZCA9
IFJlc29sdmVNb2RlQW5kVHlwZShtb2RlQW5kVHlwZS5tb2RlKCksIG9wLnR5cGUpLm9wZXJhbmQo
KTsKQEAgLTE5OTQsMTggKzE5ODIsMTMgQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soU2NyaXB0RXhl
Y3V0YWJsZSogbwogCiAgICAgICAgIGNhc2Ugb3BfcHV0X3RvX3Njb3BlOiB7CiAgICAgICAgICAg
ICAvLyBwdXRfdG9fc2NvcGUgc2NvcGUsIGlkLCB2YWx1ZSwgUmVzb2x2ZU1vZGVBbmRUeXBlLCBT
dHJ1Y3R1cmUsIE9wZXJhbmQKLSAgICAgICAgICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0g
aWRlbnRpZmllcihwY1syXS51Lm9wZXJhbmQpOwotCiAgICAgICAgICAgICBSZXNvbHZlTW9kZUFu
ZFR5cGUgbW9kZUFuZFR5cGUgPSBSZXNvbHZlTW9kZUFuZFR5cGUocGNbNF0udS5vcGVyYW5kKTsK
ICAgICAgICAgICAgIGlmIChtb2RlQW5kVHlwZS50eXBlKCkgPT0gTG9jYWxDbG9zdXJlVmFyKSB7
Ci0gICAgICAgICAgICAgICAgYm9vbCBpc1dhdGNoYWJsZVZhcmlhYmxlID0gcGNbNV0udS5vcGVy
YW5kOwotICAgICAgICAgICAgICAgIGlmICghaXNXYXRjaGFibGVWYXJpYWJsZSkgewotICAgICAg
ICAgICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIDVdLnUud2F0Y2hwb2ludFNldCA9IG51bGxw
dHI7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICBTdHJpbmdJbXBsKiB1aWQgPSBpZGVudC5pbXBsKCk7Ci0gICAgICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoZGlkQ2xvbmVTeW1ib2xUYWJsZSk7Ci0gICAgICAgICAgICAgICAg
aWYgKGlkZW50ICE9IG1fdm0tPnByb3BlcnR5TmFtZXMtPmFyZ3VtZW50cykgeworICAgICAgICAg
ICAgICAgIC8vIE9ubHkgZG8gd2F0Y2hpbmcgaWYgdGhlIHByb3BlcnR5IHdlJ3JlIHB1dHRpbmcg
dG8gaXMgbm90IGFub255bW91cy4KKyAgICAgICAgICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KHBjWzJdLnUub3BlcmFuZCkgIT0gVUlOVF9NQVgpIHsKKyAgICAgICAgICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoZGlkQ2xvbmVTeW1ib2xUYWJsZSk7CisgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gaWRlbnRpZmllcihwY1syXS51Lm9wZXJhbmQp
OworICAgICAgICAgICAgICAgICAgICBTdHJpbmdJbXBsKiB1aWQgPSBpZGVudC5pbXBsKCk7CiAg
ICAgICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fc3ltYm9sVGFi
bGUtPm1fbG9jayk7CiAgICAgICAgICAgICAgICAgICAgIFN5bWJvbFRhYmxlOjpNYXA6Oml0ZXJh
dG9yIGl0ZXIgPSBtX3N5bWJvbFRhYmxlLT5maW5kKGxvY2tlciwgdWlkKTsKICAgICAgICAgICAg
ICAgICAgICAgQVNTRVJUKGl0ZXIgIT0gbV9zeW1ib2xUYWJsZS0+ZW5kKGxvY2tlcikpOwpAQCAt
MjAxNiw2ICsxOTk5LDggQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soU2NyaXB0RXhlY3V0YWJsZSog
bwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogCisgICAgICAgICAgICBj
b25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGlkZW50aWZpZXIocGNbMl0udS5vcGVyYW5kKTsKKwog
ICAgICAgICAgICAgUmVzb2x2ZU9wIG9wID0gSlNTY29wZTo6YWJzdHJhY3RSZXNvbHZlKG1fZ2xv
YmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIG5lZWRzQWN0aXZhdGlvbigpLCBzY29wZSwgaWRlbnQs
IFB1dCwgbW9kZUFuZFR5cGUudHlwZSgpKTsKIAogICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kg
KyA0XS51Lm9wZXJhbmQgPSBSZXNvbHZlTW9kZUFuZFR5cGUobW9kZUFuZFR5cGUubW9kZSgpLCBv
cC50eXBlKS5vcGVyYW5kKCk7CkBAIC0yODYzLDYzICsyODQ4LDYgQEAgYm9vbCBDb2RlQmxvY2s6
Omhhc09wdGltaXplZFJlcGxhY2VtZW50KAogfQogI2VuZGlmCiAKLWJvb2wgQ29kZUJsb2NrOjpp
c0NhcHR1cmVkKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBJbmxpbmVDYWxsRnJhbWUqIGlubGlu
ZUNhbGxGcmFtZSkgY29uc3QKLXsKLSAgICBpZiAob3BlcmFuZC5pc0FyZ3VtZW50KCkpCi0gICAg
ICAgIHJldHVybiBvcGVyYW5kLnRvQXJndW1lbnQoKSAmJiB1c2VzQXJndW1lbnRzKCk7Ci0KLSAg
ICBpZiAoaW5saW5lQ2FsbEZyYW1lKQotICAgICAgICByZXR1cm4gaW5saW5lQ2FsbEZyYW1lLT5j
YXB0dXJlZFZhcnMuZ2V0KG9wZXJhbmQudG9Mb2NhbCgpKTsKLQotICAgIC8vIFRoZSBsZXhpY2Fs
IGVudmlyb25tZW50IG9iamVjdCBpc24ndCBpbiB0aGUgY2FwdHVyZWQgcmVnaW9uLCBidXQgaXQn
cyAiY2FwdHVyZWQiCi0gICAgLy8gaW4gdGhlIHNlbnNlIHRoYXQgc3RvcmVzIHRvIGl0cyBsb2Nh
dGlvbiBjYW4gYmUgb2JzZXJ2ZWQgaW5kaXJlY3RseS4KLSAgICBpZiAobmVlZHNBY3RpdmF0aW9u
KCkgJiYgb3BlcmFuZCA9PSBhY3RpdmF0aW9uUmVnaXN0ZXIoKSkKLSAgICAgICAgcmV0dXJuIHRy
dWU7Ci0KLSAgICAvLyBEaXR0byBmb3IgdGhlIGFyZ3VtZW50cyBvYmplY3QuCi0gICAgaWYgKHVz
ZXNBcmd1bWVudHMoKSAmJiBvcGVyYW5kID09IGFyZ3VtZW50c1JlZ2lzdGVyKCkpCi0gICAgICAg
IHJldHVybiB0cnVlOwotICAgIGlmICh1c2VzQXJndW1lbnRzKCkgJiYgb3BlcmFuZCA9PSB1bm1v
ZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIoYXJndW1lbnRzUmVnaXN0ZXIoKSkpCi0gICAgICAgIHJl
dHVybiB0cnVlOwotCi0gICAgLy8gV2UncmUgaW4gZ2xvYmFsIGNvZGUgc28gdGhlcmUgYXJlIG5v
IGxvY2FscyB0byBjYXB0dXJlCi0gICAgaWYgKCFzeW1ib2xUYWJsZSgpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gc3ltYm9sVGFibGUoKS0+aXNDYXB0dXJlZChvcGVyYW5k
Lm9mZnNldCgpKTsKLX0KLQotaW50IENvZGVCbG9jazo6ZnJhbWVQb2ludGVyT2Zmc2V0VG9HZXRB
Y3RpdmF0aW9uUmVnaXN0ZXJzKGludCBtYWNoaW5lQ2FwdHVyZVN0YXJ0KQotewotICAgIC8vIFdl
J2xsIGJlIGFkZGluZyB0aGlzIHRvIHRoZSBzdGFjayBwb2ludGVyIHRvIGdldCBhIHJlZ2lzdGVy
cyBwb2ludGVyIHRoYXQgbG9va3MKLSAgICAvLyBsaWtlIGl0IHdvdWxkIGhhdmUgbG9va2VkIGlu
IHRoZSBiYXNlbGluZSBlbmdpbmUuIEZvciBleGFtcGxlLCBpZiBieXRlY29kZSB3b3VsZAotICAg
IC8vIGhhdmUgcHV0IHRoZSBmaXJzdCBjYXB0dXJlZCB2YXJpYWJsZSBhdCBvZmZzZXQgLTUgYnV0
IHdlIHB1dCBpdCBhdCBvZmZzZXQgLTEsIHRoZW4KLSAgICAvLyB3ZSdsbCBoYXZlIGFuIG9mZnNl
dCBvZiA0LgotICAgIGludDMyX3Qgb2Zmc2V0ID0gMDsKLSAgICAKLSAgICAvLyBDb21wdXRlIHdo
ZXJlIHdlIHB1dCB0aGUgY2FwdHVyZWQgdmFyaWFibGVzLiBUaGlzIG9mZnNldCB3aWxsIHBvaW50
IHRoZSByZWdpc3RlcnMKLSAgICAvLyBwb2ludGVyIGRpcmVjdGx5IGF0IHRoZSBmaXJzdCBjYXB0
dXJlZCB2YXIuCi0gICAgb2Zmc2V0ICs9IG1hY2hpbmVDYXB0dXJlU3RhcnQ7Ci0gICAgCi0gICAg
Ly8gTm93IGNvbXB1dGUgdGhlIG9mZnNldCBuZWVkZWQgdG8gbWFrZSB0aGUgcnVudGltZSBzZWUg
dGhlIGNhcHR1cmVkIHZhcmlhYmxlcyBhdCB0aGUKLSAgICAvLyBzYW1lIG9mZnNldCB0aGF0IHRo
ZSBieXRlY29kZSB3b3VsZCBoYXZlIHVzZWQuCi0gICAgb2Zmc2V0IC09IHN5bWJvbFRhYmxlKCkt
PmNhcHR1cmVTdGFydCgpOwotICAgIAotICAgIHJldHVybiBvZmZzZXQ7Ci19Ci0KLWludCBDb2Rl
QmxvY2s6OmZyYW1lUG9pbnRlck9mZnNldFRvR2V0QWN0aXZhdGlvblJlZ2lzdGVycygpCi17Ci0g
ICAgaWYgKCFKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkKLSAgICAgICAgcmV0
dXJuIDA7Ci0jaWYgRU5BQkxFKERGR19KSVQpCi0gICAgcmV0dXJuIGZyYW1lUG9pbnRlck9mZnNl
dFRvR2V0QWN0aXZhdGlvblJlZ2lzdGVycyhqaXRDb2RlKCktPmRmZ0NvbW1vbigpLT5tYWNoaW5l
Q2FwdHVyZVN0YXJ0KTsKLSNlbHNlCi0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LSAgICByZXR1cm4gMDsKLSNlbmRpZgotfQotCiBIYW5kbGVySW5mbyogQ29kZUJsb2NrOjpoYW5k
bGVyRm9yQnl0ZWNvZGVPZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpCiB7CiAgICAgUkVM
RUFTRV9BU1NFUlQoYnl0ZWNvZGVPZmZzZXQgPCBpbnN0cnVjdGlvbnMoKS5zaXplKCkpOwpAQCAt
MzA5OCwxOCArMzAyNiw2IEBAIFBhc3NSZWZQdHI8Q29kZUJsb2NrPiBDb2RlQmxvY2s6Om5ld1Jl
cGwKICAgICByZXR1cm4gb3duZXJFeGVjdXRhYmxlKCktPm5ld1JlcGxhY2VtZW50Q29kZUJsb2Nr
Rm9yKHNwZWNpYWxpemF0aW9uS2luZCgpKTsKIH0KIAotY29uc3QgU2xvd0FyZ3VtZW50KiBDb2Rl
QmxvY2s6Om1hY2hpbmVTbG93QXJndW1lbnRzKCkKLXsKLSAgICBpZiAoIUpJVENvZGU6OmlzT3B0
aW1pemluZ0pJVChqaXRUeXBlKCkpKQotICAgICAgICByZXR1cm4gc3ltYm9sVGFibGUoKS0+c2xv
d0FyZ3VtZW50cygpOwotICAgIAotI2lmIEVOQUJMRShERkdfSklUKQotICAgIHJldHVybiBqaXRD
b2RlKCktPmRmZ0NvbW1vbigpLT5zbG93QXJndW1lbnRzLmdldCgpOwotI2Vsc2UgLy8gRU5BQkxF
KERGR19KSVQpCi0gICAgcmV0dXJuIDA7Ci0jZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCi19Ci0K
ICNpZiBFTkFCTEUoSklUKQogQ29kZUJsb2NrKiBQcm9ncmFtQ29kZUJsb2NrOjpyZXBsYWNlbWVu
dCgpCiB7CkBAIC0zOTAyLDYzICszODE4LDEyIEBAIFN0cmluZyBDb2RlQmxvY2s6Om5hbWVGb3JS
ZWdpc3RlcihWaXJ0dWEKICAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgibGV4aWNhbCBlbnZp
cm9ubWVudCIpOwogICAgIGlmICh2aXJ0dWFsUmVnaXN0ZXIgPT0gdGhpc1JlZ2lzdGVyKCkpCiAg
ICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoInRoaXMiKTsKLSAgICBpZiAodXNlc0FyZ3VtZW50
cygpKSB7Ci0gICAgICAgIGlmICh2aXJ0dWFsUmVnaXN0ZXIgPT0gYXJndW1lbnRzUmVnaXN0ZXIo
KSkKLSAgICAgICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoImFyZ3VtZW50cyIpOwotICAgICAg
ICBpZiAodW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVyKGFyZ3VtZW50c1JlZ2lzdGVyKCkpID09
IHZpcnR1YWxSZWdpc3RlcikKLSAgICAgICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoInJlYWwg
YXJndW1lbnRzIik7Ci0gICAgfQogICAgIGlmICh2aXJ0dWFsUmVnaXN0ZXIuaXNBcmd1bWVudCgp
KQogICAgICAgICByZXR1cm4gU3RyaW5nOjpmb3JtYXQoImFyZ3VtZW50c1slM2RdIiwgdmlydHVh
bFJlZ2lzdGVyLnRvQXJndW1lbnQoKSk7CiAKICAgICByZXR1cm4gIiI7CiB9CiAKLW5hbWVzcGFj
ZSB7Ci0KLXN0cnVjdCBWZXJpZnlDYXB0dXJlZERlZiB7Ci0gICAgdm9pZCBvcGVyYXRvcigpKENv
ZGVCbG9jayogY29kZUJsb2NrLCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIE9wY29kZUlEIG9w
Y29kZUlELCBpbnQgb3BlcmFuZCkKLSAgICB7Ci0gICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zm
c2V0ID0gaW5zdHJ1Y3Rpb24gLSBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmJlZ2luKCk7Ci0g
ICAgICAgIAotICAgICAgICBpZiAoY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChv
cGVyYW5kKSkgewotICAgICAgICAgICAgY29kZUJsb2NrLT5iZWdpblZhbGlkYXRpb25EaWRGYWls
KCk7Ci0gICAgICAgICAgICBkYXRhTG9nKCIgICAgQXQgYmMjIiwgYnl0ZWNvZGVPZmZzZXQsICIg
ZW5jb3VudGVyZWQgYSBkZWZpbml0aW9uIG9mIGEgY29uc3RhbnQuXG4iKTsKLSAgICAgICAgICAg
IGNvZGVCbG9jay0+ZW5kVmFsaWRhdGlvbkRpZEZhaWwoKTsKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgfQotCi0gICAgICAgIHN3aXRjaCAob3Bjb2RlSUQpIHsKLSAgICAgICAgY2FzZSBv
cF9lbnRlcjoKLSAgICAgICAgY2FzZSBvcF9pbml0X2xhenlfcmVnOgotICAgICAgICBjYXNlIG9w
X2NyZWF0ZV9hcmd1bWVudHM6Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIFZpcnR1YWxSZWdpc3Rl
ciB2aXJ0dWFsUmVnKG9wZXJhbmQpOwotICAgICAgICBpZiAoIXZpcnR1YWxSZWcuaXNMb2NhbCgp
KQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGlmIChjb2RlQmxvY2stPnVzZXNBcmd1
bWVudHMoKSAmJiB2aXJ0dWFsUmVnID09IGNvZGVCbG9jay0+YXJndW1lbnRzUmVnaXN0ZXIoKSkK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaWYgKGNvZGVCbG9jay0+dXNlc0FyZ3VtZW50
cygpICYmIHZpcnR1YWxSZWcgPT0gdW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVyKGNvZGVCbG9j
ay0+YXJndW1lbnRzUmVnaXN0ZXIoKSkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAg
aWYgKGNvZGVCbG9jay0+Y2FwdHVyZUNvdW50KCkgJiYgY29kZUJsb2NrLT5zeW1ib2xUYWJsZSgp
LT5pc0NhcHR1cmVkKG9wZXJhbmQpKSB7Ci0gICAgICAgICAgICBjb2RlQmxvY2stPmJlZ2luVmFs
aWRhdGlvbkRpZEZhaWwoKTsKLSAgICAgICAgICAgIGRhdGFMb2coIiAgICBBdCBiYyMiLCBieXRl
Y29kZU9mZnNldCwgIiBlbmNvdW50ZXJlZCBpbnZhbGlkIGFzc2lnbm1lbnQgdG8gY2FwdHVyZWQg
dmFyaWFibGUgIiwgdmlydHVhbFJlZywgIi5cbiIpOwotICAgICAgICAgICAgY29kZUJsb2NrLT5l
bmRWYWxpZGF0aW9uRGlkRmFpbCgpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0g
ICAgICAgIAotICAgICAgICByZXR1cm47Ci0gICAgfQotfTsKLQotfSAvLyBhbm9ueW1vdXMgbmFt
ZXNwYWNlCi0KIHZvaWQgQ29kZUJsb2NrOjp2YWxpZGF0ZSgpCiB7CiAgICAgQnl0ZWNvZGVMaXZl
bmVzc0FuYWx5c2lzIGxpdmVuZXNzKHRoaXMpOyAvLyBDb21wdXRlIGRpcmVjdGx5IGZyb20gc2Ny
YXRjaCBzbyBpdCBkb2Vzbid0IGVmZmVjdCBDb2RlQmxvY2sgZm9vdHByaW50LgpAQCAtMzk3NCwz
OCArMzgzOSwxNSBAQCB2b2lkIENvZGVCbG9jazo6dmFsaWRhdGUoKQogICAgIH0KICAgICAKICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBtX251bUNhbGxlZVJlZ2lzdGVyczsgaS0tOykgewotICAgICAg
ICBib29sIGlzQ2FwdHVyZWQgPSBmYWxzZTsKICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZyA9
IHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGkpOwogICAgICAgICAKLSAgICAgICAgaWYgKGNhcHR1
cmVDb3VudCgpKQotICAgICAgICAgICAgaXNDYXB0dXJlZCA9IHJlZy5vZmZzZXQoKSA8PSBjYXB0
dXJlU3RhcnQoKSAmJiByZWcub2Zmc2V0KCkgPiBjYXB0dXJlRW5kKCk7Ci0gICAgICAgIAotICAg
ICAgICBpZiAoaXNDYXB0dXJlZCkgewotICAgICAgICAgICAgaWYgKCFsaXZlQXRIZWFkLmdldChp
KSkgewotICAgICAgICAgICAgICAgIGJlZ2luVmFsaWRhdGlvbkRpZEZhaWwoKTsKLSAgICAgICAg
ICAgICAgICBkYXRhTG9nKCIgICAgVmFyaWFibGUgbG9jIiwgaSwgIiBpcyBleHBlY3RlZCB0byBi
ZSBsaXZlIGJlY2F1c2UgaXQgaXMgY2FwdHVyZWQsIGJ1dCBpdCBpc24ndCBsaXZlLlxuIik7Ci0g
ICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIFJlc3VsdDogIiwgbGl2ZUF0SGVhZCwgIlxuIik7
Ci0gICAgICAgICAgICAgICAgZW5kVmFsaWRhdGlvbkRpZEZhaWwoKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChsaXZlQXRIZWFkLmdldChpKSkgewot
ICAgICAgICAgICAgICAgIGJlZ2luVmFsaWRhdGlvbkRpZEZhaWwoKTsKLSAgICAgICAgICAgICAg
ICBkYXRhTG9nKCIgICAgVmFyaWFibGUgbG9jIiwgaSwgIiBpcyBleHBlY3RlZCB0byBiZSBkZWFk
LlxuIik7Ci0gICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIFJlc3VsdDogIiwgbGl2ZUF0SGVh
ZCwgIlxuIik7Ci0gICAgICAgICAgICAgICAgZW5kVmFsaWRhdGlvbkRpZEZhaWwoKTsKLSAgICAg
ICAgICAgIH0KKyAgICAgICAgaWYgKGxpdmVBdEhlYWQuZ2V0KGkpKSB7CisgICAgICAgICAgICBi
ZWdpblZhbGlkYXRpb25EaWRGYWlsKCk7CisgICAgICAgICAgICBkYXRhTG9nKCIgICAgVmFyaWFi
bGUgbG9jIiwgaSwgIiBpcyBleHBlY3RlZCB0byBiZSBkZWFkLlxuIik7CisgICAgICAgICAgICBk
YXRhTG9nKCIgICAgUmVzdWx0OiAiLCBsaXZlQXRIZWFkLCAiXG4iKTsKKyAgICAgICAgICAgIGVu
ZFZhbGlkYXRpb25EaWRGYWlsKCk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCi0gICAgZm9yICh1
bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IDA7IGJ5dGVjb2RlT2Zmc2V0IDwgaW5zdHJ1Y3Rpb25z
KCkuc2l6ZSgpOykgewotICAgICAgICBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0g
aW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKSArIGJ5dGVjb2RlT2Zmc2V0OwotICAgICAgICBPcGNvZGVJ
RCBvcGNvZGVJRCA9IG1fdm0tPmludGVycHJldGVyLT5nZXRPcGNvZGVJRChjdXJyZW50SW5zdHJ1
Y3Rpb24tPnUub3Bjb2RlKTsKLSAgICAgICAgCi0gICAgICAgIFZlcmlmeUNhcHR1cmVkRGVmIHZl
cmlmeUNhcHR1cmVkRGVmOwotICAgICAgICBjb21wdXRlRGVmc0ZvckJ5dGVjb2RlT2Zmc2V0KHRo
aXMsIGJ5dGVjb2RlT2Zmc2V0LCB2ZXJpZnlDYXB0dXJlZERlZik7Ci0gICAgICAgIAotICAgICAg
ICBieXRlY29kZU9mZnNldCArPSBvcGNvZGVMZW5ndGgob3Bjb2RlSUQpOwotICAgIH0KIH0KIAog
dm9pZCBDb2RlQmxvY2s6OmJlZ2luVmFsaWRhdGlvbkRpZEZhaWwoKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2aXNpb24gMTgwODc1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkp
CkBAIC04Myw4ICs4Myw2IEBAIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKIGNsYXNzIFJl
cGF0Y2hCdWZmZXI7CiBjbGFzcyBUeXBlTG9jYXRpb247CiAKLWlubGluZSBWaXJ0dWFsUmVnaXN0
ZXIgdW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudHNS
ZWdpc3RlcikgeyByZXR1cm4gVmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50c1JlZ2lzdGVyLm9mZnNl
dCgpICsgMSk7IH0KLQogZW51bSBSZW9wdGltaXphdGlvbk1vZGUgeyBEb250Q291bnRSZW9wdGlt
aXphdGlvbiwgQ291bnRSZW9wdGltaXphdGlvbiB9OwogCiBjbGFzcyBDb2RlQmxvY2sgOiBwdWJs
aWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8Q29kZUJsb2NrPiwgcHVibGljIFVuY29uZGl0aW9uYWxG
aW5hbGl6ZXIsIHB1YmxpYyBXZWFrUmVmZXJlbmNlSGFydmVzdGVyIHsKQEAgLTI1OSwxMSArMjU3
LDYgQEAgcHVibGljOgogCiAgICAgdW5zaWduZWQgaW5zdHJ1Y3Rpb25Db3VudCgpIGNvbnN0IHsg
cmV0dXJuIG1faW5zdHJ1Y3Rpb25zLnNpemUoKTsgfQogCi0gICAgaW50IGFyZ3VtZW50SW5kZXhB
ZnRlckNhcHR1cmUoc2l6ZV90IGFyZ3VtZW50KTsKLSAgICAKLSAgICBib29sIGhhc1Nsb3dBcmd1
bWVudHMoKTsKLSAgICBjb25zdCBTbG93QXJndW1lbnQqIG1hY2hpbmVTbG93QXJndW1lbnRzKCk7
Ci0KICAgICAvLyBFeGFjdGx5IGVxdWl2YWxlbnQgdG8gY29kZUJsb2NrLT5vd25lckV4ZWN1dGFi
bGUoKS0+aW5zdGFsbENvZGUoY29kZUJsb2NrKTsKICAgICB2b2lkIGluc3RhbGwoKTsKICAgICAK
QEAgLTMyNywyNCArMzIwLDYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9zY29wZVJlZ2lz
dGVyOwogICAgIH0KIAotICAgIHZvaWQgc2V0QXJndW1lbnRzUmVnaXN0ZXIoVmlydHVhbFJlZ2lz
dGVyIGFyZ3VtZW50c1JlZ2lzdGVyKQotICAgIHsKLSAgICAgICAgQVNTRVJUKGFyZ3VtZW50c1Jl
Z2lzdGVyLmlzVmFsaWQoKSk7Ci0gICAgICAgIG1fYXJndW1lbnRzUmVnaXN0ZXIgPSBhcmd1bWVu
dHNSZWdpc3RlcjsKLSAgICAgICAgQVNTRVJUKHVzZXNBcmd1bWVudHMoKSk7Ci0gICAgfQotICAg
IFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudHNSZWdpc3RlcigpIGNvbnN0Ci0gICAgewotICAgICAg
ICBBU1NFUlQodXNlc0FyZ3VtZW50cygpKTsKLSAgICAgICAgcmV0dXJuIG1fYXJndW1lbnRzUmVn
aXN0ZXI7Ci0gICAgfQotICAgIFZpcnR1YWxSZWdpc3RlciB1bmNoZWNrZWRBcmd1bWVudHNSZWdp
c3RlcigpCi0gICAgewotICAgICAgICBpZiAoIXVzZXNBcmd1bWVudHMoKSkKLSAgICAgICAgICAg
IHJldHVybiBWaXJ0dWFsUmVnaXN0ZXIoKTsKLSAgICAgICAgcmV0dXJuIGFyZ3VtZW50c1JlZ2lz
dGVyKCk7Ci0gICAgfQotCiAgICAgdm9pZCBzZXRBY3RpdmF0aW9uUmVnaXN0ZXIoVmlydHVhbFJl
Z2lzdGVyIGFjdGl2YXRpb25SZWdpc3RlcikKICAgICB7CiAgICAgICAgIG1fbGV4aWNhbEVudmly
b25tZW50UmVnaXN0ZXIgPSBhY3RpdmF0aW9uUmVnaXN0ZXI7CkBAIC0zNjEsNDAgKzMzNiwxMiBA
QCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX2xleGljYWxFbnZpcm9ubWVudFJlZ2lzdGVyOwog
ICAgIH0KIAotICAgIGJvb2wgdXNlc0FyZ3VtZW50cygpIGNvbnN0IHsgcmV0dXJuIG1fYXJndW1l
bnRzUmVnaXN0ZXIuaXNWYWxpZCgpOyB9Ci0KICAgICBib29sIG5lZWRzQWN0aXZhdGlvbigpIGNv
bnN0CiAgICAgewogICAgICAgICBBU1NFUlQobV9sZXhpY2FsRW52aXJvbm1lbnRSZWdpc3Rlci5p
c1ZhbGlkKCkgPT0gbV9uZWVkc0FjdGl2YXRpb24pOwogICAgICAgICByZXR1cm4gbV9uZWVkc0Fj
dGl2YXRpb247CiAgICAgfQogICAgIAotICAgIHVuc2lnbmVkIGNhcHR1cmVDb3VudCgpIGNvbnN0
Ci0gICAgewotICAgICAgICBpZiAoIXN5bWJvbFRhYmxlKCkpCi0gICAgICAgICAgICByZXR1cm4g
MDsKLSAgICAgICAgcmV0dXJuIHN5bWJvbFRhYmxlKCktPmNhcHR1cmVDb3VudCgpOwotICAgIH0K
LSAgICAKLSAgICBpbnQgY2FwdHVyZVN0YXJ0KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIGlmICgh
c3ltYm9sVGFibGUoKSkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICByZXR1cm4gc3lt
Ym9sVGFibGUoKS0+Y2FwdHVyZVN0YXJ0KCk7Ci0gICAgfQotICAgIAotICAgIGludCBjYXB0dXJl
RW5kKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIGlmICghc3ltYm9sVGFibGUoKSkKLSAgICAgICAg
ICAgIHJldHVybiAwOwotICAgICAgICByZXR1cm4gc3ltYm9sVGFibGUoKS0+Y2FwdHVyZUVuZCgp
OwotICAgIH0KLSAgICAKLSAgICBib29sIGlzQ2FwdHVyZWQoVmlydHVhbFJlZ2lzdGVyIG9wZXJh
bmQsIElubGluZUNhbGxGcmFtZSogPSAwKSBjb25zdDsKLSAgICAKLSAgICBpbnQgZnJhbWVQb2lu
dGVyT2Zmc2V0VG9HZXRBY3RpdmF0aW9uUmVnaXN0ZXJzKGludCBtYWNoaW5lQ2FwdHVyZVN0YXJ0
KTsKLSAgICBpbnQgZnJhbWVQb2ludGVyT2Zmc2V0VG9HZXRBY3RpdmF0aW9uUmVnaXN0ZXJzKCk7
Ci0KICAgICBDb2RlVHlwZSBjb2RlVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRDb2Rl
LT5jb2RlVHlwZSgpOyB9CiAgICAgUHV0UHJvcGVydHlTbG90OjpDb250ZXh0IHB1dEJ5SWRDb250
ZXh0KCkgY29uc3QKICAgICB7CkBAIC0xMDU3LDcgKzEwMDQsNiBAQCBwcml2YXRlOgogICAgIFdy
aXRlQmFycmllcjxTeW1ib2xUYWJsZT4gbV9zeW1ib2xUYWJsZTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgbV90aGlzUmVnaXN0ZXI7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG1fc2NvcGVSZWdpc3RlcjsK
LSAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9hcmd1bWVudHNSZWdpc3RlcjsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgbV9sZXhpY2FsRW52aXJvbm1lbnRSZWdpc3RlcjsKIAogICAgIGJvb2wgbV9pc1N0cmlj
dE1vZGU7CkBAIC0xMjE4LDI0ICsxMTY0LDYgQEAgaW5saW5lIENvZGVCbG9jayogYmFzZWxpbmVD
b2RlQmxvY2tGb3JPcgogICAgIHJldHVybiBiYXNlbGluZUNvZGVCbG9jazsKIH0KIAotaW5saW5l
IGludCBDb2RlQmxvY2s6OmFyZ3VtZW50SW5kZXhBZnRlckNhcHR1cmUoc2l6ZV90IGFyZ3VtZW50
KQotewotICAgIGlmIChhcmd1bWVudCA+PSBzdGF0aWNfY2FzdDxzaXplX3Q+KHN5bWJvbFRhYmxl
KCktPnBhcmFtZXRlckNvdW50KCkpKQotICAgICAgICByZXR1cm4gQ2FsbEZyYW1lOjphcmd1bWVu
dE9mZnNldChhcmd1bWVudCk7Ci0gICAgCi0gICAgY29uc3QgU2xvd0FyZ3VtZW50KiBzbG93QXJn
dW1lbnRzID0gc3ltYm9sVGFibGUoKS0+c2xvd0FyZ3VtZW50cygpOwotICAgIGlmICghc2xvd0Fy
Z3VtZW50cyB8fCBzbG93QXJndW1lbnRzW2FyZ3VtZW50XS5zdGF0dXMgPT0gU2xvd0FyZ3VtZW50
OjpOb3JtYWwpCi0gICAgICAgIHJldHVybiBDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0KGFyZ3Vt
ZW50KTsKLSAgICAKLSAgICBBU1NFUlQoc2xvd0FyZ3VtZW50c1thcmd1bWVudF0uc3RhdHVzID09
IFNsb3dBcmd1bWVudDo6Q2FwdHVyZWQpOwotICAgIHJldHVybiBzbG93QXJndW1lbnRzW2FyZ3Vt
ZW50XS5pbmRleDsKLX0KLQotaW5saW5lIGJvb2wgQ29kZUJsb2NrOjpoYXNTbG93QXJndW1lbnRz
KCkKLXsKLSAgICByZXR1cm4gISFzeW1ib2xUYWJsZSgpLT5zbG93QXJndW1lbnRzKCk7Ci19Ci0K
IGlubGluZSBSZWdpc3RlciYgRXhlY1N0YXRlOjpyKGludCBpbmRleCkKIHsKICAgICBDb2RlQmxv
Y2sqIGNvZGVCbG9jayA9IHRoaXMtPmNvZGVCbG9jaygpOwpAQCAtMTI2MCwxNyArMTE4OCw2IEBA
IGlubGluZSBSZWdpc3RlciYgRXhlY1N0YXRlOjp1bmNoZWNrZWRSKFYKICAgICByZXR1cm4gdW5j
aGVja2VkUihyZWcub2Zmc2V0KCkpOwogfQogCi1pbmxpbmUgSlNWYWx1ZSBFeGVjU3RhdGU6OmFy
Z3VtZW50QWZ0ZXJDYXB0dXJlKHNpemVfdCBhcmd1bWVudCkKLXsKLSAgICBpZiAoYXJndW1lbnQg
Pj0gYXJndW1lbnRDb3VudCgpKQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICAK
LSAgICBpZiAoIWNvZGVCbG9jaygpKQotICAgICAgICByZXR1cm4gdGhpc1thcmd1bWVudE9mZnNl
dChhcmd1bWVudCldLmpzVmFsdWUoKTsKLSAgICAKLSAgICByZXR1cm4gdGhpc1tjb2RlQmxvY2so
KS0+YXJndW1lbnRJbmRleEFmdGVyQ2FwdHVyZShhcmd1bWVudCldLmpzVmFsdWUoKTsKLX0KLQog
aW5saW5lIHZvaWQgQ29kZUJsb2NrU2V0OjptYXJrKHZvaWQqIGNhbmRpZGF0ZUNvZGVCbG9jaykK
IHsKICAgICAvLyBXZSBoYXZlIHRvIGNoZWNrIGZvciAwIGFuZCAtMSBiZWNhdXNlIHRob3NlIGFy
ZSB1c2VkIGJ5IHRoZSBIYXNoTWFwIGFzIG1hcmtlcnMuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmgJKHJldmlzaW9uIDE4MDg3NSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmgJKHdvcmtpbmcgY29weSkKQEAg
LTE4OSwxMiArMTg5LDEwIEBAIHN0cnVjdCBJbmxpbmVDYWxsRnJhbWUgewogICAgIFdyaXRlQmFy
cmllcjxTY3JpcHRFeGVjdXRhYmxlPiBleGVjdXRhYmxlOwogICAgIFZhbHVlUmVjb3ZlcnkgY2Fs
bGVlUmVjb3Zlcnk7CiAgICAgQ29kZU9yaWdpbiBjYWxsZXI7Ci0gICAgQml0VmVjdG9yIGNhcHR1
cmVkVmFyczsgLy8gSW5kZXhlZCBieSB0aGUgbWFjaGluZSBjYWxsIGZyYW1lJ3MgdmFyaWFibGUg
bnVtYmVyaW5nLgogCiAgICAgc2lnbmVkIHN0YWNrT2Zmc2V0IDogMjg7CiAgICAgdW5zaWduZWQg
a2luZCA6IDM7IC8vIHJlYWwgdHlwZSBpcyBLaW5kCiAgICAgYm9vbCBpc0Nsb3N1cmVDYWxsIDog
MTsgLy8gSWYgZmFsc2UgdGhlbiB3ZSBrbm93IHRoYXQgY2FsbGVlL3Njb3BlIGFyZSBjb25zdGFu
dHMgYW5kIHRoZSBERkcgd29uJ3QgdHJlYXQgdGhlbSBhcyB2YXJpYWJsZXMsIGkuZS4gdGhleSBo
YXZlIHRvIGJlIHJlY292ZXJlZCBtYW51YWxseS4KLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1l
bnRzUmVnaXN0ZXI7IC8vIFRoaXMgaXMgb25seSBzZXQgaWYgdGhlIGNvZGUgdXNlcyBhcmd1bWVu
dHMuIFRoZSB1bm1vZGlmaWVkIGFyZ3VtZW50cyByZWdpc3RlciBmb2xsb3dzIHRoZSB1bm1vZGlm
aWVkQXJndW1lbnRzUmVnaXN0ZXIoKSBjb252ZW50aW9uIChzZWUgQ29kZUJsb2NrLmgpLgogICAg
IFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudENvdW50UmVnaXN0ZXI7IC8vIE9ubHkgc2V0IHdoZW4g
d2UgaW5saW5lIGEgdmFyYXJncyBjYWxsLgogICAgIAogICAgIC8vIFRoZXJlIGlzIHJlYWxseSBu
byBnb29kIG5vdGlvbiBvZiBhICJkZWZhdWx0IiBzZXQgb2YgdmFsdWVzIGZvcgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuY3BwCShy
ZXZpc2lvbiAxODA4NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3Vs
YXRlZFR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwxMCArMjksMTEgQEAKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJTcGVjdWxhdGVkVHlwZS5oIgogCi0jaW5jbHVkZSAiQXJn
dW1lbnRzLmgiCisjaW5jbHVkZSAiRGlyZWN0QXJndW1lbnRzLmgiCiAjaW5jbHVkZSAiSlNBcnJh
eS5oIgogI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisj
aW5jbHVkZSAiU2NvcGVkQXJndW1lbnRzLmgiCiAjaW5jbHVkZSAiU3RyaW5nT2JqZWN0LmgiCiAj
aW5jbHVkZSAiVmFsdWVQcm9maWxlLmgiCiAjaW5jbHVkZSA8d3RmL0JvdW5kc0NoZWNrZWRQb2lu
dGVyLmg+CkBAIC0xMjcsOCArMTI4LDEzIEBAIHZvaWQgZHVtcFNwZWN1bGF0aW9uKFByaW50U3Ry
ZWFtJiBvdXQsIFMKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBpc1RvcCA9IGZh
bHNlOwogICAgIAotICAgICAgICAgICAgaWYgKHZhbHVlICYgU3BlY0FyZ3VtZW50cykKLSAgICAg
ICAgICAgICAgICBteU91dC5wcmludCgiQXJndW1lbnRzIik7CisgICAgICAgICAgICBpZiAodmFs
dWUgJiBTcGVjRGlyZWN0QXJndW1lbnRzKQorICAgICAgICAgICAgICAgIG15T3V0LnByaW50KCJE
aXJlY3Rhcmd1bWVudHMiKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBpc1Rv
cCA9IGZhbHNlOworICAgIAorICAgICAgICAgICAgaWYgKHZhbHVlICYgU3BlY1Njb3BlZEFyZ3Vt
ZW50cykKKyAgICAgICAgICAgICAgICBteU91dC5wcmludCgiU2NvcGVkYXJndW1lbnRzIik7CiAg
ICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgaXNUb3AgPSBmYWxzZTsKICAgICAKQEAg
LTIzMiw4ICsyMzgsMTAgQEAgc3RhdGljIGNvbnN0IGNoYXIqIHNwZWN1bGF0aW9uVG9BYmJyZXZp
YQogICAgICAgICByZXR1cm4gIjxGbG9hdDMyYXJyYXk+IjsKICAgICBpZiAoaXNGbG9hdDY0QXJy
YXlTcGVjdWxhdGlvbihwcmVkaWN0aW9uKSkKICAgICAgICAgcmV0dXJuICI8RmxvYXQ2NGFycmF5
PiI7Ci0gICAgaWYgKGlzQXJndW1lbnRzU3BlY3VsYXRpb24ocHJlZGljdGlvbikpCi0gICAgICAg
IHJldHVybiAiPEFyZ3VtZW50cz4iOworICAgIGlmIChpc0RpcmVjdEFyZ3VtZW50c1NwZWN1bGF0
aW9uKHByZWRpY3Rpb24pKQorICAgICAgICByZXR1cm4gIjxEaXJlY3RBcmd1bWVudHM+IjsKKyAg
ICBpZiAoaXNTY29wZWRBcmd1bWVudHNTcGVjdWxhdGlvbihwcmVkaWN0aW9uKSkKKyAgICAgICAg
cmV0dXJuICI8U2NvcGVkQXJndW1lbnRzPiI7CiAgICAgaWYgKGlzU3RyaW5nT2JqZWN0U3BlY3Vs
YXRpb24ocHJlZGljdGlvbikpCiAgICAgICAgIHJldHVybiAiPFN0cmluZ09iamVjdD4iOwogICAg
IGlmIChpc1N0cmluZ09yU3RyaW5nT2JqZWN0U3BlY3VsYXRpb24ocHJlZGljdGlvbikpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuaAko
cmV2aXNpb24gMTgwODc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1
bGF0ZWRUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTUyLDggKzUyLDkgQEAgc3RhdGljIGNvbnN0
IFNwZWN1bGF0ZWRUeXBlIFNwZWNVaW50MzJBcgogc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBl
IFNwZWNGbG9hdDMyQXJyYXkgICAgICAgPSAweDAwMDAwNDAwOyAvLyBJdCdzIGRlZmluaXRlbHkg
YW4gVWludDE2QXJyYXkgb3Igb25lIG9mIGl0cyBzdWJjbGFzc2VzLgogc3RhdGljIGNvbnN0IFNw
ZWN1bGF0ZWRUeXBlIFNwZWNGbG9hdDY0QXJyYXkgICAgICAgPSAweDAwMDAwODAwOyAvLyBJdCdz
IGRlZmluaXRlbHkgYW4gVWludDE2QXJyYXkgb3Igb25lIG9mIGl0cyBzdWJjbGFzc2VzLgogc3Rh
dGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNUeXBlZEFycmF5VmlldyAgICAgPSBTcGVjSW50
OEFycmF5IHwgU3BlY0ludDE2QXJyYXkgfCBTcGVjSW50MzJBcnJheSB8IFNwZWNVaW50OEFycmF5
IHwgU3BlY1VpbnQ4Q2xhbXBlZEFycmF5IHwgU3BlY1VpbnQxNkFycmF5IHwgU3BlY1VpbnQzMkFy
cmF5IHwgU3BlY0Zsb2F0MzJBcnJheSB8IFNwZWNGbG9hdDY0QXJyYXk7Ci1zdGF0aWMgY29uc3Qg
U3BlY3VsYXRlZFR5cGUgU3BlY0FyZ3VtZW50cyAgICAgICAgICA9IDB4MDAwMDEwMDA7IC8vIEl0
J3MgZGVmaW5pdGVseSBhbiBBcmd1bWVudHMgb2JqZWN0Lgotc3RhdGljIGNvbnN0IFNwZWN1bGF0
ZWRUeXBlIFNwZWNTdHJpbmdPYmplY3QgICAgICAgPSAweDAwMDAyMDAwOyAvLyBJdCdzIGRlZmlu
aXRlbHkgYSBTdHJpbmdPYmplY3QuCitzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0Rp
cmVjdEFyZ3VtZW50cyAgICA9IDB4MDAwMDEwMDA7IC8vIEl0J3MgZGVmaW5pdGVseSBhIERpcmVj
dEFyZ3VtZW50cyBvYmplY3QuCitzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY1Njb3Bl
ZEFyZ3VtZW50cyAgICA9IDB4MDAwMDIwMDA7IC8vIEl0J3MgZGVmaW5pdGVseSBhIFNjb3BlZEFy
Z3VtZW50cyBvYmplY3QuCitzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY1N0cmluZ09i
amVjdCAgICAgICA9IDB4MDAwMDQwMDA7IC8vIEl0J3MgZGVmaW5pdGVseSBhIFN0cmluZ09iamVj
dC4KIHN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjT2JqZWN0T3RoZXIgICAgICAgID0g
MHgwMDAwODAwMDsgLy8gSXQncyBkZWZpbml0ZWx5IGFuIG9iamVjdCBidXQgbm90IEpTRmluYWxP
YmplY3QsIEpTQXJyYXksIG9yIEpTRnVuY3Rpb24uCiBzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5
cGUgU3BlY09iamVjdCAgICAgICAgICAgICA9IDB4MDAwMGZmZmY7IC8vIEJpdG1hc2sgdXNlZCBm
b3IgdGVzdGluZyBmb3IgYW55IGtpbmQgb2Ygb2JqZWN0IHByZWRpY3Rpb24uCiBzdGF0aWMgY29u
c3QgU3BlY3VsYXRlZFR5cGUgU3BlY1N0cmluZ0lkZW50ICAgICAgICA9IDB4MDAwMTAwMDA7IC8v
IEl0J3MgZGVmaW5pdGVseSBhIEpTU3RyaW5nLCBhbmQgaXQncyBhbiBpZGVudGlmaWVyLgpAQCAt
MTkzLDkgKzE5NCwxNCBAQCBpbmxpbmUgYm9vbCBpc0Zsb2F0NjRBcnJheVNwZWN1bGF0aW9uKFNw
CiAgICAgcmV0dXJuIHZhbHVlID09IFNwZWNGbG9hdDY0QXJyYXk7CiB9CiAKLWlubGluZSBib29s
IGlzQXJndW1lbnRzU3BlY3VsYXRpb24oU3BlY3VsYXRlZFR5cGUgdmFsdWUpCitpbmxpbmUgYm9v
bCBpc0RpcmVjdEFyZ3VtZW50c1NwZWN1bGF0aW9uKFNwZWN1bGF0ZWRUeXBlIHZhbHVlKQogewot
ICAgIHJldHVybiAhIXZhbHVlICYmICh2YWx1ZSAmIFNwZWNBcmd1bWVudHMpID09IHZhbHVlOwor
ICAgIHJldHVybiB2YWx1ZSA9PSBTcGVjRGlyZWN0QXJndW1lbnRzOworfQorCitpbmxpbmUgYm9v
bCBpc1Njb3BlZEFyZ3VtZW50c1NwZWN1bGF0aW9uKFNwZWN1bGF0ZWRUeXBlIHZhbHVlKQorewor
ICAgIHJldHVybiB2YWx1ZSA9PSBTcGVjU2NvcGVkQXJndW1lbnRzOwogfQogCiBpbmxpbmUgYm9v
bCBpc0FjdGlvbmFibGVJbnRNdXRhYmxlQXJyYXlTcGVjdWxhdGlvbihTcGVjdWxhdGVkVHlwZSB2
YWx1ZSkKQEAgLTIyNCwxMyArMjMwLDE0IEBAIGlubGluZSBib29sIGlzQWN0aW9uYWJsZVR5cGVk
TXV0YWJsZUFycmEKIGlubGluZSBib29sIGlzQWN0aW9uYWJsZU11dGFibGVBcnJheVNwZWN1bGF0
aW9uKFNwZWN1bGF0ZWRUeXBlIHZhbHVlKQogewogICAgIHJldHVybiBpc0FycmF5U3BlY3VsYXRp
b24odmFsdWUpCi0gICAgICAgIHx8IGlzQXJndW1lbnRzU3BlY3VsYXRpb24odmFsdWUpCiAgICAg
ICAgIHx8IGlzQWN0aW9uYWJsZVR5cGVkTXV0YWJsZUFycmF5U3BlY3VsYXRpb24odmFsdWUpOwog
fQogCiBpbmxpbmUgYm9vbCBpc0FjdGlvbmFibGVBcnJheVNwZWN1bGF0aW9uKFNwZWN1bGF0ZWRU
eXBlIHZhbHVlKQogewogICAgIHJldHVybiBpc1N0cmluZ1NwZWN1bGF0aW9uKHZhbHVlKQorICAg
ICAgICB8fCBpc0RpcmVjdEFyZ3VtZW50c1NwZWN1bGF0aW9uKHZhbHVlKQorICAgICAgICB8fCBp
c1Njb3BlZEFyZ3VtZW50c1NwZWN1bGF0aW9uKHZhbHVlKQogICAgICAgICB8fCBpc0FjdGlvbmFi
bGVNdXRhYmxlQXJyYXlTcGVjdWxhdGlvbih2YWx1ZSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3Iu
Y3BwCShyZXZpc2lvbiAxODA4NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBp
bGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMsNiArNjMsMjAg
QEAgUGFyc2VyRXJyb3IgQnl0ZWNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlKAogICAgIFNhbXBsaW5n
UmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJCeXRlY29kZSBHZW5lcmF0aW9uIik7CiAgICAgCiAgICAg
bV9jb2RlQmxvY2stPnNldFRoaXNSZWdpc3RlcihtX3RoaXNSZWdpc3Rlci52aXJ0dWFsUmVnaXN0
ZXIoKSk7CisgICAgCisgICAgLy8gSWYgd2UgaGF2ZSBkZWNsYXJlZCBhIHZhcmlhYmxlIG5hbWVk
ICJhcmd1bWVudHMiIGFuZCB3ZSBhcmUgdXNpbmcgYXJndW1lbnRzIHRoZW4gd2Ugc2hvdWxkCisg
ICAgLy8gcGVyZm9ybSB0aGF0IGFzc2lnbm1lbnQgbm93LgorICAgIGlmIChtX25lZWRUb0luaXRp
YWxpemVBcmd1bWVudHMpCisgICAgICAgIGluaXRpYWxpemVWYXJpYWJsZSh2YXJpYWJsZShwcm9w
ZXJ0eU5hbWVzKCkuYXJndW1lbnRzKSwgbV9hcmd1bWVudHNSZWdpc3Rlcik7CisgICAgCisgICAg
eworICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gdGVtcCA9IG5ld1RlbXBvcmFyeSgpOworICAg
ICAgICBmb3IgKEZ1bmN0aW9uQm9keU5vZGUqIGZ1bmN0aW9uQm9keSA6IG1fZnVuY3Rpb25zVG9J
bml0aWFsaXplKSB7CisgICAgICAgICAgICBlbWl0TmV3RnVuY3Rpb24odGVtcC5nZXQoKSwgZnVu
Y3Rpb25Cb2R5KTsKKyAgICAgICAgICAgIGluaXRpYWxpemVWYXJpYWJsZSh2YXJpYWJsZShmdW5j
dGlvbkJvZHktPmlkZW50KCkpLCB0ZW1wLmdldCgpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAK
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZGVjb25zdHJ1Y3RlZFBhcmFtZXRlcnMuc2l6
ZSgpOyBpKyspIHsKICAgICAgICAgYXV0byYgZW50cnkgPSBtX2RlY29uc3RydWN0ZWRQYXJhbWV0
ZXJzW2ldOwogICAgICAgICBlbnRyeS5zZWNvbmQtPmJpbmRWYWx1ZSgqdGhpcywgZW50cnkuZmly
c3QuZ2V0KCkpOwpAQCAtMTE2LDM4ICsxMzAsMTMgQEAgUGFyc2VyRXJyb3IgQnl0ZWNvZGVHZW5l
cmF0b3I6OmdlbmVyYXRlKAogICAgIG1fY29kZUJsb2NrLT5zaHJpbmtUb0ZpdCgpOwogCiAgICAg
aWYgKG1fY29kZUJsb2NrLT5zeW1ib2xUYWJsZSgpICYmICFtX2NvZGVCbG9jay0+dm0oKS0+dHlw
ZVByb2ZpbGVyKCkpCi0gICAgICAgIG1fY29kZUJsb2NrLT5zZXRTeW1ib2xUYWJsZShtX2NvZGVC
bG9jay0+c3ltYm9sVGFibGUoKS0+Y2xvbmVDYXB0dXJlZE5hbWVzKCptX2NvZGVCbG9jay0+dm0o
KSkpOworICAgICAgICBtX2NvZGVCbG9jay0+c2V0U3ltYm9sVGFibGUobV9jb2RlQmxvY2stPnN5
bWJvbFRhYmxlKCktPmNsb25lSWdub3JpbmdTdGFjaygqbV9jb2RlQmxvY2stPnZtKCkpKTsKIAog
ICAgIGlmIChtX2V4cHJlc3Npb25Ub29EZWVwKQogICAgICAgICByZXR1cm4gUGFyc2VyRXJyb3Io
UGFyc2VyRXJyb3I6Ok91dE9mTWVtb3J5KTsKICAgICByZXR1cm4gUGFyc2VyRXJyb3IoUGFyc2Vy
RXJyb3I6OkVycm9yTm9uZSk7CiB9CiAKLVJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjph
ZGRWYXIoCi0gICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIENvbnN0YW50TW9kZSBjb25zdGFu
dE1vZGUsIFdhdGNoTW9kZSB3YXRjaE1vZGUpCi17Ci0gICAgQVNTRVJUKHN0YXRpY19jYXN0PHNp
emVfdD4obV9jb2RlQmxvY2stPm1fbnVtVmFycykgPT0gbV9jYWxsZWVSZWdpc3RlcnMuc2l6ZSgp
KTsKLSAgICAKLSAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihzeW1ib2xUYWJsZSgpLm1f
bG9jayk7Ci0gICAgaW50IGluZGV4ID0gdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwobV9jYWxsZWVS
ZWdpc3RlcnMuc2l6ZSgpKS5vZmZzZXQoKTsKLSAgICBTeW1ib2xUYWJsZUVudHJ5IG5ld0VudHJ5
KGluZGV4LCBjb25zdGFudE1vZGUgPT0gSXNDb25zdGFudCA/IFJlYWRPbmx5IDogMCk7Ci0gICAg
U3ltYm9sVGFibGU6Ok1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IHN5bWJvbFRhYmxlKCkuYWRkKGxv
Y2tlciwgaWRlbnQuaW1wbCgpLCBuZXdFbnRyeSk7Ci0KLSAgICBpZiAoIXJlc3VsdC5pc05ld0Vu
dHJ5KQotICAgICAgICByZXR1cm4gJnJlZ2lzdGVyRm9yKHJlc3VsdC5pdGVyYXRvci0+dmFsdWUu
Z2V0SW5kZXgoKSk7Ci0gICAgCi0gICAgaWYgKHdhdGNoTW9kZSA9PSBJc1dhdGNoYWJsZSkgewot
ICAgICAgICB3aGlsZSAobV93YXRjaGFibGVWYXJpYWJsZXMuc2l6ZSgpIDwgc3RhdGljX2Nhc3Q8
c2l6ZV90PihtX2NvZGVCbG9jay0+bV9udW1WYXJzKSkKLSAgICAgICAgICAgIG1fd2F0Y2hhYmxl
VmFyaWFibGVzLmFwcGVuZChJZGVudGlmaWVyKCkpOwotICAgICAgICBtX3dhdGNoYWJsZVZhcmlh
Ymxlcy5hcHBlbmQoaWRlbnQpOwotICAgIH0KLSAgICAKLSAgICBSZWdpc3RlcklEKiByZWdJRCA9
IGFkZFZhcigpOwotICAgIEFTU0VSVCh3YXRjaE1vZGUgPT0gTm90V2F0Y2hhYmxlIHx8IHN0YXRp
Y19jYXN0PHNpemVfdD4obV9jb2RlQmxvY2stPm1fbnVtVmFycykgPT0gbV93YXRjaGFibGVWYXJp
YWJsZXMuc2l6ZSgpKTsKLSAgICAKLSAgICByZXR1cm4gcmVnSUQ7Ci19Ci0KIEJ5dGVjb2RlR2Vu
ZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihWTSYgdm0sIFByb2dyYW1Ob2RlKiBwcm9ncmFtTm9k
ZSwgVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrKiBjb2RlQmxvY2ssIERlYnVnZ2VyTW9kZSBkZWJ1
Z2dlck1vZGUsIFByb2ZpbGVyTW9kZSBwcm9maWxlck1vZGUpCiAgICAgOiBtX3Nob3VsZEVtaXRE
ZWJ1Z0hvb2tzKE9wdGlvbnM6OmZvcmNlRGVidWdnZXJCeXRlY29kZUdlbmVyYXRpb24oKSB8fCBk
ZWJ1Z2dlck1vZGUgPT0gRGVidWdnZXJPbikKICAgICAsIG1fc2hvdWxkRW1pdFByb2ZpbGVIb29r
cyhPcHRpb25zOjpmb3JjZVByb2ZpbGVyQnl0ZWNvZGVHZW5lcmF0aW9uKCkgfHwgcHJvZmlsZXJN
b2RlID09IFByb2ZpbGVyT24pCkBAIC0xODksNyArMTc4LDcgQEAgQnl0ZWNvZGVHZW5lcmF0b3I6
OkJ5dGVjb2RlR2VuZXJhdG9yKFZNJgogewogICAgIGlmIChtX2lzQnVpbHRpbkZ1bmN0aW9uKQog
ICAgICAgICBtX3Nob3VsZEVtaXREZWJ1Z0hvb2tzID0gZmFsc2U7Ci0KKyAgICAKICAgICBtX3N5
bWJvbFRhYmxlLT5zZXRVc2VzTm9uU3RyaWN0RXZhbChjb2RlQmxvY2stPnVzZXNFdmFsKCkgJiYg
IWNvZGVCbG9jay0+aXNTdHJpY3RNb2RlKCkpOwogICAgIFZlY3RvcjxJZGVudGlmaWVyPiBib3Vu
ZFBhcmFtZXRlclByb3BlcnRpZXM7CiAgICAgRnVuY3Rpb25QYXJhbWV0ZXJzJiBwYXJhbWV0ZXJz
ID0gKmZ1bmN0aW9uTm9kZS0+cGFyYW1ldGVycygpOwpAQCAtMjAyLDEwICsxOTEsMjAgQEAgQnl0
ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFZNJgogICAgIH0KICAgICBtX3N5bWJv
bFRhYmxlLT5zZXRQYXJhbWV0ZXJDb3VudEluY2x1ZGluZ1RoaXMoZnVuY3Rpb25Ob2RlLT5wYXJh
bWV0ZXJzKCktPnNpemUoKSArIDEpOwogCisgICAgYm9vbCBzaG91bGRDYXB0dXJlQWxsVGhlVGhp
bmdzID0gbV9zaG91bGRFbWl0RGVidWdIb29rcyB8fCBjb2RlQmxvY2stPnVzZXNFdmFsKCk7Cisg
ICAgYXV0byBjYXB0dXJlcyA9IFsmXSAoU3RyaW5nSW1wbCogdWlkKSAtPiBib29sIHsKKyAgICAg
ICAgcmV0dXJuIHNob3VsZENhcHR1cmVBbGxUaGVUaGluZ3MgfHwgZnVuY3Rpb25Ob2RlLT5jYXB0
dXJlcyh1aWQpOworICAgIH07CisgICAgYXV0byB2YXJLaW5kID0gWyZdIChTdHJpbmdJbXBsKiB1
aWQpIC0+IFZhcktpbmQgeworICAgICAgICByZXR1cm4gY2FwdHVyZXModWlkKSA/IFNjb3BlVmFy
S2luZCA6IFN0YWNrVmFyS2luZDsKKyAgICB9CisKICAgICBlbWl0T3Bjb2RlKG9wX2VudGVyKTsK
IAogICAgIGFsbG9jYXRlQW5kRW1pdFNjb3BlKCk7CiAgICAgCisgICAgbV9jYWxsZWVSZWdpc3Rl
ci5zZXRJbmRleChKU1N0YWNrOjpDYWxsZWUpOworICAgIAogICAgIGlmIChmdW5jdGlvbk5hbWVJ
c0luU2NvcGUoZnVuY3Rpb25Ob2RlLT5pZGVudCgpLCBmdW5jdGlvbk5vZGUtPmZ1bmN0aW9uTW9k
ZSgpKQogICAgICAgICAmJiBmdW5jdGlvbk5hbWVTY29wZUlzRHluYW1pYyhjb2RlQmxvY2stPnVz
ZXNFdmFsKCksIGNvZGVCbG9jay0+aXNTdHJpY3RNb2RlKCkpKSB7CiAgICAgICAgIC8vIFdoZW4g
d2UgZG8gdGhpcywgd2Ugc2hvdWxkIG1ha2Ugb3VyIGxvY2FsIHNjb3BlIHN0YWNrIGtub3cgYWJv
dXQgdGhlIGZ1bmN0aW9uIG5hbWUgc3ltYm9sCkBAIC0yMTQsOSArMjEzLDcgQEAgQnl0ZWNvZGVH
ZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFZNJgogICAgICAgICAvLyBBbHNvLCB3ZSBjb3Vs
ZCBjcmVhdGUgdGhlIHNjb3BlIG9uY2UgcGVyIEpTRnVuY3Rpb24gaW5zdGFuY2UgdGhhdCBuZWVk
cyBpdC4gVGhhdCB3b3VsZG4ndAogICAgICAgICAvLyBiZSBhbnkgbW9yZSBjb3JyZWN0LCBidXQg
aXQgd291bGQgYmUgbW9yZSBwZXJmb3JtYW50LgogICAgICAgICAvLyBGSVhNRTogaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MTg4NwotICAgICAgICBSZWdpc3RlcklE
IGNhbGxlZVJlZ2lzdGVyOwotICAgICAgICBjYWxsZWVSZWdpc3Rlci5zZXRJbmRleChKU1N0YWNr
OjpDYWxsZWUpOwotICAgICAgICBlbWl0UHVzaEZ1bmN0aW9uTmFtZVNjb3BlKG1fc2NvcGVSZWdp
c3RlciwgZnVuY3Rpb25Ob2RlLT5pZGVudCgpLCAmY2FsbGVlUmVnaXN0ZXIsIFJlYWRPbmx5IHwg
RG9udERlbGV0ZSk7CisgICAgICAgIGVtaXRQdXNoRnVuY3Rpb25OYW1lU2NvcGUobV9zY29wZVJl
Z2lzdGVyLCBmdW5jdGlvbk5vZGUtPmlkZW50KCksICZtX2NhbGxlZVJlZ2lzdGVyLCBSZWFkT25s
eSB8IERvbnREZWxldGUpOwogICAgIH0KIAogICAgIGlmIChtX2NvZGVCbG9jay0+bmVlZHNGdWxs
U2NvcGVDaGFpbigpIHx8IG1fc2hvdWxkRW1pdERlYnVnSG9va3MpIHsKQEAgLTIyNiwxNzkgKzIy
MywyMjUgQEAgQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFZNJgogICAgICAg
ICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQobV9sZXhpY2FsRW52aXJvbm1lbnRSZWdpc3Rlci0+aW5k
ZXgoKSk7CiAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChzY29wZVJlZ2lzdGVyKCktPmlu
ZGV4KCkpOwogICAgIH0KLSAgICBSZWdpc3RlcklEKiBsb2NhbEFyZ3VtZW50c1JlZ2lzdGVyID0g
bnVsbHB0cjsKLSAgICBSZWdpc3RlcklEKiBzY3JhdGNoID0gYWRkVmFyKCk7Ci0gICAgbV9zeW1i
b2xUYWJsZS0+c2V0Q2FwdHVyZVN0YXJ0KHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKG1fY29kZUJs
b2NrLT5tX251bVZhcnMpLm9mZnNldCgpKTsKLQotICAgIGlmIChmdW5jdGlvbk5vZGUtPnVzZXNB
cmd1bWVudHMoKSB8fCBjb2RlQmxvY2stPnVzZXNFdmFsKCkpIHsgLy8gTWF5IHJlaWZ5IGFyZ3Vt
ZW50cyBvYmplY3QuCi0gICAgICAgIFJlZ2lzdGVySUQqIHVubW9kaWZpZWRBcmd1bWVudHNSZWdp
c3RlciA9IGFkZFZhcigpOyAvLyBBbm9ueW1vdXMsIHNvIGl0IGNhbid0IGJlIG1vZGlmaWVkIGJ5
IHVzZXIgY29kZS4KLSAgICAgICAgUmVnaXN0ZXJJRCogYXJndW1lbnRzUmVnaXN0ZXIgPSBhZGRW
YXIocHJvcGVydHlOYW1lcygpLmFyZ3VtZW50cywgSXNWYXJpYWJsZSwgTm90V2F0Y2hhYmxlKTsg
Ly8gQ2FuIGJlIGNoYW5nZWQgYnkgYXNzaWduaW5nIHRvICdhcmd1bWVudHMnLgotCi0gICAgICAg
IGxvY2FsQXJndW1lbnRzUmVnaXN0ZXIgPSBhcmd1bWVudHNSZWdpc3RlcjsKLQotICAgICAgICAv
LyBXZSBjYW4gc2F2ZSBhIGxpdHRsZSBzcGFjZSBieSBoYXJkLWNvZGluZyB0aGUga25vd2xlZGdl
IHRoYXQgdGhlIHR3bwotICAgICAgICAvLyAnYXJndW1lbnRzJyB2YWx1ZXMgYXJlIHN0b3JlZCBp
biBjb25zZWN1dGl2ZSByZWdpc3RlcnMsIGFuZCBzdG9yaW5nCi0gICAgICAgIC8vIG9ubHkgdGhl
IGluZGV4IG9mIHRoZSBhc3NpZ25hYmxlIG9uZS4KLSAgICAgICAgY29kZUJsb2NrLT5zZXRBcmd1
bWVudHNSZWdpc3Rlcihhcmd1bWVudHNSZWdpc3Rlci0+dmlydHVhbFJlZ2lzdGVyKCkpOwotICAg
ICAgICBBU1NFUlRfVU5VU0VEKHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3RlciwgdW5tb2RpZmll
ZEFyZ3VtZW50c1JlZ2lzdGVyLT52aXJ0dWFsUmVnaXN0ZXIoKSA9PSBKU0M6OnVubW9kaWZpZWRB
cmd1bWVudHNSZWdpc3Rlcihjb2RlQmxvY2stPmFyZ3VtZW50c1JlZ2lzdGVyKCkpKTsKLQotICAg
ICAgICBlbWl0SW5pdExhenlSZWdpc3Rlcihhcmd1bWVudHNSZWdpc3Rlcik7Ci0gICAgICAgIGVt
aXRJbml0TGF6eVJlZ2lzdGVyKHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3Rlcik7Ci0gICAgICAg
IAotICAgICAgICBpZiAoc2hvdWxkQ3JlYXRlQXJndW1lbnRzRWFnZXJseSgpIHx8IHNob3VsZFRl
YXJPZmZBcmd1bWVudHNFYWdlcmx5KCkpIHsKLSAgICAgICAgICAgIGVtaXRPcGNvZGUob3BfY3Jl
YXRlX2FyZ3VtZW50cyk7Ci0gICAgICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYXJndW1l
bnRzUmVnaXN0ZXItPmluZGV4KCkpOwotICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5k
KG1fY29kZUJsb2NrLT5hY3RpdmF0aW9uUmVnaXN0ZXIoKS5vZmZzZXQoKSk7Ci0KLSAgICAgICAg
ICAgIGlmIChtX2NvZGVCbG9jay0+aGFzQWN0aXZhdGlvblJlZ2lzdGVyKCkpIHsKLSAgICAgICAg
ICAgICAgICBSZWdpc3RlcklEKiBhcmd1bWVudHNSZWdpc3RlciA9ICZyZWdpc3RlckZvcihtX2Nv
ZGVCbG9jay0+YXJndW1lbnRzUmVnaXN0ZXIoKS5vZmZzZXQoKSk7Ci0gICAgICAgICAgICAgICAg
aW5pdGlhbGl6ZUNhcHR1cmVkVmFyaWFibGUoYXJndW1lbnRzUmVnaXN0ZXIsIHByb3BlcnR5TmFt
ZXMoKS5hcmd1bWVudHMsIGFyZ3VtZW50c1JlZ2lzdGVyKTsKLSAgICAgICAgICAgICAgICBSZWdp
c3RlcklEKiB1bmNoZWNrZWRBcmd1bWVudHNSZWdpc3RlciA9ICZyZWdpc3RlckZvcihKU0M6OnVu
bW9kaWZpZWRBcmd1bWVudHNSZWdpc3RlcihtX2NvZGVCbG9jay0+YXJndW1lbnRzUmVnaXN0ZXIo
KSkub2Zmc2V0KCkpOwotICAgICAgICAgICAgICAgIGluaXRpYWxpemVDYXB0dXJlZFZhcmlhYmxl
KHVuY2hlY2tlZEFyZ3VtZW50c1JlZ2lzdGVyLCBwcm9wZXJ0eU5hbWVzKCkuYXJndW1lbnRzLCB1
bmNoZWNrZWRBcmd1bWVudHNSZWdpc3Rlcik7Ci0gICAgICAgICAgICAgICAgaWYgKGZ1bmN0aW9u
Tm9kZS0+bW9kaWZpZXNBcmd1bWVudHMoKSkgewotICAgICAgICAgICAgICAgICAgICBlbWl0T3Bj
b2RlKG9wX21vdik7Ci0gICAgICAgICAgICAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChh
cmd1bWVudHNSZWdpc3Rlci0+aW5kZXgoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGluc3RydWN0
aW9ucygpLmFwcGVuZChhZGRDb25zdGFudFZhbHVlKGpzVW5kZWZpbmVkKCkpLT5pbmRleCgpKTsK
LSAgICAgICAgICAgICAgICAgICAgZW1pdE9wY29kZShvcF9tb3YpOwotICAgICAgICAgICAgICAg
ICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQodW5jaGVja2VkQXJndW1lbnRzUmVnaXN0ZXItPmlu
ZGV4KCkpOwotICAgICAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYWRkQ29u
c3RhbnRWYWx1ZShqc1VuZGVmaW5lZCgpKS0+aW5kZXgoKSk7Ci0gICAgICAgICAgICAgICAgICAg
IGxvY2FsQXJndW1lbnRzUmVnaXN0ZXIgPSBudWxscHRyOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQorICAgIAorICAgIC8vIE1ha2Ugc3VyZSB0aGUgY29kZSBi
bG9jayBrbm93cyBhYm91dCBhbGwgb2Ygb3VyIHBhcmFtZXRlcnMsIGFuZCBtYWtlIHN1cmUgdGhh
dCBwYXJhbWV0ZXJzCisgICAgLy8gbmVlZGluZyBkZWNvbnN0cnVjdGlvbiBhcmUgbm90ZWQuCisg
ICAgbV9wYXJhbWV0ZXJzLmdyb3cocGFyYW1ldGVycy5zaXplKCkgKyAxKTsgLy8gcmVzZXJ2ZSBz
cGFjZSBmb3IgInRoaXMiCisgICAgaW5pdGlhbGl6ZU5leHRQYXJhbWV0ZXIoKTsgLy8gdGhpcwor
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwYXJhbWV0ZXJzLnNpemUoKTsgKytpKSB7Cisg
ICAgICAgIGF1dG8gcGF0dGVybiA9IHBhcmFtZXRlcnMuYXQoaSk7CisgICAgICAgIFJlZ2lzdGVy
SUQqIHJlZyA9IGluaXRpYWxpemVOZXh0UGFyYW1ldGVyKCk7CisgICAgICAgIGlmICghcGF0dGVy
bi0+aXNCaW5kaW5nTm9kZSgpKQorICAgICAgICAgICAgbV9kZWNvbnN0cnVjdGVkUGFyYW1ldGVy
cy5hcHBlbmQoc3RkOjptYWtlX3BhaXIocmVnLCBwYXR0ZXJuKSk7CiAgICAgfQotCi0gICAgYm9v
bCBzaG91bGRDYXB0dXJlQWxsVGhlVGhpbmdzID0gbV9zaG91bGRFbWl0RGVidWdIb29rcyB8fCBj
b2RlQmxvY2stPnVzZXNFdmFsKCk7Ci0KKyAgICAKKyAgICAvLyBGaWd1cmUgb3V0IHNvbWUgaW50
ZXJlc3RpbmcgZmFjdHMgYWJvdXQgb3VyIGFyZ3VtZW50cy4KICAgICBib29sIGNhcHR1cmVzQW55
QXJndW1lbnRCeU5hbWUgPSBmYWxzZTsKLSAgICBWZWN0b3I8UmVnaXN0ZXJJRCosIDAsIFVuc2Fm
ZVZlY3Rvck92ZXJmbG93PiBjYXB0dXJlZEFyZ3VtZW50czsKLSAgICBpZiAoZnVuY3Rpb25Ob2Rl
LT5oYXNDYXB0dXJlZFZhcmlhYmxlcygpIHx8IHNob3VsZENhcHR1cmVBbGxUaGVUaGluZ3MpIHsK
KyAgICBpZiAoZnVuY3Rpb25Ob2RlLT5oYXNDYXB0dXJlZFZhcmlhYmxlcygpKSB7CiAgICAgICAg
IEZ1bmN0aW9uUGFyYW1ldGVycyYgcGFyYW1ldGVycyA9ICpmdW5jdGlvbk5vZGUtPnBhcmFtZXRl
cnMoKTsKLSAgICAgICAgY2FwdHVyZWRBcmd1bWVudHMucmVzaXplKHBhcmFtZXRlcnMuc2l6ZSgp
KTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwYXJhbWV0ZXJzLnNpemUoKTsgKytp
KSB7Ci0gICAgICAgICAgICBjYXB0dXJlZEFyZ3VtZW50c1tpXSA9IDA7CiAgICAgICAgICAgICBh
dXRvIHBhdHRlcm4gPSBwYXJhbWV0ZXJzLmF0KGkpOwogICAgICAgICAgICAgaWYgKCFwYXR0ZXJu
LT5pc0JpbmRpbmdOb2RlKCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAg
ICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IHN0YXRpY19jYXN0PGNvbnN0IEJpbmRpbmdOb2Rl
Kj4ocGF0dGVybiktPmJvdW5kUHJvcGVydHkoKTsKLSAgICAgICAgICAgIGlmICghZnVuY3Rpb25O
b2RlLT5jYXB0dXJlcyhpZGVudCkgJiYgIXNob3VsZENhcHR1cmVBbGxUaGVUaGluZ3MpCi0gICAg
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBjYXB0dXJlc0FueUFyZ3VtZW50QnlO
YW1lID0gdHJ1ZTsKLSAgICAgICAgICAgIGNhcHR1cmVkQXJndW1lbnRzW2ldID0gYWRkVmFyKGlk
ZW50LCBJc1ZhcmlhYmxlLCBJc1dhdGNoYWJsZSk7CisgICAgICAgICAgICBjYXB0dXJlc0FueUFy
Z3VtZW50QnlOYW1lIHw9IGNhcHR1cmVzKGlkZW50LmltcGwoKSk7CiAgICAgICAgIH0KICAgICB9
CiAKLSAgICBpZiAoY2FwdHVyZXNBbnlBcmd1bWVudEJ5TmFtZSAmJiAhc2hvdWxkVGVhck9mZkFy
Z3VtZW50c0VhZ2VybHkoKSkgewotICAgICAgICBzaXplX3QgcGFyYW1ldGVyQ291bnQgPSBtX3N5
bWJvbFRhYmxlLT5wYXJhbWV0ZXJDb3VudCgpOwotICAgICAgICBhdXRvIHNsb3dBcmd1bWVudHMg
PSBzdGQ6Om1ha2VfdW5pcXVlPFNsb3dBcmd1bWVudFtdPihwYXJhbWV0ZXJDb3VudCk7Ci0gICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcGFyYW1ldGVyQ291bnQ7ICsraSkgewotICAgICAg
ICAgICAgaWYgKCFjYXB0dXJlZEFyZ3VtZW50c1tpXSkgewotICAgICAgICAgICAgICAgIEFTU0VS
VChzbG93QXJndW1lbnRzW2ldLnN0YXR1cyA9PSBTbG93QXJndW1lbnQ6Ok5vcm1hbCk7Ci0gICAg
ICAgICAgICAgICAgc2xvd0FyZ3VtZW50c1tpXS5pbmRleCA9IENhbGxGcmFtZTo6YXJndW1lbnRP
ZmZzZXQoaSk7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBzbG93QXJndW1lbnRzW2ldLnN0YXR1cyA9IFNsb3dBcmd1bWVudDo6Q2FwdHVyZWQ7
Ci0gICAgICAgICAgICBzbG93QXJndW1lbnRzW2ldLmluZGV4ID0gY2FwdHVyZWRBcmd1bWVudHNb
aV0tPmluZGV4KCk7Ci0gICAgICAgIH0KLSAgICAgICAgbV9zeW1ib2xUYWJsZS0+c2V0U2xvd0Fy
Z3VtZW50cyhXVEY6Om1vdmUoc2xvd0FyZ3VtZW50cykpOwotICAgIH0KLQotICAgIFJlZ2lzdGVy
SUQqIGNhbGxlZVJlZ2lzdGVyID0gcmVzb2x2ZUNhbGxlZShmdW5jdGlvbk5vZGUpOyAvLyBNYXkg
cHVzaCB0byB0aGUgc2NvcGUgY2hhaW4gYW5kL29yIGFkZCBhIGNhcHR1cmVkIHZhci4KLQotICAg
IGNvbnN0IERlY2xhcmF0aW9uU3RhY2tzOjpGdW5jdGlvblN0YWNrJiBmdW5jdGlvblN0YWNrID0g
ZnVuY3Rpb25Ob2RlLT5mdW5jdGlvblN0YWNrKCk7Ci0gICAgY29uc3QgRGVjbGFyYXRpb25TdGFj
a3M6OlZhclN0YWNrJiB2YXJTdGFjayA9IGZ1bmN0aW9uTm9kZS0+dmFyU3RhY2soKTsKLSAgICBJ
ZGVudGlmaWVyU2V0IHRlc3Q7Ci0KLSAgICAvLyBDYXB0dXJlZCB2YXJpYWJsZXMgYW5kIGZ1bmN0
aW9ucyBnbyBmaXJzdCBzbyB0aGF0IGFjdGl2YXRpb25zIGRvbid0IGhhdmUKLSAgICAvLyB0byBz
dGVwIG92ZXIgdGhlIG5vbi1jYXB0dXJlZCBsb2NhbHMgdG8gbWFyayB0aGVtLgotICAgIGlmIChm
dW5jdGlvbk5vZGUtPmhhc0NhcHR1cmVkVmFyaWFibGVzKCkgfHwgc2hvdWxkQ2FwdHVyZUFsbFRo
ZVRoaW5ncykgewotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJvdW5kUGFyYW1ldGVy
UHJvcGVydGllcy5zaXplKCk7IGkrKykgewotICAgICAgICAgICAgY29uc3QgSWRlbnRpZmllciYg
aWRlbnQgPSBib3VuZFBhcmFtZXRlclByb3BlcnRpZXNbaV07Ci0gICAgICAgICAgICBpZiAoZnVu
Y3Rpb25Ob2RlLT5jYXB0dXJlcyhpZGVudCkgfHwgc2hvdWxkQ2FwdHVyZUFsbFRoZVRoaW5ncykK
LSAgICAgICAgICAgICAgICBhZGRWYXIoaWRlbnQsIElzVmFyaWFibGUsIElzV2F0Y2hhYmxlKTsK
LSAgICAgICAgfQotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZ1bmN0aW9uU3RhY2su
c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIEZ1bmN0aW9uQm9keU5vZGUqIGZ1bmN0aW9uID0g
ZnVuY3Rpb25TdGFja1tpXTsKLSAgICAgICAgICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0g
ZnVuY3Rpb24tPmlkZW50KCk7Ci0gICAgICAgICAgICBpZiAoZnVuY3Rpb25Ob2RlLT5jYXB0dXJl
cyhpZGVudCkgfHwgc2hvdWxkQ2FwdHVyZUFsbFRoZVRoaW5ncykgewotICAgICAgICAgICAgICAg
IG1fZnVuY3Rpb25zLmFkZChpZGVudC5pbXBsKCkpOwotICAgICAgICAgICAgICAgIGVtaXROZXdG
dW5jdGlvbihzY3JhdGNoLCBmdW5jdGlvbik7Ci0gICAgICAgICAgICAgICAgaW5pdGlhbGl6ZUNh
cHR1cmVkVmFyaWFibGUoYWRkVmFyKGlkZW50LCBJc1ZhcmlhYmxlLCBJc1dhdGNoYWJsZSksIGlk
ZW50LCBzY3JhdGNoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IHZhclN0YWNrLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBjb25z
dCBJZGVudGlmaWVyJiBpZGVudCA9IHZhclN0YWNrW2ldLmZpcnN0OwotICAgICAgICAgICAgaWYg
KGZ1bmN0aW9uTm9kZS0+Y2FwdHVyZXMoaWRlbnQpIHx8IHNob3VsZENhcHR1cmVBbGxUaGVUaGlu
Z3MpCi0gICAgICAgICAgICAgICAgYWRkVmFyKGlkZW50LCAodmFyU3RhY2tbaV0uc2Vjb25kICYg
RGVjbGFyYXRpb25TdGFja3M6OklzQ29uc3RhbnQpID8gSXNDb25zdGFudCA6IElzVmFyaWFibGUs
IElzV2F0Y2hhYmxlKTsKLSAgICAgICAgfQorICAgIGlmIChjYXB0dXJlc0FueUFyZ3VtZW50QnlO
YW1lKQorICAgICAgICBBU1NFUlQobV9sZXhpY2FsRW52aXJvbm1lbnRSZWdpc3Rlcik7CisgICAg
CisgICAgLy8gTmVlZCB0byBrbm93IHdoYXQgb3VyIGZ1bmN0aW9ucyBhcmUgY2FsbGVkLiBQYXJh
bWV0ZXJzIGhhdmUgc29tZSBnb29meSBiZWhhdmlvcnMgd2hlbiBpdAorICAgIC8vIGNvbWVzIHRv
IGZ1bmN0aW9ucyBvZiB0aGUgc2FtZSBuYW1lLgorICAgIGZvciAoRnVuY3Rpb25Cb2R5Tm9kZSog
ZnVuY3Rpb24gOiBmdW5jdGlvbk5vZGUtPmZ1bmN0aW9uU3RhY2soKSkKKyAgICAgICAgbV9mdW5j
dGlvbnMuYWRkKGZ1bmN0aW9uLT5pZGVudCgpLmltcGwoKSk7CisgICAgCisgICAgYm9vbCBuZWVk
c0FyZ3VtZW50cyA9IGZ1bmN0aW9uTm9kZS0+dXNlc0FyZ3VtZW50cygpIHx8IGNvZGVCbG9jay0+
dXNlc0V2YWwoKTsKKyAgICAKKyAgICBpZiAobmVlZHNBcmd1bWVudHMpIHsKKyAgICAgICAgLy8g
Q3JlYXRlIHRoZSBhcmd1bWVudHMgb2JqZWN0IG5vdy4gV2UgbWF5IHB1dCB0aGUgYXJndW1lbnRz
IG9iamVjdCBpbnRvIHRoZSBhY3RpdmF0aW9uIGlmCisgICAgICAgIC8vIGl0IGlzIGNhcHR1cmVk
LiBFaXRoZXIgd2F5LCB3ZSBjcmVhdGUgdHdvIGFyZ3VtZW50cyBvYmplY3QgdmFyaWFibGVzOiBv
bmUgaXMgb3VyCisgICAgICAgIC8vIHByaXZhdGUgdmFyaWFibGUgdGhhdCBpcyBpbW11dGFibGUs
IGFuZCBhbm90aGVyIHRoYXQgaXMgdGhlIHVzZXItdmlzaWJsZSB2YXJpYWJsZS4gVGhlCisgICAg
ICAgIC8vIGltbXV0YWJsZSBvbmUgaXMgb25seSB1c2VkIGhlcmUsIG9yIGR1cmluZyBmb3JtYWwg
cGFyYW1ldGVyIHJlc29sdXRpb25zIGlmIHdlIG9wdCBmb3IKKyAgICAgICAgLy8gRGlyZWN0QXJn
dW1lbnRzLgorICAgICAgICAKKyAgICAgICAgbV9hcmd1bWVudHNSZWdpc3RlciA9IGFkZFZhcigp
OworICAgICAgICBtX2FyZ3VtZW50c1JlZ2lzdGVyLT5yZWYoKTsKICAgICB9Ci0KLSAgICBtX3N5
bWJvbFRhYmxlLT5zZXRDYXB0dXJlRW5kKHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGNvZGVCbG9j
ay0+bV9udW1WYXJzKS5vZmZzZXQoKSk7Ci0KLSAgICBib29sIGNhbkxhemlseUNyZWF0ZUZ1bmN0
aW9ucyA9ICFmdW5jdGlvbk5vZGUtPm5lZWRzQWN0aXZhdGlvbkZvck1vcmVUaGFuVmFyaWFibGVz
KCkgJiYgIW1fc2hvdWxkRW1pdERlYnVnSG9va3MgJiYgIW1fdm0tPnR5cGVQcm9maWxlcigpICYm
ICFtX3ZtLT5jb250cm9sRmxvd1Byb2ZpbGVyKCk7Ci0gICAgbV9maXJzdExhenlGdW5jdGlvbiA9
IGNvZGVCbG9jay0+bV9udW1WYXJzOwotICAgIGlmICghc2hvdWxkQ2FwdHVyZUFsbFRoZVRoaW5n
cykgewotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZ1bmN0aW9uU3RhY2suc2l6ZSgp
OyArK2kpIHsKLSAgICAgICAgICAgIEZ1bmN0aW9uQm9keU5vZGUqIGZ1bmN0aW9uID0gZnVuY3Rp
b25TdGFja1tpXTsKLSAgICAgICAgICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gZnVuY3Rp
b24tPmlkZW50KCk7Ci0gICAgICAgICAgICBpZiAoIWZ1bmN0aW9uTm9kZS0+Y2FwdHVyZXMoaWRl
bnQpKSB7Ci0gICAgICAgICAgICAgICAgbV9mdW5jdGlvbnMuYWRkKGlkZW50LmltcGwoKSk7Ci0g
ICAgICAgICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHJlZyA9IGFkZFZhcihpZGVudCwgSXNW
YXJpYWJsZSwgTm90V2F0Y2hhYmxlKTsKLSAgICAgICAgICAgICAgICAvLyBEb24ndCBsYXppbHkg
Y3JlYXRlIGZ1bmN0aW9ucyB0aGF0IG92ZXJyaWRlIHRoZSBuYW1lICdhcmd1bWVudHMnCi0gICAg
ICAgICAgICAgICAgLy8gYXMgdGhpcyB3b3VsZCBjb21wbGljYXRlIGxhenkgaW5zdGFudGlhdGlv
biBvZiBhY3R1YWwgYXJndW1lbnRzLgotICAgICAgICAgICAgICAgIGlmICghY2FuTGF6aWx5Q3Jl
YXRlRnVuY3Rpb25zIHx8IGlkZW50ID09IHByb3BlcnR5TmFtZXMoKS5hcmd1bWVudHMpCi0gICAg
ICAgICAgICAgICAgICAgIGVtaXROZXdGdW5jdGlvbihyZWcuZ2V0KCksIGZ1bmN0aW9uKTsKLSAg
ICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgZW1pdEluaXRMYXp5UmVn
aXN0ZXIocmVnLmdldCgpKTsKLSAgICAgICAgICAgICAgICAgICAgbV9sYXp5RnVuY3Rpb25zLnNl
dChyZWctPnZpcnR1YWxSZWdpc3RlcigpLnRvTG9jYWwoKSwgZnVuY3Rpb24pOworICAgIAorICAg
IGlmIChuZWVkc0FyZ3VtZW50cyAmJiAhY29kZUJsb2NrLT5pc1N0cmljdE1vZGUoKSkgeworICAg
ICAgICAvLyBJZiB3ZSBjYXB0dXJlZCBhbnkgZm9ybWFsIHBhcmFtZXRlciBieSBuYW1lLCB0aGVu
IHdlIHVzZSBTY29wZWRBcmd1bWVudHMuIE90aGVyd2lzZSB3ZQorICAgICAgICAvLyB1c2UgRGly
ZWN0QXJndW1lbnRzLiBXaXRoIFNjb3BlZEFyZ3VtZW50cywgd2UgbGlmdCBhbGwgb2Ygb3VyIGFy
Z3VtZW50cyBpbnRvIHRoZQorICAgICAgICAvLyBhY3RpdmF0aW9uLgorICAgICAgICAKKyAgICAg
ICAgaWYgKGNhcHR1cmVzQW55QXJndW1lbnRCeU5hbWUpIHsKKyAgICAgICAgICAgIG1fc3ltYm9s
VGFibGUtPnNldEFyZ3VtZW50c0xlbmd0aCh2bSwgcGFyYW1ldGVycy5zaXplKCkpOworICAgICAg
ICAgICAgCisgICAgICAgICAgICAvLyBGb3IgZWFjaCBwYXJhbWV0ZXIsIHdlIGhhdmUgdHdvIHBv
c3NpYmlsaXRpZXM6CisgICAgICAgICAgICAvLyBFaXRoZXIgaXQncyBhIGJpbmRpbmcgbm9kZSB3
aXRoIG5vIGZ1bmN0aW9uIG92ZXJsYXAsIGluIHdoaWNoIGNhc2UgaXQgZ2V0cyBhIG5hbWUKKyAg
ICAgICAgICAgIC8vIGluIHRoZSBzeW1ib2wgdGFibGUgLSBvciBpdCBqdXN0IGdldHMgc3BhY2Ug
cmVzZXJ2ZWQgaW4gdGhlIHN5bWJvbCB0YWJsZS4gRWl0aGVyCisgICAgICAgICAgICAvLyB3YXkg
d2UgbGlmdCB0aGUgdmFsdWUgaW50byB0aGUgc2NvcGUuCisgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgcGFyYW1ldGVycy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgICAg
IFNjb3BlT2Zmc2V0IG9mZnNldCA9IG1fc3ltYm9sVGFibGUtPnRha2VOZXh0U2NvcGVPZmZzZXQo
KTsKKyAgICAgICAgICAgICAgICBpZiAoU3RyaW5nSW1wbCogbmFtZSA9IHZpc2libGVOYW1lRm9y
UGFyYW1ldGVyKHBhcmFtZXRlcnMuYXQoaSkpKSB7CisgICAgICAgICAgICAgICAgICAgIFN5bWJv
bFRhYmxlRW50cnkgZW50cnkob2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgICAgLy8gU3RvcmVz
IHRvIHRoZXNlIHZhcmlhYmxlcyB2aWEgdGhlIFNjb3BlZEFyZ3VtZW50cyBvYmplY3Qgd2lsbCBu
b3QgZG8KKyAgICAgICAgICAgICAgICAgICAgLy8gbm90aWZ5V3JpdGUoKSwgc2luY2UgdGhhdCB3
b3VsZCBiZSBjdW1iZXJzb21lLiBBbHNvLCB3YXRjaGluZyBmb3JtYWwKKyAgICAgICAgICAgICAg
ICAgICAgLy8gcGFyYW1ldGVycyB3aGVuICJhcmd1bWVudHMiIGlzIGluIHBsYXkgaXMgdW5saWtl
bHkgdG8gYmUgc3VwZXIgcHJvZml0YWJsZS4KKyAgICAgICAgICAgICAgICAgICAgLy8gU28sIHdl
IGp1c3QgZGlzYWJsZSBpdC4KKyAgICAgICAgICAgICAgICAgICAgZW50cnkuZGlzYWJsZVdhdGNo
aW5nKCk7CisgICAgICAgICAgICAgICAgICAgIG1fc3ltYm9sVGFibGUtPnNldChuYW1lLCBvZmZz
ZXQpOwogICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBhZGRPcGNvZGUob3BfcHV0
X3RvX3Njb3BlKTsKKyAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQobV9sZXhp
Y2FsRW52aXJvbm1lbnRSZWdpc3Rlci0+aW5kZXgoKSk7CisgICAgICAgICAgICAgICAgaW5zdHJ1
Y3Rpb25zKCkuYXBwZW5kKFVJTlRfTUFYKTsKKyAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbnMo
KS5hcHBlbmQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMSArIGkpLm9mZnNldCgpKTsKKyAg
ICAgICAgICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoUmVzb2x2ZU1vZGVBbmRUeXBlKFRo
cm93SWZOb3RGb3VuZCwgTG9jYWxDbG9zdXJlVmFyKSk7CisgICAgICAgICAgICAgICAgaW5zdHJ1
Y3Rpb25zKCkuYXBwZW5kKDApOworICAgICAgICAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVu
ZChvZmZzZXQub2Zmc2V0KCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAg
ICAgICAvLyBUaGlzIGNyZWF0ZXMgYSBzY29wZWQgYXJndW1lbnRzIG9iamVjdCBhbmQgY29waWVz
IHRoZSBvdmVyZmxvdyBhcmd1bWVudHMgaW50byB0aGUKKyAgICAgICAgICAgIC8vIHNjb3BlLiBJ
dCdzIHRoZSBlcXVpdmFsZW50IG9mIGNhbGxpbmcgU2NvcGVkQXJndW1lbnRzOjpjcmVhdGVCeUNv
cHlpbmcoKS4KKyAgICAgICAgICAgIGVtaXRPcGNvZGUob3BfY3JlYXRlX3Njb3BlZF9hcmd1bWVu
dHMpOworICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKG1fYXJndW1lbnRzUmVnaXN0
ZXItPmluZGV4KCkpOworICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKG1fbGV4aWNh
bEVudmlyb25tZW50UmVnaXN0ZXItPmluZGV4KCkpOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgLy8gV2UncmUgZ29pbmcgdG8gcHV0IGFsbCBwYXJhbWV0ZXJzIGludG8gdGhlIERpcmVj
dEFyZ3VtZW50cyBvYmplY3QuIEZpcnN0IGVuc3VyZQorICAgICAgICAgICAgLy8gdGhhdCB0aGUg
c3ltYm9sIHRhYmxlIGtub3dzIHRoYXQgdGhpcyBpcyBoYXBwZW5pbmcuCisgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcGFyYW1ldGVycy5zaXplKCk7ICsraSkgeworICAgICAg
ICAgICAgICAgIGlmIChTdHJpbmdJbXBsKiBuYW1lID0gdmlzaWJsZU5hbWVGb3JQYXJhbWV0ZXIo
cGFyYW1ldGVycy5hdChpKSkpCisgICAgICAgICAgICAgICAgICAgIG1fc3ltYm9sVGFibGUtPnNl
dChuYW1lLCBDYXB0dXJlZEFyZ3VtZW50c09mZnNldChpKSk7CiAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIGVtaXRPcGNvZGUob3BfY3JlYXRlX2RpcmVjdF9hcmd1bWVu
dHMpOworICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKG1fYXJndW1lbnRzUmVnaXN0
ZXItPmluZGV4KCkpOwogICAgICAgICB9Ci0gICAgICAgIG1fbGFzdExhenlGdW5jdGlvbiA9IGNh
bkxhemlseUNyZWF0ZUZ1bmN0aW9ucyA/IGNvZGVCbG9jay0+bV9udW1WYXJzIDogbV9maXJzdExh
enlGdW5jdGlvbjsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBib3VuZFBhcmFtZXRl
clByb3BlcnRpZXMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgICAgIGNvbnN0IElkZW50aWZpZXIm
IGlkZW50ID0gYm91bmRQYXJhbWV0ZXJQcm9wZXJ0aWVzW2ldOwotICAgICAgICAgICAgaWYgKCFm
dW5jdGlvbk5vZGUtPmNhcHR1cmVzKGlkZW50KSkKLSAgICAgICAgICAgICAgICBhZGRWYXIoaWRl
bnQsIElzVmFyaWFibGUsIElzV2F0Y2hhYmxlKTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBD
cmVhdGUgdGhlIGZvcm1hbCBwYXJhbWV0ZXJzIHRoZSBub3JtYWwgd2F5LiBBbnkgb2YgdGhlbSBj
b3VsZCBiZSBjYXB0dXJlZCwgb3Igbm90LiBJZgorICAgICAgICAvLyBjYXB0dXJlZCwgbGlmdCB0
aGVtIGludG8gdGhlIHNjb3BlLgorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcGFy
YW1ldGVycy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgU3RyaW5nSW1wbCogbmFtZSA9IHZp
c2libGVOYW1lRm9yUGFyYW1ldGVyKHBhcmFtZXRlcnMuYXQoaSkpOworICAgICAgICAgICAgaWYg
KCFuYW1lKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgCisgICAgICAg
ICAgICBpZiAoIWNhcHR1cmVzKG5hbWUpKSB7CisgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyB0
aGUgZWFzeSBjYXNlIC0ganVzdCB0ZWxsIHRoZSBzeW1ib2wgdGFibGUgYWJvdXQgdGhlIGFyZ3Vt
ZW50LiBJdCB3aWxsCisgICAgICAgICAgICAgICAgLy8gYmUgYWNjZXNzZWQgZGlyZWN0bHkuCisg
ICAgICAgICAgICAgICAgbV9zeW1ib2xUYWJsZS0+c2V0KG5hbWUsIHZpcnR1YWxSZWdpc3RlckZv
ckFyZ3VtZW50KDEgKyBpKSk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFNjb3BlT2Zmc2V0IG9mZnNldCA9IG1fc3lt
Ym9sVGFibGUtPnRha2VOZXh0U2NvcGVPZmZzZXQoKTsKKyAgICAgICAgICAgIElkZW50aWZpZXIm
IGlkZW50ID0KKyAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxjb25zdCBCaW5kaW5nTm9kZSo+
KHBhcmFtZXRlcnMuYXQoaSkpLT5ib3VuZFByb3BlcnR5KCk7CisgICAgICAgICAgICBtX3N5bWJv
bFRhYmxlLT5zZXQobmFtZSwgb2Zmc2V0KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgYWRk
T3Bjb2RlKG9wX3B1dF90b19zY29wZSk7CisgICAgICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBl
bmQobV9sZXhpY2FsRW52aXJvbm1lbnRSZWdpc3Rlci0+aW5kZXgoKSk7CisgICAgICAgICAgICBp
bnN0cnVjdGlvbnMoKS5hcHBlbmQoYWRkQ29uc3RhbnQoaWRlbnQpKTsKKyAgICAgICAgICAgIGlu
c3RydWN0aW9ucygpLmFwcGVuZCgmcmVnaXN0ZXJGb3IodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1l
bnQoMSArIGkpKSk7CisgICAgICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoUmVzb2x2ZU1v
ZGVBbmRUeXBlKFRocm93SWZOb3RGb3VuZCwgTG9jYWxDbG9zdXJlVmFyKSk7CisgICAgICAgICAg
ICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoMCk7CisgICAgICAgICAgICBpbnN0cnVjdGlvbnMoKS5h
cHBlbmQob2Zmc2V0Lm9mZnNldCgpKTsKICAgICAgICAgfQotICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IHZhclN0YWNrLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBjb25zdCBJZGVu
dGlmaWVyJiBpZGVudCA9IHZhclN0YWNrW2ldLmZpcnN0OwotICAgICAgICAgICAgaWYgKCFmdW5j
dGlvbk5vZGUtPmNhcHR1cmVzKGlkZW50KSkKLSAgICAgICAgICAgICAgICBhZGRWYXIoaWRlbnQs
ICh2YXJTdGFja1tpXS5zZWNvbmQgJiBEZWNsYXJhdGlvblN0YWNrczo6SXNDb25zdGFudCkgPyBJ
c0NvbnN0YW50IDogSXNWYXJpYWJsZSwgTm90V2F0Y2hhYmxlKTsKKyAgICB9CisgICAgCisgICAg
aWYgKG5lZWRzQXJndW1lbnRzICYmIGNvZGVCbG9jay0+aXNTdHJpY3RNb2RlKCkpIHsKKyAgICAg
ICAgLy8gQWxsb2NhdGUgYW4gb3V0LW9mLWJhbmRzIGFyZ3VtZW50cyBvYmplY3QuCisgICAgICAg
IGFkZE9wY29kZShvcF9jcmVhdGVfb3V0X29mX2JhbmRfYXJndW1lbnRzKTsKKyAgICAgICAgaW5z
dHJ1Y3Rpb25zKCkuYXBwZW5kKG1fYXJndWVudHNSZWdpc3Rlci0+aW5kZXgoKSk7CisgICAgfQor
ICAgIAorICAgIC8vIE5vdyBkZWNsYXJlIGFsbCB2YXJpYWJsZXMuCisgICAgZm9yIChjb25zdCBJ
ZGVudGlmaWVyJiBpZGVudCA6IGJvdW5kUGFyYW1ldGVyUHJvcGVydGllcykKKyAgICAgICAgY3Jl
YXRlVmFyaWFibGUoaWRlbnQsIHZhcktpbmQoaWRlbnQuaW1wbCgpKSwgSXNWYXJpYWJsZSk7Cisg
ICAgZm9yIChGdW5jdGlvbkJvZHlOb2RlKiBmdW5jdGlvbiA6IGZ1bmN0aW9uTm9kZS0+ZnVuY3Rp
b25TdGFjaygpKSB7CisgICAgICAgIGNyZWF0ZVZhcmlhYmxlKGRlbnQsIHZhcktpbmQoaWRlbnQu
aW1wbCgpKSwgSXNWYXJpYWJsZSk7CisgICAgICAgIG1fZnVuY3Rpb25zVG9Jbml0aWFsaXplLmFw
cGVuZChmdW5jdGlvbik7CisgICAgfQorICAgIGZvciAoYXV0byYgZW50cnkgOiBmdW5jdGlvbk5v
ZGUtPnZhclN0YWNrKCkpIHsKKyAgICAgICAgY3JlYXRlVmFyaWFibGUoCisgICAgICAgICAgICBl
bnRyeS5maXJzdCwgdmFyS2luZChlbnRyeS5maXJzdC5pbXBsKCkpLAorICAgICAgICAgICAgKGVu
dHJ5LnNlY29uZCAmIERlY2xhcmF0aW9uU3RhY2tzOjpJc0NvbnN0YW50KSA/IElzQ29uc3RhbnQg
OiBJc1ZhcmlhYmxlKTsKKyAgICB9CisgICAgCisgICAgLy8gVGhlcmUgYXJlIHNvbWUgdmFyaWFi
bGVzIHRoYXQgbmVlZCB0byBiZSBwcmVpbml0aWFsaXplZCB0byBzb21ldGhpbmcgb3RoZXIgdGhh
biBVbmRlZmluZWQ6CisgICAgLy8KKyAgICAvLyAtICJhcmd1bWVudHMiOiB1bmxlc3MgaXQncyB1
c2VkIGFzIGEgZnVuY3Rpb24gb3IgcGFyYW1ldGVyLCB0aGlzIHNob3VsZCByZWZlciB0byB0aGUK
KyAgICAvLyAgIGFyZ3VtZW50cyBvYmplY3QuCisgICAgLy8KKyAgICAvLyAtIGNhbGxlZTogdW5s
ZXNzIGl0J3MgdXNlZCBhcyBhIHZhciwgZnVuY3Rpb24sIG9yIHBhcmFtZXRlciwgdGhpcyBzaG91
bGQgcmVmZXIgdG8gdGhlCisgICAgLy8gICBjYWxsZWUgKGkuZS4gb3VyIGZ1bmN0aW9uKS4KKyAg
ICAvLworICAgIC8vIC0gZnVuY3Rpb25zOiB0aGVzZSBhbHdheXMgb3ZlcnJpZGUgZXZlcnl0aGlu
ZyBlbHNlLgorICAgIC8vCisgICAgLy8gVGhlIG1vc3QgbG9naWNhbCB3YXkgdG8gZG8gYWxsIG9m
IHRoaXMgaXMgdG8gaW5pdGlhbGl6ZSBub25lIG9mIHRoZSB2YXJpYWJsZXMgdW50aWwgbm93LAor
ICAgIC8vIGFuZCB0aGVuIGluaXRpYWxpemUgdGhlbSBpbiBCeXRlY29kZUdlbmVyYXRvcjo6Z2Vu
ZXJhdGUoKSBpbiBzdWNoIGFuIG9yZGVyIHRoYXQgdGhlIHJ1bGVzCisgICAgLy8gZm9yIGhvdyB0
aGVzZSB0aGluZ3Mgb3ZlcnJpZGUgZWFjaCBvdGhlciBlbmQgdXAgaG9sZGluZy4gV2Ugd291bGQg
aW5pdGlhbGl6ZSB0aGUgY2FsbGVlCisgICAgLy8gZmlyc3QsIHRoZW4gImFyZ3VtZW50cyIsIHRo
ZW4gYWxsIGFyZ3VtZW50cywgdGhlbiB0aGUgZnVuY3Rpb25zLgorICAgIC8vCisgICAgLy8gQnV0
IHNvbWUgYXJndW1lbnRzIGFyZSBhbHJlYWR5IGluaXRpYWxpemVkIGJ5IGRlZmF1bHQsIHNpbmNl
IGlmIHRoZXkgYXJlbid0IGNhcHR1cmVkIGFuZCB3ZQorICAgIC8vIGRvbid0IGhhdmUgImFyZ3Vt
ZW50cyIgdGhlbiB3ZSBqdXN0IHBvaW50IHRoZSBzeW1ib2wgdGFibGUgYXQgdGhlIHN0YWNrIHNs
b3Qgb2YgdGhvc2UKKyAgICAvLyBhcmd1bWVudHMuIFdlIGVuZCB1cCBpbml0aWFsaXppbmcgdGhl
IHJlc3Qgb2YgdGhlIGFyZ3VtZW50cyB0aGF0IGhhdmUgYW4gdW5jb21wbGljYXRlZAorICAgIC8v
IGJpbmRpbmcgKGkuZS4gZG9uJ3QgaW52b2x2ZSBkZWNvbnN0cnVjdGlvbikgYWJvdmUgd2hlbiBm
aWd1cmluZyBvdXQgaG93IHRvIGxheSB0aGVtIG91dCwKKyAgICAvLyBiZWNhdXNlIHRoYXQncyBq
dXN0IHRoZSBzaW1wbGVzdCB0aGluZy4gVGhpcyBtZWFucyB0aGF0IHdoZW4gd2UgaW5pdGlhbGl6
ZSB0aGVtLCB3ZSBoYXZlIHRvCisgICAgLy8gd2F0Y2ggb3V0IGZvciB0aGUgdGhpbmdzIHRoYXQg
b3ZlcnJpZGUgYXJndW1lbnRzIChuYW1lbHksIGZ1bmN0aW9ucykuCisgICAgLy8KKyAgICAvLyBX
ZSBhbHNvIGluaXRpYWxpemUgY2FsbGVlIGhlcmUgYXMgd2VsbCwganVzdCBiZWNhdXNlIGl0J3Mg
c28gd2VpcmQuIFdlIGtub3cgd2hldGhlciB3ZSB3YW50CisgICAgLy8gdG8gZG8gdGhpcyBiZWNh
dXNlIHdlIGNhbiBqdXN0IGNoZWNrIGlmIGl0J3MgaW4gdGhlIHN5bWJvbCB0YWJsZS4KKyAgICBp
ZiAoZnVuY3Rpb25OYW1lSXNJblNjb3BlKGZ1bmN0aW9uTm9kZS0+aWRlbnQoKSwgZnVuY3Rpb25O
b2RlLT5mdW5jdGlvbk1vZGUoKSkKKyAgICAgICAgJiYgIWZ1bmN0aW9uTmFtZVNjb3BlSXNEeW5h
bWljKGNvZGVCbG9jay0+dXNlc0V2YWwoKSwgY29kZUJsb2NrLT5pc1N0cmljdE1vZGUoKSkKKyAg
ICAgICAgJiYgbV9zeW1ib2xUYWJsZS0+Z2V0KGZ1bmN0aW9uTm9kZS0+aWRlbnQoKSkuaXNOdWxs
KCkpIHsKKyAgICAgICAgaWYgKGNhcHR1cmVzKGZ1bmN0aW9uTm9kZS0+aWRlbnQoKS5pbXBsKCkp
KSB7CisgICAgICAgICAgICBTY29wZU9mZnNldCBvZmZzZXQgPSBtX3N5bWJvbFRhYmxlLT50YWtl
TmV4dFNjb3BlT2Zmc2V0KCk7CisgICAgICAgICAgICBtX3N5bWJvbFRhYmxlLT5hZGQoCisgICAg
ICAgICAgICAgICAgZnVuY3Rpb25Ob2RlLT5pZGVudCgpLmltcGwoKSwKKyAgICAgICAgICAgICAg
ICBTeW1ib2xUYWJsZUVudHJ5KFZhck9mZnNldChvZmZzZXQpLCBSZWFkT25seSkpOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBhZGRPcGNvZGUob3BfcHV0X3RvX3Njb3BlKTsKKyAgICAgICAg
ICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChtX2xleGljYWxFbnZpcm9ubWVudFJlZ2lzdGVyLT5p
bmRleCgpKTsKKyAgICAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChhZGRDb25zdGFudChm
dW5jdGlvbk5vZGUtPmlkZW50KCkpKTsKKyAgICAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVu
ZChtX2NhbGxlZVJlZ2lzdGVyLmluZGV4KCkpOworICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zKCku
YXBwZW5kKFJlc29sdmVNb2RlQW5kVHlwZShUaHJvd0lmTm90Rm91bmQsIExvY2FsQ2xvc3VyZVZh
cikpOworICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKDApOworICAgICAgICAgICAg
aW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKG9mZnNldC5vZmZzZXQoKSk7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICBtX3N5bWJvbFRhYmxlLT5hZGQoCisgICAgICAgICAgICAgICAgZnVuY3Rp
b25Ob2RlLT5pZGVudCgpLmltcGwoKSwKKyAgICAgICAgICAgICAgICBTeW1ib2xUYWJsZUVudHJ5
KFZhck9mZnNldChtX2NhbGxlZVJlZ2lzdGVyLnZpcnR1YWxSZWdpc3RlcigpKSwgUmVhZE9ubHkp
KTsKICAgICAgICAgfQogICAgIH0KLQotICAgIGlmIChtX3N5bWJvbFRhYmxlLT5jYXB0dXJlQ291
bnQoKSkKLSAgICAgICAgZW1pdE9wY29kZShvcF90b3VjaF9lbnRyeSk7CiAgICAgCi0gICAgbV9w
YXJhbWV0ZXJzLmdyb3cocGFyYW1ldGVycy5zaXplKCkgKyAxKTsgLy8gcmVzZXJ2ZSBzcGFjZSBm
b3IgInRoaXMiCi0KLSAgICAvLyBBZGQgInRoaXMiIGFzIGEgcGFyYW1ldGVyCi0gICAgaW50IG5l
eHRQYXJhbWV0ZXJJbmRleCA9IENhbGxGcmFtZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCk7Ci0gICAg
bV90aGlzUmVnaXN0ZXIuc2V0SW5kZXgobmV4dFBhcmFtZXRlckluZGV4KyspOwotICAgIG1fY29k
ZUJsb2NrLT5hZGRQYXJhbWV0ZXIoKTsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcGFy
YW1ldGVycy5zaXplKCk7ICsraSwgKytuZXh0UGFyYW1ldGVySW5kZXgpIHsKLSAgICAgICAgaW50
IGluZGV4ID0gbmV4dFBhcmFtZXRlckluZGV4OwotICAgICAgICBhdXRvIHBhdHRlcm4gPSBwYXJh
bWV0ZXJzLmF0KGkpOwotICAgICAgICBpZiAoIXBhdHRlcm4tPmlzQmluZGluZ05vZGUoKSkgewot
ICAgICAgICAgICAgbV9jb2RlQmxvY2stPmFkZFBhcmFtZXRlcigpOwotICAgICAgICAgICAgUmVn
aXN0ZXJJRCYgcGFyYW1ldGVyID0gcmVnaXN0ZXJGb3IoaW5kZXgpOwotICAgICAgICAgICAgcGFy
YW1ldGVyLnNldEluZGV4KGluZGV4KTsKLSAgICAgICAgICAgIG1fZGVjb25zdHJ1Y3RlZFBhcmFt
ZXRlcnMuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKCZwYXJhbWV0ZXIsIHBhdHRlcm4pKTsKLSAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgIC8vIFRoaXMgaXMgb3VyIGZpbmFsIGFjdCBvZiB3ZWlyZG5l
c3MuICJhcmd1bWVudHMiIGlzIG92ZXJyaWRkZW4gYnkgZXZlcnl0aGluZyBleGNlcHQgdGhlCisg
ICAgLy8gY2FsbGVlLiBXZSBhZGQgaXQgdG8gdGhlIHN5bWJvbCB0YWJsZSBpZiBpdCdzIG5vdCBh
bHJlYWR5IHRoZXJlIGFuZCBpdCdzIG5vdCBhbiBhcmd1bWVudC4KKyAgICBpZiAobmVlZHNBcmd1
bWVudHMpIHsKKyAgICAgICAgLy8gSWYgImFyZ3VtZW50cyIgaXMgb3ZlcnJpZGRlbiBieSBhIGZ1
bmN0aW9uIG9yIGRlY29uc3RydWN0ZWQgcGFyYW1ldGVyIG5hbWUsIHRoZW4gaXQncworICAgICAg
ICAvLyBPSyBmb3IgdXMgdG8gY2FsbCBjcmVhdGVWYXJpYWJsZSgpIGJlY2F1c2UgaXQgd29uJ3Qg
Y2hhbmdlIGFueXRoaW5nLiBJdCdzIGFsc28gT0sgZm9yCisgICAgICAgIC8vIHVzIHRvIHRoZW0g
dGVsbCBCeXRlY29kZUdlbmVyYXRvcjo6Z2VuZXJhdGUoKSB0byB3cml0ZSB0byBpdCBiZWNhdXNl
IGl0IHdpbGwgZG8gc28KKyAgICAgICAgLy8gYmVmb3JlIGl0IGluaXRpYWxpemVzIGZ1bmN0aW9u
cyBhbmQgZGVjb25zdHJ1Y3RlZCBwYXJhbWV0ZXJzLiBCdXQgaWYgImFyZ3VtZW50cyIgaXMKKyAg
ICAgICAgLy8gb3ZlcnJpZGRlbiBieSBhICJzaW1wbGUiIGZ1bmN0aW9uIHBhcmFtZXRlciwgdGhl
biB3ZSBoYXZlIHRvIGJhaWw6IGNyZWF0ZVZhcmlhYmxlKCkKKyAgICAgICAgLy8gd291bGQgYXNz
ZXJ0IGFuZCBCeXRlY29kZUdlbmVyYXRvcjo6Z2VuZXJhdGUoKSB3b3VsZCB3cml0ZSB0aGUgImFy
Z3VtZW50cyIgYWZ0ZXIgdGhlCisgICAgICAgIC8vIGFyZ3VtZW50IHZhbHVlIGhhZCBhbHJlYWR5
IGJlZW4gcHJvcGVybHkgaW5pdGlhbGl6ZWQuCisgICAgICAgIAorICAgICAgICBib29sIGhhdmVQ
YXJhbWV0ZXJOYW1lZEFyZ3VtZW50cyA9IGZhbHNlOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgcGFyYW1ldGVycy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgU3RyaW5nSW1w
bCogbmFtZSA9IHZpc2libGVOYW1lRm9yUGFyYW1ldGVyKHBhcmFtZXRlcnMuYXQoaSkpOworICAg
ICAgICAgICAgaWYgKG5hbWUgPT0gcHJvcGVydHlOYW1lcygpLmFyZ3VtZW50cy5pbXBsKCkpIHsK
KyAgICAgICAgICAgICAgICBoYXZlUGFyYW1ldGVyTmFtZWRBcmd1bWVudHMgPSB0cnVlOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIGF1
dG8gc2ltcGxlUGFyYW1ldGVyID0gc3RhdGljX2Nhc3Q8Y29uc3QgQmluZGluZ05vZGUqPihwYXR0
ZXJuKTsKLSAgICAgICAgaWYgKGNhcHR1cmVkQXJndW1lbnRzLnNpemUoKSAmJiBjYXB0dXJlZEFy
Z3VtZW50c1tpXSkgewotICAgICAgICAgICAgQVNTRVJUKChmdW5jdGlvbk5vZGUtPmhhc0NhcHR1
cmVkVmFyaWFibGVzKCkgJiYgZnVuY3Rpb25Ob2RlLT5jYXB0dXJlcyhzaW1wbGVQYXJhbWV0ZXIt
PmJvdW5kUHJvcGVydHkoKSkpIHx8IHNob3VsZENhcHR1cmVBbGxUaGVUaGluZ3MpOwotICAgICAg
ICAgICAgaW5kZXggPSBjYXB0dXJlZEFyZ3VtZW50c1tpXS0+aW5kZXgoKTsKLSAgICAgICAgICAg
IFJlZ2lzdGVySUQgb3JpZ2luYWwobmV4dFBhcmFtZXRlckluZGV4KTsKLSAgICAgICAgICAgIGlu
aXRpYWxpemVDYXB0dXJlZFZhcmlhYmxlKGNhcHR1cmVkQXJndW1lbnRzW2ldLCBzaW1wbGVQYXJh
bWV0ZXItPmJvdW5kUHJvcGVydHkoKSwgJm9yaWdpbmFsKTsKKyAgICAgICAgCisgICAgICAgIGlm
ICghaGF2ZVBhcmFtZXRlck5hbWVkQXJndW1lbnRzKSB7CisgICAgICAgICAgICBjcmVhdGVWYXJp
YWJsZSgKKyAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWVzKCkuYXJndW1lbnRzLCB2YXJLaW5k
KHByb3BlcnR5TmFtZXMoKS5hcmd1bWVudHMuaW1wbCgpKSwgSXNWYXJpYWJsZSk7CisgICAgICAg
ICAgICBtX25lZWRUb0luaXRpYWxpemVBcmd1bWVudHMgPSB0cnVlOwogICAgICAgICB9Ci0gICAg
ICAgIGFkZFBhcmFtZXRlcihzaW1wbGVQYXJhbWV0ZXItPmJvdW5kUHJvcGVydHkoKSwgaW5kZXgp
OwogICAgIH0KLQotICAgIC8vIFdlIGRlY2xhcmUgdGhlIGNhbGxlZSdzIG5hbWUgbGFzdCBiZWNh
dXNlIGl0IHNob3VsZCBsb3NlIHRvIGEgdmFyLCBmdW5jdGlvbiwgYW5kL29yIHBhcmFtZXRlciBk
ZWNsYXJhdGlvbi4KLSAgICBhZGRDYWxsZWUoZnVuY3Rpb25Ob2RlLCBjYWxsZWVSZWdpc3Rlcik7
CisgICAgCisgICAgaWYgKG1fc3ltYm9sVGFibGUtPnNjb3BlU2l6ZSgpKQorICAgICAgICBlbWl0
T3Bjb2RlKG9wX3RvdWNoX2VudHJ5KTsKIAogICAgIGlmIChpc0NvbnN0cnVjdG9yKCkpIHsKICAg
ICAgICAgZW1pdENyZWF0ZVRoaXMoJm1fdGhpc1JlZ2lzdGVyKTsKQEAgLTQwOSw3ICs0NTIsNiBA
QCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoVk0mCiAgICAgICAgIGluc3Ry
dWN0aW9ucygpLmFwcGVuZCgwKTsKICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKDApOwog
ICAgIH0KLSAgICBtX2xvY2FsQXJndW1lbnRzUmVnaXN0ZXIgPSBsb2NhbEFyZ3VtZW50c1JlZ2lz
dGVyOwogfQogCiBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoVk0mIHZtLCBF
dmFsTm9kZSogZXZhbE5vZGUsIFVubGlua2VkRXZhbENvZGVCbG9jayogY29kZUJsb2NrLCBEZWJ1
Z2dlck1vZGUgZGVidWdnZXJNb2RlLCBQcm9maWxlck1vZGUgcHJvZmlsZXJNb2RlKQpAQCAtNDQ4
LDEwOCArNDkwLDIyIEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjp+Qnl0ZWNvZGVHZW5lcmF0b3IoKQog
ewogfQogCi1SZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEluaXRMYXp5UmVnaXN0
ZXIoUmVnaXN0ZXJJRCogcmVnKQorUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmluaXRp
YWxpemVOZXh0UGFyYW1ldGVyKCkKIHsKLSAgICBlbWl0T3Bjb2RlKG9wX2luaXRfbGF6eV9yZWcp
OwotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChyZWctPmluZGV4KCkpOwotICAgIEFTU0VSVCgh
aGFzV2F0Y2hhYmxlVmFyaWFibGUocmVnLT5pbmRleCgpKSk7Ci0gICAgcmV0dXJuIHJlZzsKLX0K
LQotUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmluaXRpYWxpemVDYXB0dXJlZFZhcmlh
YmxlKFJlZ2lzdGVySUQqIGRzdCwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBSZWdp
c3RlcklEKiB2YWx1ZSkKLXsKLQotICAgIG1fY29kZUJsb2NrLT5hZGRQcm9wZXJ0eUFjY2Vzc0lu
c3RydWN0aW9uKGluc3RydWN0aW9ucygpLnNpemUoKSk7Ci0gICAgZW1pdE9wY29kZShvcF9wdXRf
dG9fc2NvcGUpOwotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChtX2xleGljYWxFbnZpcm9ubWVu
dFJlZ2lzdGVyLT5pbmRleCgpKTsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYWRkQ29uc3Rh
bnQocHJvcGVydHlOYW1lKSk7Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHZhbHVlLT5pbmRl
eCgpKTsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoUmVzb2x2ZU1vZGVBbmRUeXBlKFRocm93
SWZOb3RGb3VuZCwgTG9jYWxDbG9zdXJlVmFyKS5vcGVyYW5kKCkpOwotICAgIGludCBvcGVyYW5k
ID0gcmVnaXN0ZXJGb3IoZHN0LT5pbmRleCgpKS5pbmRleCgpOwotICAgIGJvb2wgaXNXYXRjaGFi
bGVWYXJpYWJsZSA9IGhhc1dhdGNoYWJsZVZhcmlhYmxlKG9wZXJhbmQpOwotICAgIEFTU0VSVCgh
aXNXYXRjaGFibGVWYXJpYWJsZSB8fCB3YXRjaGFibGVWYXJpYWJsZUlkZW50aWZpZXIob3BlcmFu
ZCkgPT0gcHJvcGVydHlOYW1lKTsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoaXNXYXRjaGFi
bGVWYXJpYWJsZSk7Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGRzdC0+aW5kZXgoKSk7Ci0g
ICAgcmV0dXJuIGRzdDsKLX0KLQotUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OnJlc29s
dmVDYWxsZWUoRnVuY3Rpb25Ob2RlKiBmdW5jdGlvbk5vZGUpCi17Ci0gICAgaWYgKCFmdW5jdGlv
bk5hbWVJc0luU2NvcGUoZnVuY3Rpb25Ob2RlLT5pZGVudCgpLCBmdW5jdGlvbk5vZGUtPmZ1bmN0
aW9uTW9kZSgpKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpZiAoZnVuY3Rpb25OYW1lU2Nv
cGVJc0R5bmFtaWMobV9jb2RlQmxvY2stPnVzZXNFdmFsKCksIG1fY29kZUJsb2NrLT5pc1N0cmlj
dE1vZGUoKSkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgbV9jYWxsZWVSZWdpc3Rlci5zZXRJ
bmRleChKU1N0YWNrOjpDYWxsZWUpOwotICAgIGlmIChmdW5jdGlvbk5vZGUtPmNhcHR1cmVzKGZ1
bmN0aW9uTm9kZS0+aWRlbnQoKSkpCi0gICAgICAgIHJldHVybiBpbml0aWFsaXplQ2FwdHVyZWRW
YXJpYWJsZShhZGRWYXIoKSwgZnVuY3Rpb25Ob2RlLT5pZGVudCgpLCAmbV9jYWxsZWVSZWdpc3Rl
cik7Ci0KLSAgICByZXR1cm4gJm1fY2FsbGVlUmVnaXN0ZXI7Ci19Ci0KLXZvaWQgQnl0ZWNvZGVH
ZW5lcmF0b3I6OmFkZENhbGxlZShGdW5jdGlvbk5vZGUqIGZ1bmN0aW9uTm9kZSwgUmVnaXN0ZXJJ
RCogY2FsbGVlUmVnaXN0ZXIpCi17Ci0gICAgaWYgKCFjYWxsZWVSZWdpc3RlcikKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgc3ltYm9sVGFibGUoKS5hZGQoZnVuY3Rpb25Ob2RlLT5pZGVudCgpLmlt
cGwoKSwgU3ltYm9sVGFibGVFbnRyeShjYWxsZWVSZWdpc3Rlci0+aW5kZXgoKSwgUmVhZE9ubHkp
KTsKLX0KLQotdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6YWRkUGFyYW1ldGVyKGNvbnN0IElkZW50
aWZpZXImIGlkZW50LCBpbnQgcGFyYW1ldGVySW5kZXgpCi17Ci0gICAgLy8gUGFyYW1ldGVycyBv
dmVyd3JpdGUgdmFyIGRlY2xhcmF0aW9ucywgYnV0IG5vdCBmdW5jdGlvbiBkZWNsYXJhdGlvbnMu
Ci0gICAgU3RyaW5nSW1wbCogcmVwID0gaWRlbnQuaW1wbCgpOwotICAgIGlmICghbV9mdW5jdGlv
bnMuY29udGFpbnMocmVwKSkgewotICAgICAgICBzeW1ib2xUYWJsZSgpLnNldChyZXAsIHBhcmFt
ZXRlckluZGV4KTsKLSAgICAgICAgUmVnaXN0ZXJJRCYgcGFyYW1ldGVyID0gcmVnaXN0ZXJGb3Io
cGFyYW1ldGVySW5kZXgpOwotICAgICAgICBwYXJhbWV0ZXIuc2V0SW5kZXgocGFyYW1ldGVySW5k
ZXgpOwotICAgIH0KLQotICAgIC8vIFRvIG1haW50YWluIHRoZSBjYWxsaW5nIGNvbnZlbnRpb24s
IHdlIGhhdmUgdG8gYWxsb2NhdGUgdW5pcXVlIHNwYWNlIGZvcgotICAgIC8vIGVhY2ggcGFyYW1l
dGVyLCBldmVuIGlmIHRoZSBwYXJhbWV0ZXIgZG9lc24ndCBtYWtlIGl0IGludG8gdGhlIHN5bWJv
bCB0YWJsZS4KKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnID0gdmlydHVhbFJlZ2lzdGVyRm9yQXJn
dW1lbnQobV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSk7CisgICAgUmVnaXN0ZXJJRCYgcGFy
YW1ldGVyID0gcmVnaXN0ZXJGb3IocmVnKTsKKyAgICBwYXJhbWV0ZXIuc2V0SW5kZXgocmVnKTsK
ICAgICBtX2NvZGVCbG9jay0+YWRkUGFyYW1ldGVyKCk7CiB9CiAKLWJvb2wgQnl0ZWNvZGVHZW5l
cmF0b3I6OndpbGxSZXNvbHZlVG9Bcmd1bWVudHNSZWdpc3Rlcihjb25zdCBJZGVudGlmaWVyJiBp
ZGVudCkKLXsKLSAgICBpZiAoaWRlbnQgIT0gcHJvcGVydHlOYW1lcygpLmFyZ3VtZW50cykKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIGlmICghc2hvdWxkT3B0aW1pemVMb2NhbHMo
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIFN5bWJvbFRhYmxlRW50cnkgZW50
cnkgPSBzeW1ib2xUYWJsZSgpLmdldChpZGVudC5pbXBsKCkpOwotICAgIGlmIChlbnRyeS5pc051
bGwoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKG1fbG9jYWxBcmd1bWVudHNS
ZWdpc3RlciAmJiBpc0NhcHR1cmVkKG1fbG9jYWxBcmd1bWVudHNSZWdpc3Rlci0+aW5kZXgoKSkg
JiYgbV9sZXhpY2FsRW52aXJvbm1lbnRSZWdpc3RlcikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgaWYgKG1fY29kZUJsb2NrLT51c2VzQXJndW1lbnRzKCkgJiYgbV9jb2RlVHlwZSA9PSBG
dW5jdGlvbkNvZGUgJiYgbV9sb2NhbEFyZ3VtZW50c1JlZ2lzdGVyKQotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLVJlZ2lzdGVySUQqIEJ5dGVjb2Rl
R2VuZXJhdG9yOjp1bmNoZWNrZWRMb2NhbEFyZ3VtZW50c1JlZ2lzdGVyKCkKLXsKLSAgICBBU1NF
UlQod2lsbFJlc29sdmVUb0FyZ3VtZW50c1JlZ2lzdGVyKHByb3BlcnR5TmFtZXMoKS5hcmd1bWVu
dHMpKTsKLSAgICBBU1NFUlQobV9sb2NhbEFyZ3VtZW50c1JlZ2lzdGVyKTsKLSAgICByZXR1cm4g
bV9sb2NhbEFyZ3VtZW50c1JlZ2lzdGVyOwotfQotCi1SZWdpc3RlcklEKiBCeXRlY29kZUdlbmVy
YXRvcjo6Y3JlYXRlTGF6eVJlZ2lzdGVySWZOZWNlc3NhcnkoUmVnaXN0ZXJJRCogcmVnKQorU3Ry
aW5nSW1wbCogQnl0ZWNvZGVHZW5lcmF0b3I6OnZpc2libGVOYW1lRm9yUGFyYW1ldGVyKERlY29u
c3RydWN0aW9uUGF0dGVybk5vZGUqIHBhdHRlcm4pCiB7Ci0gICAgaWYgKCFyZWctPnZpcnR1YWxS
ZWdpc3RlcigpLmlzTG9jYWwoKSkKLSAgICAgICAgcmV0dXJuIHJlZzsKLQotICAgIGludCBsb2Nh
bFZhcmlhYmxlTnVtYmVyID0gcmVnLT52aXJ0dWFsUmVnaXN0ZXIoKS50b0xvY2FsKCk7Ci0KLSAg
ICBpZiAobV9sYXN0TGF6eUZ1bmN0aW9uIDw9IGxvY2FsVmFyaWFibGVOdW1iZXIgfHwgbG9jYWxW
YXJpYWJsZU51bWJlciA8IG1fZmlyc3RMYXp5RnVuY3Rpb24pCi0gICAgICAgIHJldHVybiByZWc7
Ci0gICAgZW1pdExhenlOZXdGdW5jdGlvbihyZWcsIG1fbGF6eUZ1bmN0aW9ucy5nZXQobG9jYWxW
YXJpYWJsZU51bWJlcikpOwotICAgIHJldHVybiByZWc7CisgICAgaWYgKHBhdHRlcm4tPmlzQmlu
ZGluZ05vZGUoKSkgeworICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IHN0YXRpY19j
YXN0PGNvbnN0IEJpbmRpbmdOb2RlKj4ocGF0dGVybiktPmJvdW5kUHJvcGVydHkoKTsKKyAgICAg
ICAgaWYgKCFtX2Z1bmN0aW9ucy5jb250YWlucyhpZGVudC5pbXBsKCkpKQorICAgICAgICAgICAg
cmV0dXJuIGlkZW50LmltcGwoKTsKKyAgICB9CisgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKIFJl
Z2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjpuZXdSZWdpc3RlcigpCkBAIC05NTQsNyArOTEw
LDcgQEAgYm9vbCBCeXRlY29kZUdlbmVyYXRvcjo6aGFzQ29uc3RhbnQoY29ucwogICAgIFN0cmlu
Z0ltcGwqIHJlcCA9IGlkZW50LmltcGwoKTsKICAgICByZXR1cm4gbV9pZGVudGlmaWVyTWFwLmNv
bnRhaW5zKHJlcCk7CiB9Ci0gICAgCisKIHVuc2lnbmVkIEJ5dGVjb2RlR2VuZXJhdG9yOjphZGRD
b25zdGFudChjb25zdCBJZGVudGlmaWVyJiBpZGVudCkKIHsKICAgICBTdHJpbmdJbXBsKiByZXAg
PSBpZGVudC5pbXBsKCk7CkBAIC0xMTkyLDQ2ICsxMTQ4LDg2IEBAIGJvb2wgQnl0ZWNvZGVHZW5l
cmF0b3I6OmlzQ2FwdHVyZWQoaW50IG8KICAgICByZXR1cm4gbV9zeW1ib2xUYWJsZSAmJiBtX3N5
bWJvbFRhYmxlLT5pc0NhcHR1cmVkKG9wZXJhbmQpOwogfQogCi1Mb2NhbCBCeXRlY29kZUdlbmVy
YXRvcjo6bG9jYWwoY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHkpCitWYXJpYWJsZSBCeXRlY29k
ZUdlbmVyYXRvcjo6dmFyaWFibGUoY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHkpCiB7Ci0gICAg
aWYgKHByb3BlcnR5ID09IHByb3BlcnR5TmFtZXMoKS50aGlzSWRlbnRpZmllcikKLSAgICAgICAg
cmV0dXJuIExvY2FsKHRoaXNSZWdpc3RlcigpLCBSZWFkT25seSwgTG9jYWw6OlNwZWNpYWxMb2Nh
bCk7Ci0gICAgYm9vbCBpc0FyZ3VtZW50cyA9IHByb3BlcnR5ID09IHByb3BlcnR5TmFtZXMoKS5h
cmd1bWVudHM7Ci0gICAgaWYgKGlzQXJndW1lbnRzKQotICAgICAgICBjcmVhdGVBcmd1bWVudHNJ
Zk5lY2Vzc2FyeSgpOwotCisgICAgaWYgKHByb3BlcnR5ID09IHByb3BlcnR5TmFtZXMoKS50aGlz
SWRlbnRpZmllcikgeworICAgICAgICByZXR1cm4gVmFyaWFibGUoCisgICAgICAgICAgICBwcm9w
ZXJ0eSwgVmFyT2Zmc2V0KHRoaXNSZWdpc3RlcigpLT52aXJ0dWFsUmVnaXN0ZXIoKSksIHRoaXNS
ZWdpc3RlcigpLAorICAgICAgICAgICAgUmVhZE9ubHksIExvY2FsOjpTcGVjaWFsTG9jYWwpOwor
ICAgIH0KKyAgICAKICAgICBpZiAoIXNob3VsZE9wdGltaXplTG9jYWxzKCkpCi0gICAgICAgIHJl
dHVybiBMb2NhbCgpOwotCisgICAgICAgIHJldHVybiBWYXJpYWJsZShwcm9wZXJ0eSk7CisgICAg
CiAgICAgU3ltYm9sVGFibGVFbnRyeSBlbnRyeSA9IHN5bWJvbFRhYmxlKCkuZ2V0KHByb3BlcnR5
LmltcGwoKSk7CiAgICAgaWYgKGVudHJ5LmlzTnVsbCgpKQotICAgICAgICByZXR1cm4gTG9jYWwo
KTsKLQotCi0gICAgUmVnaXN0ZXJJRCogbG9jYWwgPSBjcmVhdGVMYXp5UmVnaXN0ZXJJZk5lY2Vz
c2FyeSgmcmVnaXN0ZXJGb3IoZW50cnkuZ2V0SW5kZXgoKSkpOwotCi0gICAgaWYgKGlzQ2FwdHVy
ZWQobG9jYWwtPmluZGV4KCkpICYmIG1fbGV4aWNhbEVudmlyb25tZW50UmVnaXN0ZXIpCi0gICAg
ICAgIHJldHVybiBMb2NhbCgpOwotCi0gICAgcmV0dXJuIExvY2FsKGxvY2FsLCBlbnRyeS5nZXRB
dHRyaWJ1dGVzKCksIGlzQXJndW1lbnRzID8gTG9jYWw6OlNwZWNpYWxMb2NhbCA6IExvY2FsOjpO
b3JtYWxMb2NhbCk7CisgICAgICAgIHJldHVybiBWYXJpYWJsZShwcm9wZXJ0eSk7CisgICAgCisg
ICAgVmFyT2Zmc2V0IG9mZnNldCA9IGVudHJ5LnZhck9mZnNldCgpOworICAgIAorICAgIGlmIChv
ZmZzZXQuaXNTY29wZSgpICYmIG1fbG9jYWxTY29wZURlcHRoKSB7CisgICAgICAgIC8vIEZJWE1F
OiBXZSBzaG91bGQgYmUgYWJsZSB0byBzdGF0aWNhbGx5IHJlc29sdmUgdGhyb3VnaCBvdXIgbG9j
YWwgc2NvcGVzLgorICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTQxODg1CisgICAgICAgIHJldHVybiBWYXJpYWJsZShwcm9wZXJ0eSk7CisgICAgfQor
ICAgIAorICAgIFJlZ2lzdGVySUQqIGxvY2FsOworICAgIGlmIChvZmZzZXQuaXNTdGFjaygpKQor
ICAgICAgICBsb2NhbCA9ICZyZWdpc3RlckZvcihvZmZzZXQuc3RhY2tPZmZzZXQoKS5vZmZzZXQo
KSk7CisgICAgZWxzZQorICAgICAgICBsb2NhbCA9IG51bGxwdHI7CisgICAgCisgICAgcmV0dXJu
IFZhcmlhYmxlKHByb3BlcnR5LCB2YXJPZmZzZXQsIGxvY2FsLCBlbnRyeS5nZXRBdHRyaWJ1dGVz
KCksIExvY2FsOjpOb3JtYWxMb2NhbCk7CiB9CiAKLUxvY2FsIEJ5dGVjb2RlR2VuZXJhdG9yOjpj
b25zdExvY2FsKGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5KQorVmFyaWFibGUgQnl0ZWNvZGVH
ZW5lcmF0b3I6Omhhc1ZhcmlhYmxlRGlyZWN0KGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5KQog
ewotICAgIGlmIChtX2NvZGVUeXBlICE9IEZ1bmN0aW9uQ29kZSkKLSAgICAgICAgcmV0dXJuIExv
Y2FsKCk7CisgICAgQVNTRVJUKHByb3BlcnR5ICE9IHByb3BlcnR5TmFtZXMoKS50aGlzSWRlbnRp
Zmllcik7CisgICAgCisgICAgcmV0dXJuICFzeW1ib2xUYWJsZSgpLmdldChwcm9wZXJ0eS5pbXBs
KCkpLmlzTnVsbCgpOworfQogCit2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpjcmVhdGVWYXJpYWJs
ZSgKKyAgICBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eSwgVmFyS2luZCB2YXJLaW5kLCBDb25z
dGFudE1vZGUgY29uc3RhbnRNb2RlKQoreworICAgIEFTU0VSVChwcm9wZXJ0eSAhPSBwcm9wZXJ0
eU5hbWVzKCkudGhpc0lkZW50aWZpZXIpOworICAgIAorICAgIENvbmN1cnJlbnRKSVRMb2NrZXIg
bG9ja2VyKHN5bWJvbFRhYmxlKCkubV9sb2NrKTsKICAgICBTeW1ib2xUYWJsZUVudHJ5IGVudHJ5
ID0gc3ltYm9sVGFibGUoKS5nZXQocHJvcGVydHkuaW1wbCgpKTsKLSAgICBpZiAoZW50cnkuaXNO
dWxsKCkpCi0gICAgICAgIHJldHVybiBMb2NhbCgpOwotCi0gICAgUmVnaXN0ZXJJRCogbG9jYWwg
PSBjcmVhdGVMYXp5UmVnaXN0ZXJJZk5lY2Vzc2FyeSgmcmVnaXN0ZXJGb3IoZW50cnkuZ2V0SW5k
ZXgoKSkpOwotCi0gICAgYm9vbCBpc0FyZ3VtZW50cyA9IHByb3BlcnR5ID09IHByb3BlcnR5TmFt
ZXMoKS5hcmd1bWVudHM7Ci0gICAgaWYgKGlzQ2FwdHVyZWQobG9jYWwtPmluZGV4KCkpICYmIG1f
bGV4aWNhbEVudmlyb25tZW50UmVnaXN0ZXIpCi0gICAgICAgIHJldHVybiBMb2NhbCgpOworICAg
IAorICAgIGlmICghZW50cnkuaXNOdWxsKCkpIHsKKyAgICAgICAgLy8gRG8gc29tZSBjaGVja3Mg
dG8gZW5zdXJlIHRoYXQgdGhlIHZhcmlhYmxlIHdlJ3JlIGJlaW5nIGFza2VkIHRvIGNyZWF0ZSBp
cyBzdWZmaWNpZW50bHkKKyAgICAgICAgLy8gY29tcGF0aWJsZSB3aXRoIHRoZSBvbmUgd2UgaGF2
ZSBhbHJlYWR5IGNyZWF0ZWQuCiAKLSAgICByZXR1cm4gTG9jYWwobG9jYWwsIGVudHJ5LmdldEF0
dHJpYnV0ZXMoKSwgaXNBcmd1bWVudHMgPyBMb2NhbDo6U3BlY2lhbExvY2FsIDogTG9jYWw6Ok5v
cm1hbExvY2FsKTsKKyAgICAgICAgVmFyT2Zmc2V0IG9mZnNldCA9IGVudHJ5LnZhck9mZnNldCgp
OworICAgICAgICAKKyAgICAgICAgLy8gV2UgY2FuJ3QgY2hhbmdlIG91ciBtaW5kcyBhYm91dCB3
aGV0aGVyIGl0J3MgY2FwdHVyZWQuCisgICAgICAgIFJFTEVBU0VfQVNTRVJUKG9mZnNldC5raW5k
KCkgPT0gdmFyS2luZCk7CisgICAgICAgIAorICAgICAgICAvLyBJdCdzIGZpbmUgdG8gZXhwZWN0
IGEgdmFyaWFibGUgdG8gYmUgY29uc3RhbnQgaWYgaXQgcHJldmlvdXNseSB3YXNuJ3QsIGJ1dCBp
dCdzIG5vdAorICAgICAgICAvLyBPSyBmb3IgYSBwcmV2aW91c2x5IGNvbnN0YW50IHZhcmlhYmxl
IHRvIGxhdGVyIGJlIGV4cGVjdGVkIHRvIGJlIG5vbi1jb25zdGFudC4gVGhpcyBhbGwKKyAgICAg
ICAgLy8gd29ya3Mgb3V0IGJlY2F1c2UgY29uc3RhbnRzIG9ubHkgY29tZSBpbnRvIHBsYXkgd2l0
aCBsb2NhbCB2YXJpYWJsZSBkZWNsYXJhdGlvbnMsIGFuZAorICAgICAgICAvLyB0aG9zZSBhcmUg
YWx3YXlzIGFkZGVkIGxhc3QuCisgICAgICAgIGlmIChjb25zdGFudE1vZGUgPT0gSXNWYXJpYWJs
ZSkKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFlbnRyeS5pc1JlYWRPbmx5KCkpOworICAg
ICAgICAKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBWYXJPZmZzZXQgdmFyT2Zm
c2V0OworICAgIGlmICh2YXJLaW5kID09IFNjb3BlVmFyS2luZCkKKyAgICAgICAgdmFyT2Zmc2V0
ID0gVmFyT2Zmc2V0KHN5bWJvbFRhYmxlKCkudGFrZU5leHRTY29wZU9mZnNldCgpKTsKKyAgICBl
bHNlIHsKKyAgICAgICAgQVNTRVJUKHZhcktpbmQgPT0gU3RhY2tWYXJLaW5kKTsKKyAgICAgICAg
dmFyT2Zmc2V0ID0gVmFyT2Zmc2V0KHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKG1fY2FsbGVlUmVn
aXN0ZXJzLnNpemUoKSkpOworICAgIH0KKyAgICBTeW1ib2xUYWJsZUVudHJ5IG5ld0VudHJ5KHZh
ck9mZnNldCwgY29uc3RhbnRNb2RlID09IElzQ29uc3RhbnQgPyBSZWFkT25seSA6IDApOworICAg
IHN5bWJvbFRhYmxlKCkuYWRkKGxvY2tlciwgaWRlbnQuaW1wbCgpLCBuZXdFbnRyeSk7CisgICAg
CisgICAgaWYgKHZhcktpbmQgPT0gU3RhY2tWYXJLaW5kKSB7CisgICAgICAgIFJlZ2lzdGVySUQq
IGxvY2FsID0gYWRkVmFyKCk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGxvY2FsLT5pbmRleCgp
ID09IHZhck9mZnNldC5zdGFja09mZnNldCgpLm9mZnNldCgpKTsKKyAgICB9CiB9CiAKIHZvaWQg
Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRDaGVja0hhc0luc3RhbmNlKFJlZ2lzdGVySUQqIGRzdCwg
UmVnaXN0ZXJJRCogdmFsdWUsIFJlZ2lzdGVySUQqIGJhc2UsIExhYmVsKiB0YXJnZXQpCkBAIC0x
MjU1LDg4ICsxMjUxLDEzOSBAQCBSZXNvbHZlVHlwZSBCeXRlY29kZUdlbmVyYXRvcjo6cmVzb2x2
ZVR5CiAgICAgcmV0dXJuIEdsb2JhbFByb3BlcnR5OwogfQogCi1SZWdpc3RlcklEKiBCeXRlY29k
ZUdlbmVyYXRvcjo6ZW1pdFJlc29sdmVTY29wZShSZWdpc3RlcklEKiBkc3QsIGNvbnN0IElkZW50
aWZpZXImIGlkZW50aWZpZXIsIFJlc29sdmVTY29wZUluZm8mIGluZm8pCitSZWdpc3RlcklEKiBC
eXRlY29kZUdlbmVyYXRvcjo6ZW1pdFJlc29sdmVTY29wZShSZWdpc3RlcklEKiBkc3QsIGNvbnN0
IFZhcmlhYmxlJiB2YXJpYWJsZSkKIHsKLSAgICBpZiAobV9zeW1ib2xUYWJsZSAmJiBtX2NvZGVU
eXBlID09IEZ1bmN0aW9uQ29kZSAmJiAhbV9sb2NhbFNjb3BlRGVwdGgpIHsKLSAgICAgICAgU3lt
Ym9sVGFibGVFbnRyeSBlbnRyeSA9IG1fc3ltYm9sVGFibGUtPmdldChpZGVudGlmaWVyLmltcGwo
KSk7Ci0gICAgICAgIGlmICghZW50cnkuaXNOdWxsKCkpIHsKLSAgICAgICAgICAgIGluZm8gPSBS
ZXNvbHZlU2NvcGVJbmZvKGVudHJ5LmdldEluZGV4KCkpOwotICAgICAgICAgICAgcmV0dXJuIHNj
b3BlUmVnaXN0ZXIoKTsKLSAgICAgICAgfQorICAgIHN3aXRjaCAodmFyaWFibGUudmFyT2Zmc2V0
KCkua2luZCgpKSB7CisgICAgY2FzZSBTdGFja09mZnNldDoKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgICAgIAorICAgIGNhc2UgQ2FwdHVyZWRBcmd1bWVudEtpbmQ6CisgICAgICAgIHJl
dHVybiBhcmd1bWVudHNSZWdpc3RlcigpOworICAgICAgICAKKyAgICBjYXNlIFNjb3BlT2Zmc2V0
OgorICAgICAgICByZXR1cm4gc2NvcGVSZWdpc3RlcigpOworICAgICAgICAKKyAgICBjYXNlIElu
dmFsaWRWYXJLaW5kOgorICAgICAgICAvLyBJbmRpY2F0ZXMgbm9uLWxvY2FsIHJlc29sdXRpb24u
CisgICAgICAgIAorICAgICAgICBBU1NFUlQoIW1fc3ltYm9sVGFibGUgfHwgIW1fc3ltYm9sVGFi
bGUtPmNvbnRhaW5zKGlkZW50aWZpZXIuaW1wbCgpKSB8fCByZXNvbHZlVHlwZSgpID09IER5bmFt
aWMpOworICAgICAgICAKKyAgICAgICAgLy8gcmVzb2x2ZV9zY29wZSBkc3QsIGlkLCBSZXNvbHZl
VHlwZSwgZGVwdGgKKyAgICAgICAgZW1pdE9wY29kZShvcF9yZXNvbHZlX3Njb3BlKTsKKyAgICAg
ICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGtpbGwoZHN0KSk7CisgICAgICAgIGluc3RydWN0aW9u
cygpLmFwcGVuZChzY29wZVJlZ2lzdGVyKCktPmluZGV4KCkpOworICAgICAgICBpbnN0cnVjdGlv
bnMoKS5hcHBlbmQoYWRkQ29uc3RhbnQodmFyaWFibGUuaWRlbnQoKSkpOworICAgICAgICBpbnN0
cnVjdGlvbnMoKS5hcHBlbmQocmVzb2x2ZVR5cGUoKSk7CisgICAgICAgIGluc3RydWN0aW9ucygp
LmFwcGVuZCgwKTsKKyAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKDApOworICAgICAgICBy
ZXR1cm4gZHN0OwogICAgIH0KLQotICAgIEFTU0VSVCghbV9zeW1ib2xUYWJsZSB8fCAhbV9zeW1i
b2xUYWJsZS0+Y29udGFpbnMoaWRlbnRpZmllci5pbXBsKCkpIHx8IHJlc29sdmVUeXBlKCkgPT0g
RHluYW1pYyk7Ci0KLSAgICBtX2NvZGVCbG9jay0+YWRkUHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlv
bihpbnN0cnVjdGlvbnMoKS5zaXplKCkpOwotCi0gICAgLy8gcmVzb2x2ZV9zY29wZSBkc3QsIGlk
LCBSZXNvbHZlVHlwZSwgZGVwdGgKLSAgICBlbWl0T3Bjb2RlKG9wX3Jlc29sdmVfc2NvcGUpOwot
ICAgIGRzdCA9IHRlbXBEZXN0aW5hdGlvbihkc3QpOwotICAgIGluc3RydWN0aW9ucygpLmFwcGVu
ZChraWxsKGRzdCkpOwotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChzY29wZVJlZ2lzdGVyKCkt
PmluZGV4KCkpOwotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChhZGRDb25zdGFudChpZGVudGlm
aWVyKSk7Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHJlc29sdmVUeXBlKCkpOwotICAgIGlu
c3RydWN0aW9ucygpLmFwcGVuZCgwKTsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoMCk7Ci0g
ICAgcmV0dXJuIGRzdDsKKyAgICAKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgIHJldHVybiBudWxscHRyOwogfQogCi0KLVJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9y
OjplbWl0UmVzb2x2ZUNvbnN0YW50TG9jYWwoUmVnaXN0ZXJJRCogZHN0LCBjb25zdCBJZGVudGlm
aWVyJiBpZGVudGlmaWVyLCBSZXNvbHZlU2NvcGVJbmZvJiBpbmZvKQorUmVnaXN0ZXJJRCogQnl0
ZWNvZGVHZW5lcmF0b3I6OmVtaXRHZXRGcm9tU2NvcGUoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3Rl
cklEKiBzY29wZSwgY29uc3QgVmFyaWFibGUmIHZhcmlhYmxlLCBSZXNvbHZlTW9kZSByZXNvbHZl
TW9kZSkKIHsKLSAgICBpZiAoIW1fc3ltYm9sVGFibGUgfHwgbV9jb2RlVHlwZSAhPSBGdW5jdGlv
bkNvZGUpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgU3ltYm9sVGFibGVFbnRyeSBl
bnRyeSA9IG1fc3ltYm9sVGFibGUtPmdldChpZGVudGlmaWVyLmltcGwoKSk7Ci0gICAgaWYgKGVu
dHJ5LmlzTnVsbCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBpbmZvID0gUmVzb2x2
ZVNjb3BlSW5mbyhlbnRyeS5nZXRJbmRleCgpKTsKLSAgICByZXR1cm4gZW1pdE1vdmUoZHN0LCBt
X2xleGljYWxFbnZpcm9ubWVudFJlZ2lzdGVyKTsKLQorICAgIHN3aXRjaCAodmFyaWFibGUudmFy
T2Zmc2V0KCkua2luZCgpKSB7CisgICAgY2FzZSBTdGFja09mZnNldDoKKyAgICAgICAgcmV0dXJu
IGVtaXRNb3ZlKGtpbGwoZHN0KSwgdmFyaWFibGUubG9jYWwoKSk7CisgICAgICAgIAorICAgIGNh
c2UgQ2FwdHVyZWRBcmd1bWVudHNPZmZzZXQ6CisgICAgICAgIEFTU0VSVChzY29wZSA9PSBhcmd1
bWVudHNSZWdpc3RlcigpKTsKKyAgICAgICAgVW5saW5rZWRWYWx1ZVByb2ZpbGUgcHJvZmlsZSA9
IGVtaXRQcm9maWxlZE9wY29kZShvcF9nZXRfZnJvbV9hcmd1bWVudHMpOworICAgICAgICBpbnN0
cnVjdGlvbnMoKS5hcHBlbmQoa2lsbChkc3QpKTsKKyAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBw
ZW5kKHNjb3BlLT5pbmRleCgpKTsKKyAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHZhcmlh
YmxlLnZhck9mZnNldCgpLmNhcHR1cmVkQXJndW1lbnRzT2Zmc2V0KCkub2Zmc2V0KCkpOworICAg
ICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQocHJvZmlsZSk7CisgICAgICAgIHJldHVybiBkc3Q7
CisgICAgICAgIAorICAgIGNhc2UgU2NvcGVPZmZzZXQ6CisgICAgY2FzZSBJbnZhbGlkVmFyS2lu
ZDoKKyAgICAgICAgbV9jb2RlQmxvY2stPmFkZFByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb24oaW5z
dHJ1Y3Rpb25zKCkuc2l6ZSgpKTsKKyAgICAgICAgCisgICAgICAgIC8vIGdldF9mcm9tX3Njb3Bl
IGRzdCwgc2NvcGUsIGlkLCBSZXNvbHZlTW9kZUFuZFR5cGUsIFN0cnVjdHVyZSwgT3BlcmFuZAor
ICAgICAgICBVbmxpbmtlZFZhbHVlUHJvZmlsZSBwcm9maWxlID0gZW1pdFByb2ZpbGVkT3Bjb2Rl
KG9wX2dldF9mcm9tX3Njb3BlKTsKKyAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGtpbGwo
ZHN0KSk7CisgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChzY29wZS0+aW5kZXgoKSk7Cisg
ICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChhZGRDb25zdGFudCh2YXJpYWJsZS5pZGVudGlm
aWVyKCkpKTsKKyAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKFJlc29sdmVNb2RlQW5kVHlw
ZShyZXNvbHZlTW9kZSwgdmFyaWFibGUudmFyT2Zmc2V0KCkuaXNTY29wZSgpID8gTG9jYWxDbG9z
dXJlVmFyIDogcmVzb2x2ZVR5cGUoKSkub3BlcmFuZCgpKTsKKyAgICAgICAgaW5zdHJ1Y3Rpb25z
KCkuYXBwZW5kKDApOworICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQodmFyaWFibGUudmFy
T2Zmc2V0KCkuaXNTY29wZSgpID8gdmFyaWFibGUudmFyT2Zmc2V0KCkuc2NvcGVPZmZzZXQoKS5v
ZmZzZXQoKSA6IDApOworICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQocHJvZmlsZSk7Cisg
ICAgICAgIHJldHVybiBkc3Q7CisgICAgfQorICAgIAorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiB9CiAKLVJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0R2V0RnJv
bVNjb3BlKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogc2NvcGUsIGNvbnN0IElkZW50aWZp
ZXImIGlkZW50aWZpZXIsIFJlc29sdmVNb2RlIHJlc29sdmVNb2RlLCBjb25zdCBSZXNvbHZlU2Nv
cGVJbmZvJiBpbmZvKQorUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRQdXRUb1Nj
b3BlKFJlZ2lzdGVySUQqIHNjb3BlLCBjb25zdCBWYXJpYWJsZSYgdmFyaWFibGUsIFJlZ2lzdGVy
SUQqIHZhbHVlLCBSZXNvbHZlTW9kZSByZXNvbHZlTW9kZSkKIHsKLSAgICBtX2NvZGVCbG9jay0+
YWRkUHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbihpbnN0cnVjdGlvbnMoKS5zaXplKCkpOwotCi0g
ICAgLy8gZ2V0X2Zyb21fc2NvcGUgZHN0LCBzY29wZSwgaWQsIFJlc29sdmVNb2RlQW5kVHlwZSwg
U3RydWN0dXJlLCBPcGVyYW5kCi0gICAgVW5saW5rZWRWYWx1ZVByb2ZpbGUgcHJvZmlsZSA9IGVt
aXRQcm9maWxlZE9wY29kZShvcF9nZXRfZnJvbV9zY29wZSk7Ci0gICAgaW5zdHJ1Y3Rpb25zKCku
YXBwZW5kKGtpbGwoZHN0KSk7Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHNjb3BlLT5pbmRl
eCgpKTsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYWRkQ29uc3RhbnQoaWRlbnRpZmllcikp
OwotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChSZXNvbHZlTW9kZUFuZFR5cGUocmVzb2x2ZU1v
ZGUsIGluZm8uaXNMb2NhbCgpID8gTG9jYWxDbG9zdXJlVmFyIDogcmVzb2x2ZVR5cGUoKSkub3Bl
cmFuZCgpKTsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoMCk7Ci0gICAgaW5zdHJ1Y3Rpb25z
KCkuYXBwZW5kKGluZm8ubG9jYWxJbmRleCgpKTsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQo
cHJvZmlsZSk7Ci0gICAgcmV0dXJuIGRzdDsKKyAgICBzd2l0Y2ggKHZhcmlhYmxlLnZhck9mZnNl
dCgpLmtpbmQoKSkgeworICAgIGNhc2UgU3RhY2tPZmZzZXQ6CisgICAgICAgIGVtaXRNb3ZlKHZh
cmlhYmxlLmxvY2FsKCksIHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHZhbHVlOworICAgICAgICAK
KyAgICBjYXNlIENhcHR1cmVkQXJndW1lbnRzT2Zmc2V0OgorICAgICAgICBBU1NFUlQoc2NvcGUg
PT0gYXJndW1lbnRzUmVnaXN0ZXIoKSk7CisgICAgICAgIGVtaXRPcGNvZGUob3BfcHV0X3RvX2Fy
Z3VtZW50cyk7CisgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChzY29wZSk7CisgICAgICAg
IGluc3RydWN0aW9ucygpLmFwcGVuZCh2YXJpYWJsZS52YXJPZmZzZXQoKS5jYXB0dXJlZEFyZ3Vt
ZW50c09mZnNldCgpLm9mZnNldCgpKTsKKyAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHZh
bHVlLT5pbmRleCgpKTsKKyAgICAgICAgcmV0dXJuIHZhbHVlOworICAgICAgICAKKyAgICBjYXNl
IFNjb3BlT2Zmc2V0OgorICAgIGNhc2UgSW52YWxpZFZhcktpbmQ6IHsKKyAgICAgICAgbV9jb2Rl
QmxvY2stPmFkZFByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb24oaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgp
KTsKKyAgICAgICAgCisgICAgICAgIC8vIHB1dF90b19zY29wZSBzY29wZSwgaWQsIHZhbHVlLCBS
ZXNvbHZlTW9kZUFuZFR5cGUsIFN0cnVjdHVyZSwgT3BlcmFuZAorICAgICAgICBlbWl0T3Bjb2Rl
KG9wX3B1dF90b19zY29wZSk7CisgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChzY29wZS0+
aW5kZXgoKSk7CisgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChhZGRDb25zdGFudCh2YXJp
YWJsZS5pZGVudCgpKSk7CisgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCh2YWx1ZS0+aW5k
ZXgoKSk7CisgICAgICAgIFNjb3BlT2Zmc2V0IG9mZnNldDsKKyAgICAgICAgaWYgKHZhcmlhYmxl
LnZhck9mZnNldCgpLmlzU2NvcGUoKSkgeworICAgICAgICAgICAgb2Zmc2V0ID0gdmFyaWFibGUu
dmFyT2Zmc2V0KCkuc2NvcGVPZmZzZXQoKTsKKyAgICAgICAgICAgIGluc3RydWN0aW9ucygpLmFw
cGVuZChSZXNvbHZlTW9kZUFuZFR5cGUocmVzb2x2ZU1vZGUsIExvY2FsQ2xvc3VyZVZhcikub3Bl
cmFuZCgpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VSVChyZXNvbHZlVHlw
ZSgpICE9IExvY2FsQ2xvc3VyZVZhcik7CisgICAgICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBl
bmQoUmVzb2x2ZU1vZGVBbmRUeXBlKHJlc29sdmVNb2RlLCByZXNvbHZlVHlwZSgpKS5vcGVyYW5k
KCkpOworICAgICAgICB9CisgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCgwKTsKKyAgICAg
ICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKG9mZnNldC5pc1ZhbGlkKCkgPyBvZmZzZXQub2Zmc2V0
KCkgOiAwKTsKKyAgICAgICAgcmV0dXJuIHZhbHVlOworICAgIH0gfQorICAgIAorICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKLVJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJh
dG9yOjplbWl0UHV0VG9TY29wZShSZWdpc3RlcklEKiBzY29wZSwgY29uc3QgSWRlbnRpZmllciYg
aWRlbnRpZmllciwgUmVnaXN0ZXJJRCogdmFsdWUsIFJlc29sdmVNb2RlIHJlc29sdmVNb2RlLCBj
b25zdCBSZXNvbHZlU2NvcGVJbmZvJiBpbmZvKQorUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0
b3I6OmluaXRpYWxpemVWYXJpYWJsZShjb25zdCBWYXJpYWJsZSYgdmFyaWFibGUsIFJlZ2lzdGVy
SUQqIHZhbHVlKQogewotICAgIG1fY29kZUJsb2NrLT5hZGRQcm9wZXJ0eUFjY2Vzc0luc3RydWN0
aW9uKGluc3RydWN0aW9ucygpLnNpemUoKSk7Ci0KLSAgICAvLyBwdXRfdG9fc2NvcGUgc2NvcGUs
IGlkLCB2YWx1ZSwgUmVzb2x2ZU1vZGVBbmRUeXBlLCBTdHJ1Y3R1cmUsIE9wZXJhbmQKLSAgICBl
bWl0T3Bjb2RlKG9wX3B1dF90b19zY29wZSk7Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHNj
b3BlLT5pbmRleCgpKTsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYWRkQ29uc3RhbnQoaWRl
bnRpZmllcikpOwotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCh2YWx1ZS0+aW5kZXgoKSk7Ci0g
ICAgaWYgKGluZm8uaXNMb2NhbCgpKSB7Ci0gICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChS
ZXNvbHZlTW9kZUFuZFR5cGUocmVzb2x2ZU1vZGUsIExvY2FsQ2xvc3VyZVZhcikub3BlcmFuZCgp
KTsKLSAgICAgICAgaW50IG9wZXJhbmQgPSByZWdpc3RlckZvcihpbmZvLmxvY2FsSW5kZXgoKSku
aW5kZXgoKTsKLSAgICAgICAgYm9vbCBpc1dhdGNoYWJsZVZhcmlhYmxlID0gaGFzV2F0Y2hhYmxl
VmFyaWFibGUob3BlcmFuZCk7Ci0gICAgICAgIEFTU0VSVCghaXNXYXRjaGFibGVWYXJpYWJsZSB8
fCB3YXRjaGFibGVWYXJpYWJsZUlkZW50aWZpZXIob3BlcmFuZCkgPT0gaWRlbnRpZmllcik7Ci0g
ICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChpc1dhdGNoYWJsZVZhcmlhYmxlKTsKLSAgICB9
IGVsc2UgewotICAgICAgICBBU1NFUlQocmVzb2x2ZVR5cGUoKSAhPSBMb2NhbENsb3N1cmVWYXIp
OwotICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoUmVzb2x2ZU1vZGVBbmRUeXBlKHJlc29s
dmVNb2RlLCByZXNvbHZlVHlwZSgpKS5vcGVyYW5kKCkpOwotICAgICAgICBpbnN0cnVjdGlvbnMo
KS5hcHBlbmQoZmFsc2UpOworICAgIFJlZ2lzdGVySUQqIHNjb3BlOworICAgIHN3aXRjaCAodmFy
aWFibGUudmFyT2Zmc2V0KCkua2luZCgpKSB7CisgICAgY2FzZSBTdGFja09mZnNldDoKKyAgICAg
ICAgc2NvcGUgPSBudWxscHRyOworICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgY2FzZSBD
YXB0dXJlZEFyZ3VtZW50S2luZDoKKyAgICAgICAgc2NvcGUgPSBhcmd1bWVudHNSZWdpc3Rlcigp
OworICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgY2FzZSBTY29wZU9mZnNldDoKKyAgICAg
ICAgc2NvcGUgPSBzY29wZVJlZ2lzdGVyKCk7CisgICAgICAgIGJyZWFrOworICAgICAgICAKKyAg
ICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICBzY29wZSA9IG51bGxwdHI7CisgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBpbnN0cnVjdGlv
bnMoKS5hcHBlbmQoaW5mby5sb2NhbEluZGV4KCkpOwotICAgIHJldHVybiB2YWx1ZTsKKworICAg
IHJldHVybiBlbWl0UHV0VG9TY29wZShzY29wZSwgdmFyaWFibGUsIHZhbHVlLCBUaHJvd0lmTm90
Rm91bmQpOwogfQogCiBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEluc3RhbmNl
T2YoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiB2YWx1ZSwgUmVnaXN0ZXJJRCogYmFzZVBy
b3RvdHlwZSkKLXsgCit7CiAgICAgZW1pdE9wY29kZShvcF9pbnN0YW5jZW9mKTsKICAgICBpbnN0
cnVjdGlvbnMoKS5hcHBlbmQoZHN0LT5pbmRleCgpKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBl
bmQodmFsdWUtPmluZGV4KCkpOwpAQCAtMTYzOCwyNCArMTY4NSwxNSBAQCBSZWdpc3RlcklEKiBC
eXRlY29kZUdlbmVyYXRvcjo6ZW1pdE5ld0FyCiAKIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJh
dG9yOjplbWl0TmV3RnVuY3Rpb24oUmVnaXN0ZXJJRCogZHN0LCBGdW5jdGlvbkJvZHlOb2RlKiBm
dW5jdGlvbikKIHsKLSAgICByZXR1cm4gZW1pdE5ld0Z1bmN0aW9uSW50ZXJuYWwoZHN0LCBtX2Nv
ZGVCbG9jay0+YWRkRnVuY3Rpb25EZWNsKG1ha2VGdW5jdGlvbihmdW5jdGlvbikpLCBmYWxzZSk7
Ci19Ci0KLVJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TGF6eU5ld0Z1bmN0aW9u
KFJlZ2lzdGVySUQqIGRzdCwgRnVuY3Rpb25Cb2R5Tm9kZSogZnVuY3Rpb24pCi17Ci0gICAgRnVu
Y3Rpb25PZmZzZXRNYXA6OkFkZFJlc3VsdCBwdHIgPSBtX2Z1bmN0aW9uT2Zmc2V0cy5hZGQoZnVu
Y3Rpb24sIDApOwotICAgIGlmIChwdHIuaXNOZXdFbnRyeSkKLSAgICAgICAgcHRyLml0ZXJhdG9y
LT52YWx1ZSA9IG1fY29kZUJsb2NrLT5hZGRGdW5jdGlvbkRlY2wobWFrZUZ1bmN0aW9uKGZ1bmN0
aW9uKSk7Ci0gICAgcmV0dXJuIGVtaXROZXdGdW5jdGlvbkludGVybmFsKGRzdCwgcHRyLml0ZXJh
dG9yLT52YWx1ZSwgdHJ1ZSk7CisgICAgcmV0dXJuIGVtaXROZXdGdW5jdGlvbkludGVybmFsKGRz
dCwgbV9jb2RlQmxvY2stPmFkZEZ1bmN0aW9uRGVjbChtYWtlRnVuY3Rpb24oZnVuY3Rpb24pKSk7
CiB9CiAKLVJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TmV3RnVuY3Rpb25JbnRl
cm5hbChSZWdpc3RlcklEKiBkc3QsIHVuc2lnbmVkIGluZGV4LCBib29sIGRvTnVsbENoZWNrKQor
UmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXROZXdGdW5jdGlvbkludGVybmFsKFJl
Z2lzdGVySUQqIGRzdCwgdW5zaWduZWQgaW5kZXgpCiB7CiAgICAgZW1pdE9wY29kZShvcF9uZXdf
ZnVuYyk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGRzdC0+aW5kZXgoKSk7CiAgICAgaW5z
dHJ1Y3Rpb25zKCkuYXBwZW5kKHNjb3BlUmVnaXN0ZXIoKS0+aW5kZXgoKSk7CiAgICAgaW5zdHJ1
Y3Rpb25zKCkuYXBwZW5kKGluZGV4KTsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZG9OdWxs
Q2hlY2spOwogICAgIHJldHVybiBkc3Q7CiB9CiAKQEAgLTI1MDQsOSArMjU0Miw5IEBAIHZvaWQg
Qnl0ZWNvZGVHZW5lcmF0b3I6OnNldElzTnVtZXJpY0NvbXAKIAogYm9vbCBCeXRlY29kZUdlbmVy
YXRvcjo6aXNBcmd1bWVudE51bWJlcihjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgaW50IGFyZ3Vt
ZW50TnVtYmVyKQogewotICAgIFJlZ2lzdGVySUQqIHJlZ2lzdGVySUQgPSBsb2NhbChpZGVudCku
Z2V0KCk7Ci0gICAgaWYgKCFyZWdpc3RlcklEIHx8IHJlZ2lzdGVySUQtPmluZGV4KCkgPj0gMCkK
LSAgICAgICAgIHJldHVybiAwOworICAgIFJlZ2lzdGVySUQqIHJlZ2lzdGVySUQgPSB2YXJpYWJs
ZShpZGVudCkubG9jYWwoKTsKKyAgICBpZiAoIXJlZ2lzdGVySUQpCisgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgcmV0dXJuIHJlZ2lzdGVySUQtPmluZGV4KCkgPT0gQ2FsbEZyYW1lOjphcmd1
bWVudE9mZnNldChhcmd1bWVudE51bWJlcik7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgJKHJldmlz
aW9uIDE4MDg3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNv
ZGVHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMTgzLDU4ICsxODMsNTcgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIElzQ2FwdHVyZWQKICAgICB9OwogCi0gICAgY2xhc3MgTG9jYWwg
eworICAgIGNsYXNzIFZhcmlhYmxlIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIExvY2FsKCkKLSAg
ICAgICAgICAgIDogbV9sb2NhbCgwKQorICAgICAgICBlbnVtIFZhcmlhYmxlS2luZCB7IE5vcm1h
bFZhcmlhYmxlLCBTcGVjaWFsVmFyaWFibGUgfTsKKworICAgICAgICBWYXJpYWJsZSgpCisgICAg
ICAgICAgICA6IG1fb2Zmc2V0KCkKKyAgICAgICAgICAgICwgbV9sb2NhbChudWxscHRyKQogICAg
ICAgICAgICAgLCBtX2F0dHJpYnV0ZXMoMCkKLSAgICAgICAgICAgICwgbV9raW5kKE5vcm1hbExv
Y2FsKQorICAgICAgICAgICAgLCBtX2tpbmQoTm9ybWFsVmFyaWFibGUpCisgICAgICAgIHsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgVmFyaWFibGUoY29uc3QgSWRlbnRpZmllciYgaWRl
bnQpCisgICAgICAgICAgICA6IG1faWRlbnQoaWRlbnQpCisgICAgICAgICAgICAsIG1fbG9jYWwo
bnVsbHB0cikKKyAgICAgICAgICAgICwgbV9hdHRyaWJ1dGVzKDApCisgICAgICAgICAgICAsIG1f
a2luZChOb3JtYWxWYXJpYWJsZSkgLy8gVGhpcyBpcyBzb21ld2hhdCBtZWFuaW5nbGVzcyBoZXJl
IGZvciB0aGlzIGtpbmQgb2YgVmFyaWFibGUuCiAgICAgICAgIHsKICAgICAgICAgfQogCi0gICAg
ICAgIGVudW0gTG9jYWxLaW5kIHsgTm9ybWFsTG9jYWwsIFNwZWNpYWxMb2NhbCB9OwotCi0gICAg
ICAgIExvY2FsKFJlZ2lzdGVySUQqIGxvY2FsLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBMb2NhbEtp
bmQga2luZCkKLSAgICAgICAgICAgIDogbV9sb2NhbChsb2NhbCkKKyAgICAgICAgVmFyaWFibGUo
Y29uc3QgSWRlbnRpZmllciYgaWRlbnQsIFZhck9mZnNldCBvZmZzZXQsIFJlZ2lzdGVySUQqIGxv
Y2FsLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBMb2NhbEtpbmQga2luZCkKKyAgICAgICAgICAgIDog
bV9pZGVudChpZGVudCkKKyAgICAgICAgICAgICwgbV9vZmZzZXQob2Zmc2V0KQorICAgICAgICAg
ICAgLCBtX2xvY2FsKGxvY2FsKQogICAgICAgICAgICAgLCBtX2F0dHJpYnV0ZXMoYXR0cmlidXRl
cykKICAgICAgICAgICAgICwgbV9raW5kKGtpbmQpCiAgICAgICAgIHsKICAgICAgICAgfQogCi0g
ICAgICAgIG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiBtX2xvY2FsOyB9Ci0KLSAgICAg
ICAgUmVnaXN0ZXJJRCogZ2V0KCkgY29uc3QgeyByZXR1cm4gbV9sb2NhbDsgfQorICAgICAgICAv
LyBJZiBpdCdzIHVuc2V0LCB0aGVuIGl0IGlzIGEgbm9uLWxvY2FsbHktc2NvcGVkIHZhcmlhYmxl
LiBJZiBpdCBpcyBzZXQsIHRoZW4gaXQgY291bGQgYmUKKyAgICAgICAgLy8gYSBzdGFjayB2YXJp
YWJsZSwgYSBzY29wZWQgdmFyaWFibGUgaW4gdGhlIGxvY2FsIHNjb3BlLCBvciBhIHZhcmlhYmxl
IGNhcHR1cmVkIGluIHRoZQorICAgICAgICAvLyBkaXJlY3QgYXJndW1lbnRzIG9iamVjdC4KKyAg
ICAgICAgYm9vbCBpc1Jlc29sdmVkKCkgY29uc3QgeyByZXR1cm4gISFtX29mZnNldDsgfQorICAg
ICAgICAKKyAgICAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQoKSBjb25zdCB7IHJldHVybiBt
X2lkZW50OyB9CisgICAgICAgIAorICAgICAgICBWYXJPZmZzZXQgb2Zmc2V0KCkgY29uc3QgeyBy
ZXR1cm4gbV9vZmZzZXQ7IH0KKyAgICAgICAgYm9vbCBpc0xvY2FsKCkgY29uc3QgeyByZXR1cm4g
bV9vZmZzZXQuaXNTdGFjaygpOyB9CisgICAgICAgIFJlZ2lzdGVySUQqIGxvY2FsKCkgY29uc3Qg
eyByZXR1cm4gbV9sb2NhbDsgfQogCiAgICAgICAgIGJvb2wgaXNSZWFkT25seSgpIGNvbnN0IHsg
cmV0dXJuIG1fYXR0cmlidXRlcyAmIFJlYWRPbmx5OyB9Ci0gICAgICAgIGJvb2wgaXNTcGVjaWFs
KCkgY29uc3QgeyByZXR1cm4gbV9raW5kICE9IE5vcm1hbExvY2FsOyB9CisgICAgICAgIGJvb2wg
aXNTcGVjaWFsKCkgY29uc3QgeyByZXR1cm4gbV9raW5kICE9IE5vcm1hbFZhcmlhYmxlOyB9CiAK
ICAgICBwcml2YXRlOgorICAgICAgICBJZGVudGlmaWVyIG1faWRlbnQ7CisgICAgICAgIFZhck9m
ZmV0IG1fb2Zmc3Q7CiAgICAgICAgIFJlZ2lzdGVySUQqIG1fbG9jYWw7CiAgICAgICAgIHVuc2ln
bmVkIG1fYXR0cmlidXRlczsKICAgICAgICAgTG9jYWxLaW5kIG1fa2luZDsKICAgICB9OwogCi0g
ICAgc3RydWN0IFJlc29sdmVTY29wZUluZm8gewotICAgICAgICBSZXNvbHZlU2NvcGVJbmZvKCkK
LSAgICAgICAgICAgIDogbV9sb2NhbEluZGV4KDApCi0gICAgICAgICAgICAsIG1fcmVzb2x2ZVNj
b3BlS2luZChOb25Mb2NhbFNjb3BlKQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgICAgICBS
ZXNvbHZlU2NvcGVJbmZvKGludCBpbmRleCkKLSAgICAgICAgICAgIDogbV9sb2NhbEluZGV4KGlu
ZGV4KQotICAgICAgICAgICAgLCBtX3Jlc29sdmVTY29wZUtpbmQoTG9jYWxTY29wZSkKLSAgICAg
ICAgewotICAgICAgICB9Ci0KLSAgICAgICAgYm9vbCBpc0xvY2FsKCkgY29uc3QgeyByZXR1cm4g
bV9yZXNvbHZlU2NvcGVLaW5kID09IExvY2FsU2NvcGU7IH0KLSAgICAgICAgaW50IGxvY2FsSW5k
ZXgoKSBjb25zdCB7IHJldHVybiBtX2xvY2FsSW5kZXg7IH0KLQotICAgIHByaXZhdGU6Ci0gICAg
ICAgIGludCBtX2xvY2FsSW5kZXg7Ci0gICAgICAgIGVudW0geyBMb2NhbFNjb3BlLCBOb25Mb2Nh
bFNjb3BlIH0gbV9yZXNvbHZlU2NvcGVLaW5kOwotICAgIH07Ci0KICAgICBzdHJ1Y3QgVHJ5UmFu
Z2UgewogICAgICAgICBSZWZQdHI8TGFiZWw+IHN0YXJ0OwogICAgICAgICBSZWZQdHI8TGFiZWw+
IGVuZDsKQEAgLTI4NSwxMiArMjg0LDEyIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBib29s
IGlzQ2FwdHVyZWQoaW50IG9wZXJhbmQpOwogICAgICAgICBDYXB0dXJlTW9kZSBjYXB0dXJlTW9k
ZShpbnQgb3BlcmFuZCkgeyByZXR1cm4gaXNDYXB0dXJlZChvcGVyYW5kKSA/IElzQ2FwdHVyZWQg
OiBOb3RDYXB0dXJlZDsgfQogICAgICAgICAKLSAgICAgICAgTG9jYWwgbG9jYWwoY29uc3QgSWRl
bnRpZmllciYpOwotICAgICAgICBMb2NhbCBjb25zdExvY2FsKGNvbnN0IElkZW50aWZpZXImKTsK
LQorICAgICAgICBWYXJpYWJsZSB2YXJpYWJsZShjb25zdCBJZGVudGlmaWVyJik7CisgICAgICAg
IHZvaWQgY3JlYXRlVmFyaWFibGUoY29uc3QgSWRlbnRpZmllciYsIFZhcktpbmQsIENvbnN0YW50
TW9kZSk7IC8vIENyZWF0ZXMgdGhlIHZhcmlhYmxlLCBvciBhc3NlcnRzIHRoYXQgdGhlIGFscmVh
ZHktY3JlYXRlZCB2YXJpYWJsZSBpcyBzdWZmaWNpZW50bHkgY29tcGF0aWJsZS4KKyAgICAgICAg
CiAgICAgICAgIC8vIFJldHVybnMgdGhlIHJlZ2lzdGVyIHN0b3JpbmcgInRoaXMiCiAgICAgICAg
IFJlZ2lzdGVySUQqIHRoaXNSZWdpc3RlcigpIHsgcmV0dXJuICZtX3RoaXNSZWdpc3RlcjsgfQot
ICAgICAgICAKKyAgICAgICAgUmVnaXN0ZXJJRCogYXJndW1lbnRzUmVnaXN0ZXIoKSB7IHJldHVy
biBtX2FyZ3VtZW50c1JlZ2lzdGVyOyB9CiAgICAgICAgIFJlZ2lzdGVySUQqIHNjb3BlUmVnaXN0
ZXIoKSB7IHJldHVybiBtX3Njb3BlUmVnaXN0ZXI7IH0KIAogICAgICAgICAvLyBSZXR1cm5zIHRo
ZSBuZXh0IGF2YWlsYWJsZSB0ZW1wb3JhcnkgcmVnaXN0ZXIuIFJlZ2lzdGVycyByZXR1cm5lZCBi
eQpAQCAtNDU2LDggKzQ1NSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBSZWdpc3RlcklE
KiBlbWl0TmV3QXJyYXkoUmVnaXN0ZXJJRCogZHN0LCBFbGVtZW50Tm9kZSosIHVuc2lnbmVkIGxl
bmd0aCk7IC8vIHN0b3BzIGF0IGZpcnN0IGVsaXNpb24KIAogICAgICAgICBSZWdpc3RlcklEKiBl
bWl0TmV3RnVuY3Rpb24oUmVnaXN0ZXJJRCogZHN0LCBGdW5jdGlvbkJvZHlOb2RlKik7Ci0gICAg
ICAgIFJlZ2lzdGVySUQqIGVtaXRMYXp5TmV3RnVuY3Rpb24oUmVnaXN0ZXJJRCogZHN0LCBGdW5j
dGlvbkJvZHlOb2RlKiBib2R5KTsKLSAgICAgICAgUmVnaXN0ZXJJRCogZW1pdE5ld0Z1bmN0aW9u
SW50ZXJuYWwoUmVnaXN0ZXJJRCogZHN0LCB1bnNpZ25lZCBpbmRleCwgYm9vbCBzaG91bGROdWxs
Q2hlY2spOworICAgICAgICBSZWdpc3RlcklEKiBlbWl0TmV3RnVuY3Rpb25JbnRlcm5hbChSZWdp
c3RlcklEKiBkc3QsIHVuc2lnbmVkIGluZGV4KTsKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdE5l
d0Z1bmN0aW9uRXhwcmVzc2lvbihSZWdpc3RlcklEKiBkc3QsIEZ1bmNFeHByTm9kZSogZnVuYyk7
CiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXROZXdSZWdFeHAoUmVnaXN0ZXJJRCogZHN0LCBSZWdF
eHAqKTsKIApAQCAtNDc1LDcgKzQ3Myw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBSZWdp
c3RlcklEKiBlbWl0SW5pdEdsb2JhbENvbnN0KGNvbnN0IElkZW50aWZpZXImLCBSZWdpc3RlcklE
KiB2YWx1ZSk7CiAKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdEdldEJ5SWQoUmVnaXN0ZXJJRCog
ZHN0LCBSZWdpc3RlcklEKiBiYXNlLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eSk7Ci0gICAg
ICAgIFJlZ2lzdGVySUQqIGVtaXRHZXRBcmd1bWVudHNMZW5ndGgoUmVnaXN0ZXJJRCogZHN0LCBS
ZWdpc3RlcklEKiBiYXNlKTsKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdFB1dEJ5SWQoUmVnaXN0
ZXJJRCogYmFzZSwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHksIFJlZ2lzdGVySUQqIHZhbHVl
KTsKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdERpcmVjdFB1dEJ5SWQoUmVnaXN0ZXJJRCogYmFz
ZSwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHksIFJlZ2lzdGVySUQqIHZhbHVlKTsKICAgICAg
ICAgUmVnaXN0ZXJJRCogZW1pdERlbGV0ZUJ5SWQoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklE
KiBiYXNlLCBjb25zdCBJZGVudGlmaWVyJik7CkBAIC01MDIsMTQgKzQ5OSwxMSBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0VG9QcmltaXRpdmUoUmVnaXN0ZXJJRCogZHN0LCBS
ZWdpc3RlcklEKiBzcmMpOwogCiAgICAgICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKCk7Ci0g
ICAgICAgIFJlZ2lzdGVySUQqIGVtaXRSZXNvbHZlQ29uc3RhbnRMb2NhbChSZWdpc3RlcklEKiBk
c3QsIGNvbnN0IElkZW50aWZpZXImLCBSZXNvbHZlU2NvcGVJbmZvJik7Ci0gICAgICAgIC8vIENh
bGxzIHRlbXBEZXN0aW5hdGlvbihkc3QpLCBzbyBpdCdzIHNhZmUgdG8gcGFzcyBudWxscHRyLiBJ
dCdzIGFsc28gcmVkdW5kYW50IHRvIGNhbGwKLSAgICAgICAgLy8gdGVtcERlc3RpbmF0aW9uKGRz
dCkgb24gdGhlIHRoaW5nIHlvdSBwYXNzIGFzIHRoZSBkZXN0aW5hdGlvbi4gVGhlIHJlYXNvbiB3
aHkgdGhpcwotICAgICAgICAvLyBjYWxscyB0ZW1wRGVzdGluYXRpb24oKSBmb3IgeW91IGlzIHRo
YXQgaXQgbWF5IG5vdCBuZWVkIGEgc3BhcmUgcmVnaXN0ZXIuIEl0IG1heSByZXR1cm4KLSAgICAg
ICAgLy8gc2NvcGVSZWdpc3RlcigpIGRpcmVjdGx5LiBTbywgeW91IGNhbm5vdCByZWx5IG9uIHRo
aXMgc3RvcmluZyB0byBkc3QuCi0gICAgICAgIFJlZ2lzdGVySUQqIGVtaXRSZXNvbHZlU2NvcGUo
UmVnaXN0ZXJJRCogZHN0LCBjb25zdCBJZGVudGlmaWVyJiwgUmVzb2x2ZVNjb3BlSW5mbyYpOwot
ICAgICAgICBSZWdpc3RlcklEKiBlbWl0R2V0RnJvbVNjb3BlKFJlZ2lzdGVySUQqIGRzdCwgUmVn
aXN0ZXJJRCogc2NvcGUsIGNvbnN0IElkZW50aWZpZXImLCBSZXNvbHZlTW9kZSwgY29uc3QgUmVz
b2x2ZVNjb3BlSW5mbyYpOwotICAgICAgICBSZWdpc3RlcklEKiBlbWl0UHV0VG9TY29wZShSZWdp
c3RlcklEKiBzY29wZSwgY29uc3QgSWRlbnRpZmllciYsIFJlZ2lzdGVySUQqIHZhbHVlLCBSZXNv
bHZlTW9kZSwgY29uc3QgUmVzb2x2ZVNjb3BlSW5mbyYpOworICAgICAgICBSZWdpc3RlcklEKiBl
bWl0UmVzb2x2ZUNvbnN0YW50TG9jYWwoUmVnaXN0ZXJJRCogZHN0LCBjb25zdCBWYXJpYWJsZSYp
OworICAgICAgICBSZWdpc3RlcklEKiBlbWl0UmVzb2x2ZVNjb3BlKFJlZ2lzdGVySUQqIGRzdCwg
Y29uc3QgVmFyaWFibGUmKTsKKyAgICAgICAgUmVnaXN0ZXJJRCogZW1pdEdldEZyb21TY29wZShS
ZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHNjb3BlLCBjb25zdCBWYXJpYWJsZSYsIFJlc29s
dmVNb2RlKTsKKyAgICAgICAgUmVnaXN0ZXJJRCogZW1pdFB1dFRvU2NvcGUoUmVnaXN0ZXJJRCog
c2NvcGUsIGNvbnN0IFZhcmlhYmxlJiwgUmVnaXN0ZXJJRCogdmFsdWUsIFJlc29sdmVNb2RlKTsK
KyAgICAgICAgUmVnaXN0ZXJJRCogaW5pdGlhbGl6ZVZhcmlhYmxlKGNvbnN0IFZhcmlhYmxlJiwg
UmVnaXN0ZXJJRCogdmFsdWUpOwogCiAgICAgICAgIFBhc3NSZWZQdHI8TGFiZWw+IGVtaXRMYWJl
bChMYWJlbCopOwogICAgICAgICB2b2lkIGVtaXRMb29wSGludCgpOwpAQCAtNjE1LDExICs2MDks
NyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBSZWdpc3RlcklEKiBuZXdSZWdpc3Rlcigp
OwogCi0gICAgICAgIC8vIEFkZHMgYSB2YXIgc2xvdCBhbmQgbWFwcyBpdCB0byB0aGUgbmFtZSBp
ZGVudCBpbiBzeW1ib2xUYWJsZSgpLgotICAgICAgICBlbnVtIFdhdGNoTW9kZSB7IElzV2F0Y2hh
YmxlLCBOb3RXYXRjaGFibGUgfTsKLSAgICAgICAgUmVnaXN0ZXJJRCogYWRkVmFyKGNvbnN0IElk
ZW50aWZpZXImLCBDb25zdGFudE1vZGUsIFdhdGNoTW9kZSk7Ci0KLSAgICAgICAgLy8gQWRkcyBh
biBhbm9ueW1vdXMgdmFyIHNsb3QuIFRvIGdpdmUgdGhpcyBzbG90IGEgbmFtZSwgYWRkIGl0IHRv
IHN5bWJvbFRhYmxlKCkuCisgICAgICAgIC8vIEFkZHMgYW4gYW5vbnltb3VzIGxvY2FsIHZhciBz
bG90LiBUbyBnaXZlIHRoaXMgc2xvdCBhIG5hbWUsIGFkZCBpdCB0byBzeW1ib2xUYWJsZSgpLgog
ICAgICAgICBSZWdpc3RlcklEKiBhZGRWYXIoKQogICAgICAgICB7CiAgICAgICAgICAgICArK21f
Y29kZUJsb2NrLT5tX251bVZhcnM7CkBAIC02MjksMTQgKzYxOSwxMSBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIH0KIAotICAgICAgICAvLyBS
ZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgYWRkZWQgdmFyLgotICAgICAgICB2b2lkIGFkZFBhcmFt
ZXRlcihjb25zdCBJZGVudGlmaWVyJiwgaW50IHBhcmFtZXRlckluZGV4KTsKLSAgICAgICAgUmVn
aXN0ZXJJRCogcmVzb2x2ZUNhbGxlZShGdW5jdGlvbk5vZGUqKTsKLSAgICAgICAgdm9pZCBhZGRD
YWxsZWUoRnVuY3Rpb25Ob2RlKiwgUmVnaXN0ZXJJRCopOwotCi0gICAgICAgIHZvaWQgcHJlc2Vy
dmVMYXN0VmFyKCk7Ci0KLSAgICAgICAgUmVnaXN0ZXJJRCYgcmVnaXN0ZXJGb3IoaW50IGluZGV4
KQorICAgICAgICAvLyBJbml0aWFsaXplcyB0aGUgc3RhY2sgZm9ybSB0aGUgcGFyYW1ldGVyOyBk
b2VzIG5vdGhpbmcgZm9yIHRoZSBzeW1ib2wgdGFibGUuCisgICAgICAgIFJlZ2lzdGVySUQqIGlu
aXRpYWxpemVOZXh0UGFyYW1ldGVyKCk7CisgICAgICAgIFN0cmluZ0ltcGwqIHZpc2libGVOYW1l
Rm9yUGFyYW1ldGVyKERlY29uc3RydWN0aW9uUGF0dGVybk5vZGUqIHBhdHRlcm4pOworICAgICAg
ICAKKyAgICAgICAgUmVnaXN0ZXJJRCYgcmVnaXN0ZXJGb3IoVmlydHVhbFJlZ2lzdGVyKQogICAg
ICAgICB7CiAgICAgICAgICAgICBpZiAob3BlcmFuZElzTG9jYWwoaW5kZXgpKQogICAgICAgICAg
ICAgICAgIHJldHVybiBtX2NhbGxlZVJlZ2lzdGVyc1tWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgpLnRv
TG9jYWwoKV07CkBAIC02NjEsMTEgKzY0OCw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAg
ICAgcmV0dXJuIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjpjcmVhdGUobV92bSwgbV9zY29w
ZU5vZGUtPnNvdXJjZSgpLCBib2R5LCBpc0J1aWx0aW5GdW5jdGlvbigpID8gVW5saW5rZWRCdWls
dGluRnVuY3Rpb24gOiBVbmxpbmtlZE5vcm1hbEZ1bmN0aW9uKTsKICAgICAgICAgfQogCi0gICAg
ICAgIFJlZ2lzdGVySUQqIGVtaXRJbml0TGF6eVJlZ2lzdGVyKFJlZ2lzdGVySUQqKTsKLSAgICAg
ICAgCiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRDb25zdHJ1Y3RWYXJhcmdzKFJlZ2lzdGVySUQq
IGRzdCwgUmVnaXN0ZXJJRCogZnVuYywgUmVnaXN0ZXJJRCogdGhpc1JlZ2lzdGVyLCBSZWdpc3Rl
cklEKiBhcmd1bWVudHMsIFJlZ2lzdGVySUQqIGZpcnN0RnJlZVJlZ2lzdGVyLCBpbnQzMl90IGZp
cnN0VmFyQXJnT2Zmc2V0LCBSZWdpc3RlcklEKiBwcm9maWxlSG9va1JlZ2lzdGVyLCBjb25zdCBK
U1RleHRQb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdFN0YXJ0LCBj
b25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RFbmQpOwogICAgICAgICBSZWdpc3RlcklEKiBlbWl0
Q2FsbFZhcmFyZ3MoT3Bjb2RlSUQsIFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogZnVuYywg
UmVnaXN0ZXJJRCogdGhpc1JlZ2lzdGVyLCBSZWdpc3RlcklEKiBhcmd1bWVudHMsIFJlZ2lzdGVy
SUQqIGZpcnN0RnJlZVJlZ2lzdGVyLCBpbnQzMl90IGZpcnN0VmFyQXJnT2Zmc2V0LCBSZWdpc3Rl
cklEKiBwcm9maWxlSG9va1JlZ2lzdGVyLCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGNv
bnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdFN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2
b3RFbmQpOwotICAgICAgICBSZWdpc3RlcklEKiBpbml0aWFsaXplQ2FwdHVyZWRWYXJpYWJsZShS
ZWdpc3RlcklEKiBkc3QsIGNvbnN0IElkZW50aWZpZXImLCBSZWdpc3RlcklEKik7CiAKICAgICBw
dWJsaWM6CiAgICAgICAgIEpTU3RyaW5nKiBhZGRTdHJpbmdDb25zdGFudChjb25zdCBJZGVudGlm
aWVyJik7CkBAIC02OTksNDQgKzY4Myw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgICAgIH0KIAotICAgICAgICBib29sIHNob3VsZFRlYXJPZmZBcmd1
bWVudHNFYWdlcmx5KCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1fY29kZVR5cGUg
PT0gRnVuY3Rpb25Db2RlICYmIGlzU3RyaWN0TW9kZSgpICYmIG1fc2NvcGVOb2RlLT5tb2RpZmll
c1BhcmFtZXRlcigpOwotICAgICAgICB9Ci0KLSAgICAgICAgYm9vbCBzaG91bGRDcmVhdGVBcmd1
bWVudHNFYWdlcmx5KCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKG1fY29kZVR5cGUgIT0g
RnVuY3Rpb25Db2RlKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAg
IHJldHVybiBtX2xleGljYWxFbnZpcm9ubWVudFJlZ2lzdGVyICYmIG1fY29kZUJsb2NrLT51c2Vz
QXJndW1lbnRzKCk7Ci0gICAgICAgIH0KLQogICAgICAgICBSZWdpc3RlcklEKiBlbWl0VGhyb3dF
eHByZXNzaW9uVG9vRGVlcEV4Y2VwdGlvbigpOwogCi0gICAgICAgIHZvaWQgY3JlYXRlQXJndW1l
bnRzSWZOZWNlc3NhcnkoKTsKLSAgICAgICAgUmVnaXN0ZXJJRCogY3JlYXRlTGF6eVJlZ2lzdGVy
SWZOZWNlc3NhcnkoUmVnaXN0ZXJJRCopOwotICAgICAgICAKLSAgICAgICAgYm9vbCBoYXNXYXRj
aGFibGVWYXJpYWJsZShpbnQgb3BlcmFuZCkgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAg
VmlydHVhbFJlZ2lzdGVyIHJlZyhvcGVyYW5kKTsKLSAgICAgICAgICAgIGlmICghcmVnLmlzTG9j
YWwoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBpZiAoc3Rh
dGljX2Nhc3Q8c2l6ZV90PihyZWcudG9Mb2NhbCgpKSA+PSBtX3dhdGNoYWJsZVZhcmlhYmxlcy5z
aXplKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgY29uc3Qg
SWRlbnRpZmllciYgaWRlbnQgPSBtX3dhdGNoYWJsZVZhcmlhYmxlc1tyZWcudG9Mb2NhbCgpXTsK
LSAgICAgICAgICAgIGlmIChpZGVudC5pc051bGwoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgICAgICBBU1NFUlQoaGFzQ29uc3RhbnQoaWRlbnQpKTsgLy8gU2hvdWxk
IGhhdmUgYWxyZWFkeSBiZWVuIGFkZGVkLgotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
ICAgIH0KLSAgICAgICAgCi0gICAgICAgIGNvbnN0IElkZW50aWZpZXImIHdhdGNoYWJsZVZhcmlh
YmxlSWRlbnRpZmllcihpbnQgb3BlcmFuZCkgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAg
QVNTRVJUKGhhc1dhdGNoYWJsZVZhcmlhYmxlKG9wZXJhbmQpKTsKLSAgICAgICAgICAgIFZpcnR1
YWxSZWdpc3RlciByZWcob3BlcmFuZCk7Ci0gICAgICAgICAgICByZXR1cm4gbV93YXRjaGFibGVW
YXJpYWJsZXNbcmVnLnRvTG9jYWwoKV07Ci0gICAgICAgIH0KLQogICAgIHByaXZhdGU6CiAgICAg
ICAgIFZlY3RvcjxVbmxpbmtlZEluc3RydWN0aW9uLCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4g
bV9pbnN0cnVjdGlvbnM7CiAKQEAgLTc1NSwxNCArNzAzLDE0IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICBSZWdpc3RlcklEIG1fdGhpc1JlZ2lzdGVyOwogICAgICAgICBSZWdpc3RlcklEIG1f
Y2FsbGVlUmVnaXN0ZXI7CiAgICAgICAgIFJlZ2lzdGVySUQqIG1fc2NvcGVSZWdpc3RlciB7IG51
bGxwdHIgfTsKKyAgICAgICAgUmVnaXN0ZXJJRCogbV9hcmd1bWVudHNSZWdpc3RlciB7IG51bGxw
dHIgfTsKICAgICAgICAgUmVnaXN0ZXJJRCogbV9sZXhpY2FsRW52aXJvbm1lbnRSZWdpc3RlciB7
IG51bGxwdHIgfTsKICAgICAgICAgUmVnaXN0ZXJJRCogbV9lbXB0eVZhbHVlUmVnaXN0ZXIgeyBu
dWxscHRyIH07CiAgICAgICAgIFJlZ2lzdGVySUQqIG1fZ2xvYmFsT2JqZWN0UmVnaXN0ZXIgeyBu
dWxscHRyIH07Ci0gICAgICAgIFJlZ2lzdGVySUQqIG1fbG9jYWxBcmd1bWVudHNSZWdpc3RlciB7
IG51bGxwdHIgfTsKIAotICAgICAgICBWZWN0b3I8SWRlbnRpZmllciwgMTY+IG1fd2F0Y2hhYmxl
VmFyaWFibGVzOwogICAgICAgICBTZWdtZW50ZWRWZWN0b3I8UmVnaXN0ZXJJRCwgMzI+IG1fY29u
c3RhbnRQb29sUmVnaXN0ZXJzOwogICAgICAgICBTZWdtZW50ZWRWZWN0b3I8UmVnaXN0ZXJJRCwg
MzI+IG1fY2FsbGVlUmVnaXN0ZXJzOworICAgICAgICB1bnNpZ25lZCBtX251bUNhcHR1cmVkVmFy
aWFibGVzOwogICAgICAgICBTZWdtZW50ZWRWZWN0b3I8UmVnaXN0ZXJJRCwgMzI+IG1fcGFyYW1l
dGVyczsKICAgICAgICAgU2VnbWVudGVkVmVjdG9yPExhYmVsLCAzMj4gbV9sYWJlbHM7CiAgICAg
ICAgIExhYmVsU2NvcGVTdG9yZSBtX2xhYmVsU2NvcGVzOwpAQCAtNzc1LDE1ICs3MjMsMTQgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8Rm9ySW5Db250
ZXh0Pj4gbV9mb3JJbkNvbnRleHRTdGFjazsKICAgICAgICAgVmVjdG9yPFRyeUNvbnRleHQ+IG1f
dHJ5Q29udGV4dFN0YWNrOwogICAgICAgICBWZWN0b3I8c3RkOjpwYWlyPFJlZlB0cjxSZWdpc3Rl
cklEPiwgY29uc3QgRGVjb25zdHJ1Y3Rpb25QYXR0ZXJuTm9kZSo+PiBtX2RlY29uc3RydWN0ZWRQ
YXJhbWV0ZXJzOworICAgICAgICBWZWN0b3I8RnVuY3Rpb25Cb2R5Tm9kZSo+IG1fZnVuY3Rpb25z
VG9Jbml0aWFsaXplOworICAgICAgICBib29sIG1fbmVlZFRvSW5pdGlhbGl6ZUFyZ3VtZW50cyB7
IGZhbHNlIH07CiAgICAgICAgIAogICAgICAgICBWZWN0b3I8VHJ5UmFuZ2U+IG1fdHJ5UmFuZ2Vz
OwogICAgICAgICBTZWdtZW50ZWRWZWN0b3I8VHJ5RGF0YSwgOD4gbV90cnlEYXRhOwogCiAgICAg
ICAgIGludCBtX25leHRDb25zdGFudE9mZnNldCB7IDAgfTsKIAotICAgICAgICBpbnQgbV9maXJz
dExhenlGdW5jdGlvbiB7IDAgfTsKLSAgICAgICAgaW50IG1fbGFzdExhenlGdW5jdGlvbiB7IDAg
fTsKLSAgICAgICAgSGFzaE1hcDx1bnNpZ25lZCBpbnQsIEZ1bmN0aW9uQm9keU5vZGUqLCBXVEY6
OkludEhhc2g8dW5zaWduZWQgaW50PiwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0
czx1bnNpZ25lZCBpbnQ+PiBtX2xhenlGdW5jdGlvbnM7CiAgICAgICAgIHR5cGVkZWYgSGFzaE1h
cDxGdW5jdGlvbkJvZHlOb2RlKiwgdW5zaWduZWQ+IEZ1bmN0aW9uT2Zmc2V0TWFwOwogICAgICAg
ICBGdW5jdGlvbk9mZnNldE1hcCBtX2Z1bmN0aW9uT2Zmc2V0czsKICAgICAgICAgCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4u
Y3BwCShyZXZpc2lvbiAxODA4NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBp
bGVyL05vZGVzQ29kZWdlbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2MCwyOSArMTYwLDI5IEBA
IFJlZ2lzdGVySUQqIFRoaXNOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWMKIAogYm9vbCBSZXNvbHZl
Tm9kZTo6aXNQdXJlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IpIGNvbnN0CiB7Ci0gICAg
cmV0dXJuIGdlbmVyYXRvci5sb2NhbChtX2lkZW50KS5nZXQoKTsKKyAgICByZXR1cm4gZ2VuZXJh
dG9yLnZhcmlhYmxlKG1faWRlbnQpLm9mZnNldCgpLmlzU3RhY2soKTsKIH0KIAogUmVnaXN0ZXJJ
RCogUmVzb2x2ZU5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9y
LCBSZWdpc3RlcklEKiBkc3QpCiB7Ci0gICAgaWYgKExvY2FsIGxvY2FsID0gZ2VuZXJhdG9yLmxv
Y2FsKG1faWRlbnQpKSB7CisgICAgVmFyaWFibGUgdmFyID0gZ2VuZXJhdG9yLnZhcmlhYmxlKG1f
aWRlbnQpOworICAgIGlmIChSZWdpc3RlcklEKiBsb2NhbCA9IHZhci5sb2NhbCgpKSB7CiAgICAg
ICAgIGlmIChkc3QgPT0gZ2VuZXJhdG9yLmlnbm9yZWRSZXN1bHQoKSkKLSAgICAgICAgICAgIHJl
dHVybiAwOworICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIGlmIChnZW5lcmF0
b3Iudm0oKS0+dHlwZVByb2ZpbGVyKCkpIHsKLSAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0UHJv
ZmlsZVR5cGUobG9jYWwuZ2V0KCksIFByb2ZpbGVUeXBlQnl0ZWNvZGVIYXNHbG9iYWxJRCwgbnVs
bHB0cik7CisgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlKGxvY2FsLCBQcm9m
aWxlVHlwZUJ5dGVjb2RlSGFzR2xvYmFsSUQsIG51bGxwdHIpOwogICAgICAgICAgICAgZ2VuZXJh
dG9yLmVtaXRUeXBlUHJvZmlsZXJFeHByZXNzaW9uSW5mbyhtX3Bvc2l0aW9uLCBKU1RleHRQb3Np
dGlvbigtMSwgbV9wb3NpdGlvbi5vZmZzZXQgKyBtX2lkZW50Lmxlbmd0aCgpLCAtMSkpOwogICAg
ICAgICB9Ci0gICAgICAgIHJldHVybiBnZW5lcmF0b3IubW92ZVRvRGVzdGluYXRpb25JZk5lZWRl
ZChkc3QsIGxvY2FsLmdldCgpKTsKKyAgICAgICAgcmV0dXJuIGdlbmVyYXRvci5tb3ZlVG9EZXN0
aW5hdGlvbklmTmVlZGVkKGRzdCwgbG9jYWwpOwogICAgIH0KICAgICAKICAgICBKU1RleHRQb3Np
dGlvbiBkaXZvdCA9IG1fc3RhcnQgKyBtX2lkZW50Lmxlbmd0aCgpOwogICAgIGdlbmVyYXRvci5l
bWl0RXhwcmVzc2lvbkluZm8oZGl2b3QsIG1fc3RhcnQsIGRpdm90KTsKLSAgICBSZXNvbHZlU2Nv
cGVJbmZvIHJlc29sdmVTY29wZUluZm87Ci0gICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHNjb3BlID0g
Z2VuZXJhdG9yLmVtaXRSZXNvbHZlU2NvcGUoZHN0LCBtX2lkZW50LCByZXNvbHZlU2NvcGVJbmZv
KTsKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gc2NvcGUgPSBnZW5lcmF0b3IuZW1pdFJlc29sdmVT
Y29wZShkc3QsIHZhcik7CiAgICAgUmVnaXN0ZXJJRCogZmluYWxEZXN0ID0gZ2VuZXJhdG9yLmZp
bmFsRGVzdGluYXRpb24oZHN0KTsKLSAgICBSZWdpc3RlcklEKiByZXN1bHQgPSBnZW5lcmF0b3Iu
ZW1pdEdldEZyb21TY29wZShmaW5hbERlc3QsIHNjb3BlLmdldCgpLCBtX2lkZW50LCBUaHJvd0lm
Tm90Rm91bmQsIHJlc29sdmVTY29wZUluZm8pOworICAgIFJlZ2lzdGVySUQqIHJlc3VsdCA9IGdl
bmVyYXRvci5lbWl0R2V0RnJvbVNjb3BlKGZpbmFsRGVzdCwgc2NvcGUuZ2V0KCksIHZhciwgVGhy
b3dJZk5vdEZvdW5kKTsKICAgICBpZiAoZ2VuZXJhdG9yLnZtKCktPnR5cGVQcm9maWxlcigpKSB7
Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZVR5cGUoZmluYWxEZXN0LCByZXNvbHZlU2Nv
cGVJbmZvLmlzTG9jYWwoKSA/IFByb2ZpbGVUeXBlQnl0ZWNvZGVHZXRGcm9tTG9jYWxTY29wZSA6
IFByb2ZpbGVUeXBlQnl0ZWNvZGVHZXRGcm9tU2NvcGUsICZtX2lkZW50KTsKKyAgICAgICAgZ2Vu
ZXJhdG9yLmVtaXRQcm9maWxlVHlwZShmaW5hbERlc3QsIHZhci5pc1Jlc29sdmVkKCkgPyBQcm9m
aWxlVHlwZUJ5dGVjb2RlR2V0RnJvbUxvY2FsU2NvcGUgOiBQcm9maWxlVHlwZUJ5dGVjb2RlR2V0
RnJvbVNjb3BlLCAmbV9pZGVudCk7CiAgICAgICAgIGdlbmVyYXRvci5lbWl0VHlwZVByb2ZpbGVy
RXhwcmVzc2lvbkluZm8obV9wb3NpdGlvbiwgSlNUZXh0UG9zaXRpb24oLTEsIG1fcG9zaXRpb24u
b2Zmc2V0ICsgbV9pZGVudC5sZW5ndGgoKSwgLTEpKTsKICAgICB9CiAgICAgcmV0dXJuIHJlc3Vs
dDsKQEAgLTQ5NSw4ICs0OTUsOSBAQCBDYWxsQXJndW1lbnRzOjpDYWxsQXJndW1lbnRzKEJ5dGVj
b2RlR2VuCiAKIFJlZ2lzdGVySUQqIEV2YWxGdW5jdGlvbkNhbGxOb2RlOjplbWl0Qnl0ZWNvZGUo
Qnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogewotICAgIGlm
IChMb2NhbCBsb2NhbCA9IGdlbmVyYXRvci5sb2NhbChnZW5lcmF0b3IucHJvcGVydHlOYW1lcygp
LmV2YWwpKSB7Ci0gICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBmdW5jID0gZ2VuZXJhdG9yLmVt
aXRNb3ZlKGdlbmVyYXRvci50ZW1wRGVzdGluYXRpb24oZHN0KSwgbG9jYWwuZ2V0KCkpOworICAg
IFZhcmlhYmxlIHZhciA9IGdlbmVyYXRvci52YXJpYWJsZShnZW5lcmF0b3IucHJvcGVydHlOYW1l
cygpLmV2YWwpOworICAgIGlmIChSZWdpc3RlcklEKiBsb2NhbCA9IHZhci5sb2NhbCgpKSB7Cisg
ICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBmdW5jID0gZ2VuZXJhdG9yLmVtaXRNb3ZlKGdlbmVy
YXRvci50ZW1wRGVzdGluYXRpb24oZHN0KSwgbG9jYWwpOwogICAgICAgICBDYWxsQXJndW1lbnRz
IGNhbGxBcmd1bWVudHMoZ2VuZXJhdG9yLCBtX2FyZ3MpOwogICAgICAgICBnZW5lcmF0b3IuZW1p
dExvYWQoY2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwganNVbmRlZmluZWQoKSk7CiAgICAg
ICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdENhbGxFdmFsKGdlbmVyYXRvci5maW5hbERlc3RpbmF0
aW9uKGRzdCwgZnVuYy5nZXQoKSksIGZ1bmMuZ2V0KCksIGNhbGxBcmd1bWVudHMsIGRpdm90KCks
IGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CkBAIC01MDYsMTEgKzUwNywxMCBAQCBSZWdpc3Rl
cklEKiBFdmFsRnVuY3Rpb25DYWxsTm9kZTo6ZW1pdEJ5CiAgICAgQ2FsbEFyZ3VtZW50cyBjYWxs
QXJndW1lbnRzKGdlbmVyYXRvciwgbV9hcmdzKTsKICAgICBKU1RleHRQb3NpdGlvbiBuZXdEaXZv
dCA9IGRpdm90U3RhcnQoKSArIDQ7CiAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhu
ZXdEaXZvdCwgZGl2b3RTdGFydCgpLCBuZXdEaXZvdCk7Ci0gICAgUmVzb2x2ZVNjb3BlSW5mbyBy
ZXNvbHZlU2NvcGVJbmZvOwogICAgIGdlbmVyYXRvci5tb3ZlVG9EZXN0aW5hdGlvbklmTmVlZGVk
KAogICAgICAgICBjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLAotICAgICAgICBnZW5lcmF0
b3IuZW1pdFJlc29sdmVTY29wZShjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCBnZW5lcmF0
b3IucHJvcGVydHlOYW1lcygpLmV2YWwsIHJlc29sdmVTY29wZUluZm8pKTsKLSAgICBnZW5lcmF0
b3IuZW1pdEdldEZyb21TY29wZShmdW5jLmdldCgpLCBjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3Rl
cigpLCBnZW5lcmF0b3IucHJvcGVydHlOYW1lcygpLmV2YWwsIFRocm93SWZOb3RGb3VuZCwgcmVz
b2x2ZVNjb3BlSW5mbyk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0UmVzb2x2ZVNjb3BlKGNhbGxB
cmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIHZhcikpOworICAgIGdlbmVyYXRvci5lbWl0R2V0RnJv
bVNjb3BlKGZ1bmMuZ2V0KCksIGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIHZhciwgVGhy
b3dJZk5vdEZvdW5kKTsKICAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRDYWxsRXZhbChnZW5lcmF0
b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIGZ1bmMuZ2V0KCkpLCBmdW5jLmdldCgpLCBjYWxsQXJn
dW1lbnRzLCBkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwogfQogCkBAIC01MzYs
OCArNTM2LDkgQEAgUmVnaXN0ZXJJRCogRnVuY3Rpb25DYWxsUmVzb2x2ZU5vZGU6OmVtaQogewog
ICAgIEV4cGVjdGVkRnVuY3Rpb24gZXhwZWN0ZWRGdW5jdGlvbiA9IGdlbmVyYXRvci5leHBlY3Rl
ZEZ1bmN0aW9uRm9ySWRlbnRpZmllcihtX2lkZW50KTsKIAotICAgIGlmIChMb2NhbCBsb2NhbCA9
IGdlbmVyYXRvci5sb2NhbChtX2lkZW50KSkgewotICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4g
ZnVuYyA9IGdlbmVyYXRvci5lbWl0TW92ZShnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKGRzdCks
IGxvY2FsLmdldCgpKTsKKyAgICBWYXJpYWJsZSB2YXIgPSBnZW5lcmF0b3IudmFyaWFibGUobV9p
ZGVudCk7CisgICAgaWYgKFJlZ2lzdGVySUQqIGxvY2FsID0gdmFyLmxvY2FsKCkpIHsKKyAgICAg
ICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGZ1bmMgPSBnZW5lcmF0b3IuZW1pdE1vdmUoZ2VuZXJhdG9y
LnRlbXBEZXN0aW5hdGlvbihkc3QpLCBsb2NhbCk7CiAgICAgICAgIFJlZlB0cjxSZWdpc3RlcklE
PiByZXR1cm5WYWx1ZSA9IGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCwgZnVuYy5nZXQo
KSk7CiAgICAgICAgIENhbGxBcmd1bWVudHMgY2FsbEFyZ3VtZW50cyhnZW5lcmF0b3IsIG1fYXJn
cyk7CiAgICAgICAgIGdlbmVyYXRvci5lbWl0TG9hZChjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3Rl
cigpLCBqc1VuZGVmaW5lZCgpKTsKQEAgLTU1NywxMSArNTU4LDEwIEBAIFJlZ2lzdGVySUQqIEZ1
bmN0aW9uQ2FsbFJlc29sdmVOb2RlOjplbWkKIAogICAgIEpTVGV4dFBvc2l0aW9uIG5ld0Rpdm90
ID0gZGl2b3RTdGFydCgpICsgbV9pZGVudC5sZW5ndGgoKTsKICAgICBnZW5lcmF0b3IuZW1pdEV4
cHJlc3Npb25JbmZvKG5ld0Rpdm90LCBkaXZvdFN0YXJ0KCksIG5ld0Rpdm90KTsKLSAgICBSZXNv
bHZlU2NvcGVJbmZvIHJlc29sdmVTY29wZUluZm87CiAgICAgZ2VuZXJhdG9yLm1vdmVUb0Rlc3Rp
bmF0aW9uSWZOZWVkZWQoCiAgICAgICAgIGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksCi0g
ICAgICAgIGdlbmVyYXRvci5lbWl0UmVzb2x2ZVNjb3BlKGNhbGxBcmd1bWVudHMudGhpc1JlZ2lz
dGVyKCksIG1faWRlbnQsIHJlc29sdmVTY29wZUluZm8pKTsKLSAgICBnZW5lcmF0b3IuZW1pdEdl
dEZyb21TY29wZShmdW5jLmdldCgpLCBjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCBtX2lk
ZW50LCBUaHJvd0lmTm90Rm91bmQsIHJlc29sdmVTY29wZUluZm8pOworICAgICAgICBnZW5lcmF0
b3IuZW1pdFJlc29sdmVTY29wZShjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCB2YXIpKTsK
KyAgICBnZW5lcmF0b3IuZW1pdEdldEZyb21TY29wZShmdW5jLmdldCgpLCBjYWxsQXJndW1lbnRz
LnRoaXNSZWdpc3RlcigpLCB2YXIsIFRocm93SWZOb3RGb3VuZCk7CiAgICAgUmVnaXN0ZXJJRCog
cmV0ID0gZ2VuZXJhdG9yLmVtaXRDYWxsKHJldHVyblZhbHVlLmdldCgpLCBmdW5jLmdldCgpLCBl
eHBlY3RlZEZ1bmN0aW9uLCBjYWxsQXJndW1lbnRzLCBkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRp
dm90RW5kKCkpOwogICAgIGlmIChnZW5lcmF0b3Iudm0oKS0+dHlwZVByb2ZpbGVyKCkpIHsKICAg
ICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlVHlwZShyZXR1cm5WYWx1ZS5nZXQoKSwgUHJvZmls
ZVR5cGVCeXRlY29kZURvZXNOb3RIYXZlR2xvYmFsSUQsIG51bGxwdHIpOwpAQCAtODIwLDExICs4
MjAsMTIgQEAgUmVnaXN0ZXJJRCogUG9zdGZpeE5vZGU6OmVtaXRSZXNvbHZlKEJ5dAogICAgIFJl
c29sdmVOb2RlKiByZXNvbHZlID0gc3RhdGljX2Nhc3Q8UmVzb2x2ZU5vZGUqPihtX2V4cHIpOwog
ICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gcmVzb2x2ZS0+aWRlbnRpZmllcigpOwogCi0g
ICAgaWYgKExvY2FsIGxvY2FsID0gZ2VuZXJhdG9yLmxvY2FsKGlkZW50KSkgewotICAgICAgICBS
ZWZQdHI8UmVnaXN0ZXJJRD4gbG9jYWxSZWcgPSBsb2NhbC5nZXQoKTsKLSAgICAgICAgaWYgKGxv
Y2FsLmlzUmVhZE9ubHkoKSkgeworICAgIFZhcmlhYmxlIHZhciA9IGdlbmVyYXRvci52YXJpYWJs
ZShpZGVudCk7CisgICAgaWYgKFJlZ2lzdGVySUQqIGxvY2FsID0gdmFyLmxvY2FsKCkpIHsKKyAg
ICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGxvY2FsUmVnID0gbG9jYWw7CisgICAgICAgIGlmICh2
YXIuaXNSZWFkT25seSgpKSB7CiAgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdFJlYWRPbmx5RXhj
ZXB0aW9uSWZOZWVkZWQoKTsKLSAgICAgICAgICAgIGxvY2FsUmVnID0gZ2VuZXJhdG9yLmVtaXRN
b3ZlKGdlbmVyYXRvci50ZW1wRGVzdGluYXRpb24oZHN0KSwgbG9jYWxSZWcuZ2V0KCkpOworICAg
ICAgICAgICAgbG9jYWxSZWcgPSBnZW5lcmF0b3IuZW1pdE1vdmUoZ2VuZXJhdG9yLnRlbXBEZXN0
aW5hdGlvbihkc3QpLCBsb2NhbCk7CiAgICAgICAgIH0gZWxzZSBpZiAoZ2VuZXJhdG9yLnZtKCkt
PnR5cGVQcm9maWxlcigpKSB7CiAgICAgICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gdGVtcERz
dCA9IGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCk7CiAgICAgICAgICAgICBBU1NFUlQo
ZHN0ICE9IGxvY2FsUmVnKTsKQEAgLTg0MSwxMyArODQyLDEyIEBAIFJlZ2lzdGVySUQqIFBvc3Rm
aXhOb2RlOjplbWl0UmVzb2x2ZShCeXQKICAgICB9CiAKICAgICBnZW5lcmF0b3IuZW1pdEV4cHJl
c3Npb25JbmZvKGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7Ci0gICAgUmVzb2x2
ZVNjb3BlSW5mbyByZXNvbHZlU2NvcGVJbmZvOwotICAgIFJlZlB0cjxSZWdpc3RlcklEPiBzY29w
ZSA9IGdlbmVyYXRvci5lbWl0UmVzb2x2ZVNjb3BlKG51bGxwdHIsIGlkZW50LCByZXNvbHZlU2Nv
cGVJbmZvKTsKLSAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gdmFsdWUgPSBnZW5lcmF0b3IuZW1pdEdl
dEZyb21TY29wZShnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIHNjb3BlLmdldCgpLCBpZGVudCwg
VGhyb3dJZk5vdEZvdW5kLCByZXNvbHZlU2NvcGVJbmZvKTsKKyAgICBSZWZQdHI8UmVnaXN0ZXJJ
RD4gc2NvcGUgPSBnZW5lcmF0b3IuZW1pdFJlc29sdmVTY29wZShudWxscHRyLCB2YXIpOworICAg
IFJlZlB0cjxSZWdpc3RlcklEPiB2YWx1ZSA9IGdlbmVyYXRvci5lbWl0R2V0RnJvbVNjb3BlKGdl
bmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgc2NvcGUuZ2V0KCksIHZhciwgVGhyb3dJZk5vdEZvdW5k
KTsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gb2xkVmFsdWUgPSBlbWl0UG9zdEluY09yRGVjKGdl
bmVyYXRvciwgZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSwgdmFsdWUuZ2V0KCksIG1f
b3BlcmF0b3IpOwotICAgIGdlbmVyYXRvci5lbWl0UHV0VG9TY29wZShzY29wZS5nZXQoKSwgaWRl
bnQsIHZhbHVlLmdldCgpLCBUaHJvd0lmTm90Rm91bmQsIHJlc29sdmVTY29wZUluZm8pOworICAg
IGdlbmVyYXRvci5lbWl0UHV0VG9TY29wZShzY29wZS5nZXQoKSwgdmFyLCB2YWx1ZS5nZXQoKSwg
VGhyb3dJZk5vdEZvdW5kKTsKICAgICBpZiAoZ2VuZXJhdG9yLnZtKCktPnR5cGVQcm9maWxlcigp
KSB7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZVR5cGUodmFsdWUuZ2V0KCksIHJlc29s
dmVTY29wZUluZm8uaXNMb2NhbCgpID8gUHJvZmlsZVR5cGVCeXRlY29kZVB1dFRvTG9jYWxTY29w
ZSA6IFByb2ZpbGVUeXBlQnl0ZWNvZGVQdXRUb1Njb3BlLCAmaWRlbnQpOworICAgICAgICBnZW5l
cmF0b3IuZW1pdFByb2ZpbGVUeXBlKHZhbHVlLmdldCgpLCB2YXIuaXNSZXNvbHZlZCgpID8gUHJv
ZmlsZVR5cGVCeXRlY29kZVB1dFRvTG9jYWxTY29wZSA6IFByb2ZpbGVUeXBlQnl0ZWNvZGVQdXRU
b1Njb3BlLCAmaWRlbnQpOwogICAgICAgICBnZW5lcmF0b3IuZW1pdFR5cGVQcm9maWxlckV4cHJl
c3Npb25JbmZvKGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAgICAgfQogCkBAIC05MjMsMTIg
KzkyMywxMiBAQCBSZWdpc3RlcklEKiBQb3N0Zml4Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5CiAKIFJl
Z2lzdGVySUQqIERlbGV0ZVJlc29sdmVOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0
b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogewotICAgIGlmIChnZW5lcmF0b3IubG9j
YWwobV9pZGVudCkuZ2V0KCkpCisgICAgVmFyaWFibGUgdmFyID0gZ2VuZXJhdG9yLnZhcmlhYmxl
KG1faWRlbnQpOworICAgIGlmICh2YXIubG9jYWwoKSkKICAgICAgICAgcmV0dXJuIGdlbmVyYXRv
ci5lbWl0TG9hZChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpLCBmYWxzZSk7CiAKICAg
ICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2
b3RFbmQoKSk7Ci0gICAgUmVzb2x2ZVNjb3BlSW5mbyByZXNvbHZlU2NvcGVJbmZvOwotICAgIFJl
ZlB0cjxSZWdpc3RlcklEPiBiYXNlID0gZ2VuZXJhdG9yLmVtaXRSZXNvbHZlU2NvcGUoZHN0LCBt
X2lkZW50LCByZXNvbHZlU2NvcGVJbmZvKTsKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gYmFzZSA9
IGdlbmVyYXRvci5lbWl0UmVzb2x2ZVNjb3BlKGRzdCwgdmFyKTsKICAgICByZXR1cm4gZ2VuZXJh
dG9yLmVtaXREZWxldGVCeUlkKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCwgYmFzZS5n
ZXQoKSksIGJhc2UuZ2V0KCksIG1faWRlbnQpOwogfQogCkBAIC05NzUsMTkgKzk3NSwxOSBAQCBS
ZWdpc3RlcklEKiBWb2lkTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjCiAgICAgcmV0dXJuIGdlbmVy
YXRvci5lbWl0TG9hZChkc3QsIGpzVW5kZWZpbmVkKCkpOwogfQogCi0vLyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0gVHlwZU9mVmFsdWVOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVHlwZU9mUmVz
b2x2ZU5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogUmVnaXN0ZXJJ
RCogVHlwZU9mUmVzb2x2ZU5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2Vu
ZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7Ci0gICAgaWYgKExvY2FsIGxvY2FsID0gZ2VuZXJh
dG9yLmxvY2FsKG1faWRlbnQpKSB7CisgICAgVmFyaWFibGUgdmFyID0gZ2VuZXJhdG9yLnZhcmlh
YmxlKG1faWRlbnQpOworICAgIGlmIChSZWdpc3RlcklEKiBsb2NhbCA9IHZhci5sb2NhbCgpKSB7
CiAgICAgICAgIGlmIChkc3QgPT0gZ2VuZXJhdG9yLmlnbm9yZWRSZXN1bHQoKSkKICAgICAgICAg
ICAgIHJldHVybiAwOwotICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRUeXBlT2YoZ2VuZXJh
dG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSwgbG9jYWwuZ2V0KCkpOworICAgICAgICByZXR1cm4g
Z2VuZXJhdG9yLmVtaXRUeXBlT2YoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSwgbG9j
YWwpOwogICAgIH0KIAotICAgIFJlc29sdmVTY29wZUluZm8gcmVzb2x2ZVNjb3BlSW5mbzsKLSAg
ICBSZWZQdHI8UmVnaXN0ZXJJRD4gc2NvcGUgPSBnZW5lcmF0b3IuZW1pdFJlc29sdmVTY29wZShk
c3QsIG1faWRlbnQsIHJlc29sdmVTY29wZUluZm8pOwotICAgIFJlZlB0cjxSZWdpc3RlcklEPiB2
YWx1ZSA9IGdlbmVyYXRvci5lbWl0R2V0RnJvbVNjb3BlKGdlbmVyYXRvci5uZXdUZW1wb3Jhcnko
KSwgc2NvcGUuZ2V0KCksIG1faWRlbnQsIERvTm90VGhyb3dJZk5vdEZvdW5kLCByZXNvbHZlU2Nv
cGVJbmZvKTsKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gc2NvcGUgPSBnZW5lcmF0b3IuZW1pdFJl
c29sdmVTY29wZShkc3QsIHZhcik7CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHZhbHVlID0gZ2Vu
ZXJhdG9yLmVtaXRHZXRGcm9tU2NvcGUoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBzY29wZS5n
ZXQoKSwgdmFyLCBEb05vdFRocm93SWZOb3RGb3VuZCk7CiAgICAgaWYgKGRzdCA9PSBnZW5lcmF0
b3IuaWdub3JlZFJlc3VsdCgpKQogICAgICAgICByZXR1cm4gMDsKICAgICByZXR1cm4gZ2VuZXJh
dG9yLmVtaXRUeXBlT2YoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0LCBzY29wZS5nZXQo
KSksIHZhbHVlLmdldCgpKTsKQEAgLTEwMTMsOSArMTAxMywxMCBAQCBSZWdpc3RlcklEKiBQcmVm
aXhOb2RlOjplbWl0UmVzb2x2ZShCeXRlCiAgICAgUmVzb2x2ZU5vZGUqIHJlc29sdmUgPSBzdGF0
aWNfY2FzdDxSZXNvbHZlTm9kZSo+KG1fZXhwcik7CiAgICAgY29uc3QgSWRlbnRpZmllciYgaWRl
bnQgPSByZXNvbHZlLT5pZGVudGlmaWVyKCk7CiAKLSAgICBpZiAoTG9jYWwgbG9jYWwgPSBnZW5l
cmF0b3IubG9jYWwoaWRlbnQpKSB7Ci0gICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBsb2NhbFJl
ZyA9IGxvY2FsLmdldCgpOwotICAgICAgICBpZiAobG9jYWwuaXNSZWFkT25seSgpKSB7CisgICAg
VmFyaWFibGUgdmFyID0gZ2VuZXJhdG9yLnZhcmlhYmxlKGlkZW50KTsKKyAgICBpZiAoUmVnaXN0
ZXJJRCogbG9jYWwgPSB2YXIubG9jYWwoKSkgeworICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4g
bG9jYWxSZWcgPSBsb2NhbDsKKyAgICAgICAgaWYgKHZhci5pc1JlYWRPbmx5KCkpIHsKICAgICAg
ICAgICAgIGdlbmVyYXRvci5lbWl0UmVhZE9ubHlFeGNlcHRpb25JZk5lZWRlZCgpOwogICAgICAg
ICAgICAgbG9jYWxSZWcgPSBnZW5lcmF0b3IuZW1pdE1vdmUoZ2VuZXJhdG9yLnRlbXBEZXN0aW5h
dGlvbihkc3QpLCBsb2NhbFJlZy5nZXQoKSk7CiAgICAgICAgIH0gZWxzZSBpZiAoZ2VuZXJhdG9y
LnZtKCktPnR5cGVQcm9maWxlcigpKSB7CkBAIC0xMDMyLDEzICsxMDMzLDEyIEBAIFJlZ2lzdGVy
SUQqIFByZWZpeE5vZGU6OmVtaXRSZXNvbHZlKEJ5dGUKICAgICB9CiAKICAgICBnZW5lcmF0b3Iu
ZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7Ci0g
ICAgUmVzb2x2ZVNjb3BlSW5mbyByZXNvbHZlU2NvcGVJbmZvOwotICAgIFJlZlB0cjxSZWdpc3Rl
cklEPiBzY29wZSA9IGdlbmVyYXRvci5lbWl0UmVzb2x2ZVNjb3BlKGRzdCwgaWRlbnQsIHJlc29s
dmVTY29wZUluZm8pOwotICAgIFJlZlB0cjxSZWdpc3RlcklEPiB2YWx1ZSA9IGdlbmVyYXRvci5l
bWl0R2V0RnJvbVNjb3BlKGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgc2NvcGUuZ2V0KCksIGlk
ZW50LCBUaHJvd0lmTm90Rm91bmQsIHJlc29sdmVTY29wZUluZm8pOworICAgIFJlZlB0cjxSZWdp
c3RlcklEPiBzY29wZSA9IGdlbmVyYXRvci5lbWl0UmVzb2x2ZVNjb3BlKGRzdCwgdmFyKTsKKyAg
ICBSZWZQdHI8UmVnaXN0ZXJJRD4gdmFsdWUgPSBnZW5lcmF0b3IuZW1pdEdldEZyb21TY29wZShn
ZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIHNjb3BlLmdldCgpLCB2YXIsIFRocm93SWZOb3RGb3Vu
ZCk7CiAgICAgZW1pdEluY09yRGVjKGdlbmVyYXRvciwgdmFsdWUuZ2V0KCksIG1fb3BlcmF0b3Ip
OwotICAgIGdlbmVyYXRvci5lbWl0UHV0VG9TY29wZShzY29wZS5nZXQoKSwgaWRlbnQsIHZhbHVl
LmdldCgpLCBUaHJvd0lmTm90Rm91bmQsIHJlc29sdmVTY29wZUluZm8pOworICAgIGdlbmVyYXRv
ci5lbWl0UHV0VG9TY29wZShzY29wZS5nZXQoKSwgdmFyLCB2YWx1ZS5nZXQoKSwgVGhyb3dJZk5v
dEZvdW5kKTsKICAgICBpZiAoZ2VuZXJhdG9yLnZtKCktPnR5cGVQcm9maWxlcigpKSB7Ci0gICAg
ICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZVR5cGUodmFsdWUuZ2V0KCksIHJlc29sdmVTY29wZUlu
Zm8uaXNMb2NhbCgpID8gUHJvZmlsZVR5cGVCeXRlY29kZVB1dFRvTG9jYWxTY29wZSA6IFByb2Zp
bGVUeXBlQnl0ZWNvZGVQdXRUb1Njb3BlLCAmaWRlbnQpOworICAgICAgICBnZW5lcmF0b3IuZW1p
dFByb2ZpbGVUeXBlKHZhbHVlLmdldCgpLCB2YXIuaXNSZXNvbHZlZCgpID8gUHJvZmlsZVR5cGVC
eXRlY29kZVB1dFRvTG9jYWxTY29wZSA6IFByb2ZpbGVUeXBlQnl0ZWNvZGVQdXRUb1Njb3BlLCAm
aWRlbnQpOwogICAgICAgICBnZW5lcmF0b3IuZW1pdFR5cGVQcm9maWxlckV4cHJlc3Npb25JbmZv
KGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAgICAgfQogICAgIHJldHVybiBnZW5lcmF0b3Iu
bW92ZVRvRGVzdGluYXRpb25JZk5lZWRlZChkc3QsIHZhbHVlLmdldCgpKTsKQEAgLTE1MzAsMzcg
KzE1MzAsMzcgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgUmVnaXN0ZXJJRCogZW1pdFJlYQogUmVn
aXN0ZXJJRCogUmVhZE1vZGlmeVJlc29sdmVOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5l
cmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogewogICAgIEpTVGV4dFBvc2l0aW9u
IG5ld0Rpdm90ID0gZGl2b3RTdGFydCgpICsgbV9pZGVudC5sZW5ndGgoKTsKLSAgICBpZiAoTG9j
YWwgbG9jYWwgPSBnZW5lcmF0b3IubG9jYWwobV9pZGVudCkpIHsKLSAgICAgICAgaWYgKGxvY2Fs
LmlzUmVhZE9ubHkoKSkgeworICAgIFZhcmlhYmxlIHZhciA9IGdlbmVyYXRvci52YXJpYWJsZSht
X2lkZW50KTsKKyAgICBpZiAoUmVnaXN0ZXJJRCogbG9jYWwgPSB2YXIubG9jYWwoKSkgeworICAg
ICAgICBpZiAodmFyLmlzUmVhZE9ubHkoKSkgewogICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRS
ZWFkT25seUV4Y2VwdGlvbklmTmVlZGVkKCk7Ci0gICAgICAgICAgICByZXR1cm4gZW1pdFJlYWRN
b2RpZnlBc3NpZ25tZW50KGdlbmVyYXRvciwgZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0
KSwgbG9jYWwuZ2V0KCksIG1fcmlnaHQsIG1fb3BlcmF0b3IsIE9wZXJhbmRUeXBlcyhSZXN1bHRU
eXBlOjp1bmtub3duVHlwZSgpLCBtX3JpZ2h0LT5yZXN1bHREZXNjcmlwdG9yKCkpKTsKKyAgICAg
ICAgICAgIHJldHVybiBlbWl0UmVhZE1vZGlmeUFzc2lnbm1lbnQoZ2VuZXJhdG9yLCBnZW5lcmF0
b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpLCBsb2NhbCwgbV9yaWdodCwgbV9vcGVyYXRvciwgT3Bl
cmFuZFR5cGVzKFJlc3VsdFR5cGU6OnVua25vd25UeXBlKCksIG1fcmlnaHQtPnJlc3VsdERlc2Ny
aXB0b3IoKSkpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBpZiAoZ2VuZXJhdG9yLnZt
KCktPnR5cGVQcm9maWxlcigpCiAgICAgICAgICAgICB8fCBnZW5lcmF0b3IubGVmdEhhbmRTaWRl
TmVlZHNDb3B5KG1fcmlnaHRIYXNBc3NpZ25tZW50cywgbV9yaWdodC0+aXNQdXJlKGdlbmVyYXRv
cikpKSB7CiAgICAgICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcmVzdWx0ID0gZ2VuZXJhdG9y
Lm5ld1RlbXBvcmFyeSgpOwotICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRNb3ZlKHJlc3VsdC5n
ZXQoKSwgbG9jYWwuZ2V0KCkpOworICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRNb3ZlKHJlc3Vs
dC5nZXQoKSwgbG9jYWwpOwogICAgICAgICAgICAgZW1pdFJlYWRNb2RpZnlBc3NpZ25tZW50KGdl
bmVyYXRvciwgcmVzdWx0LmdldCgpLCByZXN1bHQuZ2V0KCksIG1fcmlnaHQsIG1fb3BlcmF0b3Is
IE9wZXJhbmRUeXBlcyhSZXN1bHRUeXBlOjp1bmtub3duVHlwZSgpLCBtX3JpZ2h0LT5yZXN1bHRE
ZXNjcmlwdG9yKCkpKTsKLSAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0TW92ZShsb2NhbC5nZXQo
KSwgcmVzdWx0LmdldCgpKTsKLSAgICAgICAgICAgIGdlbmVyYXRvci5pbnZhbGlkYXRlRm9ySW5D
b250ZXh0Rm9yTG9jYWwobG9jYWwuZ2V0KCkpOworICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRN
b3ZlKGxvY2FsLCByZXN1bHQuZ2V0KCkpOworICAgICAgICAgICAgZ2VuZXJhdG9yLmludmFsaWRh
dGVGb3JJbkNvbnRleHRGb3JMb2NhbChsb2NhbCk7CiAgICAgICAgICAgICBpZiAoZ2VuZXJhdG9y
LnZtKCktPnR5cGVQcm9maWxlcigpKQogICAgICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0VHlw
ZVByb2ZpbGVyRXhwcmVzc2lvbkluZm8oZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKICAgICAg
ICAgICAgIHJldHVybiBnZW5lcmF0b3IubW92ZVRvRGVzdGluYXRpb25JZk5lZWRlZChkc3QsIHJl
c3VsdC5nZXQoKSk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIFJlZ2lzdGVySUQqIHJl
c3VsdCA9IGVtaXRSZWFkTW9kaWZ5QXNzaWdubWVudChnZW5lcmF0b3IsIGxvY2FsLmdldCgpLCBs
b2NhbC5nZXQoKSwgbV9yaWdodCwgbV9vcGVyYXRvciwgT3BlcmFuZFR5cGVzKFJlc3VsdFR5cGU6
OnVua25vd25UeXBlKCksIG1fcmlnaHQtPnJlc3VsdERlc2NyaXB0b3IoKSkpOwotICAgICAgICBn
ZW5lcmF0b3IuaW52YWxpZGF0ZUZvckluQ29udGV4dEZvckxvY2FsKGxvY2FsLmdldCgpKTsKKyAg
ICAgICAgUmVnaXN0ZXJJRCogcmVzdWx0ID0gZW1pdFJlYWRNb2RpZnlBc3NpZ25tZW50KGdlbmVy
YXRvciwgbG9jYWwsIGxvY2FsLCBtX3JpZ2h0LCBtX29wZXJhdG9yLCBPcGVyYW5kVHlwZXMoUmVz
dWx0VHlwZTo6dW5rbm93blR5cGUoKSwgbV9yaWdodC0+cmVzdWx0RGVzY3JpcHRvcigpKSk7Cisg
ICAgICAgIGdlbmVyYXRvci5pbnZhbGlkYXRlRm9ySW5Db250ZXh0Rm9yTG9jYWwobG9jYWwpOwog
ICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLm1vdmVUb0Rlc3RpbmF0aW9uSWZOZWVkZWQoZHN0LCBy
ZXN1bHQpOwogICAgIH0KIAogICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8obmV3RGl2
b3QsIGRpdm90U3RhcnQoKSwgbmV3RGl2b3QpOwotICAgIFJlc29sdmVTY29wZUluZm8gcmVzb2x2
ZVNjb3BlSW5mbzsKLSAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gc2NvcGUgPSBnZW5lcmF0b3IuZW1p
dFJlc29sdmVTY29wZShudWxscHRyLCBtX2lkZW50LCByZXNvbHZlU2NvcGVJbmZvKTsKLSAgICBS
ZWZQdHI8UmVnaXN0ZXJJRD4gdmFsdWUgPSBnZW5lcmF0b3IuZW1pdEdldEZyb21TY29wZShnZW5l
cmF0b3IubmV3VGVtcG9yYXJ5KCksIHNjb3BlLmdldCgpLCBtX2lkZW50LCBUaHJvd0lmTm90Rm91
bmQsIHJlc29sdmVTY29wZUluZm8pOworICAgIFJlZlB0cjxSZWdpc3RlcklEPiBzY29wZSA9IGdl
bmVyYXRvci5lbWl0UmVzb2x2ZVNjb3BlKG51bGxwdHIsIHZhcik7CisgICAgUmVmUHRyPFJlZ2lz
dGVySUQ+IHZhbHVlID0gZ2VuZXJhdG9yLmVtaXRHZXRGcm9tU2NvcGUoZ2VuZXJhdG9yLm5ld1Rl
bXBvcmFyeSgpLCBzY29wZS5nZXQoKSwgdmFyLCBUaHJvd0lmTm90Rm91bmQpOwogICAgIFJlZlB0
cjxSZWdpc3RlcklEPiByZXN1bHQgPSBlbWl0UmVhZE1vZGlmeUFzc2lnbm1lbnQoZ2VuZXJhdG9y
LCBnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIHZhbHVlLmdldCgpKSwgdmFsdWUuZ2V0
KCksIG1fcmlnaHQsIG1fb3BlcmF0b3IsIE9wZXJhbmRUeXBlcyhSZXN1bHRUeXBlOjp1bmtub3du
VHlwZSgpLCBtX3JpZ2h0LT5yZXN1bHREZXNjcmlwdG9yKCkpLCB0aGlzKTsKLSAgICBSZWdpc3Rl
cklEKiByZXR1cm5SZXN1bHQgPSBnZW5lcmF0b3IuZW1pdFB1dFRvU2NvcGUoc2NvcGUuZ2V0KCks
IG1faWRlbnQsIHJlc3VsdC5nZXQoKSwgVGhyb3dJZk5vdEZvdW5kLCByZXNvbHZlU2NvcGVJbmZv
KTsKKyAgICBSZWdpc3RlcklEKiByZXR1cm5SZXN1bHQgPSBnZW5lcmF0b3IuZW1pdFB1dFRvU2Nv
cGUoc2NvcGUuZ2V0KCksIHZhciwgcmVzdWx0LmdldCgpLCBUaHJvd0lmTm90Rm91bmQpOwogICAg
IGlmIChnZW5lcmF0b3Iudm0oKS0+dHlwZVByb2ZpbGVyKCkpIHsKLSAgICAgICAgZ2VuZXJhdG9y
LmVtaXRQcm9maWxlVHlwZShyZXN1bHQuZ2V0KCksIHJlc29sdmVTY29wZUluZm8uaXNMb2NhbCgp
ID8gUHJvZmlsZVR5cGVCeXRlY29kZVB1dFRvTG9jYWxTY29wZSA6IFByb2ZpbGVUeXBlQnl0ZWNv
ZGVQdXRUb1Njb3BlLCAmbV9pZGVudCk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZVR5
cGUocmVzdWx0LmdldCgpLCB2YXIuaXNSZXNvbHZlZCgpID8gUHJvZmlsZVR5cGVCeXRlY29kZVB1
dFRvTG9jYWxTY29wZSA6IFByb2ZpbGVUeXBlQnl0ZWNvZGVQdXRUb1Njb3BlLCAmbV9pZGVudCk7
CiAgICAgICAgIGdlbmVyYXRvci5lbWl0VHlwZVByb2ZpbGVyRXhwcmVzc2lvbkluZm8oZGl2b3RT
dGFydCgpLCBkaXZvdEVuZCgpKTsKICAgICB9CiAgICAgcmV0dXJuIHJldHVyblJlc3VsdDsKQEAg
LTE1NzAsMzYgKzE1NzAsMzYgQEAgUmVnaXN0ZXJJRCogUmVhZE1vZGlmeVJlc29sdmVOb2RlOjpl
bWl0QgogCiBSZWdpc3RlcklEKiBBc3NpZ25SZXNvbHZlTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVj
b2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsKLSAgICBpZiAoTG9j
YWwgbG9jYWwgPSBnZW5lcmF0b3IubG9jYWwobV9pZGVudCkpIHsKLSAgICAgICAgaWYgKGxvY2Fs
LmlzUmVhZE9ubHkoKSkgeworICAgIFZhcmlhYmxlIHZhciA9IGdlbmVyYXRvci52YXJpYWJsZSht
X2luZGV0KTsKKyAgICBpZiAoUmVnaXN0ZXJJRCogbG9jYWwgPSB2YXIubG9jYWwoKSkgeworICAg
ICAgICBpZiAodmFyLmlzUmVhZE9ubHkoKSkgewogICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRS
ZWFkT25seUV4Y2VwdGlvbklmTmVlZGVkKCk7CiAgICAgICAgICAgICByZXR1cm4gZ2VuZXJhdG9y
LmVtaXROb2RlKGRzdCwgbV9yaWdodCk7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGxvY2FsLmlz
U3BlY2lhbCgpIHx8IGdlbmVyYXRvci52bSgpLT50eXBlUHJvZmlsZXIoKSkgeworICAgICAgICBp
ZiAodmFyLmlzU3BlY2lhbCgpIHx8IGdlbmVyYXRvci52bSgpLT50eXBlUHJvZmlsZXIoKSkgewog
ICAgICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHRlbXBEc3QgPSBnZW5lcmF0b3IudGVtcERl
c3RpbmF0aW9uKGRzdCk7CiAgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdE5vZGUodGVtcERzdC5n
ZXQoKSwgbV9yaWdodCk7Ci0gICAgICAgICAgICBnZW5lcmF0b3IuZW1pdE1vdmUobG9jYWwuZ2V0
KCksIHRlbXBEc3QuZ2V0KCkpOwotICAgICAgICAgICAgZ2VuZXJhdG9yLmludmFsaWRhdGVGb3JJ
bkNvbnRleHRGb3JMb2NhbChsb2NhbC5nZXQoKSk7CisgICAgICAgICAgICBnZW5lcmF0b3IuZW1p
dE1vdmUobG9jYWwsIHRlbXBEc3QuZ2V0KCkpOworICAgICAgICAgICAgZ2VuZXJhdG9yLmludmFs
aWRhdGVGb3JJbkNvbnRleHRGb3JMb2NhbChsb2NhbCk7CiAgICAgICAgICAgICBpZiAoZ2VuZXJh
dG9yLnZtKCktPnR5cGVQcm9maWxlcigpKQogICAgICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0
VHlwZVByb2ZpbGVyRXhwcmVzc2lvbkluZm8oZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKICAg
ICAgICAgICAgIHJldHVybiBnZW5lcmF0b3IubW92ZVRvRGVzdGluYXRpb25JZk5lZWRlZChkc3Qs
IHRlbXBEc3QuZ2V0KCkpOwogICAgICAgICB9Ci0gICAgICAgIFJlZ2lzdGVySUQqIHJlc3VsdCA9
IGdlbmVyYXRvci5lbWl0Tm9kZShsb2NhbC5nZXQoKSwgbV9yaWdodCk7Ci0gICAgICAgIGdlbmVy
YXRvci5pbnZhbGlkYXRlRm9ySW5Db250ZXh0Rm9yTG9jYWwobG9jYWwuZ2V0KCkpOworICAgICAg
ICBSZWdpc3RlcklEKiByZXN1bHQgPSBnZW5lcmF0b3IuZW1pdE5vZGUobG9jYWwsIG1fcmlnaHQp
OworICAgICAgICBnZW5lcmF0b3IuaW52YWxpZGF0ZUZvckluQ29udGV4dEZvckxvY2FsKGxvY2Fs
KTsKICAgICAgICAgcmV0dXJuIGdlbmVyYXRvci5tb3ZlVG9EZXN0aW5hdGlvbklmTmVlZGVkKGRz
dCwgcmVzdWx0KTsKICAgICB9CiAKICAgICBpZiAoZ2VuZXJhdG9yLmlzU3RyaWN0TW9kZSgpKQog
ICAgICAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCksIGRpdm90U3RhcnQo
KSwgZGl2b3RFbmQoKSk7Ci0gICAgUmVzb2x2ZVNjb3BlSW5mbyByZXNvbHZlU2NvcGVJbmZvOwot
ICAgIFJlZlB0cjxSZWdpc3RlcklEPiBzY29wZSA9IGdlbmVyYXRvci5lbWl0UmVzb2x2ZVNjb3Bl
KG51bGxwdHIsIG1faWRlbnQsIHJlc29sdmVTY29wZUluZm8pOworICAgIFJlZlB0cjxSZWdpc3Rl
cklEPiBzY29wZSA9IGdlbmVyYXRvci5lbWl0UmVzb2x2ZVNjb3BlKG51bGxwdHIsIHZhcik7CiAg
ICAgaWYgKGRzdCA9PSBnZW5lcmF0b3IuaWdub3JlZFJlc3VsdCgpKQogICAgICAgICBkc3QgPSAw
OwogICAgIFJlZlB0cjxSZWdpc3RlcklEPiByZXN1bHQgPSBnZW5lcmF0b3IuZW1pdE5vZGUoZHN0
LCBtX3JpZ2h0KTsKICAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCksIGRp
dm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7Ci0gICAgUmVnaXN0ZXJJRCogcmV0dXJuUmVzdWx0ID0g
Z2VuZXJhdG9yLmVtaXRQdXRUb1Njb3BlKHNjb3BlLmdldCgpLCBtX2lkZW50LCByZXN1bHQuZ2V0
KCksIGdlbmVyYXRvci5pc1N0cmljdE1vZGUoKSA/IFRocm93SWZOb3RGb3VuZCA6IERvTm90VGhy
b3dJZk5vdEZvdW5kLCByZXNvbHZlU2NvcGVJbmZvKTsKKyAgICBSZWdpc3RlcklEKiByZXR1cm5S
ZXN1bHQgPSBnZW5lcmF0b3IuZW1pdFB1dFRvU2NvcGUoc2NvcGUuZ2V0KCksIHZhciwgcmVzdWx0
LmdldCgpLCBnZW5lcmF0b3IuaXNTdHJpY3RNb2RlKCkgPyBUaHJvd0lmTm90Rm91bmQgOiBEb05v
dFRocm93SWZOb3RGb3VuZCk7CiAgICAgaWYgKGdlbmVyYXRvci52bSgpLT50eXBlUHJvZmlsZXIo
KSkgewotICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlKHJlc3VsdC5nZXQoKSwgcmVz
b2x2ZVNjb3BlSW5mby5pc0xvY2FsKCkgPyBQcm9maWxlVHlwZUJ5dGVjb2RlUHV0VG9Mb2NhbFNj
b3BlIDogUHJvZmlsZVR5cGVCeXRlY29kZVB1dFRvU2NvcGUsICZtX2lkZW50KTsKKyAgICAgICAg
Z2VuZXJhdG9yLmVtaXRQcm9maWxlVHlwZShyZXN1bHQuZ2V0KCksIHZhci5pc1Jlc29sdmVkKCkg
PyBQcm9maWxlVHlwZUJ5dGVjb2RlUHV0VG9Mb2NhbFNjb3BlIDogUHJvZmlsZVR5cGVCeXRlY29k
ZVB1dFRvU2NvcGUsICZtX2lkZW50KTsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRUeXBlUHJvZmls
ZXJFeHByZXNzaW9uSW5mbyhkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwogICAgIH0gCiAgICAg
cmV0dXJuIHJldHVyblJlc3VsdDsKQEAgLTE3MDgsMTggKzE3MDgsMTkgQEAgUmVnaXN0ZXJJRCog
Q29tbWFOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZQogUmVnaXN0ZXJJRCogQ29uc3REZWNsTm9kZTo6
ZW1pdENvZGVTaW5nbGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvcikKIHsKICAgICAvLyBG
SVhNRTogVGhpcyBjb2RlIGRvZXMgbm90IG1hdGNoIHRoZSBiZWhhdmlvciBvZiBjb25zdCBpbiBG
aXJlZm94LgotICAgIGlmIChMb2NhbCBsb2NhbCA9IGdlbmVyYXRvci5jb25zdExvY2FsKG1faWRl
bnQpKSB7CisgICAgVmFyaWFibGUgdmFyID0gZ2VuZXJhdG9yLnZhcmlhYmxlKG1faWRlbnQpOwor
ICAgIGlmIChSZWdpc3RlcklEKiBsb2NhbCA9IHZhci5sb2NhbCgpKSB7CiAgICAgICAgIGlmICgh
bV9pbml0KQotICAgICAgICAgICAgcmV0dXJuIGxvY2FsLmdldCgpOworICAgICAgICAgICAgcmV0
dXJuIGxvY2FsOwogCiAgICAgICAgIC8vIEZJWE1FOiBNYXliZSBjYWxsIGVtaXRFeHByZXNzaW9u
SW5mbyBoZXJlLgotICAgICAgICBpZiAobG9jYWwuaXNTcGVjaWFsKCkgfHwgZ2VuZXJhdG9yLnZt
KCktPnR5cGVQcm9maWxlcigpKSB7CisgICAgICAgIGlmICh2YXIuaXNTcGVjaWFsKCkgfHwgZ2Vu
ZXJhdG9yLnZtKCktPnR5cGVQcm9maWxlcigpKSB7CiAgICAgICAgICAgICBSZWZQdHI8UmVnaXN0
ZXJJRD4gdGVtcERzdCA9IGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKTsKICAgICAgICAgICAgIGdl
bmVyYXRvci5lbWl0Tm9kZSh0ZW1wRHN0LmdldCgpLCBtX2luaXQpOwotICAgICAgICAgICAgcmV0
dXJuIGdlbmVyYXRvci5lbWl0TW92ZShsb2NhbC5nZXQoKSwgdGVtcERzdC5nZXQoKSk7CisgICAg
ICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRNb3ZlKGxvY2FsLCB0ZW1wRHN0LmdldCgpKTsK
ICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0Tm9kZShs
b2NhbC5nZXQoKSwgbV9pbml0KTsKKyAgICAgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0Tm9kZShs
b2NhbCwgbV9pbml0KTsKICAgICB9CiAKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gdmFsdWUgPSBt
X2luaXQgPyBnZW5lcmF0b3IuZW1pdE5vZGUobV9pbml0KSA6IGdlbmVyYXRvci5lbWl0TG9hZCgw
LCBqc1VuZGVmaW5lZCgpKTsKQEAgLTE3MjgsMTggKzE3MjksMTYgQEAgUmVnaXN0ZXJJRCogQ29u
c3REZWNsTm9kZTo6ZW1pdENvZGVTaW5nbAogICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRJ
bml0R2xvYmFsQ29uc3QobV9pZGVudCwgdmFsdWUuZ2V0KCkpOwogCiAgICAgaWYgKGdlbmVyYXRv
ci5jb2RlVHlwZSgpICE9IEV2YWxDb2RlKSB7Ci0KLSAgICAgICAgUmVzb2x2ZVNjb3BlSW5mbyBy
ZXNvbHZlU2NvcGVJbmZvOwotICAgICAgICBpZiAoUmVmUHRyPFJlZ2lzdGVySUQ+IHNjb3BlID0g
Z2VuZXJhdG9yLmVtaXRSZXNvbHZlQ29uc3RhbnRMb2NhbChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5
KCksIG1faWRlbnQsIHJlc29sdmVTY29wZUluZm8pKQotICAgICAgICAgICAgcmV0dXJuIGdlbmVy
YXRvci5lbWl0UHV0VG9TY29wZShzY29wZS5nZXQoKSwgbV9pZGVudCwgdmFsdWUuZ2V0KCksIERv
Tm90VGhyb3dJZk5vdEZvdW5kLCByZXNvbHZlU2NvcGVJbmZvKTsKLQotICAgICAgICByZXR1cm4g
dmFsdWUuZ2V0KCk7CisgICAgICAgIGlmICghdmFyLmlzUmVzb2x2ZWQoKSkKKyAgICAgICAgICAg
IHJldHVybiB2YWx1ZS5nZXQoKTsKKyAgICAgICAgCisgICAgICAgIFJlZlB0cjxSZWdpc3RlcklE
PiBzY29wZSA9IGdlbmVyYXRvci5lbWl0UmVzb2x2ZVNjb3BlKGdlbmVyYXRvci5uZXdUZW1wb3Jh
cnkoKSwgdmFyKTsKKyAgICAgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0UHV0VG9TY29wZShzY29w
ZS5nZXQoKSwgdmFyLCB2YWx1ZS5nZXQoKSwgRG9Ob3RUaHJvd0lmTm90Rm91bmQpOwogICAgIH0K
IAogICAgIC8vIEZJWE1FOiBUaGlzIHdpbGwgcmVzdWx0IGluIGluY29ycmVjdCBhc3NpZ25tZW50
IGlmIG1faWRlbnQgZXhpc3RzIGluIGFuIGludGVydmVuaW5nIHdpdGggc2NvcGUuCi0gICAgUmVz
b2x2ZVNjb3BlSW5mbyByZXNvbHZlU2NvcGVJbmZvOwotICAgIFJlZlB0cjxSZWdpc3RlcklEPiBz
Y29wZSA9IGdlbmVyYXRvci5lbWl0UmVzb2x2ZVNjb3BlKG51bGxwdHIsIG1faWRlbnQsIHJlc29s
dmVTY29wZUluZm8pOwotICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdFB1dFRvU2NvcGUoc2NvcGUu
Z2V0KCksIG1faWRlbnQsIHZhbHVlLmdldCgpLCBEb05vdFRocm93SWZOb3RGb3VuZCwgcmVzb2x2
ZVNjb3BlSW5mbyk7CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHNjb3BlID0gZ2VuZXJhdG9yLmVt
aXRSZXNvbHZlU2NvcGUobnVsbHB0ciwgdmFyKTsKKyAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRQ
dXRUb1Njb3BlKHNjb3BlLmdldCgpLCB2YXIsIHZhbHVlLmdldCgpLCBEb05vdFRocm93SWZOb3RG
b3VuZCk7CiB9CiAKIFJlZ2lzdGVySUQqIENvbnN0RGVjbE5vZGU6OmVtaXRCeXRlY29kZShCeXRl
Y29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKikKQEAgLTE4MzEsMTMgKzE4MzAs
MTMgQEAgUmVnaXN0ZXJJRCogRW1wdHlWYXJFeHByZXNzaW9uOjplbWl0Qnl0ZQogICAgIGlmICgh
Z2VuZXJhdG9yLnZtKCktPnR5cGVQcm9maWxlcigpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
IAotICAgIGlmIChMb2NhbCBsb2NhbCA9IGdlbmVyYXRvci5sb2NhbChtX2lkZW50KSkKLSAgICAg
ICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlVHlwZShsb2NhbC5nZXQoKSwgUHJvZmlsZVR5cGVCeXRl
Y29kZUhhc0dsb2JhbElELCBudWxscHRyKTsKKyAgICBWYXJpYWJsZSB2YXIgPSBnZW5lcmF0b3Iu
dmFyaWFibGUobV9pZGVudCk7CisgICAgaWYgKFJlZ2lzdGVySUQqIGxvY2FsID0gdmFyLmxvY2Fs
KCkpCisgICAgICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZVR5cGUobG9jYWwsIFByb2ZpbGVUeXBl
Qnl0ZWNvZGVIYXNHbG9iYWxJRCwgbnVsbHB0cik7CiAgICAgZWxzZSB7Ci0gICAgICAgIFJlc29s
dmVTY29wZUluZm8gcmVzb2x2ZVNjb3BlSW5mbzsKLSAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+
IHNjb3BlID0gZ2VuZXJhdG9yLmVtaXRSZXNvbHZlU2NvcGUobnVsbHB0ciwgbV9pZGVudCwgcmVz
b2x2ZVNjb3BlSW5mbyk7Ci0gICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiB2YWx1ZSA9IGdlbmVy
YXRvci5lbWl0R2V0RnJvbVNjb3BlKGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgc2NvcGUuZ2V0
KCksIG1faWRlbnQsIERvTm90VGhyb3dJZk5vdEZvdW5kLCByZXNvbHZlU2NvcGVJbmZvKTsKLSAg
ICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlVHlwZSh2YWx1ZS5nZXQoKSwgcmVzb2x2ZVNjb3Bl
SW5mby5pc0xvY2FsKCkgPyBQcm9maWxlVHlwZUJ5dGVjb2RlR2V0RnJvbUxvY2FsU2NvcGUgOiBQ
cm9maWxlVHlwZUJ5dGVjb2RlR2V0RnJvbVNjb3BlLCAmbV9pZGVudCk7CisgICAgICAgIFJlZlB0
cjxSZWdpc3RlcklEPiBzY29wZSA9IGdlbmVyYXRvci5lbWl0UmVzb2x2ZVNjb3BlKG51bGxwdHIs
IHZhcik7CisgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiB2YWx1ZSA9IGdlbmVyYXRvci5lbWl0
R2V0RnJvbVNjb3BlKGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgc2NvcGUuZ2V0KCksIHZhciwg
RG9Ob3RUaHJvd0lmTm90Rm91bmQpOworICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBl
KHZhbHVlLmdldCgpLCByZXNvbHZlU2NvcGVJbmZvLmlzUmVzb2x2ZWQoKSA/IFByb2ZpbGVUeXBl
Qnl0ZWNvZGVHZXRGcm9tTG9jYWxTY29wZSA6IFByb2ZpbGVUeXBlQnl0ZWNvZGVHZXRGcm9tU2Nv
cGUsICZtX2lkZW50KTsKICAgICB9CiAKICAgICBnZW5lcmF0b3IuZW1pdFR5cGVQcm9maWxlckV4
cHJlc3Npb25JbmZvKHBvc2l0aW9uKCksIEpTVGV4dFBvc2l0aW9uKC0xLCBwb3NpdGlvbigpLm9m
ZnNldCArIG1faWRlbnQubGVuZ3RoKCksIC0xKSk7CkBAIC0yMDA3LDggKzIwMDYsNyBAQCBSZWdp
c3RlcklEKiBGb3JJbk5vZGU6OnRyeUdldEJvdW5kTG9jYWwoCiB7CiAgICAgaWYgKG1fbGV4cHIt
PmlzUmVzb2x2ZU5vZGUoKSkgewogICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IHN0
YXRpY19jYXN0PFJlc29sdmVOb2RlKj4obV9sZXhwciktPmlkZW50aWZpZXIoKTsKLSAgICAgICAg
TG9jYWwgbG9jYWwgPSBnZW5lcmF0b3IubG9jYWwoaWRlbnQpOwotICAgICAgICByZXR1cm4gbG9j
YWwuZ2V0KCk7CisgICAgICAgIHJldHVybiBnZW5lcmF0b3IudmFyaWFibGUoaWRlbnQpLmxvY2Fs
KCk7CiAgICAgfQogCiAgICAgaWYgKG1fbGV4cHItPmlzRGVjb25zdHJ1Y3Rpb25Ob2RlKCkpIHsK
QEAgLTIwMTksMTAgKzIwMTcsMTAgQEAgUmVnaXN0ZXJJRCogRm9ySW5Ob2RlOjp0cnlHZXRCb3Vu
ZExvY2FsKAogCiAgICAgICAgIGF1dG8gc2ltcGxlQmluZGluZyA9IHN0YXRpY19jYXN0PEJpbmRp
bmdOb2RlKj4oYmluZGluZyk7CiAgICAgICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gc2lt
cGxlQmluZGluZy0+Ym91bmRQcm9wZXJ0eSgpOwotICAgICAgICBMb2NhbCBsb2NhbCA9IGdlbmVy
YXRvci5sb2NhbChpZGVudCk7Ci0gICAgICAgIGlmIChsb2NhbC5pc1NwZWNpYWwoKSkKKyAgICAg
ICAgVmFyaWFibGUgdmFyID0gZ2VuZXJhdG9yLnZhcmlhYmxlKGlkZW50KTsKKyAgICAgICAgaWYg
KHZhci5pc1NwZWNpYWwoKSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICBy
ZXR1cm4gbG9jYWwuZ2V0KCk7CisgICAgICAgIHJldHVybiB2YXIubG9jYWwoKTsKICAgICB9CiAK
ICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTIwMzIsMTggKzIwMzAsMTcgQEAgdm9pZCBGb3JJbk5v
ZGU6OmVtaXRMb29wSGVhZGVyKEJ5dGVjb2RlRwogewogICAgIGlmIChtX2xleHByLT5pc1Jlc29s
dmVOb2RlKCkpIHsKICAgICAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBzdGF0aWNfY2Fz
dDxSZXNvbHZlTm9kZSo+KG1fbGV4cHIpLT5pZGVudGlmaWVyKCk7Ci0gICAgICAgIExvY2FsIGxv
Y2FsID0gZ2VuZXJhdG9yLmxvY2FsKGlkZW50KTsKLSAgICAgICAgaWYgKGxvY2FsLmdldCgpKQot
ICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRNb3ZlKGxvY2FsLmdldCgpLCBwcm9wZXJ0eU5hbWUp
OworICAgICAgICBWYXJpYWJsZSB2YXIgPSBnZW5lcmF0b3IudmFyaWFibGUoaWRlbnQpOworICAg
ICAgICBpZiAoUmVnaXN0ZXJJRCogbG9jYWwgPSB2YXIubG9jYWwoKSkKKyAgICAgICAgICAgIGdl
bmVyYXRvci5lbWl0TW92ZShsb2NhbCwgcHJvcGVydHlOYW1lKTsKICAgICAgICAgZWxzZSB7CiAg
ICAgICAgICAgICBpZiAoZ2VuZXJhdG9yLmlzU3RyaWN0TW9kZSgpKQogICAgICAgICAgICAgICAg
IGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZv
dEVuZCgpKTsKLSAgICAgICAgICAgIFJlc29sdmVTY29wZUluZm8gcmVzb2x2ZVNjb3BlSW5mbzsK
LSAgICAgICAgICAgIFJlZ2lzdGVySUQqIHNjb3BlID0gZ2VuZXJhdG9yLmVtaXRSZXNvbHZlU2Nv
cGUobnVsbHB0ciwgaWRlbnQsIHJlc29sdmVTY29wZUluZm8pOworICAgICAgICAgICAgUmVnaXN0
ZXJJRCogc2NvcGUgPSBnZW5lcmF0b3IuZW1pdFJlc29sdmVTY29wZShudWxscHRyLCB2YXIpOwog
ICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgpLCBkaXZvdFN0
YXJ0KCksIGRpdm90RW5kKCkpOwotICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRQdXRUb1Njb3Bl
KHNjb3BlLCBpZGVudCwgcHJvcGVydHlOYW1lLCBnZW5lcmF0b3IuaXNTdHJpY3RNb2RlKCkgPyBU
aHJvd0lmTm90Rm91bmQgOiBEb05vdFRocm93SWZOb3RGb3VuZCwgcmVzb2x2ZVNjb3BlSW5mbyk7
CisgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdFB1dFRvU2NvcGUoc2NvcGUsIHZhciwgcHJvcGVy
dHlOYW1lLCBnZW5lcmF0b3IuaXNTdHJpY3RNb2RlKCkgPyBUaHJvd0lmTm90Rm91bmQgOiBEb05v
dFRocm93SWZOb3RGb3VuZCk7CiAgICAgICAgICAgICBpZiAoZ2VuZXJhdG9yLnZtKCktPnR5cGVQ
cm9maWxlcigpKQotICAgICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZVR5cGUocHJv
cGVydHlOYW1lLCByZXNvbHZlU2NvcGVJbmZvLmlzTG9jYWwoKSA/IFByb2ZpbGVUeXBlQnl0ZWNv
ZGVQdXRUb0xvY2FsU2NvcGUgOiBQcm9maWxlVHlwZUJ5dGVjb2RlUHV0VG9TY29wZSwgJmlkZW50
KTsKKyAgICAgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlKHByb3BlcnR5TmFt
ZSwgdmFyLmlzUmVzb2x2ZWQoKSA/IFByb2ZpbGVUeXBlQnl0ZWNvZGVQdXRUb0xvY2FsU2NvcGUg
OiBQcm9maWxlVHlwZUJ5dGVjb2RlUHV0VG9TY29wZSwgJmlkZW50KTsKICAgICAgICAgfQogICAg
ICAgICBpZiAoZ2VuZXJhdG9yLnZtKCktPnR5cGVQcm9maWxlcigpKQogICAgICAgICAgICAgZ2Vu
ZXJhdG9yLmVtaXRUeXBlUHJvZmlsZXJFeHByZXNzaW9uSW5mbyhtX2xleHByLT5wb3NpdGlvbigp
LCBKU1RleHRQb3NpdGlvbigtMSwgbV9sZXhwci0+cG9zaXRpb24oKS5vZmZzZXQgKyBpZGVudC5s
ZW5ndGgoKSwgLTEpKTsKQEAgLTIwODQsMTIgKzIwODEsMTIgQEAgdm9pZCBGb3JJbk5vZGU6OmVt
aXRMb29wSGVhZGVyKEJ5dGVjb2RlRwogCiAgICAgICAgIGF1dG8gc2ltcGxlQmluZGluZyA9IHN0
YXRpY19jYXN0PEJpbmRpbmdOb2RlKj4oYmluZGluZyk7CiAgICAgICAgIGNvbnN0IElkZW50aWZp
ZXImIGlkZW50ID0gc2ltcGxlQmluZGluZy0+Ym91bmRQcm9wZXJ0eSgpOwotICAgICAgICBMb2Nh
bCBsb2NhbCA9IGdlbmVyYXRvci5sb2NhbChpZGVudCk7Ci0gICAgICAgIGlmICghbG9jYWwuZ2V0
KCkgfHwgbG9jYWwuaXNTcGVjaWFsKCkpIHsKKyAgICAgICAgVmFyaWFibGUgdmFyID0gZ2VuZXJh
dG9yLnZhcmlhYmxlKGlkZW50KTsKKyAgICAgICAgaWYgKCF2YXIubG9jYWwoKSB8fCB2YXIuaXNT
cGVjaWFsKCkpIHsKICAgICAgICAgICAgIGFzc2lnbk5vZGUtPmJpbmRpbmdzKCktPmJpbmRWYWx1
ZShnZW5lcmF0b3IsIHByb3BlcnR5TmFtZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRNb3ZlKGxvY2FsLmdldCgpLCBwcm9wZXJ0eU5hbWUp
OworICAgICAgICBnZW5lcmF0b3IuZW1pdE1vdmUodmFyLmxvY2FsKCksIHByb3BlcnR5TmFtZSk7
CiAgICAgICAgIGlmIChnZW5lcmF0b3Iudm0oKS0+dHlwZVByb2ZpbGVyKCkpCiAgICAgICAgICAg
ICBnZW5lcmF0b3IuZW1pdFR5cGVQcm9maWxlckV4cHJlc3Npb25JbmZvKHNpbXBsZUJpbmRpbmct
PmRpdm90U3RhcnQoKSwgc2ltcGxlQmluZGluZy0+ZGl2b3RFbmQoKSk7CiAgICAgICAgIHJldHVy
bjsKQEAgLTIyNTcsMTcgKzIyNTQsMTcgQEAgdm9pZCBGb3JPZk5vZGU6OmVtaXRCeXRlY29kZShC
eXRlY29kZUdlbgogICAgIHsKICAgICAgICAgaWYgKG1fbGV4cHItPmlzUmVzb2x2ZU5vZGUoKSkg
ewogICAgICAgICAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBzdGF0aWNfY2FzdDxSZXNv
bHZlTm9kZSo+KG1fbGV4cHIpLT5pZGVudGlmaWVyKCk7Ci0gICAgICAgICAgICBpZiAoTG9jYWwg
bG9jYWwgPSBnZW5lcmF0b3IubG9jYWwoaWRlbnQpKQotICAgICAgICAgICAgICAgIGdlbmVyYXRv
ci5lbWl0TW92ZShsb2NhbC5nZXQoKSwgdmFsdWUpOworICAgICAgICAgICAgVmFyaWFibGUgdmFy
ID0gZ2VuZXJhdG9yLnZhcmlhYmxlKGlkZW50KTsKKyAgICAgICAgICAgIGlmIChSZWdpc3RlcklE
KiBsb2NhbCA9IHZhci5sb2NhbCgpKQorICAgICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0TW92
ZShsb2NhbCwgdmFsdWUpOwogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgaWYg
KGdlbmVyYXRvci5pc1N0cmljdE1vZGUoKSkKICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdG9y
LmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwot
ICAgICAgICAgICAgICAgIFJlc29sdmVTY29wZUluZm8gcmVzb2x2ZVNjb3BlSW5mbzsKLSAgICAg
ICAgICAgICAgICBSZWdpc3RlcklEKiBzY29wZSA9IGdlbmVyYXRvci5lbWl0UmVzb2x2ZVNjb3Bl
KG51bGxwdHIsIGlkZW50LCByZXNvbHZlU2NvcGVJbmZvKTsKKyAgICAgICAgICAgICAgICBSZWdp
c3RlcklEKiBzY29wZSA9IGdlbmVyYXRvci5lbWl0UmVzb2x2ZVNjb3BlKG51bGxwdHIsIHZhcik7
CiAgICAgICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgpLCBk
aXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwotICAgICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0
UHV0VG9TY29wZShzY29wZSwgaWRlbnQsIHZhbHVlLCBnZW5lcmF0b3IuaXNTdHJpY3RNb2RlKCkg
PyBUaHJvd0lmTm90Rm91bmQgOiBEb05vdFRocm93SWZOb3RGb3VuZCwgcmVzb2x2ZVNjb3BlSW5m
byk7CisgICAgICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRQdXRUb1Njb3BlKHNjb3BlLCB2YXIs
IHZhbHVlLCBnZW5lcmF0b3IuaXNTdHJpY3RNb2RlKCkgPyBUaHJvd0lmTm90Rm91bmQgOiBEb05v
dFRocm93SWZOb3RGb3VuZCk7CiAgICAgICAgICAgICAgICAgaWYgKGdlbmVyYXRvci52bSgpLT50
eXBlUHJvZmlsZXIoKSkKLSAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxl
VHlwZSh2YWx1ZSwgcmVzb2x2ZVNjb3BlSW5mby5pc0xvY2FsKCkgPyBQcm9maWxlVHlwZUJ5dGVj
b2RlUHV0VG9Mb2NhbFNjb3BlIDogUHJvZmlsZVR5cGVCeXRlY29kZVB1dFRvU2NvcGUsICZpZGVu
dCk7CisgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZVR5cGUodmFsdWUs
IHZhci5pc1Jlc29sdmVkKCkgPyBQcm9maWxlVHlwZUJ5dGVjb2RlUHV0VG9Mb2NhbFNjb3BlIDog
UHJvZmlsZVR5cGVCeXRlY29kZVB1dFRvU2NvcGUsICZpZGVudCk7CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICBpZiAoZ2VuZXJhdG9yLnZtKCktPnR5cGVQcm9maWxlcigpKQogICAgICAgICAg
ICAgICAgIGdlbmVyYXRvci5lbWl0VHlwZVByb2ZpbGVyRXhwcmVzc2lvbkluZm8obV9sZXhwci0+
cG9zaXRpb24oKSwgSlNUZXh0UG9zaXRpb24oLTEsIG1fbGV4cHItPnBvc2l0aW9uKCkub2Zmc2V0
ICsgaWRlbnQubGVuZ3RoKCksIC0xKSk7CkBAIC0yODUyLDI0ICsyODQ5LDYgQEAgdm9pZCBBcnJh
eVBhdHRlcm5Ob2RlOjpiaW5kVmFsdWUoQnl0ZWNvZAogCiBSZWdpc3RlcklEKiBBcnJheVBhdHRl
cm5Ob2RlOjplbWl0RGlyZWN0QmluZGluZyhCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBS
ZWdpc3RlcklEKiBkc3QsIEV4cHJlc3Npb25Ob2RlKiByaHMpCiB7Ci0gICAgaWYgKHJocy0+aXNS
ZXNvbHZlTm9kZSgpCi0gICAgICAgICYmIGdlbmVyYXRvci53aWxsUmVzb2x2ZVRvQXJndW1lbnRz
UmVnaXN0ZXIoc3RhdGljX2Nhc3Q8UmVzb2x2ZU5vZGUqPihyaHMpLT5pZGVudGlmaWVyKCkpCi0g
ICAgICAgICYmIGdlbmVyYXRvci5oYXNTYWZlTG9jYWxBcmd1bWVudHNSZWdpc3RlcigpJiYgIWdl
bmVyYXRvci5zeW1ib2xUYWJsZSgpLnNsb3dBcmd1bWVudHMoKSkgewotICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IG1fdGFyZ2V0UGF0dGVybnMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAg
ICAgIGF1dG8gdGFyZ2V0ID0gbV90YXJnZXRQYXR0ZXJuc1tpXTsKLSAgICAgICAgICAgIGlmICgh
dGFyZ2V0KQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gdGVtcCA9IGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKTsK
LSAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0TG9hZCh0ZW1wLmdldCgpLCBqc051bWJlcihpKSk7
Ci0gICAgICAgICAgICBnZW5lcmF0b3IuZW1pdEdldEFyZ3VtZW50QnlWYWwodGVtcC5nZXQoKSwg
Z2VuZXJhdG9yLnVuY2hlY2tlZExvY2FsQXJndW1lbnRzUmVnaXN0ZXIoKSwgdGVtcC5nZXQoKSk7
Ci0gICAgICAgICAgICB0YXJnZXQtPmJpbmRWYWx1ZShnZW5lcmF0b3IsIHRlbXAuZ2V0KCkpOwot
ICAgICAgICB9Ci0gICAgICAgIGlmIChkc3QgPT0gZ2VuZXJhdG9yLmlnbm9yZWRSZXN1bHQoKSB8
fCAhZHN0KQotICAgICAgICAgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0TG9hZChnZW5lcmF0b3Iu
ZmluYWxEZXN0aW5hdGlvbihkc3QpLCBqc1VuZGVmaW5lZCgpKTsKLSAgICAgICAgTG9jYWwgbG9j
YWwgPSBnZW5lcmF0b3IubG9jYWwoZ2VuZXJhdG9yLnZtKCktPnByb3BlcnR5TmFtZXMtPmFyZ3Vt
ZW50cyk7Ci0gICAgICAgIHJldHVybiBnZW5lcmF0b3IubW92ZVRvRGVzdGluYXRpb25JZk5lZWRl
ZChkc3QsIGxvY2FsLmdldCgpKTsKLSAgICB9CiAgICAgaWYgKCFyaHMtPmlzU2ltcGxlQXJyYXko
KSkKICAgICAgICAgcmV0dXJuIDA7CiAKQEAgLTI5NTksMjQgKzI5MzgsMjQgQEAgdm9pZCBPYmpl
Y3RQYXR0ZXJuTm9kZTo6Y29sbGVjdEJvdW5kSWRlbgogCiB2b2lkIEJpbmRpbmdOb2RlOjpiaW5k
VmFsdWUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogdmFsdWUpIGNv
bnN0CiB7Ci0gICAgaWYgKExvY2FsIGxvY2FsID0gZ2VuZXJhdG9yLmxvY2FsKG1fYm91bmRQcm9w
ZXJ0eSkpIHsKLSAgICAgICAgaWYgKGxvY2FsLmlzUmVhZE9ubHkoKSkgeworICAgIFZhcmlhYmxl
IHZhciA9IGdlbmVyYXRvci52YXJpYWJsZShtX2JvdW5kUHJvcGVydHkpOworICAgIGlmIChSZWdp
c3RlcklEKiBsb2NhbCA9IHZhci5sb2NhbCgpKSB7CisgICAgICAgIGlmICh2YXIuaXNSZWFkT25s
eSgpKSB7CiAgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdFJlYWRPbmx5RXhjZXB0aW9uSWZOZWVk
ZWQoKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBnZW5lcmF0b3Iu
ZW1pdE1vdmUobG9jYWwuZ2V0KCksIHZhbHVlKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRNb3Zl
KGxvY2FsLCB2YWx1ZSk7CiAgICAgICAgIGlmIChnZW5lcmF0b3Iudm0oKS0+dHlwZVByb2ZpbGVy
KCkpCiAgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdFR5cGVQcm9maWxlckV4cHJlc3Npb25JbmZv
KGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAg
aWYgKGdlbmVyYXRvci5pc1N0cmljdE1vZGUoKSkKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRFeHBy
ZXNzaW9uSW5mbyhkaXZvdEVuZCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwotICAgIFJl
c29sdmVTY29wZUluZm8gcmVzb2x2ZVNjb3BlSW5mbzsKLSAgICBSZWdpc3RlcklEKiBzY29wZSA9
IGdlbmVyYXRvci5lbWl0UmVzb2x2ZVNjb3BlKG51bGxwdHIsIG1fYm91bmRQcm9wZXJ0eSwgcmVz
b2x2ZVNjb3BlSW5mbyk7CisgICAgUmVnaXN0ZXJJRCogc2NvcGUgPSBnZW5lcmF0b3IuZW1pdFJl
c29sdmVTY29wZShudWxscHRyLCB2YXIpOwogICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbklu
Zm8oZGl2b3RFbmQoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKLSAgICBnZW5lcmF0b3Iu
ZW1pdFB1dFRvU2NvcGUoc2NvcGUsIG1fYm91bmRQcm9wZXJ0eSwgdmFsdWUsIGdlbmVyYXRvci5p
c1N0cmljdE1vZGUoKSA/IFRocm93SWZOb3RGb3VuZCA6IERvTm90VGhyb3dJZk5vdEZvdW5kLCBy
ZXNvbHZlU2NvcGVJbmZvKTsKKyAgICBnZW5lcmF0b3IuZW1pdFB1dFRvU2NvcGUoc2NvcGUsIHZh
ciwgdmFsdWUsIGdlbmVyYXRvci5pc1N0cmljdE1vZGUoKSA/IFRocm93SWZOb3RGb3VuZCA6IERv
Tm90VGhyb3dJZk5vdEZvdW5kKTsKICAgICBpZiAoZ2VuZXJhdG9yLnZtKCktPnR5cGVQcm9maWxl
cigpKSB7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZVR5cGUodmFsdWUsIHJlc29sdmVT
Y29wZUluZm8uaXNMb2NhbCgpID8gUHJvZmlsZVR5cGVCeXRlY29kZVB1dFRvTG9jYWxTY29wZSA6
IFByb2ZpbGVUeXBlQnl0ZWNvZGVQdXRUb1Njb3BlLCAmbV9ib3VuZFByb3BlcnR5KTsKKyAgICAg
ICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlVHlwZSh2YWx1ZSwgdmFyLmlzUmVzb2x2ZWQoKSA/IFBy
b2ZpbGVUeXBlQnl0ZWNvZGVQdXRUb0xvY2FsU2NvcGUgOiBQcm9maWxlVHlwZUJ5dGVjb2RlUHV0
VG9TY29wZSwgJm1fYm91bmRQcm9wZXJ0eSk7CiAgICAgICAgIGdlbmVyYXRvci5lbWl0VHlwZVBy
b2ZpbGVyRXhwcmVzc2lvbkluZm8oZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKICAgICB9CiAg
ICAgcmV0dXJuOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEhl
YXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0
SGVhcC5oCShyZXZpc2lvbiAxODA4NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Fic3RyYWN0SGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw2IEBAIG5hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICBtYWNybyhXb3JsZCkgXAogICAgIG1hY3JvKFN0
YWNrKSBcCiAgICAgbWFjcm8oSGVhcCkgXAotICAgIG1hY3JvKEFyZ3VtZW50c19yZWdpc3RlcnMp
IFwKICAgICBtYWNybyhCdXR0ZXJmbHlfcHVibGljTGVuZ3RoKSBcCiAgICAgbWFjcm8oQnV0dGVy
Zmx5X3ZlY3Rvckxlbmd0aCkgXAogICAgIG1hY3JvKEdldHRlclNldHRlcl9nZXR0ZXIpIFwKQEAg
LTY1LDcgKzY0LDggQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAgIG1hY3Jv
KEluZGV4ZWRDb250aWd1b3VzUHJvcGVydGllcykgXAogICAgIG1hY3JvKEluZGV4ZWRBcnJheVN0
b3JhZ2VQcm9wZXJ0aWVzKSBcCiAgICAgbWFjcm8oQXJyYXlTdG9yYWdlUHJvcGVydGllcykgXAot
ICAgIG1hY3JvKFZhcmlhYmxlcykgXAorICAgIG1hY3JvKERpcmVjdEFyZ3VtZW50c1Byb3BlcnRp
ZXMpIFwKKyAgICBtYWNybyhTY29wZWRBcmd1bWVudHNQcm9wZXJ0aWVzKSBcCiAgICAgbWFjcm8o
VHlwZWRBcnJheVByb3BlcnRpZXMpIFwKICAgICBtYWNybyhIZWFwT2JqZWN0Q291bnQpIC8qIFVz
ZWQgdG8gcmVmbGVjdCB0aGUgZmFjdCB0aGF0IHNvbWUgYWxsb2NhdGlvbnMgcmV2ZWFsIG9iamVj
dCBpZGVudGl0eSAqL1wKICAgICBtYWNybyhSZWdFeHBTdGF0ZSkgXApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklu
bGluZXMuaAkocmV2aXNpb24gMTgwODc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDMwLDcg
KzEwMzAsOCBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAg
ICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChtX2dyYXBo
LCBtX2dyYXBoLm1fdm0uc3RyaW5nU3RydWN0dXJlLmdldCgpKTsKICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6CisgICAgICAgIGNhc2UgQXJyYXk6OkRp
cmVjdEFyZ3VtZW50czoKKyAgICAgICAgY2FzZSBBcnJheTo6U2NvcGVkQXJndW1lbnRzOgogICAg
ICAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlSGVhcFRvcCgpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGNhc2UgQXJyYXk6OkludDMyOgpAQCAtMTYxNyw4ICsxNjE4LDExIEBAIGJvb2wg
QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgY2FzZSBBcnJheTo6
QXJyYXlTdG9yYWdlOgogICAgICAgICBjYXNlIEFycmF5OjpTbG93UHV0QXJyYXlTdG9yYWdlOgog
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czoKLSAgICAg
ICAgICAgIGZpbHRlcihub2RlLT5jaGlsZDEoKSwgU3BlY0FyZ3VtZW50cyk7CisgICAgICAgIGNh
c2UgQXJyYXk6OkRpcmVjdEFyZ3VtZW50czoKKyAgICAgICAgICAgIGZpbHRlcihub2RlLT5jaGls
ZDEoKSwgU3BlY0RpcmVjdEFyZ3VtZW50cyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBBcnJheTo6U2NvcGVkQXJndW1lbnRzOgorICAgICAgICAgICAgZmlsdGVyKG5vZGUtPmNo
aWxkMSgpLCBTcGVjU2NvcGVkQXJndW1lbnRzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICBjYXNlIEFycmF5OjpJbnQ4QXJyYXk6CiAgICAgICAgICAgICBmaWx0ZXIobm9kZS0+Y2hpbGQx
KCksIFNwZWNJbnQ4QXJyYXkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
cnJheU1vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QXJyYXlNb2RlLmNwcAkocmV2aXNpb24gMTgwODc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBcnJheU1vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTcsOCArMTk3LDE1IEBA
IEFycmF5TW9kZSBBcnJheU1vZGU6OnJlZmluZSgKICAgICAgICAgaWYgKGlzU3RyaW5nU3BlY3Vs
YXRpb24oYmFzZSkpCiAgICAgICAgICAgICByZXR1cm4gd2l0aFR5cGUoQXJyYXk6OlN0cmluZyk7
CiAgICAgICAgIAotICAgICAgICBpZiAoaXNBcmd1bWVudHNTcGVjdWxhdGlvbihiYXNlKSkKLSAg
ICAgICAgICAgIHJldHVybiB3aXRoVHlwZShBcnJheTo6QXJndW1lbnRzKTsKKyAgICAgICAgaWYg
KGlzRGlyZWN0QXJndW1lbnRzU3BlY3VsYXRpb24oYmFzZSkgfHwgaXNTY29wZWRBcmd1bWVudHNT
cGVjdWxhdGlvbihiYXNlKSkgeworICAgICAgICAgICAgLy8gSGFuZGxlIG91dC1vZi1ib3VuZHMg
YWNjZXNzZXMgYXMgZ2VuZXJpYyBhY2Nlc3Nlcy4KKyAgICAgICAgICAgIGlmIChncmFwaC5oYXNF
eGl0U2l0ZShub2RlLT5vcmlnaW4uc2VtYW50aWMsIE91dE9mQm91bmRzKSB8fCAhaXNJbkJvdW5k
cygpKQorICAgICAgICAgICAgICAgIHJldHVybiBBcnJheU1vZGUoQXJyYXk6OkdlbmVyaWMpOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoaXNEaXJlY3RBcmd1bWVudHNTcGVjdWxhdGlv
bihiYXNlKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gd2l0aFR5cGUoQXJyYXk6OkRpcmVjdEFy
Z3VtZW50cyk7CisgICAgICAgICAgICByZXR1cm4gd2l0aFR5cGUoQXJyYXk6OlNjb3BlZEFyZ3Vt
ZW50cyk7CisgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIEFycmF5TW9kZSByZXN1bHQ7CiAg
ICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewpAQCAtMzk2LDggKzQwMywxMSBAQCBib29sIEFy
cmF5TW9kZTo6YWxyZWFkeUNoZWNrZWQoR3JhcGgmIGdyCiAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICAgICAgfSB9CiAgICAgICAgIAotICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czoKLSAg
ICAgICAgcmV0dXJuIHNwZWN1bGF0aW9uQ2hlY2tlZCh2YWx1ZS5tX3R5cGUsIFNwZWNBcmd1bWVu
dHMpOworICAgIGNhc2UgQXJyYXk6OkRpcmVjdEFyZ3VtZW50czoKKyAgICAgICAgcmV0dXJuIHNw
ZWN1bGF0aW9uQ2hlY2tlZCh2YWx1ZS5tX3R5cGUsIFNwZWNEaXJlY3RBcmd1bWVudHMpOworICAg
ICAgICAKKyAgICBjYXNlIEFycmF5OjpTY29wZWRBcmd1bWVudHM6CisgICAgICAgIHJldHVybiBz
cGVjdWxhdGlvbkNoZWNrZWQodmFsdWUubV90eXBlLCBTcGVjU2NvcGVkQXJndW1lbnRzKTsKICAg
ICAgICAgCiAgICAgY2FzZSBBcnJheTo6SW50OEFycmF5OgogICAgICAgICByZXR1cm4gc3BlY3Vs
YXRpb25DaGVja2VkKHZhbHVlLm1fdHlwZSwgU3BlY0ludDhBcnJheSk7CkBAIC00NjEsOCArNDcx
LDEwIEBAIGNvbnN0IGNoYXIqIGFycmF5VHlwZVRvU3RyaW5nKEFycmF5OjpUeXAKICAgICAgICAg
cmV0dXJuICJBcnJheVN0b3JhZ2UiOwogICAgIGNhc2UgQXJyYXk6OlNsb3dQdXRBcnJheVN0b3Jh
Z2U6CiAgICAgICAgIHJldHVybiAiU2xvd1B1dEFycmF5U3RvcmFnZSI7Ci0gICAgY2FzZSBBcnJh
eTo6QXJndW1lbnRzOgotICAgICAgICByZXR1cm4gIkFyZ3VtZW50cyI7CisgICAgY2FzZSBBcnJh
eTo6RGlyZWN0QXJndW1lbnRzOgorICAgICAgICByZXR1cm4gIkRpcmVjdEFyZ3VtZW50cyI7Cisg
ICAgY2FzZSBBcnJheTo6U2NvcGVkQXJndW1lbnRzOgorICAgICAgICByZXR1cm4gIlNjb3BlZEFy
Z3VtZW50cyI7CiAgICAgY2FzZSBBcnJheTo6SW50OEFycmF5OgogICAgICAgICByZXR1cm4gIklu
dDhBcnJheSI7CiAgICAgY2FzZSBBcnJheTo6SW50MTZBcnJheToKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuaAkocmV2aXNpb24gMTgwODc1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMsIDIwMTQgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC02NSw3ICs2NSw5IEBAIGVudW0gVHlwZSB7CiAgICAgQXJyYXlTdG9yYWdlLAogICAgIFNs
b3dQdXRBcnJheVN0b3JhZ2UsCiAgICAgCi0gICAgQXJndW1lbnRzLAorICAgIERpcmVjdEFyZ3Vt
ZW50cywKKyAgICBTY29wZWRBcmd1bWVudHMsCisgICAgCiAgICAgSW50OEFycmF5LAogICAgIElu
dDE2QXJyYXksCiAgICAgSW50MzJBcnJheSwKQEAgLTI5NCw3ICsyOTYsOCBAQCBwdWJsaWM6CiAg
ICAgICAgIGNhc2UgQXJyYXk6OlVucHJvZmlsZWQ6CiAgICAgICAgIGNhc2UgQXJyYXk6OkZvcmNl
RXhpdDoKICAgICAgICAgY2FzZSBBcnJheTo6R2VuZXJpYzoKLSAgICAgICAgY2FzZSBBcnJheTo6
QXJndW1lbnRzOgorICAgICAgICBjYXNlIEFycmF5OjpEaXJlY3RBcmd1bWVudHM6CisgICAgICAg
IGNhc2UgQXJyYXk6OlNjb3BlZEFyZ3VtZW50czoKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMzIwLDExICsz
MjMsOSBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBzd2l0Y2ggKHR5cGUoKSkgewogICAgICAg
ICBjYXNlIEFycmF5OjpTdHJpbmc6CisgICAgICAgIGNhc2UgQXJyYXk6OkRpcmVjdEFyZ3VtZW50
czoKKyAgICAgICAgY2FzZSBBcnJheTo6U2NvcGVkQXJndW1lbnRzOgogICAgICAgICAgICAgcmV0
dXJuIEFycmF5TW9kZShBcnJheTo6R2VuZXJpYyk7Ci0jaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAg
ICAgICAgY2FzZSBBcnJheTo6QXJndW1lbnRzOgotICAgICAgICAgICAgcmV0dXJuIEFycmF5TW9k
ZShBcnJheTo6R2VuZXJpYyk7Ci0jZW5kaWYKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAg
IHJldHVybiAqdGhpczsKICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDE4MDg3NSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yMjUsMTEgKzIyNSwxMSBAQCBwcml2YXRlOgogICAgIHZvaWQgbGlua0Jsb2NrKEJhc2lj
QmxvY2sqLCBWZWN0b3I8QmFzaWNCbG9jayo+JiBwb3NzaWJsZVRhcmdldHMpOwogICAgIHZvaWQg
bGlua0Jsb2NrcyhWZWN0b3I8VW5saW5rZWRCbG9jaz4mIHVubGlua2VkQmxvY2tzLCBWZWN0b3I8
QmFzaWNCbG9jayo+JiBwb3NzaWJsZVRhcmdldHMpOwogICAgIAotICAgIFZhcmlhYmxlQWNjZXNz
RGF0YSogbmV3VmFyaWFibGVBY2Nlc3NEYXRhKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBib29s
IGlzQ2FwdHVyZWQpCisgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiBuZXdWYXJpYWJsZUFjY2Vzc0Rh
dGEoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCiAgICAgewogICAgICAgICBBU1NFUlQoIW9wZXJh
bmQuaXNDb25zdGFudCgpKTsKICAgICAgICAgCi0gICAgICAgIG1fZ3JhcGgubV92YXJpYWJsZUFj
Y2Vzc0RhdGEuYXBwZW5kKFZhcmlhYmxlQWNjZXNzRGF0YShvcGVyYW5kLCBpc0NhcHR1cmVkKSk7
CisgICAgICAgIG1fZ3JhcGgubV92YXJpYWJsZUFjY2Vzc0RhdGEuYXBwZW5kKFZhcmlhYmxlQWNj
ZXNzRGF0YShvcGVyYW5kKSk7CiAgICAgICAgIHJldHVybiAmbV9ncmFwaC5tX3ZhcmlhYmxlQWNj
ZXNzRGF0YS5sYXN0KCk7CiAgICAgfQogICAgIApAQCAtMzU4LDcgKzM1OCw2IEBAIHByaXZhdGU6
CiAgICAgICAgIH0KIAogICAgICAgICBOb2RlKiBub2RlID0gbV9jdXJyZW50QmxvY2stPnZhcmlh
Ymxlc0F0VGFpbC5sb2NhbChsb2NhbCk7Ci0gICAgICAgIGJvb2wgaXNDYXB0dXJlZCA9IG1fY29k
ZUJsb2NrLT5pc0NhcHR1cmVkKG9wZXJhbmQsIGlubGluZUNhbGxGcmFtZSgpKTsKICAgICAgICAg
CiAgICAgICAgIC8vIFRoaXMgaGFzIHR3byBnb2FsczogMSkgbGluayB0b2dldGhlciB2YXJpYWJs
ZSBhY2Nlc3MgZGF0YXMsIGFuZCAyKQogICAgICAgICAvLyB0cnkgdG8gYXZvaWQgY3JlYXRpbmcg
cmVkdW5kYW50IEdldExvY2Fscy4gKDEpIGlzIHJlcXVpcmVkIGZvcgpAQCAtMzcwLDIwICszNjks
MTcgQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIGlmIChub2RlKSB7CiAgICAgICAgICAg
ICB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAgICAgICAgICAgdmFy
aWFibGUtPm1lcmdlSXNDYXB0dXJlZChpc0NhcHR1cmVkKTsKICAgICAgICAgICAgIAotICAgICAg
ICAgICAgaWYgKCFpc0NhcHR1cmVkKSB7Ci0gICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5v
cCgpKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBHZXRMb2NhbDoKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIG5vZGU7Ci0gICAgICAgICAgICAgICAgY2FzZSBTZXRMb2NhbDoKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKLSAgICAgICAgICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICAgICAgICAgIGNhc2UgR2V0
TG9jYWw6CisgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7CisgICAgICAgICAgICBjYXNlIFNl
dExvY2FsOgorICAgICAgICAgICAgICAgIHJldHVybiBub2RlLT5jaGlsZDEoKS5ub2RlKCk7Cisg
ICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
fQogICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHZhcmlhYmxlID0gbmV3VmFyaWFibGVBY2Nl
c3NEYXRhKG9wZXJhbmQsIGlzQ2FwdHVyZWQpOworICAgICAgICAgICAgdmFyaWFibGUgPSBuZXdW
YXJpYWJsZUFjY2Vzc0RhdGEob3BlcmFuZCk7CiAgICAgICAgIAogICAgICAgICBub2RlID0gaW5q
ZWN0TGF6eU9wZXJhbmRTcGVjdWxhdGlvbihhZGRUb0dyYXBoKEdldExvY2FsLCBPcEluZm8odmFy
aWFibGUpKSk7CiAgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwubG9jYWwo
bG9jYWwpID0gbm9kZTsKQEAgLTM5NiwxNSArMzkyLDE0IEBAIHByaXZhdGU6CiAgICAgICAgIG1f
Y3VycmVudFNlbWFudGljT3JpZ2luID0gc2VtYW50aWNPcmlnaW47CiAKICAgICAgICAgdW5zaWdu
ZWQgbG9jYWwgPSBvcGVyYW5kLnRvTG9jYWwoKTsKLSAgICAgICAgYm9vbCBpc0NhcHR1cmVkID0g
bV9jb2RlQmxvY2stPmlzQ2FwdHVyZWQob3BlcmFuZCwgaW5saW5lQ2FsbEZyYW1lKCkpOwogICAg
ICAgICAKICAgICAgICAgaWYgKHNldE1vZGUgIT0gSW1tZWRpYXRlTmFrZWRTZXQpIHsKICAgICAg
ICAgICAgIEFyZ3VtZW50UG9zaXRpb24qIGFyZ3VtZW50UG9zaXRpb24gPSBmaW5kQXJndW1lbnRQ
b3NpdGlvbkZvckxvY2FsKG9wZXJhbmQpOwotICAgICAgICAgICAgaWYgKGlzQ2FwdHVyZWQgfHwg
YXJndW1lbnRQb3NpdGlvbikKKyAgICAgICAgICAgIGlmIChhcmd1bWVudFBvc2l0aW9uKQogICAg
ICAgICAgICAgICAgIGZsdXNoRGlyZWN0KG9wZXJhbmQsIGFyZ3VtZW50UG9zaXRpb24pOwogICAg
ICAgICB9CiAKLSAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEg
PSBuZXdWYXJpYWJsZUFjY2Vzc0RhdGEob3BlcmFuZCwgaXNDYXB0dXJlZCk7CisgICAgICAgIFZh
cmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbmV3VmFyaWFibGVBY2Nlc3NE
YXRhKG9wZXJhbmQpOwogICAgICAgICB2YXJpYWJsZUFjY2Vzc0RhdGEtPm1lcmdlU3RydWN0dXJl
Q2hlY2tIb2lzdGluZ0ZhaWxlZCgKICAgICAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1fZXhp
dFByb2ZpbGUuaGFzRXhpdFNpdGUoc2VtYW50aWNPcmlnaW4uYnl0ZWNvZGVJbmRleCwgQmFkQ2Fj
aGUpKTsKICAgICAgICAgdmFyaWFibGVBY2Nlc3NEYXRhLT5tZXJnZUNoZWNrQXJyYXlIb2lzdGlu
Z0ZhaWxlZCgKQEAgLTQyMywyNiArNDE4LDIyIEBAIHByaXZhdGU6CiAgICAgICAgIEFTU0VSVChh
cmd1bWVudCA8IG1fbnVtQXJndW1lbnRzKTsKICAgICAgICAgCiAgICAgICAgIE5vZGUqIG5vZGUg
PSBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmFyZ3VtZW50KGFyZ3VtZW50KTsKLSAg
ICAgICAgYm9vbCBpc0NhcHR1cmVkID0gbV9jb2RlQmxvY2stPmlzQ2FwdHVyZWQob3BlcmFuZCk7
CiAKICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZTsKICAgICAgICAgCiAgICAg
ICAgIGlmIChub2RlKSB7CiAgICAgICAgICAgICB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNj
ZXNzRGF0YSgpOwotICAgICAgICAgICAgdmFyaWFibGUtPm1lcmdlSXNDYXB0dXJlZChpc0NhcHR1
cmVkKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKCFpc0NhcHR1cmVkKSB7Ci0gICAg
ICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBH
ZXRMb2NhbDoKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7Ci0gICAgICAgICAgICAg
ICAgY2FzZSBTZXRMb2NhbDoKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGUtPmNoaWxk
MSgpLm5vZGUoKTsKLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9w
KCkpIHsKKyAgICAgICAgICAgIGNhc2UgR2V0TG9jYWw6CisgICAgICAgICAgICAgICAgcmV0dXJu
IG5vZGU7CisgICAgICAgICAgICBjYXNlIFNldExvY2FsOgorICAgICAgICAgICAgICAgIHJldHVy
biBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UKLSAgICAgICAgICAg
IHZhcmlhYmxlID0gbmV3VmFyaWFibGVBY2Nlc3NEYXRhKG9wZXJhbmQsIGlzQ2FwdHVyZWQpOwor
ICAgICAgICAgICAgdmFyaWFibGUgPSBuZXdWYXJpYWJsZUFjY2Vzc0RhdGEob3BlcmFuZCk7CiAg
ICAgICAgIAogICAgICAgICBub2RlID0gaW5qZWN0TGF6eU9wZXJhbmRTcGVjdWxhdGlvbihhZGRU
b0dyYXBoKEdldExvY2FsLCBPcEluZm8odmFyaWFibGUpKSk7CiAgICAgICAgIG1fY3VycmVudEJs
b2NrLT52YXJpYWJsZXNBdFRhaWwuYXJndW1lbnQoYXJndW1lbnQpID0gbm9kZTsKQEAgLTQ1Niw5
ICs0NDcsNyBAQCBwcml2YXRlOgogICAgICAgICB1bnNpZ25lZCBhcmd1bWVudCA9IG9wZXJhbmQu
dG9Bcmd1bWVudCgpOwogICAgICAgICBBU1NFUlQoYXJndW1lbnQgPCBtX251bUFyZ3VtZW50cyk7
CiAgICAgICAgIAotICAgICAgICBib29sIGlzQ2FwdHVyZWQgPSBtX2NvZGVCbG9jay0+aXNDYXB0
dXJlZChvcGVyYW5kKTsKLQotICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNj
ZXNzRGF0YSA9IG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShvcGVyYW5kLCBpc0NhcHR1cmVkKTsKKyAg
ICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBuZXdWYXJpYWJs
ZUFjY2Vzc0RhdGEob3BlcmFuZCk7CiAKICAgICAgICAgLy8gQWx3YXlzIGZsdXNoIGFyZ3VtZW50
cywgZXhjZXB0IGZvciAndGhpcycuIElmICd0aGlzJyBpcyBjcmVhdGVkIGJ5IHVzLAogICAgICAg
ICAvLyB0aGVuIG1ha2Ugc3VyZSB0aGF0IGl0J3MgbmV2ZXIgdW5ib3hlZC4KQEAgLTUyNCwxOSAr
NTEzLDE2IEBAIHByaXZhdGU6CiAgICAgCiAgICAgdm9pZCBmbHVzaERpcmVjdChWaXJ0dWFsUmVn
aXN0ZXIgb3BlcmFuZCwgQXJndW1lbnRQb3NpdGlvbiogYXJndW1lbnRQb3NpdGlvbikKICAgICB7
Ci0gICAgICAgIGJvb2wgaXNDYXB0dXJlZCA9IG1fY29kZUJsb2NrLT5pc0NhcHR1cmVkKG9wZXJh
bmQsIGlubGluZUNhbGxGcmFtZSgpKTsKLSAgICAgICAgCiAgICAgICAgIEFTU0VSVCghb3BlcmFu
ZC5pc0NvbnN0YW50KCkpOwogICAgICAgICAKICAgICAgICAgTm9kZSogbm9kZSA9IG1fY3VycmVu
dEJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChvcGVyYW5kKTsKICAgICAgICAgCiAgICAg
ICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGU7CiAgICAgICAgIAotICAgICAgICBpZiAo
bm9kZSkgeworICAgICAgICBpZiAobm9kZSkKICAgICAgICAgICAgIHZhcmlhYmxlID0gbm9kZS0+
dmFyaWFibGVBY2Nlc3NEYXRhKCk7Ci0gICAgICAgICAgICB2YXJpYWJsZS0+bWVyZ2VJc0NhcHR1
cmVkKGlzQ2FwdHVyZWQpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHZhcmlhYmxlID0g
bmV3VmFyaWFibGVBY2Nlc3NEYXRhKG9wZXJhbmQsIGlzQ2FwdHVyZWQpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICB2YXJpYWJsZSA9IG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShvcGVyYW5kKTsK
ICAgICAgICAgCiAgICAgICAgIG5vZGUgPSBhZGRUb0dyYXBoKEZsdXNoLCBPcEluZm8odmFyaWFi
bGUpKTsKICAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKG9w
ZXJhbmQpID0gbm9kZTsKQEAgLTU1NywxMSArNTQzLDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
IG51bUFyZ3VtZW50cyA9IGlubGluZVN0YWNrRW50cnktPm1fY29kZUJsb2NrLT5udW1QYXJhbWV0
ZXJzKCk7CiAgICAgICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQgPSBudW1Bcmd1bWVudHM7IGFy
Z3VtZW50LS0gPiAxOykKICAgICAgICAgICAgIGZsdXNoRGlyZWN0KGlubGluZVN0YWNrRW50cnkt
PnJlbWFwT3BlcmFuZCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChhcmd1bWVudCkpKTsKLSAg
ICAgICAgZm9yIChpbnQgbG9jYWwgPSAwOyBsb2NhbCA8IGlubGluZVN0YWNrRW50cnktPm1fY29k
ZUJsb2NrLT5tX251bVZhcnM7ICsrbG9jYWwpIHsKLSAgICAgICAgICAgIGlmICghaW5saW5lU3Rh
Y2tFbnRyeS0+bV9jb2RlQmxvY2stPmlzQ2FwdHVyZWQodmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwo
bG9jYWwpKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGZsdXNoRGly
ZWN0KGlubGluZVN0YWNrRW50cnktPnJlbWFwT3BlcmFuZCh2aXJ0dWFsUmVnaXN0ZXJGb3JMb2Nh
bChsb2NhbCkpKTsKLSAgICAgICAgfQogICAgIH0KIAogICAgIHZvaWQgZmx1c2hGb3JUZXJtaW5h
bCgpCkBAIC0yNTM5LDcgKzI1MjAsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2Nr
KHVuc2lnbmVkCiAgICAgICAgIG1fZ3JhcGgubV9hcmd1bWVudHMucmVzaXplKG1fbnVtQXJndW1l
bnRzKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBhcmd1bWVudCA9IDA7IGFyZ3VtZW50IDwgbV9u
dW1Bcmd1bWVudHM7ICsrYXJndW1lbnQpIHsKICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0
YSogdmFyaWFibGUgPSBuZXdWYXJpYWJsZUFjY2Vzc0RhdGEoCi0gICAgICAgICAgICAgICAgdmly
dHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoYXJndW1lbnQpLCBtX2NvZGVCbG9jay0+aXNDYXB0dXJl
ZCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChhcmd1bWVudCkpKTsKKyAgICAgICAgICAgICAg
ICB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChhcmd1bWVudCkpOwogICAgICAgICAgICAgdmFy
aWFibGUtPm1lcmdlU3RydWN0dXJlQ2hlY2tIb2lzdGluZ0ZhaWxlZCgKICAgICAgICAgICAgICAg
ICBtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVudElu
ZGV4LCBCYWRDYWNoZSkpOwogICAgICAgICAgICAgdmFyaWFibGUtPm1lcmdlQ2hlY2tBcnJheUhv
aXN0aW5nRmFpbGVkKApAQCAtMzk0NywyMiArMzkyOCw2IEBAIEJ5dGVDb2RlUGFyc2VyOjpJbmxp
bmVTdGFja0VudHJ5OjpJbmxpbmUKICAgICAgICAgbV9pbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50
cy5yZXNpemUoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpOyAvLyBTZXQgdGhlIG51bWJlciBv
ZiBhcmd1bWVudHMgaW5jbHVkaW5nIHRoaXMsIGJ1dCBkb24ndCBjb25maWd1cmUgdGhlIHZhbHVl
IHJlY292ZXJpZXMsIHlldC4KICAgICAgICAgbV9pbmxpbmVDYWxsRnJhbWUtPmtpbmQgPSBraW5k
OwogICAgICAgICAKLSAgICAgICAgaWYgKG1faW5saW5lQ2FsbEZyYW1lLT5jYWxsZXIuaW5saW5l
Q2FsbEZyYW1lKQotICAgICAgICAgICAgbV9pbmxpbmVDYWxsRnJhbWUtPmNhcHR1cmVkVmFycyA9
IG1faW5saW5lQ2FsbEZyYW1lLT5jYWxsZXIuaW5saW5lQ2FsbEZyYW1lLT5jYXB0dXJlZFZhcnM7
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1faW5saW5lQ2FsbEZyYW1lLT5jYXB0dXJlZFZh
cnMgPSBieXRlQ29kZVBhcnNlci0+bV9ncmFwaC5tX291dGVybW9zdENhcHR1cmVkVmFyczsKLQot
ICAgICAgICBmb3IgKGludCBpID0gYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXM7IGktLTspIHsK
LSAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudCA9IHZpcnR1YWxSZWdpc3RlckZv
ckFyZ3VtZW50KGkpOwotICAgICAgICAgICAgaWYgKGNvZGVCbG9jay0+aXNDYXB0dXJlZChhcmd1
bWVudCkpCi0gICAgICAgICAgICAgICAgbV9pbmxpbmVDYWxsRnJhbWUtPmNhcHR1cmVkVmFycy5z
ZXQoVmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50Lm9mZnNldCgpICsgbV9pbmxpbmVDYWxsRnJhbWUt
PnN0YWNrT2Zmc2V0KS50b0xvY2FsKCkpOwotICAgICAgICB9Ci0gICAgICAgIGZvciAoc2l6ZV90
IGkgPSBjb2RlQmxvY2stPm1fbnVtVmFyczsgaS0tOykgewotICAgICAgICAgICAgVmlydHVhbFJl
Z2lzdGVyIGxvY2FsID0gdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaSk7Ci0gICAgICAgICAgICBp
ZiAoY29kZUJsb2NrLT5pc0NhcHR1cmVkKGxvY2FsKSkKLSAgICAgICAgICAgICAgICBtX2lubGlu
ZUNhbGxGcmFtZS0+Y2FwdHVyZWRWYXJzLnNldChWaXJ0dWFsUmVnaXN0ZXIobG9jYWwub2Zmc2V0
KCkgKyBtX2lubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQpLnRvTG9jYWwoKSk7Ci0gICAgICAg
IH0KLQogICAgICAgICBieXRlQ29kZVBhcnNlci0+YnVpbGRPcGVyYW5kTWFwc0lmTmVjZXNzYXJ5
KCk7CiAgICAgICAgIAogICAgICAgICBtX2lkZW50aWZpZXJSZW1hcC5yZXNpemUoY29kZUJsb2Nr
LT5udW1iZXJPZklkZW50aWZpZXJzKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDbG9iYmVyaXplLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDbG9iYmVyaXplLmgJKHJldmlzaW9uIDE4MDg3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOTYsNyArMjk2LDcg
QEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgICAgICByZXR1
cm47CiAKICAgICBjYXNlIEZsdXNoOgotICAgICAgICByZWFkKEFic3RyYWN0SGVhcChWYXJpYWJs
ZXMsIG5vZGUtPmxvY2FsKCkpKTsKKyAgICAgICAgcmVhZChBYnN0cmFjdEhlYXAoU3RhY2ssIG5v
ZGUtPmxvY2FsKCkpKTsKICAgICAgICAgd3JpdGUoU2lkZVN0YXRlKTsKICAgICAgICAgcmV0dXJu
OwogCkBAIC0zMTksNyArMzE5LDcgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9k
ZSogbm9kZQogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2UgQ3JlYXRlQXJndW1l
bnRzOgotICAgICAgICByZWFkKFZhcmlhYmxlcyk7CisgICAgICAgIHJlYWQoU3RhY2spOwogICAg
ICAgICByZWFkKEhlYXBPYmplY3RDb3VudCk7CiAgICAgICAgIHdyaXRlKEhlYXBPYmplY3RDb3Vu
dCk7CiAgICAgICAgIHdyaXRlKFNpZGVTdGF0ZSk7CkBAIC0zOTYsMzEgKzM5NiwzMSBAQCB2b2lk
IGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgICAgIHJldHVybjsKICAg
ICAgICAgCiAgICAgY2FzZSBHZXRDYWxsZWU6Ci0gICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKFZh
cmlhYmxlcywgSlNTdGFjazo6Q2FsbGVlKSk7Ci0gICAgICAgIGRlZihIZWFwTG9jYXRpb24oVmFy
aWFibGVMb2MsIEFic3RyYWN0SGVhcChWYXJpYWJsZXMsIEpTU3RhY2s6OkNhbGxlZSkpLCBub2Rl
KTsKKyAgICAgICAgcmVhZChBYnN0cmFjdEhlYXAoU3RhY2ssIEpTU3RhY2s6OkNhbGxlZSkpOwor
ICAgICAgICBkZWYoSGVhcExvY2F0aW9uKFN0YWNrTG9jLCBBYnN0cmFjdEhlYXAoU3RhY2ssIEpT
U3RhY2s6OkNhbGxlZSkpLCBub2RlKTsKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICBj
YXNlIEdldExvY2FsOgotICAgICAgICByZWFkKEFic3RyYWN0SGVhcChWYXJpYWJsZXMsIG5vZGUt
PmxvY2FsKCkpKTsKLSAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihWYXJpYWJsZUxvYywgQWJzdHJh
Y3RIZWFwKFZhcmlhYmxlcywgbm9kZS0+bG9jYWwoKSkpLCBub2RlKTsKKyAgICAgICAgcmVhZChB
YnN0cmFjdEhlYXAoU3RhY2ssIG5vZGUtPmxvY2FsKCkpKTsKKyAgICAgICAgZGVmKEhlYXBMb2Nh
dGlvbihTdGFja0xvYywgQWJzdHJhY3RIZWFwKFN0YWNrLCBub2RlLT5sb2NhbCgpKSksIG5vZGUp
OwogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2UgU2V0TG9jYWw6Ci0gICAgICAg
IHdyaXRlKEFic3RyYWN0SGVhcChWYXJpYWJsZXMsIG5vZGUtPmxvY2FsKCkpKTsKLSAgICAgICAg
ZGVmKEhlYXBMb2NhdGlvbihWYXJpYWJsZUxvYywgQWJzdHJhY3RIZWFwKFZhcmlhYmxlcywgbm9k
ZS0+bG9jYWwoKSkpLCBub2RlLT5jaGlsZDEoKS5ub2RlKCkpOworICAgICAgICB3cml0ZShBYnN0
cmFjdEhlYXAoU3RhY2ssIG5vZGUtPmxvY2FsKCkpKTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlv
bihTdGFja0xvYywgQWJzdHJhY3RIZWFwKFN0YWNrLCBub2RlLT5sb2NhbCgpKSksIG5vZGUtPmNo
aWxkMSgpLm5vZGUoKSk7CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBHZXRT
dGFjazogewotICAgICAgICBBYnN0cmFjdEhlYXAgaGVhcChWYXJpYWJsZXMsIG5vZGUtPnN0YWNr
QWNjZXNzRGF0YSgpLT5sb2NhbCk7CisgICAgICAgIEFic3RyYWN0SGVhcCBoZWFwKFN0YWNrLCBu
b2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+bG9jYWwpOwogICAgICAgICByZWFkKGhlYXApOwotICAg
ICAgICBkZWYoSGVhcExvY2F0aW9uKFZhcmlhYmxlTG9jLCBoZWFwKSwgbm9kZSk7CisgICAgICAg
IGRlZihIZWFwTG9jYXRpb24oU3RhY2tMb2MsIGhlYXApLCBub2RlKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBQdXRTdGFjazogewotICAgICAgICBBYnN0cmFj
dEhlYXAgaGVhcChWYXJpYWJsZXMsIG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5sb2NhbCk7Cisg
ICAgICAgIEFic3RyYWN0SGVhcCBoZWFwKFN0YWNrLCBub2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+
bG9jYWwpOwogICAgICAgICB3cml0ZShoZWFwKTsKLSAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihW
YXJpYWJsZUxvYywgaGVhcCksIG5vZGUtPmNoaWxkMSgpLm5vZGUoKSk7CisgICAgICAgIGRlZihI
ZWFwTG9jYXRpb24oU3RhY2tMb2MsIGhlYXApLCBub2RlLT5jaGlsZDEoKS5ub2RlKCkpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogICAgICAgICAKQEAgLTQzMiw4ICs0MzIsOCBAQCB2b2lkIGNs
b2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgICAgIHJldHVybjsKICAgICAg
ICAgCiAgICAgY2FzZSBHZXRMb2NhbFVubGlua2VkOgotICAgICAgICByZWFkKEFic3RyYWN0SGVh
cChWYXJpYWJsZXMsIG5vZGUtPnVubGlua2VkTG9jYWwoKSkpOwotICAgICAgICBkZWYoSGVhcExv
Y2F0aW9uKFZhcmlhYmxlTG9jLCBBYnN0cmFjdEhlYXAoVmFyaWFibGVzLCBub2RlLT51bmxpbmtl
ZExvY2FsKCkpKSwgbm9kZSk7CisgICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKFN0YWNrLCBub2Rl
LT51bmxpbmtlZExvY2FsKCkpKTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihTdGFja0xvYywg
QWJzdHJhY3RIZWFwKFN0YWNrLCBub2RlLT51bmxpbmtlZExvY2FsKCkpKSwgbm9kZSk7CiAgICAg
ICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBHZXRCeVZhbDogewpAQCAtNDY2LDEwICs0
NjYsMTQgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgICAg
ICAgICAgZGVmKFB1cmVWYWx1ZShub2RlLCBtb2RlLmFzV29yZCgpKSk7CiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgICAgICAKLSAgICAgICAgY2FzZSBBcnJheTo6QXJndW1lbnRzOgotICAg
ICAgICAgICAgcmVhZChBcmd1bWVudHNfcmVnaXN0ZXJzKTsKLSAgICAgICAgICAgIHJlYWQoVmFy
aWFibGVzKTsKLSAgICAgICAgICAgIGRlZihIZWFwTG9jYXRpb24oSW5kZXhlZFByb3BlcnR5TG9j
LCBWYXJpYWJsZXMsIG5vZGUtPmNoaWxkMSgpLCBub2RlLT5jaGlsZDIoKSksIG5vZGUpOworICAg
ICAgICBjYXNlIEFycmF5OjpEaXJlY3RBcmd1bWVudHM6CisgICAgICAgICAgICByZWFkKERpcmVj
dEFyZ3VtZW50c1Byb3BlcnRpZXMpOworICAgICAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihJbmRl
eGVkUHJvcGVydHlMb2MsIERpcmVjdEFyZ3VtZW50c1Byb3BlcnRpZXMsIG5vZGUtPmNoaWxkMSgp
LCBub2RlLT5jaGlsZDIoKSksIG5vZGUpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgCisgICAgICAgIGNhc2UgQXJyYXk6OlNjb3BlZEFyZ3VtZW50czoKKyAgICAgICAgICAgIHJl
YWQoU2NvcGVkQXJndW1lbnRzUHJvcGVydGllcyk7CisgICAgICAgICAgICBkZWYoSGVhcExvY2F0
aW9uKEluZGV4ZWRQcm9wZXJ0eUxvYywgU2NvcGVkQXJndW1lbnRzUHJvcGVydGllcywgbm9kZS0+
Y2hpbGQxKCksIG5vZGUtPmNoaWxkMigpKSwgbm9kZSk7CiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcnJheTo6SW50MzI6CkBAIC01NjAsMTMgKzU2NCw2
IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICAgICAgICAg
IHdyaXRlKEhlYXApOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgCi0gICAgICAg
IGNhc2UgQXJyYXk6OkFyZ3VtZW50czoKLSAgICAgICAgICAgIHJlYWQoQXJndW1lbnRzX3JlZ2lz
dGVycyk7Ci0gICAgICAgICAgICByZWFkKE1pc2NGaWVsZHMpOwotICAgICAgICAgICAgd3JpdGUo
VmFyaWFibGVzKTsKLSAgICAgICAgICAgIGRlZihIZWFwTG9jYXRpb24oSW5kZXhlZFByb3BlcnR5
TG9jLCBWYXJpYWJsZXMsIGJhc2UsIGluZGV4KSwgdmFsdWUpOwotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQXJyYXk6OkludDMyOgogICAgICAgICAgICAg
aWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzT3V0T2ZCb3VuZHMoKSkgewogICAgICAgICAgICAgICAg
IHJlYWQoV29ybGQpOwpAQCAtNzYxLDcgKzc1OCw4IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYg
Z3JhcGgsIE5vZGUqIG5vZGUKICAgICAgICAgICAgIGRlZihQdXJlVmFsdWUobm9kZSwgbW9kZS5h
c1dvcmQoKSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgCi0gICAgICAgIGNh
c2UgQXJyYXk6OkFyZ3VtZW50czoKKyAgICAgICAgY2FzZSBBcnJheTo6RGlyZWN0QXJndW1lbnRz
OgorICAgICAgICBjYXNlIEFycmF5OjpTY29wZWRBcmd1bWVudHM6CiAgICAgICAgICAgICByZWFk
KE1pc2NGaWVsZHMpOwogICAgICAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihBcnJheUxlbmd0aExv
YywgTWlzY0ZpZWxkcywgbm9kZS0+Y2hpbGQxKCkpLCBub2RlKTsKICAgICAgICAgICAgIHJldHVy
bjsKQEAgLTg3MCwyOCArODY4LDIzIEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5v
ZGUqIG5vZGUKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAKLSAgICBj
YXNlIFRlYXJPZmZBcmd1bWVudHM6Ci0gICAgICAgIHJlYWQoVmFyaWFibGVzKTsKLSAgICAgICAg
d3JpdGUoQXJndW1lbnRzX3JlZ2lzdGVycyk7Ci0gICAgICAgIHJldHVybjsKLSAgICAgICAgCiAg
ICAgY2FzZSBHZXRNeUFyZ3VtZW50c0xlbmd0aDoKLSAgICAgICAgcmVhZChBYnN0cmFjdEhlYXAo
VmFyaWFibGVzLCBncmFwaC5hcmd1bWVudHNSZWdpc3RlckZvcihub2RlLT5vcmlnaW4uc2VtYW50
aWMpKSk7Ci0gICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKFZhcmlhYmxlcywgSlNTdGFjazo6QXJn
dW1lbnRDb3VudCkpOworICAgICAgICByZWFkKEFic3RyYWN0SGVhcChTdGFjaywgZ3JhcGguYXJn
dW1lbnRzUmVnaXN0ZXJGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSkpOworICAgICAgICByZWFk
KEFic3RyYWN0SGVhcChTdGFjaywgSlNTdGFjazo6QXJndW1lbnRDb3VudCkpOwogICAgICAgICAv
LyBGSVhNRTogV2UgY291bGQgZGVmKCkgdGhpcyBieSBzcGVjaWZ5aW5nIHRoZSBjb2RlIG9yaWdp
biBhcyBhIGtpbmQgb2YgbV9pbmZvLCBsaWtlIHdlCiAgICAgICAgIC8vIGhhdmUgZm9yIFB1cmVW
YWx1ZS4KICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTEzNDc5NwogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2UgR2V0TXlBcmd1bWVu
dEJ5VmFsOgotICAgICAgICByZWFkKFZhcmlhYmxlcyk7CisgICAgICAgIHJlYWQoU3RhY2spOwog
ICAgICAgICAvLyBGSVhNRTogV2UgY291bGQgZGVmKCkgdGhpcyBieSBzcGVjaWZ5aW5nIHRoZSBj
b2RlIG9yaWdpbiBhcyBhIGtpbmQgb2YgbV9pbmZvLCBsaWtlIHdlCiAgICAgICAgIC8vIGhhdmUg
Zm9yIFB1cmVWYWx1ZS4KICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEzNDc5NwogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2UgQ2hl
Y2tBcmd1bWVudHNOb3RDcmVhdGVkOgotICAgICAgICByZWFkKEFic3RyYWN0SGVhcChWYXJpYWJs
ZXMsIGdyYXBoLmFyZ3VtZW50c1JlZ2lzdGVyRm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpKTsK
KyAgICAgICAgcmVhZChBYnN0cmFjdEhlYXAoU3RhY2ssIGdyYXBoLmFyZ3VtZW50c1JlZ2lzdGVy
Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpKTsKICAgICAgICAgcmV0dXJuOwogCiAgICAgY2Fz
ZSBUaHJvd1JlZmVyZW5jZUVycm9yOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdGaXh1cFBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0ZpeHVwUGhhc2UuY3BwCShyZXZpc2lvbiAxODA4NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02ODQsNyArNjg0
LDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6CiAgICAg
ICAgICAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6CiAgICAgICAgICAgICBjYXNlIEFycmF5
OjpTbG93UHV0QXJyYXlTdG9yYWdlOgotICAgICAgICAgICAgY2FzZSBBcnJheTo6QXJndW1lbnRz
OgogICAgICAgICAgICAgICAgIGZpeEVkZ2U8S25vd25DZWxsVXNlPihjaGlsZDEpOwogICAgICAg
ICAgICAgICAgIGZpeEVkZ2U8SW50MzJVc2U+KGNoaWxkMik7CiAgICAgICAgICAgICAgICAgaW5z
ZXJ0U3RvcmVCYXJyaWVyKG1faW5kZXhJbkJsb2NrLCBjaGlsZDEsIGNoaWxkMyk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkocmV2aXNpb24gMTgwODc1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTc1LDExICs3NSw2IEBAIEdyYXBoOjpHcmFwaChWTSYgdm0sIFBsYW4mIHBsYW4sIExvbmdMaXYK
ICAgICAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX211c3RIYW5kbGVWYWx1ZXMuc2l6ZSgpOyBp
LS07KQogICAgICAgICBtX211c3RIYW5kbGVWYWx1ZXNbaV0gPSBmcmVlemVGcmFnaWxlKHBsYW4u
bXVzdEhhbmRsZVZhbHVlc1tpXSk7Ci0gICAgCi0gICAgZm9yICh1bnNpZ25lZCBpID0gbV9jb2Rl
QmxvY2stPm1fbnVtVmFyczsgaS0tOykgewotICAgICAgICBpZiAobV9jb2RlQmxvY2stPmlzQ2Fw
dHVyZWQodmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaSkpKQotICAgICAgICAgICAgbV9vdXRlcm1v
c3RDYXB0dXJlZFZhcnMuc2V0KGkpOwotICAgIH0KIH0KIAogR3JhcGg6On5HcmFwaCgpCkBAIC03
NTUsMTAgKzc1MCw2IEBAIHZvaWQgR3JhcGg6OmludmFsaWRhdGVDRkcoKQogCiB2b2lkIEdyYXBo
OjpzdWJzdGl0dXRlR2V0TG9jYWwoQmFzaWNCbG9jayYgYmxvY2ssIHVuc2lnbmVkIHN0YXJ0SW5k
ZXhJbkJsb2NrLCBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSwgTm9kZSog
bmV3R2V0TG9jYWwpCiB7Ci0gICAgaWYgKHZhcmlhYmxlQWNjZXNzRGF0YS0+aXNDYXB0dXJlZCgp
KSB7Ci0gICAgICAgIC8vIExldCBDU0Ugd29ycnkgYWJvdXQgdGhpcyBvbmUuCi0gICAgICAgIHJl
dHVybjsKLSAgICB9CiAgICAgZm9yICh1bnNpZ25lZCBpbmRleEluQmxvY2sgPSBzdGFydEluZGV4
SW5CbG9jazsgaW5kZXhJbkJsb2NrIDwgYmxvY2suc2l6ZSgpOyArK2luZGV4SW5CbG9jaykgewog
ICAgICAgICBOb2RlKiBub2RlID0gYmxvY2tbaW5kZXhJbkJsb2NrXTsKICAgICAgICAgYm9vbCBz
aG91bGRDb250aW51ZSA9IHRydWU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFw
aC5oCShyZXZpc2lvbiAxODA4NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dy
YXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2NywxMyArMzY3LDYgQEAgcHVibGljOgogICAgICAg
ICByZXR1cm4gYmFzZWxpbmVDb2RlQmxvY2tGb3JPcmlnaW5BbmRCYXNlbGluZUNvZGVCbG9jayhj
b2RlT3JpZ2luLCBtX3Byb2ZpbGVkQmxvY2spOwogICAgIH0KICAgICAKLSAgICBjb25zdCBCaXRW
ZWN0b3ImIGNhcHR1cmVkVmFyc0ZvcihJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSkK
LSAgICB7Ci0gICAgICAgIGlmICghaW5saW5lQ2FsbEZyYW1lKQotICAgICAgICAgICAgcmV0dXJu
IG1fb3V0ZXJtb3N0Q2FwdHVyZWRWYXJzOwotICAgICAgICByZXR1cm4gaW5saW5lQ2FsbEZyYW1l
LT5jYXB0dXJlZFZhcnM7Ci0gICAgfQotICAgIAogICAgIGJvb2wgaXNTdHJpY3RNb2RlRm9yKENv
ZGVPcmlnaW4gY29kZU9yaWdpbikKICAgICB7CiAgICAgICAgIGlmICghY29kZU9yaWdpbi5pbmxp
bmVDYWxsRnJhbWUpCkBAIC04MzUsNyArODI4LDYgQEAgcHVibGljOgogICAgIHVuc2lnbmVkIG1f
cGFyYW1ldGVyU2xvdHM7CiAgICAgaW50IG1fbWFjaGluZUNhcHR1cmVTdGFydDsKICAgICBzdGQ6
OnVuaXF1ZV9wdHI8U2xvd0FyZ3VtZW50W10+IG1fc2xvd0FyZ3VtZW50czsKLSAgICBCaXRWZWN0
b3IgbV9vdXRlcm1vc3RDYXB0dXJlZFZhcnM7CiAKICNpZiBVU0UoSlNWQUxVRTMyXzY0KQogICAg
IHN0ZDo6dW5vcmRlcmVkX21hcDxpbnQ2NF90LCBkb3VibGUqPiBtX2RvdWJsZUNvbnN0YW50c01h
cDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSGVhcExvY2F0aW9uLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdIZWFwTG9jYXRpb24uaAko
cmV2aXNpb24gMTgwODc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdIZWFwTG9j
YXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNTksNyArNTksNyBAQCBlbnVtIExvY2F0aW9uS2lu
ZCB7CiAgICAgVHlwZU9mTG9jLAogICAgIFR5cGVkQXJyYXlCeXRlT2Zmc2V0TG9jLAogICAgIFZh
ckluamVjdGlvbldhdGNocG9pbnRMb2MsCi0gICAgVmFyaWFibGVMb2MKKyAgICBTdGFja0xvYwog
fTsKIAogY2xhc3MgSGVhcExvY2F0aW9uIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHUHJlY2lzZUxvY2FsQ2xvYmJlcml6ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHUHJlY2lzZUxvY2FsQ2xvYmJlcml6ZS5oCShyZXZpc2lvbiAxODA4
NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWNpc2VMb2NhbENsb2JiZXJp
emUuaAkod29ya2luZyBjb3B5KQpAQCAtMTIxLDEyICsxMjEsNiBAQCBwcml2YXRlOgogICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgSlNTdGFjazo6VGhpc0FyZ3VtZW50OyArK2kpCiAg
ICAgICAgICAgICBtX3JlYWQoVmlydHVhbFJlZ2lzdGVyKGkpKTsKICAgICAgICAgCi0gICAgICAg
IC8vIFJlYWQgYWxsIG9mIHRoZSBjYXB0dXJlZCB2YXJpYWJsZXMuCi0gICAgICAgIGNvbnN0IEJp
dFZlY3RvciYgY2FwdHVyZWRWYXJzID0KLSAgICAgICAgICAgIG1fZ3JhcGguY2FwdHVyZWRWYXJz
Rm9yKG1fbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSk7Ci0gICAgICAgIGZv
ciAodW5zaWduZWQgaSA6IGNhcHR1cmVkVmFycy5zZXRCaXRzKCkpCi0gICAgICAgICAgICBtX3Jl
YWQodmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaSkpOwotICAgICAgICAKICAgICAgICAgLy8gUmVh
ZCBhbGwgb2YgdGhlIGlubGluZSBhcmd1bWVudHMgYW5kIGNhbGwgZnJhbWUgaGVhZGVycyB0aGF0
IHdlIGRpZG4ndCBhbHJlYWR5IGNhcHR1cmUuCiAgICAgICAgIGZvciAoSW5saW5lQ2FsbEZyYW1l
KiBpbmxpbmVDYWxsRnJhbWUgPSBtX25vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJh
bWU7IGlubGluZUNhbGxGcmFtZTsgaW5saW5lQ2FsbEZyYW1lID0gaW5saW5lQ2FsbEZyYW1lLT5j
YWxsZXIuaW5saW5lQ2FsbEZyYW1lKSB7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBp
bmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCk7IGktLSA+IDE7KQpAQCAtMTM2LDYgKzEz
MCw5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFy
Z3MoKSkKICAgICAgICAgICAgICAgICBtX3JlYWQoVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxG
cmFtZS0+c3RhY2tPZmZzZXQgKyBKU1N0YWNrOjpBcmd1bWVudENvdW50KSk7CiAgICAgICAgIH0K
KworICAgICAgICAvLyBOb3RlIHRoYXQgd2UgZG9uJ3QgbmVlZCB0byBkbyBhbnl0aGluZyBzcGVj
aWFsIGZvciBDYWxsRm9yd2FyZFZhcmFyZ3MsIHNpbmNlIGl0IHJlYWRzCisgICAgICAgIC8vIG91
ciBhcmd1bWVudHMgdGhlIHNhbWUgd2F5IHRoYXQgYW55IGVmZmVjdGZ1bCB0aGluZyBtaWdodC4K
ICAgICB9CiAgICAgCiAgICAgdm9pZCB3cml0ZVRvcCgpCkBAIC0xNDgsMTkgKzE0NSw2IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBkYXRhLT5saW1pdDsgaS0tOykK
ICAgICAgICAgICAgICAgICBtX3dyaXRlKFZpcnR1YWxSZWdpc3RlcihkYXRhLT5zdGFydC5vZmZz
ZXQoKSArIGkpKTsKICAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy8gTm90ZSB0aGF0IHdl
IGRvbid0IG5lZWQgdG8gZG8gYW55dGhpbmcgc3BlY2lhbCBmb3IgQ2FsbEZvcndhcmRWYXJhcmdz
LCBzaW5jZSBpdCByZWFkcwotICAgICAgICAvLyBvdXIgYXJndW1lbnRzIHRoZSBzYW1lIHdheSB0
aGF0IGFueSBlZmZlY3RmdWwgdGhpbmcgbWlnaHQuCi0gICAgICAgIAotICAgICAgICBpZiAobV9n
cmFwaC5tX2NvZGVCbG9jay0+dXNlc0FyZ3VtZW50cygpKSB7Ci0gICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSBtX2dyYXBoLm1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCk7IGktLSA+IDE7
KQotICAgICAgICAgICAgICAgIG1fd3JpdGUodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaSkp
OwotICAgICAgICB9Ci0KLSAgICAgICAgY29uc3QgQml0VmVjdG9yJiBjYXB0dXJlZFZhcnMgPQot
ICAgICAgICAgICAgbV9ncmFwaC5jYXB0dXJlZFZhcnNGb3IobV9ub2RlLT5vcmlnaW4uc2VtYW50
aWMuaW5saW5lQ2FsbEZyYW1lKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpIDogY2FwdHVyZWRW
YXJzLnNldEJpdHMoKSkKLSAgICAgICAgICAgIG1fd3JpdGUodmlydHVhbFJlZ2lzdGVyRm9yTG9j
YWwoaSkpOwogICAgIH0KICAgICAKICAgICBHcmFwaCYgbV9ncmFwaDsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNp
b24gMTgwODc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjU5OCw4ICsyNTk4LDExIEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgY2FzZSBBcnJheTo6U3RyaW5n
OgogICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25TdHJpbmcobm9kZSk7CiAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6QXJndW1lbnRzOgotICAgICAgICAgICAgY29t
cGlsZUdldEJ5VmFsT25Bcmd1bWVudHMobm9kZSk7CisgICAgICAgIGNhc2UgQXJyYXk6OkRpcmVj
dEFyZ3VtZW50czoKKyAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uRGlyZWN0QXJndW1lbnRz
KG5vZGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQXJyYXk6OlNjb3BlZEFy
Z3VtZW50czoKKyAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uU2NvcGVkQXJndW1lbnRzKG5v
ZGUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6IHsKICAgICAgICAgICAg
IFR5cGVkQXJyYXlUeXBlIHR5cGUgPSBub2RlLT5hcnJheU1vZGUoKS50eXBlZEFycmF5VHlwZSgp
OwpAQCAtMjgyOSw0NyArMjgzMiw2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9k
ZSogbm9kZSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKLSAg
ICAgICAgY2FzZSBBcnJheTo6QXJndW1lbnRzOiB7Ci0gICAgICAgICAgICBKU1ZhbHVlT3BlcmFu
ZCB2YWx1ZSh0aGlzLCBjaGlsZDMpOwotICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2go
dGhpcyk7Ci0gICAgICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaDIodGhpcyk7Ci0gICAgICAg
ICAgICAKLSAgICAgICAgICAgIEdQUlJlZyB2YWx1ZVJlZyA9IHZhbHVlLmdwcigpOwotICAgICAg
ICAgICAgR1BSUmVnIHNjcmF0Y2hSZWcgPSBzY3JhdGNoLmdwcigpOwotICAgICAgICAgICAgR1BS
UmVnIHNjcmF0Y2gyUmVnID0gc2NyYXRjaDIuZ3ByKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAg
ICAgIGlmICghbV9jb21waWxlT2theSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAg
ICAgICAgIC8vIFR3byByZWFsbHkgbGFtZSBjaGVja3MuCi0gICAgICAgICAgICBzcGVjdWxhdGlv
bkNoZWNrKAotICAgICAgICAgICAgICAgIFVuY291bnRhYmxlLCBKU1ZhbHVlU291cmNlKCksIDAs
Ci0gICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoMzIoCi0gICAgICAgICAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLAotICAgICAgICAgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBBcmd1bWVudHM6Om9mZnNldE9m
TnVtQXJndW1lbnRzKCkpKSk7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAg
ICAgICAgICAgIFVuY291bnRhYmxlLCBKU1ZhbHVlU291cmNlKCksIDAsCi0gICAgICAgICAgICAg
ICAgbV9qaXQuYnJhbmNoVGVzdFB0cigKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6Ok5vblplcm8sCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KAotICAgICAgICAgICAgICAgICAgICAgICAgYmFzZVJlZywgQXJndW1lbnRzOjpvZmZzZXRPZlNs
b3dBcmd1bWVudERhdGEoKSkpKTsKLQotICAgICAgICAgICAgbV9qaXQubW92ZShwcm9wZXJ0eVJl
Zywgc2NyYXRjaDJSZWcpOwotICAgICAgICAgICAgbV9qaXQuc2lnbkV4dGVuZDMyVG9QdHIoc2Ny
YXRjaDJSZWcsIHNjcmF0Y2gyUmVnKTsKLSAgICAgICAgICAgIG1faml0LmxvYWRQdHIoCi0gICAg
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgQXJndW1lbnRzOjpv
ZmZzZXRPZlJlZ2lzdGVycygpKSwKLSAgICAgICAgICAgICAgICBzY3JhdGNoUmVnKTsKLSAgICAg
ICAgICAgIAotICAgICAgICAgICAgbV9qaXQuc3RvcmU2NCgKLSAgICAgICAgICAgICAgICB2YWx1
ZVJlZywKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KAotICAgICAg
ICAgICAgICAgICAgICBzY3JhdGNoUmVnLCBzY3JhdGNoMlJlZywgTWFjcm9Bc3NlbWJsZXI6OlRp
bWVzRWlnaHQsCi0gICAgICAgICAgICAgICAgICAgIENhbGxGcmFtZTo6dGhpc0FyZ3VtZW50T2Zm
c2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpICsgc2l6ZW9mKFJlZ2lzdGVyKSkpOwotICAgICAgICAg
ICAgCi0gICAgICAgICAgICBub1Jlc3VsdChub2RlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgICAgICAgICAKICAgICAgICAgZGVmYXVsdDogewogICAgICAgICAgICAgVHlw
ZWRBcnJheVR5cGUgdHlwZSA9IGFycmF5TW9kZS50eXBlZEFycmF5VHlwZSgpOwogICAgICAgICAg
ICAgaWYgKGlzSW50KHR5cGUpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDE4MDg3NSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03
MjIsOSArNzIyLDEyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNoZWNrQXJyYXkoTm9kZSogbm8K
ICAgICAgICAgbm9SZXN1bHQobV9jdXJyZW50Tm9kZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
Ci0gICAgY2FzZSBBcnJheTo6QXJndW1lbnRzOgotICAgICAgICBzcGVjdWxhdGVDZWxsVHlwZVdp
dGhvdXRUeXBlRmlsdGVyaW5nKG5vZGUtPmNoaWxkMSgpLCBiYXNlUmVnLCBBcmd1bWVudHNUeXBl
KTsKLQorICAgIGNhc2UgQXJyYXk6OkRpcmVjdEFyZ3VtZW50czoKKyAgICAgICAgc3BlY3VsYXRl
Q2VsbFR5cGVXaXRob3V0VHlwZUZpbHRlcmluZyhub2RlLT5jaGlsZDEoKSwgYmFzZVJlZywgRGly
ZWN0QXJndW1lbnRzVHlwZSk7CisgICAgICAgIG5vUmVzdWx0KG1fY3VycmVudE5vZGUpOworICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBBcnJheTo6U2NvcGVkQXJndW1lbnRzOgorICAgICAgICBz
cGVjdWxhdGVDZWxsVHlwZVdpdGhvdXRUeXBlRmlsdGVyaW5nKG5vZGUtPmNoaWxkMSgpLCBiYXNl
UmVnLCBTY29wZWRBcmd1bWVudHNUeXBlKTsKICAgICAgICAgbm9SZXN1bHQobV9jdXJyZW50Tm9k
ZSk7CiAgICAgICAgIHJldHVybjsKICAgICBkZWZhdWx0OgpAQCAtNDA4OCw3ICs0MDkxLDcgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldFR5cGVkQXJyYQogICAgIGludDMyUmVzdWx0
KHZlY3RvckdQUiwgbm9kZSk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRC
eVZhbE9uQXJndW1lbnRzKE5vZGUqIG5vZGUpCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
R2V0QnlWYWxPbkRpcmVjdEFyZ3VtZW50cyhOb2RlKiBub2RlKQogewogICAgIFNwZWN1bGF0ZUNl
bGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgIFNwZWN1bGF0ZVN0cmlj
dEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBub2RlLT5jaGlsZDIoKSk7CkBAIC00MTAzLDgw
ICs0MTA2LDg5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uQXIKICAg
ICBHUFJSZWcgcmVzdWx0UmVnID0gcmVzdWx0LmdwcigpOwogI2lmIFVTRShKU1ZBTFVFMzJfNjQp
CiAgICAgR1BSUmVnIHJlc3VsdFRhZ1JlZyA9IHJlc3VsdFRhZy5ncHIoKTsKKyAgICBKU1ZhbHVl
UmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVzdWx0VGFnUmVnLCByZXN1bHRSZWcpOwor
I2Vsc2UKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVzdWx0UmVn
KTsKICNlbmRpZgogICAgIEdQUlJlZyBzY3JhdGNoUmVnID0gc2NyYXRjaC5ncHIoKTsKICAgICAK
ICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCiAgICAgICAgIHJldHVybjsKLSAgCi0gICAgQVNTRVJU
KEFycmF5TW9kZShBcnJheTo6QXJndW1lbnRzKS5hbHJlYWR5Q2hlY2tlZChtX2ppdC5ncmFwaCgp
LCBub2RlLCBtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpKSk7CiAgICAgCi0gICAgLy8g
VHdvIHJlYWxseSBsYW1lIGNoZWNrcy4KLSAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAgICBF
eG90aWNPYmplY3RNb2RlLCBKU1ZhbHVlU291cmNlKCksIDAsCi0gICAgICAgIG1faml0LmJyYW5j
aDMyKAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlS
ZWcsCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBBcmd1bWVu
dHM6Om9mZnNldE9mTnVtQXJndW1lbnRzKCkpKSk7CisgICAgQVNTRVJUKEFycmF5TW9kZShBcnJh
eTo6RGlyZWN0QXJndW1lbnRzKS5hbHJlYWR5Q2hlY2tlZChtX2ppdC5ncmFwaCgpLCBub2RlLCBt
X3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpKSk7CisgICAgCiAgICAgc3BlY3VsYXRpb25D
aGVjaygKICAgICAgICAgRXhvdGljT2JqZWN0TW9kZSwgSlNWYWx1ZVNvdXJjZSgpLCAwLAogICAg
ICAgICBtX2ppdC5icmFuY2hUZXN0UHRyKAogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5v
blplcm8sCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcygKLSAgICAgICAgICAg
ICAgICBiYXNlUmVnLCBBcmd1bWVudHM6Om9mZnNldE9mU2xvd0FyZ3VtZW50RGF0YSgpKSkpOwot
ICAgIAotICAgIG1faml0Lm1vdmUocHJvcGVydHlSZWcsIHJlc3VsdFJlZyk7Ci0gICAgbV9qaXQu
c2lnbkV4dGVuZDMyVG9QdHIocmVzdWx0UmVnLCByZXN1bHRSZWcpOwotICAgIG1faml0LmxvYWRQ
dHIoCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEFyZ3VtZW50czo6
b2Zmc2V0T2ZSZWdpc3RlcnMoKSksCi0gICAgICAgIHNjcmF0Y2hSZWcpOworICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgRGlyZWN0QXJndW1lbnRzOjpvZmZzZXRP
Zk92ZXJyaWRlcygpKSkpOworICAgIHNwZWN1bGF0aW9uQ2hlY2soCisgICAgICAgIEV4b3RpY09i
amVjdE1vZGUsIEpTVmFsdWVTb3VyY2UoKSwgMCwKKyAgICAgICAgbV9qaXQuYnJhbmNoMzIoCisg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywKKyAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIERpcmVjdEFyZ3VtZW50
czo6b2Zmc2V0T2ZMZW5ndGgoKSkpKTsKICAgICAKLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAg
IG1faml0LmxvYWQzMigKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleCgKLSAgICAg
ICAgICAgIHNjcmF0Y2hSZWcsIHJlc3VsdFJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQs
Ci0gICAgICAgICAgICBDYWxsRnJhbWU6OnRoaXNBcmd1bWVudE9mZnNldCgpICogc2l6ZW9mKFJl
Z2lzdGVyKSArIHNpemVvZihSZWdpc3RlcikgKwotICAgICAgICAgICAgT0JKRUNUX09GRlNFVE9G
KEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLAotICAgICAgICByZXN1bHRUYWdSZWcpOwotICAgIG1f
aml0LmxvYWQzMigKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleCgKLSAgICAgICAg
ICAgIHNjcmF0Y2hSZWcsIHJlc3VsdFJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsCi0g
ICAgICAgICAgICBDYWxsRnJhbWU6OnRoaXNBcmd1bWVudE9mZnNldCgpICogc2l6ZW9mKFJlZ2lz
dGVyKSArIHNpemVvZihSZWdpc3RlcikgKwotICAgICAgICAgICAgT0JKRUNUX09GRlNFVE9GKEpT
VmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwKLSAgICAgICAgcmVzdWx0UmVnKTsKLSAgICBqc1Zh
bHVlUmVzdWx0KHJlc3VsdFRhZ1JlZywgcmVzdWx0UmVnLCBub2RlKTsKLSNlbHNlCi0gICAgbV9q
aXQubG9hZDY0KAorICAgIG1faml0LmxvYWRWYWx1ZSgKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OkJhc2VJbmRleCgKLSAgICAgICAgICAgIHNjcmF0Y2hSZWcsIHJlc3VsdFJlZywgTWFjcm9Bc3Nl
bWJsZXI6OlRpbWVzRWlnaHQsCi0gICAgICAgICAgICBDYWxsRnJhbWU6OnRoaXNBcmd1bWVudE9m
ZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSArIHNpemVvZihSZWdpc3RlcikpLAotICAgICAgICBy
ZXN1bHRSZWcpOwotICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVnLCBub2RlKTsKLSNlbmRpZgor
ICAgICAgICAgICAgYmFzZVJlZywgcHJvcGVydHlSZWcsIFRpbWVzRWlnaHQsIERpcmVjdEFyZ3Vt
ZW50czo6c3RvcmFnZU9mZnNldCgpKSwKKyAgICAgICAgcmVzdWx0UmVncyk7CisgICAgCisgICAg
anNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBub2RlKTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZUdldEFyZ3VtZW50c0xlbmd0aChOb2RlKiBub2RlKQordm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25TY29wZWRBcmd1bWVudHMoTm9kZSogbm9kZSkKIHsKICAg
ICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICBH
UFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIFJldXNlLCBiYXNlKTsKKyAgICBTcGVjdWxhdGVTdHJp
Y3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbm9kZS0+Y2hpbGQyKCkpOworICAgIEdQUlRl
bXBvcmFyeSByZXN1bHQodGhpcyk7CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICBHUFJUZW1w
b3JhcnkgcmVzdWx0VGFnKHRoaXMpOworI2VuZGlmCisgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2go
dGhpcyk7CisgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2gyKHRoaXMpOwogICAgIAogICAgIEdQUlJl
ZyBiYXNlUmVnID0gYmFzZS5ncHIoKTsKKyAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0
eS5ncHIoKTsKICAgICBHUFJSZWcgcmVzdWx0UmVnID0gcmVzdWx0LmdwcigpOworI2lmIFVTRShK
U1ZBTFVFMzJfNjQpCisgICAgR1BSUmVnIHJlc3VsdFRhZ1JlZyA9IHJlc3VsdFRhZy5ncHIoKTsK
KyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVzdWx0VGFnUmVnLCBy
ZXN1bHRSZWcpOworI2Vsc2UKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJl
Z3MocmVzdWx0UmVnKTsKKyNlbmRpZgorICAgIEdQUlJlZyBzY3JhdGNoUmVnID0gc2NyYXRjaC5n
cHIoKTsKKyAgICBHUFJSZWcgc2NyYXRjaDJSZWcgPSBzY3JhdGNoMi5ncHIoKTsKICAgICAKICAg
ICBpZiAoIW1fY29tcGlsZU9rYXkpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBBU1NFUlQo
QXJyYXlNb2RlKEFycmF5OjpBcmd1bWVudHMpLmFscmVhZHlDaGVja2VkKG1faml0LmdyYXBoKCks
IG5vZGUsIG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSkpKTsKKyAgICBBU1NFUlQoQXJy
YXlNb2RlKEFycmF5OjpTY29wZWRBcmd1bWVudHMpLmFscmVhZHlDaGVja2VkKG1faml0LmdyYXBo
KCksIG5vZGUsIG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSkpKTsKKyAgICAKKyAgICBt
X2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIFNjb3BlZEFyZ3Vt
ZW50czo6b2Zmc2V0T2ZUYWJsZSgpKSwgc2NyYXRjaFJlZyk7CisgICAgbV9qaXQubG9hZFB0cihN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBTY29wZWRBcmd1bWVudHM6Om9mZnNldE9m
U2NvcGUoKSksIHNjcmF0Y2gyUmVnKTsKICAgICAKICAgICBzcGVjdWxhdGlvbkNoZWNrKAogICAg
ICAgICBFeG90aWNPYmplY3RNb2RlLCBKU1ZhbHVlU291cmNlKCksIDAsCi0gICAgICAgIG1faml0
LmJyYW5jaFRlc3Q4KAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sCi0gICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBBcmd1bWVudHM6Om9mZnNl
dE9mT3ZlcnJvZGVMZW5ndGgoKSkpKTsKKyAgICAgICAgbV9qaXQuYnJhbmNoMzIoCisgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywKKyAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKFNjb3BlZEFyZ3VtZW50c1RhYmxlOjpvZmZzZXRP
Zkxlbmd0aCgpKSkpOworICAgIAorICAgIG1faml0LmxvYWRQdHIoCisgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hSZWcsIFNjb3BlZEFyZ3VtZW50c1RhYmxlOjpvZmZzZXRP
ZkFyZ3VtZW50cygpKSwKKyAgICAgICAgc2NyYXRjaFJlZyk7CisgICAgbV9qaXQubG9hZDMyKE1h
Y3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc2NyYXRjaFJlZywgcHJvcGVydHlSZWcsIFRpbWVzRm91
ciksIHNjcmF0Y2hSZWcpOworICAgIAorICAgIHNwZWN1bGF0aW9uQ2hlY2soCisgICAgICAgIEV4
b3RpY09iamVjdE1vZGUsIEpTVmFsdWVTb3VyY2UoKSwgMCwKKyAgICAgICAgbV9qaXQuYnJhbmNo
MzIoCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHNjcmF0Y2hSZWcsIFRydXN0
ZWRJbW0zMihTY29wZU9mZnNldDo6aW52YWxpZE9mZnNldCkpKTsKKyAgICAKKyAgICBtX2ppdC5s
b2FkVmFsdWUoCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoCisgICAgICAgICAg
ICBiYXNlMlJlZywgcHJvcGVydHlSZWcsIFRpbWVzRWlnaHQsIEpTRW52aXJvbm1lbnRSZWNvcmQ6
Om9mZnNldE9mVmFyaWFibGVzKCkpLAorICAgICAgICByZXN1bHRSZWdzKTsKICAgICAKLSAgICBt
X2ppdC5sb2FkMzIoCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEFy
Z3VtZW50czo6b2Zmc2V0T2ZOdW1Bcmd1bWVudHMoKSksCi0gICAgICAgIHJlc3VsdFJlZyk7Ci0g
ICAgaW50MzJSZXN1bHQocmVzdWx0UmVnLCBub2RlKTsKKyAgICBqc1ZhbHVlUmVzdWx0KHJlc3Vs
dFJlZ3MsIG5vZGUpOwogfQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0U2NvcGUo
Tm9kZSogbm9kZSkKQEAgLTQyMzIsOCArNDI0NCw1NiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlR2V0QXJyYXlMZW5nCiAgICAgICAgIGludDMyUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7
CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6IHsKLSAg
ICAgICAgY29tcGlsZUdldEFyZ3VtZW50c0xlbmd0aChub2RlKTsKKyAgICBjYXNlIEFycmF5OjpE
aXJlY3RBcmd1bWVudHM6IHsKKyAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlz
LCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgUmV1
c2UsIGJhc2UpOworICAgICAgICAKKyAgICAgICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdwcigp
OworICAgICAgICBHUFJSZWcgcmVzdWx0UmVnID0gcmVzdWx0LmdwcigpOworICAgICAgICAKKyAg
ICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAK
KyAgICAgICAgQVNTRVJUKEFycmF5TW9kZShBcnJheTo6RGlyZWN0QXJndW1lbnRzKS5hbHJlYWR5
Q2hlY2tlZChtX2ppdC5ncmFwaCgpLCBub2RlLCBtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQx
KCkpKSk7CisgICAgICAgIAorICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAorICAgICAgICAgICAg
RXhvdGljT2JqZWN0TW9kZSwgSlNWYWx1ZVNvdXJjZSgpLCAwLAorICAgICAgICAgICAgbV9qaXQu
YnJhbmNoVGVzdFB0cigKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywK
KyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBEaXJlY3RB
cmd1bWVudHM6Om9mZnNldE9mT3ZlcnJpZGVzKCkpKSk7CisgICAgICAgIAorICAgICAgICBtX2pp
dC5sb2FkMzIoCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBE
aXJlY3RBcmd1bWVudHM6Om9mZnNldE9mTGVuZ3RoKCkpLCByZXN1bHRSZWcpOworICAgICAgICAK
KyAgICAgICAgaW50MzJSZXN1bHQocmVzdWx0UmVnLCBub2RlKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorICAgIGNhc2UgQXJyYXk6OlNjb3BlZEFyZ3VtZW50czogeworICAgICAgICBTcGVjdWxh
dGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgR1BSVGVt
cG9yYXJ5IHJlc3VsdCh0aGlzLCBSZXVzZSwgYmFzZSk7CisgICAgICAgIAorICAgICAgICBHUFJS
ZWcgYmFzZVJlZyA9IGJhc2UuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRSZWcgPSByZXN1
bHQuZ3ByKCk7CisgICAgICAgIAorICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBBU1NFUlQoQXJyYXlNb2RlKEFycmF5OjpT
Y29wZWRBcmd1bWVudHMpLmFscmVhZHlDaGVja2VkKG1faml0LmdyYXBoKCksIG5vZGUsIG1fc3Rh
dGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSkpKTsKKyAgICAgICAgCisgICAgICAgIHNwZWN1bGF0
aW9uQ2hlY2soCisgICAgICAgICAgICBFeG90aWNPYmplY3RNb2RlLCBKU1ZhbHVlU291cmNlKCks
IDAsCisgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0OCgKKyAgICAgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6Tm9uWmVybywKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhiYXNlUmVnLCBTY29wZWRBcmd1bWVudHM6Om9mZnNldE9mT3ZlcnJvZGVUaGluZ3MoKSkp
KTsKKyAgICAgICAgCisgICAgICAgIG1faml0LmxvYWRQdHIoCisgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBTY29wZWRBcmd1bWVudHM6Om9mZnNldE9mVGFibGUo
KSksIHJlc3VsdFJlZyk7CisgICAgICAgIAorICAgICAgICBtX2ppdC5sb2FkMzIoCisgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRSZWcsIFNjb3BlZEFyZ3VtZW50c1Rh
YmxlOjpvZmZzZXRPZkxlbmd0aCgpKSwKKyAgICAgICAgICAgIHJlc3VsdFJlZyk7CisgICAgICAg
IAorICAgICAgICBpbnQzMlJlc3VsdChyZXN1bHRSZWcsIG5vZGUpOwogICAgICAgICBicmVhazsK
ICAgICB9CiAgICAgZGVmYXVsdDogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24gMTgwODc1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMTUy
LDggKzIxNTIsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBjb21waWxlR2V0QnlWYWxPblN0cmluZyhO
b2RlKik7CiAgICAgdm9pZCBjb21waWxlRnJvbUNoYXJDb2RlKE5vZGUqKTsgCiAKLSAgICB2b2lk
IGNvbXBpbGVHZXRCeVZhbE9uQXJndW1lbnRzKE5vZGUqKTsKLSAgICB2b2lkIGNvbXBpbGVHZXRB
cmd1bWVudHNMZW5ndGgoTm9kZSopOworICAgIHZvaWQgY29tcGlsZUdldEJ5VmFsT25EaXJlY3RB
cmd1bWVudHMoTm9kZSopOworICAgIHZvaWQgY29tcGlsZUdldEJ5VmFsT25TY29wZWRBcmd1bWVu
dHMoTm9kZSopOworICAgIAogICAgIHZvaWQgY29tcGlsZUdldFNjb3BlKE5vZGUqKTsKICAgICB2
b2lkIGNvbXBpbGVTa2lwU2NvcGUoTm9kZSopOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuY3BwCShyZXZpc2lvbiAxODA4
NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTM1LDcgKzM1LDYgQEAgVmFyaWFibGVBY2Nlc3NEYXRhOjpWYXJp
YWJsZUFjY2Vzc0RhdGEoKQogICAgICwgbV9wcmVkaWN0aW9uKFNwZWNOb25lKQogICAgICwgbV9h
cmd1bWVudEF3YXJlUHJlZGljdGlvbihTcGVjTm9uZSkKICAgICAsIG1fZmxhZ3MoMCkKLSAgICAs
IG1faXNDYXB0dXJlZChmYWxzZSkKICAgICAsIG1fc2hvdWxkTmV2ZXJVbmJveChmYWxzZSkKICAg
ICAsIG1faXNBcmd1bWVudHNBbGlhcyhmYWxzZSkKICAgICAsIG1fc3RydWN0dXJlQ2hlY2tIb2lz
dGluZ0ZhaWxlZChmYWxzZSkKQEAgLTQ3LDEzICs0NiwxMiBAQCBWYXJpYWJsZUFjY2Vzc0RhdGE6
OlZhcmlhYmxlQWNjZXNzRGF0YSgpCiAgICAgY2xlYXJWb3RlcygpOwogfQogCi1WYXJpYWJsZUFj
Y2Vzc0RhdGE6OlZhcmlhYmxlQWNjZXNzRGF0YShWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwsIGJvb2wg
aXNDYXB0dXJlZCkKK1ZhcmlhYmxlQWNjZXNzRGF0YTo6VmFyaWFibGVBY2Nlc3NEYXRhKFZpcnR1
YWxSZWdpc3RlciBsb2NhbCkKICAgICA6IG1fbG9jYWwobG9jYWwpCiAgICAgLCBtX3ByZWRpY3Rp
b24oU3BlY05vbmUpCiAgICAgLCBtX2FyZ3VtZW50QXdhcmVQcmVkaWN0aW9uKFNwZWNOb25lKQog
ICAgICwgbV9mbGFncygwKQotICAgICwgbV9pc0NhcHR1cmVkKGlzQ2FwdHVyZWQpCi0gICAgLCBt
X3Nob3VsZE5ldmVyVW5ib3goaXNDYXB0dXJlZCkKKyAgICAsIG1fc2hvdWxkTmV2ZXJVbmJveChm
YWxzZSkKICAgICAsIG1faXNBcmd1bWVudHNBbGlhcyhmYWxzZSkKICAgICAsIG1fc3RydWN0dXJl
Q2hlY2tIb2lzdGluZ0ZhaWxlZChmYWxzZSkKICAgICAsIG1fY2hlY2tBcnJheUhvaXN0aW5nRmFp
bGVkKGZhbHNlKQpAQCAtNjQsMTIgKzYyLDYgQEAgVmFyaWFibGVBY2Nlc3NEYXRhOjpWYXJpYWJs
ZUFjY2Vzc0RhdGEoVgogICAgIGNsZWFyVm90ZXMoKTsKIH0KIAotYm9vbCBWYXJpYWJsZUFjY2Vz
c0RhdGE6Om1lcmdlSXNDYXB0dXJlZChib29sIGlzQ2FwdHVyZWQpCi17Ci0gICAgcmV0dXJuIGNo
ZWNrQW5kU2V0KG1fc2hvdWxkTmV2ZXJVbmJveCwgbV9zaG91bGROZXZlclVuYm94IHx8IGlzQ2Fw
dHVyZWQpCi0gICAgICAgIHwgY2hlY2tBbmRTZXQobV9pc0NhcHR1cmVkLCBtX2lzQ2FwdHVyZWQg
fHwgaXNDYXB0dXJlZCk7Ci19Ci0KIGJvb2wgVmFyaWFibGVBY2Nlc3NEYXRhOjptZXJnZVNob3Vs
ZE5ldmVyVW5ib3goYm9vbCBzaG91bGROZXZlclVuYm94KQogewogICAgIGJvb2wgbmV3U2hvdWxk
TmV2ZXJVbmJveCA9IG1fc2hvdWxkTmV2ZXJVbmJveCB8IHNob3VsZE5ldmVyVW5ib3g7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRh
LmgJKHJldmlzaW9uIDE4MDg3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFy
aWFibGVBY2Nlc3NEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDExLTIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00OCw3ICs0OCw3IEBAIGVudW0g
RG91YmxlQmFsbG90IHsgVm90ZVZhbHVlLCBWb3RlRG91YmwKIGNsYXNzIFZhcmlhYmxlQWNjZXNz
RGF0YSA6IHB1YmxpYyBVbmlvbkZpbmQ8VmFyaWFibGVBY2Nlc3NEYXRhPiB7CiBwdWJsaWM6CiAg
ICAgVmFyaWFibGVBY2Nlc3NEYXRhKCk7Ci0gICAgVmFyaWFibGVBY2Nlc3NEYXRhKFZpcnR1YWxS
ZWdpc3RlciBsb2NhbCwgYm9vbCBpc0NhcHR1cmVkKTsKKyAgICBWYXJpYWJsZUFjY2Vzc0RhdGEo
VmlydHVhbFJlZ2lzdGVyIGxvY2FsKTsKICAgICAKICAgICBWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwo
KQogICAgIHsKQEAgLTYyLDEzICs2Miw2IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fbWFj
aGluZUxvY2FsOwogICAgIH0KIAotICAgIGJvb2wgbWVyZ2VJc0NhcHR1cmVkKGJvb2wgaXNDYXB0
dXJlZCk7Ci0gICAgCi0gICAgYm9vbCBpc0NhcHR1cmVkKCkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBtX2lzQ2FwdHVyZWQ7Ci0gICAgfQotICAgIAogICAgIGJvb2wgbWVyZ2VJc1Byb2ZpdGFibGVU
b1VuYm94KGJvb2wgaXNQcm9maXRhYmxlVG9VbmJveCkKICAgICB7CiAgICAgICAgIHJldHVybiBj
aGVja0FuZFNldChtX2lzUHJvZml0YWJsZVRvVW5ib3gsIG1faXNQcm9maXRhYmxlVG9VbmJveCB8
fCBpc1Byb2ZpdGFibGVUb1VuYm94KTsKQEAgLTg2LDcgKzc5LDYgQEAgcHVibGljOgogICAgIC8v
IG1lYW4gdGhhdCB3ZSBoYXZlIGFjdHVhbGx5IGRvbmUgc28uCiAgICAgYm9vbCBzaG91bGROZXZl
clVuYm94KCkKICAgICB7Ci0gICAgICAgIEFTU0VSVCghKG1faXNDYXB0dXJlZCAmJiAhbV9zaG91
bGROZXZlclVuYm94KSk7CiAgICAgICAgIHJldHVybiBtX3Nob3VsZE5ldmVyVW5ib3g7CiAgICAg
fQogICAgIApAQCAtMTkzLDcgKzE4NSw2IEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJUKGlzUm9v
dCgpKTsKICAgICAgICAgYm9vbCBkb3VibGVTdGF0ZSA9IG1fZG91YmxlRm9ybWF0U3RhdGUgPT0g
VXNpbmdEb3VibGVGb3JtYXQ7CiAgICAgICAgIEFTU0VSVCghKGRvdWJsZVN0YXRlICYmIHNob3Vs
ZE5ldmVyVW5ib3goKSkpOwotICAgICAgICBBU1NFUlQoIShkb3VibGVTdGF0ZSAmJiBpc0NhcHR1
cmVkKCkpKTsKICAgICAgICAgcmV0dXJuIGRvdWJsZVN0YXRlICYmIGlzUHJvZml0YWJsZVRvVW5i
b3goKTsKICAgICB9CiAgICAgCkBAIC0yMzMsNyArMjI0LDYgQEAgcHJpdmF0ZToKICAgICBTcGVj
dWxhdGVkVHlwZSBtX2FyZ3VtZW50QXdhcmVQcmVkaWN0aW9uOwogICAgIE5vZGVGbGFncyBtX2Zs
YWdzOwogCi0gICAgYm9vbCBtX2lzQ2FwdHVyZWQ7CiAgICAgYm9vbCBtX3Nob3VsZE5ldmVyVW5i
b3g7CiAgICAgYm9vbCBtX2lzQXJndW1lbnRzQWxpYXM7CiAgICAgYm9vbCBtX3N0cnVjdHVyZUNo
ZWNrSG9pc3RpbmdGYWlsZWQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Zh
cmlhYmxlQWNjZXNzRGF0YUR1bXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5jcHAJKHJldmlzaW9uIDE4MDg3NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTYyLDkgKzYyLDcgQEAgdm9pZCBWYXJpYWJsZUFjY2Vzc0Rh
dGFEdW1wOjpkdW1wKFByaW50UwogICAgICAgICBpbmRleCAvPSAyNjsKICAgICB9CiAgICAgCi0g
ICAgaWYgKG1fZGF0YS0+aXNDYXB0dXJlZCgpKQotICAgICAgICBvdXQucHJpbnQoIioiKTsKLSAg
ICBlbHNlIGlmIChtX2RhdGEtPnNob3VsZE5ldmVyVW5ib3goKSkKKyAgICBpZiAobV9kYXRhLT5z
aG91bGROZXZlclVuYm94KCkpCiAgICAgICAgIG91dC5wcmludCgiISIpOwogICAgIGVsc2UgaWYg
KCFtX2RhdGEtPnNob3VsZFVuYm94SWZQb3NzaWJsZSgpKQogICAgICAgICBvdXQucHJpbnQoIn4i
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRh
RHVtcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFi
bGVBY2Nlc3NEYXRhRHVtcC5oCShyZXZpc2lvbiAxODA4NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBSZXBv
c2l0b3J5LmgJKHJldmlzaW9uIDE4MDg3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ2LDYgKzQ2
LDggQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewogICAgIG1hY3JvKEJ1dHRlcmZs
eV9wdWJsaWNMZW5ndGgsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkgXAogICAg
IG1hY3JvKEJ1dHRlcmZseV92ZWN0b3JMZW5ndGgsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZWZWN0b3JM
ZW5ndGgoKSkgXAogICAgIG1hY3JvKENhbGxGcmFtZV9jYWxsZXJGcmFtZSwgQ2FsbEZyYW1lOjpj
YWxsZXJGcmFtZU9mZnNldCgpKSBcCisgICAgbWFjcm8oRGlyZWN0QXJndW1lbnRzX2xlbmd0aCwg
RGlyZWN0QXJndW1lbnRzOjpvZmZzZXRPZkxlbmd0aCgpKSBcCisgICAgbWFjcm8oRGlyZWN0QXJn
dW1lbnRzX292ZXJyaWRlcywgRGlyZWN0QXJndW1lbnRzOjpvZmZzZXRPZk92ZXJyaWRlcygpKSBc
CiAgICAgbWFjcm8oR2V0dGVyU2V0dGVyX2dldHRlciwgR2V0dGVyU2V0dGVyOjpvZmZzZXRPZkdl
dHRlcigpKSBcCiAgICAgbWFjcm8oR2V0dGVyU2V0dGVyX3NldHRlciwgR2V0dGVyU2V0dGVyOjpv
ZmZzZXRPZlNldHRlcigpKSBcCiAgICAgbWFjcm8oSlNBcnJheUJ1ZmZlclZpZXdfbGVuZ3RoLCBK
U0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZMZW5ndGgoKSkgXApAQCAtNzIsNiArNzQsMTEgQEAg
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewogICAgIG1hY3JvKEpTV3JhcHBlck9iamVj
dF9pbnRlcm5hbFZhbHVlLCBKU1dyYXBwZXJPYmplY3Q6OmludGVybmFsVmFsdWVPZmZzZXQoKSkg
XAogICAgIG1hY3JvKE1hcmtlZEFsbG9jYXRvcl9mcmVlTGlzdEhlYWQsIE1hcmtlZEFsbG9jYXRv
cjo6b2Zmc2V0T2ZGcmVlTGlzdEhlYWQoKSkgXAogICAgIG1hY3JvKE1hcmtlZEJsb2NrX21hcmtC
aXRzLCBNYXJrZWRCbG9jazo6b2Zmc2V0T2ZNYXJrcygpKSBcCisgICAgbWFjcm8oU2NvcGVkQXJn
dW1lbnRzX292ZXJyb2RlVGhpbmdzLCBTY29wZWRBcmd1bWVudHM6Om9mZnNldE9mT3ZlcnJvZGVU
aGluZ3MoKSkpIFwKKyAgICBtYWNybyhTY29wZWRBcmd1bWVudHNfc2NvcGUsIFNjb3BlZEFyZ3Vt
ZW50czo6b2ZmZXRPZlNjb3BlKCkpKSBcCisgICAgbWFjcm8oU2NvcGVkQXJndW1lbnRzX3RhYmxl
LCBTY29wZWRBcmd1bWVudHM6Om9mZmV0T2ZUYWJsZSgpKSkgXAorICAgIG1hY3JvKFNjb3BlZEFy
Z3VtZW50c1RhYmxlX2FyZ3VtZW50cywgU2NvcGVkQXJndW1lbnRzVGFibGU6Om9mZmV0T2ZBcmd1
bWVudHMoKSkpIFwKKyAgICBtYWNybyhTY29wZWRBcmd1bWVudHNUYWJsZV9sZW5ndGgsIFNjb3Bl
ZEFyZ3VtZW50c1RhYmxlOjpvZmZldE9mTGVuZ3RoKCkpKSBcCiAgICAgbWFjcm8oU3RyaW5nSW1w
bF9kYXRhLCBTdHJpbmdJbXBsOjpkYXRhT2Zmc2V0KCkpIFwKICAgICBtYWNybyhTdHJpbmdJbXBs
X2hhc2hBbmRGbGFncywgU3RyaW5nSW1wbDo6ZmxhZ3NPZmZzZXQoKSkgXAogICAgIG1hY3JvKFN0
cnVjdHVyZV9jbGFzc0luZm8sIFN0cnVjdHVyZTo6Y2xhc3NJbmZvT2Zmc2V0KCkpIFwKQEAgLTgw
LDYgKzg3LDggQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewogICAgIG1hY3JvKFN0
cnVjdHVyZV9zdHJ1Y3R1cmVJRCwgU3RydWN0dXJlOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKQogCiAj
ZGVmaW5lIEZPUl9FQUNIX0lOREVYRURfQUJTVFJBQ1RfSEVBUChtYWNybykgXAorICAgIG1hY3Jv
KERpcmVjdEFyZ3VtZW50c19zdG9yYWdlLCBEaXJlY3RBcmd1bWVudHM6OnN0b3JhZ2VPZmZzZXQo
KSwgc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkgXAorICAgIG1hY3JvKEpTRW52aXJvbm1lbnRSZWNv
cmRfdmFyaWFibGUsIEpTRW52aXJvbm1lbnRSZWNvcmQ6Om9mZnNldE9mVmFyaWFibGVzKCksIHNp
emVvZihFbmNvZGVkSlNWYWx1ZSkpIFwKICAgICBtYWNybyhKU1JvcGVTdHJpbmdfZmliZXJzLCBK
U1JvcGVTdHJpbmc6Om9mZnNldE9mRmliZXJzKCksIHNpemVvZihXcml0ZUJhcnJpZXI8SlNTdHJp
bmc+KSkgXAogICAgIG1hY3JvKGNoYXJhY3RlcnM4LCAwLCBzaXplb2YoTENoYXIpKSBcCiAgICAg
bWFjcm8oY2hhcmFjdGVyczE2LCAwLCBzaXplb2YoVUNoYXIpKSBcCkBAIC04Nyw2ICs5Niw3IEBA
IG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKICAgICBtYWNybyhpbmRleGVkRG91Ymxl
UHJvcGVydGllcywgMCwgc2l6ZW9mKGRvdWJsZSkpIFwKICAgICBtYWNybyhpbmRleGVkQ29udGln
dW91c1Byb3BlcnRpZXMsIDAsIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpIFwKICAgICBtYWNybyhp
bmRleGVkQXJyYXlTdG9yYWdlUHJvcGVydGllcywgMCwgc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkg
XAorICAgIG1hY3JvKHNjb3BlZEFyZ3VlbW50c1RhYmxlQXJndW1lbnRzLCAwLCBzaXplb2YoaW50
MzJfdCkpIFwKICAgICBtYWNybyhzaW5nbGVDaGFyYWN0ZXJTdHJpbmdzLCAwLCBzaXplb2YoSlNT
dHJpbmcqKSkgXAogICAgIG1hY3JvKHZhcmlhYmxlcywgMCwgc2l6ZW9mKFJlZ2lzdGVyKSkKICAg
ICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5j
cHAJKHJldmlzaW9uIDE4MDg3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2Fw
YWJpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA5LDYgKzIwOSw4IEBAIGlubGluZSBD
YXBhYmlsaXR5TGV2ZWwgY2FuQ29tcGlsZShOb2RlKiAKICAgICAgICAgY2FzZSBBcnJheTo6SW50
MzI6CiAgICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZToKICAgICAgICAgY2FzZSBBcnJheTo6Q29u
dGlndW91czoKKyAgICAgICAgY2FzZSBBcnJheTo6RGlyZWN0QXJndW1lbnRzOgorICAgICAgICBj
YXNlIEFycmF5OjpTY29wZWRBcmd1bWVudHM6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ZGVmYXVsdDoKICAgICAgICAgICAgIGlmIChpc1R5cGVkVmlldyhub2RlLT5hcnJheU1vZGUoKS50
eXBlZEFycmF5VHlwZSgpKSkKQEAgLTIyMiw2ICsyMjQsOCBAQCBpbmxpbmUgQ2FwYWJpbGl0eUxl
dmVsIGNhbkNvbXBpbGUoTm9kZSogCiAgICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZToKICAgICAg
ICAgY2FzZSBBcnJheTo6Q29udGlndW91czoKICAgICAgICAgY2FzZSBBcnJheTo6U3RyaW5nOgor
ICAgICAgICBjYXNlIEFycmF5OjpEaXJlY3RBcmd1bWVudHM6CisgICAgICAgIGNhc2UgQXJyYXk6
OlNjb3BlZEFyZ3VtZW50czoKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0Ogog
ICAgICAgICAgICAgaWYgKGlzVHlwZWRWaWV3KG5vZGUtPmFycmF5TW9kZSgpLnR5cGVkQXJyYXlU
eXBlKCkpKQpAQCAtMjQ4LDYgKzI1Miw4IEBAIGlubGluZSBDYXBhYmlsaXR5TGV2ZWwgY2FuQ29t
cGlsZShOb2RlKiAKICAgICAgICAgY2FzZSBBcnJheTo6SW50MzI6CiAgICAgICAgIGNhc2UgQXJy
YXk6OkRvdWJsZToKICAgICAgICAgY2FzZSBBcnJheTo6Q29udGlndW91czoKKyAgICAgICAgY2Fz
ZSBBcnJheTo6RGlyZWN0QXJndW1lbnRzOgorICAgICAgICBjYXNlIEFycmF5OjpTY29wZWRBcmd1
bWVudHM6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAg
IGlmIChpc1R5cGVkVmlldyhub2RlLT5hcnJheU1vZGUoKS50eXBlZEFycmF5VHlwZSgpKSkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3Bw
CShyZXZpc2lvbiAxODA4NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2Vy
REZHVG9MTFZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjE5NSw2ICsyMTk1LDI1IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgICAgIAorICAgICAg
ICBjYXNlIEFycmF5OjpEaXJlY3RBcmd1bWVudHM6IHsKKyAgICAgICAgICAgIExWYWx1ZSBhcmd1
bWVudHMgPSBsb3dDZWxsKG1fb3V0LT5jaGlsZDEoKSk7CisgICAgICAgICAgICBzcGVjdWxhdGUo
CisgICAgICAgICAgICAgICAgRXhvdGljT2JqZWN0TW9kZSwgbm9WYWx1ZSgpLCBudWxscHRyLAor
ICAgICAgICAgICAgICAgIG1fb3V0Lm5vdE51bGwobV9vdXQubG9hZFB0cihhcmd1bWVudHMsIG1f
aGVhcHMuRGlyZWN0QXJndW1lbnRzX292ZXJyaWRlcykpKTsKKyAgICAgICAgICAgIHNldEludDMy
KG1fb3V0LmxvYWQzMk5vbk5lZ2F0aXZlKGFyZ3VtZW50cywgbV9oZWFwcy5EaXJlY3RBcmd1bWVu
dHNfbGVuZ3RoKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgICAg
IAorICAgICAgICBjYXNlIEFycmF5OjpTY29wZWRBcmd1bWVudHM6IHsKKyAgICAgICAgICAgIExW
YWx1ZSBhcmd1bWVudHMgPSBsb3dDZWxsKG1fb3V0LT5jaGlsZDEoKSk7CisgICAgICAgICAgICBz
cGVjdWxhdGUoCisgICAgICAgICAgICAgICAgRXhvdGljT2JqZWN0TW9kZSwgbm9WYWx1ZSgpLCBu
dWxscHRyLAorICAgICAgICAgICAgICAgIG1fb3V0Lm5vdFplcm84KG1fb3V0LmxvYWRQdHIoYXJn
dW1lbnRzLCBtX2hlYXBzLlNjb3BlZEFyZ3VtZW50c19vdmVycm9kZVRoaW5ncykpKTsKKyAgICAg
ICAgICAgIExWYWx1ZSB0YWJsZSA9IG1fb3V0LmxvYWRQdHIoYXJndW1lbnRzLCBtX2hlYXBzLlNj
b3BlZEFyZ3VtZW50c190YWJsZSk7CisgICAgICAgICAgICBzZXRJbnQzMihtX291dC5sb2FkMzJO
b25OZWdhdGl2ZSh0YWJsZSwgbV9oZWFwcy5TY29wZWRBcmd1bWVudHNUYWJsZV9sZW5ndGgpKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAgICAgCiAgICAgICAgIGRl
ZmF1bHQ6CiAgICAgICAgICAgICBpZiAoaXNUeXBlZFZpZXcobV9ub2RlLT5hcnJheU1vZGUoKS50
eXBlZEFycmF5VHlwZSgpKSkgewogICAgICAgICAgICAgICAgIHNldEludDMyKApAQCAtMjMxMiw2
ICsyMzMxLDQ5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAg
ICAgICAgICAgIAorICAgICAgICBjYXNlIEFycmF5OjpEaXJlY3RBcmd1bWVudHM6IHsKKyAgICAg
ICAgICAgIExWYWx1ZSBiYXNlID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAg
ICAgIExWYWx1ZSBpbmRleCA9IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAg
ICAgCisgICAgICAgICAgICBzcGVjdWxhdGUoCisgICAgICAgICAgICAgICAgRXhvdGljT2JqZWN0
TW9kZSwgbm9WYWx1ZSgpLCBudWxscHRyLAorICAgICAgICAgICAgICAgIG1fb3V0Lm5vbk51bGwo
bV9vdXQubG9hZFB0cihiYXNlLCBtX2hlYXBzLkRpcmVjdEFyZ3VtZW50c19vdmVycmlkZXMpKSk7
CisgICAgICAgICAgICBzcGVjdWxhdGUoCisgICAgICAgICAgICAgICAgRXhvdGljT2JqZWN0TW9k
ZSwgbm9WYWx1ZSgpLCBudWxscHRyLAorICAgICAgICAgICAgICAgIG1fb3V0LmFib3ZlT3JFcXVh
bCgKKyAgICAgICAgICAgICAgICAgICAgaW5kZXgsCisgICAgICAgICAgICAgICAgICAgIG1fb3V0
LmxvYWQzMk5vbk5lZ2F0aXZlKGJhc2UsIG1faGVhcHMuRGlyZWN0QXJndW1lbnRzX2xlbmd0aCkp
KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgc2V0SlNWYWx1ZShtX291dC5sb2FkNjQoYmFz
ZUluZGV4KG1faGVhcHMuRGlyZWN0QXJndW1lbnRzX3N0b3JhZ2UsIGJhc2UsIGluZGV4KSkpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2Fz
ZSBBcnJheTo6U2NvcGVkQXJndW1lbnRzOiB7CisgICAgICAgICAgICBMVmFsdWUgYmFzZSA9IGxv
d0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBMVmFsdWUgaW5kZXggPSBsb3dJ
bnQzMihtX25vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgTFZhbHVl
IHRhYmxlID0gbV9vdXQubG9hZFB0cihiYXNlLCBtX2hlYXBzLlNjb3BlZEFyZ3VtZW50c190YWJs
ZSk7CisgICAgICAgICAgICBMVmFsdWUgc2NvcGUgPSBtX291dC5sb2FkUHRyKGJhc2UsIG1faGVh
cHMuU2NvcGVkQXJndW1lbnRzX3Njb3BlKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgc3Bl
Y3VsYXRlKAorICAgICAgICAgICAgICAgIEV4b3RpY09iamVjdE1vZGUsIG5vVmFsdWUoKSwgbnVs
bHB0ciwKKyAgICAgICAgICAgICAgICBtX291dC5hYm92ZU9yRXF1YWwoCisgICAgICAgICAgICAg
ICAgICAgIGluZGV4LAorICAgICAgICAgICAgICAgICAgICBtX291dC5sb2FkMzJOb25OZWdhdGl2
ZShiYXNlLCBtX2hlYXBzLlNjb3BlZEFyZ3VtZW50c1RhYmxlX2xlbmd0aCkpKTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgTFZhbHVlIGFyZ3VtZW50cyA9IG1fb3V0LmxvYWRQdHIoYmFzZSwg
bV9oZWFwcy5TY29wZWRBcmd1bWVudHNUYWJsZV9hcmd1bWVudHMpOworICAgICAgICAgICAgTFZh
bHVlIHNjb3BlT2Zmc2V0ID0gbV9vdXQubG9hZDMyKAorICAgICAgICAgICAgICAgIGJhc2VJbmRl
eChtX2hlYXBzLnNjb3BlZEFyZ3VtZW50c1RhYmxlQXJndW1lbnRzLCBhcmd1bWVudHMsIGluZGV4
KSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHNwZWN1bGF0ZSgKKyAgICAgICAgICAgICAg
ICBFeG90aWNPYmplY3RNb2RlLCBub1ZhbHVlKCksIG51bGxwdHIsCisgICAgICAgICAgICAgICAg
bV9vdXQuZXF1YWwoc2NvcGVPZmZzZXQsIG1fb3V0LmNvbnN0SW50MzIoU2NvcGVPZmZzZXQ6Omlu
dmFsaWRPZmZzZXQpKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHNldEpTVmFsdWUobV9v
dXQubG9hZDY0KGJhc2VJbmRleCgKKyAgICAgICAgICAgICAgICBtX2hlYXBzLkpTRW52aXJvbm1l
bnRSZWNvcmRfdmFyaWFibGVzLCBiYXNlLCBzY29wZU9mZnNldCkpKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQXJyYXk6OkdlbmVy
aWM6IHsKICAgICAgICAgICAgIHNldEpTVmFsdWUodm1DYWxsKAogICAgICAgICAgICAgICAgIG1f
b3V0Lm9wZXJhdGlvbihvcGVyYXRpb25HZXRCeVZhbCksIG1fY2FsbEZyYW1lLApAQCAtNTA3MCwx
MSArNTEzMiwxMSBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gY2FsbDsKICAgICB9CiAgICAg
Ci0gICAgVHlwZWRQb2ludGVyIGJhc2VJbmRleChJbmRleGVkQWJzdHJhY3RIZWFwJiBoZWFwLCBM
VmFsdWUgc3RvcmFnZSwgTFZhbHVlIGluZGV4LCBFZGdlIGVkZ2UpCisgICAgVHlwZWRQb2ludGVy
IGJhc2VJbmRleChJbmRleGVkQWJzdHJhY3RIZWFwJiBoZWFwLCBMVmFsdWUgc3RvcmFnZSwgTFZh
bHVlIGluZGV4LCBFZGdlIGVkZ2UsIHB0cmRpZmZfdCBvZmZzZXQgPSAwKQogICAgIHsKICAgICAg
ICAgcmV0dXJuIG1fb3V0LmJhc2VJbmRleCgKICAgICAgICAgICAgIGhlYXAsIHN0b3JhZ2UsIG1f
b3V0Lnplcm9FeHQoaW5kZXgsIG1fb3V0LmludFB0ciksCi0gICAgICAgICAgICBtX3N0YXRlLmZv
ck5vZGUoZWRnZSkubV92YWx1ZSk7CisgICAgICAgICAgICBtX3N0YXRlLmZvck5vZGUoZWRnZSku
bV92YWx1ZSwgb2Zmc2V0KTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBjb21wYXJlKApAQCAtNjM0
MSw2ICs2NDAzLDE2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwg
bV9ub2RlLCAiQ29ycnVwdCBhcnJheSBjbGFzcyIpOwogICAgICAgICB9CiAgICAgICAgICAgICAK
KyAgICAgICAgY2FzZSBBcnJheTo6RGlyZWN0QXJndW1lbnRzOgorICAgICAgICAgICAgcmV0dXJu
IG1fb3V0LmVxdWFsKAorICAgICAgICAgICAgICAgIG1fb3V0LmxvYWQ4KGNlbGwsIG1faGVhcHMu
SlNDZWxsX3R5cGVJbmZvVHlwZSksCisgICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQ4KERp
cmVjdEFyZ3VtZW50c1R5cGUpKTsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEFycmF5OjpT
Y29wZWRBcmd1bWVudHM6CisgICAgICAgICAgICByZXR1cm4gbV9vdXQuZXF1YWwoCisgICAgICAg
ICAgICAgICAgbV9vdXQubG9hZDgoY2VsbCwgbV9oZWFwcy5KU0NlbGxfdHlwZUluZm9UeXBlKSwK
KyAgICAgICAgICAgICAgICBtX291dC5jb25zdEludDgoU2NvcGVkQXJndW1lbnRzVHlwZSkpOwor
ICAgICAgICAgICAgCiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICByZXR1cm4gbV9vdXQu
ZXF1YWwoCiAgICAgICAgICAgICAgICAgbV9vdXQubG9hZDgoY2VsbCwgbV9oZWFwcy5KU0NlbGxf
dHlwZUluZm9UeXBlKSwgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3B5VG9r
ZW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3B5VG9rZW4u
aAkocmV2aXNpb24gMTgwODc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29weVRv
a2VuLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMywgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTMyLDcgKzMyLDcgQEAgZW51bSBDb3B5VG9rZW4gewogICAg
IEJ1dHRlcmZseUNvcHlUb2tlbiwKICAgICBUeXBlZEFycmF5VmVjdG9yQ29weVRva2VuLAogICAg
IE1hcEJhY2tpbmdTdG9yZUNvcHlUb2tlbiwKLSAgICBBcmd1bWVudHNTbG93QXJndW1lbnREYXRh
Q29weVRva2VuCisgICAgRGlyZWN0QXJndW1lbnRzT3ZlcnJpZGVzQ29weVRva2VuCiB9OwogCiB9
IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1i
bHlIZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3Nl
bWJseUhlbHBlcnMuaAkocmV2aXNpb24gMTgwODc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTEzLDYgKzExMywyNiBA
QCBwdWJsaWM6CiAjZW5kaWYKICAgICB9CiAgICAgCisgICAgdm9pZCBsb2FkVmFsdWUoQmFzZUlu
ZGV4IGFkZHJlc3MsIEpTVmFsdWVSZWdzIHJlZ3MpCisgICAgeworI2lmIFVTRShKU1ZBTFVFNjQp
CisgICAgICAgIGxvYWQ2NChhZGRyZXNzLCByZWdzLmdwcigpKTsKKyNlbHNlCisgICAgICAgIGlm
IChhZGRyZXNzLmJhc2UgPT0gcmVncy5wYXlsb2FkR1BSKCkgfHwgYWRkcmVzcy5pbmRleCA9PSBy
ZWdzLnBheWxvYWRHUFIoKSkgeworICAgICAgICAgICAgLy8gV2UgYWN0dWFsbHkgY291bGQgaGFu
ZGxlIHRoZSBjYXNlIHdoZXJlIHRoZSByZWdpc3RlcnMgYXJlIGFsaWFzZWQgdG8gYm90aAorICAg
ICAgICAgICAgLy8gdGFnIGFuZCBwYXlsb2FkLCBidXQgd2UgZG9uJ3QgZm9yIG5vdy4KKyAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKGFkZHJlc3MuYmFzZSAhPSByZWdzLnRhZ0dQUigpKTsKKyAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGFkZHJlc3MuaW5kZXggIT0gcmVncy50YWdHUFIoKSk7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGxvYWQzMihhZGRyZXNzLndpdGhPZmZzZXQoVGFn
T2Zmc2V0KSwgcmVncy50YWdHUFIoKSk7CisgICAgICAgICAgICBsb2FkMzIoYWRkcmVzcy53aXRo
T2Zmc2V0KFBheWxvYWRPZmZzZXQpLCByZWdzLnBheWxvYWRHUFIoKSk7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICBsb2FkMzIoYWRkcmVzcy53aXRoT2Zmc2V0KFBheWxvYWRPZmZzZXQp
LCByZWdzLnBheWxvYWRHUFIoKSk7CisgICAgICAgICAgICBsb2FkMzIoYWRkcmVzcy53aXRoT2Zm
c2V0KFRhZ09mZnNldCksIHJlZy50YWdHUFIoKSk7CisgICAgICAgIH0KKyNlbmRpZgorICAgIH0K
KyAgICAKICAgICB2b2lkIG1vdmVUcnVzdGVkVmFsdWUoSlNWYWx1ZSB2YWx1ZSwgSlNWYWx1ZVJl
Z3MgcmVncykKICAgICB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVQuaAkocmV2aXNpb24gMTgwODc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVQuaAkod29ya2luZyBjb3B5KQpAQCAtMzQ2LDYgKzM0Niw4IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICBKdW1wTGlzdCBlbWl0RG91YmxlR2V0QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFi
bGVKdW1wJiBiYWRUeXBlKTsKICAgICAgICAgSnVtcExpc3QgZW1pdENvbnRpZ3VvdXNHZXRCeVZh
bChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIEluZGV4aW5nVHlwZSBleHBl
Y3RlZFNoYXBlID0gQ29udGlndW91c1NoYXBlKTsKICAgICAgICAgSnVtcExpc3QgZW1pdEFycmF5
U3RvcmFnZUdldEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSk7Cisg
ICAgICAgIEp1bXBMaXN0IGVtaXREaXJlY3RBcmd1bWVudHNHZXRCeVZhbChJbnN0cnVjdGlvbios
IFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUpOworICAgICAgICBKdW1wTGlzdCBlbWl0U2NvcGVkQXJn
dW1lbnRzR2V0QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlKTsKICAg
ICAgICAgSnVtcExpc3QgZW1pdEludFR5cGVkQXJyYXlHZXRCeVZhbChJbnN0cnVjdGlvbiosIFBh
dGNoYWJsZUp1bXAmIGJhZFR5cGUsIFR5cGVkQXJyYXlUeXBlKTsKICAgICAgICAgSnVtcExpc3Qg
ZW1pdEZsb2F0VHlwZWRBcnJheUdldEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYg
YmFkVHlwZSwgVHlwZWRBcnJheVR5cGUpOwogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMTgwODc1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTMwLDcgKzUzMCw3IEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbChF
eGUKICAgICAgICAgaWYgKGhhc09wdGltaXphYmxlSW5kZXhpbmcob2JqZWN0LT5zdHJ1Y3R1cmUo
dm0pKSkgewogICAgICAgICAgICAgLy8gQXR0ZW1wdCB0byBvcHRpbWl6ZS4KICAgICAgICAgICAg
IEpJVEFycmF5TW9kZSBhcnJheU1vZGUgPSBqaXRBcnJheU1vZGVGb3JTdHJ1Y3R1cmUob2JqZWN0
LT5zdHJ1Y3R1cmUodm0pKTsKLSAgICAgICAgICAgIGlmIChhcnJheU1vZGUgIT0gYnlWYWxJbmZv
LmFycmF5TW9kZSkgeworICAgICAgICAgICAgaWYgKGppdEFycmF5TW9kZVBlcm1pdHNQdXQoYXJy
YXlNb2RlKSAmJiBhcnJheU1vZGUgIT0gYnlWYWxJbmZvLmFycmF5TW9kZSkgewogICAgICAgICAg
ICAgICAgIEpJVDo6Y29tcGlsZVB1dEJ5VmFsKCZ2bSwgZXhlYy0+Y29kZUJsb2NrKCksICZieVZh
bEluZm8sIFJldHVybkFkZHJlc3NQdHIoT1VSX1JFVFVSTl9BRERSRVNTKSwgYXJyYXlNb2RlKTsK
ICAgICAgICAgICAgICAgICBkaWRPcHRpbWl6ZSA9IHRydWU7CiAgICAgICAgICAgICB9CkBAIC01
NzUsNyArNTc1LDcgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkRpcmVjdFB1dEJ5Vgog
ICAgICAgICBpZiAoaGFzT3B0aW1pemFibGVJbmRleGluZyhvYmplY3QtPnN0cnVjdHVyZSh2bSkp
KSB7CiAgICAgICAgICAgICAvLyBBdHRlbXB0IHRvIG9wdGltaXplLgogICAgICAgICAgICAgSklU
QXJyYXlNb2RlIGFycmF5TW9kZSA9IGppdEFycmF5TW9kZUZvclN0cnVjdHVyZShvYmplY3QtPnN0
cnVjdHVyZSh2bSkpOwotICAgICAgICAgICAgaWYgKGFycmF5TW9kZSAhPSBieVZhbEluZm8uYXJy
YXlNb2RlKSB7CisgICAgICAgICAgICBpZiAoaml0QXJyYXlNb2RlUGVybWl0c1B1dChhcnJheU1v
ZGUpICYmIGFycmF5TW9kZSAhPSBieVZhbEluZm8uYXJyYXlNb2RlKSB7CiAgICAgICAgICAgICAg
ICAgSklUOjpjb21waWxlRGlyZWN0UHV0QnlWYWwoJnZtLCBjYWxsRnJhbWUtPmNvZGVCbG9jaygp
LCAmYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyKE9VUl9SRVRVUk5fQUREUkVTUyksIGFycmF5
TW9kZSk7CiAgICAgICAgICAgICAgICAgZGlkT3B0aW1pemUgPSB0cnVlOwogICAgICAgICAgICAg
fQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vz
cy5jcHAJKHJldmlzaW9uIDE4MDg3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
UHJvcGVydHlBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NTEsNiArOTUxLDEyIEBAIHZv
aWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5VmFsKEJ5VmFsSW4KICAgICBjYXNlIEpJVEFycmF5
U3RvcmFnZToKICAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEFycmF5U3RvcmFnZUdldEJ5VmFsKGN1
cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSk7CiAgICAgICAgIGJyZWFrOworICAgIGNhc2UgSklU
RGlyZWN0QXJndW1lbnRzOgorICAgICAgICBzbG93Q2FzZXMgPSBlbWl0RGlyZWN0QXJndW1lbnRz
R2V0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBKSVRTY29wZWRBcmd1bWVudHM6CisgICAgICAgIHNsb3dDYXNlcyA9IGVtaXREaXJl
Y3RBcmd1bWVudHNHZXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUpOworICAgICAg
ICBicmVhazsKICAgICBkZWZhdWx0OgogICAgICAgICBUeXBlZEFycmF5VHlwZSB0eXBlID0gdHlw
ZWRBcnJheVR5cGVGb3JKSVRBcnJheU1vZGUoYXJyYXlNb2RlKTsKICAgICAgICAgaWYgKGlzSW50
KHR5cGUpKQpAQCAtMTA0Niw2ICsxMDUyLDYzIEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1
dEJ5VmFsKEJ5VmFsSW4KICAgICByZXBhdGNoQnVmZmVyLnJlbGlua0NhbGxlclRvRnVuY3Rpb24o
cmV0dXJuQWRkcmVzcywgRnVuY3Rpb25QdHIoaXNEaXJlY3QgPyBvcGVyYXRpb25EaXJlY3RQdXRC
eVZhbEdlbmVyaWMgOiBvcGVyYXRpb25QdXRCeVZhbEdlbmVyaWMpKTsKIH0KIAorSklUOjpKdW1w
TGlzdCBKSVQ6OmVtaXREaXJlY3RBcmd1bWVudHNHZXRCeVZhbChJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlKQoreworICAgIEp1bXBMaXN0IHNs
b3dDYXNlczsKKyAgICAKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIFJlZ2lzdGVySUQgYmFzZSA9
IHJlZ1QwOworICAgIFJlZ2lzdGVySUQgcHJvcGVydHkgPSByZWdUMTsKKyAgICBKU1ZhbHVlUmVn
cyByZXN1bHQgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgUmVnaXN0ZXJJRCBzY3JhdGNoID0g
cmVnVDM7CisjZWxzZQorICAgIFJlZ2lzdGVySUQgYmFzZSA9IHJlZ1QwOworICAgIFJlZ2lzdGVy
SUQgcHJvcGVydHkgPSByZWdUMjsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHQgPSBKU1ZhbHVlUmVn
cyhyZWdUMSwgcmVnVDApOworICAgIFJlZ2lzdGVySUQgc2NyYXRjaCA9IHJlZ1QzOworI2VuZGlm
CisKKyAgICBsb2FkOChBZGRyZXNzKGJhc2UsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkp
LCBzY3JhdGNoKTsKKyAgICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNoMzIoTm90RXF1YWwsIHNj
cmF0Y2gsIFRydXN0ZWRJbW0zMihEaXJlY3RBcmd1bWVudHNUeXBlKSk7CisgICAgCisgICAgc2xv
d0Nhc2VzLmFwcGVuZChicmFuY2gzMihBYm92ZU9yRXF1YWwsIHByb3BlcnR5LCBBZGRyZXNzKGJh
c2UsIERpcmVjdEFyZ3VtZW50czo6b2Zmc2V0T2ZMZW5ndGgoKSkpKTsKKyAgICBzbG93Q2FzZXMu
YXBwZW5kKGJyYW5jaFRlc3RQdHIoTm9uWmVybywgQWRkcmVzcyhiYXNlLCBEaXJlY3RBcmd1bWVu
dHM6Om9mZnNldE9mT3ZlcnJpZGVzKCkpKSk7CisgICAgCisgICAgemVyb0V4dGVuZDMyVG9QdHIo
cHJvcGVydHksIHNjcmF0Y2gpOworICAgIGxvYWRWYWx1ZShCYXNlSW5kZXgoYmFzZSwgc2NyYXRj
aCwgVGltZXNFaWdodCwgRGlyZWN0QXJndW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCkpLCByZXN1bHQp
OworfQorCitKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdFNjb3BlZEFyZ3VtZW50c0dldEJ5VmFsKElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUpCit7
CisgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOworICAgIAorI2lmIFVTRShKU1ZBTFVFNjQpCisgICAg
UmVnaXN0ZXJJRCBiYXNlID0gcmVnVDA7CisgICAgUmVnaXN0ZXJJRCBwcm9wZXJ0eSA9IHJlZ1Qx
OworICAgIEpTVmFsdWVSZWdzIHJlc3VsdCA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICBSZWdp
c3RlcklEIHNjcmF0Y2ggPSByZWdUMzsKKyAgICBSZWdpc3RlcklEIHNjcmF0Y2gyID0gcmVnVDQ7
CisjZWxzZQorICAgIFJlZ2lzdGVySUQgYmFzZSA9IHJlZ1QwOworICAgIFJlZ2lzdGVySUQgcHJv
cGVydHkgPSByZWdUMjsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHQgPSBKU1ZhbHVlUmVncyhyZWdU
MSwgcmVnVDApOworICAgIFJlZ2lzdGVySUQgc2NyYXRjaCA9IHJlZ1QzOworICAgIFJlZ2lzdGVy
SUQgc2NhcnRjaDIgPSByZWdUNDsKKyNlbmRpZgorCisgICAgbG9hZDgoQWRkcmVzcyhiYXNlLCBK
U0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgc2NyYXRjaCk7CisgICAgYmFkVHlwZSA9IHBh
dGNoYWJsZUJyYW5jaDMyKE5vdEVxdWFsLCBzY3JhdGNoLCBUcnVzdGVkSW1tMzIoRGlyZWN0QXJn
dW1lbnRzVHlwZSkpOworICAgIAorICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBTY29wZWRBcmd1
bWVudHM6Om9mZnNldE9mVGFibGUoKSksIHNjcmF0Y2gpOworICAgIGxvYWRQdHIoQWRkcmVzcyhi
YXNlLCBTY29wZWRBcmd1bWVudHM6Om9mZnNldE9mU2NvcGUoKSksIHNjcmF0Y2gyKTsKKyAgICBz
bG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcHJvcGVydHksIEFkZHJlc3Mo
c2NyYXRjaCwgU2NvcGVkQXJndW1lbnRzVGFibGU6Om9mZnNldE9mTGVuZ3RoKCkpKSk7CisgICAg
bG9hZFB0cihBZGRyZXNzKHNjcmF0Y2gsIFNjb3BlZEFyZ3VtZW50c1RhYmxlOjpvZmZzZXRPZkFy
Z3VtZW50cygpKSwgc2NyYXRjaCk7CisgICAgbG9hZDMyKEJhc2VJbmRleChzY3JhdGNoLCBwcm9w
ZXJ0eSwgVGltZXNGb3VyKSwgc2NyYXRjaCk7CisgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gz
MihFcXVhbCwgc2NyYXRjaCwgVHJ1c3RlZEltbTMyKFNjb3BlT2Zmc2V0OjppbnZhbGlkT2Zmc2V0
KSkpOworICAgIAorICAgIGxvYWRWYWx1ZShCYXNlSW5kZXgoc2NyYXRjaDIsIHNjcmF0Y2gsIFRp
bWVzRWlnaHQsIEpTRW52aXJvbm1lbnRSZWNvcmQ6Om9mZnNldE9mVmFyaWFibGVzKCkpLCByZXN1
bHQpOworfQorCiBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEludFR5cGVkQXJyYXlHZXRCeVZhbChJ
bnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIFR5cGVkQXJyYXlUeXBlIHR5cGUp
CiB7CiAgICAgQVNTRVJUKGlzSW50KHR5cGUpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9wYXJzZXIvTm9kZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFy
c2VyL05vZGVzLmgJKHJldmlzaW9uIDE4MDg3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9w
YXJzZXIvTm9kZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTQ1NCw3ICsxNDU0LDggQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIGJvb2wgaGFzQ2FwdHVyZWRWYXJpYWJsZXMoKSBjb25zdCB7IHJl
dHVybiAhIW1fY2FwdHVyZWRWYXJpYWJsZXMuc2l6ZSgpOyB9CiAgICAgICAgIHNpemVfdCBjYXB0
dXJlZFZhcmlhYmxlQ291bnQoKSBjb25zdCB7IHJldHVybiBtX2NhcHR1cmVkVmFyaWFibGVzLnNp
emUoKTsgfQogICAgICAgICBjb25zdCBJZGVudGlmaWVyU2V0JiBjYXB0dXJlZFZhcmlhYmxlcygp
IGNvbnN0IHsgcmV0dXJuIG1fY2FwdHVyZWRWYXJpYWJsZXM7IH0KLSAgICAgICAgYm9vbCBjYXB0
dXJlcyhjb25zdCBJZGVudGlmaWVyJiBpZGVudCkgeyByZXR1cm4gbV9jYXB0dXJlZFZhcmlhYmxl
cy5jb250YWlucyhpZGVudC5pbXBsKCkpOyB9CisgICAgICAgIGJvb2wgY2FwdHVyZXMoU3RyaW5n
SW1wbCogdWlkKSB7IHJldHVybiBtX2NhcHR1cmVkVmFyaWFibGVzLmNvbnRhaW5zKHVpZCk7IH0K
KyAgICAgICAgYm9vbCBjYXB0dXJlcyhjb25zdCBJZGVudGlmaWVyJiBpZGVudCkgeyByZXR1cm4g
Y2FwdHVyZXMoaWRlbnQuaW1wbCgpKTsgfQogCiAgICAgICAgIFZhclN0YWNrJiB2YXJTdGFjaygp
IHsgcmV0dXJuIG1fdmFyU3RhY2s7IH0KICAgICAgICAgRnVuY3Rpb25TdGFjayYgZnVuY3Rpb25T
dGFjaygpIHsgcmV0dXJuIG1fZnVuY3Rpb25TdGFjazsgfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQXJndW1lbnRzTW9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0FyZ3VtZW50c01vZGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ3VtZW50c01vZGUuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDM5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgQXJndW1lbnRzTW9kZV9oCisjZGVmaW5lIEFyZ3VtZW50c01vZGVfaAor
CituYW1lc3BhY2UgSlNDIHsKKworZW51bSBBcmd1bWVudHNNb2RlIHsKKyAgICBDbG9uZWRBcmd1
bWVudHNDcmVhdGlvbk1vZGUsCisgICAgRmFrZUFyZ3VtZW50VmFsdWVzQ3JlYXRpb25Nb2RlCit9
OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEFyZ3VtZW50c01vZGVfaAorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYXB0dXJlZEFyZ3VtZW50c09mZnNl
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FwdHVy
ZWRBcmd1bWVudHNPZmZzZXQuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ2FwdHVyZWRBcmd1bWVudHNPZmZzZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNhcHR1cmVkQXJndW1lbnRzT2Zm
c2V0LmgiCisKK25hbWVzcGFjZSBKU0MgeworCit2b2lkIENhcHR1cmVkQXJndW1lbnRzT2Zmc2V0
OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgaWYgKCEqdGhpcykgeworICAg
ICAgICBvdXQucHJpbnQoImNhcHR1cmVkQXJndW1lbnRJbnZhbGlkIik7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBvdXQucHJpbnQoImNhcHR1cmVkQXJndW1lbnQiLCBvZmZzZXQoKSk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9DYXB0dXJlZEFyZ3VtZW50c09mZnNldC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhcHR1cmVkQXJndW1lbnRzT2Zmc2V0LmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYXB0dXJlZEFyZ3VtZW50c09m
ZnNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBDYXB0dXJlZEFyZ3VtZW50c09m
ZnNldF9oCisjZGVmaW5lIENhcHR1cmVkQXJndW1lbnRzT2Zmc2V0X2gKKworI2luY2x1ZGUgIkdl
bmVyaWNPZmZzZXQuaCIKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNl
IEpTQyB7CisKKy8vIFRoaXMgaXMgYW4gb2Zmc2V0IGludG8gdGhlIHNwZWNpYWwgYXJndW1lbnRz
IG9iamVjdCwgd2hpY2ggY2FwdHVyZXMgdGhlIGFyZ3VtZW50cyB0byBhCisvLyBmdW5jdGlvbi4g
SXQgb25seSBjb21lcyBpbnRvIHBsYXkgaXQgdGhlIGFyZ3VtZW50cyBhcmVuJ3QgYWxzbyBsaWZ0
ZWQgaW50byB0aGUgYWN0aXZhdGlvbi4KKy8vIElmIHRoZXkgd2VyZSB0aGVuIGFjY2Vzc2VzIHRv
IHRoZSBhcmd1bWVudHMgd291bGQgcmVzb2x2ZSB0byBhIFNjb3BlT2Zmc2V0IGFuZCBub3QgYQor
Ly8gQ2FwdHVyZWRBcmd1bWVudHNPZmZzZXQuCitjbGFzcyBDYXB0dXJlZEFyZ3VtZW50c09mZnNl
dCA6IHB1YmxpYyBHZW5lcmljT2Zmc2V0PENhcHR1cmVkQXJndW1lbnRzT2Zmc2V0PiB7CitwdWJs
aWM6CisgICAgQ2FwdHVyZWRBcmd1bWVudHNPZmZzZXQoKSB7IH0KKyAgICAKKyAgICBleHBsaWNp
dCBDYXB0dXJlZEFyZ3VtZW50c09mZnNldCh1bnNpZ25lZCBvZmZzZXQpCisgICAgICAgIDogR2Vu
ZXJpY09mZnNldChvZmZzZXQpCisgICAgeworICAgIH0KKyAgICAKKyAgICB2b2lkIGR1bXAoUHJp
bnRTdHJlYW0mKSBjb25zdDsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8g
Q2FwdHVyZWRBcmd1bWVudHNPZmZzZXRfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9EaXJlY3RBcmd1bWVudHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMTQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJEaXJlY3RBcmd1bWVu
dHMuaCIKKworI2luY2x1ZGUgIkdlbmVyaWNBcmd1bWVudHNJbmxpbmVzLmgiCisjaW5jbHVkZSAi
SlNBcmd1bWVudHNJdGVyYXRvci5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKworbmFtZXNw
YWNlIEpTQyB7CisKK1NUQVRJQ19BU1NFUlRfSVNfVFJJVklBTExZX0RFU1RSVUNUSUJMRShEaXJl
Y3RBcmd1bWVudHMpOworCitjb25zdCBDbGFzc0luZm8gRGlyZWN0QXJndW1lbnRzOjpzX2luZm8g
PSB7ICJBcmd1bWVudHMiLCAmQmFzZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKERp
cmVjdEFyZ3VtZW50cykgfTsKKworRGlyZWN0QXJndW1lbnRzOjpEaXJlY3RBcmd1bWVudHMoVk0m
IHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgdW5zaWduZWQgbGVuZ3RoKQorICAgIDogR2VuZXJp
Y0FyZ3VtZW50cyh2bSwgc3RydWN0dXJlKQorICAgICwgbV9sZW5ndGgobGVuZ3RoKQoreworfQor
CitEaXJlY3RBcmd1bWVudHMqIERpcmVjdEFyZ3VtZW50czo6Y3JlYXRlVW5pbml0aWFsaXplZChW
TSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgRGly
ZWN0QXJndW1lbnRzKiByZXN1bHQgPQorICAgICAgICBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2Vs
bDxEaXJlY3RBcmd1bWVudHM+KHZtLmhlYXAsIGFsbG9jYXRpb25TaXplKGxlbmd0aCkpKQorICAg
ICAgICAodm0sIHN0cnVjdHVyZSk7CisgICAgcmVzdWx0LT5maW5pc2hDcmVhdGlvbih2bSk7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKworRGlyZWN0QXJndW1lbnRzKiBEaXJlY3RBcmd1bWVudHM6
OmNyZWF0ZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCB1bnNpZ25lZCBsZW5ndGgpCit7
CisgICAgRGlyZWN0QXJndW1lbnRzKiByZXN1bHQgPSBjcmVhdGVVbmluaXRpYWxpemVkKHZtLCBz
dHJ1Y3R1cmUsIGxlbmd0aCk7CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBpID0gbGVuZ3RoOyBp
LS07KQorICAgICAgICByZXN1bHQtPnN0b3JhZ2UoKVtpXS5jbGVhcigpOworICAgIAorICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKK0RpcmVjdEFyZ3VtZW50cyogRGlyZWN0QXJndW1lbnRzOjpjcmVh
dGVCeUNvcHlpbmcoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgRXhlY1N0YXRlKiBleGVj
KQoreworICAgIHVuc2lnbmVkIGxlbmd0aCA9IGV4ZWMtPmFyZ3VtZW50Q291bnQoKTsKKyAgICBE
aXJlY3RBcmd1bWVudHMqIHJlc3VsdCA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWQodm0sIHN0cnVjdHVy
ZSwgbGVuZ3RoKTsKKyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBsZW5ndGg7IGktLTspCisg
ICAgICAgIHJlc3VsdC0+c3RvcmFnZSgpW2ldLnNldCh2bSwgcmVzdWx0LCBleGVjLT51bmNoZWNr
ZWRBcmd1bWVudChpKSk7CisgICAgCisgICAgcmVzdWx0LT5jYWxsZWUoKS5zZXQodm0sIHJlc3Vs
dCwganNDYXN0PEpTRnVuY3Rpb24qPihleGVjLT5jYWxsZWUoKSkpOworICAgIAorICAgIHJldHVy
biByZXN1bHQ7Cit9CisKK3ZvaWQgRGlyZWN0QXJndW1lbnRzOjp2aXNpdENoaWxkcmVuKEpTQ2Vs
bCogdGhpc0NlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIERpcmVjdEFyZ3VtZW50
cyogdGhpc09iamVjdCA9IHN0YXRpY19jYXN0PERpcmVjdEFyZ3VtZW50cyo+KHRoaXNDZWxsKTsK
KyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CisgICAg
QmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKKyAgICAKKyAgICB2aXNp
dG9yLmFwcGVuZFZhbHVlcyh0aGlzT2JqZWN0LT5zdG9yYWdlKCksIHRoaXNPYmplY3QtPm1fbGVu
Z3RoKTsKKyAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9jYWxsZWUpOworICAgIAor
ICAgIGlmICh0aGlzT2JqZWN0LT5tX292ZXJyaWRlcykgeworICAgICAgICB2aXNpdG9yLmNvcHlM
YXRlcigKKyAgICAgICAgICAgIHRoaXNPYmplY3QsIERpcmVjdEFyZ3VtZW50c092ZXJyaWRlc0Nv
cHlUb2tlbiwKKyAgICAgICAgICAgIHRoaXNPYmplY3QtPm1fb3ZlcnJpZGVzLmdldCgpLCBtX2xl
bmd0aCk7CisgICAgfQorfQorCit2b2lkIERpcmVjdEFyZ3VtZW50czo6Y29weUJhY2tpbmdTdG9y
ZShKU0NlbGwqIHRoaXNDZWxsLCBDb3B5VmlzaXRvciYgdmlzaXRvciwgQ29weVRva2VuIHRva2Vu
KQoreworICAgIERpcmVjdEFyZ3VtZW50cyogdGhpc09iamVjdCA9IHN0YXRpY19jYXN0PERpcmVj
dEFyZ3VtZW50cyo+KHRoaXNDZWxsKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRo
aXNPYmplY3QsIGluZm8oKSk7CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlQodG9rZW4gPT0gRGly
ZWN0QXJndW1lbnRzT3ZlcnJpZGVzQ29weVRva2VuKTsKKyAgICAKKyAgICBib29sKiBvbGRPdmVy
cmlkZXMgPSB0aGlzT2JqZWN0LT5tX292ZXJyaWRlcy5nZXQoKTsKKyAgICBpZiAoIW9sZE92ZXJy
aWRlcykKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGlmICh2aXNpdG9yLmNoZWNrSWZTaG91
bGRDb3B5KG92ZXJyaWRlcykpIHsKKyAgICAgICAgYm9vbCogbmV3T3ZlcnJpZGVzID0gc3RhdGlj
X2Nhc3Q8Ym9vbCo+KHZpc2l0b3IuYWxsb2NhdGVOZXdTcGFjZShtX2xlbmd0aCkpOworICAgICAg
ICBtZW1jcHkobmV3T3ZlcnJpZGVzLCBvbGRPdmVycmlkZXMsIG1fbGVuZ3RoKTsKKyAgICAgICAg
dGhpc09iamVjdC0+bV9vdmVycmlkZXMuc2V0V2l0aG91dFdyaXRlQmFycmllcihuZXdPdmVycmlk
ZXMpOworICAgICAgICB2aXNpdG9yLmRpZENvcHkob2xkT3ZlcnJpZGVzLCBtX2xlbmd0aCk7Cisg
ICAgfQorfQorCitTdHJ1Y3R1cmUqIERpcmVjdEFyZ3VtZW50czo6Y3JlYXRlU3RydWN0dXJlKFZN
JiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCit7
CisgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlw
ZSwgVHlwZUluZm8oRGlyZWN0QXJndW1lbnRzVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkp
OworfQorCit2b2lkIERpcmVjdEFyZ3VtZW50czo6c2xvd0Rvd25BbmRXYXN0ZU1lbW9yeShWTSYg
dm0pCit7CisgICAgUkVMRUFTRV9BU1NFUlQoIW1fb3ZlcnJpZGVzKTsKKyAgICAKKyAgICBwdXRE
aXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIobV9sZW5ndGgpLCBE
b250RW51bSk7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5jYWxsZWUsIG1f
Y2FsbGVlLmdldCgpLCBEb250RW51bSk7CisgICAgCisgICAgdm9pZCogYmFja2luZ1N0b3JlOwor
ICAgIFJFTEVBU0VfQVNTRVJUKHZtLmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdlKHRoaXMsIG1fbGVu
Z3RoKSwgJmJhY2tpbmdTdG9yZSk7CisgICAgbV9vdmVycmlkZXMuc2V0KHZtLCB0aGlzLCBzdGF0
aWNfY2FzdDxib29sKj4oYmFja2luZ1N0b3JlKSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gbV9s
ZW5ndGg7IGktLTspCisgICAgICAgIG1fb3ZlcnJpZGVzLmdldCgpW2ldID0gZmFsc2U7Cit9CisK
K3ZvaWQgRGlyZWN0QXJndW1lbnRzOjpzbG93RG93bkFuZFdhc3RlTWVtb3J5SWZOZWNlc3Nhcnko
Vk0mIHZtKQoreworICAgIGlmICghbV9vdmVycmlkZXMpCisgICAgICAgIHNsb3dEb3duQW5kV2Fz
dGVNZW1vcnkodm0pOworfQorCit2b2lkIERpcmVjdEFyZ3VtZW50czo6b3ZlcnJpZGVBcmd1bWVu
dChWTSYgdm0sIHVuc2lnbmVkIGkpCit7CisgICAgc2xvd0Rvd25BbmRXYXN0ZU1lbW9yeUlmTmVj
ZXNzYXJ5KHZtKTsKKyAgICBtX292ZXJyaWRlcy5nZXQoKVtpbmRleF0gPSB0cnVlOworfQorCit9
IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RGlyZWN0QXJndW1lbnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRGlyZWN0QXJndW1lbnRzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDEzOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIERpcmVjdEFyZ3VtZW50c19oCisjZGVmaW5lIERpcmVjdEFyZ3VtZW50c19oCisKKyNp
bmNsdWRlICJHZW5lcmljQXJndW1lbnRzLmgiCisKK25hbWVzcGFjZSBKU0MgeworCisvLyBUaGlz
IGlzIGFuIEFyZ3VtZW50cy1jbGFzcyBvYmplY3QgdGhhdCB3ZSBjcmVhdGUgd2hlbiB5b3Ugc2F5
ICJhcmd1bWVudHMiIGluc2lkZSBhIGZ1bmN0aW9uLAorLy8gYW5kIG5vbmUgb2YgdGhlIGFyZ3Vt
ZW50cyBhcmUgY2FwdHVyZWQgaW4gdGhlIGZ1bmN0aW9uJ3MgYWN0aXZhdGlvbi4gVGhlIGZ1bmN0
aW9uIHdpbGwgY29weSBhbGwKKy8vIG9mIGl0cyBhcmd1bWVudHMgaW50byB0aGlzIG9iamVjdCwg
YW5kIGFsbCBzdWJzZXF1ZW50IGFjY2Vzc2VzIHRvIHRoZSBhcmd1bWVudHMgd2lsbCBnbyB0aHJv
dWdoCisvLyB0aGlzIG9iamVjdCB0aGVyZWFmdGVyLiBTcGVjaWFsIHN1cHBvcnQgaXMgaW4gcGxh
Y2UgZm9yIG1pc2NoZXZpb3VzIGV2ZW50cyBsaWtlIHRoZSBhcmd1bWVudHMKKy8vIGJlaW5nIGRl
bGV0ZWQgKHNvbWV0aGluZyBsaWtlICJkZWxldGUgYXJndW1lbnRzWzBdIikgb3IgcmVjb25maWd1
cmVkIChicm9hZGx5LCB3ZSBzYXkgZGVsZXRpb25zCisvLyBhbmQgcmVjb25maWd1cmF0aW9ucyBt
ZWFuIHRoYXQgdGhlIHJlc3BlY3RpdmUgYXJndW1lbnQgd2FzICJvdmVycmlkZGVuIikuCisvLwor
Ly8gVG8gc3BlZWQgYWxsb2NhdGlvbiwgdGhpcyBvYmplY3Qgd2lsbCBob2xkIGFsbCBvZiB0aGUg
YXJndW1lbnRzIGluLXBsYWNlLiBUaGUgYXJndW1lbnRzIGFzIHdlbGwKKy8vIGFzIGEgdGFibGUg
b2YgZmxhZ3Mgc2F5aW5nIHdoaWNoIGFyZ3VtZW50cyB3ZXJlIG92ZXJyaWRkZW4uCitjbGFzcyBE
aXJlY3RBcmd1bWVudHMgOiBwdWJsaWMgR2VuZXJpY0FyZ3VtZW50czxEaXJlY3RBcmd1bWVudHM+
IHsKK3ByaXZhdGU6CisgICAgRGlyZWN0QXJndW1lbnRzKFZNJiwgU3RydWN0dXJlKiwgdW5zaWdu
ZWQgbGVuZ3RoKTsKKyAgICAKK3B1YmxpYzoKKyAgICAvLyBDcmVhdGVzIGFuIGFyZ3VtZW50cyBv
YmplY3QgYnV0IGxlYXZlcyBpdCB1bmluaXRpYWxpemVkLiBUaGlzIGlzIGRhbmdlcm91cyBpZiB3
ZSBHQyByaWdodAorICAgIC8vIGFmdGVyIGFsbG9jYXRpb24uCisgICAgc3RhdGljIERpcmVjdEFy
Z3VtZW50cyogY3JlYXRlVW5pbml0aWFsaXplZChWTSYsIFN0cnVjdHVyZSosIHVuc2lnbmVkIGxl
bmd0aCk7CisgICAgCisgICAgLy8gQ3JlYXRlcyBhbiBhcmd1bWVudHMgb2JqZWN0IGFuZCBpbml0
aWFsaXplcyBldmVyeXRoaW5nIHRvIHRoZSBlbXB0eSB2YWx1ZS4gVXNlIHRoaXMgaWYgeW91Cisg
ICAgLy8gY2Fubm90IGd1YXJhbnRlZSB0aGF0IHlvdSdsbCBpbW1lZGlhdGVseSBpbml0aWFsaXpl
IGFsbCBvZiB0aGUgZWxlbWVudHMuCisgICAgc3RhdGljIERpcmVjdEFyZ3VtZW50cyogY3JlYXRl
KFZNJiwgU3RydWN0dXJlKiwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICAKKyAgICAvLyBDcmVhdGVz
IGFuIGFyZ3VtZW50cyBvYmplY3QgYnkgY29weWluZyB0aGUgYXJndW1uZXRzIGZyb20gdGhlIHN0
YWNrLgorICAgIHN0YXRpYyBEaXJlY3RBcmd1bWVudHMqIGNyZWF0ZUJ5Q29weWluZyhWTSYsIFN0
cnVjdHVyZSosIEV4ZWNTdGF0ZSopOworICAgIAorICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBzdGF0aWMgdm9pZCBjb3B5QmFja2luZ1N0
b3JlKEpTQ2VsbCosIENvcHlWaXNpdG9yJiwgQ29weVRva2VuKTsKKyAgICAKKyAgICB1aW50MzJf
dCBpbnRlcm5hbExlbmd0aCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9sZW5ndGg7
CisgICAgfQorICAgIAorICAgIHVpbnQzMl90IGxlbmd0aChFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0
CisgICAgeworICAgICAgICBpZiAoVU5MSUtFTFkobV9vdmVycmlkZXMpKQorICAgICAgICAgICAg
cmV0dXJuIGdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKS50b1VJbnQzMihl
eGVjKTsKKyAgICAgICAgcmV0dXJuIG1fbGVuZ3RoOworICAgIH0KKyAgICAKKyAgICBib29sIGNh
bkFjY2Vzc0luZGV4UXVpY2tseSh1aW50MzJfdCBpKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIGkgPCBtX2xlbmd0aCAmJiAoIW1fb3ZlcnJpZGVzIHx8ICFtX292ZXJyaWRlcy5nZXQoKVtp
XSk7CisgICAgfQorICAgIAorICAgIEpTVmFsdWUgZ2V0SW5kZXhRdWlja2x5KHVpbnQzMl90IGkp
IGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihj
YW5BY2Nlc3NJbmRleFF1aWNrbHkoaSkpOworICAgICAgICByZXR1cm4gc3RvcmFnZSgpW2ldLmdl
dCgpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNldEluZGV4UXVpY2tseShWTSYgdm0sIHVpbnQz
Ml90IGksIEpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklU
WV9JTVBMSUNBVElPTihjYW5BY2Nlc3NJbmRleFF1aWNrbHkoaSkpOworICAgICAgICBzdG9yYWdl
KClbaV0uc2V0KHZtLCB0aGlzLCB2YWx1ZSk7CisgICAgfQorICAgIAorICAgIFdyaXRlQmFycmll
cjxKU0Z1bmN0aW9uPiYgY2FsbGVlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX2NhbGxlZTsK
KyAgICB9CisgICAgCisgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiBhcmd1bWVudChDYXB0dXJl
ZEFyZ3VtZW50c09mZnNldCBvZmZzZXQpCisgICAgeworICAgICAgICBBU1NFUlQob2Zmc2V0KTsK
KyAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04ob2Zmc2V0Lm9mZnNldCgp
IDwgbV9sZW5ndGgpOworICAgICAgICByZXR1cm4gc3RvcmFnZSgpW29mZnNldC5vZmZzZXQoKV07
CisgICAgfQorICAgIAorICAgIC8vIE1ldGhvZHMgaW50ZW5kZWQgZm9yIHVzZSBieSB0aGUgR2Vu
ZXJpY0FyZ3VtZW50cyBtaXhpbi4KKyAgICBib29sIG92ZXJyb2RlVGhpbmdzKCkgY29uc3QgeyBy
ZXR1cm4gISFtX292ZXJyaWRlczsgfQorICAgIHZvaWQgc2xvd0Rvd25BbmRXYXN0ZU1lbW9yeShW
TSYpOworICAgIHZvaWQgc2xvd0Rvd25BbmRXYXN0ZU1lbW9yeUlmTmVjZXNzYXJ5KFZNJik7Cisg
ICAgdm9pZCBvdmVycmlkZUFyZ3VtZW50KFZNJiwgdW5zaWduZWQgaW5kZXgpOworICAgIAorICAg
IERFQ0xBUkVfSU5GTzsKKyAgICAKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1
cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlKTsKKyAgICAKKyAgICBz
dGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTGVuZ3RoKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9G
KERpcmVjdEFyZ3VtZW50cywgbV9sZW5ndGgpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZz
ZXRPZk92ZXJyaWRlcygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihEaXJlY3RBcmd1bWVudHMs
IG1fb3ZlcnJpZGVzKTsgfQorICAgIAorICAgIHN0YXRpYyBzaXplX3Qgc3RvcmFnZU9mZnNldCgp
CisgICAgeworICAgICAgICByZXR1cm4gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mPHNpemVvZihX
cml0ZUJhcnJpZXI8VW5rbm93bj4pPihzaXplb2YoRGlyZWN0QXJndW1lbnRzKSk7CisgICAgfQor
ICAgIAorICAgIHN0YXRpYyBzaXplX3QgYWxsb2NhdGlvblNpemUodWludDMyX3QgbGVuZ3RoKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIHN0b3JhZ2VPZmZzZXQoKSArIHNpemVvZihXcml0ZUJhcnJp
ZXI8VW5rbm93bj4pICogbGVuZ3RoOworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgV3JpdGVC
YXJyaWVyPFVua25vd24+KiBzdG9yYWdlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBiaXR3aXNl
X2Nhc3Q8V3JpdGVCYXJyaWVyPFVua25vd24+Kj4oYml0d2lzZV9jYXN0PGNoYXIqPih0aGlzKSAr
IHN0b3JhZ2VPZmZzZXQoKSk7CisgICAgfQorICAgIAorICAgIFdyaXRlQmFycmllcjxKU0Z1bmN0
aW9uKj4gbV9jYWxsZWU7CisgICAgdWludDMyX3QgbV9sZW5ndGg7IC8vIEFsd2F5cyB0aGUgYWN0
dWFsIGxlbmd0aCBvZiBjYXB0dXJlZCBhcmd1bWVudHMgYW5kIG5ldmVyIHdoYXQgd2FzIHN0b3Jl
ZCBpbnRvIHRoZSBsZW5ndGggcHJvcGVydHkuCisgICAgQ29weVdyaXRlQmFycmllcjxib29sPiBt
X292ZXJyaWRlczsgLy8gSWYgbm9uLW51bGwsIGl0IG1lYW5zIHRoYXQgbGVuZ3RoLCBjYWxsZWUs
IGFuZCBjYWxsZXIgYXJlIGZ1bGx5IG1hdGVyaWFsaXplZCBwcm9wZXJ0aWVzLgorfTsKKworfSAv
LyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBEaXJlY3RBcmd1bWVudHNfaAorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50cy5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3Vt
ZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBHZW5lcmljQXJndW1lbnRzX2gK
KyNkZWZpbmUgR2VuZXJpY0FyZ3VtZW50c19oCisKKyNpbmNsdWRlICJKU09iamVjdC5oIgorCitu
YW1lc3BhY2UgSlNDIHsKKworLy8gVGhpcyBpcyBhIG1peGluIGZvciB0aGUgdHdvIGtpbmRzIG9m
IEFyZ3VtZW50cy1jbGFzcyBvYmplY3RzIHRoYXQgYXJpc2Ugd2hlbiB5b3Ugc2F5CisvLyAiYXJn
dW1lbnRzIiBpbnNpZGUgYSBmdW5jdGlvbi4gVGhpcyBjbGFzcyBkb2Vzbid0IHNob3cgdXAgaW4g
dGhlIEpTQ2VsbCBpbmhlcml0YW5jZSBoaWVyYXJjaHkuCit0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBl
PgorY2xhc3MgR2VuZXJpY0FyZ3VtZW50cyA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKK3B1
YmxpYzoKKyAgICB0eXBlZGVmIEpTTm9uRmluYWxPYmplY3QgQmFzZTsKKworICAgIHN0YXRpYyBj
b25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xv
dCB8IEludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05v
dFplcm8gfCBPdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzIHwgSlNPYmplY3Q6OlN0cnVjdHVyZUZs
YWdzOworCitwcm90ZWN0ZWQ6CisgICAgR2VuZXJpY0FyZ3VtZW50cyhWTSYgdm0sIFN0cnVjdHVy
ZSogc3RydWN0dXJlKQorICAgICAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSkKKyAgICB7CisgICAg
fQorCisgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiwgRXhlY1N0
YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgYm9vbCBnZXRP
d25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJv
cGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0
eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJh
dGlvbk1vZGUpOworICAgIHN0YXRpYyB2b2lkIHB1dChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9w
ZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyB2b2lkIHB1
dEJ5SW5kZXgoSlNDZWxsKiwgRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1Zh
bHVlLCBib29sIHNob3VsZFRocm93KTsKKyAgICBzdGF0aWMgdm9pZCBkZWxldGVQcm9wZXJ0eShK
U0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUpOworICAgIHN0YXRpYyB2b2lkIGRlbGV0
ZVByb3BlcnR5QnlJbmRleChKU0NlbGwqLCBFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5h
bWUpOworICAgIHN0YXRpYyB2b2lkIGRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiwgRXhlY1N0
YXRlKiwgUHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHNob3Vs
ZFRocm93KTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gR2VuZXJpY0Fy
Z3VtZW50c19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNB
cmd1bWVudHNJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lubGluZXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHNJbmxpbmVzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwyMTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBHZW5lcmljQXJndW1lbnRzSW5saW5lc19oCisjZGVmaW5l
IEdlbmVyaWNBcmd1bWVudHNJbmxpbmVzX2gKKworI2luY2x1ZGUgIkdlbmVyaWNBcmd1bWVudHMu
aCIKKyNpbmNsdWRlICJKU0FyZ3VtZW50c0l0ZXJhdG9yLmgiCisjaW5jbHVkZSAiSlNDSW5saW5l
cy5oIgorCituYW1lc3BhY2UgSlNDIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4KK2Jvb2wg
R2VuZXJpY0FyZ3VtZW50czxUeXBlPjo6Z2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiBvYmpl
Y3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIGlkZW50LCBQcm9wZXJ0eVNsb3QmIHNs
b3QpCit7CisgICAgVHlwZSogdGhpc09iamVjdCA9IGpzQ2FzdDxUeXBlKj4ob2JqZWN0KTsKKyAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIAorICAgIGlmICghdGhpc09iamVjdC0+b3ZlcnJv
ZGVUaGluZ3MoKSkgeworICAgICAgICBpZiAoaWRlbnQgPT0gdm0ucHJvcGVydHlOYW1lcy0+bGVu
Z3RoKSB7CisgICAgICAgICAgICBzbG90LnNldFZhbHVlKHRoaXNPYmplY3QsIERvbnRFbnVtLCBq
c051bWJlcih0aGlzT2JqZWN0LT5pbnRlcm5hbExlbmd0aCgpKSk7CisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoaWRlbnQgPT0gdm0ucHJvcGVydHlOYW1l
cy0+Y2FsbGVlKSB7CisgICAgICAgICAgICBzbG90LnNldFZhbHVlKHRoaXNPYmplY3QsIERvbnRF
bnVtLCB0aGlzT2JqZWN0LT5jYWxsZWUoKS5nZXQoKSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBpbmRleCA9IGlkZW50LmFz
SW5kZXgoKTsKKyAgICBpZiAodGhpc09iamVjdC0+Y2FuQWNjZXNzSW5kZXhRdWlja2x5KGluZGV4
KSkgeworICAgICAgICBzbG90LnNldFZhbHVlKHRoaXNPYmplY3QsIE5vbmUsIHRoaXNPYmplY3Qt
PmdldEluZGV4UXVpY2tseShpbmRleCkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cisg
ICAgCisgICAgaWYgKEJhc2U6OmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBleGVjLCBp
ZGVudCwgc2xvdCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIAorICAgIGlmIChpZGVudCA9
PSB2bS5wcm9wZXJ0eU5hbWVzLT5pdGVyYXRvclByaXZhdGVOYW1lKSB7CisgICAgICAgIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7Cisg
ICAgICAgIHRoaXNPYmplY3QtPkpTQ19OQVRJVkVfRlVOQ1RJT04odm0ucHJvcGVydHlOYW1lcy0+
aXRlcmF0b3JQcml2YXRlTmFtZSwgYXJndW1lbnRzRnVuY0l0ZXJhdG9yLCBEb250RW51bSwgMCk7
CisgICAgICAgIGlmIChKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIGV4
ZWMsIGlkZW50LCBzbG90KSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFR5cGU+Citib29sIEdl
bmVyaWNBcmd1bWVudHM8VHlwZT46OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNPYmplY3Qq
IG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpbmRleCwgUHJvcGVydHlTbG90JiBz
bG90KQoreworICAgIFR5cGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8VHlwZSo+KG9iamVjdCk7Cisg
ICAgCisgICAgaWYgKHRoaXNPYmplY3QtPmNhbkFjY2Vzc0luZGV4UXVpY2tseShpbmRleCkpIHsK
KyAgICAgICAgc2xvdC5zZXRWYWx1ZSh0aGlzT2JqZWN0LCBOb25lLCB0aGlzT2JqZWN0LT5nZXRJ
bmRleFF1aWNrbHkoaW5kZXgpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAor
ICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KG9iamVjdCwgZXhlYywg
aW5kZXgsIHNsb3QpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPgordm9pZCBHZW5lcmlj
QXJndW1lbnRzPFR5cGU+OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4
ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIGFycmF5LCBFbnVtZXJhdGlvbk1vZGUg
bW9kZSkKK3sKKyAgICBUeXBlKiB0aGlzT2JqZWN0ID0ganNDYXN0PFR5cGUqPihvYmplY3QpOwor
ICAgIAorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0aGlzT2JqZWN0LT5pbnRlcm5hbExl
bmd0aCgpOyArK2kpIHsKKyAgICAgICAgaWYgKCF0aGlzT2JqZWN0LT5jYW5BY2Nlc3NJbmRleFF1
aWNrbHkoaW5kZXgpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGFycmF5LmFkZChJ
ZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGkpKTsKKyAgICB9CisgICAgaWYgKHNob3VsZEluY2x1ZGVE
b250RW51bVByb3BlcnRpZXMobW9kZSkgJiYgIXRoaXNPYmplY3QtPm92ZXJyb2RlVGhpbmdzKCkp
IHsKKyAgICAgICAgYXJyYXkuYWRkKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jYWxsZWUpOworICAg
ICAgICBhcnJheS5hZGQoZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCk7CisgICAgfQorICAg
IEJhc2U6OmdldE93blByb3BlcnR5TmFtZXModGhpc09iamVjdCwgZXhlYywgYXJyYXksIG1vZGUp
OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPgordm9pZCBHZW5lcmljQXJndW1lbnRzPFR5
cGU+OjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBpZGVu
dCwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQoreworICAgIFR5cGUqIHRo
aXNPYmplY3QgPSBqc0Nhc3Q8VHlwZSo+KG9iamVjdCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKKyAgICAKKyAgICBpZiAoIXRoaXNPYmplY3QtPm92ZXJyb2RlVGhpbmdzKCkKKyAgICAgICAg
JiYgKGlkZW50ID09IHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aAorICAgICAgICAgICAgfHwgaWRl
bnQgPT0gdm0ucHJvcGVydHlOYW1lcy0+Y2FsbGVlKSkKKyAgICAgICAgdGhpc09iamVjdC0+c2xv
d0Rvd25BbmRXYXN0ZU1lbW9yeSh2bSk7CisgICAgCisgICAgdW5zaWduZWQgaW5kZXggPSBpZGVu
dC5hc0luZGV4KCk7CisgICAgaWYgKHRoaXNPYmplY3QtPmNhbkFjY2Vzc0luZGV4UXVpY2tseShp
bmRleCkpIHsKKyAgICAgICAgc2V0SW5kZXhRdWlja2x5KHZtLCBpbmRleCwgdmFsdWUpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIEJhc2U6OnB1dCh0aGlzT2JqZWN0LCBleGVj
LCBpZGVudCwgdmFsdWUsIHNsb3QpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPgordm9p
ZCBHZW5lcmljQXJndW1lbnRzPFR5cGU+OjpwdXRCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0
YXRlKiBleGVjLCB1bnNpZ25lZCBpbmRleCwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJv
dykKK3sKKyAgICBUeXBlKiB0aGlzT2JqZWN0ID0ganNDYXN0PFR5cGUqPihvYmplY3QpOworICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgCisgICAgaWYgKHRoaXNPYmplY3QtPmNhblNldElu
ZGV4UXVpY2tseShpbmRleCkpIHsKKyAgICAgICAgc2V0SW5kZXhRdWlja2x5KHZtLCBpbmRleCwg
dmFsdWUpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIHJldHVybiBCYXNlOjpw
dXRCeUluZGV4KGNlbGwsIGV4ZWMsIGluZGV4LCB2YWx1ZSwgc2hvdWxkVGhyb3cpOworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPgordm9pZCBHZW5lcmljQXJndW1lbnRzPFR5cGU+OjpkZWxl
dGVQcm9wZXJ0eShKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIGlk
ZW50KQoreworICAgIFR5cGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8VHlwZSo+KG9iamVjdCk7Cisg
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICAKKyAgICBpZiAoIXRoaXNPYmplY3QtPm92ZXJy
b2RlVGhpbmdzKCkKKyAgICAgICAgJiYgKGlkZW50ID09IHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0
aAorICAgICAgICAgICAgfHwgaWRlbnQgPT0gdm0ucHJvcGVydHlOYW1lcy0+Y2FsbGVlKSkKKyAg
ICAgICAgdGhpc09iamVjdC0+c2xvd0Rvd25BbmRXYXN0ZU1lbW9yeSh2bSk7CisgICAgCisgICAg
dW5zaWduZWQgaW5kZXggPSBpZGVudC5hc0luZGV4KCk7CisgICAgaWYgKHRoaXNPYmplY3QtPmNh
bkFjY2Vzc0luZGV4UXVpY2tseShpbmRleCkpIHsKKyAgICAgICAgdGhpc09iamVjdC0+b3ZlcnJp
ZGVBcmd1bWVudCh2bSwgaW5kZXgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAg
IEJhc2U6OmRlbGV0ZVByb3BlcnR5KHRoaXNPYmplY3QsIGV4ZWMsIGlkZW50KTsKK30KKwordGVt
cGxhdGU8dHlwZW5hbWUgVHlwZT4KK3ZvaWQgR2VuZXJpY0FyZ3VtZW50czxUeXBlPjo6ZGVsZXRl
UHJvcGVydHlCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBp
bmRleCkKK3sKKyAgICBUeXBlKiB0aGlzT2JqZWN0ID0ganNDYXN0PFR5cGUqPihvYmplY3QpOwor
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgCisgICAgaWYgKHRoaXNPYmplY3QtPmNhbkFj
Y2Vzc0luZGV4UXVpY2tseShpbmRleCkpIHsKKyAgICAgICAgdGhpc09iamVjdC0+b3ZlcnJpZGVB
cmd1bWVudCh2bSwgaW5kZXgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIHJl
dHVybiBCYXNlOjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgoY2VsbCwgZXhlYywgaW5kZXgpOworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPgordm9pZCBHZW5lcmljQXJndW1lbnRzPFR5cGU+Ojpk
ZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3Bl
cnR5TmFtZSBpZGVudCwgY29uc3QgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBib29s
IHNob3VsZFRocm93KQoreworICAgIFR5cGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8VHlwZSo+KG9i
amVjdCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICAKKyAgICBpZiAoaWRlbnQgPT0g
dm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoCisgICAgICAgIHx8IGlkZW50ID09IHZtLnByb3BlcnR5
TmFtZXMtPmNhbGxlZSkKKyAgICAgICAgdGhpc09iamVjdC0+c2xvd0Rvd25BbmRXYXN0ZU1lbW9y
eUlmTmVjZXNzYXJ5KHZtKTsKKyAgICBlbHNlIHsKKyAgICAgICAgdW5zaWduZWQgaW5kZXggPSBp
ZGVudC5hc0luZGV4KCk7CisgICAgICAgIGlmICh0aGlzT2JqZWN0LT5jYW5BY2Nlc3NBcmd1bWVu
dFF1aWNrbHkoaW5kZXgpKSB7CisgICAgICAgICAgICBpZiAoIWRlc2NyaXB0b3IuaXNBY2Nlc3Nv
ckRlc2NyaXB0b3IoKSkgeworICAgICAgICAgICAgICAgIC8vIElmIHRoZSBwcm9wZXJ0eSBpcyBu
b3QgZGVsZXRlZCBhbmQgd2UgYXJlIHVzaW5nIGEgbm9uLWFjY2Vzc29yIGRlc2NyaXB0b3IsIHRo
ZW4KKyAgICAgICAgICAgICAgICAvLyBtYWtlIHN1cmUgdGhhdCB0aGUgYWxpYXNlZCBhcmd1bWVu
dCBzZWVzIHRoZSB2YWx1ZS4KKyAgICAgICAgICAgICAgICBpZiAoZGVzY3JpcHRvci52YWx1ZSgp
KQorICAgICAgICAgICAgICAgICAgICB0aGlzT2JqZWN0LT5zZXRJbmRleFF1aWNrbHkodm0sIGks
IGRlc2NyaXB0b3IudmFsdWUoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyBJ
ZiB0aGUgcHJvcGVydHkgaXMgbm90IGRlbGV0ZWQgYW5kIHdlIGFyZSB1c2luZyBhIG5vbi1hY2Nl
c3Nvciwgd3JpdGFibGUKKyAgICAgICAgICAgICAgICAvLyBkZXNjcmlwdG9yLCB0aGVuIHdlIGFy
ZSBkb25lLiBUaGUgYXJndW1lbnQgY29udGludWVzIHRvIGJlIGFsaWFzZWQuIE5vdGUgdGhhdCB3
ZQorICAgICAgICAgICAgICAgIC8vIGlnbm9yZSB0aGUgcmVxdWVzdCB0byBjaGFuZ2UgZW51bWVy
YWJpbGl0eS4gV2UgYXBwZWFyIHRvIGhhdmUgYWx3YXlzIGRvbmUgc28sIGluCisgICAgICAgICAg
ICAgICAgLy8gY2FzZXMgd2hlcmUgdGhlIGFyZ3VtZW50IHdhcyBzdGlsbCBhbGlhc2VkLgorICAg
ICAgICAgICAgICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTQxOTUyCisgICAgICAgICAgICAgICAgaWYgKGRlc2NyaXB0b3Iud3JpdGFibGUoKSkK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAg
IAorICAgICAgICAgICAgLy8gSWYgdGhlIHByb3BlcnR5IGlzIGEgbm9uLWRlbGV0ZWQgYXJndW1l
bnQsIHRoZW4gbW92ZSBpdCBpbnRvIHRoZSBiYXNlIG9iamVjdCBhbmQKKyAgICAgICAgICAgIC8v
IHRoZW4gZGVsZXRlIGl0LgorICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IHRoaXNPYmplY3Qt
PmdldEluZGV4UXVpY2tseShpKTsKKyAgICAgICAgICAgIEFTU0VSVCh2YWx1ZSk7CisgICAgICAg
ICAgICBvYmplY3QtPnB1dERpcmVjdE1heUJlSW5kZXgoZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1
ZSk7CisgICAgICAgICAgICB0aGlzT2JqZWN0LT5vdmVycmlkZUFyZ3VtZW50KHZtLCBpKTsKKyAg
ICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvLyBOb3cganVzdCBsZXQgdGhlIG5vcm1hbCBvYmpl
Y3QgbWFjaGluZXJ5IGRvIGl0cyB0aGluZy4KKyAgICByZXR1cm4gQmFzZTo6ZGVmaW5lT3duUHJv
cGVydHkob2JqZWN0LCBleGVjLCBpZGVudCwgZGVzY3JpcHRvciwgc2hvdWxkVGhyb3cpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEdlbmVyaWNBcmd1bWVudHNJbmxpbmVz
X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY09mZnNldC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNPZmZz
ZXQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVy
aWNPZmZzZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDExMSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEdlbmVyaWNPZmZzZXRf
aAorI2RlZmluZSBHZW5lcmljT2Zmc2V0X2gKKworI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+
CisKK25hbWVzcGFjZSBKU0MgeworCisvLyBBIG1peGluIGZvciBjcmVhdGluZyB0aGUgdmFyaW91
cyBraW5kcyBvZiB2YXJpYWJsZSBvZmZzZXRzIHRoYXQgb3VyIGVuZ2luZSBzdXBwb3J0cy4KK3Rl
bXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBHZW5lcmljT2Zmc2V0IHsKK3B1YmxpYzoKKyAgICBz
dGF0aWMgY29uc3QgdW5zaWduZWQgaW52YWxpZE9mZnNldCA9IFVJTlRfTUFYOworICAgIAorICAg
IEdlbmVyaWNPZmZzZXQoKQorICAgICAgICA6IG1fb2Zmc2V0KGludmFsaWRPZmZzZXQpCisgICAg
eworICAgIH0KKyAgICAKKyAgICBleHBsaWNpdCBHZW5lcmljT2Zmc2V0KHVuc2lnbmVkIG9mZnNl
dCkKKyAgICAgICAgOiBtX29mZnNldChvZmZzZXQpCisgICAgeworICAgIH0KKyAgICAKKyAgICBi
b29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0ID09IGludmFsaWRPZmZzZXQ7
IH0KKyAgICAKKyAgICB1bnNpZ25lZCBvZmZzZXRVbmNoZWNrZWQoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG1fb2Zmc2V0OworICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBvZmZzZXQo
KSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fb2Zmc2V0ICE9IGludmFsaWRPZmZzZXQp
OworICAgICAgICByZXR1cm4gbV9vZmZzZXQ7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBUJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX29mZnNl
dCA9PSBvdGhlci5vZmZzZXRVbmNoZWNrZWQoKTsKKyAgICB9CisgICAgYm9vbCBvcGVyYXRvciE9
KGNvbnN0IFQmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fb2Zmc2V0ICE9
IG90aGVyLm9mZnNldFVuY2hlY2tlZCgpOworICAgIH0KKyAgICBib29sIG9wZXJhdG9yPChjb25z
dCBUJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX29mZnNldCA8IG90aGVy
Lm9mZnNldFVuY2hlY2tlZCgpOworICAgIH0KKyAgICBib29sIG9wZXJhdG9yPihjb25zdCBUJiBv
dGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX29mZnNldCA+IG90aGVyLm9mZnNl
dFVuY2hlY2tlZCgpOworICAgIH0KKyAgICBib29sIG9wZXJhdG9yPD0oY29uc3QgVCYgb3RoZXIp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9vZmZzZXQgPD0gb3RoZXIub2Zmc2V0VW5j
aGVja2VkKCk7CisgICAgfQorICAgIGJvb2wgb3BlcmF0b3I+PShjb25zdCBUJiBvdGhlcikgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX29mZnNldCA+PSBvdGhlci5vZmZzZXRVbmNoZWNr
ZWQoKTsKKyAgICB9CisgICAgCisgICAgVCBvcGVyYXRvcisoaW50IHZhbHVlKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIFQob2Zmc2V0KCkgKyB2YWx1ZSk7CisgICAgfQorICAgIFQgb3Bl
cmF0b3ItKGludCB2YWx1ZSkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBUKG9mZnNldCgp
IC0gdmFsdWUpOworICAgIH0KKyAgICBUJiBvcGVyYXRvcis9KGludCB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiAqdGhpcyA9ICp0aGlzICsgdmFsdWU7CisgICAgfQorICAgIFQmIG9wZXJh
dG9yLT0oaW50IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuICp0aGlzID0gKnRoaXMgLSB2
YWx1ZTsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIHVuc2lnbmVkIG1fb2Zmc2V0OworfTsK
KworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBHZW5lcmljT2Zmc2V0X2gKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcmd1bWVudHNJdGVyYXRvci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcmd1bWVudHNJ
dGVyYXRvci5jcHAJKHJldmlzaW9uIDE4MDg3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQXJndW1lbnRzSXRlcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE1IEFwcGxlLCBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMzLDEwICsz
MywxOCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY29uc3QgQ2xhc3NJbmZvIEpTQXJndW1lbnRzSXRl
cmF0b3I6OnNfaW5mbyA9IHsgIkFyZ3VtZW50c0l0ZXJhdG9yIiwgJkJhc2U6OnNfaW5mbywgMCwg
Q1JFQVRFX01FVEhPRF9UQUJMRShKU0FyZ3VtZW50c0l0ZXJhdG9yKSB9OwogCi12b2lkIEpTQXJn
dW1lbnRzSXRlcmF0b3I6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgQXJndW1lbnRzKiBhcmd1bWVu
dHMpCit2b2lkIEpTQXJndW1lbnRzSXRlcmF0b3I6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgSlNP
YmplY3QqIGFyZ3VtZW50cykKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiAgICAg
bV9hcmd1bWVudHMuc2V0KHZtLCB0aGlzLCBhcmd1bWVudHMpOwogfQogCitFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGFyZ3VtZW50c0Z1bmNJdGVyYXRvcihFeGVjU3RhdGUqIGV4ZWMpCit7
CisgICAgSlNPYmplY3QqIHRoaXNPYmogPSBleGVjLT50aGlzVmFsdWUoKS50b1RoaXMoZXhlYywg
U3RyaWN0TW9kZSkudG9PYmplY3QoZXhlYyk7CisgICAgaWYgKCF0aGlzT2JqLT5pbmhlcml0cyhB
cmd1bWVudHM6OmluZm8oKSkgJiYgIXRoaXNPYmotPmluaGVyaXRzKE91dE9mQmFuZEFyZ3VtZW50
czo6aW5mbygpKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd1R5cGVFcnJv
cihleGVjLCBBU0NJSUxpdGVyYWwoIkF0dGVtcHRlZCB0byB1c2UgQXJndW1lbnRzIGl0ZXJhdG9y
IG9uIG5vbi1Bcmd1bWVudHMgb2JqZWN0IikpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KEpTQXJndW1lbnRzSXRlcmF0b3I6OmNyZWF0ZShleGVjLT52bSgpLCBleGVjLT5jYWxsZWUoKS0+
Z2xvYmFsT2JqZWN0KCktPmFyZ3VtZW50c0l0ZXJhdG9yU3RydWN0dXJlKCksIHRoaXNPYmopKTsK
K30KKwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcmd1bWVudHNJ
dGVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
QXJndW1lbnRzSXRlcmF0b3IuaAkocmV2aXNpb24gMTgwODc1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNBcmd1bWVudHNJdGVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSwgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE1IEFwcGxlLCBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2
LDcgKzI2LDcgQEAKICNpZm5kZWYgSlNBcmd1bWVudHNJdGVyYXRvcl9oCiAjZGVmaW5lIEpTQXJn
dW1lbnRzSXRlcmF0b3JfaAogCi0jaW5jbHVkZSAiQXJndW1lbnRzLmgiCisjaW5jbHVkZSAiSlNP
YmplY3QuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTQxLDcgKzQxLDcgQEAgcHVibGljOgog
ICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90
eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CiAgICAg
fQogCi0gICAgc3RhdGljIEpTQXJndW1lbnRzSXRlcmF0b3IqIGNyZWF0ZShWTSYgdm0sIFN0cnVj
dHVyZSogc3RydWN0dXJlLCBBcmd1bWVudHMqIGFyZ3VtZW50cykKKyAgICBzdGF0aWMgSlNBcmd1
bWVudHNJdGVyYXRvciogY3JlYXRlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTT2Jq
ZWN0KiBhcmd1bWVudHMpCiAgICAgewogICAgICAgICBKU0FyZ3VtZW50c0l0ZXJhdG9yKiBpbnN0
YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTQXJndW1lbnRzSXRlcmF0b3I+KHZt
LmhlYXApKSBKU0FyZ3VtZW50c0l0ZXJhdG9yKHZtLCBzdHJ1Y3R1cmUpOwogICAgICAgICBpbnN0
YW5jZS0+ZmluaXNoQ3JlYXRpb24odm0sIGFyZ3VtZW50cyk7CkBAIC01MCwxMSArNTAsMTEgQEAg
cHVibGljOgogCiAgICAgYm9vbCBuZXh0KENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU1ZhbHVlJiB2
YWx1ZSkKICAgICB7Ci0gICAgICAgIGlmIChtX25leHRJbmRleCA+PSBtX2FyZ3VtZW50cy0+bGVu
Z3RoKGNhbGxGcmFtZSkpCisgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9CisgICAgICAgICAgICBt
X2FyZ3VtZW50cy0+Z2V0KGNhbGxGcmFtZSwgY2FsbEZyYW1lLT5wcm9wZXJ0eU5hbWVzKCkubGVu
Z3RoKS50b1VJbnQzMihjYWxsRnJhbWUpOworICAgICAgICBpZiAobV9uZXh0SW5kZXggPj0gbGVu
Z3RoKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB2YWx1ZSA9IG1fYXJndW1l
bnRzLT50cnlHZXRBcmd1bWVudChtX25leHRJbmRleCsrKTsKLSAgICAgICAgaWYgKCF2YWx1ZSkK
LSAgICAgICAgICAgIHZhbHVlID0ganNVbmRlZmluZWQoKTsKKyAgICAgICAgdmFsdWUgPSBtX2Fy
Z3VtZW50cy0+Z2V0SW5kZXgoY2FsbEZyYW1lLCBtX25leHRJbmRleCsrKTsKICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQogCkBAIC02OCwxMiArNjgsMTQgQEAgcHJpdmF0ZToKICAgICB7CiAg
ICAgfQogCi0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIEFyZ3VtZW50cyopOworICAgIHZv
aWQgZmluaXNoQ3JlYXRpb24oVk0mLCBKU09iamVjdCopOwogICAgIAotICAgIFdyaXRlQmFycmll
cjxBcmd1bWVudHM+IG1fYXJndW1lbnRzOworICAgIFdyaXRlQmFycmllcjxKU09iamVjdD4gbV9h
cmd1bWVudHM7CiAgICAgc2l6ZV90IG1fbmV4dEluZGV4OwogfTsKIAorRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBhcmd1bWVudHNGdW5jSXRlcmF0b3IoRXhlY1N0YXRlKik7CisKIH0KIAog
I2VuZGlmIC8vICFkZWZpbmVkKEpTQXJndW1lbnRzSXRlcmF0b3JfaCkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRW52aXJvbm1lbnRSZWNvcmQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRW52aXJvbm1lbnRSZWNvcmQuY3Bw
CShyZXZpc2lvbiAxODA4NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Vu
dmlyb25tZW50UmVjb3JkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAyMDEyLCAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMzUsNCArMzUsMTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNvbnN0IENsYXNzSW5mbyBKU0Vu
dmlyb25tZW50UmVjb3JkOjpzX2luZm8gPSB7ICJFbnZpcm9ubWVudFJlY29yZCIsICZCYXNlOjpz
X2luZm8sIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNFbnZpcm9ubWVudFJlY29yZCkgfTsKIAor
dm9pZCBKU0Vudmlyb25tZW50UmVjb3JkOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgSlNFbnZpcm9ubWVudFJlY29yZCogdGhpc09iamVj
dCA9IGpzQ2FzdDxKU0Vudmlyb25tZW50UmVjb3JkKj4oY2VsbCk7CisgICAgQVNTRVJUX0dDX09C
SkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOworICAgIEJhc2U6OnZpc2l0Q2hpbGRy
ZW4odGhpc09iamVjdCwgdmlzaXRvcik7CisgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXModGhpc09i
amVjdC0+dmFyaWFibGVzKCksIG1fc3ltYm9sVGFibGUtPnNjb3BlU2l6ZSgpKTsKK30KKwogfSAv
LyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Vu
dmlyb25tZW50UmVjb3JkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNFbnZpcm9ubWVudFJlY29yZC5oCShyZXZpc2lvbiAxODA4NzUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Vudmlyb25tZW50UmVjb3JkLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQ2LDExICs0NiwyNiBAQCBjbGFzcyBKU0Vudmlyb25tZW50UmVjb3JkIDogcHVibGlj
IEpTU3ltCiBwdWJsaWM6CiAgICAgdHlwZWRlZiBKU1N5bWJvbFRhYmxlT2JqZWN0IEJhc2U7CiAK
LSAgICBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiByZWdpc3RlcnMoKSB7IHJldHVybiBtX3Jl
Z2lzdGVyczsgfQotICAgIFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4mIHJlZ2lzdGVyQXQoaW50
IGluZGV4KSBjb25zdCB7IHJldHVybiBtX3JlZ2lzdGVyc1tpbmRleF07IH0KKyAgICBXcml0ZUJh
cnJpZXJCYXNlPFVua25vd24+KiB2YXJpYWJsZXMoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGJp
dHdpc2VfY2FzdDxXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+Kj4oYml0d2lzZV9jYXN0PGNoYXIq
Pih0aGlzKSArIG9mZnNldE9mVmFyaWFibGVzKCkpOworICAgIH0KKyAgICAKKyAgICBib29sIGlz
VmFsaWQoU2NvcGVPZmZzZXQgb2Zmc2V0KQorICAgIHsKKyAgICAgICAgcmV0dXJuICEhb2Zmc2V0
ICYmIG9mZnNldC5vZmZzZXQoKSA8IG1fc3ltYm9sVGFibGUtPnNjb3BlU2l6ZSgpOworICAgIH0K
KyAgICAKKyAgICBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+JiB2YXJpYWJsZUF0KFNjb3BlT2Zm
c2V0IG9mZnNldCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc1ZhbGlkKG9mZnNldCkp
OworICAgICAgICByZXR1cm4gdmFyaWFibGVzKClbb2Zmc2V0Lm9mZnNldCgpXTsKKyAgICB9CiAK
LSAgICBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiBjb25zdCAqIGFkZHJlc3NPZlJlZ2lzdGVy
cygpIGNvbnN0IHsgcmV0dXJuICZtX3JlZ2lzdGVyczsgfQotICAgIHN0YXRpYyBzaXplX3Qgb2Zm
c2V0T2ZSZWdpc3RlcnMoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNFbnZpcm9ubWVudFJl
Y29yZCwgbV9yZWdpc3RlcnMpOyB9CisgICAgc3RhdGljIHNpemVfdCBvZmZzZXRPZlZhcmlhYmxl
cygpCisgICAgeworICAgICAgICByZXR1cm4gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mPHNpemVv
ZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pPihzaXplb2YoSlNFbnZpcm9ubWVudFJlY29yZCkpOwor
ICAgIH0KIAogICAgIERFQ0xBUkVfSU5GTzsKIApAQCAtNjAsMTUgKzc1LDM1IEBAIHByb3RlY3Rl
ZDoKICAgICBKU0Vudmlyb25tZW50UmVjb3JkKAogICAgICAgICBWTSYgdm0sCiAgICAgICAgIFN0
cnVjdHVyZSogc3RydWN0dXJlLAotICAgICAgICBSZWdpc3RlciogcmVnaXN0ZXJzLAogICAgICAg
ICBKU1Njb3BlKiBzY29wZSwKICAgICAgICAgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlKQogICAg
ICAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSwgc2NvcGUsIHN5bWJvbFRhYmxlKQotICAgICAgICAs
IG1fcmVnaXN0ZXJzKHJlaW50ZXJwcmV0X2Nhc3Q8V3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPio+
KHJlZ2lzdGVycykpCiAgICAgewogICAgIH0KLQotICAgIFdyaXRlQmFycmllckJhc2U8VW5rbm93
bj4qIG1fcmVnaXN0ZXJzOyAvLyAiciIgaW4gdGhlIHN0YWNrLgorICAgIAorICAgIHN0YXRpYyBz
aXplX3QgYWxsb2NhdGlvblNpemVGb3JTY29wZVNpemUodW5zaWduZWQgc2NvcGVTaXplKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIG9mZnNldE9mVmFyaWFibGVzKCkgKyBzY29wZVNpemUgKiBzaXpl
b2YoV3JpdGVCYXJyaWVyPFVua25vd24+KTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIHNpemVf
dCBhbGxvY2F0aW9uU2l6ZShTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUpCisgICAgeworICAgICAg
ICByZXR1cm4gYWxsb2NhdGlvblNpemVGb3JTY29wZVNpemUoc3ltYm9sVGFibGUtPnNjb3BlU2l6
ZSgpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBmaW5pc2hDcmVhdGlvblVuaW5pdGlhbGl6ZWQo
Vk0mIHZtKQorICAgIHsKKyAgICAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOworICAgIH0K
KyAgICAKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiB2bSkKKyAgICB7CisgICAgICAgIGZp
bmlzaENyZWF0aW9uVW5pbml0aWFsaXplZCh2bSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IG1fc3ltYm9sVGFibGUtPnNjb3BlU2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICAvLyBGaWxs
aW5nIHRoaXMgd2l0aCB1bmRlZmluZWQgaXMgdXNlZnVsIGJlY2F1c2UgdGhhdCdzIHdoYXQgdmFy
aWFibGVzIHN0YXJ0IG91dCBhcy4KKyAgICAgICAgICAgIHZhcmlhYmxlQXQoaSkuc2V0VW5kZWZp
bmVkKCk7CisgICAgICAgIH0KKyAgICB9CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTGV4aWNhbEVudmlyb25tZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xleGljYWxFbnZp
cm9ubWVudC5jcHAJKHJldmlzaW9uIDE4MDg3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTTGV4aWNhbEVudmlyb25tZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDksIDIwMTQgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5LCAyMDE0LCAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtNDAsMjcgKzQwLDE5IEBAIG5hbWVzcGFjZSBKU0MgewogCiBjb25zdCBD
bGFzc0luZm8gSlNMZXhpY2FsRW52aXJvbm1lbnQ6OnNfaW5mbyA9IHsgIkpTTGV4aWNhbEVudmly
b25tZW50IiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU0xleGljYWxF
bnZpcm9ubWVudCkgfTsKIAotdm9pZCBKU0xleGljYWxFbnZpcm9ubWVudDo6dmlzaXRDaGlsZHJl
bihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQotewotICAgIEpTTGV4aWNhbEVu
dmlyb25tZW50KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTTGV4aWNhbEVudmlyb25tZW50Kj4oY2Vs
bCk7Ci0gICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwot
ICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7Ci0KLSAgICBmb3Ig
KGludCBpID0gMDsgaSA8IHRoaXNPYmplY3QtPnN5bWJvbFRhYmxlKCktPmNhcHR1cmVDb3VudCgp
OyArK2kpCi0gICAgICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5zdG9yYWdlKClbaV0p
OwotfQotCiBpbmxpbmUgYm9vbCBKU0xleGljYWxFbnZpcm9ubWVudDo6c3ltYm9sVGFibGVHZXQo
UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQogewogICAgIFN5
bWJvbFRhYmxlRW50cnkgZW50cnkgPSBzeW1ib2xUYWJsZSgpLT5pbmxpbmVHZXQocHJvcGVydHlO
YW1lLnVpZCgpKTsKICAgICBpZiAoZW50cnkuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAorICAgIFNjb3BlT2Zmc2V0IG9mZnNldCA9IGVudHJ5LnNjb3BlT2Zmc2V0KCk7CisKICAg
ICAvLyBEZWZlbmQgYWdhaW5zdCB0aGUgaW5zcGVjdG9yIGFza2luZyBmb3IgYSB2YXIgYWZ0ZXIg
aXQgaGFzIGJlZW4gb3B0aW1pemVkIG91dC4KLSAgICBpZiAoIWlzVmFsaWQoZW50cnkpKQorICAg
IGlmICghaXNWYWxpZChvZmZzZXQpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBzbG90
LnNldFZhbHVlKHRoaXMsIERvbnRFbnVtLCByZWdpc3RlckF0KGVudHJ5LmdldEluZGV4KCkpLmdl
dCgpKTsKKyAgICBzbG90LnNldFZhbHVlKHRoaXMsIERvbnRFbnVtLCB2YXJpYWJsZUF0KG9mZnNl
dCkuZ2V0KCkpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC03MCwxMSArNjIsMTMgQEAgaW5s
aW5lIGJvb2wgSlNMZXhpY2FsRW52aXJvbm1lbnQ6OnN5bWJvbAogICAgIGlmIChlbnRyeS5pc051
bGwoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAgU2NvcGVPZmZzZXQgb2Zmc2V0ID0g
ZW50cnkuc2NvcGVPZmZzZXQoKTsKKwogICAgIC8vIERlZmVuZCBhZ2FpbnN0IHRoZSBpbnNwZWN0
b3IgYXNraW5nIGZvciBhIHZhciBhZnRlciBpdCBoYXMgYmVlbiBvcHRpbWl6ZWQgb3V0LgotICAg
IGlmICghaXNWYWxpZChlbnRyeSkpCisgICAgaWYgKCFpc1ZhbGlkKG9mZnNldCkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcihyZWdpc3RlckF0
KGVudHJ5LmdldEluZGV4KCkpLmdldCgpLCBlbnRyeS5nZXRBdHRyaWJ1dGVzKCkpOworICAgIGRl
c2NyaXB0b3Iuc2V0RGVzY3JpcHRvcih2YXJpYWJsZUF0KG9mZnNldCkuZ2V0KCksIGVudHJ5Lmdl
dEF0dHJpYnV0ZXMoKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTk1LDEyICs4OSwxMyBA
QCBpbmxpbmUgYm9vbCBKU0xleGljYWxFbnZpcm9ubWVudDo6c3ltYm9sCiAgICAgICAgICAgICAg
ICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgU3RyaWN0TW9kZVJlYWRvbmx5UHJvcGVydHlXcml0ZUVy
cm9yKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CisgICAgICAgIFNjb3Bl
T2Zmc2V0IG9mZnNldCA9IGl0ZXItPnZhbHVlLnNjb3BlT2Zmc2V0KCk7CiAgICAgICAgIC8vIERl
ZmVuZCBhZ2FpbnN0IHRoZSBpbnNwZWN0b3IgYXNraW5nIGZvciBhIHZhciBhZnRlciBpdCBoYXMg
YmVlbiBvcHRpbWl6ZWQgb3V0LgotICAgICAgICBpZiAoIWlzVmFsaWQoaXRlci0+dmFsdWUpKQor
ICAgICAgICBpZiAoIWlzVmFsaWQob2Zmc2V0KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAgICAgaWYgKFZhcmlhYmxlV2F0Y2hwb2ludFNldCogc2V0ID0gaXRlci0+dmFsdWUud2F0
Y2hwb2ludFNldCgpKQotICAgICAgICAgICAgc2V0LT5pbnZhbGlkYXRlKFZhcmlhYmxlV3JpdGVG
aXJlRGV0YWlsKHRoaXMsIHByb3BlcnR5TmFtZSkpOyAvLyBEb24ndCBtZXNzIGFyb3VuZCAtIGlm
IHdlIGhhZCBmb3VuZCB0aGlzIHN0YXRpY2FsbHksIHdlIHdvdWxkIGhhdmUgaW52Y2FsaWRhdGVk
IGl0LgotICAgICAgICByZWcgPSAmcmVnaXN0ZXJBdChpdGVyLT52YWx1ZS5nZXRJbmRleCgpKTsK
KyAgICAgICAgICAgIHNldC0+aW52YWxpZGF0ZShWYXJpYWJsZVdyaXRlRmlyZURldGFpbCh0aGlz
LCBwcm9wZXJ0eU5hbWUpKTsgLy8gRG9uJ3QgbWVzcyBhcm91bmQgLSBpZiB3ZSBoYWQgZm91bmQg
dGhpcyBzdGF0aWNhbGx5LCB3ZSB3b3VsZCBoYXZlIGludmFsaWRhdGVkIGl0LgorICAgICAgICBy
ZWcgPSAmdmFyaWFibGVBdChvZmZzZXQpOwogICAgIH0KICAgICByZWctPnNldCh2bSwgdGhpcywg
dmFsdWUpOwogICAgIHJldHVybiB0cnVlOwpAQCAtMTE2LDcgKzExMSw3IEBAIHZvaWQgSlNMZXhp
Y2FsRW52aXJvbm1lbnQ6OmdldE93bk5vbkluZGUKICAgICAgICAgZm9yIChTeW1ib2xUYWJsZTo6
TWFwOjppdGVyYXRvciBpdCA9IHRoaXNPYmplY3QtPnN5bWJvbFRhYmxlKCktPmJlZ2luKGxvY2tl
cik7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICAgICAgaWYgKGl0LT52YWx1ZS5nZXRBdHRy
aWJ1dGVzKCkgJiBEb250RW51bSAmJiAhc2hvdWxkSW5jbHVkZURvbnRFbnVtUHJvcGVydGllcyht
b2RlKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGlmICghdGhpc09i
amVjdC0+aXNWYWxpZChpdC0+dmFsdWUpKQorICAgICAgICAgICAgaWYgKCF0aGlzT2JqZWN0LT5p
c1ZhbGlkKGl0LT52YWx1ZS5zY29wZU9mZnNldCgpKSkKICAgICAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXIoZXhlYywgaXQtPmtl
eS5nZXQoKSkpOwogICAgICAgICB9CkBAIC0xMzcsMTEgKzEzMiwxMyBAQCBpbmxpbmUgYm9vbCBK
U0xleGljYWxFbnZpcm9ubWVudDo6c3ltYm9sCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgICAgIFN5bWJvbFRhYmxlRW50cnkmIGVudHJ5ID0gaXRlci0+dmFsdWU7CiAgICAgICAgIEFT
U0VSVCghZW50cnkuaXNOdWxsKCkpOwotICAgICAgICBpZiAoIWlzVmFsaWQoZW50cnkpKQorICAg
ICAgICAKKyAgICAgICAgU2NvcGVPZmZzZXQgb2Zmc2V0ID0gZW50cnkuc2NvcGVPZmZzZXQoKTsK
KyAgICAgICAgaWYgKCFpc1ZhbGlkKG9mZnNldCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgICAgIAogICAgICAgICBlbnRyeS5zZXRBdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpOwotICAg
ICAgICByZWcgPSAmcmVnaXN0ZXJBdChlbnRyeS5nZXRJbmRleCgpKTsKKyAgICAgICAgcmVnID0g
JnZhcmlhYmxlQXQob2Zmc2V0KTsKICAgICB9CiAgICAgcmVnLT5zZXQodm0sIHRoaXMsIHZhbHVl
KTsKICAgICByZXR1cm4gdHJ1ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTTGV4aWNhbEVudmlyb25tZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNMZXhpY2FsRW52aXJvbm1lbnQuaAkocmV2aXNpb24gMTgwODc1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMZXhpY2FsRW52aXJvbm1lbnQuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIw
MDksIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDA4LCAyMDA5LCAyMDEzLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MSwzMyArNDEsMjcgQEAg
Y2xhc3MgUmVnaXN0ZXI7CiAgICAgCiBjbGFzcyBKU0xleGljYWxFbnZpcm9ubWVudCA6IHB1Ymxp
YyBKU0Vudmlyb25tZW50UmVjb3JkIHsKIHByaXZhdGU6Ci0gICAgSlNMZXhpY2FsRW52aXJvbm1l
bnQoVk0mLCBDYWxsRnJhbWUqLCBSZWdpc3RlciosIEpTU2NvcGUqLCBDb2RlQmxvY2sqKTsKKyAg
ICBKU0xleGljYWxFbnZpcm9ubWVudChWTSYsIFN0cnVjdHVyZSosIEpTU2NvcGUqLCBTeW1ib2xU
YWJsZSopOwogICAgIAogcHVibGljOgogICAgIHR5cGVkZWYgSlNFbnZpcm9ubWVudFJlY29yZCBC
YXNlOwogCi0gICAgc3RhdGljIEpTTGV4aWNhbEVudmlyb25tZW50KiBjcmVhdGUoVk0mIHZtLCBD
YWxsRnJhbWUqIGNhbGxGcmFtZSwgUmVnaXN0ZXIqIHJlZ2lzdGVycywgSlNTY29wZSogY3VycmVu
dFNjb3BlLCBDb2RlQmxvY2sqIGNvZGVCbG9jaykKKyAgICBzdGF0aWMgSlNMZXhpY2FsRW52aXJv
bm1lbnQqIGNyZWF0ZSgKKyAgICAgICAgVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU1Njb3BlKiBjdXJyZW50U2NvcGUsIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSkKICAg
ICB7Ci0gICAgICAgIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSA9IGNvZGVCbG9jay0+c3ltYm9s
VGFibGUoKTsKLSAgICAgICAgQVNTRVJUKGNvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlv
bkNvZGUpOwotICAgICAgICBKU0xleGljYWxFbnZpcm9ubWVudCogbGV4aWNhbEVudmlyb25tZW50
ID0gbmV3ICgKLSAgICAgICAgICAgIE5vdE51bGwsCi0gICAgICAgICAgICBhbGxvY2F0ZUNlbGw8
SlNMZXhpY2FsRW52aXJvbm1lbnQ+KAotICAgICAgICAgICAgICAgIHZtLmhlYXAsCi0gICAgICAg
ICAgICAgICAgYWxsb2NhdGlvblNpemUoc3ltYm9sVGFibGUpCi0gICAgICAgICAgICApCi0gICAg
ICAgICkgSlNMZXhpY2FsRW52aXJvbm1lbnQodm0sIGNhbGxGcmFtZSwgcmVnaXN0ZXJzLCBjdXJy
ZW50U2NvcGUsIGNvZGVCbG9jayk7Ci0gICAgICAgIGxleGljYWxFbnZpcm9ubWVudC0+ZmluaXNo
Q3JlYXRpb24odm0pOwotICAgICAgICByZXR1cm4gbGV4aWNhbEVudmlyb25tZW50OworICAgICAg
ICBKU0xleGljYWxFbnZpcm9ubWVudCogcmVzdWx0ID0KKyAgICAgICAgICAgIG5ldyAoTm90TnVs
bCwgYWxsb2NhdGlvblNpemUoc3ltYm9sVGFibGUpKQorICAgICAgICAgICAgSlNMZXhpY2FsRW52
aXJvbm1lbnQodm0sIGdsb2JhbE9iamVjdC0+YWN0aXZhdGlvblN0cnVjdHVyZSgpLCBjdXJyZW50
U2NvcGUsIHN5bWJvbFRhYmxlKTsKKyAgICAgICAgcmVzdWx0LT5maW5pc2hDcmVhdGlvbih2bSk7
CiAgICAgfQotICAgICAgICAKKyAgICAKICAgICBzdGF0aWMgSlNMZXhpY2FsRW52aXJvbm1lbnQq
IGNyZWF0ZShWTSYgdm0sIENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU1Njb3BlKiBjdXJyZW50U2Nv
cGUsIENvZGVCbG9jayogY29kZUJsb2NrKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZSh2
bSwgY2FsbEZyYW1lLCBjYWxsRnJhbWUtPnJlZ2lzdGVycygpICsgY29kZUJsb2NrLT5mcmFtZVBv
aW50ZXJPZmZzZXRUb0dldEFjdGl2YXRpb25SZWdpc3RlcnMoKSwgY3VycmVudFNjb3BlLCBjb2Rl
QmxvY2spOworICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gY2FsbEZyYW1l
LT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7CisgICAgICAgIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJs
ZSA9IGNvZGVCbG9jay0+c3ltYm9sVGFibGUoKTsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZSh2bSwg
Z2xvYmFsT2JqZWN0LCBjdXJyZW50U2NvcGUsIHN5bWJvbHRhYmxlKTsKICAgICB9Ci0KLSAgICBz
dGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Ci0KKyAgICAg
ICAgCiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiwgRXhlY1N0
YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgdm9pZCBnZXRP
d25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5h
bWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CiAKQEAgLTgxLDEyICs3NSw2IEBAIHB1YmxpYzoK
IAogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QpIHsgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9i
YWxPYmplY3QsIGpzTnVsbCgpLCBUeXBlSW5mbyhBY3RpdmF0aW9uT2JqZWN0VHlwZSwgU3RydWN0
dXJlRmxhZ3MpLCBpbmZvKCkpOyB9CiAKLSAgICBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+JiBy
ZWdpc3RlckF0KGludCkgY29uc3Q7Ci0gICAgYm9vbCBpc1ZhbGlkSW5kZXgoaW50KSBjb25zdDsK
LSAgICBib29sIGlzVmFsaWQoY29uc3QgU3ltYm9sVGFibGVFbnRyeSYpIGNvbnN0OwotICAgIGlu
dCByZWdpc3RlcnNPZmZzZXQoKTsKLSAgICBzdGF0aWMgaW50IHJlZ2lzdGVyc09mZnNldChTeW1i
b2xUYWJsZSopOwotCiBwcm90ZWN0ZWQ6CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVj
dHVyZUZsYWdzID0gT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0UHJv
cGVydHlOYW1lcyB8IEJhc2U6OlN0cnVjdHVyZUZsYWdzOwogCkBAIC05NiwzMiArODQsMTMgQEAg
cHJpdmF0ZToKICAgICBib29sIHN5bWJvbFRhYmxlR2V0KFByb3BlcnR5TmFtZSwgUHJvcGVydHlT
bG90JiwgYm9vbCYgc2xvdElzV3JpdGVhYmxlKTsKICAgICBib29sIHN5bWJvbFRhYmxlUHV0KEV4
ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7CiAgICAg
Ym9vbCBzeW1ib2xUYWJsZVB1dFdpdGhBdHRyaWJ1dGVzKFZNJiwgUHJvcGVydHlOYW1lLCBKU1Zh
bHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKTsKLQotICAgIHN0YXRpYyBzaXplX3QgYWxsb2NhdGlv
blNpemUoU3ltYm9sVGFibGUqKTsKLSAgICBzdGF0aWMgc2l6ZV90IHN0b3JhZ2VPZmZzZXQoKTsK
LQotICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogc3RvcmFnZSgpOyAvLyBjYXB0dXJlQ291bnQo
KSBudW1iZXIgb2YgcmVnaXN0ZXJzLgogfTsKIAotaW5saW5lIEpTTGV4aWNhbEVudmlyb25tZW50
OjpKU0xleGljYWxFbnZpcm9ubWVudChWTSYgdm0sIENhbGxGcmFtZSogY2FsbEZyYW1lLCBSZWdp
c3RlciogcmVnaXN0ZXJzLCBKU1Njb3BlKiBjdXJyZW50U2NvcGUsIENvZGVCbG9jayogY29kZUJs
b2NrKQotICAgIDogQmFzZSgKLSAgICAgICAgdm0sCi0gICAgICAgIGNhbGxGcmFtZS0+bGV4aWNh
bEdsb2JhbE9iamVjdCgpLT5hY3RpdmF0aW9uU3RydWN0dXJlKCksCi0gICAgICAgIHJlZ2lzdGVy
cywKLSAgICAgICAgY3VycmVudFNjb3BlLAotICAgICAgICBjb2RlQmxvY2stPnN5bWJvbFRhYmxl
KCkpCitpbmxpbmUgSlNMZXhpY2FsRW52aXJvbm1lbnQ6OkpTTGV4aWNhbEVudmlyb25tZW50KFZN
JiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTU2NvcGUqIGN1cnJlbnRTY29wZSwgU3ltYm9s
VGFibGUqIHN5bWJvbFRhYmxlKQorICAgIDogQmFzZSh2bSwgc3RydWN0dXJlLCBjdXJyZW50U2Nv
cGUsIHN5bWJvbFRhYmxlKQogewotICAgIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSA9IGNvZGVC
bG9jay0+c3ltYm9sVGFibGUoKTsKLSAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHN0b3JhZ2Ug
PSB0aGlzLT5zdG9yYWdlKCk7Ci0gICAgc2l6ZV90IGNhcHR1cmVDb3VudCA9IHN5bWJvbFRhYmxl
LT5jYXB0dXJlQ291bnQoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNhcHR1cmVDb3Vu
dDsgKytpKQotICAgICAgICBuZXcgKE5vdE51bGwsICZzdG9yYWdlW2ldKSBXcml0ZUJhcnJpZXI8
VW5rbm93bj4oVW5kZWZpbmVkV3JpdGVCYXJyaWVyVGFnKTsKLSAgICBtX3JlZ2lzdGVycyA9IHJl
aW50ZXJwcmV0X2Nhc3RfcHRyPFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qPigKLSAgICAgICAg
cmVpbnRlcnByZXRfY2FzdDxjaGFyKj4odGhpcykgKyByZWdpc3RlcnNPZmZzZXQoc3ltYm9sVGFi
bGUpKTsKIH0KIAotSlNMZXhpY2FsRW52aXJvbm1lbnQqIGFzQWN0aXZhdGlvbihKU1ZhbHVlKTsK
LQogaW5saW5lIEpTTGV4aWNhbEVudmlyb25tZW50KiBhc0FjdGl2YXRpb24oSlNWYWx1ZSB2YWx1
ZSkKIHsKICAgICBBU1NFUlQoYXNPYmplY3QodmFsdWUpLT5pbmhlcml0cyhKU0xleGljYWxFbnZp
cm9ubWVudDo6aW5mbygpKSk7CkBAIC0xMzMsNDkgKzEwMiw2IEBAIEFMV0FZU19JTkxJTkUgSlNM
ZXhpY2FsRW52aXJvbm1lbnQqIFJlZ2kKICAgICByZXR1cm4gYXNBY3RpdmF0aW9uKGpzVmFsdWUo
KSk7CiB9CiAKLWlubGluZSBpbnQgSlNMZXhpY2FsRW52aXJvbm1lbnQ6OnJlZ2lzdGVyc09mZnNl
dChTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUpCi17Ci0gICAgcmV0dXJuIHN0b3JhZ2VPZmZzZXQo
KSArICgoc3ltYm9sVGFibGUtPmNhcHR1cmVDb3VudCgpIC0gc3ltYm9sVGFibGUtPmNhcHR1cmVT
dGFydCgpICAtIDEpICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpOwotfQotCi1pbmxp
bmUgc2l6ZV90IEpTTGV4aWNhbEVudmlyb25tZW50OjpzdG9yYWdlT2Zmc2V0KCkKLXsKLSAgICBy
ZXR1cm4gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mPHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93
bj4pPihzaXplb2YoSlNMZXhpY2FsRW52aXJvbm1lbnQpKTsKLX0KLQotaW5saW5lIFdyaXRlQmFy
cmllcjxVbmtub3duPiogSlNMZXhpY2FsRW52aXJvbm1lbnQ6OnN0b3JhZ2UoKQotewotICAgIHJl
dHVybiByZWludGVycHJldF9jYXN0X3B0cjxXcml0ZUJhcnJpZXI8VW5rbm93bj4qPigKLSAgICAg
ICAgcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4odGhpcykgKyBzdG9yYWdlT2Zmc2V0KCkpOwotfQot
Ci1pbmxpbmUgc2l6ZV90IEpTTGV4aWNhbEVudmlyb25tZW50OjphbGxvY2F0aW9uU2l6ZShTeW1i
b2xUYWJsZSogc3ltYm9sVGFibGUpCi17Ci0gICAgc2l6ZV90IG9iamVjdFNpemVJbkJ5dGVzID0g
V1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mPHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pPihz
aXplb2YoSlNMZXhpY2FsRW52aXJvbm1lbnQpKTsKLSAgICBzaXplX3Qgc3RvcmFnZVNpemVJbkJ5
dGVzID0gc3ltYm9sVGFibGUtPmNhcHR1cmVDb3VudCgpICogc2l6ZW9mKFdyaXRlQmFycmllcjxV
bmtub3duPik7Ci0gICAgcmV0dXJuIG9iamVjdFNpemVJbkJ5dGVzICsgc3RvcmFnZVNpemVJbkJ5
dGVzOwotfQotCi1pbmxpbmUgYm9vbCBKU0xleGljYWxFbnZpcm9ubWVudDo6aXNWYWxpZEluZGV4
KGludCBpbmRleCkgY29uc3QKLXsKLSAgICBpZiAoaW5kZXggPiBzeW1ib2xUYWJsZSgpLT5jYXB0
dXJlU3RhcnQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChpbmRleCA8PSBzeW1i
b2xUYWJsZSgpLT5jYXB0dXJlRW5kKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1
cm4gdHJ1ZTsKLX0KLQotaW5saW5lIGJvb2wgSlNMZXhpY2FsRW52aXJvbm1lbnQ6OmlzVmFsaWQo
Y29uc3QgU3ltYm9sVGFibGVFbnRyeSYgZW50cnkpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGlzVmFs
aWRJbmRleChlbnRyeS5nZXRJbmRleCgpKTsKLX0KLQotaW5saW5lIFdyaXRlQmFycmllckJhc2U8
VW5rbm93bj4mIEpTTGV4aWNhbEVudmlyb25tZW50OjpyZWdpc3RlckF0KGludCBpbmRleCkgY29u
c3QKLXsKLSAgICBBU1NFUlQoaXNWYWxpZEluZGV4KGluZGV4KSk7Ci0gICAgcmV0dXJuIEJhc2U6
OnJlZ2lzdGVyQXQoaW5kZXgpOwotfQotCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8v
IEpTTGV4aWNhbEVudmlyb25tZW50X2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTTmFtZVNjb3BlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU05hbWVTY29wZS5jcHAJKHJldmlzaW9uIDE4MDg3NSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTTmFtZVNjb3BlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcs
MTQgKzQ3LDYgQEAgSlNOYW1lU2NvcGUqIEpTTmFtZVNjb3BlOjpjcmVhdGUoVk0mIHZtLAogICAg
IHJldHVybiBudWxscHRyOwogfQogCi12b2lkIEpTTmFtZVNjb3BlOjp2aXNpdENoaWxkcmVuKEpT
Q2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi17Ci0gICAgSlNOYW1lU2NvcGUqIHRo
aXNPYmplY3QgPSBqc0Nhc3Q8SlNOYW1lU2NvcGUqPihjZWxsKTsKLSAgICBBU1NFUlRfR0NfT0JK
RUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7Ci0gICAgQmFzZTo6dmlzaXRDaGlsZHJl
bih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKLSAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+
bV9yZWdpc3RlclN0b3JlKTsKLX0KLQogSlNWYWx1ZSBKU05hbWVTY29wZTo6dG9UaGlzKEpTQ2Vs
bCosIEV4ZWNTdGF0ZSogZXhlYywgRUNNQU1vZGUgZWNtYU1vZGUpCiB7CiAgICAgaWYgKGVjbWFN
b2RlID09IFN0cmljdE1vZGUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U05hbWVTY29wZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTTmFtZVNjb3BlLmgJKHJldmlzaW9uIDE4MDg3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTTmFtZVNjb3BlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDM4ICs0NCwzNyBA
QCBwdWJsaWM6CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KICAgICBzdGF0aWMgVCogY3JlYXRl
KFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNTY29wZSogY3VycmVudFNj
b3BlLCBTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUsIEpTVmFsdWUgdmFsdWUpCiAgICAgewotICAg
ICAgICBUKiBzY29wZU9iamVjdCA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFQ+KHZtLmhl
YXApKSBUKHZtLCBnbG9iYWxPYmplY3QsIGN1cnJlbnRTY29wZSwgc3ltYm9sVGFibGUpOworICAg
ICAgICBUKiBzY29wZU9iamVjdCA9IG5ldyAoCisgICAgICAgICAgICBOb3ROdWxsLCBhbGxvY2F0
ZUNlbGw8VD4odm0uaGVhcCwgYWxsb2NhdGlvblNpemVGb3JTY29wZVNpemUoMSkpCisgICAgICAg
ICAgICBUKHZtLCBnbG9iYWxPYmplY3QsIGN1cnJlbnRTY29wZSwgc3ltYm9sVGFibGUpOwogICAg
ICAgICBzY29wZU9iamVjdC0+ZmluaXNoQ3JlYXRpb24odm0sIHZhbHVlKTsKICAgICAgICAgcmV0
dXJuIHNjb3BlT2JqZWN0OwogICAgIH0KICAgICAKICAgICBzdGF0aWMgSlNOYW1lU2NvcGUqIGNy
ZWF0ZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNTY29wZSogY3VycmVudFNjb3BlLCBTeW1ib2xU
YWJsZSosIEpTVmFsdWUsIFR5cGUpOwogCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihK
U0NlbGwqLCBTbG90VmlzaXRvciYpOwogICAgIHN0YXRpYyBKU1ZhbHVlIHRvVGhpcyhKU0NlbGwq
LCBFeGVjU3RhdGUqLCBFQ01BTW9kZSk7CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlT
bG90KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsK
ICAgICBzdGF0aWMgdm9pZCBwdXQoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBK
U1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKIAogICAgIERFQ0xBUkVfSU5GTzsKIAotICAgIEpT
VmFsdWUgdmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3JlZ2lzdGVyU3RvcmUuZ2V0KCk7IH0KKyAg
ICBKU1ZhbHVlIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gdmFyaWFibGVBdCgwKS5nZXQoKTsgfQog
CiBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYgdm0sIEpTVmFsdWUgdmFs
dWUpCiAgICAgewotICAgICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7Ci0gICAgICAgIG1f
cmVnaXN0ZXJTdG9yZS5zZXQodm0sIHRoaXMsIHZhbHVlKTsKKyAgICAgICAgQmFzZTo6ZmluaXNo
Q3JlYXRpb25VbmluaXRpYWxpemVkKHZtKTsKKyAgICAgICAgdmFyaWFibGVBdCgwKS5zZXQodm0s
IHRoaXMsIHZhbHVlKTsKICAgICB9CiAKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0
dXJlRmxhZ3MgPSBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBCYXNlOjpTdHJ1Y3R1cmVG
bGFnczsKIAogICAgIEpTTmFtZVNjb3BlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpT
U2NvcGUqIG5leHQsIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSkKLSAgICAgICAgOiBCYXNlKHZt
LCBzdHJ1Y3R1cmUsIHJlaW50ZXJwcmV0X2Nhc3Q8UmVnaXN0ZXIqPigmbV9yZWdpc3RlclN0b3Jl
ICsgMSksIG5leHQsIHN5bWJvbFRhYmxlKQorICAgICAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSwg
bmV4dCwgc3ltYm9sVGFibGUpCiAgICAgeworICAgICAgICBBU1NFUlQoc3ltYm9sVGFibGUtPnNj
b3BlU2l6ZSgpID09IDEpOwogICAgIH0KLQotcHJpdmF0ZToKLSAgICBXcml0ZUJhcnJpZXI8VW5r
bm93bj4gbV9yZWdpc3RlclN0b3JlOwogfTsKIAogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5j
cHAJKHJldmlzaW9uIDE4MDg3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
U2VnbWVudGVkVmFyaWFibGVPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMsIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0z
MywzMiArMzMsMzAgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWludCBKU1NlZ21lbnRlZFZhcmlh
YmxlT2JqZWN0OjpmaW5kUmVnaXN0ZXJJbmRleCh2b2lkKiByZWdpc3RlckFkZHJlc3MpCitTY29w
ZU9mZnNldCBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0OjpmaW5kUmVnaXN0ZXJJbmRleCh2b2lk
KiByZWdpc3RlckFkZHJlc3MpCiB7CiAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9s
b2NrKTsKICAgICAKLSAgICBmb3IgKGludCBpID0gbV9yZWdpc3RlcnMuc2l6ZSgpOyBpLS07KSB7
CisgICAgZm9yICh1bnNpZ25lZCBpID0gbV9yZWdpc3RlcnMuc2l6ZSgpOyBpLS07KSB7CiAgICAg
ICAgIGlmICgmbV9yZWdpc3RlcnNbaV0gIT0gcmVnaXN0ZXJBZGRyZXNzKQogICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgIHJldHVybiBpOworICAgICAgICByZXR1cm4gU2NvcGVPZmZzZXQo
aSk7CiAgICAgfQogICAgIENSQVNIKCk7Ci0gICAgcmV0dXJuIC0xOworICAgIHJldHVybiBTY29w
ZU9mZnNldCgpOwogfQogCi1pbnQgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdDo6YWRkUmVnaXN0
ZXJzKGludCBudW1iZXJPZlJlZ2lzdGVyc1RvQWRkKQorU2NvcGVPZmZzZXQgSlNTZWdtZW50ZWRW
YXJpYWJsZU9iamVjdDo6YWRkUmVnaXN0ZXJzKHVuc2lnbmVkIG51bWJlck9mUmVnaXN0ZXJzVG9B
ZGQpCiB7CiAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsKICAgICAKLSAg
ICBBU1NFUlQobnVtYmVyT2ZSZWdpc3RlcnNUb0FkZCA+PSAwKTsKLSAgICAKICAgICBzaXplX3Qg
b2xkU2l6ZSA9IG1fcmVnaXN0ZXJzLnNpemUoKTsKICAgICBtX3JlZ2lzdGVycy5ncm93KG9sZFNp
emUgKyBudW1iZXJPZlJlZ2lzdGVyc1RvQWRkKTsKICAgICAKICAgICBmb3IgKHNpemVfdCBpID0g
bnVtYmVyT2ZSZWdpc3RlcnNUb0FkZDsgaS0tOykKICAgICAgICAgbV9yZWdpc3RlcnNbb2xkU2l6
ZSArIGldLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoanNVbmRlZmluZWQoKSk7CiAgICAgCi0gICAg
cmV0dXJuIHN0YXRpY19jYXN0PGludD4ob2xkU2l6ZSk7CisgICAgcmV0dXJuIFNjb3BlT2Zmc2V0
KG9sZFNpemUpOwogfQogCiB2b2lkIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3Q6OnZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJp
YWJsZU9iamVjdC5oCShyZXZpc2lvbiAxODA4NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTU3
LDI0ICs1NywyMyBAQCBjbGFzcyBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0IDogcHVibGljCiBw
dWJsaWM6CiAgICAgdHlwZWRlZiBKU1N5bWJvbFRhYmxlT2JqZWN0IEJhc2U7CiAKLSAgICBXcml0
ZUJhcnJpZXI8VW5rbm93bj4mIHJlZ2lzdGVyQXQoaW50IGluZGV4KSB7IHJldHVybiBtX3JlZ2lz
dGVyc1tpbmRleF07IH0KKyAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHZhcmlhYmxlQXQoU2Nv
cGVPZmZzZXQgb2Zmc2V0KSB7IHJldHVybiBtX3ZhcmlhYmxlc1tvZmZzZXQub2Zmc2V0KCldOyB9
CiAgICAgCiAgICAgLy8gVGhpcyBpcyBhIHNsb3cgbWV0aG9kIGNhbGwsIHdoaWNoIHNlYXJjaGVz
IHRoZSByZWdpc3RlciBiYW5rIHRvIGZpbmQgdGhlIGluZGV4CiAgICAgLy8gZ2l2ZW4gYSBwb2lu
dGVyLiBJdCB3aWxsIENSQVNIKCkgaWYgaXQgZG9lcyBub3QgZmluZCB0aGUgcmVnaXN0ZXIuIE9u
bHkgdXNlIHRoaXMKICAgICAvLyBpbiBkZWJ1ZyBjb2RlIChsaWtlIGJ5dGVjb2RlIGR1bXBpbmcp
LgotICAgIEpTX0VYUE9SVF9QUklWQVRFIGludCBmaW5kUmVnaXN0ZXJJbmRleCh2b2lkKik7Cisg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgU2NvcGVPZmZzZXQgZmluZFJlZ2lzdGVySW5kZXgodm9pZCop
OwogICAgIAotICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogYXNzZXJ0UmVnaXN0ZXJJc0luVGhp
c09iamVjdChXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHJlZ2lzdGVyUG9pbnRlcikKKyAgICBXcml0
ZUJhcnJpZXI8VW5rbm93bj4qIGFzc2VydFZhcmlhYmxlSXNJblRoaXNPYmplY3QoV3JpdGVCYXJy
aWVyPFVua25vd24+KiB2YXJpYWJsZVBvaW50ZXIpCiAgICAgewotI2lmICFBU1NFUlRfRElTQUJM
RUQKLSAgICAgICAgZmluZFJlZ2lzdGVySW5kZXgocmVnaXN0ZXJQb2ludGVyKTsKLSNlbmRpZgor
ICAgICAgICBpZiAoIUFTU0VSVF9ESVNBQkxFRCkKKyAgICAgICAgICAgIGZpbmRSZWdpc3Rlcklu
ZGV4KHJlZ2lzdGVyUG9pbnRlcik7CiAgICAgICAgIHJldHVybiByZWdpc3RlclBvaW50ZXI7CiAg
ICAgfQogICAgIAogICAgIC8vIEFkZHMgbnVtYmVyT2ZSZWdpc3RlcnNUb0FkZCByZWdpc3RlcnMs
IGluaXRpYWxpemVzIHRoZW0gdG8gVW5kZWZpbmVkLCBhbmQgcmV0dXJucwogICAgIC8vIHRoZSBp
bmRleCBvZiB0aGUgZmlyc3Qgb25lIGFkZGVkLgotICAgIEpTX0VYUE9SVF9QUklWQVRFIGludCBh
ZGRSZWdpc3RlcnMoaW50IG51bWJlck9mUmVnaXN0ZXJzVG9BZGQpOworICAgIEpTX0VYUE9SVF9Q
UklWQVRFIFNjb3BlT2Zmc2V0IGFkZFJlZ2lzdGVycyh1bnNpZ25lZCBudW1iZXJPZlJlZ2lzdGVy
c1RvQWRkKTsKICAgICAKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCB2aXNpdENo
aWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmgJKHJldmlzaW9uIDE4
MDg3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmpl
Y3QuaAkod29ya2luZyBjb3B5KQpAQCAtNzgsNyArNzgsNyBAQCBpbmxpbmUgYm9vbCBzeW1ib2xU
YWJsZUdldCgKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIFN5bWJvbFRhYmxlRW50cnk6OkZh
c3QgZW50cnkgPSBpdGVyLT52YWx1ZTsKICAgICBBU1NFUlQoIWVudHJ5LmlzTnVsbCgpKTsKLSAg
ICBzbG90LnNldFZhbHVlKG9iamVjdCwgZW50cnkuZ2V0QXR0cmlidXRlcygpIHwgRG9udERlbGV0
ZSwgb2JqZWN0LT5yZWdpc3RlckF0KGVudHJ5LmdldEluZGV4KCkpLmdldCgpKTsKKyAgICBzbG90
LnNldFZhbHVlKG9iamVjdCwgZW50cnkuZ2V0QXR0cmlidXRlcygpIHwgRG9udERlbGV0ZSwgb2Jq
ZWN0LT52YXJpYWJsZUF0KGVudHJ5LnNjb3BlT2Zmc2V0KCkpLmdldCgpKTsKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIApAQCAtOTQsNyArOTQsNyBAQCBpbmxpbmUgYm9vbCBzeW1ib2xUYWJsZUdldCgK
ICAgICBTeW1ib2xUYWJsZUVudHJ5OjpGYXN0IGVudHJ5ID0gaXRlci0+dmFsdWU7CiAgICAgQVNT
RVJUKCFlbnRyeS5pc051bGwoKSk7CiAgICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKAotICAg
ICAgICBvYmplY3QtPnJlZ2lzdGVyQXQoZW50cnkuZ2V0SW5kZXgoKSkuZ2V0KCksIGVudHJ5Lmdl
dEF0dHJpYnV0ZXMoKSB8IERvbnREZWxldGUpOworICAgICAgICBvYmplY3QtPnZhcmlhYmxlQXQo
ZW50cnkuc2NvcGVPZmZzZXQoKSkuZ2V0KCksIGVudHJ5LmdldEF0dHJpYnV0ZXMoKSB8IERvbnRE
ZWxldGUpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0xMTAsNyArMTEwLDcgQEAgaW5saW5l
IGJvb2wgc3ltYm9sVGFibGVHZXQoCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBTeW1ib2xU
YWJsZUVudHJ5OjpGYXN0IGVudHJ5ID0gaXRlci0+dmFsdWU7CiAgICAgQVNTRVJUKCFlbnRyeS5p
c051bGwoKSk7Ci0gICAgc2xvdC5zZXRWYWx1ZShvYmplY3QsIGVudHJ5LmdldEF0dHJpYnV0ZXMo
KSB8IERvbnREZWxldGUsIG9iamVjdC0+cmVnaXN0ZXJBdChlbnRyeS5nZXRJbmRleCgpKS5nZXQo
KSk7CisgICAgc2xvdC5zZXRWYWx1ZShvYmplY3QsIGVudHJ5LmdldEF0dHJpYnV0ZXMoKSB8IERv
bnREZWxldGUsIG9iamVjdC0+dmFyaWFibGVBdChlbnRyeS5zY29wZU9mZnNldCgpKS5nZXQoKSk7
CiAgICAgc2xvdElzV3JpdGVhYmxlID0gIWVudHJ5LmlzUmVhZE9ubHkoKTsKICAgICByZXR1cm4g
dHJ1ZTsKIH0KQEAgLTE0NSw3ICsxNDUsNyBAQCBpbmxpbmUgYm9vbCBzeW1ib2xUYWJsZVB1dCgK
ICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
MzQ2MDEKICAgICAgICAgICAgIHNldC0+bm90aWZ5V3JpdGUodm0sIHZhbHVlLCBvYmplY3QsIHBy
b3BlcnR5TmFtZSk7CiAgICAgICAgIH0KLSAgICAgICAgcmVnID0gJm9iamVjdC0+cmVnaXN0ZXJB
dChmYXN0RW50cnkuZ2V0SW5kZXgoKSk7CisgICAgICAgIHJlZyA9ICZvYmplY3QtPnZhcmlhYmxl
QXQoZmFzdEVudHJ5LnNjb3BlT2Zmc2V0KCkpOwogICAgIH0KICAgICAvLyBJJ2QgcHJlZmVyIHdl
IG5vdCBob2xkIGxvY2sgd2hpbGUgZXhlY3V0aW5nIGJhcnJpZXJzLCBzaW5jZSBJIHByZWZlciB0
byByZXNlcnZlCiAgICAgLy8gdGhlIHJpZ2h0IGZvciBiYXJyaWVycyB0byBiZSBhYmxlIHRvIHRy
aWdnZXIgR0MuIEFuZCBJIGRvbid0IHdhbnQgdG8gaG9sZCBWTQpAQCAtMTczLDcgKzE3Myw3IEBA
IGlubGluZSBib29sIHN5bWJvbFRhYmxlUHV0V2l0aEF0dHJpYnV0ZXMKICAgICAgICAgaWYgKFZh
cmlhYmxlV2F0Y2hwb2ludFNldCogc2V0ID0gZW50cnkud2F0Y2hwb2ludFNldCgpKQogICAgICAg
ICAgICAgc2V0LT5ub3RpZnlXcml0ZSh2bSwgdmFsdWUsIG9iamVjdCwgcHJvcGVydHlOYW1lKTsK
ICAgICAgICAgZW50cnkuc2V0QXR0cmlidXRlcyhhdHRyaWJ1dGVzKTsKLSAgICAgICAgcmVnID0g
Jm9iamVjdC0+cmVnaXN0ZXJBdChlbnRyeS5nZXRJbmRleCgpKTsKKyAgICAgICAgcmVnID0gJm9i
amVjdC0+dmFyaWFibGVBdChlbnRyeS5zY29wZU9mZnNldCgpKTsKICAgICB9CiAgICAgcmVnLT5z
ZXQodm0sIG9iamVjdCwgdmFsdWUpOwogICAgIHJldHVybiB0cnVlOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlLmgJKHJldmlzaW9uIDE4MDg3NSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01OCw3ICs1
OCw4IEBAIGVudW0gSlNUeXBlIDogdWludDhfdCB7CiAgICAgUHVyZUZvcndhcmRpbmdQcm94eVR5
cGUsCiAgICAgSW1wdXJlUHJveHlUeXBlLAogICAgIFdpdGhTY29wZVR5cGUsCi0gICAgQXJndW1l
bnRzVHlwZSwKKyAgICBEaXJlY3RBcmd1bWVudHNUeXBlLAorICAgIFNjb3BlZEFyZ3VtZW50c1R5
cGUsCiAKICAgICBJbnQ4QXJyYXlUeXBlLAogICAgIEludDE2QXJyYXlUeXBlLApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3V0T2ZCYW5kQXJndW1lbnRzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PdXRPZkJhbmRBcmd1bWVudHMu
Y3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3V0T2ZC
YW5kQXJndW1lbnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIxMyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiT3V0T2ZCYW5kQXJndW1lbnRzLmgiCisKKyNpbmNsdWRlICJKU0FyZ3Vt
ZW50c0l0ZXJhdG9yLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlND
IHsKKworU1RBVElDX0FTU0VSVF9JU19UUklWSUFMTFlfREVTVFJVQ1RJQkxFKE91dE9mQmFuZEFy
Z3VtZW50cyk7CisKK2NvbnN0IENsYXNzSW5mbyBPdXRPZkJhbmRBcmd1bWVudHM6OnNfaW5mbyA9
IHsgIkFyZ3VtZW50cyIsICZCYXNlOjpzX2luZm8sIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoT3V0
T2ZCYW5kQXJndW1lbnRzKSB9OworCitPdXRPZkJhbmRBcmd1bWVudHM6Ok91dE9mQmFuZEFyZ3Vt
ZW50cyhWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIDogQmFzZSh2bSwgc3RydWN0
dXJlLCBudWxscHRyKQorICAgICwgbV9zcGVjaWFsc01hdGVyaWFsaXplZChmYWxzZSkKK3sKK30K
KworT3V0T2ZCYW5kQXJndW1lbnRzKiBPdXRPZkJhbmRBcmd1bWVudHM6OmNyZWF0ZUVtcHR5KAor
ICAgIFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNGdW5jdGlvbiogY2Fs
bGVlKQoreworICAgIE91dE9mQmFuZEFyZ3VtZW50cyogcmVzdWx0ID0gbmV3IChOb3ROdWxsLCBh
bGxvY2F0ZUNlbGw8T3V0T2ZCYW5kQXJndW1lbnRzPih2bS5oZWFwKSkKKyAgICAgICAgT3V0T2ZC
YW5kQXJndW1lbnRzKHZtLCBnbG9iYWxPYmplY3QtPm91dE9mQmFuZEFyZ3VtZW50c1N0cnVjdHVy
ZSgpKTsKKyAgICByZXN1bHQtPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICByZXN1bHQtPm1fY2Fs
bGVlLnNldCh2bSwgdGhpcywgY2FsbGVlKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitPdXRP
ZkJhbmRBcmd1bWVudHMqIE91dE9mQmFuZEFyZ3VtZW50czo6Y3JlYXRlRW1wdHkoRXhlY1N0YXRl
KiBleGVjLCBKU0Z1bmN0aW9uKiBjYWxsZWUpCit7CisgICAgLy8gTkIuIFNvbWUgY2xpZW50cyBt
aWdodCBleHBlY3QgdGhhdCB0aGUgZ2xvYmFsIG9iamVjdCBvZiBvZiB0aGlzIG9iamVjdCBpcyB0
aGUgZ2xvYmFsIG9iamVjdAorICAgIC8vIG9mIHRoZSBjYWxsZWUuIFdlIGRvbid0IGRvIHRoaXMg
Zm9yIG5vdywgYnV0IG1heWJlIHdlIHNob3VsZC4KKyAgICByZXR1cm4gY3JlYXRlRW1wdHkoZXhl
Yy0+dm0oKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBjYWxsZWUpOworfQorCitPdXRP
ZkJhbmRBcmd1bWVudHMqIE91dE9mQmFuZEFyZ3VtZW50czo6Y3JlYXRlV2l0aElubGluZUZyYW1l
KEV4ZWNTdGF0ZSogbXlGcmFtZSwgRXhlY1N0YXRlKiB0YXJnZXRGcmFtZSwgSW5saW5lQ2FsbEZy
YW1lKiBpbmxpbmVDYWxsRnJhbWUsIEFyZ3VtZW50c01vZGUgbW9kZSkKK3sKKyAgICBWTSYgdm0g
PSBteUZyYW1lLT52bSgpOworICAgIAorICAgIEpTRnVuY3Rpb24qIGNhbGxlZTsKKyAgICAKKyAg
ICBpZiAoaW5saW5lQ2FsbEZyYW1lKQorICAgICAgICBjYWxsZWUgPSBqc0Nhc3Q8SlNGdW5jdGlv
bio+KGlubGluZUNhbGxGcmFtZS0+Y2FsbGVlUmVjb3ZlcnkucmVjb3Zlcih0YXJnZXRGcmFtZSkp
OworICAgIGVsc2UKKyAgICAgICAgY2FsbGVlID0ganNDYXN0PEpTRnVuY3Rpb24qPih0YXJnZXRG
cmFtZS0+Y2FsbGVlKCkpOworCisgICAgLy8gTkIuIEl0J3Mgc29tZXdoYXQgYXJiaXRyYXJ5IHRo
YXQgd2UgdGllIHRoZSBzdHJpY3RuZXNzIG9mIHRoaXMgb2JqZWN0IHRvIHRoZSBzdHJpY3RuZXNz
IG9mCisgICAgLy8gdGhlIGNhbGxlZS4KKyAgICBib29sIGlzU3RyaWN0TW9kZSA9IGV4ZWN1dGFi
bGUtPmlzU3RyaWN0TW9kZSgpOworCisgICAgT3V0T2ZCYW5kQXJndW1lbnRzKiByZXN1bHQgPSBj
cmVhdGVFbXB0eShteUZyYW1lLCBjYWxsZWUpOworICAgIAorICAgIHVuc2lnbmVkIGxlbmd0aDsK
KyAgICBzd2l0Y2ggKG1vZGUpIHsKKyAgICBjYXNlIENsb25lZEFyZ3VtZW50c0NyZWF0aW9uTW9k
ZTogeworICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lKSB7CisgICAgICAgICAgICBpZiAoaW5s
aW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50UmVnaXN0ZXIuaXNWYWxpZCgpKQorICAgICAgICAg
ICAgICAgIGxlbmd0aCA9IGV4ZWMtPnIoaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50UmVn
aXN0ZXIpLnVuYm94ZWRJbnQzMigpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
IGxlbmd0aCA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKTsKKyAgICAgICAgICAg
IGxlbmd0aC0tOworICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBs
ZW5ndGg7IGktLTspCisgICAgICAgICAgICAgICAgcmVzdWx0LT5wdXREaXJlY3RJbmRleChteUZy
YW1lLCBpLCBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50c1tpXS5yZWNvdmVyKHRhcmdldEZyYW1l
KSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBsZW5ndGggPSB0YXJnZXRGcmFtZS0+
YXJndW1lbnRDb3VudCgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSBsZW5ndGg7IGktLTspCisgICAgICAgICAgICAgICAgcmVzdWx0LT5wdXREaXJlY3RJbmRl
eChteUZyYW1lLCBpLCB0YXJnZXRGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoaSkpOworICAgICAg
ICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBGYWtlQXJndW1l
bnRWYWx1ZXNDcmVhdGlvbk1vZGU6IHsKKyAgICAgICAgbGVuZ3RoID0gMDsKKyAgICAgICAgYnJl
YWs7CisgICAgfSB9CisgICAgCisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5
TmFtZXMtPmxlbmd0aCwganNOdW1iZXIobGVuZ3RoKSk7CisgICAgaWYgKGlzU3RyaWN0TW9kZSkg
eworICAgICAgICByZXN1bHQtPnB1dERpcmVjdEFjY2Vzc29yKGV4ZWMsIHZtLnByb3BlcnR5TmFt
ZXMtPmNhbGxlZSwgdGhpc09iamVjdC0+Z2xvYmFsT2JqZWN0KCktPnRocm93VHlwZUVycm9yR2V0
dGVyU2V0dGVyKGV4ZWMtPnZtKCkpLCBEb250RGVsZXRlIHwgRG9udEVudW0gfCBBY2Nlc3Nvcik7
CisgICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0QWNjZXNzb3IoZXhlYywgdm0ucHJvcGVydHlOYW1l
cy0+Y2FsbGVlLCB0aGlzT2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+dGhyb3dUeXBlRXJyb3JHZXR0
ZXJTZXR0ZXIoZXhlYy0+dm0oKSksIERvbnREZWxldGUgfCBEb250RW51bSB8IEFjY2Vzc29yKTsK
KyAgICB9IGVsc2UKKyAgICAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFt
ZXMtPmNhbGxlZSwgSlNWYWx1ZShjYWxsZWUpKTsKKyAgICAKKyAgICByZXN1bHQtPkpTQ19OQVRJ
VkVfRlVOQ1RJT04odm0ucHJvcGVydHlOYW1lcy0+aXRlcmF0b3JQcml2YXRlTmFtZSwgYXJndW1l
bnRzRnVuY0l0ZXJhdG9yLCBEb250RW51bSwgMCk7Cit9CisKK091dE9mQmFuZEFyZ3VtZW50cyog
T3V0T2ZCYW5kQXJndW1lbnRzOjpjcmVhdGVXaXRoTWFjaGluZUZyYW1lKEV4ZWNTdGF0ZSogbXlG
cmFtZSwgRXhlY1N0YXRlKiB0YXJnZXRGcmFtZSwgQXJndW1lbnRzTW9kZSBtb2RlKQoreworICAg
IHJldHVybiBjcmVhdGVXaXRoSW5saW5lRnJhbWUobXlGcmFtZSwgdGFyZ2V0RnJhbWUsIG51bGxw
dHIsIG1vZGUpOworfQorCitTdHJ1Y3R1cmUqIE91dE9mQmFuZEFyZ3VtZW50czo6Y3JlYXRlU3Ry
dWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90
b3R5cGUpCit7CisgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3Qs
IHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkp
OworfQorCitib29sIE91dE9mQmFuZEFyZ3VtZW50czo6Z2V0T3duUHJvcGVydHlTbG90KEpTT2Jq
ZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIGlkZW50LCBQcm9wZXJ0
eVNsb3QmIHNsb3QpCit7CisgICAgT3V0T2ZCYW5kQXJndW1lbnRzKiB0aGlzT2JqZWN0ID0ganND
YXN0PE91dE9mQmFuZEFyZ3VtZW50cyo+KG9iamVjdCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKKyAgICAKKyAgICBpZiAoaWRlbnQgPT0gdm0ucHJvcGVydHlOYW1lcy0+Y2FsbGVyCisgICAg
ICAgIHx8IGlkZW50ID09IHZtLnByb3BlcnR5TmFtZXMtPmNhbGxlZSkKKyAgICAgICAgdGhpc09i
amVjdC0+bWF0ZXJpYWxpemVTcGVjaWFsc0lmTmVjZXNzYXJ5KGV4ZWMpOworICAgIAorICAgIGlm
IChCYXNlOjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgZXhlYywgaWRlbnQsIHNsb3Qp
KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICBpZiAoaWRlbnQgPT0gdm0ucHJvcGVy
dHlOYW1lcy0+aXRlcmF0b3JQcml2YXRlTmFtZSkgeworICAgICAgICBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0ID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpOworICAgICAgICB0aGlz
T2JqZWN0LT5KU0NfTkFUSVZFX0ZVTkNUSU9OKHZtLnByb3BlcnR5TmFtZXMtPml0ZXJhdG9yUHJp
dmF0ZU5hbWUsIGFyZ3VtZW50c0Z1bmNJdGVyYXRvciwgRG9udEVudW0sIDApOworICAgICAgICBp
ZiAoSlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBleGVjLCBpZGVudCwg
c2xvdCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgcmV0dXJu
IGZhbHNlOworfQorCit2b2lkIE91dE9mQmFuZEFyZ3VtZW50czo6Z2V0T3duUHJvcGVydHlOYW1l
cyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBh
cnJheSwgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit7CisgICAgT3V0T2ZCYW5kQXJndW1lbnRzKiB0
aGlzT2JqZWN0ID0ganNDYXN0PE91dE9mQmFuZEFyZ3VtZW50cyo+KG9iamVjdCk7CisgICAgdGhp
c09iamVjdC0+bWF0ZXJpYWxpemVTcGVjaWFsc0lmTmVjZXNzYXJ5KGV4ZWMpOworICAgIEJhc2U6
OmdldE93blByb3BlcnR5TmFtZXModGhpc09iamVjdCwgZXhlYywgYXJyYXksIG1vZGUpOworfQor
Cit2b2lkIE91dE9mQmFuZEFyZ3VtZW50czo6cHV0KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBl
eGVjLCBQcm9wZXJ0eU5hbWUgaWRlbnQsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYg
c2xvdCkKK3sKKyAgICBPdXRPZkJhbmRBcmd1bWVudHMqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8T3V0
T2ZCYW5kQXJndW1lbnRzKj4ob2JqZWN0KTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAg
IAorICAgIGlmIChpZGVudCA9PSB2bS5wcm9wZXJ0eU5hbWVzLT5jYWxsZWUKKyAgICAgICAgfHwg
aWRlbnQgPT0gdm0ucHJvcGVydHlOYW1lcy0+Y2FsbGVyKQorICAgICAgICB0aGlzT2JqZWN0LT5t
YXRlcmlhbGl6ZVNwZWNpYWxzSWZOZWNlc3NhcnkoZXhlYyk7CisgICAgCisgICAgQmFzZTo6cHV0
KHRoaXNPYmplY3QsIGV4ZWMsIGlkZW50LCB2YWx1ZSwgc2xvdCk7Cit9CisKK3ZvaWQgT3V0T2ZC
YW5kQXJndW1lbnRzOjpkZWxldGVQcm9wZXJ0eShKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhl
YywgUHJvcGVydHlOYW1lIGlkZW50KQoreworICAgIE91dE9mQmFuZEFyZ3VtZW50cyogdGhpc09i
amVjdCA9IGpzQ2FzdDxPdXRPZkJhbmRBcmd1bWVudHMqPihvYmplY3QpOworICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7CisgICAgCisgICAgaWYgKGlkZW50ID09IHZtLnByb3BlcnR5TmFtZXMtPmNh
bGxlZQorICAgICAgICB8fCBpZGVudCA9PSB2bS5wcm9wZXJ0eU5hbWVzLT5jYWxsZXIpCisgICAg
ICAgIHRoaXNPYmplY3QtPm1hdGVyaWFsaXplU3BlY2lhbHNJZk5lY2Vzc2FyeShleGVjKTsKKyAg
ICAKKyAgICBCYXNlOjpkZWxldGVQcm9wZXJ0eSh0aGlzT2JqZWN0LCBleGVjLCBpZGVudCk7Cit9
CisKK3ZvaWQgT3V0T2ZCYW5kQXJndW1lbnRzOjpkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCog
b2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBpZGVudCwgY29uc3QgUHJvcGVy
dHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBib29sIHNob3VsZFRocm93KQoreworICAgIE91dE9m
QmFuZEFyZ3VtZW50cyogdGhpc09iamVjdCA9IGpzQ2FzdDxPdXRPZkJhbmRBcmd1bWVudHMqPihv
YmplY3QpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgCisgICAgaWYgKGlkZW50ID09
IHZtLnByb3BlcnR5TmFtZXMtPmNhbGxlZQorICAgICAgICB8fCBpZGVudCA9PSB2bS5wcm9wZXJ0
eU5hbWVzLT5jYWxsZXIpCisgICAgICAgIHRoaXNPYmplY3QtPm1hdGVyaWFsaXplU3BlY2lhbHNJ
Zk5lY2Vzc2FyeShleGVjKTsKKyAgICAKKyAgICByZXR1cm4gQmFzZTo6ZGVmaW5lT3duUHJvcGVy
dHkob2JqZWN0LCBleGVjLCBpZGVudCwgZGVzY3JpcHRvciwgc2hvdWxkVGhyb3cpOworfQorCit2
b2lkIE91dE9mQmFuZEFyZ3VtZW50czo6bWF0ZXJpYWxpemVTcGVjaWFscyhFeGVjU3RhdGUqIGV4
ZWMpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoIXNwZWNpYWxzTWF0ZXJpYWxpemVkKCkpOworICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgCisgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVj
dXRhYmxlID0ganNDYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KG1fY2FsbGVlLT5leGVjdXRhYmxl
KCkpOworICAgIGJvb2wgaXNTdHJpY3RNb2RlID0gZXhlY3V0YWJsZS0+aXNTdHJpY3RNb2RlKCk7
CisgICAgCisgICAgaWYgKGlzU3RyaWN0TW9kZSkgeworICAgICAgICBwdXREaXJlY3RBY2Nlc3Nv
cihleGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT5jYWxsZWUsIGdsb2JhbE9iamVjdCgpLT50aHJvd1R5
cGVFcnJvckdldHRlclNldHRlcih2bSksIERvbnREZWxldGUgfCBEb250RW51bSB8IEFjY2Vzc29y
KTsKKyAgICAgICAgcHV0RGlyZWN0QWNjZXNzb3IoZXhlYywgdm0ucHJvcGVydHlOYW1lcy0+Y2Fs
bGVlLCBnbG9iYWxPYmplY3QoKS0+dGhyb3dUeXBlRXJyb3JHZXR0ZXJTZXR0ZXIodm0pLCBEb250
RGVsZXRlIHwgRG9udEVudW0gfCBBY2Nlc3Nvcik7CisgICAgfSBlbHNlCisgICAgICAgIHB1dERp
cmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+Y2FsbGVlLCBKU1ZhbHVlKG1fY2FsbGVlLmdldCgp
KSk7CisgICAgCisgICAgbV9jYWxsZWUuY2xlYXIoKTsKK30KKwordm9pZCBPdXRPZkJhbmRBcmd1
bWVudHM6Om1hdGVyaWFsaXplU3BlY2lhbHNJZk5lY2Vzc2FyeShFeGVjU3RhdGUqIGV4ZWMpCit7
CisgICAgaWYgKCFzcGVjaWFsc01hdGVyaWFsaXplZCgpKQorICAgICAgICBtYXRlcmlhbGl6ZVNw
ZWNpYWxzKGV4ZWMpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvT3V0T2ZCYW5kQXJndW1lbnRzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3V0T2ZCYW5kQXJndW1lbnRzLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PdXRPZkJhbmRBcmd1bWVu
dHMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc3IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgT3V0T2ZCYW5kQXJndW1lbnRzX2gK
KyNkZWZpbmUgT3V0T2ZCYW5kQXJndW1lbnRzX2gKKworI2luY2x1ZGUgIkFyZ3VtZW50c01vZGUu
aCIKKyNpbmNsdWRlICJKU09iamVjdC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworLy8gVGhpcyBp
cyBhbiBBcmd1bWVudHMtY2xhc3Mgb2JqZWN0IHRoYXQgd2UgY3JlYXRlIHdoZW4geW91IGRvIGZ1
bmN0aW9uLmFyZ3VtZW50cywgb3IgeW91IHNheQorLy8gImFyZ3VtZW50cyIgaW5zaWRlIGEgZnVu
Y3Rpb24gaW4gc3RyaWN0IG1vZGUuIEl0IGJlaGF2ZXMgYWxtcHN0IGVudGlyZWx5IGxpa2UgYW4g
b3JkaW5hcnkKKy8vIEphdmFTY3JpcHQgb2JqZWN0LiBBbGwgb2YgdGhlIGFyZ3VtZW50cyB2YWx1
ZXMgYXJlIHNpbXBseSBjb3BpZWQgZnJvbSB0aGUgc3RhY2sgKHBvc3NpYmx5IHZpYQorLy8gc29t
ZSBzb3BoaXN0aWNhdGVkIFZhbHVlUmVjb3ZlcnkncyBpZiBhbiBvcHRpbWl6aW5nIGNvbXBpbGVy
IGlzIGluIHBsYXkpIGFuZCB0aGUgYXBwcm9wcmlhdGUKKy8vIHByb3BlcnRpZXMgb2YgdGhlIG9i
amVjdCBhcmUgcG9wdWxhdGVkLiBUaGUgb25seSByZWFzb24gd2h5IHdlIG5lZWQgYSBzcGVjaWFs
IGNsYXNzIGlzIHRvIG1ha2UKKy8vIHRoZSBvYmplY3QgY2xhaW0gdG8gYmUgIkFyZ3VtZW50cyIg
ZnJvbSBhIHRvU3RyaW5nIHN0YW5kcG9pbnQsIGFuZCB0byBhdm9pZCBtYXRlcmlhbGl6aW5nIHRo
ZQorLy8gY2FsbGVyL2NhbGxlZSBwcm9wZXJ0aWVzIHVubGVzcyBzb21lb25lIGFza3MgZm9yIHRo
ZW0uCitjbGFzcyBPdXRPZkJhbmRBcmd1bWVudHMgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7
CitwdWJsaWM6CisgICAgdHlwZWRlZiBKU05vbkZpbmFsT2JqZWN0IEJhc2U7CisgICAgCitwcml2
YXRlOgorICAgIE91dE9mQmFuZEFyZ3VtZW50cyhWTSYsIFN0cnVjdHVyZSopOworCitwdWJsaWM6
CisgICAgc3RhdGljIE91dE9mQmFuZEFyZ3VtZW50cyogY3JlYXRlRW1wdHkoVk0mLCBKU0dsb2Jh
bE9iamVjdCosIEpTRnVuY3Rpb24qIGNhbGxlZSk7CisgICAgc3RhdGljIE91dE9mQmFuZEFyZ3Vt
ZW50cyogY3JlYXRlRW1wdHkoRXhlY1N0YXRlKiwgSlNGdW5jdGlvbiogY2FsbGVlKTsKKyAgICBz
dGF0aWMgT3V0T2ZCYW5kQXJndW1lbnRzKiBjcmVhdGVXaXRoSW5saW5lRnJhbWUoRXhlY1N0YXRl
KiBteUZyYW1lLCBFeGVjU3RhdGUqIHRhcmdldEZyYW1lLCBJbmxpbmVDYWxsRnJhbWUqLCBBcmd1
bWVudHNNb2RlKTsKKyAgICBzdGF0aWMgT3V0T2ZCYW5kQXJndW1lbnRzKiBjcmVhdGVXaXRoTWFj
aGluZUZyYW1lKEV4ZWNTdGF0ZSogbXlGcmFtZSwgRXhlY1N0YXRlKiB0YXJnZXRGcmFtZSwgQXJn
dW1lbnRzTW9kZSk7CisgICAgCisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJl
KFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHByb3RvdHlwZSk7CisKKyAgICBzdGF0aWMg
Y29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNs
b3QgfCBPdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzIHwgSlNPYmplY3Q6OlN0cnVjdHVyZUZsYWdz
OworCisgICAgREVDTEFSRV9JTkZPOworCitwcml2YXRlOgorICAgIHN0YXRpYyBib29sIGdldE93
blByb3BlcnR5U2xvdChKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVy
dHlTbG90Jik7CisgICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCos
IEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKKyAgICBz
dGF0aWMgdm9pZCBwdXQoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVl
LCBQdXRQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgdm9pZCBkZWxldGVQcm9wZXJ0eShKU0Nl
bGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUpOworICAgIHN0YXRpYyB2b2lkIGRlZmluZU93
blByb3BlcnR5KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBjb25zdCBQcm9w
ZXJ0eURlc2NyaXB0b3ImLCBib29sIHNob3VsZFRocm93KTsKKyAgICAKKyAgICBib29sIHNwZWNp
YWxzTWF0ZXJpYWxpemVkKCkgY29uc3QgeyByZXR1cm4gIW1fY2FsbGVlOyB9CisgICAgdm9pZCBt
YXRlcmlhbGl6ZVNwZWNpYWxzKEV4ZWNTdGF0ZSopOworICAgIHZvaWQgbWF0ZXJpYWxpemVTcGVj
aWFsc0lmTmVjZXNzYXJ5KEV4ZWNTdGF0ZSopOworICAgIAorICAgIFdyaXRlQmFycmllcjxKU0Z1
bmN0aW9uKj4gbV9jYWxsZWU7IC8vIFNldCB0byBudWxscHRyIHdoZW4gd2UgbWF0ZXJpYWxpemUg
YWxsIG9mIG91ciBzcGVjaWFsIHByb3BlcnRpZXMuCit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MK
KworI2VuZGlmIC8vIE91dE9mQmFuZEFyZ3VtZW50c19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1Njb3BlT2Zmc2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TY29wZU9mZnNldC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZU9mZnNldC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2NvcGVPZmZzZXQuaCIKKwor
bmFtZXNwYWNlIEpTQyB7CisKK3ZvaWQgU2NvcGVPZmZzZXQ6OmR1bXAoUHJpbnRTdHJlYW0mIG91
dCkgY29uc3QKK3sKKyAgICBpZiAoISp0aGlzKSB7CisgICAgICAgIG91dC5wcmludCgic2NvcGVJ
bnZhbGlkIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgb3V0LnByaW50KCJz
Y29wZSIsIG9mZnNldCgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlT2Zmc2V0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVPZmZzZXQuaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlT2Zmc2V0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIFNjb3BlT2Zmc2V0X2gKKyNkZWZpbmUgU2NvcGVPZmZzZXRfaAor
CisjaW5jbHVkZSAiR2VuZXJpY09mZnNldC5oIgorI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5o
PgorCituYW1lc3BhY2UgSlNDIHsKKworLy8gVGhpcyBpcyBhbiBvZmZzZXQgaW50byBhIHNjb3Bl
IG9mIHNvbWUga2luZC4gSXQgY291bGQgYmUgYW4gYWN0aXZhdGlvbiBzY29wZSBvciBpdCBjb3Vs
ZCBiZSBhCisvLyBnbG9iYWwgb2JqZWN0LgorY2xhc3MgU2NvcGVPZmZzZXQgOiBwdWJsaWMgR2Vu
ZXJpY09mZnNldDxTY29wZU9mZnNldD4geworcHVibGljOgorICAgIFNjb3BlT2Zmc2V0KCkgeyB9
CisgICAgCisgICAgZXhwbGljaXQgU2NvcGVPZmZzZXQodW5zaWduZWQgb2Zmc2V0KQorICAgICAg
ICA6IEdlbmVyaWNPZmZzZXQob2Zmc2V0KQorICAgIHsKKyAgICB9CisgICAgCisgICAgdm9pZCBk
dW1wKFByaW50U3RyZWFtJikgY29uc3Q7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2Vu
ZGlmIC8vIFNjb3BlT2Zmc2V0X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU2NvcGVkQXJndW1lbnRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TY29wZWRBcmd1bWVudHMuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDEzNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2NvcGVkQXJndW1lbnRzLmgi
CisKKyNpbmNsdWRlICJHZW5lcmljQXJndW1lbnRzSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTQXJn
dW1lbnRzSXRlcmF0b3IuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBK
U0MgeworCitTVEFUSUNfQVNTRVJUX0lTX1RSSVZJQUxMWV9ERVNUUlVDVElCTEUoU2NvcGVkQXJn
dW1lbnRzKTsKKworY29uc3QgQ2xhc3NJbmZvIFNjb3BlZEFyZ3VtZW50czo6c19pbmZvID0geyAi
QXJndW1lbnRzIiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShTY29wZWRB
cmd1bWVudHMpIH07CisKK1Njb3BlZEFyZ3VtZW50czo6U2NvcGVkQXJndW1lbnRzKFZNJiB2bSwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHVuc2lnbmVkIHRvdGFsTGVuZ3RoKQorICAgIDogR2VuZXJp
Y0FyZ3VtZW50cyh2bSwgc3RydWN0dXJlKQorICAgICwgbV9vdmVycm9kZVRoaW5ncyhmYWxzZSkK
KyAgICAsIG1fdG90YWxMZW5ndGgobGVuZ3RoKQoreworfQorCit2b2lkIFNjb3BlZEFyZ3VtZW50
czo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBKU0Z1bmN0aW9uKiBjYWxsZWUsIFNjb3BlZEFyZ3Vt
ZW50c1RhYmxlKiB0YWJsZSwgSlNMZXhpY2FsRW52aXJvbm1lbnQqIHNjb3BlKQoreworICAgIEJh
c2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICBtX2NhbGxlZS5zZXQodm0sIHRoaXMsIGNhbGxl
ZSk7CisgICAgbV90YWJsZS5zZXQodm0sIHRoaXMsIHRhYmxlKTsKKyAgICBtX3Njb3BlLnNldCh2
bSwgdGhpcywgc2NvcGUpOworfQorCitTY29wZWRBcmd1bWVudHMqIFNjb3BlZEFyZ3VtZW50czo6
Y3JlYXRlVW5pbml0aWFsaXplZChWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0Z1bmN0
aW9uKiBjYWxsZWUsIFNjb3BlZEFyZ3VtZW50c1RhYmxlKiB0YWJsZSwgSlNMZXhpY2FsRW52aXJv
bm1lbnQqIHNjb3BlLCB1bnNpZ25lZCB0b3RhbExlbmd0aCkKK3sKKyAgICBBU1NFUlQodG90YWxM
ZW5ndGggPj0gdGFibGUtPmxlbmd0aCgpKTsKKyAgICBTY29wZWRBcmd1bWVudHMqIHJlc3VsdCA9
IG5ldyAoCisgICAgICAgIE5vdE51bGwsCisgICAgICAgIGFsbG9jYXRlQ2VsbDxTY29wZWRBcmd1
bWVudHM+KHZtLmhlYXAsIGFsbG9jYXRpb25TaXplKHRvdGFsTGVuZ3RoIC0gdGFibGUtPmxlbmd0
aCgpKSkpCisgICAgICAgICh2bSwgc3RydWN0dXJlLCB0b3RhbExlbmd0aCk7CisgICAgcmVzdWx0
LT5maW5pc2hDcmVhdGlvbih2bSwgY2FsbGVlLCB0YWJsZSwgc2NvcGUpOworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK1Njb3BlZEFyZ3VtZW50cyogU2NvcGVkQXJndW1lbnRzOjpjcmVhdGUoVk0m
IHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNGdW5jdGlvbiogY2FsbGVlLCBTY29wZWRBcmd1
bWVudHNUYWJsZSogdGFibGUsIEpTTGV4aWNhbEVudmlyb25tZW50KiBzY29wZSwgdW5zaWduZWQg
dG90YWxMZW5ndGgpCit7CisgICAgU2NvcGVkQXJndW1lbnRzKiByZXN1bHQgPQorICAgICAgICBj
cmVhdGVVbmluaXRpYWxpemVkKHZtLCBzdHJ1Y3R1cmUsIGNhbGxlZSwgdGFibGUsIHNjb3BlLCB0
b3RhbExlbmd0aCk7CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBpID0gdG90YWxMZW5ndGggLSB0
YWJsZS0+bGVuZ3RoKCk7IGktLTspCisgICAgICAgIHJlc3VsdC0+b3ZlcmZsb3dTdG9yYWdlKClb
aV0uY2xlYXIoKTsKKyAgICAKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitTY29wZWRBcmd1bWVu
dHMqIFNjb3BlZEFyZ3VtZW50czo6Y3JlYXRlQnlDb3B5aW5nKFZNJiB2bSwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIEV4ZWNTdGF0ZSogZXhlYywgU2NvcGVkQXJndW1lbnRzVGFibGUqIHRhYmxlLCBK
U0xleGljYWxFbnZpcm9ubWVudCogc2NvcGUpCit7CisgICAgdW5zaWduZWQgbmFtZWRMZW5ndGgg
PSB0YWJsZS0+bGVuZ3RoKCk7CisgICAgdW5zaWduZWQgdG90YWxMZW5ndGggPSBleGVjLT5hcmd1
bWVudENvdW50KCk7CisgICAgCisgICAgU2NvcGVkQXJndW1lbnRzKiByZXN1bHQgPQorICAgICAg
ICBjcmVhdGVVbmluaXRpYWxpemVkKHZtLCBzdHJ1Y3R1cmUsIGNhbGxlZSwgdGFibGUsIHNjb3Bl
LCB0b3RhbExlbmd0aCk7CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBpID0gdG90YWxMZW5ndGgg
LSBuYW1lZExlbmd0aDsgaS0tOykKKyAgICAgICAgcmVzdWx0LT5vdmVyZmxvd1N0b3JhZ2UoKVtp
XS5zZXQodm0sIHJlc3VsdCwgZXhlYy0+dW5jaGVja2VkQXJndW1lbnRzKGkgKyBuYW1lZExlbmd0
aCkpOworICAgIAorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgU2NvcGVkQXJndW1lbnRz
Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7Cisg
ICAgU2NvcGVkQXJndW1lbnRzKiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8U2NvcGVkQXJndW1l
bnRzKj4oY2VsbCk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBp
bmZvKCkpOworICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CisK
KyAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9jYWxsZWUpOworICAgIHZpc2l0b3Iu
YXBwZW5kKCZ0aGlzT2JqZWN0LT5tX3RhYmxlKTsKKyAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09i
amVjdC0+bV9zY29wZSk7CisgICAgCisgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXMoCisgICAgICAg
IHRoaXNPYmplY3QtPm92ZXJmbG93U3RvcmFnZSgpLCB0aGlzT2JqZWN0LT5tX3RvdGFsTGVuZ3Ro
IC0gdGhpc09iamVjdC0+bV90YWJsZS0+bGVuZ3RoKCkpOworfQorCitTdHJ1Y3R1cmUqIFNjb3Bl
ZEFyZ3VtZW50czo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCit7CisgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3Jl
YXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oU2NvcGVkQXJndW1lbnRz
VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworfQorCit2b2lkIFNjb3BlZEFyZ3VtZW50
czo6c2xvd0Rvd25BbmRXYXN0ZU1lbW9yeShWTSYgdm0pCit7CisgICAgUkVMRUFTRV9BU1NFUlQo
IW1fb3ZlcnJvZGVUaGluZ3MpOworICAgIAorICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlO
YW1lcy0+bGVuZ3RoLCBqc051bWJlcihtX3RhYmxlLT5sZW5ndGgoKSksIERvbnRFbnVtKTsKKyAg
ICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmNhbGxlZSwgbV9jYWxsZWUuZ2V0KCks
IERvbnRFbnVtKTsKKyAgICAKKyAgICBtX292ZXJyb2RlVGhpbmdzID0gdHJ1ZTsKK30KKwordm9p
ZCBTY29wZWRBcmd1bWVudHM6OnNsb3dEb3duQW5kV2FzdGVNZW1vcnlJZk5lY2Vzc2FyeShWTSYg
dm0pCit7CisgICAgaWYgKCFtX292ZXJyb2RlVGhpbmdzKQorICAgICAgICBzbG93RG93bkFuZFdh
c3RlTWVtb3J5KHZtKTsKK30KKwordm9pZCBTY29wZWRBcmd1bWVudHM6Om92ZXJyaWRlQXJndW1l
bnQoVk0mIHZtLCB1aW50MzJfdCBpKQoreworICAgIHVuc2lnbmVkIG5hbWVkTGVuZ3RoID0gbV90
YWJsZS0+bGVuZ3RoKCk7CisgICAgaWYgKGkgPCBuYW1lZExlbmd0aCkKKyAgICAgICAgbV90YWJs
ZS5zZXQodm0sIHRoaXMsIG1fdGFibGUtPnNldCh2bSwgaSwgU2NvcGVPZmZzZXQoKSkpOworICAg
IGVsc2UgeworICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihpIDwgbV90
b3RhbExlbmd0aCk7CisgICAgICAgIG92ZXJmbG93U3RvcmFnZSgpW2kgLSBuYW1lZExlbmd0aF0u
Y2xlYXIoKTsKKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHMuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50cy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgU2NvcGVkQXJndW1lbnRzX2gKKyNkZWZpbmUg
U2NvcGVkQXJndW1lbnRzX2gKKworI2luY2x1ZGUgIkdlbmVyaWNBcmd1bWVudHMuaCIKKworbmFt
ZXNwYWNlIEpTQyB7CisKKy8vIFRoaXMgaXMgYW4gQXJndW1lbnRzLWNsYXNzIG9iamVjdCB0aGF0
IHdlIGNyZWF0ZSB3aGVuIHlvdSBzYXkgImFyZ3VtZW50cyIgaW5zaWRlIGEgZnVuY3Rpb24sCisv
LyBhbmQgb25lIG9yIG1vcmUgb2YgdGhlIGFyZ3VtZW50cyBtYXkgYmUgY2FwdHVyZWQgaW4gdGhl
IGZ1bmN0aW9uJ3MgYWN0aXZhdGlvbi4gVGhlIGZ1bmN0aW9uCisvLyB3aWxsIGNvcHkgaXRzIGZv
cm1hbGx5IGRlY2xhcmVkIGFyZ3VtZW50cyBpbnRvIHRoZSBhY3RpdmF0aW9uIGFuZCB0aGVuIGNy
ZWF0ZSB0aGlzIG9iamVjdC4gVGhpcworLy8gb2JqZWN0IHdpbGwgc3RvcmUgdGhlIG92ZXJmbG93
IGFyZ3VtZW50cywgaWYgdGhlcmUgYXJlIGFueS4gVGhpcyBvYmplY3Qgd2lsbCB1c2UgdGhlIHN5
bWJvbAorLy8gdGFibGUncyBTY29wZWRBcmd1bWVudHNUYWJsZSBhbmQgdGhlIGFjdGl2YXRpb24s
IG9yIGl0cyBvdmVyZmxvdyBzdG9yYWdlLCB0byBoYW5kbGUgYWxsIGluZGV4ZWQKKy8vIGxvb2t1
cHMuCitjbGFzcyBTY29wZWRBcmd1bWVudHMgOiBwdWJsaWMgR2VuZXJpY0FyZ3VtZW50czxTY29w
ZWRBcmd1bWVudHM+IHsKK3ByaXZhdGU6CisgICAgU2NvcGVkQXJndW1lbnRzKFZNJiwgU3RydWN0
dXJlKiwgdW5zaWduZWQgdG90YWxMZW5ndGgpOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0m
LCBKU0Z1bmN0aW9uKiBjYWxsZWUsIFNjb3BlZEFyZ3VtZW50c1RhYmxlKiwgSlNMZXhpY2FsRW52
aXJvbm1lbnQqKTsKKworcHVibGljOgorICAgIC8vIENyZWF0ZXMgYW4gYXJndW1lbnRzIG9iamVj
dCBidXQgbGVhdmVzIGl0IHVuaW5pdGlhbGl6ZWQuIFRoaXMgaXMgZGFuZ2Vyb3VzIGlmIHdlIEdD
IHJpZ2h0CisgICAgLy8gYWZ0ZXIgYWxsb2NhdGlvbi4KKyAgICBzdGF0aWMgU2NvcGVkQXJndW1l
bnRzKiBjcmVhdGVVbmluaXRpYWxpemVkKFZNJiwgU3RydWN0dXJlKiwgSlNGdW5jdGlvbiogY2Fs
bGVlLCBTY29wZWRBcmd1bWVudHNUYWJsZSosIEpTTGV4aWNhbEVudmlyb25tZW50KiwgdW5zaWdu
ZWQgdG90YWxMZW5ndGgpOworICAgIAorICAgIC8vIENyZWF0ZXMgYW4gYXJndW1lbnRzIG9iamVj
dCBhbmQgaW5pdGlhbGl6ZXMgZXZlcnl0aGluZyB0byB0aGUgZW1wdHkgdmFsdWUuIFVzZSB0aGlz
IGlmIHlvdQorICAgIC8vIGNhbm5vdCBndWFyYW50ZWUgdGhhdCB5b3UnbGwgaW1tZWRpYXRlbHkg
aW5pdGlhbGl6ZSBhbGwgb2YgdGhlIGVsZW1lbnRzLgorICAgIHN0YXRpYyBTY29wZWRBcmd1bWVu
dHMqIGNyZWF0ZShWTSYsIFN0cnVjdHVyZSosIEpTRnVuY3Rpb24qIGNhbGxlZSwgU2NvcGVkQXJn
dW1lbnRzVGFibGUqLCBKU0xleGljYWxFbnZpcm9ubWVudCosIHVuc2lnbmVkIHRvdGFsTGVuZ3Ro
KTsKKyAgICAKKyAgICAvLyBDcmVhdGVzIGFuIGFyZ3VtZW50cyBvYmplY3QgYnkgY29weWluZyB0
aGUgYXJndW1uZXRzIGZyb20gdGhlIHN0YWNrLgorICAgIHN0YXRpYyBTY29wZWRBcmd1bWVudHMq
IGNyZWF0ZUJ5Q29weWluZyhWTSYsIFN0cnVjdHVyZSosIEV4ZWNTdGF0ZSosIFNjb3BlZEFyZ3Vt
ZW50c1RhYmxlKiwgSlNMZXhpY2FsRW52aXJvbm1lbnQqKTsKKyAgICAKKyAgICBzdGF0aWMgdm9p
ZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgCisgICAgdWludDMy
X3QgaW50ZXJuYWxMZW5ndGgoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdG90YWxM
ZW5ndGg7CisgICAgfQorICAgIAorICAgIHVpbnQzMl90IGxlbmd0aChFeGVjU3RhdGUqIGV4ZWMp
IGNvbnN0CisgICAgeworICAgICAgICBpZiAoVU5MSUtFTFkobV9vdmVycm9kZVRoaW5ncykpCisg
ICAgICAgICAgICByZXR1cm4gZ2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgp
LnRvVUludDMyKGV4ZWMpOworICAgICAgICByZXR1cm4gaW50ZXJuYWxMZW5ndGgoKTsKKyAgICB9
CisgICAgCisgICAgYm9vbCBjYW5BY2Nlc3NJbmRleFF1aWNrbHkodWludDMyX3QgaSkgY29uc3QK
KyAgICB7CisgICAgICAgIHVuc2lnbmVkIG5hbWVkTGVuZ3RoID0gbV90YWJsZS0+bGVuZ3RoKCk7
CisgICAgICAgIGlmIChpIDwgbmFtZWRMZW5ndGgpCisgICAgICAgICAgICByZXR1cm4gISFtX3Rh
YmxlLT5nZXQoaSk7CisgICAgICAgIGlmIChpIDwgbV90b3RhbExlbmd0aCkKKyAgICAgICAgICAg
IHJldHVybiAhIW92ZXJmbG93U3RvcmFnZSgpW2kgLSBuYW1lZExlbmd0aF0uZ2V0KCk7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgSlNWYWx1ZSBnZXRJbmRleFF1aWNr
bHkodWludDMyX3QgaSkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZ
X0lNUExJQ0FUSU9OKGNhbkFjY2Vzc0luZGV4UXVpY2tseShpKSk7CisgICAgICAgIHVuc2lnbmVk
IG5hbWVkTGVuZ3RoID0gbV90YWJsZS0+bGVuZ3RoKCk7CisgICAgICAgIGlmIChpIDwgbmFtZWRM
ZW5ndGgpCisgICAgICAgICAgICByZXR1cm4gbV9zY29wZS0+dmFyaWFibGVBdChtX3RhYmxlLT5n
ZXQoaSkpLmdldCgpOworICAgICAgICByZXR1cm4gb3ZlcmZsb3dTdG9yYWdlKClbaSAtIG5hbWVk
TGVuZ3RoXS5nZXQoKTsKKyAgICB9CisKKyAgICB2b2lkIHNldEluZGV4UXVpY2tseShWTSYgdm0s
IHVpbnQzMl90IGksIEpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBBU1NFUlRfV0lUSF9T
RUNVUklUWV9JTVBMSUNBVElPTihjYW5BY2Nlc3NJbmRleFF1aWNrbHkoaSkpOworICAgICAgICB1
bnNpZ25lZCBuYW1lZExlbmd0aCA9IG1fdGFibGUtPmxlbmd0aCgpOworICAgICAgICBpZiAoaSA8
IG5hbWVkTGVuZ3RoKQorICAgICAgICAgICAgbV9zY29wZS0+dmFyaWFibGVhdChtX3RhYmxlLT5n
ZXQoaSkpLnNldCh2bSwgdGhpcywgdmFsdWUpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBv
dmVyZmxvd1N0b3JhZ2UoKVtpIC0gbmFtZWRMZW5ndGhdLnNldCh2bSwgdGhpcywgdmFsdWUpOwor
ICAgIH0KKworICAgIFdyaXRlQmFycmllcjxKU0Z1bmN0aW9uPiYgY2FsbGVlKCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBtX2NhbGxlZTsKKyAgICB9CisgICAgCisgICAgYm9vbCBvdmVycm9kZVRo
aW5ncygpIGNvbnN0IHsgcmV0dXJuIG1fb3ZlcnJvZGVUaGluZ3M7IH0KKyAgICB2b2lkIHNsb3dE
b3duQW5kV2FzdGVNZW1vcnkoVk0mKTsKKyAgICB2b2lkIHNsb3dEb3duQW5kV2FzdGVNZW1vcnlJ
Zk5lY2Vzc2FyeShWTSYpOworICAgIHZvaWQgb3ZlcnJpZGVBcmd1bWVudChWTSYgdm0sIHVpbnQz
Ml90IGkpOworICAgIAorICAgIERFQ0xBUkVfSU5GTzsKKyAgICAKKyAgICBzdGF0aWMgU3RydWN0
dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90
eXBlKTsKKyAgICAKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mT3ZlcnJvZGVUaGluZ3Mo
KSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoU2NvcGVkQXJndW1lbnRzLCBtX292ZXJyb2RlVGhp
bmdzKTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZUb3RhbExlbmd0aCgpIHsgcmV0
dXJuIE9CSkVDVF9PRkZTRVRPRihTY29wZWRBcmd1bWVudHMsIG1fdG90YWxMZW5ndGgpOyB9Cisg
ICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlRhYmxlKCkgeyByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKFNjb3BlZEFyZ3VtZW50cywgbV90YWJsZSk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9m
ZnNldE9mU2NvcGUoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoU2NvcGVkQXJndW1lbnRzLCBt
X3Njb3BlKTsgfQorICAgIAorICAgIHN0YXRpYyBzaXplX3Qgb3ZlcmZsb3dTdG9yYWdlT2Zmc2V0
KCkKKyAgICB7CisgICAgICAgIHJldHVybiBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Y8c2l6ZW9m
KFdyaXRlQmFycmllcjxVbmtub3duPik+KHNpemVvZihTY29wZWRBcmd1bWVudHMpKTsKKyAgICB9
CisgICAgCisgICAgc3RhdGljIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSh1bnNpZ25lZCBvdmVyZmxv
d0FyZ3VtZW50c0xlbmd0aCkKKyAgICB7CisgICAgICAgIHJldHVybiBzdG9yYWdlT2Zmc2V0KCkg
KyBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSAqIG92ZXJmbG93QXJndW1lbnRzTGVuZ3Ro
OworICAgIH0KKworcHJpdmF0ZToKKyAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIG92ZXJmbG93
U3RvcmFnZSgpCisgICAgeworICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PFdyaXRlQmFycmll
cjxVbmtub3duPio+KAorICAgICAgICAgICAgYml0d2lzZV9jYXN0PGNoYXIqPih0aGlzKSArIG92
ZXJmbG93U3RvcmFnZU9mZnNldCgpKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBtX292ZXJyb2Rl
VGhpbmdzOyAvLyBUcnVlIGlmIGxlbmd0aCwgY2FsbGVlLCBhbmQgY2FsbGVyIGFyZSBmdWxseSBt
YXRlcmlhbGl6ZWQgaW4gdGhlIG9iamVjdC4KKyAgICB1bnNpZ25lZCBtX3RvdGFsTGVuZ3RoOyAv
LyBUaGUgbGVuZ3RoIG9mIGRlY2xhcmVkIHBsdXMgb3ZlcmZsb3cgYXJndW1lbnRzLgorICAgIFdy
aXRlQmFycmllcjxKU0Z1bmN0aW9uKj4gbV9jYWxsZWU7CisgICAgV3JpdGVCYXJyaWVyPFNjb3Bl
ZEFyZ3VtZW50c1RhYmxlPiBtX3RhYmxlOworICAgIFdyaXRlQmFycmllcjxKU0xleGljYWxFbnZp
cm9ubWVudD4gbV9zY29wZTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8g
U2NvcGVkQXJndW1lbnRzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U2NvcGVkQXJndW1lbnRzVGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TY29wZWRBcmd1bWVudHNUYWJsZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzVGFibGUuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDk0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZm5kZWYgU2NvcGVkQXJndW1lbnRzVGFibGVfaAorI2RlZmluZSBTY29w
ZWRBcmd1bWVudHNUYWJsZV9oCisKKyNpbmNsdWRlICJKU0NlbGwuaCIKKworbmFtZXNwYWNlIEpT
QyB7CisKKy8vIFRoaXMgY2xhc3MncyBvbmx5IGpvYiBpcyB0byBob2xkIG9udG8gdGhlIGxpc3Qg
b2YgU2NvcGVPZmZzZXRzIGZvciBlYWNoIGFyZ3VtZW50IHRoYXQgYQorLy8gZnVuY3Rpb24gaGFz
LiBNb3N0IG9mIHRoZSB0aW1lLCB0aGUgQnl0ZWNvZGVHZW5lcmF0b3Igd2lsbCBjcmVhdGUgb25l
IG9mIHRoZXNlIGFuZCBpdCB3aWxsCisvLyBuZXZlciBiZSBtb2RpZmllZCBzdWJzZXF1ZW50bHku
IFRoZXJlIGlzIGEgcmFyZSBjYXNlIHdoZXJlIGEgU2NvcGVkQXJndW1lbnRzIG9iamVjdCBpcyBj
cmVhdGVkCisvLyBhbmQgYWxpYXNlcyBvbmUgb2YgdGhlc2UgYW5kIHRoZW4gZGVjaWRlcyB0byBt
b2RpZnkgaXQ7IGluIHRoYXQgY2FzZSB3ZSBkbyBjb3B5LW9uLXdyaXRlLiBUaGlzCisvLyBtYWtl
cyBzZW5zZSBiZWNhdXNlIHN1Y2ggbW9kaWZpY2F0aW9ucyBhcmUgc28gdW5jb21tb24uIFlvdSdk
IGhhdmUgdG8gZG8gc29tZXRoaW5nIGNyYXp5IGxpa2UKKy8vICJkZWxldGUgYXJndW1lbnRzW2ld
IiBvciBzb21lIHZhcmlhbnQgb2YgZGVmaW5lT3duUHJvcGVydHkuCitjbGFzcyBTY29wZWRBcmd1
bWVudHMgOiBwdWJsaWMgSlNDZWxsIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTQ2VsbCBCYXNl
OworICAgIAorICAgIHN0YXRpYyBjb25zdCBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwor
ICAgIHN0YXRpYyBjb25zdCBib29sIGhhc0ltbW9ydGFsU3RydWN0dXJlID0gdHJ1ZTsKKworcHJp
dmF0ZToKKyAgICBTY29wZWRBcmd1bWVudHNUYWJsZShWTSYpOworICAgIH5TY29wZWRBcmd1bWVu
dHNUYWJsZSgpOworCitwdWJsaWM6CisgICAgc3RhdGljIFNjb3BlZEFyZ3VtZW50c1RhYmxlKiBj
cmVhdGUoVk0mKTsKKyAgICAKKyAgICBTY29wZWRBcmd1bWVudHMqIGNsb25lKFZNJik7CisgICAg
CisgICAgdWludDMyX3QgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9sZW5ndGg7IH0KKyAgICBT
Y29wZWRBcmd1bWVudHNUYWJsZSogc2V0TGVuZ3RoKFZNJiwgdWludDMyX3QgbmV3TGVuZ3RoKTsK
KyAgICAKKyAgICBTY29wZU9mZnNldCBnZXQodWludDMyX3QgaSkgY29uc3QKKyAgICB7CisgICAg
ICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGkgPCBtX2xlbmd0aCk7CisgICAg
ICAgIHJldHVybiBtX2FyZ3VtZW50c1tpXTsKKyAgICB9CisgICAgCisgICAgdm9pZCBsb2NrKCkK
KyAgICB7CisgICAgICAgIG1fbG9ja2VkID0gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgU2NvcGVk
QXJndW1lbnRzKiBzZXQoVk0mIHZtLCB1aW50MzJfdCBpLCBTY29wZU9mZnNldCB2YWx1ZSkKKyAg
ICB7CisgICAgICAgIFNjb3BlZEFyZ3VtZW50cyogcmVzdWx0OworICAgICAgICBpZiAoVU5MSUtF
TFkobV9sb2NrZWQpKQorICAgICAgICAgICAgcmVzdWx0ID0gY2xvbmUodm0pOworICAgICAgICBl
bHNlCisgICAgICAgICAgICByZXN1bHQgPSB0aGlzOworICAgICAgICByZXN1bHQtPnNldERpcmVj
dChpLCB2YWx1ZSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIERF
Q0xBUkVfSU5GTzsKKyAgICAKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTGVuZ3RoKCkg
eyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFNjb3BlZEFyZ3VtZW50cywgbV9sZW5ndGgpOyB9Cisg
ICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkFyZ3VtZW50cygpIHsgcmV0dXJuIE9CSkVDVF9P
RkZTRVRPRihTY29wZWRBcmd1bWVudHMsIG1fYXJndW1lbnRzKTsgfQorCitwcml2YXRlOgorICAg
IHVpbnQzMl90IG1fbGVuZ3RoOworICAgIGJvb2wgbV9sb2NrZWQ7IC8vIEJlaW5nIGxvY2tlZCBt
ZWFucyB0aGF0IHRoZXJlIGFyZSBtdWx0aXBsZSByZWZlcmVuY2VzIHRvIHRoaXMgb2JqZWN0IGFu
ZCBub25lIG9mIHRoZW0gZXhwZWN0IHRvIHNlZSB0aGUgb3RoZXJzJyBtb2RpZmljYXRpb25zLiBU
aGlzIG1lYW5zIHRoYXQgbW9kaWZpY2F0aW9ucyBuZWVkIHRvIG1ha2UgYSBjb3B5IGZpcnN0Lgor
ICAgIHN0ZDo6dW5pcXVlX3B0cjxTY29wZU9mZnNldFtdPiBtX2FyZ3VtZW50czsKK307CisKK30g
Ly8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gU2NvcGVkQXJndW1lbnRzVGFibGVfaAorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuY3BwCShy
ZXZpc2lvbiAxODA4NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xU
YWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDEyLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMiwgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY5LDYgKzY5LDggQEAgSlNWYWx1
ZSBTeW1ib2xUYWJsZUVudHJ5OjppbmZlcnJlZFZhbHVlKAogCiB2b2lkIFN5bWJvbFRhYmxlRW50
cnk6OnByZXBhcmVUb1dhdGNoKFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSkKIHsKKyAgICBpZiAo
IWlzV2F0Y2hhYmxlKCkpCisgICAgICAgIHJldHVybjsKICAgICBGYXRFbnRyeSogZW50cnkgPSBp
bmZsYXRlKCk7CiAgICAgaWYgKGVudHJ5LT5tX3dhdGNocG9pbnRzKQogICAgICAgICByZXR1cm47
CkBAIC0xMzcsMjkgKzEzOSwyMiBAQCB2b2lkIFN5bWJvbFRhYmxlOjpXYXRjaHBvaW50Q2xlYW51
cDo6ZmluCiAgICAgfQogfQogCi1TeW1ib2xUYWJsZSogU3ltYm9sVGFibGU6OmNsb25lQ2FwdHVy
ZWROYW1lcyhWTSYgdm0pCitTeW1ib2xUYWJsZSogU3ltYm9sVGFibGU6OmNsb25lU2NvcGVQYXJ0
KFZNJiB2bSkKIHsKICAgICBTeW1ib2xUYWJsZSogcmVzdWx0ID0gU3ltYm9sVGFibGU6OmNyZWF0
ZSh2bSk7CiAgICAgCi0gICAgcmVzdWx0LT5tX3BhcmFtZXRlckNvdW50SW5jbHVkaW5nVGhpcyA9
IG1fcGFyYW1ldGVyQ291bnRJbmNsdWRpbmdUaGlzOwogICAgIHJlc3VsdC0+bV91c2VzTm9uU3Ry
aWN0RXZhbCA9IG1fdXNlc05vblN0cmljdEV2YWw7Ci0gICAgcmVzdWx0LT5tX2NhcHR1cmVTdGFy
dCA9IG1fY2FwdHVyZVN0YXJ0OwotICAgIHJlc3VsdC0+bV9jYXB0dXJlRW5kID0gbV9jYXB0dXJl
RW5kOwogCiAgICAgZm9yIChhdXRvIGl0ZXIgPSBtX21hcC5iZWdpbigpLCBlbmQgPSBtX21hcC5l
bmQoKTsgaXRlciAhPSBlbmQ7ICsraXRlcikgewotICAgICAgICBpZiAoIWlzQ2FwdHVyZWQoaXRl
ci0+dmFsdWUuZ2V0SW5kZXgoKSkpCisgICAgICAgIGlmICghaXRlci0+dmFsdWUudmFyT2Zmc2V0
KCkuaXNTY29wZSgpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIHJlc3VsdC0+bV9t
YXAuYWRkKAogICAgICAgICAgICAgaXRlci0+a2V5LAotICAgICAgICAgICAgU3ltYm9sVGFibGVF
bnRyeShpdGVyLT52YWx1ZS5nZXRJbmRleCgpLCBpdGVyLT52YWx1ZS5nZXRBdHRyaWJ1dGVzKCkp
KTsKKyAgICAgICAgICAgIFN5bWJvbFRhYmxlRW50cnkoaXRlci0+dmFsdWUudmFyT2Zmc2V0KCks
IGl0ZXItPnZhbHVlLmdldEF0dHJpYnV0ZXMoKSkpOwogICAgIH0KICAgICAKLSAgICBpZiAobV9z
bG93QXJndW1lbnRzKSB7Ci0gICAgICAgIHJlc3VsdC0+bV9zbG93QXJndW1lbnRzID0gc3RkOjpt
YWtlX3VuaXF1ZTxTbG93QXJndW1lbnRbXT4ocGFyYW1ldGVyQ291bnQoKSk7Ci0gICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IHBhcmFtZXRlckNvdW50KCk7IGktLTspCi0gICAgICAgICAgICByZXN1
bHQtPm1fc2xvd0FyZ3VtZW50c1tpXSA9IG1fc2xvd0FyZ3VtZW50c1tpXTsKLSAgICB9Ci0KKyAg
ICByZXN1bHQtPm1fYXJndW1lbnRzID0gYXJndW1lbnRzKCk7CisgICAgCiAgICAgaWYgKG1fdHlw
ZVByb2ZpbGluZ1JhcmVEYXRhKSB7CiAgICAgICAgIHJlc3VsdC0+bV90eXBlUHJvZmlsaW5nUmFy
ZURhdGEgPSBzdGQ6Om1ha2VfdW5pcXVlPFR5cGVQcm9maWxpbmdSYXJlRGF0YT4oKTsKIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5oCShyZXZpc2lv
biAxODA4NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
NywgMjAwOCwgMjAxMi0yMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAxMi0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzEsNiArMzEsNyBA
QAogCiAjaW5jbHVkZSAiQ29uY3VycmVudEpJVExvY2suaCIKICNpbmNsdWRlICJKU09iamVjdC5o
IgorI2luY2x1ZGUgIlNjb3BlZEFyZ3VtZW50c1RhYmxlLmgiCiAjaW5jbHVkZSAiVHlwZUxvY2F0
aW9uLmgiCiAjaW5jbHVkZSAiVmFyaWFibGVXYXRjaHBvaW50U2V0LmgiCiAjaW5jbHVkZSA8bWVt
b3J5PgpAQCAtMzksMjQgKzQwLDYgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLXN0cnVjdCBTbG93
QXJndW1lbnQgewotcHVibGljOgotICAgIGVudW0gU3RhdHVzIHsKLSAgICAgICAgTm9ybWFsID0g
MCwKLSAgICAgICAgQ2FwdHVyZWQgPSAxLAotICAgICAgICBEZWxldGVkID0gMgotICAgIH07Ci0K
LSAgICBTbG93QXJndW1lbnQoKQotICAgICAgICA6IHN0YXR1cyhOb3JtYWwpCi0gICAgICAgICwg
aW5kZXgoMCkKLSAgICB7Ci0gICAgfQotCi0gICAgU3RhdHVzIHN0YXR1czsKLSAgICBpbnQgaW5k
ZXg7IC8vIElmIHN0YXR1cyBpcyAnRGVsZXRlZCcsIGluZGV4IGlzIGJvZ3VzLgotfTsKLQogc3Rh
dGljIEFMV0FZU19JTkxJTkUgaW50IG1pc3NpbmdTeW1ib2xNYXJrZXIoKSB7IHJldHVybiBzdGQ6
Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpOyB9CiAKIC8vIFRoZSBiaXQgdHdpZGRsaW5nIGlu
IHRoaXMgY2xhc3MgYXNzdW1lcyB0aGF0IGV2ZXJ5IHJlZ2lzdGVyIGluZGV4IGlzIGEKQEAgLTg2
LDYgKzY5LDI5IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIGludCBtaXNzaW5nU3ltYm9sTWEKIC8v
IGNvcHk6ICAgICBTeW1ib2xUYWJsZUVudHJ5IC0tPiBGYXRFbnRyeSAtLS0tLV4KIAogc3RydWN0
IFN5bWJvbFRhYmxlRW50cnkgeworcHJpdmF0ZToKKyAgICBzdGF0aWMgVmFyT2Zmc2V0IHZhck9m
ZnNldEZyb21CaXRzKGludHB0cl90IGJpdHMpCisgICAgeworICAgICAgICBWYXJLaW5kIGtpbmQ7
CisgICAgICAgIGludHB0cl90IGtpbmRCaXRzID0gYml0cyAmIEtpbmRNYXNrOworICAgICAgICBp
ZiAoa2luZEJpdHMgPD0gVW53YXRjaGFibGVTY29wZUtpbmRCaXRzKQorICAgICAgICAgICAga2lu
ZCA9IFNjb3BlVmFyS2luZDsKKyAgICAgICAgZWxzZSBpZiAoa2luZEJpdHMgPT0gU3RhY2tLaW5k
Qml0cykKKyAgICAgICAgICAgIGtpbmQgPSBTdGFja1ZhcktpbmQ7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIGtpbmQgPSBDYXB0dXJlZEFyZ3VtZW50S2luZDsKKyAgICAgICAgcmV0dXJuIFZh
ck9mZnNldDo6YXNzZW1ibGUoa2luZCwgc3RhdGljX2Nhc3Q8aW50PihiaXRzID4+IEZsYWdCaXRz
KSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBTY29wZU9mZnNldCBzY29wZU9mZnNldEZyb21C
aXRzKGludHB0cl90IGJpdHMpCisgICAgeworICAgICAgICBBU1NFUlQoIShiaXRzICYgU3RhY2tG
bGFnKSk7CisgICAgICAgIEFTU0VSVCghKGJpdHMgJiBDYXB0dXJlZEFyZ3VtZW50RmxhZykpOwor
ICAgICAgICByZXR1cm4gU2NvcGVPZmZzZXQoc3RhdGljX2Nhc3Q8aW50PihiaXRzID4+IEZsYWdC
aXRzKSk7CisgICAgfQorCitwdWJsaWM6CisgICAgCiAgICAgLy8gVXNlIHRoZSBTeW1ib2xUYWJs
ZUVudHJ5OjpGYXN0IGNsYXNzLCBlaXRoZXIgdmlhIGltcGxpY2l0IGNhc3Qgb3IgYnkgY2FsbGlu
ZwogICAgIC8vIGdldEZhc3QoKSwgd2hlbiB5b3UgKDEpIG9ubHkgY2FyZSBhYm91dCBpc051bGwo
KSwgZ2V0SW5kZXgoKSwgYW5kIGlzUmVhZE9ubHkoKSwKICAgICAvLyBhbmQgKDIpIHlvdSBhcmUg
aW4gYSBob3QgcGF0aCB3aGVyZSB5b3UgbmVlZCB0byBtaW5pbWl6ZSB0aGUgbnVtYmVyIG9mIHRp
bWVzCkBAIC0xMDcsMTEgKzExMywxOSBAQCBzdHJ1Y3QgU3ltYm9sVGFibGVFbnRyeSB7CiAgICAg
ICAgICAgICByZXR1cm4gIShtX2JpdHMgJiB+U2xpbUZsYWcpOwogICAgICAgICB9CiAKLSAgICAg
ICAgaW50IGdldEluZGV4KCkgY29uc3QKKyAgICAgICAgVmFyT2Zmc2V0IHZhck9mZnNldCgpIGNv
bnN0CiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KG1fYml0
cyA+PiBGbGFnQml0cyk7CisgICAgICAgICAgICByZXR1cm4gdmFyT2Zmc2V0RnJvbUJpdHMobV9i
aXRzKTsKICAgICAgICAgfQotICAgIAorICAgICAgICAKKyAgICAgICAgLy8gQXNzZXJ0cyBpZiB0
aGUgb2Zmc2V0IGlzIGFueXRoaW5nIGJ1dCBhIHNjb3BlIG9mZnNldC4gVGhpcyBzdHJ1Y3R1cmVz
IHRoZSBhc3NlcnRpb25zCisgICAgICAgIC8vIGluIGEgd2F5IHRoYXQgbWF5IHJlc3VsdCBpbiBi
ZXR0ZXIgY29kZSwgZXZlbiBpbiByZWxlYXNlLCB0aGFuIGRvaW5nCisgICAgICAgIC8vIHZhck9m
ZnNldCgpLnNjb3BlT2Zmc2V0KCkuCisgICAgICAgIFNjb3BlT2Zmc2V0IHNjb3BlT2Zmc2V0KCkg
Y29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHNjb3BlT2Zmc2V0RnJvbUJpdHMo
bV9iaXRzKTsKKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgYm9vbCBpc1JlYWRPbmx5KCkg
Y29uc3QKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIG1fYml0cyAmIFJlYWRPbmx5Rmxh
ZzsKQEAgLTE0MiwxOCArMTU2LDE4IEBAIHN0cnVjdCBTeW1ib2xUYWJsZUVudHJ5IHsKICAgICB7
CiAgICAgfQogCi0gICAgU3ltYm9sVGFibGVFbnRyeShpbnQgaW5kZXgpCisgICAgU3ltYm9sVGFi
bGVFbnRyeShWYXJPZmZzZXQgb2Zmc2V0KQogICAgICAgICA6IG1fYml0cyhTbGltRmxhZykKICAg
ICB7Ci0gICAgICAgIEFTU0VSVChpc1ZhbGlkSW5kZXgoaW5kZXgpKTsKLSAgICAgICAgcGFjayhp
bmRleCwgZmFsc2UsIGZhbHNlKTsKKyAgICAgICAgQVNTRVJUKGlzVmFsaWRWYXJPZmZzZXQob2Zm
c2V0KSk7CisgICAgICAgIHBhY2sob2Zmc2V0LCBmYWxzZSwgZmFsc2UpOwogICAgIH0KIAotICAg
IFN5bWJvbFRhYmxlRW50cnkoaW50IGluZGV4LCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQorICAgIFN5
bWJvbFRhYmxlRW50cnkoVmFyT2Zmc2V0IG9mZnNldCwgdW5zaWduZWQgYXR0cmlidXRlcykKICAg
ICAgICAgOiBtX2JpdHMoU2xpbUZsYWcpCiAgICAgewotICAgICAgICBBU1NFUlQoaXNWYWxpZElu
ZGV4KGluZGV4KSk7Ci0gICAgICAgIHBhY2soaW5kZXgsIGF0dHJpYnV0ZXMgJiBSZWFkT25seSwg
YXR0cmlidXRlcyAmIERvbnRFbnVtKTsKKyAgICAgICAgQVNTRVJUKGlzVmFsaWRWYXJPZmZzZXQo
b2Zmc2V0KSk7CisgICAgICAgIHBhY2sob2Zmc2V0LCBhdHRyaWJ1dGVzICYgUmVhZE9ubHksIGF0
dHJpYnV0ZXMgJiBEb250RW51bSk7CiAgICAgfQogICAgIAogICAgIH5TeW1ib2xUYWJsZUVudHJ5
KCkKQEAgLTE4MSw5ICsxOTUsMjIgQEAgc3RydWN0IFN5bWJvbFRhYmxlRW50cnkgewogICAgICAg
ICByZXR1cm4gIShiaXRzKCkgJiB+U2xpbUZsYWcpOwogICAgIH0KIAotICAgIGludCBnZXRJbmRl
eCgpIGNvbnN0CisgICAgVmFyT2Zmc2V0IHZhck9mZnNldCgpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gdmFyT2Zmc2V0RnJvbUJpdHMoYml0cygpKTsKKyAgICB9CisgICAgCisgICAgYm9v
bCBpc1dhdGNoYWJsZSgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
aW50PihiaXRzKCkgPj4gRmxhZ0JpdHMpOworICAgICAgICByZXR1cm4gKG1fYml0cyAmIEtpbmRC
aXRzTWFzaykgPT0gU2NvcGVLaW5kQml0czsKKyAgICB9CisgICAgCisgICAgLy8gQXNzZXJ0cyBp
ZiB0aGUgb2Zmc2V0IGlzIGFueXRoaW5nIGJ1dCBhIHNjb3BlIG9mZnNldC4gVGhpcyBzdHJ1Y3R1
cmVzIHRoZSBhc3NlcnRpb25zCisgICAgLy8gaW4gYSB3YXkgdGhhdCBtYXkgcmVzdWx0IGluIGJl
dHRlciBjb2RlLCBldmVuIGluIHJlbGVhc2UsIHRoYW4gZG9pbmcKKyAgICAvLyB2YXJPZmZzZXQo
KS5zY29wZU9mZnNldCgpLgorICAgIFNjb3BlT2Zmc2V0IHNjb3BlT2Zmc2V0KCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBzY29wZU9mZnNldEZyb21CaXRzKGJpdHMoKSk7CiAgICAgfQog
ICAgIAogICAgIEFMV0FZU19JTkxJTkUgRmFzdCBnZXRGYXN0KCkgY29uc3QKQEAgLTIwNiwxMCAr
MjMzLDEwIEBAIHN0cnVjdCBTeW1ib2xUYWJsZUVudHJ5IHsKICAgICB7CiAgICAgICAgIHJldHVy
biBnZXRGYXN0KCkuZ2V0QXR0cmlidXRlcygpOwogICAgIH0KLQorICAgIAogICAgIHZvaWQgc2V0
QXR0cmlidXRlcyh1bnNpZ25lZCBhdHRyaWJ1dGVzKQogICAgIHsKLSAgICAgICAgcGFjayhnZXRJ
bmRleCgpLCBhdHRyaWJ1dGVzICYgUmVhZE9ubHksIGF0dHJpYnV0ZXMgJiBEb250RW51bSk7Cisg
ICAgICAgIHBhY2sodmFyT2Zmc2V0KCksIGlzV2F0Y2hhYmxlKCksIGF0dHJpYnV0ZXMgJiBSZWFk
T25seSwgYXR0cmlidXRlcyAmIERvbnRFbnVtKTsKICAgICB9CiAKICAgICBib29sIGlzUmVhZE9u
bHkoKSBjb25zdApAQCAtMjE4LDYgKzI0NSwxMiBAQCBzdHJ1Y3QgU3ltYm9sVGFibGVFbnRyeSB7
CiAgICAgfQogICAgIAogICAgIEpTVmFsdWUgaW5mZXJyZWRWYWx1ZSgpOworCisgICAgdm9pZCBk
aXNhYmxlV2F0Y2hpbmcoKQorICAgIHsKKyAgICAgICAgaWYgKHZhck9mZnNldCgpLmlzU2NvcGUo
KSkKKyAgICAgICAgICAgIHBhY2sodmFyT2Zmc2V0KCksIGZhbHNlLCBhdHRyaWJ1dGVzICYgUmVh
ZE9ubHksIGF0dHJpYnV0ZXMgJiBEb250RW51bSk7CisgICAgfQogICAgIAogICAgIHZvaWQgcHJl
cGFyZVRvV2F0Y2goU3ltYm9sVGFibGUqKTsKICAgICAKQEAgLTI0Miw3ICsyNzUsMTIgQEAgcHJp
dmF0ZToKICAgICBzdGF0aWMgY29uc3QgaW50cHRyX3QgUmVhZE9ubHlGbGFnID0gMHgyOwogICAg
IHN0YXRpYyBjb25zdCBpbnRwdHJfdCBEb250RW51bUZsYWcgPSAweDQ7CiAgICAgc3RhdGljIGNv
bnN0IGludHB0cl90IE5vdE51bGxGbGFnID0gMHg4OwotICAgIHN0YXRpYyBjb25zdCBpbnRwdHJf
dCBGbGFnQml0cyA9IDQ7CisgICAgc3RhdGljIGNvbnN0IGludHB0cl90IEtpbmRCaXRzTWFzayA9
IDB4MzA7CisgICAgc3RhdGljIGNvbnN0IGludHB0cl90IFNjb3BlS2luZEJpdHMgPSAweDAwOwor
ICAgIHN0YXRpYyBjb25zdCBpbnRwdHJfdCBVbndhdGNoYWJsZVNjb3BlS2luZEJpdHMgPSAweDEw
OworICAgIHN0YXRpYyBjb25zdCBpbnRwdHJfdCBTdGFja0tpbmRCaXRzID0gMHgyMDsKKyAgICBz
dGF0aWMgY29uc3QgaW50cHRyX3QgQ2FwdHVyZWRBcmd1bWVudEtpbmRCaXRzID0gMHgzMDsKKyAg
ICBzdGF0aWMgY29uc3QgaW50cHRyX3QgRmxhZ0JpdHMgPSA2OwogICAgIAogICAgIGNsYXNzIEZh
dEVudHJ5IHsKICAgICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CkBAIC0zMDksMjAgKzM0
Nyw0MCBAQCBwcml2YXRlOgogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBmcmVlRmF0RW50
cnlTbG93KCk7CiAKLSAgICB2b2lkIHBhY2soaW50IGluZGV4LCBib29sIHJlYWRPbmx5LCBib29s
IGRvbnRFbnVtKQorICAgIHZvaWQgcGFjayhWYXJPZmZzZXQgb2Zmc2V0LCBib29sIGlzV2F0Y2hh
YmxlLCBib29sIHJlYWRPbmx5LCBib29sIGRvbnRFbnVtKQogICAgIHsKICAgICAgICAgQVNTRVJU
KCFpc0ZhdCgpKTsKICAgICAgICAgaW50cHRyX3QmIGJpdHNSZWYgPSBiaXRzKCk7Ci0gICAgICAg
IGJpdHNSZWYgPSAoc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KGluZGV4KSA8PCBGbGFnQml0cykgfCBO
b3ROdWxsRmxhZyB8IFNsaW1GbGFnOworICAgICAgICBiaXRzUmVmID0KKyAgICAgICAgICAgIChz
dGF0aWNfY2FzdDxpbnRwdHJfdD4ob2Zmc2V0LnJhd09mZnNldCgpKSA8PCBGbGFnQml0cykgfCBO
b3ROdWxsRmxhZyB8IFNsaW1GbGFnOwogICAgICAgICBpZiAocmVhZE9ubHkpCiAgICAgICAgICAg
ICBiaXRzUmVmIHw9IFJlYWRPbmx5RmxhZzsKICAgICAgICAgaWYgKGRvbnRFbnVtKQogICAgICAg
ICAgICAgYml0c1JlZiB8PSBEb250RW51bUZsYWc7CisgICAgICAgIHN3aXRjaCAob2Zmc2V0Lmtp
bmQoKSkgeworICAgICAgICBjYXNlIFNjb3BlVmFyS2luZDoKKyAgICAgICAgICAgIGlmIChpc1dh
dGNoYWJsZSkKKyAgICAgICAgICAgICAgICBiaXRzUmVmIHw9IFNjb3BlS2luZEJpdHM7CisgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYml0c1JlZiB8PSBVbndhdGNoYWJsZVNjb3Bl
S2luZEJpdHM7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTdGFja1ZhcktpbmQ6
CisgICAgICAgICAgICBBU1NFUlQoIWlzV2F0Y2hhYmxlKTsKKyAgICAgICAgICAgIGJpdHNSZWYg
fD0gU3RhY2tLaW5kQml0czsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENhcHR1
cmVkQXJndW1lbnRLaW5kOgorICAgICAgICAgICAgQVNTRVJUKCFpc1dhdGNoYWJsZSk7CisgICAg
ICAgICAgICBiaXRzUmVmIHw9IENhcHR1cmVkQXJndW1lbnRLaW5kQml0czsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgfQogICAgIAot
ICAgIGJvb2wgaXNWYWxpZEluZGV4KGludCBpbmRleCkKKyAgICBzdGF0aWMgYm9vbCBpc1ZhbGlk
VmFyT2Zmc2V0KFZhck9mZnNldCBvZmZzZXQpCiAgICAgewotICAgICAgICByZXR1cm4gKChzdGF0
aWNfY2FzdDxpbnRwdHJfdD4oaW5kZXgpIDw8IEZsYWdCaXRzKSA+PiBGbGFnQml0cykgPT0gc3Rh
dGljX2Nhc3Q8aW50cHRyX3Q+KGluZGV4KTsKKyAgICAgICAgcmV0dXJuICgoc3RhdGljX2Nhc3Q8
aW50cHRyX3Q+KG9mZnNldC5yYXdPZmZzZXQoKSkgPDwgRmxhZ0JpdHMpID4+IEZsYWdCaXRzKSA9
PSBzdGF0aWNfY2FzdDxpbnRwdHJfdD4ob2Zmc2V0LnJhd09mZnNldCgpKTsKICAgICB9CiAKICAg
ICBpbnRwdHJfdCBtX2JpdHM7CkBAIC0zNTEsNyArNDA5LDcgQEAgcHVibGljOgogICAgIHN0YXRp
YyBTeW1ib2xUYWJsZSogY3JlYXRlTmFtZVNjb3BlVGFibGUoVk0mIHZtLCBjb25zdCBJZGVudGlm
aWVyJiBpZGVudCwgdW5zaWduZWQgYXR0cmlidXRlcykKICAgICB7CiAgICAgICAgIFN5bWJvbFRh
YmxlKiByZXN1bHQgPSBjcmVhdGUodm0pOwotICAgICAgICByZXN1bHQtPmFkZChpZGVudC5pbXBs
KCksIFN5bWJvbFRhYmxlRW50cnkoLTEsIGF0dHJpYnV0ZXMpKTsKKyAgICAgICAgcmVzdWx0LT5h
ZGQoaWRlbnQuaW1wbCgpLCBTeW1ib2xUYWJsZUVudHJ5KFZhck9mZnNldChTY29wZU9mZnNldCgw
KSksIGF0dHJpYnV0ZXMpKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgCkBA
IC00MjMsOSArNDgxLDUzIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHNpemUobG9ja2VyKTsK
ICAgICB9CiAgICAgCi0gICAgTWFwOjpBZGRSZXN1bHQgYWRkKGNvbnN0IENvbmN1cnJlbnRKSVRM
b2NrZXImLCBTdHJpbmdJbXBsKiBrZXksIGNvbnN0IFN5bWJvbFRhYmxlRW50cnkmIGVudHJ5KQor
ICAgIFNjb3BlT2Zmc2V0IG1heFNjb3BlT2Zmc2V0KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiBtX21heFNjb3BlT2Zmc2V0OworICAgIH0KKyAgICAKKyAgICB2b2lkIGRpZFVzZVNjb3Bl
T2Zmc2V0KFNjb3BlT2Zmc2V0IG9mZnNldCkKKyAgICB7CisgICAgICAgIGlmICghbV9tYXhTY29w
ZU9mZnNldCB8fCBtX21heFNjb3BlT2Zmc2V0IDwgb2ZmZXQpCisgICAgICAgICAgICBtX21heFNj
b3BlT2Zmc2V0ID0gb2Zmc2V0OworICAgIH0KKyAgICAKKyAgICB2b2lkIGRpZFVzZVZhck9mZnNl
dChWYXJPZmZzZXQgb2Zmc2V0KQorICAgIHsKKyAgICAgICAgaWYgKG9mZnNldC5pc1Njb3BlKCkp
CisgICAgICAgICAgICBkaWRVc2VTY29wZU9mZnNldChvZmZzZXQpOworICAgIH0KKyAgICAKKyAg
ICB1bnNpZ25lZCBzY29wZVNpemUoKSBjb25zdAorICAgIHsKKyAgICAgICAgU2NvcGVPZmZzZXQg
bWF4U2NvcGVPZmZzZXQgPSB0aGlzLT5tYXhTY29wZU9mZnNldCgpOworICAgICAgICAKKyAgICAg
ICAgLy8gRG8gc29tZSBjYWxjdWxhdGlvbiB0aGF0IHJlbGllcyBvbiBpbnZhbGlkIHNjb3BlIG9m
ZnNldCBwbHVzIG9uZSBiZWluZyB6ZXJvLgorICAgICAgICB1bnNpZ25lZCBmYXN0UmVzdWx0ID0g
bWF4U2NvcGVPZmZzZXQub2Zmc2V0VW5jaGVja2VkKCkgKyAxOworICAgICAgICAKKyAgICAgICAg
Ly8gQXNzZXJ0IHRoYXQgdGhpcyB3b3Jrcy4KKyAgICAgICAgQVNTRVJUKGZhc3RSZXN1bHQgPT0g
KCFtYXhTY29wZU9mZnNldCA/IDAgOiBtYXhTY29wZU9mZnNldC5vZmZzZXQoKSArIDEpKTsKKyAg
ICAgICAgCisgICAgICAgIHJldHVybiBmYXN0UmVzdWx0OworICAgIH0KKyAgICAKKyAgICBTY29w
ZU9mZnNldCBuZXh0U2NvcGVPZmZzZXQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIFNj
b3BlT2Zmc2V0KHNjb3BlU2l6ZSgpKTsKKyAgICB9CisgICAgCisgICAgU2NvcGVPZmZzZXQgdGFr
ZU5leHRTY29wZU9mZnNldCgpCisgICAgeworICAgICAgICBTY29wZU9mZnNldCByZXN1bHQgPSBu
ZXh0U2NvcGVPZmZzZXQoKTsKKyAgICAgICAgbV9tYXhTY29wZU9mZnNldCA9IHJlc3VsdDsKKyAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgdm9pZCBhZGQoY29uc3QgQ29u
Y3VycmVudEpJVExvY2tlciYsIFN0cmluZ0ltcGwqIGtleSwgY29uc3QgU3ltYm9sVGFibGVFbnRy
eSYgZW50cnkpCiAgICAgewotICAgICAgICByZXR1cm4gbV9tYXAuYWRkKGtleSwgZW50cnkpOwor
ICAgICAgICBkaWRVc2VWYXJPZmZzZXQoZW50cnkudmFyT2Zmc2V0KCkpOworICAgICAgICBNYXA6
OkFkZFJlc3VsdCByZXN1bHQgPSBtX21hcC5hZGQoa2V5LCBlbnRyeSk7CisgICAgICAgIEFTU0VS
VF9VTlVTRUQocmVzdWx0LCByZXN1bHQuaXNOZXdFbnRyeSk7CiAgICAgfQogICAgIAogICAgIHZv
aWQgYWRkKFN0cmluZ0ltcGwqIGtleSwgY29uc3QgU3ltYm9sVGFibGVFbnRyeSYgZW50cnkpCkBA
IC00MzQsOSArNTM2LDEwIEBAIHB1YmxpYzoKICAgICAgICAgYWRkKGxvY2tlciwga2V5LCBlbnRy
eSk7CiAgICAgfQogICAgIAotICAgIE1hcDo6QWRkUmVzdWx0IHNldChjb25zdCBDb25jdXJyZW50
SklUTG9ja2VyJiwgU3RyaW5nSW1wbCoga2V5LCBjb25zdCBTeW1ib2xUYWJsZUVudHJ5JiBlbnRy
eSkKKyAgICB2b2lkIHNldChjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiwgU3RyaW5nSW1wbCog
a2V5LCBjb25zdCBTeW1ib2xUYWJsZUVudHJ5JiBlbnRyeSkKICAgICB7Ci0gICAgICAgIHJldHVy
biBtX21hcC5zZXQoa2V5LCBlbnRyeSk7CisgICAgICAgIGRpZFVzZVZhck9mZnNldChlbnRyeS52
YXJPZmZzZXQoKSk7CisgICAgICAgIG1fbWFwLnNldChrZXksIGVudHJ5KTsKICAgICB9CiAgICAg
CiAgICAgdm9pZCBzZXQoU3RyaW5nSW1wbCoga2V5LCBjb25zdCBTeW1ib2xUYWJsZUVudHJ5JiBl
bnRyeSkKQEAgLTQ1Niw2ICs1NTksNDUgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gY29udGFp
bnMobG9ja2VyLCBrZXkpOwogICAgIH0KICAgICAKKyAgICAvLyBUaGUgcHJpbmNpcGxlIGJlaGlu
ZCBTY29wZWRBcmd1bWVudHNUYWJsZSBtb2RpZmljYXRpb25zIGlzIHRoYXQgd2Ugd2lsbCBjcmVh
dGUgb25lIGFuZAorICAgIC8vIGxlYXZlIGl0IHVubG9ja2VkIC0gdGhlcmVieSBhbGxvd2luZyBp
bi1wbGFjZSBjaGFuZ2VzIC0gdW50aWwgc29tZW9uZSBhc2tzIGZvciBhIHBvaW50ZXIgdG8KKyAg
ICAvLyB0aGUgdGFibGUuIFRoZW4sIHdlIHdpbGwgbG9jayBpdC4gVGhlbiBib3RoIG91ciBmdXR1
cmUgY2hhbmdlcyBhbmQgdGhlaXIgZnV0dXJlIGNoYW5nZXMKKyAgICAvLyB3aWxsIGZpcnN0IGhh
dmUgdG8gbWFrZSBhIGNvcHkuIFRoaXMgZGlzY2lwbGluZSBtZWFucyB0aGF0IHVzdWFsbHkgd2hl
biB3ZSBjcmVhdGUgYQorICAgIC8vIFNjb3BlZEFyZ3VtZW50cyBvYmplY3QsIHdlIGRvbid0IGhh
dmUgdG8gbWFrZSBhIGNvcHkgb2YgdGhlIFNjb3BlZEFyZ3VtZW50c1RhYmxlIC0gaW5zdGVhZAor
ICAgIC8vIHdlIGp1c3QgdGFrZSBhIHJlZmVyZW5jZSB0byBvbmUgdGhhdCB3ZSBhbHJlYWR5IGhh
dmUuCisgICAgCisgICAgdWludDMyX3QgYXJndW1lbnRzTGVuZ3RoKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIGlmICghbV9hcmd1bWVudHMpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAg
cmV0dXJuIG1fYXJndW1lbnRzLT5sZW5ndGgoKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzZXRB
cmd1bWVudHNMZW5ndGgoVk0mIHZtLCB1aW50MzJfdCBsZW5ndGgpCisgICAgeworICAgICAgICBp
ZiAoVU5MSUtFTFkoIW1fYXJndW1lbnRzKSkKKyAgICAgICAgICAgIG1fYXJndW1lbnRzLnNldCh2
bSwgdGhpcywgU2NvcGVkQXJndW1lbnRzVGFibGU6OmNyZWF0ZSh2bSkpOworICAgICAgICBtX2Fy
Z3VtZW50cy5zZXQodm0sIHRoaXMsIG1fYXJndW1lbnRzLT5zZXRMZW5ndGgodm0sIGxlbmd0aCkp
OworICAgIH0KKyAgICAKKyAgICBTY29wZU9mZnNldCBhcmd1bWVudE9mZnNldCh1aW50MzJfdCBp
KSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04o
bV9hcmd1bWVudHMpOworICAgICAgICByZXR1cm4gbV9hcmd1bWVudHMtPmdldChpKTsKKyAgICB9
CisgICAgCisgICAgdm9pZCBzZXRBcmd1bWVudE9mZnNldChWTSYgdm0sIHVpbnQzMl90IGksIFNj
b3BlT2Zmc2V0IG9mZnNldCkKKyAgICB7CisgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lN
UExJQ0FUSU9OKG1fYXJndW1lbnRzKTsKKyAgICAgICAgbV9hcmd1bWVudHMuc2V0KHZtLCB0aGlz
LCBtX2FyZ3VtZW50cy0+c2V0KHZtLCBpLCBvZmZzZXQpKTsKKyAgICB9CisgICAgCisgICAgU2Nv
cGVkQXJndW1lbnRzVGFibGUqIGFyZ3VtZW50cygpIGNvbnN0CisgICAgeworICAgICAgICBtX2Fy
Z3VtZW50cy0+bG9jaygpOworICAgICAgICByZXR1cm4gbV9hcmd1bWVudHMuZ2V0KCk7CisgICAg
fQorICAgIAogICAgIEdsb2JhbFZhcmlhYmxlSUQgdW5pcXVlSURGb3JWYXJpYWJsZShjb25zdCBD
b25jdXJyZW50SklUTG9ja2VyJiwgU3RyaW5nSW1wbCoga2V5LCBWTSYgdm0pOwogICAgIEdsb2Jh
bFZhcmlhYmxlSUQgdW5pcXVlSURGb3JSZWdpc3Rlcihjb25zdCBDb25jdXJyZW50SklUTG9ja2Vy
JiBsb2NrZXIsIGludCByZWdpc3RlckluZGV4LCBWTSYgdm0pOwogICAgIFJlZlB0cjxUeXBlU2V0
PiBnbG9iYWxUeXBlU2V0Rm9yUmVnaXN0ZXIoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYgbG9j
a2VyLCBpbnQgcmVnaXN0ZXJJbmRleCwgVk0mIHZtKTsKQEAgLTQ2NCwyOCArNjA2LDcgQEAgcHVi
bGljOgogICAgIGJvb2wgdXNlc05vblN0cmljdEV2YWwoKSB7IHJldHVybiBtX3VzZXNOb25TdHJp
Y3RFdmFsOyB9CiAgICAgdm9pZCBzZXRVc2VzTm9uU3RyaWN0RXZhbChib29sIHVzZXNOb25TdHJp
Y3RFdmFsKSB7IG1fdXNlc05vblN0cmljdEV2YWwgPSB1c2VzTm9uU3RyaWN0RXZhbDsgfQogCi0g
ICAgaW50IGNhcHR1cmVTdGFydCgpIGNvbnN0IHsgcmV0dXJuIG1fY2FwdHVyZVN0YXJ0OyB9Ci0g
ICAgdm9pZCBzZXRDYXB0dXJlU3RhcnQoaW50IGNhcHR1cmVTdGFydCkgeyBtX2NhcHR1cmVTdGFy
dCA9IGNhcHR1cmVTdGFydDsgfQotCi0gICAgaW50IGNhcHR1cmVFbmQoKSBjb25zdCB7IHJldHVy
biBtX2NhcHR1cmVFbmQ7IH0KLSAgICB2b2lkIHNldENhcHR1cmVFbmQoaW50IGNhcHR1cmVFbmQp
IHsgbV9jYXB0dXJlRW5kID0gY2FwdHVyZUVuZDsgfQotCi0gICAgaW50IGNhcHR1cmVDb3VudCgp
IGNvbnN0IHsgcmV0dXJuIC0obV9jYXB0dXJlRW5kIC0gbV9jYXB0dXJlU3RhcnQpOyB9Ci0gICAg
Ci0gICAgYm9vbCBpc0NhcHR1cmVkKGludCBvcGVyYW5kKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IG9wZXJhbmQgPD0gY2FwdHVyZVN0YXJ0KCkgJiYgb3BlcmFuZCA+IGNhcHR1cmVFbmQoKTsKLSAg
ICB9Ci0KLSAgICBpbnQgcGFyYW1ldGVyQ291bnQoKSB7IHJldHVybiBtX3BhcmFtZXRlckNvdW50
SW5jbHVkaW5nVGhpcyAtIDE7IH0KLSAgICBpbnQgcGFyYW1ldGVyQ291bnRJbmNsdWRpbmdUaGlz
KCkgeyByZXR1cm4gbV9wYXJhbWV0ZXJDb3VudEluY2x1ZGluZ1RoaXM7IH0KLSAgICB2b2lkIHNl
dFBhcmFtZXRlckNvdW50SW5jbHVkaW5nVGhpcyhpbnQgcGFyYW1ldGVyQ291bnRJbmNsdWRpbmdU
aGlzKSB7IG1fcGFyYW1ldGVyQ291bnRJbmNsdWRpbmdUaGlzID0gcGFyYW1ldGVyQ291bnRJbmNs
dWRpbmdUaGlzOyB9Ci0KLSAgICAvLyAwIGlmIHdlIGRvbid0IGNhcHR1cmUgYW55IGFyZ3VtZW50
czsgcGFyYW1ldGVyQ291bnQoKSBpbiBsZW5ndGggaWYgd2UgZG8uCi0gICAgY29uc3QgU2xvd0Fy
Z3VtZW50KiBzbG93QXJndW1lbnRzKCkgeyByZXR1cm4gbV9zbG93QXJndW1lbnRzLmdldCgpOyB9
Ci0gICAgdm9pZCBzZXRTbG93QXJndW1lbnRzKHN0ZDo6dW5pcXVlX3B0cjxTbG93QXJndW1lbnRb
XT4gc2xvd0FyZ3VtZW50cykgeyBtX3Nsb3dBcmd1bWVudHMgPSBXVEY6Om1vdmUoc2xvd0FyZ3Vt
ZW50cyk7IH0KLSAgICAKLSAgICBTeW1ib2xUYWJsZSogY2xvbmVDYXB0dXJlZE5hbWVzKFZNJik7
CisgICAgU3ltYm9sVGFibGUqIGNsb25lU2NvcGVQYXJ0KFZNJik7CiAKICAgICB2b2lkIHByZXBh
cmVGb3JUeXBlUHJvZmlsaW5nKGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImKTsKIApAQCAtNTEz
LDYgKzYzNCw4IEBAIHByaXZhdGU6CiAgICAgflN5bWJvbFRhYmxlKCk7CiAKICAgICBNYXAgbV9t
YXA7CisgICAgU2NvcGVPZmZzZXQgbV9tYXhTY29wZU9mZnNldDsKKyAgICAKICAgICBzdHJ1Y3Qg
VHlwZVByb2ZpbGluZ1JhcmVEYXRhIHsKICAgICAgICAgVW5pcXVlSURNYXAgbV91bmlxdWVJRE1h
cDsKICAgICAgICAgUmVnaXN0ZXJUb1ZhcmlhYmxlTWFwIG1fcmVnaXN0ZXJUb1ZhcmlhYmxlTWFw
OwpAQCAtNTIwLDEzICs2NDMsOSBAQCBwcml2YXRlOgogICAgIH07CiAgICAgc3RkOjp1bmlxdWVf
cHRyPFR5cGVQcm9maWxpbmdSYXJlRGF0YT4gbV90eXBlUHJvZmlsaW5nUmFyZURhdGE7CiAKLSAg
ICBpbnQgbV9wYXJhbWV0ZXJDb3VudEluY2x1ZGluZ1RoaXM7CiAgICAgYm9vbCBtX3VzZXNOb25T
dHJpY3RFdmFsOwotCi0gICAgaW50IG1fY2FwdHVyZVN0YXJ0OwotICAgIGludCBtX2NhcHR1cmVF
bmQ7Ci0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8U2xvd0FyZ3VtZW50W10+IG1fc2xvd0FyZ3VtZW50
czsKKyAgICAKKyAgICBXcml0ZUJhcnJpZXI8U2NvcGVkQXJndW1lbnRzVGFibGU+IG1fYXJndW1l
bnRzOwogICAgIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxXYXRjaHBvaW50Q2xlYW51cD4gbV93YXRj
aHBvaW50Q2xlYW51cDsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVmFy
T2Zmc2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9W
YXJPZmZzZXQuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVmFyT2Zmc2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc2IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJWYXJPZmZzZXQuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3ZvaWQgVmFy
T2Zmc2V0OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgc3dpdGNoIChtX2tp
bmQpIHsKKyAgICBjYXNlIEludmFsaWRWYXJLaW5kOgorICAgICAgICBvdXQucHJpbnQoImludmFs
aWQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU2NvcGVWYXJLaW5kOgorICAgICAgICBv
dXQucHJpbnQoc2NvcGVPZmZzZXQoKSk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFN0YWNr
VmFyS2luZDoKKyAgICAgICAgb3V0LnByaW50KHN0YWNrT2Zmc2V0KCkpOworICAgICAgICByZXR1
cm47CisgICAgY2FzZSBDYXB0dXJlZEFyZ3VtZW50S2luZDoKKyAgICAgICAgb3V0LnByaW50KGNh
cHR1cmVkQXJndW1lbnRPZmZzZXQoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKK25h
bWVzcGFjZSBXVEYgeworCit1c2luZyBuYW1lc3BhY2UgSlNDOworCit2b2lkIHByaW50SW50ZXJu
YWwoUHJpbnRTdHJlYW0mIG91dCwgVmFyS2luZCB2YXJLaW5kKQoreworICAgIHN3aXRjaCAodmFy
S2luZCkgeworICAgIGNhc2UgSW52YWxpZFZhcktpbmQ6CisgICAgICAgIG91dC5wcmludCgiSW52
YWxpZCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBTY29wZVZhcktpbmQ6CisgICAgICAg
IG91dC5wcmludCgiU2NvcGUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU3RhY2tWYXJL
aW5kOgorICAgICAgICBvdXQucHJpbnQoIlN0YWNrIik7CisgICAgICAgIHJldHVybjsKKyAgICBj
YXNlIENhcHR1cmVkQXJndW1lbnRLaW5kOgorICAgICAgICBvdXQucHJpbnQoIkNhcHR1cmVkQXJn
dW1lbnQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVmFyT2Zmc2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVmFyT2Zmc2V0LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9WYXJPZmZzZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDIxNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIFZhck9mZnNldF9oCisjZGVmaW5lIFZhck9mZnNldF9oCisKKyNpbmNsdWRlICJDYXB0
dXJlZEFyZ3VtZW50c09mZnNldC5oIgorI2luY2x1ZGUgIlNjb3BlT2Zmc2V0LmgiCisjaW5jbHVk
ZSAiVmlydHVhbFJlZ2lzdGVyLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitlbnVtIFZhcktpbmQg
OiB1aW50OF90IHsKKyAgICBJbnZhbGlkVmFyS2luZCwKKyAgICBTY29wZVZhcktpbmQsCisgICAg
U3RhY2tWYXJLaW5kLAorICAgIENhcHR1cmVkQXJndW1lbnRLaW5kCit9OworCitjbGFzcyBWYXJP
ZmZzZXQgeworcHVibGljOgorICAgIFZhck9mZnNldCgpCisgICAgICAgIDogbV9raW5kKEludmFs
aWRWYXJLaW5kKQorICAgICAgICAsIG1fb2Zmc2V0KFVJTlRfTUFYKQorICAgIHsKKyAgICB9Cisg
ICAgCisgICAgZXhwbGljaXQgVmFyT2Zmc2V0KFZpcnR1YWxSZWdpc3RlciBzdGFja09mZnNldCkK
KyAgICB7CisgICAgICAgIGlmICghc3RhY2tPZmZzZXQuaXNWYWxpZCgpKSB7CisgICAgICAgICAg
ICBtX2tpbmQgPSBJbnZhbGlkVmFyS2luZDsKKyAgICAgICAgICAgIG1fb2Zmc2V0ID0gVUlOVF9N
QVg7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX2tpbmQgPSBTdGFja1ZhcktpbmQ7
CisgICAgICAgICAgICBtX29mZnNldCA9IHN0YWNrT2Zmc2V0Lm9mZnNldCgpOworICAgICAgICB9
CisgICAgfQorICAgIAorICAgIGV4cGxpY2l0IFZhck9mZnNldChTY29wZU9mZnNldCBzY29wZU9m
ZnNldCkKKyAgICB7CisgICAgICAgIGlmICghc2NvcGVPZmZzZXQpIHsKKyAgICAgICAgICAgIG1f
a2luZCA9IEludmFsaWRWYXJLaW5kOworICAgICAgICAgICAgbV9vZmZzZXQgPSBVSU5UX01BWDsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1fa2luZCA9IFNjb3BlVmFyS2luZDsKKyAg
ICAgICAgICAgIG1fb2Zmc2V0ID0gc2NvcGVPZmZzZXQub2Zmc2V0KCk7CisgICAgICAgIH0KKyAg
ICB9CisgICAgCisgICAgZXhwbGljaXQgVmFyT2Zmc2V0KENhcHR1cmVkQXJndW1lbnRzT2Zmc2V0
IGNhcHR1cmVkQXJndW1lbnRzT2Zmc2V0KQorICAgIHsKKyAgICAgICAgaWYgKCFjYXB0dXJlZEFy
Z3VtZW50c09mZnNldCkgeworICAgICAgICAgICAgbV9raW5kID0gSW52YWxpZFZhcktpbmQ7Cisg
ICAgICAgICAgICBtX29mZnNldCA9IFVJTlRfTUFYOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgbV9raW5kID0gQ2FwdHVyZWRBcmd1bWVudEtpbmQ7CisgICAgICAgICAgICBtX29mZnNl
dCA9IGNhcHR1cmVkQXJndW1lbnRzT2Zmc2V0Lm9mZnNldCgpOworICAgICAgICB9CisgICAgfQor
ICAgIAorICAgIHN0YXRpYyBWYXJPZmZzZXQgYXNzZW1ibGUoVmFyS2luZCBraW5kLCB1bnNpZ25l
ZCBvZmZzZXQpCisgICAgeworICAgICAgICBWYXJPZmZzZXQgcmVzdWx0OworICAgICAgICByZXN1
bHQubV9raW5kID0ga2luZDsKKyAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gb2Zmc2V0OworICAg
ICAgICByZXN1bHQuY2hlY2tTYW5pdHkoKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9
CisgICAgCisgICAgYm9vbCBpc1ZhbGlkKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBt
X2tpbmQgIT0gSW52YWxpZFZhcktpbmQ7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3Ih
KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhaXNWYWxpZCgpOworICAgIH0KKyAgICAK
KyAgICBWYXJLaW5kIGtpbmQoKSBjb25zdCB7IHJldHVybiBtX2tpbmQ7IH0KKyAgICAKKyAgICBi
b29sIGlzU3RhY2soKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fa2luZCA9PSBTdGFj
a1ZhcktpbmQ7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNTY29wZSgpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gbV9raW5kID09IFNjb3BlVmFyS2luZDsKKyAgICB9CisgICAgCisgICAg
Ym9vbCBpc0NhcHR1cmVkQXJndW1lbnQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1f
a2luZCA9PSBDYXB0dXJlZEFyZ3VtZW50S2luZDsKKyAgICB9CisgICAgCisgICAgVmlydHVhbFJl
Z2lzdGVyIHN0YWNrT2Zmc2V0VW5jaGVja2VkKCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmICgh
aXNTdGFjaygpKQorICAgICAgICAgICAgcmV0dXJuIFZpcnR1YWxSZWdpc3RlcigpOworICAgICAg
ICByZXR1cm4gVmlydHVhbFJlZ2lzdGVyKG1fb2Zmc2V0KTsKKyAgICB9CisgICAgCisgICAgU2Nv
cGVPZmZzZXQgc2NvcGVPZmZzZXRVbmNoZWNrZWQoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYg
KCFpc1Njb3BlKCkpCisgICAgICAgICAgICByZXR1cm4gU2NvcGVPZmZzZXQoKTsKKyAgICAgICAg
cmV0dXJuIFNjb3BlT2Zmc2V0KG1fb2Zmc2V0KTsKKyAgICB9CisgICAgCisgICAgQ2FwdHVyZWRB
cmd1bWVudHNPZmZzZXQgY2FwdHVyZWRBcmd1bWVudHNPZmZzZXRVbmNoZWNrZWQoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgaWYgKCFpc0NhcHR1cmVkQXJndW1lbnQoKSkKKyAgICAgICAgICAgIHJl
dHVybiBDYXB0dXJlZEFyZ3VtZW50c09mZnNldCgpOworICAgICAgICByZXR1cm4gQ2FwdHVyZWRB
cmd1bWVudHNPZmZzZXQobV9vZmZzZXQpOworICAgIH0KKyAgICAKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgc3RhY2tPZmZzZXQoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzU3RhY2soKSk7
CisgICAgICAgIHJldHVybiBWaXJ0dWFsUmVnaXN0ZXIobV9vZmZzZXQpOworICAgIH0KKyAgICAK
KyAgICBTY29wZU9mZnNldCBzY29wZU9mZnNldCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NF
UlQoaXNTY29wZSgpKTsKKyAgICAgICAgcmV0dXJuIFNjb3BlT2Zmc2V0KG1fb2Zmc2V0KTsKKyAg
ICB9CisgICAgCisgICAgQ2FwdHVyZWRBcmd1bWVudHNPZmZzZXQgY2FwdHVyZWRBcmd1bWVudHNP
ZmZzZXQoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzQ2FwdHVyZWRBcmd1bWVudCgp
KTsKKyAgICAgICAgcmV0dXJuIENhcHR1cmVkQXJndW1lbnRzT2Zmc2V0KG1fb2Zmc2V0KTsKKyAg
ICB9CisgICAgCisgICAgdW5zaWduZWQgcmF3T2Zmc2V0KCkgY29uc3QKKyAgICB7CisgICAgICAg
IEFTU0VSVChpc1ZhbGlkKCkpOworICAgICAgICByZXR1cm4gbV9vZmZzZXQ7CisgICAgfQorICAg
IAorICAgIHZvaWQgY2hlY2tTYW5pdHkoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKEFTU0VS
VF9ESVNBQkxFRCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIHN3aXRj
aCAobV9raW5kKSB7CisgICAgICAgIGNhc2UgSW52YWxpZFZhcktpbmQ6CisgICAgICAgICAgICBB
U1NFUlQobV9vZmZzZXQgPT0gVUlOVF9NQVgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICBjYXNlIFNjb3BlVmFyS2luZDoKKyAgICAgICAgICAgIEFTU0VSVChzY29wZU9mZnNldCgpKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBTdGFja1ZhcktpbmQ6CisgICAgICAg
ICAgICBBU1NFUlQoc3RhY2tPZmZzZXQoKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IGNhc2UgQ2FwdHVyZWRBcmd1bWVudEtpbmQ6CisgICAgICAgICAgICBBU1NFUlQoY2FwdHVyZWRB
cmd1bWVudHNPZmZzZXQoKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKyAgICAKKyAgICBib29s
IG9wZXJhdG9yPT0oY29uc3QgVmFyT2Zmc2V0JiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBtX2tpbmQgPT0gb3RoZXIubV9raW5kCisgICAgICAgICAgICAmJiBtX29mZnNldCA9
PSBvdGhlci5tX29mZnNldDsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0
IFZhck9mZnNldCYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gISgqdGhpcyA9
PSBvdGhlcik7CisgICAgfQorICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0
OworICAgIAorcHJpdmF0ZToKKyAgICBWYXJLaW5kIG1fa2luZDsKKyAgICB1bnNpZ25lZCBtX29m
ZnNldDsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCituYW1lc3BhY2UgV1RGIHsKKwordm9p
ZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpWYXJLaW5kKTsKKworfSAvLyBuYW1l
c3BhY2UgV1RGCisKKyNlbmRpZiAvLyBWYXJPZmZzZXRfaAorCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>247652</attachid>
            <date>2015-03-01 20:48:35 -0800</date>
            <delta_ts>2015-03-02 12:41:26 -0800</delta_ts>
            <desc>change all the files!</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>327881</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2Vt
Ymxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJz
dHJhY3RNYWNyb0Fzc2VtYmxlci5oCShyZXZpc2lvbiAxODA4NzUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMjA1LDYgKzIwNSwxMSBAQCBwdWJsaWM6CiAgICAgICAgIFJlZ2lzdGVySUQgaW5kZXg7
CiAgICAgICAgIFNjYWxlIHNjYWxlOwogICAgICAgICBpbnQzMl90IG9mZnNldDsKKyAgICAgICAg
CisgICAgICAgIEJhc2VJbmRleCB3aXRoT2Zmc2V0KGludDMyX3QgYWRkaXRpb25hbE9mZnNldCkK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEJhc2VJbmRleChiYXNlLCBpbmRleCwgc2Nh
bGUsIG9mZnNldCArIGFkZGl0aW9uYWxPZmZzZXQpOworICAgICAgICB9CiAgICAgfTsKIAogICAg
IC8vIEFic29sdXRlQWRkcmVzczoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9CeVZhbEluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQnlWYWxJbmZvLmgJKHJldmlzaW9uIDE4MDg3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9CeVZhbEluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDEsNiArNDEsOCBAQCBlbnVt
IEpJVEFycmF5TW9kZSB7CiAgICAgSklURG91YmxlLAogICAgIEpJVENvbnRpZ3VvdXMsCiAgICAg
SklUQXJyYXlTdG9yYWdlLAorICAgIEpJVERpcmVjdEFyZ3VtZW50cywKKyAgICBKSVRTY29wZWRB
cmd1bWVudHMsCiAgICAgSklUSW50OEFycmF5LAogICAgIEpJVEludDE2QXJyYXksCiAgICAgSklU
SW50MzJBcnJheSwKQEAgLTY1LDYgKzY3LDE3IEBAIGlubGluZSBib29sIGlzT3B0aW1pemFibGVJ
bmRleGluZ1R5cGUoSW4KICAgICB9CiB9CiAKK2lubGluZSBib29sIGhhc09wdGltaXphYmxlSW5k
ZXhpbmdGb3JKU1R5cGUoSlNUeXBlIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAg
Y2FzZSBEaXJlY3RBcmd1bWVudHNUeXBlOgorICAgIGNhc2UgU2NvcGVkQXJndW1lbnRzVHlwZToK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KK30KKwogaW5saW5lIGJvb2wgaGFzT3B0aW1pemFibGVJbmRleGluZ0ZvckNsYXNz
SW5mbyhjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbykKIHsKICAgICByZXR1cm4gaXNUeXBlZFZp
ZXcoY2xhc3NJbmZvLT50eXBlZEFycmF5U3RvcmFnZVR5cGUpOwpAQCAtNzMsNiArODYsNyBAQCBp
bmxpbmUgYm9vbCBoYXNPcHRpbWl6YWJsZUluZGV4aW5nRm9yQ2xhCiBpbmxpbmUgYm9vbCBoYXNP
cHRpbWl6YWJsZUluZGV4aW5nKFN0cnVjdHVyZSogc3RydWN0dXJlKQogewogICAgIHJldHVybiBp
c09wdGltaXphYmxlSW5kZXhpbmdUeXBlKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpCisgICAg
ICAgIHx8IGhhc09wdGltaXphYmxlSW5kZXhpbmdGb3JKU1R5cGUoc3RydWN0dXJlLT50eXBlSW5m
bygpLnR5cGUoKSkKICAgICAgICAgfHwgaGFzT3B0aW1pemFibGVJbmRleGluZ0ZvckNsYXNzSW5m
byhzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpKTsKIH0KIApAQCAtOTMsNiArMTA3LDE5IEBAIGlubGlu
ZSBKSVRBcnJheU1vZGUgaml0QXJyYXlNb2RlRm9ySW5kZXgKICAgICB9CiB9CiAKK2lubGluZSBK
SVRBcnJheU1vZGUgaml0QXJyYXlNb2RlRm9ySlNUeXBlKEpTVHlwZSB0eXBlKQoreworICAgIHN3
aXRjaCAodHlwZSkgeworICAgIGNhc2UgRGlyZWN0QXJndW1lbnRzVHlwZToKKyAgICAgICAgcmV0
dXJuIEpJVERpcmVjdEFyZ3VtZW50czsKKyAgICBjYXNlIFNjb3BlZEFyZ3VtZW50c1R5cGU6Cisg
ICAgICAgIHJldHVybiBKSVRTY29wZWRBcmd1bWVudHM7CisgICAgZGVmYXVsdDoKKyAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIEpJVENvbnRpZ3Vv
dXM7CisgICAgfQorfQorCiBpbmxpbmUgSklUQXJyYXlNb2RlIGppdEFycmF5TW9kZUZvckNsYXNz
SW5mbyhjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbykKIHsKICAgICBzd2l0Y2ggKGNsYXNzSW5m
by0+dHlwZWRBcnJheVN0b3JhZ2VUeXBlKSB7CkBAIC0xMjAsNiArMTQ3LDE5IEBAIGlubGluZSBK
SVRBcnJheU1vZGUgaml0QXJyYXlNb2RlRm9yQ2xhc3MKICAgICB9CiB9CiAKK2lubGluZSBib29s
IGppdEFycmF5TW9kZVBlcm1pdHNQdXQoSklUQXJyYXlNb2RlIG1vZGUpCit7CisgICAgc3dpdGNo
IChtb2RlKSB7CisgICAgY2FzZSBKSVREaXJlY3RBcmd1bWVudHM6CisgICAgY2FzZSBKSVRTY29w
ZWRBcmd1bWVudHM6CisgICAgICAgIC8vIFdlIGNvdWxkIHN1cHBvcnQgcHV0X2J5X3ZhbCBvbiB0
aGVzZSBhdCBzb21lIHBvaW50LCBidXQgaXQncyBqdXN0IG5vdCB0aGF0IHByb2ZpdGFibGUKKyAg
ICAgICAgLy8gYXQgdGhlIG1vbWVudC4KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGRlZmF1
bHQ6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KK30KKwogaW5saW5lIFR5cGVkQXJyYXlU
eXBlIHR5cGVkQXJyYXlUeXBlRm9ySklUQXJyYXlNb2RlKEpJVEFycmF5TW9kZSBtb2RlKQogewog
ICAgIHN3aXRjaCAobW9kZSkgewpAQCAtMTUyLDYgKzE5Miw5IEBAIGlubGluZSBKSVRBcnJheU1v
ZGUgaml0QXJyYXlNb2RlRm9yU3RydWMKICAgICBpZiAoaXNPcHRpbWl6YWJsZUluZGV4aW5nVHlw
ZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSkKICAgICAgICAgcmV0dXJuIGppdEFycmF5TW9k
ZUZvckluZGV4aW5nVHlwZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKTsKICAgICAKKyAgICBp
ZiAoaGFzT3B0aW1pemFibGVJbmRleGluZ0ZvckpTVHlwZShzdHJ1Y3R1cmUtPnR5cGVJbmZvKCku
dHlwZSgpKSkKKyAgICAgICAgcmV0dXJuIGppdEFycmF5TW9kZUZvckpTVHlwZShzdHJ1Y3R1cmUt
PnR5cGVJbmZvKCkudHlwZSgpKTsKKyAgICAKICAgICBBU1NFUlQoaGFzT3B0aW1pemFibGVJbmRl
eGluZ0ZvckNsYXNzSW5mbyhzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpKSk7CiAgICAgcmV0dXJuIGpp
dEFycmF5TW9kZUZvckNsYXNzSW5mbyhzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpKTsKIH0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QuanNvbgo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0Lmpzb24J
KHJldmlzaW9uIDE4MDg3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRl
Y29kZUxpc3QuanNvbgkod29ya2luZyBjb3B5KQpAQCAtOCw3ICs4LDkgQEAKICAgICAgICAgICAg
IHsgIm5hbWUiIDogIm9wX2dldF9zY29wZSIsICJsZW5ndGgiIDogMiB9LAogICAgICAgICAgICAg
eyAibmFtZSIgOiAib3BfdG91Y2hfZW50cnkiLCAibGVuZ3RoIiA6IDEgfSwKICAgICAgICAgICAg
IHsgIm5hbWUiIDogIm9wX2luaXRfbGF6eV9yZWciLCAibGVuZ3RoIiA6IDIgfSwKLSAgICAgICAg
ICAgIHsgIm5hbWUiIDogIm9wX2NyZWF0ZV9hcmd1bWVudHMiLCAibGVuZ3RoIiA6IDMgfSwKKyAg
ICAgICAgICAgIHsgIm5hbWUiIDogIm9wX2NyZWF0ZV9kaXJlY3RfYXJndW1lbnRzIiwgImxlbmd0
aCIgOiAyIH0sIC8vIGp1c3QgdGFrZXMgdGhlIGRzdCByZWdpc3RlcgorICAgICAgICAgICAgeyAi
bmFtZSIgOiAib3BfY3JlYXRlX3Njb3BlZF9hcmd1bWVudHMiLCAibGVuZ3RoIiA6IDMgfSwgLy8g
ZHN0LCBzY29wZVJlZ2lzdGVyLCBpbXBsaWNpdGx5IHVzZXMgdGhlIFNjb3BlZEFyZ3VtZW50c1Rh
YmxlIGluIHRoZSBTeW1ib2xUYWJsZSBvZiB0aGUgQ29kZUJsb2NrCisgICAgICAgICAgICB7ICJu
YW1lIiA6ICJvcF9jcmVhdGVfb3V0X29mX2JhbmRfYXJndW1lbnRzIiwgImxlbmd0aCIgOiAyIH0s
CiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9jcmVhdGVfdGhpcyIsICJsZW5ndGgiIDogNCB9
LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfZ2V0X2NhbGxlZSIsICJsZW5ndGgiIDogMyB9
LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfdG9fdGhpcyIsICJsZW5ndGgiIDogNCB9LApA
QCAtNjEsNyArNjMsNiBAQAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfZ2V0X2J5X2lkIiwg
Imxlbmd0aCIgOiA5ICB9LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfZ2V0X2J5X2lkX291
dF9vZl9saW5lIiwgImxlbmd0aCIgOiA5ICB9LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3Bf
Z2V0X2FycmF5X2xlbmd0aCIsICJsZW5ndGgiIDogOSB9LAotICAgICAgICAgICAgeyAibmFtZSIg
OiAib3BfZ2V0X2FyZ3VtZW50c19sZW5ndGgiLCAibGVuZ3RoIiA6IDQgfSwKICAgICAgICAgICAg
IHsgIm5hbWUiIDogIm9wX3B1dF9ieV9pZCIsICJsZW5ndGgiIDogOSB9LAogICAgICAgICAgICAg
eyAibmFtZSIgOiAib3BfcHV0X2J5X2lkX291dF9vZl9saW5lIiwgImxlbmd0aCIgOiA5IH0sCiAg
ICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9wdXRfYnlfaWRfdHJhbnNpdGlvbl9kaXJlY3QiLCAi
bGVuZ3RoIiA6IDkgfSwKQEAgLTcwLDcgKzcxLDYgQEAKICAgICAgICAgICAgIHsgIm5hbWUiIDog
Im9wX3B1dF9ieV9pZF90cmFuc2l0aW9uX25vcm1hbF9vdXRfb2ZfbGluZSIsICJsZW5ndGgiIDog
OSB9LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfZGVsX2J5X2lkIiwgImxlbmd0aCIgOiA0
IH0sCiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9nZXRfYnlfdmFsIiwgImxlbmd0aCIgOiA2
IH0sCi0gICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9nZXRfYXJndW1lbnRfYnlfdmFsIiwgImxl
bmd0aCIgOiA3IH0sCiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9wdXRfYnlfdmFsIiwgImxl
bmd0aCIgOiA1IH0sCiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9wdXRfYnlfdmFsX2RpcmVj
dCIsICJsZW5ndGgiIDogNSB9LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfZGVsX2J5X3Zh
bCIsICJsZW5ndGgiIDogNCB9LApAQCAtOTQsMTIgKzk0LDExIEBACiAgICAgICAgICAgICB7ICJu
YW1lIiA6ICJvcF9zd2l0Y2hfaW1tIiwgImxlbmd0aCIgOiA0IH0sCiAgICAgICAgICAgICB7ICJu
YW1lIiA6ICJvcF9zd2l0Y2hfY2hhciIsICJsZW5ndGgiIDogNCB9LAogICAgICAgICAgICAgeyAi
bmFtZSIgOiAib3Bfc3dpdGNoX3N0cmluZyIsICJsZW5ndGgiIDogNCB9LAotICAgICAgICAgICAg
eyAibmFtZSIgOiAib3BfbmV3X2Z1bmMiLCAibGVuZ3RoIiA6IDUgfSwKKyAgICAgICAgICAgIHsg
Im5hbWUiIDogIm9wX25ld19mdW5jIiwgImxlbmd0aCIgOiA0IH0sCiAgICAgICAgICAgICB7ICJu
YW1lIiA6ICJvcF9uZXdfZnVuY19leHAiLCAibGVuZ3RoIiA6IDQgfSwKICAgICAgICAgICAgIHsg
Im5hbWUiIDogIm9wX2NhbGwiLCAibGVuZ3RoIiA6IDkgfSwKICAgICAgICAgICAgIHsgIm5hbWUi
IDogIm9wX2NhbGxfZXZhbCIsICJsZW5ndGgiIDogOSB9LAogICAgICAgICAgICAgeyAibmFtZSIg
OiAib3BfY2FsbF92YXJhcmdzIiwgImxlbmd0aCIgOiA5IH0sCi0gICAgICAgICAgICB7ICJuYW1l
IiA6ICJvcF90ZWFyX29mZl9hcmd1bWVudHMiLCAibGVuZ3RoIiA6IDMgfSwKICAgICAgICAgICAg
IHsgIm5hbWUiIDogIm9wX3JldCIsICJsZW5ndGgiIDogMiB9LAogICAgICAgICAgICAgeyAibmFt
ZSIgOiAib3BfY29uc3RydWN0IiwgImxlbmd0aCIgOiA5IH0sCiAgICAgICAgICAgICB7ICJuYW1l
IiA6ICJvcF9jb25zdHJ1Y3RfdmFyYXJncyIsICJsZW5ndGgiIDogOSB9LApAQCAtMTA4LDYgKzEw
Nyw4IEBACiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9yZXNvbHZlX3Njb3BlIiwgImxlbmd0
aCIgOiA3IH0sCiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9nZXRfZnJvbV9zY29wZSIsICJs
ZW5ndGgiIDogOCB9LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfcHV0X3RvX3Njb3BlIiwg
Imxlbmd0aCIgOiA3IH0sCisgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9nZXRfZnJvbV9hcmd1
bWVudHMiLCAibGVuZ3RoIiA6IDUgfSwgLy8gZHN0LCBhcmd1bWVudHMsIGluZGV4LCBwcm9maWxl
CisgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9wdXRfdG9fYXJndW1lbnRzIiwgImxlbmd0aCIg
OiA0IH0sIC8vIGFyZ3VtZW50cywgaW5kZXgsIHNyYwogICAgICAgICAgICAgeyAibmFtZSIgOiAi
b3BfcHVzaF93aXRoX3Njb3BlIiwgImxlbmd0aCIgOiAzIH0sCiAgICAgICAgICAgICB7ICJuYW1l
IiA6ICJvcF9wb3Bfc2NvcGUiLCAibGVuZ3RoIiA6IDIgfSwKICAgICAgICAgICAgIHsgIm5hbWUi
IDogIm9wX3B1c2hfbmFtZV9zY29wZSIsICJsZW5ndGgiIDogNSB9LApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDE4MDg3NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01NjksMTcgKzU2OSw2IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wQnl0ZWNvZGUo
UHJpbnRTdHJlYW0KICAgICAgICAgc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4oaW5zdHJ1Y3Rp
b25zKCkuc2l6ZSgpKSwKICAgICAgICAgc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4oaW5zdHJ1
Y3Rpb25zKCkuc2l6ZSgpICogc2l6ZW9mKEluc3RydWN0aW9uKSksCiAgICAgICAgIG1fbnVtUGFy
YW1ldGVycywgbV9udW1DYWxsZWVSZWdpc3RlcnMsIG1fbnVtVmFycyk7Ci0gICAgaWYgKHN5bWJv
bFRhYmxlKCkgJiYgc3ltYm9sVGFibGUoKS0+Y2FwdHVyZUNvdW50KCkpIHsKLSAgICAgICAgb3V0
LnByaW50ZigKLSAgICAgICAgICAgICI7ICVkIGNhcHR1cmVkIHZhcihzKSAoZnJvbSByJWQgdG8g
ciVkLCBpbmNsdXNpdmUpIiwKLSAgICAgICAgICAgIHN5bWJvbFRhYmxlKCktPmNhcHR1cmVDb3Vu
dCgpLCBzeW1ib2xUYWJsZSgpLT5jYXB0dXJlU3RhcnQoKSwgc3ltYm9sVGFibGUoKS0+Y2FwdHVy
ZUVuZCgpICsgMSk7Ci0gICAgfQotICAgIGlmICh1c2VzQXJndW1lbnRzKCkpIHsKLSAgICAgICAg
b3V0LnByaW50ZigKLSAgICAgICAgICAgICI7IHVzZXMgYXJndW1lbnRzLCBpbiByJWQsIHIlZCIs
Ci0gICAgICAgICAgICBhcmd1bWVudHNSZWdpc3RlcigpLm9mZnNldCgpLAotICAgICAgICAgICAg
dW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVyKGFyZ3VtZW50c1JlZ2lzdGVyKCkpLm9mZnNldCgp
KTsKLSAgICB9CiAgICAgaWYgKG5lZWRzQWN0aXZhdGlvbigpICYmIGNvZGVUeXBlKCkgPT0gRnVu
Y3Rpb25Db2RlKQogICAgICAgICBvdXQucHJpbnRmKCI7IGxleGljYWwgZW52aXJvbm1lbnQgaW4g
ciVkIiwgYWN0aXZhdGlvblJlZ2lzdGVyKCkub2Zmc2V0KCkpOwogICAgIG91dC5wcmludGYoIlxu
Iik7CkBAIC0xNjQxLDcgKzE2MzAsNiBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhDb3B5UGFyc2Vk
QmxvY2tUYWcsCiAgICAgLCBtX2luc3RydWN0aW9ucyhvdGhlci5tX2luc3RydWN0aW9ucykKICAg
ICAsIG1fdGhpc1JlZ2lzdGVyKG90aGVyLm1fdGhpc1JlZ2lzdGVyKQogICAgICwgbV9zY29wZVJl
Z2lzdGVyKG90aGVyLm1fc2NvcGVSZWdpc3RlcikKLSAgICAsIG1fYXJndW1lbnRzUmVnaXN0ZXIo
b3RoZXIubV9hcmd1bWVudHNSZWdpc3RlcikKICAgICAsIG1fbGV4aWNhbEVudmlyb25tZW50UmVn
aXN0ZXIob3RoZXIubV9sZXhpY2FsRW52aXJvbm1lbnRSZWdpc3RlcikKICAgICAsIG1faXNTdHJp
Y3RNb2RlKG90aGVyLm1faXNTdHJpY3RNb2RlKQogICAgICwgbV9uZWVkc0FjdGl2YXRpb24ob3Ro
ZXIubV9uZWVkc0FjdGl2YXRpb24pCkBAIC0xNzAzLDcgKzE2OTEsNiBAQCBDb2RlQmxvY2s6OkNv
ZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBvCiAgICAgLCBtX3ZtKHVubGlua2VkQ29kZUJsb2Nr
LT52bSgpKQogICAgICwgbV90aGlzUmVnaXN0ZXIodW5saW5rZWRDb2RlQmxvY2stPnRoaXNSZWdp
c3RlcigpKQogICAgICwgbV9zY29wZVJlZ2lzdGVyKHVubGlua2VkQ29kZUJsb2NrLT5zY29wZVJl
Z2lzdGVyKCkpCi0gICAgLCBtX2FyZ3VtZW50c1JlZ2lzdGVyKHVubGlua2VkQ29kZUJsb2NrLT5h
cmd1bWVudHNSZWdpc3RlcigpKQogICAgICwgbV9sZXhpY2FsRW52aXJvbm1lbnRSZWdpc3Rlcih1
bmxpbmtlZENvZGVCbG9jay0+YWN0aXZhdGlvblJlZ2lzdGVyKCkpCiAgICAgLCBtX2lzU3RyaWN0
TW9kZSh1bmxpbmtlZENvZGVCbG9jay0+aXNTdHJpY3RNb2RlKCkpCiAgICAgLCBtX25lZWRzQWN0
aXZhdGlvbih1bmxpbmtlZENvZGVCbG9jay0+aGFzQWN0aXZhdGlvblJlZ2lzdGVyKCkgJiYgdW5s
aW5rZWRDb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlKQpAQCAtMTczMSw4ICsx
NzE4LDggQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soU2NyaXB0RXhlY3V0YWJsZSogbwogICAgICAg
ICAgICAgc3ltYm9sVGFibGUtPnByZXBhcmVGb3JUeXBlUHJvZmlsaW5nKGxvY2tlcik7CiAgICAg
ICAgIH0KIAotICAgICAgICBpZiAoY29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUgJiYgc3ltYm9s
VGFibGUtPmNhcHR1cmVDb3VudCgpKSB7Ci0gICAgICAgICAgICBtX3N5bWJvbFRhYmxlLnNldCgq
bV92bSwgbV9vd25lckV4ZWN1dGFibGUuZ2V0KCksIHN5bWJvbFRhYmxlLT5jbG9uZUNhcHR1cmVk
TmFtZXMoKm1fdm0pKTsKKyAgICAgICAgaWYgKGNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlICYm
IHN5bWJvbFRhYmxlLT5zY29wZVNpemUpKSB7CisgICAgICAgICAgICBtX3N5bWJvbFRhYmxlLnNl
dCgqbV92bSwgbV9vd25lckV4ZWN1dGFibGUuZ2V0KCksIHN5bWJvbFRhYmxlLT5jbG9uZVNjb3Bl
UGFydCgqbV92bSkpOwogICAgICAgICAgICAgZGlkQ2xvbmVTeW1ib2xUYWJsZSA9IHRydWU7CiAg
ICAgICAgIH0gZWxzZQogICAgICAgICAgICAgbV9zeW1ib2xUYWJsZS5zZXQoKm1fdm0sIG1fb3du
ZXJFeGVjdXRhYmxlLmdldCgpLCBzeW1ib2xUYWJsZSk7CkBAIC0xOTczLDEzICsxOTYwLDE0IEBA
IENvZGVCbG9jazo6Q29kZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUqIG8KIAogICAgICAgICAgICAg
Ly8gZ2V0X2Zyb21fc2NvcGUgZHN0LCBzY29wZSwgaWQsIFJlc29sdmVNb2RlQW5kVHlwZSwgU3Ry
dWN0dXJlLCBPcGVyYW5kCiAKLSAgICAgICAgICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0g
aWRlbnRpZmllcihwY1szXS51Lm9wZXJhbmQpOwogICAgICAgICAgICAgUmVzb2x2ZU1vZGVBbmRU
eXBlIG1vZGVBbmRUeXBlID0gUmVzb2x2ZU1vZGVBbmRUeXBlKHBjWzRdLnUub3BlcmFuZCk7CiAg
ICAgICAgICAgICBpZiAobW9kZUFuZFR5cGUudHlwZSgpID09IExvY2FsQ2xvc3VyZVZhcikgewog
ICAgICAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgNF0gPSBSZXNvbHZlTW9kZUFuZFR5cGUo
bW9kZUFuZFR5cGUubW9kZSgpLCBDbG9zdXJlVmFyKS5vcGVyYW5kKCk7CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAKKyAgICAgICAgICAgIGNvbnN0IElkZW50aWZpZXIm
IGlkZW50ID0gaWRlbnRpZmllcihwY1szXS51Lm9wZXJhbmQpOworCiAgICAgICAgICAgICBSZXNv
bHZlT3Agb3AgPSBKU1Njb3BlOjphYnN0cmFjdFJlc29sdmUobV9nbG9iYWxPYmplY3QtPmdsb2Jh
bEV4ZWMoKSwgbmVlZHNBY3RpdmF0aW9uKCksIHNjb3BlLCBpZGVudCwgR2V0LCBtb2RlQW5kVHlw
ZS50eXBlKCkpOwogCiAgICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIDRdLnUub3BlcmFuZCA9
IFJlc29sdmVNb2RlQW5kVHlwZShtb2RlQW5kVHlwZS5tb2RlKCksIG9wLnR5cGUpLm9wZXJhbmQo
KTsKQEAgLTE5OTQsMTggKzE5ODIsMTMgQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soU2NyaXB0RXhl
Y3V0YWJsZSogbwogCiAgICAgICAgIGNhc2Ugb3BfcHV0X3RvX3Njb3BlOiB7CiAgICAgICAgICAg
ICAvLyBwdXRfdG9fc2NvcGUgc2NvcGUsIGlkLCB2YWx1ZSwgUmVzb2x2ZU1vZGVBbmRUeXBlLCBT
dHJ1Y3R1cmUsIE9wZXJhbmQKLSAgICAgICAgICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0g
aWRlbnRpZmllcihwY1syXS51Lm9wZXJhbmQpOwotCiAgICAgICAgICAgICBSZXNvbHZlTW9kZUFu
ZFR5cGUgbW9kZUFuZFR5cGUgPSBSZXNvbHZlTW9kZUFuZFR5cGUocGNbNF0udS5vcGVyYW5kKTsK
ICAgICAgICAgICAgIGlmIChtb2RlQW5kVHlwZS50eXBlKCkgPT0gTG9jYWxDbG9zdXJlVmFyKSB7
Ci0gICAgICAgICAgICAgICAgYm9vbCBpc1dhdGNoYWJsZVZhcmlhYmxlID0gcGNbNV0udS5vcGVy
YW5kOwotICAgICAgICAgICAgICAgIGlmICghaXNXYXRjaGFibGVWYXJpYWJsZSkgewotICAgICAg
ICAgICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIDVdLnUud2F0Y2hwb2ludFNldCA9IG51bGxw
dHI7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICBTdHJpbmdJbXBsKiB1aWQgPSBpZGVudC5pbXBsKCk7Ci0gICAgICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoZGlkQ2xvbmVTeW1ib2xUYWJsZSk7Ci0gICAgICAgICAgICAgICAg
aWYgKGlkZW50ICE9IG1fdm0tPnByb3BlcnR5TmFtZXMtPmFyZ3VtZW50cykgeworICAgICAgICAg
ICAgICAgIC8vIE9ubHkgZG8gd2F0Y2hpbmcgaWYgdGhlIHByb3BlcnR5IHdlJ3JlIHB1dHRpbmcg
dG8gaXMgbm90IGFub255bW91cy4KKyAgICAgICAgICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KHBjWzJdLnUub3BlcmFuZCkgIT0gVUlOVF9NQVgpIHsKKyAgICAgICAgICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoZGlkQ2xvbmVTeW1ib2xUYWJsZSk7CisgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gaWRlbnRpZmllcihwY1syXS51Lm9wZXJhbmQp
OworICAgICAgICAgICAgICAgICAgICBTdHJpbmdJbXBsKiB1aWQgPSBpZGVudC5pbXBsKCk7CiAg
ICAgICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fc3ltYm9sVGFi
bGUtPm1fbG9jayk7CiAgICAgICAgICAgICAgICAgICAgIFN5bWJvbFRhYmxlOjpNYXA6Oml0ZXJh
dG9yIGl0ZXIgPSBtX3N5bWJvbFRhYmxlLT5maW5kKGxvY2tlciwgdWlkKTsKICAgICAgICAgICAg
ICAgICAgICAgQVNTRVJUKGl0ZXIgIT0gbV9zeW1ib2xUYWJsZS0+ZW5kKGxvY2tlcikpOwpAQCAt
MjAxNiw2ICsxOTk5LDggQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soU2NyaXB0RXhlY3V0YWJsZSog
bwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogCisgICAgICAgICAgICBj
b25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGlkZW50aWZpZXIocGNbMl0udS5vcGVyYW5kKTsKKwog
ICAgICAgICAgICAgUmVzb2x2ZU9wIG9wID0gSlNTY29wZTo6YWJzdHJhY3RSZXNvbHZlKG1fZ2xv
YmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIG5lZWRzQWN0aXZhdGlvbigpLCBzY29wZSwgaWRlbnQs
IFB1dCwgbW9kZUFuZFR5cGUudHlwZSgpKTsKIAogICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kg
KyA0XS51Lm9wZXJhbmQgPSBSZXNvbHZlTW9kZUFuZFR5cGUobW9kZUFuZFR5cGUubW9kZSgpLCBv
cC50eXBlKS5vcGVyYW5kKCk7CkBAIC0yODYzLDYzICsyODQ4LDYgQEAgYm9vbCBDb2RlQmxvY2s6
Omhhc09wdGltaXplZFJlcGxhY2VtZW50KAogfQogI2VuZGlmCiAKLWJvb2wgQ29kZUJsb2NrOjpp
c0NhcHR1cmVkKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBJbmxpbmVDYWxsRnJhbWUqIGlubGlu
ZUNhbGxGcmFtZSkgY29uc3QKLXsKLSAgICBpZiAob3BlcmFuZC5pc0FyZ3VtZW50KCkpCi0gICAg
ICAgIHJldHVybiBvcGVyYW5kLnRvQXJndW1lbnQoKSAmJiB1c2VzQXJndW1lbnRzKCk7Ci0KLSAg
ICBpZiAoaW5saW5lQ2FsbEZyYW1lKQotICAgICAgICByZXR1cm4gaW5saW5lQ2FsbEZyYW1lLT5j
YXB0dXJlZFZhcnMuZ2V0KG9wZXJhbmQudG9Mb2NhbCgpKTsKLQotICAgIC8vIFRoZSBsZXhpY2Fs
IGVudmlyb25tZW50IG9iamVjdCBpc24ndCBpbiB0aGUgY2FwdHVyZWQgcmVnaW9uLCBidXQgaXQn
cyAiY2FwdHVyZWQiCi0gICAgLy8gaW4gdGhlIHNlbnNlIHRoYXQgc3RvcmVzIHRvIGl0cyBsb2Nh
dGlvbiBjYW4gYmUgb2JzZXJ2ZWQgaW5kaXJlY3RseS4KLSAgICBpZiAobmVlZHNBY3RpdmF0aW9u
KCkgJiYgb3BlcmFuZCA9PSBhY3RpdmF0aW9uUmVnaXN0ZXIoKSkKLSAgICAgICAgcmV0dXJuIHRy
dWU7Ci0KLSAgICAvLyBEaXR0byBmb3IgdGhlIGFyZ3VtZW50cyBvYmplY3QuCi0gICAgaWYgKHVz
ZXNBcmd1bWVudHMoKSAmJiBvcGVyYW5kID09IGFyZ3VtZW50c1JlZ2lzdGVyKCkpCi0gICAgICAg
IHJldHVybiB0cnVlOwotICAgIGlmICh1c2VzQXJndW1lbnRzKCkgJiYgb3BlcmFuZCA9PSB1bm1v
ZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIoYXJndW1lbnRzUmVnaXN0ZXIoKSkpCi0gICAgICAgIHJl
dHVybiB0cnVlOwotCi0gICAgLy8gV2UncmUgaW4gZ2xvYmFsIGNvZGUgc28gdGhlcmUgYXJlIG5v
IGxvY2FscyB0byBjYXB0dXJlCi0gICAgaWYgKCFzeW1ib2xUYWJsZSgpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gc3ltYm9sVGFibGUoKS0+aXNDYXB0dXJlZChvcGVyYW5k
Lm9mZnNldCgpKTsKLX0KLQotaW50IENvZGVCbG9jazo6ZnJhbWVQb2ludGVyT2Zmc2V0VG9HZXRB
Y3RpdmF0aW9uUmVnaXN0ZXJzKGludCBtYWNoaW5lQ2FwdHVyZVN0YXJ0KQotewotICAgIC8vIFdl
J2xsIGJlIGFkZGluZyB0aGlzIHRvIHRoZSBzdGFjayBwb2ludGVyIHRvIGdldCBhIHJlZ2lzdGVy
cyBwb2ludGVyIHRoYXQgbG9va3MKLSAgICAvLyBsaWtlIGl0IHdvdWxkIGhhdmUgbG9va2VkIGlu
IHRoZSBiYXNlbGluZSBlbmdpbmUuIEZvciBleGFtcGxlLCBpZiBieXRlY29kZSB3b3VsZAotICAg
IC8vIGhhdmUgcHV0IHRoZSBmaXJzdCBjYXB0dXJlZCB2YXJpYWJsZSBhdCBvZmZzZXQgLTUgYnV0
IHdlIHB1dCBpdCBhdCBvZmZzZXQgLTEsIHRoZW4KLSAgICAvLyB3ZSdsbCBoYXZlIGFuIG9mZnNl
dCBvZiA0LgotICAgIGludDMyX3Qgb2Zmc2V0ID0gMDsKLSAgICAKLSAgICAvLyBDb21wdXRlIHdo
ZXJlIHdlIHB1dCB0aGUgY2FwdHVyZWQgdmFyaWFibGVzLiBUaGlzIG9mZnNldCB3aWxsIHBvaW50
IHRoZSByZWdpc3RlcnMKLSAgICAvLyBwb2ludGVyIGRpcmVjdGx5IGF0IHRoZSBmaXJzdCBjYXB0
dXJlZCB2YXIuCi0gICAgb2Zmc2V0ICs9IG1hY2hpbmVDYXB0dXJlU3RhcnQ7Ci0gICAgCi0gICAg
Ly8gTm93IGNvbXB1dGUgdGhlIG9mZnNldCBuZWVkZWQgdG8gbWFrZSB0aGUgcnVudGltZSBzZWUg
dGhlIGNhcHR1cmVkIHZhcmlhYmxlcyBhdCB0aGUKLSAgICAvLyBzYW1lIG9mZnNldCB0aGF0IHRo
ZSBieXRlY29kZSB3b3VsZCBoYXZlIHVzZWQuCi0gICAgb2Zmc2V0IC09IHN5bWJvbFRhYmxlKCkt
PmNhcHR1cmVTdGFydCgpOwotICAgIAotICAgIHJldHVybiBvZmZzZXQ7Ci19Ci0KLWludCBDb2Rl
QmxvY2s6OmZyYW1lUG9pbnRlck9mZnNldFRvR2V0QWN0aXZhdGlvblJlZ2lzdGVycygpCi17Ci0g
ICAgaWYgKCFKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkKLSAgICAgICAgcmV0
dXJuIDA7Ci0jaWYgRU5BQkxFKERGR19KSVQpCi0gICAgcmV0dXJuIGZyYW1lUG9pbnRlck9mZnNl
dFRvR2V0QWN0aXZhdGlvblJlZ2lzdGVycyhqaXRDb2RlKCktPmRmZ0NvbW1vbigpLT5tYWNoaW5l
Q2FwdHVyZVN0YXJ0KTsKLSNlbHNlCi0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LSAgICByZXR1cm4gMDsKLSNlbmRpZgotfQotCiBIYW5kbGVySW5mbyogQ29kZUJsb2NrOjpoYW5k
bGVyRm9yQnl0ZWNvZGVPZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpCiB7CiAgICAgUkVM
RUFTRV9BU1NFUlQoYnl0ZWNvZGVPZmZzZXQgPCBpbnN0cnVjdGlvbnMoKS5zaXplKCkpOwpAQCAt
MzA5OCwxOCArMzAyNiw2IEBAIFBhc3NSZWZQdHI8Q29kZUJsb2NrPiBDb2RlQmxvY2s6Om5ld1Jl
cGwKICAgICByZXR1cm4gb3duZXJFeGVjdXRhYmxlKCktPm5ld1JlcGxhY2VtZW50Q29kZUJsb2Nr
Rm9yKHNwZWNpYWxpemF0aW9uS2luZCgpKTsKIH0KIAotY29uc3QgU2xvd0FyZ3VtZW50KiBDb2Rl
QmxvY2s6Om1hY2hpbmVTbG93QXJndW1lbnRzKCkKLXsKLSAgICBpZiAoIUpJVENvZGU6OmlzT3B0
aW1pemluZ0pJVChqaXRUeXBlKCkpKQotICAgICAgICByZXR1cm4gc3ltYm9sVGFibGUoKS0+c2xv
d0FyZ3VtZW50cygpOwotICAgIAotI2lmIEVOQUJMRShERkdfSklUKQotICAgIHJldHVybiBqaXRD
b2RlKCktPmRmZ0NvbW1vbigpLT5zbG93QXJndW1lbnRzLmdldCgpOwotI2Vsc2UgLy8gRU5BQkxF
KERGR19KSVQpCi0gICAgcmV0dXJuIDA7Ci0jZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCi19Ci0K
ICNpZiBFTkFCTEUoSklUKQogQ29kZUJsb2NrKiBQcm9ncmFtQ29kZUJsb2NrOjpyZXBsYWNlbWVu
dCgpCiB7CkBAIC0zOTAyLDYzICszODE4LDEyIEBAIFN0cmluZyBDb2RlQmxvY2s6Om5hbWVGb3JS
ZWdpc3RlcihWaXJ0dWEKICAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgibGV4aWNhbCBlbnZp
cm9ubWVudCIpOwogICAgIGlmICh2aXJ0dWFsUmVnaXN0ZXIgPT0gdGhpc1JlZ2lzdGVyKCkpCiAg
ICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoInRoaXMiKTsKLSAgICBpZiAodXNlc0FyZ3VtZW50
cygpKSB7Ci0gICAgICAgIGlmICh2aXJ0dWFsUmVnaXN0ZXIgPT0gYXJndW1lbnRzUmVnaXN0ZXIo
KSkKLSAgICAgICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoImFyZ3VtZW50cyIpOwotICAgICAg
ICBpZiAodW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVyKGFyZ3VtZW50c1JlZ2lzdGVyKCkpID09
IHZpcnR1YWxSZWdpc3RlcikKLSAgICAgICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoInJlYWwg
YXJndW1lbnRzIik7Ci0gICAgfQogICAgIGlmICh2aXJ0dWFsUmVnaXN0ZXIuaXNBcmd1bWVudCgp
KQogICAgICAgICByZXR1cm4gU3RyaW5nOjpmb3JtYXQoImFyZ3VtZW50c1slM2RdIiwgdmlydHVh
bFJlZ2lzdGVyLnRvQXJndW1lbnQoKSk7CiAKICAgICByZXR1cm4gIiI7CiB9CiAKLW5hbWVzcGFj
ZSB7Ci0KLXN0cnVjdCBWZXJpZnlDYXB0dXJlZERlZiB7Ci0gICAgdm9pZCBvcGVyYXRvcigpKENv
ZGVCbG9jayogY29kZUJsb2NrLCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIE9wY29kZUlEIG9w
Y29kZUlELCBpbnQgb3BlcmFuZCkKLSAgICB7Ci0gICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zm
c2V0ID0gaW5zdHJ1Y3Rpb24gLSBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmJlZ2luKCk7Ci0g
ICAgICAgIAotICAgICAgICBpZiAoY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChv
cGVyYW5kKSkgewotICAgICAgICAgICAgY29kZUJsb2NrLT5iZWdpblZhbGlkYXRpb25EaWRGYWls
KCk7Ci0gICAgICAgICAgICBkYXRhTG9nKCIgICAgQXQgYmMjIiwgYnl0ZWNvZGVPZmZzZXQsICIg
ZW5jb3VudGVyZWQgYSBkZWZpbml0aW9uIG9mIGEgY29uc3RhbnQuXG4iKTsKLSAgICAgICAgICAg
IGNvZGVCbG9jay0+ZW5kVmFsaWRhdGlvbkRpZEZhaWwoKTsKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgfQotCi0gICAgICAgIHN3aXRjaCAob3Bjb2RlSUQpIHsKLSAgICAgICAgY2FzZSBv
cF9lbnRlcjoKLSAgICAgICAgY2FzZSBvcF9pbml0X2xhenlfcmVnOgotICAgICAgICBjYXNlIG9w
X2NyZWF0ZV9hcmd1bWVudHM6Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIFZpcnR1YWxSZWdpc3Rl
ciB2aXJ0dWFsUmVnKG9wZXJhbmQpOwotICAgICAgICBpZiAoIXZpcnR1YWxSZWcuaXNMb2NhbCgp
KQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGlmIChjb2RlQmxvY2stPnVzZXNBcmd1
bWVudHMoKSAmJiB2aXJ0dWFsUmVnID09IGNvZGVCbG9jay0+YXJndW1lbnRzUmVnaXN0ZXIoKSkK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaWYgKGNvZGVCbG9jay0+dXNlc0FyZ3VtZW50
cygpICYmIHZpcnR1YWxSZWcgPT0gdW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVyKGNvZGVCbG9j
ay0+YXJndW1lbnRzUmVnaXN0ZXIoKSkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAg
aWYgKGNvZGVCbG9jay0+Y2FwdHVyZUNvdW50KCkgJiYgY29kZUJsb2NrLT5zeW1ib2xUYWJsZSgp
LT5pc0NhcHR1cmVkKG9wZXJhbmQpKSB7Ci0gICAgICAgICAgICBjb2RlQmxvY2stPmJlZ2luVmFs
aWRhdGlvbkRpZEZhaWwoKTsKLSAgICAgICAgICAgIGRhdGFMb2coIiAgICBBdCBiYyMiLCBieXRl
Y29kZU9mZnNldCwgIiBlbmNvdW50ZXJlZCBpbnZhbGlkIGFzc2lnbm1lbnQgdG8gY2FwdHVyZWQg
dmFyaWFibGUgIiwgdmlydHVhbFJlZywgIi5cbiIpOwotICAgICAgICAgICAgY29kZUJsb2NrLT5l
bmRWYWxpZGF0aW9uRGlkRmFpbCgpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0g
ICAgICAgIAotICAgICAgICByZXR1cm47Ci0gICAgfQotfTsKLQotfSAvLyBhbm9ueW1vdXMgbmFt
ZXNwYWNlCi0KIHZvaWQgQ29kZUJsb2NrOjp2YWxpZGF0ZSgpCiB7CiAgICAgQnl0ZWNvZGVMaXZl
bmVzc0FuYWx5c2lzIGxpdmVuZXNzKHRoaXMpOyAvLyBDb21wdXRlIGRpcmVjdGx5IGZyb20gc2Ny
YXRjaCBzbyBpdCBkb2Vzbid0IGVmZmVjdCBDb2RlQmxvY2sgZm9vdHByaW50LgpAQCAtMzk3NCwz
OCArMzgzOSwxNSBAQCB2b2lkIENvZGVCbG9jazo6dmFsaWRhdGUoKQogICAgIH0KICAgICAKICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBtX251bUNhbGxlZVJlZ2lzdGVyczsgaS0tOykgewotICAgICAg
ICBib29sIGlzQ2FwdHVyZWQgPSBmYWxzZTsKICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZyA9
IHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGkpOwogICAgICAgICAKLSAgICAgICAgaWYgKGNhcHR1
cmVDb3VudCgpKQotICAgICAgICAgICAgaXNDYXB0dXJlZCA9IHJlZy5vZmZzZXQoKSA8PSBjYXB0
dXJlU3RhcnQoKSAmJiByZWcub2Zmc2V0KCkgPiBjYXB0dXJlRW5kKCk7Ci0gICAgICAgIAotICAg
ICAgICBpZiAoaXNDYXB0dXJlZCkgewotICAgICAgICAgICAgaWYgKCFsaXZlQXRIZWFkLmdldChp
KSkgewotICAgICAgICAgICAgICAgIGJlZ2luVmFsaWRhdGlvbkRpZEZhaWwoKTsKLSAgICAgICAg
ICAgICAgICBkYXRhTG9nKCIgICAgVmFyaWFibGUgbG9jIiwgaSwgIiBpcyBleHBlY3RlZCB0byBi
ZSBsaXZlIGJlY2F1c2UgaXQgaXMgY2FwdHVyZWQsIGJ1dCBpdCBpc24ndCBsaXZlLlxuIik7Ci0g
ICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIFJlc3VsdDogIiwgbGl2ZUF0SGVhZCwgIlxuIik7
Ci0gICAgICAgICAgICAgICAgZW5kVmFsaWRhdGlvbkRpZEZhaWwoKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChsaXZlQXRIZWFkLmdldChpKSkgewot
ICAgICAgICAgICAgICAgIGJlZ2luVmFsaWRhdGlvbkRpZEZhaWwoKTsKLSAgICAgICAgICAgICAg
ICBkYXRhTG9nKCIgICAgVmFyaWFibGUgbG9jIiwgaSwgIiBpcyBleHBlY3RlZCB0byBiZSBkZWFk
LlxuIik7Ci0gICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIFJlc3VsdDogIiwgbGl2ZUF0SGVh
ZCwgIlxuIik7Ci0gICAgICAgICAgICAgICAgZW5kVmFsaWRhdGlvbkRpZEZhaWwoKTsKLSAgICAg
ICAgICAgIH0KKyAgICAgICAgaWYgKGxpdmVBdEhlYWQuZ2V0KGkpKSB7CisgICAgICAgICAgICBi
ZWdpblZhbGlkYXRpb25EaWRGYWlsKCk7CisgICAgICAgICAgICBkYXRhTG9nKCIgICAgVmFyaWFi
bGUgbG9jIiwgaSwgIiBpcyBleHBlY3RlZCB0byBiZSBkZWFkLlxuIik7CisgICAgICAgICAgICBk
YXRhTG9nKCIgICAgUmVzdWx0OiAiLCBsaXZlQXRIZWFkLCAiXG4iKTsKKyAgICAgICAgICAgIGVu
ZFZhbGlkYXRpb25EaWRGYWlsKCk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCi0gICAgZm9yICh1
bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IDA7IGJ5dGVjb2RlT2Zmc2V0IDwgaW5zdHJ1Y3Rpb25z
KCkuc2l6ZSgpOykgewotICAgICAgICBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0g
aW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKSArIGJ5dGVjb2RlT2Zmc2V0OwotICAgICAgICBPcGNvZGVJ
RCBvcGNvZGVJRCA9IG1fdm0tPmludGVycHJldGVyLT5nZXRPcGNvZGVJRChjdXJyZW50SW5zdHJ1
Y3Rpb24tPnUub3Bjb2RlKTsKLSAgICAgICAgCi0gICAgICAgIFZlcmlmeUNhcHR1cmVkRGVmIHZl
cmlmeUNhcHR1cmVkRGVmOwotICAgICAgICBjb21wdXRlRGVmc0ZvckJ5dGVjb2RlT2Zmc2V0KHRo
aXMsIGJ5dGVjb2RlT2Zmc2V0LCB2ZXJpZnlDYXB0dXJlZERlZik7Ci0gICAgICAgIAotICAgICAg
ICBieXRlY29kZU9mZnNldCArPSBvcGNvZGVMZW5ndGgob3Bjb2RlSUQpOwotICAgIH0KIH0KIAog
dm9pZCBDb2RlQmxvY2s6OmJlZ2luVmFsaWRhdGlvbkRpZEZhaWwoKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2aXNpb24gMTgwODc1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkp
CkBAIC04Myw4ICs4Myw2IEBAIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKIGNsYXNzIFJl
cGF0Y2hCdWZmZXI7CiBjbGFzcyBUeXBlTG9jYXRpb247CiAKLWlubGluZSBWaXJ0dWFsUmVnaXN0
ZXIgdW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudHNS
ZWdpc3RlcikgeyByZXR1cm4gVmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50c1JlZ2lzdGVyLm9mZnNl
dCgpICsgMSk7IH0KLQogZW51bSBSZW9wdGltaXphdGlvbk1vZGUgeyBEb250Q291bnRSZW9wdGlt
aXphdGlvbiwgQ291bnRSZW9wdGltaXphdGlvbiB9OwogCiBjbGFzcyBDb2RlQmxvY2sgOiBwdWJs
aWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8Q29kZUJsb2NrPiwgcHVibGljIFVuY29uZGl0aW9uYWxG
aW5hbGl6ZXIsIHB1YmxpYyBXZWFrUmVmZXJlbmNlSGFydmVzdGVyIHsKQEAgLTI1OSwxMSArMjU3
LDYgQEAgcHVibGljOgogCiAgICAgdW5zaWduZWQgaW5zdHJ1Y3Rpb25Db3VudCgpIGNvbnN0IHsg
cmV0dXJuIG1faW5zdHJ1Y3Rpb25zLnNpemUoKTsgfQogCi0gICAgaW50IGFyZ3VtZW50SW5kZXhB
ZnRlckNhcHR1cmUoc2l6ZV90IGFyZ3VtZW50KTsKLSAgICAKLSAgICBib29sIGhhc1Nsb3dBcmd1
bWVudHMoKTsKLSAgICBjb25zdCBTbG93QXJndW1lbnQqIG1hY2hpbmVTbG93QXJndW1lbnRzKCk7
Ci0KICAgICAvLyBFeGFjdGx5IGVxdWl2YWxlbnQgdG8gY29kZUJsb2NrLT5vd25lckV4ZWN1dGFi
bGUoKS0+aW5zdGFsbENvZGUoY29kZUJsb2NrKTsKICAgICB2b2lkIGluc3RhbGwoKTsKICAgICAK
QEAgLTMyNywyNCArMzIwLDYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9zY29wZVJlZ2lz
dGVyOwogICAgIH0KIAotICAgIHZvaWQgc2V0QXJndW1lbnRzUmVnaXN0ZXIoVmlydHVhbFJlZ2lz
dGVyIGFyZ3VtZW50c1JlZ2lzdGVyKQotICAgIHsKLSAgICAgICAgQVNTRVJUKGFyZ3VtZW50c1Jl
Z2lzdGVyLmlzVmFsaWQoKSk7Ci0gICAgICAgIG1fYXJndW1lbnRzUmVnaXN0ZXIgPSBhcmd1bWVu
dHNSZWdpc3RlcjsKLSAgICAgICAgQVNTRVJUKHVzZXNBcmd1bWVudHMoKSk7Ci0gICAgfQotICAg
IFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudHNSZWdpc3RlcigpIGNvbnN0Ci0gICAgewotICAgICAg
ICBBU1NFUlQodXNlc0FyZ3VtZW50cygpKTsKLSAgICAgICAgcmV0dXJuIG1fYXJndW1lbnRzUmVn
aXN0ZXI7Ci0gICAgfQotICAgIFZpcnR1YWxSZWdpc3RlciB1bmNoZWNrZWRBcmd1bWVudHNSZWdp
c3RlcigpCi0gICAgewotICAgICAgICBpZiAoIXVzZXNBcmd1bWVudHMoKSkKLSAgICAgICAgICAg
IHJldHVybiBWaXJ0dWFsUmVnaXN0ZXIoKTsKLSAgICAgICAgcmV0dXJuIGFyZ3VtZW50c1JlZ2lz
dGVyKCk7Ci0gICAgfQotCiAgICAgdm9pZCBzZXRBY3RpdmF0aW9uUmVnaXN0ZXIoVmlydHVhbFJl
Z2lzdGVyIGFjdGl2YXRpb25SZWdpc3RlcikKICAgICB7CiAgICAgICAgIG1fbGV4aWNhbEVudmly
b25tZW50UmVnaXN0ZXIgPSBhY3RpdmF0aW9uUmVnaXN0ZXI7CkBAIC0zNjEsNDAgKzMzNiwxMiBA
QCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX2xleGljYWxFbnZpcm9ubWVudFJlZ2lzdGVyOwog
ICAgIH0KIAotICAgIGJvb2wgdXNlc0FyZ3VtZW50cygpIGNvbnN0IHsgcmV0dXJuIG1fYXJndW1l
bnRzUmVnaXN0ZXIuaXNWYWxpZCgpOyB9Ci0KICAgICBib29sIG5lZWRzQWN0aXZhdGlvbigpIGNv
bnN0CiAgICAgewogICAgICAgICBBU1NFUlQobV9sZXhpY2FsRW52aXJvbm1lbnRSZWdpc3Rlci5p
c1ZhbGlkKCkgPT0gbV9uZWVkc0FjdGl2YXRpb24pOwogICAgICAgICByZXR1cm4gbV9uZWVkc0Fj
dGl2YXRpb247CiAgICAgfQogICAgIAotICAgIHVuc2lnbmVkIGNhcHR1cmVDb3VudCgpIGNvbnN0
Ci0gICAgewotICAgICAgICBpZiAoIXN5bWJvbFRhYmxlKCkpCi0gICAgICAgICAgICByZXR1cm4g
MDsKLSAgICAgICAgcmV0dXJuIHN5bWJvbFRhYmxlKCktPmNhcHR1cmVDb3VudCgpOwotICAgIH0K
LSAgICAKLSAgICBpbnQgY2FwdHVyZVN0YXJ0KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIGlmICgh
c3ltYm9sVGFibGUoKSkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICByZXR1cm4gc3lt
Ym9sVGFibGUoKS0+Y2FwdHVyZVN0YXJ0KCk7Ci0gICAgfQotICAgIAotICAgIGludCBjYXB0dXJl
RW5kKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIGlmICghc3ltYm9sVGFibGUoKSkKLSAgICAgICAg
ICAgIHJldHVybiAwOwotICAgICAgICByZXR1cm4gc3ltYm9sVGFibGUoKS0+Y2FwdHVyZUVuZCgp
OwotICAgIH0KLSAgICAKLSAgICBib29sIGlzQ2FwdHVyZWQoVmlydHVhbFJlZ2lzdGVyIG9wZXJh
bmQsIElubGluZUNhbGxGcmFtZSogPSAwKSBjb25zdDsKLSAgICAKLSAgICBpbnQgZnJhbWVQb2lu
dGVyT2Zmc2V0VG9HZXRBY3RpdmF0aW9uUmVnaXN0ZXJzKGludCBtYWNoaW5lQ2FwdHVyZVN0YXJ0
KTsKLSAgICBpbnQgZnJhbWVQb2ludGVyT2Zmc2V0VG9HZXRBY3RpdmF0aW9uUmVnaXN0ZXJzKCk7
Ci0KICAgICBDb2RlVHlwZSBjb2RlVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRDb2Rl
LT5jb2RlVHlwZSgpOyB9CiAgICAgUHV0UHJvcGVydHlTbG90OjpDb250ZXh0IHB1dEJ5SWRDb250
ZXh0KCkgY29uc3QKICAgICB7CkBAIC0xMDU3LDcgKzEwMDQsNiBAQCBwcml2YXRlOgogICAgIFdy
aXRlQmFycmllcjxTeW1ib2xUYWJsZT4gbV9zeW1ib2xUYWJsZTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgbV90aGlzUmVnaXN0ZXI7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG1fc2NvcGVSZWdpc3RlcjsK
LSAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9hcmd1bWVudHNSZWdpc3RlcjsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgbV9sZXhpY2FsRW52aXJvbm1lbnRSZWdpc3RlcjsKIAogICAgIGJvb2wgbV9pc1N0cmlj
dE1vZGU7CkBAIC0xMjE4LDI0ICsxMTY0LDYgQEAgaW5saW5lIENvZGVCbG9jayogYmFzZWxpbmVD
b2RlQmxvY2tGb3JPcgogICAgIHJldHVybiBiYXNlbGluZUNvZGVCbG9jazsKIH0KIAotaW5saW5l
IGludCBDb2RlQmxvY2s6OmFyZ3VtZW50SW5kZXhBZnRlckNhcHR1cmUoc2l6ZV90IGFyZ3VtZW50
KQotewotICAgIGlmIChhcmd1bWVudCA+PSBzdGF0aWNfY2FzdDxzaXplX3Q+KHN5bWJvbFRhYmxl
KCktPnBhcmFtZXRlckNvdW50KCkpKQotICAgICAgICByZXR1cm4gQ2FsbEZyYW1lOjphcmd1bWVu
dE9mZnNldChhcmd1bWVudCk7Ci0gICAgCi0gICAgY29uc3QgU2xvd0FyZ3VtZW50KiBzbG93QXJn
dW1lbnRzID0gc3ltYm9sVGFibGUoKS0+c2xvd0FyZ3VtZW50cygpOwotICAgIGlmICghc2xvd0Fy
Z3VtZW50cyB8fCBzbG93QXJndW1lbnRzW2FyZ3VtZW50XS5zdGF0dXMgPT0gU2xvd0FyZ3VtZW50
OjpOb3JtYWwpCi0gICAgICAgIHJldHVybiBDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0KGFyZ3Vt
ZW50KTsKLSAgICAKLSAgICBBU1NFUlQoc2xvd0FyZ3VtZW50c1thcmd1bWVudF0uc3RhdHVzID09
IFNsb3dBcmd1bWVudDo6Q2FwdHVyZWQpOwotICAgIHJldHVybiBzbG93QXJndW1lbnRzW2FyZ3Vt
ZW50XS5pbmRleDsKLX0KLQotaW5saW5lIGJvb2wgQ29kZUJsb2NrOjpoYXNTbG93QXJndW1lbnRz
KCkKLXsKLSAgICByZXR1cm4gISFzeW1ib2xUYWJsZSgpLT5zbG93QXJndW1lbnRzKCk7Ci19Ci0K
IGlubGluZSBSZWdpc3RlciYgRXhlY1N0YXRlOjpyKGludCBpbmRleCkKIHsKICAgICBDb2RlQmxv
Y2sqIGNvZGVCbG9jayA9IHRoaXMtPmNvZGVCbG9jaygpOwpAQCAtMTI2MCwxNyArMTE4OCw2IEBA
IGlubGluZSBSZWdpc3RlciYgRXhlY1N0YXRlOjp1bmNoZWNrZWRSKFYKICAgICByZXR1cm4gdW5j
aGVja2VkUihyZWcub2Zmc2V0KCkpOwogfQogCi1pbmxpbmUgSlNWYWx1ZSBFeGVjU3RhdGU6OmFy
Z3VtZW50QWZ0ZXJDYXB0dXJlKHNpemVfdCBhcmd1bWVudCkKLXsKLSAgICBpZiAoYXJndW1lbnQg
Pj0gYXJndW1lbnRDb3VudCgpKQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICAK
LSAgICBpZiAoIWNvZGVCbG9jaygpKQotICAgICAgICByZXR1cm4gdGhpc1thcmd1bWVudE9mZnNl
dChhcmd1bWVudCldLmpzVmFsdWUoKTsKLSAgICAKLSAgICByZXR1cm4gdGhpc1tjb2RlQmxvY2so
KS0+YXJndW1lbnRJbmRleEFmdGVyQ2FwdHVyZShhcmd1bWVudCldLmpzVmFsdWUoKTsKLX0KLQog
aW5saW5lIHZvaWQgQ29kZUJsb2NrU2V0OjptYXJrKHZvaWQqIGNhbmRpZGF0ZUNvZGVCbG9jaykK
IHsKICAgICAvLyBXZSBoYXZlIHRvIGNoZWNrIGZvciAwIGFuZCAtMSBiZWNhdXNlIHRob3NlIGFy
ZSB1c2VkIGJ5IHRoZSBIYXNoTWFwIGFzIG1hcmtlcnMuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmgJKHJldmlzaW9uIDE4MDg3NSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmgJKHdvcmtpbmcgY29weSkKQEAg
LTE4OSwxMiArMTg5LDEwIEBAIHN0cnVjdCBJbmxpbmVDYWxsRnJhbWUgewogICAgIFdyaXRlQmFy
cmllcjxTY3JpcHRFeGVjdXRhYmxlPiBleGVjdXRhYmxlOwogICAgIFZhbHVlUmVjb3ZlcnkgY2Fs
bGVlUmVjb3Zlcnk7CiAgICAgQ29kZU9yaWdpbiBjYWxsZXI7Ci0gICAgQml0VmVjdG9yIGNhcHR1
cmVkVmFyczsgLy8gSW5kZXhlZCBieSB0aGUgbWFjaGluZSBjYWxsIGZyYW1lJ3MgdmFyaWFibGUg
bnVtYmVyaW5nLgogCiAgICAgc2lnbmVkIHN0YWNrT2Zmc2V0IDogMjg7CiAgICAgdW5zaWduZWQg
a2luZCA6IDM7IC8vIHJlYWwgdHlwZSBpcyBLaW5kCiAgICAgYm9vbCBpc0Nsb3N1cmVDYWxsIDog
MTsgLy8gSWYgZmFsc2UgdGhlbiB3ZSBrbm93IHRoYXQgY2FsbGVlL3Njb3BlIGFyZSBjb25zdGFu
dHMgYW5kIHRoZSBERkcgd29uJ3QgdHJlYXQgdGhlbSBhcyB2YXJpYWJsZXMsIGkuZS4gdGhleSBo
YXZlIHRvIGJlIHJlY292ZXJlZCBtYW51YWxseS4KLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1l
bnRzUmVnaXN0ZXI7IC8vIFRoaXMgaXMgb25seSBzZXQgaWYgdGhlIGNvZGUgdXNlcyBhcmd1bWVu
dHMuIFRoZSB1bm1vZGlmaWVkIGFyZ3VtZW50cyByZWdpc3RlciBmb2xsb3dzIHRoZSB1bm1vZGlm
aWVkQXJndW1lbnRzUmVnaXN0ZXIoKSBjb252ZW50aW9uIChzZWUgQ29kZUJsb2NrLmgpLgogICAg
IFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudENvdW50UmVnaXN0ZXI7IC8vIE9ubHkgc2V0IHdoZW4g
d2UgaW5saW5lIGEgdmFyYXJncyBjYWxsLgogICAgIAogICAgIC8vIFRoZXJlIGlzIHJlYWxseSBu
byBnb29kIG5vdGlvbiBvZiBhICJkZWZhdWx0IiBzZXQgb2YgdmFsdWVzIGZvcgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuY3BwCShy
ZXZpc2lvbiAxODA4NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3Vs
YXRlZFR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwxMCArMjksMTEgQEAKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJTcGVjdWxhdGVkVHlwZS5oIgogCi0jaW5jbHVkZSAiQXJn
dW1lbnRzLmgiCisjaW5jbHVkZSAiRGlyZWN0QXJndW1lbnRzLmgiCiAjaW5jbHVkZSAiSlNBcnJh
eS5oIgogI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisj
aW5jbHVkZSAiU2NvcGVkQXJndW1lbnRzLmgiCiAjaW5jbHVkZSAiU3RyaW5nT2JqZWN0LmgiCiAj
aW5jbHVkZSAiVmFsdWVQcm9maWxlLmgiCiAjaW5jbHVkZSA8d3RmL0JvdW5kc0NoZWNrZWRQb2lu
dGVyLmg+CkBAIC0xMjcsOCArMTI4LDEzIEBAIHZvaWQgZHVtcFNwZWN1bGF0aW9uKFByaW50U3Ry
ZWFtJiBvdXQsIFMKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBpc1RvcCA9IGZh
bHNlOwogICAgIAotICAgICAgICAgICAgaWYgKHZhbHVlICYgU3BlY0FyZ3VtZW50cykKLSAgICAg
ICAgICAgICAgICBteU91dC5wcmludCgiQXJndW1lbnRzIik7CisgICAgICAgICAgICBpZiAodmFs
dWUgJiBTcGVjRGlyZWN0QXJndW1lbnRzKQorICAgICAgICAgICAgICAgIG15T3V0LnByaW50KCJE
aXJlY3Rhcmd1bWVudHMiKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBpc1Rv
cCA9IGZhbHNlOworICAgIAorICAgICAgICAgICAgaWYgKHZhbHVlICYgU3BlY1Njb3BlZEFyZ3Vt
ZW50cykKKyAgICAgICAgICAgICAgICBteU91dC5wcmludCgiU2NvcGVkYXJndW1lbnRzIik7CiAg
ICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgaXNUb3AgPSBmYWxzZTsKICAgICAKQEAg
LTIzMiw4ICsyMzgsMTAgQEAgc3RhdGljIGNvbnN0IGNoYXIqIHNwZWN1bGF0aW9uVG9BYmJyZXZp
YQogICAgICAgICByZXR1cm4gIjxGbG9hdDMyYXJyYXk+IjsKICAgICBpZiAoaXNGbG9hdDY0QXJy
YXlTcGVjdWxhdGlvbihwcmVkaWN0aW9uKSkKICAgICAgICAgcmV0dXJuICI8RmxvYXQ2NGFycmF5
PiI7Ci0gICAgaWYgKGlzQXJndW1lbnRzU3BlY3VsYXRpb24ocHJlZGljdGlvbikpCi0gICAgICAg
IHJldHVybiAiPEFyZ3VtZW50cz4iOworICAgIGlmIChpc0RpcmVjdEFyZ3VtZW50c1NwZWN1bGF0
aW9uKHByZWRpY3Rpb24pKQorICAgICAgICByZXR1cm4gIjxEaXJlY3RBcmd1bWVudHM+IjsKKyAg
ICBpZiAoaXNTY29wZWRBcmd1bWVudHNTcGVjdWxhdGlvbihwcmVkaWN0aW9uKSkKKyAgICAgICAg
cmV0dXJuICI8U2NvcGVkQXJndW1lbnRzPiI7CiAgICAgaWYgKGlzU3RyaW5nT2JqZWN0U3BlY3Vs
YXRpb24ocHJlZGljdGlvbikpCiAgICAgICAgIHJldHVybiAiPFN0cmluZ09iamVjdD4iOwogICAg
IGlmIChpc1N0cmluZ09yU3RyaW5nT2JqZWN0U3BlY3VsYXRpb24ocHJlZGljdGlvbikpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuaAko
cmV2aXNpb24gMTgwODc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1
bGF0ZWRUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTUyLDggKzUyLDkgQEAgc3RhdGljIGNvbnN0
IFNwZWN1bGF0ZWRUeXBlIFNwZWNVaW50MzJBcgogc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBl
IFNwZWNGbG9hdDMyQXJyYXkgICAgICAgPSAweDAwMDAwNDAwOyAvLyBJdCdzIGRlZmluaXRlbHkg
YW4gVWludDE2QXJyYXkgb3Igb25lIG9mIGl0cyBzdWJjbGFzc2VzLgogc3RhdGljIGNvbnN0IFNw
ZWN1bGF0ZWRUeXBlIFNwZWNGbG9hdDY0QXJyYXkgICAgICAgPSAweDAwMDAwODAwOyAvLyBJdCdz
IGRlZmluaXRlbHkgYW4gVWludDE2QXJyYXkgb3Igb25lIG9mIGl0cyBzdWJjbGFzc2VzLgogc3Rh
dGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNUeXBlZEFycmF5VmlldyAgICAgPSBTcGVjSW50
OEFycmF5IHwgU3BlY0ludDE2QXJyYXkgfCBTcGVjSW50MzJBcnJheSB8IFNwZWNVaW50OEFycmF5
IHwgU3BlY1VpbnQ4Q2xhbXBlZEFycmF5IHwgU3BlY1VpbnQxNkFycmF5IHwgU3BlY1VpbnQzMkFy
cmF5IHwgU3BlY0Zsb2F0MzJBcnJheSB8IFNwZWNGbG9hdDY0QXJyYXk7Ci1zdGF0aWMgY29uc3Qg
U3BlY3VsYXRlZFR5cGUgU3BlY0FyZ3VtZW50cyAgICAgICAgICA9IDB4MDAwMDEwMDA7IC8vIEl0
J3MgZGVmaW5pdGVseSBhbiBBcmd1bWVudHMgb2JqZWN0Lgotc3RhdGljIGNvbnN0IFNwZWN1bGF0
ZWRUeXBlIFNwZWNTdHJpbmdPYmplY3QgICAgICAgPSAweDAwMDAyMDAwOyAvLyBJdCdzIGRlZmlu
aXRlbHkgYSBTdHJpbmdPYmplY3QuCitzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0Rp
cmVjdEFyZ3VtZW50cyAgICA9IDB4MDAwMDEwMDA7IC8vIEl0J3MgZGVmaW5pdGVseSBhIERpcmVj
dEFyZ3VtZW50cyBvYmplY3QuCitzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY1Njb3Bl
ZEFyZ3VtZW50cyAgICA9IDB4MDAwMDIwMDA7IC8vIEl0J3MgZGVmaW5pdGVseSBhIFNjb3BlZEFy
Z3VtZW50cyBvYmplY3QuCitzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY1N0cmluZ09i
amVjdCAgICAgICA9IDB4MDAwMDQwMDA7IC8vIEl0J3MgZGVmaW5pdGVseSBhIFN0cmluZ09iamVj
dC4KIHN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjT2JqZWN0T3RoZXIgICAgICAgID0g
MHgwMDAwODAwMDsgLy8gSXQncyBkZWZpbml0ZWx5IGFuIG9iamVjdCBidXQgbm90IEpTRmluYWxP
YmplY3QsIEpTQXJyYXksIG9yIEpTRnVuY3Rpb24uCiBzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5
cGUgU3BlY09iamVjdCAgICAgICAgICAgICA9IDB4MDAwMGZmZmY7IC8vIEJpdG1hc2sgdXNlZCBm
b3IgdGVzdGluZyBmb3IgYW55IGtpbmQgb2Ygb2JqZWN0IHByZWRpY3Rpb24uCiBzdGF0aWMgY29u
c3QgU3BlY3VsYXRlZFR5cGUgU3BlY1N0cmluZ0lkZW50ICAgICAgICA9IDB4MDAwMTAwMDA7IC8v
IEl0J3MgZGVmaW5pdGVseSBhIEpTU3RyaW5nLCBhbmQgaXQncyBhbiBpZGVudGlmaWVyLgpAQCAt
MTkzLDkgKzE5NCwxNCBAQCBpbmxpbmUgYm9vbCBpc0Zsb2F0NjRBcnJheVNwZWN1bGF0aW9uKFNw
CiAgICAgcmV0dXJuIHZhbHVlID09IFNwZWNGbG9hdDY0QXJyYXk7CiB9CiAKLWlubGluZSBib29s
IGlzQXJndW1lbnRzU3BlY3VsYXRpb24oU3BlY3VsYXRlZFR5cGUgdmFsdWUpCitpbmxpbmUgYm9v
bCBpc0RpcmVjdEFyZ3VtZW50c1NwZWN1bGF0aW9uKFNwZWN1bGF0ZWRUeXBlIHZhbHVlKQogewot
ICAgIHJldHVybiAhIXZhbHVlICYmICh2YWx1ZSAmIFNwZWNBcmd1bWVudHMpID09IHZhbHVlOwor
ICAgIHJldHVybiB2YWx1ZSA9PSBTcGVjRGlyZWN0QXJndW1lbnRzOworfQorCitpbmxpbmUgYm9v
bCBpc1Njb3BlZEFyZ3VtZW50c1NwZWN1bGF0aW9uKFNwZWN1bGF0ZWRUeXBlIHZhbHVlKQorewor
ICAgIHJldHVybiB2YWx1ZSA9PSBTcGVjU2NvcGVkQXJndW1lbnRzOwogfQogCiBpbmxpbmUgYm9v
bCBpc0FjdGlvbmFibGVJbnRNdXRhYmxlQXJyYXlTcGVjdWxhdGlvbihTcGVjdWxhdGVkVHlwZSB2
YWx1ZSkKQEAgLTIyNCwxMyArMjMwLDE0IEBAIGlubGluZSBib29sIGlzQWN0aW9uYWJsZVR5cGVk
TXV0YWJsZUFycmEKIGlubGluZSBib29sIGlzQWN0aW9uYWJsZU11dGFibGVBcnJheVNwZWN1bGF0
aW9uKFNwZWN1bGF0ZWRUeXBlIHZhbHVlKQogewogICAgIHJldHVybiBpc0FycmF5U3BlY3VsYXRp
b24odmFsdWUpCi0gICAgICAgIHx8IGlzQXJndW1lbnRzU3BlY3VsYXRpb24odmFsdWUpCiAgICAg
ICAgIHx8IGlzQWN0aW9uYWJsZVR5cGVkTXV0YWJsZUFycmF5U3BlY3VsYXRpb24odmFsdWUpOwog
fQogCiBpbmxpbmUgYm9vbCBpc0FjdGlvbmFibGVBcnJheVNwZWN1bGF0aW9uKFNwZWN1bGF0ZWRU
eXBlIHZhbHVlKQogewogICAgIHJldHVybiBpc1N0cmluZ1NwZWN1bGF0aW9uKHZhbHVlKQorICAg
ICAgICB8fCBpc0RpcmVjdEFyZ3VtZW50c1NwZWN1bGF0aW9uKHZhbHVlKQorICAgICAgICB8fCBp
c1Njb3BlZEFyZ3VtZW50c1NwZWN1bGF0aW9uKHZhbHVlKQogICAgICAgICB8fCBpc0FjdGlvbmFi
bGVNdXRhYmxlQXJyYXlTcGVjdWxhdGlvbih2YWx1ZSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3Iu
Y3BwCShyZXZpc2lvbiAxODA4NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBp
bGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMsNiArNjMsMjAg
QEAgUGFyc2VyRXJyb3IgQnl0ZWNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlKAogICAgIFNhbXBsaW5n
UmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJCeXRlY29kZSBHZW5lcmF0aW9uIik7CiAgICAgCiAgICAg
bV9jb2RlQmxvY2stPnNldFRoaXNSZWdpc3RlcihtX3RoaXNSZWdpc3Rlci52aXJ0dWFsUmVnaXN0
ZXIoKSk7CisgICAgCisgICAgLy8gSWYgd2UgaGF2ZSBkZWNsYXJlZCBhIHZhcmlhYmxlIG5hbWVk
ICJhcmd1bWVudHMiIGFuZCB3ZSBhcmUgdXNpbmcgYXJndW1lbnRzIHRoZW4gd2Ugc2hvdWxkCisg
ICAgLy8gcGVyZm9ybSB0aGF0IGFzc2lnbm1lbnQgbm93LgorICAgIGlmIChtX25lZWRUb0luaXRp
YWxpemVBcmd1bWVudHMpCisgICAgICAgIGluaXRpYWxpemVWYXJpYWJsZSh2YXJpYWJsZShwcm9w
ZXJ0eU5hbWVzKCkuYXJndW1lbnRzKSwgbV9hcmd1bWVudHNSZWdpc3Rlcik7CisgICAgCisgICAg
eworICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gdGVtcCA9IG5ld1RlbXBvcmFyeSgpOworICAg
ICAgICBmb3IgKEZ1bmN0aW9uQm9keU5vZGUqIGZ1bmN0aW9uQm9keSA6IG1fZnVuY3Rpb25zVG9J
bml0aWFsaXplKSB7CisgICAgICAgICAgICBlbWl0TmV3RnVuY3Rpb24odGVtcC5nZXQoKSwgZnVu
Y3Rpb25Cb2R5KTsKKyAgICAgICAgICAgIGluaXRpYWxpemVWYXJpYWJsZSh2YXJpYWJsZShmdW5j
dGlvbkJvZHktPmlkZW50KCkpLCB0ZW1wLmdldCgpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAK
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZGVjb25zdHJ1Y3RlZFBhcmFtZXRlcnMuc2l6
ZSgpOyBpKyspIHsKICAgICAgICAgYXV0byYgZW50cnkgPSBtX2RlY29uc3RydWN0ZWRQYXJhbWV0
ZXJzW2ldOwogICAgICAgICBlbnRyeS5zZWNvbmQtPmJpbmRWYWx1ZSgqdGhpcywgZW50cnkuZmly
c3QuZ2V0KCkpOwpAQCAtMTE2LDM4ICsxMzAsMTMgQEAgUGFyc2VyRXJyb3IgQnl0ZWNvZGVHZW5l
cmF0b3I6OmdlbmVyYXRlKAogICAgIG1fY29kZUJsb2NrLT5zaHJpbmtUb0ZpdCgpOwogCiAgICAg
aWYgKG1fY29kZUJsb2NrLT5zeW1ib2xUYWJsZSgpICYmICFtX2NvZGVCbG9jay0+dm0oKS0+dHlw
ZVByb2ZpbGVyKCkpCi0gICAgICAgIG1fY29kZUJsb2NrLT5zZXRTeW1ib2xUYWJsZShtX2NvZGVC
bG9jay0+c3ltYm9sVGFibGUoKS0+Y2xvbmVDYXB0dXJlZE5hbWVzKCptX2NvZGVCbG9jay0+dm0o
KSkpOworICAgICAgICBtX2NvZGVCbG9jay0+c2V0U3ltYm9sVGFibGUobV9jb2RlQmxvY2stPnN5
bWJvbFRhYmxlKCktPmNsb25lSWdub3JpbmdTdGFjaygqbV9jb2RlQmxvY2stPnZtKCkpKTsKIAog
ICAgIGlmIChtX2V4cHJlc3Npb25Ub29EZWVwKQogICAgICAgICByZXR1cm4gUGFyc2VyRXJyb3Io
UGFyc2VyRXJyb3I6Ok91dE9mTWVtb3J5KTsKICAgICByZXR1cm4gUGFyc2VyRXJyb3IoUGFyc2Vy
RXJyb3I6OkVycm9yTm9uZSk7CiB9CiAKLVJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjph
ZGRWYXIoCi0gICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIENvbnN0YW50TW9kZSBjb25zdGFu
dE1vZGUsIFdhdGNoTW9kZSB3YXRjaE1vZGUpCi17Ci0gICAgQVNTRVJUKHN0YXRpY19jYXN0PHNp
emVfdD4obV9jb2RlQmxvY2stPm1fbnVtVmFycykgPT0gbV9jYWxsZWVSZWdpc3RlcnMuc2l6ZSgp
KTsKLSAgICAKLSAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihzeW1ib2xUYWJsZSgpLm1f
bG9jayk7Ci0gICAgaW50IGluZGV4ID0gdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwobV9jYWxsZWVS
ZWdpc3RlcnMuc2l6ZSgpKS5vZmZzZXQoKTsKLSAgICBTeW1ib2xUYWJsZUVudHJ5IG5ld0VudHJ5
KGluZGV4LCBjb25zdGFudE1vZGUgPT0gSXNDb25zdGFudCA/IFJlYWRPbmx5IDogMCk7Ci0gICAg
U3ltYm9sVGFibGU6Ok1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IHN5bWJvbFRhYmxlKCkuYWRkKGxv
Y2tlciwgaWRlbnQuaW1wbCgpLCBuZXdFbnRyeSk7Ci0KLSAgICBpZiAoIXJlc3VsdC5pc05ld0Vu
dHJ5KQotICAgICAgICByZXR1cm4gJnJlZ2lzdGVyRm9yKHJlc3VsdC5pdGVyYXRvci0+dmFsdWUu
Z2V0SW5kZXgoKSk7Ci0gICAgCi0gICAgaWYgKHdhdGNoTW9kZSA9PSBJc1dhdGNoYWJsZSkgewot
ICAgICAgICB3aGlsZSAobV93YXRjaGFibGVWYXJpYWJsZXMuc2l6ZSgpIDwgc3RhdGljX2Nhc3Q8
c2l6ZV90PihtX2NvZGVCbG9jay0+bV9udW1WYXJzKSkKLSAgICAgICAgICAgIG1fd2F0Y2hhYmxl
VmFyaWFibGVzLmFwcGVuZChJZGVudGlmaWVyKCkpOwotICAgICAgICBtX3dhdGNoYWJsZVZhcmlh
Ymxlcy5hcHBlbmQoaWRlbnQpOwotICAgIH0KLSAgICAKLSAgICBSZWdpc3RlcklEKiByZWdJRCA9
IGFkZFZhcigpOwotICAgIEFTU0VSVCh3YXRjaE1vZGUgPT0gTm90V2F0Y2hhYmxlIHx8IHN0YXRp
Y19jYXN0PHNpemVfdD4obV9jb2RlQmxvY2stPm1fbnVtVmFycykgPT0gbV93YXRjaGFibGVWYXJp
YWJsZXMuc2l6ZSgpKTsKLSAgICAKLSAgICByZXR1cm4gcmVnSUQ7Ci19Ci0KIEJ5dGVjb2RlR2Vu
ZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihWTSYgdm0sIFByb2dyYW1Ob2RlKiBwcm9ncmFtTm9k
ZSwgVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrKiBjb2RlQmxvY2ssIERlYnVnZ2VyTW9kZSBkZWJ1
Z2dlck1vZGUsIFByb2ZpbGVyTW9kZSBwcm9maWxlck1vZGUpCiAgICAgOiBtX3Nob3VsZEVtaXRE
ZWJ1Z0hvb2tzKE9wdGlvbnM6OmZvcmNlRGVidWdnZXJCeXRlY29kZUdlbmVyYXRpb24oKSB8fCBk
ZWJ1Z2dlck1vZGUgPT0gRGVidWdnZXJPbikKICAgICAsIG1fc2hvdWxkRW1pdFByb2ZpbGVIb29r
cyhPcHRpb25zOjpmb3JjZVByb2ZpbGVyQnl0ZWNvZGVHZW5lcmF0aW9uKCkgfHwgcHJvZmlsZXJN
b2RlID09IFByb2ZpbGVyT24pCkBAIC0xODksNyArMTc4LDcgQEAgQnl0ZWNvZGVHZW5lcmF0b3I6
OkJ5dGVjb2RlR2VuZXJhdG9yKFZNJgogewogICAgIGlmIChtX2lzQnVpbHRpbkZ1bmN0aW9uKQog
ICAgICAgICBtX3Nob3VsZEVtaXREZWJ1Z0hvb2tzID0gZmFsc2U7Ci0KKyAgICAKICAgICBtX3N5
bWJvbFRhYmxlLT5zZXRVc2VzTm9uU3RyaWN0RXZhbChjb2RlQmxvY2stPnVzZXNFdmFsKCkgJiYg
IWNvZGVCbG9jay0+aXNTdHJpY3RNb2RlKCkpOwogICAgIFZlY3RvcjxJZGVudGlmaWVyPiBib3Vu
ZFBhcmFtZXRlclByb3BlcnRpZXM7CiAgICAgRnVuY3Rpb25QYXJhbWV0ZXJzJiBwYXJhbWV0ZXJz
ID0gKmZ1bmN0aW9uTm9kZS0+cGFyYW1ldGVycygpOwpAQCAtMjAyLDEwICsxOTEsMjAgQEAgQnl0
ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFZNJgogICAgIH0KICAgICBtX3N5bWJv
bFRhYmxlLT5zZXRQYXJhbWV0ZXJDb3VudEluY2x1ZGluZ1RoaXMoZnVuY3Rpb25Ob2RlLT5wYXJh
bWV0ZXJzKCktPnNpemUoKSArIDEpOwogCisgICAgYm9vbCBzaG91bGRDYXB0dXJlQWxsVGhlVGhp
bmdzID0gbV9zaG91bGRFbWl0RGVidWdIb29rcyB8fCBjb2RlQmxvY2stPnVzZXNFdmFsKCk7Cisg
ICAgYXV0byBjYXB0dXJlcyA9IFsmXSAoU3RyaW5nSW1wbCogdWlkKSAtPiBib29sIHsKKyAgICAg
ICAgcmV0dXJuIHNob3VsZENhcHR1cmVBbGxUaGVUaGluZ3MgfHwgZnVuY3Rpb25Ob2RlLT5jYXB0
dXJlcyh1aWQpOworICAgIH07CisgICAgYXV0byB2YXJLaW5kID0gWyZdIChTdHJpbmdJbXBsKiB1
aWQpIC0+IFZhcktpbmQgeworICAgICAgICByZXR1cm4gY2FwdHVyZXModWlkKSA/IFNjb3BlVmFy
S2luZCA6IFN0YWNrVmFyS2luZDsKKyAgICB9CisKICAgICBlbWl0T3Bjb2RlKG9wX2VudGVyKTsK
IAogICAgIGFsbG9jYXRlQW5kRW1pdFNjb3BlKCk7CiAgICAgCisgICAgbV9jYWxsZWVSZWdpc3Rl
ci5zZXRJbmRleChKU1N0YWNrOjpDYWxsZWUpOworICAgIAogICAgIGlmIChmdW5jdGlvbk5hbWVJ
c0luU2NvcGUoZnVuY3Rpb25Ob2RlLT5pZGVudCgpLCBmdW5jdGlvbk5vZGUtPmZ1bmN0aW9uTW9k
ZSgpKQogICAgICAgICAmJiBmdW5jdGlvbk5hbWVTY29wZUlzRHluYW1pYyhjb2RlQmxvY2stPnVz
ZXNFdmFsKCksIGNvZGVCbG9jay0+aXNTdHJpY3RNb2RlKCkpKSB7CiAgICAgICAgIC8vIFdoZW4g
d2UgZG8gdGhpcywgd2Ugc2hvdWxkIG1ha2Ugb3VyIGxvY2FsIHNjb3BlIHN0YWNrIGtub3cgYWJv
dXQgdGhlIGZ1bmN0aW9uIG5hbWUgc3ltYm9sCkBAIC0yMTQsOSArMjEzLDcgQEAgQnl0ZWNvZGVH
ZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFZNJgogICAgICAgICAvLyBBbHNvLCB3ZSBjb3Vs
ZCBjcmVhdGUgdGhlIHNjb3BlIG9uY2UgcGVyIEpTRnVuY3Rpb24gaW5zdGFuY2UgdGhhdCBuZWVk
cyBpdC4gVGhhdCB3b3VsZG4ndAogICAgICAgICAvLyBiZSBhbnkgbW9yZSBjb3JyZWN0LCBidXQg
aXQgd291bGQgYmUgbW9yZSBwZXJmb3JtYW50LgogICAgICAgICAvLyBGSVhNRTogaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MTg4NwotICAgICAgICBSZWdpc3RlcklE
IGNhbGxlZVJlZ2lzdGVyOwotICAgICAgICBjYWxsZWVSZWdpc3Rlci5zZXRJbmRleChKU1N0YWNr
OjpDYWxsZWUpOwotICAgICAgICBlbWl0UHVzaEZ1bmN0aW9uTmFtZVNjb3BlKG1fc2NvcGVSZWdp
c3RlciwgZnVuY3Rpb25Ob2RlLT5pZGVudCgpLCAmY2FsbGVlUmVnaXN0ZXIsIFJlYWRPbmx5IHwg
RG9udERlbGV0ZSk7CisgICAgICAgIGVtaXRQdXNoRnVuY3Rpb25OYW1lU2NvcGUobV9zY29wZVJl
Z2lzdGVyLCBmdW5jdGlvbk5vZGUtPmlkZW50KCksICZtX2NhbGxlZVJlZ2lzdGVyLCBSZWFkT25s
eSB8IERvbnREZWxldGUpOwogICAgIH0KIAogICAgIGlmIChtX2NvZGVCbG9jay0+bmVlZHNGdWxs
U2NvcGVDaGFpbigpIHx8IG1fc2hvdWxkRW1pdERlYnVnSG9va3MpIHsKQEAgLTIyNiwxNzkgKzIy
MywyMjUgQEAgQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFZNJgogICAgICAg
ICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQobV9sZXhpY2FsRW52aXJvbm1lbnRSZWdpc3Rlci0+aW5k
ZXgoKSk7CiAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChzY29wZVJlZ2lzdGVyKCktPmlu
ZGV4KCkpOwogICAgIH0KLSAgICBSZWdpc3RlcklEKiBsb2NhbEFyZ3VtZW50c1JlZ2lzdGVyID0g
bnVsbHB0cjsKLSAgICBSZWdpc3RlcklEKiBzY3JhdGNoID0gYWRkVmFyKCk7Ci0gICAgbV9zeW1i
b2xUYWJsZS0+c2V0Q2FwdHVyZVN0YXJ0KHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKG1fY29kZUJs
b2NrLT5tX251bVZhcnMpLm9mZnNldCgpKTsKLQotICAgIGlmIChmdW5jdGlvbk5vZGUtPnVzZXNB
cmd1bWVudHMoKSB8fCBjb2RlQmxvY2stPnVzZXNFdmFsKCkpIHsgLy8gTWF5IHJlaWZ5IGFyZ3Vt
ZW50cyBvYmplY3QuCi0gICAgICAgIFJlZ2lzdGVySUQqIHVubW9kaWZpZWRBcmd1bWVudHNSZWdp
c3RlciA9IGFkZFZhcigpOyAvLyBBbm9ueW1vdXMsIHNvIGl0IGNhbid0IGJlIG1vZGlmaWVkIGJ5
IHVzZXIgY29kZS4KLSAgICAgICAgUmVnaXN0ZXJJRCogYXJndW1lbnRzUmVnaXN0ZXIgPSBhZGRW
YXIocHJvcGVydHlOYW1lcygpLmFyZ3VtZW50cywgSXNWYXJpYWJsZSwgTm90V2F0Y2hhYmxlKTsg
Ly8gQ2FuIGJlIGNoYW5nZWQgYnkgYXNzaWduaW5nIHRvICdhcmd1bWVudHMnLgotCi0gICAgICAg
IGxvY2FsQXJndW1lbnRzUmVnaXN0ZXIgPSBhcmd1bWVudHNSZWdpc3RlcjsKLQotICAgICAgICAv
LyBXZSBjYW4gc2F2ZSBhIGxpdHRsZSBzcGFjZSBieSBoYXJkLWNvZGluZyB0aGUga25vd2xlZGdl
IHRoYXQgdGhlIHR3bwotICAgICAgICAvLyAnYXJndW1lbnRzJyB2YWx1ZXMgYXJlIHN0b3JlZCBp
biBjb25zZWN1dGl2ZSByZWdpc3RlcnMsIGFuZCBzdG9yaW5nCi0gICAgICAgIC8vIG9ubHkgdGhl
IGluZGV4IG9mIHRoZSBhc3NpZ25hYmxlIG9uZS4KLSAgICAgICAgY29kZUJsb2NrLT5zZXRBcmd1
bWVudHNSZWdpc3Rlcihhcmd1bWVudHNSZWdpc3Rlci0+dmlydHVhbFJlZ2lzdGVyKCkpOwotICAg
ICAgICBBU1NFUlRfVU5VU0VEKHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3RlciwgdW5tb2RpZmll
ZEFyZ3VtZW50c1JlZ2lzdGVyLT52aXJ0dWFsUmVnaXN0ZXIoKSA9PSBKU0M6OnVubW9kaWZpZWRB
cmd1bWVudHNSZWdpc3Rlcihjb2RlQmxvY2stPmFyZ3VtZW50c1JlZ2lzdGVyKCkpKTsKLQotICAg
ICAgICBlbWl0SW5pdExhenlSZWdpc3Rlcihhcmd1bWVudHNSZWdpc3Rlcik7Ci0gICAgICAgIGVt
aXRJbml0TGF6eVJlZ2lzdGVyKHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3Rlcik7Ci0gICAgICAg
IAotICAgICAgICBpZiAoc2hvdWxkQ3JlYXRlQXJndW1lbnRzRWFnZXJseSgpIHx8IHNob3VsZFRl
YXJPZmZBcmd1bWVudHNFYWdlcmx5KCkpIHsKLSAgICAgICAgICAgIGVtaXRPcGNvZGUob3BfY3Jl
YXRlX2FyZ3VtZW50cyk7Ci0gICAgICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYXJndW1l
bnRzUmVnaXN0ZXItPmluZGV4KCkpOwotICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5k
KG1fY29kZUJsb2NrLT5hY3RpdmF0aW9uUmVnaXN0ZXIoKS5vZmZzZXQoKSk7Ci0KLSAgICAgICAg
ICAgIGlmIChtX2NvZGVCbG9jay0+aGFzQWN0aXZhdGlvblJlZ2lzdGVyKCkpIHsKLSAgICAgICAg
ICAgICAgICBSZWdpc3RlcklEKiBhcmd1bWVudHNSZWdpc3RlciA9ICZyZWdpc3RlckZvcihtX2Nv
ZGVCbG9jay0+YXJndW1lbnRzUmVnaXN0ZXIoKS5vZmZzZXQoKSk7Ci0gICAgICAgICAgICAgICAg
aW5pdGlhbGl6ZUNhcHR1cmVkVmFyaWFibGUoYXJndW1lbnRzUmVnaXN0ZXIsIHByb3BlcnR5TmFt
ZXMoKS5hcmd1bWVudHMsIGFyZ3VtZW50c1JlZ2lzdGVyKTsKLSAgICAgICAgICAgICAgICBSZWdp
c3RlcklEKiB1bmNoZWNrZWRBcmd1bWVudHNSZWdpc3RlciA9ICZyZWdpc3RlckZvcihKU0M6OnVu
bW9kaWZpZWRBcmd1bWVudHNSZWdpc3RlcihtX2NvZGVCbG9jay0+YXJndW1lbnRzUmVnaXN0ZXIo
KSkub2Zmc2V0KCkpOwotICAgICAgICAgICAgICAgIGluaXRpYWxpemVDYXB0dXJlZFZhcmlhYmxl
KHVuY2hlY2tlZEFyZ3VtZW50c1JlZ2lzdGVyLCBwcm9wZXJ0eU5hbWVzKCkuYXJndW1lbnRzLCB1
bmNoZWNrZWRBcmd1bWVudHNSZWdpc3Rlcik7Ci0gICAgICAgICAgICAgICAgaWYgKGZ1bmN0aW9u
Tm9kZS0+bW9kaWZpZXNBcmd1bWVudHMoKSkgewotICAgICAgICAgICAgICAgICAgICBlbWl0T3Bj
b2RlKG9wX21vdik7Ci0gICAgICAgICAgICAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChh
cmd1bWVudHNSZWdpc3Rlci0+aW5kZXgoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGluc3RydWN0
aW9ucygpLmFwcGVuZChhZGRDb25zdGFudFZhbHVlKGpzVW5kZWZpbmVkKCkpLT5pbmRleCgpKTsK
LSAgICAgICAgICAgICAgICAgICAgZW1pdE9wY29kZShvcF9tb3YpOwotICAgICAgICAgICAgICAg
ICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQodW5jaGVja2VkQXJndW1lbnRzUmVnaXN0ZXItPmlu
ZGV4KCkpOwotICAgICAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYWRkQ29u
c3RhbnRWYWx1ZShqc1VuZGVmaW5lZCgpKS0+aW5kZXgoKSk7Ci0gICAgICAgICAgICAgICAgICAg
IGxvY2FsQXJndW1lbnRzUmVnaXN0ZXIgPSBudWxscHRyOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQorICAgIAorICAgIC8vIE1ha2Ugc3VyZSB0aGUgY29kZSBi
bG9jayBrbm93cyBhYm91dCBhbGwgb2Ygb3VyIHBhcmFtZXRlcnMsIGFuZCBtYWtlIHN1cmUgdGhh
dCBwYXJhbWV0ZXJzCisgICAgLy8gbmVlZGluZyBkZWNvbnN0cnVjdGlvbiBhcmUgbm90ZWQuCisg
ICAgbV9wYXJhbWV0ZXJzLmdyb3cocGFyYW1ldGVycy5zaXplKCkgKyAxKTsgLy8gcmVzZXJ2ZSBz
cGFjZSBmb3IgInRoaXMiCisgICAgaW5pdGlhbGl6ZU5leHRQYXJhbWV0ZXIoKTsgLy8gdGhpcwor
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwYXJhbWV0ZXJzLnNpemUoKTsgKytpKSB7Cisg
ICAgICAgIGF1dG8gcGF0dGVybiA9IHBhcmFtZXRlcnMuYXQoaSk7CisgICAgICAgIFJlZ2lzdGVy
SUQqIHJlZyA9IGluaXRpYWxpemVOZXh0UGFyYW1ldGVyKCk7CisgICAgICAgIGlmICghcGF0dGVy
bi0+aXNCaW5kaW5nTm9kZSgpKQorICAgICAgICAgICAgbV9kZWNvbnN0cnVjdGVkUGFyYW1ldGVy
cy5hcHBlbmQoc3RkOjptYWtlX3BhaXIocmVnLCBwYXR0ZXJuKSk7CiAgICAgfQotCi0gICAgYm9v
bCBzaG91bGRDYXB0dXJlQWxsVGhlVGhpbmdzID0gbV9zaG91bGRFbWl0RGVidWdIb29rcyB8fCBj
b2RlQmxvY2stPnVzZXNFdmFsKCk7Ci0KKyAgICAKKyAgICAvLyBGaWd1cmUgb3V0IHNvbWUgaW50
ZXJlc3RpbmcgZmFjdHMgYWJvdXQgb3VyIGFyZ3VtZW50cy4KICAgICBib29sIGNhcHR1cmVzQW55
QXJndW1lbnRCeU5hbWUgPSBmYWxzZTsKLSAgICBWZWN0b3I8UmVnaXN0ZXJJRCosIDAsIFVuc2Fm
ZVZlY3Rvck92ZXJmbG93PiBjYXB0dXJlZEFyZ3VtZW50czsKLSAgICBpZiAoZnVuY3Rpb25Ob2Rl
LT5oYXNDYXB0dXJlZFZhcmlhYmxlcygpIHx8IHNob3VsZENhcHR1cmVBbGxUaGVUaGluZ3MpIHsK
KyAgICBpZiAoZnVuY3Rpb25Ob2RlLT5oYXNDYXB0dXJlZFZhcmlhYmxlcygpKSB7CiAgICAgICAg
IEZ1bmN0aW9uUGFyYW1ldGVycyYgcGFyYW1ldGVycyA9ICpmdW5jdGlvbk5vZGUtPnBhcmFtZXRl
cnMoKTsKLSAgICAgICAgY2FwdHVyZWRBcmd1bWVudHMucmVzaXplKHBhcmFtZXRlcnMuc2l6ZSgp
KTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwYXJhbWV0ZXJzLnNpemUoKTsgKytp
KSB7Ci0gICAgICAgICAgICBjYXB0dXJlZEFyZ3VtZW50c1tpXSA9IDA7CiAgICAgICAgICAgICBh
dXRvIHBhdHRlcm4gPSBwYXJhbWV0ZXJzLmF0KGkpOwogICAgICAgICAgICAgaWYgKCFwYXR0ZXJu
LT5pc0JpbmRpbmdOb2RlKCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAg
ICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IHN0YXRpY19jYXN0PGNvbnN0IEJpbmRpbmdOb2Rl
Kj4ocGF0dGVybiktPmJvdW5kUHJvcGVydHkoKTsKLSAgICAgICAgICAgIGlmICghZnVuY3Rpb25O
b2RlLT5jYXB0dXJlcyhpZGVudCkgJiYgIXNob3VsZENhcHR1cmVBbGxUaGVUaGluZ3MpCi0gICAg
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBjYXB0dXJlc0FueUFyZ3VtZW50QnlO
YW1lID0gdHJ1ZTsKLSAgICAgICAgICAgIGNhcHR1cmVkQXJndW1lbnRzW2ldID0gYWRkVmFyKGlk
ZW50LCBJc1ZhcmlhYmxlLCBJc1dhdGNoYWJsZSk7CisgICAgICAgICAgICBjYXB0dXJlc0FueUFy
Z3VtZW50QnlOYW1lIHw9IGNhcHR1cmVzKGlkZW50LmltcGwoKSk7CiAgICAgICAgIH0KICAgICB9
CiAKLSAgICBpZiAoY2FwdHVyZXNBbnlBcmd1bWVudEJ5TmFtZSAmJiAhc2hvdWxkVGVhck9mZkFy
Z3VtZW50c0VhZ2VybHkoKSkgewotICAgICAgICBzaXplX3QgcGFyYW1ldGVyQ291bnQgPSBtX3N5
bWJvbFRhYmxlLT5wYXJhbWV0ZXJDb3VudCgpOwotICAgICAgICBhdXRvIHNsb3dBcmd1bWVudHMg
PSBzdGQ6Om1ha2VfdW5pcXVlPFNsb3dBcmd1bWVudFtdPihwYXJhbWV0ZXJDb3VudCk7Ci0gICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcGFyYW1ldGVyQ291bnQ7ICsraSkgewotICAgICAg
ICAgICAgaWYgKCFjYXB0dXJlZEFyZ3VtZW50c1tpXSkgewotICAgICAgICAgICAgICAgIEFTU0VS
VChzbG93QXJndW1lbnRzW2ldLnN0YXR1cyA9PSBTbG93QXJndW1lbnQ6Ok5vcm1hbCk7Ci0gICAg
ICAgICAgICAgICAgc2xvd0FyZ3VtZW50c1tpXS5pbmRleCA9IENhbGxGcmFtZTo6YXJndW1lbnRP
ZmZzZXQoaSk7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBzbG93QXJndW1lbnRzW2ldLnN0YXR1cyA9IFNsb3dBcmd1bWVudDo6Q2FwdHVyZWQ7
Ci0gICAgICAgICAgICBzbG93QXJndW1lbnRzW2ldLmluZGV4ID0gY2FwdHVyZWRBcmd1bWVudHNb
aV0tPmluZGV4KCk7Ci0gICAgICAgIH0KLSAgICAgICAgbV9zeW1ib2xUYWJsZS0+c2V0U2xvd0Fy
Z3VtZW50cyhXVEY6Om1vdmUoc2xvd0FyZ3VtZW50cykpOwotICAgIH0KLQotICAgIFJlZ2lzdGVy
SUQqIGNhbGxlZVJlZ2lzdGVyID0gcmVzb2x2ZUNhbGxlZShmdW5jdGlvbk5vZGUpOyAvLyBNYXkg
cHVzaCB0byB0aGUgc2NvcGUgY2hhaW4gYW5kL29yIGFkZCBhIGNhcHR1cmVkIHZhci4KLQotICAg
IGNvbnN0IERlY2xhcmF0aW9uU3RhY2tzOjpGdW5jdGlvblN0YWNrJiBmdW5jdGlvblN0YWNrID0g
ZnVuY3Rpb25Ob2RlLT5mdW5jdGlvblN0YWNrKCk7Ci0gICAgY29uc3QgRGVjbGFyYXRpb25TdGFj
a3M6OlZhclN0YWNrJiB2YXJTdGFjayA9IGZ1bmN0aW9uTm9kZS0+dmFyU3RhY2soKTsKLSAgICBJ
ZGVudGlmaWVyU2V0IHRlc3Q7Ci0KLSAgICAvLyBDYXB0dXJlZCB2YXJpYWJsZXMgYW5kIGZ1bmN0
aW9ucyBnbyBmaXJzdCBzbyB0aGF0IGFjdGl2YXRpb25zIGRvbid0IGhhdmUKLSAgICAvLyB0byBz
dGVwIG92ZXIgdGhlIG5vbi1jYXB0dXJlZCBsb2NhbHMgdG8gbWFyayB0aGVtLgotICAgIGlmIChm
dW5jdGlvbk5vZGUtPmhhc0NhcHR1cmVkVmFyaWFibGVzKCkgfHwgc2hvdWxkQ2FwdHVyZUFsbFRo
ZVRoaW5ncykgewotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJvdW5kUGFyYW1ldGVy
UHJvcGVydGllcy5zaXplKCk7IGkrKykgewotICAgICAgICAgICAgY29uc3QgSWRlbnRpZmllciYg
aWRlbnQgPSBib3VuZFBhcmFtZXRlclByb3BlcnRpZXNbaV07Ci0gICAgICAgICAgICBpZiAoZnVu
Y3Rpb25Ob2RlLT5jYXB0dXJlcyhpZGVudCkgfHwgc2hvdWxkQ2FwdHVyZUFsbFRoZVRoaW5ncykK
LSAgICAgICAgICAgICAgICBhZGRWYXIoaWRlbnQsIElzVmFyaWFibGUsIElzV2F0Y2hhYmxlKTsK
LSAgICAgICAgfQotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZ1bmN0aW9uU3RhY2su
c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIEZ1bmN0aW9uQm9keU5vZGUqIGZ1bmN0aW9uID0g
ZnVuY3Rpb25TdGFja1tpXTsKLSAgICAgICAgICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0g
ZnVuY3Rpb24tPmlkZW50KCk7Ci0gICAgICAgICAgICBpZiAoZnVuY3Rpb25Ob2RlLT5jYXB0dXJl
cyhpZGVudCkgfHwgc2hvdWxkQ2FwdHVyZUFsbFRoZVRoaW5ncykgewotICAgICAgICAgICAgICAg
IG1fZnVuY3Rpb25zLmFkZChpZGVudC5pbXBsKCkpOwotICAgICAgICAgICAgICAgIGVtaXROZXdG
dW5jdGlvbihzY3JhdGNoLCBmdW5jdGlvbik7Ci0gICAgICAgICAgICAgICAgaW5pdGlhbGl6ZUNh
cHR1cmVkVmFyaWFibGUoYWRkVmFyKGlkZW50LCBJc1ZhcmlhYmxlLCBJc1dhdGNoYWJsZSksIGlk
ZW50LCBzY3JhdGNoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IHZhclN0YWNrLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBjb25z
dCBJZGVudGlmaWVyJiBpZGVudCA9IHZhclN0YWNrW2ldLmZpcnN0OwotICAgICAgICAgICAgaWYg
KGZ1bmN0aW9uTm9kZS0+Y2FwdHVyZXMoaWRlbnQpIHx8IHNob3VsZENhcHR1cmVBbGxUaGVUaGlu
Z3MpCi0gICAgICAgICAgICAgICAgYWRkVmFyKGlkZW50LCAodmFyU3RhY2tbaV0uc2Vjb25kICYg
RGVjbGFyYXRpb25TdGFja3M6OklzQ29uc3RhbnQpID8gSXNDb25zdGFudCA6IElzVmFyaWFibGUs
IElzV2F0Y2hhYmxlKTsKLSAgICAgICAgfQorICAgIGlmIChjYXB0dXJlc0FueUFyZ3VtZW50QnlO
YW1lKQorICAgICAgICBBU1NFUlQobV9sZXhpY2FsRW52aXJvbm1lbnRSZWdpc3Rlcik7CisgICAg
CisgICAgLy8gTmVlZCB0byBrbm93IHdoYXQgb3VyIGZ1bmN0aW9ucyBhcmUgY2FsbGVkLiBQYXJh
bWV0ZXJzIGhhdmUgc29tZSBnb29meSBiZWhhdmlvcnMgd2hlbiBpdAorICAgIC8vIGNvbWVzIHRv
IGZ1bmN0aW9ucyBvZiB0aGUgc2FtZSBuYW1lLgorICAgIGZvciAoRnVuY3Rpb25Cb2R5Tm9kZSog
ZnVuY3Rpb24gOiBmdW5jdGlvbk5vZGUtPmZ1bmN0aW9uU3RhY2soKSkKKyAgICAgICAgbV9mdW5j
dGlvbnMuYWRkKGZ1bmN0aW9uLT5pZGVudCgpLmltcGwoKSk7CisgICAgCisgICAgYm9vbCBuZWVk
c0FyZ3VtZW50cyA9IGZ1bmN0aW9uTm9kZS0+dXNlc0FyZ3VtZW50cygpIHx8IGNvZGVCbG9jay0+
dXNlc0V2YWwoKTsKKyAgICAKKyAgICBpZiAobmVlZHNBcmd1bWVudHMpIHsKKyAgICAgICAgLy8g
Q3JlYXRlIHRoZSBhcmd1bWVudHMgb2JqZWN0IG5vdy4gV2UgbWF5IHB1dCB0aGUgYXJndW1lbnRz
IG9iamVjdCBpbnRvIHRoZSBhY3RpdmF0aW9uIGlmCisgICAgICAgIC8vIGl0IGlzIGNhcHR1cmVk
LiBFaXRoZXIgd2F5LCB3ZSBjcmVhdGUgdHdvIGFyZ3VtZW50cyBvYmplY3QgdmFyaWFibGVzOiBv
bmUgaXMgb3VyCisgICAgICAgIC8vIHByaXZhdGUgdmFyaWFibGUgdGhhdCBpcyBpbW11dGFibGUs
IGFuZCBhbm90aGVyIHRoYXQgaXMgdGhlIHVzZXItdmlzaWJsZSB2YXJpYWJsZS4gVGhlCisgICAg
ICAgIC8vIGltbXV0YWJsZSBvbmUgaXMgb25seSB1c2VkIGhlcmUsIG9yIGR1cmluZyBmb3JtYWwg
cGFyYW1ldGVyIHJlc29sdXRpb25zIGlmIHdlIG9wdCBmb3IKKyAgICAgICAgLy8gRGlyZWN0QXJn
dW1lbnRzLgorICAgICAgICAKKyAgICAgICAgbV9hcmd1bWVudHNSZWdpc3RlciA9IGFkZFZhcigp
OworICAgICAgICBtX2FyZ3VtZW50c1JlZ2lzdGVyLT5yZWYoKTsKICAgICB9Ci0KLSAgICBtX3N5
bWJvbFRhYmxlLT5zZXRDYXB0dXJlRW5kKHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGNvZGVCbG9j
ay0+bV9udW1WYXJzKS5vZmZzZXQoKSk7Ci0KLSAgICBib29sIGNhbkxhemlseUNyZWF0ZUZ1bmN0
aW9ucyA9ICFmdW5jdGlvbk5vZGUtPm5lZWRzQWN0aXZhdGlvbkZvck1vcmVUaGFuVmFyaWFibGVz
KCkgJiYgIW1fc2hvdWxkRW1pdERlYnVnSG9va3MgJiYgIW1fdm0tPnR5cGVQcm9maWxlcigpICYm
ICFtX3ZtLT5jb250cm9sRmxvd1Byb2ZpbGVyKCk7Ci0gICAgbV9maXJzdExhenlGdW5jdGlvbiA9
IGNvZGVCbG9jay0+bV9udW1WYXJzOwotICAgIGlmICghc2hvdWxkQ2FwdHVyZUFsbFRoZVRoaW5n
cykgewotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZ1bmN0aW9uU3RhY2suc2l6ZSgp
OyArK2kpIHsKLSAgICAgICAgICAgIEZ1bmN0aW9uQm9keU5vZGUqIGZ1bmN0aW9uID0gZnVuY3Rp
b25TdGFja1tpXTsKLSAgICAgICAgICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gZnVuY3Rp
b24tPmlkZW50KCk7Ci0gICAgICAgICAgICBpZiAoIWZ1bmN0aW9uTm9kZS0+Y2FwdHVyZXMoaWRl
bnQpKSB7Ci0gICAgICAgICAgICAgICAgbV9mdW5jdGlvbnMuYWRkKGlkZW50LmltcGwoKSk7Ci0g
ICAgICAgICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHJlZyA9IGFkZFZhcihpZGVudCwgSXNW
YXJpYWJsZSwgTm90V2F0Y2hhYmxlKTsKLSAgICAgICAgICAgICAgICAvLyBEb24ndCBsYXppbHkg
Y3JlYXRlIGZ1bmN0aW9ucyB0aGF0IG92ZXJyaWRlIHRoZSBuYW1lICdhcmd1bWVudHMnCi0gICAg
ICAgICAgICAgICAgLy8gYXMgdGhpcyB3b3VsZCBjb21wbGljYXRlIGxhenkgaW5zdGFudGlhdGlv
biBvZiBhY3R1YWwgYXJndW1lbnRzLgotICAgICAgICAgICAgICAgIGlmICghY2FuTGF6aWx5Q3Jl
YXRlRnVuY3Rpb25zIHx8IGlkZW50ID09IHByb3BlcnR5TmFtZXMoKS5hcmd1bWVudHMpCi0gICAg
ICAgICAgICAgICAgICAgIGVtaXROZXdGdW5jdGlvbihyZWcuZ2V0KCksIGZ1bmN0aW9uKTsKLSAg
ICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgZW1pdEluaXRMYXp5UmVn
aXN0ZXIocmVnLmdldCgpKTsKLSAgICAgICAgICAgICAgICAgICAgbV9sYXp5RnVuY3Rpb25zLnNl
dChyZWctPnZpcnR1YWxSZWdpc3RlcigpLnRvTG9jYWwoKSwgZnVuY3Rpb24pOworICAgIAorICAg
IGlmIChuZWVkc0FyZ3VtZW50cyAmJiAhY29kZUJsb2NrLT5pc1N0cmljdE1vZGUoKSkgeworICAg
ICAgICAvLyBJZiB3ZSBjYXB0dXJlZCBhbnkgZm9ybWFsIHBhcmFtZXRlciBieSBuYW1lLCB0aGVu
IHdlIHVzZSBTY29wZWRBcmd1bWVudHMuIE90aGVyd2lzZSB3ZQorICAgICAgICAvLyB1c2UgRGly
ZWN0QXJndW1lbnRzLiBXaXRoIFNjb3BlZEFyZ3VtZW50cywgd2UgbGlmdCBhbGwgb2Ygb3VyIGFy
Z3VtZW50cyBpbnRvIHRoZQorICAgICAgICAvLyBhY3RpdmF0aW9uLgorICAgICAgICAKKyAgICAg
ICAgaWYgKGNhcHR1cmVzQW55QXJndW1lbnRCeU5hbWUpIHsKKyAgICAgICAgICAgIG1fc3ltYm9s
VGFibGUtPnNldEFyZ3VtZW50c0xlbmd0aCh2bSwgcGFyYW1ldGVycy5zaXplKCkpOworICAgICAg
ICAgICAgCisgICAgICAgICAgICAvLyBGb3IgZWFjaCBwYXJhbWV0ZXIsIHdlIGhhdmUgdHdvIHBv
c3NpYmlsaXRpZXM6CisgICAgICAgICAgICAvLyBFaXRoZXIgaXQncyBhIGJpbmRpbmcgbm9kZSB3
aXRoIG5vIGZ1bmN0aW9uIG92ZXJsYXAsIGluIHdoaWNoIGNhc2UgaXQgZ2V0cyBhIG5hbWUKKyAg
ICAgICAgICAgIC8vIGluIHRoZSBzeW1ib2wgdGFibGUgLSBvciBpdCBqdXN0IGdldHMgc3BhY2Ug
cmVzZXJ2ZWQgaW4gdGhlIHN5bWJvbCB0YWJsZS4gRWl0aGVyCisgICAgICAgICAgICAvLyB3YXkg
d2UgbGlmdCB0aGUgdmFsdWUgaW50byB0aGUgc2NvcGUuCisgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgcGFyYW1ldGVycy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgICAg
IFNjb3BlT2Zmc2V0IG9mZnNldCA9IG1fc3ltYm9sVGFibGUtPnRha2VOZXh0U2NvcGVPZmZzZXQo
KTsKKyAgICAgICAgICAgICAgICBpZiAoU3RyaW5nSW1wbCogbmFtZSA9IHZpc2libGVOYW1lRm9y
UGFyYW1ldGVyKHBhcmFtZXRlcnMuYXQoaSkpKSB7CisgICAgICAgICAgICAgICAgICAgIFN5bWJv
bFRhYmxlRW50cnkgZW50cnkob2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgICAgLy8gU3RvcmVz
IHRvIHRoZXNlIHZhcmlhYmxlcyB2aWEgdGhlIFNjb3BlZEFyZ3VtZW50cyBvYmplY3Qgd2lsbCBu
b3QgZG8KKyAgICAgICAgICAgICAgICAgICAgLy8gbm90aWZ5V3JpdGUoKSwgc2luY2UgdGhhdCB3
b3VsZCBiZSBjdW1iZXJzb21lLiBBbHNvLCB3YXRjaGluZyBmb3JtYWwKKyAgICAgICAgICAgICAg
ICAgICAgLy8gcGFyYW1ldGVycyB3aGVuICJhcmd1bWVudHMiIGlzIGluIHBsYXkgaXMgdW5saWtl
bHkgdG8gYmUgc3VwZXIgcHJvZml0YWJsZS4KKyAgICAgICAgICAgICAgICAgICAgLy8gU28sIHdl
IGp1c3QgZGlzYWJsZSBpdC4KKyAgICAgICAgICAgICAgICAgICAgZW50cnkuZGlzYWJsZVdhdGNo
aW5nKCk7CisgICAgICAgICAgICAgICAgICAgIG1fc3ltYm9sVGFibGUtPnNldChuYW1lLCBvZmZz
ZXQpOwogICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBhZGRPcGNvZGUob3BfcHV0
X3RvX3Njb3BlKTsKKyAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQobV9sZXhp
Y2FsRW52aXJvbm1lbnRSZWdpc3Rlci0+aW5kZXgoKSk7CisgICAgICAgICAgICAgICAgaW5zdHJ1
Y3Rpb25zKCkuYXBwZW5kKFVJTlRfTUFYKTsKKyAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbnMo
KS5hcHBlbmQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMSArIGkpLm9mZnNldCgpKTsKKyAg
ICAgICAgICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoUmVzb2x2ZU1vZGVBbmRUeXBlKFRo
cm93SWZOb3RGb3VuZCwgTG9jYWxDbG9zdXJlVmFyKSk7CisgICAgICAgICAgICAgICAgaW5zdHJ1
Y3Rpb25zKCkuYXBwZW5kKDApOworICAgICAgICAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVu
ZChvZmZzZXQub2Zmc2V0KCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAg
ICAgICAvLyBUaGlzIGNyZWF0ZXMgYSBzY29wZWQgYXJndW1lbnRzIG9iamVjdCBhbmQgY29waWVz
IHRoZSBvdmVyZmxvdyBhcmd1bWVudHMgaW50byB0aGUKKyAgICAgICAgICAgIC8vIHNjb3BlLiBJ
dCdzIHRoZSBlcXVpdmFsZW50IG9mIGNhbGxpbmcgU2NvcGVkQXJndW1lbnRzOjpjcmVhdGVCeUNv
cHlpbmcoKS4KKyAgICAgICAgICAgIGVtaXRPcGNvZGUob3BfY3JlYXRlX3Njb3BlZF9hcmd1bWVu
dHMpOworICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKG1fYXJndW1lbnRzUmVnaXN0
ZXItPmluZGV4KCkpOworICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKG1fbGV4aWNh
bEVudmlyb25tZW50UmVnaXN0ZXItPmluZGV4KCkpOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgLy8gV2UncmUgZ29pbmcgdG8gcHV0IGFsbCBwYXJhbWV0ZXJzIGludG8gdGhlIERpcmVj
dEFyZ3VtZW50cyBvYmplY3QuIEZpcnN0IGVuc3VyZQorICAgICAgICAgICAgLy8gdGhhdCB0aGUg
c3ltYm9sIHRhYmxlIGtub3dzIHRoYXQgdGhpcyBpcyBoYXBwZW5pbmcuCisgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcGFyYW1ldGVycy5zaXplKCk7ICsraSkgeworICAgICAg
ICAgICAgICAgIGlmIChTdHJpbmdJbXBsKiBuYW1lID0gdmlzaWJsZU5hbWVGb3JQYXJhbWV0ZXIo
cGFyYW1ldGVycy5hdChpKSkpCisgICAgICAgICAgICAgICAgICAgIG1fc3ltYm9sVGFibGUtPnNl
dChuYW1lLCBDYXB0dXJlZEFyZ3VtZW50c09mZnNldChpKSk7CiAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIGVtaXRPcGNvZGUob3BfY3JlYXRlX2RpcmVjdF9hcmd1bWVu
dHMpOworICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKG1fYXJndW1lbnRzUmVnaXN0
ZXItPmluZGV4KCkpOwogICAgICAgICB9Ci0gICAgICAgIG1fbGFzdExhenlGdW5jdGlvbiA9IGNh
bkxhemlseUNyZWF0ZUZ1bmN0aW9ucyA/IGNvZGVCbG9jay0+bV9udW1WYXJzIDogbV9maXJzdExh
enlGdW5jdGlvbjsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBib3VuZFBhcmFtZXRl
clByb3BlcnRpZXMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgICAgIGNvbnN0IElkZW50aWZpZXIm
IGlkZW50ID0gYm91bmRQYXJhbWV0ZXJQcm9wZXJ0aWVzW2ldOwotICAgICAgICAgICAgaWYgKCFm
dW5jdGlvbk5vZGUtPmNhcHR1cmVzKGlkZW50KSkKLSAgICAgICAgICAgICAgICBhZGRWYXIoaWRl
bnQsIElzVmFyaWFibGUsIElzV2F0Y2hhYmxlKTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBD
cmVhdGUgdGhlIGZvcm1hbCBwYXJhbWV0ZXJzIHRoZSBub3JtYWwgd2F5LiBBbnkgb2YgdGhlbSBj
b3VsZCBiZSBjYXB0dXJlZCwgb3Igbm90LiBJZgorICAgICAgICAvLyBjYXB0dXJlZCwgbGlmdCB0
aGVtIGludG8gdGhlIHNjb3BlLgorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcGFy
YW1ldGVycy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgU3RyaW5nSW1wbCogbmFtZSA9IHZp
c2libGVOYW1lRm9yUGFyYW1ldGVyKHBhcmFtZXRlcnMuYXQoaSkpOworICAgICAgICAgICAgaWYg
KCFuYW1lKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgCisgICAgICAg
ICAgICBpZiAoIWNhcHR1cmVzKG5hbWUpKSB7CisgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyB0
aGUgZWFzeSBjYXNlIC0ganVzdCB0ZWxsIHRoZSBzeW1ib2wgdGFibGUgYWJvdXQgdGhlIGFyZ3Vt
ZW50LiBJdCB3aWxsCisgICAgICAgICAgICAgICAgLy8gYmUgYWNjZXNzZWQgZGlyZWN0bHkuCisg
ICAgICAgICAgICAgICAgbV9zeW1ib2xUYWJsZS0+c2V0KG5hbWUsIHZpcnR1YWxSZWdpc3RlckZv
ckFyZ3VtZW50KDEgKyBpKSk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFNjb3BlT2Zmc2V0IG9mZnNldCA9IG1fc3lt
Ym9sVGFibGUtPnRha2VOZXh0U2NvcGVPZmZzZXQoKTsKKyAgICAgICAgICAgIElkZW50aWZpZXIm
IGlkZW50ID0KKyAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxjb25zdCBCaW5kaW5nTm9kZSo+
KHBhcmFtZXRlcnMuYXQoaSkpLT5ib3VuZFByb3BlcnR5KCk7CisgICAgICAgICAgICBtX3N5bWJv
bFRhYmxlLT5zZXQobmFtZSwgb2Zmc2V0KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgYWRk
T3Bjb2RlKG9wX3B1dF90b19zY29wZSk7CisgICAgICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBl
bmQobV9sZXhpY2FsRW52aXJvbm1lbnRSZWdpc3Rlci0+aW5kZXgoKSk7CisgICAgICAgICAgICBp
bnN0cnVjdGlvbnMoKS5hcHBlbmQoYWRkQ29uc3RhbnQoaWRlbnQpKTsKKyAgICAgICAgICAgIGlu
c3RydWN0aW9ucygpLmFwcGVuZCgmcmVnaXN0ZXJGb3IodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1l
bnQoMSArIGkpKSk7CisgICAgICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoUmVzb2x2ZU1v
ZGVBbmRUeXBlKFRocm93SWZOb3RGb3VuZCwgTG9jYWxDbG9zdXJlVmFyKSk7CisgICAgICAgICAg
ICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoMCk7CisgICAgICAgICAgICBpbnN0cnVjdGlvbnMoKS5h
cHBlbmQob2Zmc2V0Lm9mZnNldCgpKTsKICAgICAgICAgfQotICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IHZhclN0YWNrLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBjb25zdCBJZGVu
dGlmaWVyJiBpZGVudCA9IHZhclN0YWNrW2ldLmZpcnN0OwotICAgICAgICAgICAgaWYgKCFmdW5j
dGlvbk5vZGUtPmNhcHR1cmVzKGlkZW50KSkKLSAgICAgICAgICAgICAgICBhZGRWYXIoaWRlbnQs
ICh2YXJTdGFja1tpXS5zZWNvbmQgJiBEZWNsYXJhdGlvblN0YWNrczo6SXNDb25zdGFudCkgPyBJ
c0NvbnN0YW50IDogSXNWYXJpYWJsZSwgTm90V2F0Y2hhYmxlKTsKKyAgICB9CisgICAgCisgICAg
aWYgKG5lZWRzQXJndW1lbnRzICYmIGNvZGVCbG9jay0+aXNTdHJpY3RNb2RlKCkpIHsKKyAgICAg
ICAgLy8gQWxsb2NhdGUgYW4gb3V0LW9mLWJhbmRzIGFyZ3VtZW50cyBvYmplY3QuCisgICAgICAg
IGFkZE9wY29kZShvcF9jcmVhdGVfb3V0X29mX2JhbmRfYXJndW1lbnRzKTsKKyAgICAgICAgaW5z
dHJ1Y3Rpb25zKCkuYXBwZW5kKG1fYXJndWVudHNSZWdpc3Rlci0+aW5kZXgoKSk7CisgICAgfQor
ICAgIAorICAgIC8vIE5vdyBkZWNsYXJlIGFsbCB2YXJpYWJsZXMuCisgICAgZm9yIChjb25zdCBJ
ZGVudGlmaWVyJiBpZGVudCA6IGJvdW5kUGFyYW1ldGVyUHJvcGVydGllcykKKyAgICAgICAgY3Jl
YXRlVmFyaWFibGUoaWRlbnQsIHZhcktpbmQoaWRlbnQuaW1wbCgpKSwgSXNWYXJpYWJsZSk7Cisg
ICAgZm9yIChGdW5jdGlvbkJvZHlOb2RlKiBmdW5jdGlvbiA6IGZ1bmN0aW9uTm9kZS0+ZnVuY3Rp
b25TdGFjaygpKSB7CisgICAgICAgIGNyZWF0ZVZhcmlhYmxlKGRlbnQsIHZhcktpbmQoaWRlbnQu
aW1wbCgpKSwgSXNWYXJpYWJsZSk7CisgICAgICAgIG1fZnVuY3Rpb25zVG9Jbml0aWFsaXplLmFw
cGVuZChmdW5jdGlvbik7CisgICAgfQorICAgIGZvciAoYXV0byYgZW50cnkgOiBmdW5jdGlvbk5v
ZGUtPnZhclN0YWNrKCkpIHsKKyAgICAgICAgY3JlYXRlVmFyaWFibGUoCisgICAgICAgICAgICBl
bnRyeS5maXJzdCwgdmFyS2luZChlbnRyeS5maXJzdC5pbXBsKCkpLAorICAgICAgICAgICAgKGVu
dHJ5LnNlY29uZCAmIERlY2xhcmF0aW9uU3RhY2tzOjpJc0NvbnN0YW50KSA/IElzQ29uc3RhbnQg
OiBJc1ZhcmlhYmxlKTsKKyAgICB9CisgICAgCisgICAgLy8gVGhlcmUgYXJlIHNvbWUgdmFyaWFi
bGVzIHRoYXQgbmVlZCB0byBiZSBwcmVpbml0aWFsaXplZCB0byBzb21ldGhpbmcgb3RoZXIgdGhh
biBVbmRlZmluZWQ6CisgICAgLy8KKyAgICAvLyAtICJhcmd1bWVudHMiOiB1bmxlc3MgaXQncyB1
c2VkIGFzIGEgZnVuY3Rpb24gb3IgcGFyYW1ldGVyLCB0aGlzIHNob3VsZCByZWZlciB0byB0aGUK
KyAgICAvLyAgIGFyZ3VtZW50cyBvYmplY3QuCisgICAgLy8KKyAgICAvLyAtIGNhbGxlZTogdW5s
ZXNzIGl0J3MgdXNlZCBhcyBhIHZhciwgZnVuY3Rpb24sIG9yIHBhcmFtZXRlciwgdGhpcyBzaG91
bGQgcmVmZXIgdG8gdGhlCisgICAgLy8gICBjYWxsZWUgKGkuZS4gb3VyIGZ1bmN0aW9uKS4KKyAg
ICAvLworICAgIC8vIC0gZnVuY3Rpb25zOiB0aGVzZSBhbHdheXMgb3ZlcnJpZGUgZXZlcnl0aGlu
ZyBlbHNlLgorICAgIC8vCisgICAgLy8gVGhlIG1vc3QgbG9naWNhbCB3YXkgdG8gZG8gYWxsIG9m
IHRoaXMgaXMgdG8gaW5pdGlhbGl6ZSBub25lIG9mIHRoZSB2YXJpYWJsZXMgdW50aWwgbm93LAor
ICAgIC8vIGFuZCB0aGVuIGluaXRpYWxpemUgdGhlbSBpbiBCeXRlY29kZUdlbmVyYXRvcjo6Z2Vu
ZXJhdGUoKSBpbiBzdWNoIGFuIG9yZGVyIHRoYXQgdGhlIHJ1bGVzCisgICAgLy8gZm9yIGhvdyB0
aGVzZSB0aGluZ3Mgb3ZlcnJpZGUgZWFjaCBvdGhlciBlbmQgdXAgaG9sZGluZy4gV2Ugd291bGQg
aW5pdGlhbGl6ZSB0aGUgY2FsbGVlCisgICAgLy8gZmlyc3QsIHRoZW4gImFyZ3VtZW50cyIsIHRo
ZW4gYWxsIGFyZ3VtZW50cywgdGhlbiB0aGUgZnVuY3Rpb25zLgorICAgIC8vCisgICAgLy8gQnV0
IHNvbWUgYXJndW1lbnRzIGFyZSBhbHJlYWR5IGluaXRpYWxpemVkIGJ5IGRlZmF1bHQsIHNpbmNl
IGlmIHRoZXkgYXJlbid0IGNhcHR1cmVkIGFuZCB3ZQorICAgIC8vIGRvbid0IGhhdmUgImFyZ3Vt
ZW50cyIgdGhlbiB3ZSBqdXN0IHBvaW50IHRoZSBzeW1ib2wgdGFibGUgYXQgdGhlIHN0YWNrIHNs
b3Qgb2YgdGhvc2UKKyAgICAvLyBhcmd1bWVudHMuIFdlIGVuZCB1cCBpbml0aWFsaXppbmcgdGhl
IHJlc3Qgb2YgdGhlIGFyZ3VtZW50cyB0aGF0IGhhdmUgYW4gdW5jb21wbGljYXRlZAorICAgIC8v
IGJpbmRpbmcgKGkuZS4gZG9uJ3QgaW52b2x2ZSBkZWNvbnN0cnVjdGlvbikgYWJvdmUgd2hlbiBm
aWd1cmluZyBvdXQgaG93IHRvIGxheSB0aGVtIG91dCwKKyAgICAvLyBiZWNhdXNlIHRoYXQncyBq
dXN0IHRoZSBzaW1wbGVzdCB0aGluZy4gVGhpcyBtZWFucyB0aGF0IHdoZW4gd2UgaW5pdGlhbGl6
ZSB0aGVtLCB3ZSBoYXZlIHRvCisgICAgLy8gd2F0Y2ggb3V0IGZvciB0aGUgdGhpbmdzIHRoYXQg
b3ZlcnJpZGUgYXJndW1lbnRzIChuYW1lbHksIGZ1bmN0aW9ucykuCisgICAgLy8KKyAgICAvLyBX
ZSBhbHNvIGluaXRpYWxpemUgY2FsbGVlIGhlcmUgYXMgd2VsbCwganVzdCBiZWNhdXNlIGl0J3Mg
c28gd2VpcmQuIFdlIGtub3cgd2hldGhlciB3ZSB3YW50CisgICAgLy8gdG8gZG8gdGhpcyBiZWNh
dXNlIHdlIGNhbiBqdXN0IGNoZWNrIGlmIGl0J3MgaW4gdGhlIHN5bWJvbCB0YWJsZS4KKyAgICBp
ZiAoZnVuY3Rpb25OYW1lSXNJblNjb3BlKGZ1bmN0aW9uTm9kZS0+aWRlbnQoKSwgZnVuY3Rpb25O
b2RlLT5mdW5jdGlvbk1vZGUoKSkKKyAgICAgICAgJiYgIWZ1bmN0aW9uTmFtZVNjb3BlSXNEeW5h
bWljKGNvZGVCbG9jay0+dXNlc0V2YWwoKSwgY29kZUJsb2NrLT5pc1N0cmljdE1vZGUoKSkKKyAg
ICAgICAgJiYgbV9zeW1ib2xUYWJsZS0+Z2V0KGZ1bmN0aW9uTm9kZS0+aWRlbnQoKSkuaXNOdWxs
KCkpIHsKKyAgICAgICAgaWYgKGNhcHR1cmVzKGZ1bmN0aW9uTm9kZS0+aWRlbnQoKS5pbXBsKCkp
KSB7CisgICAgICAgICAgICBTY29wZU9mZnNldCBvZmZzZXQgPSBtX3N5bWJvbFRhYmxlLT50YWtl
TmV4dFNjb3BlT2Zmc2V0KCk7CisgICAgICAgICAgICBtX3N5bWJvbFRhYmxlLT5hZGQoCisgICAg
ICAgICAgICAgICAgZnVuY3Rpb25Ob2RlLT5pZGVudCgpLmltcGwoKSwKKyAgICAgICAgICAgICAg
ICBTeW1ib2xUYWJsZUVudHJ5KFZhck9mZnNldChvZmZzZXQpLCBSZWFkT25seSkpOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBhZGRPcGNvZGUob3BfcHV0X3RvX3Njb3BlKTsKKyAgICAgICAg
ICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChtX2xleGljYWxFbnZpcm9ubWVudFJlZ2lzdGVyLT5p
bmRleCgpKTsKKyAgICAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChhZGRDb25zdGFudChm
dW5jdGlvbk5vZGUtPmlkZW50KCkpKTsKKyAgICAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVu
ZChtX2NhbGxlZVJlZ2lzdGVyLmluZGV4KCkpOworICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zKCku
YXBwZW5kKFJlc29sdmVNb2RlQW5kVHlwZShUaHJvd0lmTm90Rm91bmQsIExvY2FsQ2xvc3VyZVZh
cikpOworICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKDApOworICAgICAgICAgICAg
aW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKG9mZnNldC5vZmZzZXQoKSk7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICBtX3N5bWJvbFRhYmxlLT5hZGQoCisgICAgICAgICAgICAgICAgZnVuY3Rp
b25Ob2RlLT5pZGVudCgpLmltcGwoKSwKKyAgICAgICAgICAgICAgICBTeW1ib2xUYWJsZUVudHJ5
KFZhck9mZnNldChtX2NhbGxlZVJlZ2lzdGVyLnZpcnR1YWxSZWdpc3RlcigpKSwgUmVhZE9ubHkp
KTsKICAgICAgICAgfQogICAgIH0KLQotICAgIGlmIChtX3N5bWJvbFRhYmxlLT5jYXB0dXJlQ291
bnQoKSkKLSAgICAgICAgZW1pdE9wY29kZShvcF90b3VjaF9lbnRyeSk7CiAgICAgCi0gICAgbV9w
YXJhbWV0ZXJzLmdyb3cocGFyYW1ldGVycy5zaXplKCkgKyAxKTsgLy8gcmVzZXJ2ZSBzcGFjZSBm
b3IgInRoaXMiCi0KLSAgICAvLyBBZGQgInRoaXMiIGFzIGEgcGFyYW1ldGVyCi0gICAgaW50IG5l
eHRQYXJhbWV0ZXJJbmRleCA9IENhbGxGcmFtZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCk7Ci0gICAg
bV90aGlzUmVnaXN0ZXIuc2V0SW5kZXgobmV4dFBhcmFtZXRlckluZGV4KyspOwotICAgIG1fY29k
ZUJsb2NrLT5hZGRQYXJhbWV0ZXIoKTsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcGFy
YW1ldGVycy5zaXplKCk7ICsraSwgKytuZXh0UGFyYW1ldGVySW5kZXgpIHsKLSAgICAgICAgaW50
IGluZGV4ID0gbmV4dFBhcmFtZXRlckluZGV4OwotICAgICAgICBhdXRvIHBhdHRlcm4gPSBwYXJh
bWV0ZXJzLmF0KGkpOwotICAgICAgICBpZiAoIXBhdHRlcm4tPmlzQmluZGluZ05vZGUoKSkgewot
ICAgICAgICAgICAgbV9jb2RlQmxvY2stPmFkZFBhcmFtZXRlcigpOwotICAgICAgICAgICAgUmVn
aXN0ZXJJRCYgcGFyYW1ldGVyID0gcmVnaXN0ZXJGb3IoaW5kZXgpOwotICAgICAgICAgICAgcGFy
YW1ldGVyLnNldEluZGV4KGluZGV4KTsKLSAgICAgICAgICAgIG1fZGVjb25zdHJ1Y3RlZFBhcmFt
ZXRlcnMuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKCZwYXJhbWV0ZXIsIHBhdHRlcm4pKTsKLSAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgIC8vIFRoaXMgaXMgb3VyIGZpbmFsIGFjdCBvZiB3ZWlyZG5l
c3MuICJhcmd1bWVudHMiIGlzIG92ZXJyaWRkZW4gYnkgZXZlcnl0aGluZyBleGNlcHQgdGhlCisg
ICAgLy8gY2FsbGVlLiBXZSBhZGQgaXQgdG8gdGhlIHN5bWJvbCB0YWJsZSBpZiBpdCdzIG5vdCBh
bHJlYWR5IHRoZXJlIGFuZCBpdCdzIG5vdCBhbiBhcmd1bWVudC4KKyAgICBpZiAobmVlZHNBcmd1
bWVudHMpIHsKKyAgICAgICAgLy8gSWYgImFyZ3VtZW50cyIgaXMgb3ZlcnJpZGRlbiBieSBhIGZ1
bmN0aW9uIG9yIGRlY29uc3RydWN0ZWQgcGFyYW1ldGVyIG5hbWUsIHRoZW4gaXQncworICAgICAg
ICAvLyBPSyBmb3IgdXMgdG8gY2FsbCBjcmVhdGVWYXJpYWJsZSgpIGJlY2F1c2UgaXQgd29uJ3Qg
Y2hhbmdlIGFueXRoaW5nLiBJdCdzIGFsc28gT0sgZm9yCisgICAgICAgIC8vIHVzIHRvIHRoZW0g
dGVsbCBCeXRlY29kZUdlbmVyYXRvcjo6Z2VuZXJhdGUoKSB0byB3cml0ZSB0byBpdCBiZWNhdXNl
IGl0IHdpbGwgZG8gc28KKyAgICAgICAgLy8gYmVmb3JlIGl0IGluaXRpYWxpemVzIGZ1bmN0aW9u
cyBhbmQgZGVjb25zdHJ1Y3RlZCBwYXJhbWV0ZXJzLiBCdXQgaWYgImFyZ3VtZW50cyIgaXMKKyAg
ICAgICAgLy8gb3ZlcnJpZGRlbiBieSBhICJzaW1wbGUiIGZ1bmN0aW9uIHBhcmFtZXRlciwgdGhl
biB3ZSBoYXZlIHRvIGJhaWw6IGNyZWF0ZVZhcmlhYmxlKCkKKyAgICAgICAgLy8gd291bGQgYXNz
ZXJ0IGFuZCBCeXRlY29kZUdlbmVyYXRvcjo6Z2VuZXJhdGUoKSB3b3VsZCB3cml0ZSB0aGUgImFy
Z3VtZW50cyIgYWZ0ZXIgdGhlCisgICAgICAgIC8vIGFyZ3VtZW50IHZhbHVlIGhhZCBhbHJlYWR5
IGJlZW4gcHJvcGVybHkgaW5pdGlhbGl6ZWQuCisgICAgICAgIAorICAgICAgICBib29sIGhhdmVQ
YXJhbWV0ZXJOYW1lZEFyZ3VtZW50cyA9IGZhbHNlOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgcGFyYW1ldGVycy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgU3RyaW5nSW1w
bCogbmFtZSA9IHZpc2libGVOYW1lRm9yUGFyYW1ldGVyKHBhcmFtZXRlcnMuYXQoaSkpOworICAg
ICAgICAgICAgaWYgKG5hbWUgPT0gcHJvcGVydHlOYW1lcygpLmFyZ3VtZW50cy5pbXBsKCkpIHsK
KyAgICAgICAgICAgICAgICBoYXZlUGFyYW1ldGVyTmFtZWRBcmd1bWVudHMgPSB0cnVlOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIGF1
dG8gc2ltcGxlUGFyYW1ldGVyID0gc3RhdGljX2Nhc3Q8Y29uc3QgQmluZGluZ05vZGUqPihwYXR0
ZXJuKTsKLSAgICAgICAgaWYgKGNhcHR1cmVkQXJndW1lbnRzLnNpemUoKSAmJiBjYXB0dXJlZEFy
Z3VtZW50c1tpXSkgewotICAgICAgICAgICAgQVNTRVJUKChmdW5jdGlvbk5vZGUtPmhhc0NhcHR1
cmVkVmFyaWFibGVzKCkgJiYgZnVuY3Rpb25Ob2RlLT5jYXB0dXJlcyhzaW1wbGVQYXJhbWV0ZXIt
PmJvdW5kUHJvcGVydHkoKSkpIHx8IHNob3VsZENhcHR1cmVBbGxUaGVUaGluZ3MpOwotICAgICAg
ICAgICAgaW5kZXggPSBjYXB0dXJlZEFyZ3VtZW50c1tpXS0+aW5kZXgoKTsKLSAgICAgICAgICAg
IFJlZ2lzdGVySUQgb3JpZ2luYWwobmV4dFBhcmFtZXRlckluZGV4KTsKLSAgICAgICAgICAgIGlu
aXRpYWxpemVDYXB0dXJlZFZhcmlhYmxlKGNhcHR1cmVkQXJndW1lbnRzW2ldLCBzaW1wbGVQYXJh
bWV0ZXItPmJvdW5kUHJvcGVydHkoKSwgJm9yaWdpbmFsKTsKKyAgICAgICAgCisgICAgICAgIGlm
ICghaGF2ZVBhcmFtZXRlck5hbWVkQXJndW1lbnRzKSB7CisgICAgICAgICAgICBjcmVhdGVWYXJp
YWJsZSgKKyAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWVzKCkuYXJndW1lbnRzLCB2YXJLaW5k
KHByb3BlcnR5TmFtZXMoKS5hcmd1bWVudHMuaW1wbCgpKSwgSXNWYXJpYWJsZSk7CisgICAgICAg
ICAgICBtX25lZWRUb0luaXRpYWxpemVBcmd1bWVudHMgPSB0cnVlOwogICAgICAgICB9Ci0gICAg
ICAgIGFkZFBhcmFtZXRlcihzaW1wbGVQYXJhbWV0ZXItPmJvdW5kUHJvcGVydHkoKSwgaW5kZXgp
OwogICAgIH0KLQotICAgIC8vIFdlIGRlY2xhcmUgdGhlIGNhbGxlZSdzIG5hbWUgbGFzdCBiZWNh
dXNlIGl0IHNob3VsZCBsb3NlIHRvIGEgdmFyLCBmdW5jdGlvbiwgYW5kL29yIHBhcmFtZXRlciBk
ZWNsYXJhdGlvbi4KLSAgICBhZGRDYWxsZWUoZnVuY3Rpb25Ob2RlLCBjYWxsZWVSZWdpc3Rlcik7
CisgICAgCisgICAgaWYgKG1fc3ltYm9sVGFibGUtPnNjb3BlU2l6ZSgpKQorICAgICAgICBlbWl0
T3Bjb2RlKG9wX3RvdWNoX2VudHJ5KTsKIAogICAgIGlmIChpc0NvbnN0cnVjdG9yKCkpIHsKICAg
ICAgICAgZW1pdENyZWF0ZVRoaXMoJm1fdGhpc1JlZ2lzdGVyKTsKQEAgLTQwOSw3ICs0NTIsNiBA
QCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoVk0mCiAgICAgICAgIGluc3Ry
dWN0aW9ucygpLmFwcGVuZCgwKTsKICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKDApOwog
ICAgIH0KLSAgICBtX2xvY2FsQXJndW1lbnRzUmVnaXN0ZXIgPSBsb2NhbEFyZ3VtZW50c1JlZ2lz
dGVyOwogfQogCiBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoVk0mIHZtLCBF
dmFsTm9kZSogZXZhbE5vZGUsIFVubGlua2VkRXZhbENvZGVCbG9jayogY29kZUJsb2NrLCBEZWJ1
Z2dlck1vZGUgZGVidWdnZXJNb2RlLCBQcm9maWxlck1vZGUgcHJvZmlsZXJNb2RlKQpAQCAtNDQ4
LDEwOCArNDkwLDIyIEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjp+Qnl0ZWNvZGVHZW5lcmF0b3IoKQog
ewogfQogCi1SZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEluaXRMYXp5UmVnaXN0
ZXIoUmVnaXN0ZXJJRCogcmVnKQorUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmluaXRp
YWxpemVOZXh0UGFyYW1ldGVyKCkKIHsKLSAgICBlbWl0T3Bjb2RlKG9wX2luaXRfbGF6eV9yZWcp
OwotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChyZWctPmluZGV4KCkpOwotICAgIEFTU0VSVCgh
aGFzV2F0Y2hhYmxlVmFyaWFibGUocmVnLT5pbmRleCgpKSk7Ci0gICAgcmV0dXJuIHJlZzsKLX0K
LQotUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmluaXRpYWxpemVDYXB0dXJlZFZhcmlh
YmxlKFJlZ2lzdGVySUQqIGRzdCwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBSZWdp
c3RlcklEKiB2YWx1ZSkKLXsKLQotICAgIG1fY29kZUJsb2NrLT5hZGRQcm9wZXJ0eUFjY2Vzc0lu
c3RydWN0aW9uKGluc3RydWN0aW9ucygpLnNpemUoKSk7Ci0gICAgZW1pdE9wY29kZShvcF9wdXRf
dG9fc2NvcGUpOwotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChtX2xleGljYWxFbnZpcm9ubWVu
dFJlZ2lzdGVyLT5pbmRleCgpKTsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYWRkQ29uc3Rh
bnQocHJvcGVydHlOYW1lKSk7Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHZhbHVlLT5pbmRl
eCgpKTsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoUmVzb2x2ZU1vZGVBbmRUeXBlKFRocm93
SWZOb3RGb3VuZCwgTG9jYWxDbG9zdXJlVmFyKS5vcGVyYW5kKCkpOwotICAgIGludCBvcGVyYW5k
ID0gcmVnaXN0ZXJGb3IoZHN0LT5pbmRleCgpKS5pbmRleCgpOwotICAgIGJvb2wgaXNXYXRjaGFi
bGVWYXJpYWJsZSA9IGhhc1dhdGNoYWJsZVZhcmlhYmxlKG9wZXJhbmQpOwotICAgIEFTU0VSVCgh
aXNXYXRjaGFibGVWYXJpYWJsZSB8fCB3YXRjaGFibGVWYXJpYWJsZUlkZW50aWZpZXIob3BlcmFu
ZCkgPT0gcHJvcGVydHlOYW1lKTsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoaXNXYXRjaGFi
bGVWYXJpYWJsZSk7Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGRzdC0+aW5kZXgoKSk7Ci0g
ICAgcmV0dXJuIGRzdDsKLX0KLQotUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OnJlc29s
dmVDYWxsZWUoRnVuY3Rpb25Ob2RlKiBmdW5jdGlvbk5vZGUpCi17Ci0gICAgaWYgKCFmdW5jdGlv
bk5hbWVJc0luU2NvcGUoZnVuY3Rpb25Ob2RlLT5pZGVudCgpLCBmdW5jdGlvbk5vZGUtPmZ1bmN0
aW9uTW9kZSgpKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpZiAoZnVuY3Rpb25OYW1lU2Nv
cGVJc0R5bmFtaWMobV9jb2RlQmxvY2stPnVzZXNFdmFsKCksIG1fY29kZUJsb2NrLT5pc1N0cmlj
dE1vZGUoKSkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgbV9jYWxsZWVSZWdpc3Rlci5zZXRJ
bmRleChKU1N0YWNrOjpDYWxsZWUpOwotICAgIGlmIChmdW5jdGlvbk5vZGUtPmNhcHR1cmVzKGZ1
bmN0aW9uTm9kZS0+aWRlbnQoKSkpCi0gICAgICAgIHJldHVybiBpbml0aWFsaXplQ2FwdHVyZWRW
YXJpYWJsZShhZGRWYXIoKSwgZnVuY3Rpb25Ob2RlLT5pZGVudCgpLCAmbV9jYWxsZWVSZWdpc3Rl
cik7Ci0KLSAgICByZXR1cm4gJm1fY2FsbGVlUmVnaXN0ZXI7Ci19Ci0KLXZvaWQgQnl0ZWNvZGVH
ZW5lcmF0b3I6OmFkZENhbGxlZShGdW5jdGlvbk5vZGUqIGZ1bmN0aW9uTm9kZSwgUmVnaXN0ZXJJ
RCogY2FsbGVlUmVnaXN0ZXIpCi17Ci0gICAgaWYgKCFjYWxsZWVSZWdpc3RlcikKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgc3ltYm9sVGFibGUoKS5hZGQoZnVuY3Rpb25Ob2RlLT5pZGVudCgpLmlt
cGwoKSwgU3ltYm9sVGFibGVFbnRyeShjYWxsZWVSZWdpc3Rlci0+aW5kZXgoKSwgUmVhZE9ubHkp
KTsKLX0KLQotdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6YWRkUGFyYW1ldGVyKGNvbnN0IElkZW50
aWZpZXImIGlkZW50LCBpbnQgcGFyYW1ldGVySW5kZXgpCi17Ci0gICAgLy8gUGFyYW1ldGVycyBv
dmVyd3JpdGUgdmFyIGRlY2xhcmF0aW9ucywgYnV0IG5vdCBmdW5jdGlvbiBkZWNsYXJhdGlvbnMu
Ci0gICAgU3RyaW5nSW1wbCogcmVwID0gaWRlbnQuaW1wbCgpOwotICAgIGlmICghbV9mdW5jdGlv
bnMuY29udGFpbnMocmVwKSkgewotICAgICAgICBzeW1ib2xUYWJsZSgpLnNldChyZXAsIHBhcmFt
ZXRlckluZGV4KTsKLSAgICAgICAgUmVnaXN0ZXJJRCYgcGFyYW1ldGVyID0gcmVnaXN0ZXJGb3Io
cGFyYW1ldGVySW5kZXgpOwotICAgICAgICBwYXJhbWV0ZXIuc2V0SW5kZXgocGFyYW1ldGVySW5k
ZXgpOwotICAgIH0KLQotICAgIC8vIFRvIG1haW50YWluIHRoZSBjYWxsaW5nIGNvbnZlbnRpb24s
IHdlIGhhdmUgdG8gYWxsb2NhdGUgdW5pcXVlIHNwYWNlIGZvcgotICAgIC8vIGVhY2ggcGFyYW1l
dGVyLCBldmVuIGlmIHRoZSBwYXJhbWV0ZXIgZG9lc24ndCBtYWtlIGl0IGludG8gdGhlIHN5bWJv
bCB0YWJsZS4KKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnID0gdmlydHVhbFJlZ2lzdGVyRm9yQXJn
dW1lbnQobV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSk7CisgICAgUmVnaXN0ZXJJRCYgcGFy
YW1ldGVyID0gcmVnaXN0ZXJGb3IocmVnKTsKKyAgICBwYXJhbWV0ZXIuc2V0SW5kZXgocmVnKTsK
ICAgICBtX2NvZGVCbG9jay0+YWRkUGFyYW1ldGVyKCk7CiB9CiAKLWJvb2wgQnl0ZWNvZGVHZW5l
cmF0b3I6OndpbGxSZXNvbHZlVG9Bcmd1bWVudHNSZWdpc3Rlcihjb25zdCBJZGVudGlmaWVyJiBp
ZGVudCkKLXsKLSAgICBpZiAoaWRlbnQgIT0gcHJvcGVydHlOYW1lcygpLmFyZ3VtZW50cykKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIGlmICghc2hvdWxkT3B0aW1pemVMb2NhbHMo
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIFN5bWJvbFRhYmxlRW50cnkgZW50
cnkgPSBzeW1ib2xUYWJsZSgpLmdldChpZGVudC5pbXBsKCkpOwotICAgIGlmIChlbnRyeS5pc051
bGwoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKG1fbG9jYWxBcmd1bWVudHNS
ZWdpc3RlciAmJiBpc0NhcHR1cmVkKG1fbG9jYWxBcmd1bWVudHNSZWdpc3Rlci0+aW5kZXgoKSkg
JiYgbV9sZXhpY2FsRW52aXJvbm1lbnRSZWdpc3RlcikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgaWYgKG1fY29kZUJsb2NrLT51c2VzQXJndW1lbnRzKCkgJiYgbV9jb2RlVHlwZSA9PSBG
dW5jdGlvbkNvZGUgJiYgbV9sb2NhbEFyZ3VtZW50c1JlZ2lzdGVyKQotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLVJlZ2lzdGVySUQqIEJ5dGVjb2Rl
R2VuZXJhdG9yOjp1bmNoZWNrZWRMb2NhbEFyZ3VtZW50c1JlZ2lzdGVyKCkKLXsKLSAgICBBU1NF
UlQod2lsbFJlc29sdmVUb0FyZ3VtZW50c1JlZ2lzdGVyKHByb3BlcnR5TmFtZXMoKS5hcmd1bWVu
dHMpKTsKLSAgICBBU1NFUlQobV9sb2NhbEFyZ3VtZW50c1JlZ2lzdGVyKTsKLSAgICByZXR1cm4g
bV9sb2NhbEFyZ3VtZW50c1JlZ2lzdGVyOwotfQotCi1SZWdpc3RlcklEKiBCeXRlY29kZUdlbmVy
YXRvcjo6Y3JlYXRlTGF6eVJlZ2lzdGVySWZOZWNlc3NhcnkoUmVnaXN0ZXJJRCogcmVnKQorU3Ry
aW5nSW1wbCogQnl0ZWNvZGVHZW5lcmF0b3I6OnZpc2libGVOYW1lRm9yUGFyYW1ldGVyKERlY29u
c3RydWN0aW9uUGF0dGVybk5vZGUqIHBhdHRlcm4pCiB7Ci0gICAgaWYgKCFyZWctPnZpcnR1YWxS
ZWdpc3RlcigpLmlzTG9jYWwoKSkKLSAgICAgICAgcmV0dXJuIHJlZzsKLQotICAgIGludCBsb2Nh
bFZhcmlhYmxlTnVtYmVyID0gcmVnLT52aXJ0dWFsUmVnaXN0ZXIoKS50b0xvY2FsKCk7Ci0KLSAg
ICBpZiAobV9sYXN0TGF6eUZ1bmN0aW9uIDw9IGxvY2FsVmFyaWFibGVOdW1iZXIgfHwgbG9jYWxW
YXJpYWJsZU51bWJlciA8IG1fZmlyc3RMYXp5RnVuY3Rpb24pCi0gICAgICAgIHJldHVybiByZWc7
Ci0gICAgZW1pdExhenlOZXdGdW5jdGlvbihyZWcsIG1fbGF6eUZ1bmN0aW9ucy5nZXQobG9jYWxW
YXJpYWJsZU51bWJlcikpOwotICAgIHJldHVybiByZWc7CisgICAgaWYgKHBhdHRlcm4tPmlzQmlu
ZGluZ05vZGUoKSkgeworICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IHN0YXRpY19j
YXN0PGNvbnN0IEJpbmRpbmdOb2RlKj4ocGF0dGVybiktPmJvdW5kUHJvcGVydHkoKTsKKyAgICAg
ICAgaWYgKCFtX2Z1bmN0aW9ucy5jb250YWlucyhpZGVudC5pbXBsKCkpKQorICAgICAgICAgICAg
cmV0dXJuIGlkZW50LmltcGwoKTsKKyAgICB9CisgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKIFJl
Z2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjpuZXdSZWdpc3RlcigpCkBAIC05NTQsNyArOTEw
LDcgQEAgYm9vbCBCeXRlY29kZUdlbmVyYXRvcjo6aGFzQ29uc3RhbnQoY29ucwogICAgIFN0cmlu
Z0ltcGwqIHJlcCA9IGlkZW50LmltcGwoKTsKICAgICByZXR1cm4gbV9pZGVudGlmaWVyTWFwLmNv
bnRhaW5zKHJlcCk7CiB9Ci0gICAgCisKIHVuc2lnbmVkIEJ5dGVjb2RlR2VuZXJhdG9yOjphZGRD
b25zdGFudChjb25zdCBJZGVudGlmaWVyJiBpZGVudCkKIHsKICAgICBTdHJpbmdJbXBsKiByZXAg
PSBpZGVudC5pbXBsKCk7CkBAIC0xMTkyLDQ2ICsxMTQ4LDg2IEBAIGJvb2wgQnl0ZWNvZGVHZW5l
cmF0b3I6OmlzQ2FwdHVyZWQoaW50IG8KICAgICByZXR1cm4gbV9zeW1ib2xUYWJsZSAmJiBtX3N5
bWJvbFRhYmxlLT5pc0NhcHR1cmVkKG9wZXJhbmQpOwogfQogCi1Mb2NhbCBCeXRlY29kZUdlbmVy
YXRvcjo6bG9jYWwoY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHkpCitWYXJpYWJsZSBCeXRlY29k
ZUdlbmVyYXRvcjo6dmFyaWFibGUoY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHkpCiB7Ci0gICAg
aWYgKHByb3BlcnR5ID09IHByb3BlcnR5TmFtZXMoKS50aGlzSWRlbnRpZmllcikKLSAgICAgICAg
cmV0dXJuIExvY2FsKHRoaXNSZWdpc3RlcigpLCBSZWFkT25seSwgTG9jYWw6OlNwZWNpYWxMb2Nh
bCk7Ci0gICAgYm9vbCBpc0FyZ3VtZW50cyA9IHByb3BlcnR5ID09IHByb3BlcnR5TmFtZXMoKS5h
cmd1bWVudHM7Ci0gICAgaWYgKGlzQXJndW1lbnRzKQotICAgICAgICBjcmVhdGVBcmd1bWVudHNJ
Zk5lY2Vzc2FyeSgpOwotCisgICAgaWYgKHByb3BlcnR5ID09IHByb3BlcnR5TmFtZXMoKS50aGlz
SWRlbnRpZmllcikgeworICAgICAgICByZXR1cm4gVmFyaWFibGUoCisgICAgICAgICAgICBwcm9w
ZXJ0eSwgVmFyT2Zmc2V0KHRoaXNSZWdpc3RlcigpLT52aXJ0dWFsUmVnaXN0ZXIoKSksIHRoaXNS
ZWdpc3RlcigpLAorICAgICAgICAgICAgUmVhZE9ubHksIExvY2FsOjpTcGVjaWFsTG9jYWwpOwor
ICAgIH0KKyAgICAKICAgICBpZiAoIXNob3VsZE9wdGltaXplTG9jYWxzKCkpCi0gICAgICAgIHJl
dHVybiBMb2NhbCgpOwotCisgICAgICAgIHJldHVybiBWYXJpYWJsZShwcm9wZXJ0eSk7CisgICAg
CiAgICAgU3ltYm9sVGFibGVFbnRyeSBlbnRyeSA9IHN5bWJvbFRhYmxlKCkuZ2V0KHByb3BlcnR5
LmltcGwoKSk7CiAgICAgaWYgKGVudHJ5LmlzTnVsbCgpKQotICAgICAgICByZXR1cm4gTG9jYWwo
KTsKLQotCi0gICAgUmVnaXN0ZXJJRCogbG9jYWwgPSBjcmVhdGVMYXp5UmVnaXN0ZXJJZk5lY2Vz
c2FyeSgmcmVnaXN0ZXJGb3IoZW50cnkuZ2V0SW5kZXgoKSkpOwotCi0gICAgaWYgKGlzQ2FwdHVy
ZWQobG9jYWwtPmluZGV4KCkpICYmIG1fbGV4aWNhbEVudmlyb25tZW50UmVnaXN0ZXIpCi0gICAg
ICAgIHJldHVybiBMb2NhbCgpOwotCi0gICAgcmV0dXJuIExvY2FsKGxvY2FsLCBlbnRyeS5nZXRB
dHRyaWJ1dGVzKCksIGlzQXJndW1lbnRzID8gTG9jYWw6OlNwZWNpYWxMb2NhbCA6IExvY2FsOjpO
b3JtYWxMb2NhbCk7CisgICAgICAgIHJldHVybiBWYXJpYWJsZShwcm9wZXJ0eSk7CisgICAgCisg
ICAgVmFyT2Zmc2V0IG9mZnNldCA9IGVudHJ5LnZhck9mZnNldCgpOworICAgIAorICAgIGlmIChv
ZmZzZXQuaXNTY29wZSgpICYmIG1fbG9jYWxTY29wZURlcHRoKSB7CisgICAgICAgIC8vIEZJWE1F
OiBXZSBzaG91bGQgYmUgYWJsZSB0byBzdGF0aWNhbGx5IHJlc29sdmUgdGhyb3VnaCBvdXIgbG9j
YWwgc2NvcGVzLgorICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTQxODg1CisgICAgICAgIHJldHVybiBWYXJpYWJsZShwcm9wZXJ0eSk7CisgICAgfQor
ICAgIAorICAgIFJlZ2lzdGVySUQqIGxvY2FsOworICAgIGlmIChvZmZzZXQuaXNTdGFjaygpKQor
ICAgICAgICBsb2NhbCA9ICZyZWdpc3RlckZvcihvZmZzZXQuc3RhY2tPZmZzZXQoKS5vZmZzZXQo
KSk7CisgICAgZWxzZQorICAgICAgICBsb2NhbCA9IG51bGxwdHI7CisgICAgCisgICAgcmV0dXJu
IFZhcmlhYmxlKHByb3BlcnR5LCB2YXJPZmZzZXQsIGxvY2FsLCBlbnRyeS5nZXRBdHRyaWJ1dGVz
KCksIExvY2FsOjpOb3JtYWxMb2NhbCk7CiB9CiAKLUxvY2FsIEJ5dGVjb2RlR2VuZXJhdG9yOjpj
b25zdExvY2FsKGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5KQorVmFyaWFibGUgQnl0ZWNvZGVH
ZW5lcmF0b3I6Omhhc1ZhcmlhYmxlRGlyZWN0KGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5KQog
ewotICAgIGlmIChtX2NvZGVUeXBlICE9IEZ1bmN0aW9uQ29kZSkKLSAgICAgICAgcmV0dXJuIExv
Y2FsKCk7CisgICAgQVNTRVJUKHByb3BlcnR5ICE9IHByb3BlcnR5TmFtZXMoKS50aGlzSWRlbnRp
Zmllcik7CisgICAgCisgICAgcmV0dXJuICFzeW1ib2xUYWJsZSgpLmdldChwcm9wZXJ0eS5pbXBs
KCkpLmlzTnVsbCgpOworfQogCit2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpjcmVhdGVWYXJpYWJs
ZSgKKyAgICBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eSwgVmFyS2luZCB2YXJLaW5kLCBDb25z
dGFudE1vZGUgY29uc3RhbnRNb2RlKQoreworICAgIEFTU0VSVChwcm9wZXJ0eSAhPSBwcm9wZXJ0
eU5hbWVzKCkudGhpc0lkZW50aWZpZXIpOworICAgIAorICAgIENvbmN1cnJlbnRKSVRMb2NrZXIg
bG9ja2VyKHN5bWJvbFRhYmxlKCkubV9sb2NrKTsKICAgICBTeW1ib2xUYWJsZUVudHJ5IGVudHJ5
ID0gc3ltYm9sVGFibGUoKS5nZXQocHJvcGVydHkuaW1wbCgpKTsKLSAgICBpZiAoZW50cnkuaXNO
dWxsKCkpCi0gICAgICAgIHJldHVybiBMb2NhbCgpOwotCi0gICAgUmVnaXN0ZXJJRCogbG9jYWwg
PSBjcmVhdGVMYXp5UmVnaXN0ZXJJZk5lY2Vzc2FyeSgmcmVnaXN0ZXJGb3IoZW50cnkuZ2V0SW5k
ZXgoKSkpOwotCi0gICAgYm9vbCBpc0FyZ3VtZW50cyA9IHByb3BlcnR5ID09IHByb3BlcnR5TmFt
ZXMoKS5hcmd1bWVudHM7Ci0gICAgaWYgKGlzQ2FwdHVyZWQobG9jYWwtPmluZGV4KCkpICYmIG1f
bGV4aWNhbEVudmlyb25tZW50UmVnaXN0ZXIpCi0gICAgICAgIHJldHVybiBMb2NhbCgpOworICAg
IAorICAgIGlmICghZW50cnkuaXNOdWxsKCkpIHsKKyAgICAgICAgLy8gRG8gc29tZSBjaGVja3Mg
dG8gZW5zdXJlIHRoYXQgdGhlIHZhcmlhYmxlIHdlJ3JlIGJlaW5nIGFza2VkIHRvIGNyZWF0ZSBp
cyBzdWZmaWNpZW50bHkKKyAgICAgICAgLy8gY29tcGF0aWJsZSB3aXRoIHRoZSBvbmUgd2UgaGF2
ZSBhbHJlYWR5IGNyZWF0ZWQuCiAKLSAgICByZXR1cm4gTG9jYWwobG9jYWwsIGVudHJ5LmdldEF0
dHJpYnV0ZXMoKSwgaXNBcmd1bWVudHMgPyBMb2NhbDo6U3BlY2lhbExvY2FsIDogTG9jYWw6Ok5v
cm1hbExvY2FsKTsKKyAgICAgICAgVmFyT2Zmc2V0IG9mZnNldCA9IGVudHJ5LnZhck9mZnNldCgp
OworICAgICAgICAKKyAgICAgICAgLy8gV2UgY2FuJ3QgY2hhbmdlIG91ciBtaW5kcyBhYm91dCB3
aGV0aGVyIGl0J3MgY2FwdHVyZWQuCisgICAgICAgIFJFTEVBU0VfQVNTRVJUKG9mZnNldC5raW5k
KCkgPT0gdmFyS2luZCk7CisgICAgICAgIAorICAgICAgICAvLyBJdCdzIGZpbmUgdG8gZXhwZWN0
IGEgdmFyaWFibGUgdG8gYmUgY29uc3RhbnQgaWYgaXQgcHJldmlvdXNseSB3YXNuJ3QsIGJ1dCBp
dCdzIG5vdAorICAgICAgICAvLyBPSyBmb3IgYSBwcmV2aW91c2x5IGNvbnN0YW50IHZhcmlhYmxl
IHRvIGxhdGVyIGJlIGV4cGVjdGVkIHRvIGJlIG5vbi1jb25zdGFudC4gVGhpcyBhbGwKKyAgICAg
ICAgLy8gd29ya3Mgb3V0IGJlY2F1c2UgY29uc3RhbnRzIG9ubHkgY29tZSBpbnRvIHBsYXkgd2l0
aCBsb2NhbCB2YXJpYWJsZSBkZWNsYXJhdGlvbnMsIGFuZAorICAgICAgICAvLyB0aG9zZSBhcmUg
YWx3YXlzIGFkZGVkIGxhc3QuCisgICAgICAgIGlmIChjb25zdGFudE1vZGUgPT0gSXNWYXJpYWJs
ZSkKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFlbnRyeS5pc1JlYWRPbmx5KCkpOworICAg
ICAgICAKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBWYXJPZmZzZXQgdmFyT2Zm
c2V0OworICAgIGlmICh2YXJLaW5kID09IFNjb3BlVmFyS2luZCkKKyAgICAgICAgdmFyT2Zmc2V0
ID0gVmFyT2Zmc2V0KHN5bWJvbFRhYmxlKCkudGFrZU5leHRTY29wZU9mZnNldCgpKTsKKyAgICBl
bHNlIHsKKyAgICAgICAgQVNTRVJUKHZhcktpbmQgPT0gU3RhY2tWYXJLaW5kKTsKKyAgICAgICAg
dmFyT2Zmc2V0ID0gVmFyT2Zmc2V0KHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKG1fY2FsbGVlUmVn
aXN0ZXJzLnNpemUoKSkpOworICAgIH0KKyAgICBTeW1ib2xUYWJsZUVudHJ5IG5ld0VudHJ5KHZh
ck9mZnNldCwgY29uc3RhbnRNb2RlID09IElzQ29uc3RhbnQgPyBSZWFkT25seSA6IDApOworICAg
IHN5bWJvbFRhYmxlKCkuYWRkKGxvY2tlciwgaWRlbnQuaW1wbCgpLCBuZXdFbnRyeSk7CisgICAg
CisgICAgaWYgKHZhcktpbmQgPT0gU3RhY2tWYXJLaW5kKSB7CisgICAgICAgIFJlZ2lzdGVySUQq
IGxvY2FsID0gYWRkVmFyKCk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGxvY2FsLT5pbmRleCgp
ID09IHZhck9mZnNldC5zdGFja09mZnNldCgpLm9mZnNldCgpKTsKKyAgICB9CiB9CiAKIHZvaWQg
Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRDaGVja0hhc0luc3RhbmNlKFJlZ2lzdGVySUQqIGRzdCwg
UmVnaXN0ZXJJRCogdmFsdWUsIFJlZ2lzdGVySUQqIGJhc2UsIExhYmVsKiB0YXJnZXQpCkBAIC0x
MjU1LDg4ICsxMjUxLDEzOSBAQCBSZXNvbHZlVHlwZSBCeXRlY29kZUdlbmVyYXRvcjo6cmVzb2x2
ZVR5CiAgICAgcmV0dXJuIEdsb2JhbFByb3BlcnR5OwogfQogCi1SZWdpc3RlcklEKiBCeXRlY29k
ZUdlbmVyYXRvcjo6ZW1pdFJlc29sdmVTY29wZShSZWdpc3RlcklEKiBkc3QsIGNvbnN0IElkZW50
aWZpZXImIGlkZW50aWZpZXIsIFJlc29sdmVTY29wZUluZm8mIGluZm8pCitSZWdpc3RlcklEKiBC
eXRlY29kZUdlbmVyYXRvcjo6ZW1pdFJlc29sdmVTY29wZShSZWdpc3RlcklEKiBkc3QsIGNvbnN0
IFZhcmlhYmxlJiB2YXJpYWJsZSkKIHsKLSAgICBpZiAobV9zeW1ib2xUYWJsZSAmJiBtX2NvZGVU
eXBlID09IEZ1bmN0aW9uQ29kZSAmJiAhbV9sb2NhbFNjb3BlRGVwdGgpIHsKLSAgICAgICAgU3lt
Ym9sVGFibGVFbnRyeSBlbnRyeSA9IG1fc3ltYm9sVGFibGUtPmdldChpZGVudGlmaWVyLmltcGwo
KSk7Ci0gICAgICAgIGlmICghZW50cnkuaXNOdWxsKCkpIHsKLSAgICAgICAgICAgIGluZm8gPSBS
ZXNvbHZlU2NvcGVJbmZvKGVudHJ5LmdldEluZGV4KCkpOwotICAgICAgICAgICAgcmV0dXJuIHNj
b3BlUmVnaXN0ZXIoKTsKLSAgICAgICAgfQorICAgIHN3aXRjaCAodmFyaWFibGUudmFyT2Zmc2V0
KCkua2luZCgpKSB7CisgICAgY2FzZSBTdGFja09mZnNldDoKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgICAgIAorICAgIGNhc2UgQ2FwdHVyZWRBcmd1bWVudEtpbmQ6CisgICAgICAgIHJl
dHVybiBhcmd1bWVudHNSZWdpc3RlcigpOworICAgICAgICAKKyAgICBjYXNlIFNjb3BlT2Zmc2V0
OgorICAgICAgICByZXR1cm4gc2NvcGVSZWdpc3RlcigpOworICAgICAgICAKKyAgICBjYXNlIElu
dmFsaWRWYXJLaW5kOgorICAgICAgICAvLyBJbmRpY2F0ZXMgbm9uLWxvY2FsIHJlc29sdXRpb24u
CisgICAgICAgIAorICAgICAgICBBU1NFUlQoIW1fc3ltYm9sVGFibGUgfHwgIW1fc3ltYm9sVGFi
bGUtPmNvbnRhaW5zKGlkZW50aWZpZXIuaW1wbCgpKSB8fCByZXNvbHZlVHlwZSgpID09IER5bmFt
aWMpOworICAgICAgICAKKyAgICAgICAgLy8gcmVzb2x2ZV9zY29wZSBkc3QsIGlkLCBSZXNvbHZl
VHlwZSwgZGVwdGgKKyAgICAgICAgZW1pdE9wY29kZShvcF9yZXNvbHZlX3Njb3BlKTsKKyAgICAg
ICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGtpbGwoZHN0KSk7CisgICAgICAgIGluc3RydWN0aW9u
cygpLmFwcGVuZChzY29wZVJlZ2lzdGVyKCktPmluZGV4KCkpOworICAgICAgICBpbnN0cnVjdGlv
bnMoKS5hcHBlbmQoYWRkQ29uc3RhbnQodmFyaWFibGUuaWRlbnQoKSkpOworICAgICAgICBpbnN0
cnVjdGlvbnMoKS5hcHBlbmQocmVzb2x2ZVR5cGUoKSk7CisgICAgICAgIGluc3RydWN0aW9ucygp
LmFwcGVuZCgwKTsKKyAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKDApOworICAgICAgICBy
ZXR1cm4gZHN0OwogICAgIH0KLQotICAgIEFTU0VSVCghbV9zeW1ib2xUYWJsZSB8fCAhbV9zeW1i
b2xUYWJsZS0+Y29udGFpbnMoaWRlbnRpZmllci5pbXBsKCkpIHx8IHJlc29sdmVUeXBlKCkgPT0g
RHluYW1pYyk7Ci0KLSAgICBtX2NvZGVCbG9jay0+YWRkUHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlv
bihpbnN0cnVjdGlvbnMoKS5zaXplKCkpOwotCi0gICAgLy8gcmVzb2x2ZV9zY29wZSBkc3QsIGlk
LCBSZXNvbHZlVHlwZSwgZGVwdGgKLSAgICBlbWl0T3Bjb2RlKG9wX3Jlc29sdmVfc2NvcGUpOwot
ICAgIGRzdCA9IHRlbXBEZXN0aW5hdGlvbihkc3QpOwotICAgIGluc3RydWN0aW9ucygpLmFwcGVu
ZChraWxsKGRzdCkpOwotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChzY29wZVJlZ2lzdGVyKCkt
PmluZGV4KCkpOwotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChhZGRDb25zdGFudChpZGVudGlm
aWVyKSk7Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHJlc29sdmVUeXBlKCkpOwotICAgIGlu
c3RydWN0aW9ucygpLmFwcGVuZCgwKTsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoMCk7Ci0g
ICAgcmV0dXJuIGRzdDsKKyAgICAKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgIHJldHVybiBudWxscHRyOwogfQogCi0KLVJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9y
OjplbWl0UmVzb2x2ZUNvbnN0YW50TG9jYWwoUmVnaXN0ZXJJRCogZHN0LCBjb25zdCBJZGVudGlm
aWVyJiBpZGVudGlmaWVyLCBSZXNvbHZlU2NvcGVJbmZvJiBpbmZvKQorUmVnaXN0ZXJJRCogQnl0
ZWNvZGVHZW5lcmF0b3I6OmVtaXRHZXRGcm9tU2NvcGUoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3Rl
cklEKiBzY29wZSwgY29uc3QgVmFyaWFibGUmIHZhcmlhYmxlLCBSZXNvbHZlTW9kZSByZXNvbHZl
TW9kZSkKIHsKLSAgICBpZiAoIW1fc3ltYm9sVGFibGUgfHwgbV9jb2RlVHlwZSAhPSBGdW5jdGlv
bkNvZGUpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgU3ltYm9sVGFibGVFbnRyeSBl
bnRyeSA9IG1fc3ltYm9sVGFibGUtPmdldChpZGVudGlmaWVyLmltcGwoKSk7Ci0gICAgaWYgKGVu
dHJ5LmlzTnVsbCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBpbmZvID0gUmVzb2x2
ZVNjb3BlSW5mbyhlbnRyeS5nZXRJbmRleCgpKTsKLSAgICByZXR1cm4gZW1pdE1vdmUoZHN0LCBt
X2xleGljYWxFbnZpcm9ubWVudFJlZ2lzdGVyKTsKLQorICAgIHN3aXRjaCAodmFyaWFibGUudmFy
T2Zmc2V0KCkua2luZCgpKSB7CisgICAgY2FzZSBTdGFja09mZnNldDoKKyAgICAgICAgcmV0dXJu
IGVtaXRNb3ZlKGtpbGwoZHN0KSwgdmFyaWFibGUubG9jYWwoKSk7CisgICAgICAgIAorICAgIGNh
c2UgQ2FwdHVyZWRBcmd1bWVudHNPZmZzZXQ6CisgICAgICAgIEFTU0VSVChzY29wZSA9PSBhcmd1
bWVudHNSZWdpc3RlcigpKTsKKyAgICAgICAgVW5saW5rZWRWYWx1ZVByb2ZpbGUgcHJvZmlsZSA9
IGVtaXRQcm9maWxlZE9wY29kZShvcF9nZXRfZnJvbV9hcmd1bWVudHMpOworICAgICAgICBpbnN0
cnVjdGlvbnMoKS5hcHBlbmQoa2lsbChkc3QpKTsKKyAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBw
ZW5kKHNjb3BlLT5pbmRleCgpKTsKKyAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHZhcmlh
YmxlLnZhck9mZnNldCgpLmNhcHR1cmVkQXJndW1lbnRzT2Zmc2V0KCkub2Zmc2V0KCkpOworICAg
ICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQocHJvZmlsZSk7CisgICAgICAgIHJldHVybiBkc3Q7
CisgICAgICAgIAorICAgIGNhc2UgU2NvcGVPZmZzZXQ6CisgICAgY2FzZSBJbnZhbGlkVmFyS2lu
ZDoKKyAgICAgICAgbV9jb2RlQmxvY2stPmFkZFByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb24oaW5z
dHJ1Y3Rpb25zKCkuc2l6ZSgpKTsKKyAgICAgICAgCisgICAgICAgIC8vIGdldF9mcm9tX3Njb3Bl
IGRzdCwgc2NvcGUsIGlkLCBSZXNvbHZlTW9kZUFuZFR5cGUsIFN0cnVjdHVyZSwgT3BlcmFuZAor
ICAgICAgICBVbmxpbmtlZFZhbHVlUHJvZmlsZSBwcm9maWxlID0gZW1pdFByb2ZpbGVkT3Bjb2Rl
KG9wX2dldF9mcm9tX3Njb3BlKTsKKyAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGtpbGwo
ZHN0KSk7CisgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChzY29wZS0+aW5kZXgoKSk7Cisg
ICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChhZGRDb25zdGFudCh2YXJpYWJsZS5pZGVudGlm
aWVyKCkpKTsKKyAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKFJlc29sdmVNb2RlQW5kVHlw
ZShyZXNvbHZlTW9kZSwgdmFyaWFibGUudmFyT2Zmc2V0KCkuaXNTY29wZSgpID8gTG9jYWxDbG9z
dXJlVmFyIDogcmVzb2x2ZVR5cGUoKSkub3BlcmFuZCgpKTsKKyAgICAgICAgaW5zdHJ1Y3Rpb25z
KCkuYXBwZW5kKDApOworICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQodmFyaWFibGUudmFy
T2Zmc2V0KCkuaXNTY29wZSgpID8gdmFyaWFibGUudmFyT2Zmc2V0KCkuc2NvcGVPZmZzZXQoKS5v
ZmZzZXQoKSA6IDApOworICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQocHJvZmlsZSk7Cisg
ICAgICAgIHJldHVybiBkc3Q7CisgICAgfQorICAgIAorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiB9CiAKLVJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0R2V0RnJv
bVNjb3BlKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogc2NvcGUsIGNvbnN0IElkZW50aWZp
ZXImIGlkZW50aWZpZXIsIFJlc29sdmVNb2RlIHJlc29sdmVNb2RlLCBjb25zdCBSZXNvbHZlU2Nv
cGVJbmZvJiBpbmZvKQorUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRQdXRUb1Nj
b3BlKFJlZ2lzdGVySUQqIHNjb3BlLCBjb25zdCBWYXJpYWJsZSYgdmFyaWFibGUsIFJlZ2lzdGVy
SUQqIHZhbHVlLCBSZXNvbHZlTW9kZSByZXNvbHZlTW9kZSkKIHsKLSAgICBtX2NvZGVCbG9jay0+
YWRkUHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbihpbnN0cnVjdGlvbnMoKS5zaXplKCkpOwotCi0g
ICAgLy8gZ2V0X2Zyb21fc2NvcGUgZHN0LCBzY29wZSwgaWQsIFJlc29sdmVNb2RlQW5kVHlwZSwg
U3RydWN0dXJlLCBPcGVyYW5kCi0gICAgVW5saW5rZWRWYWx1ZVByb2ZpbGUgcHJvZmlsZSA9IGVt
aXRQcm9maWxlZE9wY29kZShvcF9nZXRfZnJvbV9zY29wZSk7Ci0gICAgaW5zdHJ1Y3Rpb25zKCku
YXBwZW5kKGtpbGwoZHN0KSk7Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHNjb3BlLT5pbmRl
eCgpKTsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYWRkQ29uc3RhbnQoaWRlbnRpZmllcikp
OwotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChSZXNvbHZlTW9kZUFuZFR5cGUocmVzb2x2ZU1v
ZGUsIGluZm8uaXNMb2NhbCgpID8gTG9jYWxDbG9zdXJlVmFyIDogcmVzb2x2ZVR5cGUoKSkub3Bl
cmFuZCgpKTsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoMCk7Ci0gICAgaW5zdHJ1Y3Rpb25z
KCkuYXBwZW5kKGluZm8ubG9jYWxJbmRleCgpKTsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQo
cHJvZmlsZSk7Ci0gICAgcmV0dXJuIGRzdDsKKyAgICBzd2l0Y2ggKHZhcmlhYmxlLnZhck9mZnNl
dCgpLmtpbmQoKSkgeworICAgIGNhc2UgU3RhY2tPZmZzZXQ6CisgICAgICAgIGVtaXRNb3ZlKHZh
cmlhYmxlLmxvY2FsKCksIHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHZhbHVlOworICAgICAgICAK
KyAgICBjYXNlIENhcHR1cmVkQXJndW1lbnRzT2Zmc2V0OgorICAgICAgICBBU1NFUlQoc2NvcGUg
PT0gYXJndW1lbnRzUmVnaXN0ZXIoKSk7CisgICAgICAgIGVtaXRPcGNvZGUob3BfcHV0X3RvX2Fy
Z3VtZW50cyk7CisgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChzY29wZSk7CisgICAgICAg
IGluc3RydWN0aW9ucygpLmFwcGVuZCh2YXJpYWJsZS52YXJPZmZzZXQoKS5jYXB0dXJlZEFyZ3Vt
ZW50c09mZnNldCgpLm9mZnNldCgpKTsKKyAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHZh
bHVlLT5pbmRleCgpKTsKKyAgICAgICAgcmV0dXJuIHZhbHVlOworICAgICAgICAKKyAgICBjYXNl
IFNjb3BlT2Zmc2V0OgorICAgIGNhc2UgSW52YWxpZFZhcktpbmQ6IHsKKyAgICAgICAgbV9jb2Rl
QmxvY2stPmFkZFByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb24oaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgp
KTsKKyAgICAgICAgCisgICAgICAgIC8vIHB1dF90b19zY29wZSBzY29wZSwgaWQsIHZhbHVlLCBS
ZXNvbHZlTW9kZUFuZFR5cGUsIFN0cnVjdHVyZSwgT3BlcmFuZAorICAgICAgICBlbWl0T3Bjb2Rl
KG9wX3B1dF90b19zY29wZSk7CisgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChzY29wZS0+
aW5kZXgoKSk7CisgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChhZGRDb25zdGFudCh2YXJp
YWJsZS5pZGVudCgpKSk7CisgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCh2YWx1ZS0+aW5k
ZXgoKSk7CisgICAgICAgIFNjb3BlT2Zmc2V0IG9mZnNldDsKKyAgICAgICAgaWYgKHZhcmlhYmxl
LnZhck9mZnNldCgpLmlzU2NvcGUoKSkgeworICAgICAgICAgICAgb2Zmc2V0ID0gdmFyaWFibGUu
dmFyT2Zmc2V0KCkuc2NvcGVPZmZzZXQoKTsKKyAgICAgICAgICAgIGluc3RydWN0aW9ucygpLmFw
cGVuZChSZXNvbHZlTW9kZUFuZFR5cGUocmVzb2x2ZU1vZGUsIExvY2FsQ2xvc3VyZVZhcikub3Bl
cmFuZCgpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VSVChyZXNvbHZlVHlw
ZSgpICE9IExvY2FsQ2xvc3VyZVZhcik7CisgICAgICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBl
bmQoUmVzb2x2ZU1vZGVBbmRUeXBlKHJlc29sdmVNb2RlLCByZXNvbHZlVHlwZSgpKS5vcGVyYW5k
KCkpOworICAgICAgICB9CisgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCgwKTsKKyAgICAg
ICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKG9mZnNldC5pc1ZhbGlkKCkgPyBvZmZzZXQub2Zmc2V0
KCkgOiAwKTsKKyAgICAgICAgcmV0dXJuIHZhbHVlOworICAgIH0gfQorICAgIAorICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKLVJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJh
dG9yOjplbWl0UHV0VG9TY29wZShSZWdpc3RlcklEKiBzY29wZSwgY29uc3QgSWRlbnRpZmllciYg
aWRlbnRpZmllciwgUmVnaXN0ZXJJRCogdmFsdWUsIFJlc29sdmVNb2RlIHJlc29sdmVNb2RlLCBj
b25zdCBSZXNvbHZlU2NvcGVJbmZvJiBpbmZvKQorUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0
b3I6OmluaXRpYWxpemVWYXJpYWJsZShjb25zdCBWYXJpYWJsZSYgdmFyaWFibGUsIFJlZ2lzdGVy
SUQqIHZhbHVlKQogewotICAgIG1fY29kZUJsb2NrLT5hZGRQcm9wZXJ0eUFjY2Vzc0luc3RydWN0
aW9uKGluc3RydWN0aW9ucygpLnNpemUoKSk7Ci0KLSAgICAvLyBwdXRfdG9fc2NvcGUgc2NvcGUs
IGlkLCB2YWx1ZSwgUmVzb2x2ZU1vZGVBbmRUeXBlLCBTdHJ1Y3R1cmUsIE9wZXJhbmQKLSAgICBl
bWl0T3Bjb2RlKG9wX3B1dF90b19zY29wZSk7Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHNj
b3BlLT5pbmRleCgpKTsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYWRkQ29uc3RhbnQoaWRl
bnRpZmllcikpOwotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCh2YWx1ZS0+aW5kZXgoKSk7Ci0g
ICAgaWYgKGluZm8uaXNMb2NhbCgpKSB7Ci0gICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChS
ZXNvbHZlTW9kZUFuZFR5cGUocmVzb2x2ZU1vZGUsIExvY2FsQ2xvc3VyZVZhcikub3BlcmFuZCgp
KTsKLSAgICAgICAgaW50IG9wZXJhbmQgPSByZWdpc3RlckZvcihpbmZvLmxvY2FsSW5kZXgoKSku
aW5kZXgoKTsKLSAgICAgICAgYm9vbCBpc1dhdGNoYWJsZVZhcmlhYmxlID0gaGFzV2F0Y2hhYmxl
VmFyaWFibGUob3BlcmFuZCk7Ci0gICAgICAgIEFTU0VSVCghaXNXYXRjaGFibGVWYXJpYWJsZSB8
fCB3YXRjaGFibGVWYXJpYWJsZUlkZW50aWZpZXIob3BlcmFuZCkgPT0gaWRlbnRpZmllcik7Ci0g
ICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChpc1dhdGNoYWJsZVZhcmlhYmxlKTsKLSAgICB9
IGVsc2UgewotICAgICAgICBBU1NFUlQocmVzb2x2ZVR5cGUoKSAhPSBMb2NhbENsb3N1cmVWYXIp
OwotICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoUmVzb2x2ZU1vZGVBbmRUeXBlKHJlc29s
dmVNb2RlLCByZXNvbHZlVHlwZSgpKS5vcGVyYW5kKCkpOwotICAgICAgICBpbnN0cnVjdGlvbnMo
KS5hcHBlbmQoZmFsc2UpOworICAgIFJlZ2lzdGVySUQqIHNjb3BlOworICAgIHN3aXRjaCAodmFy
aWFibGUudmFyT2Zmc2V0KCkua2luZCgpKSB7CisgICAgY2FzZSBTdGFja09mZnNldDoKKyAgICAg
ICAgc2NvcGUgPSBudWxscHRyOworICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgY2FzZSBD
YXB0dXJlZEFyZ3VtZW50S2luZDoKKyAgICAgICAgc2NvcGUgPSBhcmd1bWVudHNSZWdpc3Rlcigp
OworICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgY2FzZSBTY29wZU9mZnNldDoKKyAgICAg
ICAgc2NvcGUgPSBzY29wZVJlZ2lzdGVyKCk7CisgICAgICAgIGJyZWFrOworICAgICAgICAKKyAg
ICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICBzY29wZSA9IG51bGxwdHI7CisgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBpbnN0cnVjdGlv
bnMoKS5hcHBlbmQoaW5mby5sb2NhbEluZGV4KCkpOwotICAgIHJldHVybiB2YWx1ZTsKKworICAg
IHJldHVybiBlbWl0UHV0VG9TY29wZShzY29wZSwgdmFyaWFibGUsIHZhbHVlLCBUaHJvd0lmTm90
Rm91bmQpOwogfQogCiBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEluc3RhbmNl
T2YoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiB2YWx1ZSwgUmVnaXN0ZXJJRCogYmFzZVBy
b3RvdHlwZSkKLXsgCit7CiAgICAgZW1pdE9wY29kZShvcF9pbnN0YW5jZW9mKTsKICAgICBpbnN0
cnVjdGlvbnMoKS5hcHBlbmQoZHN0LT5pbmRleCgpKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBl
bmQodmFsdWUtPmluZGV4KCkpOwpAQCAtMTYzOCwyNCArMTY4NSwxNSBAQCBSZWdpc3RlcklEKiBC
eXRlY29kZUdlbmVyYXRvcjo6ZW1pdE5ld0FyCiAKIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJh
dG9yOjplbWl0TmV3RnVuY3Rpb24oUmVnaXN0ZXJJRCogZHN0LCBGdW5jdGlvbkJvZHlOb2RlKiBm
dW5jdGlvbikKIHsKLSAgICByZXR1cm4gZW1pdE5ld0Z1bmN0aW9uSW50ZXJuYWwoZHN0LCBtX2Nv
ZGVCbG9jay0+YWRkRnVuY3Rpb25EZWNsKG1ha2VGdW5jdGlvbihmdW5jdGlvbikpLCBmYWxzZSk7
Ci19Ci0KLVJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TGF6eU5ld0Z1bmN0aW9u
KFJlZ2lzdGVySUQqIGRzdCwgRnVuY3Rpb25Cb2R5Tm9kZSogZnVuY3Rpb24pCi17Ci0gICAgRnVu
Y3Rpb25PZmZzZXRNYXA6OkFkZFJlc3VsdCBwdHIgPSBtX2Z1bmN0aW9uT2Zmc2V0cy5hZGQoZnVu
Y3Rpb24sIDApOwotICAgIGlmIChwdHIuaXNOZXdFbnRyeSkKLSAgICAgICAgcHRyLml0ZXJhdG9y
LT52YWx1ZSA9IG1fY29kZUJsb2NrLT5hZGRGdW5jdGlvbkRlY2wobWFrZUZ1bmN0aW9uKGZ1bmN0
aW9uKSk7Ci0gICAgcmV0dXJuIGVtaXROZXdGdW5jdGlvbkludGVybmFsKGRzdCwgcHRyLml0ZXJh
dG9yLT52YWx1ZSwgdHJ1ZSk7CisgICAgcmV0dXJuIGVtaXROZXdGdW5jdGlvbkludGVybmFsKGRz
dCwgbV9jb2RlQmxvY2stPmFkZEZ1bmN0aW9uRGVjbChtYWtlRnVuY3Rpb24oZnVuY3Rpb24pKSk7
CiB9CiAKLVJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TmV3RnVuY3Rpb25JbnRl
cm5hbChSZWdpc3RlcklEKiBkc3QsIHVuc2lnbmVkIGluZGV4LCBib29sIGRvTnVsbENoZWNrKQor
UmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXROZXdGdW5jdGlvbkludGVybmFsKFJl
Z2lzdGVySUQqIGRzdCwgdW5zaWduZWQgaW5kZXgpCiB7CiAgICAgZW1pdE9wY29kZShvcF9uZXdf
ZnVuYyk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGRzdC0+aW5kZXgoKSk7CiAgICAgaW5z
dHJ1Y3Rpb25zKCkuYXBwZW5kKHNjb3BlUmVnaXN0ZXIoKS0+aW5kZXgoKSk7CiAgICAgaW5zdHJ1
Y3Rpb25zKCkuYXBwZW5kKGluZGV4KTsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZG9OdWxs
Q2hlY2spOwogICAgIHJldHVybiBkc3Q7CiB9CiAKQEAgLTI1MDQsOSArMjU0Miw5IEBAIHZvaWQg
Qnl0ZWNvZGVHZW5lcmF0b3I6OnNldElzTnVtZXJpY0NvbXAKIAogYm9vbCBCeXRlY29kZUdlbmVy
YXRvcjo6aXNBcmd1bWVudE51bWJlcihjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgaW50IGFyZ3Vt
ZW50TnVtYmVyKQogewotICAgIFJlZ2lzdGVySUQqIHJlZ2lzdGVySUQgPSBsb2NhbChpZGVudCku
Z2V0KCk7Ci0gICAgaWYgKCFyZWdpc3RlcklEIHx8IHJlZ2lzdGVySUQtPmluZGV4KCkgPj0gMCkK
LSAgICAgICAgIHJldHVybiAwOworICAgIFJlZ2lzdGVySUQqIHJlZ2lzdGVySUQgPSB2YXJpYWJs
ZShpZGVudCkubG9jYWwoKTsKKyAgICBpZiAoIXJlZ2lzdGVySUQpCisgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgcmV0dXJuIHJlZ2lzdGVySUQtPmluZGV4KCkgPT0gQ2FsbEZyYW1lOjphcmd1
bWVudE9mZnNldChhcmd1bWVudE51bWJlcik7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgJKHJldmlz
aW9uIDE4MDg3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNv
ZGVHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMTgzLDU4ICsxODMsNTcgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIElzQ2FwdHVyZWQKICAgICB9OwogCi0gICAgY2xhc3MgTG9jYWwg
eworICAgIGNsYXNzIFZhcmlhYmxlIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIExvY2FsKCkKLSAg
ICAgICAgICAgIDogbV9sb2NhbCgwKQorICAgICAgICBlbnVtIFZhcmlhYmxlS2luZCB7IE5vcm1h
bFZhcmlhYmxlLCBTcGVjaWFsVmFyaWFibGUgfTsKKworICAgICAgICBWYXJpYWJsZSgpCisgICAg
ICAgICAgICA6IG1fb2Zmc2V0KCkKKyAgICAgICAgICAgICwgbV9sb2NhbChudWxscHRyKQogICAg
ICAgICAgICAgLCBtX2F0dHJpYnV0ZXMoMCkKLSAgICAgICAgICAgICwgbV9raW5kKE5vcm1hbExv
Y2FsKQorICAgICAgICAgICAgLCBtX2tpbmQoTm9ybWFsVmFyaWFibGUpCisgICAgICAgIHsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgVmFyaWFibGUoY29uc3QgSWRlbnRpZmllciYgaWRl
bnQpCisgICAgICAgICAgICA6IG1faWRlbnQoaWRlbnQpCisgICAgICAgICAgICAsIG1fbG9jYWwo
bnVsbHB0cikKKyAgICAgICAgICAgICwgbV9hdHRyaWJ1dGVzKDApCisgICAgICAgICAgICAsIG1f
a2luZChOb3JtYWxWYXJpYWJsZSkgLy8gVGhpcyBpcyBzb21ld2hhdCBtZWFuaW5nbGVzcyBoZXJl
IGZvciB0aGlzIGtpbmQgb2YgVmFyaWFibGUuCiAgICAgICAgIHsKICAgICAgICAgfQogCi0gICAg
ICAgIGVudW0gTG9jYWxLaW5kIHsgTm9ybWFsTG9jYWwsIFNwZWNpYWxMb2NhbCB9OwotCi0gICAg
ICAgIExvY2FsKFJlZ2lzdGVySUQqIGxvY2FsLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBMb2NhbEtp
bmQga2luZCkKLSAgICAgICAgICAgIDogbV9sb2NhbChsb2NhbCkKKyAgICAgICAgVmFyaWFibGUo
Y29uc3QgSWRlbnRpZmllciYgaWRlbnQsIFZhck9mZnNldCBvZmZzZXQsIFJlZ2lzdGVySUQqIGxv
Y2FsLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBMb2NhbEtpbmQga2luZCkKKyAgICAgICAgICAgIDog
bV9pZGVudChpZGVudCkKKyAgICAgICAgICAgICwgbV9vZmZzZXQob2Zmc2V0KQorICAgICAgICAg
ICAgLCBtX2xvY2FsKGxvY2FsKQogICAgICAgICAgICAgLCBtX2F0dHJpYnV0ZXMoYXR0cmlidXRl
cykKICAgICAgICAgICAgICwgbV9raW5kKGtpbmQpCiAgICAgICAgIHsKICAgICAgICAgfQogCi0g
ICAgICAgIG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiBtX2xvY2FsOyB9Ci0KLSAgICAg
ICAgUmVnaXN0ZXJJRCogZ2V0KCkgY29uc3QgeyByZXR1cm4gbV9sb2NhbDsgfQorICAgICAgICAv
LyBJZiBpdCdzIHVuc2V0LCB0aGVuIGl0IGlzIGEgbm9uLWxvY2FsbHktc2NvcGVkIHZhcmlhYmxl
LiBJZiBpdCBpcyBzZXQsIHRoZW4gaXQgY291bGQgYmUKKyAgICAgICAgLy8gYSBzdGFjayB2YXJp
YWJsZSwgYSBzY29wZWQgdmFyaWFibGUgaW4gdGhlIGxvY2FsIHNjb3BlLCBvciBhIHZhcmlhYmxl
IGNhcHR1cmVkIGluIHRoZQorICAgICAgICAvLyBkaXJlY3QgYXJndW1lbnRzIG9iamVjdC4KKyAg
ICAgICAgYm9vbCBpc1Jlc29sdmVkKCkgY29uc3QgeyByZXR1cm4gISFtX29mZnNldDsgfQorICAg
ICAgICAKKyAgICAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQoKSBjb25zdCB7IHJldHVybiBt
X2lkZW50OyB9CisgICAgICAgIAorICAgICAgICBWYXJPZmZzZXQgb2Zmc2V0KCkgY29uc3QgeyBy
ZXR1cm4gbV9vZmZzZXQ7IH0KKyAgICAgICAgYm9vbCBpc0xvY2FsKCkgY29uc3QgeyByZXR1cm4g
bV9vZmZzZXQuaXNTdGFjaygpOyB9CisgICAgICAgIFJlZ2lzdGVySUQqIGxvY2FsKCkgY29uc3Qg
eyByZXR1cm4gbV9sb2NhbDsgfQogCiAgICAgICAgIGJvb2wgaXNSZWFkT25seSgpIGNvbnN0IHsg
cmV0dXJuIG1fYXR0cmlidXRlcyAmIFJlYWRPbmx5OyB9Ci0gICAgICAgIGJvb2wgaXNTcGVjaWFs
KCkgY29uc3QgeyByZXR1cm4gbV9raW5kICE9IE5vcm1hbExvY2FsOyB9CisgICAgICAgIGJvb2wg
aXNTcGVjaWFsKCkgY29uc3QgeyByZXR1cm4gbV9raW5kICE9IE5vcm1hbFZhcmlhYmxlOyB9CiAK
ICAgICBwcml2YXRlOgorICAgICAgICBJZGVudGlmaWVyIG1faWRlbnQ7CisgICAgICAgIFZhck9m
ZmV0IG1fb2Zmc3Q7CiAgICAgICAgIFJlZ2lzdGVySUQqIG1fbG9jYWw7CiAgICAgICAgIHVuc2ln
bmVkIG1fYXR0cmlidXRlczsKICAgICAgICAgTG9jYWxLaW5kIG1fa2luZDsKICAgICB9OwogCi0g
ICAgc3RydWN0IFJlc29sdmVTY29wZUluZm8gewotICAgICAgICBSZXNvbHZlU2NvcGVJbmZvKCkK
LSAgICAgICAgICAgIDogbV9sb2NhbEluZGV4KDApCi0gICAgICAgICAgICAsIG1fcmVzb2x2ZVNj
b3BlS2luZChOb25Mb2NhbFNjb3BlKQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgICAgICBS
ZXNvbHZlU2NvcGVJbmZvKGludCBpbmRleCkKLSAgICAgICAgICAgIDogbV9sb2NhbEluZGV4KGlu
ZGV4KQotICAgICAgICAgICAgLCBtX3Jlc29sdmVTY29wZUtpbmQoTG9jYWxTY29wZSkKLSAgICAg
ICAgewotICAgICAgICB9Ci0KLSAgICAgICAgYm9vbCBpc0xvY2FsKCkgY29uc3QgeyByZXR1cm4g
bV9yZXNvbHZlU2NvcGVLaW5kID09IExvY2FsU2NvcGU7IH0KLSAgICAgICAgaW50IGxvY2FsSW5k
ZXgoKSBjb25zdCB7IHJldHVybiBtX2xvY2FsSW5kZXg7IH0KLQotICAgIHByaXZhdGU6Ci0gICAg
ICAgIGludCBtX2xvY2FsSW5kZXg7Ci0gICAgICAgIGVudW0geyBMb2NhbFNjb3BlLCBOb25Mb2Nh
bFNjb3BlIH0gbV9yZXNvbHZlU2NvcGVLaW5kOwotICAgIH07Ci0KICAgICBzdHJ1Y3QgVHJ5UmFu
Z2UgewogICAgICAgICBSZWZQdHI8TGFiZWw+IHN0YXJ0OwogICAgICAgICBSZWZQdHI8TGFiZWw+
IGVuZDsKQEAgLTI4NSwxMiArMjg0LDEyIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBib29s
IGlzQ2FwdHVyZWQoaW50IG9wZXJhbmQpOwogICAgICAgICBDYXB0dXJlTW9kZSBjYXB0dXJlTW9k
ZShpbnQgb3BlcmFuZCkgeyByZXR1cm4gaXNDYXB0dXJlZChvcGVyYW5kKSA/IElzQ2FwdHVyZWQg
OiBOb3RDYXB0dXJlZDsgfQogICAgICAgICAKLSAgICAgICAgTG9jYWwgbG9jYWwoY29uc3QgSWRl
bnRpZmllciYpOwotICAgICAgICBMb2NhbCBjb25zdExvY2FsKGNvbnN0IElkZW50aWZpZXImKTsK
LQorICAgICAgICBWYXJpYWJsZSB2YXJpYWJsZShjb25zdCBJZGVudGlmaWVyJik7CisgICAgICAg
IHZvaWQgY3JlYXRlVmFyaWFibGUoY29uc3QgSWRlbnRpZmllciYsIFZhcktpbmQsIENvbnN0YW50
TW9kZSk7IC8vIENyZWF0ZXMgdGhlIHZhcmlhYmxlLCBvciBhc3NlcnRzIHRoYXQgdGhlIGFscmVh
ZHktY3JlYXRlZCB2YXJpYWJsZSBpcyBzdWZmaWNpZW50bHkgY29tcGF0aWJsZS4KKyAgICAgICAg
CiAgICAgICAgIC8vIFJldHVybnMgdGhlIHJlZ2lzdGVyIHN0b3JpbmcgInRoaXMiCiAgICAgICAg
IFJlZ2lzdGVySUQqIHRoaXNSZWdpc3RlcigpIHsgcmV0dXJuICZtX3RoaXNSZWdpc3RlcjsgfQot
ICAgICAgICAKKyAgICAgICAgUmVnaXN0ZXJJRCogYXJndW1lbnRzUmVnaXN0ZXIoKSB7IHJldHVy
biBtX2FyZ3VtZW50c1JlZ2lzdGVyOyB9CiAgICAgICAgIFJlZ2lzdGVySUQqIHNjb3BlUmVnaXN0
ZXIoKSB7IHJldHVybiBtX3Njb3BlUmVnaXN0ZXI7IH0KIAogICAgICAgICAvLyBSZXR1cm5zIHRo
ZSBuZXh0IGF2YWlsYWJsZSB0ZW1wb3JhcnkgcmVnaXN0ZXIuIFJlZ2lzdGVycyByZXR1cm5lZCBi
eQpAQCAtNDU2LDggKzQ1NSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBSZWdpc3RlcklE
KiBlbWl0TmV3QXJyYXkoUmVnaXN0ZXJJRCogZHN0LCBFbGVtZW50Tm9kZSosIHVuc2lnbmVkIGxl
bmd0aCk7IC8vIHN0b3BzIGF0IGZpcnN0IGVsaXNpb24KIAogICAgICAgICBSZWdpc3RlcklEKiBl
bWl0TmV3RnVuY3Rpb24oUmVnaXN0ZXJJRCogZHN0LCBGdW5jdGlvbkJvZHlOb2RlKik7Ci0gICAg
ICAgIFJlZ2lzdGVySUQqIGVtaXRMYXp5TmV3RnVuY3Rpb24oUmVnaXN0ZXJJRCogZHN0LCBGdW5j
dGlvbkJvZHlOb2RlKiBib2R5KTsKLSAgICAgICAgUmVnaXN0ZXJJRCogZW1pdE5ld0Z1bmN0aW9u
SW50ZXJuYWwoUmVnaXN0ZXJJRCogZHN0LCB1bnNpZ25lZCBpbmRleCwgYm9vbCBzaG91bGROdWxs
Q2hlY2spOworICAgICAgICBSZWdpc3RlcklEKiBlbWl0TmV3RnVuY3Rpb25JbnRlcm5hbChSZWdp
c3RlcklEKiBkc3QsIHVuc2lnbmVkIGluZGV4KTsKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdE5l
d0Z1bmN0aW9uRXhwcmVzc2lvbihSZWdpc3RlcklEKiBkc3QsIEZ1bmNFeHByTm9kZSogZnVuYyk7
CiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXROZXdSZWdFeHAoUmVnaXN0ZXJJRCogZHN0LCBSZWdF
eHAqKTsKIApAQCAtNDc1LDcgKzQ3Myw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBSZWdp
c3RlcklEKiBlbWl0SW5pdEdsb2JhbENvbnN0KGNvbnN0IElkZW50aWZpZXImLCBSZWdpc3RlcklE
KiB2YWx1ZSk7CiAKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdEdldEJ5SWQoUmVnaXN0ZXJJRCog
ZHN0LCBSZWdpc3RlcklEKiBiYXNlLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eSk7Ci0gICAg
ICAgIFJlZ2lzdGVySUQqIGVtaXRHZXRBcmd1bWVudHNMZW5ndGgoUmVnaXN0ZXJJRCogZHN0LCBS
ZWdpc3RlcklEKiBiYXNlKTsKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdFB1dEJ5SWQoUmVnaXN0
ZXJJRCogYmFzZSwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHksIFJlZ2lzdGVySUQqIHZhbHVl
KTsKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdERpcmVjdFB1dEJ5SWQoUmVnaXN0ZXJJRCogYmFz
ZSwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHksIFJlZ2lzdGVySUQqIHZhbHVlKTsKICAgICAg
ICAgUmVnaXN0ZXJJRCogZW1pdERlbGV0ZUJ5SWQoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklE
KiBiYXNlLCBjb25zdCBJZGVudGlmaWVyJik7CkBAIC01MDIsMTQgKzQ5OSwxMSBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0VG9QcmltaXRpdmUoUmVnaXN0ZXJJRCogZHN0LCBS
ZWdpc3RlcklEKiBzcmMpOwogCiAgICAgICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKCk7Ci0g
ICAgICAgIFJlZ2lzdGVySUQqIGVtaXRSZXNvbHZlQ29uc3RhbnRMb2NhbChSZWdpc3RlcklEKiBk
c3QsIGNvbnN0IElkZW50aWZpZXImLCBSZXNvbHZlU2NvcGVJbmZvJik7Ci0gICAgICAgIC8vIENh
bGxzIHRlbXBEZXN0aW5hdGlvbihkc3QpLCBzbyBpdCdzIHNhZmUgdG8gcGFzcyBudWxscHRyLiBJ
dCdzIGFsc28gcmVkdW5kYW50IHRvIGNhbGwKLSAgICAgICAgLy8gdGVtcERlc3RpbmF0aW9uKGRz
dCkgb24gdGhlIHRoaW5nIHlvdSBwYXNzIGFzIHRoZSBkZXN0aW5hdGlvbi4gVGhlIHJlYXNvbiB3
aHkgdGhpcwotICAgICAgICAvLyBjYWxscyB0ZW1wRGVzdGluYXRpb24oKSBmb3IgeW91IGlzIHRo
YXQgaXQgbWF5IG5vdCBuZWVkIGEgc3BhcmUgcmVnaXN0ZXIuIEl0IG1heSByZXR1cm4KLSAgICAg
ICAgLy8gc2NvcGVSZWdpc3RlcigpIGRpcmVjdGx5LiBTbywgeW91IGNhbm5vdCByZWx5IG9uIHRo
aXMgc3RvcmluZyB0byBkc3QuCi0gICAgICAgIFJlZ2lzdGVySUQqIGVtaXRSZXNvbHZlU2NvcGUo
UmVnaXN0ZXJJRCogZHN0LCBjb25zdCBJZGVudGlmaWVyJiwgUmVzb2x2ZVNjb3BlSW5mbyYpOwot
ICAgICAgICBSZWdpc3RlcklEKiBlbWl0R2V0RnJvbVNjb3BlKFJlZ2lzdGVySUQqIGRzdCwgUmVn
aXN0ZXJJRCogc2NvcGUsIGNvbnN0IElkZW50aWZpZXImLCBSZXNvbHZlTW9kZSwgY29uc3QgUmVz
b2x2ZVNjb3BlSW5mbyYpOwotICAgICAgICBSZWdpc3RlcklEKiBlbWl0UHV0VG9TY29wZShSZWdp
c3RlcklEKiBzY29wZSwgY29uc3QgSWRlbnRpZmllciYsIFJlZ2lzdGVySUQqIHZhbHVlLCBSZXNv
bHZlTW9kZSwgY29uc3QgUmVzb2x2ZVNjb3BlSW5mbyYpOworICAgICAgICBSZWdpc3RlcklEKiBl
bWl0UmVzb2x2ZUNvbnN0YW50TG9jYWwoUmVnaXN0ZXJJRCogZHN0LCBjb25zdCBWYXJpYWJsZSYp
OworICAgICAgICBSZWdpc3RlcklEKiBlbWl0UmVzb2x2ZVNjb3BlKFJlZ2lzdGVySUQqIGRzdCwg
Y29uc3QgVmFyaWFibGUmKTsKKyAgICAgICAgUmVnaXN0ZXJJRCogZW1pdEdldEZyb21TY29wZShS
ZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHNjb3BlLCBjb25zdCBWYXJpYWJsZSYsIFJlc29s
dmVNb2RlKTsKKyAgICAgICAgUmVnaXN0ZXJJRCogZW1pdFB1dFRvU2NvcGUoUmVnaXN0ZXJJRCog
c2NvcGUsIGNvbnN0IFZhcmlhYmxlJiwgUmVnaXN0ZXJJRCogdmFsdWUsIFJlc29sdmVNb2RlKTsK
KyAgICAgICAgUmVnaXN0ZXJJRCogaW5pdGlhbGl6ZVZhcmlhYmxlKGNvbnN0IFZhcmlhYmxlJiwg
UmVnaXN0ZXJJRCogdmFsdWUpOwogCiAgICAgICAgIFBhc3NSZWZQdHI8TGFiZWw+IGVtaXRMYWJl
bChMYWJlbCopOwogICAgICAgICB2b2lkIGVtaXRMb29wSGludCgpOwpAQCAtNjE1LDExICs2MDks
NyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBSZWdpc3RlcklEKiBuZXdSZWdpc3Rlcigp
OwogCi0gICAgICAgIC8vIEFkZHMgYSB2YXIgc2xvdCBhbmQgbWFwcyBpdCB0byB0aGUgbmFtZSBp
ZGVudCBpbiBzeW1ib2xUYWJsZSgpLgotICAgICAgICBlbnVtIFdhdGNoTW9kZSB7IElzV2F0Y2hh
YmxlLCBOb3RXYXRjaGFibGUgfTsKLSAgICAgICAgUmVnaXN0ZXJJRCogYWRkVmFyKGNvbnN0IElk
ZW50aWZpZXImLCBDb25zdGFudE1vZGUsIFdhdGNoTW9kZSk7Ci0KLSAgICAgICAgLy8gQWRkcyBh
biBhbm9ueW1vdXMgdmFyIHNsb3QuIFRvIGdpdmUgdGhpcyBzbG90IGEgbmFtZSwgYWRkIGl0IHRv
IHN5bWJvbFRhYmxlKCkuCisgICAgICAgIC8vIEFkZHMgYW4gYW5vbnltb3VzIGxvY2FsIHZhciBz
bG90LiBUbyBnaXZlIHRoaXMgc2xvdCBhIG5hbWUsIGFkZCBpdCB0byBzeW1ib2xUYWJsZSgpLgog
ICAgICAgICBSZWdpc3RlcklEKiBhZGRWYXIoKQogICAgICAgICB7CiAgICAgICAgICAgICArK21f
Y29kZUJsb2NrLT5tX251bVZhcnM7CkBAIC02MjksMTQgKzYxOSwxMSBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIH0KIAotICAgICAgICAvLyBS
ZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgYWRkZWQgdmFyLgotICAgICAgICB2b2lkIGFkZFBhcmFt
ZXRlcihjb25zdCBJZGVudGlmaWVyJiwgaW50IHBhcmFtZXRlckluZGV4KTsKLSAgICAgICAgUmVn
aXN0ZXJJRCogcmVzb2x2ZUNhbGxlZShGdW5jdGlvbk5vZGUqKTsKLSAgICAgICAgdm9pZCBhZGRD
YWxsZWUoRnVuY3Rpb25Ob2RlKiwgUmVnaXN0ZXJJRCopOwotCi0gICAgICAgIHZvaWQgcHJlc2Vy
dmVMYXN0VmFyKCk7Ci0KLSAgICAgICAgUmVnaXN0ZXJJRCYgcmVnaXN0ZXJGb3IoaW50IGluZGV4
KQorICAgICAgICAvLyBJbml0aWFsaXplcyB0aGUgc3RhY2sgZm9ybSB0aGUgcGFyYW1ldGVyOyBk
b2VzIG5vdGhpbmcgZm9yIHRoZSBzeW1ib2wgdGFibGUuCisgICAgICAgIFJlZ2lzdGVySUQqIGlu
aXRpYWxpemVOZXh0UGFyYW1ldGVyKCk7CisgICAgICAgIFN0cmluZ0ltcGwqIHZpc2libGVOYW1l
Rm9yUGFyYW1ldGVyKERlY29uc3RydWN0aW9uUGF0dGVybk5vZGUqIHBhdHRlcm4pOworICAgICAg
ICAKKyAgICAgICAgUmVnaXN0ZXJJRCYgcmVnaXN0ZXJGb3IoVmlydHVhbFJlZ2lzdGVyKQogICAg
ICAgICB7CiAgICAgICAgICAgICBpZiAob3BlcmFuZElzTG9jYWwoaW5kZXgpKQogICAgICAgICAg
ICAgICAgIHJldHVybiBtX2NhbGxlZVJlZ2lzdGVyc1tWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgpLnRv
TG9jYWwoKV07CkBAIC02NjEsMTEgKzY0OCw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAg
ICAgcmV0dXJuIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjpjcmVhdGUobV92bSwgbV9zY29w
ZU5vZGUtPnNvdXJjZSgpLCBib2R5LCBpc0J1aWx0aW5GdW5jdGlvbigpID8gVW5saW5rZWRCdWls
dGluRnVuY3Rpb24gOiBVbmxpbmtlZE5vcm1hbEZ1bmN0aW9uKTsKICAgICAgICAgfQogCi0gICAg
ICAgIFJlZ2lzdGVySUQqIGVtaXRJbml0TGF6eVJlZ2lzdGVyKFJlZ2lzdGVySUQqKTsKLSAgICAg
ICAgCiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRDb25zdHJ1Y3RWYXJhcmdzKFJlZ2lzdGVySUQq
IGRzdCwgUmVnaXN0ZXJJRCogZnVuYywgUmVnaXN0ZXJJRCogdGhpc1JlZ2lzdGVyLCBSZWdpc3Rl
cklEKiBhcmd1bWVudHMsIFJlZ2lzdGVySUQqIGZpcnN0RnJlZVJlZ2lzdGVyLCBpbnQzMl90IGZp
cnN0VmFyQXJnT2Zmc2V0LCBSZWdpc3RlcklEKiBwcm9maWxlSG9va1JlZ2lzdGVyLCBjb25zdCBK
U1RleHRQb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdFN0YXJ0LCBj
b25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RFbmQpOwogICAgICAgICBSZWdpc3RlcklEKiBlbWl0
Q2FsbFZhcmFyZ3MoT3Bjb2RlSUQsIFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogZnVuYywg
UmVnaXN0ZXJJRCogdGhpc1JlZ2lzdGVyLCBSZWdpc3RlcklEKiBhcmd1bWVudHMsIFJlZ2lzdGVy
SUQqIGZpcnN0RnJlZVJlZ2lzdGVyLCBpbnQzMl90IGZpcnN0VmFyQXJnT2Zmc2V0LCBSZWdpc3Rl
cklEKiBwcm9maWxlSG9va1JlZ2lzdGVyLCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGNv
bnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdFN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2
b3RFbmQpOwotICAgICAgICBSZWdpc3RlcklEKiBpbml0aWFsaXplQ2FwdHVyZWRWYXJpYWJsZShS
ZWdpc3RlcklEKiBkc3QsIGNvbnN0IElkZW50aWZpZXImLCBSZWdpc3RlcklEKik7CiAKICAgICBw
dWJsaWM6CiAgICAgICAgIEpTU3RyaW5nKiBhZGRTdHJpbmdDb25zdGFudChjb25zdCBJZGVudGlm
aWVyJik7CkBAIC02OTksNDQgKzY4Myw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgICAgIH0KIAotICAgICAgICBib29sIHNob3VsZFRlYXJPZmZBcmd1
bWVudHNFYWdlcmx5KCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1fY29kZVR5cGUg
PT0gRnVuY3Rpb25Db2RlICYmIGlzU3RyaWN0TW9kZSgpICYmIG1fc2NvcGVOb2RlLT5tb2RpZmll
c1BhcmFtZXRlcigpOwotICAgICAgICB9Ci0KLSAgICAgICAgYm9vbCBzaG91bGRDcmVhdGVBcmd1
bWVudHNFYWdlcmx5KCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKG1fY29kZVR5cGUgIT0g
RnVuY3Rpb25Db2RlKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAg
IHJldHVybiBtX2xleGljYWxFbnZpcm9ubWVudFJlZ2lzdGVyICYmIG1fY29kZUJsb2NrLT51c2Vz
QXJndW1lbnRzKCk7Ci0gICAgICAgIH0KLQogICAgICAgICBSZWdpc3RlcklEKiBlbWl0VGhyb3dF
eHByZXNzaW9uVG9vRGVlcEV4Y2VwdGlvbigpOwogCi0gICAgICAgIHZvaWQgY3JlYXRlQXJndW1l
bnRzSWZOZWNlc3NhcnkoKTsKLSAgICAgICAgUmVnaXN0ZXJJRCogY3JlYXRlTGF6eVJlZ2lzdGVy
SWZOZWNlc3NhcnkoUmVnaXN0ZXJJRCopOwotICAgICAgICAKLSAgICAgICAgYm9vbCBoYXNXYXRj
aGFibGVWYXJpYWJsZShpbnQgb3BlcmFuZCkgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAg
VmlydHVhbFJlZ2lzdGVyIHJlZyhvcGVyYW5kKTsKLSAgICAgICAgICAgIGlmICghcmVnLmlzTG9j
YWwoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBpZiAoc3Rh
dGljX2Nhc3Q8c2l6ZV90PihyZWcudG9Mb2NhbCgpKSA+PSBtX3dhdGNoYWJsZVZhcmlhYmxlcy5z
aXplKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgY29uc3Qg
SWRlbnRpZmllciYgaWRlbnQgPSBtX3dhdGNoYWJsZVZhcmlhYmxlc1tyZWcudG9Mb2NhbCgpXTsK
LSAgICAgICAgICAgIGlmIChpZGVudC5pc051bGwoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgICAgICBBU1NFUlQoaGFzQ29uc3RhbnQoaWRlbnQpKTsgLy8gU2hvdWxk
IGhhdmUgYWxyZWFkeSBiZWVuIGFkZGVkLgotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
ICAgIH0KLSAgICAgICAgCi0gICAgICAgIGNvbnN0IElkZW50aWZpZXImIHdhdGNoYWJsZVZhcmlh
YmxlSWRlbnRpZmllcihpbnQgb3BlcmFuZCkgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAg
QVNTRVJUKGhhc1dhdGNoYWJsZVZhcmlhYmxlKG9wZXJhbmQpKTsKLSAgICAgICAgICAgIFZpcnR1
YWxSZWdpc3RlciByZWcob3BlcmFuZCk7Ci0gICAgICAgICAgICByZXR1cm4gbV93YXRjaGFibGVW
YXJpYWJsZXNbcmVnLnRvTG9jYWwoKV07Ci0gICAgICAgIH0KLQogICAgIHByaXZhdGU6CiAgICAg
ICAgIFZlY3RvcjxVbmxpbmtlZEluc3RydWN0aW9uLCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4g
bV9pbnN0cnVjdGlvbnM7CiAKQEAgLTc1NSwxNCArNzAzLDE0IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICBSZWdpc3RlcklEIG1fdGhpc1JlZ2lzdGVyOwogICAgICAgICBSZWdpc3RlcklEIG1f
Y2FsbGVlUmVnaXN0ZXI7CiAgICAgICAgIFJlZ2lzdGVySUQqIG1fc2NvcGVSZWdpc3RlciB7IG51
bGxwdHIgfTsKKyAgICAgICAgUmVnaXN0ZXJJRCogbV9hcmd1bWVudHNSZWdpc3RlciB7IG51bGxw
dHIgfTsKICAgICAgICAgUmVnaXN0ZXJJRCogbV9sZXhpY2FsRW52aXJvbm1lbnRSZWdpc3RlciB7
IG51bGxwdHIgfTsKICAgICAgICAgUmVnaXN0ZXJJRCogbV9lbXB0eVZhbHVlUmVnaXN0ZXIgeyBu
dWxscHRyIH07CiAgICAgICAgIFJlZ2lzdGVySUQqIG1fZ2xvYmFsT2JqZWN0UmVnaXN0ZXIgeyBu
dWxscHRyIH07Ci0gICAgICAgIFJlZ2lzdGVySUQqIG1fbG9jYWxBcmd1bWVudHNSZWdpc3RlciB7
IG51bGxwdHIgfTsKIAotICAgICAgICBWZWN0b3I8SWRlbnRpZmllciwgMTY+IG1fd2F0Y2hhYmxl
VmFyaWFibGVzOwogICAgICAgICBTZWdtZW50ZWRWZWN0b3I8UmVnaXN0ZXJJRCwgMzI+IG1fY29u
c3RhbnRQb29sUmVnaXN0ZXJzOwogICAgICAgICBTZWdtZW50ZWRWZWN0b3I8UmVnaXN0ZXJJRCwg
MzI+IG1fY2FsbGVlUmVnaXN0ZXJzOworICAgICAgICB1bnNpZ25lZCBtX251bUNhcHR1cmVkVmFy
aWFibGVzOwogICAgICAgICBTZWdtZW50ZWRWZWN0b3I8UmVnaXN0ZXJJRCwgMzI+IG1fcGFyYW1l
dGVyczsKICAgICAgICAgU2VnbWVudGVkVmVjdG9yPExhYmVsLCAzMj4gbV9sYWJlbHM7CiAgICAg
ICAgIExhYmVsU2NvcGVTdG9yZSBtX2xhYmVsU2NvcGVzOwpAQCAtNzc1LDE1ICs3MjMsMTQgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8Rm9ySW5Db250
ZXh0Pj4gbV9mb3JJbkNvbnRleHRTdGFjazsKICAgICAgICAgVmVjdG9yPFRyeUNvbnRleHQ+IG1f
dHJ5Q29udGV4dFN0YWNrOwogICAgICAgICBWZWN0b3I8c3RkOjpwYWlyPFJlZlB0cjxSZWdpc3Rl
cklEPiwgY29uc3QgRGVjb25zdHJ1Y3Rpb25QYXR0ZXJuTm9kZSo+PiBtX2RlY29uc3RydWN0ZWRQ
YXJhbWV0ZXJzOworICAgICAgICBWZWN0b3I8RnVuY3Rpb25Cb2R5Tm9kZSo+IG1fZnVuY3Rpb25z
VG9Jbml0aWFsaXplOworICAgICAgICBib29sIG1fbmVlZFRvSW5pdGlhbGl6ZUFyZ3VtZW50cyB7
IGZhbHNlIH07CiAgICAgICAgIAogICAgICAgICBWZWN0b3I8VHJ5UmFuZ2U+IG1fdHJ5UmFuZ2Vz
OwogICAgICAgICBTZWdtZW50ZWRWZWN0b3I8VHJ5RGF0YSwgOD4gbV90cnlEYXRhOwogCiAgICAg
ICAgIGludCBtX25leHRDb25zdGFudE9mZnNldCB7IDAgfTsKIAotICAgICAgICBpbnQgbV9maXJz
dExhenlGdW5jdGlvbiB7IDAgfTsKLSAgICAgICAgaW50IG1fbGFzdExhenlGdW5jdGlvbiB7IDAg
fTsKLSAgICAgICAgSGFzaE1hcDx1bnNpZ25lZCBpbnQsIEZ1bmN0aW9uQm9keU5vZGUqLCBXVEY6
OkludEhhc2g8dW5zaWduZWQgaW50PiwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0
czx1bnNpZ25lZCBpbnQ+PiBtX2xhenlGdW5jdGlvbnM7CiAgICAgICAgIHR5cGVkZWYgSGFzaE1h
cDxGdW5jdGlvbkJvZHlOb2RlKiwgdW5zaWduZWQ+IEZ1bmN0aW9uT2Zmc2V0TWFwOwogICAgICAg
ICBGdW5jdGlvbk9mZnNldE1hcCBtX2Z1bmN0aW9uT2Zmc2V0czsKICAgICAgICAgCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4u
Y3BwCShyZXZpc2lvbiAxODA4NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBp
bGVyL05vZGVzQ29kZWdlbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2MCwyOSArMTYwLDI5IEBA
IFJlZ2lzdGVySUQqIFRoaXNOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWMKIAogYm9vbCBSZXNvbHZl
Tm9kZTo6aXNQdXJlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IpIGNvbnN0CiB7Ci0gICAg
cmV0dXJuIGdlbmVyYXRvci5sb2NhbChtX2lkZW50KS5nZXQoKTsKKyAgICByZXR1cm4gZ2VuZXJh
dG9yLnZhcmlhYmxlKG1faWRlbnQpLm9mZnNldCgpLmlzU3RhY2soKTsKIH0KIAogUmVnaXN0ZXJJ
RCogUmVzb2x2ZU5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9y
LCBSZWdpc3RlcklEKiBkc3QpCiB7Ci0gICAgaWYgKExvY2FsIGxvY2FsID0gZ2VuZXJhdG9yLmxv
Y2FsKG1faWRlbnQpKSB7CisgICAgVmFyaWFibGUgdmFyID0gZ2VuZXJhdG9yLnZhcmlhYmxlKG1f
aWRlbnQpOworICAgIGlmIChSZWdpc3RlcklEKiBsb2NhbCA9IHZhci5sb2NhbCgpKSB7CiAgICAg
ICAgIGlmIChkc3QgPT0gZ2VuZXJhdG9yLmlnbm9yZWRSZXN1bHQoKSkKLSAgICAgICAgICAgIHJl
dHVybiAwOworICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIGlmIChnZW5lcmF0
b3Iudm0oKS0+dHlwZVByb2ZpbGVyKCkpIHsKLSAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0UHJv
ZmlsZVR5cGUobG9jYWwuZ2V0KCksIFByb2ZpbGVUeXBlQnl0ZWNvZGVIYXNHbG9iYWxJRCwgbnVs
bHB0cik7CisgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlKGxvY2FsLCBQcm9m
aWxlVHlwZUJ5dGVjb2RlSGFzR2xvYmFsSUQsIG51bGxwdHIpOwogICAgICAgICAgICAgZ2VuZXJh
dG9yLmVtaXRUeXBlUHJvZmlsZXJFeHByZXNzaW9uSW5mbyhtX3Bvc2l0aW9uLCBKU1RleHRQb3Np
dGlvbigtMSwgbV9wb3NpdGlvbi5vZmZzZXQgKyBtX2lkZW50Lmxlbmd0aCgpLCAtMSkpOwogICAg
ICAgICB9Ci0gICAgICAgIHJldHVybiBnZW5lcmF0b3IubW92ZVRvRGVzdGluYXRpb25JZk5lZWRl
ZChkc3QsIGxvY2FsLmdldCgpKTsKKyAgICAgICAgcmV0dXJuIGdlbmVyYXRvci5tb3ZlVG9EZXN0
aW5hdGlvbklmTmVlZGVkKGRzdCwgbG9jYWwpOwogICAgIH0KICAgICAKICAgICBKU1RleHRQb3Np
dGlvbiBkaXZvdCA9IG1fc3RhcnQgKyBtX2lkZW50Lmxlbmd0aCgpOwogICAgIGdlbmVyYXRvci5l
bWl0RXhwcmVzc2lvbkluZm8oZGl2b3QsIG1fc3RhcnQsIGRpdm90KTsKLSAgICBSZXNvbHZlU2Nv
cGVJbmZvIHJlc29sdmVTY29wZUluZm87Ci0gICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHNjb3BlID0g
Z2VuZXJhdG9yLmVtaXRSZXNvbHZlU2NvcGUoZHN0LCBtX2lkZW50LCByZXNvbHZlU2NvcGVJbmZv
KTsKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gc2NvcGUgPSBnZW5lcmF0b3IuZW1pdFJlc29sdmVT
Y29wZShkc3QsIHZhcik7CiAgICAgUmVnaXN0ZXJJRCogZmluYWxEZXN0ID0gZ2VuZXJhdG9yLmZp
bmFsRGVzdGluYXRpb24oZHN0KTsKLSAgICBSZWdpc3RlcklEKiByZXN1bHQgPSBnZW5lcmF0b3Iu
ZW1pdEdldEZyb21TY29wZShmaW5hbERlc3QsIHNjb3BlLmdldCgpLCBtX2lkZW50LCBUaHJvd0lm
Tm90Rm91bmQsIHJlc29sdmVTY29wZUluZm8pOworICAgIFJlZ2lzdGVySUQqIHJlc3VsdCA9IGdl
bmVyYXRvci5lbWl0R2V0RnJvbVNjb3BlKGZpbmFsRGVzdCwgc2NvcGUuZ2V0KCksIHZhciwgVGhy
b3dJZk5vdEZvdW5kKTsKICAgICBpZiAoZ2VuZXJhdG9yLnZtKCktPnR5cGVQcm9maWxlcigpKSB7
Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZVR5cGUoZmluYWxEZXN0LCByZXNvbHZlU2Nv
cGVJbmZvLmlzTG9jYWwoKSA/IFByb2ZpbGVUeXBlQnl0ZWNvZGVHZXRGcm9tTG9jYWxTY29wZSA6
IFByb2ZpbGVUeXBlQnl0ZWNvZGVHZXRGcm9tU2NvcGUsICZtX2lkZW50KTsKKyAgICAgICAgZ2Vu
ZXJhdG9yLmVtaXRQcm9maWxlVHlwZShmaW5hbERlc3QsIHZhci5pc1Jlc29sdmVkKCkgPyBQcm9m
aWxlVHlwZUJ5dGVjb2RlR2V0RnJvbUxvY2FsU2NvcGUgOiBQcm9maWxlVHlwZUJ5dGVjb2RlR2V0
RnJvbVNjb3BlLCAmbV9pZGVudCk7CiAgICAgICAgIGdlbmVyYXRvci5lbWl0VHlwZVByb2ZpbGVy
RXhwcmVzc2lvbkluZm8obV9wb3NpdGlvbiwgSlNUZXh0UG9zaXRpb24oLTEsIG1fcG9zaXRpb24u
b2Zmc2V0ICsgbV9pZGVudC5sZW5ndGgoKSwgLTEpKTsKICAgICB9CiAgICAgcmV0dXJuIHJlc3Vs
dDsKQEAgLTQ5NSw4ICs0OTUsOSBAQCBDYWxsQXJndW1lbnRzOjpDYWxsQXJndW1lbnRzKEJ5dGVj
b2RlR2VuCiAKIFJlZ2lzdGVySUQqIEV2YWxGdW5jdGlvbkNhbGxOb2RlOjplbWl0Qnl0ZWNvZGUo
Qnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogewotICAgIGlm
IChMb2NhbCBsb2NhbCA9IGdlbmVyYXRvci5sb2NhbChnZW5lcmF0b3IucHJvcGVydHlOYW1lcygp
LmV2YWwpKSB7Ci0gICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBmdW5jID0gZ2VuZXJhdG9yLmVt
aXRNb3ZlKGdlbmVyYXRvci50ZW1wRGVzdGluYXRpb24oZHN0KSwgbG9jYWwuZ2V0KCkpOworICAg
IFZhcmlhYmxlIHZhciA9IGdlbmVyYXRvci52YXJpYWJsZShnZW5lcmF0b3IucHJvcGVydHlOYW1l
cygpLmV2YWwpOworICAgIGlmIChSZWdpc3RlcklEKiBsb2NhbCA9IHZhci5sb2NhbCgpKSB7Cisg
ICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBmdW5jID0gZ2VuZXJhdG9yLmVtaXRNb3ZlKGdlbmVy
YXRvci50ZW1wRGVzdGluYXRpb24oZHN0KSwgbG9jYWwpOwogICAgICAgICBDYWxsQXJndW1lbnRz
IGNhbGxBcmd1bWVudHMoZ2VuZXJhdG9yLCBtX2FyZ3MpOwogICAgICAgICBnZW5lcmF0b3IuZW1p
dExvYWQoY2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwganNVbmRlZmluZWQoKSk7CiAgICAg
ICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdENhbGxFdmFsKGdlbmVyYXRvci5maW5hbERlc3RpbmF0
aW9uKGRzdCwgZnVuYy5nZXQoKSksIGZ1bmMuZ2V0KCksIGNhbGxBcmd1bWVudHMsIGRpdm90KCks
IGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CkBAIC01MDYsMTEgKzUwNywxMCBAQCBSZWdpc3Rl
cklEKiBFdmFsRnVuY3Rpb25DYWxsTm9kZTo6ZW1pdEJ5CiAgICAgQ2FsbEFyZ3VtZW50cyBjYWxs
QXJndW1lbnRzKGdlbmVyYXRvciwgbV9hcmdzKTsKICAgICBKU1RleHRQb3NpdGlvbiBuZXdEaXZv
dCA9IGRpdm90U3RhcnQoKSArIDQ7CiAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhu
ZXdEaXZvdCwgZGl2b3RTdGFydCgpLCBuZXdEaXZvdCk7Ci0gICAgUmVzb2x2ZVNjb3BlSW5mbyBy
ZXNvbHZlU2NvcGVJbmZvOwogICAgIGdlbmVyYXRvci5tb3ZlVG9EZXN0aW5hdGlvbklmTmVlZGVk
KAogICAgICAgICBjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLAotICAgICAgICBnZW5lcmF0
b3IuZW1pdFJlc29sdmVTY29wZShjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCBnZW5lcmF0
b3IucHJvcGVydHlOYW1lcygpLmV2YWwsIHJlc29sdmVTY29wZUluZm8pKTsKLSAgICBnZW5lcmF0
b3IuZW1pdEdldEZyb21TY29wZShmdW5jLmdldCgpLCBjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3Rl
cigpLCBnZW5lcmF0b3IucHJvcGVydHlOYW1lcygpLmV2YWwsIFRocm93SWZOb3RGb3VuZCwgcmVz
b2x2ZVNjb3BlSW5mbyk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0UmVzb2x2ZVNjb3BlKGNhbGxB
cmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIHZhcikpOworICAgIGdlbmVyYXRvci5lbWl0R2V0RnJv
bVNjb3BlKGZ1bmMuZ2V0KCksIGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIHZhciwgVGhy
b3dJZk5vdEZvdW5kKTsKICAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRDYWxsRXZhbChnZW5lcmF0
b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIGZ1bmMuZ2V0KCkpLCBmdW5jLmdldCgpLCBjYWxsQXJn
dW1lbnRzLCBkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwogfQogCkBAIC01MzYs
OCArNTM2LDkgQEAgUmVnaXN0ZXJJRCogRnVuY3Rpb25DYWxsUmVzb2x2ZU5vZGU6OmVtaQogewog
ICAgIEV4cGVjdGVkRnVuY3Rpb24gZXhwZWN0ZWRGdW5jdGlvbiA9IGdlbmVyYXRvci5leHBlY3Rl
ZEZ1bmN0aW9uRm9ySWRlbnRpZmllcihtX2lkZW50KTsKIAotICAgIGlmIChMb2NhbCBsb2NhbCA9
IGdlbmVyYXRvci5sb2NhbChtX2lkZW50KSkgewotICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4g
ZnVuYyA9IGdlbmVyYXRvci5lbWl0TW92ZShnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKGRzdCks
IGxvY2FsLmdldCgpKTsKKyAgICBWYXJpYWJsZSB2YXIgPSBnZW5lcmF0b3IudmFyaWFibGUobV9p
ZGVudCk7CisgICAgaWYgKFJlZ2lzdGVySUQqIGxvY2FsID0gdmFyLmxvY2FsKCkpIHsKKyAgICAg
ICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGZ1bmMgPSBnZW5lcmF0b3IuZW1pdE1vdmUoZ2VuZXJhdG9y
LnRlbXBEZXN0aW5hdGlvbihkc3QpLCBsb2NhbCk7CiAgICAgICAgIFJlZlB0cjxSZWdpc3RlcklE
PiByZXR1cm5WYWx1ZSA9IGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCwgZnVuYy5nZXQo
KSk7CiAgICAgICAgIENhbGxBcmd1bWVudHMgY2FsbEFyZ3VtZW50cyhnZW5lcmF0b3IsIG1fYXJn
cyk7CiAgICAgICAgIGdlbmVyYXRvci5lbWl0TG9hZChjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3Rl
cigpLCBqc1VuZGVmaW5lZCgpKTsKQEAgLTU1NywxMSArNTU4LDEwIEBAIFJlZ2lzdGVySUQqIEZ1
bmN0aW9uQ2FsbFJlc29sdmVOb2RlOjplbWkKIAogICAgIEpTVGV4dFBvc2l0aW9uIG5ld0Rpdm90
ID0gZGl2b3RTdGFydCgpICsgbV9pZGVudC5sZW5ndGgoKTsKICAgICBnZW5lcmF0b3IuZW1pdEV4
cHJlc3Npb25JbmZvKG5ld0Rpdm90LCBkaXZvdFN0YXJ0KCksIG5ld0Rpdm90KTsKLSAgICBSZXNv
bHZlU2NvcGVJbmZvIHJlc29sdmVTY29wZUluZm87CiAgICAgZ2VuZXJhdG9yLm1vdmVUb0Rlc3Rp
bmF0aW9uSWZOZWVkZWQoCiAgICAgICAgIGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksCi0g
ICAgICAgIGdlbmVyYXRvci5lbWl0UmVzb2x2ZVNjb3BlKGNhbGxBcmd1bWVudHMudGhpc1JlZ2lz
dGVyKCksIG1faWRlbnQsIHJlc29sdmVTY29wZUluZm8pKTsKLSAgICBnZW5lcmF0b3IuZW1pdEdl
dEZyb21TY29wZShmdW5jLmdldCgpLCBjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCBtX2lk
ZW50LCBUaHJvd0lmTm90Rm91bmQsIHJlc29sdmVTY29wZUluZm8pOworICAgICAgICBnZW5lcmF0
b3IuZW1pdFJlc29sdmVTY29wZShjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCB2YXIpKTsK
KyAgICBnZW5lcmF0b3IuZW1pdEdldEZyb21TY29wZShmdW5jLmdldCgpLCBjYWxsQXJndW1lbnRz
LnRoaXNSZWdpc3RlcigpLCB2YXIsIFRocm93SWZOb3RGb3VuZCk7CiAgICAgUmVnaXN0ZXJJRCog
cmV0ID0gZ2VuZXJhdG9yLmVtaXRDYWxsKHJldHVyblZhbHVlLmdldCgpLCBmdW5jLmdldCgpLCBl
eHBlY3RlZEZ1bmN0aW9uLCBjYWxsQXJndW1lbnRzLCBkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRp
dm90RW5kKCkpOwogICAgIGlmIChnZW5lcmF0b3Iudm0oKS0+dHlwZVByb2ZpbGVyKCkpIHsKICAg
ICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlVHlwZShyZXR1cm5WYWx1ZS5nZXQoKSwgUHJvZmls
ZVR5cGVCeXRlY29kZURvZXNOb3RIYXZlR2xvYmFsSUQsIG51bGxwdHIpOwpAQCAtODIwLDExICs4
MjAsMTIgQEAgUmVnaXN0ZXJJRCogUG9zdGZpeE5vZGU6OmVtaXRSZXNvbHZlKEJ5dAogICAgIFJl
c29sdmVOb2RlKiByZXNvbHZlID0gc3RhdGljX2Nhc3Q8UmVzb2x2ZU5vZGUqPihtX2V4cHIpOwog
ICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gcmVzb2x2ZS0+aWRlbnRpZmllcigpOwogCi0g
ICAgaWYgKExvY2FsIGxvY2FsID0gZ2VuZXJhdG9yLmxvY2FsKGlkZW50KSkgewotICAgICAgICBS
ZWZQdHI8UmVnaXN0ZXJJRD4gbG9jYWxSZWcgPSBsb2NhbC5nZXQoKTsKLSAgICAgICAgaWYgKGxv
Y2FsLmlzUmVhZE9ubHkoKSkgeworICAgIFZhcmlhYmxlIHZhciA9IGdlbmVyYXRvci52YXJpYWJs
ZShpZGVudCk7CisgICAgaWYgKFJlZ2lzdGVySUQqIGxvY2FsID0gdmFyLmxvY2FsKCkpIHsKKyAg
ICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGxvY2FsUmVnID0gbG9jYWw7CisgICAgICAgIGlmICh2
YXIuaXNSZWFkT25seSgpKSB7CiAgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdFJlYWRPbmx5RXhj
ZXB0aW9uSWZOZWVkZWQoKTsKLSAgICAgICAgICAgIGxvY2FsUmVnID0gZ2VuZXJhdG9yLmVtaXRN
b3ZlKGdlbmVyYXRvci50ZW1wRGVzdGluYXRpb24oZHN0KSwgbG9jYWxSZWcuZ2V0KCkpOworICAg
ICAgICAgICAgbG9jYWxSZWcgPSBnZW5lcmF0b3IuZW1pdE1vdmUoZ2VuZXJhdG9yLnRlbXBEZXN0
aW5hdGlvbihkc3QpLCBsb2NhbCk7CiAgICAgICAgIH0gZWxzZSBpZiAoZ2VuZXJhdG9yLnZtKCkt
PnR5cGVQcm9maWxlcigpKSB7CiAgICAgICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gdGVtcERz
dCA9IGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCk7CiAgICAgICAgICAgICBBU1NFUlQo
ZHN0ICE9IGxvY2FsUmVnKTsKQEAgLTg0MSwxMyArODQyLDEyIEBAIFJlZ2lzdGVySUQqIFBvc3Rm
aXhOb2RlOjplbWl0UmVzb2x2ZShCeXQKICAgICB9CiAKICAgICBnZW5lcmF0b3IuZW1pdEV4cHJl
c3Npb25JbmZvKGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7Ci0gICAgUmVzb2x2
ZVNjb3BlSW5mbyByZXNvbHZlU2NvcGVJbmZvOwotICAgIFJlZlB0cjxSZWdpc3RlcklEPiBzY29w
ZSA9IGdlbmVyYXRvci5lbWl0UmVzb2x2ZVNjb3BlKG51bGxwdHIsIGlkZW50LCByZXNvbHZlU2Nv
cGVJbmZvKTsKLSAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gdmFsdWUgPSBnZW5lcmF0b3IuZW1pdEdl
dEZyb21TY29wZShnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIHNjb3BlLmdldCgpLCBpZGVudCwg
VGhyb3dJZk5vdEZvdW5kLCByZXNvbHZlU2NvcGVJbmZvKTsKKyAgICBSZWZQdHI8UmVnaXN0ZXJJ
RD4gc2NvcGUgPSBnZW5lcmF0b3IuZW1pdFJlc29sdmVTY29wZShudWxscHRyLCB2YXIpOworICAg
IFJlZlB0cjxSZWdpc3RlcklEPiB2YWx1ZSA9IGdlbmVyYXRvci5lbWl0R2V0RnJvbVNjb3BlKGdl
bmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgc2NvcGUuZ2V0KCksIHZhciwgVGhyb3dJZk5vdEZvdW5k
KTsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gb2xkVmFsdWUgPSBlbWl0UG9zdEluY09yRGVjKGdl
bmVyYXRvciwgZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSwgdmFsdWUuZ2V0KCksIG1f
b3BlcmF0b3IpOwotICAgIGdlbmVyYXRvci5lbWl0UHV0VG9TY29wZShzY29wZS5nZXQoKSwgaWRl
bnQsIHZhbHVlLmdldCgpLCBUaHJvd0lmTm90Rm91bmQsIHJlc29sdmVTY29wZUluZm8pOworICAg
IGdlbmVyYXRvci5lbWl0UHV0VG9TY29wZShzY29wZS5nZXQoKSwgdmFyLCB2YWx1ZS5nZXQoKSwg
VGhyb3dJZk5vdEZvdW5kKTsKICAgICBpZiAoZ2VuZXJhdG9yLnZtKCktPnR5cGVQcm9maWxlcigp
KSB7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZVR5cGUodmFsdWUuZ2V0KCksIHJlc29s
dmVTY29wZUluZm8uaXNMb2NhbCgpID8gUHJvZmlsZVR5cGVCeXRlY29kZVB1dFRvTG9jYWxTY29w
ZSA6IFByb2ZpbGVUeXBlQnl0ZWNvZGVQdXRUb1Njb3BlLCAmaWRlbnQpOworICAgICAgICBnZW5l
cmF0b3IuZW1pdFByb2ZpbGVUeXBlKHZhbHVlLmdldCgpLCB2YXIuaXNSZXNvbHZlZCgpID8gUHJv
ZmlsZVR5cGVCeXRlY29kZVB1dFRvTG9jYWxTY29wZSA6IFByb2ZpbGVUeXBlQnl0ZWNvZGVQdXRU
b1Njb3BlLCAmaWRlbnQpOwogICAgICAgICBnZW5lcmF0b3IuZW1pdFR5cGVQcm9maWxlckV4cHJl
c3Npb25JbmZvKGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAgICAgfQogCkBAIC05MjMsMTIg
KzkyMywxMiBAQCBSZWdpc3RlcklEKiBQb3N0Zml4Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5CiAKIFJl
Z2lzdGVySUQqIERlbGV0ZVJlc29sdmVOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0
b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogewotICAgIGlmIChnZW5lcmF0b3IubG9j
YWwobV9pZGVudCkuZ2V0KCkpCisgICAgVmFyaWFibGUgdmFyID0gZ2VuZXJhdG9yLnZhcmlhYmxl
KG1faWRlbnQpOworICAgIGlmICh2YXIubG9jYWwoKSkKICAgICAgICAgcmV0dXJuIGdlbmVyYXRv
ci5lbWl0TG9hZChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpLCBmYWxzZSk7CiAKICAg
ICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2
b3RFbmQoKSk7Ci0gICAgUmVzb2x2ZVNjb3BlSW5mbyByZXNvbHZlU2NvcGVJbmZvOwotICAgIFJl
ZlB0cjxSZWdpc3RlcklEPiBiYXNlID0gZ2VuZXJhdG9yLmVtaXRSZXNvbHZlU2NvcGUoZHN0LCBt
X2lkZW50LCByZXNvbHZlU2NvcGVJbmZvKTsKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gYmFzZSA9
IGdlbmVyYXRvci5lbWl0UmVzb2x2ZVNjb3BlKGRzdCwgdmFyKTsKICAgICByZXR1cm4gZ2VuZXJh
dG9yLmVtaXREZWxldGVCeUlkKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCwgYmFzZS5n
ZXQoKSksIGJhc2UuZ2V0KCksIG1faWRlbnQpOwogfQogCkBAIC05NzUsMTkgKzk3NSwxOSBAQCBS
ZWdpc3RlcklEKiBWb2lkTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjCiAgICAgcmV0dXJuIGdlbmVy
YXRvci5lbWl0TG9hZChkc3QsIGpzVW5kZWZpbmVkKCkpOwogfQogCi0vLyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0gVHlwZU9mVmFsdWVOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVHlwZU9mUmVz
b2x2ZU5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogUmVnaXN0ZXJJ
RCogVHlwZU9mUmVzb2x2ZU5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2Vu
ZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7Ci0gICAgaWYgKExvY2FsIGxvY2FsID0gZ2VuZXJh
dG9yLmxvY2FsKG1faWRlbnQpKSB7CisgICAgVmFyaWFibGUgdmFyID0gZ2VuZXJhdG9yLnZhcmlh
YmxlKG1faWRlbnQpOworICAgIGlmIChSZWdpc3RlcklEKiBsb2NhbCA9IHZhci5sb2NhbCgpKSB7
CiAgICAgICAgIGlmIChkc3QgPT0gZ2VuZXJhdG9yLmlnbm9yZWRSZXN1bHQoKSkKICAgICAgICAg
ICAgIHJldHVybiAwOwotICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRUeXBlT2YoZ2VuZXJh
dG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSwgbG9jYWwuZ2V0KCkpOworICAgICAgICByZXR1cm4g
Z2VuZXJhdG9yLmVtaXRUeXBlT2YoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSwgbG9j
YWwpOwogICAgIH0KIAotICAgIFJlc29sdmVTY29wZUluZm8gcmVzb2x2ZVNjb3BlSW5mbzsKLSAg
ICBSZWZQdHI8UmVnaXN0ZXJJRD4gc2NvcGUgPSBnZW5lcmF0b3IuZW1pdFJlc29sdmVTY29wZShk
c3QsIG1faWRlbnQsIHJlc29sdmVTY29wZUluZm8pOwotICAgIFJlZlB0cjxSZWdpc3RlcklEPiB2
YWx1ZSA9IGdlbmVyYXRvci5lbWl0R2V0RnJvbVNjb3BlKGdlbmVyYXRvci5uZXdUZW1wb3Jhcnko
KSwgc2NvcGUuZ2V0KCksIG1faWRlbnQsIERvTm90VGhyb3dJZk5vdEZvdW5kLCByZXNvbHZlU2Nv
cGVJbmZvKTsKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gc2NvcGUgPSBnZW5lcmF0b3IuZW1pdFJl
c29sdmVTY29wZShkc3QsIHZhcik7CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHZhbHVlID0gZ2Vu
ZXJhdG9yLmVtaXRHZXRGcm9tU2NvcGUoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBzY29wZS5n
ZXQoKSwgdmFyLCBEb05vdFRocm93SWZOb3RGb3VuZCk7CiAgICAgaWYgKGRzdCA9PSBnZW5lcmF0
b3IuaWdub3JlZFJlc3VsdCgpKQogICAgICAgICByZXR1cm4gMDsKICAgICByZXR1cm4gZ2VuZXJh
dG9yLmVtaXRUeXBlT2YoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0LCBzY29wZS5nZXQo
KSksIHZhbHVlLmdldCgpKTsKQEAgLTEwMTMsOSArMTAxMywxMCBAQCBSZWdpc3RlcklEKiBQcmVm
aXhOb2RlOjplbWl0UmVzb2x2ZShCeXRlCiAgICAgUmVzb2x2ZU5vZGUqIHJlc29sdmUgPSBzdGF0
aWNfY2FzdDxSZXNvbHZlTm9kZSo+KG1fZXhwcik7CiAgICAgY29uc3QgSWRlbnRpZmllciYgaWRl
bnQgPSByZXNvbHZlLT5pZGVudGlmaWVyKCk7CiAKLSAgICBpZiAoTG9jYWwgbG9jYWwgPSBnZW5l
cmF0b3IubG9jYWwoaWRlbnQpKSB7Ci0gICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBsb2NhbFJl
ZyA9IGxvY2FsLmdldCgpOwotICAgICAgICBpZiAobG9jYWwuaXNSZWFkT25seSgpKSB7CisgICAg
VmFyaWFibGUgdmFyID0gZ2VuZXJhdG9yLnZhcmlhYmxlKGlkZW50KTsKKyAgICBpZiAoUmVnaXN0
ZXJJRCogbG9jYWwgPSB2YXIubG9jYWwoKSkgeworICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4g
bG9jYWxSZWcgPSBsb2NhbDsKKyAgICAgICAgaWYgKHZhci5pc1JlYWRPbmx5KCkpIHsKICAgICAg
ICAgICAgIGdlbmVyYXRvci5lbWl0UmVhZE9ubHlFeGNlcHRpb25JZk5lZWRlZCgpOwogICAgICAg
ICAgICAgbG9jYWxSZWcgPSBnZW5lcmF0b3IuZW1pdE1vdmUoZ2VuZXJhdG9yLnRlbXBEZXN0aW5h
dGlvbihkc3QpLCBsb2NhbFJlZy5nZXQoKSk7CiAgICAgICAgIH0gZWxzZSBpZiAoZ2VuZXJhdG9y
LnZtKCktPnR5cGVQcm9maWxlcigpKSB7CkBAIC0xMDMyLDEzICsxMDMzLDEyIEBAIFJlZ2lzdGVy
SUQqIFByZWZpeE5vZGU6OmVtaXRSZXNvbHZlKEJ5dGUKICAgICB9CiAKICAgICBnZW5lcmF0b3Iu
ZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7Ci0g
ICAgUmVzb2x2ZVNjb3BlSW5mbyByZXNvbHZlU2NvcGVJbmZvOwotICAgIFJlZlB0cjxSZWdpc3Rl
cklEPiBzY29wZSA9IGdlbmVyYXRvci5lbWl0UmVzb2x2ZVNjb3BlKGRzdCwgaWRlbnQsIHJlc29s
dmVTY29wZUluZm8pOwotICAgIFJlZlB0cjxSZWdpc3RlcklEPiB2YWx1ZSA9IGdlbmVyYXRvci5l
bWl0R2V0RnJvbVNjb3BlKGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgc2NvcGUuZ2V0KCksIGlk
ZW50LCBUaHJvd0lmTm90Rm91bmQsIHJlc29sdmVTY29wZUluZm8pOworICAgIFJlZlB0cjxSZWdp
c3RlcklEPiBzY29wZSA9IGdlbmVyYXRvci5lbWl0UmVzb2x2ZVNjb3BlKGRzdCwgdmFyKTsKKyAg
ICBSZWZQdHI8UmVnaXN0ZXJJRD4gdmFsdWUgPSBnZW5lcmF0b3IuZW1pdEdldEZyb21TY29wZShn
ZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIHNjb3BlLmdldCgpLCB2YXIsIFRocm93SWZOb3RGb3Vu
ZCk7CiAgICAgZW1pdEluY09yRGVjKGdlbmVyYXRvciwgdmFsdWUuZ2V0KCksIG1fb3BlcmF0b3Ip
OwotICAgIGdlbmVyYXRvci5lbWl0UHV0VG9TY29wZShzY29wZS5nZXQoKSwgaWRlbnQsIHZhbHVl
LmdldCgpLCBUaHJvd0lmTm90Rm91bmQsIHJlc29sdmVTY29wZUluZm8pOworICAgIGdlbmVyYXRv
ci5lbWl0UHV0VG9TY29wZShzY29wZS5nZXQoKSwgdmFyLCB2YWx1ZS5nZXQoKSwgVGhyb3dJZk5v
dEZvdW5kKTsKICAgICBpZiAoZ2VuZXJhdG9yLnZtKCktPnR5cGVQcm9maWxlcigpKSB7Ci0gICAg
ICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZVR5cGUodmFsdWUuZ2V0KCksIHJlc29sdmVTY29wZUlu
Zm8uaXNMb2NhbCgpID8gUHJvZmlsZVR5cGVCeXRlY29kZVB1dFRvTG9jYWxTY29wZSA6IFByb2Zp
bGVUeXBlQnl0ZWNvZGVQdXRUb1Njb3BlLCAmaWRlbnQpOworICAgICAgICBnZW5lcmF0b3IuZW1p
dFByb2ZpbGVUeXBlKHZhbHVlLmdldCgpLCB2YXIuaXNSZXNvbHZlZCgpID8gUHJvZmlsZVR5cGVC
eXRlY29kZVB1dFRvTG9jYWxTY29wZSA6IFByb2ZpbGVUeXBlQnl0ZWNvZGVQdXRUb1Njb3BlLCAm
aWRlbnQpOwogICAgICAgICBnZW5lcmF0b3IuZW1pdFR5cGVQcm9maWxlckV4cHJlc3Npb25JbmZv
KGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAgICAgfQogICAgIHJldHVybiBnZW5lcmF0b3Iu
bW92ZVRvRGVzdGluYXRpb25JZk5lZWRlZChkc3QsIHZhbHVlLmdldCgpKTsKQEAgLTE1MzAsMzcg
KzE1MzAsMzcgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgUmVnaXN0ZXJJRCogZW1pdFJlYQogUmVn
aXN0ZXJJRCogUmVhZE1vZGlmeVJlc29sdmVOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5l
cmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogewogICAgIEpTVGV4dFBvc2l0aW9u
IG5ld0Rpdm90ID0gZGl2b3RTdGFydCgpICsgbV9pZGVudC5sZW5ndGgoKTsKLSAgICBpZiAoTG9j
YWwgbG9jYWwgPSBnZW5lcmF0b3IubG9jYWwobV9pZGVudCkpIHsKLSAgICAgICAgaWYgKGxvY2Fs
LmlzUmVhZE9ubHkoKSkgeworICAgIFZhcmlhYmxlIHZhciA9IGdlbmVyYXRvci52YXJpYWJsZSht
X2lkZW50KTsKKyAgICBpZiAoUmVnaXN0ZXJJRCogbG9jYWwgPSB2YXIubG9jYWwoKSkgeworICAg
ICAgICBpZiAodmFyLmlzUmVhZE9ubHkoKSkgewogICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRS
ZWFkT25seUV4Y2VwdGlvbklmTmVlZGVkKCk7Ci0gICAgICAgICAgICByZXR1cm4gZW1pdFJlYWRN
b2RpZnlBc3NpZ25tZW50KGdlbmVyYXRvciwgZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0
KSwgbG9jYWwuZ2V0KCksIG1fcmlnaHQsIG1fb3BlcmF0b3IsIE9wZXJhbmRUeXBlcyhSZXN1bHRU
eXBlOjp1bmtub3duVHlwZSgpLCBtX3JpZ2h0LT5yZXN1bHREZXNjcmlwdG9yKCkpKTsKKyAgICAg
ICAgICAgIHJldHVybiBlbWl0UmVhZE1vZGlmeUFzc2lnbm1lbnQoZ2VuZXJhdG9yLCBnZW5lcmF0
b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpLCBsb2NhbCwgbV9yaWdodCwgbV9vcGVyYXRvciwgT3Bl
cmFuZFR5cGVzKFJlc3VsdFR5cGU6OnVua25vd25UeXBlKCksIG1fcmlnaHQtPnJlc3VsdERlc2Ny
aXB0b3IoKSkpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBpZiAoZ2VuZXJhdG9yLnZt
KCktPnR5cGVQcm9maWxlcigpCiAgICAgICAgICAgICB8fCBnZW5lcmF0b3IubGVmdEhhbmRTaWRl
TmVlZHNDb3B5KG1fcmlnaHRIYXNBc3NpZ25tZW50cywgbV9yaWdodC0+aXNQdXJlKGdlbmVyYXRv
cikpKSB7CiAgICAgICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcmVzdWx0ID0gZ2VuZXJhdG9y
Lm5ld1RlbXBvcmFyeSgpOwotICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRNb3ZlKHJlc3VsdC5n
ZXQoKSwgbG9jYWwuZ2V0KCkpOworICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRNb3ZlKHJlc3Vs
dC5nZXQoKSwgbG9jYWwpOwogICAgICAgICAgICAgZW1pdFJlYWRNb2RpZnlBc3NpZ25tZW50KGdl
bmVyYXRvciwgcmVzdWx0LmdldCgpLCByZXN1bHQuZ2V0KCksIG1fcmlnaHQsIG1fb3BlcmF0b3Is
IE9wZXJhbmRUeXBlcyhSZXN1bHRUeXBlOjp1bmtub3duVHlwZSgpLCBtX3JpZ2h0LT5yZXN1bHRE
ZXNjcmlwdG9yKCkpKTsKLSAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0TW92ZShsb2NhbC5nZXQo
KSwgcmVzdWx0LmdldCgpKTsKLSAgICAgICAgICAgIGdlbmVyYXRvci5pbnZhbGlkYXRlRm9ySW5D
b250ZXh0Rm9yTG9jYWwobG9jYWwuZ2V0KCkpOworICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRN
b3ZlKGxvY2FsLCByZXN1bHQuZ2V0KCkpOworICAgICAgICAgICAgZ2VuZXJhdG9yLmludmFsaWRh
dGVGb3JJbkNvbnRleHRGb3JMb2NhbChsb2NhbCk7CiAgICAgICAgICAgICBpZiAoZ2VuZXJhdG9y
LnZtKCktPnR5cGVQcm9maWxlcigpKQogICAgICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0VHlw
ZVByb2ZpbGVyRXhwcmVzc2lvbkluZm8oZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKICAgICAg
ICAgICAgIHJldHVybiBnZW5lcmF0b3IubW92ZVRvRGVzdGluYXRpb25JZk5lZWRlZChkc3QsIHJl
c3VsdC5nZXQoKSk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIFJlZ2lzdGVySUQqIHJl
c3VsdCA9IGVtaXRSZWFkTW9kaWZ5QXNzaWdubWVudChnZW5lcmF0b3IsIGxvY2FsLmdldCgpLCBs
b2NhbC5nZXQoKSwgbV9yaWdodCwgbV9vcGVyYXRvciwgT3BlcmFuZFR5cGVzKFJlc3VsdFR5cGU6
OnVua25vd25UeXBlKCksIG1fcmlnaHQtPnJlc3VsdERlc2NyaXB0b3IoKSkpOwotICAgICAgICBn
ZW5lcmF0b3IuaW52YWxpZGF0ZUZvckluQ29udGV4dEZvckxvY2FsKGxvY2FsLmdldCgpKTsKKyAg
ICAgICAgUmVnaXN0ZXJJRCogcmVzdWx0ID0gZW1pdFJlYWRNb2RpZnlBc3NpZ25tZW50KGdlbmVy
YXRvciwgbG9jYWwsIGxvY2FsLCBtX3JpZ2h0LCBtX29wZXJhdG9yLCBPcGVyYW5kVHlwZXMoUmVz
dWx0VHlwZTo6dW5rbm93blR5cGUoKSwgbV9yaWdodC0+cmVzdWx0RGVzY3JpcHRvcigpKSk7Cisg
ICAgICAgIGdlbmVyYXRvci5pbnZhbGlkYXRlRm9ySW5Db250ZXh0Rm9yTG9jYWwobG9jYWwpOwog
ICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLm1vdmVUb0Rlc3RpbmF0aW9uSWZOZWVkZWQoZHN0LCBy
ZXN1bHQpOwogICAgIH0KIAogICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8obmV3RGl2
b3QsIGRpdm90U3RhcnQoKSwgbmV3RGl2b3QpOwotICAgIFJlc29sdmVTY29wZUluZm8gcmVzb2x2
ZVNjb3BlSW5mbzsKLSAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gc2NvcGUgPSBnZW5lcmF0b3IuZW1p
dFJlc29sdmVTY29wZShudWxscHRyLCBtX2lkZW50LCByZXNvbHZlU2NvcGVJbmZvKTsKLSAgICBS
ZWZQdHI8UmVnaXN0ZXJJRD4gdmFsdWUgPSBnZW5lcmF0b3IuZW1pdEdldEZyb21TY29wZShnZW5l
cmF0b3IubmV3VGVtcG9yYXJ5KCksIHNjb3BlLmdldCgpLCBtX2lkZW50LCBUaHJvd0lmTm90Rm91
bmQsIHJlc29sdmVTY29wZUluZm8pOworICAgIFJlZlB0cjxSZWdpc3RlcklEPiBzY29wZSA9IGdl
bmVyYXRvci5lbWl0UmVzb2x2ZVNjb3BlKG51bGxwdHIsIHZhcik7CisgICAgUmVmUHRyPFJlZ2lz
dGVySUQ+IHZhbHVlID0gZ2VuZXJhdG9yLmVtaXRHZXRGcm9tU2NvcGUoZ2VuZXJhdG9yLm5ld1Rl
bXBvcmFyeSgpLCBzY29wZS5nZXQoKSwgdmFyLCBUaHJvd0lmTm90Rm91bmQpOwogICAgIFJlZlB0
cjxSZWdpc3RlcklEPiByZXN1bHQgPSBlbWl0UmVhZE1vZGlmeUFzc2lnbm1lbnQoZ2VuZXJhdG9y
LCBnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIHZhbHVlLmdldCgpKSwgdmFsdWUuZ2V0
KCksIG1fcmlnaHQsIG1fb3BlcmF0b3IsIE9wZXJhbmRUeXBlcyhSZXN1bHRUeXBlOjp1bmtub3du
VHlwZSgpLCBtX3JpZ2h0LT5yZXN1bHREZXNjcmlwdG9yKCkpLCB0aGlzKTsKLSAgICBSZWdpc3Rl
cklEKiByZXR1cm5SZXN1bHQgPSBnZW5lcmF0b3IuZW1pdFB1dFRvU2NvcGUoc2NvcGUuZ2V0KCks
IG1faWRlbnQsIHJlc3VsdC5nZXQoKSwgVGhyb3dJZk5vdEZvdW5kLCByZXNvbHZlU2NvcGVJbmZv
KTsKKyAgICBSZWdpc3RlcklEKiByZXR1cm5SZXN1bHQgPSBnZW5lcmF0b3IuZW1pdFB1dFRvU2Nv
cGUoc2NvcGUuZ2V0KCksIHZhciwgcmVzdWx0LmdldCgpLCBUaHJvd0lmTm90Rm91bmQpOwogICAg
IGlmIChnZW5lcmF0b3Iudm0oKS0+dHlwZVByb2ZpbGVyKCkpIHsKLSAgICAgICAgZ2VuZXJhdG9y
LmVtaXRQcm9maWxlVHlwZShyZXN1bHQuZ2V0KCksIHJlc29sdmVTY29wZUluZm8uaXNMb2NhbCgp
ID8gUHJvZmlsZVR5cGVCeXRlY29kZVB1dFRvTG9jYWxTY29wZSA6IFByb2ZpbGVUeXBlQnl0ZWNv
ZGVQdXRUb1Njb3BlLCAmbV9pZGVudCk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZVR5
cGUocmVzdWx0LmdldCgpLCB2YXIuaXNSZXNvbHZlZCgpID8gUHJvZmlsZVR5cGVCeXRlY29kZVB1
dFRvTG9jYWxTY29wZSA6IFByb2ZpbGVUeXBlQnl0ZWNvZGVQdXRUb1Njb3BlLCAmbV9pZGVudCk7
CiAgICAgICAgIGdlbmVyYXRvci5lbWl0VHlwZVByb2ZpbGVyRXhwcmVzc2lvbkluZm8oZGl2b3RT
dGFydCgpLCBkaXZvdEVuZCgpKTsKICAgICB9CiAgICAgcmV0dXJuIHJldHVyblJlc3VsdDsKQEAg
LTE1NzAsMzYgKzE1NzAsMzYgQEAgUmVnaXN0ZXJJRCogUmVhZE1vZGlmeVJlc29sdmVOb2RlOjpl
bWl0QgogCiBSZWdpc3RlcklEKiBBc3NpZ25SZXNvbHZlTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVj
b2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsKLSAgICBpZiAoTG9j
YWwgbG9jYWwgPSBnZW5lcmF0b3IubG9jYWwobV9pZGVudCkpIHsKLSAgICAgICAgaWYgKGxvY2Fs
LmlzUmVhZE9ubHkoKSkgeworICAgIFZhcmlhYmxlIHZhciA9IGdlbmVyYXRvci52YXJpYWJsZSht
X2luZGV0KTsKKyAgICBpZiAoUmVnaXN0ZXJJRCogbG9jYWwgPSB2YXIubG9jYWwoKSkgeworICAg
ICAgICBpZiAodmFyLmlzUmVhZE9ubHkoKSkgewogICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRS
ZWFkT25seUV4Y2VwdGlvbklmTmVlZGVkKCk7CiAgICAgICAgICAgICByZXR1cm4gZ2VuZXJhdG9y
LmVtaXROb2RlKGRzdCwgbV9yaWdodCk7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGxvY2FsLmlz
U3BlY2lhbCgpIHx8IGdlbmVyYXRvci52bSgpLT50eXBlUHJvZmlsZXIoKSkgeworICAgICAgICBp
ZiAodmFyLmlzU3BlY2lhbCgpIHx8IGdlbmVyYXRvci52bSgpLT50eXBlUHJvZmlsZXIoKSkgewog
ICAgICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHRlbXBEc3QgPSBnZW5lcmF0b3IudGVtcERl
c3RpbmF0aW9uKGRzdCk7CiAgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdE5vZGUodGVtcERzdC5n
ZXQoKSwgbV9yaWdodCk7Ci0gICAgICAgICAgICBnZW5lcmF0b3IuZW1pdE1vdmUobG9jYWwuZ2V0
KCksIHRlbXBEc3QuZ2V0KCkpOwotICAgICAgICAgICAgZ2VuZXJhdG9yLmludmFsaWRhdGVGb3JJ
bkNvbnRleHRGb3JMb2NhbChsb2NhbC5nZXQoKSk7CisgICAgICAgICAgICBnZW5lcmF0b3IuZW1p
dE1vdmUobG9jYWwsIHRlbXBEc3QuZ2V0KCkpOworICAgICAgICAgICAgZ2VuZXJhdG9yLmludmFs
aWRhdGVGb3JJbkNvbnRleHRGb3JMb2NhbChsb2NhbCk7CiAgICAgICAgICAgICBpZiAoZ2VuZXJh
dG9yLnZtKCktPnR5cGVQcm9maWxlcigpKQogICAgICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0
VHlwZVByb2ZpbGVyRXhwcmVzc2lvbkluZm8oZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKICAg
ICAgICAgICAgIHJldHVybiBnZW5lcmF0b3IubW92ZVRvRGVzdGluYXRpb25JZk5lZWRlZChkc3Qs
IHRlbXBEc3QuZ2V0KCkpOwogICAgICAgICB9Ci0gICAgICAgIFJlZ2lzdGVySUQqIHJlc3VsdCA9
IGdlbmVyYXRvci5lbWl0Tm9kZShsb2NhbC5nZXQoKSwgbV9yaWdodCk7Ci0gICAgICAgIGdlbmVy
YXRvci5pbnZhbGlkYXRlRm9ySW5Db250ZXh0Rm9yTG9jYWwobG9jYWwuZ2V0KCkpOworICAgICAg
ICBSZWdpc3RlcklEKiByZXN1bHQgPSBnZW5lcmF0b3IuZW1pdE5vZGUobG9jYWwsIG1fcmlnaHQp
OworICAgICAgICBnZW5lcmF0b3IuaW52YWxpZGF0ZUZvckluQ29udGV4dEZvckxvY2FsKGxvY2Fs
KTsKICAgICAgICAgcmV0dXJuIGdlbmVyYXRvci5tb3ZlVG9EZXN0aW5hdGlvbklmTmVlZGVkKGRz
dCwgcmVzdWx0KTsKICAgICB9CiAKICAgICBpZiAoZ2VuZXJhdG9yLmlzU3RyaWN0TW9kZSgpKQog
ICAgICAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCksIGRpdm90U3RhcnQo
KSwgZGl2b3RFbmQoKSk7Ci0gICAgUmVzb2x2ZVNjb3BlSW5mbyByZXNvbHZlU2NvcGVJbmZvOwot
ICAgIFJlZlB0cjxSZWdpc3RlcklEPiBzY29wZSA9IGdlbmVyYXRvci5lbWl0UmVzb2x2ZVNjb3Bl
KG51bGxwdHIsIG1faWRlbnQsIHJlc29sdmVTY29wZUluZm8pOworICAgIFJlZlB0cjxSZWdpc3Rl
cklEPiBzY29wZSA9IGdlbmVyYXRvci5lbWl0UmVzb2x2ZVNjb3BlKG51bGxwdHIsIHZhcik7CiAg
ICAgaWYgKGRzdCA9PSBnZW5lcmF0b3IuaWdub3JlZFJlc3VsdCgpKQogICAgICAgICBkc3QgPSAw
OwogICAgIFJlZlB0cjxSZWdpc3RlcklEPiByZXN1bHQgPSBnZW5lcmF0b3IuZW1pdE5vZGUoZHN0
LCBtX3JpZ2h0KTsKICAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCksIGRp
dm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7Ci0gICAgUmVnaXN0ZXJJRCogcmV0dXJuUmVzdWx0ID0g
Z2VuZXJhdG9yLmVtaXRQdXRUb1Njb3BlKHNjb3BlLmdldCgpLCBtX2lkZW50LCByZXN1bHQuZ2V0
KCksIGdlbmVyYXRvci5pc1N0cmljdE1vZGUoKSA/IFRocm93SWZOb3RGb3VuZCA6IERvTm90VGhy
b3dJZk5vdEZvdW5kLCByZXNvbHZlU2NvcGVJbmZvKTsKKyAgICBSZWdpc3RlcklEKiByZXR1cm5S
ZXN1bHQgPSBnZW5lcmF0b3IuZW1pdFB1dFRvU2NvcGUoc2NvcGUuZ2V0KCksIHZhciwgcmVzdWx0
LmdldCgpLCBnZW5lcmF0b3IuaXNTdHJpY3RNb2RlKCkgPyBUaHJvd0lmTm90Rm91bmQgOiBEb05v
dFRocm93SWZOb3RGb3VuZCk7CiAgICAgaWYgKGdlbmVyYXRvci52bSgpLT50eXBlUHJvZmlsZXIo
KSkgewotICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlKHJlc3VsdC5nZXQoKSwgcmVz
b2x2ZVNjb3BlSW5mby5pc0xvY2FsKCkgPyBQcm9maWxlVHlwZUJ5dGVjb2RlUHV0VG9Mb2NhbFNj
b3BlIDogUHJvZmlsZVR5cGVCeXRlY29kZVB1dFRvU2NvcGUsICZtX2lkZW50KTsKKyAgICAgICAg
Z2VuZXJhdG9yLmVtaXRQcm9maWxlVHlwZShyZXN1bHQuZ2V0KCksIHZhci5pc1Jlc29sdmVkKCkg
PyBQcm9maWxlVHlwZUJ5dGVjb2RlUHV0VG9Mb2NhbFNjb3BlIDogUHJvZmlsZVR5cGVCeXRlY29k
ZVB1dFRvU2NvcGUsICZtX2lkZW50KTsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRUeXBlUHJvZmls
ZXJFeHByZXNzaW9uSW5mbyhkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwogICAgIH0gCiAgICAg
cmV0dXJuIHJldHVyblJlc3VsdDsKQEAgLTE3MDgsMTggKzE3MDgsMTkgQEAgUmVnaXN0ZXJJRCog
Q29tbWFOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZQogUmVnaXN0ZXJJRCogQ29uc3REZWNsTm9kZTo6
ZW1pdENvZGVTaW5nbGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvcikKIHsKICAgICAvLyBG
SVhNRTogVGhpcyBjb2RlIGRvZXMgbm90IG1hdGNoIHRoZSBiZWhhdmlvciBvZiBjb25zdCBpbiBG
aXJlZm94LgotICAgIGlmIChMb2NhbCBsb2NhbCA9IGdlbmVyYXRvci5jb25zdExvY2FsKG1faWRl
bnQpKSB7CisgICAgVmFyaWFibGUgdmFyID0gZ2VuZXJhdG9yLnZhcmlhYmxlKG1faWRlbnQpOwor
ICAgIGlmIChSZWdpc3RlcklEKiBsb2NhbCA9IHZhci5sb2NhbCgpKSB7CiAgICAgICAgIGlmICgh
bV9pbml0KQotICAgICAgICAgICAgcmV0dXJuIGxvY2FsLmdldCgpOworICAgICAgICAgICAgcmV0
dXJuIGxvY2FsOwogCiAgICAgICAgIC8vIEZJWE1FOiBNYXliZSBjYWxsIGVtaXRFeHByZXNzaW9u
SW5mbyBoZXJlLgotICAgICAgICBpZiAobG9jYWwuaXNTcGVjaWFsKCkgfHwgZ2VuZXJhdG9yLnZt
KCktPnR5cGVQcm9maWxlcigpKSB7CisgICAgICAgIGlmICh2YXIuaXNTcGVjaWFsKCkgfHwgZ2Vu
ZXJhdG9yLnZtKCktPnR5cGVQcm9maWxlcigpKSB7CiAgICAgICAgICAgICBSZWZQdHI8UmVnaXN0
ZXJJRD4gdGVtcERzdCA9IGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKTsKICAgICAgICAgICAgIGdl
bmVyYXRvci5lbWl0Tm9kZSh0ZW1wRHN0LmdldCgpLCBtX2luaXQpOwotICAgICAgICAgICAgcmV0
dXJuIGdlbmVyYXRvci5lbWl0TW92ZShsb2NhbC5nZXQoKSwgdGVtcERzdC5nZXQoKSk7CisgICAg
ICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRNb3ZlKGxvY2FsLCB0ZW1wRHN0LmdldCgpKTsK
ICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0Tm9kZShs
b2NhbC5nZXQoKSwgbV9pbml0KTsKKyAgICAgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0Tm9kZShs
b2NhbCwgbV9pbml0KTsKICAgICB9CiAKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gdmFsdWUgPSBt
X2luaXQgPyBnZW5lcmF0b3IuZW1pdE5vZGUobV9pbml0KSA6IGdlbmVyYXRvci5lbWl0TG9hZCgw
LCBqc1VuZGVmaW5lZCgpKTsKQEAgLTE3MjgsMTggKzE3MjksMTYgQEAgUmVnaXN0ZXJJRCogQ29u
c3REZWNsTm9kZTo6ZW1pdENvZGVTaW5nbAogICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRJ
bml0R2xvYmFsQ29uc3QobV9pZGVudCwgdmFsdWUuZ2V0KCkpOwogCiAgICAgaWYgKGdlbmVyYXRv
ci5jb2RlVHlwZSgpICE9IEV2YWxDb2RlKSB7Ci0KLSAgICAgICAgUmVzb2x2ZVNjb3BlSW5mbyBy
ZXNvbHZlU2NvcGVJbmZvOwotICAgICAgICBpZiAoUmVmUHRyPFJlZ2lzdGVySUQ+IHNjb3BlID0g
Z2VuZXJhdG9yLmVtaXRSZXNvbHZlQ29uc3RhbnRMb2NhbChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5
KCksIG1faWRlbnQsIHJlc29sdmVTY29wZUluZm8pKQotICAgICAgICAgICAgcmV0dXJuIGdlbmVy
YXRvci5lbWl0UHV0VG9TY29wZShzY29wZS5nZXQoKSwgbV9pZGVudCwgdmFsdWUuZ2V0KCksIERv
Tm90VGhyb3dJZk5vdEZvdW5kLCByZXNvbHZlU2NvcGVJbmZvKTsKLQotICAgICAgICByZXR1cm4g
dmFsdWUuZ2V0KCk7CisgICAgICAgIGlmICghdmFyLmlzUmVzb2x2ZWQoKSkKKyAgICAgICAgICAg
IHJldHVybiB2YWx1ZS5nZXQoKTsKKyAgICAgICAgCisgICAgICAgIFJlZlB0cjxSZWdpc3RlcklE
PiBzY29wZSA9IGdlbmVyYXRvci5lbWl0UmVzb2x2ZVNjb3BlKGdlbmVyYXRvci5uZXdUZW1wb3Jh
cnkoKSwgdmFyKTsKKyAgICAgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0UHV0VG9TY29wZShzY29w
ZS5nZXQoKSwgdmFyLCB2YWx1ZS5nZXQoKSwgRG9Ob3RUaHJvd0lmTm90Rm91bmQpOwogICAgIH0K
IAogICAgIC8vIEZJWE1FOiBUaGlzIHdpbGwgcmVzdWx0IGluIGluY29ycmVjdCBhc3NpZ25tZW50
IGlmIG1faWRlbnQgZXhpc3RzIGluIGFuIGludGVydmVuaW5nIHdpdGggc2NvcGUuCi0gICAgUmVz
b2x2ZVNjb3BlSW5mbyByZXNvbHZlU2NvcGVJbmZvOwotICAgIFJlZlB0cjxSZWdpc3RlcklEPiBz
Y29wZSA9IGdlbmVyYXRvci5lbWl0UmVzb2x2ZVNjb3BlKG51bGxwdHIsIG1faWRlbnQsIHJlc29s
dmVTY29wZUluZm8pOwotICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdFB1dFRvU2NvcGUoc2NvcGUu
Z2V0KCksIG1faWRlbnQsIHZhbHVlLmdldCgpLCBEb05vdFRocm93SWZOb3RGb3VuZCwgcmVzb2x2
ZVNjb3BlSW5mbyk7CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHNjb3BlID0gZ2VuZXJhdG9yLmVt
aXRSZXNvbHZlU2NvcGUobnVsbHB0ciwgdmFyKTsKKyAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRQ
dXRUb1Njb3BlKHNjb3BlLmdldCgpLCB2YXIsIHZhbHVlLmdldCgpLCBEb05vdFRocm93SWZOb3RG
b3VuZCk7CiB9CiAKIFJlZ2lzdGVySUQqIENvbnN0RGVjbE5vZGU6OmVtaXRCeXRlY29kZShCeXRl
Y29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKikKQEAgLTE4MzEsMTMgKzE4MzAs
MTMgQEAgUmVnaXN0ZXJJRCogRW1wdHlWYXJFeHByZXNzaW9uOjplbWl0Qnl0ZQogICAgIGlmICgh
Z2VuZXJhdG9yLnZtKCktPnR5cGVQcm9maWxlcigpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
IAotICAgIGlmIChMb2NhbCBsb2NhbCA9IGdlbmVyYXRvci5sb2NhbChtX2lkZW50KSkKLSAgICAg
ICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlVHlwZShsb2NhbC5nZXQoKSwgUHJvZmlsZVR5cGVCeXRl
Y29kZUhhc0dsb2JhbElELCBudWxscHRyKTsKKyAgICBWYXJpYWJsZSB2YXIgPSBnZW5lcmF0b3Iu
dmFyaWFibGUobV9pZGVudCk7CisgICAgaWYgKFJlZ2lzdGVySUQqIGxvY2FsID0gdmFyLmxvY2Fs
KCkpCisgICAgICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZVR5cGUobG9jYWwsIFByb2ZpbGVUeXBl
Qnl0ZWNvZGVIYXNHbG9iYWxJRCwgbnVsbHB0cik7CiAgICAgZWxzZSB7Ci0gICAgICAgIFJlc29s
dmVTY29wZUluZm8gcmVzb2x2ZVNjb3BlSW5mbzsKLSAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+
IHNjb3BlID0gZ2VuZXJhdG9yLmVtaXRSZXNvbHZlU2NvcGUobnVsbHB0ciwgbV9pZGVudCwgcmVz
b2x2ZVNjb3BlSW5mbyk7Ci0gICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiB2YWx1ZSA9IGdlbmVy
YXRvci5lbWl0R2V0RnJvbVNjb3BlKGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgc2NvcGUuZ2V0
KCksIG1faWRlbnQsIERvTm90VGhyb3dJZk5vdEZvdW5kLCByZXNvbHZlU2NvcGVJbmZvKTsKLSAg
ICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlVHlwZSh2YWx1ZS5nZXQoKSwgcmVzb2x2ZVNjb3Bl
SW5mby5pc0xvY2FsKCkgPyBQcm9maWxlVHlwZUJ5dGVjb2RlR2V0RnJvbUxvY2FsU2NvcGUgOiBQ
cm9maWxlVHlwZUJ5dGVjb2RlR2V0RnJvbVNjb3BlLCAmbV9pZGVudCk7CisgICAgICAgIFJlZlB0
cjxSZWdpc3RlcklEPiBzY29wZSA9IGdlbmVyYXRvci5lbWl0UmVzb2x2ZVNjb3BlKG51bGxwdHIs
IHZhcik7CisgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiB2YWx1ZSA9IGdlbmVyYXRvci5lbWl0
R2V0RnJvbVNjb3BlKGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgc2NvcGUuZ2V0KCksIHZhciwg
RG9Ob3RUaHJvd0lmTm90Rm91bmQpOworICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBl
KHZhbHVlLmdldCgpLCByZXNvbHZlU2NvcGVJbmZvLmlzUmVzb2x2ZWQoKSA/IFByb2ZpbGVUeXBl
Qnl0ZWNvZGVHZXRGcm9tTG9jYWxTY29wZSA6IFByb2ZpbGVUeXBlQnl0ZWNvZGVHZXRGcm9tU2Nv
cGUsICZtX2lkZW50KTsKICAgICB9CiAKICAgICBnZW5lcmF0b3IuZW1pdFR5cGVQcm9maWxlckV4
cHJlc3Npb25JbmZvKHBvc2l0aW9uKCksIEpTVGV4dFBvc2l0aW9uKC0xLCBwb3NpdGlvbigpLm9m
ZnNldCArIG1faWRlbnQubGVuZ3RoKCksIC0xKSk7CkBAIC0yMDA3LDggKzIwMDYsNyBAQCBSZWdp
c3RlcklEKiBGb3JJbk5vZGU6OnRyeUdldEJvdW5kTG9jYWwoCiB7CiAgICAgaWYgKG1fbGV4cHIt
PmlzUmVzb2x2ZU5vZGUoKSkgewogICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IHN0
YXRpY19jYXN0PFJlc29sdmVOb2RlKj4obV9sZXhwciktPmlkZW50aWZpZXIoKTsKLSAgICAgICAg
TG9jYWwgbG9jYWwgPSBnZW5lcmF0b3IubG9jYWwoaWRlbnQpOwotICAgICAgICByZXR1cm4gbG9j
YWwuZ2V0KCk7CisgICAgICAgIHJldHVybiBnZW5lcmF0b3IudmFyaWFibGUoaWRlbnQpLmxvY2Fs
KCk7CiAgICAgfQogCiAgICAgaWYgKG1fbGV4cHItPmlzRGVjb25zdHJ1Y3Rpb25Ob2RlKCkpIHsK
QEAgLTIwMTksMTAgKzIwMTcsMTAgQEAgUmVnaXN0ZXJJRCogRm9ySW5Ob2RlOjp0cnlHZXRCb3Vu
ZExvY2FsKAogCiAgICAgICAgIGF1dG8gc2ltcGxlQmluZGluZyA9IHN0YXRpY19jYXN0PEJpbmRp
bmdOb2RlKj4oYmluZGluZyk7CiAgICAgICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gc2lt
cGxlQmluZGluZy0+Ym91bmRQcm9wZXJ0eSgpOwotICAgICAgICBMb2NhbCBsb2NhbCA9IGdlbmVy
YXRvci5sb2NhbChpZGVudCk7Ci0gICAgICAgIGlmIChsb2NhbC5pc1NwZWNpYWwoKSkKKyAgICAg
ICAgVmFyaWFibGUgdmFyID0gZ2VuZXJhdG9yLnZhcmlhYmxlKGlkZW50KTsKKyAgICAgICAgaWYg
KHZhci5pc1NwZWNpYWwoKSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICBy
ZXR1cm4gbG9jYWwuZ2V0KCk7CisgICAgICAgIHJldHVybiB2YXIubG9jYWwoKTsKICAgICB9CiAK
ICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTIwMzIsMTggKzIwMzAsMTcgQEAgdm9pZCBGb3JJbk5v
ZGU6OmVtaXRMb29wSGVhZGVyKEJ5dGVjb2RlRwogewogICAgIGlmIChtX2xleHByLT5pc1Jlc29s
dmVOb2RlKCkpIHsKICAgICAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBzdGF0aWNfY2Fz
dDxSZXNvbHZlTm9kZSo+KG1fbGV4cHIpLT5pZGVudGlmaWVyKCk7Ci0gICAgICAgIExvY2FsIGxv
Y2FsID0gZ2VuZXJhdG9yLmxvY2FsKGlkZW50KTsKLSAgICAgICAgaWYgKGxvY2FsLmdldCgpKQot
ICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRNb3ZlKGxvY2FsLmdldCgpLCBwcm9wZXJ0eU5hbWUp
OworICAgICAgICBWYXJpYWJsZSB2YXIgPSBnZW5lcmF0b3IudmFyaWFibGUoaWRlbnQpOworICAg
ICAgICBpZiAoUmVnaXN0ZXJJRCogbG9jYWwgPSB2YXIubG9jYWwoKSkKKyAgICAgICAgICAgIGdl
bmVyYXRvci5lbWl0TW92ZShsb2NhbCwgcHJvcGVydHlOYW1lKTsKICAgICAgICAgZWxzZSB7CiAg
ICAgICAgICAgICBpZiAoZ2VuZXJhdG9yLmlzU3RyaWN0TW9kZSgpKQogICAgICAgICAgICAgICAg
IGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZv
dEVuZCgpKTsKLSAgICAgICAgICAgIFJlc29sdmVTY29wZUluZm8gcmVzb2x2ZVNjb3BlSW5mbzsK
LSAgICAgICAgICAgIFJlZ2lzdGVySUQqIHNjb3BlID0gZ2VuZXJhdG9yLmVtaXRSZXNvbHZlU2Nv
cGUobnVsbHB0ciwgaWRlbnQsIHJlc29sdmVTY29wZUluZm8pOworICAgICAgICAgICAgUmVnaXN0
ZXJJRCogc2NvcGUgPSBnZW5lcmF0b3IuZW1pdFJlc29sdmVTY29wZShudWxscHRyLCB2YXIpOwog
ICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgpLCBkaXZvdFN0
YXJ0KCksIGRpdm90RW5kKCkpOwotICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRQdXRUb1Njb3Bl
KHNjb3BlLCBpZGVudCwgcHJvcGVydHlOYW1lLCBnZW5lcmF0b3IuaXNTdHJpY3RNb2RlKCkgPyBU
aHJvd0lmTm90Rm91bmQgOiBEb05vdFRocm93SWZOb3RGb3VuZCwgcmVzb2x2ZVNjb3BlSW5mbyk7
CisgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdFB1dFRvU2NvcGUoc2NvcGUsIHZhciwgcHJvcGVy
dHlOYW1lLCBnZW5lcmF0b3IuaXNTdHJpY3RNb2RlKCkgPyBUaHJvd0lmTm90Rm91bmQgOiBEb05v
dFRocm93SWZOb3RGb3VuZCk7CiAgICAgICAgICAgICBpZiAoZ2VuZXJhdG9yLnZtKCktPnR5cGVQ
cm9maWxlcigpKQotICAgICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZVR5cGUocHJv
cGVydHlOYW1lLCByZXNvbHZlU2NvcGVJbmZvLmlzTG9jYWwoKSA/IFByb2ZpbGVUeXBlQnl0ZWNv
ZGVQdXRUb0xvY2FsU2NvcGUgOiBQcm9maWxlVHlwZUJ5dGVjb2RlUHV0VG9TY29wZSwgJmlkZW50
KTsKKyAgICAgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlKHByb3BlcnR5TmFt
ZSwgdmFyLmlzUmVzb2x2ZWQoKSA/IFByb2ZpbGVUeXBlQnl0ZWNvZGVQdXRUb0xvY2FsU2NvcGUg
OiBQcm9maWxlVHlwZUJ5dGVjb2RlUHV0VG9TY29wZSwgJmlkZW50KTsKICAgICAgICAgfQogICAg
ICAgICBpZiAoZ2VuZXJhdG9yLnZtKCktPnR5cGVQcm9maWxlcigpKQogICAgICAgICAgICAgZ2Vu
ZXJhdG9yLmVtaXRUeXBlUHJvZmlsZXJFeHByZXNzaW9uSW5mbyhtX2xleHByLT5wb3NpdGlvbigp
LCBKU1RleHRQb3NpdGlvbigtMSwgbV9sZXhwci0+cG9zaXRpb24oKS5vZmZzZXQgKyBpZGVudC5s
ZW5ndGgoKSwgLTEpKTsKQEAgLTIwODQsMTIgKzIwODEsMTIgQEAgdm9pZCBGb3JJbk5vZGU6OmVt
aXRMb29wSGVhZGVyKEJ5dGVjb2RlRwogCiAgICAgICAgIGF1dG8gc2ltcGxlQmluZGluZyA9IHN0
YXRpY19jYXN0PEJpbmRpbmdOb2RlKj4oYmluZGluZyk7CiAgICAgICAgIGNvbnN0IElkZW50aWZp
ZXImIGlkZW50ID0gc2ltcGxlQmluZGluZy0+Ym91bmRQcm9wZXJ0eSgpOwotICAgICAgICBMb2Nh
bCBsb2NhbCA9IGdlbmVyYXRvci5sb2NhbChpZGVudCk7Ci0gICAgICAgIGlmICghbG9jYWwuZ2V0
KCkgfHwgbG9jYWwuaXNTcGVjaWFsKCkpIHsKKyAgICAgICAgVmFyaWFibGUgdmFyID0gZ2VuZXJh
dG9yLnZhcmlhYmxlKGlkZW50KTsKKyAgICAgICAgaWYgKCF2YXIubG9jYWwoKSB8fCB2YXIuaXNT
cGVjaWFsKCkpIHsKICAgICAgICAgICAgIGFzc2lnbk5vZGUtPmJpbmRpbmdzKCktPmJpbmRWYWx1
ZShnZW5lcmF0b3IsIHByb3BlcnR5TmFtZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRNb3ZlKGxvY2FsLmdldCgpLCBwcm9wZXJ0eU5hbWUp
OworICAgICAgICBnZW5lcmF0b3IuZW1pdE1vdmUodmFyLmxvY2FsKCksIHByb3BlcnR5TmFtZSk7
CiAgICAgICAgIGlmIChnZW5lcmF0b3Iudm0oKS0+dHlwZVByb2ZpbGVyKCkpCiAgICAgICAgICAg
ICBnZW5lcmF0b3IuZW1pdFR5cGVQcm9maWxlckV4cHJlc3Npb25JbmZvKHNpbXBsZUJpbmRpbmct
PmRpdm90U3RhcnQoKSwgc2ltcGxlQmluZGluZy0+ZGl2b3RFbmQoKSk7CiAgICAgICAgIHJldHVy
bjsKQEAgLTIyNTcsMTcgKzIyNTQsMTcgQEAgdm9pZCBGb3JPZk5vZGU6OmVtaXRCeXRlY29kZShC
eXRlY29kZUdlbgogICAgIHsKICAgICAgICAgaWYgKG1fbGV4cHItPmlzUmVzb2x2ZU5vZGUoKSkg
ewogICAgICAgICAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBzdGF0aWNfY2FzdDxSZXNv
bHZlTm9kZSo+KG1fbGV4cHIpLT5pZGVudGlmaWVyKCk7Ci0gICAgICAgICAgICBpZiAoTG9jYWwg
bG9jYWwgPSBnZW5lcmF0b3IubG9jYWwoaWRlbnQpKQotICAgICAgICAgICAgICAgIGdlbmVyYXRv
ci5lbWl0TW92ZShsb2NhbC5nZXQoKSwgdmFsdWUpOworICAgICAgICAgICAgVmFyaWFibGUgdmFy
ID0gZ2VuZXJhdG9yLnZhcmlhYmxlKGlkZW50KTsKKyAgICAgICAgICAgIGlmIChSZWdpc3RlcklE
KiBsb2NhbCA9IHZhci5sb2NhbCgpKQorICAgICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0TW92
ZShsb2NhbCwgdmFsdWUpOwogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgaWYg
KGdlbmVyYXRvci5pc1N0cmljdE1vZGUoKSkKICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdG9y
LmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwot
ICAgICAgICAgICAgICAgIFJlc29sdmVTY29wZUluZm8gcmVzb2x2ZVNjb3BlSW5mbzsKLSAgICAg
ICAgICAgICAgICBSZWdpc3RlcklEKiBzY29wZSA9IGdlbmVyYXRvci5lbWl0UmVzb2x2ZVNjb3Bl
KG51bGxwdHIsIGlkZW50LCByZXNvbHZlU2NvcGVJbmZvKTsKKyAgICAgICAgICAgICAgICBSZWdp
c3RlcklEKiBzY29wZSA9IGdlbmVyYXRvci5lbWl0UmVzb2x2ZVNjb3BlKG51bGxwdHIsIHZhcik7
CiAgICAgICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgpLCBk
aXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwotICAgICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0
UHV0VG9TY29wZShzY29wZSwgaWRlbnQsIHZhbHVlLCBnZW5lcmF0b3IuaXNTdHJpY3RNb2RlKCkg
PyBUaHJvd0lmTm90Rm91bmQgOiBEb05vdFRocm93SWZOb3RGb3VuZCwgcmVzb2x2ZVNjb3BlSW5m
byk7CisgICAgICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRQdXRUb1Njb3BlKHNjb3BlLCB2YXIs
IHZhbHVlLCBnZW5lcmF0b3IuaXNTdHJpY3RNb2RlKCkgPyBUaHJvd0lmTm90Rm91bmQgOiBEb05v
dFRocm93SWZOb3RGb3VuZCk7CiAgICAgICAgICAgICAgICAgaWYgKGdlbmVyYXRvci52bSgpLT50
eXBlUHJvZmlsZXIoKSkKLSAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxl
VHlwZSh2YWx1ZSwgcmVzb2x2ZVNjb3BlSW5mby5pc0xvY2FsKCkgPyBQcm9maWxlVHlwZUJ5dGVj
b2RlUHV0VG9Mb2NhbFNjb3BlIDogUHJvZmlsZVR5cGVCeXRlY29kZVB1dFRvU2NvcGUsICZpZGVu
dCk7CisgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZVR5cGUodmFsdWUs
IHZhci5pc1Jlc29sdmVkKCkgPyBQcm9maWxlVHlwZUJ5dGVjb2RlUHV0VG9Mb2NhbFNjb3BlIDog
UHJvZmlsZVR5cGVCeXRlY29kZVB1dFRvU2NvcGUsICZpZGVudCk7CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICBpZiAoZ2VuZXJhdG9yLnZtKCktPnR5cGVQcm9maWxlcigpKQogICAgICAgICAg
ICAgICAgIGdlbmVyYXRvci5lbWl0VHlwZVByb2ZpbGVyRXhwcmVzc2lvbkluZm8obV9sZXhwci0+
cG9zaXRpb24oKSwgSlNUZXh0UG9zaXRpb24oLTEsIG1fbGV4cHItPnBvc2l0aW9uKCkub2Zmc2V0
ICsgaWRlbnQubGVuZ3RoKCksIC0xKSk7CkBAIC0yODUyLDI0ICsyODQ5LDYgQEAgdm9pZCBBcnJh
eVBhdHRlcm5Ob2RlOjpiaW5kVmFsdWUoQnl0ZWNvZAogCiBSZWdpc3RlcklEKiBBcnJheVBhdHRl
cm5Ob2RlOjplbWl0RGlyZWN0QmluZGluZyhCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBS
ZWdpc3RlcklEKiBkc3QsIEV4cHJlc3Npb25Ob2RlKiByaHMpCiB7Ci0gICAgaWYgKHJocy0+aXNS
ZXNvbHZlTm9kZSgpCi0gICAgICAgICYmIGdlbmVyYXRvci53aWxsUmVzb2x2ZVRvQXJndW1lbnRz
UmVnaXN0ZXIoc3RhdGljX2Nhc3Q8UmVzb2x2ZU5vZGUqPihyaHMpLT5pZGVudGlmaWVyKCkpCi0g
ICAgICAgICYmIGdlbmVyYXRvci5oYXNTYWZlTG9jYWxBcmd1bWVudHNSZWdpc3RlcigpJiYgIWdl
bmVyYXRvci5zeW1ib2xUYWJsZSgpLnNsb3dBcmd1bWVudHMoKSkgewotICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IG1fdGFyZ2V0UGF0dGVybnMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAg
ICAgIGF1dG8gdGFyZ2V0ID0gbV90YXJnZXRQYXR0ZXJuc1tpXTsKLSAgICAgICAgICAgIGlmICgh
dGFyZ2V0KQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gdGVtcCA9IGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKTsK
LSAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0TG9hZCh0ZW1wLmdldCgpLCBqc051bWJlcihpKSk7
Ci0gICAgICAgICAgICBnZW5lcmF0b3IuZW1pdEdldEFyZ3VtZW50QnlWYWwodGVtcC5nZXQoKSwg
Z2VuZXJhdG9yLnVuY2hlY2tlZExvY2FsQXJndW1lbnRzUmVnaXN0ZXIoKSwgdGVtcC5nZXQoKSk7
Ci0gICAgICAgICAgICB0YXJnZXQtPmJpbmRWYWx1ZShnZW5lcmF0b3IsIHRlbXAuZ2V0KCkpOwot
ICAgICAgICB9Ci0gICAgICAgIGlmIChkc3QgPT0gZ2VuZXJhdG9yLmlnbm9yZWRSZXN1bHQoKSB8
fCAhZHN0KQotICAgICAgICAgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0TG9hZChnZW5lcmF0b3Iu
ZmluYWxEZXN0aW5hdGlvbihkc3QpLCBqc1VuZGVmaW5lZCgpKTsKLSAgICAgICAgTG9jYWwgbG9j
YWwgPSBnZW5lcmF0b3IubG9jYWwoZ2VuZXJhdG9yLnZtKCktPnByb3BlcnR5TmFtZXMtPmFyZ3Vt
ZW50cyk7Ci0gICAgICAgIHJldHVybiBnZW5lcmF0b3IubW92ZVRvRGVzdGluYXRpb25JZk5lZWRl
ZChkc3QsIGxvY2FsLmdldCgpKTsKLSAgICB9CiAgICAgaWYgKCFyaHMtPmlzU2ltcGxlQXJyYXko
KSkKICAgICAgICAgcmV0dXJuIDA7CiAKQEAgLTI5NTksMjQgKzI5MzgsMjQgQEAgdm9pZCBPYmpl
Y3RQYXR0ZXJuTm9kZTo6Y29sbGVjdEJvdW5kSWRlbgogCiB2b2lkIEJpbmRpbmdOb2RlOjpiaW5k
VmFsdWUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogdmFsdWUpIGNv
bnN0CiB7Ci0gICAgaWYgKExvY2FsIGxvY2FsID0gZ2VuZXJhdG9yLmxvY2FsKG1fYm91bmRQcm9w
ZXJ0eSkpIHsKLSAgICAgICAgaWYgKGxvY2FsLmlzUmVhZE9ubHkoKSkgeworICAgIFZhcmlhYmxl
IHZhciA9IGdlbmVyYXRvci52YXJpYWJsZShtX2JvdW5kUHJvcGVydHkpOworICAgIGlmIChSZWdp
c3RlcklEKiBsb2NhbCA9IHZhci5sb2NhbCgpKSB7CisgICAgICAgIGlmICh2YXIuaXNSZWFkT25s
eSgpKSB7CiAgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdFJlYWRPbmx5RXhjZXB0aW9uSWZOZWVk
ZWQoKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBnZW5lcmF0b3Iu
ZW1pdE1vdmUobG9jYWwuZ2V0KCksIHZhbHVlKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRNb3Zl
KGxvY2FsLCB2YWx1ZSk7CiAgICAgICAgIGlmIChnZW5lcmF0b3Iudm0oKS0+dHlwZVByb2ZpbGVy
KCkpCiAgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdFR5cGVQcm9maWxlckV4cHJlc3Npb25JbmZv
KGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAg
aWYgKGdlbmVyYXRvci5pc1N0cmljdE1vZGUoKSkKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRFeHBy
ZXNzaW9uSW5mbyhkaXZvdEVuZCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwotICAgIFJl
c29sdmVTY29wZUluZm8gcmVzb2x2ZVNjb3BlSW5mbzsKLSAgICBSZWdpc3RlcklEKiBzY29wZSA9
IGdlbmVyYXRvci5lbWl0UmVzb2x2ZVNjb3BlKG51bGxwdHIsIG1fYm91bmRQcm9wZXJ0eSwgcmVz
b2x2ZVNjb3BlSW5mbyk7CisgICAgUmVnaXN0ZXJJRCogc2NvcGUgPSBnZW5lcmF0b3IuZW1pdFJl
c29sdmVTY29wZShudWxscHRyLCB2YXIpOwogICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbklu
Zm8oZGl2b3RFbmQoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKLSAgICBnZW5lcmF0b3Iu
ZW1pdFB1dFRvU2NvcGUoc2NvcGUsIG1fYm91bmRQcm9wZXJ0eSwgdmFsdWUsIGdlbmVyYXRvci5p
c1N0cmljdE1vZGUoKSA/IFRocm93SWZOb3RGb3VuZCA6IERvTm90VGhyb3dJZk5vdEZvdW5kLCBy
ZXNvbHZlU2NvcGVJbmZvKTsKKyAgICBnZW5lcmF0b3IuZW1pdFB1dFRvU2NvcGUoc2NvcGUsIHZh
ciwgdmFsdWUsIGdlbmVyYXRvci5pc1N0cmljdE1vZGUoKSA/IFRocm93SWZOb3RGb3VuZCA6IERv
Tm90VGhyb3dJZk5vdEZvdW5kKTsKICAgICBpZiAoZ2VuZXJhdG9yLnZtKCktPnR5cGVQcm9maWxl
cigpKSB7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZVR5cGUodmFsdWUsIHJlc29sdmVT
Y29wZUluZm8uaXNMb2NhbCgpID8gUHJvZmlsZVR5cGVCeXRlY29kZVB1dFRvTG9jYWxTY29wZSA6
IFByb2ZpbGVUeXBlQnl0ZWNvZGVQdXRUb1Njb3BlLCAmbV9ib3VuZFByb3BlcnR5KTsKKyAgICAg
ICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlVHlwZSh2YWx1ZSwgdmFyLmlzUmVzb2x2ZWQoKSA/IFBy
b2ZpbGVUeXBlQnl0ZWNvZGVQdXRUb0xvY2FsU2NvcGUgOiBQcm9maWxlVHlwZUJ5dGVjb2RlUHV0
VG9TY29wZSwgJm1fYm91bmRQcm9wZXJ0eSk7CiAgICAgICAgIGdlbmVyYXRvci5lbWl0VHlwZVBy
b2ZpbGVyRXhwcmVzc2lvbkluZm8oZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKICAgICB9CiAg
ICAgcmV0dXJuOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEhl
YXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0
SGVhcC5oCShyZXZpc2lvbiAxODA4NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Fic3RyYWN0SGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw2IEBAIG5hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICBtYWNybyhXb3JsZCkgXAogICAgIG1hY3JvKFN0
YWNrKSBcCiAgICAgbWFjcm8oSGVhcCkgXAotICAgIG1hY3JvKEFyZ3VtZW50c19yZWdpc3RlcnMp
IFwKICAgICBtYWNybyhCdXR0ZXJmbHlfcHVibGljTGVuZ3RoKSBcCiAgICAgbWFjcm8oQnV0dGVy
Zmx5X3ZlY3Rvckxlbmd0aCkgXAogICAgIG1hY3JvKEdldHRlclNldHRlcl9nZXR0ZXIpIFwKQEAg
LTY1LDcgKzY0LDggQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAgIG1hY3Jv
KEluZGV4ZWRDb250aWd1b3VzUHJvcGVydGllcykgXAogICAgIG1hY3JvKEluZGV4ZWRBcnJheVN0
b3JhZ2VQcm9wZXJ0aWVzKSBcCiAgICAgbWFjcm8oQXJyYXlTdG9yYWdlUHJvcGVydGllcykgXAot
ICAgIG1hY3JvKFZhcmlhYmxlcykgXAorICAgIG1hY3JvKERpcmVjdEFyZ3VtZW50c1Byb3BlcnRp
ZXMpIFwKKyAgICBtYWNybyhTY29wZWRBcmd1bWVudHNQcm9wZXJ0aWVzKSBcCiAgICAgbWFjcm8o
VHlwZWRBcnJheVByb3BlcnRpZXMpIFwKICAgICBtYWNybyhIZWFwT2JqZWN0Q291bnQpIC8qIFVz
ZWQgdG8gcmVmbGVjdCB0aGUgZmFjdCB0aGF0IHNvbWUgYWxsb2NhdGlvbnMgcmV2ZWFsIG9iamVj
dCBpZGVudGl0eSAqL1wKICAgICBtYWNybyhSZWdFeHBTdGF0ZSkgXApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVyLmgJKHJldmlz
aW9uIDE4MDg3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRl
cnByZXRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDgsNyArMTQ4LDYgQEAgcHVibGljOgogICAg
IAogcHJpdmF0ZToKICAgICB2b2lkIGNsb2JiZXJXb3JsZChjb25zdCBDb2RlT3JpZ2luJiwgdW5z
aWduZWQgaW5kZXhJbkJsb2NrKTsKLSAgICB2b2lkIGNsb2JiZXJDYXB0dXJlZFZhcnMoY29uc3Qg
Q29kZU9yaWdpbiYpOwogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CiAgICAg
dm9pZCBmb3JBbGxWYWx1ZXModW5zaWduZWQgaW5kZXhJbkJsb2NrLCBGdW5jdG9yJik7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdElu
dGVycHJldGVySW5saW5lcy5oCShyZXZpc2lvbiAxODA4NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEwMzAsNyArMTAzMCw4IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0
YXRlVHkKICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZSku
c2V0KG1fZ3JhcGgsIG1fZ3JhcGgubV92bS5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpOwogICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czoKKyAgICAgICAgY2Fz
ZSBBcnJheTo6RGlyZWN0QXJndW1lbnRzOgorICAgICAgICBjYXNlIEFycmF5OjpTY29wZWRBcmd1
bWVudHM6CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VIZWFwVG9wKCk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6SW50MzI6CkBAIC0xNDczLDcgKzE0NzQs
NiBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgCiAgICAgY2FzZSBQdXRDbG9zdXJlVmFyOgotICAgICAgICBjbG9i
YmVyQ2FwdHVyZWRWYXJzKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CiAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgCiAgICAgY2FzZSBHZXRCeUlkOgpAQCAtMTYxNyw4ICsxNjE3LDExIEBAIGJv
b2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgY2FzZSBBcnJh
eTo6QXJyYXlTdG9yYWdlOgogICAgICAgICBjYXNlIEFycmF5OjpTbG93UHV0QXJyYXlTdG9yYWdl
OgogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czoKLSAg
ICAgICAgICAgIGZpbHRlcihub2RlLT5jaGlsZDEoKSwgU3BlY0FyZ3VtZW50cyk7CisgICAgICAg
IGNhc2UgQXJyYXk6OkRpcmVjdEFyZ3VtZW50czoKKyAgICAgICAgICAgIGZpbHRlcihub2RlLT5j
aGlsZDEoKSwgU3BlY0RpcmVjdEFyZ3VtZW50cyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBBcnJheTo6U2NvcGVkQXJndW1lbnRzOgorICAgICAgICAgICAgZmlsdGVyKG5vZGUt
PmNoaWxkMSgpLCBTcGVjU2NvcGVkQXJndW1lbnRzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICBjYXNlIEFycmF5OjpJbnQ4QXJyYXk6CiAgICAgICAgICAgICBmaWx0ZXIobm9kZS0+Y2hp
bGQxKCksIFNwZWNJbnQ4QXJyYXkpOwpAQCAtMjEwNCwzNSArMjEwNywxMCBAQCB0ZW1wbGF0ZTx0
eXBlbmFtZSBBYnN0cmFjdFN0YXRlVHlwZT4KIHZvaWQgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0
cmFjdFN0YXRlVHlwZT46OmNsb2JiZXJXb3JsZCgKICAgICBjb25zdCBDb2RlT3JpZ2luJiBjb2Rl
T3JpZ2luLCB1bnNpZ25lZCBjbG9iYmVyTGltaXQpCiB7Ci0gICAgY2xvYmJlckNhcHR1cmVkVmFy
cyhjb2RlT3JpZ2luKTsKICAgICBjbG9iYmVyU3RydWN0dXJlcyhjbG9iYmVyTGltaXQpOwogfQog
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBBYnN0cmFjdFN0YXRlVHlwZT4KLXZvaWQgQWJzdHJhY3RJbnRl
cnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmNsb2JiZXJDYXB0dXJlZFZhcnMoY29uc3QgQ29k
ZU9yaWdpbiYgY29kZU9yaWdpbikKLXsKLSAgICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lv
bigiREZHIEFJIENsb2JiZXIgQ2FwdHVyZWQgVmFycyIpOwotICAgIGlmIChjb2RlT3JpZ2luLmlu
bGluZUNhbGxGcmFtZSkgewotICAgICAgICBjb25zdCBCaXRWZWN0b3ImIGNhcHR1cmVkVmFycyA9
IGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5jYXB0dXJlZFZhcnM7Ci0gICAgICAgIGZvciAo
c2l6ZV90IGkgPSBjYXB0dXJlZFZhcnMuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICBpZiAo
IWNhcHR1cmVkVmFycy5xdWlja0dldChpKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgICAgIG1fc3RhdGUudmFyaWFibGVzKCkubG9jYWwoaSkubWFrZUhlYXBUb3AoKTsKLSAg
ICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSBtX2NvZGVCbG9j
ay0+bV9udW1WYXJzOyBpLS07KSB7Ci0gICAgICAgICAgICBpZiAobV9jb2RlQmxvY2stPmlzQ2Fw
dHVyZWQodmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaSkpKQotICAgICAgICAgICAgICAgIG1fc3Rh
dGUudmFyaWFibGVzKCkubG9jYWwoaSkubWFrZUhlYXBUb3AoKTsKLSAgICAgICAgfQotICAgIH0K
LQotICAgIGZvciAoc2l6ZV90IGkgPSBtX3N0YXRlLnZhcmlhYmxlcygpLm51bWJlck9mQXJndW1l
bnRzKCk7IGktLTspIHsKLSAgICAgICAgaWYgKG1fY29kZUJsb2NrLT5pc0NhcHR1cmVkKHZpcnR1
YWxSZWdpc3RlckZvckFyZ3VtZW50KGkpKSkKLSAgICAgICAgICAgIG1fc3RhdGUudmFyaWFibGVz
KCkuYXJndW1lbnQoaSkubWFrZUhlYXBUb3AoKTsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIEFic3RyYWN0U3RhdGVUeXBlPgogdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KIHZvaWQg
QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmZvckFsbFZhbHVlcygKICAg
ICB1bnNpZ25lZCBjbG9iYmVyTGltaXQsIEZ1bmN0b3ImIGZ1bmN0b3IpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuaAkocmV2aXNpb24gMTgwODc1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTM0NiwxOCArMzQ2LDE2IEBAIHN0cnVjdCBBYnN0cmFjdFZhbHVlIHsKICAg
ICAKICAgICAvLyBUaGlzIGlzIGEgcHJvdmVuIGNvbnN0cmFpbnQgb24gdGhlIHBvc3NpYmxlIHR5
cGVzIHRoYXQgdGhpcyB2YWx1ZSBjYW4gaGF2ZQogICAgIC8vIG5vdyBvciBhbnkgdGltZSBpbiB0
aGUgZnV0dXJlLCB1bmxlc3MgaXQgaXMgcmVhc3NpZ25lZC4gVGhpcyBmaWVsZCBpcwotICAgIC8v
IGltcGVydmlvdXMgdG8gc2lkZS1lZmZlY3RzIHVubGVzcyB0aGUgc2lkZS1lZmZlY3QgY2FuIHJl
YXNzaWduIHRoZSB2YWx1ZQotICAgIC8vIChmb3IgZXhhbXBsZSBpZiB3ZSdyZSB0YWxraW5nIGFi
b3V0IGEgY2FwdHVyZWQgdmFyaWFibGUpLiBUaGUgcmVsYXRpb25zaGlwCi0gICAgLy8gYmV0d2Vl
biB0aGlzIGZpZWxkLCBhbmQgdGhlIHN0cnVjdHVyZSBmaWVsZHMgYWJvdmUsIGlzIGFzIGZvbGxv
d3MuIFRoZQotICAgIC8vIGZpZWxkcyBhYm92ZSBjb25zdHJhaW50IHRoZSBzdHJ1Y3R1cmVzIHRo
YXQgYSBjZWxsIG1heSBoYXZlLCBidXQgdGhleSBzYXkKLSAgICAvLyBub3RoaW5nIGFib3V0IHdo
ZXRoZXIgb3Igbm90IHRoZSB2YWx1ZSBpcyBrbm93biB0byBiZSBhIGNlbGwuIE1vcmUgZm9ybWFs
bHksCi0gICAgLy8gdGhlIG1fc3RydWN0dXJlIGlzIGl0c2VsZiBhbiBhYnN0cmFjdCB2YWx1ZSB0
aGF0IGNvbnNpc3RzIG9mIHRoZQotICAgIC8vIHVuaW9uIG9mIHRoZSBzZXQgb2YgYWxsIG5vbi1j
ZWxsIHZhbHVlcyBhbmQgdGhlIHNldCBvZiBjZWxsIHZhbHVlcyB0aGF0IGhhdmUKLSAgICAvLyB0
aGUgZ2l2ZW4gc3RydWN0dXJlLiBUaGlzIGFic3RyYWN0IHZhbHVlIGlzIHRoZW4gdGhlIGludGVy
c2VjdGlvbiBvZiB0aGUKLSAgICAvLyBtX3N0cnVjdHVyZSBhbmQgdGhlIHNldCBvZiB2YWx1ZXMg
d2hvc2UgdHlwZSBpcyBtX3R5cGUuIFNvLCBmb3IKLSAgICAvLyBleGFtcGxlIGlmIG1fdHlwZSBp
cyBTcGVjRmluYWx8U3BlY0ludDMyIGFuZCBtX3N0cnVjdHVyZSBpcwotICAgIC8vIFsweDEyMzQ1
XSB0aGVuIHRoaXMgYWJzdHJhY3QgdmFsdWUgY29ycmVzcG9uZHMgdG8gdGhlIHNldCBvZiBhbGwg
aW50ZWdlcnMKLSAgICAvLyB1bmlmaWVkIHdpdGggdGhlIHNldCBvZiBhbGwgb2JqZWN0cyB3aXRo
IHN0cnVjdHVyZSAweDEyMzQ1LgorICAgIC8vIGltcGVydmlvdXMgdG8gc2lkZS1lZmZlY3RzLiBU
aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhpcyBmaWVsZCwgYW5kIHRoZQorICAgIC8vIHN0cnVj
dHVyZSBmaWVsZHMgYWJvdmUsIGlzIGFzIGZvbGxvd3MuIFRoZSBmaWVsZHMgYWJvdmUgY29uc3Ry
YWludCB0aGUKKyAgICAvLyBzdHJ1Y3R1cmVzIHRoYXQgYSBjZWxsIG1heSBoYXZlLCBidXQgdGhl
eSBzYXkgbm90aGluZyBhYm91dCB3aGV0aGVyIG9yIG5vdAorICAgIC8vIHRoZSB2YWx1ZSBpcyBr
bm93biB0byBiZSBhIGNlbGwuIE1vcmUgZm9ybWFsbHksIHRoZSBtX3N0cnVjdHVyZSBpcyBpdHNl
bGYgYW4KKyAgICAvLyBhYnN0cmFjdCB2YWx1ZSB0aGF0IGNvbnNpc3RzIG9mIHRoZSB1bmlvbiBv
ZiB0aGUgc2V0IG9mIGFsbCBub24tY2VsbCB2YWx1ZXMKKyAgICAvLyBhbmQgdGhlIHNldCBvZiBj
ZWxsIHZhbHVlcyB0aGF0IGhhdmUgdGhlIGdpdmVuIHN0cnVjdHVyZS4gVGhpcyBhYnN0cmFjdAor
ICAgIC8vIHZhbHVlIGlzIHRoZW4gdGhlIGludGVyc2VjdGlvbiBvZiB0aGUgbV9zdHJ1Y3R1cmUg
YW5kIHRoZSBzZXQgb2YgdmFsdWVzCisgICAgLy8gd2hvc2UgdHlwZSBpcyBtX3R5cGUuIFNvLCBm
b3IgZXhhbXBsZSBpZiBtX3R5cGUgaXMgU3BlY0ZpbmFsfFNwZWNJbnQzMiBhbmQKKyAgICAvLyBt
X3N0cnVjdHVyZSBpcyBbMHgxMjM0NV0gdGhlbiB0aGlzIGFic3RyYWN0IHZhbHVlIGNvcnJlc3Bv
bmRzIHRvIHRoZSBzZXQgb2YKKyAgICAvLyBhbGwgaW50ZWdlcnMgdW5pZmllZCB3aXRoIHRoZSBz
ZXQgb2YgYWxsIG9iamVjdHMgd2l0aCBzdHJ1Y3R1cmUgMHgxMjM0NS4KICAgICBTcGVjdWxhdGVk
VHlwZSBtX3R5cGU7CiAgICAgCiAgICAgLy8gVGhpcyBpcyBhIHByb3ZlbiBjb25zdHJhaW50IG9u
IHRoZSBwb3NzaWJsZSBpbmRleGluZyB0eXBlcyB0aGF0IHRoaXMgdmFsdWUKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5jcHAJKHJldmlzaW9uIDE4MDg3NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTk3LDggKzE5NywxNSBAQCBBcnJheU1vZGUgQXJyYXlNb2RlOjpyZWZpbmUoCiAg
ICAgICAgIGlmIChpc1N0cmluZ1NwZWN1bGF0aW9uKGJhc2UpKQogICAgICAgICAgICAgcmV0dXJu
IHdpdGhUeXBlKEFycmF5OjpTdHJpbmcpOwogICAgICAgICAKLSAgICAgICAgaWYgKGlzQXJndW1l
bnRzU3BlY3VsYXRpb24oYmFzZSkpCi0gICAgICAgICAgICByZXR1cm4gd2l0aFR5cGUoQXJyYXk6
OkFyZ3VtZW50cyk7CisgICAgICAgIGlmIChpc0RpcmVjdEFyZ3VtZW50c1NwZWN1bGF0aW9uKGJh
c2UpIHx8IGlzU2NvcGVkQXJndW1lbnRzU3BlY3VsYXRpb24oYmFzZSkpIHsKKyAgICAgICAgICAg
IC8vIEhhbmRsZSBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGFzIGdlbmVyaWMgYWNjZXNzZXMuCisg
ICAgICAgICAgICBpZiAoZ3JhcGguaGFzRXhpdFNpdGUobm9kZS0+b3JpZ2luLnNlbWFudGljLCBP
dXRPZkJvdW5kcykgfHwgIWlzSW5Cb3VuZHMoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gQXJy
YXlNb2RlKEFycmF5OjpHZW5lcmljKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKGlz
RGlyZWN0QXJndW1lbnRzU3BlY3VsYXRpb24oYmFzZSkpCisgICAgICAgICAgICAgICAgcmV0dXJu
IHdpdGhUeXBlKEFycmF5OjpEaXJlY3RBcmd1bWVudHMpOworICAgICAgICAgICAgcmV0dXJuIHdp
dGhUeXBlKEFycmF5OjpTY29wZWRBcmd1bWVudHMpOworICAgICAgICB9CiAgICAgICAgIAogICAg
ICAgICBBcnJheU1vZGUgcmVzdWx0OwogICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKQEAg
LTM5Niw4ICs0MDMsMTEgQEAgYm9vbCBBcnJheU1vZGU6OmFscmVhZHlDaGVja2VkKEdyYXBoJiBn
cgogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0gfQogICAgICAgICAKLSAgICBj
YXNlIEFycmF5OjpBcmd1bWVudHM6Ci0gICAgICAgIHJldHVybiBzcGVjdWxhdGlvbkNoZWNrZWQo
dmFsdWUubV90eXBlLCBTcGVjQXJndW1lbnRzKTsKKyAgICBjYXNlIEFycmF5OjpEaXJlY3RBcmd1
bWVudHM6CisgICAgICAgIHJldHVybiBzcGVjdWxhdGlvbkNoZWNrZWQodmFsdWUubV90eXBlLCBT
cGVjRGlyZWN0QXJndW1lbnRzKTsKKyAgICAgICAgCisgICAgY2FzZSBBcnJheTo6U2NvcGVkQXJn
dW1lbnRzOgorICAgICAgICByZXR1cm4gc3BlY3VsYXRpb25DaGVja2VkKHZhbHVlLm1fdHlwZSwg
U3BlY1Njb3BlZEFyZ3VtZW50cyk7CiAgICAgICAgIAogICAgIGNhc2UgQXJyYXk6OkludDhBcnJh
eToKICAgICAgICAgcmV0dXJuIHNwZWN1bGF0aW9uQ2hlY2tlZCh2YWx1ZS5tX3R5cGUsIFNwZWNJ
bnQ4QXJyYXkpOwpAQCAtNDYxLDggKzQ3MSwxMCBAQCBjb25zdCBjaGFyKiBhcnJheVR5cGVUb1N0
cmluZyhBcnJheTo6VHlwCiAgICAgICAgIHJldHVybiAiQXJyYXlTdG9yYWdlIjsKICAgICBjYXNl
IEFycmF5OjpTbG93UHV0QXJyYXlTdG9yYWdlOgogICAgICAgICByZXR1cm4gIlNsb3dQdXRBcnJh
eVN0b3JhZ2UiOwotICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czoKLSAgICAgICAgcmV0dXJuICJB
cmd1bWVudHMiOworICAgIGNhc2UgQXJyYXk6OkRpcmVjdEFyZ3VtZW50czoKKyAgICAgICAgcmV0
dXJuICJEaXJlY3RBcmd1bWVudHMiOworICAgIGNhc2UgQXJyYXk6OlNjb3BlZEFyZ3VtZW50czoK
KyAgICAgICAgcmV0dXJuICJTY29wZWRBcmd1bWVudHMiOwogICAgIGNhc2UgQXJyYXk6OkludDhB
cnJheToKICAgICAgICAgcmV0dXJuICJJbnQ4QXJyYXkiOwogICAgIGNhc2UgQXJyYXk6OkludDE2
QXJyYXk6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmgJKHJl
dmlzaW9uIDE4MDg3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2Rl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDEyLCAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMi0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjUsNyArNjUsOSBAQCBlbnVtIFR5cGUgewog
ICAgIEFycmF5U3RvcmFnZSwKICAgICBTbG93UHV0QXJyYXlTdG9yYWdlLAogICAgIAotICAgIEFy
Z3VtZW50cywKKyAgICBEaXJlY3RBcmd1bWVudHMsCisgICAgU2NvcGVkQXJndW1lbnRzLAorICAg
IAogICAgIEludDhBcnJheSwKICAgICBJbnQxNkFycmF5LAogICAgIEludDMyQXJyYXksCkBAIC0y
OTQsNyArMjk2LDggQEAgcHVibGljOgogICAgICAgICBjYXNlIEFycmF5OjpVbnByb2ZpbGVkOgog
ICAgICAgICBjYXNlIEFycmF5OjpGb3JjZUV4aXQ6CiAgICAgICAgIGNhc2UgQXJyYXk6OkdlbmVy
aWM6Ci0gICAgICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czoKKyAgICAgICAgY2FzZSBBcnJheTo6
RGlyZWN0QXJndW1lbnRzOgorICAgICAgICBjYXNlIEFycmF5OjpTY29wZWRBcmd1bWVudHM6CiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKQEAgLTMyMCwxMSArMzIzLDkgQEAgcHVibGljOgogICAgIHsKICAgICAgICAg
c3dpdGNoICh0eXBlKCkpIHsKICAgICAgICAgY2FzZSBBcnJheTo6U3RyaW5nOgorICAgICAgICBj
YXNlIEFycmF5OjpEaXJlY3RBcmd1bWVudHM6CisgICAgICAgIGNhc2UgQXJyYXk6OlNjb3BlZEFy
Z3VtZW50czoKICAgICAgICAgICAgIHJldHVybiBBcnJheU1vZGUoQXJyYXk6OkdlbmVyaWMpOwot
I2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czoKLSAg
ICAgICAgICAgIHJldHVybiBBcnJheU1vZGUoQXJyYXk6OkdlbmVyaWMpOwotI2VuZGlmCiAgICAg
ICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgICAgIH0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShy
ZXZpc2lvbiAxODA4NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2Rl
UGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI1LDExICsyMjUsMTEgQEAgcHJpdmF0ZToK
ICAgICB2b2lkIGxpbmtCbG9jayhCYXNpY0Jsb2NrKiwgVmVjdG9yPEJhc2ljQmxvY2sqPiYgcG9z
c2libGVUYXJnZXRzKTsKICAgICB2b2lkIGxpbmtCbG9ja3MoVmVjdG9yPFVubGlua2VkQmxvY2s+
JiB1bmxpbmtlZEJsb2NrcywgVmVjdG9yPEJhc2ljQmxvY2sqPiYgcG9zc2libGVUYXJnZXRzKTsK
ICAgICAKLSAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShWaXJ0
dWFsUmVnaXN0ZXIgb3BlcmFuZCwgYm9vbCBpc0NhcHR1cmVkKQorICAgIFZhcmlhYmxlQWNjZXNz
RGF0YSogbmV3VmFyaWFibGVBY2Nlc3NEYXRhKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQogICAg
IHsKICAgICAgICAgQVNTRVJUKCFvcGVyYW5kLmlzQ29uc3RhbnQoKSk7CiAgICAgICAgIAotICAg
ICAgICBtX2dyYXBoLm1fdmFyaWFibGVBY2Nlc3NEYXRhLmFwcGVuZChWYXJpYWJsZUFjY2Vzc0Rh
dGEob3BlcmFuZCwgaXNDYXB0dXJlZCkpOworICAgICAgICBtX2dyYXBoLm1fdmFyaWFibGVBY2Nl
c3NEYXRhLmFwcGVuZChWYXJpYWJsZUFjY2Vzc0RhdGEob3BlcmFuZCkpOwogICAgICAgICByZXR1
cm4gJm1fZ3JhcGgubV92YXJpYWJsZUFjY2Vzc0RhdGEubGFzdCgpOwogICAgIH0KICAgICAKQEAg
LTM1OCw3ICszNTgsNiBAQCBwcml2YXRlOgogICAgICAgICB9CiAKICAgICAgICAgTm9kZSogbm9k
ZSA9IG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwubG9jYWwobG9jYWwpOwotICAgICAg
ICBib29sIGlzQ2FwdHVyZWQgPSBtX2NvZGVCbG9jay0+aXNDYXB0dXJlZChvcGVyYW5kLCBpbmxp
bmVDYWxsRnJhbWUoKSk7CiAgICAgICAgIAogICAgICAgICAvLyBUaGlzIGhhcyB0d28gZ29hbHM6
IDEpIGxpbmsgdG9nZXRoZXIgdmFyaWFibGUgYWNjZXNzIGRhdGFzLCBhbmQgMikKICAgICAgICAg
Ly8gdHJ5IHRvIGF2b2lkIGNyZWF0aW5nIHJlZHVuZGFudCBHZXRMb2NhbHMuICgxKSBpcyByZXF1
aXJlZCBmb3IKQEAgLTM3MCwyMCArMzY5LDE3IEBAIHByaXZhdGU6CiAgICAgICAgIAogICAgICAg
ICBpZiAobm9kZSkgewogICAgICAgICAgICAgdmFyaWFibGUgPSBub2RlLT52YXJpYWJsZUFjY2Vz
c0RhdGEoKTsKLSAgICAgICAgICAgIHZhcmlhYmxlLT5tZXJnZUlzQ2FwdHVyZWQoaXNDYXB0dXJl
ZCk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICghaXNDYXB0dXJlZCkgewotICAgICAg
ICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewotICAgICAgICAgICAgICAgIGNhc2UgR2V0
TG9jYWw6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBub2RlOwotICAgICAgICAgICAgICAg
IGNhc2UgU2V0TG9jYWw6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBub2RlLT5jaGlsZDEo
KS5ub2RlKCk7Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgp
KSB7CisgICAgICAgICAgICBjYXNlIEdldExvY2FsOgorICAgICAgICAgICAgICAgIHJldHVybiBu
b2RlOworICAgICAgICAgICAgY2FzZSBTZXRMb2NhbDoKKyAgICAgICAgICAgICAgICByZXR1cm4g
bm9kZS0+Y2hpbGQxKCkubm9kZSgpOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICB2
YXJpYWJsZSA9IG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShvcGVyYW5kLCBpc0NhcHR1cmVkKTsKKyAg
ICAgICAgICAgIHZhcmlhYmxlID0gbmV3VmFyaWFibGVBY2Nlc3NEYXRhKG9wZXJhbmQpOwogICAg
ICAgICAKICAgICAgICAgbm9kZSA9IGluamVjdExhenlPcGVyYW5kU3BlY3VsYXRpb24oYWRkVG9H
cmFwaChHZXRMb2NhbCwgT3BJbmZvKHZhcmlhYmxlKSkpOwogICAgICAgICBtX2N1cnJlbnRCbG9j
ay0+dmFyaWFibGVzQXRUYWlsLmxvY2FsKGxvY2FsKSA9IG5vZGU7CkBAIC0zOTYsMTUgKzM5Miwx
NCBAQCBwcml2YXRlOgogICAgICAgICBtX2N1cnJlbnRTZW1hbnRpY09yaWdpbiA9IHNlbWFudGlj
T3JpZ2luOwogCiAgICAgICAgIHVuc2lnbmVkIGxvY2FsID0gb3BlcmFuZC50b0xvY2FsKCk7Ci0g
ICAgICAgIGJvb2wgaXNDYXB0dXJlZCA9IG1fY29kZUJsb2NrLT5pc0NhcHR1cmVkKG9wZXJhbmQs
IGlubGluZUNhbGxGcmFtZSgpKTsKICAgICAgICAgCiAgICAgICAgIGlmIChzZXRNb2RlICE9IElt
bWVkaWF0ZU5ha2VkU2V0KSB7CiAgICAgICAgICAgICBBcmd1bWVudFBvc2l0aW9uKiBhcmd1bWVu
dFBvc2l0aW9uID0gZmluZEFyZ3VtZW50UG9zaXRpb25Gb3JMb2NhbChvcGVyYW5kKTsKLSAgICAg
ICAgICAgIGlmIChpc0NhcHR1cmVkIHx8IGFyZ3VtZW50UG9zaXRpb24pCisgICAgICAgICAgICBp
ZiAoYXJndW1lbnRQb3NpdGlvbikKICAgICAgICAgICAgICAgICBmbHVzaERpcmVjdChvcGVyYW5k
LCBhcmd1bWVudFBvc2l0aW9uKTsKICAgICAgICAgfQogCi0gICAgICAgIFZhcmlhYmxlQWNjZXNz
RGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbmV3VmFyaWFibGVBY2Nlc3NEYXRhKG9wZXJhbmQs
IGlzQ2FwdHVyZWQpOworICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNz
RGF0YSA9IG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShvcGVyYW5kKTsKICAgICAgICAgdmFyaWFibGVB
Y2Nlc3NEYXRhLT5tZXJnZVN0cnVjdHVyZUNoZWNrSG9pc3RpbmdGYWlsZWQoCiAgICAgICAgICAg
ICBtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKHNlbWFudGljT3Jp
Z2luLmJ5dGVjb2RlSW5kZXgsIEJhZENhY2hlKSk7CiAgICAgICAgIHZhcmlhYmxlQWNjZXNzRGF0
YS0+bWVyZ2VDaGVja0FycmF5SG9pc3RpbmdGYWlsZWQoCkBAIC00MjMsMjYgKzQxOCwyMiBAQCBw
cml2YXRlOgogICAgICAgICBBU1NFUlQoYXJndW1lbnQgPCBtX251bUFyZ3VtZW50cyk7CiAgICAg
ICAgIAogICAgICAgICBOb2RlKiBub2RlID0gbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFp
bC5hcmd1bWVudChhcmd1bWVudCk7Ci0gICAgICAgIGJvb2wgaXNDYXB0dXJlZCA9IG1fY29kZUJs
b2NrLT5pc0NhcHR1cmVkKG9wZXJhbmQpOwogCiAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSog
dmFyaWFibGU7CiAgICAgICAgIAogICAgICAgICBpZiAobm9kZSkgewogICAgICAgICAgICAgdmFy
aWFibGUgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKLSAgICAgICAgICAgIHZhcmlhYmxl
LT5tZXJnZUlzQ2FwdHVyZWQoaXNDYXB0dXJlZCk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAg
IGlmICghaXNDYXB0dXJlZCkgewotICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkg
ewotICAgICAgICAgICAgICAgIGNhc2UgR2V0TG9jYWw6Ci0gICAgICAgICAgICAgICAgICAgIHJl
dHVybiBub2RlOwotICAgICAgICAgICAgICAgIGNhc2UgU2V0TG9jYWw6Ci0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBub2RlLT5jaGlsZDEoKS5ub2RlKCk7Ci0gICAgICAgICAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CisgICAgICAgICAgICBjYXNlIEdldExvY2Fs
OgorICAgICAgICAgICAgICAgIHJldHVybiBub2RlOworICAgICAgICAgICAgY2FzZSBTZXRMb2Nh
bDoKKyAgICAgICAgICAgICAgICByZXR1cm4gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOworICAgICAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAg
ICAgICAgfSBlbHNlCi0gICAgICAgICAgICB2YXJpYWJsZSA9IG5ld1ZhcmlhYmxlQWNjZXNzRGF0
YShvcGVyYW5kLCBpc0NhcHR1cmVkKTsKKyAgICAgICAgICAgIHZhcmlhYmxlID0gbmV3VmFyaWFi
bGVBY2Nlc3NEYXRhKG9wZXJhbmQpOwogICAgICAgICAKICAgICAgICAgbm9kZSA9IGluamVjdExh
enlPcGVyYW5kU3BlY3VsYXRpb24oYWRkVG9HcmFwaChHZXRMb2NhbCwgT3BJbmZvKHZhcmlhYmxl
KSkpOwogICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmFyZ3VtZW50KGFy
Z3VtZW50KSA9IG5vZGU7CkBAIC00NTYsOSArNDQ3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgdW5z
aWduZWQgYXJndW1lbnQgPSBvcGVyYW5kLnRvQXJndW1lbnQoKTsKICAgICAgICAgQVNTRVJUKGFy
Z3VtZW50IDwgbV9udW1Bcmd1bWVudHMpOwogICAgICAgICAKLSAgICAgICAgYm9vbCBpc0NhcHR1
cmVkID0gbV9jb2RlQmxvY2stPmlzQ2FwdHVyZWQob3BlcmFuZCk7Ci0KLSAgICAgICAgVmFyaWFi
bGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBuZXdWYXJpYWJsZUFjY2Vzc0RhdGEo
b3BlcmFuZCwgaXNDYXB0dXJlZCk7CisgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFi
bGVBY2Nlc3NEYXRhID0gbmV3VmFyaWFibGVBY2Nlc3NEYXRhKG9wZXJhbmQpOwogCiAgICAgICAg
IC8vIEFsd2F5cyBmbHVzaCBhcmd1bWVudHMsIGV4Y2VwdCBmb3IgJ3RoaXMnLiBJZiAndGhpcycg
aXMgY3JlYXRlZCBieSB1cywKICAgICAgICAgLy8gdGhlbiBtYWtlIHN1cmUgdGhhdCBpdCdzIG5l
dmVyIHVuYm94ZWQuCkBAIC01MjQsMTkgKzUxMywxNiBAQCBwcml2YXRlOgogICAgIAogICAgIHZv
aWQgZmx1c2hEaXJlY3QoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEFyZ3VtZW50UG9zaXRpb24q
IGFyZ3VtZW50UG9zaXRpb24pCiAgICAgewotICAgICAgICBib29sIGlzQ2FwdHVyZWQgPSBtX2Nv
ZGVCbG9jay0+aXNDYXB0dXJlZChvcGVyYW5kLCBpbmxpbmVDYWxsRnJhbWUoKSk7Ci0gICAgICAg
IAogICAgICAgICBBU1NFUlQoIW9wZXJhbmQuaXNDb25zdGFudCgpKTsKICAgICAgICAgCiAgICAg
ICAgIE5vZGUqIG5vZGUgPSBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQo
b3BlcmFuZCk7CiAgICAgICAgIAogICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxl
OwogICAgICAgICAKLSAgICAgICAgaWYgKG5vZGUpIHsKKyAgICAgICAgaWYgKG5vZGUpCiAgICAg
ICAgICAgICB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAgICAgICAg
ICAgdmFyaWFibGUtPm1lcmdlSXNDYXB0dXJlZChpc0NhcHR1cmVkKTsKLSAgICAgICAgfSBlbHNl
Ci0gICAgICAgICAgICB2YXJpYWJsZSA9IG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShvcGVyYW5kLCBp
c0NhcHR1cmVkKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdmFyaWFibGUgPSBuZXdWYXJp
YWJsZUFjY2Vzc0RhdGEob3BlcmFuZCk7CiAgICAgICAgIAogICAgICAgICBub2RlID0gYWRkVG9H
cmFwaChGbHVzaCwgT3BJbmZvKHZhcmlhYmxlKSk7CiAgICAgICAgIG1fY3VycmVudEJsb2NrLT52
YXJpYWJsZXNBdFRhaWwub3BlcmFuZChvcGVyYW5kKSA9IG5vZGU7CkBAIC01NTcsMTEgKzU0Myw2
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBudW1Bcmd1bWVudHMgPSBpbmxpbmVTdGFja0VudHJ5
LT5tX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGFy
Z3VtZW50ID0gbnVtQXJndW1lbnRzOyBhcmd1bWVudC0tID4gMTspCiAgICAgICAgICAgICBmbHVz
aERpcmVjdChpbmxpbmVTdGFja0VudHJ5LT5yZW1hcE9wZXJhbmQodmlydHVhbFJlZ2lzdGVyRm9y
QXJndW1lbnQoYXJndW1lbnQpKSk7Ci0gICAgICAgIGZvciAoaW50IGxvY2FsID0gMDsgbG9jYWwg
PCBpbmxpbmVTdGFja0VudHJ5LT5tX2NvZGVCbG9jay0+bV9udW1WYXJzOyArK2xvY2FsKSB7Ci0g
ICAgICAgICAgICBpZiAoIWlubGluZVN0YWNrRW50cnktPm1fY29kZUJsb2NrLT5pc0NhcHR1cmVk
KHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGxvY2FsKSkpCi0gICAgICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgICAgICBmbHVzaERpcmVjdChpbmxpbmVTdGFja0VudHJ5LT5yZW1hcE9wZXJh
bmQodmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwobG9jYWwpKSk7Ci0gICAgICAgIH0KICAgICB9CiAK
ICAgICB2b2lkIGZsdXNoRm9yVGVybWluYWwoKQpAQCAtMjUzOSw3ICsyNTIwLDcgQEAgYm9vbCBC
eXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICBtX2dyYXBoLm1fYXJn
dW1lbnRzLnJlc2l6ZShtX251bUFyZ3VtZW50cyk7CiAgICAgICAgIGZvciAodW5zaWduZWQgYXJn
dW1lbnQgPSAwOyBhcmd1bWVudCA8IG1fbnVtQXJndW1lbnRzOyArK2FyZ3VtZW50KSB7CiAgICAg
ICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbmV3VmFyaWFibGVBY2Nlc3NE
YXRhKAotICAgICAgICAgICAgICAgIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGFyZ3VtZW50
KSwgbV9jb2RlQmxvY2stPmlzQ2FwdHVyZWQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoYXJn
dW1lbnQpKSk7CisgICAgICAgICAgICAgICAgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoYXJn
dW1lbnQpKTsKICAgICAgICAgICAgIHZhcmlhYmxlLT5tZXJnZVN0cnVjdHVyZUNoZWNrSG9pc3Rp
bmdGYWlsZWQoCiAgICAgICAgICAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmls
ZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgQmFkQ2FjaGUpKTsKICAgICAgICAgICAgIHZh
cmlhYmxlLT5tZXJnZUNoZWNrQXJyYXlIb2lzdGluZ0ZhaWxlZCgKQEAgLTM5NDcsMjIgKzM5Mjgs
NiBAQCBCeXRlQ29kZVBhcnNlcjo6SW5saW5lU3RhY2tFbnRyeTo6SW5saW5lCiAgICAgICAgIG1f
aW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMucmVzaXplKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzKTsgLy8gU2V0IHRoZSBudW1iZXIgb2YgYXJndW1lbnRzIGluY2x1ZGluZyB0aGlzLCBidXQg
ZG9uJ3QgY29uZmlndXJlIHRoZSB2YWx1ZSByZWNvdmVyaWVzLCB5ZXQuCiAgICAgICAgIG1faW5s
aW5lQ2FsbEZyYW1lLT5raW5kID0ga2luZDsKICAgICAgICAgCi0gICAgICAgIGlmIChtX2lubGlu
ZUNhbGxGcmFtZS0+Y2FsbGVyLmlubGluZUNhbGxGcmFtZSkKLSAgICAgICAgICAgIG1faW5saW5l
Q2FsbEZyYW1lLT5jYXB0dXJlZFZhcnMgPSBtX2lubGluZUNhbGxGcmFtZS0+Y2FsbGVyLmlubGlu
ZUNhbGxGcmFtZS0+Y2FwdHVyZWRWYXJzOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX2lu
bGluZUNhbGxGcmFtZS0+Y2FwdHVyZWRWYXJzID0gYnl0ZUNvZGVQYXJzZXItPm1fZ3JhcGgubV9v
dXRlcm1vc3RDYXB0dXJlZFZhcnM7Ci0KLSAgICAgICAgZm9yIChpbnQgaSA9IGFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzOyBpLS07KSB7Ci0gICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJn
dW1lbnQgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpKTsKLSAgICAgICAgICAgIGlmIChj
b2RlQmxvY2stPmlzQ2FwdHVyZWQoYXJndW1lbnQpKQotICAgICAgICAgICAgICAgIG1faW5saW5l
Q2FsbEZyYW1lLT5jYXB0dXJlZFZhcnMuc2V0KFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudC5vZmZz
ZXQoKSArIG1faW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCkudG9Mb2NhbCgpKTsKLSAgICAg
ICAgfQotICAgICAgICBmb3IgKHNpemVfdCBpID0gY29kZUJsb2NrLT5tX251bVZhcnM7IGktLTsp
IHsKLSAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBsb2NhbCA9IHZpcnR1YWxSZWdpc3RlckZv
ckxvY2FsKGkpOwotICAgICAgICAgICAgaWYgKGNvZGVCbG9jay0+aXNDYXB0dXJlZChsb2NhbCkp
Ci0gICAgICAgICAgICAgICAgbV9pbmxpbmVDYWxsRnJhbWUtPmNhcHR1cmVkVmFycy5zZXQoVmly
dHVhbFJlZ2lzdGVyKGxvY2FsLm9mZnNldCgpICsgbV9pbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zm
c2V0KS50b0xvY2FsKCkpOwotICAgICAgICB9Ci0KICAgICAgICAgYnl0ZUNvZGVQYXJzZXItPmJ1
aWxkT3BlcmFuZE1hcHNJZk5lY2Vzc2FyeSgpOwogICAgICAgICAKICAgICAgICAgbV9pZGVudGlm
aWVyUmVtYXAucmVzaXplKGNvZGVCbG9jay0+bnVtYmVyT2ZJZGVudGlmaWVycygpKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1BTUmV0aHJlYWRpbmdQaGFzZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDUFNSZXRocmVhZGluZ1Bo
YXNlLmNwcAkocmV2aXNpb24gMTgwODc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDUFNSZXRocmVhZGluZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTkyLDIxICsxOTIs
NiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIAotICAgICAgICAgICAgaWYgKHZhcmlhYmxlLT5pc0NhcHR1cmVkKCkpIHsKLSAg
ICAgICAgICAgICAgICB2YXJpYWJsZS0+c2V0SXNMb2FkZWRGcm9tKHRydWUpOwotICAgICAgICAg
ICAgICAgIGlmIChvdGhlck5vZGUtPm9wKCkgPT0gR2V0TG9jYWwpCi0gICAgICAgICAgICAgICAg
ICAgIG90aGVyTm9kZSA9IG90aGVyTm9kZS0+Y2hpbGQxKCkubm9kZSgpOwotICAgICAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG90aGVyTm9kZS0+b3AoKSA9PSBT
ZXRMb2NhbCB8fCBvdGhlck5vZGUtPm9wKCkgPT0gU2V0QXJndW1lbnQpOwotICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgIEFTU0VSVChvdGhlck5vZGUtPm9wKCkgPT0gUGhpIHx8IG90
aGVyTm9kZS0+b3AoKSA9PSBTZXRMb2NhbCB8fCBvdGhlck5vZGUtPm9wKCkgPT0gU2V0QXJndW1l
bnQpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIC8vIEtlZXAgdGhpcyBHZXRM
b2NhbCBidXQgbGluayBpdCB0byB0aGUgcHJpb3Igb25lcy4KLSAgICAgICAgICAgICAgICBub2Rl
LT5jaGlsZHJlbi5zZXRDaGlsZDEoRWRnZShvdGhlck5vZGUpKTsKLSAgICAgICAgICAgICAgICBt
X2Jsb2NrLT52YXJpYWJsZXNBdFRhaWwuYXRGb3I8b3BlcmFuZEtpbmQ+KGlkeCkgPSBub2RlOwot
ICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAogICAg
ICAgICAgICAgaWYgKG90aGVyTm9kZS0+b3AoKSA9PSBHZXRMb2NhbCkgewogICAgICAgICAgICAg
ICAgIC8vIFJlcGxhY2UgYWxsIHJlZmVyZW5jZXMgdG8gdGhpcyBHZXRMb2NhbCB3aXRoIG90aGVy
Tm9kZS4KICAgICAgICAgICAgICAgICBub2RlLT5yZXBsYWNlbWVudCA9IG90aGVyTm9kZTsKQEAg
LTMzNSwxMCArMzIwLDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgIC8vIHRoZXJlIGV2ZXIgd2Fz
IGEgU2V0TG9jYWwgYW5kIGl0IHdhcyBmb2xsb3dlZCBieSBGbHVzaGVzLCB0aGVuIHRoZSB0YWls
CiAgICAgICAgICAgICAvLyB2YXJpYWJsZSB3aWxsIGJlIGEgU2V0TG9jYWwgYW5kIG5vdCB0aG9z
ZSBzdWJzZXF1ZW50IEZsdXNoZXMuCiAgICAgICAgICAgICAvLwotICAgICAgICAgICAgLy8gQ2hp
bGQgb2YgR2V0TG9jYWw6IHRoZSBvcGVyYXRpb24gdGhhdCB0aGUgR2V0TG9jYWwga2VlcHMgYWxp
dmUuIEZvcgotICAgICAgICAgICAgLy8gdW5jYXB0dXJlZCBsb2NhbHMsIGl0IG1heSBiZSBhIFBo
aSBmcm9tIHRoZSBjdXJyZW50IGJsb2NrLiBGb3IgYXJndW1lbnRzLAotICAgICAgICAgICAgLy8g
aXQgbWF5IGJlIGEgU2V0QXJndW1lbnQuIEZvciBjYXB0dXJlZCBsb2NhbHMgYW5kIGFyZ3VtZW50
cyBpdCBtYXkgYWxzbyBiZQotICAgICAgICAgICAgLy8gYSBTZXRMb2NhbC4KKyAgICAgICAgICAg
IC8vIENoaWxkIG9mIEdldExvY2FsOiB0aGUgb3BlcmF0aW9uIHRoYXQgdGhlIEdldExvY2FsIGtl
ZXBzIGFsaXZlLiBJdCBtYXkgYmUKKyAgICAgICAgICAgIC8vIGEgUGhpIGZyb20gdGhlIGN1cnJl
bnQgYmxvY2suIEZvciBhcmd1bWVudHMsIGl0IG1heSBiZSBhIFNldEFyZ3VtZW50LgogICAgICAg
ICAgICAgLy8KICAgICAgICAgICAgIC8vIENoaWxkIG9mIFNldExvY2FsOiBtdXN0IGJlIGEgdmFs
dWUgcHJvZHVjaW5nIG5vZGUuCiAgICAgICAgICAgICAvLwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAJKHJldmlzaW9uIDE4MDg3NSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMjYs
OCArMzI2LDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIAog
ICAgICAgICAgICAgaWYgKG1fbm9kZS0+b3AoKSA9PSBHZXRMb2NhbCkgewotICAgICAgICAgICAg
ICAgIC8vIEZvciB1bmNhcHR1cmVkIGxvY2FscywgdXN1YWxseSB0aGUgQ1BTIHJldGhyZWFkaW5n
IHBoYXNlIGRvZXMgdGhpcy4gQnV0IGl0J3MgT0sKLSAgICAgICAgICAgICAgICAvLyBmb3IgdXMg
dG8gbWVzcyB3aXRoIGxvY2FscyAtIHJlZ2FyZGxlc3Mgb2YgdGhlaXIgY2FwdHVyZWRuZXNzIC0g
c28gbG9uZyBhczoKKyAgICAgICAgICAgICAgICAvLyBVc3VhbGx5IHRoZSBDUFMgcmV0aHJlYWRp
bmcgcGhhc2UgZG9lcyB0aGlzLiBCdXQgaXQncyBPSyBmb3IgdXMgdG8gbWVzcyB3aXRoCisgICAg
ICAgICAgICAgICAgLy8gbG9jYWxzIHNvIGxvbmcgYXM6CiAgICAgICAgICAgICAgICAgLy8gCiAg
ICAgICAgICAgICAgICAgLy8gLSBXZSBkZXRocmVhZCB0aGUgZ3JhcGguIEFueSBjaGFuZ2VzIHdl
IG1ha2UgbWF5IGludmFsaWRhdGUgdGhlIGFzc3VtcHRpb25zIG9mCiAgICAgICAgICAgICAgICAg
Ly8gICBvdXIgQ1BTIGZvcm0sIHBhcnRpY3VsYXJseSBpZiB0aGlzIEdldExvY2FsIGlzIGxpbmtl
ZCB0byB0aGUgdmFyaWFibGVzQXRUYWlsLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDbG9iYmVyaXplLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDbG9iYmVyaXplLmgJKHJldmlzaW9uIDE4MDg3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOTYsNyArMjk2LDcg
QEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgICAgICByZXR1
cm47CiAKICAgICBjYXNlIEZsdXNoOgotICAgICAgICByZWFkKEFic3RyYWN0SGVhcChWYXJpYWJs
ZXMsIG5vZGUtPmxvY2FsKCkpKTsKKyAgICAgICAgcmVhZChBYnN0cmFjdEhlYXAoU3RhY2ssIG5v
ZGUtPmxvY2FsKCkpKTsKICAgICAgICAgd3JpdGUoU2lkZVN0YXRlKTsKICAgICAgICAgcmV0dXJu
OwogCkBAIC0zMTksNyArMzE5LDcgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9k
ZSogbm9kZQogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2UgQ3JlYXRlQXJndW1l
bnRzOgotICAgICAgICByZWFkKFZhcmlhYmxlcyk7CisgICAgICAgIHJlYWQoU3RhY2spOwogICAg
ICAgICByZWFkKEhlYXBPYmplY3RDb3VudCk7CiAgICAgICAgIHdyaXRlKEhlYXBPYmplY3RDb3Vu
dCk7CiAgICAgICAgIHdyaXRlKFNpZGVTdGF0ZSk7CkBAIC0zOTYsMzEgKzM5NiwzMSBAQCB2b2lk
IGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgICAgIHJldHVybjsKICAg
ICAgICAgCiAgICAgY2FzZSBHZXRDYWxsZWU6Ci0gICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKFZh
cmlhYmxlcywgSlNTdGFjazo6Q2FsbGVlKSk7Ci0gICAgICAgIGRlZihIZWFwTG9jYXRpb24oVmFy
aWFibGVMb2MsIEFic3RyYWN0SGVhcChWYXJpYWJsZXMsIEpTU3RhY2s6OkNhbGxlZSkpLCBub2Rl
KTsKKyAgICAgICAgcmVhZChBYnN0cmFjdEhlYXAoU3RhY2ssIEpTU3RhY2s6OkNhbGxlZSkpOwor
ICAgICAgICBkZWYoSGVhcExvY2F0aW9uKFN0YWNrTG9jLCBBYnN0cmFjdEhlYXAoU3RhY2ssIEpT
U3RhY2s6OkNhbGxlZSkpLCBub2RlKTsKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICBj
YXNlIEdldExvY2FsOgotICAgICAgICByZWFkKEFic3RyYWN0SGVhcChWYXJpYWJsZXMsIG5vZGUt
PmxvY2FsKCkpKTsKLSAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihWYXJpYWJsZUxvYywgQWJzdHJh
Y3RIZWFwKFZhcmlhYmxlcywgbm9kZS0+bG9jYWwoKSkpLCBub2RlKTsKKyAgICAgICAgcmVhZChB
YnN0cmFjdEhlYXAoU3RhY2ssIG5vZGUtPmxvY2FsKCkpKTsKKyAgICAgICAgZGVmKEhlYXBMb2Nh
dGlvbihTdGFja0xvYywgQWJzdHJhY3RIZWFwKFN0YWNrLCBub2RlLT5sb2NhbCgpKSksIG5vZGUp
OwogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2UgU2V0TG9jYWw6Ci0gICAgICAg
IHdyaXRlKEFic3RyYWN0SGVhcChWYXJpYWJsZXMsIG5vZGUtPmxvY2FsKCkpKTsKLSAgICAgICAg
ZGVmKEhlYXBMb2NhdGlvbihWYXJpYWJsZUxvYywgQWJzdHJhY3RIZWFwKFZhcmlhYmxlcywgbm9k
ZS0+bG9jYWwoKSkpLCBub2RlLT5jaGlsZDEoKS5ub2RlKCkpOworICAgICAgICB3cml0ZShBYnN0
cmFjdEhlYXAoU3RhY2ssIG5vZGUtPmxvY2FsKCkpKTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlv
bihTdGFja0xvYywgQWJzdHJhY3RIZWFwKFN0YWNrLCBub2RlLT5sb2NhbCgpKSksIG5vZGUtPmNo
aWxkMSgpLm5vZGUoKSk7CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBHZXRT
dGFjazogewotICAgICAgICBBYnN0cmFjdEhlYXAgaGVhcChWYXJpYWJsZXMsIG5vZGUtPnN0YWNr
QWNjZXNzRGF0YSgpLT5sb2NhbCk7CisgICAgICAgIEFic3RyYWN0SGVhcCBoZWFwKFN0YWNrLCBu
b2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+bG9jYWwpOwogICAgICAgICByZWFkKGhlYXApOwotICAg
ICAgICBkZWYoSGVhcExvY2F0aW9uKFZhcmlhYmxlTG9jLCBoZWFwKSwgbm9kZSk7CisgICAgICAg
IGRlZihIZWFwTG9jYXRpb24oU3RhY2tMb2MsIGhlYXApLCBub2RlKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBQdXRTdGFjazogewotICAgICAgICBBYnN0cmFj
dEhlYXAgaGVhcChWYXJpYWJsZXMsIG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5sb2NhbCk7Cisg
ICAgICAgIEFic3RyYWN0SGVhcCBoZWFwKFN0YWNrLCBub2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+
bG9jYWwpOwogICAgICAgICB3cml0ZShoZWFwKTsKLSAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihW
YXJpYWJsZUxvYywgaGVhcCksIG5vZGUtPmNoaWxkMSgpLm5vZGUoKSk7CisgICAgICAgIGRlZihI
ZWFwTG9jYXRpb24oU3RhY2tMb2MsIGhlYXApLCBub2RlLT5jaGlsZDEoKS5ub2RlKCkpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogICAgICAgICAKQEAgLTQzMiw4ICs0MzIsOCBAQCB2b2lkIGNs
b2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgICAgIHJldHVybjsKICAgICAg
ICAgCiAgICAgY2FzZSBHZXRMb2NhbFVubGlua2VkOgotICAgICAgICByZWFkKEFic3RyYWN0SGVh
cChWYXJpYWJsZXMsIG5vZGUtPnVubGlua2VkTG9jYWwoKSkpOwotICAgICAgICBkZWYoSGVhcExv
Y2F0aW9uKFZhcmlhYmxlTG9jLCBBYnN0cmFjdEhlYXAoVmFyaWFibGVzLCBub2RlLT51bmxpbmtl
ZExvY2FsKCkpKSwgbm9kZSk7CisgICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKFN0YWNrLCBub2Rl
LT51bmxpbmtlZExvY2FsKCkpKTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihTdGFja0xvYywg
QWJzdHJhY3RIZWFwKFN0YWNrLCBub2RlLT51bmxpbmtlZExvY2FsKCkpKSwgbm9kZSk7CiAgICAg
ICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBHZXRCeVZhbDogewpAQCAtNDY2LDEwICs0
NjYsMTQgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgICAg
ICAgICAgZGVmKFB1cmVWYWx1ZShub2RlLCBtb2RlLmFzV29yZCgpKSk7CiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgICAgICAKLSAgICAgICAgY2FzZSBBcnJheTo6QXJndW1lbnRzOgotICAg
ICAgICAgICAgcmVhZChBcmd1bWVudHNfcmVnaXN0ZXJzKTsKLSAgICAgICAgICAgIHJlYWQoVmFy
aWFibGVzKTsKLSAgICAgICAgICAgIGRlZihIZWFwTG9jYXRpb24oSW5kZXhlZFByb3BlcnR5TG9j
LCBWYXJpYWJsZXMsIG5vZGUtPmNoaWxkMSgpLCBub2RlLT5jaGlsZDIoKSksIG5vZGUpOworICAg
ICAgICBjYXNlIEFycmF5OjpEaXJlY3RBcmd1bWVudHM6CisgICAgICAgICAgICByZWFkKERpcmVj
dEFyZ3VtZW50c1Byb3BlcnRpZXMpOworICAgICAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihJbmRl
eGVkUHJvcGVydHlMb2MsIERpcmVjdEFyZ3VtZW50c1Byb3BlcnRpZXMsIG5vZGUtPmNoaWxkMSgp
LCBub2RlLT5jaGlsZDIoKSksIG5vZGUpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgCisgICAgICAgIGNhc2UgQXJyYXk6OlNjb3BlZEFyZ3VtZW50czoKKyAgICAgICAgICAgIHJl
YWQoU2NvcGVkQXJndW1lbnRzUHJvcGVydGllcyk7CisgICAgICAgICAgICBkZWYoSGVhcExvY2F0
aW9uKEluZGV4ZWRQcm9wZXJ0eUxvYywgU2NvcGVkQXJndW1lbnRzUHJvcGVydGllcywgbm9kZS0+
Y2hpbGQxKCksIG5vZGUtPmNoaWxkMigpKSwgbm9kZSk7CiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcnJheTo6SW50MzI6CkBAIC01NjAsMTMgKzU2NCw2
IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICAgICAgICAg
IHdyaXRlKEhlYXApOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgCi0gICAgICAg
IGNhc2UgQXJyYXk6OkFyZ3VtZW50czoKLSAgICAgICAgICAgIHJlYWQoQXJndW1lbnRzX3JlZ2lz
dGVycyk7Ci0gICAgICAgICAgICByZWFkKE1pc2NGaWVsZHMpOwotICAgICAgICAgICAgd3JpdGUo
VmFyaWFibGVzKTsKLSAgICAgICAgICAgIGRlZihIZWFwTG9jYXRpb24oSW5kZXhlZFByb3BlcnR5
TG9jLCBWYXJpYWJsZXMsIGJhc2UsIGluZGV4KSwgdmFsdWUpOwotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQXJyYXk6OkludDMyOgogICAgICAgICAgICAg
aWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzT3V0T2ZCb3VuZHMoKSkgewogICAgICAgICAgICAgICAg
IHJlYWQoV29ybGQpOwpAQCAtNzYxLDcgKzc1OCw4IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYg
Z3JhcGgsIE5vZGUqIG5vZGUKICAgICAgICAgICAgIGRlZihQdXJlVmFsdWUobm9kZSwgbW9kZS5h
c1dvcmQoKSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgCi0gICAgICAgIGNh
c2UgQXJyYXk6OkFyZ3VtZW50czoKKyAgICAgICAgY2FzZSBBcnJheTo6RGlyZWN0QXJndW1lbnRz
OgorICAgICAgICBjYXNlIEFycmF5OjpTY29wZWRBcmd1bWVudHM6CiAgICAgICAgICAgICByZWFk
KE1pc2NGaWVsZHMpOwogICAgICAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihBcnJheUxlbmd0aExv
YywgTWlzY0ZpZWxkcywgbm9kZS0+Y2hpbGQxKCkpLCBub2RlKTsKICAgICAgICAgICAgIHJldHVy
bjsKQEAgLTg3MCwyOCArODY4LDIzIEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5v
ZGUqIG5vZGUKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAKLSAgICBj
YXNlIFRlYXJPZmZBcmd1bWVudHM6Ci0gICAgICAgIHJlYWQoVmFyaWFibGVzKTsKLSAgICAgICAg
d3JpdGUoQXJndW1lbnRzX3JlZ2lzdGVycyk7Ci0gICAgICAgIHJldHVybjsKLSAgICAgICAgCiAg
ICAgY2FzZSBHZXRNeUFyZ3VtZW50c0xlbmd0aDoKLSAgICAgICAgcmVhZChBYnN0cmFjdEhlYXAo
VmFyaWFibGVzLCBncmFwaC5hcmd1bWVudHNSZWdpc3RlckZvcihub2RlLT5vcmlnaW4uc2VtYW50
aWMpKSk7Ci0gICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKFZhcmlhYmxlcywgSlNTdGFjazo6QXJn
dW1lbnRDb3VudCkpOworICAgICAgICByZWFkKEFic3RyYWN0SGVhcChTdGFjaywgZ3JhcGguYXJn
dW1lbnRzUmVnaXN0ZXJGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSkpOworICAgICAgICByZWFk
KEFic3RyYWN0SGVhcChTdGFjaywgSlNTdGFjazo6QXJndW1lbnRDb3VudCkpOwogICAgICAgICAv
LyBGSVhNRTogV2UgY291bGQgZGVmKCkgdGhpcyBieSBzcGVjaWZ5aW5nIHRoZSBjb2RlIG9yaWdp
biBhcyBhIGtpbmQgb2YgbV9pbmZvLCBsaWtlIHdlCiAgICAgICAgIC8vIGhhdmUgZm9yIFB1cmVW
YWx1ZS4KICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTEzNDc5NwogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2UgR2V0TXlBcmd1bWVu
dEJ5VmFsOgotICAgICAgICByZWFkKFZhcmlhYmxlcyk7CisgICAgICAgIHJlYWQoU3RhY2spOwog
ICAgICAgICAvLyBGSVhNRTogV2UgY291bGQgZGVmKCkgdGhpcyBieSBzcGVjaWZ5aW5nIHRoZSBj
b2RlIG9yaWdpbiBhcyBhIGtpbmQgb2YgbV9pbmZvLCBsaWtlIHdlCiAgICAgICAgIC8vIGhhdmUg
Zm9yIFB1cmVWYWx1ZS4KICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEzNDc5NwogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2UgQ2hl
Y2tBcmd1bWVudHNOb3RDcmVhdGVkOgotICAgICAgICByZWFkKEFic3RyYWN0SGVhcChWYXJpYWJs
ZXMsIGdyYXBoLmFyZ3VtZW50c1JlZ2lzdGVyRm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpKTsK
KyAgICAgICAgcmVhZChBYnN0cmFjdEhlYXAoU3RhY2ssIGdyYXBoLmFyZ3VtZW50c1JlZ2lzdGVy
Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpKTsKICAgICAgICAgcmV0dXJuOwogCiAgICAgY2Fz
ZSBUaHJvd1JlZmVyZW5jZUVycm9yOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDb21tb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nv
bW1vbi5oCShyZXZpc2lvbiAxODA4NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0NvbW1vbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xOTMsMTIgKzE5MywxMCBAQCBlbnVtIEdyYXBo
Rm9ybSB7CiAgICAgLy8gZXhwZWN0IHRvIGJlIGxpdmUgYXQgdGhlIGhlYWQsIGFuZCB3aGljaCBs
b2NhbHMgdGhleSBtYWtlIGF2YWlsYWJsZSBhdCB0aGUKICAgICAvLyB0YWlsLiBUaHJlYWRlZENQ
UyBmb3JtIGFsc28gaW1wbGllcyB0aGF0OgogICAgIC8vCi0gICAgLy8gLSBHZXRMb2NhbHMgYW5k
IFNldExvY2FscyB0byB1bmNhcHR1cmVkIHZhcmlhYmxlcyBhcmUgbm90IHJlZHVuZGFudCB3aXRo
aW4KLSAgICAvLyAgIGEgYmFzaWMgYmxvY2suCisgICAgLy8gLSBHZXRMb2NhbHMgYW5kIFNldExv
Y2FscyBhcmUgbm90IHJlZHVuZGFudCB3aXRoaW4gYSBiYXNpYyBibG9jay4KICAgICAvLwogICAg
IC8vIC0gQWxsIEdldExvY2FscyBhbmQgRmx1c2hlcyBhcmUgbGlua2VkIGRpcmVjdGx5IHRvIHRo
ZSBsYXN0IGFjY2VzcyBwb2ludAotICAgIC8vICAgb2YgdGhlIHZhcmlhYmxlLCB3aGljaCBtdXN0
IG5vdCBiZSBhbm90aGVyIEdldExvY2FsIGlmIHRoZSB2YXJpYWJsZSBpcwotICAgIC8vICAgdW5j
YXB0dXJlZC4KKyAgICAvLyAgIG9mIHRoZSB2YXJpYWJsZSwgd2hpY2ggbXVzdCBub3QgYmUgYW5v
dGhlciBHZXRMb2NhbC4KICAgICAvLwogICAgIC8vIC0gUGhhbnRvbShQaGkpIGlzIG5vdCBsZWdh
bCwgYnV0IFBoYW50b21Mb2NhbCBpcy4KICAgICAvLwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdEQ0VQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdEQ0VQaGFzZS5jcHAJKHJldmlzaW9uIDE4MDg3NSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHRENFUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDUsMzcg
KzIwNSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBHZXRMb2Nh
bCkgewogICAgICAgICAgICAgICAgIG5vZGUgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CiAgICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgLy8gRklYTUU6IEluIHRoZSBjYXNlIHRoYXQg
dGhlIHZhcmlhYmxlIGlzIGNhcHR1cmVkLCB3ZSByZWFsbHkgd2FudCB0byBiZSBhYmxlCi0gICAg
ICAgICAgICAgICAgLy8gdG8gcmVwbGFjZSB0aGUgdmFyaWFibGUtYXQtdGFpbCB3aXRoIHRoZSBs
YXN0IHVzZSBvZiB0aGUgdmFyaWFibGUgaW4gdGhlIHNhbWUKLSAgICAgICAgICAgICAgICAvLyB3
YXkgdGhhdCBDUFMgcmV0aHJlYWRpbmcgd291bGQgZG8uIFRoZSBjaGlsZCBvZiB0aGUgR2V0TG9j
YWwgaXNuJ3QgbmVjZXNzYXJpbHkKLSAgICAgICAgICAgICAgICAvLyB0aGUgc2FtZSBhcyB3aGF0
IENQUyByZXRocmVhZGluZyB3b3VsZCBkby4gRm9yIGV4YW1wbGUsIHdlIG1heSBoYXZlOgotICAg
ICAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAgICAgLy8gYTogU2V0TG9jYWwoLi4uKSAvLyBs
aXZlCi0gICAgICAgICAgICAgICAgLy8gYjogR2V0TG9jYWwoQGEpIC8vIGxpdmUKLSAgICAgICAg
ICAgICAgICAvLyBjOiBHZXRMb2NhbChAYSkgLy8gZGVhZAotICAgICAgICAgICAgICAgIC8vCi0g
ICAgICAgICAgICAgICAgLy8gV2hlbiBraWxsaW5nIEBjLCB0aGUgY29kZSBiZWxvdyB3aWxsIHNl
dCB0aGUgdmFyaWFibGUtYXQtdGFpbCB0byBAYSwgd2hpbGUgQ1BTCi0gICAgICAgICAgICAgICAg
Ly8gcmV0aHJlYWRpbmcgd291bGQgaGF2ZSBzZXQgQGIuIFRoaXMgaXMgYSBiZW5pZ24gYnVnLCBz
aW5jZSBhbGwgY2xpZW50cyBvZiBDUFMKLSAgICAgICAgICAgICAgICAvLyBvbmx5IHVzZSB0aGUg
dmFyaWFibGUtYXQtdGFpbCBvZiBjYXB0dXJlZCB2YXJpYWJsZXMgdG8gZ2V0IHRoZQotICAgICAg
ICAgICAgICAgIC8vIFZhcmlhYmxlQWNjZXNzRGF0YSBhbmQgb2JzZXJ2ZSB0aGF0IGl0IGlzIGlu
IGZhY3QgY2FwdHVyZWQuIEJ1dCwgdGhpcyBmZWVscwotICAgICAgICAgICAgICAgIC8vIGxpa2Ug
aXQgY291bGQgY2F1c2UgYnVncyBpbiB0aGUgZnV0dXJlLgotICAgICAgICAgICAgICAgIC8vCi0g
ICAgICAgICAgICAgICAgLy8gSXQncyB0ZW1wdGluZyB0byBqdXN0IGRldGhyZWFkIGFuZCB0aGVu
IGludm9rZSBDUFMgcmV0aHJlYWRpbmcsIGJ1dCBDUFMKLSAgICAgICAgICAgICAgICAvLyByZXRo
cmVhZGluZyBmYWlscyB0byBwcmVzZXJ2ZSBleGFjdCByZWYtY291bnRzLiBTbyB3ZSB3b3VsZCBu
ZWVkIGEgZml4cG9pbnQuCi0gICAgICAgICAgICAgICAgLy8gSXQncyBwcm9iYWJseSB0aGUgY2Fz
ZSB0aGF0IHRoaXMgZml4cG9pbnQgd2lsbCBiZSBndWFyYW50ZWVkIHRvIGNvbnZlcmdlIGFmdGVy
Ci0gICAgICAgICAgICAgICAgLy8gdGhlIHNlY29uZCBpdGVyYXRpb24gKGkuZS4gdGhlIHNlY29u
ZCBydW4gb2YgRENFIHdpbGwgbm90IGtpbGwgYW55dGhpbmcgYW5kIHNvCi0gICAgICAgICAgICAg
ICAgLy8gd2lsbCBub3QgbmVlZCB0byBkZXRocmVhZCksIGJ1dCBmb3Igbm93IHRoZSBzYWZlc3Qg
YXBwcm9hY2ggaXMgcHJvYmFibHkganVzdCB0bwotICAgICAgICAgICAgICAgIC8vIGFsbG93IGZv
ciB0aGlzIHRpbnkgYml0IG9mIHNsb3BwaW5lc3MuCi0gICAgICAgICAgICAgICAgLy8KLSAgICAg
ICAgICAgICAgICAvLyBBbm90aGVyIHBvc3NpYmxlIHNvbHV0aW9uIHdvdWxkIGJlIHRvIHNpbXBs
eSBzYXkgdGhhdCBEQ0UgZGV0aHJlYWRzIGJ1dCB0aGVuCi0gICAgICAgICAgICAgICAgLy8gd2Ug
bmV2ZXIgcmV0aHJlYWQgYmVmb3JlIGdvaW5nIHRvIHRoZSBiYWNrZW5kLiBUaGF0IGZlZWxzIGlu
dHVpdGl2ZWx5IHJpZ2h0Ci0gICAgICAgICAgICAgICAgLy8gYmVjYXVzZSBpdCdzIHVubGlrZWx5
IHRoYXQgYW55IG9mIHRoZSBwaGFzZXMgYWZ0ZXIgRENFIGluIHRoZSBiYWNrZW5kIHJlbHkgb24K
LSAgICAgICAgICAgICAgICAvLyBUaHJlYWRlZENQUy4KLSAgICAgICAgICAgICAgICAvLwotICAg
ICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
MzAxMTUKLSAgICAgICAgICAgICAgICBBU1NFUlQoCi0gICAgICAgICAgICAgICAgICAgIG5vZGUt
Pm9wKCkgPT0gUGhpIHx8IG5vZGUtPm9wKCkgPT0gU2V0QXJndW1lbnQKLSAgICAgICAgICAgICAg
ICAgICAgfHwgbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPmlzQ2FwdHVyZWQoKSk7CisgICAg
ICAgICAgICAgICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gUGhpIHx8IG5vZGUtPm9wKCkgPT0gU2V0
QXJndW1lbnQpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGlmIChub2RlLT5z
aG91bGRHZW5lcmF0ZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlc1tpXSA9IG5v
ZGU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJ
KHJldmlzaW9uIDE4MDg3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQ
aGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY4NCw3ICs2ODQsNiBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgY2FzZSBBcnJheTo6Q29udGlndW91czoKICAgICAgICAgICAgIGNhc2UgQXJyYXk6
OkFycmF5U3RvcmFnZToKICAgICAgICAgICAgIGNhc2UgQXJyYXk6OlNsb3dQdXRBcnJheVN0b3Jh
Z2U6Ci0gICAgICAgICAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6CiAgICAgICAgICAgICAgICAg
Zml4RWRnZTxLbm93bkNlbGxVc2U+KGNoaWxkMSk7CiAgICAgICAgICAgICAgICAgZml4RWRnZTxJ
bnQzMlVzZT4oY2hpbGQyKTsKICAgICAgICAgICAgICAgICBpbnNlcnRTdG9yZUJhcnJpZXIobV9p
bmRleEluQmxvY2ssIGNoaWxkMSwgY2hpbGQzKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiAxODA4NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzUsMTEgKzc1LDYgQEAgR3Jh
cGg6OkdyYXBoKFZNJiB2bSwgUGxhbiYgcGxhbiwgTG9uZ0xpdgogICAgIAogICAgIGZvciAodW5z
aWduZWQgaSA9IG1fbXVzdEhhbmRsZVZhbHVlcy5zaXplKCk7IGktLTspCiAgICAgICAgIG1fbXVz
dEhhbmRsZVZhbHVlc1tpXSA9IGZyZWV6ZUZyYWdpbGUocGxhbi5tdXN0SGFuZGxlVmFsdWVzW2ld
KTsKLSAgICAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2NvZGVCbG9jay0+bV9udW1WYXJzOyBp
LS07KSB7Ci0gICAgICAgIGlmIChtX2NvZGVCbG9jay0+aXNDYXB0dXJlZCh2aXJ0dWFsUmVnaXN0
ZXJGb3JMb2NhbChpKSkpCi0gICAgICAgICAgICBtX291dGVybW9zdENhcHR1cmVkVmFycy5zZXQo
aSk7Ci0gICAgfQogfQogCiBHcmFwaDo6fkdyYXBoKCkKQEAgLTc1NSwxMCArNzUwLDYgQEAgdm9p
ZCBHcmFwaDo6aW52YWxpZGF0ZUNGRygpCiAKIHZvaWQgR3JhcGg6OnN1YnN0aXR1dGVHZXRMb2Nh
bChCYXNpY0Jsb2NrJiBibG9jaywgdW5zaWduZWQgc3RhcnRJbmRleEluQmxvY2ssIFZhcmlhYmxl
QWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhLCBOb2RlKiBuZXdHZXRMb2NhbCkKIHsKLSAg
ICBpZiAodmFyaWFibGVBY2Nlc3NEYXRhLT5pc0NhcHR1cmVkKCkpIHsKLSAgICAgICAgLy8gTGV0
IENTRSB3b3JyeSBhYm91dCB0aGlzIG9uZS4KLSAgICAgICAgcmV0dXJuOwotICAgIH0KICAgICBm
b3IgKHVuc2lnbmVkIGluZGV4SW5CbG9jayA9IHN0YXJ0SW5kZXhJbkJsb2NrOyBpbmRleEluQmxv
Y2sgPCBibG9jay5zaXplKCk7ICsraW5kZXhJbkJsb2NrKSB7CiAgICAgICAgIE5vZGUqIG5vZGUg
PSBibG9ja1tpbmRleEluQmxvY2tdOwogICAgICAgICBib29sIHNob3VsZENvbnRpbnVlID0gdHJ1
ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDE4MDg3
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5
KQpAQCAtMzY3LDEzICszNjcsNiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBiYXNlbGluZUNv
ZGVCbG9ja0Zvck9yaWdpbkFuZEJhc2VsaW5lQ29kZUJsb2NrKGNvZGVPcmlnaW4sIG1fcHJvZmls
ZWRCbG9jayk7CiAgICAgfQogICAgIAotICAgIGNvbnN0IEJpdFZlY3RvciYgY2FwdHVyZWRWYXJz
Rm9yKElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lKQotICAgIHsKLSAgICAgICAgaWYg
KCFpbmxpbmVDYWxsRnJhbWUpCi0gICAgICAgICAgICByZXR1cm4gbV9vdXRlcm1vc3RDYXB0dXJl
ZFZhcnM7Ci0gICAgICAgIHJldHVybiBpbmxpbmVDYWxsRnJhbWUtPmNhcHR1cmVkVmFyczsKLSAg
ICB9Ci0gICAgCiAgICAgYm9vbCBpc1N0cmljdE1vZGVGb3IoQ29kZU9yaWdpbiBjb2RlT3JpZ2lu
KQogICAgIHsKICAgICAgICAgaWYgKCFjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkKQEAgLTgz
NSw3ICs4MjgsNiBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgbV9wYXJhbWV0ZXJTbG90czsKICAg
ICBpbnQgbV9tYWNoaW5lQ2FwdHVyZVN0YXJ0OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxTbG93QXJn
dW1lbnRbXT4gbV9zbG93QXJndW1lbnRzOwotICAgIEJpdFZlY3RvciBtX291dGVybW9zdENhcHR1
cmVkVmFyczsKIAogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgc3RkOjp1bm9yZGVyZWRfbWFw
PGludDY0X3QsIGRvdWJsZSo+IG1fZG91YmxlQ29uc3RhbnRzTWFwOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdIZWFwTG9jYXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0hlYXBMb2NhdGlvbi5oCShyZXZpc2lvbiAxODA4NzUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0hlYXBMb2NhdGlvbi5oCSh3b3JraW5nIGNv
cHkpCkBAIC01OSw3ICs1OSw3IEBAIGVudW0gTG9jYXRpb25LaW5kIHsKICAgICBUeXBlT2ZMb2Ms
CiAgICAgVHlwZWRBcnJheUJ5dGVPZmZzZXRMb2MsCiAgICAgVmFySW5qZWN0aW9uV2F0Y2hwb2lu
dExvYywKLSAgICBWYXJpYWJsZUxvYworICAgIFN0YWNrTG9jCiB9OwogCiBjbGFzcyBIZWFwTG9j
YXRpb24gewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJblBsYWNlQWJzdHJh
Y3RTdGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJ
blBsYWNlQWJzdHJhY3RTdGF0ZS5jcHAJKHJldmlzaW9uIDE4MDg3NSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMjksMTEgKzEyOSw3IEBAIHZvaWQgSW5QbGFjZUFic3RyYWN0U3RhdGU6OmluaXRpYWxp
emUoKQogICAgICAgICB9CiAgICAgfQogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcm9vdC0+
dmFsdWVzQXRIZWFkLm51bWJlck9mTG9jYWxzKCk7ICsraSkgewotICAgICAgICBOb2RlKiBub2Rl
ID0gcm9vdC0+dmFyaWFibGVzQXRIZWFkLmxvY2FsKGkpOwotICAgICAgICBpZiAobm9kZSAmJiBu
b2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+aXNDYXB0dXJlZCgpKQotICAgICAgICAgICAgcm9v
dC0+dmFsdWVzQXRIZWFkLmxvY2FsKGkpLm1ha2VIZWFwVG9wKCk7Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIHJvb3QtPnZhbHVlc0F0SGVhZC5sb2NhbChpKS5jbGVhcigpOworICAgICAgICBy
b290LT52YWx1ZXNBdEhlYWQubG9jYWwoaSkuY2xlYXIoKTsKICAgICAgICAgcm9vdC0+dmFsdWVz
QXRUYWlsLmxvY2FsKGkpLmNsZWFyKCk7CiAgICAgfQogICAgIGZvciAoQmxvY2tJbmRleCBibG9j
a0luZGV4ID0gMSA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm51bUJsb2NrcygpOyArK2Jsb2NrSW5k
ZXgpIHsKQEAgLTI2Myw0MCArMjU5LDMxIEBAIGJvb2wgSW5QbGFjZUFic3RyYWN0U3RhdGU6Om1l
cmdlU3RhdGVBdFQKICAgICAgICAgCiAgICAgQWJzdHJhY3RWYWx1ZSBzb3VyY2U7CiAgICAgCi0g
ICAgaWYgKG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1cmVkKCkpIHsKLSAgICAg
ICAgLy8gSWYgaXQncyBjYXB0dXJlZCB0aGVuIHdlIGtub3cgdGhhdCB3aGF0ZXZlciB2YWx1ZSB3
YXMgc3RvcmVkIGludG8gdGhlIHZhcmlhYmxlIGxhc3QgaXMgdGhlCi0gICAgICAgIC8vIG9uZSB3
ZSBjYXJlIGFib3V0LiBUaGlzIGlzIHRydWUgZXZlbiBpZiB0aGUgdmFyaWFibGUgYXQgdGFpbCBp
cyBkZWFkLCB3aGljaCBtaWdodCBoYXBwZW4gaWYKLSAgICAgICAgLy8gdGhlIGxhc3QgdGhpbmcg
d2UgZGlkIHRvIHRoZSB2YXJpYWJsZSB3YXMgYSBHZXRMb2NhbCBhbmQgdGhlbiBlbmRlZCB1cCBu
b3QgdXNpbmcgdGhlCi0gICAgICAgIC8vIEdldExvY2FsJ3MgcmVzdWx0LgotICAgICAgICAKKyAg
ICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICBjYXNlIFBoaToKKyAgICBjYXNlIFNldEFyZ3Vt
ZW50OgorICAgIGNhc2UgUGhhbnRvbUxvY2FsOgorICAgIGNhc2UgRmx1c2g6CisgICAgICAgIC8v
IFRoZSBibG9jayB0cmFuc2ZlcnMgdGhlIHZhbHVlIGZyb20gaGVhZCB0byB0YWlsLgogICAgICAg
ICBzb3VyY2UgPSBpblZhcmlhYmxlOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHN3aXRjaCAobm9k
ZS0+b3AoKSkgewotICAgICAgICBjYXNlIFBoaToKLSAgICAgICAgY2FzZSBTZXRBcmd1bWVudDoK
LSAgICAgICAgY2FzZSBQaGFudG9tTG9jYWw6Ci0gICAgICAgIGNhc2UgRmx1c2g6Ci0gICAgICAg
ICAgICAvLyBUaGUgYmxvY2sgdHJhbnNmZXJzIHRoZSB2YWx1ZSBmcm9tIGhlYWQgdG8gdGFpbC4K
LSAgICAgICAgICAgIHNvdXJjZSA9IGluVmFyaWFibGU7Ci0gICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKLSAgICAgICAgY2FzZSBHZXRMb2NhbDoKLSAgICAg
ICAgICAgIC8vIFRoZSBibG9jayByZWZpbmVzIHRoZSB2YWx1ZSB3aXRoIGFkZGl0aW9uYWwgc3Bl
Y3VsYXRpb25zLgotICAgICAgICAgICAgc291cmNlID0gZm9yTm9kZShub2RlKTsKLSAgICAgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgR2V0TG9jYWw6CisgICAgICAgIC8vIFRoZSBibG9jayByZWZp
bmVzIHRoZSB2YWx1ZSB3aXRoIGFkZGl0aW9uYWwgc3BlY3VsYXRpb25zLgorICAgICAgICBzb3Vy
Y2UgPSBmb3JOb2RlKG5vZGUpOworICAgICAgICBicmVhazsKICAgICAgICAgICAgIAotICAgICAg
ICBjYXNlIFNldExvY2FsOgotICAgICAgICAgICAgLy8gVGhlIGJsb2NrIHNldHMgdGhlIHZhcmlh
YmxlLCBhbmQgcG90ZW50aWFsbHkgcmVmaW5lcyBpdCwgYm90aAotICAgICAgICAgICAgLy8gYmVm
b3JlIGFuZCBhZnRlciBzZXR0aW5nIGl0LgotICAgICAgICAgICAgc291cmNlID0gZm9yTm9kZShu
b2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgICAgICBpZiAobm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRh
KCktPmZsdXNoRm9ybWF0KCkgPT0gRmx1c2hlZERvdWJsZSkKLSAgICAgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVCghKHNvdXJjZS5tX3R5cGUgJiB+U3BlY0Z1bGxEb3VibGUpKTsKLSAgICAgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgU2V0TG9jYWw6CisgICAgICAgIC8vIFRoZSBibG9jayBzZXRz
IHRoZSB2YXJpYWJsZSwgYW5kIHBvdGVudGlhbGx5IHJlZmluZXMgaXQsIGJvdGgKKyAgICAgICAg
Ly8gYmVmb3JlIGFuZCBhZnRlciBzZXR0aW5nIGl0LgorICAgICAgICBzb3VyY2UgPSBmb3JOb2Rl
KG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgaWYgKG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgp
LT5mbHVzaEZvcm1hdCgpID09IEZsdXNoZWREb3VibGUpCisgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVCghKHNvdXJjZS5tX3R5cGUgJiB+U3BlY0Z1bGxEb3VibGUpKTsKKyAgICAgICAgYnJlYWs7
CiAgICAgICAgIAotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CisgICAgZGVmYXVs
dDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7
CiAgICAgfQogICAgIAogICAgIGlmIChkZXN0aW5hdGlvbiA9PSBzb3VyY2UpIHsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNv
bW1vbi5jcHAJKHJldmlzaW9uIDE4MDg3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA2LDEwICsy
MDYsNiBAQCB2b2lkIHJlaWZ5SW5saW5lZENhbGxGcmFtZXMoQ0NhbGxIZWxwZXJzCiAgICAgICAg
IGppdC5zdG9yZTMyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKGxvY2F0aW9uQml0cyks
IEFzc2VtYmx5SGVscGVyczo6dGFnRm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxGcmFt
ZS0+c3RhY2tPZmZzZXQgKyBKU1N0YWNrOjpBcmd1bWVudENvdW50KSkpOwogICAgICAgICBpZiAo
IWlubGluZUNhbGxGcmFtZS0+aXNDbG9zdXJlQ2FsbCkKICAgICAgICAgICAgIGppdC5zdG9yZTY0
KEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKGlu
bGluZUNhbGxGcmFtZS0+Y2FsbGVlQ29uc3RhbnQoKSkpKSwgQXNzZW1ibHlIZWxwZXJzOjphZGRy
ZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBK
U1N0YWNrOjpDYWxsZWUpKSk7Ci0gICAgICAgIAotICAgICAgICAvLyBMZWF2ZSB0aGUgY2FwdHVy
ZWQgYXJndW1lbnRzIGluIHJlZ1QzLgotICAgICAgICBpZiAoYmFzZWxpbmVDb2RlQmxvY2stPnVz
ZXNBcmd1bWVudHMoKSkKLSAgICAgICAgICAgIGppdC5sb2FkUHRyKEFzc2VtYmx5SGVscGVyczo6
YWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCAr
IHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3RlcihiYXNlbGluZUNvZGVCbG9jay0+YXJndW1lbnRz
UmVnaXN0ZXIoKSkub2Zmc2V0KCkpKSwgR1BSSW5mbzo6cmVnVDMpOwogI2Vsc2UgLy8gVVNFKEpT
VkFMVUU2NCkgLy8gc28gdGhpcyBpcyB0aGUgMzItYml0IHBhcnQKICAgICAgICAgaml0LnN0b3Jl
UHRyKGNhbGxlckZyYW1lR1BSLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3JCeXRlT2Zmc2V0
KGlubGluZUNhbGxGcmFtZS0+Y2FsbGVyRnJhbWVPZmZzZXQoKSkpOwogICAgICAgICBJbnN0cnVj
dGlvbiogaW5zdHJ1Y3Rpb24gPSBiYXNlbGluZUNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYmVn
aW4oKSArIGNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleDsKQEAgLTIxOCwxOCArMjE0LDcgQEAgdm9p
ZCByZWlmeUlubGluZWRDYWxsRnJhbWVzKENDYWxsSGVscGVycwogICAgICAgICBqaXQuc3RvcmUz
MihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgQXNzZW1i
bHlIZWxwZXJzOjp0YWdGb3IoKFZpcnR1YWxSZWdpc3RlcikoaW5saW5lQ2FsbEZyYW1lLT5zdGFj
a09mZnNldCArIEpTU3RhY2s6OkNhbGxlZSkpKTsKICAgICAgICAgaWYgKCFpbmxpbmVDYWxsRnJh
bWUtPmlzQ2xvc3VyZUNhbGwpCiAgICAgICAgICAgICBqaXQuc3RvcmVQdHIoQXNzZW1ibHlIZWxw
ZXJzOjpUcnVzdGVkSW1tUHRyKGlubGluZUNhbGxGcmFtZS0+Y2FsbGVlQ29uc3RhbnQoKSksIEFz
c2VtYmx5SGVscGVyczo6cGF5bG9hZEZvcigoVmlydHVhbFJlZ2lzdGVyKShpbmxpbmVDYWxsRnJh
bWUtPnN0YWNrT2Zmc2V0ICsgSlNTdGFjazo6Q2FsbGVlKSkpOwotCi0gICAgICAgIC8vIExlYXZl
IHRoZSBjYXB0dXJlZCBhcmd1bWVudHMgaW4gcmVnVDMuCi0gICAgICAgIGlmIChiYXNlbGluZUNv
ZGVCbG9jay0+dXNlc0FyZ3VtZW50cygpKQotICAgICAgICAgICAgaml0LmxvYWRQdHIoQXNzZW1i
bHlIZWxwZXJzOjpwYXlsb2FkRm9yKFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUtPnN0
YWNrT2Zmc2V0ICsgdW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVyKGJhc2VsaW5lQ29kZUJsb2Nr
LT5hcmd1bWVudHNSZWdpc3RlcigpKS5vZmZzZXQoKSkpLCBHUFJJbmZvOjpyZWdUMyk7CiAjZW5k
aWYgLy8gVVNFKEpTVkFMVUU2NCkgLy8gZW5kaW5nIHRoZSAjZWxzZSBwYXJ0LCBzbyBkaXJlY3Rs
eSBhYm92ZSBpcyB0aGUgMzItYml0IHBhcnQKLSAgICAgICAgCi0gICAgICAgIGlmIChiYXNlbGlu
ZUNvZGVCbG9jay0+dXNlc0FyZ3VtZW50cygpKSB7Ci0gICAgICAgICAgICBBc3NlbWJseUhlbHBl
cnM6Okp1bXAgbm9Bcmd1bWVudHMgPSBqaXQuYnJhbmNoVGVzdFB0cihBc3NlbWJseUhlbHBlcnM6
Olplcm8sIEdQUkluZm86OnJlZ1QzKTsKLSAgICAgICAgICAgIGppdC5hZGRQdHIoQXNzZW1ibHlI
ZWxwZXJzOjpUcnVzdGVkSW1tMzIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCAqIHNpemVv
ZihFbmNvZGVkSlNWYWx1ZSkpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6
cmVnVDApOwotICAgICAgICAgICAgaml0LnN0b3JlUHRyKEdQUkluZm86OnJlZ1QwLCBBc3NlbWJs
eUhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDMsIEFyZ3VtZW50czo6b2Zmc2V0T2ZSZWdp
c3RlcnMoKSkpOwotICAgICAgICAgICAgbm9Bcmd1bWVudHMubGluaygmaml0KTsKLSAgICAgICAg
fQogICAgIH0KIAogI2lmIFVTRShKU1ZBTFVFNjQpCkBAIC0zMDAsNzUgKzI4NSw2IEBAIHZvaWQg
YWRqdXN0QW5kSnVtcFRvVGFyZ2V0KENDYWxsSGVscGVycyYKICAgICBqaXQuanVtcChHUFJJbmZv
OjpyZWdUMik7CiB9CiAKLUFyZ3VtZW50c1JlY292ZXJ5R2VuZXJhdG9yOjpBcmd1bWVudHNSZWNv
dmVyeUdlbmVyYXRvcigpIHsgfQotQXJndW1lbnRzUmVjb3ZlcnlHZW5lcmF0b3I6On5Bcmd1bWVu
dHNSZWNvdmVyeUdlbmVyYXRvcigpIHsgfQotCi12b2lkIEFyZ3VtZW50c1JlY292ZXJ5R2VuZXJh
dG9yOjpnZW5lcmF0ZUZvcigKLSAgICBpbnQgb3BlcmFuZCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2lu
LCBDQ2FsbEhlbHBlcnMmIGppdCkKLXsKLSAgICAvLyBGaW5kIHRoZSByaWdodCBpbmxpbmUgY2Fs
bCBmcmFtZS4KLSAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IDA7Ci0gICAg
Zm9yIChJbmxpbmVDYWxsRnJhbWUqIGN1cnJlbnQgPSBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFt
ZTsKLSAgICAgICAgIGN1cnJlbnQ7Ci0gICAgICAgICBjdXJyZW50ID0gY3VycmVudC0+Y2FsbGVy
LmlubGluZUNhbGxGcmFtZSkgewotICAgICAgICBpZiAoY3VycmVudC0+c3RhY2tPZmZzZXQgPj0g
b3BlcmFuZCkgewotICAgICAgICAgICAgaW5saW5lQ2FsbEZyYW1lID0gY3VycmVudDsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKCFqaXQuYmFzZWxpbmVD
b2RlQmxvY2tGb3IoaW5saW5lQ2FsbEZyYW1lKS0+dXNlc0FyZ3VtZW50cygpKQotICAgICAgICBy
ZXR1cm47Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50c1JlZ2lzdGVyID0gaml0LmJhc2Vs
aW5lQXJndW1lbnRzUmVnaXN0ZXJGb3IoaW5saW5lQ2FsbEZyYW1lKTsKLSAgICBpZiAobV9kaWRD
cmVhdGVBcmd1bWVudHNPYmplY3QuYWRkKGlubGluZUNhbGxGcmFtZSkuaXNOZXdFbnRyeSkgewot
ICAgICAgICAvLyBXZSBrbm93IHRoaXMgY2FsbCBmcmFtZSBvcHRpbWl6ZWQgb3V0IGFuIGFyZ3Vt
ZW50cyBvYmplY3QgdGhhdAotICAgICAgICAvLyB0aGUgYmFzZWxpbmUgSklUIHdvdWxkIGhhdmUg
Y3JlYXRlZC4gRG8gdGhhdCBjcmVhdGlvbiBub3cuCi0gICAgICAgIGlmIChpbmxpbmVDYWxsRnJh
bWUpIHsKLSAgICAgICAgICAgIGppdC5hZGRQdHIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1t
MzIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkp
LCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6cmVnVDApOwotICAgICAgICAg
ICAgaml0LnNldHVwQXJndW1lbnRzKEdQUkluZm86OnJlZ1QwKTsKLSAgICAgICAgfSBlbHNlCi0g
ICAgICAgICAgICBqaXQuc2V0dXBBcmd1bWVudHNFeGVjU3RhdGUoKTsKLSAgICAgICAgaml0Lm1v
dmUoCi0gICAgICAgICAgICBBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoCi0gICAgICAg
ICAgICAgICAgYml0d2lzZV9jYXN0PHZvaWQqPihvcGVyYXRpb25DcmVhdGVBcmd1bWVudHNEdXJp
bmdPU1JFeGl0KSksCi0gICAgICAgICAgICBHUFJJbmZvOjpub25BcmdHUFIwKTsKLSNpZiBVU0Uo
SlNWQUxVRTY0KQotICAgICAgICBqaXQuY2FsbChHUFJJbmZvOjpub25BcmdHUFIwKTsKLSAgICAg
ICAgaml0LnN0b3JlNjQoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEFzc2VtYmx5SGVscGVyczo6
YWRkcmVzc0Zvcihhcmd1bWVudHNSZWdpc3RlcikpOwotICAgICAgICBqaXQuc3RvcmU2NCgKLSAg
ICAgICAgICAgIEdQUkluZm86OnJldHVyblZhbHVlR1BSLAotICAgICAgICAgICAgQXNzZW1ibHlI
ZWxwZXJzOjphZGRyZXNzRm9yKHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3Rlcihhcmd1bWVudHNS
ZWdpc3RlcikpKTsKLSAgICAgICAgaml0Lm1vdmUoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEdQ
UkluZm86OnJlZ1QwKTsgLy8gbm8tb3AgbW92ZSBvbiBhbG1vc3QgYWxsIHBsYXRmb3Jtcy4KLSNl
bHNlIC8vIFVTRShKU1ZBTFVFNjQpIC0+IHNvIHRoZSAzMl82NCBwYXJ0Ci0gICAgICAgIGppdC5j
YWxsKEdQUkluZm86Om5vbkFyZ0dQUjApOwotICAgICAgICBqaXQuc3RvcmUzMigKLSAgICAgICAg
ICAgIEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLAotICAg
ICAgICAgICAgQXNzZW1ibHlIZWxwZXJzOjp0YWdGb3IoYXJndW1lbnRzUmVnaXN0ZXIpKTsKLSAg
ICAgICAgaml0LnN0b3JlMzIoCi0gICAgICAgICAgICBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwK
LSAgICAgICAgICAgIEFzc2VtYmx5SGVscGVyczo6cGF5bG9hZEZvcihhcmd1bWVudHNSZWdpc3Rl
cikpOwotICAgICAgICBqaXQuc3RvcmUzMigKLSAgICAgICAgICAgIEFzc2VtYmx5SGVscGVyczo6
VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLAotICAgICAgICAgICAgQXNzZW1ibHlIZWxw
ZXJzOjp0YWdGb3IodW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVyKGFyZ3VtZW50c1JlZ2lzdGVy
KSkpOwotICAgICAgICBqaXQuc3RvcmUzMigKLSAgICAgICAgICAgIEdQUkluZm86OnJldHVyblZh
bHVlR1BSLAotICAgICAgICAgICAgQXNzZW1ibHlIZWxwZXJzOjpwYXlsb2FkRm9yKHVubW9kaWZp
ZWRBcmd1bWVudHNSZWdpc3Rlcihhcmd1bWVudHNSZWdpc3RlcikpKTsKLSAgICAgICAgaml0Lm1v
dmUoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEdQUkluZm86OnJlZ1QwKTsgLy8gbm8tb3AgbW92
ZSBvbiBhbG1vc3QgYWxsIHBsYXRmb3Jtcy4KLSNlbmRpZiAvLyBVU0UoSlNWQUxVRTY0KQotICAg
IH0KLQotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgaml0LmxvYWQ2NChBc3NlbWJseUhlbHBlcnM6
OmFkZHJlc3NGb3IoYXJndW1lbnRzUmVnaXN0ZXIpLCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgaml0
LnN0b3JlNjQoR1BSSW5mbzo6cmVnVDAsIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcihvcGVy
YW5kKSk7Ci0jZWxzZSAvLyBVU0UoSlNWQUxVRTY0KSAtPiBzbyB0aGUgMzJfNjQgcGFydAotICAg
IGppdC5sb2FkMzIoQXNzZW1ibHlIZWxwZXJzOjpwYXlsb2FkRm9yKGFyZ3VtZW50c1JlZ2lzdGVy
KSwgR1BSSW5mbzo6cmVnVDApOwotICAgIGppdC5zdG9yZTMyKAotICAgICAgICBBc3NlbWJseUhl
bHBlcnM6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwKLSAgICAgICAgQXNzZW1ibHlI
ZWxwZXJzOjp0YWdGb3Iob3BlcmFuZCkpOwotICAgIGppdC5zdG9yZTMyKEdQUkluZm86OnJlZ1Qw
LCBBc3NlbWJseUhlbHBlcnM6OnBheWxvYWRGb3Iob3BlcmFuZCkpOwotI2VuZGlmIC8vIFVTRShK
U1ZBTFVFNjQpCi19Ci0gICAgCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKICNlbmRpZiAv
LyBFTkFCTEUoREZHX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NS
RXhpdENvbXBpbGVyQ29tbW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uaAkocmV2aXNpb24gMTgwODc1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzcsMTggKzM3LDYgQEAgdm9pZCBoYW5kbGVFeGl0Q291bnRzKENDYWxsSGVs
cGVycyYsIGNvbgogdm9pZCByZWlmeUlubGluZWRDYWxsRnJhbWVzKENDYWxsSGVscGVycyYsIGNv
bnN0IE9TUkV4aXRCYXNlJik7CiB2b2lkIGFkanVzdEFuZEp1bXBUb1RhcmdldChDQ2FsbEhlbHBl
cnMmLCBjb25zdCBPU1JFeGl0QmFzZSYpOwogCi1jbGFzcyBBcmd1bWVudHNSZWNvdmVyeUdlbmVy
YXRvciB7Ci1wdWJsaWM6Ci0gICAgQXJndW1lbnRzUmVjb3ZlcnlHZW5lcmF0b3IoKTsKLSAgICB+
QXJndW1lbnRzUmVjb3ZlcnlHZW5lcmF0b3IoKTsKLSAgICAKLSAgICB2b2lkIGdlbmVyYXRlRm9y
KGludCBvcGVyYW5kLCBDb2RlT3JpZ2luLCBDQ2FsbEhlbHBlcnMmKTsKLSAgICAKLXByaXZhdGU6
Ci0gICAgSGFzaFNldDxJbmxpbmVDYWxsRnJhbWUqLCBEZWZhdWx0SGFzaDxJbmxpbmVDYWxsRnJh
bWUqPjo6SGFzaCwKLSAgICAgICAgTnVsbGFibGVIYXNoVHJhaXRzPElubGluZUNhbGxGcmFtZSo+
PiBtX2RpZENyZWF0ZUFyZ3VtZW50c09iamVjdDsKLX07Ci0KIH0gfSAvLyBuYW1lc3BhY2UgSlND
OjpERkcKIAogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdQcmVjaXNlTG9jYWxDbG9iYmVyaXplLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVjaXNlTG9jYWxDbG9iYmVyaXplLmgJKHJldmlz
aW9uIDE4MDg3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlY2lzZUxvY2Fs
Q2xvYmJlcml6ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjEsMTIgKzEyMSw2IEBAIHByaXZhdGU6
CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBKU1N0YWNrOjpUaGlzQXJndW1lbnQ7
ICsraSkKICAgICAgICAgICAgIG1fcmVhZChWaXJ0dWFsUmVnaXN0ZXIoaSkpOwogICAgICAgICAK
LSAgICAgICAgLy8gUmVhZCBhbGwgb2YgdGhlIGNhcHR1cmVkIHZhcmlhYmxlcy4KLSAgICAgICAg
Y29uc3QgQml0VmVjdG9yJiBjYXB0dXJlZFZhcnMgPQotICAgICAgICAgICAgbV9ncmFwaC5jYXB0
dXJlZFZhcnNGb3IobV9ub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKTsKLSAg
ICAgICAgZm9yICh1bnNpZ25lZCBpIDogY2FwdHVyZWRWYXJzLnNldEJpdHMoKSkKLSAgICAgICAg
ICAgIG1fcmVhZCh2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpKSk7Ci0gICAgICAgIAogICAgICAg
ICAvLyBSZWFkIGFsbCBvZiB0aGUgaW5saW5lIGFyZ3VtZW50cyBhbmQgY2FsbCBmcmFtZSBoZWFk
ZXJzIHRoYXQgd2UgZGlkbid0IGFscmVhZHkgY2FwdHVyZS4KICAgICAgICAgZm9yIChJbmxpbmVD
YWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IG1fbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGlu
ZUNhbGxGcmFtZTsgaW5saW5lQ2FsbEZyYW1lOyBpbmxpbmVDYWxsRnJhbWUgPSBpbmxpbmVDYWxs
RnJhbWUtPmNhbGxlci5pbmxpbmVDYWxsRnJhbWUpIHsKICAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKTsgaS0tID4gMTspCkBAIC0x
MzYsNiArMTMwLDkgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUt
PmlzVmFyYXJncygpKQogICAgICAgICAgICAgICAgIG1fcmVhZChWaXJ0dWFsUmVnaXN0ZXIoaW5s
aW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpKTsKICAg
ICAgICAgfQorCisgICAgICAgIC8vIE5vdGUgdGhhdCB3ZSBkb24ndCBuZWVkIHRvIGRvIGFueXRo
aW5nIHNwZWNpYWwgZm9yIENhbGxGb3J3YXJkVmFyYXJncywgc2luY2UgaXQgcmVhZHMKKyAgICAg
ICAgLy8gb3VyIGFyZ3VtZW50cyB0aGUgc2FtZSB3YXkgdGhhdCBhbnkgZWZmZWN0ZnVsIHRoaW5n
IG1pZ2h0LgogICAgIH0KICAgICAKICAgICB2b2lkIHdyaXRlVG9wKCkKQEAgLTE0OCwxOSArMTQ1
LDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGRhdGEtPmxpbWl0
OyBpLS07KQogICAgICAgICAgICAgICAgIG1fd3JpdGUoVmlydHVhbFJlZ2lzdGVyKGRhdGEtPnN0
YXJ0Lm9mZnNldCgpICsgaSkpOwogICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAvLyBOb3Rl
IHRoYXQgd2UgZG9uJ3QgbmVlZCB0byBkbyBhbnl0aGluZyBzcGVjaWFsIGZvciBDYWxsRm9yd2Fy
ZFZhcmFyZ3MsIHNpbmNlIGl0IHJlYWRzCi0gICAgICAgIC8vIG91ciBhcmd1bWVudHMgdGhlIHNh
bWUgd2F5IHRoYXQgYW55IGVmZmVjdGZ1bCB0aGluZyBtaWdodC4KLSAgICAgICAgCi0gICAgICAg
IGlmIChtX2dyYXBoLm1fY29kZUJsb2NrLT51c2VzQXJndW1lbnRzKCkpIHsKLSAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IG1fZ3JhcGgubV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKTsg
aS0tID4gMTspCi0gICAgICAgICAgICAgICAgbV93cml0ZSh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1
bWVudChpKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBjb25zdCBCaXRWZWN0b3ImIGNhcHR1cmVk
VmFycyA9Ci0gICAgICAgICAgICBtX2dyYXBoLmNhcHR1cmVkVmFyc0ZvcihtX25vZGUtPm9yaWdp
bi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgOiBj
YXB0dXJlZFZhcnMuc2V0Qml0cygpKQotICAgICAgICAgICAgbV93cml0ZSh2aXJ0dWFsUmVnaXN0
ZXJGb3JMb2NhbChpKSk7CiAgICAgfQogICAgIAogICAgIEdyYXBoJiBtX2dyYXBoOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ29udmVyc2lvblBoYXNl
LmNwcAkocmV2aXNpb24gMTgwODc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
U0FDb252ZXJzaW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Myw3ICs2Myw3IEBAIHB1
YmxpYzoKIAogICAgICAgICAvLyBDcmVhdGUgYSBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSBmb3Ig
ZXZlcnkgcm9vdCBWYXJpYWJsZUFjY2Vzc0RhdGEuCiAgICAgICAgIGZvciAoVmFyaWFibGVBY2Nl
c3NEYXRhJiB2YXJpYWJsZSA6IG1fZ3JhcGgubV92YXJpYWJsZUFjY2Vzc0RhdGEpIHsKLSAgICAg
ICAgICAgIGlmICghdmFyaWFibGUuaXNSb290KCkgfHwgdmFyaWFibGUuaXNDYXB0dXJlZCgpKQor
ICAgICAgICAgICAgaWYgKCF2YXJpYWJsZS5pc1Jvb3QoKSkKICAgICAgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUq
IHNzYVZhcmlhYmxlID0gbV9jYWxjdWxhdG9yLm5ld1ZhcmlhYmxlKCk7CkBAIC04Nyw4ICs4Nyw2
IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAg
ICAgCiAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUt
PnZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZS0+aXND
YXB0dXJlZCgpKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgICAgICBOb2RlKiBjaGlsZE5vZGU7CiAgICAgICAgICAgICAgICAgaWYg
KG5vZGUtPm9wKCkgPT0gU2V0TG9jYWwpCkBAIC0xOTAsMTAgKzE4OCw4IEBAIHB1YmxpYzoKICAg
ICAgICAgLy8KICAgICAgICAgLy8gICAtIE1vdkhpbnQgaGFzIEtpbGxMb2NhbCBwcmVwZW5kZWQg
dG8gaXQuCiAgICAgICAgIC8vCi0gICAgICAgIC8vICAgLSBHZXRMb2NhbCBvdmVyIGNhcHR1cmVk
IHZhcmlhYmxlcyBsb3NlIHRoZWlyIHBoaXMgYW5kIGJlY29tZSBHZXRTdGFjay4KLSAgICAgICAg
Ly8KLSAgICAgICAgLy8gICAtIEdldExvY2FsIG92ZXIgdW5jYXB0dXJlZCB2YXJpYWJsZXMgZGll
IGFuZCBnZXQgcmVwbGFjZWQgd2l0aCByZWZlcmVuY2VzIHRvIHRoZSBub2RlCi0gICAgICAgIC8v
ICAgICBzcGVjaWZpZWQgYnkgdmFsdWVGb3JPcGVyYW5kLgorICAgICAgICAvLyAgIC0gR2V0TG9j
YWwgZGllIGFuZCBnZXQgcmVwbGFjZWQgd2l0aCByZWZlcmVuY2VzIHRvIHRoZSBub2RlIHNwZWNp
ZmllZCBieQorICAgICAgICAvLyAgICAgdmFsdWVGb3JPcGVyYW5kLgogICAgICAgICAvLwogICAg
ICAgICAvLyAgIC0gU2V0TG9jYWwgdHVybnMgaW50byBQdXRTdGFjayBpZiBpdCdzIGZsdXNoZWQs
IG9yIHR1cm5zIGludG8gYSBDaGVjayBvdGhlcndpc2UuCiAgICAgICAgIC8vCkBAIC0yMTgsOCAr
MjE0LDYgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEq
IHZhcmlhYmxlID0gbm9kZUF0SGVhZC0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7Ci0gICAgICAgICAg
ICAgICAgICAgIGlmICh2YXJpYWJsZS0+aXNDYXB0dXJlZCgpKQotICAgICAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAg
ICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIkNvbnNpZGVy
aW5nIGxpdmUgdmFyaWFibGUgIiwgVmFyaWFibGVBY2Nlc3NEYXRhRHVtcChtX2dyYXBoLCB2YXJp
YWJsZSksICIgYXQgaGVhZCBvZiBibG9jayAiLCAqYmxvY2ssICJcbiIpOwpAQCAtMjgzLDE4ICsy
NzcsMTYgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGNhc2UgU2V0TG9jYWw6IHsKICAgICAg
ICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlh
YmxlQWNjZXNzRGF0YSgpOwogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKHZhcmlhYmxlLT5pc0NhcHR1cmVkKCkgfHwgISEobm9kZS0+ZmxhZ3MoKSAmIE5vZGVJ
c0ZsdXNoZWQpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghIShub2RlLT5mbGFncygpICYg
Tm9kZUlzRmx1c2hlZCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRU
b1B1dFN0YWNrKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgubV9zdGFja0Fj
Y2Vzc0RhdGEuYWRkKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS0+
bG9jYWwoKSwgdmFyaWFibGUtPmZsdXNoRm9ybWF0KCkpKTsKICAgICAgICAgICAgICAgICAgICAg
fSBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRPcEFuZERlZmF1bHRGbGFn
cyhDaGVjayk7CiAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBpZiAo
IXZhcmlhYmxlLT5pc0NhcHR1cmVkKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2
ZXJib3NlKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIk1hcHBpbmc6ICIs
IHZhcmlhYmxlLT5sb2NhbCgpLCAiIC0+ICIsIG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgIlxuIik7
Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZUZvck9wZXJhbmQub3BlcmFuZCh2YXJpYWJs
ZS0+bG9jYWwoKSkgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7Ci0gICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAg
ICAgICBkYXRhTG9nKCJNYXBwaW5nOiAiLCB2YXJpYWJsZS0+bG9jYWwoKSwgIiAtPiAiLCBub2Rl
LT5jaGlsZDEoKS5ub2RlKCksICJcbiIpOworICAgICAgICAgICAgICAgICAgICB2YWx1ZUZvck9w
ZXJhbmQub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7
CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAgICAgCkBAIC0zMDgsMTEgKzMwMCw2IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAg
ICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNz
RGF0YSgpOwogICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZHJlbi5yZXNldCgpOwogICAg
ICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhYmxlLT5pc0Nh
cHR1cmVkKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb0dldFN0
YWNrKG1fZ3JhcGgubV9zdGFja0FjY2Vzc0RhdGEuYWRkKHZhcmlhYmxlLT5sb2NhbCgpLCB2YXJp
YWJsZS0+Zmx1c2hGb3JtYXQoKSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAg
ICAgICAgIG5vZGUtPmNvbnZlcnRUb1BoYW50b20oKTsKICAgICAgICAgICAgICAgICAgICAgaWYg
KHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJSZXBsYWNpbmcgbm9k
ZSAiLCBub2RlLCAiIHdpdGggIiwgdmFsdWVGb3JPcGVyYW5kLm9wZXJhbmQodmFyaWFibGUtPmxv
Y2FsKCkpLCAiXG4iKTsKQEAgLTMyOSwxOSArMzE2LDcgQEAgcHVibGljOgogICAgICAgICAgICAg
ICAgIGNhc2UgUGhhbnRvbUxvY2FsOiB7CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChub2Rl
LT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gVW50eXBlZFVzZSk7CiAgICAgICAgICAgICAgICAgICAg
IFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEo
KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhYmxlLT5pc0NhcHR1cmVkKCkpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBmdW4gY2FzZS4gV2UgY291bGQgaGF2
ZSBhIGNhcHR1cmVkIHZhcmlhYmxlIHRoYXQgaGFkIHNvbWUKLSAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIG9yIGFsbCBvZiBpdHMgdXNlcyBzdHJlbmd0aCByZWR1Y2VkIHRvIHBoYW50b21zIHJh
dGhlciB0aGFuIGZsdXNoZXMuCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBTU0EgY29udmVy
c2lvbiB3aWxsIGN1cnJlbnRseSBzdGlsbCB0cmVhdCBpdCBhcyBmbHVzaGVkLCBpbiB0aGUgc2Vu
c2UKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoYXQgaXQgd2lsbCBqdXN0IGtlZXAgdGhl
IFNldExvY2FsLiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vdGhpbmcgdGhhdAotICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gbmVlZHMgdG8gYmUgZG9uZSBoZXJlOiB3ZSBkb24ndCBuZWVkIHRvIGFs
c28ga2VlcCB0aGUgc291cmNlIHZhbHVlCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBhbGl2
ZS4gQW5kIGV2ZW4gaWYgd2UgZGlkIHdhbnQgdG8ga2VlcCB0aGUgc291cmNlIHZhbHVlIGFsaXZl
LCB3ZQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gd291bGRuJ3QgYmUgYWJsZSB0bywgYmVj
YXVzZSB0aGUgdmFyaWFibGVzQXRIZWFkIHZhbHVlIGZvciBhIGNhcHR1cmVkCi0gICAgICAgICAg
ICAgICAgICAgICAgICAvLyBsb2NhbCB3b3VsZG4ndCBoYXZlIGJlZW4gY29tcHV0ZWQgYnkgdGhl
IFBoaSByZWR1Y3Rpb24gYWxnb3JpdGhtCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBhYm92
ZS4KLSAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLnJlc2V0KCk7Ci0gICAg
ICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hp
bGQxKCkgPSB2YWx1ZUZvck9wZXJhbmQub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSktPmRlZmF1
bHRFZGdlKCk7CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpID0gdmFsdWVGb3JP
cGVyYW5kLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpLT5kZWZhdWx0RWRnZSgpOwogICAgICAg
ICAgICAgICAgICAgICBub2RlLT5jb252ZXJ0VG9QaGFudG9tKCk7CiAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KQEAgLTQwMiwxMiArMzc3LDkgQEAgcHVibGlj
OgogICAgICAgICAgICAgRmx1c2hGb3JtYXQgZm9ybWF0ID0gRmx1c2hlZEpTVmFsdWU7CiAKICAg
ICAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2FyZ3VtZW50TWFwcGluZy5nZXQobV9ncmFwaC5tX2Fy
Z3VtZW50c1tpXSk7Ci0KLSAgICAgICAgICAgIC8vIG1fYXJndW1lbnRNYXBwaW5nLmdldCBjb3Vs
ZCByZXR1cm4gbnVsbCBmb3IgYSBjYXB0dXJlZCBsb2NhbC4gVGhhdCdzIGZpbmUuIFdlIG9ubHkK
LSAgICAgICAgICAgIC8vIHRyYWNrIHRoZSBhcmd1bWVudCBsb2FkcyBvZiB0aG9zZSBhcmd1bWVu
dHMgZm9yIHdoaWNoIHdlIHNwZWN1bGF0ZSB0eXBlLiBXZSBkb24ndAotICAgICAgICAgICAgLy8g
c3BlY3VsYXRlIHR5cGUgZm9yIGNhcHR1cmVkIGFyZ3VtZW50cy4KLSAgICAgICAgICAgIGlmIChu
b2RlKQotICAgICAgICAgICAgICAgIGZvcm1hdCA9IG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5m
b3JtYXQ7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG5vZGUpOwor
ICAgICAgICAgICAgZm9ybWF0ID0gbm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCktPmZvcm1hdDsKICAg
ICAgICAgICAgIAogICAgICAgICAgICAgbV9ncmFwaC5tX2FyZ3VtZW50Rm9ybWF0c1tpXSA9IGZv
cm1hdDsKICAgICAgICAgICAgIG1fZ3JhcGgubV9hcmd1bWVudHNbaV0gPSBub2RlOyAvLyBSZWNv
cmQgdGhlIGxvYWQgdGhhdCBsb2FkcyB0aGUgYXJndW1lbnRzIGZvciB0aGUgYmVuZWZpdCBvZiBl
eGl0IHByb2ZpbGluZy4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMTgwODc1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjU5OCw4ICsyNTk4LDExIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9k
ZSkKICAgICAgICAgY2FzZSBBcnJheTo6U3RyaW5nOgogICAgICAgICAgICAgY29tcGlsZUdldEJ5
VmFsT25TdHJpbmcobm9kZSk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJh
eTo6QXJndW1lbnRzOgotICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25Bcmd1bWVudHMobm9k
ZSk7CisgICAgICAgIGNhc2UgQXJyYXk6OkRpcmVjdEFyZ3VtZW50czoKKyAgICAgICAgICAgIGNv
bXBpbGVHZXRCeVZhbE9uRGlyZWN0QXJndW1lbnRzKG5vZGUpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgQXJyYXk6OlNjb3BlZEFyZ3VtZW50czoKKyAgICAgICAgICAgIGNvbXBp
bGVHZXRCeVZhbE9uU2NvcGVkQXJndW1lbnRzKG5vZGUpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIGRlZmF1bHQ6IHsKICAgICAgICAgICAgIFR5cGVkQXJyYXlUeXBlIHR5cGUgPSBub2Rl
LT5hcnJheU1vZGUoKS50eXBlZEFycmF5VHlwZSgpOwpAQCAtMjgyOSw0NyArMjgzMiw2IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgY2FzZSBBcnJheTo6QXJndW1lbnRz
OiB7Ci0gICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBjaGlsZDMpOwotICAg
ICAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7Ci0gICAgICAgICAgICBHUFJUZW1w
b3Jhcnkgc2NyYXRjaDIodGhpcyk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIEdQUlJlZyB2
YWx1ZVJlZyA9IHZhbHVlLmdwcigpOwotICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hSZWcgPSBz
Y3JhdGNoLmdwcigpOwotICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2gyUmVnID0gc2NyYXRjaDIu
Z3ByKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKLSAg
ICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgIC8vIFR3byByZWFsbHkgbGFtZSBj
aGVja3MuCi0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAgICAgICAgICAgIFVu
Y291bnRhYmxlLCBKU1ZhbHVlU291cmNlKCksIDAsCi0gICAgICAgICAgICAgICAgbV9qaXQuYnJh
bmNoMzIoCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWws
IHByb3BlcnR5UmVnLAotICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhiYXNlUmVnLCBBcmd1bWVudHM6Om9mZnNldE9mTnVtQXJndW1lbnRzKCkpKSk7Ci0gICAgICAg
ICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAgICAgICAgICAgIFVuY291bnRhYmxlLCBKU1Zh
bHVlU291cmNlKCksIDAsCi0gICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdFB0cigKLSAg
ICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sCi0gICAgICAgICAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKAotICAgICAgICAgICAgICAgICAgICAgICAg
YmFzZVJlZywgQXJndW1lbnRzOjpvZmZzZXRPZlNsb3dBcmd1bWVudERhdGEoKSkpKTsKLQotICAg
ICAgICAgICAgbV9qaXQubW92ZShwcm9wZXJ0eVJlZywgc2NyYXRjaDJSZWcpOwotICAgICAgICAg
ICAgbV9qaXQuc2lnbkV4dGVuZDMyVG9QdHIoc2NyYXRjaDJSZWcsIHNjcmF0Y2gyUmVnKTsKLSAg
ICAgICAgICAgIG1faml0LmxvYWRQdHIoCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MoYmFzZVJlZywgQXJndW1lbnRzOjpvZmZzZXRPZlJlZ2lzdGVycygpKSwKLSAgICAg
ICAgICAgICAgICBzY3JhdGNoUmVnKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbV9qaXQu
c3RvcmU2NCgKLSAgICAgICAgICAgICAgICB2YWx1ZVJlZywKLSAgICAgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6QmFzZUluZGV4KAotICAgICAgICAgICAgICAgICAgICBzY3JhdGNoUmVnLCBz
Y3JhdGNoMlJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsCi0gICAgICAgICAgICAgICAg
ICAgIENhbGxGcmFtZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpICsg
c2l6ZW9mKFJlZ2lzdGVyKSkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBub1Jlc3VsdChu
b2RlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgICAgICAKICAgICAg
ICAgZGVmYXVsdDogewogICAgICAgICAgICAgVHlwZWRBcnJheVR5cGUgdHlwZSA9IGFycmF5TW9k
ZS50eXBlZEFycmF5VHlwZSgpOwogICAgICAgICAgICAgaWYgKGlzSW50KHR5cGUpKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJl
dmlzaW9uIDE4MDg3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MjIsOSArNzIyLDEyIEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNoZWNrQXJyYXkoTm9kZSogbm8KICAgICAgICAgbm9SZXN1bHQobV9jdXJyZW50
Tm9kZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgY2FzZSBBcnJheTo6QXJndW1lbnRz
OgotICAgICAgICBzcGVjdWxhdGVDZWxsVHlwZVdpdGhvdXRUeXBlRmlsdGVyaW5nKG5vZGUtPmNo
aWxkMSgpLCBiYXNlUmVnLCBBcmd1bWVudHNUeXBlKTsKLQorICAgIGNhc2UgQXJyYXk6OkRpcmVj
dEFyZ3VtZW50czoKKyAgICAgICAgc3BlY3VsYXRlQ2VsbFR5cGVXaXRob3V0VHlwZUZpbHRlcmlu
Zyhub2RlLT5jaGlsZDEoKSwgYmFzZVJlZywgRGlyZWN0QXJndW1lbnRzVHlwZSk7CisgICAgICAg
IG5vUmVzdWx0KG1fY3VycmVudE5vZGUpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBcnJh
eTo6U2NvcGVkQXJndW1lbnRzOgorICAgICAgICBzcGVjdWxhdGVDZWxsVHlwZVdpdGhvdXRUeXBl
RmlsdGVyaW5nKG5vZGUtPmNoaWxkMSgpLCBiYXNlUmVnLCBTY29wZWRBcmd1bWVudHNUeXBlKTsK
ICAgICAgICAgbm9SZXN1bHQobV9jdXJyZW50Tm9kZSk7CiAgICAgICAgIHJldHVybjsKICAgICBk
ZWZhdWx0OgpAQCAtNDA4OCw3ICs0MDkxLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZUdldFR5cGVkQXJyYQogICAgIGludDMyUmVzdWx0KHZlY3RvckdQUiwgbm9kZSk7CiB9CiAKLXZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uQXJndW1lbnRzKE5vZGUqIG5vZGUp
Cit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkRpcmVjdEFyZ3VtZW50cyhO
b2RlKiBub2RlKQogewogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+
Y2hpbGQxKCkpOwogICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlz
LCBub2RlLT5jaGlsZDIoKSk7CkBAIC00MTAzLDgwICs0MTA2LDg5IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uQXIKICAgICBHUFJSZWcgcmVzdWx0UmVnID0gcmVzdWx0
LmdwcigpOwogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgR1BSUmVnIHJlc3VsdFRhZ1JlZyA9
IHJlc3VsdFRhZy5ncHIoKTsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJl
Z3MocmVzdWx0VGFnUmVnLCByZXN1bHRSZWcpOworI2Vsc2UKKyAgICBKU1ZhbHVlUmVncyByZXN1
bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVzdWx0UmVnKTsKICNlbmRpZgogICAgIEdQUlJlZyBzY3Jh
dGNoUmVnID0gc2NyYXRjaC5ncHIoKTsKICAgICAKICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCiAg
ICAgICAgIHJldHVybjsKLSAgCi0gICAgQVNTRVJUKEFycmF5TW9kZShBcnJheTo6QXJndW1lbnRz
KS5hbHJlYWR5Q2hlY2tlZChtX2ppdC5ncmFwaCgpLCBub2RlLCBtX3N0YXRlLmZvck5vZGUobm9k
ZS0+Y2hpbGQxKCkpKSk7CiAgICAgCi0gICAgLy8gVHdvIHJlYWxseSBsYW1lIGNoZWNrcy4KLSAg
ICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAgICBFeG90aWNPYmplY3RNb2RlLCBKU1ZhbHVlU291
cmNlKCksIDAsCi0gICAgICAgIG1faml0LmJyYW5jaDMyKAotICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsCi0gICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhiYXNlUmVnLCBBcmd1bWVudHM6Om9mZnNldE9mTnVtQXJndW1lbnRzKCkp
KSk7CisgICAgQVNTRVJUKEFycmF5TW9kZShBcnJheTo6RGlyZWN0QXJndW1lbnRzKS5hbHJlYWR5
Q2hlY2tlZChtX2ppdC5ncmFwaCgpLCBub2RlLCBtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQx
KCkpKSk7CisgICAgCiAgICAgc3BlY3VsYXRpb25DaGVjaygKICAgICAgICAgRXhvdGljT2JqZWN0
TW9kZSwgSlNWYWx1ZVNvdXJjZSgpLCAwLAogICAgICAgICBtX2ppdC5icmFuY2hUZXN0UHRyKAog
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sCi0gICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcygKLSAgICAgICAgICAgICAgICBiYXNlUmVnLCBBcmd1bWVudHM6Om9m
ZnNldE9mU2xvd0FyZ3VtZW50RGF0YSgpKSkpOwotICAgIAotICAgIG1faml0Lm1vdmUocHJvcGVy
dHlSZWcsIHJlc3VsdFJlZyk7Ci0gICAgbV9qaXQuc2lnbkV4dGVuZDMyVG9QdHIocmVzdWx0UmVn
LCByZXN1bHRSZWcpOwotICAgIG1faml0LmxvYWRQdHIoCi0gICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKGJhc2VSZWcsIEFyZ3VtZW50czo6b2Zmc2V0T2ZSZWdpc3RlcnMoKSksCi0gICAg
ICAgIHNjcmF0Y2hSZWcpOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFz
ZVJlZywgRGlyZWN0QXJndW1lbnRzOjpvZmZzZXRPZk92ZXJyaWRlcygpKSkpOworICAgIHNwZWN1
bGF0aW9uQ2hlY2soCisgICAgICAgIEV4b3RpY09iamVjdE1vZGUsIEpTVmFsdWVTb3VyY2UoKSwg
MCwKKyAgICAgICAgbV9qaXQuYnJhbmNoMzIoCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKGJhc2VSZWcsIERpcmVjdEFyZ3VtZW50czo6b2Zmc2V0T2ZMZW5ndGgoKSkpKTsKICAg
ICAKLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgIG1faml0LmxvYWQzMigKLSAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OkJhc2VJbmRleCgKLSAgICAgICAgICAgIHNjcmF0Y2hSZWcsIHJlc3VsdFJl
ZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsCi0gICAgICAgICAgICBDYWxsRnJhbWU6OnRo
aXNBcmd1bWVudE9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSArIHNpemVvZihSZWdpc3Rlcikg
KwotICAgICAgICAgICAgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLAot
ICAgICAgICByZXN1bHRUYWdSZWcpOwotICAgIG1faml0LmxvYWQzMigKLSAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkJhc2VJbmRleCgKLSAgICAgICAgICAgIHNjcmF0Y2hSZWcsIHJlc3VsdFJlZywg
TWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsCi0gICAgICAgICAgICBDYWxsRnJhbWU6OnRoaXNB
cmd1bWVudE9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSArIHNpemVvZihSZWdpc3RlcikgKwot
ICAgICAgICAgICAgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwK
LSAgICAgICAgcmVzdWx0UmVnKTsKLSAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFRhZ1JlZywgcmVz
dWx0UmVnLCBub2RlKTsKLSNlbHNlCi0gICAgbV9qaXQubG9hZDY0KAorICAgIG1faml0LmxvYWRW
YWx1ZSgKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleCgKLSAgICAgICAgICAgIHNj
cmF0Y2hSZWcsIHJlc3VsdFJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsCi0gICAgICAg
ICAgICBDYWxsRnJhbWU6OnRoaXNBcmd1bWVudE9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSAr
IHNpemVvZihSZWdpc3RlcikpLAotICAgICAgICByZXN1bHRSZWcpOwotICAgIGpzVmFsdWVSZXN1
bHQocmVzdWx0UmVnLCBub2RlKTsKLSNlbmRpZgorICAgICAgICAgICAgYmFzZVJlZywgcHJvcGVy
dHlSZWcsIFRpbWVzRWlnaHQsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZU9mZnNldCgpKSwKKyAg
ICAgICAgcmVzdWx0UmVncyk7CisgICAgCisgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBu
b2RlKTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEFyZ3VtZW50c0xlbmd0
aChOb2RlKiBub2RlKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25TY29w
ZWRBcmd1bWVudHMoTm9kZSogbm9kZSkKIHsKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNl
KHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIFJl
dXNlLCBiYXNlKTsKKyAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhp
cywgbm9kZS0+Y2hpbGQyKCkpOworICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CisjaWYg
VVNFKEpTVkFMVUUzMl82NCkKKyAgICBHUFJUZW1wb3JhcnkgcmVzdWx0VGFnKHRoaXMpOworI2Vu
ZGlmCisgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CisgICAgR1BSVGVtcG9yYXJ5IHNj
cmF0Y2gyKHRoaXMpOwogICAgIAogICAgIEdQUlJlZyBiYXNlUmVnID0gYmFzZS5ncHIoKTsKKyAg
ICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKICAgICBHUFJSZWcgcmVzdWx0
UmVnID0gcmVzdWx0LmdwcigpOworI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgR1BSUmVnIHJl
c3VsdFRhZ1JlZyA9IHJlc3VsdFRhZy5ncHIoKTsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdz
ID0gSlNWYWx1ZVJlZ3MocmVzdWx0VGFnUmVnLCByZXN1bHRSZWcpOworI2Vsc2UKKyAgICBKU1Zh
bHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVzdWx0UmVnKTsKKyNlbmRpZgorICAg
IEdQUlJlZyBzY3JhdGNoUmVnID0gc2NyYXRjaC5ncHIoKTsKKyAgICBHUFJSZWcgc2NyYXRjaDJS
ZWcgPSBzY3JhdGNoMi5ncHIoKTsKICAgICAKICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCiAgICAg
ICAgIHJldHVybjsKICAgICAKLSAgICBBU1NFUlQoQXJyYXlNb2RlKEFycmF5OjpBcmd1bWVudHMp
LmFscmVhZHlDaGVja2VkKG1faml0LmdyYXBoKCksIG5vZGUsIG1fc3RhdGUuZm9yTm9kZShub2Rl
LT5jaGlsZDEoKSkpKTsKKyAgICBBU1NFUlQoQXJyYXlNb2RlKEFycmF5OjpTY29wZWRBcmd1bWVu
dHMpLmFscmVhZHlDaGVja2VkKG1faml0LmdyYXBoKCksIG5vZGUsIG1fc3RhdGUuZm9yTm9kZShu
b2RlLT5jaGlsZDEoKSkpKTsKKyAgICAKKyAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKGJhc2VSZWcsIFNjb3BlZEFyZ3VtZW50czo6b2Zmc2V0T2ZUYWJsZSgpKSwgc2Ny
YXRjaFJlZyk7CisgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNl
UmVnLCBTY29wZWRBcmd1bWVudHM6Om9mZnNldE9mU2NvcGUoKSksIHNjcmF0Y2gyUmVnKTsKICAg
ICAKICAgICBzcGVjdWxhdGlvbkNoZWNrKAogICAgICAgICBFeG90aWNPYmplY3RNb2RlLCBKU1Zh
bHVlU291cmNlKCksIDAsCi0gICAgICAgIG1faml0LmJyYW5jaFRlc3Q4KAotICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhiYXNlUmVnLCBBcmd1bWVudHM6Om9mZnNldE9mT3ZlcnJvZGVMZW5ndGgoKSkpKTsKKyAg
ICAgICAgbV9qaXQuYnJhbmNoMzIoCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWJvdmVP
ckVxdWFsLCBwcm9wZXJ0eVJlZywKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KFNjb3BlZEFyZ3VtZW50c1RhYmxlOjpvZmZzZXRPZkxlbmd0aCgpKSkpOworICAgIAorICAgIG1f
aml0LmxvYWRQdHIoCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hSZWcs
IFNjb3BlZEFyZ3VtZW50c1RhYmxlOjpvZmZzZXRPZkFyZ3VtZW50cygpKSwKKyAgICAgICAgc2Ny
YXRjaFJlZyk7CisgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc2Ny
YXRjaFJlZywgcHJvcGVydHlSZWcsIFRpbWVzRm91ciksIHNjcmF0Y2hSZWcpOworICAgIAorICAg
IHNwZWN1bGF0aW9uQ2hlY2soCisgICAgICAgIEV4b3RpY09iamVjdE1vZGUsIEpTVmFsdWVTb3Vy
Y2UoKSwgMCwKKyAgICAgICAgbV9qaXQuYnJhbmNoMzIoCisgICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6RXF1YWwsIHNjcmF0Y2hSZWcsIFRydXN0ZWRJbW0zMihTY29wZU9mZnNldDo6aW52YWxp
ZE9mZnNldCkpKTsKKyAgICAKKyAgICBtX2ppdC5sb2FkVmFsdWUoCisgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpCYXNlSW5kZXgoCisgICAgICAgICAgICBiYXNlMlJlZywgcHJvcGVydHlSZWcsIFRp
bWVzRWlnaHQsIEpTRW52aXJvbm1lbnRSZWNvcmQ6Om9mZnNldE9mVmFyaWFibGVzKCkpLAorICAg
ICAgICByZXN1bHRSZWdzKTsKICAgICAKLSAgICBtX2ppdC5sb2FkMzIoCi0gICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEFyZ3VtZW50czo6b2Zmc2V0T2ZOdW1Bcmd1bWVu
dHMoKSksCi0gICAgICAgIHJlc3VsdFJlZyk7Ci0gICAgaW50MzJSZXN1bHQocmVzdWx0UmVnLCBu
b2RlKTsKKyAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG5vZGUpOwogfQogCiB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlR2V0U2NvcGUoTm9kZSogbm9kZSkKQEAgLTQyMzIsOCArNDI0
NCw1NiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QXJyYXlMZW5nCiAgICAgICAg
IGludDMyUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAg
ICBjYXNlIEFycmF5OjpBcmd1bWVudHM6IHsKLSAgICAgICAgY29tcGlsZUdldEFyZ3VtZW50c0xl
bmd0aChub2RlKTsKKyAgICBjYXNlIEFycmF5OjpEaXJlY3RBcmd1bWVudHM6IHsKKyAgICAgICAg
U3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAg
IEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgUmV1c2UsIGJhc2UpOworICAgICAgICAKKyAgICAg
ICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdwcigpOworICAgICAgICBHUFJSZWcgcmVzdWx0UmVn
ID0gcmVzdWx0LmdwcigpOworICAgICAgICAKKyAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgQVNTRVJUKEFycmF5TW9kZShB
cnJheTo6RGlyZWN0QXJndW1lbnRzKS5hbHJlYWR5Q2hlY2tlZChtX2ppdC5ncmFwaCgpLCBub2Rl
LCBtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpKSk7CisgICAgICAgIAorICAgICAgICBz
cGVjdWxhdGlvbkNoZWNrKAorICAgICAgICAgICAgRXhvdGljT2JqZWN0TW9kZSwgSlNWYWx1ZVNv
dXJjZSgpLCAwLAorICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdFB0cigKKyAgICAgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhiYXNlUmVnLCBEaXJlY3RBcmd1bWVudHM6Om9mZnNldE9mT3ZlcnJpZGVz
KCkpKSk7CisgICAgICAgIAorICAgICAgICBtX2ppdC5sb2FkMzIoCisgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBEaXJlY3RBcmd1bWVudHM6Om9mZnNldE9mTGVu
Z3RoKCkpLCByZXN1bHRSZWcpOworICAgICAgICAKKyAgICAgICAgaW50MzJSZXN1bHQocmVzdWx0
UmVnLCBub2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgQXJyYXk6OlNjb3Bl
ZEFyZ3VtZW50czogeworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5v
ZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBSZXVzZSwg
YmFzZSk7CisgICAgICAgIAorICAgICAgICBHUFJSZWcgYmFzZVJlZyA9IGJhc2UuZ3ByKCk7Cisg
ICAgICAgIEdQUlJlZyByZXN1bHRSZWcgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIAorICAgICAg
ICBpZiAoIW1fY29tcGlsZU9rYXkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAg
ICAgICBBU1NFUlQoQXJyYXlNb2RlKEFycmF5OjpTY29wZWRBcmd1bWVudHMpLmFscmVhZHlDaGVj
a2VkKG1faml0LmdyYXBoKCksIG5vZGUsIG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSkp
KTsKKyAgICAgICAgCisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCisgICAgICAgICAgICBFeG90
aWNPYmplY3RNb2RlLCBKU1ZhbHVlU291cmNlKCksIDAsCisgICAgICAgICAgICBtX2ppdC5icmFu
Y2hUZXN0OCgKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywKKyAgICAg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBTY29wZWRBcmd1bWVu
dHM6Om9mZnNldE9mT3ZlcnJvZGVUaGluZ3MoKSkpKTsKKyAgICAgICAgCisgICAgICAgIG1faml0
LmxvYWRQdHIoCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBT
Y29wZWRBcmd1bWVudHM6Om9mZnNldE9mVGFibGUoKSksIHJlc3VsdFJlZyk7CisgICAgICAgIAor
ICAgICAgICBtX2ppdC5sb2FkMzIoCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhyZXN1bHRSZWcsIFNjb3BlZEFyZ3VtZW50c1RhYmxlOjpvZmZzZXRPZkxlbmd0aCgpKSwKKyAg
ICAgICAgICAgIHJlc3VsdFJlZyk7CisgICAgICAgIAorICAgICAgICBpbnQzMlJlc3VsdChyZXN1
bHRSZWcsIG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgZGVmYXVsdDogewpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2
aXNpb24gMTgwODc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMTUyLDggKzIxNTIsOSBAQCBwdWJsaWM6CiAgICAg
dm9pZCBjb21waWxlR2V0QnlWYWxPblN0cmluZyhOb2RlKik7CiAgICAgdm9pZCBjb21waWxlRnJv
bUNoYXJDb2RlKE5vZGUqKTsgCiAKLSAgICB2b2lkIGNvbXBpbGVHZXRCeVZhbE9uQXJndW1lbnRz
KE5vZGUqKTsKLSAgICB2b2lkIGNvbXBpbGVHZXRBcmd1bWVudHNMZW5ndGgoTm9kZSopOworICAg
IHZvaWQgY29tcGlsZUdldEJ5VmFsT25EaXJlY3RBcmd1bWVudHMoTm9kZSopOworICAgIHZvaWQg
Y29tcGlsZUdldEJ5VmFsT25TY29wZWRBcmd1bWVudHMoTm9kZSopOworICAgIAogICAgIHZvaWQg
Y29tcGlsZUdldFNjb3BlKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVTa2lwU2NvcGUoTm9kZSop
OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0YWNrTGF5b3V0UGhhc2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RhY2tMYXlv
dXRQaGFzZS5jcHAJKHJldmlzaW9uIDE4MDg3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3RhY2tMYXlvdXRQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNCwxNyArMTE0
LDYgQEAgcHVibGljOgogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIAotICAgICAg
ICAvLyBFbnN1cmUgdGhhdCBjYXB0dXJlZCB2YXJpYWJsZXMgYW5kIGNhcHR1cmVkIGlubGluZSBh
cmd1bWVudHMgYXJlIHBpbm5lZCBkb3duLgotICAgICAgICAvLyBUaGV5IHNob3VsZCBoYXZlIGJl
ZW4gYmVjYXVzZSBvZiBmbHVzaGVzLCBleGNlcHQgdGhhdCB0aGUgZmx1c2hlcyBjYW4gYmUgb3B0
aW1pemVkCi0gICAgICAgIC8vIGF3YXkuCi0gICAgICAgIGlmIChzeW1ib2xUYWJsZSkgewotICAg
ICAgICAgICAgZm9yIChpbnQgaSA9IHN5bWJvbFRhYmxlLT5jYXB0dXJlU3RhcnQoKTsgaSA+IHN5
bWJvbFRhYmxlLT5jYXB0dXJlRW5kKCk7IGktLSkKLSAgICAgICAgICAgICAgICB1c2VkTG9jYWxz
LnNldChWaXJ0dWFsUmVnaXN0ZXIoaSkudG9Mb2NhbCgpKTsKLSAgICAgICAgfQotICAgICAgICBp
ZiAoY29kZUJsb2NrKCktPnVzZXNBcmd1bWVudHMoKSkgewotICAgICAgICAgICAgdXNlZExvY2Fs
cy5zZXQoY29kZUJsb2NrKCktPmFyZ3VtZW50c1JlZ2lzdGVyKCkudG9Mb2NhbCgpKTsKLSAgICAg
ICAgICAgIHVzZWRMb2NhbHMuc2V0KHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3Rlcihjb2RlQmxv
Y2soKS0+YXJndW1lbnRzUmVnaXN0ZXIoKSkudG9Mb2NhbCgpKTsKLSAgICAgICAgfQogICAgICAg
ICBpZiAoY29kZUJsb2NrKCktPnVuY2hlY2tlZEFjdGl2YXRpb25SZWdpc3RlcigpLmlzVmFsaWQo
KSkKICAgICAgICAgICAgIHVzZWRMb2NhbHMuc2V0KGNvZGVCbG9jaygpLT5hY3RpdmF0aW9uUmVn
aXN0ZXIoKS50b0xvY2FsKCkpOwogICAgICAgICBmb3IgKElubGluZUNhbGxGcmFtZVNldDo6aXRl
cmF0b3IgaXRlciA9IG1fZ3JhcGgubV9wbGFuLmlubGluZUNhbGxGcmFtZXMtPmJlZ2luKCk7ICEh
aXRlcjsgKytpdGVyKSB7CkBAIC0yNjEsMjAgKzI1MCw2IEBAIHB1YmxpYzoKICAgICAgICAgICAg
ICAgICBtX2dyYXBoLm1fbWFjaGluZUNhcHR1cmVTdGFydCA9IHZpcnR1YWxSZWdpc3RlckZvckxv
Y2FsKGNhcHR1cmVTdGFydExvY2FsKS5vZmZzZXQoKTsKICAgICAgICAgICAgIH0gZWxzZQogICAg
ICAgICAgICAgICAgIG1fZ3JhcGgubV9tYWNoaW5lQ2FwdHVyZVN0YXJ0ID0gdmlydHVhbFJlZ2lz
dGVyRm9yTG9jYWwoMCkub2Zmc2V0KCk7Ci0gICAgICAgIAotICAgICAgICAgICAgLy8gVGhpcyBp
cyBhbiBhYm9taW5hdGlvbi4gSWYgd2UgaGFkIGNhcHR1cmVkIGFuIGFyZ3VtZW50IHRoZW4gdGhl
IGFyZ3VtZW50IGVuZHMKLSAgICAgICAgICAgIC8vIHVwIGJlaW5nICJzbG93IiwgbWVhbmluZyB0
aGF0IGxvYWRzIG9mIHRoZSBhcmd1bWVudCBnbyB0aHJvdWdoIGFuIGV4dHJhIGxvb2t1cAotICAg
ICAgICAgICAgLy8gdGFibGUuCi0gICAgICAgICAgICBpZiAoY29uc3QgU2xvd0FyZ3VtZW50KiBz
bG93QXJndW1lbnRzID0gc3ltYm9sVGFibGUtPnNsb3dBcmd1bWVudHMoKSkgewotICAgICAgICAg
ICAgICAgIGF1dG8gbmV3U2xvd0FyZ3VtZW50cyA9IHN0ZDo6bWFrZV91bmlxdWU8U2xvd0FyZ3Vt
ZW50W10+KAotICAgICAgICAgICAgICAgICAgICBzeW1ib2xUYWJsZS0+cGFyYW1ldGVyQ291bnQo
KSk7Ci0gICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IHN5bWJvbFRhYmxlLT5wYXJhbWV0
ZXJDb3VudCgpOyBpLS07KSB7Ci0gICAgICAgICAgICAgICAgICAgIG5ld1Nsb3dBcmd1bWVudHNb
aV0gPSBzbG93QXJndW1lbnRzW2ldOwotICAgICAgICAgICAgICAgICAgICBuZXdTbG93QXJndW1l
bnRzW2ldLmluZGV4ID0gYXNzaWduKGFsbG9jYXRpb24sIFZpcnR1YWxSZWdpc3RlcihzbG93QXJn
dW1lbnRzW2ldLmluZGV4KSkub2Zmc2V0KCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgCi0gICAgICAgICAgICAgICAgbV9ncmFwaC5tX3Nsb3dBcmd1bWVudHMgPSBXVEY6Om1vdmUo
bmV3U2xvd0FyZ3VtZW50cyk7Ci0gICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgCiAg
ICAgICAgIC8vIEZpeCBHZXRMb2NhbFVubGlua2VkJ3MgdmFyaWFibGUgcmVmZXJlbmNlcy4KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVW5pZmljYXRpb25QaGFzZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdVbmlmaWNhdGlvblBoYXNl
LmNwcAkocmV2aXNpb24gMTgwODc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdV
bmlmaWNhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzAsNyArNzAsNiBAQCBwdWJs
aWM6CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2dyYXBoLm1fdmFyaWFibGVB
Y2Nlc3NEYXRhLnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEq
IGRhdGEgPSAmbV9ncmFwaC5tX3ZhcmlhYmxlQWNjZXNzRGF0YVtpXTsKICAgICAgICAgICAgIGRh
dGEtPmZpbmQoKS0+cHJlZGljdChkYXRhLT5ub25VbmlmaWVkUHJlZGljdGlvbigpKTsKLSAgICAg
ICAgICAgIGRhdGEtPmZpbmQoKS0+bWVyZ2VJc0NhcHR1cmVkKGRhdGEtPmlzQ2FwdHVyZWQoKSk7
CiAgICAgICAgICAgICBkYXRhLT5maW5kKCktPm1lcmdlU3RydWN0dXJlQ2hlY2tIb2lzdGluZ0Zh
aWxlZChkYXRhLT5zdHJ1Y3R1cmVDaGVja0hvaXN0aW5nRmFpbGVkKCkpOwogICAgICAgICAgICAg
ZGF0YS0+ZmluZCgpLT5tZXJnZUNoZWNrQXJyYXlIb2lzdGluZ0ZhaWxlZChkYXRhLT5jaGVja0Fy
cmF5SG9pc3RpbmdGYWlsZWQoKSk7CiAgICAgICAgICAgICBkYXRhLT5maW5kKCktPm1lcmdlU2hv
dWxkTmV2ZXJVbmJveChkYXRhLT5zaG91bGROZXZlclVuYm94KCkpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAJKHJldmlzaW9uIDE4MDg3NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00NTUsOCArNDU1LDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgICAgICAgICAgICAg
Y2FzZSBHZXRMb2NhbDoKLSAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPnZhcmlhYmxlQWNj
ZXNzRGF0YSgpLT5pc0NhcHR1cmVkKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgICAgICAgLy8gSWdub3JlIEdldExvY2FsJ3MgdGhhdCB3ZSBrbm93IHRv
IGJlIGRlYWQsIGJ1dCB0aGF0IHRoZSBncmFwaAogICAgICAgICAgICAgICAgICAgICAvLyBkb2Vz
bid0IHlldCBrbm93IHRvIGJlIGRlYWQuCiAgICAgICAgICAgICAgICAgICAgIGlmICghbV9teVJl
ZkNvdW50cy5nZXQobm9kZSkpCkBAIC00NjYsOCArNDY0LDYgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgICAgICAgICAgZ2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChub2RlLT5sb2NhbCgpKSA9IGk7
CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGNhc2UgU2V0TG9j
YWw6Ci0gICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+
aXNDYXB0dXJlZCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgICAgICAgIC8vIE9ubHkgcmVjb3JkIHRoZSBmaXJzdCBTZXRMb2NhbC4gVGhlcmUgbWF5IGJl
IG11bHRpcGxlIFNldExvY2FscwogICAgICAgICAgICAgICAgICAgICAvLyBiZWNhdXNlIG9mIGZs
dXNoaW5nLgogICAgICAgICAgICAgICAgICAgICBpZiAoc2V0TG9jYWxQb3NpdGlvbnMub3BlcmFu
ZChub2RlLT5sb2NhbCgpKSAhPSBub3RTZXQpCkBAIC00NzUsOCArNDcxLDYgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgICAgICAgICAgc2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChub2RlLT5sb2Nh
bCgpKSA9IGk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGNh
c2UgU2V0QXJndW1lbnQ6Ci0gICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT52YXJpYWJsZUFj
Y2Vzc0RhdGEoKS0+aXNDYXB0dXJlZCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgYWN0cyBsaWtlIGEgcmVzZXQuIEl0J3Mgb2sg
dG8gaGF2ZSBhIHNlY29uZCBHZXRMb2NhbCBmb3IgYSBsb2NhbCBpbiB0aGUgc2FtZQogICAgICAg
ICAgICAgICAgICAgICAvLyBibG9jayBpZiB3ZSBoYWQgYSBTZXRBcmd1bWVudCBmb3IgdGhhdCBs
b2NhbC4KICAgICAgICAgICAgICAgICAgICAgZ2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChub2Rl
LT5sb2NhbCgpKSA9IG5vdFNldDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
VmFyaWFibGVBY2Nlc3NEYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5jcHAJKHJldmlzaW9uIDE4MDg3NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMzUsNyArMzUsNiBAQCBWYXJpYWJsZUFjY2Vzc0RhdGE6OlZhcmlhYmxlQWNjZXNz
RGF0YSgpCiAgICAgLCBtX3ByZWRpY3Rpb24oU3BlY05vbmUpCiAgICAgLCBtX2FyZ3VtZW50QXdh
cmVQcmVkaWN0aW9uKFNwZWNOb25lKQogICAgICwgbV9mbGFncygwKQotICAgICwgbV9pc0NhcHR1
cmVkKGZhbHNlKQogICAgICwgbV9zaG91bGROZXZlclVuYm94KGZhbHNlKQogICAgICwgbV9pc0Fy
Z3VtZW50c0FsaWFzKGZhbHNlKQogICAgICwgbV9zdHJ1Y3R1cmVDaGVja0hvaXN0aW5nRmFpbGVk
KGZhbHNlKQpAQCAtNDcsMTMgKzQ2LDEyIEBAIFZhcmlhYmxlQWNjZXNzRGF0YTo6VmFyaWFibGVB
Y2Nlc3NEYXRhKCkKICAgICBjbGVhclZvdGVzKCk7CiB9CiAKLVZhcmlhYmxlQWNjZXNzRGF0YTo6
VmFyaWFibGVBY2Nlc3NEYXRhKFZpcnR1YWxSZWdpc3RlciBsb2NhbCwgYm9vbCBpc0NhcHR1cmVk
KQorVmFyaWFibGVBY2Nlc3NEYXRhOjpWYXJpYWJsZUFjY2Vzc0RhdGEoVmlydHVhbFJlZ2lzdGVy
IGxvY2FsKQogICAgIDogbV9sb2NhbChsb2NhbCkKICAgICAsIG1fcHJlZGljdGlvbihTcGVjTm9u
ZSkKICAgICAsIG1fYXJndW1lbnRBd2FyZVByZWRpY3Rpb24oU3BlY05vbmUpCiAgICAgLCBtX2Zs
YWdzKDApCi0gICAgLCBtX2lzQ2FwdHVyZWQoaXNDYXB0dXJlZCkKLSAgICAsIG1fc2hvdWxkTmV2
ZXJVbmJveChpc0NhcHR1cmVkKQorICAgICwgbV9zaG91bGROZXZlclVuYm94KGZhbHNlKQogICAg
ICwgbV9pc0FyZ3VtZW50c0FsaWFzKGZhbHNlKQogICAgICwgbV9zdHJ1Y3R1cmVDaGVja0hvaXN0
aW5nRmFpbGVkKGZhbHNlKQogICAgICwgbV9jaGVja0FycmF5SG9pc3RpbmdGYWlsZWQoZmFsc2Up
CkBAIC02NCwxMiArNjIsNiBAQCBWYXJpYWJsZUFjY2Vzc0RhdGE6OlZhcmlhYmxlQWNjZXNzRGF0
YShWCiAgICAgY2xlYXJWb3RlcygpOwogfQogCi1ib29sIFZhcmlhYmxlQWNjZXNzRGF0YTo6bWVy
Z2VJc0NhcHR1cmVkKGJvb2wgaXNDYXB0dXJlZCkKLXsKLSAgICByZXR1cm4gY2hlY2tBbmRTZXQo
bV9zaG91bGROZXZlclVuYm94LCBtX3Nob3VsZE5ldmVyVW5ib3ggfHwgaXNDYXB0dXJlZCkKLSAg
ICAgICAgfCBjaGVja0FuZFNldChtX2lzQ2FwdHVyZWQsIG1faXNDYXB0dXJlZCB8fCBpc0NhcHR1
cmVkKTsKLX0KLQogYm9vbCBWYXJpYWJsZUFjY2Vzc0RhdGE6Om1lcmdlU2hvdWxkTmV2ZXJVbmJv
eChib29sIHNob3VsZE5ldmVyVW5ib3gpCiB7CiAgICAgYm9vbCBuZXdTaG91bGROZXZlclVuYm94
ID0gbV9zaG91bGROZXZlclVuYm94IHwgc2hvdWxkTmV2ZXJVbmJveDsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaAkocmV2aXNp
b24gMTgwODc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUFjY2Vz
c0RhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTEtMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTEtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ4LDcgKzQ4LDcgQEAgZW51bSBEb3VibGVCYWxs
b3QgeyBWb3RlVmFsdWUsIFZvdGVEb3VibAogY2xhc3MgVmFyaWFibGVBY2Nlc3NEYXRhIDogcHVi
bGljIFVuaW9uRmluZDxWYXJpYWJsZUFjY2Vzc0RhdGE+IHsKIHB1YmxpYzoKICAgICBWYXJpYWJs
ZUFjY2Vzc0RhdGEoKTsKLSAgICBWYXJpYWJsZUFjY2Vzc0RhdGEoVmlydHVhbFJlZ2lzdGVyIGxv
Y2FsLCBib29sIGlzQ2FwdHVyZWQpOworICAgIFZhcmlhYmxlQWNjZXNzRGF0YShWaXJ0dWFsUmVn
aXN0ZXIgbG9jYWwpOwogICAgIAogICAgIFZpcnR1YWxSZWdpc3RlciBsb2NhbCgpCiAgICAgewpA
QCAtNjIsMTMgKzYyLDYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9tYWNoaW5lTG9jYWw7
CiAgICAgfQogCi0gICAgYm9vbCBtZXJnZUlzQ2FwdHVyZWQoYm9vbCBpc0NhcHR1cmVkKTsKLSAg
ICAKLSAgICBib29sIGlzQ2FwdHVyZWQoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1faXNDYXB0
dXJlZDsKLSAgICB9Ci0gICAgCiAgICAgYm9vbCBtZXJnZUlzUHJvZml0YWJsZVRvVW5ib3goYm9v
bCBpc1Byb2ZpdGFibGVUb1VuYm94KQogICAgIHsKICAgICAgICAgcmV0dXJuIGNoZWNrQW5kU2V0
KG1faXNQcm9maXRhYmxlVG9VbmJveCwgbV9pc1Byb2ZpdGFibGVUb1VuYm94IHx8IGlzUHJvZml0
YWJsZVRvVW5ib3gpOwpAQCAtODYsNyArNzksNiBAQCBwdWJsaWM6CiAgICAgLy8gbWVhbiB0aGF0
IHdlIGhhdmUgYWN0dWFsbHkgZG9uZSBzby4KICAgICBib29sIHNob3VsZE5ldmVyVW5ib3goKQog
ICAgIHsKLSAgICAgICAgQVNTRVJUKCEobV9pc0NhcHR1cmVkICYmICFtX3Nob3VsZE5ldmVyVW5i
b3gpKTsKICAgICAgICAgcmV0dXJuIG1fc2hvdWxkTmV2ZXJVbmJveDsKICAgICB9CiAgICAgCkBA
IC0xOTMsNyArMTg1LDYgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQoaXNSb290KCkpOwogICAg
ICAgICBib29sIGRvdWJsZVN0YXRlID0gbV9kb3VibGVGb3JtYXRTdGF0ZSA9PSBVc2luZ0RvdWJs
ZUZvcm1hdDsKICAgICAgICAgQVNTRVJUKCEoZG91YmxlU3RhdGUgJiYgc2hvdWxkTmV2ZXJVbmJv
eCgpKSk7Ci0gICAgICAgIEFTU0VSVCghKGRvdWJsZVN0YXRlICYmIGlzQ2FwdHVyZWQoKSkpOwog
ICAgICAgICByZXR1cm4gZG91YmxlU3RhdGUgJiYgaXNQcm9maXRhYmxlVG9VbmJveCgpOwogICAg
IH0KICAgICAKQEAgLTIzMyw3ICsyMjQsNiBAQCBwcml2YXRlOgogICAgIFNwZWN1bGF0ZWRUeXBl
IG1fYXJndW1lbnRBd2FyZVByZWRpY3Rpb247CiAgICAgTm9kZUZsYWdzIG1fZmxhZ3M7CiAKLSAg
ICBib29sIG1faXNDYXB0dXJlZDsKICAgICBib29sIG1fc2hvdWxkTmV2ZXJVbmJveDsKICAgICBi
b29sIG1faXNBcmd1bWVudHNBbGlhczsKICAgICBib29sIG1fc3RydWN0dXJlQ2hlY2tIb2lzdGlu
Z0ZhaWxlZDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVBY2Nl
c3NEYXRhRHVtcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmNwcAkocmV2aXNpb24gMTgwODc1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNjIsOSArNjIsNyBAQCB2b2lkIFZhcmlhYmxlQWNjZXNzRGF0YUR1bXA6OmR1
bXAoUHJpbnRTCiAgICAgICAgIGluZGV4IC89IDI2OwogICAgIH0KICAgICAKLSAgICBpZiAobV9k
YXRhLT5pc0NhcHR1cmVkKCkpCi0gICAgICAgIG91dC5wcmludCgiKiIpOwotICAgIGVsc2UgaWYg
KG1fZGF0YS0+c2hvdWxkTmV2ZXJVbmJveCgpKQorICAgIGlmIChtX2RhdGEtPnNob3VsZE5ldmVy
VW5ib3goKSkKICAgICAgICAgb3V0LnByaW50KCIhIik7CiAgICAgZWxzZSBpZiAoIW1fZGF0YS0+
c2hvdWxkVW5ib3hJZlBvc3NpYmxlKCkpCiAgICAgICAgIG91dC5wcmludCgifiIpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUFjY2Vzc0Rh
dGFEdW1wLmgJKHJldmlzaW9uIDE4MDg3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuaAko
cmV2aXNpb24gMTgwODc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFj
dEhlYXBSZXBvc2l0b3J5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDYsNiArNDYsOCBAQCBuYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAgICAgbWFjcm8oQnV0dGVyZmx5X3B1YmxpY0xl
bmd0aCwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSBcCiAgICAgbWFjcm8oQnV0
dGVyZmx5X3ZlY3Rvckxlbmd0aCwgQnV0dGVyZmx5OjpvZmZzZXRPZlZlY3Rvckxlbmd0aCgpKSBc
CiAgICAgbWFjcm8oQ2FsbEZyYW1lX2NhbGxlckZyYW1lLCBDYWxsRnJhbWU6OmNhbGxlckZyYW1l
T2Zmc2V0KCkpIFwKKyAgICBtYWNybyhEaXJlY3RBcmd1bWVudHNfbGVuZ3RoLCBEaXJlY3RBcmd1
bWVudHM6Om9mZnNldE9mTGVuZ3RoKCkpIFwKKyAgICBtYWNybyhEaXJlY3RBcmd1bWVudHNfb3Zl
cnJpZGVzLCBEaXJlY3RBcmd1bWVudHM6Om9mZnNldE9mT3ZlcnJpZGVzKCkpIFwKICAgICBtYWNy
byhHZXR0ZXJTZXR0ZXJfZ2V0dGVyLCBHZXR0ZXJTZXR0ZXI6Om9mZnNldE9mR2V0dGVyKCkpIFwK
ICAgICBtYWNybyhHZXR0ZXJTZXR0ZXJfc2V0dGVyLCBHZXR0ZXJTZXR0ZXI6Om9mZnNldE9mU2V0
dGVyKCkpIFwKICAgICBtYWNybyhKU0FycmF5QnVmZmVyVmlld19sZW5ndGgsIEpTQXJyYXlCdWZm
ZXJWaWV3OjpvZmZzZXRPZkxlbmd0aCgpKSBcCkBAIC03Miw2ICs3NCwxMSBAQCBuYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAgICAgbWFjcm8oSlNXcmFwcGVyT2JqZWN0X2ludGVybmFs
VmFsdWUsIEpTV3JhcHBlck9iamVjdDo6aW50ZXJuYWxWYWx1ZU9mZnNldCgpKSBcCiAgICAgbWFj
cm8oTWFya2VkQWxsb2NhdG9yX2ZyZWVMaXN0SGVhZCwgTWFya2VkQWxsb2NhdG9yOjpvZmZzZXRP
ZkZyZWVMaXN0SGVhZCgpKSBcCiAgICAgbWFjcm8oTWFya2VkQmxvY2tfbWFya0JpdHMsIE1hcmtl
ZEJsb2NrOjpvZmZzZXRPZk1hcmtzKCkpIFwKKyAgICBtYWNybyhTY29wZWRBcmd1bWVudHNfb3Zl
cnJvZGVUaGluZ3MsIFNjb3BlZEFyZ3VtZW50czo6b2Zmc2V0T2ZPdmVycm9kZVRoaW5ncygpKSkg
XAorICAgIG1hY3JvKFNjb3BlZEFyZ3VtZW50c19zY29wZSwgU2NvcGVkQXJndW1lbnRzOjpvZmZl
dE9mU2NvcGUoKSkpIFwKKyAgICBtYWNybyhTY29wZWRBcmd1bWVudHNfdGFibGUsIFNjb3BlZEFy
Z3VtZW50czo6b2ZmZXRPZlRhYmxlKCkpKSBcCisgICAgbWFjcm8oU2NvcGVkQXJndW1lbnRzVGFi
bGVfYXJndW1lbnRzLCBTY29wZWRBcmd1bWVudHNUYWJsZTo6b2ZmZXRPZkFyZ3VtZW50cygpKSkg
XAorICAgIG1hY3JvKFNjb3BlZEFyZ3VtZW50c1RhYmxlX2xlbmd0aCwgU2NvcGVkQXJndW1lbnRz
VGFibGU6Om9mZmV0T2ZMZW5ndGgoKSkpIFwKICAgICBtYWNybyhTdHJpbmdJbXBsX2RhdGEsIFN0
cmluZ0ltcGw6OmRhdGFPZmZzZXQoKSkgXAogICAgIG1hY3JvKFN0cmluZ0ltcGxfaGFzaEFuZEZs
YWdzLCBTdHJpbmdJbXBsOjpmbGFnc09mZnNldCgpKSBcCiAgICAgbWFjcm8oU3RydWN0dXJlX2Ns
YXNzSW5mbywgU3RydWN0dXJlOjpjbGFzc0luZm9PZmZzZXQoKSkgXApAQCAtODAsNiArODcsOCBA
QCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAgICAgbWFjcm8oU3RydWN0dXJlX3N0
cnVjdHVyZUlELCBTdHJ1Y3R1cmU6OnN0cnVjdHVyZUlET2Zmc2V0KCkpCiAKICNkZWZpbmUgRk9S
X0VBQ0hfSU5ERVhFRF9BQlNUUkFDVF9IRUFQKG1hY3JvKSBcCisgICAgbWFjcm8oRGlyZWN0QXJn
dW1lbnRzX3N0b3JhZ2UsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZU9mZnNldCgpLCBzaXplb2Yo
RW5jb2RlZEpTVmFsdWUpKSBcCisgICAgbWFjcm8oSlNFbnZpcm9ubWVudFJlY29yZF92YXJpYWJs
ZSwgSlNFbnZpcm9ubWVudFJlY29yZDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSwgc2l6ZW9mKEVuY29k
ZWRKU1ZhbHVlKSkgXAogICAgIG1hY3JvKEpTUm9wZVN0cmluZ19maWJlcnMsIEpTUm9wZVN0cmlu
Zzo6b2Zmc2V0T2ZGaWJlcnMoKSwgc2l6ZW9mKFdyaXRlQmFycmllcjxKU1N0cmluZz4pKSBcCiAg
ICAgbWFjcm8oY2hhcmFjdGVyczgsIDAsIHNpemVvZihMQ2hhcikpIFwKICAgICBtYWNybyhjaGFy
YWN0ZXJzMTYsIDAsIHNpemVvZihVQ2hhcikpIFwKQEAgLTg3LDYgKzk2LDcgQEAgbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBGVEwgewogICAgIG1hY3JvKGluZGV4ZWREb3VibGVQcm9wZXJ0aWVz
LCAwLCBzaXplb2YoZG91YmxlKSkgXAogICAgIG1hY3JvKGluZGV4ZWRDb250aWd1b3VzUHJvcGVy
dGllcywgMCwgc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkgXAogICAgIG1hY3JvKGluZGV4ZWRBcnJh
eVN0b3JhZ2VQcm9wZXJ0aWVzLCAwLCBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSBcCisgICAgbWFj
cm8oc2NvcGVkQXJndWVtbnRzVGFibGVBcmd1bWVudHMsIDAsIHNpemVvZihpbnQzMl90KSkgXAog
ICAgIG1hY3JvKHNpbmdsZUNoYXJhY3RlclN0cmluZ3MsIDAsIHNpemVvZihKU1N0cmluZyopKSBc
CiAgICAgbWFjcm8odmFyaWFibGVzLCAwLCBzaXplb2YoUmVnaXN0ZXIpKQogICAgIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAkocmV2aXNp
b24gMTgwODc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDksNiArMjA5LDggQEAgaW5saW5lIENhcGFiaWxpdHlM
ZXZlbCBjYW5Db21waWxlKE5vZGUqIAogICAgICAgICBjYXNlIEFycmF5OjpJbnQzMjoKICAgICAg
ICAgY2FzZSBBcnJheTo6RG91YmxlOgogICAgICAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOgor
ICAgICAgICBjYXNlIEFycmF5OjpEaXJlY3RBcmd1bWVudHM6CisgICAgICAgIGNhc2UgQXJyYXk6
OlNjb3BlZEFyZ3VtZW50czoKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0Ogog
ICAgICAgICAgICAgaWYgKGlzVHlwZWRWaWV3KG5vZGUtPmFycmF5TW9kZSgpLnR5cGVkQXJyYXlU
eXBlKCkpKQpAQCAtMjIyLDYgKzIyNCw4IEBAIGlubGluZSBDYXBhYmlsaXR5TGV2ZWwgY2FuQ29t
cGlsZShOb2RlKiAKICAgICAgICAgY2FzZSBBcnJheTo6RG91YmxlOgogICAgICAgICBjYXNlIEFy
cmF5OjpDb250aWd1b3VzOgogICAgICAgICBjYXNlIEFycmF5OjpTdHJpbmc6CisgICAgICAgIGNh
c2UgQXJyYXk6OkRpcmVjdEFyZ3VtZW50czoKKyAgICAgICAgY2FzZSBBcnJheTo6U2NvcGVkQXJn
dW1lbnRzOgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAg
ICBpZiAoaXNUeXBlZFZpZXcobm9kZS0+YXJyYXlNb2RlKCkudHlwZWRBcnJheVR5cGUoKSkpCkBA
IC0yNDgsNiArMjUyLDggQEAgaW5saW5lIENhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxlKE5vZGUq
IAogICAgICAgICBjYXNlIEFycmF5OjpJbnQzMjoKICAgICAgICAgY2FzZSBBcnJheTo6RG91Ymxl
OgogICAgICAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOgorICAgICAgICBjYXNlIEFycmF5OjpE
aXJlY3RBcmd1bWVudHM6CisgICAgICAgIGNhc2UgQXJyYXk6OlNjb3BlZEFyZ3VtZW50czoKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgaWYgKGlzVHlw
ZWRWaWV3KG5vZGUtPmFycmF5TW9kZSgpLnR5cGVkQXJyYXlUeXBlKCkpKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCShyZXZpc2lvbiAxODA4NzUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMDMsMTEgKzMwMyw2IEBAIHN0YXRpYyB2b2lkIGZpeEZ1bmN0aW9uQmFzZWRPblN0YWNrTWFw
cygKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBncmFwaC5tX2lubGluZVZhcmlhYmxlRGF0YS5zaXpl
KCk7IGktLTspIHsKICAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBn
cmFwaC5tX2lubGluZVZhcmlhYmxlRGF0YVtpXS5pbmxpbmVDYWxsRnJhbWU7CiAgICAgICAgIAot
ICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHNSZWdpc3Rlci5pc1ZhbGlkKCkp
IHsKLSAgICAgICAgICAgIGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzUmVnaXN0ZXIgPSBWaXJ0
dWFsUmVnaXN0ZXIoCi0gICAgICAgICAgICAgICAgaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHNS
ZWdpc3Rlci5vZmZzZXQoKSArIGxvY2Fsc09mZnNldCk7Ci0gICAgICAgIH0KLSAgICAgICAgCiAg
ICAgICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQgPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50
cy5zaXplKCk7IGFyZ3VtZW50LS0gPiAxOykgewogICAgICAgICAgICAgaW5saW5lQ2FsbEZyYW1l
LT5hcmd1bWVudHNbYXJndW1lbnRdID0KICAgICAgICAgICAgICAgICBpbmxpbmVDYWxsRnJhbWUt
PmFyZ3VtZW50c1thcmd1bWVudF0ud2l0aExvY2Fsc09mZnNldChsb2NhbHNPZmZzZXQpOwpAQCAt
MzE5LDExICszMTQsNiBAQCBzdGF0aWMgdm9pZCBmaXhGdW5jdGlvbkJhc2VkT25TdGFja01hcHMo
CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgaWYgKGNvZGVCbG9jay0+dXNlc0FyZ3VtZW50
cygpKSB7Ci0gICAgICAgIGNvZGVCbG9jay0+c2V0QXJndW1lbnRzUmVnaXN0ZXIoCi0gICAgICAg
ICAgICBWaXJ0dWFsUmVnaXN0ZXIoY29kZUJsb2NrLT5hcmd1bWVudHNSZWdpc3RlcigpLm9mZnNl
dCgpICsgbG9jYWxzT2Zmc2V0KSk7Ci0gICAgfQotCiAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVs
IHN0YWNrT3ZlcmZsb3dFeGNlcHRpb247CiAKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkocmV2aXNpb24gMTgwODc1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIxOTUsNiArMjE5NSwyNSBAQCBwcml2YXRlOgogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9CiAgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBBcnJheTo6RGlyZWN0
QXJndW1lbnRzOiB7CisgICAgICAgICAgICBMVmFsdWUgYXJndW1lbnRzID0gbG93Q2VsbChtX291
dC0+Y2hpbGQxKCkpOworICAgICAgICAgICAgc3BlY3VsYXRlKAorICAgICAgICAgICAgICAgIEV4
b3RpY09iamVjdE1vZGUsIG5vVmFsdWUoKSwgbnVsbHB0ciwKKyAgICAgICAgICAgICAgICBtX291
dC5ub3ROdWxsKG1fb3V0LmxvYWRQdHIoYXJndW1lbnRzLCBtX2hlYXBzLkRpcmVjdEFyZ3VtZW50
c19vdmVycmlkZXMpKSk7CisgICAgICAgICAgICBzZXRJbnQzMihtX291dC5sb2FkMzJOb25OZWdh
dGl2ZShhcmd1bWVudHMsIG1faGVhcHMuRGlyZWN0QXJndW1lbnRzX2xlbmd0aCkpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBBcnJh
eTo6U2NvcGVkQXJndW1lbnRzOiB7CisgICAgICAgICAgICBMVmFsdWUgYXJndW1lbnRzID0gbG93
Q2VsbChtX291dC0+Y2hpbGQxKCkpOworICAgICAgICAgICAgc3BlY3VsYXRlKAorICAgICAgICAg
ICAgICAgIEV4b3RpY09iamVjdE1vZGUsIG5vVmFsdWUoKSwgbnVsbHB0ciwKKyAgICAgICAgICAg
ICAgICBtX291dC5ub3RaZXJvOChtX291dC5sb2FkUHRyKGFyZ3VtZW50cywgbV9oZWFwcy5TY29w
ZWRBcmd1bWVudHNfb3ZlcnJvZGVUaGluZ3MpKSk7CisgICAgICAgICAgICBMVmFsdWUgdGFibGUg
PSBtX291dC5sb2FkUHRyKGFyZ3VtZW50cywgbV9oZWFwcy5TY29wZWRBcmd1bWVudHNfdGFibGUp
OworICAgICAgICAgICAgc2V0SW50MzIobV9vdXQubG9hZDMyTm9uTmVnYXRpdmUodGFibGUsIG1f
aGVhcHMuU2NvcGVkQXJndW1lbnRzVGFibGVfbGVuZ3RoKSk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICAgICAgICAgIAogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAg
aWYgKGlzVHlwZWRWaWV3KG1fbm9kZS0+YXJyYXlNb2RlKCkudHlwZWRBcnJheVR5cGUoKSkpIHsK
ICAgICAgICAgICAgICAgICBzZXRJbnQzMigKQEAgLTIzMTIsNiArMjMzMSw0OSBAQCBwcml2YXRl
OgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgICAgICAKKyAgICAgICAg
Y2FzZSBBcnJheTo6RGlyZWN0QXJndW1lbnRzOiB7CisgICAgICAgICAgICBMVmFsdWUgYmFzZSA9
IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBMVmFsdWUgaW5kZXggPSBs
b3dJbnQzMihtX25vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgc3Bl
Y3VsYXRlKAorICAgICAgICAgICAgICAgIEV4b3RpY09iamVjdE1vZGUsIG5vVmFsdWUoKSwgbnVs
bHB0ciwKKyAgICAgICAgICAgICAgICBtX291dC5ub25OdWxsKG1fb3V0LmxvYWRQdHIoYmFzZSwg
bV9oZWFwcy5EaXJlY3RBcmd1bWVudHNfb3ZlcnJpZGVzKSkpOworICAgICAgICAgICAgc3BlY3Vs
YXRlKAorICAgICAgICAgICAgICAgIEV4b3RpY09iamVjdE1vZGUsIG5vVmFsdWUoKSwgbnVsbHB0
ciwKKyAgICAgICAgICAgICAgICBtX291dC5hYm92ZU9yRXF1YWwoCisgICAgICAgICAgICAgICAg
ICAgIGluZGV4LAorICAgICAgICAgICAgICAgICAgICBtX291dC5sb2FkMzJOb25OZWdhdGl2ZShi
YXNlLCBtX2hlYXBzLkRpcmVjdEFyZ3VtZW50c19sZW5ndGgpKSk7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIHNldEpTVmFsdWUobV9vdXQubG9hZDY0KGJhc2VJbmRleChtX2hlYXBzLkRpcmVj
dEFyZ3VtZW50c19zdG9yYWdlLCBiYXNlLCBpbmRleCkpKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXJyYXk6OlNjb3BlZEFyZ3Vt
ZW50czogeworICAgICAgICAgICAgTFZhbHVlIGJhc2UgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQx
KCkpOworICAgICAgICAgICAgTFZhbHVlIGluZGV4ID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDIo
KSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIExWYWx1ZSB0YWJsZSA9IG1fb3V0LmxvYWRQ
dHIoYmFzZSwgbV9oZWFwcy5TY29wZWRBcmd1bWVudHNfdGFibGUpOworICAgICAgICAgICAgTFZh
bHVlIHNjb3BlID0gbV9vdXQubG9hZFB0cihiYXNlLCBtX2hlYXBzLlNjb3BlZEFyZ3VtZW50c19z
Y29wZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHNwZWN1bGF0ZSgKKyAgICAgICAgICAg
ICAgICBFeG90aWNPYmplY3RNb2RlLCBub1ZhbHVlKCksIG51bGxwdHIsCisgICAgICAgICAgICAg
ICAgbV9vdXQuYWJvdmVPckVxdWFsKAorICAgICAgICAgICAgICAgICAgICBpbmRleCwKKyAgICAg
ICAgICAgICAgICAgICAgbV9vdXQubG9hZDMyTm9uTmVnYXRpdmUoYmFzZSwgbV9oZWFwcy5TY29w
ZWRBcmd1bWVudHNUYWJsZV9sZW5ndGgpKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIExW
YWx1ZSBhcmd1bWVudHMgPSBtX291dC5sb2FkUHRyKGJhc2UsIG1faGVhcHMuU2NvcGVkQXJndW1l
bnRzVGFibGVfYXJndW1lbnRzKTsKKyAgICAgICAgICAgIExWYWx1ZSBzY29wZU9mZnNldCA9IG1f
b3V0LmxvYWQzMigKKyAgICAgICAgICAgICAgICBiYXNlSW5kZXgobV9oZWFwcy5zY29wZWRBcmd1
bWVudHNUYWJsZUFyZ3VtZW50cywgYXJndW1lbnRzLCBpbmRleCkpOworICAgICAgICAgICAgCisg
ICAgICAgICAgICBzcGVjdWxhdGUoCisgICAgICAgICAgICAgICAgRXhvdGljT2JqZWN0TW9kZSwg
bm9WYWx1ZSgpLCBudWxscHRyLAorICAgICAgICAgICAgICAgIG1fb3V0LmVxdWFsKHNjb3BlT2Zm
c2V0LCBtX291dC5jb25zdEludDMyKFNjb3BlT2Zmc2V0OjppbnZhbGlkT2Zmc2V0KSkpOworICAg
ICAgICAgICAgCisgICAgICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LmxvYWQ2NChiYXNlSW5kZXgo
CisgICAgICAgICAgICAgICAgbV9oZWFwcy5KU0Vudmlyb25tZW50UmVjb3JkX3ZhcmlhYmxlcywg
YmFzZSwgc2NvcGVPZmZzZXQpKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg
ICAgICAgICAgIAogICAgICAgICBjYXNlIEFycmF5OjpHZW5lcmljOiB7CiAgICAgICAgICAgICBz
ZXRKU1ZhbHVlKHZtQ2FsbCgKICAgICAgICAgICAgICAgICBtX291dC5vcGVyYXRpb24ob3BlcmF0
aW9uR2V0QnlWYWwpLCBtX2NhbGxGcmFtZSwKQEAgLTUwNzAsMTEgKzUxMzIsMTEgQEAgcHJpdmF0
ZToKICAgICAgICAgcmV0dXJuIGNhbGw7CiAgICAgfQogICAgIAotICAgIFR5cGVkUG9pbnRlciBi
YXNlSW5kZXgoSW5kZXhlZEFic3RyYWN0SGVhcCYgaGVhcCwgTFZhbHVlIHN0b3JhZ2UsIExWYWx1
ZSBpbmRleCwgRWRnZSBlZGdlKQorICAgIFR5cGVkUG9pbnRlciBiYXNlSW5kZXgoSW5kZXhlZEFi
c3RyYWN0SGVhcCYgaGVhcCwgTFZhbHVlIHN0b3JhZ2UsIExWYWx1ZSBpbmRleCwgRWRnZSBlZGdl
LCBwdHJkaWZmX3Qgb2Zmc2V0ID0gMCkKICAgICB7CiAgICAgICAgIHJldHVybiBtX291dC5iYXNl
SW5kZXgoCiAgICAgICAgICAgICBoZWFwLCBzdG9yYWdlLCBtX291dC56ZXJvRXh0KGluZGV4LCBt
X291dC5pbnRQdHIpLAotICAgICAgICAgICAgbV9zdGF0ZS5mb3JOb2RlKGVkZ2UpLm1fdmFsdWUp
OworICAgICAgICAgICAgbV9zdGF0ZS5mb3JOb2RlKGVkZ2UpLm1fdmFsdWUsIG9mZnNldCk7CiAg
ICAgfQogICAgIAogICAgIHZvaWQgY29tcGFyZSgKQEAgLTYzNDEsNiArNjQwMywxNiBAQCBwcml2
YXRlOgogICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkNvcnJ1cHQgYXJy
YXkgY2xhc3MiKTsKICAgICAgICAgfQogICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXJyYXk6
OkRpcmVjdEFyZ3VtZW50czoKKyAgICAgICAgICAgIHJldHVybiBtX291dC5lcXVhbCgKKyAgICAg
ICAgICAgICAgICBtX291dC5sb2FkOChjZWxsLCBtX2hlYXBzLkpTQ2VsbF90eXBlSW5mb1R5cGUp
LAorICAgICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50OChEaXJlY3RBcmd1bWVudHNUeXBlKSk7
CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBBcnJheTo6U2NvcGVkQXJndW1lbnRzOgorICAg
ICAgICAgICAgcmV0dXJuIG1fb3V0LmVxdWFsKAorICAgICAgICAgICAgICAgIG1fb3V0LmxvYWQ4
KGNlbGwsIG1faGVhcHMuSlNDZWxsX3R5cGVJbmZvVHlwZSksCisgICAgICAgICAgICAgICAgbV9v
dXQuY29uc3RJbnQ4KFNjb3BlZEFyZ3VtZW50c1R5cGUpKTsKKyAgICAgICAgICAgIAogICAgICAg
ICBkZWZhdWx0OgogICAgICAgICAgICAgcmV0dXJuIG1fb3V0LmVxdWFsKAogICAgICAgICAgICAg
ICAgIG1fb3V0LmxvYWQ4KGNlbGwsIG1faGVhcHMuSlNDZWxsX3R5cGVJbmZvVHlwZSksIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29weVRva2VuLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29weVRva2VuLmgJKHJldmlzaW9uIDE4MDg3NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcHlUb2tlbi5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0zMiw3ICszMiw3IEBAIGVudW0gQ29weVRva2VuIHsKICAgICBCdXR0ZXJmbHlDb3B5VG9rZW4s
CiAgICAgVHlwZWRBcnJheVZlY3RvckNvcHlUb2tlbiwKICAgICBNYXBCYWNraW5nU3RvcmVDb3B5
VG9rZW4sCi0gICAgQXJndW1lbnRzU2xvd0FyZ3VtZW50RGF0YUNvcHlUb2tlbgorICAgIERpcmVj
dEFyZ3VtZW50c092ZXJyaWRlc0NvcHlUb2tlbgogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHJldmlz
aW9uIDE4MDg3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTExMyw2ICsxMTMsMjYgQEAgcHVibGljOgogI2VuZGlmCiAg
ICAgfQogICAgIAorICAgIHZvaWQgbG9hZFZhbHVlKEJhc2VJbmRleCBhZGRyZXNzLCBKU1ZhbHVl
UmVncyByZWdzKQorICAgIHsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICBsb2FkNjQoYWRk
cmVzcywgcmVncy5ncHIoKSk7CisjZWxzZQorICAgICAgICBpZiAoYWRkcmVzcy5iYXNlID09IHJl
Z3MucGF5bG9hZEdQUigpIHx8IGFkZHJlc3MuaW5kZXggPT0gcmVncy5wYXlsb2FkR1BSKCkpIHsK
KyAgICAgICAgICAgIC8vIFdlIGFjdHVhbGx5IGNvdWxkIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSB0
aGUgcmVnaXN0ZXJzIGFyZSBhbGlhc2VkIHRvIGJvdGgKKyAgICAgICAgICAgIC8vIHRhZyBhbmQg
cGF5bG9hZCwgYnV0IHdlIGRvbid0IGZvciBub3cuCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VChhZGRyZXNzLmJhc2UgIT0gcmVncy50YWdHUFIoKSk7CisgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVChhZGRyZXNzLmluZGV4ICE9IHJlZ3MudGFnR1BSKCkpOworICAgICAgICAgICAgCisgICAg
ICAgICAgICBsb2FkMzIoYWRkcmVzcy53aXRoT2Zmc2V0KFRhZ09mZnNldCksIHJlZ3MudGFnR1BS
KCkpOworICAgICAgICAgICAgbG9hZDMyKGFkZHJlc3Mud2l0aE9mZnNldChQYXlsb2FkT2Zmc2V0
KSwgcmVncy5wYXlsb2FkR1BSKCkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbG9h
ZDMyKGFkZHJlc3Mud2l0aE9mZnNldChQYXlsb2FkT2Zmc2V0KSwgcmVncy5wYXlsb2FkR1BSKCkp
OworICAgICAgICAgICAgbG9hZDMyKGFkZHJlc3Mud2l0aE9mZnNldChUYWdPZmZzZXQpLCByZWcu
dGFnR1BSKCkpOworICAgICAgICB9CisjZW5kaWYKKyAgICB9CisgICAgCiAgICAgdm9pZCBtb3Zl
VHJ1c3RlZFZhbHVlKEpTVmFsdWUgdmFsdWUsIEpTVmFsdWVSZWdzIHJlZ3MpCiAgICAgewogI2lm
IFVTRShKU1ZBTFVFNjQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHJldmlzaW9uIDE4
MDg3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHdvcmtpbmcgY29weSkK
QEAgLTM0Niw2ICszNDYsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgSnVtcExpc3QgZW1p
dERvdWJsZUdldEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSk7CiAg
ICAgICAgIEp1bXBMaXN0IGVtaXRDb250aWd1b3VzR2V0QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQYXRj
aGFibGVKdW1wJiBiYWRUeXBlLCBJbmRleGluZ1R5cGUgZXhwZWN0ZWRTaGFwZSA9IENvbnRpZ3Vv
dXNTaGFwZSk7CiAgICAgICAgIEp1bXBMaXN0IGVtaXRBcnJheVN0b3JhZ2VHZXRCeVZhbChJbnN0
cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUpOworICAgICAgICBKdW1wTGlzdCBlbWl0
RGlyZWN0QXJndW1lbnRzR2V0QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRU
eXBlKTsKKyAgICAgICAgSnVtcExpc3QgZW1pdFNjb3BlZEFyZ3VtZW50c0dldEJ5VmFsKEluc3Ry
dWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSk7CiAgICAgICAgIEp1bXBMaXN0IGVtaXRJ
bnRUeXBlZEFycmF5R2V0QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBl
LCBUeXBlZEFycmF5VHlwZSk7CiAgICAgICAgIEp1bXBMaXN0IGVtaXRGbG9hdFR5cGVkQXJyYXlH
ZXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIFR5cGVkQXJyYXlU
eXBlKTsKICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJh
dGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bl
cmF0aW9ucy5jcHAJKHJldmlzaW9uIDE4MDg3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzMCw3ICs1MzAsNyBAQCB2
b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWwoRXhlCiAgICAgICAgIGlmIChoYXNP
cHRpbWl6YWJsZUluZGV4aW5nKG9iamVjdC0+c3RydWN0dXJlKHZtKSkpIHsKICAgICAgICAgICAg
IC8vIEF0dGVtcHQgdG8gb3B0aW1pemUuCiAgICAgICAgICAgICBKSVRBcnJheU1vZGUgYXJyYXlN
b2RlID0gaml0QXJyYXlNb2RlRm9yU3RydWN0dXJlKG9iamVjdC0+c3RydWN0dXJlKHZtKSk7Ci0g
ICAgICAgICAgICBpZiAoYXJyYXlNb2RlICE9IGJ5VmFsSW5mby5hcnJheU1vZGUpIHsKKyAgICAg
ICAgICAgIGlmIChqaXRBcnJheU1vZGVQZXJtaXRzUHV0KGFycmF5TW9kZSkgJiYgYXJyYXlNb2Rl
ICE9IGJ5VmFsSW5mby5hcnJheU1vZGUpIHsKICAgICAgICAgICAgICAgICBKSVQ6OmNvbXBpbGVQ
dXRCeVZhbCgmdm0sIGV4ZWMtPmNvZGVCbG9jaygpLCAmYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNz
UHRyKE9VUl9SRVRVUk5fQUREUkVTUyksIGFycmF5TW9kZSk7CiAgICAgICAgICAgICAgICAgZGlk
T3B0aW1pemUgPSB0cnVlOwogICAgICAgICAgICAgfQpAQCAtNTc1LDcgKzU3NSw3IEBAIHZvaWQg
SklUX09QRVJBVElPTiBvcGVyYXRpb25EaXJlY3RQdXRCeVYKICAgICAgICAgaWYgKGhhc09wdGlt
aXphYmxlSW5kZXhpbmcob2JqZWN0LT5zdHJ1Y3R1cmUodm0pKSkgewogICAgICAgICAgICAgLy8g
QXR0ZW1wdCB0byBvcHRpbWl6ZS4KICAgICAgICAgICAgIEpJVEFycmF5TW9kZSBhcnJheU1vZGUg
PSBqaXRBcnJheU1vZGVGb3JTdHJ1Y3R1cmUob2JqZWN0LT5zdHJ1Y3R1cmUodm0pKTsKLSAgICAg
ICAgICAgIGlmIChhcnJheU1vZGUgIT0gYnlWYWxJbmZvLmFycmF5TW9kZSkgeworICAgICAgICAg
ICAgaWYgKGppdEFycmF5TW9kZVBlcm1pdHNQdXQoYXJyYXlNb2RlKSAmJiBhcnJheU1vZGUgIT0g
YnlWYWxJbmZvLmFycmF5TW9kZSkgewogICAgICAgICAgICAgICAgIEpJVDo6Y29tcGlsZURpcmVj
dFB1dEJ5VmFsKCZ2bSwgY2FsbEZyYW1lLT5jb2RlQmxvY2soKSwgJmJ5VmFsSW5mbywgUmV0dXJu
QWRkcmVzc1B0cihPVVJfUkVUVVJOX0FERFJFU1MpLCBhcnJheU1vZGUpOwogICAgICAgICAgICAg
ICAgIGRpZE9wdGltaXplID0gdHJ1ZTsKICAgICAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCShyZXZpc2lvbiAxODA4
NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtOTUxLDYgKzk1MSwxMiBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBp
bGVHZXRCeVZhbChCeVZhbEluCiAgICAgY2FzZSBKSVRBcnJheVN0b3JhZ2U6CiAgICAgICAgIHNs
b3dDYXNlcyA9IGVtaXRBcnJheVN0b3JhZ2VHZXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJh
ZFR5cGUpOwogICAgICAgICBicmVhazsKKyAgICBjYXNlIEpJVERpcmVjdEFyZ3VtZW50czoKKyAg
ICAgICAgc2xvd0Nhc2VzID0gZW1pdERpcmVjdEFyZ3VtZW50c0dldEJ5VmFsKGN1cnJlbnRJbnN0
cnVjdGlvbiwgYmFkVHlwZSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSklUU2NvcGVkQXJn
dW1lbnRzOgorICAgICAgICBzbG93Q2FzZXMgPSBlbWl0RGlyZWN0QXJndW1lbnRzR2V0QnlWYWwo
Y3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlKTsKKyAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVs
dDoKICAgICAgICAgVHlwZWRBcnJheVR5cGUgdHlwZSA9IHR5cGVkQXJyYXlUeXBlRm9ySklUQXJy
YXlNb2RlKGFycmF5TW9kZSk7CiAgICAgICAgIGlmIChpc0ludCh0eXBlKSkKQEAgLTEwNDYsNiAr
MTA1Miw2MyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeVZhbChCeVZhbEluCiAgICAg
cmVwYXRjaEJ1ZmZlci5yZWxpbmtDYWxsZXJUb0Z1bmN0aW9uKHJldHVybkFkZHJlc3MsIEZ1bmN0
aW9uUHRyKGlzRGlyZWN0ID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxHZW5lcmljIDogb3BlcmF0
aW9uUHV0QnlWYWxHZW5lcmljKSk7CiB9CiAKK0pJVDo6SnVtcExpc3QgSklUOjplbWl0RGlyZWN0
QXJndW1lbnRzR2V0QnlWYWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUGF0Y2hh
YmxlSnVtcCYgYmFkVHlwZSkKK3sKKyAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgCisjaWYg
VVNFKEpTVkFMVUU2NCkKKyAgICBSZWdpc3RlcklEIGJhc2UgPSByZWdUMDsKKyAgICBSZWdpc3Rl
cklEIHByb3BlcnR5ID0gcmVnVDE7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0ID0gSlNWYWx1ZVJl
Z3MocmVnVDApOworICAgIFJlZ2lzdGVySUQgc2NyYXRjaCA9IHJlZ1QzOworI2Vsc2UKKyAgICBS
ZWdpc3RlcklEIGJhc2UgPSByZWdUMDsKKyAgICBSZWdpc3RlcklEIHByb3BlcnR5ID0gcmVnVDI7
CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0ID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKKyAg
ICBSZWdpc3RlcklEIHNjcmF0Y2ggPSByZWdUMzsKKyNlbmRpZgorCisgICAgbG9hZDgoQWRkcmVz
cyhiYXNlLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgc2NyYXRjaCk7CisgICAgYmFk
VHlwZSA9IHBhdGNoYWJsZUJyYW5jaDMyKE5vdEVxdWFsLCBzY3JhdGNoLCBUcnVzdGVkSW1tMzIo
RGlyZWN0QXJndW1lbnRzVHlwZSkpOworICAgIAorICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNo
MzIoQWJvdmVPckVxdWFsLCBwcm9wZXJ0eSwgQWRkcmVzcyhiYXNlLCBEaXJlY3RBcmd1bWVudHM6
Om9mZnNldE9mTGVuZ3RoKCkpKSk7CisgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hUZXN0UHRy
KE5vblplcm8sIEFkZHJlc3MoYmFzZSwgRGlyZWN0QXJndW1lbnRzOjpvZmZzZXRPZk92ZXJyaWRl
cygpKSkpOworICAgIAorICAgIHplcm9FeHRlbmQzMlRvUHRyKHByb3BlcnR5LCBzY3JhdGNoKTsK
KyAgICBsb2FkVmFsdWUoQmFzZUluZGV4KGJhc2UsIHNjcmF0Y2gsIFRpbWVzRWlnaHQsIERpcmVj
dEFyZ3VtZW50czo6c3RvcmFnZU9mZnNldCgpKSwgcmVzdWx0KTsKK30KKworSklUOjpKdW1wTGlz
dCBKSVQ6OmVtaXRTY29wZWRBcmd1bWVudHNHZXRCeVZhbChJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlKQoreworICAgIEp1bXBMaXN0IHNsb3dD
YXNlczsKKyAgICAKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIFJlZ2lzdGVySUQgYmFzZSA9IHJl
Z1QwOworICAgIFJlZ2lzdGVySUQgcHJvcGVydHkgPSByZWdUMTsKKyAgICBKU1ZhbHVlUmVncyBy
ZXN1bHQgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgUmVnaXN0ZXJJRCBzY3JhdGNoID0gcmVn
VDM7CisgICAgUmVnaXN0ZXJJRCBzY3JhdGNoMiA9IHJlZ1Q0OworI2Vsc2UKKyAgICBSZWdpc3Rl
cklEIGJhc2UgPSByZWdUMDsKKyAgICBSZWdpc3RlcklEIHByb3BlcnR5ID0gcmVnVDI7CisgICAg
SlNWYWx1ZVJlZ3MgcmVzdWx0ID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKKyAgICBSZWdp
c3RlcklEIHNjcmF0Y2ggPSByZWdUMzsKKyAgICBSZWdpc3RlcklEIHNjYXJ0Y2gyID0gcmVnVDQ7
CisjZW5kaWYKKworICAgIGxvYWQ4KEFkZHJlc3MoYmFzZSwgSlNDZWxsOjp0eXBlSW5mb1R5cGVP
ZmZzZXQoKSksIHNjcmF0Y2gpOworICAgIGJhZFR5cGUgPSBwYXRjaGFibGVCcmFuY2gzMihOb3RF
cXVhbCwgc2NyYXRjaCwgVHJ1c3RlZEltbTMyKERpcmVjdEFyZ3VtZW50c1R5cGUpKTsKKyAgICAK
KyAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgU2NvcGVkQXJndW1lbnRzOjpvZmZzZXRPZlRhYmxl
KCkpLCBzY3JhdGNoKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgU2NvcGVkQXJndW1lbnRz
OjpvZmZzZXRPZlNjb3BlKCkpLCBzY3JhdGNoMik7CisgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFu
Y2gzMihBYm92ZU9yRXF1YWwsIHByb3BlcnR5LCBBZGRyZXNzKHNjcmF0Y2gsIFNjb3BlZEFyZ3Vt
ZW50c1RhYmxlOjpvZmZzZXRPZkxlbmd0aCgpKSkpOworICAgIGxvYWRQdHIoQWRkcmVzcyhzY3Jh
dGNoLCBTY29wZWRBcmd1bWVudHNUYWJsZTo6b2Zmc2V0T2ZBcmd1bWVudHMoKSksIHNjcmF0Y2gp
OworICAgIGxvYWQzMihCYXNlSW5kZXgoc2NyYXRjaCwgcHJvcGVydHksIFRpbWVzRm91ciksIHNj
cmF0Y2gpOworICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoRXF1YWwsIHNjcmF0Y2gsIFRy
dXN0ZWRJbW0zMihTY29wZU9mZnNldDo6aW52YWxpZE9mZnNldCkpKTsKKyAgICAKKyAgICBsb2Fk
VmFsdWUoQmFzZUluZGV4KHNjcmF0Y2gyLCBzY3JhdGNoLCBUaW1lc0VpZ2h0LCBKU0Vudmlyb25t
ZW50UmVjb3JkOjpvZmZzZXRPZlZhcmlhYmxlcygpKSwgcmVzdWx0KTsKK30KKwogSklUOjpKdW1w
TGlzdCBKSVQ6OmVtaXRJbnRUeXBlZEFycmF5R2V0QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFi
bGVKdW1wJiBiYWRUeXBlLCBUeXBlZEFycmF5VHlwZSB0eXBlKQogewogICAgIEFTU0VSVChpc0lu
dCh0eXBlKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5oCShyZXZpc2lv
biAxODA4NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTE0NTQsNyArMTQ1NCw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBi
b29sIGhhc0NhcHR1cmVkVmFyaWFibGVzKCkgY29uc3QgeyByZXR1cm4gISFtX2NhcHR1cmVkVmFy
aWFibGVzLnNpemUoKTsgfQogICAgICAgICBzaXplX3QgY2FwdHVyZWRWYXJpYWJsZUNvdW50KCkg
Y29uc3QgeyByZXR1cm4gbV9jYXB0dXJlZFZhcmlhYmxlcy5zaXplKCk7IH0KICAgICAgICAgY29u
c3QgSWRlbnRpZmllclNldCYgY2FwdHVyZWRWYXJpYWJsZXMoKSBjb25zdCB7IHJldHVybiBtX2Nh
cHR1cmVkVmFyaWFibGVzOyB9Ci0gICAgICAgIGJvb2wgY2FwdHVyZXMoY29uc3QgSWRlbnRpZmll
ciYgaWRlbnQpIHsgcmV0dXJuIG1fY2FwdHVyZWRWYXJpYWJsZXMuY29udGFpbnMoaWRlbnQuaW1w
bCgpKTsgfQorICAgICAgICBib29sIGNhcHR1cmVzKFN0cmluZ0ltcGwqIHVpZCkgeyByZXR1cm4g
bV9jYXB0dXJlZFZhcmlhYmxlcy5jb250YWlucyh1aWQpOyB9CisgICAgICAgIGJvb2wgY2FwdHVy
ZXMoY29uc3QgSWRlbnRpZmllciYgaWRlbnQpIHsgcmV0dXJuIGNhcHR1cmVzKGlkZW50LmltcGwo
KSk7IH0KIAogICAgICAgICBWYXJTdGFjayYgdmFyU3RhY2soKSB7IHJldHVybiBtX3ZhclN0YWNr
OyB9CiAgICAgICAgIEZ1bmN0aW9uU3RhY2smIGZ1bmN0aW9uU3RhY2soKSB7IHJldHVybiBtX2Z1
bmN0aW9uU3RhY2s7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ3Vt
ZW50c01vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9B
cmd1bWVudHNNb2RlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Bcmd1bWVudHNNb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzOSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFyZ3Vt
ZW50c01vZGVfaAorI2RlZmluZSBBcmd1bWVudHNNb2RlX2gKKworbmFtZXNwYWNlIEpTQyB7CisK
K2VudW0gQXJndW1lbnRzTW9kZSB7CisgICAgQ2xvbmVkQXJndW1lbnRzQ3JlYXRpb25Nb2RlLAor
ICAgIEZha2VBcmd1bWVudFZhbHVlc0NyZWF0aW9uTW9kZQorfTsKKworfSAvLyBuYW1lc3BhY2Ug
SlNDCisKKyNlbmRpZiAvLyBBcmd1bWVudHNNb2RlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQ2FwdHVyZWRBcmd1bWVudHNPZmZzZXQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhcHR1cmVkQXJndW1lbnRzT2Zmc2V0LmNw
cAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhcHR1cmVk
QXJndW1lbnRzT2Zmc2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQyIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJDYXB0dXJlZEFyZ3VtZW50c09mZnNldC5oIgorCituYW1lc3BhY2Ug
SlNDIHsKKwordm9pZCBDYXB0dXJlZEFyZ3VtZW50c09mZnNldDo6ZHVtcChQcmludFN0cmVhbSYg
b3V0KSBjb25zdAoreworICAgIGlmICghKnRoaXMpIHsKKyAgICAgICAgb3V0LnByaW50KCJjYXB0
dXJlZEFyZ3VtZW50SW52YWxpZCIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgb3V0
LnByaW50KCJjYXB0dXJlZEFyZ3VtZW50Iiwgb2Zmc2V0KCkpOworfQorCit9IC8vIG5hbWVzcGFj
ZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FwdHVyZWRBcmd1
bWVudHNPZmZzZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9DYXB0dXJlZEFyZ3VtZW50c09mZnNldC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQ2FwdHVyZWRBcmd1bWVudHNPZmZzZXQuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgQ2FwdHVyZWRBcmd1bWVudHNPZmZzZXRfaAorI2RlZmluZSBDYXB0
dXJlZEFyZ3VtZW50c09mZnNldF9oCisKKyNpbmNsdWRlICJHZW5lcmljT2Zmc2V0LmgiCisjaW5j
bHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBKU0MgeworCisvLyBUaGlzIGlz
IGFuIG9mZnNldCBpbnRvIHRoZSBzcGVjaWFsIGFyZ3VtZW50cyBvYmplY3QsIHdoaWNoIGNhcHR1
cmVzIHRoZSBhcmd1bWVudHMgdG8gYQorLy8gZnVuY3Rpb24uIEl0IG9ubHkgY29tZXMgaW50byBw
bGF5IGl0IHRoZSBhcmd1bWVudHMgYXJlbid0IGFsc28gbGlmdGVkIGludG8gdGhlIGFjdGl2YXRp
b24uCisvLyBJZiB0aGV5IHdlcmUgdGhlbiBhY2Nlc3NlcyB0byB0aGUgYXJndW1lbnRzIHdvdWxk
IHJlc29sdmUgdG8gYSBTY29wZU9mZnNldCBhbmQgbm90IGEKKy8vIENhcHR1cmVkQXJndW1lbnRz
T2Zmc2V0LgorY2xhc3MgQ2FwdHVyZWRBcmd1bWVudHNPZmZzZXQgOiBwdWJsaWMgR2VuZXJpY09m
ZnNldDxDYXB0dXJlZEFyZ3VtZW50c09mZnNldD4geworcHVibGljOgorICAgIENhcHR1cmVkQXJn
dW1lbnRzT2Zmc2V0KCkgeyB9CisgICAgCisgICAgZXhwbGljaXQgQ2FwdHVyZWRBcmd1bWVudHNP
ZmZzZXQodW5zaWduZWQgb2Zmc2V0KQorICAgICAgICA6IEdlbmVyaWNPZmZzZXQob2Zmc2V0KQor
ICAgIHsKKyAgICB9CisgICAgCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIENhcHR1cmVkQXJndW1lbnRzT2Zm
c2V0X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1l
bnRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJl
Y3RBcmd1bWVudHMuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRGlyZWN0QXJndW1lbnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE0NCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRGlyZWN0QXJndW1lbnRzLmgiCisKKyNpbmNsdWRlICJH
ZW5lcmljQXJndW1lbnRzSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTQXJndW1lbnRzSXRlcmF0b3Iu
aCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitTVEFUSUNf
QVNTRVJUX0lTX1RSSVZJQUxMWV9ERVNUUlVDVElCTEUoRGlyZWN0QXJndW1lbnRzKTsKKworY29u
c3QgQ2xhc3NJbmZvIERpcmVjdEFyZ3VtZW50czo6c19pbmZvID0geyAiQXJndW1lbnRzIiwgJkJh
c2U6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShEaXJlY3RBcmd1bWVudHMpIH07CisK
K0RpcmVjdEFyZ3VtZW50czo6RGlyZWN0QXJndW1lbnRzKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIHVuc2lnbmVkIGxlbmd0aCkKKyAgICA6IEdlbmVyaWNBcmd1bWVudHModm0sIHN0cnVj
dHVyZSkKKyAgICAsIG1fbGVuZ3RoKGxlbmd0aCkKK3sKK30KKworRGlyZWN0QXJndW1lbnRzKiBE
aXJlY3RBcmd1bWVudHM6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIERpcmVjdEFyZ3VtZW50cyogcmVzdWx0
ID0KKyAgICAgICAgbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8RGlyZWN0QXJndW1lbnRzPih2
bS5oZWFwLCBhbGxvY2F0aW9uU2l6ZShsZW5ndGgpKSkKKyAgICAgICAgKHZtLCBzdHJ1Y3R1cmUp
OworICAgIHJlc3VsdC0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgIHJldHVybiByZXN1bHQ7Cit9
CisKK0RpcmVjdEFyZ3VtZW50cyogRGlyZWN0QXJndW1lbnRzOjpjcmVhdGUoVk0mIHZtLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIERpcmVjdEFyZ3VtZW50
cyogcmVzdWx0ID0gY3JlYXRlVW5pbml0aWFsaXplZCh2bSwgc3RydWN0dXJlLCBsZW5ndGgpOwor
ICAgIAorICAgIGZvciAodW5zaWduZWQgaSA9IGxlbmd0aDsgaS0tOykKKyAgICAgICAgcmVzdWx0
LT5zdG9yYWdlKClbaV0uY2xlYXIoKTsKKyAgICAKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitE
aXJlY3RBcmd1bWVudHMqIERpcmVjdEFyZ3VtZW50czo6Y3JlYXRlQnlDb3B5aW5nKFZNJiB2bSwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICB1bnNpZ25lZCBs
ZW5ndGggPSBleGVjLT5hcmd1bWVudENvdW50KCk7CisgICAgRGlyZWN0QXJndW1lbnRzKiByZXN1
bHQgPSBjcmVhdGVVbmluaXRpYWxpemVkKHZtLCBzdHJ1Y3R1cmUsIGxlbmd0aCk7CisgICAgCisg
ICAgZm9yICh1bnNpZ25lZCBpID0gbGVuZ3RoOyBpLS07KQorICAgICAgICByZXN1bHQtPnN0b3Jh
Z2UoKVtpXS5zZXQodm0sIHJlc3VsdCwgZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoaSkpOworICAg
IAorICAgIHJlc3VsdC0+Y2FsbGVlKCkuc2V0KHZtLCByZXN1bHQsIGpzQ2FzdDxKU0Z1bmN0aW9u
Kj4oZXhlYy0+Y2FsbGVlKCkpKTsKKyAgICAKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lk
IERpcmVjdEFyZ3VtZW50czo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIHRoaXNDZWxsLCBTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3sKKyAgICBEaXJlY3RBcmd1bWVudHMqIHRoaXNPYmplY3QgPSBzdGF0
aWNfY2FzdDxEaXJlY3RBcmd1bWVudHMqPih0aGlzQ2VsbCk7CisgICAgQVNTRVJUX0dDX09CSkVD
VF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOworICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4o
dGhpc09iamVjdCwgdmlzaXRvcik7CisgICAgCisgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXModGhp
c09iamVjdC0+c3RvcmFnZSgpLCB0aGlzT2JqZWN0LT5tX2xlbmd0aCk7CisgICAgdmlzaXRvci5h
cHBlbmQoJnRoaXNPYmplY3QtPm1fY2FsbGVlKTsKKyAgICAKKyAgICBpZiAodGhpc09iamVjdC0+
bV9vdmVycmlkZXMpIHsKKyAgICAgICAgdmlzaXRvci5jb3B5TGF0ZXIoCisgICAgICAgICAgICB0
aGlzT2JqZWN0LCBEaXJlY3RBcmd1bWVudHNPdmVycmlkZXNDb3B5VG9rZW4sCisgICAgICAgICAg
ICB0aGlzT2JqZWN0LT5tX292ZXJyaWRlcy5nZXQoKSwgbV9sZW5ndGgpOworICAgIH0KK30KKwor
dm9pZCBEaXJlY3RBcmd1bWVudHM6OmNvcHlCYWNraW5nU3RvcmUoSlNDZWxsKiB0aGlzQ2VsbCwg
Q29weVZpc2l0b3ImIHZpc2l0b3IsIENvcHlUb2tlbiB0b2tlbikKK3sKKyAgICBEaXJlY3RBcmd1
bWVudHMqIHRoaXNPYmplY3QgPSBzdGF0aWNfY2FzdDxEaXJlY3RBcmd1bWVudHMqPih0aGlzQ2Vs
bCk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwor
ICAgIAorICAgIFJFTEVBU0VfQVNTRVJUKHRva2VuID09IERpcmVjdEFyZ3VtZW50c092ZXJyaWRl
c0NvcHlUb2tlbik7CisgICAgCisgICAgYm9vbCogb2xkT3ZlcnJpZGVzID0gdGhpc09iamVjdC0+
bV9vdmVycmlkZXMuZ2V0KCk7CisgICAgaWYgKCFvbGRPdmVycmlkZXMpCisgICAgICAgIHJldHVy
bjsKKyAgICAKKyAgICBpZiAodmlzaXRvci5jaGVja0lmU2hvdWxkQ29weShvdmVycmlkZXMpKSB7
CisgICAgICAgIGJvb2wqIG5ld092ZXJyaWRlcyA9IHN0YXRpY19jYXN0PGJvb2wqPih2aXNpdG9y
LmFsbG9jYXRlTmV3U3BhY2UobV9sZW5ndGgpKTsKKyAgICAgICAgbWVtY3B5KG5ld092ZXJyaWRl
cywgb2xkT3ZlcnJpZGVzLCBtX2xlbmd0aCk7CisgICAgICAgIHRoaXNPYmplY3QtPm1fb3ZlcnJp
ZGVzLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIobmV3T3ZlcnJpZGVzKTsKKyAgICAgICAgdmlzaXRv
ci5kaWRDb3B5KG9sZE92ZXJyaWRlcywgbV9sZW5ndGgpOworICAgIH0KK30KKworU3RydWN0dXJl
KiBEaXJlY3RBcmd1bWVudHM6OmNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQoreworICAgIHJldHVybiBTdHJ1Y3R1
cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKERpcmVjdEFy
Z3VtZW50c1R5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKK30KKwordm9pZCBEaXJlY3RB
cmd1bWVudHM6OnNsb3dEb3duQW5kV2FzdGVNZW1vcnkoVk0mIHZtKQoreworICAgIFJFTEVBU0Vf
QVNTRVJUKCFtX292ZXJyaWRlcyk7CisgICAgCisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0
eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKG1fbGVuZ3RoKSwgRG9udEVudW0pOworICAgIHB1dERp
cmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+Y2FsbGVlLCBtX2NhbGxlZS5nZXQoKSwgRG9udEVu
dW0pOworICAgIAorICAgIHZvaWQqIGJhY2tpbmdTdG9yZTsKKyAgICBSRUxFQVNFX0FTU0VSVCh2
bS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZSh0aGlzLCBtX2xlbmd0aCksICZiYWNraW5nU3RvcmUp
OworICAgIG1fb3ZlcnJpZGVzLnNldCh2bSwgdGhpcywgc3RhdGljX2Nhc3Q8Ym9vbCo+KGJhY2tp
bmdTdG9yZSkpOworICAgIGZvciAodW5zaWduZWQgaSA9IG1fbGVuZ3RoOyBpLS07KQorICAgICAg
ICBtX292ZXJyaWRlcy5nZXQoKVtpXSA9IGZhbHNlOworfQorCit2b2lkIERpcmVjdEFyZ3VtZW50
czo6c2xvd0Rvd25BbmRXYXN0ZU1lbW9yeUlmTmVjZXNzYXJ5KFZNJiB2bSkKK3sKKyAgICBpZiAo
IW1fb3ZlcnJpZGVzKQorICAgICAgICBzbG93RG93bkFuZFdhc3RlTWVtb3J5KHZtKTsKK30KKwor
dm9pZCBEaXJlY3RBcmd1bWVudHM6Om92ZXJyaWRlQXJndW1lbnQoVk0mIHZtLCB1bnNpZ25lZCBp
KQoreworICAgIHNsb3dEb3duQW5kV2FzdGVNZW1vcnlJZk5lY2Vzc2FyeSh2bSk7CisgICAgbV9v
dmVycmlkZXMuZ2V0KClbaW5kZXhdID0gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50
cy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0
QXJndW1lbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMzkgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBEaXJlY3RBcmd1bWVu
dHNfaAorI2RlZmluZSBEaXJlY3RBcmd1bWVudHNfaAorCisjaW5jbHVkZSAiR2VuZXJpY0FyZ3Vt
ZW50cy5oIgorCituYW1lc3BhY2UgSlNDIHsKKworLy8gVGhpcyBpcyBhbiBBcmd1bWVudHMtY2xh
c3Mgb2JqZWN0IHRoYXQgd2UgY3JlYXRlIHdoZW4geW91IHNheSAiYXJndW1lbnRzIiBpbnNpZGUg
YSBmdW5jdGlvbiwKKy8vIGFuZCBub25lIG9mIHRoZSBhcmd1bWVudHMgYXJlIGNhcHR1cmVkIGlu
IHRoZSBmdW5jdGlvbidzIGFjdGl2YXRpb24uIFRoZSBmdW5jdGlvbiB3aWxsIGNvcHkgYWxsCisv
LyBvZiBpdHMgYXJndW1lbnRzIGludG8gdGhpcyBvYmplY3QsIGFuZCBhbGwgc3Vic2VxdWVudCBh
Y2Nlc3NlcyB0byB0aGUgYXJndW1lbnRzIHdpbGwgZ28gdGhyb3VnaAorLy8gdGhpcyBvYmplY3Qg
dGhlcmVhZnRlci4gU3BlY2lhbCBzdXBwb3J0IGlzIGluIHBsYWNlIGZvciBtaXNjaGV2aW91cyBl
dmVudHMgbGlrZSB0aGUgYXJndW1lbnRzCisvLyBiZWluZyBkZWxldGVkIChzb21ldGhpbmcgbGlr
ZSAiZGVsZXRlIGFyZ3VtZW50c1swXSIpIG9yIHJlY29uZmlndXJlZCAoYnJvYWRseSwgd2Ugc2F5
IGRlbGV0aW9ucworLy8gYW5kIHJlY29uZmlndXJhdGlvbnMgbWVhbiB0aGF0IHRoZSByZXNwZWN0
aXZlIGFyZ3VtZW50IHdhcyAib3ZlcnJpZGRlbiIpLgorLy8KKy8vIFRvIHNwZWVkIGFsbG9jYXRp
b24sIHRoaXMgb2JqZWN0IHdpbGwgaG9sZCBhbGwgb2YgdGhlIGFyZ3VtZW50cyBpbi1wbGFjZS4g
VGhlIGFyZ3VtZW50cyBhcyB3ZWxsCisvLyBhcyBhIHRhYmxlIG9mIGZsYWdzIHNheWluZyB3aGlj
aCBhcmd1bWVudHMgd2VyZSBvdmVycmlkZGVuLgorY2xhc3MgRGlyZWN0QXJndW1lbnRzIDogcHVi
bGljIEdlbmVyaWNBcmd1bWVudHM8RGlyZWN0QXJndW1lbnRzPiB7Citwcml2YXRlOgorICAgIERp
cmVjdEFyZ3VtZW50cyhWTSYsIFN0cnVjdHVyZSosIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgCitw
dWJsaWM6CisgICAgLy8gQ3JlYXRlcyBhbiBhcmd1bWVudHMgb2JqZWN0IGJ1dCBsZWF2ZXMgaXQg
dW5pbml0aWFsaXplZC4gVGhpcyBpcyBkYW5nZXJvdXMgaWYgd2UgR0MgcmlnaHQKKyAgICAvLyBh
ZnRlciBhbGxvY2F0aW9uLgorICAgIHN0YXRpYyBEaXJlY3RBcmd1bWVudHMqIGNyZWF0ZVVuaW5p
dGlhbGl6ZWQoVk0mLCBTdHJ1Y3R1cmUqLCB1bnNpZ25lZCBsZW5ndGgpOworICAgIAorICAgIC8v
IENyZWF0ZXMgYW4gYXJndW1lbnRzIG9iamVjdCBhbmQgaW5pdGlhbGl6ZXMgZXZlcnl0aGluZyB0
byB0aGUgZW1wdHkgdmFsdWUuIFVzZSB0aGlzIGlmIHlvdQorICAgIC8vIGNhbm5vdCBndWFyYW50
ZWUgdGhhdCB5b3UnbGwgaW1tZWRpYXRlbHkgaW5pdGlhbGl6ZSBhbGwgb2YgdGhlIGVsZW1lbnRz
LgorICAgIHN0YXRpYyBEaXJlY3RBcmd1bWVudHMqIGNyZWF0ZShWTSYsIFN0cnVjdHVyZSosIHVu
c2lnbmVkIGxlbmd0aCk7CisgICAgCisgICAgLy8gQ3JlYXRlcyBhbiBhcmd1bWVudHMgb2JqZWN0
IGJ5IGNvcHlpbmcgdGhlIGFyZ3VtbmV0cyBmcm9tIHRoZSBzdGFjay4KKyAgICBzdGF0aWMgRGly
ZWN0QXJndW1lbnRzKiBjcmVhdGVCeUNvcHlpbmcoVk0mLCBTdHJ1Y3R1cmUqLCBFeGVjU3RhdGUq
KTsKKyAgICAKKyAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNp
dG9yJik7CisgICAgc3RhdGljIHZvaWQgY29weUJhY2tpbmdTdG9yZShKU0NlbGwqLCBDb3B5Vmlz
aXRvciYsIENvcHlUb2tlbik7CisgICAgCisgICAgdWludDMyX3QgaW50ZXJuYWxMZW5ndGgoKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbGVuZ3RoOworICAgIH0KKyAgICAKKyAgICB1
aW50MzJfdCBsZW5ndGgoRXhlY1N0YXRlKiBleGVjKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYg
KFVOTElLRUxZKG1fb3ZlcnJpZGVzKSkKKyAgICAgICAgICAgIHJldHVybiBnZXQoZXhlYywgZXhl
Yy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCkudG9VSW50MzIoZXhlYyk7CisgICAgICAgIHJldHVy
biBtX2xlbmd0aDsKKyAgICB9CisgICAgCisgICAgYm9vbCBjYW5BY2Nlc3NJbmRleFF1aWNrbHko
dWludDMyX3QgaSkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBpIDwgbV9sZW5ndGggJiYg
KCFtX292ZXJyaWRlcyB8fCAhbV9vdmVycmlkZXMuZ2V0KClbaV0pOworICAgIH0KKyAgICAKKyAg
ICBKU1ZhbHVlIGdldEluZGV4UXVpY2tseSh1aW50MzJfdCBpKSBjb25zdAorICAgIHsKKyAgICAg
ICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oY2FuQWNjZXNzSW5kZXhRdWlja2x5
KGkpKTsKKyAgICAgICAgcmV0dXJuIHN0b3JhZ2UoKVtpXS5nZXQoKTsKKyAgICB9CisgICAgCisg
ICAgdm9pZCBzZXRJbmRleFF1aWNrbHkoVk0mIHZtLCB1aW50MzJfdCBpLCBKU1ZhbHVlIHZhbHVl
KQorICAgIHsKKyAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oY2FuQWNj
ZXNzSW5kZXhRdWlja2x5KGkpKTsKKyAgICAgICAgc3RvcmFnZSgpW2ldLnNldCh2bSwgdGhpcywg
dmFsdWUpOworICAgIH0KKyAgICAKKyAgICBXcml0ZUJhcnJpZXI8SlNGdW5jdGlvbj4mIGNhbGxl
ZSgpCisgICAgeworICAgICAgICByZXR1cm4gbV9jYWxsZWU7CisgICAgfQorICAgIAorICAgIFdy
aXRlQmFycmllcjxVbmtub3duPiYgYXJndW1lbnQoQ2FwdHVyZWRBcmd1bWVudHNPZmZzZXQgb2Zm
c2V0KQorICAgIHsKKyAgICAgICAgQVNTRVJUKG9mZnNldCk7CisgICAgICAgIEFTU0VSVF9XSVRI
X1NFQ1VSSVRZX0lNUExJQ0FUSU9OKG9mZnNldC5vZmZzZXQoKSA8IG1fbGVuZ3RoKTsKKyAgICAg
ICAgcmV0dXJuIHN0b3JhZ2UoKVtvZmZzZXQub2Zmc2V0KCldOworICAgIH0KKyAgICAKKyAgICAv
LyBNZXRob2RzIGludGVuZGVkIGZvciB1c2UgYnkgdGhlIEdlbmVyaWNBcmd1bWVudHMgbWl4aW4u
CisgICAgYm9vbCBvdmVycm9kZVRoaW5ncygpIGNvbnN0IHsgcmV0dXJuICEhbV9vdmVycmlkZXM7
IH0KKyAgICB2b2lkIHNsb3dEb3duQW5kV2FzdGVNZW1vcnkoVk0mKTsKKyAgICB2b2lkIHNsb3dE
b3duQW5kV2FzdGVNZW1vcnlJZk5lY2Vzc2FyeShWTSYpOworICAgIHZvaWQgb3ZlcnJpZGVBcmd1
bWVudChWTSYsIHVuc2lnbmVkIGluZGV4KTsKKyAgICAKKyAgICBERUNMQVJFX0lORk87CisgICAg
CisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmpl
Y3QqLCBKU1ZhbHVlIHByb3RvdHlwZSk7CisgICAgCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZz
ZXRPZkxlbmd0aCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihEaXJlY3RBcmd1bWVudHMsIG1f
bGVuZ3RoKTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZPdmVycmlkZXMoKSB7IHJl
dHVybiBPQkpFQ1RfT0ZGU0VUT0YoRGlyZWN0QXJndW1lbnRzLCBtX292ZXJyaWRlcyk7IH0KKyAg
ICAKKyAgICBzdGF0aWMgc2l6ZV90IHN0b3JhZ2VPZmZzZXQoKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZjxzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+
KT4oc2l6ZW9mKERpcmVjdEFyZ3VtZW50cykpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgc2l6
ZV90IGFsbG9jYXRpb25TaXplKHVpbnQzMl90IGxlbmd0aCkKKyAgICB7CisgICAgICAgIHJldHVy
biBzdG9yYWdlT2Zmc2V0KCkgKyBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSAqIGxlbmd0
aDsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogc3Rv
cmFnZSgpCisgICAgeworICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PFdyaXRlQmFycmllcjxV
bmtub3duPio+KGJpdHdpc2VfY2FzdDxjaGFyKj4odGhpcykgKyBzdG9yYWdlT2Zmc2V0KCkpOwor
ICAgIH0KKyAgICAKKyAgICBXcml0ZUJhcnJpZXI8SlNGdW5jdGlvbio+IG1fY2FsbGVlOworICAg
IHVpbnQzMl90IG1fbGVuZ3RoOyAvLyBBbHdheXMgdGhlIGFjdHVhbCBsZW5ndGggb2YgY2FwdHVy
ZWQgYXJndW1lbnRzIGFuZCBuZXZlciB3aGF0IHdhcyBzdG9yZWQgaW50byB0aGUgbGVuZ3RoIHBy
b3BlcnR5LgorICAgIENvcHlXcml0ZUJhcnJpZXI8Ym9vbD4gbV9vdmVycmlkZXM7IC8vIElmIG5v
bi1udWxsLCBpdCBtZWFucyB0aGF0IGxlbmd0aCwgY2FsbGVlLCBhbmQgY2FsbGVyIGFyZSBmdWxs
eSBtYXRlcmlhbGl6ZWQgcHJvcGVydGllcy4KK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisj
ZW5kaWYgLy8gRGlyZWN0QXJndW1lbnRzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHMuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDYxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgR2VuZXJpY0FyZ3VtZW50c19oCisjZGVmaW5lIEdlbmVyaWNBcmd1
bWVudHNfaAorCisjaW5jbHVkZSAiSlNPYmplY3QuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKKy8v
IFRoaXMgaXMgYSBtaXhpbiBmb3IgdGhlIHR3byBraW5kcyBvZiBBcmd1bWVudHMtY2xhc3Mgb2Jq
ZWN0cyB0aGF0IGFyaXNlIHdoZW4geW91IHNheQorLy8gImFyZ3VtZW50cyIgaW5zaWRlIGEgZnVu
Y3Rpb24uIFRoaXMgY2xhc3MgZG9lc24ndCBzaG93IHVwIGluIHRoZSBKU0NlbGwgaW5oZXJpdGFu
Y2UgaGllcmFyY2h5LgordGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4KK2NsYXNzIEdlbmVyaWNBcmd1
bWVudHMgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBK
U05vbkZpbmFsT2JqZWN0IEJhc2U7CisKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0
dXJlRmxhZ3MgPSBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBJbnRlcmNlcHRzR2V0T3du
UHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgT3ZlcnJpZGVzR2V0
UHJvcGVydHlOYW1lcyB8IEpTT2JqZWN0OjpTdHJ1Y3R1cmVGbGFnczsKKworcHJvdGVjdGVkOgor
ICAgIEdlbmVyaWNBcmd1bWVudHMoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICAg
ICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCisgICAgeworICAgIH0KKworICAgIHN0YXRpYyBib29s
IGdldE93blByb3BlcnR5U2xvdChKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwg
UHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90QnlJbmRl
eChKU09iamVjdCosIEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgUHJvcGVydHlT
bG90Jik7CisgICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4
ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKKyAgICBzdGF0
aWMgdm9pZCBwdXQoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQ
dXRQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgdm9pZCBwdXRCeUluZGV4KEpTQ2VsbCosIEV4
ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJv
dyk7CisgICAgc3RhdGljIHZvaWQgZGVsZXRlUHJvcGVydHkoSlNDZWxsKiwgRXhlY1N0YXRlKiwg
UHJvcGVydHlOYW1lKTsKKyAgICBzdGF0aWMgdm9pZCBkZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlND
ZWxsKiwgRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lKTsKKyAgICBzdGF0aWMgdm9p
ZCBkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwg
Y29uc3QgUHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCBzaG91bGRUaHJvdyk7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEdlbmVyaWNBcmd1bWVudHNfaAorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzSW5saW5lcy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVu
dHNJbmxpbmVzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9HZW5lcmljQXJndW1lbnRzSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjEy
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgR2VuZXJpY0FyZ3VtZW50c0lubGluZXNfaAorI2RlZmluZSBHZW5lcmljQXJndW1lbnRzSW5s
aW5lc19oCisKKyNpbmNsdWRlICJHZW5lcmljQXJndW1lbnRzLmgiCisjaW5jbHVkZSAiSlNBcmd1
bWVudHNJdGVyYXRvci5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKworbmFtZXNwYWNlIEpT
QyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFR5cGU+Citib29sIEdlbmVyaWNBcmd1bWVudHM8VHlw
ZT46OmdldE93blByb3BlcnR5U2xvdChKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMs
IFByb3BlcnR5TmFtZSBpZGVudCwgUHJvcGVydHlTbG90JiBzbG90KQoreworICAgIFR5cGUqIHRo
aXNPYmplY3QgPSBqc0Nhc3Q8VHlwZSo+KG9iamVjdCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKKyAgICAKKyAgICBpZiAoIXRoaXNPYmplY3QtPm92ZXJyb2RlVGhpbmdzKCkpIHsKKyAgICAg
ICAgaWYgKGlkZW50ID09IHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCkgeworICAgICAgICAgICAg
c2xvdC5zZXRWYWx1ZSh0aGlzT2JqZWN0LCBEb250RW51bSwganNOdW1iZXIodGhpc09iamVjdC0+
aW50ZXJuYWxMZW5ndGgoKSkpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0K
KyAgICAgICAgaWYgKGlkZW50ID09IHZtLnByb3BlcnR5TmFtZXMtPmNhbGxlZSkgeworICAgICAg
ICAgICAgc2xvdC5zZXRWYWx1ZSh0aGlzT2JqZWN0LCBEb250RW51bSwgdGhpc09iamVjdC0+Y2Fs
bGVlKCkuZ2V0KCkpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9
CisgICAgCisgICAgdW5zaWduZWQgaW5kZXggPSBpZGVudC5hc0luZGV4KCk7CisgICAgaWYgKHRo
aXNPYmplY3QtPmNhbkFjY2Vzc0luZGV4UXVpY2tseShpbmRleCkpIHsKKyAgICAgICAgc2xvdC5z
ZXRWYWx1ZSh0aGlzT2JqZWN0LCBOb25lLCB0aGlzT2JqZWN0LT5nZXRJbmRleFF1aWNrbHkoaW5k
ZXgpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIGlmIChCYXNlOjpn
ZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgZXhlYywgaWRlbnQsIHNsb3QpKQorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICBpZiAoaWRlbnQgPT0gdm0ucHJvcGVydHlOYW1lcy0+
aXRlcmF0b3JQcml2YXRlTmFtZSkgeworICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0ID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpOworICAgICAgICB0aGlzT2JqZWN0LT5K
U0NfTkFUSVZFX0ZVTkNUSU9OKHZtLnByb3BlcnR5TmFtZXMtPml0ZXJhdG9yUHJpdmF0ZU5hbWUs
IGFyZ3VtZW50c0Z1bmNJdGVyYXRvciwgRG9udEVudW0sIDApOworICAgICAgICBpZiAoSlNPYmpl
Y3Q6OmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBleGVjLCBpZGVudCwgc2xvdCkpCisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIGZhbHNlOwor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPgorYm9vbCBHZW5lcmljQXJndW1lbnRzPFR5cGU+
OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSog
ZXhlYywgdW5zaWduZWQgaW5kZXgsIFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICBUeXBlKiB0
aGlzT2JqZWN0ID0ganNDYXN0PFR5cGUqPihvYmplY3QpOworICAgIAorICAgIGlmICh0aGlzT2Jq
ZWN0LT5jYW5BY2Nlc3NJbmRleFF1aWNrbHkoaW5kZXgpKSB7CisgICAgICAgIHNsb3Quc2V0VmFs
dWUodGhpc09iamVjdCwgTm9uZSwgdGhpc09iamVjdC0+Z2V0SW5kZXhRdWlja2x5KGluZGV4KSk7
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gQmFzZTo6Z2V0
T3duUHJvcGVydHlTbG90QnlJbmRleChvYmplY3QsIGV4ZWMsIGluZGV4LCBzbG90KTsKK30KKwor
dGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4KK3ZvaWQgR2VuZXJpY0FyZ3VtZW50czxUeXBlPjo6Z2V0
T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3Bl
cnR5TmFtZUFycmF5JiBhcnJheSwgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit7CisgICAgVHlwZSog
dGhpc09iamVjdCA9IGpzQ2FzdDxUeXBlKj4ob2JqZWN0KTsKKyAgICAKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgdGhpc09iamVjdC0+aW50ZXJuYWxMZW5ndGgoKTsgKytpKSB7CisgICAg
ICAgIGlmICghdGhpc09iamVjdC0+Y2FuQWNjZXNzSW5kZXhRdWlja2x5KGluZGV4KSkKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICBhcnJheS5hZGQoSWRlbnRpZmllcjo6ZnJvbShleGVj
LCBpKSk7CisgICAgfQorICAgIGlmIChzaG91bGRJbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKG1v
ZGUpICYmICF0aGlzT2JqZWN0LT5vdmVycm9kZVRoaW5ncygpKSB7CisgICAgICAgIGFycmF5LmFk
ZChleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY2FsbGVlKTsKKyAgICAgICAgYXJyYXkuYWRkKGV4ZWMt
PnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpOworICAgIH0KKyAgICBCYXNlOjpnZXRPd25Qcm9wZXJ0
eU5hbWVzKHRoaXNPYmplY3QsIGV4ZWMsIGFycmF5LCBtb2RlKTsKK30KKwordGVtcGxhdGU8dHlw
ZW5hbWUgVHlwZT4KK3ZvaWQgR2VuZXJpY0FyZ3VtZW50czxUeXBlPjo6cHV0KEpTQ2VsbCogY2Vs
bCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgaWRlbnQsIEpTVmFsdWUgdmFsdWUsIFB1
dFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICBUeXBlKiB0aGlzT2JqZWN0ID0ganNDYXN0PFR5
cGUqPihvYmplY3QpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgCisgICAgaWYgKCF0
aGlzT2JqZWN0LT5vdmVycm9kZVRoaW5ncygpCisgICAgICAgICYmIChpZGVudCA9PSB2bS5wcm9w
ZXJ0eU5hbWVzLT5sZW5ndGgKKyAgICAgICAgICAgIHx8IGlkZW50ID09IHZtLnByb3BlcnR5TmFt
ZXMtPmNhbGxlZSkpCisgICAgICAgIHRoaXNPYmplY3QtPnNsb3dEb3duQW5kV2FzdGVNZW1vcnko
dm0pOworICAgIAorICAgIHVuc2lnbmVkIGluZGV4ID0gaWRlbnQuYXNJbmRleCgpOworICAgIGlm
ICh0aGlzT2JqZWN0LT5jYW5BY2Nlc3NJbmRleFF1aWNrbHkoaW5kZXgpKSB7CisgICAgICAgIHNl
dEluZGV4UXVpY2tseSh2bSwgaW5kZXgsIHZhbHVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICAKKyAgICBCYXNlOjpwdXQodGhpc09iamVjdCwgZXhlYywgaWRlbnQsIHZhbHVlLCBzbG90
KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4KK3ZvaWQgR2VuZXJpY0FyZ3VtZW50czxU
eXBlPjo6cHV0QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQg
aW5kZXgsIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCit7CisgICAgVHlwZSogdGhp
c09iamVjdCA9IGpzQ2FzdDxUeXBlKj4ob2JqZWN0KTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgp
OworICAgIAorICAgIGlmICh0aGlzT2JqZWN0LT5jYW5TZXRJbmRleFF1aWNrbHkoaW5kZXgpKSB7
CisgICAgICAgIHNldEluZGV4UXVpY2tseSh2bSwgaW5kZXgsIHZhbHVlKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gQmFzZTo6cHV0QnlJbmRleChjZWxsLCBleGVj
LCBpbmRleCwgdmFsdWUsIHNob3VsZFRocm93KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVHlw
ZT4KK3ZvaWQgR2VuZXJpY0FyZ3VtZW50czxUeXBlPjo6ZGVsZXRlUHJvcGVydHkoSlNDZWxsKiBj
ZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBpZGVudCkKK3sKKyAgICBUeXBlKiB0
aGlzT2JqZWN0ID0ganNDYXN0PFR5cGUqPihvYmplY3QpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7CisgICAgCisgICAgaWYgKCF0aGlzT2JqZWN0LT5vdmVycm9kZVRoaW5ncygpCisgICAgICAg
ICYmIChpZGVudCA9PSB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgKKyAgICAgICAgICAgIHx8IGlk
ZW50ID09IHZtLnByb3BlcnR5TmFtZXMtPmNhbGxlZSkpCisgICAgICAgIHRoaXNPYmplY3QtPnNs
b3dEb3duQW5kV2FzdGVNZW1vcnkodm0pOworICAgIAorICAgIHVuc2lnbmVkIGluZGV4ID0gaWRl
bnQuYXNJbmRleCgpOworICAgIGlmICh0aGlzT2JqZWN0LT5jYW5BY2Nlc3NJbmRleFF1aWNrbHko
aW5kZXgpKSB7CisgICAgICAgIHRoaXNPYmplY3QtPm92ZXJyaWRlQXJndW1lbnQodm0sIGluZGV4
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBCYXNlOjpkZWxldGVQcm9wZXJ0
eSh0aGlzT2JqZWN0LCBleGVjLCBpZGVudCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFR5cGU+
Cit2b2lkIEdlbmVyaWNBcmd1bWVudHM8VHlwZT46OmRlbGV0ZVByb3BlcnR5QnlJbmRleChKU0Nl
bGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaW5kZXgpCit7CisgICAgVHlwZSog
dGhpc09iamVjdCA9IGpzQ2FzdDxUeXBlKj4ob2JqZWN0KTsKKyAgICBWTSYgdm0gPSBleGVjLT52
bSgpOworICAgIAorICAgIGlmICh0aGlzT2JqZWN0LT5jYW5BY2Nlc3NJbmRleFF1aWNrbHkoaW5k
ZXgpKSB7CisgICAgICAgIHRoaXNPYmplY3QtPm92ZXJyaWRlQXJndW1lbnQodm0sIGluZGV4KTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gQmFzZTo6ZGVsZXRlUHJv
cGVydHlCeUluZGV4KGNlbGwsIGV4ZWMsIGluZGV4KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
VHlwZT4KK3ZvaWQgR2VuZXJpY0FyZ3VtZW50czxUeXBlPjo6ZGVmaW5lT3duUHJvcGVydHkoSlNP
YmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgaWRlbnQsIGNvbnN0
IFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgYm9vbCBzaG91bGRUaHJvdykKK3sKKyAg
ICBUeXBlKiB0aGlzT2JqZWN0ID0ganNDYXN0PFR5cGUqPihvYmplY3QpOworICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7CisgICAgCisgICAgaWYgKGlkZW50ID09IHZtLnByb3BlcnR5TmFtZXMtPmxl
bmd0aAorICAgICAgICB8fCBpZGVudCA9PSB2bS5wcm9wZXJ0eU5hbWVzLT5jYWxsZWUpCisgICAg
ICAgIHRoaXNPYmplY3QtPnNsb3dEb3duQW5kV2FzdGVNZW1vcnlJZk5lY2Vzc2FyeSh2bSk7Cisg
ICAgZWxzZSB7CisgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gaWRlbnQuYXNJbmRleCgpOworICAg
ICAgICBpZiAodGhpc09iamVjdC0+Y2FuQWNjZXNzQXJndW1lbnRRdWlja2x5KGluZGV4KSkgewor
ICAgICAgICAgICAgaWYgKCFkZXNjcmlwdG9yLmlzQWNjZXNzb3JEZXNjcmlwdG9yKCkpIHsKKyAg
ICAgICAgICAgICAgICAvLyBJZiB0aGUgcHJvcGVydHkgaXMgbm90IGRlbGV0ZWQgYW5kIHdlIGFy
ZSB1c2luZyBhIG5vbi1hY2Nlc3NvciBkZXNjcmlwdG9yLCB0aGVuCisgICAgICAgICAgICAgICAg
Ly8gbWFrZSBzdXJlIHRoYXQgdGhlIGFsaWFzZWQgYXJndW1lbnQgc2VlcyB0aGUgdmFsdWUuCisg
ICAgICAgICAgICAgICAgaWYgKGRlc2NyaXB0b3IudmFsdWUoKSkKKyAgICAgICAgICAgICAgICAg
ICAgdGhpc09iamVjdC0+c2V0SW5kZXhRdWlja2x5KHZtLCBpLCBkZXNjcmlwdG9yLnZhbHVlKCkp
OworICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gSWYgdGhlIHByb3BlcnR5IGlzIG5v
dCBkZWxldGVkIGFuZCB3ZSBhcmUgdXNpbmcgYSBub24tYWNjZXNzb3IsIHdyaXRhYmxlCisgICAg
ICAgICAgICAgICAgLy8gZGVzY3JpcHRvciwgdGhlbiB3ZSBhcmUgZG9uZS4gVGhlIGFyZ3VtZW50
IGNvbnRpbnVlcyB0byBiZSBhbGlhc2VkLiBOb3RlIHRoYXQgd2UKKyAgICAgICAgICAgICAgICAv
LyBpZ25vcmUgdGhlIHJlcXVlc3QgdG8gY2hhbmdlIGVudW1lcmFiaWxpdHkuIFdlIGFwcGVhciB0
byBoYXZlIGFsd2F5cyBkb25lIHNvLCBpbgorICAgICAgICAgICAgICAgIC8vIGNhc2VzIHdoZXJl
IHRoZSBhcmd1bWVudCB3YXMgc3RpbGwgYWxpYXNlZC4KKyAgICAgICAgICAgICAgICAvLyBGSVhN
RTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MTk1MgorICAgICAg
ICAgICAgICAgIGlmIChkZXNjcmlwdG9yLndyaXRhYmxlKCkpCisgICAgICAgICAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgICAgIC8vIElm
IHRoZSBwcm9wZXJ0eSBpcyBhIG5vbi1kZWxldGVkIGFyZ3VtZW50LCB0aGVuIG1vdmUgaXQgaW50
byB0aGUgYmFzZSBvYmplY3QgYW5kCisgICAgICAgICAgICAvLyB0aGVuIGRlbGV0ZSBpdC4KKyAg
ICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSB0aGlzT2JqZWN0LT5nZXRJbmRleFF1aWNrbHkoaSk7
CisgICAgICAgICAgICBBU1NFUlQodmFsdWUpOworICAgICAgICAgICAgb2JqZWN0LT5wdXREaXJl
Y3RNYXlCZUluZGV4KGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUpOworICAgICAgICAgICAgdGhp
c09iamVjdC0+b3ZlcnJpZGVBcmd1bWVudCh2bSwgaSk7CisgICAgICAgIH0KKyAgICB9CisgICAg
CisgICAgLy8gTm93IGp1c3QgbGV0IHRoZSBub3JtYWwgb2JqZWN0IG1hY2hpbmVyeSBkbyBpdHMg
dGhpbmcuCisgICAgcmV0dXJuIEJhc2U6OmRlZmluZU93blByb3BlcnR5KG9iamVjdCwgZXhlYywg
aWRlbnQsIGRlc2NyaXB0b3IsIHNob3VsZFRocm93KTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlND
CisKKyNlbmRpZiAvLyBHZW5lcmljQXJndW1lbnRzSW5saW5lc19oCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNPZmZzZXQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljT2Zmc2V0LmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljT2Zmc2V0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwxMTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBHZW5lcmljT2Zmc2V0X2gKKyNkZWZpbmUgR2VuZXJpY09m
ZnNldF9oCisKKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorCituYW1lc3BhY2UgSlNDIHsK
KworLy8gQSBtaXhpbiBmb3IgY3JlYXRpbmcgdGhlIHZhcmlvdXMga2luZHMgb2YgdmFyaWFibGUg
b2Zmc2V0cyB0aGF0IG91ciBlbmdpbmUgc3VwcG9ydHMuCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgor
Y2xhc3MgR2VuZXJpY09mZnNldCB7CitwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVk
IGludmFsaWRPZmZzZXQgPSBVSU5UX01BWDsKKyAgICAKKyAgICBHZW5lcmljT2Zmc2V0KCkKKyAg
ICAgICAgOiBtX29mZnNldChpbnZhbGlkT2Zmc2V0KQorICAgIHsKKyAgICB9CisgICAgCisgICAg
ZXhwbGljaXQgR2VuZXJpY09mZnNldCh1bnNpZ25lZCBvZmZzZXQpCisgICAgICAgIDogbV9vZmZz
ZXQob2Zmc2V0KQorICAgIHsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvciEoKSBjb25z
dCB7IHJldHVybiBtX29mZnNldCA9PSBpbnZhbGlkT2Zmc2V0OyB9CisgICAgCisgICAgdW5zaWdu
ZWQgb2Zmc2V0VW5jaGVja2VkKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX29mZnNl
dDsKKyAgICB9CisgICAgCisgICAgdW5zaWduZWQgb2Zmc2V0KCkgY29uc3QKKyAgICB7CisgICAg
ICAgIEFTU0VSVChtX29mZnNldCAhPSBpbnZhbGlkT2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIG1f
b2Zmc2V0OworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgVCYgb3RoZXIp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9vZmZzZXQgPT0gb3RoZXIub2Zmc2V0VW5j
aGVja2VkKCk7CisgICAgfQorICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBUJiBvdGhlcikgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX29mZnNldCAhPSBvdGhlci5vZmZzZXRVbmNoZWNr
ZWQoKTsKKyAgICB9CisgICAgYm9vbCBvcGVyYXRvcjwoY29uc3QgVCYgb3RoZXIpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gbV9vZmZzZXQgPCBvdGhlci5vZmZzZXRVbmNoZWNrZWQoKTsK
KyAgICB9CisgICAgYm9vbCBvcGVyYXRvcj4oY29uc3QgVCYgb3RoZXIpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gbV9vZmZzZXQgPiBvdGhlci5vZmZzZXRVbmNoZWNrZWQoKTsKKyAgICB9
CisgICAgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IFQmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIG1fb2Zmc2V0IDw9IG90aGVyLm9mZnNldFVuY2hlY2tlZCgpOworICAgIH0KKyAg
ICBib29sIG9wZXJhdG9yPj0oY29uc3QgVCYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gbV9vZmZzZXQgPj0gb3RoZXIub2Zmc2V0VW5jaGVja2VkKCk7CisgICAgfQorICAgIAor
ICAgIFQgb3BlcmF0b3IrKGludCB2YWx1ZSkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBU
KG9mZnNldCgpICsgdmFsdWUpOworICAgIH0KKyAgICBUIG9wZXJhdG9yLShpbnQgdmFsdWUpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gVChvZmZzZXQoKSAtIHZhbHVlKTsKKyAgICB9Cisg
ICAgVCYgb3BlcmF0b3IrPShpbnQgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gKnRoaXMg
PSAqdGhpcyArIHZhbHVlOworICAgIH0KKyAgICBUJiBvcGVyYXRvci09KGludCB2YWx1ZSkKKyAg
ICB7CisgICAgICAgIHJldHVybiAqdGhpcyA9ICp0aGlzIC0gdmFsdWU7CisgICAgfQorICAgIAor
cHJpdmF0ZToKKyAgICB1bnNpZ25lZCBtX29mZnNldDsKK307CisKK30gLy8gbmFtZXNwYWNlIEpT
QworCisjZW5kaWYgLy8gR2VuZXJpY09mZnNldF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQXJndW1lbnRzSXRlcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJndW1lbnRzSXRlcmF0b3IuY3BwCShyZXZpc2lv
biAxODA4NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FyZ3VtZW50c0l0
ZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMywgMjAxNSBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMywxMCArMzMsMTggQEAgbmFtZXNwYWNlIEpT
QyB7CiAKIGNvbnN0IENsYXNzSW5mbyBKU0FyZ3VtZW50c0l0ZXJhdG9yOjpzX2luZm8gPSB7ICJB
cmd1bWVudHNJdGVyYXRvciIsICZCYXNlOjpzX2luZm8sIDAsIENSRUFURV9NRVRIT0RfVEFCTEUo
SlNBcmd1bWVudHNJdGVyYXRvcikgfTsKIAotdm9pZCBKU0FyZ3VtZW50c0l0ZXJhdG9yOjpmaW5p
c2hDcmVhdGlvbihWTSYgdm0sIEFyZ3VtZW50cyogYXJndW1lbnRzKQordm9pZCBKU0FyZ3VtZW50
c0l0ZXJhdG9yOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIEpTT2JqZWN0KiBhcmd1bWVudHMpCiB7
CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIG1fYXJndW1lbnRzLnNldCh2bSwg
dGhpcywgYXJndW1lbnRzKTsKIH0KIAorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcmd1
bWVudHNGdW5jSXRlcmF0b3IoRXhlY1N0YXRlKiBleGVjKQoreworICAgIEpTT2JqZWN0KiB0aGlz
T2JqID0gZXhlYy0+dGhpc1ZhbHVlKCkudG9UaGlzKGV4ZWMsIFN0cmljdE1vZGUpLnRvT2JqZWN0
KGV4ZWMpOworICAgIGlmICghdGhpc09iai0+aW5oZXJpdHMoQXJndW1lbnRzOjppbmZvKCkpICYm
ICF0aGlzT2JqLT5pbmhlcml0cyhPdXRPZkJhbmRBcmd1bWVudHM6OmluZm8oKSkpCisgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dUeXBlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFs
KCJBdHRlbXB0ZWQgdG8gdXNlIEFyZ3VtZW50cyBpdGVyYXRvciBvbiBub24tQXJndW1lbnRzIG9i
amVjdCIpKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU0FyZ3VtZW50c0l0ZXJhdG9y
OjpjcmVhdGUoZXhlYy0+dm0oKSwgZXhlYy0+Y2FsbGVlKCktPmdsb2JhbE9iamVjdCgpLT5hcmd1
bWVudHNJdGVyYXRvclN0cnVjdHVyZSgpLCB0aGlzT2JqKSk7Cit9CisKIH0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJndW1lbnRzSXRlcmF0b3IuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FyZ3VtZW50c0l0ZXJhdG9yLmgJ
KHJldmlzaW9uIDE4MDg3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJn
dW1lbnRzSXRlcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMywgMjAxNSBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiw3ICsyNiw3IEBACiAjaWZuZGVm
IEpTQXJndW1lbnRzSXRlcmF0b3JfaAogI2RlZmluZSBKU0FyZ3VtZW50c0l0ZXJhdG9yX2gKIAot
I2luY2x1ZGUgIkFyZ3VtZW50cy5oIgorI2luY2x1ZGUgIkpTT2JqZWN0LmgiCiAKIG5hbWVzcGFj
ZSBKU0MgewogCkBAIC00MSw3ICs0MSw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIFN0cnVj
dHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0
VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwogICAgIH0KIAotICAgIHN0YXRpYyBKU0Fy
Z3VtZW50c0l0ZXJhdG9yKiBjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQXJn
dW1lbnRzKiBhcmd1bWVudHMpCisgICAgc3RhdGljIEpTQXJndW1lbnRzSXRlcmF0b3IqIGNyZWF0
ZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU09iamVjdCogYXJndW1lbnRzKQogICAg
IHsKICAgICAgICAgSlNBcmd1bWVudHNJdGVyYXRvciogaW5zdGFuY2UgPSBuZXcgKE5vdE51bGws
IGFsbG9jYXRlQ2VsbDxKU0FyZ3VtZW50c0l0ZXJhdG9yPih2bS5oZWFwKSkgSlNBcmd1bWVudHNJ
dGVyYXRvcih2bSwgc3RydWN0dXJlKTsKICAgICAgICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9u
KHZtLCBhcmd1bWVudHMpOwpAQCAtNTAsMTEgKzUwLDExIEBAIHB1YmxpYzoKIAogICAgIGJvb2wg
bmV4dChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNWYWx1ZSYgdmFsdWUpCiAgICAgewotICAgICAg
ICBpZiAobV9uZXh0SW5kZXggPj0gbV9hcmd1bWVudHMtPmxlbmd0aChjYWxsRnJhbWUpKQorICAg
ICAgICB1bnNpZ25lZCBsZW5ndGggPQorICAgICAgICAgICAgbV9hcmd1bWVudHMtPmdldChjYWxs
RnJhbWUsIGNhbGxGcmFtZS0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCkudG9VSW50MzIoY2FsbEZy
YW1lKTsKKyAgICAgICAgaWYgKG1fbmV4dEluZGV4ID49IGxlbmd0aCkKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgdmFsdWUgPSBtX2FyZ3VtZW50cy0+dHJ5R2V0QXJndW1lbnQo
bV9uZXh0SW5kZXgrKyk7Ci0gICAgICAgIGlmICghdmFsdWUpCi0gICAgICAgICAgICB2YWx1ZSA9
IGpzVW5kZWZpbmVkKCk7CisgICAgICAgIHZhbHVlID0gbV9hcmd1bWVudHMtPmdldEluZGV4KGNh
bGxGcmFtZSwgbV9uZXh0SW5kZXgrKyk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApA
QCAtNjgsMTIgKzY4LDE0IEBAIHByaXZhdGU6CiAgICAgewogICAgIH0KIAotICAgIHZvaWQgZmlu
aXNoQ3JlYXRpb24oVk0mLCBBcmd1bWVudHMqKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZN
JiwgSlNPYmplY3QqKTsKICAgICAKLSAgICBXcml0ZUJhcnJpZXI8QXJndW1lbnRzPiBtX2FyZ3Vt
ZW50czsKKyAgICBXcml0ZUJhcnJpZXI8SlNPYmplY3Q+IG1fYXJndW1lbnRzOwogICAgIHNpemVf
dCBtX25leHRJbmRleDsKIH07CiAKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJndW1l
bnRzRnVuY0l0ZXJhdG9yKEV4ZWNTdGF0ZSopOworCiB9CiAKICNlbmRpZiAvLyAhZGVmaW5lZChK
U0FyZ3VtZW50c0l0ZXJhdG9yX2gpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0Vudmlyb25tZW50UmVjb3JkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0Vudmlyb25tZW50UmVjb3JkLmNwcAkocmV2aXNpb24gMTgwODc1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNFbnZpcm9ubWVudFJlY29yZC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3
LCAyMDA4LCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAwNywgMjAwOCwgMjAxMiwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM1LDQgKzM1LDEyIEBAIG5h
bWVzcGFjZSBKU0MgewogCiBjb25zdCBDbGFzc0luZm8gSlNFbnZpcm9ubWVudFJlY29yZDo6c19p
bmZvID0geyAiRW52aXJvbm1lbnRSZWNvcmQiLCAmQmFzZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVU
SE9EX1RBQkxFKEpTRW52aXJvbm1lbnRSZWNvcmQpIH07CiAKK3ZvaWQgSlNFbnZpcm9ubWVudFJl
Y29yZDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
eworICAgIEpTRW52aXJvbm1lbnRSZWNvcmQqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNFbnZpcm9u
bWVudFJlY29yZCo+KGNlbGwpOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09i
amVjdCwgaW5mbygpKTsKKyAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0
b3IpOworICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzKHRoaXNPYmplY3QtPnZhcmlhYmxlcygpLCBt
X3N5bWJvbFRhYmxlLT5zY29wZVNpemUoKSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNFbnZpcm9ubWVudFJlY29yZC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRW52aXJvbm1lbnRS
ZWNvcmQuaAkocmV2aXNpb24gMTgwODc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNFbnZpcm9ubWVudFJlY29yZC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NiwxMSArNDYsMjYg
QEAgY2xhc3MgSlNFbnZpcm9ubWVudFJlY29yZCA6IHB1YmxpYyBKU1N5bQogcHVibGljOgogICAg
IHR5cGVkZWYgSlNTeW1ib2xUYWJsZU9iamVjdCBCYXNlOwogCi0gICAgV3JpdGVCYXJyaWVyQmFz
ZTxVbmtub3duPiogcmVnaXN0ZXJzKCkgeyByZXR1cm4gbV9yZWdpc3RlcnM7IH0KLSAgICBXcml0
ZUJhcnJpZXJCYXNlPFVua25vd24+JiByZWdpc3RlckF0KGludCBpbmRleCkgY29uc3QgeyByZXR1
cm4gbV9yZWdpc3RlcnNbaW5kZXhdOyB9CisgICAgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiog
dmFyaWFibGVzKCkKKyAgICB7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8V3JpdGVCYXJy
aWVyQmFzZTxVbmtub3duPio+KGJpdHdpc2VfY2FzdDxjaGFyKj4odGhpcykgKyBvZmZzZXRPZlZh
cmlhYmxlcygpKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc1ZhbGlkKFNjb3BlT2Zmc2V0IG9m
ZnNldCkKKyAgICB7CisgICAgICAgIHJldHVybiAhIW9mZnNldCAmJiBvZmZzZXQub2Zmc2V0KCkg
PCBtX3N5bWJvbFRhYmxlLT5zY29wZVNpemUoKTsKKyAgICB9CisgICAgCisgICAgV3JpdGVCYXJy
aWVyQmFzZTxVbmtub3duPiYgdmFyaWFibGVBdChTY29wZU9mZnNldCBvZmZzZXQpIGNvbnN0Cisg
ICAgeworICAgICAgICBBU1NFUlQoaXNWYWxpZChvZmZzZXQpKTsKKyAgICAgICAgcmV0dXJuIHZh
cmlhYmxlcygpW29mZnNldC5vZmZzZXQoKV07CisgICAgfQogCi0gICAgV3JpdGVCYXJyaWVyQmFz
ZTxVbmtub3duPiogY29uc3QgKiBhZGRyZXNzT2ZSZWdpc3RlcnMoKSBjb25zdCB7IHJldHVybiAm
bV9yZWdpc3RlcnM7IH0KLSAgICBzdGF0aWMgc2l6ZV90IG9mZnNldE9mUmVnaXN0ZXJzKCkgeyBy
ZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTRW52aXJvbm1lbnRSZWNvcmQsIG1fcmVnaXN0ZXJzKTsg
fQorICAgIHN0YXRpYyBzaXplX3Qgb2Zmc2V0T2ZWYXJpYWJsZXMoKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZjxzaXplb2YoV3JpdGVCYXJyaWVyPFVua25v
d24+KT4oc2l6ZW9mKEpTRW52aXJvbm1lbnRSZWNvcmQpKTsKKyAgICB9CiAKICAgICBERUNMQVJF
X0lORk87CiAKQEAgLTYwLDE1ICs3NSwzNSBAQCBwcm90ZWN0ZWQ6CiAgICAgSlNFbnZpcm9ubWVu
dFJlY29yZCgKICAgICAgICAgVk0mIHZtLAogICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwK
LSAgICAgICAgUmVnaXN0ZXIqIHJlZ2lzdGVycywKICAgICAgICAgSlNTY29wZSogc2NvcGUsCiAg
ICAgICAgIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSkKICAgICAgICAgOiBCYXNlKHZtLCBzdHJ1
Y3R1cmUsIHNjb3BlLCBzeW1ib2xUYWJsZSkKLSAgICAgICAgLCBtX3JlZ2lzdGVycyhyZWludGVy
cHJldF9jYXN0PFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qPihyZWdpc3RlcnMpKQogICAgIHsK
ICAgICB9Ci0KLSAgICBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiBtX3JlZ2lzdGVyczsgLy8g
InIiIGluIHRoZSBzdGFjay4KKyAgICAKKyAgICBzdGF0aWMgc2l6ZV90IGFsbG9jYXRpb25TaXpl
Rm9yU2NvcGVTaXplKHVuc2lnbmVkIHNjb3BlU2l6ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBv
ZmZzZXRPZlZhcmlhYmxlcygpICsgc2NvcGVTaXplICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtu
b3duPik7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBzaXplX3QgYWxsb2NhdGlvblNpemUoU3lt
Ym9sVGFibGUqIHN5bWJvbFRhYmxlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFsbG9jYXRpb25T
aXplRm9yU2NvcGVTaXplKHN5bWJvbFRhYmxlLT5zY29wZVNpemUoKSk7CisgICAgfQorICAgIAor
ICAgIHZvaWQgZmluaXNoQ3JlYXRpb25VbmluaXRpYWxpemVkKFZNJiB2bSkKKyAgICB7CisgICAg
ICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBmaW5p
c2hDcmVhdGlvbihWTSYgdm0pCisgICAgeworICAgICAgICBmaW5pc2hDcmVhdGlvblVuaW5pdGlh
bGl6ZWQodm0pOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX3N5bWJvbFRhYmxlLT5zY29w
ZVNpemUoKTsgaS0tOykgeworICAgICAgICAgICAgLy8gRmlsbGluZyB0aGlzIHdpdGggdW5kZWZp
bmVkIGlzIHVzZWZ1bCBiZWNhdXNlIHRoYXQncyB3aGF0IHZhcmlhYmxlcyBzdGFydCBvdXQgYXMu
CisgICAgICAgICAgICB2YXJpYWJsZUF0KGkpLnNldFVuZGVmaW5lZCgpOworICAgICAgICB9Cisg
ICAgfQogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0xleGljYWxFbnZpcm9ubWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMZXhpY2FsRW52aXJvbm1lbnQuY3BwCShyZXZpc2lv
biAxODA4NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xleGljYWxFbnZp
cm9ubWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDA4LCAyMDA5LCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSwgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQwLDI3
ICs0MCwxOSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY29uc3QgQ2xhc3NJbmZvIEpTTGV4aWNhbEVu
dmlyb25tZW50OjpzX2luZm8gPSB7ICJKU0xleGljYWxFbnZpcm9ubWVudCIsICZCYXNlOjpzX2lu
Zm8sIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNMZXhpY2FsRW52aXJvbm1lbnQpIH07CiAKLXZv
aWQgSlNMZXhpY2FsRW52aXJvbm1lbnQ6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90
VmlzaXRvciYgdmlzaXRvcikKLXsKLSAgICBKU0xleGljYWxFbnZpcm9ubWVudCogdGhpc09iamVj
dCA9IGpzQ2FzdDxKU0xleGljYWxFbnZpcm9ubWVudCo+KGNlbGwpOwotICAgIEFTU0VSVF9HQ19P
QkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKLSAgICBCYXNlOjp2aXNpdENoaWxk
cmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0aGlz
T2JqZWN0LT5zeW1ib2xUYWJsZSgpLT5jYXB0dXJlQ291bnQoKTsgKytpKQotICAgICAgICB2aXNp
dG9yLmFwcGVuZCgmdGhpc09iamVjdC0+c3RvcmFnZSgpW2ldKTsKLX0KLQogaW5saW5lIGJvb2wg
SlNMZXhpY2FsRW52aXJvbm1lbnQ6OnN5bWJvbFRhYmxlR2V0KFByb3BlcnR5TmFtZSBwcm9wZXJ0
eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBTeW1ib2xUYWJsZUVudHJ5IGVudHJ5
ID0gc3ltYm9sVGFibGUoKS0+aW5saW5lR2V0KHByb3BlcnR5TmFtZS51aWQoKSk7CiAgICAgaWYg
KGVudHJ5LmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICBTY29wZU9mZnNl
dCBvZmZzZXQgPSBlbnRyeS5zY29wZU9mZnNldCgpOworCiAgICAgLy8gRGVmZW5kIGFnYWluc3Qg
dGhlIGluc3BlY3RvciBhc2tpbmcgZm9yIGEgdmFyIGFmdGVyIGl0IGhhcyBiZWVuIG9wdGltaXpl
ZCBvdXQuCi0gICAgaWYgKCFpc1ZhbGlkKGVudHJ5KSkKKyAgICBpZiAoIWlzVmFsaWQob2Zmc2V0
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgc2xvdC5zZXRWYWx1ZSh0aGlzLCBEb250
RW51bSwgcmVnaXN0ZXJBdChlbnRyeS5nZXRJbmRleCgpKS5nZXQoKSk7CisgICAgc2xvdC5zZXRW
YWx1ZSh0aGlzLCBEb250RW51bSwgdmFyaWFibGVBdChvZmZzZXQpLmdldCgpKTsKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIApAQCAtNzAsMTEgKzYyLDEzIEBAIGlubGluZSBib29sIEpTTGV4aWNhbEVu
dmlyb25tZW50OjpzeW1ib2wKICAgICBpZiAoZW50cnkuaXNOdWxsKCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAorICAgIFNjb3BlT2Zmc2V0IG9mZnNldCA9IGVudHJ5LnNjb3BlT2Zmc2V0KCk7
CisKICAgICAvLyBEZWZlbmQgYWdhaW5zdCB0aGUgaW5zcGVjdG9yIGFza2luZyBmb3IgYSB2YXIg
YWZ0ZXIgaXQgaGFzIGJlZW4gb3B0aW1pemVkIG91dC4KLSAgICBpZiAoIWlzVmFsaWQoZW50cnkp
KQorICAgIGlmICghaXNWYWxpZChvZmZzZXQpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAg
ICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3IocmVnaXN0ZXJBdChlbnRyeS5nZXRJbmRleCgpKS5n
ZXQoKSwgZW50cnkuZ2V0QXR0cmlidXRlcygpKTsKKyAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0
b3IodmFyaWFibGVBdChvZmZzZXQpLmdldCgpLCBlbnRyeS5nZXRBdHRyaWJ1dGVzKCkpOwogICAg
IHJldHVybiB0cnVlOwogfQogCkBAIC05NSwxMiArODksMTMgQEAgaW5saW5lIGJvb2wgSlNMZXhp
Y2FsRW52aXJvbm1lbnQ6OnN5bWJvbAogICAgICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4
ZWMsIFN0cmljdE1vZGVSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7CiAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICAgICAgfQorICAgICAgICBTY29wZU9mZnNldCBvZmZzZXQgPSBpdGVy
LT52YWx1ZS5zY29wZU9mZnNldCgpOwogICAgICAgICAvLyBEZWZlbmQgYWdhaW5zdCB0aGUgaW5z
cGVjdG9yIGFza2luZyBmb3IgYSB2YXIgYWZ0ZXIgaXQgaGFzIGJlZW4gb3B0aW1pemVkIG91dC4K
LSAgICAgICAgaWYgKCFpc1ZhbGlkKGl0ZXItPnZhbHVlKSkKKyAgICAgICAgaWYgKCFpc1ZhbGlk
KG9mZnNldCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGlmIChWYXJpYWJs
ZVdhdGNocG9pbnRTZXQqIHNldCA9IGl0ZXItPnZhbHVlLndhdGNocG9pbnRTZXQoKSkKLSAgICAg
ICAgICAgIHNldC0+aW52YWxpZGF0ZShWYXJpYWJsZVdyaXRlRmlyZURldGFpbCh0aGlzLCBwcm9w
ZXJ0eU5hbWUpKTsgLy8gRG9uJ3QgbWVzcyBhcm91bmQgLSBpZiB3ZSBoYWQgZm91bmQgdGhpcyBz
dGF0aWNhbGx5LCB3ZSB3b3VsZCBoYXZlIGludmNhbGlkYXRlZCBpdC4KLSAgICAgICAgcmVnID0g
JnJlZ2lzdGVyQXQoaXRlci0+dmFsdWUuZ2V0SW5kZXgoKSk7CisgICAgICAgICAgICBzZXQtPmlu
dmFsaWRhdGUoVmFyaWFibGVXcml0ZUZpcmVEZXRhaWwodGhpcywgcHJvcGVydHlOYW1lKSk7IC8v
IERvbid0IG1lc3MgYXJvdW5kIC0gaWYgd2UgaGFkIGZvdW5kIHRoaXMgc3RhdGljYWxseSwgd2Ug
d291bGQgaGF2ZSBpbnZhbGlkYXRlZCBpdC4KKyAgICAgICAgcmVnID0gJnZhcmlhYmxlQXQob2Zm
c2V0KTsKICAgICB9CiAgICAgcmVnLT5zZXQodm0sIHRoaXMsIHZhbHVlKTsKICAgICByZXR1cm4g
dHJ1ZTsKQEAgLTExNiw3ICsxMTEsNyBAQCB2b2lkIEpTTGV4aWNhbEVudmlyb25tZW50OjpnZXRP
d25Ob25JbmRlCiAgICAgICAgIGZvciAoU3ltYm9sVGFibGU6Ok1hcDo6aXRlcmF0b3IgaXQgPSB0
aGlzT2JqZWN0LT5zeW1ib2xUYWJsZSgpLT5iZWdpbihsb2NrZXIpOyBpdCAhPSBlbmQ7ICsraXQp
IHsKICAgICAgICAgICAgIGlmIChpdC0+dmFsdWUuZ2V0QXR0cmlidXRlcygpICYgRG9udEVudW0g
JiYgIXNob3VsZEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMobW9kZSkpCiAgICAgICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgICAgICBpZiAoIXRoaXNPYmplY3QtPmlzVmFsaWQoaXQtPnZh
bHVlKSkKKyAgICAgICAgICAgIGlmICghdGhpc09iamVjdC0+aXNWYWxpZChpdC0+dmFsdWUuc2Nv
cGVPZmZzZXQoKSkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBwcm9w
ZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyKGV4ZWMsIGl0LT5rZXkuZ2V0KCkpKTsKICAgICAgICAg
fQpAQCAtMTM3LDExICsxMzIsMTMgQEAgaW5saW5lIGJvb2wgSlNMZXhpY2FsRW52aXJvbm1lbnQ6
OnN5bWJvbAogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBTeW1ib2xUYWJsZUVu
dHJ5JiBlbnRyeSA9IGl0ZXItPnZhbHVlOwogICAgICAgICBBU1NFUlQoIWVudHJ5LmlzTnVsbCgp
KTsKLSAgICAgICAgaWYgKCFpc1ZhbGlkKGVudHJ5KSkKKyAgICAgICAgCisgICAgICAgIFNjb3Bl
T2Zmc2V0IG9mZnNldCA9IGVudHJ5LnNjb3BlT2Zmc2V0KCk7CisgICAgICAgIGlmICghaXNWYWxp
ZChvZmZzZXQpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKICAgICAgICAg
ZW50cnkuc2V0QXR0cmlidXRlcyhhdHRyaWJ1dGVzKTsKLSAgICAgICAgcmVnID0gJnJlZ2lzdGVy
QXQoZW50cnkuZ2V0SW5kZXgoKSk7CisgICAgICAgIHJlZyA9ICZ2YXJpYWJsZUF0KG9mZnNldCk7
CiAgICAgfQogICAgIHJlZy0+c2V0KHZtLCB0aGlzLCB2YWx1ZSk7CiAgICAgcmV0dXJuIHRydWU7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xleGljYWxFbnZpcm9ubWVu
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTGV4aWNh
bEVudmlyb25tZW50LmgJKHJldmlzaW9uIDE4MDg3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTTGV4aWNhbEVudmlyb25tZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5LCAyMDEzLCAyMDE0IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSwg
MjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtNDEsMzMgKzQxLDI3IEBAIGNsYXNzIFJlZ2lzdGVyOwogICAg
IAogY2xhc3MgSlNMZXhpY2FsRW52aXJvbm1lbnQgOiBwdWJsaWMgSlNFbnZpcm9ubWVudFJlY29y
ZCB7CiBwcml2YXRlOgotICAgIEpTTGV4aWNhbEVudmlyb25tZW50KFZNJiwgQ2FsbEZyYW1lKiwg
UmVnaXN0ZXIqLCBKU1Njb3BlKiwgQ29kZUJsb2NrKik7CisgICAgSlNMZXhpY2FsRW52aXJvbm1l
bnQoVk0mLCBTdHJ1Y3R1cmUqLCBKU1Njb3BlKiwgU3ltYm9sVGFibGUqKTsKICAgICAKIHB1Ymxp
YzoKICAgICB0eXBlZGVmIEpTRW52aXJvbm1lbnRSZWNvcmQgQmFzZTsKIAotICAgIHN0YXRpYyBK
U0xleGljYWxFbnZpcm9ubWVudCogY3JlYXRlKFZNJiB2bSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUs
IFJlZ2lzdGVyKiByZWdpc3RlcnMsIEpTU2NvcGUqIGN1cnJlbnRTY29wZSwgQ29kZUJsb2NrKiBj
b2RlQmxvY2spCisgICAgc3RhdGljIEpTTGV4aWNhbEVudmlyb25tZW50KiBjcmVhdGUoCisgICAg
ICAgIFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNTY29wZSogY3VycmVu
dFNjb3BlLCBTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUpCiAgICAgewotICAgICAgICBTeW1ib2xU
YWJsZSogc3ltYm9sVGFibGUgPSBjb2RlQmxvY2stPnN5bWJvbFRhYmxlKCk7Ci0gICAgICAgIEFT
U0VSVChjb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlKTsKLSAgICAgICAgSlNM
ZXhpY2FsRW52aXJvbm1lbnQqIGxleGljYWxFbnZpcm9ubWVudCA9IG5ldyAoCi0gICAgICAgICAg
ICBOb3ROdWxsLAotICAgICAgICAgICAgYWxsb2NhdGVDZWxsPEpTTGV4aWNhbEVudmlyb25tZW50
PigKLSAgICAgICAgICAgICAgICB2bS5oZWFwLAotICAgICAgICAgICAgICAgIGFsbG9jYXRpb25T
aXplKHN5bWJvbFRhYmxlKQotICAgICAgICAgICAgKQotICAgICAgICApIEpTTGV4aWNhbEVudmly
b25tZW50KHZtLCBjYWxsRnJhbWUsIHJlZ2lzdGVycywgY3VycmVudFNjb3BlLCBjb2RlQmxvY2sp
OwotICAgICAgICBsZXhpY2FsRW52aXJvbm1lbnQtPmZpbmlzaENyZWF0aW9uKHZtKTsKLSAgICAg
ICAgcmV0dXJuIGxleGljYWxFbnZpcm9ubWVudDsKKyAgICAgICAgSlNMZXhpY2FsRW52aXJvbm1l
bnQqIHJlc3VsdCA9CisgICAgICAgICAgICBuZXcgKE5vdE51bGwsIGFsbG9jYXRpb25TaXplKHN5
bWJvbFRhYmxlKSkKKyAgICAgICAgICAgIEpTTGV4aWNhbEVudmlyb25tZW50KHZtLCBnbG9iYWxP
YmplY3QtPmFjdGl2YXRpb25TdHJ1Y3R1cmUoKSwgY3VycmVudFNjb3BlLCBzeW1ib2xUYWJsZSk7
CisgICAgICAgIHJlc3VsdC0+ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIH0KLSAgICAgICAgCisg
ICAgCiAgICAgc3RhdGljIEpTTGV4aWNhbEVudmlyb25tZW50KiBjcmVhdGUoVk0mIHZtLCBDYWxs
RnJhbWUqIGNhbGxGcmFtZSwgSlNTY29wZSogY3VycmVudFNjb3BlLCBDb2RlQmxvY2sqIGNvZGVC
bG9jaykKICAgICB7Ci0gICAgICAgIHJldHVybiBjcmVhdGUodm0sIGNhbGxGcmFtZSwgY2FsbEZy
YW1lLT5yZWdpc3RlcnMoKSArIGNvZGVCbG9jay0+ZnJhbWVQb2ludGVyT2Zmc2V0VG9HZXRBY3Rp
dmF0aW9uUmVnaXN0ZXJzKCksIGN1cnJlbnRTY29wZSwgY29kZUJsb2NrKTsKKyAgICAgICAgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGNhbGxGcmFtZS0+bGV4aWNhbEdsb2JhbE9iamVj
dCgpOworICAgICAgICBTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUgPSBjb2RlQmxvY2stPnN5bWJv
bFRhYmxlKCk7CisgICAgICAgIHJldHVybiBjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgY3VycmVu
dFNjb3BlLCBzeW1ib2x0YWJsZSk7CiAgICAgfQotCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGls
ZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwotCisgICAgICAgIAogICAgIHN0YXRpYyBib29s
IGdldE93blByb3BlcnR5U2xvdChKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwg
UHJvcGVydHlTbG90Jik7CiAgICAgc3RhdGljIHZvaWQgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5h
bWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlv
bk1vZGUpOwogCkBAIC04MSwxMiArNzUsNiBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgU3RydWN0
dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
KSB7IHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBqc051bGwoKSwg
VHlwZUluZm8oQWN0aXZhdGlvbk9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsg
fQogCi0gICAgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiYgcmVnaXN0ZXJBdChpbnQpIGNvbnN0
OwotICAgIGJvb2wgaXNWYWxpZEluZGV4KGludCkgY29uc3Q7Ci0gICAgYm9vbCBpc1ZhbGlkKGNv
bnN0IFN5bWJvbFRhYmxlRW50cnkmKSBjb25zdDsKLSAgICBpbnQgcmVnaXN0ZXJzT2Zmc2V0KCk7
Ci0gICAgc3RhdGljIGludCByZWdpc3RlcnNPZmZzZXQoU3ltYm9sVGFibGUqKTsKLQogcHJvdGVj
dGVkOgogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRl
c0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMgfCBCYXNlOjpT
dHJ1Y3R1cmVGbGFnczsKIApAQCAtOTYsMzIgKzg0LDEzIEBAIHByaXZhdGU6CiAgICAgYm9vbCBz
eW1ib2xUYWJsZUdldChQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYsIGJvb2wmIHNsb3RJc1dy
aXRlYWJsZSk7CiAgICAgYm9vbCBzeW1ib2xUYWJsZVB1dChFeGVjU3RhdGUqLCBQcm9wZXJ0eU5h
bWUsIEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpOwogICAgIGJvb2wgc3ltYm9sVGFibGVQdXRX
aXRoQXR0cmlidXRlcyhWTSYsIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgdW5zaWduZWQgYXR0cmli
dXRlcyk7Ci0KLSAgICBzdGF0aWMgc2l6ZV90IGFsbG9jYXRpb25TaXplKFN5bWJvbFRhYmxlKik7
Ci0gICAgc3RhdGljIHNpemVfdCBzdG9yYWdlT2Zmc2V0KCk7Ci0KLSAgICBXcml0ZUJhcnJpZXI8
VW5rbm93bj4qIHN0b3JhZ2UoKTsgLy8gY2FwdHVyZUNvdW50KCkgbnVtYmVyIG9mIHJlZ2lzdGVy
cy4KIH07CiAKLWlubGluZSBKU0xleGljYWxFbnZpcm9ubWVudDo6SlNMZXhpY2FsRW52aXJvbm1l
bnQoVk0mIHZtLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgUmVnaXN0ZXIqIHJlZ2lzdGVycywgSlNT
Y29wZSogY3VycmVudFNjb3BlLCBDb2RlQmxvY2sqIGNvZGVCbG9jaykKLSAgICA6IEJhc2UoCi0g
ICAgICAgIHZtLAotICAgICAgICBjYWxsRnJhbWUtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+YWN0
aXZhdGlvblN0cnVjdHVyZSgpLAotICAgICAgICByZWdpc3RlcnMsCi0gICAgICAgIGN1cnJlbnRT
Y29wZSwKLSAgICAgICAgY29kZUJsb2NrLT5zeW1ib2xUYWJsZSgpKQoraW5saW5lIEpTTGV4aWNh
bEVudmlyb25tZW50OjpKU0xleGljYWxFbnZpcm9ubWVudChWTSYgdm0sIFN0cnVjdHVyZSogc3Ry
dWN0dXJlLCBKU1Njb3BlKiBjdXJyZW50U2NvcGUsIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSkK
KyAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSwgY3VycmVudFNjb3BlLCBzeW1ib2xUYWJsZSkKIHsK
LSAgICBTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUgPSBjb2RlQmxvY2stPnN5bWJvbFRhYmxlKCk7
Ci0gICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiBzdG9yYWdlID0gdGhpcy0+c3RvcmFnZSgpOwot
ICAgIHNpemVfdCBjYXB0dXJlQ291bnQgPSBzeW1ib2xUYWJsZS0+Y2FwdHVyZUNvdW50KCk7Ci0g
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjYXB0dXJlQ291bnQ7ICsraSkKLSAgICAgICAgbmV3
IChOb3ROdWxsLCAmc3RvcmFnZVtpXSkgV3JpdGVCYXJyaWVyPFVua25vd24+KFVuZGVmaW5lZFdy
aXRlQmFycmllclRhZyk7Ci0gICAgbV9yZWdpc3RlcnMgPSByZWludGVycHJldF9jYXN0X3B0cjxX
cml0ZUJhcnJpZXJCYXNlPFVua25vd24+Kj4oCi0gICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hh
cio+KHRoaXMpICsgcmVnaXN0ZXJzT2Zmc2V0KHN5bWJvbFRhYmxlKSk7CiB9CiAKLUpTTGV4aWNh
bEVudmlyb25tZW50KiBhc0FjdGl2YXRpb24oSlNWYWx1ZSk7Ci0KIGlubGluZSBKU0xleGljYWxF
bnZpcm9ubWVudCogYXNBY3RpdmF0aW9uKEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgQVNTRVJUKGFz
T2JqZWN0KHZhbHVlKS0+aW5oZXJpdHMoSlNMZXhpY2FsRW52aXJvbm1lbnQ6OmluZm8oKSkpOwpA
QCAtMTMzLDQ5ICsxMDIsNiBAQCBBTFdBWVNfSU5MSU5FIEpTTGV4aWNhbEVudmlyb25tZW50KiBS
ZWdpCiAgICAgcmV0dXJuIGFzQWN0aXZhdGlvbihqc1ZhbHVlKCkpOwogfQogCi1pbmxpbmUgaW50
IEpTTGV4aWNhbEVudmlyb25tZW50OjpyZWdpc3RlcnNPZmZzZXQoU3ltYm9sVGFibGUqIHN5bWJv
bFRhYmxlKQotewotICAgIHJldHVybiBzdG9yYWdlT2Zmc2V0KCkgKyAoKHN5bWJvbFRhYmxlLT5j
YXB0dXJlQ291bnQoKSAtIHN5bWJvbFRhYmxlLT5jYXB0dXJlU3RhcnQoKSAgLSAxKSAqIHNpemVv
ZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKTsKLX0KLQotaW5saW5lIHNpemVfdCBKU0xleGljYWxF
bnZpcm9ubWVudDo6c3RvcmFnZU9mZnNldCgpCi17Ci0gICAgcmV0dXJuIFdURjo6cm91bmRVcFRv
TXVsdGlwbGVPZjxzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KT4oc2l6ZW9mKEpTTGV4aWNh
bEVudmlyb25tZW50KSk7Ci19Ci0KLWlubGluZSBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIEpTTGV4
aWNhbEVudmlyb25tZW50OjpzdG9yYWdlKCkKLXsKLSAgICByZXR1cm4gcmVpbnRlcnByZXRfY2Fz
dF9wdHI8V3JpdGVCYXJyaWVyPFVua25vd24+Kj4oCi0gICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8
Y2hhcio+KHRoaXMpICsgc3RvcmFnZU9mZnNldCgpKTsKLX0KLQotaW5saW5lIHNpemVfdCBKU0xl
eGljYWxFbnZpcm9ubWVudDo6YWxsb2NhdGlvblNpemUoU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxl
KQotewotICAgIHNpemVfdCBvYmplY3RTaXplSW5CeXRlcyA9IFdURjo6cm91bmRVcFRvTXVsdGlw
bGVPZjxzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KT4oc2l6ZW9mKEpTTGV4aWNhbEVudmly
b25tZW50KSk7Ci0gICAgc2l6ZV90IHN0b3JhZ2VTaXplSW5CeXRlcyA9IHN5bWJvbFRhYmxlLT5j
YXB0dXJlQ291bnQoKSAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pOwotICAgIHJldHVy
biBvYmplY3RTaXplSW5CeXRlcyArIHN0b3JhZ2VTaXplSW5CeXRlczsKLX0KLQotaW5saW5lIGJv
b2wgSlNMZXhpY2FsRW52aXJvbm1lbnQ6OmlzVmFsaWRJbmRleChpbnQgaW5kZXgpIGNvbnN0Ci17
Ci0gICAgaWYgKGluZGV4ID4gc3ltYm9sVGFibGUoKS0+Y2FwdHVyZVN0YXJ0KCkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBpZiAoaW5kZXggPD0gc3ltYm9sVGFibGUoKS0+Y2FwdHVyZUVu
ZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWlubGlu
ZSBib29sIEpTTGV4aWNhbEVudmlyb25tZW50Ojppc1ZhbGlkKGNvbnN0IFN5bWJvbFRhYmxlRW50
cnkmIGVudHJ5KSBjb25zdAotewotICAgIHJldHVybiBpc1ZhbGlkSW5kZXgoZW50cnkuZ2V0SW5k
ZXgoKSk7Ci19Ci0KLWlubGluZSBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+JiBKU0xleGljYWxF
bnZpcm9ubWVudDo6cmVnaXN0ZXJBdChpbnQgaW5kZXgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKGlz
VmFsaWRJbmRleChpbmRleCkpOwotICAgIHJldHVybiBCYXNlOjpyZWdpc3RlckF0KGluZGV4KTsK
LX0KLQogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBKU0xleGljYWxFbnZpcm9ubWVu
dF9oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU05hbWVTY29wZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNOYW1lU2NvcGUu
Y3BwCShyZXZpc2lvbiAxODA4NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U05hbWVTY29wZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDE0ICs0Nyw2IEBAIEpTTmFtZVNj
b3BlKiBKU05hbWVTY29wZTo6Y3JlYXRlKFZNJiB2bSwKICAgICByZXR1cm4gbnVsbHB0cjsKIH0K
IAotdm9pZCBKU05hbWVTY29wZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQotewotICAgIEpTTmFtZVNjb3BlKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpT
TmFtZVNjb3BlKj4oY2VsbCk7Ci0gICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2Jq
ZWN0LCBpbmZvKCkpOwotICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRv
cik7Ci0gICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fcmVnaXN0ZXJTdG9yZSk7Ci19
Ci0KIEpTVmFsdWUgSlNOYW1lU2NvcGU6OnRvVGhpcyhKU0NlbGwqLCBFeGVjU3RhdGUqIGV4ZWMs
IEVDTUFNb2RlIGVjbWFNb2RlKQogewogICAgIGlmIChlY21hTW9kZSA9PSBTdHJpY3RNb2RlKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNOYW1lU2NvcGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU05hbWVTY29wZS5oCShyZXZp
c2lvbiAxODA4NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU05hbWVTY29w
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCwzOCArNDQsMzcgQEAgcHVibGljOgogICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+CiAgICAgc3RhdGljIFQqIGNyZWF0ZShWTSYgdm0sIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTU2NvcGUqIGN1cnJlbnRTY29wZSwgU3ltYm9sVGFibGUqIHN5
bWJvbFRhYmxlLCBKU1ZhbHVlIHZhbHVlKQogICAgIHsKLSAgICAgICAgVCogc2NvcGVPYmplY3Qg
PSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxUPih2bS5oZWFwKSkgVCh2bSwgZ2xvYmFsT2Jq
ZWN0LCBjdXJyZW50U2NvcGUsIHN5bWJvbFRhYmxlKTsKKyAgICAgICAgVCogc2NvcGVPYmplY3Qg
PSBuZXcgKAorICAgICAgICAgICAgTm90TnVsbCwgYWxsb2NhdGVDZWxsPFQ+KHZtLmhlYXAsIGFs
bG9jYXRpb25TaXplRm9yU2NvcGVTaXplKDEpKQorICAgICAgICAgICAgVCh2bSwgZ2xvYmFsT2Jq
ZWN0LCBjdXJyZW50U2NvcGUsIHN5bWJvbFRhYmxlKTsKICAgICAgICAgc2NvcGVPYmplY3QtPmZp
bmlzaENyZWF0aW9uKHZtLCB2YWx1ZSk7CiAgICAgICAgIHJldHVybiBzY29wZU9iamVjdDsKICAg
ICB9CiAgICAgCiAgICAgc3RhdGljIEpTTmFtZVNjb3BlKiBjcmVhdGUoVk0mLCBKU0dsb2JhbE9i
amVjdCosIEpTU2NvcGUqIGN1cnJlbnRTY29wZSwgU3ltYm9sVGFibGUqLCBKU1ZhbHVlLCBUeXBl
KTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3Im
KTsKICAgICBzdGF0aWMgSlNWYWx1ZSB0b1RoaXMoSlNDZWxsKiwgRXhlY1N0YXRlKiwgRUNNQU1v
ZGUpOwogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU09iamVjdCosIEV4ZWNT
dGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CiAgICAgc3RhdGljIHZvaWQgcHV0
KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlT
bG90Jik7CiAKICAgICBERUNMQVJFX0lORk87CiAKLSAgICBKU1ZhbHVlIHZhbHVlKCkgY29uc3Qg
eyByZXR1cm4gbV9yZWdpc3RlclN0b3JlLmdldCgpOyB9CisgICAgSlNWYWx1ZSB2YWx1ZSgpIGNv
bnN0IHsgcmV0dXJuIHZhcmlhYmxlQXQoMCkuZ2V0KCk7IH0KIAogcHJvdGVjdGVkOgogICAgIHZv
aWQgZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBKU1ZhbHVlIHZhbHVlKQogICAgIHsKLSAgICAgICAg
QmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwotICAgICAgICBtX3JlZ2lzdGVyU3RvcmUuc2V0KHZt
LCB0aGlzLCB2YWx1ZSk7CisgICAgICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uVW5pbml0aWFsaXpl
ZCh2bSk7CisgICAgICAgIHZhcmlhYmxlQXQoMCkuc2V0KHZtLCB0aGlzLCB2YWx1ZSk7CiAgICAg
fQogCiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVz
R2V0T3duUHJvcGVydHlTbG90IHwgQmFzZTo6U3RydWN0dXJlRmxhZ3M7CiAKICAgICBKU05hbWVT
Y29wZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU1Njb3BlKiBuZXh0LCBTeW1ib2xU
YWJsZSogc3ltYm9sVGFibGUpCi0gICAgICAgIDogQmFzZSh2bSwgc3RydWN0dXJlLCByZWludGVy
cHJldF9jYXN0PFJlZ2lzdGVyKj4oJm1fcmVnaXN0ZXJTdG9yZSArIDEpLCBuZXh0LCBzeW1ib2xU
YWJsZSkKKyAgICAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUsIG5leHQsIHN5bWJvbFRhYmxlKQog
ICAgIHsKKyAgICAgICAgQVNTRVJUKHN5bWJvbFRhYmxlLT5zY29wZVNpemUoKSA9PSAxKTsKICAg
ICB9Ci0KLXByaXZhdGU6Ci0gICAgV3JpdGVCYXJyaWVyPFVua25vd24+IG1fcmVnaXN0ZXJTdG9y
ZTsKIH07CiAKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVu
dGVkVmFyaWFibGVPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuY3BwCShyZXZpc2lvbiAxODA4NzUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2Jq
ZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEyLCAyMDEzLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzMsMzIgKzMzLDMwIEBACiAKIG5h
bWVzcGFjZSBKU0MgewogCi1pbnQgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdDo6ZmluZFJlZ2lz
dGVySW5kZXgodm9pZCogcmVnaXN0ZXJBZGRyZXNzKQorU2NvcGVPZmZzZXQgSlNTZWdtZW50ZWRW
YXJpYWJsZU9iamVjdDo6ZmluZFJlZ2lzdGVySW5kZXgodm9pZCogcmVnaXN0ZXJBZGRyZXNzKQog
ewogICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7CiAgICAgCi0gICAgZm9y
IChpbnQgaSA9IG1fcmVnaXN0ZXJzLnNpemUoKTsgaS0tOykgeworICAgIGZvciAodW5zaWduZWQg
aSA9IG1fcmVnaXN0ZXJzLnNpemUoKTsgaS0tOykgewogICAgICAgICBpZiAoJm1fcmVnaXN0ZXJz
W2ldICE9IHJlZ2lzdGVyQWRkcmVzcykKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBy
ZXR1cm4gaTsKKyAgICAgICAgcmV0dXJuIFNjb3BlT2Zmc2V0KGkpOwogICAgIH0KICAgICBDUkFT
SCgpOwotICAgIHJldHVybiAtMTsKKyAgICByZXR1cm4gU2NvcGVPZmZzZXQoKTsKIH0KIAotaW50
IEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3Q6OmFkZFJlZ2lzdGVycyhpbnQgbnVtYmVyT2ZSZWdp
c3RlcnNUb0FkZCkKK1Njb3BlT2Zmc2V0IEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3Q6OmFkZFJl
Z2lzdGVycyh1bnNpZ25lZCBudW1iZXJPZlJlZ2lzdGVyc1RvQWRkKQogewogICAgIENvbmN1cnJl
bnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7CiAgICAgCi0gICAgQVNTRVJUKG51bWJlck9mUmVn
aXN0ZXJzVG9BZGQgPj0gMCk7Ci0gICAgCiAgICAgc2l6ZV90IG9sZFNpemUgPSBtX3JlZ2lzdGVy
cy5zaXplKCk7CiAgICAgbV9yZWdpc3RlcnMuZ3JvdyhvbGRTaXplICsgbnVtYmVyT2ZSZWdpc3Rl
cnNUb0FkZCk7CiAgICAgCiAgICAgZm9yIChzaXplX3QgaSA9IG51bWJlck9mUmVnaXN0ZXJzVG9B
ZGQ7IGktLTspCiAgICAgICAgIG1fcmVnaXN0ZXJzW29sZFNpemUgKyBpXS5zZXRXaXRob3V0V3Jp
dGVCYXJyaWVyKGpzVW5kZWZpbmVkKCkpOwogICAgIAotICAgIHJldHVybiBzdGF0aWNfY2FzdDxp
bnQ+KG9sZFNpemUpOworICAgIHJldHVybiBTY29wZU9mZnNldChvbGRTaXplKTsKIH0KIAogdm9p
ZCBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwg
U2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuaAkocmV2aXNp
b24gMTgwODc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRW
YXJpYWJsZU9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC01NywyNCArNTcsMjMgQEAgY2xhc3Mg
SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdCA6IHB1YmxpYwogcHVibGljOgogICAgIHR5cGVkZWYg
SlNTeW1ib2xUYWJsZU9iamVjdCBCYXNlOwogCi0gICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiBy
ZWdpc3RlckF0KGludCBpbmRleCkgeyByZXR1cm4gbV9yZWdpc3RlcnNbaW5kZXhdOyB9CisgICAg
V3JpdGVCYXJyaWVyPFVua25vd24+JiB2YXJpYWJsZUF0KFNjb3BlT2Zmc2V0IG9mZnNldCkgeyBy
ZXR1cm4gbV92YXJpYWJsZXNbb2Zmc2V0Lm9mZnNldCgpXTsgfQogICAgIAogICAgIC8vIFRoaXMg
aXMgYSBzbG93IG1ldGhvZCBjYWxsLCB3aGljaCBzZWFyY2hlcyB0aGUgcmVnaXN0ZXIgYmFuayB0
byBmaW5kIHRoZSBpbmRleAogICAgIC8vIGdpdmVuIGEgcG9pbnRlci4gSXQgd2lsbCBDUkFTSCgp
IGlmIGl0IGRvZXMgbm90IGZpbmQgdGhlIHJlZ2lzdGVyLiBPbmx5IHVzZSB0aGlzCiAgICAgLy8g
aW4gZGVidWcgY29kZSAobGlrZSBieXRlY29kZSBkdW1waW5nKS4KLSAgICBKU19FWFBPUlRfUFJJ
VkFURSBpbnQgZmluZFJlZ2lzdGVySW5kZXgodm9pZCopOworICAgIEpTX0VYUE9SVF9QUklWQVRF
IFNjb3BlT2Zmc2V0IGZpbmRSZWdpc3RlckluZGV4KHZvaWQqKTsKICAgICAKLSAgICBXcml0ZUJh
cnJpZXI8VW5rbm93bj4qIGFzc2VydFJlZ2lzdGVySXNJblRoaXNPYmplY3QoV3JpdGVCYXJyaWVy
PFVua25vd24+KiByZWdpc3RlclBvaW50ZXIpCisgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiBh
c3NlcnRWYXJpYWJsZUlzSW5UaGlzT2JqZWN0KFdyaXRlQmFycmllcjxVbmtub3duPiogdmFyaWFi
bGVQb2ludGVyKQogICAgIHsKLSNpZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgICAgIGZpbmRSZWdp
c3RlckluZGV4KHJlZ2lzdGVyUG9pbnRlcik7Ci0jZW5kaWYKKyAgICAgICAgaWYgKCFBU1NFUlRf
RElTQUJMRUQpCisgICAgICAgICAgICBmaW5kUmVnaXN0ZXJJbmRleChyZWdpc3RlclBvaW50ZXIp
OwogICAgICAgICByZXR1cm4gcmVnaXN0ZXJQb2ludGVyOwogICAgIH0KICAgICAKICAgICAvLyBB
ZGRzIG51bWJlck9mUmVnaXN0ZXJzVG9BZGQgcmVnaXN0ZXJzLCBpbml0aWFsaXplcyB0aGVtIHRv
IFVuZGVmaW5lZCwgYW5kIHJldHVybnMKICAgICAvLyB0aGUgaW5kZXggb2YgdGhlIGZpcnN0IG9u
ZSBhZGRlZC4KLSAgICBKU19FWFBPUlRfUFJJVkFURSBpbnQgYWRkUmVnaXN0ZXJzKGludCBudW1i
ZXJPZlJlZ2lzdGVyc1RvQWRkKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBTY29wZU9mZnNldCBh
ZGRSZWdpc3RlcnModW5zaWduZWQgbnVtYmVyT2ZSZWdpc3RlcnNUb0FkZCk7CiAgICAgCiAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90
VmlzaXRvciYpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJv
bFRhYmxlT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNTeW1ib2xUYWJsZU9iamVjdC5oCShyZXZpc2lvbiAxODA4NzUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTc4LDcgKzc4LDcgQEAgaW5saW5lIGJvb2wgc3ltYm9sVGFibGVHZXQoCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICBTeW1ib2xUYWJsZUVudHJ5OjpGYXN0IGVudHJ5ID0gaXRlci0+dmFs
dWU7CiAgICAgQVNTRVJUKCFlbnRyeS5pc051bGwoKSk7Ci0gICAgc2xvdC5zZXRWYWx1ZShvYmpl
Y3QsIGVudHJ5LmdldEF0dHJpYnV0ZXMoKSB8IERvbnREZWxldGUsIG9iamVjdC0+cmVnaXN0ZXJB
dChlbnRyeS5nZXRJbmRleCgpKS5nZXQoKSk7CisgICAgc2xvdC5zZXRWYWx1ZShvYmplY3QsIGVu
dHJ5LmdldEF0dHJpYnV0ZXMoKSB8IERvbnREZWxldGUsIG9iamVjdC0+dmFyaWFibGVBdChlbnRy
eS5zY29wZU9mZnNldCgpKS5nZXQoKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTk0LDcg
Kzk0LDcgQEAgaW5saW5lIGJvb2wgc3ltYm9sVGFibGVHZXQoCiAgICAgU3ltYm9sVGFibGVFbnRy
eTo6RmFzdCBlbnRyeSA9IGl0ZXItPnZhbHVlOwogICAgIEFTU0VSVCghZW50cnkuaXNOdWxsKCkp
OwogICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcigKLSAgICAgICAgb2JqZWN0LT5yZWdpc3Rl
ckF0KGVudHJ5LmdldEluZGV4KCkpLmdldCgpLCBlbnRyeS5nZXRBdHRyaWJ1dGVzKCkgfCBEb250
RGVsZXRlKTsKKyAgICAgICAgb2JqZWN0LT52YXJpYWJsZUF0KGVudHJ5LnNjb3BlT2Zmc2V0KCkp
LmdldCgpLCBlbnRyeS5nZXRBdHRyaWJ1dGVzKCkgfCBEb250RGVsZXRlKTsKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIApAQCAtMTEwLDcgKzExMCw3IEBAIGlubGluZSBib29sIHN5bWJvbFRhYmxlR2V0
KAogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgU3ltYm9sVGFibGVFbnRyeTo6RmFzdCBlbnRy
eSA9IGl0ZXItPnZhbHVlOwogICAgIEFTU0VSVCghZW50cnkuaXNOdWxsKCkpOwotICAgIHNsb3Qu
c2V0VmFsdWUob2JqZWN0LCBlbnRyeS5nZXRBdHRyaWJ1dGVzKCkgfCBEb250RGVsZXRlLCBvYmpl
Y3QtPnJlZ2lzdGVyQXQoZW50cnkuZ2V0SW5kZXgoKSkuZ2V0KCkpOworICAgIHNsb3Quc2V0VmFs
dWUob2JqZWN0LCBlbnRyeS5nZXRBdHRyaWJ1dGVzKCkgfCBEb250RGVsZXRlLCBvYmplY3QtPnZh
cmlhYmxlQXQoZW50cnkuc2NvcGVPZmZzZXQoKSkuZ2V0KCkpOwogICAgIHNsb3RJc1dyaXRlYWJs
ZSA9ICFlbnRyeS5pc1JlYWRPbmx5KCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC0xNDUsNyAr
MTQ1LDcgQEAgaW5saW5lIGJvb2wgc3ltYm9sVGFibGVQdXQoCiAgICAgICAgICAgICAvLyBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM0NjAxCiAgICAgICAgICAgICBz
ZXQtPm5vdGlmeVdyaXRlKHZtLCB2YWx1ZSwgb2JqZWN0LCBwcm9wZXJ0eU5hbWUpOwogICAgICAg
ICB9Ci0gICAgICAgIHJlZyA9ICZvYmplY3QtPnJlZ2lzdGVyQXQoZmFzdEVudHJ5LmdldEluZGV4
KCkpOworICAgICAgICByZWcgPSAmb2JqZWN0LT52YXJpYWJsZUF0KGZhc3RFbnRyeS5zY29wZU9m
ZnNldCgpKTsKICAgICB9CiAgICAgLy8gSSdkIHByZWZlciB3ZSBub3QgaG9sZCBsb2NrIHdoaWxl
IGV4ZWN1dGluZyBiYXJyaWVycywgc2luY2UgSSBwcmVmZXIgdG8gcmVzZXJ2ZQogICAgIC8vIHRo
ZSByaWdodCBmb3IgYmFycmllcnMgdG8gYmUgYWJsZSB0byB0cmlnZ2VyIEdDLiBBbmQgSSBkb24n
dCB3YW50IHRvIGhvbGQgVk0KQEAgLTE3Myw3ICsxNzMsNyBAQCBpbmxpbmUgYm9vbCBzeW1ib2xU
YWJsZVB1dFdpdGhBdHRyaWJ1dGVzCiAgICAgICAgIGlmIChWYXJpYWJsZVdhdGNocG9pbnRTZXQq
IHNldCA9IGVudHJ5LndhdGNocG9pbnRTZXQoKSkKICAgICAgICAgICAgIHNldC0+bm90aWZ5V3Jp
dGUodm0sIHZhbHVlLCBvYmplY3QsIHByb3BlcnR5TmFtZSk7CiAgICAgICAgIGVudHJ5LnNldEF0
dHJpYnV0ZXMoYXR0cmlidXRlcyk7Ci0gICAgICAgIHJlZyA9ICZvYmplY3QtPnJlZ2lzdGVyQXQo
ZW50cnkuZ2V0SW5kZXgoKSk7CisgICAgICAgIHJlZyA9ICZvYmplY3QtPnZhcmlhYmxlQXQoZW50
cnkuc2NvcGVPZmZzZXQoKSk7CiAgICAgfQogICAgIHJlZy0+c2V0KHZtLCBvYmplY3QsIHZhbHVl
KTsKICAgICByZXR1cm4gdHJ1ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
VHlwZS5oCShyZXZpc2lvbiAxODA4NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTgsNyArNTgsOCBAQCBlbnVtIEpTVHlwZSA6
IHVpbnQ4X3QgewogICAgIFB1cmVGb3J3YXJkaW5nUHJveHlUeXBlLAogICAgIEltcHVyZVByb3h5
VHlwZSwKICAgICBXaXRoU2NvcGVUeXBlLAotICAgIEFyZ3VtZW50c1R5cGUsCisgICAgRGlyZWN0
QXJndW1lbnRzVHlwZSwKKyAgICBTY29wZWRBcmd1bWVudHNUeXBlLAogCiAgICAgSW50OEFycmF5
VHlwZSwKICAgICBJbnQxNkFycmF5VHlwZSwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL091dE9mQmFuZEFyZ3VtZW50cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvT3V0T2ZCYW5kQXJndW1lbnRzLmNwcAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL091dE9mQmFuZEFyZ3VtZW50cy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwyMTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk91dE9m
QmFuZEFyZ3VtZW50cy5oIgorCisjaW5jbHVkZSAiSlNBcmd1bWVudHNJdGVyYXRvci5oIgorI2lu
Y2x1ZGUgIkpTQ0lubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK1NUQVRJQ19BU1NFUlRf
SVNfVFJJVklBTExZX0RFU1RSVUNUSUJMRShPdXRPZkJhbmRBcmd1bWVudHMpOworCitjb25zdCBD
bGFzc0luZm8gT3V0T2ZCYW5kQXJndW1lbnRzOjpzX2luZm8gPSB7ICJBcmd1bWVudHMiLCAmQmFz
ZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKE91dE9mQmFuZEFyZ3VtZW50cykgfTsK
KworT3V0T2ZCYW5kQXJndW1lbnRzOjpPdXRPZkJhbmRBcmd1bWVudHMoVk0mIHZtLCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSkKKyAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSwgbnVsbHB0cikKKyAgICAs
IG1fc3BlY2lhbHNNYXRlcmlhbGl6ZWQoZmFsc2UpCit7Cit9CisKK091dE9mQmFuZEFyZ3VtZW50
cyogT3V0T2ZCYW5kQXJndW1lbnRzOjpjcmVhdGVFbXB0eSgKKyAgICBWTSYgdm0sIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTRnVuY3Rpb24qIGNhbGxlZSkKK3sKKyAgICBPdXRPZkJh
bmRBcmd1bWVudHMqIHJlc3VsdCA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPE91dE9mQmFu
ZEFyZ3VtZW50cz4odm0uaGVhcCkpCisgICAgICAgIE91dE9mQmFuZEFyZ3VtZW50cyh2bSwgZ2xv
YmFsT2JqZWN0LT5vdXRPZkJhbmRBcmd1bWVudHNTdHJ1Y3R1cmUoKSk7CisgICAgcmVzdWx0LT5m
aW5pc2hDcmVhdGlvbih2bSk7CisgICAgcmVzdWx0LT5tX2NhbGxlZS5zZXQodm0sIHRoaXMsIGNh
bGxlZSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworT3V0T2ZCYW5kQXJndW1lbnRzKiBPdXRP
ZkJhbmRBcmd1bWVudHM6OmNyZWF0ZUVtcHR5KEV4ZWNTdGF0ZSogZXhlYywgSlNGdW5jdGlvbiog
Y2FsbGVlKQoreworICAgIC8vIE5CLiBTb21lIGNsaWVudHMgbWlnaHQgZXhwZWN0IHRoYXQgdGhl
IGdsb2JhbCBvYmplY3Qgb2Ygb2YgdGhpcyBvYmplY3QgaXMgdGhlIGdsb2JhbCBvYmplY3QKKyAg
ICAvLyBvZiB0aGUgY2FsbGVlLiBXZSBkb24ndCBkbyB0aGlzIGZvciBub3csIGJ1dCBtYXliZSB3
ZSBzaG91bGQuCisgICAgcmV0dXJuIGNyZWF0ZUVtcHR5KGV4ZWMtPnZtKCksIGV4ZWMtPmxleGlj
YWxHbG9iYWxPYmplY3QoKSwgY2FsbGVlKTsKK30KKworT3V0T2ZCYW5kQXJndW1lbnRzKiBPdXRP
ZkJhbmRBcmd1bWVudHM6OmNyZWF0ZVdpdGhJbmxpbmVGcmFtZShFeGVjU3RhdGUqIG15RnJhbWUs
IEV4ZWNTdGF0ZSogdGFyZ2V0RnJhbWUsIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1l
LCBBcmd1bWVudHNNb2RlIG1vZGUpCit7CisgICAgVk0mIHZtID0gbXlGcmFtZS0+dm0oKTsKKyAg
ICAKKyAgICBKU0Z1bmN0aW9uKiBjYWxsZWU7CisgICAgCisgICAgaWYgKGlubGluZUNhbGxGcmFt
ZSkKKyAgICAgICAgY2FsbGVlID0ganNDYXN0PEpTRnVuY3Rpb24qPihpbmxpbmVDYWxsRnJhbWUt
PmNhbGxlZVJlY292ZXJ5LnJlY292ZXIodGFyZ2V0RnJhbWUpKTsKKyAgICBlbHNlCisgICAgICAg
IGNhbGxlZSA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4odGFyZ2V0RnJhbWUtPmNhbGxlZSgpKTsKKwor
ICAgIC8vIE5CLiBJdCdzIHNvbWV3aGF0IGFyYml0cmFyeSB0aGF0IHdlIHRpZSB0aGUgc3RyaWN0
bmVzcyBvZiB0aGlzIG9iamVjdCB0byB0aGUgc3RyaWN0bmVzcyBvZgorICAgIC8vIHRoZSBjYWxs
ZWUuCisgICAgYm9vbCBpc1N0cmljdE1vZGUgPSBleGVjdXRhYmxlLT5pc1N0cmljdE1vZGUoKTsK
KworICAgIE91dE9mQmFuZEFyZ3VtZW50cyogcmVzdWx0ID0gY3JlYXRlRW1wdHkobXlGcmFtZSwg
Y2FsbGVlKTsKKyAgICAKKyAgICB1bnNpZ25lZCBsZW5ndGg7CisgICAgc3dpdGNoIChtb2RlKSB7
CisgICAgY2FzZSBDbG9uZWRBcmd1bWVudHNDcmVhdGlvbk1vZGU6IHsKKyAgICAgICAgaWYgKGlu
bGluZUNhbGxGcmFtZSkgeworICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+YXJndW1l
bnRDb3VudFJlZ2lzdGVyLmlzVmFsaWQoKSkKKyAgICAgICAgICAgICAgICBsZW5ndGggPSBleGVj
LT5yKGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudFJlZ2lzdGVyKS51bmJveGVkSW50MzIo
KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBsZW5ndGggPSBpbmxpbmVDYWxs
RnJhbWUtPmFyZ3VtZW50cy5zaXplKCk7CisgICAgICAgICAgICBsZW5ndGgtLTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbGVuZ3RoOyBpLS07KQorICAgICAg
ICAgICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0SW5kZXgobXlGcmFtZSwgaSwgaW5saW5lQ2FsbEZy
YW1lLT5hcmd1bWVudHNbaV0ucmVjb3Zlcih0YXJnZXRGcmFtZSkpOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgbGVuZ3RoID0gdGFyZ2V0RnJhbWUtPmFyZ3VtZW50Q291bnQoKTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbGVuZ3RoOyBpLS07KQor
ICAgICAgICAgICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0SW5kZXgobXlGcmFtZSwgaSwgdGFyZ2V0
RnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KGkpKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsK
KyAgICB9CisgICAgICAgIAorICAgIGNhc2UgRmFrZUFyZ3VtZW50VmFsdWVzQ3JlYXRpb25Nb2Rl
OiB7CisgICAgICAgIGxlbmd0aCA9IDA7CisgICAgICAgIGJyZWFrOworICAgIH0gfQorICAgIAor
ICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVt
YmVyKGxlbmd0aCkpOworICAgIGlmIChpc1N0cmljdE1vZGUpIHsKKyAgICAgICAgcmVzdWx0LT5w
dXREaXJlY3RBY2Nlc3NvcihleGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT5jYWxsZWUsIHRoaXNPYmpl
Y3QtPmdsb2JhbE9iamVjdCgpLT50aHJvd1R5cGVFcnJvckdldHRlclNldHRlcihleGVjLT52bSgp
KSwgRG9udERlbGV0ZSB8IERvbnRFbnVtIHwgQWNjZXNzb3IpOworICAgICAgICByZXN1bHQtPnB1
dERpcmVjdEFjY2Vzc29yKGV4ZWMsIHZtLnByb3BlcnR5TmFtZXMtPmNhbGxlZSwgdGhpc09iamVj
dC0+Z2xvYmFsT2JqZWN0KCktPnRocm93VHlwZUVycm9yR2V0dGVyU2V0dGVyKGV4ZWMtPnZtKCkp
LCBEb250RGVsZXRlIHwgRG9udEVudW0gfCBBY2Nlc3Nvcik7CisgICAgfSBlbHNlCisgICAgICAg
IHJlc3VsdC0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5jYWxsZWUsIEpTVmFsdWUo
Y2FsbGVlKSk7CisgICAgCisgICAgcmVzdWx0LT5KU0NfTkFUSVZFX0ZVTkNUSU9OKHZtLnByb3Bl
cnR5TmFtZXMtPml0ZXJhdG9yUHJpdmF0ZU5hbWUsIGFyZ3VtZW50c0Z1bmNJdGVyYXRvciwgRG9u
dEVudW0sIDApOworfQorCitPdXRPZkJhbmRBcmd1bWVudHMqIE91dE9mQmFuZEFyZ3VtZW50czo6
Y3JlYXRlV2l0aE1hY2hpbmVGcmFtZShFeGVjU3RhdGUqIG15RnJhbWUsIEV4ZWNTdGF0ZSogdGFy
Z2V0RnJhbWUsIEFyZ3VtZW50c01vZGUgbW9kZSkKK3sKKyAgICByZXR1cm4gY3JlYXRlV2l0aElu
bGluZUZyYW1lKG15RnJhbWUsIHRhcmdldEZyYW1lLCBudWxscHRyLCBtb2RlKTsKK30KKworU3Ry
dWN0dXJlKiBPdXRPZkJhbmRBcmd1bWVudHM6OmNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQoreworICAgIHJldHVy
biBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZv
KE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKK30KKworYm9vbCBPdXRPZkJh
bmRBcmd1bWVudHM6OmdldE93blByb3BlcnR5U2xvdChKU09iamVjdCogb2JqZWN0LCBFeGVjU3Rh
dGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBpZGVudCwgUHJvcGVydHlTbG90JiBzbG90KQoreworICAg
IE91dE9mQmFuZEFyZ3VtZW50cyogdGhpc09iamVjdCA9IGpzQ2FzdDxPdXRPZkJhbmRBcmd1bWVu
dHMqPihvYmplY3QpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgCisgICAgaWYgKGlk
ZW50ID09IHZtLnByb3BlcnR5TmFtZXMtPmNhbGxlcgorICAgICAgICB8fCBpZGVudCA9PSB2bS5w
cm9wZXJ0eU5hbWVzLT5jYWxsZWUpCisgICAgICAgIHRoaXNPYmplY3QtPm1hdGVyaWFsaXplU3Bl
Y2lhbHNJZk5lY2Vzc2FyeShleGVjKTsKKyAgICAKKyAgICBpZiAoQmFzZTo6Z2V0T3duUHJvcGVy
dHlTbG90KHRoaXNPYmplY3QsIGV4ZWMsIGlkZW50LCBzbG90KSkKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgCisgICAgaWYgKGlkZW50ID09IHZtLnByb3BlcnR5TmFtZXMtPml0ZXJhdG9yUHJp
dmF0ZU5hbWUpIHsKKyAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGV4ZWMt
PmxleGljYWxHbG9iYWxPYmplY3QoKTsKKyAgICAgICAgdGhpc09iamVjdC0+SlNDX05BVElWRV9G
VU5DVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5pdGVyYXRvclByaXZhdGVOYW1lLCBhcmd1bWVudHNG
dW5jSXRlcmF0b3IsIERvbnRFbnVtLCAwKTsKKyAgICAgICAgaWYgKEpTT2JqZWN0OjpnZXRPd25Q
cm9wZXJ0eVNsb3QodGhpc09iamVjdCwgZXhlYywgaWRlbnQsIHNsb3QpKQorICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBP
dXRPZkJhbmRBcmd1bWVudHM6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwg
RXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgYXJyYXksIEVudW1lcmF0aW9uTW9k
ZSBtb2RlKQoreworICAgIE91dE9mQmFuZEFyZ3VtZW50cyogdGhpc09iamVjdCA9IGpzQ2FzdDxP
dXRPZkJhbmRBcmd1bWVudHMqPihvYmplY3QpOworICAgIHRoaXNPYmplY3QtPm1hdGVyaWFsaXpl
U3BlY2lhbHNJZk5lY2Vzc2FyeShleGVjKTsKKyAgICBCYXNlOjpnZXRPd25Qcm9wZXJ0eU5hbWVz
KHRoaXNPYmplY3QsIGV4ZWMsIGFycmF5LCBtb2RlKTsKK30KKwordm9pZCBPdXRPZkJhbmRBcmd1
bWVudHM6OnB1dChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIGlk
ZW50LCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgT3V0T2ZC
YW5kQXJndW1lbnRzKiB0aGlzT2JqZWN0ID0ganNDYXN0PE91dE9mQmFuZEFyZ3VtZW50cyo+KG9i
amVjdCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICAKKyAgICBpZiAoaWRlbnQgPT0g
dm0ucHJvcGVydHlOYW1lcy0+Y2FsbGVlCisgICAgICAgIHx8IGlkZW50ID09IHZtLnByb3BlcnR5
TmFtZXMtPmNhbGxlcikKKyAgICAgICAgdGhpc09iamVjdC0+bWF0ZXJpYWxpemVTcGVjaWFsc0lm
TmVjZXNzYXJ5KGV4ZWMpOworICAgIAorICAgIEJhc2U6OnB1dCh0aGlzT2JqZWN0LCBleGVjLCBp
ZGVudCwgdmFsdWUsIHNsb3QpOworfQorCit2b2lkIE91dE9mQmFuZEFyZ3VtZW50czo6ZGVsZXRl
UHJvcGVydHkoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBpZGVu
dCkKK3sKKyAgICBPdXRPZkJhbmRBcmd1bWVudHMqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8T3V0T2ZC
YW5kQXJndW1lbnRzKj4ob2JqZWN0KTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIAor
ICAgIGlmIChpZGVudCA9PSB2bS5wcm9wZXJ0eU5hbWVzLT5jYWxsZWUKKyAgICAgICAgfHwgaWRl
bnQgPT0gdm0ucHJvcGVydHlOYW1lcy0+Y2FsbGVyKQorICAgICAgICB0aGlzT2JqZWN0LT5tYXRl
cmlhbGl6ZVNwZWNpYWxzSWZOZWNlc3NhcnkoZXhlYyk7CisgICAgCisgICAgQmFzZTo6ZGVsZXRl
UHJvcGVydHkodGhpc09iamVjdCwgZXhlYywgaWRlbnQpOworfQorCit2b2lkIE91dE9mQmFuZEFy
Z3VtZW50czo6ZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBl
eGVjLCBQcm9wZXJ0eU5hbWUgaWRlbnQsIGNvbnN0IFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3Jp
cHRvciwgYm9vbCBzaG91bGRUaHJvdykKK3sKKyAgICBPdXRPZkJhbmRBcmd1bWVudHMqIHRoaXNP
YmplY3QgPSBqc0Nhc3Q8T3V0T2ZCYW5kQXJndW1lbnRzKj4ob2JqZWN0KTsKKyAgICBWTSYgdm0g
PSBleGVjLT52bSgpOworICAgIAorICAgIGlmIChpZGVudCA9PSB2bS5wcm9wZXJ0eU5hbWVzLT5j
YWxsZWUKKyAgICAgICAgfHwgaWRlbnQgPT0gdm0ucHJvcGVydHlOYW1lcy0+Y2FsbGVyKQorICAg
ICAgICB0aGlzT2JqZWN0LT5tYXRlcmlhbGl6ZVNwZWNpYWxzSWZOZWNlc3NhcnkoZXhlYyk7Cisg
ICAgCisgICAgcmV0dXJuIEJhc2U6OmRlZmluZU93blByb3BlcnR5KG9iamVjdCwgZXhlYywgaWRl
bnQsIGRlc2NyaXB0b3IsIHNob3VsZFRocm93KTsKK30KKwordm9pZCBPdXRPZkJhbmRBcmd1bWVu
dHM6Om1hdGVyaWFsaXplU3BlY2lhbHMoRXhlY1N0YXRlKiBleGVjKQoreworICAgIFJFTEVBU0Vf
QVNTRVJUKCFzcGVjaWFsc01hdGVyaWFsaXplZCgpKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgp
OworICAgIAorICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IGpzQ2FzdDxGdW5j
dGlvbkV4ZWN1dGFibGUqPihtX2NhbGxlZS0+ZXhlY3V0YWJsZSgpKTsKKyAgICBib29sIGlzU3Ry
aWN0TW9kZSA9IGV4ZWN1dGFibGUtPmlzU3RyaWN0TW9kZSgpOworICAgIAorICAgIGlmIChpc1N0
cmljdE1vZGUpIHsKKyAgICAgICAgcHV0RGlyZWN0QWNjZXNzb3IoZXhlYywgdm0ucHJvcGVydHlO
YW1lcy0+Y2FsbGVlLCBnbG9iYWxPYmplY3QoKS0+dGhyb3dUeXBlRXJyb3JHZXR0ZXJTZXR0ZXIo
dm0pLCBEb250RGVsZXRlIHwgRG9udEVudW0gfCBBY2Nlc3Nvcik7CisgICAgICAgIHB1dERpcmVj
dEFjY2Vzc29yKGV4ZWMsIHZtLnByb3BlcnR5TmFtZXMtPmNhbGxlZSwgZ2xvYmFsT2JqZWN0KCkt
PnRocm93VHlwZUVycm9yR2V0dGVyU2V0dGVyKHZtKSwgRG9udERlbGV0ZSB8IERvbnRFbnVtIHwg
QWNjZXNzb3IpOworICAgIH0gZWxzZQorICAgICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5
TmFtZXMtPmNhbGxlZSwgSlNWYWx1ZShtX2NhbGxlZS5nZXQoKSkpOworICAgIAorICAgIG1fY2Fs
bGVlLmNsZWFyKCk7Cit9CisKK3ZvaWQgT3V0T2ZCYW5kQXJndW1lbnRzOjptYXRlcmlhbGl6ZVNw
ZWNpYWxzSWZOZWNlc3NhcnkoRXhlY1N0YXRlKiBleGVjKQoreworICAgIGlmICghc3BlY2lhbHNN
YXRlcmlhbGl6ZWQoKSkKKyAgICAgICAgbWF0ZXJpYWxpemVTcGVjaWFscyhleGVjKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L091dE9mQmFuZEFyZ3VtZW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL091dE9mQmFuZEFyZ3VtZW50cy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvT3V0T2ZCYW5kQXJndW1lbnRzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw3NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaWZuZGVmIE91dE9mQmFuZEFyZ3VtZW50c19oCisjZGVmaW5lIE91dE9mQmFuZEFy
Z3VtZW50c19oCisKKyNpbmNsdWRlICJBcmd1bWVudHNNb2RlLmgiCisjaW5jbHVkZSAiSlNPYmpl
Y3QuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKKy8vIFRoaXMgaXMgYW4gQXJndW1lbnRzLWNsYXNz
IG9iamVjdCB0aGF0IHdlIGNyZWF0ZSB3aGVuIHlvdSBkbyBmdW5jdGlvbi5hcmd1bWVudHMsIG9y
IHlvdSBzYXkKKy8vICJhcmd1bWVudHMiIGluc2lkZSBhIGZ1bmN0aW9uIGluIHN0cmljdCBtb2Rl
LiBJdCBiZWhhdmVzIGFsbXBzdCBlbnRpcmVseSBsaWtlIGFuIG9yZGluYXJ5CisvLyBKYXZhU2Ny
aXB0IG9iamVjdC4gQWxsIG9mIHRoZSBhcmd1bWVudHMgdmFsdWVzIGFyZSBzaW1wbHkgY29waWVk
IGZyb20gdGhlIHN0YWNrIChwb3NzaWJseSB2aWEKKy8vIHNvbWUgc29waGlzdGljYXRlZCBWYWx1
ZVJlY292ZXJ5J3MgaWYgYW4gb3B0aW1pemluZyBjb21waWxlciBpcyBpbiBwbGF5KSBhbmQgdGhl
IGFwcHJvcHJpYXRlCisvLyBwcm9wZXJ0aWVzIG9mIHRoZSBvYmplY3QgYXJlIHBvcHVsYXRlZC4g
VGhlIG9ubHkgcmVhc29uIHdoeSB3ZSBuZWVkIGEgc3BlY2lhbCBjbGFzcyBpcyB0byBtYWtlCisv
LyB0aGUgb2JqZWN0IGNsYWltIHRvIGJlICJBcmd1bWVudHMiIGZyb20gYSB0b1N0cmluZyBzdGFu
ZHBvaW50LCBhbmQgdG8gYXZvaWQgbWF0ZXJpYWxpemluZyB0aGUKKy8vIGNhbGxlci9jYWxsZWUg
cHJvcGVydGllcyB1bmxlc3Mgc29tZW9uZSBhc2tzIGZvciB0aGVtLgorY2xhc3MgT3V0T2ZCYW5k
QXJndW1lbnRzIDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgeworcHVibGljOgorICAgIHR5cGVk
ZWYgSlNOb25GaW5hbE9iamVjdCBCYXNlOworICAgIAorcHJpdmF0ZToKKyAgICBPdXRPZkJhbmRB
cmd1bWVudHMoVk0mLCBTdHJ1Y3R1cmUqKTsKKworcHVibGljOgorICAgIHN0YXRpYyBPdXRPZkJh
bmRBcmd1bWVudHMqIGNyZWF0ZUVtcHR5KFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU0Z1bmN0aW9u
KiBjYWxsZWUpOworICAgIHN0YXRpYyBPdXRPZkJhbmRBcmd1bWVudHMqIGNyZWF0ZUVtcHR5KEV4
ZWNTdGF0ZSosIEpTRnVuY3Rpb24qIGNhbGxlZSk7CisgICAgc3RhdGljIE91dE9mQmFuZEFyZ3Vt
ZW50cyogY3JlYXRlV2l0aElubGluZUZyYW1lKEV4ZWNTdGF0ZSogbXlGcmFtZSwgRXhlY1N0YXRl
KiB0YXJnZXRGcmFtZSwgSW5saW5lQ2FsbEZyYW1lKiwgQXJndW1lbnRzTW9kZSk7CisgICAgc3Rh
dGljIE91dE9mQmFuZEFyZ3VtZW50cyogY3JlYXRlV2l0aE1hY2hpbmVGcmFtZShFeGVjU3RhdGUq
IG15RnJhbWUsIEV4ZWNTdGF0ZSogdGFyZ2V0RnJhbWUsIEFyZ3VtZW50c01vZGUpOworICAgIAor
ICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0
KiwgSlNWYWx1ZSBwcm90b3R5cGUpOworCisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVj
dHVyZUZsYWdzID0gT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0UHJv
cGVydHlOYW1lcyB8IEpTT2JqZWN0OjpTdHJ1Y3R1cmVGbGFnczsKKworICAgIERFQ0xBUkVfSU5G
TzsKKworcHJpdmF0ZToKKyAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmpl
Y3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOworICAgIHN0YXRp
YyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0
eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CisgICAgc3RhdGljIHZvaWQgcHV0KEpTQ2Vs
bCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7
CisgICAgc3RhdGljIHZvaWQgZGVsZXRlUHJvcGVydHkoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJv
cGVydHlOYW1lKTsKKyAgICBzdGF0aWMgdm9pZCBkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCos
IEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlEZXNjcmlwdG9yJiwgYm9v
bCBzaG91bGRUaHJvdyk7CisgICAgCisgICAgYm9vbCBzcGVjaWFsc01hdGVyaWFsaXplZCgpIGNv
bnN0IHsgcmV0dXJuICFtX2NhbGxlZTsgfQorICAgIHZvaWQgbWF0ZXJpYWxpemVTcGVjaWFscyhF
eGVjU3RhdGUqKTsKKyAgICB2b2lkIG1hdGVyaWFsaXplU3BlY2lhbHNJZk5lY2Vzc2FyeShFeGVj
U3RhdGUqKTsKKyAgICAKKyAgICBXcml0ZUJhcnJpZXI8SlNGdW5jdGlvbio+IG1fY2FsbGVlOyAv
LyBTZXQgdG8gbnVsbHB0ciB3aGVuIHdlIG1hdGVyaWFsaXplIGFsbCBvZiBvdXIgc3BlY2lhbCBw
cm9wZXJ0aWVzLgorfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBPdXRPZkJh
bmRBcmd1bWVudHNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29w
ZU9mZnNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U2NvcGVPZmZzZXQuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU2NvcGVPZmZzZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDIgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIlNjb3BlT2Zmc2V0LmgiCisKK25hbWVzcGFjZSBKU0MgeworCit2
b2lkIFNjb3BlT2Zmc2V0OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgaWYg
KCEqdGhpcykgeworICAgICAgICBvdXQucHJpbnQoInNjb3BlSW52YWxpZCIpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIAorICAgIG91dC5wcmludCgic2NvcGUiLCBvZmZzZXQoKSk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TY29wZU9mZnNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1Njb3BlT2Zmc2V0LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TY29wZU9mZnNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTEgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBT
Y29wZU9mZnNldF9oCisjZGVmaW5lIFNjb3BlT2Zmc2V0X2gKKworI2luY2x1ZGUgIkdlbmVyaWNP
ZmZzZXQuaCIKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIEpTQyB7
CisKKy8vIFRoaXMgaXMgYW4gb2Zmc2V0IGludG8gYSBzY29wZSBvZiBzb21lIGtpbmQuIEl0IGNv
dWxkIGJlIGFuIGFjdGl2YXRpb24gc2NvcGUgb3IgaXQgY291bGQgYmUgYQorLy8gZ2xvYmFsIG9i
amVjdC4KK2NsYXNzIFNjb3BlT2Zmc2V0IDogcHVibGljIEdlbmVyaWNPZmZzZXQ8U2NvcGVPZmZz
ZXQ+IHsKK3B1YmxpYzoKKyAgICBTY29wZU9mZnNldCgpIHsgfQorICAgIAorICAgIGV4cGxpY2l0
IFNjb3BlT2Zmc2V0KHVuc2lnbmVkIG9mZnNldCkKKyAgICAgICAgOiBHZW5lcmljT2Zmc2V0KG9m
ZnNldCkKKyAgICB7CisgICAgfQorICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNv
bnN0OworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBTY29wZU9mZnNldF9o
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50cy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJn
dW1lbnRzLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1Njb3BlZEFyZ3VtZW50cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMzcgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIlNjb3BlZEFyZ3VtZW50cy5oIgorCisjaW5jbHVkZSAiR2VuZXJp
Y0FyZ3VtZW50c0lubGluZXMuaCIKKyNpbmNsdWRlICJKU0FyZ3VtZW50c0l0ZXJhdG9yLmgiCisj
aW5jbHVkZSAiSlNDSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsKKworU1RBVElDX0FTU0VS
VF9JU19UUklWSUFMTFlfREVTVFJVQ1RJQkxFKFNjb3BlZEFyZ3VtZW50cyk7CisKK2NvbnN0IENs
YXNzSW5mbyBTY29wZWRBcmd1bWVudHM6OnNfaW5mbyA9IHsgIkFyZ3VtZW50cyIsICZCYXNlOjpz
X2luZm8sIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoU2NvcGVkQXJndW1lbnRzKSB9OworCitTY29w
ZWRBcmd1bWVudHM6OlNjb3BlZEFyZ3VtZW50cyhWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJl
LCB1bnNpZ25lZCB0b3RhbExlbmd0aCkKKyAgICA6IEdlbmVyaWNBcmd1bWVudHModm0sIHN0cnVj
dHVyZSkKKyAgICAsIG1fb3ZlcnJvZGVUaGluZ3MoZmFsc2UpCisgICAgLCBtX3RvdGFsTGVuZ3Ro
KGxlbmd0aCkKK3sKK30KKwordm9pZCBTY29wZWRBcmd1bWVudHM6OmZpbmlzaENyZWF0aW9uKFZN
JiB2bSwgSlNGdW5jdGlvbiogY2FsbGVlLCBTY29wZWRBcmd1bWVudHNUYWJsZSogdGFibGUsIEpT
TGV4aWNhbEVudmlyb25tZW50KiBzY29wZSkKK3sKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2
bSk7CisgICAgbV9jYWxsZWUuc2V0KHZtLCB0aGlzLCBjYWxsZWUpOworICAgIG1fdGFibGUuc2V0
KHZtLCB0aGlzLCB0YWJsZSk7CisgICAgbV9zY29wZS5zZXQodm0sIHRoaXMsIHNjb3BlKTsKK30K
KworU2NvcGVkQXJndW1lbnRzKiBTY29wZWRBcmd1bWVudHM6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQo
Vk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNGdW5jdGlvbiogY2FsbGVlLCBTY29wZWRB
cmd1bWVudHNUYWJsZSogdGFibGUsIEpTTGV4aWNhbEVudmlyb25tZW50KiBzY29wZSwgdW5zaWdu
ZWQgdG90YWxMZW5ndGgpCit7CisgICAgQVNTRVJUKHRvdGFsTGVuZ3RoID49IHRhYmxlLT5sZW5n
dGgoKSk7CisgICAgU2NvcGVkQXJndW1lbnRzKiByZXN1bHQgPSBuZXcgKAorICAgICAgICBOb3RO
dWxsLAorICAgICAgICBhbGxvY2F0ZUNlbGw8U2NvcGVkQXJndW1lbnRzPih2bS5oZWFwLCBhbGxv
Y2F0aW9uU2l6ZSh0b3RhbExlbmd0aCAtIHRhYmxlLT5sZW5ndGgoKSkpKQorICAgICAgICAodm0s
IHN0cnVjdHVyZSwgdG90YWxMZW5ndGgpOworICAgIHJlc3VsdC0+ZmluaXNoQ3JlYXRpb24odm0s
IGNhbGxlZSwgdGFibGUsIHNjb3BlKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitTY29wZWRB
cmd1bWVudHMqIFNjb3BlZEFyZ3VtZW50czo6Y3JlYXRlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIEpTRnVuY3Rpb24qIGNhbGxlZSwgU2NvcGVkQXJndW1lbnRzVGFibGUqIHRhYmxlLCBK
U0xleGljYWxFbnZpcm9ubWVudCogc2NvcGUsIHVuc2lnbmVkIHRvdGFsTGVuZ3RoKQoreworICAg
IFNjb3BlZEFyZ3VtZW50cyogcmVzdWx0ID0KKyAgICAgICAgY3JlYXRlVW5pbml0aWFsaXplZCh2
bSwgc3RydWN0dXJlLCBjYWxsZWUsIHRhYmxlLCBzY29wZSwgdG90YWxMZW5ndGgpOworICAgIAor
ICAgIGZvciAodW5zaWduZWQgaSA9IHRvdGFsTGVuZ3RoIC0gdGFibGUtPmxlbmd0aCgpOyBpLS07
KQorICAgICAgICByZXN1bHQtPm92ZXJmbG93U3RvcmFnZSgpW2ldLmNsZWFyKCk7CisgICAgCisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKworU2NvcGVkQXJndW1lbnRzKiBTY29wZWRBcmd1bWVudHM6
OmNyZWF0ZUJ5Q29weWluZyhWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBFeGVjU3RhdGUq
IGV4ZWMsIFNjb3BlZEFyZ3VtZW50c1RhYmxlKiB0YWJsZSwgSlNMZXhpY2FsRW52aXJvbm1lbnQq
IHNjb3BlKQoreworICAgIHVuc2lnbmVkIG5hbWVkTGVuZ3RoID0gdGFibGUtPmxlbmd0aCgpOwor
ICAgIHVuc2lnbmVkIHRvdGFsTGVuZ3RoID0gZXhlYy0+YXJndW1lbnRDb3VudCgpOworICAgIAor
ICAgIFNjb3BlZEFyZ3VtZW50cyogcmVzdWx0ID0KKyAgICAgICAgY3JlYXRlVW5pbml0aWFsaXpl
ZCh2bSwgc3RydWN0dXJlLCBjYWxsZWUsIHRhYmxlLCBzY29wZSwgdG90YWxMZW5ndGgpOworICAg
IAorICAgIGZvciAodW5zaWduZWQgaSA9IHRvdGFsTGVuZ3RoIC0gbmFtZWRMZW5ndGg7IGktLTsp
CisgICAgICAgIHJlc3VsdC0+b3ZlcmZsb3dTdG9yYWdlKClbaV0uc2V0KHZtLCByZXN1bHQsIGV4
ZWMtPnVuY2hlY2tlZEFyZ3VtZW50cyhpICsgbmFtZWRMZW5ndGgpKTsKKyAgICAKKyAgICByZXR1
cm4gcmVzdWx0OworfQorCit2b2lkIFNjb3BlZEFyZ3VtZW50czo6dmlzaXRDaGlsZHJlbihKU0Nl
bGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIFNjb3BlZEFyZ3VtZW50cyog
dGhpc09iamVjdCA9IHN0YXRpY19jYXN0PFNjb3BlZEFyZ3VtZW50cyo+KGNlbGwpOworICAgIEFT
U0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKKyAgICBCYXNlOjp2
aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOworCisgICAgdmlzaXRvci5hcHBlbmQo
JnRoaXNPYmplY3QtPm1fY2FsbGVlKTsKKyAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+
bV90YWJsZSk7CisgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fc2NvcGUpOworICAg
IAorICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzKAorICAgICAgICB0aGlzT2JqZWN0LT5vdmVyZmxv
d1N0b3JhZ2UoKSwgdGhpc09iamVjdC0+bV90b3RhbExlbmd0aCAtIHRoaXNPYmplY3QtPm1fdGFi
bGUtPmxlbmd0aCgpKTsKK30KKworU3RydWN0dXJlKiBTY29wZWRBcmd1bWVudHM6OmNyZWF0ZVN0
cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJv
dG90eXBlKQoreworICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0
LCBwcm90b3R5cGUsIFR5cGVJbmZvKFNjb3BlZEFyZ3VtZW50c1R5cGUsIFN0cnVjdHVyZUZsYWdz
KSwgaW5mbygpKTsKK30KKwordm9pZCBTY29wZWRBcmd1bWVudHM6OnNsb3dEb3duQW5kV2FzdGVN
ZW1vcnkoVk0mIHZtKQoreworICAgIFJFTEVBU0VfQVNTRVJUKCFtX292ZXJyb2RlVGhpbmdzKTsK
KyAgICAKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1i
ZXIobV90YWJsZS0+bGVuZ3RoKCkpLCBEb250RW51bSk7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5w
cm9wZXJ0eU5hbWVzLT5jYWxsZWUsIG1fY2FsbGVlLmdldCgpLCBEb250RW51bSk7CisgICAgCisg
ICAgbV9vdmVycm9kZVRoaW5ncyA9IHRydWU7Cit9CisKK3ZvaWQgU2NvcGVkQXJndW1lbnRzOjpz
bG93RG93bkFuZFdhc3RlTWVtb3J5SWZOZWNlc3NhcnkoVk0mIHZtKQoreworICAgIGlmICghbV9v
dmVycm9kZVRoaW5ncykKKyAgICAgICAgc2xvd0Rvd25BbmRXYXN0ZU1lbW9yeSh2bSk7Cit9CisK
K3ZvaWQgU2NvcGVkQXJndW1lbnRzOjpvdmVycmlkZUFyZ3VtZW50KFZNJiB2bSwgdWludDMyX3Qg
aSkKK3sKKyAgICB1bnNpZ25lZCBuYW1lZExlbmd0aCA9IG1fdGFibGUtPmxlbmd0aCgpOworICAg
IGlmIChpIDwgbmFtZWRMZW5ndGgpCisgICAgICAgIG1fdGFibGUuc2V0KHZtLCB0aGlzLCBtX3Rh
YmxlLT5zZXQodm0sIGksIFNjb3BlT2Zmc2V0KCkpKTsKKyAgICBlbHNlIHsKKyAgICAgICAgQVNT
RVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oaSA8IG1fdG90YWxMZW5ndGgpOworICAgICAg
ICBvdmVyZmxvd1N0b3JhZ2UoKVtpIC0gbmFtZWRMZW5ndGhdLmNsZWFyKCk7CisgICAgfQorfQor
Cit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU2NvcGVkQXJndW1lbnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHMuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDE0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaWZuZGVmIFNjb3BlZEFyZ3VtZW50c19oCisjZGVmaW5lIFNjb3BlZEFyZ3VtZW50c19oCisK
KyNpbmNsdWRlICJHZW5lcmljQXJndW1lbnRzLmgiCisKK25hbWVzcGFjZSBKU0MgeworCisvLyBU
aGlzIGlzIGFuIEFyZ3VtZW50cy1jbGFzcyBvYmplY3QgdGhhdCB3ZSBjcmVhdGUgd2hlbiB5b3Ug
c2F5ICJhcmd1bWVudHMiIGluc2lkZSBhIGZ1bmN0aW9uLAorLy8gYW5kIG9uZSBvciBtb3JlIG9m
IHRoZSBhcmd1bWVudHMgbWF5IGJlIGNhcHR1cmVkIGluIHRoZSBmdW5jdGlvbidzIGFjdGl2YXRp
b24uIFRoZSBmdW5jdGlvbgorLy8gd2lsbCBjb3B5IGl0cyBmb3JtYWxseSBkZWNsYXJlZCBhcmd1
bWVudHMgaW50byB0aGUgYWN0aXZhdGlvbiBhbmQgdGhlbiBjcmVhdGUgdGhpcyBvYmplY3QuIFRo
aXMKKy8vIG9iamVjdCB3aWxsIHN0b3JlIHRoZSBvdmVyZmxvdyBhcmd1bWVudHMsIGlmIHRoZXJl
IGFyZSBhbnkuIFRoaXMgb2JqZWN0IHdpbGwgdXNlIHRoZSBzeW1ib2wKKy8vIHRhYmxlJ3MgU2Nv
cGVkQXJndW1lbnRzVGFibGUgYW5kIHRoZSBhY3RpdmF0aW9uLCBvciBpdHMgb3ZlcmZsb3cgc3Rv
cmFnZSwgdG8gaGFuZGxlIGFsbCBpbmRleGVkCisvLyBsb29rdXBzLgorY2xhc3MgU2NvcGVkQXJn
dW1lbnRzIDogcHVibGljIEdlbmVyaWNBcmd1bWVudHM8U2NvcGVkQXJndW1lbnRzPiB7Citwcml2
YXRlOgorICAgIFNjb3BlZEFyZ3VtZW50cyhWTSYsIFN0cnVjdHVyZSosIHVuc2lnbmVkIHRvdGFs
TGVuZ3RoKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgSlNGdW5jdGlvbiogY2FsbGVl
LCBTY29wZWRBcmd1bWVudHNUYWJsZSosIEpTTGV4aWNhbEVudmlyb25tZW50Kik7CisKK3B1Ymxp
YzoKKyAgICAvLyBDcmVhdGVzIGFuIGFyZ3VtZW50cyBvYmplY3QgYnV0IGxlYXZlcyBpdCB1bmlu
aXRpYWxpemVkLiBUaGlzIGlzIGRhbmdlcm91cyBpZiB3ZSBHQyByaWdodAorICAgIC8vIGFmdGVy
IGFsbG9jYXRpb24uCisgICAgc3RhdGljIFNjb3BlZEFyZ3VtZW50cyogY3JlYXRlVW5pbml0aWFs
aXplZChWTSYsIFN0cnVjdHVyZSosIEpTRnVuY3Rpb24qIGNhbGxlZSwgU2NvcGVkQXJndW1lbnRz
VGFibGUqLCBKU0xleGljYWxFbnZpcm9ubWVudCosIHVuc2lnbmVkIHRvdGFsTGVuZ3RoKTsKKyAg
ICAKKyAgICAvLyBDcmVhdGVzIGFuIGFyZ3VtZW50cyBvYmplY3QgYW5kIGluaXRpYWxpemVzIGV2
ZXJ5dGhpbmcgdG8gdGhlIGVtcHR5IHZhbHVlLiBVc2UgdGhpcyBpZiB5b3UKKyAgICAvLyBjYW5u
b3QgZ3VhcmFudGVlIHRoYXQgeW91J2xsIGltbWVkaWF0ZWx5IGluaXRpYWxpemUgYWxsIG9mIHRo
ZSBlbGVtZW50cy4KKyAgICBzdGF0aWMgU2NvcGVkQXJndW1lbnRzKiBjcmVhdGUoVk0mLCBTdHJ1
Y3R1cmUqLCBKU0Z1bmN0aW9uKiBjYWxsZWUsIFNjb3BlZEFyZ3VtZW50c1RhYmxlKiwgSlNMZXhp
Y2FsRW52aXJvbm1lbnQqLCB1bnNpZ25lZCB0b3RhbExlbmd0aCk7CisgICAgCisgICAgLy8gQ3Jl
YXRlcyBhbiBhcmd1bWVudHMgb2JqZWN0IGJ5IGNvcHlpbmcgdGhlIGFyZ3VtbmV0cyBmcm9tIHRo
ZSBzdGFjay4KKyAgICBzdGF0aWMgU2NvcGVkQXJndW1lbnRzKiBjcmVhdGVCeUNvcHlpbmcoVk0m
LCBTdHJ1Y3R1cmUqLCBFeGVjU3RhdGUqLCBTY29wZWRBcmd1bWVudHNUYWJsZSosIEpTTGV4aWNh
bEVudmlyb25tZW50Kik7CisgICAgCisgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0Nl
bGwqLCBTbG90VmlzaXRvciYpOworICAgIAorICAgIHVpbnQzMl90IGludGVybmFsTGVuZ3RoKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3RvdGFsTGVuZ3RoOworICAgIH0KKyAgICAK
KyAgICB1aW50MzJfdCBsZW5ndGgoRXhlY1N0YXRlKiBleGVjKSBjb25zdAorICAgIHsKKyAgICAg
ICAgaWYgKFVOTElLRUxZKG1fb3ZlcnJvZGVUaGluZ3MpKQorICAgICAgICAgICAgcmV0dXJuIGdl
dChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKS50b1VJbnQzMihleGVjKTsKKyAg
ICAgICAgcmV0dXJuIGludGVybmFsTGVuZ3RoKCk7CisgICAgfQorICAgIAorICAgIGJvb2wgY2Fu
QWNjZXNzSW5kZXhRdWlja2x5KHVpbnQzMl90IGkpIGNvbnN0CisgICAgeworICAgICAgICB1bnNp
Z25lZCBuYW1lZExlbmd0aCA9IG1fdGFibGUtPmxlbmd0aCgpOworICAgICAgICBpZiAoaSA8IG5h
bWVkTGVuZ3RoKQorICAgICAgICAgICAgcmV0dXJuICEhbV90YWJsZS0+Z2V0KGkpOworICAgICAg
ICBpZiAoaSA8IG1fdG90YWxMZW5ndGgpCisgICAgICAgICAgICByZXR1cm4gISFvdmVyZmxvd1N0
b3JhZ2UoKVtpIC0gbmFtZWRMZW5ndGhdLmdldCgpOworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorICAgIAorICAgIEpTVmFsdWUgZ2V0SW5kZXhRdWlja2x5KHVpbnQzMl90IGkpIGNvbnN0
CisgICAgeworICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihjYW5BY2Nl
c3NJbmRleFF1aWNrbHkoaSkpOworICAgICAgICB1bnNpZ25lZCBuYW1lZExlbmd0aCA9IG1fdGFi
bGUtPmxlbmd0aCgpOworICAgICAgICBpZiAoaSA8IG5hbWVkTGVuZ3RoKQorICAgICAgICAgICAg
cmV0dXJuIG1fc2NvcGUtPnZhcmlhYmxlQXQobV90YWJsZS0+Z2V0KGkpKS5nZXQoKTsKKyAgICAg
ICAgcmV0dXJuIG92ZXJmbG93U3RvcmFnZSgpW2kgLSBuYW1lZExlbmd0aF0uZ2V0KCk7CisgICAg
fQorCisgICAgdm9pZCBzZXRJbmRleFF1aWNrbHkoVk0mIHZtLCB1aW50MzJfdCBpLCBKU1ZhbHVl
IHZhbHVlKQorICAgIHsKKyAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04o
Y2FuQWNjZXNzSW5kZXhRdWlja2x5KGkpKTsKKyAgICAgICAgdW5zaWduZWQgbmFtZWRMZW5ndGgg
PSBtX3RhYmxlLT5sZW5ndGgoKTsKKyAgICAgICAgaWYgKGkgPCBuYW1lZExlbmd0aCkKKyAgICAg
ICAgICAgIG1fc2NvcGUtPnZhcmlhYmxlYXQobV90YWJsZS0+Z2V0KGkpKS5zZXQodm0sIHRoaXMs
IHZhbHVlKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgb3ZlcmZsb3dTdG9yYWdlKClbaSAt
IG5hbWVkTGVuZ3RoXS5zZXQodm0sIHRoaXMsIHZhbHVlKTsKKyAgICB9CisKKyAgICBXcml0ZUJh
cnJpZXI8SlNGdW5jdGlvbj4mIGNhbGxlZSgpCisgICAgeworICAgICAgICByZXR1cm4gbV9jYWxs
ZWU7CisgICAgfQorICAgIAorICAgIGJvb2wgb3ZlcnJvZGVUaGluZ3MoKSBjb25zdCB7IHJldHVy
biBtX292ZXJyb2RlVGhpbmdzOyB9CisgICAgdm9pZCBzbG93RG93bkFuZFdhc3RlTWVtb3J5KFZN
Jik7CisgICAgdm9pZCBzbG93RG93bkFuZFdhc3RlTWVtb3J5SWZOZWNlc3NhcnkoVk0mKTsKKyAg
ICB2b2lkIG92ZXJyaWRlQXJndW1lbnQoVk0mIHZtLCB1aW50MzJfdCBpKTsKKyAgICAKKyAgICBE
RUNMQVJFX0lORk87CisgICAgCisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJl
KFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHByb3RvdHlwZSk7CisgICAgCisgICAgc3Rh
dGljIHB0cmRpZmZfdCBvZmZzZXRPZk92ZXJyb2RlVGhpbmdzKCkgeyByZXR1cm4gT0JKRUNUX09G
RlNFVE9GKFNjb3BlZEFyZ3VtZW50cywgbV9vdmVycm9kZVRoaW5ncyk7IH0KKyAgICBzdGF0aWMg
cHRyZGlmZl90IG9mZnNldE9mVG90YWxMZW5ndGgoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0Yo
U2NvcGVkQXJndW1lbnRzLCBtX3RvdGFsTGVuZ3RoKTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qg
b2Zmc2V0T2ZUYWJsZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihTY29wZWRBcmd1bWVudHMs
IG1fdGFibGUpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlNjb3BlKCkgeyByZXR1
cm4gT0JKRUNUX09GRlNFVE9GKFNjb3BlZEFyZ3VtZW50cywgbV9zY29wZSk7IH0KKyAgICAKKyAg
ICBzdGF0aWMgc2l6ZV90IG92ZXJmbG93U3RvcmFnZU9mZnNldCgpCisgICAgeworICAgICAgICBy
ZXR1cm4gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mPHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93
bj4pPihzaXplb2YoU2NvcGVkQXJndW1lbnRzKSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBz
aXplX3QgYWxsb2NhdGlvblNpemUodW5zaWduZWQgb3ZlcmZsb3dBcmd1bWVudHNMZW5ndGgpCisg
ICAgeworICAgICAgICByZXR1cm4gc3RvcmFnZU9mZnNldCgpICsgc2l6ZW9mKFdyaXRlQmFycmll
cjxVbmtub3duPikgKiBvdmVyZmxvd0FyZ3VtZW50c0xlbmd0aDsKKyAgICB9CisKK3ByaXZhdGU6
CisgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiBvdmVyZmxvd1N0b3JhZ2UoKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxXcml0ZUJhcnJpZXI8VW5rbm93bj4qPigKKyAgICAg
ICAgICAgIGJpdHdpc2VfY2FzdDxjaGFyKj4odGhpcykgKyBvdmVyZmxvd1N0b3JhZ2VPZmZzZXQo
KSk7CisgICAgfQorICAgIAorICAgIGJvb2wgbV9vdmVycm9kZVRoaW5nczsgLy8gVHJ1ZSBpZiBs
ZW5ndGgsIGNhbGxlZSwgYW5kIGNhbGxlciBhcmUgZnVsbHkgbWF0ZXJpYWxpemVkIGluIHRoZSBv
YmplY3QuCisgICAgdW5zaWduZWQgbV90b3RhbExlbmd0aDsgLy8gVGhlIGxlbmd0aCBvZiBkZWNs
YXJlZCBwbHVzIG92ZXJmbG93IGFyZ3VtZW50cy4KKyAgICBXcml0ZUJhcnJpZXI8SlNGdW5jdGlv
bio+IG1fY2FsbGVlOworICAgIFdyaXRlQmFycmllcjxTY29wZWRBcmd1bWVudHNUYWJsZT4gbV90
YWJsZTsKKyAgICBXcml0ZUJhcnJpZXI8SlNMZXhpY2FsRW52aXJvbm1lbnQ+IG1fc2NvcGU7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIFNjb3BlZEFyZ3VtZW50c19oCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50c1RhYmxl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJn
dW1lbnRzVGFibGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1Njb3BlZEFyZ3VtZW50c1RhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5NCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IFNjb3BlZEFyZ3VtZW50c1RhYmxlX2gKKyNkZWZpbmUgU2NvcGVkQXJndW1lbnRzVGFibGVfaAor
CisjaW5jbHVkZSAiSlNDZWxsLmgiCisKK25hbWVzcGFjZSBKU0MgeworCisvLyBUaGlzIGNsYXNz
J3Mgb25seSBqb2IgaXMgdG8gaG9sZCBvbnRvIHRoZSBsaXN0IG9mIFNjb3BlT2Zmc2V0cyBmb3Ig
ZWFjaCBhcmd1bWVudCB0aGF0IGEKKy8vIGZ1bmN0aW9uIGhhcy4gTW9zdCBvZiB0aGUgdGltZSwg
dGhlIEJ5dGVjb2RlR2VuZXJhdG9yIHdpbGwgY3JlYXRlIG9uZSBvZiB0aGVzZSBhbmQgaXQgd2ls
bAorLy8gbmV2ZXIgYmUgbW9kaWZpZWQgc3Vic2VxdWVudGx5LiBUaGVyZSBpcyBhIHJhcmUgY2Fz
ZSB3aGVyZSBhIFNjb3BlZEFyZ3VtZW50cyBvYmplY3QgaXMgY3JlYXRlZAorLy8gYW5kIGFsaWFz
ZXMgb25lIG9mIHRoZXNlIGFuZCB0aGVuIGRlY2lkZXMgdG8gbW9kaWZ5IGl0OyBpbiB0aGF0IGNh
c2Ugd2UgZG8gY29weS1vbi13cml0ZS4gVGhpcworLy8gbWFrZXMgc2Vuc2UgYmVjYXVzZSBzdWNo
IG1vZGlmaWNhdGlvbnMgYXJlIHNvIHVuY29tbW9uLiBZb3UnZCBoYXZlIHRvIGRvIHNvbWV0aGlu
ZyBjcmF6eSBsaWtlCisvLyAiZGVsZXRlIGFyZ3VtZW50c1tpXSIgb3Igc29tZSB2YXJpYW50IG9m
IGRlZmluZU93blByb3BlcnR5LgorY2xhc3MgU2NvcGVkQXJndW1lbnRzIDogcHVibGljIEpTQ2Vs
bCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBKU0NlbGwgQmFzZTsKKyAgICAKKyAgICBzdGF0aWMg
Y29uc3QgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3QgYm9v
bCBoYXNJbW1vcnRhbFN0cnVjdHVyZSA9IHRydWU7CisKK3ByaXZhdGU6CisgICAgU2NvcGVkQXJn
dW1lbnRzVGFibGUoVk0mKTsKKyAgICB+U2NvcGVkQXJndW1lbnRzVGFibGUoKTsKKworcHVibGlj
OgorICAgIHN0YXRpYyBTY29wZWRBcmd1bWVudHNUYWJsZSogY3JlYXRlKFZNJik7CisgICAgCisg
ICAgU2NvcGVkQXJndW1lbnRzKiBjbG9uZShWTSYpOworICAgIAorICAgIHVpbnQzMl90IGxlbmd0
aCgpIGNvbnN0IHsgcmV0dXJuIG1fbGVuZ3RoOyB9CisgICAgU2NvcGVkQXJndW1lbnRzVGFibGUq
IHNldExlbmd0aChWTSYsIHVpbnQzMl90IG5ld0xlbmd0aCk7CisgICAgCisgICAgU2NvcGVPZmZz
ZXQgZ2V0KHVpbnQzMl90IGkpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlRfV0lUSF9TRUNV
UklUWV9JTVBMSUNBVElPTihpIDwgbV9sZW5ndGgpOworICAgICAgICByZXR1cm4gbV9hcmd1bWVu
dHNbaV07CisgICAgfQorICAgIAorICAgIHZvaWQgbG9jaygpCisgICAgeworICAgICAgICBtX2xv
Y2tlZCA9IHRydWU7CisgICAgfQorICAgIAorICAgIFNjb3BlZEFyZ3VtZW50cyogc2V0KFZNJiB2
bSwgdWludDMyX3QgaSwgU2NvcGVPZmZzZXQgdmFsdWUpCisgICAgeworICAgICAgICBTY29wZWRB
cmd1bWVudHMqIHJlc3VsdDsKKyAgICAgICAgaWYgKFVOTElLRUxZKG1fbG9ja2VkKSkKKyAgICAg
ICAgICAgIHJlc3VsdCA9IGNsb25lKHZtKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmVz
dWx0ID0gdGhpczsKKyAgICAgICAgcmVzdWx0LT5zZXREaXJlY3QoaSwgdmFsdWUpOworICAgICAg
ICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBERUNMQVJFX0lORk87CisgICAgCisg
ICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkxlbmd0aCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZT
RVRPRihTY29wZWRBcmd1bWVudHMsIG1fbGVuZ3RoKTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qg
b2Zmc2V0T2ZBcmd1bWVudHMoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoU2NvcGVkQXJndW1l
bnRzLCBtX2FyZ3VtZW50cyk7IH0KKworcHJpdmF0ZToKKyAgICB1aW50MzJfdCBtX2xlbmd0aDsK
KyAgICBib29sIG1fbG9ja2VkOyAvLyBCZWluZyBsb2NrZWQgbWVhbnMgdGhhdCB0aGVyZSBhcmUg
bXVsdGlwbGUgcmVmZXJlbmNlcyB0byB0aGlzIG9iamVjdCBhbmQgbm9uZSBvZiB0aGVtIGV4cGVj
dCB0byBzZWUgdGhlIG90aGVycycgbW9kaWZpY2F0aW9ucy4gVGhpcyBtZWFucyB0aGF0IG1vZGlm
aWNhdGlvbnMgbmVlZCB0byBtYWtlIGEgY29weSBmaXJzdC4KKyAgICBzdGQ6OnVuaXF1ZV9wdHI8
U2NvcGVPZmZzZXRbXT4gbV9hcmd1bWVudHM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKwor
I2VuZGlmIC8vIFNjb3BlZEFyZ3VtZW50c1RhYmxlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmNwcAkocmV2aXNpb24gMTgwODc1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxNCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTQs
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC02OSw2ICs2OSw4IEBAIEpTVmFsdWUgU3ltYm9sVGFibGVFbnRyeTo6
aW5mZXJyZWRWYWx1ZSgKIAogdm9pZCBTeW1ib2xUYWJsZUVudHJ5OjpwcmVwYXJlVG9XYXRjaChT
eW1ib2xUYWJsZSogc3ltYm9sVGFibGUpCiB7CisgICAgaWYgKCFpc1dhdGNoYWJsZSgpKQorICAg
ICAgICByZXR1cm47CiAgICAgRmF0RW50cnkqIGVudHJ5ID0gaW5mbGF0ZSgpOwogICAgIGlmIChl
bnRyeS0+bV93YXRjaHBvaW50cykKICAgICAgICAgcmV0dXJuOwpAQCAtMTM3LDI5ICsxMzksMjIg
QEAgdm9pZCBTeW1ib2xUYWJsZTo6V2F0Y2hwb2ludENsZWFudXA6OmZpbgogICAgIH0KIH0KIAot
U3ltYm9sVGFibGUqIFN5bWJvbFRhYmxlOjpjbG9uZUNhcHR1cmVkTmFtZXMoVk0mIHZtKQorU3lt
Ym9sVGFibGUqIFN5bWJvbFRhYmxlOjpjbG9uZVNjb3BlUGFydChWTSYgdm0pCiB7CiAgICAgU3lt
Ym9sVGFibGUqIHJlc3VsdCA9IFN5bWJvbFRhYmxlOjpjcmVhdGUodm0pOwogICAgIAotICAgIHJl
c3VsdC0+bV9wYXJhbWV0ZXJDb3VudEluY2x1ZGluZ1RoaXMgPSBtX3BhcmFtZXRlckNvdW50SW5j
bHVkaW5nVGhpczsKICAgICByZXN1bHQtPm1fdXNlc05vblN0cmljdEV2YWwgPSBtX3VzZXNOb25T
dHJpY3RFdmFsOwotICAgIHJlc3VsdC0+bV9jYXB0dXJlU3RhcnQgPSBtX2NhcHR1cmVTdGFydDsK
LSAgICByZXN1bHQtPm1fY2FwdHVyZUVuZCA9IG1fY2FwdHVyZUVuZDsKIAogICAgIGZvciAoYXV0
byBpdGVyID0gbV9tYXAuYmVnaW4oKSwgZW5kID0gbV9tYXAuZW5kKCk7IGl0ZXIgIT0gZW5kOyAr
K2l0ZXIpIHsKLSAgICAgICAgaWYgKCFpc0NhcHR1cmVkKGl0ZXItPnZhbHVlLmdldEluZGV4KCkp
KQorICAgICAgICBpZiAoIWl0ZXItPnZhbHVlLnZhck9mZnNldCgpLmlzU2NvcGUoKSkKICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICByZXN1bHQtPm1fbWFwLmFkZCgKICAgICAgICAgICAg
IGl0ZXItPmtleSwKLSAgICAgICAgICAgIFN5bWJvbFRhYmxlRW50cnkoaXRlci0+dmFsdWUuZ2V0
SW5kZXgoKSwgaXRlci0+dmFsdWUuZ2V0QXR0cmlidXRlcygpKSk7CisgICAgICAgICAgICBTeW1i
b2xUYWJsZUVudHJ5KGl0ZXItPnZhbHVlLnZhck9mZnNldCgpLCBpdGVyLT52YWx1ZS5nZXRBdHRy
aWJ1dGVzKCkpKTsKICAgICB9CiAgICAgCi0gICAgaWYgKG1fc2xvd0FyZ3VtZW50cykgewotICAg
ICAgICByZXN1bHQtPm1fc2xvd0FyZ3VtZW50cyA9IHN0ZDo6bWFrZV91bmlxdWU8U2xvd0FyZ3Vt
ZW50W10+KHBhcmFtZXRlckNvdW50KCkpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBwYXJh
bWV0ZXJDb3VudCgpOyBpLS07KQotICAgICAgICAgICAgcmVzdWx0LT5tX3Nsb3dBcmd1bWVudHNb
aV0gPSBtX3Nsb3dBcmd1bWVudHNbaV07Ci0gICAgfQotCisgICAgcmVzdWx0LT5tX2FyZ3VtZW50
cyA9IGFyZ3VtZW50cygpOworICAgIAogICAgIGlmIChtX3R5cGVQcm9maWxpbmdSYXJlRGF0YSkg
ewogICAgICAgICByZXN1bHQtPm1fdHlwZVByb2ZpbGluZ1JhcmVEYXRhID0gc3RkOjptYWtlX3Vu
aXF1ZTxUeXBlUHJvZmlsaW5nUmFyZURhdGE+KCk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuaAkocmV2aXNpb24gMTgwODc1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMTItMjAxNCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIw
MDgsIDIwMTItMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMxLDYgKzMxLDcgQEAKIAogI2luY2x1ZGUgIkNvbmN1
cnJlbnRKSVRMb2NrLmgiCiAjaW5jbHVkZSAiSlNPYmplY3QuaCIKKyNpbmNsdWRlICJTY29wZWRB
cmd1bWVudHNUYWJsZS5oIgogI2luY2x1ZGUgIlR5cGVMb2NhdGlvbi5oIgogI2luY2x1ZGUgIlZh
cmlhYmxlV2F0Y2hwb2ludFNldC5oIgogI2luY2x1ZGUgPG1lbW9yeT4KQEAgLTM5LDI0ICs0MCw2
IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1zdHJ1Y3QgU2xvd0FyZ3VtZW50IHsKLXB1YmxpYzoK
LSAgICBlbnVtIFN0YXR1cyB7Ci0gICAgICAgIE5vcm1hbCA9IDAsCi0gICAgICAgIENhcHR1cmVk
ID0gMSwKLSAgICAgICAgRGVsZXRlZCA9IDIKLSAgICB9OwotCi0gICAgU2xvd0FyZ3VtZW50KCkK
LSAgICAgICAgOiBzdGF0dXMoTm9ybWFsKQotICAgICAgICAsIGluZGV4KDApCi0gICAgewotICAg
IH0KLQotICAgIFN0YXR1cyBzdGF0dXM7Ci0gICAgaW50IGluZGV4OyAvLyBJZiBzdGF0dXMgaXMg
J0RlbGV0ZWQnLCBpbmRleCBpcyBib2d1cy4KLX07Ci0KIHN0YXRpYyBBTFdBWVNfSU5MSU5FIGlu
dCBtaXNzaW5nU3ltYm9sTWFya2VyKCkgeyByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+
OjptYXgoKTsgfQogCiAvLyBUaGUgYml0IHR3aWRkbGluZyBpbiB0aGlzIGNsYXNzIGFzc3VtZXMg
dGhhdCBldmVyeSByZWdpc3RlciBpbmRleCBpcyBhCkBAIC04Niw2ICs2OSwyOSBAQCBzdGF0aWMg
QUxXQVlTX0lOTElORSBpbnQgbWlzc2luZ1N5bWJvbE1hCiAvLyBjb3B5OiAgICAgU3ltYm9sVGFi
bGVFbnRyeSAtLT4gRmF0RW50cnkgLS0tLS1eCiAKIHN0cnVjdCBTeW1ib2xUYWJsZUVudHJ5IHsK
K3ByaXZhdGU6CisgICAgc3RhdGljIFZhck9mZnNldCB2YXJPZmZzZXRGcm9tQml0cyhpbnRwdHJf
dCBiaXRzKQorICAgIHsKKyAgICAgICAgVmFyS2luZCBraW5kOworICAgICAgICBpbnRwdHJfdCBr
aW5kQml0cyA9IGJpdHMgJiBLaW5kTWFzazsKKyAgICAgICAgaWYgKGtpbmRCaXRzIDw9IFVud2F0
Y2hhYmxlU2NvcGVLaW5kQml0cykKKyAgICAgICAgICAgIGtpbmQgPSBTY29wZVZhcktpbmQ7Cisg
ICAgICAgIGVsc2UgaWYgKGtpbmRCaXRzID09IFN0YWNrS2luZEJpdHMpCisgICAgICAgICAgICBr
aW5kID0gU3RhY2tWYXJLaW5kOworICAgICAgICBlbHNlCisgICAgICAgICAgICBraW5kID0gQ2Fw
dHVyZWRBcmd1bWVudEtpbmQ7CisgICAgICAgIHJldHVybiBWYXJPZmZzZXQ6OmFzc2VtYmxlKGtp
bmQsIHN0YXRpY19jYXN0PGludD4oYml0cyA+PiBGbGFnQml0cykpOworICAgIH0KKyAgICAKKyAg
ICBzdGF0aWMgU2NvcGVPZmZzZXQgc2NvcGVPZmZzZXRGcm9tQml0cyhpbnRwdHJfdCBiaXRzKQor
ICAgIHsKKyAgICAgICAgQVNTRVJUKCEoYml0cyAmIFN0YWNrRmxhZykpOworICAgICAgICBBU1NF
UlQoIShiaXRzICYgQ2FwdHVyZWRBcmd1bWVudEZsYWcpKTsKKyAgICAgICAgcmV0dXJuIFNjb3Bl
T2Zmc2V0KHN0YXRpY19jYXN0PGludD4oYml0cyA+PiBGbGFnQml0cykpOworICAgIH0KKworcHVi
bGljOgorICAgIAogICAgIC8vIFVzZSB0aGUgU3ltYm9sVGFibGVFbnRyeTo6RmFzdCBjbGFzcywg
ZWl0aGVyIHZpYSBpbXBsaWNpdCBjYXN0IG9yIGJ5IGNhbGxpbmcKICAgICAvLyBnZXRGYXN0KCks
IHdoZW4geW91ICgxKSBvbmx5IGNhcmUgYWJvdXQgaXNOdWxsKCksIGdldEluZGV4KCksIGFuZCBp
c1JlYWRPbmx5KCksCiAgICAgLy8gYW5kICgyKSB5b3UgYXJlIGluIGEgaG90IHBhdGggd2hlcmUg
eW91IG5lZWQgdG8gbWluaW1pemUgdGhlIG51bWJlciBvZiB0aW1lcwpAQCAtMTA3LDExICsxMTMs
MTkgQEAgc3RydWN0IFN5bWJvbFRhYmxlRW50cnkgewogICAgICAgICAgICAgcmV0dXJuICEobV9i
aXRzICYgflNsaW1GbGFnKTsKICAgICAgICAgfQogCi0gICAgICAgIGludCBnZXRJbmRleCgpIGNv
bnN0CisgICAgICAgIFZhck9mZnNldCB2YXJPZmZzZXQoKSBjb25zdAogICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PihtX2JpdHMgPj4gRmxhZ0JpdHMpOworICAg
ICAgICAgICAgcmV0dXJuIHZhck9mZnNldEZyb21CaXRzKG1fYml0cyk7CiAgICAgICAgIH0KLSAg
ICAKKyAgICAgICAgCisgICAgICAgIC8vIEFzc2VydHMgaWYgdGhlIG9mZnNldCBpcyBhbnl0aGlu
ZyBidXQgYSBzY29wZSBvZmZzZXQuIFRoaXMgc3RydWN0dXJlcyB0aGUgYXNzZXJ0aW9ucworICAg
ICAgICAvLyBpbiBhIHdheSB0aGF0IG1heSByZXN1bHQgaW4gYmV0dGVyIGNvZGUsIGV2ZW4gaW4g
cmVsZWFzZSwgdGhhbiBkb2luZworICAgICAgICAvLyB2YXJPZmZzZXQoKS5zY29wZU9mZnNldCgp
LgorICAgICAgICBTY29wZU9mZnNldCBzY29wZU9mZnNldCgpIGNvbnN0CisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBzY29wZU9mZnNldEZyb21CaXRzKG1fYml0cyk7CisgICAgICAgIH0K
KyAgICAgICAgCiAgICAgICAgIGJvb2wgaXNSZWFkT25seSgpIGNvbnN0CiAgICAgICAgIHsKICAg
ICAgICAgICAgIHJldHVybiBtX2JpdHMgJiBSZWFkT25seUZsYWc7CkBAIC0xNDIsMTggKzE1Niwx
OCBAQCBzdHJ1Y3QgU3ltYm9sVGFibGVFbnRyeSB7CiAgICAgewogICAgIH0KIAotICAgIFN5bWJv
bFRhYmxlRW50cnkoaW50IGluZGV4KQorICAgIFN5bWJvbFRhYmxlRW50cnkoVmFyT2Zmc2V0IG9m
ZnNldCkKICAgICAgICAgOiBtX2JpdHMoU2xpbUZsYWcpCiAgICAgewotICAgICAgICBBU1NFUlQo
aXNWYWxpZEluZGV4KGluZGV4KSk7Ci0gICAgICAgIHBhY2soaW5kZXgsIGZhbHNlLCBmYWxzZSk7
CisgICAgICAgIEFTU0VSVChpc1ZhbGlkVmFyT2Zmc2V0KG9mZnNldCkpOworICAgICAgICBwYWNr
KG9mZnNldCwgZmFsc2UsIGZhbHNlKTsKICAgICB9CiAKLSAgICBTeW1ib2xUYWJsZUVudHJ5KGlu
dCBpbmRleCwgdW5zaWduZWQgYXR0cmlidXRlcykKKyAgICBTeW1ib2xUYWJsZUVudHJ5KFZhck9m
ZnNldCBvZmZzZXQsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCiAgICAgICAgIDogbV9iaXRzKFNsaW1G
bGFnKQogICAgIHsKLSAgICAgICAgQVNTRVJUKGlzVmFsaWRJbmRleChpbmRleCkpOwotICAgICAg
ICBwYWNrKGluZGV4LCBhdHRyaWJ1dGVzICYgUmVhZE9ubHksIGF0dHJpYnV0ZXMgJiBEb250RW51
bSk7CisgICAgICAgIEFTU0VSVChpc1ZhbGlkVmFyT2Zmc2V0KG9mZnNldCkpOworICAgICAgICBw
YWNrKG9mZnNldCwgYXR0cmlidXRlcyAmIFJlYWRPbmx5LCBhdHRyaWJ1dGVzICYgRG9udEVudW0p
OwogICAgIH0KICAgICAKICAgICB+U3ltYm9sVGFibGVFbnRyeSgpCkBAIC0xODEsOSArMTk1LDIy
IEBAIHN0cnVjdCBTeW1ib2xUYWJsZUVudHJ5IHsKICAgICAgICAgcmV0dXJuICEoYml0cygpICYg
flNsaW1GbGFnKTsKICAgICB9CiAKLSAgICBpbnQgZ2V0SW5kZXgoKSBjb25zdAorICAgIFZhck9m
ZnNldCB2YXJPZmZzZXQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHZhck9mZnNldEZy
b21CaXRzKGJpdHMoKSk7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNXYXRjaGFibGUoKSBjb25z
dAogICAgIHsKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4oYml0cygpID4+IEZsYWdC
aXRzKTsKKyAgICAgICAgcmV0dXJuIChtX2JpdHMgJiBLaW5kQml0c01hc2spID09IFNjb3BlS2lu
ZEJpdHM7CisgICAgfQorICAgIAorICAgIC8vIEFzc2VydHMgaWYgdGhlIG9mZnNldCBpcyBhbnl0
aGluZyBidXQgYSBzY29wZSBvZmZzZXQuIFRoaXMgc3RydWN0dXJlcyB0aGUgYXNzZXJ0aW9ucwor
ICAgIC8vIGluIGEgd2F5IHRoYXQgbWF5IHJlc3VsdCBpbiBiZXR0ZXIgY29kZSwgZXZlbiBpbiBy
ZWxlYXNlLCB0aGFuIGRvaW5nCisgICAgLy8gdmFyT2Zmc2V0KCkuc2NvcGVPZmZzZXQoKS4KKyAg
ICBTY29wZU9mZnNldCBzY29wZU9mZnNldCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
c2NvcGVPZmZzZXRGcm9tQml0cyhiaXRzKCkpOwogICAgIH0KICAgICAKICAgICBBTFdBWVNfSU5M
SU5FIEZhc3QgZ2V0RmFzdCgpIGNvbnN0CkBAIC0yMDYsMTAgKzIzMywxMCBAQCBzdHJ1Y3QgU3lt
Ym9sVGFibGVFbnRyeSB7CiAgICAgewogICAgICAgICByZXR1cm4gZ2V0RmFzdCgpLmdldEF0dHJp
YnV0ZXMoKTsKICAgICB9Ci0KKyAgICAKICAgICB2b2lkIHNldEF0dHJpYnV0ZXModW5zaWduZWQg
YXR0cmlidXRlcykKICAgICB7Ci0gICAgICAgIHBhY2soZ2V0SW5kZXgoKSwgYXR0cmlidXRlcyAm
IFJlYWRPbmx5LCBhdHRyaWJ1dGVzICYgRG9udEVudW0pOworICAgICAgICBwYWNrKHZhck9mZnNl
dCgpLCBpc1dhdGNoYWJsZSgpLCBhdHRyaWJ1dGVzICYgUmVhZE9ubHksIGF0dHJpYnV0ZXMgJiBE
b250RW51bSk7CiAgICAgfQogCiAgICAgYm9vbCBpc1JlYWRPbmx5KCkgY29uc3QKQEAgLTIxOCw2
ICsyNDUsMTIgQEAgc3RydWN0IFN5bWJvbFRhYmxlRW50cnkgewogICAgIH0KICAgICAKICAgICBK
U1ZhbHVlIGluZmVycmVkVmFsdWUoKTsKKworICAgIHZvaWQgZGlzYWJsZVdhdGNoaW5nKCkKKyAg
ICB7CisgICAgICAgIGlmICh2YXJPZmZzZXQoKS5pc1Njb3BlKCkpCisgICAgICAgICAgICBwYWNr
KHZhck9mZnNldCgpLCBmYWxzZSwgYXR0cmlidXRlcyAmIFJlYWRPbmx5LCBhdHRyaWJ1dGVzICYg
RG9udEVudW0pOworICAgIH0KICAgICAKICAgICB2b2lkIHByZXBhcmVUb1dhdGNoKFN5bWJvbFRh
YmxlKik7CiAgICAgCkBAIC0yNDIsNyArMjc1LDEyIEBAIHByaXZhdGU6CiAgICAgc3RhdGljIGNv
bnN0IGludHB0cl90IFJlYWRPbmx5RmxhZyA9IDB4MjsKICAgICBzdGF0aWMgY29uc3QgaW50cHRy
X3QgRG9udEVudW1GbGFnID0gMHg0OwogICAgIHN0YXRpYyBjb25zdCBpbnRwdHJfdCBOb3ROdWxs
RmxhZyA9IDB4ODsKLSAgICBzdGF0aWMgY29uc3QgaW50cHRyX3QgRmxhZ0JpdHMgPSA0OworICAg
IHN0YXRpYyBjb25zdCBpbnRwdHJfdCBLaW5kQml0c01hc2sgPSAweDMwOworICAgIHN0YXRpYyBj
b25zdCBpbnRwdHJfdCBTY29wZUtpbmRCaXRzID0gMHgwMDsKKyAgICBzdGF0aWMgY29uc3QgaW50
cHRyX3QgVW53YXRjaGFibGVTY29wZUtpbmRCaXRzID0gMHgxMDsKKyAgICBzdGF0aWMgY29uc3Qg
aW50cHRyX3QgU3RhY2tLaW5kQml0cyA9IDB4MjA7CisgICAgc3RhdGljIGNvbnN0IGludHB0cl90
IENhcHR1cmVkQXJndW1lbnRLaW5kQml0cyA9IDB4MzA7CisgICAgc3RhdGljIGNvbnN0IGludHB0
cl90IEZsYWdCaXRzID0gNjsKICAgICAKICAgICBjbGFzcyBGYXRFbnRyeSB7CiAgICAgICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwpAQCAtMzA5LDIwICszNDcsNDAgQEAgcHJpdmF0ZToKIAog
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZnJlZUZhdEVudHJ5U2xvdygpOwogCi0gICAgdm9p
ZCBwYWNrKGludCBpbmRleCwgYm9vbCByZWFkT25seSwgYm9vbCBkb250RW51bSkKKyAgICB2b2lk
IHBhY2soVmFyT2Zmc2V0IG9mZnNldCwgYm9vbCBpc1dhdGNoYWJsZSwgYm9vbCByZWFkT25seSwg
Ym9vbCBkb250RW51bSkKICAgICB7CiAgICAgICAgIEFTU0VSVCghaXNGYXQoKSk7CiAgICAgICAg
IGludHB0cl90JiBiaXRzUmVmID0gYml0cygpOwotICAgICAgICBiaXRzUmVmID0gKHN0YXRpY19j
YXN0PGludHB0cl90PihpbmRleCkgPDwgRmxhZ0JpdHMpIHwgTm90TnVsbEZsYWcgfCBTbGltRmxh
ZzsKKyAgICAgICAgYml0c1JlZiA9CisgICAgICAgICAgICAoc3RhdGljX2Nhc3Q8aW50cHRyX3Q+
KG9mZnNldC5yYXdPZmZzZXQoKSkgPDwgRmxhZ0JpdHMpIHwgTm90TnVsbEZsYWcgfCBTbGltRmxh
ZzsKICAgICAgICAgaWYgKHJlYWRPbmx5KQogICAgICAgICAgICAgYml0c1JlZiB8PSBSZWFkT25s
eUZsYWc7CiAgICAgICAgIGlmIChkb250RW51bSkKICAgICAgICAgICAgIGJpdHNSZWYgfD0gRG9u
dEVudW1GbGFnOworICAgICAgICBzd2l0Y2ggKG9mZnNldC5raW5kKCkpIHsKKyAgICAgICAgY2Fz
ZSBTY29wZVZhcktpbmQ6CisgICAgICAgICAgICBpZiAoaXNXYXRjaGFibGUpCisgICAgICAgICAg
ICAgICAgYml0c1JlZiB8PSBTY29wZUtpbmRCaXRzOworICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgIGJpdHNSZWYgfD0gVW53YXRjaGFibGVTY29wZUtpbmRCaXRzOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgU3RhY2tWYXJLaW5kOgorICAgICAgICAgICAgQVNTRVJU
KCFpc1dhdGNoYWJsZSk7CisgICAgICAgICAgICBiaXRzUmVmIHw9IFN0YWNrS2luZEJpdHM7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDYXB0dXJlZEFyZ3VtZW50S2luZDoKKyAg
ICAgICAgICAgIEFTU0VSVCghaXNXYXRjaGFibGUpOworICAgICAgICAgICAgYml0c1JlZiB8PSBD
YXB0dXJlZEFyZ3VtZW50S2luZEJpdHM7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQogICAgIH0KICAgICAKLSAgICBib29sIGlzVmFsaWRJbmRl
eChpbnQgaW5kZXgpCisgICAgc3RhdGljIGJvb2wgaXNWYWxpZFZhck9mZnNldChWYXJPZmZzZXQg
b2Zmc2V0KQogICAgIHsKLSAgICAgICAgcmV0dXJuICgoc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KGlu
ZGV4KSA8PCBGbGFnQml0cykgPj4gRmxhZ0JpdHMpID09IHN0YXRpY19jYXN0PGludHB0cl90Pihp
bmRleCk7CisgICAgICAgIHJldHVybiAoKHN0YXRpY19jYXN0PGludHB0cl90PihvZmZzZXQucmF3
T2Zmc2V0KCkpIDw8IEZsYWdCaXRzKSA+PiBGbGFnQml0cykgPT0gc3RhdGljX2Nhc3Q8aW50cHRy
X3Q+KG9mZnNldC5yYXdPZmZzZXQoKSk7CiAgICAgfQogCiAgICAgaW50cHRyX3QgbV9iaXRzOwpA
QCAtMzUxLDcgKzQwOSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgU3ltYm9sVGFibGUqIGNyZWF0
ZU5hbWVTY29wZVRhYmxlKFZNJiB2bSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIHVuc2lnbmVk
IGF0dHJpYnV0ZXMpCiAgICAgewogICAgICAgICBTeW1ib2xUYWJsZSogcmVzdWx0ID0gY3JlYXRl
KHZtKTsKLSAgICAgICAgcmVzdWx0LT5hZGQoaWRlbnQuaW1wbCgpLCBTeW1ib2xUYWJsZUVudHJ5
KC0xLCBhdHRyaWJ1dGVzKSk7CisgICAgICAgIHJlc3VsdC0+YWRkKGlkZW50LmltcGwoKSwgU3lt
Ym9sVGFibGVFbnRyeShWYXJPZmZzZXQoU2NvcGVPZmZzZXQoMCkpLCBhdHRyaWJ1dGVzKSk7CiAg
ICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgIApAQCAtNDIzLDkgKzQ4MSw1MyBAQCBw
dWJsaWM6CiAgICAgICAgIHJldHVybiBzaXplKGxvY2tlcik7CiAgICAgfQogICAgIAotICAgIE1h
cDo6QWRkUmVzdWx0IGFkZChjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiwgU3RyaW5nSW1wbCog
a2V5LCBjb25zdCBTeW1ib2xUYWJsZUVudHJ5JiBlbnRyeSkKKyAgICBTY29wZU9mZnNldCBtYXhT
Y29wZU9mZnNldCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9tYXhTY29wZU9mZnNl
dDsKKyAgICB9CisgICAgCisgICAgdm9pZCBkaWRVc2VTY29wZU9mZnNldChTY29wZU9mZnNldCBv
ZmZzZXQpCisgICAgeworICAgICAgICBpZiAoIW1fbWF4U2NvcGVPZmZzZXQgfHwgbV9tYXhTY29w
ZU9mZnNldCA8IG9mZmV0KQorICAgICAgICAgICAgbV9tYXhTY29wZU9mZnNldCA9IG9mZnNldDsK
KyAgICB9CisgICAgCisgICAgdm9pZCBkaWRVc2VWYXJPZmZzZXQoVmFyT2Zmc2V0IG9mZnNldCkK
KyAgICB7CisgICAgICAgIGlmIChvZmZzZXQuaXNTY29wZSgpKQorICAgICAgICAgICAgZGlkVXNl
U2NvcGVPZmZzZXQob2Zmc2V0KTsKKyAgICB9CisgICAgCisgICAgdW5zaWduZWQgc2NvcGVTaXpl
KCkgY29uc3QKKyAgICB7CisgICAgICAgIFNjb3BlT2Zmc2V0IG1heFNjb3BlT2Zmc2V0ID0gdGhp
cy0+bWF4U2NvcGVPZmZzZXQoKTsKKyAgICAgICAgCisgICAgICAgIC8vIERvIHNvbWUgY2FsY3Vs
YXRpb24gdGhhdCByZWxpZXMgb24gaW52YWxpZCBzY29wZSBvZmZzZXQgcGx1cyBvbmUgYmVpbmcg
emVyby4KKyAgICAgICAgdW5zaWduZWQgZmFzdFJlc3VsdCA9IG1heFNjb3BlT2Zmc2V0Lm9mZnNl
dFVuY2hlY2tlZCgpICsgMTsKKyAgICAgICAgCisgICAgICAgIC8vIEFzc2VydCB0aGF0IHRoaXMg
d29ya3MuCisgICAgICAgIEFTU0VSVChmYXN0UmVzdWx0ID09ICghbWF4U2NvcGVPZmZzZXQgPyAw
IDogbWF4U2NvcGVPZmZzZXQub2Zmc2V0KCkgKyAxKSk7CisgICAgICAgIAorICAgICAgICByZXR1
cm4gZmFzdFJlc3VsdDsKKyAgICB9CisgICAgCisgICAgU2NvcGVPZmZzZXQgbmV4dFNjb3BlT2Zm
c2V0KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBTY29wZU9mZnNldChzY29wZVNpemUo
KSk7CisgICAgfQorICAgIAorICAgIFNjb3BlT2Zmc2V0IHRha2VOZXh0U2NvcGVPZmZzZXQoKQor
ICAgIHsKKyAgICAgICAgU2NvcGVPZmZzZXQgcmVzdWx0ID0gbmV4dFNjb3BlT2Zmc2V0KCk7Cisg
ICAgICAgIG1fbWF4U2NvcGVPZmZzZXQgPSByZXN1bHQ7CisgICAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgfQorICAgIAorICAgIHZvaWQgYWRkKGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImLCBT
dHJpbmdJbXBsKiBrZXksIGNvbnN0IFN5bWJvbFRhYmxlRW50cnkmIGVudHJ5KQogICAgIHsKLSAg
ICAgICAgcmV0dXJuIG1fbWFwLmFkZChrZXksIGVudHJ5KTsKKyAgICAgICAgZGlkVXNlVmFyT2Zm
c2V0KGVudHJ5LnZhck9mZnNldCgpKTsKKyAgICAgICAgTWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0g
bV9tYXAuYWRkKGtleSwgZW50cnkpOworICAgICAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgcmVz
dWx0LmlzTmV3RW50cnkpOwogICAgIH0KICAgICAKICAgICB2b2lkIGFkZChTdHJpbmdJbXBsKiBr
ZXksIGNvbnN0IFN5bWJvbFRhYmxlRW50cnkmIGVudHJ5KQpAQCAtNDM0LDkgKzUzNiwxMCBAQCBw
dWJsaWM6CiAgICAgICAgIGFkZChsb2NrZXIsIGtleSwgZW50cnkpOwogICAgIH0KICAgICAKLSAg
ICBNYXA6OkFkZFJlc3VsdCBzZXQoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYsIFN0cmluZ0lt
cGwqIGtleSwgY29uc3QgU3ltYm9sVGFibGVFbnRyeSYgZW50cnkpCisgICAgdm9pZCBzZXQoY29u
c3QgQ29uY3VycmVudEpJVExvY2tlciYsIFN0cmluZ0ltcGwqIGtleSwgY29uc3QgU3ltYm9sVGFi
bGVFbnRyeSYgZW50cnkpCiAgICAgewotICAgICAgICByZXR1cm4gbV9tYXAuc2V0KGtleSwgZW50
cnkpOworICAgICAgICBkaWRVc2VWYXJPZmZzZXQoZW50cnkudmFyT2Zmc2V0KCkpOworICAgICAg
ICBtX21hcC5zZXQoa2V5LCBlbnRyeSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgc2V0KFN0cmlu
Z0ltcGwqIGtleSwgY29uc3QgU3ltYm9sVGFibGVFbnRyeSYgZW50cnkpCkBAIC00NTYsNiArNTU5
LDQ1IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGNvbnRhaW5zKGxvY2tlciwga2V5KTsKICAg
ICB9CiAgICAgCisgICAgLy8gVGhlIHByaW5jaXBsZSBiZWhpbmQgU2NvcGVkQXJndW1lbnRzVGFi
bGUgbW9kaWZpY2F0aW9ucyBpcyB0aGF0IHdlIHdpbGwgY3JlYXRlIG9uZSBhbmQKKyAgICAvLyBs
ZWF2ZSBpdCB1bmxvY2tlZCAtIHRoZXJlYnkgYWxsb3dpbmcgaW4tcGxhY2UgY2hhbmdlcyAtIHVu
dGlsIHNvbWVvbmUgYXNrcyBmb3IgYSBwb2ludGVyIHRvCisgICAgLy8gdGhlIHRhYmxlLiBUaGVu
LCB3ZSB3aWxsIGxvY2sgaXQuIFRoZW4gYm90aCBvdXIgZnV0dXJlIGNoYW5nZXMgYW5kIHRoZWly
IGZ1dHVyZSBjaGFuZ2VzCisgICAgLy8gd2lsbCBmaXJzdCBoYXZlIHRvIG1ha2UgYSBjb3B5LiBU
aGlzIGRpc2NpcGxpbmUgbWVhbnMgdGhhdCB1c3VhbGx5IHdoZW4gd2UgY3JlYXRlIGEKKyAgICAv
LyBTY29wZWRBcmd1bWVudHMgb2JqZWN0LCB3ZSBkb24ndCBoYXZlIHRvIG1ha2UgYSBjb3B5IG9m
IHRoZSBTY29wZWRBcmd1bWVudHNUYWJsZSAtIGluc3RlYWQKKyAgICAvLyB3ZSBqdXN0IHRha2Ug
YSByZWZlcmVuY2UgdG8gb25lIHRoYXQgd2UgYWxyZWFkeSBoYXZlLgorICAgIAorICAgIHVpbnQz
Ml90IGFyZ3VtZW50c0xlbmd0aCgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoIW1fYXJndW1l
bnRzKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBtX2FyZ3VtZW50cy0+
bGVuZ3RoKCk7CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0QXJndW1lbnRzTGVuZ3RoKFZNJiB2
bSwgdWludDMyX3QgbGVuZ3RoKQorICAgIHsKKyAgICAgICAgaWYgKFVOTElLRUxZKCFtX2FyZ3Vt
ZW50cykpCisgICAgICAgICAgICBtX2FyZ3VtZW50cy5zZXQodm0sIHRoaXMsIFNjb3BlZEFyZ3Vt
ZW50c1RhYmxlOjpjcmVhdGUodm0pKTsKKyAgICAgICAgbV9hcmd1bWVudHMuc2V0KHZtLCB0aGlz
LCBtX2FyZ3VtZW50cy0+c2V0TGVuZ3RoKHZtLCBsZW5ndGgpKTsKKyAgICB9CisgICAgCisgICAg
U2NvcGVPZmZzZXQgYXJndW1lbnRPZmZzZXQodWludDMyX3QgaSkgY29uc3QKKyAgICB7CisgICAg
ICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKG1fYXJndW1lbnRzKTsKKyAgICAg
ICAgcmV0dXJuIG1fYXJndW1lbnRzLT5nZXQoaSk7CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0
QXJndW1lbnRPZmZzZXQoVk0mIHZtLCB1aW50MzJfdCBpLCBTY29wZU9mZnNldCBvZmZzZXQpCisg
ICAgeworICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihtX2FyZ3VtZW50
cyk7CisgICAgICAgIG1fYXJndW1lbnRzLnNldCh2bSwgdGhpcywgbV9hcmd1bWVudHMtPnNldCh2
bSwgaSwgb2Zmc2V0KSk7CisgICAgfQorICAgIAorICAgIFNjb3BlZEFyZ3VtZW50c1RhYmxlKiBh
cmd1bWVudHMoKSBjb25zdAorICAgIHsKKyAgICAgICAgbV9hcmd1bWVudHMtPmxvY2soKTsKKyAg
ICAgICAgcmV0dXJuIG1fYXJndW1lbnRzLmdldCgpOworICAgIH0KKyAgICAKICAgICBHbG9iYWxW
YXJpYWJsZUlEIHVuaXF1ZUlERm9yVmFyaWFibGUoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYs
IFN0cmluZ0ltcGwqIGtleSwgVk0mIHZtKTsKICAgICBHbG9iYWxWYXJpYWJsZUlEIHVuaXF1ZUlE
Rm9yUmVnaXN0ZXIoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYgbG9ja2VyLCBpbnQgcmVnaXN0
ZXJJbmRleCwgVk0mIHZtKTsKICAgICBSZWZQdHI8VHlwZVNldD4gZ2xvYmFsVHlwZVNldEZvclJl
Z2lzdGVyKGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImIGxvY2tlciwgaW50IHJlZ2lzdGVySW5k
ZXgsIFZNJiB2bSk7CkBAIC00NjQsMjggKzYwNiw3IEBAIHB1YmxpYzoKICAgICBib29sIHVzZXNO
b25TdHJpY3RFdmFsKCkgeyByZXR1cm4gbV91c2VzTm9uU3RyaWN0RXZhbDsgfQogICAgIHZvaWQg
c2V0VXNlc05vblN0cmljdEV2YWwoYm9vbCB1c2VzTm9uU3RyaWN0RXZhbCkgeyBtX3VzZXNOb25T
dHJpY3RFdmFsID0gdXNlc05vblN0cmljdEV2YWw7IH0KIAotICAgIGludCBjYXB0dXJlU3RhcnQo
KSBjb25zdCB7IHJldHVybiBtX2NhcHR1cmVTdGFydDsgfQotICAgIHZvaWQgc2V0Q2FwdHVyZVN0
YXJ0KGludCBjYXB0dXJlU3RhcnQpIHsgbV9jYXB0dXJlU3RhcnQgPSBjYXB0dXJlU3RhcnQ7IH0K
LQotICAgIGludCBjYXB0dXJlRW5kKCkgY29uc3QgeyByZXR1cm4gbV9jYXB0dXJlRW5kOyB9Ci0g
ICAgdm9pZCBzZXRDYXB0dXJlRW5kKGludCBjYXB0dXJlRW5kKSB7IG1fY2FwdHVyZUVuZCA9IGNh
cHR1cmVFbmQ7IH0KLQotICAgIGludCBjYXB0dXJlQ291bnQoKSBjb25zdCB7IHJldHVybiAtKG1f
Y2FwdHVyZUVuZCAtIG1fY2FwdHVyZVN0YXJ0KTsgfQotICAgIAotICAgIGJvb2wgaXNDYXB0dXJl
ZChpbnQgb3BlcmFuZCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBvcGVyYW5kIDw9IGNhcHR1cmVT
dGFydCgpICYmIG9wZXJhbmQgPiBjYXB0dXJlRW5kKCk7Ci0gICAgfQotCi0gICAgaW50IHBhcmFt
ZXRlckNvdW50KCkgeyByZXR1cm4gbV9wYXJhbWV0ZXJDb3VudEluY2x1ZGluZ1RoaXMgLSAxOyB9
Ci0gICAgaW50IHBhcmFtZXRlckNvdW50SW5jbHVkaW5nVGhpcygpIHsgcmV0dXJuIG1fcGFyYW1l
dGVyQ291bnRJbmNsdWRpbmdUaGlzOyB9Ci0gICAgdm9pZCBzZXRQYXJhbWV0ZXJDb3VudEluY2x1
ZGluZ1RoaXMoaW50IHBhcmFtZXRlckNvdW50SW5jbHVkaW5nVGhpcykgeyBtX3BhcmFtZXRlckNv
dW50SW5jbHVkaW5nVGhpcyA9IHBhcmFtZXRlckNvdW50SW5jbHVkaW5nVGhpczsgfQotCi0gICAg
Ly8gMCBpZiB3ZSBkb24ndCBjYXB0dXJlIGFueSBhcmd1bWVudHM7IHBhcmFtZXRlckNvdW50KCkg
aW4gbGVuZ3RoIGlmIHdlIGRvLgotICAgIGNvbnN0IFNsb3dBcmd1bWVudCogc2xvd0FyZ3VtZW50
cygpIHsgcmV0dXJuIG1fc2xvd0FyZ3VtZW50cy5nZXQoKTsgfQotICAgIHZvaWQgc2V0U2xvd0Fy
Z3VtZW50cyhzdGQ6OnVuaXF1ZV9wdHI8U2xvd0FyZ3VtZW50W10+IHNsb3dBcmd1bWVudHMpIHsg
bV9zbG93QXJndW1lbnRzID0gV1RGOjptb3ZlKHNsb3dBcmd1bWVudHMpOyB9Ci0gICAgCi0gICAg
U3ltYm9sVGFibGUqIGNsb25lQ2FwdHVyZWROYW1lcyhWTSYpOworICAgIFN5bWJvbFRhYmxlKiBj
bG9uZVNjb3BlUGFydChWTSYpOwogCiAgICAgdm9pZCBwcmVwYXJlRm9yVHlwZVByb2ZpbGluZyhj
b25zdCBDb25jdXJyZW50SklUTG9ja2VyJik7CiAKQEAgLTUxMyw2ICs2MzQsOCBAQCBwcml2YXRl
OgogICAgIH5TeW1ib2xUYWJsZSgpOwogCiAgICAgTWFwIG1fbWFwOworICAgIFNjb3BlT2Zmc2V0
IG1fbWF4U2NvcGVPZmZzZXQ7CisgICAgCiAgICAgc3RydWN0IFR5cGVQcm9maWxpbmdSYXJlRGF0
YSB7CiAgICAgICAgIFVuaXF1ZUlETWFwIG1fdW5pcXVlSURNYXA7CiAgICAgICAgIFJlZ2lzdGVy
VG9WYXJpYWJsZU1hcCBtX3JlZ2lzdGVyVG9WYXJpYWJsZU1hcDsKQEAgLTUyMCwxMyArNjQzLDkg
QEAgcHJpdmF0ZToKICAgICB9OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxUeXBlUHJvZmlsaW5nUmFy
ZURhdGE+IG1fdHlwZVByb2ZpbGluZ1JhcmVEYXRhOwogCi0gICAgaW50IG1fcGFyYW1ldGVyQ291
bnRJbmNsdWRpbmdUaGlzOwogICAgIGJvb2wgbV91c2VzTm9uU3RyaWN0RXZhbDsKLQotICAgIGlu
dCBtX2NhcHR1cmVTdGFydDsKLSAgICBpbnQgbV9jYXB0dXJlRW5kOwotCi0gICAgc3RkOjp1bmlx
dWVfcHRyPFNsb3dBcmd1bWVudFtdPiBtX3Nsb3dBcmd1bWVudHM7CisgICAgCisgICAgV3JpdGVC
YXJyaWVyPFNjb3BlZEFyZ3VtZW50c1RhYmxlPiBtX2FyZ3VtZW50czsKICAgICAKICAgICBzdGQ6
OnVuaXF1ZV9wdHI8V2F0Y2hwb2ludENsZWFudXA+IG1fd2F0Y2hwb2ludENsZWFudXA7CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Zhck9mZnNldC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVmFyT2Zmc2V0LmNwcAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Zhck9mZnNldC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw3NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVmFyT2Zm
c2V0LmgiCisKK25hbWVzcGFjZSBKU0MgeworCit2b2lkIFZhck9mZnNldDo6ZHVtcChQcmludFN0
cmVhbSYgb3V0KSBjb25zdAoreworICAgIHN3aXRjaCAobV9raW5kKSB7CisgICAgY2FzZSBJbnZh
bGlkVmFyS2luZDoKKyAgICAgICAgb3V0LnByaW50KCJpbnZhbGlkIik7CisgICAgICAgIHJldHVy
bjsKKyAgICBjYXNlIFNjb3BlVmFyS2luZDoKKyAgICAgICAgb3V0LnByaW50KHNjb3BlT2Zmc2V0
KCkpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBTdGFja1ZhcktpbmQ6CisgICAgICAgIG91
dC5wcmludChzdGFja09mZnNldCgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ2FwdHVy
ZWRBcmd1bWVudEtpbmQ6CisgICAgICAgIG91dC5wcmludChjYXB0dXJlZEFyZ3VtZW50T2Zmc2V0
KCkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCituYW1lc3BhY2UgV1RGIHsKKwordXNp
bmcgbmFtZXNwYWNlIEpTQzsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQs
IFZhcktpbmQgdmFyS2luZCkKK3sKKyAgICBzd2l0Y2ggKHZhcktpbmQpIHsKKyAgICBjYXNlIElu
dmFsaWRWYXJLaW5kOgorICAgICAgICBvdXQucHJpbnQoIkludmFsaWQiKTsKKyAgICAgICAgcmV0
dXJuOworICAgIGNhc2UgU2NvcGVWYXJLaW5kOgorICAgICAgICBvdXQucHJpbnQoIlNjb3BlIik7
CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFN0YWNrVmFyS2luZDoKKyAgICAgICAgb3V0LnBy
aW50KCJTdGFjayIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBDYXB0dXJlZEFyZ3VtZW50
S2luZDoKKyAgICAgICAgb3V0LnByaW50KCJDYXB0dXJlZEFyZ3VtZW50Iik7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV1RGCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Zh
ck9mZnNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Zh
ck9mZnNldC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
VmFyT2Zmc2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMTQgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBWYXJPZmZzZXRfaAor
I2RlZmluZSBWYXJPZmZzZXRfaAorCisjaW5jbHVkZSAiQ2FwdHVyZWRBcmd1bWVudHNPZmZzZXQu
aCIKKyNpbmNsdWRlICJTY29wZU9mZnNldC5oIgorI2luY2x1ZGUgIlZpcnR1YWxSZWdpc3Rlci5o
IgorCituYW1lc3BhY2UgSlNDIHsKKworZW51bSBWYXJLaW5kIDogdWludDhfdCB7CisgICAgSW52
YWxpZFZhcktpbmQsCisgICAgU2NvcGVWYXJLaW5kLAorICAgIFN0YWNrVmFyS2luZCwKKyAgICBD
YXB0dXJlZEFyZ3VtZW50S2luZAorfTsKKworY2xhc3MgVmFyT2Zmc2V0IHsKK3B1YmxpYzoKKyAg
ICBWYXJPZmZzZXQoKQorICAgICAgICA6IG1fa2luZChJbnZhbGlkVmFyS2luZCkKKyAgICAgICAg
LCBtX29mZnNldChVSU5UX01BWCkKKyAgICB7CisgICAgfQorICAgIAorICAgIGV4cGxpY2l0IFZh
ck9mZnNldChWaXJ0dWFsUmVnaXN0ZXIgc3RhY2tPZmZzZXQpCisgICAgeworICAgICAgICBpZiAo
IXN0YWNrT2Zmc2V0LmlzVmFsaWQoKSkgeworICAgICAgICAgICAgbV9raW5kID0gSW52YWxpZFZh
cktpbmQ7CisgICAgICAgICAgICBtX29mZnNldCA9IFVJTlRfTUFYOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgbV9raW5kID0gU3RhY2tWYXJLaW5kOworICAgICAgICAgICAgbV9vZmZz
ZXQgPSBzdGFja09mZnNldC5vZmZzZXQoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBl
eHBsaWNpdCBWYXJPZmZzZXQoU2NvcGVPZmZzZXQgc2NvcGVPZmZzZXQpCisgICAgeworICAgICAg
ICBpZiAoIXNjb3BlT2Zmc2V0KSB7CisgICAgICAgICAgICBtX2tpbmQgPSBJbnZhbGlkVmFyS2lu
ZDsKKyAgICAgICAgICAgIG1fb2Zmc2V0ID0gVUlOVF9NQVg7CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICBtX2tpbmQgPSBTY29wZVZhcktpbmQ7CisgICAgICAgICAgICBtX29mZnNldCA9
IHNjb3BlT2Zmc2V0Lm9mZnNldCgpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIGV4cGxp
Y2l0IFZhck9mZnNldChDYXB0dXJlZEFyZ3VtZW50c09mZnNldCBjYXB0dXJlZEFyZ3VtZW50c09m
ZnNldCkKKyAgICB7CisgICAgICAgIGlmICghY2FwdHVyZWRBcmd1bWVudHNPZmZzZXQpIHsKKyAg
ICAgICAgICAgIG1fa2luZCA9IEludmFsaWRWYXJLaW5kOworICAgICAgICAgICAgbV9vZmZzZXQg
PSBVSU5UX01BWDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1fa2luZCA9IENhcHR1
cmVkQXJndW1lbnRLaW5kOworICAgICAgICAgICAgbV9vZmZzZXQgPSBjYXB0dXJlZEFyZ3VtZW50
c09mZnNldC5vZmZzZXQoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBzdGF0aWMgVmFy
T2Zmc2V0IGFzc2VtYmxlKFZhcktpbmQga2luZCwgdW5zaWduZWQgb2Zmc2V0KQorICAgIHsKKyAg
ICAgICAgVmFyT2Zmc2V0IHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IGtpbmQ7Cisg
ICAgICAgIHJlc3VsdC5tX29mZnNldCA9IG9mZnNldDsKKyAgICAgICAgcmVzdWx0LmNoZWNrU2Fu
aXR5KCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNW
YWxpZCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9raW5kICE9IEludmFsaWRWYXJL
aW5kOworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gIWlzVmFsaWQoKTsKKyAgICB9CisgICAgCisgICAgVmFyS2luZCBraW5kKCkg
Y29uc3QgeyByZXR1cm4gbV9raW5kOyB9CisgICAgCisgICAgYm9vbCBpc1N0YWNrKCkgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBtX2tpbmQgPT0gU3RhY2tWYXJLaW5kOworICAgIH0KKyAg
ICAKKyAgICBib29sIGlzU2NvcGUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fa2lu
ZCA9PSBTY29wZVZhcktpbmQ7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNDYXB0dXJlZEFyZ3Vt
ZW50KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2tpbmQgPT0gQ2FwdHVyZWRBcmd1
bWVudEtpbmQ7CisgICAgfQorICAgIAorICAgIFZpcnR1YWxSZWdpc3RlciBzdGFja09mZnNldFVu
Y2hlY2tlZCgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoIWlzU3RhY2soKSkKKyAgICAgICAg
ICAgIHJldHVybiBWaXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICAgICAgcmV0dXJuIFZpcnR1YWxSZWdp
c3RlcihtX29mZnNldCk7CisgICAgfQorICAgIAorICAgIFNjb3BlT2Zmc2V0IHNjb3BlT2Zmc2V0
VW5jaGVja2VkKCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmICghaXNTY29wZSgpKQorICAgICAg
ICAgICAgcmV0dXJuIFNjb3BlT2Zmc2V0KCk7CisgICAgICAgIHJldHVybiBTY29wZU9mZnNldCht
X29mZnNldCk7CisgICAgfQorICAgIAorICAgIENhcHR1cmVkQXJndW1lbnRzT2Zmc2V0IGNhcHR1
cmVkQXJndW1lbnRzT2Zmc2V0VW5jaGVja2VkKCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmICgh
aXNDYXB0dXJlZEFyZ3VtZW50KCkpCisgICAgICAgICAgICByZXR1cm4gQ2FwdHVyZWRBcmd1bWVu
dHNPZmZzZXQoKTsKKyAgICAgICAgcmV0dXJuIENhcHR1cmVkQXJndW1lbnRzT2Zmc2V0KG1fb2Zm
c2V0KTsKKyAgICB9CisgICAgCisgICAgVmlydHVhbFJlZ2lzdGVyIHN0YWNrT2Zmc2V0KCkgY29u
c3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc1N0YWNrKCkpOworICAgICAgICByZXR1cm4gVmly
dHVhbFJlZ2lzdGVyKG1fb2Zmc2V0KTsKKyAgICB9CisgICAgCisgICAgU2NvcGVPZmZzZXQgc2Nv
cGVPZmZzZXQoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzU2NvcGUoKSk7CisgICAg
ICAgIHJldHVybiBTY29wZU9mZnNldChtX29mZnNldCk7CisgICAgfQorICAgIAorICAgIENhcHR1
cmVkQXJndW1lbnRzT2Zmc2V0IGNhcHR1cmVkQXJndW1lbnRzT2Zmc2V0KCkgY29uc3QKKyAgICB7
CisgICAgICAgIEFTU0VSVChpc0NhcHR1cmVkQXJndW1lbnQoKSk7CisgICAgICAgIHJldHVybiBD
YXB0dXJlZEFyZ3VtZW50c09mZnNldChtX29mZnNldCk7CisgICAgfQorICAgIAorICAgIHVuc2ln
bmVkIHJhd09mZnNldCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaXNWYWxpZCgpKTsK
KyAgICAgICAgcmV0dXJuIG1fb2Zmc2V0OworICAgIH0KKyAgICAKKyAgICB2b2lkIGNoZWNrU2Fu
aXR5KCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChBU1NFUlRfRElTQUJMRUQpCisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBzd2l0Y2ggKG1fa2luZCkgeworICAgICAg
ICBjYXNlIEludmFsaWRWYXJLaW5kOgorICAgICAgICAgICAgQVNTRVJUKG1fb2Zmc2V0ID09IFVJ
TlRfTUFYKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBTY29wZVZhcktpbmQ6
CisgICAgICAgICAgICBBU1NFUlQoc2NvcGVPZmZzZXQoKSk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIGNhc2UgU3RhY2tWYXJLaW5kOgorICAgICAgICAgICAgQVNTRVJUKHN0YWNrT2Zm
c2V0KCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIENhcHR1cmVkQXJndW1l
bnRLaW5kOgorICAgICAgICAgICAgQVNTRVJUKGNhcHR1cmVkQXJndW1lbnRzT2Zmc2V0KCkpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFZh
ck9mZnNldCYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9raW5kID09IG90
aGVyLm1fa2luZAorICAgICAgICAgICAgJiYgbV9vZmZzZXQgPT0gb3RoZXIubV9vZmZzZXQ7Cisg
ICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBWYXJPZmZzZXQmIG90aGVyKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgIH0KKyAg
ICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAKK3ByaXZhdGU6Cisg
ICAgVmFyS2luZCBtX2tpbmQ7CisgICAgdW5zaWduZWQgbV9vZmZzZXQ7Cit9OworCit9IC8vIG5h
bWVzcGFjZSBKU0MKKworbmFtZXNwYWNlIFdURiB7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmlu
dFN0cmVhbSYsIEpTQzo6VmFyS2luZCk7CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYg
Ly8gVmFyT2Zmc2V0X2gKKwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>247693</attachid>
            <date>2015-03-02 12:41:26 -0800</date>
            <delta_ts>2015-03-02 17:05:45 -0800</delta_ts>
            <desc>moar!</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>363302</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2Vt
Ymxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJz
dHJhY3RNYWNyb0Fzc2VtYmxlci5oCShyZXZpc2lvbiAxODA4NzUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMjA1LDYgKzIwNSwxMSBAQCBwdWJsaWM6CiAgICAgICAgIFJlZ2lzdGVySUQgaW5kZXg7
CiAgICAgICAgIFNjYWxlIHNjYWxlOwogICAgICAgICBpbnQzMl90IG9mZnNldDsKKyAgICAgICAg
CisgICAgICAgIEJhc2VJbmRleCB3aXRoT2Zmc2V0KGludDMyX3QgYWRkaXRpb25hbE9mZnNldCkK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEJhc2VJbmRleChiYXNlLCBpbmRleCwgc2Nh
bGUsIG9mZnNldCArIGFkZGl0aW9uYWxPZmZzZXQpOworICAgICAgICB9CiAgICAgfTsKIAogICAg
IC8vIEFic29sdXRlQWRkcmVzczoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9CeVZhbEluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQnlWYWxJbmZvLmgJKHJldmlzaW9uIDE4MDg3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9CeVZhbEluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDEsNiArNDEsOCBAQCBlbnVt
IEpJVEFycmF5TW9kZSB7CiAgICAgSklURG91YmxlLAogICAgIEpJVENvbnRpZ3VvdXMsCiAgICAg
SklUQXJyYXlTdG9yYWdlLAorICAgIEpJVERpcmVjdEFyZ3VtZW50cywKKyAgICBKSVRTY29wZWRB
cmd1bWVudHMsCiAgICAgSklUSW50OEFycmF5LAogICAgIEpJVEludDE2QXJyYXksCiAgICAgSklU
SW50MzJBcnJheSwKQEAgLTY1LDYgKzY3LDE3IEBAIGlubGluZSBib29sIGlzT3B0aW1pemFibGVJ
bmRleGluZ1R5cGUoSW4KICAgICB9CiB9CiAKK2lubGluZSBib29sIGhhc09wdGltaXphYmxlSW5k
ZXhpbmdGb3JKU1R5cGUoSlNUeXBlIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAg
Y2FzZSBEaXJlY3RBcmd1bWVudHNUeXBlOgorICAgIGNhc2UgU2NvcGVkQXJndW1lbnRzVHlwZToK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KK30KKwogaW5saW5lIGJvb2wgaGFzT3B0aW1pemFibGVJbmRleGluZ0ZvckNsYXNz
SW5mbyhjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbykKIHsKICAgICByZXR1cm4gaXNUeXBlZFZp
ZXcoY2xhc3NJbmZvLT50eXBlZEFycmF5U3RvcmFnZVR5cGUpOwpAQCAtNzMsNiArODYsNyBAQCBp
bmxpbmUgYm9vbCBoYXNPcHRpbWl6YWJsZUluZGV4aW5nRm9yQ2xhCiBpbmxpbmUgYm9vbCBoYXNP
cHRpbWl6YWJsZUluZGV4aW5nKFN0cnVjdHVyZSogc3RydWN0dXJlKQogewogICAgIHJldHVybiBp
c09wdGltaXphYmxlSW5kZXhpbmdUeXBlKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpCisgICAg
ICAgIHx8IGhhc09wdGltaXphYmxlSW5kZXhpbmdGb3JKU1R5cGUoc3RydWN0dXJlLT50eXBlSW5m
bygpLnR5cGUoKSkKICAgICAgICAgfHwgaGFzT3B0aW1pemFibGVJbmRleGluZ0ZvckNsYXNzSW5m
byhzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpKTsKIH0KIApAQCAtOTMsNiArMTA3LDE5IEBAIGlubGlu
ZSBKSVRBcnJheU1vZGUgaml0QXJyYXlNb2RlRm9ySW5kZXgKICAgICB9CiB9CiAKK2lubGluZSBK
SVRBcnJheU1vZGUgaml0QXJyYXlNb2RlRm9ySlNUeXBlKEpTVHlwZSB0eXBlKQoreworICAgIHN3
aXRjaCAodHlwZSkgeworICAgIGNhc2UgRGlyZWN0QXJndW1lbnRzVHlwZToKKyAgICAgICAgcmV0
dXJuIEpJVERpcmVjdEFyZ3VtZW50czsKKyAgICBjYXNlIFNjb3BlZEFyZ3VtZW50c1R5cGU6Cisg
ICAgICAgIHJldHVybiBKSVRTY29wZWRBcmd1bWVudHM7CisgICAgZGVmYXVsdDoKKyAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIEpJVENvbnRpZ3Vv
dXM7CisgICAgfQorfQorCiBpbmxpbmUgSklUQXJyYXlNb2RlIGppdEFycmF5TW9kZUZvckNsYXNz
SW5mbyhjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbykKIHsKICAgICBzd2l0Y2ggKGNsYXNzSW5m
by0+dHlwZWRBcnJheVN0b3JhZ2VUeXBlKSB7CkBAIC0xMjAsNiArMTQ3LDE5IEBAIGlubGluZSBK
SVRBcnJheU1vZGUgaml0QXJyYXlNb2RlRm9yQ2xhc3MKICAgICB9CiB9CiAKK2lubGluZSBib29s
IGppdEFycmF5TW9kZVBlcm1pdHNQdXQoSklUQXJyYXlNb2RlIG1vZGUpCit7CisgICAgc3dpdGNo
IChtb2RlKSB7CisgICAgY2FzZSBKSVREaXJlY3RBcmd1bWVudHM6CisgICAgY2FzZSBKSVRTY29w
ZWRBcmd1bWVudHM6CisgICAgICAgIC8vIFdlIGNvdWxkIHN1cHBvcnQgcHV0X2J5X3ZhbCBvbiB0
aGVzZSBhdCBzb21lIHBvaW50LCBidXQgaXQncyBqdXN0IG5vdCB0aGF0IHByb2ZpdGFibGUKKyAg
ICAgICAgLy8gYXQgdGhlIG1vbWVudC4KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGRlZmF1
bHQ6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KK30KKwogaW5saW5lIFR5cGVkQXJyYXlU
eXBlIHR5cGVkQXJyYXlUeXBlRm9ySklUQXJyYXlNb2RlKEpJVEFycmF5TW9kZSBtb2RlKQogewog
ICAgIHN3aXRjaCAobW9kZSkgewpAQCAtMTUyLDYgKzE5Miw5IEBAIGlubGluZSBKSVRBcnJheU1v
ZGUgaml0QXJyYXlNb2RlRm9yU3RydWMKICAgICBpZiAoaXNPcHRpbWl6YWJsZUluZGV4aW5nVHlw
ZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSkKICAgICAgICAgcmV0dXJuIGppdEFycmF5TW9k
ZUZvckluZGV4aW5nVHlwZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKTsKICAgICAKKyAgICBp
ZiAoaGFzT3B0aW1pemFibGVJbmRleGluZ0ZvckpTVHlwZShzdHJ1Y3R1cmUtPnR5cGVJbmZvKCku
dHlwZSgpKSkKKyAgICAgICAgcmV0dXJuIGppdEFycmF5TW9kZUZvckpTVHlwZShzdHJ1Y3R1cmUt
PnR5cGVJbmZvKCkudHlwZSgpKTsKKyAgICAKICAgICBBU1NFUlQoaGFzT3B0aW1pemFibGVJbmRl
eGluZ0ZvckNsYXNzSW5mbyhzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpKSk7CiAgICAgcmV0dXJuIGpp
dEFycmF5TW9kZUZvckNsYXNzSW5mbyhzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpKTsKIH0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QuanNvbgo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0Lmpzb24J
KHJldmlzaW9uIDE4MDg3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRl
Y29kZUxpc3QuanNvbgkod29ya2luZyBjb3B5KQpAQCAtNyw4ICs3LDkgQEAKICAgICAgICAgICAg
IHsgIm5hbWUiIDogIm9wX2NyZWF0ZV9sZXhpY2FsX2Vudmlyb25tZW50IiwgImxlbmd0aCIgOiAz
IH0sCiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9nZXRfc2NvcGUiLCAibGVuZ3RoIiA6IDIg
fSwKICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX3RvdWNoX2VudHJ5IiwgImxlbmd0aCIgOiAx
IH0sCi0gICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9pbml0X2xhenlfcmVnIiwgImxlbmd0aCIg
OiAyIH0sCi0gICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9jcmVhdGVfYXJndW1lbnRzIiwgImxl
bmd0aCIgOiAzIH0sCisgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9jcmVhdGVfZGlyZWN0X2Fy
Z3VtZW50cyIsICJsZW5ndGgiIDogMiB9LCAvLyBqdXN0IHRha2VzIHRoZSBkc3QgcmVnaXN0ZXIK
KyAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX2NyZWF0ZV9zY29wZWRfYXJndW1lbnRzIiwgImxl
bmd0aCIgOiAzIH0sIC8vIGRzdCwgc2NvcGVSZWdpc3RlciwgaW1wbGljaXRseSB1c2VzIHRoZSBT
Y29wZWRBcmd1bWVudHNUYWJsZSBpbiB0aGUgU3ltYm9sVGFibGUgb2YgdGhlIENvZGVCbG9jawor
ICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfY3JlYXRlX291dF9vZl9iYW5kX2FyZ3VtZW50cyIs
ICJsZW5ndGgiIDogMiB9LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfY3JlYXRlX3RoaXMi
LCAibGVuZ3RoIiA6IDQgfSwKICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX2dldF9jYWxsZWUi
LCAibGVuZ3RoIiA6IDMgfSwKICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX3RvX3RoaXMiLCAi
bGVuZ3RoIiA6IDQgfSwKQEAgLTYxLDcgKzYyLDYgQEAKICAgICAgICAgICAgIHsgIm5hbWUiIDog
Im9wX2dldF9ieV9pZCIsICJsZW5ndGgiIDogOSAgfSwKICAgICAgICAgICAgIHsgIm5hbWUiIDog
Im9wX2dldF9ieV9pZF9vdXRfb2ZfbGluZSIsICJsZW5ndGgiIDogOSAgfSwKICAgICAgICAgICAg
IHsgIm5hbWUiIDogIm9wX2dldF9hcnJheV9sZW5ndGgiLCAibGVuZ3RoIiA6IDkgfSwKLSAgICAg
ICAgICAgIHsgIm5hbWUiIDogIm9wX2dldF9hcmd1bWVudHNfbGVuZ3RoIiwgImxlbmd0aCIgOiA0
IH0sCiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9wdXRfYnlfaWQiLCAibGVuZ3RoIiA6IDkg
fSwKICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX3B1dF9ieV9pZF9vdXRfb2ZfbGluZSIsICJs
ZW5ndGgiIDogOSB9LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfcHV0X2J5X2lkX3RyYW5z
aXRpb25fZGlyZWN0IiwgImxlbmd0aCIgOiA5IH0sCkBAIC03MCw3ICs3MCw2IEBACiAgICAgICAg
ICAgICB7ICJuYW1lIiA6ICJvcF9wdXRfYnlfaWRfdHJhbnNpdGlvbl9ub3JtYWxfb3V0X29mX2xp
bmUiLCAibGVuZ3RoIiA6IDkgfSwKICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX2RlbF9ieV9p
ZCIsICJsZW5ndGgiIDogNCB9LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfZ2V0X2J5X3Zh
bCIsICJsZW5ndGgiIDogNiB9LAotICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfZ2V0X2FyZ3Vt
ZW50X2J5X3ZhbCIsICJsZW5ndGgiIDogNyB9LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3Bf
cHV0X2J5X3ZhbCIsICJsZW5ndGgiIDogNSB9LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3Bf
cHV0X2J5X3ZhbF9kaXJlY3QiLCAibGVuZ3RoIiA6IDUgfSwKICAgICAgICAgICAgIHsgIm5hbWUi
IDogIm9wX2RlbF9ieV92YWwiLCAibGVuZ3RoIiA6IDQgfSwKQEAgLTk0LDEyICs5MywxMSBAQAog
ICAgICAgICAgICAgeyAibmFtZSIgOiAib3Bfc3dpdGNoX2ltbSIsICJsZW5ndGgiIDogNCB9LAog
ICAgICAgICAgICAgeyAibmFtZSIgOiAib3Bfc3dpdGNoX2NoYXIiLCAibGVuZ3RoIiA6IDQgfSwK
ICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX3N3aXRjaF9zdHJpbmciLCAibGVuZ3RoIiA6IDQg
fSwKLSAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX25ld19mdW5jIiwgImxlbmd0aCIgOiA1IH0s
CisgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9uZXdfZnVuYyIsICJsZW5ndGgiIDogNCB9LAog
ICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfbmV3X2Z1bmNfZXhwIiwgImxlbmd0aCIgOiA0IH0s
CiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9jYWxsIiwgImxlbmd0aCIgOiA5IH0sCiAgICAg
ICAgICAgICB7ICJuYW1lIiA6ICJvcF9jYWxsX2V2YWwiLCAibGVuZ3RoIiA6IDkgfSwKICAgICAg
ICAgICAgIHsgIm5hbWUiIDogIm9wX2NhbGxfdmFyYXJncyIsICJsZW5ndGgiIDogOSB9LAotICAg
ICAgICAgICAgeyAibmFtZSIgOiAib3BfdGVhcl9vZmZfYXJndW1lbnRzIiwgImxlbmd0aCIgOiAz
IH0sCiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9yZXQiLCAibGVuZ3RoIiA6IDIgfSwKICAg
ICAgICAgICAgIHsgIm5hbWUiIDogIm9wX2NvbnN0cnVjdCIsICJsZW5ndGgiIDogOSB9LAogICAg
ICAgICAgICAgeyAibmFtZSIgOiAib3BfY29uc3RydWN0X3ZhcmFyZ3MiLCAibGVuZ3RoIiA6IDkg
fSwKQEAgLTEwOCw2ICsxMDYsOCBAQAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfcmVzb2x2
ZV9zY29wZSIsICJsZW5ndGgiIDogNyB9LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfZ2V0
X2Zyb21fc2NvcGUiLCAibGVuZ3RoIiA6IDggfSwKICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9w
X3B1dF90b19zY29wZSIsICJsZW5ndGgiIDogNyB9LAorICAgICAgICAgICAgeyAibmFtZSIgOiAi
b3BfZ2V0X2Zyb21fYXJndW1lbnRzIiwgImxlbmd0aCIgOiA1IH0sIC8vIGRzdCwgYXJndW1lbnRz
LCBpbmRleCwgcHJvZmlsZQorICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfcHV0X3RvX2FyZ3Vt
ZW50cyIsICJsZW5ndGgiIDogNCB9LCAvLyBhcmd1bWVudHMsIGluZGV4LCBzcmMKICAgICAgICAg
ICAgIHsgIm5hbWUiIDogIm9wX3B1c2hfd2l0aF9zY29wZSIsICJsZW5ndGgiIDogMyB9LAogICAg
ICAgICAgICAgeyAibmFtZSIgOiAib3BfcG9wX3Njb3BlIiwgImxlbmd0aCIgOiAyIH0sCiAgICAg
ICAgICAgICB7ICJuYW1lIiA6ICJvcF9wdXNoX25hbWVfc2NvcGUiLCAibGVuZ3RoIiA6IDUgfSwK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShy
ZXZpc2lvbiAxODA4NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTY5LDE3ICs1NjksNiBAQCB2b2lkIENvZGVCbG9j
azo6ZHVtcEJ5dGVjb2RlKFByaW50U3RyZWFtCiAgICAgICAgIHN0YXRpY19jYXN0PHVuc2lnbmVk
IGxvbmc+KGluc3RydWN0aW9ucygpLnNpemUoKSksCiAgICAgICAgIHN0YXRpY19jYXN0PHVuc2ln
bmVkIGxvbmc+KGluc3RydWN0aW9ucygpLnNpemUoKSAqIHNpemVvZihJbnN0cnVjdGlvbikpLAog
ICAgICAgICBtX251bVBhcmFtZXRlcnMsIG1fbnVtQ2FsbGVlUmVnaXN0ZXJzLCBtX251bVZhcnMp
OwotICAgIGlmIChzeW1ib2xUYWJsZSgpICYmIHN5bWJvbFRhYmxlKCktPmNhcHR1cmVDb3VudCgp
KSB7Ci0gICAgICAgIG91dC5wcmludGYoCi0gICAgICAgICAgICAiOyAlZCBjYXB0dXJlZCB2YXIo
cykgKGZyb20gciVkIHRvIHIlZCwgaW5jbHVzaXZlKSIsCi0gICAgICAgICAgICBzeW1ib2xUYWJs
ZSgpLT5jYXB0dXJlQ291bnQoKSwgc3ltYm9sVGFibGUoKS0+Y2FwdHVyZVN0YXJ0KCksIHN5bWJv
bFRhYmxlKCktPmNhcHR1cmVFbmQoKSArIDEpOwotICAgIH0KLSAgICBpZiAodXNlc0FyZ3VtZW50
cygpKSB7Ci0gICAgICAgIG91dC5wcmludGYoCi0gICAgICAgICAgICAiOyB1c2VzIGFyZ3VtZW50
cywgaW4gciVkLCByJWQiLAotICAgICAgICAgICAgYXJndW1lbnRzUmVnaXN0ZXIoKS5vZmZzZXQo
KSwKLSAgICAgICAgICAgIHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3Rlcihhcmd1bWVudHNSZWdp
c3RlcigpKS5vZmZzZXQoKSk7Ci0gICAgfQogICAgIGlmIChuZWVkc0FjdGl2YXRpb24oKSAmJiBj
b2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSkKICAgICAgICAgb3V0LnByaW50ZigiOyBsZXhpY2Fs
IGVudmlyb25tZW50IGluIHIlZCIsIGFjdGl2YXRpb25SZWdpc3RlcigpLm9mZnNldCgpKTsKICAg
ICBvdXQucHJpbnRmKCJcbiIpOwpAQCAtMTY0MSw3ICsxNjMwLDYgQEAgQ29kZUJsb2NrOjpDb2Rl
QmxvY2soQ29weVBhcnNlZEJsb2NrVGFnLAogICAgICwgbV9pbnN0cnVjdGlvbnMob3RoZXIubV9p
bnN0cnVjdGlvbnMpCiAgICAgLCBtX3RoaXNSZWdpc3RlcihvdGhlci5tX3RoaXNSZWdpc3RlcikK
ICAgICAsIG1fc2NvcGVSZWdpc3RlcihvdGhlci5tX3Njb3BlUmVnaXN0ZXIpCi0gICAgLCBtX2Fy
Z3VtZW50c1JlZ2lzdGVyKG90aGVyLm1fYXJndW1lbnRzUmVnaXN0ZXIpCiAgICAgLCBtX2xleGlj
YWxFbnZpcm9ubWVudFJlZ2lzdGVyKG90aGVyLm1fbGV4aWNhbEVudmlyb25tZW50UmVnaXN0ZXIp
CiAgICAgLCBtX2lzU3RyaWN0TW9kZShvdGhlci5tX2lzU3RyaWN0TW9kZSkKICAgICAsIG1fbmVl
ZHNBY3RpdmF0aW9uKG90aGVyLm1fbmVlZHNBY3RpdmF0aW9uKQpAQCAtMTcwMyw3ICsxNjkxLDYg
QEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soU2NyaXB0RXhlY3V0YWJsZSogbwogICAgICwgbV92bSh1
bmxpbmtlZENvZGVCbG9jay0+dm0oKSkKICAgICAsIG1fdGhpc1JlZ2lzdGVyKHVubGlua2VkQ29k
ZUJsb2NrLT50aGlzUmVnaXN0ZXIoKSkKICAgICAsIG1fc2NvcGVSZWdpc3Rlcih1bmxpbmtlZENv
ZGVCbG9jay0+c2NvcGVSZWdpc3RlcigpKQotICAgICwgbV9hcmd1bWVudHNSZWdpc3Rlcih1bmxp
bmtlZENvZGVCbG9jay0+YXJndW1lbnRzUmVnaXN0ZXIoKSkKICAgICAsIG1fbGV4aWNhbEVudmly
b25tZW50UmVnaXN0ZXIodW5saW5rZWRDb2RlQmxvY2stPmFjdGl2YXRpb25SZWdpc3RlcigpKQog
ICAgICwgbV9pc1N0cmljdE1vZGUodW5saW5rZWRDb2RlQmxvY2stPmlzU3RyaWN0TW9kZSgpKQog
ICAgICwgbV9uZWVkc0FjdGl2YXRpb24odW5saW5rZWRDb2RlQmxvY2stPmhhc0FjdGl2YXRpb25S
ZWdpc3RlcigpICYmIHVubGlua2VkQ29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29k
ZSkKQEAgLTE3MzEsOCArMTcxOCw4IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFNjcmlwdEV4ZWN1
dGFibGUqIG8KICAgICAgICAgICAgIHN5bWJvbFRhYmxlLT5wcmVwYXJlRm9yVHlwZVByb2ZpbGlu
Zyhsb2NrZXIpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKGNvZGVUeXBlKCkgPT0gRnVuY3Rp
b25Db2RlICYmIHN5bWJvbFRhYmxlLT5jYXB0dXJlQ291bnQoKSkgewotICAgICAgICAgICAgbV9z
eW1ib2xUYWJsZS5zZXQoKm1fdm0sIG1fb3duZXJFeGVjdXRhYmxlLmdldCgpLCBzeW1ib2xUYWJs
ZS0+Y2xvbmVDYXB0dXJlZE5hbWVzKCptX3ZtKSk7CisgICAgICAgIGlmIChjb2RlVHlwZSgpID09
IEZ1bmN0aW9uQ29kZSAmJiBzeW1ib2xUYWJsZS0+c2NvcGVTaXplKSkgeworICAgICAgICAgICAg
bV9zeW1ib2xUYWJsZS5zZXQoKm1fdm0sIG1fb3duZXJFeGVjdXRhYmxlLmdldCgpLCBzeW1ib2xU
YWJsZS0+Y2xvbmVTY29wZVBhcnQoKm1fdm0pKTsKICAgICAgICAgICAgIGRpZENsb25lU3ltYm9s
VGFibGUgPSB0cnVlOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIG1fc3ltYm9sVGFibGUu
c2V0KCptX3ZtLCBtX293bmVyRXhlY3V0YWJsZS5nZXQoKSwgc3ltYm9sVGFibGUpOwpAQCAtMTk3
MywxMyArMTk2MCwxNCBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBv
CiAKICAgICAgICAgICAgIC8vIGdldF9mcm9tX3Njb3BlIGRzdCwgc2NvcGUsIGlkLCBSZXNvbHZl
TW9kZUFuZFR5cGUsIFN0cnVjdHVyZSwgT3BlcmFuZAogCi0gICAgICAgICAgICBjb25zdCBJZGVu
dGlmaWVyJiBpZGVudCA9IGlkZW50aWZpZXIocGNbM10udS5vcGVyYW5kKTsKICAgICAgICAgICAg
IFJlc29sdmVNb2RlQW5kVHlwZSBtb2RlQW5kVHlwZSA9IFJlc29sdmVNb2RlQW5kVHlwZShwY1s0
XS51Lm9wZXJhbmQpOwogICAgICAgICAgICAgaWYgKG1vZGVBbmRUeXBlLnR5cGUoKSA9PSBMb2Nh
bENsb3N1cmVWYXIpIHsKICAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIDRdID0gUmVz
b2x2ZU1vZGVBbmRUeXBlKG1vZGVBbmRUeXBlLm1vZGUoKSwgQ2xvc3VyZVZhcikub3BlcmFuZCgp
OwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogCisgICAgICAgICAgICBj
b25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGlkZW50aWZpZXIocGNbM10udS5vcGVyYW5kKTsKKwog
ICAgICAgICAgICAgUmVzb2x2ZU9wIG9wID0gSlNTY29wZTo6YWJzdHJhY3RSZXNvbHZlKG1fZ2xv
YmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIG5lZWRzQWN0aXZhdGlvbigpLCBzY29wZSwgaWRlbnQs
IEdldCwgbW9kZUFuZFR5cGUudHlwZSgpKTsKIAogICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kg
KyA0XS51Lm9wZXJhbmQgPSBSZXNvbHZlTW9kZUFuZFR5cGUobW9kZUFuZFR5cGUubW9kZSgpLCBv
cC50eXBlKS5vcGVyYW5kKCk7CkBAIC0xOTk0LDE4ICsxOTgyLDEzIEBAIENvZGVCbG9jazo6Q29k
ZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUqIG8KIAogICAgICAgICBjYXNlIG9wX3B1dF90b19zY29w
ZTogewogICAgICAgICAgICAgLy8gcHV0X3RvX3Njb3BlIHNjb3BlLCBpZCwgdmFsdWUsIFJlc29s
dmVNb2RlQW5kVHlwZSwgU3RydWN0dXJlLCBPcGVyYW5kCi0gICAgICAgICAgICBjb25zdCBJZGVu
dGlmaWVyJiBpZGVudCA9IGlkZW50aWZpZXIocGNbMl0udS5vcGVyYW5kKTsKLQogICAgICAgICAg
ICAgUmVzb2x2ZU1vZGVBbmRUeXBlIG1vZGVBbmRUeXBlID0gUmVzb2x2ZU1vZGVBbmRUeXBlKHBj
WzRdLnUub3BlcmFuZCk7CiAgICAgICAgICAgICBpZiAobW9kZUFuZFR5cGUudHlwZSgpID09IExv
Y2FsQ2xvc3VyZVZhcikgewotICAgICAgICAgICAgICAgIGJvb2wgaXNXYXRjaGFibGVWYXJpYWJs
ZSA9IHBjWzVdLnUub3BlcmFuZDsKLSAgICAgICAgICAgICAgICBpZiAoIWlzV2F0Y2hhYmxlVmFy
aWFibGUpIHsKLSAgICAgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyA1XS51LndhdGNo
cG9pbnRTZXQgPSBudWxscHRyOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgU3RyaW5nSW1wbCogdWlkID0gaWRlbnQuaW1wbCgp
OwotICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGRpZENsb25lU3ltYm9sVGFibGUpOwot
ICAgICAgICAgICAgICAgIGlmIChpZGVudCAhPSBtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5hcmd1bWVu
dHMpIHsKKyAgICAgICAgICAgICAgICAvLyBPbmx5IGRvIHdhdGNoaW5nIGlmIHRoZSBwcm9wZXJ0
eSB3ZSdyZSBwdXR0aW5nIHRvIGlzIG5vdCBhbm9ueW1vdXMuCisgICAgICAgICAgICAgICAgaWYg
KHN0YXRpY19jYXN0PHVuc2lnbmVkPihwY1syXS51Lm9wZXJhbmQpICE9IFVJTlRfTUFYKSB7Cisg
ICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGRpZENsb25lU3ltYm9sVGFibGUpOwor
ICAgICAgICAgICAgICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGlkZW50aWZpZXIo
cGNbMl0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgICAgICAgICAgU3RyaW5nSW1wbCogdWlkID0g
aWRlbnQuaW1wbCgpOwogICAgICAgICAgICAgICAgICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxv
Y2tlcihtX3N5bWJvbFRhYmxlLT5tX2xvY2spOwogICAgICAgICAgICAgICAgICAgICBTeW1ib2xU
YWJsZTo6TWFwOjppdGVyYXRvciBpdGVyID0gbV9zeW1ib2xUYWJsZS0+ZmluZChsb2NrZXIsIHVp
ZCk7CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChpdGVyICE9IG1fc3ltYm9sVGFibGUtPmVu
ZChsb2NrZXIpKTsKQEAgLTIwMTYsNiArMTk5OSw4IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFNj
cmlwdEV4ZWN1dGFibGUqIG8KICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0K
IAorICAgICAgICAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBpZGVudGlmaWVyKHBjWzJd
LnUub3BlcmFuZCk7CisKICAgICAgICAgICAgIFJlc29sdmVPcCBvcCA9IEpTU2NvcGU6OmFic3Ry
YWN0UmVzb2x2ZShtX2dsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLCBuZWVkc0FjdGl2YXRpb24o
KSwgc2NvcGUsIGlkZW50LCBQdXQsIG1vZGVBbmRUeXBlLnR5cGUoKSk7CiAKICAgICAgICAgICAg
IGluc3RydWN0aW9uc1tpICsgNF0udS5vcGVyYW5kID0gUmVzb2x2ZU1vZGVBbmRUeXBlKG1vZGVB
bmRUeXBlLm1vZGUoKSwgb3AudHlwZSkub3BlcmFuZCgpOwpAQCAtMjg2Myw2MyArMjg0OCw2IEBA
IGJvb2wgQ29kZUJsb2NrOjpoYXNPcHRpbWl6ZWRSZXBsYWNlbWVudCgKIH0KICNlbmRpZgogCi1i
b29sIENvZGVCbG9jazo6aXNDYXB0dXJlZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgSW5saW5l
Q2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUpIGNvbnN0Ci17Ci0gICAgaWYgKG9wZXJhbmQuaXNB
cmd1bWVudCgpKQotICAgICAgICByZXR1cm4gb3BlcmFuZC50b0FyZ3VtZW50KCkgJiYgdXNlc0Fy
Z3VtZW50cygpOwotCi0gICAgaWYgKGlubGluZUNhbGxGcmFtZSkKLSAgICAgICAgcmV0dXJuIGlu
bGluZUNhbGxGcmFtZS0+Y2FwdHVyZWRWYXJzLmdldChvcGVyYW5kLnRvTG9jYWwoKSk7Ci0KLSAg
ICAvLyBUaGUgbGV4aWNhbCBlbnZpcm9ubWVudCBvYmplY3QgaXNuJ3QgaW4gdGhlIGNhcHR1cmVk
IHJlZ2lvbiwgYnV0IGl0J3MgImNhcHR1cmVkIgotICAgIC8vIGluIHRoZSBzZW5zZSB0aGF0IHN0
b3JlcyB0byBpdHMgbG9jYXRpb24gY2FuIGJlIG9ic2VydmVkIGluZGlyZWN0bHkuCi0gICAgaWYg
KG5lZWRzQWN0aXZhdGlvbigpICYmIG9wZXJhbmQgPT0gYWN0aXZhdGlvblJlZ2lzdGVyKCkpCi0g
ICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgLy8gRGl0dG8gZm9yIHRoZSBhcmd1bWVudHMgb2Jq
ZWN0LgotICAgIGlmICh1c2VzQXJndW1lbnRzKCkgJiYgb3BlcmFuZCA9PSBhcmd1bWVudHNSZWdp
c3RlcigpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBpZiAodXNlc0FyZ3VtZW50cygpICYm
IG9wZXJhbmQgPT0gdW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVyKGFyZ3VtZW50c1JlZ2lzdGVy
KCkpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIC8vIFdlJ3JlIGluIGdsb2JhbCBjb2Rl
IHNvIHRoZXJlIGFyZSBubyBsb2NhbHMgdG8gY2FwdHVyZQotICAgIGlmICghc3ltYm9sVGFibGUo
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIHN5bWJvbFRhYmxlKCktPmlz
Q2FwdHVyZWQob3BlcmFuZC5vZmZzZXQoKSk7Ci19Ci0KLWludCBDb2RlQmxvY2s6OmZyYW1lUG9p
bnRlck9mZnNldFRvR2V0QWN0aXZhdGlvblJlZ2lzdGVycyhpbnQgbWFjaGluZUNhcHR1cmVTdGFy
dCkKLXsKLSAgICAvLyBXZSdsbCBiZSBhZGRpbmcgdGhpcyB0byB0aGUgc3RhY2sgcG9pbnRlciB0
byBnZXQgYSByZWdpc3RlcnMgcG9pbnRlciB0aGF0IGxvb2tzCi0gICAgLy8gbGlrZSBpdCB3b3Vs
ZCBoYXZlIGxvb2tlZCBpbiB0aGUgYmFzZWxpbmUgZW5naW5lLiBGb3IgZXhhbXBsZSwgaWYgYnl0
ZWNvZGUgd291bGQKLSAgICAvLyBoYXZlIHB1dCB0aGUgZmlyc3QgY2FwdHVyZWQgdmFyaWFibGUg
YXQgb2Zmc2V0IC01IGJ1dCB3ZSBwdXQgaXQgYXQgb2Zmc2V0IC0xLCB0aGVuCi0gICAgLy8gd2Un
bGwgaGF2ZSBhbiBvZmZzZXQgb2YgNC4KLSAgICBpbnQzMl90IG9mZnNldCA9IDA7Ci0gICAgCi0g
ICAgLy8gQ29tcHV0ZSB3aGVyZSB3ZSBwdXQgdGhlIGNhcHR1cmVkIHZhcmlhYmxlcy4gVGhpcyBv
ZmZzZXQgd2lsbCBwb2ludCB0aGUgcmVnaXN0ZXJzCi0gICAgLy8gcG9pbnRlciBkaXJlY3RseSBh
dCB0aGUgZmlyc3QgY2FwdHVyZWQgdmFyLgotICAgIG9mZnNldCArPSBtYWNoaW5lQ2FwdHVyZVN0
YXJ0OwotICAgIAotICAgIC8vIE5vdyBjb21wdXRlIHRoZSBvZmZzZXQgbmVlZGVkIHRvIG1ha2Ug
dGhlIHJ1bnRpbWUgc2VlIHRoZSBjYXB0dXJlZCB2YXJpYWJsZXMgYXQgdGhlCi0gICAgLy8gc2Ft
ZSBvZmZzZXQgdGhhdCB0aGUgYnl0ZWNvZGUgd291bGQgaGF2ZSB1c2VkLgotICAgIG9mZnNldCAt
PSBzeW1ib2xUYWJsZSgpLT5jYXB0dXJlU3RhcnQoKTsKLSAgICAKLSAgICByZXR1cm4gb2Zmc2V0
OwotfQotCi1pbnQgQ29kZUJsb2NrOjpmcmFtZVBvaW50ZXJPZmZzZXRUb0dldEFjdGl2YXRpb25S
ZWdpc3RlcnMoKQotewotICAgIGlmICghSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUo
KSkpCi0gICAgICAgIHJldHVybiAwOwotI2lmIEVOQUJMRShERkdfSklUKQotICAgIHJldHVybiBm
cmFtZVBvaW50ZXJPZmZzZXRUb0dldEFjdGl2YXRpb25SZWdpc3RlcnMoaml0Q29kZSgpLT5kZmdD
b21tb24oKS0+bWFjaGluZUNhcHR1cmVTdGFydCk7Ci0jZWxzZQotICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIDA7Ci0jZW5kaWYKLX0KLQogSGFuZGxlckluZm8q
IENvZGVCbG9jazo6aGFuZGxlckZvckJ5dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2RlT2Zm
c2V0KQogewogICAgIFJFTEVBU0VfQVNTRVJUKGJ5dGVjb2RlT2Zmc2V0IDwgaW5zdHJ1Y3Rpb25z
KCkuc2l6ZSgpKTsKQEAgLTMwOTgsMTggKzMwMjYsNiBAQCBQYXNzUmVmUHRyPENvZGVCbG9jaz4g
Q29kZUJsb2NrOjpuZXdSZXBsCiAgICAgcmV0dXJuIG93bmVyRXhlY3V0YWJsZSgpLT5uZXdSZXBs
YWNlbWVudENvZGVCbG9ja0ZvcihzcGVjaWFsaXphdGlvbktpbmQoKSk7CiB9CiAKLWNvbnN0IFNs
b3dBcmd1bWVudCogQ29kZUJsb2NrOjptYWNoaW5lU2xvd0FyZ3VtZW50cygpCi17Ci0gICAgaWYg
KCFKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkKLSAgICAgICAgcmV0dXJuIHN5
bWJvbFRhYmxlKCktPnNsb3dBcmd1bWVudHMoKTsKLSAgICAKLSNpZiBFTkFCTEUoREZHX0pJVCkK
LSAgICByZXR1cm4gaml0Q29kZSgpLT5kZmdDb21tb24oKS0+c2xvd0FyZ3VtZW50cy5nZXQoKTsK
LSNlbHNlIC8vIEVOQUJMRShERkdfSklUKQotICAgIHJldHVybiAwOwotI2VuZGlmIC8vIEVOQUJM
RShERkdfSklUKQotfQotCiAjaWYgRU5BQkxFKEpJVCkKIENvZGVCbG9jayogUHJvZ3JhbUNvZGVC
bG9jazo6cmVwbGFjZW1lbnQoKQogewpAQCAtMzkwMiw2MyArMzgxOCwxMiBAQCBTdHJpbmcgQ29k
ZUJsb2NrOjpuYW1lRm9yUmVnaXN0ZXIoVmlydHVhCiAgICAgICAgIHJldHVybiBBU0NJSUxpdGVy
YWwoImxleGljYWwgZW52aXJvbm1lbnQiKTsKICAgICBpZiAodmlydHVhbFJlZ2lzdGVyID09IHRo
aXNSZWdpc3RlcigpKQogICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJ0aGlzIik7Ci0gICAg
aWYgKHVzZXNBcmd1bWVudHMoKSkgewotICAgICAgICBpZiAodmlydHVhbFJlZ2lzdGVyID09IGFy
Z3VtZW50c1JlZ2lzdGVyKCkpCi0gICAgICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJhcmd1
bWVudHMiKTsKLSAgICAgICAgaWYgKHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3Rlcihhcmd1bWVu
dHNSZWdpc3RlcigpKSA9PSB2aXJ0dWFsUmVnaXN0ZXIpCi0gICAgICAgICAgICByZXR1cm4gQVND
SUlMaXRlcmFsKCJyZWFsIGFyZ3VtZW50cyIpOwotICAgIH0KICAgICBpZiAodmlydHVhbFJlZ2lz
dGVyLmlzQXJndW1lbnQoKSkKICAgICAgICAgcmV0dXJuIFN0cmluZzo6Zm9ybWF0KCJhcmd1bWVu
dHNbJTNkXSIsIHZpcnR1YWxSZWdpc3Rlci50b0FyZ3VtZW50KCkpOwogCiAgICAgcmV0dXJuICIi
OwogfQogCi1uYW1lc3BhY2UgewotCi1zdHJ1Y3QgVmVyaWZ5Q2FwdHVyZWREZWYgewotICAgIHZv
aWQgb3BlcmF0b3IoKShDb2RlQmxvY2sqIGNvZGVCbG9jaywgSW5zdHJ1Y3Rpb24qIGluc3RydWN0
aW9uLCBPcGNvZGVJRCBvcGNvZGVJRCwgaW50IG9wZXJhbmQpCi0gICAgewotICAgICAgICB1bnNp
Z25lZCBieXRlY29kZU9mZnNldCA9IGluc3RydWN0aW9uIC0gY29kZUJsb2NrLT5pbnN0cnVjdGlv
bnMoKS5iZWdpbigpOwotICAgICAgICAKLSAgICAgICAgaWYgKGNvZGVCbG9jay0+aXNDb25zdGFu
dFJlZ2lzdGVySW5kZXgob3BlcmFuZCkpIHsKLSAgICAgICAgICAgIGNvZGVCbG9jay0+YmVnaW5W
YWxpZGF0aW9uRGlkRmFpbCgpOwotICAgICAgICAgICAgZGF0YUxvZygiICAgIEF0IGJjIyIsIGJ5
dGVjb2RlT2Zmc2V0LCAiIGVuY291bnRlcmVkIGEgZGVmaW5pdGlvbiBvZiBhIGNvbnN0YW50Llxu
Iik7Ci0gICAgICAgICAgICBjb2RlQmxvY2stPmVuZFZhbGlkYXRpb25EaWRGYWlsKCk7Ci0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBzd2l0Y2ggKG9wY29kZUlEKSB7
Ci0gICAgICAgIGNhc2Ugb3BfZW50ZXI6Ci0gICAgICAgIGNhc2Ugb3BfaW5pdF9sYXp5X3JlZzoK
LSAgICAgICAgY2FzZSBvcF9jcmVhdGVfYXJndW1lbnRzOgotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZyhvcGVyYW5kKTsKLSAgICAgICAgaWYgKCF2aXJ0
dWFsUmVnLmlzTG9jYWwoKSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBpZiAoY29k
ZUJsb2NrLT51c2VzQXJndW1lbnRzKCkgJiYgdmlydHVhbFJlZyA9PSBjb2RlQmxvY2stPmFyZ3Vt
ZW50c1JlZ2lzdGVyKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGlmIChjb2RlQmxv
Y2stPnVzZXNBcmd1bWVudHMoKSAmJiB2aXJ0dWFsUmVnID09IHVubW9kaWZpZWRBcmd1bWVudHNS
ZWdpc3Rlcihjb2RlQmxvY2stPmFyZ3VtZW50c1JlZ2lzdGVyKCkpKQotICAgICAgICAgICAgcmV0
dXJuOwotCi0gICAgICAgIGlmIChjb2RlQmxvY2stPmNhcHR1cmVDb3VudCgpICYmIGNvZGVCbG9j
ay0+c3ltYm9sVGFibGUoKS0+aXNDYXB0dXJlZChvcGVyYW5kKSkgewotICAgICAgICAgICAgY29k
ZUJsb2NrLT5iZWdpblZhbGlkYXRpb25EaWRGYWlsKCk7Ci0gICAgICAgICAgICBkYXRhTG9nKCIg
ICAgQXQgYmMjIiwgYnl0ZWNvZGVPZmZzZXQsICIgZW5jb3VudGVyZWQgaW52YWxpZCBhc3NpZ25t
ZW50IHRvIGNhcHR1cmVkIHZhcmlhYmxlICIsIHZpcnR1YWxSZWcsICIuXG4iKTsKLSAgICAgICAg
ICAgIGNvZGVCbG9jay0+ZW5kVmFsaWRhdGlvbkRpZEZhaWwoKTsKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLX07Ci0KLX0g
Ly8gYW5vbnltb3VzIG5hbWVzcGFjZQotCiB2b2lkIENvZGVCbG9jazo6dmFsaWRhdGUoKQogewog
ICAgIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcyBsaXZlbmVzcyh0aGlzKTsgLy8gQ29tcHV0ZSBk
aXJlY3RseSBmcm9tIHNjcmF0Y2ggc28gaXQgZG9lc24ndCBlZmZlY3QgQ29kZUJsb2NrIGZvb3Rw
cmludC4KQEAgLTM5NzQsMzggKzM4MzksMTUgQEAgdm9pZCBDb2RlQmxvY2s6OnZhbGlkYXRlKCkK
ICAgICB9CiAgICAgCiAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9udW1DYWxsZWVSZWdpc3RlcnM7
IGktLTspIHsKLSAgICAgICAgYm9vbCBpc0NhcHR1cmVkID0gZmFsc2U7CiAgICAgICAgIFZpcnR1
YWxSZWdpc3RlciByZWcgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpKTsKICAgICAgICAgCi0g
ICAgICAgIGlmIChjYXB0dXJlQ291bnQoKSkKLSAgICAgICAgICAgIGlzQ2FwdHVyZWQgPSByZWcu
b2Zmc2V0KCkgPD0gY2FwdHVyZVN0YXJ0KCkgJiYgcmVnLm9mZnNldCgpID4gY2FwdHVyZUVuZCgp
OwotICAgICAgICAKLSAgICAgICAgaWYgKGlzQ2FwdHVyZWQpIHsKLSAgICAgICAgICAgIGlmICgh
bGl2ZUF0SGVhZC5nZXQoaSkpIHsKLSAgICAgICAgICAgICAgICBiZWdpblZhbGlkYXRpb25EaWRG
YWlsKCk7Ci0gICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIFZhcmlhYmxlIGxvYyIsIGksICIg
aXMgZXhwZWN0ZWQgdG8gYmUgbGl2ZSBiZWNhdXNlIGl0IGlzIGNhcHR1cmVkLCBidXQgaXQgaXNu
J3QgbGl2ZS5cbiIpOwotICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBSZXN1bHQ6ICIsIGxp
dmVBdEhlYWQsICJcbiIpOwotICAgICAgICAgICAgICAgIGVuZFZhbGlkYXRpb25EaWRGYWlsKCk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAobGl2ZUF0
SGVhZC5nZXQoaSkpIHsKLSAgICAgICAgICAgICAgICBiZWdpblZhbGlkYXRpb25EaWRGYWlsKCk7
Ci0gICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIFZhcmlhYmxlIGxvYyIsIGksICIgaXMgZXhw
ZWN0ZWQgdG8gYmUgZGVhZC5cbiIpOwotICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBSZXN1
bHQ6ICIsIGxpdmVBdEhlYWQsICJcbiIpOwotICAgICAgICAgICAgICAgIGVuZFZhbGlkYXRpb25E
aWRGYWlsKCk7Ci0gICAgICAgICAgICB9CisgICAgICAgIGlmIChsaXZlQXRIZWFkLmdldChpKSkg
eworICAgICAgICAgICAgYmVnaW5WYWxpZGF0aW9uRGlkRmFpbCgpOworICAgICAgICAgICAgZGF0
YUxvZygiICAgIFZhcmlhYmxlIGxvYyIsIGksICIgaXMgZXhwZWN0ZWQgdG8gYmUgZGVhZC5cbiIp
OworICAgICAgICAgICAgZGF0YUxvZygiICAgIFJlc3VsdDogIiwgbGl2ZUF0SGVhZCwgIlxuIik7
CisgICAgICAgICAgICBlbmRWYWxpZGF0aW9uRGlkRmFpbCgpOwogICAgICAgICB9CiAgICAgfQot
ICAgIAotICAgIGZvciAodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSAwOyBieXRlY29kZU9mZnNl
dCA8IGluc3RydWN0aW9ucygpLnNpemUoKTspIHsKLSAgICAgICAgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiA9IGluc3RydWN0aW9ucygpLmJlZ2luKCkgKyBieXRlY29kZU9mZnNldDsK
LSAgICAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBtX3ZtLT5pbnRlcnByZXRlci0+Z2V0T3Bjb2Rl
SUQoY3VycmVudEluc3RydWN0aW9uLT51Lm9wY29kZSk7Ci0gICAgICAgIAotICAgICAgICBWZXJp
ZnlDYXB0dXJlZERlZiB2ZXJpZnlDYXB0dXJlZERlZjsKLSAgICAgICAgY29tcHV0ZURlZnNGb3JC
eXRlY29kZU9mZnNldCh0aGlzLCBieXRlY29kZU9mZnNldCwgdmVyaWZ5Q2FwdHVyZWREZWYpOwot
ICAgICAgICAKLSAgICAgICAgYnl0ZWNvZGVPZmZzZXQgKz0gb3Bjb2RlTGVuZ3RoKG9wY29kZUlE
KTsKLSAgICB9CiB9CiAKIHZvaWQgQ29kZUJsb2NrOjpiZWdpblZhbGlkYXRpb25EaWRGYWlsKCkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlz
aW9uIDE4MDg3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2su
aAkod29ya2luZyBjb3B5KQpAQCAtODMsOCArODMsNiBAQCBjbGFzcyBMTEludE9mZnNldHNFeHRy
YWN0b3I7CiBjbGFzcyBSZXBhdGNoQnVmZmVyOwogY2xhc3MgVHlwZUxvY2F0aW9uOwogCi1pbmxp
bmUgVmlydHVhbFJlZ2lzdGVyIHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3RlcihWaXJ0dWFsUmVn
aXN0ZXIgYXJndW1lbnRzUmVnaXN0ZXIpIHsgcmV0dXJuIFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVu
dHNSZWdpc3Rlci5vZmZzZXQoKSArIDEpOyB9Ci0KIGVudW0gUmVvcHRpbWl6YXRpb25Nb2RlIHsg
RG9udENvdW50UmVvcHRpbWl6YXRpb24sIENvdW50UmVvcHRpbWl6YXRpb24gfTsKIAogY2xhc3Mg
Q29kZUJsb2NrIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPENvZGVCbG9jaz4sIHB1Ymxp
YyBVbmNvbmRpdGlvbmFsRmluYWxpemVyLCBwdWJsaWMgV2Vha1JlZmVyZW5jZUhhcnZlc3RlciB7
CkBAIC0yNTksMTEgKzI1Nyw2IEBAIHB1YmxpYzoKIAogICAgIHVuc2lnbmVkIGluc3RydWN0aW9u
Q291bnQoKSBjb25zdCB7IHJldHVybiBtX2luc3RydWN0aW9ucy5zaXplKCk7IH0KIAotICAgIGlu
dCBhcmd1bWVudEluZGV4QWZ0ZXJDYXB0dXJlKHNpemVfdCBhcmd1bWVudCk7Ci0gICAgCi0gICAg
Ym9vbCBoYXNTbG93QXJndW1lbnRzKCk7Ci0gICAgY29uc3QgU2xvd0FyZ3VtZW50KiBtYWNoaW5l
U2xvd0FyZ3VtZW50cygpOwotCiAgICAgLy8gRXhhY3RseSBlcXVpdmFsZW50IHRvIGNvZGVCbG9j
ay0+b3duZXJFeGVjdXRhYmxlKCktPmluc3RhbGxDb2RlKGNvZGVCbG9jayk7CiAgICAgdm9pZCBp
bnN0YWxsKCk7CiAgICAgCkBAIC0zMjcsMjQgKzMyMCw2IEBAIHB1YmxpYzoKICAgICAgICAgcmV0
dXJuIG1fc2NvcGVSZWdpc3RlcjsKICAgICB9CiAKLSAgICB2b2lkIHNldEFyZ3VtZW50c1JlZ2lz
dGVyKFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudHNSZWdpc3RlcikKLSAgICB7Ci0gICAgICAgIEFT
U0VSVChhcmd1bWVudHNSZWdpc3Rlci5pc1ZhbGlkKCkpOwotICAgICAgICBtX2FyZ3VtZW50c1Jl
Z2lzdGVyID0gYXJndW1lbnRzUmVnaXN0ZXI7Ci0gICAgICAgIEFTU0VSVCh1c2VzQXJndW1lbnRz
KCkpOwotICAgIH0KLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRzUmVnaXN0ZXIoKSBjb25z
dAotICAgIHsKLSAgICAgICAgQVNTRVJUKHVzZXNBcmd1bWVudHMoKSk7Ci0gICAgICAgIHJldHVy
biBtX2FyZ3VtZW50c1JlZ2lzdGVyOwotICAgIH0KLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdW5jaGVj
a2VkQXJndW1lbnRzUmVnaXN0ZXIoKQotICAgIHsKLSAgICAgICAgaWYgKCF1c2VzQXJndW1lbnRz
KCkpCi0gICAgICAgICAgICByZXR1cm4gVmlydHVhbFJlZ2lzdGVyKCk7Ci0gICAgICAgIHJldHVy
biBhcmd1bWVudHNSZWdpc3RlcigpOwotICAgIH0KLQogICAgIHZvaWQgc2V0QWN0aXZhdGlvblJl
Z2lzdGVyKFZpcnR1YWxSZWdpc3RlciBhY3RpdmF0aW9uUmVnaXN0ZXIpCiAgICAgewogICAgICAg
ICBtX2xleGljYWxFbnZpcm9ubWVudFJlZ2lzdGVyID0gYWN0aXZhdGlvblJlZ2lzdGVyOwpAQCAt
MzYxLDQwICszMzYsMTIgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9sZXhpY2FsRW52aXJv
bm1lbnRSZWdpc3RlcjsKICAgICB9CiAKLSAgICBib29sIHVzZXNBcmd1bWVudHMoKSBjb25zdCB7
IHJldHVybiBtX2FyZ3VtZW50c1JlZ2lzdGVyLmlzVmFsaWQoKTsgfQotCiAgICAgYm9vbCBuZWVk
c0FjdGl2YXRpb24oKSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKG1fbGV4aWNhbEVudmly
b25tZW50UmVnaXN0ZXIuaXNWYWxpZCgpID09IG1fbmVlZHNBY3RpdmF0aW9uKTsKICAgICAgICAg
cmV0dXJuIG1fbmVlZHNBY3RpdmF0aW9uOwogICAgIH0KICAgICAKLSAgICB1bnNpZ25lZCBjYXB0
dXJlQ291bnQoKSBjb25zdAotICAgIHsKLSAgICAgICAgaWYgKCFzeW1ib2xUYWJsZSgpKQotICAg
ICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHJldHVybiBzeW1ib2xUYWJsZSgpLT5jYXB0dXJl
Q291bnQoKTsKLSAgICB9Ci0gICAgCi0gICAgaW50IGNhcHR1cmVTdGFydCgpIGNvbnN0Ci0gICAg
ewotICAgICAgICBpZiAoIXN5bWJvbFRhYmxlKCkpCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAg
ICAgICAgcmV0dXJuIHN5bWJvbFRhYmxlKCktPmNhcHR1cmVTdGFydCgpOwotICAgIH0KLSAgICAK
LSAgICBpbnQgY2FwdHVyZUVuZCgpIGNvbnN0Ci0gICAgewotICAgICAgICBpZiAoIXN5bWJvbFRh
YmxlKCkpCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgcmV0dXJuIHN5bWJvbFRhYmxl
KCktPmNhcHR1cmVFbmQoKTsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBpc0NhcHR1cmVkKFZpcnR1
YWxSZWdpc3RlciBvcGVyYW5kLCBJbmxpbmVDYWxsRnJhbWUqID0gMCkgY29uc3Q7Ci0gICAgCi0g
ICAgaW50IGZyYW1lUG9pbnRlck9mZnNldFRvR2V0QWN0aXZhdGlvblJlZ2lzdGVycyhpbnQgbWFj
aGluZUNhcHR1cmVTdGFydCk7Ci0gICAgaW50IGZyYW1lUG9pbnRlck9mZnNldFRvR2V0QWN0aXZh
dGlvblJlZ2lzdGVycygpOwotCiAgICAgQ29kZVR5cGUgY29kZVR5cGUoKSBjb25zdCB7IHJldHVy
biBtX3VubGlua2VkQ29kZS0+Y29kZVR5cGUoKTsgfQogICAgIFB1dFByb3BlcnR5U2xvdDo6Q29u
dGV4dCBwdXRCeUlkQ29udGV4dCgpIGNvbnN0CiAgICAgewpAQCAtMTA1Nyw3ICsxMDA0LDYgQEAg
cHJpdmF0ZToKICAgICBXcml0ZUJhcnJpZXI8U3ltYm9sVGFibGU+IG1fc3ltYm9sVGFibGU7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIG1fdGhpc1JlZ2lzdGVyOwogICAgIFZpcnR1YWxSZWdpc3RlciBt
X3Njb3BlUmVnaXN0ZXI7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIG1fYXJndW1lbnRzUmVnaXN0ZXI7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIG1fbGV4aWNhbEVudmlyb25tZW50UmVnaXN0ZXI7CiAKICAg
ICBib29sIG1faXNTdHJpY3RNb2RlOwpAQCAtMTIxOCwyNCArMTE2NCw2IEBAIGlubGluZSBDb2Rl
QmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9yT3IKICAgICByZXR1cm4gYmFzZWxpbmVDb2RlQmxv
Y2s7CiB9CiAKLWlubGluZSBpbnQgQ29kZUJsb2NrOjphcmd1bWVudEluZGV4QWZ0ZXJDYXB0dXJl
KHNpemVfdCBhcmd1bWVudCkKLXsKLSAgICBpZiAoYXJndW1lbnQgPj0gc3RhdGljX2Nhc3Q8c2l6
ZV90PihzeW1ib2xUYWJsZSgpLT5wYXJhbWV0ZXJDb3VudCgpKSkKLSAgICAgICAgcmV0dXJuIENh
bGxGcmFtZTo6YXJndW1lbnRPZmZzZXQoYXJndW1lbnQpOwotICAgIAotICAgIGNvbnN0IFNsb3dB
cmd1bWVudCogc2xvd0FyZ3VtZW50cyA9IHN5bWJvbFRhYmxlKCktPnNsb3dBcmd1bWVudHMoKTsK
LSAgICBpZiAoIXNsb3dBcmd1bWVudHMgfHwgc2xvd0FyZ3VtZW50c1thcmd1bWVudF0uc3RhdHVz
ID09IFNsb3dBcmd1bWVudDo6Tm9ybWFsKQotICAgICAgICByZXR1cm4gQ2FsbEZyYW1lOjphcmd1
bWVudE9mZnNldChhcmd1bWVudCk7Ci0gICAgCi0gICAgQVNTRVJUKHNsb3dBcmd1bWVudHNbYXJn
dW1lbnRdLnN0YXR1cyA9PSBTbG93QXJndW1lbnQ6OkNhcHR1cmVkKTsKLSAgICByZXR1cm4gc2xv
d0FyZ3VtZW50c1thcmd1bWVudF0uaW5kZXg7Ci19Ci0KLWlubGluZSBib29sIENvZGVCbG9jazo6
aGFzU2xvd0FyZ3VtZW50cygpCi17Ci0gICAgcmV0dXJuICEhc3ltYm9sVGFibGUoKS0+c2xvd0Fy
Z3VtZW50cygpOwotfQotCiBpbmxpbmUgUmVnaXN0ZXImIEV4ZWNTdGF0ZTo6cihpbnQgaW5kZXgp
CiB7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSB0aGlzLT5jb2RlQmxvY2soKTsKQEAgLTEy
NjAsMTcgKzExODgsNiBAQCBpbmxpbmUgUmVnaXN0ZXImIEV4ZWNTdGF0ZTo6dW5jaGVja2VkUihW
CiAgICAgcmV0dXJuIHVuY2hlY2tlZFIocmVnLm9mZnNldCgpKTsKIH0KIAotaW5saW5lIEpTVmFs
dWUgRXhlY1N0YXRlOjphcmd1bWVudEFmdGVyQ2FwdHVyZShzaXplX3QgYXJndW1lbnQpCi17Ci0g
ICAgaWYgKGFyZ3VtZW50ID49IGFyZ3VtZW50Q291bnQoKSkKLSAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7Ci0gICAgCi0gICAgaWYgKCFjb2RlQmxvY2soKSkKLSAgICAgICAgcmV0dXJuIHRo
aXNbYXJndW1lbnRPZmZzZXQoYXJndW1lbnQpXS5qc1ZhbHVlKCk7Ci0gICAgCi0gICAgcmV0dXJu
IHRoaXNbY29kZUJsb2NrKCktPmFyZ3VtZW50SW5kZXhBZnRlckNhcHR1cmUoYXJndW1lbnQpXS5q
c1ZhbHVlKCk7Ci19Ci0KIGlubGluZSB2b2lkIENvZGVCbG9ja1NldDo6bWFyayh2b2lkKiBjYW5k
aWRhdGVDb2RlQmxvY2spCiB7CiAgICAgLy8gV2UgaGF2ZSB0byBjaGVjayBmb3IgMCBhbmQgLTEg
YmVjYXVzZSB0aG9zZSBhcmUgdXNlZCBieSB0aGUgSGFzaE1hcCBhcyBtYXJrZXJzLgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5oCShyZXZpc2lvbiAx
ODA4NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xODksMTIgKzE4OSwxMCBAQCBzdHJ1Y3QgSW5saW5lQ2FsbEZyYW1l
IHsKICAgICBXcml0ZUJhcnJpZXI8U2NyaXB0RXhlY3V0YWJsZT4gZXhlY3V0YWJsZTsKICAgICBW
YWx1ZVJlY292ZXJ5IGNhbGxlZVJlY292ZXJ5OwogICAgIENvZGVPcmlnaW4gY2FsbGVyOwotICAg
IEJpdFZlY3RvciBjYXB0dXJlZFZhcnM7IC8vIEluZGV4ZWQgYnkgdGhlIG1hY2hpbmUgY2FsbCBm
cmFtZSdzIHZhcmlhYmxlIG51bWJlcmluZy4KIAogICAgIHNpZ25lZCBzdGFja09mZnNldCA6IDI4
OwogICAgIHVuc2lnbmVkIGtpbmQgOiAzOyAvLyByZWFsIHR5cGUgaXMgS2luZAogICAgIGJvb2wg
aXNDbG9zdXJlQ2FsbCA6IDE7IC8vIElmIGZhbHNlIHRoZW4gd2Uga25vdyB0aGF0IGNhbGxlZS9z
Y29wZSBhcmUgY29uc3RhbnRzIGFuZCB0aGUgREZHIHdvbid0IHRyZWF0IHRoZW0gYXMgdmFyaWFi
bGVzLCBpLmUuIHRoZXkgaGF2ZSB0byBiZSByZWNvdmVyZWQgbWFudWFsbHkuCi0gICAgVmlydHVh
bFJlZ2lzdGVyIGFyZ3VtZW50c1JlZ2lzdGVyOyAvLyBUaGlzIGlzIG9ubHkgc2V0IGlmIHRoZSBj
b2RlIHVzZXMgYXJndW1lbnRzLiBUaGUgdW5tb2RpZmllZCBhcmd1bWVudHMgcmVnaXN0ZXIgZm9s
bG93cyB0aGUgdW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVyKCkgY29udmVudGlvbiAoc2VlIENv
ZGVCbG9jay5oKS4KICAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRDb3VudFJlZ2lzdGVyOyAv
LyBPbmx5IHNldCB3aGVuIHdlIGlubGluZSBhIHZhcmFyZ3MgY2FsbC4KICAgICAKICAgICAvLyBU
aGVyZSBpcyByZWFsbHkgbm8gZ29vZCBub3Rpb24gb2YgYSAiZGVmYXVsdCIgc2V0IG9mIHZhbHVl
cyBmb3IKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlw
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1
bGF0ZWRUeXBlLmNwcAkocmV2aXNpb24gMTgwODc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyLCAyMDEzLCAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMjksMTAgKzI5LDExIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVk
ZSAiU3BlY3VsYXRlZFR5cGUuaCIKIAotI2luY2x1ZGUgIkFyZ3VtZW50cy5oIgorI2luY2x1ZGUg
IkRpcmVjdEFyZ3VtZW50cy5oIgogI2luY2x1ZGUgIkpTQXJyYXkuaCIKICNpbmNsdWRlICJKU0Z1
bmN0aW9uLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIlNjb3BlZEFyZ3Vt
ZW50cy5oIgogI2luY2x1ZGUgIlN0cmluZ09iamVjdC5oIgogI2luY2x1ZGUgIlZhbHVlUHJvZmls
ZS5oIgogI2luY2x1ZGUgPHd0Zi9Cb3VuZHNDaGVja2VkUG9pbnRlci5oPgpAQCAtMTI3LDggKzEy
OCwxMyBAQCB2b2lkIGR1bXBTcGVjdWxhdGlvbihQcmludFN0cmVhbSYgb3V0LCBTCiAgICAgICAg
ICAgICBlbHNlCiAgICAgICAgICAgICAgICAgaXNUb3AgPSBmYWxzZTsKICAgICAKLSAgICAgICAg
ICAgIGlmICh2YWx1ZSAmIFNwZWNBcmd1bWVudHMpCi0gICAgICAgICAgICAgICAgbXlPdXQucHJp
bnQoIkFyZ3VtZW50cyIpOworICAgICAgICAgICAgaWYgKHZhbHVlICYgU3BlY0RpcmVjdEFyZ3Vt
ZW50cykKKyAgICAgICAgICAgICAgICBteU91dC5wcmludCgiRGlyZWN0YXJndW1lbnRzIik7Cisg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgaXNUb3AgPSBmYWxzZTsKKyAgICAKKyAg
ICAgICAgICAgIGlmICh2YWx1ZSAmIFNwZWNTY29wZWRBcmd1bWVudHMpCisgICAgICAgICAgICAg
ICAgbXlPdXQucHJpbnQoIlNjb3BlZGFyZ3VtZW50cyIpOwogICAgICAgICAgICAgZWxzZQogICAg
ICAgICAgICAgICAgIGlzVG9wID0gZmFsc2U7CiAgICAgCkBAIC0yMzIsOCArMjM4LDEwIEBAIHN0
YXRpYyBjb25zdCBjaGFyKiBzcGVjdWxhdGlvblRvQWJicmV2aWEKICAgICAgICAgcmV0dXJuICI8
RmxvYXQzMmFycmF5PiI7CiAgICAgaWYgKGlzRmxvYXQ2NEFycmF5U3BlY3VsYXRpb24ocHJlZGlj
dGlvbikpCiAgICAgICAgIHJldHVybiAiPEZsb2F0NjRhcnJheT4iOwotICAgIGlmIChpc0FyZ3Vt
ZW50c1NwZWN1bGF0aW9uKHByZWRpY3Rpb24pKQotICAgICAgICByZXR1cm4gIjxBcmd1bWVudHM+
IjsKKyAgICBpZiAoaXNEaXJlY3RBcmd1bWVudHNTcGVjdWxhdGlvbihwcmVkaWN0aW9uKSkKKyAg
ICAgICAgcmV0dXJuICI8RGlyZWN0QXJndW1lbnRzPiI7CisgICAgaWYgKGlzU2NvcGVkQXJndW1l
bnRzU3BlY3VsYXRpb24ocHJlZGljdGlvbikpCisgICAgICAgIHJldHVybiAiPFNjb3BlZEFyZ3Vt
ZW50cz4iOwogICAgIGlmIChpc1N0cmluZ09iamVjdFNwZWN1bGF0aW9uKHByZWRpY3Rpb24pKQog
ICAgICAgICByZXR1cm4gIjxTdHJpbmdPYmplY3Q+IjsKICAgICBpZiAoaXNTdHJpbmdPclN0cmlu
Z09iamVjdFNwZWN1bGF0aW9uKHByZWRpY3Rpb24pKQpAQCAtMzA1LDggKzMxMywxMSBAQCBTcGVj
dWxhdGVkVHlwZSBzcGVjdWxhdGlvbkZyb21DbGFzc0luZm8oCiAgICAgaWYgKGNsYXNzSW5mbyA9
PSBKU0FycmF5OjppbmZvKCkpCiAgICAgICAgIHJldHVybiBTcGVjQXJyYXk7CiAgICAgCi0gICAg
aWYgKGNsYXNzSW5mbyA9PSBBcmd1bWVudHM6OmluZm8oKSkKLSAgICAgICAgcmV0dXJuIFNwZWNB
cmd1bWVudHM7CisgICAgaWYgKGNsYXNzSW5mbyA9PSBEaXJlY3RBcmd1bWVudHM6OmluZm8oKSkK
KyAgICAgICAgcmV0dXJuIFNwZWNEaXJlY3RBcmd1bWVudHM7CisgICAgCisgICAgaWYgKGNsYXNz
SW5mbyA9PSBTY29wZWRBcmd1bWVudHM6OmluZm8oKSkKKyAgICAgICAgcmV0dXJuIFNwZWNTY29w
ZWRBcmd1bWVudHM7CiAgICAgCiAgICAgaWYgKGNsYXNzSW5mbyA9PSBTdHJpbmdPYmplY3Q6Omlu
Zm8oKSkKICAgICAgICAgcmV0dXJuIFNwZWNTdHJpbmdPYmplY3Q7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuaAkocmV2aXNpb24gMTgw
ODc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEx
LTIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDExLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC01Miw4ICs1Miw5IEBAIHN0YXRpYyBjb25zdCBTcGVjdWxhdGVk
VHlwZSBTcGVjVWludDMyQXIKIHN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjRmxvYXQz
MkFycmF5ICAgICAgID0gMHgwMDAwMDQwMDsgLy8gSXQncyBkZWZpbml0ZWx5IGFuIFVpbnQxNkFy
cmF5IG9yIG9uZSBvZiBpdHMgc3ViY2xhc3Nlcy4KIHN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlw
ZSBTcGVjRmxvYXQ2NEFycmF5ICAgICAgID0gMHgwMDAwMDgwMDsgLy8gSXQncyBkZWZpbml0ZWx5
IGFuIFVpbnQxNkFycmF5IG9yIG9uZSBvZiBpdHMgc3ViY2xhc3Nlcy4KIHN0YXRpYyBjb25zdCBT
cGVjdWxhdGVkVHlwZSBTcGVjVHlwZWRBcnJheVZpZXcgICAgID0gU3BlY0ludDhBcnJheSB8IFNw
ZWNJbnQxNkFycmF5IHwgU3BlY0ludDMyQXJyYXkgfCBTcGVjVWludDhBcnJheSB8IFNwZWNVaW50
OENsYW1wZWRBcnJheSB8IFNwZWNVaW50MTZBcnJheSB8IFNwZWNVaW50MzJBcnJheSB8IFNwZWNG
bG9hdDMyQXJyYXkgfCBTcGVjRmxvYXQ2NEFycmF5Owotc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRU
eXBlIFNwZWNBcmd1bWVudHMgICAgICAgICAgPSAweDAwMDAxMDAwOyAvLyBJdCdzIGRlZmluaXRl
bHkgYW4gQXJndW1lbnRzIG9iamVjdC4KLXN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVj
U3RyaW5nT2JqZWN0ICAgICAgID0gMHgwMDAwMjAwMDsgLy8gSXQncyBkZWZpbml0ZWx5IGEgU3Ry
aW5nT2JqZWN0Lgorc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNEaXJlY3RBcmd1bWVu
dHMgICAgPSAweDAwMDAxMDAwOyAvLyBJdCdzIGRlZmluaXRlbHkgYSBEaXJlY3RBcmd1bWVudHMg
b2JqZWN0Lgorc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNTY29wZWRBcmd1bWVudHMg
ICAgPSAweDAwMDAyMDAwOyAvLyBJdCdzIGRlZmluaXRlbHkgYSBTY29wZWRBcmd1bWVudHMgb2Jq
ZWN0Lgorc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNTdHJpbmdPYmplY3QgICAgICAg
PSAweDAwMDA0MDAwOyAvLyBJdCdzIGRlZmluaXRlbHkgYSBTdHJpbmdPYmplY3QuCiBzdGF0aWMg
Y29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY09iamVjdE90aGVyICAgICAgICA9IDB4MDAwMDgwMDA7
IC8vIEl0J3MgZGVmaW5pdGVseSBhbiBvYmplY3QgYnV0IG5vdCBKU0ZpbmFsT2JqZWN0LCBKU0Fy
cmF5LCBvciBKU0Z1bmN0aW9uLgogc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNPYmpl
Y3QgICAgICAgICAgICAgPSAweDAwMDBmZmZmOyAvLyBCaXRtYXNrIHVzZWQgZm9yIHRlc3Rpbmcg
Zm9yIGFueSBraW5kIG9mIG9iamVjdCBwcmVkaWN0aW9uLgogc3RhdGljIGNvbnN0IFNwZWN1bGF0
ZWRUeXBlIFNwZWNTdHJpbmdJZGVudCAgICAgICAgPSAweDAwMDEwMDAwOyAvLyBJdCdzIGRlZmlu
aXRlbHkgYSBKU1N0cmluZywgYW5kIGl0J3MgYW4gaWRlbnRpZmllci4KQEAgLTE5Myw5ICsxOTQs
MTQgQEAgaW5saW5lIGJvb2wgaXNGbG9hdDY0QXJyYXlTcGVjdWxhdGlvbihTcAogICAgIHJldHVy
biB2YWx1ZSA9PSBTcGVjRmxvYXQ2NEFycmF5OwogfQogCi1pbmxpbmUgYm9vbCBpc0FyZ3VtZW50
c1NwZWN1bGF0aW9uKFNwZWN1bGF0ZWRUeXBlIHZhbHVlKQoraW5saW5lIGJvb2wgaXNEaXJlY3RB
cmd1bWVudHNTcGVjdWxhdGlvbihTcGVjdWxhdGVkVHlwZSB2YWx1ZSkKIHsKLSAgICByZXR1cm4g
ISF2YWx1ZSAmJiAodmFsdWUgJiBTcGVjQXJndW1lbnRzKSA9PSB2YWx1ZTsKKyAgICByZXR1cm4g
dmFsdWUgPT0gU3BlY0RpcmVjdEFyZ3VtZW50czsKK30KKworaW5saW5lIGJvb2wgaXNTY29wZWRB
cmd1bWVudHNTcGVjdWxhdGlvbihTcGVjdWxhdGVkVHlwZSB2YWx1ZSkKK3sKKyAgICByZXR1cm4g
dmFsdWUgPT0gU3BlY1Njb3BlZEFyZ3VtZW50czsKIH0KIAogaW5saW5lIGJvb2wgaXNBY3Rpb25h
YmxlSW50TXV0YWJsZUFycmF5U3BlY3VsYXRpb24oU3BlY3VsYXRlZFR5cGUgdmFsdWUpCkBAIC0y
MjQsMTMgKzIzMCwxNCBAQCBpbmxpbmUgYm9vbCBpc0FjdGlvbmFibGVUeXBlZE11dGFibGVBcnJh
CiBpbmxpbmUgYm9vbCBpc0FjdGlvbmFibGVNdXRhYmxlQXJyYXlTcGVjdWxhdGlvbihTcGVjdWxh
dGVkVHlwZSB2YWx1ZSkKIHsKICAgICByZXR1cm4gaXNBcnJheVNwZWN1bGF0aW9uKHZhbHVlKQot
ICAgICAgICB8fCBpc0FyZ3VtZW50c1NwZWN1bGF0aW9uKHZhbHVlKQogICAgICAgICB8fCBpc0Fj
dGlvbmFibGVUeXBlZE11dGFibGVBcnJheVNwZWN1bGF0aW9uKHZhbHVlKTsKIH0KIAogaW5saW5l
IGJvb2wgaXNBY3Rpb25hYmxlQXJyYXlTcGVjdWxhdGlvbihTcGVjdWxhdGVkVHlwZSB2YWx1ZSkK
IHsKICAgICByZXR1cm4gaXNTdHJpbmdTcGVjdWxhdGlvbih2YWx1ZSkKKyAgICAgICAgfHwgaXNE
aXJlY3RBcmd1bWVudHNTcGVjdWxhdGlvbih2YWx1ZSkKKyAgICAgICAgfHwgaXNTY29wZWRBcmd1
bWVudHNTcGVjdWxhdGlvbih2YWx1ZSkKICAgICAgICAgfHwgaXNBY3Rpb25hYmxlTXV0YWJsZUFy
cmF5U3BlY3VsYXRpb24odmFsdWUpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkocmV2aXNp
b24gMTgwODc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29k
ZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzLDYgKzYzLDIwIEBAIFBhcnNlckVy
cm9yIEJ5dGVjb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZSgKICAgICBTYW1wbGluZ1JlZ2lvbiBzYW1w
bGluZ1JlZ2lvbigiQnl0ZWNvZGUgR2VuZXJhdGlvbiIpOwogICAgIAogICAgIG1fY29kZUJsb2Nr
LT5zZXRUaGlzUmVnaXN0ZXIobV90aGlzUmVnaXN0ZXIudmlydHVhbFJlZ2lzdGVyKCkpOworICAg
IAorICAgIC8vIElmIHdlIGhhdmUgZGVjbGFyZWQgYSB2YXJpYWJsZSBuYW1lZCAiYXJndW1lbnRz
IiBhbmQgd2UgYXJlIHVzaW5nIGFyZ3VtZW50cyB0aGVuIHdlIHNob3VsZAorICAgIC8vIHBlcmZv
cm0gdGhhdCBhc3NpZ25tZW50IG5vdy4KKyAgICBpZiAobV9uZWVkVG9Jbml0aWFsaXplQXJndW1l
bnRzKQorICAgICAgICBpbml0aWFsaXplVmFyaWFibGUodmFyaWFibGUocHJvcGVydHlOYW1lcygp
LmFyZ3VtZW50cyksIG1fYXJndW1lbnRzUmVnaXN0ZXIpOworICAgIAorICAgIHsKKyAgICAgICAg
UmVmUHRyPFJlZ2lzdGVySUQ+IHRlbXAgPSBuZXdUZW1wb3JhcnkoKTsKKyAgICAgICAgZm9yIChG
dW5jdGlvbkJvZHlOb2RlKiBmdW5jdGlvbkJvZHkgOiBtX2Z1bmN0aW9uc1RvSW5pdGlhbGl6ZSkg
eworICAgICAgICAgICAgZW1pdE5ld0Z1bmN0aW9uKHRlbXAuZ2V0KCksIGZ1bmN0aW9uQm9keSk7
CisgICAgICAgICAgICBpbml0aWFsaXplVmFyaWFibGUodmFyaWFibGUoZnVuY3Rpb25Cb2R5LT5p
ZGVudCgpKSwgdGVtcC5nZXQoKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgCiAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBtX2RlY29uc3RydWN0ZWRQYXJhbWV0ZXJzLnNpemUoKTsgaSsrKSB7
CiAgICAgICAgIGF1dG8mIGVudHJ5ID0gbV9kZWNvbnN0cnVjdGVkUGFyYW1ldGVyc1tpXTsKICAg
ICAgICAgZW50cnkuc2Vjb25kLT5iaW5kVmFsdWUoKnRoaXMsIGVudHJ5LmZpcnN0LmdldCgpKTsK
QEAgLTExNiwzOCArMTMwLDEzIEBAIFBhcnNlckVycm9yIEJ5dGVjb2RlR2VuZXJhdG9yOjpnZW5l
cmF0ZSgKICAgICBtX2NvZGVCbG9jay0+c2hyaW5rVG9GaXQoKTsKIAogICAgIGlmIChtX2NvZGVC
bG9jay0+c3ltYm9sVGFibGUoKSAmJiAhbV9jb2RlQmxvY2stPnZtKCktPnR5cGVQcm9maWxlcigp
KQotICAgICAgICBtX2NvZGVCbG9jay0+c2V0U3ltYm9sVGFibGUobV9jb2RlQmxvY2stPnN5bWJv
bFRhYmxlKCktPmNsb25lQ2FwdHVyZWROYW1lcygqbV9jb2RlQmxvY2stPnZtKCkpKTsKKyAgICAg
ICAgbV9jb2RlQmxvY2stPnNldFN5bWJvbFRhYmxlKG1fY29kZUJsb2NrLT5zeW1ib2xUYWJsZSgp
LT5jbG9uZUlnbm9yaW5nU3RhY2soKm1fY29kZUJsb2NrLT52bSgpKSk7CiAKICAgICBpZiAobV9l
eHByZXNzaW9uVG9vRGVlcCkKICAgICAgICAgcmV0dXJuIFBhcnNlckVycm9yKFBhcnNlckVycm9y
OjpPdXRPZk1lbW9yeSk7CiAgICAgcmV0dXJuIFBhcnNlckVycm9yKFBhcnNlckVycm9yOjpFcnJv
ck5vbmUpOwogfQogCi1SZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6YWRkVmFyKAotICAg
IGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBDb25zdGFudE1vZGUgY29uc3RhbnRNb2RlLCBXYXRj
aE1vZGUgd2F0Y2hNb2RlKQotewotICAgIEFTU0VSVChzdGF0aWNfY2FzdDxzaXplX3Q+KG1fY29k
ZUJsb2NrLT5tX251bVZhcnMpID09IG1fY2FsbGVlUmVnaXN0ZXJzLnNpemUoKSk7Ci0gICAgCi0g
ICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIoc3ltYm9sVGFibGUoKS5tX2xvY2spOwotICAg
IGludCBpbmRleCA9IHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKG1fY2FsbGVlUmVnaXN0ZXJzLnNp
emUoKSkub2Zmc2V0KCk7Ci0gICAgU3ltYm9sVGFibGVFbnRyeSBuZXdFbnRyeShpbmRleCwgY29u
c3RhbnRNb2RlID09IElzQ29uc3RhbnQgPyBSZWFkT25seSA6IDApOwotICAgIFN5bWJvbFRhYmxl
OjpNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBzeW1ib2xUYWJsZSgpLmFkZChsb2NrZXIsIGlkZW50
LmltcGwoKSwgbmV3RW50cnkpOwotCi0gICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAg
ICAgcmV0dXJuICZyZWdpc3RlckZvcihyZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmdldEluZGV4KCkp
OwotICAgIAotICAgIGlmICh3YXRjaE1vZGUgPT0gSXNXYXRjaGFibGUpIHsKLSAgICAgICAgd2hp
bGUgKG1fd2F0Y2hhYmxlVmFyaWFibGVzLnNpemUoKSA8IHN0YXRpY19jYXN0PHNpemVfdD4obV9j
b2RlQmxvY2stPm1fbnVtVmFycykpCi0gICAgICAgICAgICBtX3dhdGNoYWJsZVZhcmlhYmxlcy5h
cHBlbmQoSWRlbnRpZmllcigpKTsKLSAgICAgICAgbV93YXRjaGFibGVWYXJpYWJsZXMuYXBwZW5k
KGlkZW50KTsKLSAgICB9Ci0gICAgCi0gICAgUmVnaXN0ZXJJRCogcmVnSUQgPSBhZGRWYXIoKTsK
LSAgICBBU1NFUlQod2F0Y2hNb2RlID09IE5vdFdhdGNoYWJsZSB8fCBzdGF0aWNfY2FzdDxzaXpl
X3Q+KG1fY29kZUJsb2NrLT5tX251bVZhcnMpID09IG1fd2F0Y2hhYmxlVmFyaWFibGVzLnNpemUo
KSk7Ci0gICAgCi0gICAgcmV0dXJuIHJlZ0lEOwotfQotCiBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0
ZWNvZGVHZW5lcmF0b3IoVk0mIHZtLCBQcm9ncmFtTm9kZSogcHJvZ3JhbU5vZGUsIFVubGlua2Vk
UHJvZ3JhbUNvZGVCbG9jayogY29kZUJsb2NrLCBEZWJ1Z2dlck1vZGUgZGVidWdnZXJNb2RlLCBQ
cm9maWxlck1vZGUgcHJvZmlsZXJNb2RlKQogICAgIDogbV9zaG91bGRFbWl0RGVidWdIb29rcyhP
cHRpb25zOjpmb3JjZURlYnVnZ2VyQnl0ZWNvZGVHZW5lcmF0aW9uKCkgfHwgZGVidWdnZXJNb2Rl
ID09IERlYnVnZ2VyT24pCiAgICAgLCBtX3Nob3VsZEVtaXRQcm9maWxlSG9va3MoT3B0aW9uczo6
Zm9yY2VQcm9maWxlckJ5dGVjb2RlR2VuZXJhdGlvbigpIHx8IHByb2ZpbGVyTW9kZSA9PSBQcm9m
aWxlck9uKQpAQCAtMTg5LDcgKzE3OCw3IEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdl
bmVyYXRvcihWTSYKIHsKICAgICBpZiAobV9pc0J1aWx0aW5GdW5jdGlvbikKICAgICAgICAgbV9z
aG91bGRFbWl0RGVidWdIb29rcyA9IGZhbHNlOwotCisgICAgCiAgICAgbV9zeW1ib2xUYWJsZS0+
c2V0VXNlc05vblN0cmljdEV2YWwoY29kZUJsb2NrLT51c2VzRXZhbCgpICYmICFjb2RlQmxvY2st
PmlzU3RyaWN0TW9kZSgpKTsKICAgICBWZWN0b3I8SWRlbnRpZmllcj4gYm91bmRQYXJhbWV0ZXJQ
cm9wZXJ0aWVzOwogICAgIEZ1bmN0aW9uUGFyYW1ldGVycyYgcGFyYW1ldGVycyA9ICpmdW5jdGlv
bk5vZGUtPnBhcmFtZXRlcnMoKTsKQEAgLTIwMiwxMCArMTkxLDIwIEBAIEJ5dGVjb2RlR2VuZXJh
dG9yOjpCeXRlY29kZUdlbmVyYXRvcihWTSYKICAgICB9CiAgICAgbV9zeW1ib2xUYWJsZS0+c2V0
UGFyYW1ldGVyQ291bnRJbmNsdWRpbmdUaGlzKGZ1bmN0aW9uTm9kZS0+cGFyYW1ldGVycygpLT5z
aXplKCkgKyAxKTsKIAorICAgIGJvb2wgc2hvdWxkQ2FwdHVyZUFsbFRoZVRoaW5ncyA9IG1fc2hv
dWxkRW1pdERlYnVnSG9va3MgfHwgY29kZUJsb2NrLT51c2VzRXZhbCgpOworICAgIGF1dG8gY2Fw
dHVyZXMgPSBbJl0gKFN0cmluZ0ltcGwqIHVpZCkgLT4gYm9vbCB7CisgICAgICAgIHJldHVybiBz
aG91bGRDYXB0dXJlQWxsVGhlVGhpbmdzIHx8IGZ1bmN0aW9uTm9kZS0+Y2FwdHVyZXModWlkKTsK
KyAgICB9OworICAgIGF1dG8gdmFyS2luZCA9IFsmXSAoU3RyaW5nSW1wbCogdWlkKSAtPiBWYXJL
aW5kIHsKKyAgICAgICAgcmV0dXJuIGNhcHR1cmVzKHVpZCkgPyBTY29wZVZhcktpbmQgOiBTdGFj
a1ZhcktpbmQ7CisgICAgfQorCiAgICAgZW1pdE9wY29kZShvcF9lbnRlcik7CiAKICAgICBhbGxv
Y2F0ZUFuZEVtaXRTY29wZSgpOwogICAgIAorICAgIG1fY2FsbGVlUmVnaXN0ZXIuc2V0SW5kZXgo
SlNTdGFjazo6Q2FsbGVlKTsKKyAgICAKICAgICBpZiAoZnVuY3Rpb25OYW1lSXNJblNjb3BlKGZ1
bmN0aW9uTm9kZS0+aWRlbnQoKSwgZnVuY3Rpb25Ob2RlLT5mdW5jdGlvbk1vZGUoKSkKICAgICAg
ICAgJiYgZnVuY3Rpb25OYW1lU2NvcGVJc0R5bmFtaWMoY29kZUJsb2NrLT51c2VzRXZhbCgpLCBj
b2RlQmxvY2stPmlzU3RyaWN0TW9kZSgpKSkgewogICAgICAgICAvLyBXaGVuIHdlIGRvIHRoaXMs
IHdlIHNob3VsZCBtYWtlIG91ciBsb2NhbCBzY29wZSBzdGFjayBrbm93IGFib3V0IHRoZSBmdW5j
dGlvbiBuYW1lIHN5bWJvbApAQCAtMjE0LDkgKzIxMyw3IEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjpC
eXRlY29kZUdlbmVyYXRvcihWTSYKICAgICAgICAgLy8gQWxzbywgd2UgY291bGQgY3JlYXRlIHRo
ZSBzY29wZSBvbmNlIHBlciBKU0Z1bmN0aW9uIGluc3RhbmNlIHRoYXQgbmVlZHMgaXQuIFRoYXQg
d291bGRuJ3QKICAgICAgICAgLy8gYmUgYW55IG1vcmUgY29ycmVjdCwgYnV0IGl0IHdvdWxkIGJl
IG1vcmUgcGVyZm9ybWFudC4KICAgICAgICAgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNDE4ODcKLSAgICAgICAgUmVnaXN0ZXJJRCBjYWxsZWVSZWdp
c3RlcjsKLSAgICAgICAgY2FsbGVlUmVnaXN0ZXIuc2V0SW5kZXgoSlNTdGFjazo6Q2FsbGVlKTsK
LSAgICAgICAgZW1pdFB1c2hGdW5jdGlvbk5hbWVTY29wZShtX3Njb3BlUmVnaXN0ZXIsIGZ1bmN0
aW9uTm9kZS0+aWRlbnQoKSwgJmNhbGxlZVJlZ2lzdGVyLCBSZWFkT25seSB8IERvbnREZWxldGUp
OworICAgICAgICBlbWl0UHVzaEZ1bmN0aW9uTmFtZVNjb3BlKG1fc2NvcGVSZWdpc3RlciwgZnVu
Y3Rpb25Ob2RlLT5pZGVudCgpLCAmbV9jYWxsZWVSZWdpc3RlciwgUmVhZE9ubHkgfCBEb250RGVs
ZXRlKTsKICAgICB9CiAKICAgICBpZiAobV9jb2RlQmxvY2stPm5lZWRzRnVsbFNjb3BlQ2hhaW4o
KSB8fCBtX3Nob3VsZEVtaXREZWJ1Z0hvb2tzKSB7CkBAIC0yMjYsMTc5ICsyMjMsMjI1IEBAIEJ5
dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihWTSYKICAgICAgICAgaW5zdHJ1Y3Rp
b25zKCkuYXBwZW5kKG1fbGV4aWNhbEVudmlyb25tZW50UmVnaXN0ZXItPmluZGV4KCkpOwogICAg
ICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoc2NvcGVSZWdpc3RlcigpLT5pbmRleCgpKTsKICAg
ICB9Ci0gICAgUmVnaXN0ZXJJRCogbG9jYWxBcmd1bWVudHNSZWdpc3RlciA9IG51bGxwdHI7Ci0g
ICAgUmVnaXN0ZXJJRCogc2NyYXRjaCA9IGFkZFZhcigpOwotICAgIG1fc3ltYm9sVGFibGUtPnNl
dENhcHR1cmVTdGFydCh2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChtX2NvZGVCbG9jay0+bV9udW1W
YXJzKS5vZmZzZXQoKSk7Ci0KLSAgICBpZiAoZnVuY3Rpb25Ob2RlLT51c2VzQXJndW1lbnRzKCkg
fHwgY29kZUJsb2NrLT51c2VzRXZhbCgpKSB7IC8vIE1heSByZWlmeSBhcmd1bWVudHMgb2JqZWN0
LgotICAgICAgICBSZWdpc3RlcklEKiB1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIgPSBhZGRW
YXIoKTsgLy8gQW5vbnltb3VzLCBzbyBpdCBjYW4ndCBiZSBtb2RpZmllZCBieSB1c2VyIGNvZGUu
Ci0gICAgICAgIFJlZ2lzdGVySUQqIGFyZ3VtZW50c1JlZ2lzdGVyID0gYWRkVmFyKHByb3BlcnR5
TmFtZXMoKS5hcmd1bWVudHMsIElzVmFyaWFibGUsIE5vdFdhdGNoYWJsZSk7IC8vIENhbiBiZSBj
aGFuZ2VkIGJ5IGFzc2lnbmluZyB0byAnYXJndW1lbnRzJy4KLQotICAgICAgICBsb2NhbEFyZ3Vt
ZW50c1JlZ2lzdGVyID0gYXJndW1lbnRzUmVnaXN0ZXI7Ci0KLSAgICAgICAgLy8gV2UgY2FuIHNh
dmUgYSBsaXR0bGUgc3BhY2UgYnkgaGFyZC1jb2RpbmcgdGhlIGtub3dsZWRnZSB0aGF0IHRoZSB0
d28KLSAgICAgICAgLy8gJ2FyZ3VtZW50cycgdmFsdWVzIGFyZSBzdG9yZWQgaW4gY29uc2VjdXRp
dmUgcmVnaXN0ZXJzLCBhbmQgc3RvcmluZwotICAgICAgICAvLyBvbmx5IHRoZSBpbmRleCBvZiB0
aGUgYXNzaWduYWJsZSBvbmUuCi0gICAgICAgIGNvZGVCbG9jay0+c2V0QXJndW1lbnRzUmVnaXN0
ZXIoYXJndW1lbnRzUmVnaXN0ZXItPnZpcnR1YWxSZWdpc3RlcigpKTsKLSAgICAgICAgQVNTRVJU
X1VOVVNFRCh1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIsIHVubW9kaWZpZWRBcmd1bWVudHNS
ZWdpc3Rlci0+dmlydHVhbFJlZ2lzdGVyKCkgPT0gSlNDOjp1bm1vZGlmaWVkQXJndW1lbnRzUmVn
aXN0ZXIoY29kZUJsb2NrLT5hcmd1bWVudHNSZWdpc3RlcigpKSk7Ci0KLSAgICAgICAgZW1pdElu
aXRMYXp5UmVnaXN0ZXIoYXJndW1lbnRzUmVnaXN0ZXIpOwotICAgICAgICBlbWl0SW5pdExhenlS
ZWdpc3Rlcih1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIpOwotICAgICAgICAKLSAgICAgICAg
aWYgKHNob3VsZENyZWF0ZUFyZ3VtZW50c0VhZ2VybHkoKSB8fCBzaG91bGRUZWFyT2ZmQXJndW1l
bnRzRWFnZXJseSgpKSB7Ci0gICAgICAgICAgICBlbWl0T3Bjb2RlKG9wX2NyZWF0ZV9hcmd1bWVu
dHMpOwotICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGFyZ3VtZW50c1JlZ2lzdGVy
LT5pbmRleCgpKTsKLSAgICAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChtX2NvZGVCbG9j
ay0+YWN0aXZhdGlvblJlZ2lzdGVyKCkub2Zmc2V0KCkpOwotCi0gICAgICAgICAgICBpZiAobV9j
b2RlQmxvY2stPmhhc0FjdGl2YXRpb25SZWdpc3RlcigpKSB7Ci0gICAgICAgICAgICAgICAgUmVn
aXN0ZXJJRCogYXJndW1lbnRzUmVnaXN0ZXIgPSAmcmVnaXN0ZXJGb3IobV9jb2RlQmxvY2stPmFy
Z3VtZW50c1JlZ2lzdGVyKCkub2Zmc2V0KCkpOwotICAgICAgICAgICAgICAgIGluaXRpYWxpemVD
YXB0dXJlZFZhcmlhYmxlKGFyZ3VtZW50c1JlZ2lzdGVyLCBwcm9wZXJ0eU5hbWVzKCkuYXJndW1l
bnRzLCBhcmd1bWVudHNSZWdpc3Rlcik7Ci0gICAgICAgICAgICAgICAgUmVnaXN0ZXJJRCogdW5j
aGVja2VkQXJndW1lbnRzUmVnaXN0ZXIgPSAmcmVnaXN0ZXJGb3IoSlNDOjp1bm1vZGlmaWVkQXJn
dW1lbnRzUmVnaXN0ZXIobV9jb2RlQmxvY2stPmFyZ3VtZW50c1JlZ2lzdGVyKCkpLm9mZnNldCgp
KTsKLSAgICAgICAgICAgICAgICBpbml0aWFsaXplQ2FwdHVyZWRWYXJpYWJsZSh1bmNoZWNrZWRB
cmd1bWVudHNSZWdpc3RlciwgcHJvcGVydHlOYW1lcygpLmFyZ3VtZW50cywgdW5jaGVja2VkQXJn
dW1lbnRzUmVnaXN0ZXIpOwotICAgICAgICAgICAgICAgIGlmIChmdW5jdGlvbk5vZGUtPm1vZGlm
aWVzQXJndW1lbnRzKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgZW1pdE9wY29kZShvcF9tb3Yp
OwotICAgICAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYXJndW1lbnRzUmVn
aXN0ZXItPmluZGV4KCkpOwotICAgICAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBl
bmQoYWRkQ29uc3RhbnRWYWx1ZShqc1VuZGVmaW5lZCgpKS0+aW5kZXgoKSk7Ci0gICAgICAgICAg
ICAgICAgICAgIGVtaXRPcGNvZGUob3BfbW92KTsKLSAgICAgICAgICAgICAgICAgICAgaW5zdHJ1
Y3Rpb25zKCkuYXBwZW5kKHVuY2hlY2tlZEFyZ3VtZW50c1JlZ2lzdGVyLT5pbmRleCgpKTsKLSAg
ICAgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGFkZENvbnN0YW50VmFsdWUo
anNVbmRlZmluZWQoKSktPmluZGV4KCkpOwotICAgICAgICAgICAgICAgICAgICBsb2NhbEFyZ3Vt
ZW50c1JlZ2lzdGVyID0gbnVsbHB0cjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KKyAgICAKKyAgICAvLyBNYWtlIHN1cmUgdGhlIGNvZGUgYmxvY2sga25vd3Mg
YWJvdXQgYWxsIG9mIG91ciBwYXJhbWV0ZXJzLCBhbmQgbWFrZSBzdXJlIHRoYXQgcGFyYW1ldGVy
cworICAgIC8vIG5lZWRpbmcgZGVjb25zdHJ1Y3Rpb24gYXJlIG5vdGVkLgorICAgIG1fcGFyYW1l
dGVycy5ncm93KHBhcmFtZXRlcnMuc2l6ZSgpICsgMSk7IC8vIHJlc2VydmUgc3BhY2UgZm9yICJ0
aGlzIgorICAgIGluaXRpYWxpemVOZXh0UGFyYW1ldGVyKCk7IC8vIHRoaXMKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgcGFyYW1ldGVycy5zaXplKCk7ICsraSkgeworICAgICAgICBhdXRv
IHBhdHRlcm4gPSBwYXJhbWV0ZXJzLmF0KGkpOworICAgICAgICBSZWdpc3RlcklEKiByZWcgPSBp
bml0aWFsaXplTmV4dFBhcmFtZXRlcigpOworICAgICAgICBpZiAoIXBhdHRlcm4tPmlzQmluZGlu
Z05vZGUoKSkKKyAgICAgICAgICAgIG1fZGVjb25zdHJ1Y3RlZFBhcmFtZXRlcnMuYXBwZW5kKHN0
ZDo6bWFrZV9wYWlyKHJlZywgcGF0dGVybikpOwogICAgIH0KLQotICAgIGJvb2wgc2hvdWxkQ2Fw
dHVyZUFsbFRoZVRoaW5ncyA9IG1fc2hvdWxkRW1pdERlYnVnSG9va3MgfHwgY29kZUJsb2NrLT51
c2VzRXZhbCgpOwotCisgICAgCisgICAgLy8gRmlndXJlIG91dCBzb21lIGludGVyZXN0aW5nIGZh
Y3RzIGFib3V0IG91ciBhcmd1bWVudHMuCiAgICAgYm9vbCBjYXB0dXJlc0FueUFyZ3VtZW50QnlO
YW1lID0gZmFsc2U7Ci0gICAgVmVjdG9yPFJlZ2lzdGVySUQqLCAwLCBVbnNhZmVWZWN0b3JPdmVy
Zmxvdz4gY2FwdHVyZWRBcmd1bWVudHM7Ci0gICAgaWYgKGZ1bmN0aW9uTm9kZS0+aGFzQ2FwdHVy
ZWRWYXJpYWJsZXMoKSB8fCBzaG91bGRDYXB0dXJlQWxsVGhlVGhpbmdzKSB7CisgICAgaWYgKGZ1
bmN0aW9uTm9kZS0+aGFzQ2FwdHVyZWRWYXJpYWJsZXMoKSkgewogICAgICAgICBGdW5jdGlvblBh
cmFtZXRlcnMmIHBhcmFtZXRlcnMgPSAqZnVuY3Rpb25Ob2RlLT5wYXJhbWV0ZXJzKCk7Ci0gICAg
ICAgIGNhcHR1cmVkQXJndW1lbnRzLnJlc2l6ZShwYXJhbWV0ZXJzLnNpemUoKSk7CiAgICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcGFyYW1ldGVycy5zaXplKCk7ICsraSkgewotICAgICAg
ICAgICAgY2FwdHVyZWRBcmd1bWVudHNbaV0gPSAwOwogICAgICAgICAgICAgYXV0byBwYXR0ZXJu
ID0gcGFyYW1ldGVycy5hdChpKTsKICAgICAgICAgICAgIGlmICghcGF0dGVybi0+aXNCaW5kaW5n
Tm9kZSgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgY29uc3QgSWRl
bnRpZmllciYgaWRlbnQgPSBzdGF0aWNfY2FzdDxjb25zdCBCaW5kaW5nTm9kZSo+KHBhdHRlcm4p
LT5ib3VuZFByb3BlcnR5KCk7Ci0gICAgICAgICAgICBpZiAoIWZ1bmN0aW9uTm9kZS0+Y2FwdHVy
ZXMoaWRlbnQpICYmICFzaG91bGRDYXB0dXJlQWxsVGhlVGhpbmdzKQotICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICAgICAgY2FwdHVyZXNBbnlBcmd1bWVudEJ5TmFtZSA9IHRydWU7
Ci0gICAgICAgICAgICBjYXB0dXJlZEFyZ3VtZW50c1tpXSA9IGFkZFZhcihpZGVudCwgSXNWYXJp
YWJsZSwgSXNXYXRjaGFibGUpOworICAgICAgICAgICAgY2FwdHVyZXNBbnlBcmd1bWVudEJ5TmFt
ZSB8PSBjYXB0dXJlcyhpZGVudC5pbXBsKCkpOwogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYg
KGNhcHR1cmVzQW55QXJndW1lbnRCeU5hbWUgJiYgIXNob3VsZFRlYXJPZmZBcmd1bWVudHNFYWdl
cmx5KCkpIHsKLSAgICAgICAgc2l6ZV90IHBhcmFtZXRlckNvdW50ID0gbV9zeW1ib2xUYWJsZS0+
cGFyYW1ldGVyQ291bnQoKTsKLSAgICAgICAgYXV0byBzbG93QXJndW1lbnRzID0gc3RkOjptYWtl
X3VuaXF1ZTxTbG93QXJndW1lbnRbXT4ocGFyYW1ldGVyQ291bnQpOwotICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IHBhcmFtZXRlckNvdW50OyArK2kpIHsKLSAgICAgICAgICAgIGlmICgh
Y2FwdHVyZWRBcmd1bWVudHNbaV0pIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQoc2xvd0FyZ3Vt
ZW50c1tpXS5zdGF0dXMgPT0gU2xvd0FyZ3VtZW50OjpOb3JtYWwpOwotICAgICAgICAgICAgICAg
IHNsb3dBcmd1bWVudHNbaV0uaW5kZXggPSBDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0KGkpOwot
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgc2xv
d0FyZ3VtZW50c1tpXS5zdGF0dXMgPSBTbG93QXJndW1lbnQ6OkNhcHR1cmVkOwotICAgICAgICAg
ICAgc2xvd0FyZ3VtZW50c1tpXS5pbmRleCA9IGNhcHR1cmVkQXJndW1lbnRzW2ldLT5pbmRleCgp
OwotICAgICAgICB9Ci0gICAgICAgIG1fc3ltYm9sVGFibGUtPnNldFNsb3dBcmd1bWVudHMoV1RG
Ojptb3ZlKHNsb3dBcmd1bWVudHMpKTsKLSAgICB9Ci0KLSAgICBSZWdpc3RlcklEKiBjYWxsZWVS
ZWdpc3RlciA9IHJlc29sdmVDYWxsZWUoZnVuY3Rpb25Ob2RlKTsgLy8gTWF5IHB1c2ggdG8gdGhl
IHNjb3BlIGNoYWluIGFuZC9vciBhZGQgYSBjYXB0dXJlZCB2YXIuCi0KLSAgICBjb25zdCBEZWNs
YXJhdGlvblN0YWNrczo6RnVuY3Rpb25TdGFjayYgZnVuY3Rpb25TdGFjayA9IGZ1bmN0aW9uTm9k
ZS0+ZnVuY3Rpb25TdGFjaygpOwotICAgIGNvbnN0IERlY2xhcmF0aW9uU3RhY2tzOjpWYXJTdGFj
ayYgdmFyU3RhY2sgPSBmdW5jdGlvbk5vZGUtPnZhclN0YWNrKCk7Ci0gICAgSWRlbnRpZmllclNl
dCB0ZXN0OwotCi0gICAgLy8gQ2FwdHVyZWQgdmFyaWFibGVzIGFuZCBmdW5jdGlvbnMgZ28gZmly
c3Qgc28gdGhhdCBhY3RpdmF0aW9ucyBkb24ndCBoYXZlCi0gICAgLy8gdG8gc3RlcCBvdmVyIHRo
ZSBub24tY2FwdHVyZWQgbG9jYWxzIHRvIG1hcmsgdGhlbS4KLSAgICBpZiAoZnVuY3Rpb25Ob2Rl
LT5oYXNDYXB0dXJlZFZhcmlhYmxlcygpIHx8IHNob3VsZENhcHR1cmVBbGxUaGVUaGluZ3MpIHsK
LSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBib3VuZFBhcmFtZXRlclByb3BlcnRpZXMu
c2l6ZSgpOyBpKyspIHsKLSAgICAgICAgICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gYm91
bmRQYXJhbWV0ZXJQcm9wZXJ0aWVzW2ldOwotICAgICAgICAgICAgaWYgKGZ1bmN0aW9uTm9kZS0+
Y2FwdHVyZXMoaWRlbnQpIHx8IHNob3VsZENhcHR1cmVBbGxUaGVUaGluZ3MpCi0gICAgICAgICAg
ICAgICAgYWRkVmFyKGlkZW50LCBJc1ZhcmlhYmxlLCBJc1dhdGNoYWJsZSk7Ci0gICAgICAgIH0K
LSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmdW5jdGlvblN0YWNrLnNpemUoKTsgKytp
KSB7Ci0gICAgICAgICAgICBGdW5jdGlvbkJvZHlOb2RlKiBmdW5jdGlvbiA9IGZ1bmN0aW9uU3Rh
Y2tbaV07Ci0gICAgICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGZ1bmN0aW9uLT5p
ZGVudCgpOwotICAgICAgICAgICAgaWYgKGZ1bmN0aW9uTm9kZS0+Y2FwdHVyZXMoaWRlbnQpIHx8
IHNob3VsZENhcHR1cmVBbGxUaGVUaGluZ3MpIHsKLSAgICAgICAgICAgICAgICBtX2Z1bmN0aW9u
cy5hZGQoaWRlbnQuaW1wbCgpKTsKLSAgICAgICAgICAgICAgICBlbWl0TmV3RnVuY3Rpb24oc2Ny
YXRjaCwgZnVuY3Rpb24pOwotICAgICAgICAgICAgICAgIGluaXRpYWxpemVDYXB0dXJlZFZhcmlh
YmxlKGFkZFZhcihpZGVudCwgSXNWYXJpYWJsZSwgSXNXYXRjaGFibGUpLCBpZGVudCwgc2NyYXRj
aCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCB2YXJTdGFjay5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgY29uc3QgSWRlbnRpZmll
ciYgaWRlbnQgPSB2YXJTdGFja1tpXS5maXJzdDsKLSAgICAgICAgICAgIGlmIChmdW5jdGlvbk5v
ZGUtPmNhcHR1cmVzKGlkZW50KSB8fCBzaG91bGRDYXB0dXJlQWxsVGhlVGhpbmdzKQotICAgICAg
ICAgICAgICAgIGFkZFZhcihpZGVudCwgKHZhclN0YWNrW2ldLnNlY29uZCAmIERlY2xhcmF0aW9u
U3RhY2tzOjpJc0NvbnN0YW50KSA/IElzQ29uc3RhbnQgOiBJc1ZhcmlhYmxlLCBJc1dhdGNoYWJs
ZSk7Ci0gICAgICAgIH0KKyAgICBpZiAoY2FwdHVyZXNBbnlBcmd1bWVudEJ5TmFtZSkKKyAgICAg
ICAgQVNTRVJUKG1fbGV4aWNhbEVudmlyb25tZW50UmVnaXN0ZXIpOworICAgIAorICAgIC8vIE5l
ZWQgdG8ga25vdyB3aGF0IG91ciBmdW5jdGlvbnMgYXJlIGNhbGxlZC4gUGFyYW1ldGVycyBoYXZl
IHNvbWUgZ29vZnkgYmVoYXZpb3JzIHdoZW4gaXQKKyAgICAvLyBjb21lcyB0byBmdW5jdGlvbnMg
b2YgdGhlIHNhbWUgbmFtZS4KKyAgICBmb3IgKEZ1bmN0aW9uQm9keU5vZGUqIGZ1bmN0aW9uIDog
ZnVuY3Rpb25Ob2RlLT5mdW5jdGlvblN0YWNrKCkpCisgICAgICAgIG1fZnVuY3Rpb25zLmFkZChm
dW5jdGlvbi0+aWRlbnQoKS5pbXBsKCkpOworICAgIAorICAgIGJvb2wgbmVlZHNBcmd1bWVudHMg
PSBmdW5jdGlvbk5vZGUtPnVzZXNBcmd1bWVudHMoKSB8fCBjb2RlQmxvY2stPnVzZXNFdmFsKCk7
CisgICAgCisgICAgaWYgKG5lZWRzQXJndW1lbnRzKSB7CisgICAgICAgIC8vIENyZWF0ZSB0aGUg
YXJndW1lbnRzIG9iamVjdCBub3cuIFdlIG1heSBwdXQgdGhlIGFyZ3VtZW50cyBvYmplY3QgaW50
byB0aGUgYWN0aXZhdGlvbiBpZgorICAgICAgICAvLyBpdCBpcyBjYXB0dXJlZC4gRWl0aGVyIHdh
eSwgd2UgY3JlYXRlIHR3byBhcmd1bWVudHMgb2JqZWN0IHZhcmlhYmxlczogb25lIGlzIG91cgor
ICAgICAgICAvLyBwcml2YXRlIHZhcmlhYmxlIHRoYXQgaXMgaW1tdXRhYmxlLCBhbmQgYW5vdGhl
ciB0aGF0IGlzIHRoZSB1c2VyLXZpc2libGUgdmFyaWFibGUuIFRoZQorICAgICAgICAvLyBpbW11
dGFibGUgb25lIGlzIG9ubHkgdXNlZCBoZXJlLCBvciBkdXJpbmcgZm9ybWFsIHBhcmFtZXRlciBy
ZXNvbHV0aW9ucyBpZiB3ZSBvcHQgZm9yCisgICAgICAgIC8vIERpcmVjdEFyZ3VtZW50cy4KKyAg
ICAgICAgCisgICAgICAgIG1fYXJndW1lbnRzUmVnaXN0ZXIgPSBhZGRWYXIoKTsKKyAgICAgICAg
bV9hcmd1bWVudHNSZWdpc3Rlci0+cmVmKCk7CiAgICAgfQotCi0gICAgbV9zeW1ib2xUYWJsZS0+
c2V0Q2FwdHVyZUVuZCh2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChjb2RlQmxvY2stPm1fbnVtVmFy
cykub2Zmc2V0KCkpOwotCi0gICAgYm9vbCBjYW5MYXppbHlDcmVhdGVGdW5jdGlvbnMgPSAhZnVu
Y3Rpb25Ob2RlLT5uZWVkc0FjdGl2YXRpb25Gb3JNb3JlVGhhblZhcmlhYmxlcygpICYmICFtX3No
b3VsZEVtaXREZWJ1Z0hvb2tzICYmICFtX3ZtLT50eXBlUHJvZmlsZXIoKSAmJiAhbV92bS0+Y29u
dHJvbEZsb3dQcm9maWxlcigpOwotICAgIG1fZmlyc3RMYXp5RnVuY3Rpb24gPSBjb2RlQmxvY2st
Pm1fbnVtVmFyczsKLSAgICBpZiAoIXNob3VsZENhcHR1cmVBbGxUaGVUaGluZ3MpIHsKLSAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmdW5jdGlvblN0YWNrLnNpemUoKTsgKytpKSB7Ci0g
ICAgICAgICAgICBGdW5jdGlvbkJvZHlOb2RlKiBmdW5jdGlvbiA9IGZ1bmN0aW9uU3RhY2tbaV07
Ci0gICAgICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGZ1bmN0aW9uLT5pZGVudCgp
OwotICAgICAgICAgICAgaWYgKCFmdW5jdGlvbk5vZGUtPmNhcHR1cmVzKGlkZW50KSkgewotICAg
ICAgICAgICAgICAgIG1fZnVuY3Rpb25zLmFkZChpZGVudC5pbXBsKCkpOwotICAgICAgICAgICAg
ICAgIFJlZlB0cjxSZWdpc3RlcklEPiByZWcgPSBhZGRWYXIoaWRlbnQsIElzVmFyaWFibGUsIE5v
dFdhdGNoYWJsZSk7Ci0gICAgICAgICAgICAgICAgLy8gRG9uJ3QgbGF6aWx5IGNyZWF0ZSBmdW5j
dGlvbnMgdGhhdCBvdmVycmlkZSB0aGUgbmFtZSAnYXJndW1lbnRzJwotICAgICAgICAgICAgICAg
IC8vIGFzIHRoaXMgd291bGQgY29tcGxpY2F0ZSBsYXp5IGluc3RhbnRpYXRpb24gb2YgYWN0dWFs
IGFyZ3VtZW50cy4KLSAgICAgICAgICAgICAgICBpZiAoIWNhbkxhemlseUNyZWF0ZUZ1bmN0aW9u
cyB8fCBpZGVudCA9PSBwcm9wZXJ0eU5hbWVzKCkuYXJndW1lbnRzKQotICAgICAgICAgICAgICAg
ICAgICBlbWl0TmV3RnVuY3Rpb24ocmVnLmdldCgpLCBmdW5jdGlvbik7Ci0gICAgICAgICAgICAg
ICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGVtaXRJbml0TGF6eVJlZ2lzdGVyKHJlZy5n
ZXQoKSk7Ci0gICAgICAgICAgICAgICAgICAgIG1fbGF6eUZ1bmN0aW9ucy5zZXQocmVnLT52aXJ0
dWFsUmVnaXN0ZXIoKS50b0xvY2FsKCksIGZ1bmN0aW9uKTsKKyAgICAKKyAgICBpZiAobmVlZHNB
cmd1bWVudHMgJiYgIWNvZGVCbG9jay0+aXNTdHJpY3RNb2RlKCkpIHsKKyAgICAgICAgLy8gSWYg
d2UgY2FwdHVyZWQgYW55IGZvcm1hbCBwYXJhbWV0ZXIgYnkgbmFtZSwgdGhlbiB3ZSB1c2UgU2Nv
cGVkQXJndW1lbnRzLiBPdGhlcndpc2Ugd2UKKyAgICAgICAgLy8gdXNlIERpcmVjdEFyZ3VtZW50
cy4gV2l0aCBTY29wZWRBcmd1bWVudHMsIHdlIGxpZnQgYWxsIG9mIG91ciBhcmd1bWVudHMgaW50
byB0aGUKKyAgICAgICAgLy8gYWN0aXZhdGlvbi4KKyAgICAgICAgCisgICAgICAgIGlmIChjYXB0
dXJlc0FueUFyZ3VtZW50QnlOYW1lKSB7CisgICAgICAgICAgICBtX3N5bWJvbFRhYmxlLT5zZXRB
cmd1bWVudHNMZW5ndGgodm0sIHBhcmFtZXRlcnMuc2l6ZSgpKTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgLy8gRm9yIGVhY2ggcGFyYW1ldGVyLCB3ZSBoYXZlIHR3byBwb3NzaWJpbGl0aWVz
OgorICAgICAgICAgICAgLy8gRWl0aGVyIGl0J3MgYSBiaW5kaW5nIG5vZGUgd2l0aCBubyBmdW5j
dGlvbiBvdmVybGFwLCBpbiB3aGljaCBjYXNlIGl0IGdldHMgYSBuYW1lCisgICAgICAgICAgICAv
LyBpbiB0aGUgc3ltYm9sIHRhYmxlIC0gb3IgaXQganVzdCBnZXRzIHNwYWNlIHJlc2VydmVkIGlu
IHRoZSBzeW1ib2wgdGFibGUuIEVpdGhlcgorICAgICAgICAgICAgLy8gd2F5IHdlIGxpZnQgdGhl
IHZhbHVlIGludG8gdGhlIHNjb3BlLgorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHBhcmFtZXRlcnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBTY29wZU9mZnNl
dCBvZmZzZXQgPSBtX3N5bWJvbFRhYmxlLT50YWtlTmV4dFNjb3BlT2Zmc2V0KCk7CisgICAgICAg
ICAgICAgICAgaWYgKFN0cmluZ0ltcGwqIG5hbWUgPSB2aXNpYmxlTmFtZUZvclBhcmFtZXRlcihw
YXJhbWV0ZXJzLmF0KGkpKSkgeworICAgICAgICAgICAgICAgICAgICBTeW1ib2xUYWJsZUVudHJ5
IGVudHJ5KG9mZnNldCk7CisgICAgICAgICAgICAgICAgICAgIC8vIFN0b3JlcyB0byB0aGVzZSB2
YXJpYWJsZXMgdmlhIHRoZSBTY29wZWRBcmd1bWVudHMgb2JqZWN0IHdpbGwgbm90IGRvCisgICAg
ICAgICAgICAgICAgICAgIC8vIG5vdGlmeVdyaXRlKCksIHNpbmNlIHRoYXQgd291bGQgYmUgY3Vt
YmVyc29tZS4gQWxzbywgd2F0Y2hpbmcgZm9ybWFsCisgICAgICAgICAgICAgICAgICAgIC8vIHBh
cmFtZXRlcnMgd2hlbiAiYXJndW1lbnRzIiBpcyBpbiBwbGF5IGlzIHVubGlrZWx5IHRvIGJlIHN1
cGVyIHByb2ZpdGFibGUuCisgICAgICAgICAgICAgICAgICAgIC8vIFNvLCB3ZSBqdXN0IGRpc2Fi
bGUgaXQuCisgICAgICAgICAgICAgICAgICAgIGVudHJ5LmRpc2FibGVXYXRjaGluZygpOworICAg
ICAgICAgICAgICAgICAgICBtX3N5bWJvbFRhYmxlLT5zZXQobmFtZSwgb2Zmc2V0KTsKICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYWRkT3Bjb2RlKG9wX3B1dF90b19zY29wZSk7
CisgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKG1fbGV4aWNhbEVudmlyb25t
ZW50UmVnaXN0ZXItPmluZGV4KCkpOworICAgICAgICAgICAgICAgIGluc3RydWN0aW9ucygpLmFw
cGVuZChVSU5UX01BWCk7CisgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHZp
cnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDEgKyBpKS5vZmZzZXQoKSk7CisgICAgICAgICAgICAg
ICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKFJlc29sdmVNb2RlQW5kVHlwZShUaHJvd0lmTm90Rm91
bmQsIExvY2FsQ2xvc3VyZVZhcikpOworICAgICAgICAgICAgICAgIGluc3RydWN0aW9ucygpLmFw
cGVuZCgwKTsKKyAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQob2Zmc2V0Lm9m
ZnNldCgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gVGhp
cyBjcmVhdGVzIGEgc2NvcGVkIGFyZ3VtZW50cyBvYmplY3QgYW5kIGNvcGllcyB0aGUgb3ZlcmZs
b3cgYXJndW1lbnRzIGludG8gdGhlCisgICAgICAgICAgICAvLyBzY29wZS4gSXQncyB0aGUgZXF1
aXZhbGVudCBvZiBjYWxsaW5nIFNjb3BlZEFyZ3VtZW50czo6Y3JlYXRlQnlDb3B5aW5nKCkuCisg
ICAgICAgICAgICBlbWl0T3Bjb2RlKG9wX2NyZWF0ZV9zY29wZWRfYXJndW1lbnRzKTsKKyAgICAg
ICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChtX2FyZ3VtZW50c1JlZ2lzdGVyLT5pbmRleCgp
KTsKKyAgICAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChtX2xleGljYWxFbnZpcm9ubWVu
dFJlZ2lzdGVyLT5pbmRleCgpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIFdl
J3JlIGdvaW5nIHRvIHB1dCBhbGwgcGFyYW1ldGVycyBpbnRvIHRoZSBEaXJlY3RBcmd1bWVudHMg
b2JqZWN0LiBGaXJzdCBlbnN1cmUKKyAgICAgICAgICAgIC8vIHRoYXQgdGhlIHN5bWJvbCB0YWJs
ZSBrbm93cyB0aGF0IHRoaXMgaXMgaGFwcGVuaW5nLgorICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHBhcmFtZXRlcnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBp
ZiAoU3RyaW5nSW1wbCogbmFtZSA9IHZpc2libGVOYW1lRm9yUGFyYW1ldGVyKHBhcmFtZXRlcnMu
YXQoaSkpKQorICAgICAgICAgICAgICAgICAgICBtX3N5bWJvbFRhYmxlLT5zZXQobmFtZSwgQ2Fw
dHVyZWRBcmd1bWVudHNPZmZzZXQoaSkpOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgCisg
ICAgICAgICAgICBlbWl0T3Bjb2RlKG9wX2NyZWF0ZV9kaXJlY3RfYXJndW1lbnRzKTsKKyAgICAg
ICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChtX2FyZ3VtZW50c1JlZ2lzdGVyLT5pbmRleCgp
KTsKICAgICAgICAgfQotICAgICAgICBtX2xhc3RMYXp5RnVuY3Rpb24gPSBjYW5MYXppbHlDcmVh
dGVGdW5jdGlvbnMgPyBjb2RlQmxvY2stPm1fbnVtVmFycyA6IG1fZmlyc3RMYXp5RnVuY3Rpb247
Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYm91bmRQYXJhbWV0ZXJQcm9wZXJ0aWVz
LnNpemUoKTsgaSsrKSB7Ci0gICAgICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGJv
dW5kUGFyYW1ldGVyUHJvcGVydGllc1tpXTsKLSAgICAgICAgICAgIGlmICghZnVuY3Rpb25Ob2Rl
LT5jYXB0dXJlcyhpZGVudCkpCi0gICAgICAgICAgICAgICAgYWRkVmFyKGlkZW50LCBJc1Zhcmlh
YmxlLCBJc1dhdGNoYWJsZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gQ3JlYXRlIHRoZSBm
b3JtYWwgcGFyYW1ldGVycyB0aGUgbm9ybWFsIHdheS4gQW55IG9mIHRoZW0gY291bGQgYmUgY2Fw
dHVyZWQsIG9yIG5vdC4gSWYKKyAgICAgICAgLy8gY2FwdHVyZWQsIGxpZnQgdGhlbSBpbnRvIHRo
ZSBzY29wZS4KKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBhcmFtZXRlcnMuc2l6
ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIFN0cmluZ0ltcGwqIG5hbWUgPSB2aXNpYmxlTmFtZUZv
clBhcmFtZXRlcihwYXJhbWV0ZXJzLmF0KGkpKTsKKyAgICAgICAgICAgIGlmICghbmFtZSkKKyAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKCFj
YXB0dXJlcyhuYW1lKSkgeworICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIGVhc3kgY2Fz
ZSAtIGp1c3QgdGVsbCB0aGUgc3ltYm9sIHRhYmxlIGFib3V0IHRoZSBhcmd1bWVudC4gSXQgd2ls
bAorICAgICAgICAgICAgICAgIC8vIGJlIGFjY2Vzc2VkIGRpcmVjdGx5LgorICAgICAgICAgICAg
ICAgIG1fc3ltYm9sVGFibGUtPnNldChuYW1lLCB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgx
ICsgaSkpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgCisgICAgICAgICAgICBTY29wZU9mZnNldCBvZmZzZXQgPSBtX3N5bWJvbFRhYmxlLT50
YWtlTmV4dFNjb3BlT2Zmc2V0KCk7CisgICAgICAgICAgICBJZGVudGlmaWVyJiBpZGVudCA9Cisg
ICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Y29uc3QgQmluZGluZ05vZGUqPihwYXJhbWV0ZXJz
LmF0KGkpKS0+Ym91bmRQcm9wZXJ0eSgpOworICAgICAgICAgICAgbV9zeW1ib2xUYWJsZS0+c2V0
KG5hbWUsIG9mZnNldCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGFkZE9wY29kZShvcF9w
dXRfdG9fc2NvcGUpOworICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKG1fbGV4aWNh
bEVudmlyb25tZW50UmVnaXN0ZXItPmluZGV4KCkpOworICAgICAgICAgICAgaW5zdHJ1Y3Rpb25z
KCkuYXBwZW5kKGFkZENvbnN0YW50KGlkZW50KSk7CisgICAgICAgICAgICBpbnN0cnVjdGlvbnMo
KS5hcHBlbmQoJnJlZ2lzdGVyRm9yKHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDEgKyBpKSkp
OworICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKFJlc29sdmVNb2RlQW5kVHlwZShU
aHJvd0lmTm90Rm91bmQsIExvY2FsQ2xvc3VyZVZhcikpOworICAgICAgICAgICAgaW5zdHJ1Y3Rp
b25zKCkuYXBwZW5kKDApOworICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKG9mZnNl
dC5vZmZzZXQoKSk7CiAgICAgICAgIH0KLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2
YXJTdGFjay5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgY29uc3QgSWRlbnRpZmllciYgaWRl
bnQgPSB2YXJTdGFja1tpXS5maXJzdDsKLSAgICAgICAgICAgIGlmICghZnVuY3Rpb25Ob2RlLT5j
YXB0dXJlcyhpZGVudCkpCi0gICAgICAgICAgICAgICAgYWRkVmFyKGlkZW50LCAodmFyU3RhY2tb
aV0uc2Vjb25kICYgRGVjbGFyYXRpb25TdGFja3M6OklzQ29uc3RhbnQpID8gSXNDb25zdGFudCA6
IElzVmFyaWFibGUsIE5vdFdhdGNoYWJsZSk7CisgICAgfQorICAgIAorICAgIGlmIChuZWVkc0Fy
Z3VtZW50cyAmJiBjb2RlQmxvY2stPmlzU3RyaWN0TW9kZSgpKSB7CisgICAgICAgIC8vIEFsbG9j
YXRlIGFuIG91dC1vZi1iYW5kcyBhcmd1bWVudHMgb2JqZWN0LgorICAgICAgICBhZGRPcGNvZGUo
b3BfY3JlYXRlX291dF9vZl9iYW5kX2FyZ3VtZW50cyk7CisgICAgICAgIGluc3RydWN0aW9ucygp
LmFwcGVuZChtX2FyZ3VlbnRzUmVnaXN0ZXItPmluZGV4KCkpOworICAgIH0KKyAgICAKKyAgICAv
LyBOb3cgZGVjbGFyZSBhbGwgdmFyaWFibGVzLgorICAgIGZvciAoY29uc3QgSWRlbnRpZmllciYg
aWRlbnQgOiBib3VuZFBhcmFtZXRlclByb3BlcnRpZXMpCisgICAgICAgIGNyZWF0ZVZhcmlhYmxl
KGlkZW50LCB2YXJLaW5kKGlkZW50LmltcGwoKSksIElzVmFyaWFibGUpOworICAgIGZvciAoRnVu
Y3Rpb25Cb2R5Tm9kZSogZnVuY3Rpb24gOiBmdW5jdGlvbk5vZGUtPmZ1bmN0aW9uU3RhY2soKSkg
eworICAgICAgICBjcmVhdGVWYXJpYWJsZShkZW50LCB2YXJLaW5kKGlkZW50LmltcGwoKSksIElz
VmFyaWFibGUpOworICAgICAgICBtX2Z1bmN0aW9uc1RvSW5pdGlhbGl6ZS5hcHBlbmQoZnVuY3Rp
b24pOworICAgIH0KKyAgICBmb3IgKGF1dG8mIGVudHJ5IDogZnVuY3Rpb25Ob2RlLT52YXJTdGFj
aygpKSB7CisgICAgICAgIGNyZWF0ZVZhcmlhYmxlKAorICAgICAgICAgICAgZW50cnkuZmlyc3Qs
IHZhcktpbmQoZW50cnkuZmlyc3QuaW1wbCgpKSwKKyAgICAgICAgICAgIChlbnRyeS5zZWNvbmQg
JiBEZWNsYXJhdGlvblN0YWNrczo6SXNDb25zdGFudCkgPyBJc0NvbnN0YW50IDogSXNWYXJpYWJs
ZSk7CisgICAgfQorICAgIAorICAgIC8vIFRoZXJlIGFyZSBzb21lIHZhcmlhYmxlcyB0aGF0IG5l
ZWQgdG8gYmUgcHJlaW5pdGlhbGl6ZWQgdG8gc29tZXRoaW5nIG90aGVyIHRoYW4gVW5kZWZpbmVk
OgorICAgIC8vCisgICAgLy8gLSAiYXJndW1lbnRzIjogdW5sZXNzIGl0J3MgdXNlZCBhcyBhIGZ1
bmN0aW9uIG9yIHBhcmFtZXRlciwgdGhpcyBzaG91bGQgcmVmZXIgdG8gdGhlCisgICAgLy8gICBh
cmd1bWVudHMgb2JqZWN0LgorICAgIC8vCisgICAgLy8gLSBjYWxsZWU6IHVubGVzcyBpdCdzIHVz
ZWQgYXMgYSB2YXIsIGZ1bmN0aW9uLCBvciBwYXJhbWV0ZXIsIHRoaXMgc2hvdWxkIHJlZmVyIHRv
IHRoZQorICAgIC8vICAgY2FsbGVlIChpLmUuIG91ciBmdW5jdGlvbikuCisgICAgLy8KKyAgICAv
LyAtIGZ1bmN0aW9uczogdGhlc2UgYWx3YXlzIG92ZXJyaWRlIGV2ZXJ5dGhpbmcgZWxzZS4KKyAg
ICAvLworICAgIC8vIFRoZSBtb3N0IGxvZ2ljYWwgd2F5IHRvIGRvIGFsbCBvZiB0aGlzIGlzIHRv
IGluaXRpYWxpemUgbm9uZSBvZiB0aGUgdmFyaWFibGVzIHVudGlsIG5vdywKKyAgICAvLyBhbmQg
dGhlbiBpbml0aWFsaXplIHRoZW0gaW4gQnl0ZWNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlKCkgaW4g
c3VjaCBhbiBvcmRlciB0aGF0IHRoZSBydWxlcworICAgIC8vIGZvciBob3cgdGhlc2UgdGhpbmdz
IG92ZXJyaWRlIGVhY2ggb3RoZXIgZW5kIHVwIGhvbGRpbmcuIFdlIHdvdWxkIGluaXRpYWxpemUg
dGhlIGNhbGxlZQorICAgIC8vIGZpcnN0LCB0aGVuICJhcmd1bWVudHMiLCB0aGVuIGFsbCBhcmd1
bWVudHMsIHRoZW4gdGhlIGZ1bmN0aW9ucy4KKyAgICAvLworICAgIC8vIEJ1dCBzb21lIGFyZ3Vt
ZW50cyBhcmUgYWxyZWFkeSBpbml0aWFsaXplZCBieSBkZWZhdWx0LCBzaW5jZSBpZiB0aGV5IGFy
ZW4ndCBjYXB0dXJlZCBhbmQgd2UKKyAgICAvLyBkb24ndCBoYXZlICJhcmd1bWVudHMiIHRoZW4g
d2UganVzdCBwb2ludCB0aGUgc3ltYm9sIHRhYmxlIGF0IHRoZSBzdGFjayBzbG90IG9mIHRob3Nl
CisgICAgLy8gYXJndW1lbnRzLiBXZSBlbmQgdXAgaW5pdGlhbGl6aW5nIHRoZSByZXN0IG9mIHRo
ZSBhcmd1bWVudHMgdGhhdCBoYXZlIGFuIHVuY29tcGxpY2F0ZWQKKyAgICAvLyBiaW5kaW5nIChp
LmUuIGRvbid0IGludm9sdmUgZGVjb25zdHJ1Y3Rpb24pIGFib3ZlIHdoZW4gZmlndXJpbmcgb3V0
IGhvdyB0byBsYXkgdGhlbSBvdXQsCisgICAgLy8gYmVjYXVzZSB0aGF0J3MganVzdCB0aGUgc2lt
cGxlc3QgdGhpbmcuIFRoaXMgbWVhbnMgdGhhdCB3aGVuIHdlIGluaXRpYWxpemUgdGhlbSwgd2Ug
aGF2ZSB0bworICAgIC8vIHdhdGNoIG91dCBmb3IgdGhlIHRoaW5ncyB0aGF0IG92ZXJyaWRlIGFy
Z3VtZW50cyAobmFtZWx5LCBmdW5jdGlvbnMpLgorICAgIC8vCisgICAgLy8gV2UgYWxzbyBpbml0
aWFsaXplIGNhbGxlZSBoZXJlIGFzIHdlbGwsIGp1c3QgYmVjYXVzZSBpdCdzIHNvIHdlaXJkLiBX
ZSBrbm93IHdoZXRoZXIgd2Ugd2FudAorICAgIC8vIHRvIGRvIHRoaXMgYmVjYXVzZSB3ZSBjYW4g
anVzdCBjaGVjayBpZiBpdCdzIGluIHRoZSBzeW1ib2wgdGFibGUuCisgICAgaWYgKGZ1bmN0aW9u
TmFtZUlzSW5TY29wZShmdW5jdGlvbk5vZGUtPmlkZW50KCksIGZ1bmN0aW9uTm9kZS0+ZnVuY3Rp
b25Nb2RlKCkpCisgICAgICAgICYmICFmdW5jdGlvbk5hbWVTY29wZUlzRHluYW1pYyhjb2RlQmxv
Y2stPnVzZXNFdmFsKCksIGNvZGVCbG9jay0+aXNTdHJpY3RNb2RlKCkpCisgICAgICAgICYmIG1f
c3ltYm9sVGFibGUtPmdldChmdW5jdGlvbk5vZGUtPmlkZW50KCkpLmlzTnVsbCgpKSB7CisgICAg
ICAgIGlmIChjYXB0dXJlcyhmdW5jdGlvbk5vZGUtPmlkZW50KCkuaW1wbCgpKSkgeworICAgICAg
ICAgICAgU2NvcGVPZmZzZXQgb2Zmc2V0ID0gbV9zeW1ib2xUYWJsZS0+dGFrZU5leHRTY29wZU9m
ZnNldCgpOworICAgICAgICAgICAgbV9zeW1ib2xUYWJsZS0+YWRkKAorICAgICAgICAgICAgICAg
IGZ1bmN0aW9uTm9kZS0+aWRlbnQoKS5pbXBsKCksCisgICAgICAgICAgICAgICAgU3ltYm9sVGFi
bGVFbnRyeShWYXJPZmZzZXQob2Zmc2V0KSwgUmVhZE9ubHkpKTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgYWRkT3Bjb2RlKG9wX3B1dF90b19zY29wZSk7CisgICAgICAgICAgICBpbnN0cnVj
dGlvbnMoKS5hcHBlbmQobV9sZXhpY2FsRW52aXJvbm1lbnRSZWdpc3Rlci0+aW5kZXgoKSk7Cisg
ICAgICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYWRkQ29uc3RhbnQoZnVuY3Rpb25Ob2Rl
LT5pZGVudCgpKSk7CisgICAgICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQobV9jYWxsZWVS
ZWdpc3Rlci5pbmRleCgpKTsKKyAgICAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChSZXNv
bHZlTW9kZUFuZFR5cGUoVGhyb3dJZk5vdEZvdW5kLCBMb2NhbENsb3N1cmVWYXIpKTsKKyAgICAg
ICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCgwKTsKKyAgICAgICAgICAgIGluc3RydWN0aW9u
cygpLmFwcGVuZChvZmZzZXQub2Zmc2V0KCkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgbV9zeW1ib2xUYWJsZS0+YWRkKAorICAgICAgICAgICAgICAgIGZ1bmN0aW9uTm9kZS0+aWRl
bnQoKS5pbXBsKCksCisgICAgICAgICAgICAgICAgU3ltYm9sVGFibGVFbnRyeShWYXJPZmZzZXQo
bV9jYWxsZWVSZWdpc3Rlci52aXJ0dWFsUmVnaXN0ZXIoKSksIFJlYWRPbmx5KSk7CiAgICAgICAg
IH0KICAgICB9Ci0KLSAgICBpZiAobV9zeW1ib2xUYWJsZS0+Y2FwdHVyZUNvdW50KCkpCi0gICAg
ICAgIGVtaXRPcGNvZGUob3BfdG91Y2hfZW50cnkpOwogICAgIAotICAgIG1fcGFyYW1ldGVycy5n
cm93KHBhcmFtZXRlcnMuc2l6ZSgpICsgMSk7IC8vIHJlc2VydmUgc3BhY2UgZm9yICJ0aGlzIgot
Ci0gICAgLy8gQWRkICJ0aGlzIiBhcyBhIHBhcmFtZXRlcgotICAgIGludCBuZXh0UGFyYW1ldGVy
SW5kZXggPSBDYWxsRnJhbWU6OnRoaXNBcmd1bWVudE9mZnNldCgpOwotICAgIG1fdGhpc1JlZ2lz
dGVyLnNldEluZGV4KG5leHRQYXJhbWV0ZXJJbmRleCsrKTsKLSAgICBtX2NvZGVCbG9jay0+YWRk
UGFyYW1ldGVyKCk7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBhcmFtZXRlcnMuc2l6
ZSgpOyArK2ksICsrbmV4dFBhcmFtZXRlckluZGV4KSB7Ci0gICAgICAgIGludCBpbmRleCA9IG5l
eHRQYXJhbWV0ZXJJbmRleDsKLSAgICAgICAgYXV0byBwYXR0ZXJuID0gcGFyYW1ldGVycy5hdChp
KTsKLSAgICAgICAgaWYgKCFwYXR0ZXJuLT5pc0JpbmRpbmdOb2RlKCkpIHsKLSAgICAgICAgICAg
IG1fY29kZUJsb2NrLT5hZGRQYXJhbWV0ZXIoKTsKLSAgICAgICAgICAgIFJlZ2lzdGVySUQmIHBh
cmFtZXRlciA9IHJlZ2lzdGVyRm9yKGluZGV4KTsKLSAgICAgICAgICAgIHBhcmFtZXRlci5zZXRJ
bmRleChpbmRleCk7Ci0gICAgICAgICAgICBtX2RlY29uc3RydWN0ZWRQYXJhbWV0ZXJzLmFwcGVu
ZChzdGQ6Om1ha2VfcGFpcigmcGFyYW1ldGVyLCBwYXR0ZXJuKSk7Ci0gICAgICAgICAgICBjb250
aW51ZTsKKyAgICAvLyBUaGlzIGlzIG91ciBmaW5hbCBhY3Qgb2Ygd2VpcmRuZXNzLiAiYXJndW1l
bnRzIiBpcyBvdmVycmlkZGVuIGJ5IGV2ZXJ5dGhpbmcgZXhjZXB0IHRoZQorICAgIC8vIGNhbGxl
ZS4gV2UgYWRkIGl0IHRvIHRoZSBzeW1ib2wgdGFibGUgaWYgaXQncyBub3QgYWxyZWFkeSB0aGVy
ZSBhbmQgaXQncyBub3QgYW4gYXJndW1lbnQuCisgICAgaWYgKG5lZWRzQXJndW1lbnRzKSB7Cisg
ICAgICAgIC8vIElmICJhcmd1bWVudHMiIGlzIG92ZXJyaWRkZW4gYnkgYSBmdW5jdGlvbiBvciBk
ZWNvbnN0cnVjdGVkIHBhcmFtZXRlciBuYW1lLCB0aGVuIGl0J3MKKyAgICAgICAgLy8gT0sgZm9y
IHVzIHRvIGNhbGwgY3JlYXRlVmFyaWFibGUoKSBiZWNhdXNlIGl0IHdvbid0IGNoYW5nZSBhbnl0
aGluZy4gSXQncyBhbHNvIE9LIGZvcgorICAgICAgICAvLyB1cyB0byB0aGVtIHRlbGwgQnl0ZWNv
ZGVHZW5lcmF0b3I6OmdlbmVyYXRlKCkgdG8gd3JpdGUgdG8gaXQgYmVjYXVzZSBpdCB3aWxsIGRv
IHNvCisgICAgICAgIC8vIGJlZm9yZSBpdCBpbml0aWFsaXplcyBmdW5jdGlvbnMgYW5kIGRlY29u
c3RydWN0ZWQgcGFyYW1ldGVycy4gQnV0IGlmICJhcmd1bWVudHMiIGlzCisgICAgICAgIC8vIG92
ZXJyaWRkZW4gYnkgYSAic2ltcGxlIiBmdW5jdGlvbiBwYXJhbWV0ZXIsIHRoZW4gd2UgaGF2ZSB0
byBiYWlsOiBjcmVhdGVWYXJpYWJsZSgpCisgICAgICAgIC8vIHdvdWxkIGFzc2VydCBhbmQgQnl0
ZWNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlKCkgd291bGQgd3JpdGUgdGhlICJhcmd1bWVudHMiIGFm
dGVyIHRoZQorICAgICAgICAvLyBhcmd1bWVudCB2YWx1ZSBoYWQgYWxyZWFkeSBiZWVuIHByb3Bl
cmx5IGluaXRpYWxpemVkLgorICAgICAgICAKKyAgICAgICAgYm9vbCBoYXZlUGFyYW1ldGVyTmFt
ZWRBcmd1bWVudHMgPSBmYWxzZTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBh
cmFtZXRlcnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIFN0cmluZ0ltcGwqIG5hbWUgPSB2
aXNpYmxlTmFtZUZvclBhcmFtZXRlcihwYXJhbWV0ZXJzLmF0KGkpKTsKKyAgICAgICAgICAgIGlm
IChuYW1lID09IHByb3BlcnR5TmFtZXMoKS5hcmd1bWVudHMuaW1wbCgpKSB7CisgICAgICAgICAg
ICAgICAgaGF2ZVBhcmFtZXRlck5hbWVkQXJndW1lbnRzID0gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBhdXRvIHNpbXBsZVBh
cmFtZXRlciA9IHN0YXRpY19jYXN0PGNvbnN0IEJpbmRpbmdOb2RlKj4ocGF0dGVybik7Ci0gICAg
ICAgIGlmIChjYXB0dXJlZEFyZ3VtZW50cy5zaXplKCkgJiYgY2FwdHVyZWRBcmd1bWVudHNbaV0p
IHsKLSAgICAgICAgICAgIEFTU0VSVCgoZnVuY3Rpb25Ob2RlLT5oYXNDYXB0dXJlZFZhcmlhYmxl
cygpICYmIGZ1bmN0aW9uTm9kZS0+Y2FwdHVyZXMoc2ltcGxlUGFyYW1ldGVyLT5ib3VuZFByb3Bl
cnR5KCkpKSB8fCBzaG91bGRDYXB0dXJlQWxsVGhlVGhpbmdzKTsKLSAgICAgICAgICAgIGluZGV4
ID0gY2FwdHVyZWRBcmd1bWVudHNbaV0tPmluZGV4KCk7Ci0gICAgICAgICAgICBSZWdpc3RlcklE
IG9yaWdpbmFsKG5leHRQYXJhbWV0ZXJJbmRleCk7Ci0gICAgICAgICAgICBpbml0aWFsaXplQ2Fw
dHVyZWRWYXJpYWJsZShjYXB0dXJlZEFyZ3VtZW50c1tpXSwgc2ltcGxlUGFyYW1ldGVyLT5ib3Vu
ZFByb3BlcnR5KCksICZvcmlnaW5hbCk7CisgICAgICAgIAorICAgICAgICBpZiAoIWhhdmVQYXJh
bWV0ZXJOYW1lZEFyZ3VtZW50cykgeworICAgICAgICAgICAgY3JlYXRlVmFyaWFibGUoCisgICAg
ICAgICAgICAgICAgcHJvcGVydHlOYW1lcygpLmFyZ3VtZW50cywgdmFyS2luZChwcm9wZXJ0eU5h
bWVzKCkuYXJndW1lbnRzLmltcGwoKSksIElzVmFyaWFibGUpOworICAgICAgICAgICAgbV9uZWVk
VG9Jbml0aWFsaXplQXJndW1lbnRzID0gdHJ1ZTsKICAgICAgICAgfQotICAgICAgICBhZGRQYXJh
bWV0ZXIoc2ltcGxlUGFyYW1ldGVyLT5ib3VuZFByb3BlcnR5KCksIGluZGV4KTsKICAgICB9Ci0K
LSAgICAvLyBXZSBkZWNsYXJlIHRoZSBjYWxsZWUncyBuYW1lIGxhc3QgYmVjYXVzZSBpdCBzaG91
bGQgbG9zZSB0byBhIHZhciwgZnVuY3Rpb24sIGFuZC9vciBwYXJhbWV0ZXIgZGVjbGFyYXRpb24u
Ci0gICAgYWRkQ2FsbGVlKGZ1bmN0aW9uTm9kZSwgY2FsbGVlUmVnaXN0ZXIpOworICAgIAorICAg
IGlmIChtX3N5bWJvbFRhYmxlLT5zY29wZVNpemUoKSkKKyAgICAgICAgZW1pdE9wY29kZShvcF90
b3VjaF9lbnRyeSk7CiAKICAgICBpZiAoaXNDb25zdHJ1Y3RvcigpKSB7CiAgICAgICAgIGVtaXRD
cmVhdGVUaGlzKCZtX3RoaXNSZWdpc3Rlcik7CkBAIC00MDksNyArNDUyLDYgQEAgQnl0ZWNvZGVH
ZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFZNJgogICAgICAgICBpbnN0cnVjdGlvbnMoKS5h
cHBlbmQoMCk7CiAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCgwKTsKICAgICB9Ci0gICAg
bV9sb2NhbEFyZ3VtZW50c1JlZ2lzdGVyID0gbG9jYWxBcmd1bWVudHNSZWdpc3RlcjsKIH0KIAog
Qnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFZNJiB2bSwgRXZhbE5vZGUqIGV2
YWxOb2RlLCBVbmxpbmtlZEV2YWxDb2RlQmxvY2sqIGNvZGVCbG9jaywgRGVidWdnZXJNb2RlIGRl
YnVnZ2VyTW9kZSwgUHJvZmlsZXJNb2RlIHByb2ZpbGVyTW9kZSkKQEAgLTQ0OCwxMDggKzQ5MCwy
MiBAQCBCeXRlY29kZUdlbmVyYXRvcjo6fkJ5dGVjb2RlR2VuZXJhdG9yKCkKIHsKIH0KIAotUmVn
aXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRJbml0TGF6eVJlZ2lzdGVyKFJlZ2lzdGVy
SUQqIHJlZykKK1JlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjppbml0aWFsaXplTmV4dFBh
cmFtZXRlcigpCiB7Ci0gICAgZW1pdE9wY29kZShvcF9pbml0X2xhenlfcmVnKTsKLSAgICBpbnN0
cnVjdGlvbnMoKS5hcHBlbmQocmVnLT5pbmRleCgpKTsKLSAgICBBU1NFUlQoIWhhc1dhdGNoYWJs
ZVZhcmlhYmxlKHJlZy0+aW5kZXgoKSkpOwotICAgIHJldHVybiByZWc7Ci19Ci0KLVJlZ2lzdGVy
SUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjppbml0aWFsaXplQ2FwdHVyZWRWYXJpYWJsZShSZWdpc3Rl
cklEKiBkc3QsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgUmVnaXN0ZXJJRCogdmFs
dWUpCi17Ci0KLSAgICBtX2NvZGVCbG9jay0+YWRkUHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbihp
bnN0cnVjdGlvbnMoKS5zaXplKCkpOwotICAgIGVtaXRPcGNvZGUob3BfcHV0X3RvX3Njb3BlKTsK
LSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQobV9sZXhpY2FsRW52aXJvbm1lbnRSZWdpc3Rlci0+
aW5kZXgoKSk7Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGFkZENvbnN0YW50KHByb3BlcnR5
TmFtZSkpOwotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCh2YWx1ZS0+aW5kZXgoKSk7Ci0gICAg
aW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKFJlc29sdmVNb2RlQW5kVHlwZShUaHJvd0lmTm90Rm91bmQs
IExvY2FsQ2xvc3VyZVZhcikub3BlcmFuZCgpKTsKLSAgICBpbnQgb3BlcmFuZCA9IHJlZ2lzdGVy
Rm9yKGRzdC0+aW5kZXgoKSkuaW5kZXgoKTsKLSAgICBib29sIGlzV2F0Y2hhYmxlVmFyaWFibGUg
PSBoYXNXYXRjaGFibGVWYXJpYWJsZShvcGVyYW5kKTsKLSAgICBBU1NFUlQoIWlzV2F0Y2hhYmxl
VmFyaWFibGUgfHwgd2F0Y2hhYmxlVmFyaWFibGVJZGVudGlmaWVyKG9wZXJhbmQpID09IHByb3Bl
cnR5TmFtZSk7Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGlzV2F0Y2hhYmxlVmFyaWFibGUp
OwotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChkc3QtPmluZGV4KCkpOwotICAgIHJldHVybiBk
c3Q7Ci19Ci0KLVJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjpyZXNvbHZlQ2FsbGVlKEZ1
bmN0aW9uTm9kZSogZnVuY3Rpb25Ob2RlKQotewotICAgIGlmICghZnVuY3Rpb25OYW1lSXNJblNj
b3BlKGZ1bmN0aW9uTm9kZS0+aWRlbnQoKSwgZnVuY3Rpb25Ob2RlLT5mdW5jdGlvbk1vZGUoKSkp
Ci0gICAgICAgIHJldHVybiAwOwotCi0gICAgaWYgKGZ1bmN0aW9uTmFtZVNjb3BlSXNEeW5hbWlj
KG1fY29kZUJsb2NrLT51c2VzRXZhbCgpLCBtX2NvZGVCbG9jay0+aXNTdHJpY3RNb2RlKCkpKQot
ICAgICAgICByZXR1cm4gMDsKLQotICAgIG1fY2FsbGVlUmVnaXN0ZXIuc2V0SW5kZXgoSlNTdGFj
azo6Q2FsbGVlKTsKLSAgICBpZiAoZnVuY3Rpb25Ob2RlLT5jYXB0dXJlcyhmdW5jdGlvbk5vZGUt
PmlkZW50KCkpKQotICAgICAgICByZXR1cm4gaW5pdGlhbGl6ZUNhcHR1cmVkVmFyaWFibGUoYWRk
VmFyKCksIGZ1bmN0aW9uTm9kZS0+aWRlbnQoKSwgJm1fY2FsbGVlUmVnaXN0ZXIpOwotCi0gICAg
cmV0dXJuICZtX2NhbGxlZVJlZ2lzdGVyOwotfQotCi12b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjph
ZGRDYWxsZWUoRnVuY3Rpb25Ob2RlKiBmdW5jdGlvbk5vZGUsIFJlZ2lzdGVySUQqIGNhbGxlZVJl
Z2lzdGVyKQotewotICAgIGlmICghY2FsbGVlUmVnaXN0ZXIpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIHN5bWJvbFRhYmxlKCkuYWRkKGZ1bmN0aW9uTm9kZS0+aWRlbnQoKS5pbXBsKCksIFN5bWJv
bFRhYmxlRW50cnkoY2FsbGVlUmVnaXN0ZXItPmluZGV4KCksIFJlYWRPbmx5KSk7Ci19Ci0KLXZv
aWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmFkZFBhcmFtZXRlcihjb25zdCBJZGVudGlmaWVyJiBpZGVu
dCwgaW50IHBhcmFtZXRlckluZGV4KQotewotICAgIC8vIFBhcmFtZXRlcnMgb3ZlcndyaXRlIHZh
ciBkZWNsYXJhdGlvbnMsIGJ1dCBub3QgZnVuY3Rpb24gZGVjbGFyYXRpb25zLgotICAgIFN0cmlu
Z0ltcGwqIHJlcCA9IGlkZW50LmltcGwoKTsKLSAgICBpZiAoIW1fZnVuY3Rpb25zLmNvbnRhaW5z
KHJlcCkpIHsKLSAgICAgICAgc3ltYm9sVGFibGUoKS5zZXQocmVwLCBwYXJhbWV0ZXJJbmRleCk7
Ci0gICAgICAgIFJlZ2lzdGVySUQmIHBhcmFtZXRlciA9IHJlZ2lzdGVyRm9yKHBhcmFtZXRlcklu
ZGV4KTsKLSAgICAgICAgcGFyYW1ldGVyLnNldEluZGV4KHBhcmFtZXRlckluZGV4KTsKLSAgICB9
Ci0KLSAgICAvLyBUbyBtYWludGFpbiB0aGUgY2FsbGluZyBjb252ZW50aW9uLCB3ZSBoYXZlIHRv
IGFsbG9jYXRlIHVuaXF1ZSBzcGFjZSBmb3IKLSAgICAvLyBlYWNoIHBhcmFtZXRlciwgZXZlbiBp
ZiB0aGUgcGFyYW1ldGVyIGRvZXNuJ3QgbWFrZSBpdCBpbnRvIHRoZSBzeW1ib2wgdGFibGUuCisg
ICAgVmlydHVhbFJlZ2lzdGVyIHJlZyA9IHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KG1fY29k
ZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkpOworICAgIFJlZ2lzdGVySUQmIHBhcmFtZXRlciA9IHJl
Z2lzdGVyRm9yKHJlZyk7CisgICAgcGFyYW1ldGVyLnNldEluZGV4KHJlZyk7CiAgICAgbV9jb2Rl
QmxvY2stPmFkZFBhcmFtZXRlcigpOwogfQogCi1ib29sIEJ5dGVjb2RlR2VuZXJhdG9yOjp3aWxs
UmVzb2x2ZVRvQXJndW1lbnRzUmVnaXN0ZXIoY29uc3QgSWRlbnRpZmllciYgaWRlbnQpCi17Ci0g
ICAgaWYgKGlkZW50ICE9IHByb3BlcnR5TmFtZXMoKS5hcmd1bWVudHMpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAKLSAgICBpZiAoIXNob3VsZE9wdGltaXplTG9jYWxzKCkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBTeW1ib2xUYWJsZUVudHJ5IGVudHJ5ID0gc3ltYm9s
VGFibGUoKS5nZXQoaWRlbnQuaW1wbCgpKTsKLSAgICBpZiAoZW50cnkuaXNOdWxsKCkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChtX2xvY2FsQXJndW1lbnRzUmVnaXN0ZXIgJiYg
aXNDYXB0dXJlZChtX2xvY2FsQXJndW1lbnRzUmVnaXN0ZXItPmluZGV4KCkpICYmIG1fbGV4aWNh
bEVudmlyb25tZW50UmVnaXN0ZXIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICht
X2NvZGVCbG9jay0+dXNlc0FyZ3VtZW50cygpICYmIG1fY29kZVR5cGUgPT0gRnVuY3Rpb25Db2Rl
ICYmIG1fbG9jYWxBcmd1bWVudHNSZWdpc3RlcikKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1SZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6
dW5jaGVja2VkTG9jYWxBcmd1bWVudHNSZWdpc3RlcigpCi17Ci0gICAgQVNTRVJUKHdpbGxSZXNv
bHZlVG9Bcmd1bWVudHNSZWdpc3Rlcihwcm9wZXJ0eU5hbWVzKCkuYXJndW1lbnRzKSk7Ci0gICAg
QVNTRVJUKG1fbG9jYWxBcmd1bWVudHNSZWdpc3Rlcik7Ci0gICAgcmV0dXJuIG1fbG9jYWxBcmd1
bWVudHNSZWdpc3RlcjsKLX0KLQotUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmNyZWF0
ZUxhenlSZWdpc3RlcklmTmVjZXNzYXJ5KFJlZ2lzdGVySUQqIHJlZykKK1N0cmluZ0ltcGwqIEJ5
dGVjb2RlR2VuZXJhdG9yOjp2aXNpYmxlTmFtZUZvclBhcmFtZXRlcihEZWNvbnN0cnVjdGlvblBh
dHRlcm5Ob2RlKiBwYXR0ZXJuKQogewotICAgIGlmICghcmVnLT52aXJ0dWFsUmVnaXN0ZXIoKS5p
c0xvY2FsKCkpCi0gICAgICAgIHJldHVybiByZWc7Ci0KLSAgICBpbnQgbG9jYWxWYXJpYWJsZU51
bWJlciA9IHJlZy0+dmlydHVhbFJlZ2lzdGVyKCkudG9Mb2NhbCgpOwotCi0gICAgaWYgKG1fbGFz
dExhenlGdW5jdGlvbiA8PSBsb2NhbFZhcmlhYmxlTnVtYmVyIHx8IGxvY2FsVmFyaWFibGVOdW1i
ZXIgPCBtX2ZpcnN0TGF6eUZ1bmN0aW9uKQotICAgICAgICByZXR1cm4gcmVnOwotICAgIGVtaXRM
YXp5TmV3RnVuY3Rpb24ocmVnLCBtX2xhenlGdW5jdGlvbnMuZ2V0KGxvY2FsVmFyaWFibGVOdW1i
ZXIpKTsKLSAgICByZXR1cm4gcmVnOworICAgIGlmIChwYXR0ZXJuLT5pc0JpbmRpbmdOb2RlKCkp
IHsKKyAgICAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBzdGF0aWNfY2FzdDxjb25zdCBC
aW5kaW5nTm9kZSo+KHBhdHRlcm4pLT5ib3VuZFByb3BlcnR5KCk7CisgICAgICAgIGlmICghbV9m
dW5jdGlvbnMuY29udGFpbnMoaWRlbnQuaW1wbCgpKSkKKyAgICAgICAgICAgIHJldHVybiBpZGVu
dC5pbXBsKCk7CisgICAgfQorICAgIHJldHVybiBudWxscHRyOwogfQogCiBSZWdpc3RlcklEKiBC
eXRlY29kZUdlbmVyYXRvcjo6bmV3UmVnaXN0ZXIoKQpAQCAtOTU0LDcgKzkxMCw3IEBAIGJvb2wg
Qnl0ZWNvZGVHZW5lcmF0b3I6Omhhc0NvbnN0YW50KGNvbnMKICAgICBTdHJpbmdJbXBsKiByZXAg
PSBpZGVudC5pbXBsKCk7CiAgICAgcmV0dXJuIG1faWRlbnRpZmllck1hcC5jb250YWlucyhyZXAp
OwogfQotICAgIAorCiB1bnNpZ25lZCBCeXRlY29kZUdlbmVyYXRvcjo6YWRkQ29uc3RhbnQoY29u
c3QgSWRlbnRpZmllciYgaWRlbnQpCiB7CiAgICAgU3RyaW5nSW1wbCogcmVwID0gaWRlbnQuaW1w
bCgpOwpAQCAtMTE5Miw0NiArMTE0OCw4NiBAQCBib29sIEJ5dGVjb2RlR2VuZXJhdG9yOjppc0Nh
cHR1cmVkKGludCBvCiAgICAgcmV0dXJuIG1fc3ltYm9sVGFibGUgJiYgbV9zeW1ib2xUYWJsZS0+
aXNDYXB0dXJlZChvcGVyYW5kKTsKIH0KIAotTG9jYWwgQnl0ZWNvZGVHZW5lcmF0b3I6OmxvY2Fs
KGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5KQorVmFyaWFibGUgQnl0ZWNvZGVHZW5lcmF0b3I6
OnZhcmlhYmxlKGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5KQogewotICAgIGlmIChwcm9wZXJ0
eSA9PSBwcm9wZXJ0eU5hbWVzKCkudGhpc0lkZW50aWZpZXIpCi0gICAgICAgIHJldHVybiBMb2Nh
bCh0aGlzUmVnaXN0ZXIoKSwgUmVhZE9ubHksIExvY2FsOjpTcGVjaWFsTG9jYWwpOwotICAgIGJv
b2wgaXNBcmd1bWVudHMgPSBwcm9wZXJ0eSA9PSBwcm9wZXJ0eU5hbWVzKCkuYXJndW1lbnRzOwot
ICAgIGlmIChpc0FyZ3VtZW50cykKLSAgICAgICAgY3JlYXRlQXJndW1lbnRzSWZOZWNlc3Nhcnko
KTsKLQorICAgIGlmIChwcm9wZXJ0eSA9PSBwcm9wZXJ0eU5hbWVzKCkudGhpc0lkZW50aWZpZXIp
IHsKKyAgICAgICAgcmV0dXJuIFZhcmlhYmxlKAorICAgICAgICAgICAgcHJvcGVydHksIFZhck9m
ZnNldCh0aGlzUmVnaXN0ZXIoKS0+dmlydHVhbFJlZ2lzdGVyKCkpLCB0aGlzUmVnaXN0ZXIoKSwK
KyAgICAgICAgICAgIFJlYWRPbmx5LCBMb2NhbDo6U3BlY2lhbExvY2FsKTsKKyAgICB9CisgICAg
CiAgICAgaWYgKCFzaG91bGRPcHRpbWl6ZUxvY2FscygpKQotICAgICAgICByZXR1cm4gTG9jYWwo
KTsKLQorICAgICAgICByZXR1cm4gVmFyaWFibGUocHJvcGVydHkpOworICAgIAogICAgIFN5bWJv
bFRhYmxlRW50cnkgZW50cnkgPSBzeW1ib2xUYWJsZSgpLmdldChwcm9wZXJ0eS5pbXBsKCkpOwog
ICAgIGlmIChlbnRyeS5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIExvY2FsKCk7Ci0KLQotICAg
IFJlZ2lzdGVySUQqIGxvY2FsID0gY3JlYXRlTGF6eVJlZ2lzdGVySWZOZWNlc3NhcnkoJnJlZ2lz
dGVyRm9yKGVudHJ5LmdldEluZGV4KCkpKTsKLQotICAgIGlmIChpc0NhcHR1cmVkKGxvY2FsLT5p
bmRleCgpKSAmJiBtX2xleGljYWxFbnZpcm9ubWVudFJlZ2lzdGVyKQotICAgICAgICByZXR1cm4g
TG9jYWwoKTsKLQotICAgIHJldHVybiBMb2NhbChsb2NhbCwgZW50cnkuZ2V0QXR0cmlidXRlcygp
LCBpc0FyZ3VtZW50cyA/IExvY2FsOjpTcGVjaWFsTG9jYWwgOiBMb2NhbDo6Tm9ybWFsTG9jYWwp
OworICAgICAgICByZXR1cm4gVmFyaWFibGUocHJvcGVydHkpOworICAgIAorICAgIFZhck9mZnNl
dCBvZmZzZXQgPSBlbnRyeS52YXJPZmZzZXQoKTsKKyAgICAKKyAgICBpZiAob2Zmc2V0LmlzU2Nv
cGUoKSAmJiBtX2xvY2FsU2NvcGVEZXB0aCkgeworICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxk
IGJlIGFibGUgdG8gc3RhdGljYWxseSByZXNvbHZlIHRocm91Z2ggb3VyIGxvY2FsIHNjb3Blcy4K
KyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MTg4
NQorICAgICAgICByZXR1cm4gVmFyaWFibGUocHJvcGVydHkpOworICAgIH0KKyAgICAKKyAgICBS
ZWdpc3RlcklEKiBsb2NhbDsKKyAgICBpZiAob2Zmc2V0LmlzU3RhY2soKSkKKyAgICAgICAgbG9j
YWwgPSAmcmVnaXN0ZXJGb3Iob2Zmc2V0LnN0YWNrT2Zmc2V0KCkub2Zmc2V0KCkpOworICAgIGVs
c2UKKyAgICAgICAgbG9jYWwgPSBudWxscHRyOworICAgIAorICAgIHJldHVybiBWYXJpYWJsZShw
cm9wZXJ0eSwgdmFyT2Zmc2V0LCBsb2NhbCwgZW50cnkuZ2V0QXR0cmlidXRlcygpLCBMb2NhbDo6
Tm9ybWFsTG9jYWwpOwogfQogCi1Mb2NhbCBCeXRlY29kZUdlbmVyYXRvcjo6Y29uc3RMb2NhbChj
b25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eSkKK1ZhcmlhYmxlIEJ5dGVjb2RlR2VuZXJhdG9yOjpo
YXNWYXJpYWJsZURpcmVjdChjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eSkKIHsKLSAgICBpZiAo
bV9jb2RlVHlwZSAhPSBGdW5jdGlvbkNvZGUpCi0gICAgICAgIHJldHVybiBMb2NhbCgpOworICAg
IEFTU0VSVChwcm9wZXJ0eSAhPSBwcm9wZXJ0eU5hbWVzKCkudGhpc0lkZW50aWZpZXIpOworICAg
IAorICAgIHJldHVybiAhc3ltYm9sVGFibGUoKS5nZXQocHJvcGVydHkuaW1wbCgpKS5pc051bGwo
KTsKK30KIAordm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6Y3JlYXRlVmFyaWFibGUoCisgICAgY29u
c3QgSWRlbnRpZmllciYgcHJvcGVydHksIFZhcktpbmQgdmFyS2luZCwgQ29uc3RhbnRNb2RlIGNv
bnN0YW50TW9kZSkKK3sKKyAgICBBU1NFUlQocHJvcGVydHkgIT0gcHJvcGVydHlOYW1lcygpLnRo
aXNJZGVudGlmaWVyKTsKKyAgICAKKyAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihzeW1i
b2xUYWJsZSgpLm1fbG9jayk7CiAgICAgU3ltYm9sVGFibGVFbnRyeSBlbnRyeSA9IHN5bWJvbFRh
YmxlKCkuZ2V0KHByb3BlcnR5LmltcGwoKSk7Ci0gICAgaWYgKGVudHJ5LmlzTnVsbCgpKQotICAg
ICAgICByZXR1cm4gTG9jYWwoKTsKLQotICAgIFJlZ2lzdGVySUQqIGxvY2FsID0gY3JlYXRlTGF6
eVJlZ2lzdGVySWZOZWNlc3NhcnkoJnJlZ2lzdGVyRm9yKGVudHJ5LmdldEluZGV4KCkpKTsKLQot
ICAgIGJvb2wgaXNBcmd1bWVudHMgPSBwcm9wZXJ0eSA9PSBwcm9wZXJ0eU5hbWVzKCkuYXJndW1l
bnRzOwotICAgIGlmIChpc0NhcHR1cmVkKGxvY2FsLT5pbmRleCgpKSAmJiBtX2xleGljYWxFbnZp
cm9ubWVudFJlZ2lzdGVyKQotICAgICAgICByZXR1cm4gTG9jYWwoKTsKKyAgICAKKyAgICBpZiAo
IWVudHJ5LmlzTnVsbCgpKSB7CisgICAgICAgIC8vIERvIHNvbWUgY2hlY2tzIHRvIGVuc3VyZSB0
aGF0IHRoZSB2YXJpYWJsZSB3ZSdyZSBiZWluZyBhc2tlZCB0byBjcmVhdGUgaXMgc3VmZmljaWVu
dGx5CisgICAgICAgIC8vIGNvbXBhdGlibGUgd2l0aCB0aGUgb25lIHdlIGhhdmUgYWxyZWFkeSBj
cmVhdGVkLgogCi0gICAgcmV0dXJuIExvY2FsKGxvY2FsLCBlbnRyeS5nZXRBdHRyaWJ1dGVzKCks
IGlzQXJndW1lbnRzID8gTG9jYWw6OlNwZWNpYWxMb2NhbCA6IExvY2FsOjpOb3JtYWxMb2NhbCk7
CisgICAgICAgIFZhck9mZnNldCBvZmZzZXQgPSBlbnRyeS52YXJPZmZzZXQoKTsKKyAgICAgICAg
CisgICAgICAgIC8vIFdlIGNhbid0IGNoYW5nZSBvdXIgbWluZHMgYWJvdXQgd2hldGhlciBpdCdz
IGNhcHR1cmVkLgorICAgICAgICBSRUxFQVNFX0FTU0VSVChvZmZzZXQua2luZCgpID09IHZhcktp
bmQpOworICAgICAgICAKKyAgICAgICAgLy8gSXQncyBmaW5lIHRvIGV4cGVjdCBhIHZhcmlhYmxl
IHRvIGJlIGNvbnN0YW50IGlmIGl0IHByZXZpb3VzbHkgd2Fzbid0LCBidXQgaXQncyBub3QKKyAg
ICAgICAgLy8gT0sgZm9yIGEgcHJldmlvdXNseSBjb25zdGFudCB2YXJpYWJsZSB0byBsYXRlciBi
ZSBleHBlY3RlZCB0byBiZSBub24tY29uc3RhbnQuIFRoaXMgYWxsCisgICAgICAgIC8vIHdvcmtz
IG91dCBiZWNhdXNlIGNvbnN0YW50cyBvbmx5IGNvbWUgaW50byBwbGF5IHdpdGggbG9jYWwgdmFy
aWFibGUgZGVjbGFyYXRpb25zLCBhbmQKKyAgICAgICAgLy8gdGhvc2UgYXJlIGFsd2F5cyBhZGRl
ZCBsYXN0LgorICAgICAgICBpZiAoY29uc3RhbnRNb2RlID09IElzVmFyaWFibGUpCisgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVCghZW50cnkuaXNSZWFkT25seSgpKTsKKyAgICAgICAgCisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgVmFyT2Zmc2V0IHZhck9mZnNldDsKKyAgICBp
ZiAodmFyS2luZCA9PSBTY29wZVZhcktpbmQpCisgICAgICAgIHZhck9mZnNldCA9IFZhck9mZnNl
dChzeW1ib2xUYWJsZSgpLnRha2VOZXh0U2NvcGVPZmZzZXQoKSk7CisgICAgZWxzZSB7CisgICAg
ICAgIEFTU0VSVCh2YXJLaW5kID09IFN0YWNrVmFyS2luZCk7CisgICAgICAgIHZhck9mZnNldCA9
IFZhck9mZnNldCh2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChtX2NhbGxlZVJlZ2lzdGVycy5zaXpl
KCkpKTsKKyAgICB9CisgICAgU3ltYm9sVGFibGVFbnRyeSBuZXdFbnRyeSh2YXJPZmZzZXQsIGNv
bnN0YW50TW9kZSA9PSBJc0NvbnN0YW50ID8gUmVhZE9ubHkgOiAwKTsKKyAgICBzeW1ib2xUYWJs
ZSgpLmFkZChsb2NrZXIsIGlkZW50LmltcGwoKSwgbmV3RW50cnkpOworICAgIAorICAgIGlmICh2
YXJLaW5kID09IFN0YWNrVmFyS2luZCkgeworICAgICAgICBSZWdpc3RlcklEKiBsb2NhbCA9IGFk
ZFZhcigpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChsb2NhbC0+aW5kZXgoKSA9PSB2YXJPZmZz
ZXQuc3RhY2tPZmZzZXQoKS5vZmZzZXQoKSk7CisgICAgfQogfQogCiB2b2lkIEJ5dGVjb2RlR2Vu
ZXJhdG9yOjplbWl0Q2hlY2tIYXNJbnN0YW5jZShSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQq
IHZhbHVlLCBSZWdpc3RlcklEKiBiYXNlLCBMYWJlbCogdGFyZ2V0KQpAQCAtMTI1NSw4OCArMTI1
MSwxMzkgQEAgUmVzb2x2ZVR5cGUgQnl0ZWNvZGVHZW5lcmF0b3I6OnJlc29sdmVUeQogICAgIHJl
dHVybiBHbG9iYWxQcm9wZXJ0eTsKIH0KIAotUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6
OmVtaXRSZXNvbHZlU2NvcGUoUmVnaXN0ZXJJRCogZHN0LCBjb25zdCBJZGVudGlmaWVyJiBpZGVu
dGlmaWVyLCBSZXNvbHZlU2NvcGVJbmZvJiBpbmZvKQorUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5l
cmF0b3I6OmVtaXRSZXNvbHZlU2NvcGUoUmVnaXN0ZXJJRCogZHN0LCBjb25zdCBWYXJpYWJsZSYg
dmFyaWFibGUpCiB7Ci0gICAgaWYgKG1fc3ltYm9sVGFibGUgJiYgbV9jb2RlVHlwZSA9PSBGdW5j
dGlvbkNvZGUgJiYgIW1fbG9jYWxTY29wZURlcHRoKSB7Ci0gICAgICAgIFN5bWJvbFRhYmxlRW50
cnkgZW50cnkgPSBtX3N5bWJvbFRhYmxlLT5nZXQoaWRlbnRpZmllci5pbXBsKCkpOwotICAgICAg
ICBpZiAoIWVudHJ5LmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICBpbmZvID0gUmVzb2x2ZVNjb3Bl
SW5mbyhlbnRyeS5nZXRJbmRleCgpKTsKLSAgICAgICAgICAgIHJldHVybiBzY29wZVJlZ2lzdGVy
KCk7Ci0gICAgICAgIH0KKyAgICBzd2l0Y2ggKHZhcmlhYmxlLnZhck9mZnNldCgpLmtpbmQoKSkg
eworICAgIGNhc2UgU3RhY2tPZmZzZXQ6CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAg
ICAKKyAgICBjYXNlIENhcHR1cmVkQXJndW1lbnRLaW5kOgorICAgICAgICByZXR1cm4gYXJndW1l
bnRzUmVnaXN0ZXIoKTsKKyAgICAgICAgCisgICAgY2FzZSBTY29wZU9mZnNldDoKKyAgICAgICAg
cmV0dXJuIHNjb3BlUmVnaXN0ZXIoKTsKKyAgICAgICAgCisgICAgY2FzZSBJbnZhbGlkVmFyS2lu
ZDoKKyAgICAgICAgLy8gSW5kaWNhdGVzIG5vbi1sb2NhbCByZXNvbHV0aW9uLgorICAgICAgICAK
KyAgICAgICAgQVNTRVJUKCFtX3N5bWJvbFRhYmxlIHx8ICFtX3N5bWJvbFRhYmxlLT5jb250YWlu
cyhpZGVudGlmaWVyLmltcGwoKSkgfHwgcmVzb2x2ZVR5cGUoKSA9PSBEeW5hbWljKTsKKyAgICAg
ICAgCisgICAgICAgIC8vIHJlc29sdmVfc2NvcGUgZHN0LCBpZCwgUmVzb2x2ZVR5cGUsIGRlcHRo
CisgICAgICAgIGVtaXRPcGNvZGUob3BfcmVzb2x2ZV9zY29wZSk7CisgICAgICAgIGluc3RydWN0
aW9ucygpLmFwcGVuZChraWxsKGRzdCkpOworICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQo
c2NvcGVSZWdpc3RlcigpLT5pbmRleCgpKTsKKyAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5k
KGFkZENvbnN0YW50KHZhcmlhYmxlLmlkZW50KCkpKTsKKyAgICAgICAgaW5zdHJ1Y3Rpb25zKCku
YXBwZW5kKHJlc29sdmVUeXBlKCkpOworICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoMCk7
CisgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCgwKTsKKyAgICAgICAgcmV0dXJuIGRzdDsK
ICAgICB9Ci0KLSAgICBBU1NFUlQoIW1fc3ltYm9sVGFibGUgfHwgIW1fc3ltYm9sVGFibGUtPmNv
bnRhaW5zKGlkZW50aWZpZXIuaW1wbCgpKSB8fCByZXNvbHZlVHlwZSgpID09IER5bmFtaWMpOwot
Ci0gICAgbV9jb2RlQmxvY2stPmFkZFByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb24oaW5zdHJ1Y3Rp
b25zKCkuc2l6ZSgpKTsKLQotICAgIC8vIHJlc29sdmVfc2NvcGUgZHN0LCBpZCwgUmVzb2x2ZVR5
cGUsIGRlcHRoCi0gICAgZW1pdE9wY29kZShvcF9yZXNvbHZlX3Njb3BlKTsKLSAgICBkc3QgPSB0
ZW1wRGVzdGluYXRpb24oZHN0KTsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoa2lsbChkc3Qp
KTsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoc2NvcGVSZWdpc3RlcigpLT5pbmRleCgpKTsK
LSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYWRkQ29uc3RhbnQoaWRlbnRpZmllcikpOwotICAg
IGluc3RydWN0aW9ucygpLmFwcGVuZChyZXNvbHZlVHlwZSgpKTsKLSAgICBpbnN0cnVjdGlvbnMo
KS5hcHBlbmQoMCk7Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKDApOwotICAgIHJldHVybiBk
c3Q7CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4g
bnVsbHB0cjsKIH0KIAotCi1SZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFJlc29s
dmVDb25zdGFudExvY2FsKFJlZ2lzdGVySUQqIGRzdCwgY29uc3QgSWRlbnRpZmllciYgaWRlbnRp
ZmllciwgUmVzb2x2ZVNjb3BlSW5mbyYgaW5mbykKK1JlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJh
dG9yOjplbWl0R2V0RnJvbVNjb3BlKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogc2NvcGUs
IGNvbnN0IFZhcmlhYmxlJiB2YXJpYWJsZSwgUmVzb2x2ZU1vZGUgcmVzb2x2ZU1vZGUpCiB7Ci0g
ICAgaWYgKCFtX3N5bWJvbFRhYmxlIHx8IG1fY29kZVR5cGUgIT0gRnVuY3Rpb25Db2RlKQotICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIFN5bWJvbFRhYmxlRW50cnkgZW50cnkgPSBtX3N5
bWJvbFRhYmxlLT5nZXQoaWRlbnRpZmllci5pbXBsKCkpOwotICAgIGlmIChlbnRyeS5pc051bGwo
KSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgaW5mbyA9IFJlc29sdmVTY29wZUluZm8o
ZW50cnkuZ2V0SW5kZXgoKSk7Ci0gICAgcmV0dXJuIGVtaXRNb3ZlKGRzdCwgbV9sZXhpY2FsRW52
aXJvbm1lbnRSZWdpc3Rlcik7Ci0KKyAgICBzd2l0Y2ggKHZhcmlhYmxlLnZhck9mZnNldCgpLmtp
bmQoKSkgeworICAgIGNhc2UgU3RhY2tPZmZzZXQ6CisgICAgICAgIHJldHVybiBlbWl0TW92ZShr
aWxsKGRzdCksIHZhcmlhYmxlLmxvY2FsKCkpOworICAgICAgICAKKyAgICBjYXNlIENhcHR1cmVk
QXJndW1lbnRzT2Zmc2V0OgorICAgICAgICBBU1NFUlQoc2NvcGUgPT0gYXJndW1lbnRzUmVnaXN0
ZXIoKSk7CisgICAgICAgIFVubGlua2VkVmFsdWVQcm9maWxlIHByb2ZpbGUgPSBlbWl0UHJvZmls
ZWRPcGNvZGUob3BfZ2V0X2Zyb21fYXJndW1lbnRzKTsKKyAgICAgICAgaW5zdHJ1Y3Rpb25zKCku
YXBwZW5kKGtpbGwoZHN0KSk7CisgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChzY29wZS0+
aW5kZXgoKSk7CisgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCh2YXJpYWJsZS52YXJPZmZz
ZXQoKS5jYXB0dXJlZEFyZ3VtZW50c09mZnNldCgpLm9mZnNldCgpKTsKKyAgICAgICAgaW5zdHJ1
Y3Rpb25zKCkuYXBwZW5kKHByb2ZpbGUpOworICAgICAgICByZXR1cm4gZHN0OworICAgICAgICAK
KyAgICBjYXNlIFNjb3BlT2Zmc2V0OgorICAgIGNhc2UgSW52YWxpZFZhcktpbmQ6CisgICAgICAg
IG1fY29kZUJsb2NrLT5hZGRQcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uKGluc3RydWN0aW9ucygp
LnNpemUoKSk7CisgICAgICAgIAorICAgICAgICAvLyBnZXRfZnJvbV9zY29wZSBkc3QsIHNjb3Bl
LCBpZCwgUmVzb2x2ZU1vZGVBbmRUeXBlLCBTdHJ1Y3R1cmUsIE9wZXJhbmQKKyAgICAgICAgVW5s
aW5rZWRWYWx1ZVByb2ZpbGUgcHJvZmlsZSA9IGVtaXRQcm9maWxlZE9wY29kZShvcF9nZXRfZnJv
bV9zY29wZSk7CisgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChraWxsKGRzdCkpOworICAg
ICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoc2NvcGUtPmluZGV4KCkpOworICAgICAgICBpbnN0
cnVjdGlvbnMoKS5hcHBlbmQoYWRkQ29uc3RhbnQodmFyaWFibGUuaWRlbnRpZmllcigpKSk7Cisg
ICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChSZXNvbHZlTW9kZUFuZFR5cGUocmVzb2x2ZU1v
ZGUsIHZhcmlhYmxlLnZhck9mZnNldCgpLmlzU2NvcGUoKSA/IExvY2FsQ2xvc3VyZVZhciA6IHJl
c29sdmVUeXBlKCkpLm9wZXJhbmQoKSk7CisgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCgw
KTsKKyAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHZhcmlhYmxlLnZhck9mZnNldCgpLmlz
U2NvcGUoKSA/IHZhcmlhYmxlLnZhck9mZnNldCgpLnNjb3BlT2Zmc2V0KCkub2Zmc2V0KCkgOiAw
KTsKKyAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHByb2ZpbGUpOworICAgICAgICByZXR1
cm4gZHN0OworICAgIH0KKyAgICAKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
fQogCi1SZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEdldEZyb21TY29wZShSZWdp
c3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHNjb3BlLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudGlm
aWVyLCBSZXNvbHZlTW9kZSByZXNvbHZlTW9kZSwgY29uc3QgUmVzb2x2ZVNjb3BlSW5mbyYgaW5m
bykKK1JlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0UHV0VG9TY29wZShSZWdpc3Rl
cklEKiBzY29wZSwgY29uc3QgVmFyaWFibGUmIHZhcmlhYmxlLCBSZWdpc3RlcklEKiB2YWx1ZSwg
UmVzb2x2ZU1vZGUgcmVzb2x2ZU1vZGUpCiB7Ci0gICAgbV9jb2RlQmxvY2stPmFkZFByb3BlcnR5
QWNjZXNzSW5zdHJ1Y3Rpb24oaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKTsKLQotICAgIC8vIGdldF9m
cm9tX3Njb3BlIGRzdCwgc2NvcGUsIGlkLCBSZXNvbHZlTW9kZUFuZFR5cGUsIFN0cnVjdHVyZSwg
T3BlcmFuZAotICAgIFVubGlua2VkVmFsdWVQcm9maWxlIHByb2ZpbGUgPSBlbWl0UHJvZmlsZWRP
cGNvZGUob3BfZ2V0X2Zyb21fc2NvcGUpOwotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChraWxs
KGRzdCkpOwotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChzY29wZS0+aW5kZXgoKSk7Ci0gICAg
aW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGFkZENvbnN0YW50KGlkZW50aWZpZXIpKTsKLSAgICBpbnN0
cnVjdGlvbnMoKS5hcHBlbmQoUmVzb2x2ZU1vZGVBbmRUeXBlKHJlc29sdmVNb2RlLCBpbmZvLmlz
TG9jYWwoKSA/IExvY2FsQ2xvc3VyZVZhciA6IHJlc29sdmVUeXBlKCkpLm9wZXJhbmQoKSk7Ci0g
ICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKDApOwotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChp
bmZvLmxvY2FsSW5kZXgoKSk7Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHByb2ZpbGUpOwot
ICAgIHJldHVybiBkc3Q7CisgICAgc3dpdGNoICh2YXJpYWJsZS52YXJPZmZzZXQoKS5raW5kKCkp
IHsKKyAgICBjYXNlIFN0YWNrT2Zmc2V0OgorICAgICAgICBlbWl0TW92ZSh2YXJpYWJsZS5sb2Nh
bCgpLCB2YWx1ZSk7CisgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICAgICAgCisgICAgY2FzZSBD
YXB0dXJlZEFyZ3VtZW50c09mZnNldDoKKyAgICAgICAgQVNTRVJUKHNjb3BlID09IGFyZ3VtZW50
c1JlZ2lzdGVyKCkpOworICAgICAgICBlbWl0T3Bjb2RlKG9wX3B1dF90b19hcmd1bWVudHMpOwor
ICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoc2NvcGUpOworICAgICAgICBpbnN0cnVjdGlv
bnMoKS5hcHBlbmQodmFyaWFibGUudmFyT2Zmc2V0KCkuY2FwdHVyZWRBcmd1bWVudHNPZmZzZXQo
KS5vZmZzZXQoKSk7CisgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCh2YWx1ZS0+aW5kZXgo
KSk7CisgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICAgICAgCisgICAgY2FzZSBTY29wZU9mZnNl
dDoKKyAgICBjYXNlIEludmFsaWRWYXJLaW5kOiB7CisgICAgICAgIG1fY29kZUJsb2NrLT5hZGRQ
cm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uKGluc3RydWN0aW9ucygpLnNpemUoKSk7CisgICAgICAg
IAorICAgICAgICAvLyBwdXRfdG9fc2NvcGUgc2NvcGUsIGlkLCB2YWx1ZSwgUmVzb2x2ZU1vZGVB
bmRUeXBlLCBTdHJ1Y3R1cmUsIE9wZXJhbmQKKyAgICAgICAgZW1pdE9wY29kZShvcF9wdXRfdG9f
c2NvcGUpOworICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoc2NvcGUtPmluZGV4KCkpOwor
ICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYWRkQ29uc3RhbnQodmFyaWFibGUuaWRlbnQo
KSkpOworICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQodmFsdWUtPmluZGV4KCkpOworICAg
ICAgICBTY29wZU9mZnNldCBvZmZzZXQ7CisgICAgICAgIGlmICh2YXJpYWJsZS52YXJPZmZzZXQo
KS5pc1Njb3BlKCkpIHsKKyAgICAgICAgICAgIG9mZnNldCA9IHZhcmlhYmxlLnZhck9mZnNldCgp
LnNjb3BlT2Zmc2V0KCk7CisgICAgICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoUmVzb2x2
ZU1vZGVBbmRUeXBlKHJlc29sdmVNb2RlLCBMb2NhbENsb3N1cmVWYXIpLm9wZXJhbmQoKSk7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBBU1NFUlQocmVzb2x2ZVR5cGUoKSAhPSBMb2Nh
bENsb3N1cmVWYXIpOworICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKFJlc29sdmVN
b2RlQW5kVHlwZShyZXNvbHZlTW9kZSwgcmVzb2x2ZVR5cGUoKSkub3BlcmFuZCgpKTsKKyAgICAg
ICAgfQorICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoMCk7CisgICAgICAgIGluc3RydWN0
aW9ucygpLmFwcGVuZChvZmZzZXQuaXNWYWxpZCgpID8gb2Zmc2V0Lm9mZnNldCgpIDogMCk7Cisg
ICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICB9IH0KKyAgICAKKyAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogfQogCi1SZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFB1
dFRvU2NvcGUoUmVnaXN0ZXJJRCogc2NvcGUsIGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIs
IFJlZ2lzdGVySUQqIHZhbHVlLCBSZXNvbHZlTW9kZSByZXNvbHZlTW9kZSwgY29uc3QgUmVzb2x2
ZVNjb3BlSW5mbyYgaW5mbykKK1JlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjppbml0aWFs
aXplVmFyaWFibGUoY29uc3QgVmFyaWFibGUmIHZhcmlhYmxlLCBSZWdpc3RlcklEKiB2YWx1ZSkK
IHsKLSAgICBtX2NvZGVCbG9jay0+YWRkUHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbihpbnN0cnVj
dGlvbnMoKS5zaXplKCkpOwotCi0gICAgLy8gcHV0X3RvX3Njb3BlIHNjb3BlLCBpZCwgdmFsdWUs
IFJlc29sdmVNb2RlQW5kVHlwZSwgU3RydWN0dXJlLCBPcGVyYW5kCi0gICAgZW1pdE9wY29kZShv
cF9wdXRfdG9fc2NvcGUpOwotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChzY29wZS0+aW5kZXgo
KSk7Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGFkZENvbnN0YW50KGlkZW50aWZpZXIpKTsK
LSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQodmFsdWUtPmluZGV4KCkpOwotICAgIGlmIChpbmZv
LmlzTG9jYWwoKSkgewotICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoUmVzb2x2ZU1vZGVB
bmRUeXBlKHJlc29sdmVNb2RlLCBMb2NhbENsb3N1cmVWYXIpLm9wZXJhbmQoKSk7Ci0gICAgICAg
IGludCBvcGVyYW5kID0gcmVnaXN0ZXJGb3IoaW5mby5sb2NhbEluZGV4KCkpLmluZGV4KCk7Ci0g
ICAgICAgIGJvb2wgaXNXYXRjaGFibGVWYXJpYWJsZSA9IGhhc1dhdGNoYWJsZVZhcmlhYmxlKG9w
ZXJhbmQpOwotICAgICAgICBBU1NFUlQoIWlzV2F0Y2hhYmxlVmFyaWFibGUgfHwgd2F0Y2hhYmxl
VmFyaWFibGVJZGVudGlmaWVyKG9wZXJhbmQpID09IGlkZW50aWZpZXIpOwotICAgICAgICBpbnN0
cnVjdGlvbnMoKS5hcHBlbmQoaXNXYXRjaGFibGVWYXJpYWJsZSk7Ci0gICAgfSBlbHNlIHsKLSAg
ICAgICAgQVNTRVJUKHJlc29sdmVUeXBlKCkgIT0gTG9jYWxDbG9zdXJlVmFyKTsKLSAgICAgICAg
aW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKFJlc29sdmVNb2RlQW5kVHlwZShyZXNvbHZlTW9kZSwgcmVz
b2x2ZVR5cGUoKSkub3BlcmFuZCgpKTsKLSAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGZh
bHNlKTsKKyAgICBSZWdpc3RlcklEKiBzY29wZTsKKyAgICBzd2l0Y2ggKHZhcmlhYmxlLnZhck9m
ZnNldCgpLmtpbmQoKSkgeworICAgIGNhc2UgU3RhY2tPZmZzZXQ6CisgICAgICAgIHNjb3BlID0g
bnVsbHB0cjsKKyAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgIGNhc2UgQ2FwdHVyZWRBcmd1
bWVudEtpbmQ6CisgICAgICAgIHNjb3BlID0gYXJndW1lbnRzUmVnaXN0ZXIoKTsKKyAgICAgICAg
YnJlYWs7CisgICAgICAgIAorICAgIGNhc2UgU2NvcGVPZmZzZXQ6CisgICAgICAgIHNjb3BlID0g
c2NvcGVSZWdpc3RlcigpOworICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgZGVmYXVsdDoK
KyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgc2NvcGUgPSBu
dWxscHRyOworICAgICAgICBicmVhazsKICAgICB9Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5k
KGluZm8ubG9jYWxJbmRleCgpKTsKLSAgICByZXR1cm4gdmFsdWU7CisKKyAgICByZXR1cm4gZW1p
dFB1dFRvU2NvcGUoc2NvcGUsIHZhcmlhYmxlLCB2YWx1ZSwgVGhyb3dJZk5vdEZvdW5kKTsKIH0K
IAogUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRJbnN0YW5jZU9mKFJlZ2lzdGVy
SUQqIGRzdCwgUmVnaXN0ZXJJRCogdmFsdWUsIFJlZ2lzdGVySUQqIGJhc2VQcm90b3R5cGUpCi17
IAorewogICAgIGVtaXRPcGNvZGUob3BfaW5zdGFuY2VvZik7CiAgICAgaW5zdHJ1Y3Rpb25zKCku
YXBwZW5kKGRzdC0+aW5kZXgoKSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHZhbHVlLT5p
bmRleCgpKTsKQEAgLTE2MzgsMjQgKzE2ODUsMTUgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5l
cmF0b3I6OmVtaXROZXdBcgogCiBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdE5l
d0Z1bmN0aW9uKFJlZ2lzdGVySUQqIGRzdCwgRnVuY3Rpb25Cb2R5Tm9kZSogZnVuY3Rpb24pCiB7
Ci0gICAgcmV0dXJuIGVtaXROZXdGdW5jdGlvbkludGVybmFsKGRzdCwgbV9jb2RlQmxvY2stPmFk
ZEZ1bmN0aW9uRGVjbChtYWtlRnVuY3Rpb24oZnVuY3Rpb24pKSwgZmFsc2UpOwotfQotCi1SZWdp
c3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdExhenlOZXdGdW5jdGlvbihSZWdpc3RlcklE
KiBkc3QsIEZ1bmN0aW9uQm9keU5vZGUqIGZ1bmN0aW9uKQotewotICAgIEZ1bmN0aW9uT2Zmc2V0
TWFwOjpBZGRSZXN1bHQgcHRyID0gbV9mdW5jdGlvbk9mZnNldHMuYWRkKGZ1bmN0aW9uLCAwKTsK
LSAgICBpZiAocHRyLmlzTmV3RW50cnkpCi0gICAgICAgIHB0ci5pdGVyYXRvci0+dmFsdWUgPSBt
X2NvZGVCbG9jay0+YWRkRnVuY3Rpb25EZWNsKG1ha2VGdW5jdGlvbihmdW5jdGlvbikpOwotICAg
IHJldHVybiBlbWl0TmV3RnVuY3Rpb25JbnRlcm5hbChkc3QsIHB0ci5pdGVyYXRvci0+dmFsdWUs
IHRydWUpOworICAgIHJldHVybiBlbWl0TmV3RnVuY3Rpb25JbnRlcm5hbChkc3QsIG1fY29kZUJs
b2NrLT5hZGRGdW5jdGlvbkRlY2wobWFrZUZ1bmN0aW9uKGZ1bmN0aW9uKSkpOwogfQogCi1SZWdp
c3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdE5ld0Z1bmN0aW9uSW50ZXJuYWwoUmVnaXN0
ZXJJRCogZHN0LCB1bnNpZ25lZCBpbmRleCwgYm9vbCBkb051bGxDaGVjaykKK1JlZ2lzdGVySUQq
IEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TmV3RnVuY3Rpb25JbnRlcm5hbChSZWdpc3RlcklEKiBk
c3QsIHVuc2lnbmVkIGluZGV4KQogewogICAgIGVtaXRPcGNvZGUob3BfbmV3X2Z1bmMpOwogICAg
IGluc3RydWN0aW9ucygpLmFwcGVuZChkc3QtPmluZGV4KCkpOwogICAgIGluc3RydWN0aW9ucygp
LmFwcGVuZChzY29wZVJlZ2lzdGVyKCktPmluZGV4KCkpOwogICAgIGluc3RydWN0aW9ucygpLmFw
cGVuZChpbmRleCk7Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGRvTnVsbENoZWNrKTsKICAg
ICByZXR1cm4gZHN0OwogfQogCkBAIC0yNTA0LDkgKzI1NDIsOSBAQCB2b2lkIEJ5dGVjb2RlR2Vu
ZXJhdG9yOjpzZXRJc051bWVyaWNDb21wCiAKIGJvb2wgQnl0ZWNvZGVHZW5lcmF0b3I6OmlzQXJn
dW1lbnROdW1iZXIoY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIGludCBhcmd1bWVudE51bWJlcikK
IHsKLSAgICBSZWdpc3RlcklEKiByZWdpc3RlcklEID0gbG9jYWwoaWRlbnQpLmdldCgpOwotICAg
IGlmICghcmVnaXN0ZXJJRCB8fCByZWdpc3RlcklELT5pbmRleCgpID49IDApCi0gICAgICAgICBy
ZXR1cm4gMDsKKyAgICBSZWdpc3RlcklEKiByZWdpc3RlcklEID0gdmFyaWFibGUoaWRlbnQpLmxv
Y2FsKCk7CisgICAgaWYgKCFyZWdpc3RlcklEKQorICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IHJldHVybiByZWdpc3RlcklELT5pbmRleCgpID09IENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXQo
YXJndW1lbnROdW1iZXIpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
bXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCShyZXZpc2lvbiAxODA4NzUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9y
LmgJKHdvcmtpbmcgY29weSkKQEAgLTE4Myw1OCArMTgzLDU3IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICBJc0NhcHR1cmVkCiAgICAgfTsKIAotICAgIGNsYXNzIExvY2FsIHsKKyAgICBjbGFz
cyBWYXJpYWJsZSB7CiAgICAgcHVibGljOgotICAgICAgICBMb2NhbCgpCi0gICAgICAgICAgICA6
IG1fbG9jYWwoMCkKKyAgICAgICAgZW51bSBWYXJpYWJsZUtpbmQgeyBOb3JtYWxWYXJpYWJsZSwg
U3BlY2lhbFZhcmlhYmxlIH07CisKKyAgICAgICAgVmFyaWFibGUoKQorICAgICAgICAgICAgOiBt
X29mZnNldCgpCisgICAgICAgICAgICAsIG1fbG9jYWwobnVsbHB0cikKICAgICAgICAgICAgICwg
bV9hdHRyaWJ1dGVzKDApCi0gICAgICAgICAgICAsIG1fa2luZChOb3JtYWxMb2NhbCkKKyAgICAg
ICAgICAgICwgbV9raW5kKE5vcm1hbFZhcmlhYmxlKQorICAgICAgICB7CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIFZhcmlhYmxlKGNvbnN0IElkZW50aWZpZXImIGlkZW50KQorICAgICAg
ICAgICAgOiBtX2lkZW50KGlkZW50KQorICAgICAgICAgICAgLCBtX2xvY2FsKG51bGxwdHIpCisg
ICAgICAgICAgICAsIG1fYXR0cmlidXRlcygwKQorICAgICAgICAgICAgLCBtX2tpbmQoTm9ybWFs
VmFyaWFibGUpIC8vIFRoaXMgaXMgc29tZXdoYXQgbWVhbmluZ2xlc3MgaGVyZSBmb3IgdGhpcyBr
aW5kIG9mIFZhcmlhYmxlLgogICAgICAgICB7CiAgICAgICAgIH0KIAotICAgICAgICBlbnVtIExv
Y2FsS2luZCB7IE5vcm1hbExvY2FsLCBTcGVjaWFsTG9jYWwgfTsKLQotICAgICAgICBMb2NhbChS
ZWdpc3RlcklEKiBsb2NhbCwgdW5zaWduZWQgYXR0cmlidXRlcywgTG9jYWxLaW5kIGtpbmQpCi0g
ICAgICAgICAgICA6IG1fbG9jYWwobG9jYWwpCisgICAgICAgIFZhcmlhYmxlKGNvbnN0IElkZW50
aWZpZXImIGlkZW50LCBWYXJPZmZzZXQgb2Zmc2V0LCBSZWdpc3RlcklEKiBsb2NhbCwgdW5zaWdu
ZWQgYXR0cmlidXRlcywgTG9jYWxLaW5kIGtpbmQpCisgICAgICAgICAgICA6IG1faWRlbnQoaWRl
bnQpCisgICAgICAgICAgICAsIG1fb2Zmc2V0KG9mZnNldCkKKyAgICAgICAgICAgICwgbV9sb2Nh
bChsb2NhbCkKICAgICAgICAgICAgICwgbV9hdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpCiAgICAgICAg
ICAgICAsIG1fa2luZChraW5kKQogICAgICAgICB7CiAgICAgICAgIH0KIAotICAgICAgICBvcGVy
YXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gbV9sb2NhbDsgfQotCi0gICAgICAgIFJlZ2lzdGVy
SUQqIGdldCgpIGNvbnN0IHsgcmV0dXJuIG1fbG9jYWw7IH0KKyAgICAgICAgLy8gSWYgaXQncyB1
bnNldCwgdGhlbiBpdCBpcyBhIG5vbi1sb2NhbGx5LXNjb3BlZCB2YXJpYWJsZS4gSWYgaXQgaXMg
c2V0LCB0aGVuIGl0IGNvdWxkIGJlCisgICAgICAgIC8vIGEgc3RhY2sgdmFyaWFibGUsIGEgc2Nv
cGVkIHZhcmlhYmxlIGluIHRoZSBsb2NhbCBzY29wZSwgb3IgYSB2YXJpYWJsZSBjYXB0dXJlZCBp
biB0aGUKKyAgICAgICAgLy8gZGlyZWN0IGFyZ3VtZW50cyBvYmplY3QuCisgICAgICAgIGJvb2wg
aXNSZXNvbHZlZCgpIGNvbnN0IHsgcmV0dXJuICEhbV9vZmZzZXQ7IH0KKyAgICAgICAgCisgICAg
ICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50KCkgY29uc3QgeyByZXR1cm4gbV9pZGVudDsgfQor
ICAgICAgICAKKyAgICAgICAgVmFyT2Zmc2V0IG9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zm
c2V0OyB9CisgICAgICAgIGJvb2wgaXNMb2NhbCgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0Lmlz
U3RhY2soKTsgfQorICAgICAgICBSZWdpc3RlcklEKiBsb2NhbCgpIGNvbnN0IHsgcmV0dXJuIG1f
bG9jYWw7IH0KIAogICAgICAgICBib29sIGlzUmVhZE9ubHkoKSBjb25zdCB7IHJldHVybiBtX2F0
dHJpYnV0ZXMgJiBSZWFkT25seTsgfQotICAgICAgICBib29sIGlzU3BlY2lhbCgpIGNvbnN0IHsg
cmV0dXJuIG1fa2luZCAhPSBOb3JtYWxMb2NhbDsgfQorICAgICAgICBib29sIGlzU3BlY2lhbCgp
IGNvbnN0IHsgcmV0dXJuIG1fa2luZCAhPSBOb3JtYWxWYXJpYWJsZTsgfQogCiAgICAgcHJpdmF0
ZToKKyAgICAgICAgSWRlbnRpZmllciBtX2lkZW50OworICAgICAgICBWYXJPZmZldCBtX29mZnN0
OwogICAgICAgICBSZWdpc3RlcklEKiBtX2xvY2FsOwogICAgICAgICB1bnNpZ25lZCBtX2F0dHJp
YnV0ZXM7CiAgICAgICAgIExvY2FsS2luZCBtX2tpbmQ7CiAgICAgfTsKIAotICAgIHN0cnVjdCBS
ZXNvbHZlU2NvcGVJbmZvIHsKLSAgICAgICAgUmVzb2x2ZVNjb3BlSW5mbygpCi0gICAgICAgICAg
ICA6IG1fbG9jYWxJbmRleCgwKQotICAgICAgICAgICAgLCBtX3Jlc29sdmVTY29wZUtpbmQoTm9u
TG9jYWxTY29wZSkKLSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAgUmVzb2x2ZVNjb3Bl
SW5mbyhpbnQgaW5kZXgpCi0gICAgICAgICAgICA6IG1fbG9jYWxJbmRleChpbmRleCkKLSAgICAg
ICAgICAgICwgbV9yZXNvbHZlU2NvcGVLaW5kKExvY2FsU2NvcGUpCi0gICAgICAgIHsKLSAgICAg
ICAgfQotCi0gICAgICAgIGJvb2wgaXNMb2NhbCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzb2x2ZVNj
b3BlS2luZCA9PSBMb2NhbFNjb3BlOyB9Ci0gICAgICAgIGludCBsb2NhbEluZGV4KCkgY29uc3Qg
eyByZXR1cm4gbV9sb2NhbEluZGV4OyB9Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBpbnQgbV9s
b2NhbEluZGV4OwotICAgICAgICBlbnVtIHsgTG9jYWxTY29wZSwgTm9uTG9jYWxTY29wZSB9IG1f
cmVzb2x2ZVNjb3BlS2luZDsKLSAgICB9OwotCiAgICAgc3RydWN0IFRyeVJhbmdlIHsKICAgICAg
ICAgUmVmUHRyPExhYmVsPiBzdGFydDsKICAgICAgICAgUmVmUHRyPExhYmVsPiBlbmQ7CkBAIC0y
ODUsMTIgKzI4NCwxMiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgYm9vbCBpc0NhcHR1cmVk
KGludCBvcGVyYW5kKTsKICAgICAgICAgQ2FwdHVyZU1vZGUgY2FwdHVyZU1vZGUoaW50IG9wZXJh
bmQpIHsgcmV0dXJuIGlzQ2FwdHVyZWQob3BlcmFuZCkgPyBJc0NhcHR1cmVkIDogTm90Q2FwdHVy
ZWQ7IH0KICAgICAgICAgCi0gICAgICAgIExvY2FsIGxvY2FsKGNvbnN0IElkZW50aWZpZXImKTsK
LSAgICAgICAgTG9jYWwgY29uc3RMb2NhbChjb25zdCBJZGVudGlmaWVyJik7Ci0KKyAgICAgICAg
VmFyaWFibGUgdmFyaWFibGUoY29uc3QgSWRlbnRpZmllciYpOworICAgICAgICB2b2lkIGNyZWF0
ZVZhcmlhYmxlKGNvbnN0IElkZW50aWZpZXImLCBWYXJLaW5kLCBDb25zdGFudE1vZGUpOyAvLyBD
cmVhdGVzIHRoZSB2YXJpYWJsZSwgb3IgYXNzZXJ0cyB0aGF0IHRoZSBhbHJlYWR5LWNyZWF0ZWQg
dmFyaWFibGUgaXMgc3VmZmljaWVudGx5IGNvbXBhdGlibGUuCisgICAgICAgIAogICAgICAgICAv
LyBSZXR1cm5zIHRoZSByZWdpc3RlciBzdG9yaW5nICJ0aGlzIgogICAgICAgICBSZWdpc3RlcklE
KiB0aGlzUmVnaXN0ZXIoKSB7IHJldHVybiAmbV90aGlzUmVnaXN0ZXI7IH0KLSAgICAgICAgCisg
ICAgICAgIFJlZ2lzdGVySUQqIGFyZ3VtZW50c1JlZ2lzdGVyKCkgeyByZXR1cm4gbV9hcmd1bWVu
dHNSZWdpc3RlcjsgfQogICAgICAgICBSZWdpc3RlcklEKiBzY29wZVJlZ2lzdGVyKCkgeyByZXR1
cm4gbV9zY29wZVJlZ2lzdGVyOyB9CiAKICAgICAgICAgLy8gUmV0dXJucyB0aGUgbmV4dCBhdmFp
bGFibGUgdGVtcG9yYXJ5IHJlZ2lzdGVyLiBSZWdpc3RlcnMgcmV0dXJuZWQgYnkKQEAgLTQ1Niw4
ICs0NTUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdE5ld0Fy
cmF5KFJlZ2lzdGVySUQqIGRzdCwgRWxlbWVudE5vZGUqLCB1bnNpZ25lZCBsZW5ndGgpOyAvLyBz
dG9wcyBhdCBmaXJzdCBlbGlzaW9uCiAKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdE5ld0Z1bmN0
aW9uKFJlZ2lzdGVySUQqIGRzdCwgRnVuY3Rpb25Cb2R5Tm9kZSopOwotICAgICAgICBSZWdpc3Rl
cklEKiBlbWl0TGF6eU5ld0Z1bmN0aW9uKFJlZ2lzdGVySUQqIGRzdCwgRnVuY3Rpb25Cb2R5Tm9k
ZSogYm9keSk7Ci0gICAgICAgIFJlZ2lzdGVySUQqIGVtaXROZXdGdW5jdGlvbkludGVybmFsKFJl
Z2lzdGVySUQqIGRzdCwgdW5zaWduZWQgaW5kZXgsIGJvb2wgc2hvdWxkTnVsbENoZWNrKTsKKyAg
ICAgICAgUmVnaXN0ZXJJRCogZW1pdE5ld0Z1bmN0aW9uSW50ZXJuYWwoUmVnaXN0ZXJJRCogZHN0
LCB1bnNpZ25lZCBpbmRleCk7CiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXROZXdGdW5jdGlvbkV4
cHJlc3Npb24oUmVnaXN0ZXJJRCogZHN0LCBGdW5jRXhwck5vZGUqIGZ1bmMpOwogICAgICAgICBS
ZWdpc3RlcklEKiBlbWl0TmV3UmVnRXhwKFJlZ2lzdGVySUQqIGRzdCwgUmVnRXhwKik7CiAKQEAg
LTQ3NSw3ICs0NzMsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgUmVnaXN0ZXJJRCogZW1p
dEluaXRHbG9iYWxDb25zdChjb25zdCBJZGVudGlmaWVyJiwgUmVnaXN0ZXJJRCogdmFsdWUpOwog
CiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRHZXRCeUlkKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0
ZXJJRCogYmFzZSwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHkpOwotICAgICAgICBSZWdpc3Rl
cklEKiBlbWl0R2V0QXJndW1lbnRzTGVuZ3RoKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCog
YmFzZSk7CiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRQdXRCeUlkKFJlZ2lzdGVySUQqIGJhc2Us
IGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5LCBSZWdpc3RlcklEKiB2YWx1ZSk7CiAgICAgICAg
IFJlZ2lzdGVySUQqIGVtaXREaXJlY3RQdXRCeUlkKFJlZ2lzdGVySUQqIGJhc2UsIGNvbnN0IElk
ZW50aWZpZXImIHByb3BlcnR5LCBSZWdpc3RlcklEKiB2YWx1ZSk7CiAgICAgICAgIFJlZ2lzdGVy
SUQqIGVtaXREZWxldGVCeUlkKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFzZSwgY29u
c3QgSWRlbnRpZmllciYpOwpAQCAtNTAyLDE0ICs0OTksMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIHZvaWQgZW1pdFRvUHJpbWl0aXZlKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCog
c3JjKTsKIAogICAgICAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSgpOwotICAgICAgICBSZWdp
c3RlcklEKiBlbWl0UmVzb2x2ZUNvbnN0YW50TG9jYWwoUmVnaXN0ZXJJRCogZHN0LCBjb25zdCBJ
ZGVudGlmaWVyJiwgUmVzb2x2ZVNjb3BlSW5mbyYpOwotICAgICAgICAvLyBDYWxscyB0ZW1wRGVz
dGluYXRpb24oZHN0KSwgc28gaXQncyBzYWZlIHRvIHBhc3MgbnVsbHB0ci4gSXQncyBhbHNvIHJl
ZHVuZGFudCB0byBjYWxsCi0gICAgICAgIC8vIHRlbXBEZXN0aW5hdGlvbihkc3QpIG9uIHRoZSB0
aGluZyB5b3UgcGFzcyBhcyB0aGUgZGVzdGluYXRpb24uIFRoZSByZWFzb24gd2h5IHRoaXMKLSAg
ICAgICAgLy8gY2FsbHMgdGVtcERlc3RpbmF0aW9uKCkgZm9yIHlvdSBpcyB0aGF0IGl0IG1heSBu
b3QgbmVlZCBhIHNwYXJlIHJlZ2lzdGVyLiBJdCBtYXkgcmV0dXJuCi0gICAgICAgIC8vIHNjb3Bl
UmVnaXN0ZXIoKSBkaXJlY3RseS4gU28sIHlvdSBjYW5ub3QgcmVseSBvbiB0aGlzIHN0b3Jpbmcg
dG8gZHN0LgotICAgICAgICBSZWdpc3RlcklEKiBlbWl0UmVzb2x2ZVNjb3BlKFJlZ2lzdGVySUQq
IGRzdCwgY29uc3QgSWRlbnRpZmllciYsIFJlc29sdmVTY29wZUluZm8mKTsKLSAgICAgICAgUmVn
aXN0ZXJJRCogZW1pdEdldEZyb21TY29wZShSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHNj
b3BlLCBjb25zdCBJZGVudGlmaWVyJiwgUmVzb2x2ZU1vZGUsIGNvbnN0IFJlc29sdmVTY29wZUlu
Zm8mKTsKLSAgICAgICAgUmVnaXN0ZXJJRCogZW1pdFB1dFRvU2NvcGUoUmVnaXN0ZXJJRCogc2Nv
cGUsIGNvbnN0IElkZW50aWZpZXImLCBSZWdpc3RlcklEKiB2YWx1ZSwgUmVzb2x2ZU1vZGUsIGNv
bnN0IFJlc29sdmVTY29wZUluZm8mKTsKKyAgICAgICAgUmVnaXN0ZXJJRCogZW1pdFJlc29sdmVD
b25zdGFudExvY2FsKFJlZ2lzdGVySUQqIGRzdCwgY29uc3QgVmFyaWFibGUmKTsKKyAgICAgICAg
UmVnaXN0ZXJJRCogZW1pdFJlc29sdmVTY29wZShSZWdpc3RlcklEKiBkc3QsIGNvbnN0IFZhcmlh
YmxlJik7CisgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRHZXRGcm9tU2NvcGUoUmVnaXN0ZXJJRCog
ZHN0LCBSZWdpc3RlcklEKiBzY29wZSwgY29uc3QgVmFyaWFibGUmLCBSZXNvbHZlTW9kZSk7Cisg
ICAgICAgIFJlZ2lzdGVySUQqIGVtaXRQdXRUb1Njb3BlKFJlZ2lzdGVySUQqIHNjb3BlLCBjb25z
dCBWYXJpYWJsZSYsIFJlZ2lzdGVySUQqIHZhbHVlLCBSZXNvbHZlTW9kZSk7CisgICAgICAgIFJl
Z2lzdGVySUQqIGluaXRpYWxpemVWYXJpYWJsZShjb25zdCBWYXJpYWJsZSYsIFJlZ2lzdGVySUQq
IHZhbHVlKTsKIAogICAgICAgICBQYXNzUmVmUHRyPExhYmVsPiBlbWl0TGFiZWwoTGFiZWwqKTsK
ICAgICAgICAgdm9pZCBlbWl0TG9vcEhpbnQoKTsKQEAgLTYxNSwxMSArNjA5LDcgQEAgbmFtZXNw
YWNlIEpTQyB7CiAKICAgICAgICAgUmVnaXN0ZXJJRCogbmV3UmVnaXN0ZXIoKTsKIAotICAgICAg
ICAvLyBBZGRzIGEgdmFyIHNsb3QgYW5kIG1hcHMgaXQgdG8gdGhlIG5hbWUgaWRlbnQgaW4gc3lt
Ym9sVGFibGUoKS4KLSAgICAgICAgZW51bSBXYXRjaE1vZGUgeyBJc1dhdGNoYWJsZSwgTm90V2F0
Y2hhYmxlIH07Ci0gICAgICAgIFJlZ2lzdGVySUQqIGFkZFZhcihjb25zdCBJZGVudGlmaWVyJiwg
Q29uc3RhbnRNb2RlLCBXYXRjaE1vZGUpOwotCi0gICAgICAgIC8vIEFkZHMgYW4gYW5vbnltb3Vz
IHZhciBzbG90LiBUbyBnaXZlIHRoaXMgc2xvdCBhIG5hbWUsIGFkZCBpdCB0byBzeW1ib2xUYWJs
ZSgpLgorICAgICAgICAvLyBBZGRzIGFuIGFub255bW91cyBsb2NhbCB2YXIgc2xvdC4gVG8gZ2l2
ZSB0aGlzIHNsb3QgYSBuYW1lLCBhZGQgaXQgdG8gc3ltYm9sVGFibGUoKS4KICAgICAgICAgUmVn
aXN0ZXJJRCogYWRkVmFyKCkKICAgICAgICAgewogICAgICAgICAgICAgKyttX2NvZGVCbG9jay0+
bV9udW1WYXJzOwpAQCAtNjI5LDE0ICs2MTksMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
ICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICB9CiAKLSAgICAgICAgLy8gUmV0dXJucyB0aGUg
aW5kZXggb2YgdGhlIGFkZGVkIHZhci4KLSAgICAgICAgdm9pZCBhZGRQYXJhbWV0ZXIoY29uc3Qg
SWRlbnRpZmllciYsIGludCBwYXJhbWV0ZXJJbmRleCk7Ci0gICAgICAgIFJlZ2lzdGVySUQqIHJl
c29sdmVDYWxsZWUoRnVuY3Rpb25Ob2RlKik7Ci0gICAgICAgIHZvaWQgYWRkQ2FsbGVlKEZ1bmN0
aW9uTm9kZSosIFJlZ2lzdGVySUQqKTsKLQotICAgICAgICB2b2lkIHByZXNlcnZlTGFzdFZhcigp
OwotCi0gICAgICAgIFJlZ2lzdGVySUQmIHJlZ2lzdGVyRm9yKGludCBpbmRleCkKKyAgICAgICAg
Ly8gSW5pdGlhbGl6ZXMgdGhlIHN0YWNrIGZvcm0gdGhlIHBhcmFtZXRlcjsgZG9lcyBub3RoaW5n
IGZvciB0aGUgc3ltYm9sIHRhYmxlLgorICAgICAgICBSZWdpc3RlcklEKiBpbml0aWFsaXplTmV4
dFBhcmFtZXRlcigpOworICAgICAgICBTdHJpbmdJbXBsKiB2aXNpYmxlTmFtZUZvclBhcmFtZXRl
cihEZWNvbnN0cnVjdGlvblBhdHRlcm5Ob2RlKiBwYXR0ZXJuKTsKKyAgICAgICAgCisgICAgICAg
IFJlZ2lzdGVySUQmIHJlZ2lzdGVyRm9yKFZpcnR1YWxSZWdpc3RlcikKICAgICAgICAgewogICAg
ICAgICAgICAgaWYgKG9wZXJhbmRJc0xvY2FsKGluZGV4KSkKICAgICAgICAgICAgICAgICByZXR1
cm4gbV9jYWxsZWVSZWdpc3RlcnNbVmlydHVhbFJlZ2lzdGVyKGluZGV4KS50b0xvY2FsKCldOwpA
QCAtNjYxLDExICs2NDgsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiBV
bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y3JlYXRlKG1fdm0sIG1fc2NvcGVOb2RlLT5zb3Vy
Y2UoKSwgYm9keSwgaXNCdWlsdGluRnVuY3Rpb24oKSA/IFVubGlua2VkQnVpbHRpbkZ1bmN0aW9u
IDogVW5saW5rZWROb3JtYWxGdW5jdGlvbik7CiAgICAgICAgIH0KIAotICAgICAgICBSZWdpc3Rl
cklEKiBlbWl0SW5pdExhenlSZWdpc3RlcihSZWdpc3RlcklEKik7Ci0gICAgICAgIAogICAgICAg
ICBSZWdpc3RlcklEKiBlbWl0Q29uc3RydWN0VmFyYXJncyhSZWdpc3RlcklEKiBkc3QsIFJlZ2lz
dGVySUQqIGZ1bmMsIFJlZ2lzdGVySUQqIHRoaXNSZWdpc3RlciwgUmVnaXN0ZXJJRCogYXJndW1l
bnRzLCBSZWdpc3RlcklEKiBmaXJzdEZyZWVSZWdpc3RlciwgaW50MzJfdCBmaXJzdFZhckFyZ09m
ZnNldCwgUmVnaXN0ZXJJRCogcHJvZmlsZUhvb2tSZWdpc3RlciwgY29uc3QgSlNUZXh0UG9zaXRp
b24mIGRpdm90LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RTdGFydCwgY29uc3QgSlNUZXh0
UG9zaXRpb24mIGRpdm90RW5kKTsKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdENhbGxWYXJhcmdz
KE9wY29kZUlELCBSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGZ1bmMsIFJlZ2lzdGVySUQq
IHRoaXNSZWdpc3RlciwgUmVnaXN0ZXJJRCogYXJndW1lbnRzLCBSZWdpc3RlcklEKiBmaXJzdEZy
ZWVSZWdpc3RlciwgaW50MzJfdCBmaXJzdFZhckFyZ09mZnNldCwgUmVnaXN0ZXJJRCogcHJvZmls
ZUhvb2tSZWdpc3RlciwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90LCBjb25zdCBKU1RleHRQ
b3NpdGlvbiYgZGl2b3RTdGFydCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90RW5kKTsKLSAg
ICAgICAgUmVnaXN0ZXJJRCogaW5pdGlhbGl6ZUNhcHR1cmVkVmFyaWFibGUoUmVnaXN0ZXJJRCog
ZHN0LCBjb25zdCBJZGVudGlmaWVyJiwgUmVnaXN0ZXJJRCopOwogCiAgICAgcHVibGljOgogICAg
ICAgICBKU1N0cmluZyogYWRkU3RyaW5nQ29uc3RhbnQoY29uc3QgSWRlbnRpZmllciYpOwpAQCAt
Njk5LDQ0ICs2ODMsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiB0cnVl
OwogICAgICAgICB9CiAKLSAgICAgICAgYm9vbCBzaG91bGRUZWFyT2ZmQXJndW1lbnRzRWFnZXJs
eSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBtX2NvZGVUeXBlID09IEZ1bmN0aW9u
Q29kZSAmJiBpc1N0cmljdE1vZGUoKSAmJiBtX3Njb3BlTm9kZS0+bW9kaWZpZXNQYXJhbWV0ZXIo
KTsKLSAgICAgICAgfQotCi0gICAgICAgIGJvb2wgc2hvdWxkQ3JlYXRlQXJndW1lbnRzRWFnZXJs
eSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChtX2NvZGVUeXBlICE9IEZ1bmN0aW9uQ29k
ZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICByZXR1cm4gbV9s
ZXhpY2FsRW52aXJvbm1lbnRSZWdpc3RlciAmJiBtX2NvZGVCbG9jay0+dXNlc0FyZ3VtZW50cygp
OwotICAgICAgICB9Ci0KICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdFRocm93RXhwcmVzc2lvblRv
b0RlZXBFeGNlcHRpb24oKTsKIAotICAgICAgICB2b2lkIGNyZWF0ZUFyZ3VtZW50c0lmTmVjZXNz
YXJ5KCk7Ci0gICAgICAgIFJlZ2lzdGVySUQqIGNyZWF0ZUxhenlSZWdpc3RlcklmTmVjZXNzYXJ5
KFJlZ2lzdGVySUQqKTsKLSAgICAgICAgCi0gICAgICAgIGJvb2wgaGFzV2F0Y2hhYmxlVmFyaWFi
bGUoaW50IG9wZXJhbmQpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIFZpcnR1YWxSZWdp
c3RlciByZWcob3BlcmFuZCk7Ci0gICAgICAgICAgICBpZiAoIXJlZy5pc0xvY2FsKCkpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgaWYgKHN0YXRpY19jYXN0PHNp
emVfdD4ocmVnLnRvTG9jYWwoKSkgPj0gbV93YXRjaGFibGVWYXJpYWJsZXMuc2l6ZSgpKQotICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGNvbnN0IElkZW50aWZpZXIm
IGlkZW50ID0gbV93YXRjaGFibGVWYXJpYWJsZXNbcmVnLnRvTG9jYWwoKV07Ci0gICAgICAgICAg
ICBpZiAoaWRlbnQuaXNOdWxsKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICAgICAgQVNTRVJUKGhhc0NvbnN0YW50KGlkZW50KSk7IC8vIFNob3VsZCBoYXZlIGFscmVh
ZHkgYmVlbiBhZGRlZC4KLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAg
ICAgIAotICAgICAgICBjb25zdCBJZGVudGlmaWVyJiB3YXRjaGFibGVWYXJpYWJsZUlkZW50aWZp
ZXIoaW50IG9wZXJhbmQpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChoYXNX
YXRjaGFibGVWYXJpYWJsZShvcGVyYW5kKSk7Ci0gICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIg
cmVnKG9wZXJhbmQpOwotICAgICAgICAgICAgcmV0dXJuIG1fd2F0Y2hhYmxlVmFyaWFibGVzW3Jl
Zy50b0xvY2FsKCldOwotICAgICAgICB9Ci0KICAgICBwcml2YXRlOgogICAgICAgICBWZWN0b3I8
VW5saW5rZWRJbnN0cnVjdGlvbiwgMCwgVW5zYWZlVmVjdG9yT3ZlcmZsb3c+IG1faW5zdHJ1Y3Rp
b25zOwogCkBAIC03NTUsMTQgKzcwMywxNCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgUmVn
aXN0ZXJJRCBtX3RoaXNSZWdpc3RlcjsKICAgICAgICAgUmVnaXN0ZXJJRCBtX2NhbGxlZVJlZ2lz
dGVyOwogICAgICAgICBSZWdpc3RlcklEKiBtX3Njb3BlUmVnaXN0ZXIgeyBudWxscHRyIH07Cisg
ICAgICAgIFJlZ2lzdGVySUQqIG1fYXJndW1lbnRzUmVnaXN0ZXIgeyBudWxscHRyIH07CiAgICAg
ICAgIFJlZ2lzdGVySUQqIG1fbGV4aWNhbEVudmlyb25tZW50UmVnaXN0ZXIgeyBudWxscHRyIH07
CiAgICAgICAgIFJlZ2lzdGVySUQqIG1fZW1wdHlWYWx1ZVJlZ2lzdGVyIHsgbnVsbHB0ciB9Owog
ICAgICAgICBSZWdpc3RlcklEKiBtX2dsb2JhbE9iamVjdFJlZ2lzdGVyIHsgbnVsbHB0ciB9Owot
ICAgICAgICBSZWdpc3RlcklEKiBtX2xvY2FsQXJndW1lbnRzUmVnaXN0ZXIgeyBudWxscHRyIH07
CiAKLSAgICAgICAgVmVjdG9yPElkZW50aWZpZXIsIDE2PiBtX3dhdGNoYWJsZVZhcmlhYmxlczsK
ICAgICAgICAgU2VnbWVudGVkVmVjdG9yPFJlZ2lzdGVySUQsIDMyPiBtX2NvbnN0YW50UG9vbFJl
Z2lzdGVyczsKICAgICAgICAgU2VnbWVudGVkVmVjdG9yPFJlZ2lzdGVySUQsIDMyPiBtX2NhbGxl
ZVJlZ2lzdGVyczsKKyAgICAgICAgdW5zaWduZWQgbV9udW1DYXB0dXJlZFZhcmlhYmxlczsKICAg
ICAgICAgU2VnbWVudGVkVmVjdG9yPFJlZ2lzdGVySUQsIDMyPiBtX3BhcmFtZXRlcnM7CiAgICAg
ICAgIFNlZ21lbnRlZFZlY3RvcjxMYWJlbCwgMzI+IG1fbGFiZWxzOwogICAgICAgICBMYWJlbFNj
b3BlU3RvcmUgbV9sYWJlbFNjb3BlczsKQEAgLTc3NSwxNSArNzIzLDE0IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEZvckluQ29udGV4dD4+IG1fZm9y
SW5Db250ZXh0U3RhY2s7CiAgICAgICAgIFZlY3RvcjxUcnlDb250ZXh0PiBtX3RyeUNvbnRleHRT
dGFjazsKICAgICAgICAgVmVjdG9yPHN0ZDo6cGFpcjxSZWZQdHI8UmVnaXN0ZXJJRD4sIGNvbnN0
IERlY29uc3RydWN0aW9uUGF0dGVybk5vZGUqPj4gbV9kZWNvbnN0cnVjdGVkUGFyYW1ldGVyczsK
KyAgICAgICAgVmVjdG9yPEZ1bmN0aW9uQm9keU5vZGUqPiBtX2Z1bmN0aW9uc1RvSW5pdGlhbGl6
ZTsKKyAgICAgICAgYm9vbCBtX25lZWRUb0luaXRpYWxpemVBcmd1bWVudHMgeyBmYWxzZSB9Owog
ICAgICAgICAKICAgICAgICAgVmVjdG9yPFRyeVJhbmdlPiBtX3RyeVJhbmdlczsKICAgICAgICAg
U2VnbWVudGVkVmVjdG9yPFRyeURhdGEsIDg+IG1fdHJ5RGF0YTsKIAogICAgICAgICBpbnQgbV9u
ZXh0Q29uc3RhbnRPZmZzZXQgeyAwIH07CiAKLSAgICAgICAgaW50IG1fZmlyc3RMYXp5RnVuY3Rp
b24geyAwIH07Ci0gICAgICAgIGludCBtX2xhc3RMYXp5RnVuY3Rpb24geyAwIH07Ci0gICAgICAg
IEhhc2hNYXA8dW5zaWduZWQgaW50LCBGdW5jdGlvbkJvZHlOb2RlKiwgV1RGOjpJbnRIYXNoPHVu
c2lnbmVkIGludD4sIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8dW5zaWduZWQg
aW50Pj4gbV9sYXp5RnVuY3Rpb25zOwogICAgICAgICB0eXBlZGVmIEhhc2hNYXA8RnVuY3Rpb25C
b2R5Tm9kZSosIHVuc2lnbmVkPiBGdW5jdGlvbk9mZnNldE1hcDsKICAgICAgICAgRnVuY3Rpb25P
ZmZzZXRNYXAgbV9mdW5jdGlvbk9mZnNldHM7CiAgICAgICAgIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAkocmV2aXNp
b24gMTgwODc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0Nv
ZGVnZW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjAsMjkgKzE2MCwyOSBAQCBSZWdpc3RlcklE
KiBUaGlzTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjCiAKIGJvb2wgUmVzb2x2ZU5vZGU6OmlzUHVy
ZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yKSBjb25zdAogewotICAgIHJldHVybiBnZW5l
cmF0b3IubG9jYWwobV9pZGVudCkuZ2V0KCk7CisgICAgcmV0dXJuIGdlbmVyYXRvci52YXJpYWJs
ZShtX2lkZW50KS5vZmZzZXQoKS5pc1N0YWNrKCk7CiB9CiAKIFJlZ2lzdGVySUQqIFJlc29sdmVO
b2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJ
RCogZHN0KQogewotICAgIGlmIChMb2NhbCBsb2NhbCA9IGdlbmVyYXRvci5sb2NhbChtX2lkZW50
KSkgeworICAgIFZhcmlhYmxlIHZhciA9IGdlbmVyYXRvci52YXJpYWJsZShtX2lkZW50KTsKKyAg
ICBpZiAoUmVnaXN0ZXJJRCogbG9jYWwgPSB2YXIubG9jYWwoKSkgewogICAgICAgICBpZiAoZHN0
ID09IGdlbmVyYXRvci5pZ25vcmVkUmVzdWx0KCkpCi0gICAgICAgICAgICByZXR1cm4gMDsKKyAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICBpZiAoZ2VuZXJhdG9yLnZtKCktPnR5
cGVQcm9maWxlcigpKSB7Ci0gICAgICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlKGxv
Y2FsLmdldCgpLCBQcm9maWxlVHlwZUJ5dGVjb2RlSGFzR2xvYmFsSUQsIG51bGxwdHIpOworICAg
ICAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlVHlwZShsb2NhbCwgUHJvZmlsZVR5cGVCeXRl
Y29kZUhhc0dsb2JhbElELCBudWxscHRyKTsKICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0VHlw
ZVByb2ZpbGVyRXhwcmVzc2lvbkluZm8obV9wb3NpdGlvbiwgSlNUZXh0UG9zaXRpb24oLTEsIG1f
cG9zaXRpb24ub2Zmc2V0ICsgbV9pZGVudC5sZW5ndGgoKSwgLTEpKTsKICAgICAgICAgfQotICAg
ICAgICByZXR1cm4gZ2VuZXJhdG9yLm1vdmVUb0Rlc3RpbmF0aW9uSWZOZWVkZWQoZHN0LCBsb2Nh
bC5nZXQoKSk7CisgICAgICAgIHJldHVybiBnZW5lcmF0b3IubW92ZVRvRGVzdGluYXRpb25JZk5l
ZWRlZChkc3QsIGxvY2FsKTsKICAgICB9CiAgICAgCiAgICAgSlNUZXh0UG9zaXRpb24gZGl2b3Qg
PSBtX3N0YXJ0ICsgbV9pZGVudC5sZW5ndGgoKTsKICAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Np
b25JbmZvKGRpdm90LCBtX3N0YXJ0LCBkaXZvdCk7Ci0gICAgUmVzb2x2ZVNjb3BlSW5mbyByZXNv
bHZlU2NvcGVJbmZvOwotICAgIFJlZlB0cjxSZWdpc3RlcklEPiBzY29wZSA9IGdlbmVyYXRvci5l
bWl0UmVzb2x2ZVNjb3BlKGRzdCwgbV9pZGVudCwgcmVzb2x2ZVNjb3BlSW5mbyk7CisgICAgUmVm
UHRyPFJlZ2lzdGVySUQ+IHNjb3BlID0gZ2VuZXJhdG9yLmVtaXRSZXNvbHZlU2NvcGUoZHN0LCB2
YXIpOwogICAgIFJlZ2lzdGVySUQqIGZpbmFsRGVzdCA9IGdlbmVyYXRvci5maW5hbERlc3RpbmF0
aW9uKGRzdCk7Ci0gICAgUmVnaXN0ZXJJRCogcmVzdWx0ID0gZ2VuZXJhdG9yLmVtaXRHZXRGcm9t
U2NvcGUoZmluYWxEZXN0LCBzY29wZS5nZXQoKSwgbV9pZGVudCwgVGhyb3dJZk5vdEZvdW5kLCBy
ZXNvbHZlU2NvcGVJbmZvKTsKKyAgICBSZWdpc3RlcklEKiByZXN1bHQgPSBnZW5lcmF0b3IuZW1p
dEdldEZyb21TY29wZShmaW5hbERlc3QsIHNjb3BlLmdldCgpLCB2YXIsIFRocm93SWZOb3RGb3Vu
ZCk7CiAgICAgaWYgKGdlbmVyYXRvci52bSgpLT50eXBlUHJvZmlsZXIoKSkgewotICAgICAgICBn
ZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlKGZpbmFsRGVzdCwgcmVzb2x2ZVNjb3BlSW5mby5pc0xv
Y2FsKCkgPyBQcm9maWxlVHlwZUJ5dGVjb2RlR2V0RnJvbUxvY2FsU2NvcGUgOiBQcm9maWxlVHlw
ZUJ5dGVjb2RlR2V0RnJvbVNjb3BlLCAmbV9pZGVudCk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0
UHJvZmlsZVR5cGUoZmluYWxEZXN0LCB2YXIuaXNSZXNvbHZlZCgpID8gUHJvZmlsZVR5cGVCeXRl
Y29kZUdldEZyb21Mb2NhbFNjb3BlIDogUHJvZmlsZVR5cGVCeXRlY29kZUdldEZyb21TY29wZSwg
Jm1faWRlbnQpOwogICAgICAgICBnZW5lcmF0b3IuZW1pdFR5cGVQcm9maWxlckV4cHJlc3Npb25J
bmZvKG1fcG9zaXRpb24sIEpTVGV4dFBvc2l0aW9uKC0xLCBtX3Bvc2l0aW9uLm9mZnNldCArIG1f
aWRlbnQubGVuZ3RoKCksIC0xKSk7CiAgICAgfQogICAgIHJldHVybiByZXN1bHQ7CkBAIC00OTUs
OCArNDk1LDkgQEAgQ2FsbEFyZ3VtZW50czo6Q2FsbEFyZ3VtZW50cyhCeXRlY29kZUdlbgogCiBS
ZWdpc3RlcklEKiBFdmFsRnVuY3Rpb25DYWxsTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2Vu
ZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsKLSAgICBpZiAoTG9jYWwgbG9j
YWwgPSBnZW5lcmF0b3IubG9jYWwoZ2VuZXJhdG9yLnByb3BlcnR5TmFtZXMoKS5ldmFsKSkgewot
ICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZnVuYyA9IGdlbmVyYXRvci5lbWl0TW92ZShnZW5l
cmF0b3IudGVtcERlc3RpbmF0aW9uKGRzdCksIGxvY2FsLmdldCgpKTsKKyAgICBWYXJpYWJsZSB2
YXIgPSBnZW5lcmF0b3IudmFyaWFibGUoZ2VuZXJhdG9yLnByb3BlcnR5TmFtZXMoKS5ldmFsKTsK
KyAgICBpZiAoUmVnaXN0ZXJJRCogbG9jYWwgPSB2YXIubG9jYWwoKSkgeworICAgICAgICBSZWZQ
dHI8UmVnaXN0ZXJJRD4gZnVuYyA9IGdlbmVyYXRvci5lbWl0TW92ZShnZW5lcmF0b3IudGVtcERl
c3RpbmF0aW9uKGRzdCksIGxvY2FsKTsKICAgICAgICAgQ2FsbEFyZ3VtZW50cyBjYWxsQXJndW1l
bnRzKGdlbmVyYXRvciwgbV9hcmdzKTsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRMb2FkKGNhbGxB
cmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIGpzVW5kZWZpbmVkKCkpOwogICAgICAgICByZXR1cm4g
Z2VuZXJhdG9yLmVtaXRDYWxsRXZhbChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIGZ1
bmMuZ2V0KCkpLCBmdW5jLmdldCgpLCBjYWxsQXJndW1lbnRzLCBkaXZvdCgpLCBkaXZvdFN0YXJ0
KCksIGRpdm90RW5kKCkpOwpAQCAtNTA2LDExICs1MDcsMTAgQEAgUmVnaXN0ZXJJRCogRXZhbEZ1
bmN0aW9uQ2FsbE5vZGU6OmVtaXRCeQogICAgIENhbGxBcmd1bWVudHMgY2FsbEFyZ3VtZW50cyhn
ZW5lcmF0b3IsIG1fYXJncyk7CiAgICAgSlNUZXh0UG9zaXRpb24gbmV3RGl2b3QgPSBkaXZvdFN0
YXJ0KCkgKyA0OwogICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8obmV3RGl2b3QsIGRp
dm90U3RhcnQoKSwgbmV3RGl2b3QpOwotICAgIFJlc29sdmVTY29wZUluZm8gcmVzb2x2ZVNjb3Bl
SW5mbzsKICAgICBnZW5lcmF0b3IubW92ZVRvRGVzdGluYXRpb25JZk5lZWRlZCgKICAgICAgICAg
Y2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRSZXNv
bHZlU2NvcGUoY2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwgZ2VuZXJhdG9yLnByb3BlcnR5
TmFtZXMoKS5ldmFsLCByZXNvbHZlU2NvcGVJbmZvKSk7Ci0gICAgZ2VuZXJhdG9yLmVtaXRHZXRG
cm9tU2NvcGUoZnVuYy5nZXQoKSwgY2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwgZ2VuZXJh
dG9yLnByb3BlcnR5TmFtZXMoKS5ldmFsLCBUaHJvd0lmTm90Rm91bmQsIHJlc29sdmVTY29wZUlu
Zm8pOworICAgICAgICBnZW5lcmF0b3IuZW1pdFJlc29sdmVTY29wZShjYWxsQXJndW1lbnRzLnRo
aXNSZWdpc3RlcigpLCB2YXIpKTsKKyAgICBnZW5lcmF0b3IuZW1pdEdldEZyb21TY29wZShmdW5j
LmdldCgpLCBjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCB2YXIsIFRocm93SWZOb3RGb3Vu
ZCk7CiAgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0Q2FsbEV2YWwoZ2VuZXJhdG9yLmZpbmFsRGVz
dGluYXRpb24oZHN0LCBmdW5jLmdldCgpKSwgZnVuYy5nZXQoKSwgY2FsbEFyZ3VtZW50cywgZGl2
b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKIH0KIApAQCAtNTM2LDggKzUzNiw5IEBA
IFJlZ2lzdGVySUQqIEZ1bmN0aW9uQ2FsbFJlc29sdmVOb2RlOjplbWkKIHsKICAgICBFeHBlY3Rl
ZEZ1bmN0aW9uIGV4cGVjdGVkRnVuY3Rpb24gPSBnZW5lcmF0b3IuZXhwZWN0ZWRGdW5jdGlvbkZv
cklkZW50aWZpZXIobV9pZGVudCk7CiAKLSAgICBpZiAoTG9jYWwgbG9jYWwgPSBnZW5lcmF0b3Iu
bG9jYWwobV9pZGVudCkpIHsKLSAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGZ1bmMgPSBnZW5l
cmF0b3IuZW1pdE1vdmUoZ2VuZXJhdG9yLnRlbXBEZXN0aW5hdGlvbihkc3QpLCBsb2NhbC5nZXQo
KSk7CisgICAgVmFyaWFibGUgdmFyID0gZ2VuZXJhdG9yLnZhcmlhYmxlKG1faWRlbnQpOworICAg
IGlmIChSZWdpc3RlcklEKiBsb2NhbCA9IHZhci5sb2NhbCgpKSB7CisgICAgICAgIFJlZlB0cjxS
ZWdpc3RlcklEPiBmdW5jID0gZ2VuZXJhdG9yLmVtaXRNb3ZlKGdlbmVyYXRvci50ZW1wRGVzdGlu
YXRpb24oZHN0KSwgbG9jYWwpOwogICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcmV0dXJuVmFs
dWUgPSBnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIGZ1bmMuZ2V0KCkpOwogICAgICAg
ICBDYWxsQXJndW1lbnRzIGNhbGxBcmd1bWVudHMoZ2VuZXJhdG9yLCBtX2FyZ3MpOwogICAgICAg
ICBnZW5lcmF0b3IuZW1pdExvYWQoY2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwganNVbmRl
ZmluZWQoKSk7CkBAIC01NTcsMTEgKzU1OCwxMCBAQCBSZWdpc3RlcklEKiBGdW5jdGlvbkNhbGxS
ZXNvbHZlTm9kZTo6ZW1pCiAKICAgICBKU1RleHRQb3NpdGlvbiBuZXdEaXZvdCA9IGRpdm90U3Rh
cnQoKSArIG1faWRlbnQubGVuZ3RoKCk7CiAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5m
byhuZXdEaXZvdCwgZGl2b3RTdGFydCgpLCBuZXdEaXZvdCk7Ci0gICAgUmVzb2x2ZVNjb3BlSW5m
byByZXNvbHZlU2NvcGVJbmZvOwogICAgIGdlbmVyYXRvci5tb3ZlVG9EZXN0aW5hdGlvbklmTmVl
ZGVkKAogICAgICAgICBjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLAotICAgICAgICBnZW5l
cmF0b3IuZW1pdFJlc29sdmVTY29wZShjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCBtX2lk
ZW50LCByZXNvbHZlU2NvcGVJbmZvKSk7Ci0gICAgZ2VuZXJhdG9yLmVtaXRHZXRGcm9tU2NvcGUo
ZnVuYy5nZXQoKSwgY2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwgbV9pZGVudCwgVGhyb3dJ
Zk5vdEZvdW5kLCByZXNvbHZlU2NvcGVJbmZvKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRSZXNv
bHZlU2NvcGUoY2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwgdmFyKSk7CisgICAgZ2VuZXJh
dG9yLmVtaXRHZXRGcm9tU2NvcGUoZnVuYy5nZXQoKSwgY2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0
ZXIoKSwgdmFyLCBUaHJvd0lmTm90Rm91bmQpOwogICAgIFJlZ2lzdGVySUQqIHJldCA9IGdlbmVy
YXRvci5lbWl0Q2FsbChyZXR1cm5WYWx1ZS5nZXQoKSwgZnVuYy5nZXQoKSwgZXhwZWN0ZWRGdW5j
dGlvbiwgY2FsbEFyZ3VtZW50cywgZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsK
ICAgICBpZiAoZ2VuZXJhdG9yLnZtKCktPnR5cGVQcm9maWxlcigpKSB7CiAgICAgICAgIGdlbmVy
YXRvci5lbWl0UHJvZmlsZVR5cGUocmV0dXJuVmFsdWUuZ2V0KCksIFByb2ZpbGVUeXBlQnl0ZWNv
ZGVEb2VzTm90SGF2ZUdsb2JhbElELCBudWxscHRyKTsKQEAgLTgyMCwxMSArODIwLDEyIEBAIFJl
Z2lzdGVySUQqIFBvc3RmaXhOb2RlOjplbWl0UmVzb2x2ZShCeXQKICAgICBSZXNvbHZlTm9kZSog
cmVzb2x2ZSA9IHN0YXRpY19jYXN0PFJlc29sdmVOb2RlKj4obV9leHByKTsKICAgICBjb25zdCBJ
ZGVudGlmaWVyJiBpZGVudCA9IHJlc29sdmUtPmlkZW50aWZpZXIoKTsKIAotICAgIGlmIChMb2Nh
bCBsb2NhbCA9IGdlbmVyYXRvci5sb2NhbChpZGVudCkpIHsKLSAgICAgICAgUmVmUHRyPFJlZ2lz
dGVySUQ+IGxvY2FsUmVnID0gbG9jYWwuZ2V0KCk7Ci0gICAgICAgIGlmIChsb2NhbC5pc1JlYWRP
bmx5KCkpIHsKKyAgICBWYXJpYWJsZSB2YXIgPSBnZW5lcmF0b3IudmFyaWFibGUoaWRlbnQpOwor
ICAgIGlmIChSZWdpc3RlcklEKiBsb2NhbCA9IHZhci5sb2NhbCgpKSB7CisgICAgICAgIFJlZlB0
cjxSZWdpc3RlcklEPiBsb2NhbFJlZyA9IGxvY2FsOworICAgICAgICBpZiAodmFyLmlzUmVhZE9u
bHkoKSkgewogICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRSZWFkT25seUV4Y2VwdGlvbklmTmVl
ZGVkKCk7Ci0gICAgICAgICAgICBsb2NhbFJlZyA9IGdlbmVyYXRvci5lbWl0TW92ZShnZW5lcmF0
b3IudGVtcERlc3RpbmF0aW9uKGRzdCksIGxvY2FsUmVnLmdldCgpKTsKKyAgICAgICAgICAgIGxv
Y2FsUmVnID0gZ2VuZXJhdG9yLmVtaXRNb3ZlKGdlbmVyYXRvci50ZW1wRGVzdGluYXRpb24oZHN0
KSwgbG9jYWwpOwogICAgICAgICB9IGVsc2UgaWYgKGdlbmVyYXRvci52bSgpLT50eXBlUHJvZmls
ZXIoKSkgewogICAgICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHRlbXBEc3QgPSBnZW5lcmF0
b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpOwogICAgICAgICAgICAgQVNTRVJUKGRzdCAhPSBsb2Nh
bFJlZyk7CkBAIC04NDEsMTMgKzg0MiwxMiBAQCBSZWdpc3RlcklEKiBQb3N0Zml4Tm9kZTo6ZW1p
dFJlc29sdmUoQnl0CiAgICAgfQogCiAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhk
aXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwotICAgIFJlc29sdmVTY29wZUluZm8g
cmVzb2x2ZVNjb3BlSW5mbzsKLSAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gc2NvcGUgPSBnZW5lcmF0
b3IuZW1pdFJlc29sdmVTY29wZShudWxscHRyLCBpZGVudCwgcmVzb2x2ZVNjb3BlSW5mbyk7Ci0g
ICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHZhbHVlID0gZ2VuZXJhdG9yLmVtaXRHZXRGcm9tU2NvcGUo
Z2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBzY29wZS5nZXQoKSwgaWRlbnQsIFRocm93SWZOb3RG
b3VuZCwgcmVzb2x2ZVNjb3BlSW5mbyk7CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHNjb3BlID0g
Z2VuZXJhdG9yLmVtaXRSZXNvbHZlU2NvcGUobnVsbHB0ciwgdmFyKTsKKyAgICBSZWZQdHI8UmVn
aXN0ZXJJRD4gdmFsdWUgPSBnZW5lcmF0b3IuZW1pdEdldEZyb21TY29wZShnZW5lcmF0b3IubmV3
VGVtcG9yYXJ5KCksIHNjb3BlLmdldCgpLCB2YXIsIFRocm93SWZOb3RGb3VuZCk7CiAgICAgUmVm
UHRyPFJlZ2lzdGVySUQ+IG9sZFZhbHVlID0gZW1pdFBvc3RJbmNPckRlYyhnZW5lcmF0b3IsIGdl
bmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCksIHZhbHVlLmdldCgpLCBtX29wZXJhdG9yKTsK
LSAgICBnZW5lcmF0b3IuZW1pdFB1dFRvU2NvcGUoc2NvcGUuZ2V0KCksIGlkZW50LCB2YWx1ZS5n
ZXQoKSwgVGhyb3dJZk5vdEZvdW5kLCByZXNvbHZlU2NvcGVJbmZvKTsKKyAgICBnZW5lcmF0b3Iu
ZW1pdFB1dFRvU2NvcGUoc2NvcGUuZ2V0KCksIHZhciwgdmFsdWUuZ2V0KCksIFRocm93SWZOb3RG
b3VuZCk7CiAgICAgaWYgKGdlbmVyYXRvci52bSgpLT50eXBlUHJvZmlsZXIoKSkgewotICAgICAg
ICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlKHZhbHVlLmdldCgpLCByZXNvbHZlU2NvcGVJbmZv
LmlzTG9jYWwoKSA/IFByb2ZpbGVUeXBlQnl0ZWNvZGVQdXRUb0xvY2FsU2NvcGUgOiBQcm9maWxl
VHlwZUJ5dGVjb2RlUHV0VG9TY29wZSwgJmlkZW50KTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRQ
cm9maWxlVHlwZSh2YWx1ZS5nZXQoKSwgdmFyLmlzUmVzb2x2ZWQoKSA/IFByb2ZpbGVUeXBlQnl0
ZWNvZGVQdXRUb0xvY2FsU2NvcGUgOiBQcm9maWxlVHlwZUJ5dGVjb2RlUHV0VG9TY29wZSwgJmlk
ZW50KTsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRUeXBlUHJvZmlsZXJFeHByZXNzaW9uSW5mbyhk
aXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwogICAgIH0KIApAQCAtOTIzLDEyICs5MjMsMTIgQEAg
UmVnaXN0ZXJJRCogUG9zdGZpeE5vZGU6OmVtaXRCeXRlY29kZShCeQogCiBSZWdpc3RlcklEKiBE
ZWxldGVSZXNvbHZlTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0
b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsKLSAgICBpZiAoZ2VuZXJhdG9yLmxvY2FsKG1faWRlbnQp
LmdldCgpKQorICAgIFZhcmlhYmxlIHZhciA9IGdlbmVyYXRvci52YXJpYWJsZShtX2lkZW50KTsK
KyAgICBpZiAodmFyLmxvY2FsKCkpCiAgICAgICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdExvYWQo
Z2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSwgZmFsc2UpOwogCiAgICAgZ2VuZXJhdG9y
LmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwot
ICAgIFJlc29sdmVTY29wZUluZm8gcmVzb2x2ZVNjb3BlSW5mbzsKLSAgICBSZWZQdHI8UmVnaXN0
ZXJJRD4gYmFzZSA9IGdlbmVyYXRvci5lbWl0UmVzb2x2ZVNjb3BlKGRzdCwgbV9pZGVudCwgcmVz
b2x2ZVNjb3BlSW5mbyk7CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGJhc2UgPSBnZW5lcmF0b3Iu
ZW1pdFJlc29sdmVTY29wZShkc3QsIHZhcik7CiAgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0RGVs
ZXRlQnlJZChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIGJhc2UuZ2V0KCkpLCBiYXNl
LmdldCgpLCBtX2lkZW50KTsKIH0KIApAQCAtOTc1LDE5ICs5NzUsMTkgQEAgUmVnaXN0ZXJJRCog
Vm9pZE5vZGU6OmVtaXRCeXRlY29kZShCeXRlYwogICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdExv
YWQoZHN0LCBqc1VuZGVmaW5lZCgpKTsKIH0KIAotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tIFR5cGVPZlZhbHVlTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFR5cGVPZlJlc29sdmVOb2RlIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIFJlZ2lzdGVySUQqIFR5cGVPZlJl
c29sdmVOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVn
aXN0ZXJJRCogZHN0KQogewotICAgIGlmIChMb2NhbCBsb2NhbCA9IGdlbmVyYXRvci5sb2NhbCht
X2lkZW50KSkgeworICAgIFZhcmlhYmxlIHZhciA9IGdlbmVyYXRvci52YXJpYWJsZShtX2lkZW50
KTsKKyAgICBpZiAoUmVnaXN0ZXJJRCogbG9jYWwgPSB2YXIubG9jYWwoKSkgewogICAgICAgICBp
ZiAoZHN0ID09IGdlbmVyYXRvci5pZ25vcmVkUmVzdWx0KCkpCiAgICAgICAgICAgICByZXR1cm4g
MDsKLSAgICAgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0VHlwZU9mKGdlbmVyYXRvci5maW5hbERl
c3RpbmF0aW9uKGRzdCksIGxvY2FsLmdldCgpKTsKKyAgICAgICAgcmV0dXJuIGdlbmVyYXRvci5l
bWl0VHlwZU9mKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCksIGxvY2FsKTsKICAgICB9
CiAKLSAgICBSZXNvbHZlU2NvcGVJbmZvIHJlc29sdmVTY29wZUluZm87Ci0gICAgUmVmUHRyPFJl
Z2lzdGVySUQ+IHNjb3BlID0gZ2VuZXJhdG9yLmVtaXRSZXNvbHZlU2NvcGUoZHN0LCBtX2lkZW50
LCByZXNvbHZlU2NvcGVJbmZvKTsKLSAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gdmFsdWUgPSBnZW5l
cmF0b3IuZW1pdEdldEZyb21TY29wZShnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIHNjb3BlLmdl
dCgpLCBtX2lkZW50LCBEb05vdFRocm93SWZOb3RGb3VuZCwgcmVzb2x2ZVNjb3BlSW5mbyk7Cisg
ICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHNjb3BlID0gZ2VuZXJhdG9yLmVtaXRSZXNvbHZlU2NvcGUo
ZHN0LCB2YXIpOworICAgIFJlZlB0cjxSZWdpc3RlcklEPiB2YWx1ZSA9IGdlbmVyYXRvci5lbWl0
R2V0RnJvbVNjb3BlKGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgc2NvcGUuZ2V0KCksIHZhciwg
RG9Ob3RUaHJvd0lmTm90Rm91bmQpOwogICAgIGlmIChkc3QgPT0gZ2VuZXJhdG9yLmlnbm9yZWRS
ZXN1bHQoKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0VHlw
ZU9mKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCwgc2NvcGUuZ2V0KCkpLCB2YWx1ZS5n
ZXQoKSk7CkBAIC0xMDEzLDkgKzEwMTMsMTAgQEAgUmVnaXN0ZXJJRCogUHJlZml4Tm9kZTo6ZW1p
dFJlc29sdmUoQnl0ZQogICAgIFJlc29sdmVOb2RlKiByZXNvbHZlID0gc3RhdGljX2Nhc3Q8UmVz
b2x2ZU5vZGUqPihtX2V4cHIpOwogICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gcmVzb2x2
ZS0+aWRlbnRpZmllcigpOwogCi0gICAgaWYgKExvY2FsIGxvY2FsID0gZ2VuZXJhdG9yLmxvY2Fs
KGlkZW50KSkgewotICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gbG9jYWxSZWcgPSBsb2NhbC5n
ZXQoKTsKLSAgICAgICAgaWYgKGxvY2FsLmlzUmVhZE9ubHkoKSkgeworICAgIFZhcmlhYmxlIHZh
ciA9IGdlbmVyYXRvci52YXJpYWJsZShpZGVudCk7CisgICAgaWYgKFJlZ2lzdGVySUQqIGxvY2Fs
ID0gdmFyLmxvY2FsKCkpIHsKKyAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGxvY2FsUmVnID0g
bG9jYWw7CisgICAgICAgIGlmICh2YXIuaXNSZWFkT25seSgpKSB7CiAgICAgICAgICAgICBnZW5l
cmF0b3IuZW1pdFJlYWRPbmx5RXhjZXB0aW9uSWZOZWVkZWQoKTsKICAgICAgICAgICAgIGxvY2Fs
UmVnID0gZ2VuZXJhdG9yLmVtaXRNb3ZlKGdlbmVyYXRvci50ZW1wRGVzdGluYXRpb24oZHN0KSwg
bG9jYWxSZWcuZ2V0KCkpOwogICAgICAgICB9IGVsc2UgaWYgKGdlbmVyYXRvci52bSgpLT50eXBl
UHJvZmlsZXIoKSkgewpAQCAtMTAzMiwxMyArMTAzMywxMiBAQCBSZWdpc3RlcklEKiBQcmVmaXhO
b2RlOjplbWl0UmVzb2x2ZShCeXRlCiAgICAgfQogCiAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNz
aW9uSW5mbyhkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwotICAgIFJlc29sdmVT
Y29wZUluZm8gcmVzb2x2ZVNjb3BlSW5mbzsKLSAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gc2NvcGUg
PSBnZW5lcmF0b3IuZW1pdFJlc29sdmVTY29wZShkc3QsIGlkZW50LCByZXNvbHZlU2NvcGVJbmZv
KTsKLSAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gdmFsdWUgPSBnZW5lcmF0b3IuZW1pdEdldEZyb21T
Y29wZShnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIHNjb3BlLmdldCgpLCBpZGVudCwgVGhyb3dJ
Zk5vdEZvdW5kLCByZXNvbHZlU2NvcGVJbmZvKTsKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gc2Nv
cGUgPSBnZW5lcmF0b3IuZW1pdFJlc29sdmVTY29wZShkc3QsIHZhcik7CisgICAgUmVmUHRyPFJl
Z2lzdGVySUQ+IHZhbHVlID0gZ2VuZXJhdG9yLmVtaXRHZXRGcm9tU2NvcGUoZ2VuZXJhdG9yLm5l
d1RlbXBvcmFyeSgpLCBzY29wZS5nZXQoKSwgdmFyLCBUaHJvd0lmTm90Rm91bmQpOwogICAgIGVt
aXRJbmNPckRlYyhnZW5lcmF0b3IsIHZhbHVlLmdldCgpLCBtX29wZXJhdG9yKTsKLSAgICBnZW5l
cmF0b3IuZW1pdFB1dFRvU2NvcGUoc2NvcGUuZ2V0KCksIGlkZW50LCB2YWx1ZS5nZXQoKSwgVGhy
b3dJZk5vdEZvdW5kLCByZXNvbHZlU2NvcGVJbmZvKTsKKyAgICBnZW5lcmF0b3IuZW1pdFB1dFRv
U2NvcGUoc2NvcGUuZ2V0KCksIHZhciwgdmFsdWUuZ2V0KCksIFRocm93SWZOb3RGb3VuZCk7CiAg
ICAgaWYgKGdlbmVyYXRvci52bSgpLT50eXBlUHJvZmlsZXIoKSkgewotICAgICAgICBnZW5lcmF0
b3IuZW1pdFByb2ZpbGVUeXBlKHZhbHVlLmdldCgpLCByZXNvbHZlU2NvcGVJbmZvLmlzTG9jYWwo
KSA/IFByb2ZpbGVUeXBlQnl0ZWNvZGVQdXRUb0xvY2FsU2NvcGUgOiBQcm9maWxlVHlwZUJ5dGVj
b2RlUHV0VG9TY29wZSwgJmlkZW50KTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlVHlw
ZSh2YWx1ZS5nZXQoKSwgdmFyLmlzUmVzb2x2ZWQoKSA/IFByb2ZpbGVUeXBlQnl0ZWNvZGVQdXRU
b0xvY2FsU2NvcGUgOiBQcm9maWxlVHlwZUJ5dGVjb2RlUHV0VG9TY29wZSwgJmlkZW50KTsKICAg
ICAgICAgZ2VuZXJhdG9yLmVtaXRUeXBlUHJvZmlsZXJFeHByZXNzaW9uSW5mbyhkaXZvdFN0YXJ0
KCksIGRpdm90RW5kKCkpOwogICAgIH0KICAgICByZXR1cm4gZ2VuZXJhdG9yLm1vdmVUb0Rlc3Rp
bmF0aW9uSWZOZWVkZWQoZHN0LCB2YWx1ZS5nZXQoKSk7CkBAIC0xNTMwLDM3ICsxNTMwLDM3IEBA
IHN0YXRpYyBBTFdBWVNfSU5MSU5FIFJlZ2lzdGVySUQqIGVtaXRSZWEKIFJlZ2lzdGVySUQqIFJl
YWRNb2RpZnlSZXNvbHZlTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5l
cmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsKICAgICBKU1RleHRQb3NpdGlvbiBuZXdEaXZvdCA9
IGRpdm90U3RhcnQoKSArIG1faWRlbnQubGVuZ3RoKCk7Ci0gICAgaWYgKExvY2FsIGxvY2FsID0g
Z2VuZXJhdG9yLmxvY2FsKG1faWRlbnQpKSB7Ci0gICAgICAgIGlmIChsb2NhbC5pc1JlYWRPbmx5
KCkpIHsKKyAgICBWYXJpYWJsZSB2YXIgPSBnZW5lcmF0b3IudmFyaWFibGUobV9pZGVudCk7Cisg
ICAgaWYgKFJlZ2lzdGVySUQqIGxvY2FsID0gdmFyLmxvY2FsKCkpIHsKKyAgICAgICAgaWYgKHZh
ci5pc1JlYWRPbmx5KCkpIHsKICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0UmVhZE9ubHlFeGNl
cHRpb25JZk5lZWRlZCgpOwotICAgICAgICAgICAgcmV0dXJuIGVtaXRSZWFkTW9kaWZ5QXNzaWdu
bWVudChnZW5lcmF0b3IsIGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCksIGxvY2FsLmdl
dCgpLCBtX3JpZ2h0LCBtX29wZXJhdG9yLCBPcGVyYW5kVHlwZXMoUmVzdWx0VHlwZTo6dW5rbm93
blR5cGUoKSwgbV9yaWdodC0+cmVzdWx0RGVzY3JpcHRvcigpKSk7CisgICAgICAgICAgICByZXR1
cm4gZW1pdFJlYWRNb2RpZnlBc3NpZ25tZW50KGdlbmVyYXRvciwgZ2VuZXJhdG9yLmZpbmFsRGVz
dGluYXRpb24oZHN0KSwgbG9jYWwsIG1fcmlnaHQsIG1fb3BlcmF0b3IsIE9wZXJhbmRUeXBlcyhS
ZXN1bHRUeXBlOjp1bmtub3duVHlwZSgpLCBtX3JpZ2h0LT5yZXN1bHREZXNjcmlwdG9yKCkpKTsK
ICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgaWYgKGdlbmVyYXRvci52bSgpLT50eXBlUHJv
ZmlsZXIoKQogICAgICAgICAgICAgfHwgZ2VuZXJhdG9yLmxlZnRIYW5kU2lkZU5lZWRzQ29weSht
X3JpZ2h0SGFzQXNzaWdubWVudHMsIG1fcmlnaHQtPmlzUHVyZShnZW5lcmF0b3IpKSkgewogICAg
ICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHJlc3VsdCA9IGdlbmVyYXRvci5uZXdUZW1wb3Jh
cnkoKTsKLSAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0TW92ZShyZXN1bHQuZ2V0KCksIGxvY2Fs
LmdldCgpKTsKKyAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0TW92ZShyZXN1bHQuZ2V0KCksIGxv
Y2FsKTsKICAgICAgICAgICAgIGVtaXRSZWFkTW9kaWZ5QXNzaWdubWVudChnZW5lcmF0b3IsIHJl
c3VsdC5nZXQoKSwgcmVzdWx0LmdldCgpLCBtX3JpZ2h0LCBtX29wZXJhdG9yLCBPcGVyYW5kVHlw
ZXMoUmVzdWx0VHlwZTo6dW5rbm93blR5cGUoKSwgbV9yaWdodC0+cmVzdWx0RGVzY3JpcHRvcigp
KSk7Ci0gICAgICAgICAgICBnZW5lcmF0b3IuZW1pdE1vdmUobG9jYWwuZ2V0KCksIHJlc3VsdC5n
ZXQoKSk7Ci0gICAgICAgICAgICBnZW5lcmF0b3IuaW52YWxpZGF0ZUZvckluQ29udGV4dEZvckxv
Y2FsKGxvY2FsLmdldCgpKTsKKyAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0TW92ZShsb2NhbCwg
cmVzdWx0LmdldCgpKTsKKyAgICAgICAgICAgIGdlbmVyYXRvci5pbnZhbGlkYXRlRm9ySW5Db250
ZXh0Rm9yTG9jYWwobG9jYWwpOwogICAgICAgICAgICAgaWYgKGdlbmVyYXRvci52bSgpLT50eXBl
UHJvZmlsZXIoKSkKICAgICAgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdFR5cGVQcm9maWxlckV4
cHJlc3Npb25JbmZvKGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAgICAgICAgICAgICByZXR1
cm4gZ2VuZXJhdG9yLm1vdmVUb0Rlc3RpbmF0aW9uSWZOZWVkZWQoZHN0LCByZXN1bHQuZ2V0KCkp
OwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBSZWdpc3RlcklEKiByZXN1bHQgPSBlbWl0
UmVhZE1vZGlmeUFzc2lnbm1lbnQoZ2VuZXJhdG9yLCBsb2NhbC5nZXQoKSwgbG9jYWwuZ2V0KCks
IG1fcmlnaHQsIG1fb3BlcmF0b3IsIE9wZXJhbmRUeXBlcyhSZXN1bHRUeXBlOjp1bmtub3duVHlw
ZSgpLCBtX3JpZ2h0LT5yZXN1bHREZXNjcmlwdG9yKCkpKTsKLSAgICAgICAgZ2VuZXJhdG9yLmlu
dmFsaWRhdGVGb3JJbkNvbnRleHRGb3JMb2NhbChsb2NhbC5nZXQoKSk7CisgICAgICAgIFJlZ2lz
dGVySUQqIHJlc3VsdCA9IGVtaXRSZWFkTW9kaWZ5QXNzaWdubWVudChnZW5lcmF0b3IsIGxvY2Fs
LCBsb2NhbCwgbV9yaWdodCwgbV9vcGVyYXRvciwgT3BlcmFuZFR5cGVzKFJlc3VsdFR5cGU6OnVu
a25vd25UeXBlKCksIG1fcmlnaHQtPnJlc3VsdERlc2NyaXB0b3IoKSkpOworICAgICAgICBnZW5l
cmF0b3IuaW52YWxpZGF0ZUZvckluQ29udGV4dEZvckxvY2FsKGxvY2FsKTsKICAgICAgICAgcmV0
dXJuIGdlbmVyYXRvci5tb3ZlVG9EZXN0aW5hdGlvbklmTmVlZGVkKGRzdCwgcmVzdWx0KTsKICAg
ICB9CiAKICAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKG5ld0Rpdm90LCBkaXZvdFN0
YXJ0KCksIG5ld0Rpdm90KTsKLSAgICBSZXNvbHZlU2NvcGVJbmZvIHJlc29sdmVTY29wZUluZm87
Ci0gICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHNjb3BlID0gZ2VuZXJhdG9yLmVtaXRSZXNvbHZlU2Nv
cGUobnVsbHB0ciwgbV9pZGVudCwgcmVzb2x2ZVNjb3BlSW5mbyk7Ci0gICAgUmVmUHRyPFJlZ2lz
dGVySUQ+IHZhbHVlID0gZ2VuZXJhdG9yLmVtaXRHZXRGcm9tU2NvcGUoZ2VuZXJhdG9yLm5ld1Rl
bXBvcmFyeSgpLCBzY29wZS5nZXQoKSwgbV9pZGVudCwgVGhyb3dJZk5vdEZvdW5kLCByZXNvbHZl
U2NvcGVJbmZvKTsKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gc2NvcGUgPSBnZW5lcmF0b3IuZW1p
dFJlc29sdmVTY29wZShudWxscHRyLCB2YXIpOworICAgIFJlZlB0cjxSZWdpc3RlcklEPiB2YWx1
ZSA9IGdlbmVyYXRvci5lbWl0R2V0RnJvbVNjb3BlKGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwg
c2NvcGUuZ2V0KCksIHZhciwgVGhyb3dJZk5vdEZvdW5kKTsKICAgICBSZWZQdHI8UmVnaXN0ZXJJ
RD4gcmVzdWx0ID0gZW1pdFJlYWRNb2RpZnlBc3NpZ25tZW50KGdlbmVyYXRvciwgZ2VuZXJhdG9y
LmZpbmFsRGVzdGluYXRpb24oZHN0LCB2YWx1ZS5nZXQoKSksIHZhbHVlLmdldCgpLCBtX3JpZ2h0
LCBtX29wZXJhdG9yLCBPcGVyYW5kVHlwZXMoUmVzdWx0VHlwZTo6dW5rbm93blR5cGUoKSwgbV9y
aWdodC0+cmVzdWx0RGVzY3JpcHRvcigpKSwgdGhpcyk7Ci0gICAgUmVnaXN0ZXJJRCogcmV0dXJu
UmVzdWx0ID0gZ2VuZXJhdG9yLmVtaXRQdXRUb1Njb3BlKHNjb3BlLmdldCgpLCBtX2lkZW50LCBy
ZXN1bHQuZ2V0KCksIFRocm93SWZOb3RGb3VuZCwgcmVzb2x2ZVNjb3BlSW5mbyk7CisgICAgUmVn
aXN0ZXJJRCogcmV0dXJuUmVzdWx0ID0gZ2VuZXJhdG9yLmVtaXRQdXRUb1Njb3BlKHNjb3BlLmdl
dCgpLCB2YXIsIHJlc3VsdC5nZXQoKSwgVGhyb3dJZk5vdEZvdW5kKTsKICAgICBpZiAoZ2VuZXJh
dG9yLnZtKCktPnR5cGVQcm9maWxlcigpKSB7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0UHJvZmls
ZVR5cGUocmVzdWx0LmdldCgpLCByZXNvbHZlU2NvcGVJbmZvLmlzTG9jYWwoKSA/IFByb2ZpbGVU
eXBlQnl0ZWNvZGVQdXRUb0xvY2FsU2NvcGUgOiBQcm9maWxlVHlwZUJ5dGVjb2RlUHV0VG9TY29w
ZSwgJm1faWRlbnQpOworICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlKHJlc3VsdC5n
ZXQoKSwgdmFyLmlzUmVzb2x2ZWQoKSA/IFByb2ZpbGVUeXBlQnl0ZWNvZGVQdXRUb0xvY2FsU2Nv
cGUgOiBQcm9maWxlVHlwZUJ5dGVjb2RlUHV0VG9TY29wZSwgJm1faWRlbnQpOwogICAgICAgICBn
ZW5lcmF0b3IuZW1pdFR5cGVQcm9maWxlckV4cHJlc3Npb25JbmZvKGRpdm90U3RhcnQoKSwgZGl2
b3RFbmQoKSk7CiAgICAgfQogICAgIHJldHVybiByZXR1cm5SZXN1bHQ7CkBAIC0xNTcwLDM2ICsx
NTcwLDM2IEBAIFJlZ2lzdGVySUQqIFJlYWRNb2RpZnlSZXNvbHZlTm9kZTo6ZW1pdEIKIAogUmVn
aXN0ZXJJRCogQXNzaWduUmVzb2x2ZU5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRv
ciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7Ci0gICAgaWYgKExvY2FsIGxvY2FsID0g
Z2VuZXJhdG9yLmxvY2FsKG1faWRlbnQpKSB7Ci0gICAgICAgIGlmIChsb2NhbC5pc1JlYWRPbmx5
KCkpIHsKKyAgICBWYXJpYWJsZSB2YXIgPSBnZW5lcmF0b3IudmFyaWFibGUobV9pbmRldCk7Cisg
ICAgaWYgKFJlZ2lzdGVySUQqIGxvY2FsID0gdmFyLmxvY2FsKCkpIHsKKyAgICAgICAgaWYgKHZh
ci5pc1JlYWRPbmx5KCkpIHsKICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0UmVhZE9ubHlFeGNl
cHRpb25JZk5lZWRlZCgpOwogICAgICAgICAgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0Tm9kZShk
c3QsIG1fcmlnaHQpOwogICAgICAgICB9Ci0gICAgICAgIGlmIChsb2NhbC5pc1NwZWNpYWwoKSB8
fCBnZW5lcmF0b3Iudm0oKS0+dHlwZVByb2ZpbGVyKCkpIHsKKyAgICAgICAgaWYgKHZhci5pc1Nw
ZWNpYWwoKSB8fCBnZW5lcmF0b3Iudm0oKS0+dHlwZVByb2ZpbGVyKCkpIHsKICAgICAgICAgICAg
IFJlZlB0cjxSZWdpc3RlcklEPiB0ZW1wRHN0ID0gZ2VuZXJhdG9yLnRlbXBEZXN0aW5hdGlvbihk
c3QpOwogICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXROb2RlKHRlbXBEc3QuZ2V0KCksIG1fcmln
aHQpOwotICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRNb3ZlKGxvY2FsLmdldCgpLCB0ZW1wRHN0
LmdldCgpKTsKLSAgICAgICAgICAgIGdlbmVyYXRvci5pbnZhbGlkYXRlRm9ySW5Db250ZXh0Rm9y
TG9jYWwobG9jYWwuZ2V0KCkpOworICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRNb3ZlKGxvY2Fs
LCB0ZW1wRHN0LmdldCgpKTsKKyAgICAgICAgICAgIGdlbmVyYXRvci5pbnZhbGlkYXRlRm9ySW5D
b250ZXh0Rm9yTG9jYWwobG9jYWwpOwogICAgICAgICAgICAgaWYgKGdlbmVyYXRvci52bSgpLT50
eXBlUHJvZmlsZXIoKSkKICAgICAgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdFR5cGVQcm9maWxl
ckV4cHJlc3Npb25JbmZvKGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAgICAgICAgICAgICBy
ZXR1cm4gZ2VuZXJhdG9yLm1vdmVUb0Rlc3RpbmF0aW9uSWZOZWVkZWQoZHN0LCB0ZW1wRHN0Lmdl
dCgpKTsKICAgICAgICAgfQotICAgICAgICBSZWdpc3RlcklEKiByZXN1bHQgPSBnZW5lcmF0b3Iu
ZW1pdE5vZGUobG9jYWwuZ2V0KCksIG1fcmlnaHQpOwotICAgICAgICBnZW5lcmF0b3IuaW52YWxp
ZGF0ZUZvckluQ29udGV4dEZvckxvY2FsKGxvY2FsLmdldCgpKTsKKyAgICAgICAgUmVnaXN0ZXJJ
RCogcmVzdWx0ID0gZ2VuZXJhdG9yLmVtaXROb2RlKGxvY2FsLCBtX3JpZ2h0KTsKKyAgICAgICAg
Z2VuZXJhdG9yLmludmFsaWRhdGVGb3JJbkNvbnRleHRGb3JMb2NhbChsb2NhbCk7CiAgICAgICAg
IHJldHVybiBnZW5lcmF0b3IubW92ZVRvRGVzdGluYXRpb25JZk5lZWRlZChkc3QsIHJlc3VsdCk7
CiAgICAgfQogCiAgICAgaWYgKGdlbmVyYXRvci5pc1N0cmljdE1vZGUoKSkKICAgICAgICAgZ2Vu
ZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5k
KCkpOwotICAgIFJlc29sdmVTY29wZUluZm8gcmVzb2x2ZVNjb3BlSW5mbzsKLSAgICBSZWZQdHI8
UmVnaXN0ZXJJRD4gc2NvcGUgPSBnZW5lcmF0b3IuZW1pdFJlc29sdmVTY29wZShudWxscHRyLCBt
X2lkZW50LCByZXNvbHZlU2NvcGVJbmZvKTsKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gc2NvcGUg
PSBnZW5lcmF0b3IuZW1pdFJlc29sdmVTY29wZShudWxscHRyLCB2YXIpOwogICAgIGlmIChkc3Qg
PT0gZ2VuZXJhdG9yLmlnbm9yZWRSZXN1bHQoKSkKICAgICAgICAgZHN0ID0gMDsKICAgICBSZWZQ
dHI8UmVnaXN0ZXJJRD4gcmVzdWx0ID0gZ2VuZXJhdG9yLmVtaXROb2RlKGRzdCwgbV9yaWdodCk7
CiAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgpLCBkaXZvdFN0YXJ0KCks
IGRpdm90RW5kKCkpOwotICAgIFJlZ2lzdGVySUQqIHJldHVyblJlc3VsdCA9IGdlbmVyYXRvci5l
bWl0UHV0VG9TY29wZShzY29wZS5nZXQoKSwgbV9pZGVudCwgcmVzdWx0LmdldCgpLCBnZW5lcmF0
b3IuaXNTdHJpY3RNb2RlKCkgPyBUaHJvd0lmTm90Rm91bmQgOiBEb05vdFRocm93SWZOb3RGb3Vu
ZCwgcmVzb2x2ZVNjb3BlSW5mbyk7CisgICAgUmVnaXN0ZXJJRCogcmV0dXJuUmVzdWx0ID0gZ2Vu
ZXJhdG9yLmVtaXRQdXRUb1Njb3BlKHNjb3BlLmdldCgpLCB2YXIsIHJlc3VsdC5nZXQoKSwgZ2Vu
ZXJhdG9yLmlzU3RyaWN0TW9kZSgpID8gVGhyb3dJZk5vdEZvdW5kIDogRG9Ob3RUaHJvd0lmTm90
Rm91bmQpOwogICAgIGlmIChnZW5lcmF0b3Iudm0oKS0+dHlwZVByb2ZpbGVyKCkpIHsKLSAgICAg
ICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlVHlwZShyZXN1bHQuZ2V0KCksIHJlc29sdmVTY29wZUlu
Zm8uaXNMb2NhbCgpID8gUHJvZmlsZVR5cGVCeXRlY29kZVB1dFRvTG9jYWxTY29wZSA6IFByb2Zp
bGVUeXBlQnl0ZWNvZGVQdXRUb1Njb3BlLCAmbV9pZGVudCk7CisgICAgICAgIGdlbmVyYXRvci5l
bWl0UHJvZmlsZVR5cGUocmVzdWx0LmdldCgpLCB2YXIuaXNSZXNvbHZlZCgpID8gUHJvZmlsZVR5
cGVCeXRlY29kZVB1dFRvTG9jYWxTY29wZSA6IFByb2ZpbGVUeXBlQnl0ZWNvZGVQdXRUb1Njb3Bl
LCAmbV9pZGVudCk7CiAgICAgICAgIGdlbmVyYXRvci5lbWl0VHlwZVByb2ZpbGVyRXhwcmVzc2lv
bkluZm8oZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKICAgICB9IAogICAgIHJldHVybiByZXR1
cm5SZXN1bHQ7CkBAIC0xNzA4LDE4ICsxNzA4LDE5IEBAIFJlZ2lzdGVySUQqIENvbW1hTm9kZTo6
ZW1pdEJ5dGVjb2RlKEJ5dGUKIFJlZ2lzdGVySUQqIENvbnN0RGVjbE5vZGU6OmVtaXRDb2RlU2lu
Z2xlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IpCiB7CiAgICAgLy8gRklYTUU6IFRoaXMg
Y29kZSBkb2VzIG5vdCBtYXRjaCB0aGUgYmVoYXZpb3Igb2YgY29uc3QgaW4gRmlyZWZveC4KLSAg
ICBpZiAoTG9jYWwgbG9jYWwgPSBnZW5lcmF0b3IuY29uc3RMb2NhbChtX2lkZW50KSkgeworICAg
IFZhcmlhYmxlIHZhciA9IGdlbmVyYXRvci52YXJpYWJsZShtX2lkZW50KTsKKyAgICBpZiAoUmVn
aXN0ZXJJRCogbG9jYWwgPSB2YXIubG9jYWwoKSkgewogICAgICAgICBpZiAoIW1faW5pdCkKLSAg
ICAgICAgICAgIHJldHVybiBsb2NhbC5nZXQoKTsKKyAgICAgICAgICAgIHJldHVybiBsb2NhbDsK
IAogICAgICAgICAvLyBGSVhNRTogTWF5YmUgY2FsbCBlbWl0RXhwcmVzc2lvbkluZm8gaGVyZS4K
LSAgICAgICAgaWYgKGxvY2FsLmlzU3BlY2lhbCgpIHx8IGdlbmVyYXRvci52bSgpLT50eXBlUHJv
ZmlsZXIoKSkgeworICAgICAgICBpZiAodmFyLmlzU3BlY2lhbCgpIHx8IGdlbmVyYXRvci52bSgp
LT50eXBlUHJvZmlsZXIoKSkgewogICAgICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHRlbXBE
c3QgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7CiAgICAgICAgICAgICBnZW5lcmF0b3IuZW1p
dE5vZGUodGVtcERzdC5nZXQoKSwgbV9pbml0KTsKLSAgICAgICAgICAgIHJldHVybiBnZW5lcmF0
b3IuZW1pdE1vdmUobG9jYWwuZ2V0KCksIHRlbXBEc3QuZ2V0KCkpOworICAgICAgICAgICAgcmV0
dXJuIGdlbmVyYXRvci5lbWl0TW92ZShsb2NhbCwgdGVtcERzdC5nZXQoKSk7CiAgICAgICAgIH0K
ICAgICAgICAgCi0gICAgICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdE5vZGUobG9jYWwuZ2V0KCks
IG1faW5pdCk7CisgICAgICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdE5vZGUobG9jYWwsIG1faW5p
dCk7CiAgICAgfQogCiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHZhbHVlID0gbV9pbml0ID8gZ2Vu
ZXJhdG9yLmVtaXROb2RlKG1faW5pdCkgOiBnZW5lcmF0b3IuZW1pdExvYWQoMCwganNVbmRlZmlu
ZWQoKSk7CkBAIC0xNzI4LDE4ICsxNzI5LDE2IEBAIFJlZ2lzdGVySUQqIENvbnN0RGVjbE5vZGU6
OmVtaXRDb2RlU2luZ2wKICAgICAgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0SW5pdEdsb2JhbENv
bnN0KG1faWRlbnQsIHZhbHVlLmdldCgpKTsKIAogICAgIGlmIChnZW5lcmF0b3IuY29kZVR5cGUo
KSAhPSBFdmFsQ29kZSkgewotCi0gICAgICAgIFJlc29sdmVTY29wZUluZm8gcmVzb2x2ZVNjb3Bl
SW5mbzsKLSAgICAgICAgaWYgKFJlZlB0cjxSZWdpc3RlcklEPiBzY29wZSA9IGdlbmVyYXRvci5l
bWl0UmVzb2x2ZUNvbnN0YW50TG9jYWwoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBtX2lkZW50
LCByZXNvbHZlU2NvcGVJbmZvKSkKLSAgICAgICAgICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdFB1
dFRvU2NvcGUoc2NvcGUuZ2V0KCksIG1faWRlbnQsIHZhbHVlLmdldCgpLCBEb05vdFRocm93SWZO
b3RGb3VuZCwgcmVzb2x2ZVNjb3BlSW5mbyk7Ci0KLSAgICAgICAgcmV0dXJuIHZhbHVlLmdldCgp
OworICAgICAgICBpZiAoIXZhci5pc1Jlc29sdmVkKCkpCisgICAgICAgICAgICByZXR1cm4gdmFs
dWUuZ2V0KCk7CisgICAgICAgIAorICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gc2NvcGUgPSBn
ZW5lcmF0b3IuZW1pdFJlc29sdmVTY29wZShnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIHZhcik7
CisgICAgICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdFB1dFRvU2NvcGUoc2NvcGUuZ2V0KCksIHZh
ciwgdmFsdWUuZ2V0KCksIERvTm90VGhyb3dJZk5vdEZvdW5kKTsKICAgICB9CiAKICAgICAvLyBG
SVhNRTogVGhpcyB3aWxsIHJlc3VsdCBpbiBpbmNvcnJlY3QgYXNzaWdubWVudCBpZiBtX2lkZW50
IGV4aXN0cyBpbiBhbiBpbnRlcnZlbmluZyB3aXRoIHNjb3BlLgotICAgIFJlc29sdmVTY29wZUlu
Zm8gcmVzb2x2ZVNjb3BlSW5mbzsKLSAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gc2NvcGUgPSBnZW5l
cmF0b3IuZW1pdFJlc29sdmVTY29wZShudWxscHRyLCBtX2lkZW50LCByZXNvbHZlU2NvcGVJbmZv
KTsKLSAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRQdXRUb1Njb3BlKHNjb3BlLmdldCgpLCBtX2lk
ZW50LCB2YWx1ZS5nZXQoKSwgRG9Ob3RUaHJvd0lmTm90Rm91bmQsIHJlc29sdmVTY29wZUluZm8p
OworICAgIFJlZlB0cjxSZWdpc3RlcklEPiBzY29wZSA9IGdlbmVyYXRvci5lbWl0UmVzb2x2ZVNj
b3BlKG51bGxwdHIsIHZhcik7CisgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0UHV0VG9TY29wZShz
Y29wZS5nZXQoKSwgdmFyLCB2YWx1ZS5nZXQoKSwgRG9Ob3RUaHJvd0lmTm90Rm91bmQpOwogfQog
CiBSZWdpc3RlcklEKiBDb25zdERlY2xOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0
b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCopCkBAIC0xODMxLDEzICsxODMwLDEzIEBAIFJlZ2lz
dGVySUQqIEVtcHR5VmFyRXhwcmVzc2lvbjo6ZW1pdEJ5dGUKICAgICBpZiAoIWdlbmVyYXRvci52
bSgpLT50eXBlUHJvZmlsZXIoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBpZiAo
TG9jYWwgbG9jYWwgPSBnZW5lcmF0b3IubG9jYWwobV9pZGVudCkpCi0gICAgICAgIGdlbmVyYXRv
ci5lbWl0UHJvZmlsZVR5cGUobG9jYWwuZ2V0KCksIFByb2ZpbGVUeXBlQnl0ZWNvZGVIYXNHbG9i
YWxJRCwgbnVsbHB0cik7CisgICAgVmFyaWFibGUgdmFyID0gZ2VuZXJhdG9yLnZhcmlhYmxlKG1f
aWRlbnQpOworICAgIGlmIChSZWdpc3RlcklEKiBsb2NhbCA9IHZhci5sb2NhbCgpKQorICAgICAg
ICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlKGxvY2FsLCBQcm9maWxlVHlwZUJ5dGVjb2RlSGFz
R2xvYmFsSUQsIG51bGxwdHIpOwogICAgIGVsc2UgewotICAgICAgICBSZXNvbHZlU2NvcGVJbmZv
IHJlc29sdmVTY29wZUluZm87Ci0gICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBzY29wZSA9IGdl
bmVyYXRvci5lbWl0UmVzb2x2ZVNjb3BlKG51bGxwdHIsIG1faWRlbnQsIHJlc29sdmVTY29wZUlu
Zm8pOwotICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gdmFsdWUgPSBnZW5lcmF0b3IuZW1pdEdl
dEZyb21TY29wZShnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIHNjb3BlLmdldCgpLCBtX2lkZW50
LCBEb05vdFRocm93SWZOb3RGb3VuZCwgcmVzb2x2ZVNjb3BlSW5mbyk7Ci0gICAgICAgIGdlbmVy
YXRvci5lbWl0UHJvZmlsZVR5cGUodmFsdWUuZ2V0KCksIHJlc29sdmVTY29wZUluZm8uaXNMb2Nh
bCgpID8gUHJvZmlsZVR5cGVCeXRlY29kZUdldEZyb21Mb2NhbFNjb3BlIDogUHJvZmlsZVR5cGVC
eXRlY29kZUdldEZyb21TY29wZSwgJm1faWRlbnQpOworICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJ
RD4gc2NvcGUgPSBnZW5lcmF0b3IuZW1pdFJlc29sdmVTY29wZShudWxscHRyLCB2YXIpOworICAg
ICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gdmFsdWUgPSBnZW5lcmF0b3IuZW1pdEdldEZyb21TY29w
ZShnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIHNjb3BlLmdldCgpLCB2YXIsIERvTm90VGhyb3dJ
Zk5vdEZvdW5kKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlVHlwZSh2YWx1ZS5nZXQo
KSwgcmVzb2x2ZVNjb3BlSW5mby5pc1Jlc29sdmVkKCkgPyBQcm9maWxlVHlwZUJ5dGVjb2RlR2V0
RnJvbUxvY2FsU2NvcGUgOiBQcm9maWxlVHlwZUJ5dGVjb2RlR2V0RnJvbVNjb3BlLCAmbV9pZGVu
dCk7CiAgICAgfQogCiAgICAgZ2VuZXJhdG9yLmVtaXRUeXBlUHJvZmlsZXJFeHByZXNzaW9uSW5m
byhwb3NpdGlvbigpLCBKU1RleHRQb3NpdGlvbigtMSwgcG9zaXRpb24oKS5vZmZzZXQgKyBtX2lk
ZW50Lmxlbmd0aCgpLCAtMSkpOwpAQCAtMjAwNyw4ICsyMDA2LDcgQEAgUmVnaXN0ZXJJRCogRm9y
SW5Ob2RlOjp0cnlHZXRCb3VuZExvY2FsKAogewogICAgIGlmIChtX2xleHByLT5pc1Jlc29sdmVO
b2RlKCkpIHsKICAgICAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBzdGF0aWNfY2FzdDxS
ZXNvbHZlTm9kZSo+KG1fbGV4cHIpLT5pZGVudGlmaWVyKCk7Ci0gICAgICAgIExvY2FsIGxvY2Fs
ID0gZ2VuZXJhdG9yLmxvY2FsKGlkZW50KTsKLSAgICAgICAgcmV0dXJuIGxvY2FsLmdldCgpOwor
ICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLnZhcmlhYmxlKGlkZW50KS5sb2NhbCgpOwogICAgIH0K
IAogICAgIGlmIChtX2xleHByLT5pc0RlY29uc3RydWN0aW9uTm9kZSgpKSB7CkBAIC0yMDE5LDEw
ICsyMDE3LDEwIEBAIFJlZ2lzdGVySUQqIEZvckluTm9kZTo6dHJ5R2V0Qm91bmRMb2NhbCgKIAog
ICAgICAgICBhdXRvIHNpbXBsZUJpbmRpbmcgPSBzdGF0aWNfY2FzdDxCaW5kaW5nTm9kZSo+KGJp
bmRpbmcpOwogICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IHNpbXBsZUJpbmRpbmct
PmJvdW5kUHJvcGVydHkoKTsKLSAgICAgICAgTG9jYWwgbG9jYWwgPSBnZW5lcmF0b3IubG9jYWwo
aWRlbnQpOwotICAgICAgICBpZiAobG9jYWwuaXNTcGVjaWFsKCkpCisgICAgICAgIFZhcmlhYmxl
IHZhciA9IGdlbmVyYXRvci52YXJpYWJsZShpZGVudCk7CisgICAgICAgIGlmICh2YXIuaXNTcGVj
aWFsKCkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgcmV0dXJuIGxvY2Fs
LmdldCgpOworICAgICAgICByZXR1cm4gdmFyLmxvY2FsKCk7CiAgICAgfQogCiAgICAgcmV0dXJu
IG51bGxwdHI7CkBAIC0yMDMyLDE4ICsyMDMwLDE3IEBAIHZvaWQgRm9ySW5Ob2RlOjplbWl0TG9v
cEhlYWRlcihCeXRlY29kZUcKIHsKICAgICBpZiAobV9sZXhwci0+aXNSZXNvbHZlTm9kZSgpKSB7
CiAgICAgICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gc3RhdGljX2Nhc3Q8UmVzb2x2ZU5v
ZGUqPihtX2xleHByKS0+aWRlbnRpZmllcigpOwotICAgICAgICBMb2NhbCBsb2NhbCA9IGdlbmVy
YXRvci5sb2NhbChpZGVudCk7Ci0gICAgICAgIGlmIChsb2NhbC5nZXQoKSkKLSAgICAgICAgICAg
IGdlbmVyYXRvci5lbWl0TW92ZShsb2NhbC5nZXQoKSwgcHJvcGVydHlOYW1lKTsKKyAgICAgICAg
VmFyaWFibGUgdmFyID0gZ2VuZXJhdG9yLnZhcmlhYmxlKGlkZW50KTsKKyAgICAgICAgaWYgKFJl
Z2lzdGVySUQqIGxvY2FsID0gdmFyLmxvY2FsKCkpCisgICAgICAgICAgICBnZW5lcmF0b3IuZW1p
dE1vdmUobG9jYWwsIHByb3BlcnR5TmFtZSk7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAg
aWYgKGdlbmVyYXRvci5pc1N0cmljdE1vZGUoKSkKICAgICAgICAgICAgICAgICBnZW5lcmF0b3Iu
ZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7Ci0g
ICAgICAgICAgICBSZXNvbHZlU2NvcGVJbmZvIHJlc29sdmVTY29wZUluZm87Ci0gICAgICAgICAg
ICBSZWdpc3RlcklEKiBzY29wZSA9IGdlbmVyYXRvci5lbWl0UmVzb2x2ZVNjb3BlKG51bGxwdHIs
IGlkZW50LCByZXNvbHZlU2NvcGVJbmZvKTsKKyAgICAgICAgICAgIFJlZ2lzdGVySUQqIHNjb3Bl
ID0gZ2VuZXJhdG9yLmVtaXRSZXNvbHZlU2NvcGUobnVsbHB0ciwgdmFyKTsKICAgICAgICAgICAg
IGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZv
dEVuZCgpKTsKLSAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0UHV0VG9TY29wZShzY29wZSwgaWRl
bnQsIHByb3BlcnR5TmFtZSwgZ2VuZXJhdG9yLmlzU3RyaWN0TW9kZSgpID8gVGhyb3dJZk5vdEZv
dW5kIDogRG9Ob3RUaHJvd0lmTm90Rm91bmQsIHJlc29sdmVTY29wZUluZm8pOworICAgICAgICAg
ICAgZ2VuZXJhdG9yLmVtaXRQdXRUb1Njb3BlKHNjb3BlLCB2YXIsIHByb3BlcnR5TmFtZSwgZ2Vu
ZXJhdG9yLmlzU3RyaWN0TW9kZSgpID8gVGhyb3dJZk5vdEZvdW5kIDogRG9Ob3RUaHJvd0lmTm90
Rm91bmQpOwogICAgICAgICAgICAgaWYgKGdlbmVyYXRvci52bSgpLT50eXBlUHJvZmlsZXIoKSkK
LSAgICAgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlKHByb3BlcnR5TmFtZSwg
cmVzb2x2ZVNjb3BlSW5mby5pc0xvY2FsKCkgPyBQcm9maWxlVHlwZUJ5dGVjb2RlUHV0VG9Mb2Nh
bFNjb3BlIDogUHJvZmlsZVR5cGVCeXRlY29kZVB1dFRvU2NvcGUsICZpZGVudCk7CisgICAgICAg
ICAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlVHlwZShwcm9wZXJ0eU5hbWUsIHZhci5pc1Jl
c29sdmVkKCkgPyBQcm9maWxlVHlwZUJ5dGVjb2RlUHV0VG9Mb2NhbFNjb3BlIDogUHJvZmlsZVR5
cGVCeXRlY29kZVB1dFRvU2NvcGUsICZpZGVudCk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGdl
bmVyYXRvci52bSgpLT50eXBlUHJvZmlsZXIoKSkKICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0
VHlwZVByb2ZpbGVyRXhwcmVzc2lvbkluZm8obV9sZXhwci0+cG9zaXRpb24oKSwgSlNUZXh0UG9z
aXRpb24oLTEsIG1fbGV4cHItPnBvc2l0aW9uKCkub2Zmc2V0ICsgaWRlbnQubGVuZ3RoKCksIC0x
KSk7CkBAIC0yMDg0LDEyICsyMDgxLDEyIEBAIHZvaWQgRm9ySW5Ob2RlOjplbWl0TG9vcEhlYWRl
cihCeXRlY29kZUcKIAogICAgICAgICBhdXRvIHNpbXBsZUJpbmRpbmcgPSBzdGF0aWNfY2FzdDxC
aW5kaW5nTm9kZSo+KGJpbmRpbmcpOwogICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9
IHNpbXBsZUJpbmRpbmctPmJvdW5kUHJvcGVydHkoKTsKLSAgICAgICAgTG9jYWwgbG9jYWwgPSBn
ZW5lcmF0b3IubG9jYWwoaWRlbnQpOwotICAgICAgICBpZiAoIWxvY2FsLmdldCgpIHx8IGxvY2Fs
LmlzU3BlY2lhbCgpKSB7CisgICAgICAgIFZhcmlhYmxlIHZhciA9IGdlbmVyYXRvci52YXJpYWJs
ZShpZGVudCk7CisgICAgICAgIGlmICghdmFyLmxvY2FsKCkgfHwgdmFyLmlzU3BlY2lhbCgpKSB7
CiAgICAgICAgICAgICBhc3NpZ25Ob2RlLT5iaW5kaW5ncygpLT5iaW5kVmFsdWUoZ2VuZXJhdG9y
LCBwcm9wZXJ0eU5hbWUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAg
IGdlbmVyYXRvci5lbWl0TW92ZShsb2NhbC5nZXQoKSwgcHJvcGVydHlOYW1lKTsKKyAgICAgICAg
Z2VuZXJhdG9yLmVtaXRNb3ZlKHZhci5sb2NhbCgpLCBwcm9wZXJ0eU5hbWUpOwogICAgICAgICBp
ZiAoZ2VuZXJhdG9yLnZtKCktPnR5cGVQcm9maWxlcigpKQogICAgICAgICAgICAgZ2VuZXJhdG9y
LmVtaXRUeXBlUHJvZmlsZXJFeHByZXNzaW9uSW5mbyhzaW1wbGVCaW5kaW5nLT5kaXZvdFN0YXJ0
KCksIHNpbXBsZUJpbmRpbmctPmRpdm90RW5kKCkpOwogICAgICAgICByZXR1cm47CkBAIC0yMjU3
LDE3ICsyMjU0LDE3IEBAIHZvaWQgRm9yT2ZOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW4K
ICAgICB7CiAgICAgICAgIGlmIChtX2xleHByLT5pc1Jlc29sdmVOb2RlKCkpIHsKICAgICAgICAg
ICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gc3RhdGljX2Nhc3Q8UmVzb2x2ZU5vZGUqPiht
X2xleHByKS0+aWRlbnRpZmllcigpOwotICAgICAgICAgICAgaWYgKExvY2FsIGxvY2FsID0gZ2Vu
ZXJhdG9yLmxvY2FsKGlkZW50KSkKLSAgICAgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdE1vdmUo
bG9jYWwuZ2V0KCksIHZhbHVlKTsKKyAgICAgICAgICAgIFZhcmlhYmxlIHZhciA9IGdlbmVyYXRv
ci52YXJpYWJsZShpZGVudCk7CisgICAgICAgICAgICBpZiAoUmVnaXN0ZXJJRCogbG9jYWwgPSB2
YXIubG9jYWwoKSkKKyAgICAgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdE1vdmUobG9jYWwsIHZh
bHVlKTsKICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgIGlmIChnZW5lcmF0b3Iu
aXNTdHJpY3RNb2RlKCkpCiAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0RXhwcmVz
c2lvbkluZm8oZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKLSAgICAgICAgICAg
ICAgICBSZXNvbHZlU2NvcGVJbmZvIHJlc29sdmVTY29wZUluZm87Ci0gICAgICAgICAgICAgICAg
UmVnaXN0ZXJJRCogc2NvcGUgPSBnZW5lcmF0b3IuZW1pdFJlc29sdmVTY29wZShudWxscHRyLCBp
ZGVudCwgcmVzb2x2ZVNjb3BlSW5mbyk7CisgICAgICAgICAgICAgICAgUmVnaXN0ZXJJRCogc2Nv
cGUgPSBnZW5lcmF0b3IuZW1pdFJlc29sdmVTY29wZShudWxscHRyLCB2YXIpOwogICAgICAgICAg
ICAgICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgZGl2b3RTdGFydCgp
LCBkaXZvdEVuZCgpKTsKLSAgICAgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdFB1dFRvU2NvcGUo
c2NvcGUsIGlkZW50LCB2YWx1ZSwgZ2VuZXJhdG9yLmlzU3RyaWN0TW9kZSgpID8gVGhyb3dJZk5v
dEZvdW5kIDogRG9Ob3RUaHJvd0lmTm90Rm91bmQsIHJlc29sdmVTY29wZUluZm8pOworICAgICAg
ICAgICAgICAgIGdlbmVyYXRvci5lbWl0UHV0VG9TY29wZShzY29wZSwgdmFyLCB2YWx1ZSwgZ2Vu
ZXJhdG9yLmlzU3RyaWN0TW9kZSgpID8gVGhyb3dJZk5vdEZvdW5kIDogRG9Ob3RUaHJvd0lmTm90
Rm91bmQpOwogICAgICAgICAgICAgICAgIGlmIChnZW5lcmF0b3Iudm0oKS0+dHlwZVByb2ZpbGVy
KCkpCi0gICAgICAgICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZVR5cGUodmFsdWUs
IHJlc29sdmVTY29wZUluZm8uaXNMb2NhbCgpID8gUHJvZmlsZVR5cGVCeXRlY29kZVB1dFRvTG9j
YWxTY29wZSA6IFByb2ZpbGVUeXBlQnl0ZWNvZGVQdXRUb1Njb3BlLCAmaWRlbnQpOworICAgICAg
ICAgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlKHZhbHVlLCB2YXIuaXNSZXNv
bHZlZCgpID8gUHJvZmlsZVR5cGVCeXRlY29kZVB1dFRvTG9jYWxTY29wZSA6IFByb2ZpbGVUeXBl
Qnl0ZWNvZGVQdXRUb1Njb3BlLCAmaWRlbnQpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAg
aWYgKGdlbmVyYXRvci52bSgpLT50eXBlUHJvZmlsZXIoKSkKICAgICAgICAgICAgICAgICBnZW5l
cmF0b3IuZW1pdFR5cGVQcm9maWxlckV4cHJlc3Npb25JbmZvKG1fbGV4cHItPnBvc2l0aW9uKCks
IEpTVGV4dFBvc2l0aW9uKC0xLCBtX2xleHByLT5wb3NpdGlvbigpLm9mZnNldCArIGlkZW50Lmxl
bmd0aCgpLCAtMSkpOwpAQCAtMjg1MiwyNCArMjg0OSw2IEBAIHZvaWQgQXJyYXlQYXR0ZXJuTm9k
ZTo6YmluZFZhbHVlKEJ5dGVjb2QKIAogUmVnaXN0ZXJJRCogQXJyYXlQYXR0ZXJuTm9kZTo6ZW1p
dERpcmVjdEJpbmRpbmcoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCog
ZHN0LCBFeHByZXNzaW9uTm9kZSogcmhzKQogewotICAgIGlmIChyaHMtPmlzUmVzb2x2ZU5vZGUo
KQotICAgICAgICAmJiBnZW5lcmF0b3Iud2lsbFJlc29sdmVUb0FyZ3VtZW50c1JlZ2lzdGVyKHN0
YXRpY19jYXN0PFJlc29sdmVOb2RlKj4ocmhzKS0+aWRlbnRpZmllcigpKQotICAgICAgICAmJiBn
ZW5lcmF0b3IuaGFzU2FmZUxvY2FsQXJndW1lbnRzUmVnaXN0ZXIoKSYmICFnZW5lcmF0b3Iuc3lt
Ym9sVGFibGUoKS5zbG93QXJndW1lbnRzKCkpIHsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBtX3RhcmdldFBhdHRlcm5zLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgICAgICBhdXRvIHRh
cmdldCA9IG1fdGFyZ2V0UGF0dGVybnNbaV07Ci0gICAgICAgICAgICBpZiAoIXRhcmdldCkKLSAg
ICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgUmVmUHRy
PFJlZ2lzdGVySUQ+IHRlbXAgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7Ci0gICAgICAgICAg
ICBnZW5lcmF0b3IuZW1pdExvYWQodGVtcC5nZXQoKSwganNOdW1iZXIoaSkpOwotICAgICAgICAg
ICAgZ2VuZXJhdG9yLmVtaXRHZXRBcmd1bWVudEJ5VmFsKHRlbXAuZ2V0KCksIGdlbmVyYXRvci51
bmNoZWNrZWRMb2NhbEFyZ3VtZW50c1JlZ2lzdGVyKCksIHRlbXAuZ2V0KCkpOwotICAgICAgICAg
ICAgdGFyZ2V0LT5iaW5kVmFsdWUoZ2VuZXJhdG9yLCB0ZW1wLmdldCgpKTsKLSAgICAgICAgfQot
ICAgICAgICBpZiAoZHN0ID09IGdlbmVyYXRvci5pZ25vcmVkUmVzdWx0KCkgfHwgIWRzdCkKLSAg
ICAgICAgICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdExvYWQoZ2VuZXJhdG9yLmZpbmFsRGVzdGlu
YXRpb24oZHN0KSwganNVbmRlZmluZWQoKSk7Ci0gICAgICAgIExvY2FsIGxvY2FsID0gZ2VuZXJh
dG9yLmxvY2FsKGdlbmVyYXRvci52bSgpLT5wcm9wZXJ0eU5hbWVzLT5hcmd1bWVudHMpOwotICAg
ICAgICByZXR1cm4gZ2VuZXJhdG9yLm1vdmVUb0Rlc3RpbmF0aW9uSWZOZWVkZWQoZHN0LCBsb2Nh
bC5nZXQoKSk7Ci0gICAgfQogICAgIGlmICghcmhzLT5pc1NpbXBsZUFycmF5KCkpCiAgICAgICAg
IHJldHVybiAwOwogCkBAIC0yOTU5LDI0ICsyOTM4LDI0IEBAIHZvaWQgT2JqZWN0UGF0dGVybk5v
ZGU6OmNvbGxlY3RCb3VuZElkZW4KIAogdm9pZCBCaW5kaW5nTm9kZTo6YmluZFZhbHVlKEJ5dGVj
b2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIHZhbHVlKSBjb25zdAogewotICAg
IGlmIChMb2NhbCBsb2NhbCA9IGdlbmVyYXRvci5sb2NhbChtX2JvdW5kUHJvcGVydHkpKSB7Ci0g
ICAgICAgIGlmIChsb2NhbC5pc1JlYWRPbmx5KCkpIHsKKyAgICBWYXJpYWJsZSB2YXIgPSBnZW5l
cmF0b3IudmFyaWFibGUobV9ib3VuZFByb3BlcnR5KTsKKyAgICBpZiAoUmVnaXN0ZXJJRCogbG9j
YWwgPSB2YXIubG9jYWwoKSkgeworICAgICAgICBpZiAodmFyLmlzUmVhZE9ubHkoKSkgewogICAg
ICAgICAgICAgZ2VuZXJhdG9yLmVtaXRSZWFkT25seUV4Y2VwdGlvbklmTmVlZGVkKCk7CiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRNb3ZlKGxv
Y2FsLmdldCgpLCB2YWx1ZSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0TW92ZShsb2NhbCwgdmFs
dWUpOwogICAgICAgICBpZiAoZ2VuZXJhdG9yLnZtKCktPnR5cGVQcm9maWxlcigpKQogICAgICAg
ICAgICAgZ2VuZXJhdG9yLmVtaXRUeXBlUHJvZmlsZXJFeHByZXNzaW9uSW5mbyhkaXZvdFN0YXJ0
KCksIGRpdm90RW5kKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlmIChnZW5lcmF0
b3IuaXNTdHJpY3RNb2RlKCkpCiAgICAgICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8o
ZGl2b3RFbmQoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKLSAgICBSZXNvbHZlU2NvcGVJ
bmZvIHJlc29sdmVTY29wZUluZm87Ci0gICAgUmVnaXN0ZXJJRCogc2NvcGUgPSBnZW5lcmF0b3Iu
ZW1pdFJlc29sdmVTY29wZShudWxscHRyLCBtX2JvdW5kUHJvcGVydHksIHJlc29sdmVTY29wZUlu
Zm8pOworICAgIFJlZ2lzdGVySUQqIHNjb3BlID0gZ2VuZXJhdG9yLmVtaXRSZXNvbHZlU2NvcGUo
bnVsbHB0ciwgdmFyKTsKICAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90RW5k
KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7Ci0gICAgZ2VuZXJhdG9yLmVtaXRQdXRUb1Nj
b3BlKHNjb3BlLCBtX2JvdW5kUHJvcGVydHksIHZhbHVlLCBnZW5lcmF0b3IuaXNTdHJpY3RNb2Rl
KCkgPyBUaHJvd0lmTm90Rm91bmQgOiBEb05vdFRocm93SWZOb3RGb3VuZCwgcmVzb2x2ZVNjb3Bl
SW5mbyk7CisgICAgZ2VuZXJhdG9yLmVtaXRQdXRUb1Njb3BlKHNjb3BlLCB2YXIsIHZhbHVlLCBn
ZW5lcmF0b3IuaXNTdHJpY3RNb2RlKCkgPyBUaHJvd0lmTm90Rm91bmQgOiBEb05vdFRocm93SWZO
b3RGb3VuZCk7CiAgICAgaWYgKGdlbmVyYXRvci52bSgpLT50eXBlUHJvZmlsZXIoKSkgewotICAg
ICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlKHZhbHVlLCByZXNvbHZlU2NvcGVJbmZvLmlz
TG9jYWwoKSA/IFByb2ZpbGVUeXBlQnl0ZWNvZGVQdXRUb0xvY2FsU2NvcGUgOiBQcm9maWxlVHlw
ZUJ5dGVjb2RlUHV0VG9TY29wZSwgJm1fYm91bmRQcm9wZXJ0eSk7CisgICAgICAgIGdlbmVyYXRv
ci5lbWl0UHJvZmlsZVR5cGUodmFsdWUsIHZhci5pc1Jlc29sdmVkKCkgPyBQcm9maWxlVHlwZUJ5
dGVjb2RlUHV0VG9Mb2NhbFNjb3BlIDogUHJvZmlsZVR5cGVCeXRlY29kZVB1dFRvU2NvcGUsICZt
X2JvdW5kUHJvcGVydHkpOwogICAgICAgICBnZW5lcmF0b3IuZW1pdFR5cGVQcm9maWxlckV4cHJl
c3Npb25JbmZvKGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAgICAgfQogICAgIHJldHVybjsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RIZWFwLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEhlYXAuaAkocmV2
aXNpb24gMTgwODc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEhl
YXAuaAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNiBAQCBuYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIERGRyB7CiAgICAgbWFjcm8oV29ybGQpIFwKICAgICBtYWNybyhTdGFjaykgXAogICAg
IG1hY3JvKEhlYXApIFwKLSAgICBtYWNybyhBcmd1bWVudHNfcmVnaXN0ZXJzKSBcCiAgICAgbWFj
cm8oQnV0dGVyZmx5X3B1YmxpY0xlbmd0aCkgXAogICAgIG1hY3JvKEJ1dHRlcmZseV92ZWN0b3JM
ZW5ndGgpIFwKICAgICBtYWNybyhHZXR0ZXJTZXR0ZXJfZ2V0dGVyKSBcCkBAIC02NSw3ICs2NCw4
IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICBtYWNybyhJbmRleGVkQ29u
dGlndW91c1Byb3BlcnRpZXMpIFwKICAgICBtYWNybyhJbmRleGVkQXJyYXlTdG9yYWdlUHJvcGVy
dGllcykgXAogICAgIG1hY3JvKEFycmF5U3RvcmFnZVByb3BlcnRpZXMpIFwKLSAgICBtYWNybyhW
YXJpYWJsZXMpIFwKKyAgICBtYWNybyhEaXJlY3RBcmd1bWVudHNQcm9wZXJ0aWVzKSBcCisgICAg
bWFjcm8oU2NvcGVQcm9wZXJ0aWVzKSBcCiAgICAgbWFjcm8oVHlwZWRBcnJheVByb3BlcnRpZXMp
IFwKICAgICBtYWNybyhIZWFwT2JqZWN0Q291bnQpIC8qIFVzZWQgdG8gcmVmbGVjdCB0aGUgZmFj
dCB0aGF0IHNvbWUgYWxsb2NhdGlvbnMgcmV2ZWFsIG9iamVjdCBpZGVudGl0eSAqL1wKICAgICBt
YWNybyhSZWdFeHBTdGF0ZSkgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
YnN0cmFjdEludGVycHJldGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVyLmgJKHJldmlzaW9uIDE4MDg3NSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xNDgsNyArMTQ4LDYgQEAgcHVibGljOgogICAgIAogcHJpdmF0ZToKICAgICB2b2lk
IGNsb2JiZXJXb3JsZChjb25zdCBDb2RlT3JpZ2luJiwgdW5zaWduZWQgaW5kZXhJbkJsb2NrKTsK
LSAgICB2b2lkIGNsb2JiZXJDYXB0dXJlZFZhcnMoY29uc3QgQ29kZU9yaWdpbiYpOwogICAgIAog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CiAgICAgdm9pZCBmb3JBbGxWYWx1ZXModW5z
aWduZWQgaW5kZXhJbkJsb2NrLCBGdW5jdG9yJik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCShy
ZXZpc2lvbiAxODA4NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0
SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMzAsNyArMTAzMCw4IEBA
IGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAgIH0g
ZWxzZQogICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KG1fZ3JhcGgsIG1fZ3JhcGgu
bV92bS5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgQXJyYXk6OkFyZ3VtZW50czoKKyAgICAgICAgY2FzZSBBcnJheTo6RGlyZWN0QXJndW1l
bnRzOgorICAgICAgICBjYXNlIEFycmF5OjpTY29wZWRBcmd1bWVudHM6CiAgICAgICAgICAgICBm
b3JOb2RlKG5vZGUpLm1ha2VIZWFwVG9wKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
Y2FzZSBBcnJheTo6SW50MzI6CkBAIC0xMzMzLDg3ICsxMzM0LDIwIEBAIGJvb2wgQWJzdHJhY3RJ
bnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICBjYXNlIFR5cGVkQXJyYXlXYXRjaHBvaW50
OgogICAgICAgICBicmVhazsKICAgICAKLSAgICBjYXNlIENyZWF0ZUFyZ3VtZW50czoKLSAgICAg
ICAgZm9yTm9kZShub2RlKSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBmb3JO
b2RlKG5vZGUpLmZpbHRlcih+U3BlY0VtcHR5KTsKLSAgICAgICAgZm9yTm9kZShub2RlKS5tZXJn
ZShTcGVjQXJndW1lbnRzKTsKKyAgICBjYXNlIENyZWF0ZURpcmVjdEFyZ3VtZW50czoKKyAgICAg
ICAgZm9yTm9kZShub2RlKS5zZXQobV9ncmFwaCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdEZv
cihub2RlLT5vcmlnaW4uc2VtYW50aWMpLT5kaXJlY3RBcmd1bWVudHNTdHJ1Y3R1cmUoKSk7CiAg
ICAgICAgIGJyZWFrOwogICAgICAgICAKLSAgICBjYXNlIFRlYXJPZmZBcmd1bWVudHM6Ci0gICAg
ICAgIC8vIERvZXMgbm90aGluZyB0aGF0IGlzIHVzZXItdmlzaWJsZS4KLSAgICAgICAgYnJlYWs7
Ci0KLSAgICBjYXNlIENoZWNrQXJndW1lbnRzTm90Q3JlYXRlZDoKLSAgICAgICAgaWYgKGlzRW1w
dHlTcGVjdWxhdGlvbigKLSAgICAgICAgICAgICAgICBtX3N0YXRlLnZhcmlhYmxlcygpLm9wZXJh
bmQoCi0gICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguYXJndW1lbnRzUmVnaXN0ZXJGb3Iobm9k
ZS0+b3JpZ2luLnNlbWFudGljKS5vZmZzZXQoKSkubV90eXBlKSkKLSAgICAgICAgICAgIG1fc3Rh
dGUuc2V0Rm91bmRDb25zdGFudHModHJ1ZSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgICAKLSAg
ICBjYXNlIEdldE15QXJndW1lbnRzTGVuZ3RoOgotICAgICAgICAvLyBXZSBrbm93IHRoYXQgdGhp
cyBleGVjdXRhYmxlIGRvZXMgbm90IGVzY2FwZSBpdHMgYXJndW1lbnRzLCBzbyB3ZSBjYW4gb3B0
aW1pemUKLSAgICAgICAgLy8gdGhlIGFyZ3VtZW50cyBhIGJpdC4gTm90ZSB0aGF0IHRoaXMgaXMg
bm90IHN1ZmZpY2llbnQgdG8gZm9yY2UgY29uc3RhbnQgZm9sZGluZwotICAgICAgICAvLyBvZiBH
ZXRNeUFyZ3VtZW50c0xlbmd0aCwgYmVjYXVzZSBHZXRNeUFyZ3VtZW50c0xlbmd0aCBpcyBhIGNs
b2JiZXJpbmcgb3BlcmF0aW9uLgotICAgICAgICAvLyBXZSBwZXJmb3JtIGZ1cnRoZXIgb3B0aW1p
emF0aW9ucyBvbiB0aGlzIGxhdGVyIG9uLgotICAgICAgICBpZiAobm9kZS0+b3JpZ2luLnNlbWFu
dGljLmlubGluZUNhbGxGcmFtZQotICAgICAgICAgICAgJiYgIW5vZGUtPm9yaWdpbi5zZW1hbnRp
Yy5pbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKSB7Ci0gICAgICAgICAgICBzZXRDb25zdGFu
dCgKLSAgICAgICAgICAgICAgICBub2RlLCBqc051bWJlcihub2RlLT5vcmlnaW4uc2VtYW50aWMu
aW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpIC0gMSkpOwotICAgICAgICAgICAgbV9z
dGF0ZS5zZXREaWRDbG9iYmVyKHRydWUpOyAvLyBQcmV0ZW5kIHRoYXQgd2UgY2xvYmJlcmVkIHRv
IHByZXZlbnQgY29uc3RhbnQgZm9sZGluZy4KLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBm
b3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0ludDMyKTsKKyAgICBjYXNlIENyZWF0ZVNjb3BlZEFy
Z3VtZW50czoKKyAgICAgICAgZm9yTm9kZShub2RlKS5zZXQobV9ncmFwaCwgbV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpLT5zY29wZWRBcmd1bWVudHNT
dHJ1Y3R1cmUoKSk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKLSAgICBjYXNlIEdldE15QXJn
dW1lbnRzTGVuZ3RoU2FmZToKLSAgICAgICAgLy8gVGhpcyBwb3RlbnRpYWxseSBjbG9iYmVycyBh
bGwgc3RydWN0dXJlcyBpZiB0aGUgYXJndW1lbnRzIG9iamVjdCBoYWQgYSBnZXR0ZXIKLSAgICAg
ICAgLy8gaW5zdGFsbGVkIG9uIHRoZSBsZW5ndGggcHJvcGVydHkuCi0gICAgICAgIGNsb2JiZXJX
b3JsZChub2RlLT5vcmlnaW4uc2VtYW50aWMsIGNsb2JiZXJMaW1pdCk7Ci0gICAgICAgIC8vIFdl
IGN1cnJlbnRseSBtYWtlIG5vIGd1YXJhbnRlZSBhYm91dCB3aGF0IHRoaXMgcmV0dXJucyBiZWNh
dXNlIGl0IGRvZXMgbm90Ci0gICAgICAgIC8vIHNwZWN1bGF0ZSB0aGF0IHRoZSBsZW5ndGggcHJv
cGVydHkgaXMgYWN0dWFsbHkgYSBsZW5ndGguCi0gICAgICAgIGZvck5vZGUobm9kZSkubWFrZUhl
YXBUb3AoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICAgIAotICAgIGNhc2UgR2V0TXlBcmd1bWVu
dEJ5VmFsOiB7Ci0gICAgICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0gbm9k
ZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZTsKLSAgICAgICAgSlNWYWx1ZSB2YWx1
ZSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdmFsdWU7Ci0gICAgICAgIGlmIChpbmxpbmVD
YWxsRnJhbWUgJiYgdmFsdWUgJiYgdmFsdWUuaXNJbnQzMigpKSB7Ci0gICAgICAgICAgICBpbnQz
Ml90IGluZGV4ID0gdmFsdWUuYXNJbnQzMigpOwotICAgICAgICAgICAgaWYgKGluZGV4ID49IDAK
LSAgICAgICAgICAgICAgICAmJiBzdGF0aWNfY2FzdDxzaXplX3Q+KGluZGV4ICsgMSkgPCBpbmxp
bmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCkpIHsKLSAgICAgICAgICAgICAgICBmb3JOb2Rl
KG5vZGUpID0gbV9zdGF0ZS52YXJpYWJsZXMoKS5vcGVyYW5kKAotICAgICAgICAgICAgICAgICAg
ICBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsKLSAgICAgICAgICAgICAgICAgICAgbV9n
cmFwaC5iYXNlbGluZUNvZGVCbG9ja0ZvcihpbmxpbmVDYWxsRnJhbWUpLT5hcmd1bWVudEluZGV4
QWZ0ZXJDYXB0dXJlKGluZGV4KSk7Ci0gICAgICAgICAgICAgICAgbV9zdGF0ZS5zZXRGb3VuZENv
bnN0YW50cyh0cnVlKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VIZWFwVG9wKCk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIH0KLSAgICAgICAgCi0gICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWxTYWZlOgot
ICAgICAgICAvLyBUaGlzIHBvdGVudGlhbGx5IGNsb2JiZXJzIGFsbCBzdHJ1Y3R1cmVzIGlmIHRo
ZSBwcm9wZXJ0eSB3ZSdyZSBhY2Nlc3NpbmcgaGFzCi0gICAgICAgIC8vIGEgZ2V0dGVyLiBXZSBk
b24ndCBzcGVjdWxhdGUgYWdhaW5zdCB0aGlzLgotICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+
b3JpZ2luLnNlbWFudGljLCBjbG9iYmVyTGltaXQpOwotICAgICAgICAvLyBBbmQgdGhlIHJlc3Vs
dCBpcyB1bmtub3duLgotICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VIZWFwVG9wKCk7CisgICAg
Y2FzZSBDcmVhdGVPdXRPZkJhbmRBcmd1bWVudHM6CisgICAgICAgIGZvck5vZGUobm9kZSkuc2V0
VHlwZShTcGVjT2JqZWN0T3RoZXIpOwogICAgICAgICBicmVhazsKICAgICAgICAgCi0gICAgY2Fz
ZSBOZXdGdW5jdGlvbjogewotICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IGZvck5vZGUo
bm9kZSk7Ci0gICAgICAgIHZhbHVlID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAg
IAotICAgICAgICBpZiAoISh2YWx1ZS5tX3R5cGUgJiBTcGVjRW1wdHkpKSB7Ci0gICAgICAgICAg
ICBtX3N0YXRlLnNldEZvdW5kQ29uc3RhbnRzKHRydWUpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLQotICAgICAgICB2YWx1ZS5zZXRUeXBlKCh2YWx1ZS5tX3R5cGUgJiB+U3BlY0Vt
cHR5KSB8IFNwZWNGdW5jdGlvbik7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQogICAgIGNhc2Ug
TmV3RnVuY3Rpb25FeHByZXNzaW9uOgotICAgIGNhc2UgTmV3RnVuY3Rpb25Ob0NoZWNrOgorICAg
IGNhc2UgTmV3RnVuY3Rpb246CiAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KAogICAgICAgICAg
ICAgbV9ncmFwaCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2Vt
YW50aWMpLT5mdW5jdGlvblN0cnVjdHVyZSgpKTsKICAgICAgICAgYnJlYWs7CkBAIC0xNDczLDcg
KzE0MDcsNiBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgY2FzZSBQdXRDbG9zdXJlVmFyOgotICAgICAg
ICBjbG9iYmVyQ2FwdHVyZWRWYXJzKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CiAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgCiAgICAgY2FzZSBHZXRCeUlkOgpAQCAtMTYxNyw4ICsxNTUwLDEx
IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgY2Fz
ZSBBcnJheTo6QXJyYXlTdG9yYWdlOgogICAgICAgICBjYXNlIEFycmF5OjpTbG93UHV0QXJyYXlT
dG9yYWdlOgogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50
czoKLSAgICAgICAgICAgIGZpbHRlcihub2RlLT5jaGlsZDEoKSwgU3BlY0FyZ3VtZW50cyk7Cisg
ICAgICAgIGNhc2UgQXJyYXk6OkRpcmVjdEFyZ3VtZW50czoKKyAgICAgICAgICAgIGZpbHRlcihu
b2RlLT5jaGlsZDEoKSwgU3BlY0RpcmVjdEFyZ3VtZW50cyk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBBcnJheTo6U2NvcGVkQXJndW1lbnRzOgorICAgICAgICAgICAgZmlsdGVy
KG5vZGUtPmNoaWxkMSgpLCBTcGVjU2NvcGVkQXJndW1lbnRzKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICBjYXNlIEFycmF5OjpJbnQ4QXJyYXk6CiAgICAgICAgICAgICBmaWx0ZXIobm9k
ZS0+Y2hpbGQxKCksIFNwZWNJbnQ4QXJyYXkpOwpAQCAtMjEwNCwzNSArMjA0MCwxMCBAQCB0ZW1w
bGF0ZTx0eXBlbmFtZSBBYnN0cmFjdFN0YXRlVHlwZT4KIHZvaWQgQWJzdHJhY3RJbnRlcnByZXRl
cjxBYnN0cmFjdFN0YXRlVHlwZT46OmNsb2JiZXJXb3JsZCgKICAgICBjb25zdCBDb2RlT3JpZ2lu
JiBjb2RlT3JpZ2luLCB1bnNpZ25lZCBjbG9iYmVyTGltaXQpCiB7Ci0gICAgY2xvYmJlckNhcHR1
cmVkVmFycyhjb2RlT3JpZ2luKTsKICAgICBjbG9iYmVyU3RydWN0dXJlcyhjbG9iYmVyTGltaXQp
OwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBBYnN0cmFjdFN0YXRlVHlwZT4KLXZvaWQgQWJzdHJh
Y3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmNsb2JiZXJDYXB0dXJlZFZhcnMoY29u
c3QgQ29kZU9yaWdpbiYgY29kZU9yaWdpbikKLXsKLSAgICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGlu
Z1JlZ2lvbigiREZHIEFJIENsb2JiZXIgQ2FwdHVyZWQgVmFycyIpOwotICAgIGlmIChjb2RlT3Jp
Z2luLmlubGluZUNhbGxGcmFtZSkgewotICAgICAgICBjb25zdCBCaXRWZWN0b3ImIGNhcHR1cmVk
VmFycyA9IGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5jYXB0dXJlZFZhcnM7Ci0gICAgICAg
IGZvciAoc2l6ZV90IGkgPSBjYXB0dXJlZFZhcnMuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAg
ICBpZiAoIWNhcHR1cmVkVmFycy5xdWlja0dldChpKSkKLSAgICAgICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgICAgIG1fc3RhdGUudmFyaWFibGVzKCkubG9jYWwoaSkubWFrZUhlYXBUb3Ao
KTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSBtX2Nv
ZGVCbG9jay0+bV9udW1WYXJzOyBpLS07KSB7Ci0gICAgICAgICAgICBpZiAobV9jb2RlQmxvY2st
PmlzQ2FwdHVyZWQodmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaSkpKQotICAgICAgICAgICAgICAg
IG1fc3RhdGUudmFyaWFibGVzKCkubG9jYWwoaSkubWFrZUhlYXBUb3AoKTsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIGZvciAoc2l6ZV90IGkgPSBtX3N0YXRlLnZhcmlhYmxlcygpLm51bWJlck9m
QXJndW1lbnRzKCk7IGktLTspIHsKLSAgICAgICAgaWYgKG1fY29kZUJsb2NrLT5pc0NhcHR1cmVk
KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGkpKSkKLSAgICAgICAgICAgIG1fc3RhdGUudmFy
aWFibGVzKCkuYXJndW1lbnQoaSkubWFrZUhlYXBUb3AoKTsKLSAgICB9Ci19Ci0KLXRlbXBsYXRl
PHR5cGVuYW1lIEFic3RyYWN0U3RhdGVUeXBlPgogdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4K
IHZvaWQgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmZvckFsbFZhbHVl
cygKICAgICB1bnNpZ25lZCBjbG9iYmVyTGltaXQsIEZ1bmN0b3ImIGZ1bmN0b3IpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuaAkocmV2aXNpb24g
MTgwODc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM0NiwxOCArMzQ2LDE2IEBAIHN0cnVjdCBBYnN0cmFjdFZhbHVl
IHsKICAgICAKICAgICAvLyBUaGlzIGlzIGEgcHJvdmVuIGNvbnN0cmFpbnQgb24gdGhlIHBvc3Np
YmxlIHR5cGVzIHRoYXQgdGhpcyB2YWx1ZSBjYW4gaGF2ZQogICAgIC8vIG5vdyBvciBhbnkgdGlt
ZSBpbiB0aGUgZnV0dXJlLCB1bmxlc3MgaXQgaXMgcmVhc3NpZ25lZC4gVGhpcyBmaWVsZCBpcwot
ICAgIC8vIGltcGVydmlvdXMgdG8gc2lkZS1lZmZlY3RzIHVubGVzcyB0aGUgc2lkZS1lZmZlY3Qg
Y2FuIHJlYXNzaWduIHRoZSB2YWx1ZQotICAgIC8vIChmb3IgZXhhbXBsZSBpZiB3ZSdyZSB0YWxr
aW5nIGFib3V0IGEgY2FwdHVyZWQgdmFyaWFibGUpLiBUaGUgcmVsYXRpb25zaGlwCi0gICAgLy8g
YmV0d2VlbiB0aGlzIGZpZWxkLCBhbmQgdGhlIHN0cnVjdHVyZSBmaWVsZHMgYWJvdmUsIGlzIGFz
IGZvbGxvd3MuIFRoZQotICAgIC8vIGZpZWxkcyBhYm92ZSBjb25zdHJhaW50IHRoZSBzdHJ1Y3R1
cmVzIHRoYXQgYSBjZWxsIG1heSBoYXZlLCBidXQgdGhleSBzYXkKLSAgICAvLyBub3RoaW5nIGFi
b3V0IHdoZXRoZXIgb3Igbm90IHRoZSB2YWx1ZSBpcyBrbm93biB0byBiZSBhIGNlbGwuIE1vcmUg
Zm9ybWFsbHksCi0gICAgLy8gdGhlIG1fc3RydWN0dXJlIGlzIGl0c2VsZiBhbiBhYnN0cmFjdCB2
YWx1ZSB0aGF0IGNvbnNpc3RzIG9mIHRoZQotICAgIC8vIHVuaW9uIG9mIHRoZSBzZXQgb2YgYWxs
IG5vbi1jZWxsIHZhbHVlcyBhbmQgdGhlIHNldCBvZiBjZWxsIHZhbHVlcyB0aGF0IGhhdmUKLSAg
ICAvLyB0aGUgZ2l2ZW4gc3RydWN0dXJlLiBUaGlzIGFic3RyYWN0IHZhbHVlIGlzIHRoZW4gdGhl
IGludGVyc2VjdGlvbiBvZiB0aGUKLSAgICAvLyBtX3N0cnVjdHVyZSBhbmQgdGhlIHNldCBvZiB2
YWx1ZXMgd2hvc2UgdHlwZSBpcyBtX3R5cGUuIFNvLCBmb3IKLSAgICAvLyBleGFtcGxlIGlmIG1f
dHlwZSBpcyBTcGVjRmluYWx8U3BlY0ludDMyIGFuZCBtX3N0cnVjdHVyZSBpcwotICAgIC8vIFsw
eDEyMzQ1XSB0aGVuIHRoaXMgYWJzdHJhY3QgdmFsdWUgY29ycmVzcG9uZHMgdG8gdGhlIHNldCBv
ZiBhbGwgaW50ZWdlcnMKLSAgICAvLyB1bmlmaWVkIHdpdGggdGhlIHNldCBvZiBhbGwgb2JqZWN0
cyB3aXRoIHN0cnVjdHVyZSAweDEyMzQ1LgorICAgIC8vIGltcGVydmlvdXMgdG8gc2lkZS1lZmZl
Y3RzLiBUaGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhpcyBmaWVsZCwgYW5kIHRoZQorICAgIC8v
IHN0cnVjdHVyZSBmaWVsZHMgYWJvdmUsIGlzIGFzIGZvbGxvd3MuIFRoZSBmaWVsZHMgYWJvdmUg
Y29uc3RyYWludCB0aGUKKyAgICAvLyBzdHJ1Y3R1cmVzIHRoYXQgYSBjZWxsIG1heSBoYXZlLCBi
dXQgdGhleSBzYXkgbm90aGluZyBhYm91dCB3aGV0aGVyIG9yIG5vdAorICAgIC8vIHRoZSB2YWx1
ZSBpcyBrbm93biB0byBiZSBhIGNlbGwuIE1vcmUgZm9ybWFsbHksIHRoZSBtX3N0cnVjdHVyZSBp
cyBpdHNlbGYgYW4KKyAgICAvLyBhYnN0cmFjdCB2YWx1ZSB0aGF0IGNvbnNpc3RzIG9mIHRoZSB1
bmlvbiBvZiB0aGUgc2V0IG9mIGFsbCBub24tY2VsbCB2YWx1ZXMKKyAgICAvLyBhbmQgdGhlIHNl
dCBvZiBjZWxsIHZhbHVlcyB0aGF0IGhhdmUgdGhlIGdpdmVuIHN0cnVjdHVyZS4gVGhpcyBhYnN0
cmFjdAorICAgIC8vIHZhbHVlIGlzIHRoZW4gdGhlIGludGVyc2VjdGlvbiBvZiB0aGUgbV9zdHJ1
Y3R1cmUgYW5kIHRoZSBzZXQgb2YgdmFsdWVzCisgICAgLy8gd2hvc2UgdHlwZSBpcyBtX3R5cGUu
IFNvLCBmb3IgZXhhbXBsZSBpZiBtX3R5cGUgaXMgU3BlY0ZpbmFsfFNwZWNJbnQzMiBhbmQKKyAg
ICAvLyBtX3N0cnVjdHVyZSBpcyBbMHgxMjM0NV0gdGhlbiB0aGlzIGFic3RyYWN0IHZhbHVlIGNv
cnJlc3BvbmRzIHRvIHRoZSBzZXQgb2YKKyAgICAvLyBhbGwgaW50ZWdlcnMgdW5pZmllZCB3aXRo
IHRoZSBzZXQgb2YgYWxsIG9iamVjdHMgd2l0aCBzdHJ1Y3R1cmUgMHgxMjM0NS4KICAgICBTcGVj
dWxhdGVkVHlwZSBtX3R5cGU7CiAgICAgCiAgICAgLy8gVGhpcyBpcyBhIHByb3ZlbiBjb25zdHJh
aW50IG9uIHRoZSBwb3NzaWJsZSBpbmRleGluZyB0eXBlcyB0aGF0IHRoaXMgdmFsdWUKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRQb3NpdGlvbi5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRQb3NpdGlvbi5oCShy
ZXZpc2lvbiAxODA4NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50
UG9zaXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNDYsNiArNDYsOSBAQCBwdWJsaWM6CiAgICAg
dm9pZCBhZGRWYXJpYWJsZShWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlKQogICAgIHsKICAg
ICAgICAgbV92YXJpYWJsZXMuYXBwZW5kKHZhcmlhYmxlKTsKKyAgICAgICAgCisgICAgICAgIC8v
IFdlIG1heSBzZXQgdGhpcyBlYXJseS4gTWVyZ2luZyBpdCBoZXJlIHNhdmVzIHVzIHRpbWUgaW4g
cHJlZGljdGlvbiBwcm9wYWdhdGlvbi4KKyAgICAgICAgdmFyaWFibGUtPm1lcmdlU2hvdWxkTmV2
ZXJVbmJveChtX3Nob3VsZE5ldmVyVW5ib3gpOwogICAgIH0KICAgICAKICAgICBWYXJpYWJsZUFj
Y2Vzc0RhdGEqIHNvbWVWYXJpYWJsZSgpIGNvbnN0CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0FycmF5TW9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBcnJheU1vZGUuY3BwCShyZXZpc2lvbiAxODA4NzUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5Nyw4
ICsxOTcsMTUgQEAgQXJyYXlNb2RlIEFycmF5TW9kZTo6cmVmaW5lKAogICAgICAgICBpZiAoaXNT
dHJpbmdTcGVjdWxhdGlvbihiYXNlKSkKICAgICAgICAgICAgIHJldHVybiB3aXRoVHlwZShBcnJh
eTo6U3RyaW5nKTsKICAgICAgICAgCi0gICAgICAgIGlmIChpc0FyZ3VtZW50c1NwZWN1bGF0aW9u
KGJhc2UpKQotICAgICAgICAgICAgcmV0dXJuIHdpdGhUeXBlKEFycmF5OjpBcmd1bWVudHMpOwor
ICAgICAgICBpZiAoaXNEaXJlY3RBcmd1bWVudHNTcGVjdWxhdGlvbihiYXNlKSB8fCBpc1Njb3Bl
ZEFyZ3VtZW50c1NwZWN1bGF0aW9uKGJhc2UpKSB7CisgICAgICAgICAgICAvLyBIYW5kbGUgb3V0
LW9mLWJvdW5kcyBhY2Nlc3NlcyBhcyBnZW5lcmljIGFjY2Vzc2VzLgorICAgICAgICAgICAgaWYg
KGdyYXBoLmhhc0V4aXRTaXRlKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgT3V0T2ZCb3VuZHMpIHx8
ICFpc0luQm91bmRzKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIEFycmF5TW9kZShBcnJheTo6
R2VuZXJpYyk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChpc0RpcmVjdEFyZ3VtZW50
c1NwZWN1bGF0aW9uKGJhc2UpKQorICAgICAgICAgICAgICAgIHJldHVybiB3aXRoVHlwZShBcnJh
eTo6RGlyZWN0QXJndW1lbnRzKTsKKyAgICAgICAgICAgIHJldHVybiB3aXRoVHlwZShBcnJheTo6
U2NvcGVkQXJndW1lbnRzKTsKKyAgICAgICAgfQogICAgICAgICAKICAgICAgICAgQXJyYXlNb2Rl
IHJlc3VsdDsKICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CkBAIC0zOTYsOCArNDAzLDEx
IEBAIGJvb2wgQXJyYXlNb2RlOjphbHJlYWR5Q2hlY2tlZChHcmFwaCYgZ3IKICAgICAgICAgICAg
IHJldHVybiB0cnVlOwogICAgICAgICB9IH0KICAgICAgICAgCi0gICAgY2FzZSBBcnJheTo6QXJn
dW1lbnRzOgotICAgICAgICByZXR1cm4gc3BlY3VsYXRpb25DaGVja2VkKHZhbHVlLm1fdHlwZSwg
U3BlY0FyZ3VtZW50cyk7CisgICAgY2FzZSBBcnJheTo6RGlyZWN0QXJndW1lbnRzOgorICAgICAg
ICByZXR1cm4gc3BlY3VsYXRpb25DaGVja2VkKHZhbHVlLm1fdHlwZSwgU3BlY0RpcmVjdEFyZ3Vt
ZW50cyk7CisgICAgICAgIAorICAgIGNhc2UgQXJyYXk6OlNjb3BlZEFyZ3VtZW50czoKKyAgICAg
ICAgcmV0dXJuIHNwZWN1bGF0aW9uQ2hlY2tlZCh2YWx1ZS5tX3R5cGUsIFNwZWNTY29wZWRBcmd1
bWVudHMpOwogICAgICAgICAKICAgICBjYXNlIEFycmF5OjpJbnQ4QXJyYXk6CiAgICAgICAgIHJl
dHVybiBzcGVjdWxhdGlvbkNoZWNrZWQodmFsdWUubV90eXBlLCBTcGVjSW50OEFycmF5KTsKQEAg
LTQ2MSw4ICs0NzEsMTAgQEAgY29uc3QgY2hhciogYXJyYXlUeXBlVG9TdHJpbmcoQXJyYXk6OlR5
cAogICAgICAgICByZXR1cm4gIkFycmF5U3RvcmFnZSI7CiAgICAgY2FzZSBBcnJheTo6U2xvd1B1
dEFycmF5U3RvcmFnZToKICAgICAgICAgcmV0dXJuICJTbG93UHV0QXJyYXlTdG9yYWdlIjsKLSAg
ICBjYXNlIEFycmF5OjpBcmd1bWVudHM6Ci0gICAgICAgIHJldHVybiAiQXJndW1lbnRzIjsKKyAg
ICBjYXNlIEFycmF5OjpEaXJlY3RBcmd1bWVudHM6CisgICAgICAgIHJldHVybiAiRGlyZWN0QXJn
dW1lbnRzIjsKKyAgICBjYXNlIEFycmF5OjpTY29wZWRBcmd1bWVudHM6CisgICAgICAgIHJldHVy
biAiU2NvcGVkQXJndW1lbnRzIjsKICAgICBjYXNlIEFycmF5OjpJbnQ4QXJyYXk6CiAgICAgICAg
IHJldHVybiAiSW50OEFycmF5IjsKICAgICBjYXNlIEFycmF5OjpJbnQxNkFycmF5OgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5oCShyZXZpc2lvbiAxODA4NzUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMywgMjAx
NCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIt
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTY1LDcgKzY1LDkgQEAgZW51bSBUeXBlIHsKICAgICBBcnJheVN0b3Jh
Z2UsCiAgICAgU2xvd1B1dEFycmF5U3RvcmFnZSwKICAgICAKLSAgICBBcmd1bWVudHMsCisgICAg
RGlyZWN0QXJndW1lbnRzLAorICAgIFNjb3BlZEFyZ3VtZW50cywKKyAgICAKICAgICBJbnQ4QXJy
YXksCiAgICAgSW50MTZBcnJheSwKICAgICBJbnQzMkFycmF5LApAQCAtMjk0LDcgKzI5Niw4IEBA
IHB1YmxpYzoKICAgICAgICAgY2FzZSBBcnJheTo6VW5wcm9maWxlZDoKICAgICAgICAgY2FzZSBB
cnJheTo6Rm9yY2VFeGl0OgogICAgICAgICBjYXNlIEFycmF5OjpHZW5lcmljOgotICAgICAgICBj
YXNlIEFycmF5OjpBcmd1bWVudHM6CisgICAgICAgIGNhc2UgQXJyYXk6OkRpcmVjdEFyZ3VtZW50
czoKKyAgICAgICAgY2FzZSBBcnJheTo6U2NvcGVkQXJndW1lbnRzOgogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBA
IC0zMjAsMTEgKzMyMyw5IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHN3aXRjaCAodHlwZSgp
KSB7CiAgICAgICAgIGNhc2UgQXJyYXk6OlN0cmluZzoKKyAgICAgICAgY2FzZSBBcnJheTo6RGly
ZWN0QXJndW1lbnRzOgorICAgICAgICBjYXNlIEFycmF5OjpTY29wZWRBcmd1bWVudHM6CiAgICAg
ICAgICAgICByZXR1cm4gQXJyYXlNb2RlKEFycmF5OjpHZW5lcmljKTsKLSNpZiBVU0UoSlNWQUxV
RTMyXzY0KQotICAgICAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6Ci0gICAgICAgICAgICByZXR1
cm4gQXJyYXlNb2RlKEFycmF5OjpHZW5lcmljKTsKLSNlbmRpZgogICAgICAgICBkZWZhdWx0Ogog
ICAgICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gMTgwODc1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTIyNSwxMSArMjI1LDExIEBAIHByaXZhdGU6CiAgICAgdm9pZCBsaW5r
QmxvY2soQmFzaWNCbG9jayosIFZlY3RvcjxCYXNpY0Jsb2NrKj4mIHBvc3NpYmxlVGFyZ2V0cyk7
CiAgICAgdm9pZCBsaW5rQmxvY2tzKFZlY3RvcjxVbmxpbmtlZEJsb2NrPiYgdW5saW5rZWRCbG9j
a3MsIFZlY3RvcjxCYXNpY0Jsb2NrKj4mIHBvc3NpYmxlVGFyZ2V0cyk7CiAgICAgCi0gICAgVmFy
aWFibGVBY2Nlc3NEYXRhKiBuZXdWYXJpYWJsZUFjY2Vzc0RhdGEoVmlydHVhbFJlZ2lzdGVyIG9w
ZXJhbmQsIGJvb2wgaXNDYXB0dXJlZCkKKyAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIG5ld1Zhcmlh
YmxlQWNjZXNzRGF0YShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKICAgICB7CiAgICAgICAgIEFT
U0VSVCghb3BlcmFuZC5pc0NvbnN0YW50KCkpOwogICAgICAgICAKLSAgICAgICAgbV9ncmFwaC5t
X3ZhcmlhYmxlQWNjZXNzRGF0YS5hcHBlbmQoVmFyaWFibGVBY2Nlc3NEYXRhKG9wZXJhbmQsIGlz
Q2FwdHVyZWQpKTsKKyAgICAgICAgbV9ncmFwaC5tX3ZhcmlhYmxlQWNjZXNzRGF0YS5hcHBlbmQo
VmFyaWFibGVBY2Nlc3NEYXRhKG9wZXJhbmQpKTsKICAgICAgICAgcmV0dXJuICZtX2dyYXBoLm1f
dmFyaWFibGVBY2Nlc3NEYXRhLmxhc3QoKTsKICAgICB9CiAgICAgCkBAIC0zNTgsNyArMzU4LDYg
QEAgcHJpdmF0ZToKICAgICAgICAgfQogCiAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2N1cnJlbnRC
bG9jay0+dmFyaWFibGVzQXRUYWlsLmxvY2FsKGxvY2FsKTsKLSAgICAgICAgYm9vbCBpc0NhcHR1
cmVkID0gbV9jb2RlQmxvY2stPmlzQ2FwdHVyZWQob3BlcmFuZCwgaW5saW5lQ2FsbEZyYW1lKCkp
OwogICAgICAgICAKICAgICAgICAgLy8gVGhpcyBoYXMgdHdvIGdvYWxzOiAxKSBsaW5rIHRvZ2V0
aGVyIHZhcmlhYmxlIGFjY2VzcyBkYXRhcywgYW5kIDIpCiAgICAgICAgIC8vIHRyeSB0byBhdm9p
ZCBjcmVhdGluZyByZWR1bmRhbnQgR2V0TG9jYWxzLiAoMSkgaXMgcmVxdWlyZWQgZm9yCkBAIC0z
NzAsMjAgKzM2OSwxNyBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgaWYgKG5vZGUpIHsK
ICAgICAgICAgICAgIHZhcmlhYmxlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7Ci0gICAg
ICAgICAgICB2YXJpYWJsZS0+bWVyZ2VJc0NhcHR1cmVkKGlzQ2FwdHVyZWQpOwogICAgICAgICAg
ICAgCi0gICAgICAgICAgICBpZiAoIWlzQ2FwdHVyZWQpIHsKLSAgICAgICAgICAgICAgICBzd2l0
Y2ggKG5vZGUtPm9wKCkpIHsKLSAgICAgICAgICAgICAgICBjYXNlIEdldExvY2FsOgotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gbm9kZTsKLSAgICAgICAgICAgICAgICBjYXNlIFNldExvY2Fs
OgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOwotICAg
ICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgeworICAgICAgICAg
ICAgY2FzZSBHZXRMb2NhbDoKKyAgICAgICAgICAgICAgICByZXR1cm4gbm9kZTsKKyAgICAgICAg
ICAgIGNhc2UgU2V0TG9jYWw6CisgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGUtPmNoaWxkMSgp
Lm5vZGUoKTsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgdmFyaWFibGUgPSBuZXdW
YXJpYWJsZUFjY2Vzc0RhdGEob3BlcmFuZCwgaXNDYXB0dXJlZCk7CisgICAgICAgICAgICB2YXJp
YWJsZSA9IG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShvcGVyYW5kKTsKICAgICAgICAgCiAgICAgICAg
IG5vZGUgPSBpbmplY3RMYXp5T3BlcmFuZFNwZWN1bGF0aW9uKGFkZFRvR3JhcGgoR2V0TG9jYWws
IE9wSW5mbyh2YXJpYWJsZSkpKTsKICAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0
VGFpbC5sb2NhbChsb2NhbCkgPSBub2RlOwpAQCAtMzk2LDE1ICszOTIsMTQgQEAgcHJpdmF0ZToK
ICAgICAgICAgbV9jdXJyZW50U2VtYW50aWNPcmlnaW4gPSBzZW1hbnRpY09yaWdpbjsKIAogICAg
ICAgICB1bnNpZ25lZCBsb2NhbCA9IG9wZXJhbmQudG9Mb2NhbCgpOwotICAgICAgICBib29sIGlz
Q2FwdHVyZWQgPSBtX2NvZGVCbG9jay0+aXNDYXB0dXJlZChvcGVyYW5kLCBpbmxpbmVDYWxsRnJh
bWUoKSk7CiAgICAgICAgIAogICAgICAgICBpZiAoc2V0TW9kZSAhPSBJbW1lZGlhdGVOYWtlZFNl
dCkgewogICAgICAgICAgICAgQXJndW1lbnRQb3NpdGlvbiogYXJndW1lbnRQb3NpdGlvbiA9IGZp
bmRBcmd1bWVudFBvc2l0aW9uRm9yTG9jYWwob3BlcmFuZCk7Ci0gICAgICAgICAgICBpZiAoaXND
YXB0dXJlZCB8fCBhcmd1bWVudFBvc2l0aW9uKQorICAgICAgICAgICAgaWYgKGFyZ3VtZW50UG9z
aXRpb24pCiAgICAgICAgICAgICAgICAgZmx1c2hEaXJlY3Qob3BlcmFuZCwgYXJndW1lbnRQb3Np
dGlvbik7CiAgICAgICAgIH0KIAotICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxl
QWNjZXNzRGF0YSA9IG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShvcGVyYW5kLCBpc0NhcHR1cmVkKTsK
KyAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBuZXdWYXJp
YWJsZUFjY2Vzc0RhdGEob3BlcmFuZCk7CiAgICAgICAgIHZhcmlhYmxlQWNjZXNzRGF0YS0+bWVy
Z2VTdHJ1Y3R1cmVDaGVja0hvaXN0aW5nRmFpbGVkKAogICAgICAgICAgICAgbV9pbmxpbmVTdGFj
a1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShzZW1hbnRpY09yaWdpbi5ieXRlY29kZUlu
ZGV4LCBCYWRDYWNoZSkpOwogICAgICAgICB2YXJpYWJsZUFjY2Vzc0RhdGEtPm1lcmdlQ2hlY2tB
cnJheUhvaXN0aW5nRmFpbGVkKApAQCAtNDIzLDI2ICs0MTgsMjIgQEAgcHJpdmF0ZToKICAgICAg
ICAgQVNTRVJUKGFyZ3VtZW50IDwgbV9udW1Bcmd1bWVudHMpOwogICAgICAgICAKICAgICAgICAg
Tm9kZSogbm9kZSA9IG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwuYXJndW1lbnQoYXJn
dW1lbnQpOwotICAgICAgICBib29sIGlzQ2FwdHVyZWQgPSBtX2NvZGVCbG9jay0+aXNDYXB0dXJl
ZChvcGVyYW5kKTsKIAogICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlOwogICAg
ICAgICAKICAgICAgICAgaWYgKG5vZGUpIHsKICAgICAgICAgICAgIHZhcmlhYmxlID0gbm9kZS0+
dmFyaWFibGVBY2Nlc3NEYXRhKCk7Ci0gICAgICAgICAgICB2YXJpYWJsZS0+bWVyZ2VJc0NhcHR1
cmVkKGlzQ2FwdHVyZWQpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoIWlzQ2FwdHVy
ZWQpIHsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKLSAgICAgICAgICAg
ICAgICBjYXNlIEdldExvY2FsOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZTsKLSAg
ICAgICAgICAgICAgICBjYXNlIFNldExvY2FsOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
bm9kZS0+Y2hpbGQxKCkubm9kZSgpOwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHN3aXRj
aCAobm9kZS0+b3AoKSkgeworICAgICAgICAgICAgY2FzZSBHZXRMb2NhbDoKKyAgICAgICAgICAg
ICAgICByZXR1cm4gbm9kZTsKKyAgICAgICAgICAgIGNhc2UgU2V0TG9jYWw6CisgICAgICAgICAg
ICAgICAgcmV0dXJuIG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZQot
ICAgICAgICAgICAgdmFyaWFibGUgPSBuZXdWYXJpYWJsZUFjY2Vzc0RhdGEob3BlcmFuZCwgaXND
YXB0dXJlZCk7CisgICAgICAgICAgICB2YXJpYWJsZSA9IG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShv
cGVyYW5kKTsKICAgICAgICAgCiAgICAgICAgIG5vZGUgPSBpbmplY3RMYXp5T3BlcmFuZFNwZWN1
bGF0aW9uKGFkZFRvR3JhcGgoR2V0TG9jYWwsIE9wSW5mbyh2YXJpYWJsZSkpKTsKICAgICAgICAg
bV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5hcmd1bWVudChhcmd1bWVudCkgPSBub2Rl
OwpAQCAtNDU2LDkgKzQ0Nyw3IEBAIHByaXZhdGU6CiAgICAgICAgIHVuc2lnbmVkIGFyZ3VtZW50
ID0gb3BlcmFuZC50b0FyZ3VtZW50KCk7CiAgICAgICAgIEFTU0VSVChhcmd1bWVudCA8IG1fbnVt
QXJndW1lbnRzKTsKICAgICAgICAgCi0gICAgICAgIGJvb2wgaXNDYXB0dXJlZCA9IG1fY29kZUJs
b2NrLT5pc0NhcHR1cmVkKG9wZXJhbmQpOwotCi0gICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSog
dmFyaWFibGVBY2Nlc3NEYXRhID0gbmV3VmFyaWFibGVBY2Nlc3NEYXRhKG9wZXJhbmQsIGlzQ2Fw
dHVyZWQpOworICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9
IG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShvcGVyYW5kKTsKIAogICAgICAgICAvLyBBbHdheXMgZmx1
c2ggYXJndW1lbnRzLCBleGNlcHQgZm9yICd0aGlzJy4gSWYgJ3RoaXMnIGlzIGNyZWF0ZWQgYnkg
dXMsCiAgICAgICAgIC8vIHRoZW4gbWFrZSBzdXJlIHRoYXQgaXQncyBuZXZlciB1bmJveGVkLgpA
QCAtNTI0LDE5ICs1MTMsMTYgQEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lkIGZsdXNoRGlyZWN0
KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBBcmd1bWVudFBvc2l0aW9uKiBhcmd1bWVudFBvc2l0
aW9uKQogICAgIHsKLSAgICAgICAgYm9vbCBpc0NhcHR1cmVkID0gbV9jb2RlQmxvY2stPmlzQ2Fw
dHVyZWQob3BlcmFuZCwgaW5saW5lQ2FsbEZyYW1lKCkpOwotICAgICAgICAKICAgICAgICAgQVNT
RVJUKCFvcGVyYW5kLmlzQ29uc3RhbnQoKSk7CiAgICAgICAgIAogICAgICAgICBOb2RlKiBub2Rl
ID0gbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKG9wZXJhbmQpOwogICAg
ICAgICAKICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZTsKICAgICAgICAgCi0g
ICAgICAgIGlmIChub2RlKSB7CisgICAgICAgIGlmIChub2RlKQogICAgICAgICAgICAgdmFyaWFi
bGUgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKLSAgICAgICAgICAgIHZhcmlhYmxlLT5t
ZXJnZUlzQ2FwdHVyZWQoaXNDYXB0dXJlZCk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAg
dmFyaWFibGUgPSBuZXdWYXJpYWJsZUFjY2Vzc0RhdGEob3BlcmFuZCwgaXNDYXB0dXJlZCk7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIHZhcmlhYmxlID0gbmV3VmFyaWFibGVBY2Nlc3NEYXRh
KG9wZXJhbmQpOwogICAgICAgICAKICAgICAgICAgbm9kZSA9IGFkZFRvR3JhcGgoRmx1c2gsIE9w
SW5mbyh2YXJpYWJsZSkpOwogICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWls
Lm9wZXJhbmQob3BlcmFuZCkgPSBub2RlOwpAQCAtNTU3LDExICs1NDMsNiBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgbnVtQXJndW1lbnRzID0gaW5saW5lU3RhY2tFbnRyeS0+bV9jb2RlQmxvY2st
Pm51bVBhcmFtZXRlcnMoKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBhcmd1bWVudCA9IG51bUFy
Z3VtZW50czsgYXJndW1lbnQtLSA+IDE7KQogICAgICAgICAgICAgZmx1c2hEaXJlY3QoaW5saW5l
U3RhY2tFbnRyeS0+cmVtYXBPcGVyYW5kKHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGFyZ3Vt
ZW50KSkpOwotICAgICAgICBmb3IgKGludCBsb2NhbCA9IDA7IGxvY2FsIDwgaW5saW5lU3RhY2tF
bnRyeS0+bV9jb2RlQmxvY2stPm1fbnVtVmFyczsgKytsb2NhbCkgewotICAgICAgICAgICAgaWYg
KCFpbmxpbmVTdGFja0VudHJ5LT5tX2NvZGVCbG9jay0+aXNDYXB0dXJlZCh2aXJ0dWFsUmVnaXN0
ZXJGb3JMb2NhbChsb2NhbCkpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAg
ICAgZmx1c2hEaXJlY3QoaW5saW5lU3RhY2tFbnRyeS0+cmVtYXBPcGVyYW5kKHZpcnR1YWxSZWdp
c3RlckZvckxvY2FsKGxvY2FsKSkpOwotICAgICAgICB9CiAgICAgfQogCiAgICAgdm9pZCBmbHVz
aEZvclRlcm1pbmFsKCkKQEAgLTg1Niw2ICs4MzcsMTggQEAgcHJpdmF0ZToKICAgICAgICAgcmV0
dXJuIG5vZGU7CiAgICAgfQogICAgIAorICAgIHZvaWQgbm90aWNlQXJndW1lbnRzVXNlKCkKKyAg
ICB7CisgICAgICAgIG1fZ3JhcGgubV9oYXNBcmd1bWVudHMgPSB0cnVlOworICAgICAgICAKKyAg
ICAgICAgLy8gQWxsIG9mIHRoZSBhcmd1bWVudHMgaW4gdGhpcyBmdW5jdGlvbiBuZWVkIHRvIGJl
IGZvcm1hdHRlZCBhcyBKU1ZhbHVlcyBiZWNhdXNlIHdlIHdpbGwKKyAgICAgICAgLy8gbG9hZCBm
cm9tIHRoZW0gaW4gYSByYW5kb20tYWNjZXNzIGZhc2hpb24gYW5kIHdlIGRvbid0IHdhbnQgdG8g
aGF2ZSB0byBzd2l0Y2ggb24KKyAgICAgICAgLy8gZm9ybWF0LgorICAgICAgICAKKyAgICAgICAg
Zm9yIChBcmd1bWVudFBvc2l0aW9uKiBhcmd1bWVudCA6IG1faW5saW5lU3RhY2tUb3AtPm1fYXJn
dW1lbnRQb3NpdGlvbnMpCisgICAgICAgICAgICBhcmd1bWVudC0+bWVyZ2VTaG91bGROZXZlclVu
Ym94KHRydWUpOworICAgIH0KKyAgICAKICAgICB2b2lkIGJ1aWxkT3BlcmFuZE1hcHNJZk5lY2Vz
c2FyeSgpOwogICAgIAogICAgIFZNKiBtX3ZtOwpAQCAtMjUzOSw3ICsyNTMyLDcgQEAgYm9vbCBC
eXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICBtX2dyYXBoLm1fYXJn
dW1lbnRzLnJlc2l6ZShtX251bUFyZ3VtZW50cyk7CiAgICAgICAgIGZvciAodW5zaWduZWQgYXJn
dW1lbnQgPSAwOyBhcmd1bWVudCA8IG1fbnVtQXJndW1lbnRzOyArK2FyZ3VtZW50KSB7CiAgICAg
ICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbmV3VmFyaWFibGVBY2Nlc3NE
YXRhKAotICAgICAgICAgICAgICAgIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGFyZ3VtZW50
KSwgbV9jb2RlQmxvY2stPmlzQ2FwdHVyZWQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoYXJn
dW1lbnQpKSk7CisgICAgICAgICAgICAgICAgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoYXJn
dW1lbnQpKTsKICAgICAgICAgICAgIHZhcmlhYmxlLT5tZXJnZVN0cnVjdHVyZUNoZWNrSG9pc3Rp
bmdGYWlsZWQoCiAgICAgICAgICAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmls
ZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgQmFkQ2FjaGUpKTsKICAgICAgICAgICAgIHZh
cmlhYmxlLT5tZXJnZUNoZWNrQXJyYXlIb2lzdGluZ0ZhaWxlZCgKQEAgLTM2NDQsMTMgKzM2Mzcs
NiBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAg
ICBORVhUX09QQ09ERShvcF9sb29wX2hpbnQpOwogICAgICAgICB9CiAgICAgICAgICAgICAKLSAg
ICAgICAgY2FzZSBvcF9pbml0X2xhenlfcmVnOiB7Ci0gICAgICAgICAgICBzZXQoVmlydHVhbFJl
Z2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpLCBqc0NvbnN0YW50KEpTVmFs
dWUoKSkpOwotICAgICAgICAgICAgQVNTRVJUKG9wZXJhbmRJc0xvY2FsKGN1cnJlbnRJbnN0cnVj
dGlvblsxXS51Lm9wZXJhbmQpKTsKLSAgICAgICAgICAgIG1fZ3JhcGgubV9sYXp5VmFycy5zZXQo
VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpLnRvTG9jYWwo
KSk7Ci0gICAgICAgICAgICBORVhUX09QQ09ERShvcF9pbml0X2xhenlfcmVnKTsKLSAgICAgICAg
fQotICAgICAgICAgICAgCiAgICAgICAgIGNhc2Ugb3BfY3JlYXRlX2xleGljYWxfZW52aXJvbm1l
bnQ6IHsKICAgICAgICAgICAgIE5vZGUqIGxleGljYWxFbnZpcm9ubWVudCA9IGFkZFRvR3JhcGgo
Q3JlYXRlQWN0aXZhdGlvbiwgZ2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25b
MV0udS5vcGVyYW5kKSksIGdldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzJd
LnUub3BlcmFuZCkpKTsKICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudElu
c3RydWN0aW9uWzFdLnUub3BlcmFuZCksIGxleGljYWxFbnZpcm9ubWVudCk7CkBAIC0zNjYzLDQ2
ICszNjQ5LDQ5IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAg
ICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2dldF9zY29wZSk7CiAgICAgICAgIH0KICAgICAgICAg
ICAgIAotICAgICAgICBjYXNlIG9wX2NyZWF0ZV9hcmd1bWVudHM6IHsKLSAgICAgICAgICAgIG1f
Z3JhcGgubV9oYXNBcmd1bWVudHMgPSB0cnVlOwotICAgICAgICAgICAgTm9kZSogY3JlYXRlQXJn
dW1lbnRzID0gYWRkVG9HcmFwaChDcmVhdGVBcmd1bWVudHMsIGdldChWaXJ0dWFsUmVnaXN0ZXIo
Y3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCkpKTsKKyAgICAgICAgY2FzZSBvcF9jcmVh
dGVfZGlyZWN0X2FyZ3VtZW50czogeworICAgICAgICAgICAgbm90aWNlQXJndW1lbnRzVXNlKCk7
CisgICAgICAgICAgICBOb2RlKiBjcmVhdGVBcmd1bWVudHMgPSBhZGRUb0dyYXBoKENyZWF0ZURp
cmVjdEFyZ3VtZW50cyk7CiAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJ
bnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpLCBjcmVhdGVBcmd1bWVudHMpOwotICAgICAgICAgICAg
c2V0KHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudElu
c3RydWN0aW9uWzFdLnUub3BlcmFuZCkpLCBjcmVhdGVBcmd1bWVudHMpOwotICAgICAgICAgICAg
TkVYVF9PUENPREUob3BfY3JlYXRlX2FyZ3VtZW50cyk7Ci0gICAgICAgIH0KLQotICAgICAgICBj
YXNlIG9wX3RlYXJfb2ZmX2FyZ3VtZW50czogewotICAgICAgICAgICAgbV9ncmFwaC5tX2hhc0Fy
Z3VtZW50cyA9IHRydWU7Ci0gICAgICAgICAgICBhZGRUb0dyYXBoKFRlYXJPZmZBcmd1bWVudHMs
IGdldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCkpLCBn
ZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpKSk7Ci0g
ICAgICAgICAgICBORVhUX09QQ09ERShvcF90ZWFyX29mZl9hcmd1bWVudHMpOworICAgICAgICAg
ICAgTkVYVF9PUENPREUob3BfY3JlYXRlX2RpcmVjdF9hcmd1bWVudHMpOwogICAgICAgICB9CiAg
ICAgICAgICAgICAKLSAgICAgICAgY2FzZSBvcF9nZXRfYXJndW1lbnRzX2xlbmd0aDogewotICAg
ICAgICAgICAgbV9ncmFwaC5tX2hhc0FyZ3VtZW50cyA9IHRydWU7Ci0gICAgICAgICAgICBzZXQo
VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpLCBhZGRUb0dy
YXBoKEdldE15QXJndW1lbnRzTGVuZ3RoU2FmZSkpOwotICAgICAgICAgICAgTkVYVF9PUENPREUo
b3BfZ2V0X2FyZ3VtZW50c19sZW5ndGgpOworICAgICAgICBjYXNlIG9wX2NyZWF0ZV9zY29wZWRf
YXJndW1lbnRzOiB7CisgICAgICAgICAgICBub3RpY2VBcmd1bWVudHNVc2UoKTsKKyAgICAgICAg
ICAgIE5vZGUqIGNyZWF0ZUFyZ3VtZW50cyA9IGFkZFRvR3JhcGgoQ3JlYXRlU2NvcGVkQXJndW1l
bnRzLCBnZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQp
KSk7CisgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsx
XS51Lm9wZXJhbmQpLCBjcmVhdGVBcmd1bWVudHMpOworICAgICAgICAgICAgTkVYVF9PUENPREUo
b3BfY3JlYXRlX3Njb3BlZF9hcmd1bWVudHMpOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBv
cF9jcmVhdGVfb3V0X29mX2JhbmRfYXJndW1lbnRzOiB7CisgICAgICAgICAgICBub3RpY2VBcmd1
bWVudHNVc2UoKTsKKyAgICAgICAgICAgIE5vZGUqIGNyZWF0ZUFyZ3VtZW50cyA9IGFkZFRvR3Jh
cGgoQ3JlYXRlT3V0T2ZCYW5kQXJndW1lbnRzKTsKKyAgICAgICAgICAgIHNldChWaXJ0dWFsUmVn
aXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCksIGNyZWF0ZUFyZ3VtZW50cyk7
CisgICAgICAgICAgICBORVhUX09QQ09ERShvcF9jcmVhdGVfb3V0X29mX2JhbmRfYXJndW1lbnRz
KTsKICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgIGNhc2Ugb3BfZ2V0X2FyZ3VtZW50
X2J5X3ZhbDogewotICAgICAgICAgICAgbV9ncmFwaC5tX2hhc0FyZ3VtZW50cyA9IHRydWU7Cisg
ICAgICAgIGNhc2Ugb3BfZ2V0X2Zyb21fYXJndW1lbnRzOiB7CiAgICAgICAgICAgICBzZXQoVmly
dHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpLAogICAgICAgICAg
ICAgICAgIGFkZFRvR3JhcGgoCi0gICAgICAgICAgICAgICAgICAgIEdldE15QXJndW1lbnRCeVZh
bFNhZmUsIE9wSW5mbygwKSwgT3BJbmZvKGdldFByZWRpY3Rpb24oKSksCi0gICAgICAgICAgICAg
ICAgICAgIGdldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFu
ZCkpKSk7Ci0gICAgICAgICAgICBORVhUX09QQ09ERShvcF9nZXRfYXJndW1lbnRfYnlfdmFsKTsK
KyAgICAgICAgICAgICAgICAgICAgR2V0RnJvbUFyZ3VtZW50cywKKyAgICAgICAgICAgICAgICAg
ICAgT3BJbmZvKGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpLAorICAgICAgICAgICAg
ICAgICAgICBPcEluZm8oZ2V0UHJlZGljdGlvbigpKSwKKyAgICAgICAgICAgICAgICAgICAgZ2V0
KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSkpKTsKKyAg
ICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2dldF9mcm9tX2FyZ3VtZW50cyk7CisgICAgICAgIH0K
KyAgICAgICAgICAgIAorICAgICAgICBjYXNlIG9wX3B1dF90b19hcmd1bWVudHM6IHsKKyAgICAg
ICAgICAgIGFkZFRvR3JhcGgoCisgICAgICAgICAgICAgICAgUHV0VG9Bcmd1bWVudHMsCisgICAg
ICAgICAgICAgICAgT3BJbmZvKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpLAorICAg
ICAgICAgICAgICAgIGdldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUu
b3BlcmFuZCkpLAorICAgICAgICAgICAgICAgIGdldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudElu
c3J0dWN0aW9uWzNdLnUub3BlcmFuZCkpKTsKKyAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX3B1
dF90b19hcmd1bWVudHMpOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBv
cF9uZXdfZnVuYzogewotICAgICAgICAgICAgaWYgKCFjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5v
cGVyYW5kKSB7Ci0gICAgICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5z
dHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSwKLSAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChO
ZXdGdW5jdGlvbk5vQ2hlY2ssIE9wSW5mbyhjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5k
KSwgZ2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSkp
KTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdp
c3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSwKLSAgICAgICAgICAgICAgICAg
ICAgYWRkVG9HcmFwaCgKLSAgICAgICAgICAgICAgICAgICAgICAgIE5ld0Z1bmN0aW9uLAotICAg
ICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJh
bmQpLAotICAgICAgICAgICAgICAgICAgICAgICAgZ2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50
SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSksIGdldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudElu
c3RydWN0aW9uWzJdLnUub3BlcmFuZCkpKSk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBz
ZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpLAorICAg
ICAgICAgICAgICAgIGFkZFRvR3JhcGgoTmV3RnVuY3Rpb24sIE9wSW5mbyhjdXJyZW50SW5zdHJ1
Y3Rpb25bM10udS5vcGVyYW5kKSwgZ2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rp
b25bMl0udS5vcGVyYW5kKSkpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX25ld19mdW5j
KTsKICAgICAgICAgfQogCkBAIC0zOTQ3LDIyICszOTM2LDYgQEAgQnl0ZUNvZGVQYXJzZXI6Oklu
bGluZVN0YWNrRW50cnk6OklubGluZQogICAgICAgICBtX2lubGluZUNhbGxGcmFtZS0+YXJndW1l
bnRzLnJlc2l6ZShhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyk7IC8vIFNldCB0aGUgbnVtYmVy
IG9mIGFyZ3VtZW50cyBpbmNsdWRpbmcgdGhpcywgYnV0IGRvbid0IGNvbmZpZ3VyZSB0aGUgdmFs
dWUgcmVjb3ZlcmllcywgeWV0LgogICAgICAgICBtX2lubGluZUNhbGxGcmFtZS0+a2luZCA9IGtp
bmQ7CiAgICAgICAgIAotICAgICAgICBpZiAobV9pbmxpbmVDYWxsRnJhbWUtPmNhbGxlci5pbmxp
bmVDYWxsRnJhbWUpCi0gICAgICAgICAgICBtX2lubGluZUNhbGxGcmFtZS0+Y2FwdHVyZWRWYXJz
ID0gbV9pbmxpbmVDYWxsRnJhbWUtPmNhbGxlci5pbmxpbmVDYWxsRnJhbWUtPmNhcHR1cmVkVmFy
czsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9pbmxpbmVDYWxsRnJhbWUtPmNhcHR1cmVk
VmFycyA9IGJ5dGVDb2RlUGFyc2VyLT5tX2dyYXBoLm1fb3V0ZXJtb3N0Q2FwdHVyZWRWYXJzOwot
Ci0gICAgICAgIGZvciAoaW50IGkgPSBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpczsgaS0tOykg
ewotICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50ID0gdmlydHVhbFJlZ2lzdGVy
Rm9yQXJndW1lbnQoaSk7Ci0gICAgICAgICAgICBpZiAoY29kZUJsb2NrLT5pc0NhcHR1cmVkKGFy
Z3VtZW50KSkKLSAgICAgICAgICAgICAgICBtX2lubGluZUNhbGxGcmFtZS0+Y2FwdHVyZWRWYXJz
LnNldChWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnQub2Zmc2V0KCkgKyBtX2lubGluZUNhbGxGcmFt
ZS0+c3RhY2tPZmZzZXQpLnRvTG9jYWwoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgZm9yIChzaXpl
X3QgaSA9IGNvZGVCbG9jay0+bV9udW1WYXJzOyBpLS07KSB7Ci0gICAgICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIgbG9jYWwgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpKTsKLSAgICAgICAgICAg
IGlmIChjb2RlQmxvY2stPmlzQ2FwdHVyZWQobG9jYWwpKQotICAgICAgICAgICAgICAgIG1faW5s
aW5lQ2FsbEZyYW1lLT5jYXB0dXJlZFZhcnMuc2V0KFZpcnR1YWxSZWdpc3Rlcihsb2NhbC5vZmZz
ZXQoKSArIG1faW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCkudG9Mb2NhbCgpKTsKLSAgICAg
ICAgfQotCiAgICAgICAgIGJ5dGVDb2RlUGFyc2VyLT5idWlsZE9wZXJhbmRNYXBzSWZOZWNlc3Nh
cnkoKTsKICAgICAgICAgCiAgICAgICAgIG1faWRlbnRpZmllclJlbWFwLnJlc2l6ZShjb2RlQmxv
Y2stPm51bWJlck9mSWRlbnRpZmllcnMoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0NQU1JldGhyZWFkaW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQ1BTUmV0aHJlYWRpbmdQaGFzZS5jcHAJKHJldmlzaW9uIDE4MDg3
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1BTUmV0aHJlYWRpbmdQaGFzZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE5MiwyMSArMTkyLDYgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAg
IGlmICh2YXJpYWJsZS0+aXNDYXB0dXJlZCgpKSB7Ci0gICAgICAgICAgICAgICAgdmFyaWFibGUt
PnNldElzTG9hZGVkRnJvbSh0cnVlKTsKLSAgICAgICAgICAgICAgICBpZiAob3RoZXJOb2RlLT5v
cCgpID09IEdldExvY2FsKQotICAgICAgICAgICAgICAgICAgICBvdGhlck5vZGUgPSBvdGhlck5v
ZGUtPmNoaWxkMSgpLm5vZGUoKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgICAgIEFTU0VSVChvdGhlck5vZGUtPm9wKCkgPT0gU2V0TG9jYWwgfHwgb3RoZXJOb2RlLT5v
cCgpID09IFNldEFyZ3VtZW50KTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBB
U1NFUlQob3RoZXJOb2RlLT5vcCgpID09IFBoaSB8fCBvdGhlck5vZGUtPm9wKCkgPT0gU2V0TG9j
YWwgfHwgb3RoZXJOb2RlLT5vcCgpID09IFNldEFyZ3VtZW50KTsKLSAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICAvLyBLZWVwIHRoaXMgR2V0TG9jYWwgYnV0IGxpbmsgaXQgdG8gdGhl
IHByaW9yIG9uZXMuCi0gICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4uc2V0Q2hpbGQxKEVk
Z2Uob3RoZXJOb2RlKSk7Ci0gICAgICAgICAgICAgICAgbV9ibG9jay0+dmFyaWFibGVzQXRUYWls
LmF0Rm9yPG9wZXJhbmRLaW5kPihpZHgpID0gbm9kZTsKLSAgICAgICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChvdGhlck5vZGUt
Pm9wKCkgPT0gR2V0TG9jYWwpIHsKICAgICAgICAgICAgICAgICAvLyBSZXBsYWNlIGFsbCByZWZl
cmVuY2VzIHRvIHRoaXMgR2V0TG9jYWwgd2l0aCBvdGhlck5vZGUuCiAgICAgICAgICAgICAgICAg
bm9kZS0+cmVwbGFjZW1lbnQgPSBvdGhlck5vZGU7CkBAIC0zMzUsMTAgKzMyMCw4IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICAvLyB0aGVyZSBldmVyIHdhcyBhIFNldExvY2FsIGFuZCBpdCB3YXMg
Zm9sbG93ZWQgYnkgRmx1c2hlcywgdGhlbiB0aGUgdGFpbAogICAgICAgICAgICAgLy8gdmFyaWFi
bGUgd2lsbCBiZSBhIFNldExvY2FsIGFuZCBub3QgdGhvc2Ugc3Vic2VxdWVudCBGbHVzaGVzLgog
ICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vIENoaWxkIG9mIEdldExvY2FsOiB0aGUgb3Bl
cmF0aW9uIHRoYXQgdGhlIEdldExvY2FsIGtlZXBzIGFsaXZlLiBGb3IKLSAgICAgICAgICAgIC8v
IHVuY2FwdHVyZWQgbG9jYWxzLCBpdCBtYXkgYmUgYSBQaGkgZnJvbSB0aGUgY3VycmVudCBibG9j
ay4gRm9yIGFyZ3VtZW50cywKLSAgICAgICAgICAgIC8vIGl0IG1heSBiZSBhIFNldEFyZ3VtZW50
LiBGb3IgY2FwdHVyZWQgbG9jYWxzIGFuZCBhcmd1bWVudHMgaXQgbWF5IGFsc28gYmUKLSAgICAg
ICAgICAgIC8vIGEgU2V0TG9jYWwuCisgICAgICAgICAgICAvLyBDaGlsZCBvZiBHZXRMb2NhbDog
dGhlIG9wZXJhdGlvbiB0aGF0IHRoZSBHZXRMb2NhbCBrZWVwcyBhbGl2ZS4gSXQgbWF5IGJlCisg
ICAgICAgICAgICAvLyBhIFBoaSBmcm9tIHRoZSBjdXJyZW50IGJsb2NrLiBGb3IgYXJndW1lbnRz
LCBpdCBtYXkgYmUgYSBTZXRBcmd1bWVudC4KICAgICAgICAgICAgIC8vCiAgICAgICAgICAgICAv
LyBDaGlsZCBvZiBTZXRMb2NhbDogbXVzdCBiZSBhIHZhbHVlIHByb2R1Y2luZyBub2RlLgogICAg
ICAgICAgICAgLy8KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2Uu
Y3BwCShyZXZpc2lvbiAxODA4NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NT
RVBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzI2LDggKzMyNiw4IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICAgICAgICAgIGlmIChtX25vZGUt
Pm9wKCkgPT0gR2V0TG9jYWwpIHsKLSAgICAgICAgICAgICAgICAvLyBGb3IgdW5jYXB0dXJlZCBs
b2NhbHMsIHVzdWFsbHkgdGhlIENQUyByZXRocmVhZGluZyBwaGFzZSBkb2VzIHRoaXMuIEJ1dCBp
dCdzIE9LCi0gICAgICAgICAgICAgICAgLy8gZm9yIHVzIHRvIG1lc3Mgd2l0aCBsb2NhbHMgLSBy
ZWdhcmRsZXNzIG9mIHRoZWlyIGNhcHR1cmVkbmVzcyAtIHNvIGxvbmcgYXM6CisgICAgICAgICAg
ICAgICAgLy8gVXN1YWxseSB0aGUgQ1BTIHJldGhyZWFkaW5nIHBoYXNlIGRvZXMgdGhpcy4gQnV0
IGl0J3MgT0sgZm9yIHVzIHRvIG1lc3Mgd2l0aAorICAgICAgICAgICAgICAgIC8vIGxvY2FscyBz
byBsb25nIGFzOgogICAgICAgICAgICAgICAgIC8vIAogICAgICAgICAgICAgICAgIC8vIC0gV2Ug
ZGV0aHJlYWQgdGhlIGdyYXBoLiBBbnkgY2hhbmdlcyB3ZSBtYWtlIG1heSBpbnZhbGlkYXRlIHRo
ZSBhc3N1bXB0aW9ucyBvZgogICAgICAgICAgICAgICAgIC8vICAgb3VyIENQUyBmb3JtLCBwYXJ0
aWN1bGFybHkgaWYgdGhpcyBHZXRMb2NhbCBpcyBsaW5rZWQgdG8gdGhlIHZhcmlhYmxlc0F0VGFp
bC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCShyZXZp
c2lvbiAxODA4NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUu
aAkod29ya2luZyBjb3B5KQpAQCAtMjk2LDcgKzI5Niw3IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFw
aCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICAgICAgcmV0dXJuOwogCiAgICAgY2FzZSBGbHVzaDoK
LSAgICAgICAgcmVhZChBYnN0cmFjdEhlYXAoVmFyaWFibGVzLCBub2RlLT5sb2NhbCgpKSk7Cisg
ICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKFN0YWNrLCBub2RlLT5sb2NhbCgpKSk7CiAgICAgICAg
IHdyaXRlKFNpZGVTdGF0ZSk7CiAgICAgICAgIHJldHVybjsKIApAQCAtMzE5LDcgKzMxOSw3IEBA
IHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICAgICAgcmV0dXJu
OwogICAgICAgICAKICAgICBjYXNlIENyZWF0ZUFyZ3VtZW50czoKLSAgICAgICAgcmVhZChWYXJp
YWJsZXMpOworICAgICAgICByZWFkKFN0YWNrKTsKICAgICAgICAgcmVhZChIZWFwT2JqZWN0Q291
bnQpOwogICAgICAgICB3cml0ZShIZWFwT2JqZWN0Q291bnQpOwogICAgICAgICB3cml0ZShTaWRl
U3RhdGUpOwpAQCAtMzk2LDMxICszOTYsMzEgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFw
aCwgTm9kZSogbm9kZQogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2UgR2V0Q2Fs
bGVlOgotICAgICAgICByZWFkKEFic3RyYWN0SGVhcChWYXJpYWJsZXMsIEpTU3RhY2s6OkNhbGxl
ZSkpOwotICAgICAgICBkZWYoSGVhcExvY2F0aW9uKFZhcmlhYmxlTG9jLCBBYnN0cmFjdEhlYXAo
VmFyaWFibGVzLCBKU1N0YWNrOjpDYWxsZWUpKSwgbm9kZSk7CisgICAgICAgIHJlYWQoQWJzdHJh
Y3RIZWFwKFN0YWNrLCBKU1N0YWNrOjpDYWxsZWUpKTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlv
bihTdGFja0xvYywgQWJzdHJhY3RIZWFwKFN0YWNrLCBKU1N0YWNrOjpDYWxsZWUpKSwgbm9kZSk7
CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBHZXRMb2NhbDoKLSAgICAgICAg
cmVhZChBYnN0cmFjdEhlYXAoVmFyaWFibGVzLCBub2RlLT5sb2NhbCgpKSk7Ci0gICAgICAgIGRl
ZihIZWFwTG9jYXRpb24oVmFyaWFibGVMb2MsIEFic3RyYWN0SGVhcChWYXJpYWJsZXMsIG5vZGUt
PmxvY2FsKCkpKSwgbm9kZSk7CisgICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKFN0YWNrLCBub2Rl
LT5sb2NhbCgpKSk7CisgICAgICAgIGRlZihIZWFwTG9jYXRpb24oU3RhY2tMb2MsIEFic3RyYWN0
SGVhcChTdGFjaywgbm9kZS0+bG9jYWwoKSkpLCBub2RlKTsKICAgICAgICAgcmV0dXJuOwogICAg
ICAgICAKICAgICBjYXNlIFNldExvY2FsOgotICAgICAgICB3cml0ZShBYnN0cmFjdEhlYXAoVmFy
aWFibGVzLCBub2RlLT5sb2NhbCgpKSk7Ci0gICAgICAgIGRlZihIZWFwTG9jYXRpb24oVmFyaWFi
bGVMb2MsIEFic3RyYWN0SGVhcChWYXJpYWJsZXMsIG5vZGUtPmxvY2FsKCkpKSwgbm9kZS0+Y2hp
bGQxKCkubm9kZSgpKTsKKyAgICAgICAgd3JpdGUoQWJzdHJhY3RIZWFwKFN0YWNrLCBub2RlLT5s
b2NhbCgpKSk7CisgICAgICAgIGRlZihIZWFwTG9jYXRpb24oU3RhY2tMb2MsIEFic3RyYWN0SGVh
cChTdGFjaywgbm9kZS0+bG9jYWwoKSkpLCBub2RlLT5jaGlsZDEoKS5ub2RlKCkpOwogICAgICAg
ICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2UgR2V0U3RhY2s6IHsKLSAgICAgICAgQWJzdHJh
Y3RIZWFwIGhlYXAoVmFyaWFibGVzLCBub2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+bG9jYWwpOwor
ICAgICAgICBBYnN0cmFjdEhlYXAgaGVhcChTdGFjaywgbm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCkt
PmxvY2FsKTsKICAgICAgICAgcmVhZChoZWFwKTsKLSAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihW
YXJpYWJsZUxvYywgaGVhcCksIG5vZGUpOworICAgICAgICBkZWYoSGVhcExvY2F0aW9uKFN0YWNr
TG9jLCBoZWFwKSwgbm9kZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgICAgIAogICAg
IGNhc2UgUHV0U3RhY2s6IHsKLSAgICAgICAgQWJzdHJhY3RIZWFwIGhlYXAoVmFyaWFibGVzLCBu
b2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+bG9jYWwpOworICAgICAgICBBYnN0cmFjdEhlYXAgaGVh
cChTdGFjaywgbm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCktPmxvY2FsKTsKICAgICAgICAgd3JpdGUo
aGVhcCk7Ci0gICAgICAgIGRlZihIZWFwTG9jYXRpb24oVmFyaWFibGVMb2MsIGhlYXApLCBub2Rl
LT5jaGlsZDEoKS5ub2RlKCkpOworICAgICAgICBkZWYoSGVhcExvY2F0aW9uKFN0YWNrTG9jLCBo
ZWFwKSwgbm9kZS0+Y2hpbGQxKCkubm9kZSgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAg
ICAgICAgCkBAIC00MzIsOCArNDMyLDggQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwg
Tm9kZSogbm9kZQogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2UgR2V0TG9jYWxV
bmxpbmtlZDoKLSAgICAgICAgcmVhZChBYnN0cmFjdEhlYXAoVmFyaWFibGVzLCBub2RlLT51bmxp
bmtlZExvY2FsKCkpKTsKLSAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihWYXJpYWJsZUxvYywgQWJz
dHJhY3RIZWFwKFZhcmlhYmxlcywgbm9kZS0+dW5saW5rZWRMb2NhbCgpKSksIG5vZGUpOworICAg
ICAgICByZWFkKEFic3RyYWN0SGVhcChTdGFjaywgbm9kZS0+dW5saW5rZWRMb2NhbCgpKSk7Cisg
ICAgICAgIGRlZihIZWFwTG9jYXRpb24oU3RhY2tMb2MsIEFic3RyYWN0SGVhcChTdGFjaywgbm9k
ZS0+dW5saW5rZWRMb2NhbCgpKSksIG5vZGUpOwogICAgICAgICByZXR1cm47CiAgICAgICAgIAog
ICAgIGNhc2UgR2V0QnlWYWw6IHsKQEAgLTQ2NiwxMCArNDY2LDE0IEBAIHZvaWQgY2xvYmJlcml6
ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICAgICAgICAgIGRlZihQdXJlVmFsdWUobm9k
ZSwgbW9kZS5hc1dvcmQoKSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgCi0g
ICAgICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czoKLSAgICAgICAgICAgIHJlYWQoQXJndW1lbnRz
X3JlZ2lzdGVycyk7Ci0gICAgICAgICAgICByZWFkKFZhcmlhYmxlcyk7Ci0gICAgICAgICAgICBk
ZWYoSGVhcExvY2F0aW9uKEluZGV4ZWRQcm9wZXJ0eUxvYywgVmFyaWFibGVzLCBub2RlLT5jaGls
ZDEoKSwgbm9kZS0+Y2hpbGQyKCkpLCBub2RlKTsKKyAgICAgICAgY2FzZSBBcnJheTo6RGlyZWN0
QXJndW1lbnRzOgorICAgICAgICAgICAgcmVhZChEaXJlY3RBcmd1bWVudHNQcm9wZXJ0aWVzKTsK
KyAgICAgICAgICAgIGRlZihIZWFwTG9jYXRpb24oSW5kZXhlZFByb3BlcnR5TG9jLCBEaXJlY3RB
cmd1bWVudHNQcm9wZXJ0aWVzLCBub2RlLT5jaGlsZDEoKSwgbm9kZS0+Y2hpbGQyKCkpLCBub2Rl
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEFycmF5
OjpTY29wZWRBcmd1bWVudHM6CisgICAgICAgICAgICByZWFkKFNjb3BlUHJvcGVydGllcyk7Cisg
ICAgICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEluZGV4ZWRQcm9wZXJ0eUxvYywgU2NvcGVQcm9w
ZXJ0aWVzLCBub2RlLT5jaGlsZDEoKSwgbm9kZS0+Y2hpbGQyKCkpLCBub2RlKTsKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFycmF5OjpJbnQzMjoKQEAg
LTU2MCwxMyArNTY0LDYgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9k
ZQogICAgICAgICAgICAgd3JpdGUoSGVhcCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
ICAgICAKLSAgICAgICAgY2FzZSBBcnJheTo6QXJndW1lbnRzOgotICAgICAgICAgICAgcmVhZChB
cmd1bWVudHNfcmVnaXN0ZXJzKTsKLSAgICAgICAgICAgIHJlYWQoTWlzY0ZpZWxkcyk7Ci0gICAg
ICAgICAgICB3cml0ZShWYXJpYWJsZXMpOwotICAgICAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihJ
bmRleGVkUHJvcGVydHlMb2MsIFZhcmlhYmxlcywgYmFzZSwgaW5kZXgpLCB2YWx1ZSk7Ci0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcnJheTo6SW50MzI6
CiAgICAgICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkuaXNPdXRPZkJvdW5kcygpKSB7CiAg
ICAgICAgICAgICAgICAgcmVhZChXb3JsZCk7CkBAIC03NjEsNyArNzU4LDggQEAgdm9pZCBjbG9i
YmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgICAgICAgICAgZGVmKFB1cmVWYWx1
ZShub2RlLCBtb2RlLmFzV29yZCgpKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAg
ICAKLSAgICAgICAgY2FzZSBBcnJheTo6QXJndW1lbnRzOgorICAgICAgICBjYXNlIEFycmF5OjpE
aXJlY3RBcmd1bWVudHM6CisgICAgICAgIGNhc2UgQXJyYXk6OlNjb3BlZEFyZ3VtZW50czoKICAg
ICAgICAgICAgIHJlYWQoTWlzY0ZpZWxkcyk7CiAgICAgICAgICAgICBkZWYoSGVhcExvY2F0aW9u
KEFycmF5TGVuZ3RoTG9jLCBNaXNjRmllbGRzLCBub2RlLT5jaGlsZDEoKSksIG5vZGUpOwogICAg
ICAgICAgICAgcmV0dXJuOwpAQCAtNzgwLDEzICs3NzgsMTMgQEAgdm9pZCBjbG9iYmVyaXplKEdy
YXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgICAgICByZXR1cm47CiAKICAgICBjYXNlIEdldENs
b3N1cmVWYXI6Ci0gICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKFZhcmlhYmxlcywgbm9kZS0+dmFy
TnVtYmVyKCkpKTsKLSAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihDbG9zdXJlVmFyaWFibGVMb2Ms
IEFic3RyYWN0SGVhcChWYXJpYWJsZXMsIG5vZGUtPnZhck51bWJlcigpKSwgbm9kZS0+Y2hpbGQx
KCkpLCBub2RlKTsKKyAgICAgICAgcmVhZChBYnN0cmFjdEhlYXAoU2NvcGVQcm9wZXJ0aWVzLCBu
b2RlLT5zY29wZU9mZnNldCgpLm9mZmV0KCkpKTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihD
bG9zdXJlVmFyaWFibGVMb2MsIEFic3RyYWN0SGVhcChTY29wZVByb3BlcnRpZXMsIG5vZGUtPnNj
b3BlT2Zmc2V0KCkub2Zmc2V0KCkpLCBub2RlLT5jaGlsZDEoKSksIG5vZGUpOwogICAgICAgICBy
ZXR1cm47CiAgICAgICAgIAogICAgIGNhc2UgUHV0Q2xvc3VyZVZhcjoKLSAgICAgICAgd3JpdGUo
QWJzdHJhY3RIZWFwKFZhcmlhYmxlcywgbm9kZS0+dmFyTnVtYmVyKCkpKTsKLSAgICAgICAgZGVm
KEhlYXBMb2NhdGlvbihDbG9zdXJlVmFyaWFibGVMb2MsIEFic3RyYWN0SGVhcChWYXJpYWJsZXMs
IG5vZGUtPnZhck51bWJlcigpKSwgbm9kZS0+Y2hpbGQyKCkpLCBub2RlLT5jaGlsZDMoKS5ub2Rl
KCkpOworICAgICAgICB3cml0ZShBYnN0cmFjdEhlYXAoU2NvcGVQcm9wZXJ0aWVzLCBub2RlLT5z
Y29wZU9mZnNldCgpLm9mZnNldCgpKSk7CisgICAgICAgIGRlZihIZWFwTG9jYXRpb24oQ2xvc3Vy
ZVZhcmlhYmxlTG9jLCBBYnN0cmFjdEhlYXAoU2NvcGVQcm9wZXJ0aWVzLCBub2RlLT5zY29wZU9m
ZnNldCgpLm9mZnNldCgpKSwgbm9kZS0+Y2hpbGQyKCkpLCBub2RlLT5jaGlsZDMoKS5ub2RlKCkp
OwogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2UgR2V0R2xvYmFsVmFyOgpAQCAt
ODcwLDI4ICs4NjgsMjMgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9k
ZQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIAotICAgIGNhc2UgVGVh
ck9mZkFyZ3VtZW50czoKLSAgICAgICAgcmVhZChWYXJpYWJsZXMpOwotICAgICAgICB3cml0ZShB
cmd1bWVudHNfcmVnaXN0ZXJzKTsKLSAgICAgICAgcmV0dXJuOwotICAgICAgICAKICAgICBjYXNl
IEdldE15QXJndW1lbnRzTGVuZ3RoOgotICAgICAgICByZWFkKEFic3RyYWN0SGVhcChWYXJpYWJs
ZXMsIGdyYXBoLmFyZ3VtZW50c1JlZ2lzdGVyRm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpKTsK
LSAgICAgICAgcmVhZChBYnN0cmFjdEhlYXAoVmFyaWFibGVzLCBKU1N0YWNrOjpBcmd1bWVudENv
dW50KSk7CisgICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKFN0YWNrLCBncmFwaC5hcmd1bWVudHNS
ZWdpc3RlckZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSk7CisgICAgICAgIHJlYWQoQWJzdHJh
Y3RIZWFwKFN0YWNrLCBKU1N0YWNrOjpBcmd1bWVudENvdW50KSk7CiAgICAgICAgIC8vIEZJWE1F
OiBXZSBjb3VsZCBkZWYoKSB0aGlzIGJ5IHNwZWNpZnlpbmcgdGhlIGNvZGUgb3JpZ2luIGFzIGEg
a2luZCBvZiBtX2luZm8sIGxpa2Ugd2UKICAgICAgICAgLy8gaGF2ZSBmb3IgUHVyZVZhbHVlLgog
ICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM0Nzk3
CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWw6
Ci0gICAgICAgIHJlYWQoVmFyaWFibGVzKTsKKyAgICAgICAgcmVhZChTdGFjayk7CiAgICAgICAg
IC8vIEZJWE1FOiBXZSBjb3VsZCBkZWYoKSB0aGlzIGJ5IHNwZWNpZnlpbmcgdGhlIGNvZGUgb3Jp
Z2luIGFzIGEga2luZCBvZiBtX2luZm8sIGxpa2Ugd2UKICAgICAgICAgLy8gaGF2ZSBmb3IgUHVy
ZVZhbHVlLgogICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTM0Nzk3CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBDaGVja0FyZ3Vt
ZW50c05vdENyZWF0ZWQ6Ci0gICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKFZhcmlhYmxlcywgZ3Jh
cGguYXJndW1lbnRzUmVnaXN0ZXJGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSkpOworICAgICAg
ICByZWFkKEFic3RyYWN0SGVhcChTdGFjaywgZ3JhcGguYXJndW1lbnRzUmVnaXN0ZXJGb3Iobm9k
ZS0+b3JpZ2luLnNlbWFudGljKSkpOwogICAgICAgICByZXR1cm47CiAKICAgICBjYXNlIFRocm93
UmVmZXJlbmNlRXJyb3I6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1v
bi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmgJ
KHJldmlzaW9uIDE4MDg3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9u
LmgJKHdvcmtpbmcgY29weSkKQEAgLTE5MywxMiArMTkzLDEwIEBAIGVudW0gR3JhcGhGb3JtIHsK
ICAgICAvLyBleHBlY3QgdG8gYmUgbGl2ZSBhdCB0aGUgaGVhZCwgYW5kIHdoaWNoIGxvY2FscyB0
aGV5IG1ha2UgYXZhaWxhYmxlIGF0IHRoZQogICAgIC8vIHRhaWwuIFRocmVhZGVkQ1BTIGZvcm0g
YWxzbyBpbXBsaWVzIHRoYXQ6CiAgICAgLy8KLSAgICAvLyAtIEdldExvY2FscyBhbmQgU2V0TG9j
YWxzIHRvIHVuY2FwdHVyZWQgdmFyaWFibGVzIGFyZSBub3QgcmVkdW5kYW50IHdpdGhpbgotICAg
IC8vICAgYSBiYXNpYyBibG9jay4KKyAgICAvLyAtIEdldExvY2FscyBhbmQgU2V0TG9jYWxzIGFy
ZSBub3QgcmVkdW5kYW50IHdpdGhpbiBhIGJhc2ljIGJsb2NrLgogICAgIC8vCiAgICAgLy8gLSBB
bGwgR2V0TG9jYWxzIGFuZCBGbHVzaGVzIGFyZSBsaW5rZWQgZGlyZWN0bHkgdG8gdGhlIGxhc3Qg
YWNjZXNzIHBvaW50Ci0gICAgLy8gICBvZiB0aGUgdmFyaWFibGUsIHdoaWNoIG11c3Qgbm90IGJl
IGFub3RoZXIgR2V0TG9jYWwgaWYgdGhlIHZhcmlhYmxlIGlzCi0gICAgLy8gICB1bmNhcHR1cmVk
LgorICAgIC8vICAgb2YgdGhlIHZhcmlhYmxlLCB3aGljaCBtdXN0IG5vdCBiZSBhbm90aGVyIEdl
dExvY2FsLgogICAgIC8vCiAgICAgLy8gLSBQaGFudG9tKFBoaSkgaXMgbm90IGxlZ2FsLCBidXQg
UGhhbnRvbUxvY2FsIGlzLgogICAgIC8vCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAkocmV2aXNpb24gMTgwODc1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTk3LDE2ICs5Nyw2IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICBjYXNlIENoZWNrQXJndW1lbnRzTm90Q3JlYXRlZDogewotICAgICAgICAgICAgICAgIGlmICgh
aXNFbXB0eVNwZWN1bGF0aW9uKAotICAgICAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZS52YXJp
YWJsZXMoKS5vcGVyYW5kKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguYXJn
dW1lbnRzUmVnaXN0ZXJGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSkubV90eXBlKSkKLSAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvUGhh
bnRvbSgpOwotICAgICAgICAgICAgICAgIGVsaW1pbmF0ZWQgPSB0cnVlOwotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAKICAgICAgICAg
ICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6CiAgICAgICAgICAgICBjYXNlIEFycmF5aWZ5VG9TdHJ1
Y3R1cmU6IHsKICAgICAgICAgICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IG1fc3RhdGUu
Zm9yTm9kZShub2RlLT5jaGlsZDEoKSk7CkBAIC0zNzcsMzcgKzM2Nyw2IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZhbDogewotICAgICAgICAgICAgICAgIElu
bGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0gbm9kZS0+b3JpZ2luLnNlbWFudGljLmlu
bGluZUNhbGxGcmFtZTsKLSAgICAgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV9zdGF0ZS5m
b3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3ZhbHVlOwotICAgICAgICAgICAgICAgIGlmIChpbmxp
bmVDYWxsRnJhbWUgJiYgdmFsdWUgJiYgdmFsdWUuaXNJbnQzMigpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGludDMyX3QgaW5kZXggPSB2YWx1ZS5hc0ludDMyKCk7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmIChpbmRleCA+PSAwCi0gICAgICAgICAgICAgICAgICAgICAgICAmJiBzdGF0aWNfY2Fz
dDxzaXplX3Q+KGluZGV4ICsgMSkgPCBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCkp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJvbGwgdGhlIGludGVycHJldGVyIG92ZXIg
dGhpcy4KLSAgICAgICAgICAgICAgICAgICAgICAgIG1faW50ZXJwcmV0ZXIuZXhlY3V0ZShpbmRl
eEluQmxvY2spOwotICAgICAgICAgICAgICAgICAgICAgICAgZWxpbWluYXRlZCA9IHRydWU7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBvcGVy
YW5kID0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmxpbmVDYWxsRnJhbWUtPnN0YWNr
T2Zmc2V0ICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmJhc2VsaW5lQ29k
ZUJsb2NrRm9yKGlubGluZUNhbGxGcmFtZSktPmFyZ3VtZW50SW5kZXhBZnRlckNhcHR1cmUoaW5k
ZXgpOwotICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICBt
X2luc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
ZGV4SW5CbG9jaywgU3BlY05vbmUsIENoZWNrQXJndW1lbnRzTm90Q3JlYXRlZCwgbm9kZS0+b3Jp
Z2luKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUo
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgUGhh
bnRvbSwgbm9kZS0+b3JpZ2luLCBub2RlLT5jaGlsZHJlbik7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fZm9ybSA9PSBTU0Ep
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvR2V0U3RhY2sobV9n
cmFwaC5tX3N0YWNrQWNjZXNzRGF0YS5hZGQoVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLCBGbHVz
aGVkSlNWYWx1ZSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb0dldExvY2FsVW5saW5rZWQoVmlydHVhbFJl
Z2lzdGVyKG9wZXJhbmQpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgY2FzZSBDaGVjazogewogICAgICAgICAgICAgICAgIGFscmVhZHlIYW5kbGVkID0g
dHJ1ZTsKICAgICAgICAgICAgICAgICBtX2ludGVycHJldGVyLmV4ZWN1dGUoaW5kZXhJbkJsb2Nr
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRENFUGhhc2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRENFUGhhc2UuY3BwCShyZXZp
c2lvbiAxODA4NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RDRVBoYXNlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjA1LDM3ICsyMDUsNyBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgaWYgKG5vZGUtPm9wKCkgPT0gR2V0TG9jYWwpIHsKICAgICAgICAgICAgICAgICBub2RlID0g
bm9kZS0+Y2hpbGQxKCkubm9kZSgpOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
IC8vIEZJWE1FOiBJbiB0aGUgY2FzZSB0aGF0IHRoZSB2YXJpYWJsZSBpcyBjYXB0dXJlZCwgd2Ug
cmVhbGx5IHdhbnQgdG8gYmUgYWJsZQotICAgICAgICAgICAgICAgIC8vIHRvIHJlcGxhY2UgdGhl
IHZhcmlhYmxlLWF0LXRhaWwgd2l0aCB0aGUgbGFzdCB1c2Ugb2YgdGhlIHZhcmlhYmxlIGluIHRo
ZSBzYW1lCi0gICAgICAgICAgICAgICAgLy8gd2F5IHRoYXQgQ1BTIHJldGhyZWFkaW5nIHdvdWxk
IGRvLiBUaGUgY2hpbGQgb2YgdGhlIEdldExvY2FsIGlzbid0IG5lY2Vzc2FyaWx5Ci0gICAgICAg
ICAgICAgICAgLy8gdGhlIHNhbWUgYXMgd2hhdCBDUFMgcmV0aHJlYWRpbmcgd291bGQgZG8uIEZv
ciBleGFtcGxlLCB3ZSBtYXkgaGF2ZToKLSAgICAgICAgICAgICAgICAvLwotICAgICAgICAgICAg
ICAgIC8vIGE6IFNldExvY2FsKC4uLikgLy8gbGl2ZQotICAgICAgICAgICAgICAgIC8vIGI6IEdl
dExvY2FsKEBhKSAvLyBsaXZlCi0gICAgICAgICAgICAgICAgLy8gYzogR2V0TG9jYWwoQGEpIC8v
IGRlYWQKLSAgICAgICAgICAgICAgICAvLwotICAgICAgICAgICAgICAgIC8vIFdoZW4ga2lsbGlu
ZyBAYywgdGhlIGNvZGUgYmVsb3cgd2lsbCBzZXQgdGhlIHZhcmlhYmxlLWF0LXRhaWwgdG8gQGEs
IHdoaWxlIENQUwotICAgICAgICAgICAgICAgIC8vIHJldGhyZWFkaW5nIHdvdWxkIGhhdmUgc2V0
IEBiLiBUaGlzIGlzIGEgYmVuaWduIGJ1Zywgc2luY2UgYWxsIGNsaWVudHMgb2YgQ1BTCi0gICAg
ICAgICAgICAgICAgLy8gb25seSB1c2UgdGhlIHZhcmlhYmxlLWF0LXRhaWwgb2YgY2FwdHVyZWQg
dmFyaWFibGVzIHRvIGdldCB0aGUKLSAgICAgICAgICAgICAgICAvLyBWYXJpYWJsZUFjY2Vzc0Rh
dGEgYW5kIG9ic2VydmUgdGhhdCBpdCBpcyBpbiBmYWN0IGNhcHR1cmVkLiBCdXQsIHRoaXMgZmVl
bHMKLSAgICAgICAgICAgICAgICAvLyBsaWtlIGl0IGNvdWxkIGNhdXNlIGJ1Z3MgaW4gdGhlIGZ1
dHVyZS4KLSAgICAgICAgICAgICAgICAvLwotICAgICAgICAgICAgICAgIC8vIEl0J3MgdGVtcHRp
bmcgdG8ganVzdCBkZXRocmVhZCBhbmQgdGhlbiBpbnZva2UgQ1BTIHJldGhyZWFkaW5nLCBidXQg
Q1BTCi0gICAgICAgICAgICAgICAgLy8gcmV0aHJlYWRpbmcgZmFpbHMgdG8gcHJlc2VydmUgZXhh
Y3QgcmVmLWNvdW50cy4gU28gd2Ugd291bGQgbmVlZCBhIGZpeHBvaW50LgotICAgICAgICAgICAg
ICAgIC8vIEl0J3MgcHJvYmFibHkgdGhlIGNhc2UgdGhhdCB0aGlzIGZpeHBvaW50IHdpbGwgYmUg
Z3VhcmFudGVlZCB0byBjb252ZXJnZSBhZnRlcgotICAgICAgICAgICAgICAgIC8vIHRoZSBzZWNv
bmQgaXRlcmF0aW9uIChpLmUuIHRoZSBzZWNvbmQgcnVuIG9mIERDRSB3aWxsIG5vdCBraWxsIGFu
eXRoaW5nIGFuZCBzbwotICAgICAgICAgICAgICAgIC8vIHdpbGwgbm90IG5lZWQgdG8gZGV0aHJl
YWQpLCBidXQgZm9yIG5vdyB0aGUgc2FmZXN0IGFwcHJvYWNoIGlzIHByb2JhYmx5IGp1c3QgdG8K
LSAgICAgICAgICAgICAgICAvLyBhbGxvdyBmb3IgdGhpcyB0aW55IGJpdCBvZiBzbG9wcGluZXNz
LgotICAgICAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAgICAgLy8gQW5vdGhlciBwb3NzaWJs
ZSBzb2x1dGlvbiB3b3VsZCBiZSB0byBzaW1wbHkgc2F5IHRoYXQgRENFIGRldGhyZWFkcyBidXQg
dGhlbgotICAgICAgICAgICAgICAgIC8vIHdlIG5ldmVyIHJldGhyZWFkIGJlZm9yZSBnb2luZyB0
byB0aGUgYmFja2VuZC4gVGhhdCBmZWVscyBpbnR1aXRpdmVseSByaWdodAotICAgICAgICAgICAg
ICAgIC8vIGJlY2F1c2UgaXQncyB1bmxpa2VseSB0aGF0IGFueSBvZiB0aGUgcGhhc2VzIGFmdGVy
IERDRSBpbiB0aGUgYmFja2VuZCByZWx5IG9uCi0gICAgICAgICAgICAgICAgLy8gVGhyZWFkZWRD
UFMuCi0gICAgICAgICAgICAgICAgLy8KLSAgICAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMwMTE1Ci0gICAgICAgICAgICAgICAgQVNTRVJU
KAotICAgICAgICAgICAgICAgICAgICBub2RlLT5vcCgpID09IFBoaSB8fCBub2RlLT5vcCgpID09
IFNldEFyZ3VtZW50Ci0gICAgICAgICAgICAgICAgICAgIHx8IG5vZGUtPnZhcmlhYmxlQWNjZXNz
RGF0YSgpLT5pc0NhcHR1cmVkKCkpOworICAgICAgICAgICAgICAgIEFTU0VSVChub2RlLT5vcCgp
ID09IFBoaSB8fCBub2RlLT5vcCgpID09IFNldEFyZ3VtZW50KTsKICAgICAgICAgICAgICAgICAK
ICAgICAgICAgICAgICAgICBpZiAobm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkgewogICAgICAgICAg
ICAgICAgICAgICB2YXJpYWJsZXNbaV0gPSBub2RlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCShyZXZpc2lvbiAxODA4NzUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02
ODQsNyArNjg0LDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3Vv
dXM6CiAgICAgICAgICAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6CiAgICAgICAgICAgICBj
YXNlIEFycmF5OjpTbG93UHV0QXJyYXlTdG9yYWdlOgotICAgICAgICAgICAgY2FzZSBBcnJheTo6
QXJndW1lbnRzOgogICAgICAgICAgICAgICAgIGZpeEVkZ2U8S25vd25DZWxsVXNlPihjaGlsZDEp
OwogICAgICAgICAgICAgICAgIGZpeEVkZ2U8SW50MzJVc2U+KGNoaWxkMik7CiAgICAgICAgICAg
ICAgICAgaW5zZXJ0U3RvcmVCYXJyaWVyKG1faW5kZXhJbkJsb2NrLCBjaGlsZDEsIGNoaWxkMyk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkocmV2aXNpb24gMTgw
ODc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTc1LDExICs3NSw2IEBAIEdyYXBoOjpHcmFwaChWTSYgdm0sIFBsYW4mIHBsYW4s
IExvbmdMaXYKICAgICAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX211c3RIYW5kbGVWYWx1ZXMu
c2l6ZSgpOyBpLS07KQogICAgICAgICBtX211c3RIYW5kbGVWYWx1ZXNbaV0gPSBmcmVlemVGcmFn
aWxlKHBsYW4ubXVzdEhhbmRsZVZhbHVlc1tpXSk7Ci0gICAgCi0gICAgZm9yICh1bnNpZ25lZCBp
ID0gbV9jb2RlQmxvY2stPm1fbnVtVmFyczsgaS0tOykgewotICAgICAgICBpZiAobV9jb2RlQmxv
Y2stPmlzQ2FwdHVyZWQodmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaSkpKQotICAgICAgICAgICAg
bV9vdXRlcm1vc3RDYXB0dXJlZFZhcnMuc2V0KGkpOwotICAgIH0KIH0KIAogR3JhcGg6On5HcmFw
aCgpCkBAIC03NTUsMTAgKzc1MCw2IEBAIHZvaWQgR3JhcGg6OmludmFsaWRhdGVDRkcoKQogCiB2
b2lkIEdyYXBoOjpzdWJzdGl0dXRlR2V0TG9jYWwoQmFzaWNCbG9jayYgYmxvY2ssIHVuc2lnbmVk
IHN0YXJ0SW5kZXhJbkJsb2NrLCBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0
YSwgTm9kZSogbmV3R2V0TG9jYWwpCiB7Ci0gICAgaWYgKHZhcmlhYmxlQWNjZXNzRGF0YS0+aXND
YXB0dXJlZCgpKSB7Ci0gICAgICAgIC8vIExldCBDU0Ugd29ycnkgYWJvdXQgdGhpcyBvbmUuCi0g
ICAgICAgIHJldHVybjsKLSAgICB9CiAgICAgZm9yICh1bnNpZ25lZCBpbmRleEluQmxvY2sgPSBz
dGFydEluZGV4SW5CbG9jazsgaW5kZXhJbkJsb2NrIDwgYmxvY2suc2l6ZSgpOyArK2luZGV4SW5C
bG9jaykgewogICAgICAgICBOb2RlKiBub2RlID0gYmxvY2tbaW5kZXhJbkJsb2NrXTsKICAgICAg
ICAgYm9vbCBzaG91bGRDb250aW51ZSA9IHRydWU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdHcmFwaC5oCShyZXZpc2lvbiAxODA4NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2NywxMyArMzY3LDYgQEAgcHVibGlj
OgogICAgICAgICByZXR1cm4gYmFzZWxpbmVDb2RlQmxvY2tGb3JPcmlnaW5BbmRCYXNlbGluZUNv
ZGVCbG9jayhjb2RlT3JpZ2luLCBtX3Byb2ZpbGVkQmxvY2spOwogICAgIH0KICAgICAKLSAgICBj
b25zdCBCaXRWZWN0b3ImIGNhcHR1cmVkVmFyc0ZvcihJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNh
bGxGcmFtZSkKLSAgICB7Ci0gICAgICAgIGlmICghaW5saW5lQ2FsbEZyYW1lKQotICAgICAgICAg
ICAgcmV0dXJuIG1fb3V0ZXJtb3N0Q2FwdHVyZWRWYXJzOwotICAgICAgICByZXR1cm4gaW5saW5l
Q2FsbEZyYW1lLT5jYXB0dXJlZFZhcnM7Ci0gICAgfQotICAgIAogICAgIGJvb2wgaXNTdHJpY3RN
b2RlRm9yKENvZGVPcmlnaW4gY29kZU9yaWdpbikKICAgICB7CiAgICAgICAgIGlmICghY29kZU9y
aWdpbi5pbmxpbmVDYWxsRnJhbWUpCkBAIC04MzUsNyArODI4LDYgQEAgcHVibGljOgogICAgIHVu
c2lnbmVkIG1fcGFyYW1ldGVyU2xvdHM7CiAgICAgaW50IG1fbWFjaGluZUNhcHR1cmVTdGFydDsK
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8U2xvd0FyZ3VtZW50W10+IG1fc2xvd0FyZ3VtZW50czsKLSAg
ICBCaXRWZWN0b3IgbV9vdXRlcm1vc3RDYXB0dXJlZFZhcnM7CiAKICNpZiBVU0UoSlNWQUxVRTMy
XzY0KQogICAgIHN0ZDo6dW5vcmRlcmVkX21hcDxpbnQ2NF90LCBkb3VibGUqPiBtX2RvdWJsZUNv
bnN0YW50c01hcDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSGVhcExvY2F0
aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdIZWFwTG9j
YXRpb24uaAkocmV2aXNpb24gMTgwODc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdIZWFwTG9jYXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNTksNyArNTksNyBAQCBlbnVtIExv
Y2F0aW9uS2luZCB7CiAgICAgVHlwZU9mTG9jLAogICAgIFR5cGVkQXJyYXlCeXRlT2Zmc2V0TG9j
LAogICAgIFZhckluamVjdGlvbldhdGNocG9pbnRMb2MsCi0gICAgVmFyaWFibGVMb2MKKyAgICBT
dGFja0xvYwogfTsKIAogY2xhc3MgSGVhcExvY2F0aW9uIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3BwCShyZXZp
c2lvbiAxODA4NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luUGxhY2VBYnN0
cmFjdFN0YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI5LDExICsxMjksNyBAQCB2b2lkIElu
UGxhY2VBYnN0cmFjdFN0YXRlOjppbml0aWFsaXplKCkKICAgICAgICAgfQogICAgIH0KICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IHJvb3QtPnZhbHVlc0F0SGVhZC5udW1iZXJPZkxvY2Fscygp
OyArK2kpIHsKLSAgICAgICAgTm9kZSogbm9kZSA9IHJvb3QtPnZhcmlhYmxlc0F0SGVhZC5sb2Nh
bChpKTsKLSAgICAgICAgaWYgKG5vZGUgJiYgbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPmlz
Q2FwdHVyZWQoKSkKLSAgICAgICAgICAgIHJvb3QtPnZhbHVlc0F0SGVhZC5sb2NhbChpKS5tYWtl
SGVhcFRvcCgpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByb290LT52YWx1ZXNBdEhlYWQu
bG9jYWwoaSkuY2xlYXIoKTsKKyAgICAgICAgcm9vdC0+dmFsdWVzQXRIZWFkLmxvY2FsKGkpLmNs
ZWFyKCk7CiAgICAgICAgIHJvb3QtPnZhbHVlc0F0VGFpbC5sb2NhbChpKS5jbGVhcigpOwogICAg
IH0KICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDEgOyBibG9ja0luZGV4IDwgbV9n
cmFwaC5udW1CbG9ja3MoKTsgKytibG9ja0luZGV4KSB7CkBAIC0yNjMsNDAgKzI1OSwzMSBAQCBi
b29sIEluUGxhY2VBYnN0cmFjdFN0YXRlOjptZXJnZVN0YXRlQXRUCiAgICAgICAgIAogICAgIEFi
c3RyYWN0VmFsdWUgc291cmNlOwogICAgIAotICAgIGlmIChub2RlLT52YXJpYWJsZUFjY2Vzc0Rh
dGEoKS0+aXNDYXB0dXJlZCgpKSB7Ci0gICAgICAgIC8vIElmIGl0J3MgY2FwdHVyZWQgdGhlbiB3
ZSBrbm93IHRoYXQgd2hhdGV2ZXIgdmFsdWUgd2FzIHN0b3JlZCBpbnRvIHRoZSB2YXJpYWJsZSBs
YXN0IGlzIHRoZQotICAgICAgICAvLyBvbmUgd2UgY2FyZSBhYm91dC4gVGhpcyBpcyB0cnVlIGV2
ZW4gaWYgdGhlIHZhcmlhYmxlIGF0IHRhaWwgaXMgZGVhZCwgd2hpY2ggbWlnaHQgaGFwcGVuIGlm
Ci0gICAgICAgIC8vIHRoZSBsYXN0IHRoaW5nIHdlIGRpZCB0byB0aGUgdmFyaWFibGUgd2FzIGEg
R2V0TG9jYWwgYW5kIHRoZW4gZW5kZWQgdXAgbm90IHVzaW5nIHRoZQotICAgICAgICAvLyBHZXRM
b2NhbCdzIHJlc3VsdC4KLSAgICAgICAgCisgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CisgICAg
Y2FzZSBQaGk6CisgICAgY2FzZSBTZXRBcmd1bWVudDoKKyAgICBjYXNlIFBoYW50b21Mb2NhbDoK
KyAgICBjYXNlIEZsdXNoOgorICAgICAgICAvLyBUaGUgYmxvY2sgdHJhbnNmZXJzIHRoZSB2YWx1
ZSBmcm9tIGhlYWQgdG8gdGFpbC4KICAgICAgICAgc291cmNlID0gaW5WYXJpYWJsZTsKLSAgICB9
IGVsc2UgewotICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKLSAgICAgICAgY2FzZSBQaGk6
Ci0gICAgICAgIGNhc2UgU2V0QXJndW1lbnQ6Ci0gICAgICAgIGNhc2UgUGhhbnRvbUxvY2FsOgot
ICAgICAgICBjYXNlIEZsdXNoOgotICAgICAgICAgICAgLy8gVGhlIGJsb2NrIHRyYW5zZmVycyB0
aGUgdmFsdWUgZnJvbSBoZWFkIHRvIHRhaWwuCi0gICAgICAgICAgICBzb3VyY2UgPSBpblZhcmlh
YmxlOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCi0g
ICAgICAgIGNhc2UgR2V0TG9jYWw6Ci0gICAgICAgICAgICAvLyBUaGUgYmxvY2sgcmVmaW5lcyB0
aGUgdmFsdWUgd2l0aCBhZGRpdGlvbmFsIHNwZWN1bGF0aW9ucy4KLSAgICAgICAgICAgIHNvdXJj
ZSA9IGZvck5vZGUobm9kZSk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICBjYXNlIEdldExvY2Fs
OgorICAgICAgICAvLyBUaGUgYmxvY2sgcmVmaW5lcyB0aGUgdmFsdWUgd2l0aCBhZGRpdGlvbmFs
IHNwZWN1bGF0aW9ucy4KKyAgICAgICAgc291cmNlID0gZm9yTm9kZShub2RlKTsKKyAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAKLSAgICAgICAgY2FzZSBTZXRMb2NhbDoKLSAgICAgICAgICAg
IC8vIFRoZSBibG9jayBzZXRzIHRoZSB2YXJpYWJsZSwgYW5kIHBvdGVudGlhbGx5IHJlZmluZXMg
aXQsIGJvdGgKLSAgICAgICAgICAgIC8vIGJlZm9yZSBhbmQgYWZ0ZXIgc2V0dGluZyBpdC4KLSAg
ICAgICAgICAgIHNvdXJjZSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICAgICAg
aWYgKG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5mbHVzaEZvcm1hdCgpID09IEZsdXNoZWRE
b3VibGUpCi0gICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIShzb3VyY2UubV90eXBlICYg
flNwZWNGdWxsRG91YmxlKSk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICBjYXNlIFNldExvY2Fs
OgorICAgICAgICAvLyBUaGUgYmxvY2sgc2V0cyB0aGUgdmFyaWFibGUsIGFuZCBwb3RlbnRpYWxs
eSByZWZpbmVzIGl0LCBib3RoCisgICAgICAgIC8vIGJlZm9yZSBhbmQgYWZ0ZXIgc2V0dGluZyBp
dC4KKyAgICAgICAgc291cmNlID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIGlm
IChub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+Zmx1c2hGb3JtYXQoKSA9PSBGbHVzaGVkRG91
YmxlKQorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIShzb3VyY2UubV90eXBlICYgflNwZWNG
dWxsRG91YmxlKSk7CisgICAgICAgIGJyZWFrOwogICAgICAgICAKLSAgICAgICAgZGVmYXVsdDoK
LSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQorICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAKICAgICBpZiAoZGVzdGlu
YXRpb24gPT0gc291cmNlKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05v
ZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAko
cmV2aXNpb24gMTgwODc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTk0MSwxNSArOTQxLDE1IEBAIHN0cnVjdCBOb2RlIHsKICAgICAg
ICAgcmV0dXJuIG1fb3BJbmZvOwogICAgIH0KICAgICAKLSAgICBib29sIGhhc1Zhck51bWJlcigp
CisgICAgYm9vbCBoYXNTY29wZU9mZnNldCgpCiAgICAgewogICAgICAgICByZXR1cm4gb3AoKSA9
PSBHZXRDbG9zdXJlVmFyIHx8IG9wKCkgPT0gUHV0Q2xvc3VyZVZhcjsKICAgICB9CiAKLSAgICBp
bnQgdmFyTnVtYmVyKCkKKyAgICBTY29wZU9mZnNldCBzY29wZU9mZnNldCgpCiAgICAgewotICAg
ICAgICBBU1NFUlQoaGFzVmFyTnVtYmVyKCkpOwotICAgICAgICByZXR1cm4gbV9vcEluZm87Cisg
ICAgICAgIEFTU0VSVChoYXNTY29wZU9mZnNldCgpKTsKKyAgICAgICAgcmV0dXJuIFNjb3BlT2Zm
c2V0KG1fb3BJbmZvKTsKICAgICB9CiAgICAgCiAgICAgYm9vbCBoYXNSZWdpc3RlclBvaW50ZXIo
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkocmV2aXNpb24g
MTgwODc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNjUsMjQgKzI2NSwxNiBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IERGRyB7CiAgICAgbWFjcm8oUHJvZmlsZVR5cGUsIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBt
YWNybyhQcm9maWxlQ29udHJvbEZsb3csIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBcCi0gICAg
LyogTm9kZXMgdXNlZCBmb3IgYWN0aXZhdGlvbnMuIEFjdGl2YXRpb24gc3VwcG9ydCB3b3JrcyBi
eSBoYXZpbmcgaXQgYW5jaG9yZWQgYXQgKi9cCi0gICAgLyogZXBpbGdvdWVzIHZpYSBUZWFyT2Zm
QWN0aXZhdGlvbiwgYW5kIGFsbCBDcmVhdGVBY3RpdmF0aW9uIG5vZGVzIGtlcHQgYWxpdmUgYnkg
Ki9cCi0gICAgLyogYmVpbmcgdGhyZWFkZWQgd2l0aCBlYWNoIG90aGVyLiAqL1wKICAgICBtYWNy
byhDcmVhdGVBY3RpdmF0aW9uLCBOb2RlUmVzdWx0SlMpIFwKICAgICBcCi0gICAgLyogTm9kZXMg
dXNlZCBmb3IgYXJndW1lbnRzLiBTaW1pbGFyIHRvIGxleGljYWwgZW52aXJvbm1lbnQgc3VwcG9y
dCwgb25seSBpdCBtYWtlcyBldmVuIGxlc3MgKi9cCi0gICAgLyogc2Vuc2UuICovXAotICAgIG1h
Y3JvKENyZWF0ZUFyZ3VtZW50cywgTm9kZVJlc3VsdEpTKSBcCi0gICAgbWFjcm8oUGhhbnRvbUFy
Z3VtZW50cywgTm9kZVJlc3VsdEpTKSBcCi0gICAgbWFjcm8oVGVhck9mZkFyZ3VtZW50cywgTm9k
ZU11c3RHZW5lcmF0ZSkgXAotICAgIG1hY3JvKEdldE15QXJndW1lbnRzTGVuZ3RoLCBOb2RlUmVz
dWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCi0gICAgbWFjcm8oR2V0TXlBcmd1bWVudEJ5VmFs
LCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCi0gICAgbWFjcm8oR2V0TXlBcmd1
bWVudHNMZW5ndGhTYWZlLCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCi0gICAg
bWFjcm8oR2V0TXlBcmd1bWVudEJ5VmFsU2FmZSwgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5l
cmF0ZSkgXAotICAgIG1hY3JvKENoZWNrQXJndW1lbnRzTm90Q3JlYXRlZCwgTm9kZU11c3RHZW5l
cmF0ZSkgXAorICAgIG1hY3JvKENyZWF0ZURpcmVjdEFyZ3VtZW50cywgTm9kZVJlc3VsdEpTKSBc
CisgICAgbWFjcm8oUGhhbnRvbURpcmVjdEFyZ3VtZW50cywgTm9kZVJlc3VsdEpTKSBcCisgICAg
bWFjcm8oQ3JlYXRlU2NvcGVkQXJndW1lbnRzLCBOb2RlUmVzdWx0SlMpIFwKKyAgICBtYWNybyhD
cmVhdGVPdXRPZkJhbmRBcmd1bWVudHMsIE5vZGVSZXN1bHRKUykgXAorICAgIG1hY3JvKEdldEZy
b21Bcmd1bWVudHMsIE5vZGVSZXN1bHRKUykgXAorICAgIG1hY3JvKFB1dFRvQXJndW1lbnRzLCBO
b2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgXAogICAgIC8qIE5vZGVzIGZvciBjcmVhdGluZyBmdW5j
dGlvbnMuICovXAotICAgIG1hY3JvKE5ld0Z1bmN0aW9uTm9DaGVjaywgTm9kZVJlc3VsdEpTKSBc
CiAgICAgbWFjcm8oTmV3RnVuY3Rpb24sIE5vZGVSZXN1bHRKUykgXAogICAgIG1hY3JvKE5ld0Z1
bmN0aW9uRXhwcmVzc2lvbiwgTm9kZVJlc3VsdEpTKSBcCiAgICAgXApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNw
cAkocmV2aXNpb24gMTgwODc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JF
eGl0Q29tcGlsZXJDb21tb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDYsMTAgKzIwNiw2IEBA
IHZvaWQgcmVpZnlJbmxpbmVkQ2FsbEZyYW1lcyhDQ2FsbEhlbHBlcnMKICAgICAgICAgaml0LnN0
b3JlMzIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIobG9jYXRpb25CaXRzKSwgQXNzZW1i
bHlIZWxwZXJzOjp0YWdGb3IoKFZpcnR1YWxSZWdpc3RlcikoaW5saW5lQ2FsbEZyYW1lLT5zdGFj
a09mZnNldCArIEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpKSk7CiAgICAgICAgIGlmICghaW5saW5l
Q2FsbEZyYW1lLT5pc0Nsb3N1cmVDYWxsKQogICAgICAgICAgICAgaml0LnN0b3JlNjQoQXNzZW1i
bHlIZWxwZXJzOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoaW5saW5lQ2Fs
bEZyYW1lLT5jYWxsZWVDb25zdGFudCgpKSkpLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3Io
KFZpcnR1YWxSZWdpc3RlcikoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIEpTU3RhY2s6
OkNhbGxlZSkpKTsKLSAgICAgICAgCi0gICAgICAgIC8vIExlYXZlIHRoZSBjYXB0dXJlZCBhcmd1
bWVudHMgaW4gcmVnVDMuCi0gICAgICAgIGlmIChiYXNlbGluZUNvZGVCbG9jay0+dXNlc0FyZ3Vt
ZW50cygpKQotICAgICAgICAgICAgaml0LmxvYWRQdHIoQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNz
Rm9yKFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgdW5tb2Rp
ZmllZEFyZ3VtZW50c1JlZ2lzdGVyKGJhc2VsaW5lQ29kZUJsb2NrLT5hcmd1bWVudHNSZWdpc3Rl
cigpKS5vZmZzZXQoKSkpLCBHUFJJbmZvOjpyZWdUMyk7CiAjZWxzZSAvLyBVU0UoSlNWQUxVRTY0
KSAvLyBzbyB0aGlzIGlzIHRoZSAzMi1iaXQgcGFydAogICAgICAgICBqaXQuc3RvcmVQdHIoY2Fs
bGVyRnJhbWVHUFIsIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvckJ5dGVPZmZzZXQoaW5saW5l
Q2FsbEZyYW1lLT5jYWxsZXJGcmFtZU9mZnNldCgpKSk7CiAgICAgICAgIEluc3RydWN0aW9uKiBp
bnN0cnVjdGlvbiA9IGJhc2VsaW5lQ29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5iZWdpbigpICsg
Y29kZU9yaWdpbi5ieXRlY29kZUluZGV4OwpAQCAtMjE4LDE4ICsyMTQsNyBAQCB2b2lkIHJlaWZ5
SW5saW5lZENhbGxGcmFtZXMoQ0NhbGxIZWxwZXJzCiAgICAgICAgIGppdC5zdG9yZTMyKEFzc2Vt
Ymx5SGVscGVyczo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCBBc3NlbWJseUhlbHBl
cnM6OnRhZ0ZvcigoVmlydHVhbFJlZ2lzdGVyKShpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0
ICsgSlNTdGFjazo6Q2FsbGVlKSkpOwogICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZS0+aXND
bG9zdXJlQ2FsbCkKICAgICAgICAgICAgIGppdC5zdG9yZVB0cihBc3NlbWJseUhlbHBlcnM6OlRy
dXN0ZWRJbW1QdHIoaW5saW5lQ2FsbEZyYW1lLT5jYWxsZWVDb25zdGFudCgpKSwgQXNzZW1ibHlI
ZWxwZXJzOjpwYXlsb2FkRm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxGcmFtZS0+c3Rh
Y2tPZmZzZXQgKyBKU1N0YWNrOjpDYWxsZWUpKSk7Ci0KLSAgICAgICAgLy8gTGVhdmUgdGhlIGNh
cHR1cmVkIGFyZ3VtZW50cyBpbiByZWdUMy4KLSAgICAgICAgaWYgKGJhc2VsaW5lQ29kZUJsb2Nr
LT51c2VzQXJndW1lbnRzKCkpCi0gICAgICAgICAgICBqaXQubG9hZFB0cihBc3NlbWJseUhlbHBl
cnM6OnBheWxvYWRGb3IoVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZz
ZXQgKyB1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIoYmFzZWxpbmVDb2RlQmxvY2stPmFyZ3Vt
ZW50c1JlZ2lzdGVyKCkpLm9mZnNldCgpKSksIEdQUkluZm86OnJlZ1QzKTsKICNlbmRpZiAvLyBV
U0UoSlNWQUxVRTY0KSAvLyBlbmRpbmcgdGhlICNlbHNlIHBhcnQsIHNvIGRpcmVjdGx5IGFib3Zl
IGlzIHRoZSAzMi1iaXQgcGFydAotICAgICAgICAKLSAgICAgICAgaWYgKGJhc2VsaW5lQ29kZUJs
b2NrLT51c2VzQXJndW1lbnRzKCkpIHsKLSAgICAgICAgICAgIEFzc2VtYmx5SGVscGVyczo6SnVt
cCBub0FyZ3VtZW50cyA9IGppdC5icmFuY2hUZXN0UHRyKEFzc2VtYmx5SGVscGVyczo6WmVybywg
R1BSSW5mbzo6cmVnVDMpOwotICAgICAgICAgICAgaml0LmFkZFB0cihBc3NlbWJseUhlbHBlcnM6
OlRydXN0ZWRJbW0zMihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICogc2l6ZW9mKEVuY29k
ZWRKU1ZhbHVlKSksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjpyZWdUMCk7
Ci0gICAgICAgICAgICBqaXQuc3RvcmVQdHIoR1BSSW5mbzo6cmVnVDAsIEFzc2VtYmx5SGVscGVy
czo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMywgQXJndW1lbnRzOjpvZmZzZXRPZlJlZ2lzdGVycygp
KSk7Ci0gICAgICAgICAgICBub0FyZ3VtZW50cy5saW5rKCZqaXQpOwotICAgICAgICB9CiAgICAg
fQogCiAjaWYgVVNFKEpTVkFMVUU2NCkKQEAgLTMwMCw3NSArMjg1LDYgQEAgdm9pZCBhZGp1c3RB
bmRKdW1wVG9UYXJnZXQoQ0NhbGxIZWxwZXJzJgogICAgIGppdC5qdW1wKEdQUkluZm86OnJlZ1Qy
KTsKIH0KIAotQXJndW1lbnRzUmVjb3ZlcnlHZW5lcmF0b3I6OkFyZ3VtZW50c1JlY292ZXJ5R2Vu
ZXJhdG9yKCkgeyB9Ci1Bcmd1bWVudHNSZWNvdmVyeUdlbmVyYXRvcjo6fkFyZ3VtZW50c1JlY292
ZXJ5R2VuZXJhdG9yKCkgeyB9Ci0KLXZvaWQgQXJndW1lbnRzUmVjb3ZlcnlHZW5lcmF0b3I6Omdl
bmVyYXRlRm9yKAotICAgIGludCBvcGVyYW5kLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIENDYWxs
SGVscGVycyYgaml0KQotewotICAgIC8vIEZpbmQgdGhlIHJpZ2h0IGlubGluZSBjYWxsIGZyYW1l
LgotICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0gMDsKLSAgICBmb3IgKElu
bGluZUNhbGxGcmFtZSogY3VycmVudCA9IGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lOwotICAg
ICAgICAgY3VycmVudDsKLSAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LT5jYWxsZXIuaW5saW5l
Q2FsbEZyYW1lKSB7Ci0gICAgICAgIGlmIChjdXJyZW50LT5zdGFja09mZnNldCA+PSBvcGVyYW5k
KSB7Ci0gICAgICAgICAgICBpbmxpbmVDYWxsRnJhbWUgPSBjdXJyZW50OwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoIWppdC5iYXNlbGluZUNvZGVCbG9j
a0ZvcihpbmxpbmVDYWxsRnJhbWUpLT51c2VzQXJndW1lbnRzKCkpCi0gICAgICAgIHJldHVybjsK
LSAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRzUmVnaXN0ZXIgPSBqaXQuYmFzZWxpbmVBcmd1
bWVudHNSZWdpc3RlckZvcihpbmxpbmVDYWxsRnJhbWUpOwotICAgIGlmIChtX2RpZENyZWF0ZUFy
Z3VtZW50c09iamVjdC5hZGQoaW5saW5lQ2FsbEZyYW1lKS5pc05ld0VudHJ5KSB7Ci0gICAgICAg
IC8vIFdlIGtub3cgdGhpcyBjYWxsIGZyYW1lIG9wdGltaXplZCBvdXQgYW4gYXJndW1lbnRzIG9i
amVjdCB0aGF0Ci0gICAgICAgIC8vIHRoZSBiYXNlbGluZSBKSVQgd291bGQgaGF2ZSBjcmVhdGVk
LiBEbyB0aGF0IGNyZWF0aW9uIG5vdy4KLSAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZSkgewot
ICAgICAgICAgICAgaml0LmFkZFB0cihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihpbmxp
bmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSksIEdQUklu
Zm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgICAgICBqaXQu
c2V0dXBBcmd1bWVudHMoR1BSSW5mbzo6cmVnVDApOwotICAgICAgICB9IGVsc2UKLSAgICAgICAg
ICAgIGppdC5zZXR1cEFyZ3VtZW50c0V4ZWNTdGF0ZSgpOwotICAgICAgICBqaXQubW92ZSgKLSAg
ICAgICAgICAgIEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbVB0cigKLSAgICAgICAgICAgICAg
ICBiaXR3aXNlX2Nhc3Q8dm9pZCo+KG9wZXJhdGlvbkNyZWF0ZUFyZ3VtZW50c0R1cmluZ09TUkV4
aXQpKSwKLSAgICAgICAgICAgIEdQUkluZm86Om5vbkFyZ0dQUjApOwotI2lmIFVTRShKU1ZBTFVF
NjQpCi0gICAgICAgIGppdC5jYWxsKEdQUkluZm86Om5vbkFyZ0dQUjApOwotICAgICAgICBqaXQu
c3RvcmU2NChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNz
Rm9yKGFyZ3VtZW50c1JlZ2lzdGVyKSk7Ci0gICAgICAgIGppdC5zdG9yZTY0KAotICAgICAgICAg
ICAgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsCi0gICAgICAgICAgICBBc3NlbWJseUhlbHBlcnM6
OmFkZHJlc3NGb3IodW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVyKGFyZ3VtZW50c1JlZ2lzdGVy
KSkpOwotICAgICAgICBqaXQubW92ZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgR1BSSW5mbzo6
cmVnVDApOyAvLyBuby1vcCBtb3ZlIG9uIGFsbW9zdCBhbGwgcGxhdGZvcm1zLgotI2Vsc2UgLy8g
VVNFKEpTVkFMVUU2NCkgLT4gc28gdGhlIDMyXzY0IHBhcnQKLSAgICAgICAgaml0LmNhbGwoR1BS
SW5mbzo6bm9uQXJnR1BSMCk7Ci0gICAgICAgIGppdC5zdG9yZTMyKAotICAgICAgICAgICAgQXNz
ZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksCi0gICAgICAgICAg
ICBBc3NlbWJseUhlbHBlcnM6OnRhZ0Zvcihhcmd1bWVudHNSZWdpc3RlcikpOwotICAgICAgICBq
aXQuc3RvcmUzMigKLSAgICAgICAgICAgIEdQUkluZm86OnJldHVyblZhbHVlR1BSLAotICAgICAg
ICAgICAgQXNzZW1ibHlIZWxwZXJzOjpwYXlsb2FkRm9yKGFyZ3VtZW50c1JlZ2lzdGVyKSk7Ci0g
ICAgICAgIGppdC5zdG9yZTMyKAotICAgICAgICAgICAgQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksCi0gICAgICAgICAgICBBc3NlbWJseUhlbHBlcnM6OnRh
Z0Zvcih1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIoYXJndW1lbnRzUmVnaXN0ZXIpKSk7Ci0g
ICAgICAgIGppdC5zdG9yZTMyKAotICAgICAgICAgICAgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIs
Ci0gICAgICAgICAgICBBc3NlbWJseUhlbHBlcnM6OnBheWxvYWRGb3IodW5tb2RpZmllZEFyZ3Vt
ZW50c1JlZ2lzdGVyKGFyZ3VtZW50c1JlZ2lzdGVyKSkpOwotICAgICAgICBqaXQubW92ZShHUFJJ
bmZvOjpyZXR1cm5WYWx1ZUdQUiwgR1BSSW5mbzo6cmVnVDApOyAvLyBuby1vcCBtb3ZlIG9uIGFs
bW9zdCBhbGwgcGxhdGZvcm1zLgotI2VuZGlmIC8vIFVTRShKU1ZBTFVFNjQpCi0gICAgfQotCi0j
aWYgVVNFKEpTVkFMVUU2NCkKLSAgICBqaXQubG9hZDY0KEFzc2VtYmx5SGVscGVyczo6YWRkcmVz
c0Zvcihhcmd1bWVudHNSZWdpc3RlciksIEdQUkluZm86OnJlZ1QwKTsKLSAgICBqaXQuc3RvcmU2
NChHUFJJbmZvOjpyZWdUMCwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKG9wZXJhbmQpKTsK
LSNlbHNlIC8vIFVTRShKU1ZBTFVFNjQpIC0+IHNvIHRoZSAzMl82NCBwYXJ0Ci0gICAgaml0Lmxv
YWQzMihBc3NlbWJseUhlbHBlcnM6OnBheWxvYWRGb3IoYXJndW1lbnRzUmVnaXN0ZXIpLCBHUFJJ
bmZvOjpyZWdUMCk7Ci0gICAgaml0LnN0b3JlMzIoCi0gICAgICAgIEFzc2VtYmx5SGVscGVyczo6
VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLAotICAgICAgICBBc3NlbWJseUhlbHBlcnM6
OnRhZ0ZvcihvcGVyYW5kKSk7Ci0gICAgaml0LnN0b3JlMzIoR1BSSW5mbzo6cmVnVDAsIEFzc2Vt
Ymx5SGVscGVyczo6cGF5bG9hZEZvcihvcGVyYW5kKSk7Ci0jZW5kaWYgLy8gVVNFKEpTVkFMVUU2
NCkKLX0KLSAgICAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAogI2VuZGlmIC8vIEVOQUJM
RShERkdfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29t
cGlsZXJDb21tb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09TUkV4aXRDb21waWxlckNvbW1vbi5oCShyZXZpc2lvbiAxODA4NzUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zNywxOCArMzcsNiBAQCB2b2lkIGhhbmRsZUV4aXRDb3VudHMoQ0NhbGxIZWxwZXJzJiwg
Y29uCiB2b2lkIHJlaWZ5SW5saW5lZENhbGxGcmFtZXMoQ0NhbGxIZWxwZXJzJiwgY29uc3QgT1NS
RXhpdEJhc2UmKTsKIHZvaWQgYWRqdXN0QW5kSnVtcFRvVGFyZ2V0KENDYWxsSGVscGVycyYsIGNv
bnN0IE9TUkV4aXRCYXNlJik7CiAKLWNsYXNzIEFyZ3VtZW50c1JlY292ZXJ5R2VuZXJhdG9yIHsK
LXB1YmxpYzoKLSAgICBBcmd1bWVudHNSZWNvdmVyeUdlbmVyYXRvcigpOwotICAgIH5Bcmd1bWVu
dHNSZWNvdmVyeUdlbmVyYXRvcigpOwotICAgIAotICAgIHZvaWQgZ2VuZXJhdGVGb3IoaW50IG9w
ZXJhbmQsIENvZGVPcmlnaW4sIENDYWxsSGVscGVycyYpOwotICAgIAotcHJpdmF0ZToKLSAgICBI
YXNoU2V0PElubGluZUNhbGxGcmFtZSosIERlZmF1bHRIYXNoPElubGluZUNhbGxGcmFtZSo+OjpI
YXNoLAotICAgICAgICBOdWxsYWJsZUhhc2hUcmFpdHM8SW5saW5lQ2FsbEZyYW1lKj4+IG1fZGlk
Q3JlYXRlQXJndW1lbnRzT2JqZWN0OwotfTsKLQogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwog
CiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1ByZWNpc2VMb2NhbENsb2JiZXJpemUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1ByZWNpc2VMb2NhbENsb2JiZXJpemUuaAkocmV2aXNpb24gMTgw
ODc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVjaXNlTG9jYWxDbG9iYmVy
aXplLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyMSwxMiArMTIxLDYgQEAgcHJpdmF0ZToKICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEpTU3RhY2s6OlRoaXNBcmd1bWVudDsgKytpKQog
ICAgICAgICAgICAgbV9yZWFkKFZpcnR1YWxSZWdpc3RlcihpKSk7CiAgICAgICAgIAotICAgICAg
ICAvLyBSZWFkIGFsbCBvZiB0aGUgY2FwdHVyZWQgdmFyaWFibGVzLgotICAgICAgICBjb25zdCBC
aXRWZWN0b3ImIGNhcHR1cmVkVmFycyA9Ci0gICAgICAgICAgICBtX2dyYXBoLmNhcHR1cmVkVmFy
c0ZvcihtX25vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUpOwotICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgOiBjYXB0dXJlZFZhcnMuc2V0Qml0cygpKQotICAgICAgICAgICAgbV9y
ZWFkKHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGkpKTsKLSAgICAgICAgCiAgICAgICAgIC8vIFJl
YWQgYWxsIG9mIHRoZSBpbmxpbmUgYXJndW1lbnRzIGFuZCBjYWxsIGZyYW1lIGhlYWRlcnMgdGhh
dCB3ZSBkaWRuJ3QgYWxyZWFkeSBjYXB0dXJlLgogICAgICAgICBmb3IgKElubGluZUNhbGxGcmFt
ZSogaW5saW5lQ2FsbEZyYW1lID0gbV9ub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZy
YW1lOyBpbmxpbmVDYWxsRnJhbWU7IGlubGluZUNhbGxGcmFtZSA9IGlubGluZUNhbGxGcmFtZS0+
Y2FsbGVyLmlubGluZUNhbGxGcmFtZSkgewogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
aW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpOyBpLS0gPiAxOykKQEAgLTEzNiw2ICsx
MzAsOSBAQCBwcml2YXRlOgogICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+aXNWYXJh
cmdzKCkpCiAgICAgICAgICAgICAgICAgbV9yZWFkKFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxs
RnJhbWUtPnN0YWNrT2Zmc2V0ICsgSlNTdGFjazo6QXJndW1lbnRDb3VudCkpOwogICAgICAgICB9
CisKKyAgICAgICAgLy8gTm90ZSB0aGF0IHdlIGRvbid0IG5lZWQgdG8gZG8gYW55dGhpbmcgc3Bl
Y2lhbCBmb3IgQ2FsbEZvcndhcmRWYXJhcmdzLCBzaW5jZSBpdCByZWFkcworICAgICAgICAvLyBv
dXIgYXJndW1lbnRzIHRoZSBzYW1lIHdheSB0aGF0IGFueSBlZmZlY3RmdWwgdGhpbmcgbWlnaHQu
CiAgICAgfQogICAgIAogICAgIHZvaWQgd3JpdGVUb3AoKQpAQCAtMTQ4LDE5ICsxNDUsNiBAQCBw
cml2YXRlOgogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZGF0YS0+bGltaXQ7IGktLTsp
CiAgICAgICAgICAgICAgICAgbV93cml0ZShWaXJ0dWFsUmVnaXN0ZXIoZGF0YS0+c3RhcnQub2Zm
c2V0KCkgKyBpKSk7CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vIE5vdGUgdGhhdCB3
ZSBkb24ndCBuZWVkIHRvIGRvIGFueXRoaW5nIHNwZWNpYWwgZm9yIENhbGxGb3J3YXJkVmFyYXJn
cywgc2luY2UgaXQgcmVhZHMKLSAgICAgICAgLy8gb3VyIGFyZ3VtZW50cyB0aGUgc2FtZSB3YXkg
dGhhdCBhbnkgZWZmZWN0ZnVsIHRoaW5nIG1pZ2h0LgotICAgICAgICAKLSAgICAgICAgaWYgKG1f
Z3JhcGgubV9jb2RlQmxvY2stPnVzZXNBcmd1bWVudHMoKSkgewotICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gbV9ncmFwaC5tX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpOyBpLS0gPiAx
OykKLSAgICAgICAgICAgICAgICBtX3dyaXRlKHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGkp
KTsKLSAgICAgICAgfQotCi0gICAgICAgIGNvbnN0IEJpdFZlY3RvciYgY2FwdHVyZWRWYXJzID0K
LSAgICAgICAgICAgIG1fZ3JhcGguY2FwdHVyZWRWYXJzRm9yKG1fbm9kZS0+b3JpZ2luLnNlbWFu
dGljLmlubGluZUNhbGxGcmFtZSk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA6IGNhcHR1cmVk
VmFycy5zZXRCaXRzKCkpCi0gICAgICAgICAgICBtX3dyaXRlKHZpcnR1YWxSZWdpc3RlckZvckxv
Y2FsKGkpKTsKICAgICB9CiAgICAgCiAgICAgR3JhcGgmIG1fZ3JhcGg7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdh
dGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTgwODc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTU3LDYgKzU3LDggQEAgcHVibGljOgogICAgICAgICBBU1NFUlQobV9ncmFwaC5tX2Zvcm0gPT0g
VGhyZWFkZWRDUFMpOwogICAgICAgICBBU1NFUlQobV9ncmFwaC5tX3VuaWZpY2F0aW9uU3RhdGUg
PT0gR2xvYmFsbHlVbmlmaWVkKTsKIAorICAgICAgICBwcm9wYWdhdGVUaHJvdWdoQXJndW1lbnRQ
b3NpdGlvbnMoKTsKKwogICAgICAgICBtX3Bhc3MgPSBQcmltYXJ5UGFzczsKICAgICAgICAgcHJv
cGFnYXRlVG9GaXhwb2ludCgpOwogICAgICAgICAKQEAgLTg1MSw4ICs4NTMsNyBAQCBwcml2YXRl
OgogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgbV9jaGFuZ2VkIHw9IHZh
cmlhYmxlQWNjZXNzRGF0YS0+dGFsbHlWb3Rlc0ZvclNob3VsZFVzZURvdWJsZUZvcm1hdCgpOwog
ICAgICAgICB9Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2dyYXBoLm1fYXJn
dW1lbnRQb3NpdGlvbnMuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICBtX2NoYW5nZWQgfD0gbV9n
cmFwaC5tX2FyZ3VtZW50UG9zaXRpb25zW2ldLm1lcmdlQXJndW1lbnRQcmVkaWN0aW9uQXdhcmVu
ZXNzKCk7CisgICAgICAgIHByb3BhZ2F0ZVRocm91Z2hBcmd1bWVudFBvc2l0aW9ucygpOwogICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9ncmFwaC5tX3ZhcmlhYmxlQWNjZXNzRGF0
YS5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJs
ZUFjY2Vzc0RhdGEgPSAmbV9ncmFwaC5tX3ZhcmlhYmxlQWNjZXNzRGF0YVtpXTsKICAgICAgICAg
ICAgIGlmICghdmFyaWFibGVBY2Nlc3NEYXRhLT5pc1Jvb3QoKSkKQEAgLTg2MSw2ICs4NjIsMTIg
QEAgcHJpdmF0ZToKICAgICAgICAgfQogICAgIH0KICAgICAKKyAgICB2b2lkIHByb3BhZ2F0ZVRo
cm91Z2hBcmd1bWVudFBvc2l0aW9ucygpCisgICAgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbV9ncmFwaC5tX2FyZ3VtZW50UG9zaXRpb25zLnNpemUoKTsgKytpKQorICAgICAg
ICAgICAgbV9jaGFuZ2VkIHw9IG1fZ3JhcGgubV9hcmd1bWVudFBvc2l0aW9uc1tpXS5tZXJnZUFy
Z3VtZW50UHJlZGljdGlvbkF3YXJlbmVzcygpOworICAgIH0KKyAgICAKICAgICBOb2RlKiBtX2N1
cnJlbnROb2RlOwogICAgIGJvb2wgbV9jaGFuZ2VkOwogICAgIFByZWRpY3Rpb25QYXNzIG1fcGFz
czsgLy8gV2UgdXNlIGRpZmZlcmVudCBsb2dpYyBmb3IgY29uc2lkZXJpbmcgcHJlZGljdGlvbnMg
ZGVwZW5kaW5nIG9uIGhvdyBmYXIgYWxvbmcgd2UgYXJlIGluIHByb3BhZ2F0aW9uLgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ29udmVyc2lvblBoYXNl
LmNwcAkocmV2aXNpb24gMTgwODc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
U0FDb252ZXJzaW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Myw3ICs2Myw3IEBAIHB1
YmxpYzoKIAogICAgICAgICAvLyBDcmVhdGUgYSBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSBmb3Ig
ZXZlcnkgcm9vdCBWYXJpYWJsZUFjY2Vzc0RhdGEuCiAgICAgICAgIGZvciAoVmFyaWFibGVBY2Nl
c3NEYXRhJiB2YXJpYWJsZSA6IG1fZ3JhcGgubV92YXJpYWJsZUFjY2Vzc0RhdGEpIHsKLSAgICAg
ICAgICAgIGlmICghdmFyaWFibGUuaXNSb290KCkgfHwgdmFyaWFibGUuaXNDYXB0dXJlZCgpKQor
ICAgICAgICAgICAgaWYgKCF2YXJpYWJsZS5pc1Jvb3QoKSkKICAgICAgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUq
IHNzYVZhcmlhYmxlID0gbV9jYWxjdWxhdG9yLm5ld1ZhcmlhYmxlKCk7CkBAIC04Nyw4ICs4Nyw2
IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAg
ICAgCiAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUt
PnZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZS0+aXND
YXB0dXJlZCgpKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgICAgICBOb2RlKiBjaGlsZE5vZGU7CiAgICAgICAgICAgICAgICAgaWYg
KG5vZGUtPm9wKCkgPT0gU2V0TG9jYWwpCkBAIC0xOTAsMTAgKzE4OCw4IEBAIHB1YmxpYzoKICAg
ICAgICAgLy8KICAgICAgICAgLy8gICAtIE1vdkhpbnQgaGFzIEtpbGxMb2NhbCBwcmVwZW5kZWQg
dG8gaXQuCiAgICAgICAgIC8vCi0gICAgICAgIC8vICAgLSBHZXRMb2NhbCBvdmVyIGNhcHR1cmVk
IHZhcmlhYmxlcyBsb3NlIHRoZWlyIHBoaXMgYW5kIGJlY29tZSBHZXRTdGFjay4KLSAgICAgICAg
Ly8KLSAgICAgICAgLy8gICAtIEdldExvY2FsIG92ZXIgdW5jYXB0dXJlZCB2YXJpYWJsZXMgZGll
IGFuZCBnZXQgcmVwbGFjZWQgd2l0aCByZWZlcmVuY2VzIHRvIHRoZSBub2RlCi0gICAgICAgIC8v
ICAgICBzcGVjaWZpZWQgYnkgdmFsdWVGb3JPcGVyYW5kLgorICAgICAgICAvLyAgIC0gR2V0TG9j
YWwgZGllIGFuZCBnZXQgcmVwbGFjZWQgd2l0aCByZWZlcmVuY2VzIHRvIHRoZSBub2RlIHNwZWNp
ZmllZCBieQorICAgICAgICAvLyAgICAgdmFsdWVGb3JPcGVyYW5kLgogICAgICAgICAvLwogICAg
ICAgICAvLyAgIC0gU2V0TG9jYWwgdHVybnMgaW50byBQdXRTdGFjayBpZiBpdCdzIGZsdXNoZWQs
IG9yIHR1cm5zIGludG8gYSBDaGVjayBvdGhlcndpc2UuCiAgICAgICAgIC8vCkBAIC0yMTgsOCAr
MjE0LDYgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEq
IHZhcmlhYmxlID0gbm9kZUF0SGVhZC0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7Ci0gICAgICAgICAg
ICAgICAgICAgIGlmICh2YXJpYWJsZS0+aXNDYXB0dXJlZCgpKQotICAgICAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAg
ICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIkNvbnNpZGVy
aW5nIGxpdmUgdmFyaWFibGUgIiwgVmFyaWFibGVBY2Nlc3NEYXRhRHVtcChtX2dyYXBoLCB2YXJp
YWJsZSksICIgYXQgaGVhZCBvZiBibG9jayAiLCAqYmxvY2ssICJcbiIpOwpAQCAtMjgzLDE4ICsy
NzcsMTYgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGNhc2UgU2V0TG9jYWw6IHsKICAgICAg
ICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlh
YmxlQWNjZXNzRGF0YSgpOwogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKHZhcmlhYmxlLT5pc0NhcHR1cmVkKCkgfHwgISEobm9kZS0+ZmxhZ3MoKSAmIE5vZGVJ
c0ZsdXNoZWQpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghIShub2RlLT5mbGFncygpICYg
Tm9kZUlzRmx1c2hlZCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRU
b1B1dFN0YWNrKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgubV9zdGFja0Fj
Y2Vzc0RhdGEuYWRkKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS0+
bG9jYWwoKSwgdmFyaWFibGUtPmZsdXNoRm9ybWF0KCkpKTsKICAgICAgICAgICAgICAgICAgICAg
fSBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRPcEFuZERlZmF1bHRGbGFn
cyhDaGVjayk7CiAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBpZiAo
IXZhcmlhYmxlLT5pc0NhcHR1cmVkKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2
ZXJib3NlKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIk1hcHBpbmc6ICIs
IHZhcmlhYmxlLT5sb2NhbCgpLCAiIC0+ICIsIG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgIlxuIik7
Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZUZvck9wZXJhbmQub3BlcmFuZCh2YXJpYWJs
ZS0+bG9jYWwoKSkgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7Ci0gICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAg
ICAgICBkYXRhTG9nKCJNYXBwaW5nOiAiLCB2YXJpYWJsZS0+bG9jYWwoKSwgIiAtPiAiLCBub2Rl
LT5jaGlsZDEoKS5ub2RlKCksICJcbiIpOworICAgICAgICAgICAgICAgICAgICB2YWx1ZUZvck9w
ZXJhbmQub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7
CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAgICAgCkBAIC0zMDgsMTEgKzMwMCw2IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAg
ICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNz
RGF0YSgpOwogICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZHJlbi5yZXNldCgpOwogICAg
ICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhYmxlLT5pc0Nh
cHR1cmVkKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb0dldFN0
YWNrKG1fZ3JhcGgubV9zdGFja0FjY2Vzc0RhdGEuYWRkKHZhcmlhYmxlLT5sb2NhbCgpLCB2YXJp
YWJsZS0+Zmx1c2hGb3JtYXQoKSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAg
ICAgICAgIG5vZGUtPmNvbnZlcnRUb1BoYW50b20oKTsKICAgICAgICAgICAgICAgICAgICAgaWYg
KHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJSZXBsYWNpbmcgbm9k
ZSAiLCBub2RlLCAiIHdpdGggIiwgdmFsdWVGb3JPcGVyYW5kLm9wZXJhbmQodmFyaWFibGUtPmxv
Y2FsKCkpLCAiXG4iKTsKQEAgLTMyOSwxOSArMzE2LDcgQEAgcHVibGljOgogICAgICAgICAgICAg
ICAgIGNhc2UgUGhhbnRvbUxvY2FsOiB7CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChub2Rl
LT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gVW50eXBlZFVzZSk7CiAgICAgICAgICAgICAgICAgICAg
IFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEo
KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhYmxlLT5pc0NhcHR1cmVkKCkpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBmdW4gY2FzZS4gV2UgY291bGQgaGF2
ZSBhIGNhcHR1cmVkIHZhcmlhYmxlIHRoYXQgaGFkIHNvbWUKLSAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIG9yIGFsbCBvZiBpdHMgdXNlcyBzdHJlbmd0aCByZWR1Y2VkIHRvIHBoYW50b21zIHJh
dGhlciB0aGFuIGZsdXNoZXMuCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBTU0EgY29udmVy
c2lvbiB3aWxsIGN1cnJlbnRseSBzdGlsbCB0cmVhdCBpdCBhcyBmbHVzaGVkLCBpbiB0aGUgc2Vu
c2UKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoYXQgaXQgd2lsbCBqdXN0IGtlZXAgdGhl
IFNldExvY2FsLiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vdGhpbmcgdGhhdAotICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gbmVlZHMgdG8gYmUgZG9uZSBoZXJlOiB3ZSBkb24ndCBuZWVkIHRvIGFs
c28ga2VlcCB0aGUgc291cmNlIHZhbHVlCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBhbGl2
ZS4gQW5kIGV2ZW4gaWYgd2UgZGlkIHdhbnQgdG8ga2VlcCB0aGUgc291cmNlIHZhbHVlIGFsaXZl
LCB3ZQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gd291bGRuJ3QgYmUgYWJsZSB0bywgYmVj
YXVzZSB0aGUgdmFyaWFibGVzQXRIZWFkIHZhbHVlIGZvciBhIGNhcHR1cmVkCi0gICAgICAgICAg
ICAgICAgICAgICAgICAvLyBsb2NhbCB3b3VsZG4ndCBoYXZlIGJlZW4gY29tcHV0ZWQgYnkgdGhl
IFBoaSByZWR1Y3Rpb24gYWxnb3JpdGhtCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBhYm92
ZS4KLSAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLnJlc2V0KCk7Ci0gICAg
ICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hp
bGQxKCkgPSB2YWx1ZUZvck9wZXJhbmQub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSktPmRlZmF1
bHRFZGdlKCk7CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpID0gdmFsdWVGb3JP
cGVyYW5kLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpLT5kZWZhdWx0RWRnZSgpOwogICAgICAg
ICAgICAgICAgICAgICBub2RlLT5jb252ZXJ0VG9QaGFudG9tKCk7CiAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KQEAgLTQwMiwxMiArMzc3LDkgQEAgcHVibGlj
OgogICAgICAgICAgICAgRmx1c2hGb3JtYXQgZm9ybWF0ID0gRmx1c2hlZEpTVmFsdWU7CiAKICAg
ICAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2FyZ3VtZW50TWFwcGluZy5nZXQobV9ncmFwaC5tX2Fy
Z3VtZW50c1tpXSk7Ci0KLSAgICAgICAgICAgIC8vIG1fYXJndW1lbnRNYXBwaW5nLmdldCBjb3Vs
ZCByZXR1cm4gbnVsbCBmb3IgYSBjYXB0dXJlZCBsb2NhbC4gVGhhdCdzIGZpbmUuIFdlIG9ubHkK
LSAgICAgICAgICAgIC8vIHRyYWNrIHRoZSBhcmd1bWVudCBsb2FkcyBvZiB0aG9zZSBhcmd1bWVu
dHMgZm9yIHdoaWNoIHdlIHNwZWN1bGF0ZSB0eXBlLiBXZSBkb24ndAotICAgICAgICAgICAgLy8g
c3BlY3VsYXRlIHR5cGUgZm9yIGNhcHR1cmVkIGFyZ3VtZW50cy4KLSAgICAgICAgICAgIGlmIChu
b2RlKQotICAgICAgICAgICAgICAgIGZvcm1hdCA9IG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5m
b3JtYXQ7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG5vZGUpOwor
ICAgICAgICAgICAgZm9ybWF0ID0gbm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCktPmZvcm1hdDsKICAg
ICAgICAgICAgIAogICAgICAgICAgICAgbV9ncmFwaC5tX2FyZ3VtZW50Rm9ybWF0c1tpXSA9IGZv
cm1hdDsKICAgICAgICAgICAgIG1fZ3JhcGgubV9hcmd1bWVudHNbaV0gPSBub2RlOyAvLyBSZWNv
cmQgdGhlIGxvYWQgdGhhdCBsb2FkcyB0aGUgYXJndW1lbnRzIGZvciB0aGUgYmVuZWZpdCBvZiBl
eGl0IHByb2ZpbGluZy4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMTgwODc1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjU5OCw4ICsyNTk4LDExIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9k
ZSkKICAgICAgICAgY2FzZSBBcnJheTo6U3RyaW5nOgogICAgICAgICAgICAgY29tcGlsZUdldEJ5
VmFsT25TdHJpbmcobm9kZSk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJh
eTo6QXJndW1lbnRzOgotICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25Bcmd1bWVudHMobm9k
ZSk7CisgICAgICAgIGNhc2UgQXJyYXk6OkRpcmVjdEFyZ3VtZW50czoKKyAgICAgICAgICAgIGNv
bXBpbGVHZXRCeVZhbE9uRGlyZWN0QXJndW1lbnRzKG5vZGUpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgQXJyYXk6OlNjb3BlZEFyZ3VtZW50czoKKyAgICAgICAgICAgIGNvbXBp
bGVHZXRCeVZhbE9uU2NvcGVkQXJndW1lbnRzKG5vZGUpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIGRlZmF1bHQ6IHsKICAgICAgICAgICAgIFR5cGVkQXJyYXlUeXBlIHR5cGUgPSBub2Rl
LT5hcnJheU1vZGUoKS50eXBlZEFycmF5VHlwZSgpOwpAQCAtMjgyOSw0NyArMjgzMiw2IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgY2FzZSBBcnJheTo6QXJndW1lbnRz
OiB7Ci0gICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBjaGlsZDMpOwotICAg
ICAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7Ci0gICAgICAgICAgICBHUFJUZW1w
b3Jhcnkgc2NyYXRjaDIodGhpcyk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIEdQUlJlZyB2
YWx1ZVJlZyA9IHZhbHVlLmdwcigpOwotICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hSZWcgPSBz
Y3JhdGNoLmdwcigpOwotICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2gyUmVnID0gc2NyYXRjaDIu
Z3ByKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKLSAg
ICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgIC8vIFR3byByZWFsbHkgbGFtZSBj
aGVja3MuCi0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAgICAgICAgICAgIFVu
Y291bnRhYmxlLCBKU1ZhbHVlU291cmNlKCksIDAsCi0gICAgICAgICAgICAgICAgbV9qaXQuYnJh
bmNoMzIoCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWws
IHByb3BlcnR5UmVnLAotICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhiYXNlUmVnLCBBcmd1bWVudHM6Om9mZnNldE9mTnVtQXJndW1lbnRzKCkpKSk7Ci0gICAgICAg
ICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAgICAgICAgICAgIFVuY291bnRhYmxlLCBKU1Zh
bHVlU291cmNlKCksIDAsCi0gICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdFB0cigKLSAg
ICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sCi0gICAgICAgICAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKAotICAgICAgICAgICAgICAgICAgICAgICAg
YmFzZVJlZywgQXJndW1lbnRzOjpvZmZzZXRPZlNsb3dBcmd1bWVudERhdGEoKSkpKTsKLQotICAg
ICAgICAgICAgbV9qaXQubW92ZShwcm9wZXJ0eVJlZywgc2NyYXRjaDJSZWcpOwotICAgICAgICAg
ICAgbV9qaXQuc2lnbkV4dGVuZDMyVG9QdHIoc2NyYXRjaDJSZWcsIHNjcmF0Y2gyUmVnKTsKLSAg
ICAgICAgICAgIG1faml0LmxvYWRQdHIoCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MoYmFzZVJlZywgQXJndW1lbnRzOjpvZmZzZXRPZlJlZ2lzdGVycygpKSwKLSAgICAg
ICAgICAgICAgICBzY3JhdGNoUmVnKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbV9qaXQu
c3RvcmU2NCgKLSAgICAgICAgICAgICAgICB2YWx1ZVJlZywKLSAgICAgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6QmFzZUluZGV4KAotICAgICAgICAgICAgICAgICAgICBzY3JhdGNoUmVnLCBz
Y3JhdGNoMlJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsCi0gICAgICAgICAgICAgICAg
ICAgIENhbGxGcmFtZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpICsg
c2l6ZW9mKFJlZ2lzdGVyKSkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBub1Jlc3VsdChu
b2RlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgICAgICAKICAgICAg
ICAgZGVmYXVsdDogewogICAgICAgICAgICAgVHlwZWRBcnJheVR5cGUgdHlwZSA9IGFycmF5TW9k
ZS50eXBlZEFycmF5VHlwZSgpOwogICAgICAgICAgICAgaWYgKGlzSW50KHR5cGUpKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJl
dmlzaW9uIDE4MDg3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MjIsOSArNzIyLDEyIEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNoZWNrQXJyYXkoTm9kZSogbm8KICAgICAgICAgbm9SZXN1bHQobV9jdXJyZW50
Tm9kZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgY2FzZSBBcnJheTo6QXJndW1lbnRz
OgotICAgICAgICBzcGVjdWxhdGVDZWxsVHlwZVdpdGhvdXRUeXBlRmlsdGVyaW5nKG5vZGUtPmNo
aWxkMSgpLCBiYXNlUmVnLCBBcmd1bWVudHNUeXBlKTsKLQorICAgIGNhc2UgQXJyYXk6OkRpcmVj
dEFyZ3VtZW50czoKKyAgICAgICAgc3BlY3VsYXRlQ2VsbFR5cGVXaXRob3V0VHlwZUZpbHRlcmlu
Zyhub2RlLT5jaGlsZDEoKSwgYmFzZVJlZywgRGlyZWN0QXJndW1lbnRzVHlwZSk7CisgICAgICAg
IG5vUmVzdWx0KG1fY3VycmVudE5vZGUpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBcnJh
eTo6U2NvcGVkQXJndW1lbnRzOgorICAgICAgICBzcGVjdWxhdGVDZWxsVHlwZVdpdGhvdXRUeXBl
RmlsdGVyaW5nKG5vZGUtPmNoaWxkMSgpLCBiYXNlUmVnLCBTY29wZWRBcmd1bWVudHNUeXBlKTsK
ICAgICAgICAgbm9SZXN1bHQobV9jdXJyZW50Tm9kZSk7CiAgICAgICAgIHJldHVybjsKICAgICBk
ZWZhdWx0OgpAQCAtNDA4OCw3ICs0MDkxLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZUdldFR5cGVkQXJyYQogICAgIGludDMyUmVzdWx0KHZlY3RvckdQUiwgbm9kZSk7CiB9CiAKLXZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uQXJndW1lbnRzKE5vZGUqIG5vZGUp
Cit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkRpcmVjdEFyZ3VtZW50cyhO
b2RlKiBub2RlKQogewogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+
Y2hpbGQxKCkpOwogICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlz
LCBub2RlLT5jaGlsZDIoKSk7CkBAIC00MTAzLDgwICs0MTA2LDg5IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uQXIKICAgICBHUFJSZWcgcmVzdWx0UmVnID0gcmVzdWx0
LmdwcigpOwogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgR1BSUmVnIHJlc3VsdFRhZ1JlZyA9
IHJlc3VsdFRhZy5ncHIoKTsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJl
Z3MocmVzdWx0VGFnUmVnLCByZXN1bHRSZWcpOworI2Vsc2UKKyAgICBKU1ZhbHVlUmVncyByZXN1
bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVzdWx0UmVnKTsKICNlbmRpZgogICAgIEdQUlJlZyBzY3Jh
dGNoUmVnID0gc2NyYXRjaC5ncHIoKTsKICAgICAKICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCiAg
ICAgICAgIHJldHVybjsKLSAgCi0gICAgQVNTRVJUKEFycmF5TW9kZShBcnJheTo6QXJndW1lbnRz
KS5hbHJlYWR5Q2hlY2tlZChtX2ppdC5ncmFwaCgpLCBub2RlLCBtX3N0YXRlLmZvck5vZGUobm9k
ZS0+Y2hpbGQxKCkpKSk7CiAgICAgCi0gICAgLy8gVHdvIHJlYWxseSBsYW1lIGNoZWNrcy4KLSAg
ICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAgICBFeG90aWNPYmplY3RNb2RlLCBKU1ZhbHVlU291
cmNlKCksIDAsCi0gICAgICAgIG1faml0LmJyYW5jaDMyKAotICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsCi0gICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhiYXNlUmVnLCBBcmd1bWVudHM6Om9mZnNldE9mTnVtQXJndW1lbnRzKCkp
KSk7CisgICAgQVNTRVJUKEFycmF5TW9kZShBcnJheTo6RGlyZWN0QXJndW1lbnRzKS5hbHJlYWR5
Q2hlY2tlZChtX2ppdC5ncmFwaCgpLCBub2RlLCBtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQx
KCkpKSk7CisgICAgCiAgICAgc3BlY3VsYXRpb25DaGVjaygKICAgICAgICAgRXhvdGljT2JqZWN0
TW9kZSwgSlNWYWx1ZVNvdXJjZSgpLCAwLAogICAgICAgICBtX2ppdC5icmFuY2hUZXN0UHRyKAog
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sCi0gICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcygKLSAgICAgICAgICAgICAgICBiYXNlUmVnLCBBcmd1bWVudHM6Om9m
ZnNldE9mU2xvd0FyZ3VtZW50RGF0YSgpKSkpOwotICAgIAotICAgIG1faml0Lm1vdmUocHJvcGVy
dHlSZWcsIHJlc3VsdFJlZyk7Ci0gICAgbV9qaXQuc2lnbkV4dGVuZDMyVG9QdHIocmVzdWx0UmVn
LCByZXN1bHRSZWcpOwotICAgIG1faml0LmxvYWRQdHIoCi0gICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKGJhc2VSZWcsIEFyZ3VtZW50czo6b2Zmc2V0T2ZSZWdpc3RlcnMoKSksCi0gICAg
ICAgIHNjcmF0Y2hSZWcpOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFz
ZVJlZywgRGlyZWN0QXJndW1lbnRzOjpvZmZzZXRPZk92ZXJyaWRlcygpKSkpOworICAgIHNwZWN1
bGF0aW9uQ2hlY2soCisgICAgICAgIEV4b3RpY09iamVjdE1vZGUsIEpTVmFsdWVTb3VyY2UoKSwg
MCwKKyAgICAgICAgbV9qaXQuYnJhbmNoMzIoCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKGJhc2VSZWcsIERpcmVjdEFyZ3VtZW50czo6b2Zmc2V0T2ZMZW5ndGgoKSkpKTsKICAg
ICAKLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgIG1faml0LmxvYWQzMigKLSAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OkJhc2VJbmRleCgKLSAgICAgICAgICAgIHNjcmF0Y2hSZWcsIHJlc3VsdFJl
ZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsCi0gICAgICAgICAgICBDYWxsRnJhbWU6OnRo
aXNBcmd1bWVudE9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSArIHNpemVvZihSZWdpc3Rlcikg
KwotICAgICAgICAgICAgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLAot
ICAgICAgICByZXN1bHRUYWdSZWcpOwotICAgIG1faml0LmxvYWQzMigKLSAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkJhc2VJbmRleCgKLSAgICAgICAgICAgIHNjcmF0Y2hSZWcsIHJlc3VsdFJlZywg
TWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsCi0gICAgICAgICAgICBDYWxsRnJhbWU6OnRoaXNB
cmd1bWVudE9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSArIHNpemVvZihSZWdpc3RlcikgKwot
ICAgICAgICAgICAgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwK
LSAgICAgICAgcmVzdWx0UmVnKTsKLSAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFRhZ1JlZywgcmVz
dWx0UmVnLCBub2RlKTsKLSNlbHNlCi0gICAgbV9qaXQubG9hZDY0KAorICAgIG1faml0LmxvYWRW
YWx1ZSgKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleCgKLSAgICAgICAgICAgIHNj
cmF0Y2hSZWcsIHJlc3VsdFJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsCi0gICAgICAg
ICAgICBDYWxsRnJhbWU6OnRoaXNBcmd1bWVudE9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSAr
IHNpemVvZihSZWdpc3RlcikpLAotICAgICAgICByZXN1bHRSZWcpOwotICAgIGpzVmFsdWVSZXN1
bHQocmVzdWx0UmVnLCBub2RlKTsKLSNlbmRpZgorICAgICAgICAgICAgYmFzZVJlZywgcHJvcGVy
dHlSZWcsIFRpbWVzRWlnaHQsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZU9mZnNldCgpKSwKKyAg
ICAgICAgcmVzdWx0UmVncyk7CisgICAgCisgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBu
b2RlKTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEFyZ3VtZW50c0xlbmd0
aChOb2RlKiBub2RlKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25TY29w
ZWRBcmd1bWVudHMoTm9kZSogbm9kZSkKIHsKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNl
KHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIFJl
dXNlLCBiYXNlKTsKKyAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhp
cywgbm9kZS0+Y2hpbGQyKCkpOworICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CisjaWYg
VVNFKEpTVkFMVUUzMl82NCkKKyAgICBHUFJUZW1wb3JhcnkgcmVzdWx0VGFnKHRoaXMpOworI2Vu
ZGlmCisgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CisgICAgR1BSVGVtcG9yYXJ5IHNj
cmF0Y2gyKHRoaXMpOwogICAgIAogICAgIEdQUlJlZyBiYXNlUmVnID0gYmFzZS5ncHIoKTsKKyAg
ICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKICAgICBHUFJSZWcgcmVzdWx0
UmVnID0gcmVzdWx0LmdwcigpOworI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgR1BSUmVnIHJl
c3VsdFRhZ1JlZyA9IHJlc3VsdFRhZy5ncHIoKTsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdz
ID0gSlNWYWx1ZVJlZ3MocmVzdWx0VGFnUmVnLCByZXN1bHRSZWcpOworI2Vsc2UKKyAgICBKU1Zh
bHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVzdWx0UmVnKTsKKyNlbmRpZgorICAg
IEdQUlJlZyBzY3JhdGNoUmVnID0gc2NyYXRjaC5ncHIoKTsKKyAgICBHUFJSZWcgc2NyYXRjaDJS
ZWcgPSBzY3JhdGNoMi5ncHIoKTsKICAgICAKICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCiAgICAg
ICAgIHJldHVybjsKICAgICAKLSAgICBBU1NFUlQoQXJyYXlNb2RlKEFycmF5OjpBcmd1bWVudHMp
LmFscmVhZHlDaGVja2VkKG1faml0LmdyYXBoKCksIG5vZGUsIG1fc3RhdGUuZm9yTm9kZShub2Rl
LT5jaGlsZDEoKSkpKTsKKyAgICBBU1NFUlQoQXJyYXlNb2RlKEFycmF5OjpTY29wZWRBcmd1bWVu
dHMpLmFscmVhZHlDaGVja2VkKG1faml0LmdyYXBoKCksIG5vZGUsIG1fc3RhdGUuZm9yTm9kZShu
b2RlLT5jaGlsZDEoKSkpKTsKKyAgICAKKyAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKGJhc2VSZWcsIFNjb3BlZEFyZ3VtZW50czo6b2Zmc2V0T2ZUYWJsZSgpKSwgc2Ny
YXRjaFJlZyk7CisgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNl
UmVnLCBTY29wZWRBcmd1bWVudHM6Om9mZnNldE9mU2NvcGUoKSksIHNjcmF0Y2gyUmVnKTsKICAg
ICAKICAgICBzcGVjdWxhdGlvbkNoZWNrKAogICAgICAgICBFeG90aWNPYmplY3RNb2RlLCBKU1Zh
bHVlU291cmNlKCksIDAsCi0gICAgICAgIG1faml0LmJyYW5jaFRlc3Q4KAotICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhiYXNlUmVnLCBBcmd1bWVudHM6Om9mZnNldE9mT3ZlcnJvZGVMZW5ndGgoKSkpKTsKKyAg
ICAgICAgbV9qaXQuYnJhbmNoMzIoCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWJvdmVP
ckVxdWFsLCBwcm9wZXJ0eVJlZywKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KFNjb3BlZEFyZ3VtZW50c1RhYmxlOjpvZmZzZXRPZkxlbmd0aCgpKSkpOworICAgIAorICAgIG1f
aml0LmxvYWRQdHIoCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hSZWcs
IFNjb3BlZEFyZ3VtZW50c1RhYmxlOjpvZmZzZXRPZkFyZ3VtZW50cygpKSwKKyAgICAgICAgc2Ny
YXRjaFJlZyk7CisgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc2Ny
YXRjaFJlZywgcHJvcGVydHlSZWcsIFRpbWVzRm91ciksIHNjcmF0Y2hSZWcpOworICAgIAorICAg
IHNwZWN1bGF0aW9uQ2hlY2soCisgICAgICAgIEV4b3RpY09iamVjdE1vZGUsIEpTVmFsdWVTb3Vy
Y2UoKSwgMCwKKyAgICAgICAgbV9qaXQuYnJhbmNoMzIoCisgICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6RXF1YWwsIHNjcmF0Y2hSZWcsIFRydXN0ZWRJbW0zMihTY29wZU9mZnNldDo6aW52YWxp
ZE9mZnNldCkpKTsKKyAgICAKKyAgICBtX2ppdC5sb2FkVmFsdWUoCisgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpCYXNlSW5kZXgoCisgICAgICAgICAgICBiYXNlMlJlZywgcHJvcGVydHlSZWcsIFRp
bWVzRWlnaHQsIEpTRW52aXJvbm1lbnRSZWNvcmQ6Om9mZnNldE9mVmFyaWFibGVzKCkpLAorICAg
ICAgICByZXN1bHRSZWdzKTsKICAgICAKLSAgICBtX2ppdC5sb2FkMzIoCi0gICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEFyZ3VtZW50czo6b2Zmc2V0T2ZOdW1Bcmd1bWVu
dHMoKSksCi0gICAgICAgIHJlc3VsdFJlZyk7Ci0gICAgaW50MzJSZXN1bHQocmVzdWx0UmVnLCBu
b2RlKTsKKyAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG5vZGUpOwogfQogCiB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlR2V0U2NvcGUoTm9kZSogbm9kZSkKQEAgLTQyMzIsOCArNDI0
NCw1NiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QXJyYXlMZW5nCiAgICAgICAg
IGludDMyUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAg
ICBjYXNlIEFycmF5OjpBcmd1bWVudHM6IHsKLSAgICAgICAgY29tcGlsZUdldEFyZ3VtZW50c0xl
bmd0aChub2RlKTsKKyAgICBjYXNlIEFycmF5OjpEaXJlY3RBcmd1bWVudHM6IHsKKyAgICAgICAg
U3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAg
IEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgUmV1c2UsIGJhc2UpOworICAgICAgICAKKyAgICAg
ICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdwcigpOworICAgICAgICBHUFJSZWcgcmVzdWx0UmVn
ID0gcmVzdWx0LmdwcigpOworICAgICAgICAKKyAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgQVNTRVJUKEFycmF5TW9kZShB
cnJheTo6RGlyZWN0QXJndW1lbnRzKS5hbHJlYWR5Q2hlY2tlZChtX2ppdC5ncmFwaCgpLCBub2Rl
LCBtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpKSk7CisgICAgICAgIAorICAgICAgICBz
cGVjdWxhdGlvbkNoZWNrKAorICAgICAgICAgICAgRXhvdGljT2JqZWN0TW9kZSwgSlNWYWx1ZVNv
dXJjZSgpLCAwLAorICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdFB0cigKKyAgICAgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhiYXNlUmVnLCBEaXJlY3RBcmd1bWVudHM6Om9mZnNldE9mT3ZlcnJpZGVz
KCkpKSk7CisgICAgICAgIAorICAgICAgICBtX2ppdC5sb2FkMzIoCisgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBEaXJlY3RBcmd1bWVudHM6Om9mZnNldE9mTGVu
Z3RoKCkpLCByZXN1bHRSZWcpOworICAgICAgICAKKyAgICAgICAgaW50MzJSZXN1bHQocmVzdWx0
UmVnLCBub2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgQXJyYXk6OlNjb3Bl
ZEFyZ3VtZW50czogeworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5v
ZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBSZXVzZSwg
YmFzZSk7CisgICAgICAgIAorICAgICAgICBHUFJSZWcgYmFzZVJlZyA9IGJhc2UuZ3ByKCk7Cisg
ICAgICAgIEdQUlJlZyByZXN1bHRSZWcgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIAorICAgICAg
ICBpZiAoIW1fY29tcGlsZU9rYXkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAg
ICAgICBBU1NFUlQoQXJyYXlNb2RlKEFycmF5OjpTY29wZWRBcmd1bWVudHMpLmFscmVhZHlDaGVj
a2VkKG1faml0LmdyYXBoKCksIG5vZGUsIG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSkp
KTsKKyAgICAgICAgCisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCisgICAgICAgICAgICBFeG90
aWNPYmplY3RNb2RlLCBKU1ZhbHVlU291cmNlKCksIDAsCisgICAgICAgICAgICBtX2ppdC5icmFu
Y2hUZXN0OCgKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywKKyAgICAg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBTY29wZWRBcmd1bWVu
dHM6Om9mZnNldE9mT3ZlcnJvZGVUaGluZ3MoKSkpKTsKKyAgICAgICAgCisgICAgICAgIG1faml0
LmxvYWRQdHIoCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBT
Y29wZWRBcmd1bWVudHM6Om9mZnNldE9mVGFibGUoKSksIHJlc3VsdFJlZyk7CisgICAgICAgIAor
ICAgICAgICBtX2ppdC5sb2FkMzIoCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhyZXN1bHRSZWcsIFNjb3BlZEFyZ3VtZW50c1RhYmxlOjpvZmZzZXRPZkxlbmd0aCgpKSwKKyAg
ICAgICAgICAgIHJlc3VsdFJlZyk7CisgICAgICAgIAorICAgICAgICBpbnQzMlJlc3VsdChyZXN1
bHRSZWcsIG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgZGVmYXVsdDogewpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2
aXNpb24gMTgwODc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMTUyLDggKzIxNTIsOSBAQCBwdWJsaWM6CiAgICAg
dm9pZCBjb21waWxlR2V0QnlWYWxPblN0cmluZyhOb2RlKik7CiAgICAgdm9pZCBjb21waWxlRnJv
bUNoYXJDb2RlKE5vZGUqKTsgCiAKLSAgICB2b2lkIGNvbXBpbGVHZXRCeVZhbE9uQXJndW1lbnRz
KE5vZGUqKTsKLSAgICB2b2lkIGNvbXBpbGVHZXRBcmd1bWVudHNMZW5ndGgoTm9kZSopOworICAg
IHZvaWQgY29tcGlsZUdldEJ5VmFsT25EaXJlY3RBcmd1bWVudHMoTm9kZSopOworICAgIHZvaWQg
Y29tcGlsZUdldEJ5VmFsT25TY29wZWRBcmd1bWVudHMoTm9kZSopOworICAgIAogICAgIHZvaWQg
Y29tcGlsZUdldFNjb3BlKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVTa2lwU2NvcGUoTm9kZSop
OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0YWNrTGF5b3V0UGhhc2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RhY2tMYXlv
dXRQaGFzZS5jcHAJKHJldmlzaW9uIDE4MDg3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3RhY2tMYXlvdXRQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNCwxNyArMTE0
LDYgQEAgcHVibGljOgogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIAotICAgICAg
ICAvLyBFbnN1cmUgdGhhdCBjYXB0dXJlZCB2YXJpYWJsZXMgYW5kIGNhcHR1cmVkIGlubGluZSBh
cmd1bWVudHMgYXJlIHBpbm5lZCBkb3duLgotICAgICAgICAvLyBUaGV5IHNob3VsZCBoYXZlIGJl
ZW4gYmVjYXVzZSBvZiBmbHVzaGVzLCBleGNlcHQgdGhhdCB0aGUgZmx1c2hlcyBjYW4gYmUgb3B0
aW1pemVkCi0gICAgICAgIC8vIGF3YXkuCi0gICAgICAgIGlmIChzeW1ib2xUYWJsZSkgewotICAg
ICAgICAgICAgZm9yIChpbnQgaSA9IHN5bWJvbFRhYmxlLT5jYXB0dXJlU3RhcnQoKTsgaSA+IHN5
bWJvbFRhYmxlLT5jYXB0dXJlRW5kKCk7IGktLSkKLSAgICAgICAgICAgICAgICB1c2VkTG9jYWxz
LnNldChWaXJ0dWFsUmVnaXN0ZXIoaSkudG9Mb2NhbCgpKTsKLSAgICAgICAgfQotICAgICAgICBp
ZiAoY29kZUJsb2NrKCktPnVzZXNBcmd1bWVudHMoKSkgewotICAgICAgICAgICAgdXNlZExvY2Fs
cy5zZXQoY29kZUJsb2NrKCktPmFyZ3VtZW50c1JlZ2lzdGVyKCkudG9Mb2NhbCgpKTsKLSAgICAg
ICAgICAgIHVzZWRMb2NhbHMuc2V0KHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3Rlcihjb2RlQmxv
Y2soKS0+YXJndW1lbnRzUmVnaXN0ZXIoKSkudG9Mb2NhbCgpKTsKLSAgICAgICAgfQogICAgICAg
ICBpZiAoY29kZUJsb2NrKCktPnVuY2hlY2tlZEFjdGl2YXRpb25SZWdpc3RlcigpLmlzVmFsaWQo
KSkKICAgICAgICAgICAgIHVzZWRMb2NhbHMuc2V0KGNvZGVCbG9jaygpLT5hY3RpdmF0aW9uUmVn
aXN0ZXIoKS50b0xvY2FsKCkpOwogICAgICAgICBmb3IgKElubGluZUNhbGxGcmFtZVNldDo6aXRl
cmF0b3IgaXRlciA9IG1fZ3JhcGgubV9wbGFuLmlubGluZUNhbGxGcmFtZXMtPmJlZ2luKCk7ICEh
aXRlcjsgKytpdGVyKSB7CkBAIC0yNjEsMjAgKzI1MCw2IEBAIHB1YmxpYzoKICAgICAgICAgICAg
ICAgICBtX2dyYXBoLm1fbWFjaGluZUNhcHR1cmVTdGFydCA9IHZpcnR1YWxSZWdpc3RlckZvckxv
Y2FsKGNhcHR1cmVTdGFydExvY2FsKS5vZmZzZXQoKTsKICAgICAgICAgICAgIH0gZWxzZQogICAg
ICAgICAgICAgICAgIG1fZ3JhcGgubV9tYWNoaW5lQ2FwdHVyZVN0YXJ0ID0gdmlydHVhbFJlZ2lz
dGVyRm9yTG9jYWwoMCkub2Zmc2V0KCk7Ci0gICAgICAgIAotICAgICAgICAgICAgLy8gVGhpcyBp
cyBhbiBhYm9taW5hdGlvbi4gSWYgd2UgaGFkIGNhcHR1cmVkIGFuIGFyZ3VtZW50IHRoZW4gdGhl
IGFyZ3VtZW50IGVuZHMKLSAgICAgICAgICAgIC8vIHVwIGJlaW5nICJzbG93IiwgbWVhbmluZyB0
aGF0IGxvYWRzIG9mIHRoZSBhcmd1bWVudCBnbyB0aHJvdWdoIGFuIGV4dHJhIGxvb2t1cAotICAg
ICAgICAgICAgLy8gdGFibGUuCi0gICAgICAgICAgICBpZiAoY29uc3QgU2xvd0FyZ3VtZW50KiBz
bG93QXJndW1lbnRzID0gc3ltYm9sVGFibGUtPnNsb3dBcmd1bWVudHMoKSkgewotICAgICAgICAg
ICAgICAgIGF1dG8gbmV3U2xvd0FyZ3VtZW50cyA9IHN0ZDo6bWFrZV91bmlxdWU8U2xvd0FyZ3Vt
ZW50W10+KAotICAgICAgICAgICAgICAgICAgICBzeW1ib2xUYWJsZS0+cGFyYW1ldGVyQ291bnQo
KSk7Ci0gICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IHN5bWJvbFRhYmxlLT5wYXJhbWV0
ZXJDb3VudCgpOyBpLS07KSB7Ci0gICAgICAgICAgICAgICAgICAgIG5ld1Nsb3dBcmd1bWVudHNb
aV0gPSBzbG93QXJndW1lbnRzW2ldOwotICAgICAgICAgICAgICAgICAgICBuZXdTbG93QXJndW1l
bnRzW2ldLmluZGV4ID0gYXNzaWduKGFsbG9jYXRpb24sIFZpcnR1YWxSZWdpc3RlcihzbG93QXJn
dW1lbnRzW2ldLmluZGV4KSkub2Zmc2V0KCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgCi0gICAgICAgICAgICAgICAgbV9ncmFwaC5tX3Nsb3dBcmd1bWVudHMgPSBXVEY6Om1vdmUo
bmV3U2xvd0FyZ3VtZW50cyk7Ci0gICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgCiAg
ICAgICAgIC8vIEZpeCBHZXRMb2NhbFVubGlua2VkJ3MgdmFyaWFibGUgcmVmZXJlbmNlcy4KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVW5pZmljYXRpb25QaGFzZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdVbmlmaWNhdGlvblBoYXNl
LmNwcAkocmV2aXNpb24gMTgwODc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdV
bmlmaWNhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzAsNyArNzAsNiBAQCBwdWJs
aWM6CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2dyYXBoLm1fdmFyaWFibGVB
Y2Nlc3NEYXRhLnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEq
IGRhdGEgPSAmbV9ncmFwaC5tX3ZhcmlhYmxlQWNjZXNzRGF0YVtpXTsKICAgICAgICAgICAgIGRh
dGEtPmZpbmQoKS0+cHJlZGljdChkYXRhLT5ub25VbmlmaWVkUHJlZGljdGlvbigpKTsKLSAgICAg
ICAgICAgIGRhdGEtPmZpbmQoKS0+bWVyZ2VJc0NhcHR1cmVkKGRhdGEtPmlzQ2FwdHVyZWQoKSk7
CiAgICAgICAgICAgICBkYXRhLT5maW5kKCktPm1lcmdlU3RydWN0dXJlQ2hlY2tIb2lzdGluZ0Zh
aWxlZChkYXRhLT5zdHJ1Y3R1cmVDaGVja0hvaXN0aW5nRmFpbGVkKCkpOwogICAgICAgICAgICAg
ZGF0YS0+ZmluZCgpLT5tZXJnZUNoZWNrQXJyYXlIb2lzdGluZ0ZhaWxlZChkYXRhLT5jaGVja0Fy
cmF5SG9pc3RpbmdGYWlsZWQoKSk7CiAgICAgICAgICAgICBkYXRhLT5maW5kKCktPm1lcmdlU2hv
dWxkTmV2ZXJVbmJveChkYXRhLT5zaG91bGROZXZlclVuYm94KCkpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAJKHJldmlzaW9uIDE4MDg3NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00NTUsOCArNDU1LDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgICAgICAgICAgICAg
Y2FzZSBHZXRMb2NhbDoKLSAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPnZhcmlhYmxlQWNj
ZXNzRGF0YSgpLT5pc0NhcHR1cmVkKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgICAgICAgLy8gSWdub3JlIEdldExvY2FsJ3MgdGhhdCB3ZSBrbm93IHRv
IGJlIGRlYWQsIGJ1dCB0aGF0IHRoZSBncmFwaAogICAgICAgICAgICAgICAgICAgICAvLyBkb2Vz
bid0IHlldCBrbm93IHRvIGJlIGRlYWQuCiAgICAgICAgICAgICAgICAgICAgIGlmICghbV9teVJl
ZkNvdW50cy5nZXQobm9kZSkpCkBAIC00NjYsOCArNDY0LDYgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgICAgICAgICAgZ2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChub2RlLT5sb2NhbCgpKSA9IGk7
CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGNhc2UgU2V0TG9j
YWw6Ci0gICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+
aXNDYXB0dXJlZCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgICAgICAgIC8vIE9ubHkgcmVjb3JkIHRoZSBmaXJzdCBTZXRMb2NhbC4gVGhlcmUgbWF5IGJl
IG11bHRpcGxlIFNldExvY2FscwogICAgICAgICAgICAgICAgICAgICAvLyBiZWNhdXNlIG9mIGZs
dXNoaW5nLgogICAgICAgICAgICAgICAgICAgICBpZiAoc2V0TG9jYWxQb3NpdGlvbnMub3BlcmFu
ZChub2RlLT5sb2NhbCgpKSAhPSBub3RTZXQpCkBAIC00NzUsOCArNDcxLDYgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgICAgICAgICAgc2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChub2RlLT5sb2Nh
bCgpKSA9IGk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGNh
c2UgU2V0QXJndW1lbnQ6Ci0gICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT52YXJpYWJsZUFj
Y2Vzc0RhdGEoKS0+aXNDYXB0dXJlZCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgYWN0cyBsaWtlIGEgcmVzZXQuIEl0J3Mgb2sg
dG8gaGF2ZSBhIHNlY29uZCBHZXRMb2NhbCBmb3IgYSBsb2NhbCBpbiB0aGUgc2FtZQogICAgICAg
ICAgICAgICAgICAgICAvLyBibG9jayBpZiB3ZSBoYWQgYSBTZXRBcmd1bWVudCBmb3IgdGhhdCBs
b2NhbC4KICAgICAgICAgICAgICAgICAgICAgZ2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChub2Rl
LT5sb2NhbCgpKSA9IG5vdFNldDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
VmFyaWFibGVBY2Nlc3NEYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5jcHAJKHJldmlzaW9uIDE4MDg3NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMzUsNyArMzUsNiBAQCBWYXJpYWJsZUFjY2Vzc0RhdGE6OlZhcmlhYmxlQWNjZXNz
RGF0YSgpCiAgICAgLCBtX3ByZWRpY3Rpb24oU3BlY05vbmUpCiAgICAgLCBtX2FyZ3VtZW50QXdh
cmVQcmVkaWN0aW9uKFNwZWNOb25lKQogICAgICwgbV9mbGFncygwKQotICAgICwgbV9pc0NhcHR1
cmVkKGZhbHNlKQogICAgICwgbV9zaG91bGROZXZlclVuYm94KGZhbHNlKQogICAgICwgbV9pc0Fy
Z3VtZW50c0FsaWFzKGZhbHNlKQogICAgICwgbV9zdHJ1Y3R1cmVDaGVja0hvaXN0aW5nRmFpbGVk
KGZhbHNlKQpAQCAtNDcsMTMgKzQ2LDEyIEBAIFZhcmlhYmxlQWNjZXNzRGF0YTo6VmFyaWFibGVB
Y2Nlc3NEYXRhKCkKICAgICBjbGVhclZvdGVzKCk7CiB9CiAKLVZhcmlhYmxlQWNjZXNzRGF0YTo6
VmFyaWFibGVBY2Nlc3NEYXRhKFZpcnR1YWxSZWdpc3RlciBsb2NhbCwgYm9vbCBpc0NhcHR1cmVk
KQorVmFyaWFibGVBY2Nlc3NEYXRhOjpWYXJpYWJsZUFjY2Vzc0RhdGEoVmlydHVhbFJlZ2lzdGVy
IGxvY2FsKQogICAgIDogbV9sb2NhbChsb2NhbCkKICAgICAsIG1fcHJlZGljdGlvbihTcGVjTm9u
ZSkKICAgICAsIG1fYXJndW1lbnRBd2FyZVByZWRpY3Rpb24oU3BlY05vbmUpCiAgICAgLCBtX2Zs
YWdzKDApCi0gICAgLCBtX2lzQ2FwdHVyZWQoaXNDYXB0dXJlZCkKLSAgICAsIG1fc2hvdWxkTmV2
ZXJVbmJveChpc0NhcHR1cmVkKQorICAgICwgbV9zaG91bGROZXZlclVuYm94KGZhbHNlKQogICAg
ICwgbV9pc0FyZ3VtZW50c0FsaWFzKGZhbHNlKQogICAgICwgbV9zdHJ1Y3R1cmVDaGVja0hvaXN0
aW5nRmFpbGVkKGZhbHNlKQogICAgICwgbV9jaGVja0FycmF5SG9pc3RpbmdGYWlsZWQoZmFsc2Up
CkBAIC02NCwxMiArNjIsNiBAQCBWYXJpYWJsZUFjY2Vzc0RhdGE6OlZhcmlhYmxlQWNjZXNzRGF0
YShWCiAgICAgY2xlYXJWb3RlcygpOwogfQogCi1ib29sIFZhcmlhYmxlQWNjZXNzRGF0YTo6bWVy
Z2VJc0NhcHR1cmVkKGJvb2wgaXNDYXB0dXJlZCkKLXsKLSAgICByZXR1cm4gY2hlY2tBbmRTZXQo
bV9zaG91bGROZXZlclVuYm94LCBtX3Nob3VsZE5ldmVyVW5ib3ggfHwgaXNDYXB0dXJlZCkKLSAg
ICAgICAgfCBjaGVja0FuZFNldChtX2lzQ2FwdHVyZWQsIG1faXNDYXB0dXJlZCB8fCBpc0NhcHR1
cmVkKTsKLX0KLQogYm9vbCBWYXJpYWJsZUFjY2Vzc0RhdGE6Om1lcmdlU2hvdWxkTmV2ZXJVbmJv
eChib29sIHNob3VsZE5ldmVyVW5ib3gpCiB7CiAgICAgYm9vbCBuZXdTaG91bGROZXZlclVuYm94
ID0gbV9zaG91bGROZXZlclVuYm94IHwgc2hvdWxkTmV2ZXJVbmJveDsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaAkocmV2aXNp
b24gMTgwODc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUFjY2Vz
c0RhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTEtMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTEtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ4LDcgKzQ4LDcgQEAgZW51bSBEb3VibGVCYWxs
b3QgeyBWb3RlVmFsdWUsIFZvdGVEb3VibAogY2xhc3MgVmFyaWFibGVBY2Nlc3NEYXRhIDogcHVi
bGljIFVuaW9uRmluZDxWYXJpYWJsZUFjY2Vzc0RhdGE+IHsKIHB1YmxpYzoKICAgICBWYXJpYWJs
ZUFjY2Vzc0RhdGEoKTsKLSAgICBWYXJpYWJsZUFjY2Vzc0RhdGEoVmlydHVhbFJlZ2lzdGVyIGxv
Y2FsLCBib29sIGlzQ2FwdHVyZWQpOworICAgIFZhcmlhYmxlQWNjZXNzRGF0YShWaXJ0dWFsUmVn
aXN0ZXIgbG9jYWwpOwogICAgIAogICAgIFZpcnR1YWxSZWdpc3RlciBsb2NhbCgpCiAgICAgewpA
QCAtNjIsMTMgKzYyLDYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9tYWNoaW5lTG9jYWw7
CiAgICAgfQogCi0gICAgYm9vbCBtZXJnZUlzQ2FwdHVyZWQoYm9vbCBpc0NhcHR1cmVkKTsKLSAg
ICAKLSAgICBib29sIGlzQ2FwdHVyZWQoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1faXNDYXB0
dXJlZDsKLSAgICB9Ci0gICAgCiAgICAgYm9vbCBtZXJnZUlzUHJvZml0YWJsZVRvVW5ib3goYm9v
bCBpc1Byb2ZpdGFibGVUb1VuYm94KQogICAgIHsKICAgICAgICAgcmV0dXJuIGNoZWNrQW5kU2V0
KG1faXNQcm9maXRhYmxlVG9VbmJveCwgbV9pc1Byb2ZpdGFibGVUb1VuYm94IHx8IGlzUHJvZml0
YWJsZVRvVW5ib3gpOwpAQCAtODYsNyArNzksNiBAQCBwdWJsaWM6CiAgICAgLy8gbWVhbiB0aGF0
IHdlIGhhdmUgYWN0dWFsbHkgZG9uZSBzby4KICAgICBib29sIHNob3VsZE5ldmVyVW5ib3goKQog
ICAgIHsKLSAgICAgICAgQVNTRVJUKCEobV9pc0NhcHR1cmVkICYmICFtX3Nob3VsZE5ldmVyVW5i
b3gpKTsKICAgICAgICAgcmV0dXJuIG1fc2hvdWxkTmV2ZXJVbmJveDsKICAgICB9CiAgICAgCkBA
IC0xOTMsNyArMTg1LDYgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQoaXNSb290KCkpOwogICAg
ICAgICBib29sIGRvdWJsZVN0YXRlID0gbV9kb3VibGVGb3JtYXRTdGF0ZSA9PSBVc2luZ0RvdWJs
ZUZvcm1hdDsKICAgICAgICAgQVNTRVJUKCEoZG91YmxlU3RhdGUgJiYgc2hvdWxkTmV2ZXJVbmJv
eCgpKSk7Ci0gICAgICAgIEFTU0VSVCghKGRvdWJsZVN0YXRlICYmIGlzQ2FwdHVyZWQoKSkpOwog
ICAgICAgICByZXR1cm4gZG91YmxlU3RhdGUgJiYgaXNQcm9maXRhYmxlVG9VbmJveCgpOwogICAg
IH0KICAgICAKQEAgLTIzMyw3ICsyMjQsNiBAQCBwcml2YXRlOgogICAgIFNwZWN1bGF0ZWRUeXBl
IG1fYXJndW1lbnRBd2FyZVByZWRpY3Rpb247CiAgICAgTm9kZUZsYWdzIG1fZmxhZ3M7CiAKLSAg
ICBib29sIG1faXNDYXB0dXJlZDsKICAgICBib29sIG1fc2hvdWxkTmV2ZXJVbmJveDsKICAgICBi
b29sIG1faXNBcmd1bWVudHNBbGlhczsKICAgICBib29sIG1fc3RydWN0dXJlQ2hlY2tIb2lzdGlu
Z0ZhaWxlZDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVBY2Nl
c3NEYXRhRHVtcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmNwcAkocmV2aXNpb24gMTgwODc1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNjIsOSArNjIsNyBAQCB2b2lkIFZhcmlhYmxlQWNjZXNzRGF0YUR1bXA6OmR1
bXAoUHJpbnRTCiAgICAgICAgIGluZGV4IC89IDI2OwogICAgIH0KICAgICAKLSAgICBpZiAobV9k
YXRhLT5pc0NhcHR1cmVkKCkpCi0gICAgICAgIG91dC5wcmludCgiKiIpOwotICAgIGVsc2UgaWYg
KG1fZGF0YS0+c2hvdWxkTmV2ZXJVbmJveCgpKQorICAgIGlmIChtX2RhdGEtPnNob3VsZE5ldmVy
VW5ib3goKSkKICAgICAgICAgb3V0LnByaW50KCIhIik7CiAgICAgZWxzZSBpZiAoIW1fZGF0YS0+
c2hvdWxkVW5ib3hJZlBvc3NpYmxlKCkpCiAgICAgICAgIG91dC5wcmludCgifiIpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUFjY2Vzc0Rh
dGFEdW1wLmgJKHJldmlzaW9uIDE4MDg3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuaAko
cmV2aXNpb24gMTgwODc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFj
dEhlYXBSZXBvc2l0b3J5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDYsNiArNDYsOCBAQCBuYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAgICAgbWFjcm8oQnV0dGVyZmx5X3B1YmxpY0xl
bmd0aCwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSBcCiAgICAgbWFjcm8oQnV0
dGVyZmx5X3ZlY3Rvckxlbmd0aCwgQnV0dGVyZmx5OjpvZmZzZXRPZlZlY3Rvckxlbmd0aCgpKSBc
CiAgICAgbWFjcm8oQ2FsbEZyYW1lX2NhbGxlckZyYW1lLCBDYWxsRnJhbWU6OmNhbGxlckZyYW1l
T2Zmc2V0KCkpIFwKKyAgICBtYWNybyhEaXJlY3RBcmd1bWVudHNfbGVuZ3RoLCBEaXJlY3RBcmd1
bWVudHM6Om9mZnNldE9mTGVuZ3RoKCkpIFwKKyAgICBtYWNybyhEaXJlY3RBcmd1bWVudHNfb3Zl
cnJpZGVzLCBEaXJlY3RBcmd1bWVudHM6Om9mZnNldE9mT3ZlcnJpZGVzKCkpIFwKICAgICBtYWNy
byhHZXR0ZXJTZXR0ZXJfZ2V0dGVyLCBHZXR0ZXJTZXR0ZXI6Om9mZnNldE9mR2V0dGVyKCkpIFwK
ICAgICBtYWNybyhHZXR0ZXJTZXR0ZXJfc2V0dGVyLCBHZXR0ZXJTZXR0ZXI6Om9mZnNldE9mU2V0
dGVyKCkpIFwKICAgICBtYWNybyhKU0FycmF5QnVmZmVyVmlld19sZW5ndGgsIEpTQXJyYXlCdWZm
ZXJWaWV3OjpvZmZzZXRPZkxlbmd0aCgpKSBcCkBAIC03Miw2ICs3NCwxMSBAQCBuYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAgICAgbWFjcm8oSlNXcmFwcGVyT2JqZWN0X2ludGVybmFs
VmFsdWUsIEpTV3JhcHBlck9iamVjdDo6aW50ZXJuYWxWYWx1ZU9mZnNldCgpKSBcCiAgICAgbWFj
cm8oTWFya2VkQWxsb2NhdG9yX2ZyZWVMaXN0SGVhZCwgTWFya2VkQWxsb2NhdG9yOjpvZmZzZXRP
ZkZyZWVMaXN0SGVhZCgpKSBcCiAgICAgbWFjcm8oTWFya2VkQmxvY2tfbWFya0JpdHMsIE1hcmtl
ZEJsb2NrOjpvZmZzZXRPZk1hcmtzKCkpIFwKKyAgICBtYWNybyhTY29wZWRBcmd1bWVudHNfb3Zl
cnJvZGVUaGluZ3MsIFNjb3BlZEFyZ3VtZW50czo6b2Zmc2V0T2ZPdmVycm9kZVRoaW5ncygpKSkg
XAorICAgIG1hY3JvKFNjb3BlZEFyZ3VtZW50c19zY29wZSwgU2NvcGVkQXJndW1lbnRzOjpvZmZl
dE9mU2NvcGUoKSkpIFwKKyAgICBtYWNybyhTY29wZWRBcmd1bWVudHNfdGFibGUsIFNjb3BlZEFy
Z3VtZW50czo6b2ZmZXRPZlRhYmxlKCkpKSBcCisgICAgbWFjcm8oU2NvcGVkQXJndW1lbnRzVGFi
bGVfYXJndW1lbnRzLCBTY29wZWRBcmd1bWVudHNUYWJsZTo6b2ZmZXRPZkFyZ3VtZW50cygpKSkg
XAorICAgIG1hY3JvKFNjb3BlZEFyZ3VtZW50c1RhYmxlX2xlbmd0aCwgU2NvcGVkQXJndW1lbnRz
VGFibGU6Om9mZmV0T2ZMZW5ndGgoKSkpIFwKICAgICBtYWNybyhTdHJpbmdJbXBsX2RhdGEsIFN0
cmluZ0ltcGw6OmRhdGFPZmZzZXQoKSkgXAogICAgIG1hY3JvKFN0cmluZ0ltcGxfaGFzaEFuZEZs
YWdzLCBTdHJpbmdJbXBsOjpmbGFnc09mZnNldCgpKSBcCiAgICAgbWFjcm8oU3RydWN0dXJlX2Ns
YXNzSW5mbywgU3RydWN0dXJlOjpjbGFzc0luZm9PZmZzZXQoKSkgXApAQCAtODAsNiArODcsOCBA
QCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAgICAgbWFjcm8oU3RydWN0dXJlX3N0
cnVjdHVyZUlELCBTdHJ1Y3R1cmU6OnN0cnVjdHVyZUlET2Zmc2V0KCkpCiAKICNkZWZpbmUgRk9S
X0VBQ0hfSU5ERVhFRF9BQlNUUkFDVF9IRUFQKG1hY3JvKSBcCisgICAgbWFjcm8oRGlyZWN0QXJn
dW1lbnRzX3N0b3JhZ2UsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZU9mZnNldCgpLCBzaXplb2Yo
RW5jb2RlZEpTVmFsdWUpKSBcCisgICAgbWFjcm8oSlNFbnZpcm9ubWVudFJlY29yZF92YXJpYWJs
ZSwgSlNFbnZpcm9ubWVudFJlY29yZDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSwgc2l6ZW9mKEVuY29k
ZWRKU1ZhbHVlKSkgXAogICAgIG1hY3JvKEpTUm9wZVN0cmluZ19maWJlcnMsIEpTUm9wZVN0cmlu
Zzo6b2Zmc2V0T2ZGaWJlcnMoKSwgc2l6ZW9mKFdyaXRlQmFycmllcjxKU1N0cmluZz4pKSBcCiAg
ICAgbWFjcm8oY2hhcmFjdGVyczgsIDAsIHNpemVvZihMQ2hhcikpIFwKICAgICBtYWNybyhjaGFy
YWN0ZXJzMTYsIDAsIHNpemVvZihVQ2hhcikpIFwKQEAgLTg3LDYgKzk2LDcgQEAgbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBGVEwgewogICAgIG1hY3JvKGluZGV4ZWREb3VibGVQcm9wZXJ0aWVz
LCAwLCBzaXplb2YoZG91YmxlKSkgXAogICAgIG1hY3JvKGluZGV4ZWRDb250aWd1b3VzUHJvcGVy
dGllcywgMCwgc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkgXAogICAgIG1hY3JvKGluZGV4ZWRBcnJh
eVN0b3JhZ2VQcm9wZXJ0aWVzLCAwLCBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSBcCisgICAgbWFj
cm8oc2NvcGVkQXJndWVtbnRzVGFibGVBcmd1bWVudHMsIDAsIHNpemVvZihpbnQzMl90KSkgXAog
ICAgIG1hY3JvKHNpbmdsZUNoYXJhY3RlclN0cmluZ3MsIDAsIHNpemVvZihKU1N0cmluZyopKSBc
CiAgICAgbWFjcm8odmFyaWFibGVzLCAwLCBzaXplb2YoUmVnaXN0ZXIpKQogICAgIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAkocmV2aXNp
b24gMTgwODc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDksNiArMjA5LDggQEAgaW5saW5lIENhcGFiaWxpdHlM
ZXZlbCBjYW5Db21waWxlKE5vZGUqIAogICAgICAgICBjYXNlIEFycmF5OjpJbnQzMjoKICAgICAg
ICAgY2FzZSBBcnJheTo6RG91YmxlOgogICAgICAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOgor
ICAgICAgICBjYXNlIEFycmF5OjpEaXJlY3RBcmd1bWVudHM6CisgICAgICAgIGNhc2UgQXJyYXk6
OlNjb3BlZEFyZ3VtZW50czoKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0Ogog
ICAgICAgICAgICAgaWYgKGlzVHlwZWRWaWV3KG5vZGUtPmFycmF5TW9kZSgpLnR5cGVkQXJyYXlU
eXBlKCkpKQpAQCAtMjIyLDYgKzIyNCw4IEBAIGlubGluZSBDYXBhYmlsaXR5TGV2ZWwgY2FuQ29t
cGlsZShOb2RlKiAKICAgICAgICAgY2FzZSBBcnJheTo6RG91YmxlOgogICAgICAgICBjYXNlIEFy
cmF5OjpDb250aWd1b3VzOgogICAgICAgICBjYXNlIEFycmF5OjpTdHJpbmc6CisgICAgICAgIGNh
c2UgQXJyYXk6OkRpcmVjdEFyZ3VtZW50czoKKyAgICAgICAgY2FzZSBBcnJheTo6U2NvcGVkQXJn
dW1lbnRzOgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAg
ICBpZiAoaXNUeXBlZFZpZXcobm9kZS0+YXJyYXlNb2RlKCkudHlwZWRBcnJheVR5cGUoKSkpCkBA
IC0yNDgsNiArMjUyLDggQEAgaW5saW5lIENhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxlKE5vZGUq
IAogICAgICAgICBjYXNlIEFycmF5OjpJbnQzMjoKICAgICAgICAgY2FzZSBBcnJheTo6RG91Ymxl
OgogICAgICAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOgorICAgICAgICBjYXNlIEFycmF5OjpE
aXJlY3RBcmd1bWVudHM6CisgICAgICAgIGNhc2UgQXJyYXk6OlNjb3BlZEFyZ3VtZW50czoKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgaWYgKGlzVHlw
ZWRWaWV3KG5vZGUtPmFycmF5TW9kZSgpLnR5cGVkQXJyYXlUeXBlKCkpKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCShyZXZpc2lvbiAxODA4NzUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMDMsMTEgKzMwMyw2IEBAIHN0YXRpYyB2b2lkIGZpeEZ1bmN0aW9uQmFzZWRPblN0YWNrTWFw
cygKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBncmFwaC5tX2lubGluZVZhcmlhYmxlRGF0YS5zaXpl
KCk7IGktLTspIHsKICAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBn
cmFwaC5tX2lubGluZVZhcmlhYmxlRGF0YVtpXS5pbmxpbmVDYWxsRnJhbWU7CiAgICAgICAgIAot
ICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHNSZWdpc3Rlci5pc1ZhbGlkKCkp
IHsKLSAgICAgICAgICAgIGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzUmVnaXN0ZXIgPSBWaXJ0
dWFsUmVnaXN0ZXIoCi0gICAgICAgICAgICAgICAgaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHNS
ZWdpc3Rlci5vZmZzZXQoKSArIGxvY2Fsc09mZnNldCk7Ci0gICAgICAgIH0KLSAgICAgICAgCiAg
ICAgICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQgPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50
cy5zaXplKCk7IGFyZ3VtZW50LS0gPiAxOykgewogICAgICAgICAgICAgaW5saW5lQ2FsbEZyYW1l
LT5hcmd1bWVudHNbYXJndW1lbnRdID0KICAgICAgICAgICAgICAgICBpbmxpbmVDYWxsRnJhbWUt
PmFyZ3VtZW50c1thcmd1bWVudF0ud2l0aExvY2Fsc09mZnNldChsb2NhbHNPZmZzZXQpOwpAQCAt
MzE5LDExICszMTQsNiBAQCBzdGF0aWMgdm9pZCBmaXhGdW5jdGlvbkJhc2VkT25TdGFja01hcHMo
CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgaWYgKGNvZGVCbG9jay0+dXNlc0FyZ3VtZW50
cygpKSB7Ci0gICAgICAgIGNvZGVCbG9jay0+c2V0QXJndW1lbnRzUmVnaXN0ZXIoCi0gICAgICAg
ICAgICBWaXJ0dWFsUmVnaXN0ZXIoY29kZUJsb2NrLT5hcmd1bWVudHNSZWdpc3RlcigpLm9mZnNl
dCgpICsgbG9jYWxzT2Zmc2V0KSk7Ci0gICAgfQotCiAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVs
IHN0YWNrT3ZlcmZsb3dFeGNlcHRpb247CiAKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkocmV2aXNpb24gMTgwODc1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIxOTUsNiArMjE5NSwyNSBAQCBwcml2YXRlOgogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9CiAgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBBcnJheTo6RGlyZWN0
QXJndW1lbnRzOiB7CisgICAgICAgICAgICBMVmFsdWUgYXJndW1lbnRzID0gbG93Q2VsbChtX291
dC0+Y2hpbGQxKCkpOworICAgICAgICAgICAgc3BlY3VsYXRlKAorICAgICAgICAgICAgICAgIEV4
b3RpY09iamVjdE1vZGUsIG5vVmFsdWUoKSwgbnVsbHB0ciwKKyAgICAgICAgICAgICAgICBtX291
dC5ub3ROdWxsKG1fb3V0LmxvYWRQdHIoYXJndW1lbnRzLCBtX2hlYXBzLkRpcmVjdEFyZ3VtZW50
c19vdmVycmlkZXMpKSk7CisgICAgICAgICAgICBzZXRJbnQzMihtX291dC5sb2FkMzJOb25OZWdh
dGl2ZShhcmd1bWVudHMsIG1faGVhcHMuRGlyZWN0QXJndW1lbnRzX2xlbmd0aCkpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBBcnJh
eTo6U2NvcGVkQXJndW1lbnRzOiB7CisgICAgICAgICAgICBMVmFsdWUgYXJndW1lbnRzID0gbG93
Q2VsbChtX291dC0+Y2hpbGQxKCkpOworICAgICAgICAgICAgc3BlY3VsYXRlKAorICAgICAgICAg
ICAgICAgIEV4b3RpY09iamVjdE1vZGUsIG5vVmFsdWUoKSwgbnVsbHB0ciwKKyAgICAgICAgICAg
ICAgICBtX291dC5ub3RaZXJvOChtX291dC5sb2FkUHRyKGFyZ3VtZW50cywgbV9oZWFwcy5TY29w
ZWRBcmd1bWVudHNfb3ZlcnJvZGVUaGluZ3MpKSk7CisgICAgICAgICAgICBMVmFsdWUgdGFibGUg
PSBtX291dC5sb2FkUHRyKGFyZ3VtZW50cywgbV9oZWFwcy5TY29wZWRBcmd1bWVudHNfdGFibGUp
OworICAgICAgICAgICAgc2V0SW50MzIobV9vdXQubG9hZDMyTm9uTmVnYXRpdmUodGFibGUsIG1f
aGVhcHMuU2NvcGVkQXJndW1lbnRzVGFibGVfbGVuZ3RoKSk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICAgICAgICAgIAogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAg
aWYgKGlzVHlwZWRWaWV3KG1fbm9kZS0+YXJyYXlNb2RlKCkudHlwZWRBcnJheVR5cGUoKSkpIHsK
ICAgICAgICAgICAgICAgICBzZXRJbnQzMigKQEAgLTIzMTIsNiArMjMzMSw0OSBAQCBwcml2YXRl
OgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgICAgICAKKyAgICAgICAg
Y2FzZSBBcnJheTo6RGlyZWN0QXJndW1lbnRzOiB7CisgICAgICAgICAgICBMVmFsdWUgYmFzZSA9
IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBMVmFsdWUgaW5kZXggPSBs
b3dJbnQzMihtX25vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgc3Bl
Y3VsYXRlKAorICAgICAgICAgICAgICAgIEV4b3RpY09iamVjdE1vZGUsIG5vVmFsdWUoKSwgbnVs
bHB0ciwKKyAgICAgICAgICAgICAgICBtX291dC5ub25OdWxsKG1fb3V0LmxvYWRQdHIoYmFzZSwg
bV9oZWFwcy5EaXJlY3RBcmd1bWVudHNfb3ZlcnJpZGVzKSkpOworICAgICAgICAgICAgc3BlY3Vs
YXRlKAorICAgICAgICAgICAgICAgIEV4b3RpY09iamVjdE1vZGUsIG5vVmFsdWUoKSwgbnVsbHB0
ciwKKyAgICAgICAgICAgICAgICBtX291dC5hYm92ZU9yRXF1YWwoCisgICAgICAgICAgICAgICAg
ICAgIGluZGV4LAorICAgICAgICAgICAgICAgICAgICBtX291dC5sb2FkMzJOb25OZWdhdGl2ZShi
YXNlLCBtX2hlYXBzLkRpcmVjdEFyZ3VtZW50c19sZW5ndGgpKSk7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIHNldEpTVmFsdWUobV9vdXQubG9hZDY0KGJhc2VJbmRleChtX2hlYXBzLkRpcmVj
dEFyZ3VtZW50c19zdG9yYWdlLCBiYXNlLCBpbmRleCkpKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXJyYXk6OlNjb3BlZEFyZ3Vt
ZW50czogeworICAgICAgICAgICAgTFZhbHVlIGJhc2UgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQx
KCkpOworICAgICAgICAgICAgTFZhbHVlIGluZGV4ID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDIo
KSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIExWYWx1ZSB0YWJsZSA9IG1fb3V0LmxvYWRQ
dHIoYmFzZSwgbV9oZWFwcy5TY29wZWRBcmd1bWVudHNfdGFibGUpOworICAgICAgICAgICAgTFZh
bHVlIHNjb3BlID0gbV9vdXQubG9hZFB0cihiYXNlLCBtX2hlYXBzLlNjb3BlZEFyZ3VtZW50c19z
Y29wZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHNwZWN1bGF0ZSgKKyAgICAgICAgICAg
ICAgICBFeG90aWNPYmplY3RNb2RlLCBub1ZhbHVlKCksIG51bGxwdHIsCisgICAgICAgICAgICAg
ICAgbV9vdXQuYWJvdmVPckVxdWFsKAorICAgICAgICAgICAgICAgICAgICBpbmRleCwKKyAgICAg
ICAgICAgICAgICAgICAgbV9vdXQubG9hZDMyTm9uTmVnYXRpdmUoYmFzZSwgbV9oZWFwcy5TY29w
ZWRBcmd1bWVudHNUYWJsZV9sZW5ndGgpKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIExW
YWx1ZSBhcmd1bWVudHMgPSBtX291dC5sb2FkUHRyKGJhc2UsIG1faGVhcHMuU2NvcGVkQXJndW1l
bnRzVGFibGVfYXJndW1lbnRzKTsKKyAgICAgICAgICAgIExWYWx1ZSBzY29wZU9mZnNldCA9IG1f
b3V0LmxvYWQzMigKKyAgICAgICAgICAgICAgICBiYXNlSW5kZXgobV9oZWFwcy5zY29wZWRBcmd1
bWVudHNUYWJsZUFyZ3VtZW50cywgYXJndW1lbnRzLCBpbmRleCkpOworICAgICAgICAgICAgCisg
ICAgICAgICAgICBzcGVjdWxhdGUoCisgICAgICAgICAgICAgICAgRXhvdGljT2JqZWN0TW9kZSwg
bm9WYWx1ZSgpLCBudWxscHRyLAorICAgICAgICAgICAgICAgIG1fb3V0LmVxdWFsKHNjb3BlT2Zm
c2V0LCBtX291dC5jb25zdEludDMyKFNjb3BlT2Zmc2V0OjppbnZhbGlkT2Zmc2V0KSkpOworICAg
ICAgICAgICAgCisgICAgICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LmxvYWQ2NChiYXNlSW5kZXgo
CisgICAgICAgICAgICAgICAgbV9oZWFwcy5KU0Vudmlyb25tZW50UmVjb3JkX3ZhcmlhYmxlcywg
YmFzZSwgc2NvcGVPZmZzZXQpKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg
ICAgICAgICAgIAogICAgICAgICBjYXNlIEFycmF5OjpHZW5lcmljOiB7CiAgICAgICAgICAgICBz
ZXRKU1ZhbHVlKHZtQ2FsbCgKICAgICAgICAgICAgICAgICBtX291dC5vcGVyYXRpb24ob3BlcmF0
aW9uR2V0QnlWYWwpLCBtX2NhbGxGcmFtZSwKQEAgLTUwNzAsMTEgKzUxMzIsMTEgQEAgcHJpdmF0
ZToKICAgICAgICAgcmV0dXJuIGNhbGw7CiAgICAgfQogICAgIAotICAgIFR5cGVkUG9pbnRlciBi
YXNlSW5kZXgoSW5kZXhlZEFic3RyYWN0SGVhcCYgaGVhcCwgTFZhbHVlIHN0b3JhZ2UsIExWYWx1
ZSBpbmRleCwgRWRnZSBlZGdlKQorICAgIFR5cGVkUG9pbnRlciBiYXNlSW5kZXgoSW5kZXhlZEFi
c3RyYWN0SGVhcCYgaGVhcCwgTFZhbHVlIHN0b3JhZ2UsIExWYWx1ZSBpbmRleCwgRWRnZSBlZGdl
LCBwdHJkaWZmX3Qgb2Zmc2V0ID0gMCkKICAgICB7CiAgICAgICAgIHJldHVybiBtX291dC5iYXNl
SW5kZXgoCiAgICAgICAgICAgICBoZWFwLCBzdG9yYWdlLCBtX291dC56ZXJvRXh0KGluZGV4LCBt
X291dC5pbnRQdHIpLAotICAgICAgICAgICAgbV9zdGF0ZS5mb3JOb2RlKGVkZ2UpLm1fdmFsdWUp
OworICAgICAgICAgICAgbV9zdGF0ZS5mb3JOb2RlKGVkZ2UpLm1fdmFsdWUsIG9mZnNldCk7CiAg
ICAgfQogICAgIAogICAgIHZvaWQgY29tcGFyZSgKQEAgLTYzNDEsNiArNjQwMywxNiBAQCBwcml2
YXRlOgogICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkNvcnJ1cHQgYXJy
YXkgY2xhc3MiKTsKICAgICAgICAgfQogICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXJyYXk6
OkRpcmVjdEFyZ3VtZW50czoKKyAgICAgICAgICAgIHJldHVybiBtX291dC5lcXVhbCgKKyAgICAg
ICAgICAgICAgICBtX291dC5sb2FkOChjZWxsLCBtX2hlYXBzLkpTQ2VsbF90eXBlSW5mb1R5cGUp
LAorICAgICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50OChEaXJlY3RBcmd1bWVudHNUeXBlKSk7
CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBBcnJheTo6U2NvcGVkQXJndW1lbnRzOgorICAg
ICAgICAgICAgcmV0dXJuIG1fb3V0LmVxdWFsKAorICAgICAgICAgICAgICAgIG1fb3V0LmxvYWQ4
KGNlbGwsIG1faGVhcHMuSlNDZWxsX3R5cGVJbmZvVHlwZSksCisgICAgICAgICAgICAgICAgbV9v
dXQuY29uc3RJbnQ4KFNjb3BlZEFyZ3VtZW50c1R5cGUpKTsKKyAgICAgICAgICAgIAogICAgICAg
ICBkZWZhdWx0OgogICAgICAgICAgICAgcmV0dXJuIG1fb3V0LmVxdWFsKAogICAgICAgICAgICAg
ICAgIG1fb3V0LmxvYWQ4KGNlbGwsIG1faGVhcHMuSlNDZWxsX3R5cGVJbmZvVHlwZSksIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29weVRva2VuLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29weVRva2VuLmgJKHJldmlzaW9uIDE4MDg3NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcHlUb2tlbi5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0zMiw3ICszMiw3IEBAIGVudW0gQ29weVRva2VuIHsKICAgICBCdXR0ZXJmbHlDb3B5VG9rZW4s
CiAgICAgVHlwZWRBcnJheVZlY3RvckNvcHlUb2tlbiwKICAgICBNYXBCYWNraW5nU3RvcmVDb3B5
VG9rZW4sCi0gICAgQXJndW1lbnRzU2xvd0FyZ3VtZW50RGF0YUNvcHlUb2tlbgorICAgIERpcmVj
dEFyZ3VtZW50c092ZXJyaWRlc0NvcHlUb2tlbgogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHJldmlz
aW9uIDE4MDg3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTExMyw2ICsxMTMsMjYgQEAgcHVibGljOgogI2VuZGlmCiAg
ICAgfQogICAgIAorICAgIHZvaWQgbG9hZFZhbHVlKEJhc2VJbmRleCBhZGRyZXNzLCBKU1ZhbHVl
UmVncyByZWdzKQorICAgIHsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICBsb2FkNjQoYWRk
cmVzcywgcmVncy5ncHIoKSk7CisjZWxzZQorICAgICAgICBpZiAoYWRkcmVzcy5iYXNlID09IHJl
Z3MucGF5bG9hZEdQUigpIHx8IGFkZHJlc3MuaW5kZXggPT0gcmVncy5wYXlsb2FkR1BSKCkpIHsK
KyAgICAgICAgICAgIC8vIFdlIGFjdHVhbGx5IGNvdWxkIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSB0
aGUgcmVnaXN0ZXJzIGFyZSBhbGlhc2VkIHRvIGJvdGgKKyAgICAgICAgICAgIC8vIHRhZyBhbmQg
cGF5bG9hZCwgYnV0IHdlIGRvbid0IGZvciBub3cuCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VChhZGRyZXNzLmJhc2UgIT0gcmVncy50YWdHUFIoKSk7CisgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVChhZGRyZXNzLmluZGV4ICE9IHJlZ3MudGFnR1BSKCkpOworICAgICAgICAgICAgCisgICAg
ICAgICAgICBsb2FkMzIoYWRkcmVzcy53aXRoT2Zmc2V0KFRhZ09mZnNldCksIHJlZ3MudGFnR1BS
KCkpOworICAgICAgICAgICAgbG9hZDMyKGFkZHJlc3Mud2l0aE9mZnNldChQYXlsb2FkT2Zmc2V0
KSwgcmVncy5wYXlsb2FkR1BSKCkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbG9h
ZDMyKGFkZHJlc3Mud2l0aE9mZnNldChQYXlsb2FkT2Zmc2V0KSwgcmVncy5wYXlsb2FkR1BSKCkp
OworICAgICAgICAgICAgbG9hZDMyKGFkZHJlc3Mud2l0aE9mZnNldChUYWdPZmZzZXQpLCByZWcu
dGFnR1BSKCkpOworICAgICAgICB9CisjZW5kaWYKKyAgICB9CisgICAgCiAgICAgdm9pZCBtb3Zl
VHJ1c3RlZFZhbHVlKEpTVmFsdWUgdmFsdWUsIEpTVmFsdWVSZWdzIHJlZ3MpCiAgICAgewogI2lm
IFVTRShKU1ZBTFVFNjQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCShyZXZpc2lv
biAxODA4NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTIwMyw3ICsyMDMsOSBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFz
cygpCiAgICAgICAgIERFRklORV9PUChvcF9jcmVhdGVfdGhpcykKICAgICAgICAgREVGSU5FX09Q
KG9wX3RvX3RoaXMpCiAgICAgICAgIERFRklORV9PUChvcF9pbml0X2xhenlfcmVnKQotICAgICAg
ICBERUZJTkVfT1Aob3BfY3JlYXRlX2FyZ3VtZW50cykKKyAgICAgICAgREVGSU5FX09QKG9wX2Ny
ZWF0ZV9kaXJlY3RfYXJndW1lbnRzKQorICAgICAgICBERUZJTkVfT1Aob3BfY3JlYXRlX3Njb3Bl
ZF9hcmd1bWVudHMpCisgICAgICAgIERFRklORV9PUChvcF9jcmVhdGVfb3V0X29mX2JhbmRfYXJn
dW1lbnRzKQogICAgICAgICBERUZJTkVfT1Aob3BfZGVidWcpCiAgICAgICAgIERFRklORV9PUChv
cF9kZWxfYnlfaWQpCiAgICAgICAgIERFRklORV9PUChvcF9kaXYpCkBAIC0yOTksNiArMzAxLDgg
QEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogICAgICAgICBERUZJTkVfT1Ao
b3BfcmVzb2x2ZV9zY29wZSkKICAgICAgICAgREVGSU5FX09QKG9wX2dldF9mcm9tX3Njb3BlKQog
ICAgICAgICBERUZJTkVfT1Aob3BfcHV0X3RvX3Njb3BlKQorICAgICAgICBERUZJTkVfT1Aob3Bf
Z2V0X2Zyb21fYXJndW1lbnRzKQorICAgICAgICBERUZJTkVfT1Aob3BfcHV0X3RvX2FyZ3VtZW50
cykKIAogICAgICAgICBERUZJTkVfT1Aob3BfZ2V0X2VudW1lcmFibGVfbGVuZ3RoKQogICAgICAg
ICBERUZJTkVfT1Aob3BfaGFzX2dlbmVyaWNfcHJvcGVydHkpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklULmgJKHJldmlzaW9uIDE4MDg3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklULmgJKHdvcmtpbmcgY29weSkKQEAgLTM0Niw2ICszNDYsOCBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgSnVtcExpc3QgZW1pdERvdWJsZUdldEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hh
YmxlSnVtcCYgYmFkVHlwZSk7CiAgICAgICAgIEp1bXBMaXN0IGVtaXRDb250aWd1b3VzR2V0QnlW
YWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBJbmRleGluZ1R5cGUgZXhw
ZWN0ZWRTaGFwZSA9IENvbnRpZ3VvdXNTaGFwZSk7CiAgICAgICAgIEp1bXBMaXN0IGVtaXRBcnJh
eVN0b3JhZ2VHZXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUpOwor
ICAgICAgICBKdW1wTGlzdCBlbWl0RGlyZWN0QXJndW1lbnRzR2V0QnlWYWwoSW5zdHJ1Y3Rpb24q
LCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlKTsKKyAgICAgICAgSnVtcExpc3QgZW1pdFNjb3BlZEFy
Z3VtZW50c0dldEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSk7CiAg
ICAgICAgIEp1bXBMaXN0IGVtaXRJbnRUeXBlZEFycmF5R2V0QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQ
YXRjaGFibGVKdW1wJiBiYWRUeXBlLCBUeXBlZEFycmF5VHlwZSk7CiAgICAgICAgIEp1bXBMaXN0
IGVtaXRGbG9hdFR5cGVkQXJyYXlHZXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAm
IGJhZFR5cGUsIFR5cGVkQXJyYXlUeXBlKTsKICAgICAgICAgCkBAIC00NjksNyArNDcxLDkgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9nZXRfY2FsbGVlKEluc3RydWN0
aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9jcmVhdGVfdGhpcyhJbnN0cnVjdGlvbiopOwog
ICAgICAgICB2b2lkIGVtaXRfb3BfdG9fdGhpcyhJbnN0cnVjdGlvbiopOwotICAgICAgICB2b2lk
IGVtaXRfb3BfY3JlYXRlX2FyZ3VtZW50cyhJbnN0cnVjdGlvbiopOworICAgICAgICB2b2lkIGVt
aXRfb3BfY3JlYXRlX2RpcmVjdF9hcmd1bWVudHMoSW5zdHJ1Y3Rpb24qKTsKKyAgICAgICAgdm9p
ZCBlbWl0X29wX2NyZWF0ZV9zY29wZWRfYXJndW1lbnRzKEluc3RydWN0aW9uKik7CisgICAgICAg
IHZvaWQgZW1pdF9vcF9jcmVhdGVfb3V0X29mX2JhbmRfYXJndW1lbnRzKEluc3RydWN0aW9uKik7
CiAgICAgICAgIHZvaWQgZW1pdF9vcF9kZWJ1ZyhJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lk
IGVtaXRfb3BfZGVsX2J5X2lkKEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9k
aXYoSW5zdHJ1Y3Rpb24qKTsKQEAgLTYxOSw2ICs2MjMsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgdm9pZCBlbWl0X29wX3Jlc29sdmVfc2NvcGUoSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAg
dm9pZCBlbWl0X29wX2dldF9mcm9tX3Njb3BlKEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQg
ZW1pdF9vcF9wdXRfdG9fc2NvcGUoSW5zdHJ1Y3Rpb24qKTsKKyAgICAgICAgdm9pZCBlbWl0X29w
X2dldF9mcm9tX2FyZ3VtZW50cyhJbnN0cnVjdGlvbiopOworICAgICAgICB2b2lkIGVtaXRfb3Bf
cHV0X3RvX2FyZ3VtZW50cyhJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRTbG93X29w
X3Jlc29sdmVfc2NvcGUoSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUoSW5zdHJ1Y3Rp
b24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfcHV0X3RvX3Njb3BlKEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMu
Y3BwCShyZXZpc2lvbiAxODA4NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9w
Y29kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDI0LDYgKzE0MjQsMjQgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfcHJvZmlsZV9jb250cm9sX2Zsb3coSQogCiAjZW5kaWYgLy8gVVNFKEpTVkFMVUU2
NCkKIAordm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX2RpcmVjdF9hcmd1bWVudHMoSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhD
YWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX2NyZWF0ZV9kaXJlY3RfYXJn
dW1lbnRzKTsKKyAgICBzbG93UGF0aENhbGwuY2FsbCgpOworfQorCit2b2lkIEpJVDo6ZW1pdF9v
cF9jcmVhdGVfc2NvcGVkX2FyZ3VtZW50cyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQoreworICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3Ry
dWN0aW9uLCBzbG93X3BhdGhfY3JlYXRlX3Njb3BlZF9hcmd1bWVudHMpOworICAgIHNsb3dQYXRo
Q2FsbC5jYWxsKCk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV9vdXRfb2ZfYmFuZF9h
cmd1bWVudHMoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBKSVRTbG93
UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRo
X2NyZWF0ZV9vdXRfb2ZfYmFuZF9hcmd1bWVudHMpOworICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7
Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkocmV2aXNpb24g
MTgwODc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTMwLDcgKzUzMCw3IEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVy
YXRpb25QdXRCeVZhbChFeGUKICAgICAgICAgaWYgKGhhc09wdGltaXphYmxlSW5kZXhpbmcob2Jq
ZWN0LT5zdHJ1Y3R1cmUodm0pKSkgewogICAgICAgICAgICAgLy8gQXR0ZW1wdCB0byBvcHRpbWl6
ZS4KICAgICAgICAgICAgIEpJVEFycmF5TW9kZSBhcnJheU1vZGUgPSBqaXRBcnJheU1vZGVGb3JT
dHJ1Y3R1cmUob2JqZWN0LT5zdHJ1Y3R1cmUodm0pKTsKLSAgICAgICAgICAgIGlmIChhcnJheU1v
ZGUgIT0gYnlWYWxJbmZvLmFycmF5TW9kZSkgeworICAgICAgICAgICAgaWYgKGppdEFycmF5TW9k
ZVBlcm1pdHNQdXQoYXJyYXlNb2RlKSAmJiBhcnJheU1vZGUgIT0gYnlWYWxJbmZvLmFycmF5TW9k
ZSkgewogICAgICAgICAgICAgICAgIEpJVDo6Y29tcGlsZVB1dEJ5VmFsKCZ2bSwgZXhlYy0+Y29k
ZUJsb2NrKCksICZieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIoT1VSX1JFVFVSTl9BRERSRVNT
KSwgYXJyYXlNb2RlKTsKICAgICAgICAgICAgICAgICBkaWRPcHRpbWl6ZSA9IHRydWU7CiAgICAg
ICAgICAgICB9CkBAIC01NzUsNyArNTc1LDcgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
bkRpcmVjdFB1dEJ5VgogICAgICAgICBpZiAoaGFzT3B0aW1pemFibGVJbmRleGluZyhvYmplY3Qt
PnN0cnVjdHVyZSh2bSkpKSB7CiAgICAgICAgICAgICAvLyBBdHRlbXB0IHRvIG9wdGltaXplLgog
ICAgICAgICAgICAgSklUQXJyYXlNb2RlIGFycmF5TW9kZSA9IGppdEFycmF5TW9kZUZvclN0cnVj
dHVyZShvYmplY3QtPnN0cnVjdHVyZSh2bSkpOwotICAgICAgICAgICAgaWYgKGFycmF5TW9kZSAh
PSBieVZhbEluZm8uYXJyYXlNb2RlKSB7CisgICAgICAgICAgICBpZiAoaml0QXJyYXlNb2RlUGVy
bWl0c1B1dChhcnJheU1vZGUpICYmIGFycmF5TW9kZSAhPSBieVZhbEluZm8uYXJyYXlNb2RlKSB7
CiAgICAgICAgICAgICAgICAgSklUOjpjb21waWxlRGlyZWN0UHV0QnlWYWwoJnZtLCBjYWxsRnJh
bWUtPmNvZGVCbG9jaygpLCAmYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyKE9VUl9SRVRVUk5f
QUREUkVTUyksIGFycmF5TW9kZSk7CiAgICAgICAgICAgICAgICAgZGlkT3B0aW1pemUgPSB0cnVl
OwogICAgICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9w
ZXJ0eUFjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHJldmlzaW9uIDE4MDg3NSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NjQs
OCArNjY0LDcgQEAgdm9pZCBKSVQ6OmVtaXRHZXRHbG9iYWxWYXIodWludHB0cl90IG9wZQogdm9p
ZCBKSVQ6OmVtaXRHZXRDbG9zdXJlVmFyKGludCBzY29wZSwgdWludHB0cl90IG9wZXJhbmQpCiB7
CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgcmVnVDApOwotICAgIGxvYWRQdHIo
QWRkcmVzcyhyZWdUMCwgSlNFbnZpcm9ubWVudFJlY29yZDo6b2Zmc2V0T2ZSZWdpc3RlcnMoKSks
IHJlZ1QwKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIG9wZXJhbmQgKiBzaXplb2YoUmVn
aXN0ZXIpKSwgcmVnVDApOworICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNFbnZpcm9ubWVu
dFJlY29yZDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSArIG9wZXJhbmQgKiBzaXplb2YoUmVnaXN0ZXIp
KSwgcmVnVDApOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNzQ4LDkgKzc0Nyw4IEBAIHZvaWQgSklUOjpl
bWl0UHV0Q2xvc3VyZVZhcihpbnQgc2NvcGUsIHUKIHsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHZhbHVlLCByZWdUMSk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgcmVn
VDApOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNFbnZpcm9ubWVudFJlY29yZDo6b2Zm
c2V0T2ZSZWdpc3RlcnMoKSksIHJlZ1QwKTsKICAgICBlbWl0Tm90aWZ5V3JpdGUocmVnVDEsIHJl
Z1QyLCBzZXQpOwotICAgIHN0b3JlUHRyKHJlZ1QxLCBBZGRyZXNzKHJlZ1QwLCBvcGVyYW5kICog
c2l6ZW9mKFJlZ2lzdGVyKSkpOworICAgIHN0b3JlUHRyKHJlZ1QxLCBBZGRyZXNzKHJlZ1QwLCBK
U0Vudmlyb25tZW50UmVjb3JkOjpvZmZzZXRPZlZhcmlhYmxlcygpICsgb3BlcmFuZCAqIHNpemVv
ZihSZWdpc3RlcikpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC04MDUsNiArODAzLDI5IEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9wdXRfdG9fc2NvcGUoSW5zdHIKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvblB1dFRvU2NvcGUsIGN1cnJlbnRJbnN0cnVjdGlvbik7CiB9CiAKK3ZvaWQgSklUOjplbWl0
X29wX2dldF9mcm9tX2FyZ3VtZW50cyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQor
eworICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIGlu
dCBhcmd1bWVudHMgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworICAgIGludCBp
bmRleCA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CisgICAgCisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudHMsIHJlZ1QwKTsKKyAgICBsb2FkNjQoQWRkcmVzcyhy
ZWdUMCwgRGlyZWN0QXJndW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCkgKyBpbmRleCAqIHNpemVvZihX
cml0ZUJhcnJpZXI8VW5rbm93bj4pKSwgcmVnVDApOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Cit9CisKK3ZvaWQgSklUOjpl
bWl0X29wX3B1dF90b19hcmd1bWVudHMoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
K3sKKyAgICBpbnQgYXJndW1lbnRzID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsK
KyAgICBpbnQgaW5kZXggPSBjdXJyZW50SW5zdHVyY3Rpb25bMl0udS5vcGVyYW5kOworICAgIGlu
dCB2YWx1ZSA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CisgICAgCisgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudHMsIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHZhbHVlLCByZWdUMSk7CisgICAgc3RvcmU2NChyZWdUMSwgQWRkcmVzcyhyZWdU
MCwgRGlyZWN0QXJndW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCkgKyBpbmRleCAqIHNpemVvZihXcml0
ZUJhcnJpZXI8VW5rbm93bj4pKSk7Cit9CisKIHZvaWQgSklUOjplbWl0X29wX2luaXRfZ2xvYmFs
X2NvbnN0KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCA9IG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKTsKQEAgLTk1
MSw2ICs5NzIsMTIgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlWYWwoQnlWYWxJbgog
ICAgIGNhc2UgSklUQXJyYXlTdG9yYWdlOgogICAgICAgICBzbG93Q2FzZXMgPSBlbWl0QXJyYXlT
dG9yYWdlR2V0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlKTsKICAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBKSVREaXJlY3RBcmd1bWVudHM6CisgICAgICAgIHNsb3dDYXNlcyA9IGVt
aXREaXJlY3RBcmd1bWVudHNHZXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIEpJVFNjb3BlZEFyZ3VtZW50czoKKyAgICAgICAgc2xv
d0Nhc2VzID0gZW1pdERpcmVjdEFyZ3VtZW50c0dldEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwg
YmFkVHlwZSk7CisgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIFR5cGVkQXJy
YXlUeXBlIHR5cGUgPSB0eXBlZEFycmF5VHlwZUZvckpJVEFycmF5TW9kZShhcnJheU1vZGUpOwog
ICAgICAgICBpZiAoaXNJbnQodHlwZSkpCkBAIC0xMDQ2LDYgKzEwNzMsNjMgQEAgdm9pZCBKSVQ6
OnByaXZhdGVDb21waWxlUHV0QnlWYWwoQnlWYWxJbgogICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5r
Q2FsbGVyVG9GdW5jdGlvbihyZXR1cm5BZGRyZXNzLCBGdW5jdGlvblB0cihpc0RpcmVjdCA/IG9w
ZXJhdGlvbkRpcmVjdFB1dEJ5VmFsR2VuZXJpYyA6IG9wZXJhdGlvblB1dEJ5VmFsR2VuZXJpYykp
OwogfQogCitKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdERpcmVjdEFyZ3VtZW50c0dldEJ5VmFsKElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUpCit7
CisgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOworICAgIAorI2lmIFVTRShKU1ZBTFVFNjQpCisgICAg
UmVnaXN0ZXJJRCBiYXNlID0gcmVnVDA7CisgICAgUmVnaXN0ZXJJRCBwcm9wZXJ0eSA9IHJlZ1Qx
OworICAgIEpTVmFsdWVSZWdzIHJlc3VsdCA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICBSZWdp
c3RlcklEIHNjcmF0Y2ggPSByZWdUMzsKKyNlbHNlCisgICAgUmVnaXN0ZXJJRCBiYXNlID0gcmVn
VDA7CisgICAgUmVnaXN0ZXJJRCBwcm9wZXJ0eSA9IHJlZ1QyOworICAgIEpTVmFsdWVSZWdzIHJl
c3VsdCA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7CisgICAgUmVnaXN0ZXJJRCBzY3JhdGNo
ID0gcmVnVDM7CisjZW5kaWYKKworICAgIGxvYWQ4KEFkZHJlc3MoYmFzZSwgSlNDZWxsOjp0eXBl
SW5mb1R5cGVPZmZzZXQoKSksIHNjcmF0Y2gpOworICAgIGJhZFR5cGUgPSBwYXRjaGFibGVCcmFu
Y2gzMihOb3RFcXVhbCwgc2NyYXRjaCwgVHJ1c3RlZEltbTMyKERpcmVjdEFyZ3VtZW50c1R5cGUp
KTsKKyAgICAKKyAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcHJv
cGVydHksIEFkZHJlc3MoYmFzZSwgRGlyZWN0QXJndW1lbnRzOjpvZmZzZXRPZkxlbmd0aCgpKSkp
OworICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoVGVzdFB0cihOb25aZXJvLCBBZGRyZXNzKGJh
c2UsIERpcmVjdEFyZ3VtZW50czo6b2Zmc2V0T2ZPdmVycmlkZXMoKSkpKTsKKyAgICAKKyAgICB6
ZXJvRXh0ZW5kMzJUb1B0cihwcm9wZXJ0eSwgc2NyYXRjaCk7CisgICAgbG9hZFZhbHVlKEJhc2VJ
bmRleChiYXNlLCBzY3JhdGNoLCBUaW1lc0VpZ2h0LCBEaXJlY3RBcmd1bWVudHM6OnN0b3JhZ2VP
ZmZzZXQoKSksIHJlc3VsdCk7Cit9CisKK0pJVDo6SnVtcExpc3QgSklUOjplbWl0U2NvcGVkQXJn
dW1lbnRzR2V0QnlWYWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUGF0Y2hhYmxl
SnVtcCYgYmFkVHlwZSkKK3sKKyAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgCisjaWYgVVNF
KEpTVkFMVUU2NCkKKyAgICBSZWdpc3RlcklEIGJhc2UgPSByZWdUMDsKKyAgICBSZWdpc3RlcklE
IHByb3BlcnR5ID0gcmVnVDE7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0ID0gSlNWYWx1ZVJlZ3Mo
cmVnVDApOworICAgIFJlZ2lzdGVySUQgc2NyYXRjaCA9IHJlZ1QzOworICAgIFJlZ2lzdGVySUQg
c2NyYXRjaDIgPSByZWdUNDsKKyNlbHNlCisgICAgUmVnaXN0ZXJJRCBiYXNlID0gcmVnVDA7Cisg
ICAgUmVnaXN0ZXJJRCBwcm9wZXJ0eSA9IHJlZ1QyOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdCA9
IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7CisgICAgUmVnaXN0ZXJJRCBzY3JhdGNoID0gcmVn
VDM7CisgICAgUmVnaXN0ZXJJRCBzY2FydGNoMiA9IHJlZ1Q0OworI2VuZGlmCisKKyAgICBsb2Fk
OChBZGRyZXNzKGJhc2UsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBzY3JhdGNoKTsK
KyAgICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNoMzIoTm90RXF1YWwsIHNjcmF0Y2gsIFRydXN0
ZWRJbW0zMihEaXJlY3RBcmd1bWVudHNUeXBlKSk7CisgICAgCisgICAgbG9hZFB0cihBZGRyZXNz
KGJhc2UsIFNjb3BlZEFyZ3VtZW50czo6b2Zmc2V0T2ZUYWJsZSgpKSwgc2NyYXRjaCk7CisgICAg
bG9hZFB0cihBZGRyZXNzKGJhc2UsIFNjb3BlZEFyZ3VtZW50czo6b2Zmc2V0T2ZTY29wZSgpKSwg
c2NyYXRjaDIpOworICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCBw
cm9wZXJ0eSwgQWRkcmVzcyhzY3JhdGNoLCBTY29wZWRBcmd1bWVudHNUYWJsZTo6b2Zmc2V0T2ZM
ZW5ndGgoKSkpKTsKKyAgICBsb2FkUHRyKEFkZHJlc3Moc2NyYXRjaCwgU2NvcGVkQXJndW1lbnRz
VGFibGU6Om9mZnNldE9mQXJndW1lbnRzKCkpLCBzY3JhdGNoKTsKKyAgICBsb2FkMzIoQmFzZUlu
ZGV4KHNjcmF0Y2gsIHByb3BlcnR5LCBUaW1lc0ZvdXIpLCBzY3JhdGNoKTsKKyAgICBzbG93Q2Fz
ZXMuYXBwZW5kKGJyYW5jaDMyKEVxdWFsLCBzY3JhdGNoLCBUcnVzdGVkSW1tMzIoU2NvcGVPZmZz
ZXQ6OmludmFsaWRPZmZzZXQpKSk7CisgICAgCisgICAgbG9hZFZhbHVlKEJhc2VJbmRleChzY3Jh
dGNoMiwgc2NyYXRjaCwgVGltZXNFaWdodCwgSlNFbnZpcm9ubWVudFJlY29yZDo6b2Zmc2V0T2ZW
YXJpYWJsZXMoKSksIHJlc3VsdCk7Cit9CisKIEpJVDo6SnVtcExpc3QgSklUOjplbWl0SW50VHlw
ZWRBcnJheUdldEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgVHlw
ZWRBcnJheVR5cGUgdHlwZSkKIHsKICAgICBBU1NFUlQoaXNJbnQodHlwZSkpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCShyZXZpc2lv
biAxODA4NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDA0LDcgKzE0MDQsNyBAQCBMTElOVF9TTE9XX1BBVEhf
REVDTChzbG93X3BhdGhfcHV0X3RvX3NjCiAgICAgUmVzb2x2ZU1vZGVBbmRUeXBlIG1vZGVBbmRU
eXBlID0gUmVzb2x2ZU1vZGVBbmRUeXBlKHBjWzRdLnUub3BlcmFuZCk7CiAgICAgaWYgKG1vZGVB
bmRUeXBlLnR5cGUoKSA9PSBMb2NhbENsb3N1cmVWYXIpIHsKICAgICAgICAgSlNMZXhpY2FsRW52
aXJvbm1lbnQqIGVudmlyb25tZW50ID0ganNDYXN0PEpTTGV4aWNhbEVudmlyb25tZW50Kj4oc2Nv
cGUpOwotICAgICAgICBlbnZpcm9ubWVudC0+cmVnaXN0ZXJBdChwY1s2XS51Lm9wZXJhbmQpLnNl
dCh2bSwgZW52aXJvbm1lbnQsIHZhbHVlKTsKKyAgICAgICAgZW52aXJvbm1lbnQtPnZhcmlhYmxl
QXQoU2NvcGVPZmZzZXQocGNbNl0udS5vcGVyYW5kKSkuc2V0KHZtLCBlbnZpcm9ubWVudCwgdmFs
dWUpOwogICAgICAgICBpZiAoVmFyaWFibGVXYXRjaHBvaW50U2V0KiBzZXQgPSBwY1s1XS51Lndh
dGNocG9pbnRTZXQpCiAgICAgICAgICAgICBzZXQtPm5vdGlmeVdyaXRlKHZtLCB2YWx1ZSwgIkV4
ZWN1dGVkIG9wX3B1dF9zY29wZTxMb2NhbENsb3N1cmVWYXI+Iik7CiAgICAgICAgIExMSU5UX0VO
RCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0
ZXIzMl82NC5hc20KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xv
d0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20JKHJldmlzaW9uIDE4MDg3NSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCSh3b3JraW5n
IGNvcHkpCkBAIC0yMjE3LDEwICsyMjE3LDkgQEAgbWFjcm8gZ2V0R2xvYmFsVmFyKCkKIGVuZAog
CiBtYWNybyBnZXRDbG9zdXJlVmFyKCkKLSAgICBsb2FkcCBKU0Vudmlyb25tZW50UmVjb3JkOjpt
X3JlZ2lzdGVyc1t0MF0sIHQwCiAgICAgbG9hZGlzRnJvbUluc3RydWN0aW9uKDYsIHQzKQotICAg
IGxvYWRwIFRhZ09mZnNldFt0MCwgdDMsIDhdLCB0MQotICAgIGxvYWRwIFBheWxvYWRPZmZzZXRb
dDAsIHQzLCA4XSwgdDIKKyAgICBsb2FkcCBKU0Vudmlyb25tZW50UmVjb3JkX3ZhcmlhYmxlcyAr
IFRhZ09mZnNldFt0MCwgdDMsIDhdLCB0MQorICAgIGxvYWRwIEpTRW52aXJvbm1lbnRSZWNvcmRf
dmFyaWFibGVzICsgUGF5bG9hZE9mZnNldFt0MCwgdDMsIDhdLCB0MgogICAgIHZhbHVlUHJvZmls
ZSh0MSwgdDIsIDI4LCB0MCkKICAgICBsb2FkaXNGcm9tSW5zdHJ1Y3Rpb24oMSwgdDApCiAgICAg
c3RvcmVpIHQxLCBUYWdPZmZzZXRbY2ZyLCB0MCwgOF0KQEAgLTIyOTQsMTAgKzIyOTMsOSBAQCBl
bmQKIG1hY3JvIHB1dENsb3N1cmVWYXIoKQogICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlvbigzLCB0
MSkKICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHQxLCB0MiwgdDMpCi0gICAgbG9hZHAgSlNF
bnZpcm9ubWVudFJlY29yZDo6bV9yZWdpc3RlcnNbdDBdLCB0MAogICAgIGxvYWRpc0Zyb21JbnN0
cnVjdGlvbig2LCB0MSkKLSAgICBzdG9yZWkgdDIsIFRhZ09mZnNldFt0MCwgdDEsIDhdCi0gICAg
c3RvcmVpIHQzLCBQYXlsb2FkT2Zmc2V0W3QwLCB0MSwgOF0KKyAgICBzdG9yZWkgdDIsIEpTRW52
aXJvbm1lbnRSZWNvcmRfdmFyaWFibGVzICsgVGFnT2Zmc2V0W3QwLCB0MSwgOF0KKyAgICBzdG9y
ZWkgdDMsIEpTRW52aXJvbm1lbnRSZWNvcmRfdmFyaWFibGVzICsgUGF5bG9hZE9mZnNldFt0MCwg
dDEsIDhdCiBlbmQKIAogbWFjcm8gcHV0TG9jYWxDbG9zdXJlVmFyKCkKQEAgLTIzMDcsMTAgKzIz
MDUsOSBAQCBtYWNybyBwdXRMb2NhbENsb3N1cmVWYXIoKQogICAgIGJ0cHogdDQsIC5ub1Zhcmlh
YmxlV2F0Y2hwb2ludFNldAogICAgIG5vdGlmeVdyaXRlKHQ0LCB0MiwgdDMsIHQxLCAucER5bmFt
aWMpCiAubm9WYXJpYWJsZVdhdGNocG9pbnRTZXQ6Ci0gICAgbG9hZHAgSlNFbnZpcm9ubWVudFJl
Y29yZDo6bV9yZWdpc3RlcnNbdDBdLCB0MAogICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlvbig2LCB0
MSkKLSAgICBzdG9yZWkgdDIsIFRhZ09mZnNldFt0MCwgdDEsIDhdCi0gICAgc3RvcmVpIHQzLCBQ
YXlsb2FkT2Zmc2V0W3QwLCB0MSwgOF0KKyAgICBzdG9yZWkgdDIsIEpTRW52aXJvbm1lbnRSZWNv
cmRfdmFyaWFibGVzICsgVGFnT2Zmc2V0W3QwLCB0MSwgOF0KKyAgICBzdG9yZWkgdDMsIEpTRW52
aXJvbm1lbnRSZWNvcmRfdmFyaWFibGVzICsgUGF5bG9hZE9mZnNldFt0MCwgdDEsIDhdCiBlbmQK
IAogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRl
cjY0LmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2
ZWxJbnRlcnByZXRlcjY0LmFzbQkocmV2aXNpb24gMTgwODc1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHdvcmtpbmcgY29weSkKQEAg
LTYyMywxMyArNjIzLDYgQEAgX2xsaW50X29wX2dldF9zY29wZToKICAgICBkaXNwYXRjaCgyKQog
CiAKLV9sbGludF9vcF9pbml0X2xhenlfcmVnOgotICAgIHRyYWNlRXhlY3V0aW9uKCkKLSAgICBs
b2FkaXNGcm9tSW5zdHJ1Y3Rpb24oMSwgdDApCi0gICAgc3RvcmVxIFZhbHVlRW1wdHksIFtjZnIs
IHQwLCA4XQotICAgIGRpc3BhdGNoKDIpCi0KLQogX2xsaW50X29wX2NyZWF0ZV9hcmd1bWVudHM6
CiAgICAgdHJhY2VFeGVjdXRpb24oKQogICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlvbigxLCB0MCkK
QEAgLTEzMTYsMjIgKzEzMDksNiBAQCBfbGxpbnRfb3BfZ2V0X2FycmF5X2xlbmd0aDoKICAgICBk
aXNwYXRjaCg5KQogCiAKLV9sbGludF9vcF9nZXRfYXJndW1lbnRzX2xlbmd0aDoKLSAgICB0cmFj
ZUV4ZWN1dGlvbigpCi0gICAgbG9hZGlzRnJvbUluc3RydWN0aW9uKDIsIHQwKQotICAgIGxvYWRp
c0Zyb21JbnN0cnVjdGlvbigxLCB0MSkKLSAgICBidHFueiBbY2ZyLCB0MCwgOF0sIC5vcEdldEFy
Z3VtZW50c0xlbmd0aFNsb3cKLSAgICBsb2FkaSBBcmd1bWVudENvdW50ICsgUGF5bG9hZE9mZnNl
dFtjZnJdLCB0MgotICAgIHN1YmkgMSwgdDIKLSAgICBvcnEgdGFnVHlwZU51bWJlciwgdDIKLSAg
ICBzdG9yZXEgdDIsIFtjZnIsIHQxLCA4XQotICAgIGRpc3BhdGNoKDQpCi0KLS5vcEdldEFyZ3Vt
ZW50c0xlbmd0aFNsb3c6Ci0gICAgY2FsbFNsb3dQYXRoKF9sbGludF9zbG93X3BhdGhfZ2V0X2Fy
Z3VtZW50c19sZW5ndGgpCi0gICAgZGlzcGF0Y2goNCkKLQotCiBtYWNybyBwdXRCeUlkKGdldFBy
b3BlcnR5U3RvcmFnZSkKICAgICB0cmFjZUV4ZWN1dGlvbigpCiAgICAgd3JpdGVCYXJyaWVyT25P
cGVyYW5kcygxLCAzKQpAQCAtMTQ3OCwzMCArMTQ1NSw2IEBAIF9sbGludF9vcF9nZXRfYnlfdmFs
OgogICAgIGRpc3BhdGNoKDYpCiAKIAotX2xsaW50X29wX2dldF9hcmd1bWVudF9ieV92YWw6Ci0g
ICAgIyBGSVhNRTogQXQgc29tZSBwb2ludCB3ZSBzaG91bGQgYXJyYXkgcHJvZmlsZSB0aGlzLiBS
aWdodCBub3cgaXQgaXNuJ3QgbmVjZXNzYXJ5Ci0gICAgIyBzaW5jZSB0aGUgREZHIHdpbGwgbmV2
ZXIgdHVybiBhIGdldF9hcmd1bWVudF9ieV92YWwgaW50byBhIEdldEJ5VmFsLgotICAgIHRyYWNl
RXhlY3V0aW9uKCkKLSAgICBsb2FkaXNGcm9tSW5zdHJ1Y3Rpb24oMiwgdDApCi0gICAgbG9hZGlz
RnJvbUluc3RydWN0aW9uKDMsIHQxKQotICAgIGJ0cW56IFtjZnIsIHQwLCA4XSwgLm9wR2V0QXJn
dW1lbnRCeVZhbFNsb3cKLSAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlSW50MzIodDEsIHQyLCAu
b3BHZXRBcmd1bWVudEJ5VmFsU2xvdykKLSAgICBsb2FkaSBBcmd1bWVudENvdW50ICsgUGF5bG9h
ZE9mZnNldFtjZnJdLCB0MQotICAgIHN4aTJxIHQyLCB0MgotICAgIHN1YmkgMSwgdDEKLSAgICBi
aWFlcSB0MiwgdDEsIC5vcEdldEFyZ3VtZW50QnlWYWxTbG93Ci0gICAgbG9hZGlzRnJvbUluc3Ry
dWN0aW9uKDEsIHQzKQotICAgIGxvYWRwRnJvbUluc3RydWN0aW9uKDYsIHQxKQotICAgIGxvYWRx
IEZpcnN0QXJndW1lbnRPZmZzZXRbY2ZyLCB0MiwgOF0sIHQwCi0gICAgc3RvcmVxIHQwLCBbY2Zy
LCB0MywgOF0KLSAgICB2YWx1ZVByb2ZpbGUodDAsIDYsIHQxKQotICAgIGRpc3BhdGNoKDcpCi0K
LS5vcEdldEFyZ3VtZW50QnlWYWxTbG93OgotICAgIGNhbGxTbG93UGF0aChfbGxpbnRfc2xvd19w
YXRoX2dldF9hcmd1bWVudF9ieV92YWwpCi0gICAgZGlzcGF0Y2goNykKLQotCiBtYWNybyBjb250
aWd1b3VzUHV0QnlWYWwoc3RvcmVDYWxsYmFjaykKICAgICBiaWFlcSB0MywgLXNpemVvZiBJbmRl
eGluZ0hlYWRlciArIEluZGV4aW5nSGVhZGVyOjp1Lmxlbmd0aHMucHVibGljTGVuZ3RoW3QwXSwg
Lm91dE9mQm91bmRzCiAuc3RvcmVSZXN1bHQ6CkBAIC0xNzgzLDE3ICsxNzM2LDYgQEAgX2xsaW50
X29wX3N3aXRjaF9jaGFyOgogICAgIGRpc3BhdGNoKDApCiAKIAotX2xsaW50X29wX25ld19mdW5j
OgotICAgIHRyYWNlRXhlY3V0aW9uKCkKLSAgICBsb2FkaXNGcm9tSW5zdHJ1Y3Rpb24oNCwgdDIp
Ci0gICAgYnRpeiB0MiwgLm9wTmV3RnVuY1VuY2hlY2tlZAotICAgIGxvYWRpc0Zyb21JbnN0cnVj
dGlvbigxLCB0MSkKLSAgICBidHFueiBbY2ZyLCB0MSwgOF0sIC5vcE5ld0Z1bmNEb25lCi0ub3BO
ZXdGdW5jVW5jaGVja2VkOgotICAgIGNhbGxTbG93UGF0aChfbGxpbnRfc2xvd19wYXRoX25ld19m
dW5jKQotLm9wTmV3RnVuY0RvbmU6Ci0gICAgZGlzcGF0Y2goNSkKLQogbWFjcm8gYXJyYXlQcm9m
aWxlRm9yQ2FsbCgpCiAgICAgbG9hZGlzRnJvbUluc3RydWN0aW9uKDQsIHQzKQogICAgIG5lZ3Ag
dDMKQEAgLTIwODIsOSArMjAyNCw4IEBAIG1hY3JvIGdldEdsb2JhbFZhcigpCiBlbmQKIAogbWFj
cm8gZ2V0Q2xvc3VyZVZhcigpCi0gICAgbG9hZHAgSlNFbnZpcm9ubWVudFJlY29yZDo6bV9yZWdp
c3RlcnNbdDBdLCB0MAogICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlvbig2LCB0MSkKLSAgICBsb2Fk
cSBbdDAsIHQxLCA4XSwgdDAKKyAgICBsb2FkcSBKU0Vudmlyb25tZW50UmVjb3JkX3ZhcmlhYmxl
c1t0MCwgdDEsIDhdLCB0MAogICAgIHZhbHVlUHJvZmlsZSh0MCwgNywgdDEpCiAgICAgbG9hZGlz
RnJvbUluc3RydWN0aW9uKDEsIHQxKQogICAgIHN0b3JlcSB0MCwgW2NmciwgdDEsIDhdCkBAIC0y
MTU2LDkgKzIwOTcsOCBAQCBlbmQKIG1hY3JvIHB1dENsb3N1cmVWYXIoKQogICAgIGxvYWRpc0Zy
b21JbnN0cnVjdGlvbigzLCB0MSkKICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHQxLCB0MikK
LSAgICBsb2FkcCBKU0Vudmlyb25tZW50UmVjb3JkOjptX3JlZ2lzdGVyc1t0MF0sIHQwCiAgICAg
bG9hZGlzRnJvbUluc3RydWN0aW9uKDYsIHQxKQotICAgIHN0b3JlcSB0MiwgW3QwLCB0MSwgOF0K
KyAgICBzdG9yZXEgdDIsIEpTRW52aXJvbm1lbnRSZWNvcmRfdmFyaWFibGVzW3QwLCB0MSwgOF0K
IGVuZAogCiBtYWNybyBwdXRMb2NhbENsb3N1cmVWYXIoKQpAQCAtMjE2OCw5ICsyMTA4LDggQEAg
bWFjcm8gcHV0TG9jYWxDbG9zdXJlVmFyKCkKICAgICBidHB6IHQzLCAubm9WYXJpYWJsZVdhdGNo
cG9pbnRTZXQKICAgICBub3RpZnlXcml0ZSh0MywgdDIsIHQxLCAucER5bmFtaWMpCiAubm9WYXJp
YWJsZVdhdGNocG9pbnRTZXQ6Ci0gICAgbG9hZHAgSlNFbnZpcm9ubWVudFJlY29yZDo6bV9yZWdp
c3RlcnNbdDBdLCB0MAogICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlvbig2LCB0MSkKLSAgICBzdG9y
ZXEgdDIsIFt0MCwgdDEsIDhdCisgICAgc3RvcmVxIHQyLCBKU0Vudmlyb25tZW50UmVjb3JkX3Zh
cmlhYmxlc1t0MCwgdDEsIDhdCiBlbmQKIAogCkBAIC0yMjMyLDYgKzIxNzEsMjcgQEAgX2xsaW50
X29wX3B1dF90b19zY29wZToKICAgICBjYWxsU2xvd1BhdGgoX2xsaW50X3Nsb3dfcGF0aF9wdXRf
dG9fc2NvcGUpCiAgICAgZGlzcGF0Y2goNykKIAorCitfbGxpbnRfb3BfZ2V0X2Zyb21fYXJndW1l
bnRzOgorICAgIHRyYWNlRXhlY3V0aW9uKCkKKyAgICBsb2FkVmFyaWFibGUoMiwgdDApCisgICAg
bG9hZGkgMjRbUEIsIFBDLCA4XSwgdDEKKyAgICBsb2FkcSBEaXJlY3RBcmd1bWVudHNfc3RvcmFn
ZVt0MCwgdDEsIDhdLCB0MAorICAgIHZhbHVlUHJvZmlsZSh0MCwgNCwgdDEpCisgICAgbG9hZGlz
RnJvbUluc3RydWN0aW9uKDEsIHQxKQorICAgIHN0b3JlcSB0MCwgW2NmciwgdDEsIDhdCisgICAg
ZGlzcGF0Y2goNSkKKworCitfbGxpbnRfb3BfcHV0X3RvX2FyZ3VtZW50czoKKyAgICB0cmFjZUV4
ZWN1dGlvbigpCisgICAgbG9hZFZhcmlhYmxlKDEsIHQwKQorICAgIGxvYWRpIDE2W1BCLCBQQywg
OF0sIHQxCisgICAgbG9hZFZhcmlhYmxlKDMsIHQyKQorICAgIHN0b3JlcSB0MiwgW3QwLCB0MSwg
OF0KKyAgICBkaXNwYXRjaCg0KQorCisKIF9sbGludF9vcF9wcm9maWxlX3R5cGU6CiAgICAgdHJh
Y2VFeGVjdXRpb24oKQogICAgIGxvYWRwIENvZGVCbG9ja1tjZnJdLCB0MQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQko
cmV2aXNpb24gMTgwODc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVs
SW50ZXJwcmV0ZXIuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC00Miw2ICs0Miw5IEBAIGVsc2UKIGVu
ZAogY29uc3QgU2xvdFNpemUgPSA4CiAKK2NvbnN0IEpTRW52aXJvbm1lbnRSZWNvcmRfdmFyaWFi
bGVzID0gKHNpemVvZiBKU0Vudmlyb25tZW50UmVjb3JkICsgU2xvdFNpemUgLSAxKSAmIH5TbG90
U2l6ZQorY29uc3QgRGlyZWN0QXJndW1lbnRzX3N0b3JhZ2UgPSAoc2l6ZW9mIERpcmVjdEFyZ3Vt
ZW50cyArIFNsb3RTaXplIC0gMSkgJiB+U2xvdFNpemUKKwogY29uc3QgU3RhY2tBbGlnbm1lbnQg
PSAxNgogY29uc3QgU3RhY2tBbGlnbm1lbnRNYXNrID0gU3RhY2tBbGlnbm1lbnQgLSAxCiAKQEAg
LTkyMyw2ICs5MjYsMzAgQEAgX2xsaW50X29wX3RvdWNoX2VudHJ5OgogICAgIGRpc3BhdGNoKDEp
CiAKIAorX2xsaW50X29wX2NyZWF0ZV9kaXJlY3RfYXJndW1lbnRzOgorICAgIHRyYWNlRXhlY3V0
aW9uKCkKKyAgICBjYWxsU2xvd1BhdGgoX3Nsb3dfcGF0aF9jcmVhdGVfZGlyZWN0X2FyZ3VtZW50
cykKKyAgICBkaXNwYXRjaCgyKQorCisKK19sbGludF9vcF9jcmVhdGVfc2NvcGVkX2FyZ3VtZW50
czoKKyAgICB0cmFjZUV4ZWN1dGlvbigpCisgICAgY2FsbFNsb3dQYXRoKF9zbG93X3BhdGhfY3Jl
YXRlX3Njb3BlZF9hcmd1bWVudHMpCisgICAgZGlzcGF0Y2goMykKKworCitfbGxpbnRfb3BfY3Jl
YXRlX291dF9vZl9iYW5kX2FyZ3VtZW50czoKKyAgICB0cmFjZUV4ZWN1dGlvbigpCisgICAgY2Fs
bFNsb3dQYXRoKF9zbG93X3BhdGhfY3JlYXRlX291dF9vZl9iYW5kX2FyZ3VtZW50cykKKyAgICBk
aXNwYXRjaCgyKQorCisKK19sbGludF9vcF9uZXdfZnVuYzoKKyAgICB0cmFjZUV4ZWN1dGlvbigp
CisgICAgY2FsbFNsb3dQYXRoKF9sbGludF9zbG93X3BhdGhfbmV3X2Z1bmMpCisgICAgZGlzcGF0
Y2goNCkKKworCiBfbGxpbnRfb3BfbmV3X2FycmF5OgogICAgIHRyYWNlRXhlY3V0aW9uKCkKICAg
ICBjYWxsU2xvd1BhdGgoX2xsaW50X3Nsb3dfcGF0aF9uZXdfYXJyYXkpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5oCShyZXZpc2lvbiAxODA4NzUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0NTQsNyArMTQ1
NCw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBib29sIGhhc0NhcHR1cmVkVmFyaWFibGVz
KCkgY29uc3QgeyByZXR1cm4gISFtX2NhcHR1cmVkVmFyaWFibGVzLnNpemUoKTsgfQogICAgICAg
ICBzaXplX3QgY2FwdHVyZWRWYXJpYWJsZUNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9jYXB0dXJl
ZFZhcmlhYmxlcy5zaXplKCk7IH0KICAgICAgICAgY29uc3QgSWRlbnRpZmllclNldCYgY2FwdHVy
ZWRWYXJpYWJsZXMoKSBjb25zdCB7IHJldHVybiBtX2NhcHR1cmVkVmFyaWFibGVzOyB9Ci0gICAg
ICAgIGJvb2wgY2FwdHVyZXMoY29uc3QgSWRlbnRpZmllciYgaWRlbnQpIHsgcmV0dXJuIG1fY2Fw
dHVyZWRWYXJpYWJsZXMuY29udGFpbnMoaWRlbnQuaW1wbCgpKTsgfQorICAgICAgICBib29sIGNh
cHR1cmVzKFN0cmluZ0ltcGwqIHVpZCkgeyByZXR1cm4gbV9jYXB0dXJlZFZhcmlhYmxlcy5jb250
YWlucyh1aWQpOyB9CisgICAgICAgIGJvb2wgY2FwdHVyZXMoY29uc3QgSWRlbnRpZmllciYgaWRl
bnQpIHsgcmV0dXJuIGNhcHR1cmVzKGlkZW50LmltcGwoKSk7IH0KIAogICAgICAgICBWYXJTdGFj
ayYgdmFyU3RhY2soKSB7IHJldHVybiBtX3ZhclN0YWNrOyB9CiAgICAgICAgIEZ1bmN0aW9uU3Rh
Y2smIGZ1bmN0aW9uU3RhY2soKSB7IHJldHVybiBtX2Z1bmN0aW9uU3RhY2s7IH0KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ3VtZW50c01vZGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Bcmd1bWVudHNNb2RlLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Bcmd1bWVudHNNb2RlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwzOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFyZ3VtZW50c01vZGVfaAorI2RlZmluZSBBcmd1
bWVudHNNb2RlX2gKKworbmFtZXNwYWNlIEpTQyB7CisKK2VudW0gQXJndW1lbnRzTW9kZSB7Cisg
ICAgQ2xvbmVkQXJndW1lbnRzQ3JlYXRpb25Nb2RlLAorICAgIEZha2VBcmd1bWVudFZhbHVlc0Ny
ZWF0aW9uTW9kZQorfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBBcmd1bWVu
dHNNb2RlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FwdHVyZWRB
cmd1bWVudHNPZmZzZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0NhcHR1cmVkQXJndW1lbnRzT2Zmc2V0LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhcHR1cmVkQXJndW1lbnRzT2Zmc2V0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDQyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDYXB0dXJl
ZEFyZ3VtZW50c09mZnNldC5oIgorCituYW1lc3BhY2UgSlNDIHsKKwordm9pZCBDYXB0dXJlZEFy
Z3VtZW50c09mZnNldDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIGlmICgh
KnRoaXMpIHsKKyAgICAgICAgb3V0LnByaW50KCJjYXB0dXJlZEFyZ3VtZW50SW52YWxpZCIpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgb3V0LnByaW50KCJjYXB0dXJlZEFyZ3VtZW50
Iiwgb2Zmc2V0KCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FwdHVyZWRBcmd1bWVudHNPZmZzZXQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYXB0dXJlZEFyZ3VtZW50c09mZnNl
dC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FwdHVy
ZWRBcmd1bWVudHNPZmZzZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUzIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQ2FwdHVy
ZWRBcmd1bWVudHNPZmZzZXRfaAorI2RlZmluZSBDYXB0dXJlZEFyZ3VtZW50c09mZnNldF9oCisK
KyNpbmNsdWRlICJHZW5lcmljT2Zmc2V0LmgiCisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+
CisKK25hbWVzcGFjZSBKU0MgeworCisvLyBUaGlzIGlzIGFuIG9mZnNldCBpbnRvIHRoZSBzcGVj
aWFsIGFyZ3VtZW50cyBvYmplY3QsIHdoaWNoIGNhcHR1cmVzIHRoZSBhcmd1bWVudHMgdG8gYQor
Ly8gZnVuY3Rpb24uIEl0IG9ubHkgY29tZXMgaW50byBwbGF5IGl0IHRoZSBhcmd1bWVudHMgYXJl
bid0IGFsc28gbGlmdGVkIGludG8gdGhlIGFjdGl2YXRpb24uCisvLyBJZiB0aGV5IHdlcmUgdGhl
biBhY2Nlc3NlcyB0byB0aGUgYXJndW1lbnRzIHdvdWxkIHJlc29sdmUgdG8gYSBTY29wZU9mZnNl
dCBhbmQgbm90IGEKKy8vIENhcHR1cmVkQXJndW1lbnRzT2Zmc2V0LgorY2xhc3MgQ2FwdHVyZWRB
cmd1bWVudHNPZmZzZXQgOiBwdWJsaWMgR2VuZXJpY09mZnNldDxDYXB0dXJlZEFyZ3VtZW50c09m
ZnNldD4geworcHVibGljOgorICAgIENhcHR1cmVkQXJndW1lbnRzT2Zmc2V0KCkgeyB9CisgICAg
CisgICAgZXhwbGljaXQgQ2FwdHVyZWRBcmd1bWVudHNPZmZzZXQodW5zaWduZWQgb2Zmc2V0KQor
ICAgICAgICA6IEdlbmVyaWNPZmZzZXQob2Zmc2V0KQorICAgIHsKKyAgICB9CisgICAgCisgICAg
dm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MK
KworI2VuZGlmIC8vIENhcHR1cmVkQXJndW1lbnRzT2Zmc2V0X2gKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCShyZXZpc2lv
biAxODA4NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0
aHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMSwgMjAxMiwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTIxOCwxNyArMjE4LDI0IEBA
IFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9nZXRfY2FsbGVlKQogICAgIFJFVFVSTihjYWxsZWUp
OwogfQogCi1TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfY3JlYXRlX2FyZ3VtZW50cykKK1NMT1df
UEFUSF9ERUNMKHNsb3dfcGF0aF9jcmVhdGVfZGlyZWN0X2FyZ3VtZW50cykKIHsKICAgICBCRUdJ
TigpOwotICAgIGludCBsZXhpY2FsRW52aXJvbm1lbnRSZWcgPSBwY1syXS51Lm9wZXJhbmQ7Ci0g
ICAgSlNMZXhpY2FsRW52aXJvbm1lbnQqIGxleGljYWxFbnZpcm9ubWVudCA9IFZpcnR1YWxSZWdp
c3RlcihsZXhpY2FsRW52aXJvbm1lbnRSZWcpLmlzVmFsaWQoKSA/Ci0gICAgICAgIGV4ZWMtPnVu
Y2hlY2tlZFIobGV4aWNhbEVudmlyb25tZW50UmVnKS5sZXhpY2FsRW52aXJvbm1lbnQoKSA6IG51
bGxwdHI7Ci0gICAgSlNWYWx1ZSBhcmd1bWVudHMgPSBKU1ZhbHVlKEFyZ3VtZW50czo6Y3JlYXRl
KHZtLCBleGVjLCBsZXhpY2FsRW52aXJvbm1lbnQpKTsKLSAgICBDSEVDS19FWENFUFRJT04oKTsK
LSAgICBleGVjLT51bmNoZWNrZWRSKHBjWzFdLnUub3BlcmFuZCkgPSBhcmd1bWVudHM7Ci0gICAg
ZXhlYy0+dW5jaGVja2VkUih1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIoVmlydHVhbFJlZ2lz
dGVyKHBjWzFdLnUub3BlcmFuZCkpLm9mZnNldCgpKSA9IGFyZ3VtZW50czsKLSAgICBFTkQoKTsK
KyAgICBSRVRVUk4oRGlyZWN0QXJndW1lbnRzOjpjcmVhdGVCeUNvcHlpbmcodm0sIGV4ZWMpKTsK
K30KKworU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2NyZWF0ZV9zY29wZWRfYXJndW1lbnRzKQor
eworICAgIEJFR0lOKCk7CisgICAgSlNMZXhpY2FsRW52aXJvbm1lbnQqIHNjb3BlID0ganNDYXN0
PEpTTGV4aWNhbEVudmlyb25tZW50Kj4oT1AoMikuanNWYWx1ZSgpKTsKKyAgICBTY29wZWRBcmd1
bWVudHNUYWJsZSogdGFibGUgPSBleGVjLT5jb2RlQmxvY2soKS0+c3ltYm9sVGFibGUoKS0+YXJn
dW1lbnRzKCk7CisgICAgUkVUVVJOKFNjb3BlZEFyZ3VtZW50czo6Y3JlYXRlQnlDb3B5aW5nKGV4
ZWMsIHRhYmxlLCBzY29wZSkpOworfQorCitTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfY3JlYXRl
X291dF9vZl9iYW5kX2FyZ3VtZW50cykKK3sKKyAgICBCRUdJTigpOworICAgIFJFVFVSTihPdXRP
ZkJhbmRBcmd1bWVudHM6OmNyZWF0ZVdpdGhNYWNoaW5lRnJhbWUoZXhlYywgZXhlYywgQ2xvbmVk
QXJndW1lbnRzQ3JlYXRpb25Nb2RlKSk7CiB9CiAKIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9j
cmVhdGVfdGhpcykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNs
b3dQYXRocy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nv
bW1vblNsb3dQYXRocy5oCShyZXZpc2lvbiAxODA4NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTMsIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0xODIsNyArMTgyLDkgQEAgU0xPV19QQVRIX0RFQ0wobmFtZSkgV1RGX0lOVEVSTkFMCiBT
TE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX2NhbGxfYXJpdHlDaGVjayk7CiBTTE9XX1BB
VEhfSElEREVOX0RFQ0woc2xvd19wYXRoX2NvbnN0cnVjdF9hcml0eUNoZWNrKTsKIFNMT1dfUEFU
SF9ISURERU5fREVDTChzbG93X3BhdGhfdG91Y2hfZW50cnkpOwotU0xPV19QQVRIX0hJRERFTl9E
RUNMKHNsb3dfcGF0aF9jcmVhdGVfYXJndW1lbnRzKTsKK1NMT1dfUEFUSF9ISURERU5fREVDTChz
bG93X3BhdGhfY3JlYXRlX2RpcmVjdF9hcmd1bWVudHMpOworU0xPV19QQVRIX0hJRERFTl9ERUNM
KHNsb3dfcGF0aF9jcmVhdGVfc2NvcGVkX2FyZ3VtZW50cyk7CitTTE9XX1BBVEhfSElEREVOX0RF
Q0woc2xvd19wYXRoX2NyZWF0ZV9vdXRfb2ZfYmFuZF9hcmd1bWVudHMpOwogU0xPV19QQVRIX0hJ
RERFTl9ERUNMKHNsb3dfcGF0aF9jcmVhdGVfdGhpcyk7CiBTTE9XX1BBVEhfSElEREVOX0RFQ0wo
c2xvd19wYXRoX2VudGVyKTsKIFNMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfZ2V0X2Nh
bGxlZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVu
dHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVj
dEFyZ3VtZW50cy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9EaXJlY3RBcmd1bWVudHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQ3IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJEaXJlY3RBcmd1bWVudHMuaCIKKworI2luY2x1ZGUgIkdl
bmVyaWNBcmd1bWVudHNJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNBcmd1bWVudHNJdGVyYXRvci5o
IgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK1NUQVRJQ19B
U1NFUlRfSVNfVFJJVklBTExZX0RFU1RSVUNUSUJMRShEaXJlY3RBcmd1bWVudHMpOworCitjb25z
dCBDbGFzc0luZm8gRGlyZWN0QXJndW1lbnRzOjpzX2luZm8gPSB7ICJBcmd1bWVudHMiLCAmQmFz
ZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKERpcmVjdEFyZ3VtZW50cykgfTsKKwor
RGlyZWN0QXJndW1lbnRzOjpEaXJlY3RBcmd1bWVudHMoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgdW5zaWduZWQgbGVuZ3RoKQorICAgIDogR2VuZXJpY0FyZ3VtZW50cyh2bSwgc3RydWN0
dXJlKQorICAgICwgbV9sZW5ndGgobGVuZ3RoKQoreworfQorCitEaXJlY3RBcmd1bWVudHMqIERp
cmVjdEFyZ3VtZW50czo6Y3JlYXRlVW5pbml0aWFsaXplZChWTSYgdm0sIFN0cnVjdHVyZSogc3Ry
dWN0dXJlLCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgRGlyZWN0QXJndW1lbnRzKiByZXN1bHQg
PQorICAgICAgICBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxEaXJlY3RBcmd1bWVudHM+KHZt
LmhlYXAsIGFsbG9jYXRpb25TaXplKGxlbmd0aCkpKQorICAgICAgICAodm0sIHN0cnVjdHVyZSk7
CisgICAgcmVzdWx0LT5maW5pc2hDcmVhdGlvbih2bSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30K
KworRGlyZWN0QXJndW1lbnRzKiBEaXJlY3RBcmd1bWVudHM6OmNyZWF0ZShWTSYgdm0sIFN0cnVj
dHVyZSogc3RydWN0dXJlLCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgRGlyZWN0QXJndW1lbnRz
KiByZXN1bHQgPSBjcmVhdGVVbmluaXRpYWxpemVkKHZtLCBzdHJ1Y3R1cmUsIGxlbmd0aCk7Cisg
ICAgCisgICAgZm9yICh1bnNpZ25lZCBpID0gbGVuZ3RoOyBpLS07KQorICAgICAgICByZXN1bHQt
PnN0b3JhZ2UoKVtpXS5jbGVhcigpOworICAgIAorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK0Rp
cmVjdEFyZ3VtZW50cyogRGlyZWN0QXJndW1lbnRzOjpjcmVhdGVCeUNvcHlpbmcoRXhlY1N0YXRl
KiBleGVjKQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgCisgICAgdW5zaWduZWQg
bGVuZ3RoID0gZXhlYy0+YXJndW1lbnRDb3VudCgpOworICAgIERpcmVjdEFyZ3VtZW50cyogcmVz
dWx0ID0gY3JlYXRlVW5pbml0aWFsaXplZCgKKyAgICAgICAgdm0sIGV4ZWMtPmxleGljYWxHbG9i
YWxPYmplY3QoKS0+ZGlyZWN0QXJndW1lbnRzU3RydWN0dXJlKCksIGxlbmd0aCk7CisgICAgCisg
ICAgZm9yICh1bnNpZ25lZCBpID0gbGVuZ3RoOyBpLS07KQorICAgICAgICByZXN1bHQtPnN0b3Jh
Z2UoKVtpXS5zZXQodm0sIHJlc3VsdCwgZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoaSkpOworICAg
IAorICAgIHJlc3VsdC0+Y2FsbGVlKCkuc2V0KHZtLCByZXN1bHQsIGpzQ2FzdDxKU0Z1bmN0aW9u
Kj4oZXhlYy0+Y2FsbGVlKCkpKTsKKyAgICAKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lk
IERpcmVjdEFyZ3VtZW50czo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIHRoaXNDZWxsLCBTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3sKKyAgICBEaXJlY3RBcmd1bWVudHMqIHRoaXNPYmplY3QgPSBzdGF0
aWNfY2FzdDxEaXJlY3RBcmd1bWVudHMqPih0aGlzQ2VsbCk7CisgICAgQVNTRVJUX0dDX09CSkVD
VF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOworICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4o
dGhpc09iamVjdCwgdmlzaXRvcik7CisgICAgCisgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXModGhp
c09iamVjdC0+c3RvcmFnZSgpLCB0aGlzT2JqZWN0LT5tX2xlbmd0aCk7CisgICAgdmlzaXRvci5h
cHBlbmQoJnRoaXNPYmplY3QtPm1fY2FsbGVlKTsKKyAgICAKKyAgICBpZiAodGhpc09iamVjdC0+
bV9vdmVycmlkZXMpIHsKKyAgICAgICAgdmlzaXRvci5jb3B5TGF0ZXIoCisgICAgICAgICAgICB0
aGlzT2JqZWN0LCBEaXJlY3RBcmd1bWVudHNPdmVycmlkZXNDb3B5VG9rZW4sCisgICAgICAgICAg
ICB0aGlzT2JqZWN0LT5tX292ZXJyaWRlcy5nZXQoKSwgbV9sZW5ndGgpOworICAgIH0KK30KKwor
dm9pZCBEaXJlY3RBcmd1bWVudHM6OmNvcHlCYWNraW5nU3RvcmUoSlNDZWxsKiB0aGlzQ2VsbCwg
Q29weVZpc2l0b3ImIHZpc2l0b3IsIENvcHlUb2tlbiB0b2tlbikKK3sKKyAgICBEaXJlY3RBcmd1
bWVudHMqIHRoaXNPYmplY3QgPSBzdGF0aWNfY2FzdDxEaXJlY3RBcmd1bWVudHMqPih0aGlzQ2Vs
bCk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwor
ICAgIAorICAgIFJFTEVBU0VfQVNTRVJUKHRva2VuID09IERpcmVjdEFyZ3VtZW50c092ZXJyaWRl
c0NvcHlUb2tlbik7CisgICAgCisgICAgYm9vbCogb2xkT3ZlcnJpZGVzID0gdGhpc09iamVjdC0+
bV9vdmVycmlkZXMuZ2V0KCk7CisgICAgaWYgKCFvbGRPdmVycmlkZXMpCisgICAgICAgIHJldHVy
bjsKKyAgICAKKyAgICBpZiAodmlzaXRvci5jaGVja0lmU2hvdWxkQ29weShvdmVycmlkZXMpKSB7
CisgICAgICAgIGJvb2wqIG5ld092ZXJyaWRlcyA9IHN0YXRpY19jYXN0PGJvb2wqPih2aXNpdG9y
LmFsbG9jYXRlTmV3U3BhY2UobV9sZW5ndGgpKTsKKyAgICAgICAgbWVtY3B5KG5ld092ZXJyaWRl
cywgb2xkT3ZlcnJpZGVzLCBtX2xlbmd0aCk7CisgICAgICAgIHRoaXNPYmplY3QtPm1fb3ZlcnJp
ZGVzLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIobmV3T3ZlcnJpZGVzKTsKKyAgICAgICAgdmlzaXRv
ci5kaWRDb3B5KG9sZE92ZXJyaWRlcywgbV9sZW5ndGgpOworICAgIH0KK30KKworU3RydWN0dXJl
KiBEaXJlY3RBcmd1bWVudHM6OmNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQoreworICAgIHJldHVybiBTdHJ1Y3R1
cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKERpcmVjdEFy
Z3VtZW50c1R5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKK30KKwordm9pZCBEaXJlY3RB
cmd1bWVudHM6OnNsb3dEb3duQW5kV2FzdGVNZW1vcnkoVk0mIHZtKQoreworICAgIFJFTEVBU0Vf
QVNTRVJUKCFtX292ZXJyaWRlcyk7CisgICAgCisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0
eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKG1fbGVuZ3RoKSwgRG9udEVudW0pOworICAgIHB1dERp
cmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+Y2FsbGVlLCBtX2NhbGxlZS5nZXQoKSwgRG9udEVu
dW0pOworICAgIAorICAgIHZvaWQqIGJhY2tpbmdTdG9yZTsKKyAgICBSRUxFQVNFX0FTU0VSVCh2
bS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZSh0aGlzLCBtX2xlbmd0aCksICZiYWNraW5nU3RvcmUp
OworICAgIG1fb3ZlcnJpZGVzLnNldCh2bSwgdGhpcywgc3RhdGljX2Nhc3Q8Ym9vbCo+KGJhY2tp
bmdTdG9yZSkpOworICAgIGZvciAodW5zaWduZWQgaSA9IG1fbGVuZ3RoOyBpLS07KQorICAgICAg
ICBtX292ZXJyaWRlcy5nZXQoKVtpXSA9IGZhbHNlOworfQorCit2b2lkIERpcmVjdEFyZ3VtZW50
czo6c2xvd0Rvd25BbmRXYXN0ZU1lbW9yeUlmTmVjZXNzYXJ5KFZNJiB2bSkKK3sKKyAgICBpZiAo
IW1fb3ZlcnJpZGVzKQorICAgICAgICBzbG93RG93bkFuZFdhc3RlTWVtb3J5KHZtKTsKK30KKwor
dm9pZCBEaXJlY3RBcmd1bWVudHM6Om92ZXJyaWRlQXJndW1lbnQoVk0mIHZtLCB1bnNpZ25lZCBp
KQoreworICAgIHNsb3dEb3duQW5kV2FzdGVNZW1vcnlJZk5lY2Vzc2FyeSh2bSk7CisgICAgbV9v
dmVycmlkZXMuZ2V0KClbaW5kZXhdID0gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50
cy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0
QXJndW1lbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMzkgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBEaXJlY3RBcmd1bWVu
dHNfaAorI2RlZmluZSBEaXJlY3RBcmd1bWVudHNfaAorCisjaW5jbHVkZSAiR2VuZXJpY0FyZ3Vt
ZW50cy5oIgorCituYW1lc3BhY2UgSlNDIHsKKworLy8gVGhpcyBpcyBhbiBBcmd1bWVudHMtY2xh
c3Mgb2JqZWN0IHRoYXQgd2UgY3JlYXRlIHdoZW4geW91IHNheSAiYXJndW1lbnRzIiBpbnNpZGUg
YSBmdW5jdGlvbiwKKy8vIGFuZCBub25lIG9mIHRoZSBhcmd1bWVudHMgYXJlIGNhcHR1cmVkIGlu
IHRoZSBmdW5jdGlvbidzIGFjdGl2YXRpb24uIFRoZSBmdW5jdGlvbiB3aWxsIGNvcHkgYWxsCisv
LyBvZiBpdHMgYXJndW1lbnRzIGludG8gdGhpcyBvYmplY3QsIGFuZCBhbGwgc3Vic2VxdWVudCBh
Y2Nlc3NlcyB0byB0aGUgYXJndW1lbnRzIHdpbGwgZ28gdGhyb3VnaAorLy8gdGhpcyBvYmplY3Qg
dGhlcmVhZnRlci4gU3BlY2lhbCBzdXBwb3J0IGlzIGluIHBsYWNlIGZvciBtaXNjaGV2aW91cyBl
dmVudHMgbGlrZSB0aGUgYXJndW1lbnRzCisvLyBiZWluZyBkZWxldGVkIChzb21ldGhpbmcgbGlr
ZSAiZGVsZXRlIGFyZ3VtZW50c1swXSIpIG9yIHJlY29uZmlndXJlZCAoYnJvYWRseSwgd2Ugc2F5
IGRlbGV0aW9ucworLy8gYW5kIHJlY29uZmlndXJhdGlvbnMgbWVhbiB0aGF0IHRoZSByZXNwZWN0
aXZlIGFyZ3VtZW50IHdhcyAib3ZlcnJpZGRlbiIpLgorLy8KKy8vIFRvIHNwZWVkIGFsbG9jYXRp
b24sIHRoaXMgb2JqZWN0IHdpbGwgaG9sZCBhbGwgb2YgdGhlIGFyZ3VtZW50cyBpbi1wbGFjZS4g
VGhlIGFyZ3VtZW50cyBhcyB3ZWxsCisvLyBhcyBhIHRhYmxlIG9mIGZsYWdzIHNheWluZyB3aGlj
aCBhcmd1bWVudHMgd2VyZSBvdmVycmlkZGVuLgorY2xhc3MgRGlyZWN0QXJndW1lbnRzIDogcHVi
bGljIEdlbmVyaWNBcmd1bWVudHM8RGlyZWN0QXJndW1lbnRzPiB7Citwcml2YXRlOgorICAgIERp
cmVjdEFyZ3VtZW50cyhWTSYsIFN0cnVjdHVyZSosIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgCitw
dWJsaWM6CisgICAgLy8gQ3JlYXRlcyBhbiBhcmd1bWVudHMgb2JqZWN0IGJ1dCBsZWF2ZXMgaXQg
dW5pbml0aWFsaXplZC4gVGhpcyBpcyBkYW5nZXJvdXMgaWYgd2UgR0MgcmlnaHQKKyAgICAvLyBh
ZnRlciBhbGxvY2F0aW9uLgorICAgIHN0YXRpYyBEaXJlY3RBcmd1bWVudHMqIGNyZWF0ZVVuaW5p
dGlhbGl6ZWQoVk0mLCBTdHJ1Y3R1cmUqLCB1bnNpZ25lZCBsZW5ndGgpOworICAgIAorICAgIC8v
IENyZWF0ZXMgYW4gYXJndW1lbnRzIG9iamVjdCBhbmQgaW5pdGlhbGl6ZXMgZXZlcnl0aGluZyB0
byB0aGUgZW1wdHkgdmFsdWUuIFVzZSB0aGlzIGlmIHlvdQorICAgIC8vIGNhbm5vdCBndWFyYW50
ZWUgdGhhdCB5b3UnbGwgaW1tZWRpYXRlbHkgaW5pdGlhbGl6ZSBhbGwgb2YgdGhlIGVsZW1lbnRz
LgorICAgIHN0YXRpYyBEaXJlY3RBcmd1bWVudHMqIGNyZWF0ZShWTSYsIFN0cnVjdHVyZSosIHVu
c2lnbmVkIGxlbmd0aCk7CisgICAgCisgICAgLy8gQ3JlYXRlcyBhbiBhcmd1bWVudHMgb2JqZWN0
IGJ5IGNvcHlpbmcgdGhlIGFyZ3VtbmV0cyBmcm9tIHRoZSBzdGFjay4KKyAgICBzdGF0aWMgRGly
ZWN0QXJndW1lbnRzKiBjcmVhdGVCeUNvcHlpbmcoRXhlY1N0YXRlKik7CisgICAgCisgICAgc3Rh
dGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIHN0YXRp
YyB2b2lkIGNvcHlCYWNraW5nU3RvcmUoSlNDZWxsKiwgQ29weVZpc2l0b3ImLCBDb3B5VG9rZW4p
OworICAgIAorICAgIHVpbnQzMl90IGludGVybmFsTGVuZ3RoKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiBtX2xlbmd0aDsKKyAgICB9CisgICAgCisgICAgdWludDMyX3QgbGVuZ3RoKEV4
ZWNTdGF0ZSogZXhlYykgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChVTkxJS0VMWShtX292ZXJy
aWRlcykpCisgICAgICAgICAgICByZXR1cm4gZ2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMo
KS5sZW5ndGgpLnRvVUludDMyKGV4ZWMpOworICAgICAgICByZXR1cm4gbV9sZW5ndGg7CisgICAg
fQorICAgIAorICAgIGJvb2wgY2FuQWNjZXNzSW5kZXhRdWlja2x5KHVpbnQzMl90IGkpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gaSA8IG1fbGVuZ3RoICYmICghbV9vdmVycmlkZXMgfHwg
IW1fb3ZlcnJpZGVzLmdldCgpW2ldKTsKKyAgICB9CisgICAgCisgICAgSlNWYWx1ZSBnZXRJbmRl
eFF1aWNrbHkodWludDMyX3QgaSkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVF9XSVRIX1NF
Q1VSSVRZX0lNUExJQ0FUSU9OKGNhbkFjY2Vzc0luZGV4UXVpY2tseShpKSk7CisgICAgICAgIHJl
dHVybiBzdG9yYWdlKClbaV0uZ2V0KCk7CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0SW5kZXhR
dWlja2x5KFZNJiB2bSwgdWludDMyX3QgaSwgSlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAg
IEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGNhbkFjY2Vzc0luZGV4UXVpY2tseShp
KSk7CisgICAgICAgIHN0b3JhZ2UoKVtpXS5zZXQodm0sIHRoaXMsIHZhbHVlKTsKKyAgICB9Cisg
ICAgCisgICAgV3JpdGVCYXJyaWVyPEpTRnVuY3Rpb24+JiBjYWxsZWUoKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIG1fY2FsbGVlOworICAgIH0KKyAgICAKKyAgICBXcml0ZUJhcnJpZXI8VW5rbm93
bj4mIGFyZ3VtZW50KENhcHR1cmVkQXJndW1lbnRzT2Zmc2V0IG9mZnNldCkKKyAgICB7CisgICAg
ICAgIEFTU0VSVChvZmZzZXQpOworICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNB
VElPTihvZmZzZXQub2Zmc2V0KCkgPCBtX2xlbmd0aCk7CisgICAgICAgIHJldHVybiBzdG9yYWdl
KClbb2Zmc2V0Lm9mZnNldCgpXTsKKyAgICB9CisgICAgCisgICAgLy8gTWV0aG9kcyBpbnRlbmRl
ZCBmb3IgdXNlIGJ5IHRoZSBHZW5lcmljQXJndW1lbnRzIG1peGluLgorICAgIGJvb2wgb3ZlcnJv
ZGVUaGluZ3MoKSBjb25zdCB7IHJldHVybiAhIW1fb3ZlcnJpZGVzOyB9CisgICAgdm9pZCBzbG93
RG93bkFuZFdhc3RlTWVtb3J5KFZNJik7CisgICAgdm9pZCBzbG93RG93bkFuZFdhc3RlTWVtb3J5
SWZOZWNlc3NhcnkoVk0mKTsKKyAgICB2b2lkIG92ZXJyaWRlQXJndW1lbnQoVk0mLCB1bnNpZ25l
ZCBpbmRleCk7CisgICAgCisgICAgREVDTEFSRV9JTkZPOworICAgIAorICAgIHN0YXRpYyBTdHJ1
Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90
b3R5cGUpOworICAgIAorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZMZW5ndGgoKSB7IHJl
dHVybiBPQkpFQ1RfT0ZGU0VUT0YoRGlyZWN0QXJndW1lbnRzLCBtX2xlbmd0aCk7IH0KKyAgICBz
dGF0aWMgcHRyZGlmZl90IG9mZnNldE9mT3ZlcnJpZGVzKCkgeyByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKERpcmVjdEFyZ3VtZW50cywgbV9vdmVycmlkZXMpOyB9CisgICAgCisgICAgc3RhdGljIHNp
emVfdCBzdG9yYWdlT2Zmc2V0KCkKKyAgICB7CisgICAgICAgIHJldHVybiBXVEY6OnJvdW5kVXBU
b011bHRpcGxlT2Y8c2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPik+KHNpemVvZihEaXJlY3RB
cmd1bWVudHMpKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIHNpemVfdCBhbGxvY2F0aW9uU2l6
ZSh1aW50MzJfdCBsZW5ndGgpCisgICAgeworICAgICAgICByZXR1cm4gc3RvcmFnZU9mZnNldCgp
ICsgc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikgKiBsZW5ndGg7CisgICAgfQorICAgIAor
cHJpdmF0ZToKKyAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHN0b3JhZ2UoKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxXcml0ZUJhcnJpZXI8VW5rbm93bj4qPihiaXR3aXNl
X2Nhc3Q8Y2hhcio+KHRoaXMpICsgc3RvcmFnZU9mZnNldCgpKTsKKyAgICB9CisgICAgCisgICAg
V3JpdGVCYXJyaWVyPEpTRnVuY3Rpb24qPiBtX2NhbGxlZTsKKyAgICB1aW50MzJfdCBtX2xlbmd0
aDsgLy8gQWx3YXlzIHRoZSBhY3R1YWwgbGVuZ3RoIG9mIGNhcHR1cmVkIGFyZ3VtZW50cyBhbmQg
bmV2ZXIgd2hhdCB3YXMgc3RvcmVkIGludG8gdGhlIGxlbmd0aCBwcm9wZXJ0eS4KKyAgICBDb3B5
V3JpdGVCYXJyaWVyPGJvb2w+IG1fb3ZlcnJpZGVzOyAvLyBJZiBub24tbnVsbCwgaXQgbWVhbnMg
dGhhdCBsZW5ndGgsIGNhbGxlZSwgYW5kIGNhbGxlciBhcmUgZnVsbHkgbWF0ZXJpYWxpemVkIHBy
b3BlcnRpZXMuCit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIERpcmVjdEFy
Z3VtZW50c19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNB
cmd1bWVudHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9H
ZW5lcmljQXJndW1lbnRzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9HZW5lcmljQXJndW1lbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IEdlbmVyaWNBcmd1bWVudHNfaAorI2RlZmluZSBHZW5lcmljQXJndW1lbnRzX2gKKworI2luY2x1
ZGUgIkpTT2JqZWN0LmgiCisKK25hbWVzcGFjZSBKU0MgeworCisvLyBUaGlzIGlzIGEgbWl4aW4g
Zm9yIHRoZSB0d28ga2luZHMgb2YgQXJndW1lbnRzLWNsYXNzIG9iamVjdHMgdGhhdCBhcmlzZSB3
aGVuIHlvdSBzYXkKKy8vICJhcmd1bWVudHMiIGluc2lkZSBhIGZ1bmN0aW9uLiBUaGlzIGNsYXNz
IGRvZXNuJ3Qgc2hvdyB1cCBpbiB0aGUgSlNDZWxsIGluaGVyaXRhbmNlIGhpZXJhcmNoeS4KK3Rl
bXBsYXRlPHR5cGVuYW1lIFR5cGU+CitjbGFzcyBHZW5lcmljQXJndW1lbnRzIDogcHVibGljIEpT
Tm9uRmluYWxPYmplY3QgeworcHVibGljOgorICAgIHR5cGVkZWYgSlNOb25GaW5hbE9iamVjdCBC
YXNlOworCisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJp
ZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5k
ZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IE92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMgfCBK
U09iamVjdDo6U3RydWN0dXJlRmxhZ3M7CisKK3Byb3RlY3RlZDoKKyAgICBHZW5lcmljQXJndW1l
bnRzKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgICAgIDogQmFzZSh2bSwgc3Ry
dWN0dXJlKQorICAgIHsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNs
b3QoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwor
ICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNPYmplY3QqLCBFeGVj
U3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOworICAgIHN0YXRp
YyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0
eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CisgICAgc3RhdGljIHZvaWQgcHV0KEpTQ2Vs
bCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7
CisgICAgc3RhdGljIHZvaWQgcHV0QnlJbmRleChKU0NlbGwqLCBFeGVjU3RhdGUqLCB1bnNpZ25l
ZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpOworICAgIHN0YXRpYyB2
b2lkIGRlbGV0ZVByb3BlcnR5KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSk7Cisg
ICAgc3RhdGljIHZvaWQgZGVsZXRlUHJvcGVydHlCeUluZGV4KEpTQ2VsbCosIEV4ZWNTdGF0ZSos
IHVuc2lnbmVkIHByb3BlcnR5TmFtZSk7CisgICAgc3RhdGljIHZvaWQgZGVmaW5lT3duUHJvcGVy
dHkoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5RGVz
Y3JpcHRvciYsIGJvb2wgc2hvdWxkVGhyb3cpOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisK
KyNlbmRpZiAvLyBHZW5lcmljQXJndW1lbnRzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzSW5saW5lcy5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50
c0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIxMiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEdlbmVyaWNBcmd1bWVu
dHNJbmxpbmVzX2gKKyNkZWZpbmUgR2VuZXJpY0FyZ3VtZW50c0lubGluZXNfaAorCisjaW5jbHVk
ZSAiR2VuZXJpY0FyZ3VtZW50cy5oIgorI2luY2x1ZGUgIkpTQXJndW1lbnRzSXRlcmF0b3IuaCIK
KyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeworCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUeXBlPgorYm9vbCBHZW5lcmljQXJndW1lbnRzPFR5cGU+OjpnZXRPd25Qcm9wZXJ0
eVNsb3QoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgaWRl
bnQsIFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICBUeXBlKiB0aGlzT2JqZWN0ID0ganNDYXN0
PFR5cGUqPihvYmplY3QpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgCisgICAgaWYg
KCF0aGlzT2JqZWN0LT5vdmVycm9kZVRoaW5ncygpKSB7CisgICAgICAgIGlmIChpZGVudCA9PSB2
bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgpIHsKKyAgICAgICAgICAgIHNsb3Quc2V0VmFsdWUodGhp
c09iamVjdCwgRG9udEVudW0sIGpzTnVtYmVyKHRoaXNPYmplY3QtPmludGVybmFsTGVuZ3RoKCkp
KTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmIChpZGVu
dCA9PSB2bS5wcm9wZXJ0eU5hbWVzLT5jYWxsZWUpIHsKKyAgICAgICAgICAgIHNsb3Quc2V0VmFs
dWUodGhpc09iamVjdCwgRG9udEVudW0sIHRoaXNPYmplY3QtPmNhbGxlZSgpLmdldCgpKTsKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHVuc2ln
bmVkIGluZGV4ID0gaWRlbnQuYXNJbmRleCgpOworICAgIGlmICh0aGlzT2JqZWN0LT5jYW5BY2Nl
c3NJbmRleFF1aWNrbHkoaW5kZXgpKSB7CisgICAgICAgIHNsb3Quc2V0VmFsdWUodGhpc09iamVj
dCwgTm9uZSwgdGhpc09iamVjdC0+Z2V0SW5kZXhRdWlja2x5KGluZGV4KSk7CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICBpZiAoQmFzZTo6Z2V0T3duUHJvcGVydHlTbG90
KHRoaXNPYmplY3QsIGV4ZWMsIGlkZW50LCBzbG90KSkKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgCisgICAgaWYgKGlkZW50ID09IHZtLnByb3BlcnR5TmFtZXMtPml0ZXJhdG9yUHJpdmF0ZU5h
bWUpIHsKKyAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGV4ZWMtPmxleGlj
YWxHbG9iYWxPYmplY3QoKTsKKyAgICAgICAgdGhpc09iamVjdC0+SlNDX05BVElWRV9GVU5DVElP
Tih2bS5wcm9wZXJ0eU5hbWVzLT5pdGVyYXRvclByaXZhdGVOYW1lLCBhcmd1bWVudHNGdW5jSXRl
cmF0b3IsIERvbnRFbnVtLCAwKTsKKyAgICAgICAgaWYgKEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0
eVNsb3QodGhpc09iamVjdCwgZXhlYywgaWRlbnQsIHNsb3QpKQorICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorICAgIAorICAgIHJldHVybiBmYWxzZTsKK30KKwordGVtcGxhdGU8dHlw
ZW5hbWUgVHlwZT4KK2Jvb2wgR2VuZXJpY0FyZ3VtZW50czxUeXBlPjo6Z2V0T3duUHJvcGVydHlT
bG90QnlJbmRleChKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGlu
ZGV4LCBQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgVHlwZSogdGhpc09iamVjdCA9IGpzQ2Fz
dDxUeXBlKj4ob2JqZWN0KTsKKyAgICAKKyAgICBpZiAodGhpc09iamVjdC0+Y2FuQWNjZXNzSW5k
ZXhRdWlja2x5KGluZGV4KSkgeworICAgICAgICBzbG90LnNldFZhbHVlKHRoaXNPYmplY3QsIE5v
bmUsIHRoaXNPYmplY3QtPmdldEluZGV4UXVpY2tseShpbmRleCkpOworICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIEJhc2U6OmdldE93blByb3BlcnR5U2xvdEJ5
SW5kZXgob2JqZWN0LCBleGVjLCBpbmRleCwgc2xvdCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1l
IFR5cGU+Cit2b2lkIEdlbmVyaWNBcmd1bWVudHM8VHlwZT46OmdldE93blByb3BlcnR5TmFtZXMo
SlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgYXJy
YXksIEVudW1lcmF0aW9uTW9kZSBtb2RlKQoreworICAgIFR5cGUqIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8VHlwZSo+KG9iamVjdCk7CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRo
aXNPYmplY3QtPmludGVybmFsTGVuZ3RoKCk7ICsraSkgeworICAgICAgICBpZiAoIXRoaXNPYmpl
Y3QtPmNhbkFjY2Vzc0luZGV4UXVpY2tseShpbmRleCkpCisgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgYXJyYXkuYWRkKElkZW50aWZpZXI6OmZyb20oZXhlYywgaSkpOworICAgIH0KKyAg
ICBpZiAoc2hvdWxkSW5jbHVkZURvbnRFbnVtUHJvcGVydGllcyhtb2RlKSAmJiAhdGhpc09iamVj
dC0+b3ZlcnJvZGVUaGluZ3MoKSkgeworICAgICAgICBhcnJheS5hZGQoZXhlYy0+cHJvcGVydHlO
YW1lcygpLmNhbGxlZSk7CisgICAgICAgIGFycmF5LmFkZChleGVjLT5wcm9wZXJ0eU5hbWVzKCku
bGVuZ3RoKTsKKyAgICB9CisgICAgQmFzZTo6Z2V0T3duUHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0
LCBleGVjLCBhcnJheSwgbW9kZSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFR5cGU+Cit2b2lk
IEdlbmVyaWNBcmd1bWVudHM8VHlwZT46OnB1dChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhl
YywgUHJvcGVydHlOYW1lIGlkZW50LCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNs
b3QpCit7CisgICAgVHlwZSogdGhpc09iamVjdCA9IGpzQ2FzdDxUeXBlKj4ob2JqZWN0KTsKKyAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIAorICAgIGlmICghdGhpc09iamVjdC0+b3ZlcnJv
ZGVUaGluZ3MoKQorICAgICAgICAmJiAoaWRlbnQgPT0gdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3Ro
CisgICAgICAgICAgICB8fCBpZGVudCA9PSB2bS5wcm9wZXJ0eU5hbWVzLT5jYWxsZWUpKQorICAg
ICAgICB0aGlzT2JqZWN0LT5zbG93RG93bkFuZFdhc3RlTWVtb3J5KHZtKTsKKyAgICAKKyAgICB1
bnNpZ25lZCBpbmRleCA9IGlkZW50LmFzSW5kZXgoKTsKKyAgICBpZiAodGhpc09iamVjdC0+Y2Fu
QWNjZXNzSW5kZXhRdWlja2x5KGluZGV4KSkgeworICAgICAgICBzZXRJbmRleFF1aWNrbHkodm0s
IGluZGV4LCB2YWx1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgQmFzZTo6
cHV0KHRoaXNPYmplY3QsIGV4ZWMsIGlkZW50LCB2YWx1ZSwgc2xvdCk7Cit9CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFR5cGU+Cit2b2lkIEdlbmVyaWNBcmd1bWVudHM8VHlwZT46OnB1dEJ5SW5kZXgo
SlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGluZGV4LCBKU1ZhbHVlIHZh
bHVlLCBib29sIHNob3VsZFRocm93KQoreworICAgIFR5cGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8
VHlwZSo+KG9iamVjdCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICAKKyAgICBpZiAo
dGhpc09iamVjdC0+Y2FuU2V0SW5kZXhRdWlja2x5KGluZGV4KSkgeworICAgICAgICBzZXRJbmRl
eFF1aWNrbHkodm0sIGluZGV4LCB2YWx1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
CisgICAgcmV0dXJuIEJhc2U6OnB1dEJ5SW5kZXgoY2VsbCwgZXhlYywgaW5kZXgsIHZhbHVlLCBz
aG91bGRUaHJvdyk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFR5cGU+Cit2b2lkIEdlbmVyaWNB
cmd1bWVudHM8VHlwZT46OmRlbGV0ZVByb3BlcnR5KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBl
eGVjLCBQcm9wZXJ0eU5hbWUgaWRlbnQpCit7CisgICAgVHlwZSogdGhpc09iamVjdCA9IGpzQ2Fz
dDxUeXBlKj4ob2JqZWN0KTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIAorICAgIGlm
ICghdGhpc09iamVjdC0+b3ZlcnJvZGVUaGluZ3MoKQorICAgICAgICAmJiAoaWRlbnQgPT0gdm0u
cHJvcGVydHlOYW1lcy0+bGVuZ3RoCisgICAgICAgICAgICB8fCBpZGVudCA9PSB2bS5wcm9wZXJ0
eU5hbWVzLT5jYWxsZWUpKQorICAgICAgICB0aGlzT2JqZWN0LT5zbG93RG93bkFuZFdhc3RlTWVt
b3J5KHZtKTsKKyAgICAKKyAgICB1bnNpZ25lZCBpbmRleCA9IGlkZW50LmFzSW5kZXgoKTsKKyAg
ICBpZiAodGhpc09iamVjdC0+Y2FuQWNjZXNzSW5kZXhRdWlja2x5KGluZGV4KSkgeworICAgICAg
ICB0aGlzT2JqZWN0LT5vdmVycmlkZUFyZ3VtZW50KHZtLCBpbmRleCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgCisgICAgQmFzZTo6ZGVsZXRlUHJvcGVydHkodGhpc09iamVjdCwgZXhl
YywgaWRlbnQpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPgordm9pZCBHZW5lcmljQXJn
dW1lbnRzPFR5cGU+OjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3Rh
dGUqIGV4ZWMsIHVuc2lnbmVkIGluZGV4KQoreworICAgIFR5cGUqIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8VHlwZSo+KG9iamVjdCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICAKKyAgICBp
ZiAodGhpc09iamVjdC0+Y2FuQWNjZXNzSW5kZXhRdWlja2x5KGluZGV4KSkgeworICAgICAgICB0
aGlzT2JqZWN0LT5vdmVycmlkZUFyZ3VtZW50KHZtLCBpbmRleCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgCisgICAgcmV0dXJuIEJhc2U6OmRlbGV0ZVByb3BlcnR5QnlJbmRleChjZWxs
LCBleGVjLCBpbmRleCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFR5cGU+Cit2b2lkIEdlbmVy
aWNBcmd1bWVudHM8VHlwZT46OmRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiBvYmplY3QsIEV4
ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIGlkZW50LCBjb25zdCBQcm9wZXJ0eURlc2NyaXB0
b3ImIGRlc2NyaXB0b3IsIGJvb2wgc2hvdWxkVGhyb3cpCit7CisgICAgVHlwZSogdGhpc09iamVj
dCA9IGpzQ2FzdDxUeXBlKj4ob2JqZWN0KTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAg
IAorICAgIGlmIChpZGVudCA9PSB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgKKyAgICAgICAgfHwg
aWRlbnQgPT0gdm0ucHJvcGVydHlOYW1lcy0+Y2FsbGVlKQorICAgICAgICB0aGlzT2JqZWN0LT5z
bG93RG93bkFuZFdhc3RlTWVtb3J5SWZOZWNlc3Nhcnkodm0pOworICAgIGVsc2UgeworICAgICAg
ICB1bnNpZ25lZCBpbmRleCA9IGlkZW50LmFzSW5kZXgoKTsKKyAgICAgICAgaWYgKHRoaXNPYmpl
Y3QtPmNhbkFjY2Vzc0FyZ3VtZW50UXVpY2tseShpbmRleCkpIHsKKyAgICAgICAgICAgIGlmICgh
ZGVzY3JpcHRvci5pc0FjY2Vzc29yRGVzY3JpcHRvcigpKSB7CisgICAgICAgICAgICAgICAgLy8g
SWYgdGhlIHByb3BlcnR5IGlzIG5vdCBkZWxldGVkIGFuZCB3ZSBhcmUgdXNpbmcgYSBub24tYWNj
ZXNzb3IgZGVzY3JpcHRvciwgdGhlbgorICAgICAgICAgICAgICAgIC8vIG1ha2Ugc3VyZSB0aGF0
IHRoZSBhbGlhc2VkIGFyZ3VtZW50IHNlZXMgdGhlIHZhbHVlLgorICAgICAgICAgICAgICAgIGlm
IChkZXNjcmlwdG9yLnZhbHVlKCkpCisgICAgICAgICAgICAgICAgICAgIHRoaXNPYmplY3QtPnNl
dEluZGV4UXVpY2tseSh2bSwgaSwgZGVzY3JpcHRvci52YWx1ZSgpKTsKKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgIC8vIElmIHRoZSBwcm9wZXJ0eSBpcyBub3QgZGVsZXRlZCBhbmQgd2Ug
YXJlIHVzaW5nIGEgbm9uLWFjY2Vzc29yLCB3cml0YWJsZQorICAgICAgICAgICAgICAgIC8vIGRl
c2NyaXB0b3IsIHRoZW4gd2UgYXJlIGRvbmUuIFRoZSBhcmd1bWVudCBjb250aW51ZXMgdG8gYmUg
YWxpYXNlZC4gTm90ZSB0aGF0IHdlCisgICAgICAgICAgICAgICAgLy8gaWdub3JlIHRoZSByZXF1
ZXN0IHRvIGNoYW5nZSBlbnVtZXJhYmlsaXR5LiBXZSBhcHBlYXIgdG8gaGF2ZSBhbHdheXMgZG9u
ZSBzbywgaW4KKyAgICAgICAgICAgICAgICAvLyBjYXNlcyB3aGVyZSB0aGUgYXJndW1lbnQgd2Fz
IHN0aWxsIGFsaWFzZWQuCisgICAgICAgICAgICAgICAgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDE5NTIKKyAgICAgICAgICAgICAgICBpZiAoZGVz
Y3JpcHRvci53cml0YWJsZSgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgICAgICAvLyBJZiB0aGUgcHJvcGVydHkgaXMg
YSBub24tZGVsZXRlZCBhcmd1bWVudCwgdGhlbiBtb3ZlIGl0IGludG8gdGhlIGJhc2Ugb2JqZWN0
IGFuZAorICAgICAgICAgICAgLy8gdGhlbiBkZWxldGUgaXQuCisgICAgICAgICAgICBKU1ZhbHVl
IHZhbHVlID0gdGhpc09iamVjdC0+Z2V0SW5kZXhRdWlja2x5KGkpOworICAgICAgICAgICAgQVNT
RVJUKHZhbHVlKTsKKyAgICAgICAgICAgIG9iamVjdC0+cHV0RGlyZWN0TWF5QmVJbmRleChleGVj
LCBwcm9wZXJ0eU5hbWUsIHZhbHVlKTsKKyAgICAgICAgICAgIHRoaXNPYmplY3QtPm92ZXJyaWRl
QXJndW1lbnQodm0sIGkpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8vIE5vdyBqdXN0
IGxldCB0aGUgbm9ybWFsIG9iamVjdCBtYWNoaW5lcnkgZG8gaXRzIHRoaW5nLgorICAgIHJldHVy
biBCYXNlOjpkZWZpbmVPd25Qcm9wZXJ0eShvYmplY3QsIGV4ZWMsIGlkZW50LCBkZXNjcmlwdG9y
LCBzaG91bGRUaHJvdyk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gR2Vu
ZXJpY0FyZ3VtZW50c0lubGluZXNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9HZW5lcmljT2Zmc2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvR2VuZXJpY09mZnNldC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvR2VuZXJpY09mZnNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MTExIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgR2VuZXJpY09mZnNldF9oCisjZGVmaW5lIEdlbmVyaWNPZmZzZXRfaAorCisjaW5jbHVk
ZSA8d3RmL0Fzc2VydGlvbnMuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKKy8vIEEgbWl4aW4gZm9y
IGNyZWF0aW5nIHRoZSB2YXJpb3VzIGtpbmRzIG9mIHZhcmlhYmxlIG9mZnNldHMgdGhhdCBvdXIg
ZW5naW5lIHN1cHBvcnRzLgordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2NsYXNzIEdlbmVyaWNPZmZz
ZXQgeworcHVibGljOgorICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnZhbGlkT2Zmc2V0ID0g
VUlOVF9NQVg7CisgICAgCisgICAgR2VuZXJpY09mZnNldCgpCisgICAgICAgIDogbV9vZmZzZXQo
aW52YWxpZE9mZnNldCkKKyAgICB7CisgICAgfQorICAgIAorICAgIGV4cGxpY2l0IEdlbmVyaWNP
ZmZzZXQodW5zaWduZWQgb2Zmc2V0KQorICAgICAgICA6IG1fb2Zmc2V0KG9mZnNldCkKKyAgICB7
CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gbV9vZmZz
ZXQgPT0gaW52YWxpZE9mZnNldDsgfQorICAgIAorICAgIHVuc2lnbmVkIG9mZnNldFVuY2hlY2tl
ZCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9vZmZzZXQ7CisgICAgfQorICAgIAor
ICAgIHVuc2lnbmVkIG9mZnNldCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQobV9vZmZz
ZXQgIT0gaW52YWxpZE9mZnNldCk7CisgICAgICAgIHJldHVybiBtX29mZnNldDsKKyAgICB9Cisg
ICAgCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFQmIG90aGVyKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG1fb2Zmc2V0ID09IG90aGVyLm9mZnNldFVuY2hlY2tlZCgpOworICAgIH0K
KyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgVCYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gbV9vZmZzZXQgIT0gb3RoZXIub2Zmc2V0VW5jaGVja2VkKCk7CisgICAgfQorICAg
IGJvb2wgb3BlcmF0b3I8KGNvbnN0IFQmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIG1fb2Zmc2V0IDwgb3RoZXIub2Zmc2V0VW5jaGVja2VkKCk7CisgICAgfQorICAgIGJvb2wg
b3BlcmF0b3I+KGNvbnN0IFQmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1f
b2Zmc2V0ID4gb3RoZXIub2Zmc2V0VW5jaGVja2VkKCk7CisgICAgfQorICAgIGJvb2wgb3BlcmF0
b3I8PShjb25zdCBUJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX29mZnNl
dCA8PSBvdGhlci5vZmZzZXRVbmNoZWNrZWQoKTsKKyAgICB9CisgICAgYm9vbCBvcGVyYXRvcj49
KGNvbnN0IFQmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fb2Zmc2V0ID49
IG90aGVyLm9mZnNldFVuY2hlY2tlZCgpOworICAgIH0KKyAgICAKKyAgICBUIG9wZXJhdG9yKyhp
bnQgdmFsdWUpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gVChvZmZzZXQoKSArIHZhbHVl
KTsKKyAgICB9CisgICAgVCBvcGVyYXRvci0oaW50IHZhbHVlKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIFQob2Zmc2V0KCkgLSB2YWx1ZSk7CisgICAgfQorICAgIFQmIG9wZXJhdG9yKz0o
aW50IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuICp0aGlzID0gKnRoaXMgKyB2YWx1ZTsK
KyAgICB9CisgICAgVCYgb3BlcmF0b3ItPShpbnQgdmFsdWUpCisgICAgeworICAgICAgICByZXR1
cm4gKnRoaXMgPSAqdGhpcyAtIHZhbHVlOworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgdW5z
aWduZWQgbV9vZmZzZXQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEdl
bmVyaWNPZmZzZXRfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Fy
Z3VtZW50c0l0ZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0FyZ3VtZW50c0l0ZXJhdG9yLmNwcAkocmV2aXNpb24gMTgwODc1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcmd1bWVudHNJdGVyYXRvci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxl
LCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTUg
QXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMzMsMTAgKzMzLDE4IEBAIG5hbWVzcGFjZSBKU0MgewogCiBjb25zdCBDbGFz
c0luZm8gSlNBcmd1bWVudHNJdGVyYXRvcjo6c19pbmZvID0geyAiQXJndW1lbnRzSXRlcmF0b3Ii
LCAmQmFzZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTQXJndW1lbnRzSXRlcmF0
b3IpIH07CiAKLXZvaWQgSlNBcmd1bWVudHNJdGVyYXRvcjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZt
LCBBcmd1bWVudHMqIGFyZ3VtZW50cykKK3ZvaWQgSlNBcmd1bWVudHNJdGVyYXRvcjo6ZmluaXNo
Q3JlYXRpb24oVk0mIHZtLCBKU09iamVjdCogYXJndW1lbnRzKQogewogICAgIEJhc2U6OmZpbmlz
aENyZWF0aW9uKHZtKTsKICAgICBtX2FyZ3VtZW50cy5zZXQodm0sIHRoaXMsIGFyZ3VtZW50cyk7
CiB9CiAKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJndW1lbnRzRnVuY0l0ZXJhdG9y
KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBKU09iamVjdCogdGhpc09iaiA9IGV4ZWMtPnRoaXNW
YWx1ZSgpLnRvVGhpcyhleGVjLCBTdHJpY3RNb2RlKS50b09iamVjdChleGVjKTsKKyAgICBpZiAo
IXRoaXNPYmotPmluaGVyaXRzKEFyZ3VtZW50czo6aW5mbygpKSAmJiAhdGhpc09iai0+aW5oZXJp
dHMoT3V0T2ZCYW5kQXJndW1lbnRzOjppbmZvKCkpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKHRocm93VHlwZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiQXR0ZW1wdGVkIHRvIHVz
ZSBBcmd1bWVudHMgaXRlcmF0b3Igb24gbm9uLUFyZ3VtZW50cyBvYmplY3QiKSkpOworICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoSlNBcmd1bWVudHNJdGVyYXRvcjo6Y3JlYXRlKGV4ZWMtPnZt
KCksIGV4ZWMtPmNhbGxlZSgpLT5nbG9iYWxPYmplY3QoKS0+YXJndW1lbnRzSXRlcmF0b3JTdHJ1
Y3R1cmUoKSwgdGhpc09iaikpOworfQorCiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0FyZ3VtZW50c0l0ZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNBcmd1bWVudHNJdGVyYXRvci5oCShyZXZpc2lvbiAxODA4NzUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FyZ3VtZW50c0l0ZXJhdG9yLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEz
IEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMs
IDIwMTUgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMjYsNyArMjYsNyBAQAogI2lmbmRlZiBKU0FyZ3VtZW50c0l0ZXJh
dG9yX2gKICNkZWZpbmUgSlNBcmd1bWVudHNJdGVyYXRvcl9oCiAKLSNpbmNsdWRlICJBcmd1bWVu
dHMuaCIKKyNpbmNsdWRlICJKU09iamVjdC5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtNDEs
NyArNDEsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwg
Z2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZs
YWdzKSwgaW5mbygpKTsKICAgICB9CiAKLSAgICBzdGF0aWMgSlNBcmd1bWVudHNJdGVyYXRvciog
Y3JlYXRlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEFyZ3VtZW50cyogYXJndW1lbnRz
KQorICAgIHN0YXRpYyBKU0FyZ3VtZW50c0l0ZXJhdG9yKiBjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgSlNPYmplY3QqIGFyZ3VtZW50cykKICAgICB7CiAgICAgICAgIEpTQXJn
dW1lbnRzSXRlcmF0b3IqIGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNB
cmd1bWVudHNJdGVyYXRvcj4odm0uaGVhcCkpIEpTQXJndW1lbnRzSXRlcmF0b3Iodm0sIHN0cnVj
dHVyZSk7CiAgICAgICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbih2bSwgYXJndW1lbnRzKTsK
QEAgLTUwLDExICs1MCwxMSBAQCBwdWJsaWM6CiAKICAgICBib29sIG5leHQoQ2FsbEZyYW1lKiBj
YWxsRnJhbWUsIEpTVmFsdWUmIHZhbHVlKQogICAgIHsKLSAgICAgICAgaWYgKG1fbmV4dEluZGV4
ID49IG1fYXJndW1lbnRzLT5sZW5ndGgoY2FsbEZyYW1lKSkKKyAgICAgICAgdW5zaWduZWQgbGVu
Z3RoID0KKyAgICAgICAgICAgIG1fYXJndW1lbnRzLT5nZXQoY2FsbEZyYW1lLCBjYWxsRnJhbWUt
PnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpLnRvVUludDMyKGNhbGxGcmFtZSk7CisgICAgICAgIGlm
IChtX25leHRJbmRleCA+PSBsZW5ndGgpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIHZhbHVlID0gbV9hcmd1bWVudHMtPnRyeUdldEFyZ3VtZW50KG1fbmV4dEluZGV4KyspOwot
ICAgICAgICBpZiAoIXZhbHVlKQotICAgICAgICAgICAgdmFsdWUgPSBqc1VuZGVmaW5lZCgpOwor
ICAgICAgICB2YWx1ZSA9IG1fYXJndW1lbnRzLT5nZXRJbmRleChjYWxsRnJhbWUsIG1fbmV4dElu
ZGV4KyspOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTY4LDEyICs2OCwxNCBA
QCBwcml2YXRlOgogICAgIHsKICAgICB9CiAKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwg
QXJndW1lbnRzKik7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIEpTT2JqZWN0Kik7CiAg
ICAgCi0gICAgV3JpdGVCYXJyaWVyPEFyZ3VtZW50cz4gbV9hcmd1bWVudHM7CisgICAgV3JpdGVC
YXJyaWVyPEpTT2JqZWN0PiBtX2FyZ3VtZW50czsKICAgICBzaXplX3QgbV9uZXh0SW5kZXg7CiB9
OwogCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFyZ3VtZW50c0Z1bmNJdGVyYXRvcihF
eGVjU3RhdGUqKTsKKwogfQogCiAjZW5kaWYgLy8gIWRlZmluZWQoSlNBcmd1bWVudHNJdGVyYXRv
cl9oKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNFbnZpcm9ubWVudFJl
Y29yZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNF
bnZpcm9ubWVudFJlY29yZC5jcHAJKHJldmlzaW9uIDE4MDg3NSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTRW52aXJvbm1lbnRSZWNvcmQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAxMiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgs
IDIwMTIsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0zNSw0ICszNSwxMiBAQCBuYW1lc3BhY2UgSlNDIHsKIAog
Y29uc3QgQ2xhc3NJbmZvIEpTRW52aXJvbm1lbnRSZWNvcmQ6OnNfaW5mbyA9IHsgIkVudmlyb25t
ZW50UmVjb3JkIiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU0Vudmly
b25tZW50UmVjb3JkKSB9OwogCit2b2lkIEpTRW52aXJvbm1lbnRSZWNvcmQ6OnZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBKU0Vudmlyb25t
ZW50UmVjb3JkKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTRW52aXJvbm1lbnRSZWNvcmQqPihjZWxs
KTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7Cisg
ICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKKyAgICB2aXNpdG9y
LmFwcGVuZFZhbHVlcyh0aGlzT2JqZWN0LT52YXJpYWJsZXMoKSwgbV9zeW1ib2xUYWJsZS0+c2Nv
cGVTaXplKCkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTRW52aXJvbm1lbnRSZWNvcmQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Vudmlyb25tZW50UmVjb3JkLmgJKHJldmlzaW9u
IDE4MDg3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRW52aXJvbm1lbnRS
ZWNvcmQuaAkod29ya2luZyBjb3B5KQpAQCAtNDYsMTEgKzQ2LDI2IEBAIGNsYXNzIEpTRW52aXJv
bm1lbnRSZWNvcmQgOiBwdWJsaWMgSlNTeW0KIHB1YmxpYzoKICAgICB0eXBlZGVmIEpTU3ltYm9s
VGFibGVPYmplY3QgQmFzZTsKIAotICAgIFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIHJlZ2lz
dGVycygpIHsgcmV0dXJuIG1fcmVnaXN0ZXJzOyB9Ci0gICAgV3JpdGVCYXJyaWVyQmFzZTxVbmtu
b3duPiYgcmVnaXN0ZXJBdChpbnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fcmVnaXN0ZXJzW2lu
ZGV4XTsgfQorICAgIFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIHZhcmlhYmxlcygpCisgICAg
eworICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4q
PihiaXR3aXNlX2Nhc3Q8Y2hhcio+KHRoaXMpICsgb2Zmc2V0T2ZWYXJpYWJsZXMoKSk7CisgICAg
fQorICAgIAorICAgIGJvb2wgaXNWYWxpZChTY29wZU9mZnNldCBvZmZzZXQpCisgICAgeworICAg
ICAgICByZXR1cm4gISFvZmZzZXQgJiYgb2Zmc2V0Lm9mZnNldCgpIDwgbV9zeW1ib2xUYWJsZS0+
c2NvcGVTaXplKCk7CisgICAgfQorICAgIAorICAgIFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4m
IHZhcmlhYmxlQXQoU2NvcGVPZmZzZXQgb2Zmc2V0KSBjb25zdAorICAgIHsKKyAgICAgICAgQVNT
RVJUKGlzVmFsaWQob2Zmc2V0KSk7CisgICAgICAgIHJldHVybiB2YXJpYWJsZXMoKVtvZmZzZXQu
b2Zmc2V0KCldOworICAgIH0KIAotICAgIFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIGNvbnN0
ICogYWRkcmVzc09mUmVnaXN0ZXJzKCkgY29uc3QgeyByZXR1cm4gJm1fcmVnaXN0ZXJzOyB9Ci0g
ICAgc3RhdGljIHNpemVfdCBvZmZzZXRPZlJlZ2lzdGVycygpIHsgcmV0dXJuIE9CSkVDVF9PRkZT
RVRPRihKU0Vudmlyb25tZW50UmVjb3JkLCBtX3JlZ2lzdGVycyk7IH0KKyAgICBzdGF0aWMgc2l6
ZV90IG9mZnNldE9mVmFyaWFibGVzKCkKKyAgICB7CisgICAgICAgIHJldHVybiBXVEY6OnJvdW5k
VXBUb011bHRpcGxlT2Y8c2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPik+KHNpemVvZihKU0Vu
dmlyb25tZW50UmVjb3JkKSk7CisgICAgfQogCiAgICAgREVDTEFSRV9JTkZPOwogCkBAIC02MCwx
NSArNzUsMzUgQEAgcHJvdGVjdGVkOgogICAgIEpTRW52aXJvbm1lbnRSZWNvcmQoCiAgICAgICAg
IFZNJiB2bSwKICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsCi0gICAgICAgIFJlZ2lzdGVy
KiByZWdpc3RlcnMsCiAgICAgICAgIEpTU2NvcGUqIHNjb3BlLAogICAgICAgICBTeW1ib2xUYWJs
ZSogc3ltYm9sVGFibGUpCiAgICAgICAgIDogQmFzZSh2bSwgc3RydWN0dXJlLCBzY29wZSwgc3lt
Ym9sVGFibGUpCi0gICAgICAgICwgbV9yZWdpc3RlcnMocmVpbnRlcnByZXRfY2FzdDxXcml0ZUJh
cnJpZXJCYXNlPFVua25vd24+Kj4ocmVnaXN0ZXJzKSkKICAgICB7CiAgICAgfQotCi0gICAgV3Jp
dGVCYXJyaWVyQmFzZTxVbmtub3duPiogbV9yZWdpc3RlcnM7IC8vICJyIiBpbiB0aGUgc3RhY2su
CisgICAgCisgICAgc3RhdGljIHNpemVfdCBhbGxvY2F0aW9uU2l6ZUZvclNjb3BlU2l6ZSh1bnNp
Z25lZCBzY29wZVNpemUpCisgICAgeworICAgICAgICByZXR1cm4gb2Zmc2V0T2ZWYXJpYWJsZXMo
KSArIHNjb3BlU2l6ZSAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pOworICAgIH0KKyAg
ICAKKyAgICBzdGF0aWMgc2l6ZV90IGFsbG9jYXRpb25TaXplKFN5bWJvbFRhYmxlKiBzeW1ib2xU
YWJsZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhbGxvY2F0aW9uU2l6ZUZvclNjb3BlU2l6ZShz
eW1ib2xUYWJsZS0+c2NvcGVTaXplKCkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGZpbmlzaENy
ZWF0aW9uVW5pbml0aWFsaXplZChWTSYgdm0pCisgICAgeworICAgICAgICBCYXNlOjpmaW5pc2hD
cmVhdGlvbih2bSk7CisgICAgfQorICAgIAorICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mIHZt
KQorICAgIHsKKyAgICAgICAgZmluaXNoQ3JlYXRpb25VbmluaXRpYWxpemVkKHZtKTsKKyAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gbV9zeW1ib2xUYWJsZS0+c2NvcGVTaXplKCk7IGktLTspIHsK
KyAgICAgICAgICAgIC8vIEZpbGxpbmcgdGhpcyB3aXRoIHVuZGVmaW5lZCBpcyB1c2VmdWwgYmVj
YXVzZSB0aGF0J3Mgd2hhdCB2YXJpYWJsZXMgc3RhcnQgb3V0IGFzLgorICAgICAgICAgICAgdmFy
aWFibGVBdChpKS5zZXRVbmRlZmluZWQoKTsKKyAgICAgICAgfQorICAgIH0KIH07CiAKIH0gLy8g
bmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMZXhp
Y2FsRW52aXJvbm1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTTGV4aWNhbEVudmlyb25tZW50LmNwcAkocmV2aXNpb24gMTgwODc1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMZXhpY2FsRW52aXJvbm1lbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAw
OSwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDgsIDIwMDksIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MCwyNyArNDAsMTkgQEAgbmFtZXNw
YWNlIEpTQyB7CiAKIGNvbnN0IENsYXNzSW5mbyBKU0xleGljYWxFbnZpcm9ubWVudDo6c19pbmZv
ID0geyAiSlNMZXhpY2FsRW52aXJvbm1lbnQiLCAmQmFzZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVU
SE9EX1RBQkxFKEpTTGV4aWNhbEVudmlyb25tZW50KSB9OwogCi12b2lkIEpTTGV4aWNhbEVudmly
b25tZW50Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Ci17Ci0gICAgSlNMZXhpY2FsRW52aXJvbm1lbnQqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNMZXhp
Y2FsRW52aXJvbm1lbnQqPihjZWxsKTsKLSAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRo
aXNPYmplY3QsIGluZm8oKSk7Ci0gICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2
aXNpdG9yKTsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdGhpc09iamVjdC0+c3ltYm9sVGFi
bGUoKS0+Y2FwdHVyZUNvdW50KCk7ICsraSkKLSAgICAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNP
YmplY3QtPnN0b3JhZ2UoKVtpXSk7Ci19Ci0KIGlubGluZSBib29sIEpTTGV4aWNhbEVudmlyb25t
ZW50OjpzeW1ib2xUYWJsZUdldChQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNs
b3QmIHNsb3QpCiB7CiAgICAgU3ltYm9sVGFibGVFbnRyeSBlbnRyeSA9IHN5bWJvbFRhYmxlKCkt
PmlubGluZUdldChwcm9wZXJ0eU5hbWUudWlkKCkpOwogICAgIGlmIChlbnRyeS5pc051bGwoKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAgU2NvcGVPZmZzZXQgb2Zmc2V0ID0gZW50cnku
c2NvcGVPZmZzZXQoKTsKKwogICAgIC8vIERlZmVuZCBhZ2FpbnN0IHRoZSBpbnNwZWN0b3IgYXNr
aW5nIGZvciBhIHZhciBhZnRlciBpdCBoYXMgYmVlbiBvcHRpbWl6ZWQgb3V0LgotICAgIGlmICgh
aXNWYWxpZChlbnRyeSkpCisgICAgaWYgKCFpc1ZhbGlkKG9mZnNldCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAotICAgIHNsb3Quc2V0VmFsdWUodGhpcywgRG9udEVudW0sIHJlZ2lzdGVyQXQo
ZW50cnkuZ2V0SW5kZXgoKSkuZ2V0KCkpOworICAgIHNsb3Quc2V0VmFsdWUodGhpcywgRG9udEVu
dW0sIHZhcmlhYmxlQXQob2Zmc2V0KS5nZXQoKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAg
LTcwLDExICs2MiwxMyBAQCBpbmxpbmUgYm9vbCBKU0xleGljYWxFbnZpcm9ubWVudDo6c3ltYm9s
CiAgICAgaWYgKGVudHJ5LmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICBT
Y29wZU9mZnNldCBvZmZzZXQgPSBlbnRyeS5zY29wZU9mZnNldCgpOworCiAgICAgLy8gRGVmZW5k
IGFnYWluc3QgdGhlIGluc3BlY3RvciBhc2tpbmcgZm9yIGEgdmFyIGFmdGVyIGl0IGhhcyBiZWVu
IG9wdGltaXplZCBvdXQuCi0gICAgaWYgKCFpc1ZhbGlkKGVudHJ5KSkKKyAgICBpZiAoIWlzVmFs
aWQob2Zmc2V0KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgZGVzY3JpcHRvci5zZXRE
ZXNjcmlwdG9yKHJlZ2lzdGVyQXQoZW50cnkuZ2V0SW5kZXgoKSkuZ2V0KCksIGVudHJ5LmdldEF0
dHJpYnV0ZXMoKSk7CisgICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKHZhcmlhYmxlQXQob2Zm
c2V0KS5nZXQoKSwgZW50cnkuZ2V0QXR0cmlidXRlcygpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IApAQCAtOTUsMTIgKzg5LDEzIEBAIGlubGluZSBib29sIEpTTGV4aWNhbEVudmlyb25tZW50Ojpz
eW1ib2wKICAgICAgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBTdHJpY3RNb2RlUmVh
ZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
ICAgIH0KKyAgICAgICAgU2NvcGVPZmZzZXQgb2Zmc2V0ID0gaXRlci0+dmFsdWUuc2NvcGVPZmZz
ZXQoKTsKICAgICAgICAgLy8gRGVmZW5kIGFnYWluc3QgdGhlIGluc3BlY3RvciBhc2tpbmcgZm9y
IGEgdmFyIGFmdGVyIGl0IGhhcyBiZWVuIG9wdGltaXplZCBvdXQuCi0gICAgICAgIGlmICghaXNW
YWxpZChpdGVyLT52YWx1ZSkpCisgICAgICAgIGlmICghaXNWYWxpZChvZmZzZXQpKQogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBpZiAoVmFyaWFibGVXYXRjaHBvaW50U2V0KiBz
ZXQgPSBpdGVyLT52YWx1ZS53YXRjaHBvaW50U2V0KCkpCi0gICAgICAgICAgICBzZXQtPmludmFs
aWRhdGUoVmFyaWFibGVXcml0ZUZpcmVEZXRhaWwodGhpcywgcHJvcGVydHlOYW1lKSk7IC8vIERv
bid0IG1lc3MgYXJvdW5kIC0gaWYgd2UgaGFkIGZvdW5kIHRoaXMgc3RhdGljYWxseSwgd2Ugd291
bGQgaGF2ZSBpbnZjYWxpZGF0ZWQgaXQuCi0gICAgICAgIHJlZyA9ICZyZWdpc3RlckF0KGl0ZXIt
PnZhbHVlLmdldEluZGV4KCkpOworICAgICAgICAgICAgc2V0LT5pbnZhbGlkYXRlKFZhcmlhYmxl
V3JpdGVGaXJlRGV0YWlsKHRoaXMsIHByb3BlcnR5TmFtZSkpOyAvLyBEb24ndCBtZXNzIGFyb3Vu
ZCAtIGlmIHdlIGhhZCBmb3VuZCB0aGlzIHN0YXRpY2FsbHksIHdlIHdvdWxkIGhhdmUgaW52YWxp
ZGF0ZWQgaXQuCisgICAgICAgIHJlZyA9ICZ2YXJpYWJsZUF0KG9mZnNldCk7CiAgICAgfQogICAg
IHJlZy0+c2V0KHZtLCB0aGlzLCB2YWx1ZSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC0xMTYsNyAr
MTExLDcgQEAgdm9pZCBKU0xleGljYWxFbnZpcm9ubWVudDo6Z2V0T3duTm9uSW5kZQogICAgICAg
ICBmb3IgKFN5bWJvbFRhYmxlOjpNYXA6Oml0ZXJhdG9yIGl0ID0gdGhpc09iamVjdC0+c3ltYm9s
VGFibGUoKS0+YmVnaW4obG9ja2VyKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgICAgICBp
ZiAoaXQtPnZhbHVlLmdldEF0dHJpYnV0ZXMoKSAmIERvbnRFbnVtICYmICFzaG91bGRJbmNsdWRl
RG9udEVudW1Qcm9wZXJ0aWVzKG1vZGUpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICAgICAgaWYgKCF0aGlzT2JqZWN0LT5pc1ZhbGlkKGl0LT52YWx1ZSkpCisgICAgICAgICAg
ICBpZiAoIXRoaXNPYmplY3QtPmlzVmFsaWQoaXQtPnZhbHVlLnNjb3BlT2Zmc2V0KCkpKQogICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRl
bnRpZmllcihleGVjLCBpdC0+a2V5LmdldCgpKSk7CiAgICAgICAgIH0KQEAgLTEzNywxMSArMTMy
LDEzIEBAIGlubGluZSBib29sIEpTTGV4aWNhbEVudmlyb25tZW50OjpzeW1ib2wKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgU3ltYm9sVGFibGVFbnRyeSYgZW50cnkgPSBpdGVy
LT52YWx1ZTsKICAgICAgICAgQVNTRVJUKCFlbnRyeS5pc051bGwoKSk7Ci0gICAgICAgIGlmICgh
aXNWYWxpZChlbnRyeSkpCisgICAgICAgIAorICAgICAgICBTY29wZU9mZnNldCBvZmZzZXQgPSBl
bnRyeS5zY29wZU9mZnNldCgpOworICAgICAgICBpZiAoIWlzVmFsaWQob2Zmc2V0KSkKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgCiAgICAgICAgIGVudHJ5LnNldEF0dHJpYnV0
ZXMoYXR0cmlidXRlcyk7Ci0gICAgICAgIHJlZyA9ICZyZWdpc3RlckF0KGVudHJ5LmdldEluZGV4
KCkpOworICAgICAgICByZWcgPSAmdmFyaWFibGVBdChvZmZzZXQpOwogICAgIH0KICAgICByZWct
PnNldCh2bSwgdGhpcywgdmFsdWUpOwogICAgIHJldHVybiB0cnVlOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMZXhpY2FsRW52aXJvbm1lbnQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xleGljYWxFbnZpcm9ubWVudC5oCShy
ZXZpc2lvbiAxODA4NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xleGlj
YWxFbnZpcm9ubWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwOCwgMjAwOSwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDksIDIwMTMtMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTQxLDMzICs0MSwyNyBAQCBjbGFzcyBSZWdpc3RlcjsKICAgICAKIGNsYXNzIEpTTGV4aWNh
bEVudmlyb25tZW50IDogcHVibGljIEpTRW52aXJvbm1lbnRSZWNvcmQgewogcHJpdmF0ZToKLSAg
ICBKU0xleGljYWxFbnZpcm9ubWVudChWTSYsIENhbGxGcmFtZSosIFJlZ2lzdGVyKiwgSlNTY29w
ZSosIENvZGVCbG9jayopOworICAgIEpTTGV4aWNhbEVudmlyb25tZW50KFZNJiwgU3RydWN0dXJl
KiwgSlNTY29wZSosIFN5bWJvbFRhYmxlKik7CiAgICAgCiBwdWJsaWM6CiAgICAgdHlwZWRlZiBK
U0Vudmlyb25tZW50UmVjb3JkIEJhc2U7CiAKLSAgICBzdGF0aWMgSlNMZXhpY2FsRW52aXJvbm1l
bnQqIGNyZWF0ZShWTSYgdm0sIENhbGxGcmFtZSogY2FsbEZyYW1lLCBSZWdpc3RlciogcmVnaXN0
ZXJzLCBKU1Njb3BlKiBjdXJyZW50U2NvcGUsIENvZGVCbG9jayogY29kZUJsb2NrKQorICAgIHN0
YXRpYyBKU0xleGljYWxFbnZpcm9ubWVudCogY3JlYXRlKAorICAgICAgICBWTSYgdm0sIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTU2NvcGUqIGN1cnJlbnRTY29wZSwgU3ltYm9sVGFi
bGUqIHN5bWJvbFRhYmxlKQogICAgIHsKLSAgICAgICAgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxl
ID0gY29kZUJsb2NrLT5zeW1ib2xUYWJsZSgpOwotICAgICAgICBBU1NFUlQoY29kZUJsb2NrLT5j
b2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSk7Ci0gICAgICAgIEpTTGV4aWNhbEVudmlyb25tZW50
KiBsZXhpY2FsRW52aXJvbm1lbnQgPSBuZXcgKAotICAgICAgICAgICAgTm90TnVsbCwKLSAgICAg
ICAgICAgIGFsbG9jYXRlQ2VsbDxKU0xleGljYWxFbnZpcm9ubWVudD4oCi0gICAgICAgICAgICAg
ICAgdm0uaGVhcCwKLSAgICAgICAgICAgICAgICBhbGxvY2F0aW9uU2l6ZShzeW1ib2xUYWJsZSkK
LSAgICAgICAgICAgICkKLSAgICAgICAgKSBKU0xleGljYWxFbnZpcm9ubWVudCh2bSwgY2FsbEZy
YW1lLCByZWdpc3RlcnMsIGN1cnJlbnRTY29wZSwgY29kZUJsb2NrKTsKLSAgICAgICAgbGV4aWNh
bEVudmlyb25tZW50LT5maW5pc2hDcmVhdGlvbih2bSk7Ci0gICAgICAgIHJldHVybiBsZXhpY2Fs
RW52aXJvbm1lbnQ7CisgICAgICAgIEpTTGV4aWNhbEVudmlyb25tZW50KiByZXN1bHQgPQorICAg
ICAgICAgICAgbmV3IChOb3ROdWxsLCBhbGxvY2F0aW9uU2l6ZShzeW1ib2xUYWJsZSkpCisgICAg
ICAgICAgICBKU0xleGljYWxFbnZpcm9ubWVudCh2bSwgZ2xvYmFsT2JqZWN0LT5hY3RpdmF0aW9u
U3RydWN0dXJlKCksIGN1cnJlbnRTY29wZSwgc3ltYm9sVGFibGUpOworICAgICAgICByZXN1bHQt
PmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICB9Ci0gICAgICAgIAorICAgIAogICAgIHN0YXRpYyBK
U0xleGljYWxFbnZpcm9ubWVudCogY3JlYXRlKFZNJiB2bSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUs
IEpTU2NvcGUqIGN1cnJlbnRTY29wZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2spCiAgICAgewotICAg
ICAgICByZXR1cm4gY3JlYXRlKHZtLCBjYWxsRnJhbWUsIGNhbGxGcmFtZS0+cmVnaXN0ZXJzKCkg
KyBjb2RlQmxvY2stPmZyYW1lUG9pbnRlck9mZnNldFRvR2V0QWN0aXZhdGlvblJlZ2lzdGVycygp
LCBjdXJyZW50U2NvcGUsIGNvZGVCbG9jayk7CisgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QgPSBjYWxsRnJhbWUtPmxleGljYWxHbG9iYWxPYmplY3QoKTsKKyAgICAgICAgU3lt
Ym9sVGFibGUqIHN5bWJvbFRhYmxlID0gY29kZUJsb2NrLT5zeW1ib2xUYWJsZSgpOworICAgICAg
ICByZXR1cm4gY3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIGN1cnJlbnRTY29wZSwgc3ltYm9sdGFi
bGUpOwogICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xv
dFZpc2l0b3ImKTsKLQorICAgICAgICAKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNs
b3QoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwog
ICAgIHN0YXRpYyB2b2lkIGdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4
ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKIApAQCAtODEs
MTIgKzc1LDYgQEAgcHVibGljOgogCiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0
dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkgeyByZXR1cm4gU3RydWN0
dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwganNOdWxsKCksIFR5cGVJbmZvKEFjdGl2YXRp
b25PYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7IH0KIAotICAgIFdyaXRlQmFy
cmllckJhc2U8VW5rbm93bj4mIHJlZ2lzdGVyQXQoaW50KSBjb25zdDsKLSAgICBib29sIGlzVmFs
aWRJbmRleChpbnQpIGNvbnN0OwotICAgIGJvb2wgaXNWYWxpZChjb25zdCBTeW1ib2xUYWJsZUVu
dHJ5JikgY29uc3Q7Ci0gICAgaW50IHJlZ2lzdGVyc09mZnNldCgpOwotICAgIHN0YXRpYyBpbnQg
cmVnaXN0ZXJzT2Zmc2V0KFN5bWJvbFRhYmxlKik7Ci0KIHByb3RlY3RlZDoKICAgICBzdGF0aWMg
Y29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNs
b3QgfCBPdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzIHwgQmFzZTo6U3RydWN0dXJlRmxhZ3M7CiAK
QEAgLTk2LDMyICs4NCwxMyBAQCBwcml2YXRlOgogICAgIGJvb2wgc3ltYm9sVGFibGVHZXQoUHJv
cGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmLCBib29sJiBzbG90SXNXcml0ZWFibGUpOwogICAgIGJv
b2wgc3ltYm9sVGFibGVQdXQoRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBib29s
IHNob3VsZFRocm93KTsKICAgICBib29sIHN5bWJvbFRhYmxlUHV0V2l0aEF0dHJpYnV0ZXMoVk0m
LCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpOwotCi0gICAgc3Rh
dGljIHNpemVfdCBhbGxvY2F0aW9uU2l6ZShTeW1ib2xUYWJsZSopOwotICAgIHN0YXRpYyBzaXpl
X3Qgc3RvcmFnZU9mZnNldCgpOwotCi0gICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiBzdG9yYWdl
KCk7IC8vIGNhcHR1cmVDb3VudCgpIG51bWJlciBvZiByZWdpc3RlcnMuCiB9OwogCi1pbmxpbmUg
SlNMZXhpY2FsRW52aXJvbm1lbnQ6OkpTTGV4aWNhbEVudmlyb25tZW50KFZNJiB2bSwgQ2FsbEZy
YW1lKiBjYWxsRnJhbWUsIFJlZ2lzdGVyKiByZWdpc3RlcnMsIEpTU2NvcGUqIGN1cnJlbnRTY29w
ZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2spCi0gICAgOiBCYXNlKAotICAgICAgICB2bSwKLSAgICAg
ICAgY2FsbEZyYW1lLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmFjdGl2YXRpb25TdHJ1Y3R1cmUo
KSwKLSAgICAgICAgcmVnaXN0ZXJzLAotICAgICAgICBjdXJyZW50U2NvcGUsCi0gICAgICAgIGNv
ZGVCbG9jay0+c3ltYm9sVGFibGUoKSkKK2lubGluZSBKU0xleGljYWxFbnZpcm9ubWVudDo6SlNM
ZXhpY2FsRW52aXJvbm1lbnQoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNTY29wZSog
Y3VycmVudFNjb3BlLCBTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUpCisgICAgOiBCYXNlKHZtLCBz
dHJ1Y3R1cmUsIGN1cnJlbnRTY29wZSwgc3ltYm9sVGFibGUpCiB7Ci0gICAgU3ltYm9sVGFibGUq
IHN5bWJvbFRhYmxlID0gY29kZUJsb2NrLT5zeW1ib2xUYWJsZSgpOwotICAgIFdyaXRlQmFycmll
cjxVbmtub3duPiogc3RvcmFnZSA9IHRoaXMtPnN0b3JhZ2UoKTsKLSAgICBzaXplX3QgY2FwdHVy
ZUNvdW50ID0gc3ltYm9sVGFibGUtPmNhcHR1cmVDb3VudCgpOwotICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgY2FwdHVyZUNvdW50OyArK2kpCi0gICAgICAgIG5ldyAoTm90TnVsbCwgJnN0b3Jh
Z2VbaV0pIFdyaXRlQmFycmllcjxVbmtub3duPihVbmRlZmluZWRXcml0ZUJhcnJpZXJUYWcpOwot
ICAgIG1fcmVnaXN0ZXJzID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8V3JpdGVCYXJyaWVyQmFzZTxV
bmtub3duPio+KAotICAgICAgICByZWludGVycHJldF9jYXN0PGNoYXIqPih0aGlzKSArIHJlZ2lz
dGVyc09mZnNldChzeW1ib2xUYWJsZSkpOwogfQogCi1KU0xleGljYWxFbnZpcm9ubWVudCogYXNB
Y3RpdmF0aW9uKEpTVmFsdWUpOwotCiBpbmxpbmUgSlNMZXhpY2FsRW52aXJvbm1lbnQqIGFzQWN0
aXZhdGlvbihKU1ZhbHVlIHZhbHVlKQogewogICAgIEFTU0VSVChhc09iamVjdCh2YWx1ZSktPmlu
aGVyaXRzKEpTTGV4aWNhbEVudmlyb25tZW50OjppbmZvKCkpKTsKQEAgLTEzMyw0OSArMTAyLDYg
QEAgQUxXQVlTX0lOTElORSBKU0xleGljYWxFbnZpcm9ubWVudCogUmVnaQogICAgIHJldHVybiBh
c0FjdGl2YXRpb24oanNWYWx1ZSgpKTsKIH0KIAotaW5saW5lIGludCBKU0xleGljYWxFbnZpcm9u
bWVudDo6cmVnaXN0ZXJzT2Zmc2V0KFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSkKLXsKLSAgICBy
ZXR1cm4gc3RvcmFnZU9mZnNldCgpICsgKChzeW1ib2xUYWJsZS0+Y2FwdHVyZUNvdW50KCkgLSBz
eW1ib2xUYWJsZS0+Y2FwdHVyZVN0YXJ0KCkgIC0gMSkgKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVu
a25vd24+KSk7Ci19Ci0KLWlubGluZSBzaXplX3QgSlNMZXhpY2FsRW52aXJvbm1lbnQ6OnN0b3Jh
Z2VPZmZzZXQoKQotewotICAgIHJldHVybiBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Y8c2l6ZW9m
KFdyaXRlQmFycmllcjxVbmtub3duPik+KHNpemVvZihKU0xleGljYWxFbnZpcm9ubWVudCkpOwot
fQotCi1pbmxpbmUgV3JpdGVCYXJyaWVyPFVua25vd24+KiBKU0xleGljYWxFbnZpcm9ubWVudDo6
c3RvcmFnZSgpCi17Ci0gICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3RfcHRyPFdyaXRlQmFycmll
cjxVbmtub3duPio+KAotICAgICAgICByZWludGVycHJldF9jYXN0PGNoYXIqPih0aGlzKSArIHN0
b3JhZ2VPZmZzZXQoKSk7Ci19Ci0KLWlubGluZSBzaXplX3QgSlNMZXhpY2FsRW52aXJvbm1lbnQ6
OmFsbG9jYXRpb25TaXplKFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSkKLXsKLSAgICBzaXplX3Qg
b2JqZWN0U2l6ZUluQnl0ZXMgPSBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Y8c2l6ZW9mKFdyaXRl
QmFycmllcjxVbmtub3duPik+KHNpemVvZihKU0xleGljYWxFbnZpcm9ubWVudCkpOwotICAgIHNp
emVfdCBzdG9yYWdlU2l6ZUluQnl0ZXMgPSBzeW1ib2xUYWJsZS0+Y2FwdHVyZUNvdW50KCkgKiBz
aXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KTsKLSAgICByZXR1cm4gb2JqZWN0U2l6ZUluQnl0
ZXMgKyBzdG9yYWdlU2l6ZUluQnl0ZXM7Ci19Ci0KLWlubGluZSBib29sIEpTTGV4aWNhbEVudmly
b25tZW50Ojppc1ZhbGlkSW5kZXgoaW50IGluZGV4KSBjb25zdAotewotICAgIGlmIChpbmRleCA+
IHN5bWJvbFRhYmxlKCktPmNhcHR1cmVTdGFydCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgaWYgKGluZGV4IDw9IHN5bWJvbFRhYmxlKCktPmNhcHR1cmVFbmQoKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIHJldHVybiB0cnVlOwotfQotCi1pbmxpbmUgYm9vbCBKU0xleGljYWxF
bnZpcm9ubWVudDo6aXNWYWxpZChjb25zdCBTeW1ib2xUYWJsZUVudHJ5JiBlbnRyeSkgY29uc3QK
LXsKLSAgICByZXR1cm4gaXNWYWxpZEluZGV4KGVudHJ5LmdldEluZGV4KCkpOwotfQotCi1pbmxp
bmUgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiYgSlNMZXhpY2FsRW52aXJvbm1lbnQ6OnJlZ2lz
dGVyQXQoaW50IGluZGV4KSBjb25zdAotewotICAgIEFTU0VSVChpc1ZhbGlkSW5kZXgoaW5kZXgp
KTsKLSAgICByZXR1cm4gQmFzZTo6cmVnaXN0ZXJBdChpbmRleCk7Ci19Ci0KIH0gLy8gbmFtZXNw
YWNlIEpTQwogCiAjZW5kaWYgLy8gSlNMZXhpY2FsRW52aXJvbm1lbnRfaApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNOYW1lU2NvcGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTmFtZVNjb3BlLmNwcAkocmV2aXNpb24gMTgw
ODc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNOYW1lU2NvcGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00NywxNCArNDcsNiBAQCBKU05hbWVTY29wZSogSlNOYW1lU2NvcGU6
OmNyZWF0ZShWTSYgdm0sCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLXZvaWQgSlNOYW1lU2Nv
cGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKLXsK
LSAgICBKU05hbWVTY29wZSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU05hbWVTY29wZSo+KGNlbGwp
OwotICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKLSAg
ICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwotICAgIHZpc2l0b3Iu
YXBwZW5kKCZ0aGlzT2JqZWN0LT5tX3JlZ2lzdGVyU3RvcmUpOwotfQotCiBKU1ZhbHVlIEpTTmFt
ZVNjb3BlOjp0b1RoaXMoSlNDZWxsKiwgRXhlY1N0YXRlKiBleGVjLCBFQ01BTW9kZSBlY21hTW9k
ZSkKIHsKICAgICBpZiAoZWNtYU1vZGUgPT0gU3RyaWN0TW9kZSkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTTmFtZVNjb3BlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNOYW1lU2NvcGUuaAkocmV2aXNpb24gMTgwODc1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNOYW1lU2NvcGUuaAkod29ya2luZyBjb3B5
KQpAQCAtNDQsMzggKzQ0LDM3IEBAIHB1YmxpYzoKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgog
ICAgIHN0YXRpYyBUKiBjcmVhdGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU1Njb3BlKiBjdXJyZW50U2NvcGUsIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSwgSlNWYWx1
ZSB2YWx1ZSkKICAgICB7Ci0gICAgICAgIFQqIHNjb3BlT2JqZWN0ID0gbmV3IChOb3ROdWxsLCBh
bGxvY2F0ZUNlbGw8VD4odm0uaGVhcCkpIFQodm0sIGdsb2JhbE9iamVjdCwgY3VycmVudFNjb3Bl
LCBzeW1ib2xUYWJsZSk7CisgICAgICAgIFQqIHNjb3BlT2JqZWN0ID0gbmV3ICgKKyAgICAgICAg
ICAgIE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxUPih2bS5oZWFwLCBhbGxvY2F0aW9uU2l6ZUZvclNj
b3BlU2l6ZSgxKSkKKyAgICAgICAgICAgIFQodm0sIGdsb2JhbE9iamVjdCwgY3VycmVudFNjb3Bl
LCBzeW1ib2xUYWJsZSk7CiAgICAgICAgIHNjb3BlT2JqZWN0LT5maW5pc2hDcmVhdGlvbih2bSwg
dmFsdWUpOwogICAgICAgICByZXR1cm4gc2NvcGVPYmplY3Q7CiAgICAgfQogICAgIAogICAgIHN0
YXRpYyBKU05hbWVTY29wZSogY3JlYXRlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1Njb3BlKiBj
dXJyZW50U2NvcGUsIFN5bWJvbFRhYmxlKiwgSlNWYWx1ZSwgVHlwZSk7CiAKLSAgICBzdGF0aWMg
dm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAgICAgc3RhdGljIEpT
VmFsdWUgdG9UaGlzKEpTQ2VsbCosIEV4ZWNTdGF0ZSosIEVDTUFNb2RlKTsKICAgICBzdGF0aWMg
Ym9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5h
bWUsIFByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyB2b2lkIHB1dChKU0NlbGwqLCBFeGVjU3Rh
dGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOwogCiAgICAgREVD
TEFSRV9JTkZPOwogCi0gICAgSlNWYWx1ZSB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVnaXN0
ZXJTdG9yZS5nZXQoKTsgfQorICAgIEpTVmFsdWUgdmFsdWUoKSBjb25zdCB7IHJldHVybiB2YXJp
YWJsZUF0KDApLmdldCgpOyB9CiAKIHByb3RlY3RlZDoKICAgICB2b2lkIGZpbmlzaENyZWF0aW9u
KFZNJiB2bSwgSlNWYWx1ZSB2YWx1ZSkKICAgICB7Ci0gICAgICAgIEJhc2U6OmZpbmlzaENyZWF0
aW9uKHZtKTsKLSAgICAgICAgbV9yZWdpc3RlclN0b3JlLnNldCh2bSwgdGhpcywgdmFsdWUpOwor
ICAgICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvblVuaW5pdGlhbGl6ZWQodm0pOworICAgICAgICB2
YXJpYWJsZUF0KDApLnNldCh2bSwgdGhpcywgdmFsdWUpOwogICAgIH0KIAogICAgIHN0YXRpYyBj
b25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xv
dCB8IEJhc2U6OlN0cnVjdHVyZUZsYWdzOwogCiAgICAgSlNOYW1lU2NvcGUoVk0mIHZtLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgSlNTY29wZSogbmV4dCwgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxl
KQotICAgICAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSwgcmVpbnRlcnByZXRfY2FzdDxSZWdpc3Rl
cio+KCZtX3JlZ2lzdGVyU3RvcmUgKyAxKSwgbmV4dCwgc3ltYm9sVGFibGUpCisgICAgICAgIDog
QmFzZSh2bSwgc3RydWN0dXJlLCBuZXh0LCBzeW1ib2xUYWJsZSkKICAgICB7CisgICAgICAgIEFT
U0VSVChzeW1ib2xUYWJsZS0+c2NvcGVTaXplKCkgPT0gMSk7CiAgICAgfQotCi1wcml2YXRlOgot
ICAgIFdyaXRlQmFycmllcjxVbmtub3duPiBtX3JlZ2lzdGVyU3RvcmU7CiB9OwogCiB9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21l
bnRlZFZhcmlhYmxlT2JqZWN0LmNwcAkocmV2aXNpb24gMTgwODc1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDEzIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAx
MywgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTMzLDMyICszMywzMCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAot
aW50IEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3Q6OmZpbmRSZWdpc3RlckluZGV4KHZvaWQqIHJl
Z2lzdGVyQWRkcmVzcykKK1Njb3BlT2Zmc2V0IEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3Q6OmZp
bmRSZWdpc3RlckluZGV4KHZvaWQqIHJlZ2lzdGVyQWRkcmVzcykKIHsKICAgICBDb25jdXJyZW50
SklUTG9ja2VyIGxvY2tlcihtX2xvY2spOwogICAgIAotICAgIGZvciAoaW50IGkgPSBtX3JlZ2lz
dGVycy5zaXplKCk7IGktLTspIHsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX3JlZ2lzdGVycy5z
aXplKCk7IGktLTspIHsKICAgICAgICAgaWYgKCZtX3JlZ2lzdGVyc1tpXSAhPSByZWdpc3RlckFk
ZHJlc3MpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgcmV0dXJuIGk7CisgICAgICAg
IHJldHVybiBTY29wZU9mZnNldChpKTsKICAgICB9CiAgICAgQ1JBU0goKTsKLSAgICByZXR1cm4g
LTE7CisgICAgcmV0dXJuIFNjb3BlT2Zmc2V0KCk7CiB9CiAKLWludCBKU1NlZ21lbnRlZFZhcmlh
YmxlT2JqZWN0OjphZGRSZWdpc3RlcnMoaW50IG51bWJlck9mUmVnaXN0ZXJzVG9BZGQpCitTY29w
ZU9mZnNldCBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0OjphZGRSZWdpc3RlcnModW5zaWduZWQg
bnVtYmVyT2ZSZWdpc3RlcnNUb0FkZCkKIHsKICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tl
cihtX2xvY2spOwogICAgIAotICAgIEFTU0VSVChudW1iZXJPZlJlZ2lzdGVyc1RvQWRkID49IDAp
OwotICAgIAogICAgIHNpemVfdCBvbGRTaXplID0gbV9yZWdpc3RlcnMuc2l6ZSgpOwogICAgIG1f
cmVnaXN0ZXJzLmdyb3cob2xkU2l6ZSArIG51bWJlck9mUmVnaXN0ZXJzVG9BZGQpOwogICAgIAog
ICAgIGZvciAoc2l6ZV90IGkgPSBudW1iZXJPZlJlZ2lzdGVyc1RvQWRkOyBpLS07KQogICAgICAg
ICBtX3JlZ2lzdGVyc1tvbGRTaXplICsgaV0uc2V0V2l0aG91dFdyaXRlQmFycmllcihqc1VuZGVm
aW5lZCgpKTsKICAgICAKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PihvbGRTaXplKTsKKyAg
ICByZXR1cm4gU2NvcGVPZmZzZXQob2xkU2l6ZSk7CiB9CiAKIHZvaWQgSlNTZWdtZW50ZWRWYXJp
YWJsZU9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiBzbG90
VmlzaXRvcikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVk
VmFyaWFibGVPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmgJKHJldmlzaW9uIDE4MDg3NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuaAko
d29ya2luZyBjb3B5KQpAQCAtNTcsMjQgKzU3LDIzIEBAIGNsYXNzIEpTU2VnbWVudGVkVmFyaWFi
bGVPYmplY3QgOiBwdWJsaWMKIHB1YmxpYzoKICAgICB0eXBlZGVmIEpTU3ltYm9sVGFibGVPYmpl
Y3QgQmFzZTsKIAotICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgcmVnaXN0ZXJBdChpbnQgaW5k
ZXgpIHsgcmV0dXJuIG1fcmVnaXN0ZXJzW2luZGV4XTsgfQorICAgIFdyaXRlQmFycmllcjxVbmtu
b3duPiYgdmFyaWFibGVBdChTY29wZU9mZnNldCBvZmZzZXQpIHsgcmV0dXJuIG1fdmFyaWFibGVz
W29mZnNldC5vZmZzZXQoKV07IH0KICAgICAKICAgICAvLyBUaGlzIGlzIGEgc2xvdyBtZXRob2Qg
Y2FsbCwgd2hpY2ggc2VhcmNoZXMgdGhlIHJlZ2lzdGVyIGJhbmsgdG8gZmluZCB0aGUgaW5kZXgK
ICAgICAvLyBnaXZlbiBhIHBvaW50ZXIuIEl0IHdpbGwgQ1JBU0goKSBpZiBpdCBkb2VzIG5vdCBm
aW5kIHRoZSByZWdpc3Rlci4gT25seSB1c2UgdGhpcwogICAgIC8vIGluIGRlYnVnIGNvZGUgKGxp
a2UgYnl0ZWNvZGUgZHVtcGluZykuCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgaW50IGZpbmRSZWdp
c3RlckluZGV4KHZvaWQqKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBTY29wZU9mZnNldCBmaW5k
UmVnaXN0ZXJJbmRleCh2b2lkKik7CiAgICAgCi0gICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiBh
c3NlcnRSZWdpc3RlcklzSW5UaGlzT2JqZWN0KFdyaXRlQmFycmllcjxVbmtub3duPiogcmVnaXN0
ZXJQb2ludGVyKQorICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogYXNzZXJ0VmFyaWFibGVJc0lu
VGhpc09iamVjdChXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHZhcmlhYmxlUG9pbnRlcikKICAgICB7
Ci0jaWYgIUFTU0VSVF9ESVNBQkxFRAotICAgICAgICBmaW5kUmVnaXN0ZXJJbmRleChyZWdpc3Rl
clBvaW50ZXIpOwotI2VuZGlmCisgICAgICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKQorICAgICAg
ICAgICAgZmluZFJlZ2lzdGVySW5kZXgocmVnaXN0ZXJQb2ludGVyKTsKICAgICAgICAgcmV0dXJu
IHJlZ2lzdGVyUG9pbnRlcjsKICAgICB9CiAgICAgCiAgICAgLy8gQWRkcyBudW1iZXJPZlJlZ2lz
dGVyc1RvQWRkIHJlZ2lzdGVycywgaW5pdGlhbGl6ZXMgdGhlbSB0byBVbmRlZmluZWQsIGFuZCBy
ZXR1cm5zCiAgICAgLy8gdGhlIGluZGV4IG9mIHRoZSBmaXJzdCBvbmUgYWRkZWQuCi0gICAgSlNf
RVhQT1JUX1BSSVZBVEUgaW50IGFkZFJlZ2lzdGVycyhpbnQgbnVtYmVyT2ZSZWdpc3RlcnNUb0Fk
ZCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgU2NvcGVPZmZzZXQgYWRkUmVnaXN0ZXJzKHVuc2ln
bmVkIG51bWJlck9mUmVnaXN0ZXJzVG9BZGQpOwogICAgIAogICAgIEpTX0VYUE9SVF9QUklWQVRF
IHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVP
YmplY3QuaAkocmV2aXNpb24gMTgwODc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNTeW1ib2xUYWJsZU9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC03OCw3ICs3OCw3IEBA
IGlubGluZSBib29sIHN5bWJvbFRhYmxlR2V0KAogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
U3ltYm9sVGFibGVFbnRyeTo6RmFzdCBlbnRyeSA9IGl0ZXItPnZhbHVlOwogICAgIEFTU0VSVCgh
ZW50cnkuaXNOdWxsKCkpOwotICAgIHNsb3Quc2V0VmFsdWUob2JqZWN0LCBlbnRyeS5nZXRBdHRy
aWJ1dGVzKCkgfCBEb250RGVsZXRlLCBvYmplY3QtPnJlZ2lzdGVyQXQoZW50cnkuZ2V0SW5kZXgo
KSkuZ2V0KCkpOworICAgIHNsb3Quc2V0VmFsdWUob2JqZWN0LCBlbnRyeS5nZXRBdHRyaWJ1dGVz
KCkgfCBEb250RGVsZXRlLCBvYmplY3QtPnZhcmlhYmxlQXQoZW50cnkuc2NvcGVPZmZzZXQoKSku
Z2V0KCkpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC05NCw3ICs5NCw3IEBAIGlubGluZSBi
b29sIHN5bWJvbFRhYmxlR2V0KAogICAgIFN5bWJvbFRhYmxlRW50cnk6OkZhc3QgZW50cnkgPSBp
dGVyLT52YWx1ZTsKICAgICBBU1NFUlQoIWVudHJ5LmlzTnVsbCgpKTsKICAgICBkZXNjcmlwdG9y
LnNldERlc2NyaXB0b3IoCi0gICAgICAgIG9iamVjdC0+cmVnaXN0ZXJBdChlbnRyeS5nZXRJbmRl
eCgpKS5nZXQoKSwgZW50cnkuZ2V0QXR0cmlidXRlcygpIHwgRG9udERlbGV0ZSk7CisgICAgICAg
IG9iamVjdC0+dmFyaWFibGVBdChlbnRyeS5zY29wZU9mZnNldCgpKS5nZXQoKSwgZW50cnkuZ2V0
QXR0cmlidXRlcygpIHwgRG9udERlbGV0ZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTEx
MCw3ICsxMTAsNyBAQCBpbmxpbmUgYm9vbCBzeW1ib2xUYWJsZUdldCgKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIFN5bWJvbFRhYmxlRW50cnk6OkZhc3QgZW50cnkgPSBpdGVyLT52YWx1ZTsK
ICAgICBBU1NFUlQoIWVudHJ5LmlzTnVsbCgpKTsKLSAgICBzbG90LnNldFZhbHVlKG9iamVjdCwg
ZW50cnkuZ2V0QXR0cmlidXRlcygpIHwgRG9udERlbGV0ZSwgb2JqZWN0LT5yZWdpc3RlckF0KGVu
dHJ5LmdldEluZGV4KCkpLmdldCgpKTsKKyAgICBzbG90LnNldFZhbHVlKG9iamVjdCwgZW50cnku
Z2V0QXR0cmlidXRlcygpIHwgRG9udERlbGV0ZSwgb2JqZWN0LT52YXJpYWJsZUF0KGVudHJ5LnNj
b3BlT2Zmc2V0KCkpLmdldCgpKTsKICAgICBzbG90SXNXcml0ZWFibGUgPSAhZW50cnkuaXNSZWFk
T25seSgpOwogICAgIHJldHVybiB0cnVlOwogfQpAQCAtMTQ1LDcgKzE0NSw3IEBAIGlubGluZSBi
b29sIHN5bWJvbFRhYmxlUHV0KAogICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTEzNDYwMQogICAgICAgICAgICAgc2V0LT5ub3RpZnlXcml0ZSh2
bSwgdmFsdWUsIG9iamVjdCwgcHJvcGVydHlOYW1lKTsKICAgICAgICAgfQotICAgICAgICByZWcg
PSAmb2JqZWN0LT5yZWdpc3RlckF0KGZhc3RFbnRyeS5nZXRJbmRleCgpKTsKKyAgICAgICAgcmVn
ID0gJm9iamVjdC0+dmFyaWFibGVBdChmYXN0RW50cnkuc2NvcGVPZmZzZXQoKSk7CiAgICAgfQog
ICAgIC8vIEknZCBwcmVmZXIgd2Ugbm90IGhvbGQgbG9jayB3aGlsZSBleGVjdXRpbmcgYmFycmll
cnMsIHNpbmNlIEkgcHJlZmVyIHRvIHJlc2VydmUKICAgICAvLyB0aGUgcmlnaHQgZm9yIGJhcnJp
ZXJzIHRvIGJlIGFibGUgdG8gdHJpZ2dlciBHQy4gQW5kIEkgZG9uJ3Qgd2FudCB0byBob2xkIFZN
CkBAIC0xNzMsNyArMTczLDcgQEAgaW5saW5lIGJvb2wgc3ltYm9sVGFibGVQdXRXaXRoQXR0cmli
dXRlcwogICAgICAgICBpZiAoVmFyaWFibGVXYXRjaHBvaW50U2V0KiBzZXQgPSBlbnRyeS53YXRj
aHBvaW50U2V0KCkpCiAgICAgICAgICAgICBzZXQtPm5vdGlmeVdyaXRlKHZtLCB2YWx1ZSwgb2Jq
ZWN0LCBwcm9wZXJ0eU5hbWUpOwogICAgICAgICBlbnRyeS5zZXRBdHRyaWJ1dGVzKGF0dHJpYnV0
ZXMpOwotICAgICAgICByZWcgPSAmb2JqZWN0LT5yZWdpc3RlckF0KGVudHJ5LmdldEluZGV4KCkp
OworICAgICAgICByZWcgPSAmb2JqZWN0LT52YXJpYWJsZUF0KGVudHJ5LnNjb3BlT2Zmc2V0KCkp
OwogICAgIH0KICAgICByZWctPnNldCh2bSwgb2JqZWN0LCB2YWx1ZSk7CiAgICAgcmV0dXJuIHRy
dWU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGUuaAkocmV2aXNpb24g
MTgwODc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTU4LDcgKzU4LDggQEAgZW51bSBKU1R5cGUgOiB1aW50OF90IHsKICAgICBQ
dXJlRm9yd2FyZGluZ1Byb3h5VHlwZSwKICAgICBJbXB1cmVQcm94eVR5cGUsCiAgICAgV2l0aFNj
b3BlVHlwZSwKLSAgICBBcmd1bWVudHNUeXBlLAorICAgIERpcmVjdEFyZ3VtZW50c1R5cGUsCisg
ICAgU2NvcGVkQXJndW1lbnRzVHlwZSwKIAogICAgIEludDhBcnJheVR5cGUsCiAgICAgSW50MTZB
cnJheVR5cGUsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PdXRPZkJhbmRB
cmd1bWVudHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L091dE9mQmFuZEFyZ3VtZW50cy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9PdXRPZkJhbmRBcmd1bWVudHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMjEzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJPdXRPZkJhbmRBcmd1bWVudHMuaCIK
KworI2luY2x1ZGUgIkpTQXJndW1lbnRzSXRlcmF0b3IuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVz
LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitTVEFUSUNfQVNTRVJUX0lTX1RSSVZJQUxMWV9ERVNU
UlVDVElCTEUoT3V0T2ZCYW5kQXJndW1lbnRzKTsKKworY29uc3QgQ2xhc3NJbmZvIE91dE9mQmFu
ZEFyZ3VtZW50czo6c19pbmZvID0geyAiQXJndW1lbnRzIiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JF
QVRFX01FVEhPRF9UQUJMRShPdXRPZkJhbmRBcmd1bWVudHMpIH07CisKK091dE9mQmFuZEFyZ3Vt
ZW50czo6T3V0T2ZCYW5kQXJndW1lbnRzKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisg
ICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUsIG51bGxwdHIpCisgICAgLCBtX3NwZWNpYWxzTWF0ZXJp
YWxpemVkKGZhbHNlKQoreworfQorCitPdXRPZkJhbmRBcmd1bWVudHMqIE91dE9mQmFuZEFyZ3Vt
ZW50czo6Y3JlYXRlRW1wdHkoCisgICAgVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU0Z1bmN0aW9uKiBjYWxsZWUpCit7CisgICAgT3V0T2ZCYW5kQXJndW1lbnRzKiByZXN1
bHQgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxPdXRPZkJhbmRBcmd1bWVudHM+KHZtLmhl
YXApKQorICAgICAgICBPdXRPZkJhbmRBcmd1bWVudHModm0sIGdsb2JhbE9iamVjdC0+b3V0T2ZC
YW5kQXJndW1lbnRzU3RydWN0dXJlKCkpOworICAgIHJlc3VsdC0+ZmluaXNoQ3JlYXRpb24odm0p
OworICAgIHJlc3VsdC0+bV9jYWxsZWUuc2V0KHZtLCB0aGlzLCBjYWxsZWUpOworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKK091dE9mQmFuZEFyZ3VtZW50cyogT3V0T2ZCYW5kQXJndW1lbnRzOjpj
cmVhdGVFbXB0eShFeGVjU3RhdGUqIGV4ZWMsIEpTRnVuY3Rpb24qIGNhbGxlZSkKK3sKKyAgICAv
LyBOQi4gU29tZSBjbGllbnRzIG1pZ2h0IGV4cGVjdCB0aGF0IHRoZSBnbG9iYWwgb2JqZWN0IG9m
IG9mIHRoaXMgb2JqZWN0IGlzIHRoZSBnbG9iYWwgb2JqZWN0CisgICAgLy8gb2YgdGhlIGNhbGxl
ZS4gV2UgZG9uJ3QgZG8gdGhpcyBmb3Igbm93LCBidXQgbWF5YmUgd2Ugc2hvdWxkLgorICAgIHJl
dHVybiBjcmVhdGVFbXB0eShleGVjLT52bSgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCks
IGNhbGxlZSk7Cit9CisKK091dE9mQmFuZEFyZ3VtZW50cyogT3V0T2ZCYW5kQXJndW1lbnRzOjpj
cmVhdGVXaXRoSW5saW5lRnJhbWUoRXhlY1N0YXRlKiBteUZyYW1lLCBFeGVjU3RhdGUqIHRhcmdl
dEZyYW1lLCBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSwgQXJndW1lbnRzTW9kZSBt
b2RlKQoreworICAgIFZNJiB2bSA9IG15RnJhbWUtPnZtKCk7CisgICAgCisgICAgSlNGdW5jdGlv
biogY2FsbGVlOworICAgIAorICAgIGlmIChpbmxpbmVDYWxsRnJhbWUpCisgICAgICAgIGNhbGxl
ZSA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4oaW5saW5lQ2FsbEZyYW1lLT5jYWxsZWVSZWNvdmVyeS5y
ZWNvdmVyKHRhcmdldEZyYW1lKSk7CisgICAgZWxzZQorICAgICAgICBjYWxsZWUgPSBqc0Nhc3Q8
SlNGdW5jdGlvbio+KHRhcmdldEZyYW1lLT5jYWxsZWUoKSk7CisKKyAgICAvLyBOQi4gSXQncyBz
b21ld2hhdCBhcmJpdHJhcnkgdGhhdCB3ZSB0aWUgdGhlIHN0cmljdG5lc3Mgb2YgdGhpcyBvYmpl
Y3QgdG8gdGhlIHN0cmljdG5lc3Mgb2YKKyAgICAvLyB0aGUgY2FsbGVlLgorICAgIGJvb2wgaXNT
dHJpY3RNb2RlID0gZXhlY3V0YWJsZS0+aXNTdHJpY3RNb2RlKCk7CisKKyAgICBPdXRPZkJhbmRB
cmd1bWVudHMqIHJlc3VsdCA9IGNyZWF0ZUVtcHR5KG15RnJhbWUsIGNhbGxlZSk7CisgICAgCisg
ICAgdW5zaWduZWQgbGVuZ3RoOworICAgIHN3aXRjaCAobW9kZSkgeworICAgIGNhc2UgQ2xvbmVk
QXJndW1lbnRzQ3JlYXRpb25Nb2RlOiB7CisgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUpIHsK
KyAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRSZWdpc3Rlci5p
c1ZhbGlkKCkpCisgICAgICAgICAgICAgICAgbGVuZ3RoID0gZXhlYy0+cihpbmxpbmVDYWxsRnJh
bWUtPmFyZ3VtZW50Q291bnRSZWdpc3RlcikudW5ib3hlZEludDMyKCk7CisgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgbGVuZ3RoID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMu
c2l6ZSgpOworICAgICAgICAgICAgbGVuZ3RoLS07CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IGxlbmd0aDsgaS0tOykKKyAgICAgICAgICAgICAgICByZXN1bHQt
PnB1dERpcmVjdEluZGV4KG15RnJhbWUsIGksIGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzW2ld
LnJlY292ZXIodGFyZ2V0RnJhbWUpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGxl
bmd0aCA9IHRhcmdldEZyYW1lLT5hcmd1bWVudENvdW50KCk7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IGxlbmd0aDsgaS0tOykKKyAgICAgICAgICAgICAgICBy
ZXN1bHQtPnB1dERpcmVjdEluZGV4KG15RnJhbWUsIGksIHRhcmdldEZyYW1lLT51bmNoZWNrZWRB
cmd1bWVudChpKSk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAK
KyAgICBjYXNlIEZha2VBcmd1bWVudFZhbHVlc0NyZWF0aW9uTW9kZTogeworICAgICAgICBsZW5n
dGggPSAwOworICAgICAgICBicmVhazsKKyAgICB9IH0KKyAgICAKKyAgICByZXN1bHQtPnB1dERp
cmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcihsZW5ndGgpKTsKKyAg
ICBpZiAoaXNTdHJpY3RNb2RlKSB7CisgICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0QWNjZXNzb3Io
ZXhlYywgdm0ucHJvcGVydHlOYW1lcy0+Y2FsbGVlLCB0aGlzT2JqZWN0LT5nbG9iYWxPYmplY3Qo
KS0+dGhyb3dUeXBlRXJyb3JHZXR0ZXJTZXR0ZXIoZXhlYy0+dm0oKSksIERvbnREZWxldGUgfCBE
b250RW51bSB8IEFjY2Vzc29yKTsKKyAgICAgICAgcmVzdWx0LT5wdXREaXJlY3RBY2Nlc3Nvcihl
eGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT5jYWxsZWUsIHRoaXNPYmplY3QtPmdsb2JhbE9iamVjdCgp
LT50aHJvd1R5cGVFcnJvckdldHRlclNldHRlcihleGVjLT52bSgpKSwgRG9udERlbGV0ZSB8IERv
bnRFbnVtIHwgQWNjZXNzb3IpOworICAgIH0gZWxzZQorICAgICAgICByZXN1bHQtPnB1dERpcmVj
dCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+Y2FsbGVlLCBKU1ZhbHVlKGNhbGxlZSkpOworICAgIAor
ICAgIHJlc3VsdC0+SlNDX05BVElWRV9GVU5DVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5pdGVyYXRv
clByaXZhdGVOYW1lLCBhcmd1bWVudHNGdW5jSXRlcmF0b3IsIERvbnRFbnVtLCAwKTsKK30KKwor
T3V0T2ZCYW5kQXJndW1lbnRzKiBPdXRPZkJhbmRBcmd1bWVudHM6OmNyZWF0ZVdpdGhNYWNoaW5l
RnJhbWUoRXhlY1N0YXRlKiBteUZyYW1lLCBFeGVjU3RhdGUqIHRhcmdldEZyYW1lLCBBcmd1bWVu
dHNNb2RlIG1vZGUpCit7CisgICAgcmV0dXJuIGNyZWF0ZVdpdGhJbmxpbmVGcmFtZShteUZyYW1l
LCB0YXJnZXRGcmFtZSwgbnVsbHB0ciwgbW9kZSk7Cit9CisKK1N0cnVjdHVyZSogT3V0T2ZCYW5k
QXJndW1lbnRzOjpjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKK3sKKyAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVh
dGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1
Y3R1cmVGbGFncyksIGluZm8oKSk7Cit9CisKK2Jvb2wgT3V0T2ZCYW5kQXJndW1lbnRzOjpnZXRP
d25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0
eU5hbWUgaWRlbnQsIFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICBPdXRPZkJhbmRBcmd1bWVu
dHMqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8T3V0T2ZCYW5kQXJndW1lbnRzKj4ob2JqZWN0KTsKKyAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIAorICAgIGlmIChpZGVudCA9PSB2bS5wcm9wZXJ0
eU5hbWVzLT5jYWxsZXIKKyAgICAgICAgfHwgaWRlbnQgPT0gdm0ucHJvcGVydHlOYW1lcy0+Y2Fs
bGVlKQorICAgICAgICB0aGlzT2JqZWN0LT5tYXRlcmlhbGl6ZVNwZWNpYWxzSWZOZWNlc3Nhcnko
ZXhlYyk7CisgICAgCisgICAgaWYgKEJhc2U6OmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0
LCBleGVjLCBpZGVudCwgc2xvdCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIAorICAgIGlm
IChpZGVudCA9PSB2bS5wcm9wZXJ0eU5hbWVzLT5pdGVyYXRvclByaXZhdGVOYW1lKSB7CisgICAg
ICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2Jq
ZWN0KCk7CisgICAgICAgIHRoaXNPYmplY3QtPkpTQ19OQVRJVkVfRlVOQ1RJT04odm0ucHJvcGVy
dHlOYW1lcy0+aXRlcmF0b3JQcml2YXRlTmFtZSwgYXJndW1lbnRzRnVuY0l0ZXJhdG9yLCBEb250
RW51bSwgMCk7CisgICAgICAgIGlmIChKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90KHRoaXNP
YmplY3QsIGV4ZWMsIGlkZW50LCBzbG90KSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KKyAgICAKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgT3V0T2ZCYW5kQXJndW1lbnRz
OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywg
UHJvcGVydHlOYW1lQXJyYXkmIGFycmF5LCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3sKKyAgICBP
dXRPZkJhbmRBcmd1bWVudHMqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8T3V0T2ZCYW5kQXJndW1lbnRz
Kj4ob2JqZWN0KTsKKyAgICB0aGlzT2JqZWN0LT5tYXRlcmlhbGl6ZVNwZWNpYWxzSWZOZWNlc3Nh
cnkoZXhlYyk7CisgICAgQmFzZTo6Z2V0T3duUHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBleGVj
LCBhcnJheSwgbW9kZSk7Cit9CisKK3ZvaWQgT3V0T2ZCYW5kQXJndW1lbnRzOjpwdXQoSlNDZWxs
KiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBpZGVudCwgSlNWYWx1ZSB2YWx1
ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQoreworICAgIE91dE9mQmFuZEFyZ3VtZW50cyogdGhp
c09iamVjdCA9IGpzQ2FzdDxPdXRPZkJhbmRBcmd1bWVudHMqPihvYmplY3QpOworICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7CisgICAgCisgICAgaWYgKGlkZW50ID09IHZtLnByb3BlcnR5TmFtZXMt
PmNhbGxlZQorICAgICAgICB8fCBpZGVudCA9PSB2bS5wcm9wZXJ0eU5hbWVzLT5jYWxsZXIpCisg
ICAgICAgIHRoaXNPYmplY3QtPm1hdGVyaWFsaXplU3BlY2lhbHNJZk5lY2Vzc2FyeShleGVjKTsK
KyAgICAKKyAgICBCYXNlOjpwdXQodGhpc09iamVjdCwgZXhlYywgaWRlbnQsIHZhbHVlLCBzbG90
KTsKK30KKwordm9pZCBPdXRPZkJhbmRBcmd1bWVudHM6OmRlbGV0ZVByb3BlcnR5KEpTQ2VsbCog
Y2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgaWRlbnQpCit7CisgICAgT3V0T2ZC
YW5kQXJndW1lbnRzKiB0aGlzT2JqZWN0ID0ganNDYXN0PE91dE9mQmFuZEFyZ3VtZW50cyo+KG9i
amVjdCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICAKKyAgICBpZiAoaWRlbnQgPT0g
dm0ucHJvcGVydHlOYW1lcy0+Y2FsbGVlCisgICAgICAgIHx8IGlkZW50ID09IHZtLnByb3BlcnR5
TmFtZXMtPmNhbGxlcikKKyAgICAgICAgdGhpc09iamVjdC0+bWF0ZXJpYWxpemVTcGVjaWFsc0lm
TmVjZXNzYXJ5KGV4ZWMpOworICAgIAorICAgIEJhc2U6OmRlbGV0ZVByb3BlcnR5KHRoaXNPYmpl
Y3QsIGV4ZWMsIGlkZW50KTsKK30KKwordm9pZCBPdXRPZkJhbmRBcmd1bWVudHM6OmRlZmluZU93
blByb3BlcnR5KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1l
IGlkZW50LCBjb25zdCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIGJvb2wgc2hvdWxk
VGhyb3cpCit7CisgICAgT3V0T2ZCYW5kQXJndW1lbnRzKiB0aGlzT2JqZWN0ID0ganNDYXN0PE91
dE9mQmFuZEFyZ3VtZW50cyo+KG9iamVjdCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAg
ICAKKyAgICBpZiAoaWRlbnQgPT0gdm0ucHJvcGVydHlOYW1lcy0+Y2FsbGVlCisgICAgICAgIHx8
IGlkZW50ID09IHZtLnByb3BlcnR5TmFtZXMtPmNhbGxlcikKKyAgICAgICAgdGhpc09iamVjdC0+
bWF0ZXJpYWxpemVTcGVjaWFsc0lmTmVjZXNzYXJ5KGV4ZWMpOworICAgIAorICAgIHJldHVybiBC
YXNlOjpkZWZpbmVPd25Qcm9wZXJ0eShvYmplY3QsIGV4ZWMsIGlkZW50LCBkZXNjcmlwdG9yLCBz
aG91bGRUaHJvdyk7Cit9CisKK3ZvaWQgT3V0T2ZCYW5kQXJndW1lbnRzOjptYXRlcmlhbGl6ZVNw
ZWNpYWxzKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBSRUxFQVNFX0FTU0VSVCghc3BlY2lhbHNN
YXRlcmlhbGl6ZWQoKSk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICAKKyAgICBGdW5j
dGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBqc0Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4o
bV9jYWxsZWUtPmV4ZWN1dGFibGUoKSk7CisgICAgYm9vbCBpc1N0cmljdE1vZGUgPSBleGVjdXRh
YmxlLT5pc1N0cmljdE1vZGUoKTsKKyAgICAKKyAgICBpZiAoaXNTdHJpY3RNb2RlKSB7CisgICAg
ICAgIHB1dERpcmVjdEFjY2Vzc29yKGV4ZWMsIHZtLnByb3BlcnR5TmFtZXMtPmNhbGxlZSwgZ2xv
YmFsT2JqZWN0KCktPnRocm93VHlwZUVycm9yR2V0dGVyU2V0dGVyKHZtKSwgRG9udERlbGV0ZSB8
IERvbnRFbnVtIHwgQWNjZXNzb3IpOworICAgICAgICBwdXREaXJlY3RBY2Nlc3NvcihleGVjLCB2
bS5wcm9wZXJ0eU5hbWVzLT5jYWxsZWUsIGdsb2JhbE9iamVjdCgpLT50aHJvd1R5cGVFcnJvckdl
dHRlclNldHRlcih2bSksIERvbnREZWxldGUgfCBEb250RW51bSB8IEFjY2Vzc29yKTsKKyAgICB9
IGVsc2UKKyAgICAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5jYWxsZWUsIEpT
VmFsdWUobV9jYWxsZWUuZ2V0KCkpKTsKKyAgICAKKyAgICBtX2NhbGxlZS5jbGVhcigpOworfQor
Cit2b2lkIE91dE9mQmFuZEFyZ3VtZW50czo6bWF0ZXJpYWxpemVTcGVjaWFsc0lmTmVjZXNzYXJ5
KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBpZiAoIXNwZWNpYWxzTWF0ZXJpYWxpemVkKCkpCisg
ICAgICAgIG1hdGVyaWFsaXplU3BlY2lhbHMoZXhlYyk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpT
QworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PdXRPZkJhbmRBcmd1bWVu
dHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PdXRPZkJh
bmRBcmd1bWVudHMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL091dE9mQmFuZEFyZ3VtZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzcgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBP
dXRPZkJhbmRBcmd1bWVudHNfaAorI2RlZmluZSBPdXRPZkJhbmRBcmd1bWVudHNfaAorCisjaW5j
bHVkZSAiQXJndW1lbnRzTW9kZS5oIgorI2luY2x1ZGUgIkpTT2JqZWN0LmgiCisKK25hbWVzcGFj
ZSBKU0MgeworCisvLyBUaGlzIGlzIGFuIEFyZ3VtZW50cy1jbGFzcyBvYmplY3QgdGhhdCB3ZSBj
cmVhdGUgd2hlbiB5b3UgZG8gZnVuY3Rpb24uYXJndW1lbnRzLCBvciB5b3Ugc2F5CisvLyAiYXJn
dW1lbnRzIiBpbnNpZGUgYSBmdW5jdGlvbiBpbiBzdHJpY3QgbW9kZS4gSXQgYmVoYXZlcyBhbG1w
c3QgZW50aXJlbHkgbGlrZSBhbiBvcmRpbmFyeQorLy8gSmF2YVNjcmlwdCBvYmplY3QuIEFsbCBv
ZiB0aGUgYXJndW1lbnRzIHZhbHVlcyBhcmUgc2ltcGx5IGNvcGllZCBmcm9tIHRoZSBzdGFjayAo
cG9zc2libHkgdmlhCisvLyBzb21lIHNvcGhpc3RpY2F0ZWQgVmFsdWVSZWNvdmVyeSdzIGlmIGFu
IG9wdGltaXppbmcgY29tcGlsZXIgaXMgaW4gcGxheSkgYW5kIHRoZSBhcHByb3ByaWF0ZQorLy8g
cHJvcGVydGllcyBvZiB0aGUgb2JqZWN0IGFyZSBwb3B1bGF0ZWQuIFRoZSBvbmx5IHJlYXNvbiB3
aHkgd2UgbmVlZCBhIHNwZWNpYWwgY2xhc3MgaXMgdG8gbWFrZQorLy8gdGhlIG9iamVjdCBjbGFp
bSB0byBiZSAiQXJndW1lbnRzIiBmcm9tIGEgdG9TdHJpbmcgc3RhbmRwb2ludCwgYW5kIHRvIGF2
b2lkIG1hdGVyaWFsaXppbmcgdGhlCisvLyBjYWxsZXIvY2FsbGVlIHByb3BlcnRpZXMgdW5sZXNz
IHNvbWVvbmUgYXNrcyBmb3IgdGhlbS4KK2NsYXNzIE91dE9mQmFuZEFyZ3VtZW50cyA6IHB1Ymxp
YyBKU05vbkZpbmFsT2JqZWN0IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTTm9uRmluYWxPYmpl
Y3QgQmFzZTsKKyAgICAKK3ByaXZhdGU6CisgICAgT3V0T2ZCYW5kQXJndW1lbnRzKFZNJiwgU3Ry
dWN0dXJlKik7CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgT3V0T2ZCYW5kQXJndW1lbnRzKiBjcmVh
dGVFbXB0eShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNGdW5jdGlvbiogY2FsbGVlKTsKKyAgICBz
dGF0aWMgT3V0T2ZCYW5kQXJndW1lbnRzKiBjcmVhdGVFbXB0eShFeGVjU3RhdGUqLCBKU0Z1bmN0
aW9uKiBjYWxsZWUpOworICAgIHN0YXRpYyBPdXRPZkJhbmRBcmd1bWVudHMqIGNyZWF0ZVdpdGhJ
bmxpbmVGcmFtZShFeGVjU3RhdGUqIG15RnJhbWUsIEV4ZWNTdGF0ZSogdGFyZ2V0RnJhbWUsIElu
bGluZUNhbGxGcmFtZSosIEFyZ3VtZW50c01vZGUpOworICAgIHN0YXRpYyBPdXRPZkJhbmRBcmd1
bWVudHMqIGNyZWF0ZVdpdGhNYWNoaW5lRnJhbWUoRXhlY1N0YXRlKiBteUZyYW1lLCBFeGVjU3Rh
dGUqIHRhcmdldEZyYW1lLCBBcmd1bWVudHNNb2RlKTsKKyAgICAKKyAgICBzdGF0aWMgU3RydWN0
dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90
eXBlKTsKKworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJy
aWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMgfCBKU09i
amVjdDo6U3RydWN0dXJlRmxhZ3M7CisKKyAgICBERUNMQVJFX0lORk87CisKK3ByaXZhdGU6Cisg
ICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwg
UHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9w
ZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVt
ZXJhdGlvbk1vZGUpOworICAgIHN0YXRpYyB2b2lkIHB1dChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQ
cm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyB2b2lk
IGRlbGV0ZVByb3BlcnR5KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSk7CisgICAg
c3RhdGljIHZvaWQgZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9w
ZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgc2hvdWxkVGhyb3cpOwor
ICAgIAorICAgIGJvb2wgc3BlY2lhbHNNYXRlcmlhbGl6ZWQoKSBjb25zdCB7IHJldHVybiAhbV9j
YWxsZWU7IH0KKyAgICB2b2lkIG1hdGVyaWFsaXplU3BlY2lhbHMoRXhlY1N0YXRlKik7CisgICAg
dm9pZCBtYXRlcmlhbGl6ZVNwZWNpYWxzSWZOZWNlc3NhcnkoRXhlY1N0YXRlKik7CisgICAgCisg
ICAgV3JpdGVCYXJyaWVyPEpTRnVuY3Rpb24qPiBtX2NhbGxlZTsgLy8gU2V0IHRvIG51bGxwdHIg
d2hlbiB3ZSBtYXRlcmlhbGl6ZSBhbGwgb2Ygb3VyIHNwZWNpYWwgcHJvcGVydGllcy4KK307CisK
K30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gT3V0T2ZCYW5kQXJndW1lbnRzX2gKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVPZmZzZXQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlT2Zmc2V0LmNwcAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlT2Zmc2V0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQyIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJTY29wZU9mZnNldC5oIgorCituYW1lc3BhY2UgSlNDIHsKKwordm9pZCBTY29wZU9mZnNldDo6
ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIGlmICghKnRoaXMpIHsKKyAgICAg
ICAgb3V0LnByaW50KCJzY29wZUludmFsaWQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICAKKyAgICBvdXQucHJpbnQoInNjb3BlIiwgb2Zmc2V0KCkpOworfQorCit9IC8vIG5hbWVzcGFj
ZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVPZmZzZXQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZU9mZnNl
dC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVP
ZmZzZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgU2NvcGVPZmZzZXRfaAorI2Rl
ZmluZSBTY29wZU9mZnNldF9oCisKKyNpbmNsdWRlICJHZW5lcmljT2Zmc2V0LmgiCisjaW5jbHVk
ZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBKU0MgeworCisvLyBUaGlzIGlzIGFu
IG9mZnNldCBpbnRvIGEgc2NvcGUgb2Ygc29tZSBraW5kLiBJdCBjb3VsZCBiZSBhbiBhY3RpdmF0
aW9uIHNjb3BlIG9yIGl0IGNvdWxkIGJlIGEKKy8vIGdsb2JhbCBvYmplY3QuCitjbGFzcyBTY29w
ZU9mZnNldCA6IHB1YmxpYyBHZW5lcmljT2Zmc2V0PFNjb3BlT2Zmc2V0PiB7CitwdWJsaWM6Cisg
ICAgU2NvcGVPZmZzZXQoKSB7IH0KKyAgICAKKyAgICBleHBsaWNpdCBTY29wZU9mZnNldCh1bnNp
Z25lZCBvZmZzZXQpCisgICAgICAgIDogR2VuZXJpY09mZnNldChvZmZzZXQpCisgICAgeworICAg
IH0KKyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKK307CisKK30gLy8g
bmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gU2NvcGVPZmZzZXRfaAorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50cy5jcHAJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQwIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJTY29wZWRBcmd1bWVudHMuaCIKKworI2luY2x1ZGUgIkdlbmVyaWNBcmd1bWVudHNJbmxpbmVz
LmgiCisjaW5jbHVkZSAiSlNBcmd1bWVudHNJdGVyYXRvci5oIgorI2luY2x1ZGUgIkpTQ0lubGlu
ZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK1NUQVRJQ19BU1NFUlRfSVNfVFJJVklBTExZX0RF
U1RSVUNUSUJMRShTY29wZWRBcmd1bWVudHMpOworCitjb25zdCBDbGFzc0luZm8gU2NvcGVkQXJn
dW1lbnRzOjpzX2luZm8gPSB7ICJBcmd1bWVudHMiLCAmQmFzZTo6c19pbmZvLCAwLCBDUkVBVEVf
TUVUSE9EX1RBQkxFKFNjb3BlZEFyZ3VtZW50cykgfTsKKworU2NvcGVkQXJndW1lbnRzOjpTY29w
ZWRBcmd1bWVudHMoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgdW5zaWduZWQgdG90YWxM
ZW5ndGgpCisgICAgOiBHZW5lcmljQXJndW1lbnRzKHZtLCBzdHJ1Y3R1cmUpCisgICAgLCBtX292
ZXJyb2RlVGhpbmdzKGZhbHNlKQorICAgICwgbV90b3RhbExlbmd0aChsZW5ndGgpCit7Cit9CisK
K3ZvaWQgU2NvcGVkQXJndW1lbnRzOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIEpTRnVuY3Rpb24q
IGNhbGxlZSwgU2NvcGVkQXJndW1lbnRzVGFibGUqIHRhYmxlLCBKU0xleGljYWxFbnZpcm9ubWVu
dCogc2NvcGUpCit7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOworICAgIG1fY2FsbGVl
LnNldCh2bSwgdGhpcywgY2FsbGVlKTsKKyAgICBtX3RhYmxlLnNldCh2bSwgdGhpcywgdGFibGUp
OworICAgIG1fc2NvcGUuc2V0KHZtLCB0aGlzLCBzY29wZSk7Cit9CisKK1Njb3BlZEFyZ3VtZW50
cyogU2NvcGVkQXJndW1lbnRzOjpjcmVhdGVVbmluaXRpYWxpemVkKFZNJiB2bSwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIEpTRnVuY3Rpb24qIGNhbGxlZSwgU2NvcGVkQXJndW1lbnRzVGFibGUqIHRh
YmxlLCBKU0xleGljYWxFbnZpcm9ubWVudCogc2NvcGUsIHVuc2lnbmVkIHRvdGFsTGVuZ3RoKQor
eworICAgIEFTU0VSVCh0b3RhbExlbmd0aCA+PSB0YWJsZS0+bGVuZ3RoKCkpOworICAgIFNjb3Bl
ZEFyZ3VtZW50cyogcmVzdWx0ID0gbmV3ICgKKyAgICAgICAgTm90TnVsbCwKKyAgICAgICAgYWxs
b2NhdGVDZWxsPFNjb3BlZEFyZ3VtZW50cz4odm0uaGVhcCwgYWxsb2NhdGlvblNpemUodG90YWxM
ZW5ndGggLSB0YWJsZS0+bGVuZ3RoKCkpKSkKKyAgICAgICAgKHZtLCBzdHJ1Y3R1cmUsIHRvdGFs
TGVuZ3RoKTsKKyAgICByZXN1bHQtPmZpbmlzaENyZWF0aW9uKHZtLCBjYWxsZWUsIHRhYmxlLCBz
Y29wZSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworU2NvcGVkQXJndW1lbnRzKiBTY29wZWRB
cmd1bWVudHM6OmNyZWF0ZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0Z1bmN0aW9u
KiBjYWxsZWUsIFNjb3BlZEFyZ3VtZW50c1RhYmxlKiB0YWJsZSwgSlNMZXhpY2FsRW52aXJvbm1l
bnQqIHNjb3BlLCB1bnNpZ25lZCB0b3RhbExlbmd0aCkKK3sKKyAgICBTY29wZWRBcmd1bWVudHMq
IHJlc3VsdCA9CisgICAgICAgIGNyZWF0ZVVuaW5pdGlhbGl6ZWQodm0sIHN0cnVjdHVyZSwgY2Fs
bGVlLCB0YWJsZSwgc2NvcGUsIHRvdGFsTGVuZ3RoKTsKKyAgICAKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSB0b3RhbExlbmd0aCAtIHRhYmxlLT5sZW5ndGgoKTsgaS0tOykKKyAgICAgICAgcmVzdWx0
LT5vdmVyZmxvd1N0b3JhZ2UoKVtpXS5jbGVhcigpOworICAgIAorICAgIHJldHVybiByZXN1bHQ7
Cit9CisKK1Njb3BlZEFyZ3VtZW50cyogU2NvcGVkQXJndW1lbnRzOjpjcmVhdGVCeUNvcHlpbmco
RXhlY1N0YXRlKiBleGVjLCBTY29wZWRBcmd1bWVudHNUYWJsZSogdGFibGUsIEpTTGV4aWNhbEVu
dmlyb25tZW50KiBzY29wZSkKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIAorICAg
IHVuc2lnbmVkIG5hbWVkTGVuZ3RoID0gdGFibGUtPmxlbmd0aCgpOworICAgIHVuc2lnbmVkIHRv
dGFsTGVuZ3RoID0gZXhlYy0+YXJndW1lbnRDb3VudCgpOworICAgIAorICAgIFNjb3BlZEFyZ3Vt
ZW50cyogcmVzdWx0ID0gY3JlYXRlVW5pbml0aWFsaXplZCgKKyAgICAgICAgdm0sIGV4ZWMtPmxl
eGljYWxHbG9iYWxPYmplY3QoKS0+c2NvcGVkQXJndW1lbnRzU3RydWN0dXJlKCksIGNhbGxlZSwg
dGFibGUsIHNjb3BlLAorICAgICAgICB0b3RhbExlbmd0aCk7CisgICAgCisgICAgZm9yICh1bnNp
Z25lZCBpID0gdG90YWxMZW5ndGggLSBuYW1lZExlbmd0aDsgaS0tOykKKyAgICAgICAgcmVzdWx0
LT5vdmVyZmxvd1N0b3JhZ2UoKVtpXS5zZXQodm0sIHJlc3VsdCwgZXhlYy0+dW5jaGVja2VkQXJn
dW1lbnRzKGkgKyBuYW1lZExlbmd0aCkpOworICAgIAorICAgIHJldHVybiByZXN1bHQ7Cit9CisK
K3ZvaWQgU2NvcGVkQXJndW1lbnRzOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCit7CisgICAgU2NvcGVkQXJndW1lbnRzKiB0aGlzT2JqZWN0ID0gc3Rh
dGljX2Nhc3Q8U2NvcGVkQXJndW1lbnRzKj4oY2VsbCk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9J
TkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOworICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhp
c09iamVjdCwgdmlzaXRvcik7CisKKyAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9j
YWxsZWUpOworICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX3RhYmxlKTsKKyAgICB2
aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9zY29wZSk7CisgICAgCisgICAgdmlzaXRvci5h
cHBlbmRWYWx1ZXMoCisgICAgICAgIHRoaXNPYmplY3QtPm92ZXJmbG93U3RvcmFnZSgpLCB0aGlz
T2JqZWN0LT5tX3RvdGFsTGVuZ3RoIC0gdGhpc09iamVjdC0+bV90YWJsZS0+bGVuZ3RoKCkpOwor
fQorCitTdHJ1Y3R1cmUqIFNjb3BlZEFyZ3VtZW50czo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCit7CisgICAg
cmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlw
ZUluZm8oU2NvcGVkQXJndW1lbnRzVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworfQor
Cit2b2lkIFNjb3BlZEFyZ3VtZW50czo6c2xvd0Rvd25BbmRXYXN0ZU1lbW9yeShWTSYgdm0pCit7
CisgICAgUkVMRUFTRV9BU1NFUlQoIW1fb3ZlcnJvZGVUaGluZ3MpOworICAgIAorICAgIHB1dERp
cmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcihtX3RhYmxlLT5sZW5n
dGgoKSksIERvbnRFbnVtKTsKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmNh
bGxlZSwgbV9jYWxsZWUuZ2V0KCksIERvbnRFbnVtKTsKKyAgICAKKyAgICBtX292ZXJyb2RlVGhp
bmdzID0gdHJ1ZTsKK30KKwordm9pZCBTY29wZWRBcmd1bWVudHM6OnNsb3dEb3duQW5kV2FzdGVN
ZW1vcnlJZk5lY2Vzc2FyeShWTSYgdm0pCit7CisgICAgaWYgKCFtX292ZXJyb2RlVGhpbmdzKQor
ICAgICAgICBzbG93RG93bkFuZFdhc3RlTWVtb3J5KHZtKTsKK30KKwordm9pZCBTY29wZWRBcmd1
bWVudHM6Om92ZXJyaWRlQXJndW1lbnQoVk0mIHZtLCB1aW50MzJfdCBpKQoreworICAgIHVuc2ln
bmVkIG5hbWVkTGVuZ3RoID0gbV90YWJsZS0+bGVuZ3RoKCk7CisgICAgaWYgKGkgPCBuYW1lZExl
bmd0aCkKKyAgICAgICAgbV90YWJsZS5zZXQodm0sIHRoaXMsIG1fdGFibGUtPnNldCh2bSwgaSwg
U2NvcGVPZmZzZXQoKSkpOworICAgIGVsc2UgeworICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklU
WV9JTVBMSUNBVElPTihpIDwgbV90b3RhbExlbmd0aCk7CisgICAgICAgIG92ZXJmbG93U3RvcmFn
ZSgpW2kgLSBuYW1lZExlbmd0aF0uY2xlYXIoKTsKKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNl
IEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVu
dHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRB
cmd1bWVudHMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1Njb3BlZEFyZ3VtZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQ1IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgU2NvcGVk
QXJndW1lbnRzX2gKKyNkZWZpbmUgU2NvcGVkQXJndW1lbnRzX2gKKworI2luY2x1ZGUgIkdlbmVy
aWNBcmd1bWVudHMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKKy8vIFRoaXMgaXMgYW4gQXJndW1l
bnRzLWNsYXNzIG9iamVjdCB0aGF0IHdlIGNyZWF0ZSB3aGVuIHlvdSBzYXkgImFyZ3VtZW50cyIg
aW5zaWRlIGEgZnVuY3Rpb24sCisvLyBhbmQgb25lIG9yIG1vcmUgb2YgdGhlIGFyZ3VtZW50cyBt
YXkgYmUgY2FwdHVyZWQgaW4gdGhlIGZ1bmN0aW9uJ3MgYWN0aXZhdGlvbi4gVGhlIGZ1bmN0aW9u
CisvLyB3aWxsIGNvcHkgaXRzIGZvcm1hbGx5IGRlY2xhcmVkIGFyZ3VtZW50cyBpbnRvIHRoZSBh
Y3RpdmF0aW9uIGFuZCB0aGVuIGNyZWF0ZSB0aGlzIG9iamVjdC4gVGhpcworLy8gb2JqZWN0IHdp
bGwgc3RvcmUgdGhlIG92ZXJmbG93IGFyZ3VtZW50cywgaWYgdGhlcmUgYXJlIGFueS4gVGhpcyBv
YmplY3Qgd2lsbCB1c2UgdGhlIHN5bWJvbAorLy8gdGFibGUncyBTY29wZWRBcmd1bWVudHNUYWJs
ZSBhbmQgdGhlIGFjdGl2YXRpb24sIG9yIGl0cyBvdmVyZmxvdyBzdG9yYWdlLCB0byBoYW5kbGUg
YWxsIGluZGV4ZWQKKy8vIGxvb2t1cHMuCitjbGFzcyBTY29wZWRBcmd1bWVudHMgOiBwdWJsaWMg
R2VuZXJpY0FyZ3VtZW50czxTY29wZWRBcmd1bWVudHM+IHsKK3ByaXZhdGU6CisgICAgU2NvcGVk
QXJndW1lbnRzKFZNJiwgU3RydWN0dXJlKiwgdW5zaWduZWQgdG90YWxMZW5ndGgpOworICAgIHZv
aWQgZmluaXNoQ3JlYXRpb24oVk0mLCBKU0Z1bmN0aW9uKiBjYWxsZWUsIFNjb3BlZEFyZ3VtZW50
c1RhYmxlKiwgSlNMZXhpY2FsRW52aXJvbm1lbnQqKTsKKworcHVibGljOgorICAgIC8vIENyZWF0
ZXMgYW4gYXJndW1lbnRzIG9iamVjdCBidXQgbGVhdmVzIGl0IHVuaW5pdGlhbGl6ZWQuIFRoaXMg
aXMgZGFuZ2Vyb3VzIGlmIHdlIEdDIHJpZ2h0CisgICAgLy8gYWZ0ZXIgYWxsb2NhdGlvbi4KKyAg
ICBzdGF0aWMgU2NvcGVkQXJndW1lbnRzKiBjcmVhdGVVbmluaXRpYWxpemVkKFZNJiwgU3RydWN0
dXJlKiwgSlNGdW5jdGlvbiogY2FsbGVlLCBTY29wZWRBcmd1bWVudHNUYWJsZSosIEpTTGV4aWNh
bEVudmlyb25tZW50KiwgdW5zaWduZWQgdG90YWxMZW5ndGgpOworICAgIAorICAgIC8vIENyZWF0
ZXMgYW4gYXJndW1lbnRzIG9iamVjdCBhbmQgaW5pdGlhbGl6ZXMgZXZlcnl0aGluZyB0byB0aGUg
ZW1wdHkgdmFsdWUuIFVzZSB0aGlzIGlmIHlvdQorICAgIC8vIGNhbm5vdCBndWFyYW50ZWUgdGhh
dCB5b3UnbGwgaW1tZWRpYXRlbHkgaW5pdGlhbGl6ZSBhbGwgb2YgdGhlIGVsZW1lbnRzLgorICAg
IHN0YXRpYyBTY29wZWRBcmd1bWVudHMqIGNyZWF0ZShWTSYsIFN0cnVjdHVyZSosIEpTRnVuY3Rp
b24qIGNhbGxlZSwgU2NvcGVkQXJndW1lbnRzVGFibGUqLCBKU0xleGljYWxFbnZpcm9ubWVudCos
IHVuc2lnbmVkIHRvdGFsTGVuZ3RoKTsKKyAgICAKKyAgICAvLyBDcmVhdGVzIGFuIGFyZ3VtZW50
cyBvYmplY3QgYnkgY29weWluZyB0aGUgYXJndW1uZXRzIGZyb20gdGhlIHN0YWNrLgorICAgIHN0
YXRpYyBTY29wZWRBcmd1bWVudHMqIGNyZWF0ZUJ5Q29weWluZyhFeGVjU3RhdGUqLCBTY29wZWRB
cmd1bWVudHNUYWJsZSosIEpTTGV4aWNhbEVudmlyb25tZW50Kik7CisgICAgCisgICAgc3RhdGlj
IHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIAorICAgIHVp
bnQzMl90IGludGVybmFsTGVuZ3RoKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3Rv
dGFsTGVuZ3RoOworICAgIH0KKyAgICAKKyAgICB1aW50MzJfdCBsZW5ndGgoRXhlY1N0YXRlKiBl
eGVjKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKFVOTElLRUxZKG1fb3ZlcnJvZGVUaGluZ3Mp
KQorICAgICAgICAgICAgcmV0dXJuIGdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVu
Z3RoKS50b1VJbnQzMihleGVjKTsKKyAgICAgICAgcmV0dXJuIGludGVybmFsTGVuZ3RoKCk7Cisg
ICAgfQorICAgIAorICAgIGJvb2wgY2FuQWNjZXNzSW5kZXhRdWlja2x5KHVpbnQzMl90IGkpIGNv
bnN0CisgICAgeworICAgICAgICB1bnNpZ25lZCBuYW1lZExlbmd0aCA9IG1fdGFibGUtPmxlbmd0
aCgpOworICAgICAgICBpZiAoaSA8IG5hbWVkTGVuZ3RoKQorICAgICAgICAgICAgcmV0dXJuICEh
bV90YWJsZS0+Z2V0KGkpOworICAgICAgICBpZiAoaSA8IG1fdG90YWxMZW5ndGgpCisgICAgICAg
ICAgICByZXR1cm4gISFvdmVyZmxvd1N0b3JhZ2UoKVtpIC0gbmFtZWRMZW5ndGhdLmdldCgpOwor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIEpTVmFsdWUgZ2V0SW5kZXhR
dWlja2x5KHVpbnQzMl90IGkpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlRfV0lUSF9TRUNV
UklUWV9JTVBMSUNBVElPTihjYW5BY2Nlc3NJbmRleFF1aWNrbHkoaSkpOworICAgICAgICB1bnNp
Z25lZCBuYW1lZExlbmd0aCA9IG1fdGFibGUtPmxlbmd0aCgpOworICAgICAgICBpZiAoaSA8IG5h
bWVkTGVuZ3RoKQorICAgICAgICAgICAgcmV0dXJuIG1fc2NvcGUtPnZhcmlhYmxlQXQobV90YWJs
ZS0+Z2V0KGkpKS5nZXQoKTsKKyAgICAgICAgcmV0dXJuIG92ZXJmbG93U3RvcmFnZSgpW2kgLSBu
YW1lZExlbmd0aF0uZ2V0KCk7CisgICAgfQorCisgICAgdm9pZCBzZXRJbmRleFF1aWNrbHkoVk0m
IHZtLCB1aW50MzJfdCBpLCBKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgQVNTRVJUX1dJ
VEhfU0VDVVJJVFlfSU1QTElDQVRJT04oY2FuQWNjZXNzSW5kZXhRdWlja2x5KGkpKTsKKyAgICAg
ICAgdW5zaWduZWQgbmFtZWRMZW5ndGggPSBtX3RhYmxlLT5sZW5ndGgoKTsKKyAgICAgICAgaWYg
KGkgPCBuYW1lZExlbmd0aCkKKyAgICAgICAgICAgIG1fc2NvcGUtPnZhcmlhYmxlYXQobV90YWJs
ZS0+Z2V0KGkpKS5zZXQodm0sIHRoaXMsIHZhbHVlKTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgb3ZlcmZsb3dTdG9yYWdlKClbaSAtIG5hbWVkTGVuZ3RoXS5zZXQodm0sIHRoaXMsIHZhbHVl
KTsKKyAgICB9CisKKyAgICBXcml0ZUJhcnJpZXI8SlNGdW5jdGlvbj4mIGNhbGxlZSgpCisgICAg
eworICAgICAgICByZXR1cm4gbV9jYWxsZWU7CisgICAgfQorICAgIAorICAgIGJvb2wgb3ZlcnJv
ZGVUaGluZ3MoKSBjb25zdCB7IHJldHVybiBtX292ZXJyb2RlVGhpbmdzOyB9CisgICAgdm9pZCBz
bG93RG93bkFuZFdhc3RlTWVtb3J5KFZNJik7CisgICAgdm9pZCBzbG93RG93bkFuZFdhc3RlTWVt
b3J5SWZOZWNlc3NhcnkoVk0mKTsKKyAgICB2b2lkIG92ZXJyaWRlQXJndW1lbnQoVk0mIHZtLCB1
aW50MzJfdCBpKTsKKyAgICAKKyAgICBERUNMQVJFX0lORk87CisgICAgCisgICAgc3RhdGljIFN0
cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHBy
b3RvdHlwZSk7CisgICAgCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZk92ZXJyb2RlVGhp
bmdzKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFNjb3BlZEFyZ3VtZW50cywgbV9vdmVycm9k
ZVRoaW5ncyk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mVG90YWxMZW5ndGgoKSB7
IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoU2NvcGVkQXJndW1lbnRzLCBtX3RvdGFsTGVuZ3RoKTsg
fQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZUYWJsZSgpIHsgcmV0dXJuIE9CSkVDVF9P
RkZTRVRPRihTY29wZWRBcmd1bWVudHMsIG1fdGFibGUpOyB9CisgICAgc3RhdGljIHB0cmRpZmZf
dCBvZmZzZXRPZlNjb3BlKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFNjb3BlZEFyZ3VtZW50
cywgbV9zY29wZSk7IH0KKyAgICAKKyAgICBzdGF0aWMgc2l6ZV90IG92ZXJmbG93U3RvcmFnZU9m
ZnNldCgpCisgICAgeworICAgICAgICByZXR1cm4gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mPHNp
emVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pPihzaXplb2YoU2NvcGVkQXJndW1lbnRzKSk7Cisg
ICAgfQorICAgIAorICAgIHN0YXRpYyBzaXplX3QgYWxsb2NhdGlvblNpemUodW5zaWduZWQgb3Zl
cmZsb3dBcmd1bWVudHNMZW5ndGgpCisgICAgeworICAgICAgICByZXR1cm4gc3RvcmFnZU9mZnNl
dCgpICsgc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikgKiBvdmVyZmxvd0FyZ3VtZW50c0xl
bmd0aDsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiBvdmVy
Zmxvd1N0b3JhZ2UoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxXcml0ZUJh
cnJpZXI8VW5rbm93bj4qPigKKyAgICAgICAgICAgIGJpdHdpc2VfY2FzdDxjaGFyKj4odGhpcykg
KyBvdmVyZmxvd1N0b3JhZ2VPZmZzZXQoKSk7CisgICAgfQorICAgIAorICAgIGJvb2wgbV9vdmVy
cm9kZVRoaW5nczsgLy8gVHJ1ZSBpZiBsZW5ndGgsIGNhbGxlZSwgYW5kIGNhbGxlciBhcmUgZnVs
bHkgbWF0ZXJpYWxpemVkIGluIHRoZSBvYmplY3QuCisgICAgdW5zaWduZWQgbV90b3RhbExlbmd0
aDsgLy8gVGhlIGxlbmd0aCBvZiBkZWNsYXJlZCBwbHVzIG92ZXJmbG93IGFyZ3VtZW50cy4KKyAg
ICBXcml0ZUJhcnJpZXI8SlNGdW5jdGlvbio+IG1fY2FsbGVlOworICAgIFdyaXRlQmFycmllcjxT
Y29wZWRBcmd1bWVudHNUYWJsZT4gbV90YWJsZTsKKyAgICBXcml0ZUJhcnJpZXI8SlNMZXhpY2Fs
RW52aXJvbm1lbnQ+IG1fc2NvcGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlm
IC8vIFNjb3BlZEFyZ3VtZW50c19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1Njb3BlZEFyZ3VtZW50c1RhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzVGFibGUuaAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50c1RhYmxlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw5NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaWZuZGVmIFNjb3BlZEFyZ3VtZW50c1RhYmxlX2gKKyNkZWZpbmUg
U2NvcGVkQXJndW1lbnRzVGFibGVfaAorCisjaW5jbHVkZSAiSlNDZWxsLmgiCisKK25hbWVzcGFj
ZSBKU0MgeworCisvLyBUaGlzIGNsYXNzJ3Mgb25seSBqb2IgaXMgdG8gaG9sZCBvbnRvIHRoZSBs
aXN0IG9mIFNjb3BlT2Zmc2V0cyBmb3IgZWFjaCBhcmd1bWVudCB0aGF0IGEKKy8vIGZ1bmN0aW9u
IGhhcy4gTW9zdCBvZiB0aGUgdGltZSwgdGhlIEJ5dGVjb2RlR2VuZXJhdG9yIHdpbGwgY3JlYXRl
IG9uZSBvZiB0aGVzZSBhbmQgaXQgd2lsbAorLy8gbmV2ZXIgYmUgbW9kaWZpZWQgc3Vic2VxdWVu
dGx5LiBUaGVyZSBpcyBhIHJhcmUgY2FzZSB3aGVyZSBhIFNjb3BlZEFyZ3VtZW50cyBvYmplY3Qg
aXMgY3JlYXRlZAorLy8gYW5kIGFsaWFzZXMgb25lIG9mIHRoZXNlIGFuZCB0aGVuIGRlY2lkZXMg
dG8gbW9kaWZ5IGl0OyBpbiB0aGF0IGNhc2Ugd2UgZG8gY29weS1vbi13cml0ZS4gVGhpcworLy8g
bWFrZXMgc2Vuc2UgYmVjYXVzZSBzdWNoIG1vZGlmaWNhdGlvbnMgYXJlIHNvIHVuY29tbW9uLiBZ
b3UnZCBoYXZlIHRvIGRvIHNvbWV0aGluZyBjcmF6eSBsaWtlCisvLyAiZGVsZXRlIGFyZ3VtZW50
c1tpXSIgb3Igc29tZSB2YXJpYW50IG9mIGRlZmluZU93blByb3BlcnR5LgorY2xhc3MgU2NvcGVk
QXJndW1lbnRzIDogcHVibGljIEpTQ2VsbCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBKU0NlbGwg
QmFzZTsKKyAgICAKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gdHJ1
ZTsKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNJbW1vcnRhbFN0cnVjdHVyZSA9IHRydWU7CisK
K3ByaXZhdGU6CisgICAgU2NvcGVkQXJndW1lbnRzVGFibGUoVk0mKTsKKyAgICB+U2NvcGVkQXJn
dW1lbnRzVGFibGUoKTsKKworcHVibGljOgorICAgIHN0YXRpYyBTY29wZWRBcmd1bWVudHNUYWJs
ZSogY3JlYXRlKFZNJik7CisgICAgCisgICAgU2NvcGVkQXJndW1lbnRzKiBjbG9uZShWTSYpOwor
ICAgIAorICAgIHVpbnQzMl90IGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbGVuZ3RoOyB9Cisg
ICAgU2NvcGVkQXJndW1lbnRzVGFibGUqIHNldExlbmd0aChWTSYsIHVpbnQzMl90IG5ld0xlbmd0
aCk7CisgICAgCisgICAgU2NvcGVPZmZzZXQgZ2V0KHVpbnQzMl90IGkpIGNvbnN0CisgICAgewor
ICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihpIDwgbV9sZW5ndGgpOwor
ICAgICAgICByZXR1cm4gbV9hcmd1bWVudHNbaV07CisgICAgfQorICAgIAorICAgIHZvaWQgbG9j
aygpCisgICAgeworICAgICAgICBtX2xvY2tlZCA9IHRydWU7CisgICAgfQorICAgIAorICAgIFNj
b3BlZEFyZ3VtZW50cyogc2V0KFZNJiB2bSwgdWludDMyX3QgaSwgU2NvcGVPZmZzZXQgdmFsdWUp
CisgICAgeworICAgICAgICBTY29wZWRBcmd1bWVudHMqIHJlc3VsdDsKKyAgICAgICAgaWYgKFVO
TElLRUxZKG1fbG9ja2VkKSkKKyAgICAgICAgICAgIHJlc3VsdCA9IGNsb25lKHZtKTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgcmVzdWx0ID0gdGhpczsKKyAgICAgICAgcmVzdWx0LT5zZXRE
aXJlY3QoaSwgdmFsdWUpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAg
ICBERUNMQVJFX0lORk87CisgICAgCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkxlbmd0
aCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihTY29wZWRBcmd1bWVudHMsIG1fbGVuZ3RoKTsg
fQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZBcmd1bWVudHMoKSB7IHJldHVybiBPQkpF
Q1RfT0ZGU0VUT0YoU2NvcGVkQXJndW1lbnRzLCBtX2FyZ3VtZW50cyk7IH0KKworcHJpdmF0ZToK
KyAgICB1aW50MzJfdCBtX2xlbmd0aDsKKyAgICBib29sIG1fbG9ja2VkOyAvLyBCZWluZyBsb2Nr
ZWQgbWVhbnMgdGhhdCB0aGVyZSBhcmUgbXVsdGlwbGUgcmVmZXJlbmNlcyB0byB0aGlzIG9iamVj
dCBhbmQgbm9uZSBvZiB0aGVtIGV4cGVjdCB0byBzZWUgdGhlIG90aGVycycgbW9kaWZpY2F0aW9u
cy4gVGhpcyBtZWFucyB0aGF0IG1vZGlmaWNhdGlvbnMgbmVlZCB0byBtYWtlIGEgY29weSBmaXJz
dC4KKyAgICBzdGQ6OnVuaXF1ZV9wdHI8U2NvcGVPZmZzZXRbXT4gbV9hcmd1bWVudHM7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIFNjb3BlZEFyZ3VtZW50c1RhYmxlX2gK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmNw
cAkocmV2aXNpb24gMTgwODc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3lt
Ym9sVGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMiwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTIsIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02OSw2ICs2OSw4IEBAIEpT
VmFsdWUgU3ltYm9sVGFibGVFbnRyeTo6aW5mZXJyZWRWYWx1ZSgKIAogdm9pZCBTeW1ib2xUYWJs
ZUVudHJ5OjpwcmVwYXJlVG9XYXRjaChTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUpCiB7CisgICAg
aWYgKCFpc1dhdGNoYWJsZSgpKQorICAgICAgICByZXR1cm47CiAgICAgRmF0RW50cnkqIGVudHJ5
ID0gaW5mbGF0ZSgpOwogICAgIGlmIChlbnRyeS0+bV93YXRjaHBvaW50cykKICAgICAgICAgcmV0
dXJuOwpAQCAtMTM3LDI5ICsxMzksMjIgQEAgdm9pZCBTeW1ib2xUYWJsZTo6V2F0Y2hwb2ludENs
ZWFudXA6OmZpbgogICAgIH0KIH0KIAotU3ltYm9sVGFibGUqIFN5bWJvbFRhYmxlOjpjbG9uZUNh
cHR1cmVkTmFtZXMoVk0mIHZtKQorU3ltYm9sVGFibGUqIFN5bWJvbFRhYmxlOjpjbG9uZVNjb3Bl
UGFydChWTSYgdm0pCiB7CiAgICAgU3ltYm9sVGFibGUqIHJlc3VsdCA9IFN5bWJvbFRhYmxlOjpj
cmVhdGUodm0pOwogICAgIAotICAgIHJlc3VsdC0+bV9wYXJhbWV0ZXJDb3VudEluY2x1ZGluZ1Ro
aXMgPSBtX3BhcmFtZXRlckNvdW50SW5jbHVkaW5nVGhpczsKICAgICByZXN1bHQtPm1fdXNlc05v
blN0cmljdEV2YWwgPSBtX3VzZXNOb25TdHJpY3RFdmFsOwotICAgIHJlc3VsdC0+bV9jYXB0dXJl
U3RhcnQgPSBtX2NhcHR1cmVTdGFydDsKLSAgICByZXN1bHQtPm1fY2FwdHVyZUVuZCA9IG1fY2Fw
dHVyZUVuZDsKIAogICAgIGZvciAoYXV0byBpdGVyID0gbV9tYXAuYmVnaW4oKSwgZW5kID0gbV9t
YXAuZW5kKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKLSAgICAgICAgaWYgKCFpc0NhcHR1cmVk
KGl0ZXItPnZhbHVlLmdldEluZGV4KCkpKQorICAgICAgICBpZiAoIWl0ZXItPnZhbHVlLnZhck9m
ZnNldCgpLmlzU2NvcGUoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICByZXN1bHQt
Pm1fbWFwLmFkZCgKICAgICAgICAgICAgIGl0ZXItPmtleSwKLSAgICAgICAgICAgIFN5bWJvbFRh
YmxlRW50cnkoaXRlci0+dmFsdWUuZ2V0SW5kZXgoKSwgaXRlci0+dmFsdWUuZ2V0QXR0cmlidXRl
cygpKSk7CisgICAgICAgICAgICBTeW1ib2xUYWJsZUVudHJ5KGl0ZXItPnZhbHVlLnZhck9mZnNl
dCgpLCBpdGVyLT52YWx1ZS5nZXRBdHRyaWJ1dGVzKCkpKTsKICAgICB9CiAgICAgCi0gICAgaWYg
KG1fc2xvd0FyZ3VtZW50cykgewotICAgICAgICByZXN1bHQtPm1fc2xvd0FyZ3VtZW50cyA9IHN0
ZDo6bWFrZV91bmlxdWU8U2xvd0FyZ3VtZW50W10+KHBhcmFtZXRlckNvdW50KCkpOwotICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBwYXJhbWV0ZXJDb3VudCgpOyBpLS07KQotICAgICAgICAgICAg
cmVzdWx0LT5tX3Nsb3dBcmd1bWVudHNbaV0gPSBtX3Nsb3dBcmd1bWVudHNbaV07Ci0gICAgfQot
CisgICAgcmVzdWx0LT5tX2FyZ3VtZW50cyA9IGFyZ3VtZW50cygpOworICAgIAogICAgIGlmICht
X3R5cGVQcm9maWxpbmdSYXJlRGF0YSkgewogICAgICAgICByZXN1bHQtPm1fdHlwZVByb2ZpbGlu
Z1JhcmVEYXRhID0gc3RkOjptYWtlX3VuaXF1ZTxUeXBlUHJvZmlsaW5nUmFyZURhdGE+KCk7CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuaAkocmV2
aXNpb24gMTgwODc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFi
bGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDcsIDIwMDgsIDIwMTItMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMTItMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMxLDYgKzMx
LDcgQEAKIAogI2luY2x1ZGUgIkNvbmN1cnJlbnRKSVRMb2NrLmgiCiAjaW5jbHVkZSAiSlNPYmpl
Y3QuaCIKKyNpbmNsdWRlICJTY29wZWRBcmd1bWVudHNUYWJsZS5oIgogI2luY2x1ZGUgIlR5cGVM
b2NhdGlvbi5oIgogI2luY2x1ZGUgIlZhcmlhYmxlV2F0Y2hwb2ludFNldC5oIgogI2luY2x1ZGUg
PG1lbW9yeT4KQEAgLTM5LDI0ICs0MCw2IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1zdHJ1Y3Qg
U2xvd0FyZ3VtZW50IHsKLXB1YmxpYzoKLSAgICBlbnVtIFN0YXR1cyB7Ci0gICAgICAgIE5vcm1h
bCA9IDAsCi0gICAgICAgIENhcHR1cmVkID0gMSwKLSAgICAgICAgRGVsZXRlZCA9IDIKLSAgICB9
OwotCi0gICAgU2xvd0FyZ3VtZW50KCkKLSAgICAgICAgOiBzdGF0dXMoTm9ybWFsKQotICAgICAg
ICAsIGluZGV4KDApCi0gICAgewotICAgIH0KLQotICAgIFN0YXR1cyBzdGF0dXM7Ci0gICAgaW50
IGluZGV4OyAvLyBJZiBzdGF0dXMgaXMgJ0RlbGV0ZWQnLCBpbmRleCBpcyBib2d1cy4KLX07Ci0K
IHN0YXRpYyBBTFdBWVNfSU5MSU5FIGludCBtaXNzaW5nU3ltYm9sTWFya2VyKCkgeyByZXR1cm4g
c3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKTsgfQogCiAvLyBUaGUgYml0IHR3aWRkbGlu
ZyBpbiB0aGlzIGNsYXNzIGFzc3VtZXMgdGhhdCBldmVyeSByZWdpc3RlciBpbmRleCBpcyBhCkBA
IC04Niw2ICs2OSwyOSBAQCBzdGF0aWMgQUxXQVlTX0lOTElORSBpbnQgbWlzc2luZ1N5bWJvbE1h
CiAvLyBjb3B5OiAgICAgU3ltYm9sVGFibGVFbnRyeSAtLT4gRmF0RW50cnkgLS0tLS1eCiAKIHN0
cnVjdCBTeW1ib2xUYWJsZUVudHJ5IHsKK3ByaXZhdGU6CisgICAgc3RhdGljIFZhck9mZnNldCB2
YXJPZmZzZXRGcm9tQml0cyhpbnRwdHJfdCBiaXRzKQorICAgIHsKKyAgICAgICAgVmFyS2luZCBr
aW5kOworICAgICAgICBpbnRwdHJfdCBraW5kQml0cyA9IGJpdHMgJiBLaW5kTWFzazsKKyAgICAg
ICAgaWYgKGtpbmRCaXRzIDw9IFVud2F0Y2hhYmxlU2NvcGVLaW5kQml0cykKKyAgICAgICAgICAg
IGtpbmQgPSBTY29wZVZhcktpbmQ7CisgICAgICAgIGVsc2UgaWYgKGtpbmRCaXRzID09IFN0YWNr
S2luZEJpdHMpCisgICAgICAgICAgICBraW5kID0gU3RhY2tWYXJLaW5kOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBraW5kID0gQ2FwdHVyZWRBcmd1bWVudEtpbmQ7CisgICAgICAgIHJldHVy
biBWYXJPZmZzZXQ6OmFzc2VtYmxlKGtpbmQsIHN0YXRpY19jYXN0PGludD4oYml0cyA+PiBGbGFn
Qml0cykpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgU2NvcGVPZmZzZXQgc2NvcGVPZmZzZXRG
cm9tQml0cyhpbnRwdHJfdCBiaXRzKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCEoYml0cyAmIFN0
YWNrRmxhZykpOworICAgICAgICBBU1NFUlQoIShiaXRzICYgQ2FwdHVyZWRBcmd1bWVudEZsYWcp
KTsKKyAgICAgICAgcmV0dXJuIFNjb3BlT2Zmc2V0KHN0YXRpY19jYXN0PGludD4oYml0cyA+PiBG
bGFnQml0cykpOworICAgIH0KKworcHVibGljOgorICAgIAogICAgIC8vIFVzZSB0aGUgU3ltYm9s
VGFibGVFbnRyeTo6RmFzdCBjbGFzcywgZWl0aGVyIHZpYSBpbXBsaWNpdCBjYXN0IG9yIGJ5IGNh
bGxpbmcKICAgICAvLyBnZXRGYXN0KCksIHdoZW4geW91ICgxKSBvbmx5IGNhcmUgYWJvdXQgaXNO
dWxsKCksIGdldEluZGV4KCksIGFuZCBpc1JlYWRPbmx5KCksCiAgICAgLy8gYW5kICgyKSB5b3Ug
YXJlIGluIGEgaG90IHBhdGggd2hlcmUgeW91IG5lZWQgdG8gbWluaW1pemUgdGhlIG51bWJlciBv
ZiB0aW1lcwpAQCAtMTA3LDExICsxMTMsMTkgQEAgc3RydWN0IFN5bWJvbFRhYmxlRW50cnkgewog
ICAgICAgICAgICAgcmV0dXJuICEobV9iaXRzICYgflNsaW1GbGFnKTsKICAgICAgICAgfQogCi0g
ICAgICAgIGludCBnZXRJbmRleCgpIGNvbnN0CisgICAgICAgIFZhck9mZnNldCB2YXJPZmZzZXQo
KSBjb25zdAogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50Piht
X2JpdHMgPj4gRmxhZ0JpdHMpOworICAgICAgICAgICAgcmV0dXJuIHZhck9mZnNldEZyb21CaXRz
KG1fYml0cyk7CiAgICAgICAgIH0KLSAgICAKKyAgICAgICAgCisgICAgICAgIC8vIEFzc2VydHMg
aWYgdGhlIG9mZnNldCBpcyBhbnl0aGluZyBidXQgYSBzY29wZSBvZmZzZXQuIFRoaXMgc3RydWN0
dXJlcyB0aGUgYXNzZXJ0aW9ucworICAgICAgICAvLyBpbiBhIHdheSB0aGF0IG1heSByZXN1bHQg
aW4gYmV0dGVyIGNvZGUsIGV2ZW4gaW4gcmVsZWFzZSwgdGhhbiBkb2luZworICAgICAgICAvLyB2
YXJPZmZzZXQoKS5zY29wZU9mZnNldCgpLgorICAgICAgICBTY29wZU9mZnNldCBzY29wZU9mZnNl
dCgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBzY29wZU9mZnNldEZyb21C
aXRzKG1fYml0cyk7CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIGJvb2wgaXNSZWFkT25s
eSgpIGNvbnN0CiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBtX2JpdHMgJiBSZWFkT25s
eUZsYWc7CkBAIC0xNDIsMTggKzE1NiwxOCBAQCBzdHJ1Y3QgU3ltYm9sVGFibGVFbnRyeSB7CiAg
ICAgewogICAgIH0KIAotICAgIFN5bWJvbFRhYmxlRW50cnkoaW50IGluZGV4KQorICAgIFN5bWJv
bFRhYmxlRW50cnkoVmFyT2Zmc2V0IG9mZnNldCkKICAgICAgICAgOiBtX2JpdHMoU2xpbUZsYWcp
CiAgICAgewotICAgICAgICBBU1NFUlQoaXNWYWxpZEluZGV4KGluZGV4KSk7Ci0gICAgICAgIHBh
Y2soaW5kZXgsIGZhbHNlLCBmYWxzZSk7CisgICAgICAgIEFTU0VSVChpc1ZhbGlkVmFyT2Zmc2V0
KG9mZnNldCkpOworICAgICAgICBwYWNrKG9mZnNldCwgZmFsc2UsIGZhbHNlKTsKICAgICB9CiAK
LSAgICBTeW1ib2xUYWJsZUVudHJ5KGludCBpbmRleCwgdW5zaWduZWQgYXR0cmlidXRlcykKKyAg
ICBTeW1ib2xUYWJsZUVudHJ5KFZhck9mZnNldCBvZmZzZXQsIHVuc2lnbmVkIGF0dHJpYnV0ZXMp
CiAgICAgICAgIDogbV9iaXRzKFNsaW1GbGFnKQogICAgIHsKLSAgICAgICAgQVNTRVJUKGlzVmFs
aWRJbmRleChpbmRleCkpOwotICAgICAgICBwYWNrKGluZGV4LCBhdHRyaWJ1dGVzICYgUmVhZE9u
bHksIGF0dHJpYnV0ZXMgJiBEb250RW51bSk7CisgICAgICAgIEFTU0VSVChpc1ZhbGlkVmFyT2Zm
c2V0KG9mZnNldCkpOworICAgICAgICBwYWNrKG9mZnNldCwgYXR0cmlidXRlcyAmIFJlYWRPbmx5
LCBhdHRyaWJ1dGVzICYgRG9udEVudW0pOwogICAgIH0KICAgICAKICAgICB+U3ltYm9sVGFibGVF
bnRyeSgpCkBAIC0xODEsOSArMTk1LDIyIEBAIHN0cnVjdCBTeW1ib2xUYWJsZUVudHJ5IHsKICAg
ICAgICAgcmV0dXJuICEoYml0cygpICYgflNsaW1GbGFnKTsKICAgICB9CiAKLSAgICBpbnQgZ2V0
SW5kZXgoKSBjb25zdAorICAgIFZhck9mZnNldCB2YXJPZmZzZXQoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIHZhck9mZnNldEZyb21CaXRzKGJpdHMoKSk7CisgICAgfQorICAgIAorICAg
IGJvb2wgaXNXYXRjaGFibGUoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PGludD4oYml0cygpID4+IEZsYWdCaXRzKTsKKyAgICAgICAgcmV0dXJuIChtX2JpdHMgJiBL
aW5kQml0c01hc2spID09IFNjb3BlS2luZEJpdHM7CisgICAgfQorICAgIAorICAgIC8vIEFzc2Vy
dHMgaWYgdGhlIG9mZnNldCBpcyBhbnl0aGluZyBidXQgYSBzY29wZSBvZmZzZXQuIFRoaXMgc3Ry
dWN0dXJlcyB0aGUgYXNzZXJ0aW9ucworICAgIC8vIGluIGEgd2F5IHRoYXQgbWF5IHJlc3VsdCBp
biBiZXR0ZXIgY29kZSwgZXZlbiBpbiByZWxlYXNlLCB0aGFuIGRvaW5nCisgICAgLy8gdmFyT2Zm
c2V0KCkuc2NvcGVPZmZzZXQoKS4KKyAgICBTY29wZU9mZnNldCBzY29wZU9mZnNldCgpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gc2NvcGVPZmZzZXRGcm9tQml0cyhiaXRzKCkpOwogICAg
IH0KICAgICAKICAgICBBTFdBWVNfSU5MSU5FIEZhc3QgZ2V0RmFzdCgpIGNvbnN0CkBAIC0yMDYs
MTAgKzIzMywxMCBAQCBzdHJ1Y3QgU3ltYm9sVGFibGVFbnRyeSB7CiAgICAgewogICAgICAgICBy
ZXR1cm4gZ2V0RmFzdCgpLmdldEF0dHJpYnV0ZXMoKTsKICAgICB9Ci0KKyAgICAKICAgICB2b2lk
IHNldEF0dHJpYnV0ZXModW5zaWduZWQgYXR0cmlidXRlcykKICAgICB7Ci0gICAgICAgIHBhY2so
Z2V0SW5kZXgoKSwgYXR0cmlidXRlcyAmIFJlYWRPbmx5LCBhdHRyaWJ1dGVzICYgRG9udEVudW0p
OworICAgICAgICBwYWNrKHZhck9mZnNldCgpLCBpc1dhdGNoYWJsZSgpLCBhdHRyaWJ1dGVzICYg
UmVhZE9ubHksIGF0dHJpYnV0ZXMgJiBEb250RW51bSk7CiAgICAgfQogCiAgICAgYm9vbCBpc1Jl
YWRPbmx5KCkgY29uc3QKQEAgLTIxOCw2ICsyNDUsMTIgQEAgc3RydWN0IFN5bWJvbFRhYmxlRW50
cnkgewogICAgIH0KICAgICAKICAgICBKU1ZhbHVlIGluZmVycmVkVmFsdWUoKTsKKworICAgIHZv
aWQgZGlzYWJsZVdhdGNoaW5nKCkKKyAgICB7CisgICAgICAgIGlmICh2YXJPZmZzZXQoKS5pc1Nj
b3BlKCkpCisgICAgICAgICAgICBwYWNrKHZhck9mZnNldCgpLCBmYWxzZSwgYXR0cmlidXRlcyAm
IFJlYWRPbmx5LCBhdHRyaWJ1dGVzICYgRG9udEVudW0pOworICAgIH0KICAgICAKICAgICB2b2lk
IHByZXBhcmVUb1dhdGNoKFN5bWJvbFRhYmxlKik7CiAgICAgCkBAIC0yNDIsNyArMjc1LDEyIEBA
IHByaXZhdGU6CiAgICAgc3RhdGljIGNvbnN0IGludHB0cl90IFJlYWRPbmx5RmxhZyA9IDB4MjsK
ICAgICBzdGF0aWMgY29uc3QgaW50cHRyX3QgRG9udEVudW1GbGFnID0gMHg0OwogICAgIHN0YXRp
YyBjb25zdCBpbnRwdHJfdCBOb3ROdWxsRmxhZyA9IDB4ODsKLSAgICBzdGF0aWMgY29uc3QgaW50
cHRyX3QgRmxhZ0JpdHMgPSA0OworICAgIHN0YXRpYyBjb25zdCBpbnRwdHJfdCBLaW5kQml0c01h
c2sgPSAweDMwOworICAgIHN0YXRpYyBjb25zdCBpbnRwdHJfdCBTY29wZUtpbmRCaXRzID0gMHgw
MDsKKyAgICBzdGF0aWMgY29uc3QgaW50cHRyX3QgVW53YXRjaGFibGVTY29wZUtpbmRCaXRzID0g
MHgxMDsKKyAgICBzdGF0aWMgY29uc3QgaW50cHRyX3QgU3RhY2tLaW5kQml0cyA9IDB4MjA7Cisg
ICAgc3RhdGljIGNvbnN0IGludHB0cl90IENhcHR1cmVkQXJndW1lbnRLaW5kQml0cyA9IDB4MzA7
CisgICAgc3RhdGljIGNvbnN0IGludHB0cl90IEZsYWdCaXRzID0gNjsKICAgICAKICAgICBjbGFz
cyBGYXRFbnRyeSB7CiAgICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwpAQCAtMzA5LDIw
ICszNDcsNDAgQEAgcHJpdmF0ZToKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZnJlZUZh
dEVudHJ5U2xvdygpOwogCi0gICAgdm9pZCBwYWNrKGludCBpbmRleCwgYm9vbCByZWFkT25seSwg
Ym9vbCBkb250RW51bSkKKyAgICB2b2lkIHBhY2soVmFyT2Zmc2V0IG9mZnNldCwgYm9vbCBpc1dh
dGNoYWJsZSwgYm9vbCByZWFkT25seSwgYm9vbCBkb250RW51bSkKICAgICB7CiAgICAgICAgIEFT
U0VSVCghaXNGYXQoKSk7CiAgICAgICAgIGludHB0cl90JiBiaXRzUmVmID0gYml0cygpOwotICAg
ICAgICBiaXRzUmVmID0gKHN0YXRpY19jYXN0PGludHB0cl90PihpbmRleCkgPDwgRmxhZ0JpdHMp
IHwgTm90TnVsbEZsYWcgfCBTbGltRmxhZzsKKyAgICAgICAgYml0c1JlZiA9CisgICAgICAgICAg
ICAoc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KG9mZnNldC5yYXdPZmZzZXQoKSkgPDwgRmxhZ0JpdHMp
IHwgTm90TnVsbEZsYWcgfCBTbGltRmxhZzsKICAgICAgICAgaWYgKHJlYWRPbmx5KQogICAgICAg
ICAgICAgYml0c1JlZiB8PSBSZWFkT25seUZsYWc7CiAgICAgICAgIGlmIChkb250RW51bSkKICAg
ICAgICAgICAgIGJpdHNSZWYgfD0gRG9udEVudW1GbGFnOworICAgICAgICBzd2l0Y2ggKG9mZnNl
dC5raW5kKCkpIHsKKyAgICAgICAgY2FzZSBTY29wZVZhcktpbmQ6CisgICAgICAgICAgICBpZiAo
aXNXYXRjaGFibGUpCisgICAgICAgICAgICAgICAgYml0c1JlZiB8PSBTY29wZUtpbmRCaXRzOwor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGJpdHNSZWYgfD0gVW53YXRjaGFibGVT
Y29wZUtpbmRCaXRzOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU3RhY2tWYXJL
aW5kOgorICAgICAgICAgICAgQVNTRVJUKCFpc1dhdGNoYWJsZSk7CisgICAgICAgICAgICBiaXRz
UmVmIHw9IFN0YWNrS2luZEJpdHM7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBD
YXB0dXJlZEFyZ3VtZW50S2luZDoKKyAgICAgICAgICAgIEFTU0VSVCghaXNXYXRjaGFibGUpOwor
ICAgICAgICAgICAgYml0c1JlZiB8PSBDYXB0dXJlZEFyZ3VtZW50S2luZEJpdHM7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgIH0KICAg
ICAKLSAgICBib29sIGlzVmFsaWRJbmRleChpbnQgaW5kZXgpCisgICAgc3RhdGljIGJvb2wgaXNW
YWxpZFZhck9mZnNldChWYXJPZmZzZXQgb2Zmc2V0KQogICAgIHsKLSAgICAgICAgcmV0dXJuICgo
c3RhdGljX2Nhc3Q8aW50cHRyX3Q+KGluZGV4KSA8PCBGbGFnQml0cykgPj4gRmxhZ0JpdHMpID09
IHN0YXRpY19jYXN0PGludHB0cl90PihpbmRleCk7CisgICAgICAgIHJldHVybiAoKHN0YXRpY19j
YXN0PGludHB0cl90PihvZmZzZXQucmF3T2Zmc2V0KCkpIDw8IEZsYWdCaXRzKSA+PiBGbGFnQml0
cykgPT0gc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KG9mZnNldC5yYXdPZmZzZXQoKSk7CiAgICAgfQog
CiAgICAgaW50cHRyX3QgbV9iaXRzOwpAQCAtMzUxLDcgKzQwOSw3IEBAIHB1YmxpYzoKICAgICBz
dGF0aWMgU3ltYm9sVGFibGUqIGNyZWF0ZU5hbWVTY29wZVRhYmxlKFZNJiB2bSwgY29uc3QgSWRl
bnRpZmllciYgaWRlbnQsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCiAgICAgewogICAgICAgICBTeW1i
b2xUYWJsZSogcmVzdWx0ID0gY3JlYXRlKHZtKTsKLSAgICAgICAgcmVzdWx0LT5hZGQoaWRlbnQu
aW1wbCgpLCBTeW1ib2xUYWJsZUVudHJ5KC0xLCBhdHRyaWJ1dGVzKSk7CisgICAgICAgIHJlc3Vs
dC0+YWRkKGlkZW50LmltcGwoKSwgU3ltYm9sVGFibGVFbnRyeShWYXJPZmZzZXQoU2NvcGVPZmZz
ZXQoMCkpLCBhdHRyaWJ1dGVzKSk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAg
IApAQCAtNDIzLDkgKzQ4MSw1MyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBzaXplKGxvY2tl
cik7CiAgICAgfQogICAgIAotICAgIE1hcDo6QWRkUmVzdWx0IGFkZChjb25zdCBDb25jdXJyZW50
SklUTG9ja2VyJiwgU3RyaW5nSW1wbCoga2V5LCBjb25zdCBTeW1ib2xUYWJsZUVudHJ5JiBlbnRy
eSkKKyAgICBTY29wZU9mZnNldCBtYXhTY29wZU9mZnNldCgpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gbV9tYXhTY29wZU9mZnNldDsKKyAgICB9CisgICAgCisgICAgdm9pZCBkaWRVc2VT
Y29wZU9mZnNldChTY29wZU9mZnNldCBvZmZzZXQpCisgICAgeworICAgICAgICBpZiAoIW1fbWF4
U2NvcGVPZmZzZXQgfHwgbV9tYXhTY29wZU9mZnNldCA8IG9mZmV0KQorICAgICAgICAgICAgbV9t
YXhTY29wZU9mZnNldCA9IG9mZnNldDsKKyAgICB9CisgICAgCisgICAgdm9pZCBkaWRVc2VWYXJP
ZmZzZXQoVmFyT2Zmc2V0IG9mZnNldCkKKyAgICB7CisgICAgICAgIGlmIChvZmZzZXQuaXNTY29w
ZSgpKQorICAgICAgICAgICAgZGlkVXNlU2NvcGVPZmZzZXQob2Zmc2V0KTsKKyAgICB9CisgICAg
CisgICAgdW5zaWduZWQgc2NvcGVTaXplKCkgY29uc3QKKyAgICB7CisgICAgICAgIFNjb3BlT2Zm
c2V0IG1heFNjb3BlT2Zmc2V0ID0gdGhpcy0+bWF4U2NvcGVPZmZzZXQoKTsKKyAgICAgICAgCisg
ICAgICAgIC8vIERvIHNvbWUgY2FsY3VsYXRpb24gdGhhdCByZWxpZXMgb24gaW52YWxpZCBzY29w
ZSBvZmZzZXQgcGx1cyBvbmUgYmVpbmcgemVyby4KKyAgICAgICAgdW5zaWduZWQgZmFzdFJlc3Vs
dCA9IG1heFNjb3BlT2Zmc2V0Lm9mZnNldFVuY2hlY2tlZCgpICsgMTsKKyAgICAgICAgCisgICAg
ICAgIC8vIEFzc2VydCB0aGF0IHRoaXMgd29ya3MuCisgICAgICAgIEFTU0VSVChmYXN0UmVzdWx0
ID09ICghbWF4U2NvcGVPZmZzZXQgPyAwIDogbWF4U2NvcGVPZmZzZXQub2Zmc2V0KCkgKyAxKSk7
CisgICAgICAgIAorICAgICAgICByZXR1cm4gZmFzdFJlc3VsdDsKKyAgICB9CisgICAgCisgICAg
U2NvcGVPZmZzZXQgbmV4dFNjb3BlT2Zmc2V0KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biBTY29wZU9mZnNldChzY29wZVNpemUoKSk7CisgICAgfQorICAgIAorICAgIFNjb3BlT2Zmc2V0
IHRha2VOZXh0U2NvcGVPZmZzZXQoKQorICAgIHsKKyAgICAgICAgU2NvcGVPZmZzZXQgcmVzdWx0
ID0gbmV4dFNjb3BlT2Zmc2V0KCk7CisgICAgICAgIG1fbWF4U2NvcGVPZmZzZXQgPSByZXN1bHQ7
CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIHZvaWQgYWRkKGNvbnN0
IENvbmN1cnJlbnRKSVRMb2NrZXImLCBTdHJpbmdJbXBsKiBrZXksIGNvbnN0IFN5bWJvbFRhYmxl
RW50cnkmIGVudHJ5KQogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fbWFwLmFkZChrZXksIGVudHJ5
KTsKKyAgICAgICAgZGlkVXNlVmFyT2Zmc2V0KGVudHJ5LnZhck9mZnNldCgpKTsKKyAgICAgICAg
TWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gbV9tYXAuYWRkKGtleSwgZW50cnkpOworICAgICAgICBB
U1NFUlRfVU5VU0VEKHJlc3VsdCwgcmVzdWx0LmlzTmV3RW50cnkpOwogICAgIH0KICAgICAKICAg
ICB2b2lkIGFkZChTdHJpbmdJbXBsKiBrZXksIGNvbnN0IFN5bWJvbFRhYmxlRW50cnkmIGVudHJ5
KQpAQCAtNDM0LDkgKzUzNiwxMCBAQCBwdWJsaWM6CiAgICAgICAgIGFkZChsb2NrZXIsIGtleSwg
ZW50cnkpOwogICAgIH0KICAgICAKLSAgICBNYXA6OkFkZFJlc3VsdCBzZXQoY29uc3QgQ29uY3Vy
cmVudEpJVExvY2tlciYsIFN0cmluZ0ltcGwqIGtleSwgY29uc3QgU3ltYm9sVGFibGVFbnRyeSYg
ZW50cnkpCisgICAgdm9pZCBzZXQoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYsIFN0cmluZ0lt
cGwqIGtleSwgY29uc3QgU3ltYm9sVGFibGVFbnRyeSYgZW50cnkpCiAgICAgewotICAgICAgICBy
ZXR1cm4gbV9tYXAuc2V0KGtleSwgZW50cnkpOworICAgICAgICBkaWRVc2VWYXJPZmZzZXQoZW50
cnkudmFyT2Zmc2V0KCkpOworICAgICAgICBtX21hcC5zZXQoa2V5LCBlbnRyeSk7CiAgICAgfQog
ICAgIAogICAgIHZvaWQgc2V0KFN0cmluZ0ltcGwqIGtleSwgY29uc3QgU3ltYm9sVGFibGVFbnRy
eSYgZW50cnkpCkBAIC00NTYsNiArNTU5LDQ1IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGNv
bnRhaW5zKGxvY2tlciwga2V5KTsKICAgICB9CiAgICAgCisgICAgLy8gVGhlIHByaW5jaXBsZSBi
ZWhpbmQgU2NvcGVkQXJndW1lbnRzVGFibGUgbW9kaWZpY2F0aW9ucyBpcyB0aGF0IHdlIHdpbGwg
Y3JlYXRlIG9uZSBhbmQKKyAgICAvLyBsZWF2ZSBpdCB1bmxvY2tlZCAtIHRoZXJlYnkgYWxsb3dp
bmcgaW4tcGxhY2UgY2hhbmdlcyAtIHVudGlsIHNvbWVvbmUgYXNrcyBmb3IgYSBwb2ludGVyIHRv
CisgICAgLy8gdGhlIHRhYmxlLiBUaGVuLCB3ZSB3aWxsIGxvY2sgaXQuIFRoZW4gYm90aCBvdXIg
ZnV0dXJlIGNoYW5nZXMgYW5kIHRoZWlyIGZ1dHVyZSBjaGFuZ2VzCisgICAgLy8gd2lsbCBmaXJz
dCBoYXZlIHRvIG1ha2UgYSBjb3B5LiBUaGlzIGRpc2NpcGxpbmUgbWVhbnMgdGhhdCB1c3VhbGx5
IHdoZW4gd2UgY3JlYXRlIGEKKyAgICAvLyBTY29wZWRBcmd1bWVudHMgb2JqZWN0LCB3ZSBkb24n
dCBoYXZlIHRvIG1ha2UgYSBjb3B5IG9mIHRoZSBTY29wZWRBcmd1bWVudHNUYWJsZSAtIGluc3Rl
YWQKKyAgICAvLyB3ZSBqdXN0IHRha2UgYSByZWZlcmVuY2UgdG8gb25lIHRoYXQgd2UgYWxyZWFk
eSBoYXZlLgorICAgIAorICAgIHVpbnQzMl90IGFyZ3VtZW50c0xlbmd0aCgpIGNvbnN0CisgICAg
eworICAgICAgICBpZiAoIW1fYXJndW1lbnRzKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAg
ICAgIHJldHVybiBtX2FyZ3VtZW50cy0+bGVuZ3RoKCk7CisgICAgfQorICAgIAorICAgIHZvaWQg
c2V0QXJndW1lbnRzTGVuZ3RoKFZNJiB2bSwgdWludDMyX3QgbGVuZ3RoKQorICAgIHsKKyAgICAg
ICAgaWYgKFVOTElLRUxZKCFtX2FyZ3VtZW50cykpCisgICAgICAgICAgICBtX2FyZ3VtZW50cy5z
ZXQodm0sIHRoaXMsIFNjb3BlZEFyZ3VtZW50c1RhYmxlOjpjcmVhdGUodm0pKTsKKyAgICAgICAg
bV9hcmd1bWVudHMuc2V0KHZtLCB0aGlzLCBtX2FyZ3VtZW50cy0+c2V0TGVuZ3RoKHZtLCBsZW5n
dGgpKTsKKyAgICB9CisgICAgCisgICAgU2NvcGVPZmZzZXQgYXJndW1lbnRPZmZzZXQodWludDMy
X3QgaSkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FU
SU9OKG1fYXJndW1lbnRzKTsKKyAgICAgICAgcmV0dXJuIG1fYXJndW1lbnRzLT5nZXQoaSk7Cisg
ICAgfQorICAgIAorICAgIHZvaWQgc2V0QXJndW1lbnRPZmZzZXQoVk0mIHZtLCB1aW50MzJfdCBp
LCBTY29wZU9mZnNldCBvZmZzZXQpCisgICAgeworICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklU
WV9JTVBMSUNBVElPTihtX2FyZ3VtZW50cyk7CisgICAgICAgIG1fYXJndW1lbnRzLnNldCh2bSwg
dGhpcywgbV9hcmd1bWVudHMtPnNldCh2bSwgaSwgb2Zmc2V0KSk7CisgICAgfQorICAgIAorICAg
IFNjb3BlZEFyZ3VtZW50c1RhYmxlKiBhcmd1bWVudHMoKSBjb25zdAorICAgIHsKKyAgICAgICAg
bV9hcmd1bWVudHMtPmxvY2soKTsKKyAgICAgICAgcmV0dXJuIG1fYXJndW1lbnRzLmdldCgpOwor
ICAgIH0KKyAgICAKICAgICBHbG9iYWxWYXJpYWJsZUlEIHVuaXF1ZUlERm9yVmFyaWFibGUoY29u
c3QgQ29uY3VycmVudEpJVExvY2tlciYsIFN0cmluZ0ltcGwqIGtleSwgVk0mIHZtKTsKICAgICBH
bG9iYWxWYXJpYWJsZUlEIHVuaXF1ZUlERm9yUmVnaXN0ZXIoY29uc3QgQ29uY3VycmVudEpJVExv
Y2tlciYgbG9ja2VyLCBpbnQgcmVnaXN0ZXJJbmRleCwgVk0mIHZtKTsKICAgICBSZWZQdHI8VHlw
ZVNldD4gZ2xvYmFsVHlwZVNldEZvclJlZ2lzdGVyKGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXIm
IGxvY2tlciwgaW50IHJlZ2lzdGVySW5kZXgsIFZNJiB2bSk7CkBAIC00NjQsMjggKzYwNiw3IEBA
IHB1YmxpYzoKICAgICBib29sIHVzZXNOb25TdHJpY3RFdmFsKCkgeyByZXR1cm4gbV91c2VzTm9u
U3RyaWN0RXZhbDsgfQogICAgIHZvaWQgc2V0VXNlc05vblN0cmljdEV2YWwoYm9vbCB1c2VzTm9u
U3RyaWN0RXZhbCkgeyBtX3VzZXNOb25TdHJpY3RFdmFsID0gdXNlc05vblN0cmljdEV2YWw7IH0K
IAotICAgIGludCBjYXB0dXJlU3RhcnQoKSBjb25zdCB7IHJldHVybiBtX2NhcHR1cmVTdGFydDsg
fQotICAgIHZvaWQgc2V0Q2FwdHVyZVN0YXJ0KGludCBjYXB0dXJlU3RhcnQpIHsgbV9jYXB0dXJl
U3RhcnQgPSBjYXB0dXJlU3RhcnQ7IH0KLQotICAgIGludCBjYXB0dXJlRW5kKCkgY29uc3QgeyBy
ZXR1cm4gbV9jYXB0dXJlRW5kOyB9Ci0gICAgdm9pZCBzZXRDYXB0dXJlRW5kKGludCBjYXB0dXJl
RW5kKSB7IG1fY2FwdHVyZUVuZCA9IGNhcHR1cmVFbmQ7IH0KLQotICAgIGludCBjYXB0dXJlQ291
bnQoKSBjb25zdCB7IHJldHVybiAtKG1fY2FwdHVyZUVuZCAtIG1fY2FwdHVyZVN0YXJ0KTsgfQot
ICAgIAotICAgIGJvb2wgaXNDYXB0dXJlZChpbnQgb3BlcmFuZCkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBvcGVyYW5kIDw9IGNhcHR1cmVTdGFydCgpICYmIG9wZXJhbmQgPiBjYXB0dXJlRW5kKCk7
Ci0gICAgfQotCi0gICAgaW50IHBhcmFtZXRlckNvdW50KCkgeyByZXR1cm4gbV9wYXJhbWV0ZXJD
b3VudEluY2x1ZGluZ1RoaXMgLSAxOyB9Ci0gICAgaW50IHBhcmFtZXRlckNvdW50SW5jbHVkaW5n
VGhpcygpIHsgcmV0dXJuIG1fcGFyYW1ldGVyQ291bnRJbmNsdWRpbmdUaGlzOyB9Ci0gICAgdm9p
ZCBzZXRQYXJhbWV0ZXJDb3VudEluY2x1ZGluZ1RoaXMoaW50IHBhcmFtZXRlckNvdW50SW5jbHVk
aW5nVGhpcykgeyBtX3BhcmFtZXRlckNvdW50SW5jbHVkaW5nVGhpcyA9IHBhcmFtZXRlckNvdW50
SW5jbHVkaW5nVGhpczsgfQotCi0gICAgLy8gMCBpZiB3ZSBkb24ndCBjYXB0dXJlIGFueSBhcmd1
bWVudHM7IHBhcmFtZXRlckNvdW50KCkgaW4gbGVuZ3RoIGlmIHdlIGRvLgotICAgIGNvbnN0IFNs
b3dBcmd1bWVudCogc2xvd0FyZ3VtZW50cygpIHsgcmV0dXJuIG1fc2xvd0FyZ3VtZW50cy5nZXQo
KTsgfQotICAgIHZvaWQgc2V0U2xvd0FyZ3VtZW50cyhzdGQ6OnVuaXF1ZV9wdHI8U2xvd0FyZ3Vt
ZW50W10+IHNsb3dBcmd1bWVudHMpIHsgbV9zbG93QXJndW1lbnRzID0gV1RGOjptb3ZlKHNsb3dB
cmd1bWVudHMpOyB9Ci0gICAgCi0gICAgU3ltYm9sVGFibGUqIGNsb25lQ2FwdHVyZWROYW1lcyhW
TSYpOworICAgIFN5bWJvbFRhYmxlKiBjbG9uZVNjb3BlUGFydChWTSYpOwogCiAgICAgdm9pZCBw
cmVwYXJlRm9yVHlwZVByb2ZpbGluZyhjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJik7CiAKQEAg
LTUxMyw2ICs2MzQsOCBAQCBwcml2YXRlOgogICAgIH5TeW1ib2xUYWJsZSgpOwogCiAgICAgTWFw
IG1fbWFwOworICAgIFNjb3BlT2Zmc2V0IG1fbWF4U2NvcGVPZmZzZXQ7CisgICAgCiAgICAgc3Ry
dWN0IFR5cGVQcm9maWxpbmdSYXJlRGF0YSB7CiAgICAgICAgIFVuaXF1ZUlETWFwIG1fdW5pcXVl
SURNYXA7CiAgICAgICAgIFJlZ2lzdGVyVG9WYXJpYWJsZU1hcCBtX3JlZ2lzdGVyVG9WYXJpYWJs
ZU1hcDsKQEAgLTUyMCwxMyArNjQzLDkgQEAgcHJpdmF0ZToKICAgICB9OwogICAgIHN0ZDo6dW5p
cXVlX3B0cjxUeXBlUHJvZmlsaW5nUmFyZURhdGE+IG1fdHlwZVByb2ZpbGluZ1JhcmVEYXRhOwog
Ci0gICAgaW50IG1fcGFyYW1ldGVyQ291bnRJbmNsdWRpbmdUaGlzOwogICAgIGJvb2wgbV91c2Vz
Tm9uU3RyaWN0RXZhbDsKLQotICAgIGludCBtX2NhcHR1cmVTdGFydDsKLSAgICBpbnQgbV9jYXB0
dXJlRW5kOwotCi0gICAgc3RkOjp1bmlxdWVfcHRyPFNsb3dBcmd1bWVudFtdPiBtX3Nsb3dBcmd1
bWVudHM7CisgICAgCisgICAgV3JpdGVCYXJyaWVyPFNjb3BlZEFyZ3VtZW50c1RhYmxlPiBtX2Fy
Z3VtZW50czsKICAgICAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8V2F0Y2hwb2ludENsZWFudXA+IG1f
d2F0Y2hwb2ludENsZWFudXA7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1Zhck9mZnNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVmFyT2Zmc2V0LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1Zhck9mZnNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3NiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiVmFyT2Zmc2V0LmgiCisKK25hbWVzcGFjZSBKU0MgeworCit2b2lk
IFZhck9mZnNldDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIHN3aXRjaCAo
bV9raW5kKSB7CisgICAgY2FzZSBJbnZhbGlkVmFyS2luZDoKKyAgICAgICAgb3V0LnByaW50KCJp
bnZhbGlkIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFNjb3BlVmFyS2luZDoKKyAgICAg
ICAgb3V0LnByaW50KHNjb3BlT2Zmc2V0KCkpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBT
dGFja1ZhcktpbmQ6CisgICAgICAgIG91dC5wcmludChzdGFja09mZnNldCgpKTsKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgQ2FwdHVyZWRBcmd1bWVudEtpbmQ6CisgICAgICAgIG91dC5wcmlu
dChjYXB0dXJlZEFyZ3VtZW50T2Zmc2V0KCkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwor
CituYW1lc3BhY2UgV1RGIHsKKwordXNpbmcgbmFtZXNwYWNlIEpTQzsKKwordm9pZCBwcmludElu
dGVybmFsKFByaW50U3RyZWFtJiBvdXQsIFZhcktpbmQgdmFyS2luZCkKK3sKKyAgICBzd2l0Y2gg
KHZhcktpbmQpIHsKKyAgICBjYXNlIEludmFsaWRWYXJLaW5kOgorICAgICAgICBvdXQucHJpbnQo
IkludmFsaWQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU2NvcGVWYXJLaW5kOgorICAg
ICAgICBvdXQucHJpbnQoIlNjb3BlIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFN0YWNr
VmFyS2luZDoKKyAgICAgICAgb3V0LnByaW50KCJTdGFjayIpOworICAgICAgICByZXR1cm47Cisg
ICAgY2FzZSBDYXB0dXJlZEFyZ3VtZW50S2luZDoKKyAgICAgICAgb3V0LnByaW50KCJDYXB0dXJl
ZEFyZ3VtZW50Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1Zhck9mZnNldC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1Zhck9mZnNldC5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVmFyT2Zmc2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwyMTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2lmbmRlZiBWYXJPZmZzZXRfaAorI2RlZmluZSBWYXJPZmZzZXRfaAorCisjaW5jbHVkZSAi
Q2FwdHVyZWRBcmd1bWVudHNPZmZzZXQuaCIKKyNpbmNsdWRlICJTY29wZU9mZnNldC5oIgorI2lu
Y2x1ZGUgIlZpcnR1YWxSZWdpc3Rlci5oIgorCituYW1lc3BhY2UgSlNDIHsKKworZW51bSBWYXJL
aW5kIDogdWludDhfdCB7CisgICAgSW52YWxpZFZhcktpbmQsCisgICAgU2NvcGVWYXJLaW5kLAor
ICAgIFN0YWNrVmFyS2luZCwKKyAgICBDYXB0dXJlZEFyZ3VtZW50S2luZAorfTsKKworY2xhc3Mg
VmFyT2Zmc2V0IHsKK3B1YmxpYzoKKyAgICBWYXJPZmZzZXQoKQorICAgICAgICA6IG1fa2luZChJ
bnZhbGlkVmFyS2luZCkKKyAgICAgICAgLCBtX29mZnNldChVSU5UX01BWCkKKyAgICB7CisgICAg
fQorICAgIAorICAgIGV4cGxpY2l0IFZhck9mZnNldChWaXJ0dWFsUmVnaXN0ZXIgc3RhY2tPZmZz
ZXQpCisgICAgeworICAgICAgICBpZiAoIXN0YWNrT2Zmc2V0LmlzVmFsaWQoKSkgeworICAgICAg
ICAgICAgbV9raW5kID0gSW52YWxpZFZhcktpbmQ7CisgICAgICAgICAgICBtX29mZnNldCA9IFVJ
TlRfTUFYOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbV9raW5kID0gU3RhY2tWYXJL
aW5kOworICAgICAgICAgICAgbV9vZmZzZXQgPSBzdGFja09mZnNldC5vZmZzZXQoKTsKKyAgICAg
ICAgfQorICAgIH0KKyAgICAKKyAgICBleHBsaWNpdCBWYXJPZmZzZXQoU2NvcGVPZmZzZXQgc2Nv
cGVPZmZzZXQpCisgICAgeworICAgICAgICBpZiAoIXNjb3BlT2Zmc2V0KSB7CisgICAgICAgICAg
ICBtX2tpbmQgPSBJbnZhbGlkVmFyS2luZDsKKyAgICAgICAgICAgIG1fb2Zmc2V0ID0gVUlOVF9N
QVg7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX2tpbmQgPSBTY29wZVZhcktpbmQ7
CisgICAgICAgICAgICBtX29mZnNldCA9IHNjb3BlT2Zmc2V0Lm9mZnNldCgpOworICAgICAgICB9
CisgICAgfQorICAgIAorICAgIGV4cGxpY2l0IFZhck9mZnNldChDYXB0dXJlZEFyZ3VtZW50c09m
ZnNldCBjYXB0dXJlZEFyZ3VtZW50c09mZnNldCkKKyAgICB7CisgICAgICAgIGlmICghY2FwdHVy
ZWRBcmd1bWVudHNPZmZzZXQpIHsKKyAgICAgICAgICAgIG1fa2luZCA9IEludmFsaWRWYXJLaW5k
OworICAgICAgICAgICAgbV9vZmZzZXQgPSBVSU5UX01BWDsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIG1fa2luZCA9IENhcHR1cmVkQXJndW1lbnRLaW5kOworICAgICAgICAgICAgbV9v
ZmZzZXQgPSBjYXB0dXJlZEFyZ3VtZW50c09mZnNldC5vZmZzZXQoKTsKKyAgICAgICAgfQorICAg
IH0KKyAgICAKKyAgICBzdGF0aWMgVmFyT2Zmc2V0IGFzc2VtYmxlKFZhcktpbmQga2luZCwgdW5z
aWduZWQgb2Zmc2V0KQorICAgIHsKKyAgICAgICAgVmFyT2Zmc2V0IHJlc3VsdDsKKyAgICAgICAg
cmVzdWx0Lm1fa2luZCA9IGtpbmQ7CisgICAgICAgIHJlc3VsdC5tX29mZnNldCA9IG9mZnNldDsK
KyAgICAgICAgcmVzdWx0LmNoZWNrU2FuaXR5KCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgfQorICAgIAorICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gbV9raW5kICE9IEludmFsaWRWYXJLaW5kOworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJh
dG9yISgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gIWlzVmFsaWQoKTsKKyAgICB9Cisg
ICAgCisgICAgVmFyS2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4gbV9raW5kOyB9CisgICAgCisg
ICAgYm9vbCBpc1N0YWNrKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2tpbmQgPT0g
U3RhY2tWYXJLaW5kOworICAgIH0KKyAgICAKKyAgICBib29sIGlzU2NvcGUoKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIG1fa2luZCA9PSBTY29wZVZhcktpbmQ7CisgICAgfQorICAgIAor
ICAgIGJvb2wgaXNDYXB0dXJlZEFyZ3VtZW50KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biBtX2tpbmQgPT0gQ2FwdHVyZWRBcmd1bWVudEtpbmQ7CisgICAgfQorICAgIAorICAgIFZpcnR1
YWxSZWdpc3RlciBzdGFja09mZnNldFVuY2hlY2tlZCgpIGNvbnN0CisgICAgeworICAgICAgICBp
ZiAoIWlzU3RhY2soKSkKKyAgICAgICAgICAgIHJldHVybiBWaXJ0dWFsUmVnaXN0ZXIoKTsKKyAg
ICAgICAgcmV0dXJuIFZpcnR1YWxSZWdpc3RlcihtX29mZnNldCk7CisgICAgfQorICAgIAorICAg
IFNjb3BlT2Zmc2V0IHNjb3BlT2Zmc2V0VW5jaGVja2VkKCkgY29uc3QKKyAgICB7CisgICAgICAg
IGlmICghaXNTY29wZSgpKQorICAgICAgICAgICAgcmV0dXJuIFNjb3BlT2Zmc2V0KCk7CisgICAg
ICAgIHJldHVybiBTY29wZU9mZnNldChtX29mZnNldCk7CisgICAgfQorICAgIAorICAgIENhcHR1
cmVkQXJndW1lbnRzT2Zmc2V0IGNhcHR1cmVkQXJndW1lbnRzT2Zmc2V0VW5jaGVja2VkKCkgY29u
c3QKKyAgICB7CisgICAgICAgIGlmICghaXNDYXB0dXJlZEFyZ3VtZW50KCkpCisgICAgICAgICAg
ICByZXR1cm4gQ2FwdHVyZWRBcmd1bWVudHNPZmZzZXQoKTsKKyAgICAgICAgcmV0dXJuIENhcHR1
cmVkQXJndW1lbnRzT2Zmc2V0KG1fb2Zmc2V0KTsKKyAgICB9CisgICAgCisgICAgVmlydHVhbFJl
Z2lzdGVyIHN0YWNrT2Zmc2V0KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc1N0YWNr
KCkpOworICAgICAgICByZXR1cm4gVmlydHVhbFJlZ2lzdGVyKG1fb2Zmc2V0KTsKKyAgICB9Cisg
ICAgCisgICAgU2NvcGVPZmZzZXQgc2NvcGVPZmZzZXQoKSBjb25zdAorICAgIHsKKyAgICAgICAg
QVNTRVJUKGlzU2NvcGUoKSk7CisgICAgICAgIHJldHVybiBTY29wZU9mZnNldChtX29mZnNldCk7
CisgICAgfQorICAgIAorICAgIENhcHR1cmVkQXJndW1lbnRzT2Zmc2V0IGNhcHR1cmVkQXJndW1l
bnRzT2Zmc2V0KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc0NhcHR1cmVkQXJndW1l
bnQoKSk7CisgICAgICAgIHJldHVybiBDYXB0dXJlZEFyZ3VtZW50c09mZnNldChtX29mZnNldCk7
CisgICAgfQorICAgIAorICAgIHVuc2lnbmVkIHJhd09mZnNldCgpIGNvbnN0CisgICAgeworICAg
ICAgICBBU1NFUlQoaXNWYWxpZCgpKTsKKyAgICAgICAgcmV0dXJuIG1fb2Zmc2V0OworICAgIH0K
KyAgICAKKyAgICB2b2lkIGNoZWNrU2FuaXR5KCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChB
U1NFUlRfRElTQUJMRUQpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBz
d2l0Y2ggKG1fa2luZCkgeworICAgICAgICBjYXNlIEludmFsaWRWYXJLaW5kOgorICAgICAgICAg
ICAgQVNTRVJUKG1fb2Zmc2V0ID09IFVJTlRfTUFYKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgY2FzZSBTY29wZVZhcktpbmQ6CisgICAgICAgICAgICBBU1NFUlQoc2NvcGVPZmZzZXQo
KSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNhc2UgU3RhY2tWYXJLaW5kOgorICAg
ICAgICAgICAgQVNTRVJUKHN0YWNrT2Zmc2V0KCkpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICBjYXNlIENhcHR1cmVkQXJndW1lbnRLaW5kOgorICAgICAgICAgICAgQVNTRVJUKGNhcHR1
cmVkQXJndW1lbnRzT2Zmc2V0KCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisgICAgCisgICAg
Ym9vbCBvcGVyYXRvcj09KGNvbnN0IFZhck9mZnNldCYgb3RoZXIpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gbV9raW5kID09IG90aGVyLm1fa2luZAorICAgICAgICAgICAgJiYgbV9vZmZz
ZXQgPT0gb3RoZXIubV9vZmZzZXQ7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3IhPShj
b25zdCBWYXJPZmZzZXQmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICEoKnRo
aXMgPT0gb3RoZXIpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBj
b25zdDsKKyAgICAKK3ByaXZhdGU6CisgICAgVmFyS2luZCBtX2tpbmQ7CisgICAgdW5zaWduZWQg
bV9vZmZzZXQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworbmFtZXNwYWNlIFdURiB7CisK
K3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6VmFyS2luZCk7CisKK30gLy8g
bmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gVmFyT2Zmc2V0X2gKKwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>247723</attachid>
            <date>2015-03-02 17:05:45 -0800</date>
            <delta_ts>2015-03-02 19:45:00 -0800</delta_ts>
            <desc>starting to get the DFG backend up to speed</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>389391</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2Vt
Ymxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJz
dHJhY3RNYWNyb0Fzc2VtYmxlci5oCShyZXZpc2lvbiAxODA5MTApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMjA1LDYgKzIwNSwxMSBAQCBwdWJsaWM6CiAgICAgICAgIFJlZ2lzdGVySUQgaW5kZXg7
CiAgICAgICAgIFNjYWxlIHNjYWxlOwogICAgICAgICBpbnQzMl90IG9mZnNldDsKKyAgICAgICAg
CisgICAgICAgIEJhc2VJbmRleCB3aXRoT2Zmc2V0KGludDMyX3QgYWRkaXRpb25hbE9mZnNldCkK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEJhc2VJbmRleChiYXNlLCBpbmRleCwgc2Nh
bGUsIG9mZnNldCArIGFkZGl0aW9uYWxPZmZzZXQpOworICAgICAgICB9CiAgICAgfTsKIAogICAg
IC8vIEFic29sdXRlQWRkcmVzczoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9CeVZhbEluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQnlWYWxJbmZvLmgJKHJldmlzaW9uIDE4MDkxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9CeVZhbEluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDEsNiArNDEsOCBAQCBlbnVt
IEpJVEFycmF5TW9kZSB7CiAgICAgSklURG91YmxlLAogICAgIEpJVENvbnRpZ3VvdXMsCiAgICAg
SklUQXJyYXlTdG9yYWdlLAorICAgIEpJVERpcmVjdEFyZ3VtZW50cywKKyAgICBKSVRTY29wZWRB
cmd1bWVudHMsCiAgICAgSklUSW50OEFycmF5LAogICAgIEpJVEludDE2QXJyYXksCiAgICAgSklU
SW50MzJBcnJheSwKQEAgLTY1LDYgKzY3LDE3IEBAIGlubGluZSBib29sIGlzT3B0aW1pemFibGVJ
bmRleGluZ1R5cGUoSW4KICAgICB9CiB9CiAKK2lubGluZSBib29sIGhhc09wdGltaXphYmxlSW5k
ZXhpbmdGb3JKU1R5cGUoSlNUeXBlIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAg
Y2FzZSBEaXJlY3RBcmd1bWVudHNUeXBlOgorICAgIGNhc2UgU2NvcGVkQXJndW1lbnRzVHlwZToK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KK30KKwogaW5saW5lIGJvb2wgaGFzT3B0aW1pemFibGVJbmRleGluZ0ZvckNsYXNz
SW5mbyhjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbykKIHsKICAgICByZXR1cm4gaXNUeXBlZFZp
ZXcoY2xhc3NJbmZvLT50eXBlZEFycmF5U3RvcmFnZVR5cGUpOwpAQCAtNzMsNiArODYsNyBAQCBp
bmxpbmUgYm9vbCBoYXNPcHRpbWl6YWJsZUluZGV4aW5nRm9yQ2xhCiBpbmxpbmUgYm9vbCBoYXNP
cHRpbWl6YWJsZUluZGV4aW5nKFN0cnVjdHVyZSogc3RydWN0dXJlKQogewogICAgIHJldHVybiBp
c09wdGltaXphYmxlSW5kZXhpbmdUeXBlKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpCisgICAg
ICAgIHx8IGhhc09wdGltaXphYmxlSW5kZXhpbmdGb3JKU1R5cGUoc3RydWN0dXJlLT50eXBlSW5m
bygpLnR5cGUoKSkKICAgICAgICAgfHwgaGFzT3B0aW1pemFibGVJbmRleGluZ0ZvckNsYXNzSW5m
byhzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpKTsKIH0KIApAQCAtOTMsNiArMTA3LDE5IEBAIGlubGlu
ZSBKSVRBcnJheU1vZGUgaml0QXJyYXlNb2RlRm9ySW5kZXgKICAgICB9CiB9CiAKK2lubGluZSBK
SVRBcnJheU1vZGUgaml0QXJyYXlNb2RlRm9ySlNUeXBlKEpTVHlwZSB0eXBlKQoreworICAgIHN3
aXRjaCAodHlwZSkgeworICAgIGNhc2UgRGlyZWN0QXJndW1lbnRzVHlwZToKKyAgICAgICAgcmV0
dXJuIEpJVERpcmVjdEFyZ3VtZW50czsKKyAgICBjYXNlIFNjb3BlZEFyZ3VtZW50c1R5cGU6Cisg
ICAgICAgIHJldHVybiBKSVRTY29wZWRBcmd1bWVudHM7CisgICAgZGVmYXVsdDoKKyAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIEpJVENvbnRpZ3Vv
dXM7CisgICAgfQorfQorCiBpbmxpbmUgSklUQXJyYXlNb2RlIGppdEFycmF5TW9kZUZvckNsYXNz
SW5mbyhjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbykKIHsKICAgICBzd2l0Y2ggKGNsYXNzSW5m
by0+dHlwZWRBcnJheVN0b3JhZ2VUeXBlKSB7CkBAIC0xMjAsNiArMTQ3LDE5IEBAIGlubGluZSBK
SVRBcnJheU1vZGUgaml0QXJyYXlNb2RlRm9yQ2xhc3MKICAgICB9CiB9CiAKK2lubGluZSBib29s
IGppdEFycmF5TW9kZVBlcm1pdHNQdXQoSklUQXJyYXlNb2RlIG1vZGUpCit7CisgICAgc3dpdGNo
IChtb2RlKSB7CisgICAgY2FzZSBKSVREaXJlY3RBcmd1bWVudHM6CisgICAgY2FzZSBKSVRTY29w
ZWRBcmd1bWVudHM6CisgICAgICAgIC8vIFdlIGNvdWxkIHN1cHBvcnQgcHV0X2J5X3ZhbCBvbiB0
aGVzZSBhdCBzb21lIHBvaW50LCBidXQgaXQncyBqdXN0IG5vdCB0aGF0IHByb2ZpdGFibGUKKyAg
ICAgICAgLy8gYXQgdGhlIG1vbWVudC4KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGRlZmF1
bHQ6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KK30KKwogaW5saW5lIFR5cGVkQXJyYXlU
eXBlIHR5cGVkQXJyYXlUeXBlRm9ySklUQXJyYXlNb2RlKEpJVEFycmF5TW9kZSBtb2RlKQogewog
ICAgIHN3aXRjaCAobW9kZSkgewpAQCAtMTUyLDYgKzE5Miw5IEBAIGlubGluZSBKSVRBcnJheU1v
ZGUgaml0QXJyYXlNb2RlRm9yU3RydWMKICAgICBpZiAoaXNPcHRpbWl6YWJsZUluZGV4aW5nVHlw
ZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSkKICAgICAgICAgcmV0dXJuIGppdEFycmF5TW9k
ZUZvckluZGV4aW5nVHlwZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKTsKICAgICAKKyAgICBp
ZiAoaGFzT3B0aW1pemFibGVJbmRleGluZ0ZvckpTVHlwZShzdHJ1Y3R1cmUtPnR5cGVJbmZvKCku
dHlwZSgpKSkKKyAgICAgICAgcmV0dXJuIGppdEFycmF5TW9kZUZvckpTVHlwZShzdHJ1Y3R1cmUt
PnR5cGVJbmZvKCkudHlwZSgpKTsKKyAgICAKICAgICBBU1NFUlQoaGFzT3B0aW1pemFibGVJbmRl
eGluZ0ZvckNsYXNzSW5mbyhzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpKSk7CiAgICAgcmV0dXJuIGpp
dEFycmF5TW9kZUZvckNsYXNzSW5mbyhzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpKTsKIH0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QuanNvbgo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0Lmpzb24J
KHJldmlzaW9uIDE4MDkxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRl
Y29kZUxpc3QuanNvbgkod29ya2luZyBjb3B5KQpAQCAtNyw4ICs3LDkgQEAKICAgICAgICAgICAg
IHsgIm5hbWUiIDogIm9wX2NyZWF0ZV9sZXhpY2FsX2Vudmlyb25tZW50IiwgImxlbmd0aCIgOiAz
IH0sCiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9nZXRfc2NvcGUiLCAibGVuZ3RoIiA6IDIg
fSwKICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX3RvdWNoX2VudHJ5IiwgImxlbmd0aCIgOiAx
IH0sCi0gICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9pbml0X2xhenlfcmVnIiwgImxlbmd0aCIg
OiAyIH0sCi0gICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9jcmVhdGVfYXJndW1lbnRzIiwgImxl
bmd0aCIgOiAzIH0sCisgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9jcmVhdGVfZGlyZWN0X2Fy
Z3VtZW50cyIsICJsZW5ndGgiIDogMiB9LCAvLyBqdXN0IHRha2VzIHRoZSBkc3QgcmVnaXN0ZXIK
KyAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX2NyZWF0ZV9zY29wZWRfYXJndW1lbnRzIiwgImxl
bmd0aCIgOiAzIH0sIC8vIGRzdCwgc2NvcGVSZWdpc3RlciwgaW1wbGljaXRseSB1c2VzIHRoZSBT
Y29wZWRBcmd1bWVudHNUYWJsZSBpbiB0aGUgU3ltYm9sVGFibGUgb2YgdGhlIENvZGVCbG9jawor
ICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfY3JlYXRlX291dF9vZl9iYW5kX2FyZ3VtZW50cyIs
ICJsZW5ndGgiIDogMiB9LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfY3JlYXRlX3RoaXMi
LCAibGVuZ3RoIiA6IDQgfSwKICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX2dldF9jYWxsZWUi
LCAibGVuZ3RoIiA6IDMgfSwKICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX3RvX3RoaXMiLCAi
bGVuZ3RoIiA6IDQgfSwKQEAgLTYxLDcgKzYyLDYgQEAKICAgICAgICAgICAgIHsgIm5hbWUiIDog
Im9wX2dldF9ieV9pZCIsICJsZW5ndGgiIDogOSAgfSwKICAgICAgICAgICAgIHsgIm5hbWUiIDog
Im9wX2dldF9ieV9pZF9vdXRfb2ZfbGluZSIsICJsZW5ndGgiIDogOSAgfSwKICAgICAgICAgICAg
IHsgIm5hbWUiIDogIm9wX2dldF9hcnJheV9sZW5ndGgiLCAibGVuZ3RoIiA6IDkgfSwKLSAgICAg
ICAgICAgIHsgIm5hbWUiIDogIm9wX2dldF9hcmd1bWVudHNfbGVuZ3RoIiwgImxlbmd0aCIgOiA0
IH0sCiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9wdXRfYnlfaWQiLCAibGVuZ3RoIiA6IDkg
fSwKICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX3B1dF9ieV9pZF9vdXRfb2ZfbGluZSIsICJs
ZW5ndGgiIDogOSB9LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfcHV0X2J5X2lkX3RyYW5z
aXRpb25fZGlyZWN0IiwgImxlbmd0aCIgOiA5IH0sCkBAIC03MCw3ICs3MCw2IEBACiAgICAgICAg
ICAgICB7ICJuYW1lIiA6ICJvcF9wdXRfYnlfaWRfdHJhbnNpdGlvbl9ub3JtYWxfb3V0X29mX2xp
bmUiLCAibGVuZ3RoIiA6IDkgfSwKICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX2RlbF9ieV9p
ZCIsICJsZW5ndGgiIDogNCB9LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfZ2V0X2J5X3Zh
bCIsICJsZW5ndGgiIDogNiB9LAotICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfZ2V0X2FyZ3Vt
ZW50X2J5X3ZhbCIsICJsZW5ndGgiIDogNyB9LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3Bf
cHV0X2J5X3ZhbCIsICJsZW5ndGgiIDogNSB9LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3Bf
cHV0X2J5X3ZhbF9kaXJlY3QiLCAibGVuZ3RoIiA6IDUgfSwKICAgICAgICAgICAgIHsgIm5hbWUi
IDogIm9wX2RlbF9ieV92YWwiLCAibGVuZ3RoIiA6IDQgfSwKQEAgLTk0LDEyICs5MywxMSBAQAog
ICAgICAgICAgICAgeyAibmFtZSIgOiAib3Bfc3dpdGNoX2ltbSIsICJsZW5ndGgiIDogNCB9LAog
ICAgICAgICAgICAgeyAibmFtZSIgOiAib3Bfc3dpdGNoX2NoYXIiLCAibGVuZ3RoIiA6IDQgfSwK
ICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX3N3aXRjaF9zdHJpbmciLCAibGVuZ3RoIiA6IDQg
fSwKLSAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX25ld19mdW5jIiwgImxlbmd0aCIgOiA1IH0s
CisgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9uZXdfZnVuYyIsICJsZW5ndGgiIDogNCB9LAog
ICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfbmV3X2Z1bmNfZXhwIiwgImxlbmd0aCIgOiA0IH0s
CiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9jYWxsIiwgImxlbmd0aCIgOiA5IH0sCiAgICAg
ICAgICAgICB7ICJuYW1lIiA6ICJvcF9jYWxsX2V2YWwiLCAibGVuZ3RoIiA6IDkgfSwKICAgICAg
ICAgICAgIHsgIm5hbWUiIDogIm9wX2NhbGxfdmFyYXJncyIsICJsZW5ndGgiIDogOSB9LAotICAg
ICAgICAgICAgeyAibmFtZSIgOiAib3BfdGVhcl9vZmZfYXJndW1lbnRzIiwgImxlbmd0aCIgOiAz
IH0sCiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9yZXQiLCAibGVuZ3RoIiA6IDIgfSwKICAg
ICAgICAgICAgIHsgIm5hbWUiIDogIm9wX2NvbnN0cnVjdCIsICJsZW5ndGgiIDogOSB9LAogICAg
ICAgICAgICAgeyAibmFtZSIgOiAib3BfY29uc3RydWN0X3ZhcmFyZ3MiLCAibGVuZ3RoIiA6IDkg
fSwKQEAgLTEwOCw2ICsxMDYsOCBAQAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfcmVzb2x2
ZV9zY29wZSIsICJsZW5ndGgiIDogNyB9LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfZ2V0
X2Zyb21fc2NvcGUiLCAibGVuZ3RoIiA6IDggfSwKICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9w
X3B1dF90b19zY29wZSIsICJsZW5ndGgiIDogNyB9LAorICAgICAgICAgICAgeyAibmFtZSIgOiAi
b3BfZ2V0X2Zyb21fYXJndW1lbnRzIiwgImxlbmd0aCIgOiA1IH0sIC8vIGRzdCwgYXJndW1lbnRz
LCBpbmRleCwgcHJvZmlsZQorICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfcHV0X3RvX2FyZ3Vt
ZW50cyIsICJsZW5ndGgiIDogNCB9LCAvLyBhcmd1bWVudHMsIGluZGV4LCBzcmMKICAgICAgICAg
ICAgIHsgIm5hbWUiIDogIm9wX3B1c2hfd2l0aF9zY29wZSIsICJsZW5ndGgiIDogMyB9LAogICAg
ICAgICAgICAgeyAibmFtZSIgOiAib3BfcG9wX3Njb3BlIiwgImxlbmd0aCIgOiAyIH0sCiAgICAg
ICAgICAgICB7ICJuYW1lIiA6ICJvcF9wdXNoX25hbWVfc2NvcGUiLCAibGVuZ3RoIiA6IDUgfSwK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShy
ZXZpc2lvbiAxODA5MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTY5LDE3ICs1NjksNiBAQCB2b2lkIENvZGVCbG9j
azo6ZHVtcEJ5dGVjb2RlKFByaW50U3RyZWFtCiAgICAgICAgIHN0YXRpY19jYXN0PHVuc2lnbmVk
IGxvbmc+KGluc3RydWN0aW9ucygpLnNpemUoKSksCiAgICAgICAgIHN0YXRpY19jYXN0PHVuc2ln
bmVkIGxvbmc+KGluc3RydWN0aW9ucygpLnNpemUoKSAqIHNpemVvZihJbnN0cnVjdGlvbikpLAog
ICAgICAgICBtX251bVBhcmFtZXRlcnMsIG1fbnVtQ2FsbGVlUmVnaXN0ZXJzLCBtX251bVZhcnMp
OwotICAgIGlmIChzeW1ib2xUYWJsZSgpICYmIHN5bWJvbFRhYmxlKCktPmNhcHR1cmVDb3VudCgp
KSB7Ci0gICAgICAgIG91dC5wcmludGYoCi0gICAgICAgICAgICAiOyAlZCBjYXB0dXJlZCB2YXIo
cykgKGZyb20gciVkIHRvIHIlZCwgaW5jbHVzaXZlKSIsCi0gICAgICAgICAgICBzeW1ib2xUYWJs
ZSgpLT5jYXB0dXJlQ291bnQoKSwgc3ltYm9sVGFibGUoKS0+Y2FwdHVyZVN0YXJ0KCksIHN5bWJv
bFRhYmxlKCktPmNhcHR1cmVFbmQoKSArIDEpOwotICAgIH0KLSAgICBpZiAodXNlc0FyZ3VtZW50
cygpKSB7Ci0gICAgICAgIG91dC5wcmludGYoCi0gICAgICAgICAgICAiOyB1c2VzIGFyZ3VtZW50
cywgaW4gciVkLCByJWQiLAotICAgICAgICAgICAgYXJndW1lbnRzUmVnaXN0ZXIoKS5vZmZzZXQo
KSwKLSAgICAgICAgICAgIHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3Rlcihhcmd1bWVudHNSZWdp
c3RlcigpKS5vZmZzZXQoKSk7Ci0gICAgfQogICAgIGlmIChuZWVkc0FjdGl2YXRpb24oKSAmJiBj
b2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSkKICAgICAgICAgb3V0LnByaW50ZigiOyBsZXhpY2Fs
IGVudmlyb25tZW50IGluIHIlZCIsIGFjdGl2YXRpb25SZWdpc3RlcigpLm9mZnNldCgpKTsKICAg
ICBvdXQucHJpbnRmKCJcbiIpOwpAQCAtMTY0MSw3ICsxNjMwLDYgQEAgQ29kZUJsb2NrOjpDb2Rl
QmxvY2soQ29weVBhcnNlZEJsb2NrVGFnLAogICAgICwgbV9pbnN0cnVjdGlvbnMob3RoZXIubV9p
bnN0cnVjdGlvbnMpCiAgICAgLCBtX3RoaXNSZWdpc3RlcihvdGhlci5tX3RoaXNSZWdpc3RlcikK
ICAgICAsIG1fc2NvcGVSZWdpc3RlcihvdGhlci5tX3Njb3BlUmVnaXN0ZXIpCi0gICAgLCBtX2Fy
Z3VtZW50c1JlZ2lzdGVyKG90aGVyLm1fYXJndW1lbnRzUmVnaXN0ZXIpCiAgICAgLCBtX2xleGlj
YWxFbnZpcm9ubWVudFJlZ2lzdGVyKG90aGVyLm1fbGV4aWNhbEVudmlyb25tZW50UmVnaXN0ZXIp
CiAgICAgLCBtX2lzU3RyaWN0TW9kZShvdGhlci5tX2lzU3RyaWN0TW9kZSkKICAgICAsIG1fbmVl
ZHNBY3RpdmF0aW9uKG90aGVyLm1fbmVlZHNBY3RpdmF0aW9uKQpAQCAtMTcwMyw3ICsxNjkxLDYg
QEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soU2NyaXB0RXhlY3V0YWJsZSogbwogICAgICwgbV92bSh1
bmxpbmtlZENvZGVCbG9jay0+dm0oKSkKICAgICAsIG1fdGhpc1JlZ2lzdGVyKHVubGlua2VkQ29k
ZUJsb2NrLT50aGlzUmVnaXN0ZXIoKSkKICAgICAsIG1fc2NvcGVSZWdpc3Rlcih1bmxpbmtlZENv
ZGVCbG9jay0+c2NvcGVSZWdpc3RlcigpKQotICAgICwgbV9hcmd1bWVudHNSZWdpc3Rlcih1bmxp
bmtlZENvZGVCbG9jay0+YXJndW1lbnRzUmVnaXN0ZXIoKSkKICAgICAsIG1fbGV4aWNhbEVudmly
b25tZW50UmVnaXN0ZXIodW5saW5rZWRDb2RlQmxvY2stPmFjdGl2YXRpb25SZWdpc3RlcigpKQog
ICAgICwgbV9pc1N0cmljdE1vZGUodW5saW5rZWRDb2RlQmxvY2stPmlzU3RyaWN0TW9kZSgpKQog
ICAgICwgbV9uZWVkc0FjdGl2YXRpb24odW5saW5rZWRDb2RlQmxvY2stPmhhc0FjdGl2YXRpb25S
ZWdpc3RlcigpICYmIHVubGlua2VkQ29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29k
ZSkKQEAgLTE3MzEsOCArMTcxOCw4IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFNjcmlwdEV4ZWN1
dGFibGUqIG8KICAgICAgICAgICAgIHN5bWJvbFRhYmxlLT5wcmVwYXJlRm9yVHlwZVByb2ZpbGlu
Zyhsb2NrZXIpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKGNvZGVUeXBlKCkgPT0gRnVuY3Rp
b25Db2RlICYmIHN5bWJvbFRhYmxlLT5jYXB0dXJlQ291bnQoKSkgewotICAgICAgICAgICAgbV9z
eW1ib2xUYWJsZS5zZXQoKm1fdm0sIG1fb3duZXJFeGVjdXRhYmxlLmdldCgpLCBzeW1ib2xUYWJs
ZS0+Y2xvbmVDYXB0dXJlZE5hbWVzKCptX3ZtKSk7CisgICAgICAgIGlmIChjb2RlVHlwZSgpID09
IEZ1bmN0aW9uQ29kZSAmJiBzeW1ib2xUYWJsZS0+c2NvcGVTaXplKSkgeworICAgICAgICAgICAg
bV9zeW1ib2xUYWJsZS5zZXQoKm1fdm0sIG1fb3duZXJFeGVjdXRhYmxlLmdldCgpLCBzeW1ib2xU
YWJsZS0+Y2xvbmVTY29wZVBhcnQoKm1fdm0pKTsKICAgICAgICAgICAgIGRpZENsb25lU3ltYm9s
VGFibGUgPSB0cnVlOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIG1fc3ltYm9sVGFibGUu
c2V0KCptX3ZtLCBtX293bmVyRXhlY3V0YWJsZS5nZXQoKSwgc3ltYm9sVGFibGUpOwpAQCAtMTk3
MywxMyArMTk2MCwxNCBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBv
CiAKICAgICAgICAgICAgIC8vIGdldF9mcm9tX3Njb3BlIGRzdCwgc2NvcGUsIGlkLCBSZXNvbHZl
TW9kZUFuZFR5cGUsIFN0cnVjdHVyZSwgT3BlcmFuZAogCi0gICAgICAgICAgICBjb25zdCBJZGVu
dGlmaWVyJiBpZGVudCA9IGlkZW50aWZpZXIocGNbM10udS5vcGVyYW5kKTsKICAgICAgICAgICAg
IFJlc29sdmVNb2RlQW5kVHlwZSBtb2RlQW5kVHlwZSA9IFJlc29sdmVNb2RlQW5kVHlwZShwY1s0
XS51Lm9wZXJhbmQpOwogICAgICAgICAgICAgaWYgKG1vZGVBbmRUeXBlLnR5cGUoKSA9PSBMb2Nh
bENsb3N1cmVWYXIpIHsKICAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIDRdID0gUmVz
b2x2ZU1vZGVBbmRUeXBlKG1vZGVBbmRUeXBlLm1vZGUoKSwgQ2xvc3VyZVZhcikub3BlcmFuZCgp
OwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogCisgICAgICAgICAgICBj
b25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGlkZW50aWZpZXIocGNbM10udS5vcGVyYW5kKTsKKwog
ICAgICAgICAgICAgUmVzb2x2ZU9wIG9wID0gSlNTY29wZTo6YWJzdHJhY3RSZXNvbHZlKG1fZ2xv
YmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIG5lZWRzQWN0aXZhdGlvbigpLCBzY29wZSwgaWRlbnQs
IEdldCwgbW9kZUFuZFR5cGUudHlwZSgpKTsKIAogICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kg
KyA0XS51Lm9wZXJhbmQgPSBSZXNvbHZlTW9kZUFuZFR5cGUobW9kZUFuZFR5cGUubW9kZSgpLCBv
cC50eXBlKS5vcGVyYW5kKCk7CkBAIC0xOTk0LDE4ICsxOTgyLDEzIEBAIENvZGVCbG9jazo6Q29k
ZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUqIG8KIAogICAgICAgICBjYXNlIG9wX3B1dF90b19zY29w
ZTogewogICAgICAgICAgICAgLy8gcHV0X3RvX3Njb3BlIHNjb3BlLCBpZCwgdmFsdWUsIFJlc29s
dmVNb2RlQW5kVHlwZSwgU3RydWN0dXJlLCBPcGVyYW5kCi0gICAgICAgICAgICBjb25zdCBJZGVu
dGlmaWVyJiBpZGVudCA9IGlkZW50aWZpZXIocGNbMl0udS5vcGVyYW5kKTsKLQogICAgICAgICAg
ICAgUmVzb2x2ZU1vZGVBbmRUeXBlIG1vZGVBbmRUeXBlID0gUmVzb2x2ZU1vZGVBbmRUeXBlKHBj
WzRdLnUub3BlcmFuZCk7CiAgICAgICAgICAgICBpZiAobW9kZUFuZFR5cGUudHlwZSgpID09IExv
Y2FsQ2xvc3VyZVZhcikgewotICAgICAgICAgICAgICAgIGJvb2wgaXNXYXRjaGFibGVWYXJpYWJs
ZSA9IHBjWzVdLnUub3BlcmFuZDsKLSAgICAgICAgICAgICAgICBpZiAoIWlzV2F0Y2hhYmxlVmFy
aWFibGUpIHsKLSAgICAgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyA1XS51LndhdGNo
cG9pbnRTZXQgPSBudWxscHRyOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgU3RyaW5nSW1wbCogdWlkID0gaWRlbnQuaW1wbCgp
OwotICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGRpZENsb25lU3ltYm9sVGFibGUpOwot
ICAgICAgICAgICAgICAgIGlmIChpZGVudCAhPSBtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5hcmd1bWVu
dHMpIHsKKyAgICAgICAgICAgICAgICAvLyBPbmx5IGRvIHdhdGNoaW5nIGlmIHRoZSBwcm9wZXJ0
eSB3ZSdyZSBwdXR0aW5nIHRvIGlzIG5vdCBhbm9ueW1vdXMuCisgICAgICAgICAgICAgICAgaWYg
KHN0YXRpY19jYXN0PHVuc2lnbmVkPihwY1syXS51Lm9wZXJhbmQpICE9IFVJTlRfTUFYKSB7Cisg
ICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGRpZENsb25lU3ltYm9sVGFibGUpOwor
ICAgICAgICAgICAgICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGlkZW50aWZpZXIo
cGNbMl0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgICAgICAgICAgU3RyaW5nSW1wbCogdWlkID0g
aWRlbnQuaW1wbCgpOwogICAgICAgICAgICAgICAgICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxv
Y2tlcihtX3N5bWJvbFRhYmxlLT5tX2xvY2spOwogICAgICAgICAgICAgICAgICAgICBTeW1ib2xU
YWJsZTo6TWFwOjppdGVyYXRvciBpdGVyID0gbV9zeW1ib2xUYWJsZS0+ZmluZChsb2NrZXIsIHVp
ZCk7CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChpdGVyICE9IG1fc3ltYm9sVGFibGUtPmVu
ZChsb2NrZXIpKTsKQEAgLTIwMTYsNiArMTk5OSw4IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFNj
cmlwdEV4ZWN1dGFibGUqIG8KICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0K
IAorICAgICAgICAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBpZGVudGlmaWVyKHBjWzJd
LnUub3BlcmFuZCk7CisKICAgICAgICAgICAgIFJlc29sdmVPcCBvcCA9IEpTU2NvcGU6OmFic3Ry
YWN0UmVzb2x2ZShtX2dsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLCBuZWVkc0FjdGl2YXRpb24o
KSwgc2NvcGUsIGlkZW50LCBQdXQsIG1vZGVBbmRUeXBlLnR5cGUoKSk7CiAKICAgICAgICAgICAg
IGluc3RydWN0aW9uc1tpICsgNF0udS5vcGVyYW5kID0gUmVzb2x2ZU1vZGVBbmRUeXBlKG1vZGVB
bmRUeXBlLm1vZGUoKSwgb3AudHlwZSkub3BlcmFuZCgpOwpAQCAtMjg2Myw2MyArMjg0OCw2IEBA
IGJvb2wgQ29kZUJsb2NrOjpoYXNPcHRpbWl6ZWRSZXBsYWNlbWVudCgKIH0KICNlbmRpZgogCi1i
b29sIENvZGVCbG9jazo6aXNDYXB0dXJlZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgSW5saW5l
Q2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUpIGNvbnN0Ci17Ci0gICAgaWYgKG9wZXJhbmQuaXNB
cmd1bWVudCgpKQotICAgICAgICByZXR1cm4gb3BlcmFuZC50b0FyZ3VtZW50KCkgJiYgdXNlc0Fy
Z3VtZW50cygpOwotCi0gICAgaWYgKGlubGluZUNhbGxGcmFtZSkKLSAgICAgICAgcmV0dXJuIGlu
bGluZUNhbGxGcmFtZS0+Y2FwdHVyZWRWYXJzLmdldChvcGVyYW5kLnRvTG9jYWwoKSk7Ci0KLSAg
ICAvLyBUaGUgbGV4aWNhbCBlbnZpcm9ubWVudCBvYmplY3QgaXNuJ3QgaW4gdGhlIGNhcHR1cmVk
IHJlZ2lvbiwgYnV0IGl0J3MgImNhcHR1cmVkIgotICAgIC8vIGluIHRoZSBzZW5zZSB0aGF0IHN0
b3JlcyB0byBpdHMgbG9jYXRpb24gY2FuIGJlIG9ic2VydmVkIGluZGlyZWN0bHkuCi0gICAgaWYg
KG5lZWRzQWN0aXZhdGlvbigpICYmIG9wZXJhbmQgPT0gYWN0aXZhdGlvblJlZ2lzdGVyKCkpCi0g
ICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgLy8gRGl0dG8gZm9yIHRoZSBhcmd1bWVudHMgb2Jq
ZWN0LgotICAgIGlmICh1c2VzQXJndW1lbnRzKCkgJiYgb3BlcmFuZCA9PSBhcmd1bWVudHNSZWdp
c3RlcigpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBpZiAodXNlc0FyZ3VtZW50cygpICYm
IG9wZXJhbmQgPT0gdW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVyKGFyZ3VtZW50c1JlZ2lzdGVy
KCkpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIC8vIFdlJ3JlIGluIGdsb2JhbCBjb2Rl
IHNvIHRoZXJlIGFyZSBubyBsb2NhbHMgdG8gY2FwdHVyZQotICAgIGlmICghc3ltYm9sVGFibGUo
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIHN5bWJvbFRhYmxlKCktPmlz
Q2FwdHVyZWQob3BlcmFuZC5vZmZzZXQoKSk7Ci19Ci0KLWludCBDb2RlQmxvY2s6OmZyYW1lUG9p
bnRlck9mZnNldFRvR2V0QWN0aXZhdGlvblJlZ2lzdGVycyhpbnQgbWFjaGluZUNhcHR1cmVTdGFy
dCkKLXsKLSAgICAvLyBXZSdsbCBiZSBhZGRpbmcgdGhpcyB0byB0aGUgc3RhY2sgcG9pbnRlciB0
byBnZXQgYSByZWdpc3RlcnMgcG9pbnRlciB0aGF0IGxvb2tzCi0gICAgLy8gbGlrZSBpdCB3b3Vs
ZCBoYXZlIGxvb2tlZCBpbiB0aGUgYmFzZWxpbmUgZW5naW5lLiBGb3IgZXhhbXBsZSwgaWYgYnl0
ZWNvZGUgd291bGQKLSAgICAvLyBoYXZlIHB1dCB0aGUgZmlyc3QgY2FwdHVyZWQgdmFyaWFibGUg
YXQgb2Zmc2V0IC01IGJ1dCB3ZSBwdXQgaXQgYXQgb2Zmc2V0IC0xLCB0aGVuCi0gICAgLy8gd2Un
bGwgaGF2ZSBhbiBvZmZzZXQgb2YgNC4KLSAgICBpbnQzMl90IG9mZnNldCA9IDA7Ci0gICAgCi0g
ICAgLy8gQ29tcHV0ZSB3aGVyZSB3ZSBwdXQgdGhlIGNhcHR1cmVkIHZhcmlhYmxlcy4gVGhpcyBv
ZmZzZXQgd2lsbCBwb2ludCB0aGUgcmVnaXN0ZXJzCi0gICAgLy8gcG9pbnRlciBkaXJlY3RseSBh
dCB0aGUgZmlyc3QgY2FwdHVyZWQgdmFyLgotICAgIG9mZnNldCArPSBtYWNoaW5lQ2FwdHVyZVN0
YXJ0OwotICAgIAotICAgIC8vIE5vdyBjb21wdXRlIHRoZSBvZmZzZXQgbmVlZGVkIHRvIG1ha2Ug
dGhlIHJ1bnRpbWUgc2VlIHRoZSBjYXB0dXJlZCB2YXJpYWJsZXMgYXQgdGhlCi0gICAgLy8gc2Ft
ZSBvZmZzZXQgdGhhdCB0aGUgYnl0ZWNvZGUgd291bGQgaGF2ZSB1c2VkLgotICAgIG9mZnNldCAt
PSBzeW1ib2xUYWJsZSgpLT5jYXB0dXJlU3RhcnQoKTsKLSAgICAKLSAgICByZXR1cm4gb2Zmc2V0
OwotfQotCi1pbnQgQ29kZUJsb2NrOjpmcmFtZVBvaW50ZXJPZmZzZXRUb0dldEFjdGl2YXRpb25S
ZWdpc3RlcnMoKQotewotICAgIGlmICghSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUo
KSkpCi0gICAgICAgIHJldHVybiAwOwotI2lmIEVOQUJMRShERkdfSklUKQotICAgIHJldHVybiBm
cmFtZVBvaW50ZXJPZmZzZXRUb0dldEFjdGl2YXRpb25SZWdpc3RlcnMoaml0Q29kZSgpLT5kZmdD
b21tb24oKS0+bWFjaGluZUNhcHR1cmVTdGFydCk7Ci0jZWxzZQotICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIDA7Ci0jZW5kaWYKLX0KLQogSGFuZGxlckluZm8q
IENvZGVCbG9jazo6aGFuZGxlckZvckJ5dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2RlT2Zm
c2V0KQogewogICAgIFJFTEVBU0VfQVNTRVJUKGJ5dGVjb2RlT2Zmc2V0IDwgaW5zdHJ1Y3Rpb25z
KCkuc2l6ZSgpKTsKQEAgLTMwOTgsMTggKzMwMjYsNiBAQCBQYXNzUmVmUHRyPENvZGVCbG9jaz4g
Q29kZUJsb2NrOjpuZXdSZXBsCiAgICAgcmV0dXJuIG93bmVyRXhlY3V0YWJsZSgpLT5uZXdSZXBs
YWNlbWVudENvZGVCbG9ja0ZvcihzcGVjaWFsaXphdGlvbktpbmQoKSk7CiB9CiAKLWNvbnN0IFNs
b3dBcmd1bWVudCogQ29kZUJsb2NrOjptYWNoaW5lU2xvd0FyZ3VtZW50cygpCi17Ci0gICAgaWYg
KCFKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkKLSAgICAgICAgcmV0dXJuIHN5
bWJvbFRhYmxlKCktPnNsb3dBcmd1bWVudHMoKTsKLSAgICAKLSNpZiBFTkFCTEUoREZHX0pJVCkK
LSAgICByZXR1cm4gaml0Q29kZSgpLT5kZmdDb21tb24oKS0+c2xvd0FyZ3VtZW50cy5nZXQoKTsK
LSNlbHNlIC8vIEVOQUJMRShERkdfSklUKQotICAgIHJldHVybiAwOwotI2VuZGlmIC8vIEVOQUJM
RShERkdfSklUKQotfQotCiAjaWYgRU5BQkxFKEpJVCkKIENvZGVCbG9jayogUHJvZ3JhbUNvZGVC
bG9jazo6cmVwbGFjZW1lbnQoKQogewpAQCAtMzkwMiw2MyArMzgxOCwxMiBAQCBTdHJpbmcgQ29k
ZUJsb2NrOjpuYW1lRm9yUmVnaXN0ZXIoVmlydHVhCiAgICAgICAgIHJldHVybiBBU0NJSUxpdGVy
YWwoImxleGljYWwgZW52aXJvbm1lbnQiKTsKICAgICBpZiAodmlydHVhbFJlZ2lzdGVyID09IHRo
aXNSZWdpc3RlcigpKQogICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJ0aGlzIik7Ci0gICAg
aWYgKHVzZXNBcmd1bWVudHMoKSkgewotICAgICAgICBpZiAodmlydHVhbFJlZ2lzdGVyID09IGFy
Z3VtZW50c1JlZ2lzdGVyKCkpCi0gICAgICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJhcmd1
bWVudHMiKTsKLSAgICAgICAgaWYgKHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3Rlcihhcmd1bWVu
dHNSZWdpc3RlcigpKSA9PSB2aXJ0dWFsUmVnaXN0ZXIpCi0gICAgICAgICAgICByZXR1cm4gQVND
SUlMaXRlcmFsKCJyZWFsIGFyZ3VtZW50cyIpOwotICAgIH0KICAgICBpZiAodmlydHVhbFJlZ2lz
dGVyLmlzQXJndW1lbnQoKSkKICAgICAgICAgcmV0dXJuIFN0cmluZzo6Zm9ybWF0KCJhcmd1bWVu
dHNbJTNkXSIsIHZpcnR1YWxSZWdpc3Rlci50b0FyZ3VtZW50KCkpOwogCiAgICAgcmV0dXJuICIi
OwogfQogCi1uYW1lc3BhY2UgewotCi1zdHJ1Y3QgVmVyaWZ5Q2FwdHVyZWREZWYgewotICAgIHZv
aWQgb3BlcmF0b3IoKShDb2RlQmxvY2sqIGNvZGVCbG9jaywgSW5zdHJ1Y3Rpb24qIGluc3RydWN0
aW9uLCBPcGNvZGVJRCBvcGNvZGVJRCwgaW50IG9wZXJhbmQpCi0gICAgewotICAgICAgICB1bnNp
Z25lZCBieXRlY29kZU9mZnNldCA9IGluc3RydWN0aW9uIC0gY29kZUJsb2NrLT5pbnN0cnVjdGlv
bnMoKS5iZWdpbigpOwotICAgICAgICAKLSAgICAgICAgaWYgKGNvZGVCbG9jay0+aXNDb25zdGFu
dFJlZ2lzdGVySW5kZXgob3BlcmFuZCkpIHsKLSAgICAgICAgICAgIGNvZGVCbG9jay0+YmVnaW5W
YWxpZGF0aW9uRGlkRmFpbCgpOwotICAgICAgICAgICAgZGF0YUxvZygiICAgIEF0IGJjIyIsIGJ5
dGVjb2RlT2Zmc2V0LCAiIGVuY291bnRlcmVkIGEgZGVmaW5pdGlvbiBvZiBhIGNvbnN0YW50Llxu
Iik7Ci0gICAgICAgICAgICBjb2RlQmxvY2stPmVuZFZhbGlkYXRpb25EaWRGYWlsKCk7Ci0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBzd2l0Y2ggKG9wY29kZUlEKSB7
Ci0gICAgICAgIGNhc2Ugb3BfZW50ZXI6Ci0gICAgICAgIGNhc2Ugb3BfaW5pdF9sYXp5X3JlZzoK
LSAgICAgICAgY2FzZSBvcF9jcmVhdGVfYXJndW1lbnRzOgotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZyhvcGVyYW5kKTsKLSAgICAgICAgaWYgKCF2aXJ0
dWFsUmVnLmlzTG9jYWwoKSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBpZiAoY29k
ZUJsb2NrLT51c2VzQXJndW1lbnRzKCkgJiYgdmlydHVhbFJlZyA9PSBjb2RlQmxvY2stPmFyZ3Vt
ZW50c1JlZ2lzdGVyKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGlmIChjb2RlQmxv
Y2stPnVzZXNBcmd1bWVudHMoKSAmJiB2aXJ0dWFsUmVnID09IHVubW9kaWZpZWRBcmd1bWVudHNS
ZWdpc3Rlcihjb2RlQmxvY2stPmFyZ3VtZW50c1JlZ2lzdGVyKCkpKQotICAgICAgICAgICAgcmV0
dXJuOwotCi0gICAgICAgIGlmIChjb2RlQmxvY2stPmNhcHR1cmVDb3VudCgpICYmIGNvZGVCbG9j
ay0+c3ltYm9sVGFibGUoKS0+aXNDYXB0dXJlZChvcGVyYW5kKSkgewotICAgICAgICAgICAgY29k
ZUJsb2NrLT5iZWdpblZhbGlkYXRpb25EaWRGYWlsKCk7Ci0gICAgICAgICAgICBkYXRhTG9nKCIg
ICAgQXQgYmMjIiwgYnl0ZWNvZGVPZmZzZXQsICIgZW5jb3VudGVyZWQgaW52YWxpZCBhc3NpZ25t
ZW50IHRvIGNhcHR1cmVkIHZhcmlhYmxlICIsIHZpcnR1YWxSZWcsICIuXG4iKTsKLSAgICAgICAg
ICAgIGNvZGVCbG9jay0+ZW5kVmFsaWRhdGlvbkRpZEZhaWwoKTsKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLX07Ci0KLX0g
Ly8gYW5vbnltb3VzIG5hbWVzcGFjZQotCiB2b2lkIENvZGVCbG9jazo6dmFsaWRhdGUoKQogewog
ICAgIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcyBsaXZlbmVzcyh0aGlzKTsgLy8gQ29tcHV0ZSBk
aXJlY3RseSBmcm9tIHNjcmF0Y2ggc28gaXQgZG9lc24ndCBlZmZlY3QgQ29kZUJsb2NrIGZvb3Rw
cmludC4KQEAgLTM5NzQsMzggKzM4MzksMTUgQEAgdm9pZCBDb2RlQmxvY2s6OnZhbGlkYXRlKCkK
ICAgICB9CiAgICAgCiAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9udW1DYWxsZWVSZWdpc3RlcnM7
IGktLTspIHsKLSAgICAgICAgYm9vbCBpc0NhcHR1cmVkID0gZmFsc2U7CiAgICAgICAgIFZpcnR1
YWxSZWdpc3RlciByZWcgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpKTsKICAgICAgICAgCi0g
ICAgICAgIGlmIChjYXB0dXJlQ291bnQoKSkKLSAgICAgICAgICAgIGlzQ2FwdHVyZWQgPSByZWcu
b2Zmc2V0KCkgPD0gY2FwdHVyZVN0YXJ0KCkgJiYgcmVnLm9mZnNldCgpID4gY2FwdHVyZUVuZCgp
OwotICAgICAgICAKLSAgICAgICAgaWYgKGlzQ2FwdHVyZWQpIHsKLSAgICAgICAgICAgIGlmICgh
bGl2ZUF0SGVhZC5nZXQoaSkpIHsKLSAgICAgICAgICAgICAgICBiZWdpblZhbGlkYXRpb25EaWRG
YWlsKCk7Ci0gICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIFZhcmlhYmxlIGxvYyIsIGksICIg
aXMgZXhwZWN0ZWQgdG8gYmUgbGl2ZSBiZWNhdXNlIGl0IGlzIGNhcHR1cmVkLCBidXQgaXQgaXNu
J3QgbGl2ZS5cbiIpOwotICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBSZXN1bHQ6ICIsIGxp
dmVBdEhlYWQsICJcbiIpOwotICAgICAgICAgICAgICAgIGVuZFZhbGlkYXRpb25EaWRGYWlsKCk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAobGl2ZUF0
SGVhZC5nZXQoaSkpIHsKLSAgICAgICAgICAgICAgICBiZWdpblZhbGlkYXRpb25EaWRGYWlsKCk7
Ci0gICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIFZhcmlhYmxlIGxvYyIsIGksICIgaXMgZXhw
ZWN0ZWQgdG8gYmUgZGVhZC5cbiIpOwotICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBSZXN1
bHQ6ICIsIGxpdmVBdEhlYWQsICJcbiIpOwotICAgICAgICAgICAgICAgIGVuZFZhbGlkYXRpb25E
aWRGYWlsKCk7Ci0gICAgICAgICAgICB9CisgICAgICAgIGlmIChsaXZlQXRIZWFkLmdldChpKSkg
eworICAgICAgICAgICAgYmVnaW5WYWxpZGF0aW9uRGlkRmFpbCgpOworICAgICAgICAgICAgZGF0
YUxvZygiICAgIFZhcmlhYmxlIGxvYyIsIGksICIgaXMgZXhwZWN0ZWQgdG8gYmUgZGVhZC5cbiIp
OworICAgICAgICAgICAgZGF0YUxvZygiICAgIFJlc3VsdDogIiwgbGl2ZUF0SGVhZCwgIlxuIik7
CisgICAgICAgICAgICBlbmRWYWxpZGF0aW9uRGlkRmFpbCgpOwogICAgICAgICB9CiAgICAgfQot
ICAgIAotICAgIGZvciAodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSAwOyBieXRlY29kZU9mZnNl
dCA8IGluc3RydWN0aW9ucygpLnNpemUoKTspIHsKLSAgICAgICAgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiA9IGluc3RydWN0aW9ucygpLmJlZ2luKCkgKyBieXRlY29kZU9mZnNldDsK
LSAgICAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBtX3ZtLT5pbnRlcnByZXRlci0+Z2V0T3Bjb2Rl
SUQoY3VycmVudEluc3RydWN0aW9uLT51Lm9wY29kZSk7Ci0gICAgICAgIAotICAgICAgICBWZXJp
ZnlDYXB0dXJlZERlZiB2ZXJpZnlDYXB0dXJlZERlZjsKLSAgICAgICAgY29tcHV0ZURlZnNGb3JC
eXRlY29kZU9mZnNldCh0aGlzLCBieXRlY29kZU9mZnNldCwgdmVyaWZ5Q2FwdHVyZWREZWYpOwot
ICAgICAgICAKLSAgICAgICAgYnl0ZWNvZGVPZmZzZXQgKz0gb3Bjb2RlTGVuZ3RoKG9wY29kZUlE
KTsKLSAgICB9CiB9CiAKIHZvaWQgQ29kZUJsb2NrOjpiZWdpblZhbGlkYXRpb25EaWRGYWlsKCkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlz
aW9uIDE4MDkxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2su
aAkod29ya2luZyBjb3B5KQpAQCAtODMsOCArODMsNiBAQCBjbGFzcyBMTEludE9mZnNldHNFeHRy
YWN0b3I7CiBjbGFzcyBSZXBhdGNoQnVmZmVyOwogY2xhc3MgVHlwZUxvY2F0aW9uOwogCi1pbmxp
bmUgVmlydHVhbFJlZ2lzdGVyIHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3RlcihWaXJ0dWFsUmVn
aXN0ZXIgYXJndW1lbnRzUmVnaXN0ZXIpIHsgcmV0dXJuIFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVu
dHNSZWdpc3Rlci5vZmZzZXQoKSArIDEpOyB9Ci0KIGVudW0gUmVvcHRpbWl6YXRpb25Nb2RlIHsg
RG9udENvdW50UmVvcHRpbWl6YXRpb24sIENvdW50UmVvcHRpbWl6YXRpb24gfTsKIAogY2xhc3Mg
Q29kZUJsb2NrIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPENvZGVCbG9jaz4sIHB1Ymxp
YyBVbmNvbmRpdGlvbmFsRmluYWxpemVyLCBwdWJsaWMgV2Vha1JlZmVyZW5jZUhhcnZlc3RlciB7
CkBAIC0yNTksMTEgKzI1Nyw2IEBAIHB1YmxpYzoKIAogICAgIHVuc2lnbmVkIGluc3RydWN0aW9u
Q291bnQoKSBjb25zdCB7IHJldHVybiBtX2luc3RydWN0aW9ucy5zaXplKCk7IH0KIAotICAgIGlu
dCBhcmd1bWVudEluZGV4QWZ0ZXJDYXB0dXJlKHNpemVfdCBhcmd1bWVudCk7Ci0gICAgCi0gICAg
Ym9vbCBoYXNTbG93QXJndW1lbnRzKCk7Ci0gICAgY29uc3QgU2xvd0FyZ3VtZW50KiBtYWNoaW5l
U2xvd0FyZ3VtZW50cygpOwotCiAgICAgLy8gRXhhY3RseSBlcXVpdmFsZW50IHRvIGNvZGVCbG9j
ay0+b3duZXJFeGVjdXRhYmxlKCktPmluc3RhbGxDb2RlKGNvZGVCbG9jayk7CiAgICAgdm9pZCBp
bnN0YWxsKCk7CiAgICAgCkBAIC0zMjcsMjQgKzMyMCw2IEBAIHB1YmxpYzoKICAgICAgICAgcmV0
dXJuIG1fc2NvcGVSZWdpc3RlcjsKICAgICB9CiAKLSAgICB2b2lkIHNldEFyZ3VtZW50c1JlZ2lz
dGVyKFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudHNSZWdpc3RlcikKLSAgICB7Ci0gICAgICAgIEFT
U0VSVChhcmd1bWVudHNSZWdpc3Rlci5pc1ZhbGlkKCkpOwotICAgICAgICBtX2FyZ3VtZW50c1Jl
Z2lzdGVyID0gYXJndW1lbnRzUmVnaXN0ZXI7Ci0gICAgICAgIEFTU0VSVCh1c2VzQXJndW1lbnRz
KCkpOwotICAgIH0KLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRzUmVnaXN0ZXIoKSBjb25z
dAotICAgIHsKLSAgICAgICAgQVNTRVJUKHVzZXNBcmd1bWVudHMoKSk7Ci0gICAgICAgIHJldHVy
biBtX2FyZ3VtZW50c1JlZ2lzdGVyOwotICAgIH0KLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdW5jaGVj
a2VkQXJndW1lbnRzUmVnaXN0ZXIoKQotICAgIHsKLSAgICAgICAgaWYgKCF1c2VzQXJndW1lbnRz
KCkpCi0gICAgICAgICAgICByZXR1cm4gVmlydHVhbFJlZ2lzdGVyKCk7Ci0gICAgICAgIHJldHVy
biBhcmd1bWVudHNSZWdpc3RlcigpOwotICAgIH0KLQogICAgIHZvaWQgc2V0QWN0aXZhdGlvblJl
Z2lzdGVyKFZpcnR1YWxSZWdpc3RlciBhY3RpdmF0aW9uUmVnaXN0ZXIpCiAgICAgewogICAgICAg
ICBtX2xleGljYWxFbnZpcm9ubWVudFJlZ2lzdGVyID0gYWN0aXZhdGlvblJlZ2lzdGVyOwpAQCAt
MzYxLDQwICszMzYsMTIgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9sZXhpY2FsRW52aXJv
bm1lbnRSZWdpc3RlcjsKICAgICB9CiAKLSAgICBib29sIHVzZXNBcmd1bWVudHMoKSBjb25zdCB7
IHJldHVybiBtX2FyZ3VtZW50c1JlZ2lzdGVyLmlzVmFsaWQoKTsgfQotCiAgICAgYm9vbCBuZWVk
c0FjdGl2YXRpb24oKSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKG1fbGV4aWNhbEVudmly
b25tZW50UmVnaXN0ZXIuaXNWYWxpZCgpID09IG1fbmVlZHNBY3RpdmF0aW9uKTsKICAgICAgICAg
cmV0dXJuIG1fbmVlZHNBY3RpdmF0aW9uOwogICAgIH0KICAgICAKLSAgICB1bnNpZ25lZCBjYXB0
dXJlQ291bnQoKSBjb25zdAotICAgIHsKLSAgICAgICAgaWYgKCFzeW1ib2xUYWJsZSgpKQotICAg
ICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHJldHVybiBzeW1ib2xUYWJsZSgpLT5jYXB0dXJl
Q291bnQoKTsKLSAgICB9Ci0gICAgCi0gICAgaW50IGNhcHR1cmVTdGFydCgpIGNvbnN0Ci0gICAg
ewotICAgICAgICBpZiAoIXN5bWJvbFRhYmxlKCkpCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAg
ICAgICAgcmV0dXJuIHN5bWJvbFRhYmxlKCktPmNhcHR1cmVTdGFydCgpOwotICAgIH0KLSAgICAK
LSAgICBpbnQgY2FwdHVyZUVuZCgpIGNvbnN0Ci0gICAgewotICAgICAgICBpZiAoIXN5bWJvbFRh
YmxlKCkpCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgcmV0dXJuIHN5bWJvbFRhYmxl
KCktPmNhcHR1cmVFbmQoKTsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBpc0NhcHR1cmVkKFZpcnR1
YWxSZWdpc3RlciBvcGVyYW5kLCBJbmxpbmVDYWxsRnJhbWUqID0gMCkgY29uc3Q7Ci0gICAgCi0g
ICAgaW50IGZyYW1lUG9pbnRlck9mZnNldFRvR2V0QWN0aXZhdGlvblJlZ2lzdGVycyhpbnQgbWFj
aGluZUNhcHR1cmVTdGFydCk7Ci0gICAgaW50IGZyYW1lUG9pbnRlck9mZnNldFRvR2V0QWN0aXZh
dGlvblJlZ2lzdGVycygpOwotCiAgICAgQ29kZVR5cGUgY29kZVR5cGUoKSBjb25zdCB7IHJldHVy
biBtX3VubGlua2VkQ29kZS0+Y29kZVR5cGUoKTsgfQogICAgIFB1dFByb3BlcnR5U2xvdDo6Q29u
dGV4dCBwdXRCeUlkQ29udGV4dCgpIGNvbnN0CiAgICAgewpAQCAtMTA1Nyw3ICsxMDA0LDYgQEAg
cHJpdmF0ZToKICAgICBXcml0ZUJhcnJpZXI8U3ltYm9sVGFibGU+IG1fc3ltYm9sVGFibGU7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIG1fdGhpc1JlZ2lzdGVyOwogICAgIFZpcnR1YWxSZWdpc3RlciBt
X3Njb3BlUmVnaXN0ZXI7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIG1fYXJndW1lbnRzUmVnaXN0ZXI7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIG1fbGV4aWNhbEVudmlyb25tZW50UmVnaXN0ZXI7CiAKICAg
ICBib29sIG1faXNTdHJpY3RNb2RlOwpAQCAtMTIxOCwyNCArMTE2NCw2IEBAIGlubGluZSBDb2Rl
QmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9yT3IKICAgICByZXR1cm4gYmFzZWxpbmVDb2RlQmxv
Y2s7CiB9CiAKLWlubGluZSBpbnQgQ29kZUJsb2NrOjphcmd1bWVudEluZGV4QWZ0ZXJDYXB0dXJl
KHNpemVfdCBhcmd1bWVudCkKLXsKLSAgICBpZiAoYXJndW1lbnQgPj0gc3RhdGljX2Nhc3Q8c2l6
ZV90PihzeW1ib2xUYWJsZSgpLT5wYXJhbWV0ZXJDb3VudCgpKSkKLSAgICAgICAgcmV0dXJuIENh
bGxGcmFtZTo6YXJndW1lbnRPZmZzZXQoYXJndW1lbnQpOwotICAgIAotICAgIGNvbnN0IFNsb3dB
cmd1bWVudCogc2xvd0FyZ3VtZW50cyA9IHN5bWJvbFRhYmxlKCktPnNsb3dBcmd1bWVudHMoKTsK
LSAgICBpZiAoIXNsb3dBcmd1bWVudHMgfHwgc2xvd0FyZ3VtZW50c1thcmd1bWVudF0uc3RhdHVz
ID09IFNsb3dBcmd1bWVudDo6Tm9ybWFsKQotICAgICAgICByZXR1cm4gQ2FsbEZyYW1lOjphcmd1
bWVudE9mZnNldChhcmd1bWVudCk7Ci0gICAgCi0gICAgQVNTRVJUKHNsb3dBcmd1bWVudHNbYXJn
dW1lbnRdLnN0YXR1cyA9PSBTbG93QXJndW1lbnQ6OkNhcHR1cmVkKTsKLSAgICByZXR1cm4gc2xv
d0FyZ3VtZW50c1thcmd1bWVudF0uaW5kZXg7Ci19Ci0KLWlubGluZSBib29sIENvZGVCbG9jazo6
aGFzU2xvd0FyZ3VtZW50cygpCi17Ci0gICAgcmV0dXJuICEhc3ltYm9sVGFibGUoKS0+c2xvd0Fy
Z3VtZW50cygpOwotfQotCiBpbmxpbmUgUmVnaXN0ZXImIEV4ZWNTdGF0ZTo6cihpbnQgaW5kZXgp
CiB7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSB0aGlzLT5jb2RlQmxvY2soKTsKQEAgLTEy
NjAsMTcgKzExODgsNiBAQCBpbmxpbmUgUmVnaXN0ZXImIEV4ZWNTdGF0ZTo6dW5jaGVja2VkUihW
CiAgICAgcmV0dXJuIHVuY2hlY2tlZFIocmVnLm9mZnNldCgpKTsKIH0KIAotaW5saW5lIEpTVmFs
dWUgRXhlY1N0YXRlOjphcmd1bWVudEFmdGVyQ2FwdHVyZShzaXplX3QgYXJndW1lbnQpCi17Ci0g
ICAgaWYgKGFyZ3VtZW50ID49IGFyZ3VtZW50Q291bnQoKSkKLSAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7Ci0gICAgCi0gICAgaWYgKCFjb2RlQmxvY2soKSkKLSAgICAgICAgcmV0dXJuIHRo
aXNbYXJndW1lbnRPZmZzZXQoYXJndW1lbnQpXS5qc1ZhbHVlKCk7Ci0gICAgCi0gICAgcmV0dXJu
IHRoaXNbY29kZUJsb2NrKCktPmFyZ3VtZW50SW5kZXhBZnRlckNhcHR1cmUoYXJndW1lbnQpXS5q
c1ZhbHVlKCk7Ci19Ci0KIGlubGluZSB2b2lkIENvZGVCbG9ja1NldDo6bWFyayh2b2lkKiBjYW5k
aWRhdGVDb2RlQmxvY2spCiB7CiAgICAgLy8gV2UgaGF2ZSB0byBjaGVjayBmb3IgMCBhbmQgLTEg
YmVjYXVzZSB0aG9zZSBhcmUgdXNlZCBieSB0aGUgSGFzaE1hcCBhcyBtYXJrZXJzLgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5oCShyZXZpc2lvbiAx
ODA5MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xODksMTIgKzE4OSwxMCBAQCBzdHJ1Y3QgSW5saW5lQ2FsbEZyYW1l
IHsKICAgICBXcml0ZUJhcnJpZXI8U2NyaXB0RXhlY3V0YWJsZT4gZXhlY3V0YWJsZTsKICAgICBW
YWx1ZVJlY292ZXJ5IGNhbGxlZVJlY292ZXJ5OwogICAgIENvZGVPcmlnaW4gY2FsbGVyOwotICAg
IEJpdFZlY3RvciBjYXB0dXJlZFZhcnM7IC8vIEluZGV4ZWQgYnkgdGhlIG1hY2hpbmUgY2FsbCBm
cmFtZSdzIHZhcmlhYmxlIG51bWJlcmluZy4KIAogICAgIHNpZ25lZCBzdGFja09mZnNldCA6IDI4
OwogICAgIHVuc2lnbmVkIGtpbmQgOiAzOyAvLyByZWFsIHR5cGUgaXMgS2luZAogICAgIGJvb2wg
aXNDbG9zdXJlQ2FsbCA6IDE7IC8vIElmIGZhbHNlIHRoZW4gd2Uga25vdyB0aGF0IGNhbGxlZS9z
Y29wZSBhcmUgY29uc3RhbnRzIGFuZCB0aGUgREZHIHdvbid0IHRyZWF0IHRoZW0gYXMgdmFyaWFi
bGVzLCBpLmUuIHRoZXkgaGF2ZSB0byBiZSByZWNvdmVyZWQgbWFudWFsbHkuCi0gICAgVmlydHVh
bFJlZ2lzdGVyIGFyZ3VtZW50c1JlZ2lzdGVyOyAvLyBUaGlzIGlzIG9ubHkgc2V0IGlmIHRoZSBj
b2RlIHVzZXMgYXJndW1lbnRzLiBUaGUgdW5tb2RpZmllZCBhcmd1bWVudHMgcmVnaXN0ZXIgZm9s
bG93cyB0aGUgdW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVyKCkgY29udmVudGlvbiAoc2VlIENv
ZGVCbG9jay5oKS4KICAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRDb3VudFJlZ2lzdGVyOyAv
LyBPbmx5IHNldCB3aGVuIHdlIGlubGluZSBhIHZhcmFyZ3MgY2FsbC4KICAgICAKICAgICAvLyBU
aGVyZSBpcyByZWFsbHkgbm8gZ29vZCBub3Rpb24gb2YgYSAiZGVmYXVsdCIgc2V0IG9mIHZhbHVl
cyBmb3IKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlw
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1
bGF0ZWRUeXBlLmNwcAkocmV2aXNpb24gMTgwOTEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyLCAyMDEzLCAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMjksMTAgKzI5LDExIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVk
ZSAiU3BlY3VsYXRlZFR5cGUuaCIKIAotI2luY2x1ZGUgIkFyZ3VtZW50cy5oIgorI2luY2x1ZGUg
IkRpcmVjdEFyZ3VtZW50cy5oIgogI2luY2x1ZGUgIkpTQXJyYXkuaCIKICNpbmNsdWRlICJKU0Z1
bmN0aW9uLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIlNjb3BlZEFyZ3Vt
ZW50cy5oIgogI2luY2x1ZGUgIlN0cmluZ09iamVjdC5oIgogI2luY2x1ZGUgIlZhbHVlUHJvZmls
ZS5oIgogI2luY2x1ZGUgPHd0Zi9Cb3VuZHNDaGVja2VkUG9pbnRlci5oPgpAQCAtMTI3LDggKzEy
OCwxMyBAQCB2b2lkIGR1bXBTcGVjdWxhdGlvbihQcmludFN0cmVhbSYgb3V0LCBTCiAgICAgICAg
ICAgICBlbHNlCiAgICAgICAgICAgICAgICAgaXNUb3AgPSBmYWxzZTsKICAgICAKLSAgICAgICAg
ICAgIGlmICh2YWx1ZSAmIFNwZWNBcmd1bWVudHMpCi0gICAgICAgICAgICAgICAgbXlPdXQucHJp
bnQoIkFyZ3VtZW50cyIpOworICAgICAgICAgICAgaWYgKHZhbHVlICYgU3BlY0RpcmVjdEFyZ3Vt
ZW50cykKKyAgICAgICAgICAgICAgICBteU91dC5wcmludCgiRGlyZWN0YXJndW1lbnRzIik7Cisg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgaXNUb3AgPSBmYWxzZTsKKyAgICAKKyAg
ICAgICAgICAgIGlmICh2YWx1ZSAmIFNwZWNTY29wZWRBcmd1bWVudHMpCisgICAgICAgICAgICAg
ICAgbXlPdXQucHJpbnQoIlNjb3BlZGFyZ3VtZW50cyIpOwogICAgICAgICAgICAgZWxzZQogICAg
ICAgICAgICAgICAgIGlzVG9wID0gZmFsc2U7CiAgICAgCkBAIC0yMzIsOCArMjM4LDEwIEBAIHN0
YXRpYyBjb25zdCBjaGFyKiBzcGVjdWxhdGlvblRvQWJicmV2aWEKICAgICAgICAgcmV0dXJuICI8
RmxvYXQzMmFycmF5PiI7CiAgICAgaWYgKGlzRmxvYXQ2NEFycmF5U3BlY3VsYXRpb24ocHJlZGlj
dGlvbikpCiAgICAgICAgIHJldHVybiAiPEZsb2F0NjRhcnJheT4iOwotICAgIGlmIChpc0FyZ3Vt
ZW50c1NwZWN1bGF0aW9uKHByZWRpY3Rpb24pKQotICAgICAgICByZXR1cm4gIjxBcmd1bWVudHM+
IjsKKyAgICBpZiAoaXNEaXJlY3RBcmd1bWVudHNTcGVjdWxhdGlvbihwcmVkaWN0aW9uKSkKKyAg
ICAgICAgcmV0dXJuICI8RGlyZWN0QXJndW1lbnRzPiI7CisgICAgaWYgKGlzU2NvcGVkQXJndW1l
bnRzU3BlY3VsYXRpb24ocHJlZGljdGlvbikpCisgICAgICAgIHJldHVybiAiPFNjb3BlZEFyZ3Vt
ZW50cz4iOwogICAgIGlmIChpc1N0cmluZ09iamVjdFNwZWN1bGF0aW9uKHByZWRpY3Rpb24pKQog
ICAgICAgICByZXR1cm4gIjxTdHJpbmdPYmplY3Q+IjsKICAgICBpZiAoaXNTdHJpbmdPclN0cmlu
Z09iamVjdFNwZWN1bGF0aW9uKHByZWRpY3Rpb24pKQpAQCAtMzA1LDggKzMxMywxMSBAQCBTcGVj
dWxhdGVkVHlwZSBzcGVjdWxhdGlvbkZyb21DbGFzc0luZm8oCiAgICAgaWYgKGNsYXNzSW5mbyA9
PSBKU0FycmF5OjppbmZvKCkpCiAgICAgICAgIHJldHVybiBTcGVjQXJyYXk7CiAgICAgCi0gICAg
aWYgKGNsYXNzSW5mbyA9PSBBcmd1bWVudHM6OmluZm8oKSkKLSAgICAgICAgcmV0dXJuIFNwZWNB
cmd1bWVudHM7CisgICAgaWYgKGNsYXNzSW5mbyA9PSBEaXJlY3RBcmd1bWVudHM6OmluZm8oKSkK
KyAgICAgICAgcmV0dXJuIFNwZWNEaXJlY3RBcmd1bWVudHM7CisgICAgCisgICAgaWYgKGNsYXNz
SW5mbyA9PSBTY29wZWRBcmd1bWVudHM6OmluZm8oKSkKKyAgICAgICAgcmV0dXJuIFNwZWNTY29w
ZWRBcmd1bWVudHM7CiAgICAgCiAgICAgaWYgKGNsYXNzSW5mbyA9PSBTdHJpbmdPYmplY3Q6Omlu
Zm8oKSkKICAgICAgICAgcmV0dXJuIFNwZWNTdHJpbmdPYmplY3Q7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuaAkocmV2aXNpb24gMTgw
OTEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEx
LTIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDExLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC01Miw4ICs1Miw5IEBAIHN0YXRpYyBjb25zdCBTcGVjdWxhdGVk
VHlwZSBTcGVjVWludDMyQXIKIHN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjRmxvYXQz
MkFycmF5ICAgICAgID0gMHgwMDAwMDQwMDsgLy8gSXQncyBkZWZpbml0ZWx5IGFuIFVpbnQxNkFy
cmF5IG9yIG9uZSBvZiBpdHMgc3ViY2xhc3Nlcy4KIHN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlw
ZSBTcGVjRmxvYXQ2NEFycmF5ICAgICAgID0gMHgwMDAwMDgwMDsgLy8gSXQncyBkZWZpbml0ZWx5
IGFuIFVpbnQxNkFycmF5IG9yIG9uZSBvZiBpdHMgc3ViY2xhc3Nlcy4KIHN0YXRpYyBjb25zdCBT
cGVjdWxhdGVkVHlwZSBTcGVjVHlwZWRBcnJheVZpZXcgICAgID0gU3BlY0ludDhBcnJheSB8IFNw
ZWNJbnQxNkFycmF5IHwgU3BlY0ludDMyQXJyYXkgfCBTcGVjVWludDhBcnJheSB8IFNwZWNVaW50
OENsYW1wZWRBcnJheSB8IFNwZWNVaW50MTZBcnJheSB8IFNwZWNVaW50MzJBcnJheSB8IFNwZWNG
bG9hdDMyQXJyYXkgfCBTcGVjRmxvYXQ2NEFycmF5Owotc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRU
eXBlIFNwZWNBcmd1bWVudHMgICAgICAgICAgPSAweDAwMDAxMDAwOyAvLyBJdCdzIGRlZmluaXRl
bHkgYW4gQXJndW1lbnRzIG9iamVjdC4KLXN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVj
U3RyaW5nT2JqZWN0ICAgICAgID0gMHgwMDAwMjAwMDsgLy8gSXQncyBkZWZpbml0ZWx5IGEgU3Ry
aW5nT2JqZWN0Lgorc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNEaXJlY3RBcmd1bWVu
dHMgICAgPSAweDAwMDAxMDAwOyAvLyBJdCdzIGRlZmluaXRlbHkgYSBEaXJlY3RBcmd1bWVudHMg
b2JqZWN0Lgorc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNTY29wZWRBcmd1bWVudHMg
ICAgPSAweDAwMDAyMDAwOyAvLyBJdCdzIGRlZmluaXRlbHkgYSBTY29wZWRBcmd1bWVudHMgb2Jq
ZWN0Lgorc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNTdHJpbmdPYmplY3QgICAgICAg
PSAweDAwMDA0MDAwOyAvLyBJdCdzIGRlZmluaXRlbHkgYSBTdHJpbmdPYmplY3QuCiBzdGF0aWMg
Y29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY09iamVjdE90aGVyICAgICAgICA9IDB4MDAwMDgwMDA7
IC8vIEl0J3MgZGVmaW5pdGVseSBhbiBvYmplY3QgYnV0IG5vdCBKU0ZpbmFsT2JqZWN0LCBKU0Fy
cmF5LCBvciBKU0Z1bmN0aW9uLgogc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNPYmpl
Y3QgICAgICAgICAgICAgPSAweDAwMDBmZmZmOyAvLyBCaXRtYXNrIHVzZWQgZm9yIHRlc3Rpbmcg
Zm9yIGFueSBraW5kIG9mIG9iamVjdCBwcmVkaWN0aW9uLgogc3RhdGljIGNvbnN0IFNwZWN1bGF0
ZWRUeXBlIFNwZWNTdHJpbmdJZGVudCAgICAgICAgPSAweDAwMDEwMDAwOyAvLyBJdCdzIGRlZmlu
aXRlbHkgYSBKU1N0cmluZywgYW5kIGl0J3MgYW4gaWRlbnRpZmllci4KQEAgLTE5Myw5ICsxOTQs
MTQgQEAgaW5saW5lIGJvb2wgaXNGbG9hdDY0QXJyYXlTcGVjdWxhdGlvbihTcAogICAgIHJldHVy
biB2YWx1ZSA9PSBTcGVjRmxvYXQ2NEFycmF5OwogfQogCi1pbmxpbmUgYm9vbCBpc0FyZ3VtZW50
c1NwZWN1bGF0aW9uKFNwZWN1bGF0ZWRUeXBlIHZhbHVlKQoraW5saW5lIGJvb2wgaXNEaXJlY3RB
cmd1bWVudHNTcGVjdWxhdGlvbihTcGVjdWxhdGVkVHlwZSB2YWx1ZSkKIHsKLSAgICByZXR1cm4g
ISF2YWx1ZSAmJiAodmFsdWUgJiBTcGVjQXJndW1lbnRzKSA9PSB2YWx1ZTsKKyAgICByZXR1cm4g
dmFsdWUgPT0gU3BlY0RpcmVjdEFyZ3VtZW50czsKK30KKworaW5saW5lIGJvb2wgaXNTY29wZWRB
cmd1bWVudHNTcGVjdWxhdGlvbihTcGVjdWxhdGVkVHlwZSB2YWx1ZSkKK3sKKyAgICByZXR1cm4g
dmFsdWUgPT0gU3BlY1Njb3BlZEFyZ3VtZW50czsKIH0KIAogaW5saW5lIGJvb2wgaXNBY3Rpb25h
YmxlSW50TXV0YWJsZUFycmF5U3BlY3VsYXRpb24oU3BlY3VsYXRlZFR5cGUgdmFsdWUpCkBAIC0y
MjQsMTMgKzIzMCwxNCBAQCBpbmxpbmUgYm9vbCBpc0FjdGlvbmFibGVUeXBlZE11dGFibGVBcnJh
CiBpbmxpbmUgYm9vbCBpc0FjdGlvbmFibGVNdXRhYmxlQXJyYXlTcGVjdWxhdGlvbihTcGVjdWxh
dGVkVHlwZSB2YWx1ZSkKIHsKICAgICByZXR1cm4gaXNBcnJheVNwZWN1bGF0aW9uKHZhbHVlKQot
ICAgICAgICB8fCBpc0FyZ3VtZW50c1NwZWN1bGF0aW9uKHZhbHVlKQogICAgICAgICB8fCBpc0Fj
dGlvbmFibGVUeXBlZE11dGFibGVBcnJheVNwZWN1bGF0aW9uKHZhbHVlKTsKIH0KIAogaW5saW5l
IGJvb2wgaXNBY3Rpb25hYmxlQXJyYXlTcGVjdWxhdGlvbihTcGVjdWxhdGVkVHlwZSB2YWx1ZSkK
IHsKICAgICByZXR1cm4gaXNTdHJpbmdTcGVjdWxhdGlvbih2YWx1ZSkKKyAgICAgICAgfHwgaXNE
aXJlY3RBcmd1bWVudHNTcGVjdWxhdGlvbih2YWx1ZSkKKyAgICAgICAgfHwgaXNTY29wZWRBcmd1
bWVudHNTcGVjdWxhdGlvbih2YWx1ZSkKICAgICAgICAgfHwgaXNBY3Rpb25hYmxlTXV0YWJsZUFy
cmF5U3BlY3VsYXRpb24odmFsdWUpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkocmV2aXNp
b24gMTgwOTEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29k
ZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzLDYgKzYzLDIwIEBAIFBhcnNlckVy
cm9yIEJ5dGVjb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZSgKICAgICBTYW1wbGluZ1JlZ2lvbiBzYW1w
bGluZ1JlZ2lvbigiQnl0ZWNvZGUgR2VuZXJhdGlvbiIpOwogICAgIAogICAgIG1fY29kZUJsb2Nr
LT5zZXRUaGlzUmVnaXN0ZXIobV90aGlzUmVnaXN0ZXIudmlydHVhbFJlZ2lzdGVyKCkpOworICAg
IAorICAgIC8vIElmIHdlIGhhdmUgZGVjbGFyZWQgYSB2YXJpYWJsZSBuYW1lZCAiYXJndW1lbnRz
IiBhbmQgd2UgYXJlIHVzaW5nIGFyZ3VtZW50cyB0aGVuIHdlIHNob3VsZAorICAgIC8vIHBlcmZv
cm0gdGhhdCBhc3NpZ25tZW50IG5vdy4KKyAgICBpZiAobV9uZWVkVG9Jbml0aWFsaXplQXJndW1l
bnRzKQorICAgICAgICBpbml0aWFsaXplVmFyaWFibGUodmFyaWFibGUocHJvcGVydHlOYW1lcygp
LmFyZ3VtZW50cyksIG1fYXJndW1lbnRzUmVnaXN0ZXIpOworICAgIAorICAgIHsKKyAgICAgICAg
UmVmUHRyPFJlZ2lzdGVySUQ+IHRlbXAgPSBuZXdUZW1wb3JhcnkoKTsKKyAgICAgICAgZm9yIChG
dW5jdGlvbkJvZHlOb2RlKiBmdW5jdGlvbkJvZHkgOiBtX2Z1bmN0aW9uc1RvSW5pdGlhbGl6ZSkg
eworICAgICAgICAgICAgZW1pdE5ld0Z1bmN0aW9uKHRlbXAuZ2V0KCksIGZ1bmN0aW9uQm9keSk7
CisgICAgICAgICAgICBpbml0aWFsaXplVmFyaWFibGUodmFyaWFibGUoZnVuY3Rpb25Cb2R5LT5p
ZGVudCgpKSwgdGVtcC5nZXQoKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgCiAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBtX2RlY29uc3RydWN0ZWRQYXJhbWV0ZXJzLnNpemUoKTsgaSsrKSB7
CiAgICAgICAgIGF1dG8mIGVudHJ5ID0gbV9kZWNvbnN0cnVjdGVkUGFyYW1ldGVyc1tpXTsKICAg
ICAgICAgZW50cnkuc2Vjb25kLT5iaW5kVmFsdWUoKnRoaXMsIGVudHJ5LmZpcnN0LmdldCgpKTsK
QEAgLTExNiwzOCArMTMwLDEzIEBAIFBhcnNlckVycm9yIEJ5dGVjb2RlR2VuZXJhdG9yOjpnZW5l
cmF0ZSgKICAgICBtX2NvZGVCbG9jay0+c2hyaW5rVG9GaXQoKTsKIAogICAgIGlmIChtX2NvZGVC
bG9jay0+c3ltYm9sVGFibGUoKSAmJiAhbV9jb2RlQmxvY2stPnZtKCktPnR5cGVQcm9maWxlcigp
KQotICAgICAgICBtX2NvZGVCbG9jay0+c2V0U3ltYm9sVGFibGUobV9jb2RlQmxvY2stPnN5bWJv
bFRhYmxlKCktPmNsb25lQ2FwdHVyZWROYW1lcygqbV9jb2RlQmxvY2stPnZtKCkpKTsKKyAgICAg
ICAgbV9jb2RlQmxvY2stPnNldFN5bWJvbFRhYmxlKG1fY29kZUJsb2NrLT5zeW1ib2xUYWJsZSgp
LT5jbG9uZUlnbm9yaW5nU3RhY2soKm1fY29kZUJsb2NrLT52bSgpKSk7CiAKICAgICBpZiAobV9l
eHByZXNzaW9uVG9vRGVlcCkKICAgICAgICAgcmV0dXJuIFBhcnNlckVycm9yKFBhcnNlckVycm9y
OjpPdXRPZk1lbW9yeSk7CiAgICAgcmV0dXJuIFBhcnNlckVycm9yKFBhcnNlckVycm9yOjpFcnJv
ck5vbmUpOwogfQogCi1SZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6YWRkVmFyKAotICAg
IGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBDb25zdGFudE1vZGUgY29uc3RhbnRNb2RlLCBXYXRj
aE1vZGUgd2F0Y2hNb2RlKQotewotICAgIEFTU0VSVChzdGF0aWNfY2FzdDxzaXplX3Q+KG1fY29k
ZUJsb2NrLT5tX251bVZhcnMpID09IG1fY2FsbGVlUmVnaXN0ZXJzLnNpemUoKSk7Ci0gICAgCi0g
ICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIoc3ltYm9sVGFibGUoKS5tX2xvY2spOwotICAg
IGludCBpbmRleCA9IHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKG1fY2FsbGVlUmVnaXN0ZXJzLnNp
emUoKSkub2Zmc2V0KCk7Ci0gICAgU3ltYm9sVGFibGVFbnRyeSBuZXdFbnRyeShpbmRleCwgY29u
c3RhbnRNb2RlID09IElzQ29uc3RhbnQgPyBSZWFkT25seSA6IDApOwotICAgIFN5bWJvbFRhYmxl
OjpNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBzeW1ib2xUYWJsZSgpLmFkZChsb2NrZXIsIGlkZW50
LmltcGwoKSwgbmV3RW50cnkpOwotCi0gICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAg
ICAgcmV0dXJuICZyZWdpc3RlckZvcihyZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmdldEluZGV4KCkp
OwotICAgIAotICAgIGlmICh3YXRjaE1vZGUgPT0gSXNXYXRjaGFibGUpIHsKLSAgICAgICAgd2hp
bGUgKG1fd2F0Y2hhYmxlVmFyaWFibGVzLnNpemUoKSA8IHN0YXRpY19jYXN0PHNpemVfdD4obV9j
b2RlQmxvY2stPm1fbnVtVmFycykpCi0gICAgICAgICAgICBtX3dhdGNoYWJsZVZhcmlhYmxlcy5h
cHBlbmQoSWRlbnRpZmllcigpKTsKLSAgICAgICAgbV93YXRjaGFibGVWYXJpYWJsZXMuYXBwZW5k
KGlkZW50KTsKLSAgICB9Ci0gICAgCi0gICAgUmVnaXN0ZXJJRCogcmVnSUQgPSBhZGRWYXIoKTsK
LSAgICBBU1NFUlQod2F0Y2hNb2RlID09IE5vdFdhdGNoYWJsZSB8fCBzdGF0aWNfY2FzdDxzaXpl
X3Q+KG1fY29kZUJsb2NrLT5tX251bVZhcnMpID09IG1fd2F0Y2hhYmxlVmFyaWFibGVzLnNpemUo
KSk7Ci0gICAgCi0gICAgcmV0dXJuIHJlZ0lEOwotfQotCiBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0
ZWNvZGVHZW5lcmF0b3IoVk0mIHZtLCBQcm9ncmFtTm9kZSogcHJvZ3JhbU5vZGUsIFVubGlua2Vk
UHJvZ3JhbUNvZGVCbG9jayogY29kZUJsb2NrLCBEZWJ1Z2dlck1vZGUgZGVidWdnZXJNb2RlLCBQ
cm9maWxlck1vZGUgcHJvZmlsZXJNb2RlKQogICAgIDogbV9zaG91bGRFbWl0RGVidWdIb29rcyhP
cHRpb25zOjpmb3JjZURlYnVnZ2VyQnl0ZWNvZGVHZW5lcmF0aW9uKCkgfHwgZGVidWdnZXJNb2Rl
ID09IERlYnVnZ2VyT24pCiAgICAgLCBtX3Nob3VsZEVtaXRQcm9maWxlSG9va3MoT3B0aW9uczo6
Zm9yY2VQcm9maWxlckJ5dGVjb2RlR2VuZXJhdGlvbigpIHx8IHByb2ZpbGVyTW9kZSA9PSBQcm9m
aWxlck9uKQpAQCAtMTg5LDcgKzE3OCw3IEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdl
bmVyYXRvcihWTSYKIHsKICAgICBpZiAobV9pc0J1aWx0aW5GdW5jdGlvbikKICAgICAgICAgbV9z
aG91bGRFbWl0RGVidWdIb29rcyA9IGZhbHNlOwotCisgICAgCiAgICAgbV9zeW1ib2xUYWJsZS0+
c2V0VXNlc05vblN0cmljdEV2YWwoY29kZUJsb2NrLT51c2VzRXZhbCgpICYmICFjb2RlQmxvY2st
PmlzU3RyaWN0TW9kZSgpKTsKICAgICBWZWN0b3I8SWRlbnRpZmllcj4gYm91bmRQYXJhbWV0ZXJQ
cm9wZXJ0aWVzOwogICAgIEZ1bmN0aW9uUGFyYW1ldGVycyYgcGFyYW1ldGVycyA9ICpmdW5jdGlv
bk5vZGUtPnBhcmFtZXRlcnMoKTsKQEAgLTIwMiwxMCArMTkxLDIwIEBAIEJ5dGVjb2RlR2VuZXJh
dG9yOjpCeXRlY29kZUdlbmVyYXRvcihWTSYKICAgICB9CiAgICAgbV9zeW1ib2xUYWJsZS0+c2V0
UGFyYW1ldGVyQ291bnRJbmNsdWRpbmdUaGlzKGZ1bmN0aW9uTm9kZS0+cGFyYW1ldGVycygpLT5z
aXplKCkgKyAxKTsKIAorICAgIGJvb2wgc2hvdWxkQ2FwdHVyZUFsbFRoZVRoaW5ncyA9IG1fc2hv
dWxkRW1pdERlYnVnSG9va3MgfHwgY29kZUJsb2NrLT51c2VzRXZhbCgpOworICAgIGF1dG8gY2Fw
dHVyZXMgPSBbJl0gKFN0cmluZ0ltcGwqIHVpZCkgLT4gYm9vbCB7CisgICAgICAgIHJldHVybiBz
aG91bGRDYXB0dXJlQWxsVGhlVGhpbmdzIHx8IGZ1bmN0aW9uTm9kZS0+Y2FwdHVyZXModWlkKTsK
KyAgICB9OworICAgIGF1dG8gdmFyS2luZCA9IFsmXSAoU3RyaW5nSW1wbCogdWlkKSAtPiBWYXJL
aW5kIHsKKyAgICAgICAgcmV0dXJuIGNhcHR1cmVzKHVpZCkgPyBTY29wZVZhcktpbmQgOiBTdGFj
a1ZhcktpbmQ7CisgICAgfQorCiAgICAgZW1pdE9wY29kZShvcF9lbnRlcik7CiAKICAgICBhbGxv
Y2F0ZUFuZEVtaXRTY29wZSgpOwogICAgIAorICAgIG1fY2FsbGVlUmVnaXN0ZXIuc2V0SW5kZXgo
SlNTdGFjazo6Q2FsbGVlKTsKKyAgICAKICAgICBpZiAoZnVuY3Rpb25OYW1lSXNJblNjb3BlKGZ1
bmN0aW9uTm9kZS0+aWRlbnQoKSwgZnVuY3Rpb25Ob2RlLT5mdW5jdGlvbk1vZGUoKSkKICAgICAg
ICAgJiYgZnVuY3Rpb25OYW1lU2NvcGVJc0R5bmFtaWMoY29kZUJsb2NrLT51c2VzRXZhbCgpLCBj
b2RlQmxvY2stPmlzU3RyaWN0TW9kZSgpKSkgewogICAgICAgICAvLyBXaGVuIHdlIGRvIHRoaXMs
IHdlIHNob3VsZCBtYWtlIG91ciBsb2NhbCBzY29wZSBzdGFjayBrbm93IGFib3V0IHRoZSBmdW5j
dGlvbiBuYW1lIHN5bWJvbApAQCAtMjE0LDkgKzIxMyw3IEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjpC
eXRlY29kZUdlbmVyYXRvcihWTSYKICAgICAgICAgLy8gQWxzbywgd2UgY291bGQgY3JlYXRlIHRo
ZSBzY29wZSBvbmNlIHBlciBKU0Z1bmN0aW9uIGluc3RhbmNlIHRoYXQgbmVlZHMgaXQuIFRoYXQg
d291bGRuJ3QKICAgICAgICAgLy8gYmUgYW55IG1vcmUgY29ycmVjdCwgYnV0IGl0IHdvdWxkIGJl
IG1vcmUgcGVyZm9ybWFudC4KICAgICAgICAgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNDE4ODcKLSAgICAgICAgUmVnaXN0ZXJJRCBjYWxsZWVSZWdp
c3RlcjsKLSAgICAgICAgY2FsbGVlUmVnaXN0ZXIuc2V0SW5kZXgoSlNTdGFjazo6Q2FsbGVlKTsK
LSAgICAgICAgZW1pdFB1c2hGdW5jdGlvbk5hbWVTY29wZShtX3Njb3BlUmVnaXN0ZXIsIGZ1bmN0
aW9uTm9kZS0+aWRlbnQoKSwgJmNhbGxlZVJlZ2lzdGVyLCBSZWFkT25seSB8IERvbnREZWxldGUp
OworICAgICAgICBlbWl0UHVzaEZ1bmN0aW9uTmFtZVNjb3BlKG1fc2NvcGVSZWdpc3RlciwgZnVu
Y3Rpb25Ob2RlLT5pZGVudCgpLCAmbV9jYWxsZWVSZWdpc3RlciwgUmVhZE9ubHkgfCBEb250RGVs
ZXRlKTsKICAgICB9CiAKICAgICBpZiAobV9jb2RlQmxvY2stPm5lZWRzRnVsbFNjb3BlQ2hhaW4o
KSB8fCBtX3Nob3VsZEVtaXREZWJ1Z0hvb2tzKSB7CkBAIC0yMjYsMTc5ICsyMjMsMjI1IEBAIEJ5
dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihWTSYKICAgICAgICAgaW5zdHJ1Y3Rp
b25zKCkuYXBwZW5kKG1fbGV4aWNhbEVudmlyb25tZW50UmVnaXN0ZXItPmluZGV4KCkpOwogICAg
ICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoc2NvcGVSZWdpc3RlcigpLT5pbmRleCgpKTsKICAg
ICB9Ci0gICAgUmVnaXN0ZXJJRCogbG9jYWxBcmd1bWVudHNSZWdpc3RlciA9IG51bGxwdHI7Ci0g
ICAgUmVnaXN0ZXJJRCogc2NyYXRjaCA9IGFkZFZhcigpOwotICAgIG1fc3ltYm9sVGFibGUtPnNl
dENhcHR1cmVTdGFydCh2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChtX2NvZGVCbG9jay0+bV9udW1W
YXJzKS5vZmZzZXQoKSk7Ci0KLSAgICBpZiAoZnVuY3Rpb25Ob2RlLT51c2VzQXJndW1lbnRzKCkg
fHwgY29kZUJsb2NrLT51c2VzRXZhbCgpKSB7IC8vIE1heSByZWlmeSBhcmd1bWVudHMgb2JqZWN0
LgotICAgICAgICBSZWdpc3RlcklEKiB1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIgPSBhZGRW
YXIoKTsgLy8gQW5vbnltb3VzLCBzbyBpdCBjYW4ndCBiZSBtb2RpZmllZCBieSB1c2VyIGNvZGUu
Ci0gICAgICAgIFJlZ2lzdGVySUQqIGFyZ3VtZW50c1JlZ2lzdGVyID0gYWRkVmFyKHByb3BlcnR5
TmFtZXMoKS5hcmd1bWVudHMsIElzVmFyaWFibGUsIE5vdFdhdGNoYWJsZSk7IC8vIENhbiBiZSBj
aGFuZ2VkIGJ5IGFzc2lnbmluZyB0byAnYXJndW1lbnRzJy4KLQotICAgICAgICBsb2NhbEFyZ3Vt
ZW50c1JlZ2lzdGVyID0gYXJndW1lbnRzUmVnaXN0ZXI7Ci0KLSAgICAgICAgLy8gV2UgY2FuIHNh
dmUgYSBsaXR0bGUgc3BhY2UgYnkgaGFyZC1jb2RpbmcgdGhlIGtub3dsZWRnZSB0aGF0IHRoZSB0
d28KLSAgICAgICAgLy8gJ2FyZ3VtZW50cycgdmFsdWVzIGFyZSBzdG9yZWQgaW4gY29uc2VjdXRp
dmUgcmVnaXN0ZXJzLCBhbmQgc3RvcmluZwotICAgICAgICAvLyBvbmx5IHRoZSBpbmRleCBvZiB0
aGUgYXNzaWduYWJsZSBvbmUuCi0gICAgICAgIGNvZGVCbG9jay0+c2V0QXJndW1lbnRzUmVnaXN0
ZXIoYXJndW1lbnRzUmVnaXN0ZXItPnZpcnR1YWxSZWdpc3RlcigpKTsKLSAgICAgICAgQVNTRVJU
X1VOVVNFRCh1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIsIHVubW9kaWZpZWRBcmd1bWVudHNS
ZWdpc3Rlci0+dmlydHVhbFJlZ2lzdGVyKCkgPT0gSlNDOjp1bm1vZGlmaWVkQXJndW1lbnRzUmVn
aXN0ZXIoY29kZUJsb2NrLT5hcmd1bWVudHNSZWdpc3RlcigpKSk7Ci0KLSAgICAgICAgZW1pdElu
aXRMYXp5UmVnaXN0ZXIoYXJndW1lbnRzUmVnaXN0ZXIpOwotICAgICAgICBlbWl0SW5pdExhenlS
ZWdpc3Rlcih1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIpOwotICAgICAgICAKLSAgICAgICAg
aWYgKHNob3VsZENyZWF0ZUFyZ3VtZW50c0VhZ2VybHkoKSB8fCBzaG91bGRUZWFyT2ZmQXJndW1l
bnRzRWFnZXJseSgpKSB7Ci0gICAgICAgICAgICBlbWl0T3Bjb2RlKG9wX2NyZWF0ZV9hcmd1bWVu
dHMpOwotICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGFyZ3VtZW50c1JlZ2lzdGVy
LT5pbmRleCgpKTsKLSAgICAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChtX2NvZGVCbG9j
ay0+YWN0aXZhdGlvblJlZ2lzdGVyKCkub2Zmc2V0KCkpOwotCi0gICAgICAgICAgICBpZiAobV9j
b2RlQmxvY2stPmhhc0FjdGl2YXRpb25SZWdpc3RlcigpKSB7Ci0gICAgICAgICAgICAgICAgUmVn
aXN0ZXJJRCogYXJndW1lbnRzUmVnaXN0ZXIgPSAmcmVnaXN0ZXJGb3IobV9jb2RlQmxvY2stPmFy
Z3VtZW50c1JlZ2lzdGVyKCkub2Zmc2V0KCkpOwotICAgICAgICAgICAgICAgIGluaXRpYWxpemVD
YXB0dXJlZFZhcmlhYmxlKGFyZ3VtZW50c1JlZ2lzdGVyLCBwcm9wZXJ0eU5hbWVzKCkuYXJndW1l
bnRzLCBhcmd1bWVudHNSZWdpc3Rlcik7Ci0gICAgICAgICAgICAgICAgUmVnaXN0ZXJJRCogdW5j
aGVja2VkQXJndW1lbnRzUmVnaXN0ZXIgPSAmcmVnaXN0ZXJGb3IoSlNDOjp1bm1vZGlmaWVkQXJn
dW1lbnRzUmVnaXN0ZXIobV9jb2RlQmxvY2stPmFyZ3VtZW50c1JlZ2lzdGVyKCkpLm9mZnNldCgp
KTsKLSAgICAgICAgICAgICAgICBpbml0aWFsaXplQ2FwdHVyZWRWYXJpYWJsZSh1bmNoZWNrZWRB
cmd1bWVudHNSZWdpc3RlciwgcHJvcGVydHlOYW1lcygpLmFyZ3VtZW50cywgdW5jaGVja2VkQXJn
dW1lbnRzUmVnaXN0ZXIpOwotICAgICAgICAgICAgICAgIGlmIChmdW5jdGlvbk5vZGUtPm1vZGlm
aWVzQXJndW1lbnRzKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgZW1pdE9wY29kZShvcF9tb3Yp
OwotICAgICAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYXJndW1lbnRzUmVn
aXN0ZXItPmluZGV4KCkpOwotICAgICAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBl
bmQoYWRkQ29uc3RhbnRWYWx1ZShqc1VuZGVmaW5lZCgpKS0+aW5kZXgoKSk7Ci0gICAgICAgICAg
ICAgICAgICAgIGVtaXRPcGNvZGUob3BfbW92KTsKLSAgICAgICAgICAgICAgICAgICAgaW5zdHJ1
Y3Rpb25zKCkuYXBwZW5kKHVuY2hlY2tlZEFyZ3VtZW50c1JlZ2lzdGVyLT5pbmRleCgpKTsKLSAg
ICAgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGFkZENvbnN0YW50VmFsdWUo
anNVbmRlZmluZWQoKSktPmluZGV4KCkpOwotICAgICAgICAgICAgICAgICAgICBsb2NhbEFyZ3Vt
ZW50c1JlZ2lzdGVyID0gbnVsbHB0cjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KKyAgICAKKyAgICAvLyBNYWtlIHN1cmUgdGhlIGNvZGUgYmxvY2sga25vd3Mg
YWJvdXQgYWxsIG9mIG91ciBwYXJhbWV0ZXJzLCBhbmQgbWFrZSBzdXJlIHRoYXQgcGFyYW1ldGVy
cworICAgIC8vIG5lZWRpbmcgZGVjb25zdHJ1Y3Rpb24gYXJlIG5vdGVkLgorICAgIG1fcGFyYW1l
dGVycy5ncm93KHBhcmFtZXRlcnMuc2l6ZSgpICsgMSk7IC8vIHJlc2VydmUgc3BhY2UgZm9yICJ0
aGlzIgorICAgIGluaXRpYWxpemVOZXh0UGFyYW1ldGVyKCk7IC8vIHRoaXMKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgcGFyYW1ldGVycy5zaXplKCk7ICsraSkgeworICAgICAgICBhdXRv
IHBhdHRlcm4gPSBwYXJhbWV0ZXJzLmF0KGkpOworICAgICAgICBSZWdpc3RlcklEKiByZWcgPSBp
bml0aWFsaXplTmV4dFBhcmFtZXRlcigpOworICAgICAgICBpZiAoIXBhdHRlcm4tPmlzQmluZGlu
Z05vZGUoKSkKKyAgICAgICAgICAgIG1fZGVjb25zdHJ1Y3RlZFBhcmFtZXRlcnMuYXBwZW5kKHN0
ZDo6bWFrZV9wYWlyKHJlZywgcGF0dGVybikpOwogICAgIH0KLQotICAgIGJvb2wgc2hvdWxkQ2Fw
dHVyZUFsbFRoZVRoaW5ncyA9IG1fc2hvdWxkRW1pdERlYnVnSG9va3MgfHwgY29kZUJsb2NrLT51
c2VzRXZhbCgpOwotCisgICAgCisgICAgLy8gRmlndXJlIG91dCBzb21lIGludGVyZXN0aW5nIGZh
Y3RzIGFib3V0IG91ciBhcmd1bWVudHMuCiAgICAgYm9vbCBjYXB0dXJlc0FueUFyZ3VtZW50QnlO
YW1lID0gZmFsc2U7Ci0gICAgVmVjdG9yPFJlZ2lzdGVySUQqLCAwLCBVbnNhZmVWZWN0b3JPdmVy
Zmxvdz4gY2FwdHVyZWRBcmd1bWVudHM7Ci0gICAgaWYgKGZ1bmN0aW9uTm9kZS0+aGFzQ2FwdHVy
ZWRWYXJpYWJsZXMoKSB8fCBzaG91bGRDYXB0dXJlQWxsVGhlVGhpbmdzKSB7CisgICAgaWYgKGZ1
bmN0aW9uTm9kZS0+aGFzQ2FwdHVyZWRWYXJpYWJsZXMoKSkgewogICAgICAgICBGdW5jdGlvblBh
cmFtZXRlcnMmIHBhcmFtZXRlcnMgPSAqZnVuY3Rpb25Ob2RlLT5wYXJhbWV0ZXJzKCk7Ci0gICAg
ICAgIGNhcHR1cmVkQXJndW1lbnRzLnJlc2l6ZShwYXJhbWV0ZXJzLnNpemUoKSk7CiAgICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcGFyYW1ldGVycy5zaXplKCk7ICsraSkgewotICAgICAg
ICAgICAgY2FwdHVyZWRBcmd1bWVudHNbaV0gPSAwOwogICAgICAgICAgICAgYXV0byBwYXR0ZXJu
ID0gcGFyYW1ldGVycy5hdChpKTsKICAgICAgICAgICAgIGlmICghcGF0dGVybi0+aXNCaW5kaW5n
Tm9kZSgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgY29uc3QgSWRl
bnRpZmllciYgaWRlbnQgPSBzdGF0aWNfY2FzdDxjb25zdCBCaW5kaW5nTm9kZSo+KHBhdHRlcm4p
LT5ib3VuZFByb3BlcnR5KCk7Ci0gICAgICAgICAgICBpZiAoIWZ1bmN0aW9uTm9kZS0+Y2FwdHVy
ZXMoaWRlbnQpICYmICFzaG91bGRDYXB0dXJlQWxsVGhlVGhpbmdzKQotICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICAgICAgY2FwdHVyZXNBbnlBcmd1bWVudEJ5TmFtZSA9IHRydWU7
Ci0gICAgICAgICAgICBjYXB0dXJlZEFyZ3VtZW50c1tpXSA9IGFkZFZhcihpZGVudCwgSXNWYXJp
YWJsZSwgSXNXYXRjaGFibGUpOworICAgICAgICAgICAgY2FwdHVyZXNBbnlBcmd1bWVudEJ5TmFt
ZSB8PSBjYXB0dXJlcyhpZGVudC5pbXBsKCkpOwogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYg
KGNhcHR1cmVzQW55QXJndW1lbnRCeU5hbWUgJiYgIXNob3VsZFRlYXJPZmZBcmd1bWVudHNFYWdl
cmx5KCkpIHsKLSAgICAgICAgc2l6ZV90IHBhcmFtZXRlckNvdW50ID0gbV9zeW1ib2xUYWJsZS0+
cGFyYW1ldGVyQ291bnQoKTsKLSAgICAgICAgYXV0byBzbG93QXJndW1lbnRzID0gc3RkOjptYWtl
X3VuaXF1ZTxTbG93QXJndW1lbnRbXT4ocGFyYW1ldGVyQ291bnQpOwotICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IHBhcmFtZXRlckNvdW50OyArK2kpIHsKLSAgICAgICAgICAgIGlmICgh
Y2FwdHVyZWRBcmd1bWVudHNbaV0pIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQoc2xvd0FyZ3Vt
ZW50c1tpXS5zdGF0dXMgPT0gU2xvd0FyZ3VtZW50OjpOb3JtYWwpOwotICAgICAgICAgICAgICAg
IHNsb3dBcmd1bWVudHNbaV0uaW5kZXggPSBDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0KGkpOwot
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgc2xv
d0FyZ3VtZW50c1tpXS5zdGF0dXMgPSBTbG93QXJndW1lbnQ6OkNhcHR1cmVkOwotICAgICAgICAg
ICAgc2xvd0FyZ3VtZW50c1tpXS5pbmRleCA9IGNhcHR1cmVkQXJndW1lbnRzW2ldLT5pbmRleCgp
OwotICAgICAgICB9Ci0gICAgICAgIG1fc3ltYm9sVGFibGUtPnNldFNsb3dBcmd1bWVudHMoV1RG
Ojptb3ZlKHNsb3dBcmd1bWVudHMpKTsKLSAgICB9Ci0KLSAgICBSZWdpc3RlcklEKiBjYWxsZWVS
ZWdpc3RlciA9IHJlc29sdmVDYWxsZWUoZnVuY3Rpb25Ob2RlKTsgLy8gTWF5IHB1c2ggdG8gdGhl
IHNjb3BlIGNoYWluIGFuZC9vciBhZGQgYSBjYXB0dXJlZCB2YXIuCi0KLSAgICBjb25zdCBEZWNs
YXJhdGlvblN0YWNrczo6RnVuY3Rpb25TdGFjayYgZnVuY3Rpb25TdGFjayA9IGZ1bmN0aW9uTm9k
ZS0+ZnVuY3Rpb25TdGFjaygpOwotICAgIGNvbnN0IERlY2xhcmF0aW9uU3RhY2tzOjpWYXJTdGFj
ayYgdmFyU3RhY2sgPSBmdW5jdGlvbk5vZGUtPnZhclN0YWNrKCk7Ci0gICAgSWRlbnRpZmllclNl
dCB0ZXN0OwotCi0gICAgLy8gQ2FwdHVyZWQgdmFyaWFibGVzIGFuZCBmdW5jdGlvbnMgZ28gZmly
c3Qgc28gdGhhdCBhY3RpdmF0aW9ucyBkb24ndCBoYXZlCi0gICAgLy8gdG8gc3RlcCBvdmVyIHRo
ZSBub24tY2FwdHVyZWQgbG9jYWxzIHRvIG1hcmsgdGhlbS4KLSAgICBpZiAoZnVuY3Rpb25Ob2Rl
LT5oYXNDYXB0dXJlZFZhcmlhYmxlcygpIHx8IHNob3VsZENhcHR1cmVBbGxUaGVUaGluZ3MpIHsK
LSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBib3VuZFBhcmFtZXRlclByb3BlcnRpZXMu
c2l6ZSgpOyBpKyspIHsKLSAgICAgICAgICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gYm91
bmRQYXJhbWV0ZXJQcm9wZXJ0aWVzW2ldOwotICAgICAgICAgICAgaWYgKGZ1bmN0aW9uTm9kZS0+
Y2FwdHVyZXMoaWRlbnQpIHx8IHNob3VsZENhcHR1cmVBbGxUaGVUaGluZ3MpCi0gICAgICAgICAg
ICAgICAgYWRkVmFyKGlkZW50LCBJc1ZhcmlhYmxlLCBJc1dhdGNoYWJsZSk7Ci0gICAgICAgIH0K
LSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmdW5jdGlvblN0YWNrLnNpemUoKTsgKytp
KSB7Ci0gICAgICAgICAgICBGdW5jdGlvbkJvZHlOb2RlKiBmdW5jdGlvbiA9IGZ1bmN0aW9uU3Rh
Y2tbaV07Ci0gICAgICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGZ1bmN0aW9uLT5p
ZGVudCgpOwotICAgICAgICAgICAgaWYgKGZ1bmN0aW9uTm9kZS0+Y2FwdHVyZXMoaWRlbnQpIHx8
IHNob3VsZENhcHR1cmVBbGxUaGVUaGluZ3MpIHsKLSAgICAgICAgICAgICAgICBtX2Z1bmN0aW9u
cy5hZGQoaWRlbnQuaW1wbCgpKTsKLSAgICAgICAgICAgICAgICBlbWl0TmV3RnVuY3Rpb24oc2Ny
YXRjaCwgZnVuY3Rpb24pOwotICAgICAgICAgICAgICAgIGluaXRpYWxpemVDYXB0dXJlZFZhcmlh
YmxlKGFkZFZhcihpZGVudCwgSXNWYXJpYWJsZSwgSXNXYXRjaGFibGUpLCBpZGVudCwgc2NyYXRj
aCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCB2YXJTdGFjay5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgY29uc3QgSWRlbnRpZmll
ciYgaWRlbnQgPSB2YXJTdGFja1tpXS5maXJzdDsKLSAgICAgICAgICAgIGlmIChmdW5jdGlvbk5v
ZGUtPmNhcHR1cmVzKGlkZW50KSB8fCBzaG91bGRDYXB0dXJlQWxsVGhlVGhpbmdzKQotICAgICAg
ICAgICAgICAgIGFkZFZhcihpZGVudCwgKHZhclN0YWNrW2ldLnNlY29uZCAmIERlY2xhcmF0aW9u
U3RhY2tzOjpJc0NvbnN0YW50KSA/IElzQ29uc3RhbnQgOiBJc1ZhcmlhYmxlLCBJc1dhdGNoYWJs
ZSk7Ci0gICAgICAgIH0KKyAgICBpZiAoY2FwdHVyZXNBbnlBcmd1bWVudEJ5TmFtZSkKKyAgICAg
ICAgQVNTRVJUKG1fbGV4aWNhbEVudmlyb25tZW50UmVnaXN0ZXIpOworICAgIAorICAgIC8vIE5l
ZWQgdG8ga25vdyB3aGF0IG91ciBmdW5jdGlvbnMgYXJlIGNhbGxlZC4gUGFyYW1ldGVycyBoYXZl
IHNvbWUgZ29vZnkgYmVoYXZpb3JzIHdoZW4gaXQKKyAgICAvLyBjb21lcyB0byBmdW5jdGlvbnMg
b2YgdGhlIHNhbWUgbmFtZS4KKyAgICBmb3IgKEZ1bmN0aW9uQm9keU5vZGUqIGZ1bmN0aW9uIDog
ZnVuY3Rpb25Ob2RlLT5mdW5jdGlvblN0YWNrKCkpCisgICAgICAgIG1fZnVuY3Rpb25zLmFkZChm
dW5jdGlvbi0+aWRlbnQoKS5pbXBsKCkpOworICAgIAorICAgIGJvb2wgbmVlZHNBcmd1bWVudHMg
PSBmdW5jdGlvbk5vZGUtPnVzZXNBcmd1bWVudHMoKSB8fCBjb2RlQmxvY2stPnVzZXNFdmFsKCk7
CisgICAgCisgICAgaWYgKG5lZWRzQXJndW1lbnRzKSB7CisgICAgICAgIC8vIENyZWF0ZSB0aGUg
YXJndW1lbnRzIG9iamVjdCBub3cuIFdlIG1heSBwdXQgdGhlIGFyZ3VtZW50cyBvYmplY3QgaW50
byB0aGUgYWN0aXZhdGlvbiBpZgorICAgICAgICAvLyBpdCBpcyBjYXB0dXJlZC4gRWl0aGVyIHdh
eSwgd2UgY3JlYXRlIHR3byBhcmd1bWVudHMgb2JqZWN0IHZhcmlhYmxlczogb25lIGlzIG91cgor
ICAgICAgICAvLyBwcml2YXRlIHZhcmlhYmxlIHRoYXQgaXMgaW1tdXRhYmxlLCBhbmQgYW5vdGhl
ciB0aGF0IGlzIHRoZSB1c2VyLXZpc2libGUgdmFyaWFibGUuIFRoZQorICAgICAgICAvLyBpbW11
dGFibGUgb25lIGlzIG9ubHkgdXNlZCBoZXJlLCBvciBkdXJpbmcgZm9ybWFsIHBhcmFtZXRlciBy
ZXNvbHV0aW9ucyBpZiB3ZSBvcHQgZm9yCisgICAgICAgIC8vIERpcmVjdEFyZ3VtZW50cy4KKyAg
ICAgICAgCisgICAgICAgIG1fYXJndW1lbnRzUmVnaXN0ZXIgPSBhZGRWYXIoKTsKKyAgICAgICAg
bV9hcmd1bWVudHNSZWdpc3Rlci0+cmVmKCk7CiAgICAgfQotCi0gICAgbV9zeW1ib2xUYWJsZS0+
c2V0Q2FwdHVyZUVuZCh2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChjb2RlQmxvY2stPm1fbnVtVmFy
cykub2Zmc2V0KCkpOwotCi0gICAgYm9vbCBjYW5MYXppbHlDcmVhdGVGdW5jdGlvbnMgPSAhZnVu
Y3Rpb25Ob2RlLT5uZWVkc0FjdGl2YXRpb25Gb3JNb3JlVGhhblZhcmlhYmxlcygpICYmICFtX3No
b3VsZEVtaXREZWJ1Z0hvb2tzICYmICFtX3ZtLT50eXBlUHJvZmlsZXIoKSAmJiAhbV92bS0+Y29u
dHJvbEZsb3dQcm9maWxlcigpOwotICAgIG1fZmlyc3RMYXp5RnVuY3Rpb24gPSBjb2RlQmxvY2st
Pm1fbnVtVmFyczsKLSAgICBpZiAoIXNob3VsZENhcHR1cmVBbGxUaGVUaGluZ3MpIHsKLSAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmdW5jdGlvblN0YWNrLnNpemUoKTsgKytpKSB7Ci0g
ICAgICAgICAgICBGdW5jdGlvbkJvZHlOb2RlKiBmdW5jdGlvbiA9IGZ1bmN0aW9uU3RhY2tbaV07
Ci0gICAgICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGZ1bmN0aW9uLT5pZGVudCgp
OwotICAgICAgICAgICAgaWYgKCFmdW5jdGlvbk5vZGUtPmNhcHR1cmVzKGlkZW50KSkgewotICAg
ICAgICAgICAgICAgIG1fZnVuY3Rpb25zLmFkZChpZGVudC5pbXBsKCkpOwotICAgICAgICAgICAg
ICAgIFJlZlB0cjxSZWdpc3RlcklEPiByZWcgPSBhZGRWYXIoaWRlbnQsIElzVmFyaWFibGUsIE5v
dFdhdGNoYWJsZSk7Ci0gICAgICAgICAgICAgICAgLy8gRG9uJ3QgbGF6aWx5IGNyZWF0ZSBmdW5j
dGlvbnMgdGhhdCBvdmVycmlkZSB0aGUgbmFtZSAnYXJndW1lbnRzJwotICAgICAgICAgICAgICAg
IC8vIGFzIHRoaXMgd291bGQgY29tcGxpY2F0ZSBsYXp5IGluc3RhbnRpYXRpb24gb2YgYWN0dWFs
IGFyZ3VtZW50cy4KLSAgICAgICAgICAgICAgICBpZiAoIWNhbkxhemlseUNyZWF0ZUZ1bmN0aW9u
cyB8fCBpZGVudCA9PSBwcm9wZXJ0eU5hbWVzKCkuYXJndW1lbnRzKQotICAgICAgICAgICAgICAg
ICAgICBlbWl0TmV3RnVuY3Rpb24ocmVnLmdldCgpLCBmdW5jdGlvbik7Ci0gICAgICAgICAgICAg
ICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGVtaXRJbml0TGF6eVJlZ2lzdGVyKHJlZy5n
ZXQoKSk7Ci0gICAgICAgICAgICAgICAgICAgIG1fbGF6eUZ1bmN0aW9ucy5zZXQocmVnLT52aXJ0
dWFsUmVnaXN0ZXIoKS50b0xvY2FsKCksIGZ1bmN0aW9uKTsKKyAgICAKKyAgICBpZiAobmVlZHNB
cmd1bWVudHMgJiYgIWNvZGVCbG9jay0+aXNTdHJpY3RNb2RlKCkpIHsKKyAgICAgICAgLy8gSWYg
d2UgY2FwdHVyZWQgYW55IGZvcm1hbCBwYXJhbWV0ZXIgYnkgbmFtZSwgdGhlbiB3ZSB1c2UgU2Nv
cGVkQXJndW1lbnRzLiBPdGhlcndpc2Ugd2UKKyAgICAgICAgLy8gdXNlIERpcmVjdEFyZ3VtZW50
cy4gV2l0aCBTY29wZWRBcmd1bWVudHMsIHdlIGxpZnQgYWxsIG9mIG91ciBhcmd1bWVudHMgaW50
byB0aGUKKyAgICAgICAgLy8gYWN0aXZhdGlvbi4KKyAgICAgICAgCisgICAgICAgIGlmIChjYXB0
dXJlc0FueUFyZ3VtZW50QnlOYW1lKSB7CisgICAgICAgICAgICBtX3N5bWJvbFRhYmxlLT5zZXRB
cmd1bWVudHNMZW5ndGgodm0sIHBhcmFtZXRlcnMuc2l6ZSgpKTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgLy8gRm9yIGVhY2ggcGFyYW1ldGVyLCB3ZSBoYXZlIHR3byBwb3NzaWJpbGl0aWVz
OgorICAgICAgICAgICAgLy8gRWl0aGVyIGl0J3MgYSBiaW5kaW5nIG5vZGUgd2l0aCBubyBmdW5j
dGlvbiBvdmVybGFwLCBpbiB3aGljaCBjYXNlIGl0IGdldHMgYSBuYW1lCisgICAgICAgICAgICAv
LyBpbiB0aGUgc3ltYm9sIHRhYmxlIC0gb3IgaXQganVzdCBnZXRzIHNwYWNlIHJlc2VydmVkIGlu
IHRoZSBzeW1ib2wgdGFibGUuIEVpdGhlcgorICAgICAgICAgICAgLy8gd2F5IHdlIGxpZnQgdGhl
IHZhbHVlIGludG8gdGhlIHNjb3BlLgorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHBhcmFtZXRlcnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBTY29wZU9mZnNl
dCBvZmZzZXQgPSBtX3N5bWJvbFRhYmxlLT50YWtlTmV4dFNjb3BlT2Zmc2V0KCk7CisgICAgICAg
ICAgICAgICAgaWYgKFN0cmluZ0ltcGwqIG5hbWUgPSB2aXNpYmxlTmFtZUZvclBhcmFtZXRlcihw
YXJhbWV0ZXJzLmF0KGkpKSkgeworICAgICAgICAgICAgICAgICAgICBTeW1ib2xUYWJsZUVudHJ5
IGVudHJ5KG9mZnNldCk7CisgICAgICAgICAgICAgICAgICAgIC8vIFN0b3JlcyB0byB0aGVzZSB2
YXJpYWJsZXMgdmlhIHRoZSBTY29wZWRBcmd1bWVudHMgb2JqZWN0IHdpbGwgbm90IGRvCisgICAg
ICAgICAgICAgICAgICAgIC8vIG5vdGlmeVdyaXRlKCksIHNpbmNlIHRoYXQgd291bGQgYmUgY3Vt
YmVyc29tZS4gQWxzbywgd2F0Y2hpbmcgZm9ybWFsCisgICAgICAgICAgICAgICAgICAgIC8vIHBh
cmFtZXRlcnMgd2hlbiAiYXJndW1lbnRzIiBpcyBpbiBwbGF5IGlzIHVubGlrZWx5IHRvIGJlIHN1
cGVyIHByb2ZpdGFibGUuCisgICAgICAgICAgICAgICAgICAgIC8vIFNvLCB3ZSBqdXN0IGRpc2Fi
bGUgaXQuCisgICAgICAgICAgICAgICAgICAgIGVudHJ5LmRpc2FibGVXYXRjaGluZygpOworICAg
ICAgICAgICAgICAgICAgICBtX3N5bWJvbFRhYmxlLT5zZXQobmFtZSwgb2Zmc2V0KTsKICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYWRkT3Bjb2RlKG9wX3B1dF90b19zY29wZSk7
CisgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKG1fbGV4aWNhbEVudmlyb25t
ZW50UmVnaXN0ZXItPmluZGV4KCkpOworICAgICAgICAgICAgICAgIGluc3RydWN0aW9ucygpLmFw
cGVuZChVSU5UX01BWCk7CisgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHZp
cnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDEgKyBpKS5vZmZzZXQoKSk7CisgICAgICAgICAgICAg
ICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKFJlc29sdmVNb2RlQW5kVHlwZShUaHJvd0lmTm90Rm91
bmQsIExvY2FsQ2xvc3VyZVZhcikpOworICAgICAgICAgICAgICAgIGluc3RydWN0aW9ucygpLmFw
cGVuZCgwKTsKKyAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQob2Zmc2V0Lm9m
ZnNldCgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gVGhp
cyBjcmVhdGVzIGEgc2NvcGVkIGFyZ3VtZW50cyBvYmplY3QgYW5kIGNvcGllcyB0aGUgb3ZlcmZs
b3cgYXJndW1lbnRzIGludG8gdGhlCisgICAgICAgICAgICAvLyBzY29wZS4gSXQncyB0aGUgZXF1
aXZhbGVudCBvZiBjYWxsaW5nIFNjb3BlZEFyZ3VtZW50czo6Y3JlYXRlQnlDb3B5aW5nKCkuCisg
ICAgICAgICAgICBlbWl0T3Bjb2RlKG9wX2NyZWF0ZV9zY29wZWRfYXJndW1lbnRzKTsKKyAgICAg
ICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChtX2FyZ3VtZW50c1JlZ2lzdGVyLT5pbmRleCgp
KTsKKyAgICAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChtX2xleGljYWxFbnZpcm9ubWVu
dFJlZ2lzdGVyLT5pbmRleCgpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIFdl
J3JlIGdvaW5nIHRvIHB1dCBhbGwgcGFyYW1ldGVycyBpbnRvIHRoZSBEaXJlY3RBcmd1bWVudHMg
b2JqZWN0LiBGaXJzdCBlbnN1cmUKKyAgICAgICAgICAgIC8vIHRoYXQgdGhlIHN5bWJvbCB0YWJs
ZSBrbm93cyB0aGF0IHRoaXMgaXMgaGFwcGVuaW5nLgorICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHBhcmFtZXRlcnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBp
ZiAoU3RyaW5nSW1wbCogbmFtZSA9IHZpc2libGVOYW1lRm9yUGFyYW1ldGVyKHBhcmFtZXRlcnMu
YXQoaSkpKQorICAgICAgICAgICAgICAgICAgICBtX3N5bWJvbFRhYmxlLT5zZXQobmFtZSwgQ2Fw
dHVyZWRBcmd1bWVudHNPZmZzZXQoaSkpOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgCisg
ICAgICAgICAgICBlbWl0T3Bjb2RlKG9wX2NyZWF0ZV9kaXJlY3RfYXJndW1lbnRzKTsKKyAgICAg
ICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChtX2FyZ3VtZW50c1JlZ2lzdGVyLT5pbmRleCgp
KTsKICAgICAgICAgfQotICAgICAgICBtX2xhc3RMYXp5RnVuY3Rpb24gPSBjYW5MYXppbHlDcmVh
dGVGdW5jdGlvbnMgPyBjb2RlQmxvY2stPm1fbnVtVmFycyA6IG1fZmlyc3RMYXp5RnVuY3Rpb247
Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYm91bmRQYXJhbWV0ZXJQcm9wZXJ0aWVz
LnNpemUoKTsgaSsrKSB7Ci0gICAgICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGJv
dW5kUGFyYW1ldGVyUHJvcGVydGllc1tpXTsKLSAgICAgICAgICAgIGlmICghZnVuY3Rpb25Ob2Rl
LT5jYXB0dXJlcyhpZGVudCkpCi0gICAgICAgICAgICAgICAgYWRkVmFyKGlkZW50LCBJc1Zhcmlh
YmxlLCBJc1dhdGNoYWJsZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gQ3JlYXRlIHRoZSBm
b3JtYWwgcGFyYW1ldGVycyB0aGUgbm9ybWFsIHdheS4gQW55IG9mIHRoZW0gY291bGQgYmUgY2Fw
dHVyZWQsIG9yIG5vdC4gSWYKKyAgICAgICAgLy8gY2FwdHVyZWQsIGxpZnQgdGhlbSBpbnRvIHRo
ZSBzY29wZS4KKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBhcmFtZXRlcnMuc2l6
ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIFN0cmluZ0ltcGwqIG5hbWUgPSB2aXNpYmxlTmFtZUZv
clBhcmFtZXRlcihwYXJhbWV0ZXJzLmF0KGkpKTsKKyAgICAgICAgICAgIGlmICghbmFtZSkKKyAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKCFj
YXB0dXJlcyhuYW1lKSkgeworICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIGVhc3kgY2Fz
ZSAtIGp1c3QgdGVsbCB0aGUgc3ltYm9sIHRhYmxlIGFib3V0IHRoZSBhcmd1bWVudC4gSXQgd2ls
bAorICAgICAgICAgICAgICAgIC8vIGJlIGFjY2Vzc2VkIGRpcmVjdGx5LgorICAgICAgICAgICAg
ICAgIG1fc3ltYm9sVGFibGUtPnNldChuYW1lLCB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgx
ICsgaSkpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgCisgICAgICAgICAgICBTY29wZU9mZnNldCBvZmZzZXQgPSBtX3N5bWJvbFRhYmxlLT50
YWtlTmV4dFNjb3BlT2Zmc2V0KCk7CisgICAgICAgICAgICBJZGVudGlmaWVyJiBpZGVudCA9Cisg
ICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Y29uc3QgQmluZGluZ05vZGUqPihwYXJhbWV0ZXJz
LmF0KGkpKS0+Ym91bmRQcm9wZXJ0eSgpOworICAgICAgICAgICAgbV9zeW1ib2xUYWJsZS0+c2V0
KG5hbWUsIG9mZnNldCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGFkZE9wY29kZShvcF9w
dXRfdG9fc2NvcGUpOworICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKG1fbGV4aWNh
bEVudmlyb25tZW50UmVnaXN0ZXItPmluZGV4KCkpOworICAgICAgICAgICAgaW5zdHJ1Y3Rpb25z
KCkuYXBwZW5kKGFkZENvbnN0YW50KGlkZW50KSk7CisgICAgICAgICAgICBpbnN0cnVjdGlvbnMo
KS5hcHBlbmQoJnJlZ2lzdGVyRm9yKHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDEgKyBpKSkp
OworICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKFJlc29sdmVNb2RlQW5kVHlwZShU
aHJvd0lmTm90Rm91bmQsIExvY2FsQ2xvc3VyZVZhcikpOworICAgICAgICAgICAgaW5zdHJ1Y3Rp
b25zKCkuYXBwZW5kKDApOworICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKG9mZnNl
dC5vZmZzZXQoKSk7CiAgICAgICAgIH0KLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2
YXJTdGFjay5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgY29uc3QgSWRlbnRpZmllciYgaWRl
bnQgPSB2YXJTdGFja1tpXS5maXJzdDsKLSAgICAgICAgICAgIGlmICghZnVuY3Rpb25Ob2RlLT5j
YXB0dXJlcyhpZGVudCkpCi0gICAgICAgICAgICAgICAgYWRkVmFyKGlkZW50LCAodmFyU3RhY2tb
aV0uc2Vjb25kICYgRGVjbGFyYXRpb25TdGFja3M6OklzQ29uc3RhbnQpID8gSXNDb25zdGFudCA6
IElzVmFyaWFibGUsIE5vdFdhdGNoYWJsZSk7CisgICAgfQorICAgIAorICAgIGlmIChuZWVkc0Fy
Z3VtZW50cyAmJiBjb2RlQmxvY2stPmlzU3RyaWN0TW9kZSgpKSB7CisgICAgICAgIC8vIEFsbG9j
YXRlIGFuIG91dC1vZi1iYW5kcyBhcmd1bWVudHMgb2JqZWN0LgorICAgICAgICBhZGRPcGNvZGUo
b3BfY3JlYXRlX291dF9vZl9iYW5kX2FyZ3VtZW50cyk7CisgICAgICAgIGluc3RydWN0aW9ucygp
LmFwcGVuZChtX2FyZ3VlbnRzUmVnaXN0ZXItPmluZGV4KCkpOworICAgIH0KKyAgICAKKyAgICAv
LyBOb3cgZGVjbGFyZSBhbGwgdmFyaWFibGVzLgorICAgIGZvciAoY29uc3QgSWRlbnRpZmllciYg
aWRlbnQgOiBib3VuZFBhcmFtZXRlclByb3BlcnRpZXMpCisgICAgICAgIGNyZWF0ZVZhcmlhYmxl
KGlkZW50LCB2YXJLaW5kKGlkZW50LmltcGwoKSksIElzVmFyaWFibGUpOworICAgIGZvciAoRnVu
Y3Rpb25Cb2R5Tm9kZSogZnVuY3Rpb24gOiBmdW5jdGlvbk5vZGUtPmZ1bmN0aW9uU3RhY2soKSkg
eworICAgICAgICBjcmVhdGVWYXJpYWJsZShkZW50LCB2YXJLaW5kKGlkZW50LmltcGwoKSksIElz
VmFyaWFibGUpOworICAgICAgICBtX2Z1bmN0aW9uc1RvSW5pdGlhbGl6ZS5hcHBlbmQoZnVuY3Rp
b24pOworICAgIH0KKyAgICBmb3IgKGF1dG8mIGVudHJ5IDogZnVuY3Rpb25Ob2RlLT52YXJTdGFj
aygpKSB7CisgICAgICAgIGNyZWF0ZVZhcmlhYmxlKAorICAgICAgICAgICAgZW50cnkuZmlyc3Qs
IHZhcktpbmQoZW50cnkuZmlyc3QuaW1wbCgpKSwKKyAgICAgICAgICAgIChlbnRyeS5zZWNvbmQg
JiBEZWNsYXJhdGlvblN0YWNrczo6SXNDb25zdGFudCkgPyBJc0NvbnN0YW50IDogSXNWYXJpYWJs
ZSk7CisgICAgfQorICAgIAorICAgIC8vIFRoZXJlIGFyZSBzb21lIHZhcmlhYmxlcyB0aGF0IG5l
ZWQgdG8gYmUgcHJlaW5pdGlhbGl6ZWQgdG8gc29tZXRoaW5nIG90aGVyIHRoYW4gVW5kZWZpbmVk
OgorICAgIC8vCisgICAgLy8gLSAiYXJndW1lbnRzIjogdW5sZXNzIGl0J3MgdXNlZCBhcyBhIGZ1
bmN0aW9uIG9yIHBhcmFtZXRlciwgdGhpcyBzaG91bGQgcmVmZXIgdG8gdGhlCisgICAgLy8gICBh
cmd1bWVudHMgb2JqZWN0LgorICAgIC8vCisgICAgLy8gLSBjYWxsZWU6IHVubGVzcyBpdCdzIHVz
ZWQgYXMgYSB2YXIsIGZ1bmN0aW9uLCBvciBwYXJhbWV0ZXIsIHRoaXMgc2hvdWxkIHJlZmVyIHRv
IHRoZQorICAgIC8vICAgY2FsbGVlIChpLmUuIG91ciBmdW5jdGlvbikuCisgICAgLy8KKyAgICAv
LyAtIGZ1bmN0aW9uczogdGhlc2UgYWx3YXlzIG92ZXJyaWRlIGV2ZXJ5dGhpbmcgZWxzZS4KKyAg
ICAvLworICAgIC8vIFRoZSBtb3N0IGxvZ2ljYWwgd2F5IHRvIGRvIGFsbCBvZiB0aGlzIGlzIHRv
IGluaXRpYWxpemUgbm9uZSBvZiB0aGUgdmFyaWFibGVzIHVudGlsIG5vdywKKyAgICAvLyBhbmQg
dGhlbiBpbml0aWFsaXplIHRoZW0gaW4gQnl0ZWNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlKCkgaW4g
c3VjaCBhbiBvcmRlciB0aGF0IHRoZSBydWxlcworICAgIC8vIGZvciBob3cgdGhlc2UgdGhpbmdz
IG92ZXJyaWRlIGVhY2ggb3RoZXIgZW5kIHVwIGhvbGRpbmcuIFdlIHdvdWxkIGluaXRpYWxpemUg
dGhlIGNhbGxlZQorICAgIC8vIGZpcnN0LCB0aGVuICJhcmd1bWVudHMiLCB0aGVuIGFsbCBhcmd1
bWVudHMsIHRoZW4gdGhlIGZ1bmN0aW9ucy4KKyAgICAvLworICAgIC8vIEJ1dCBzb21lIGFyZ3Vt
ZW50cyBhcmUgYWxyZWFkeSBpbml0aWFsaXplZCBieSBkZWZhdWx0LCBzaW5jZSBpZiB0aGV5IGFy
ZW4ndCBjYXB0dXJlZCBhbmQgd2UKKyAgICAvLyBkb24ndCBoYXZlICJhcmd1bWVudHMiIHRoZW4g
d2UganVzdCBwb2ludCB0aGUgc3ltYm9sIHRhYmxlIGF0IHRoZSBzdGFjayBzbG90IG9mIHRob3Nl
CisgICAgLy8gYXJndW1lbnRzLiBXZSBlbmQgdXAgaW5pdGlhbGl6aW5nIHRoZSByZXN0IG9mIHRo
ZSBhcmd1bWVudHMgdGhhdCBoYXZlIGFuIHVuY29tcGxpY2F0ZWQKKyAgICAvLyBiaW5kaW5nIChp
LmUuIGRvbid0IGludm9sdmUgZGVjb25zdHJ1Y3Rpb24pIGFib3ZlIHdoZW4gZmlndXJpbmcgb3V0
IGhvdyB0byBsYXkgdGhlbSBvdXQsCisgICAgLy8gYmVjYXVzZSB0aGF0J3MganVzdCB0aGUgc2lt
cGxlc3QgdGhpbmcuIFRoaXMgbWVhbnMgdGhhdCB3aGVuIHdlIGluaXRpYWxpemUgdGhlbSwgd2Ug
aGF2ZSB0bworICAgIC8vIHdhdGNoIG91dCBmb3IgdGhlIHRoaW5ncyB0aGF0IG92ZXJyaWRlIGFy
Z3VtZW50cyAobmFtZWx5LCBmdW5jdGlvbnMpLgorICAgIC8vCisgICAgLy8gV2UgYWxzbyBpbml0
aWFsaXplIGNhbGxlZSBoZXJlIGFzIHdlbGwsIGp1c3QgYmVjYXVzZSBpdCdzIHNvIHdlaXJkLiBX
ZSBrbm93IHdoZXRoZXIgd2Ugd2FudAorICAgIC8vIHRvIGRvIHRoaXMgYmVjYXVzZSB3ZSBjYW4g
anVzdCBjaGVjayBpZiBpdCdzIGluIHRoZSBzeW1ib2wgdGFibGUuCisgICAgaWYgKGZ1bmN0aW9u
TmFtZUlzSW5TY29wZShmdW5jdGlvbk5vZGUtPmlkZW50KCksIGZ1bmN0aW9uTm9kZS0+ZnVuY3Rp
b25Nb2RlKCkpCisgICAgICAgICYmICFmdW5jdGlvbk5hbWVTY29wZUlzRHluYW1pYyhjb2RlQmxv
Y2stPnVzZXNFdmFsKCksIGNvZGVCbG9jay0+aXNTdHJpY3RNb2RlKCkpCisgICAgICAgICYmIG1f
c3ltYm9sVGFibGUtPmdldChmdW5jdGlvbk5vZGUtPmlkZW50KCkpLmlzTnVsbCgpKSB7CisgICAg
ICAgIGlmIChjYXB0dXJlcyhmdW5jdGlvbk5vZGUtPmlkZW50KCkuaW1wbCgpKSkgeworICAgICAg
ICAgICAgU2NvcGVPZmZzZXQgb2Zmc2V0ID0gbV9zeW1ib2xUYWJsZS0+dGFrZU5leHRTY29wZU9m
ZnNldCgpOworICAgICAgICAgICAgbV9zeW1ib2xUYWJsZS0+YWRkKAorICAgICAgICAgICAgICAg
IGZ1bmN0aW9uTm9kZS0+aWRlbnQoKS5pbXBsKCksCisgICAgICAgICAgICAgICAgU3ltYm9sVGFi
bGVFbnRyeShWYXJPZmZzZXQob2Zmc2V0KSwgUmVhZE9ubHkpKTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgYWRkT3Bjb2RlKG9wX3B1dF90b19zY29wZSk7CisgICAgICAgICAgICBpbnN0cnVj
dGlvbnMoKS5hcHBlbmQobV9sZXhpY2FsRW52aXJvbm1lbnRSZWdpc3Rlci0+aW5kZXgoKSk7Cisg
ICAgICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYWRkQ29uc3RhbnQoZnVuY3Rpb25Ob2Rl
LT5pZGVudCgpKSk7CisgICAgICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQobV9jYWxsZWVS
ZWdpc3Rlci5pbmRleCgpKTsKKyAgICAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChSZXNv
bHZlTW9kZUFuZFR5cGUoVGhyb3dJZk5vdEZvdW5kLCBMb2NhbENsb3N1cmVWYXIpKTsKKyAgICAg
ICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCgwKTsKKyAgICAgICAgICAgIGluc3RydWN0aW9u
cygpLmFwcGVuZChvZmZzZXQub2Zmc2V0KCkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgbV9zeW1ib2xUYWJsZS0+YWRkKAorICAgICAgICAgICAgICAgIGZ1bmN0aW9uTm9kZS0+aWRl
bnQoKS5pbXBsKCksCisgICAgICAgICAgICAgICAgU3ltYm9sVGFibGVFbnRyeShWYXJPZmZzZXQo
bV9jYWxsZWVSZWdpc3Rlci52aXJ0dWFsUmVnaXN0ZXIoKSksIFJlYWRPbmx5KSk7CiAgICAgICAg
IH0KICAgICB9Ci0KLSAgICBpZiAobV9zeW1ib2xUYWJsZS0+Y2FwdHVyZUNvdW50KCkpCi0gICAg
ICAgIGVtaXRPcGNvZGUob3BfdG91Y2hfZW50cnkpOwogICAgIAotICAgIG1fcGFyYW1ldGVycy5n
cm93KHBhcmFtZXRlcnMuc2l6ZSgpICsgMSk7IC8vIHJlc2VydmUgc3BhY2UgZm9yICJ0aGlzIgot
Ci0gICAgLy8gQWRkICJ0aGlzIiBhcyBhIHBhcmFtZXRlcgotICAgIGludCBuZXh0UGFyYW1ldGVy
SW5kZXggPSBDYWxsRnJhbWU6OnRoaXNBcmd1bWVudE9mZnNldCgpOwotICAgIG1fdGhpc1JlZ2lz
dGVyLnNldEluZGV4KG5leHRQYXJhbWV0ZXJJbmRleCsrKTsKLSAgICBtX2NvZGVCbG9jay0+YWRk
UGFyYW1ldGVyKCk7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBhcmFtZXRlcnMuc2l6
ZSgpOyArK2ksICsrbmV4dFBhcmFtZXRlckluZGV4KSB7Ci0gICAgICAgIGludCBpbmRleCA9IG5l
eHRQYXJhbWV0ZXJJbmRleDsKLSAgICAgICAgYXV0byBwYXR0ZXJuID0gcGFyYW1ldGVycy5hdChp
KTsKLSAgICAgICAgaWYgKCFwYXR0ZXJuLT5pc0JpbmRpbmdOb2RlKCkpIHsKLSAgICAgICAgICAg
IG1fY29kZUJsb2NrLT5hZGRQYXJhbWV0ZXIoKTsKLSAgICAgICAgICAgIFJlZ2lzdGVySUQmIHBh
cmFtZXRlciA9IHJlZ2lzdGVyRm9yKGluZGV4KTsKLSAgICAgICAgICAgIHBhcmFtZXRlci5zZXRJ
bmRleChpbmRleCk7Ci0gICAgICAgICAgICBtX2RlY29uc3RydWN0ZWRQYXJhbWV0ZXJzLmFwcGVu
ZChzdGQ6Om1ha2VfcGFpcigmcGFyYW1ldGVyLCBwYXR0ZXJuKSk7Ci0gICAgICAgICAgICBjb250
aW51ZTsKKyAgICAvLyBUaGlzIGlzIG91ciBmaW5hbCBhY3Qgb2Ygd2VpcmRuZXNzLiAiYXJndW1l
bnRzIiBpcyBvdmVycmlkZGVuIGJ5IGV2ZXJ5dGhpbmcgZXhjZXB0IHRoZQorICAgIC8vIGNhbGxl
ZS4gV2UgYWRkIGl0IHRvIHRoZSBzeW1ib2wgdGFibGUgaWYgaXQncyBub3QgYWxyZWFkeSB0aGVy
ZSBhbmQgaXQncyBub3QgYW4gYXJndW1lbnQuCisgICAgaWYgKG5lZWRzQXJndW1lbnRzKSB7Cisg
ICAgICAgIC8vIElmICJhcmd1bWVudHMiIGlzIG92ZXJyaWRkZW4gYnkgYSBmdW5jdGlvbiBvciBk
ZWNvbnN0cnVjdGVkIHBhcmFtZXRlciBuYW1lLCB0aGVuIGl0J3MKKyAgICAgICAgLy8gT0sgZm9y
IHVzIHRvIGNhbGwgY3JlYXRlVmFyaWFibGUoKSBiZWNhdXNlIGl0IHdvbid0IGNoYW5nZSBhbnl0
aGluZy4gSXQncyBhbHNvIE9LIGZvcgorICAgICAgICAvLyB1cyB0byB0aGVtIHRlbGwgQnl0ZWNv
ZGVHZW5lcmF0b3I6OmdlbmVyYXRlKCkgdG8gd3JpdGUgdG8gaXQgYmVjYXVzZSBpdCB3aWxsIGRv
IHNvCisgICAgICAgIC8vIGJlZm9yZSBpdCBpbml0aWFsaXplcyBmdW5jdGlvbnMgYW5kIGRlY29u
c3RydWN0ZWQgcGFyYW1ldGVycy4gQnV0IGlmICJhcmd1bWVudHMiIGlzCisgICAgICAgIC8vIG92
ZXJyaWRkZW4gYnkgYSAic2ltcGxlIiBmdW5jdGlvbiBwYXJhbWV0ZXIsIHRoZW4gd2UgaGF2ZSB0
byBiYWlsOiBjcmVhdGVWYXJpYWJsZSgpCisgICAgICAgIC8vIHdvdWxkIGFzc2VydCBhbmQgQnl0
ZWNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlKCkgd291bGQgd3JpdGUgdGhlICJhcmd1bWVudHMiIGFm
dGVyIHRoZQorICAgICAgICAvLyBhcmd1bWVudCB2YWx1ZSBoYWQgYWxyZWFkeSBiZWVuIHByb3Bl
cmx5IGluaXRpYWxpemVkLgorICAgICAgICAKKyAgICAgICAgYm9vbCBoYXZlUGFyYW1ldGVyTmFt
ZWRBcmd1bWVudHMgPSBmYWxzZTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBh
cmFtZXRlcnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIFN0cmluZ0ltcGwqIG5hbWUgPSB2
aXNpYmxlTmFtZUZvclBhcmFtZXRlcihwYXJhbWV0ZXJzLmF0KGkpKTsKKyAgICAgICAgICAgIGlm
IChuYW1lID09IHByb3BlcnR5TmFtZXMoKS5hcmd1bWVudHMuaW1wbCgpKSB7CisgICAgICAgICAg
ICAgICAgaGF2ZVBhcmFtZXRlck5hbWVkQXJndW1lbnRzID0gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBhdXRvIHNpbXBsZVBh
cmFtZXRlciA9IHN0YXRpY19jYXN0PGNvbnN0IEJpbmRpbmdOb2RlKj4ocGF0dGVybik7Ci0gICAg
ICAgIGlmIChjYXB0dXJlZEFyZ3VtZW50cy5zaXplKCkgJiYgY2FwdHVyZWRBcmd1bWVudHNbaV0p
IHsKLSAgICAgICAgICAgIEFTU0VSVCgoZnVuY3Rpb25Ob2RlLT5oYXNDYXB0dXJlZFZhcmlhYmxl
cygpICYmIGZ1bmN0aW9uTm9kZS0+Y2FwdHVyZXMoc2ltcGxlUGFyYW1ldGVyLT5ib3VuZFByb3Bl
cnR5KCkpKSB8fCBzaG91bGRDYXB0dXJlQWxsVGhlVGhpbmdzKTsKLSAgICAgICAgICAgIGluZGV4
ID0gY2FwdHVyZWRBcmd1bWVudHNbaV0tPmluZGV4KCk7Ci0gICAgICAgICAgICBSZWdpc3RlcklE
IG9yaWdpbmFsKG5leHRQYXJhbWV0ZXJJbmRleCk7Ci0gICAgICAgICAgICBpbml0aWFsaXplQ2Fw
dHVyZWRWYXJpYWJsZShjYXB0dXJlZEFyZ3VtZW50c1tpXSwgc2ltcGxlUGFyYW1ldGVyLT5ib3Vu
ZFByb3BlcnR5KCksICZvcmlnaW5hbCk7CisgICAgICAgIAorICAgICAgICBpZiAoIWhhdmVQYXJh
bWV0ZXJOYW1lZEFyZ3VtZW50cykgeworICAgICAgICAgICAgY3JlYXRlVmFyaWFibGUoCisgICAg
ICAgICAgICAgICAgcHJvcGVydHlOYW1lcygpLmFyZ3VtZW50cywgdmFyS2luZChwcm9wZXJ0eU5h
bWVzKCkuYXJndW1lbnRzLmltcGwoKSksIElzVmFyaWFibGUpOworICAgICAgICAgICAgbV9uZWVk
VG9Jbml0aWFsaXplQXJndW1lbnRzID0gdHJ1ZTsKICAgICAgICAgfQotICAgICAgICBhZGRQYXJh
bWV0ZXIoc2ltcGxlUGFyYW1ldGVyLT5ib3VuZFByb3BlcnR5KCksIGluZGV4KTsKICAgICB9Ci0K
LSAgICAvLyBXZSBkZWNsYXJlIHRoZSBjYWxsZWUncyBuYW1lIGxhc3QgYmVjYXVzZSBpdCBzaG91
bGQgbG9zZSB0byBhIHZhciwgZnVuY3Rpb24sIGFuZC9vciBwYXJhbWV0ZXIgZGVjbGFyYXRpb24u
Ci0gICAgYWRkQ2FsbGVlKGZ1bmN0aW9uTm9kZSwgY2FsbGVlUmVnaXN0ZXIpOworICAgIAorICAg
IGlmIChtX3N5bWJvbFRhYmxlLT5zY29wZVNpemUoKSkKKyAgICAgICAgZW1pdE9wY29kZShvcF90
b3VjaF9lbnRyeSk7CiAKICAgICBpZiAoaXNDb25zdHJ1Y3RvcigpKSB7CiAgICAgICAgIGVtaXRD
cmVhdGVUaGlzKCZtX3RoaXNSZWdpc3Rlcik7CkBAIC00MDksNyArNDUyLDYgQEAgQnl0ZWNvZGVH
ZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFZNJgogICAgICAgICBpbnN0cnVjdGlvbnMoKS5h
cHBlbmQoMCk7CiAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCgwKTsKICAgICB9Ci0gICAg
bV9sb2NhbEFyZ3VtZW50c1JlZ2lzdGVyID0gbG9jYWxBcmd1bWVudHNSZWdpc3RlcjsKIH0KIAog
Qnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFZNJiB2bSwgRXZhbE5vZGUqIGV2
YWxOb2RlLCBVbmxpbmtlZEV2YWxDb2RlQmxvY2sqIGNvZGVCbG9jaywgRGVidWdnZXJNb2RlIGRl
YnVnZ2VyTW9kZSwgUHJvZmlsZXJNb2RlIHByb2ZpbGVyTW9kZSkKQEAgLTQ0OCwxMDggKzQ5MCwy
MiBAQCBCeXRlY29kZUdlbmVyYXRvcjo6fkJ5dGVjb2RlR2VuZXJhdG9yKCkKIHsKIH0KIAotUmVn
aXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRJbml0TGF6eVJlZ2lzdGVyKFJlZ2lzdGVy
SUQqIHJlZykKK1JlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjppbml0aWFsaXplTmV4dFBh
cmFtZXRlcigpCiB7Ci0gICAgZW1pdE9wY29kZShvcF9pbml0X2xhenlfcmVnKTsKLSAgICBpbnN0
cnVjdGlvbnMoKS5hcHBlbmQocmVnLT5pbmRleCgpKTsKLSAgICBBU1NFUlQoIWhhc1dhdGNoYWJs
ZVZhcmlhYmxlKHJlZy0+aW5kZXgoKSkpOwotICAgIHJldHVybiByZWc7Ci19Ci0KLVJlZ2lzdGVy
SUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjppbml0aWFsaXplQ2FwdHVyZWRWYXJpYWJsZShSZWdpc3Rl
cklEKiBkc3QsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgUmVnaXN0ZXJJRCogdmFs
dWUpCi17Ci0KLSAgICBtX2NvZGVCbG9jay0+YWRkUHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbihp
bnN0cnVjdGlvbnMoKS5zaXplKCkpOwotICAgIGVtaXRPcGNvZGUob3BfcHV0X3RvX3Njb3BlKTsK
LSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQobV9sZXhpY2FsRW52aXJvbm1lbnRSZWdpc3Rlci0+
aW5kZXgoKSk7Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGFkZENvbnN0YW50KHByb3BlcnR5
TmFtZSkpOwotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCh2YWx1ZS0+aW5kZXgoKSk7Ci0gICAg
aW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKFJlc29sdmVNb2RlQW5kVHlwZShUaHJvd0lmTm90Rm91bmQs
IExvY2FsQ2xvc3VyZVZhcikub3BlcmFuZCgpKTsKLSAgICBpbnQgb3BlcmFuZCA9IHJlZ2lzdGVy
Rm9yKGRzdC0+aW5kZXgoKSkuaW5kZXgoKTsKLSAgICBib29sIGlzV2F0Y2hhYmxlVmFyaWFibGUg
PSBoYXNXYXRjaGFibGVWYXJpYWJsZShvcGVyYW5kKTsKLSAgICBBU1NFUlQoIWlzV2F0Y2hhYmxl
VmFyaWFibGUgfHwgd2F0Y2hhYmxlVmFyaWFibGVJZGVudGlmaWVyKG9wZXJhbmQpID09IHByb3Bl
cnR5TmFtZSk7Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGlzV2F0Y2hhYmxlVmFyaWFibGUp
OwotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChkc3QtPmluZGV4KCkpOwotICAgIHJldHVybiBk
c3Q7Ci19Ci0KLVJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjpyZXNvbHZlQ2FsbGVlKEZ1
bmN0aW9uTm9kZSogZnVuY3Rpb25Ob2RlKQotewotICAgIGlmICghZnVuY3Rpb25OYW1lSXNJblNj
b3BlKGZ1bmN0aW9uTm9kZS0+aWRlbnQoKSwgZnVuY3Rpb25Ob2RlLT5mdW5jdGlvbk1vZGUoKSkp
Ci0gICAgICAgIHJldHVybiAwOwotCi0gICAgaWYgKGZ1bmN0aW9uTmFtZVNjb3BlSXNEeW5hbWlj
KG1fY29kZUJsb2NrLT51c2VzRXZhbCgpLCBtX2NvZGVCbG9jay0+aXNTdHJpY3RNb2RlKCkpKQot
ICAgICAgICByZXR1cm4gMDsKLQotICAgIG1fY2FsbGVlUmVnaXN0ZXIuc2V0SW5kZXgoSlNTdGFj
azo6Q2FsbGVlKTsKLSAgICBpZiAoZnVuY3Rpb25Ob2RlLT5jYXB0dXJlcyhmdW5jdGlvbk5vZGUt
PmlkZW50KCkpKQotICAgICAgICByZXR1cm4gaW5pdGlhbGl6ZUNhcHR1cmVkVmFyaWFibGUoYWRk
VmFyKCksIGZ1bmN0aW9uTm9kZS0+aWRlbnQoKSwgJm1fY2FsbGVlUmVnaXN0ZXIpOwotCi0gICAg
cmV0dXJuICZtX2NhbGxlZVJlZ2lzdGVyOwotfQotCi12b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjph
ZGRDYWxsZWUoRnVuY3Rpb25Ob2RlKiBmdW5jdGlvbk5vZGUsIFJlZ2lzdGVySUQqIGNhbGxlZVJl
Z2lzdGVyKQotewotICAgIGlmICghY2FsbGVlUmVnaXN0ZXIpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIHN5bWJvbFRhYmxlKCkuYWRkKGZ1bmN0aW9uTm9kZS0+aWRlbnQoKS5pbXBsKCksIFN5bWJv
bFRhYmxlRW50cnkoY2FsbGVlUmVnaXN0ZXItPmluZGV4KCksIFJlYWRPbmx5KSk7Ci19Ci0KLXZv
aWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmFkZFBhcmFtZXRlcihjb25zdCBJZGVudGlmaWVyJiBpZGVu
dCwgaW50IHBhcmFtZXRlckluZGV4KQotewotICAgIC8vIFBhcmFtZXRlcnMgb3ZlcndyaXRlIHZh
ciBkZWNsYXJhdGlvbnMsIGJ1dCBub3QgZnVuY3Rpb24gZGVjbGFyYXRpb25zLgotICAgIFN0cmlu
Z0ltcGwqIHJlcCA9IGlkZW50LmltcGwoKTsKLSAgICBpZiAoIW1fZnVuY3Rpb25zLmNvbnRhaW5z
KHJlcCkpIHsKLSAgICAgICAgc3ltYm9sVGFibGUoKS5zZXQocmVwLCBwYXJhbWV0ZXJJbmRleCk7
Ci0gICAgICAgIFJlZ2lzdGVySUQmIHBhcmFtZXRlciA9IHJlZ2lzdGVyRm9yKHBhcmFtZXRlcklu
ZGV4KTsKLSAgICAgICAgcGFyYW1ldGVyLnNldEluZGV4KHBhcmFtZXRlckluZGV4KTsKLSAgICB9
Ci0KLSAgICAvLyBUbyBtYWludGFpbiB0aGUgY2FsbGluZyBjb252ZW50aW9uLCB3ZSBoYXZlIHRv
IGFsbG9jYXRlIHVuaXF1ZSBzcGFjZSBmb3IKLSAgICAvLyBlYWNoIHBhcmFtZXRlciwgZXZlbiBp
ZiB0aGUgcGFyYW1ldGVyIGRvZXNuJ3QgbWFrZSBpdCBpbnRvIHRoZSBzeW1ib2wgdGFibGUuCisg
ICAgVmlydHVhbFJlZ2lzdGVyIHJlZyA9IHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KG1fY29k
ZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkpOworICAgIFJlZ2lzdGVySUQmIHBhcmFtZXRlciA9IHJl
Z2lzdGVyRm9yKHJlZyk7CisgICAgcGFyYW1ldGVyLnNldEluZGV4KHJlZyk7CiAgICAgbV9jb2Rl
QmxvY2stPmFkZFBhcmFtZXRlcigpOwogfQogCi1ib29sIEJ5dGVjb2RlR2VuZXJhdG9yOjp3aWxs
UmVzb2x2ZVRvQXJndW1lbnRzUmVnaXN0ZXIoY29uc3QgSWRlbnRpZmllciYgaWRlbnQpCi17Ci0g
ICAgaWYgKGlkZW50ICE9IHByb3BlcnR5TmFtZXMoKS5hcmd1bWVudHMpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAKLSAgICBpZiAoIXNob3VsZE9wdGltaXplTG9jYWxzKCkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBTeW1ib2xUYWJsZUVudHJ5IGVudHJ5ID0gc3ltYm9s
VGFibGUoKS5nZXQoaWRlbnQuaW1wbCgpKTsKLSAgICBpZiAoZW50cnkuaXNOdWxsKCkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChtX2xvY2FsQXJndW1lbnRzUmVnaXN0ZXIgJiYg
aXNDYXB0dXJlZChtX2xvY2FsQXJndW1lbnRzUmVnaXN0ZXItPmluZGV4KCkpICYmIG1fbGV4aWNh
bEVudmlyb25tZW50UmVnaXN0ZXIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICht
X2NvZGVCbG9jay0+dXNlc0FyZ3VtZW50cygpICYmIG1fY29kZVR5cGUgPT0gRnVuY3Rpb25Db2Rl
ICYmIG1fbG9jYWxBcmd1bWVudHNSZWdpc3RlcikKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1SZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6
dW5jaGVja2VkTG9jYWxBcmd1bWVudHNSZWdpc3RlcigpCi17Ci0gICAgQVNTRVJUKHdpbGxSZXNv
bHZlVG9Bcmd1bWVudHNSZWdpc3Rlcihwcm9wZXJ0eU5hbWVzKCkuYXJndW1lbnRzKSk7Ci0gICAg
QVNTRVJUKG1fbG9jYWxBcmd1bWVudHNSZWdpc3Rlcik7Ci0gICAgcmV0dXJuIG1fbG9jYWxBcmd1
bWVudHNSZWdpc3RlcjsKLX0KLQotUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmNyZWF0
ZUxhenlSZWdpc3RlcklmTmVjZXNzYXJ5KFJlZ2lzdGVySUQqIHJlZykKK1N0cmluZ0ltcGwqIEJ5
dGVjb2RlR2VuZXJhdG9yOjp2aXNpYmxlTmFtZUZvclBhcmFtZXRlcihEZWNvbnN0cnVjdGlvblBh
dHRlcm5Ob2RlKiBwYXR0ZXJuKQogewotICAgIGlmICghcmVnLT52aXJ0dWFsUmVnaXN0ZXIoKS5p
c0xvY2FsKCkpCi0gICAgICAgIHJldHVybiByZWc7Ci0KLSAgICBpbnQgbG9jYWxWYXJpYWJsZU51
bWJlciA9IHJlZy0+dmlydHVhbFJlZ2lzdGVyKCkudG9Mb2NhbCgpOwotCi0gICAgaWYgKG1fbGFz
dExhenlGdW5jdGlvbiA8PSBsb2NhbFZhcmlhYmxlTnVtYmVyIHx8IGxvY2FsVmFyaWFibGVOdW1i
ZXIgPCBtX2ZpcnN0TGF6eUZ1bmN0aW9uKQotICAgICAgICByZXR1cm4gcmVnOwotICAgIGVtaXRM
YXp5TmV3RnVuY3Rpb24ocmVnLCBtX2xhenlGdW5jdGlvbnMuZ2V0KGxvY2FsVmFyaWFibGVOdW1i
ZXIpKTsKLSAgICByZXR1cm4gcmVnOworICAgIGlmIChwYXR0ZXJuLT5pc0JpbmRpbmdOb2RlKCkp
IHsKKyAgICAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBzdGF0aWNfY2FzdDxjb25zdCBC
aW5kaW5nTm9kZSo+KHBhdHRlcm4pLT5ib3VuZFByb3BlcnR5KCk7CisgICAgICAgIGlmICghbV9m
dW5jdGlvbnMuY29udGFpbnMoaWRlbnQuaW1wbCgpKSkKKyAgICAgICAgICAgIHJldHVybiBpZGVu
dC5pbXBsKCk7CisgICAgfQorICAgIHJldHVybiBudWxscHRyOwogfQogCiBSZWdpc3RlcklEKiBC
eXRlY29kZUdlbmVyYXRvcjo6bmV3UmVnaXN0ZXIoKQpAQCAtOTU0LDcgKzkxMCw3IEBAIGJvb2wg
Qnl0ZWNvZGVHZW5lcmF0b3I6Omhhc0NvbnN0YW50KGNvbnMKICAgICBTdHJpbmdJbXBsKiByZXAg
PSBpZGVudC5pbXBsKCk7CiAgICAgcmV0dXJuIG1faWRlbnRpZmllck1hcC5jb250YWlucyhyZXAp
OwogfQotICAgIAorCiB1bnNpZ25lZCBCeXRlY29kZUdlbmVyYXRvcjo6YWRkQ29uc3RhbnQoY29u
c3QgSWRlbnRpZmllciYgaWRlbnQpCiB7CiAgICAgU3RyaW5nSW1wbCogcmVwID0gaWRlbnQuaW1w
bCgpOwpAQCAtMTE5Miw0NiArMTE0OCw4NiBAQCBib29sIEJ5dGVjb2RlR2VuZXJhdG9yOjppc0Nh
cHR1cmVkKGludCBvCiAgICAgcmV0dXJuIG1fc3ltYm9sVGFibGUgJiYgbV9zeW1ib2xUYWJsZS0+
aXNDYXB0dXJlZChvcGVyYW5kKTsKIH0KIAotTG9jYWwgQnl0ZWNvZGVHZW5lcmF0b3I6OmxvY2Fs
KGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5KQorVmFyaWFibGUgQnl0ZWNvZGVHZW5lcmF0b3I6
OnZhcmlhYmxlKGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5KQogewotICAgIGlmIChwcm9wZXJ0
eSA9PSBwcm9wZXJ0eU5hbWVzKCkudGhpc0lkZW50aWZpZXIpCi0gICAgICAgIHJldHVybiBMb2Nh
bCh0aGlzUmVnaXN0ZXIoKSwgUmVhZE9ubHksIExvY2FsOjpTcGVjaWFsTG9jYWwpOwotICAgIGJv
b2wgaXNBcmd1bWVudHMgPSBwcm9wZXJ0eSA9PSBwcm9wZXJ0eU5hbWVzKCkuYXJndW1lbnRzOwot
ICAgIGlmIChpc0FyZ3VtZW50cykKLSAgICAgICAgY3JlYXRlQXJndW1lbnRzSWZOZWNlc3Nhcnko
KTsKLQorICAgIGlmIChwcm9wZXJ0eSA9PSBwcm9wZXJ0eU5hbWVzKCkudGhpc0lkZW50aWZpZXIp
IHsKKyAgICAgICAgcmV0dXJuIFZhcmlhYmxlKAorICAgICAgICAgICAgcHJvcGVydHksIFZhck9m
ZnNldCh0aGlzUmVnaXN0ZXIoKS0+dmlydHVhbFJlZ2lzdGVyKCkpLCB0aGlzUmVnaXN0ZXIoKSwK
KyAgICAgICAgICAgIFJlYWRPbmx5LCBMb2NhbDo6U3BlY2lhbExvY2FsKTsKKyAgICB9CisgICAg
CiAgICAgaWYgKCFzaG91bGRPcHRpbWl6ZUxvY2FscygpKQotICAgICAgICByZXR1cm4gTG9jYWwo
KTsKLQorICAgICAgICByZXR1cm4gVmFyaWFibGUocHJvcGVydHkpOworICAgIAogICAgIFN5bWJv
bFRhYmxlRW50cnkgZW50cnkgPSBzeW1ib2xUYWJsZSgpLmdldChwcm9wZXJ0eS5pbXBsKCkpOwog
ICAgIGlmIChlbnRyeS5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIExvY2FsKCk7Ci0KLQotICAg
IFJlZ2lzdGVySUQqIGxvY2FsID0gY3JlYXRlTGF6eVJlZ2lzdGVySWZOZWNlc3NhcnkoJnJlZ2lz
dGVyRm9yKGVudHJ5LmdldEluZGV4KCkpKTsKLQotICAgIGlmIChpc0NhcHR1cmVkKGxvY2FsLT5p
bmRleCgpKSAmJiBtX2xleGljYWxFbnZpcm9ubWVudFJlZ2lzdGVyKQotICAgICAgICByZXR1cm4g
TG9jYWwoKTsKLQotICAgIHJldHVybiBMb2NhbChsb2NhbCwgZW50cnkuZ2V0QXR0cmlidXRlcygp
LCBpc0FyZ3VtZW50cyA/IExvY2FsOjpTcGVjaWFsTG9jYWwgOiBMb2NhbDo6Tm9ybWFsTG9jYWwp
OworICAgICAgICByZXR1cm4gVmFyaWFibGUocHJvcGVydHkpOworICAgIAorICAgIFZhck9mZnNl
dCBvZmZzZXQgPSBlbnRyeS52YXJPZmZzZXQoKTsKKyAgICAKKyAgICBpZiAob2Zmc2V0LmlzU2Nv
cGUoKSAmJiBtX2xvY2FsU2NvcGVEZXB0aCkgeworICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxk
IGJlIGFibGUgdG8gc3RhdGljYWxseSByZXNvbHZlIHRocm91Z2ggb3VyIGxvY2FsIHNjb3Blcy4K
KyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MTg4
NQorICAgICAgICByZXR1cm4gVmFyaWFibGUocHJvcGVydHkpOworICAgIH0KKyAgICAKKyAgICBS
ZWdpc3RlcklEKiBsb2NhbDsKKyAgICBpZiAob2Zmc2V0LmlzU3RhY2soKSkKKyAgICAgICAgbG9j
YWwgPSAmcmVnaXN0ZXJGb3Iob2Zmc2V0LnN0YWNrT2Zmc2V0KCkub2Zmc2V0KCkpOworICAgIGVs
c2UKKyAgICAgICAgbG9jYWwgPSBudWxscHRyOworICAgIAorICAgIHJldHVybiBWYXJpYWJsZShw
cm9wZXJ0eSwgdmFyT2Zmc2V0LCBsb2NhbCwgZW50cnkuZ2V0QXR0cmlidXRlcygpLCBMb2NhbDo6
Tm9ybWFsTG9jYWwpOwogfQogCi1Mb2NhbCBCeXRlY29kZUdlbmVyYXRvcjo6Y29uc3RMb2NhbChj
b25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eSkKK1ZhcmlhYmxlIEJ5dGVjb2RlR2VuZXJhdG9yOjpo
YXNWYXJpYWJsZURpcmVjdChjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eSkKIHsKLSAgICBpZiAo
bV9jb2RlVHlwZSAhPSBGdW5jdGlvbkNvZGUpCi0gICAgICAgIHJldHVybiBMb2NhbCgpOworICAg
IEFTU0VSVChwcm9wZXJ0eSAhPSBwcm9wZXJ0eU5hbWVzKCkudGhpc0lkZW50aWZpZXIpOworICAg
IAorICAgIHJldHVybiAhc3ltYm9sVGFibGUoKS5nZXQocHJvcGVydHkuaW1wbCgpKS5pc051bGwo
KTsKK30KIAordm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6Y3JlYXRlVmFyaWFibGUoCisgICAgY29u
c3QgSWRlbnRpZmllciYgcHJvcGVydHksIFZhcktpbmQgdmFyS2luZCwgQ29uc3RhbnRNb2RlIGNv
bnN0YW50TW9kZSkKK3sKKyAgICBBU1NFUlQocHJvcGVydHkgIT0gcHJvcGVydHlOYW1lcygpLnRo
aXNJZGVudGlmaWVyKTsKKyAgICAKKyAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihzeW1i
b2xUYWJsZSgpLm1fbG9jayk7CiAgICAgU3ltYm9sVGFibGVFbnRyeSBlbnRyeSA9IHN5bWJvbFRh
YmxlKCkuZ2V0KHByb3BlcnR5LmltcGwoKSk7Ci0gICAgaWYgKGVudHJ5LmlzTnVsbCgpKQotICAg
ICAgICByZXR1cm4gTG9jYWwoKTsKLQotICAgIFJlZ2lzdGVySUQqIGxvY2FsID0gY3JlYXRlTGF6
eVJlZ2lzdGVySWZOZWNlc3NhcnkoJnJlZ2lzdGVyRm9yKGVudHJ5LmdldEluZGV4KCkpKTsKLQot
ICAgIGJvb2wgaXNBcmd1bWVudHMgPSBwcm9wZXJ0eSA9PSBwcm9wZXJ0eU5hbWVzKCkuYXJndW1l
bnRzOwotICAgIGlmIChpc0NhcHR1cmVkKGxvY2FsLT5pbmRleCgpKSAmJiBtX2xleGljYWxFbnZp
cm9ubWVudFJlZ2lzdGVyKQotICAgICAgICByZXR1cm4gTG9jYWwoKTsKKyAgICAKKyAgICBpZiAo
IWVudHJ5LmlzTnVsbCgpKSB7CisgICAgICAgIC8vIERvIHNvbWUgY2hlY2tzIHRvIGVuc3VyZSB0
aGF0IHRoZSB2YXJpYWJsZSB3ZSdyZSBiZWluZyBhc2tlZCB0byBjcmVhdGUgaXMgc3VmZmljaWVu
dGx5CisgICAgICAgIC8vIGNvbXBhdGlibGUgd2l0aCB0aGUgb25lIHdlIGhhdmUgYWxyZWFkeSBj
cmVhdGVkLgogCi0gICAgcmV0dXJuIExvY2FsKGxvY2FsLCBlbnRyeS5nZXRBdHRyaWJ1dGVzKCks
IGlzQXJndW1lbnRzID8gTG9jYWw6OlNwZWNpYWxMb2NhbCA6IExvY2FsOjpOb3JtYWxMb2NhbCk7
CisgICAgICAgIFZhck9mZnNldCBvZmZzZXQgPSBlbnRyeS52YXJPZmZzZXQoKTsKKyAgICAgICAg
CisgICAgICAgIC8vIFdlIGNhbid0IGNoYW5nZSBvdXIgbWluZHMgYWJvdXQgd2hldGhlciBpdCdz
IGNhcHR1cmVkLgorICAgICAgICBSRUxFQVNFX0FTU0VSVChvZmZzZXQua2luZCgpID09IHZhcktp
bmQpOworICAgICAgICAKKyAgICAgICAgLy8gSXQncyBmaW5lIHRvIGV4cGVjdCBhIHZhcmlhYmxl
IHRvIGJlIGNvbnN0YW50IGlmIGl0IHByZXZpb3VzbHkgd2Fzbid0LCBidXQgaXQncyBub3QKKyAg
ICAgICAgLy8gT0sgZm9yIGEgcHJldmlvdXNseSBjb25zdGFudCB2YXJpYWJsZSB0byBsYXRlciBi
ZSBleHBlY3RlZCB0byBiZSBub24tY29uc3RhbnQuIFRoaXMgYWxsCisgICAgICAgIC8vIHdvcmtz
IG91dCBiZWNhdXNlIGNvbnN0YW50cyBvbmx5IGNvbWUgaW50byBwbGF5IHdpdGggbG9jYWwgdmFy
aWFibGUgZGVjbGFyYXRpb25zLCBhbmQKKyAgICAgICAgLy8gdGhvc2UgYXJlIGFsd2F5cyBhZGRl
ZCBsYXN0LgorICAgICAgICBpZiAoY29uc3RhbnRNb2RlID09IElzVmFyaWFibGUpCisgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVCghZW50cnkuaXNSZWFkT25seSgpKTsKKyAgICAgICAgCisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgVmFyT2Zmc2V0IHZhck9mZnNldDsKKyAgICBp
ZiAodmFyS2luZCA9PSBTY29wZVZhcktpbmQpCisgICAgICAgIHZhck9mZnNldCA9IFZhck9mZnNl
dChzeW1ib2xUYWJsZSgpLnRha2VOZXh0U2NvcGVPZmZzZXQoKSk7CisgICAgZWxzZSB7CisgICAg
ICAgIEFTU0VSVCh2YXJLaW5kID09IFN0YWNrVmFyS2luZCk7CisgICAgICAgIHZhck9mZnNldCA9
IFZhck9mZnNldCh2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChtX2NhbGxlZVJlZ2lzdGVycy5zaXpl
KCkpKTsKKyAgICB9CisgICAgU3ltYm9sVGFibGVFbnRyeSBuZXdFbnRyeSh2YXJPZmZzZXQsIGNv
bnN0YW50TW9kZSA9PSBJc0NvbnN0YW50ID8gUmVhZE9ubHkgOiAwKTsKKyAgICBzeW1ib2xUYWJs
ZSgpLmFkZChsb2NrZXIsIGlkZW50LmltcGwoKSwgbmV3RW50cnkpOworICAgIAorICAgIGlmICh2
YXJLaW5kID09IFN0YWNrVmFyS2luZCkgeworICAgICAgICBSZWdpc3RlcklEKiBsb2NhbCA9IGFk
ZFZhcigpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChsb2NhbC0+aW5kZXgoKSA9PSB2YXJPZmZz
ZXQuc3RhY2tPZmZzZXQoKS5vZmZzZXQoKSk7CisgICAgfQogfQogCiB2b2lkIEJ5dGVjb2RlR2Vu
ZXJhdG9yOjplbWl0Q2hlY2tIYXNJbnN0YW5jZShSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQq
IHZhbHVlLCBSZWdpc3RlcklEKiBiYXNlLCBMYWJlbCogdGFyZ2V0KQpAQCAtMTI1NSw4OCArMTI1
MSwxMzkgQEAgUmVzb2x2ZVR5cGUgQnl0ZWNvZGVHZW5lcmF0b3I6OnJlc29sdmVUeQogICAgIHJl
dHVybiBHbG9iYWxQcm9wZXJ0eTsKIH0KIAotUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6
OmVtaXRSZXNvbHZlU2NvcGUoUmVnaXN0ZXJJRCogZHN0LCBjb25zdCBJZGVudGlmaWVyJiBpZGVu
dGlmaWVyLCBSZXNvbHZlU2NvcGVJbmZvJiBpbmZvKQorUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5l
cmF0b3I6OmVtaXRSZXNvbHZlU2NvcGUoUmVnaXN0ZXJJRCogZHN0LCBjb25zdCBWYXJpYWJsZSYg
dmFyaWFibGUpCiB7Ci0gICAgaWYgKG1fc3ltYm9sVGFibGUgJiYgbV9jb2RlVHlwZSA9PSBGdW5j
dGlvbkNvZGUgJiYgIW1fbG9jYWxTY29wZURlcHRoKSB7Ci0gICAgICAgIFN5bWJvbFRhYmxlRW50
cnkgZW50cnkgPSBtX3N5bWJvbFRhYmxlLT5nZXQoaWRlbnRpZmllci5pbXBsKCkpOwotICAgICAg
ICBpZiAoIWVudHJ5LmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICBpbmZvID0gUmVzb2x2ZVNjb3Bl
SW5mbyhlbnRyeS5nZXRJbmRleCgpKTsKLSAgICAgICAgICAgIHJldHVybiBzY29wZVJlZ2lzdGVy
KCk7Ci0gICAgICAgIH0KKyAgICBzd2l0Y2ggKHZhcmlhYmxlLnZhck9mZnNldCgpLmtpbmQoKSkg
eworICAgIGNhc2UgU3RhY2tPZmZzZXQ6CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAg
ICAKKyAgICBjYXNlIENhcHR1cmVkQXJndW1lbnRLaW5kOgorICAgICAgICByZXR1cm4gYXJndW1l
bnRzUmVnaXN0ZXIoKTsKKyAgICAgICAgCisgICAgY2FzZSBTY29wZU9mZnNldDoKKyAgICAgICAg
cmV0dXJuIHNjb3BlUmVnaXN0ZXIoKTsKKyAgICAgICAgCisgICAgY2FzZSBJbnZhbGlkVmFyS2lu
ZDoKKyAgICAgICAgLy8gSW5kaWNhdGVzIG5vbi1sb2NhbCByZXNvbHV0aW9uLgorICAgICAgICAK
KyAgICAgICAgQVNTRVJUKCFtX3N5bWJvbFRhYmxlIHx8ICFtX3N5bWJvbFRhYmxlLT5jb250YWlu
cyhpZGVudGlmaWVyLmltcGwoKSkgfHwgcmVzb2x2ZVR5cGUoKSA9PSBEeW5hbWljKTsKKyAgICAg
ICAgCisgICAgICAgIC8vIHJlc29sdmVfc2NvcGUgZHN0LCBpZCwgUmVzb2x2ZVR5cGUsIGRlcHRo
CisgICAgICAgIGVtaXRPcGNvZGUob3BfcmVzb2x2ZV9zY29wZSk7CisgICAgICAgIGluc3RydWN0
aW9ucygpLmFwcGVuZChraWxsKGRzdCkpOworICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQo
c2NvcGVSZWdpc3RlcigpLT5pbmRleCgpKTsKKyAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5k
KGFkZENvbnN0YW50KHZhcmlhYmxlLmlkZW50KCkpKTsKKyAgICAgICAgaW5zdHJ1Y3Rpb25zKCku
YXBwZW5kKHJlc29sdmVUeXBlKCkpOworICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoMCk7
CisgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCgwKTsKKyAgICAgICAgcmV0dXJuIGRzdDsK
ICAgICB9Ci0KLSAgICBBU1NFUlQoIW1fc3ltYm9sVGFibGUgfHwgIW1fc3ltYm9sVGFibGUtPmNv
bnRhaW5zKGlkZW50aWZpZXIuaW1wbCgpKSB8fCByZXNvbHZlVHlwZSgpID09IER5bmFtaWMpOwot
Ci0gICAgbV9jb2RlQmxvY2stPmFkZFByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb24oaW5zdHJ1Y3Rp
b25zKCkuc2l6ZSgpKTsKLQotICAgIC8vIHJlc29sdmVfc2NvcGUgZHN0LCBpZCwgUmVzb2x2ZVR5
cGUsIGRlcHRoCi0gICAgZW1pdE9wY29kZShvcF9yZXNvbHZlX3Njb3BlKTsKLSAgICBkc3QgPSB0
ZW1wRGVzdGluYXRpb24oZHN0KTsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoa2lsbChkc3Qp
KTsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoc2NvcGVSZWdpc3RlcigpLT5pbmRleCgpKTsK
LSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYWRkQ29uc3RhbnQoaWRlbnRpZmllcikpOwotICAg
IGluc3RydWN0aW9ucygpLmFwcGVuZChyZXNvbHZlVHlwZSgpKTsKLSAgICBpbnN0cnVjdGlvbnMo
KS5hcHBlbmQoMCk7Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKDApOwotICAgIHJldHVybiBk
c3Q7CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4g
bnVsbHB0cjsKIH0KIAotCi1SZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFJlc29s
dmVDb25zdGFudExvY2FsKFJlZ2lzdGVySUQqIGRzdCwgY29uc3QgSWRlbnRpZmllciYgaWRlbnRp
ZmllciwgUmVzb2x2ZVNjb3BlSW5mbyYgaW5mbykKK1JlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJh
dG9yOjplbWl0R2V0RnJvbVNjb3BlKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogc2NvcGUs
IGNvbnN0IFZhcmlhYmxlJiB2YXJpYWJsZSwgUmVzb2x2ZU1vZGUgcmVzb2x2ZU1vZGUpCiB7Ci0g
ICAgaWYgKCFtX3N5bWJvbFRhYmxlIHx8IG1fY29kZVR5cGUgIT0gRnVuY3Rpb25Db2RlKQotICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIFN5bWJvbFRhYmxlRW50cnkgZW50cnkgPSBtX3N5
bWJvbFRhYmxlLT5nZXQoaWRlbnRpZmllci5pbXBsKCkpOwotICAgIGlmIChlbnRyeS5pc051bGwo
KSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgaW5mbyA9IFJlc29sdmVTY29wZUluZm8o
ZW50cnkuZ2V0SW5kZXgoKSk7Ci0gICAgcmV0dXJuIGVtaXRNb3ZlKGRzdCwgbV9sZXhpY2FsRW52
aXJvbm1lbnRSZWdpc3Rlcik7Ci0KKyAgICBzd2l0Y2ggKHZhcmlhYmxlLnZhck9mZnNldCgpLmtp
bmQoKSkgeworICAgIGNhc2UgU3RhY2tPZmZzZXQ6CisgICAgICAgIHJldHVybiBlbWl0TW92ZShr
aWxsKGRzdCksIHZhcmlhYmxlLmxvY2FsKCkpOworICAgICAgICAKKyAgICBjYXNlIENhcHR1cmVk
QXJndW1lbnRzT2Zmc2V0OgorICAgICAgICBBU1NFUlQoc2NvcGUgPT0gYXJndW1lbnRzUmVnaXN0
ZXIoKSk7CisgICAgICAgIFVubGlua2VkVmFsdWVQcm9maWxlIHByb2ZpbGUgPSBlbWl0UHJvZmls
ZWRPcGNvZGUob3BfZ2V0X2Zyb21fYXJndW1lbnRzKTsKKyAgICAgICAgaW5zdHJ1Y3Rpb25zKCku
YXBwZW5kKGtpbGwoZHN0KSk7CisgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChzY29wZS0+
aW5kZXgoKSk7CisgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCh2YXJpYWJsZS52YXJPZmZz
ZXQoKS5jYXB0dXJlZEFyZ3VtZW50c09mZnNldCgpLm9mZnNldCgpKTsKKyAgICAgICAgaW5zdHJ1
Y3Rpb25zKCkuYXBwZW5kKHByb2ZpbGUpOworICAgICAgICByZXR1cm4gZHN0OworICAgICAgICAK
KyAgICBjYXNlIFNjb3BlT2Zmc2V0OgorICAgIGNhc2UgSW52YWxpZFZhcktpbmQ6CisgICAgICAg
IG1fY29kZUJsb2NrLT5hZGRQcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uKGluc3RydWN0aW9ucygp
LnNpemUoKSk7CisgICAgICAgIAorICAgICAgICAvLyBnZXRfZnJvbV9zY29wZSBkc3QsIHNjb3Bl
LCBpZCwgUmVzb2x2ZU1vZGVBbmRUeXBlLCBTdHJ1Y3R1cmUsIE9wZXJhbmQKKyAgICAgICAgVW5s
aW5rZWRWYWx1ZVByb2ZpbGUgcHJvZmlsZSA9IGVtaXRQcm9maWxlZE9wY29kZShvcF9nZXRfZnJv
bV9zY29wZSk7CisgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChraWxsKGRzdCkpOworICAg
ICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoc2NvcGUtPmluZGV4KCkpOworICAgICAgICBpbnN0
cnVjdGlvbnMoKS5hcHBlbmQoYWRkQ29uc3RhbnQodmFyaWFibGUuaWRlbnRpZmllcigpKSk7Cisg
ICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChSZXNvbHZlTW9kZUFuZFR5cGUocmVzb2x2ZU1v
ZGUsIHZhcmlhYmxlLnZhck9mZnNldCgpLmlzU2NvcGUoKSA/IExvY2FsQ2xvc3VyZVZhciA6IHJl
c29sdmVUeXBlKCkpLm9wZXJhbmQoKSk7CisgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCgw
KTsKKyAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHZhcmlhYmxlLnZhck9mZnNldCgpLmlz
U2NvcGUoKSA/IHZhcmlhYmxlLnZhck9mZnNldCgpLnNjb3BlT2Zmc2V0KCkub2Zmc2V0KCkgOiAw
KTsKKyAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHByb2ZpbGUpOworICAgICAgICByZXR1
cm4gZHN0OworICAgIH0KKyAgICAKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
fQogCi1SZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEdldEZyb21TY29wZShSZWdp
c3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHNjb3BlLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudGlm
aWVyLCBSZXNvbHZlTW9kZSByZXNvbHZlTW9kZSwgY29uc3QgUmVzb2x2ZVNjb3BlSW5mbyYgaW5m
bykKK1JlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0UHV0VG9TY29wZShSZWdpc3Rl
cklEKiBzY29wZSwgY29uc3QgVmFyaWFibGUmIHZhcmlhYmxlLCBSZWdpc3RlcklEKiB2YWx1ZSwg
UmVzb2x2ZU1vZGUgcmVzb2x2ZU1vZGUpCiB7Ci0gICAgbV9jb2RlQmxvY2stPmFkZFByb3BlcnR5
QWNjZXNzSW5zdHJ1Y3Rpb24oaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKTsKLQotICAgIC8vIGdldF9m
cm9tX3Njb3BlIGRzdCwgc2NvcGUsIGlkLCBSZXNvbHZlTW9kZUFuZFR5cGUsIFN0cnVjdHVyZSwg
T3BlcmFuZAotICAgIFVubGlua2VkVmFsdWVQcm9maWxlIHByb2ZpbGUgPSBlbWl0UHJvZmlsZWRP
cGNvZGUob3BfZ2V0X2Zyb21fc2NvcGUpOwotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChraWxs
KGRzdCkpOwotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChzY29wZS0+aW5kZXgoKSk7Ci0gICAg
aW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGFkZENvbnN0YW50KGlkZW50aWZpZXIpKTsKLSAgICBpbnN0
cnVjdGlvbnMoKS5hcHBlbmQoUmVzb2x2ZU1vZGVBbmRUeXBlKHJlc29sdmVNb2RlLCBpbmZvLmlz
TG9jYWwoKSA/IExvY2FsQ2xvc3VyZVZhciA6IHJlc29sdmVUeXBlKCkpLm9wZXJhbmQoKSk7Ci0g
ICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKDApOwotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChp
bmZvLmxvY2FsSW5kZXgoKSk7Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHByb2ZpbGUpOwot
ICAgIHJldHVybiBkc3Q7CisgICAgc3dpdGNoICh2YXJpYWJsZS52YXJPZmZzZXQoKS5raW5kKCkp
IHsKKyAgICBjYXNlIFN0YWNrT2Zmc2V0OgorICAgICAgICBlbWl0TW92ZSh2YXJpYWJsZS5sb2Nh
bCgpLCB2YWx1ZSk7CisgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICAgICAgCisgICAgY2FzZSBD
YXB0dXJlZEFyZ3VtZW50c09mZnNldDoKKyAgICAgICAgQVNTRVJUKHNjb3BlID09IGFyZ3VtZW50
c1JlZ2lzdGVyKCkpOworICAgICAgICBlbWl0T3Bjb2RlKG9wX3B1dF90b19hcmd1bWVudHMpOwor
ICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoc2NvcGUpOworICAgICAgICBpbnN0cnVjdGlv
bnMoKS5hcHBlbmQodmFyaWFibGUudmFyT2Zmc2V0KCkuY2FwdHVyZWRBcmd1bWVudHNPZmZzZXQo
KS5vZmZzZXQoKSk7CisgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCh2YWx1ZS0+aW5kZXgo
KSk7CisgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICAgICAgCisgICAgY2FzZSBTY29wZU9mZnNl
dDoKKyAgICBjYXNlIEludmFsaWRWYXJLaW5kOiB7CisgICAgICAgIG1fY29kZUJsb2NrLT5hZGRQ
cm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uKGluc3RydWN0aW9ucygpLnNpemUoKSk7CisgICAgICAg
IAorICAgICAgICAvLyBwdXRfdG9fc2NvcGUgc2NvcGUsIGlkLCB2YWx1ZSwgUmVzb2x2ZU1vZGVB
bmRUeXBlLCBTdHJ1Y3R1cmUsIE9wZXJhbmQKKyAgICAgICAgZW1pdE9wY29kZShvcF9wdXRfdG9f
c2NvcGUpOworICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoc2NvcGUtPmluZGV4KCkpOwor
ICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYWRkQ29uc3RhbnQodmFyaWFibGUuaWRlbnQo
KSkpOworICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQodmFsdWUtPmluZGV4KCkpOworICAg
ICAgICBTY29wZU9mZnNldCBvZmZzZXQ7CisgICAgICAgIGlmICh2YXJpYWJsZS52YXJPZmZzZXQo
KS5pc1Njb3BlKCkpIHsKKyAgICAgICAgICAgIG9mZnNldCA9IHZhcmlhYmxlLnZhck9mZnNldCgp
LnNjb3BlT2Zmc2V0KCk7CisgICAgICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoUmVzb2x2
ZU1vZGVBbmRUeXBlKHJlc29sdmVNb2RlLCBMb2NhbENsb3N1cmVWYXIpLm9wZXJhbmQoKSk7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBBU1NFUlQocmVzb2x2ZVR5cGUoKSAhPSBMb2Nh
bENsb3N1cmVWYXIpOworICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKFJlc29sdmVN
b2RlQW5kVHlwZShyZXNvbHZlTW9kZSwgcmVzb2x2ZVR5cGUoKSkub3BlcmFuZCgpKTsKKyAgICAg
ICAgfQorICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoMCk7CisgICAgICAgIGluc3RydWN0
aW9ucygpLmFwcGVuZChvZmZzZXQuaXNWYWxpZCgpID8gb2Zmc2V0Lm9mZnNldCgpIDogMCk7Cisg
ICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICB9IH0KKyAgICAKKyAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogfQogCi1SZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFB1
dFRvU2NvcGUoUmVnaXN0ZXJJRCogc2NvcGUsIGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIs
IFJlZ2lzdGVySUQqIHZhbHVlLCBSZXNvbHZlTW9kZSByZXNvbHZlTW9kZSwgY29uc3QgUmVzb2x2
ZVNjb3BlSW5mbyYgaW5mbykKK1JlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjppbml0aWFs
aXplVmFyaWFibGUoY29uc3QgVmFyaWFibGUmIHZhcmlhYmxlLCBSZWdpc3RlcklEKiB2YWx1ZSkK
IHsKLSAgICBtX2NvZGVCbG9jay0+YWRkUHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbihpbnN0cnVj
dGlvbnMoKS5zaXplKCkpOwotCi0gICAgLy8gcHV0X3RvX3Njb3BlIHNjb3BlLCBpZCwgdmFsdWUs
IFJlc29sdmVNb2RlQW5kVHlwZSwgU3RydWN0dXJlLCBPcGVyYW5kCi0gICAgZW1pdE9wY29kZShv
cF9wdXRfdG9fc2NvcGUpOwotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChzY29wZS0+aW5kZXgo
KSk7Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGFkZENvbnN0YW50KGlkZW50aWZpZXIpKTsK
LSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQodmFsdWUtPmluZGV4KCkpOwotICAgIGlmIChpbmZv
LmlzTG9jYWwoKSkgewotICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoUmVzb2x2ZU1vZGVB
bmRUeXBlKHJlc29sdmVNb2RlLCBMb2NhbENsb3N1cmVWYXIpLm9wZXJhbmQoKSk7Ci0gICAgICAg
IGludCBvcGVyYW5kID0gcmVnaXN0ZXJGb3IoaW5mby5sb2NhbEluZGV4KCkpLmluZGV4KCk7Ci0g
ICAgICAgIGJvb2wgaXNXYXRjaGFibGVWYXJpYWJsZSA9IGhhc1dhdGNoYWJsZVZhcmlhYmxlKG9w
ZXJhbmQpOwotICAgICAgICBBU1NFUlQoIWlzV2F0Y2hhYmxlVmFyaWFibGUgfHwgd2F0Y2hhYmxl
VmFyaWFibGVJZGVudGlmaWVyKG9wZXJhbmQpID09IGlkZW50aWZpZXIpOwotICAgICAgICBpbnN0
cnVjdGlvbnMoKS5hcHBlbmQoaXNXYXRjaGFibGVWYXJpYWJsZSk7Ci0gICAgfSBlbHNlIHsKLSAg
ICAgICAgQVNTRVJUKHJlc29sdmVUeXBlKCkgIT0gTG9jYWxDbG9zdXJlVmFyKTsKLSAgICAgICAg
aW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKFJlc29sdmVNb2RlQW5kVHlwZShyZXNvbHZlTW9kZSwgcmVz
b2x2ZVR5cGUoKSkub3BlcmFuZCgpKTsKLSAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGZh
bHNlKTsKKyAgICBSZWdpc3RlcklEKiBzY29wZTsKKyAgICBzd2l0Y2ggKHZhcmlhYmxlLnZhck9m
ZnNldCgpLmtpbmQoKSkgeworICAgIGNhc2UgU3RhY2tPZmZzZXQ6CisgICAgICAgIHNjb3BlID0g
bnVsbHB0cjsKKyAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgIGNhc2UgQ2FwdHVyZWRBcmd1
bWVudEtpbmQ6CisgICAgICAgIHNjb3BlID0gYXJndW1lbnRzUmVnaXN0ZXIoKTsKKyAgICAgICAg
YnJlYWs7CisgICAgICAgIAorICAgIGNhc2UgU2NvcGVPZmZzZXQ6CisgICAgICAgIHNjb3BlID0g
c2NvcGVSZWdpc3RlcigpOworICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgZGVmYXVsdDoK
KyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgc2NvcGUgPSBu
dWxscHRyOworICAgICAgICBicmVhazsKICAgICB9Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5k
KGluZm8ubG9jYWxJbmRleCgpKTsKLSAgICByZXR1cm4gdmFsdWU7CisKKyAgICByZXR1cm4gZW1p
dFB1dFRvU2NvcGUoc2NvcGUsIHZhcmlhYmxlLCB2YWx1ZSwgVGhyb3dJZk5vdEZvdW5kKTsKIH0K
IAogUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRJbnN0YW5jZU9mKFJlZ2lzdGVy
SUQqIGRzdCwgUmVnaXN0ZXJJRCogdmFsdWUsIFJlZ2lzdGVySUQqIGJhc2VQcm90b3R5cGUpCi17
IAorewogICAgIGVtaXRPcGNvZGUob3BfaW5zdGFuY2VvZik7CiAgICAgaW5zdHJ1Y3Rpb25zKCku
YXBwZW5kKGRzdC0+aW5kZXgoKSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHZhbHVlLT5p
bmRleCgpKTsKQEAgLTE2MzgsMjQgKzE2ODUsMTUgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5l
cmF0b3I6OmVtaXROZXdBcgogCiBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdE5l
d0Z1bmN0aW9uKFJlZ2lzdGVySUQqIGRzdCwgRnVuY3Rpb25Cb2R5Tm9kZSogZnVuY3Rpb24pCiB7
Ci0gICAgcmV0dXJuIGVtaXROZXdGdW5jdGlvbkludGVybmFsKGRzdCwgbV9jb2RlQmxvY2stPmFk
ZEZ1bmN0aW9uRGVjbChtYWtlRnVuY3Rpb24oZnVuY3Rpb24pKSwgZmFsc2UpOwotfQotCi1SZWdp
c3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdExhenlOZXdGdW5jdGlvbihSZWdpc3RlcklE
KiBkc3QsIEZ1bmN0aW9uQm9keU5vZGUqIGZ1bmN0aW9uKQotewotICAgIEZ1bmN0aW9uT2Zmc2V0
TWFwOjpBZGRSZXN1bHQgcHRyID0gbV9mdW5jdGlvbk9mZnNldHMuYWRkKGZ1bmN0aW9uLCAwKTsK
LSAgICBpZiAocHRyLmlzTmV3RW50cnkpCi0gICAgICAgIHB0ci5pdGVyYXRvci0+dmFsdWUgPSBt
X2NvZGVCbG9jay0+YWRkRnVuY3Rpb25EZWNsKG1ha2VGdW5jdGlvbihmdW5jdGlvbikpOwotICAg
IHJldHVybiBlbWl0TmV3RnVuY3Rpb25JbnRlcm5hbChkc3QsIHB0ci5pdGVyYXRvci0+dmFsdWUs
IHRydWUpOworICAgIHJldHVybiBlbWl0TmV3RnVuY3Rpb25JbnRlcm5hbChkc3QsIG1fY29kZUJs
b2NrLT5hZGRGdW5jdGlvbkRlY2wobWFrZUZ1bmN0aW9uKGZ1bmN0aW9uKSkpOwogfQogCi1SZWdp
c3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdE5ld0Z1bmN0aW9uSW50ZXJuYWwoUmVnaXN0
ZXJJRCogZHN0LCB1bnNpZ25lZCBpbmRleCwgYm9vbCBkb051bGxDaGVjaykKK1JlZ2lzdGVySUQq
IEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TmV3RnVuY3Rpb25JbnRlcm5hbChSZWdpc3RlcklEKiBk
c3QsIHVuc2lnbmVkIGluZGV4KQogewogICAgIGVtaXRPcGNvZGUob3BfbmV3X2Z1bmMpOwogICAg
IGluc3RydWN0aW9ucygpLmFwcGVuZChkc3QtPmluZGV4KCkpOwogICAgIGluc3RydWN0aW9ucygp
LmFwcGVuZChzY29wZVJlZ2lzdGVyKCktPmluZGV4KCkpOwogICAgIGluc3RydWN0aW9ucygpLmFw
cGVuZChpbmRleCk7Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGRvTnVsbENoZWNrKTsKICAg
ICByZXR1cm4gZHN0OwogfQogCkBAIC0yNTA0LDkgKzI1NDIsOSBAQCB2b2lkIEJ5dGVjb2RlR2Vu
ZXJhdG9yOjpzZXRJc051bWVyaWNDb21wCiAKIGJvb2wgQnl0ZWNvZGVHZW5lcmF0b3I6OmlzQXJn
dW1lbnROdW1iZXIoY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIGludCBhcmd1bWVudE51bWJlcikK
IHsKLSAgICBSZWdpc3RlcklEKiByZWdpc3RlcklEID0gbG9jYWwoaWRlbnQpLmdldCgpOwotICAg
IGlmICghcmVnaXN0ZXJJRCB8fCByZWdpc3RlcklELT5pbmRleCgpID49IDApCi0gICAgICAgICBy
ZXR1cm4gMDsKKyAgICBSZWdpc3RlcklEKiByZWdpc3RlcklEID0gdmFyaWFibGUoaWRlbnQpLmxv
Y2FsKCk7CisgICAgaWYgKCFyZWdpc3RlcklEKQorICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IHJldHVybiByZWdpc3RlcklELT5pbmRleCgpID09IENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXQo
YXJndW1lbnROdW1iZXIpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
bXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCShyZXZpc2lvbiAxODA5MTAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9y
LmgJKHdvcmtpbmcgY29weSkKQEAgLTE4Myw1OCArMTgzLDU3IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICBJc0NhcHR1cmVkCiAgICAgfTsKIAotICAgIGNsYXNzIExvY2FsIHsKKyAgICBjbGFz
cyBWYXJpYWJsZSB7CiAgICAgcHVibGljOgotICAgICAgICBMb2NhbCgpCi0gICAgICAgICAgICA6
IG1fbG9jYWwoMCkKKyAgICAgICAgZW51bSBWYXJpYWJsZUtpbmQgeyBOb3JtYWxWYXJpYWJsZSwg
U3BlY2lhbFZhcmlhYmxlIH07CisKKyAgICAgICAgVmFyaWFibGUoKQorICAgICAgICAgICAgOiBt
X29mZnNldCgpCisgICAgICAgICAgICAsIG1fbG9jYWwobnVsbHB0cikKICAgICAgICAgICAgICwg
bV9hdHRyaWJ1dGVzKDApCi0gICAgICAgICAgICAsIG1fa2luZChOb3JtYWxMb2NhbCkKKyAgICAg
ICAgICAgICwgbV9raW5kKE5vcm1hbFZhcmlhYmxlKQorICAgICAgICB7CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIFZhcmlhYmxlKGNvbnN0IElkZW50aWZpZXImIGlkZW50KQorICAgICAg
ICAgICAgOiBtX2lkZW50KGlkZW50KQorICAgICAgICAgICAgLCBtX2xvY2FsKG51bGxwdHIpCisg
ICAgICAgICAgICAsIG1fYXR0cmlidXRlcygwKQorICAgICAgICAgICAgLCBtX2tpbmQoTm9ybWFs
VmFyaWFibGUpIC8vIFRoaXMgaXMgc29tZXdoYXQgbWVhbmluZ2xlc3MgaGVyZSBmb3IgdGhpcyBr
aW5kIG9mIFZhcmlhYmxlLgogICAgICAgICB7CiAgICAgICAgIH0KIAotICAgICAgICBlbnVtIExv
Y2FsS2luZCB7IE5vcm1hbExvY2FsLCBTcGVjaWFsTG9jYWwgfTsKLQotICAgICAgICBMb2NhbChS
ZWdpc3RlcklEKiBsb2NhbCwgdW5zaWduZWQgYXR0cmlidXRlcywgTG9jYWxLaW5kIGtpbmQpCi0g
ICAgICAgICAgICA6IG1fbG9jYWwobG9jYWwpCisgICAgICAgIFZhcmlhYmxlKGNvbnN0IElkZW50
aWZpZXImIGlkZW50LCBWYXJPZmZzZXQgb2Zmc2V0LCBSZWdpc3RlcklEKiBsb2NhbCwgdW5zaWdu
ZWQgYXR0cmlidXRlcywgTG9jYWxLaW5kIGtpbmQpCisgICAgICAgICAgICA6IG1faWRlbnQoaWRl
bnQpCisgICAgICAgICAgICAsIG1fb2Zmc2V0KG9mZnNldCkKKyAgICAgICAgICAgICwgbV9sb2Nh
bChsb2NhbCkKICAgICAgICAgICAgICwgbV9hdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpCiAgICAgICAg
ICAgICAsIG1fa2luZChraW5kKQogICAgICAgICB7CiAgICAgICAgIH0KIAotICAgICAgICBvcGVy
YXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gbV9sb2NhbDsgfQotCi0gICAgICAgIFJlZ2lzdGVy
SUQqIGdldCgpIGNvbnN0IHsgcmV0dXJuIG1fbG9jYWw7IH0KKyAgICAgICAgLy8gSWYgaXQncyB1
bnNldCwgdGhlbiBpdCBpcyBhIG5vbi1sb2NhbGx5LXNjb3BlZCB2YXJpYWJsZS4gSWYgaXQgaXMg
c2V0LCB0aGVuIGl0IGNvdWxkIGJlCisgICAgICAgIC8vIGEgc3RhY2sgdmFyaWFibGUsIGEgc2Nv
cGVkIHZhcmlhYmxlIGluIHRoZSBsb2NhbCBzY29wZSwgb3IgYSB2YXJpYWJsZSBjYXB0dXJlZCBp
biB0aGUKKyAgICAgICAgLy8gZGlyZWN0IGFyZ3VtZW50cyBvYmplY3QuCisgICAgICAgIGJvb2wg
aXNSZXNvbHZlZCgpIGNvbnN0IHsgcmV0dXJuICEhbV9vZmZzZXQ7IH0KKyAgICAgICAgCisgICAg
ICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50KCkgY29uc3QgeyByZXR1cm4gbV9pZGVudDsgfQor
ICAgICAgICAKKyAgICAgICAgVmFyT2Zmc2V0IG9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zm
c2V0OyB9CisgICAgICAgIGJvb2wgaXNMb2NhbCgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0Lmlz
U3RhY2soKTsgfQorICAgICAgICBSZWdpc3RlcklEKiBsb2NhbCgpIGNvbnN0IHsgcmV0dXJuIG1f
bG9jYWw7IH0KIAogICAgICAgICBib29sIGlzUmVhZE9ubHkoKSBjb25zdCB7IHJldHVybiBtX2F0
dHJpYnV0ZXMgJiBSZWFkT25seTsgfQotICAgICAgICBib29sIGlzU3BlY2lhbCgpIGNvbnN0IHsg
cmV0dXJuIG1fa2luZCAhPSBOb3JtYWxMb2NhbDsgfQorICAgICAgICBib29sIGlzU3BlY2lhbCgp
IGNvbnN0IHsgcmV0dXJuIG1fa2luZCAhPSBOb3JtYWxWYXJpYWJsZTsgfQogCiAgICAgcHJpdmF0
ZToKKyAgICAgICAgSWRlbnRpZmllciBtX2lkZW50OworICAgICAgICBWYXJPZmZldCBtX29mZnN0
OwogICAgICAgICBSZWdpc3RlcklEKiBtX2xvY2FsOwogICAgICAgICB1bnNpZ25lZCBtX2F0dHJp
YnV0ZXM7CiAgICAgICAgIExvY2FsS2luZCBtX2tpbmQ7CiAgICAgfTsKIAotICAgIHN0cnVjdCBS
ZXNvbHZlU2NvcGVJbmZvIHsKLSAgICAgICAgUmVzb2x2ZVNjb3BlSW5mbygpCi0gICAgICAgICAg
ICA6IG1fbG9jYWxJbmRleCgwKQotICAgICAgICAgICAgLCBtX3Jlc29sdmVTY29wZUtpbmQoTm9u
TG9jYWxTY29wZSkKLSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAgUmVzb2x2ZVNjb3Bl
SW5mbyhpbnQgaW5kZXgpCi0gICAgICAgICAgICA6IG1fbG9jYWxJbmRleChpbmRleCkKLSAgICAg
ICAgICAgICwgbV9yZXNvbHZlU2NvcGVLaW5kKExvY2FsU2NvcGUpCi0gICAgICAgIHsKLSAgICAg
ICAgfQotCi0gICAgICAgIGJvb2wgaXNMb2NhbCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzb2x2ZVNj
b3BlS2luZCA9PSBMb2NhbFNjb3BlOyB9Ci0gICAgICAgIGludCBsb2NhbEluZGV4KCkgY29uc3Qg
eyByZXR1cm4gbV9sb2NhbEluZGV4OyB9Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBpbnQgbV9s
b2NhbEluZGV4OwotICAgICAgICBlbnVtIHsgTG9jYWxTY29wZSwgTm9uTG9jYWxTY29wZSB9IG1f
cmVzb2x2ZVNjb3BlS2luZDsKLSAgICB9OwotCiAgICAgc3RydWN0IFRyeVJhbmdlIHsKICAgICAg
ICAgUmVmUHRyPExhYmVsPiBzdGFydDsKICAgICAgICAgUmVmUHRyPExhYmVsPiBlbmQ7CkBAIC0y
ODUsMTIgKzI4NCwxMiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgYm9vbCBpc0NhcHR1cmVk
KGludCBvcGVyYW5kKTsKICAgICAgICAgQ2FwdHVyZU1vZGUgY2FwdHVyZU1vZGUoaW50IG9wZXJh
bmQpIHsgcmV0dXJuIGlzQ2FwdHVyZWQob3BlcmFuZCkgPyBJc0NhcHR1cmVkIDogTm90Q2FwdHVy
ZWQ7IH0KICAgICAgICAgCi0gICAgICAgIExvY2FsIGxvY2FsKGNvbnN0IElkZW50aWZpZXImKTsK
LSAgICAgICAgTG9jYWwgY29uc3RMb2NhbChjb25zdCBJZGVudGlmaWVyJik7Ci0KKyAgICAgICAg
VmFyaWFibGUgdmFyaWFibGUoY29uc3QgSWRlbnRpZmllciYpOworICAgICAgICB2b2lkIGNyZWF0
ZVZhcmlhYmxlKGNvbnN0IElkZW50aWZpZXImLCBWYXJLaW5kLCBDb25zdGFudE1vZGUpOyAvLyBD
cmVhdGVzIHRoZSB2YXJpYWJsZSwgb3IgYXNzZXJ0cyB0aGF0IHRoZSBhbHJlYWR5LWNyZWF0ZWQg
dmFyaWFibGUgaXMgc3VmZmljaWVudGx5IGNvbXBhdGlibGUuCisgICAgICAgIAogICAgICAgICAv
LyBSZXR1cm5zIHRoZSByZWdpc3RlciBzdG9yaW5nICJ0aGlzIgogICAgICAgICBSZWdpc3RlcklE
KiB0aGlzUmVnaXN0ZXIoKSB7IHJldHVybiAmbV90aGlzUmVnaXN0ZXI7IH0KLSAgICAgICAgCisg
ICAgICAgIFJlZ2lzdGVySUQqIGFyZ3VtZW50c1JlZ2lzdGVyKCkgeyByZXR1cm4gbV9hcmd1bWVu
dHNSZWdpc3RlcjsgfQogICAgICAgICBSZWdpc3RlcklEKiBzY29wZVJlZ2lzdGVyKCkgeyByZXR1
cm4gbV9zY29wZVJlZ2lzdGVyOyB9CiAKICAgICAgICAgLy8gUmV0dXJucyB0aGUgbmV4dCBhdmFp
bGFibGUgdGVtcG9yYXJ5IHJlZ2lzdGVyLiBSZWdpc3RlcnMgcmV0dXJuZWQgYnkKQEAgLTQ1Niw4
ICs0NTUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdE5ld0Fy
cmF5KFJlZ2lzdGVySUQqIGRzdCwgRWxlbWVudE5vZGUqLCB1bnNpZ25lZCBsZW5ndGgpOyAvLyBz
dG9wcyBhdCBmaXJzdCBlbGlzaW9uCiAKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdE5ld0Z1bmN0
aW9uKFJlZ2lzdGVySUQqIGRzdCwgRnVuY3Rpb25Cb2R5Tm9kZSopOwotICAgICAgICBSZWdpc3Rl
cklEKiBlbWl0TGF6eU5ld0Z1bmN0aW9uKFJlZ2lzdGVySUQqIGRzdCwgRnVuY3Rpb25Cb2R5Tm9k
ZSogYm9keSk7Ci0gICAgICAgIFJlZ2lzdGVySUQqIGVtaXROZXdGdW5jdGlvbkludGVybmFsKFJl
Z2lzdGVySUQqIGRzdCwgdW5zaWduZWQgaW5kZXgsIGJvb2wgc2hvdWxkTnVsbENoZWNrKTsKKyAg
ICAgICAgUmVnaXN0ZXJJRCogZW1pdE5ld0Z1bmN0aW9uSW50ZXJuYWwoUmVnaXN0ZXJJRCogZHN0
LCB1bnNpZ25lZCBpbmRleCk7CiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXROZXdGdW5jdGlvbkV4
cHJlc3Npb24oUmVnaXN0ZXJJRCogZHN0LCBGdW5jRXhwck5vZGUqIGZ1bmMpOwogICAgICAgICBS
ZWdpc3RlcklEKiBlbWl0TmV3UmVnRXhwKFJlZ2lzdGVySUQqIGRzdCwgUmVnRXhwKik7CiAKQEAg
LTQ3NSw3ICs0NzMsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgUmVnaXN0ZXJJRCogZW1p
dEluaXRHbG9iYWxDb25zdChjb25zdCBJZGVudGlmaWVyJiwgUmVnaXN0ZXJJRCogdmFsdWUpOwog
CiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRHZXRCeUlkKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0
ZXJJRCogYmFzZSwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHkpOwotICAgICAgICBSZWdpc3Rl
cklEKiBlbWl0R2V0QXJndW1lbnRzTGVuZ3RoKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCog
YmFzZSk7CiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRQdXRCeUlkKFJlZ2lzdGVySUQqIGJhc2Us
IGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5LCBSZWdpc3RlcklEKiB2YWx1ZSk7CiAgICAgICAg
IFJlZ2lzdGVySUQqIGVtaXREaXJlY3RQdXRCeUlkKFJlZ2lzdGVySUQqIGJhc2UsIGNvbnN0IElk
ZW50aWZpZXImIHByb3BlcnR5LCBSZWdpc3RlcklEKiB2YWx1ZSk7CiAgICAgICAgIFJlZ2lzdGVy
SUQqIGVtaXREZWxldGVCeUlkKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFzZSwgY29u
c3QgSWRlbnRpZmllciYpOwpAQCAtNTAyLDE0ICs0OTksMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIHZvaWQgZW1pdFRvUHJpbWl0aXZlKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCog
c3JjKTsKIAogICAgICAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSgpOwotICAgICAgICBSZWdp
c3RlcklEKiBlbWl0UmVzb2x2ZUNvbnN0YW50TG9jYWwoUmVnaXN0ZXJJRCogZHN0LCBjb25zdCBJ
ZGVudGlmaWVyJiwgUmVzb2x2ZVNjb3BlSW5mbyYpOwotICAgICAgICAvLyBDYWxscyB0ZW1wRGVz
dGluYXRpb24oZHN0KSwgc28gaXQncyBzYWZlIHRvIHBhc3MgbnVsbHB0ci4gSXQncyBhbHNvIHJl
ZHVuZGFudCB0byBjYWxsCi0gICAgICAgIC8vIHRlbXBEZXN0aW5hdGlvbihkc3QpIG9uIHRoZSB0
aGluZyB5b3UgcGFzcyBhcyB0aGUgZGVzdGluYXRpb24uIFRoZSByZWFzb24gd2h5IHRoaXMKLSAg
ICAgICAgLy8gY2FsbHMgdGVtcERlc3RpbmF0aW9uKCkgZm9yIHlvdSBpcyB0aGF0IGl0IG1heSBu
b3QgbmVlZCBhIHNwYXJlIHJlZ2lzdGVyLiBJdCBtYXkgcmV0dXJuCi0gICAgICAgIC8vIHNjb3Bl
UmVnaXN0ZXIoKSBkaXJlY3RseS4gU28sIHlvdSBjYW5ub3QgcmVseSBvbiB0aGlzIHN0b3Jpbmcg
dG8gZHN0LgotICAgICAgICBSZWdpc3RlcklEKiBlbWl0UmVzb2x2ZVNjb3BlKFJlZ2lzdGVySUQq
IGRzdCwgY29uc3QgSWRlbnRpZmllciYsIFJlc29sdmVTY29wZUluZm8mKTsKLSAgICAgICAgUmVn
aXN0ZXJJRCogZW1pdEdldEZyb21TY29wZShSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHNj
b3BlLCBjb25zdCBJZGVudGlmaWVyJiwgUmVzb2x2ZU1vZGUsIGNvbnN0IFJlc29sdmVTY29wZUlu
Zm8mKTsKLSAgICAgICAgUmVnaXN0ZXJJRCogZW1pdFB1dFRvU2NvcGUoUmVnaXN0ZXJJRCogc2Nv
cGUsIGNvbnN0IElkZW50aWZpZXImLCBSZWdpc3RlcklEKiB2YWx1ZSwgUmVzb2x2ZU1vZGUsIGNv
bnN0IFJlc29sdmVTY29wZUluZm8mKTsKKyAgICAgICAgUmVnaXN0ZXJJRCogZW1pdFJlc29sdmVD
b25zdGFudExvY2FsKFJlZ2lzdGVySUQqIGRzdCwgY29uc3QgVmFyaWFibGUmKTsKKyAgICAgICAg
UmVnaXN0ZXJJRCogZW1pdFJlc29sdmVTY29wZShSZWdpc3RlcklEKiBkc3QsIGNvbnN0IFZhcmlh
YmxlJik7CisgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRHZXRGcm9tU2NvcGUoUmVnaXN0ZXJJRCog
ZHN0LCBSZWdpc3RlcklEKiBzY29wZSwgY29uc3QgVmFyaWFibGUmLCBSZXNvbHZlTW9kZSk7Cisg
ICAgICAgIFJlZ2lzdGVySUQqIGVtaXRQdXRUb1Njb3BlKFJlZ2lzdGVySUQqIHNjb3BlLCBjb25z
dCBWYXJpYWJsZSYsIFJlZ2lzdGVySUQqIHZhbHVlLCBSZXNvbHZlTW9kZSk7CisgICAgICAgIFJl
Z2lzdGVySUQqIGluaXRpYWxpemVWYXJpYWJsZShjb25zdCBWYXJpYWJsZSYsIFJlZ2lzdGVySUQq
IHZhbHVlKTsKIAogICAgICAgICBQYXNzUmVmUHRyPExhYmVsPiBlbWl0TGFiZWwoTGFiZWwqKTsK
ICAgICAgICAgdm9pZCBlbWl0TG9vcEhpbnQoKTsKQEAgLTYxNSwxMSArNjA5LDcgQEAgbmFtZXNw
YWNlIEpTQyB7CiAKICAgICAgICAgUmVnaXN0ZXJJRCogbmV3UmVnaXN0ZXIoKTsKIAotICAgICAg
ICAvLyBBZGRzIGEgdmFyIHNsb3QgYW5kIG1hcHMgaXQgdG8gdGhlIG5hbWUgaWRlbnQgaW4gc3lt
Ym9sVGFibGUoKS4KLSAgICAgICAgZW51bSBXYXRjaE1vZGUgeyBJc1dhdGNoYWJsZSwgTm90V2F0
Y2hhYmxlIH07Ci0gICAgICAgIFJlZ2lzdGVySUQqIGFkZFZhcihjb25zdCBJZGVudGlmaWVyJiwg
Q29uc3RhbnRNb2RlLCBXYXRjaE1vZGUpOwotCi0gICAgICAgIC8vIEFkZHMgYW4gYW5vbnltb3Vz
IHZhciBzbG90LiBUbyBnaXZlIHRoaXMgc2xvdCBhIG5hbWUsIGFkZCBpdCB0byBzeW1ib2xUYWJs
ZSgpLgorICAgICAgICAvLyBBZGRzIGFuIGFub255bW91cyBsb2NhbCB2YXIgc2xvdC4gVG8gZ2l2
ZSB0aGlzIHNsb3QgYSBuYW1lLCBhZGQgaXQgdG8gc3ltYm9sVGFibGUoKS4KICAgICAgICAgUmVn
aXN0ZXJJRCogYWRkVmFyKCkKICAgICAgICAgewogICAgICAgICAgICAgKyttX2NvZGVCbG9jay0+
bV9udW1WYXJzOwpAQCAtNjI5LDE0ICs2MTksMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
ICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICB9CiAKLSAgICAgICAgLy8gUmV0dXJucyB0aGUg
aW5kZXggb2YgdGhlIGFkZGVkIHZhci4KLSAgICAgICAgdm9pZCBhZGRQYXJhbWV0ZXIoY29uc3Qg
SWRlbnRpZmllciYsIGludCBwYXJhbWV0ZXJJbmRleCk7Ci0gICAgICAgIFJlZ2lzdGVySUQqIHJl
c29sdmVDYWxsZWUoRnVuY3Rpb25Ob2RlKik7Ci0gICAgICAgIHZvaWQgYWRkQ2FsbGVlKEZ1bmN0
aW9uTm9kZSosIFJlZ2lzdGVySUQqKTsKLQotICAgICAgICB2b2lkIHByZXNlcnZlTGFzdFZhcigp
OwotCi0gICAgICAgIFJlZ2lzdGVySUQmIHJlZ2lzdGVyRm9yKGludCBpbmRleCkKKyAgICAgICAg
Ly8gSW5pdGlhbGl6ZXMgdGhlIHN0YWNrIGZvcm0gdGhlIHBhcmFtZXRlcjsgZG9lcyBub3RoaW5n
IGZvciB0aGUgc3ltYm9sIHRhYmxlLgorICAgICAgICBSZWdpc3RlcklEKiBpbml0aWFsaXplTmV4
dFBhcmFtZXRlcigpOworICAgICAgICBTdHJpbmdJbXBsKiB2aXNpYmxlTmFtZUZvclBhcmFtZXRl
cihEZWNvbnN0cnVjdGlvblBhdHRlcm5Ob2RlKiBwYXR0ZXJuKTsKKyAgICAgICAgCisgICAgICAg
IFJlZ2lzdGVySUQmIHJlZ2lzdGVyRm9yKFZpcnR1YWxSZWdpc3RlcikKICAgICAgICAgewogICAg
ICAgICAgICAgaWYgKG9wZXJhbmRJc0xvY2FsKGluZGV4KSkKICAgICAgICAgICAgICAgICByZXR1
cm4gbV9jYWxsZWVSZWdpc3RlcnNbVmlydHVhbFJlZ2lzdGVyKGluZGV4KS50b0xvY2FsKCldOwpA
QCAtNjYxLDExICs2NDgsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiBV
bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y3JlYXRlKG1fdm0sIG1fc2NvcGVOb2RlLT5zb3Vy
Y2UoKSwgYm9keSwgaXNCdWlsdGluRnVuY3Rpb24oKSA/IFVubGlua2VkQnVpbHRpbkZ1bmN0aW9u
IDogVW5saW5rZWROb3JtYWxGdW5jdGlvbik7CiAgICAgICAgIH0KIAotICAgICAgICBSZWdpc3Rl
cklEKiBlbWl0SW5pdExhenlSZWdpc3RlcihSZWdpc3RlcklEKik7Ci0gICAgICAgIAogICAgICAg
ICBSZWdpc3RlcklEKiBlbWl0Q29uc3RydWN0VmFyYXJncyhSZWdpc3RlcklEKiBkc3QsIFJlZ2lz
dGVySUQqIGZ1bmMsIFJlZ2lzdGVySUQqIHRoaXNSZWdpc3RlciwgUmVnaXN0ZXJJRCogYXJndW1l
bnRzLCBSZWdpc3RlcklEKiBmaXJzdEZyZWVSZWdpc3RlciwgaW50MzJfdCBmaXJzdFZhckFyZ09m
ZnNldCwgUmVnaXN0ZXJJRCogcHJvZmlsZUhvb2tSZWdpc3RlciwgY29uc3QgSlNUZXh0UG9zaXRp
b24mIGRpdm90LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RTdGFydCwgY29uc3QgSlNUZXh0
UG9zaXRpb24mIGRpdm90RW5kKTsKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdENhbGxWYXJhcmdz
KE9wY29kZUlELCBSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGZ1bmMsIFJlZ2lzdGVySUQq
IHRoaXNSZWdpc3RlciwgUmVnaXN0ZXJJRCogYXJndW1lbnRzLCBSZWdpc3RlcklEKiBmaXJzdEZy
ZWVSZWdpc3RlciwgaW50MzJfdCBmaXJzdFZhckFyZ09mZnNldCwgUmVnaXN0ZXJJRCogcHJvZmls
ZUhvb2tSZWdpc3RlciwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90LCBjb25zdCBKU1RleHRQ
b3NpdGlvbiYgZGl2b3RTdGFydCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90RW5kKTsKLSAg
ICAgICAgUmVnaXN0ZXJJRCogaW5pdGlhbGl6ZUNhcHR1cmVkVmFyaWFibGUoUmVnaXN0ZXJJRCog
ZHN0LCBjb25zdCBJZGVudGlmaWVyJiwgUmVnaXN0ZXJJRCopOwogCiAgICAgcHVibGljOgogICAg
ICAgICBKU1N0cmluZyogYWRkU3RyaW5nQ29uc3RhbnQoY29uc3QgSWRlbnRpZmllciYpOwpAQCAt
Njk5LDQ0ICs2ODMsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiB0cnVl
OwogICAgICAgICB9CiAKLSAgICAgICAgYm9vbCBzaG91bGRUZWFyT2ZmQXJndW1lbnRzRWFnZXJs
eSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBtX2NvZGVUeXBlID09IEZ1bmN0aW9u
Q29kZSAmJiBpc1N0cmljdE1vZGUoKSAmJiBtX3Njb3BlTm9kZS0+bW9kaWZpZXNQYXJhbWV0ZXIo
KTsKLSAgICAgICAgfQotCi0gICAgICAgIGJvb2wgc2hvdWxkQ3JlYXRlQXJndW1lbnRzRWFnZXJs
eSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChtX2NvZGVUeXBlICE9IEZ1bmN0aW9uQ29k
ZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICByZXR1cm4gbV9s
ZXhpY2FsRW52aXJvbm1lbnRSZWdpc3RlciAmJiBtX2NvZGVCbG9jay0+dXNlc0FyZ3VtZW50cygp
OwotICAgICAgICB9Ci0KICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdFRocm93RXhwcmVzc2lvblRv
b0RlZXBFeGNlcHRpb24oKTsKIAotICAgICAgICB2b2lkIGNyZWF0ZUFyZ3VtZW50c0lmTmVjZXNz
YXJ5KCk7Ci0gICAgICAgIFJlZ2lzdGVySUQqIGNyZWF0ZUxhenlSZWdpc3RlcklmTmVjZXNzYXJ5
KFJlZ2lzdGVySUQqKTsKLSAgICAgICAgCi0gICAgICAgIGJvb2wgaGFzV2F0Y2hhYmxlVmFyaWFi
bGUoaW50IG9wZXJhbmQpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIFZpcnR1YWxSZWdp
c3RlciByZWcob3BlcmFuZCk7Ci0gICAgICAgICAgICBpZiAoIXJlZy5pc0xvY2FsKCkpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgaWYgKHN0YXRpY19jYXN0PHNp
emVfdD4ocmVnLnRvTG9jYWwoKSkgPj0gbV93YXRjaGFibGVWYXJpYWJsZXMuc2l6ZSgpKQotICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGNvbnN0IElkZW50aWZpZXIm
IGlkZW50ID0gbV93YXRjaGFibGVWYXJpYWJsZXNbcmVnLnRvTG9jYWwoKV07Ci0gICAgICAgICAg
ICBpZiAoaWRlbnQuaXNOdWxsKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICAgICAgQVNTRVJUKGhhc0NvbnN0YW50KGlkZW50KSk7IC8vIFNob3VsZCBoYXZlIGFscmVh
ZHkgYmVlbiBhZGRlZC4KLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAg
ICAgIAotICAgICAgICBjb25zdCBJZGVudGlmaWVyJiB3YXRjaGFibGVWYXJpYWJsZUlkZW50aWZp
ZXIoaW50IG9wZXJhbmQpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChoYXNX
YXRjaGFibGVWYXJpYWJsZShvcGVyYW5kKSk7Ci0gICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIg
cmVnKG9wZXJhbmQpOwotICAgICAgICAgICAgcmV0dXJuIG1fd2F0Y2hhYmxlVmFyaWFibGVzW3Jl
Zy50b0xvY2FsKCldOwotICAgICAgICB9Ci0KICAgICBwcml2YXRlOgogICAgICAgICBWZWN0b3I8
VW5saW5rZWRJbnN0cnVjdGlvbiwgMCwgVW5zYWZlVmVjdG9yT3ZlcmZsb3c+IG1faW5zdHJ1Y3Rp
b25zOwogCkBAIC03NTUsMTQgKzcwMywxNCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgUmVn
aXN0ZXJJRCBtX3RoaXNSZWdpc3RlcjsKICAgICAgICAgUmVnaXN0ZXJJRCBtX2NhbGxlZVJlZ2lz
dGVyOwogICAgICAgICBSZWdpc3RlcklEKiBtX3Njb3BlUmVnaXN0ZXIgeyBudWxscHRyIH07Cisg
ICAgICAgIFJlZ2lzdGVySUQqIG1fYXJndW1lbnRzUmVnaXN0ZXIgeyBudWxscHRyIH07CiAgICAg
ICAgIFJlZ2lzdGVySUQqIG1fbGV4aWNhbEVudmlyb25tZW50UmVnaXN0ZXIgeyBudWxscHRyIH07
CiAgICAgICAgIFJlZ2lzdGVySUQqIG1fZW1wdHlWYWx1ZVJlZ2lzdGVyIHsgbnVsbHB0ciB9Owog
ICAgICAgICBSZWdpc3RlcklEKiBtX2dsb2JhbE9iamVjdFJlZ2lzdGVyIHsgbnVsbHB0ciB9Owot
ICAgICAgICBSZWdpc3RlcklEKiBtX2xvY2FsQXJndW1lbnRzUmVnaXN0ZXIgeyBudWxscHRyIH07
CiAKLSAgICAgICAgVmVjdG9yPElkZW50aWZpZXIsIDE2PiBtX3dhdGNoYWJsZVZhcmlhYmxlczsK
ICAgICAgICAgU2VnbWVudGVkVmVjdG9yPFJlZ2lzdGVySUQsIDMyPiBtX2NvbnN0YW50UG9vbFJl
Z2lzdGVyczsKICAgICAgICAgU2VnbWVudGVkVmVjdG9yPFJlZ2lzdGVySUQsIDMyPiBtX2NhbGxl
ZVJlZ2lzdGVyczsKKyAgICAgICAgdW5zaWduZWQgbV9udW1DYXB0dXJlZFZhcmlhYmxlczsKICAg
ICAgICAgU2VnbWVudGVkVmVjdG9yPFJlZ2lzdGVySUQsIDMyPiBtX3BhcmFtZXRlcnM7CiAgICAg
ICAgIFNlZ21lbnRlZFZlY3RvcjxMYWJlbCwgMzI+IG1fbGFiZWxzOwogICAgICAgICBMYWJlbFNj
b3BlU3RvcmUgbV9sYWJlbFNjb3BlczsKQEAgLTc3NSwxNSArNzIzLDE0IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEZvckluQ29udGV4dD4+IG1fZm9y
SW5Db250ZXh0U3RhY2s7CiAgICAgICAgIFZlY3RvcjxUcnlDb250ZXh0PiBtX3RyeUNvbnRleHRT
dGFjazsKICAgICAgICAgVmVjdG9yPHN0ZDo6cGFpcjxSZWZQdHI8UmVnaXN0ZXJJRD4sIGNvbnN0
IERlY29uc3RydWN0aW9uUGF0dGVybk5vZGUqPj4gbV9kZWNvbnN0cnVjdGVkUGFyYW1ldGVyczsK
KyAgICAgICAgVmVjdG9yPEZ1bmN0aW9uQm9keU5vZGUqPiBtX2Z1bmN0aW9uc1RvSW5pdGlhbGl6
ZTsKKyAgICAgICAgYm9vbCBtX25lZWRUb0luaXRpYWxpemVBcmd1bWVudHMgeyBmYWxzZSB9Owog
ICAgICAgICAKICAgICAgICAgVmVjdG9yPFRyeVJhbmdlPiBtX3RyeVJhbmdlczsKICAgICAgICAg
U2VnbWVudGVkVmVjdG9yPFRyeURhdGEsIDg+IG1fdHJ5RGF0YTsKIAogICAgICAgICBpbnQgbV9u
ZXh0Q29uc3RhbnRPZmZzZXQgeyAwIH07CiAKLSAgICAgICAgaW50IG1fZmlyc3RMYXp5RnVuY3Rp
b24geyAwIH07Ci0gICAgICAgIGludCBtX2xhc3RMYXp5RnVuY3Rpb24geyAwIH07Ci0gICAgICAg
IEhhc2hNYXA8dW5zaWduZWQgaW50LCBGdW5jdGlvbkJvZHlOb2RlKiwgV1RGOjpJbnRIYXNoPHVu
c2lnbmVkIGludD4sIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8dW5zaWduZWQg
aW50Pj4gbV9sYXp5RnVuY3Rpb25zOwogICAgICAgICB0eXBlZGVmIEhhc2hNYXA8RnVuY3Rpb25C
b2R5Tm9kZSosIHVuc2lnbmVkPiBGdW5jdGlvbk9mZnNldE1hcDsKICAgICAgICAgRnVuY3Rpb25P
ZmZzZXRNYXAgbV9mdW5jdGlvbk9mZnNldHM7CiAgICAgICAgIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAkocmV2aXNp
b24gMTgwOTEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0Nv
ZGVnZW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjAsMjkgKzE2MCwyOSBAQCBSZWdpc3RlcklE
KiBUaGlzTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjCiAKIGJvb2wgUmVzb2x2ZU5vZGU6OmlzUHVy
ZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yKSBjb25zdAogewotICAgIHJldHVybiBnZW5l
cmF0b3IubG9jYWwobV9pZGVudCkuZ2V0KCk7CisgICAgcmV0dXJuIGdlbmVyYXRvci52YXJpYWJs
ZShtX2lkZW50KS5vZmZzZXQoKS5pc1N0YWNrKCk7CiB9CiAKIFJlZ2lzdGVySUQqIFJlc29sdmVO
b2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJ
RCogZHN0KQogewotICAgIGlmIChMb2NhbCBsb2NhbCA9IGdlbmVyYXRvci5sb2NhbChtX2lkZW50
KSkgeworICAgIFZhcmlhYmxlIHZhciA9IGdlbmVyYXRvci52YXJpYWJsZShtX2lkZW50KTsKKyAg
ICBpZiAoUmVnaXN0ZXJJRCogbG9jYWwgPSB2YXIubG9jYWwoKSkgewogICAgICAgICBpZiAoZHN0
ID09IGdlbmVyYXRvci5pZ25vcmVkUmVzdWx0KCkpCi0gICAgICAgICAgICByZXR1cm4gMDsKKyAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICBpZiAoZ2VuZXJhdG9yLnZtKCktPnR5
cGVQcm9maWxlcigpKSB7Ci0gICAgICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlKGxv
Y2FsLmdldCgpLCBQcm9maWxlVHlwZUJ5dGVjb2RlSGFzR2xvYmFsSUQsIG51bGxwdHIpOworICAg
ICAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlVHlwZShsb2NhbCwgUHJvZmlsZVR5cGVCeXRl
Y29kZUhhc0dsb2JhbElELCBudWxscHRyKTsKICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0VHlw
ZVByb2ZpbGVyRXhwcmVzc2lvbkluZm8obV9wb3NpdGlvbiwgSlNUZXh0UG9zaXRpb24oLTEsIG1f
cG9zaXRpb24ub2Zmc2V0ICsgbV9pZGVudC5sZW5ndGgoKSwgLTEpKTsKICAgICAgICAgfQotICAg
ICAgICByZXR1cm4gZ2VuZXJhdG9yLm1vdmVUb0Rlc3RpbmF0aW9uSWZOZWVkZWQoZHN0LCBsb2Nh
bC5nZXQoKSk7CisgICAgICAgIHJldHVybiBnZW5lcmF0b3IubW92ZVRvRGVzdGluYXRpb25JZk5l
ZWRlZChkc3QsIGxvY2FsKTsKICAgICB9CiAgICAgCiAgICAgSlNUZXh0UG9zaXRpb24gZGl2b3Qg
PSBtX3N0YXJ0ICsgbV9pZGVudC5sZW5ndGgoKTsKICAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Np
b25JbmZvKGRpdm90LCBtX3N0YXJ0LCBkaXZvdCk7Ci0gICAgUmVzb2x2ZVNjb3BlSW5mbyByZXNv
bHZlU2NvcGVJbmZvOwotICAgIFJlZlB0cjxSZWdpc3RlcklEPiBzY29wZSA9IGdlbmVyYXRvci5l
bWl0UmVzb2x2ZVNjb3BlKGRzdCwgbV9pZGVudCwgcmVzb2x2ZVNjb3BlSW5mbyk7CisgICAgUmVm
UHRyPFJlZ2lzdGVySUQ+IHNjb3BlID0gZ2VuZXJhdG9yLmVtaXRSZXNvbHZlU2NvcGUoZHN0LCB2
YXIpOwogICAgIFJlZ2lzdGVySUQqIGZpbmFsRGVzdCA9IGdlbmVyYXRvci5maW5hbERlc3RpbmF0
aW9uKGRzdCk7Ci0gICAgUmVnaXN0ZXJJRCogcmVzdWx0ID0gZ2VuZXJhdG9yLmVtaXRHZXRGcm9t
U2NvcGUoZmluYWxEZXN0LCBzY29wZS5nZXQoKSwgbV9pZGVudCwgVGhyb3dJZk5vdEZvdW5kLCBy
ZXNvbHZlU2NvcGVJbmZvKTsKKyAgICBSZWdpc3RlcklEKiByZXN1bHQgPSBnZW5lcmF0b3IuZW1p
dEdldEZyb21TY29wZShmaW5hbERlc3QsIHNjb3BlLmdldCgpLCB2YXIsIFRocm93SWZOb3RGb3Vu
ZCk7CiAgICAgaWYgKGdlbmVyYXRvci52bSgpLT50eXBlUHJvZmlsZXIoKSkgewotICAgICAgICBn
ZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlKGZpbmFsRGVzdCwgcmVzb2x2ZVNjb3BlSW5mby5pc0xv
Y2FsKCkgPyBQcm9maWxlVHlwZUJ5dGVjb2RlR2V0RnJvbUxvY2FsU2NvcGUgOiBQcm9maWxlVHlw
ZUJ5dGVjb2RlR2V0RnJvbVNjb3BlLCAmbV9pZGVudCk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0
UHJvZmlsZVR5cGUoZmluYWxEZXN0LCB2YXIuaXNSZXNvbHZlZCgpID8gUHJvZmlsZVR5cGVCeXRl
Y29kZUdldEZyb21Mb2NhbFNjb3BlIDogUHJvZmlsZVR5cGVCeXRlY29kZUdldEZyb21TY29wZSwg
Jm1faWRlbnQpOwogICAgICAgICBnZW5lcmF0b3IuZW1pdFR5cGVQcm9maWxlckV4cHJlc3Npb25J
bmZvKG1fcG9zaXRpb24sIEpTVGV4dFBvc2l0aW9uKC0xLCBtX3Bvc2l0aW9uLm9mZnNldCArIG1f
aWRlbnQubGVuZ3RoKCksIC0xKSk7CiAgICAgfQogICAgIHJldHVybiByZXN1bHQ7CkBAIC00OTUs
OCArNDk1LDkgQEAgQ2FsbEFyZ3VtZW50czo6Q2FsbEFyZ3VtZW50cyhCeXRlY29kZUdlbgogCiBS
ZWdpc3RlcklEKiBFdmFsRnVuY3Rpb25DYWxsTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2Vu
ZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsKLSAgICBpZiAoTG9jYWwgbG9j
YWwgPSBnZW5lcmF0b3IubG9jYWwoZ2VuZXJhdG9yLnByb3BlcnR5TmFtZXMoKS5ldmFsKSkgewot
ICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZnVuYyA9IGdlbmVyYXRvci5lbWl0TW92ZShnZW5l
cmF0b3IudGVtcERlc3RpbmF0aW9uKGRzdCksIGxvY2FsLmdldCgpKTsKKyAgICBWYXJpYWJsZSB2
YXIgPSBnZW5lcmF0b3IudmFyaWFibGUoZ2VuZXJhdG9yLnByb3BlcnR5TmFtZXMoKS5ldmFsKTsK
KyAgICBpZiAoUmVnaXN0ZXJJRCogbG9jYWwgPSB2YXIubG9jYWwoKSkgeworICAgICAgICBSZWZQ
dHI8UmVnaXN0ZXJJRD4gZnVuYyA9IGdlbmVyYXRvci5lbWl0TW92ZShnZW5lcmF0b3IudGVtcERl
c3RpbmF0aW9uKGRzdCksIGxvY2FsKTsKICAgICAgICAgQ2FsbEFyZ3VtZW50cyBjYWxsQXJndW1l
bnRzKGdlbmVyYXRvciwgbV9hcmdzKTsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRMb2FkKGNhbGxB
cmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIGpzVW5kZWZpbmVkKCkpOwogICAgICAgICByZXR1cm4g
Z2VuZXJhdG9yLmVtaXRDYWxsRXZhbChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIGZ1
bmMuZ2V0KCkpLCBmdW5jLmdldCgpLCBjYWxsQXJndW1lbnRzLCBkaXZvdCgpLCBkaXZvdFN0YXJ0
KCksIGRpdm90RW5kKCkpOwpAQCAtNTA2LDExICs1MDcsMTAgQEAgUmVnaXN0ZXJJRCogRXZhbEZ1
bmN0aW9uQ2FsbE5vZGU6OmVtaXRCeQogICAgIENhbGxBcmd1bWVudHMgY2FsbEFyZ3VtZW50cyhn
ZW5lcmF0b3IsIG1fYXJncyk7CiAgICAgSlNUZXh0UG9zaXRpb24gbmV3RGl2b3QgPSBkaXZvdFN0
YXJ0KCkgKyA0OwogICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8obmV3RGl2b3QsIGRp
dm90U3RhcnQoKSwgbmV3RGl2b3QpOwotICAgIFJlc29sdmVTY29wZUluZm8gcmVzb2x2ZVNjb3Bl
SW5mbzsKICAgICBnZW5lcmF0b3IubW92ZVRvRGVzdGluYXRpb25JZk5lZWRlZCgKICAgICAgICAg
Y2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRSZXNv
bHZlU2NvcGUoY2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwgZ2VuZXJhdG9yLnByb3BlcnR5
TmFtZXMoKS5ldmFsLCByZXNvbHZlU2NvcGVJbmZvKSk7Ci0gICAgZ2VuZXJhdG9yLmVtaXRHZXRG
cm9tU2NvcGUoZnVuYy5nZXQoKSwgY2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwgZ2VuZXJh
dG9yLnByb3BlcnR5TmFtZXMoKS5ldmFsLCBUaHJvd0lmTm90Rm91bmQsIHJlc29sdmVTY29wZUlu
Zm8pOworICAgICAgICBnZW5lcmF0b3IuZW1pdFJlc29sdmVTY29wZShjYWxsQXJndW1lbnRzLnRo
aXNSZWdpc3RlcigpLCB2YXIpKTsKKyAgICBnZW5lcmF0b3IuZW1pdEdldEZyb21TY29wZShmdW5j
LmdldCgpLCBjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCB2YXIsIFRocm93SWZOb3RGb3Vu
ZCk7CiAgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0Q2FsbEV2YWwoZ2VuZXJhdG9yLmZpbmFsRGVz
dGluYXRpb24oZHN0LCBmdW5jLmdldCgpKSwgZnVuYy5nZXQoKSwgY2FsbEFyZ3VtZW50cywgZGl2
b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKIH0KIApAQCAtNTM2LDggKzUzNiw5IEBA
IFJlZ2lzdGVySUQqIEZ1bmN0aW9uQ2FsbFJlc29sdmVOb2RlOjplbWkKIHsKICAgICBFeHBlY3Rl
ZEZ1bmN0aW9uIGV4cGVjdGVkRnVuY3Rpb24gPSBnZW5lcmF0b3IuZXhwZWN0ZWRGdW5jdGlvbkZv
cklkZW50aWZpZXIobV9pZGVudCk7CiAKLSAgICBpZiAoTG9jYWwgbG9jYWwgPSBnZW5lcmF0b3Iu
bG9jYWwobV9pZGVudCkpIHsKLSAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGZ1bmMgPSBnZW5l
cmF0b3IuZW1pdE1vdmUoZ2VuZXJhdG9yLnRlbXBEZXN0aW5hdGlvbihkc3QpLCBsb2NhbC5nZXQo
KSk7CisgICAgVmFyaWFibGUgdmFyID0gZ2VuZXJhdG9yLnZhcmlhYmxlKG1faWRlbnQpOworICAg
IGlmIChSZWdpc3RlcklEKiBsb2NhbCA9IHZhci5sb2NhbCgpKSB7CisgICAgICAgIFJlZlB0cjxS
ZWdpc3RlcklEPiBmdW5jID0gZ2VuZXJhdG9yLmVtaXRNb3ZlKGdlbmVyYXRvci50ZW1wRGVzdGlu
YXRpb24oZHN0KSwgbG9jYWwpOwogICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcmV0dXJuVmFs
dWUgPSBnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIGZ1bmMuZ2V0KCkpOwogICAgICAg
ICBDYWxsQXJndW1lbnRzIGNhbGxBcmd1bWVudHMoZ2VuZXJhdG9yLCBtX2FyZ3MpOwogICAgICAg
ICBnZW5lcmF0b3IuZW1pdExvYWQoY2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwganNVbmRl
ZmluZWQoKSk7CkBAIC01NTcsMTEgKzU1OCwxMCBAQCBSZWdpc3RlcklEKiBGdW5jdGlvbkNhbGxS
ZXNvbHZlTm9kZTo6ZW1pCiAKICAgICBKU1RleHRQb3NpdGlvbiBuZXdEaXZvdCA9IGRpdm90U3Rh
cnQoKSArIG1faWRlbnQubGVuZ3RoKCk7CiAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5m
byhuZXdEaXZvdCwgZGl2b3RTdGFydCgpLCBuZXdEaXZvdCk7Ci0gICAgUmVzb2x2ZVNjb3BlSW5m
byByZXNvbHZlU2NvcGVJbmZvOwogICAgIGdlbmVyYXRvci5tb3ZlVG9EZXN0aW5hdGlvbklmTmVl
ZGVkKAogICAgICAgICBjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLAotICAgICAgICBnZW5l
cmF0b3IuZW1pdFJlc29sdmVTY29wZShjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCBtX2lk
ZW50LCByZXNvbHZlU2NvcGVJbmZvKSk7Ci0gICAgZ2VuZXJhdG9yLmVtaXRHZXRGcm9tU2NvcGUo
ZnVuYy5nZXQoKSwgY2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwgbV9pZGVudCwgVGhyb3dJ
Zk5vdEZvdW5kLCByZXNvbHZlU2NvcGVJbmZvKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRSZXNv
bHZlU2NvcGUoY2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwgdmFyKSk7CisgICAgZ2VuZXJh
dG9yLmVtaXRHZXRGcm9tU2NvcGUoZnVuYy5nZXQoKSwgY2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0
ZXIoKSwgdmFyLCBUaHJvd0lmTm90Rm91bmQpOwogICAgIFJlZ2lzdGVySUQqIHJldCA9IGdlbmVy
YXRvci5lbWl0Q2FsbChyZXR1cm5WYWx1ZS5nZXQoKSwgZnVuYy5nZXQoKSwgZXhwZWN0ZWRGdW5j
dGlvbiwgY2FsbEFyZ3VtZW50cywgZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsK
ICAgICBpZiAoZ2VuZXJhdG9yLnZtKCktPnR5cGVQcm9maWxlcigpKSB7CiAgICAgICAgIGdlbmVy
YXRvci5lbWl0UHJvZmlsZVR5cGUocmV0dXJuVmFsdWUuZ2V0KCksIFByb2ZpbGVUeXBlQnl0ZWNv
ZGVEb2VzTm90SGF2ZUdsb2JhbElELCBudWxscHRyKTsKQEAgLTgyMCwxMSArODIwLDEyIEBAIFJl
Z2lzdGVySUQqIFBvc3RmaXhOb2RlOjplbWl0UmVzb2x2ZShCeXQKICAgICBSZXNvbHZlTm9kZSog
cmVzb2x2ZSA9IHN0YXRpY19jYXN0PFJlc29sdmVOb2RlKj4obV9leHByKTsKICAgICBjb25zdCBJ
ZGVudGlmaWVyJiBpZGVudCA9IHJlc29sdmUtPmlkZW50aWZpZXIoKTsKIAotICAgIGlmIChMb2Nh
bCBsb2NhbCA9IGdlbmVyYXRvci5sb2NhbChpZGVudCkpIHsKLSAgICAgICAgUmVmUHRyPFJlZ2lz
dGVySUQ+IGxvY2FsUmVnID0gbG9jYWwuZ2V0KCk7Ci0gICAgICAgIGlmIChsb2NhbC5pc1JlYWRP
bmx5KCkpIHsKKyAgICBWYXJpYWJsZSB2YXIgPSBnZW5lcmF0b3IudmFyaWFibGUoaWRlbnQpOwor
ICAgIGlmIChSZWdpc3RlcklEKiBsb2NhbCA9IHZhci5sb2NhbCgpKSB7CisgICAgICAgIFJlZlB0
cjxSZWdpc3RlcklEPiBsb2NhbFJlZyA9IGxvY2FsOworICAgICAgICBpZiAodmFyLmlzUmVhZE9u
bHkoKSkgewogICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRSZWFkT25seUV4Y2VwdGlvbklmTmVl
ZGVkKCk7Ci0gICAgICAgICAgICBsb2NhbFJlZyA9IGdlbmVyYXRvci5lbWl0TW92ZShnZW5lcmF0
b3IudGVtcERlc3RpbmF0aW9uKGRzdCksIGxvY2FsUmVnLmdldCgpKTsKKyAgICAgICAgICAgIGxv
Y2FsUmVnID0gZ2VuZXJhdG9yLmVtaXRNb3ZlKGdlbmVyYXRvci50ZW1wRGVzdGluYXRpb24oZHN0
KSwgbG9jYWwpOwogICAgICAgICB9IGVsc2UgaWYgKGdlbmVyYXRvci52bSgpLT50eXBlUHJvZmls
ZXIoKSkgewogICAgICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHRlbXBEc3QgPSBnZW5lcmF0
b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpOwogICAgICAgICAgICAgQVNTRVJUKGRzdCAhPSBsb2Nh
bFJlZyk7CkBAIC04NDEsMTMgKzg0MiwxMiBAQCBSZWdpc3RlcklEKiBQb3N0Zml4Tm9kZTo6ZW1p
dFJlc29sdmUoQnl0CiAgICAgfQogCiAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhk
aXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwotICAgIFJlc29sdmVTY29wZUluZm8g
cmVzb2x2ZVNjb3BlSW5mbzsKLSAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gc2NvcGUgPSBnZW5lcmF0
b3IuZW1pdFJlc29sdmVTY29wZShudWxscHRyLCBpZGVudCwgcmVzb2x2ZVNjb3BlSW5mbyk7Ci0g
ICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHZhbHVlID0gZ2VuZXJhdG9yLmVtaXRHZXRGcm9tU2NvcGUo
Z2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBzY29wZS5nZXQoKSwgaWRlbnQsIFRocm93SWZOb3RG
b3VuZCwgcmVzb2x2ZVNjb3BlSW5mbyk7CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHNjb3BlID0g
Z2VuZXJhdG9yLmVtaXRSZXNvbHZlU2NvcGUobnVsbHB0ciwgdmFyKTsKKyAgICBSZWZQdHI8UmVn
aXN0ZXJJRD4gdmFsdWUgPSBnZW5lcmF0b3IuZW1pdEdldEZyb21TY29wZShnZW5lcmF0b3IubmV3
VGVtcG9yYXJ5KCksIHNjb3BlLmdldCgpLCB2YXIsIFRocm93SWZOb3RGb3VuZCk7CiAgICAgUmVm
UHRyPFJlZ2lzdGVySUQ+IG9sZFZhbHVlID0gZW1pdFBvc3RJbmNPckRlYyhnZW5lcmF0b3IsIGdl
bmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCksIHZhbHVlLmdldCgpLCBtX29wZXJhdG9yKTsK
LSAgICBnZW5lcmF0b3IuZW1pdFB1dFRvU2NvcGUoc2NvcGUuZ2V0KCksIGlkZW50LCB2YWx1ZS5n
ZXQoKSwgVGhyb3dJZk5vdEZvdW5kLCByZXNvbHZlU2NvcGVJbmZvKTsKKyAgICBnZW5lcmF0b3Iu
ZW1pdFB1dFRvU2NvcGUoc2NvcGUuZ2V0KCksIHZhciwgdmFsdWUuZ2V0KCksIFRocm93SWZOb3RG
b3VuZCk7CiAgICAgaWYgKGdlbmVyYXRvci52bSgpLT50eXBlUHJvZmlsZXIoKSkgewotICAgICAg
ICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlKHZhbHVlLmdldCgpLCByZXNvbHZlU2NvcGVJbmZv
LmlzTG9jYWwoKSA/IFByb2ZpbGVUeXBlQnl0ZWNvZGVQdXRUb0xvY2FsU2NvcGUgOiBQcm9maWxl
VHlwZUJ5dGVjb2RlUHV0VG9TY29wZSwgJmlkZW50KTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRQ
cm9maWxlVHlwZSh2YWx1ZS5nZXQoKSwgdmFyLmlzUmVzb2x2ZWQoKSA/IFByb2ZpbGVUeXBlQnl0
ZWNvZGVQdXRUb0xvY2FsU2NvcGUgOiBQcm9maWxlVHlwZUJ5dGVjb2RlUHV0VG9TY29wZSwgJmlk
ZW50KTsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRUeXBlUHJvZmlsZXJFeHByZXNzaW9uSW5mbyhk
aXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwogICAgIH0KIApAQCAtOTIzLDEyICs5MjMsMTIgQEAg
UmVnaXN0ZXJJRCogUG9zdGZpeE5vZGU6OmVtaXRCeXRlY29kZShCeQogCiBSZWdpc3RlcklEKiBE
ZWxldGVSZXNvbHZlTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0
b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsKLSAgICBpZiAoZ2VuZXJhdG9yLmxvY2FsKG1faWRlbnQp
LmdldCgpKQorICAgIFZhcmlhYmxlIHZhciA9IGdlbmVyYXRvci52YXJpYWJsZShtX2lkZW50KTsK
KyAgICBpZiAodmFyLmxvY2FsKCkpCiAgICAgICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdExvYWQo
Z2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSwgZmFsc2UpOwogCiAgICAgZ2VuZXJhdG9y
LmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwot
ICAgIFJlc29sdmVTY29wZUluZm8gcmVzb2x2ZVNjb3BlSW5mbzsKLSAgICBSZWZQdHI8UmVnaXN0
ZXJJRD4gYmFzZSA9IGdlbmVyYXRvci5lbWl0UmVzb2x2ZVNjb3BlKGRzdCwgbV9pZGVudCwgcmVz
b2x2ZVNjb3BlSW5mbyk7CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGJhc2UgPSBnZW5lcmF0b3Iu
ZW1pdFJlc29sdmVTY29wZShkc3QsIHZhcik7CiAgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0RGVs
ZXRlQnlJZChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIGJhc2UuZ2V0KCkpLCBiYXNl
LmdldCgpLCBtX2lkZW50KTsKIH0KIApAQCAtOTc1LDE5ICs5NzUsMTkgQEAgUmVnaXN0ZXJJRCog
Vm9pZE5vZGU6OmVtaXRCeXRlY29kZShCeXRlYwogICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdExv
YWQoZHN0LCBqc1VuZGVmaW5lZCgpKTsKIH0KIAotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tIFR5cGVPZlZhbHVlTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFR5cGVPZlJlc29sdmVOb2RlIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIFJlZ2lzdGVySUQqIFR5cGVPZlJl
c29sdmVOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVn
aXN0ZXJJRCogZHN0KQogewotICAgIGlmIChMb2NhbCBsb2NhbCA9IGdlbmVyYXRvci5sb2NhbCht
X2lkZW50KSkgeworICAgIFZhcmlhYmxlIHZhciA9IGdlbmVyYXRvci52YXJpYWJsZShtX2lkZW50
KTsKKyAgICBpZiAoUmVnaXN0ZXJJRCogbG9jYWwgPSB2YXIubG9jYWwoKSkgewogICAgICAgICBp
ZiAoZHN0ID09IGdlbmVyYXRvci5pZ25vcmVkUmVzdWx0KCkpCiAgICAgICAgICAgICByZXR1cm4g
MDsKLSAgICAgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0VHlwZU9mKGdlbmVyYXRvci5maW5hbERl
c3RpbmF0aW9uKGRzdCksIGxvY2FsLmdldCgpKTsKKyAgICAgICAgcmV0dXJuIGdlbmVyYXRvci5l
bWl0VHlwZU9mKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCksIGxvY2FsKTsKICAgICB9
CiAKLSAgICBSZXNvbHZlU2NvcGVJbmZvIHJlc29sdmVTY29wZUluZm87Ci0gICAgUmVmUHRyPFJl
Z2lzdGVySUQ+IHNjb3BlID0gZ2VuZXJhdG9yLmVtaXRSZXNvbHZlU2NvcGUoZHN0LCBtX2lkZW50
LCByZXNvbHZlU2NvcGVJbmZvKTsKLSAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gdmFsdWUgPSBnZW5l
cmF0b3IuZW1pdEdldEZyb21TY29wZShnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIHNjb3BlLmdl
dCgpLCBtX2lkZW50LCBEb05vdFRocm93SWZOb3RGb3VuZCwgcmVzb2x2ZVNjb3BlSW5mbyk7Cisg
ICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHNjb3BlID0gZ2VuZXJhdG9yLmVtaXRSZXNvbHZlU2NvcGUo
ZHN0LCB2YXIpOworICAgIFJlZlB0cjxSZWdpc3RlcklEPiB2YWx1ZSA9IGdlbmVyYXRvci5lbWl0
R2V0RnJvbVNjb3BlKGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgc2NvcGUuZ2V0KCksIHZhciwg
RG9Ob3RUaHJvd0lmTm90Rm91bmQpOwogICAgIGlmIChkc3QgPT0gZ2VuZXJhdG9yLmlnbm9yZWRS
ZXN1bHQoKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0VHlw
ZU9mKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCwgc2NvcGUuZ2V0KCkpLCB2YWx1ZS5n
ZXQoKSk7CkBAIC0xMDEzLDkgKzEwMTMsMTAgQEAgUmVnaXN0ZXJJRCogUHJlZml4Tm9kZTo6ZW1p
dFJlc29sdmUoQnl0ZQogICAgIFJlc29sdmVOb2RlKiByZXNvbHZlID0gc3RhdGljX2Nhc3Q8UmVz
b2x2ZU5vZGUqPihtX2V4cHIpOwogICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gcmVzb2x2
ZS0+aWRlbnRpZmllcigpOwogCi0gICAgaWYgKExvY2FsIGxvY2FsID0gZ2VuZXJhdG9yLmxvY2Fs
KGlkZW50KSkgewotICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gbG9jYWxSZWcgPSBsb2NhbC5n
ZXQoKTsKLSAgICAgICAgaWYgKGxvY2FsLmlzUmVhZE9ubHkoKSkgeworICAgIFZhcmlhYmxlIHZh
ciA9IGdlbmVyYXRvci52YXJpYWJsZShpZGVudCk7CisgICAgaWYgKFJlZ2lzdGVySUQqIGxvY2Fs
ID0gdmFyLmxvY2FsKCkpIHsKKyAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGxvY2FsUmVnID0g
bG9jYWw7CisgICAgICAgIGlmICh2YXIuaXNSZWFkT25seSgpKSB7CiAgICAgICAgICAgICBnZW5l
cmF0b3IuZW1pdFJlYWRPbmx5RXhjZXB0aW9uSWZOZWVkZWQoKTsKICAgICAgICAgICAgIGxvY2Fs
UmVnID0gZ2VuZXJhdG9yLmVtaXRNb3ZlKGdlbmVyYXRvci50ZW1wRGVzdGluYXRpb24oZHN0KSwg
bG9jYWxSZWcuZ2V0KCkpOwogICAgICAgICB9IGVsc2UgaWYgKGdlbmVyYXRvci52bSgpLT50eXBl
UHJvZmlsZXIoKSkgewpAQCAtMTAzMiwxMyArMTAzMywxMiBAQCBSZWdpc3RlcklEKiBQcmVmaXhO
b2RlOjplbWl0UmVzb2x2ZShCeXRlCiAgICAgfQogCiAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNz
aW9uSW5mbyhkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwotICAgIFJlc29sdmVT
Y29wZUluZm8gcmVzb2x2ZVNjb3BlSW5mbzsKLSAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gc2NvcGUg
PSBnZW5lcmF0b3IuZW1pdFJlc29sdmVTY29wZShkc3QsIGlkZW50LCByZXNvbHZlU2NvcGVJbmZv
KTsKLSAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gdmFsdWUgPSBnZW5lcmF0b3IuZW1pdEdldEZyb21T
Y29wZShnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIHNjb3BlLmdldCgpLCBpZGVudCwgVGhyb3dJ
Zk5vdEZvdW5kLCByZXNvbHZlU2NvcGVJbmZvKTsKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gc2Nv
cGUgPSBnZW5lcmF0b3IuZW1pdFJlc29sdmVTY29wZShkc3QsIHZhcik7CisgICAgUmVmUHRyPFJl
Z2lzdGVySUQ+IHZhbHVlID0gZ2VuZXJhdG9yLmVtaXRHZXRGcm9tU2NvcGUoZ2VuZXJhdG9yLm5l
d1RlbXBvcmFyeSgpLCBzY29wZS5nZXQoKSwgdmFyLCBUaHJvd0lmTm90Rm91bmQpOwogICAgIGVt
aXRJbmNPckRlYyhnZW5lcmF0b3IsIHZhbHVlLmdldCgpLCBtX29wZXJhdG9yKTsKLSAgICBnZW5l
cmF0b3IuZW1pdFB1dFRvU2NvcGUoc2NvcGUuZ2V0KCksIGlkZW50LCB2YWx1ZS5nZXQoKSwgVGhy
b3dJZk5vdEZvdW5kLCByZXNvbHZlU2NvcGVJbmZvKTsKKyAgICBnZW5lcmF0b3IuZW1pdFB1dFRv
U2NvcGUoc2NvcGUuZ2V0KCksIHZhciwgdmFsdWUuZ2V0KCksIFRocm93SWZOb3RGb3VuZCk7CiAg
ICAgaWYgKGdlbmVyYXRvci52bSgpLT50eXBlUHJvZmlsZXIoKSkgewotICAgICAgICBnZW5lcmF0
b3IuZW1pdFByb2ZpbGVUeXBlKHZhbHVlLmdldCgpLCByZXNvbHZlU2NvcGVJbmZvLmlzTG9jYWwo
KSA/IFByb2ZpbGVUeXBlQnl0ZWNvZGVQdXRUb0xvY2FsU2NvcGUgOiBQcm9maWxlVHlwZUJ5dGVj
b2RlUHV0VG9TY29wZSwgJmlkZW50KTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlVHlw
ZSh2YWx1ZS5nZXQoKSwgdmFyLmlzUmVzb2x2ZWQoKSA/IFByb2ZpbGVUeXBlQnl0ZWNvZGVQdXRU
b0xvY2FsU2NvcGUgOiBQcm9maWxlVHlwZUJ5dGVjb2RlUHV0VG9TY29wZSwgJmlkZW50KTsKICAg
ICAgICAgZ2VuZXJhdG9yLmVtaXRUeXBlUHJvZmlsZXJFeHByZXNzaW9uSW5mbyhkaXZvdFN0YXJ0
KCksIGRpdm90RW5kKCkpOwogICAgIH0KICAgICByZXR1cm4gZ2VuZXJhdG9yLm1vdmVUb0Rlc3Rp
bmF0aW9uSWZOZWVkZWQoZHN0LCB2YWx1ZS5nZXQoKSk7CkBAIC0xNTMwLDM3ICsxNTMwLDM3IEBA
IHN0YXRpYyBBTFdBWVNfSU5MSU5FIFJlZ2lzdGVySUQqIGVtaXRSZWEKIFJlZ2lzdGVySUQqIFJl
YWRNb2RpZnlSZXNvbHZlTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5l
cmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsKICAgICBKU1RleHRQb3NpdGlvbiBuZXdEaXZvdCA9
IGRpdm90U3RhcnQoKSArIG1faWRlbnQubGVuZ3RoKCk7Ci0gICAgaWYgKExvY2FsIGxvY2FsID0g
Z2VuZXJhdG9yLmxvY2FsKG1faWRlbnQpKSB7Ci0gICAgICAgIGlmIChsb2NhbC5pc1JlYWRPbmx5
KCkpIHsKKyAgICBWYXJpYWJsZSB2YXIgPSBnZW5lcmF0b3IudmFyaWFibGUobV9pZGVudCk7Cisg
ICAgaWYgKFJlZ2lzdGVySUQqIGxvY2FsID0gdmFyLmxvY2FsKCkpIHsKKyAgICAgICAgaWYgKHZh
ci5pc1JlYWRPbmx5KCkpIHsKICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0UmVhZE9ubHlFeGNl
cHRpb25JZk5lZWRlZCgpOwotICAgICAgICAgICAgcmV0dXJuIGVtaXRSZWFkTW9kaWZ5QXNzaWdu
bWVudChnZW5lcmF0b3IsIGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCksIGxvY2FsLmdl
dCgpLCBtX3JpZ2h0LCBtX29wZXJhdG9yLCBPcGVyYW5kVHlwZXMoUmVzdWx0VHlwZTo6dW5rbm93
blR5cGUoKSwgbV9yaWdodC0+cmVzdWx0RGVzY3JpcHRvcigpKSk7CisgICAgICAgICAgICByZXR1
cm4gZW1pdFJlYWRNb2RpZnlBc3NpZ25tZW50KGdlbmVyYXRvciwgZ2VuZXJhdG9yLmZpbmFsRGVz
dGluYXRpb24oZHN0KSwgbG9jYWwsIG1fcmlnaHQsIG1fb3BlcmF0b3IsIE9wZXJhbmRUeXBlcyhS
ZXN1bHRUeXBlOjp1bmtub3duVHlwZSgpLCBtX3JpZ2h0LT5yZXN1bHREZXNjcmlwdG9yKCkpKTsK
ICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgaWYgKGdlbmVyYXRvci52bSgpLT50eXBlUHJv
ZmlsZXIoKQogICAgICAgICAgICAgfHwgZ2VuZXJhdG9yLmxlZnRIYW5kU2lkZU5lZWRzQ29weSht
X3JpZ2h0SGFzQXNzaWdubWVudHMsIG1fcmlnaHQtPmlzUHVyZShnZW5lcmF0b3IpKSkgewogICAg
ICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHJlc3VsdCA9IGdlbmVyYXRvci5uZXdUZW1wb3Jh
cnkoKTsKLSAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0TW92ZShyZXN1bHQuZ2V0KCksIGxvY2Fs
LmdldCgpKTsKKyAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0TW92ZShyZXN1bHQuZ2V0KCksIGxv
Y2FsKTsKICAgICAgICAgICAgIGVtaXRSZWFkTW9kaWZ5QXNzaWdubWVudChnZW5lcmF0b3IsIHJl
c3VsdC5nZXQoKSwgcmVzdWx0LmdldCgpLCBtX3JpZ2h0LCBtX29wZXJhdG9yLCBPcGVyYW5kVHlw
ZXMoUmVzdWx0VHlwZTo6dW5rbm93blR5cGUoKSwgbV9yaWdodC0+cmVzdWx0RGVzY3JpcHRvcigp
KSk7Ci0gICAgICAgICAgICBnZW5lcmF0b3IuZW1pdE1vdmUobG9jYWwuZ2V0KCksIHJlc3VsdC5n
ZXQoKSk7Ci0gICAgICAgICAgICBnZW5lcmF0b3IuaW52YWxpZGF0ZUZvckluQ29udGV4dEZvckxv
Y2FsKGxvY2FsLmdldCgpKTsKKyAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0TW92ZShsb2NhbCwg
cmVzdWx0LmdldCgpKTsKKyAgICAgICAgICAgIGdlbmVyYXRvci5pbnZhbGlkYXRlRm9ySW5Db250
ZXh0Rm9yTG9jYWwobG9jYWwpOwogICAgICAgICAgICAgaWYgKGdlbmVyYXRvci52bSgpLT50eXBl
UHJvZmlsZXIoKSkKICAgICAgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdFR5cGVQcm9maWxlckV4
cHJlc3Npb25JbmZvKGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAgICAgICAgICAgICByZXR1
cm4gZ2VuZXJhdG9yLm1vdmVUb0Rlc3RpbmF0aW9uSWZOZWVkZWQoZHN0LCByZXN1bHQuZ2V0KCkp
OwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBSZWdpc3RlcklEKiByZXN1bHQgPSBlbWl0
UmVhZE1vZGlmeUFzc2lnbm1lbnQoZ2VuZXJhdG9yLCBsb2NhbC5nZXQoKSwgbG9jYWwuZ2V0KCks
IG1fcmlnaHQsIG1fb3BlcmF0b3IsIE9wZXJhbmRUeXBlcyhSZXN1bHRUeXBlOjp1bmtub3duVHlw
ZSgpLCBtX3JpZ2h0LT5yZXN1bHREZXNjcmlwdG9yKCkpKTsKLSAgICAgICAgZ2VuZXJhdG9yLmlu
dmFsaWRhdGVGb3JJbkNvbnRleHRGb3JMb2NhbChsb2NhbC5nZXQoKSk7CisgICAgICAgIFJlZ2lz
dGVySUQqIHJlc3VsdCA9IGVtaXRSZWFkTW9kaWZ5QXNzaWdubWVudChnZW5lcmF0b3IsIGxvY2Fs
LCBsb2NhbCwgbV9yaWdodCwgbV9vcGVyYXRvciwgT3BlcmFuZFR5cGVzKFJlc3VsdFR5cGU6OnVu
a25vd25UeXBlKCksIG1fcmlnaHQtPnJlc3VsdERlc2NyaXB0b3IoKSkpOworICAgICAgICBnZW5l
cmF0b3IuaW52YWxpZGF0ZUZvckluQ29udGV4dEZvckxvY2FsKGxvY2FsKTsKICAgICAgICAgcmV0
dXJuIGdlbmVyYXRvci5tb3ZlVG9EZXN0aW5hdGlvbklmTmVlZGVkKGRzdCwgcmVzdWx0KTsKICAg
ICB9CiAKICAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKG5ld0Rpdm90LCBkaXZvdFN0
YXJ0KCksIG5ld0Rpdm90KTsKLSAgICBSZXNvbHZlU2NvcGVJbmZvIHJlc29sdmVTY29wZUluZm87
Ci0gICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHNjb3BlID0gZ2VuZXJhdG9yLmVtaXRSZXNvbHZlU2Nv
cGUobnVsbHB0ciwgbV9pZGVudCwgcmVzb2x2ZVNjb3BlSW5mbyk7Ci0gICAgUmVmUHRyPFJlZ2lz
dGVySUQ+IHZhbHVlID0gZ2VuZXJhdG9yLmVtaXRHZXRGcm9tU2NvcGUoZ2VuZXJhdG9yLm5ld1Rl
bXBvcmFyeSgpLCBzY29wZS5nZXQoKSwgbV9pZGVudCwgVGhyb3dJZk5vdEZvdW5kLCByZXNvbHZl
U2NvcGVJbmZvKTsKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gc2NvcGUgPSBnZW5lcmF0b3IuZW1p
dFJlc29sdmVTY29wZShudWxscHRyLCB2YXIpOworICAgIFJlZlB0cjxSZWdpc3RlcklEPiB2YWx1
ZSA9IGdlbmVyYXRvci5lbWl0R2V0RnJvbVNjb3BlKGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwg
c2NvcGUuZ2V0KCksIHZhciwgVGhyb3dJZk5vdEZvdW5kKTsKICAgICBSZWZQdHI8UmVnaXN0ZXJJ
RD4gcmVzdWx0ID0gZW1pdFJlYWRNb2RpZnlBc3NpZ25tZW50KGdlbmVyYXRvciwgZ2VuZXJhdG9y
LmZpbmFsRGVzdGluYXRpb24oZHN0LCB2YWx1ZS5nZXQoKSksIHZhbHVlLmdldCgpLCBtX3JpZ2h0
LCBtX29wZXJhdG9yLCBPcGVyYW5kVHlwZXMoUmVzdWx0VHlwZTo6dW5rbm93blR5cGUoKSwgbV9y
aWdodC0+cmVzdWx0RGVzY3JpcHRvcigpKSwgdGhpcyk7Ci0gICAgUmVnaXN0ZXJJRCogcmV0dXJu
UmVzdWx0ID0gZ2VuZXJhdG9yLmVtaXRQdXRUb1Njb3BlKHNjb3BlLmdldCgpLCBtX2lkZW50LCBy
ZXN1bHQuZ2V0KCksIFRocm93SWZOb3RGb3VuZCwgcmVzb2x2ZVNjb3BlSW5mbyk7CisgICAgUmVn
aXN0ZXJJRCogcmV0dXJuUmVzdWx0ID0gZ2VuZXJhdG9yLmVtaXRQdXRUb1Njb3BlKHNjb3BlLmdl
dCgpLCB2YXIsIHJlc3VsdC5nZXQoKSwgVGhyb3dJZk5vdEZvdW5kKTsKICAgICBpZiAoZ2VuZXJh
dG9yLnZtKCktPnR5cGVQcm9maWxlcigpKSB7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0UHJvZmls
ZVR5cGUocmVzdWx0LmdldCgpLCByZXNvbHZlU2NvcGVJbmZvLmlzTG9jYWwoKSA/IFByb2ZpbGVU
eXBlQnl0ZWNvZGVQdXRUb0xvY2FsU2NvcGUgOiBQcm9maWxlVHlwZUJ5dGVjb2RlUHV0VG9TY29w
ZSwgJm1faWRlbnQpOworICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlKHJlc3VsdC5n
ZXQoKSwgdmFyLmlzUmVzb2x2ZWQoKSA/IFByb2ZpbGVUeXBlQnl0ZWNvZGVQdXRUb0xvY2FsU2Nv
cGUgOiBQcm9maWxlVHlwZUJ5dGVjb2RlUHV0VG9TY29wZSwgJm1faWRlbnQpOwogICAgICAgICBn
ZW5lcmF0b3IuZW1pdFR5cGVQcm9maWxlckV4cHJlc3Npb25JbmZvKGRpdm90U3RhcnQoKSwgZGl2
b3RFbmQoKSk7CiAgICAgfQogICAgIHJldHVybiByZXR1cm5SZXN1bHQ7CkBAIC0xNTcwLDM2ICsx
NTcwLDM2IEBAIFJlZ2lzdGVySUQqIFJlYWRNb2RpZnlSZXNvbHZlTm9kZTo6ZW1pdEIKIAogUmVn
aXN0ZXJJRCogQXNzaWduUmVzb2x2ZU5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRv
ciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7Ci0gICAgaWYgKExvY2FsIGxvY2FsID0g
Z2VuZXJhdG9yLmxvY2FsKG1faWRlbnQpKSB7Ci0gICAgICAgIGlmIChsb2NhbC5pc1JlYWRPbmx5
KCkpIHsKKyAgICBWYXJpYWJsZSB2YXIgPSBnZW5lcmF0b3IudmFyaWFibGUobV9pbmRldCk7Cisg
ICAgaWYgKFJlZ2lzdGVySUQqIGxvY2FsID0gdmFyLmxvY2FsKCkpIHsKKyAgICAgICAgaWYgKHZh
ci5pc1JlYWRPbmx5KCkpIHsKICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0UmVhZE9ubHlFeGNl
cHRpb25JZk5lZWRlZCgpOwogICAgICAgICAgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0Tm9kZShk
c3QsIG1fcmlnaHQpOwogICAgICAgICB9Ci0gICAgICAgIGlmIChsb2NhbC5pc1NwZWNpYWwoKSB8
fCBnZW5lcmF0b3Iudm0oKS0+dHlwZVByb2ZpbGVyKCkpIHsKKyAgICAgICAgaWYgKHZhci5pc1Nw
ZWNpYWwoKSB8fCBnZW5lcmF0b3Iudm0oKS0+dHlwZVByb2ZpbGVyKCkpIHsKICAgICAgICAgICAg
IFJlZlB0cjxSZWdpc3RlcklEPiB0ZW1wRHN0ID0gZ2VuZXJhdG9yLnRlbXBEZXN0aW5hdGlvbihk
c3QpOwogICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXROb2RlKHRlbXBEc3QuZ2V0KCksIG1fcmln
aHQpOwotICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRNb3ZlKGxvY2FsLmdldCgpLCB0ZW1wRHN0
LmdldCgpKTsKLSAgICAgICAgICAgIGdlbmVyYXRvci5pbnZhbGlkYXRlRm9ySW5Db250ZXh0Rm9y
TG9jYWwobG9jYWwuZ2V0KCkpOworICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRNb3ZlKGxvY2Fs
LCB0ZW1wRHN0LmdldCgpKTsKKyAgICAgICAgICAgIGdlbmVyYXRvci5pbnZhbGlkYXRlRm9ySW5D
b250ZXh0Rm9yTG9jYWwobG9jYWwpOwogICAgICAgICAgICAgaWYgKGdlbmVyYXRvci52bSgpLT50
eXBlUHJvZmlsZXIoKSkKICAgICAgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdFR5cGVQcm9maWxl
ckV4cHJlc3Npb25JbmZvKGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAgICAgICAgICAgICBy
ZXR1cm4gZ2VuZXJhdG9yLm1vdmVUb0Rlc3RpbmF0aW9uSWZOZWVkZWQoZHN0LCB0ZW1wRHN0Lmdl
dCgpKTsKICAgICAgICAgfQotICAgICAgICBSZWdpc3RlcklEKiByZXN1bHQgPSBnZW5lcmF0b3Iu
ZW1pdE5vZGUobG9jYWwuZ2V0KCksIG1fcmlnaHQpOwotICAgICAgICBnZW5lcmF0b3IuaW52YWxp
ZGF0ZUZvckluQ29udGV4dEZvckxvY2FsKGxvY2FsLmdldCgpKTsKKyAgICAgICAgUmVnaXN0ZXJJ
RCogcmVzdWx0ID0gZ2VuZXJhdG9yLmVtaXROb2RlKGxvY2FsLCBtX3JpZ2h0KTsKKyAgICAgICAg
Z2VuZXJhdG9yLmludmFsaWRhdGVGb3JJbkNvbnRleHRGb3JMb2NhbChsb2NhbCk7CiAgICAgICAg
IHJldHVybiBnZW5lcmF0b3IubW92ZVRvRGVzdGluYXRpb25JZk5lZWRlZChkc3QsIHJlc3VsdCk7
CiAgICAgfQogCiAgICAgaWYgKGdlbmVyYXRvci5pc1N0cmljdE1vZGUoKSkKICAgICAgICAgZ2Vu
ZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5k
KCkpOwotICAgIFJlc29sdmVTY29wZUluZm8gcmVzb2x2ZVNjb3BlSW5mbzsKLSAgICBSZWZQdHI8
UmVnaXN0ZXJJRD4gc2NvcGUgPSBnZW5lcmF0b3IuZW1pdFJlc29sdmVTY29wZShudWxscHRyLCBt
X2lkZW50LCByZXNvbHZlU2NvcGVJbmZvKTsKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gc2NvcGUg
PSBnZW5lcmF0b3IuZW1pdFJlc29sdmVTY29wZShudWxscHRyLCB2YXIpOwogICAgIGlmIChkc3Qg
PT0gZ2VuZXJhdG9yLmlnbm9yZWRSZXN1bHQoKSkKICAgICAgICAgZHN0ID0gMDsKICAgICBSZWZQ
dHI8UmVnaXN0ZXJJRD4gcmVzdWx0ID0gZ2VuZXJhdG9yLmVtaXROb2RlKGRzdCwgbV9yaWdodCk7
CiAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgpLCBkaXZvdFN0YXJ0KCks
IGRpdm90RW5kKCkpOwotICAgIFJlZ2lzdGVySUQqIHJldHVyblJlc3VsdCA9IGdlbmVyYXRvci5l
bWl0UHV0VG9TY29wZShzY29wZS5nZXQoKSwgbV9pZGVudCwgcmVzdWx0LmdldCgpLCBnZW5lcmF0
b3IuaXNTdHJpY3RNb2RlKCkgPyBUaHJvd0lmTm90Rm91bmQgOiBEb05vdFRocm93SWZOb3RGb3Vu
ZCwgcmVzb2x2ZVNjb3BlSW5mbyk7CisgICAgUmVnaXN0ZXJJRCogcmV0dXJuUmVzdWx0ID0gZ2Vu
ZXJhdG9yLmVtaXRQdXRUb1Njb3BlKHNjb3BlLmdldCgpLCB2YXIsIHJlc3VsdC5nZXQoKSwgZ2Vu
ZXJhdG9yLmlzU3RyaWN0TW9kZSgpID8gVGhyb3dJZk5vdEZvdW5kIDogRG9Ob3RUaHJvd0lmTm90
Rm91bmQpOwogICAgIGlmIChnZW5lcmF0b3Iudm0oKS0+dHlwZVByb2ZpbGVyKCkpIHsKLSAgICAg
ICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlVHlwZShyZXN1bHQuZ2V0KCksIHJlc29sdmVTY29wZUlu
Zm8uaXNMb2NhbCgpID8gUHJvZmlsZVR5cGVCeXRlY29kZVB1dFRvTG9jYWxTY29wZSA6IFByb2Zp
bGVUeXBlQnl0ZWNvZGVQdXRUb1Njb3BlLCAmbV9pZGVudCk7CisgICAgICAgIGdlbmVyYXRvci5l
bWl0UHJvZmlsZVR5cGUocmVzdWx0LmdldCgpLCB2YXIuaXNSZXNvbHZlZCgpID8gUHJvZmlsZVR5
cGVCeXRlY29kZVB1dFRvTG9jYWxTY29wZSA6IFByb2ZpbGVUeXBlQnl0ZWNvZGVQdXRUb1Njb3Bl
LCAmbV9pZGVudCk7CiAgICAgICAgIGdlbmVyYXRvci5lbWl0VHlwZVByb2ZpbGVyRXhwcmVzc2lv
bkluZm8oZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKICAgICB9IAogICAgIHJldHVybiByZXR1
cm5SZXN1bHQ7CkBAIC0xNzA4LDE4ICsxNzA4LDE5IEBAIFJlZ2lzdGVySUQqIENvbW1hTm9kZTo6
ZW1pdEJ5dGVjb2RlKEJ5dGUKIFJlZ2lzdGVySUQqIENvbnN0RGVjbE5vZGU6OmVtaXRDb2RlU2lu
Z2xlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IpCiB7CiAgICAgLy8gRklYTUU6IFRoaXMg
Y29kZSBkb2VzIG5vdCBtYXRjaCB0aGUgYmVoYXZpb3Igb2YgY29uc3QgaW4gRmlyZWZveC4KLSAg
ICBpZiAoTG9jYWwgbG9jYWwgPSBnZW5lcmF0b3IuY29uc3RMb2NhbChtX2lkZW50KSkgeworICAg
IFZhcmlhYmxlIHZhciA9IGdlbmVyYXRvci52YXJpYWJsZShtX2lkZW50KTsKKyAgICBpZiAoUmVn
aXN0ZXJJRCogbG9jYWwgPSB2YXIubG9jYWwoKSkgewogICAgICAgICBpZiAoIW1faW5pdCkKLSAg
ICAgICAgICAgIHJldHVybiBsb2NhbC5nZXQoKTsKKyAgICAgICAgICAgIHJldHVybiBsb2NhbDsK
IAogICAgICAgICAvLyBGSVhNRTogTWF5YmUgY2FsbCBlbWl0RXhwcmVzc2lvbkluZm8gaGVyZS4K
LSAgICAgICAgaWYgKGxvY2FsLmlzU3BlY2lhbCgpIHx8IGdlbmVyYXRvci52bSgpLT50eXBlUHJv
ZmlsZXIoKSkgeworICAgICAgICBpZiAodmFyLmlzU3BlY2lhbCgpIHx8IGdlbmVyYXRvci52bSgp
LT50eXBlUHJvZmlsZXIoKSkgewogICAgICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHRlbXBE
c3QgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7CiAgICAgICAgICAgICBnZW5lcmF0b3IuZW1p
dE5vZGUodGVtcERzdC5nZXQoKSwgbV9pbml0KTsKLSAgICAgICAgICAgIHJldHVybiBnZW5lcmF0
b3IuZW1pdE1vdmUobG9jYWwuZ2V0KCksIHRlbXBEc3QuZ2V0KCkpOworICAgICAgICAgICAgcmV0
dXJuIGdlbmVyYXRvci5lbWl0TW92ZShsb2NhbCwgdGVtcERzdC5nZXQoKSk7CiAgICAgICAgIH0K
ICAgICAgICAgCi0gICAgICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdE5vZGUobG9jYWwuZ2V0KCks
IG1faW5pdCk7CisgICAgICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdE5vZGUobG9jYWwsIG1faW5p
dCk7CiAgICAgfQogCiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHZhbHVlID0gbV9pbml0ID8gZ2Vu
ZXJhdG9yLmVtaXROb2RlKG1faW5pdCkgOiBnZW5lcmF0b3IuZW1pdExvYWQoMCwganNVbmRlZmlu
ZWQoKSk7CkBAIC0xNzI4LDE4ICsxNzI5LDE2IEBAIFJlZ2lzdGVySUQqIENvbnN0RGVjbE5vZGU6
OmVtaXRDb2RlU2luZ2wKICAgICAgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0SW5pdEdsb2JhbENv
bnN0KG1faWRlbnQsIHZhbHVlLmdldCgpKTsKIAogICAgIGlmIChnZW5lcmF0b3IuY29kZVR5cGUo
KSAhPSBFdmFsQ29kZSkgewotCi0gICAgICAgIFJlc29sdmVTY29wZUluZm8gcmVzb2x2ZVNjb3Bl
SW5mbzsKLSAgICAgICAgaWYgKFJlZlB0cjxSZWdpc3RlcklEPiBzY29wZSA9IGdlbmVyYXRvci5l
bWl0UmVzb2x2ZUNvbnN0YW50TG9jYWwoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBtX2lkZW50
LCByZXNvbHZlU2NvcGVJbmZvKSkKLSAgICAgICAgICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdFB1
dFRvU2NvcGUoc2NvcGUuZ2V0KCksIG1faWRlbnQsIHZhbHVlLmdldCgpLCBEb05vdFRocm93SWZO
b3RGb3VuZCwgcmVzb2x2ZVNjb3BlSW5mbyk7Ci0KLSAgICAgICAgcmV0dXJuIHZhbHVlLmdldCgp
OworICAgICAgICBpZiAoIXZhci5pc1Jlc29sdmVkKCkpCisgICAgICAgICAgICByZXR1cm4gdmFs
dWUuZ2V0KCk7CisgICAgICAgIAorICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gc2NvcGUgPSBn
ZW5lcmF0b3IuZW1pdFJlc29sdmVTY29wZShnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIHZhcik7
CisgICAgICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdFB1dFRvU2NvcGUoc2NvcGUuZ2V0KCksIHZh
ciwgdmFsdWUuZ2V0KCksIERvTm90VGhyb3dJZk5vdEZvdW5kKTsKICAgICB9CiAKICAgICAvLyBG
SVhNRTogVGhpcyB3aWxsIHJlc3VsdCBpbiBpbmNvcnJlY3QgYXNzaWdubWVudCBpZiBtX2lkZW50
IGV4aXN0cyBpbiBhbiBpbnRlcnZlbmluZyB3aXRoIHNjb3BlLgotICAgIFJlc29sdmVTY29wZUlu
Zm8gcmVzb2x2ZVNjb3BlSW5mbzsKLSAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gc2NvcGUgPSBnZW5l
cmF0b3IuZW1pdFJlc29sdmVTY29wZShudWxscHRyLCBtX2lkZW50LCByZXNvbHZlU2NvcGVJbmZv
KTsKLSAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRQdXRUb1Njb3BlKHNjb3BlLmdldCgpLCBtX2lk
ZW50LCB2YWx1ZS5nZXQoKSwgRG9Ob3RUaHJvd0lmTm90Rm91bmQsIHJlc29sdmVTY29wZUluZm8p
OworICAgIFJlZlB0cjxSZWdpc3RlcklEPiBzY29wZSA9IGdlbmVyYXRvci5lbWl0UmVzb2x2ZVNj
b3BlKG51bGxwdHIsIHZhcik7CisgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0UHV0VG9TY29wZShz
Y29wZS5nZXQoKSwgdmFyLCB2YWx1ZS5nZXQoKSwgRG9Ob3RUaHJvd0lmTm90Rm91bmQpOwogfQog
CiBSZWdpc3RlcklEKiBDb25zdERlY2xOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0
b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCopCkBAIC0xODMxLDEzICsxODMwLDEzIEBAIFJlZ2lz
dGVySUQqIEVtcHR5VmFyRXhwcmVzc2lvbjo6ZW1pdEJ5dGUKICAgICBpZiAoIWdlbmVyYXRvci52
bSgpLT50eXBlUHJvZmlsZXIoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBpZiAo
TG9jYWwgbG9jYWwgPSBnZW5lcmF0b3IubG9jYWwobV9pZGVudCkpCi0gICAgICAgIGdlbmVyYXRv
ci5lbWl0UHJvZmlsZVR5cGUobG9jYWwuZ2V0KCksIFByb2ZpbGVUeXBlQnl0ZWNvZGVIYXNHbG9i
YWxJRCwgbnVsbHB0cik7CisgICAgVmFyaWFibGUgdmFyID0gZ2VuZXJhdG9yLnZhcmlhYmxlKG1f
aWRlbnQpOworICAgIGlmIChSZWdpc3RlcklEKiBsb2NhbCA9IHZhci5sb2NhbCgpKQorICAgICAg
ICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlKGxvY2FsLCBQcm9maWxlVHlwZUJ5dGVjb2RlSGFz
R2xvYmFsSUQsIG51bGxwdHIpOwogICAgIGVsc2UgewotICAgICAgICBSZXNvbHZlU2NvcGVJbmZv
IHJlc29sdmVTY29wZUluZm87Ci0gICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBzY29wZSA9IGdl
bmVyYXRvci5lbWl0UmVzb2x2ZVNjb3BlKG51bGxwdHIsIG1faWRlbnQsIHJlc29sdmVTY29wZUlu
Zm8pOwotICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gdmFsdWUgPSBnZW5lcmF0b3IuZW1pdEdl
dEZyb21TY29wZShnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIHNjb3BlLmdldCgpLCBtX2lkZW50
LCBEb05vdFRocm93SWZOb3RGb3VuZCwgcmVzb2x2ZVNjb3BlSW5mbyk7Ci0gICAgICAgIGdlbmVy
YXRvci5lbWl0UHJvZmlsZVR5cGUodmFsdWUuZ2V0KCksIHJlc29sdmVTY29wZUluZm8uaXNMb2Nh
bCgpID8gUHJvZmlsZVR5cGVCeXRlY29kZUdldEZyb21Mb2NhbFNjb3BlIDogUHJvZmlsZVR5cGVC
eXRlY29kZUdldEZyb21TY29wZSwgJm1faWRlbnQpOworICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJ
RD4gc2NvcGUgPSBnZW5lcmF0b3IuZW1pdFJlc29sdmVTY29wZShudWxscHRyLCB2YXIpOworICAg
ICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gdmFsdWUgPSBnZW5lcmF0b3IuZW1pdEdldEZyb21TY29w
ZShnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIHNjb3BlLmdldCgpLCB2YXIsIERvTm90VGhyb3dJ
Zk5vdEZvdW5kKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlVHlwZSh2YWx1ZS5nZXQo
KSwgcmVzb2x2ZVNjb3BlSW5mby5pc1Jlc29sdmVkKCkgPyBQcm9maWxlVHlwZUJ5dGVjb2RlR2V0
RnJvbUxvY2FsU2NvcGUgOiBQcm9maWxlVHlwZUJ5dGVjb2RlR2V0RnJvbVNjb3BlLCAmbV9pZGVu
dCk7CiAgICAgfQogCiAgICAgZ2VuZXJhdG9yLmVtaXRUeXBlUHJvZmlsZXJFeHByZXNzaW9uSW5m
byhwb3NpdGlvbigpLCBKU1RleHRQb3NpdGlvbigtMSwgcG9zaXRpb24oKS5vZmZzZXQgKyBtX2lk
ZW50Lmxlbmd0aCgpLCAtMSkpOwpAQCAtMjAwNyw4ICsyMDA2LDcgQEAgUmVnaXN0ZXJJRCogRm9y
SW5Ob2RlOjp0cnlHZXRCb3VuZExvY2FsKAogewogICAgIGlmIChtX2xleHByLT5pc1Jlc29sdmVO
b2RlKCkpIHsKICAgICAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBzdGF0aWNfY2FzdDxS
ZXNvbHZlTm9kZSo+KG1fbGV4cHIpLT5pZGVudGlmaWVyKCk7Ci0gICAgICAgIExvY2FsIGxvY2Fs
ID0gZ2VuZXJhdG9yLmxvY2FsKGlkZW50KTsKLSAgICAgICAgcmV0dXJuIGxvY2FsLmdldCgpOwor
ICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLnZhcmlhYmxlKGlkZW50KS5sb2NhbCgpOwogICAgIH0K
IAogICAgIGlmIChtX2xleHByLT5pc0RlY29uc3RydWN0aW9uTm9kZSgpKSB7CkBAIC0yMDE5LDEw
ICsyMDE3LDEwIEBAIFJlZ2lzdGVySUQqIEZvckluTm9kZTo6dHJ5R2V0Qm91bmRMb2NhbCgKIAog
ICAgICAgICBhdXRvIHNpbXBsZUJpbmRpbmcgPSBzdGF0aWNfY2FzdDxCaW5kaW5nTm9kZSo+KGJp
bmRpbmcpOwogICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IHNpbXBsZUJpbmRpbmct
PmJvdW5kUHJvcGVydHkoKTsKLSAgICAgICAgTG9jYWwgbG9jYWwgPSBnZW5lcmF0b3IubG9jYWwo
aWRlbnQpOwotICAgICAgICBpZiAobG9jYWwuaXNTcGVjaWFsKCkpCisgICAgICAgIFZhcmlhYmxl
IHZhciA9IGdlbmVyYXRvci52YXJpYWJsZShpZGVudCk7CisgICAgICAgIGlmICh2YXIuaXNTcGVj
aWFsKCkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgcmV0dXJuIGxvY2Fs
LmdldCgpOworICAgICAgICByZXR1cm4gdmFyLmxvY2FsKCk7CiAgICAgfQogCiAgICAgcmV0dXJu
IG51bGxwdHI7CkBAIC0yMDMyLDE4ICsyMDMwLDE3IEBAIHZvaWQgRm9ySW5Ob2RlOjplbWl0TG9v
cEhlYWRlcihCeXRlY29kZUcKIHsKICAgICBpZiAobV9sZXhwci0+aXNSZXNvbHZlTm9kZSgpKSB7
CiAgICAgICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gc3RhdGljX2Nhc3Q8UmVzb2x2ZU5v
ZGUqPihtX2xleHByKS0+aWRlbnRpZmllcigpOwotICAgICAgICBMb2NhbCBsb2NhbCA9IGdlbmVy
YXRvci5sb2NhbChpZGVudCk7Ci0gICAgICAgIGlmIChsb2NhbC5nZXQoKSkKLSAgICAgICAgICAg
IGdlbmVyYXRvci5lbWl0TW92ZShsb2NhbC5nZXQoKSwgcHJvcGVydHlOYW1lKTsKKyAgICAgICAg
VmFyaWFibGUgdmFyID0gZ2VuZXJhdG9yLnZhcmlhYmxlKGlkZW50KTsKKyAgICAgICAgaWYgKFJl
Z2lzdGVySUQqIGxvY2FsID0gdmFyLmxvY2FsKCkpCisgICAgICAgICAgICBnZW5lcmF0b3IuZW1p
dE1vdmUobG9jYWwsIHByb3BlcnR5TmFtZSk7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAg
aWYgKGdlbmVyYXRvci5pc1N0cmljdE1vZGUoKSkKICAgICAgICAgICAgICAgICBnZW5lcmF0b3Iu
ZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7Ci0g
ICAgICAgICAgICBSZXNvbHZlU2NvcGVJbmZvIHJlc29sdmVTY29wZUluZm87Ci0gICAgICAgICAg
ICBSZWdpc3RlcklEKiBzY29wZSA9IGdlbmVyYXRvci5lbWl0UmVzb2x2ZVNjb3BlKG51bGxwdHIs
IGlkZW50LCByZXNvbHZlU2NvcGVJbmZvKTsKKyAgICAgICAgICAgIFJlZ2lzdGVySUQqIHNjb3Bl
ID0gZ2VuZXJhdG9yLmVtaXRSZXNvbHZlU2NvcGUobnVsbHB0ciwgdmFyKTsKICAgICAgICAgICAg
IGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZv
dEVuZCgpKTsKLSAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0UHV0VG9TY29wZShzY29wZSwgaWRl
bnQsIHByb3BlcnR5TmFtZSwgZ2VuZXJhdG9yLmlzU3RyaWN0TW9kZSgpID8gVGhyb3dJZk5vdEZv
dW5kIDogRG9Ob3RUaHJvd0lmTm90Rm91bmQsIHJlc29sdmVTY29wZUluZm8pOworICAgICAgICAg
ICAgZ2VuZXJhdG9yLmVtaXRQdXRUb1Njb3BlKHNjb3BlLCB2YXIsIHByb3BlcnR5TmFtZSwgZ2Vu
ZXJhdG9yLmlzU3RyaWN0TW9kZSgpID8gVGhyb3dJZk5vdEZvdW5kIDogRG9Ob3RUaHJvd0lmTm90
Rm91bmQpOwogICAgICAgICAgICAgaWYgKGdlbmVyYXRvci52bSgpLT50eXBlUHJvZmlsZXIoKSkK
LSAgICAgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlKHByb3BlcnR5TmFtZSwg
cmVzb2x2ZVNjb3BlSW5mby5pc0xvY2FsKCkgPyBQcm9maWxlVHlwZUJ5dGVjb2RlUHV0VG9Mb2Nh
bFNjb3BlIDogUHJvZmlsZVR5cGVCeXRlY29kZVB1dFRvU2NvcGUsICZpZGVudCk7CisgICAgICAg
ICAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlVHlwZShwcm9wZXJ0eU5hbWUsIHZhci5pc1Jl
c29sdmVkKCkgPyBQcm9maWxlVHlwZUJ5dGVjb2RlUHV0VG9Mb2NhbFNjb3BlIDogUHJvZmlsZVR5
cGVCeXRlY29kZVB1dFRvU2NvcGUsICZpZGVudCk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGdl
bmVyYXRvci52bSgpLT50eXBlUHJvZmlsZXIoKSkKICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0
VHlwZVByb2ZpbGVyRXhwcmVzc2lvbkluZm8obV9sZXhwci0+cG9zaXRpb24oKSwgSlNUZXh0UG9z
aXRpb24oLTEsIG1fbGV4cHItPnBvc2l0aW9uKCkub2Zmc2V0ICsgaWRlbnQubGVuZ3RoKCksIC0x
KSk7CkBAIC0yMDg0LDEyICsyMDgxLDEyIEBAIHZvaWQgRm9ySW5Ob2RlOjplbWl0TG9vcEhlYWRl
cihCeXRlY29kZUcKIAogICAgICAgICBhdXRvIHNpbXBsZUJpbmRpbmcgPSBzdGF0aWNfY2FzdDxC
aW5kaW5nTm9kZSo+KGJpbmRpbmcpOwogICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9
IHNpbXBsZUJpbmRpbmctPmJvdW5kUHJvcGVydHkoKTsKLSAgICAgICAgTG9jYWwgbG9jYWwgPSBn
ZW5lcmF0b3IubG9jYWwoaWRlbnQpOwotICAgICAgICBpZiAoIWxvY2FsLmdldCgpIHx8IGxvY2Fs
LmlzU3BlY2lhbCgpKSB7CisgICAgICAgIFZhcmlhYmxlIHZhciA9IGdlbmVyYXRvci52YXJpYWJs
ZShpZGVudCk7CisgICAgICAgIGlmICghdmFyLmxvY2FsKCkgfHwgdmFyLmlzU3BlY2lhbCgpKSB7
CiAgICAgICAgICAgICBhc3NpZ25Ob2RlLT5iaW5kaW5ncygpLT5iaW5kVmFsdWUoZ2VuZXJhdG9y
LCBwcm9wZXJ0eU5hbWUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAg
IGdlbmVyYXRvci5lbWl0TW92ZShsb2NhbC5nZXQoKSwgcHJvcGVydHlOYW1lKTsKKyAgICAgICAg
Z2VuZXJhdG9yLmVtaXRNb3ZlKHZhci5sb2NhbCgpLCBwcm9wZXJ0eU5hbWUpOwogICAgICAgICBp
ZiAoZ2VuZXJhdG9yLnZtKCktPnR5cGVQcm9maWxlcigpKQogICAgICAgICAgICAgZ2VuZXJhdG9y
LmVtaXRUeXBlUHJvZmlsZXJFeHByZXNzaW9uSW5mbyhzaW1wbGVCaW5kaW5nLT5kaXZvdFN0YXJ0
KCksIHNpbXBsZUJpbmRpbmctPmRpdm90RW5kKCkpOwogICAgICAgICByZXR1cm47CkBAIC0yMjU3
LDE3ICsyMjU0LDE3IEBAIHZvaWQgRm9yT2ZOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW4K
ICAgICB7CiAgICAgICAgIGlmIChtX2xleHByLT5pc1Jlc29sdmVOb2RlKCkpIHsKICAgICAgICAg
ICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gc3RhdGljX2Nhc3Q8UmVzb2x2ZU5vZGUqPiht
X2xleHByKS0+aWRlbnRpZmllcigpOwotICAgICAgICAgICAgaWYgKExvY2FsIGxvY2FsID0gZ2Vu
ZXJhdG9yLmxvY2FsKGlkZW50KSkKLSAgICAgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdE1vdmUo
bG9jYWwuZ2V0KCksIHZhbHVlKTsKKyAgICAgICAgICAgIFZhcmlhYmxlIHZhciA9IGdlbmVyYXRv
ci52YXJpYWJsZShpZGVudCk7CisgICAgICAgICAgICBpZiAoUmVnaXN0ZXJJRCogbG9jYWwgPSB2
YXIubG9jYWwoKSkKKyAgICAgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdE1vdmUobG9jYWwsIHZh
bHVlKTsKICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgIGlmIChnZW5lcmF0b3Iu
aXNTdHJpY3RNb2RlKCkpCiAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0RXhwcmVz
c2lvbkluZm8oZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKLSAgICAgICAgICAg
ICAgICBSZXNvbHZlU2NvcGVJbmZvIHJlc29sdmVTY29wZUluZm87Ci0gICAgICAgICAgICAgICAg
UmVnaXN0ZXJJRCogc2NvcGUgPSBnZW5lcmF0b3IuZW1pdFJlc29sdmVTY29wZShudWxscHRyLCBp
ZGVudCwgcmVzb2x2ZVNjb3BlSW5mbyk7CisgICAgICAgICAgICAgICAgUmVnaXN0ZXJJRCogc2Nv
cGUgPSBnZW5lcmF0b3IuZW1pdFJlc29sdmVTY29wZShudWxscHRyLCB2YXIpOwogICAgICAgICAg
ICAgICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgZGl2b3RTdGFydCgp
LCBkaXZvdEVuZCgpKTsKLSAgICAgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdFB1dFRvU2NvcGUo
c2NvcGUsIGlkZW50LCB2YWx1ZSwgZ2VuZXJhdG9yLmlzU3RyaWN0TW9kZSgpID8gVGhyb3dJZk5v
dEZvdW5kIDogRG9Ob3RUaHJvd0lmTm90Rm91bmQsIHJlc29sdmVTY29wZUluZm8pOworICAgICAg
ICAgICAgICAgIGdlbmVyYXRvci5lbWl0UHV0VG9TY29wZShzY29wZSwgdmFyLCB2YWx1ZSwgZ2Vu
ZXJhdG9yLmlzU3RyaWN0TW9kZSgpID8gVGhyb3dJZk5vdEZvdW5kIDogRG9Ob3RUaHJvd0lmTm90
Rm91bmQpOwogICAgICAgICAgICAgICAgIGlmIChnZW5lcmF0b3Iudm0oKS0+dHlwZVByb2ZpbGVy
KCkpCi0gICAgICAgICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZVR5cGUodmFsdWUs
IHJlc29sdmVTY29wZUluZm8uaXNMb2NhbCgpID8gUHJvZmlsZVR5cGVCeXRlY29kZVB1dFRvTG9j
YWxTY29wZSA6IFByb2ZpbGVUeXBlQnl0ZWNvZGVQdXRUb1Njb3BlLCAmaWRlbnQpOworICAgICAg
ICAgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlKHZhbHVlLCB2YXIuaXNSZXNv
bHZlZCgpID8gUHJvZmlsZVR5cGVCeXRlY29kZVB1dFRvTG9jYWxTY29wZSA6IFByb2ZpbGVUeXBl
Qnl0ZWNvZGVQdXRUb1Njb3BlLCAmaWRlbnQpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAg
aWYgKGdlbmVyYXRvci52bSgpLT50eXBlUHJvZmlsZXIoKSkKICAgICAgICAgICAgICAgICBnZW5l
cmF0b3IuZW1pdFR5cGVQcm9maWxlckV4cHJlc3Npb25JbmZvKG1fbGV4cHItPnBvc2l0aW9uKCks
IEpTVGV4dFBvc2l0aW9uKC0xLCBtX2xleHByLT5wb3NpdGlvbigpLm9mZnNldCArIGlkZW50Lmxl
bmd0aCgpLCAtMSkpOwpAQCAtMjg1MiwyNCArMjg0OSw2IEBAIHZvaWQgQXJyYXlQYXR0ZXJuTm9k
ZTo6YmluZFZhbHVlKEJ5dGVjb2QKIAogUmVnaXN0ZXJJRCogQXJyYXlQYXR0ZXJuTm9kZTo6ZW1p
dERpcmVjdEJpbmRpbmcoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCog
ZHN0LCBFeHByZXNzaW9uTm9kZSogcmhzKQogewotICAgIGlmIChyaHMtPmlzUmVzb2x2ZU5vZGUo
KQotICAgICAgICAmJiBnZW5lcmF0b3Iud2lsbFJlc29sdmVUb0FyZ3VtZW50c1JlZ2lzdGVyKHN0
YXRpY19jYXN0PFJlc29sdmVOb2RlKj4ocmhzKS0+aWRlbnRpZmllcigpKQotICAgICAgICAmJiBn
ZW5lcmF0b3IuaGFzU2FmZUxvY2FsQXJndW1lbnRzUmVnaXN0ZXIoKSYmICFnZW5lcmF0b3Iuc3lt
Ym9sVGFibGUoKS5zbG93QXJndW1lbnRzKCkpIHsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBtX3RhcmdldFBhdHRlcm5zLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgICAgICBhdXRvIHRh
cmdldCA9IG1fdGFyZ2V0UGF0dGVybnNbaV07Ci0gICAgICAgICAgICBpZiAoIXRhcmdldCkKLSAg
ICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgUmVmUHRy
PFJlZ2lzdGVySUQ+IHRlbXAgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7Ci0gICAgICAgICAg
ICBnZW5lcmF0b3IuZW1pdExvYWQodGVtcC5nZXQoKSwganNOdW1iZXIoaSkpOwotICAgICAgICAg
ICAgZ2VuZXJhdG9yLmVtaXRHZXRBcmd1bWVudEJ5VmFsKHRlbXAuZ2V0KCksIGdlbmVyYXRvci51
bmNoZWNrZWRMb2NhbEFyZ3VtZW50c1JlZ2lzdGVyKCksIHRlbXAuZ2V0KCkpOwotICAgICAgICAg
ICAgdGFyZ2V0LT5iaW5kVmFsdWUoZ2VuZXJhdG9yLCB0ZW1wLmdldCgpKTsKLSAgICAgICAgfQot
ICAgICAgICBpZiAoZHN0ID09IGdlbmVyYXRvci5pZ25vcmVkUmVzdWx0KCkgfHwgIWRzdCkKLSAg
ICAgICAgICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdExvYWQoZ2VuZXJhdG9yLmZpbmFsRGVzdGlu
YXRpb24oZHN0KSwganNVbmRlZmluZWQoKSk7Ci0gICAgICAgIExvY2FsIGxvY2FsID0gZ2VuZXJh
dG9yLmxvY2FsKGdlbmVyYXRvci52bSgpLT5wcm9wZXJ0eU5hbWVzLT5hcmd1bWVudHMpOwotICAg
ICAgICByZXR1cm4gZ2VuZXJhdG9yLm1vdmVUb0Rlc3RpbmF0aW9uSWZOZWVkZWQoZHN0LCBsb2Nh
bC5nZXQoKSk7Ci0gICAgfQogICAgIGlmICghcmhzLT5pc1NpbXBsZUFycmF5KCkpCiAgICAgICAg
IHJldHVybiAwOwogCkBAIC0yOTU3LDI0ICsyOTM2LDI0IEBAIHZvaWQgT2JqZWN0UGF0dGVybk5v
ZGU6OmNvbGxlY3RCb3VuZElkZW4KIAogdm9pZCBCaW5kaW5nTm9kZTo6YmluZFZhbHVlKEJ5dGVj
b2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIHZhbHVlKSBjb25zdAogewotICAg
IGlmIChMb2NhbCBsb2NhbCA9IGdlbmVyYXRvci5sb2NhbChtX2JvdW5kUHJvcGVydHkpKSB7Ci0g
ICAgICAgIGlmIChsb2NhbC5pc1JlYWRPbmx5KCkpIHsKKyAgICBWYXJpYWJsZSB2YXIgPSBnZW5l
cmF0b3IudmFyaWFibGUobV9ib3VuZFByb3BlcnR5KTsKKyAgICBpZiAoUmVnaXN0ZXJJRCogbG9j
YWwgPSB2YXIubG9jYWwoKSkgeworICAgICAgICBpZiAodmFyLmlzUmVhZE9ubHkoKSkgewogICAg
ICAgICAgICAgZ2VuZXJhdG9yLmVtaXRSZWFkT25seUV4Y2VwdGlvbklmTmVlZGVkKCk7CiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRNb3ZlKGxv
Y2FsLmdldCgpLCB2YWx1ZSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0TW92ZShsb2NhbCwgdmFs
dWUpOwogICAgICAgICBpZiAoZ2VuZXJhdG9yLnZtKCktPnR5cGVQcm9maWxlcigpKQogICAgICAg
ICAgICAgZ2VuZXJhdG9yLmVtaXRUeXBlUHJvZmlsZXJFeHByZXNzaW9uSW5mbyhkaXZvdFN0YXJ0
KCksIGRpdm90RW5kKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlmIChnZW5lcmF0
b3IuaXNTdHJpY3RNb2RlKCkpCiAgICAgICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8o
ZGl2b3RFbmQoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKLSAgICBSZXNvbHZlU2NvcGVJ
bmZvIHJlc29sdmVTY29wZUluZm87Ci0gICAgUmVnaXN0ZXJJRCogc2NvcGUgPSBnZW5lcmF0b3Iu
ZW1pdFJlc29sdmVTY29wZShudWxscHRyLCBtX2JvdW5kUHJvcGVydHksIHJlc29sdmVTY29wZUlu
Zm8pOworICAgIFJlZ2lzdGVySUQqIHNjb3BlID0gZ2VuZXJhdG9yLmVtaXRSZXNvbHZlU2NvcGUo
bnVsbHB0ciwgdmFyKTsKICAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90RW5k
KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7Ci0gICAgZ2VuZXJhdG9yLmVtaXRQdXRUb1Nj
b3BlKHNjb3BlLCBtX2JvdW5kUHJvcGVydHksIHZhbHVlLCBnZW5lcmF0b3IuaXNTdHJpY3RNb2Rl
KCkgPyBUaHJvd0lmTm90Rm91bmQgOiBEb05vdFRocm93SWZOb3RGb3VuZCwgcmVzb2x2ZVNjb3Bl
SW5mbyk7CisgICAgZ2VuZXJhdG9yLmVtaXRQdXRUb1Njb3BlKHNjb3BlLCB2YXIsIHZhbHVlLCBn
ZW5lcmF0b3IuaXNTdHJpY3RNb2RlKCkgPyBUaHJvd0lmTm90Rm91bmQgOiBEb05vdFRocm93SWZO
b3RGb3VuZCk7CiAgICAgaWYgKGdlbmVyYXRvci52bSgpLT50eXBlUHJvZmlsZXIoKSkgewotICAg
ICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlKHZhbHVlLCByZXNvbHZlU2NvcGVJbmZvLmlz
TG9jYWwoKSA/IFByb2ZpbGVUeXBlQnl0ZWNvZGVQdXRUb0xvY2FsU2NvcGUgOiBQcm9maWxlVHlw
ZUJ5dGVjb2RlUHV0VG9TY29wZSwgJm1fYm91bmRQcm9wZXJ0eSk7CisgICAgICAgIGdlbmVyYXRv
ci5lbWl0UHJvZmlsZVR5cGUodmFsdWUsIHZhci5pc1Jlc29sdmVkKCkgPyBQcm9maWxlVHlwZUJ5
dGVjb2RlUHV0VG9Mb2NhbFNjb3BlIDogUHJvZmlsZVR5cGVCeXRlY29kZVB1dFRvU2NvcGUsICZt
X2JvdW5kUHJvcGVydHkpOwogICAgICAgICBnZW5lcmF0b3IuZW1pdFR5cGVQcm9maWxlckV4cHJl
c3Npb25JbmZvKGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAgICAgfQogICAgIHJldHVybjsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RIZWFwLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEhlYXAuaAkocmV2
aXNpb24gMTgwOTEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEhl
YXAuaAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNiBAQCBuYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIERGRyB7CiAgICAgbWFjcm8oV29ybGQpIFwKICAgICBtYWNybyhTdGFjaykgXAogICAg
IG1hY3JvKEhlYXApIFwKLSAgICBtYWNybyhBcmd1bWVudHNfcmVnaXN0ZXJzKSBcCiAgICAgbWFj
cm8oQnV0dGVyZmx5X3B1YmxpY0xlbmd0aCkgXAogICAgIG1hY3JvKEJ1dHRlcmZseV92ZWN0b3JM
ZW5ndGgpIFwKICAgICBtYWNybyhHZXR0ZXJTZXR0ZXJfZ2V0dGVyKSBcCkBAIC01Nyw3ICs1Niw2
IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICBtYWNybyhKU0NlbGxfdHlw
ZUluZm9GbGFncykgXAogICAgIG1hY3JvKEpTQ2VsbF90eXBlSW5mb1R5cGUpIFwKICAgICBtYWNy
byhKU09iamVjdF9idXR0ZXJmbHkpIFwKLSAgICBtYWNybyhKU0Vudmlyb25tZW50UmVjb3JkX3Jl
Z2lzdGVycykgXAogICAgIG1hY3JvKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcl9jYWNoZWRQcm9w
ZXJ0eU5hbWVzKSBcCiAgICAgbWFjcm8oTmFtZWRQcm9wZXJ0aWVzKSBcCiAgICAgbWFjcm8oSW5k
ZXhlZEludDMyUHJvcGVydGllcykgXApAQCAtNjUsNyArNjMsOCBAQCBuYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIERGRyB7CiAgICAgbWFjcm8oSW5kZXhlZENvbnRpZ3VvdXNQcm9wZXJ0aWVzKSBc
CiAgICAgbWFjcm8oSW5kZXhlZEFycmF5U3RvcmFnZVByb3BlcnRpZXMpIFwKICAgICBtYWNybyhB
cnJheVN0b3JhZ2VQcm9wZXJ0aWVzKSBcCi0gICAgbWFjcm8oVmFyaWFibGVzKSBcCisgICAgbWFj
cm8oRGlyZWN0QXJndW1lbnRzUHJvcGVydGllcykgXAorICAgIG1hY3JvKFNjb3BlUHJvcGVydGll
cykgXAogICAgIG1hY3JvKFR5cGVkQXJyYXlQcm9wZXJ0aWVzKSBcCiAgICAgbWFjcm8oSGVhcE9i
amVjdENvdW50KSAvKiBVc2VkIHRvIHJlZmxlY3QgdGhlIGZhY3QgdGhhdCBzb21lIGFsbG9jYXRp
b25zIHJldmVhbCBvYmplY3QgaWRlbnRpdHkgKi9cCiAgICAgbWFjcm8oUmVnRXhwU3RhdGUpIFwK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRl
cnByZXRlci5oCShyZXZpc2lvbiAxODA5MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTQ4LDcgKzE0OCw2
IEBAIHB1YmxpYzoKICAgICAKIHByaXZhdGU6CiAgICAgdm9pZCBjbG9iYmVyV29ybGQoY29uc3Qg
Q29kZU9yaWdpbiYsIHVuc2lnbmVkIGluZGV4SW5CbG9jayk7Ci0gICAgdm9pZCBjbG9iYmVyQ2Fw
dHVyZWRWYXJzKGNvbnN0IENvZGVPcmlnaW4mKTsKICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBGdW5jdG9yPgogICAgIHZvaWQgZm9yQWxsVmFsdWVzKHVuc2lnbmVkIGluZGV4SW5CbG9jaywg
RnVuY3RvciYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdElu
dGVycHJldGVySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkocmV2aXNpb24gMTgwOTEwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDMwLDcgKzEwMzAsOCBAQCBib29sIEFic3RyYWN0SW50ZXJw
cmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAg
ICBmb3JOb2RlKG5vZGUpLnNldChtX2dyYXBoLCBtX2dyYXBoLm1fdm0uc3RyaW5nU3RydWN0dXJl
LmdldCgpKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpBcmd1bWVu
dHM6CisgICAgICAgIGNhc2UgQXJyYXk6OkRpcmVjdEFyZ3VtZW50czoKKyAgICAgICAgY2FzZSBB
cnJheTo6U2NvcGVkQXJndW1lbnRzOgogICAgICAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlSGVh
cFRvcCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkludDMyOgpA
QCAtMTMzMyw4NyArMTMzNCwyMCBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RT
dGF0ZVR5CiAgICAgY2FzZSBUeXBlZEFycmF5V2F0Y2hwb2ludDoKICAgICAgICAgYnJlYWs7CiAg
ICAgCi0gICAgY2FzZSBDcmVhdGVBcmd1bWVudHM6Ci0gICAgICAgIGZvck5vZGUobm9kZSkgPSBm
b3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgZm9yTm9kZShub2RlKS5maWx0ZXIoflNw
ZWNFbXB0eSk7Ci0gICAgICAgIGZvck5vZGUobm9kZSkubWVyZ2UoU3BlY0FyZ3VtZW50cyk7Cisg
ICAgY2FzZSBDcmVhdGVEaXJlY3RBcmd1bWVudHM6CisgICAgICAgIGZvck5vZGUobm9kZSkuc2V0
KG1fZ3JhcGgsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFu
dGljKS0+ZGlyZWN0QXJndW1lbnRzU3RydWN0dXJlKCkpOwogICAgICAgICBicmVhazsKICAgICAg
ICAgCi0gICAgY2FzZSBUZWFyT2ZmQXJndW1lbnRzOgotICAgICAgICAvLyBEb2VzIG5vdGhpbmcg
dGhhdCBpcyB1c2VyLXZpc2libGUuCi0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBDaGVja0Fy
Z3VtZW50c05vdENyZWF0ZWQ6Ci0gICAgICAgIGlmIChpc0VtcHR5U3BlY3VsYXRpb24oCi0gICAg
ICAgICAgICAgICAgbV9zdGF0ZS52YXJpYWJsZXMoKS5vcGVyYW5kKAotICAgICAgICAgICAgICAg
ICAgICBtX2dyYXBoLmFyZ3VtZW50c1JlZ2lzdGVyRm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyku
b2Zmc2V0KCkpLm1fdHlwZSkpCi0gICAgICAgICAgICBtX3N0YXRlLnNldEZvdW5kQ29uc3RhbnRz
KHRydWUpOworICAgIGNhc2UgQ3JlYXRlU2NvcGVkQXJndW1lbnRzOgorICAgICAgICBmb3JOb2Rl
KG5vZGUpLnNldChtX2dyYXBoLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9y
aWdpbi5zZW1hbnRpYyktPnNjb3BlZEFyZ3VtZW50c1N0cnVjdHVyZSgpKTsKICAgICAgICAgYnJl
YWs7CiAgICAgICAgIAotICAgIGNhc2UgR2V0TXlBcmd1bWVudHNMZW5ndGg6Ci0gICAgICAgIC8v
IFdlIGtub3cgdGhhdCB0aGlzIGV4ZWN1dGFibGUgZG9lcyBub3QgZXNjYXBlIGl0cyBhcmd1bWVu
dHMsIHNvIHdlIGNhbiBvcHRpbWl6ZQotICAgICAgICAvLyB0aGUgYXJndW1lbnRzIGEgYml0LiBO
b3RlIHRoYXQgdGhpcyBpcyBub3Qgc3VmZmljaWVudCB0byBmb3JjZSBjb25zdGFudCBmb2xkaW5n
Ci0gICAgICAgIC8vIG9mIEdldE15QXJndW1lbnRzTGVuZ3RoLCBiZWNhdXNlIEdldE15QXJndW1l
bnRzTGVuZ3RoIGlzIGEgY2xvYmJlcmluZyBvcGVyYXRpb24uCi0gICAgICAgIC8vIFdlIHBlcmZv
cm0gZnVydGhlciBvcHRpbWl6YXRpb25zIG9uIHRoaXMgbGF0ZXIgb24uCi0gICAgICAgIGlmIChu
b2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lCi0gICAgICAgICAgICAmJiAhbm9k
ZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpIHsKLSAgICAg
ICAgICAgIHNldENvbnN0YW50KAotICAgICAgICAgICAgICAgIG5vZGUsIGpzTnVtYmVyKG5vZGUt
Pm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCkgLSAxKSk7
Ci0gICAgICAgICAgICBtX3N0YXRlLnNldERpZENsb2JiZXIodHJ1ZSk7IC8vIFByZXRlbmQgdGhh
dCB3ZSBjbG9iYmVyZWQgdG8gcHJldmVudCBjb25zdGFudCBmb2xkaW5nLgotICAgICAgICB9IGVs
c2UKLSAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjSW50MzIpOwotICAgICAg
ICBicmVhazsKLSAgICAgICAgCi0gICAgY2FzZSBHZXRNeUFyZ3VtZW50c0xlbmd0aFNhZmU6Ci0g
ICAgICAgIC8vIFRoaXMgcG90ZW50aWFsbHkgY2xvYmJlcnMgYWxsIHN0cnVjdHVyZXMgaWYgdGhl
IGFyZ3VtZW50cyBvYmplY3QgaGFkIGEgZ2V0dGVyCi0gICAgICAgIC8vIGluc3RhbGxlZCBvbiB0
aGUgbGVuZ3RoIHByb3BlcnR5LgotICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+b3JpZ2luLnNl
bWFudGljLCBjbG9iYmVyTGltaXQpOwotICAgICAgICAvLyBXZSBjdXJyZW50bHkgbWFrZSBubyBn
dWFyYW50ZWUgYWJvdXQgd2hhdCB0aGlzIHJldHVybnMgYmVjYXVzZSBpdCBkb2VzIG5vdAotICAg
ICAgICAvLyBzcGVjdWxhdGUgdGhhdCB0aGUgbGVuZ3RoIHByb3BlcnR5IGlzIGFjdHVhbGx5IGEg
bGVuZ3RoLgotICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VIZWFwVG9wKCk7Ci0gICAgICAgIGJy
ZWFrOwotICAgICAgICAKLSAgICBjYXNlIEdldE15QXJndW1lbnRCeVZhbDogewotICAgICAgICBJ
bmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5p
bmxpbmVDYWxsRnJhbWU7Ci0gICAgICAgIEpTVmFsdWUgdmFsdWUgPSBmb3JOb2RlKG5vZGUtPmNo
aWxkMSgpKS5tX3ZhbHVlOwotICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lICYmIHZhbHVlICYm
IHZhbHVlLmlzSW50MzIoKSkgewotICAgICAgICAgICAgaW50MzJfdCBpbmRleCA9IHZhbHVlLmFz
SW50MzIoKTsKLSAgICAgICAgICAgIGlmIChpbmRleCA+PSAwCi0gICAgICAgICAgICAgICAgJiYg
c3RhdGljX2Nhc3Q8c2l6ZV90PihpbmRleCArIDEpIDwgaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVu
dHMuc2l6ZSgpKSB7Ci0gICAgICAgICAgICAgICAgZm9yTm9kZShub2RlKSA9IG1fc3RhdGUudmFy
aWFibGVzKCkub3BlcmFuZCgKLSAgICAgICAgICAgICAgICAgICAgaW5saW5lQ2FsbEZyYW1lLT5z
dGFja09mZnNldCArCi0gICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguYmFzZWxpbmVDb2RlQmxv
Y2tGb3IoaW5saW5lQ2FsbEZyYW1lKS0+YXJndW1lbnRJbmRleEFmdGVyQ2FwdHVyZShpbmRleCkp
OwotICAgICAgICAgICAgICAgIG1fc3RhdGUuc2V0Rm91bmRDb25zdGFudHModHJ1ZSk7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZm9y
Tm9kZShub2RlKS5tYWtlSGVhcFRvcCgpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgICAg
IAotICAgIGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFsU2FmZToKLSAgICAgICAgLy8gVGhpcyBwb3Rl
bnRpYWxseSBjbG9iYmVycyBhbGwgc3RydWN0dXJlcyBpZiB0aGUgcHJvcGVydHkgd2UncmUgYWNj
ZXNzaW5nIGhhcwotICAgICAgICAvLyBhIGdldHRlci4gV2UgZG9uJ3Qgc3BlY3VsYXRlIGFnYWlu
c3QgdGhpcy4KLSAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgY2xv
YmJlckxpbWl0KTsKLSAgICAgICAgLy8gQW5kIHRoZSByZXN1bHQgaXMgdW5rbm93bi4KLSAgICAg
ICAgZm9yTm9kZShub2RlKS5tYWtlSGVhcFRvcCgpOworICAgIGNhc2UgQ3JlYXRlT3V0T2ZCYW5k
QXJndW1lbnRzOgorICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY09iamVjdE90aGVy
KTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAotICAgIGNhc2UgTmV3RnVuY3Rpb246IHsKLSAg
ICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBmb3JOb2RlKG5vZGUpOwotICAgICAgICB2YWx1
ZSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICAKLSAgICAgICAgaWYgKCEodmFs
dWUubV90eXBlICYgU3BlY0VtcHR5KSkgewotICAgICAgICAgICAgbV9zdGF0ZS5zZXRGb3VuZENv
bnN0YW50cyh0cnVlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAg
dmFsdWUuc2V0VHlwZSgodmFsdWUubV90eXBlICYgflNwZWNFbXB0eSkgfCBTcGVjRnVuY3Rpb24p
OwotICAgICAgICBicmVhazsKLSAgICB9Ci0KICAgICBjYXNlIE5ld0Z1bmN0aW9uRXhwcmVzc2lv
bjoKLSAgICBjYXNlIE5ld0Z1bmN0aW9uTm9DaGVjazoKKyAgICBjYXNlIE5ld0Z1bmN0aW9uOgog
ICAgICAgICBmb3JOb2RlKG5vZGUpLnNldCgKICAgICAgICAgICAgIG1fZ3JhcGgsIG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKS0+ZnVuY3Rpb25TdHJ1
Y3R1cmUoKSk7CiAgICAgICAgIGJyZWFrOwpAQCAtMTQ2NCwxNiArMTM5OCwxOCBAQCBib29sIEFi
c3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIGJyZWFrOwogICAgIH0K
IAotICAgIGNhc2UgR2V0Q2xvc3VyZVJlZ2lzdGVyczoKLSAgICAgICAgZm9yTm9kZShub2RlKS5j
bGVhcigpOyAvLyBUaGUgcmVzdWx0IGlzIG5vdCBhIEpTIHZhbHVlLgotICAgICAgICBicmVhazsK
LQogICAgIGNhc2UgR2V0Q2xvc3VyZVZhcjoKICAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlSGVh
cFRvcCgpOwogICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgIGNhc2UgUHV0Q2xvc3Vy
ZVZhcjoKLSAgICAgICAgY2xvYmJlckNhcHR1cmVkVmFycyhub2RlLT5vcmlnaW4uc2VtYW50aWMp
OworICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgY2FzZSBHZXRGcm9tQXJndW1lbnRzOgor
ICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VIZWFwVG9wKCk7CisgICAgICAgIGJyZWFrOworICAg
ICAgICAKKyAgICBjYXNlIFB1dFRvQXJndW1lbnRzOgogICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIAogICAgIGNhc2UgR2V0QnlJZDoKQEAgLTE2MTcsOCArMTU1MywxMSBAQCBib29sIEFic3Ry
YWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5
U3RvcmFnZToKICAgICAgICAgY2FzZSBBcnJheTo6U2xvd1B1dEFycmF5U3RvcmFnZToKICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6Ci0gICAgICAgICAg
ICBmaWx0ZXIobm9kZS0+Y2hpbGQxKCksIFNwZWNBcmd1bWVudHMpOworICAgICAgICBjYXNlIEFy
cmF5OjpEaXJlY3RBcmd1bWVudHM6CisgICAgICAgICAgICBmaWx0ZXIobm9kZS0+Y2hpbGQxKCks
IFNwZWNEaXJlY3RBcmd1bWVudHMpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
QXJyYXk6OlNjb3BlZEFyZ3VtZW50czoKKyAgICAgICAgICAgIGZpbHRlcihub2RlLT5jaGlsZDEo
KSwgU3BlY1Njb3BlZEFyZ3VtZW50cyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2Fz
ZSBBcnJheTo6SW50OEFycmF5OgogICAgICAgICAgICAgZmlsdGVyKG5vZGUtPmNoaWxkMSgpLCBT
cGVjSW50OEFycmF5KTsKQEAgLTIxMDQsMzUgKzIwNDMsMTAgQEAgdGVtcGxhdGU8dHlwZW5hbWUg
QWJzdHJhY3RTdGF0ZVR5cGU+CiB2b2lkIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0
ZVR5cGU+OjpjbG9iYmVyV29ybGQoCiAgICAgY29uc3QgQ29kZU9yaWdpbiYgY29kZU9yaWdpbiwg
dW5zaWduZWQgY2xvYmJlckxpbWl0KQogewotICAgIGNsb2JiZXJDYXB0dXJlZFZhcnMoY29kZU9y
aWdpbik7CiAgICAgY2xvYmJlclN0cnVjdHVyZXMoY2xvYmJlckxpbWl0KTsKIH0KIAogdGVtcGxh
dGU8dHlwZW5hbWUgQWJzdHJhY3RTdGF0ZVR5cGU+Ci12b2lkIEFic3RyYWN0SW50ZXJwcmV0ZXI8
QWJzdHJhY3RTdGF0ZVR5cGU+OjpjbG9iYmVyQ2FwdHVyZWRWYXJzKGNvbnN0IENvZGVPcmlnaW4m
IGNvZGVPcmlnaW4pCi17Ci0gICAgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24oIkRGRyBB
SSBDbG9iYmVyIENhcHR1cmVkIFZhcnMiKTsKLSAgICBpZiAoY29kZU9yaWdpbi5pbmxpbmVDYWxs
RnJhbWUpIHsKLSAgICAgICAgY29uc3QgQml0VmVjdG9yJiBjYXB0dXJlZFZhcnMgPSBjb2RlT3Jp
Z2luLmlubGluZUNhbGxGcmFtZS0+Y2FwdHVyZWRWYXJzOwotICAgICAgICBmb3IgKHNpemVfdCBp
ID0gY2FwdHVyZWRWYXJzLnNpemUoKTsgaS0tOykgewotICAgICAgICAgICAgaWYgKCFjYXB0dXJl
ZFZhcnMucXVpY2tHZXQoaSkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAg
ICBtX3N0YXRlLnZhcmlhYmxlcygpLmxvY2FsKGkpLm1ha2VIZWFwVG9wKCk7Ci0gICAgICAgIH0K
LSAgICB9IGVsc2UgewotICAgICAgICBmb3IgKHNpemVfdCBpID0gbV9jb2RlQmxvY2stPm1fbnVt
VmFyczsgaS0tOykgewotICAgICAgICAgICAgaWYgKG1fY29kZUJsb2NrLT5pc0NhcHR1cmVkKHZp
cnR1YWxSZWdpc3RlckZvckxvY2FsKGkpKSkKLSAgICAgICAgICAgICAgICBtX3N0YXRlLnZhcmlh
YmxlcygpLmxvY2FsKGkpLm1ha2VIZWFwVG9wKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBm
b3IgKHNpemVfdCBpID0gbV9zdGF0ZS52YXJpYWJsZXMoKS5udW1iZXJPZkFyZ3VtZW50cygpOyBp
LS07KSB7Ci0gICAgICAgIGlmIChtX2NvZGVCbG9jay0+aXNDYXB0dXJlZCh2aXJ0dWFsUmVnaXN0
ZXJGb3JBcmd1bWVudChpKSkpCi0gICAgICAgICAgICBtX3N0YXRlLnZhcmlhYmxlcygpLmFyZ3Vt
ZW50KGkpLm1ha2VIZWFwVG9wKCk7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBBYnN0
cmFjdFN0YXRlVHlwZT4KIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CiB2b2lkIEFic3RyYWN0
SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+Ojpmb3JBbGxWYWx1ZXMoCiAgICAgdW5zaWdu
ZWQgY2xvYmJlckxpbWl0LCBGdW5jdG9yJiBmdW5jdG9yKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmgJKHJldmlzaW9uIDE4MDkxMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zNDYsMTggKzM0NiwxNiBAQCBzdHJ1Y3QgQWJzdHJhY3RWYWx1ZSB7CiAgICAgCiAgICAg
Ly8gVGhpcyBpcyBhIHByb3ZlbiBjb25zdHJhaW50IG9uIHRoZSBwb3NzaWJsZSB0eXBlcyB0aGF0
IHRoaXMgdmFsdWUgY2FuIGhhdmUKICAgICAvLyBub3cgb3IgYW55IHRpbWUgaW4gdGhlIGZ1dHVy
ZSwgdW5sZXNzIGl0IGlzIHJlYXNzaWduZWQuIFRoaXMgZmllbGQgaXMKLSAgICAvLyBpbXBlcnZp
b3VzIHRvIHNpZGUtZWZmZWN0cyB1bmxlc3MgdGhlIHNpZGUtZWZmZWN0IGNhbiByZWFzc2lnbiB0
aGUgdmFsdWUKLSAgICAvLyAoZm9yIGV4YW1wbGUgaWYgd2UncmUgdGFsa2luZyBhYm91dCBhIGNh
cHR1cmVkIHZhcmlhYmxlKS4gVGhlIHJlbGF0aW9uc2hpcAotICAgIC8vIGJldHdlZW4gdGhpcyBm
aWVsZCwgYW5kIHRoZSBzdHJ1Y3R1cmUgZmllbGRzIGFib3ZlLCBpcyBhcyBmb2xsb3dzLiBUaGUK
LSAgICAvLyBmaWVsZHMgYWJvdmUgY29uc3RyYWludCB0aGUgc3RydWN0dXJlcyB0aGF0IGEgY2Vs
bCBtYXkgaGF2ZSwgYnV0IHRoZXkgc2F5Ci0gICAgLy8gbm90aGluZyBhYm91dCB3aGV0aGVyIG9y
IG5vdCB0aGUgdmFsdWUgaXMga25vd24gdG8gYmUgYSBjZWxsLiBNb3JlIGZvcm1hbGx5LAotICAg
IC8vIHRoZSBtX3N0cnVjdHVyZSBpcyBpdHNlbGYgYW4gYWJzdHJhY3QgdmFsdWUgdGhhdCBjb25z
aXN0cyBvZiB0aGUKLSAgICAvLyB1bmlvbiBvZiB0aGUgc2V0IG9mIGFsbCBub24tY2VsbCB2YWx1
ZXMgYW5kIHRoZSBzZXQgb2YgY2VsbCB2YWx1ZXMgdGhhdCBoYXZlCi0gICAgLy8gdGhlIGdpdmVu
IHN0cnVjdHVyZS4gVGhpcyBhYnN0cmFjdCB2YWx1ZSBpcyB0aGVuIHRoZSBpbnRlcnNlY3Rpb24g
b2YgdGhlCi0gICAgLy8gbV9zdHJ1Y3R1cmUgYW5kIHRoZSBzZXQgb2YgdmFsdWVzIHdob3NlIHR5
cGUgaXMgbV90eXBlLiBTbywgZm9yCi0gICAgLy8gZXhhbXBsZSBpZiBtX3R5cGUgaXMgU3BlY0Zp
bmFsfFNwZWNJbnQzMiBhbmQgbV9zdHJ1Y3R1cmUgaXMKLSAgICAvLyBbMHgxMjM0NV0gdGhlbiB0
aGlzIGFic3RyYWN0IHZhbHVlIGNvcnJlc3BvbmRzIHRvIHRoZSBzZXQgb2YgYWxsIGludGVnZXJz
Ci0gICAgLy8gdW5pZmllZCB3aXRoIHRoZSBzZXQgb2YgYWxsIG9iamVjdHMgd2l0aCBzdHJ1Y3R1
cmUgMHgxMjM0NS4KKyAgICAvLyBpbXBlcnZpb3VzIHRvIHNpZGUtZWZmZWN0cy4gVGhlIHJlbGF0
aW9uc2hpcCBiZXR3ZWVuIHRoaXMgZmllbGQsIGFuZCB0aGUKKyAgICAvLyBzdHJ1Y3R1cmUgZmll
bGRzIGFib3ZlLCBpcyBhcyBmb2xsb3dzLiBUaGUgZmllbGRzIGFib3ZlIGNvbnN0cmFpbnQgdGhl
CisgICAgLy8gc3RydWN0dXJlcyB0aGF0IGEgY2VsbCBtYXkgaGF2ZSwgYnV0IHRoZXkgc2F5IG5v
dGhpbmcgYWJvdXQgd2hldGhlciBvciBub3QKKyAgICAvLyB0aGUgdmFsdWUgaXMga25vd24gdG8g
YmUgYSBjZWxsLiBNb3JlIGZvcm1hbGx5LCB0aGUgbV9zdHJ1Y3R1cmUgaXMgaXRzZWxmIGFuCisg
ICAgLy8gYWJzdHJhY3QgdmFsdWUgdGhhdCBjb25zaXN0cyBvZiB0aGUgdW5pb24gb2YgdGhlIHNl
dCBvZiBhbGwgbm9uLWNlbGwgdmFsdWVzCisgICAgLy8gYW5kIHRoZSBzZXQgb2YgY2VsbCB2YWx1
ZXMgdGhhdCBoYXZlIHRoZSBnaXZlbiBzdHJ1Y3R1cmUuIFRoaXMgYWJzdHJhY3QKKyAgICAvLyB2
YWx1ZSBpcyB0aGVuIHRoZSBpbnRlcnNlY3Rpb24gb2YgdGhlIG1fc3RydWN0dXJlIGFuZCB0aGUg
c2V0IG9mIHZhbHVlcworICAgIC8vIHdob3NlIHR5cGUgaXMgbV90eXBlLiBTbywgZm9yIGV4YW1w
bGUgaWYgbV90eXBlIGlzIFNwZWNGaW5hbHxTcGVjSW50MzIgYW5kCisgICAgLy8gbV9zdHJ1Y3R1
cmUgaXMgWzB4MTIzNDVdIHRoZW4gdGhpcyBhYnN0cmFjdCB2YWx1ZSBjb3JyZXNwb25kcyB0byB0
aGUgc2V0IG9mCisgICAgLy8gYWxsIGludGVnZXJzIHVuaWZpZWQgd2l0aCB0aGUgc2V0IG9mIGFs
bCBvYmplY3RzIHdpdGggc3RydWN0dXJlIDB4MTIzNDUuCiAgICAgU3BlY3VsYXRlZFR5cGUgbV90
eXBlOwogICAgIAogICAgIC8vIFRoaXMgaXMgYSBwcm92ZW4gY29uc3RyYWludCBvbiB0aGUgcG9z
c2libGUgaW5kZXhpbmcgdHlwZXMgdGhhdCB0aGlzIHZhbHVlCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50UG9zaXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50UG9zaXRpb24uaAkocmV2aXNpb24gMTgwOTEw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudFBvc2l0aW9uLmgJKHdv
cmtpbmcgY29weSkKQEAgLTQ2LDYgKzQ2LDkgQEAgcHVibGljOgogICAgIHZvaWQgYWRkVmFyaWFi
bGUoVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSkKICAgICB7CiAgICAgICAgIG1fdmFyaWFi
bGVzLmFwcGVuZCh2YXJpYWJsZSk7CisgICAgICAgIAorICAgICAgICAvLyBXZSBtYXkgc2V0IHRo
aXMgZWFybHkuIE1lcmdpbmcgaXQgaGVyZSBzYXZlcyB1cyB0aW1lIGluIHByZWRpY3Rpb24gcHJv
cGFnYXRpb24uCisgICAgICAgIHZhcmlhYmxlLT5tZXJnZVNob3VsZE5ldmVyVW5ib3gobV9zaG91
bGROZXZlclVuYm94KTsKICAgICB9CiAgICAgCiAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiBzb21l
VmFyaWFibGUoKSBjb25zdApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJh
eU1vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJy
YXlNb2RlLmNwcAkocmV2aXNpb24gMTgwOTEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBcnJheU1vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTcsOCArMTk3LDE1IEBAIEFy
cmF5TW9kZSBBcnJheU1vZGU6OnJlZmluZSgKICAgICAgICAgaWYgKGlzU3RyaW5nU3BlY3VsYXRp
b24oYmFzZSkpCiAgICAgICAgICAgICByZXR1cm4gd2l0aFR5cGUoQXJyYXk6OlN0cmluZyk7CiAg
ICAgICAgIAotICAgICAgICBpZiAoaXNBcmd1bWVudHNTcGVjdWxhdGlvbihiYXNlKSkKLSAgICAg
ICAgICAgIHJldHVybiB3aXRoVHlwZShBcnJheTo6QXJndW1lbnRzKTsKKyAgICAgICAgaWYgKGlz
RGlyZWN0QXJndW1lbnRzU3BlY3VsYXRpb24oYmFzZSkgfHwgaXNTY29wZWRBcmd1bWVudHNTcGVj
dWxhdGlvbihiYXNlKSkgeworICAgICAgICAgICAgLy8gSGFuZGxlIG91dC1vZi1ib3VuZHMgYWNj
ZXNzZXMgYXMgZ2VuZXJpYyBhY2Nlc3Nlcy4KKyAgICAgICAgICAgIGlmIChncmFwaC5oYXNFeGl0
U2l0ZShub2RlLT5vcmlnaW4uc2VtYW50aWMsIE91dE9mQm91bmRzKSB8fCAhaXNJbkJvdW5kcygp
KQorICAgICAgICAgICAgICAgIHJldHVybiBBcnJheU1vZGUoQXJyYXk6OkdlbmVyaWMpOworICAg
ICAgICAgICAgCisgICAgICAgICAgICBpZiAoaXNEaXJlY3RBcmd1bWVudHNTcGVjdWxhdGlvbihi
YXNlKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gd2l0aFR5cGUoQXJyYXk6OkRpcmVjdEFyZ3Vt
ZW50cyk7CisgICAgICAgICAgICByZXR1cm4gd2l0aFR5cGUoQXJyYXk6OlNjb3BlZEFyZ3VtZW50
cyk7CisgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIEFycmF5TW9kZSByZXN1bHQ7CiAgICAg
ICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewpAQCAtMzk2LDggKzQwMywxMSBAQCBib29sIEFycmF5
TW9kZTo6YWxyZWFkeUNoZWNrZWQoR3JhcGgmIGdyCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICAgICAgfSB9CiAgICAgICAgIAotICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czoKLSAgICAg
ICAgcmV0dXJuIHNwZWN1bGF0aW9uQ2hlY2tlZCh2YWx1ZS5tX3R5cGUsIFNwZWNBcmd1bWVudHMp
OworICAgIGNhc2UgQXJyYXk6OkRpcmVjdEFyZ3VtZW50czoKKyAgICAgICAgcmV0dXJuIHNwZWN1
bGF0aW9uQ2hlY2tlZCh2YWx1ZS5tX3R5cGUsIFNwZWNEaXJlY3RBcmd1bWVudHMpOworICAgICAg
ICAKKyAgICBjYXNlIEFycmF5OjpTY29wZWRBcmd1bWVudHM6CisgICAgICAgIHJldHVybiBzcGVj
dWxhdGlvbkNoZWNrZWQodmFsdWUubV90eXBlLCBTcGVjU2NvcGVkQXJndW1lbnRzKTsKICAgICAg
ICAgCiAgICAgY2FzZSBBcnJheTo6SW50OEFycmF5OgogICAgICAgICByZXR1cm4gc3BlY3VsYXRp
b25DaGVja2VkKHZhbHVlLm1fdHlwZSwgU3BlY0ludDhBcnJheSk7CkBAIC00NjEsOCArNDcxLDEw
IEBAIGNvbnN0IGNoYXIqIGFycmF5VHlwZVRvU3RyaW5nKEFycmF5OjpUeXAKICAgICAgICAgcmV0
dXJuICJBcnJheVN0b3JhZ2UiOwogICAgIGNhc2UgQXJyYXk6OlNsb3dQdXRBcnJheVN0b3JhZ2U6
CiAgICAgICAgIHJldHVybiAiU2xvd1B1dEFycmF5U3RvcmFnZSI7Ci0gICAgY2FzZSBBcnJheTo6
QXJndW1lbnRzOgotICAgICAgICByZXR1cm4gIkFyZ3VtZW50cyI7CisgICAgY2FzZSBBcnJheTo6
RGlyZWN0QXJndW1lbnRzOgorICAgICAgICByZXR1cm4gIkRpcmVjdEFyZ3VtZW50cyI7CisgICAg
Y2FzZSBBcnJheTo6U2NvcGVkQXJndW1lbnRzOgorICAgICAgICByZXR1cm4gIlNjb3BlZEFyZ3Vt
ZW50cyI7CiAgICAgY2FzZSBBcnJheTo6SW50OEFycmF5OgogICAgICAgICByZXR1cm4gIkludDhB
cnJheSI7CiAgICAgY2FzZSBBcnJheTo6SW50MTZBcnJheToKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuaAkocmV2aXNpb24gMTgwOTEwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC02NSw3ICs2NSw5IEBAIGVudW0gVHlwZSB7CiAgICAgQXJyYXlTdG9yYWdlLAogICAgIFNsb3dQ
dXRBcnJheVN0b3JhZ2UsCiAgICAgCi0gICAgQXJndW1lbnRzLAorICAgIERpcmVjdEFyZ3VtZW50
cywKKyAgICBTY29wZWRBcmd1bWVudHMsCisgICAgCiAgICAgSW50OEFycmF5LAogICAgIEludDE2
QXJyYXksCiAgICAgSW50MzJBcnJheSwKQEAgLTI5NCw3ICsyOTYsOCBAQCBwdWJsaWM6CiAgICAg
ICAgIGNhc2UgQXJyYXk6OlVucHJvZmlsZWQ6CiAgICAgICAgIGNhc2UgQXJyYXk6OkZvcmNlRXhp
dDoKICAgICAgICAgY2FzZSBBcnJheTo6R2VuZXJpYzoKLSAgICAgICAgY2FzZSBBcnJheTo6QXJn
dW1lbnRzOgorICAgICAgICBjYXNlIEFycmF5OjpEaXJlY3RBcmd1bWVudHM6CisgICAgICAgIGNh
c2UgQXJyYXk6OlNjb3BlZEFyZ3VtZW50czoKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMzIwLDExICszMjMs
OSBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBzd2l0Y2ggKHR5cGUoKSkgewogICAgICAgICBj
YXNlIEFycmF5OjpTdHJpbmc6CisgICAgICAgIGNhc2UgQXJyYXk6OkRpcmVjdEFyZ3VtZW50czoK
KyAgICAgICAgY2FzZSBBcnJheTo6U2NvcGVkQXJndW1lbnRzOgogICAgICAgICAgICAgcmV0dXJu
IEFycmF5TW9kZShBcnJheTo6R2VuZXJpYyk7Ci0jaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICAg
ICAgY2FzZSBBcnJheTo6QXJndW1lbnRzOgotICAgICAgICAgICAgcmV0dXJuIEFycmF5TW9kZShB
cnJheTo6R2VuZXJpYyk7Ci0jZW5kaWYKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIHJl
dHVybiAqdGhpczsKICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDE4MDkxMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yMjUsMTEgKzIyNSwxMSBAQCBwcml2YXRlOgogICAgIHZvaWQgbGlua0Jsb2NrKEJhc2ljQmxv
Y2sqLCBWZWN0b3I8QmFzaWNCbG9jayo+JiBwb3NzaWJsZVRhcmdldHMpOwogICAgIHZvaWQgbGlu
a0Jsb2NrcyhWZWN0b3I8VW5saW5rZWRCbG9jaz4mIHVubGlua2VkQmxvY2tzLCBWZWN0b3I8QmFz
aWNCbG9jayo+JiBwb3NzaWJsZVRhcmdldHMpOwogICAgIAotICAgIFZhcmlhYmxlQWNjZXNzRGF0
YSogbmV3VmFyaWFibGVBY2Nlc3NEYXRhKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBib29sIGlz
Q2FwdHVyZWQpCisgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiBuZXdWYXJpYWJsZUFjY2Vzc0RhdGEo
VmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCiAgICAgewogICAgICAgICBBU1NFUlQoIW9wZXJhbmQu
aXNDb25zdGFudCgpKTsKICAgICAgICAgCi0gICAgICAgIG1fZ3JhcGgubV92YXJpYWJsZUFjY2Vz
c0RhdGEuYXBwZW5kKFZhcmlhYmxlQWNjZXNzRGF0YShvcGVyYW5kLCBpc0NhcHR1cmVkKSk7Cisg
ICAgICAgIG1fZ3JhcGgubV92YXJpYWJsZUFjY2Vzc0RhdGEuYXBwZW5kKFZhcmlhYmxlQWNjZXNz
RGF0YShvcGVyYW5kKSk7CiAgICAgICAgIHJldHVybiAmbV9ncmFwaC5tX3ZhcmlhYmxlQWNjZXNz
RGF0YS5sYXN0KCk7CiAgICAgfQogICAgIApAQCAtMzU4LDcgKzM1OCw2IEBAIHByaXZhdGU6CiAg
ICAgICAgIH0KIAogICAgICAgICBOb2RlKiBub2RlID0gbV9jdXJyZW50QmxvY2stPnZhcmlhYmxl
c0F0VGFpbC5sb2NhbChsb2NhbCk7Ci0gICAgICAgIGJvb2wgaXNDYXB0dXJlZCA9IG1fY29kZUJs
b2NrLT5pc0NhcHR1cmVkKG9wZXJhbmQsIGlubGluZUNhbGxGcmFtZSgpKTsKICAgICAgICAgCiAg
ICAgICAgIC8vIFRoaXMgaGFzIHR3byBnb2FsczogMSkgbGluayB0b2dldGhlciB2YXJpYWJsZSBh
Y2Nlc3MgZGF0YXMsIGFuZCAyKQogICAgICAgICAvLyB0cnkgdG8gYXZvaWQgY3JlYXRpbmcgcmVk
dW5kYW50IEdldExvY2Fscy4gKDEpIGlzIHJlcXVpcmVkIGZvcgpAQCAtMzcwLDIwICszNjksMTcg
QEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIGlmIChub2RlKSB7CiAgICAgICAgICAgICB2
YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAgICAgICAgICAgdmFyaWFi
bGUtPm1lcmdlSXNDYXB0dXJlZChpc0NhcHR1cmVkKTsKICAgICAgICAgICAgIAotICAgICAgICAg
ICAgaWYgKCFpc0NhcHR1cmVkKSB7Ci0gICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgp
KSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBHZXRMb2NhbDoKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIG5vZGU7Ci0gICAgICAgICAgICAgICAgY2FzZSBTZXRMb2NhbDoKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKLSAgICAgICAgICAgICAgICBk
ZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICAgICAgICAgIGNhc2UgR2V0TG9j
YWw6CisgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7CisgICAgICAgICAgICBjYXNlIFNldExv
Y2FsOgorICAgICAgICAgICAgICAgIHJldHVybiBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CisgICAg
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQog
ICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHZhcmlhYmxlID0gbmV3VmFyaWFibGVBY2Nlc3NE
YXRhKG9wZXJhbmQsIGlzQ2FwdHVyZWQpOworICAgICAgICAgICAgdmFyaWFibGUgPSBuZXdWYXJp
YWJsZUFjY2Vzc0RhdGEob3BlcmFuZCk7CiAgICAgICAgIAogICAgICAgICBub2RlID0gaW5qZWN0
TGF6eU9wZXJhbmRTcGVjdWxhdGlvbihhZGRUb0dyYXBoKEdldExvY2FsLCBPcEluZm8odmFyaWFi
bGUpKSk7CiAgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwubG9jYWwobG9j
YWwpID0gbm9kZTsKQEAgLTM5NiwxNSArMzkyLDE0IEBAIHByaXZhdGU6CiAgICAgICAgIG1fY3Vy
cmVudFNlbWFudGljT3JpZ2luID0gc2VtYW50aWNPcmlnaW47CiAKICAgICAgICAgdW5zaWduZWQg
bG9jYWwgPSBvcGVyYW5kLnRvTG9jYWwoKTsKLSAgICAgICAgYm9vbCBpc0NhcHR1cmVkID0gbV9j
b2RlQmxvY2stPmlzQ2FwdHVyZWQob3BlcmFuZCwgaW5saW5lQ2FsbEZyYW1lKCkpOwogICAgICAg
ICAKICAgICAgICAgaWYgKHNldE1vZGUgIT0gSW1tZWRpYXRlTmFrZWRTZXQpIHsKICAgICAgICAg
ICAgIEFyZ3VtZW50UG9zaXRpb24qIGFyZ3VtZW50UG9zaXRpb24gPSBmaW5kQXJndW1lbnRQb3Np
dGlvbkZvckxvY2FsKG9wZXJhbmQpOwotICAgICAgICAgICAgaWYgKGlzQ2FwdHVyZWQgfHwgYXJn
dW1lbnRQb3NpdGlvbikKKyAgICAgICAgICAgIGlmIChhcmd1bWVudFBvc2l0aW9uKQogICAgICAg
ICAgICAgICAgIGZsdXNoRGlyZWN0KG9wZXJhbmQsIGFyZ3VtZW50UG9zaXRpb24pOwogICAgICAg
ICB9CiAKLSAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBu
ZXdWYXJpYWJsZUFjY2Vzc0RhdGEob3BlcmFuZCwgaXNDYXB0dXJlZCk7CisgICAgICAgIFZhcmlh
YmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbmV3VmFyaWFibGVBY2Nlc3NEYXRh
KG9wZXJhbmQpOwogICAgICAgICB2YXJpYWJsZUFjY2Vzc0RhdGEtPm1lcmdlU3RydWN0dXJlQ2hl
Y2tIb2lzdGluZ0ZhaWxlZCgKICAgICAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFBy
b2ZpbGUuaGFzRXhpdFNpdGUoc2VtYW50aWNPcmlnaW4uYnl0ZWNvZGVJbmRleCwgQmFkQ2FjaGUp
KTsKICAgICAgICAgdmFyaWFibGVBY2Nlc3NEYXRhLT5tZXJnZUNoZWNrQXJyYXlIb2lzdGluZ0Zh
aWxlZCgKQEAgLTQyMywyNiArNDE4LDIyIEBAIHByaXZhdGU6CiAgICAgICAgIEFTU0VSVChhcmd1
bWVudCA8IG1fbnVtQXJndW1lbnRzKTsKICAgICAgICAgCiAgICAgICAgIE5vZGUqIG5vZGUgPSBt
X2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmFyZ3VtZW50KGFyZ3VtZW50KTsKLSAgICAg
ICAgYm9vbCBpc0NhcHR1cmVkID0gbV9jb2RlQmxvY2stPmlzQ2FwdHVyZWQob3BlcmFuZCk7CiAK
ICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZTsKICAgICAgICAgCiAgICAgICAg
IGlmIChub2RlKSB7CiAgICAgICAgICAgICB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNz
RGF0YSgpOwotICAgICAgICAgICAgdmFyaWFibGUtPm1lcmdlSXNDYXB0dXJlZChpc0NhcHR1cmVk
KTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKCFpc0NhcHR1cmVkKSB7Ci0gICAgICAg
ICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBHZXRM
b2NhbDoKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7Ci0gICAgICAgICAgICAgICAg
Y2FzZSBTZXRMb2NhbDoKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGUtPmNoaWxkMSgp
Lm5vZGUoKTsKLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkp
IHsKKyAgICAgICAgICAgIGNhc2UgR2V0TG9jYWw6CisgICAgICAgICAgICAgICAgcmV0dXJuIG5v
ZGU7CisgICAgICAgICAgICBjYXNlIFNldExvY2FsOgorICAgICAgICAgICAgICAgIHJldHVybiBu
b2RlLT5jaGlsZDEoKS5ub2RlKCk7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHZh
cmlhYmxlID0gbmV3VmFyaWFibGVBY2Nlc3NEYXRhKG9wZXJhbmQsIGlzQ2FwdHVyZWQpOworICAg
ICAgICAgICAgdmFyaWFibGUgPSBuZXdWYXJpYWJsZUFjY2Vzc0RhdGEob3BlcmFuZCk7CiAgICAg
ICAgIAogICAgICAgICBub2RlID0gaW5qZWN0TGF6eU9wZXJhbmRTcGVjdWxhdGlvbihhZGRUb0dy
YXBoKEdldExvY2FsLCBPcEluZm8odmFyaWFibGUpKSk7CiAgICAgICAgIG1fY3VycmVudEJsb2Nr
LT52YXJpYWJsZXNBdFRhaWwuYXJndW1lbnQoYXJndW1lbnQpID0gbm9kZTsKQEAgLTQ1Niw5ICs0
NDcsNyBAQCBwcml2YXRlOgogICAgICAgICB1bnNpZ25lZCBhcmd1bWVudCA9IG9wZXJhbmQudG9B
cmd1bWVudCgpOwogICAgICAgICBBU1NFUlQoYXJndW1lbnQgPCBtX251bUFyZ3VtZW50cyk7CiAg
ICAgICAgIAotICAgICAgICBib29sIGlzQ2FwdHVyZWQgPSBtX2NvZGVCbG9jay0+aXNDYXB0dXJl
ZChvcGVyYW5kKTsKLQotICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNz
RGF0YSA9IG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShvcGVyYW5kLCBpc0NhcHR1cmVkKTsKKyAgICAg
ICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBuZXdWYXJpYWJsZUFj
Y2Vzc0RhdGEob3BlcmFuZCk7CiAKICAgICAgICAgLy8gQWx3YXlzIGZsdXNoIGFyZ3VtZW50cywg
ZXhjZXB0IGZvciAndGhpcycuIElmICd0aGlzJyBpcyBjcmVhdGVkIGJ5IHVzLAogICAgICAgICAv
LyB0aGVuIG1ha2Ugc3VyZSB0aGF0IGl0J3MgbmV2ZXIgdW5ib3hlZC4KQEAgLTUyNCwxOSArNTEz
LDE2IEBAIHByaXZhdGU6CiAgICAgCiAgICAgdm9pZCBmbHVzaERpcmVjdChWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCwgQXJndW1lbnRQb3NpdGlvbiogYXJndW1lbnRQb3NpdGlvbikKICAgICB7Ci0g
ICAgICAgIGJvb2wgaXNDYXB0dXJlZCA9IG1fY29kZUJsb2NrLT5pc0NhcHR1cmVkKG9wZXJhbmQs
IGlubGluZUNhbGxGcmFtZSgpKTsKLSAgICAgICAgCiAgICAgICAgIEFTU0VSVCghb3BlcmFuZC5p
c0NvbnN0YW50KCkpOwogICAgICAgICAKICAgICAgICAgTm9kZSogbm9kZSA9IG1fY3VycmVudEJs
b2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChvcGVyYW5kKTsKICAgICAgICAgCiAgICAgICAg
IFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGU7CiAgICAgICAgIAotICAgICAgICBpZiAobm9k
ZSkgeworICAgICAgICBpZiAobm9kZSkKICAgICAgICAgICAgIHZhcmlhYmxlID0gbm9kZS0+dmFy
aWFibGVBY2Nlc3NEYXRhKCk7Ci0gICAgICAgICAgICB2YXJpYWJsZS0+bWVyZ2VJc0NhcHR1cmVk
KGlzQ2FwdHVyZWQpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHZhcmlhYmxlID0gbmV3
VmFyaWFibGVBY2Nlc3NEYXRhKG9wZXJhbmQsIGlzQ2FwdHVyZWQpOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICB2YXJpYWJsZSA9IG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShvcGVyYW5kKTsKICAg
ICAgICAgCiAgICAgICAgIG5vZGUgPSBhZGRUb0dyYXBoKEZsdXNoLCBPcEluZm8odmFyaWFibGUp
KTsKICAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKG9wZXJh
bmQpID0gbm9kZTsKQEAgLTU1NywxMSArNTQzLDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIG51
bUFyZ3VtZW50cyA9IGlubGluZVN0YWNrRW50cnktPm1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJz
KCk7CiAgICAgICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQgPSBudW1Bcmd1bWVudHM7IGFyZ3Vt
ZW50LS0gPiAxOykKICAgICAgICAgICAgIGZsdXNoRGlyZWN0KGlubGluZVN0YWNrRW50cnktPnJl
bWFwT3BlcmFuZCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChhcmd1bWVudCkpKTsKLSAgICAg
ICAgZm9yIChpbnQgbG9jYWwgPSAwOyBsb2NhbCA8IGlubGluZVN0YWNrRW50cnktPm1fY29kZUJs
b2NrLT5tX251bVZhcnM7ICsrbG9jYWwpIHsKLSAgICAgICAgICAgIGlmICghaW5saW5lU3RhY2tF
bnRyeS0+bV9jb2RlQmxvY2stPmlzQ2FwdHVyZWQodmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwobG9j
YWwpKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGZsdXNoRGlyZWN0
KGlubGluZVN0YWNrRW50cnktPnJlbWFwT3BlcmFuZCh2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChs
b2NhbCkpKTsKLSAgICAgICAgfQogICAgIH0KIAogICAgIHZvaWQgZmx1c2hGb3JUZXJtaW5hbCgp
CkBAIC04NTYsNiArODM3LDE4IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBub2RlOwogICAg
IH0KICAgICAKKyAgICB2b2lkIG5vdGljZUFyZ3VtZW50c1VzZSgpCisgICAgeworICAgICAgICBt
X2dyYXBoLm1faGFzQXJndW1lbnRzID0gdHJ1ZTsKKyAgICAgICAgCisgICAgICAgIC8vIEFsbCBv
ZiB0aGUgYXJndW1lbnRzIGluIHRoaXMgZnVuY3Rpb24gbmVlZCB0byBiZSBmb3JtYXR0ZWQgYXMg
SlNWYWx1ZXMgYmVjYXVzZSB3ZSB3aWxsCisgICAgICAgIC8vIGxvYWQgZnJvbSB0aGVtIGluIGEg
cmFuZG9tLWFjY2VzcyBmYXNoaW9uIGFuZCB3ZSBkb24ndCB3YW50IHRvIGhhdmUgdG8gc3dpdGNo
IG9uCisgICAgICAgIC8vIGZvcm1hdC4KKyAgICAgICAgCisgICAgICAgIGZvciAoQXJndW1lbnRQ
b3NpdGlvbiogYXJndW1lbnQgOiBtX2lubGluZVN0YWNrVG9wLT5tX2FyZ3VtZW50UG9zaXRpb25z
KQorICAgICAgICAgICAgYXJndW1lbnQtPm1lcmdlU2hvdWxkTmV2ZXJVbmJveCh0cnVlKTsKKyAg
ICB9CisgICAgCiAgICAgdm9pZCBidWlsZE9wZXJhbmRNYXBzSWZOZWNlc3NhcnkoKTsKICAgICAK
ICAgICBWTSogbV92bTsKQEAgLTI1MzksNyArMjUzMiw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6
OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgbV9ncmFwaC5tX2FyZ3VtZW50cy5yZXNpemUo
bV9udW1Bcmd1bWVudHMpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0gMDsgYXJn
dW1lbnQgPCBtX251bUFyZ3VtZW50czsgKythcmd1bWVudCkgewogICAgICAgICAgICAgVmFyaWFi
bGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5ld1ZhcmlhYmxlQWNjZXNzRGF0YSgKLSAgICAgICAg
ICAgICAgICB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChhcmd1bWVudCksIG1fY29kZUJsb2Nr
LT5pc0NhcHR1cmVkKHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGFyZ3VtZW50KSkpOworICAg
ICAgICAgICAgICAgIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGFyZ3VtZW50KSk7CiAgICAg
ICAgICAgICB2YXJpYWJsZS0+bWVyZ2VTdHJ1Y3R1cmVDaGVja0hvaXN0aW5nRmFpbGVkKAogICAg
ICAgICAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUo
bV9jdXJyZW50SW5kZXgsIEJhZENhY2hlKSk7CiAgICAgICAgICAgICB2YXJpYWJsZS0+bWVyZ2VD
aGVja0FycmF5SG9pc3RpbmdGYWlsZWQoCkBAIC0zNTQyLDggKzM1MzUsNyBAQCBib29sIEJ5dGVD
b2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSBnZXRQcmVkaWN0aW9uKCk7CiAg
ICAgICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3Rlcihkc3QpLAotICAgICAgICAgICAgICAg
ICAgICBhZGRUb0dyYXBoKEdldENsb3N1cmVWYXIsIE9wSW5mbyhvcGVyYW5kKSwgT3BJbmZvKHBy
ZWRpY3Rpb24pLCAKLSAgICAgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoR2V0Q2xvc3Vy
ZVJlZ2lzdGVycywgc2NvcGVOb2RlKSkpOworICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBo
KEdldENsb3N1cmVWYXIsIE9wSW5mbyhvcGVyYW5kKSwgT3BJbmZvKHByZWRpY3Rpb24pLCBzY29w
ZU5vZGUpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIGNhc2UgRHluYW1pYzoKQEAgLTM2MDgsMTMgKzM2MDAsMTIgQEAgYm9vbCBCeXRlQ29kZVBh
cnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgY2FzZSBDbG9zdXJlVmFyOgog
ICAgICAgICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczogewogICAg
ICAgICAgICAgICAgIE5vZGUqIHNjb3BlTm9kZSA9IGdldChWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUp
KTsKLSAgICAgICAgICAgICAgICBOb2RlKiBzY29wZVJlZ2lzdGVycyA9IGFkZFRvR3JhcGgoR2V0
Q2xvc3VyZVJlZ2lzdGVycywgc2NvcGVOb2RlKTsKICAgICAgICAgICAgICAgICBOb2RlKiB2YWx1
ZU5vZGUgPSBnZXQoVmlydHVhbFJlZ2lzdGVyKHZhbHVlKSk7CiAKICAgICAgICAgICAgICAgICBp
ZiAod2F0Y2hwb2ludHMgJiYgd2F0Y2hwb2ludHMtPnN0YXRlKCkgIT0gSXNJbnZhbGlkYXRlZCkK
ICAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChOb3RpZnlXcml0ZSwgT3BJbmZvKHdhdGNo
cG9pbnRzKSwgdmFsdWVOb2RlKTsKIAotICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoUHV0Q2xv
c3VyZVZhciwgT3BJbmZvKG9wZXJhbmQpLCBzY29wZU5vZGUsIHNjb3BlUmVnaXN0ZXJzLCB2YWx1
ZU5vZGUpOworICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoUHV0Q2xvc3VyZVZhciwgT3BJbmZv
KG9wZXJhbmQpLCBzY29wZU5vZGUsIHZhbHVlTm9kZSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBjYXNlIER5bmFtaWM6CkBAIC0zNjQ0LDE1ICsz
NjM1LDggQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAg
ICAgICAgTkVYVF9PUENPREUob3BfbG9vcF9oaW50KTsKICAgICAgICAgfQogICAgICAgICAgICAg
Ci0gICAgICAgIGNhc2Ugb3BfaW5pdF9sYXp5X3JlZzogewotICAgICAgICAgICAgc2V0KFZpcnR1
YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSwganNDb25zdGFudChK
U1ZhbHVlKCkpKTsKLSAgICAgICAgICAgIEFTU0VSVChvcGVyYW5kSXNMb2NhbChjdXJyZW50SW5z
dHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSk7Ci0gICAgICAgICAgICBtX2dyYXBoLm1fbGF6eVZhcnMu
c2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKS50b0xv
Y2FsKCkpOwotICAgICAgICAgICAgTkVYVF9PUENPREUob3BfaW5pdF9sYXp5X3JlZyk7Ci0gICAg
ICAgIH0KLSAgICAgICAgICAgIAogICAgICAgICBjYXNlIG9wX2NyZWF0ZV9sZXhpY2FsX2Vudmly
b25tZW50OiB7Ci0gICAgICAgICAgICBOb2RlKiBsZXhpY2FsRW52aXJvbm1lbnQgPSBhZGRUb0dy
YXBoKENyZWF0ZUFjdGl2YXRpb24sIGdldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0
aW9uWzFdLnUub3BlcmFuZCkpLCBnZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlv
blsyXS51Lm9wZXJhbmQpKSk7CisgICAgICAgICAgICBOb2RlKiBsZXhpY2FsRW52aXJvbm1lbnQg
PSBhZGRUb0dyYXBoKENyZWF0ZUFjdGl2YXRpb24sIGdldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVu
dEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCkpKTsKICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVn
aXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCksIGxleGljYWxFbnZpcm9ubWVu
dCk7CiAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsy
XS51Lm9wZXJhbmQpLCBsZXhpY2FsRW52aXJvbm1lbnQpOwogICAgICAgICAgICAgTkVYVF9PUENP
REUob3BfY3JlYXRlX2xleGljYWxfZW52aXJvbm1lbnQpOwpAQCAtMzY2Myw0NiArMzY0Nyw0OSBA
QCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICBO
RVhUX09QQ09ERShvcF9nZXRfc2NvcGUpOwogICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAg
ICAgY2FzZSBvcF9jcmVhdGVfYXJndW1lbnRzOiB7Ci0gICAgICAgICAgICBtX2dyYXBoLm1faGFz
QXJndW1lbnRzID0gdHJ1ZTsKLSAgICAgICAgICAgIE5vZGUqIGNyZWF0ZUFyZ3VtZW50cyA9IGFk
ZFRvR3JhcGgoQ3JlYXRlQXJndW1lbnRzLCBnZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0
cnVjdGlvblsxXS51Lm9wZXJhbmQpKSk7CisgICAgICAgIGNhc2Ugb3BfY3JlYXRlX2RpcmVjdF9h
cmd1bWVudHM6IHsKKyAgICAgICAgICAgIG5vdGljZUFyZ3VtZW50c1VzZSgpOworICAgICAgICAg
ICAgTm9kZSogY3JlYXRlQXJndW1lbnRzID0gYWRkVG9HcmFwaChDcmVhdGVEaXJlY3RBcmd1bWVu
dHMpOwogICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25b
MV0udS5vcGVyYW5kKSwgY3JlYXRlQXJndW1lbnRzKTsKLSAgICAgICAgICAgIHNldCh1bm1vZGlm
aWVkQXJndW1lbnRzUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsx
XS51Lm9wZXJhbmQpKSwgY3JlYXRlQXJndW1lbnRzKTsKLSAgICAgICAgICAgIE5FWFRfT1BDT0RF
KG9wX2NyZWF0ZV9hcmd1bWVudHMpOwotICAgICAgICB9Ci0KLSAgICAgICAgY2FzZSBvcF90ZWFy
X29mZl9hcmd1bWVudHM6IHsKLSAgICAgICAgICAgIG1fZ3JhcGgubV9oYXNBcmd1bWVudHMgPSB0
cnVlOwotICAgICAgICAgICAgYWRkVG9HcmFwaChUZWFyT2ZmQXJndW1lbnRzLCBnZXQoVmlydHVh
bFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpKSwgZ2V0KFZpcnR1YWxS
ZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSkpOwotICAgICAgICAgICAg
TkVYVF9PUENPREUob3BfdGVhcl9vZmZfYXJndW1lbnRzKTsKKyAgICAgICAgICAgIE5FWFRfT1BD
T0RFKG9wX2NyZWF0ZV9kaXJlY3RfYXJndW1lbnRzKTsKICAgICAgICAgfQogICAgICAgICAgICAg
Ci0gICAgICAgIGNhc2Ugb3BfZ2V0X2FyZ3VtZW50c19sZW5ndGg6IHsKLSAgICAgICAgICAgIG1f
Z3JhcGgubV9oYXNBcmd1bWVudHMgPSB0cnVlOwotICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdp
c3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSwgYWRkVG9HcmFwaChHZXRNeUFy
Z3VtZW50c0xlbmd0aFNhZmUpKTsKLSAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2dldF9hcmd1
bWVudHNfbGVuZ3RoKTsKKyAgICAgICAgY2FzZSBvcF9jcmVhdGVfc2NvcGVkX2FyZ3VtZW50czog
eworICAgICAgICAgICAgbm90aWNlQXJndW1lbnRzVXNlKCk7CisgICAgICAgICAgICBOb2RlKiBj
cmVhdGVBcmd1bWVudHMgPSBhZGRUb0dyYXBoKENyZWF0ZVNjb3BlZEFyZ3VtZW50cywgZ2V0KFZp
cnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSkpOworICAgICAg
ICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5k
KSwgY3JlYXRlQXJndW1lbnRzKTsKKyAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2NyZWF0ZV9z
Y29wZWRfYXJndW1lbnRzKTsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2Ugb3BfY3JlYXRlX291
dF9vZl9iYW5kX2FyZ3VtZW50czogeworICAgICAgICAgICAgbm90aWNlQXJndW1lbnRzVXNlKCk7
CisgICAgICAgICAgICBOb2RlKiBjcmVhdGVBcmd1bWVudHMgPSBhZGRUb0dyYXBoKENyZWF0ZU91
dE9mQmFuZEFyZ3VtZW50cyk7CisgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJl
bnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpLCBjcmVhdGVBcmd1bWVudHMpOworICAgICAgICAg
ICAgTkVYVF9PUENPREUob3BfY3JlYXRlX291dF9vZl9iYW5kX2FyZ3VtZW50cyk7CiAgICAgICAg
IH0KICAgICAgICAgICAgIAotICAgICAgICBjYXNlIG9wX2dldF9hcmd1bWVudF9ieV92YWw6IHsK
LSAgICAgICAgICAgIG1fZ3JhcGgubV9oYXNBcmd1bWVudHMgPSB0cnVlOworICAgICAgICBjYXNl
IG9wX2dldF9mcm9tX2FyZ3VtZW50czogewogICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3Rl
cihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSwKICAgICAgICAgICAgICAgICBhZGRU
b0dyYXBoKAotICAgICAgICAgICAgICAgICAgICBHZXRNeUFyZ3VtZW50QnlWYWxTYWZlLCBPcElu
Zm8oMCksIE9wSW5mbyhnZXRQcmVkaWN0aW9uKCkpLAotICAgICAgICAgICAgICAgICAgICBnZXQo
VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpKSkpOwotICAg
ICAgICAgICAgTkVYVF9PUENPREUob3BfZ2V0X2FyZ3VtZW50X2J5X3ZhbCk7CisgICAgICAgICAg
ICAgICAgICAgIEdldEZyb21Bcmd1bWVudHMsCisgICAgICAgICAgICAgICAgICAgIE9wSW5mbyhj
dXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKSwKKyAgICAgICAgICAgICAgICAgICAgT3BJ
bmZvKGdldFByZWRpY3Rpb24oKSksCisgICAgICAgICAgICAgICAgICAgIGdldChWaXJ0dWFsUmVn
aXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCkpKSk7CisgICAgICAgICAgICBO
RVhUX09QQ09ERShvcF9nZXRfZnJvbV9hcmd1bWVudHMpOworICAgICAgICB9CisgICAgICAgICAg
ICAKKyAgICAgICAgY2FzZSBvcF9wdXRfdG9fYXJndW1lbnRzOiB7CisgICAgICAgICAgICBhZGRU
b0dyYXBoKAorICAgICAgICAgICAgICAgIFB1dFRvQXJndW1lbnRzLAorICAgICAgICAgICAgICAg
IE9wSW5mbyhjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSwKKyAgICAgICAgICAgICAg
ICBnZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpKSwK
KyAgICAgICAgICAgICAgICBnZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnNydHVjdGlvblsz
XS51Lm9wZXJhbmQpKSk7CisgICAgICAgICAgICBORVhUX09QQ09ERShvcF9wdXRfdG9fYXJndW1l
bnRzKTsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2Ugb3BfbmV3X2Z1bmM6
IHsKLSAgICAgICAgICAgIGlmICghY3VycmVudEluc3RydWN0aW9uWzRdLnUub3BlcmFuZCkgewot
ICAgICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFd
LnUub3BlcmFuZCksCi0gICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoTmV3RnVuY3Rpb25O
b0NoZWNrLCBPcEluZm8oY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCksIGdldChWaXJ0
dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCkpKSk7Ci0gICAgICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVu
dEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCksCi0gICAgICAgICAgICAgICAgICAgIGFkZFRvR3Jh
cGgoCi0gICAgICAgICAgICAgICAgICAgICAgICBOZXdGdW5jdGlvbiwKLSAgICAgICAgICAgICAg
ICAgICAgICAgIE9wSW5mbyhjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGdldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9u
WzFdLnUub3BlcmFuZCkpLCBnZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsy
XS51Lm9wZXJhbmQpKSkpOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgc2V0KFZpcnR1YWxS
ZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSwKKyAgICAgICAgICAgICAg
ICBhZGRUb0dyYXBoKE5ld0Z1bmN0aW9uLCBPcEluZm8oY3VycmVudEluc3RydWN0aW9uWzNdLnUu
b3BlcmFuZCksIGdldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3Bl
cmFuZCkpKSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9uZXdfZnVuYyk7CiAgICAgICAg
IH0KIApAQCAtMzk0NywyMiArMzkzNCw2IEBAIEJ5dGVDb2RlUGFyc2VyOjpJbmxpbmVTdGFja0Vu
dHJ5OjpJbmxpbmUKICAgICAgICAgbV9pbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5yZXNpemUo
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpOyAvLyBTZXQgdGhlIG51bWJlciBvZiBhcmd1bWVu
dHMgaW5jbHVkaW5nIHRoaXMsIGJ1dCBkb24ndCBjb25maWd1cmUgdGhlIHZhbHVlIHJlY292ZXJp
ZXMsIHlldC4KICAgICAgICAgbV9pbmxpbmVDYWxsRnJhbWUtPmtpbmQgPSBraW5kOwogICAgICAg
ICAKLSAgICAgICAgaWYgKG1faW5saW5lQ2FsbEZyYW1lLT5jYWxsZXIuaW5saW5lQ2FsbEZyYW1l
KQotICAgICAgICAgICAgbV9pbmxpbmVDYWxsRnJhbWUtPmNhcHR1cmVkVmFycyA9IG1faW5saW5l
Q2FsbEZyYW1lLT5jYWxsZXIuaW5saW5lQ2FsbEZyYW1lLT5jYXB0dXJlZFZhcnM7Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgICAgIG1faW5saW5lQ2FsbEZyYW1lLT5jYXB0dXJlZFZhcnMgPSBieXRl
Q29kZVBhcnNlci0+bV9ncmFwaC5tX291dGVybW9zdENhcHR1cmVkVmFyczsKLQotICAgICAgICBm
b3IgKGludCBpID0gYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXM7IGktLTspIHsKLSAgICAgICAg
ICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudCA9IHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50
KGkpOwotICAgICAgICAgICAgaWYgKGNvZGVCbG9jay0+aXNDYXB0dXJlZChhcmd1bWVudCkpCi0g
ICAgICAgICAgICAgICAgbV9pbmxpbmVDYWxsRnJhbWUtPmNhcHR1cmVkVmFycy5zZXQoVmlydHVh
bFJlZ2lzdGVyKGFyZ3VtZW50Lm9mZnNldCgpICsgbV9pbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zm
c2V0KS50b0xvY2FsKCkpOwotICAgICAgICB9Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSBjb2Rl
QmxvY2stPm1fbnVtVmFyczsgaS0tOykgewotICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGxv
Y2FsID0gdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaSk7Ci0gICAgICAgICAgICBpZiAoY29kZUJs
b2NrLT5pc0NhcHR1cmVkKGxvY2FsKSkKLSAgICAgICAgICAgICAgICBtX2lubGluZUNhbGxGcmFt
ZS0+Y2FwdHVyZWRWYXJzLnNldChWaXJ0dWFsUmVnaXN0ZXIobG9jYWwub2Zmc2V0KCkgKyBtX2lu
bGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQpLnRvTG9jYWwoKSk7Ci0gICAgICAgIH0KLQogICAg
ICAgICBieXRlQ29kZVBhcnNlci0+YnVpbGRPcGVyYW5kTWFwc0lmTmVjZXNzYXJ5KCk7CiAgICAg
ICAgIAogICAgICAgICBtX2lkZW50aWZpZXJSZW1hcC5yZXNpemUoY29kZUJsb2NrLT5udW1iZXJP
ZklkZW50aWZpZXJzKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDUFNS
ZXRocmVhZGluZ1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0NQU1JldGhyZWFkaW5nUGhhc2UuY3BwCShyZXZpc2lvbiAxODA5MTApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NQU1JldGhyZWFkaW5nUGhhc2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xOTIsMjEgKzE5Miw2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAodmFyaWFi
bGUtPmlzQ2FwdHVyZWQoKSkgewotICAgICAgICAgICAgICAgIHZhcmlhYmxlLT5zZXRJc0xvYWRl
ZEZyb20odHJ1ZSk7Ci0gICAgICAgICAgICAgICAgaWYgKG90aGVyTm9kZS0+b3AoKSA9PSBHZXRM
b2NhbCkKLSAgICAgICAgICAgICAgICAgICAgb3RoZXJOb2RlID0gb3RoZXJOb2RlLT5jaGlsZDEo
KS5ub2RlKCk7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBBU1NF
UlQob3RoZXJOb2RlLT5vcCgpID09IFNldExvY2FsIHx8IG90aGVyTm9kZS0+b3AoKSA9PSBTZXRB
cmd1bWVudCk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgQVNTRVJUKG90aGVy
Tm9kZS0+b3AoKSA9PSBQaGkgfHwgb3RoZXJOb2RlLT5vcCgpID09IFNldExvY2FsIHx8IG90aGVy
Tm9kZS0+b3AoKSA9PSBTZXRBcmd1bWVudCk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgLy8gS2VlcCB0aGlzIEdldExvY2FsIGJ1dCBsaW5rIGl0IHRvIHRoZSBwcmlvciBvbmVz
LgotICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLnNldENoaWxkMShFZGdlKG90aGVyTm9k
ZSkpOwotICAgICAgICAgICAgICAgIG1fYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5hdEZvcjxvcGVy
YW5kS2luZD4oaWR4KSA9IG5vZGU7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAob3RoZXJOb2RlLT5vcCgpID09IEdl
dExvY2FsKSB7CiAgICAgICAgICAgICAgICAgLy8gUmVwbGFjZSBhbGwgcmVmZXJlbmNlcyB0byB0
aGlzIEdldExvY2FsIHdpdGggb3RoZXJOb2RlLgogICAgICAgICAgICAgICAgIG5vZGUtPnJlcGxh
Y2VtZW50ID0gb3RoZXJOb2RlOwpAQCAtMzM1LDEwICszMjAsOCBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgLy8gdGhlcmUgZXZlciB3YXMgYSBTZXRMb2NhbCBhbmQgaXQgd2FzIGZvbGxvd2VkIGJ5
IEZsdXNoZXMsIHRoZW4gdGhlIHRhaWwKICAgICAgICAgICAgIC8vIHZhcmlhYmxlIHdpbGwgYmUg
YSBTZXRMb2NhbCBhbmQgbm90IHRob3NlIHN1YnNlcXVlbnQgRmx1c2hlcy4KICAgICAgICAgICAg
IC8vCi0gICAgICAgICAgICAvLyBDaGlsZCBvZiBHZXRMb2NhbDogdGhlIG9wZXJhdGlvbiB0aGF0
IHRoZSBHZXRMb2NhbCBrZWVwcyBhbGl2ZS4gRm9yCi0gICAgICAgICAgICAvLyB1bmNhcHR1cmVk
IGxvY2FscywgaXQgbWF5IGJlIGEgUGhpIGZyb20gdGhlIGN1cnJlbnQgYmxvY2suIEZvciBhcmd1
bWVudHMsCi0gICAgICAgICAgICAvLyBpdCBtYXkgYmUgYSBTZXRBcmd1bWVudC4gRm9yIGNhcHR1
cmVkIGxvY2FscyBhbmQgYXJndW1lbnRzIGl0IG1heSBhbHNvIGJlCi0gICAgICAgICAgICAvLyBh
IFNldExvY2FsLgorICAgICAgICAgICAgLy8gQ2hpbGQgb2YgR2V0TG9jYWw6IHRoZSBvcGVyYXRp
b24gdGhhdCB0aGUgR2V0TG9jYWwga2VlcHMgYWxpdmUuIEl0IG1heSBiZQorICAgICAgICAgICAg
Ly8gYSBQaGkgZnJvbSB0aGUgY3VycmVudCBibG9jay4gRm9yIGFyZ3VtZW50cywgaXQgbWF5IGJl
IGEgU2V0QXJndW1lbnQuCiAgICAgICAgICAgICAvLwogICAgICAgICAgICAgLy8gQ2hpbGQgb2Yg
U2V0TG9jYWw6IG11c3QgYmUgYSB2YWx1ZSBwcm9kdWNpbmcgbm9kZS4KICAgICAgICAgICAgIC8v
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcAkocmV2aXNp
b24gMTgwOTEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMyNiw4ICszMjYsOCBAQCBwcml2YXRlOgogICAgICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgCiAgICAgICAgICAgICBpZiAobV9ub2RlLT5vcCgpID09IEdl
dExvY2FsKSB7Ci0gICAgICAgICAgICAgICAgLy8gRm9yIHVuY2FwdHVyZWQgbG9jYWxzLCB1c3Vh
bGx5IHRoZSBDUFMgcmV0aHJlYWRpbmcgcGhhc2UgZG9lcyB0aGlzLiBCdXQgaXQncyBPSwotICAg
ICAgICAgICAgICAgIC8vIGZvciB1cyB0byBtZXNzIHdpdGggbG9jYWxzIC0gcmVnYXJkbGVzcyBv
ZiB0aGVpciBjYXB0dXJlZG5lc3MgLSBzbyBsb25nIGFzOgorICAgICAgICAgICAgICAgIC8vIFVz
dWFsbHkgdGhlIENQUyByZXRocmVhZGluZyBwaGFzZSBkb2VzIHRoaXMuIEJ1dCBpdCdzIE9LIGZv
ciB1cyB0byBtZXNzIHdpdGgKKyAgICAgICAgICAgICAgICAvLyBsb2NhbHMgc28gbG9uZyBhczoK
ICAgICAgICAgICAgICAgICAvLyAKICAgICAgICAgICAgICAgICAvLyAtIFdlIGRldGhyZWFkIHRo
ZSBncmFwaC4gQW55IGNoYW5nZXMgd2UgbWFrZSBtYXkgaW52YWxpZGF0ZSB0aGUgYXNzdW1wdGlv
bnMgb2YKICAgICAgICAgICAgICAgICAvLyAgIG91ciBDUFMgZm9ybSwgcGFydGljdWxhcmx5IGlm
IHRoaXMgR2V0TG9jYWwgaXMgbGlua2VkIHRvIHRoZSB2YXJpYWJsZXNBdFRhaWwuCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkocmV2aXNpb24gMTgwOTEw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI5Niw3ICsyOTYsNyBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBO
b2RlKiBub2RlCiAgICAgICAgIHJldHVybjsKIAogICAgIGNhc2UgRmx1c2g6Ci0gICAgICAgIHJl
YWQoQWJzdHJhY3RIZWFwKFZhcmlhYmxlcywgbm9kZS0+bG9jYWwoKSkpOworICAgICAgICByZWFk
KEFic3RyYWN0SGVhcChTdGFjaywgbm9kZS0+bG9jYWwoKSkpOwogICAgICAgICB3cml0ZShTaWRl
U3RhdGUpOwogICAgICAgICByZXR1cm47CiAKQEAgLTMxNCwxNiArMzE0LDE0IEBAIHZvaWQgY2xv
YmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICBjYXNlIENyZWF0ZUFjdGl2YXRp
b246CiAgICAgICAgIHJlYWQoSGVhcE9iamVjdENvdW50KTsKICAgICAgICAgd3JpdGUoSGVhcE9i
amVjdENvdW50KTsKLSAgICAgICAgd3JpdGUoU2lkZVN0YXRlKTsKLSAgICAgICAgd3JpdGUoV2F0
Y2hwb2ludF9maXJlKTsKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKLSAgICBjYXNlIENyZWF0
ZUFyZ3VtZW50czoKLSAgICAgICAgcmVhZChWYXJpYWJsZXMpOworICAgIGNhc2UgQ3JlYXRlRGly
ZWN0QXJndW1lbnRzOgorICAgIGNhc2UgQ3JlYXRlU2NvcGVkQXJndW1lbnRzOgorICAgIGNhc2Ug
Q3JlYXRlT3V0T2ZCYW5kQXJndW1lbnRzOgorICAgICAgICByZWFkKFN0YWNrKTsKICAgICAgICAg
cmVhZChIZWFwT2JqZWN0Q291bnQpOwogICAgICAgICB3cml0ZShIZWFwT2JqZWN0Q291bnQpOwot
ICAgICAgICB3cml0ZShTaWRlU3RhdGUpOwotICAgICAgICB3cml0ZShXYXRjaHBvaW50X2ZpcmUp
OwogICAgICAgICByZXR1cm47CiAKICAgICBjYXNlIEZ1bmN0aW9uUmVlbnRyeVdhdGNocG9pbnQ6
CkBAIC0zOTYsMzEgKzM5NCwzMSBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2Rl
KiBub2RlCiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBHZXRDYWxsZWU6Ci0g
ICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKFZhcmlhYmxlcywgSlNTdGFjazo6Q2FsbGVlKSk7Ci0g
ICAgICAgIGRlZihIZWFwTG9jYXRpb24oVmFyaWFibGVMb2MsIEFic3RyYWN0SGVhcChWYXJpYWJs
ZXMsIEpTU3RhY2s6OkNhbGxlZSkpLCBub2RlKTsKKyAgICAgICAgcmVhZChBYnN0cmFjdEhlYXAo
U3RhY2ssIEpTU3RhY2s6OkNhbGxlZSkpOworICAgICAgICBkZWYoSGVhcExvY2F0aW9uKFN0YWNr
TG9jLCBBYnN0cmFjdEhlYXAoU3RhY2ssIEpTU3RhY2s6OkNhbGxlZSkpLCBub2RlKTsKICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAKICAgICBjYXNlIEdldExvY2FsOgotICAgICAgICByZWFkKEFi
c3RyYWN0SGVhcChWYXJpYWJsZXMsIG5vZGUtPmxvY2FsKCkpKTsKLSAgICAgICAgZGVmKEhlYXBM
b2NhdGlvbihWYXJpYWJsZUxvYywgQWJzdHJhY3RIZWFwKFZhcmlhYmxlcywgbm9kZS0+bG9jYWwo
KSkpLCBub2RlKTsKKyAgICAgICAgcmVhZChBYnN0cmFjdEhlYXAoU3RhY2ssIG5vZGUtPmxvY2Fs
KCkpKTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihTdGFja0xvYywgQWJzdHJhY3RIZWFwKFN0
YWNrLCBub2RlLT5sb2NhbCgpKSksIG5vZGUpOwogICAgICAgICByZXR1cm47CiAgICAgICAgIAog
ICAgIGNhc2UgU2V0TG9jYWw6Ci0gICAgICAgIHdyaXRlKEFic3RyYWN0SGVhcChWYXJpYWJsZXMs
IG5vZGUtPmxvY2FsKCkpKTsKLSAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihWYXJpYWJsZUxvYywg
QWJzdHJhY3RIZWFwKFZhcmlhYmxlcywgbm9kZS0+bG9jYWwoKSkpLCBub2RlLT5jaGlsZDEoKS5u
b2RlKCkpOworICAgICAgICB3cml0ZShBYnN0cmFjdEhlYXAoU3RhY2ssIG5vZGUtPmxvY2FsKCkp
KTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihTdGFja0xvYywgQWJzdHJhY3RIZWFwKFN0YWNr
LCBub2RlLT5sb2NhbCgpKSksIG5vZGUtPmNoaWxkMSgpLm5vZGUoKSk7CiAgICAgICAgIHJldHVy
bjsKICAgICAgICAgCiAgICAgY2FzZSBHZXRTdGFjazogewotICAgICAgICBBYnN0cmFjdEhlYXAg
aGVhcChWYXJpYWJsZXMsIG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5sb2NhbCk7CisgICAgICAg
IEFic3RyYWN0SGVhcCBoZWFwKFN0YWNrLCBub2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+bG9jYWwp
OwogICAgICAgICByZWFkKGhlYXApOwotICAgICAgICBkZWYoSGVhcExvY2F0aW9uKFZhcmlhYmxl
TG9jLCBoZWFwKSwgbm9kZSk7CisgICAgICAgIGRlZihIZWFwTG9jYXRpb24oU3RhY2tMb2MsIGhl
YXApLCBub2RlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBQ
dXRTdGFjazogewotICAgICAgICBBYnN0cmFjdEhlYXAgaGVhcChWYXJpYWJsZXMsIG5vZGUtPnN0
YWNrQWNjZXNzRGF0YSgpLT5sb2NhbCk7CisgICAgICAgIEFic3RyYWN0SGVhcCBoZWFwKFN0YWNr
LCBub2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+bG9jYWwpOwogICAgICAgICB3cml0ZShoZWFwKTsK
LSAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihWYXJpYWJsZUxvYywgaGVhcCksIG5vZGUtPmNoaWxk
MSgpLm5vZGUoKSk7CisgICAgICAgIGRlZihIZWFwTG9jYXRpb24oU3RhY2tMb2MsIGhlYXApLCBu
b2RlLT5jaGlsZDEoKS5ub2RlKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgICAgICAK
QEAgLTQzMiw4ICs0MzAsOCBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBu
b2RlCiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBHZXRMb2NhbFVubGlua2Vk
OgotICAgICAgICByZWFkKEFic3RyYWN0SGVhcChWYXJpYWJsZXMsIG5vZGUtPnVubGlua2VkTG9j
YWwoKSkpOwotICAgICAgICBkZWYoSGVhcExvY2F0aW9uKFZhcmlhYmxlTG9jLCBBYnN0cmFjdEhl
YXAoVmFyaWFibGVzLCBub2RlLT51bmxpbmtlZExvY2FsKCkpKSwgbm9kZSk7CisgICAgICAgIHJl
YWQoQWJzdHJhY3RIZWFwKFN0YWNrLCBub2RlLT51bmxpbmtlZExvY2FsKCkpKTsKKyAgICAgICAg
ZGVmKEhlYXBMb2NhdGlvbihTdGFja0xvYywgQWJzdHJhY3RIZWFwKFN0YWNrLCBub2RlLT51bmxp
bmtlZExvY2FsKCkpKSwgbm9kZSk7CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2Fz
ZSBHZXRCeVZhbDogewpAQCAtNDY2LDEwICs0NjQsMTQgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBo
JiBncmFwaCwgTm9kZSogbm9kZQogICAgICAgICAgICAgZGVmKFB1cmVWYWx1ZShub2RlLCBtb2Rl
LmFzV29yZCgpKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAKLSAgICAgICAg
Y2FzZSBBcnJheTo6QXJndW1lbnRzOgotICAgICAgICAgICAgcmVhZChBcmd1bWVudHNfcmVnaXN0
ZXJzKTsKLSAgICAgICAgICAgIHJlYWQoVmFyaWFibGVzKTsKLSAgICAgICAgICAgIGRlZihIZWFw
TG9jYXRpb24oSW5kZXhlZFByb3BlcnR5TG9jLCBWYXJpYWJsZXMsIG5vZGUtPmNoaWxkMSgpLCBu
b2RlLT5jaGlsZDIoKSksIG5vZGUpOworICAgICAgICBjYXNlIEFycmF5OjpEaXJlY3RBcmd1bWVu
dHM6CisgICAgICAgICAgICByZWFkKERpcmVjdEFyZ3VtZW50c1Byb3BlcnRpZXMpOworICAgICAg
ICAgICAgZGVmKEhlYXBMb2NhdGlvbihJbmRleGVkUHJvcGVydHlMb2MsIERpcmVjdEFyZ3VtZW50
c1Byb3BlcnRpZXMsIG5vZGUtPmNoaWxkMSgpLCBub2RlLT5jaGlsZDIoKSksIG5vZGUpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXJyYXk6OlNjb3Bl
ZEFyZ3VtZW50czoKKyAgICAgICAgICAgIHJlYWQoU2NvcGVQcm9wZXJ0aWVzKTsKKyAgICAgICAg
ICAgIGRlZihIZWFwTG9jYXRpb24oSW5kZXhlZFByb3BlcnR5TG9jLCBTY29wZVByb3BlcnRpZXMs
IG5vZGUtPmNoaWxkMSgpLCBub2RlLT5jaGlsZDIoKSksIG5vZGUpOwogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQXJyYXk6OkludDMyOgpAQCAtNTYwLDEz
ICs1NjIsNiBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAg
ICAgICAgICB3cml0ZShIZWFwKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIAot
ICAgICAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6Ci0gICAgICAgICAgICByZWFkKEFyZ3VtZW50
c19yZWdpc3RlcnMpOwotICAgICAgICAgICAgcmVhZChNaXNjRmllbGRzKTsKLSAgICAgICAgICAg
IHdyaXRlKFZhcmlhYmxlcyk7Ci0gICAgICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEluZGV4ZWRQ
cm9wZXJ0eUxvYywgVmFyaWFibGVzLCBiYXNlLCBpbmRleCksIHZhbHVlKTsKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFycmF5OjpJbnQzMjoKICAgICAg
ICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5pc091dE9mQm91bmRzKCkpIHsKICAgICAgICAg
ICAgICAgICByZWFkKFdvcmxkKTsKQEAgLTc2MSw3ICs3NTYsOCBAQCB2b2lkIGNsb2JiZXJpemUo
R3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgICAgICAgICBkZWYoUHVyZVZhbHVlKG5vZGUs
IG1vZGUuYXNXb3JkKCkpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIAotICAg
ICAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6CisgICAgICAgIGNhc2UgQXJyYXk6OkRpcmVjdEFy
Z3VtZW50czoKKyAgICAgICAgY2FzZSBBcnJheTo6U2NvcGVkQXJndW1lbnRzOgogICAgICAgICAg
ICAgcmVhZChNaXNjRmllbGRzKTsKICAgICAgICAgICAgIGRlZihIZWFwTG9jYXRpb24oQXJyYXlM
ZW5ndGhMb2MsIE1pc2NGaWVsZHMsIG5vZGUtPmNoaWxkMSgpKSwgbm9kZSk7CiAgICAgICAgICAg
ICByZXR1cm47CkBAIC03NzQsMjEgKzc3MCwzMCBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdy
YXBoLCBOb2RlKiBub2RlCiAgICAgICAgIH0KICAgICB9CiAgICAgICAgIAotICAgIGNhc2UgR2V0
Q2xvc3VyZVJlZ2lzdGVyczoKLSAgICAgICAgcmVhZChKU0Vudmlyb25tZW50UmVjb3JkX3JlZ2lz
dGVycyk7Ci0gICAgICAgIGRlZihIZWFwTG9jYXRpb24oQ2xvc3VyZVJlZ2lzdGVyc0xvYywgSlNF
bnZpcm9ubWVudFJlY29yZF9yZWdpc3RlcnMsIG5vZGUtPmNoaWxkMSgpKSwgbm9kZSk7Ci0gICAg
ICAgIHJldHVybjsKLQogICAgIGNhc2UgR2V0Q2xvc3VyZVZhcjoKLSAgICAgICAgcmVhZChBYnN0
cmFjdEhlYXAoVmFyaWFibGVzLCBub2RlLT52YXJOdW1iZXIoKSkpOwotICAgICAgICBkZWYoSGVh
cExvY2F0aW9uKENsb3N1cmVWYXJpYWJsZUxvYywgQWJzdHJhY3RIZWFwKFZhcmlhYmxlcywgbm9k
ZS0+dmFyTnVtYmVyKCkpLCBub2RlLT5jaGlsZDEoKSksIG5vZGUpOworICAgICAgICByZWFkKEFi
c3RyYWN0SGVhcChTY29wZVByb3BlcnRpZXMsIG5vZGUtPnNjb3BlT2Zmc2V0KCkub2ZmZXQoKSkp
OworICAgICAgICBkZWYoSGVhcExvY2F0aW9uKENsb3N1cmVWYXJpYWJsZUxvYywgQWJzdHJhY3RI
ZWFwKFNjb3BlUHJvcGVydGllcywgbm9kZS0+c2NvcGVPZmZzZXQoKS5vZmZzZXQoKSksIG5vZGUt
PmNoaWxkMSgpKSwgbm9kZSk7CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBQ
dXRDbG9zdXJlVmFyOgotICAgICAgICB3cml0ZShBYnN0cmFjdEhlYXAoVmFyaWFibGVzLCBub2Rl
LT52YXJOdW1iZXIoKSkpOwotICAgICAgICBkZWYoSGVhcExvY2F0aW9uKENsb3N1cmVWYXJpYWJs
ZUxvYywgQWJzdHJhY3RIZWFwKFZhcmlhYmxlcywgbm9kZS0+dmFyTnVtYmVyKCkpLCBub2RlLT5j
aGlsZDIoKSksIG5vZGUtPmNoaWxkMygpLm5vZGUoKSk7CisgICAgICAgIHdyaXRlKEFic3RyYWN0
SGVhcChTY29wZVByb3BlcnRpZXMsIG5vZGUtPnNjb3BlT2Zmc2V0KCkub2Zmc2V0KCkpKTsKKyAg
ICAgICAgZGVmKEhlYXBMb2NhdGlvbihDbG9zdXJlVmFyaWFibGVMb2MsIEFic3RyYWN0SGVhcChT
Y29wZVByb3BlcnRpZXMsIG5vZGUtPnNjb3BlT2Zmc2V0KCkub2Zmc2V0KCkpLCBub2RlLT5jaGls
ZDIoKSksIG5vZGUtPmNoaWxkMigpLm5vZGUoKSk7CiAgICAgICAgIHJldHVybjsKICAgICAgICAg
CisgICAgY2FzZSBHZXRGcm9tQXJndW1lbnRzOiB7CisgICAgICAgIEFic3RyYWN0SGVhcCBoZWFw
KERpcmVjdEFyZ3VtZW50c1Byb3BlcnRpZXMsIG5vZGUtPmNhcHR1cmVkQXJndW1lbnRzT2Zmc2V0
KCkpOworICAgICAgICByZWFkKGhlYXApOworICAgICAgICBkZWYoSGVhcExvY2F0aW9uKERpcmVj
dEFyZ3VtZW50c0xvYywgaGVhcCksIG5vZGUpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
ICAgICAKKyAgICBjYXNlIFB1dFRvQXJndW1lbnRzOiB7CisgICAgICAgIEFic3RyYWN0SGVhcCBo
ZWFwKERpcmVjdEFyZ3VtZW50c1Byb3BlcnRpZXMsIG5vZGUtPmNhcHR1cmVkQXJndW1lbnRzT2Zm
c2V0KCkpOworICAgICAgICB3cml0ZShoZWFwKTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihE
aXJlY3RBcmd1bWVudHNMb2MsIGhlYXApLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgICAgICAKICAgICBjYXNlIEdldEdsb2JhbFZhcjoKICAgICAg
ICAgcmVhZChBYnN0cmFjdEhlYXAoQWJzb2x1dGUsIG5vZGUtPnJlZ2lzdGVyUG9pbnRlcigpKSk7
CiAgICAgICAgIGRlZihIZWFwTG9jYXRpb24oR2xvYmFsVmFyaWFibGVMb2MsIEFic3RyYWN0SGVh
cChBYnNvbHV0ZSwgbm9kZS0+cmVnaXN0ZXJQb2ludGVyKCkpKSwgbm9kZSk7CkBAIC04NzAsMjgg
Kzg3NSwyMyBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgY2FzZSBUZWFyT2ZmQXJn
dW1lbnRzOgotICAgICAgICByZWFkKFZhcmlhYmxlcyk7Ci0gICAgICAgIHdyaXRlKEFyZ3VtZW50
c19yZWdpc3RlcnMpOwotICAgICAgICByZXR1cm47Ci0gICAgICAgIAogICAgIGNhc2UgR2V0TXlB
cmd1bWVudHNMZW5ndGg6Ci0gICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKFZhcmlhYmxlcywgZ3Jh
cGguYXJndW1lbnRzUmVnaXN0ZXJGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSkpOwotICAgICAg
ICByZWFkKEFic3RyYWN0SGVhcChWYXJpYWJsZXMsIEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpKTsK
KyAgICAgICAgcmVhZChBYnN0cmFjdEhlYXAoU3RhY2ssIGdyYXBoLmFyZ3VtZW50c1JlZ2lzdGVy
Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpKTsKKyAgICAgICAgcmVhZChBYnN0cmFjdEhlYXAo
U3RhY2ssIEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpKTsKICAgICAgICAgLy8gRklYTUU6IFdlIGNv
dWxkIGRlZigpIHRoaXMgYnkgc3BlY2lmeWluZyB0aGUgY29kZSBvcmlnaW4gYXMgYSBraW5kIG9m
IG1faW5mbywgbGlrZSB3ZQogICAgICAgICAvLyBoYXZlIGZvciBQdXJlVmFsdWUuCiAgICAgICAg
IC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzQ3OTcKICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAKICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZhbDoKLSAgICAg
ICAgcmVhZChWYXJpYWJsZXMpOworICAgICAgICByZWFkKFN0YWNrKTsKICAgICAgICAgLy8gRklY
TUU6IFdlIGNvdWxkIGRlZigpIHRoaXMgYnkgc3BlY2lmeWluZyB0aGUgY29kZSBvcmlnaW4gYXMg
YSBraW5kIG9mIG1faW5mbywgbGlrZSB3ZQogICAgICAgICAvLyBoYXZlIGZvciBQdXJlVmFsdWUu
CiAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzQ3
OTcKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICBjYXNlIENoZWNrQXJndW1lbnRzTm90
Q3JlYXRlZDoKLSAgICAgICAgcmVhZChBYnN0cmFjdEhlYXAoVmFyaWFibGVzLCBncmFwaC5hcmd1
bWVudHNSZWdpc3RlckZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSk7CisgICAgICAgIHJlYWQo
QWJzdHJhY3RIZWFwKFN0YWNrLCBncmFwaC5hcmd1bWVudHNSZWdpc3RlckZvcihub2RlLT5vcmln
aW4uc2VtYW50aWMpKSk7CiAgICAgICAgIHJldHVybjsKIAogICAgIGNhc2UgVGhyb3dSZWZlcmVu
Y2VFcnJvcjoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uaAkocmV2aXNp
b24gMTgwOTEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uaAkod29y
a2luZyBjb3B5KQpAQCAtMTkzLDEyICsxOTMsMTAgQEAgZW51bSBHcmFwaEZvcm0gewogICAgIC8v
IGV4cGVjdCB0byBiZSBsaXZlIGF0IHRoZSBoZWFkLCBhbmQgd2hpY2ggbG9jYWxzIHRoZXkgbWFr
ZSBhdmFpbGFibGUgYXQgdGhlCiAgICAgLy8gdGFpbC4gVGhyZWFkZWRDUFMgZm9ybSBhbHNvIGlt
cGxpZXMgdGhhdDoKICAgICAvLwotICAgIC8vIC0gR2V0TG9jYWxzIGFuZCBTZXRMb2NhbHMgdG8g
dW5jYXB0dXJlZCB2YXJpYWJsZXMgYXJlIG5vdCByZWR1bmRhbnQgd2l0aGluCi0gICAgLy8gICBh
IGJhc2ljIGJsb2NrLgorICAgIC8vIC0gR2V0TG9jYWxzIGFuZCBTZXRMb2NhbHMgYXJlIG5vdCBy
ZWR1bmRhbnQgd2l0aGluIGEgYmFzaWMgYmxvY2suCiAgICAgLy8KICAgICAvLyAtIEFsbCBHZXRM
b2NhbHMgYW5kIEZsdXNoZXMgYXJlIGxpbmtlZCBkaXJlY3RseSB0byB0aGUgbGFzdCBhY2Nlc3Mg
cG9pbnQKLSAgICAvLyAgIG9mIHRoZSB2YXJpYWJsZSwgd2hpY2ggbXVzdCBub3QgYmUgYW5vdGhl
ciBHZXRMb2NhbCBpZiB0aGUgdmFyaWFibGUgaXMKLSAgICAvLyAgIHVuY2FwdHVyZWQuCisgICAg
Ly8gICBvZiB0aGUgdmFyaWFibGUsIHdoaWNoIG11c3Qgbm90IGJlIGFub3RoZXIgR2V0TG9jYWwu
CiAgICAgLy8KICAgICAvLyAtIFBoYW50b20oUGhpKSBpcyBub3QgbGVnYWwsIGJ1dCBQaGFudG9t
TG9jYWwgaXMuCiAgICAgLy8KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29u
c3RhbnRGb2xkaW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCShyZXZpc2lvbiAxODA5MTApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtOTcsMTYgKzk3LDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2Ug
Q2hlY2tBcmd1bWVudHNOb3RDcmVhdGVkOiB7Ci0gICAgICAgICAgICAgICAgaWYgKCFpc0VtcHR5
U3BlY3VsYXRpb24oCi0gICAgICAgICAgICAgICAgICAgICAgICBtX3N0YXRlLnZhcmlhYmxlcygp
Lm9wZXJhbmQoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5hcmd1bWVudHNS
ZWdpc3RlckZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKS5tX3R5cGUpKQotICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBub2RlLT5jb252ZXJ0VG9QaGFudG9tKCk7
Ci0gICAgICAgICAgICAgICAgZWxpbWluYXRlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2Fz
ZSBDaGVja1N0cnVjdHVyZToKICAgICAgICAgICAgIGNhc2UgQXJyYXlpZnlUb1N0cnVjdHVyZTog
ewogICAgICAgICAgICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gbV9zdGF0ZS5mb3JOb2Rl
KG5vZGUtPmNoaWxkMSgpKTsKQEAgLTM3NywzNyArMzY3LDYgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgIGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFsOiB7Ci0gICAgICAgICAgICAgICAgSW5saW5lQ2Fs
bEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2Fs
bEZyYW1lOwotICAgICAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBtX3N0YXRlLmZvck5vZGUo
bm9kZS0+Y2hpbGQxKCkpLm1fdmFsdWU7Ci0gICAgICAgICAgICAgICAgaWYgKGlubGluZUNhbGxG
cmFtZSAmJiB2YWx1ZSAmJiB2YWx1ZS5pc0ludDMyKCkpIHsKLSAgICAgICAgICAgICAgICAgICAg
aW50MzJfdCBpbmRleCA9IHZhbHVlLmFzSW50MzIoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KGluZGV4ID49IDAKLSAgICAgICAgICAgICAgICAgICAgICAgICYmIHN0YXRpY19jYXN0PHNpemVf
dD4oaW5kZXggKyAxKSA8IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKSkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gUm9sbCB0aGUgaW50ZXJwcmV0ZXIgb3ZlciB0aGlzLgot
ICAgICAgICAgICAgICAgICAgICAgICAgbV9pbnRlcnByZXRlci5leGVjdXRlKGluZGV4SW5CbG9j
ayk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbGltaW5hdGVkID0gdHJ1ZTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgaW50IG9wZXJhbmQgPQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQg
KwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguYmFzZWxpbmVDb2RlQmxvY2tG
b3IoaW5saW5lQ2FsbEZyYW1lKS0+YXJndW1lbnRJbmRleEFmdGVyQ2FwdHVyZShpbmRleCk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0
aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJs
b2NrLCBTcGVjTm9uZSwgQ2hlY2tBcmd1bWVudHNOb3RDcmVhdGVkLCBub2RlLT5vcmlnaW4pOwot
ICAgICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFNwZWNOb25lLCBQaGFudG9tLCBu
b2RlLT5vcmlnaW4sIG5vZGUtPmNoaWxkcmVuKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9mb3JtID09IFNTQSkKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5jb252ZXJ0VG9HZXRTdGFjayhtX2dyYXBoLm1f
c3RhY2tBY2Nlc3NEYXRhLmFkZChWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCksIEZsdXNoZWRKU1Zh
bHVlKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbm9kZS0+Y29udmVydFRvR2V0TG9jYWxVbmxpbmtlZChWaXJ0dWFsUmVnaXN0ZXIo
b3BlcmFuZCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICBjYXNlIENoZWNrOiB7CiAgICAgICAgICAgICAgICAgYWxyZWFkeUhhbmRsZWQgPSB0cnVlOwog
ICAgICAgICAgICAgICAgIG1faW50ZXJwcmV0ZXIuZXhlY3V0ZShpbmRleEluQmxvY2spOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEQ0VQaGFzZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEQ0VQaGFzZS5jcHAJKHJldmlzaW9uIDE4
MDkxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRENFUGhhc2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMDUsMzcgKzIwNSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBpZiAo
bm9kZS0+b3AoKSA9PSBHZXRMb2NhbCkgewogICAgICAgICAgICAgICAgIG5vZGUgPSBub2RlLT5j
aGlsZDEoKS5ub2RlKCk7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgLy8gRklY
TUU6IEluIHRoZSBjYXNlIHRoYXQgdGhlIHZhcmlhYmxlIGlzIGNhcHR1cmVkLCB3ZSByZWFsbHkg
d2FudCB0byBiZSBhYmxlCi0gICAgICAgICAgICAgICAgLy8gdG8gcmVwbGFjZSB0aGUgdmFyaWFi
bGUtYXQtdGFpbCB3aXRoIHRoZSBsYXN0IHVzZSBvZiB0aGUgdmFyaWFibGUgaW4gdGhlIHNhbWUK
LSAgICAgICAgICAgICAgICAvLyB3YXkgdGhhdCBDUFMgcmV0aHJlYWRpbmcgd291bGQgZG8uIFRo
ZSBjaGlsZCBvZiB0aGUgR2V0TG9jYWwgaXNuJ3QgbmVjZXNzYXJpbHkKLSAgICAgICAgICAgICAg
ICAvLyB0aGUgc2FtZSBhcyB3aGF0IENQUyByZXRocmVhZGluZyB3b3VsZCBkby4gRm9yIGV4YW1w
bGUsIHdlIG1heSBoYXZlOgotICAgICAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAgICAgLy8g
YTogU2V0TG9jYWwoLi4uKSAvLyBsaXZlCi0gICAgICAgICAgICAgICAgLy8gYjogR2V0TG9jYWwo
QGEpIC8vIGxpdmUKLSAgICAgICAgICAgICAgICAvLyBjOiBHZXRMb2NhbChAYSkgLy8gZGVhZAot
ICAgICAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAgICAgLy8gV2hlbiBraWxsaW5nIEBjLCB0
aGUgY29kZSBiZWxvdyB3aWxsIHNldCB0aGUgdmFyaWFibGUtYXQtdGFpbCB0byBAYSwgd2hpbGUg
Q1BTCi0gICAgICAgICAgICAgICAgLy8gcmV0aHJlYWRpbmcgd291bGQgaGF2ZSBzZXQgQGIuIFRo
aXMgaXMgYSBiZW5pZ24gYnVnLCBzaW5jZSBhbGwgY2xpZW50cyBvZiBDUFMKLSAgICAgICAgICAg
ICAgICAvLyBvbmx5IHVzZSB0aGUgdmFyaWFibGUtYXQtdGFpbCBvZiBjYXB0dXJlZCB2YXJpYWJs
ZXMgdG8gZ2V0IHRoZQotICAgICAgICAgICAgICAgIC8vIFZhcmlhYmxlQWNjZXNzRGF0YSBhbmQg
b2JzZXJ2ZSB0aGF0IGl0IGlzIGluIGZhY3QgY2FwdHVyZWQuIEJ1dCwgdGhpcyBmZWVscwotICAg
ICAgICAgICAgICAgIC8vIGxpa2UgaXQgY291bGQgY2F1c2UgYnVncyBpbiB0aGUgZnV0dXJlLgot
ICAgICAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAgICAgLy8gSXQncyB0ZW1wdGluZyB0byBq
dXN0IGRldGhyZWFkIGFuZCB0aGVuIGludm9rZSBDUFMgcmV0aHJlYWRpbmcsIGJ1dCBDUFMKLSAg
ICAgICAgICAgICAgICAvLyByZXRocmVhZGluZyBmYWlscyB0byBwcmVzZXJ2ZSBleGFjdCByZWYt
Y291bnRzLiBTbyB3ZSB3b3VsZCBuZWVkIGEgZml4cG9pbnQuCi0gICAgICAgICAgICAgICAgLy8g
SXQncyBwcm9iYWJseSB0aGUgY2FzZSB0aGF0IHRoaXMgZml4cG9pbnQgd2lsbCBiZSBndWFyYW50
ZWVkIHRvIGNvbnZlcmdlIGFmdGVyCi0gICAgICAgICAgICAgICAgLy8gdGhlIHNlY29uZCBpdGVy
YXRpb24gKGkuZS4gdGhlIHNlY29uZCBydW4gb2YgRENFIHdpbGwgbm90IGtpbGwgYW55dGhpbmcg
YW5kIHNvCi0gICAgICAgICAgICAgICAgLy8gd2lsbCBub3QgbmVlZCB0byBkZXRocmVhZCksIGJ1
dCBmb3Igbm93IHRoZSBzYWZlc3QgYXBwcm9hY2ggaXMgcHJvYmFibHkganVzdCB0bwotICAgICAg
ICAgICAgICAgIC8vIGFsbG93IGZvciB0aGlzIHRpbnkgYml0IG9mIHNsb3BwaW5lc3MuCi0gICAg
ICAgICAgICAgICAgLy8KLSAgICAgICAgICAgICAgICAvLyBBbm90aGVyIHBvc3NpYmxlIHNvbHV0
aW9uIHdvdWxkIGJlIHRvIHNpbXBseSBzYXkgdGhhdCBEQ0UgZGV0aHJlYWRzIGJ1dCB0aGVuCi0g
ICAgICAgICAgICAgICAgLy8gd2UgbmV2ZXIgcmV0aHJlYWQgYmVmb3JlIGdvaW5nIHRvIHRoZSBi
YWNrZW5kLiBUaGF0IGZlZWxzIGludHVpdGl2ZWx5IHJpZ2h0Ci0gICAgICAgICAgICAgICAgLy8g
YmVjYXVzZSBpdCdzIHVubGlrZWx5IHRoYXQgYW55IG9mIHRoZSBwaGFzZXMgYWZ0ZXIgRENFIGlu
IHRoZSBiYWNrZW5kIHJlbHkgb24KLSAgICAgICAgICAgICAgICAvLyBUaHJlYWRlZENQUy4KLSAg
ICAgICAgICAgICAgICAvLwotICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMzAxMTUKLSAgICAgICAgICAgICAgICBBU1NFUlQoCi0gICAg
ICAgICAgICAgICAgICAgIG5vZGUtPm9wKCkgPT0gUGhpIHx8IG5vZGUtPm9wKCkgPT0gU2V0QXJn
dW1lbnQKLSAgICAgICAgICAgICAgICAgICAgfHwgbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCkt
PmlzQ2FwdHVyZWQoKSk7CisgICAgICAgICAgICAgICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gUGhp
IHx8IG5vZGUtPm9wKCkgPT0gU2V0QXJndW1lbnQpOwogICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgIGlmIChub2RlLT5zaG91bGRHZW5lcmF0ZSgpKSB7CiAgICAgICAgICAgICAgICAg
ICAgIHZhcmlhYmxlc1tpXSA9IG5vZGU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0RvZXNHQy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdEb2VzR0MuY3BwCShyZXZpc2lvbiAxODA5MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0RvZXNHQy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk3LDcgKzk3LDYgQEAgYm9vbCBk
b2VzR0MoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlKQogICAgIGNhc2UgQ2hlY2tBcnJheToKICAg
ICBjYXNlIEdldFNjb3BlOgogICAgIGNhc2UgU2tpcFNjb3BlOgotICAgIGNhc2UgR2V0Q2xvc3Vy
ZVJlZ2lzdGVyczoKICAgICBjYXNlIEdldENsb3N1cmVWYXI6CiAgICAgY2FzZSBQdXRDbG9zdXJl
VmFyOgogICAgIGNhc2UgR2V0R2xvYmFsVmFyOgpAQCAtMjEwLDEwICsyMDksMTQgQEAgYm9vbCBk
b2VzR0MoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlKQogICAgIGNhc2UgUHV0U3RhY2s6CiAgICAg
Y2FzZSBLaWxsU3RhY2s6CiAgICAgY2FzZSBHZXRTdGFjazoKKyAgICBjYXNlIEdldEZyb21Bcmd1
bWVudHM6CisgICAgY2FzZSBQdXRUb0FyZ3VtZW50czoKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CiAgICAgY2FzZSBDcmVhdGVBY3RpdmF0aW9uOgotICAgIGNhc2UgQ3JlYXRlQXJndW1lbnRzOgor
ICAgIGNhc2UgQ3JlYXRlRGlyZWN0QXJndW1lbnRzOgorICAgIGNhc2UgQ3JlYXRlU2NvcGVkQXJn
dW1lbnRzOgorICAgIGNhc2UgQ3JlYXRlT3V0T2ZCYW5kQXJndW1lbnRzOgogICAgIGNhc2UgVG9U
aGlzOgogICAgIGNhc2UgQ3JlYXRlVGhpczoKICAgICBjYXNlIEFsbG9jYXRlUHJvcGVydHlTdG9y
YWdlOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3Bw
CShyZXZpc2lvbiAxODA5MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVw
UGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02ODQsNyArNjg0LDYgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6CiAgICAgICAgICAgICBjYXNlIEFycmF5
OjpBcnJheVN0b3JhZ2U6CiAgICAgICAgICAgICBjYXNlIEFycmF5OjpTbG93UHV0QXJyYXlTdG9y
YWdlOgotICAgICAgICAgICAgY2FzZSBBcnJheTo6QXJndW1lbnRzOgogICAgICAgICAgICAgICAg
IGZpeEVkZ2U8S25vd25DZWxsVXNlPihjaGlsZDEpOwogICAgICAgICAgICAgICAgIGZpeEVkZ2U8
SW50MzJVc2U+KGNoaWxkMik7CiAgICAgICAgICAgICAgICAgaW5zZXJ0U3RvcmVCYXJyaWVyKG1f
aW5kZXhJbkJsb2NrLCBjaGlsZDEsIGNoaWxkMyk7CkBAIC04OTQsMTQgKzg5MywyMyBAQCBwcml2
YXRlOgogICAgICAgICAgICAgaW5zZXJ0U3RvcmVCYXJyaWVyKG1faW5kZXhJbkJsb2NrLCBub2Rl
LT5jaGlsZDEoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQorICAgICAgICAgICAg
CisgICAgICAgIGNhc2UgR2V0Q2xvc3VyZVZhcjogeworICAgICAgICAgICAgZml4RWRnZTxLbm93
bkNlbGxVc2U+KG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CiAKICAgICAgICAgY2FzZSBQdXRDbG9zdXJlVmFyOiB7CiAgICAgICAgICAgICBmaXhFZGdlPEtu
b3duQ2VsbFVzZT4obm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICAgICAgaW5zZXJ0U3RvcmVCYXJy
aWVyKG1faW5kZXhJbkJsb2NrLCBub2RlLT5jaGlsZDEoKSwgbm9kZS0+Y2hpbGQzKCkpOworICAg
ICAgICAgICAgaW5zZXJ0U3RvcmVCYXJyaWVyKG1faW5kZXhJbkJsb2NrLCBub2RlLT5jaGlsZDEo
KSwgbm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAg
ICAgICAgIAorICAgICAgICBjYXNlIEdldEZyb21Bcmd1bWVudHM6IHsKKyAgICAgICAgICAgIGZp
eEVkZ2U8S25vd25DZWxsVXNlPihub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQogCi0gICAgICAgIGNhc2UgR2V0Q2xvc3VyZVJlZ2lzdGVyczoKICAgICAgICAg
Y2FzZSBTa2lwU2NvcGU6CiAgICAgICAgIGNhc2UgR2V0U2NvcGU6CiAgICAgICAgIGNhc2UgR2V0
R2V0dGVyOgpAQCAtMTIyNiw3ICsxMjM0LDYgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBGbHVz
aDoKICAgICAgICAgY2FzZSBQaGFudG9tTG9jYWw6CiAgICAgICAgIGNhc2UgR2V0TG9jYWxVbmxp
bmtlZDoKLSAgICAgICAgY2FzZSBHZXRDbG9zdXJlVmFyOgogICAgICAgICBjYXNlIEdldEdsb2Jh
bFZhcjoKICAgICAgICAgY2FzZSBOb3RpZnlXcml0ZToKICAgICAgICAgY2FzZSBWYXJpYWJsZVdh
dGNocG9pbnQ6CkBAIC0xMjUyLDcgKzEyNTksOSBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIElz
TnVtYmVyOgogICAgICAgICBjYXNlIElzT2JqZWN0T3JOdWxsOgogICAgICAgICBjYXNlIElzRnVu
Y3Rpb246Ci0gICAgICAgIGNhc2UgQ3JlYXRlQXJndW1lbnRzOgorICAgICAgICBjYXNlIENyZWF0
ZURpcmVjdEFyZ3VtZW50czoKKyAgICAgICAgY2FzZSBDcmVhdGVTY29wZWRBcmd1bWVudHM6Cisg
ICAgICAgIGNhc2UgQ3JlYXRlT3V0T2ZCYW5kQXJndW1lbnRzOgogICAgICAgICBjYXNlIFBoYW50
b21Bcmd1bWVudHM6CiAgICAgICAgIGNhc2UgVGVhck9mZkFyZ3VtZW50czoKICAgICAgICAgY2Fz
ZSBHZXRNeUFyZ3VtZW50c0xlbmd0aDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHR3JhcGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
R3JhcGguY3BwCShyZXZpc2lvbiAxODA5MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzUsMTEgKzc1LDYgQEAgR3JhcGg6Okdy
YXBoKFZNJiB2bSwgUGxhbiYgcGxhbiwgTG9uZ0xpdgogICAgIAogICAgIGZvciAodW5zaWduZWQg
aSA9IG1fbXVzdEhhbmRsZVZhbHVlcy5zaXplKCk7IGktLTspCiAgICAgICAgIG1fbXVzdEhhbmRs
ZVZhbHVlc1tpXSA9IGZyZWV6ZUZyYWdpbGUocGxhbi5tdXN0SGFuZGxlVmFsdWVzW2ldKTsKLSAg
ICAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2NvZGVCbG9jay0+bV9udW1WYXJzOyBpLS07KSB7
Ci0gICAgICAgIGlmIChtX2NvZGVCbG9jay0+aXNDYXB0dXJlZCh2aXJ0dWFsUmVnaXN0ZXJGb3JM
b2NhbChpKSkpCi0gICAgICAgICAgICBtX291dGVybW9zdENhcHR1cmVkVmFycy5zZXQoaSk7Ci0g
ICAgfQogfQogCiBHcmFwaDo6fkdyYXBoKCkKQEAgLTIxNiw4ICsyMTEsMTAgQEAgdm9pZCBHcmFw
aDo6ZHVtcChQcmludFN0cmVhbSYgb3V0LCBjb25zdAogICAgICAgICBvdXQucHJpbnQoY29tbWEs
IG5vZGUtPmFycmF5TW9kZSgpKTsKICAgICBpZiAobm9kZS0+aGFzQXJpdGhNb2RlKCkpCiAgICAg
ICAgIG91dC5wcmludChjb21tYSwgbm9kZS0+YXJpdGhNb2RlKCkpOwotICAgIGlmIChub2RlLT5o
YXNWYXJOdW1iZXIoKSkKLSAgICAgICAgb3V0LnByaW50KGNvbW1hLCBub2RlLT52YXJOdW1iZXIo
KSk7CisgICAgaWYgKG5vZGUtPmhhc1Njb3BlT2Zmc2V0KCkpCisgICAgICAgIG91dC5wcmludChj
b21tYSwgbm9kZS0+c2NvcGVPZmZzZXQoKSk7CisgICAgaWYgKG5vZGUtPmhhc0NhcHR1cmVkQXJn
dW1lbnRzT2Zmc2V0KCkpCisgICAgICAgIG91dC5wcmludChjb21tYSwgbm9kZS0+Y2FwdHVyZWRB
cmd1bWVudHNPZmZzZXQoKSk7CiAgICAgaWYgKG5vZGUtPmhhc1JlZ2lzdGVyUG9pbnRlcigpKQog
ICAgICAgICBvdXQucHJpbnQoY29tbWEsICJnbG9iYWwiLCBnbG9iYWxPYmplY3RGb3Iobm9kZS0+
b3JpZ2luLnNlbWFudGljKS0+ZmluZFJlZ2lzdGVySW5kZXgobm9kZS0+cmVnaXN0ZXJQb2ludGVy
KCkpLCAiKCIsIFJhd1BvaW50ZXIobm9kZS0+cmVnaXN0ZXJQb2ludGVyKCkpLCAiKSIpOwogICAg
IGlmIChub2RlLT5oYXNJZGVudGlmaWVyKCkpCkBAIC03NTUsMTAgKzc1Miw2IEBAIHZvaWQgR3Jh
cGg6OmludmFsaWRhdGVDRkcoKQogCiB2b2lkIEdyYXBoOjpzdWJzdGl0dXRlR2V0TG9jYWwoQmFz
aWNCbG9jayYgYmxvY2ssIHVuc2lnbmVkIHN0YXJ0SW5kZXhJbkJsb2NrLCBWYXJpYWJsZUFjY2Vz
c0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSwgTm9kZSogbmV3R2V0TG9jYWwpCiB7Ci0gICAgaWYg
KHZhcmlhYmxlQWNjZXNzRGF0YS0+aXNDYXB0dXJlZCgpKSB7Ci0gICAgICAgIC8vIExldCBDU0Ug
d29ycnkgYWJvdXQgdGhpcyBvbmUuCi0gICAgICAgIHJldHVybjsKLSAgICB9CiAgICAgZm9yICh1
bnNpZ25lZCBpbmRleEluQmxvY2sgPSBzdGFydEluZGV4SW5CbG9jazsgaW5kZXhJbkJsb2NrIDwg
YmxvY2suc2l6ZSgpOyArK2luZGV4SW5CbG9jaykgewogICAgICAgICBOb2RlKiBub2RlID0gYmxv
Y2tbaW5kZXhJbkJsb2NrXTsKICAgICAgICAgYm9vbCBzaG91bGRDb250aW51ZSA9IHRydWU7CkBA
IC0xMDE5LDE0ICsxMDEyLDYgQEAgSlNMZXhpY2FsRW52aXJvbm1lbnQqIEdyYXBoOjp0cnlHZXRB
Y3RpdgogICAgIHJldHVybiBub2RlLT5keW5hbWljQ2FzdENvbnN0YW50PEpTTGV4aWNhbEVudmly
b25tZW50Kj4oKTsKIH0KIAotV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiogR3JhcGg6OnRyeUdl
dFJlZ2lzdGVycyhOb2RlKiBub2RlKQotewotICAgIEpTTGV4aWNhbEVudmlyb25tZW50KiBsZXhp
Y2FsRW52aXJvbm1lbnQgPSB0cnlHZXRBY3RpdmF0aW9uKG5vZGUpOwotICAgIGlmICghbGV4aWNh
bEVudmlyb25tZW50KQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gbGV4aWNhbEVudmly
b25tZW50LT5yZWdpc3RlcnMoKTsKLX0KLQogSlNBcnJheUJ1ZmZlclZpZXcqIEdyYXBoOjp0cnlH
ZXRGb2xkYWJsZVZpZXcoTm9kZSogbm9kZSkKIHsKICAgICBKU0FycmF5QnVmZmVyVmlldyogdmll
dyA9IG5vZGUtPmR5bmFtaWNDYXN0Q29uc3RhbnQ8SlNBcnJheUJ1ZmZlclZpZXcqPigpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2aXNpb24gMTgwOTEwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
NjcsMTEgKzM2NywxNCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBiYXNlbGluZUNvZGVCbG9j
a0Zvck9yaWdpbkFuZEJhc2VsaW5lQ29kZUJsb2NrKGNvZGVPcmlnaW4sIG1fcHJvZmlsZWRCbG9j
ayk7CiAgICAgfQogICAgIAotICAgIGNvbnN0IEJpdFZlY3RvciYgY2FwdHVyZWRWYXJzRm9yKElu
bGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lKQorICAgIFN5bWJvbFRhYmxlKiBzeW1ib2xU
YWJsZUZvcihJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSkKICAgICB7Ci0gICAgICAg
IGlmICghaW5saW5lQ2FsbEZyYW1lKQotICAgICAgICAgICAgcmV0dXJuIG1fb3V0ZXJtb3N0Q2Fw
dHVyZWRWYXJzOwotICAgICAgICByZXR1cm4gaW5saW5lQ2FsbEZyYW1lLT5jYXB0dXJlZFZhcnM7
CisgICAgICAgIHJldHVybiBiYXNlbGluZUNvZGVCbG9ja0ZvcihpbmxpbmVDYWxsRnJhbWUpLT5z
eW1ib2xUYWJsZSgpOworICAgIH0KKyAgICAKKyAgICBTeW1ib2xUYWJsZSogc3ltYm9sVGFibGVG
b3IoY29uc3QgQ29kZU9yaWdpbiYgY29kZU9yaWdpbikKKyAgICB7CisgICAgICAgIHJldHVybiBz
eW1ib2xUYWJsZUZvcihjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSk7CiAgICAgfQogICAgIAog
ICAgIGJvb2wgaXNTdHJpY3RNb2RlRm9yKENvZGVPcmlnaW4gY29kZU9yaWdpbikKQEAgLTc0Miw3
ICs3NDUsNiBAQCBwdWJsaWM6CiAgICAgSlNWYWx1ZSB0cnlHZXRDb25zdGFudFByb3BlcnR5KGNv
bnN0IEFic3RyYWN0VmFsdWUmLCBQcm9wZXJ0eU9mZnNldCk7CiAgICAgCiAgICAgSlNMZXhpY2Fs
RW52aXJvbm1lbnQqIHRyeUdldEFjdGl2YXRpb24oTm9kZSopOwotICAgIFdyaXRlQmFycmllckJh
c2U8VW5rbm93bj4qIHRyeUdldFJlZ2lzdGVycyhOb2RlKik7CiAgICAgCiAgICAgSlNBcnJheUJ1
ZmZlclZpZXcqIHRyeUdldEZvbGRhYmxlVmlldyhOb2RlKik7CiAgICAgSlNBcnJheUJ1ZmZlclZp
ZXcqIHRyeUdldEZvbGRhYmxlVmlldyhOb2RlKiwgQXJyYXlNb2RlKTsKQEAgLTgzNSw3ICs4Mzcs
NiBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgbV9wYXJhbWV0ZXJTbG90czsKICAgICBpbnQgbV9t
YWNoaW5lQ2FwdHVyZVN0YXJ0OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxTbG93QXJndW1lbnRbXT4g
bV9zbG93QXJndW1lbnRzOwotICAgIEJpdFZlY3RvciBtX291dGVybW9zdENhcHR1cmVkVmFyczsK
IAogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgc3RkOjp1bm9yZGVyZWRfbWFwPGludDY0X3Qs
IGRvdWJsZSo+IG1fZG91YmxlQ29uc3RhbnRzTWFwOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdIZWFwTG9jYXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0hlYXBMb2NhdGlvbi5oCShyZXZpc2lvbiAxODA5MTApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0hlYXBMb2NhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC00
Miw2ICs0Miw3IEBAIGVudW0gTG9jYXRpb25LaW5kIHsKICAgICBDaGVja0hhc0luc3RhbmNlTG9j
LAogICAgIENsb3N1cmVSZWdpc3RlcnNMb2MsCiAgICAgQ2xvc3VyZVZhcmlhYmxlTG9jLAorICAg
IERpcmVjdEFyZ3VtZW50c0xvYywKICAgICBHZXR0ZXJMb2MsCiAgICAgR2xvYmFsVmFyaWFibGVM
b2MsCiAgICAgSGFzSW5kZXhlZFByb3BlcnR5TG9jLApAQCAtNTksNyArNjAsNyBAQCBlbnVtIExv
Y2F0aW9uS2luZCB7CiAgICAgVHlwZU9mTG9jLAogICAgIFR5cGVkQXJyYXlCeXRlT2Zmc2V0TG9j
LAogICAgIFZhckluamVjdGlvbldhdGNocG9pbnRMb2MsCi0gICAgVmFyaWFibGVMb2MKKyAgICBT
dGFja0xvYwogfTsKIAogY2xhc3MgSGVhcExvY2F0aW9uIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3BwCShyZXZp
c2lvbiAxODA5MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luUGxhY2VBYnN0
cmFjdFN0YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI5LDExICsxMjksNyBAQCB2b2lkIElu
UGxhY2VBYnN0cmFjdFN0YXRlOjppbml0aWFsaXplKCkKICAgICAgICAgfQogICAgIH0KICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IHJvb3QtPnZhbHVlc0F0SGVhZC5udW1iZXJPZkxvY2Fscygp
OyArK2kpIHsKLSAgICAgICAgTm9kZSogbm9kZSA9IHJvb3QtPnZhcmlhYmxlc0F0SGVhZC5sb2Nh
bChpKTsKLSAgICAgICAgaWYgKG5vZGUgJiYgbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPmlz
Q2FwdHVyZWQoKSkKLSAgICAgICAgICAgIHJvb3QtPnZhbHVlc0F0SGVhZC5sb2NhbChpKS5tYWtl
SGVhcFRvcCgpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByb290LT52YWx1ZXNBdEhlYWQu
bG9jYWwoaSkuY2xlYXIoKTsKKyAgICAgICAgcm9vdC0+dmFsdWVzQXRIZWFkLmxvY2FsKGkpLmNs
ZWFyKCk7CiAgICAgICAgIHJvb3QtPnZhbHVlc0F0VGFpbC5sb2NhbChpKS5jbGVhcigpOwogICAg
IH0KICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDEgOyBibG9ja0luZGV4IDwgbV9n
cmFwaC5udW1CbG9ja3MoKTsgKytibG9ja0luZGV4KSB7CkBAIC0yNjMsNDAgKzI1OSwzMSBAQCBi
b29sIEluUGxhY2VBYnN0cmFjdFN0YXRlOjptZXJnZVN0YXRlQXRUCiAgICAgICAgIAogICAgIEFi
c3RyYWN0VmFsdWUgc291cmNlOwogICAgIAotICAgIGlmIChub2RlLT52YXJpYWJsZUFjY2Vzc0Rh
dGEoKS0+aXNDYXB0dXJlZCgpKSB7Ci0gICAgICAgIC8vIElmIGl0J3MgY2FwdHVyZWQgdGhlbiB3
ZSBrbm93IHRoYXQgd2hhdGV2ZXIgdmFsdWUgd2FzIHN0b3JlZCBpbnRvIHRoZSB2YXJpYWJsZSBs
YXN0IGlzIHRoZQotICAgICAgICAvLyBvbmUgd2UgY2FyZSBhYm91dC4gVGhpcyBpcyB0cnVlIGV2
ZW4gaWYgdGhlIHZhcmlhYmxlIGF0IHRhaWwgaXMgZGVhZCwgd2hpY2ggbWlnaHQgaGFwcGVuIGlm
Ci0gICAgICAgIC8vIHRoZSBsYXN0IHRoaW5nIHdlIGRpZCB0byB0aGUgdmFyaWFibGUgd2FzIGEg
R2V0TG9jYWwgYW5kIHRoZW4gZW5kZWQgdXAgbm90IHVzaW5nIHRoZQotICAgICAgICAvLyBHZXRM
b2NhbCdzIHJlc3VsdC4KLSAgICAgICAgCisgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CisgICAg
Y2FzZSBQaGk6CisgICAgY2FzZSBTZXRBcmd1bWVudDoKKyAgICBjYXNlIFBoYW50b21Mb2NhbDoK
KyAgICBjYXNlIEZsdXNoOgorICAgICAgICAvLyBUaGUgYmxvY2sgdHJhbnNmZXJzIHRoZSB2YWx1
ZSBmcm9tIGhlYWQgdG8gdGFpbC4KICAgICAgICAgc291cmNlID0gaW5WYXJpYWJsZTsKLSAgICB9
IGVsc2UgewotICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKLSAgICAgICAgY2FzZSBQaGk6
Ci0gICAgICAgIGNhc2UgU2V0QXJndW1lbnQ6Ci0gICAgICAgIGNhc2UgUGhhbnRvbUxvY2FsOgot
ICAgICAgICBjYXNlIEZsdXNoOgotICAgICAgICAgICAgLy8gVGhlIGJsb2NrIHRyYW5zZmVycyB0
aGUgdmFsdWUgZnJvbSBoZWFkIHRvIHRhaWwuCi0gICAgICAgICAgICBzb3VyY2UgPSBpblZhcmlh
YmxlOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCi0g
ICAgICAgIGNhc2UgR2V0TG9jYWw6Ci0gICAgICAgICAgICAvLyBUaGUgYmxvY2sgcmVmaW5lcyB0
aGUgdmFsdWUgd2l0aCBhZGRpdGlvbmFsIHNwZWN1bGF0aW9ucy4KLSAgICAgICAgICAgIHNvdXJj
ZSA9IGZvck5vZGUobm9kZSk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICBjYXNlIEdldExvY2Fs
OgorICAgICAgICAvLyBUaGUgYmxvY2sgcmVmaW5lcyB0aGUgdmFsdWUgd2l0aCBhZGRpdGlvbmFs
IHNwZWN1bGF0aW9ucy4KKyAgICAgICAgc291cmNlID0gZm9yTm9kZShub2RlKTsKKyAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAKLSAgICAgICAgY2FzZSBTZXRMb2NhbDoKLSAgICAgICAgICAg
IC8vIFRoZSBibG9jayBzZXRzIHRoZSB2YXJpYWJsZSwgYW5kIHBvdGVudGlhbGx5IHJlZmluZXMg
aXQsIGJvdGgKLSAgICAgICAgICAgIC8vIGJlZm9yZSBhbmQgYWZ0ZXIgc2V0dGluZyBpdC4KLSAg
ICAgICAgICAgIHNvdXJjZSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICAgICAg
aWYgKG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5mbHVzaEZvcm1hdCgpID09IEZsdXNoZWRE
b3VibGUpCi0gICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIShzb3VyY2UubV90eXBlICYg
flNwZWNGdWxsRG91YmxlKSk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICBjYXNlIFNldExvY2Fs
OgorICAgICAgICAvLyBUaGUgYmxvY2sgc2V0cyB0aGUgdmFyaWFibGUsIGFuZCBwb3RlbnRpYWxs
eSByZWZpbmVzIGl0LCBib3RoCisgICAgICAgIC8vIGJlZm9yZSBhbmQgYWZ0ZXIgc2V0dGluZyBp
dC4KKyAgICAgICAgc291cmNlID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIGlm
IChub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+Zmx1c2hGb3JtYXQoKSA9PSBGbHVzaGVkRG91
YmxlKQorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIShzb3VyY2UubV90eXBlICYgflNwZWNG
dWxsRG91YmxlKSk7CisgICAgICAgIGJyZWFrOwogICAgICAgICAKLSAgICAgICAgZGVmYXVsdDoK
LSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQorICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAKICAgICBpZiAoZGVzdGlu
YXRpb24gPT0gc291cmNlKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05v
ZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAko
cmV2aXNpb24gMTgwOTEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTk0MSwxNSArOTQxLDI2IEBAIHN0cnVjdCBOb2RlIHsKICAgICAg
ICAgcmV0dXJuIG1fb3BJbmZvOwogICAgIH0KICAgICAKLSAgICBib29sIGhhc1Zhck51bWJlcigp
CisgICAgYm9vbCBoYXNTY29wZU9mZnNldCgpCiAgICAgewogICAgICAgICByZXR1cm4gb3AoKSA9
PSBHZXRDbG9zdXJlVmFyIHx8IG9wKCkgPT0gUHV0Q2xvc3VyZVZhcjsKICAgICB9CiAKLSAgICBp
bnQgdmFyTnVtYmVyKCkKKyAgICBTY29wZU9mZnNldCBzY29wZU9mZnNldCgpCiAgICAgewotICAg
ICAgICBBU1NFUlQoaGFzVmFyTnVtYmVyKCkpOwotICAgICAgICByZXR1cm4gbV9vcEluZm87Cisg
ICAgICAgIEFTU0VSVChoYXNTY29wZU9mZnNldCgpKTsKKyAgICAgICAgcmV0dXJuIFNjb3BlT2Zm
c2V0KG1fb3BJbmZvKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBoYXNDYXB0dXJlZEFyZ3VtZW50
c09mZnNldCgpCisgICAgeworICAgICAgICByZXR1cm4gb3AoKSA9PSBHZXRGcm9tQXJndW1lbnRz
IHx8IG9wKCkgPT0gUHV0VG9Bcmd1bWVudHM7CisgICAgfQorICAgIAorICAgIENhcHR1cmVkQXJn
dW1lbnRzT2Zmc2V0IGNhcHR1cmVkQXJndW1lbnRzT2Zmc2V0KCkKKyAgICB7CisgICAgICAgIEFT
U0VSVChoYXNDYXB0dXJlZEFyZ3VtZW50c09mZnNldCgpKTsKKyAgICAgICAgcmV0dXJuIENhcHR1
cmVkQXJndW1lbnRzT2Zmc2V0KG1fb3BJbmZvKTsKICAgICB9CiAgICAgCiAgICAgYm9vbCBoYXNS
ZWdpc3RlclBvaW50ZXIoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2Rl
VHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5
cGUuaAkocmV2aXNpb24gMTgwOTEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdO
b2RlVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODIsNyArMTgyLDYgQEAgbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBERkcgewogICAgIG1hY3JvKEdldFR5cGVkQXJyYXlCeXRlT2Zmc2V0LCBO
b2RlUmVzdWx0SW50MzIpIFwKICAgICBtYWNybyhHZXRTY29wZSwgTm9kZVJlc3VsdEpTKSBcCiAg
ICAgbWFjcm8oU2tpcFNjb3BlLCBOb2RlUmVzdWx0SlMpIFwKLSAgICBtYWNybyhHZXRDbG9zdXJl
UmVnaXN0ZXJzLCBOb2RlUmVzdWx0U3RvcmFnZSkgXAogICAgIG1hY3JvKEdldENsb3N1cmVWYXIs
IE5vZGVSZXN1bHRKUykgXAogICAgIG1hY3JvKFB1dENsb3N1cmVWYXIsIE5vZGVNdXN0R2VuZXJh
dGUpIFwKICAgICBtYWNybyhHZXRHbG9iYWxWYXIsIE5vZGVSZXN1bHRKUykgXApAQCAtMjY1LDI0
ICsyNjQsMTYgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAgIG1hY3JvKFBy
b2ZpbGVUeXBlLCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oUHJvZmlsZUNvbnRyb2xG
bG93LCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgXAotICAgIC8qIE5vZGVzIHVzZWQgZm9yIGFj
dGl2YXRpb25zLiBBY3RpdmF0aW9uIHN1cHBvcnQgd29ya3MgYnkgaGF2aW5nIGl0IGFuY2hvcmVk
IGF0ICovXAotICAgIC8qIGVwaWxnb3VlcyB2aWEgVGVhck9mZkFjdGl2YXRpb24sIGFuZCBhbGwg
Q3JlYXRlQWN0aXZhdGlvbiBub2RlcyBrZXB0IGFsaXZlIGJ5ICovXAotICAgIC8qIGJlaW5nIHRo
cmVhZGVkIHdpdGggZWFjaCBvdGhlci4gKi9cCiAgICAgbWFjcm8oQ3JlYXRlQWN0aXZhdGlvbiwg
Tm9kZVJlc3VsdEpTKSBcCiAgICAgXAotICAgIC8qIE5vZGVzIHVzZWQgZm9yIGFyZ3VtZW50cy4g
U2ltaWxhciB0byBsZXhpY2FsIGVudmlyb25tZW50IHN1cHBvcnQsIG9ubHkgaXQgbWFrZXMgZXZl
biBsZXNzICovXAotICAgIC8qIHNlbnNlLiAqL1wKLSAgICBtYWNybyhDcmVhdGVBcmd1bWVudHMs
IE5vZGVSZXN1bHRKUykgXAotICAgIG1hY3JvKFBoYW50b21Bcmd1bWVudHMsIE5vZGVSZXN1bHRK
UykgXAotICAgIG1hY3JvKFRlYXJPZmZBcmd1bWVudHMsIE5vZGVNdXN0R2VuZXJhdGUpIFwKLSAg
ICBtYWNybyhHZXRNeUFyZ3VtZW50c0xlbmd0aCwgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5l
cmF0ZSkgXAotICAgIG1hY3JvKEdldE15QXJndW1lbnRCeVZhbCwgTm9kZVJlc3VsdEpTIHwgTm9k
ZU11c3RHZW5lcmF0ZSkgXAotICAgIG1hY3JvKEdldE15QXJndW1lbnRzTGVuZ3RoU2FmZSwgTm9k
ZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAotICAgIG1hY3JvKEdldE15QXJndW1lbnRC
eVZhbFNhZmUsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKLSAgICBtYWNybyhD
aGVja0FyZ3VtZW50c05vdENyZWF0ZWQsIE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAgICBtYWNybyhD
cmVhdGVEaXJlY3RBcmd1bWVudHMsIE5vZGVSZXN1bHRKUyk