<?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>5192</bug_id>
          
          <creation_ts>2005-09-29 15:37:55 -0700</creation_ts>
          <short_desc>WebKit+SVG is missing support for many Filter Elements</short_desc>
          <delta_ts>2005-11-28 15:33:25 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>SVG</component>
          <version>420+</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P4</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>5857</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric Seidel (no email)">eric</reporter>
          <assigned_to name="Oliver Hunt">oliver</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>20965</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2005-09-29 15:37:55 -0700</bug_when>
    <thetext>WebKit+SVG is missing support for many SVG filter elements:

FE_DISTANT_LIGHT 
FE_POINT_LIGHT
FE_SPOT_LIGHT 
FE_COMPONENT_TRANSFER 
FE_CONVOLVE_MATRIX 
FE_DIFFUSE_LIGHTING 
FE_DISPLACEMENT_MAP
FE_MORPHOLOGY 
FE_SPECULAR_LIGHTING 
FE_TURBULENCE 

Most of these would be very easy to support by writing a small CoreImage filter, and requires someone 
with a bit of OpenGL knowledge to write about 5 lines of code. :)  Some of these may even be possible 
w/ existing CoreImage filters.

FE_IMAGE support also exists, but is broken.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>21260</commentid>
    <comment_count>1</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2005-10-03 01:56:20 -0700</bug_when>
    <thetext>Oliver said he&apos;d take a stab at this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>21526</commentid>
    <comment_count>2</comment_count>
      <attachid>4230</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2005-10-06 04:38:31 -0700</bug_when>
    <thetext>Created attachment 4230
First pass at Obj-C and C++ bindings of Olivers filter code.

Oliver began from one end (the gl shading code) and I began from the other
(with the obj-c and c++ wrappers &amp; kcanvas integration).  Hopefully we&apos;ll meet
in the middle eventually :)  This is my &quot;first pass&quot; at the necessary wrappers.
I have not tested compiling yet though...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>21574</commentid>
    <comment_count>3</comment_count>
      <attachid>4251</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2005-10-08 01:45:52 -0700</bug_when>
    <thetext>Created attachment 4251
Another pass at Obj-C and C++ binding code for Oliver</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>23057</commentid>
    <comment_count>4</comment_count>
      <attachid>4251</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2005-10-27 00:52:07 -0700</bug_when>
    <thetext>Comment on attachment 4251
Another pass at Obj-C and C++ binding code for Oliver

This code is far from complete, but I would like to land it so as to put Oliver
in a better position to finish his implementation.  Landing this does not break
any existing layout tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>23582</commentid>
    <comment_count>5</comment_count>
      <attachid>4569</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2005-11-02 19:32:21 -0800</bug_when>
    <thetext>Created attachment 4569
current state of lighting patch pt1

This is the portion of the lighting patch that resides in kcanvas/device</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>23583</commentid>
    <comment_count>6</comment_count>
      <attachid>4570</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2005-11-02 19:33:24 -0800</bug_when>
    <thetext>Created attachment 4570
current state of lighting pt2

This is the portion of the lighting patch that lives inside ksvg2/svg</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>23814</commentid>
    <comment_count>7</comment_count>
      <attachid>4626</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2005-11-08 01:58:32 -0800</bug_when>
    <thetext>Created attachment 4626
Lighting patch v3

With many examples of poor programming practice, and incomplete path info this
is probably not a useful patch for most purposes :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>23815</commentid>
    <comment_count>8</comment_count>
      <attachid>4626</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2005-11-08 02:55:26 -0800</bug_when>
    <thetext>Comment on attachment 4626
Lighting patch v3

Ok, my raft of comments on your patch:

GREAT WORK.  Amazing screen shot you sent around earlier.

There are a bunch of little style issues to fix:
if( -- space between if and (
foo(){} -- space between ) and {
foo() {}; -- no need for ;
if (foo) bar();  -- No one-line ifs,  bar() needs to have its&apos; own line,
indented.

KCanvasPoint3F makePoint() should be part of KCanvas3F, not a static function
in ksvg2.

Long constructor functions should be moved into the .cpp files, instead of the
headers.

Constructors should use c++ style inits m_foo(foo) instead of m_foo = foo;


Some functional issues too:

&lt;feDiffuseLighting&gt; and &lt;feSpecularLighting&gt; can have other nodes than just a
single lightsource in them.  So you need to walk the child nodes, looking for
the first source and use that.

Your custom filter code should take CIImage inputs instead of CISamplers and
should make the appropriate CISamplers from CIFilters in the apply function.

Don&apos;t call +initialize directly.  That&apos;s done for you at the first mention of
the class.  Call something innocous like [MyFilter class]; instead.

Yeah, in general, don&apos;t pass around CISamplers... think of that as an
&quot;internal&quot; class which CIFilters use.

It&apos;s better not to use convenience functions like:
outputImageWithNormals, but rather to lookup filters by name, reset them to
defaults, set each default, and then grab the output image (a CIImage) to pass
to the next filter.  Folowing this format makes for easier to read code, and
code to which it&apos;s easier to add things like Filter sub-region support.

We should consider removing FE_POINT_LIGHT from the constants for filter types,
if they are not ever going to be constructed as filters by the device.

We still need to come up with a slick solution for either loading the kernel
files at runtime, or compiling the kernel source into WebKit as a static
string.  Writing a simple perl script to take in cikernel file and output a
header file with a single static string defined would be a slick solution.

convolve still should be changed to use 3 3-vectors instead of 9 individual
float lookups.

New files you created should have the same Apple-style BSD license header,
except with your name on them.	Files you copied from ksvg, should carry the
ksvg style LGPL header w/ your name (and the names from the file you copied). 
All files need a up-to-date copyright header however.

All and all, the patch looks GREAT!  There are just a few little nits which we
should clean up before we land this one.

Thanks again for all your hard work!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>24257</commentid>
    <comment_count>9</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2005-11-18 21:28:13 -0800</bug_when>
    <thetext>We also need support for the arithmetic operator of feComposite -- this should take only  a few 
minutes and a fairly simple shader -- adding the shader should be completely contrained to the shader 
wrappers, and kcanvasfiltersquartz.mm (i think that&apos;s the file)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>24279</commentid>
    <comment_count>10</comment_count>
      <attachid>4738</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2005-11-19 17:11:19 -0800</bug_when>
    <thetext>Created attachment 4738
Yet another version of the lighting patch

Still not ready for landing but a number of style problems have been fixed. 
Spotlights now go (albeit without working defaults).  

Also adds support for the arithmetic operation for feComposite</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>24280</commentid>
    <comment_count>11</comment_count>
      <attachid>4738</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2005-11-19 17:12:42 -0800</bug_when>
    <thetext>Comment on attachment 4738
Yet another version of the lighting patch

Still has a number of style problems, but may as well catch any *wrong* fixes
before i do them everywhere</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>24286</commentid>
    <comment_count>12</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2005-11-20 04:02:48 -0800</bug_when>
    <thetext>our implementation of FE_GAUSSIAN_BLUR doesn&apos;t match the output of batik, I&apos;m inclined to think this is 
because we&apos;re using an area blur rather than that wanted by the blur spec (we use standard deviation as 
radius, which is , ahem, wrong..)
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>24288</commentid>
    <comment_count>13</comment_count>
      <attachid>4739</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2005-11-20 05:27:22 -0800</bug_when>
    <thetext>Created attachment 4739
more lighting

Primarily reformatting, but some code corrections exist (missing breaks)

beware the dragons</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>24459</commentid>
    <comment_count>14</comment_count>
      <attachid>4739</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2005-11-23 04:23:28 -0800</bug_when>
    <thetext>Comment on attachment 4739
more lighting

We&apos;ve dicsussed this some over irc, issues include:

* copyright headers
* some code could be shorter:
+    CIFilter *filter;
+    filter = [[self alloc] init];
+    return [filter autorelease];
* newlines:
\ No newline at end of file
* no need for this header:
+#import &lt;stdio.h&gt;

I believe there were other things we discussed via irc.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>24719</commentid>
    <comment_count>15</comment_count>
      <attachid>4824</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2005-11-27 19:57:04 -0800</bug_when>
    <thetext>Created attachment 4824
Yet another update to the lighting patch

Okay this patch fixes:
  * many formatting issues
  * copyright notices (no more &quot;copyright foo goes here&quot;)
  * many lighting issues, including incorrect z-depth calculation (which no one
noticed)
Unfortunately it has shown &quot;issues&quot; 
  * Images created by SVG
(http://www.w3.org/TR/2002/CR-SVG11-20020430/images/filters/filters01.svg) seem
to be flipped relative to images loaded with feImage (at least when there
normals are  calculated).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>24723</commentid>
    <comment_count>16</comment_count>
      <attachid>4827</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2005-11-27 20:47:32 -0800</bug_when>
    <thetext>Created attachment 4827
Patch updated to work with current ToT

Same as above, with a few fixes to keep up to date with ToT</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>24753</commentid>
    <comment_count>17</comment_count>
      <attachid>4832</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2005-11-28 04:55:48 -0800</bug_when>
    <thetext>Created attachment 4832
Lighting patch, with more formatting fixes

more formatting changes, rearranged how
SVGFEDiffuse/SpecularLightingElementImpl get the light source.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>24760</commentid>
    <comment_count>18</comment_count>
      <attachid>4832</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2005-11-28 10:25:52 -0800</bug_when>
    <thetext>Comment on attachment 4832
Lighting patch, with more formatting fixes

Here are my thoughts:

Still have one stray
#import &lt;stdio.h&gt; in WKDiffuseLightingFilter.mm

+// Temporary HACK
+// FIXME, more here...
Such comments should be either made more clear or removed.

Still a couple spacing mistakes:
KCLightSource(KCLightType a_type):m_type(a_type) {}
(missing spaces around the : )
and
+    const KCLightSource * lightSource() const { return m_lightSource; }
(too many spaces around * )

Why switch back to CIGaussianBlur?  Does that offer better correctness?

On the whole, this looks nearly goood enough to land.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>24762</commentid>
    <comment_count>19</comment_count>
      <attachid>4832</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2005-11-28 11:47:38 -0800</bug_when>
    <thetext>Comment on attachment 4832
Lighting patch, with more formatting fixes

The paths are doubled for the new filter files:

kcanvas/device/quartz/device/quartz/filters/WKArithmeticFilter.cikernel</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>24778</commentid>
    <comment_count>20</comment_count>
      <attachid>4832</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2005-11-28 15:18:29 -0800</bug_when>
    <thetext>Comment on attachment 4832
Lighting patch, with more formatting fixes

I fixed the issues I mentioned above locally (including adding these to the
project file, and making a change log entry).  I&apos;ll land my fixed patch, and
post for posterity.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>24779</commentid>
    <comment_count>21</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2005-11-28 15:33:25 -0800</bug_when>
    <thetext>Landed Oliver&apos;s lighting patch.  I&apos;m going to close this bug out and open up a new one to track the 
remaining filters.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>4230</attachid>
            <date>2005-10-06 04:38:31 -0700</date>
            <delta_ts>2005-10-08 01:45:52 -0700</delta_ts>
            <desc>First pass at Obj-C and C++ bindings of Olivers filter code.</desc>
            <filename>filters.patch</filename>
            <type>text/plain</type>
            <size>48767</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">SW5kZXg6IEtDYW52YXNGaWx0ZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NW
R1N1cHBvcnQva2NhbnZhcy9LQ2FudmFzRmlsdGVycy5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAx
LjYKZGlmZiAtcCAtdSAtcjEuNiBLQ2FudmFzRmlsdGVycy5oCi0tLSBLQ2FudmFzRmlsdGVycy5o
CTggU2VwIDIwMDUgMDg6MDM6MTAgLTAwMDAJMS42CisrKyBLQ2FudmFzRmlsdGVycy5oCTYgT2N0
IDIwMDUgMTE6Mzc6NTIgLTAwMDAKQEAgLTUzLDYgKzUzLDM2IEBAIHR5cGVkZWYgZW51bQogI2lu
Y2x1ZGUgPHFjb2xvci5oPgogI2luY2x1ZGUgPHFzdHJpbmdsaXN0Lmg+CiAKK2NsYXNzIEtDYW52
YXNQb2ludDNGIHsKK3B1YmxpYzoKKyAgICBmbG9hdCB4KCkgeyByZXR1cm4gbV94OyB9CisgICAg
dm9pZCBzZXRYKGZsb2F0IHgpIHsgbV94ID0geDsgfQorICAgIAorICAgIGZsb2F0IHkoKSB7IHJl
dHVybiBtX3k7IH0KKyAgICB2b2lkIHNldFkoZmxvYXQgeSkgeyBtX3kgPSB5OyB9CisgICAgCisg
ICAgZmxvYXQgeigpIHsgcmV0dXJuIG1fejsgfQorICAgIHZvaWQgc2V0WihmbG9hdCB6KSB7IG1f
eiA9IHo7IH0KKyAgICAKK3ByaXZhdGU6CisgICAgZmxvYXQgbV94OworICAgIGZsb2F0IG1feTsK
KyAgICBmbG9hdCBtX3o7Cit9OworCisvLyBUZW1wb3JhcnkgSEFDSworY2xhc3MgUVBvaW50RiB7
CisgICAgICAgIGZsb2F0IHgoKSB7IHJldHVybiBtX3g7IH0KKyAgICB2b2lkIHNldFgoZmxvYXQg
eCkgeyBtX3ggPSB4OyB9CisgICAgCisgICAgZmxvYXQgeSgpIHsgcmV0dXJuIG1feTsgfQorICAg
IHZvaWQgc2V0WShmbG9hdCB5KSB7IG1feSA9IHk7IH0KKyAgICAKK3ByaXZhdGU6CisgICAgZmxv
YXQgbV94OworICAgIGZsb2F0IG1feTsKK307CisKIGNsYXNzIEtDYW52YXNGaWx0ZXJFZmZlY3Q7
CiBjbGFzcyBLUmVuZGVyaW5nRGV2aWNlQ29udGV4dDsKIApAQCAtMTQ1LDI4ICsxNzUsMzUgQEAg
cHJpdmF0ZToKIGNsYXNzIEtDYW52YXNGRVBvaW50TGlnaHQgOiBwdWJsaWMgS0NhbnZhc0ZpbHRl
ckVmZmVjdAogewogcHVibGljOgorICAgIEtDYW52YXNQb2ludDNGIGxvY2F0aW9uKCkgeyByZXR1
cm4gbV9sb2NhdGlvbjsgfQorICAgIHZvaWQgc2V0TG9jYXRpb24oY29uc3QgS0NhbnZhc1BvaW50
M0YgJmxvY2F0aW9uKSB7IG1fbG9jYXRpb24gPSBsb2NhdGlvbjsgfQogCiAgICAgUVRleHRTdHJl
YW0gJmV4dGVybmFsUmVwcmVzZW50YXRpb24oUVRleHRTdHJlYW0gJikgY29uc3Q7CiAKIHByaXZh
dGU6Ci0gICAgZmxvYXQgbV94OwotICAgIGZsb2F0IG1feTsKLSAgICBmbG9hdCBtX3o7CisgICAg
S0NhbnZhc1BvaW50M0YgbV9sb2NhdGlvbjsKIH07CiAKIGNsYXNzIEtDYW52YXNGRVNwb3RMaWdo
dCA6IHB1YmxpYyBLQ2FudmFzRmlsdGVyRWZmZWN0CiB7CiBwdWJsaWM6CisgICAgS0NhbnZhc1Bv
aW50M0YgbG9jYXRpb24oKSB7IHJldHVybiBsb2NhdGlvbjsgfQorICAgIHZvaWQgc2V0TG9jYXRp
b24oY29uc3QgS0NhbnZhc1BvaW50M0YgJmxvY2F0aW9uKSB7IG1fbG9jYXRpb24gPSBsb2NhdGlv
bjsgfQorICAgIAorICAgIEtDYW52YXNQb2ludDNGIHBvaW50c0F0KCkgeyByZXR1cm4gbV9wb2lu
dHNBdDsgfQorICAgIHZvaWQgc2V0UG9pbnRzQXQoY29uc3QgS0NhbnZhc1BvaW50M0YgJnBvaW50
c0F0KSB7IG1fcG9pbnRzQXQgPSBwb2ludHNBdDsgfQorICAgIAorICAgIGZsb2F0IHNwZWN1bGFy
RXhwb25lbnQoKSBjb25zdCB7IHJldHVybiBtX3NwZWN1bGFyRXhwb25lbnQ7IH0KKyAgICB2b2lk
IHNldFNwZWN1bGFyRXhwb25lbnQoZmxvYXQgc3BlY3VsYXJFeHBvbmVudCkgeyBtX3NwZWN1bGFy
RXhwb25lbnQgPSBzcGVjdWxhckV4cG9uZW50OyB9CisKKyAgICBmbG9hdCBsaW1pdGluZ0NvbmVB
bmdsZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGltaXRpbmdDb25lQW5nbGU7IH0KKyAgICB2b2lkIHNl
dExpbWl0aW5nQ29uZUFuZ2xlKGZsb2F0IGxpbWl0aW5nQ29uZUFuZ2xlKSB7IG1fbGltaXRpbmdD
b25lQW5nbGUgPSBsaW1pdGluZ0NvbmVBbmdsZTsgfQogCiAgICAgUVRleHRTdHJlYW0gJmV4dGVy
bmFsUmVwcmVzZW50YXRpb24oUVRleHRTdHJlYW0gJikgY29uc3Q7CiAKIHByaXZhdGU6Ci0gICAg
ZmxvYXQgbV94OwotICAgIGZsb2F0IG1feTsKLSAgICBmbG9hdCBtX3o7Ci0gICAgZmxvYXQgbV9w
b2ludHNBdFg7Ci0gICAgZmxvYXQgbV9wb2ludHNBdFk7Ci0gICAgZmxvYXQgbV9wb2ludHNBdFo7
CisgICAgS0NhbnZhc1BvaW50M0YgbV9sb2NhdGlvbjsKKyAgICBLQ2FudmFzUG9pbnQzRiBtX3Bv
aW50c0F0OwogICAgIGZsb2F0IG1fc3BlY3VsYXJFeHBvbmVudDsKICAgICBmbG9hdCBtX2xpbWl0
aW5nQ29uZUFuZ2xlOwogfTsKQEAgLTM1MSwxNCArMzg4LDI1IEBAIHByaXZhdGU6CiBjbGFzcyBL
Q2FudmFzRkVEaWZmdXNlTGlnaHRpbmcgOiBwdWJsaWMgS0NhbnZhc0ZpbHRlckVmZmVjdAogewog
cHVibGljOgorICAgIFFDb2xvciBsaWdodGluZ0NvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9saWdo
dGluZ0NvbG9yOyB9CisgICAgdm9pZCBzZXRMaWdodGluZ0NvbG9yKGNvbnN0IFFDb2xvciAmbGln
aHRpbmdDb2xvcikgeyBtX2xpZ2h0aW5nQ29sb3IgPSBsaWdodGluZ0NvbG9yOyB9CisKKyAgICBm
bG9hdCBzdXJmYWNlU2NhbGUoKSBjb25zdCB7IHJldHVybiBtX3N1cmZhY2VTY2FsZTsgfQorICAg
IHZvaWQgc2V0U3VyZmFjZVNjYWxlKGZsb2F0IHN1cmZhY2VTY2FsZSkgeyBtX3N1cmZhY2VTY2Fs
ZSA9IHN1cmZhY2VTY2FsZTsgfQorICAgIAorICAgIGZsb2F0IGRpZmZ1c2VDb25zdGFudCgpIGNv
bnN0IHsgcmV0dXJuIG1fZGlmZnVzZUNvbnN0YW50OyB9CisgICAgdm9pZCBzZXREaWZmdXNlQ29u
c3RhbnQoZmxvYXQgZGlmZnVzZUNvbnN0YW50KSB7IG1fZGlmZnVzZUNvbnN0YW50ID0gZGlmZnVz
ZUNvbnN0YW50OyB9CisgICAgCisgICAgUVBvaW50RiBrZXJuZWxVbml0TGVuZ3RoKCkgeyByZXR1
cm4gbV9rZXJuZWxVbml0TGVuZ3RoOyB9CisgICAgdm9pZCBzZXRLZXJuZWxVbml0TGVuZ3RoKGNv
bnN0IFFQb2ludEYgJmtlcm5lbFVuaXRMZW5ndGgpIHsgbV9rZXJuZWxVbml0TGVuZ3RoID0ga2Vy
bmVsVW5pdExlbmd0aDsgfQogCiAgICAgUVRleHRTdHJlYW0gJmV4dGVybmFsUmVwcmVzZW50YXRp
b24oUVRleHRTdHJlYW0gJikgY29uc3Q7CiAKIHByaXZhdGU6CisgICAgUUNvbG9yIG1fbGlnaHRp
bmdDb2xvcjsKICAgICBmbG9hdCBtX3N1cmZhY2VTY2FsZTsKICAgICBmbG9hdCBtX2RpZmZ1c2VD
b25zdGFudDsKLSAgICBmbG9hdCBtX2tlcm5lbFVuaXRMZW5ndGhYOwotICAgIGZsb2F0IG1fa2Vy
bmVsVW5pdExlbmd0aFk7CisgICAgUVBvaW50RiBtX2tlcm5lbFVuaXRMZW5ndGg7CiB9OwogCiB0
eXBlZGVmIGVudW0gewpAQCAtMzg5LDcgKzQzNyw2IEBAIHB1YmxpYzoKICAgICBRQ29sb3IgZmxv
b2RDb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fZmxvb2RDb2xvcjsgfQogICAgIHZvaWQgc2V0Rmxv
b2RDb2xvcihjb25zdCBRQ29sb3IgJmNvbG9yKSB7IG1fZmxvb2RDb2xvciA9IGNvbG9yOyB9CiAK
LQogICAgIGZsb2F0IGZsb29kT3BhY2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1fZmxvb2RPcGFjaXR5
OyB9CiAgICAgdm9pZCBzZXRGbG9vZE9wYWNpdHkoZmxvYXQgZmxvb2RPcGFjaXR5KSB7IG1fZmxv
b2RPcGFjaXR5ID0gZmxvb2RPcGFjaXR5OyB9CiAKQEAgLTQ4NywxMyArNTM0LDI5IEBAIHByaXZh
dGU6CiBjbGFzcyBLQ2FudmFzRkVTcGVjdWxhckxpZ2h0aW5nIDogcHVibGljIEtDYW52YXNGaWx0
ZXJFZmZlY3QKIHsKIHB1YmxpYzoKKyAgICBRQ29sb3IgbGlnaHRpbmdDb2xvcigpIGNvbnN0IHsg
cmV0dXJuIG1fbGlnaHRpbmdDb2xvcjsgfQorICAgIHZvaWQgc2V0TGlnaHRpbmdDb2xvcihjb25z
dCBRQ29sb3IgJmxpZ2h0aW5nQ29sb3IpIHsgbV9saWdodGluZ0NvbG9yID0gbGlnaHRpbmdDb2xv
cjsgfQorCisgICAgZmxvYXQgc3VyZmFjZVNjYWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdXJmYWNl
U2NhbGU7IH0KKyAgICB2b2lkIHNldFN1cmZhY2VTY2FsZShmbG9hdCBzdXJmYWNlU2NhbGUpIHsg
bV9zdXJmYWNlU2NhbGUgPSBzdXJmYWNlU2NhbGU7IH0KKyAgICAKKyAgICBmbG9hdCBzcGVjdWxh
ckNvbnN0YW50KCkgY29uc3QgeyByZXR1cm4gbV9zcGVjdWxhckNvbnN0YW50OyB9CisgICAgdm9p
ZCBzZXRTcGVjdWxhckNvbnN0YW50KGZsb2F0IHNwZWN1bGFyQ29uc3RhbnQpIHsgbV9zcGVjdWxh
ckNvbnN0YW50ID0gc3BlY3VsYXJDb25zdGFudDsgfQorICAgIAorICAgIGZsb2F0IHNwZWN1bGFy
RXhwb25lbnQoKSBjb25zdCB7IHJldHVybiBtX3NwZWN1bGFyRXhwb25lbnQ7IH0KKyAgICB2b2lk
IHNldFNwZWN1bGFyRXhwb25lbnQoZmxvYXQgc3BlY3VsYXJFeHBvbmVudCkgeyBtX3NwZWN1bGFy
RXhwb25lbnQgPSBzcGVjdWxhckV4cG9uZW50OyB9CisgICAgCisgICAgUVBvaW50RiBrZXJuZWxV
bml0TGVuZ3RoKCkgeyByZXR1cm4gbV9rZXJuZWxVbml0TGVuZ3RoOyB9CisgICAgdm9pZCBzZXRL
ZXJuZWxVbml0TGVuZ3RoKGNvbnN0IFFQb2ludEYgJmtlcm5lbFVuaXRMZW5ndGgpIHsgbV9rZXJu
ZWxVbml0TGVuZ3RoID0ga2VybmVsVW5pdExlbmd0aDsgfQogCiAgICAgUVRleHRTdHJlYW0gJmV4
dGVybmFsUmVwcmVzZW50YXRpb24oUVRleHRTdHJlYW0gJikgY29uc3Q7CiAgICAgCiBwcml2YXRl
OgorICAgIFFDb2xvciBtX2xpZ2h0aW5nQ29sb3I7CiAgICAgZmxvYXQgbV9zdXJmYWNlU2NhbGU7
CiAgICAgZmxvYXQgbV9zcGVjdWxhckNvbnN0YW50OwogICAgIGZsb2F0IG1fc3BlY3VsYXJFeHBv
bmVudDsKKyAgICBRUG9pbnRGIG1fa2VybmVsVW5pdExlbmd0aDsKIH07CiAKIGNsYXNzIEtDYW52
YXNGRVRpbGUgOiBwdWJsaWMgS0NhbnZhc0ZpbHRlckVmZmVjdCB7fTsKSW5kZXg6IGRldmljZS9x
dWFydHovS0NhbnZhc0ZpbHRlclF1YXJ0ei5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9v
dC9TVkdTdXBwb3J0L2tjYW52YXMvZGV2aWNlL3F1YXJ0ei9LQ2FudmFzRmlsdGVyUXVhcnR6Lmgs
dgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMwpkaWZmIC1wIC11IC1yMS4zIGRldmljZS9xdWFydHov
S0NhbnZhc0ZpbHRlclF1YXJ0ei5oCi0tLSBkZXZpY2UvcXVhcnR6L0tDYW52YXNGaWx0ZXJRdWFy
dHouaAkxIFNlcCAyMDA1IDA3OjMyOjU0IC0wMDAwCTEuMworKysgZGV2aWNlL3F1YXJ0ei9LQ2Fu
dmFzRmlsdGVyUXVhcnR6LmgJNiBPY3QgMjAwNSAxMTozNzo1MiAtMDAwMApAQCAtNzMsMTEgKzcz
LDI2IEBAIHB1YmxpYzoKIC8vICAgIHZpcnR1YWwgQ0lGaWx0ZXIgKmdldENJRmlsdGVyKEtDYW52
YXNGaWx0ZXJRdWFydHogKnF1YXJ0ekZpbHRlcikgY29uc3Q7CiAvL307CiAKK2NsYXNzIEtDYW52
YXNGRUNvbnZvbHZlTWF0cml4UXVhcnR6IDogcHVibGljIEtDYW52YXNGRUNvbnZvbHZlTWF0cml4
IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIENJRmlsdGVyICpnZXRDSUZpbHRlcihLQ2FudmFzRmls
dGVyUXVhcnR6ICpxdWFydHpGaWx0ZXIpIGNvbnN0OworfTsKKwogY2xhc3MgS0NhbnZhc0ZFQ29t
cG9zaXRlUXVhcnR6IDogcHVibGljIEtDYW52YXNGRUNvbXBvc2l0ZSB7CiBwdWJsaWM6CiAgICAg
dmlydHVhbCBDSUZpbHRlciAqZ2V0Q0lGaWx0ZXIoS0NhbnZhc0ZpbHRlclF1YXJ0eiAqcXVhcnR6
RmlsdGVyKSBjb25zdDsKIH07CiAKK2NsYXNzIEtDYW52YXNGRURpZmZ1c2VMaWdodGluZ1F1YXJ0
eiA6IHB1YmxpYyBLQ2FudmFzRkVEaWZmdXNlTGlnaHRpbmcgeworcHVibGljOgorICAgIHZpcnR1
YWwgQ0lGaWx0ZXIgKmdldENJRmlsdGVyKEtDYW52YXNGaWx0ZXJRdWFydHogKnF1YXJ0ekZpbHRl
cikgY29uc3Q7Cit9OworCitjbGFzcyBLQ2FudmFzRkVEaXN0YW50TGlnaHRRdWFydHogOiBwdWJs
aWMgS0NhbnZhc0ZFRGlzdGFudExpZ2h0IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIENJRmlsdGVy
ICpnZXRDSUZpbHRlcihLQ2FudmFzRmlsdGVyUXVhcnR6ICpxdWFydHpGaWx0ZXIpIGNvbnN0Owor
fTsKKwogY2xhc3MgS0NhbnZhc0ZFRmxvb2RRdWFydHogOiBwdWJsaWMgS0NhbnZhc0ZFRmxvb2Qg
ewogcHVibGljOgogICAgIHZpcnR1YWwgQ0lGaWx0ZXIgKmdldENJRmlsdGVyKEtDYW52YXNGaWx0
ZXJRdWFydHogKnF1YXJ0ekZpbHRlcikgY29uc3Q7CkBAIC05Myw3ICsxMDgsNiBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCBDSUZpbHRlciAqZ2V0Q0lGaWx0ZXIoS0NhbnZhc0ZpbHRlclF1YXJ0eiAq
cXVhcnR6RmlsdGVyKSBjb25zdDsKIH07CiAKLQogY2xhc3MgS0NhbnZhc0ZFTWVyZ2VRdWFydHog
OiBwdWJsaWMgS0NhbnZhc0ZFTWVyZ2UgewogcHVibGljOgogICAgIHZpcnR1YWwgQ0lGaWx0ZXIg
KmdldENJRmlsdGVyKEtDYW52YXNGaWx0ZXJRdWFydHogKnF1YXJ0ekZpbHRlcikgY29uc3Q7CkBA
IC0xMDQsNiArMTE4LDIxIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIENJRmlsdGVyICpnZXRDSUZp
bHRlcihLQ2FudmFzRmlsdGVyUXVhcnR6ICpxdWFydHpGaWx0ZXIpIGNvbnN0OwogfTsKIAorY2xh
c3MgS0NhbnZhc0ZFUG9pbnRMaWdodFF1YXJ0eiA6IHB1YmxpYyBLQ2FudmFzRkVQb2ludExpZ2h0
IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIENJRmlsdGVyICpnZXRDSUZpbHRlcihLQ2FudmFzRmls
dGVyUXVhcnR6ICpxdWFydHpGaWx0ZXIpIGNvbnN0OworfTsKKworY2xhc3MgS0NhbnZhc0ZFU3Bl
Y3VsYXJMaWdodGluZ1F1YXJ0eiA6IHB1YmxpYyBLQ2FudmFzRkVTcGVjdWxhckxpZ2h0aW5nIHsK
K3B1YmxpYzoKKyAgICB2aXJ0dWFsIENJRmlsdGVyICpnZXRDSUZpbHRlcihLQ2FudmFzRmlsdGVy
UXVhcnR6ICpxdWFydHpGaWx0ZXIpIGNvbnN0OworfTsKKworY2xhc3MgS0NhbnZhc0ZFU3BvdExp
Z2h0UXVhcnR6IDogcHVibGljIEtDYW52YXNGRVNwb3RMaWdodCB7CitwdWJsaWM6CisgICAgdmly
dHVhbCBDSUZpbHRlciAqZ2V0Q0lGaWx0ZXIoS0NhbnZhc0ZpbHRlclF1YXJ0eiAqcXVhcnR6Rmls
dGVyKSBjb25zdDsKK307CisKIGNsYXNzIEtDYW52YXNGRVRpbGVRdWFydHogOiBwdWJsaWMgS0Nh
bnZhc0ZFVGlsZSB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCBDSUZpbHRlciAqZ2V0Q0lGaWx0ZXIo
S0NhbnZhc0ZpbHRlclF1YXJ0eiAqcXVhcnR6RmlsdGVyKSBjb25zdDsKSW5kZXg6IGRldmljZS9x
dWFydHovS0NhbnZhc0ZpbHRlclF1YXJ0ei5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jv
b3QvU1ZHU3VwcG9ydC9rY2FudmFzL2RldmljZS9xdWFydHovS0NhbnZhc0ZpbHRlclF1YXJ0ei5t
bSx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xMApkaWZmIC1wIC11IC1yMS4xMCBkZXZpY2UvcXVh
cnR6L0tDYW52YXNGaWx0ZXJRdWFydHoubW0KLS0tIGRldmljZS9xdWFydHovS0NhbnZhc0ZpbHRl
clF1YXJ0ei5tbQk1IE9jdCAyMDA1IDA1OjM2OjUxIC0wMDAwCTEuMTAKKysrIGRldmljZS9xdWFy
dHovS0NhbnZhc0ZpbHRlclF1YXJ0ei5tbQk2IE9jdCAyMDA1IDExOjM3OjUyIC0wMDAwCkBAIC00
MCwxMyArNDAsMjIgQEAKIAogc3RhdGljIFFTdHJpbmcgS0NQcmV2aW91c0ZpbHRlck91dHB1dE5h
bWUgPSBRU3RyaW5nOjpmcm9tTGF0aW4xKCJfX3ByZXZpb3VzT3V0cHV0X18iKTsKIAotLy9zdGF0
aWMgQ0lDb2xvciAqY2lDb2xvcihjb25zdCBRQ29sb3IgJmMpCi0vL3sKLS8vICAgIENHQ29sb3JS
ZWYgY29sb3JDRyA9IGNnQ29sb3IoYyk7Ci0vLyAgICBDSUNvbG9yICpjb2xvckNJID0gW0NJQ29s
b3IgY29sb3JXaXRoQ0dDb2xvcjpjb2xvckNHXTsKLS8vICAgIENHQ29sb3JSZWxlYXNlKGNvbG9y
Q0cpOwotLy8gICAgcmV0dXJuIGNvbG9yQ0k7Ci0vL30KK3N0YXRpYyBpbmxpbmUgQ0lDb2xvciAq
Y2lDb2xvcihjb25zdCBRQ29sb3IgJmMpCit7CisgICAgQ0dDb2xvclJlZiBjb2xvckNHID0gY2dD
b2xvcihjKTsKKyAgICBDSUNvbG9yICpjb2xvckNJID0gW0NJQ29sb3IgY29sb3JXaXRoQ0dDb2xv
cjpjb2xvckNHXTsKKyAgICBDR0NvbG9yUmVsZWFzZShjb2xvckNHKTsKKyAgICByZXR1cm4gY29s
b3JDSTsKK30KKworc3RhdGljIGlubGluZSBDSVZlY3RvciAqY2lWZWN0b3IoS0NhbnZhc1BvaW50
M0YgcG9pbnQpIHsKKyAgICByZXR1cm4gW0NJVmVjdG9yIHZlY3RvcldpdGhYOnBvaW50LngoKSBZ
OnBvaW50LnkoKSBaOnBvaW50LnooKV0KK30KKworc3RhdGljIGlubGluZSBDSVZlY3RvciAqY2lW
ZWN0b3IoUVBvaW50RiBwb2ludCkgeworICAgIHJldHVybiBbQ0lWZWN0b3IgdmVjdG9yV2l0aFg6
cG9pbnQueCgpIFk6cG9pbnQueSgpXQorfQorCiAKIEtDYW52YXNGaWx0ZXJRdWFydHo6OktDYW52
YXNGaWx0ZXJRdWFydHooKSA6IG1fc3RvcmVkQ0dDb250ZXh0KDApLCBtX2ZpbHRlckNJQ29udGV4
dCgwKSwgbV9maWx0ZXJDR0xheWVyKDApLCBtX2ltYWdlc0J5TmFtZSgwKQogewpAQCAtMjc0LDcg
KzI4Myw2IEBAIENJSW1hZ2UgKktDYW52YXNGaWx0ZXJRdWFydHo6OmlucHV0SW1hZ2UKICNwcmFn
bWEgbWFyayAtCiAjcHJhZ21hIG1hcmsgRmlsdGVyIEVsZW1lbnRzCiAKLQogI2RlZmluZSBGRV9R
VUFSVFpfU0VUVVBfSU5QVVQobmFtZSkgXAogICAgIENJSW1hZ2UgKmlucHV0SW1hZ2UgPSBxdWFy
dHpGaWx0ZXItPmlucHV0SW1hZ2UodGhpcyk7IFwKICAgICBGRV9RVUFSVFpfQ0hFQ0tfSU5QVVQo
aW5wdXRJbWFnZSkgXApAQCAtNTAyLDYgKzUxMCwyNCBAQCBDSUZpbHRlciAqS0NhbnZhc0ZFQ29t
cG9zaXRlUXVhcnR6OjpnZXRDCiAJRkVfUVVBUlRaX09VVFBVVF9SRVRVUk47CiB9CiAKK0NJRmls
dGVyICpLQ2FudmFzRkVEaWZmdXNlTGlnaHRpbmdRdWFydHo6OmdldENJRmlsdGVyKEtDYW52YXNG
aWx0ZXJRdWFydHogKnF1YXJ0ekZpbHRlcikgY29uc3QKK3sKKyAgICBGRV9RVUFSVFpfU0VUVVBf
SU5QVVQoQCJXS0RpZmZ1c2VMaWdodGluZyIpOworICAgIFtmaWx0ZXIgc2V0VmFsdWU6Y2lDb2xv
cihsaWdodGluZ0NvbG9yKCkpIGZvcktleTpAImlucHV0TGlnaHRpbmdDb2xvciJdOworICAgIFtm
aWx0ZXIgc2V0VmFsdWU6W05TTnVtYmVyIG51bWJlcldpdGhGbG9hdDpzdXJmYWNlU2NhbGUoKV0g
Zm9yS2V5OkAiaW5wdXRTY2FsZSJdOworICAgIFtmaWx0ZXIgc2V0VmFsdWU6W05TTnVtYmVyIG51
bWJlcldpdGhGbG9hdDpkaWZmdXNlQ29uc3RhbnQoKV0gZm9yS2V5OkAiaW5wdXREaWZmdXNlQ29u
c3RhbnQiXTsKKyAgICBbZmlsdGVyIHNldFZhbHVlOmNpVmVjdG9yKGtlcm5lbFVuaXRMZW5ndGgo
KSkgZm9yS2V5OkAiaW5wdXRLZXJuZWxVbml0TGVuZ3RoIl07CisgICAgRkVfUVVBUlRaX09VVFBV
VF9SRVRVUk47Cit9CisKK0NJRmlsdGVyICpLQ2FudmFzRkVEaXN0YW50TGlnaHRRdWFydHo6Omdl
dENJRmlsdGVyKEtDYW52YXNGaWx0ZXJRdWFydHogKnF1YXJ0ekZpbHRlcikgY29uc3QKK3sKKyAg
ICBGRV9RVUFSVFpfU0VUVVBfSU5QVVQoQCJXS0Rpc3RhbnRMaWdodCIpOworICAgIFtmaWx0ZXIg
c2V0VmFsdWU6W05TTnVtYmVyIG51bWJlcldpdGhGbG9hdDphemltdXRoKCldIGZvcktleTpAImlu
cHV0QXppbXV0aCJdOworICAgIFtmaWx0ZXIgc2V0VmFsdWU6W05TTnVtYmVyIG51bWJlcldpdGhG
bG9hdDplbGV2YXRpb24oKV0gZm9yS2V5OkAiaW5wdXRFbGV2YXRpb24iXTsKKyAgICBGRV9RVUFS
VFpfT1VUUFVUX1JFVFVSTjsKK30KKwogQ0lGaWx0ZXIgKktDYW52YXNGRUZsb29kUXVhcnR6Ojpn
ZXRDSUZpbHRlcihLQ2FudmFzRmlsdGVyUXVhcnR6ICpxdWFydHpGaWx0ZXIpIGNvbnN0CiB7CiAJ
Q0lGaWx0ZXIgKmZpbHRlciA9IG5pbDsKQEAgLTU3OSw2ICs2MDUsMzQgQEAgQ0lGaWx0ZXIgKktD
YW52YXNGRU9mZnNldFF1YXJ0ejo6Z2V0Q0lGaQogCUZFX1FVQVJUWl9PVVRQVVRfUkVUVVJOOwog
fQogCitDSUZpbHRlciAqS0NhbnZhc0ZFUG9pbnRMaWdodFF1YXJ0ejo6Z2V0Q0lGaWx0ZXIoS0Nh
bnZhc0ZpbHRlclF1YXJ0eiAqcXVhcnR6RmlsdGVyKSBjb25zdAoreworICAgIEZFX1FVQVJUWl9T
RVRVUF9JTlBVVChAIldLUG9pbnRMaWdodCIpOworICAgIFtmaWx0ZXIgc2V0VmFsdWU6Y2lWZWN0
b3IobG9jYXRpb24oKSkgZm9yS2V5OkAiaW5wdXRMaWdodFBvc2l0aW9uIl07CisgICAgRkVfUVVB
UlRaX09VVFBVVF9SRVRVUk47Cit9CisKK0NJRmlsdGVyICpLQ2FudmFzRkVTcGVjdWxhckxpZ2h0
aW5nUXVhcnR6OjpnZXRDSUZpbHRlcihLQ2FudmFzRmlsdGVyUXVhcnR6ICpxdWFydHpGaWx0ZXIp
IGNvbnN0Cit7CisgICAgRkVfUVVBUlRaX1NFVFVQX0lOUFVUKEAiV0tTcGVjdWxhckxpZ2h0aW5n
Iik7CisgICAgW2ZpbHRlciBzZXRWYWx1ZTpjaUNvbG9yKGxpZ2h0aW5nQ29sb3IoKSkgZm9yS2V5
OkAiaW5wdXRMaWdodGluZ0NvbG9yIl07CisgICAgW2ZpbHRlciBzZXRWYWx1ZTpbTlNOdW1iZXIg
bnVtYmVyV2l0aEZsb2F0OnN1cmZhY2VTY2FsZSgpXSBmb3JLZXk6QCJpbnB1dFNjYWxlIl07Cisg
ICAgW2ZpbHRlciBzZXRWYWx1ZTpbTlNOdW1iZXIgbnVtYmVyV2l0aEZsb2F0OnNwZWN1bGFyQ29u
c3RhbnQoKV0gZm9yS2V5OkAiaW5wdXRTcGVjdWxhckNvbnN0YW50Il07CisgICAgW2ZpbHRlciBz
ZXRWYWx1ZTpbTlNOdW1iZXIgbnVtYmVyV2l0aEZsb2F0OnNwZWN1bGFyRXhwb25lbnQoKV0gZm9y
S2V5OkAiaW5wdXRTcGVjdWxhckV4cG9uZW50Il07CisgICAgW2ZpbHRlciBzZXRWYWx1ZTpjaVZl
Y3RvcihrZXJuZWxVbml0TGVuZ3RoKCkpIGZvcktleTpAImlucHV0S2VybmVsVW5pdExlbmd0aCJd
OworICAgIEZFX1FVQVJUWl9PVVRQVVRfUkVUVVJOOworfQorCitDSUZpbHRlciAqS0NhbnZhc0ZF
U3BvdExpZ2h0UXVhcnR6OjpnZXRDSUZpbHRlcihLQ2FudmFzRmlsdGVyUXVhcnR6ICpxdWFydHpG
aWx0ZXIpIGNvbnN0Cit7CisgICAgRkVfUVVBUlRaX1NFVFVQX0lOUFVUKEAiV0tTcG90TGlnaHQi
KTsKKyAgICBbZmlsdGVyIHNldFZhbHVlOmNpVmN0b3IobG9jYXRpb24oKSkgZm9yS2V5OkAiaW5w
dXRMaWdodFBvc2l0aW9uIl07CisgICAgW2ZpbHRlciBzZXRWYWx1ZTpjaVZlY3Rvcihwb2ludHNB
dCgpKSBmb3JLZXk6QCJpbnB1dExpZ2h0UG9pbnRzQXQiXTsKKyAgICBbZmlsdGVyIHNldFZhbHVl
OltOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6c3BlY3VsYXJFeHBvbmVudCgpXSBmb3JLZXk6QCJp
bnB1dFNwZWN1bGFyRXhwb25lbnQiXTsKKyAgICBbZmlsdGVyIHNldFZhbHVlOltOU051bWJlciBu
dW1iZXJXaXRoRmxvYXQ6bGltaXRpbmdDb25lQW5nbGUoKV0gZm9yS2V5OkAiaW5wdXRMaW1pdGlu
Z0NvbmVBbmdsZSJdOworICAgIEZFX1FVQVJUWl9PVVRQVVRfUkVUVVJOOworfQorCiBDSUZpbHRl
ciAqS0NhbnZhc0ZFVGlsZVF1YXJ0ejo6Z2V0Q0lGaWx0ZXIoS0NhbnZhc0ZpbHRlclF1YXJ0eiAq
cXVhcnR6RmlsdGVyKSBjb25zdAogewogCUZFX1FVQVJUWl9TRVRVUF9JTlBVVChAIkNJQWZmaW5l
VGlsZSIpOwpAQCAtNTg2LDYgKzY0MCwzIEBAIENJRmlsdGVyICpLQ2FudmFzRkVUaWxlUXVhcnR6
OjpnZXRDSUZpbHQKIAlGRV9RVUFSVFpfT1VUUFVUX1JFVFVSTjsKIH0KIAotCi0KLQpJbmRleDog
ZGV2aWNlL3F1YXJ0ei9LUmVuZGVyaW5nRGV2aWNlUXVhcnR6Lm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZp
bGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tjYW52YXMvZGV2aWNlL3F1YXJ0ei9LUmVuZGVyaW5n
RGV2aWNlUXVhcnR6Lm1tLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjQKZGlmZiAtcCAtdSAtcjEu
NCBkZXZpY2UvcXVhcnR6L0tSZW5kZXJpbmdEZXZpY2VRdWFydHoubW0KLS0tIGRldmljZS9xdWFy
dHovS1JlbmRlcmluZ0RldmljZVF1YXJ0ei5tbQk1IE9jdCAyMDA1IDA1OjM2OjUyIC0wMDAwCTEu
NAorKysgZGV2aWNlL3F1YXJ0ei9LUmVuZGVyaW5nRGV2aWNlUXVhcnR6Lm1tCTYgT2N0IDIwMDUg
MTE6Mzc6NTMgLTAwMDAKQEAgLTI0MywxNSArMjQzLDE1IEBAIEtDYW52YXNGaWx0ZXJFZmZlY3Qg
KktSZW5kZXJpbmdEZXZpY2VRdWEKIHsKIAlzd2l0Y2godHlwZSkKIAl7Ci0vLwljYXNlIEZFX0RJ
U1RBTlRfTElHSFQ6IAotLy8JY2FzZSBGRV9QT0lOVF9MSUdIVDogCi0vLwljYXNlIEZFX1NQT1Rf
TElHSFQ6IAorCWNhc2UgRkVfRElTVEFOVF9MSUdIVDogcmV0dXJuIG5ldyBLQ2FudmFzRkVEaXN0
YW50TGlnaHRRdWFydHooKTsKKwljYXNlIEZFX1BPSU5UX0xJR0hUOiByZXR1cm4gbmV3IEtDYW52
YXNGRVBvaW50TGlnaHRRdWFydHooKTsKKwljYXNlIEZFX1NQT1RfTElHSFQ6IHJldHVybiBuZXcg
S0NhbnZhc0ZFU3BvdExpZ2h0UXVhcnR6KCk7CiAJY2FzZSBGRV9CTEVORDogcmV0dXJuIG5ldyBL
Q2FudmFzRkVCbGVuZFF1YXJ0eigpOwogCWNhc2UgRkVfQ09MT1JfTUFUUklYOiByZXR1cm4gbmV3
IEtDYW52YXNGRUNvbG9yTWF0cml4UXVhcnR6KCk7CiAvLwljYXNlIEZFX0NPTVBPTkVOVF9UUkFO
U0ZFUjogCiAJY2FzZSBGRV9DT01QT1NJVEU6IHJldHVybiBuZXcgS0NhbnZhc0ZFQ29tcG9zaXRl
UXVhcnR6KCk7CiAvLwljYXNlIEZFX0NPTlZPTFZFX01BVFJJWDogCi0vLwljYXNlIEZFX0RJRkZV
U0VfTElHSFRJTkc6IAorCWNhc2UgRkVfRElGRlVTRV9MSUdIVElORzogcmV0dXJuIG5ldyBLQ2Fu
dmFzRkVEaWZmdXNlTGlnaHRpbmdRdWFydHooKTsKIC8vCWNhc2UgRkVfRElTUExBQ0VNRU5UX01B
UDogCiAJY2FzZSBGRV9GTE9PRDogcmV0dXJuIG5ldyBLQ2FudmFzRkVGbG9vZFF1YXJ0eigpOwog
CWNhc2UgRkVfR0FVU1NJQU5fQkxVUjogcmV0dXJuIG5ldyBLQ2FudmFzRkVHYXVzc2lhbkJsdXJR
dWFydHooKTsKQEAgLTI1OSw3ICsyNTksNyBAQCBLQ2FudmFzRmlsdGVyRWZmZWN0ICpLUmVuZGVy
aW5nRGV2aWNlUXVhCiAJY2FzZSBGRV9NRVJHRTogcmV0dXJuIG5ldyBLQ2FudmFzRkVNZXJnZVF1
YXJ0eigpOwogLy8JY2FzZSBGRV9NT1JQSE9MT0dZOiAKIAljYXNlIEZFX09GRlNFVDogcmV0dXJu
IG5ldyBLQ2FudmFzRkVPZmZzZXRRdWFydHooKTsKLS8vCWNhc2UgRkVfU1BFQ1VMQVJfTElHSFRJ
Tkc6IAorCWNhc2UgRkVfU1BFQ1VMQVJfTElHSFRJTkc6IHJldHVybiBuZXcgS0NhbnZhc0ZFU3Bl
Y3VsYXJMaWdodGluZ1F1YXJ0eigpOwogCWNhc2UgRkVfVElMRTogcmV0dXJuIG5ldyBLQ2FudmFz
RkVUaWxlUXVhcnR6KCk7CiAvLwljYXNlIEZFX1RVUkJVTEVOQ0U6IAogCWRlZmF1bHQ6CkluZGV4
OiBkZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tDb252b2x2ZU1hdHJpeEZpbHRlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KUkNTIGZpbGU6IGRldmljZS9xdWFydHovZmlsdGVycy9XS0NvbnZvbHZlTWF0cml4RmlsdGVy
LmgKZGlmZiAtTiBkZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tDb252b2x2ZU1hdHJpeEZpbHRlci5o
Ci0tLSBkZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tDb252b2x2ZU1hdHJpeEZpbHRlci5oCTEgSmFu
IDE5NzAgMDA6MDA6MDAgLTAwMDAKKysrIGRldmljZS9xdWFydHovZmlsdGVycy9XS0NvbnZvbHZl
TWF0cml4RmlsdGVyLmgJNiBPY3QgMjAwNSAxMTozNzo1MyAtMDAwMApAQCAtMCwwICsxLDM1IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW1wb3J0IDxRdWFydHpDb3JlL0NvcmVJbWFnZS5oPgor
CitAaW50ZXJmYWNlIFdLQ29udm9sdmVNYXRyaXhGaWx0ZXI6IENJRmlsdGVyCit7CisgICAgQ0lJ
bWFnZSAgICppbnB1dEltYWdlOworICAgIENJSW1hZ2UgICAqaW5wdXRLZXJuZWxNYXRyaXg7Cisg
ICAgTlNOdW1iZXIgICppbnB1dERpdmlzb3I7CisgICAgTlNOdW1iZXIgICppbnB1dEJpYXM7Cit9
CitAZW5kCkluZGV4OiBkZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tDb252b2x2ZU1hdHJpeEZpbHRl
ci5tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KUkNTIGZpbGU6IGRldmljZS9xdWFydHovZmlsdGVycy9XS0NvbnZvbHZl
TWF0cml4RmlsdGVyLm0KZGlmZiAtTiBkZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tDb252b2x2ZU1h
dHJpeEZpbHRlci5tCi0tLSBkZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tDb252b2x2ZU1hdHJpeEZp
bHRlci5tCTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAKKysrIGRldmljZS9xdWFydHovZmlsdGVy
cy9XS0NvbnZvbHZlTWF0cml4RmlsdGVyLm0JNiBPY3QgMjAwNSAxMTozNzo1MyAtMDAwMApAQCAt
MCwwICsxLDkzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1IEFwcGxlIENvbXB1dGVyLCBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW1wb3J0ICJXS0NvbnZvbHZlTWF0
cml4RmlsdGVyLmgiCisKK3N0YXRpYyBDSUtlcm5lbCAqY29udm9sdmVNYXRyaXhLZXJuZWwgPSBu
aWw7CisKK0BpbXBsZW1lbnRhdGlvbiBXS0NvbnZvbHZlTWF0cml4RmlsdGVyCisKKysgKHZvaWQp
aW5pdGlhbGl6ZQoreworICAgIFtDSUZpbHRlciByZWdpc3RlckZpbHRlck5hbWU6QCJXS0NvbnZv
bHZlTWF0cml4IiAgCisgICAgICAgIGNvbnN0cnVjdG9yOiBzZWxmCisgICAgICAgIGNsYXNzQXR0
cmlidXRlczogW05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVjdHNBbmRLZXlzOgorICAg
ICAgICAgQCJXZWJLaXQgQ29udm9sdmUgTWF0cml4Iiwga0NJQXR0cmlidXRlRmlsdGVyRGlzcGxh
eU5hbWUsCisgICAgICAgIFtOU0FycmF5IGFycmF5V2l0aE9iamVjdHM6IGtDSUNhdGVnb3J5Qmx1
ciwga0NJQ2F0ZWdvcnlWaWRlbywKKyAgICAgICAgICAgIGtDSUNhdGVnb3J5U3RpbGxJbWFnZSwg
a0NJQ2F0ZWdvcnlOb25TcXVhcmVQaXhlbHMsbmlsXSwga0NJQXR0cmlidXRlRmlsdGVyQ2F0ZWdv
cmllcywKKyAgICAgICAgW05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVjdHNBbmRLZXlz
OgorICAgICAgICAgICAga0NJQXR0cmlidXRlVHlwZUdyYWRpZW50LCBrQ0lBdHRyaWJ1dGVUeXBl
LAorICAgICAgICAgICAgbmlsXSwgQCJpbnB1dEtlcm5lbE1hdHJpeCIsCisgICAgICAgIFtOU0Rp
Y3Rpb25hcnkgZGljdGlvbmFyeVdpdGhPYmplY3RzQW5kS2V5czoKKyAgICAgICAgICAgIFtOU051
bWJlciBudW1iZXJXaXRoRG91YmxlOjAuMF0sIGtDSUF0dHJpYnV0ZU1pbiwKKyAgICAgICAgICAg
IFtOU051bWJlciBudW1iZXJXaXRoRG91YmxlOjEuMF0sIGtDSUF0dHJpYnV0ZURlZmF1bHQsCisg
ICAgICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aERvdWJsZToxLjBdLCBrQ0lBdHRyaWJ1dGVJ
ZGVudGl0eSwKKyAgICAgICAgICAgIGtDSUF0dHJpYnV0ZVR5cGVTY2FsYXIsIGtDSUF0dHJpYnV0
ZVR5cGUsCisgICAgICAgICAgICBuaWxdLCBAImlucHV0RGl2aXNvciIsCisgICAgICAgIFtOU0Rp
Y3Rpb25hcnkgZGljdGlvbmFyeVdpdGhPYmplY3RzQW5kS2V5czoKKyAgICAgICAgICAgIFtOU051
bWJlciBudW1iZXJXaXRoRG91YmxlOjAuMF0sIGtDSUF0dHJpYnV0ZURlZmF1bHQsCisgICAgICAg
ICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aERvdWJsZTowLjBdLCBrQ0lBdHRyaWJ1dGVJZGVudGl0
eSwKKyAgICAgICAgICAgIGtDSUF0dHJpYnV0ZVR5cGVTY2FsYXIsIGtDSUF0dHJpYnV0ZVR5cGUs
CisgICAgICAgICAgICBuaWxdLCBAImlucHV0QmlhcyIsCisgICAgICAgIG5pbF1dOworfQorCisr
IChDSUZpbHRlciAqKWZpbHRlcldpdGhOYW1lOihOU1N0cmluZyAqKW5hbWUKK3sKKyAgICBDSUZp
bHRlciAqZmlsdGVyOworICAgIGZpbHRlciA9IFtbc2VsZiBhbGxvY10gaW5pdF07CisgICAgcmV0
dXJuIFtmaWx0ZXIgYXV0b3JlbGVhc2VdOworfQorCistIChpZClpbml0Cit7CisgICAgaWYoIWNv
bnZvbHZlTWF0cml4S2VybmVsKSB7CisgICAgICAgIE5TQnVuZGxlICpidW5kbGUgPSBbTlNCdW5k
bGUgYnVuZGxlRm9yQ2xhc3M6W3NlbGYgY2xhc3NdXTsKKyAgICAgICAgTlNTdHJpbmcgKmtlcm5l
bEZpbGUgPSBbYnVuZGxlIHBhdGhGb3JSZXNvdXJjZTpAIldLQ29udm9sdmVNYXRyaXhGaWx0ZXIi
IG9mVHlwZTpAImNpa2VybmVsIl07CisgICAgICAgIE5TU3RyaW5nICpjb2RlID0gW05TU3RyaW5n
IHN0cmluZ1dpdGhDb250ZW50c09mRmlsZTprZXJuZWxGaWxlXTsKKyAgICAgICAgTlNBcnJheSAq
a2VybmVscyA9IFtDSUtlcm5lbCBrZXJuZWxzV2l0aFN0cmluZzpjb2RlXTsKKyAgICAgICAgY29u
dm9sdmVNYXRyaXhLZXJuZWwgPSBbW2tlcm5lbHMgb2JqZWN0QXRJbmRleDowXSByZXRhaW5dOwor
ICAgIH0KKyAgICByZXR1cm4gW3N1cGVyIGluaXRdOworfQorCistIChDSUltYWdlICopb3V0cHV0
SW1hZ2UKK3sKKyAgICAvLyBGSVhNRSwgSSBkb24ndCB0aGluayB0aGlzIGlzIHJpZ2h0IHlldC4u
LgorICAgIENJU2FtcGxlciAqaW1hZ2UgPSBbQ0lTYW1wbGVyIHNhbXBsZXJXaXRoSW1hZ2U6aW5w
dXRJbWFnZV07CisgICAgQ0lTYW1wbGVyICprZXJuZWxNYXRyaXggPSBbQ0lTYW1wbGVyIHNhbXBs
ZXJXaXRoSW1hZ2U6aW5wdXRLZXJuZWxNYXRyaXhdOworICAgIHJldHVybiBbc2VsZiBhcHBseTpj
b252b2x2ZU1hdHJpeEtlcm5lbCwgaW1hZ2UsIGtlcm5lbE1hdHJpeCwgaW5wdXREaXZpc29yLAor
ICAgICAgICBpbnB1dEJpYXMsIGtDSUFwcGx5T3B0aW9uRGVmaW5pdGlvbiwgW2ltYWdlIGRlZmlu
aXRpb25dLCBuaWxdOworfQorCistIChDR1JlY3QpcmVnaW9uT2Y6KGludClzYW1wbGVySW5kZXgg
ZGVzdFJlY3Q6KENHUmVjdClyCit7CisgICAgLy8gVGhpcyBpcyBnb25uYSBiZSBzbG9vb293Lgor
ICAgIENHUmVjdCBleHRlbnQgPSBbaW5wdXRLZXJuZWxNYXRyaXggZXh0ZW50XTsKKyAgICBDR1Np
emUgc2l6ZSA9IGV4dGVudC5zaXplOworICAgIHJldHVybiBDR1JlY3RJbnNldChyLCAtMSAqIHNp
emUud2lkdGgsIC0xICogc2l6ZS5oZWlnaHQpOworfQorCitAZW5kCkluZGV4OiBkZXZpY2UvcXVh
cnR6L2ZpbHRlcnMvV0tEaWZmdXNlTGlnaHRpbmdGaWx0ZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiBkZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tEaWZmdXNlTGlnaHRpbmdGaWx0ZXIuaApkaWZmIC1O
IGRldmljZS9xdWFydHovZmlsdGVycy9XS0RpZmZ1c2VMaWdodGluZ0ZpbHRlci5oCi0tLSBkZXZp
Y2UvcXVhcnR6L2ZpbHRlcnMvV0tEaWZmdXNlTGlnaHRpbmdGaWx0ZXIuaAkxIEphbiAxOTcwIDAw
OjAwOjAwIC0wMDAwCisrKyBkZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tEaWZmdXNlTGlnaHRpbmdG
aWx0ZXIuaAk2IE9jdCAyMDA1IDExOjM3OjUzIC0wMDAwCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDUgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpbXBvcnQgPFF1YXJ0ekNvcmUvQ29yZUltYWdlLmg+CisKK0BpbnRl
cmZhY2UgV0tEaWZmdXNlTGlnaHRpbmdGaWx0ZXIgOiBDSUZpbHRlciB7CisgICAgQ0lJbWFnZSAq
aW5wdXRJbWFnZTsKKyAgICBDSUNvbG9yICppbnB1dExpZ2h0aW5nQ29sb3I7CisgICAgTlNOdW1i
ZXIgKmlucHV0U2NhbGU7CisgICAgTlNOdW1iZXIgKmlucHV0RGlmZnVzZUNvbnN0YW50OworICAg
IENJVmVjdG9yICppbnB1dEtlcm5lbFVuaXRMZW5ndGg7Cit9CitAZW5kCkluZGV4OiBkZXZpY2Uv
cXVhcnR6L2ZpbHRlcnMvV0tEaWZmdXNlTGlnaHRpbmdGaWx0ZXIubQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBm
aWxlOiBkZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tEaWZmdXNlTGlnaHRpbmdGaWx0ZXIubQpkaWZm
IC1OIGRldmljZS9xdWFydHovZmlsdGVycy9XS0RpZmZ1c2VMaWdodGluZ0ZpbHRlci5tCi0tLSBk
ZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tEaWZmdXNlTGlnaHRpbmdGaWx0ZXIubQkxIEphbiAxOTcw
IDAwOjAwOjAwIC0wMDAwCisrKyBkZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tEaWZmdXNlTGlnaHRp
bmdGaWx0ZXIubQk2IE9jdCAyMDA1IDExOjM3OjUzIC0wMDAwCkBAIC0wLDAgKzEsODggQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpbXBvcnQgIldLRGlmZnVzZUxpZ2h0aW5nRmlsdGVyLmgiCisK
K3N0YXRpYyBDSUtlcm5lbCAqZGlmZnVzZUxpZ2h0aW5nRmlsdGVyID0gbmlsOworCitAaW1wbGVt
ZW50YXRpb24gV0tEaWZmdXNlTGlnaHRpbmdGaWx0ZXIKKworKyAodm9pZClpbml0aWFsaXplCit7
CisgICAgW0NJRmlsdGVyIHJlZ2lzdGVyRmlsdGVyTmFtZTpAIldLRGlmZnVzZUxpZ2h0aW5nIiAg
CisgICAgICAgIGNvbnN0cnVjdG9yOnNlbGYKKyAgICAgICAgY2xhc3NBdHRyaWJ1dGVzOltOU0Rp
Y3Rpb25hcnkgZGljdGlvbmFyeVdpdGhPYmplY3RzQW5kS2V5czoKKyAgICAgICAgIEAiV2ViS2l0
IERpZmZ1c2UgTGlnaHRpbmciLCBrQ0lBdHRyaWJ1dGVGaWx0ZXJEaXNwbGF5TmFtZSwKKyAgICAg
ICAgW05TQXJyYXkgYXJyYXlXaXRoT2JqZWN0czoga0NJQ2F0ZWdvcnlTdHlsaXplLCBrQ0lDYXRl
Z29yeVZpZGVvLAorICAgICAgICAgICAga0NJQ2F0ZWdvcnlTdGlsbEltYWdlLCBrQ0lDYXRlZ29y
eU5vblNxdWFyZVBpeGVscyxuaWxdLCBrQ0lBdHRyaWJ1dGVGaWx0ZXJDYXRlZ29yaWVzLAorICAg
ICAgICBbTlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnlXaXRoT2JqZWN0c0FuZEtleXM6CisgICAgICAg
ICAgICBbQ0lDb2xvciBjb2xvcldpdGhSZWQ6MS4wIGdyZWVuOjEuMCBibHVlOjEuMCBhbHBoYTox
LjBdLAorICAgICAgICAgICAgIGtDSUF0dHJpYnV0ZURlZmF1bHQsIG5pbF0sIEAiaW5wdXRMaWdo
dGluZ0NvbG9yIiwKKyAgICAgICAgW05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVjdHNB
bmRLZXlzOgorICAgICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhEb3VibGU6MC4wXSwga0NJ
QXR0cmlidXRlTWluLAorICAgICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhEb3VibGU6MS4w
XSwga0NJQXR0cmlidXRlRGVmYXVsdCwKKyAgICAgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRo
RG91YmxlOjEuMF0sIGtDSUF0dHJpYnV0ZUlkZW50aXR5LAorICAgICAgICAgICAga0NJQXR0cmli
dXRlVHlwZVNjYWxhciwga0NJQXR0cmlidXRlVHlwZSwKKyAgICAgICAgICAgIG5pbF0sIEAiaW5w
dXRTY2FsZSIsCisgICAgICAgIFtOU0RpY3Rpb25hcnkgZGljdGlvbmFyeVdpdGhPYmplY3RzQW5k
S2V5czoKKyAgICAgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoRG91YmxlOjAuMF0sIGtDSUF0
dHJpYnV0ZU1pbiwKKyAgICAgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoRG91YmxlOjEuMF0s
IGtDSUF0dHJpYnV0ZURlZmF1bHQsCisgICAgICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aERv
dWJsZToxLjBdLCBrQ0lBdHRyaWJ1dGVJZGVudGl0eSwKKyAgICAgICAgICAgIGtDSUF0dHJpYnV0
ZVR5cGVTY2FsYXIsIGtDSUF0dHJpYnV0ZVR5cGUsCisgICAgICAgICAgICBuaWxdLCBAImlucHV0
RGlmZnVzZUNvbnN0YW50IiwKKyAgICAgICAgW05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9i
amVjdHNBbmRLZXlzOgorICAgICAgICAgICAga0NJQXR0cmlidXRlVHlwZU9mZnNldCwga0NJQXR0
cmlidXRlVHlwZSwKKyAgICAgICAgICAgIG5pbF0sIEAiaW5wdXRLZXJuZWxVbml0TGVuZ3RoIiwK
KyAgICAgICAgbmlsXV07Cit9CisKKysgKENJRmlsdGVyICopZmlsdGVyV2l0aE5hbWU6KE5TU3Ry
aW5nICopbmFtZQoreworICAgIENJRmlsdGVyICpmaWx0ZXI7CisgICAgZmlsdGVyID0gW1tzZWxm
IGFsbG9jXSBpbml0XTsKKyAgICByZXR1cm4gW2ZpbHRlciBhdXRvcmVsZWFzZV07Cit9CisKKy0g
KGlkKWluaXQKK3sKKyAgICBpZighZGlmZnVzZUxpZ2h0aW5nRmlsdGVyKSB7CisgICAgICAgIE5T
QnVuZGxlICpidW5kbGUgPSBbTlNCdW5kbGUgYnVuZGxlRm9yQ2xhc3M6W3NlbGYgY2xhc3NdXTsK
KyAgICAgICAgTlNTdHJpbmcgKmtlcm5lbEZpbGUgPSBbYnVuZGxlIHBhdGhGb3JSZXNvdXJjZTpA
IldLRGlmZnVzZUxpZ2h0aW5nRmlsdGVyIiBvZlR5cGU6QCJjaWtlcm5lbCJdOworICAgICAgICBO
U1N0cmluZyAqY29kZSA9IFtOU1N0cmluZyBzdHJpbmdXaXRoQ29udGVudHNPZkZpbGU6a2VybmVs
RmlsZV07CisgICAgICAgIE5TQXJyYXkgKmtlcm5lbHMgPSBbQ0lLZXJuZWwga2VybmVsc1dpdGhT
dHJpbmc6Y29kZV07CisgICAgICAgIGRpZmZ1c2VMaWdodGluZ0ZpbHRlciA9IFtba2VybmVscyBv
YmplY3RBdEluZGV4OjBdIHJldGFpbl07CisgICAgfQorICAgIHJldHVybiBbc3VwZXIgaW5pdF07
Cit9CisKKy0gKENJSW1hZ2UgKilvdXRwdXRJbWFnZQoreworICAgIHJldHVybiBbc2VsZiBhcHBs
eTpkaWZmdXNlTGlnaHRpbmdGaWx0ZXIsIGlucHV0TGlnaHRpbmdDb2xvciwgaW5wdXRTY2FsZSwg
aW5wdXREaWZmdXNlQ29uc3RhbnQsCisgICAgICAgIGlucHV0S2VybmVsVW5pdExlbmd0aCwgbmls
XTsKK30KKworQGVuZAorCisKSW5kZXg6IGRldmljZS9xdWFydHovZmlsdGVycy9XS0Rpc3RhbnRM
aWdodEZpbHRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IGRldmljZS9xdWFydHovZmlsdGVycy9X
S0Rpc3RhbnRMaWdodEZpbHRlci5oCmRpZmYgLU4gZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL1dLRGlz
dGFudExpZ2h0RmlsdGVyLmgKLS0tIGRldmljZS9xdWFydHovZmlsdGVycy9XS0Rpc3RhbnRMaWdo
dEZpbHRlci5oCTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAKKysrIGRldmljZS9xdWFydHovZmls
dGVycy9XS0Rpc3RhbnRMaWdodEZpbHRlci5oCTYgT2N0IDIwMDUgMTE6Mzc6NTMgLTAwMDAKQEAg
LTAsMCArMSwzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBBcHBsZSBDb21wdXRlciwg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2ltcG9ydCA8UXVhcnR6Q29yZS9D
b3JlSW1hZ2UuaD4KKworQGludGVyZmFjZSBXS0Rpc3RhbnRMaWdodEZpbHRlciA6IENJRmlsdGVy
IHsKKyAgICBOU051bWJlciAqaW5wdXRBemltdXRoOworICAgIE5TTnVtYmVyICppbnB1dEVsZXZh
dGlvbjsKK30KK0BlbmQKSW5kZXg6IGRldmljZS9xdWFydHovZmlsdGVycy9XS0Rpc3RhbnRMaWdo
dEZpbHRlci5tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IGRldmljZS9xdWFydHovZmlsdGVycy9XS0Rp
c3RhbnRMaWdodEZpbHRlci5tCmRpZmYgLU4gZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL1dLRGlzdGFu
dExpZ2h0RmlsdGVyLm0KLS0tIGRldmljZS9xdWFydHovZmlsdGVycy9XS0Rpc3RhbnRMaWdodEZp
bHRlci5tCTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAKKysrIGRldmljZS9xdWFydHovZmlsdGVy
cy9XS0Rpc3RhbnRMaWdodEZpbHRlci5tCTYgT2N0IDIwMDUgMTE6Mzc6NTMgLTAwMDAKQEAgLTAs
MCArMSw3MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBBcHBsZSBDb21wdXRlciwgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKyAKKyNpbXBvcnQgIldLRGlzdGFudExpZ2h0
RmlsdGVyLmgiCisKK3N0YXRpYyBDSUtlcm5lbCAqZGlzdGFudExpZ2h0RmlsdGVyID0gbmlsOwor
CitAaW1wbGVtZW50YXRpb24gV0tEaXN0YW50TGlnaHRGaWx0ZXIKKworKyAodm9pZClpbml0aWFs
aXplCit7CisgICAgW0NJRmlsdGVyIHJlZ2lzdGVyRmlsdGVyTmFtZTpAIldLRGlzdGFudExpZ2h0
IgorICAgICAgICBjb25zdHJ1Y3Rvcjogc2VsZgorICAgICAgICBjbGFzc0F0dHJpYnV0ZXM6IFtO
U0RpY3Rpb25hcnkgZGljdGlvbmFyeVdpdGhPYmplY3RzQW5kS2V5czoKKyAgICAgICAgIEAiV2Vi
S2l0IERpc3RhbnQgTGlnaHQiLCBrQ0lBdHRyaWJ1dGVGaWx0ZXJEaXNwbGF5TmFtZSwKKyAgICAg
ICAgW05TQXJyYXkgYXJyYXlXaXRoT2JqZWN0czoga0NJQ2F0ZWdvcnlTdHlsaXplLCBrQ0lDYXRl
Z29yeVZpZGVvLAorICAgICAgICAgICAga0NJQ2F0ZWdvcnlTdGlsbEltYWdlLCBrQ0lDYXRlZ29y
eU5vblNxdWFyZVBpeGVscyxuaWxdLCBrQ0lBdHRyaWJ1dGVGaWx0ZXJDYXRlZ29yaWVzLAorICAg
ICAgICBbTlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnlXaXRoT2JqZWN0c0FuZEtleXM6CisgICAgICAg
ICAgICBrQ0lBdHRyaWJ1dGVUeXBlQW5nbGUsIGtDSUF0dHJpYnV0ZVR5cGUsCisgICAgICAgICAg
ICBuaWxdLCBAImlucHV0QXppbXV0aCIsCisgICAgICAgIFtOU0RpY3Rpb25hcnkgZGljdGlvbmFy
eVdpdGhPYmplY3RzQW5kS2V5czoKKyAgICAgICAgICAgIGtDSUF0dHJpYnV0ZVR5cGVBbmdsZSwg
a0NJQXR0cmlidXRlVHlwZSwKKyAgICAgICAgICAgIG5pbF0sIEAiaW5wdXRFbGV2YXRpb24iLAor
ICAgICAgICBuaWxdXTsKK30KKworKyAoQ0lGaWx0ZXIgKilmaWx0ZXJXaXRoTmFtZTooTlNTdHJp
bmcgKiluYW1lCit7CisgICAgQ0lGaWx0ZXIgKmZpbHRlcjsKKyAgICBmaWx0ZXIgPSBbW3NlbGYg
YWxsb2NdIGluaXRdOworICAgIHJldHVybiBbZmlsdGVyIGF1dG9yZWxlYXNlXTsKK30KKworLSAo
aWQpaW5pdAoreworICAgIGlmKCFkaXN0YW50TGlnaHRGaWx0ZXIpIHsKKyAgICAgICAgTlNCdW5k
bGUgKmJ1bmRsZSA9IFtOU0J1bmRsZSBidW5kbGVGb3JDbGFzczpbc2VsZiBjbGFzc11dOworICAg
ICAgICBOU1N0cmluZyAqa2VybmVsRmlsZSA9IFtidW5kbGUgcGF0aEZvclJlc291cmNlOkAiV0tE
aXN0YW50TGlnaHRGaWx0ZXIiIG9mVHlwZTpAImNpa2VybmVsIl07CisgICAgICAgIE5TU3RyaW5n
ICpjb2RlID0gW05TU3RyaW5nIHN0cmluZ1dpdGhDb250ZW50c09mRmlsZTprZXJuZWxGaWxlXTsK
KyAgICAgICAgTlNBcnJheSAqa2VybmVscyA9IFtDSUtlcm5lbCBrZXJuZWxzV2l0aFN0cmluZzpj
b2RlXTsKKyAgICAgICAgZGlzdGFudExpZ2h0RmlsdGVyID0gW1trZXJuZWxzIG9iamVjdEF0SW5k
ZXg6MF0gcmV0YWluXTsKKyAgICB9CisgICAgcmV0dXJuIFtzdXBlciBpbml0XTsKK30KKworLSAo
Q0lJbWFnZSAqKW91dHB1dEltYWdlCit7CisgICAgcmV0dXJuIFtzZWxmIGFwcGx5OmRpc3RhbnRM
aWdodEZpbHRlciwgaW5wdXRBemltdXRoLCBpbnB1dEVsZXZhdGlvbiwgbmlsXTsKK30KKworQGVu
ZApJbmRleDogZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL1dLUG9pbnRMaWdodEZpbHRlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KUkNTIGZpbGU6IGRldmljZS9xdWFydHovZmlsdGVycy9XS1BvaW50TGlnaHRGaWx0ZXIu
aApkaWZmIC1OIGRldmljZS9xdWFydHovZmlsdGVycy9XS1BvaW50TGlnaHRGaWx0ZXIuaAotLS0g
ZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL1dLUG9pbnRMaWdodEZpbHRlci5oCTEgSmFuIDE5NzAgMDA6
MDA6MDAgLTAwMDAKKysrIGRldmljZS9xdWFydHovZmlsdGVycy9XS1BvaW50TGlnaHRGaWx0ZXIu
aAk2IE9jdCAyMDA1IDExOjM3OjUzIC0wMDAwCkBAIC0wLDAgKzEsMzEgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDUgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBV
VEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpbXBvcnQgPFF1YXJ0ekNvcmUvQ29yZUltYWdlLmg+CisKK0BpbnRlcmZhY2Ug
V0tQb2ludExpZ2h0RmlsdGVyIDogQ0lGaWx0ZXIgeworICAgIENJVmVjdG9yICppbnB1dExpZ2h0
UG9zaXRpb247Cit9CitAZW5kCkluZGV4OiBkZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tQb2ludExp
Z2h0RmlsdGVyLm0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL1dL
UG9pbnRMaWdodEZpbHRlci5tCmRpZmYgLU4gZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL1dLUG9pbnRM
aWdodEZpbHRlci5tCi0tLSBkZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tQb2ludExpZ2h0RmlsdGVy
Lm0JMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMAorKysgZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL1dL
UG9pbnRMaWdodEZpbHRlci5tCTYgT2N0IDIwMDUgMTE6Mzc6NTMgLTAwMDAKQEAgLTAsMCArMSw3
MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKyAKKyNpbXBvcnQgIldLUG9pbnRMaWdodEZpbHRlci5o
IgorCitzdGF0aWMgQ0lLZXJuZWwgKnBvaW50TGlnaHRGaWx0ZXIgPSBuaWw7CisKK0BpbXBsZW1l
bnRhdGlvbiBXS1BvaW50TGlnaHRGaWx0ZXIKKworKyAodm9pZClpbml0aWFsaXplCit7CisgICAg
W0NJRmlsdGVyIHJlZ2lzdGVyRmlsdGVyTmFtZTpAIldLUG9pbnRMaWdodCIKKyAgICAgICAgY29u
c3RydWN0b3I6IHNlbGYKKyAgICAgICAgY2xhc3NBdHRyaWJ1dGVzOiBbTlNEaWN0aW9uYXJ5IGRp
Y3Rpb25hcnlXaXRoT2JqZWN0c0FuZEtleXM6CisgICAgICAgICBAIldlYktpdCBQb2ludCBMaWdo
dCIsIGtDSUF0dHJpYnV0ZUZpbHRlckRpc3BsYXlOYW1lLAorICAgICAgICBbTlNBcnJheSBhcnJh
eVdpdGhPYmplY3RzOiBrQ0lDYXRlZ29yeVN0eWxpemUsIGtDSUNhdGVnb3J5VmlkZW8sCisgICAg
ICAgICAgICBrQ0lDYXRlZ29yeVN0aWxsSW1hZ2UsIGtDSUNhdGVnb3J5Tm9uU3F1YXJlUGl4ZWxz
LG5pbF0sIGtDSUF0dHJpYnV0ZUZpbHRlckNhdGVnb3JpZXMsCisgICAgICAgIFtOU0RpY3Rpb25h
cnkgZGljdGlvbmFyeVdpdGhPYmplY3RzQW5kS2V5czoKKyAgICAgICAgICAgIGtDSUF0dHJpYnV0
ZVR5cGVQb3NpdGlvbjMsIGtDSUF0dHJpYnV0ZVR5cGUsCisgICAgICAgICAgICBuaWxdLCBAImlu
cHV0TGlnaHRQb3NpdGlvbiIsCisgICAgICAgIG5pbF1dOworfQorCisrIChDSUZpbHRlciAqKWZp
bHRlcldpdGhOYW1lOihOU1N0cmluZyAqKW5hbWUKK3sKKyAgICBDSUZpbHRlciAqZmlsdGVyOwor
ICAgIGZpbHRlciA9IFtbc2VsZiBhbGxvY10gaW5pdF07CisgICAgcmV0dXJuIFtmaWx0ZXIgYXV0
b3JlbGVhc2VdOworfQorCistIChpZClpbml0Cit7CisgICAgaWYoIXBvaW50TGlnaHRGaWx0ZXIp
IHsKKyAgICAgICAgTlNCdW5kbGUgKmJ1bmRsZSA9IFtOU0J1bmRsZSBidW5kbGVGb3JDbGFzczpb
c2VsZiBjbGFzc11dOworICAgICAgICBOU1N0cmluZyAqa2VybmVsRmlsZSA9IFtidW5kbGUgcGF0
aEZvclJlc291cmNlOkAiV0tQb2ludExpZ2h0RmlsdGVyIiBvZlR5cGU6QCJjaWtlcm5lbCJdOwor
ICAgICAgICBOU1N0cmluZyAqY29kZSA9IFtOU1N0cmluZyBzdHJpbmdXaXRoQ29udGVudHNPZkZp
bGU6a2VybmVsRmlsZV07CisgICAgICAgIE5TQXJyYXkgKmtlcm5lbHMgPSBbQ0lLZXJuZWwga2Vy
bmVsc1dpdGhTdHJpbmc6Y29kZV07CisgICAgICAgIHBvaW50TGlnaHRGaWx0ZXIgPSBbW2tlcm5l
bHMgb2JqZWN0QXRJbmRleDowXSByZXRhaW5dOworICAgIH0KKyAgICByZXR1cm4gW3N1cGVyIGlu
aXRdOworfQorCistIChDSUltYWdlICopb3V0cHV0SW1hZ2UKK3sKKyAgICByZXR1cm4gW3NlbGYg
YXBwbHk6cG9pbnRMaWdodEZpbHRlciwgaW5wdXRMaWdodFBvc2l0aW9uLCBuaWxdOworfQorCitA
ZW5kCkluZGV4OiBkZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tTcGVjdWxhckxpZ2h0aW5nRmlsdGVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQpSQ1MgZmlsZTogZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL1dLU3BlY3VsYXJM
aWdodGluZ0ZpbHRlci5oCmRpZmYgLU4gZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL1dLU3BlY3VsYXJM
aWdodGluZ0ZpbHRlci5oCi0tLSBkZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tTcGVjdWxhckxpZ2h0
aW5nRmlsdGVyLmgJMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMAorKysgZGV2aWNlL3F1YXJ0ei9m
aWx0ZXJzL1dLU3BlY3VsYXJMaWdodGluZ0ZpbHRlci5oCTYgT2N0IDIwMDUgMTE6Mzc6NTMgLTAw
MDAKQEAgLTAsMCArMSwzNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBBcHBsZSBDb21w
dXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2ltcG9ydCA8UXVhcnR6
Q29yZS9Db3JlSW1hZ2UuaD4KKworCitAaW50ZXJmYWNlIFdLU3BlY3VsYXJMaWdodGluZ0ZpbHRl
ciA6IENJRmlsdGVyIHsKKyAgICBDSUltYWdlICppbnB1dEltYWdlOworICAgIENJQ29sb3IgKmlu
cHV0TGlnaHRpbmdDb2xvcjsKKyAgICBOU051bWJlciAqaW5wdXRTY2FsZTsKKyAgICBOU051bWJl
ciAqaW5wdXRTcGVjdWxhckNvbnN0YW50OworICAgIE5TTnVtYmVyICppbnB1dFNwZWN1bGFyRXhw
b25lbnQ7CisgICAgQ0lWZWN0b3IgKmlucHV0S2VybmVsVW5pdExlbmd0aDsKK30KK0BlbmQKSW5k
ZXg6IGRldmljZS9xdWFydHovZmlsdGVycy9XS1NwZWN1bGFyTGlnaHRpbmdGaWx0ZXIubQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09ClJDUyBmaWxlOiBkZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tTcGVjdWxhckxpZ2h0aW5n
RmlsdGVyLm0KZGlmZiAtTiBkZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tTcGVjdWxhckxpZ2h0aW5n
RmlsdGVyLm0KLS0tIGRldmljZS9xdWFydHovZmlsdGVycy9XS1NwZWN1bGFyTGlnaHRpbmdGaWx0
ZXIubQkxIEphbiAxOTcwIDAwOjAwOjAwIC0wMDAwCisrKyBkZXZpY2UvcXVhcnR6L2ZpbHRlcnMv
V0tTcGVjdWxhckxpZ2h0aW5nRmlsdGVyLm0JNiBPY3QgMjAwNSAxMTozNzo1MyAtMDAwMApAQCAt
MCwwICsxLDkzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1IEFwcGxlIENvbXB1dGVyLCBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW1wb3J0ICJXS1NwZWN1bGFyTGln
aHRpbmdGaWx0ZXIuaCIKKworc3RhdGljIENJS2VybmVsICpzcGVjdWxhckxpZ2h0aW5nRmlsdGVy
ID0gbmlsOworCitAaW1wbGVtZW50YXRpb24gV0tTcGVjdWxhckxpZ2h0aW5nRmlsdGVyCisKKysg
KHZvaWQpaW5pdGlhbGl6ZQoreworICAgIFtDSUZpbHRlciByZWdpc3RlckZpbHRlck5hbWU6QCJX
S1NwZWN1bGFyTGlnaHRpbmciICAKKyAgICAgICAgY29uc3RydWN0b3I6IHNlbGYKKyAgICAgICAg
Y2xhc3NBdHRyaWJ1dGVzOiBbTlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnlXaXRoT2JqZWN0c0FuZEtl
eXM6CisgICAgICAgICBAIldlYktpdCBTcGVjdWxhciBMaWdodGluZyIsIGtDSUF0dHJpYnV0ZUZp
bHRlckRpc3BsYXlOYW1lLAorICAgICAgICBbTlNBcnJheSBhcnJheVdpdGhPYmplY3RzOiBrQ0lD
YXRlZ29yeVN0eWxpemUsIGtDSUNhdGVnb3J5VmlkZW8sCisgICAgICAgICAgICBrQ0lDYXRlZ29y
eVN0aWxsSW1hZ2UsIGtDSUNhdGVnb3J5Tm9uU3F1YXJlUGl4ZWxzLG5pbF0sIGtDSUF0dHJpYnV0
ZUZpbHRlckNhdGVnb3JpZXMsCisgICAgICAgIFtOU0RpY3Rpb25hcnkgZGljdGlvbmFyeVdpdGhP
YmplY3RzQW5kS2V5czoKKyAgICAgICAgICAgIFtDSUNvbG9yIGNvbG9yV2l0aFJlZDoxLjAgZ3Jl
ZW46MS4wIGJsdWU6MS4wIGFscGhhOjEuMF0sCisgICAgICAgICAgICAga0NJQXR0cmlidXRlRGVm
YXVsdCwgbmlsXSwgIEAiaW5wdXRMaWdodGluZ0NvbG9yIiwKKyAgICAgICAgW05TRGljdGlvbmFy
eSBkaWN0aW9uYXJ5V2l0aE9iamVjdHNBbmRLZXlzOgorICAgICAgICAgICAgW05TTnVtYmVyIG51
bWJlcldpdGhEb3VibGU6MC4wXSwga0NJQXR0cmlidXRlTWluLAorICAgICAgICAgICAgW05TTnVt
YmVyIG51bWJlcldpdGhEb3VibGU6MS4wXSwga0NJQXR0cmlidXRlRGVmYXVsdCwKKyAgICAgICAg
ICAgIFtOU051bWJlciBudW1iZXJXaXRoRG91YmxlOjEuMF0sIGtDSUF0dHJpYnV0ZUlkZW50aXR5
LAorICAgICAgICAgICAga0NJQXR0cmlidXRlVHlwZVNjYWxhciwga0NJQXR0cmlidXRlVHlwZSwK
KyAgICAgICAgICAgIG5pbF0sIEAiaW5wdXRTY2FsZSIsCisgICAgICAgIFtOU0RpY3Rpb25hcnkg
ZGljdGlvbmFyeVdpdGhPYmplY3RzQW5kS2V5czoKKyAgICAgICAgICAgIFtOU051bWJlciBudW1i
ZXJXaXRoRG91YmxlOjAuMF0sIGtDSUF0dHJpYnV0ZU1pbiwKKyAgICAgICAgICAgIFtOU051bWJl
ciBudW1iZXJXaXRoRG91YmxlOjEuMF0sIGtDSUF0dHJpYnV0ZURlZmF1bHQsCisgICAgICAgICAg
ICBbTlNOdW1iZXIgbnVtYmVyV2l0aERvdWJsZToxLjBdLCBrQ0lBdHRyaWJ1dGVJZGVudGl0eSwK
KyAgICAgICAgICAgIGtDSUF0dHJpYnV0ZVR5cGVTY2FsYXIsIGtDSUF0dHJpYnV0ZVR5cGUsCisg
ICAgICAgICAgICBuaWxdLCBAImlucHV0U3BlY3VsYXJDb25zdGFudCIsCisgICAgICAgIFtOU0Rp
Y3Rpb25hcnkgZGljdGlvbmFyeVdpdGhPYmplY3RzQW5kS2V5czoKKyAgICAgICAgICAgIFtOU051
bWJlciBudW1iZXJXaXRoRG91YmxlOjAuMF0sIGtDSUF0dHJpYnV0ZU1pbiwKKyAgICAgICAgICAg
IFtOU051bWJlciBudW1iZXJXaXRoRG91YmxlOjEyOC4wXSwga0NJQXR0cmlidXRlTWluLAorICAg
ICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhEb3VibGU6MS4wXSwga0NJQXR0cmlidXRlRGVm
YXVsdCwKKyAgICAgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoRG91YmxlOjEuMF0sIGtDSUF0
dHJpYnV0ZUlkZW50aXR5LAorICAgICAgICAgICAga0NJQXR0cmlidXRlVHlwZVNjYWxhciwga0NJ
QXR0cmlidXRlVHlwZSwKKyAgICAgICAgICAgIG5pbF0sIEAiaW5wdXRTcGVjdWxhckV4cG9uZW50
IiwKKyAgICAgICAgW05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVjdHNBbmRLZXlzOgor
ICAgICAgICAgICAga0NJQXR0cmlidXRlVHlwZU9mZnNldCwga0NJQXR0cmlidXRlVHlwZSwKKyAg
ICAgICAgICAgIG5pbF0sIEAiaW5wdXRLZXJuZWxVbml0TGVuZ3RoIiwKKyAgICAgICAgbmlsXV07
Cit9CisKKysgKENJRmlsdGVyICopZmlsdGVyV2l0aE5hbWU6KE5TU3RyaW5nICopbmFtZQorewor
ICAgIENJRmlsdGVyICpmaWx0ZXI7CisgICAgZmlsdGVyID0gW1tzZWxmIGFsbG9jXSBpbml0XTsK
KyAgICByZXR1cm4gW2ZpbHRlciBhdXRvcmVsZWFzZV07Cit9CisKKy0gKGlkKWluaXQKK3sKKyAg
ICBpZighc3BlY3VsYXJMaWdodGluZ0ZpbHRlcikgeworICAgICAgICBOU0J1bmRsZSAqYnVuZGxl
ID0gW05TQnVuZGxlIGJ1bmRsZUZvckNsYXNzOltzZWxmIGNsYXNzXV07CisgICAgICAgIE5TU3Ry
aW5nICprZXJuZWxGaWxlID0gW2J1bmRsZSBwYXRoRm9yUmVzb3VyY2U6QCJXS1NwZWN1bGFyTGln
aHRpbmdGaWx0ZXIiIG9mVHlwZTpAImNpa2VybmVsIl07CisgICAgICAgIE5TU3RyaW5nICpjb2Rl
ID0gW05TU3RyaW5nIHN0cmluZ1dpdGhDb250ZW50c09mRmlsZTprZXJuZWxGaWxlXTsKKyAgICAg
ICAgTlNBcnJheSAqa2VybmVscyA9IFtDSUtlcm5lbCBrZXJuZWxzV2l0aFN0cmluZzpjb2RlXTsK
KyAgICAgICAgc3BlY3VsYXJMaWdodGluZ0ZpbHRlciA9IFtba2VybmVscyBvYmplY3RBdEluZGV4
OjBdIHJldGFpbl07CisgICAgfQorICAgIHJldHVybiBbc3VwZXIgaW5pdF07Cit9CisKKy0gKENJ
SW1hZ2UgKilvdXRwdXRJbWFnZQoreworICAgIHJldHVybiBbc2VsZiBhcHBseTpzcGVjdWxhckxp
Z2h0aW5nRmlsdGVyLCBpbnB1dExpZ2h0aW5nQ29sb3IsIGlucHV0U2NhbGUsIGlucHV0U3BlY3Vs
YXJDb25zdGFudCwKKyAgICAgICAgaW5wdXRTcGVjdWxhckV4cG9uZW50LCBpbnB1dEtlcm5lbFVu
aXRMZW5ndGgsIG5pbF07Cit9CisKK0BlbmQKSW5kZXg6IGRldmljZS9xdWFydHovZmlsdGVycy9X
S1Nwb3RMaWdodEZpbHRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IGRldmljZS9xdWFydHovZmls
dGVycy9XS1Nwb3RMaWdodEZpbHRlci5oCmRpZmYgLU4gZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL1dL
U3BvdExpZ2h0RmlsdGVyLmgKLS0tIGRldmljZS9xdWFydHovZmlsdGVycy9XS1Nwb3RMaWdodEZp
bHRlci5oCTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAKKysrIGRldmljZS9xdWFydHovZmlsdGVy
cy9XS1Nwb3RMaWdodEZpbHRlci5oCTYgT2N0IDIwMDUgMTE6Mzc6NTMgLTAwMDAKQEAgLTAsMCAr
MSwzNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBBcHBsZSBDb21wdXRlciwgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2ltcG9ydCA8UXVhcnR6Q29yZS9Db3JlSW1h
Z2UuaD4KKworQGludGVyZmFjZSBXS1Nwb3RMaWdodEZpbHRlciA6IENJRmlsdGVyIHsKKyAgICBD
SVZlY3RvciAqaW5wdXRMaWdodFBvc2l0aW9uOworICAgIENJVmVjdG9yICppbnB1dExpZ2h0UG9p
bnRzQXQ7CisgICAgTlNOdW1iZXIgKmlucHV0U3BlY3VsYXJFeHBvbmVudDsKKyAgICBOU051bWJl
ciAqaW5wdXRMaW1pdGluZ0NvbmVBbmdsZTsKK30KK0BlbmQKSW5kZXg6IGRldmljZS9xdWFydHov
ZmlsdGVycy9XS1Nwb3RMaWdodEZpbHRlci5tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IGRldmljZS9x
dWFydHovZmlsdGVycy9XS1Nwb3RMaWdodEZpbHRlci5tCmRpZmYgLU4gZGV2aWNlL3F1YXJ0ei9m
aWx0ZXJzL1dLU3BvdExpZ2h0RmlsdGVyLm0KLS0tIGRldmljZS9xdWFydHovZmlsdGVycy9XS1Nw
b3RMaWdodEZpbHRlci5tCTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAKKysrIGRldmljZS9xdWFy
dHovZmlsdGVycy9XS1Nwb3RMaWdodEZpbHRlci5tCTYgT2N0IDIwMDUgMTE6Mzc6NTMgLTAwMDAK
QEAgLTAsMCArMSw4MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBBcHBsZSBDb21wdXRl
ciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKyAKKyNpbXBvcnQgIldLU3BvdExp
Z2h0RmlsdGVyLmgiCisKK3N0YXRpYyBDSUtlcm5lbCAqc3BvdExpZ2h0RmlsdGVyID0gbmlsOwor
CitAaW1wbGVtZW50YXRpb24gV0tTcG90TGlnaHRGaWx0ZXIKKworKyAodm9pZClpbml0aWFsaXpl
Cit7CisgICAgW0NJRmlsdGVyIHJlZ2lzdGVyRmlsdGVyTmFtZTpAIldLU3BvdExpZ2h0IgorICAg
ICAgICBjb25zdHJ1Y3Rvcjogc2VsZgorICAgICAgICBjbGFzc0F0dHJpYnV0ZXM6IFtOU0RpY3Rp
b25hcnkgZGljdGlvbmFyeVdpdGhPYmplY3RzQW5kS2V5czoKKyAgICAgICAgIEAiV2ViS2l0IFNw
b3QgTGlnaHQiLCBrQ0lBdHRyaWJ1dGVGaWx0ZXJEaXNwbGF5TmFtZSwKKyAgICAgICAgW05TQXJy
YXkgYXJyYXlXaXRoT2JqZWN0czoga0NJQ2F0ZWdvcnlTdHlsaXplLCBrQ0lDYXRlZ29yeVZpZGVv
LAorICAgICAgICAgICAga0NJQ2F0ZWdvcnlTdGlsbEltYWdlLCBrQ0lDYXRlZ29yeU5vblNxdWFy
ZVBpeGVscyxuaWxdLCBrQ0lBdHRyaWJ1dGVGaWx0ZXJDYXRlZ29yaWVzLAorICAgICAgICBbTlNE
aWN0aW9uYXJ5IGRpY3Rpb25hcnlXaXRoT2JqZWN0c0FuZEtleXM6CisgICAgICAgICAgICBrQ0lB
dHRyaWJ1dGVUeXBlUG9zaXRpb24zLCBrQ0lBdHRyaWJ1dGVUeXBlLAorICAgICAgICAgICAgbmls
XSwgQCJpbnB1dExpZ2h0UG9zaXRpb24iLAorICAgICAgICBbTlNEaWN0aW9uYXJ5IGRpY3Rpb25h
cnlXaXRoT2JqZWN0c0FuZEtleXM6CisgICAgICAgICAgICBrQ0lBdHRyaWJ1dGVUeXBlUG9zaXRp
b24zLCBrQ0lBdHRyaWJ1dGVUeXBlLAorICAgICAgICAgICAgbmlsXSwgQCJpbnB1dExpZ2h0UG9p
bnRzQXQiLAorICAgICAgICBbTlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnlXaXRoT2JqZWN0c0FuZEtl
eXM6CisgICAgICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aERvdWJsZToxLjBdLCBrQ0lBdHRy
aWJ1dGVEZWZhdWx0LAorICAgICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhEb3VibGU6MS4w
XSwga0NJQXR0cmlidXRlSWRlbnRpdHksCisgICAgICAgICAgICBrQ0lBdHRyaWJ1dGVUeXBlU2Nh
bGFyLCBrQ0lBdHRyaWJ1dGVUeXBlLAorICAgICAgICAgICAgbmlsXSwgQCJpbnB1dFNwZWN1bGFy
RXhwb25lbnQiLAorICAgICAgICBbTlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnlXaXRoT2JqZWN0c0Fu
ZEtleXM6CisgICAgICAgICAgICBrQ0lBdHRyaWJ1dGVUeXBlQW5nbGUsIGtDSUF0dHJpYnV0ZVR5
cGUsCisgICAgICAgICAgICBuaWxdLCBAImlucHV0TGltaXRpbmdDb25lQW5nbGUiLAorICAgICAg
ICBuaWxdXTsKK30KKworKyAoQ0lGaWx0ZXIgKilmaWx0ZXJXaXRoTmFtZTooTlNTdHJpbmcgKilu
YW1lCit7CisgICAgQ0lGaWx0ZXIgKmZpbHRlcjsKKyAgICBmaWx0ZXIgPSBbW3NlbGYgYWxsb2Nd
IGluaXRdOworICAgIHJldHVybiBbZmlsdGVyIGF1dG9yZWxlYXNlXTsKK30KKworLSAoaWQpaW5p
dAoreworICAgIGlmKCFzcG90TGlnaHRGaWx0ZXIpIHsKKyAgICAgICAgTlNCdW5kbGUgKmJ1bmRs
ZSA9IFtOU0J1bmRsZSBidW5kbGVGb3JDbGFzczpbc2VsZiBjbGFzc11dOworICAgICAgICBOU1N0
cmluZyAqa2VybmVsRmlsZSA9IFtidW5kbGUgcGF0aEZvclJlc291cmNlOkAiV0tQb2ludExpZ2h0
RmlsdGVyIiBvZlR5cGU6QCJjaWtlcm5lbCJdOworICAgICAgICBOU1N0cmluZyAqY29kZSA9IFtO
U1N0cmluZyBzdHJpbmdXaXRoQ29udGVudHNPZkZpbGU6a2VybmVsRmlsZV07CisgICAgICAgIE5T
QXJyYXkgKmtlcm5lbHMgPSBbQ0lLZXJuZWwga2VybmVsc1dpdGhTdHJpbmc6Y29kZV07CisgICAg
ICAgIHNwb3RMaWdodEZpbHRlciA9IFtba2VybmVscyBvYmplY3RBdEluZGV4OjBdIHJldGFpbl07
CisgICAgfQorICAgIHJldHVybiBbc3VwZXIgaW5pdF07Cit9CisKKy0gKENJSW1hZ2UgKilvdXRw
dXRJbWFnZQoreworICAgIHJldHVybiBbc2VsZiBhcHBseTpzcG90TGlnaHRGaWx0ZXIsIGlucHV0
TGlnaHRQb3NpdGlvbiwgbmlsXTsKK30KKworQGVuZAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>4251</attachid>
            <date>2005-10-08 01:45:52 -0700</date>
            <delta_ts>2005-11-08 01:58:32 -0800</delta_ts>
            <desc>Another pass at Obj-C and C++ binding code for Oliver</desc>
            <filename>filters.patch</filename>
            <type>text/plain</type>
            <size>63504</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">SW5kZXg6IEtDYW52YXNGaWx0ZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3Qv
U1ZHU3VwcG9ydC9rY2FudmFzL0tDYW52YXNGaWx0ZXJzLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNp
b24gMS42CmRpZmYgLXAgLXUgLXIxLjYgS0NhbnZhc0ZpbHRlcnMuY3BwCi0tLSBLQ2FudmFzRmls
dGVycy5jcHAJNSBPY3QgMjAwNSAwNTozNjo0NCAtMDAwMAkxLjYKKysrIEtDYW52YXNGaWx0ZXJz
LmNwcAk4IE9jdCAyMDA1IDA4OjQ2OjMxIC0wMDAwCkBAIC0xMDEsMTEgKzEwMSwyMyBAQCBRVGV4
dFN0cmVhbSAmS0NhbnZhc0ZFRGlzdGFudExpZ2h0OjpleHRlCiAgICAgcmV0dXJuIHRzOwogfQog
CitzdGF0aWMgUVRleHRTdHJlYW0gJm9wZXJhdG9yPDwoUVRleHRTdHJlYW0gJnRzLCBLQ2FudmFz
UG9pbnQzRiBwKQoreworICAgIHRzIDw8ICJ4PSIgPDwgcC54KCkgPDwgIiB5PSIgPDwgcC55KCkg
PDwgIiB6PSIgPDwgcC56KCk7CisgICAgcmV0dXJuIHRzOyAgCit9CisKK3N0YXRpYyBRVGV4dFN0
cmVhbSAmb3BlcmF0b3I8PChRVGV4dFN0cmVhbSAmdHMsIFFQb2ludEYgcCkKK3sKKyAgICB0cyA8
PCAieD0iIDw8IHAueCgpIDw8ICIgeT0iIDw8IHAueSgpOworICAgIHJldHVybiB0czsgIAorfQor
CiBRVGV4dFN0cmVhbSAmS0NhbnZhc0ZFUG9pbnRMaWdodDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlv
bihRVGV4dFN0cmVhbSAmdHMpIGNvbnN0CiB7CiAgICAgdHMgPDwgIlt0eXBlPVBPSU5ULUxJR0hU
XSAiOwogICAgIEtDYW52YXNGaWx0ZXJFZmZlY3Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMp
OwotICAgIHRzIDw8ICJbeD0iIDw8IG1feCA8PCAiIHk9IiA8PCBtX3kgPDwgIiB6PSIgPDwgbV96
IDw8ICJdIjsKKyAgICB0cyA8PCAiWyIgPDwgbV9sb2NhdGlvbiA8PCAiXSI7CiAgICAgcmV0dXJu
IHRzOwogfQogCkBAIC0xMTMsOCArMTI1LDggQEAgUVRleHRTdHJlYW0gJktDYW52YXNGRVNwb3RM
aWdodDo6ZXh0ZXJuYQogewogICAgIHRzIDw8ICJbdHlwZT1TUE9ULUxJR0hUXSAiOyAKICAgICBL
Q2FudmFzRmlsdGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzKTsKLSAgICB0cyA8
PCAiW3g9IiA8PCBtX3ggPDwgIiB5PSIgPDwgbV95IDw8ICIgej0iIDw8IG1feiA8PCAiXSIKLSAg
ICAgICAgPDwgIltwb2ludHMgYXQgeD0iIDw8IG1fcG9pbnRzQXRYIDw8ICIgeT0iIDw8IG1fcG9p
bnRzQXRZIDw8ICIgej0iIDw8IG1fcG9pbnRzQXRaIDw8ICJdIjsKKyAgICB0cyA8PCAiWyIgPDwg
bV9sb2NhdGlvbiA8PCAiXSIKKyAgICAgICAgPDwgIltwb2ludHMgYXQgIiA8PCBtX3BvaW50c0F0
IDw8ICJdIjsKICAgICByZXR1cm4gdHM7CiB9CiAKQEAgLTIzMywyMCArMjQ1LDI2IEBAIHN0YXRp
YyBRVGV4dFN0cmVhbSAmb3BlcmF0b3I8PChRVGV4dFN0cmUKICAgICAgICAgY2FzZSBFTV9OT05F
OgogICAgICAgICAgICAgdHMgPDwgIk5PTkUiOyBicmVhazsKICAgICB9Ci0gICAgcmV0dXJuIHRz
OyAgICAKKyAgICByZXR1cm4gdHM7Cit9CisKK3N0YXRpYyBRVGV4dFN0cmVhbSAmb3BlcmF0b3I8
PChRVGV4dFN0cmVhbSAmdHMsIFFTaXplIHMpCit7ICAgCisgICAgdHMgPDwgIng9IiA8PCBzLndp
ZHRoKCkgPDwgIiB5PSIgPDwgcy5oZWlnaHQoKTsgCisgICAgcmV0dXJuIHRzOwogfQogCiBRVGV4
dFN0cmVhbSAmS0NhbnZhc0ZFQ29udm9sdmVNYXRyaXg6OmV4dGVybmFsUmVwcmVzZW50YXRpb24o
UVRleHRTdHJlYW0gJnRzKSBjb25zdAogewogICAgIHRzIDw8ICJbdHlwZT1DT05WT0xWRS1NQVRS
SVhdICI7CiAgICAgS0NhbnZhc0ZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0
cyk7Ci0gICAgdHMgPDwgIiBbb3JkZXIgeD0gIiA8PCBtX29yZGVyWCA8PCAiIHk9IiA8PCBtX29y
ZGVyWSA8PCAiXSIKKyAgICB0cyA8PCAiIFtvcmRlciAiIDw8IG1fa2VybmVsU2l6ZSA8PCAiXSIK
ICAgICAgICAgPDwgIiBba2VybmVsIG1hdHJpeD0iIDw8IG1fa2VybmVsTWF0cml4ICA8PCAiXSIK
ICAgICAgICAgPDwgIiBbZGl2aXNvcj0iIDw8IG1fZGl2aXNvciA8PCAiXSIKICAgICAgICAgPDwg
IiBbYmlhcz0iIDw8IG1fYmlhcyA8PCAiXSIKLSAgICAgICAgPDwgIiBbdGFyZ2V0IHg9ICIgPDwg
bV90YXJnZXRYIDw8ICIgeT0iIDw8IG1fdGFyZ2V0WSA8PCAiXSIKKyAgICAgICAgPDwgIiBbdGFy
Z2V0ICIgPDwgbV90YXJnZXRPZmZzZXQgPDwgIl0iCiAgICAgICAgIDw8ICIgW2VkZ2UgbW9kZT0i
IDw8IG1fZWRnZU1vZGUgPDwgIl0iCi0gICAgICAgIDw8ICIgW2tlcm5lbCB1bml0IGxlbmd0aCB4
PSIgPDwgbV9rZXJuZWxVbml0TGVuZ3RoWCA8PCAiIHk9IiA8PCBtX2tlcm5lbFVuaXRMZW5ndGhZ
IDw8ICJdIgorICAgICAgICA8PCAiIFtrZXJuZWwgdW5pdCBsZW5ndGggIiA8PCBtX2tlcm5lbFVu
aXRMZW5ndGggPDwgIl0iCiAgICAgICAgIDw8ICIgW3ByZXNlcnZlIGFscGhhPSIgPDwgbV9wcmVz
ZXJ2ZUFscGhhIDw8ICJdIjsgICAgICAgIAogICAgcmV0dXJuIHRzOwogfQpAQCAtMjU3LDcgKzI3
NSw3IEBAIFFUZXh0U3RyZWFtICZLQ2FudmFzRkVEaWZmdXNlTGlnaHRpbmc6OmUKICAgICBLQ2Fu
dmFzRmlsdGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzKTsKICAgICB0cyA8PCAi
IFtzdXJmYWNlIHNjYWxlPSIgPDwgbV9zdXJmYWNlU2NhbGUgPDwgIl0iCiAgICAgICAgIDw8ICIg
W2RpZmZ1c2UgY29uc3RhbnQ9IiA8PCBtX2RpZmZ1c2VDb25zdGFudCA8PCAiXSIKLSAgICAgICAg
PDwgIiBba2VybmVsIHVuaXQgbGVuZ3RoIHg9IiA8PCBtX2tlcm5lbFVuaXRMZW5ndGhYIDw8ICIg
eT0iIDw8IG1fa2VybmVsVW5pdExlbmd0aFkgPDwgIl0iOworICAgICAgICA8PCAiIFtrZXJuZWwg
dW5pdCBsZW5ndGggIiA8PCBtX2tlcm5lbFVuaXRMZW5ndGggPDwgIl0iOwogICAgcmV0dXJuIHRz
OwogfQogCkluZGV4OiBLQ2FudmFzRmlsdGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMv
cm9vdC9TVkdTdXBwb3J0L2tjYW52YXMvS0NhbnZhc0ZpbHRlcnMuaCx2CnJldHJpZXZpbmcgcmV2
aXNpb24gMS42CmRpZmYgLXAgLXUgLXIxLjYgS0NhbnZhc0ZpbHRlcnMuaAotLS0gS0NhbnZhc0Zp
bHRlcnMuaAk4IFNlcCAyMDA1IDA4OjAzOjEwIC0wMDAwCTEuNgorKysgS0NhbnZhc0ZpbHRlcnMu
aAk4IE9jdCAyMDA1IDA4OjQ2OjMyIC0wMDAwCkBAIC01Myw2ICs1Myw1MSBAQCB0eXBlZGVmIGVu
dW0KICNpbmNsdWRlIDxxY29sb3IuaD4KICNpbmNsdWRlIDxxc3RyaW5nbGlzdC5oPgogCitjbGFz
cyBLQ2FudmFzUG9pbnQzRiB7CitwdWJsaWM6CisgICAgZmxvYXQgeCgpIGNvbnN0IHsgcmV0dXJu
IG1feDsgfQorICAgIHZvaWQgc2V0WChmbG9hdCB4KSB7IG1feCA9IHg7IH0KKyAgICAKKyAgICBm
bG9hdCB5KCkgY29uc3QgeyByZXR1cm4gbV95OyB9CisgICAgdm9pZCBzZXRZKGZsb2F0IHkpIHsg
bV95ID0geTsgfQorICAgIAorICAgIGZsb2F0IHooKSBjb25zdCB7IHJldHVybiBtX3o7IH0KKyAg
ICB2b2lkIHNldFooZmxvYXQgeikgeyBtX3ogPSB6OyB9CisgICAgCitwcml2YXRlOgorICAgIGZs
b2F0IG1feDsKKyAgICBmbG9hdCBtX3k7CisgICAgZmxvYXQgbV96OworfTsKKworLy8gVGVtcG9y
YXJ5IEhBQ0sKK2NsYXNzIFFQb2ludEYgeworcHVibGljOgorICAgIGZsb2F0IHgoKSBjb25zdCB7
IHJldHVybiBtX3g7IH0KKyAgICB2b2lkIHNldFgoZmxvYXQgeCkgeyBtX3ggPSB4OyB9CisgICAg
CisgICAgZmxvYXQgeSgpIGNvbnN0IHsgcmV0dXJuIG1feTsgfQorICAgIHZvaWQgc2V0WShmbG9h
dCB5KSB7IG1feSA9IHk7IH0KKyAgICAKK3ByaXZhdGU6CisgICAgZmxvYXQgbV94OworICAgIGZs
b2F0IG1feTsKK307CisKKy8vIFRlbXBvcmFyeSBIQUNLCitjbGFzcyBRU2l6ZUYgeworcHVibGlj
OgorICAgIGZsb2F0IHdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV93aWR0aDsgfQorICAgIHZvaWQg
c2V0V2lkdGgoZmxvYXQgd2lkdGgpIHsgbV93aWR0aCA9IHdpZHRoOyB9CisgICAgCisgICAgZmxv
YXQgaGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9oZWlnaHQ7IH0KKyAgICB2b2lkIHNldEhlaWdo
dChmbG9hdCBoZWlnaHQpIHsgbV9oZWlnaHQgPSBoZWlnaHQ7IH0KKyAgICAKK3ByaXZhdGU6Cisg
ICAgZmxvYXQgbV93aWR0aDsKKyAgICBmbG9hdCBtX2hlaWdodDsKK307CisKIGNsYXNzIEtDYW52
YXNGaWx0ZXJFZmZlY3Q7CiBjbGFzcyBLUmVuZGVyaW5nRGV2aWNlQ29udGV4dDsKIApAQCAtMTQ1
LDI4ICsxOTAsMzUgQEAgcHJpdmF0ZToKIGNsYXNzIEtDYW52YXNGRVBvaW50TGlnaHQgOiBwdWJs
aWMgS0NhbnZhc0ZpbHRlckVmZmVjdAogewogcHVibGljOgorICAgIEtDYW52YXNQb2ludDNGIGxv
Y2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9sb2NhdGlvbjsgfQorICAgIHZvaWQgc2V0TG9jYXRp
b24oY29uc3QgS0NhbnZhc1BvaW50M0YgJmxvY2F0aW9uKSB7IG1fbG9jYXRpb24gPSBsb2NhdGlv
bjsgfQogCiAgICAgUVRleHRTdHJlYW0gJmV4dGVybmFsUmVwcmVzZW50YXRpb24oUVRleHRTdHJl
YW0gJikgY29uc3Q7CiAKIHByaXZhdGU6Ci0gICAgZmxvYXQgbV94OwotICAgIGZsb2F0IG1feTsK
LSAgICBmbG9hdCBtX3o7CisgICAgS0NhbnZhc1BvaW50M0YgbV9sb2NhdGlvbjsKIH07CiAKIGNs
YXNzIEtDYW52YXNGRVNwb3RMaWdodCA6IHB1YmxpYyBLQ2FudmFzRmlsdGVyRWZmZWN0CiB7CiBw
dWJsaWM6CisgICAgS0NhbnZhc1BvaW50M0YgbG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2xv
Y2F0aW9uOyB9CisgICAgdm9pZCBzZXRMb2NhdGlvbihjb25zdCBLQ2FudmFzUG9pbnQzRiAmbG9j
YXRpb24pIHsgbV9sb2NhdGlvbiA9IGxvY2F0aW9uOyB9CisgICAgCisgICAgS0NhbnZhc1BvaW50
M0YgcG9pbnRzQXQoKSBjb25zdCB7IHJldHVybiBtX3BvaW50c0F0OyB9CisgICAgdm9pZCBzZXRQ
b2ludHNBdChjb25zdCBLQ2FudmFzUG9pbnQzRiAmcG9pbnRzQXQpIHsgbV9wb2ludHNBdCA9IHBv
aW50c0F0OyB9CisgICAgCisgICAgZmxvYXQgc3BlY3VsYXJFeHBvbmVudCgpIGNvbnN0IHsgcmV0
dXJuIG1fc3BlY3VsYXJFeHBvbmVudDsgfQorICAgIHZvaWQgc2V0U3BlY3VsYXJFeHBvbmVudChm
bG9hdCBzcGVjdWxhckV4cG9uZW50KSB7IG1fc3BlY3VsYXJFeHBvbmVudCA9IHNwZWN1bGFyRXhw
b25lbnQ7IH0KKworICAgIGZsb2F0IGxpbWl0aW5nQ29uZUFuZ2xlKCkgY29uc3QgeyByZXR1cm4g
bV9saW1pdGluZ0NvbmVBbmdsZTsgfQorICAgIHZvaWQgc2V0TGltaXRpbmdDb25lQW5nbGUoZmxv
YXQgbGltaXRpbmdDb25lQW5nbGUpIHsgbV9saW1pdGluZ0NvbmVBbmdsZSA9IGxpbWl0aW5nQ29u
ZUFuZ2xlOyB9CiAKICAgICBRVGV4dFN0cmVhbSAmZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihRVGV4
dFN0cmVhbSAmKSBjb25zdDsKIAogcHJpdmF0ZToKLSAgICBmbG9hdCBtX3g7Ci0gICAgZmxvYXQg
bV95OwotICAgIGZsb2F0IG1fejsKLSAgICBmbG9hdCBtX3BvaW50c0F0WDsKLSAgICBmbG9hdCBt
X3BvaW50c0F0WTsKLSAgICBmbG9hdCBtX3BvaW50c0F0WjsKKyAgICBLQ2FudmFzUG9pbnQzRiBt
X2xvY2F0aW9uOworICAgIEtDYW52YXNQb2ludDNGIG1fcG9pbnRzQXQ7CiAgICAgZmxvYXQgbV9z
cGVjdWxhckV4cG9uZW50OwogICAgIGZsb2F0IG1fbGltaXRpbmdDb25lQW5nbGU7CiB9OwpAQCAt
MzMxLDM0ICszODMsNjUgQEAgdHlwZWRlZiBlbnVtIHsKIGNsYXNzIEtDYW52YXNGRUNvbnZvbHZl
TWF0cml4IDogcHVibGljIEtDYW52YXNGaWx0ZXJFZmZlY3QKIHsKIHB1YmxpYzoKKyAgICBRU2l6
ZSBrZXJuZWxTaXplKCkgY29uc3QgeyByZXR1cm4gbV9rZXJuZWxTaXplOyB9CisgICAgdm9pZCBz
ZXRLZXJuZWxTaXplKFFTaXplIGtlcm5lbFNpemUpIHsgbV9rZXJuZWxTaXplID0ga2VybmVsU2l6
ZTsgfQorICAgIAorICAgIFEzVmFsdWVMaXN0PGZsb2F0PiBrZXJuZWwoKSBjb25zdCB7IHJldHVy
biBtX2tlcm5lbE1hdHJpeDsgfQorICAgIHZvaWQgc2V0S2VybmVsKFEzVmFsdWVMaXN0PGZsb2F0
PiBrZXJuZWwpIHsgbV9rZXJuZWxNYXRyaXggPSBrZXJuZWw7IH0KKyAgICAKKyAgICBmbG9hdCBk
aXZpc29yKCkgY29uc3QgeyByZXR1cm4gbV9kaXZpc29yOyB9CisgICAgdm9pZCBzZXREaXZpc29y
KGZsb2F0IGRpdmlzb3IpIHsgbV9kaXZpc29yID0gZGl2aXNvcjsgfQorICAgIAorICAgIGZsb2F0
IGJpYXMoKSBjb25zdCB7IHJldHVybiBtX2JpYXM7IH0KKyAgICB2b2lkIHNldEJpYXMoZmxvYXQg
YmlhcykgeyBtX2JpYXMgPSBiaWFzOyB9CisgICAgCisgICAgUVNpemUgdGFyZ2V0T2Zmc2V0KCkg
Y29uc3QgeyByZXR1cm4gbV90YXJnZXRPZmZzZXQ7IH0KKyAgICB2b2lkIHNldFRhcmdldE9mZnNl
dChRU2l6ZSB0YXJnZXRPZmZzZXQpIHsgbV90YXJnZXRPZmZzZXQgPSB0YXJnZXRPZmZzZXQ7IH0K
KyAgICAKKyAgICBLQ0VkZ2VNb2RlVHlwZSBlZGdlTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fZWRn
ZU1vZGU7IH0KKyAgICB2b2lkIHNldEVkZ2VNb2RlKEtDRWRnZU1vZGVUeXBlIGVkZ2VNb2RlKSB7
IG1fZWRnZU1vZGUgPSBlZGdlTW9kZTsgfQorICAgIAorICAgIFFQb2ludEYga2VybmVsVW5pdExl
bmd0aCgpIGNvbnN0IHtyZXR1cm4gbV9rZXJuZWxVbml0TGVuZ3RoOyB9CisgICAgdm9pZCBzZXRL
ZXJuZWxVbml0TGVuZ3RoKFFQb2ludEYga2VybmVsVW5pdExlbmd0aCkgeyBtX2tlcm5lbFVuaXRM
ZW5ndGggPSBrZXJuZWxVbml0TGVuZ3RoOyB9CisgICAgCisgICAgYm9vbCBwcmVzZXJ2ZUFscGhh
KCkgY29uc3QgeyByZXR1cm4gbV9wcmVzZXJ2ZUFscGhhOyB9CisgICAgdm9pZCBzZXRQcmVzZXJ2
ZUFscGhhKGJvb2wgcHJlc2VydmVBbHBoYSkgeyBtX3ByZXNlcnZlQWxwaGEgPSBwcmVzZXJ2ZUFs
cGhhOyB9CiAKICAgICBRVGV4dFN0cmVhbSAmZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihRVGV4dFN0
cmVhbSAmKSBjb25zdDsKIAogcHJpdmF0ZToKLSAgICBpbnQgbV9vcmRlclg7Ci0gICAgaW50IG1f
b3JkZXJZOworICAgIFFTaXplIG1fa2VybmVsU2l6ZTsKICAgICBRM1ZhbHVlTGlzdDxmbG9hdD4g
bV9rZXJuZWxNYXRyaXg7IC8vIG1heWJlIHNob3VsZCBiZSBhIHJlYWwgbWF0cml4PwogICAgIGZs
b2F0IG1fZGl2aXNvcjsKICAgICBmbG9hdCBtX2JpYXM7Ci0gICAgaW50IG1fdGFyZ2V0WDsKLSAg
ICBpbnQgbV90YXJnZXRZOworICAgIFFTaXplIG1fdGFyZ2V0T2Zmc2V0OwogICAgIEtDRWRnZU1v
ZGVUeXBlIG1fZWRnZU1vZGU7Ci0gICAgZmxvYXQgbV9rZXJuZWxVbml0TGVuZ3RoWDsKLSAgICBm
bG9hdCBtX2tlcm5lbFVuaXRMZW5ndGhZOworICAgIFFQb2ludEYgbV9rZXJuZWxVbml0TGVuZ3Ro
OwogICAgIGJvb2wgbV9wcmVzZXJ2ZUFscGhhOwogfTsKIAogY2xhc3MgS0NhbnZhc0ZFRGlmZnVz
ZUxpZ2h0aW5nIDogcHVibGljIEtDYW52YXNGaWx0ZXJFZmZlY3QKIHsKIHB1YmxpYzoKKyAgICBR
Q29sb3IgbGlnaHRpbmdDb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fbGlnaHRpbmdDb2xvcjsgfQor
ICAgIHZvaWQgc2V0TGlnaHRpbmdDb2xvcihjb25zdCBRQ29sb3IgJmxpZ2h0aW5nQ29sb3IpIHsg
bV9saWdodGluZ0NvbG9yID0gbGlnaHRpbmdDb2xvcjsgfQorCisgICAgZmxvYXQgc3VyZmFjZVNj
YWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdXJmYWNlU2NhbGU7IH0KKyAgICB2b2lkIHNldFN1cmZh
Y2VTY2FsZShmbG9hdCBzdXJmYWNlU2NhbGUpIHsgbV9zdXJmYWNlU2NhbGUgPSBzdXJmYWNlU2Nh
bGU7IH0KKyAgICAKKyAgICBmbG9hdCBkaWZmdXNlQ29uc3RhbnQoKSBjb25zdCB7IHJldHVybiBt
X2RpZmZ1c2VDb25zdGFudDsgfQorICAgIHZvaWQgc2V0RGlmZnVzZUNvbnN0YW50KGZsb2F0IGRp
ZmZ1c2VDb25zdGFudCkgeyBtX2RpZmZ1c2VDb25zdGFudCA9IGRpZmZ1c2VDb25zdGFudDsgfQor
ICAgIAorICAgIFFQb2ludEYga2VybmVsVW5pdExlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fa2Vy
bmVsVW5pdExlbmd0aDsgfQorICAgIHZvaWQgc2V0S2VybmVsVW5pdExlbmd0aChjb25zdCBRUG9p
bnRGICZrZXJuZWxVbml0TGVuZ3RoKSB7IG1fa2VybmVsVW5pdExlbmd0aCA9IGtlcm5lbFVuaXRM
ZW5ndGg7IH0KIAogICAgIFFUZXh0U3RyZWFtICZleHRlcm5hbFJlcHJlc2VudGF0aW9uKFFUZXh0
U3RyZWFtICYpIGNvbnN0OwogCiBwcml2YXRlOgorICAgIFFDb2xvciBtX2xpZ2h0aW5nQ29sb3I7
CiAgICAgZmxvYXQgbV9zdXJmYWNlU2NhbGU7CiAgICAgZmxvYXQgbV9kaWZmdXNlQ29uc3RhbnQ7
Ci0gICAgZmxvYXQgbV9rZXJuZWxVbml0TGVuZ3RoWDsKLSAgICBmbG9hdCBtX2tlcm5lbFVuaXRM
ZW5ndGhZOworICAgIFFQb2ludEYgbV9rZXJuZWxVbml0TGVuZ3RoOwogfTsKIAogdHlwZWRlZiBl
bnVtIHsKQEAgLTM4OSw3ICs0NzIsNiBAQCBwdWJsaWM6CiAgICAgUUNvbG9yIGZsb29kQ29sb3Io
KSBjb25zdCB7IHJldHVybiBtX2Zsb29kQ29sb3I7IH0KICAgICB2b2lkIHNldEZsb29kQ29sb3Io
Y29uc3QgUUNvbG9yICZjb2xvcikgeyBtX2Zsb29kQ29sb3IgPSBjb2xvcjsgfQogCi0KICAgICBm
bG9hdCBmbG9vZE9wYWNpdHkoKSBjb25zdCB7IHJldHVybiBtX2Zsb29kT3BhY2l0eTsgfQogICAg
IHZvaWQgc2V0Rmxvb2RPcGFjaXR5KGZsb2F0IGZsb29kT3BhY2l0eSkgeyBtX2Zsb29kT3BhY2l0
eSA9IGZsb29kT3BhY2l0eTsgfQogCkBAIC00ODcsMTMgKzU2OSwyOSBAQCBwcml2YXRlOgogY2xh
c3MgS0NhbnZhc0ZFU3BlY3VsYXJMaWdodGluZyA6IHB1YmxpYyBLQ2FudmFzRmlsdGVyRWZmZWN0
CiB7CiBwdWJsaWM6CisgICAgUUNvbG9yIGxpZ2h0aW5nQ29sb3IoKSBjb25zdCB7IHJldHVybiBt
X2xpZ2h0aW5nQ29sb3I7IH0KKyAgICB2b2lkIHNldExpZ2h0aW5nQ29sb3IoY29uc3QgUUNvbG9y
ICZsaWdodGluZ0NvbG9yKSB7IG1fbGlnaHRpbmdDb2xvciA9IGxpZ2h0aW5nQ29sb3I7IH0KKwor
ICAgIGZsb2F0IHN1cmZhY2VTY2FsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3VyZmFjZVNjYWxlOyB9
CisgICAgdm9pZCBzZXRTdXJmYWNlU2NhbGUoZmxvYXQgc3VyZmFjZVNjYWxlKSB7IG1fc3VyZmFj
ZVNjYWxlID0gc3VyZmFjZVNjYWxlOyB9CisgICAgCisgICAgZmxvYXQgc3BlY3VsYXJDb25zdGFu
dCgpIGNvbnN0IHsgcmV0dXJuIG1fc3BlY3VsYXJDb25zdGFudDsgfQorICAgIHZvaWQgc2V0U3Bl
Y3VsYXJDb25zdGFudChmbG9hdCBzcGVjdWxhckNvbnN0YW50KSB7IG1fc3BlY3VsYXJDb25zdGFu
dCA9IHNwZWN1bGFyQ29uc3RhbnQ7IH0KKyAgICAKKyAgICBmbG9hdCBzcGVjdWxhckV4cG9uZW50
KCkgY29uc3QgeyByZXR1cm4gbV9zcGVjdWxhckV4cG9uZW50OyB9CisgICAgdm9pZCBzZXRTcGVj
dWxhckV4cG9uZW50KGZsb2F0IHNwZWN1bGFyRXhwb25lbnQpIHsgbV9zcGVjdWxhckV4cG9uZW50
ID0gc3BlY3VsYXJFeHBvbmVudDsgfQorICAgIAorICAgIFFQb2ludEYga2VybmVsVW5pdExlbmd0
aCgpIGNvbnN0IHsgcmV0dXJuIG1fa2VybmVsVW5pdExlbmd0aDsgfQorICAgIHZvaWQgc2V0S2Vy
bmVsVW5pdExlbmd0aChjb25zdCBRUG9pbnRGICZrZXJuZWxVbml0TGVuZ3RoKSB7IG1fa2VybmVs
VW5pdExlbmd0aCA9IGtlcm5lbFVuaXRMZW5ndGg7IH0KIAogICAgIFFUZXh0U3RyZWFtICZleHRl
cm5hbFJlcHJlc2VudGF0aW9uKFFUZXh0U3RyZWFtICYpIGNvbnN0OwogICAgIAogcHJpdmF0ZToK
KyAgICBRQ29sb3IgbV9saWdodGluZ0NvbG9yOwogICAgIGZsb2F0IG1fc3VyZmFjZVNjYWxlOwog
ICAgIGZsb2F0IG1fc3BlY3VsYXJDb25zdGFudDsKICAgICBmbG9hdCBtX3NwZWN1bGFyRXhwb25l
bnQ7CisgICAgUVBvaW50RiBtX2tlcm5lbFVuaXRMZW5ndGg7CiB9OwogCiBjbGFzcyBLQ2FudmFz
RkVUaWxlIDogcHVibGljIEtDYW52YXNGaWx0ZXJFZmZlY3Qge307CkluZGV4OiBkZXZpY2UvcXVh
cnR6L0tDYW52YXNGaWx0ZXJRdWFydHouaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3Qv
U1ZHU3VwcG9ydC9rY2FudmFzL2RldmljZS9xdWFydHovS0NhbnZhc0ZpbHRlclF1YXJ0ei5oLHYK
cmV0cmlldmluZyByZXZpc2lvbiAxLjMKZGlmZiAtcCAtdSAtcjEuMyBkZXZpY2UvcXVhcnR6L0tD
YW52YXNGaWx0ZXJRdWFydHouaAotLS0gZGV2aWNlL3F1YXJ0ei9LQ2FudmFzRmlsdGVyUXVhcnR6
LmgJMSBTZXAgMjAwNSAwNzozMjo1NCAtMDAwMAkxLjMKKysrIGRldmljZS9xdWFydHovS0NhbnZh
c0ZpbHRlclF1YXJ0ei5oCTggT2N0IDIwMDUgMDg6NDY6MzIgLTAwMDAKQEAgLTczLDExICs3Mywy
NiBAQCBwdWJsaWM6CiAvLyAgICB2aXJ0dWFsIENJRmlsdGVyICpnZXRDSUZpbHRlcihLQ2FudmFz
RmlsdGVyUXVhcnR6ICpxdWFydHpGaWx0ZXIpIGNvbnN0OwogLy99OwogCitjbGFzcyBLQ2FudmFz
RkVDb252b2x2ZU1hdHJpeFF1YXJ0eiA6IHB1YmxpYyBLQ2FudmFzRkVDb252b2x2ZU1hdHJpeCB7
CitwdWJsaWM6CisgICAgdmlydHVhbCBDSUZpbHRlciAqZ2V0Q0lGaWx0ZXIoS0NhbnZhc0ZpbHRl
clF1YXJ0eiAqcXVhcnR6RmlsdGVyKSBjb25zdDsKK307CisKIGNsYXNzIEtDYW52YXNGRUNvbXBv
c2l0ZVF1YXJ0eiA6IHB1YmxpYyBLQ2FudmFzRkVDb21wb3NpdGUgewogcHVibGljOgogICAgIHZp
cnR1YWwgQ0lGaWx0ZXIgKmdldENJRmlsdGVyKEtDYW52YXNGaWx0ZXJRdWFydHogKnF1YXJ0ekZp
bHRlcikgY29uc3Q7CiB9OwogCitjbGFzcyBLQ2FudmFzRkVEaWZmdXNlTGlnaHRpbmdRdWFydHog
OiBwdWJsaWMgS0NhbnZhc0ZFRGlmZnVzZUxpZ2h0aW5nIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFs
IENJRmlsdGVyICpnZXRDSUZpbHRlcihLQ2FudmFzRmlsdGVyUXVhcnR6ICpxdWFydHpGaWx0ZXIp
IGNvbnN0OworfTsKKworY2xhc3MgS0NhbnZhc0ZFRGlzdGFudExpZ2h0UXVhcnR6IDogcHVibGlj
IEtDYW52YXNGRURpc3RhbnRMaWdodCB7CitwdWJsaWM6CisgICAgdmlydHVhbCBDSUZpbHRlciAq
Z2V0Q0lGaWx0ZXIoS0NhbnZhc0ZpbHRlclF1YXJ0eiAqcXVhcnR6RmlsdGVyKSBjb25zdDsKK307
CisKIGNsYXNzIEtDYW52YXNGRUZsb29kUXVhcnR6IDogcHVibGljIEtDYW52YXNGRUZsb29kIHsK
IHB1YmxpYzoKICAgICB2aXJ0dWFsIENJRmlsdGVyICpnZXRDSUZpbHRlcihLQ2FudmFzRmlsdGVy
UXVhcnR6ICpxdWFydHpGaWx0ZXIpIGNvbnN0OwpAQCAtOTMsNyArMTA4LDYgQEAgcHVibGljOgog
ICAgIHZpcnR1YWwgQ0lGaWx0ZXIgKmdldENJRmlsdGVyKEtDYW52YXNGaWx0ZXJRdWFydHogKnF1
YXJ0ekZpbHRlcikgY29uc3Q7CiB9OwogCi0KIGNsYXNzIEtDYW52YXNGRU1lcmdlUXVhcnR6IDog
cHVibGljIEtDYW52YXNGRU1lcmdlIHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIENJRmlsdGVyICpn
ZXRDSUZpbHRlcihLQ2FudmFzRmlsdGVyUXVhcnR6ICpxdWFydHpGaWx0ZXIpIGNvbnN0OwpAQCAt
MTA0LDYgKzExOCwyMSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBDSUZpbHRlciAqZ2V0Q0lGaWx0
ZXIoS0NhbnZhc0ZpbHRlclF1YXJ0eiAqcXVhcnR6RmlsdGVyKSBjb25zdDsKIH07CiAKK2NsYXNz
IEtDYW52YXNGRVBvaW50TGlnaHRRdWFydHogOiBwdWJsaWMgS0NhbnZhc0ZFUG9pbnRMaWdodCB7
CitwdWJsaWM6CisgICAgdmlydHVhbCBDSUZpbHRlciAqZ2V0Q0lGaWx0ZXIoS0NhbnZhc0ZpbHRl
clF1YXJ0eiAqcXVhcnR6RmlsdGVyKSBjb25zdDsKK307CisKK2NsYXNzIEtDYW52YXNGRVNwZWN1
bGFyTGlnaHRpbmdRdWFydHogOiBwdWJsaWMgS0NhbnZhc0ZFU3BlY3VsYXJMaWdodGluZyB7Citw
dWJsaWM6CisgICAgdmlydHVhbCBDSUZpbHRlciAqZ2V0Q0lGaWx0ZXIoS0NhbnZhc0ZpbHRlclF1
YXJ0eiAqcXVhcnR6RmlsdGVyKSBjb25zdDsKK307CisKK2NsYXNzIEtDYW52YXNGRVNwb3RMaWdo
dFF1YXJ0eiA6IHB1YmxpYyBLQ2FudmFzRkVTcG90TGlnaHQgeworcHVibGljOgorICAgIHZpcnR1
YWwgQ0lGaWx0ZXIgKmdldENJRmlsdGVyKEtDYW52YXNGaWx0ZXJRdWFydHogKnF1YXJ0ekZpbHRl
cikgY29uc3Q7Cit9OworCiBjbGFzcyBLQ2FudmFzRkVUaWxlUXVhcnR6IDogcHVibGljIEtDYW52
YXNGRVRpbGUgewogcHVibGljOgogICAgIHZpcnR1YWwgQ0lGaWx0ZXIgKmdldENJRmlsdGVyKEtD
YW52YXNGaWx0ZXJRdWFydHogKnF1YXJ0ekZpbHRlcikgY29uc3Q7CkluZGV4OiBkZXZpY2UvcXVh
cnR6L0tDYW52YXNGaWx0ZXJRdWFydHoubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290
L1NWR1N1cHBvcnQva2NhbnZhcy9kZXZpY2UvcXVhcnR6L0tDYW52YXNGaWx0ZXJRdWFydHoubW0s
dgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTAKZGlmZiAtcCAtdSAtcjEuMTAgZGV2aWNlL3F1YXJ0
ei9LQ2FudmFzRmlsdGVyUXVhcnR6Lm1tCi0tLSBkZXZpY2UvcXVhcnR6L0tDYW52YXNGaWx0ZXJR
dWFydHoubW0JNSBPY3QgMjAwNSAwNTozNjo1MSAtMDAwMAkxLjEwCisrKyBkZXZpY2UvcXVhcnR6
L0tDYW52YXNGaWx0ZXJRdWFydHoubW0JOCBPY3QgMjAwNSAwODo0NjozMiAtMDAwMApAQCAtNDAs
MTMgKzQwLDIyIEBACiAKIHN0YXRpYyBRU3RyaW5nIEtDUHJldmlvdXNGaWx0ZXJPdXRwdXROYW1l
ID0gUVN0cmluZzo6ZnJvbUxhdGluMSgiX19wcmV2aW91c091dHB1dF9fIik7CiAKLS8vc3RhdGlj
IENJQ29sb3IgKmNpQ29sb3IoY29uc3QgUUNvbG9yICZjKQotLy97Ci0vLyAgICBDR0NvbG9yUmVm
IGNvbG9yQ0cgPSBjZ0NvbG9yKGMpOwotLy8gICAgQ0lDb2xvciAqY29sb3JDSSA9IFtDSUNvbG9y
IGNvbG9yV2l0aENHQ29sb3I6Y29sb3JDR107Ci0vLyAgICBDR0NvbG9yUmVsZWFzZShjb2xvckNH
KTsKLS8vICAgIHJldHVybiBjb2xvckNJOwotLy99CitzdGF0aWMgaW5saW5lIENJQ29sb3IgKmNp
Q29sb3IoY29uc3QgUUNvbG9yICZjKQoreworICAgIENHQ29sb3JSZWYgY29sb3JDRyA9IGNnQ29s
b3IoYyk7CisgICAgQ0lDb2xvciAqY29sb3JDSSA9IFtDSUNvbG9yIGNvbG9yV2l0aENHQ29sb3I6
Y29sb3JDR107CisgICAgQ0dDb2xvclJlbGVhc2UoY29sb3JDRyk7CisgICAgcmV0dXJuIGNvbG9y
Q0k7Cit9CisKK3N0YXRpYyBpbmxpbmUgQ0lWZWN0b3IgKmNpVmVjdG9yKEtDYW52YXNQb2ludDNG
IHBvaW50KSB7CisgICAgcmV0dXJuIFtDSVZlY3RvciB2ZWN0b3JXaXRoWDpwb2ludC54KCkgWTpw
b2ludC55KCkgWjpwb2ludC56KCldOworfQorCitzdGF0aWMgaW5saW5lIENJVmVjdG9yICpjaVZl
Y3RvcihRUG9pbnRGIHBvaW50KSB7CisgICAgcmV0dXJuIFtDSVZlY3RvciB2ZWN0b3JXaXRoWDpw
b2ludC54KCkgWTpwb2ludC55KCldOworfQorCiAKIEtDYW52YXNGaWx0ZXJRdWFydHo6OktDYW52
YXNGaWx0ZXJRdWFydHooKSA6IG1fc3RvcmVkQ0dDb250ZXh0KDApLCBtX2ZpbHRlckNJQ29udGV4
dCgwKSwgbV9maWx0ZXJDR0xheWVyKDApLCBtX2ltYWdlc0J5TmFtZSgwKQogewpAQCAtMjc0LDcg
KzI4Myw2IEBAIENJSW1hZ2UgKktDYW52YXNGaWx0ZXJRdWFydHo6OmlucHV0SW1hZ2UKICNwcmFn
bWEgbWFyayAtCiAjcHJhZ21hIG1hcmsgRmlsdGVyIEVsZW1lbnRzCiAKLQogI2RlZmluZSBGRV9R
VUFSVFpfU0VUVVBfSU5QVVQobmFtZSkgXAogICAgIENJSW1hZ2UgKmlucHV0SW1hZ2UgPSBxdWFy
dHpGaWx0ZXItPmlucHV0SW1hZ2UodGhpcyk7IFwKICAgICBGRV9RVUFSVFpfQ0hFQ0tfSU5QVVQo
aW5wdXRJbWFnZSkgXApAQCAtNTAyLDYgKzUxMCwyNCBAQCBDSUZpbHRlciAqS0NhbnZhc0ZFQ29t
cG9zaXRlUXVhcnR6OjpnZXRDCiAJRkVfUVVBUlRaX09VVFBVVF9SRVRVUk47CiB9CiAKK0NJRmls
dGVyICpLQ2FudmFzRkVEaWZmdXNlTGlnaHRpbmdRdWFydHo6OmdldENJRmlsdGVyKEtDYW52YXNG
aWx0ZXJRdWFydHogKnF1YXJ0ekZpbHRlcikgY29uc3QKK3sKKyAgICBGRV9RVUFSVFpfU0VUVVBf
SU5QVVQoQCJXS0RpZmZ1c2VMaWdodGluZyIpOworICAgIFtmaWx0ZXIgc2V0VmFsdWU6Y2lDb2xv
cihsaWdodGluZ0NvbG9yKCkpIGZvcktleTpAImlucHV0TGlnaHRpbmdDb2xvciJdOworICAgIFtm
aWx0ZXIgc2V0VmFsdWU6W05TTnVtYmVyIG51bWJlcldpdGhGbG9hdDpzdXJmYWNlU2NhbGUoKV0g
Zm9yS2V5OkAiaW5wdXRTY2FsZSJdOworICAgIFtmaWx0ZXIgc2V0VmFsdWU6W05TTnVtYmVyIG51
bWJlcldpdGhGbG9hdDpkaWZmdXNlQ29uc3RhbnQoKV0gZm9yS2V5OkAiaW5wdXREaWZmdXNlQ29u
c3RhbnQiXTsKKyAgICBbZmlsdGVyIHNldFZhbHVlOmNpVmVjdG9yKGtlcm5lbFVuaXRMZW5ndGgo
KSkgZm9yS2V5OkAiaW5wdXRLZXJuZWxVbml0TGVuZ3RoIl07CisgICAgRkVfUVVBUlRaX09VVFBV
VF9SRVRVUk47Cit9CisKK0NJRmlsdGVyICpLQ2FudmFzRkVEaXN0YW50TGlnaHRRdWFydHo6Omdl
dENJRmlsdGVyKEtDYW52YXNGaWx0ZXJRdWFydHogKnF1YXJ0ekZpbHRlcikgY29uc3QKK3sKKyAg
ICBGRV9RVUFSVFpfU0VUVVBfSU5QVVQoQCJXS0Rpc3RhbnRMaWdodCIpOworICAgIFtmaWx0ZXIg
c2V0VmFsdWU6W05TTnVtYmVyIG51bWJlcldpdGhGbG9hdDphemltdXRoKCldIGZvcktleTpAImlu
cHV0QXppbXV0aCJdOworICAgIFtmaWx0ZXIgc2V0VmFsdWU6W05TTnVtYmVyIG51bWJlcldpdGhG
bG9hdDplbGV2YXRpb24oKV0gZm9yS2V5OkAiaW5wdXRFbGV2YXRpb24iXTsKKyAgICBGRV9RVUFS
VFpfT1VUUFVUX1JFVFVSTjsKK30KKwogQ0lGaWx0ZXIgKktDYW52YXNGRUZsb29kUXVhcnR6Ojpn
ZXRDSUZpbHRlcihLQ2FudmFzRmlsdGVyUXVhcnR6ICpxdWFydHpGaWx0ZXIpIGNvbnN0CiB7CiAJ
Q0lGaWx0ZXIgKmZpbHRlciA9IG5pbDsKQEAgLTU3OSw2ICs2MDUsMzQgQEAgQ0lGaWx0ZXIgKktD
YW52YXNGRU9mZnNldFF1YXJ0ejo6Z2V0Q0lGaQogCUZFX1FVQVJUWl9PVVRQVVRfUkVUVVJOOwog
fQogCitDSUZpbHRlciAqS0NhbnZhc0ZFUG9pbnRMaWdodFF1YXJ0ejo6Z2V0Q0lGaWx0ZXIoS0Nh
bnZhc0ZpbHRlclF1YXJ0eiAqcXVhcnR6RmlsdGVyKSBjb25zdAoreworICAgIEZFX1FVQVJUWl9T
RVRVUF9JTlBVVChAIldLUG9pbnRMaWdodCIpOworICAgIFtmaWx0ZXIgc2V0VmFsdWU6Y2lWZWN0
b3IobG9jYXRpb24oKSkgZm9yS2V5OkAiaW5wdXRMaWdodFBvc2l0aW9uIl07CisgICAgRkVfUVVB
UlRaX09VVFBVVF9SRVRVUk47Cit9CisKK0NJRmlsdGVyICpLQ2FudmFzRkVTcGVjdWxhckxpZ2h0
aW5nUXVhcnR6OjpnZXRDSUZpbHRlcihLQ2FudmFzRmlsdGVyUXVhcnR6ICpxdWFydHpGaWx0ZXIp
IGNvbnN0Cit7CisgICAgRkVfUVVBUlRaX1NFVFVQX0lOUFVUKEAiV0tTcGVjdWxhckxpZ2h0aW5n
Iik7CisgICAgW2ZpbHRlciBzZXRWYWx1ZTpjaUNvbG9yKGxpZ2h0aW5nQ29sb3IoKSkgZm9yS2V5
OkAiaW5wdXRMaWdodGluZ0NvbG9yIl07CisgICAgW2ZpbHRlciBzZXRWYWx1ZTpbTlNOdW1iZXIg
bnVtYmVyV2l0aEZsb2F0OnN1cmZhY2VTY2FsZSgpXSBmb3JLZXk6QCJpbnB1dFNjYWxlIl07Cisg
ICAgW2ZpbHRlciBzZXRWYWx1ZTpbTlNOdW1iZXIgbnVtYmVyV2l0aEZsb2F0OnNwZWN1bGFyQ29u
c3RhbnQoKV0gZm9yS2V5OkAiaW5wdXRTcGVjdWxhckNvbnN0YW50Il07CisgICAgW2ZpbHRlciBz
ZXRWYWx1ZTpbTlNOdW1iZXIgbnVtYmVyV2l0aEZsb2F0OnNwZWN1bGFyRXhwb25lbnQoKV0gZm9y
S2V5OkAiaW5wdXRTcGVjdWxhckV4cG9uZW50Il07CisgICAgW2ZpbHRlciBzZXRWYWx1ZTpjaVZl
Y3RvcihrZXJuZWxVbml0TGVuZ3RoKCkpIGZvcktleTpAImlucHV0S2VybmVsVW5pdExlbmd0aCJd
OworICAgIEZFX1FVQVJUWl9PVVRQVVRfUkVUVVJOOworfQorCitDSUZpbHRlciAqS0NhbnZhc0ZF
U3BvdExpZ2h0UXVhcnR6OjpnZXRDSUZpbHRlcihLQ2FudmFzRmlsdGVyUXVhcnR6ICpxdWFydHpG
aWx0ZXIpIGNvbnN0Cit7CisgICAgRkVfUVVBUlRaX1NFVFVQX0lOUFVUKEAiV0tTcG90TGlnaHQi
KTsKKyAgICBbZmlsdGVyIHNldFZhbHVlOmNpVmVjdG9yKGxvY2F0aW9uKCkpIGZvcktleTpAImlu
cHV0TGlnaHRQb3NpdGlvbiJdOworICAgIFtmaWx0ZXIgc2V0VmFsdWU6Y2lWZWN0b3IocG9pbnRz
QXQoKSkgZm9yS2V5OkAiaW5wdXRMaWdodFBvaW50c0F0Il07CisgICAgW2ZpbHRlciBzZXRWYWx1
ZTpbTlNOdW1iZXIgbnVtYmVyV2l0aEZsb2F0OnNwZWN1bGFyRXhwb25lbnQoKV0gZm9yS2V5OkAi
aW5wdXRTcGVjdWxhckV4cG9uZW50Il07CisgICAgW2ZpbHRlciBzZXRWYWx1ZTpbTlNOdW1iZXIg
bnVtYmVyV2l0aEZsb2F0OmxpbWl0aW5nQ29uZUFuZ2xlKCldIGZvcktleTpAImlucHV0TGltaXRp
bmdDb25lQW5nbGUiXTsKKyAgICBGRV9RVUFSVFpfT1VUUFVUX1JFVFVSTjsKK30KKwogQ0lGaWx0
ZXIgKktDYW52YXNGRVRpbGVRdWFydHo6OmdldENJRmlsdGVyKEtDYW52YXNGaWx0ZXJRdWFydHog
KnF1YXJ0ekZpbHRlcikgY29uc3QKIHsKIAlGRV9RVUFSVFpfU0VUVVBfSU5QVVQoQCJDSUFmZmlu
ZVRpbGUiKTsKQEAgLTU4Niw2ICs2NDAsMyBAQCBDSUZpbHRlciAqS0NhbnZhc0ZFVGlsZVF1YXJ0
ejo6Z2V0Q0lGaWx0CiAJRkVfUVVBUlRaX09VVFBVVF9SRVRVUk47CiB9CiAKLQotCi0KSW5kZXg6
IGRldmljZS9xdWFydHovS1JlbmRlcmluZ0RldmljZVF1YXJ0ei5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBm
aWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rY2FudmFzL2RldmljZS9xdWFydHovS1JlbmRlcmlu
Z0RldmljZVF1YXJ0ei5tbSx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS40CmRpZmYgLXAgLXUgLXIx
LjQgZGV2aWNlL3F1YXJ0ei9LUmVuZGVyaW5nRGV2aWNlUXVhcnR6Lm1tCi0tLSBkZXZpY2UvcXVh
cnR6L0tSZW5kZXJpbmdEZXZpY2VRdWFydHoubW0JNSBPY3QgMjAwNSAwNTozNjo1MiAtMDAwMAkx
LjQKKysrIGRldmljZS9xdWFydHovS1JlbmRlcmluZ0RldmljZVF1YXJ0ei5tbQk4IE9jdCAyMDA1
IDA4OjQ2OjMzIC0wMDAwCkBAIC0yNDMsMTUgKzI0MywxNSBAQCBLQ2FudmFzRmlsdGVyRWZmZWN0
ICpLUmVuZGVyaW5nRGV2aWNlUXVhCiB7CiAJc3dpdGNoKHR5cGUpCiAJewotLy8JY2FzZSBGRV9E
SVNUQU5UX0xJR0hUOiAKLS8vCWNhc2UgRkVfUE9JTlRfTElHSFQ6IAotLy8JY2FzZSBGRV9TUE9U
X0xJR0hUOiAKKwljYXNlIEZFX0RJU1RBTlRfTElHSFQ6IHJldHVybiBuZXcgS0NhbnZhc0ZFRGlz
dGFudExpZ2h0UXVhcnR6KCk7CisJY2FzZSBGRV9QT0lOVF9MSUdIVDogcmV0dXJuIG5ldyBLQ2Fu
dmFzRkVQb2ludExpZ2h0UXVhcnR6KCk7CisJY2FzZSBGRV9TUE9UX0xJR0hUOiByZXR1cm4gbmV3
IEtDYW52YXNGRVNwb3RMaWdodFF1YXJ0eigpOwogCWNhc2UgRkVfQkxFTkQ6IHJldHVybiBuZXcg
S0NhbnZhc0ZFQmxlbmRRdWFydHooKTsKIAljYXNlIEZFX0NPTE9SX01BVFJJWDogcmV0dXJuIG5l
dyBLQ2FudmFzRkVDb2xvck1hdHJpeFF1YXJ0eigpOwogLy8JY2FzZSBGRV9DT01QT05FTlRfVFJB
TlNGRVI6IAogCWNhc2UgRkVfQ09NUE9TSVRFOiByZXR1cm4gbmV3IEtDYW52YXNGRUNvbXBvc2l0
ZVF1YXJ0eigpOwogLy8JY2FzZSBGRV9DT05WT0xWRV9NQVRSSVg6IAotLy8JY2FzZSBGRV9ESUZG
VVNFX0xJR0hUSU5HOiAKKwljYXNlIEZFX0RJRkZVU0VfTElHSFRJTkc6IHJldHVybiBuZXcgS0Nh
bnZhc0ZFRGlmZnVzZUxpZ2h0aW5nUXVhcnR6KCk7CiAvLwljYXNlIEZFX0RJU1BMQUNFTUVOVF9N
QVA6IAogCWNhc2UgRkVfRkxPT0Q6IHJldHVybiBuZXcgS0NhbnZhc0ZFRmxvb2RRdWFydHooKTsK
IAljYXNlIEZFX0dBVVNTSUFOX0JMVVI6IHJldHVybiBuZXcgS0NhbnZhc0ZFR2F1c3NpYW5CbHVy
UXVhcnR6KCk7CkBAIC0yNTksNyArMjU5LDcgQEAgS0NhbnZhc0ZpbHRlckVmZmVjdCAqS1JlbmRl
cmluZ0RldmljZVF1YQogCWNhc2UgRkVfTUVSR0U6IHJldHVybiBuZXcgS0NhbnZhc0ZFTWVyZ2VR
dWFydHooKTsKIC8vCWNhc2UgRkVfTU9SUEhPTE9HWTogCiAJY2FzZSBGRV9PRkZTRVQ6IHJldHVy
biBuZXcgS0NhbnZhc0ZFT2Zmc2V0UXVhcnR6KCk7Ci0vLwljYXNlIEZFX1NQRUNVTEFSX0xJR0hU
SU5HOiAKKwljYXNlIEZFX1NQRUNVTEFSX0xJR0hUSU5HOiByZXR1cm4gbmV3IEtDYW52YXNGRVNw
ZWN1bGFyTGlnaHRpbmdRdWFydHooKTsKIAljYXNlIEZFX1RJTEU6IHJldHVybiBuZXcgS0NhbnZh
c0ZFVGlsZVF1YXJ0eigpOwogLy8JY2FzZSBGRV9UVVJCVUxFTkNFOiAKIAlkZWZhdWx0OgpJbmRl
eDogZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL1dLQ29udm9sdmVNYXRyaXhGaWx0ZXIuY2lrZXJuZWwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQpSQ1MgZmlsZTogZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL1dLQ29udm9sdmVNYXRy
aXhGaWx0ZXIuY2lrZXJuZWwKZGlmZiAtTiBkZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tDb252b2x2
ZU1hdHJpeEZpbHRlci5jaWtlcm5lbApJbmRleDogZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL1dLQ29u
dm9sdmVNYXRyaXhGaWx0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiBkZXZpY2UvcXVhcnR6L2Zp
bHRlcnMvV0tDb252b2x2ZU1hdHJpeEZpbHRlci5oCmRpZmYgLU4gZGV2aWNlL3F1YXJ0ei9maWx0
ZXJzL1dLQ29udm9sdmVNYXRyaXhGaWx0ZXIuaAotLS0gZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL1dL
Q29udm9sdmVNYXRyaXhGaWx0ZXIuaAkxIEphbiAxOTcwIDAwOjAwOjAwIC0wMDAwCisrKyBkZXZp
Y2UvcXVhcnR6L2ZpbHRlcnMvV0tDb252b2x2ZU1hdHJpeEZpbHRlci5oCTggT2N0IDIwMDUgMDg6
NDY6MzMgLTAwMDAKQEAgLTAsMCArMSwzNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBB
cHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2ltcG9y
dCA8UXVhcnR6Q29yZS9Db3JlSW1hZ2UuaD4KKworQGludGVyZmFjZSBXS0NvbnZvbHZlTWF0cml4
RmlsdGVyOiBDSUZpbHRlcgoreworICAgIENJSW1hZ2UgICAqaW5wdXRJbWFnZTsKKyAgICBDSUlt
YWdlICAgKmlucHV0S2VybmVsTWF0cml4OworICAgIE5TTnVtYmVyICAqaW5wdXREaXZpc29yOwor
ICAgIE5TTnVtYmVyICAqaW5wdXRCaWFzOworfQorQGVuZApJbmRleDogZGV2aWNlL3F1YXJ0ei9m
aWx0ZXJzL1dLQ29udm9sdmVNYXRyaXhGaWx0ZXIubQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiBkZXZp
Y2UvcXVhcnR6L2ZpbHRlcnMvV0tDb252b2x2ZU1hdHJpeEZpbHRlci5tCmRpZmYgLU4gZGV2aWNl
L3F1YXJ0ei9maWx0ZXJzL1dLQ29udm9sdmVNYXRyaXhGaWx0ZXIubQotLS0gZGV2aWNlL3F1YXJ0
ei9maWx0ZXJzL1dLQ29udm9sdmVNYXRyaXhGaWx0ZXIubQkxIEphbiAxOTcwIDAwOjAwOjAwIC0w
MDAwCisrKyBkZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tDb252b2x2ZU1hdHJpeEZpbHRlci5tCTgg
T2N0IDIwMDUgMDg6NDY6MzMgLTAwMDAKQEAgLTAsMCArMSw5MyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAwNSBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVS
LCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIs
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2ltcG9ydCAiV0tDb252b2x2ZU1hdHJpeEZpbHRlci5oIgorCitzdGF0aWMgQ0lLZXJu
ZWwgKmNvbnZvbHZlTWF0cml4S2VybmVsID0gbmlsOworCitAaW1wbGVtZW50YXRpb24gV0tDb252
b2x2ZU1hdHJpeEZpbHRlcgorCisrICh2b2lkKWluaXRpYWxpemUKK3sKKyAgICBbQ0lGaWx0ZXIg
cmVnaXN0ZXJGaWx0ZXJOYW1lOkAiV0tDb252b2x2ZU1hdHJpeCIgIAorICAgICAgICBjb25zdHJ1
Y3Rvcjogc2VsZgorICAgICAgICBjbGFzc0F0dHJpYnV0ZXM6IFtOU0RpY3Rpb25hcnkgZGljdGlv
bmFyeVdpdGhPYmplY3RzQW5kS2V5czoKKyAgICAgICAgIEAiV2ViS2l0IENvbnZvbHZlIE1hdHJp
eCIsIGtDSUF0dHJpYnV0ZUZpbHRlckRpc3BsYXlOYW1lLAorICAgICAgICBbTlNBcnJheSBhcnJh
eVdpdGhPYmplY3RzOiBrQ0lDYXRlZ29yeUJsdXIsIGtDSUNhdGVnb3J5VmlkZW8sCisgICAgICAg
ICAgICBrQ0lDYXRlZ29yeVN0aWxsSW1hZ2UsIGtDSUNhdGVnb3J5Tm9uU3F1YXJlUGl4ZWxzLG5p
bF0sIGtDSUF0dHJpYnV0ZUZpbHRlckNhdGVnb3JpZXMsCisgICAgICAgIFtOU0RpY3Rpb25hcnkg
ZGljdGlvbmFyeVdpdGhPYmplY3RzQW5kS2V5czoKKyAgICAgICAgICAgIGtDSUF0dHJpYnV0ZVR5
cGVHcmFkaWVudCwga0NJQXR0cmlidXRlVHlwZSwKKyAgICAgICAgICAgIG5pbF0sIEAiaW5wdXRL
ZXJuZWxNYXRyaXgiLAorICAgICAgICBbTlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnlXaXRoT2JqZWN0
c0FuZEtleXM6CisgICAgICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aERvdWJsZTowLjBdLCBr
Q0lBdHRyaWJ1dGVNaW4sCisgICAgICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aERvdWJsZTox
LjBdLCBrQ0lBdHRyaWJ1dGVEZWZhdWx0LAorICAgICAgICAgICAgW05TTnVtYmVyIG51bWJlcldp
dGhEb3VibGU6MS4wXSwga0NJQXR0cmlidXRlSWRlbnRpdHksCisgICAgICAgICAgICBrQ0lBdHRy
aWJ1dGVUeXBlU2NhbGFyLCBrQ0lBdHRyaWJ1dGVUeXBlLAorICAgICAgICAgICAgbmlsXSwgQCJp
bnB1dERpdmlzb3IiLAorICAgICAgICBbTlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnlXaXRoT2JqZWN0
c0FuZEtleXM6CisgICAgICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aERvdWJsZTowLjBdLCBr
Q0lBdHRyaWJ1dGVEZWZhdWx0LAorICAgICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhEb3Vi
bGU6MC4wXSwga0NJQXR0cmlidXRlSWRlbnRpdHksCisgICAgICAgICAgICBrQ0lBdHRyaWJ1dGVU
eXBlU2NhbGFyLCBrQ0lBdHRyaWJ1dGVUeXBlLAorICAgICAgICAgICAgbmlsXSwgQCJpbnB1dEJp
YXMiLAorICAgICAgICBuaWxdXTsKK30KKworKyAoQ0lGaWx0ZXIgKilmaWx0ZXJXaXRoTmFtZToo
TlNTdHJpbmcgKiluYW1lCit7CisgICAgQ0lGaWx0ZXIgKmZpbHRlcjsKKyAgICBmaWx0ZXIgPSBb
W3NlbGYgYWxsb2NdIGluaXRdOworICAgIHJldHVybiBbZmlsdGVyIGF1dG9yZWxlYXNlXTsKK30K
KworLSAoaWQpaW5pdAoreworICAgIGlmKCFjb252b2x2ZU1hdHJpeEtlcm5lbCkgeworICAgICAg
ICBOU0J1bmRsZSAqYnVuZGxlID0gW05TQnVuZGxlIGJ1bmRsZUZvckNsYXNzOltzZWxmIGNsYXNz
XV07CisgICAgICAgIE5TU3RyaW5nICprZXJuZWxGaWxlID0gW2J1bmRsZSBwYXRoRm9yUmVzb3Vy
Y2U6QCJXS0NvbnZvbHZlTWF0cml4RmlsdGVyIiBvZlR5cGU6QCJjaWtlcm5lbCJdOworICAgICAg
ICBOU1N0cmluZyAqY29kZSA9IFtOU1N0cmluZyBzdHJpbmdXaXRoQ29udGVudHNPZkZpbGU6a2Vy
bmVsRmlsZV07CisgICAgICAgIE5TQXJyYXkgKmtlcm5lbHMgPSBbQ0lLZXJuZWwga2VybmVsc1dp
dGhTdHJpbmc6Y29kZV07CisgICAgICAgIGNvbnZvbHZlTWF0cml4S2VybmVsID0gW1trZXJuZWxz
IG9iamVjdEF0SW5kZXg6MF0gcmV0YWluXTsKKyAgICB9CisgICAgcmV0dXJuIFtzdXBlciBpbml0
XTsKK30KKworLSAoQ0lJbWFnZSAqKW91dHB1dEltYWdlCit7CisgICAgLy8gRklYTUUsIEkgZG9u
J3QgdGhpbmsgdGhpcyBpcyByaWdodCB5ZXQuLi4KKyAgICBDSVNhbXBsZXIgKmltYWdlID0gW0NJ
U2FtcGxlciBzYW1wbGVyV2l0aEltYWdlOmlucHV0SW1hZ2VdOworICAgIENJU2FtcGxlciAqa2Vy
bmVsTWF0cml4ID0gW0NJU2FtcGxlciBzYW1wbGVyV2l0aEltYWdlOmlucHV0S2VybmVsTWF0cml4
XTsKKyAgICByZXR1cm4gW3NlbGYgYXBwbHk6Y29udm9sdmVNYXRyaXhLZXJuZWwsIGltYWdlLCBr
ZXJuZWxNYXRyaXgsIGlucHV0RGl2aXNvciwKKyAgICAgICAgaW5wdXRCaWFzLCBrQ0lBcHBseU9w
dGlvbkRlZmluaXRpb24sIFtpbWFnZSBkZWZpbml0aW9uXSwgbmlsXTsKK30KKworLSAoQ0dSZWN0
KXJlZ2lvbk9mOihpbnQpc2FtcGxlckluZGV4IGRlc3RSZWN0OihDR1JlY3QpcgoreworICAgIC8v
IFRoaXMgaXMgZ29ubmEgYmUgc2xvb29vdy4KKyAgICBDR1JlY3QgZXh0ZW50ID0gW2lucHV0S2Vy
bmVsTWF0cml4IGV4dGVudF07CisgICAgQ0dTaXplIHNpemUgPSBleHRlbnQuc2l6ZTsKKyAgICBy
ZXR1cm4gQ0dSZWN0SW5zZXQociwgLTEgKiBzaXplLndpZHRoLCAtMSAqIHNpemUuaGVpZ2h0KTsK
K30KKworQGVuZApJbmRleDogZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL1dLRGlmZnVzZUxpZ2h0aW5n
RmlsdGVyLmNpa2VybmVsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IGRldmljZS9xdWFydHovZmlsdGVy
cy9XS0RpZmZ1c2VMaWdodGluZ0ZpbHRlci5jaWtlcm5lbApkaWZmIC1OIGRldmljZS9xdWFydHov
ZmlsdGVycy9XS0RpZmZ1c2VMaWdodGluZ0ZpbHRlci5jaWtlcm5lbApJbmRleDogZGV2aWNlL3F1
YXJ0ei9maWx0ZXJzL1dLRGlmZnVzZUxpZ2h0aW5nRmlsdGVyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmls
ZTogZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL1dLRGlmZnVzZUxpZ2h0aW5nRmlsdGVyLmgKZGlmZiAt
TiBkZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tEaWZmdXNlTGlnaHRpbmdGaWx0ZXIuaAotLS0gZGV2
aWNlL3F1YXJ0ei9maWx0ZXJzL1dLRGlmZnVzZUxpZ2h0aW5nRmlsdGVyLmgJMSBKYW4gMTk3MCAw
MDowMDowMCAtMDAwMAorKysgZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL1dLRGlmZnVzZUxpZ2h0aW5n
RmlsdGVyLmgJOCBPY3QgMjAwNSAwODo0NjozMyAtMDAwMApAQCAtMCwwICsxLDM2IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA1IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaW1wb3J0IDxRdWFydHpDb3JlL0NvcmVJbWFnZS5oPgorCitAaW50
ZXJmYWNlIFdLRGlmZnVzZUxpZ2h0aW5nRmlsdGVyIDogQ0lGaWx0ZXIgeworICAgIENJSW1hZ2Ug
KmlucHV0SW1hZ2U7CisgICAgQ0lJbWFnZSAqaW5wdXRMaWdodFNvdXJjZTsKKyAgICBDSUNvbG9y
ICppbnB1dExpZ2h0aW5nQ29sb3I7CisgICAgTlNOdW1iZXIgKmlucHV0U3VyZmFjZVNjYWxlOwor
ICAgIE5TTnVtYmVyICppbnB1dERpZmZ1c2VDb25zdGFudDsKKyAgICBDSVZlY3RvciAqaW5wdXRL
ZXJuZWxVbml0TGVuZ3RoOworfQorQGVuZApJbmRleDogZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL1dL
RGlmZnVzZUxpZ2h0aW5nRmlsdGVyLm0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogZGV2aWNlL3F1YXJ0
ei9maWx0ZXJzL1dLRGlmZnVzZUxpZ2h0aW5nRmlsdGVyLm0KZGlmZiAtTiBkZXZpY2UvcXVhcnR6
L2ZpbHRlcnMvV0tEaWZmdXNlTGlnaHRpbmdGaWx0ZXIubQotLS0gZGV2aWNlL3F1YXJ0ei9maWx0
ZXJzL1dLRGlmZnVzZUxpZ2h0aW5nRmlsdGVyLm0JMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMAor
KysgZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL1dLRGlmZnVzZUxpZ2h0aW5nRmlsdGVyLm0JOCBPY3Qg
MjAwNSAwODo0NjozMyAtMDAwMApAQCAtMCwwICsxLDg4IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA1IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaW1wb3J0ICJXS0RpZmZ1c2VMaWdodGluZ0ZpbHRlci5oIgorCitzdGF0aWMgQ0lLZXJuZWwg
KmRpZmZ1c2VMaWdodGluZ0ZpbHRlciA9IG5pbDsKKworQGltcGxlbWVudGF0aW9uIFdLRGlmZnVz
ZUxpZ2h0aW5nRmlsdGVyCisKKysgKHZvaWQpaW5pdGlhbGl6ZQoreworICAgIFtDSUZpbHRlciBy
ZWdpc3RlckZpbHRlck5hbWU6QCJXS0RpZmZ1c2VMaWdodGluZyIgIAorICAgICAgICBjb25zdHJ1
Y3RvcjpzZWxmCisgICAgICAgIGNsYXNzQXR0cmlidXRlczpbTlNEaWN0aW9uYXJ5IGRpY3Rpb25h
cnlXaXRoT2JqZWN0c0FuZEtleXM6CisgICAgICAgICBAIldlYktpdCBEaWZmdXNlIExpZ2h0aW5n
Iiwga0NJQXR0cmlidXRlRmlsdGVyRGlzcGxheU5hbWUsCisgICAgICAgIFtOU0FycmF5IGFycmF5
V2l0aE9iamVjdHM6IGtDSUNhdGVnb3J5U3R5bGl6ZSwga0NJQ2F0ZWdvcnlWaWRlbywKKyAgICAg
ICAgICAgIGtDSUNhdGVnb3J5U3RpbGxJbWFnZSwga0NJQ2F0ZWdvcnlOb25TcXVhcmVQaXhlbHMs
bmlsXSwga0NJQXR0cmlidXRlRmlsdGVyQ2F0ZWdvcmllcywKKyAgICAgICAgW05TRGljdGlvbmFy
eSBkaWN0aW9uYXJ5V2l0aE9iamVjdHNBbmRLZXlzOgorICAgICAgICAgICAgW0NJQ29sb3IgY29s
b3JXaXRoUmVkOjEuMCBncmVlbjoxLjAgYmx1ZToxLjAgYWxwaGE6MS4wXSwKKyAgICAgICAgICAg
ICBrQ0lBdHRyaWJ1dGVEZWZhdWx0LCBuaWxdLCBAImlucHV0TGlnaHRpbmdDb2xvciIsCisgICAg
ICAgIFtOU0RpY3Rpb25hcnkgZGljdGlvbmFyeVdpdGhPYmplY3RzQW5kS2V5czoKKyAgICAgICAg
ICAgIFtOU051bWJlciBudW1iZXJXaXRoRG91YmxlOjAuMF0sIGtDSUF0dHJpYnV0ZU1pbiwKKyAg
ICAgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoRG91YmxlOjEuMF0sIGtDSUF0dHJpYnV0ZURl
ZmF1bHQsCisgICAgICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aERvdWJsZToxLjBdLCBrQ0lB
dHRyaWJ1dGVJZGVudGl0eSwKKyAgICAgICAgICAgIGtDSUF0dHJpYnV0ZVR5cGVTY2FsYXIsIGtD
SUF0dHJpYnV0ZVR5cGUsCisgICAgICAgICAgICBuaWxdLCBAImlucHV0U3VyZmFjZVNjYWxlIiwK
KyAgICAgICAgW05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVjdHNBbmRLZXlzOgorICAg
ICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhEb3VibGU6MC4wXSwga0NJQXR0cmlidXRlTWlu
LAorICAgICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhEb3VibGU6MS4wXSwga0NJQXR0cmli
dXRlRGVmYXVsdCwKKyAgICAgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoRG91YmxlOjEuMF0s
IGtDSUF0dHJpYnV0ZUlkZW50aXR5LAorICAgICAgICAgICAga0NJQXR0cmlidXRlVHlwZVNjYWxh
ciwga0NJQXR0cmlidXRlVHlwZSwKKyAgICAgICAgICAgIG5pbF0sIEAiaW5wdXREaWZmdXNlQ29u
c3RhbnQiLAorICAgICAgICBbTlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnlXaXRoT2JqZWN0c0FuZEtl
eXM6CisgICAgICAgICAgICBrQ0lBdHRyaWJ1dGVUeXBlT2Zmc2V0LCBrQ0lBdHRyaWJ1dGVUeXBl
LAorICAgICAgICAgICAgbmlsXSwgQCJpbnB1dEtlcm5lbFVuaXRMZW5ndGgiLAorICAgICAgICBu
aWxdXTsKK30KKworKyAoQ0lGaWx0ZXIgKilmaWx0ZXJXaXRoTmFtZTooTlNTdHJpbmcgKiluYW1l
Cit7CisgICAgQ0lGaWx0ZXIgKmZpbHRlcjsKKyAgICBmaWx0ZXIgPSBbW3NlbGYgYWxsb2NdIGlu
aXRdOworICAgIHJldHVybiBbZmlsdGVyIGF1dG9yZWxlYXNlXTsKK30KKworLSAoaWQpaW5pdAor
eworICAgIGlmKCFkaWZmdXNlTGlnaHRpbmdGaWx0ZXIpIHsKKyAgICAgICAgTlNCdW5kbGUgKmJ1
bmRsZSA9IFtOU0J1bmRsZSBidW5kbGVGb3JDbGFzczpbc2VsZiBjbGFzc11dOworICAgICAgICBO
U1N0cmluZyAqa2VybmVsRmlsZSA9IFtidW5kbGUgcGF0aEZvclJlc291cmNlOkAiV0tEaWZmdXNl
TGlnaHRpbmdGaWx0ZXIiIG9mVHlwZTpAImNpa2VybmVsIl07CisgICAgICAgIE5TU3RyaW5nICpj
b2RlID0gW05TU3RyaW5nIHN0cmluZ1dpdGhDb250ZW50c09mRmlsZTprZXJuZWxGaWxlXTsKKyAg
ICAgICAgTlNBcnJheSAqa2VybmVscyA9IFtDSUtlcm5lbCBrZXJuZWxzV2l0aFN0cmluZzpjb2Rl
XTsKKyAgICAgICAgZGlmZnVzZUxpZ2h0aW5nRmlsdGVyID0gW1trZXJuZWxzIG9iamVjdEF0SW5k
ZXg6MF0gcmV0YWluXTsKKyAgICB9CisgICAgcmV0dXJuIFtzdXBlciBpbml0XTsKK30KKworLSAo
Q0lJbWFnZSAqKW91dHB1dEltYWdlCit7CisgICAgcmV0dXJuIFtzZWxmIGFwcGx5OmRpZmZ1c2VM
aWdodGluZ0ZpbHRlciwgaW5wdXRMaWdodGluZ0NvbG9yLCBpbnB1dFN1cmZhY2VTY2FsZSwgaW5w
dXREaWZmdXNlQ29uc3RhbnQsCisgICAgICAgIGlucHV0S2VybmVsVW5pdExlbmd0aCwgbmlsXTsK
K30KKworQGVuZAorCisKSW5kZXg6IGRldmljZS9xdWFydHovZmlsdGVycy9XS0Rpc3RhbnRMaWdo
dEZpbHRlci5jaWtlcm5lbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiBkZXZpY2UvcXVhcnR6L2ZpbHRl
cnMvV0tEaXN0YW50TGlnaHRGaWx0ZXIuY2lrZXJuZWwKZGlmZiAtTiBkZXZpY2UvcXVhcnR6L2Zp
bHRlcnMvV0tEaXN0YW50TGlnaHRGaWx0ZXIuY2lrZXJuZWwKSW5kZXg6IGRldmljZS9xdWFydHov
ZmlsdGVycy9XS0Rpc3RhbnRMaWdodEZpbHRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IGRldmlj
ZS9xdWFydHovZmlsdGVycy9XS0Rpc3RhbnRMaWdodEZpbHRlci5oCmRpZmYgLU4gZGV2aWNlL3F1
YXJ0ei9maWx0ZXJzL1dLRGlzdGFudExpZ2h0RmlsdGVyLmgKLS0tIGRldmljZS9xdWFydHovZmls
dGVycy9XS0Rpc3RhbnRMaWdodEZpbHRlci5oCTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAKKysr
IGRldmljZS9xdWFydHovZmlsdGVycy9XS0Rpc3RhbnRMaWdodEZpbHRlci5oCTggT2N0IDIwMDUg
MDg6NDY6MzMgLTAwMDAKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
NSBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lt
cG9ydCA8UXVhcnR6Q29yZS9Db3JlSW1hZ2UuaD4KKworQGludGVyZmFjZSBXS0Rpc3RhbnRMaWdo
dEZpbHRlciA6IENJRmlsdGVyIHsKKyAgICBOU051bWJlciAqaW5wdXRBemltdXRoOworICAgIE5T
TnVtYmVyICppbnB1dEVsZXZhdGlvbjsKK30KK0BlbmQKSW5kZXg6IGRldmljZS9xdWFydHovZmls
dGVycy9XS0Rpc3RhbnRMaWdodEZpbHRlci5tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IGRldmljZS9x
dWFydHovZmlsdGVycy9XS0Rpc3RhbnRMaWdodEZpbHRlci5tCmRpZmYgLU4gZGV2aWNlL3F1YXJ0
ei9maWx0ZXJzL1dLRGlzdGFudExpZ2h0RmlsdGVyLm0KLS0tIGRldmljZS9xdWFydHovZmlsdGVy
cy9XS0Rpc3RhbnRMaWdodEZpbHRlci5tCTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAKKysrIGRl
dmljZS9xdWFydHovZmlsdGVycy9XS0Rpc3RhbnRMaWdodEZpbHRlci5tCTggT2N0IDIwMDUgMDg6
NDY6MzMgLTAwMDAKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBB
cHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKyAKKyNpbXBv
cnQgIldLRGlzdGFudExpZ2h0RmlsdGVyLmgiCisKK3N0YXRpYyBDSUtlcm5lbCAqZGlzdGFudExp
Z2h0RmlsdGVyID0gbmlsOworCitAaW1wbGVtZW50YXRpb24gV0tEaXN0YW50TGlnaHRGaWx0ZXIK
KworKyAodm9pZClpbml0aWFsaXplCit7CisgICAgW0NJRmlsdGVyIHJlZ2lzdGVyRmlsdGVyTmFt
ZTpAIldLRGlzdGFudExpZ2h0IgorICAgICAgICBjb25zdHJ1Y3Rvcjogc2VsZgorICAgICAgICBj
bGFzc0F0dHJpYnV0ZXM6IFtOU0RpY3Rpb25hcnkgZGljdGlvbmFyeVdpdGhPYmplY3RzQW5kS2V5
czoKKyAgICAgICAgIEAiV2ViS2l0IERpc3RhbnQgTGlnaHQiLCBrQ0lBdHRyaWJ1dGVGaWx0ZXJE
aXNwbGF5TmFtZSwKKyAgICAgICAgW05TQXJyYXkgYXJyYXlXaXRoT2JqZWN0czoga0NJQ2F0ZWdv
cnlTdHlsaXplLCBrQ0lDYXRlZ29yeVZpZGVvLAorICAgICAgICAgICAga0NJQ2F0ZWdvcnlTdGls
bEltYWdlLCBrQ0lDYXRlZ29yeU5vblNxdWFyZVBpeGVscyxuaWxdLCBrQ0lBdHRyaWJ1dGVGaWx0
ZXJDYXRlZ29yaWVzLAorICAgICAgICBbTlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnlXaXRoT2JqZWN0
c0FuZEtleXM6CisgICAgICAgICAgICBrQ0lBdHRyaWJ1dGVUeXBlQW5nbGUsIGtDSUF0dHJpYnV0
ZVR5cGUsCisgICAgICAgICAgICBuaWxdLCBAImlucHV0QXppbXV0aCIsCisgICAgICAgIFtOU0Rp
Y3Rpb25hcnkgZGljdGlvbmFyeVdpdGhPYmplY3RzQW5kS2V5czoKKyAgICAgICAgICAgIGtDSUF0
dHJpYnV0ZVR5cGVBbmdsZSwga0NJQXR0cmlidXRlVHlwZSwKKyAgICAgICAgICAgIG5pbF0sIEAi
aW5wdXRFbGV2YXRpb24iLAorICAgICAgICBuaWxdXTsKK30KKworKyAoQ0lGaWx0ZXIgKilmaWx0
ZXJXaXRoTmFtZTooTlNTdHJpbmcgKiluYW1lCit7CisgICAgQ0lGaWx0ZXIgKmZpbHRlcjsKKyAg
ICBmaWx0ZXIgPSBbW3NlbGYgYWxsb2NdIGluaXRdOworICAgIHJldHVybiBbZmlsdGVyIGF1dG9y
ZWxlYXNlXTsKK30KKworLSAoaWQpaW5pdAoreworICAgIGlmKCFkaXN0YW50TGlnaHRGaWx0ZXIp
IHsKKyAgICAgICAgTlNCdW5kbGUgKmJ1bmRsZSA9IFtOU0J1bmRsZSBidW5kbGVGb3JDbGFzczpb
c2VsZiBjbGFzc11dOworICAgICAgICBOU1N0cmluZyAqa2VybmVsRmlsZSA9IFtidW5kbGUgcGF0
aEZvclJlc291cmNlOkAiV0tEaXN0YW50TGlnaHRGaWx0ZXIiIG9mVHlwZTpAImNpa2VybmVsIl07
CisgICAgICAgIE5TU3RyaW5nICpjb2RlID0gW05TU3RyaW5nIHN0cmluZ1dpdGhDb250ZW50c09m
RmlsZTprZXJuZWxGaWxlXTsKKyAgICAgICAgTlNBcnJheSAqa2VybmVscyA9IFtDSUtlcm5lbCBr
ZXJuZWxzV2l0aFN0cmluZzpjb2RlXTsKKyAgICAgICAgZGlzdGFudExpZ2h0RmlsdGVyID0gW1tr
ZXJuZWxzIG9iamVjdEF0SW5kZXg6MF0gcmV0YWluXTsKKyAgICB9CisgICAgcmV0dXJuIFtzdXBl
ciBpbml0XTsKK30KKworLSAoQ0lJbWFnZSAqKW91dHB1dEltYWdlCit7CisgICAgcmV0dXJuIFtz
ZWxmIGFwcGx5OmRpc3RhbnRMaWdodEZpbHRlciwgaW5wdXRBemltdXRoLCBpbnB1dEVsZXZhdGlv
biwgbmlsXTsKK30KKworQGVuZApJbmRleDogZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL1dLTm9ybWFs
TWFwRmlsdGVyLmNpa2VybmVsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IGRldmljZS9xdWFydHovZmls
dGVycy9XS05vcm1hbE1hcEZpbHRlci5jaWtlcm5lbApkaWZmIC1OIGRldmljZS9xdWFydHovZmls
dGVycy9XS05vcm1hbE1hcEZpbHRlci5jaWtlcm5lbAotLS0gZGV2aWNlL3F1YXJ0ei9maWx0ZXJz
L1dLTm9ybWFsTWFwRmlsdGVyLmNpa2VybmVsCTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAKKysr
IGRldmljZS9xdWFydHovZmlsdGVycy9XS05vcm1hbE1hcEZpbHRlci5jaWtlcm5lbAk4IE9jdCAy
MDA1IDA4OjQ2OjMzIC0wMDAwCkBAIC0wLDAgKzEsMjUgQEAKK2tlcm5lbCB2ZWM0IGNvbnZvbHZl
KHNhbXBsZXIgaW1hZ2UsICBmbG9hdCBkaXZpc29yLCBmbG9hdCBiaWFzLAorCQkJZmxvYXQgbTAw
LCBmbG9hdCBtMDEsIGZsb2F0IG0wMiwKKwkJCWZsb2F0IG0xMCwgZmxvYXQgbTExLCBmbG9hdCBt
MTIsCisJCQlmbG9hdCBtMjAsIGZsb2F0IG0yMSwgZmxvYXQgbTIyKQoreworICAgIHZlYzQgY29s
b3VyPXZlYzQoMC4wLCAwLjAsIDAuMCwgMC4wKTsKKyAgICB2ZWMyIHBvcz1zYW1wbGVyQ29vcmQo
aW1hZ2UpOworICAgIGNvbG91cj1zYW1wbGUoaW1hZ2UsIHBvcyt2ZWMyKC0xLC0xKSkqbTAwOwor
ICAgIGNvbG91cis9c2FtcGxlKGltYWdlLCBwb3MrdmVjMigtMSwgMC4wKSkqbTAxOworICAgIGNv
bG91cis9c2FtcGxlKGltYWdlLCBwb3MrdmVjMigtMSwgMSkpKm0wMjsKKyAgICBjb2xvdXIrPXNh
bXBsZShpbWFnZSwgcG9zK3ZlYzIoMCwtMSkpKm0xMDsKKyAgICBjb2xvdXIrPXNhbXBsZShpbWFn
ZSwgcG9zKSptMTE7CisgICAgY29sb3VyKz1zYW1wbGUoaW1hZ2UsIHBvcyt2ZWMyKDAsIDEuMCkp
Km0xMjsKKyAgICBjb2xvdXIrPXNhbXBsZShpbWFnZSwgcG9zK3ZlYzIoMSwtMSkpKm0yMDsKKyAg
ICBjb2xvdXIrPXNhbXBsZShpbWFnZSwgcG9zK3ZlYzIoMSwgMC4wKSkqbTIxOworICAgIGNvbG91
cis9c2FtcGxlKGltYWdlLCBwb3MrdmVjMigxLCAxKSkqbTIyOworICAgIHJldHVybiAoKChjb2xv
dXIvZGl2aXNvcikrYmlhcykpOworfQorCitrZXJuZWwgdmVjNCBtZXJnZU5vcm1hbHMoc2FtcGxl
ciBOeCwgc2FtcGxlciBOeSwgc2FtcGxlciBzcmMsIGZsb2F0IHN1cmZhY2VTY2FsZSkKK3sKKyAg
ICB2ZWMzIE49dmVjMyhzYW1wbGUoTngsIHNhbXBsZXJDb29yZChOeCkpLmEqIHN1cmZhY2VTY2Fs
ZSwgc2FtcGxlKE55LCBzYW1wbGVyQ29vcmQoTnkpKS5hKiBzdXJmYWNlU2NhbGUsIDEuMCk7Cisg
ICAgTiA9IE4vc3FydChkb3QoTixOKSk7CisgICAgcmV0dXJuIHZlYzQoTi54LCBOLnksIE4ueiwg
c2FtcGxlKHNyYywgc2FtcGxlckNvb3JkKHNyYykpLmEpOworfQpcIE5vIG5ld2xpbmUgYXQgZW5k
IG9mIGZpbGUKSW5kZXg6IGRldmljZS9xdWFydHovZmlsdGVycy9XS05vcm1hbE1hcEZpbHRlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KUkNTIGZpbGU6IGRldmljZS9xdWFydHovZmlsdGVycy9XS05vcm1hbE1hcEZp
bHRlci5oCmRpZmYgLU4gZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL1dLTm9ybWFsTWFwRmlsdGVyLmgK
LS0tIGRldmljZS9xdWFydHovZmlsdGVycy9XS05vcm1hbE1hcEZpbHRlci5oCTEgSmFuIDE5NzAg
MDA6MDA6MDAgLTAwMDAKKysrIGRldmljZS9xdWFydHovZmlsdGVycy9XS05vcm1hbE1hcEZpbHRl
ci5oCTggT2N0IDIwMDUgMDg6NDY6MzMgLTAwMDAKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwNSBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENP
TVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09N
UFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2ltcG9ydCA8UXVhcnR6Q29yZS9Db3JlSW1hZ2UuaD4KKworQGludGVyZmFj
ZSBXS05vcm1hbE1hcEZpbHRlciA6IENJRmlsdGVyIHsKKyAgICBDSUltYWdlICppbnB1dEltYWdl
OworICAgIE5TTnVtYmVyICppbnB1dFN1cmZhY2VTY2FsZTsKK30KK0BlbmQKKwpJbmRleDogZGV2
aWNlL3F1YXJ0ei9maWx0ZXJzL1dLTm9ybWFsTWFwRmlsdGVyLm0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmls
ZTogZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL1dLTm9ybWFsTWFwRmlsdGVyLm0KZGlmZiAtTiBkZXZp
Y2UvcXVhcnR6L2ZpbHRlcnMvV0tOb3JtYWxNYXBGaWx0ZXIubQotLS0gZGV2aWNlL3F1YXJ0ei9m
aWx0ZXJzL1dLTm9ybWFsTWFwRmlsdGVyLm0JMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMAorKysg
ZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL1dLTm9ybWFsTWFwRmlsdGVyLm0JOCBPY3QgMjAwNSAwODo0
NjozMyAtMDAwMApAQCAtMCwwICsxLDk4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1IEFw
cGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW1wb3J0
ICJXS05vcm1hbE1hcEZpbHRlci5oIgorCitzdGF0aWMgQ0lLZXJuZWwgKmNvbnZvbHZlS2VybmVs
ID0gbmlsOworc3RhdGljIENJS2VybmVsICpub3JtYWxNYXBLZXJuZWwgPSBuaWw7CisKK0BpbXBs
ZW1lbnRhdGlvbiBXS05vcm1hbE1hcEZpbHRlcgorCisrICh2b2lkKWluaXRpYWxpemUKK3sKKyAg
ICBbQ0lGaWx0ZXIgcmVnaXN0ZXJGaWx0ZXJOYW1lOkAiV0tOb3JtYWxNYXAiCisgICAgICAgIGNv
bnN0cnVjdG9yOnNlbGYKKyAgICAgICAgY2xhc3NBdHRyaWJ1dGVzOltOU0RpY3Rpb25hcnkgZGlj
dGlvbmFyeVdpdGhPYmplY3RzQW5kS2V5czoKKyAgICAgICAgIEAiV2ViS2l0IE5vcm1hbCBNYXAi
LCBrQ0lBdHRyaWJ1dGVGaWx0ZXJEaXNwbGF5TmFtZSwKKyAgICAgICAgW05TQXJyYXkgYXJyYXlX
aXRoT2JqZWN0czoga0NJQ2F0ZWdvcnlCbHVyLCBrQ0lDYXRlZ29yeVZpZGVvLAorICAgICAgICAg
ICAga0NJQ2F0ZWdvcnlTdGlsbEltYWdlLCBrQ0lDYXRlZ29yeU5vblNxdWFyZVBpeGVscywgbmls
XSwga0NJQXR0cmlidXRlRmlsdGVyQ2F0ZWdvcmllcywKKyAgICAgICAgbmlsXV07Cit9CisKKysg
KENJRmlsdGVyICopZmlsdGVyV2l0aE5hbWU6KE5TU3RyaW5nICopbmFtZQoreworICAgIENJRmls
dGVyICpmaWx0ZXI7CisgICAgZmlsdGVyID0gW1tzZWxmIGFsbG9jXSBpbml0XTsKKyAgICByZXR1
cm4gW2ZpbHRlciBhdXRvcmVsZWFzZV07Cit9CisKKy0gKGlkKWluaXQKK3sKKyAgICBpZighbm9y
bWFsTWFwS2VybmVsKSB7CisgICAgICAgIE5TQnVuZGxlICpidW5kbGUgPSBbTlNCdW5kbGUgYnVu
ZGxlRm9yQ2xhc3M6W3NlbGYgY2xhc3NdXTsKKyAgICAgICAgTlNTdHJpbmcgKmtlcm5lbEZpbGUg
PSBbYnVuZGxlIHBhdGhGb3JSZXNvdXJjZTpAIldLTm9ybWFsTWFwRmlsdGVyIiBvZlR5cGU6QCJj
aWtlcm5lbCJdOworICAgICAgICBOU1N0cmluZyAqY29kZSA9IFtOU1N0cmluZyBzdHJpbmdXaXRo
Q29udGVudHNPZkZpbGU6a2VybmVsRmlsZV07CisgICAgICAgIE5TQXJyYXkgKmtlcm5lbHMgPSBb
Q0lLZXJuZWwga2VybmVsc1dpdGhTdHJpbmc6Y29kZV07CisgICAgICAgIGNvbnZvbHZlS2VybmVs
ID0gW1trZXJuZWxzIG9iamVjdEF0SW5kZXg6MF0gcmV0YWluXTsKKyAgICAgICAgbm9ybWFsTWFw
S2VybmVsID0gW1trZXJuZWxzIG9iamVjdEF0SW5kZXg6MV0gcmV0YWluXTsKKyAgICB9CisgICAg
cmV0dXJuIFtzdXBlciBpbml0XTsKK30KKworLSAoTlNBcnJheSAqKXhDb252b2x2ZUFyZ3Mgewor
ICAgIHJldHVybiBbTlNBcnJheSBhcnJheVdpdGhPYmplY3RzOgorICAgICAgICBbTlNOdW1iZXIg
bnVtYmVyV2l0aEZsb2F0OjRdLAorICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aEZsb2F0OjBd
LAorICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aEZsb2F0OjFdLCBbTlNOdW1iZXIgbnVtYmVy
V2l0aEZsb2F0OjJdLCBbTlNOdW1iZXIgbnVtYmVyV2l0aEZsb2F0OjFdLAorICAgICAgICBbTlNO
dW1iZXIgbnVtYmVyV2l0aEZsb2F0OjBdLCBbTlNOdW1iZXIgbnVtYmVyV2l0aEZsb2F0OjBdLCBb
TlNOdW1iZXIgbnVtYmVyV2l0aEZsb2F0OjBdLAorICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0
aEZsb2F0Oi0xXSwgW05TTnVtYmVyIG51bWJlcldpdGhGbG9hdDotMl0sIFtOU051bWJlciBudW1i
ZXJXaXRoRmxvYXQ6LTFdLAorICAgICAgICBuaWxdOworfQorCistIChOU0FycmF5ICopeUNvbnZv
bHZlQXJncyB7CisgICAgcmV0dXJuIFtOU0FycmF5IGFycmF5V2l0aE9iamVjdHM6CisgICAgICAg
IFtOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6NF0sCisgICAgICAgIFtOU051bWJlciBudW1iZXJX
aXRoRmxvYXQ6MF0sCisgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6MV0sIFtOU051
bWJlciBudW1iZXJXaXRoRmxvYXQ6MF0sIFtOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6LTFdLAor
ICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aEZsb2F0OjJdLCBbTlNOdW1iZXIgbnVtYmVyV2l0
aEZsb2F0OjBdLCBbTlNOdW1iZXIgbnVtYmVyV2l0aEZsb2F0Oi0yXSwKKyAgICAgICAgW05TTnVt
YmVyIG51bWJlcldpdGhGbG9hdDoxXSwgW05TTnVtYmVyIG51bWJlcldpdGhGbG9hdDowXSwgW05T
TnVtYmVyIG51bWJlcldpdGhGbG9hdDotMV0sCisgICAgICAgIG5pbF07Cit9CisKKy0gKENJSW1h
Z2UgKilvdXRwdXRJbWFnZQoreworICAgIENJU2FtcGxlciAqaW1hZ2UgPSBbQ0lTYW1wbGVyIHNh
bXBsZXJXaXRoSW1hZ2U6aW5wdXRJbWFnZV07CisgICAgTlNEaWN0aW9uYXJ5ICphcHBseU9wdGlv
bnMgPSBbTlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnlXaXRoT2JqZWN0c0FuZEtleXM6W2ltYWdlIGRl
ZmluaXRpb25dLCBrQ0lBcHBseU9wdGlvbkRlZmluaXRpb24sIG5pbF07CisgICAgCisgICAgQ0lJ
bWFnZSAqY29udm9sdmVYID0gW3NlbGYgYXBwbHk6Y29udm9sdmVLZXJuZWwgYXJndW1lbnRzOltz
ZWxmIHhDb252b2x2ZUFyZ3NdIG9wdGlvbnM6YXBwbHlPcHRpb25zXTsKKyAgICBDSUltYWdlICpj
b252b2x2ZVkgPSBbc2VsZiBhcHBseTpjb252b2x2ZUtlcm5lbCBhcmd1bWVudHM6W3NlbGYgeUNv
bnZvbHZlQXJnc10gb3B0aW9uczphcHBseU9wdGlvbnNdOworICAgIENJU2FtcGxlciAqc2FtcGxl
clggPSBbQ0lTYW1wbGVyIHNhbXBsZXJXaXRoSW1hZ2U6Y29udm9sdmVYXTsKKyAgICBDSVNhbXBs
ZXIgKnNhbXBsZXJZID0gW0NJU2FtcGxlciBzYW1wbGVyV2l0aEltYWdlOmNvbnZvbHZlWV07Cisg
ICAgCisgICAgTlNBcnJheSAqbm9ybWFsTWFwQXJncyA9IFtOU0FycmF5IGFycmF5V2l0aE9iamVj
dHM6c2FtcGxlclgsIHNhbXBsZXJZLCBpbWFnZSwgaW5wdXRTdXJmYWNlU2NhbGVdOworICAgIHJl
dHVybiBbc2VsZiBhcHBseTpub3JtYWxNYXBLZXJuZWwgYXJndW1lbnRzOm5vcm1hbE1hcEFyZ3Mg
b3B0aW9uczphcHBseU9wdGlvbnNdOworfQorCitAZW5kCkluZGV4OiBkZXZpY2UvcXVhcnR6L2Zp
bHRlcnMvV0tQb2ludExpZ2h0RmlsdGVyLmNpa2VybmVsCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IGRl
dmljZS9xdWFydHovZmlsdGVycy9XS1BvaW50TGlnaHRGaWx0ZXIuY2lrZXJuZWwKZGlmZiAtTiBk
ZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tQb2ludExpZ2h0RmlsdGVyLmNpa2VybmVsCkluZGV4OiBk
ZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tQb2ludExpZ2h0RmlsdGVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1Mg
ZmlsZTogZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL1dLUG9pbnRMaWdodEZpbHRlci5oCmRpZmYgLU4g
ZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL1dLUG9pbnRMaWdodEZpbHRlci5oCi0tLSBkZXZpY2UvcXVh
cnR6L2ZpbHRlcnMvV0tQb2ludExpZ2h0RmlsdGVyLmgJMSBKYW4gMTk3MCAwMDowMDowMCAtMDAw
MAorKysgZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL1dLUG9pbnRMaWdodEZpbHRlci5oCTggT2N0IDIw
MDUgMDg6NDY6MzMgLTAwMDAKQEAgLTAsMCArMSwzMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwNSBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2ltcG9ydCA8UXVhcnR6Q29yZS9Db3JlSW1hZ2UuaD4KKworQGludGVyZmFjZSBXS1BvaW50TGln
aHRGaWx0ZXIgOiBDSUZpbHRlciB7CisgICAgQ0lWZWN0b3IgKmlucHV0TGlnaHRQb3NpdGlvbjsK
K30KK0BlbmQKSW5kZXg6IGRldmljZS9xdWFydHovZmlsdGVycy9XS1BvaW50TGlnaHRGaWx0ZXIu
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09ClJDUyBmaWxlOiBkZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tQb2ludExpZ2h0
RmlsdGVyLm0KZGlmZiAtTiBkZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tQb2ludExpZ2h0RmlsdGVy
Lm0KLS0tIGRldmljZS9xdWFydHovZmlsdGVycy9XS1BvaW50TGlnaHRGaWx0ZXIubQkxIEphbiAx
OTcwIDAwOjAwOjAwIC0wMDAwCisrKyBkZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tQb2ludExpZ2h0
RmlsdGVyLm0JOCBPY3QgMjAwNSAwODo0NjozMyAtMDAwMApAQCAtMCwwICsxLDcwIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA1IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworIAorI2ltcG9ydCAiV0tQb2ludExpZ2h0RmlsdGVyLmgiCisKK3N0YXRp
YyBDSUtlcm5lbCAqcG9pbnRMaWdodEZpbHRlciA9IG5pbDsKKworQGltcGxlbWVudGF0aW9uIFdL
UG9pbnRMaWdodEZpbHRlcgorCisrICh2b2lkKWluaXRpYWxpemUKK3sKKyAgICBbQ0lGaWx0ZXIg
cmVnaXN0ZXJGaWx0ZXJOYW1lOkAiV0tQb2ludExpZ2h0IgorICAgICAgICBjb25zdHJ1Y3Rvcjog
c2VsZgorICAgICAgICBjbGFzc0F0dHJpYnV0ZXM6IFtOU0RpY3Rpb25hcnkgZGljdGlvbmFyeVdp
dGhPYmplY3RzQW5kS2V5czoKKyAgICAgICAgIEAiV2ViS2l0IFBvaW50IExpZ2h0Iiwga0NJQXR0
cmlidXRlRmlsdGVyRGlzcGxheU5hbWUsCisgICAgICAgIFtOU0FycmF5IGFycmF5V2l0aE9iamVj
dHM6IGtDSUNhdGVnb3J5U3R5bGl6ZSwga0NJQ2F0ZWdvcnlWaWRlbywKKyAgICAgICAgICAgIGtD
SUNhdGVnb3J5U3RpbGxJbWFnZSwga0NJQ2F0ZWdvcnlOb25TcXVhcmVQaXhlbHMsbmlsXSwga0NJ
QXR0cmlidXRlRmlsdGVyQ2F0ZWdvcmllcywKKyAgICAgICAgW05TRGljdGlvbmFyeSBkaWN0aW9u
YXJ5V2l0aE9iamVjdHNBbmRLZXlzOgorICAgICAgICAgICAga0NJQXR0cmlidXRlVHlwZVBvc2l0
aW9uMywga0NJQXR0cmlidXRlVHlwZSwKKyAgICAgICAgICAgIG5pbF0sIEAiaW5wdXRMaWdodFBv
c2l0aW9uIiwKKyAgICAgICAgbmlsXV07Cit9CisKKysgKENJRmlsdGVyICopZmlsdGVyV2l0aE5h
bWU6KE5TU3RyaW5nICopbmFtZQoreworICAgIENJRmlsdGVyICpmaWx0ZXI7CisgICAgZmlsdGVy
ID0gW1tzZWxmIGFsbG9jXSBpbml0XTsKKyAgICByZXR1cm4gW2ZpbHRlciBhdXRvcmVsZWFzZV07
Cit9CisKKy0gKGlkKWluaXQKK3sKKyAgICBpZighcG9pbnRMaWdodEZpbHRlcikgeworICAgICAg
ICBOU0J1bmRsZSAqYnVuZGxlID0gW05TQnVuZGxlIGJ1bmRsZUZvckNsYXNzOltzZWxmIGNsYXNz
XV07CisgICAgICAgIE5TU3RyaW5nICprZXJuZWxGaWxlID0gW2J1bmRsZSBwYXRoRm9yUmVzb3Vy
Y2U6QCJXS1BvaW50TGlnaHRGaWx0ZXIiIG9mVHlwZTpAImNpa2VybmVsIl07CisgICAgICAgIE5T
U3RyaW5nICpjb2RlID0gW05TU3RyaW5nIHN0cmluZ1dpdGhDb250ZW50c09mRmlsZTprZXJuZWxG
aWxlXTsKKyAgICAgICAgTlNBcnJheSAqa2VybmVscyA9IFtDSUtlcm5lbCBrZXJuZWxzV2l0aFN0
cmluZzpjb2RlXTsKKyAgICAgICAgcG9pbnRMaWdodEZpbHRlciA9IFtba2VybmVscyBvYmplY3RB
dEluZGV4OjBdIHJldGFpbl07CisgICAgfQorICAgIHJldHVybiBbc3VwZXIgaW5pdF07Cit9CisK
Ky0gKENJSW1hZ2UgKilvdXRwdXRJbWFnZQoreworICAgIHJldHVybiBbc2VsZiBhcHBseTpwb2lu
dExpZ2h0RmlsdGVyLCBpbnB1dExpZ2h0UG9zaXRpb24sIG5pbF07Cit9CisKK0BlbmQKSW5kZXg6
IGRldmljZS9xdWFydHovZmlsdGVycy9XS1NwZWN1bGFyTGlnaHRpbmdGaWx0ZXIuY2lrZXJuZWwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQpSQ1MgZmlsZTogZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL1dLU3BlY3VsYXJMaWdo
dGluZ0ZpbHRlci5jaWtlcm5lbApkaWZmIC1OIGRldmljZS9xdWFydHovZmlsdGVycy9XS1NwZWN1
bGFyTGlnaHRpbmdGaWx0ZXIuY2lrZXJuZWwKSW5kZXg6IGRldmljZS9xdWFydHovZmlsdGVycy9X
S1NwZWN1bGFyTGlnaHRpbmdGaWx0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiBkZXZpY2UvcXVh
cnR6L2ZpbHRlcnMvV0tTcGVjdWxhckxpZ2h0aW5nRmlsdGVyLmgKZGlmZiAtTiBkZXZpY2UvcXVh
cnR6L2ZpbHRlcnMvV0tTcGVjdWxhckxpZ2h0aW5nRmlsdGVyLmgKLS0tIGRldmljZS9xdWFydHov
ZmlsdGVycy9XS1NwZWN1bGFyTGlnaHRpbmdGaWx0ZXIuaAkxIEphbiAxOTcwIDAwOjAwOjAwIC0w
MDAwCisrKyBkZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tTcGVjdWxhckxpZ2h0aW5nRmlsdGVyLmgJ
OCBPY3QgMjAwNSAwODo0NjozMyAtMDAwMApAQCAtMCwwICsxLDM4IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDA1IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVU
RVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRF
UiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaW1wb3J0IDxRdWFydHpDb3JlL0NvcmVJbWFnZS5oPgorCisKK0BpbnRlcmZhY2Ug
V0tTcGVjdWxhckxpZ2h0aW5nRmlsdGVyIDogQ0lGaWx0ZXIgeworICAgIENJSW1hZ2UgKmlucHV0
SW1hZ2U7CisgICAgQ0lJbWFnZSAqaW5wdXRMaWdodFNvdXJjZTsKKyAgICBDSUNvbG9yICppbnB1
dExpZ2h0aW5nQ29sb3I7CisgICAgTlNOdW1iZXIgKmlucHV0U3VyZmFjZVNjYWxlOworICAgIE5T
TnVtYmVyICppbnB1dFNwZWN1bGFyQ29uc3RhbnQ7CisgICAgTlNOdW1iZXIgKmlucHV0U3BlY3Vs
YXJFeHBvbmVudDsKKyAgICBDSVZlY3RvciAqaW5wdXRLZXJuZWxVbml0TGVuZ3RoOworfQorQGVu
ZApJbmRleDogZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL1dLU3BlY3VsYXJMaWdodGluZ0ZpbHRlci5t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KUkNTIGZpbGU6IGRldmljZS9xdWFydHovZmlsdGVycy9XS1NwZWN1bGFyTGln
aHRpbmdGaWx0ZXIubQpkaWZmIC1OIGRldmljZS9xdWFydHovZmlsdGVycy9XS1NwZWN1bGFyTGln
aHRpbmdGaWx0ZXIubQotLS0gZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL1dLU3BlY3VsYXJMaWdodGlu
Z0ZpbHRlci5tCTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAKKysrIGRldmljZS9xdWFydHovZmls
dGVycy9XS1NwZWN1bGFyTGlnaHRpbmdGaWx0ZXIubQk4IE9jdCAyMDA1IDA4OjQ2OjMzIC0wMDAw
CkBAIC0wLDAgKzEsOTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgQXBwbGUgQ29tcHV0
ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbXBvcnQgIldLU3BlY3Vs
YXJMaWdodGluZ0ZpbHRlci5oIgorCitzdGF0aWMgQ0lLZXJuZWwgKnNwZWN1bGFyTGlnaHRpbmdG
aWx0ZXIgPSBuaWw7CisKK0BpbXBsZW1lbnRhdGlvbiBXS1NwZWN1bGFyTGlnaHRpbmdGaWx0ZXIK
KworKyAodm9pZClpbml0aWFsaXplCit7CisgICAgW0NJRmlsdGVyIHJlZ2lzdGVyRmlsdGVyTmFt
ZTpAIldLU3BlY3VsYXJMaWdodGluZyIgIAorICAgICAgICBjb25zdHJ1Y3Rvcjogc2VsZgorICAg
ICAgICBjbGFzc0F0dHJpYnV0ZXM6IFtOU0RpY3Rpb25hcnkgZGljdGlvbmFyeVdpdGhPYmplY3Rz
QW5kS2V5czoKKyAgICAgICAgIEAiV2ViS2l0IFNwZWN1bGFyIExpZ2h0aW5nIiwga0NJQXR0cmli
dXRlRmlsdGVyRGlzcGxheU5hbWUsCisgICAgICAgIFtOU0FycmF5IGFycmF5V2l0aE9iamVjdHM6
IGtDSUNhdGVnb3J5U3R5bGl6ZSwga0NJQ2F0ZWdvcnlWaWRlbywKKyAgICAgICAgICAgIGtDSUNh
dGVnb3J5U3RpbGxJbWFnZSwga0NJQ2F0ZWdvcnlOb25TcXVhcmVQaXhlbHMsbmlsXSwga0NJQXR0
cmlidXRlRmlsdGVyQ2F0ZWdvcmllcywKKyAgICAgICAgW05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5
V2l0aE9iamVjdHNBbmRLZXlzOgorICAgICAgICAgICAgW0NJQ29sb3IgY29sb3JXaXRoUmVkOjEu
MCBncmVlbjoxLjAgYmx1ZToxLjAgYWxwaGE6MS4wXSwKKyAgICAgICAgICAgICBrQ0lBdHRyaWJ1
dGVEZWZhdWx0LCBuaWxdLCAgQCJpbnB1dExpZ2h0aW5nQ29sb3IiLAorICAgICAgICBbTlNEaWN0
aW9uYXJ5IGRpY3Rpb25hcnlXaXRoT2JqZWN0c0FuZEtleXM6CisgICAgICAgICAgICBbTlNOdW1i
ZXIgbnVtYmVyV2l0aERvdWJsZTowLjBdLCBrQ0lBdHRyaWJ1dGVNaW4sCisgICAgICAgICAgICBb
TlNOdW1iZXIgbnVtYmVyV2l0aERvdWJsZToxLjBdLCBrQ0lBdHRyaWJ1dGVEZWZhdWx0LAorICAg
ICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhEb3VibGU6MS4wXSwga0NJQXR0cmlidXRlSWRl
bnRpdHksCisgICAgICAgICAgICBrQ0lBdHRyaWJ1dGVUeXBlU2NhbGFyLCBrQ0lBdHRyaWJ1dGVU
eXBlLAorICAgICAgICAgICAgbmlsXSwgQCJpbnB1dFN1cmZhY2VTY2FsZSIsCisgICAgICAgIFtO
U0RpY3Rpb25hcnkgZGljdGlvbmFyeVdpdGhPYmplY3RzQW5kS2V5czoKKyAgICAgICAgICAgIFtO
U051bWJlciBudW1iZXJXaXRoRG91YmxlOjAuMF0sIGtDSUF0dHJpYnV0ZU1pbiwKKyAgICAgICAg
ICAgIFtOU051bWJlciBudW1iZXJXaXRoRG91YmxlOjEuMF0sIGtDSUF0dHJpYnV0ZURlZmF1bHQs
CisgICAgICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aERvdWJsZToxLjBdLCBrQ0lBdHRyaWJ1
dGVJZGVudGl0eSwKKyAgICAgICAgICAgIGtDSUF0dHJpYnV0ZVR5cGVTY2FsYXIsIGtDSUF0dHJp
YnV0ZVR5cGUsCisgICAgICAgICAgICBuaWxdLCBAImlucHV0U3BlY3VsYXJDb25zdGFudCIsCisg
ICAgICAgIFtOU0RpY3Rpb25hcnkgZGljdGlvbmFyeVdpdGhPYmplY3RzQW5kS2V5czoKKyAgICAg
ICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoRG91YmxlOjAuMF0sIGtDSUF0dHJpYnV0ZU1pbiwK
KyAgICAgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoRG91YmxlOjEyOC4wXSwga0NJQXR0cmli
dXRlTWluLAorICAgICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhEb3VibGU6MS4wXSwga0NJ
QXR0cmlidXRlRGVmYXVsdCwKKyAgICAgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoRG91Ymxl
OjEuMF0sIGtDSUF0dHJpYnV0ZUlkZW50aXR5LAorICAgICAgICAgICAga0NJQXR0cmlidXRlVHlw
ZVNjYWxhciwga0NJQXR0cmlidXRlVHlwZSwKKyAgICAgICAgICAgIG5pbF0sIEAiaW5wdXRTcGVj
dWxhckV4cG9uZW50IiwKKyAgICAgICAgW05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVj
dHNBbmRLZXlzOgorICAgICAgICAgICAga0NJQXR0cmlidXRlVHlwZU9mZnNldCwga0NJQXR0cmli
dXRlVHlwZSwKKyAgICAgICAgICAgIG5pbF0sIEAiaW5wdXRLZXJuZWxVbml0TGVuZ3RoIiwKKyAg
ICAgICAgbmlsXV07Cit9CisKKysgKENJRmlsdGVyICopZmlsdGVyV2l0aE5hbWU6KE5TU3RyaW5n
ICopbmFtZQoreworICAgIENJRmlsdGVyICpmaWx0ZXI7CisgICAgZmlsdGVyID0gW1tzZWxmIGFs
bG9jXSBpbml0XTsKKyAgICByZXR1cm4gW2ZpbHRlciBhdXRvcmVsZWFzZV07Cit9CisKKy0gKGlk
KWluaXQKK3sKKyAgICBpZighc3BlY3VsYXJMaWdodGluZ0ZpbHRlcikgeworICAgICAgICBOU0J1
bmRsZSAqYnVuZGxlID0gW05TQnVuZGxlIGJ1bmRsZUZvckNsYXNzOltzZWxmIGNsYXNzXV07Cisg
ICAgICAgIE5TU3RyaW5nICprZXJuZWxGaWxlID0gW2J1bmRsZSBwYXRoRm9yUmVzb3VyY2U6QCJX
S1NwZWN1bGFyTGlnaHRpbmdGaWx0ZXIiIG9mVHlwZTpAImNpa2VybmVsIl07CisgICAgICAgIE5T
U3RyaW5nICpjb2RlID0gW05TU3RyaW5nIHN0cmluZ1dpdGhDb250ZW50c09mRmlsZTprZXJuZWxG
aWxlXTsKKyAgICAgICAgTlNBcnJheSAqa2VybmVscyA9IFtDSUtlcm5lbCBrZXJuZWxzV2l0aFN0
cmluZzpjb2RlXTsKKyAgICAgICAgc3BlY3VsYXJMaWdodGluZ0ZpbHRlciA9IFtba2VybmVscyBv
YmplY3RBdEluZGV4OjBdIHJldGFpbl07CisgICAgfQorICAgIHJldHVybiBbc3VwZXIgaW5pdF07
Cit9CisKKy0gKENJSW1hZ2UgKilvdXRwdXRJbWFnZQoreworICAgIHJldHVybiBbc2VsZiBhcHBs
eTpzcGVjdWxhckxpZ2h0aW5nRmlsdGVyLCBpbnB1dExpZ2h0aW5nQ29sb3IsIGlucHV0U3VyZmFj
ZVNjYWxlLCBpbnB1dFNwZWN1bGFyQ29uc3RhbnQsCisgICAgICAgIGlucHV0U3BlY3VsYXJFeHBv
bmVudCwgaW5wdXRLZXJuZWxVbml0TGVuZ3RoLCBuaWxdOworfQorCitAZW5kCkluZGV4OiBkZXZp
Y2UvcXVhcnR6L2ZpbHRlcnMvV0tTcG90TGlnaHRGaWx0ZXIuY2lrZXJuZWwKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpS
Q1MgZmlsZTogZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL1dLU3BvdExpZ2h0RmlsdGVyLmNpa2VybmVs
CmRpZmYgLU4gZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL1dLU3BvdExpZ2h0RmlsdGVyLmNpa2VybmVs
CkluZGV4OiBkZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tTcG90TGlnaHRGaWx0ZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09ClJDUyBmaWxlOiBkZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tTcG90TGlnaHRGaWx0ZXIuaApk
aWZmIC1OIGRldmljZS9xdWFydHovZmlsdGVycy9XS1Nwb3RMaWdodEZpbHRlci5oCi0tLSBkZXZp
Y2UvcXVhcnR6L2ZpbHRlcnMvV0tTcG90TGlnaHRGaWx0ZXIuaAkxIEphbiAxOTcwIDAwOjAwOjAw
IC0wMDAwCisrKyBkZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tTcG90TGlnaHRGaWx0ZXIuaAk4IE9j
dCAyMDA1IDA4OjQ2OjM0IC0wMDAwCkBAIC0wLDAgKzEsMzQgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDUgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpbXBvcnQgPFF1YXJ0ekNvcmUvQ29yZUltYWdlLmg+CisKK0BpbnRlcmZhY2UgV0tTcG90
TGlnaHRGaWx0ZXIgOiBDSUZpbHRlciB7CisgICAgQ0lWZWN0b3IgKmlucHV0TGlnaHRQb3NpdGlv
bjsKKyAgICBDSVZlY3RvciAqaW5wdXRMaWdodFBvaW50c0F0OworICAgIE5TTnVtYmVyICppbnB1
dFNwZWN1bGFyRXhwb25lbnQ7CisgICAgTlNOdW1iZXIgKmlucHV0TGltaXRpbmdDb25lQW5nbGU7
Cit9CitAZW5kCkluZGV4OiBkZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tTcG90TGlnaHRGaWx0ZXIu
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09ClJDUyBmaWxlOiBkZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tTcG90TGlnaHRG
aWx0ZXIubQpkaWZmIC1OIGRldmljZS9xdWFydHovZmlsdGVycy9XS1Nwb3RMaWdodEZpbHRlci5t
Ci0tLSBkZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tTcG90TGlnaHRGaWx0ZXIubQkxIEphbiAxOTcw
IDAwOjAwOjAwIC0wMDAwCisrKyBkZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tTcG90TGlnaHRGaWx0
ZXIubQk4IE9jdCAyMDA1IDA4OjQ2OjM0IC0wMDAwCkBAIC0wLDAgKzEsODEgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDUgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBD
T01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENP
TVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisgCisjaW1wb3J0ICJXS1Nwb3RMaWdodEZpbHRlci5oIgorCitzdGF0aWMgQ0lL
ZXJuZWwgKnNwb3RMaWdodEZpbHRlciA9IG5pbDsKKworQGltcGxlbWVudGF0aW9uIFdLU3BvdExp
Z2h0RmlsdGVyCisKKysgKHZvaWQpaW5pdGlhbGl6ZQoreworICAgIFtDSUZpbHRlciByZWdpc3Rl
ckZpbHRlck5hbWU6QCJXS1Nwb3RMaWdodCIKKyAgICAgICAgY29uc3RydWN0b3I6IHNlbGYKKyAg
ICAgICAgY2xhc3NBdHRyaWJ1dGVzOiBbTlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnlXaXRoT2JqZWN0
c0FuZEtleXM6CisgICAgICAgICBAIldlYktpdCBTcG90IExpZ2h0Iiwga0NJQXR0cmlidXRlRmls
dGVyRGlzcGxheU5hbWUsCisgICAgICAgIFtOU0FycmF5IGFycmF5V2l0aE9iamVjdHM6IGtDSUNh
dGVnb3J5U3R5bGl6ZSwga0NJQ2F0ZWdvcnlWaWRlbywKKyAgICAgICAgICAgIGtDSUNhdGVnb3J5
U3RpbGxJbWFnZSwga0NJQ2F0ZWdvcnlOb25TcXVhcmVQaXhlbHMsbmlsXSwga0NJQXR0cmlidXRl
RmlsdGVyQ2F0ZWdvcmllcywKKyAgICAgICAgW05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9i
amVjdHNBbmRLZXlzOgorICAgICAgICAgICAga0NJQXR0cmlidXRlVHlwZVBvc2l0aW9uMywga0NJ
QXR0cmlidXRlVHlwZSwKKyAgICAgICAgICAgIG5pbF0sIEAiaW5wdXRMaWdodFBvc2l0aW9uIiwK
KyAgICAgICAgW05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVjdHNBbmRLZXlzOgorICAg
ICAgICAgICAga0NJQXR0cmlidXRlVHlwZVBvc2l0aW9uMywga0NJQXR0cmlidXRlVHlwZSwKKyAg
ICAgICAgICAgIG5pbF0sIEAiaW5wdXRMaWdodFBvaW50c0F0IiwKKyAgICAgICAgW05TRGljdGlv
bmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVjdHNBbmRLZXlzOgorICAgICAgICAgICAgW05TTnVtYmVy
IG51bWJlcldpdGhEb3VibGU6MS4wXSwga0NJQXR0cmlidXRlRGVmYXVsdCwKKyAgICAgICAgICAg
IFtOU051bWJlciBudW1iZXJXaXRoRG91YmxlOjEuMF0sIGtDSUF0dHJpYnV0ZUlkZW50aXR5LAor
ICAgICAgICAgICAga0NJQXR0cmlidXRlVHlwZVNjYWxhciwga0NJQXR0cmlidXRlVHlwZSwKKyAg
ICAgICAgICAgIG5pbF0sIEAiaW5wdXRTcGVjdWxhckV4cG9uZW50IiwKKyAgICAgICAgW05TRGlj
dGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVjdHNBbmRLZXlzOgorICAgICAgICAgICAga0NJQXR0
cmlidXRlVHlwZUFuZ2xlLCBrQ0lBdHRyaWJ1dGVUeXBlLAorICAgICAgICAgICAgbmlsXSwgQCJp
bnB1dExpbWl0aW5nQ29uZUFuZ2xlIiwKKyAgICAgICAgbmlsXV07Cit9CisKKysgKENJRmlsdGVy
ICopZmlsdGVyV2l0aE5hbWU6KE5TU3RyaW5nICopbmFtZQoreworICAgIENJRmlsdGVyICpmaWx0
ZXI7CisgICAgZmlsdGVyID0gW1tzZWxmIGFsbG9jXSBpbml0XTsKKyAgICByZXR1cm4gW2ZpbHRl
ciBhdXRvcmVsZWFzZV07Cit9CisKKy0gKGlkKWluaXQKK3sKKyAgICBpZighc3BvdExpZ2h0Rmls
dGVyKSB7CisgICAgICAgIE5TQnVuZGxlICpidW5kbGUgPSBbTlNCdW5kbGUgYnVuZGxlRm9yQ2xh
c3M6W3NlbGYgY2xhc3NdXTsKKyAgICAgICAgTlNTdHJpbmcgKmtlcm5lbEZpbGUgPSBbYnVuZGxl
IHBhdGhGb3JSZXNvdXJjZTpAIldLUG9pbnRMaWdodEZpbHRlciIgb2ZUeXBlOkAiY2lrZXJuZWwi
XTsKKyAgICAgICAgTlNTdHJpbmcgKmNvZGUgPSBbTlNTdHJpbmcgc3RyaW5nV2l0aENvbnRlbnRz
T2ZGaWxlOmtlcm5lbEZpbGVdOworICAgICAgICBOU0FycmF5ICprZXJuZWxzID0gW0NJS2VybmVs
IGtlcm5lbHNXaXRoU3RyaW5nOmNvZGVdOworICAgICAgICBzcG90TGlnaHRGaWx0ZXIgPSBbW2tl
cm5lbHMgb2JqZWN0QXRJbmRleDowXSByZXRhaW5dOworICAgIH0KKyAgICByZXR1cm4gW3N1cGVy
IGluaXRdOworfQorCistIChDSUltYWdlICopb3V0cHV0SW1hZ2UKK3sKKyAgICByZXR1cm4gW3Nl
bGYgYXBwbHk6c3BvdExpZ2h0RmlsdGVyLCBpbnB1dExpZ2h0UG9zaXRpb24sIG5pbF07Cit9CisK
K0BlbmQK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>4569</attachid>
            <date>2005-11-02 19:32:21 -0800</date>
            <delta_ts>2005-11-08 01:58:32 -0800</delta_ts>
            <desc>current state of lighting patch pt1</desc>
            <filename>lighting_patch_kcanvas_device.patch</filename>
            <type>text/plain</type>
            <size>57712</size>
            <attacher name="Oliver Hunt">oliver</attacher>
            
              <data encoding="base64">SW5kZXg6IHF1YXJ0ei9maWx0ZXJzL3F1YXJ0ei9maWx0ZXJzL3F1YXJ0ei9maWx0ZXJzL0NWUy9F
bnRyaWVzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KZGlmZiAtTnB1IHF1YXJ0ei9maWx0ZXJzL3F1YXJ0ei9maWx0ZXJz
L3F1YXJ0ei9maWx0ZXJzL0NWUy9FbnRyaWVzCi0tLSBxdWFydHovZmlsdGVycy9xdWFydHovZmls
dGVycy9xdWFydHovZmlsdGVycy9DVlMvRW50cmllcwkxIEphbiAxOTcwIDAwOjAwOjAwIC0wMDAw
CisrKyBxdWFydHovZmlsdGVycy9xdWFydHovZmlsdGVycy9xdWFydHovZmlsdGVycy9DVlMvRW50
cmllcwkyNSBPY3QgMjAwNSAwNTozMjoyNCAtMDAwMApAQCAtMCwwICsxIEBACitECkluZGV4OiBx
dWFydHovZmlsdGVycy9xdWFydHovZmlsdGVycy9xdWFydHovZmlsdGVycy9DVlMvUmVwb3NpdG9y
eQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09CmRpZmYgLU5wdSBxdWFydHovZmlsdGVycy9xdWFydHovZmlsdGVycy9xdWFy
dHovZmlsdGVycy9DVlMvUmVwb3NpdG9yeQotLS0gcXVhcnR6L2ZpbHRlcnMvcXVhcnR6L2ZpbHRl
cnMvcXVhcnR6L2ZpbHRlcnMvQ1ZTL1JlcG9zaXRvcnkJMSBKYW4gMTk3MCAwMDowMDowMCAtMDAw
MAorKysgcXVhcnR6L2ZpbHRlcnMvcXVhcnR6L2ZpbHRlcnMvcXVhcnR6L2ZpbHRlcnMvQ1ZTL1Jl
cG9zaXRvcnkJMjUgT2N0IDIwMDUgMDU6MzI6MjQgLTAwMDAKQEAgLTAsMCArMSBAQAorU1ZHU3Vw
cG9ydC9rY2FudmFzL2RldmljZS9xdWFydHovZmlsdGVycwpJbmRleDogcXVhcnR6L2ZpbHRlcnMv
cXVhcnR6L2ZpbHRlcnMvcXVhcnR6L2ZpbHRlcnMvQ1ZTL1Jvb3QKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpkaWZmIC1O
cHUgcXVhcnR6L2ZpbHRlcnMvcXVhcnR6L2ZpbHRlcnMvcXVhcnR6L2ZpbHRlcnMvQ1ZTL1Jvb3QK
LS0tIHF1YXJ0ei9maWx0ZXJzL3F1YXJ0ei9maWx0ZXJzL3F1YXJ0ei9maWx0ZXJzL0NWUy9Sb290
CTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAKKysrIHF1YXJ0ei9maWx0ZXJzL3F1YXJ0ei9maWx0
ZXJzL3F1YXJ0ei9maWx0ZXJzL0NWUy9Sb290CTI1IE9jdCAyMDA1IDA1OjMyOjI0IC0wMDAwCkBA
IC0wLDAgKzEgQEAKKzpwc2VydmVyOmFub255bW91c0Bhbm9uY3ZzLm9wZW5zb3VyY2UuYXBwbGUu
Y29tOi9jdnMvcm9vdApJbmRleDogcXVhcnR6L3F1YXJ0ei9maWx0ZXJzL1dLQ29udm9sdmVNYXRy
aXhGaWx0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09CmRpZmYgLU5wdSBxdWFydHovcXVhcnR6L2ZpbHRlcnMvV0tD
b252b2x2ZU1hdHJpeEZpbHRlci5oCi0tLSBxdWFydHovcXVhcnR6L2ZpbHRlcnMvV0tDb252b2x2
ZU1hdHJpeEZpbHRlci5oCTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAKKysrIHF1YXJ0ei9xdWFy
dHovZmlsdGVycy9XS0NvbnZvbHZlTWF0cml4RmlsdGVyLmgJMTMgT2N0IDIwMDUgMDc6MjY6MzUg
LTAwMDAKQEAgLTAsMCArMSwzNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBBcHBsZSBD
b21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2ltcG9ydCA8UXVh
cnR6Q29yZS9Db3JlSW1hZ2UuaD4KKworQGludGVyZmFjZSBXS0NvbnZvbHZlTWF0cml4RmlsdGVy
OiBDSUZpbHRlcgoreworICAgIENJSW1hZ2UgICAqaW5wdXRJbWFnZTsKKyAgICBDSUltYWdlICAg
KmlucHV0S2VybmVsTWF0cml4OworICAgIE5TTnVtYmVyICAqaW5wdXREaXZpc29yOworICAgIE5T
TnVtYmVyICAqaW5wdXRCaWFzOworfQorQGVuZApJbmRleDogcXVhcnR6L3F1YXJ0ei9maWx0ZXJz
L1dLQ29udm9sdmVNYXRyaXhGaWx0ZXIubQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CmRpZmYgLU5wdSBxdWFydHovcXVh
cnR6L2ZpbHRlcnMvV0tDb252b2x2ZU1hdHJpeEZpbHRlci5tCi0tLSBxdWFydHovcXVhcnR6L2Zp
bHRlcnMvV0tDb252b2x2ZU1hdHJpeEZpbHRlci5tCTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAK
KysrIHF1YXJ0ei9xdWFydHovZmlsdGVycy9XS0NvbnZvbHZlTWF0cml4RmlsdGVyLm0JMTMgT2N0
IDIwMDUgMDc6MjY6MzUgLTAwMDAKQEAgLTAsMCArMSw5MyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwNSBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2ltcG9ydCAiV0tDb252b2x2ZU1hdHJpeEZpbHRlci5oIgorCitzdGF0aWMgQ0lLZXJuZWwg
KmNvbnZvbHZlTWF0cml4S2VybmVsID0gbmlsOworCitAaW1wbGVtZW50YXRpb24gV0tDb252b2x2
ZU1hdHJpeEZpbHRlcgorCisrICh2b2lkKWluaXRpYWxpemUKK3sKKyAgICBbQ0lGaWx0ZXIgcmVn
aXN0ZXJGaWx0ZXJOYW1lOkAiV0tDb252b2x2ZU1hdHJpeCIgIAorICAgICAgICBjb25zdHJ1Y3Rv
cjogc2VsZgorICAgICAgICBjbGFzc0F0dHJpYnV0ZXM6IFtOU0RpY3Rpb25hcnkgZGljdGlvbmFy
eVdpdGhPYmplY3RzQW5kS2V5czoKKyAgICAgICAgIEAiV2ViS2l0IENvbnZvbHZlIE1hdHJpeCIs
IGtDSUF0dHJpYnV0ZUZpbHRlckRpc3BsYXlOYW1lLAorICAgICAgICBbTlNBcnJheSBhcnJheVdp
dGhPYmplY3RzOiBrQ0lDYXRlZ29yeUJsdXIsIGtDSUNhdGVnb3J5VmlkZW8sCisgICAgICAgICAg
ICBrQ0lDYXRlZ29yeVN0aWxsSW1hZ2UsIGtDSUNhdGVnb3J5Tm9uU3F1YXJlUGl4ZWxzLG5pbF0s
IGtDSUF0dHJpYnV0ZUZpbHRlckNhdGVnb3JpZXMsCisgICAgICAgIFtOU0RpY3Rpb25hcnkgZGlj
dGlvbmFyeVdpdGhPYmplY3RzQW5kS2V5czoKKyAgICAgICAgICAgIGtDSUF0dHJpYnV0ZVR5cGVH
cmFkaWVudCwga0NJQXR0cmlidXRlVHlwZSwKKyAgICAgICAgICAgIG5pbF0sIEAiaW5wdXRLZXJu
ZWxNYXRyaXgiLAorICAgICAgICBbTlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnlXaXRoT2JqZWN0c0Fu
ZEtleXM6CisgICAgICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aERvdWJsZTowLjBdLCBrQ0lB
dHRyaWJ1dGVNaW4sCisgICAgICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aERvdWJsZToxLjBd
LCBrQ0lBdHRyaWJ1dGVEZWZhdWx0LAorICAgICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhE
b3VibGU6MS4wXSwga0NJQXR0cmlidXRlSWRlbnRpdHksCisgICAgICAgICAgICBrQ0lBdHRyaWJ1
dGVUeXBlU2NhbGFyLCBrQ0lBdHRyaWJ1dGVUeXBlLAorICAgICAgICAgICAgbmlsXSwgQCJpbnB1
dERpdmlzb3IiLAorICAgICAgICBbTlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnlXaXRoT2JqZWN0c0Fu
ZEtleXM6CisgICAgICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aERvdWJsZTowLjBdLCBrQ0lB
dHRyaWJ1dGVEZWZhdWx0LAorICAgICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhEb3VibGU6
MC4wXSwga0NJQXR0cmlidXRlSWRlbnRpdHksCisgICAgICAgICAgICBrQ0lBdHRyaWJ1dGVUeXBl
U2NhbGFyLCBrQ0lBdHRyaWJ1dGVUeXBlLAorICAgICAgICAgICAgbmlsXSwgQCJpbnB1dEJpYXMi
LAorICAgICAgICBuaWxdXTsKK30KKworKyAoQ0lGaWx0ZXIgKilmaWx0ZXJXaXRoTmFtZTooTlNT
dHJpbmcgKiluYW1lCit7CisgICAgQ0lGaWx0ZXIgKmZpbHRlcjsKKyAgICBmaWx0ZXIgPSBbW3Nl
bGYgYWxsb2NdIGluaXRdOworICAgIHJldHVybiBbZmlsdGVyIGF1dG9yZWxlYXNlXTsKK30KKwor
LSAoaWQpaW5pdAoreworICAgIGlmKCFjb252b2x2ZU1hdHJpeEtlcm5lbCkgeworICAgICAgICBO
U0J1bmRsZSAqYnVuZGxlID0gW05TQnVuZGxlIGJ1bmRsZUZvckNsYXNzOltzZWxmIGNsYXNzXV07
CisgICAgICAgIE5TU3RyaW5nICprZXJuZWxGaWxlID0gW2J1bmRsZSBwYXRoRm9yUmVzb3VyY2U6
QCJXS0NvbnZvbHZlTWF0cml4RmlsdGVyIiBvZlR5cGU6QCJjaWtlcm5lbCJdOworICAgICAgICBO
U1N0cmluZyAqY29kZSA9IFtOU1N0cmluZyBzdHJpbmdXaXRoQ29udGVudHNPZkZpbGU6a2VybmVs
RmlsZV07CisgICAgICAgIE5TQXJyYXkgKmtlcm5lbHMgPSBbQ0lLZXJuZWwga2VybmVsc1dpdGhT
dHJpbmc6Y29kZV07CisgICAgICAgIGNvbnZvbHZlTWF0cml4S2VybmVsID0gW1trZXJuZWxzIG9i
amVjdEF0SW5kZXg6MF0gcmV0YWluXTsKKyAgICB9CisgICAgcmV0dXJuIFtzdXBlciBpbml0XTsK
K30KKworLSAoQ0lJbWFnZSAqKW91dHB1dEltYWdlCit7CisgICAgLy8gRklYTUUsIEkgZG9uJ3Qg
dGhpbmsgdGhpcyBpcyByaWdodCB5ZXQuLi4KKyAgICBDSVNhbXBsZXIgKmltYWdlID0gW0NJU2Ft
cGxlciBzYW1wbGVyV2l0aEltYWdlOmlucHV0SW1hZ2VdOworICAgIENJU2FtcGxlciAqa2VybmVs
TWF0cml4ID0gW0NJU2FtcGxlciBzYW1wbGVyV2l0aEltYWdlOmlucHV0S2VybmVsTWF0cml4XTsK
KyAgICByZXR1cm4gW3NlbGYgYXBwbHk6Y29udm9sdmVNYXRyaXhLZXJuZWwsIGltYWdlLCBrZXJu
ZWxNYXRyaXgsIGlucHV0RGl2aXNvciwKKyAgICAgICAgaW5wdXRCaWFzLCBrQ0lBcHBseU9wdGlv
bkRlZmluaXRpb24sIFtpbWFnZSBkZWZpbml0aW9uXSwgbmlsXTsKK30KKworLSAoQ0dSZWN0KXJl
Z2lvbk9mOihpbnQpc2FtcGxlckluZGV4IGRlc3RSZWN0OihDR1JlY3QpcgoreworICAgIC8vIFRo
aXMgaXMgZ29ubmEgYmUgc2xvb29vdy4KKyAgICBDR1JlY3QgZXh0ZW50ID0gW2lucHV0S2VybmVs
TWF0cml4IGV4dGVudF07CisgICAgQ0dTaXplIHNpemUgPSBleHRlbnQuc2l6ZTsKKyAgICByZXR1
cm4gQ0dSZWN0SW5zZXQociwgLTEgKiBzaXplLndpZHRoLCAtMSAqIHNpemUuaGVpZ2h0KTsKK30K
KworQGVuZApJbmRleDogcXVhcnR6L3F1YXJ0ei9maWx0ZXJzL1dLRGlmZnVzZUxpZ2h0aW5nRmls
dGVyLmNpa2VybmVsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtTnB1IHF1YXJ0ei9xdWFydHovZmlsdGVycy9X
S0RpZmZ1c2VMaWdodGluZ0ZpbHRlci5jaWtlcm5lbAotLS0gcXVhcnR6L3F1YXJ0ei9maWx0ZXJz
L1dLRGlmZnVzZUxpZ2h0aW5nRmlsdGVyLmNpa2VybmVsCTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAw
MDAKKysrIHF1YXJ0ei9xdWFydHovZmlsdGVycy9XS0RpZmZ1c2VMaWdodGluZ0ZpbHRlci5jaWtl
cm5lbAkyIE5vdiAyMDA1IDExOjQ2OjM4IC0wMDAwCkBAIC0wLDAgKzEsNiBAQAora2VybmVsIHZl
YzQgZGlmZnVzZUxpZ2h0aW5nKHNhbXBsZXIgaW5wdXRJbWFnZSwgc2FtcGxlciBpbnB1dExpZ2h0
VmVjdG9ycywgX19jb2xvciBpbnB1dExpZ2h0aW5nQ29sb3IsIAorICAgIGZsb2F0IGlucHV0U3Vy
ZmFjZVNjYWxlLCBmbG9hdCBpbnB1dERpZmZ1c2VDb25zdGFudCwgZmxvYXQgaW5wdXRLZXJuZWxM
ZW5ndGhYLAorICAgIGZsb2F0IGlucHV0S2VybmVsTGVuZ3RoWSkKK3sKKyAgICByZXR1cm4gdmVj
NCgxLjAsMC4wLDAuMCwxLjApOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKSW5kZXg6
IHF1YXJ0ei9xdWFydHovZmlsdGVycy9XS0RpZmZ1c2VMaWdodGluZ0ZpbHRlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KZGlmZiAtTnB1IHF1YXJ0ei9xdWFydHovZmlsdGVycy9XS0RpZmZ1c2VMaWdodGluZ0ZpbHRl
ci5oCi0tLSBxdWFydHovcXVhcnR6L2ZpbHRlcnMvV0tEaWZmdXNlTGlnaHRpbmdGaWx0ZXIuaAkx
IEphbiAxOTcwIDAwOjAwOjAwIC0wMDAwCisrKyBxdWFydHovcXVhcnR6L2ZpbHRlcnMvV0tEaWZm
dXNlTGlnaHRpbmdGaWx0ZXIuaAkyIE5vdiAyMDA1IDAxOjQzOjE0IC0wMDAwCkBAIC0wLDAgKzEs
MzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbXBvcnQgPFF1YXJ0ekNvcmUvQ29yZUltYWdl
Lmg+CisKK0BpbnRlcmZhY2UgV0tEaWZmdXNlTGlnaHRpbmdGaWx0ZXIgOiBDSUZpbHRlciB7Cisg
ICAgQ0lJbWFnZSAqaW5wdXRJbWFnZTsKKyAgICBDSUltYWdlICppbnB1dExpZ2h0U291cmNlOwor
ICAgIENJQ29sb3IgKmlucHV0TGlnaHRpbmdDb2xvcjsKKyAgICBOU051bWJlciAqaW5wdXRTdXJm
YWNlU2NhbGU7CisgICAgTlNOdW1iZXIgKmlucHV0RGlmZnVzZUNvbnN0YW50OworICAgIE5TTnVt
YmVyICppbnB1dEtlcm5lbFVuaXRMZW5ndGhYOworICAgIE5TTnVtYmVyICppbnB1dEtlcm5lbFVu
aXRMZW5ndGhZOworfQorQGVuZApJbmRleDogcXVhcnR6L3F1YXJ0ei9maWx0ZXJzL1dLRGlmZnVz
ZUxpZ2h0aW5nRmlsdGVyLm0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpkaWZmIC1OcHUgcXVhcnR6L3F1YXJ0ei9maWx0
ZXJzL1dLRGlmZnVzZUxpZ2h0aW5nRmlsdGVyLm0KLS0tIHF1YXJ0ei9xdWFydHovZmlsdGVycy9X
S0RpZmZ1c2VMaWdodGluZ0ZpbHRlci5tCTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAKKysrIHF1
YXJ0ei9xdWFydHovZmlsdGVycy9XS0RpZmZ1c2VMaWdodGluZ0ZpbHRlci5tCTMgTm92IDIwMDUg
MDI6NDc6MDIgLTAwMDAKQEAgLTAsMCArMSwxMDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDUgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
bXBvcnQgIldLRGlmZnVzZUxpZ2h0aW5nRmlsdGVyLmgiCisjaW1wb3J0IDxzdGRpby5oPgorCitz
dGF0aWMgQ0lLZXJuZWwgKmRpZmZ1c2VMaWdodGluZ0ZpbHRlciA9IG5pbDsKK3N0YXRpYyBCT09M
ICAgICBkaWZmdXNlTGlnaHRpbmdGaWx0ZXJJbml0aWFsaXNlZCA9IE5POworQGltcGxlbWVudGF0
aW9uIFdLRGlmZnVzZUxpZ2h0aW5nRmlsdGVyCisKKysgKHZvaWQpaW5pdGlhbGl6ZQoreworICAg
IGlmKCFkaWZmdXNlTGlnaHRpbmdGaWx0ZXJJbml0aWFsaXNlZCl7CisgICAgICAgIFtDSUZpbHRl
ciByZWdpc3RlckZpbHRlck5hbWU6QCJXS0RpZmZ1c2VMaWdodGluZyIgIAorICAgICAgICAgICAg
Y29uc3RydWN0b3I6c2VsZgorICAgICAgICAgICAgY2xhc3NBdHRyaWJ1dGVzOltOU0RpY3Rpb25h
cnkgZGljdGlvbmFyeVdpdGhPYmplY3RzQW5kS2V5czoKKyAgICAgICAgICAgIEAiV2ViS2l0IERp
ZmZ1c2UgTGlnaHRpbmciLCBrQ0lBdHRyaWJ1dGVGaWx0ZXJEaXNwbGF5TmFtZSwKKyAgICAgICAg
ICAgIFtOU0FycmF5IGFycmF5V2l0aE9iamVjdHM6IGtDSUNhdGVnb3J5U3R5bGl6ZSwga0NJQ2F0
ZWdvcnlWaWRlbywKKyAgICAgICAgICAgICAgICBrQ0lDYXRlZ29yeVN0aWxsSW1hZ2UsIGtDSUNh
dGVnb3J5Tm9uU3F1YXJlUGl4ZWxzLG5pbF0sIGtDSUF0dHJpYnV0ZUZpbHRlckNhdGVnb3JpZXMs
CisgICAgICAgICAgICBbTlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnlXaXRoT2JqZWN0c0FuZEtleXM6
IG5pbF0sIEAiaW5wdXRMaWdodFZlY3RvcnMiLAorICAgICAgICAgICAgW05TRGljdGlvbmFyeSBk
aWN0aW9uYXJ5V2l0aE9iamVjdHNBbmRLZXlzOgorICAgICAgICAgICAgICAgIFtDSUNvbG9yIGNv
bG9yV2l0aFJlZDoxLjAgZ3JlZW46MS4wIGJsdWU6MS4wIGFscGhhOjEuMF0sCisgICAgICAgICAg
ICAgICAga0NJQXR0cmlidXRlRGVmYXVsdCwgbmlsXSwgQCJpbnB1dExpZ2h0aW5nQ29sb3IiLAor
ICAgICAgICAgICAgW05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVjdHNBbmRLZXlzOgor
ICAgICAgICAgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoRG91YmxlOjAuMF0sIGtDSUF0dHJp
YnV0ZU1pbiwKKyAgICAgICAgICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aERvdWJsZToxLjBd
LCBrQ0lBdHRyaWJ1dGVEZWZhdWx0LAorICAgICAgICAgICAgICAgIFtOU051bWJlciBudW1iZXJX
aXRoRG91YmxlOjEuMF0sIGtDSUF0dHJpYnV0ZUlkZW50aXR5LAorICAgICAgICAgICAgICAgIGtD
SUF0dHJpYnV0ZVR5cGVTY2FsYXIsIGtDSUF0dHJpYnV0ZVR5cGUsCisgICAgICAgICAgICAgICAg
bmlsXSwgQCJpbnB1dFN1cmZhY2VTY2FsZSIsCisgICAgICAgICAgICBbTlNEaWN0aW9uYXJ5IGRp
Y3Rpb25hcnlXaXRoT2JqZWN0c0FuZEtleXM6CisgICAgICAgICAgICAgICAgW05TTnVtYmVyIG51
bWJlcldpdGhEb3VibGU6MC4wXSwga0NJQXR0cmlidXRlTWluLAorICAgICAgICAgICAgICAgIFtO
U051bWJlciBudW1iZXJXaXRoRG91YmxlOjEuMF0sIGtDSUF0dHJpYnV0ZURlZmF1bHQsCisgICAg
ICAgICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhEb3VibGU6MS4wXSwga0NJQXR0cmlidXRl
SWRlbnRpdHksCisgICAgICAgICAgICAgICAga0NJQXR0cmlidXRlVHlwZVNjYWxhciwga0NJQXR0
cmlidXRlVHlwZSwKKyAgICAgICAgICAgICAgICBuaWxdLCBAImlucHV0RGlmZnVzZUNvbnN0YW50
IiwKKyAgICAgICAgICAgIFtOU0RpY3Rpb25hcnkgZGljdGlvbmFyeVdpdGhPYmplY3RzQW5kS2V5
czoKKyAgICAgICAgICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aERvdWJsZTowLjBdLCBrQ0lB
dHRyaWJ1dGVNaW4sCisgICAgICAgICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhEb3VibGU6
MS4wXSwga0NJQXR0cmlidXRlRGVmYXVsdCwKKyAgICAgICAgICAgICAgICBbTlNOdW1iZXIgbnVt
YmVyV2l0aERvdWJsZToxLjBdLCBrQ0lBdHRyaWJ1dGVJZGVudGl0eSwKKyAgICAgICAgICAgICAg
ICBrQ0lBdHRyaWJ1dGVUeXBlU2NhbGFyLCBrQ0lBdHRyaWJ1dGVUeXBlLAorICAgICAgICAgICAg
ICAgIG5pbF0sIEAiaW5wdXRLZXJuZWxVbml0TGVuZ3RoWCIsCisgICAgICAgICAgICBbTlNEaWN0
aW9uYXJ5IGRpY3Rpb25hcnlXaXRoT2JqZWN0c0FuZEtleXM6CisgICAgICAgICAgICAgICAgW05T
TnVtYmVyIG51bWJlcldpdGhEb3VibGU6MC4wXSwga0NJQXR0cmlidXRlTWluLAorICAgICAgICAg
ICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoRG91YmxlOjEuMF0sIGtDSUF0dHJpYnV0ZURlZmF1
bHQsCisgICAgICAgICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhEb3VibGU6MS4wXSwga0NJ
QXR0cmlidXRlSWRlbnRpdHksCisgICAgICAgICAgICAgICAga0NJQXR0cmlidXRlVHlwZVNjYWxh
ciwga0NJQXR0cmlidXRlVHlwZSwKKyAgICAgICAgICAgICAgICBuaWxdLCBAImlucHV0S2VybmVs
VW5pdExlbmd0aFkiLAorICAgICAgICBuaWxdXTsKKyAgICAgICAgZGlmZnVzZUxpZ2h0aW5nRmls
dGVySW5pdGlhbGlzZWQgPSBZRVM7CisgICAgfQorfQorCisrIChDSUZpbHRlciAqKWZpbHRlcldp
dGhOYW1lOihOU1N0cmluZyAqKW5hbWUKK3sKKyAgICBDSUZpbHRlciAqZmlsdGVyOworICAgIGZp
bHRlciA9IFtbc2VsZiBhbGxvY10gaW5pdF07CisgICAgcmV0dXJuIFtmaWx0ZXIgYXV0b3JlbGVh
c2VdOworfQorCistIChpZClpbml0Cit7CisgICAgaWYoIWRpZmZ1c2VMaWdodGluZ0ZpbHRlcikg
eworICAgICAgICAvL05TQnVuZGxlICpidW5kbGUgPSBbTlNCdW5kbGUgYnVuZGxlRm9yQ2xhc3M6
W3NlbGYgY2xhc3NdXTsKKyAgICAgICAgTlNTdHJpbmcgKmtlcm5lbEZpbGUgPSBAIi4vU1ZHU3Vw
cG9ydC9rY2FudmFzL2RldmljZS9xdWFydHovZmlsdGVycy9XS0RpZmZ1c2VMaWdodGluZ0ZpbHRl
ci5jaWtlcm5lbCI7Ly9bYnVuZGxlIHBhdGhGb3JSZXNvdXJjZTpAIldLRGlmZnVzZUxpZ2h0aW5n
RmlsdGVyIiBvZlR5cGU6QCJjaWtlcm5lbCJdOworICAgICAgICBOU1N0cmluZyAqY29kZSA9IFtO
U1N0cmluZyBzdHJpbmdXaXRoQ29udGVudHNPZkZpbGU6a2VybmVsRmlsZV07CisgICAgICAgIE5T
QXJyYXkgKmtlcm5lbHMgPSBbQ0lLZXJuZWwga2VybmVsc1dpdGhTdHJpbmc6Y29kZV07CisgICAg
ICAgIGRpZmZ1c2VMaWdodGluZ0ZpbHRlciA9IFtba2VybmVscyBvYmplY3RBdEluZGV4OjBdIHJl
dGFpbl07CisgICAgfQorICAgIHJldHVybiBbc3VwZXIgaW5pdF07Cit9CisKKy0gKENJSW1hZ2Ug
KilvdXRwdXRJbWFnZQoreworICAgIENJU2FtcGxlciAqc3JjID0gW0NJU2FtcGxlciBzYW1wbGVy
V2l0aEltYWdlOiBpbnB1dEltYWdlXTsKKyAgICBDSVNhbXBsZXIgKmxpZ2h0U3JjID0gW0NJU2Ft
cGxlciBzYW1wbGVyV2l0aEltYWdlOiBpbnB1dExpZ2h0U291cmNlXTsKKyAgICByZXR1cm4gW3Nl
bGYgYXBwbHk6ZGlmZnVzZUxpZ2h0aW5nRmlsdGVyLCBzcmMsIGxpZ2h0U3JjLCBpbnB1dExpZ2h0
aW5nQ29sb3IsIGlucHV0U3VyZmFjZVNjYWxlLCBpbnB1dERpZmZ1c2VDb25zdGFudCwKKyAgICAg
ICAgaW5wdXRLZXJuZWxVbml0TGVuZ3RoWCwgaW5wdXRLZXJuZWxVbml0TGVuZ3RoWSwgbmlsXTsK
K30KKworQGVuZAorCisKSW5kZXg6IHF1YXJ0ei9xdWFydHovZmlsdGVycy9XS0Rpc3RhbnRMaWdo
dEZpbHRlci5jaWtlcm5lbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09CmRpZmYgLU5wdSBxdWFydHovcXVhcnR6L2ZpbHRl
cnMvV0tEaXN0YW50TGlnaHRGaWx0ZXIuY2lrZXJuZWwKLS0tIHF1YXJ0ei9xdWFydHovZmlsdGVy
cy9XS0Rpc3RhbnRMaWdodEZpbHRlci5jaWtlcm5lbAkxIEphbiAxOTcwIDAwOjAwOjAwIC0wMDAw
CisrKyBxdWFydHovcXVhcnR6L2ZpbHRlcnMvV0tEaXN0YW50TGlnaHRGaWx0ZXIuY2lrZXJuZWwJ
MzAgT2N0IDIwMDUgMTA6NTM6MDMgLTAwMDAKQEAgLTAsMCArMSw0IEBACitrZXJuZWwgdmVjNCBi
YXNpYyhzYW1wbGVyIGltYWdlKQoreworICAgIHJldHVybiB2ZWM0KDEuMCwwLjAsMC4wLDEuMCk7
Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpJbmRleDogcXVhcnR6L3F1YXJ0ei9maWx0
ZXJzL1dLRGlzdGFudExpZ2h0RmlsdGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpkaWZmIC1OcHUgcXVhcnR6L3F1
YXJ0ei9maWx0ZXJzL1dLRGlzdGFudExpZ2h0RmlsdGVyLmgKLS0tIHF1YXJ0ei9xdWFydHovZmls
dGVycy9XS0Rpc3RhbnRMaWdodEZpbHRlci5oCTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAKKysr
IHF1YXJ0ei9xdWFydHovZmlsdGVycy9XS0Rpc3RhbnRMaWdodEZpbHRlci5oCTEzIE9jdCAyMDA1
IDA3OjI2OjM1IC0wMDAwCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDUgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
bXBvcnQgPFF1YXJ0ekNvcmUvQ29yZUltYWdlLmg+CisKK0BpbnRlcmZhY2UgV0tEaXN0YW50TGln
aHRGaWx0ZXIgOiBDSUZpbHRlciB7CisgICAgTlNOdW1iZXIgKmlucHV0QXppbXV0aDsKKyAgICBO
U051bWJlciAqaW5wdXRFbGV2YXRpb247Cit9CitAZW5kCkluZGV4OiBxdWFydHovcXVhcnR6L2Zp
bHRlcnMvV0tEaXN0YW50TGlnaHRGaWx0ZXIubQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CmRpZmYgLU5wdSBxdWFydHov
cXVhcnR6L2ZpbHRlcnMvV0tEaXN0YW50TGlnaHRGaWx0ZXIubQotLS0gcXVhcnR6L3F1YXJ0ei9m
aWx0ZXJzL1dLRGlzdGFudExpZ2h0RmlsdGVyLm0JMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMAor
KysgcXVhcnR6L3F1YXJ0ei9maWx0ZXJzL1dLRGlzdGFudExpZ2h0RmlsdGVyLm0JMzAgT2N0IDIw
MDUgMTA6MTI6NTAgLTAwMDAKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwNSBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKyAK
KyNpbXBvcnQgIldLRGlzdGFudExpZ2h0RmlsdGVyLmgiCisKK3N0YXRpYyBDSUtlcm5lbCAqZGlz
dGFudExpZ2h0RmlsdGVyID0gbmlsOworCitAaW1wbGVtZW50YXRpb24gV0tEaXN0YW50TGlnaHRG
aWx0ZXIKKworKyAodm9pZClpbml0aWFsaXplCit7CisgICAgW0NJRmlsdGVyIHJlZ2lzdGVyRmls
dGVyTmFtZTpAIldLRGlzdGFudExpZ2h0IgorICAgICAgICBjb25zdHJ1Y3Rvcjogc2VsZgorICAg
ICAgICBjbGFzc0F0dHJpYnV0ZXM6IFtOU0RpY3Rpb25hcnkgZGljdGlvbmFyeVdpdGhPYmplY3Rz
QW5kS2V5czoKKyAgICAgICAgIEAiV2ViS2l0IERpc3RhbnQgTGlnaHQiLCBrQ0lBdHRyaWJ1dGVG
aWx0ZXJEaXNwbGF5TmFtZSwKKyAgICAgICAgW05TQXJyYXkgYXJyYXlXaXRoT2JqZWN0czoga0NJ
Q2F0ZWdvcnlTdHlsaXplLCBrQ0lDYXRlZ29yeVZpZGVvLAorICAgICAgICAgICAga0NJQ2F0ZWdv
cnlTdGlsbEltYWdlLCBrQ0lDYXRlZ29yeU5vblNxdWFyZVBpeGVscyxuaWxdLCBrQ0lBdHRyaWJ1
dGVGaWx0ZXJDYXRlZ29yaWVzLAorICAgICAgICBbTlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnlXaXRo
T2JqZWN0c0FuZEtleXM6CisgICAgICAgICAgICBrQ0lBdHRyaWJ1dGVUeXBlQW5nbGUsIGtDSUF0
dHJpYnV0ZVR5cGUsCisgICAgICAgICAgICBuaWxdLCBAImlucHV0QXppbXV0aCIsCisgICAgICAg
IFtOU0RpY3Rpb25hcnkgZGljdGlvbmFyeVdpdGhPYmplY3RzQW5kS2V5czoKKyAgICAgICAgICAg
IGtDSUF0dHJpYnV0ZVR5cGVBbmdsZSwga0NJQXR0cmlidXRlVHlwZSwKKyAgICAgICAgICAgIG5p
bF0sIEAiaW5wdXRFbGV2YXRpb24iLAorICAgICAgICBuaWxdXTsKK30KKworKyAoQ0lGaWx0ZXIg
KilmaWx0ZXJXaXRoTmFtZTooTlNTdHJpbmcgKiluYW1lCit7CisgICAgQ0lGaWx0ZXIgKmZpbHRl
cjsKKyAgICBmaWx0ZXIgPSBbW3NlbGYgYWxsb2NdIGluaXRdOworICAgIHJldHVybiBbZmlsdGVy
IGF1dG9yZWxlYXNlXTsKK30KKworLSAoaWQpaW5pdAoreworICAgIGlmKCFkaXN0YW50TGlnaHRG
aWx0ZXIpIHsKKyAgICAgICAgTlNCdW5kbGUgKmJ1bmRsZSA9IFtOU0J1bmRsZSBidW5kbGVGb3JD
bGFzczpbc2VsZiBjbGFzc11dOworICAgICAgICBOU1N0cmluZyAqa2VybmVsRmlsZSA9IFtidW5k
bGUgcGF0aEZvclJlc291cmNlOkAiV0tEaXN0YW50TGlnaHRGaWx0ZXIiIG9mVHlwZTpAImNpa2Vy
bmVsIl07CisgICAgICAgIE5TU3RyaW5nICpjb2RlID0gW05TU3RyaW5nIHN0cmluZ1dpdGhDb250
ZW50c09mRmlsZTprZXJuZWxGaWxlXTsKKyAgICAgICAgTlNBcnJheSAqa2VybmVscyA9IFtDSUtl
cm5lbCBrZXJuZWxzV2l0aFN0cmluZzpjb2RlXTsKKyAgICAgICAgZGlzdGFudExpZ2h0RmlsdGVy
ID0gW1trZXJuZWxzIG9iamVjdEF0SW5kZXg6MF0gcmV0YWluXTsKKyAgICB9CisgICAgcmV0dXJu
IFtzdXBlciBpbml0XTsKK30KKworLSAoQ0lJbWFnZSAqKW91dHB1dEltYWdlCit7CisgICAgcmV0
dXJuIFtzZWxmIGFwcGx5OmRpc3RhbnRMaWdodEZpbHRlciwgaW5wdXRBemltdXRoLCBpbnB1dEVs
ZXZhdGlvbiwgbmlsXTsKK30KKworQGVuZApJbmRleDogcXVhcnR6L3F1YXJ0ei9maWx0ZXJzL1dL
TGlnaHRWZWN0b3JGaWx0ZXIuY2lrZXJuZWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpkaWZmIC1OcHUgcXVhcnR6L3F1
YXJ0ei9maWx0ZXJzL1dLTGlnaHRWZWN0b3JGaWx0ZXIuY2lrZXJuZWwKLS0tIHF1YXJ0ei9xdWFy
dHovZmlsdGVycy9XS0xpZ2h0VmVjdG9yRmlsdGVyLmNpa2VybmVsCTEgSmFuIDE5NzAgMDA6MDA6
MDAgLTAwMDAKKysrIHF1YXJ0ei9xdWFydHovZmlsdGVycy9XS0xpZ2h0VmVjdG9yRmlsdGVyLmNp
a2VybmVsCTMwIE9jdCAyMDA1IDEwOjUzOjAzIC0wMDAwCkBAIC0wLDAgKzEsNCBAQAora2VybmVs
IHZlYzQgYmFzaWMoc2FtcGxlciBpbWFnZSkKK3sKKyAgICByZXR1cm4gdmVjNCgxLjAsMC4wLDAu
MCwxLjApOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKSW5kZXg6IHF1YXJ0ei9xdWFy
dHovZmlsdGVycy9XS0xpZ2h0VmVjdG9yRmlsdGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpkaWZmIC1OcHUgcXVh
cnR6L3F1YXJ0ei9maWx0ZXJzL1dLTGlnaHRWZWN0b3JGaWx0ZXIuaAotLS0gcXVhcnR6L3F1YXJ0
ei9maWx0ZXJzL1dLTGlnaHRWZWN0b3JGaWx0ZXIuaAkxIEphbiAxOTcwIDAwOjAwOjAwIC0wMDAw
CisrKyBxdWFydHovcXVhcnR6L2ZpbHRlcnMvV0tMaWdodFZlY3RvckZpbHRlci5oCTMwIE9jdCAy
MDA1IDA5OjM3OjI2IC0wMDAwCkluZGV4OiBxdWFydHovcXVhcnR6L2ZpbHRlcnMvV0tMaWdodFZl
Y3RvckZpbHRlci5tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtTnB1IHF1YXJ0ei9xdWFydHovZmlsdGVycy9X
S0xpZ2h0VmVjdG9yRmlsdGVyLm0KLS0tIHF1YXJ0ei9xdWFydHovZmlsdGVycy9XS0xpZ2h0VmVj
dG9yRmlsdGVyLm0JMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMAorKysgcXVhcnR6L3F1YXJ0ei9m
aWx0ZXJzL1dLTGlnaHRWZWN0b3JGaWx0ZXIubQkzMCBPY3QgMjAwNSAwOTozNzoyNiAtMDAwMApJ
bmRleDogcXVhcnR6L3F1YXJ0ei9maWx0ZXJzL1dLTm9ybWFsTWFwRmlsdGVyLmNpa2VybmVsCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KZGlmZiAtTnB1IHF1YXJ0ei9xdWFydHovZmlsdGVycy9XS05vcm1hbE1hcEZpbHRl
ci5jaWtlcm5lbAotLS0gcXVhcnR6L3F1YXJ0ei9maWx0ZXJzL1dLTm9ybWFsTWFwRmlsdGVyLmNp
a2VybmVsCTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAKKysrIHF1YXJ0ei9xdWFydHovZmlsdGVy
cy9XS05vcm1hbE1hcEZpbHRlci5jaWtlcm5lbAkzMCBPY3QgMjAwNSAxMDo1MzowMyAtMDAwMApA
QCAtMCwwICsxLDI1IEBACitrZXJuZWwgdmVjNCBjb252b2x2ZShzYW1wbGVyIGltYWdlLCAgZmxv
YXQgZGl2aXNvciwgZmxvYXQgYmlhcywKKwkJCWZsb2F0IG0wMCwgZmxvYXQgbTAxLCBmbG9hdCBt
MDIsCisJCQlmbG9hdCBtMTAsIGZsb2F0IG0xMSwgZmxvYXQgbTEyLAorCQkJZmxvYXQgbTIwLCBm
bG9hdCBtMjEsIGZsb2F0IG0yMikKK3sKKyAgICB2ZWM0IGNvbG91cj12ZWM0KDAuMCwgMC4wLCAw
LjAsIDAuMCk7CisgICAgdmVjMiBwb3M9c2FtcGxlckNvb3JkKGltYWdlKTsKKyAgICBjb2xvdXI9
c2FtcGxlKGltYWdlLCBwb3MrdmVjMigtMSwtMSkpKm0wMDsKKyAgICBjb2xvdXIrPXNhbXBsZShp
bWFnZSwgcG9zK3ZlYzIoLTEsIDAuMCkpKm0wMTsKKyAgICBjb2xvdXIrPXNhbXBsZShpbWFnZSwg
cG9zK3ZlYzIoLTEsIDEpKSptMDI7CisgICAgY29sb3VyKz1zYW1wbGUoaW1hZ2UsIHBvcyt2ZWMy
KDAsLTEpKSptMTA7CisgICAgY29sb3VyKz1zYW1wbGUoaW1hZ2UsIHBvcykqbTExOworICAgIGNv
bG91cis9c2FtcGxlKGltYWdlLCBwb3MrdmVjMigwLCAxLjApKSptMTI7CisgICAgY29sb3VyKz1z
YW1wbGUoaW1hZ2UsIHBvcyt2ZWMyKDEsLTEpKSptMjA7CisgICAgY29sb3VyKz1zYW1wbGUoaW1h
Z2UsIHBvcyt2ZWMyKDEsIDAuMCkpKm0yMTsKKyAgICBjb2xvdXIrPXNhbXBsZShpbWFnZSwgcG9z
K3ZlYzIoMSwgMSkpKm0yMjsKKyAgICByZXR1cm4gKCgoY29sb3VyL2Rpdmlzb3IpK2JpYXMpKTsK
K30KKwora2VybmVsIHZlYzQgbWVyZ2VOb3JtYWxzKHNhbXBsZXIgTngsIHNhbXBsZXIgTnksIHNh
bXBsZXIgc3JjLCBmbG9hdCBzdXJmYWNlU2NhbGUpCit7CisgICAgdmVjMyBOPXZlYzMoc2FtcGxl
KE54LCBzYW1wbGVyQ29vcmQoTngpKS5hKiBzdXJmYWNlU2NhbGUsIHNhbXBsZShOeSwgc2FtcGxl
ckNvb3JkKE55KSkuYSogc3VyZmFjZVNjYWxlLCAxLjApOworICAgIE4gPSBOL3NxcnQoZG90KE4s
TikpOworICAgIHJldHVybiB2ZWM0KE4ueCwgTi55LCBOLnosIHNhbXBsZShzcmMsIHNhbXBsZXJD
b29yZChzcmMpKS5hKTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCkluZGV4OiBxdWFy
dHovcXVhcnR6L2ZpbHRlcnMvV0tOb3JtYWxNYXBGaWx0ZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CmRpZmYgLU5w
dSBxdWFydHovcXVhcnR6L2ZpbHRlcnMvV0tOb3JtYWxNYXBGaWx0ZXIuaAotLS0gcXVhcnR6L3F1
YXJ0ei9maWx0ZXJzL1dLTm9ybWFsTWFwRmlsdGVyLmgJMSBKYW4gMTk3MCAwMDowMDowMCAtMDAw
MAorKysgcXVhcnR6L3F1YXJ0ei9maWx0ZXJzL1dLTm9ybWFsTWFwRmlsdGVyLmgJMTMgT2N0IDIw
MDUgMDc6MjY6MzUgLTAwMDAKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwNSBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2ltcG9ydCA8UXVhcnR6Q29yZS9Db3JlSW1hZ2UuaD4KKworQGludGVyZmFjZSBXS05vcm1hbE1h
cEZpbHRlciA6IENJRmlsdGVyIHsKKyAgICBDSUltYWdlICppbnB1dEltYWdlOworICAgIE5TTnVt
YmVyICppbnB1dFN1cmZhY2VTY2FsZTsKK30KK0BlbmQKKwpJbmRleDogcXVhcnR6L3F1YXJ0ei9m
aWx0ZXJzL1dLTm9ybWFsTWFwRmlsdGVyLm0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpkaWZmIC1OcHUgcXVhcnR6L3F1
YXJ0ei9maWx0ZXJzL1dLTm9ybWFsTWFwRmlsdGVyLm0KLS0tIHF1YXJ0ei9xdWFydHovZmlsdGVy
cy9XS05vcm1hbE1hcEZpbHRlci5tCTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAKKysrIHF1YXJ0
ei9xdWFydHovZmlsdGVycy9XS05vcm1hbE1hcEZpbHRlci5tCTEzIE9jdCAyMDA1IDA3OjI2OjM1
IC0wMDAwCkBAIC0wLDAgKzEsOTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgQXBwbGUg
Q29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbXBvcnQgIldL
Tm9ybWFsTWFwRmlsdGVyLmgiCisKK3N0YXRpYyBDSUtlcm5lbCAqY29udm9sdmVLZXJuZWwgPSBu
aWw7CitzdGF0aWMgQ0lLZXJuZWwgKm5vcm1hbE1hcEtlcm5lbCA9IG5pbDsKKworQGltcGxlbWVu
dGF0aW9uIFdLTm9ybWFsTWFwRmlsdGVyCisKKysgKHZvaWQpaW5pdGlhbGl6ZQoreworICAgIFtD
SUZpbHRlciByZWdpc3RlckZpbHRlck5hbWU6QCJXS05vcm1hbE1hcCIKKyAgICAgICAgY29uc3Ry
dWN0b3I6c2VsZgorICAgICAgICBjbGFzc0F0dHJpYnV0ZXM6W05TRGljdGlvbmFyeSBkaWN0aW9u
YXJ5V2l0aE9iamVjdHNBbmRLZXlzOgorICAgICAgICAgQCJXZWJLaXQgTm9ybWFsIE1hcCIsIGtD
SUF0dHJpYnV0ZUZpbHRlckRpc3BsYXlOYW1lLAorICAgICAgICBbTlNBcnJheSBhcnJheVdpdGhP
YmplY3RzOiBrQ0lDYXRlZ29yeUJsdXIsIGtDSUNhdGVnb3J5VmlkZW8sCisgICAgICAgICAgICBr
Q0lDYXRlZ29yeVN0aWxsSW1hZ2UsIGtDSUNhdGVnb3J5Tm9uU3F1YXJlUGl4ZWxzLCBuaWxdLCBr
Q0lBdHRyaWJ1dGVGaWx0ZXJDYXRlZ29yaWVzLAorICAgICAgICBuaWxdXTsKK30KKworKyAoQ0lG
aWx0ZXIgKilmaWx0ZXJXaXRoTmFtZTooTlNTdHJpbmcgKiluYW1lCit7CisgICAgQ0lGaWx0ZXIg
KmZpbHRlcjsKKyAgICBmaWx0ZXIgPSBbW3NlbGYgYWxsb2NdIGluaXRdOworICAgIHJldHVybiBb
ZmlsdGVyIGF1dG9yZWxlYXNlXTsKK30KKworLSAoaWQpaW5pdAoreworICAgIGlmKCFub3JtYWxN
YXBLZXJuZWwpIHsKKyAgICAgICAgTlNCdW5kbGUgKmJ1bmRsZSA9IFtOU0J1bmRsZSBidW5kbGVG
b3JDbGFzczpbc2VsZiBjbGFzc11dOworICAgICAgICBOU1N0cmluZyAqa2VybmVsRmlsZSA9IFti
dW5kbGUgcGF0aEZvclJlc291cmNlOkAiV0tOb3JtYWxNYXBGaWx0ZXIiIG9mVHlwZTpAImNpa2Vy
bmVsIl07CisgICAgICAgIE5TU3RyaW5nICpjb2RlID0gW05TU3RyaW5nIHN0cmluZ1dpdGhDb250
ZW50c09mRmlsZTprZXJuZWxGaWxlXTsKKyAgICAgICAgTlNBcnJheSAqa2VybmVscyA9IFtDSUtl
cm5lbCBrZXJuZWxzV2l0aFN0cmluZzpjb2RlXTsKKyAgICAgICAgY29udm9sdmVLZXJuZWwgPSBb
W2tlcm5lbHMgb2JqZWN0QXRJbmRleDowXSByZXRhaW5dOworICAgICAgICBub3JtYWxNYXBLZXJu
ZWwgPSBbW2tlcm5lbHMgb2JqZWN0QXRJbmRleDoxXSByZXRhaW5dOworICAgIH0KKyAgICByZXR1
cm4gW3N1cGVyIGluaXRdOworfQorCistIChOU0FycmF5ICopeENvbnZvbHZlQXJncyB7CisgICAg
cmV0dXJuIFtOU0FycmF5IGFycmF5V2l0aE9iamVjdHM6CisgICAgICAgIFtOU051bWJlciBudW1i
ZXJXaXRoRmxvYXQ6NF0sCisgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6MF0sCisg
ICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6MV0sIFtOU051bWJlciBudW1iZXJXaXRo
RmxvYXQ6Ml0sIFtOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6MV0sCisgICAgICAgIFtOU051bWJl
ciBudW1iZXJXaXRoRmxvYXQ6MF0sIFtOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6MF0sIFtOU051
bWJlciBudW1iZXJXaXRoRmxvYXQ6MF0sCisgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoRmxv
YXQ6LTFdLCBbTlNOdW1iZXIgbnVtYmVyV2l0aEZsb2F0Oi0yXSwgW05TTnVtYmVyIG51bWJlcldp
dGhGbG9hdDotMV0sCisgICAgICAgIG5pbF07Cit9CisKKy0gKE5TQXJyYXkgKil5Q29udm9sdmVB
cmdzIHsKKyAgICByZXR1cm4gW05TQXJyYXkgYXJyYXlXaXRoT2JqZWN0czoKKyAgICAgICAgW05T
TnVtYmVyIG51bWJlcldpdGhGbG9hdDo0XSwKKyAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhG
bG9hdDowXSwKKyAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhGbG9hdDoxXSwgW05TTnVtYmVy
IG51bWJlcldpdGhGbG9hdDowXSwgW05TTnVtYmVyIG51bWJlcldpdGhGbG9hdDotMV0sCisgICAg
ICAgIFtOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6Ml0sIFtOU051bWJlciBudW1iZXJXaXRoRmxv
YXQ6MF0sIFtOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6LTJdLAorICAgICAgICBbTlNOdW1iZXIg
bnVtYmVyV2l0aEZsb2F0OjFdLCBbTlNOdW1iZXIgbnVtYmVyV2l0aEZsb2F0OjBdLCBbTlNOdW1i
ZXIgbnVtYmVyV2l0aEZsb2F0Oi0xXSwKKyAgICAgICAgbmlsXTsKK30KKworLSAoQ0lJbWFnZSAq
KW91dHB1dEltYWdlCit7CisgICAgQ0lTYW1wbGVyICppbWFnZSA9IFtDSVNhbXBsZXIgc2FtcGxl
cldpdGhJbWFnZTppbnB1dEltYWdlXTsKKyAgICBOU0RpY3Rpb25hcnkgKmFwcGx5T3B0aW9ucyA9
IFtOU0RpY3Rpb25hcnkgZGljdGlvbmFyeVdpdGhPYmplY3RzQW5kS2V5czpbaW1hZ2UgZGVmaW5p
dGlvbl0sIGtDSUFwcGx5T3B0aW9uRGVmaW5pdGlvbiwgbmlsXTsKKyAgICAKKyAgICBDSUltYWdl
ICpjb252b2x2ZVggPSBbc2VsZiBhcHBseTpjb252b2x2ZUtlcm5lbCBhcmd1bWVudHM6W3NlbGYg
eENvbnZvbHZlQXJnc10gb3B0aW9uczphcHBseU9wdGlvbnNdOworICAgIENJSW1hZ2UgKmNvbnZv
bHZlWSA9IFtzZWxmIGFwcGx5OmNvbnZvbHZlS2VybmVsIGFyZ3VtZW50czpbc2VsZiB5Q29udm9s
dmVBcmdzXSBvcHRpb25zOmFwcGx5T3B0aW9uc107CisgICAgQ0lTYW1wbGVyICpzYW1wbGVyWCA9
IFtDSVNhbXBsZXIgc2FtcGxlcldpdGhJbWFnZTpjb252b2x2ZVhdOworICAgIENJU2FtcGxlciAq
c2FtcGxlclkgPSBbQ0lTYW1wbGVyIHNhbXBsZXJXaXRoSW1hZ2U6Y29udm9sdmVZXTsKKyAgICAK
KyAgICBOU0FycmF5ICpub3JtYWxNYXBBcmdzID0gW05TQXJyYXkgYXJyYXlXaXRoT2JqZWN0czpz
YW1wbGVyWCwgc2FtcGxlclksIGltYWdlLCBpbnB1dFN1cmZhY2VTY2FsZV07CisgICAgcmV0dXJu
IFtzZWxmIGFwcGx5Om5vcm1hbE1hcEtlcm5lbCBhcmd1bWVudHM6bm9ybWFsTWFwQXJncyBvcHRp
b25zOmFwcGx5T3B0aW9uc107Cit9CisKK0BlbmQKSW5kZXg6IHF1YXJ0ei9xdWFydHovZmlsdGVy
cy9XS1BvaW50TGlnaHRGaWx0ZXIuY2lrZXJuZWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpkaWZmIC1OcHUgcXVhcnR6
L3F1YXJ0ei9maWx0ZXJzL1dLUG9pbnRMaWdodEZpbHRlci5jaWtlcm5lbAotLS0gcXVhcnR6L3F1
YXJ0ei9maWx0ZXJzL1dLUG9pbnRMaWdodEZpbHRlci5jaWtlcm5lbAkxIEphbiAxOTcwIDAwOjAw
OjAwIC0wMDAwCisrKyBxdWFydHovcXVhcnR6L2ZpbHRlcnMvV0tQb2ludExpZ2h0RmlsdGVyLmNp
a2VybmVsCTMwIE9jdCAyMDA1IDEwOjUzOjAzIC0wMDAwCkBAIC0wLDAgKzEsNCBAQAora2VybmVs
IHZlYzQgYmFzaWMoc2FtcGxlciBpbWFnZSkKK3sKKyAgICByZXR1cm4gdmVjNCgxLjAsMC4wLDAu
MCwxLjApOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKSW5kZXg6IHF1YXJ0ei9xdWFy
dHovZmlsdGVycy9XS1BvaW50TGlnaHRGaWx0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CmRpZmYgLU5wdSBxdWFy
dHovcXVhcnR6L2ZpbHRlcnMvV0tQb2ludExpZ2h0RmlsdGVyLmgKLS0tIHF1YXJ0ei9xdWFydHov
ZmlsdGVycy9XS1BvaW50TGlnaHRGaWx0ZXIuaAkxIEphbiAxOTcwIDAwOjAwOjAwIC0wMDAwCisr
KyBxdWFydHovcXVhcnR6L2ZpbHRlcnMvV0tQb2ludExpZ2h0RmlsdGVyLmgJMTMgT2N0IDIwMDUg
MDc6MjY6MzUgLTAwMDAKQEAgLTAsMCArMSwzMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
NSBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lt
cG9ydCA8UXVhcnR6Q29yZS9Db3JlSW1hZ2UuaD4KKworQGludGVyZmFjZSBXS1BvaW50TGlnaHRG
aWx0ZXIgOiBDSUZpbHRlciB7CisgICAgQ0lWZWN0b3IgKmlucHV0TGlnaHRQb3NpdGlvbjsKK30K
K0BlbmQKSW5kZXg6IHF1YXJ0ei9xdWFydHovZmlsdGVycy9XS1BvaW50TGlnaHRGaWx0ZXIubQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09CmRpZmYgLU5wdSBxdWFydHovcXVhcnR6L2ZpbHRlcnMvV0tQb2ludExpZ2h0Rmls
dGVyLm0KLS0tIHF1YXJ0ei9xdWFydHovZmlsdGVycy9XS1BvaW50TGlnaHRGaWx0ZXIubQkxIEph
biAxOTcwIDAwOjAwOjAwIC0wMDAwCisrKyBxdWFydHovcXVhcnR6L2ZpbHRlcnMvV0tQb2ludExp
Z2h0RmlsdGVyLm0JMTMgT2N0IDIwMDUgMDc6MjY6MzUgLTAwMDAKQEAgLTAsMCArMSw3MCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKyAKKyNpbXBvcnQgIldLUG9pbnRMaWdodEZpbHRlci5oIgorCitz
dGF0aWMgQ0lLZXJuZWwgKnBvaW50TGlnaHRGaWx0ZXIgPSBuaWw7CisKK0BpbXBsZW1lbnRhdGlv
biBXS1BvaW50TGlnaHRGaWx0ZXIKKworKyAodm9pZClpbml0aWFsaXplCit7CisgICAgW0NJRmls
dGVyIHJlZ2lzdGVyRmlsdGVyTmFtZTpAIldLUG9pbnRMaWdodCIKKyAgICAgICAgY29uc3RydWN0
b3I6IHNlbGYKKyAgICAgICAgY2xhc3NBdHRyaWJ1dGVzOiBbTlNEaWN0aW9uYXJ5IGRpY3Rpb25h
cnlXaXRoT2JqZWN0c0FuZEtleXM6CisgICAgICAgICBAIldlYktpdCBQb2ludCBMaWdodCIsIGtD
SUF0dHJpYnV0ZUZpbHRlckRpc3BsYXlOYW1lLAorICAgICAgICBbTlNBcnJheSBhcnJheVdpdGhP
YmplY3RzOiBrQ0lDYXRlZ29yeVN0eWxpemUsIGtDSUNhdGVnb3J5VmlkZW8sCisgICAgICAgICAg
ICBrQ0lDYXRlZ29yeVN0aWxsSW1hZ2UsIGtDSUNhdGVnb3J5Tm9uU3F1YXJlUGl4ZWxzLG5pbF0s
IGtDSUF0dHJpYnV0ZUZpbHRlckNhdGVnb3JpZXMsCisgICAgICAgIFtOU0RpY3Rpb25hcnkgZGlj
dGlvbmFyeVdpdGhPYmplY3RzQW5kS2V5czoKKyAgICAgICAgICAgIGtDSUF0dHJpYnV0ZVR5cGVQ
b3NpdGlvbjMsIGtDSUF0dHJpYnV0ZVR5cGUsCisgICAgICAgICAgICBuaWxdLCBAImlucHV0TGln
aHRQb3NpdGlvbiIsCisgICAgICAgIG5pbF1dOworfQorCisrIChDSUZpbHRlciAqKWZpbHRlcldp
dGhOYW1lOihOU1N0cmluZyAqKW5hbWUKK3sKKyAgICBDSUZpbHRlciAqZmlsdGVyOworICAgIGZp
bHRlciA9IFtbc2VsZiBhbGxvY10gaW5pdF07CisgICAgcmV0dXJuIFtmaWx0ZXIgYXV0b3JlbGVh
c2VdOworfQorCistIChpZClpbml0Cit7CisgICAgaWYoIXBvaW50TGlnaHRGaWx0ZXIpIHsKKyAg
ICAgICAgTlNCdW5kbGUgKmJ1bmRsZSA9IFtOU0J1bmRsZSBidW5kbGVGb3JDbGFzczpbc2VsZiBj
bGFzc11dOworICAgICAgICBOU1N0cmluZyAqa2VybmVsRmlsZSA9IFtidW5kbGUgcGF0aEZvclJl
c291cmNlOkAiV0tQb2ludExpZ2h0RmlsdGVyIiBvZlR5cGU6QCJjaWtlcm5lbCJdOworICAgICAg
ICBOU1N0cmluZyAqY29kZSA9IFtOU1N0cmluZyBzdHJpbmdXaXRoQ29udGVudHNPZkZpbGU6a2Vy
bmVsRmlsZV07CisgICAgICAgIE5TQXJyYXkgKmtlcm5lbHMgPSBbQ0lLZXJuZWwga2VybmVsc1dp
dGhTdHJpbmc6Y29kZV07CisgICAgICAgIHBvaW50TGlnaHRGaWx0ZXIgPSBbW2tlcm5lbHMgb2Jq
ZWN0QXRJbmRleDowXSByZXRhaW5dOworICAgIH0KKyAgICByZXR1cm4gW3N1cGVyIGluaXRdOwor
fQorCistIChDSUltYWdlICopb3V0cHV0SW1hZ2UKK3sKKyAgICByZXR1cm4gW3NlbGYgYXBwbHk6
cG9pbnRMaWdodEZpbHRlciwgaW5wdXRMaWdodFBvc2l0aW9uLCBuaWxdOworfQorCitAZW5kCklu
ZGV4OiBxdWFydHovcXVhcnR6L2ZpbHRlcnMvV0tTcGVjdWxhckxpZ2h0aW5nRmlsdGVyLmNpa2Vy
bmVsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KZGlmZiAtTnB1IHF1YXJ0ei9xdWFydHovZmlsdGVycy9XS1NwZWN1bGFy
TGlnaHRpbmdGaWx0ZXIuY2lrZXJuZWwKLS0tIHF1YXJ0ei9xdWFydHovZmlsdGVycy9XS1NwZWN1
bGFyTGlnaHRpbmdGaWx0ZXIuY2lrZXJuZWwJMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMAorKysg
cXVhcnR6L3F1YXJ0ei9maWx0ZXJzL1dLU3BlY3VsYXJMaWdodGluZ0ZpbHRlci5jaWtlcm5lbAkz
MCBPY3QgMjAwNSAxMDo1MzowMyAtMDAwMApAQCAtMCwwICsxLDQgQEAKK2tlcm5lbCB2ZWM0IGJh
c2ljKHNhbXBsZXIgaW1hZ2UpCit7CisgICAgcmV0dXJuIHZlYzQoMS4wLDAuMCwwLjAsMS4wKTsK
K30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCkluZGV4OiBxdWFydHovcXVhcnR6L2ZpbHRl
cnMvV0tTcGVjdWxhckxpZ2h0aW5nRmlsdGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpkaWZmIC1OcHUgcXVhcnR6
L3F1YXJ0ei9maWx0ZXJzL1dLU3BlY3VsYXJMaWdodGluZ0ZpbHRlci5oCi0tLSBxdWFydHovcXVh
cnR6L2ZpbHRlcnMvV0tTcGVjdWxhckxpZ2h0aW5nRmlsdGVyLmgJMSBKYW4gMTk3MCAwMDowMDow
MCAtMDAwMAorKysgcXVhcnR6L3F1YXJ0ei9maWx0ZXJzL1dLU3BlY3VsYXJMaWdodGluZ0ZpbHRl
ci5oCTEzIE9jdCAyMDA1IDA3OjI2OjM1IC0wMDAwCkBAIC0wLDAgKzEsMzggQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDUgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBD
T01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENP
TVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbXBvcnQgPFF1YXJ0ekNvcmUvQ29yZUltYWdlLmg+CisKKworQGludGVy
ZmFjZSBXS1NwZWN1bGFyTGlnaHRpbmdGaWx0ZXIgOiBDSUZpbHRlciB7CisgICAgQ0lJbWFnZSAq
aW5wdXRJbWFnZTsKKyAgICBDSUltYWdlICppbnB1dExpZ2h0U291cmNlOworICAgIENJQ29sb3Ig
KmlucHV0TGlnaHRpbmdDb2xvcjsKKyAgICBOU051bWJlciAqaW5wdXRTdXJmYWNlU2NhbGU7Cisg
ICAgTlNOdW1iZXIgKmlucHV0U3BlY3VsYXJDb25zdGFudDsKKyAgICBOU051bWJlciAqaW5wdXRT
cGVjdWxhckV4cG9uZW50OworICAgIENJVmVjdG9yICppbnB1dEtlcm5lbFVuaXRMZW5ndGg7Cit9
CitAZW5kCkluZGV4OiBxdWFydHovcXVhcnR6L2ZpbHRlcnMvV0tTcGVjdWxhckxpZ2h0aW5nRmls
dGVyLm0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQpkaWZmIC1OcHUgcXVhcnR6L3F1YXJ0ei9maWx0ZXJzL1dLU3BlY3Vs
YXJMaWdodGluZ0ZpbHRlci5tCi0tLSBxdWFydHovcXVhcnR6L2ZpbHRlcnMvV0tTcGVjdWxhckxp
Z2h0aW5nRmlsdGVyLm0JMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMAorKysgcXVhcnR6L3F1YXJ0
ei9maWx0ZXJzL1dLU3BlY3VsYXJMaWdodGluZ0ZpbHRlci5tCTEzIE9jdCAyMDA1IDA3OjI2OjM1
IC0wMDAwCkBAIC0wLDAgKzEsOTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgQXBwbGUg
Q29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbXBvcnQgIldL
U3BlY3VsYXJMaWdodGluZ0ZpbHRlci5oIgorCitzdGF0aWMgQ0lLZXJuZWwgKnNwZWN1bGFyTGln
aHRpbmdGaWx0ZXIgPSBuaWw7CisKK0BpbXBsZW1lbnRhdGlvbiBXS1NwZWN1bGFyTGlnaHRpbmdG
aWx0ZXIKKworKyAodm9pZClpbml0aWFsaXplCit7CisgICAgW0NJRmlsdGVyIHJlZ2lzdGVyRmls
dGVyTmFtZTpAIldLU3BlY3VsYXJMaWdodGluZyIgIAorICAgICAgICBjb25zdHJ1Y3Rvcjogc2Vs
ZgorICAgICAgICBjbGFzc0F0dHJpYnV0ZXM6IFtOU0RpY3Rpb25hcnkgZGljdGlvbmFyeVdpdGhP
YmplY3RzQW5kS2V5czoKKyAgICAgICAgIEAiV2ViS2l0IFNwZWN1bGFyIExpZ2h0aW5nIiwga0NJ
QXR0cmlidXRlRmlsdGVyRGlzcGxheU5hbWUsCisgICAgICAgIFtOU0FycmF5IGFycmF5V2l0aE9i
amVjdHM6IGtDSUNhdGVnb3J5U3R5bGl6ZSwga0NJQ2F0ZWdvcnlWaWRlbywKKyAgICAgICAgICAg
IGtDSUNhdGVnb3J5U3RpbGxJbWFnZSwga0NJQ2F0ZWdvcnlOb25TcXVhcmVQaXhlbHMsbmlsXSwg
a0NJQXR0cmlidXRlRmlsdGVyQ2F0ZWdvcmllcywKKyAgICAgICAgW05TRGljdGlvbmFyeSBkaWN0
aW9uYXJ5V2l0aE9iamVjdHNBbmRLZXlzOgorICAgICAgICAgICAgW0NJQ29sb3IgY29sb3JXaXRo
UmVkOjEuMCBncmVlbjoxLjAgYmx1ZToxLjAgYWxwaGE6MS4wXSwKKyAgICAgICAgICAgICBrQ0lB
dHRyaWJ1dGVEZWZhdWx0LCBuaWxdLCAgQCJpbnB1dExpZ2h0aW5nQ29sb3IiLAorICAgICAgICBb
TlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnlXaXRoT2JqZWN0c0FuZEtleXM6CisgICAgICAgICAgICBb
TlNOdW1iZXIgbnVtYmVyV2l0aERvdWJsZTowLjBdLCBrQ0lBdHRyaWJ1dGVNaW4sCisgICAgICAg
ICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aERvdWJsZToxLjBdLCBrQ0lBdHRyaWJ1dGVEZWZhdWx0
LAorICAgICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhEb3VibGU6MS4wXSwga0NJQXR0cmli
dXRlSWRlbnRpdHksCisgICAgICAgICAgICBrQ0lBdHRyaWJ1dGVUeXBlU2NhbGFyLCBrQ0lBdHRy
aWJ1dGVUeXBlLAorICAgICAgICAgICAgbmlsXSwgQCJpbnB1dFN1cmZhY2VTY2FsZSIsCisgICAg
ICAgIFtOU0RpY3Rpb25hcnkgZGljdGlvbmFyeVdpdGhPYmplY3RzQW5kS2V5czoKKyAgICAgICAg
ICAgIFtOU051bWJlciBudW1iZXJXaXRoRG91YmxlOjAuMF0sIGtDSUF0dHJpYnV0ZU1pbiwKKyAg
ICAgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoRG91YmxlOjEuMF0sIGtDSUF0dHJpYnV0ZURl
ZmF1bHQsCisgICAgICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aERvdWJsZToxLjBdLCBrQ0lB
dHRyaWJ1dGVJZGVudGl0eSwKKyAgICAgICAgICAgIGtDSUF0dHJpYnV0ZVR5cGVTY2FsYXIsIGtD
SUF0dHJpYnV0ZVR5cGUsCisgICAgICAgICAgICBuaWxdLCBAImlucHV0U3BlY3VsYXJDb25zdGFu
dCIsCisgICAgICAgIFtOU0RpY3Rpb25hcnkgZGljdGlvbmFyeVdpdGhPYmplY3RzQW5kS2V5czoK
KyAgICAgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoRG91YmxlOjAuMF0sIGtDSUF0dHJpYnV0
ZU1pbiwKKyAgICAgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoRG91YmxlOjEyOC4wXSwga0NJ
QXR0cmlidXRlTWluLAorICAgICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhEb3VibGU6MS4w
XSwga0NJQXR0cmlidXRlRGVmYXVsdCwKKyAgICAgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRo
RG91YmxlOjEuMF0sIGtDSUF0dHJpYnV0ZUlkZW50aXR5LAorICAgICAgICAgICAga0NJQXR0cmli
dXRlVHlwZVNjYWxhciwga0NJQXR0cmlidXRlVHlwZSwKKyAgICAgICAgICAgIG5pbF0sIEAiaW5w
dXRTcGVjdWxhckV4cG9uZW50IiwKKyAgICAgICAgW05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0
aE9iamVjdHNBbmRLZXlzOgorICAgICAgICAgICAga0NJQXR0cmlidXRlVHlwZU9mZnNldCwga0NJ
QXR0cmlidXRlVHlwZSwKKyAgICAgICAgICAgIG5pbF0sIEAiaW5wdXRLZXJuZWxVbml0TGVuZ3Ro
IiwKKyAgICAgICAgbmlsXV07Cit9CisKKysgKENJRmlsdGVyICopZmlsdGVyV2l0aE5hbWU6KE5T
U3RyaW5nICopbmFtZQoreworICAgIENJRmlsdGVyICpmaWx0ZXI7CisgICAgZmlsdGVyID0gW1tz
ZWxmIGFsbG9jXSBpbml0XTsKKyAgICByZXR1cm4gW2ZpbHRlciBhdXRvcmVsZWFzZV07Cit9CisK
Ky0gKGlkKWluaXQKK3sKKyAgICBpZighc3BlY3VsYXJMaWdodGluZ0ZpbHRlcikgeworICAgICAg
ICBOU0J1bmRsZSAqYnVuZGxlID0gW05TQnVuZGxlIGJ1bmRsZUZvckNsYXNzOltzZWxmIGNsYXNz
XV07CisgICAgICAgIE5TU3RyaW5nICprZXJuZWxGaWxlID0gW2J1bmRsZSBwYXRoRm9yUmVzb3Vy
Y2U6QCJXS1NwZWN1bGFyTGlnaHRpbmdGaWx0ZXIiIG9mVHlwZTpAImNpa2VybmVsIl07CisgICAg
ICAgIE5TU3RyaW5nICpjb2RlID0gW05TU3RyaW5nIHN0cmluZ1dpdGhDb250ZW50c09mRmlsZTpr
ZXJuZWxGaWxlXTsKKyAgICAgICAgTlNBcnJheSAqa2VybmVscyA9IFtDSUtlcm5lbCBrZXJuZWxz
V2l0aFN0cmluZzpjb2RlXTsKKyAgICAgICAgc3BlY3VsYXJMaWdodGluZ0ZpbHRlciA9IFtba2Vy
bmVscyBvYmplY3RBdEluZGV4OjBdIHJldGFpbl07CisgICAgfQorICAgIHJldHVybiBbc3VwZXIg
aW5pdF07Cit9CisKKy0gKENJSW1hZ2UgKilvdXRwdXRJbWFnZQoreworICAgIHJldHVybiBbc2Vs
ZiBhcHBseTpzcGVjdWxhckxpZ2h0aW5nRmlsdGVyLCBpbnB1dExpZ2h0aW5nQ29sb3IsIGlucHV0
U3VyZmFjZVNjYWxlLCBpbnB1dFNwZWN1bGFyQ29uc3RhbnQsCisgICAgICAgIGlucHV0U3BlY3Vs
YXJFeHBvbmVudCwgaW5wdXRLZXJuZWxVbml0TGVuZ3RoLCBuaWxdOworfQorCitAZW5kCkluZGV4
OiBxdWFydHovcXVhcnR6L2ZpbHRlcnMvV0tTcG90TGlnaHRGaWx0ZXIuY2lrZXJuZWwKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpkaWZmIC1OcHUgcXVhcnR6L3F1YXJ0ei9maWx0ZXJzL1dLU3BvdExpZ2h0RmlsdGVyLmNp
a2VybmVsCi0tLSBxdWFydHovcXVhcnR6L2ZpbHRlcnMvV0tTcG90TGlnaHRGaWx0ZXIuY2lrZXJu
ZWwJMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMAorKysgcXVhcnR6L3F1YXJ0ei9maWx0ZXJzL1dL
U3BvdExpZ2h0RmlsdGVyLmNpa2VybmVsCTMwIE9jdCAyMDA1IDEwOjUzOjAzIC0wMDAwCkBAIC0w
LDAgKzEsNCBAQAora2VybmVsIHZlYzQgYmFzaWMoc2FtcGxlciBpbWFnZSkKK3sKKyAgICByZXR1
cm4gdmVjNCgxLjAsMC4wLDAuMCwxLjApOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUK
SW5kZXg6IHF1YXJ0ei9xdWFydHovZmlsdGVycy9XS1Nwb3RMaWdodEZpbHRlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KZGlmZiAtTnB1IHF1YXJ0ei9xdWFydHovZmlsdGVycy9XS1Nwb3RMaWdodEZpbHRlci5oCi0t
LSBxdWFydHovcXVhcnR6L2ZpbHRlcnMvV0tTcG90TGlnaHRGaWx0ZXIuaAkxIEphbiAxOTcwIDAw
OjAwOjAwIC0wMDAwCisrKyBxdWFydHovcXVhcnR6L2ZpbHRlcnMvV0tTcG90TGlnaHRGaWx0ZXIu
aAkxMyBPY3QgMjAwNSAwNzoyNjozNSAtMDAwMApAQCAtMCwwICsxLDM0IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA1IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09N
UFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW1wb3J0IDxRdWFydHpDb3JlL0NvcmVJbWFnZS5oPgorCitAaW50ZXJmYWNl
IFdLU3BvdExpZ2h0RmlsdGVyIDogQ0lGaWx0ZXIgeworICAgIENJVmVjdG9yICppbnB1dExpZ2h0
UG9zaXRpb247CisgICAgQ0lWZWN0b3IgKmlucHV0TGlnaHRQb2ludHNBdDsKKyAgICBOU051bWJl
ciAqaW5wdXRTcGVjdWxhckV4cG9uZW50OworICAgIE5TTnVtYmVyICppbnB1dExpbWl0aW5nQ29u
ZUFuZ2xlOworfQorQGVuZApJbmRleDogcXVhcnR6L3F1YXJ0ei9maWx0ZXJzL1dLU3BvdExpZ2h0
RmlsdGVyLm0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQpkaWZmIC1OcHUgcXVhcnR6L3F1YXJ0ei9maWx0ZXJzL1dLU3Bv
dExpZ2h0RmlsdGVyLm0KLS0tIHF1YXJ0ei9xdWFydHovZmlsdGVycy9XS1Nwb3RMaWdodEZpbHRl
ci5tCTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAKKysrIHF1YXJ0ei9xdWFydHovZmlsdGVycy9X
S1Nwb3RMaWdodEZpbHRlci5tCTEzIE9jdCAyMDA1IDA3OjI2OjM1IC0wMDAwCkBAIC0wLDAgKzEs
ODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisgCisjaW1wb3J0ICJXS1Nwb3RMaWdodEZpbHRlci5o
IgorCitzdGF0aWMgQ0lLZXJuZWwgKnNwb3RMaWdodEZpbHRlciA9IG5pbDsKKworQGltcGxlbWVu
dGF0aW9uIFdLU3BvdExpZ2h0RmlsdGVyCisKKysgKHZvaWQpaW5pdGlhbGl6ZQoreworICAgIFtD
SUZpbHRlciByZWdpc3RlckZpbHRlck5hbWU6QCJXS1Nwb3RMaWdodCIKKyAgICAgICAgY29uc3Ry
dWN0b3I6IHNlbGYKKyAgICAgICAgY2xhc3NBdHRyaWJ1dGVzOiBbTlNEaWN0aW9uYXJ5IGRpY3Rp
b25hcnlXaXRoT2JqZWN0c0FuZEtleXM6CisgICAgICAgICBAIldlYktpdCBTcG90IExpZ2h0Iiwg
a0NJQXR0cmlidXRlRmlsdGVyRGlzcGxheU5hbWUsCisgICAgICAgIFtOU0FycmF5IGFycmF5V2l0
aE9iamVjdHM6IGtDSUNhdGVnb3J5U3R5bGl6ZSwga0NJQ2F0ZWdvcnlWaWRlbywKKyAgICAgICAg
ICAgIGtDSUNhdGVnb3J5U3RpbGxJbWFnZSwga0NJQ2F0ZWdvcnlOb25TcXVhcmVQaXhlbHMsbmls
XSwga0NJQXR0cmlidXRlRmlsdGVyQ2F0ZWdvcmllcywKKyAgICAgICAgW05TRGljdGlvbmFyeSBk
aWN0aW9uYXJ5V2l0aE9iamVjdHNBbmRLZXlzOgorICAgICAgICAgICAga0NJQXR0cmlidXRlVHlw
ZVBvc2l0aW9uMywga0NJQXR0cmlidXRlVHlwZSwKKyAgICAgICAgICAgIG5pbF0sIEAiaW5wdXRM
aWdodFBvc2l0aW9uIiwKKyAgICAgICAgW05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVj
dHNBbmRLZXlzOgorICAgICAgICAgICAga0NJQXR0cmlidXRlVHlwZVBvc2l0aW9uMywga0NJQXR0
cmlidXRlVHlwZSwKKyAgICAgICAgICAgIG5pbF0sIEAiaW5wdXRMaWdodFBvaW50c0F0IiwKKyAg
ICAgICAgW05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVjdHNBbmRLZXlzOgorICAgICAg
ICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhEb3VibGU6MS4wXSwga0NJQXR0cmlidXRlRGVmYXVs
dCwKKyAgICAgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoRG91YmxlOjEuMF0sIGtDSUF0dHJp
YnV0ZUlkZW50aXR5LAorICAgICAgICAgICAga0NJQXR0cmlidXRlVHlwZVNjYWxhciwga0NJQXR0
cmlidXRlVHlwZSwKKyAgICAgICAgICAgIG5pbF0sIEAiaW5wdXRTcGVjdWxhckV4cG9uZW50IiwK
KyAgICAgICAgW05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVjdHNBbmRLZXlzOgorICAg
ICAgICAgICAga0NJQXR0cmlidXRlVHlwZUFuZ2xlLCBrQ0lBdHRyaWJ1dGVUeXBlLAorICAgICAg
ICAgICAgbmlsXSwgQCJpbnB1dExpbWl0aW5nQ29uZUFuZ2xlIiwKKyAgICAgICAgbmlsXV07Cit9
CisKKysgKENJRmlsdGVyICopZmlsdGVyV2l0aE5hbWU6KE5TU3RyaW5nICopbmFtZQoreworICAg
IENJRmlsdGVyICpmaWx0ZXI7CisgICAgZmlsdGVyID0gW1tzZWxmIGFsbG9jXSBpbml0XTsKKyAg
ICByZXR1cm4gW2ZpbHRlciBhdXRvcmVsZWFzZV07Cit9CisKKy0gKGlkKWluaXQKK3sKKyAgICBp
Zighc3BvdExpZ2h0RmlsdGVyKSB7CisgICAgICAgIE5TQnVuZGxlICpidW5kbGUgPSBbTlNCdW5k
bGUgYnVuZGxlRm9yQ2xhc3M6W3NlbGYgY2xhc3NdXTsKKyAgICAgICAgTlNTdHJpbmcgKmtlcm5l
bEZpbGUgPSBbYnVuZGxlIHBhdGhGb3JSZXNvdXJjZTpAIldLUG9pbnRMaWdodEZpbHRlciIgb2ZU
eXBlOkAiY2lrZXJuZWwiXTsKKyAgICAgICAgTlNTdHJpbmcgKmNvZGUgPSBbTlNTdHJpbmcgc3Ry
aW5nV2l0aENvbnRlbnRzT2ZGaWxlOmtlcm5lbEZpbGVdOworICAgICAgICBOU0FycmF5ICprZXJu
ZWxzID0gW0NJS2VybmVsIGtlcm5lbHNXaXRoU3RyaW5nOmNvZGVdOworICAgICAgICBzcG90TGln
aHRGaWx0ZXIgPSBbW2tlcm5lbHMgb2JqZWN0QXRJbmRleDowXSByZXRhaW5dOworICAgIH0KKyAg
ICByZXR1cm4gW3N1cGVyIGluaXRdOworfQorCistIChDSUltYWdlICopb3V0cHV0SW1hZ2UKK3sK
KyAgICByZXR1cm4gW3NlbGYgYXBwbHk6c3BvdExpZ2h0RmlsdGVyLCBpbnB1dExpZ2h0UG9zaXRp
b24sIG5pbF07Cit9CisKK0BlbmQKSW5kZXg6IHF1YXJ0ei9LQ2FudmFzRmlsdGVyUXVhcnR6LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2NhbnZhcy9kZXZpY2Uv
cXVhcnR6L0tDYW52YXNGaWx0ZXJRdWFydHouaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4zCmRp
ZmYgLXAgLXUgLXIxLjMgcXVhcnR6L0tDYW52YXNGaWx0ZXJRdWFydHouaAotLS0gcXVhcnR6L0tD
YW52YXNGaWx0ZXJRdWFydHouaAkxIFNlcCAyMDA1IDA3OjMyOjU0IC0wMDAwCTEuMworKysgcXVh
cnR6L0tDYW52YXNGaWx0ZXJRdWFydHouaAkzIE5vdiAyMDA1IDAzOjM1OjA0IC0wMDAwCkBAIC03
MywxMSArNzMsMjYgQEAgcHVibGljOgogLy8gICAgdmlydHVhbCBDSUZpbHRlciAqZ2V0Q0lGaWx0
ZXIoS0NhbnZhc0ZpbHRlclF1YXJ0eiAqcXVhcnR6RmlsdGVyKSBjb25zdDsKIC8vfTsKIAorY2xh
c3MgS0NhbnZhc0ZFQ29udm9sdmVNYXRyaXhRdWFydHogOiBwdWJsaWMgS0NhbnZhc0ZFQ29udm9s
dmVNYXRyaXggeworcHVibGljOgorICAgIHZpcnR1YWwgQ0lGaWx0ZXIgKmdldENJRmlsdGVyKEtD
YW52YXNGaWx0ZXJRdWFydHogKnF1YXJ0ekZpbHRlcikgY29uc3Q7Cit9OworCiBjbGFzcyBLQ2Fu
dmFzRkVDb21wb3NpdGVRdWFydHogOiBwdWJsaWMgS0NhbnZhc0ZFQ29tcG9zaXRlIHsKIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIENJRmlsdGVyICpnZXRDSUZpbHRlcihLQ2FudmFzRmlsdGVyUXVhcnR6
ICpxdWFydHpGaWx0ZXIpIGNvbnN0OwogfTsKIAorY2xhc3MgS0NhbnZhc0ZFRGlmZnVzZUxpZ2h0
aW5nUXVhcnR6IDogcHVibGljIEtDYW52YXNGRURpZmZ1c2VMaWdodGluZyB7CitwdWJsaWM6Cisg
ICAgdmlydHVhbCBDSUZpbHRlciAqZ2V0Q0lGaWx0ZXIoS0NhbnZhc0ZpbHRlclF1YXJ0eiAqcXVh
cnR6RmlsdGVyKSBjb25zdDsKK307CisKK2NsYXNzIEtDYW52YXNGRURpc3RhbnRMaWdodFF1YXJ0
eiA6IHB1YmxpYyBLQ2FudmFzRkVEaXN0YW50TGlnaHQgeworcHVibGljOgorICAgIHZpcnR1YWwg
Q0lGaWx0ZXIgKmdldENJRmlsdGVyKEtDYW52YXNGaWx0ZXJRdWFydHogKnF1YXJ0ekZpbHRlcikg
Y29uc3Q7Cit9OworCiBjbGFzcyBLQ2FudmFzRkVGbG9vZFF1YXJ0eiA6IHB1YmxpYyBLQ2FudmFz
RkVGbG9vZCB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCBDSUZpbHRlciAqZ2V0Q0lGaWx0ZXIoS0Nh
bnZhc0ZpbHRlclF1YXJ0eiAqcXVhcnR6RmlsdGVyKSBjb25zdDsKQEAgLTkzLDcgKzEwOCw2IEBA
IHB1YmxpYzoKICAgICB2aXJ0dWFsIENJRmlsdGVyICpnZXRDSUZpbHRlcihLQ2FudmFzRmlsdGVy
UXVhcnR6ICpxdWFydHpGaWx0ZXIpIGNvbnN0OwogfTsKIAotCiBjbGFzcyBLQ2FudmFzRkVNZXJn
ZVF1YXJ0eiA6IHB1YmxpYyBLQ2FudmFzRkVNZXJnZSB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCBD
SUZpbHRlciAqZ2V0Q0lGaWx0ZXIoS0NhbnZhc0ZpbHRlclF1YXJ0eiAqcXVhcnR6RmlsdGVyKSBj
b25zdDsKQEAgLTEwNCw2ICsxMTgsMjEgQEAgcHVibGljOgogICAgIHZpcnR1YWwgQ0lGaWx0ZXIg
KmdldENJRmlsdGVyKEtDYW52YXNGaWx0ZXJRdWFydHogKnF1YXJ0ekZpbHRlcikgY29uc3Q7CiB9
OwogCitjbGFzcyBLQ2FudmFzRkVQb2ludExpZ2h0UXVhcnR6IDogcHVibGljIEtDYW52YXNGRVBv
aW50TGlnaHQgeworcHVibGljOgorICAgIHZpcnR1YWwgQ0lGaWx0ZXIgKmdldENJRmlsdGVyKEtD
YW52YXNGaWx0ZXJRdWFydHogKnF1YXJ0ekZpbHRlcikgY29uc3Q7Cit9OworCitjbGFzcyBLQ2Fu
dmFzRkVTcGVjdWxhckxpZ2h0aW5nUXVhcnR6IDogcHVibGljIEtDYW52YXNGRVNwZWN1bGFyTGln
aHRpbmcgeworcHVibGljOgorICAgIHZpcnR1YWwgQ0lGaWx0ZXIgKmdldENJRmlsdGVyKEtDYW52
YXNGaWx0ZXJRdWFydHogKnF1YXJ0ekZpbHRlcikgY29uc3Q7Cit9OworCitjbGFzcyBLQ2FudmFz
RkVTcG90TGlnaHRRdWFydHogOiBwdWJsaWMgS0NhbnZhc0ZFU3BvdExpZ2h0IHsKK3B1YmxpYzoK
KyAgICB2aXJ0dWFsIENJRmlsdGVyICpnZXRDSUZpbHRlcihLQ2FudmFzRmlsdGVyUXVhcnR6ICpx
dWFydHpGaWx0ZXIpIGNvbnN0OworfTsKKwogY2xhc3MgS0NhbnZhc0ZFVGlsZVF1YXJ0eiA6IHB1
YmxpYyBLQ2FudmFzRkVUaWxlIHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIENJRmlsdGVyICpnZXRD
SUZpbHRlcihLQ2FudmFzRmlsdGVyUXVhcnR6ICpxdWFydHpGaWx0ZXIpIGNvbnN0OwpJbmRleDog
cXVhcnR6L0tDYW52YXNGaWx0ZXJRdWFydHoubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9y
b290L1NWR1N1cHBvcnQva2NhbnZhcy9kZXZpY2UvcXVhcnR6L0tDYW52YXNGaWx0ZXJRdWFydHou
bW0sdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTAKZGlmZiAtcCAtdSAtcjEuMTAgcXVhcnR6L0tD
YW52YXNGaWx0ZXJRdWFydHoubW0KLS0tIHF1YXJ0ei9LQ2FudmFzRmlsdGVyUXVhcnR6Lm1tCTUg
T2N0IDIwMDUgMDU6MzY6NTEgLTAwMDAJMS4xMAorKysgcXVhcnR6L0tDYW52YXNGaWx0ZXJRdWFy
dHoubW0JMyBOb3YgMjAwNSAwMzozNTowNCAtMDAwMApAQCAtMzEsNiArMzEsNyBAQAogI2ltcG9y
dCAiS1JlbmRlcmluZ0RldmljZVF1YXJ0ei5oIgogI2ltcG9ydCAiUXVhcnR6U3VwcG9ydC5oIgog
I2ltcG9ydCAiS1dRRXhjZXB0aW9ucy5oIgorI2ltcG9ydCAiV0tEaWZmdXNlTGlnaHRpbmdGaWx0
ZXIuaCIKIAogI2ltcG9ydCA8UXVhcnR6Q29yZS9RdWFydHpDb3JlLmg+CiAKQEAgLTQwLDEzICs0
MSwyMiBAQAogCiBzdGF0aWMgUVN0cmluZyBLQ1ByZXZpb3VzRmlsdGVyT3V0cHV0TmFtZSA9IFFT
dHJpbmc6OmZyb21MYXRpbjEoIl9fcHJldmlvdXNPdXRwdXRfXyIpOwogCi0vL3N0YXRpYyBDSUNv
bG9yICpjaUNvbG9yKGNvbnN0IFFDb2xvciAmYykKLS8vewotLy8gICAgQ0dDb2xvclJlZiBjb2xv
ckNHID0gY2dDb2xvcihjKTsKLS8vICAgIENJQ29sb3IgKmNvbG9yQ0kgPSBbQ0lDb2xvciBjb2xv
cldpdGhDR0NvbG9yOmNvbG9yQ0ddOwotLy8gICAgQ0dDb2xvclJlbGVhc2UoY29sb3JDRyk7Ci0v
LyAgICByZXR1cm4gY29sb3JDSTsKLS8vfQorc3RhdGljIGlubGluZSBDSUNvbG9yICpjaUNvbG9y
KGNvbnN0IFFDb2xvciAmYykKK3sKKyAgICBDR0NvbG9yUmVmIGNvbG9yQ0cgPSBjZ0NvbG9yKGMp
OworICAgIENJQ29sb3IgKmNvbG9yQ0kgPSBbQ0lDb2xvciBjb2xvcldpdGhDR0NvbG9yOmNvbG9y
Q0ddOworICAgIENHQ29sb3JSZWxlYXNlKGNvbG9yQ0cpOworICAgIHJldHVybiBjb2xvckNJOwor
fQorCitzdGF0aWMgaW5saW5lIENJVmVjdG9yICpjaVZlY3RvcihLQ2FudmFzUG9pbnQzRiBwb2lu
dCkgeworICAgIHJldHVybiBbQ0lWZWN0b3IgdmVjdG9yV2l0aFg6cG9pbnQueCgpIFk6cG9pbnQu
eSgpIFo6cG9pbnQueigpXTsKK30KKworc3RhdGljIGlubGluZSBDSVZlY3RvciAqY2lWZWN0b3Io
UVBvaW50RiBwb2ludCkgeworICAgIHJldHVybiBbQ0lWZWN0b3IgdmVjdG9yV2l0aFg6cG9pbnQu
eCgpIFk6cG9pbnQueSgpXTsKK30KKwogCiBLQ2FudmFzRmlsdGVyUXVhcnR6OjpLQ2FudmFzRmls
dGVyUXVhcnR6KCkgOiBtX3N0b3JlZENHQ29udGV4dCgwKSwgbV9maWx0ZXJDSUNvbnRleHQoMCks
IG1fZmlsdGVyQ0dMYXllcigwKSwgbV9pbWFnZXNCeU5hbWUoMCkKIHsKQEAgLTI3NCw3ICsyODQs
NiBAQCBDSUltYWdlICpLQ2FudmFzRmlsdGVyUXVhcnR6OjppbnB1dEltYWdlCiAjcHJhZ21hIG1h
cmsgLQogI3ByYWdtYSBtYXJrIEZpbHRlciBFbGVtZW50cwogCi0KICNkZWZpbmUgRkVfUVVBUlRa
X1NFVFVQX0lOUFVUKG5hbWUpIFwKICAgICBDSUltYWdlICppbnB1dEltYWdlID0gcXVhcnR6Rmls
dGVyLT5pbnB1dEltYWdlKHRoaXMpOyBcCiAgICAgRkVfUVVBUlRaX0NIRUNLX0lOUFVUKGlucHV0
SW1hZ2UpIFwKQEAgLTUwMiw2ICs1MTEsMjcgQEAgQ0lGaWx0ZXIgKktDYW52YXNGRUNvbXBvc2l0
ZVF1YXJ0ejo6Z2V0QwogCUZFX1FVQVJUWl9PVVRQVVRfUkVUVVJOOwogfQogCitDSUZpbHRlciAq
S0NhbnZhc0ZFRGlmZnVzZUxpZ2h0aW5nUXVhcnR6OjpnZXRDSUZpbHRlcihLQ2FudmFzRmlsdGVy
UXVhcnR6ICpxdWFydHpGaWx0ZXIpIGNvbnN0Cit7CisgICAgW1dLRGlmZnVzZUxpZ2h0aW5nRmls
dGVyIGluaXRpYWxpemVdOworICAgIEZFX1FVQVJUWl9TRVRVUF9JTlBVVChAIldLRGlmZnVzZUxp
Z2h0aW5nIik7CisgICAgCisgICAgW2ZpbHRlciBzZXRWYWx1ZTpjaUNvbG9yKGxpZ2h0aW5nQ29s
b3IoKSkgZm9yS2V5OkAiaW5wdXRMaWdodGluZ0NvbG9yIl07CisgICAgW2ZpbHRlciBzZXRWYWx1
ZTpbTlNOdW1iZXIgbnVtYmVyV2l0aEZsb2F0OnN1cmZhY2VTY2FsZSgpXSBmb3JLZXk6QCJpbnB1
dFN1cmZhY2VTY2FsZSJdOworICAgIFtmaWx0ZXIgc2V0VmFsdWU6W05TTnVtYmVyIG51bWJlcldp
dGhGbG9hdDpkaWZmdXNlQ29uc3RhbnQoKV0gZm9yS2V5OkAiaW5wdXREaWZmdXNlQ29uc3RhbnQi
XTsKKyAgICBbZmlsdGVyIHNldFZhbHVlOltOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6a2VybmVs
VW5pdExlbmd0aFgoKV0gZm9yS2V5OkAiaW5wdXRLZXJuZWxVbml0TGVuZ3RoWCJdOworICAgIFtm
aWx0ZXIgc2V0VmFsdWU6W05TTnVtYmVyIG51bWJlcldpdGhGbG9hdDprZXJuZWxVbml0TGVuZ3Ro
WSgpXSBmb3JLZXk6QCJpbnB1dEtlcm5lbFVuaXRMZW5ndGhZIl07CisgICAgRkVfUVVBUlRaX09V
VFBVVF9SRVRVUk47Cit9CisKK0NJRmlsdGVyICpLQ2FudmFzRkVEaXN0YW50TGlnaHRRdWFydHo6
OmdldENJRmlsdGVyKEtDYW52YXNGaWx0ZXJRdWFydHogKnF1YXJ0ekZpbHRlcikgY29uc3QKK3sK
KyAgICBGRV9RVUFSVFpfU0VUVVBfSU5QVVQoQCJXS0Rpc3RhbnRMaWdodCIpOworICAgIFtmaWx0
ZXIgc2V0VmFsdWU6W05TTnVtYmVyIG51bWJlcldpdGhGbG9hdDphemltdXRoKCldIGZvcktleTpA
ImlucHV0QXppbXV0aCJdOworICAgIFtmaWx0ZXIgc2V0VmFsdWU6W05TTnVtYmVyIG51bWJlcldp
dGhGbG9hdDplbGV2YXRpb24oKV0gZm9yS2V5OkAiaW5wdXRFbGV2YXRpb24iXTsKKyAgICBGRV9R
VUFSVFpfT1VUUFVUX1JFVFVSTjsKK30KKwogQ0lGaWx0ZXIgKktDYW52YXNGRUZsb29kUXVhcnR6
OjpnZXRDSUZpbHRlcihLQ2FudmFzRmlsdGVyUXVhcnR6ICpxdWFydHpGaWx0ZXIpIGNvbnN0CiB7
CiAJQ0lGaWx0ZXIgKmZpbHRlciA9IG5pbDsKQEAgLTU3OSw2ICs2MDksMzQgQEAgQ0lGaWx0ZXIg
KktDYW52YXNGRU9mZnNldFF1YXJ0ejo6Z2V0Q0lGaQogCUZFX1FVQVJUWl9PVVRQVVRfUkVUVVJO
OwogfQogCitDSUZpbHRlciAqS0NhbnZhc0ZFUG9pbnRMaWdodFF1YXJ0ejo6Z2V0Q0lGaWx0ZXIo
S0NhbnZhc0ZpbHRlclF1YXJ0eiAqcXVhcnR6RmlsdGVyKSBjb25zdAoreworICAgIEZFX1FVQVJU
Wl9TRVRVUF9JTlBVVChAIldLUG9pbnRMaWdodCIpOworICAgIFtmaWx0ZXIgc2V0VmFsdWU6Y2lW
ZWN0b3IobG9jYXRpb24oKSkgZm9yS2V5OkAiaW5wdXRMaWdodFBvc2l0aW9uIl07CisgICAgRkVf
UVVBUlRaX09VVFBVVF9SRVRVUk47Cit9CisKK0NJRmlsdGVyICpLQ2FudmFzRkVTcGVjdWxhckxp
Z2h0aW5nUXVhcnR6OjpnZXRDSUZpbHRlcihLQ2FudmFzRmlsdGVyUXVhcnR6ICpxdWFydHpGaWx0
ZXIpIGNvbnN0Cit7CisgICAgRkVfUVVBUlRaX1NFVFVQX0lOUFVUKEAiV0tTcGVjdWxhckxpZ2h0
aW5nIik7CisgICAgW2ZpbHRlciBzZXRWYWx1ZTpjaUNvbG9yKGxpZ2h0aW5nQ29sb3IoKSkgZm9y
S2V5OkAiaW5wdXRMaWdodGluZ0NvbG9yIl07CisgICAgW2ZpbHRlciBzZXRWYWx1ZTpbTlNOdW1i
ZXIgbnVtYmVyV2l0aEZsb2F0OnN1cmZhY2VTY2FsZSgpXSBmb3JLZXk6QCJpbnB1dFNjYWxlIl07
CisgICAgW2ZpbHRlciBzZXRWYWx1ZTpbTlNOdW1iZXIgbnVtYmVyV2l0aEZsb2F0OnNwZWN1bGFy
Q29uc3RhbnQoKV0gZm9yS2V5OkAiaW5wdXRTcGVjdWxhckNvbnN0YW50Il07CisgICAgW2ZpbHRl
ciBzZXRWYWx1ZTpbTlNOdW1iZXIgbnVtYmVyV2l0aEZsb2F0OnNwZWN1bGFyRXhwb25lbnQoKV0g
Zm9yS2V5OkAiaW5wdXRTcGVjdWxhckV4cG9uZW50Il07CisgICAgW2ZpbHRlciBzZXRWYWx1ZTpj
aVZlY3RvcihrZXJuZWxVbml0TGVuZ3RoKCkpIGZvcktleTpAImlucHV0S2VybmVsVW5pdExlbmd0
aCJdOworICAgIEZFX1FVQVJUWl9PVVRQVVRfUkVUVVJOOworfQorCitDSUZpbHRlciAqS0NhbnZh
c0ZFU3BvdExpZ2h0UXVhcnR6OjpnZXRDSUZpbHRlcihLQ2FudmFzRmlsdGVyUXVhcnR6ICpxdWFy
dHpGaWx0ZXIpIGNvbnN0Cit7CisgICAgRkVfUVVBUlRaX1NFVFVQX0lOUFVUKEAiV0tTcG90TGln
aHQiKTsKKyAgICBbZmlsdGVyIHNldFZhbHVlOmNpVmVjdG9yKGxvY2F0aW9uKCkpIGZvcktleTpA
ImlucHV0TGlnaHRQb3NpdGlvbiJdOworICAgIFtmaWx0ZXIgc2V0VmFsdWU6Y2lWZWN0b3IocG9p
bnRzQXQoKSkgZm9yS2V5OkAiaW5wdXRMaWdodFBvaW50c0F0Il07CisgICAgW2ZpbHRlciBzZXRW
YWx1ZTpbTlNOdW1iZXIgbnVtYmVyV2l0aEZsb2F0OnNwZWN1bGFyRXhwb25lbnQoKV0gZm9yS2V5
OkAiaW5wdXRTcGVjdWxhckV4cG9uZW50Il07CisgICAgW2ZpbHRlciBzZXRWYWx1ZTpbTlNOdW1i
ZXIgbnVtYmVyV2l0aEZsb2F0OmxpbWl0aW5nQ29uZUFuZ2xlKCldIGZvcktleTpAImlucHV0TGlt
aXRpbmdDb25lQW5nbGUiXTsKKyAgICBGRV9RVUFSVFpfT1VUUFVUX1JFVFVSTjsKK30KKwogQ0lG
aWx0ZXIgKktDYW52YXNGRVRpbGVRdWFydHo6OmdldENJRmlsdGVyKEtDYW52YXNGaWx0ZXJRdWFy
dHogKnF1YXJ0ekZpbHRlcikgY29uc3QKIHsKIAlGRV9RVUFSVFpfU0VUVVBfSU5QVVQoQCJDSUFm
ZmluZVRpbGUiKTsKQEAgLTU4Niw2ICs2NDQsMyBAQCBDSUZpbHRlciAqS0NhbnZhc0ZFVGlsZVF1
YXJ0ejo6Z2V0Q0lGaWx0CiAJRkVfUVVBUlRaX09VVFBVVF9SRVRVUk47CiB9CiAKLQotCi0KSW5k
ZXg6IHF1YXJ0ei9LUmVuZGVyaW5nRGV2aWNlUXVhcnR6Lm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6
IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tjYW52YXMvZGV2aWNlL3F1YXJ0ei9LUmVuZGVyaW5nRGV2
aWNlUXVhcnR6Lm1tLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjQKZGlmZiAtcCAtdSAtcjEuNCBx
dWFydHovS1JlbmRlcmluZ0RldmljZVF1YXJ0ei5tbQotLS0gcXVhcnR6L0tSZW5kZXJpbmdEZXZp
Y2VRdWFydHoubW0JNSBPY3QgMjAwNSAwNTozNjo1MiAtMDAwMAkxLjQKKysrIHF1YXJ0ei9LUmVu
ZGVyaW5nRGV2aWNlUXVhcnR6Lm1tCTMgTm92IDIwMDUgMDM6MzU6MDUgLTAwMDAKQEAgLTI0Mywx
NSArMjQzLDE1IEBAIEtDYW52YXNGaWx0ZXJFZmZlY3QgKktSZW5kZXJpbmdEZXZpY2VRdWEKIHsK
IAlzd2l0Y2godHlwZSkKIAl7Ci0vLwljYXNlIEZFX0RJU1RBTlRfTElHSFQ6IAotLy8JY2FzZSBG
RV9QT0lOVF9MSUdIVDogCi0vLwljYXNlIEZFX1NQT1RfTElHSFQ6IAorCWNhc2UgRkVfRElTVEFO
VF9MSUdIVDogcmV0dXJuIG5ldyBLQ2FudmFzRkVEaXN0YW50TGlnaHRRdWFydHooKTsKKwljYXNl
IEZFX1BPSU5UX0xJR0hUOiByZXR1cm4gbmV3IEtDYW52YXNGRVBvaW50TGlnaHRRdWFydHooKTsK
KwljYXNlIEZFX1NQT1RfTElHSFQ6IHJldHVybiBuZXcgS0NhbnZhc0ZFU3BvdExpZ2h0UXVhcnR6
KCk7CiAJY2FzZSBGRV9CTEVORDogcmV0dXJuIG5ldyBLQ2FudmFzRkVCbGVuZFF1YXJ0eigpOwog
CWNhc2UgRkVfQ09MT1JfTUFUUklYOiByZXR1cm4gbmV3IEtDYW52YXNGRUNvbG9yTWF0cml4UXVh
cnR6KCk7CiAvLwljYXNlIEZFX0NPTVBPTkVOVF9UUkFOU0ZFUjogCiAJY2FzZSBGRV9DT01QT1NJ
VEU6IHJldHVybiBuZXcgS0NhbnZhc0ZFQ29tcG9zaXRlUXVhcnR6KCk7CiAvLwljYXNlIEZFX0NP
TlZPTFZFX01BVFJJWDogCi0vLwljYXNlIEZFX0RJRkZVU0VfTElHSFRJTkc6IAorCWNhc2UgRkVf
RElGRlVTRV9MSUdIVElORzogcmV0dXJuIG5ldyBLQ2FudmFzRkVEaWZmdXNlTGlnaHRpbmdRdWFy
dHooKTsKIC8vCWNhc2UgRkVfRElTUExBQ0VNRU5UX01BUDogCiAJY2FzZSBGRV9GTE9PRDogcmV0
dXJuIG5ldyBLQ2FudmFzRkVGbG9vZFF1YXJ0eigpOwogCWNhc2UgRkVfR0FVU1NJQU5fQkxVUjog
cmV0dXJuIG5ldyBLQ2FudmFzRkVHYXVzc2lhbkJsdXJRdWFydHooKTsKQEAgLTI1OSw3ICsyNTks
NyBAQCBLQ2FudmFzRmlsdGVyRWZmZWN0ICpLUmVuZGVyaW5nRGV2aWNlUXVhCiAJY2FzZSBGRV9N
RVJHRTogcmV0dXJuIG5ldyBLQ2FudmFzRkVNZXJnZVF1YXJ0eigpOwogLy8JY2FzZSBGRV9NT1JQ
SE9MT0dZOiAKIAljYXNlIEZFX09GRlNFVDogcmV0dXJuIG5ldyBLQ2FudmFzRkVPZmZzZXRRdWFy
dHooKTsKLS8vCWNhc2UgRkVfU1BFQ1VMQVJfTElHSFRJTkc6IAorCWNhc2UgRkVfU1BFQ1VMQVJf
TElHSFRJTkc6IHJldHVybiBuZXcgS0NhbnZhc0ZFU3BlY3VsYXJMaWdodGluZ1F1YXJ0eigpOwog
CWNhc2UgRkVfVElMRTogcmV0dXJuIG5ldyBLQ2FudmFzRkVUaWxlUXVhcnR6KCk7CiAvLwljYXNl
IEZFX1RVUkJVTEVOQ0U6IAogCWRlZmF1bHQ6Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>4570</attachid>
            <date>2005-11-02 19:33:24 -0800</date>
            <delta_ts>2005-11-08 01:58:32 -0800</delta_ts>
            <desc>current state of lighting pt2</desc>
            <filename>lighting_patch_ksvg2_svg.patch</filename>
            <type>text/plain</type>
            <size>18892</size>
            <attacher name="Oliver Hunt">oliver</attacher>
            
              <data encoding="base64">SW5kZXg6IFNWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudEltcGwuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGlm
ZiAtTnB1IFNWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudEltcGwuY3BwCi0tLSBTVkdGRURpZmZ1
c2VMaWdodGluZ0VsZW1lbnRJbXBsLmNwcAkxIEphbiAxOTcwIDAwOjAwOjAwIC0wMDAwCisrKyBT
VkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnRJbXBsLmNwcAkzIE5vdiAyMDA1IDAyOjEyOjQwIC0w
MDAwCkBAIC0wLDAgKzEsMTU3IEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBO
aWtvbGFzIFppbW1lcm1hbm4gPHdpbGRmb3hAa2RlLm9yZz4KKyAgICAgICAgICAgICAgICAgIDIw
MDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKworICAgIFRoaXMgZmlsZSBpcyBwYXJ0
IG9mIHRoZSBLREUgcHJvamVjdAorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICAgIEJvc3RvbiwgTUEgMDIx
MTEtMTMwNywgVVNBLgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPHFzdHJp
bmdsaXN0Lmg+CisKKyNpbmNsdWRlIDxrZG9tL2NvcmUvQXR0ckltcGwuaD4KKworI2luY2x1ZGUg
PGtjYW52YXMvS0NhbnZhcy5oPgorI2luY2x1ZGUgPGtjYW52YXMvS0NhbnZhc1JlZ2lzdHJ5Lmg+
CisjaW5jbHVkZSA8a2NhbnZhcy9LQ2FudmFzRmlsdGVycy5oPgorI2luY2x1ZGUgPGtjYW52YXMv
ZGV2aWNlL0tSZW5kZXJpbmdEZXZpY2UuaD4KKworI2luY2x1ZGUgInN2Z2F0dHJzLmgiCisjaW5j
bHVkZSAiU1ZHSGVscGVyLmgiCisjaW5jbHVkZSAiU1ZHUmVuZGVyU3R5bGUuaCIKKyNpbmNsdWRl
ICJTVkdBbmltYXRlZE51bWJlckltcGwuaCIKKyNpbmNsdWRlICJTVkdBbmltYXRlZFN0cmluZ0lt
cGwuaCIKKyNpbmNsdWRlICJTVkdET01JbXBsZW1lbnRhdGlvbkltcGwuaCIKKyNpbmNsdWRlICJT
VkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnRJbXBsLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBLU1ZH
OworCitTVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnRJbXBsOjpTVkdGRURpZmZ1c2VMaWdodGlu
Z0VsZW1lbnRJbXBsKEtET006OkRvY3VtZW50UHRyICpkb2MsIEtET006Ok5vZGVJbXBsOjpJZCBp
ZCwgS0RPTTo6RE9NU3RyaW5nSW1wbCAqcHJlZml4KSA6IAorU1ZHRmlsdGVyUHJpbWl0aXZlU3Rh
bmRhcmRBdHRyaWJ1dGVzSW1wbChkb2MsIGlkLCBwcmVmaXgpCit7CisgICAgbV9kaWZmdXNlQ29u
c3RhbnQgPSAwOworICAgIG1fc3VyZmFjZVNjYWxlID0gMDsKKyAgICBtX2ZpbHRlckVmZmVjdCA9
IDA7CisgICAgbV9rZXJuZWxVbml0TGVuZ3RoWCA9IDA7CisgICAgbV9rZXJuZWxVbml0TGVuZ3Ro
WSA9IDA7Cit9CisKK1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudEltcGw6On5TVkdGRURpZmZ1
c2VMaWdodGluZ0VsZW1lbnRJbXBsKCkKK3sKKyAgICBpZihtX2luMSkKKyAgICAgICAgbV9pbjEt
PmRlcmVmKCk7CisgICAgaWYobV9kaWZmdXNlQ29uc3RhbnQpCisgICAgICAgIG1fZGlmZnVzZUNv
bnN0YW50LT5kZXJlZigpOworICAgIGlmKG1fc3VyZmFjZVNjYWxlKQorICAgICAgICBtX3N1cmZh
Y2VTY2FsZS0+ZGVyZWYoKTsKKyAgICBpZihtX2tlcm5lbFVuaXRMZW5ndGhYKQorICAgICAgICBt
X2tlcm5lbFVuaXRMZW5ndGhYLT5kZXJlZigpOworICAgIGlmKG1fa2VybmVsVW5pdExlbmd0aFkp
CisgICAgICAgIG1fa2VybmVsVW5pdExlbmd0aFktPmRlcmVmKCk7Cit9CisKK1NWR0FuaW1hdGVk
U3RyaW5nSW1wbCAqU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50SW1wbDo6aW4xKCkgY29uc3QK
K3sKKyAgICBTVkdTdHlsZWRFbGVtZW50SW1wbCAqZHVtbXkgPSAwOworICAgIHJldHVybiBsYXp5
X2NyZWF0ZTxTVkdBbmltYXRlZFN0cmluZ0ltcGw+KG1faW4xLCBkdW1teSk7Cit9CisKK1NWR0Fu
aW1hdGVkTnVtYmVySW1wbCAqU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50SW1wbDo6ZGlmZnVz
ZUNvbnN0YW50KCkgY29uc3QKK3sKKyAgICBTVkdTdHlsZWRFbGVtZW50SW1wbCAqZHVtbXkgPSAw
OworICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZE51bWJlckltcGw+KG1fZGlmZnVz
ZUNvbnN0YW50LCBkdW1teSk7Cit9CisKK1NWR0FuaW1hdGVkTnVtYmVySW1wbCAqU1ZHRkVEaWZm
dXNlTGlnaHRpbmdFbGVtZW50SW1wbDo6c3VyZmFjZVNjYWxlKCkgY29uc3QKK3sKKyAgICBTVkdT
dHlsZWRFbGVtZW50SW1wbCAqZHVtbXkgPSAwOworICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdB
bmltYXRlZE51bWJlckltcGw+KG1fc3VyZmFjZVNjYWxlLCBkdW1teSk7Cit9CisKK1NWR0FuaW1h
dGVkTnVtYmVySW1wbCAqU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50SW1wbDo6a2VybmVsVW5p
dExlbmd0aFgoKSBjb25zdAoreworICAgIFNWR1N0eWxlZEVsZW1lbnRJbXBsICpkdW1teSA9IDA7
CisgICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTnVtYmVySW1wbD4obV9rZXJuZWxV
bml0TGVuZ3RoWCwgZHVtbXkpOworfQorCitTVkdBbmltYXRlZE51bWJlckltcGwgKlNWR0ZFRGlm
ZnVzZUxpZ2h0aW5nRWxlbWVudEltcGw6Omtlcm5lbFVuaXRMZW5ndGhZKCkgY29uc3QKK3sKKyAg
ICBTVkdTdHlsZWRFbGVtZW50SW1wbCAqZHVtbXkgPSAwOworICAgIHJldHVybiBsYXp5X2NyZWF0
ZTxTVkdBbmltYXRlZE51bWJlckltcGw+KG1fa2VybmVsVW5pdExlbmd0aFksIGR1bW15KTsKK30K
Kwordm9pZCBTVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnRJbXBsOjpwYXJzZUF0dHJpYnV0ZShL
RE9NOjpBdHRyaWJ1dGVJbXBsICphdHRyKQoreworICAgIGludCBpZCA9IChhdHRyLT5pZCgpICYg
Tm9kZUltcGxfSWRMb2NhbE1hc2spOworICAgIEtET006OkRPTVN0cmluZyB2YWx1ZShhdHRyLT52
YWx1ZSgpKTsKKworICAgIHN3aXRjaChpZCkKKyAgICB7CisgICAgICAgIGNhc2UgQVRUUl9JTjoK
KyAgICAgICAgeworICAgICAgICAgICAgaW4xKCktPnNldEJhc2VWYWwodmFsdWUuaGFuZGxlKCkp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBBVFRSX1NVUkZB
Q0VTQ0FMRToKKyAgICAgICAgeworICAgICAgICAgICAgc3VyZmFjZVNjYWxlKCktPnNldEJhc2VW
YWwodmFsdWUuc3RyaW5nKCkudG9Eb3VibGUoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICBjYXNlIEFUVFJfRElGRlVTRUNPTlNUQU5UOgorICAgICAgICB7CisgICAg
ICAgICAgICBkaWZmdXNlQ29uc3RhbnQoKS0+c2V0QmFzZVZhbCh2YWx1ZS5zdHJpbmcoKS50b0Rv
dWJsZSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgQVRU
Ul9LRVJORUxVTklUTEVOR1RIOgorICAgICAgICB7CisgICAgICAgICAgICBRU3RyaW5nTGlzdCBu
dW1iZXJzID0gUVN0cmluZ0xpc3Q6OnNwbGl0KCcgJywgdmFsdWUuc3RyaW5nKCkpOworICAgICAg
ICAgICAga2VybmVsVW5pdExlbmd0aFgoKS0+c2V0QmFzZVZhbChudW1iZXJzWzBdLnRvRG91Ymxl
KCkpOworICAgICAgICAgICAgaWYobnVtYmVycy5jb3VudCgpID09IDEpCisgICAgICAgICAgICAg
ICAga2VybmVsVW5pdExlbmd0aFkoKS0+c2V0QmFzZVZhbChudW1iZXJzWzBdLnRvRG91YmxlKCkp
OworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGtlcm5lbFVuaXRMZW5ndGhZKCkt
PnNldEJhc2VWYWwobnVtYmVyc1sxXS50b0RvdWJsZSgpKTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgeworICAg
ICAgICAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzSW1wbDo6cGFyc2VB
dHRyaWJ1dGUoYXR0cik7CisgICAgICAgIH0KKyAgICB9OworfQorCitLQ2FudmFzSXRlbSAqU1ZH
RkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50SW1wbDo6Y3JlYXRlQ2FudmFzSXRlbShLQ2FudmFzICpj
YW52YXMsIEtSZW5kZXJpbmdTdHlsZSAqc3R5bGUpIGNvbnN0Cit7CisgICAgbV9maWx0ZXJFZmZl
Y3QgPSBzdGF0aWNfY2FzdDxLQ2FudmFzRkVEaWZmdXNlTGlnaHRpbmcgKj4oY2FudmFzLT5yZW5k
ZXJpbmdEZXZpY2UoKS0+Y3JlYXRlRmlsdGVyRWZmZWN0KEZFX0RJRkZVU0VfTElHSFRJTkcpKTsK
KyAgICBtX2ZpbHRlckVmZmVjdC0+c2V0SW4oS0RPTTo6RE9NU3RyaW5nKGluMSgpLT5iYXNlVmFs
KCkpLnN0cmluZygpKTsKKyAgICBzZXRTdGFuZGFyZEF0dHJpYnV0ZXMobV9maWx0ZXJFZmZlY3Qp
OworICAgIG1fZmlsdGVyRWZmZWN0LT5zZXREaWZmdXNlQ29uc3RhbnQoKGRpZmZ1c2VDb25zdGFu
dCgpLT5iYXNlVmFsKCkpKTsKKyAgICBtX2ZpbHRlckVmZmVjdC0+c2V0U3VyZmFjZVNjYWxlKChz
dXJmYWNlU2NhbGUoKS0+YmFzZVZhbCgpKSk7CisgICAgbV9maWx0ZXJFZmZlY3QtPnNldEtlcm5l
bFVuaXRMZW5ndGhYKChrZXJuZWxVbml0TGVuZ3RoWCgpLT5iYXNlVmFsKCkpKTsKKyAgICBtX2Zp
bHRlckVmZmVjdC0+c2V0S2VybmVsVW5pdExlbmd0aFkoKGtlcm5lbFVuaXRMZW5ndGhZKCktPmJh
c2VWYWwoKSkpOworICAgIC8vaXMgdGhpcyB0aGUgY29ycmVjdCBjb2xvdXI/IG9yIHNob3VsZCBp
IGJlIGZldGNoaW5nIGl0IGZyb20gdGhlIGF0dHJpYnMgZGlyZWN0bHk/CisgICAgLy9pZiBpIHNo
b3VsZCwgaG93IGRvIGkgcGFyc2UgdGhlIGNvbG91cj8KKyAgICBtX2ZpbHRlckVmZmVjdC0+c2V0
TGlnaHRpbmdDb2xvcihzdGF0aWNfY2FzdDxTVkdSZW5kZXJTdHlsZSAqPihyZW5kZXJTdHlsZSgp
KS0+Y29sb3IoKSk7CisgICAgcmV0dXJuIDA7Cit9CisKK0tDYW52YXNGaWx0ZXJFZmZlY3QgKlNW
R0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudEltcGw6OmZpbHRlckVmZmVjdCgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fZmlsdGVyRWZmZWN0OworfQorCisvLyB2aW06dHM9NDpub2V0CkluZGV4OiBT
VkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnRJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpkaWZmIC1OcHUgU1ZH
RkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50SW1wbC5oCi0tLSBTVkdGRURpZmZ1c2VMaWdodGluZ0Vs
ZW1lbnRJbXBsLmgJMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMAorKysgU1ZHRkVEaWZmdXNlTGln
aHRpbmdFbGVtZW50SW1wbC5oCTEgTm92IDIwMDUgMTQ6MDA6MzMgLTAwMDAKQEAgLTAsMCArMSw3
MCBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgTmlrb2xhcyBaaW1tZXJtYW5u
IDx3aWxkZm94QGtkZS5vcmc+CisgICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1IFJvYiBCdWlz
IDxidWlzQGtkZS5vcmc+CisKKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIHByb2pl
Y3QKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBs
ZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAgICBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyov
CisKKyNpZm5kZWYgS1NWR19TVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnRJbXBsX0gKKyNkZWZp
bmUgS1NWR19TVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnRJbXBsX0gKKworI2luY2x1ZGUgIlNW
R0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlc0ltcGwuaCIKKworY2xhc3MgS0NhbnZh
c0ZFRGlmZnVzZUxpZ2h0aW5nOworY2xhc3MgS0NhbnZhc0ZpbHRlckVmZmVjdDsKKworbmFtZXNw
YWNlIEtTVkcKK3sKKyAgICBjbGFzcyBTVkdBbmltYXRlZE51bWJlckltcGw7CisgICAgY2xhc3Mg
U1ZHQW5pbWF0ZWRTdHJpbmdJbXBsOworICAgIAorICAgIGNsYXNzIFNWR0ZFRGlmZnVzZUxpZ2h0
aW5nRWxlbWVudEltcGwgOiBwdWJsaWMgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1
dGVzSW1wbAorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFNWR0ZFRGlmZnVzZUxpZ2h0aW5n
RWxlbWVudEltcGwoS0RPTTo6RG9jdW1lbnRQdHIgKmRvYywgS0RPTTo6Tm9kZUltcGw6OklkIGlk
LCBLRE9NOjpET01TdHJpbmdJbXBsICpwcmVmaXgpOworICAgICAgICB2aXJ0dWFsIH5TVkdGRURp
ZmZ1c2VMaWdodGluZ0VsZW1lbnRJbXBsKCk7CisKKyAgICAgICAgLy8gJ1NWR0ZFRGlmZnVzZUxp
Z2h0aW5nRWxlbWVudCcgZnVuY3Rpb25zCisgICAgICAgIFNWR0FuaW1hdGVkU3RyaW5nSW1wbCAq
aW4xKCkgY29uc3Q7CisgICAgICAgIFNWR0FuaW1hdGVkTnVtYmVySW1wbCAqZGlmZnVzZUNvbnN0
YW50KCkgY29uc3Q7CisgICAgICAgIFNWR0FuaW1hdGVkTnVtYmVySW1wbCAqc3VyZmFjZVNjYWxl
KCkgY29uc3Q7CisgICAgICAgIFNWR0FuaW1hdGVkTnVtYmVySW1wbCAqa2VybmVsVW5pdExlbmd0
aFgoKSBjb25zdDsKKyAgICAgICAgU1ZHQW5pbWF0ZWROdW1iZXJJbXBsICprZXJuZWxVbml0TGVu
Z3RoWSgpIGNvbnN0OworCisgICAgICAgIC8vIERlcml2ZWQgZnJvbTogJ0VsZW1lbnRJbXBsJwor
ICAgICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VBdHRyaWJ1dGUoS0RPTTo6QXR0cmlidXRlSW1wbCAq
YXR0cik7CisKKyAgICAgICAgdmlydHVhbCBLQ2FudmFzSXRlbSAqY3JlYXRlQ2FudmFzSXRlbShL
Q2FudmFzICpjYW52YXMsIEtSZW5kZXJpbmdTdHlsZSAqc3R5bGUpIGNvbnN0OworCisgICAgICAg
IHZpcnR1YWwgYm9vbCBpbXBsZW1lbnRzQ2FudmFzSXRlbSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7
IH0KKworICAgICAgICB2aXJ0dWFsIEtDYW52YXNGaWx0ZXJFZmZlY3QgKmZpbHRlckVmZmVjdCgp
IGNvbnN0OworCitwcml2YXRlOgorICAgICAgICBtdXRhYmxlIFNWR0FuaW1hdGVkU3RyaW5nSW1w
bCAqbV9pbjE7CisgICAgICAgIG11dGFibGUgU1ZHQW5pbWF0ZWROdW1iZXJJbXBsICptX2RpZmZ1
c2VDb25zdGFudDsKKyAgICAgICAgbXV0YWJsZSBTVkdBbmltYXRlZE51bWJlckltcGwgKm1fc3Vy
ZmFjZVNjYWxlOworICAgICAgICBtdXRhYmxlIFNWR0FuaW1hdGVkTnVtYmVySW1wbCAqbV9saWdo
dGluZ0NvbG91cjsKKyAgICAgICAgbXV0YWJsZSBTVkdBbmltYXRlZE51bWJlckltcGwgKm1fa2Vy
bmVsVW5pdExlbmd0aFg7CisgICAgICAgIG11dGFibGUgU1ZHQW5pbWF0ZWROdW1iZXJJbXBsICpt
X2tlcm5lbFVuaXRMZW5ndGhZOworICAgICAgICAvL25lZWQgb3RoZXIgcHJvcGVydGllcyBoZXJl
Li4uCisgICAgICAgIG11dGFibGUgS0NhbnZhc0ZFRGlmZnVzZUxpZ2h0aW5nICptX2ZpbHRlckVm
ZmVjdDsKKyAgICB9OworfTsKKworI2VuZGlmCkluZGV4OiBTVkdGRUxpZ2h0RWxlbWVudEltcGwu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KZGlmZiAtTnB1IFNWR0ZFTGlnaHRFbGVtZW50SW1wbC5jcHAKLS0tIFNW
R0ZFTGlnaHRFbGVtZW50SW1wbC5jcHAJMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMAorKysgU1ZH
RkVMaWdodEVsZW1lbnRJbXBsLmNwcAkzIE5vdiAyMDA1IDAzOjAwOjI0IC0wMDAwCkBAIC0wLDAg
KzEsMTk2IEBACisvL2NvcHlyaWdodCBmb28gZ29lcyBoZXJlCisKKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgPHFzdHJpbmdsaXN0Lmg+CisKKyNpbmNsdWRlIDxrZG9tL2NvcmUvQXR0
ckltcGwuaD4KKworI2luY2x1ZGUgPGtjYW52YXMvS0NhbnZhcy5oPgorI2luY2x1ZGUgPGtjYW52
YXMvS0NhbnZhc1JlZ2lzdHJ5Lmg+CisjaW5jbHVkZSA8a2NhbnZhcy9LQ2FudmFzUmVzb3VyY2Vz
Lmg+CisjaW5jbHVkZSA8a2NhbnZhcy9LQ2FudmFzRmlsdGVycy5oPgorI2luY2x1ZGUgPGtjYW52
YXMvZGV2aWNlL0tSZW5kZXJpbmdEZXZpY2UuaD4KKworI2luY2x1ZGUgInN2Z2F0dHJzLmgiCisj
aW5jbHVkZSAiU1ZHSGVscGVyLmgiCisjaW5jbHVkZSAiU1ZHUmVuZGVyU3R5bGUuaCIKKyNpbmNs
dWRlICJTVkdGRUxpZ2h0RWxlbWVudEltcGwuaCIKKyNpbmNsdWRlICJTVkdBbmltYXRlZFN0cmlu
Z0ltcGwuaCIKKyNpbmNsdWRlICJTVkdBbmltYXRlZE51bWJlckltcGwuaCIKKyNpbmNsdWRlICJT
VkdBbmltYXRlZEVudW1lcmF0aW9uSW1wbC5oIgorI2luY2x1ZGUgIlNWR0RPTUltcGxlbWVudGF0
aW9uSW1wbC5oIgorCit1c2luZyBuYW1lc3BhY2UgS1NWRzsKKworU1ZHRkVMaWdodEVsZW1lbnRJ
bXBsOjpTVkdGRUxpZ2h0RWxlbWVudEltcGwoS0RPTTo6RG9jdW1lbnRQdHIgKmRvYywgS0RPTTo6
Tm9kZUltcGw6OklkIGlkLCBLRE9NOjpET01TdHJpbmdJbXBsICpwcmVmaXgpIDogCitTVkdFbGVt
ZW50SW1wbChkb2MsIGlkLCBwcmVmaXgpCit7CisgICAgbV90eXBlID0gMDsKKyAgICBtX2F6aW11
dGggPSAwOworICAgIG1fZWxldmF0aW9uID0gMDsKKyAgICBtX3ggPSAwOworICAgIG1feSA9IDA7
CisgICAgbV96ID0gMDsKKyAgICBtX3BvaW50c0F0WCA9IDA7CisgICAgbV9wb2ludHNBdFkgPSAw
OworICAgIG1fcG9pbnRzQXRaID0gMDsKKyAgICBtX3NwZWN1bGFyRXhwb25lbnQgPSAwOworICAg
IG1fbGltaXRpbmdDb25lQW5nbGUgPSAwOworfQorCitTVkdGRUxpZ2h0RWxlbWVudEltcGw6On5T
VkdGRUxpZ2h0RWxlbWVudEltcGwoKQoreworICAgIGlmKG1fdHlwZSkKKyAgICAgICAgbV90eXBl
LT5kZXJlZigpOworICAgIGlmKG1fYXppbXV0aCkKKyAgICAgICAgbV9hemltdXRoLT5kZXJlZigp
OworICAgIGlmKG1fZWxldmF0aW9uKQorICAgICAgICBtX2VsZXZhdGlvbi0+ZGVyZWYoKTsKKyAg
ICBpZihtX3gpCisgICAgICAgIG1feC0+ZGVyZWYoKTsKKyAgICBpZihtX3kpCisgICAgICAgIG1f
eS0+ZGVyZWYoKTsKKyAgICBpZihtX3opCisgICAgICAgIG1fei0+ZGVyZWYoKTsKKyAgICBpZiht
X3BvaW50c0F0WCkKKyAgICAgICAgbV9wb2ludHNBdFgtPmRlcmVmKCk7CisgICAgaWYobV9wb2lu
dHNBdFkpCisgICAgICAgIG1fcG9pbnRzQXRZLT5kZXJlZigpOworICAgIGlmKG1fcG9pbnRzQXRa
KQorICAgICAgICBtX3BvaW50c0F0Wi0+ZGVyZWYoKTsKKyAgICBpZihtX3NwZWN1bGFyRXhwb25l
bnQpCisgICAgICAgIG1fc3BlY3VsYXJFeHBvbmVudC0+ZGVyZWYoKTsKKyAgICBpZihtX2xpbWl0
aW5nQ29uZUFuZ2xlKQorICAgICAgICBtX2xpbWl0aW5nQ29uZUFuZ2xlLT5kZXJlZigpOworfQor
CitTVkdBbmltYXRlZEVudW1lcmF0aW9uSW1wbCAqU1ZHRkVMaWdodEVsZW1lbnRJbXBsOjp0eXBl
KCkgY29uc3QKK3sKKyAgICBTVkdTdHlsZWRFbGVtZW50SW1wbCAqZHVtbXkgPSAwOworICAgIHJl
dHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZEVudW1lcmF0aW9uSW1wbD4obV90eXBlLCBkdW1t
eSk7Cit9CisKK1NWR0FuaW1hdGVkTnVtYmVySW1wbCAqU1ZHRkVMaWdodEVsZW1lbnRJbXBsOjph
emltdXRoKCkgY29uc3QKK3sKKyAgICBTVkdTdHlsZWRFbGVtZW50SW1wbCAqZHVtbXkgPSAwOwor
ICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZE51bWJlckltcGw+KG1fYXppbXV0aCwg
ZHVtbXkpOworfQorCitTVkdBbmltYXRlZE51bWJlckltcGwgKlNWR0ZFTGlnaHRFbGVtZW50SW1w
bDo6ZWxldmF0aW9uKCkgY29uc3QKK3sKKyAgICBTVkdTdHlsZWRFbGVtZW50SW1wbCAqZHVtbXkg
PSAwOworICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZE51bWJlckltcGw+KG1fZWxl
dmF0aW9uLCBkdW1teSk7Cit9CisKK1NWR0FuaW1hdGVkTnVtYmVySW1wbCAqU1ZHRkVMaWdodEVs
ZW1lbnRJbXBsOjp4KCkgY29uc3QKK3sKKyAgICBTVkdTdHlsZWRFbGVtZW50SW1wbCAqZHVtbXkg
PSAwOworICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZE51bWJlckltcGw+KG1feCwg
ZHVtbXkpOworfQorCitTVkdBbmltYXRlZE51bWJlckltcGwgKlNWR0ZFTGlnaHRFbGVtZW50SW1w
bDo6eSgpIGNvbnN0Cit7CisgICAgU1ZHU3R5bGVkRWxlbWVudEltcGwgKmR1bW15ID0gMDsKKyAg
ICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWROdW1iZXJJbXBsPihtX3ksIGR1bW15KTsK
K30KKworCitTVkdBbmltYXRlZE51bWJlckltcGwgKlNWR0ZFTGlnaHRFbGVtZW50SW1wbDo6eigp
IGNvbnN0Cit7CisgICAgU1ZHU3R5bGVkRWxlbWVudEltcGwgKmR1bW15ID0gMDsKKyAgICByZXR1
cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWROdW1iZXJJbXBsPihtX3osIGR1bW15KTsKK30KKwor
U1ZHQW5pbWF0ZWROdW1iZXJJbXBsICpTVkdGRUxpZ2h0RWxlbWVudEltcGw6OnBvaW50c0F0WCgp
IGNvbnN0Cit7CisgICAgU1ZHU3R5bGVkRWxlbWVudEltcGwgKmR1bW15ID0gMDsKKyAgICByZXR1
cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWROdW1iZXJJbXBsPihtX3BvaW50c0F0WCwgZHVtbXkp
OworfQorCitTVkdBbmltYXRlZE51bWJlckltcGwgKlNWR0ZFTGlnaHRFbGVtZW50SW1wbDo6cG9p
bnRzQXRZKCkgY29uc3QKK3sKKyAgICBTVkdTdHlsZWRFbGVtZW50SW1wbCAqZHVtbXkgPSAwOwor
ICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZE51bWJlckltcGw+KG1fcG9pbnRzQXRZ
LCBkdW1teSk7Cit9CisKK1NWR0FuaW1hdGVkTnVtYmVySW1wbCAqU1ZHRkVMaWdodEVsZW1lbnRJ
bXBsOjpwb2ludHNBdFooKSBjb25zdAoreworICAgIFNWR1N0eWxlZEVsZW1lbnRJbXBsICpkdW1t
eSA9IDA7CisgICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTnVtYmVySW1wbD4obV9w
b2ludHNBdFosIGR1bW15KTsKK30KKworU1ZHQW5pbWF0ZWROdW1iZXJJbXBsICpTVkdGRUxpZ2h0
RWxlbWVudEltcGw6OnNwZWN1bGFyRXhwb25lbnQoKSBjb25zdAoreworICAgIFNWR1N0eWxlZEVs
ZW1lbnRJbXBsICpkdW1teSA9IDA7CisgICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVk
TnVtYmVySW1wbD4obV9zcGVjdWxhckV4cG9uZW50LCBkdW1teSk7Cit9CisKK1NWR0FuaW1hdGVk
TnVtYmVySW1wbCAqU1ZHRkVMaWdodEVsZW1lbnRJbXBsOjpsaW1pdGluZ0NvbmVBbmdsZSgpIGNv
bnN0Cit7CisgICAgU1ZHU3R5bGVkRWxlbWVudEltcGwgKmR1bW15ID0gMDsKKyAgICByZXR1cm4g
bGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWROdW1iZXJJbXBsPihtX2xpbWl0aW5nQ29uZUFuZ2xlLCBk
dW1teSk7Cit9CisKK3ZvaWQgU1ZHRkVMaWdodEVsZW1lbnRJbXBsOjpwYXJzZUF0dHJpYnV0ZShL
RE9NOjpBdHRyaWJ1dGVJbXBsICphdHRyKQoreworICAgIGludCBpZCA9IChhdHRyLT5pZCgpICYg
Tm9kZUltcGxfSWRMb2NhbE1hc2spOworICAgIEtET006OkRPTVN0cmluZyB2YWx1ZShhdHRyLT52
YWx1ZSgpKTsKKyAgICBzd2l0Y2goaWQpCisgICAgeworICAgICAgICBjYXNlIEFUVFJfQVpJTVVU
SDoKKyAgICAgICAgeworICAgICAgICAgICAgYXppbXV0aCgpLT5zZXRCYXNlVmFsKHZhbHVlLnN0
cmluZygpLnRvRG91YmxlKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAg
ICAgY2FzZSBBVFRSX0VMRVZBVElPTjoKKyAgICAgICAgeworICAgICAgICAgICAgZWxldmF0aW9u
KCktPnNldEJhc2VWYWwodmFsdWUuc3RyaW5nKCkudG9Eb3VibGUoKSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEFUVFJfWDoKKyAgICAgICAgeworICAgICAg
ICAgICAgeCgpLT5zZXRCYXNlVmFsKHZhbHVlLnN0cmluZygpLnRvRG91YmxlKCkpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBBVFRSX1k6CisgICAgICAgIHsK
KyAgICAgICAgICAgIHkoKS0+c2V0QmFzZVZhbCh2YWx1ZS5zdHJpbmcoKS50b0RvdWJsZSgpKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgQVRUUl9aOgorICAg
ICAgICB7CisgICAgICAgICAgICB6KCktPnNldEJhc2VWYWwodmFsdWUuc3RyaW5nKCkudG9Eb3Vi
bGUoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEFUVFJf
UE9JTlRTQVRYOgorICAgICAgICB7CisgICAgICAgICAgICBwb2ludHNBdFgoKS0+c2V0QmFzZVZh
bCh2YWx1ZS5zdHJpbmcoKS50b0RvdWJsZSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgICAgIGNhc2UgQVRUUl9QT0lOVFNBVFk6CisgICAgICAgIHsKKyAgICAgICAgICAg
IHBvaW50c0F0WSgpLT5zZXRCYXNlVmFsKHZhbHVlLnN0cmluZygpLnRvRG91YmxlKCkpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBBVFRSX1BPSU5UU0FUWjoK
KyAgICAgICAgeworICAgICAgICAgICAgcG9pbnRzQXRaKCktPnNldEJhc2VWYWwodmFsdWUuc3Ry
aW5nKCkudG9Eb3VibGUoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICBjYXNlIEFUVFJfU1BFQ1VMQVJFWFBPTkVOVDoKKyAgICAgICAgeworICAgICAgICAgICAgc3Bl
Y3VsYXJFeHBvbmVudCgpLT5zZXRCYXNlVmFsKHZhbHVlLnN0cmluZygpLnRvRG91YmxlKCkpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBBVFRSX0xJTUlUSU5H
Q09ORUFOR0xFOgorICAgICAgICB7CisgICAgICAgICAgICBsaW1pdGluZ0NvbmVBbmdsZSgpLT5z
ZXRCYXNlVmFsKHZhbHVlLnN0cmluZygpLnRvRG91YmxlKCkpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgeworICAgICAgICAgICAgU1ZH
RWxlbWVudEltcGw6OnBhcnNlQXR0cmlidXRlKGF0dHIpOworICAgICAgICB9CisgICAgfTsKK30K
SW5kZXg6IFNWR0ZFTGlnaHRFbGVtZW50SW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtTnB1IFNWR0ZF
TGlnaHRFbGVtZW50SW1wbC5oCi0tLSBTVkdGRUxpZ2h0RWxlbWVudEltcGwuaAkxIEphbiAxOTcw
IDAwOjAwOjAwIC0wMDAwCisrKyBTVkdGRUxpZ2h0RWxlbWVudEltcGwuaAkzIE5vdiAyMDA1IDAy
OjU3OjM0IC0wMDAwCkBAIC0wLDAgKzEsNTIgQEAKKy8vcHJlc3VtYWJseSBuZWVkIGEgY29weXJp
Z2h0IG5vdGljZSBvZiBzb21la2luZCBoZXJlCisKKyNpZm5kZWYgS1NWR19TVkdGRUxpZ2h0RWxl
bWVudEltcGxfSAorI2RlZmluZSBLU1ZHX1NWR0ZFTGlnaHRFbGVtZW50SW1wbF9ICisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU1ZHRWxlbWVudEltcGwuaCIKKworbmFtZXNwYWNlIEtT
VkcKK3sKKyAgICBjbGFzcyBTVkdBbmltYXRlZE51bWJlckltcGw7CisgICAgY2xhc3MgU1ZHQW5p
bWF0ZWROdW1iZXJMaXN0SW1wbDsKKyAgICBjbGFzcyBTVkdBbmltYXRlZEVudW1lcmF0aW9uSW1w
bDsKKyAgICAKKyAgICBjbGFzcyBTVkdGRUxpZ2h0RWxlbWVudEltcGwgOiBwdWJsaWMgU1ZHRWxl
bWVudEltcGwKKyAgICB7CisgICAgcHVibGljOgorICAgICAgICBTVkdGRUxpZ2h0RWxlbWVudElt
cGwoS0RPTTo6RG9jdW1lbnRQdHIgKmRvYywgS0RPTTo6Tm9kZUltcGw6OklkIGlkLCBLRE9NOjpE
T01TdHJpbmdJbXBsICpwcmVmaXgpOworICAgICAgICB2aXJ0dWFsIH5TVkdGRUxpZ2h0RWxlbWVu
dEltcGwoKTsKKyAgICAgICAgCisgICAgICAgIC8vICdTVkdDb21wb25lbnRUcmFuc2ZlckZ1bmN0
aW9uRWxlbWVudCcgZnVuY3Rpb25zCisgICAgICAgIFNWR0FuaW1hdGVkRW51bWVyYXRpb25JbXBs
ICp0eXBlKCkgY29uc3Q7CisgICAgICAgIFNWR0FuaW1hdGVkTnVtYmVySW1wbCAqYXppbXV0aCgp
IGNvbnN0OworICAgICAgICBTVkdBbmltYXRlZE51bWJlckltcGwgKmVsZXZhdGlvbigpIGNvbnN0
OworICAgICAgICBTVkdBbmltYXRlZE51bWJlckltcGwgKngoKSBjb25zdDsKKyAgICAgICAgU1ZH
QW5pbWF0ZWROdW1iZXJJbXBsICp5KCkgY29uc3Q7CisgICAgICAgIFNWR0FuaW1hdGVkTnVtYmVy
SW1wbCAqeigpIGNvbnN0OworICAgICAgICBTVkdBbmltYXRlZE51bWJlckltcGwgKnBvaW50c0F0
WCgpIGNvbnN0OworICAgICAgICBTVkdBbmltYXRlZE51bWJlckltcGwgKnBvaW50c0F0WSgpIGNv
bnN0OworICAgICAgICBTVkdBbmltYXRlZE51bWJlckltcGwgKnBvaW50c0F0WigpIGNvbnN0Owor
ICAgICAgICBTVkdBbmltYXRlZE51bWJlckltcGwgKnNwZWN1bGFyRXhwb25lbnQoKSBjb25zdDsK
KyAgICAgICAgU1ZHQW5pbWF0ZWROdW1iZXJJbXBsICpsaW1pdGluZ0NvbmVBbmdsZSgpIGNvbnN0
OworICAgICAgICAKKyAgICAgICAgLy8gRGVyaXZlZCBmcm9tOiAnRWxlbWVudEltcGwnCisgICAg
ICAgIHZpcnR1YWwgdm9pZCBwYXJzZUF0dHJpYnV0ZShLRE9NOjpBdHRyaWJ1dGVJbXBsICphdHRy
KTsKKyAgICAgICAgCisgICAgcHJpdmF0ZToKKyAgICAgICAgbXV0YWJsZSBTVkdBbmltYXRlZEVu
dW1lcmF0aW9uSW1wbCAqbV90eXBlOworICAgICAgICBtdXRhYmxlIFNWR0FuaW1hdGVkTnVtYmVy
SW1wbCAqbV9hemltdXRoOworICAgICAgICBtdXRhYmxlIFNWR0FuaW1hdGVkTnVtYmVySW1wbCAq
bV9lbGV2YXRpb247CisgICAgICAgIG11dGFibGUgU1ZHQW5pbWF0ZWROdW1iZXJJbXBsICptX3g7
CisgICAgICAgIG11dGFibGUgU1ZHQW5pbWF0ZWROdW1iZXJJbXBsICptX3k7CisgICAgICAgIG11
dGFibGUgU1ZHQW5pbWF0ZWROdW1iZXJJbXBsICptX3o7CisgICAgICAgIG11dGFibGUgU1ZHQW5p
bWF0ZWROdW1iZXJJbXBsICptX3BvaW50c0F0WDsKKyAgICAgICAgbXV0YWJsZSBTVkdBbmltYXRl
ZE51bWJlckltcGwgKm1fcG9pbnRzQXRZOworICAgICAgICBtdXRhYmxlIFNWR0FuaW1hdGVkTnVt
YmVySW1wbCAqbV9wb2ludHNBdFo7CisgICAgICAgIG11dGFibGUgU1ZHQW5pbWF0ZWROdW1iZXJJ
bXBsICptX3NwZWN1bGFyRXhwb25lbnQ7CisgICAgICAgIG11dGFibGUgU1ZHQW5pbWF0ZWROdW1i
ZXJJbXBsICptX2xpbWl0aW5nQ29uZUFuZ2xlOworICAgICAgICAKKyAgICB9OworfTsKKworI2Vu
ZGlmClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpJbmRleDogU1ZHRkVQb2ludExpZ2h0RWxl
bWVudEltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtTnB1IFNWR0ZFUG9pbnRMaWdodEVsZW1lbnRJ
bXBsLmNwcAotLS0gU1ZHRkVQb2ludExpZ2h0RWxlbWVudEltcGwuY3BwCTEgSmFuIDE5NzAgMDA6
MDA6MDAgLTAwMDAKKysrIFNWR0ZFUG9pbnRMaWdodEVsZW1lbnRJbXBsLmNwcAkzIE5vdiAyMDA1
IDAyOjQ5OjI0IC0wMDAwCkBAIC0wLDAgKzEsMTQgQEAKKy8vIGNvcHlyaWdodCBmb28gaGVyZQor
CisjaW5jbHVkZSAiU1ZHRkVQb2ludExpZ2h0RWxlbWVudEltcGwuaCIKKwordXNpbmcgbmFtZXNw
YWNlIEtTVkc7CisKK1NWR0ZFUG9pbnRMaWdodEVsZW1lbnRJbXBsOjpTVkdGRVBvaW50TGlnaHRF
bGVtZW50SW1wbChLRE9NOjpEb2N1bWVudFB0ciAqZG9jLCBLRE9NOjpOb2RlSW1wbDo6SWQgaWQs
IEtET006OkRPTVN0cmluZ0ltcGwgKnByZWZpeCkgOiAKK1NWR0ZFTGlnaHRFbGVtZW50SW1wbChk
b2MsIGlkLCBwcmVmaXgpCit7Cit9CisKK1NWR0ZFUG9pbnRMaWdodEVsZW1lbnRJbXBsOjp+U1ZH
RkVQb2ludExpZ2h0RWxlbWVudEltcGwoKQoreworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZp
bGUKSW5kZXg6IFNWR0ZFUG9pbnRMaWdodEVsZW1lbnRJbXBsLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpkaWZmIC1O
cHUgU1ZHRkVQb2ludExpZ2h0RWxlbWVudEltcGwuaAotLS0gU1ZHRkVQb2ludExpZ2h0RWxlbWVu
dEltcGwuaAkxIEphbiAxOTcwIDAwOjAwOjAwIC0wMDAwCisrKyBTVkdGRVBvaW50TGlnaHRFbGVt
ZW50SW1wbC5oCTMgTm92IDIwMDUgMDI6NTA6NDQgLTAwMDAKQEAgLTAsMCArMSwxOCBAQAorLy9w
cmVzdW1hYmx5IG5lZWQgYSBjb3B5cmlnaHQgbm90aWNlIG9mIHNvbWVraW5kIGhlcmUKKworI2lm
bmRlZiBLU1ZHX1NWR0ZFUG9pbnRMaWdodEVsZW1lbnRJbXBsX0gKKyNkZWZpbmUgS1NWR19TVkdG
RVBvaW50TGlnaHRFbGVtZW50SW1wbF9ICisKKyNpbmNsdWRlICJTVkdGRUxpZ2h0RWxlbWVudElt
cGwuaCIKKworbmFtZXNwYWNlIEtTVkcKK3sKKyAgICBjbGFzcyBTVkdGRVBvaW50TGlnaHRFbGVt
ZW50SW1wbCA6IHB1YmxpYyBTVkdGRUxpZ2h0RWxlbWVudEltcGwKKyAgICB7CisgICAgICAgIHB1
YmxpYzoKKyAgICAgICAgU1ZHRkVQb2ludExpZ2h0RWxlbWVudEltcGwoS0RPTTo6RG9jdW1lbnRQ
dHIgKmRvYywgS0RPTTo6Tm9kZUltcGw6OklkIGlkLCBLRE9NOjpET01TdHJpbmdJbXBsICpwcmVm
aXgpOworICAgICAgICB2aXJ0dWFsIH5TVkdGRVBvaW50TGlnaHRFbGVtZW50SW1wbCgpOworICAg
IH07Cit9OworCisjZW5kaWYKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCkluZGV4OiBTVkdE
b2N1bWVudEltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0
L2tzdmcyL3N2Zy9TVkdEb2N1bWVudEltcGwuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEx
CmRpZmYgLXAgLXUgLXIxLjExIFNWR0RvY3VtZW50SW1wbC5jcHAKLS0tIFNWR0RvY3VtZW50SW1w
bC5jcHAJOCBPY3QgMjAwNSAwOToxODoxNSAtMDAwMAkxLjExCisrKyBTVkdEb2N1bWVudEltcGwu
Y3BwCTMgTm92IDIwMDUgMDM6MzY6MzMgLTAwMDAKQEAgLTEwNyw2ICsxMDcsNyBAQAogI2luY2x1
ZGUgIlNWR0xpbmVhckdyYWRpZW50RWxlbWVudEltcGwuaCIKICNpbmNsdWRlICJTVkdSYWRpYWxH
cmFkaWVudEVsZW1lbnRJbXBsLmgiCiAjaW5jbHVkZSAiU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1l
bnRJbXBsLmgiCisjaW5jbHVkZSAiU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50SW1wbC5oIgog
I2luY2x1ZGUgIlNWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50SW1wbC5oIgogCiAjaW5jbHVk
ZSAic3ZndGFncy5jIgpAQCAtNDM1LDYgKzQzNiwxNyBAQCBTVkdFbGVtZW50SW1wbCAqU1ZHRG9j
dW1lbnRJbXBsOjpjcmVhdGVTCiAgICAgICAgICAgICBlbGVtZW50ID0gbmV3IFNWR0N1cnNvckVs
ZW1lbnRJbXBsKGRvY1B0cigpLCBpZCwgcHJlZml4KTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CisgICAgICAgIGNhc2UgSURfRkVESUZGVVNFTElHSFRJTkc6CisgICAgICAgIHsKKyAg
ICAgICAgICAgIGVsZW1lbnQgPSBuZXcgU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50SW1wbChk
b2NQdHIoKSwgaWQsIHByZWZpeCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICBjYXNlIElEX0ZFUE9JTlRMSUdIVDoKKyAgICAgICAgY2FzZSBJRF9GRVNQT1RMSUdIVDoK
KyAgICAgICAgY2FzZSBJRF9GRURJU1RBTlRMSUdIVDoKKyAgICAgICAgeworICAgICAgICAgICAg
cHJpbnRmKCJsaWdodFxuIik7CisgICAgICAgIH0KICAgICAgICAgZGVmYXVsdDoKICAgICAgICAg
ICAgIGVsZW1lbnQgPSAwOwogICAgIH07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>4626</attachid>
            <date>2005-11-08 01:58:32 -0800</date>
            <delta_ts>2005-11-19 17:11:19 -0800</delta_ts>
            <desc>Lighting patch v3</desc>
            <filename>lighting.patch</filename>
            <type>text/plain</type>
            <size>112210</size>
            <attacher name="Oliver Hunt">oliver</attacher>
            
              <data encoding="base64">SW5kZXg6IGtjYW52YXMvS0NhbnZhc0ZpbHRlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9j
dnMvcm9vdC9TVkdTdXBwb3J0L2tjYW52YXMvS0NhbnZhc0ZpbHRlcnMuY3BwLHYKcmV0cmlldmlu
ZyByZXZpc2lvbiAxLjYKZGlmZiAtcCAtdSAtcjEuNiBrY2FudmFzL0tDYW52YXNGaWx0ZXJzLmNw
cAotLS0ga2NhbnZhcy9LQ2FudmFzRmlsdGVycy5jcHAJNSBPY3QgMjAwNSAwNTozNjo0NCAtMDAw
MAkxLjYKKysrIGtjYW52YXMvS0NhbnZhc0ZpbHRlcnMuY3BwCTggTm92IDIwMDUgMTA6MDA6MzMg
LTAwMDAKQEAgLTgxLDYgKzgxLDE0IEBAIHZvaWQgS0NhbnZhc0ZpbHRlckVmZmVjdDo6c2V0UmVz
dWx0KGNvbnMKICAgICBtX3Jlc3VsdCA9IHJlc3VsdDsKIH0KIAorCitzdGF0aWMgUVRleHRTdHJl
YW0gJm9wZXJhdG9yPDwoUVRleHRTdHJlYW0gJnRzLCBjb25zdCBLQ2FudmFzUG9pbnQzRiBwKQor
eworICAgIHRzIDw8ICJ4PSIgPDwgcC54KCkgPDwgIiB5PSIgPDwgcC55KCkgPDwgIiB6PSIgPDwg
cC56KCk7CisgICAgcmV0dXJuIHRzOyAgCit9CisKKwogUVRleHRTdHJlYW0gJktDYW52YXNGaWx0
ZXJFZmZlY3Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oUVRleHRTdHJlYW0gJnRzKSBjb25zdAog
ewogICAgIGlmICghaW4oKS5pc0VtcHR5KCkpCkBAIC05MiwzMCArMTAwLDM0IEBAIFFUZXh0U3Ry
ZWFtICZLQ2FudmFzRmlsdGVyRWZmZWN0OjpleHRlcm4KICAgICByZXR1cm4gdHM7ICAgIAogfQog
Ci1RVGV4dFN0cmVhbSAmS0NhbnZhc0ZFRGlzdGFudExpZ2h0OjpleHRlcm5hbFJlcHJlc2VudGF0
aW9uKFFUZXh0U3RyZWFtICZ0cykgY29uc3QKK1FUZXh0U3RyZWFtICZLQ1BvaW50TGlnaHRTb3Vy
Y2U6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oUVRleHRTdHJlYW0gJnRzKSBjb25zdAogewotICAg
IHRzIDw8ICJbdHlwZT1ESVNUQU5ULUxJR0hUXSAiOwotICAgIEtDYW52YXNGaWx0ZXJFZmZlY3Q6
OmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMpOwotICAgIHRzIDw8ICJbYXppbXV0aD0iIDw8IGF6
aW11dGgoKSA8PCAiXSIKLSAgICAgICAgPDwgIltlbGV2YXRpb249IiA8PCBlbGV2YXRpb24oKSA8
PCAiXSI7Ci0gICAgcmV0dXJuIHRzOworICAgIHRzIDw8ICJbcG9zaXRpb249XCIiIDw8IHBvc2l0
aW9uKCkgPDwgIlwiXSI7CisgICAgcmV0dXJuIHRzOyAgCiB9CiAKLVFUZXh0U3RyZWFtICZLQ2Fu
dmFzRkVQb2ludExpZ2h0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFFUZXh0U3RyZWFtICZ0cykg
Y29uc3QKK1FUZXh0U3RyZWFtICZLQ1Nwb3RMaWdodFNvdXJjZTo6ZXh0ZXJuYWxSZXByZXNlbnRh
dGlvbihRVGV4dFN0cmVhbSAmdHMpIGNvbnN0CiB7Ci0gICAgdHMgPDwgIlt0eXBlPVBPSU5ULUxJ
R0hUXSAiOwotICAgIEtDYW52YXNGaWx0ZXJFZmZlY3Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24o
dHMpOwotICAgIHRzIDw8ICJbeD0iIDw8IG1feCA8PCAiIHk9IiA8PCBtX3kgPDwgIiB6PSIgPDwg
bV96IDw8ICJdIjsKKyAgICB0cyA8PCAiW3Bvc2l0aW9uPVwiIiA8PCBwb3NpdGlvbigpIDw8ICJc
Il0iOworICAgIHRzIDw8ICJbZGlyZWN0aW9uPVwiIiA8PCBkaXJlY3Rpb24oKSA8PCAiXCJdIjsK
KyAgICB0cyA8PCAiW3NwZWN1bGFyRXhwb25lbnQ9XCIiIDw8IHNwZWN1bGFyRXhwb25lbnQoKSA8
PCAiXCJdIjsKKyAgICB0cyA8PCAiW2xpbWl0aW5nQ29uZUFuZ2xlPVwiIiA8PCBsaW1pdGluZ0Nv
bmVBbmdsZSgpIDw8ICJcIl0iOwogICAgIHJldHVybiB0czsKIH0KIAotUVRleHRTdHJlYW0gJktD
YW52YXNGRVNwb3RMaWdodDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihRVGV4dFN0cmVhbSAmdHMp
IGNvbnN0CitRVGV4dFN0cmVhbSAmS0NEaXN0YW50TGlnaHRTb3VyY2U6OmV4dGVybmFsUmVwcmVz
ZW50YXRpb24oUVRleHRTdHJlYW0gJnRzKSBjb25zdAogewotICAgIHRzIDw8ICJbdHlwZT1TUE9U
LUxJR0hUXSAiOyAKLSAgICBLQ2FudmFzRmlsdGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0
aW9uKHRzKTsKLSAgICB0cyA8PCAiW3g9IiA8PCBtX3ggPDwgIiB5PSIgPDwgbV95IDw8ICIgej0i
IDw8IG1feiA8PCAiXSIKLSAgICAgICAgPDwgIltwb2ludHMgYXQgeD0iIDw8IG1fcG9pbnRzQXRY
IDw8ICIgeT0iIDw8IG1fcG9pbnRzQXRZIDw8ICIgej0iIDw8IG1fcG9pbnRzQXRaIDw8ICJdIjsK
LSAgICByZXR1cm4gdHM7CisgICAgdHMgPDwgIlthemltdXRoPVwiIiA8PCBhemltdXRoKCkgPDwg
IlwiXSI7CisgICAgdHMgPDwgIltlbGV2YXRpb249XCIiIDw8IGVsZXZhdGlvbigpIDw8ICJcIl0i
OworICAgIHJldHVybiB0czsgIAorfQorCisKKworc3RhdGljIFFUZXh0U3RyZWFtICZvcGVyYXRv
cjw8KFFUZXh0U3RyZWFtICZ0cywgUVBvaW50RiBwKQoreworICAgIHRzIDw8ICJ4PSIgPDwgcC54
KCkgPDwgIiB5PSIgPDwgcC55KCk7CisgICAgcmV0dXJuIHRzOyAgCiB9CiAKIHN0YXRpYyBRVGV4
dFN0cmVhbSAmb3BlcmF0b3I8PChRVGV4dFN0cmVhbSAmdHMsIEtDQmxlbmRNb2RlVHlwZSB0KQpA
QCAtMjMzLDIwICsyNDUsMjYgQEAgc3RhdGljIFFUZXh0U3RyZWFtICZvcGVyYXRvcjw8KFFUZXh0
U3RyZQogICAgICAgICBjYXNlIEVNX05PTkU6CiAgICAgICAgICAgICB0cyA8PCAiTk9ORSI7IGJy
ZWFrOwogICAgIH0KLSAgICByZXR1cm4gdHM7ICAgIAorICAgIHJldHVybiB0czsKK30KKworc3Rh
dGljIFFUZXh0U3RyZWFtICZvcGVyYXRvcjw8KFFUZXh0U3RyZWFtICZ0cywgUVNpemUgcykKK3sg
ICAKKyAgICB0cyA8PCAieD0iIDw8IHMud2lkdGgoKSA8PCAiIHk9IiA8PCBzLmhlaWdodCgpOyAK
KyAgICByZXR1cm4gdHM7CiB9CiAKIFFUZXh0U3RyZWFtICZLQ2FudmFzRkVDb252b2x2ZU1hdHJp
eDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihRVGV4dFN0cmVhbSAmdHMpIGNvbnN0CiB7CiAgICAg
dHMgPDwgIlt0eXBlPUNPTlZPTFZFLU1BVFJJWF0gIjsKICAgICBLQ2FudmFzRmlsdGVyRWZmZWN0
OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzKTsKLSAgICB0cyA8PCAiIFtvcmRlciB4PSAiIDw8
IG1fb3JkZXJYIDw8ICIgeT0iIDw8IG1fb3JkZXJZIDw8ICJdIgorICAgIHRzIDw8ICIgW29yZGVy
ICIgPDwgbV9rZXJuZWxTaXplIDw8ICJdIgogICAgICAgICA8PCAiIFtrZXJuZWwgbWF0cml4PSIg
PDwgbV9rZXJuZWxNYXRyaXggIDw8ICJdIgogICAgICAgICA8PCAiIFtkaXZpc29yPSIgPDwgbV9k
aXZpc29yIDw8ICJdIgogICAgICAgICA8PCAiIFtiaWFzPSIgPDwgbV9iaWFzIDw8ICJdIgotICAg
ICAgICA8PCAiIFt0YXJnZXQgeD0gIiA8PCBtX3RhcmdldFggPDwgIiB5PSIgPDwgbV90YXJnZXRZ
IDw8ICJdIgorICAgICAgICA8PCAiIFt0YXJnZXQgIiA8PCBtX3RhcmdldE9mZnNldCA8PCAiXSIK
ICAgICAgICAgPDwgIiBbZWRnZSBtb2RlPSIgPDwgbV9lZGdlTW9kZSA8PCAiXSIKLSAgICAgICAg
PDwgIiBba2VybmVsIHVuaXQgbGVuZ3RoIHg9IiA8PCBtX2tlcm5lbFVuaXRMZW5ndGhYIDw8ICIg
eT0iIDw8IG1fa2VybmVsVW5pdExlbmd0aFkgPDwgIl0iCisgICAgICAgIDw8ICIgW2tlcm5lbCB1
bml0IGxlbmd0aCAiIDw8IG1fa2VybmVsVW5pdExlbmd0aCA8PCAiXSIKICAgICAgICAgPDwgIiBb
cHJlc2VydmUgYWxwaGE9IiA8PCBtX3ByZXNlcnZlQWxwaGEgPDwgIl0iOyAgICAgICAgCiAgICBy
ZXR1cm4gdHM7CiB9CkBAIC0yNTcsNyArMjc1LDcgQEAgUVRleHRTdHJlYW0gJktDYW52YXNGRURp
ZmZ1c2VMaWdodGluZzo6ZQogICAgIEtDYW52YXNGaWx0ZXJFZmZlY3Q6OmV4dGVybmFsUmVwcmVz
ZW50YXRpb24odHMpOwogICAgIHRzIDw8ICIgW3N1cmZhY2Ugc2NhbGU9IiA8PCBtX3N1cmZhY2VT
Y2FsZSA8PCAiXSIKICAgICAgICAgPDwgIiBbZGlmZnVzZSBjb25zdGFudD0iIDw8IG1fZGlmZnVz
ZUNvbnN0YW50IDw8ICJdIgotICAgICAgICA8PCAiIFtrZXJuZWwgdW5pdCBsZW5ndGggeD0iIDw8
IG1fa2VybmVsVW5pdExlbmd0aFggPDwgIiB5PSIgPDwgbV9rZXJuZWxVbml0TGVuZ3RoWSA8PCAi
XSI7CisgICAgICAgIDw8ICIgW2tlcm5lbCB1bml0IGxlbmd0aCAiIDw8IG1fa2VybmVsVW5pdExl
bmd0aFggPDwgIiwgIiA8PCBtX2tlcm5lbFVuaXRMZW5ndGhZIDw8ICJdIjsKICAgIHJldHVybiB0
czsKIH0KIApJbmRleDoga2NhbnZhcy9LQ2FudmFzRmlsdGVycy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZp
bGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tjYW52YXMvS0NhbnZhc0ZpbHRlcnMuaCx2CnJldHJp
ZXZpbmcgcmV2aXNpb24gMS42CmRpZmYgLXAgLXUgLXIxLjYga2NhbnZhcy9LQ2FudmFzRmlsdGVy
cy5oCi0tLSBrY2FudmFzL0tDYW52YXNGaWx0ZXJzLmgJOCBTZXAgMjAwNSAwODowMzoxMCAtMDAw
MAkxLjYKKysrIGtjYW52YXMvS0NhbnZhc0ZpbHRlcnMuaAk4IE5vdiAyMDA1IDEwOjAwOjM0IC0w
MDAwCkBAIC01Myw2ICs1Myw1MSBAQCB0eXBlZGVmIGVudW0KICNpbmNsdWRlIDxxY29sb3IuaD4K
ICNpbmNsdWRlIDxxc3RyaW5nbGlzdC5oPgogCitjbGFzcyBLQ2FudmFzUG9pbnQzRiB7CitwdWJs
aWM6CisgICAgZmxvYXQgeCgpIGNvbnN0IHsgcmV0dXJuIG1feDsgfQorICAgIHZvaWQgc2V0WChm
bG9hdCB4KSB7IG1feCA9IHg7IH0KKyAgICAKKyAgICBmbG9hdCB5KCkgY29uc3QgeyByZXR1cm4g
bV95OyB9CisgICAgdm9pZCBzZXRZKGZsb2F0IHkpIHsgbV95ID0geTsgfQorICAgIAorICAgIGZs
b2F0IHooKSBjb25zdCB7IHJldHVybiBtX3o7IH0KKyAgICB2b2lkIHNldFooZmxvYXQgeikgeyBt
X3ogPSB6OyB9CisgICAgCitwcml2YXRlOgorICAgIGZsb2F0IG1feDsKKyAgICBmbG9hdCBtX3k7
CisgICAgZmxvYXQgbV96OworfTsKKworLy8gVGVtcG9yYXJ5IEhBQ0sKK2NsYXNzIFFQb2ludEYg
eworcHVibGljOgorICAgIGZsb2F0IHgoKSBjb25zdCB7IHJldHVybiBtX3g7IH0KKyAgICB2b2lk
IHNldFgoZmxvYXQgeCkgeyBtX3ggPSB4OyB9CisgICAgCisgICAgZmxvYXQgeSgpIGNvbnN0IHsg
cmV0dXJuIG1feTsgfQorICAgIHZvaWQgc2V0WShmbG9hdCB5KSB7IG1feSA9IHk7IH0KKyAgICAK
K3ByaXZhdGU6CisgICAgZmxvYXQgbV94OworICAgIGZsb2F0IG1feTsKK307CisKKy8vIFRlbXBv
cmFyeSBIQUNLCitjbGFzcyBRU2l6ZUYgeworcHVibGljOgorICAgIGZsb2F0IHdpZHRoKCkgY29u
c3QgeyByZXR1cm4gbV93aWR0aDsgfQorICAgIHZvaWQgc2V0V2lkdGgoZmxvYXQgd2lkdGgpIHsg
bV93aWR0aCA9IHdpZHRoOyB9CisgICAgCisgICAgZmxvYXQgaGVpZ2h0KCkgY29uc3QgeyByZXR1
cm4gbV9oZWlnaHQ7IH0KKyAgICB2b2lkIHNldEhlaWdodChmbG9hdCBoZWlnaHQpIHsgbV9oZWln
aHQgPSBoZWlnaHQ7IH0KKyAgICAKK3ByaXZhdGU6CisgICAgZmxvYXQgbV93aWR0aDsKKyAgICBm
bG9hdCBtX2hlaWdodDsKK307CisKIGNsYXNzIEtDYW52YXNGaWx0ZXJFZmZlY3Q7CiBjbGFzcyBL
UmVuZGVyaW5nRGV2aWNlQ29udGV4dDsKIApAQCAtMTI2LDUxICsxNzEsNiBAQCBwcml2YXRlOgog
CiBRVGV4dFN0cmVhbSAmb3BlcmF0b3I8PChRVGV4dFN0cmVhbSAmLCBjb25zdCBLQ2FudmFzRmls
dGVyRWZmZWN0ICYpOwogCi1jbGFzcyBLQ2FudmFzRkVEaXN0YW50TGlnaHQgOiBwdWJsaWMgS0Nh
bnZhc0ZpbHRlckVmZmVjdAotewotcHVibGljOgotICAgIGZsb2F0IGF6aW11dGgoKSBjb25zdCB7
IHJldHVybiBtX2F6aW11dGg7IH0KLSAgICB2b2lkIHNldEF6aW11dGgoZmxvYXQgYXppbXV0aCkg
eyBtX2F6aW11dGggPSBhemltdXRoOyB9Ci0KLSAgICBmbG9hdCBlbGV2YXRpb24oKSBjb25zdCB7
IHJldHVybiBtX2VsZXZhdGlvbjsgfQotICAgIHZvaWQgc2V0RWxldmF0aW9uKGZsb2F0IGVsZXZh
dGlvbikgeyBtX2VsZXZhdGlvbiA9IGVsZXZhdGlvbjsgfQotICAgIAotICAgIC8vIEZJWE1FLCBt
b3JlIGhlcmUuLi4KLSAgICAgUVRleHRTdHJlYW0gJmV4dGVybmFsUmVwcmVzZW50YXRpb24oUVRl
eHRTdHJlYW0gJikgY29uc3Q7Ci1wcml2YXRlOgotICAgIGZsb2F0IG1fYXppbXV0aDsKLSAgICBm
bG9hdCBtX2VsZXZhdGlvbjsKLX07Ci0KLWNsYXNzIEtDYW52YXNGRVBvaW50TGlnaHQgOiBwdWJs
aWMgS0NhbnZhc0ZpbHRlckVmZmVjdAotewotcHVibGljOgotCi0gICAgUVRleHRTdHJlYW0gJmV4
dGVybmFsUmVwcmVzZW50YXRpb24oUVRleHRTdHJlYW0gJikgY29uc3Q7Ci0KLXByaXZhdGU6Ci0g
ICAgZmxvYXQgbV94OwotICAgIGZsb2F0IG1feTsKLSAgICBmbG9hdCBtX3o7Ci19OwotCi1jbGFz
cyBLQ2FudmFzRkVTcG90TGlnaHQgOiBwdWJsaWMgS0NhbnZhc0ZpbHRlckVmZmVjdAotewotcHVi
bGljOgotCi0gICAgUVRleHRTdHJlYW0gJmV4dGVybmFsUmVwcmVzZW50YXRpb24oUVRleHRTdHJl
YW0gJikgY29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAgZmxvYXQgbV94OwotICAgIGZsb2F0IG1feTsK
LSAgICBmbG9hdCBtX3o7Ci0gICAgZmxvYXQgbV9wb2ludHNBdFg7Ci0gICAgZmxvYXQgbV9wb2lu
dHNBdFk7Ci0gICAgZmxvYXQgbV9wb2ludHNBdFo7Ci0gICAgZmxvYXQgbV9zcGVjdWxhckV4cG9u
ZW50OwotICAgIGZsb2F0IG1fbGltaXRpbmdDb25lQW5nbGU7Ci19OwotCiB0eXBlZGVmIGVudW0g
ewogICAgIEJNX05PUk1BTCA9IDAsCiAgICAgQk1fTVVMVElQTFkgPSAxLApAQCAtMzMxLDM0ICsz
MzEsMTQwIEBAIHR5cGVkZWYgZW51bSB7CiBjbGFzcyBLQ2FudmFzRkVDb252b2x2ZU1hdHJpeCA6
IHB1YmxpYyBLQ2FudmFzRmlsdGVyRWZmZWN0CiB7CiBwdWJsaWM6CisgICAgUVNpemUga2VybmVs
U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fa2VybmVsU2l6ZTsgfQorICAgIHZvaWQgc2V0S2VybmVs
U2l6ZShRU2l6ZSBrZXJuZWxTaXplKSB7IG1fa2VybmVsU2l6ZSA9IGtlcm5lbFNpemU7IH0KKyAg
ICAKKyAgICBRM1ZhbHVlTGlzdDxmbG9hdD4ga2VybmVsKCkgY29uc3QgeyByZXR1cm4gbV9rZXJu
ZWxNYXRyaXg7IH0KKyAgICB2b2lkIHNldEtlcm5lbChRM1ZhbHVlTGlzdDxmbG9hdD4ga2VybmVs
KSB7IG1fa2VybmVsTWF0cml4ID0ga2VybmVsOyB9CisgICAgCisgICAgZmxvYXQgZGl2aXNvcigp
IGNvbnN0IHsgcmV0dXJuIG1fZGl2aXNvcjsgfQorICAgIHZvaWQgc2V0RGl2aXNvcihmbG9hdCBk
aXZpc29yKSB7IG1fZGl2aXNvciA9IGRpdmlzb3I7IH0KKyAgICAKKyAgICBmbG9hdCBiaWFzKCkg
Y29uc3QgeyByZXR1cm4gbV9iaWFzOyB9CisgICAgdm9pZCBzZXRCaWFzKGZsb2F0IGJpYXMpIHsg
bV9iaWFzID0gYmlhczsgfQorICAgIAorICAgIFFTaXplIHRhcmdldE9mZnNldCgpIGNvbnN0IHsg
cmV0dXJuIG1fdGFyZ2V0T2Zmc2V0OyB9CisgICAgdm9pZCBzZXRUYXJnZXRPZmZzZXQoUVNpemUg
dGFyZ2V0T2Zmc2V0KSB7IG1fdGFyZ2V0T2Zmc2V0ID0gdGFyZ2V0T2Zmc2V0OyB9CisgICAgCisg
ICAgS0NFZGdlTW9kZVR5cGUgZWRnZU1vZGUoKSBjb25zdCB7IHJldHVybiBtX2VkZ2VNb2RlOyB9
CisgICAgdm9pZCBzZXRFZGdlTW9kZShLQ0VkZ2VNb2RlVHlwZSBlZGdlTW9kZSkgeyBtX2VkZ2VN
b2RlID0gZWRnZU1vZGU7IH0KKyAgICAKKyAgICBRUG9pbnRGIGtlcm5lbFVuaXRMZW5ndGgoKSBj
b25zdCB7cmV0dXJuIG1fa2VybmVsVW5pdExlbmd0aDsgfQorICAgIHZvaWQgc2V0S2VybmVsVW5p
dExlbmd0aChRUG9pbnRGIGtlcm5lbFVuaXRMZW5ndGgpIHsgbV9rZXJuZWxVbml0TGVuZ3RoID0g
a2VybmVsVW5pdExlbmd0aDsgfQorICAgIAorICAgIGJvb2wgcHJlc2VydmVBbHBoYSgpIGNvbnN0
IHsgcmV0dXJuIG1fcHJlc2VydmVBbHBoYTsgfQorICAgIHZvaWQgc2V0UHJlc2VydmVBbHBoYShi
b29sIHByZXNlcnZlQWxwaGEpIHsgbV9wcmVzZXJ2ZUFscGhhID0gcHJlc2VydmVBbHBoYTsgfQog
CiAgICAgUVRleHRTdHJlYW0gJmV4dGVybmFsUmVwcmVzZW50YXRpb24oUVRleHRTdHJlYW0gJikg
Y29uc3Q7CiAKIHByaXZhdGU6Ci0gICAgaW50IG1fb3JkZXJYOwotICAgIGludCBtX29yZGVyWTsK
KyAgICBRU2l6ZSBtX2tlcm5lbFNpemU7CiAgICAgUTNWYWx1ZUxpc3Q8ZmxvYXQ+IG1fa2VybmVs
TWF0cml4OyAvLyBtYXliZSBzaG91bGQgYmUgYSByZWFsIG1hdHJpeD8KICAgICBmbG9hdCBtX2Rp
dmlzb3I7CiAgICAgZmxvYXQgbV9iaWFzOwotICAgIGludCBtX3RhcmdldFg7Ci0gICAgaW50IG1f
dGFyZ2V0WTsKKyAgICBRU2l6ZSBtX3RhcmdldE9mZnNldDsKICAgICBLQ0VkZ2VNb2RlVHlwZSBt
X2VkZ2VNb2RlOwotICAgIGZsb2F0IG1fa2VybmVsVW5pdExlbmd0aFg7Ci0gICAgZmxvYXQgbV9r
ZXJuZWxVbml0TGVuZ3RoWTsKKyAgICBRUG9pbnRGIG1fa2VybmVsVW5pdExlbmd0aDsKICAgICBi
b29sIG1fcHJlc2VydmVBbHBoYTsKIH07CiAKK3R5cGVkZWYgZW51bXsKKyAgICBMU19ESVNUQU5U
LAorICAgIExTX1BPSU5ULAorICAgIExTX1NQT1QKK30gS0NMaWdodFR5cGU7CisKKy8vVGhlIGxp
Z2h0IHNvdXJjZSBmb3IgRGlmZnVzZS9TcGVjdWxhckxpZ2h0aW5nCitjbGFzcyBLQ0xpZ2h0U291
cmNlCit7Citwcml2YXRlOgorICAgIEtDTGlnaHRUeXBlIG1fdHlwZTsKK3B1YmxpYzoKKyAgICBL
Q0xpZ2h0U291cmNlKEtDTGlnaHRUeXBlIGFfdHlwZSl7IG1fdHlwZSA9IGFfdHlwZTsgfTsKKyAg
ICAKKyAgICB2aXJ0dWFsIH5LQ0xpZ2h0U291cmNlKCl7fTsKKyAgICAKKyAgICBLQ0xpZ2h0VHlw
ZSB0eXBlKCkgY29uc3R7CisgICAgICAgIHJldHVybiBtX3R5cGU7CisgICAgfQorICAgIAorICAg
IHZpcnR1YWwgUVRleHRTdHJlYW0gJmV4dGVybmFsUmVwcmVzZW50YXRpb24oUVRleHRTdHJlYW0g
JikgY29uc3QgPSAwOworICAgIAorfTsKKworY2xhc3MgS0NEaXN0YW50TGlnaHRTb3VyY2UgOiBw
dWJsaWMgS0NMaWdodFNvdXJjZQoreworcHVibGljOgorICAgIEtDRGlzdGFudExpZ2h0U291cmNl
KGZsb2F0IGF6aW11dGgsIGZsb2F0IGVsZXZhdGlvbik6S0NMaWdodFNvdXJjZShMU19ESVNUQU5U
KXsgbV9hemltdXRoID0gYXppbXV0aDsgbV9lbGV2YXRpb249ZWxldmF0aW9uOyB9OworICAgIGZs
b2F0IGF6aW11dGgoKSBjb25zdHsgcmV0dXJuIG1fYXppbXV0aDsgfTsKKyAgICBmbG9hdCBlbGV2
YXRpb24oKSBjb25zdHsgcmV0dXJuIG1fZWxldmF0aW9uOyB9OworICAgIHZpcnR1YWwgUVRleHRT
dHJlYW0gJmV4dGVybmFsUmVwcmVzZW50YXRpb24oUVRleHRTdHJlYW0gJikgY29uc3Q7Citwcml2
YXRlOgorICAgIGZsb2F0IG1fYXppbXV0aDsKKyAgICBmbG9hdCBtX2VsZXZhdGlvbjsKK307CisK
K2NsYXNzIEtDUG9pbnRMaWdodFNvdXJjZSA6IHB1YmxpYyBLQ0xpZ2h0U291cmNlCit7CitwdWJs
aWM6CisgICAgS0NQb2ludExpZ2h0U291cmNlKEtDYW52YXNQb2ludDNGICYgcG9zaXRpb24pOktD
TGlnaHRTb3VyY2UoTFNfUE9JTlQpeyBtX3Bvc2l0aW9uPXBvc2l0aW9uOyB9CisgICAgY29uc3Qg
S0NhbnZhc1BvaW50M0YgJiBwb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fcG9zaXRpb247IH07
CisgICAgdmlydHVhbCBRVGV4dFN0cmVhbSAmZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihRVGV4dFN0
cmVhbSAmKSBjb25zdDsKK3ByaXZhdGU6CisgICAgS0NhbnZhc1BvaW50M0YgbV9wb3NpdGlvbjsK
K307CisKK2NsYXNzIEtDU3BvdExpZ2h0U291cmNlIDogcHVibGljIEtDTGlnaHRTb3VyY2UKK3sK
K3B1YmxpYzoKKyAgICBLQ1Nwb3RMaWdodFNvdXJjZShLQ2FudmFzUG9pbnQzRiAmIHBvc2l0aW9u
LCBLQ2FudmFzUG9pbnQzRiAmIGRpcmVjdGlvbiwgCisgICAgICAgIGZsb2F0IHNwZWN1bGFyRXhw
b25lbnQsIGZsb2F0IGxpbWl0aW5nQ29uZUFuZ2xlKTpLQ0xpZ2h0U291cmNlKExTX1NQT1Qpewor
ICAgICAgbV9wb3NpdGlvbiA9IHBvc2l0aW9uOworICAgICAgbV9kaXJlY3Rpb24gPSBkaXJlY3Rp
b247CisgICAgICBtX3NwZWN1bGFyRXhwb25lbnQgPSBzcGVjdWxhckV4cG9uZW50OworICAgICAg
bV9saW1pdGluZ0NvbmVBbmdsZSA9IGxpbWl0aW5nQ29uZUFuZ2xlOworICAgIH0KKyAgICBjb25z
dCBLQ2FudmFzUG9pbnQzRiAmIHBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9wb3NpdGlvbjsg
fTsKKyAgICBjb25zdCBLQ2FudmFzUG9pbnQzRiAmIGRpcmVjdGlvbigpIGNvbnN0IHsgcmV0dXJu
IG1fZGlyZWN0aW9uOyB9OworICAgIGZsb2F0IHNwZWN1bGFyRXhwb25lbnQoKSBjb25zdCB7IHJl
dHVybiBtX3NwZWN1bGFyRXhwb25lbnQ7IH0KKyAgICBmbG9hdCBsaW1pdGluZ0NvbmVBbmdsZSgp
IGNvbnN0IHsgcmV0dXJuIG1fbGltaXRpbmdDb25lQW5nbGU7IH0gICAgCisgICAgdmlydHVhbCBR
VGV4dFN0cmVhbSAmZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihRVGV4dFN0cmVhbSAmKSBjb25zdDsK
K3ByaXZhdGU6CisgICAgS0NhbnZhc1BvaW50M0YgbV9wb3NpdGlvbjsKKyAgICBLQ2FudmFzUG9p
bnQzRiBtX2RpcmVjdGlvbjsKKyAgICBmbG9hdCAgICAgICAgICBtX3NwZWN1bGFyRXhwb25lbnQ7
CisgICAgZmxvYXQgICAgICAgICAgbV9saW1pdGluZ0NvbmVBbmdsZTsKK307CisKIGNsYXNzIEtD
YW52YXNGRURpZmZ1c2VMaWdodGluZyA6IHB1YmxpYyBLQ2FudmFzRmlsdGVyRWZmZWN0CiB7CiBw
dWJsaWM6CisgICAgUUNvbG9yIGxpZ2h0aW5nQ29sb3IoKSBjb25zdCB7IHJldHVybiBtX2xpZ2h0
aW5nQ29sb3I7IH0KKyAgICB2b2lkIHNldExpZ2h0aW5nQ29sb3IoY29uc3QgUUNvbG9yICZsaWdo
dGluZ0NvbG9yKSB7IG1fbGlnaHRpbmdDb2xvciA9IGxpZ2h0aW5nQ29sb3I7IH0KIAorICAgIGZs
b2F0IHN1cmZhY2VTY2FsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3VyZmFjZVNjYWxlOyB9CisgICAg
dm9pZCBzZXRTdXJmYWNlU2NhbGUoZmxvYXQgc3VyZmFjZVNjYWxlKSB7IG1fc3VyZmFjZVNjYWxl
ID0gc3VyZmFjZVNjYWxlOyB9CisgICAgCisgICAgZmxvYXQgZGlmZnVzZUNvbnN0YW50KCkgY29u
c3QgeyByZXR1cm4gbV9kaWZmdXNlQ29uc3RhbnQ7IH0KKyAgICB2b2lkIHNldERpZmZ1c2VDb25z
dGFudChmbG9hdCBkaWZmdXNlQ29uc3RhbnQpIHsgbV9kaWZmdXNlQ29uc3RhbnQgPSBkaWZmdXNl
Q29uc3RhbnQ7IH0KKyAgICAKKyAgICBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWCgpIGNvbnN0IHsg
cmV0dXJuIG1fa2VybmVsVW5pdExlbmd0aFg7IH0KKyAgICB2b2lkIHNldEtlcm5lbFVuaXRMZW5n
dGhYKGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhYKSB7IG1fa2VybmVsVW5pdExlbmd0aFggPSBrZXJu
ZWxVbml0TGVuZ3RoWDsgfQorICAgIAorICAgIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZKCkgY29u
c3QgeyByZXR1cm4gbV9rZXJuZWxVbml0TGVuZ3RoWTsgfQorICAgIHZvaWQgc2V0S2VybmVsVW5p
dExlbmd0aFkoZmxvYXQga2VybmVsVW5pdExlbmd0aFkpIHsgbV9rZXJuZWxVbml0TGVuZ3RoWSA9
IGtlcm5lbFVuaXRMZW5ndGhZOyB9CisKKyAgICBjb25zdCBLQ0xpZ2h0U291cmNlICogbGlnaHRT
b3VyY2UoKSBjb25zdCB7IHJldHVybiBtX2xpZ2h0U291cmNlOyB9CisgICAgdm9pZCBzZXRMaWdo
dFNvdXJjZShLQ0xpZ2h0U291cmNlICogbGlnaHRTb3VyY2UpIHsgbV9saWdodFNvdXJjZSA9IGxp
Z2h0U291cmNlOyB9CiAgICAgUVRleHRTdHJlYW0gJmV4dGVybmFsUmVwcmVzZW50YXRpb24oUVRl
eHRTdHJlYW0gJikgY29uc3Q7CiAKIHByaXZhdGU6CisgICAgUUNvbG9yIG1fbGlnaHRpbmdDb2xv
cjsKICAgICBmbG9hdCBtX3N1cmZhY2VTY2FsZTsKICAgICBmbG9hdCBtX2RpZmZ1c2VDb25zdGFu
dDsKICAgICBmbG9hdCBtX2tlcm5lbFVuaXRMZW5ndGhYOwogICAgIGZsb2F0IG1fa2VybmVsVW5p
dExlbmd0aFk7CisgICAgS0NMaWdodFNvdXJjZSAqIG1fbGlnaHRTb3VyY2U7CiB9OwogCiB0eXBl
ZGVmIGVudW0gewpAQCAtMzg5LDcgKzQ5NSw2IEBAIHB1YmxpYzoKICAgICBRQ29sb3IgZmxvb2RD
b2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fZmxvb2RDb2xvcjsgfQogICAgIHZvaWQgc2V0Rmxvb2RD
b2xvcihjb25zdCBRQ29sb3IgJmNvbG9yKSB7IG1fZmxvb2RDb2xvciA9IGNvbG9yOyB9CiAKLQog
ICAgIGZsb2F0IGZsb29kT3BhY2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1fZmxvb2RPcGFjaXR5OyB9
CiAgICAgdm9pZCBzZXRGbG9vZE9wYWNpdHkoZmxvYXQgZmxvb2RPcGFjaXR5KSB7IG1fZmxvb2RP
cGFjaXR5ID0gZmxvb2RPcGFjaXR5OyB9CiAKQEAgLTQ4NywxMyArNTkyLDM3IEBAIHByaXZhdGU6
CiBjbGFzcyBLQ2FudmFzRkVTcGVjdWxhckxpZ2h0aW5nIDogcHVibGljIEtDYW52YXNGaWx0ZXJF
ZmZlY3QKIHsKIHB1YmxpYzoKKyAgICBRQ29sb3IgbGlnaHRpbmdDb2xvcigpIGNvbnN0IHsgcmV0
dXJuIG1fbGlnaHRpbmdDb2xvcjsgfQorICAgIHZvaWQgc2V0TGlnaHRpbmdDb2xvcihjb25zdCBR
Q29sb3IgJmxpZ2h0aW5nQ29sb3IpIHsgbV9saWdodGluZ0NvbG9yID0gbGlnaHRpbmdDb2xvcjsg
fQogCisgICAgZmxvYXQgc3VyZmFjZVNjYWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdXJmYWNlU2Nh
bGU7IH0KKyAgICB2b2lkIHNldFN1cmZhY2VTY2FsZShmbG9hdCBzdXJmYWNlU2NhbGUpIHsgbV9z
dXJmYWNlU2NhbGUgPSBzdXJmYWNlU2NhbGU7IH0KKyAgICAKKyAgICBmbG9hdCBzcGVjdWxhckNv
bnN0YW50KCkgY29uc3QgeyByZXR1cm4gbV9zcGVjdWxhckNvbnN0YW50OyB9CisgICAgdm9pZCBz
ZXRTcGVjdWxhckNvbnN0YW50KGZsb2F0IHNwZWN1bGFyQ29uc3RhbnQpIHsgbV9zcGVjdWxhckNv
bnN0YW50ID0gc3BlY3VsYXJDb25zdGFudDsgfQorICAgIAorICAgIGZsb2F0IHNwZWN1bGFyRXhw
b25lbnQoKSBjb25zdCB7IHJldHVybiBtX3NwZWN1bGFyRXhwb25lbnQ7IH0KKyAgICB2b2lkIHNl
dFNwZWN1bGFyRXhwb25lbnQoZmxvYXQgc3BlY3VsYXJFeHBvbmVudCkgeyBtX3NwZWN1bGFyRXhw
b25lbnQgPSBzcGVjdWxhckV4cG9uZW50OyB9CisgICAgCisgICAgZmxvYXQga2VybmVsVW5pdExl
bmd0aFgoKSBjb25zdCB7IHJldHVybiBtX2tlcm5lbFVuaXRMZW5ndGhYOyB9CisgICAgdm9pZCBz
ZXRLZXJuZWxVbml0TGVuZ3RoWChmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWCkgeyBtX2tlcm5lbFVu
aXRMZW5ndGhYID0ga2VybmVsVW5pdExlbmd0aFg7IH0KKyAgICAKKyAgICBmbG9hdCBrZXJuZWxV
bml0TGVuZ3RoWSgpIGNvbnN0IHsgcmV0dXJuIG1fa2VybmVsVW5pdExlbmd0aFk7IH0KKyAgICB2
b2lkIHNldEtlcm5lbFVuaXRMZW5ndGhZKGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZKSB7IG1fa2Vy
bmVsVW5pdExlbmd0aFkgPSBrZXJuZWxVbml0TGVuZ3RoWTsgfQorICAgIAorICAgIGNvbnN0IEtD
TGlnaHRTb3VyY2UgKiBsaWdodFNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGlnaHRTb3VyY2U7
IH0KKyAgICB2b2lkIHNldExpZ2h0U291cmNlKEtDTGlnaHRTb3VyY2UgKiBsaWdodFNvdXJjZSkg
eyBtX2xpZ2h0U291cmNlID0gbGlnaHRTb3VyY2U7IH0KKyAgICAKICAgICBRVGV4dFN0cmVhbSAm
ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihRVGV4dFN0cmVhbSAmKSBjb25zdDsKICAgICAKIHByaXZh
dGU6CisgICAgUUNvbG9yIG1fbGlnaHRpbmdDb2xvcjsKICAgICBmbG9hdCBtX3N1cmZhY2VTY2Fs
ZTsKICAgICBmbG9hdCBtX3NwZWN1bGFyQ29uc3RhbnQ7CiAgICAgZmxvYXQgbV9zcGVjdWxhckV4
cG9uZW50OworICAgIGZsb2F0IG1fa2VybmVsVW5pdExlbmd0aFg7CisgICAgZmxvYXQgbV9rZXJu
ZWxVbml0TGVuZ3RoWTsKKyAgICBLQ0xpZ2h0U291cmNlICogbV9saWdodFNvdXJjZTsKIH07CiAK
IGNsYXNzIEtDYW52YXNGRVRpbGUgOiBwdWJsaWMgS0NhbnZhc0ZpbHRlckVmZmVjdCB7fTsKSW5k
ZXg6IGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9LQ2FudmFzRmlsdGVyUXVhcnR6LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2NhbnZhcy9kZXZpY2UvcXVhcnR6L0tD
YW52YXNGaWx0ZXJRdWFydHouaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4zCmRpZmYgLXAgLXUg
LXIxLjMga2NhbnZhcy9kZXZpY2UvcXVhcnR6L0tDYW52YXNGaWx0ZXJRdWFydHouaAotLS0ga2Nh
bnZhcy9kZXZpY2UvcXVhcnR6L0tDYW52YXNGaWx0ZXJRdWFydHouaAkxIFNlcCAyMDA1IDA3OjMy
OjU0IC0wMDAwCTEuMworKysga2NhbnZhcy9kZXZpY2UvcXVhcnR6L0tDYW52YXNGaWx0ZXJRdWFy
dHouaAk4IE5vdiAyMDA1IDEwOjAwOjM2IC0wMDAwCkBAIC03MywxMSArNzMsMjEgQEAgcHVibGlj
OgogLy8gICAgdmlydHVhbCBDSUZpbHRlciAqZ2V0Q0lGaWx0ZXIoS0NhbnZhc0ZpbHRlclF1YXJ0
eiAqcXVhcnR6RmlsdGVyKSBjb25zdDsKIC8vfTsKIAorY2xhc3MgS0NhbnZhc0ZFQ29udm9sdmVN
YXRyaXhRdWFydHogOiBwdWJsaWMgS0NhbnZhc0ZFQ29udm9sdmVNYXRyaXggeworcHVibGljOgor
ICAgIHZpcnR1YWwgQ0lGaWx0ZXIgKmdldENJRmlsdGVyKEtDYW52YXNGaWx0ZXJRdWFydHogKnF1
YXJ0ekZpbHRlcikgY29uc3Q7Cit9OworCiBjbGFzcyBLQ2FudmFzRkVDb21wb3NpdGVRdWFydHog
OiBwdWJsaWMgS0NhbnZhc0ZFQ29tcG9zaXRlIHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIENJRmls
dGVyICpnZXRDSUZpbHRlcihLQ2FudmFzRmlsdGVyUXVhcnR6ICpxdWFydHpGaWx0ZXIpIGNvbnN0
OwogfTsKIAorY2xhc3MgS0NhbnZhc0ZFRGlmZnVzZUxpZ2h0aW5nUXVhcnR6IDogcHVibGljIEtD
YW52YXNGRURpZmZ1c2VMaWdodGluZyB7CitwdWJsaWM6CisgICAgdmlydHVhbCBDSUZpbHRlciAq
Z2V0Q0lGaWx0ZXIoS0NhbnZhc0ZpbHRlclF1YXJ0eiAqcXVhcnR6RmlsdGVyKSBjb25zdDsKK307
CisKIGNsYXNzIEtDYW52YXNGRUZsb29kUXVhcnR6IDogcHVibGljIEtDYW52YXNGRUZsb29kIHsK
IHB1YmxpYzoKICAgICB2aXJ0dWFsIENJRmlsdGVyICpnZXRDSUZpbHRlcihLQ2FudmFzRmlsdGVy
UXVhcnR6ICpxdWFydHpGaWx0ZXIpIGNvbnN0OwpAQCAtOTMsNyArMTAzLDYgQEAgcHVibGljOgog
ICAgIHZpcnR1YWwgQ0lGaWx0ZXIgKmdldENJRmlsdGVyKEtDYW52YXNGaWx0ZXJRdWFydHogKnF1
YXJ0ekZpbHRlcikgY29uc3Q7CiB9OwogCi0KIGNsYXNzIEtDYW52YXNGRU1lcmdlUXVhcnR6IDog
cHVibGljIEtDYW52YXNGRU1lcmdlIHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIENJRmlsdGVyICpn
ZXRDSUZpbHRlcihLQ2FudmFzRmlsdGVyUXVhcnR6ICpxdWFydHpGaWx0ZXIpIGNvbnN0OwpAQCAt
MTA0LDYgKzExMywxMSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBDSUZpbHRlciAqZ2V0Q0lGaWx0
ZXIoS0NhbnZhc0ZpbHRlclF1YXJ0eiAqcXVhcnR6RmlsdGVyKSBjb25zdDsKIH07CiAKK2NsYXNz
IEtDYW52YXNGRVNwZWN1bGFyTGlnaHRpbmdRdWFydHogOiBwdWJsaWMgS0NhbnZhc0ZFU3BlY3Vs
YXJMaWdodGluZyB7CitwdWJsaWM6CisgICAgdmlydHVhbCBDSUZpbHRlciAqZ2V0Q0lGaWx0ZXIo
S0NhbnZhc0ZpbHRlclF1YXJ0eiAqcXVhcnR6RmlsdGVyKSBjb25zdDsKK307CisKIGNsYXNzIEtD
YW52YXNGRVRpbGVRdWFydHogOiBwdWJsaWMgS0NhbnZhc0ZFVGlsZSB7CiBwdWJsaWM6CiAgICAg
dmlydHVhbCBDSUZpbHRlciAqZ2V0Q0lGaWx0ZXIoS0NhbnZhc0ZpbHRlclF1YXJ0eiAqcXVhcnR6
RmlsdGVyKSBjb25zdDsKSW5kZXg6IGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9LQ2FudmFzRmlsdGVy
UXVhcnR6Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tjYW52
YXMvZGV2aWNlL3F1YXJ0ei9LQ2FudmFzRmlsdGVyUXVhcnR6Lm1tLHYKcmV0cmlldmluZyByZXZp
c2lvbiAxLjEwCmRpZmYgLXAgLXUgLXIxLjEwIGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9LQ2FudmFz
RmlsdGVyUXVhcnR6Lm1tCi0tLSBrY2FudmFzL2RldmljZS9xdWFydHovS0NhbnZhc0ZpbHRlclF1
YXJ0ei5tbQk1IE9jdCAyMDA1IDA1OjM2OjUxIC0wMDAwCTEuMTAKKysrIGtjYW52YXMvZGV2aWNl
L3F1YXJ0ei9LQ2FudmFzRmlsdGVyUXVhcnR6Lm1tCTggTm92IDIwMDUgMTA6MDA6MzggLTAwMDAK
QEAgLTMxLDYgKzMxLDEyIEBACiAjaW1wb3J0ICJLUmVuZGVyaW5nRGV2aWNlUXVhcnR6LmgiCiAj
aW1wb3J0ICJRdWFydHpTdXBwb3J0LmgiCiAjaW1wb3J0ICJLV1FFeGNlcHRpb25zLmgiCisjaW1w
b3J0ICJXS0RpZmZ1c2VMaWdodGluZ0ZpbHRlci5oIgorI2ltcG9ydCAiV0tTcGVjdWxhckxpZ2h0
aW5nRmlsdGVyLmgiCisjaW1wb3J0ICJXS1Nwb3RMaWdodEZpbHRlci5oIgorI2ltcG9ydCAiV0tQ
b2ludExpZ2h0RmlsdGVyLmgiCisjaW1wb3J0ICJXS0Rpc3RhbnRMaWdodEZpbHRlci5oIgorI2lt
cG9ydCAiV0tOb3JtYWxNYXBGaWx0ZXIuaCIKIAogI2ltcG9ydCA8UXVhcnR6Q29yZS9RdWFydHpD
b3JlLmg+CiAKQEAgLTQwLDEzICs0NiwyMiBAQAogCiBzdGF0aWMgUVN0cmluZyBLQ1ByZXZpb3Vz
RmlsdGVyT3V0cHV0TmFtZSA9IFFTdHJpbmc6OmZyb21MYXRpbjEoIl9fcHJldmlvdXNPdXRwdXRf
XyIpOwogCi0vL3N0YXRpYyBDSUNvbG9yICpjaUNvbG9yKGNvbnN0IFFDb2xvciAmYykKLS8vewot
Ly8gICAgQ0dDb2xvclJlZiBjb2xvckNHID0gY2dDb2xvcihjKTsKLS8vICAgIENJQ29sb3IgKmNv
bG9yQ0kgPSBbQ0lDb2xvciBjb2xvcldpdGhDR0NvbG9yOmNvbG9yQ0ddOwotLy8gICAgQ0dDb2xv
clJlbGVhc2UoY29sb3JDRyk7Ci0vLyAgICByZXR1cm4gY29sb3JDSTsKLS8vfQorc3RhdGljIGlu
bGluZSBDSUNvbG9yICpjaUNvbG9yKGNvbnN0IFFDb2xvciAmYykKK3sKKyAgICBDR0NvbG9yUmVm
IGNvbG9yQ0cgPSBjZ0NvbG9yKGMpOworICAgIENJQ29sb3IgKmNvbG9yQ0kgPSBbQ0lDb2xvciBj
b2xvcldpdGhDR0NvbG9yOmNvbG9yQ0ddOworICAgIENHQ29sb3JSZWxlYXNlKGNvbG9yQ0cpOwor
ICAgIHJldHVybiBjb2xvckNJOworfQorCitzdGF0aWMgaW5saW5lIENJVmVjdG9yICpjaVZlY3Rv
cihLQ2FudmFzUG9pbnQzRiBwb2ludCkgeworICAgIHJldHVybiBbQ0lWZWN0b3IgdmVjdG9yV2l0
aFg6cG9pbnQueCgpIFk6cG9pbnQueSgpIFo6cG9pbnQueigpXTsKK30KKworc3RhdGljIGlubGlu
ZSBDSVZlY3RvciAqY2lWZWN0b3IoUVBvaW50RiBwb2ludCkgeworICAgIHJldHVybiBbQ0lWZWN0
b3IgdmVjdG9yV2l0aFg6cG9pbnQueCgpIFk6cG9pbnQueSgpXTsKK30KKwogCiBLQ2FudmFzRmls
dGVyUXVhcnR6OjpLQ2FudmFzRmlsdGVyUXVhcnR6KCkgOiBtX3N0b3JlZENHQ29udGV4dCgwKSwg
bV9maWx0ZXJDSUNvbnRleHQoMCksIG1fZmlsdGVyQ0dMYXllcigwKSwgbV9pbWFnZXNCeU5hbWUo
MCkKIHsKQEAgLTI3NCw3ICsyODksNiBAQCBDSUltYWdlICpLQ2FudmFzRmlsdGVyUXVhcnR6Ojpp
bnB1dEltYWdlCiAjcHJhZ21hIG1hcmsgLQogI3ByYWdtYSBtYXJrIEZpbHRlciBFbGVtZW50cwog
Ci0KICNkZWZpbmUgRkVfUVVBUlRaX1NFVFVQX0lOUFVUKG5hbWUpIFwKICAgICBDSUltYWdlICpp
bnB1dEltYWdlID0gcXVhcnR6RmlsdGVyLT5pbnB1dEltYWdlKHRoaXMpOyBcCiAgICAgRkVfUVVB
UlRaX0NIRUNLX0lOUFVUKGlucHV0SW1hZ2UpIFwKQEAgLTUwMiw2ICs1MTYsNjcgQEAgQ0lGaWx0
ZXIgKktDYW52YXNGRUNvbXBvc2l0ZVF1YXJ0ejo6Z2V0QwogCUZFX1FVQVJUWl9PVVRQVVRfUkVU
VVJOOwogfQogCitzdGF0aWMgQ0lTYW1wbGVyICpnZXRMaWdodFZlY3RvcnMoQ0lTYW1wbGVyICog
bm9ybWFscywgY29uc3QgS0NMaWdodFNvdXJjZSAqIGxpZ2h0KQoreworICAgIHN3aXRjaChsaWdo
dC0+dHlwZSgpKQorICAgIHsKKyAgICAgICAgY2FzZSBMU19ESVNUQU5UOgorICAgICAgICB7Cisg
ICAgICAgICAgICBjb25zdCBLQ0Rpc3RhbnRMaWdodFNvdXJjZSAqZGxpZ2h0ID0gc3RhdGljX2Nh
c3Q8Y29uc3QgS0NEaXN0YW50TGlnaHRTb3VyY2UgKj4obGlnaHQpOworICAgICAgICAgICAgZmxv
YXQgYXppbXV0aCA9IGRsaWdodC0+YXppbXV0aCgpOworICAgICAgICAgICAgZmxvYXQgZWxldmF0
aW9uID0gZGxpZ2h0LT5lbGV2YXRpb24oKTsKKyAgICAgICAgICAgIGF6aW11dGg9KGF6aW11dGgq
TV9QSSkvMTgwLjA7CisgICAgICAgICAgICBlbGV2YXRpb249KGVsZXZhdGlvbipNX1BJKS8xODAu
MDsKKyAgICAgICAgICAgIGZsb2F0IEx4ID0gY29zKGF6aW11dGgpKmNvcyhlbGV2YXRpb24pOwor
ICAgICAgICAgICAgZmxvYXQgTHkgPSBzaW4oYXppbXV0aCkqY29zKGVsZXZhdGlvbik7CisgICAg
ICAgICAgICBmbG9hdCBMeiA9IHNpbihlbGV2YXRpb24pOworICAgICAgICAgICAgcmV0dXJuIFtD
SVNhbXBsZXIgc2FtcGxlcldpdGhJbWFnZTogW1dLRGlzdGFudExpZ2h0RmlsdGVyIG91dHB1dElt
YWdlV2l0aE5vcm1hbHM6bm9ybWFscyBhbmRMaWdodERpcmVjdGlvbjogW0NJVmVjdG9yIHZlY3Rv
cldpdGhYOiBMeCBZOiBMeSBaOiBMel1dXTsKKyAgICAgICAgfQorICAgICAgICBjYXNlIExTX1BP
SU5UOgorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBLQ1BvaW50TGlnaHRTb3VyY2UgKnBs
aWdodCA9IHN0YXRpY19jYXN0PGNvbnN0IEtDUG9pbnRMaWdodFNvdXJjZSAqPihsaWdodCk7Cisg
ICAgICAgICAgICByZXR1cm4gW0NJU2FtcGxlciBzYW1wbGVyV2l0aEltYWdlOiBbV0tQb2ludExp
Z2h0RmlsdGVyIG91dHB1dEltYWdlV2l0aE5vcm1hbHM6IG5vcm1hbHMgYW5kTGlnaHRQb3NpdGlv
bjogW0NJVmVjdG9yIHZlY3RvcldpdGhYOnBsaWdodC0+cG9zaXRpb24oKS54KCkgWTpwbGlnaHQt
PnBvc2l0aW9uKCkueSgpIFo6cGxpZ2h0LT5wb3NpdGlvbigpLnooKV1dXTsKKyAgICAgICAgfQor
ICAgICAgICBjYXNlIExTX1NQT1Q6CisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IEtDU3Bv
dExpZ2h0U291cmNlICpzbGlnaHQgPSBzdGF0aWNfY2FzdDxjb25zdCBLQ1Nwb3RMaWdodFNvdXJj
ZSAqPihsaWdodCk7CisgICAgICAgICAgICBDSVNhbXBsZXIgKiBwb2ludExpZ2h0VmVjdG9ycyA9
IFtDSVNhbXBsZXIgc2FtcGxlcldpdGhJbWFnZTogW1dLUG9pbnRMaWdodEZpbHRlciBvdXRwdXRJ
bWFnZVdpdGhOb3JtYWxzOiBub3JtYWxzIGFuZExpZ2h0UG9zaXRpb246IFtDSVZlY3RvciB2ZWN0
b3JXaXRoWDpzbGlnaHQtPnBvc2l0aW9uKCkueCgpIFk6c2xpZ2h0LT5wb3NpdGlvbigpLnkoKSBa
OnNsaWdodC0+cG9zaXRpb24oKS56KCldXV07CisgICAgICAgICAgICBmbG9hdCBjb3NjdXRvZmY9
c2xpZ2h0LT5saW1pdGluZ0NvbmVBbmdsZSgpOworICAgICAgICAgICAgY29zY3V0b2ZmPWNvcygo
Y29zY3V0b2ZmKk1fUEkpLzE4MC4wZik7CisgICAgICAgICAgICByZXR1cm4gW0NJU2FtcGxlciBz
YW1wbGVyV2l0aEltYWdlOiBbV0tTcG90TGlnaHRGaWx0ZXIgb3V0cHV0SW1hZ2VXaXRoTGlnaHRW
ZWN0b3JzOiBwb2ludExpZ2h0VmVjdG9ycyBhbmRMaWdodERpcmVjdGlvbjogW0NJVmVjdG9yIHZl
Y3RvcldpdGhYOnNsaWdodC0+ZGlyZWN0aW9uKCkueCgpIFk6c2xpZ2h0LT5kaXJlY3Rpb24oKS55
KCkgWjpzbGlnaHQtPmRpcmVjdGlvbigpLnooKV0gYW5kU3BlY3VsYXJFeHBvbmVudDogc2xpZ2h0
LT5zcGVjdWxhckV4cG9uZW50KCkgYW5kQ29zQ3V0T2ZmQW5nbGU6IGNvc2N1dG9mZl1dOworICAg
ICAgICB9CisgICAgfQorICAgIHJldHVybiBuaWw7Cit9CisKK3N0YXRpYyBDSVNhbXBsZXIgKmdl
dE5vcm1hbE1hcChDSVNhbXBsZXIgKmJ1bXBNYXAsIGZsb2F0IHNjYWxlKQoreworICAgIHJldHVy
biBbV0tOb3JtYWxNYXBGaWx0ZXIgb3V0cHV0Tm9ybWFsc1dpdGhCdW1wTWFwOmJ1bXBNYXAgYW5k
U3VyZmFjZVNjYWxlOiBbTlNOdW1iZXIgbnVtYmVyV2l0aEZsb2F0OnNjYWxlXV07Cit9CisKK0NJ
RmlsdGVyICpLQ2FudmFzRkVEaWZmdXNlTGlnaHRpbmdRdWFydHo6OmdldENJRmlsdGVyKEtDYW52
YXNGaWx0ZXJRdWFydHogKnF1YXJ0ekZpbHRlcikgY29uc3QKK3sKKyAgICBbV0tEaWZmdXNlTGln
aHRpbmdGaWx0ZXIgaW5pdGlhbGl6ZV07CisgICAgCisJQ0lGaWx0ZXIgKmZpbHRlciA9IG5pbDsK
KwlLV1FfQkxPQ0tfRVhDRVBUSU9OUworICAgIGZpbHRlciA9IFtDSUZpbHRlciBmaWx0ZXJXaXRo
TmFtZTpAIldLRGlmZnVzZUxpZ2h0aW5nIl07CisgICAgW2ZpbHRlciBzZXREZWZhdWx0c107Cisg
ICAgQ0lTYW1wbGVyICpub3JtYWxzID0gZ2V0Tm9ybWFsTWFwKFtDSVNhbXBsZXIgc2FtcGxlcldp
dGhJbWFnZTogcXVhcnR6RmlsdGVyLT5pbnB1dEltYWdlKHRoaXMpXSwgc3VyZmFjZVNjYWxlKCkp
OworICAgIGlmKCFub3JtYWxzKSByZXR1cm4gbmlsOworICAgIENJU2FtcGxlciAqbGlnaHRWZWN0
b3JzID0gZ2V0TGlnaHRWZWN0b3JzKG5vcm1hbHMsIGxpZ2h0U291cmNlKCkpOworICAgIGlmKCFs
aWdodFZlY3RvcnMpIHJldHVybiBuaWw7CisgICAgW2ZpbHRlciBzZXRWYWx1ZTpub3JtYWxzIGZv
cktleTpAImlucHV0Tm9ybWFsTWFwIl07CisgICAgW2ZpbHRlciBzZXRWYWx1ZTpsaWdodFZlY3Rv
cnMgZm9yS2V5OkAiaW5wdXRMaWdodFZlY3RvcnMiXTsKKyAgICBbZmlsdGVyIHNldFZhbHVlOmNp
Q29sb3IobGlnaHRpbmdDb2xvcigpKSBmb3JLZXk6QCJpbnB1dExpZ2h0aW5nQ29sb3IiXTsKKyAg
ICBbZmlsdGVyIHNldFZhbHVlOltOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6c3VyZmFjZVNjYWxl
KCldIGZvcktleTpAImlucHV0U3VyZmFjZVNjYWxlIl07CisgICAgW2ZpbHRlciBzZXRWYWx1ZTpb
TlNOdW1iZXIgbnVtYmVyV2l0aEZsb2F0OmRpZmZ1c2VDb25zdGFudCgpXSBmb3JLZXk6QCJpbnB1
dERpZmZ1c2VDb25zdGFudCJdOworICAgIFtmaWx0ZXIgc2V0VmFsdWU6W05TTnVtYmVyIG51bWJl
cldpdGhGbG9hdDprZXJuZWxVbml0TGVuZ3RoWCgpXSBmb3JLZXk6QCJpbnB1dEtlcm5lbFVuaXRM
ZW5ndGhYIl07CisgICAgW2ZpbHRlciBzZXRWYWx1ZTpbTlNOdW1iZXIgbnVtYmVyV2l0aEZsb2F0
Omtlcm5lbFVuaXRMZW5ndGhZKCldIGZvcktleTpAImlucHV0S2VybmVsVW5pdExlbmd0aFkiXTsK
KyAgICAKKyAgICBGRV9RVUFSVFpfT1VUUFVUX1JFVFVSTjsKK30KKwogQ0lGaWx0ZXIgKktDYW52
YXNGRUZsb29kUXVhcnR6OjpnZXRDSUZpbHRlcihLQ2FudmFzRmlsdGVyUXVhcnR6ICpxdWFydHpG
aWx0ZXIpIGNvbnN0CiB7CiAJQ0lGaWx0ZXIgKmZpbHRlciA9IG5pbDsKQEAgLTU3OSw2ICs2NTQs
MzEgQEAgQ0lGaWx0ZXIgKktDYW52YXNGRU9mZnNldFF1YXJ0ejo6Z2V0Q0lGaQogCUZFX1FVQVJU
Wl9PVVRQVVRfUkVUVVJOOwogfQogCitDSUZpbHRlciAqS0NhbnZhc0ZFU3BlY3VsYXJMaWdodGlu
Z1F1YXJ0ejo6Z2V0Q0lGaWx0ZXIoS0NhbnZhc0ZpbHRlclF1YXJ0eiAqcXVhcnR6RmlsdGVyKSBj
b25zdAoreworICAgIFtXS1NwZWN1bGFyTGlnaHRpbmdGaWx0ZXIgaW5pdGlhbGl6ZV07CisgICAg
CisgICAgQ0lGaWx0ZXIgKmZpbHRlciA9IG5pbDsKKyAgICBLV1FfQkxPQ0tfRVhDRVBUSU9OUwor
ICAgIGZpbHRlciA9IFtDSUZpbHRlciBmaWx0ZXJXaXRoTmFtZTpAIldLU3BlY3VsYXJMaWdodGlu
ZyJdOworICAgIFtmaWx0ZXIgc2V0RGVmYXVsdHNdOworICAgIENJU2FtcGxlciAqbm9ybWFscyA9
IGdldE5vcm1hbE1hcChbQ0lTYW1wbGVyIHNhbXBsZXJXaXRoSW1hZ2U6IHF1YXJ0ekZpbHRlci0+
aW5wdXRJbWFnZSh0aGlzKV0sIHN1cmZhY2VTY2FsZSgpKTsKKyAgICBpZighbm9ybWFscykgcmV0
dXJuIG5pbDsKKyAgICBDSVNhbXBsZXIgKmxpZ2h0VmVjdG9ycyA9IGdldExpZ2h0VmVjdG9ycyhu
b3JtYWxzLCBsaWdodFNvdXJjZSgpKTsKKyAgICBpZighbGlnaHRWZWN0b3JzKSByZXR1cm4gbmls
OworICAgIFtmaWx0ZXIgc2V0VmFsdWU6bm9ybWFscyBmb3JLZXk6QCJpbnB1dE5vcm1hbE1hcCJd
OworICAgIFtmaWx0ZXIgc2V0VmFsdWU6bGlnaHRWZWN0b3JzIGZvcktleTpAImlucHV0TGlnaHRW
ZWN0b3JzIl07CisgICAgW2ZpbHRlciBzZXRWYWx1ZTpjaUNvbG9yKGxpZ2h0aW5nQ29sb3IoKSkg
Zm9yS2V5OkAiaW5wdXRMaWdodGluZ0NvbG9yIl07CisgICAgW2ZpbHRlciBzZXRWYWx1ZTpbTlNO
dW1iZXIgbnVtYmVyV2l0aEZsb2F0OnN1cmZhY2VTY2FsZSgpXSBmb3JLZXk6QCJpbnB1dFN1cmZh
Y2VTY2FsZSJdOworICAgIFtmaWx0ZXIgc2V0VmFsdWU6W05TTnVtYmVyIG51bWJlcldpdGhGbG9h
dDpzcGVjdWxhckNvbnN0YW50KCldIGZvcktleTpAImlucHV0U3BlY3VsYXJDb25zdGFudCJdOwor
ICAgIFtmaWx0ZXIgc2V0VmFsdWU6W05TTnVtYmVyIG51bWJlcldpdGhGbG9hdDpzcGVjdWxhckV4
cG9uZW50KCldIGZvcktleTpAImlucHV0U3BlY3VsYXJFeHBvbmVudCJdOworICAgIFtmaWx0ZXIg
c2V0VmFsdWU6W05TTnVtYmVyIG51bWJlcldpdGhGbG9hdDprZXJuZWxVbml0TGVuZ3RoWCgpXSBm
b3JLZXk6QCJpbnB1dEtlcm5lbFVuaXRMZW5ndGhYIl07CisgICAgW2ZpbHRlciBzZXRWYWx1ZTpb
TlNOdW1iZXIgbnVtYmVyV2l0aEZsb2F0Omtlcm5lbFVuaXRMZW5ndGhZKCldIGZvcktleTpAImlu
cHV0S2VybmVsVW5pdExlbmd0aFkiXTsKKyAgICAKKyAgICBGRV9RVUFSVFpfT1VUUFVUX1JFVFVS
TjsKK30KKworCiBDSUZpbHRlciAqS0NhbnZhc0ZFVGlsZVF1YXJ0ejo6Z2V0Q0lGaWx0ZXIoS0Nh
bnZhc0ZpbHRlclF1YXJ0eiAqcXVhcnR6RmlsdGVyKSBjb25zdAogewogCUZFX1FVQVJUWl9TRVRV
UF9JTlBVVChAIkNJQWZmaW5lVGlsZSIpOwpAQCAtNTg2LDYgKzY4NiwzIEBAIENJRmlsdGVyICpL
Q2FudmFzRkVUaWxlUXVhcnR6OjpnZXRDSUZpbHQKIAlGRV9RVUFSVFpfT1VUUFVUX1JFVFVSTjsK
IH0KIAotCi0KLQpJbmRleDoga2NhbnZhcy9kZXZpY2UvcXVhcnR6L0tSZW5kZXJpbmdEZXZpY2VR
dWFydHoubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2NhbnZh
cy9kZXZpY2UvcXVhcnR6L0tSZW5kZXJpbmdEZXZpY2VRdWFydHoubW0sdgpyZXRyaWV2aW5nIHJl
dmlzaW9uIDEuNApkaWZmIC1wIC11IC1yMS40IGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9LUmVuZGVy
aW5nRGV2aWNlUXVhcnR6Lm1tCi0tLSBrY2FudmFzL2RldmljZS9xdWFydHovS1JlbmRlcmluZ0Rl
dmljZVF1YXJ0ei5tbQk1IE9jdCAyMDA1IDA1OjM2OjUyIC0wMDAwCTEuNAorKysga2NhbnZhcy9k
ZXZpY2UvcXVhcnR6L0tSZW5kZXJpbmdEZXZpY2VRdWFydHoubW0JOCBOb3YgMjAwNSAxMDowMDoz
OSAtMDAwMApAQCAtMjQzLDE1ICsyNDMsMTcgQEAgS0NhbnZhc0ZpbHRlckVmZmVjdCAqS1JlbmRl
cmluZ0RldmljZVF1YQogewogCXN3aXRjaCh0eXBlKQogCXsKLS8vCWNhc2UgRkVfRElTVEFOVF9M
SUdIVDogCi0vLwljYXNlIEZFX1BPSU5UX0xJR0hUOiAKLS8vCWNhc2UgRkVfU1BPVF9MSUdIVDog
CisgICAgICAgIC8qIExpZ2h0IHNvdXJjZXMgYXJlIGNvbnRhaW5lZCBieSB0aGUgZGlmZnVzZS9z
cGVjdWxhciBsaWdodCBibG9ja3MgCisgICAgICAgIGNhc2UgRkVfRElTVEFOVF9MSUdIVDogCisg
ICAgICAgIGNhc2UgRkVfUE9JTlRfTElHSFQ6IAorICAgICAgICBjYXNlIEZFX1NQT1RfTElHSFQ6
IAorICAgICAgICAqLwogCWNhc2UgRkVfQkxFTkQ6IHJldHVybiBuZXcgS0NhbnZhc0ZFQmxlbmRR
dWFydHooKTsKIAljYXNlIEZFX0NPTE9SX01BVFJJWDogcmV0dXJuIG5ldyBLQ2FudmFzRkVDb2xv
ck1hdHJpeFF1YXJ0eigpOwogLy8JY2FzZSBGRV9DT01QT05FTlRfVFJBTlNGRVI6IAogCWNhc2Ug
RkVfQ09NUE9TSVRFOiByZXR1cm4gbmV3IEtDYW52YXNGRUNvbXBvc2l0ZVF1YXJ0eigpOwogLy8J
Y2FzZSBGRV9DT05WT0xWRV9NQVRSSVg6IAotLy8JY2FzZSBGRV9ESUZGVVNFX0xJR0hUSU5HOiAK
KwljYXNlIEZFX0RJRkZVU0VfTElHSFRJTkc6IHJldHVybiBuZXcgS0NhbnZhc0ZFRGlmZnVzZUxp
Z2h0aW5nUXVhcnR6KCk7CiAvLwljYXNlIEZFX0RJU1BMQUNFTUVOVF9NQVA6IAogCWNhc2UgRkVf
RkxPT0Q6IHJldHVybiBuZXcgS0NhbnZhc0ZFRmxvb2RRdWFydHooKTsKIAljYXNlIEZFX0dBVVNT
SUFOX0JMVVI6IHJldHVybiBuZXcgS0NhbnZhc0ZFR2F1c3NpYW5CbHVyUXVhcnR6KCk7CkBAIC0y
NTksNyArMjYxLDcgQEAgS0NhbnZhc0ZpbHRlckVmZmVjdCAqS1JlbmRlcmluZ0RldmljZVF1YQog
CWNhc2UgRkVfTUVSR0U6IHJldHVybiBuZXcgS0NhbnZhc0ZFTWVyZ2VRdWFydHooKTsKIC8vCWNh
c2UgRkVfTU9SUEhPTE9HWTogCiAJY2FzZSBGRV9PRkZTRVQ6IHJldHVybiBuZXcgS0NhbnZhc0ZF
T2Zmc2V0UXVhcnR6KCk7Ci0vLwljYXNlIEZFX1NQRUNVTEFSX0xJR0hUSU5HOiAKKwljYXNlIEZF
X1NQRUNVTEFSX0xJR0hUSU5HOiByZXR1cm4gbmV3IEtDYW52YXNGRVNwZWN1bGFyTGlnaHRpbmdR
dWFydHooKTsKIAljYXNlIEZFX1RJTEU6IHJldHVybiBuZXcgS0NhbnZhc0ZFVGlsZVF1YXJ0eigp
OwogLy8JY2FzZSBGRV9UVVJCVUxFTkNFOiAKIAlkZWZhdWx0OgpJbmRleDogV0tDb252b2x2ZU1h
dHJpeEZpbHRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtTnB1IFdLQ29udm9sdmVNYXRyaXhGaWx0ZXIu
aAotLS0gV0tDb252b2x2ZU1hdHJpeEZpbHRlci5oCTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAK
KysrIFdLQ29udm9sdmVNYXRyaXhGaWx0ZXIuaAkxMyBPY3QgMjAwNSAwNzoyNjozNSAtMDAwMApA
QCAtMCwwICsxLDM1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1IEFwcGxlIENvbXB1dGVy
LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW1wb3J0IDxRdWFydHpDb3Jl
L0NvcmVJbWFnZS5oPgorCitAaW50ZXJmYWNlIFdLQ29udm9sdmVNYXRyaXhGaWx0ZXI6IENJRmls
dGVyCit7CisgICAgQ0lJbWFnZSAgICppbnB1dEltYWdlOworICAgIENJSW1hZ2UgICAqaW5wdXRL
ZXJuZWxNYXRyaXg7CisgICAgTlNOdW1iZXIgICppbnB1dERpdmlzb3I7CisgICAgTlNOdW1iZXIg
ICppbnB1dEJpYXM7Cit9CitAZW5kCkluZGV4OiBXS0NvbnZvbHZlTWF0cml4RmlsdGVyLm0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQpkaWZmIC1OcHUgV0tDb252b2x2ZU1hdHJpeEZpbHRlci5tCi0tLSBXS0NvbnZvbHZl
TWF0cml4RmlsdGVyLm0JMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMAorKysgV0tDb252b2x2ZU1h
dHJpeEZpbHRlci5tCTEzIE9jdCAyMDA1IDA3OjI2OjM1IC0wMDAwCkBAIC0wLDAgKzEsOTMgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpbXBvcnQgIldLQ29udm9sdmVNYXRyaXhGaWx0ZXIuaCIK
Kworc3RhdGljIENJS2VybmVsICpjb252b2x2ZU1hdHJpeEtlcm5lbCA9IG5pbDsKKworQGltcGxl
bWVudGF0aW9uIFdLQ29udm9sdmVNYXRyaXhGaWx0ZXIKKworKyAodm9pZClpbml0aWFsaXplCit7
CisgICAgW0NJRmlsdGVyIHJlZ2lzdGVyRmlsdGVyTmFtZTpAIldLQ29udm9sdmVNYXRyaXgiICAK
KyAgICAgICAgY29uc3RydWN0b3I6IHNlbGYKKyAgICAgICAgY2xhc3NBdHRyaWJ1dGVzOiBbTlNE
aWN0aW9uYXJ5IGRpY3Rpb25hcnlXaXRoT2JqZWN0c0FuZEtleXM6CisgICAgICAgICBAIldlYktp
dCBDb252b2x2ZSBNYXRyaXgiLCBrQ0lBdHRyaWJ1dGVGaWx0ZXJEaXNwbGF5TmFtZSwKKyAgICAg
ICAgW05TQXJyYXkgYXJyYXlXaXRoT2JqZWN0czoga0NJQ2F0ZWdvcnlCbHVyLCBrQ0lDYXRlZ29y
eVZpZGVvLAorICAgICAgICAgICAga0NJQ2F0ZWdvcnlTdGlsbEltYWdlLCBrQ0lDYXRlZ29yeU5v
blNxdWFyZVBpeGVscyxuaWxdLCBrQ0lBdHRyaWJ1dGVGaWx0ZXJDYXRlZ29yaWVzLAorICAgICAg
ICBbTlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnlXaXRoT2JqZWN0c0FuZEtleXM6CisgICAgICAgICAg
ICBrQ0lBdHRyaWJ1dGVUeXBlR3JhZGllbnQsIGtDSUF0dHJpYnV0ZVR5cGUsCisgICAgICAgICAg
ICBuaWxdLCBAImlucHV0S2VybmVsTWF0cml4IiwKKyAgICAgICAgW05TRGljdGlvbmFyeSBkaWN0
aW9uYXJ5V2l0aE9iamVjdHNBbmRLZXlzOgorICAgICAgICAgICAgW05TTnVtYmVyIG51bWJlcldp
dGhEb3VibGU6MC4wXSwga0NJQXR0cmlidXRlTWluLAorICAgICAgICAgICAgW05TTnVtYmVyIG51
bWJlcldpdGhEb3VibGU6MS4wXSwga0NJQXR0cmlidXRlRGVmYXVsdCwKKyAgICAgICAgICAgIFtO
U051bWJlciBudW1iZXJXaXRoRG91YmxlOjEuMF0sIGtDSUF0dHJpYnV0ZUlkZW50aXR5LAorICAg
ICAgICAgICAga0NJQXR0cmlidXRlVHlwZVNjYWxhciwga0NJQXR0cmlidXRlVHlwZSwKKyAgICAg
ICAgICAgIG5pbF0sIEAiaW5wdXREaXZpc29yIiwKKyAgICAgICAgW05TRGljdGlvbmFyeSBkaWN0
aW9uYXJ5V2l0aE9iamVjdHNBbmRLZXlzOgorICAgICAgICAgICAgW05TTnVtYmVyIG51bWJlcldp
dGhEb3VibGU6MC4wXSwga0NJQXR0cmlidXRlRGVmYXVsdCwKKyAgICAgICAgICAgIFtOU051bWJl
ciBudW1iZXJXaXRoRG91YmxlOjAuMF0sIGtDSUF0dHJpYnV0ZUlkZW50aXR5LAorICAgICAgICAg
ICAga0NJQXR0cmlidXRlVHlwZVNjYWxhciwga0NJQXR0cmlidXRlVHlwZSwKKyAgICAgICAgICAg
IG5pbF0sIEAiaW5wdXRCaWFzIiwKKyAgICAgICAgbmlsXV07Cit9CisKKysgKENJRmlsdGVyICop
ZmlsdGVyV2l0aE5hbWU6KE5TU3RyaW5nICopbmFtZQoreworICAgIENJRmlsdGVyICpmaWx0ZXI7
CisgICAgZmlsdGVyID0gW1tzZWxmIGFsbG9jXSBpbml0XTsKKyAgICByZXR1cm4gW2ZpbHRlciBh
dXRvcmVsZWFzZV07Cit9CisKKy0gKGlkKWluaXQKK3sKKyAgICBpZighY29udm9sdmVNYXRyaXhL
ZXJuZWwpIHsKKyAgICAgICAgTlNCdW5kbGUgKmJ1bmRsZSA9IFtOU0J1bmRsZSBidW5kbGVGb3JD
bGFzczpbc2VsZiBjbGFzc11dOworICAgICAgICBOU1N0cmluZyAqa2VybmVsRmlsZSA9IFtidW5k
bGUgcGF0aEZvclJlc291cmNlOkAiV0tDb252b2x2ZU1hdHJpeEZpbHRlciIgb2ZUeXBlOkAiY2lr
ZXJuZWwiXTsKKyAgICAgICAgTlNTdHJpbmcgKmNvZGUgPSBbTlNTdHJpbmcgc3RyaW5nV2l0aENv
bnRlbnRzT2ZGaWxlOmtlcm5lbEZpbGVdOworICAgICAgICBOU0FycmF5ICprZXJuZWxzID0gW0NJ
S2VybmVsIGtlcm5lbHNXaXRoU3RyaW5nOmNvZGVdOworICAgICAgICBjb252b2x2ZU1hdHJpeEtl
cm5lbCA9IFtba2VybmVscyBvYmplY3RBdEluZGV4OjBdIHJldGFpbl07CisgICAgfQorICAgIHJl
dHVybiBbc3VwZXIgaW5pdF07Cit9CisKKy0gKENJSW1hZ2UgKilvdXRwdXRJbWFnZQoreworICAg
IC8vIEZJWE1FLCBJIGRvbid0IHRoaW5rIHRoaXMgaXMgcmlnaHQgeWV0Li4uCisgICAgQ0lTYW1w
bGVyICppbWFnZSA9IFtDSVNhbXBsZXIgc2FtcGxlcldpdGhJbWFnZTppbnB1dEltYWdlXTsKKyAg
ICBDSVNhbXBsZXIgKmtlcm5lbE1hdHJpeCA9IFtDSVNhbXBsZXIgc2FtcGxlcldpdGhJbWFnZTpp
bnB1dEtlcm5lbE1hdHJpeF07CisgICAgcmV0dXJuIFtzZWxmIGFwcGx5OmNvbnZvbHZlTWF0cml4
S2VybmVsLCBpbWFnZSwga2VybmVsTWF0cml4LCBpbnB1dERpdmlzb3IsCisgICAgICAgIGlucHV0
Qmlhcywga0NJQXBwbHlPcHRpb25EZWZpbml0aW9uLCBbaW1hZ2UgZGVmaW5pdGlvbl0sIG5pbF07
Cit9CisKKy0gKENHUmVjdClyZWdpb25PZjooaW50KXNhbXBsZXJJbmRleCBkZXN0UmVjdDooQ0dS
ZWN0KXIKK3sKKyAgICAvLyBUaGlzIGlzIGdvbm5hIGJlIHNsb29vb3cuCisgICAgQ0dSZWN0IGV4
dGVudCA9IFtpbnB1dEtlcm5lbE1hdHJpeCBleHRlbnRdOworICAgIENHU2l6ZSBzaXplID0gZXh0
ZW50LnNpemU7CisgICAgcmV0dXJuIENHUmVjdEluc2V0KHIsIC0xICogc2l6ZS53aWR0aCwgLTEg
KiBzaXplLmhlaWdodCk7Cit9CisKK0BlbmQKSW5kZXg6IFdLRGlmZnVzZUxpZ2h0aW5nRmlsdGVy
LmNpa2VybmVsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtTnB1IFdLRGlmZnVzZUxpZ2h0aW5nRmlsdGVyLmNp
a2VybmVsCi0tLSBXS0RpZmZ1c2VMaWdodGluZ0ZpbHRlci5jaWtlcm5lbAkxIEphbiAxOTcwIDAw
OjAwOjAwIC0wMDAwCisrKyBXS0RpZmZ1c2VMaWdodGluZ0ZpbHRlci5jaWtlcm5lbAk4IE5vdiAy
MDA1IDA4OjMwOjM1IC0wMDAwCkBAIC0wLDAgKzEsMTEgQEAKK2tlcm5lbCB2ZWM0IGRpZmZ1c2VM
aWdodGluZyhzYW1wbGVyIGlucHV0Tm9ybWFsVmVjdG9ycywgc2FtcGxlciBpbnB1dExpZ2h0VmVj
dG9ycywgX19jb2xvciBpbnB1dExpZ2h0aW5nQ29sb3IsIAorICAgIGZsb2F0IGlucHV0U3VyZmFj
ZVNjYWxlLCBmbG9hdCBpbnB1dERpZmZ1c2VDb25zdGFudCwgZmxvYXQgaW5wdXRLZXJuZWxMZW5n
dGhYLAorICAgIGZsb2F0IGlucHV0S2VybmVsTGVuZ3RoWSkKK3sKKwl2ZWMyIHBvcz1zYW1wbGVy
Q29vcmQoaW5wdXRMaWdodFZlY3RvcnMpOworCXZlYzIgcG9zbj1zYW1wbGVyQ29vcmQoaW5wdXRO
b3JtYWxWZWN0b3JzKTsKKwl2ZWMzIGwgPSBzYW1wbGUoaW5wdXRMaWdodFZlY3RvcnMsIHBvcyku
eHl6OworCXZlYzMgbiA9IHNhbXBsZShpbnB1dE5vcm1hbFZlY3RvcnMsIHBvc24pLnh5ejsKKyAg
ICBmbG9hdCBubCA9IChpbnB1dERpZmZ1c2VDb25zdGFudCpkb3QobCwgbikpOworICAgIHJldHVy
biB2ZWM0KGwueCwgbC55LCBsLnosIDEuMCk7Ly92ZWM0KGlucHV0TGlnaHRpbmdDb2xvci5yKm5s
LCBpbnB1dExpZ2h0aW5nQ29sb3IuZypubCwgaW5wdXRMaWdodGluZ0NvbG9yLmIqbmwsIDEuMCk7
Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpJbmRleDogV0tEaWZmdXNlTGlnaHRpbmdG
aWx0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09CmRpZmYgLU5wdSBXS0RpZmZ1c2VMaWdodGluZ0ZpbHRlci5oCi0t
LSBXS0RpZmZ1c2VMaWdodGluZ0ZpbHRlci5oCTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAKKysr
IFdLRGlmZnVzZUxpZ2h0aW5nRmlsdGVyLmgJNyBOb3YgMjAwNSAwNToyOTozNyAtMDAwMApAQCAt
MCwwICsxLDM3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1IEFwcGxlIENvbXB1dGVyLCBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW1wb3J0IDxRdWFydHpDb3JlL0Nv
cmVJbWFnZS5oPgorCitAaW50ZXJmYWNlIFdLRGlmZnVzZUxpZ2h0aW5nRmlsdGVyIDogQ0lGaWx0
ZXIgeworICAgIENJU2FtcGxlciAqaW5wdXROb3JtYWxNYXA7CisgICAgQ0lTYW1wbGVyICppbnB1
dExpZ2h0VmVjdG9yczsKKyAgICBDSUNvbG9yICAqaW5wdXRMaWdodGluZ0NvbG9yOworICAgIE5T
TnVtYmVyICppbnB1dFN1cmZhY2VTY2FsZTsKKyAgICBOU051bWJlciAqaW5wdXREaWZmdXNlQ29u
c3RhbnQ7CisgICAgTlNOdW1iZXIgKmlucHV0S2VybmVsVW5pdExlbmd0aFg7CisgICAgTlNOdW1i
ZXIgKmlucHV0S2VybmVsVW5pdExlbmd0aFk7Cit9CitAZW5kCkluZGV4OiBXS0RpZmZ1c2VMaWdo
dGluZ0ZpbHRlci5tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtTnB1IFdLRGlmZnVzZUxpZ2h0aW5nRmlsdGVy
Lm0KLS0tIFdLRGlmZnVzZUxpZ2h0aW5nRmlsdGVyLm0JMSBKYW4gMTk3MCAwMDowMDowMCAtMDAw
MAorKysgV0tEaWZmdXNlTGlnaHRpbmdGaWx0ZXIubQk3IE5vdiAyMDA1IDA1OjM1OjU0IC0wMDAw
CkBAIC0wLDAgKzEsMTA0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1IEFwcGxlIENvbXB1
dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW1wb3J0ICJXS0RpZmZ1
c2VMaWdodGluZ0ZpbHRlci5oIgorI2ltcG9ydCA8c3RkaW8uaD4KKworc3RhdGljIENJS2VybmVs
ICpkaWZmdXNlTGlnaHRpbmdGaWx0ZXIgPSBuaWw7CitzdGF0aWMgQk9PTCAgICAgZGlmZnVzZUxp
Z2h0aW5nRmlsdGVySW5pdGlhbGlzZWQgPSBOTzsKK0BpbXBsZW1lbnRhdGlvbiBXS0RpZmZ1c2VM
aWdodGluZ0ZpbHRlcgorCisrICh2b2lkKWluaXRpYWxpemUKK3sKKyAgICBpZighZGlmZnVzZUxp
Z2h0aW5nRmlsdGVySW5pdGlhbGlzZWQpeworICAgICAgICBbQ0lGaWx0ZXIgcmVnaXN0ZXJGaWx0
ZXJOYW1lOkAiV0tEaWZmdXNlTGlnaHRpbmciICAKKyAgICAgICAgICAgIGNvbnN0cnVjdG9yOnNl
bGYKKyAgICAgICAgICAgIGNsYXNzQXR0cmlidXRlczpbTlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnlX
aXRoT2JqZWN0c0FuZEtleXM6CisgICAgICAgICAgICBAIldlYktpdCBEaWZmdXNlIExpZ2h0aW5n
Iiwga0NJQXR0cmlidXRlRmlsdGVyRGlzcGxheU5hbWUsCisgICAgICAgICAgICBbTlNBcnJheSBh
cnJheVdpdGhPYmplY3RzOiBrQ0lDYXRlZ29yeVN0eWxpemUsIGtDSUNhdGVnb3J5VmlkZW8sCisg
ICAgICAgICAgICAgICAga0NJQ2F0ZWdvcnlTdGlsbEltYWdlLCBrQ0lDYXRlZ29yeU5vblNxdWFy
ZVBpeGVscyxuaWxdLCBrQ0lBdHRyaWJ1dGVGaWx0ZXJDYXRlZ29yaWVzLAorICAgICAgICAgICAg
W05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVjdHNBbmRLZXlzOgorICAgICAgICAgICAg
ICAgIFtDSUNvbG9yIGNvbG9yV2l0aFJlZDoxLjAgZ3JlZW46MS4wIGJsdWU6MS4wIGFscGhhOjEu
MF0sCisgICAgICAgICAgICAgICAga0NJQXR0cmlidXRlRGVmYXVsdCwgbmlsXSwgQCJpbnB1dExp
Z2h0aW5nQ29sb3IiLAorICAgICAgICAgICAgW05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9i
amVjdHNBbmRLZXlzOgorICAgICAgICAgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoRG91Ymxl
OjAuMF0sIGtDSUF0dHJpYnV0ZU1pbiwKKyAgICAgICAgICAgICAgICBbTlNOdW1iZXIgbnVtYmVy
V2l0aERvdWJsZToxLjBdLCBrQ0lBdHRyaWJ1dGVEZWZhdWx0LAorICAgICAgICAgICAgICAgIFtO
U051bWJlciBudW1iZXJXaXRoRG91YmxlOjEuMF0sIGtDSUF0dHJpYnV0ZUlkZW50aXR5LAorICAg
ICAgICAgICAgICAgIGtDSUF0dHJpYnV0ZVR5cGVTY2FsYXIsIGtDSUF0dHJpYnV0ZVR5cGUsCisg
ICAgICAgICAgICAgICAgbmlsXSwgQCJpbnB1dFN1cmZhY2VTY2FsZSIsCisgICAgICAgICAgICBb
TlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnlXaXRoT2JqZWN0c0FuZEtleXM6CisgICAgICAgICAgICAg
ICAgW05TTnVtYmVyIG51bWJlcldpdGhEb3VibGU6MC4wXSwga0NJQXR0cmlidXRlTWluLAorICAg
ICAgICAgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoRG91YmxlOjEuMF0sIGtDSUF0dHJpYnV0
ZURlZmF1bHQsCisgICAgICAgICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhEb3VibGU6MS4w
XSwga0NJQXR0cmlidXRlSWRlbnRpdHksCisgICAgICAgICAgICAgICAga0NJQXR0cmlidXRlVHlw
ZVNjYWxhciwga0NJQXR0cmlidXRlVHlwZSwKKyAgICAgICAgICAgICAgICBuaWxdLCBAImlucHV0
RGlmZnVzZUNvbnN0YW50IiwKKyAgICAgICAgICAgIFtOU0RpY3Rpb25hcnkgZGljdGlvbmFyeVdp
dGhPYmplY3RzQW5kS2V5czoKKyAgICAgICAgICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aERv
dWJsZTowLjBdLCBrQ0lBdHRyaWJ1dGVNaW4sCisgICAgICAgICAgICAgICAgW05TTnVtYmVyIG51
bWJlcldpdGhEb3VibGU6MS4wXSwga0NJQXR0cmlidXRlRGVmYXVsdCwKKyAgICAgICAgICAgICAg
ICBbTlNOdW1iZXIgbnVtYmVyV2l0aERvdWJsZToxLjBdLCBrQ0lBdHRyaWJ1dGVJZGVudGl0eSwK
KyAgICAgICAgICAgICAgICBrQ0lBdHRyaWJ1dGVUeXBlU2NhbGFyLCBrQ0lBdHRyaWJ1dGVUeXBl
LAorICAgICAgICAgICAgICAgIG5pbF0sIEAiaW5wdXRLZXJuZWxVbml0TGVuZ3RoWCIsCisgICAg
ICAgICAgICBbTlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnlXaXRoT2JqZWN0c0FuZEtleXM6CisgICAg
ICAgICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhEb3VibGU6MC4wXSwga0NJQXR0cmlidXRl
TWluLAorICAgICAgICAgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoRG91YmxlOjEuMF0sIGtD
SUF0dHJpYnV0ZURlZmF1bHQsCisgICAgICAgICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhE
b3VibGU6MS4wXSwga0NJQXR0cmlidXRlSWRlbnRpdHksCisgICAgICAgICAgICAgICAga0NJQXR0
cmlidXRlVHlwZVNjYWxhciwga0NJQXR0cmlidXRlVHlwZSwKKyAgICAgICAgICAgICAgICBuaWxd
LCBAImlucHV0S2VybmVsVW5pdExlbmd0aFkiLAorICAgICAgICBuaWxdXTsKKyAgICAgICAgZGlm
ZnVzZUxpZ2h0aW5nRmlsdGVySW5pdGlhbGlzZWQgPSBZRVM7CisgICAgfQorfQorCisrIChDSUZp
bHRlciAqKWZpbHRlcldpdGhOYW1lOihOU1N0cmluZyAqKW5hbWUKK3sKKyAgICBDSUZpbHRlciAq
ZmlsdGVyOworICAgIGZpbHRlciA9IFtbc2VsZiBhbGxvY10gaW5pdF07CisgICAgcmV0dXJuIFtm
aWx0ZXIgYXV0b3JlbGVhc2VdOworfQorCistIChpZClpbml0Cit7CisgICAgaWYoIWRpZmZ1c2VM
aWdodGluZ0ZpbHRlcikgeworICAgICAgICAvL05TQnVuZGxlICpidW5kbGUgPSBbTlNCdW5kbGUg
YnVuZGxlRm9yQ2xhc3M6W3NlbGYgY2xhc3NdXTsKKyAgICAgICAgTlNTdHJpbmcgKmtlcm5lbEZp
bGUgPSBAIi4vU1ZHU3VwcG9ydC9rY2FudmFzL2RldmljZS9xdWFydHovZmlsdGVycy9XS0RpZmZ1
c2VMaWdodGluZ0ZpbHRlci5jaWtlcm5lbCI7Ly9bYnVuZGxlIHBhdGhGb3JSZXNvdXJjZTpAIldL
RGlmZnVzZUxpZ2h0aW5nRmlsdGVyIiBvZlR5cGU6QCJjaWtlcm5lbCJdOworICAgICAgICBOU1N0
cmluZyAqY29kZSA9IFtOU1N0cmluZyBzdHJpbmdXaXRoQ29udGVudHNPZkZpbGU6a2VybmVsRmls
ZV07CisgICAgICAgIE5TQXJyYXkgKmtlcm5lbHMgPSBbQ0lLZXJuZWwga2VybmVsc1dpdGhTdHJp
bmc6Y29kZV07CisgICAgICAgIGRpZmZ1c2VMaWdodGluZ0ZpbHRlciA9IFtba2VybmVscyBvYmpl
Y3RBdEluZGV4OjBdIHJldGFpbl07CisgICAgfQorICAgIHJldHVybiBbc3VwZXIgaW5pdF07Cit9
CisKKy0gKENJSW1hZ2UgKilvdXRwdXRJbWFnZQoreworICAgIC8vQ0lTYW1wbGVyICpzcmMgPSBb
Q0lTYW1wbGVyIHNhbXBsZXJXaXRoSW1hZ2U6IGlucHV0SW1hZ2VdOworICAgIC8vW0NJU2FtcGxl
ciBzYW1wbGVyV2l0aEltYWdlOiBbW1tbV0tQb2ludExpZ2h0RmlsdGVyIGFsbG9jXSBpbml0XSBv
dXRwdXRJbWFnZVdpdGhOb3JtYWxzOiBub3JtYWxzIGFuZExpZ2h0UG9zaXRpb246IFtDSVZlY3Rv
ciB2ZWN0b3JXaXRoWDooeCgpKSBZOih5KCkpIFo6KHooKSldXV1dOyAgICAKKyAgICAvL0NJU2Ft
cGxlciAqbGlnaHRTcmMgPSBuaWw7Ly9bQ0lTYW1wbGVyIHNhbXBsZXJXaXRoSW1hZ2U6IGlucHV0
TGlnaHRTb3VyY2VdOworICAgIHJldHVybiBbc2VsZiBhcHBseTpkaWZmdXNlTGlnaHRpbmdGaWx0
ZXIsIGlucHV0Tm9ybWFsTWFwLCBpbnB1dExpZ2h0VmVjdG9ycywgaW5wdXRMaWdodGluZ0NvbG9y
LCBpbnB1dFN1cmZhY2VTY2FsZSwgaW5wdXREaWZmdXNlQ29uc3RhbnQsCisgICAgICAgIGlucHV0
S2VybmVsVW5pdExlbmd0aFgsIGlucHV0S2VybmVsVW5pdExlbmd0aFksIG5pbF07Cit9CisKK0Bl
bmQKKworCkluZGV4OiBXS0Rpc3RhbnRMaWdodEZpbHRlci5jaWtlcm5lbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CmRp
ZmYgLU5wdSBXS0Rpc3RhbnRMaWdodEZpbHRlci5jaWtlcm5lbAotLS0gV0tEaXN0YW50TGlnaHRG
aWx0ZXIuY2lrZXJuZWwJMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMAorKysgV0tEaXN0YW50TGln
aHRGaWx0ZXIuY2lrZXJuZWwJOCBOb3YgMjAwNSAwMjozMzo1NSAtMDAwMApAQCAtMCwwICsxLDQg
QEAKK2tlcm5lbCB2ZWM0IGRpc3RhbnRMaWdodChzYW1wbGVyIGltYWdlLCB2ZWMzIGRpcmVjdGlv
bikKK3sKKyAgICByZXR1cm4gdmVjNChkaXJlY3Rpb24ueCwgZGlyZWN0aW9uLnksIGRpcmVjdGlv
bi56LCAxLjApOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKSW5kZXg6IFdLRGlzdGFu
dExpZ2h0RmlsdGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQpkaWZmIC1OcHUgV0tEaXN0YW50TGlnaHRGaWx0ZXIu
aAotLS0gV0tEaXN0YW50TGlnaHRGaWx0ZXIuaAkxIEphbiAxOTcwIDAwOjAwOjAwIC0wMDAwCisr
KyBXS0Rpc3RhbnRMaWdodEZpbHRlci5oCTcgTm92IDIwMDUgMTI6MjA6NDcgLTAwMDAKQEAgLTAs
MCArMSwzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBBcHBsZSBDb21wdXRlciwgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2ltcG9ydCA8UXVhcnR6Q29yZS9Db3Jl
SW1hZ2UuaD4KKworQGludGVyZmFjZSBXS0Rpc3RhbnRMaWdodEZpbHRlciA6IENJRmlsdGVyIHsK
KyAgICBDSVZlY3RvciAqIGlucHV0RGlyZWN0aW9uOworfQorKyAoQ0lJbWFnZSAqKW91dHB1dElt
YWdlV2l0aE5vcm1hbHM6KENJU2FtcGxlciAqKW5vcm1hbE1hcCBhbmRMaWdodERpcmVjdGlvbjoo
Q0lWZWN0b3IgKikgbGlnaHREaXJlY3Rpb247CitAZW5kCkluZGV4OiBXS0Rpc3RhbnRMaWdodEZp
bHRlci5tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KZGlmZiAtTnB1IFdLRGlzdGFudExpZ2h0RmlsdGVyLm0KLS0tIFdL
RGlzdGFudExpZ2h0RmlsdGVyLm0JMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMAorKysgV0tEaXN0
YW50TGlnaHRGaWx0ZXIubQk3IE5vdiAyMDA1IDEwOjQ0OjQ5IC0wMDAwCkBAIC0wLDAgKzEsNzkg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisgCisjaW1wb3J0ICJXS0Rpc3RhbnRMaWdodEZpbHRlci5o
IgorCitzdGF0aWMgQ0lLZXJuZWwgKmRpc3RhbnRMaWdodEZpbHRlciA9IG5pbDsKK3N0YXRpYyBX
S0Rpc3RhbnRMaWdodEZpbHRlciAqaW5zdGFuY2UgPSBuaWw7CisKK0BpbXBsZW1lbnRhdGlvbiBX
S0Rpc3RhbnRMaWdodEZpbHRlcgorCisrICh2b2lkKWluaXRpYWxpemUKK3sKKyAgICBbQ0lGaWx0
ZXIgcmVnaXN0ZXJGaWx0ZXJOYW1lOkAiV0tEaXN0YW50TGlnaHQiCisgICAgICAgIGNvbnN0cnVj
dG9yOiBzZWxmCisgICAgICAgIGNsYXNzQXR0cmlidXRlczogW05TRGljdGlvbmFyeSBkaWN0aW9u
YXJ5V2l0aE9iamVjdHNBbmRLZXlzOgorICAgICAgICAgQCJXZWJLaXQgRGlzdGFudCBMaWdodCIs
IGtDSUF0dHJpYnV0ZUZpbHRlckRpc3BsYXlOYW1lLAorICAgICAgICBbTlNBcnJheSBhcnJheVdp
dGhPYmplY3RzOiBrQ0lDYXRlZ29yeVN0eWxpemUsIGtDSUNhdGVnb3J5VmlkZW8sCisgICAgICAg
ICAgICBrQ0lDYXRlZ29yeVN0aWxsSW1hZ2UsIGtDSUNhdGVnb3J5Tm9uU3F1YXJlUGl4ZWxzLG5p
bF0sIGtDSUF0dHJpYnV0ZUZpbHRlckNhdGVnb3JpZXMsCisgICAgICAgICAgICBbTlNEaWN0aW9u
YXJ5IGRpY3Rpb25hcnlXaXRoT2JqZWN0c0FuZEtleXM6CisgICAgICAgICAgICAgICAga0NJQXR0
cmlidXRlVHlwZVBvc2l0aW9uMywga0NJQXR0cmlidXRlVHlwZSwKKyAgICAgICAgICAgICAgICBu
aWxdLCBAImlucHV0TGlnaHRQb3NpdGlvbiIsCisgICAgICAgIG5pbF1dOworfQorCisrIChDSUZp
bHRlciAqKWZpbHRlcldpdGhOYW1lOihOU1N0cmluZyAqKW5hbWUKK3sKKyAgICBDSUZpbHRlciAq
ZmlsdGVyOworICAgIGZpbHRlciA9IFtbc2VsZiBhbGxvY10gaW5pdF07CisgICAgcmV0dXJuIFtm
aWx0ZXIgYXV0b3JlbGVhc2VdOworfQorCistIChpZClpbml0Cit7CisgICAgaWYoIWRpc3RhbnRM
aWdodEZpbHRlcikgeworICAgICAgICBOU0J1bmRsZSAqYnVuZGxlID0gW05TQnVuZGxlIGJ1bmRs
ZUZvckNsYXNzOltzZWxmIGNsYXNzXV07CisgICAgICAgIE5TU3RyaW5nICprZXJuZWxGaWxlID0g
W2J1bmRsZSBwYXRoRm9yUmVzb3VyY2U6QCJXS0Rpc3RhbnRMaWdodEZpbHRlciIgb2ZUeXBlOkAi
Y2lrZXJuZWwiXTsKKyAgICAgICAgTlNTdHJpbmcgKmNvZGUgPSBbTlNTdHJpbmcgc3RyaW5nV2l0
aENvbnRlbnRzT2ZGaWxlOmtlcm5lbEZpbGVdOworICAgICAgICBOU0FycmF5ICprZXJuZWxzID0g
W0NJS2VybmVsIGtlcm5lbHNXaXRoU3RyaW5nOmNvZGVdOworICAgICAgICBkaXN0YW50TGlnaHRG
aWx0ZXIgPSBbW2tlcm5lbHMgb2JqZWN0QXRJbmRleDowXSByZXRhaW5dOworICAgIH0KKyAgICBy
ZXR1cm4gW3N1cGVyIGluaXRdOworfQorCistIChDSUltYWdlICopb3V0cHV0SW1hZ2UKK3sKKyAg
ICByZXR1cm4gW3NlbGYgYXBwbHk6ZGlzdGFudExpZ2h0RmlsdGVyLCBpbnB1dERpcmVjdGlvbiwg
bmlsXTsKK30KKworKyAoQ0lJbWFnZSAqKW91dHB1dEltYWdlV2l0aE5vcm1hbHM6KENJU2FtcGxl
ciAqKW5vcm1hbE1hcCBhbmRMaWdodERpcmVjdGlvbjooQ0lWZWN0b3IgKikgbGlnaHREaXJlY3Rp
b24KK3sKKyAgICBbV0tEaXN0YW50TGlnaHRGaWx0ZXIgaW5pdGlhbGl6ZV07CisgICAgaWYoIWlu
c3RhbmNlKSBpbnN0YW5jZSA9IFtbV0tEaXN0YW50TGlnaHRGaWx0ZXIgYWxsb2NdIGluaXRdOwor
ICAgIHJldHVybiBbaW5zdGFuY2UgYXBwbHk6ZGlzdGFudExpZ2h0RmlsdGVyLCBub3JtYWxNYXAs
IGxpZ2h0RGlyZWN0aW9uLCBuaWxdOworfQorCisKK0BlbmQKSW5kZXg6IFdLTm9ybWFsTWFwRmls
dGVyLmNpa2VybmVsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtTnB1IFdLTm9ybWFsTWFwRmlsdGVyLmNpa2Vy
bmVsCi0tLSBXS05vcm1hbE1hcEZpbHRlci5jaWtlcm5lbAkxIEphbiAxOTcwIDAwOjAwOjAwIC0w
MDAwCisrKyBXS05vcm1hbE1hcEZpbHRlci5jaWtlcm5lbAk4IE5vdiAyMDA1IDAyOjM0OjEyIC0w
MDAwCkBAIC0wLDAgKzEsMjUgQEAKK2tlcm5lbCB2ZWM0IGNvbnZvbHZlKHNhbXBsZXIgaW1hZ2Us
ICBmbG9hdCBkaXZpc29yLCBmbG9hdCBiaWFzLAorCQkJZmxvYXQgbTAwLCBmbG9hdCBtMDEsIGZs
b2F0IG0wMiwKKwkJCWZsb2F0IG0xMCwgZmxvYXQgbTExLCBmbG9hdCBtMTIsCisJCQlmbG9hdCBt
MjAsIGZsb2F0IG0yMSwgZmxvYXQgbTIyKQoreworICAgIHZlYzQgY29sb3VyPXZlYzQoMC4wLCAw
LjAsIDAuMCwgMC4wKTsKKyAgICB2ZWMyIHBvcz1zYW1wbGVyQ29vcmQoaW1hZ2UpOworICAgIGNv
bG91cj1zYW1wbGUoaW1hZ2UsIHBvcyt2ZWMyKC0xLC0xKSkqbTAwOworICAgIGNvbG91cis9c2Ft
cGxlKGltYWdlLCBwb3MrdmVjMigtMSwgMC4wKSkqbTAxOworICAgIGNvbG91cis9c2FtcGxlKGlt
YWdlLCBwb3MrdmVjMigtMSwgMSkpKm0wMjsKKyAgICBjb2xvdXIrPXNhbXBsZShpbWFnZSwgcG9z
K3ZlYzIoMCwtMSkpKm0xMDsKKyAgICBjb2xvdXIrPXNhbXBsZShpbWFnZSwgcG9zKSptMTE7Cisg
ICAgY29sb3VyKz1zYW1wbGUoaW1hZ2UsIHBvcyt2ZWMyKDAsIDEuMCkpKm0xMjsKKyAgICBjb2xv
dXIrPXNhbXBsZShpbWFnZSwgcG9zK3ZlYzIoMSwtMSkpKm0yMDsKKyAgICBjb2xvdXIrPXNhbXBs
ZShpbWFnZSwgcG9zK3ZlYzIoMSwgMC4wKSkqbTIxOworICAgIGNvbG91cis9c2FtcGxlKGltYWdl
LCBwb3MrdmVjMigxLCAxKSkqbTIyOworICAgIHJldHVybiAoKChjb2xvdXIvZGl2aXNvcikrYmlh
cykpOworfQorCitrZXJuZWwgdmVjNCBtZXJnZU5vcm1hbHMoc2FtcGxlciBOeCwgc2FtcGxlciBO
eSwgc2FtcGxlciBzcmMsIGZsb2F0IHN1cmZhY2VTY2FsZSkKK3sKKyAgICB2ZWMzIE49dmVjMyhz
dXJmYWNlU2NhbGUqc2FtcGxlKE54LCBzYW1wbGVyQ29vcmQoTngpKS5hLCBzdXJmYWNlU2NhbGUq
c2FtcGxlKE55LCBzYW1wbGVyQ29vcmQoTnkpKS5hLCAxLjAsIDAuMCk7CisgICAgTiA9IE4vc3Fy
dChkb3QoTixOKSk7CisgICAgcmV0dXJuIHZlYzQoTi54LCBOLnksIE4ueiwgc3VyZmFjZVNjYWxl
KnNhbXBsZShzcmMsIHNhbXBsZXJDb29yZChzcmMpKS5hKTsKK30KXCBObyBuZXdsaW5lIGF0IGVu
ZCBvZiBmaWxlCkluZGV4OiBXS05vcm1hbE1hcEZpbHRlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtTnB1
IFdLTm9ybWFsTWFwRmlsdGVyLmgKLS0tIFdLTm9ybWFsTWFwRmlsdGVyLmgJMSBKYW4gMTk3MCAw
MDowMDowMCAtMDAwMAorKysgV0tOb3JtYWxNYXBGaWx0ZXIuaAk3IE5vdiAyMDA1IDAyOjA4OjU1
IC0wMDAwCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgQXBwbGUg
Q29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbXBvcnQgPFF1
YXJ0ekNvcmUvQ29yZUltYWdlLmg+CisKK0BpbnRlcmZhY2UgV0tOb3JtYWxNYXBGaWx0ZXIgOiBD
SUZpbHRlciB7CisgICAgQ0lJbWFnZSAqaW5wdXRJbWFnZTsKKyAgICBOU051bWJlciAqaW5wdXRT
dXJmYWNlU2NhbGU7Cit9CisKKysgKENJU2FtcGxlciAqKSBvdXRwdXROb3JtYWxzV2l0aEJ1bXBN
YXA6KENJU2FtcGxlciAqKWlucHV0SW1hZ2UgYW5kU3VyZmFjZVNjYWxlOihOU051bWJlciAqKSBp
bnB1dFN1cmZhY2VTY2FsZTsKKworQGVuZAorCkluZGV4OiBXS05vcm1hbE1hcEZpbHRlci5tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KZGlmZiAtTnB1IFdLTm9ybWFsTWFwRmlsdGVyLm0KLS0tIFdLTm9ybWFsTWFwRmls
dGVyLm0JMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMAorKysgV0tOb3JtYWxNYXBGaWx0ZXIubQk3
IE5vdiAyMDA1IDE0OjIxOjA0IC0wMDAwCkBAIC0wLDAgKzEsMTE4IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDA1IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVU
RVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRF
UiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaW1wb3J0ICJXS05vcm1hbE1hcEZpbHRlci5oIgorCitzdGF0aWMgQ0lLZXJuZWwg
KmNvbnZvbHZlS2VybmVsID0gbmlsOworc3RhdGljIENJS2VybmVsICpub3JtYWxNYXBLZXJuZWwg
PSBuaWw7CitzdGF0aWMgV0tOb3JtYWxNYXBGaWx0ZXIgKmluc3RhbmNlID0gbmlsOworCitAaW1w
bGVtZW50YXRpb24gV0tOb3JtYWxNYXBGaWx0ZXIKKworKyAodm9pZClpbml0aWFsaXplCit7Cisg
ICAgW0NJRmlsdGVyIHJlZ2lzdGVyRmlsdGVyTmFtZTpAIldLTm9ybWFsTWFwIgorICAgICAgICBj
b25zdHJ1Y3RvcjpzZWxmCisgICAgICAgIGNsYXNzQXR0cmlidXRlczpbTlNEaWN0aW9uYXJ5IGRp
Y3Rpb25hcnlXaXRoT2JqZWN0c0FuZEtleXM6CisgICAgICAgICBAIldlYktpdCBOb3JtYWwgTWFw
Iiwga0NJQXR0cmlidXRlRmlsdGVyRGlzcGxheU5hbWUsCisgICAgICAgIFtOU0FycmF5IGFycmF5
V2l0aE9iamVjdHM6IGtDSUNhdGVnb3J5Qmx1ciwga0NJQ2F0ZWdvcnlWaWRlbywKKyAgICAgICAg
ICAgIGtDSUNhdGVnb3J5U3RpbGxJbWFnZSwga0NJQ2F0ZWdvcnlOb25TcXVhcmVQaXhlbHMsIG5p
bF0sIGtDSUF0dHJpYnV0ZUZpbHRlckNhdGVnb3JpZXMsCisgICAgICAgIG5pbF1dOworfQorCisr
IChDSUZpbHRlciAqKWZpbHRlcldpdGhOYW1lOihOU1N0cmluZyAqKW5hbWUKK3sKKyAgICBDSUZp
bHRlciAqZmlsdGVyOworICAgIGZpbHRlciA9IFtbc2VsZiBhbGxvY10gaW5pdF07CisgICAgcmV0
dXJuIFtmaWx0ZXIgYXV0b3JlbGVhc2VdOworfQorCistIChpZClpbml0Cit7CisgICAgaWYoIW5v
cm1hbE1hcEtlcm5lbCkgeworICAgICAgIC8vIE5TQnVuZGxlICpidW5kbGUgPSBbTlNCdW5kbGUg
YnVuZGxlRm9yQ2xhc3M6W3NlbGYgY2xhc3NdXTsKKyAgICAgICAvLyBOU1N0cmluZyAqa2VybmVs
RmlsZSA9IFtidW5kbGUgcGF0aEZvclJlc291cmNlOkAiV0tOb3JtYWxNYXBGaWx0ZXIiIG9mVHlw
ZTpAImNpa2VybmVsIl07CisgICAgICAgIE5TU3RyaW5nICprZXJuZWxGaWxlID0gQCIuL1NWR1N1
cHBvcnQva2NhbnZhcy9kZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tOb3JtYWxNYXBGaWx0ZXIuY2lr
ZXJuZWwiOworICAgICAgICBOU1N0cmluZyAqY29kZSA9IFtOU1N0cmluZyBzdHJpbmdXaXRoQ29u
dGVudHNPZkZpbGU6a2VybmVsRmlsZV07CisgICAgICAgIE5TQXJyYXkgKmtlcm5lbHMgPSBbQ0lL
ZXJuZWwga2VybmVsc1dpdGhTdHJpbmc6Y29kZV07CisgICAgICAgIGNvbnZvbHZlS2VybmVsID0g
W1trZXJuZWxzIG9iamVjdEF0SW5kZXg6MF0gcmV0YWluXTsKKyAgICAgICAgbm9ybWFsTWFwS2Vy
bmVsID0gW1trZXJuZWxzIG9iamVjdEF0SW5kZXg6MV0gcmV0YWluXTsKKyAgICB9CisgICAgcmV0
dXJuIFtzdXBlciBpbml0XTsKK30KKworLSAoTlNBcnJheSAqKXhDb252b2x2ZUFyZ3NXaXRoQnVt
cE1hcDooQ0lTYW1wbGVyICopYnVtcE1hcCB7CisgICAgcmV0dXJuIFtOU0FycmF5IGFycmF5V2l0
aE9iamVjdHM6CisgICAgICAgIGJ1bXBNYXAsCisgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRo
RmxvYXQ6NF0sCisgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6MF0sCisgICAgICAg
IFtOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6MV0sIFtOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6
Ml0sIFtOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6MV0sCisgICAgICAgIFtOU051bWJlciBudW1i
ZXJXaXRoRmxvYXQ6MF0sIFtOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6MF0sIFtOU051bWJlciBu
dW1iZXJXaXRoRmxvYXQ6MF0sCisgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6LTFd
LCBbTlNOdW1iZXIgbnVtYmVyV2l0aEZsb2F0Oi0yXSwgW05TTnVtYmVyIG51bWJlcldpdGhGbG9h
dDotMV0sCisgICAgICAgIG5pbF07Cit9CisKKy0gKE5TQXJyYXkgKil5Q29udm9sdmVBcmdzV2l0
aEJ1bXBNYXA6KENJU2FtcGxlciAqKWJ1bXBNYXAgeworICAgIHJldHVybiBbTlNBcnJheSBhcnJh
eVdpdGhPYmplY3RzOiAKKyAgICAgICAgYnVtcE1hcCwKKyAgICAgICAgW05TTnVtYmVyIG51bWJl
cldpdGhGbG9hdDo0XSwKKyAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhGbG9hdDowXSwKKyAg
ICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhGbG9hdDoxXSwgW05TTnVtYmVyIG51bWJlcldpdGhG
bG9hdDowXSwgW05TTnVtYmVyIG51bWJlcldpdGhGbG9hdDotMV0sCisgICAgICAgIFtOU051bWJl
ciBudW1iZXJXaXRoRmxvYXQ6Ml0sIFtOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6MF0sIFtOU051
bWJlciBudW1iZXJXaXRoRmxvYXQ6LTJdLAorICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aEZs
b2F0OjFdLCBbTlNOdW1iZXIgbnVtYmVyV2l0aEZsb2F0OjBdLCBbTlNOdW1iZXIgbnVtYmVyV2l0
aEZsb2F0Oi0xXSwKKyAgICAgICAgbmlsXTsKK30KKworLSAoQ0lJbWFnZSAqKW91dHB1dEltYWdl
Cit7CisgICAgQ0lTYW1wbGVyICppbWFnZSA9IFtDSVNhbXBsZXIgc2FtcGxlcldpdGhJbWFnZTpp
bnB1dEltYWdlXTsKKyAgICBOU0RpY3Rpb25hcnkgKmFwcGx5T3B0aW9ucyA9IFtOU0RpY3Rpb25h
cnkgZGljdGlvbmFyeVdpdGhPYmplY3RzQW5kS2V5czpbaW1hZ2UgZGVmaW5pdGlvbl0sIGtDSUFw
cGx5T3B0aW9uRGVmaW5pdGlvbiwgbmlsXTsKKyAgICAKKyAgICBDSUltYWdlICpjb252b2x2ZVgg
PSBbc2VsZiBhcHBseTpjb252b2x2ZUtlcm5lbCBhcmd1bWVudHM6W3NlbGYgeENvbnZvbHZlQXJn
c1dpdGhCdW1wTWFwOiBuaWxdIG9wdGlvbnM6YXBwbHlPcHRpb25zXTsKKyAgICBDSUltYWdlICpj
b252b2x2ZVkgPSBbc2VsZiBhcHBseTpjb252b2x2ZUtlcm5lbCBhcmd1bWVudHM6W3NlbGYgeUNv
bnZvbHZlQXJnc1dpdGhCdW1wTWFwOiBuaWxdIG9wdGlvbnM6YXBwbHlPcHRpb25zXTsKKyAgICBD
SVNhbXBsZXIgKnNhbXBsZXJYID0gW0NJU2FtcGxlciBzYW1wbGVyV2l0aEltYWdlOmNvbnZvbHZl
WF07CisgICAgQ0lTYW1wbGVyICpzYW1wbGVyWSA9IFtDSVNhbXBsZXIgc2FtcGxlcldpdGhJbWFn
ZTpjb252b2x2ZVldOworICAgIAorICAgIE5TQXJyYXkgKm5vcm1hbE1hcEFyZ3MgPSBbTlNBcnJh
eSBhcnJheVdpdGhPYmplY3RzOnNhbXBsZXJYLCBzYW1wbGVyWSwgaW1hZ2UsIGlucHV0U3VyZmFj
ZVNjYWxlXTsKKyAgICByZXR1cm4gW3NlbGYgYXBwbHk6bm9ybWFsTWFwS2VybmVsIGFyZ3VtZW50
czpub3JtYWxNYXBBcmdzIG9wdGlvbnM6YXBwbHlPcHRpb25zXTsKK30KKworKyAoQ0lTYW1wbGVy
ICopIG91dHB1dE5vcm1hbHNXaXRoQnVtcE1hcDooQ0lTYW1wbGVyICopaW1hZ2UgYW5kU3VyZmFj
ZVNjYWxlOihOU051bWJlciAqKSBpbnB1dFN1cmZhY2VTY2FsZQoreyAgICAKKyAgICBbV0tOb3Jt
YWxNYXBGaWx0ZXIgaW5pdGlhbGl6ZV07CisgICAgaWYoIWluc3RhbmNlKSBpbnN0YW5jZSA9IFtb
V0tOb3JtYWxNYXBGaWx0ZXIgYWxsb2NdIGluaXRdOworICAgIAorICAgIE5TRGljdGlvbmFyeSAq
YXBwbHlPcHRpb25zID0gW05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVjdHNBbmRLZXlz
OltpbWFnZSBkZWZpbml0aW9uXSwga0NJQXBwbHlPcHRpb25EZWZpbml0aW9uLCBuaWxdOworICAg
IAorICAgIENJSW1hZ2UgKmNvbnZvbHZlWCA9IFtpbnN0YW5jZSBhcHBseTpjb252b2x2ZUtlcm5l
bCBhcmd1bWVudHM6W2luc3RhbmNlIHhDb252b2x2ZUFyZ3NXaXRoQnVtcE1hcDogaW1hZ2VdIG9w
dGlvbnM6YXBwbHlPcHRpb25zXTsKKyAgICBDSUltYWdlICpjb252b2x2ZVkgPSBbaW5zdGFuY2Ug
YXBwbHk6Y29udm9sdmVLZXJuZWwgYXJndW1lbnRzOltpbnN0YW5jZSB5Q29udm9sdmVBcmdzV2l0
aEJ1bXBNYXA6IGltYWdlXSBvcHRpb25zOmFwcGx5T3B0aW9uc107CisgICAgQ0lTYW1wbGVyICpz
YW1wbGVyWCA9IFtDSVNhbXBsZXIgc2FtcGxlcldpdGhJbWFnZTpjb252b2x2ZVhdOworICAgIENJ
U2FtcGxlciAqc2FtcGxlclkgPSBbQ0lTYW1wbGVyIHNhbXBsZXJXaXRoSW1hZ2U6Y29udm9sdmVZ
XTsKKyAgICAKKyAgIC8vIE5TQXJyYXkgKm5vcm1hbE1hcEFyZ3MgPSBbTlNBcnJheSBhcnJheVdp
dGhPYmplY3RzOnNhbXBsZXJYLCBzYW1wbGVyWSwgaW1hZ2UsIGlucHV0U3VyZmFjZVNjYWxlXTsK
KyAgICByZXR1cm4gW0NJU2FtcGxlciBzYW1wbGVyV2l0aEltYWdlOltpbnN0YW5jZSBhcHBseTpu
b3JtYWxNYXBLZXJuZWwsIHNhbXBsZXJYLCBzYW1wbGVyWSwgaW1hZ2UsIGlucHV0U3VyZmFjZVNj
YWxlLCBuaWxdXTsvLyBhcmd1bWVudHM6bm9ybWFsTWFwQXJncyBvcHRpb25zOmFwcGx5T3B0aW9u
c11dOworfQorCitAZW5kCkluZGV4OiBXS1BvaW50TGlnaHRGaWx0ZXIuY2lrZXJuZWwKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpkaWZmIC1OcHUgV0tQb2ludExpZ2h0RmlsdGVyLmNpa2VybmVsCi0tLSBXS1BvaW50TGln
aHRGaWx0ZXIuY2lrZXJuZWwJMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMAorKysgV0tQb2ludExp
Z2h0RmlsdGVyLmNpa2VybmVsCTggTm92IDIwMDUgMDI6MTg6MTEgLTAwMDAKQEAgLTAsMCArMSwx
MiBAQAorLyoKK0dlbmVyYXRlIHRoZSBsaWdodCB2ZWN0b3JzIGZvciBhIHBvaW50IGxpZ2h0IHNv
dXJjZQorKi8KKwora2VybmVsIHZlYzQgZ2VuUG9pbnRMaWdodChzYW1wbGVyIG5vcm1hbE1hcCwg
dmVjMyBsaWdodFBvcykKK3sKKwl2ZWMyIHBvcz1zYW1wbGVyQ29vcmQobm9ybWFsTWFwKTsKKwl2
ZWMzIFAgPSB2ZWMzKHBvcy54LCBwb3MueSwgc2FtcGxlKG5vcm1hbE1hcCwgcG9zKS5hKTsKKwl2
ZWMzIEwgPSBsaWdodFBvcy1QOworCUw9TC9zcXJ0KGRvdChMLEwpKTsKKwlyZXR1cm4gdmVjNChM
LngsIEwueSwgTC56LCAxKTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCkluZGV4OiBX
S1BvaW50TGlnaHRGaWx0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CmRpZmYgLU5wdSBXS1BvaW50TGlnaHRGaWx0
ZXIuaAotLS0gV0tQb2ludExpZ2h0RmlsdGVyLmgJMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMAor
KysgV0tQb2ludExpZ2h0RmlsdGVyLmgJNyBOb3YgMjAwNSAwMTo1NTo0NyAtMDAwMApAQCAtMCww
ICsxLDM1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1IEFwcGxlIENvbXB1dGVyLCBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW1wb3J0IDxRdWFydHpDb3JlL0NvcmVJ
bWFnZS5oPgorCitAaW50ZXJmYWNlIFdLUG9pbnRMaWdodEZpbHRlciA6IENJRmlsdGVyIHsKKyAg
ICBDSUltYWdlICAqaW5wdXROb3JtYWxNYXA7CisgICAgQ0lWZWN0b3IgKmlucHV0TGlnaHRQb3Np
dGlvbjsKK30KKworKyAoQ0lJbWFnZSAqKSBvdXRwdXRJbWFnZVdpdGhOb3JtYWxzOihDSVNhbXBs
ZXIgKilub3JtYWxNYXAgYW5kTGlnaHRQb3NpdGlvbjooQ0lWZWN0b3IgKikgbGlnaHRQb3NpdGlv
bjsKKworQGVuZApJbmRleDogV0tQb2ludExpZ2h0RmlsdGVyLm0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpkaWZmIC1O
cHUgV0tQb2ludExpZ2h0RmlsdGVyLm0KLS0tIFdLUG9pbnRMaWdodEZpbHRlci5tCTEgSmFuIDE5
NzAgMDA6MDA6MDAgLTAwMDAKKysrIFdLUG9pbnRMaWdodEZpbHRlci5tCTcgTm92IDIwMDUgMDg6
NDg6MDEgLTAwMDAKQEAgLTAsMCArMSw4NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBB
cHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2ltcG9ydCAiV0tQb2ludExpZ2h0RmlsdGVyLmgiCisKK3N0YXRpYyBD
SUtlcm5lbCAqcG9pbnRMaWdodEZpbHRlciA9IG5pbDsKK3N0YXRpYyBCT09MIHBvaW50TGlnaHRG
aWx0ZXJJbml0aWFsaXNlZCA9IE5POworc3RhdGljIFdLUG9pbnRMaWdodEZpbHRlciAqaW5zdGFu
Y2UgPSBuaWw7CisKK0BpbXBsZW1lbnRhdGlvbiBXS1BvaW50TGlnaHRGaWx0ZXIKKworKyAodm9p
ZClpbml0aWFsaXplCit7CisgICAgaWYoIXBvaW50TGlnaHRGaWx0ZXJJbml0aWFsaXNlZCl7Cisg
ICAgICAgIFtDSUZpbHRlciByZWdpc3RlckZpbHRlck5hbWU6QCJXS1BvaW50TGlnaHQiCisgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3RydWN0b3I6IHNlbGYKKyAgICAgICAgICAgICAgICAg
ICAgIGNsYXNzQXR0cmlidXRlczogW05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVjdHNB
bmRLZXlzOgorICAgICAgICAgICAgICAgICAgICAgICAgIEAiV2ViS2l0IFBvaW50IExpZ2h0Iiwg
a0NJQXR0cmlidXRlRmlsdGVyRGlzcGxheU5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAg
W05TQXJyYXkgYXJyYXlXaXRoT2JqZWN0czoga0NJQ2F0ZWdvcnlTdHlsaXplLCBrQ0lDYXRlZ29y
eVZpZGVvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrQ0lDYXRlZ29yeVN0aWxsSW1h
Z2UsIGtDSUNhdGVnb3J5Tm9uU3F1YXJlUGl4ZWxzLG5pbF0sIGtDSUF0dHJpYnV0ZUZpbHRlckNh
dGVnb3JpZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgW05TRGljdGlvbmFyeSBkaWN0aW9u
YXJ5V2l0aE9iamVjdHNBbmRLZXlzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrQ0lB
dHRyaWJ1dGVUeXBlUG9zaXRpb24zLCBrQ0lBdHRyaWJ1dGVUeXBlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBuaWxdLCBAImlucHV0TGlnaHRQb3NpdGlvbiIsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgbmlsXV07CisgICAgICAgIHBvaW50TGlnaHRGaWx0ZXJJbml0aWFsaXNlZCA9
IFlFUzsKKyAgICB9Cit9CisKKysgKENJRmlsdGVyICopZmlsdGVyV2l0aE5hbWU6KE5TU3RyaW5n
ICopbmFtZQoreworICAgIENJRmlsdGVyICpmaWx0ZXI7CisgICAgZmlsdGVyID0gW1tzZWxmIGFs
bG9jXSBpbml0XTsKKyAgICByZXR1cm4gW2ZpbHRlciBhdXRvcmVsZWFzZV07Cit9CisKKy0gKGlk
KWluaXQKK3sKKyAgICBpZighcG9pbnRMaWdodEZpbHRlcikgeworICAgICAgICAvL05TQnVuZGxl
ICpidW5kbGUgPSBbTlNCdW5kbGUgYnVuZGxlRm9yQ2xhc3M6W3NlbGYgY2xhc3NdXTsKKyAgICAg
ICAgLy9OU1N0cmluZyAqa2VybmVsRmlsZSA9IFtidW5kbGUgcGF0aEZvclJlc291cmNlOkAiV0tQ
b2ludExpZ2h0RmlsdGVyIiBvZlR5cGU6QCJjaWtlcm5lbCJdOworICAgICAgICBOU1N0cmluZyAq
a2VybmVsRmlsZSA9IEAiLi9TVkdTdXBwb3J0L2tjYW52YXMvZGV2aWNlL3F1YXJ0ei9maWx0ZXJz
L1dLUG9pbnRMaWdodEZpbHRlci5jaWtlcm5lbCI7CisgICAgICAgIE5TU3RyaW5nICpjb2RlID0g
W05TU3RyaW5nIHN0cmluZ1dpdGhDb250ZW50c09mRmlsZTprZXJuZWxGaWxlXTsKKyAgICAgICAg
TlNBcnJheSAqa2VybmVscyA9IFtDSUtlcm5lbCBrZXJuZWxzV2l0aFN0cmluZzpjb2RlXTsKKyAg
ICAgICAgcG9pbnRMaWdodEZpbHRlciA9IFtba2VybmVscyBvYmplY3RBdEluZGV4OjBdIHJldGFp
bl07CisgICAgfQorICAgIHJldHVybiBbc3VwZXIgaW5pdF07Cit9CisKKy0gKENJSW1hZ2UgKilv
dXRwdXRJbWFnZQoreworICAgIHJldHVybiBbc2VsZiBhcHBseTpwb2ludExpZ2h0RmlsdGVyLCBp
bnB1dE5vcm1hbE1hcCwgaW5wdXRMaWdodFBvc2l0aW9uLCBuaWxdOworfQorIAorKyAoQ0lJbWFn
ZSAqKW91dHB1dEltYWdlV2l0aE5vcm1hbHM6KENJU2FtcGxlciAqKW5vcm1hbE1hcCBhbmRMaWdo
dFBvc2l0aW9uOihDSVZlY3RvciAqKSBsaWdodFBvc2l0aW9uCit7CisgICAgW1dLUG9pbnRMaWdo
dEZpbHRlciBpbml0aWFsaXplXTsKKyAgICBpZighaW5zdGFuY2UpIGluc3RhbmNlID0gW1tXS1Bv
aW50TGlnaHRGaWx0ZXIgYWxsb2NdIGluaXRdOworICAgIHJldHVybiBbaW5zdGFuY2UgYXBwbHk6
cG9pbnRMaWdodEZpbHRlciwgbm9ybWFsTWFwLCBsaWdodFBvc2l0aW9uLCBuaWxdOworfQorCisK
K0BlbmQKSW5kZXg6IFdLU3BlY3VsYXJMaWdodGluZ0ZpbHRlci5jaWtlcm5lbAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
CmRpZmYgLU5wdSBXS1NwZWN1bGFyTGlnaHRpbmdGaWx0ZXIuY2lrZXJuZWwKLS0tIFdLU3BlY3Vs
YXJMaWdodGluZ0ZpbHRlci5jaWtlcm5lbAkxIEphbiAxOTcwIDAwOjAwOjAwIC0wMDAwCisrKyBX
S1NwZWN1bGFyTGlnaHRpbmdGaWx0ZXIuY2lrZXJuZWwJOCBOb3YgMjAwNSAwMjo0MjoyNyAtMDAw
MApAQCAtMCwwICsxLDE1IEBACitrZXJuZWwgdmVjNCBiYXNpYyhzYW1wbGVyIGlucHV0Tm9ybWFs
VmVjdG9ycywgc2FtcGxlciBpbnB1dExpZ2h0VmVjdG9ycywgX19jb2xvciBpbnB1dExpZ2h0aW5n
Q29sb3IsIGZsb2F0IGlucHV0U3VyZmFjZVNjYWxlLCBmbG9hdCBpbnB1dFNwZWN1bGFyQ29uc3Rh
bnQsCisgICAgICAgIGZsb2F0IGlucHV0U3BlY3VsYXJFeHBvbmVudCwgZmxvYXQgaW5wdXRLZXJu
ZWxVbml0TGVuZ3RoWCwgZmxvYXQgaW5wdXRLZXJuZWxVbml0TGVuZ3RoWSkKK3sKKwl2ZWMyIHBv
cz1zYW1wbGVyQ29vcmQoaW5wdXRMaWdodFZlY3RvcnMpOworCXZlYzIgcG9zbj1zYW1wbGVyQ29v
cmQoaW5wdXROb3JtYWxWZWN0b3JzKTsKKwl2ZWMzIGwgPSBzYW1wbGUoaW5wdXRMaWdodFZlY3Rv
cnMsIHBvcykueHl6OworCXZlYzMgbiA9IHNhbXBsZShpbnB1dE5vcm1hbFZlY3RvcnMsIHBvc24p
Lnh5ejsKKyAgICB2ZWMzIGggPSBsK3ZlYzMoMC4wLDAuMCwxLjApOworICAgIGgvPXNxcnQoZG90
KGgsaCkpOworICAgIGZsb2F0IG5oID0gaW5wdXRTcGVjdWxhckNvbnN0YW50KnBvdygoZG90KG4s
IGgpKSwgaW5wdXRTcGVjdWxhckV4cG9uZW50KTsKKyAgICB2ZWM0IHJlcyA9IGlucHV0TGlnaHRp
bmdDb2xvciAqIG5oOworICAgIHJlcy5hPW1heChyZXMucixyZXMuZyk7Ly9uaDsKKyAgICByZXMu
YT1tYXgocmVzLmEsIHJlcy5iKTsKKyAgICByZXR1cm4gcmVzOy8vcmVzOworfQpcIE5vIG5ld2xp
bmUgYXQgZW5kIG9mIGZpbGUKSW5kZXg6IFdLU3BlY3VsYXJMaWdodGluZ0ZpbHRlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KZGlmZiAtTnB1IFdLU3BlY3VsYXJMaWdodGluZ0ZpbHRlci5oCi0tLSBXS1NwZWN1bGFy
TGlnaHRpbmdGaWx0ZXIuaAkxIEphbiAxOTcwIDAwOjAwOjAwIC0wMDAwCisrKyBXS1NwZWN1bGFy
TGlnaHRpbmdGaWx0ZXIuaAk4IE5vdiAyMDA1IDAxOjA5OjUyIC0wMDAwCkBAIC0wLDAgKzEsMzkg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbXBvcnQgPFF1YXJ0ekNvcmUvQ29yZUltYWdlLmg+
CisKKworQGludGVyZmFjZSBXS1NwZWN1bGFyTGlnaHRpbmdGaWx0ZXIgOiBDSUZpbHRlciB7Cisg
ICAgQ0lTYW1wbGVyICppbnB1dE5vcm1hbE1hcDsKKyAgICBDSVNhbXBsZXIgKmlucHV0TGlnaHRW
ZWN0b3JzOworICAgIENJQ29sb3IgICppbnB1dExpZ2h0aW5nQ29sb3I7CisgICAgTlNOdW1iZXIg
KmlucHV0U3VyZmFjZVNjYWxlOworICAgIE5TTnVtYmVyICppbnB1dFNwZWN1bGFyQ29uc3RhbnQ7
CisgICAgTlNOdW1iZXIgKmlucHV0U3BlY3VsYXJFeHBvbmVudDsKKyAgICBOU051bWJlciAqaW5w
dXRLZXJuZWxVbml0TGVuZ3RoWDsKKyAgICBOU051bWJlciAqaW5wdXRLZXJuZWxVbml0TGVuZ3Ro
WTsKK30KK0BlbmQKSW5kZXg6IFdLU3BlY3VsYXJMaWdodGluZ0ZpbHRlci5tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
ZGlmZiAtTnB1IFdLU3BlY3VsYXJMaWdodGluZ0ZpbHRlci5tCi0tLSBXS1NwZWN1bGFyTGlnaHRp
bmdGaWx0ZXIubQkxIEphbiAxOTcwIDAwOjAwOjAwIC0wMDAwCisrKyBXS1NwZWN1bGFyTGlnaHRp
bmdGaWx0ZXIubQk4IE5vdiAyMDA1IDAxOjM0OjE5IC0wMDAwCkBAIC0wLDAgKzEsOTQgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpbXBvcnQgIldLU3BlY3VsYXJMaWdodGluZ0ZpbHRlci5oIgor
CitzdGF0aWMgQ0lLZXJuZWwgKnNwZWN1bGFyTGlnaHRpbmdGaWx0ZXIgPSBuaWw7CisKK0BpbXBs
ZW1lbnRhdGlvbiBXS1NwZWN1bGFyTGlnaHRpbmdGaWx0ZXIKKworKyAodm9pZClpbml0aWFsaXpl
Cit7CisgICAgW0NJRmlsdGVyIHJlZ2lzdGVyRmlsdGVyTmFtZTpAIldLU3BlY3VsYXJMaWdodGlu
ZyIgIAorICAgICAgICBjb25zdHJ1Y3Rvcjogc2VsZgorICAgICAgICBjbGFzc0F0dHJpYnV0ZXM6
IFtOU0RpY3Rpb25hcnkgZGljdGlvbmFyeVdpdGhPYmplY3RzQW5kS2V5czoKKyAgICAgICAgIEAi
V2ViS2l0IFNwZWN1bGFyIExpZ2h0aW5nIiwga0NJQXR0cmlidXRlRmlsdGVyRGlzcGxheU5hbWUs
CisgICAgICAgIFtOU0FycmF5IGFycmF5V2l0aE9iamVjdHM6IGtDSUNhdGVnb3J5U3R5bGl6ZSwg
a0NJQ2F0ZWdvcnlWaWRlbywKKyAgICAgICAgICAgIGtDSUNhdGVnb3J5U3RpbGxJbWFnZSwga0NJ
Q2F0ZWdvcnlOb25TcXVhcmVQaXhlbHMsbmlsXSwga0NJQXR0cmlidXRlRmlsdGVyQ2F0ZWdvcmll
cywKKyAgICAgICAgW05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVjdHNBbmRLZXlzOgor
ICAgICAgICAgICAgW0NJQ29sb3IgY29sb3JXaXRoUmVkOjEuMCBncmVlbjoxLjAgYmx1ZToxLjAg
YWxwaGE6MS4wXSwKKyAgICAgICAgICAgICBrQ0lBdHRyaWJ1dGVEZWZhdWx0LCBuaWxdLCAgQCJp
bnB1dExpZ2h0aW5nQ29sb3IiLAorICAgICAgICBbTlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnlXaXRo
T2JqZWN0c0FuZEtleXM6CisgICAgICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aERvdWJsZTow
LjBdLCBrQ0lBdHRyaWJ1dGVNaW4sCisgICAgICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aERv
dWJsZToxLjBdLCBrQ0lBdHRyaWJ1dGVEZWZhdWx0LAorICAgICAgICAgICAgW05TTnVtYmVyIG51
bWJlcldpdGhEb3VibGU6MS4wXSwga0NJQXR0cmlidXRlSWRlbnRpdHksCisgICAgICAgICAgICBr
Q0lBdHRyaWJ1dGVUeXBlU2NhbGFyLCBrQ0lBdHRyaWJ1dGVUeXBlLAorICAgICAgICAgICAgbmls
XSwgQCJpbnB1dFN1cmZhY2VTY2FsZSIsCisgICAgICAgIFtOU0RpY3Rpb25hcnkgZGljdGlvbmFy
eVdpdGhPYmplY3RzQW5kS2V5czoKKyAgICAgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoRG91
YmxlOjAuMF0sIGtDSUF0dHJpYnV0ZU1pbiwKKyAgICAgICAgICAgIFtOU051bWJlciBudW1iZXJX
aXRoRG91YmxlOjEuMF0sIGtDSUF0dHJpYnV0ZURlZmF1bHQsCisgICAgICAgICAgICBbTlNOdW1i
ZXIgbnVtYmVyV2l0aERvdWJsZToxLjBdLCBrQ0lBdHRyaWJ1dGVJZGVudGl0eSwKKyAgICAgICAg
ICAgIGtDSUF0dHJpYnV0ZVR5cGVTY2FsYXIsIGtDSUF0dHJpYnV0ZVR5cGUsCisgICAgICAgICAg
ICBuaWxdLCBAImlucHV0U3BlY3VsYXJDb25zdGFudCIsCisgICAgICAgIFtOU0RpY3Rpb25hcnkg
ZGljdGlvbmFyeVdpdGhPYmplY3RzQW5kS2V5czoKKyAgICAgICAgICAgIFtOU051bWJlciBudW1i
ZXJXaXRoRG91YmxlOjAuMF0sIGtDSUF0dHJpYnV0ZU1pbiwKKyAgICAgICAgICAgIFtOU051bWJl
ciBudW1iZXJXaXRoRG91YmxlOjEyOC4wXSwga0NJQXR0cmlidXRlTWluLAorICAgICAgICAgICAg
W05TTnVtYmVyIG51bWJlcldpdGhEb3VibGU6MS4wXSwga0NJQXR0cmlidXRlRGVmYXVsdCwKKyAg
ICAgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoRG91YmxlOjEuMF0sIGtDSUF0dHJpYnV0ZUlk
ZW50aXR5LAorICAgICAgICAgICAga0NJQXR0cmlidXRlVHlwZVNjYWxhciwga0NJQXR0cmlidXRl
VHlwZSwKKyAgICAgICAgICAgIG5pbF0sIEAiaW5wdXRTcGVjdWxhckV4cG9uZW50IiwKKyAgICAg
ICAgW05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVjdHNBbmRLZXlzOgorICAgICAgICAg
ICAga0NJQXR0cmlidXRlVHlwZU9mZnNldCwga0NJQXR0cmlidXRlVHlwZSwKKyAgICAgICAgICAg
IG5pbF0sIEAiaW5wdXRLZXJuZWxVbml0TGVuZ3RoIiwKKyAgICAgICAgbmlsXV07Cit9CisKKysg
KENJRmlsdGVyICopZmlsdGVyV2l0aE5hbWU6KE5TU3RyaW5nICopbmFtZQoreworICAgIENJRmls
dGVyICpmaWx0ZXI7CisgICAgZmlsdGVyID0gW1tzZWxmIGFsbG9jXSBpbml0XTsKKyAgICByZXR1
cm4gW2ZpbHRlciBhdXRvcmVsZWFzZV07Cit9CisKKy0gKGlkKWluaXQKK3sKKyAgICBpZighc3Bl
Y3VsYXJMaWdodGluZ0ZpbHRlcikgeworLy8gICAgICAgIE5TQnVuZGxlICpidW5kbGUgPSBbTlNC
dW5kbGUgYnVuZGxlRm9yQ2xhc3M6W3NlbGYgY2xhc3NdXTsKKy8vICAgICAgICBOU1N0cmluZyAq
a2VybmVsRmlsZSA9IFtidW5kbGUgcGF0aEZvclJlc291cmNlOkAiV0tTcGVjdWxhckxpZ2h0aW5n
RmlsdGVyIiBvZlR5cGU6QCJjaWtlcm5lbCJdOworICAgICAgICBOU1N0cmluZyAqa2VybmVsRmls
ZSA9IEAiLi9TVkdTdXBwb3J0L2tjYW52YXMvZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL1dLU3BlY3Vs
YXJMaWdodGluZ0ZpbHRlci5jaWtlcm5lbCI7CisgICAgICAgIE5TU3RyaW5nICpjb2RlID0gW05T
U3RyaW5nIHN0cmluZ1dpdGhDb250ZW50c09mRmlsZTprZXJuZWxGaWxlXTsKKyAgICAgICAgTlNB
cnJheSAqa2VybmVscyA9IFtDSUtlcm5lbCBrZXJuZWxzV2l0aFN0cmluZzpjb2RlXTsKKyAgICAg
ICAgc3BlY3VsYXJMaWdodGluZ0ZpbHRlciA9IFtba2VybmVscyBvYmplY3RBdEluZGV4OjBdIHJl
dGFpbl07CisgICAgfQorICAgIHJldHVybiBbc3VwZXIgaW5pdF07Cit9CisKKy0gKENJSW1hZ2Ug
KilvdXRwdXRJbWFnZQoreworICAgIHJldHVybiBbc2VsZiBhcHBseTpzcGVjdWxhckxpZ2h0aW5n
RmlsdGVyLCBpbnB1dE5vcm1hbE1hcCwgaW5wdXRMaWdodFZlY3RvcnMsIGlucHV0TGlnaHRpbmdD
b2xvciwgaW5wdXRTdXJmYWNlU2NhbGUsIGlucHV0U3BlY3VsYXJDb25zdGFudCwKKyAgICAgICAg
aW5wdXRTcGVjdWxhckV4cG9uZW50LCBpbnB1dEtlcm5lbFVuaXRMZW5ndGhYLCBpbnB1dEtlcm5l
bFVuaXRMZW5ndGhZLCBuaWxdOworfQorCitAZW5kCkluZGV4OiBXS1Nwb3RMaWdodEZpbHRlci5j
aWtlcm5lbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09CmRpZmYgLU5wdSBXS1Nwb3RMaWdodEZpbHRlci5jaWtlcm5lbAot
LS0gV0tTcG90TGlnaHRGaWx0ZXIuY2lrZXJuZWwJMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMAor
KysgV0tTcG90TGlnaHRGaWx0ZXIuY2lrZXJuZWwJOCBOb3YgMjAwNSAwODozOTowMyAtMDAwMApA
QCAtMCwwICsxLDcgQEAKK2tlcm5lbCB2ZWM0IHNwb3RMaWdodEZpbHRlcihzYW1wbGVyIGxpZ2h0
VmVjdG9ycywgdmVjMyBsaWdodERpcmVjdGlvbiwgZmxvYXQgc3BlY3VsYXJFeHBvbmVudCwgZmxv
YXQgY29zQ3V0b2ZmQW5nbGUpCit7CisgICAgdmVjMiBwb3M9c2FtcGxlckNvb3JkKGxpZ2h0VmVj
dG9ycyk7CisgICAgdmVjMyBsID0gc2FtcGxlKGxpZ2h0VmVjdG9ycywgcG9zKS54eXo7CisgICAg
ZmxvYXQgbmw9ZG90KGxpZ2h0RGlyZWN0aW9uLGwpOworICAgIHJldHVybiB2ZWM0KGNvcyg5MCks
MCxubCwxLjApOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKSW5kZXg6IFdLU3BvdExp
Z2h0RmlsdGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQpkaWZmIC1OcHUgV0tTcG90TGlnaHRGaWx0ZXIuaAotLS0g
V0tTcG90TGlnaHRGaWx0ZXIuaAkxIEphbiAxOTcwIDAwOjAwOjAwIC0wMDAwCisrKyBXS1Nwb3RM
aWdodEZpbHRlci5oCTggTm92IDIwMDUgMDg6NDk6MDEgLTAwMDAKQEAgLTAsMCArMSwzNiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2ltcG9ydCA8UXVhcnR6Q29yZS9Db3JlSW1hZ2UuaD4KKwor
QGludGVyZmFjZSBXS1Nwb3RMaWdodEZpbHRlciA6IENJRmlsdGVyIHsKKyAgICBDSVZlY3RvciAq
aW5wdXRMaWdodFBvc2l0aW9uOworICAgIENJVmVjdG9yICppbnB1dExpZ2h0RGlyZWN0aW9uOwor
ICAgIE5TTnVtYmVyICppbnB1dFNwZWN1bGFyRXhwb25lbnQ7CisgICAgTlNOdW1iZXIgKmlucHV0
TGltaXRpbmdDb25lQW5nbGU7Cit9CisrIChDSUltYWdlICopb3V0cHV0SW1hZ2VXaXRoTGlnaHRW
ZWN0b3JzOihDSVNhbXBsZXIgKilsaWdodFZlY3RvcnMgYW5kTGlnaHREaXJlY3Rpb246KENJVmVj
dG9yICopIGxpZ2h0RGlyZWN0aW9uIGFuZFNwZWN1bGFyRXhwb25lbnQ6KGZsb2F0KSBzcGVjdWxh
ckV4cG9uZW50IGFuZENvc0N1dE9mZkFuZ2xlOiAoZmxvYXQpIGNvc2N1dG9mZjsKKworQGVuZApJ
bmRleDogV0tTcG90TGlnaHRGaWx0ZXIubQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CmRpZmYgLU5wdSBXS1Nwb3RMaWdo
dEZpbHRlci5tCi0tLSBXS1Nwb3RMaWdodEZpbHRlci5tCTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAw
MDAKKysrIFdLU3BvdExpZ2h0RmlsdGVyLm0JOCBOb3YgMjAwNSAwODo0MDowOCAtMDAwMApAQCAt
MCwwICsxLDkwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1IEFwcGxlIENvbXB1dGVyLCBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworIAorI2ltcG9ydCAiV0tTcG90TGlnaHRG
aWx0ZXIuaCIKKworc3RhdGljIENJS2VybmVsICpzcG90TGlnaHRGaWx0ZXIgPSBuaWw7CitzdGF0
aWMgV0tTcG90TGlnaHRGaWx0ZXIgKmluc3RhbmNlID0gbmlsOworCitAaW1wbGVtZW50YXRpb24g
V0tTcG90TGlnaHRGaWx0ZXIKKworKyAodm9pZClpbml0aWFsaXplCit7CisgICAgW0NJRmlsdGVy
IHJlZ2lzdGVyRmlsdGVyTmFtZTpAIldLU3BvdExpZ2h0IgorICAgICAgICBjb25zdHJ1Y3Rvcjog
c2VsZgorICAgICAgICBjbGFzc0F0dHJpYnV0ZXM6IFtOU0RpY3Rpb25hcnkgZGljdGlvbmFyeVdp
dGhPYmplY3RzQW5kS2V5czoKKyAgICAgICAgIEAiV2ViS2l0IFNwb3QgTGlnaHQiLCBrQ0lBdHRy
aWJ1dGVGaWx0ZXJEaXNwbGF5TmFtZSwKKyAgICAgICAgW05TQXJyYXkgYXJyYXlXaXRoT2JqZWN0
czoga0NJQ2F0ZWdvcnlTdHlsaXplLCBrQ0lDYXRlZ29yeVZpZGVvLAorICAgICAgICAgICAga0NJ
Q2F0ZWdvcnlTdGlsbEltYWdlLCBrQ0lDYXRlZ29yeU5vblNxdWFyZVBpeGVscyxuaWxdLCBrQ0lB
dHRyaWJ1dGVGaWx0ZXJDYXRlZ29yaWVzLAorICAgICAgICBbTlNEaWN0aW9uYXJ5IGRpY3Rpb25h
cnlXaXRoT2JqZWN0c0FuZEtleXM6CisgICAgICAgICAgICBrQ0lBdHRyaWJ1dGVUeXBlUG9zaXRp
b24zLCBrQ0lBdHRyaWJ1dGVUeXBlLAorICAgICAgICAgICAgbmlsXSwgQCJpbnB1dExpZ2h0UG9z
aXRpb24iLAorICAgICAgICBbTlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnlXaXRoT2JqZWN0c0FuZEtl
eXM6CisgICAgICAgICAgICBrQ0lBdHRyaWJ1dGVUeXBlUG9zaXRpb24zLCBrQ0lBdHRyaWJ1dGVU
eXBlLAorICAgICAgICAgICAgbmlsXSwgQCJpbnB1dExpZ2h0UG9pbnRzQXQiLAorICAgICAgICBb
TlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnlXaXRoT2JqZWN0c0FuZEtleXM6CisgICAgICAgICAgICBb
TlNOdW1iZXIgbnVtYmVyV2l0aERvdWJsZToxLjBdLCBrQ0lBdHRyaWJ1dGVEZWZhdWx0LAorICAg
ICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhEb3VibGU6MS4wXSwga0NJQXR0cmlidXRlSWRl
bnRpdHksCisgICAgICAgICAgICBrQ0lBdHRyaWJ1dGVUeXBlU2NhbGFyLCBrQ0lBdHRyaWJ1dGVU
eXBlLAorICAgICAgICAgICAgbmlsXSwgQCJpbnB1dFNwZWN1bGFyRXhwb25lbnQiLAorICAgICAg
ICBbTlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnlXaXRoT2JqZWN0c0FuZEtleXM6CisgICAgICAgICAg
ICBrQ0lBdHRyaWJ1dGVUeXBlQW5nbGUsIGtDSUF0dHJpYnV0ZVR5cGUsCisgICAgICAgICAgICBu
aWxdLCBAImlucHV0TGltaXRpbmdDb25lQW5nbGUiLAorICAgICAgICBuaWxdXTsKK30KKworKyAo
Q0lGaWx0ZXIgKilmaWx0ZXJXaXRoTmFtZTooTlNTdHJpbmcgKiluYW1lCit7CisgICAgQ0lGaWx0
ZXIgKmZpbHRlcjsKKyAgICBmaWx0ZXIgPSBbW3NlbGYgYWxsb2NdIGluaXRdOworICAgIHJldHVy
biBbZmlsdGVyIGF1dG9yZWxlYXNlXTsKK30KKworLSAoaWQpaW5pdAoreworICAgIGlmKCFzcG90
TGlnaHRGaWx0ZXIpIHsKKyAgICAgICAgLy9OU0J1bmRsZSAqYnVuZGxlID0gW05TQnVuZGxlIGJ1
bmRsZUZvckNsYXNzOltzZWxmIGNsYXNzXV07CisgICAgICAgIC8vTlNTdHJpbmcgKmtlcm5lbEZp
bGUgPSBbYnVuZGxlIHBhdGhGb3JSZXNvdXJjZTpAIldLU3BvdExpZ2h0RmlsdGVyIiBvZlR5cGU6
QCJjaWtlcm5lbCJdOworICAgICAgICBOU1N0cmluZyAqa2VybmVsRmlsZSA9IEAiLi9TVkdTdXBw
b3J0L2tjYW52YXMvZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL1dLU3BvdExpZ2h0RmlsdGVyLmNpa2Vy
bmVsIjsKKyAgICAgICAgTlNTdHJpbmcgKmNvZGUgPSBbTlNTdHJpbmcgc3RyaW5nV2l0aENvbnRl
bnRzT2ZGaWxlOmtlcm5lbEZpbGVdOworICAgICAgICBOU0FycmF5ICprZXJuZWxzID0gW0NJS2Vy
bmVsIGtlcm5lbHNXaXRoU3RyaW5nOmNvZGVdOworICAgICAgICBzcG90TGlnaHRGaWx0ZXIgPSBb
W2tlcm5lbHMgb2JqZWN0QXRJbmRleDowXSByZXRhaW5dOworICAgIH0KKyAgICByZXR1cm4gW3N1
cGVyIGluaXRdOworfQorCistIChDSUltYWdlICopb3V0cHV0SW1hZ2UKK3sKKyAgICByZXR1cm4g
W3NlbGYgYXBwbHk6c3BvdExpZ2h0RmlsdGVyLCBpbnB1dExpZ2h0UG9zaXRpb24sIG5pbF07Cit9
CisKKysgKENJSW1hZ2UgKilvdXRwdXRJbWFnZVdpdGhMaWdodFZlY3RvcnM6KENJU2FtcGxlciAq
KWxpZ2h0VmVjdG9ycyBhbmRMaWdodERpcmVjdGlvbjooQ0lWZWN0b3IgKikgbGlnaHREaXJlY3Rp
b24gYW5kU3BlY3VsYXJFeHBvbmVudDooZmxvYXQpIHNwZWN1bGFyRXhwb25lbnQgYW5kQ29zQ3V0
T2ZmQW5nbGU6IChmbG9hdCkgY29zY3V0b2ZmCit7CisgICAgW1dLU3BvdExpZ2h0RmlsdGVyIGlu
aXRpYWxpemVdOworICAgIGlmKCFpbnN0YW5jZSkgaW5zdGFuY2UgPSBbW1dLU3BvdExpZ2h0Rmls
dGVyIGFsbG9jXSBpbml0XTsKKyAgICByZXR1cm4gW2luc3RhbmNlIGFwcGx5OnNwb3RMaWdodEZp
bHRlciwgbGlnaHRWZWN0b3JzLCBsaWdodERpcmVjdGlvbiwgW05TTnVtYmVyIG51bWJlcldpdGhG
bG9hdDpzcGVjdWxhckV4cG9uZW50XSwgW05TTnVtYmVyIG51bWJlcldpdGhGbG9hdDpjb3NjdXRv
ZmZdICwgbmlsXTsKK30KKworQGVuZApJbmRleDogU1ZHQW5pbWF0ZWRDb2xvckltcGwuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KZGlmZiAtTnB1IFNWR0FuaW1hdGVkQ29sb3JJbXBsLmNwcAotLS0gU1ZHQW5pbWF0
ZWRDb2xvckltcGwuY3BwCTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAKKysrIFNWR0FuaW1hdGVk
Q29sb3JJbXBsLmNwcAk2IE5vdiAyMDA1IDE0OjM3OjM1IC0wMDAwCkBAIC0wLDAgKzEsMzUgQEAK
Ky8qCisgKiAgU1ZHQW5pbWF0ZWRDb2xvckltcGwuY3BwCisgKiAgV2ViQ29yZQorICoKKyAqICBD
cmVhdGVkIGJ5IE9saXZlciBvbiA2LzExLzA1LgorICogIENvcHlyaWdodCAyMDA1IE9saXZlciBI
dW50LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiU1ZHQW5pbWF0ZWRDb2xvckltcGwuaCIKKwordXNpbmcgbmFtZXNwYWNlIEtT
Vkc7CisKK1NWR0FuaW1hdGVkQ29sb3JJbXBsOjpTVkdBbmltYXRlZENvbG9ySW1wbChjb25zdCBT
VkdTdHlsZWRFbGVtZW50SW1wbCAqY29udGV4dCkKKzogU1ZHQW5pbWF0ZWRUZW1wbGF0ZTxTVkdD
b2xvckltcGw+KGNvbnRleHQpCit7Cit9CisKK1NWR0FuaW1hdGVkQ29sb3JJbXBsOjp+U1ZHQW5p
bWF0ZWRDb2xvckltcGwoKQoreworfQorCitTVkdDb2xvckltcGwgKlNWR0FuaW1hdGVkQ29sb3JJ
bXBsOjpjcmVhdGUoKSBjb25zdAoreworICAgIHJldHVybiBuZXcgU1ZHQ29sb3JJbXBsKCk7Cit9
CisKK3ZvaWQgU1ZHQW5pbWF0ZWRDb2xvckltcGw6OmFzc2lnbihTVkdDb2xvckltcGwgKnNyYywg
U1ZHQ29sb3JJbXBsICpkc3QpIGNvbnN0Cit7CisgICAgaWYoIXNyYyB8fCAhZHN0KQorICAgICAg
ICByZXR1cm47CisgICAgZHN0LT5zZXRDc3NUZXh0KHNyYy0+Y3NzVGV4dCgpKTsKK30KKwpJbmRl
eDogU1ZHQW5pbWF0ZWRDb2xvckltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CmRpZmYgLU5wdSBTVkdBbmltYXRl
ZENvbG9ySW1wbC5oCi0tLSBTVkdBbmltYXRlZENvbG9ySW1wbC5oCTEgSmFuIDE5NzAgMDA6MDA6
MDAgLTAwMDAKKysrIFNWR0FuaW1hdGVkQ29sb3JJbXBsLmgJNiBOb3YgMjAwNSAwOToxMjo0OCAt
MDAwMApAQCAtMCwwICsxLDMwIEBACisvKgorICogIFNWR0FuaW1hdGVkQ29sb3JJbXBsLmgKKyAq
ICBXZWJDb3JlCisgKgorICogIENyZWF0ZWQgYnkgT2xpdmVyIG9uIDYvMTEvMDUuCisgKiAgQ29w
eXJpZ2h0IDIwMDUgT2xpdmVyIEh1bnQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICovCisK
KyNpZm5kZWYgS1NWR19TVkdBbmltYXRlZENvbG9ySW1wbF9ICisjZGVmaW5lIEtTVkdfU1ZHQW5p
bWF0ZWRDb2xvckltcGxfSAorCisjaW5jbHVkZSAiU1ZHQ29sb3JJbXBsLmgiCisjaW5jbHVkZSAi
U1ZHQW5pbWF0ZWRUZW1wbGF0ZS5oIgorCituYW1lc3BhY2UgS1NWRworeworICAgIGNsYXNzIFNW
R0FuaW1hdGVkQ29sb3JJbXBsIDogcHVibGljIFNWR0FuaW1hdGVkVGVtcGxhdGU8U1ZHQ29sb3JJ
bXBsPgorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFNWR0FuaW1hdGVkQ29sb3JJbXBsKGNv
bnN0IFNWR1N0eWxlZEVsZW1lbnRJbXBsICpjb250ZXh0KTsKKyAgICAgICAgdmlydHVhbCB+U1ZH
QW5pbWF0ZWRDb2xvckltcGwoKTsKKyAgICAKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIHZpcnR1
YWwgU1ZHQ29sb3JJbXBsICpjcmVhdGUoKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCB2b2lkIGFz
c2lnbihTVkdDb2xvckltcGwgKnNyYywgU1ZHQ29sb3JJbXBsICpkc3QpIGNvbnN0OworICAgIH07
Cit9OworCisjZW5kaWYKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCkluZGV4OiBTVkdGRURp
ZmZ1c2VMaWdodGluZ0VsZW1lbnRJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CmRpZmYgLU5wdSBTVkdGRURp
ZmZ1c2VMaWdodGluZ0VsZW1lbnRJbXBsLmNwcAotLS0gU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVt
ZW50SW1wbC5jcHAJMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMAorKysgU1ZHRkVEaWZmdXNlTGln
aHRpbmdFbGVtZW50SW1wbC5jcHAJNyBOb3YgMjAwNSAxNDo0OToxNyAtMDAwMApAQCAtMCwwICsx
LDIyOCBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgTmlrb2xhcyBaaW1tZXJt
YW5uIDx3aWxkZm94QGtkZS5vcmc+CisgICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1IFJvYiBC
dWlzIDxidWlzQGtkZS5vcmc+CisKKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIHBy
b2plY3QKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRl
bXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAgICBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4K
KyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlIDxxc3RyaW5nbGlzdC5oPgorCisj
aW5jbHVkZSA8a2RvbS9jb3JlL0F0dHJJbXBsLmg+CisKKyNpbmNsdWRlIDxrY2FudmFzL0tDYW52
YXMuaD4KKyNpbmNsdWRlIDxrY2FudmFzL0tDYW52YXNSZWdpc3RyeS5oPgorI2luY2x1ZGUgPGtj
YW52YXMvS0NhbnZhc0ZpbHRlcnMuaD4KKyNpbmNsdWRlIDxrY2FudmFzL2RldmljZS9LUmVuZGVy
aW5nRGV2aWNlLmg+CisKKyNpbmNsdWRlICJzdmdhdHRycy5oIgorI2luY2x1ZGUgIlNWR0hlbHBl
ci5oIgorI2luY2x1ZGUgIlNWR1JlbmRlclN0eWxlLmgiCisjaW5jbHVkZSAiU1ZHQW5pbWF0ZWRD
b2xvckltcGwuaCIKKyNpbmNsdWRlICJTVkdBbmltYXRlZE51bWJlckltcGwuaCIKKyNpbmNsdWRl
ICJTVkdBbmltYXRlZFN0cmluZ0ltcGwuaCIKKyNpbmNsdWRlICJTVkdGRUxpZ2h0RWxlbWVudElt
cGwuaCIKKyNpbmNsdWRlICJTVkdET01JbXBsZW1lbnRhdGlvbkltcGwuaCIKKyNpbmNsdWRlICJT
VkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnRJbXBsLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBLU1ZH
OworCitTVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnRJbXBsOjpTVkdGRURpZmZ1c2VMaWdodGlu
Z0VsZW1lbnRJbXBsKEtET006OkRvY3VtZW50UHRyICpkb2MsIEtET006Ok5vZGVJbXBsOjpJZCBp
ZCwgS0RPTTo6RE9NU3RyaW5nSW1wbCAqcHJlZml4KSA6IAorU1ZHRmlsdGVyUHJpbWl0aXZlU3Rh
bmRhcmRBdHRyaWJ1dGVzSW1wbChkb2MsIGlkLCBwcmVmaXgpCit7CisgICAgbV9kaWZmdXNlQ29u
c3RhbnQgPSAwOworICAgIG1fc3VyZmFjZVNjYWxlID0gMDsKKyAgICBtX2ZpbHRlckVmZmVjdCA9
IDA7CisgICAgbV9rZXJuZWxVbml0TGVuZ3RoWCA9IDA7CisgICAgbV9rZXJuZWxVbml0TGVuZ3Ro
WSA9IDA7CisgICAgbV9saWdodGluZ0NvbG9yID0gMDsKKyAgICBtX2luMSA9IDA7Cit9CisKK1NW
R0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudEltcGw6On5TVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1l
bnRJbXBsKCkKK3sKKyAgICBpZihtX2luMSkKKyAgICAgICAgbV9pbjEtPmRlcmVmKCk7CisgICAg
aWYobV9kaWZmdXNlQ29uc3RhbnQpCisgICAgICAgIG1fZGlmZnVzZUNvbnN0YW50LT5kZXJlZigp
OworICAgIGlmKG1fc3VyZmFjZVNjYWxlKQorICAgICAgICBtX3N1cmZhY2VTY2FsZS0+ZGVyZWYo
KTsKKyAgICBpZihtX2tlcm5lbFVuaXRMZW5ndGhYKQorICAgICAgICBtX2tlcm5lbFVuaXRMZW5n
dGhYLT5kZXJlZigpOworICAgIGlmKG1fa2VybmVsVW5pdExlbmd0aFkpCisgICAgICAgIG1fa2Vy
bmVsVW5pdExlbmd0aFktPmRlcmVmKCk7CisgICAgaWYobV9saWdodGluZ0NvbG9yKQorICAgICAg
ICBtX2xpZ2h0aW5nQ29sb3ItPmRlcmVmKCk7Cit9CisKK1NWR0FuaW1hdGVkU3RyaW5nSW1wbCAq
U1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50SW1wbDo6aW4xKCkgY29uc3QKK3sKKyAgICBTVkdT
dHlsZWRFbGVtZW50SW1wbCAqZHVtbXkgPSAwOworICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdB
bmltYXRlZFN0cmluZ0ltcGw+KG1faW4xLCBkdW1teSk7Cit9CisKK1NWR0FuaW1hdGVkTnVtYmVy
SW1wbCAqU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50SW1wbDo6ZGlmZnVzZUNvbnN0YW50KCkg
Y29uc3QKK3sKKyAgICBTVkdTdHlsZWRFbGVtZW50SW1wbCAqZHVtbXkgPSAwOworICAgIHJldHVy
biBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZE51bWJlckltcGw+KG1fZGlmZnVzZUNvbnN0YW50LCBk
dW1teSk7Cit9CisKK1NWR0FuaW1hdGVkTnVtYmVySW1wbCAqU1ZHRkVEaWZmdXNlTGlnaHRpbmdF
bGVtZW50SW1wbDo6c3VyZmFjZVNjYWxlKCkgY29uc3QKK3sKKyAgICBTVkdTdHlsZWRFbGVtZW50
SW1wbCAqZHVtbXkgPSAwOworICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZE51bWJl
ckltcGw+KG1fc3VyZmFjZVNjYWxlLCBkdW1teSk7Cit9CisKK1NWR0FuaW1hdGVkTnVtYmVySW1w
bCAqU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50SW1wbDo6a2VybmVsVW5pdExlbmd0aFgoKSBj
b25zdAoreworICAgIFNWR1N0eWxlZEVsZW1lbnRJbXBsICpkdW1teSA9IDA7CisgICAgcmV0dXJu
IGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTnVtYmVySW1wbD4obV9rZXJuZWxVbml0TGVuZ3RoWCwg
ZHVtbXkpOworfQorCitTVkdBbmltYXRlZE51bWJlckltcGwgKlNWR0ZFRGlmZnVzZUxpZ2h0aW5n
RWxlbWVudEltcGw6Omtlcm5lbFVuaXRMZW5ndGhZKCkgY29uc3QKK3sKKyAgICBTVkdTdHlsZWRF
bGVtZW50SW1wbCAqZHVtbXkgPSAwOworICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRl
ZE51bWJlckltcGw+KG1fa2VybmVsVW5pdExlbmd0aFksIGR1bW15KTsKK30KKworU1ZHQW5pbWF0
ZWRDb2xvckltcGwgICpTVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnRJbXBsOjpsaWdodGluZ0Nv
bG9yKCkgY29uc3QKK3sKKyAgICBTVkdTdHlsZWRFbGVtZW50SW1wbCAqZHVtbXkgPSAwOworICAg
IHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZENvbG9ySW1wbD4obV9saWdodGluZ0NvbG9y
LCBkdW1teSk7Cit9CisKK3ZvaWQgU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50SW1wbDo6cGFy
c2VBdHRyaWJ1dGUoS0RPTTo6QXR0cmlidXRlSW1wbCAqYXR0cikKK3sKKyAgICBpbnQgaWQgPSAo
YXR0ci0+aWQoKSAmIE5vZGVJbXBsX0lkTG9jYWxNYXNrKTsKKyAgICBLRE9NOjpET01TdHJpbmcg
dmFsdWUoYXR0ci0+dmFsdWUoKSk7CisKKyAgICBzd2l0Y2goaWQpCisgICAgeworICAgICAgICBj
YXNlIEFUVFJfSU46CisgICAgICAgIHsKKyAgICAgICAgICAgIGluMSgpLT5zZXRCYXNlVmFsKHZh
bHVlLmhhbmRsZSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNh
c2UgQVRUUl9TVVJGQUNFU0NBTEU6CisgICAgICAgIHsKKyAgICAgICAgICAgIHN1cmZhY2VTY2Fs
ZSgpLT5zZXRCYXNlVmFsKHZhbHVlLnN0cmluZygpLnRvRG91YmxlKCkpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBBVFRSX0RJRkZVU0VDT05TVEFOVDoKKyAg
ICAgICAgeworICAgICAgICAgICAgZGlmZnVzZUNvbnN0YW50KCktPnNldEJhc2VWYWwodmFsdWUu
c3RyaW5nKCkudG9Eb3VibGUoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICBjYXNlIEFUVFJfS0VSTkVMVU5JVExFTkdUSDoKKyAgICAgICAgeworICAgICAgICAgICAg
UVN0cmluZ0xpc3QgbnVtYmVycyA9IFFTdHJpbmdMaXN0OjpzcGxpdCgnICcsIHZhbHVlLnN0cmlu
ZygpKTsKKyAgICAgICAgICAgIGtlcm5lbFVuaXRMZW5ndGhYKCktPnNldEJhc2VWYWwobnVtYmVy
c1swXS50b0RvdWJsZSgpKTsKKyAgICAgICAgICAgIGlmKG51bWJlcnMuY291bnQoKSA9PSAxKQor
ICAgICAgICAgICAgICAgIGtlcm5lbFVuaXRMZW5ndGhZKCktPnNldEJhc2VWYWwobnVtYmVyc1sw
XS50b0RvdWJsZSgpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBrZXJuZWxV
bml0TGVuZ3RoWSgpLT5zZXRCYXNlVmFsKG51bWJlcnNbMV0udG9Eb3VibGUoKSk7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgQVRUUl9M
SUdIVElOR19DT0xPUjoKKyAgICAgICAgeworICAgICAgICAgICAgLy9GSVhNRSB0aGlzIGlzIGJh
ZCwgcG90ZW50aWFsIG1lbW9yeSBsZWFrCisgICAgICAgICAgICBsaWdodGluZ0NvbG9yKCktPnNl
dEJhc2VWYWwobmV3IFNWR0NvbG9ySW1wbCh2YWx1ZS5oYW5kbGUoKSkpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgeworICAgICAgICAg
ICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzSW1wbDo6cGFyc2VBdHRyaWJ1
dGUoYXR0cik7CisgICAgICAgIH0KKyAgICB9OworfQorCitLQ2FudmFzSXRlbSAqU1ZHRkVEaWZm
dXNlTGlnaHRpbmdFbGVtZW50SW1wbDo6Y3JlYXRlQ2FudmFzSXRlbShLQ2FudmFzICpjYW52YXMs
IEtSZW5kZXJpbmdTdHlsZSAqc3R5bGUpIGNvbnN0Cit7CisgICAgbV9maWx0ZXJFZmZlY3QgPSBz
dGF0aWNfY2FzdDxLQ2FudmFzRkVEaWZmdXNlTGlnaHRpbmcgKj4oY2FudmFzLT5yZW5kZXJpbmdE
ZXZpY2UoKS0+Y3JlYXRlRmlsdGVyRWZmZWN0KEZFX0RJRkZVU0VfTElHSFRJTkcpKTsKKyAgICBt
X2ZpbHRlckVmZmVjdC0+c2V0SW4oS0RPTTo6RE9NU3RyaW5nKGluMSgpLT5iYXNlVmFsKCkpLnN0
cmluZygpKTsKKyAgICBzZXRTdGFuZGFyZEF0dHJpYnV0ZXMobV9maWx0ZXJFZmZlY3QpOworICAg
IG1fZmlsdGVyRWZmZWN0LT5zZXREaWZmdXNlQ29uc3RhbnQoKGRpZmZ1c2VDb25zdGFudCgpLT5i
YXNlVmFsKCkpKTsKKyAgICBtX2ZpbHRlckVmZmVjdC0+c2V0U3VyZmFjZVNjYWxlKChzdXJmYWNl
U2NhbGUoKS0+YmFzZVZhbCgpKSk7CisgICAgbV9maWx0ZXJFZmZlY3QtPnNldEtlcm5lbFVuaXRM
ZW5ndGhYKChrZXJuZWxVbml0TGVuZ3RoWCgpLT5iYXNlVmFsKCkpKTsKKyAgICBtX2ZpbHRlckVm
ZmVjdC0+c2V0S2VybmVsVW5pdExlbmd0aFkoKGtlcm5lbFVuaXRMZW5ndGhZKCktPmJhc2VWYWwo
KSkpOworICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRMaWdodGluZ0NvbG9yKGxpZ2h0aW5nQ29sb3Io
KS0+YmFzZVZhbCgpLT5jb2xvcigpKTsKKyAgICB1cGRhdGVMaWdodHMoKTsKKyAgICByZXR1cm4g
MDsKK30KKworS0NhbnZhc0ZpbHRlckVmZmVjdCAqU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50
SW1wbDo6ZmlsdGVyRWZmZWN0KCkgY29uc3QKK3sKKyAgICB1cGRhdGVMaWdodHMoKTsKKyAgICBy
ZXR1cm4gbV9maWx0ZXJFZmZlY3Q7Cit9CisKK3N0YXRpYyBLQ2FudmFzUG9pbnQzRiBtYWtlUG9p
bnQoZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgeikKK3sKKyAgICBLQ2FudmFzUG9pbnQzRiByZXM7
CisgICAgcmVzLnNldFgoeCk7CisgICAgcmVzLnNldFkoeSk7CisgICAgcmVzLnNldFooeik7Cisg
ICAgcmV0dXJuIHJlczsKK30KKworc3RhdGljIHZvaWQgbm9ybWFsaXNlKEtDYW52YXNQb2ludDNG
ICYgdmFsKQoreworICAgIGZsb2F0IGxlbmd0aCA9IHZhbC54KCkqdmFsLngoKSt2YWwueSgpKnZh
bC55KCkrdmFsLnooKSp2YWwueigpOworICAgIGxlbmd0aCA9IHNxcnQobGVuZ3RoKTsKKyAgICB2
YWwuc2V0WCh2YWwueCgpL2xlbmd0aCk7CisgICAgdmFsLnNldFkodmFsLnkoKS9sZW5ndGgpOwor
ICAgIHZhbC5zZXRaKHZhbC56KCkvbGVuZ3RoKTsKK30KKwordm9pZCBTVkdGRURpZmZ1c2VMaWdo
dGluZ0VsZW1lbnRJbXBsOjp1cGRhdGVMaWdodHMoKSBjb25zdAoreworICAgIGlmICghbV9maWx0
ZXJFZmZlY3QpCisgICAgICAgIHJldHVybjsKKyAgICBLRE9NOjpOb2RlSW1wbCAqbiA9IGZpcnN0
Q2hpbGQoKTsKKyAgICBpZighbikgcmV0dXJuOworICAgIEtDTGlnaHRTb3VyY2UgKiBsaWdodDsK
KyAgICBpZihuLT5pZCgpID09IElEX0ZFRElTVEFOVExJR0hUKQorICAgIHsgICAgICAKKyAgICAg
ICAgU1ZHRkVMaWdodEVsZW1lbnRJbXBsICpsaWdodE5vZGUgPSBzdGF0aWNfY2FzdDxTVkdGRUxp
Z2h0RWxlbWVudEltcGwgKj4obik7ICAKKyAgICAgICAgbGlnaHQgPSBuZXcgS0NEaXN0YW50TGln
aHRTb3VyY2UobGlnaHROb2RlLT5hemltdXRoKCktPmJhc2VWYWwoKSwgbGlnaHROb2RlLT5lbGV2
YXRpb24oKS0+YmFzZVZhbCgpKTsKKyAgICB9CisgICAgZWxzZSBpZihuLT5pZCgpID09IElEX0ZF
UE9JTlRMSUdIVCkKKyAgICB7CisgICAgICAgIFNWR0ZFTGlnaHRFbGVtZW50SW1wbCAqbGlnaHRO
b2RlID0gc3RhdGljX2Nhc3Q8U1ZHRkVMaWdodEVsZW1lbnRJbXBsICo+KG4pOyAgCisgICAgICAg
IEtDYW52YXNQb2ludDNGIHBvcyA9IG1ha2VQb2ludChsaWdodE5vZGUtPngoKS0+YmFzZVZhbCgp
LCBsaWdodE5vZGUtPnkoKS0+YmFzZVZhbCgpLCBsaWdodE5vZGUtPnooKS0+YmFzZVZhbCgpKTsK
KyAgICAgICAgbGlnaHQgPSBuZXcgS0NQb2ludExpZ2h0U291cmNlKHBvcyk7CisgICAgfQorICAg
IGVsc2UgaWYobi0+aWQoKSA9PSBJRF9GRVNQT1RMSUdIVCkKKyAgICB7CisgICAgICAgIFNWR0ZF
TGlnaHRFbGVtZW50SW1wbCAqbGlnaHROb2RlID0gc3RhdGljX2Nhc3Q8U1ZHRkVMaWdodEVsZW1l
bnRJbXBsICo+KG4pOyAgCisgICAgICAgIEtDYW52YXNQb2ludDNGIHBvcyA9IG1ha2VQb2ludChs
aWdodE5vZGUtPngoKS0+YmFzZVZhbCgpLCBsaWdodE5vZGUtPnkoKS0+YmFzZVZhbCgpLCBsaWdo
dE5vZGUtPnooKS0+YmFzZVZhbCgpKTsKKyAgICAgICAgLy9jb252ZXJ0IGxvb2tBdCB0byBhIGRp
cmVjdGlvbgorICAgICAgICBLQ2FudmFzUG9pbnQzRiBkaXJlY3Rpb24gPSBtYWtlUG9pbnQobGln
aHROb2RlLT5wb2ludHNBdFgoKS0+YmFzZVZhbCgpLXBvcy54KCksIAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGxpZ2h0Tm9kZS0+cG9pbnRzQXRZKCktPmJhc2VWYWwo
KS1wb3MueSgpLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWdo
dE5vZGUtPnBvaW50c0F0WigpLT5iYXNlVmFsKCktcG9zLnooKSk7CisgICAgICAgIG5vcm1hbGlz
ZShkaXJlY3Rpb24pOworICAgICAgICBsaWdodCA9IG5ldyBLQ1Nwb3RMaWdodFNvdXJjZShwb3Ms
IGRpcmVjdGlvbiwgbGlnaHROb2RlLT5zcGVjdWxhckV4cG9uZW50KCktPmJhc2VWYWwoKSwgbGln
aHROb2RlLT5saW1pdGluZ0NvbmVBbmdsZSgpLT5iYXNlVmFsKCkpOworICAgIH0KKyAgICBtX2Zp
bHRlckVmZmVjdC0+c2V0TGlnaHRTb3VyY2UobGlnaHQpOworfQorCit2b2lkIFNWR0ZFRGlmZnVz
ZUxpZ2h0aW5nRWxlbWVudEltcGw6OmNsb3NlKCkKK3sKKyAgICAvL3VwZGF0ZUxpZ2h0cygpOwor
fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKSW5kZXg6IFNWR0ZFRGlmZnVzZUxpZ2h0aW5n
RWxlbWVudEltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09CmRpZmYgLU5wdSBTVkdGRURpZmZ1c2VMaWdodGluZ0Vs
ZW1lbnRJbXBsLmgKLS0tIFNWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudEltcGwuaAkxIEphbiAx
OTcwIDAwOjAwOjAwIC0wMDAwCisrKyBTVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnRJbXBsLmgJ
NyBOb3YgMjAwNSAwNDo0NDozMCAtMDAwMApAQCAtMCwwICsxLDc2IEBACisvKgorICAgIENvcHly
aWdodCAoQykgMjAwNCwgMjAwNSBOaWtvbGFzIFppbW1lcm1hbm4gPHdpbGRmb3hAa2RlLm9yZz4K
KyAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKwor
ICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUgcHJvamVjdAorCisgICAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAg
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMw
LAorICAgIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorKi8KKworI2lmbmRlZiBLU1ZHX1NW
R0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudEltcGxfSAorI2RlZmluZSBLU1ZHX1NWR0ZFRGlmZnVz
ZUxpZ2h0aW5nRWxlbWVudEltcGxfSAorCisjaW5jbHVkZSAiU1ZHRmlsdGVyUHJpbWl0aXZlU3Rh
bmRhcmRBdHRyaWJ1dGVzSW1wbC5oIgorCitjbGFzcyBLQ2FudmFzRkVEaWZmdXNlTGlnaHRpbmc7
CitjbGFzcyBLQ2FudmFzRmlsdGVyRWZmZWN0OworCituYW1lc3BhY2UgS1NWRworeworICAgIGNs
YXNzIFNWR0FuaW1hdGVkTnVtYmVySW1wbDsKKyAgICBjbGFzcyBTVkdBbmltYXRlZFN0cmluZ0lt
cGw7CisgICAgY2xhc3MgU1ZHQW5pbWF0ZWRDb2xvckltcGw7CisgICAgCisgICAgY2xhc3MgU1ZH
RkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50SW1wbCA6IHB1YmxpYyBTVkdGaWx0ZXJQcmltaXRpdmVT
dGFuZGFyZEF0dHJpYnV0ZXNJbXBsCisgICAgeworICAgIHB1YmxpYzoKKyAgICAgICAgU1ZHRkVE
aWZmdXNlTGlnaHRpbmdFbGVtZW50SW1wbChLRE9NOjpEb2N1bWVudFB0ciAqZG9jLCBLRE9NOjpO
b2RlSW1wbDo6SWQgaWQsIEtET006OkRPTVN0cmluZ0ltcGwgKnByZWZpeCk7CisgICAgICAgIHZp
cnR1YWwgflNWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudEltcGwoKTsKKworICAgICAgICAvLyAn
U1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50JyBmdW5jdGlvbnMKKyAgICAgICAgU1ZHQW5pbWF0
ZWRTdHJpbmdJbXBsICppbjEoKSBjb25zdDsKKyAgICAgICAgU1ZHQW5pbWF0ZWROdW1iZXJJbXBs
ICpkaWZmdXNlQ29uc3RhbnQoKSBjb25zdDsKKyAgICAgICAgU1ZHQW5pbWF0ZWROdW1iZXJJbXBs
ICpzdXJmYWNlU2NhbGUoKSBjb25zdDsKKyAgICAgICAgU1ZHQW5pbWF0ZWROdW1iZXJJbXBsICpr
ZXJuZWxVbml0TGVuZ3RoWCgpIGNvbnN0OworICAgICAgICBTVkdBbmltYXRlZE51bWJlckltcGwg
Kmtlcm5lbFVuaXRMZW5ndGhZKCkgY29uc3Q7CisgICAgICAgIFNWR0FuaW1hdGVkQ29sb3JJbXBs
ICAqbGlnaHRpbmdDb2xvcigpIGNvbnN0OworCisgICAgICAgIC8vIERlcml2ZWQgZnJvbTogJ0Vs
ZW1lbnRJbXBsJworICAgICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VBdHRyaWJ1dGUoS0RPTTo6QXR0
cmlidXRlSW1wbCAqYXR0cik7CisKKyAgICAgICAgdmlydHVhbCBLQ2FudmFzSXRlbSAqY3JlYXRl
Q2FudmFzSXRlbShLQ2FudmFzICpjYW52YXMsIEtSZW5kZXJpbmdTdHlsZSAqc3R5bGUpIGNvbnN0
OworCisgICAgICAgIHZpcnR1YWwgYm9vbCBpbXBsZW1lbnRzQ2FudmFzSXRlbSgpIGNvbnN0IHsg
cmV0dXJuIHRydWU7IH0KKworICAgICAgICB2aXJ0dWFsIEtDYW52YXNGaWx0ZXJFZmZlY3QgKmZp
bHRlckVmZmVjdCgpIGNvbnN0OworICAgICAgICAKKyAgICAgICAgdmlydHVhbCB2b2lkIGNsb3Nl
KCk7Citwcml2YXRlOgorICAgICAgICBtdXRhYmxlIFNWR0FuaW1hdGVkU3RyaW5nSW1wbCAqbV9p
bjE7CisgICAgICAgIG11dGFibGUgU1ZHQW5pbWF0ZWROdW1iZXJJbXBsICptX2RpZmZ1c2VDb25z
dGFudDsKKyAgICAgICAgbXV0YWJsZSBTVkdBbmltYXRlZE51bWJlckltcGwgKm1fc3VyZmFjZVNj
YWxlOworICAgICAgICBtdXRhYmxlIFNWR0FuaW1hdGVkQ29sb3JJbXBsICAqbV9saWdodGluZ0Nv
bG9yOworICAgICAgICBtdXRhYmxlIFNWR0FuaW1hdGVkTnVtYmVySW1wbCAqbV9rZXJuZWxVbml0
TGVuZ3RoWDsKKyAgICAgICAgbXV0YWJsZSBTVkdBbmltYXRlZE51bWJlckltcGwgKm1fa2VybmVs
VW5pdExlbmd0aFk7CisgICAgICAgIC8vbmVlZCBvdGhlciBwcm9wZXJ0aWVzIGhlcmUuLi4KKyAg
ICAgICAgbXV0YWJsZSBLQ2FudmFzRkVEaWZmdXNlTGlnaHRpbmcgKm1fZmlsdGVyRWZmZWN0Owor
ICAgICAgICAKKyAgICAgICAgLy9saWdodCBtYW5hZ21lbnQKKyAgICAgICAgdm9pZCB1cGRhdGVM
aWdodHMoKSBjb25zdDsKKyAgICB9OworfTsKKworI2VuZGlmCkluZGV4OiBTVkdGRURpc3RhbnRM
aWdodEVsZW1lbnRJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CmRpZmYgLU5wdSBTVkdGRURpc3RhbnRMaWdo
dEVsZW1lbnRJbXBsLmNwcAotLS0gU1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50SW1wbC5jcHAJMSBK
YW4gMTk3MCAwMDowMDowMCAtMDAwMAorKysgU1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50SW1wbC5j
cHAJNyBOb3YgMjAwNSAxNDowNDoxMiAtMDAwMApAQCAtMCwwICsxLDIyIEBACisvKgorICogIFNW
R0ZFRGlzdGFudExpZ2h0RWxlbWVudEltcGwuY3BwCisgKiAgV2ViQ29yZQorICoKKyAqICBDcmVh
dGVkIGJ5IE9saXZlciBvbiA4LzExLzA1LgorICogIENvcHlyaWdodCAyMDA1IE9saXZlciBIdW50
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqLworCisjaW5jbHVkZSAiU1ZHRkVEaXN0YW50
TGlnaHRFbGVtZW50SW1wbC5oIgorCit1c2luZyBuYW1lc3BhY2UgS1NWRzsKKworU1ZHRkVEaXN0
YW50TGlnaHRFbGVtZW50SW1wbDo6U1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50SW1wbChLRE9NOjpE
b2N1bWVudFB0ciAqZG9jLCBLRE9NOjpOb2RlSW1wbDo6SWQgaWQsIEtET006OkRPTVN0cmluZ0lt
cGwgKnByZWZpeCkgOiAKK1NWR0ZFTGlnaHRFbGVtZW50SW1wbChkb2MsIGlkLCBwcmVmaXgpCit7
Cit9CisKK1NWR0ZFRGlzdGFudExpZ2h0RWxlbWVudEltcGw6On5TVkdGRURpc3RhbnRMaWdodEVs
ZW1lbnRJbXBsKCkKK3sKK30KKwpJbmRleDogU1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50SW1wbC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KZGlmZiAtTnB1IFNWR0ZFRGlzdGFudExpZ2h0RWxlbWVudEltcGwuaAotLS0g
U1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50SW1wbC5oCTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAK
KysrIFNWR0ZFRGlzdGFudExpZ2h0RWxlbWVudEltcGwuaAk3IE5vdiAyMDA1IDE0OjA0OjEyIC0w
MDAwCkBAIC0wLDAgKzEsMjUgQEAKKy8qCisgKiAgU1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50SW1w
bC5oCisgKiAgV2ViQ29yZQorICoKKyAqICBDcmVhdGVkIGJ5IE9saXZlciBvbiA4LzExLzA1Lgor
ICogIENvcHlyaWdodCAyMDA1IE9saXZlciBIdW50LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqLworCisjaWZuZGVmIEtTVkdfU1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50SW1wbF9ICisjZGVm
aW5lIEtTVkdfU1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50SW1wbF9ICisKKyNpbmNsdWRlICJTVkdG
RUxpZ2h0RWxlbWVudEltcGwuaCIKKworbmFtZXNwYWNlIEtTVkcKK3sKKyAgICBjbGFzcyBTVkdG
RURpc3RhbnRMaWdodEVsZW1lbnRJbXBsIDogcHVibGljIFNWR0ZFTGlnaHRFbGVtZW50SW1wbAor
eworcHVibGljOgorICAgIFNWR0ZFRGlzdGFudExpZ2h0RWxlbWVudEltcGwoS0RPTTo6RG9jdW1l
bnRQdHIgKmRvYywgS0RPTTo6Tm9kZUltcGw6OklkIGlkLCBLRE9NOjpET01TdHJpbmdJbXBsICpw
cmVmaXgpOworICAgIHZpcnR1YWwgflNWR0ZFRGlzdGFudExpZ2h0RWxlbWVudEltcGwoKTsKK307
Cit9OworCisjZW5kaWYKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCkluZGV4OiBTVkdGRUxp
Z2h0RWxlbWVudEltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtTnB1IFNWR0ZFTGlnaHRFbGVtZW50
SW1wbC5jcHAKLS0tIFNWR0ZFTGlnaHRFbGVtZW50SW1wbC5jcHAJMSBKYW4gMTk3MCAwMDowMDow
MCAtMDAwMAorKysgU1ZHRkVMaWdodEVsZW1lbnRJbXBsLmNwcAk3IE5vdiAyMDA1IDEyOjAwOjA2
IC0wMDAwCkBAIC0wLDAgKzEsMTg3IEBACisvL2NvcHlyaWdodCBmb28gZ29lcyBoZXJlCisKKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPHFzdHJpbmdsaXN0Lmg+CisKKyNpbmNsdWRl
IDxrZG9tL2NvcmUvQXR0ckltcGwuaD4KKworI2luY2x1ZGUgPGtjYW52YXMvS0NhbnZhcy5oPgor
I2luY2x1ZGUgPGtjYW52YXMvS0NhbnZhc1JlZ2lzdHJ5Lmg+CisjaW5jbHVkZSA8a2NhbnZhcy9L
Q2FudmFzUmVzb3VyY2VzLmg+CisjaW5jbHVkZSA8a2NhbnZhcy9LQ2FudmFzRmlsdGVycy5oPgor
I2luY2x1ZGUgPGtjYW52YXMvZGV2aWNlL0tSZW5kZXJpbmdEZXZpY2UuaD4KKworI2luY2x1ZGUg
InN2Z2F0dHJzLmgiCisjaW5jbHVkZSAiU1ZHSGVscGVyLmgiCisjaW5jbHVkZSAiU1ZHUmVuZGVy
U3R5bGUuaCIKKyNpbmNsdWRlICJTVkdGRUxpZ2h0RWxlbWVudEltcGwuaCIKKyNpbmNsdWRlICJT
VkdBbmltYXRlZFN0cmluZ0ltcGwuaCIKKyNpbmNsdWRlICJTVkdBbmltYXRlZE51bWJlckltcGwu
aCIKKyNpbmNsdWRlICJTVkdBbmltYXRlZEVudW1lcmF0aW9uSW1wbC5oIgorI2luY2x1ZGUgIlNW
R0RPTUltcGxlbWVudGF0aW9uSW1wbC5oIgorCit1c2luZyBuYW1lc3BhY2UgS1NWRzsKKworU1ZH
RkVMaWdodEVsZW1lbnRJbXBsOjpTVkdGRUxpZ2h0RWxlbWVudEltcGwoS0RPTTo6RG9jdW1lbnRQ
dHIgKmRvYywgS0RPTTo6Tm9kZUltcGw6OklkIGlkLCBLRE9NOjpET01TdHJpbmdJbXBsICpwcmVm
aXgpIDogCitTVkdFbGVtZW50SW1wbChkb2MsIGlkLCBwcmVmaXgpCit7CisgICAgbV9hemltdXRo
ID0gMDsKKyAgICBtX2VsZXZhdGlvbiA9IDA7CisgICAgbV94ID0gMDsKKyAgICBtX3kgPSAwOwor
ICAgIG1feiA9IDA7CisgICAgbV9wb2ludHNBdFggPSAwOworICAgIG1fcG9pbnRzQXRZID0gMDsK
KyAgICBtX3BvaW50c0F0WiA9IDA7CisgICAgbV9zcGVjdWxhckV4cG9uZW50ID0gMDsKKyAgICBt
X2xpbWl0aW5nQ29uZUFuZ2xlID0gMDsKK30KKworU1ZHRkVMaWdodEVsZW1lbnRJbXBsOjp+U1ZH
RkVMaWdodEVsZW1lbnRJbXBsKCkKK3sKKyAgICBpZihtX2F6aW11dGgpCisgICAgICAgIG1fYXpp
bXV0aC0+ZGVyZWYoKTsKKyAgICBpZihtX2VsZXZhdGlvbikKKyAgICAgICAgbV9lbGV2YXRpb24t
PmRlcmVmKCk7CisgICAgaWYobV94KQorICAgICAgICBtX3gtPmRlcmVmKCk7CisgICAgaWYobV95
KQorICAgICAgICBtX3ktPmRlcmVmKCk7CisgICAgaWYobV96KQorICAgICAgICBtX3otPmRlcmVm
KCk7CisgICAgaWYobV9wb2ludHNBdFgpCisgICAgICAgIG1fcG9pbnRzQXRYLT5kZXJlZigpOwor
ICAgIGlmKG1fcG9pbnRzQXRZKQorICAgICAgICBtX3BvaW50c0F0WS0+ZGVyZWYoKTsKKyAgICBp
ZihtX3BvaW50c0F0WikKKyAgICAgICAgbV9wb2ludHNBdFotPmRlcmVmKCk7CisgICAgaWYobV9z
cGVjdWxhckV4cG9uZW50KQorICAgICAgICBtX3NwZWN1bGFyRXhwb25lbnQtPmRlcmVmKCk7Cisg
ICAgaWYobV9saW1pdGluZ0NvbmVBbmdsZSkKKyAgICAgICAgbV9saW1pdGluZ0NvbmVBbmdsZS0+
ZGVyZWYoKTsKK30KKworU1ZHQW5pbWF0ZWROdW1iZXJJbXBsICpTVkdGRUxpZ2h0RWxlbWVudElt
cGw6OmF6aW11dGgoKSBjb25zdAoreworICAgIFNWR1N0eWxlZEVsZW1lbnRJbXBsICpkdW1teSA9
IDA7CisgICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTnVtYmVySW1wbD4obV9hemlt
dXRoLCBkdW1teSk7Cit9CisKK1NWR0FuaW1hdGVkTnVtYmVySW1wbCAqU1ZHRkVMaWdodEVsZW1l
bnRJbXBsOjplbGV2YXRpb24oKSBjb25zdAoreworICAgIFNWR1N0eWxlZEVsZW1lbnRJbXBsICpk
dW1teSA9IDA7CisgICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTnVtYmVySW1wbD4o
bV9lbGV2YXRpb24sIGR1bW15KTsKK30KKworU1ZHQW5pbWF0ZWROdW1iZXJJbXBsICpTVkdGRUxp
Z2h0RWxlbWVudEltcGw6OngoKSBjb25zdAoreworICAgIFNWR1N0eWxlZEVsZW1lbnRJbXBsICpk
dW1teSA9IDA7CisgICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTnVtYmVySW1wbD4o
bV94LCBkdW1teSk7Cit9CisKK1NWR0FuaW1hdGVkTnVtYmVySW1wbCAqU1ZHRkVMaWdodEVsZW1l
bnRJbXBsOjp5KCkgY29uc3QKK3sKKyAgICBTVkdTdHlsZWRFbGVtZW50SW1wbCAqZHVtbXkgPSAw
OworICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZE51bWJlckltcGw+KG1feSwgZHVt
bXkpOworfQorCisKK1NWR0FuaW1hdGVkTnVtYmVySW1wbCAqU1ZHRkVMaWdodEVsZW1lbnRJbXBs
Ojp6KCkgY29uc3QKK3sKKyAgICBTVkdTdHlsZWRFbGVtZW50SW1wbCAqZHVtbXkgPSAwOworICAg
IHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZE51bWJlckltcGw+KG1feiwgZHVtbXkpOwor
fQorCitTVkdBbmltYXRlZE51bWJlckltcGwgKlNWR0ZFTGlnaHRFbGVtZW50SW1wbDo6cG9pbnRz
QXRYKCkgY29uc3QKK3sKKyAgICBTVkdTdHlsZWRFbGVtZW50SW1wbCAqZHVtbXkgPSAwOworICAg
IHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZE51bWJlckltcGw+KG1fcG9pbnRzQXRYLCBk
dW1teSk7Cit9CisKK1NWR0FuaW1hdGVkTnVtYmVySW1wbCAqU1ZHRkVMaWdodEVsZW1lbnRJbXBs
Ojpwb2ludHNBdFkoKSBjb25zdAoreworICAgIFNWR1N0eWxlZEVsZW1lbnRJbXBsICpkdW1teSA9
IDA7CisgICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTnVtYmVySW1wbD4obV9wb2lu
dHNBdFksIGR1bW15KTsKK30KKworU1ZHQW5pbWF0ZWROdW1iZXJJbXBsICpTVkdGRUxpZ2h0RWxl
bWVudEltcGw6OnBvaW50c0F0WigpIGNvbnN0Cit7CisgICAgU1ZHU3R5bGVkRWxlbWVudEltcGwg
KmR1bW15ID0gMDsKKyAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWROdW1iZXJJbXBs
PihtX3BvaW50c0F0WiwgZHVtbXkpOworfQorCitTVkdBbmltYXRlZE51bWJlckltcGwgKlNWR0ZF
TGlnaHRFbGVtZW50SW1wbDo6c3BlY3VsYXJFeHBvbmVudCgpIGNvbnN0Cit7CisgICAgU1ZHU3R5
bGVkRWxlbWVudEltcGwgKmR1bW15ID0gMDsKKyAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5p
bWF0ZWROdW1iZXJJbXBsPihtX3NwZWN1bGFyRXhwb25lbnQsIGR1bW15KTsKK30KKworU1ZHQW5p
bWF0ZWROdW1iZXJJbXBsICpTVkdGRUxpZ2h0RWxlbWVudEltcGw6OmxpbWl0aW5nQ29uZUFuZ2xl
KCkgY29uc3QKK3sKKyAgICBTVkdTdHlsZWRFbGVtZW50SW1wbCAqZHVtbXkgPSAwOworICAgIHJl
dHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZE51bWJlckltcGw+KG1fbGltaXRpbmdDb25lQW5n
bGUsIGR1bW15KTsKK30KKwordm9pZCBTVkdGRUxpZ2h0RWxlbWVudEltcGw6OnBhcnNlQXR0cmli
dXRlKEtET006OkF0dHJpYnV0ZUltcGwgKmF0dHIpCit7CisgICAgaW50IGlkID0gKGF0dHItPmlk
KCkgJiBOb2RlSW1wbF9JZExvY2FsTWFzayk7CisgICAgS0RPTTo6RE9NU3RyaW5nIHZhbHVlKGF0
dHItPnZhbHVlKCkpOworICAgIHN3aXRjaChpZCkKKyAgICB7CisgICAgICAgIGNhc2UgQVRUUl9B
WklNVVRIOgorICAgICAgICB7CisgICAgICAgICAgICBhemltdXRoKCktPnNldEJhc2VWYWwodmFs
dWUuc3RyaW5nKCkudG9Eb3VibGUoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgICAgICBjYXNlIEFUVFJfRUxFVkFUSU9OOgorICAgICAgICB7CisgICAgICAgICAgICBlbGV2
YXRpb24oKS0+c2V0QmFzZVZhbCh2YWx1ZS5zdHJpbmcoKS50b0RvdWJsZSgpKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgQVRUUl9YOgorICAgICAgICB7Cisg
ICAgICAgICAgICB4KCktPnNldEJhc2VWYWwodmFsdWUuc3RyaW5nKCkudG9Eb3VibGUoKSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEFUVFJfWToKKyAgICAg
ICAgeworICAgICAgICAgICAgeSgpLT5zZXRCYXNlVmFsKHZhbHVlLnN0cmluZygpLnRvRG91Ymxl
KCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBBVFRSX1o6
CisgICAgICAgIHsKKyAgICAgICAgICAgIHooKS0+c2V0QmFzZVZhbCh2YWx1ZS5zdHJpbmcoKS50
b0RvdWJsZSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ug
QVRUUl9QT0lOVFNBVFg6CisgICAgICAgIHsKKyAgICAgICAgICAgIHBvaW50c0F0WCgpLT5zZXRC
YXNlVmFsKHZhbHVlLnN0cmluZygpLnRvRG91YmxlKCkpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICAgICAgY2FzZSBBVFRSX1BPSU5UU0FUWToKKyAgICAgICAgeworICAgICAg
ICAgICAgcG9pbnRzQXRZKCktPnNldEJhc2VWYWwodmFsdWUuc3RyaW5nKCkudG9Eb3VibGUoKSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEFUVFJfUE9JTlRT
QVRaOgorICAgICAgICB7CisgICAgICAgICAgICBwb2ludHNBdFooKS0+c2V0QmFzZVZhbCh2YWx1
ZS5zdHJpbmcoKS50b0RvdWJsZSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgICAgIGNhc2UgQVRUUl9TUEVDVUxBUkVYUE9ORU5UOgorICAgICAgICB7CisgICAgICAgICAg
ICBzcGVjdWxhckV4cG9uZW50KCktPnNldEJhc2VWYWwodmFsdWUuc3RyaW5nKCkudG9Eb3VibGUo
KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEFUVFJfTElN
SVRJTkdDT05FQU5HTEU6CisgICAgICAgIHsKKyAgICAgICAgICAgIGxpbWl0aW5nQ29uZUFuZ2xl
KCktPnNldEJhc2VWYWwodmFsdWUuc3RyaW5nKCkudG9Eb3VibGUoKSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgICAgICBkZWZhdWx0OgorICAgICAgICB7CisgICAgICAgICAg
ICBTVkdFbGVtZW50SW1wbDo6cGFyc2VBdHRyaWJ1dGUoYXR0cik7CisgICAgICAgIH0KKyAgICB9
OworfQpJbmRleDogU1ZHRkVMaWdodEVsZW1lbnRJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpkaWZmIC1OcHUg
U1ZHRkVMaWdodEVsZW1lbnRJbXBsLmgKLS0tIFNWR0ZFTGlnaHRFbGVtZW50SW1wbC5oCTEgSmFu
IDE5NzAgMDA6MDA6MDAgLTAwMDAKKysrIFNWR0ZFTGlnaHRFbGVtZW50SW1wbC5oCTcgTm92IDIw
MDUgMTI6MDA6MDMgLTAwMDAKQEAgLTAsMCArMSw1MCBAQAorLy9wcmVzdW1hYmx5IG5lZWQgYSBj
b3B5cmlnaHQgbm90aWNlIG9mIHNvbWVraW5kIGhlcmUKKworI2lmbmRlZiBLU1ZHX1NWR0ZFTGln
aHRFbGVtZW50SW1wbF9ICisjZGVmaW5lIEtTVkdfU1ZHRkVMaWdodEVsZW1lbnRJbXBsX0gKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTVkdFbGVtZW50SW1wbC5oIgorCituYW1lc3Bh
Y2UgS1NWRworeworICAgIGNsYXNzIFNWR0FuaW1hdGVkTnVtYmVySW1wbDsKKyAgICBjbGFzcyBT
VkdBbmltYXRlZE51bWJlckxpc3RJbXBsOworICAgIGNsYXNzIFNWR0FuaW1hdGVkRW51bWVyYXRp
b25JbXBsOworICAgIAorICAgIGNsYXNzIFNWR0ZFTGlnaHRFbGVtZW50SW1wbCA6IHB1YmxpYyBT
VkdFbGVtZW50SW1wbAorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFNWR0ZFTGlnaHRFbGVt
ZW50SW1wbChLRE9NOjpEb2N1bWVudFB0ciAqZG9jLCBLRE9NOjpOb2RlSW1wbDo6SWQgaWQsIEtE
T006OkRPTVN0cmluZ0ltcGwgKnByZWZpeCk7CisgICAgICAgIHZpcnR1YWwgflNWR0ZFTGlnaHRF
bGVtZW50SW1wbCgpOworICAgICAgICAKKyAgICAgICAgLy8gJ1NWR0NvbXBvbmVudFRyYW5zZmVy
RnVuY3Rpb25FbGVtZW50JyBmdW5jdGlvbnMKKyAgICAgICAgU1ZHQW5pbWF0ZWROdW1iZXJJbXBs
ICphemltdXRoKCkgY29uc3Q7CisgICAgICAgIFNWR0FuaW1hdGVkTnVtYmVySW1wbCAqZWxldmF0
aW9uKCkgY29uc3Q7CisgICAgICAgIFNWR0FuaW1hdGVkTnVtYmVySW1wbCAqeCgpIGNvbnN0Owor
ICAgICAgICBTVkdBbmltYXRlZE51bWJlckltcGwgKnkoKSBjb25zdDsKKyAgICAgICAgU1ZHQW5p
bWF0ZWROdW1iZXJJbXBsICp6KCkgY29uc3Q7CisgICAgICAgIFNWR0FuaW1hdGVkTnVtYmVySW1w
bCAqcG9pbnRzQXRYKCkgY29uc3Q7CisgICAgICAgIFNWR0FuaW1hdGVkTnVtYmVySW1wbCAqcG9p
bnRzQXRZKCkgY29uc3Q7CisgICAgICAgIFNWR0FuaW1hdGVkTnVtYmVySW1wbCAqcG9pbnRzQXRa
KCkgY29uc3Q7CisgICAgICAgIFNWR0FuaW1hdGVkTnVtYmVySW1wbCAqc3BlY3VsYXJFeHBvbmVu
dCgpIGNvbnN0OworICAgICAgICBTVkdBbmltYXRlZE51bWJlckltcGwgKmxpbWl0aW5nQ29uZUFu
Z2xlKCkgY29uc3Q7CisgICAgICAgIAorICAgICAgICAvLyBEZXJpdmVkIGZyb206ICdFbGVtZW50
SW1wbCcKKyAgICAgICAgdm9pZCBwYXJzZUF0dHJpYnV0ZShLRE9NOjpBdHRyaWJ1dGVJbXBsICph
dHRyKTsKKyAgICAgICAgCisgICAgcHJpdmF0ZToKKyAgICAgICAgbXV0YWJsZSBTVkdBbmltYXRl
ZE51bWJlckltcGwgKm1fYXppbXV0aDsKKyAgICAgICAgbXV0YWJsZSBTVkdBbmltYXRlZE51bWJl
ckltcGwgKm1fZWxldmF0aW9uOworICAgICAgICBtdXRhYmxlIFNWR0FuaW1hdGVkTnVtYmVySW1w
bCAqbV94OworICAgICAgICBtdXRhYmxlIFNWR0FuaW1hdGVkTnVtYmVySW1wbCAqbV95OworICAg
ICAgICBtdXRhYmxlIFNWR0FuaW1hdGVkTnVtYmVySW1wbCAqbV96OworICAgICAgICBtdXRhYmxl
IFNWR0FuaW1hdGVkTnVtYmVySW1wbCAqbV9wb2ludHNBdFg7CisgICAgICAgIG11dGFibGUgU1ZH
QW5pbWF0ZWROdW1iZXJJbXBsICptX3BvaW50c0F0WTsKKyAgICAgICAgbXV0YWJsZSBTVkdBbmlt
YXRlZE51bWJlckltcGwgKm1fcG9pbnRzQXRaOworICAgICAgICBtdXRhYmxlIFNWR0FuaW1hdGVk
TnVtYmVySW1wbCAqbV9zcGVjdWxhckV4cG9uZW50OworICAgICAgICBtdXRhYmxlIFNWR0FuaW1h
dGVkTnVtYmVySW1wbCAqbV9saW1pdGluZ0NvbmVBbmdsZTsKKyAgICAgICAgCisgICAgfTsKK307
CisKKyNlbmRpZgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKSW5kZXg6IFNWR0ZFUG9pbnRM
aWdodEVsZW1lbnRJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CmRpZmYgLU5wdSBTVkdGRVBvaW50TGlnaHRF
bGVtZW50SW1wbC5jcHAKLS0tIFNWR0ZFUG9pbnRMaWdodEVsZW1lbnRJbXBsLmNwcAkxIEphbiAx
OTcwIDAwOjAwOjAwIC0wMDAwCisrKyBTVkdGRVBvaW50TGlnaHRFbGVtZW50SW1wbC5jcHAJMyBO
b3YgMjAwNSAxMTo0NjowOCAtMDAwMApAQCAtMCwwICsxLDE1IEBACisvLyBjb3B5cmlnaHQgZm9v
IGhlcmUKKworI2luY2x1ZGUgIlNWR0ZFUG9pbnRMaWdodEVsZW1lbnRJbXBsLmgiCisKK3VzaW5n
IG5hbWVzcGFjZSBLU1ZHOworCitTVkdGRVBvaW50TGlnaHRFbGVtZW50SW1wbDo6U1ZHRkVQb2lu
dExpZ2h0RWxlbWVudEltcGwoS0RPTTo6RG9jdW1lbnRQdHIgKmRvYywgS0RPTTo6Tm9kZUltcGw6
OklkIGlkLCBLRE9NOjpET01TdHJpbmdJbXBsICpwcmVmaXgpIDogCitTVkdGRUxpZ2h0RWxlbWVu
dEltcGwoZG9jLCBpZCwgcHJlZml4KQoreworfQorCitTVkdGRVBvaW50TGlnaHRFbGVtZW50SW1w
bDo6flNWR0ZFUG9pbnRMaWdodEVsZW1lbnRJbXBsKCkKK3sKK30KKwpJbmRleDogU1ZHRkVQb2lu
dExpZ2h0RWxlbWVudEltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CmRpZmYgLU5wdSBTVkdGRVBvaW50TGlnaHRF
bGVtZW50SW1wbC5oCi0tLSBTVkdGRVBvaW50TGlnaHRFbGVtZW50SW1wbC5oCTEgSmFuIDE5NzAg
MDA6MDA6MDAgLTAwMDAKKysrIFNWR0ZFUG9pbnRMaWdodEVsZW1lbnRJbXBsLmgJNiBOb3YgMjAw
NSAwNToyODowMCAtMDAwMApAQCAtMCwwICsxLDE4IEBACisvL3ByZXN1bWFibHkgbmVlZCBhIGNv
cHlyaWdodCBub3RpY2Ugb2Ygc29tZWtpbmQgaGVyZQorCisjaWZuZGVmIEtTVkdfU1ZHRkVQb2lu
dExpZ2h0RWxlbWVudEltcGxfSAorI2RlZmluZSBLU1ZHX1NWR0ZFUG9pbnRMaWdodEVsZW1lbnRJ
bXBsX0gKKworI2luY2x1ZGUgIlNWR0ZFTGlnaHRFbGVtZW50SW1wbC5oIgorCituYW1lc3BhY2Ug
S1NWRworeworICAgIGNsYXNzIFNWR0ZFUG9pbnRMaWdodEVsZW1lbnRJbXBsIDogcHVibGljIFNW
R0ZFTGlnaHRFbGVtZW50SW1wbAorICAgIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICBTVkdG
RVBvaW50TGlnaHRFbGVtZW50SW1wbChLRE9NOjpEb2N1bWVudFB0ciAqZG9jLCBLRE9NOjpOb2Rl
SW1wbDo6SWQgaWQsIEtET006OkRPTVN0cmluZ0ltcGwgKnByZWZpeCk7CisgICAgICAgIHZpcnR1
YWwgflNWR0ZFUG9pbnRMaWdodEVsZW1lbnRJbXBsKCk7CisgICAgfTsKK307CisKKyNlbmRpZgpc
IE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKSW5kZXg6IFNWR0ZFU3BlY3VsYXJMaWdodGluZ0Vs
ZW1lbnRJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09CmRpZmYgLU5wdSBTVkdGRVNwZWN1bGFyTGlnaHRpbmdF
bGVtZW50SW1wbC5jcHAKLS0tIFNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnRJbXBsLmNwcAkx
IEphbiAxOTcwIDAwOjAwOjAwIC0wMDAwCisrKyBTVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50
SW1wbC5jcHAJOCBOb3YgMjAwNSAwMzowNDowOSAtMDAwMApAQCAtMCwwICsxLDIzMCBAQAorLyoK
KyAqICBTVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50SW1wbC5jcHAKKyAqICBXZWJDb3JlCisg
KgorICogIENyZWF0ZWQgYnkgT2xpdmVyIG9uIDgvMTEvMDUuCisgKiAgQ29weXJpZ2h0IDIwMDUg
T2xpdmVyIEh1bnQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlIDxxc3RyaW5nbGlzdC5oPgorCisjaW5jbHVkZSA8a2RvbS9jb3Jl
L0F0dHJJbXBsLmg+CisKKyNpbmNsdWRlIDxrY2FudmFzL0tDYW52YXMuaD4KKyNpbmNsdWRlIDxr
Y2FudmFzL0tDYW52YXNSZWdpc3RyeS5oPgorI2luY2x1ZGUgPGtjYW52YXMvS0NhbnZhc0ZpbHRl
cnMuaD4KKyNpbmNsdWRlIDxrY2FudmFzL2RldmljZS9LUmVuZGVyaW5nRGV2aWNlLmg+CisKKyNp
bmNsdWRlICJzdmdhdHRycy5oIgorI2luY2x1ZGUgIlNWR0hlbHBlci5oIgorI2luY2x1ZGUgIlNW
R1JlbmRlclN0eWxlLmgiCisjaW5jbHVkZSAiU1ZHQW5pbWF0ZWRDb2xvckltcGwuaCIKKyNpbmNs
dWRlICJTVkdBbmltYXRlZE51bWJlckltcGwuaCIKKyNpbmNsdWRlICJTVkdBbmltYXRlZFN0cmlu
Z0ltcGwuaCIKKyNpbmNsdWRlICJTVkdGRUxpZ2h0RWxlbWVudEltcGwuaCIKKyNpbmNsdWRlICJT
VkdET01JbXBsZW1lbnRhdGlvbkltcGwuaCIKKyNpbmNsdWRlICJTVkdGRVNwZWN1bGFyTGlnaHRp
bmdFbGVtZW50SW1wbC5oIgorCisKK3VzaW5nIG5hbWVzcGFjZSBLU1ZHOworCitTVkdGRVNwZWN1
bGFyTGlnaHRpbmdFbGVtZW50SW1wbDo6U1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudEltcGwo
S0RPTTo6RG9jdW1lbnRQdHIgKmRvYywgS0RPTTo6Tm9kZUltcGw6OklkIGlkLCBLRE9NOjpET01T
dHJpbmdJbXBsICpwcmVmaXgpIDogCitTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0
ZXNJbXBsKGRvYywgaWQsIHByZWZpeCkKK3sKKyAgICBtX3NwZWN1bGFyQ29uc3RhbnQgPSAwOwor
ICAgIG1fc3BlY3VsYXJFeHBvbmVudCA9IDA7CisgICAgbV9zdXJmYWNlU2NhbGUgPSAwOworICAg
IG1fZmlsdGVyRWZmZWN0ID0gMDsKKyAgICBtX2tlcm5lbFVuaXRMZW5ndGhYID0gMDsKKyAgICBt
X2tlcm5lbFVuaXRMZW5ndGhZID0gMDsKKyAgICBtX2xpZ2h0aW5nQ29sb3IgPSAwOworICAgIG1f
aW4xID0gMDsKK30KKworU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudEltcGw6On5TVkdGRVNw
ZWN1bGFyTGlnaHRpbmdFbGVtZW50SW1wbCgpCit7CisgICAgaWYobV9pbjEpCisgICAgICAgIG1f
aW4xLT5kZXJlZigpOworICAgIGlmKG1fc3BlY3VsYXJFeHBvbmVudCkKKyAgICAgICAgbV9zcGVj
dWxhckV4cG9uZW50LT5kZXJlZigpOworICAgIGlmKG1fc3BlY3VsYXJDb25zdGFudCkKKyAgICAg
ICAgbV9zcGVjdWxhckNvbnN0YW50LT5kZXJlZigpOworICAgIGlmKG1fc3VyZmFjZVNjYWxlKQor
ICAgICAgICBtX3N1cmZhY2VTY2FsZS0+ZGVyZWYoKTsKKyAgICBpZihtX2tlcm5lbFVuaXRMZW5n
dGhYKQorICAgICAgICBtX2tlcm5lbFVuaXRMZW5ndGhYLT5kZXJlZigpOworICAgIGlmKG1fa2Vy
bmVsVW5pdExlbmd0aFkpCisgICAgICAgIG1fa2VybmVsVW5pdExlbmd0aFktPmRlcmVmKCk7Cisg
ICAgaWYobV9saWdodGluZ0NvbG9yKQorICAgICAgICBtX2xpZ2h0aW5nQ29sb3ItPmRlcmVmKCk7
Cit9CisKK1NWR0FuaW1hdGVkU3RyaW5nSW1wbCAqU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVu
dEltcGw6OmluMSgpIGNvbnN0Cit7CisgICAgU1ZHU3R5bGVkRWxlbWVudEltcGwgKmR1bW15ID0g
MDsKKyAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWRTdHJpbmdJbXBsPihtX2luMSwg
ZHVtbXkpOworfQorCitTVkdBbmltYXRlZE51bWJlckltcGwgKlNWR0ZFU3BlY3VsYXJMaWdodGlu
Z0VsZW1lbnRJbXBsOjpzcGVjdWxhckNvbnN0YW50KCkgY29uc3QKK3sKKyAgICBTVkdTdHlsZWRF
bGVtZW50SW1wbCAqZHVtbXkgPSAwOworICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRl
ZE51bWJlckltcGw+KG1fc3BlY3VsYXJDb25zdGFudCwgZHVtbXkpOworfQorCitTVkdBbmltYXRl
ZE51bWJlckltcGwgKlNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnRJbXBsOjpzcGVjdWxhckV4
cG9uZW50KCkgY29uc3QKK3sKKyAgICBTVkdTdHlsZWRFbGVtZW50SW1wbCAqZHVtbXkgPSAwOwor
ICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZE51bWJlckltcGw+KG1fc3BlY3VsYXJF
eHBvbmVudCwgZHVtbXkpOworfQorCitTVkdBbmltYXRlZE51bWJlckltcGwgKlNWR0ZFU3BlY3Vs
YXJMaWdodGluZ0VsZW1lbnRJbXBsOjpzdXJmYWNlU2NhbGUoKSBjb25zdAoreworICAgIFNWR1N0
eWxlZEVsZW1lbnRJbXBsICpkdW1teSA9IDA7CisgICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0Fu
aW1hdGVkTnVtYmVySW1wbD4obV9zdXJmYWNlU2NhbGUsIGR1bW15KTsKK30KKworU1ZHQW5pbWF0
ZWROdW1iZXJJbXBsICpTVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50SW1wbDo6a2VybmVsVW5p
dExlbmd0aFgoKSBjb25zdAoreworICAgIFNWR1N0eWxlZEVsZW1lbnRJbXBsICpkdW1teSA9IDA7
CisgICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTnVtYmVySW1wbD4obV9rZXJuZWxV
bml0TGVuZ3RoWCwgZHVtbXkpOworfQorCitTVkdBbmltYXRlZE51bWJlckltcGwgKlNWR0ZFU3Bl
Y3VsYXJMaWdodGluZ0VsZW1lbnRJbXBsOjprZXJuZWxVbml0TGVuZ3RoWSgpIGNvbnN0Cit7Cisg
ICAgU1ZHU3R5bGVkRWxlbWVudEltcGwgKmR1bW15ID0gMDsKKyAgICByZXR1cm4gbGF6eV9jcmVh
dGU8U1ZHQW5pbWF0ZWROdW1iZXJJbXBsPihtX2tlcm5lbFVuaXRMZW5ndGhZLCBkdW1teSk7Cit9
CisKK1NWR0FuaW1hdGVkQ29sb3JJbXBsICAqU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudElt
cGw6OmxpZ2h0aW5nQ29sb3IoKSBjb25zdAoreworICAgIFNWR1N0eWxlZEVsZW1lbnRJbXBsICpk
dW1teSA9IDA7CisgICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkQ29sb3JJbXBsPiht
X2xpZ2h0aW5nQ29sb3IsIGR1bW15KTsKK30KKwordm9pZCBTVkdGRVNwZWN1bGFyTGlnaHRpbmdF
bGVtZW50SW1wbDo6cGFyc2VBdHRyaWJ1dGUoS0RPTTo6QXR0cmlidXRlSW1wbCAqYXR0cikKK3sK
KyAgICBpbnQgaWQgPSAoYXR0ci0+aWQoKSAmIE5vZGVJbXBsX0lkTG9jYWxNYXNrKTsKKyAgICBL
RE9NOjpET01TdHJpbmcgdmFsdWUoYXR0ci0+dmFsdWUoKSk7CisgICAgCisgICAgc3dpdGNoKGlk
KQorICAgIHsKKyAgICAgICAgY2FzZSBBVFRSX0lOOgorICAgICAgICB7CisgICAgICAgICAgICBp
bjEoKS0+c2V0QmFzZVZhbCh2YWx1ZS5oYW5kbGUoKSk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgICAgICBjYXNlIEFUVFJfU1VSRkFDRVNDQUxFOgorICAgICAgICB7CisgICAg
ICAgICAgICBzdXJmYWNlU2NhbGUoKS0+c2V0QmFzZVZhbCh2YWx1ZS5zdHJpbmcoKS50b0RvdWJs
ZSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgQVRUUl9T
UEVDVUxBUkNPTlNUQU5UOgorICAgICAgICB7CisgICAgICAgICAgICBzcGVjdWxhckNvbnN0YW50
KCktPnNldEJhc2VWYWwodmFsdWUuc3RyaW5nKCkudG9Eb3VibGUoKSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEFUVFJfU1BFQ1VMQVJFWFBPTkVOVDoKKyAg
ICAgICAgeworICAgICAgICAgICAgc3BlY3VsYXJFeHBvbmVudCgpLT5zZXRCYXNlVmFsKHZhbHVl
LnN0cmluZygpLnRvRG91YmxlKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgY2FzZSBBVFRSX0tFUk5FTFVOSVRMRU5HVEg6CisgICAgICAgIHsKKyAgICAgICAgICAg
IFFTdHJpbmdMaXN0IG51bWJlcnMgPSBRU3RyaW5nTGlzdDo6c3BsaXQoJyAnLCB2YWx1ZS5zdHJp
bmcoKSk7CisgICAgICAgICAgICBrZXJuZWxVbml0TGVuZ3RoWCgpLT5zZXRCYXNlVmFsKG51bWJl
cnNbMF0udG9Eb3VibGUoKSk7CisgICAgICAgICAgICBpZihudW1iZXJzLmNvdW50KCkgPT0gMSkK
KyAgICAgICAgICAgICAgICBrZXJuZWxVbml0TGVuZ3RoWSgpLT5zZXRCYXNlVmFsKG51bWJlcnNb
MF0udG9Eb3VibGUoKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAga2VybmVs
VW5pdExlbmd0aFkoKS0+c2V0QmFzZVZhbChudW1iZXJzWzFdLnRvRG91YmxlKCkpOyAgICAgICAg
ICAgIAorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBBVFRSX0xJ
R0hUSU5HX0NPTE9SOgorICAgICAgICB7CisgICAgICAgICAgICAvL0ZJWE1FIHRoaXMgaXMgYmFk
LCBwb3RlbnRpYWwgbWVtb3J5IGxlYWsKKyAgICAgICAgICAgIGxpZ2h0aW5nQ29sb3IoKS0+c2V0
QmFzZVZhbChuZXcgU1ZHQ29sb3JJbXBsKHZhbHVlLmhhbmRsZSgpKSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgICAgICBkZWZhdWx0OgorICAgICAgICB7CisgICAgICAgICAg
ICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXNJbXBsOjpwYXJzZUF0dHJpYnV0
ZShhdHRyKTsKKyAgICAgICAgfQorICAgIH07Cit9CisKK0tDYW52YXNJdGVtICpTVkdGRVNwZWN1
bGFyTGlnaHRpbmdFbGVtZW50SW1wbDo6Y3JlYXRlQ2FudmFzSXRlbShLQ2FudmFzICpjYW52YXMs
IEtSZW5kZXJpbmdTdHlsZSAqc3R5bGUpIGNvbnN0Cit7CisgICAgbV9maWx0ZXJFZmZlY3QgPSBz
dGF0aWNfY2FzdDxLQ2FudmFzRkVTcGVjdWxhckxpZ2h0aW5nICo+KGNhbnZhcy0+cmVuZGVyaW5n
RGV2aWNlKCktPmNyZWF0ZUZpbHRlckVmZmVjdChGRV9TUEVDVUxBUl9MSUdIVElORykpOworICAg
IG1fZmlsdGVyRWZmZWN0LT5zZXRJbihLRE9NOjpET01TdHJpbmcoaW4xKCktPmJhc2VWYWwoKSku
c3RyaW5nKCkpOworICAgIHNldFN0YW5kYXJkQXR0cmlidXRlcyhtX2ZpbHRlckVmZmVjdCk7Cisg
ICAgbV9maWx0ZXJFZmZlY3QtPnNldFNwZWN1bGFyQ29uc3RhbnQoKHNwZWN1bGFyQ29uc3RhbnQo
KS0+YmFzZVZhbCgpKSk7CisgICAgbV9maWx0ZXJFZmZlY3QtPnNldFNwZWN1bGFyRXhwb25lbnQo
KHNwZWN1bGFyRXhwb25lbnQoKS0+YmFzZVZhbCgpKSk7CisgICAgbV9maWx0ZXJFZmZlY3QtPnNl
dFN1cmZhY2VTY2FsZSgoc3VyZmFjZVNjYWxlKCktPmJhc2VWYWwoKSkpOworICAgIG1fZmlsdGVy
RWZmZWN0LT5zZXRLZXJuZWxVbml0TGVuZ3RoWCgoa2VybmVsVW5pdExlbmd0aFgoKS0+YmFzZVZh
bCgpKSk7CisgICAgbV9maWx0ZXJFZmZlY3QtPnNldEtlcm5lbFVuaXRMZW5ndGhZKChrZXJuZWxV
bml0TGVuZ3RoWSgpLT5iYXNlVmFsKCkpKTsKKyAgICBtX2ZpbHRlckVmZmVjdC0+c2V0TGlnaHRp
bmdDb2xvcihsaWdodGluZ0NvbG9yKCktPmJhc2VWYWwoKS0+Y29sb3IoKSk7CisgICAgdXBkYXRl
TGlnaHRzKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK0tDYW52YXNGaWx0ZXJFZmZlY3QgKlNWR0ZF
U3BlY3VsYXJMaWdodGluZ0VsZW1lbnRJbXBsOjpmaWx0ZXJFZmZlY3QoKSBjb25zdAoreworICAg
IHVwZGF0ZUxpZ2h0cygpOworICAgIHJldHVybiBtX2ZpbHRlckVmZmVjdDsKK30KKworc3RhdGlj
IEtDYW52YXNQb2ludDNGIG1ha2VQb2ludChmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB6KQorewor
ICAgIEtDYW52YXNQb2ludDNGIHJlczsKKyAgICByZXMuc2V0WCh4KTsKKyAgICByZXMuc2V0WSh5
KTsKKyAgICByZXMuc2V0Wih6KTsKKyAgICByZXR1cm4gcmVzOworfQorCitzdGF0aWMgdm9pZCBu
b3JtYWxpc2UoS0NhbnZhc1BvaW50M0YgJiB2YWwpCit7CisgICAgZmxvYXQgbGVuZ3RoID0gdmFs
LngoKSp2YWwueCgpK3ZhbC55KCkqdmFsLnkoKSt2YWwueigpKnZhbC56KCk7CisgICAgbGVuZ3Ro
ID0gc3FydChsZW5ndGgpOworICAgIHZhbC5zZXRYKHZhbC54KCkvbGVuZ3RoKTsKKyAgICB2YWwu
c2V0WSh2YWwueSgpL2xlbmd0aCk7CisgICAgdmFsLnNldFoodmFsLnooKS9sZW5ndGgpOworfQor
Cit2b2lkIFNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnRJbXBsOjp1cGRhdGVMaWdodHMoKSBj
b25zdAoreworICAgIGlmICghbV9maWx0ZXJFZmZlY3QpCisgICAgICAgIHJldHVybjsKKyAgICBL
RE9NOjpOb2RlSW1wbCAqbiA9IGZpcnN0Q2hpbGQoKTsKKyAgICBpZighbikgcmV0dXJuOworICAg
IEtDTGlnaHRTb3VyY2UgKiBsaWdodDsKKyAgICBpZihuLT5pZCgpID09IElEX0ZFRElTVEFOVExJ
R0hUKQorICAgIHsgICAgICAKKyAgICAgICAgU1ZHRkVMaWdodEVsZW1lbnRJbXBsICpsaWdodE5v
ZGUgPSBzdGF0aWNfY2FzdDxTVkdGRUxpZ2h0RWxlbWVudEltcGwgKj4obik7ICAKKyAgICAgICAg
bGlnaHQgPSBuZXcgS0NEaXN0YW50TGlnaHRTb3VyY2UobGlnaHROb2RlLT5hemltdXRoKCktPmJh
c2VWYWwoKSwgbGlnaHROb2RlLT5lbGV2YXRpb24oKS0+YmFzZVZhbCgpKTsKKyAgICB9CisgICAg
ZWxzZSBpZihuLT5pZCgpID09IElEX0ZFUE9JTlRMSUdIVCkKKyAgICB7CisgICAgICAgIFNWR0ZF
TGlnaHRFbGVtZW50SW1wbCAqbGlnaHROb2RlID0gc3RhdGljX2Nhc3Q8U1ZHRkVMaWdodEVsZW1l
bnRJbXBsICo+KG4pOyAgCisgICAgICAgIEtDYW52YXNQb2ludDNGIHBvcyA9IG1ha2VQb2ludChs
aWdodE5vZGUtPngoKS0+YmFzZVZhbCgpLCBsaWdodE5vZGUtPnkoKS0+YmFzZVZhbCgpLCBsaWdo
dE5vZGUtPnooKS0+YmFzZVZhbCgpKTsKKyAgICAgICAgbGlnaHQgPSBuZXcgS0NQb2ludExpZ2h0
U291cmNlKHBvcyk7CisgICAgfQorICAgIGVsc2UgaWYobi0+aWQoKSA9PSBJRF9GRVNQT1RMSUdI
VCkKKyAgICB7CisgICAgICAgIFNWR0ZFTGlnaHRFbGVtZW50SW1wbCAqbGlnaHROb2RlID0gc3Rh
dGljX2Nhc3Q8U1ZHRkVMaWdodEVsZW1lbnRJbXBsICo+KG4pOyAgCisgICAgICAgIEtDYW52YXNQ
b2ludDNGIHBvcyA9IG1ha2VQb2ludChsaWdodE5vZGUtPngoKS0+YmFzZVZhbCgpLCBsaWdodE5v
ZGUtPnkoKS0+YmFzZVZhbCgpLCBsaWdodE5vZGUtPnooKS0+YmFzZVZhbCgpKTsKKyAgICAgICAg
Ly9jb252ZXJ0IGxvb2tBdCB0byBhIGRpcmVjdGlvbgorICAgICAgICBLQ2FudmFzUG9pbnQzRiBk
aXJlY3Rpb24gPSBtYWtlUG9pbnQobGlnaHROb2RlLT5wb2ludHNBdFgoKS0+YmFzZVZhbCgpLXBv
cy54KCksIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGln
aHROb2RlLT5wb2ludHNBdFkoKS0+YmFzZVZhbCgpLXBvcy55KCksIAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlnaHROb2RlLT5wb2ludHNBdFooKS0+YmFz
ZVZhbCgpLXBvcy56KCkpOworICAgICAgICBub3JtYWxpc2UoZGlyZWN0aW9uKTsKKyAgICAgICAg
bGlnaHQgPSBuZXcgS0NTcG90TGlnaHRTb3VyY2UocG9zLCBkaXJlY3Rpb24sIGxpZ2h0Tm9kZS0+
c3BlY3VsYXJFeHBvbmVudCgpLT5iYXNlVmFsKCksIGxpZ2h0Tm9kZS0+bGltaXRpbmdDb25lQW5n
bGUoKS0+YmFzZVZhbCgpKTsKKyAgICB9CisgICAgbV9maWx0ZXJFZmZlY3QtPnNldExpZ2h0U291
cmNlKGxpZ2h0KTsKK30KKwordm9pZCBTVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50SW1wbDo6
Y2xvc2UoKQoreworICAgIC8vdXBkYXRlTGlnaHRzKCk7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQg
b2YgZmlsZQpJbmRleDogU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudEltcGwuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09CmRpZmYgLU5wdSBTVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50SW1wbC5oCi0tLSBTVkdG
RVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50SW1wbC5oCTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAK
KysrIFNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnRJbXBsLmgJNyBOb3YgMjAwNSAxNTowMTo0
MiAtMDAwMApAQCAtMCwwICsxLDU4IEBACisvL0NvcHlyaWdodCBmb28KKworI2lmbmRlZiBLU1ZH
X1NWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnRJbXBsX0gKKyNkZWZpbmUgS1NWR19TVkdGRVNw
ZWN1bGFyTGlnaHRpbmdFbGVtZW50SW1wbF9ICisKKyNpbmNsdWRlICJTVkdGaWx0ZXJQcmltaXRp
dmVTdGFuZGFyZEF0dHJpYnV0ZXNJbXBsLmgiCisKK2NsYXNzIEtDYW52YXNGRVNwZWN1bGFyTGln
aHRpbmc7CitjbGFzcyBLQ2FudmFzRmlsdGVyRWZmZWN0OworCituYW1lc3BhY2UgS1NWRworewor
ICAgIGNsYXNzIFNWR0FuaW1hdGVkTnVtYmVySW1wbDsKKyAgICBjbGFzcyBTVkdBbmltYXRlZFN0
cmluZ0ltcGw7CisgICAgY2xhc3MgU1ZHQW5pbWF0ZWRDb2xvckltcGw7CisgICAgCisgICAgY2xh
c3MgU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudEltcGwgOiBwdWJsaWMgU1ZHRmlsdGVyUHJp
bWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzSW1wbAorICAgIHsKK3B1YmxpYzoKKyAgICAgICAgU1ZH
RkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudEltcGwoS0RPTTo6RG9jdW1lbnRQdHIgKmRvYywgS0RP
TTo6Tm9kZUltcGw6OklkIGlkLCBLRE9NOjpET01TdHJpbmdJbXBsICpwcmVmaXgpOworICAgICAg
ICB2aXJ0dWFsIH5TVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50SW1wbCgpOworICAgICAgICAK
KyAgICAgICAgLy8gJ1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudCcgZnVuY3Rpb25zCisgICAg
ICAgIFNWR0FuaW1hdGVkU3RyaW5nSW1wbCAqaW4xKCkgY29uc3Q7CisgICAgICAgIFNWR0FuaW1h
dGVkTnVtYmVySW1wbCAqc3BlY3VsYXJDb25zdGFudCgpIGNvbnN0OworICAgICAgICBTVkdBbmlt
YXRlZE51bWJlckltcGwgKnNwZWN1bGFyRXhwb25lbnQoKSBjb25zdDsKKyAgICAgICAgU1ZHQW5p
bWF0ZWROdW1iZXJJbXBsICpzdXJmYWNlU2NhbGUoKSBjb25zdDsKKyAgICAgICAgU1ZHQW5pbWF0
ZWROdW1iZXJJbXBsICprZXJuZWxVbml0TGVuZ3RoWCgpIGNvbnN0OworICAgICAgICBTVkdBbmlt
YXRlZE51bWJlckltcGwgKmtlcm5lbFVuaXRMZW5ndGhZKCkgY29uc3Q7CisgICAgICAgIFNWR0Fu
aW1hdGVkQ29sb3JJbXBsICAqbGlnaHRpbmdDb2xvcigpIGNvbnN0OworICAgICAgICAKKyAgICAg
ICAgLy8gRGVyaXZlZCBmcm9tOiAnRWxlbWVudEltcGwnCisgICAgICAgIHZpcnR1YWwgdm9pZCBw
YXJzZUF0dHJpYnV0ZShLRE9NOjpBdHRyaWJ1dGVJbXBsICphdHRyKTsKKyAgICAgICAgCisgICAg
ICAgIHZpcnR1YWwgS0NhbnZhc0l0ZW0gKmNyZWF0ZUNhbnZhc0l0ZW0oS0NhbnZhcyAqY2FudmFz
LCBLUmVuZGVyaW5nU3R5bGUgKnN0eWxlKSBjb25zdDsKKyAgICAgICAgCisgICAgICAgIHZpcnR1
YWwgYm9vbCBpbXBsZW1lbnRzQ2FudmFzSXRlbSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKyAg
ICAgICAgCisgICAgICAgIHZpcnR1YWwgS0NhbnZhc0ZpbHRlckVmZmVjdCAqZmlsdGVyRWZmZWN0
KCkgY29uc3Q7CisgICAgICAgIAorICAgICAgICB2aXJ0dWFsIHZvaWQgY2xvc2UoKTsKK3ByaXZh
dGU6CisgICAgICAgICAgICBtdXRhYmxlIFNWR0FuaW1hdGVkU3RyaW5nSW1wbCAqbV9pbjE7Cisg
ICAgICAgIG11dGFibGUgU1ZHQW5pbWF0ZWROdW1iZXJJbXBsICptX3NwZWN1bGFyQ29uc3RhbnQ7
CisgICAgICAgIG11dGFibGUgU1ZHQW5pbWF0ZWROdW1iZXJJbXBsICptX3NwZWN1bGFyRXhwb25l
bnQ7CisgICAgICAgIG11dGFibGUgU1ZHQW5pbWF0ZWROdW1iZXJJbXBsICptX3N1cmZhY2VTY2Fs
ZTsKKyAgICAgICAgbXV0YWJsZSBTVkdBbmltYXRlZENvbG9ySW1wbCAgKm1fbGlnaHRpbmdDb2xv
cjsKKyAgICAgICAgbXV0YWJsZSBTVkdBbmltYXRlZE51bWJlckltcGwgKm1fa2VybmVsVW5pdExl
bmd0aFg7CisgICAgICAgIG11dGFibGUgU1ZHQW5pbWF0ZWROdW1iZXJJbXBsICptX2tlcm5lbFVu
aXRMZW5ndGhZOworICAgICAgICAvL25lZWQgb3RoZXIgcHJvcGVydGllcyBoZXJlLi4uCisgICAg
ICAgIG11dGFibGUgS0NhbnZhc0ZFU3BlY3VsYXJMaWdodGluZyAqbV9maWx0ZXJFZmZlY3Q7Cisg
ICAgICAgIAorICAgICAgICAvL2xpZ2h0IG1hbmFnbWVudAorICAgICAgICB2b2lkIHVwZGF0ZUxp
Z2h0cygpIGNvbnN0OworICAgIH07Cit9OworCisjZW5kaWYKSW5kZXg6IFNWR0ZFU3BvdExpZ2h0
RWxlbWVudEltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtTnB1IFNWR0ZFU3BvdExpZ2h0RWxlbWVu
dEltcGwuY3BwCi0tLSBTVkdGRVNwb3RMaWdodEVsZW1lbnRJbXBsLmNwcAkxIEphbiAxOTcwIDAw
OjAwOjAwIC0wMDAwCisrKyBTVkdGRVNwb3RMaWdodEVsZW1lbnRJbXBsLmNwcAk3IE5vdiAyMDA1
IDE0OjA0OjEyIC0wMDAwCkBAIC0wLDAgKzEsMjEgQEAKKy8qCisgKiAgU1ZHRkVTcG90TGlnaHRF
bGVtZW50SW1wbC5jcHAKKyAqICBXZWJDb3JlCisgKgorICogIENyZWF0ZWQgYnkgT2xpdmVyIG9u
IDgvMTEvMDUuCisgKiAgQ29weXJpZ2h0IDIwMDUgT2xpdmVyIEh1bnQuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICovCisKKyNpbmNsdWRlICJTVkdGRVNwb3RMaWdodEVsZW1lbnRJbXBsLmgi
CisKK3VzaW5nIG5hbWVzcGFjZSBLU1ZHOworCitTVkdGRVNwb3RMaWdodEVsZW1lbnRJbXBsOjpT
VkdGRVNwb3RMaWdodEVsZW1lbnRJbXBsKEtET006OkRvY3VtZW50UHRyICpkb2MsIEtET006Ok5v
ZGVJbXBsOjpJZCBpZCwgS0RPTTo6RE9NU3RyaW5nSW1wbCAqcHJlZml4KSA6IAorU1ZHRkVMaWdo
dEVsZW1lbnRJbXBsKGRvYywgaWQsIHByZWZpeCkKK3sKK30KKworU1ZHRkVTcG90TGlnaHRFbGVt
ZW50SW1wbDo6flNWR0ZFU3BvdExpZ2h0RWxlbWVudEltcGwoKQoreworfQpJbmRleDogU1ZHRkVT
cG90TGlnaHRFbGVtZW50SW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtTnB1IFNWR0ZFU3BvdExpZ2h0
RWxlbWVudEltcGwuaAotLS0gU1ZHRkVTcG90TGlnaHRFbGVtZW50SW1wbC5oCTEgSmFuIDE5NzAg
MDA6MDA6MDAgLTAwMDAKKysrIFNWR0ZFU3BvdExpZ2h0RWxlbWVudEltcGwuaAk3IE5vdiAyMDA1
IDE0OjA0OjEyIC0wMDAwCkBAIC0wLDAgKzEsMjYgQEAKKy8qCisgKiAgU1ZHRkVTcG90TGlnaHRF
bGVtZW50SW1wbC5oCisgKiAgV2ViQ29yZQorICoKKyAqICBDcmVhdGVkIGJ5IE9saXZlciBvbiA4
LzExLzA1LgorICogIENvcHlyaWdodCAyMDA1IE9saXZlciBIdW50LiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqLworCisKKyNpZm5kZWYgS1NWR19TVkdGRVNwb3RMaWdodEVsZW1lbnRJbXBs
X0gKKyNkZWZpbmUgS1NWR19TVkdGRVNwb3RMaWdodEVsZW1lbnRJbXBsX0gKKworI2luY2x1ZGUg
IlNWR0ZFTGlnaHRFbGVtZW50SW1wbC5oIgorCituYW1lc3BhY2UgS1NWRworeworICAgIGNsYXNz
IFNWR0ZFU3BvdExpZ2h0RWxlbWVudEltcGwgOiBwdWJsaWMgU1ZHRkVMaWdodEVsZW1lbnRJbXBs
Cit7CitwdWJsaWM6CisgICAgU1ZHRkVTcG90TGlnaHRFbGVtZW50SW1wbChLRE9NOjpEb2N1bWVu
dFB0ciAqZG9jLCBLRE9NOjpOb2RlSW1wbDo6SWQgaWQsIEtET006OkRPTVN0cmluZ0ltcGwgKnBy
ZWZpeCk7CisgICAgdmlydHVhbCB+U1ZHRkVTcG90TGlnaHRFbGVtZW50SW1wbCgpOworfTsKK307
CisKKyNlbmRpZgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKSW5kZXg6IGtzdmcyL3N2Zy9T
VkdEb2N1bWVudEltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBw
b3J0L2tzdmcyL3N2Zy9TVkdEb2N1bWVudEltcGwuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAx
LjExCmRpZmYgLXAgLXUgLXIxLjExIGtzdmcyL3N2Zy9TVkdEb2N1bWVudEltcGwuY3BwCi0tLSBr
c3ZnMi9zdmcvU1ZHRG9jdW1lbnRJbXBsLmNwcAk4IE9jdCAyMDA1IDA5OjE4OjE1IC0wMDAwCTEu
MTEKKysrIGtzdmcyL3N2Zy9TVkdEb2N1bWVudEltcGwuY3BwCTggTm92IDIwMDUgMTA6MDA6NDIg
LTAwMDAKQEAgLTEwNyw3ICsxMDcsMTIgQEAKICNpbmNsdWRlICJTVkdMaW5lYXJHcmFkaWVudEVs
ZW1lbnRJbXBsLmgiCiAjaW5jbHVkZSAiU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50SW1wbC5oIgog
I2luY2x1ZGUgIlNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50SW1wbC5oIgorI2luY2x1ZGUgIlNW
R0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudEltcGwuaCIKKyNpbmNsdWRlICJTVkdGRVNwZWN1bGFy
TGlnaHRpbmdFbGVtZW50SW1wbC5oIgogI2luY2x1ZGUgIlNWR0ZFQ29tcG9uZW50VHJhbnNmZXJF
bGVtZW50SW1wbC5oIgorI2luY2x1ZGUgIlNWR0ZFUG9pbnRMaWdodEVsZW1lbnRJbXBsLmgiCisj
aW5jbHVkZSAiU1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50SW1wbC5oIgorI2luY2x1ZGUgIlNWR0ZF
U3BvdExpZ2h0RWxlbWVudEltcGwuaCIKIAogI2luY2x1ZGUgInN2Z3RhZ3MuYyIKICNpbmNsdWRl
ICJzdmd0YWdzLmgiCkBAIC00MzUsNiArNDQwLDMxIEBAIFNWR0VsZW1lbnRJbXBsICpTVkdEb2N1
bWVudEltcGw6OmNyZWF0ZVMKICAgICAgICAgICAgIGVsZW1lbnQgPSBuZXcgU1ZHQ3Vyc29yRWxl
bWVudEltcGwoZG9jUHRyKCksIGlkLCBwcmVmaXgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KKyAgICAgICAgY2FzZSBJRF9GRURJRkZVU0VMSUdIVElORzoKKyAgICAgICAgeworICAg
ICAgICAgICAgZWxlbWVudCA9IG5ldyBTVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnRJbXBsKGRv
Y1B0cigpLCBpZCwgcHJlZml4KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
ICAgIGNhc2UgSURfRkVQT0lOVExJR0hUOgorICAgICAgICB7CisgICAgICAgICAgICBlbGVtZW50
ID0gbmV3IFNWR0ZFUG9pbnRMaWdodEVsZW1lbnRJbXBsKGRvY1B0cigpLCBpZCwgcHJlZml4KTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgSURfRkVTUE9UTElH
SFQ6CisgICAgICAgIHsKKyAgICAgICAgICAgIGVsZW1lbnQgPSBuZXcgU1ZHRkVTcG90TGlnaHRF
bGVtZW50SW1wbChkb2NQdHIoKSwgaWQsIHByZWZpeCk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgICAgICBjYXNlIElEX0ZFRElTVEFOVExJR0hUOgorICAgICAgICB7CisgICAg
ICAgICAgICBlbGVtZW50ID0gbmV3IFNWR0ZFRGlzdGFudExpZ2h0RWxlbWVudEltcGwoZG9jUHRy
KCksIGlkLCBwcmVmaXgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg
Y2FzZSBJRF9GRVNQRUNVTEFSTElHSFRJTkc6CisgICAgICAgIHsKKyAgICAgICAgICAgIGVsZW1l
bnQgPSBuZXcgU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudEltcGwoZG9jUHRyKCksIGlkLCBw
cmVmaXgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgZGVmYXVsdDoK
ICAgICAgICAgICAgIGVsZW1lbnQgPSAwOwogICAgIH07Cg==
</data>
<flag name="review"
          id="832"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>4738</attachid>
            <date>2005-11-19 17:11:19 -0800</date>
            <delta_ts>2005-11-20 05:27:49 -0800</delta_ts>
            <desc>Yet another version of the lighting patch</desc>
            <filename>lighting2.patch</filename>
            <type>text/plain</type>
            <size>109483</size>
            <attacher name="Oliver Hunt">oliver</attacher>
            
              <data encoding="base64">SW5kZXg6IGtjYW52YXMvZGV2aWNlL1dLQXJpdGhtZXRpY0ZpbHRlci5jaWtlcm5lbAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09CmRpZmYgLU5wdSBrY2FudmFzL2RldmljZS9XS0FyaXRobWV0aWNGaWx0ZXIuY2lrZXJuZWwK
LS0tIGtjYW52YXMvZGV2aWNlL1dLQXJpdGhtZXRpY0ZpbHRlci5jaWtlcm5lbAkxIEphbiAxOTcw
IDAwOjAwOjAwIC0wMDAwCisrKyBrY2FudmFzL2RldmljZS9XS0FyaXRobWV0aWNGaWx0ZXIuY2lr
ZXJuZWwJMTkgTm92IDIwMDUgMTM6MzQ6MzAgLTAwMDAKQEAgLTAsMCArMSw3IEBACitrZXJuZWwg
dmVjNCBjb21wb3NpdGUoc2FtcGxlciBpbjEsIHNhbXBsZXIgaW4yLCBmbG9hdCBrMSwgZmxvYXQg
azIsIGZsb2F0IGszLCBmbG9hdCBrNCkKK3sKKyAgICB2ZWM0IHZpbjEgPSBzYW1wbGUoaW4xLCBz
YW1wbGVyQ29vcmQoaW4xKSk7CisgICAgdmVjNCB2aW4yID0gc2FtcGxlKGluMiwgc2FtcGxlckNv
b3JkKGluMikpOworICAgIHZlYzQgcmVzID0gazEqdmluMSp2aW4yK2syKnZpbjErazMqdmluMit2
ZWM0KGs0KTsKKyAgICByZXR1cm4gY2xhbXAocmVzLCB2ZWM0KDAuMCksIHZlYzQoMS4wKSk7Cit9
ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpJbmRleDoga2NhbnZhcy9kZXZpY2UvV0tBcml0
aG1ldGljRmlsdGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQpkaWZmIC1OcHUga2NhbnZhcy9kZXZpY2UvV0tBcml0
aG1ldGljRmlsdGVyLmgKLS0tIGtjYW52YXMvZGV2aWNlL1dLQXJpdGhtZXRpY0ZpbHRlci5oCTEg
SmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAKKysrIGtjYW52YXMvZGV2aWNlL1dLQXJpdGhtZXRpY0Zp
bHRlci5oCTE5IE5vdiAyMDA1IDExOjIyOjQ3IC0wMDAwCkBAIC0wLDAgKzEsMjIgQEAKKy8vCisv
LyAgV0tBcml0aG1ldGljRmlsdGVyLmgKKy8vICBXZWJDb3JlCisvLworLy8gIENyZWF0ZWQgYnkg
T2xpdmVyIG9uIDE5LzExLzA1LgorLy8gIENvcHlyaWdodCAyMDA1IE9saXZlciBIdW50LiAKKy8v
CisKKworI2ltcG9ydCA8UXVhcnR6Q29yZS9Db3JlSW1hZ2UuaD4KKworQGludGVyZmFjZSBXS0Fy
aXRobWV0aWNGaWx0ZXIgOiBDSUZpbHRlciB7CisgICAgQ0lJbWFnZSAgKmlucHV0SW1hZ2U7Cisg
ICAgQ0lJbWFnZSAgKmlucHV0QmFja2dyb3VuZEltYWdlOworICAgIE5TTnVtYmVyICppbnB1dEsx
OworICAgIE5TTnVtYmVyICppbnB1dEsyOworICAgIE5TTnVtYmVyICppbnB1dEszOworICAgIE5T
TnVtYmVyICppbnB1dEs0OworfQorCitAZW5kCisKSW5kZXg6IGtjYW52YXMvZGV2aWNlL1dLQXJp
dGhtZXRpY0ZpbHRlci5tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtTnB1IGtjYW52YXMvZGV2aWNlL1dLQXJp
dGhtZXRpY0ZpbHRlci5tCi0tLSBrY2FudmFzL2RldmljZS9XS0FyaXRobWV0aWNGaWx0ZXIubQkx
IEphbiAxOTcwIDAwOjAwOjAwIC0wMDAwCisrKyBrY2FudmFzL2RldmljZS9XS0FyaXRobWV0aWNG
aWx0ZXIubQkxOSBOb3YgMjAwNSAyMzozNToyNCAtMDAwMApAQCAtMCwwICsxLDc0IEBACisvLwor
Ly8gIFdLQXJpdGhtZXRpY0ZpbHRlci5tCisvLyAgV2ViQ29yZQorLy8KKy8vICBDcmVhdGVkIGJ5
IE9saXZlciBvbiAxOS8xMS8wNS4KKy8vICBDb3B5cmlnaHQgMjAwNSBPbGl2ZXIgSHVudC4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKy8vCisKKyNpbXBvcnQgIldLQXJpdGhtZXRpY0ZpbHRlci5oIgor
CitzdGF0aWMgQ0lLZXJuZWwgKmFyaXRobWV0aWNGaWx0ZXIgPSBuaWw7CisKK0BpbXBsZW1lbnRh
dGlvbiBXS0FyaXRobWV0aWNGaWx0ZXIKKysgKHZvaWQpaW5pdGlhbGl6ZQoreworICAgIFtDSUZp
bHRlciByZWdpc3RlckZpbHRlck5hbWU6QCJXS0FyaXRobWV0aWNGaWx0ZXIiICAKKyAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0cnVjdG9yOiBzZWxmCisgICAgICAgICAgICAgICAgIGNsYXNzQXR0
cmlidXRlczogW05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVjdHNBbmRLZXlzOgorICAg
ICAgICAgICAgICAgICAgICAgQCJXZWJLaXQgQXJpdGhtZXRpYyBGaWx0ZXIiLCBrQ0lBdHRyaWJ1
dGVGaWx0ZXJEaXNwbGF5TmFtZSwKKyAgICAgICAgICAgICAgICAgICAgIFtOU0FycmF5IGFycmF5
V2l0aE9iamVjdHM6IGtDSUNhdGVnb3J5U3R5bGl6ZSwga0NJQ2F0ZWdvcnlWaWRlbywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICBrQ0lDYXRlZ29yeVN0aWxsSW1hZ2UsIGtDSUNhdGVnb3J5Tm9u
U3F1YXJlUGl4ZWxzLG5pbF0sIGtDSUF0dHJpYnV0ZUZpbHRlckNhdGVnb3JpZXMsCisgICAgICAg
ICAgICAgICAgICAgICBbTlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnlXaXRoT2JqZWN0c0FuZEtleXM6
CisgICAgICAgICAgICAgICAgICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhEb3VibGU6MC4w
XSwga0NJQXR0cmlidXRlTWluLAorICAgICAgICAgICAgICAgICAgICAgICAgIFtOU051bWJlciBu
dW1iZXJXaXRoRG91YmxlOjAuMF0sIGtDSUF0dHJpYnV0ZURlZmF1bHQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhEb3VibGU6MS4wXSwga0NJQXR0cmlidXRl
SWRlbnRpdHksCisgICAgICAgICAgICAgICAgICAgICAgICAga0NJQXR0cmlidXRlVHlwZVNjYWxh
ciwga0NJQXR0cmlidXRlVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBuaWxdLCBAImlu
cHV0SzEiLCAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgIFtOU0RpY3Rp
b25hcnkgZGljdGlvbmFyeVdpdGhPYmplY3RzQW5kS2V5czoKKyAgICAgICAgICAgICAgICAgICAg
ICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aERvdWJsZTowLjBdLCBrQ0lBdHRyaWJ1dGVNaW4sCisg
ICAgICAgICAgICAgICAgICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhEb3VibGU6MC4wXSwg
a0NJQXR0cmlidXRlRGVmYXVsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbTlNOdW1iZXIg
bnVtYmVyV2l0aERvdWJsZToxLjBdLCBrQ0lBdHRyaWJ1dGVJZGVudGl0eSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICBrQ0lBdHRyaWJ1dGVUeXBlU2NhbGFyLCBrQ0lBdHRyaWJ1dGVUeXBlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgIG5pbF0sIEAiaW5wdXRLMiIsICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICAgICAgIFtOU0RpY3Rpb25hcnkgZGljdGlvbmFyeVdpdGhPYmplY3Rz
QW5kS2V5czoKKyAgICAgICAgICAgICAgICAgICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aERv
dWJsZTowLjBdLCBrQ0lBdHRyaWJ1dGVNaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgW05T
TnVtYmVyIG51bWJlcldpdGhEb3VibGU6MC4wXSwga0NJQXR0cmlidXRlRGVmYXVsdCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aERvdWJsZToxLjBdLCBrQ0lB
dHRyaWJ1dGVJZGVudGl0eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBrQ0lBdHRyaWJ1dGVU
eXBlU2NhbGFyLCBrQ0lBdHRyaWJ1dGVUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgIG5p
bF0sIEAiaW5wdXRLMyIsICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgIFtOU0Rp
Y3Rpb25hcnkgZGljdGlvbmFyeVdpdGhPYmplY3RzQW5kS2V5czoKKyAgICAgICAgICAgICAgICAg
ICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aERvdWJsZTowLjBdLCBrQ0lBdHRyaWJ1dGVNaW4s
CisgICAgICAgICAgICAgICAgICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhEb3VibGU6MC4w
XSwga0NJQXR0cmlidXRlRGVmYXVsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbTlNOdW1i
ZXIgbnVtYmVyV2l0aERvdWJsZToxLjBdLCBrQ0lBdHRyaWJ1dGVJZGVudGl0eSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICBrQ0lBdHRyaWJ1dGVUeXBlU2NhbGFyLCBrQ0lBdHRyaWJ1dGVUeXBl
LAorICAgICAgICAgICAgICAgICAgICAgICAgIG5pbF0sIEAiaW5wdXRLNCIsCisgICAgICAgICAg
ICAgICAgICAgICBuaWxdXTsKK30KKworKyAoQ0lGaWx0ZXIgKilmaWx0ZXJXaXRoTmFtZTooTlNT
dHJpbmcgKiluYW1lCit7CisgICAgQ0lGaWx0ZXIgKmZpbHRlcjsKKyAgICBmaWx0ZXIgPSBbW3Nl
bGYgYWxsb2NdIGluaXRdOworICAgIHJldHVybiBbZmlsdGVyIGF1dG9yZWxlYXNlXTsKK30KKwor
LSAoaWQpaW5pdAoreworICAgIGlmKCFhcml0aG1ldGljRmlsdGVyKSB7CisgICAgICAgIE5TQnVu
ZGxlICpidW5kbGUgPSBbTlNCdW5kbGUgYnVuZGxlRm9yQ2xhc3M6W3NlbGYgY2xhc3NdXTsKKyAg
ICAgICAgTlNTdHJpbmcgKmtlcm5lbEZpbGUgPSBbYnVuZGxlIHBhdGhGb3JSZXNvdXJjZTpAIldL
QXJpdGhtZXRpY0ZpbHRlciIgb2ZUeXBlOkAiY2lrZXJuZWwiXTsKKyAgICAgICAgTlNTdHJpbmcg
KmNvZGUgPSBbTlNTdHJpbmcgc3RyaW5nV2l0aENvbnRlbnRzT2ZGaWxlOmtlcm5lbEZpbGVdOwor
ICAgICAgICBOU0FycmF5ICprZXJuZWxzID0gW0NJS2VybmVsIGtlcm5lbHNXaXRoU3RyaW5nOmNv
ZGVdOworICAgICAgICBhcml0aG1ldGljRmlsdGVyID0gW1trZXJuZWxzIG9iamVjdEF0SW5kZXg6
MF0gcmV0YWluXTsKKyAgICB9CisgICAgcmV0dXJuIFtzdXBlciBpbml0XTsKK30KKworLSAoQ0lJ
bWFnZSAqKW91dHB1dEltYWdlCit7CisgICAgcmV0dXJuIFtzZWxmIGFwcGx5OmFyaXRobWV0aWNG
aWx0ZXIsIGlucHV0SW1hZ2UsIGlucHV0QmFja2dyb3VuZEltYWdlLCBpbnB1dEsxLCBpbnB1dEsy
LCBpbnB1dEszLAorICAgICAgICBpbnB1dEs0LCBuaWxdOworfQorCitAZW5kCkluZGV4OiBrY2Fu
dmFzL2RldmljZS9xdWFydHovZmlsdGVycy9XS0NvbnZvbHZlTWF0cml4RmlsdGVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpkaWZmIC1OcHUga2NhbnZhcy9kZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tDb252b2x2ZU1h
dHJpeEZpbHRlci5oCi0tLSBrY2FudmFzL2RldmljZS9xdWFydHovZmlsdGVycy9XS0NvbnZvbHZl
TWF0cml4RmlsdGVyLmgJMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMAorKysga2NhbnZhcy9kZXZp
Y2UvcXVhcnR6L2ZpbHRlcnMvV0tDb252b2x2ZU1hdHJpeEZpbHRlci5oCTExIE5vdiAyMDA1IDIz
OjM2OjAwIC0wMDAwCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUg
QXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbXBv
cnQgPFF1YXJ0ekNvcmUvQ29yZUltYWdlLmg+CisKK0BpbnRlcmZhY2UgV0tDb252b2x2ZU1hdHJp
eEZpbHRlcjogQ0lGaWx0ZXIKK3sKKyAgICBDSUltYWdlICAgKmlucHV0SW1hZ2U7CisgICAgQ0lJ
bWFnZSAgICppbnB1dEtlcm5lbE1hdHJpeDsKKyAgICBOU051bWJlciAgKmlucHV0RGl2aXNvcjsK
KyAgICBOU051bWJlciAgKmlucHV0QmlhczsKK30KK0BlbmQKSW5kZXg6IGtjYW52YXMvZGV2aWNl
L3F1YXJ0ei9maWx0ZXJzL1dLQ29udm9sdmVNYXRyaXhGaWx0ZXIubQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CmRpZmYg
LU5wdSBrY2FudmFzL2RldmljZS9xdWFydHovZmlsdGVycy9XS0NvbnZvbHZlTWF0cml4RmlsdGVy
Lm0KLS0tIGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL1dLQ29udm9sdmVNYXRyaXhGaWx0
ZXIubQkxIEphbiAxOTcwIDAwOjAwOjAwIC0wMDAwCisrKyBrY2FudmFzL2RldmljZS9xdWFydHov
ZmlsdGVycy9XS0NvbnZvbHZlTWF0cml4RmlsdGVyLm0JMTEgTm92IDIwMDUgMjM6MzY6MDAgLTAw
MDAKQEAgLTAsMCArMSw5MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBBcHBsZSBDb21w
dXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2ltcG9ydCAiV0tDb252
b2x2ZU1hdHJpeEZpbHRlci5oIgorCitzdGF0aWMgQ0lLZXJuZWwgKmNvbnZvbHZlTWF0cml4S2Vy
bmVsID0gbmlsOworCitAaW1wbGVtZW50YXRpb24gV0tDb252b2x2ZU1hdHJpeEZpbHRlcgorCisr
ICh2b2lkKWluaXRpYWxpemUKK3sKKyAgICBbQ0lGaWx0ZXIgcmVnaXN0ZXJGaWx0ZXJOYW1lOkAi
V0tDb252b2x2ZU1hdHJpeCIgIAorICAgICAgICBjb25zdHJ1Y3Rvcjogc2VsZgorICAgICAgICBj
bGFzc0F0dHJpYnV0ZXM6IFtOU0RpY3Rpb25hcnkgZGljdGlvbmFyeVdpdGhPYmplY3RzQW5kS2V5
czoKKyAgICAgICAgIEAiV2ViS2l0IENvbnZvbHZlIE1hdHJpeCIsIGtDSUF0dHJpYnV0ZUZpbHRl
ckRpc3BsYXlOYW1lLAorICAgICAgICBbTlNBcnJheSBhcnJheVdpdGhPYmplY3RzOiBrQ0lDYXRl
Z29yeUJsdXIsIGtDSUNhdGVnb3J5VmlkZW8sCisgICAgICAgICAgICBrQ0lDYXRlZ29yeVN0aWxs
SW1hZ2UsIGtDSUNhdGVnb3J5Tm9uU3F1YXJlUGl4ZWxzLG5pbF0sIGtDSUF0dHJpYnV0ZUZpbHRl
ckNhdGVnb3JpZXMsCisgICAgICAgIFtOU0RpY3Rpb25hcnkgZGljdGlvbmFyeVdpdGhPYmplY3Rz
QW5kS2V5czoKKyAgICAgICAgICAgIGtDSUF0dHJpYnV0ZVR5cGVHcmFkaWVudCwga0NJQXR0cmli
dXRlVHlwZSwKKyAgICAgICAgICAgIG5pbF0sIEAiaW5wdXRLZXJuZWxNYXRyaXgiLAorICAgICAg
ICBbTlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnlXaXRoT2JqZWN0c0FuZEtleXM6CisgICAgICAgICAg
ICBbTlNOdW1iZXIgbnVtYmVyV2l0aERvdWJsZTowLjBdLCBrQ0lBdHRyaWJ1dGVNaW4sCisgICAg
ICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aERvdWJsZToxLjBdLCBrQ0lBdHRyaWJ1dGVEZWZh
dWx0LAorICAgICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhEb3VibGU6MS4wXSwga0NJQXR0
cmlidXRlSWRlbnRpdHksCisgICAgICAgICAgICBrQ0lBdHRyaWJ1dGVUeXBlU2NhbGFyLCBrQ0lB
dHRyaWJ1dGVUeXBlLAorICAgICAgICAgICAgbmlsXSwgQCJpbnB1dERpdmlzb3IiLAorICAgICAg
ICBbTlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnlXaXRoT2JqZWN0c0FuZEtleXM6CisgICAgICAgICAg
ICBbTlNOdW1iZXIgbnVtYmVyV2l0aERvdWJsZTowLjBdLCBrQ0lBdHRyaWJ1dGVEZWZhdWx0LAor
ICAgICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhEb3VibGU6MC4wXSwga0NJQXR0cmlidXRl
SWRlbnRpdHksCisgICAgICAgICAgICBrQ0lBdHRyaWJ1dGVUeXBlU2NhbGFyLCBrQ0lBdHRyaWJ1
dGVUeXBlLAorICAgICAgICAgICAgbmlsXSwgQCJpbnB1dEJpYXMiLAorICAgICAgICBuaWxdXTsK
K30KKworKyAoQ0lGaWx0ZXIgKilmaWx0ZXJXaXRoTmFtZTooTlNTdHJpbmcgKiluYW1lCit7Cisg
ICAgQ0lGaWx0ZXIgKmZpbHRlcjsKKyAgICBmaWx0ZXIgPSBbW3NlbGYgYWxsb2NdIGluaXRdOwor
ICAgIHJldHVybiBbZmlsdGVyIGF1dG9yZWxlYXNlXTsKK30KKworLSAoaWQpaW5pdAoreworICAg
IGlmKCFjb252b2x2ZU1hdHJpeEtlcm5lbCkgeworICAgICAgICBOU0J1bmRsZSAqYnVuZGxlID0g
W05TQnVuZGxlIGJ1bmRsZUZvckNsYXNzOltzZWxmIGNsYXNzXV07CisgICAgICAgIE5TU3RyaW5n
ICprZXJuZWxGaWxlID0gW2J1bmRsZSBwYXRoRm9yUmVzb3VyY2U6QCJXS0NvbnZvbHZlTWF0cml4
RmlsdGVyIiBvZlR5cGU6QCJjaWtlcm5lbCJdOworICAgICAgICBOU1N0cmluZyAqY29kZSA9IFtO
U1N0cmluZyBzdHJpbmdXaXRoQ29udGVudHNPZkZpbGU6a2VybmVsRmlsZV07CisgICAgICAgIE5T
QXJyYXkgKmtlcm5lbHMgPSBbQ0lLZXJuZWwga2VybmVsc1dpdGhTdHJpbmc6Y29kZV07CisgICAg
ICAgIGNvbnZvbHZlTWF0cml4S2VybmVsID0gW1trZXJuZWxzIG9iamVjdEF0SW5kZXg6MF0gcmV0
YWluXTsKKyAgICB9CisgICAgcmV0dXJuIFtzdXBlciBpbml0XTsKK30KKworLSAoQ0lJbWFnZSAq
KW91dHB1dEltYWdlCit7CisgICAgLy8gRklYTUUsIEkgZG9uJ3QgdGhpbmsgdGhpcyBpcyByaWdo
dCB5ZXQuLi4KKyAgICBDSVNhbXBsZXIgKmltYWdlID0gW0NJU2FtcGxlciBzYW1wbGVyV2l0aElt
YWdlOmlucHV0SW1hZ2VdOworICAgIENJU2FtcGxlciAqa2VybmVsTWF0cml4ID0gW0NJU2FtcGxl
ciBzYW1wbGVyV2l0aEltYWdlOmlucHV0S2VybmVsTWF0cml4XTsKKyAgICByZXR1cm4gW3NlbGYg
YXBwbHk6Y29udm9sdmVNYXRyaXhLZXJuZWwsIGltYWdlLCBrZXJuZWxNYXRyaXgsIGlucHV0RGl2
aXNvciwKKyAgICAgICAgaW5wdXRCaWFzLCBrQ0lBcHBseU9wdGlvbkRlZmluaXRpb24sIFtpbWFn
ZSBkZWZpbml0aW9uXSwgbmlsXTsKK30KKworLSAoQ0dSZWN0KXJlZ2lvbk9mOihpbnQpc2FtcGxl
ckluZGV4IGRlc3RSZWN0OihDR1JlY3QpcgoreworICAgIC8vIFRoaXMgaXMgZ29ubmEgYmUgc2xv
b29vdy4KKyAgICBDR1JlY3QgZXh0ZW50ID0gW2lucHV0S2VybmVsTWF0cml4IGV4dGVudF07Cisg
ICAgQ0dTaXplIHNpemUgPSBleHRlbnQuc2l6ZTsKKyAgICByZXR1cm4gQ0dSZWN0SW5zZXQociwg
LTEgKiBzaXplLndpZHRoLCAtMSAqIHNpemUuaGVpZ2h0KTsKK30KKworQGVuZApJbmRleDoga2Nh
bnZhcy9kZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tEaWZmdXNlTGlnaHRpbmdGaWx0ZXIuY2lrZXJu
ZWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQpkaWZmIC1OcHUga2NhbnZhcy9kZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tE
aWZmdXNlTGlnaHRpbmdGaWx0ZXIuY2lrZXJuZWwKLS0tIGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9m
aWx0ZXJzL1dLRGlmZnVzZUxpZ2h0aW5nRmlsdGVyLmNpa2VybmVsCTEgSmFuIDE5NzAgMDA6MDA6
MDAgLTAwMDAKKysrIGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL1dLRGlmZnVzZUxpZ2h0
aW5nRmlsdGVyLmNpa2VybmVsCTE0IE5vdiAyMDA1IDA5OjA5OjIwIC0wMDAwCkBAIC0wLDAgKzEs
MTQgQEAKK2tlcm5lbCB2ZWM0IGRpZmZ1c2VMaWdodGluZyhzYW1wbGVyIGlucHV0Tm9ybWFsVmVj
dG9ycywgc2FtcGxlciBpbnB1dExpZ2h0VmVjdG9ycywgX19jb2xvciBpbnB1dExpZ2h0aW5nQ29s
b3IsIAorICAgIGZsb2F0IGlucHV0U3VyZmFjZVNjYWxlLCBmbG9hdCBpbnB1dERpZmZ1c2VDb25z
dGFudCwgZmxvYXQgaW5wdXRLZXJuZWxMZW5ndGhYLAorICAgIGZsb2F0IGlucHV0S2VybmVsTGVu
Z3RoWSkKK3sKKyAgICB2ZWMyIHBvcz1zYW1wbGVyQ29vcmQoaW5wdXRMaWdodFZlY3RvcnMpOwor
ICAgIHZlYzIgcG9zbj1zYW1wbGVyQ29vcmQoaW5wdXROb3JtYWxWZWN0b3JzKTsKKyAgICB2ZWM0
IGw0ID0gc2FtcGxlKGlucHV0TGlnaHRWZWN0b3JzLCBwb3MpLnh5ejsKKyAgICB2ZWMzIGwgPSBs
NC54eXo7CisgICAgdmVjMyBuID0gc2FtcGxlKGlucHV0Tm9ybWFsVmVjdG9ycywgcG9zbikueHl6
OworICAgIGZsb2F0IG5sID0gKGRvdChsLCBuKSk7CisgICAgdmVjNCByZXMgPSB2ZWM0KGlucHV0
TGlnaHRpbmdDb2xvci5yKm5sLCBpbnB1dExpZ2h0aW5nQ29sb3IuZypubCwgaW5wdXRMaWdodGlu
Z0NvbG9yLmIqbmwsIDEuMCk7CisgICAgcmVzLnh5eiAqPSBsNC53OworICAgIHJldHVybiByZXM7
Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpJbmRleDoga2NhbnZhcy9kZXZpY2UvcXVh
cnR6L2ZpbHRlcnMvV0tEaWZmdXNlTGlnaHRpbmdGaWx0ZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CmRpZmYgLU5w
dSBrY2FudmFzL2RldmljZS9xdWFydHovZmlsdGVycy9XS0RpZmZ1c2VMaWdodGluZ0ZpbHRlci5o
Ci0tLSBrY2FudmFzL2RldmljZS9xdWFydHovZmlsdGVycy9XS0RpZmZ1c2VMaWdodGluZ0ZpbHRl
ci5oCTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAKKysrIGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9m
aWx0ZXJzL1dLRGlmZnVzZUxpZ2h0aW5nRmlsdGVyLmgJMTIgTm92IDIwMDUgMTA6MDA6MjAgLTAw
MDAKQEAgLTAsMCArMSwzNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBBcHBsZSBDb21w
dXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2ltcG9ydCA8UXVhcnR6
Q29yZS9Db3JlSW1hZ2UuaD4KKworQGludGVyZmFjZSBXS0RpZmZ1c2VMaWdodGluZ0ZpbHRlciA6
IENJRmlsdGVyIHsKKyAgICBDSUltYWdlICAqaW5wdXROb3JtYWxNYXA7CisgICAgQ0lJbWFnZSAg
KmlucHV0TGlnaHRWZWN0b3JzOworICAgIENJQ29sb3IgICppbnB1dExpZ2h0aW5nQ29sb3I7Cisg
ICAgTlNOdW1iZXIgKmlucHV0U3VyZmFjZVNjYWxlOworICAgIE5TTnVtYmVyICppbnB1dERpZmZ1
c2VDb25zdGFudDsKKyAgICBOU051bWJlciAqaW5wdXRLZXJuZWxVbml0TGVuZ3RoWDsKKyAgICBO
U051bWJlciAqaW5wdXRLZXJuZWxVbml0TGVuZ3RoWTsKK30KK0BlbmQKSW5kZXg6IGtjYW52YXMv
ZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL1dLRGlmZnVzZUxpZ2h0aW5nRmlsdGVyLm0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQpkaWZmIC1OcHUga2NhbnZhcy9kZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tEaWZmdXNlTGlnaHRp
bmdGaWx0ZXIubQotLS0ga2NhbnZhcy9kZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tEaWZmdXNlTGln
aHRpbmdGaWx0ZXIubQkxIEphbiAxOTcwIDAwOjAwOjAwIC0wMDAwCisrKyBrY2FudmFzL2Rldmlj
ZS9xdWFydHovZmlsdGVycy9XS0RpZmZ1c2VMaWdodGluZ0ZpbHRlci5tCTEzIE5vdiAyMDA1IDAz
OjM2OjQ4IC0wMDAwCkBAIC0wLDAgKzEsMTAxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1
IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW1w
b3J0ICJXS0RpZmZ1c2VMaWdodGluZ0ZpbHRlci5oIgorI2ltcG9ydCA8c3RkaW8uaD4KKworc3Rh
dGljIENJS2VybmVsICpkaWZmdXNlTGlnaHRpbmdGaWx0ZXIgPSBuaWw7CitzdGF0aWMgQk9PTCAg
ICAgZGlmZnVzZUxpZ2h0aW5nRmlsdGVySW5pdGlhbGlzZWQgPSBOTzsKK0BpbXBsZW1lbnRhdGlv
biBXS0RpZmZ1c2VMaWdodGluZ0ZpbHRlcgorCisrICh2b2lkKWluaXRpYWxpemUKK3sKKyAgICBb
Q0lGaWx0ZXIgcmVnaXN0ZXJGaWx0ZXJOYW1lOkAiV0tEaWZmdXNlTGlnaHRpbmciICAKKyAgICAg
ICBjb25zdHJ1Y3RvcjpzZWxmCisgICAgICAgY2xhc3NBdHRyaWJ1dGVzOltOU0RpY3Rpb25hcnkg
ZGljdGlvbmFyeVdpdGhPYmplY3RzQW5kS2V5czoKKyAgICAgICAgICAgQCJXZWJLaXQgRGlmZnVz
ZSBMaWdodGluZyIsIGtDSUF0dHJpYnV0ZUZpbHRlckRpc3BsYXlOYW1lLAorICAgICAgICAgICBb
TlNBcnJheSBhcnJheVdpdGhPYmplY3RzOiBrQ0lDYXRlZ29yeVN0eWxpemUsIGtDSUNhdGVnb3J5
VmlkZW8sCisgICAgICAgICAgICAgICBrQ0lDYXRlZ29yeVN0aWxsSW1hZ2UsIGtDSUNhdGVnb3J5
Tm9uU3F1YXJlUGl4ZWxzLG5pbF0sIGtDSUF0dHJpYnV0ZUZpbHRlckNhdGVnb3JpZXMsCisgICAg
ICAgICAgIFtOU0RpY3Rpb25hcnkgZGljdGlvbmFyeVdpdGhPYmplY3RzQW5kS2V5czoKKyAgICAg
ICAgICAgICAgIFtDSUNvbG9yIGNvbG9yV2l0aFJlZDoxLjAgZ3JlZW46MS4wIGJsdWU6MS4wIGFs
cGhhOjEuMF0sCisgICAgICAgICAgICAgICBrQ0lBdHRyaWJ1dGVEZWZhdWx0LCBuaWxdLCBAImlu
cHV0TGlnaHRpbmdDb2xvciIsCisgICAgICAgICAgIFtOU0RpY3Rpb25hcnkgZGljdGlvbmFyeVdp
dGhPYmplY3RzQW5kS2V5czoKKyAgICAgICAgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoRG91
YmxlOjAuMF0sIGtDSUF0dHJpYnV0ZU1pbiwKKyAgICAgICAgICAgICAgIFtOU051bWJlciBudW1i
ZXJXaXRoRG91YmxlOjEuMF0sIGtDSUF0dHJpYnV0ZURlZmF1bHQsCisgICAgICAgICAgICAgICBb
TlNOdW1iZXIgbnVtYmVyV2l0aERvdWJsZToxLjBdLCBrQ0lBdHRyaWJ1dGVJZGVudGl0eSwKKyAg
ICAgICAgICAgICAgIGtDSUF0dHJpYnV0ZVR5cGVTY2FsYXIsIGtDSUF0dHJpYnV0ZVR5cGUsCisg
ICAgICAgICAgICAgICBuaWxdLCBAImlucHV0U3VyZmFjZVNjYWxlIiwKKyAgICAgICAgICAgW05T
RGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVjdHNBbmRLZXlzOgorICAgICAgICAgICAgICAg
W05TTnVtYmVyIG51bWJlcldpdGhEb3VibGU6MC4wXSwga0NJQXR0cmlidXRlTWluLAorICAgICAg
ICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhEb3VibGU6MS4wXSwga0NJQXR0cmlidXRlRGVm
YXVsdCwKKyAgICAgICAgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoRG91YmxlOjEuMF0sIGtD
SUF0dHJpYnV0ZUlkZW50aXR5LAorICAgICAgICAgICAgICAga0NJQXR0cmlidXRlVHlwZVNjYWxh
ciwga0NJQXR0cmlidXRlVHlwZSwKKyAgICAgICAgICAgICAgIG5pbF0sIEAiaW5wdXREaWZmdXNl
Q29uc3RhbnQiLAorICAgICAgICAgICBbTlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnlXaXRoT2JqZWN0
c0FuZEtleXM6CisgICAgICAgICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aERvdWJsZTowLjBd
LCBrQ0lBdHRyaWJ1dGVNaW4sCisgICAgICAgICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aERv
dWJsZToxLjBdLCBrQ0lBdHRyaWJ1dGVEZWZhdWx0LAorICAgICAgICAgICAgICAgW05TTnVtYmVy
IG51bWJlcldpdGhEb3VibGU6MS4wXSwga0NJQXR0cmlidXRlSWRlbnRpdHksCisgICAgICAgICAg
ICAgICBrQ0lBdHRyaWJ1dGVUeXBlU2NhbGFyLCBrQ0lBdHRyaWJ1dGVUeXBlLAorICAgICAgICAg
ICAgICAgbmlsXSwgQCJpbnB1dEtlcm5lbFVuaXRMZW5ndGhYIiwKKyAgICAgICAgICAgW05TRGlj
dGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVjdHNBbmRLZXlzOgorICAgICAgICAgICAgICAgW05T
TnVtYmVyIG51bWJlcldpdGhEb3VibGU6MC4wXSwga0NJQXR0cmlidXRlTWluLAorICAgICAgICAg
ICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhEb3VibGU6MS4wXSwga0NJQXR0cmlidXRlRGVmYXVs
dCwKKyAgICAgICAgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoRG91YmxlOjEuMF0sIGtDSUF0
dHJpYnV0ZUlkZW50aXR5LAorICAgICAgICAgICAgICAga0NJQXR0cmlidXRlVHlwZVNjYWxhciwg
a0NJQXR0cmlidXRlVHlwZSwKKyAgICAgICAgICAgICAgIG5pbF0sIEAiaW5wdXRLZXJuZWxVbml0
TGVuZ3RoWSIsCisgICAgICAgICAgIG5pbF1dOworICAgIGRpZmZ1c2VMaWdodGluZ0ZpbHRlcklu
aXRpYWxpc2VkID0gWUVTOworfQorCisrIChDSUZpbHRlciAqKWZpbHRlcldpdGhOYW1lOihOU1N0
cmluZyAqKW5hbWUKK3sKKyAgICBDSUZpbHRlciAqZmlsdGVyOworICAgIGZpbHRlciA9IFtbc2Vs
ZiBhbGxvY10gaW5pdF07CisgICAgcmV0dXJuIFtmaWx0ZXIgYXV0b3JlbGVhc2VdOworfQorCist
IChpZClpbml0Cit7CisgICAgaWYoIWRpZmZ1c2VMaWdodGluZ0ZpbHRlcikgeworICAgICAgICBO
U0J1bmRsZSAqYnVuZGxlID0gW05TQnVuZGxlIGJ1bmRsZUZvckNsYXNzOltzZWxmIGNsYXNzXV07
CisgICAgICAgIE5TU3RyaW5nICprZXJuZWxGaWxlID0gW2J1bmRsZSBwYXRoRm9yUmVzb3VyY2U6
QCJXS0RpZmZ1c2VMaWdodGluZ0ZpbHRlciIgb2ZUeXBlOkAiY2lrZXJuZWwiXTsKKyAgICAgICAg
TlNTdHJpbmcgKmNvZGUgPSBbTlNTdHJpbmcgc3RyaW5nV2l0aENvbnRlbnRzT2ZGaWxlOmtlcm5l
bEZpbGVdOworICAgICAgICBOU0FycmF5ICprZXJuZWxzID0gW0NJS2VybmVsIGtlcm5lbHNXaXRo
U3RyaW5nOmNvZGVdOworICAgICAgICBkaWZmdXNlTGlnaHRpbmdGaWx0ZXIgPSBbW2tlcm5lbHMg
b2JqZWN0QXRJbmRleDowXSByZXRhaW5dOworICAgIH0KKyAgICByZXR1cm4gW3N1cGVyIGluaXRd
OworfQorCistIChDSUltYWdlICopb3V0cHV0SW1hZ2UKK3sKKyAgICBDSVNhbXBsZXIgKnNyYyA9
IFtDSVNhbXBsZXIgc2FtcGxlcldpdGhJbWFnZTogaW5wdXROb3JtYWxNYXBdOworICAgIENJU2Ft
cGxlciAqbGlnaHRTcmMgPSBbQ0lTYW1wbGVyIHNhbXBsZXJXaXRoSW1hZ2U6IGlucHV0TGlnaHRW
ZWN0b3JzXTsKKyAgICByZXR1cm4gW3NlbGYgYXBwbHk6ZGlmZnVzZUxpZ2h0aW5nRmlsdGVyLCBz
cmMsIGxpZ2h0U3JjLCBpbnB1dExpZ2h0aW5nQ29sb3IsIGlucHV0U3VyZmFjZVNjYWxlLCBpbnB1
dERpZmZ1c2VDb25zdGFudCwKKyAgICAgICAgaW5wdXRLZXJuZWxVbml0TGVuZ3RoWCwgaW5wdXRL
ZXJuZWxVbml0TGVuZ3RoWSwgbmlsXTsKK30KKworQGVuZAorCisKSW5kZXg6IGtjYW52YXMvZGV2
aWNlL3F1YXJ0ei9maWx0ZXJzL1dLRGlzdGFudExpZ2h0RmlsdGVyLmNpa2VybmVsCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KZGlmZiAtTnB1IGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL1dLRGlzdGFudExpZ2h0
RmlsdGVyLmNpa2VybmVsCi0tLSBrY2FudmFzL2RldmljZS9xdWFydHovZmlsdGVycy9XS0Rpc3Rh
bnRMaWdodEZpbHRlci5jaWtlcm5lbAkxIEphbiAxOTcwIDAwOjAwOjAwIC0wMDAwCisrKyBrY2Fu
dmFzL2RldmljZS9xdWFydHovZmlsdGVycy9XS0Rpc3RhbnRMaWdodEZpbHRlci5jaWtlcm5lbAkx
MSBOb3YgMjAwNSAyMzozNjowMCAtMDAwMApAQCAtMCwwICsxLDQgQEAKK2tlcm5lbCB2ZWM0IGRp
c3RhbnRMaWdodChzYW1wbGVyIGltYWdlLCB2ZWMzIGRpcmVjdGlvbikKK3sKKyAgICByZXR1cm4g
dmVjNChkaXJlY3Rpb24ueCwgZGlyZWN0aW9uLnksIGRpcmVjdGlvbi56LCAxLjApOworfQpcIE5v
IG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKSW5kZXg6IGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9maWx0
ZXJzL1dLRGlzdGFudExpZ2h0RmlsdGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpkaWZmIC1OcHUga2NhbnZhcy9k
ZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tEaXN0YW50TGlnaHRGaWx0ZXIuaAotLS0ga2NhbnZhcy9k
ZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tEaXN0YW50TGlnaHRGaWx0ZXIuaAkxIEphbiAxOTcwIDAw
OjAwOjAwIC0wMDAwCisrKyBrY2FudmFzL2RldmljZS9xdWFydHovZmlsdGVycy9XS0Rpc3RhbnRM
aWdodEZpbHRlci5oCTEzIE5vdiAyMDA1IDEwOjU3OjE4IC0wMDAwCkBAIC0wLDAgKzEsMzIgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpbXBvcnQgPFF1YXJ0ekNvcmUvQ29yZUltYWdlLmg+CisK
K0BpbnRlcmZhY2UgV0tEaXN0YW50TGlnaHRGaWx0ZXIgOiBDSUZpbHRlciB7CisgICAgQ0lJbWFn
ZSAgKiBpbnB1dE5vcm1hbE1hcDsKKyAgICBDSVZlY3RvciAqIGlucHV0TGlnaHREaXJlY3Rpb247
Cit9CitAZW5kCkluZGV4OiBrY2FudmFzL2RldmljZS9xdWFydHovZmlsdGVycy9XS0Rpc3RhbnRM
aWdodEZpbHRlci5tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtTnB1IGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9m
aWx0ZXJzL1dLRGlzdGFudExpZ2h0RmlsdGVyLm0KLS0tIGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9m
aWx0ZXJzL1dLRGlzdGFudExpZ2h0RmlsdGVyLm0JMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMAor
Kysga2NhbnZhcy9kZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tEaXN0YW50TGlnaHRGaWx0ZXIubQkx
MyBOb3YgMjAwNSAxMDo1ODowNCAtMDAwMApAQCAtMCwwICsxLDcwIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDA1IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVU
RVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRF
UiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworIAorI2ltcG9ydCAiV0tEaXN0YW50TGlnaHRGaWx0ZXIuaCIKKworc3RhdGljIENJS2Vy
bmVsICpkaXN0YW50TGlnaHRGaWx0ZXIgPSBuaWw7CisKK0BpbXBsZW1lbnRhdGlvbiBXS0Rpc3Rh
bnRMaWdodEZpbHRlcgorCisrICh2b2lkKWluaXRpYWxpemUKK3sKKyAgICBbQ0lGaWx0ZXIgcmVn
aXN0ZXJGaWx0ZXJOYW1lOkAiV0tEaXN0YW50TGlnaHQiCisgICAgICAgIGNvbnN0cnVjdG9yOiBz
ZWxmCisgICAgICAgIGNsYXNzQXR0cmlidXRlczogW05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0
aE9iamVjdHNBbmRLZXlzOgorICAgICAgICAgQCJXZWJLaXQgRGlzdGFudCBMaWdodCIsIGtDSUF0
dHJpYnV0ZUZpbHRlckRpc3BsYXlOYW1lLAorICAgICAgICBbTlNBcnJheSBhcnJheVdpdGhPYmpl
Y3RzOiBrQ0lDYXRlZ29yeVN0eWxpemUsIGtDSUNhdGVnb3J5VmlkZW8sCisgICAgICAgICAgICBr
Q0lDYXRlZ29yeVN0aWxsSW1hZ2UsIGtDSUNhdGVnb3J5Tm9uU3F1YXJlUGl4ZWxzLG5pbF0sIGtD
SUF0dHJpYnV0ZUZpbHRlckNhdGVnb3JpZXMsCisgICAgICAgICAgICBbTlNEaWN0aW9uYXJ5IGRp
Y3Rpb25hcnlXaXRoT2JqZWN0c0FuZEtleXM6CisgICAgICAgICAgICAgICAga0NJQXR0cmlidXRl
VHlwZVBvc2l0aW9uMywga0NJQXR0cmlidXRlVHlwZSwKKyAgICAgICAgICAgICAgICBuaWxdLCBA
ImlucHV0TGlnaHREaXJlY3Rpb24iLAorICAgICAgICBuaWxdXTsKK30KKworKyAoQ0lGaWx0ZXIg
KilmaWx0ZXJXaXRoTmFtZTooTlNTdHJpbmcgKiluYW1lCit7CisgICAgQ0lGaWx0ZXIgKmZpbHRl
cjsKKyAgICBmaWx0ZXIgPSBbW3NlbGYgYWxsb2NdIGluaXRdOworICAgIHJldHVybiBbZmlsdGVy
IGF1dG9yZWxlYXNlXTsKK30KKworLSAoaWQpaW5pdAoreworICAgIGlmKCFkaXN0YW50TGlnaHRG
aWx0ZXIpIHsKKyAgICAgICAgTlNCdW5kbGUgKmJ1bmRsZSA9IFtOU0J1bmRsZSBidW5kbGVGb3JD
bGFzczpbc2VsZiBjbGFzc11dOworICAgICAgICBOU1N0cmluZyAqa2VybmVsRmlsZSA9IFtidW5k
bGUgcGF0aEZvclJlc291cmNlOkAiV0tEaXN0YW50TGlnaHRGaWx0ZXIiIG9mVHlwZTpAImNpa2Vy
bmVsIl07CisgICAgICAgIE5TU3RyaW5nICpjb2RlID0gW05TU3RyaW5nIHN0cmluZ1dpdGhDb250
ZW50c09mRmlsZTprZXJuZWxGaWxlXTsKKyAgICAgICAgTlNBcnJheSAqa2VybmVscyA9IFtDSUtl
cm5lbCBrZXJuZWxzV2l0aFN0cmluZzpjb2RlXTsKKyAgICAgICAgZGlzdGFudExpZ2h0RmlsdGVy
ID0gW1trZXJuZWxzIG9iamVjdEF0SW5kZXg6MF0gcmV0YWluXTsKKyAgICB9CisgICAgcmV0dXJu
IFtzdXBlciBpbml0XTsKK30KKworLSAoQ0lJbWFnZSAqKW91dHB1dEltYWdlCit7CisgICAgcmV0
dXJuIFtzZWxmIGFwcGx5OmRpc3RhbnRMaWdodEZpbHRlciwgW0NJU2FtcGxlciBzYW1wbGVyV2l0
aEltYWdlOmlucHV0Tm9ybWFsTWFwXSwgaW5wdXRMaWdodERpcmVjdGlvbiwgbmlsXTsKK30KKwor
QGVuZApJbmRleDoga2NhbnZhcy9kZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tOb3JtYWxNYXBGaWx0
ZXIuY2lrZXJuZWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQpkaWZmIC1OcHUga2NhbnZhcy9kZXZpY2UvcXVhcnR6L2Zp
bHRlcnMvV0tOb3JtYWxNYXBGaWx0ZXIuY2lrZXJuZWwKLS0tIGtjYW52YXMvZGV2aWNlL3F1YXJ0
ei9maWx0ZXJzL1dLTm9ybWFsTWFwRmlsdGVyLmNpa2VybmVsCTEgSmFuIDE5NzAgMDA6MDA6MDAg
LTAwMDAKKysrIGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL1dLTm9ybWFsTWFwRmlsdGVy
LmNpa2VybmVsCTE5IE5vdiAyMDA1IDEzOjUzOjAxIC0wMDAwCkBAIC0wLDAgKzEsMjMgQEAKK2tl
cm5lbCB2ZWM0IGNvbnZvbHZlKHNhbXBsZXIgaW1hZ2UsICBmbG9hdCBkaXZpc29yLCBmbG9hdCBi
aWFzLAorCQkJdmVjMyBtMCwgdmVjMyBtMSwgdmVjMyBtMiApCit7CisgICAgdmVjNCBjb2xvdXI9
dmVjNCgwLjAsIDAuMCwgMC4wLCAwLjApOworICAgIHZlYzIgcG9zPXNhbXBsZXJDb29yZChpbWFn
ZSk7CisgICAgY29sb3VyPXNhbXBsZShpbWFnZSwgcG9zK3ZlYzIoLTEsLTEpKSptMC54OworICAg
IGNvbG91cis9c2FtcGxlKGltYWdlLCBwb3MrdmVjMigtMSwgMC4wKSkqbTAueTsKKyAgICBjb2xv
dXIrPXNhbXBsZShpbWFnZSwgcG9zK3ZlYzIoLTEsIDEpKSptMC56OworICAgIGNvbG91cis9c2Ft
cGxlKGltYWdlLCBwb3MrdmVjMigwLC0xKSkqbTEueDsKKyAgICBjb2xvdXIrPXNhbXBsZShpbWFn
ZSwgcG9zKSptMS55OworICAgIGNvbG91cis9c2FtcGxlKGltYWdlLCBwb3MrdmVjMigwLCAxLjAp
KSptMS56OworICAgIGNvbG91cis9c2FtcGxlKGltYWdlLCBwb3MrdmVjMigxLC0xKSkqbTIueDsK
KyAgICBjb2xvdXIrPXNhbXBsZShpbWFnZSwgcG9zK3ZlYzIoMSwgMC4wKSkqbTIueTsKKyAgICBj
b2xvdXIrPXNhbXBsZShpbWFnZSwgcG9zK3ZlYzIoMSwgMSkpKm0yLno7CisgICAgcmV0dXJuICgo
KGNvbG91ci9kaXZpc29yKStiaWFzKSk7Cit9CisKK2tlcm5lbCB2ZWM0IG1lcmdlTm9ybWFscyhz
YW1wbGVyIE54LCBzYW1wbGVyIE55LCBzYW1wbGVyIHNyYywgZmxvYXQgc3VyZmFjZVNjYWxlKQor
eworICAgIHZlYzMgTj12ZWMzKHN1cmZhY2VTY2FsZSpzYW1wbGUoTngsIHNhbXBsZXJDb29yZChO
eCkpLmEsIHN1cmZhY2VTY2FsZSpzYW1wbGUoTnksIHNhbXBsZXJDb29yZChOeSkpLmEsIDEuMCwg
MC4wKTsKKyAgICBOID0gTi9zcXJ0KGRvdChOLE4pKTsKKyAgICByZXR1cm4gdmVjNChOLngsIE4u
eSwgTi56LCBzdXJmYWNlU2NhbGUqc2FtcGxlKHNyYywgc2FtcGxlckNvb3JkKHNyYykpLmEpOwor
fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKSW5kZXg6IGtjYW52YXMvZGV2aWNlL3F1YXJ0
ei9maWx0ZXJzL1dLTm9ybWFsTWFwRmlsdGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpkaWZmIC1OcHUga2NhbnZh
cy9kZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tOb3JtYWxNYXBGaWx0ZXIuaAotLS0ga2NhbnZhcy9k
ZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tOb3JtYWxNYXBGaWx0ZXIuaAkxIEphbiAxOTcwIDAwOjAw
OjAwIC0wMDAwCisrKyBrY2FudmFzL2RldmljZS9xdWFydHovZmlsdGVycy9XS05vcm1hbE1hcEZp
bHRlci5oCTEzIE5vdiAyMDA1IDAzOjMxOjI3IC0wMDAwCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDUgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpbXBvcnQgPFF1YXJ0ekNvcmUvQ29yZUltYWdlLmg+CisvL1RPRE86
IFdlIGN1cnJlbnRseSBpZ25vcmUgdGhlIGlucHV0IGtlcm5lbCBsZW5ndGhzCitAaW50ZXJmYWNl
IFdLTm9ybWFsTWFwRmlsdGVyIDogQ0lGaWx0ZXIgeworICAgIENJSW1hZ2UgKmlucHV0SW1hZ2U7
CisgICAgTlNOdW1iZXIgKmlucHV0U3VyZmFjZVNjYWxlOworfQorCisrIChDSUltYWdlICopIG91
dHB1dE5vcm1hbHNXaXRoQnVtcE1hcDooQ0lJbWFnZSAqKWlucHV0SW1hZ2UgYW5kU3VyZmFjZVNj
YWxlOihOU051bWJlciAqKSBpbnB1dFN1cmZhY2VTY2FsZTsKKworQGVuZAorCkluZGV4OiBrY2Fu
dmFzL2RldmljZS9xdWFydHovZmlsdGVycy9XS05vcm1hbE1hcEZpbHRlci5tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
ZGlmZiAtTnB1IGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL1dLTm9ybWFsTWFwRmlsdGVy
Lm0KLS0tIGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL1dLTm9ybWFsTWFwRmlsdGVyLm0J
MSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMAorKysga2NhbnZhcy9kZXZpY2UvcXVhcnR6L2ZpbHRl
cnMvV0tOb3JtYWxNYXBGaWx0ZXIubQkxMyBOb3YgMjAwNSAwMzozNzozMyAtMDAwMApAQCAtMCww
ICsxLDEyMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBBcHBsZSBDb21wdXRlciwgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2ltcG9ydCAiV0tOb3JtYWxNYXBGaWx0
ZXIuaCIKKworc3RhdGljIENJS2VybmVsICpjb252b2x2ZUtlcm5lbCA9IG5pbDsKK3N0YXRpYyBD
SUtlcm5lbCAqbm9ybWFsTWFwS2VybmVsID0gbmlsOworc3RhdGljIFdLTm9ybWFsTWFwRmlsdGVy
ICppbnN0YW5jZSA9IG5pbDsKKworQGltcGxlbWVudGF0aW9uIFdLTm9ybWFsTWFwRmlsdGVyCisK
KysgKHZvaWQpaW5pdGlhbGl6ZQoreworICAgIFtDSUZpbHRlciByZWdpc3RlckZpbHRlck5hbWU6
QCJXS05vcm1hbE1hcCIKKyAgICAgICAgY29uc3RydWN0b3I6c2VsZgorICAgICAgICBjbGFzc0F0
dHJpYnV0ZXM6W05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVjdHNBbmRLZXlzOgorICAg
ICAgICAgICAgQCJXZWJLaXQgTm9ybWFsIE1hcCIsIGtDSUF0dHJpYnV0ZUZpbHRlckRpc3BsYXlO
YW1lLAorICAgICAgICAgICAgW05TQXJyYXkgYXJyYXlXaXRoT2JqZWN0czoga0NJQ2F0ZWdvcnlC
bHVyLCBrQ0lDYXRlZ29yeVZpZGVvLAorICAgICAgICAgICAgICAgIGtDSUNhdGVnb3J5U3RpbGxJ
bWFnZSwga0NJQ2F0ZWdvcnlOb25TcXVhcmVQaXhlbHMsIG5pbF0sIGtDSUF0dHJpYnV0ZUZpbHRl
ckNhdGVnb3JpZXMsICAgICAgIAorICAgICAgICAgICAgW05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5
V2l0aE9iamVjdHNBbmRLZXlzOgorICAgICAgICAgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRo
RG91YmxlOjAuMF0sIGtDSUF0dHJpYnV0ZU1pbiwKKyAgICAgICAgICAgICAgICBbTlNOdW1iZXIg
bnVtYmVyV2l0aERvdWJsZToxLjBdLCBrQ0lBdHRyaWJ1dGVEZWZhdWx0LAorICAgICAgICAgICAg
ICAgIFtOU051bWJlciBudW1iZXJXaXRoRG91YmxlOjEuMF0sIGtDSUF0dHJpYnV0ZUlkZW50aXR5
LAorICAgICAgICAgICAgICAgIGtDSUF0dHJpYnV0ZVR5cGVTY2FsYXIsIGtDSUF0dHJpYnV0ZVR5
cGUsCisgICAgICAgICAgICAgICAgbmlsXSwgQCJpbnB1dFN1cmZhY2VTY2FsZSIsCisgICAgICAg
ICAgICBuaWxdXTsKK30KKworKyAoQ0lGaWx0ZXIgKilmaWx0ZXJXaXRoTmFtZTooTlNTdHJpbmcg
KiluYW1lCit7CisgICAgQ0lGaWx0ZXIgKmZpbHRlcjsKKyAgICBmaWx0ZXIgPSBbW3NlbGYgYWxs
b2NdIGluaXRdOworICAgIHJldHVybiBbZmlsdGVyIGF1dG9yZWxlYXNlXTsKK30KKworLSAoaWQp
aW5pdAoreworICAgIGlmKCFub3JtYWxNYXBLZXJuZWwpIHsKKyAgICAgICAgTlNCdW5kbGUgKmJ1
bmRsZSA9IFtOU0J1bmRsZSBidW5kbGVGb3JDbGFzczpbc2VsZiBjbGFzc11dOworICAgICAgICBO
U1N0cmluZyAqa2VybmVsRmlsZSA9IFtidW5kbGUgcGF0aEZvclJlc291cmNlOkAiV0tOb3JtYWxN
YXBGaWx0ZXIiIG9mVHlwZTpAImNpa2VybmVsIl07CisgICAgICAgIE5TU3RyaW5nICpjb2RlID0g
W05TU3RyaW5nIHN0cmluZ1dpdGhDb250ZW50c09mRmlsZTprZXJuZWxGaWxlXTsKKyAgICAgICAg
TlNBcnJheSAqa2VybmVscyA9IFtDSUtlcm5lbCBrZXJuZWxzV2l0aFN0cmluZzpjb2RlXTsKKyAg
ICAgICAgY29udm9sdmVLZXJuZWwgPSBbW2tlcm5lbHMgb2JqZWN0QXRJbmRleDowXSByZXRhaW5d
OworICAgICAgICBub3JtYWxNYXBLZXJuZWwgPSBbW2tlcm5lbHMgb2JqZWN0QXRJbmRleDoxXSBy
ZXRhaW5dOworICAgIH0KKyAgICByZXR1cm4gW3N1cGVyIGluaXRdOworfQorCistIChOU0FycmF5
ICopeENvbnZvbHZlQXJnc1dpdGhCdW1wTWFwOihDSVNhbXBsZXIgKilidW1wTWFwIHsKKyAgICBy
ZXR1cm4gW05TQXJyYXkgYXJyYXlXaXRoT2JqZWN0czoKKyAgICAgICAgYnVtcE1hcCwKKyAgICAg
ICAgW05TTnVtYmVyIG51bWJlcldpdGhGbG9hdDo0XSwKKyAgICAgICAgW05TTnVtYmVyIG51bWJl
cldpdGhGbG9hdDowXSwKKyAgICAgICAgW0NJVmVjdG9yIHZlY3RvcldpdGhYOiAxIFk6IDIgWjog
MV0sCisgICAgICAgIFtDSVZlY3RvciB2ZWN0b3JXaXRoWDogMCBZOiAwIFo6IDBdLAorICAgICAg
ICBbQ0lWZWN0b3IgdmVjdG9yV2l0aFg6LTEgWTotMiBaOi0xXSwKKyAgICAgICAgbmlsXTsKK30K
KworLSAoTlNBcnJheSAqKXlDb252b2x2ZUFyZ3NXaXRoQnVtcE1hcDooQ0lTYW1wbGVyICopYnVt
cE1hcCB7CisgICAgcmV0dXJuIFtOU0FycmF5IGFycmF5V2l0aE9iamVjdHM6IAorICAgICAgICBi
dW1wTWFwLAorICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aEZsb2F0OjRdLAorICAgICAgICBb
TlNOdW1iZXIgbnVtYmVyV2l0aEZsb2F0OjBdLAorICAgICAgICBbQ0lWZWN0b3IgdmVjdG9yV2l0
aFg6IDEgWTogMCBaOi0xXSwKKyAgICAgICAgW0NJVmVjdG9yIHZlY3RvcldpdGhYOiAyIFk6IDAg
WjotMl0sCisgICAgICAgIFtDSVZlY3RvciB2ZWN0b3JXaXRoWDogMSBZOiAwIFo6LTFdLAorICAg
ICAgICBuaWxdOworfQorCistIChDSUltYWdlICopb3V0cHV0SW1hZ2UKK3sKKyAgICBDSVNhbXBs
ZXIgKmltYWdlID0gW0NJU2FtcGxlciBzYW1wbGVyV2l0aEltYWdlOmlucHV0SW1hZ2VdOworICAg
IE5TRGljdGlvbmFyeSAqYXBwbHlPcHRpb25zID0gW05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0
aE9iamVjdHNBbmRLZXlzOltpbWFnZSBkZWZpbml0aW9uXSwga0NJQXBwbHlPcHRpb25EZWZpbml0
aW9uLCBuaWxdOworICAgIAorICAgIENJSW1hZ2UgKmNvbnZvbHZlWCA9IFtzZWxmIGFwcGx5OmNv
bnZvbHZlS2VybmVsIGFyZ3VtZW50czpbc2VsZiB4Q29udm9sdmVBcmdzV2l0aEJ1bXBNYXA6IG5p
bF0gb3B0aW9uczphcHBseU9wdGlvbnNdOworICAgIENJSW1hZ2UgKmNvbnZvbHZlWSA9IFtzZWxm
IGFwcGx5OmNvbnZvbHZlS2VybmVsIGFyZ3VtZW50czpbc2VsZiB5Q29udm9sdmVBcmdzV2l0aEJ1
bXBNYXA6IG5pbF0gb3B0aW9uczphcHBseU9wdGlvbnNdOworICAgIENJU2FtcGxlciAqc2FtcGxl
clggPSBbQ0lTYW1wbGVyIHNhbXBsZXJXaXRoSW1hZ2U6Y29udm9sdmVYXTsKKyAgICBDSVNhbXBs
ZXIgKnNhbXBsZXJZID0gW0NJU2FtcGxlciBzYW1wbGVyV2l0aEltYWdlOmNvbnZvbHZlWV07Cisg
ICAgCisgICAgTlNBcnJheSAqbm9ybWFsTWFwQXJncyA9IFtOU0FycmF5IGFycmF5V2l0aE9iamVj
dHM6c2FtcGxlclgsIHNhbXBsZXJZLCBpbWFnZSwgaW5wdXRTdXJmYWNlU2NhbGVdOworICAgIHJl
dHVybiBbc2VsZiBhcHBseTpub3JtYWxNYXBLZXJuZWwgYXJndW1lbnRzOm5vcm1hbE1hcEFyZ3Mg
b3B0aW9uczphcHBseU9wdGlvbnNdOworfQorCisrIChDSUltYWdlICopIG91dHB1dE5vcm1hbHNX
aXRoQnVtcE1hcDooQ0lJbWFnZSAqKWluaW1hZ2UgYW5kU3VyZmFjZVNjYWxlOihOU051bWJlciAq
KSBpbnB1dFN1cmZhY2VTY2FsZQoreyAgICAKKyAgICBpZighaW5zdGFuY2UpIGluc3RhbmNlID0g
W1tXS05vcm1hbE1hcEZpbHRlciBhbGxvY10gaW5pdF07CisgICAgCisgICAgQ0lTYW1wbGVyICpp
bWFnZSA9IFtDSVNhbXBsZXIgc2FtcGxlcldpdGhJbWFnZTppbmltYWdlXTsKKyAgICBOU0RpY3Rp
b25hcnkgKmFwcGx5T3B0aW9ucyA9IFtOU0RpY3Rpb25hcnkgZGljdGlvbmFyeVdpdGhPYmplY3Rz
QW5kS2V5czpbaW1hZ2UgZGVmaW5pdGlvbl0sIGtDSUFwcGx5T3B0aW9uRGVmaW5pdGlvbiwgbmls
XTsKKyAgICAKKyAgICBDSUltYWdlICpjb252b2x2ZVggPSBbaW5zdGFuY2UgYXBwbHk6Y29udm9s
dmVLZXJuZWwgYXJndW1lbnRzOltpbnN0YW5jZSB4Q29udm9sdmVBcmdzV2l0aEJ1bXBNYXA6IGlt
YWdlXSBvcHRpb25zOmFwcGx5T3B0aW9uc107CisgICAgQ0lJbWFnZSAqY29udm9sdmVZID0gW2lu
c3RhbmNlIGFwcGx5OmNvbnZvbHZlS2VybmVsIGFyZ3VtZW50czpbaW5zdGFuY2UgeUNvbnZvbHZl
QXJnc1dpdGhCdW1wTWFwOiBpbWFnZV0gb3B0aW9uczphcHBseU9wdGlvbnNdOworICAgIENJU2Ft
cGxlciAqc2FtcGxlclggPSBbQ0lTYW1wbGVyIHNhbXBsZXJXaXRoSW1hZ2U6Y29udm9sdmVYXTsK
KyAgICBDSVNhbXBsZXIgKnNhbXBsZXJZID0gW0NJU2FtcGxlciBzYW1wbGVyV2l0aEltYWdlOmNv
bnZvbHZlWV07CisgICAgCisgICAvLyBOU0FycmF5ICpub3JtYWxNYXBBcmdzID0gW05TQXJyYXkg
YXJyYXlXaXRoT2JqZWN0czpzYW1wbGVyWCwgc2FtcGxlclksIGltYWdlLCBpbnB1dFN1cmZhY2VT
Y2FsZV07CisgICAgcmV0dXJuIFtpbnN0YW5jZSBhcHBseTpub3JtYWxNYXBLZXJuZWwsIHNhbXBs
ZXJYLCBzYW1wbGVyWSwgaW1hZ2UsIGlucHV0U3VyZmFjZVNjYWxlLCBuaWxdOy8vIGFyZ3VtZW50
czpub3JtYWxNYXBBcmdzIG9wdGlvbnM6YXBwbHlPcHRpb25zXV07Cit9CisKK0BlbmQKSW5kZXg6
IGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL1dLUG9pbnRMaWdodEZpbHRlci5jaWtlcm5l
bAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09CmRpZmYgLU5wdSBrY2FudmFzL2RldmljZS9xdWFydHovZmlsdGVycy9XS1Bv
aW50TGlnaHRGaWx0ZXIuY2lrZXJuZWwKLS0tIGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9maWx0ZXJz
L1dLUG9pbnRMaWdodEZpbHRlci5jaWtlcm5lbAkxIEphbiAxOTcwIDAwOjAwOjAwIC0wMDAwCisr
KyBrY2FudmFzL2RldmljZS9xdWFydHovZmlsdGVycy9XS1BvaW50TGlnaHRGaWx0ZXIuY2lrZXJu
ZWwJMTkgTm92IDIwMDUgMDk6MzY6MDMgLTAwMDAKQEAgLTAsMCArMSwxMiBAQAorLyoKK0dlbmVy
YXRlIHRoZSBsaWdodCB2ZWN0b3JzIGZvciBhIHBvaW50IGxpZ2h0IHNvdXJjZQorKi8KKwora2Vy
bmVsIHZlYzQgZ2VuUG9pbnRMaWdodChzYW1wbGVyIG5vcm1hbE1hcCwgdmVjMyBsaWdodFBvcykK
K3sKKwl2ZWMyIHBvcz1zYW1wbGVyQ29vcmQobm9ybWFsTWFwKTsKKwl2ZWMzIFAgPSB2ZWMzKHBv
cy54LCBwb3MueSwgc2FtcGxlKG5vcm1hbE1hcCwgcG9zKS5hKTsKKwl2ZWMzIEwgPSBsaWdodFBv
cy1QOworCUw9TC9zcXJ0KGRvdChMLEwpKTsKKwlyZXR1cm4gdmVjNChMLngsIEwueSwgTC56LCAx
LjApOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKSW5kZXg6IGtjYW52YXMvZGV2aWNl
L3F1YXJ0ei9maWx0ZXJzL1dLUG9pbnRMaWdodEZpbHRlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtTnB1
IGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL1dLUG9pbnRMaWdodEZpbHRlci5oCi0tLSBr
Y2FudmFzL2RldmljZS9xdWFydHovZmlsdGVycy9XS1BvaW50TGlnaHRGaWx0ZXIuaAkxIEphbiAx
OTcwIDAwOjAwOjAwIC0wMDAwCisrKyBrY2FudmFzL2RldmljZS9xdWFydHovZmlsdGVycy9XS1Bv
aW50TGlnaHRGaWx0ZXIuaAkxMyBOb3YgMjAwNSAwMzoyNzowMCAtMDAwMApAQCAtMCwwICsxLDM1
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW1wb3J0IDxRdWFydHpDb3JlL0NvcmVJbWFnZS5o
PgorCitAaW50ZXJmYWNlIFdLUG9pbnRMaWdodEZpbHRlciA6IENJRmlsdGVyIHsKKyAgICBDSUlt
YWdlICAqaW5wdXROb3JtYWxNYXA7CisgICAgQ0lWZWN0b3IgKmlucHV0TGlnaHRQb3NpdGlvbjsK
K30KKworKyAoQ0lJbWFnZSAqKSBvdXRwdXRJbWFnZVdpdGhOb3JtYWxzOihDSUltYWdlICopbm9y
bWFsTWFwIGFuZExpZ2h0UG9zaXRpb246KENJVmVjdG9yICopIGxpZ2h0UG9zaXRpb247CisKK0Bl
bmQKSW5kZXg6IGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL1dLUG9pbnRMaWdodEZpbHRl
ci5tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KZGlmZiAtTnB1IGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL1dL
UG9pbnRMaWdodEZpbHRlci5tCi0tLSBrY2FudmFzL2RldmljZS9xdWFydHovZmlsdGVycy9XS1Bv
aW50TGlnaHRGaWx0ZXIubQkxIEphbiAxOTcwIDAwOjAwOjAwIC0wMDAwCisrKyBrY2FudmFzL2Rl
dmljZS9xdWFydHovZmlsdGVycy9XS1BvaW50TGlnaHRGaWx0ZXIubQkxMyBOb3YgMjAwNSAwNDow
MTozMyAtMDAwMApAQCAtMCwwICsxLDgwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1IEFw
cGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaW1wb3J0ICJXS1BvaW50TGlnaHRGaWx0ZXIuaCIKKworc3RhdGljIENJ
S2VybmVsICpwb2ludExpZ2h0RmlsdGVyID0gbmlsOworc3RhdGljIFdLUG9pbnRMaWdodEZpbHRl
ciAqaW5zdGFuY2UgPSBuaWw7CisKK0BpbXBsZW1lbnRhdGlvbiBXS1BvaW50TGlnaHRGaWx0ZXIK
KworKyAodm9pZClpbml0aWFsaXplCit7CisgICAgW0NJRmlsdGVyIHJlZ2lzdGVyRmlsdGVyTmFt
ZTpAIldLUG9pbnRMaWdodCIKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0cnVjdG9yOiBzZWxm
CisgICAgICAgICAgICAgICAgIGNsYXNzQXR0cmlidXRlczogW05TRGljdGlvbmFyeSBkaWN0aW9u
YXJ5V2l0aE9iamVjdHNBbmRLZXlzOgorICAgICAgICAgICAgICAgICAgICAgQCJXZWJLaXQgUG9p
bnQgTGlnaHQiLCBrQ0lBdHRyaWJ1dGVGaWx0ZXJEaXNwbGF5TmFtZSwKKyAgICAgICAgICAgICAg
ICAgICAgIFtOU0FycmF5IGFycmF5V2l0aE9iamVjdHM6IGtDSUNhdGVnb3J5U3R5bGl6ZSwga0NJ
Q2F0ZWdvcnlWaWRlbywKKyAgICAgICAgICAgICAgICAgICAgICAgICBrQ0lDYXRlZ29yeVN0aWxs
SW1hZ2UsIGtDSUNhdGVnb3J5Tm9uU3F1YXJlUGl4ZWxzLG5pbF0sIGtDSUF0dHJpYnV0ZUZpbHRl
ckNhdGVnb3JpZXMsCisgICAgICAgICAgICAgICAgICAgICBbTlNEaWN0aW9uYXJ5IGRpY3Rpb25h
cnlXaXRoT2JqZWN0c0FuZEtleXM6CisgICAgICAgICAgICAgICAgICAgICAgICAga0NJQXR0cmli
dXRlVHlwZVBvc2l0aW9uMywga0NJQXR0cmlidXRlVHlwZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICBuaWxdLCBAImlucHV0TGlnaHRQb3NpdGlvbiIsCisgICAgICAgICAgICAgICAgICAgICBu
aWxdXTsKK30KKworKyAoQ0lGaWx0ZXIgKilmaWx0ZXJXaXRoTmFtZTooTlNTdHJpbmcgKiluYW1l
Cit7CisgICAgQ0lGaWx0ZXIgKmZpbHRlcjsKKyAgICBmaWx0ZXIgPSBbW3NlbGYgYWxsb2NdIGlu
aXRdOworICAgIHJldHVybiBbZmlsdGVyIGF1dG9yZWxlYXNlXTsKK30KKworLSAoaWQpaW5pdAor
eworICAgIGlmKCFwb2ludExpZ2h0RmlsdGVyKSB7CisgICAgICAgIC8vTlNCdW5kbGUgKmJ1bmRs
ZSA9IFtOU0J1bmRsZSBidW5kbGVGb3JDbGFzczpbc2VsZiBjbGFzc11dOworICAgICAgICAvL05T
U3RyaW5nICprZXJuZWxGaWxlID0gW2J1bmRsZSBwYXRoRm9yUmVzb3VyY2U6QCJXS1BvaW50TGln
aHRGaWx0ZXIiIG9mVHlwZTpAImNpa2VybmVsIl07CisgICAgICAgIE5TU3RyaW5nICprZXJuZWxG
aWxlID0gQCIuL1NWR1N1cHBvcnQva2NhbnZhcy9kZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tQb2lu
dExpZ2h0RmlsdGVyLmNpa2VybmVsIjsKKyAgICAgICAgTlNTdHJpbmcgKmNvZGUgPSBbTlNTdHJp
bmcgc3RyaW5nV2l0aENvbnRlbnRzT2ZGaWxlOmtlcm5lbEZpbGVdOworICAgICAgICBOU0FycmF5
ICprZXJuZWxzID0gW0NJS2VybmVsIGtlcm5lbHNXaXRoU3RyaW5nOmNvZGVdOworICAgICAgICBw
b2ludExpZ2h0RmlsdGVyID0gW1trZXJuZWxzIG9iamVjdEF0SW5kZXg6MF0gcmV0YWluXTsKKyAg
ICB9CisgICAgcmV0dXJuIFtzdXBlciBpbml0XTsKK30KKworLSAoQ0lJbWFnZSAqKW91dHB1dElt
YWdlCit7CisgICAgcmV0dXJuIFtzZWxmIGFwcGx5OnBvaW50TGlnaHRGaWx0ZXIsIGlucHV0Tm9y
bWFsTWFwLCBpbnB1dExpZ2h0UG9zaXRpb24sIG5pbF07Cit9CisgCisrIChDSUltYWdlICopb3V0
cHV0SW1hZ2VXaXRoTm9ybWFsczooQ0lJbWFnZSAqKW5vcm1hbE1hcCBhbmRMaWdodFBvc2l0aW9u
OihDSVZlY3RvciAqKSBsaWdodFBvc2l0aW9uCit7CisgICAgW1dLUG9pbnRMaWdodEZpbHRlciBj
bGFzc107CisgICAgaWYoIWluc3RhbmNlKSBpbnN0YW5jZSA9IFtbV0tQb2ludExpZ2h0RmlsdGVy
IGFsbG9jXSBpbml0XTsKKyAgICByZXR1cm4gW2luc3RhbmNlIGFwcGx5OnBvaW50TGlnaHRGaWx0
ZXIsIFtDSVNhbXBsZXIgc2FtcGxlcldpdGhJbWFnZTpub3JtYWxNYXBdLCBsaWdodFBvc2l0aW9u
LCBuaWxdOworfQorCisKK0BlbmQKSW5kZXg6IGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9maWx0ZXJz
L1dLU3BlY3VsYXJMaWdodGluZ0ZpbHRlci5jaWtlcm5lbAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CmRpZmYgLU5wdSBr
Y2FudmFzL2RldmljZS9xdWFydHovZmlsdGVycy9XS1NwZWN1bGFyTGlnaHRpbmdGaWx0ZXIuY2lr
ZXJuZWwKLS0tIGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL1dLU3BlY3VsYXJMaWdodGlu
Z0ZpbHRlci5jaWtlcm5lbAkxIEphbiAxOTcwIDAwOjAwOjAwIC0wMDAwCisrKyBrY2FudmFzL2Rl
dmljZS9xdWFydHovZmlsdGVycy9XS1NwZWN1bGFyTGlnaHRpbmdGaWx0ZXIuY2lrZXJuZWwJMTkg
Tm92IDIwMDUgMTM6NTE6MTUgLTAwMDAKQEAgLTAsMCArMSwxNSBAQAora2VybmVsIHZlYzQgYmFz
aWMoc2FtcGxlciBpbnB1dE5vcm1hbFZlY3RvcnMsIHNhbXBsZXIgaW5wdXRMaWdodFZlY3RvcnMs
IF9fY29sb3IgaW5wdXRMaWdodGluZ0NvbG9yLCBmbG9hdCBpbnB1dFN1cmZhY2VTY2FsZSwgZmxv
YXQgaW5wdXRTcGVjdWxhckNvbnN0YW50LAorICAgICAgICBmbG9hdCBpbnB1dFNwZWN1bGFyRXhw
b25lbnQsIGZsb2F0IGlucHV0S2VybmVsVW5pdExlbmd0aFgsIGZsb2F0IGlucHV0S2VybmVsVW5p
dExlbmd0aFkpCit7CisJdmVjMiBwb3MgPSBzYW1wbGVyQ29vcmQoaW5wdXRMaWdodFZlY3RvcnMp
OworCXZlYzIgcG9zbiA9IHNhbXBsZXJDb29yZChpbnB1dE5vcm1hbFZlY3RvcnMpOworCXZlYzMg
bCA9IHNhbXBsZShpbnB1dExpZ2h0VmVjdG9ycywgcG9zKS54eXo7CisJdmVjMyBuID0gc2FtcGxl
KGlucHV0Tm9ybWFsVmVjdG9ycywgcG9zbikueHl6OworICAgIHZlYzMgaCA9IGwrdmVjMygwLjAs
MC4wLDEuMCk7CisgICAgaCAvPSBzcXJ0KGRvdChoLGgpKTsKKyAgICBmbG9hdCBuaCA9IGlucHV0
U3BlY3VsYXJDb25zdGFudCpwb3coKGRvdChuLCBoKSksIGlucHV0U3BlY3VsYXJFeHBvbmVudCk7
CisgICAgdmVjNCByZXMgPSBpbnB1dExpZ2h0aW5nQ29sb3IgKiBuaDsKKyAgICByZXMuYSA9IG1h
eChyZXMucixyZXMuZyk7CisgICAgcmVzLmEgPSBtYXgocmVzLmEsIHJlcy5iKTsKKyAgICByZXR1
cm4gcmVzOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKSW5kZXg6IGtjYW52YXMvZGV2
aWNlL3F1YXJ0ei9maWx0ZXJzL1dLU3BlY3VsYXJMaWdodGluZ0ZpbHRlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
ZGlmZiAtTnB1IGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL1dLU3BlY3VsYXJMaWdodGlu
Z0ZpbHRlci5oCi0tLSBrY2FudmFzL2RldmljZS9xdWFydHovZmlsdGVycy9XS1NwZWN1bGFyTGln
aHRpbmdGaWx0ZXIuaAkxIEphbiAxOTcwIDAwOjAwOjAwIC0wMDAwCisrKyBrY2FudmFzL2Rldmlj
ZS9xdWFydHovZmlsdGVycy9XS1NwZWN1bGFyTGlnaHRpbmdGaWx0ZXIuaAkxMSBOb3YgMjAwNSAy
MzozNjowMCAtMDAwMApAQCAtMCwwICsxLDM5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1
IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW1w
b3J0IDxRdWFydHpDb3JlL0NvcmVJbWFnZS5oPgorCisKK0BpbnRlcmZhY2UgV0tTcGVjdWxhckxp
Z2h0aW5nRmlsdGVyIDogQ0lGaWx0ZXIgeworICAgIENJU2FtcGxlciAqaW5wdXROb3JtYWxNYXA7
CisgICAgQ0lTYW1wbGVyICppbnB1dExpZ2h0VmVjdG9yczsKKyAgICBDSUNvbG9yICAqaW5wdXRM
aWdodGluZ0NvbG9yOworICAgIE5TTnVtYmVyICppbnB1dFN1cmZhY2VTY2FsZTsKKyAgICBOU051
bWJlciAqaW5wdXRTcGVjdWxhckNvbnN0YW50OworICAgIE5TTnVtYmVyICppbnB1dFNwZWN1bGFy
RXhwb25lbnQ7CisgICAgTlNOdW1iZXIgKmlucHV0S2VybmVsVW5pdExlbmd0aFg7CisgICAgTlNO
dW1iZXIgKmlucHV0S2VybmVsVW5pdExlbmd0aFk7Cit9CitAZW5kCkluZGV4OiBrY2FudmFzL2Rl
dmljZS9xdWFydHovZmlsdGVycy9XS1NwZWN1bGFyTGlnaHRpbmdGaWx0ZXIubQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
CmRpZmYgLU5wdSBrY2FudmFzL2RldmljZS9xdWFydHovZmlsdGVycy9XS1NwZWN1bGFyTGlnaHRp
bmdGaWx0ZXIubQotLS0ga2NhbnZhcy9kZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tTcGVjdWxhckxp
Z2h0aW5nRmlsdGVyLm0JMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMAorKysga2NhbnZhcy9kZXZp
Y2UvcXVhcnR6L2ZpbHRlcnMvV0tTcGVjdWxhckxpZ2h0aW5nRmlsdGVyLm0JMTEgTm92IDIwMDUg
MjM6MzY6MDAgLTAwMDAKQEAgLTAsMCArMSw5NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
NSBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lt
cG9ydCAiV0tTcGVjdWxhckxpZ2h0aW5nRmlsdGVyLmgiCisKK3N0YXRpYyBDSUtlcm5lbCAqc3Bl
Y3VsYXJMaWdodGluZ0ZpbHRlciA9IG5pbDsKKworQGltcGxlbWVudGF0aW9uIFdLU3BlY3VsYXJM
aWdodGluZ0ZpbHRlcgorCisrICh2b2lkKWluaXRpYWxpemUKK3sKKyAgICBbQ0lGaWx0ZXIgcmVn
aXN0ZXJGaWx0ZXJOYW1lOkAiV0tTcGVjdWxhckxpZ2h0aW5nIiAgCisgICAgICAgIGNvbnN0cnVj
dG9yOiBzZWxmCisgICAgICAgIGNsYXNzQXR0cmlidXRlczogW05TRGljdGlvbmFyeSBkaWN0aW9u
YXJ5V2l0aE9iamVjdHNBbmRLZXlzOgorICAgICAgICAgQCJXZWJLaXQgU3BlY3VsYXIgTGlnaHRp
bmciLCBrQ0lBdHRyaWJ1dGVGaWx0ZXJEaXNwbGF5TmFtZSwKKyAgICAgICAgW05TQXJyYXkgYXJy
YXlXaXRoT2JqZWN0czoga0NJQ2F0ZWdvcnlTdHlsaXplLCBrQ0lDYXRlZ29yeVZpZGVvLAorICAg
ICAgICAgICAga0NJQ2F0ZWdvcnlTdGlsbEltYWdlLCBrQ0lDYXRlZ29yeU5vblNxdWFyZVBpeGVs
cyxuaWxdLCBrQ0lBdHRyaWJ1dGVGaWx0ZXJDYXRlZ29yaWVzLAorICAgICAgICBbTlNEaWN0aW9u
YXJ5IGRpY3Rpb25hcnlXaXRoT2JqZWN0c0FuZEtleXM6CisgICAgICAgICAgICBbQ0lDb2xvciBj
b2xvcldpdGhSZWQ6MS4wIGdyZWVuOjEuMCBibHVlOjEuMCBhbHBoYToxLjBdLAorICAgICAgICAg
ICAgIGtDSUF0dHJpYnV0ZURlZmF1bHQsIG5pbF0sICBAImlucHV0TGlnaHRpbmdDb2xvciIsCisg
ICAgICAgIFtOU0RpY3Rpb25hcnkgZGljdGlvbmFyeVdpdGhPYmplY3RzQW5kS2V5czoKKyAgICAg
ICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoRG91YmxlOjAuMF0sIGtDSUF0dHJpYnV0ZU1pbiwK
KyAgICAgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoRG91YmxlOjEuMF0sIGtDSUF0dHJpYnV0
ZURlZmF1bHQsCisgICAgICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aERvdWJsZToxLjBdLCBr
Q0lBdHRyaWJ1dGVJZGVudGl0eSwKKyAgICAgICAgICAgIGtDSUF0dHJpYnV0ZVR5cGVTY2FsYXIs
IGtDSUF0dHJpYnV0ZVR5cGUsCisgICAgICAgICAgICBuaWxdLCBAImlucHV0U3VyZmFjZVNjYWxl
IiwKKyAgICAgICAgW05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVjdHNBbmRLZXlzOgor
ICAgICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhEb3VibGU6MC4wXSwga0NJQXR0cmlidXRl
TWluLAorICAgICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhEb3VibGU6MS4wXSwga0NJQXR0
cmlidXRlRGVmYXVsdCwKKyAgICAgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoRG91YmxlOjEu
MF0sIGtDSUF0dHJpYnV0ZUlkZW50aXR5LAorICAgICAgICAgICAga0NJQXR0cmlidXRlVHlwZVNj
YWxhciwga0NJQXR0cmlidXRlVHlwZSwKKyAgICAgICAgICAgIG5pbF0sIEAiaW5wdXRTcGVjdWxh
ckNvbnN0YW50IiwKKyAgICAgICAgW05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVjdHNB
bmRLZXlzOgorICAgICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhEb3VibGU6MC4wXSwga0NJ
QXR0cmlidXRlTWluLAorICAgICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhEb3VibGU6MTI4
LjBdLCBrQ0lBdHRyaWJ1dGVNaW4sCisgICAgICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aERv
dWJsZToxLjBdLCBrQ0lBdHRyaWJ1dGVEZWZhdWx0LAorICAgICAgICAgICAgW05TTnVtYmVyIG51
bWJlcldpdGhEb3VibGU6MS4wXSwga0NJQXR0cmlidXRlSWRlbnRpdHksCisgICAgICAgICAgICBr
Q0lBdHRyaWJ1dGVUeXBlU2NhbGFyLCBrQ0lBdHRyaWJ1dGVUeXBlLAorICAgICAgICAgICAgbmls
XSwgQCJpbnB1dFNwZWN1bGFyRXhwb25lbnQiLAorICAgICAgICBbTlNEaWN0aW9uYXJ5IGRpY3Rp
b25hcnlXaXRoT2JqZWN0c0FuZEtleXM6CisgICAgICAgICAgICBrQ0lBdHRyaWJ1dGVUeXBlT2Zm
c2V0LCBrQ0lBdHRyaWJ1dGVUeXBlLAorICAgICAgICAgICAgbmlsXSwgQCJpbnB1dEtlcm5lbFVu
aXRMZW5ndGgiLAorICAgICAgICBuaWxdXTsKK30KKworKyAoQ0lGaWx0ZXIgKilmaWx0ZXJXaXRo
TmFtZTooTlNTdHJpbmcgKiluYW1lCit7CisgICAgQ0lGaWx0ZXIgKmZpbHRlcjsKKyAgICBmaWx0
ZXIgPSBbW3NlbGYgYWxsb2NdIGluaXRdOworICAgIHJldHVybiBbZmlsdGVyIGF1dG9yZWxlYXNl
XTsKK30KKworLSAoaWQpaW5pdAoreworICAgIGlmKCFzcGVjdWxhckxpZ2h0aW5nRmlsdGVyKSB7
CisvLyAgICAgICAgTlNCdW5kbGUgKmJ1bmRsZSA9IFtOU0J1bmRsZSBidW5kbGVGb3JDbGFzczpb
c2VsZiBjbGFzc11dOworLy8gICAgICAgIE5TU3RyaW5nICprZXJuZWxGaWxlID0gW2J1bmRsZSBw
YXRoRm9yUmVzb3VyY2U6QCJXS1NwZWN1bGFyTGlnaHRpbmdGaWx0ZXIiIG9mVHlwZTpAImNpa2Vy
bmVsIl07CisgICAgICAgIE5TU3RyaW5nICprZXJuZWxGaWxlID0gQCIuL1NWR1N1cHBvcnQva2Nh
bnZhcy9kZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tTcGVjdWxhckxpZ2h0aW5nRmlsdGVyLmNpa2Vy
bmVsIjsKKyAgICAgICAgTlNTdHJpbmcgKmNvZGUgPSBbTlNTdHJpbmcgc3RyaW5nV2l0aENvbnRl
bnRzT2ZGaWxlOmtlcm5lbEZpbGVdOworICAgICAgICBOU0FycmF5ICprZXJuZWxzID0gW0NJS2Vy
bmVsIGtlcm5lbHNXaXRoU3RyaW5nOmNvZGVdOworICAgICAgICBzcGVjdWxhckxpZ2h0aW5nRmls
dGVyID0gW1trZXJuZWxzIG9iamVjdEF0SW5kZXg6MF0gcmV0YWluXTsKKyAgICB9CisgICAgcmV0
dXJuIFtzdXBlciBpbml0XTsKK30KKworLSAoQ0lJbWFnZSAqKW91dHB1dEltYWdlCit7CisgICAg
cmV0dXJuIFtzZWxmIGFwcGx5OnNwZWN1bGFyTGlnaHRpbmdGaWx0ZXIsIGlucHV0Tm9ybWFsTWFw
LCBpbnB1dExpZ2h0VmVjdG9ycywgaW5wdXRMaWdodGluZ0NvbG9yLCBpbnB1dFN1cmZhY2VTY2Fs
ZSwgaW5wdXRTcGVjdWxhckNvbnN0YW50LAorICAgICAgICBpbnB1dFNwZWN1bGFyRXhwb25lbnQs
IGlucHV0S2VybmVsVW5pdExlbmd0aFgsIGlucHV0S2VybmVsVW5pdExlbmd0aFksIG5pbF07Cit9
CisKK0BlbmQKSW5kZXg6IGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL1dLU3BvdExpZ2h0
RmlsdGVyLmNpa2VybmVsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtTnB1IGtjYW52YXMvZGV2aWNlL3F1YXJ0
ei9maWx0ZXJzL1dLU3BvdExpZ2h0RmlsdGVyLmNpa2VybmVsCi0tLSBrY2FudmFzL2RldmljZS9x
dWFydHovZmlsdGVycy9XS1Nwb3RMaWdodEZpbHRlci5jaWtlcm5lbAkxIEphbiAxOTcwIDAwOjAw
OjAwIC0wMDAwCisrKyBrY2FudmFzL2RldmljZS9xdWFydHovZmlsdGVycy9XS1Nwb3RMaWdodEZp
bHRlci5jaWtlcm5lbAkxOSBOb3YgMjAwNSAwOTozNzozMyAtMDAwMApAQCAtMCwwICsxLDEyIEBA
CitrZXJuZWwgdmVjNCBzcG90TGlnaHRGaWx0ZXIoc2FtcGxlciBsaWdodFZlY3RvcnMsIHZlYzMg
bGlnaHREaXJlY3Rpb24sIGZsb2F0IHNwZWN1bGFyRXhwb25lbnQsIGZsb2F0IGNvc0N1dG9mZkFu
Z2xlKQoreworICAgIHZlYzIgcG9zPXNhbXBsZXJDb29yZChsaWdodFZlY3RvcnMpOworICAgIHZl
YzMgbCA9IHNhbXBsZShsaWdodFZlY3RvcnMsIHBvcykueHl6OworICAgIGwvPXNxcnQoZG90KGws
bCkpOworICAgIGZsb2F0IHNsPS0oZG90KGxpZ2h0RGlyZWN0aW9uLGwpKTsKKyAgICBzbD1tYXgo
c2wsMC4wKTsKKyAgICAvL3BlcmZvcm0gY3V0b2ZmCisgICAgZmxvYXQgb3V0c2lkZUN1dG9mZiA9
IGNvbXBhcmUoKC1zbCthYnMoY29zQ3V0b2ZmQW5nbGUpKSwgMS4wLCAwLjApOworICAgIHNsPXBv
dyhzbCxzcGVjdWxhckV4cG9uZW50KTsKKyAgICByZXR1cm4gdmVjNChsLngsbC55LGwueixvdXRz
aWRlQ3V0b2ZmKnNsKTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCkluZGV4OiBrY2Fu
dmFzL2RldmljZS9xdWFydHovZmlsdGVycy9XS1Nwb3RMaWdodEZpbHRlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
ZGlmZiAtTnB1IGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL1dLU3BvdExpZ2h0RmlsdGVy
LmgKLS0tIGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL1dLU3BvdExpZ2h0RmlsdGVyLmgJ
MSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMAorKysga2NhbnZhcy9kZXZpY2UvcXVhcnR6L2ZpbHRl
cnMvV0tTcG90TGlnaHRGaWx0ZXIuaAkxMyBOb3YgMjAwNSAxMDo0ODoyNCAtMDAwMApAQCAtMCww
ICsxLDM2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1IEFwcGxlIENvbXB1dGVyLCBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW1wb3J0IDxRdWFydHpDb3JlL0NvcmVJ
bWFnZS5oPgorCitAaW50ZXJmYWNlIFdLU3BvdExpZ2h0RmlsdGVyIDogQ0lGaWx0ZXIgeworICAg
IENJSW1hZ2UgICppbnB1dExpZ2h0VmVjdG9yczsKKyAgICBDSVZlY3RvciAqaW5wdXRMaWdodERp
cmVjdGlvbjsKKyAgICBOU051bWJlciAqaW5wdXRTcGVjdWxhckV4cG9uZW50OworICAgIE5TTnVt
YmVyICppbnB1dExpbWl0aW5nQ29uZUFuZ2xlOworfQorKyAoQ0lJbWFnZSAqKW91dHB1dEltYWdl
V2l0aExpZ2h0VmVjdG9yczooQ0lTYW1wbGVyICopbGlnaHRWZWN0b3JzIGFuZExpZ2h0RGlyZWN0
aW9uOihDSVZlY3RvciAqKSBsaWdodERpcmVjdGlvbiBhbmRTcGVjdWxhckV4cG9uZW50OihmbG9h
dCkgc3BlY3VsYXJFeHBvbmVudCBhbmRDb3NDdXRPZmZBbmdsZTogKGZsb2F0KSBjb3NjdXRvZmY7
CisKK0BlbmQKSW5kZXg6IGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL1dLU3BvdExpZ2h0
RmlsdGVyLm0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQpkaWZmIC1OcHUga2NhbnZhcy9kZXZpY2UvcXVhcnR6L2ZpbHRl
cnMvV0tTcG90TGlnaHRGaWx0ZXIubQotLS0ga2NhbnZhcy9kZXZpY2UvcXVhcnR6L2ZpbHRlcnMv
V0tTcG90TGlnaHRGaWx0ZXIubQkxIEphbiAxOTcwIDAwOjAwOjAwIC0wMDAwCisrKyBrY2FudmFz
L2RldmljZS9xdWFydHovZmlsdGVycy9XS1Nwb3RMaWdodEZpbHRlci5tCTE5IE5vdiAyMDA1IDEz
OjEyOjA0IC0wMDAwCkBAIC0wLDAgKzEsODcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUg
QXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisgCisjaW1w
b3J0ICJXS1Nwb3RMaWdodEZpbHRlci5oIgorCitzdGF0aWMgQ0lLZXJuZWwgKnNwb3RMaWdodEZp
bHRlciA9IG5pbDsKK3N0YXRpYyBXS1Nwb3RMaWdodEZpbHRlciAqaW5zdGFuY2UgPSBuaWw7CisK
K0BpbXBsZW1lbnRhdGlvbiBXS1Nwb3RMaWdodEZpbHRlcgorCisrICh2b2lkKWluaXRpYWxpemUK
K3sKKyAgICBbQ0lGaWx0ZXIgcmVnaXN0ZXJGaWx0ZXJOYW1lOkAiV0tTcG90TGlnaHQiCisgICAg
ICAgIGNvbnN0cnVjdG9yOiBzZWxmCisgICAgICAgIGNsYXNzQXR0cmlidXRlczogW05TRGljdGlv
bmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVjdHNBbmRLZXlzOgorICAgICAgICAgQCJXZWJLaXQgU3Bv
dCBMaWdodCIsIGtDSUF0dHJpYnV0ZUZpbHRlckRpc3BsYXlOYW1lLAorICAgICAgICBbTlNBcnJh
eSBhcnJheVdpdGhPYmplY3RzOiBrQ0lDYXRlZ29yeVN0eWxpemUsIGtDSUNhdGVnb3J5VmlkZW8s
CisgICAgICAgICAgICBrQ0lDYXRlZ29yeVN0aWxsSW1hZ2UsIGtDSUNhdGVnb3J5Tm9uU3F1YXJl
UGl4ZWxzLG5pbF0sIGtDSUF0dHJpYnV0ZUZpbHRlckNhdGVnb3JpZXMsCisgICAgICAgIFtOU0Rp
Y3Rpb25hcnkgZGljdGlvbmFyeVdpdGhPYmplY3RzQW5kS2V5czoKKyAgICAgICAgICAgIGtDSUF0
dHJpYnV0ZVR5cGVQb3NpdGlvbjMsIGtDSUF0dHJpYnV0ZVR5cGUsCisgICAgICAgICAgICBuaWxd
LCBAImlucHV0TGlnaHREaXJlY3Rpb24iLAorICAgICAgICBbTlNEaWN0aW9uYXJ5IGRpY3Rpb25h
cnlXaXRoT2JqZWN0c0FuZEtleXM6CisgICAgICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aERv
dWJsZToxLjBdLCBrQ0lBdHRyaWJ1dGVEZWZhdWx0LAorICAgICAgICAgICAgW05TTnVtYmVyIG51
bWJlcldpdGhEb3VibGU6MS4wXSwga0NJQXR0cmlidXRlSWRlbnRpdHksCisgICAgICAgICAgICBr
Q0lBdHRyaWJ1dGVUeXBlU2NhbGFyLCBrQ0lBdHRyaWJ1dGVUeXBlLAorICAgICAgICAgICAgbmls
XSwgQCJpbnB1dFNwZWN1bGFyRXhwb25lbnQiLAorICAgICAgICBbTlNEaWN0aW9uYXJ5IGRpY3Rp
b25hcnlXaXRoT2JqZWN0c0FuZEtleXM6CisgICAgICAgICAgICBrQ0lBdHRyaWJ1dGVUeXBlQW5n
bGUsIGtDSUF0dHJpYnV0ZVR5cGUsCisgICAgICAgICAgICBuaWxdLCBAImlucHV0TGltaXRpbmdD
b25lQW5nbGUiLAorICAgICAgICBuaWxdXTsKK30KKworKyAoQ0lGaWx0ZXIgKilmaWx0ZXJXaXRo
TmFtZTooTlNTdHJpbmcgKiluYW1lCit7CisgICAgQ0lGaWx0ZXIgKmZpbHRlcjsKKyAgICBmaWx0
ZXIgPSBbW3NlbGYgYWxsb2NdIGluaXRdOworICAgIHJldHVybiBbZmlsdGVyIGF1dG9yZWxlYXNl
XTsKK30KKworLSAoaWQpaW5pdAoreworICAgIGlmKCFzcG90TGlnaHRGaWx0ZXIpIHsKKyAgICAg
ICAgTlNCdW5kbGUgKmJ1bmRsZSA9IFtOU0J1bmRsZSBidW5kbGVGb3JDbGFzczpbc2VsZiBjbGFz
c11dOworICAgICAgICBOU1N0cmluZyAqa2VybmVsRmlsZSA9IFtidW5kbGUgcGF0aEZvclJlc291
cmNlOkAiV0tTcG90TGlnaHRGaWx0ZXIiIG9mVHlwZTpAImNpa2VybmVsIl07CisgICAgICAgIE5T
U3RyaW5nICpjb2RlID0gW05TU3RyaW5nIHN0cmluZ1dpdGhDb250ZW50c09mRmlsZTprZXJuZWxG
aWxlXTsKKyAgICAgICAgTlNBcnJheSAqa2VybmVscyA9IFtDSUtlcm5lbCBrZXJuZWxzV2l0aFN0
cmluZzpjb2RlXTsKKyAgICAgICAgc3BvdExpZ2h0RmlsdGVyID0gW1trZXJuZWxzIG9iamVjdEF0
SW5kZXg6MF0gcmV0YWluXTsKKyAgICB9CisgICAgcmV0dXJuIFtzdXBlciBpbml0XTsKK30KKwor
LSAoQ0lJbWFnZSAqKW91dHB1dEltYWdlCit7CisgICAgZmxvYXQgY29zY3V0b2ZmID0gY29zKFtp
bnB1dExpbWl0aW5nQ29uZUFuZ2xlIGZsb2F0VmFsdWVdKTsKKyAgICByZXR1cm4gW3NlbGYgYXBw
bHk6c3BvdExpZ2h0RmlsdGVyLCBpbnB1dExpZ2h0VmVjdG9ycywgaW5wdXRMaWdodERpcmVjdGlv
biwgaW5wdXRTcGVjdWxhckV4cG9uZW50LCBbTlNOdW1iZXIgbnVtYmVyV2l0aEZsb2F0OmNvc2N1
dG9mZl0sIG5pbF07Cit9CisKKysgKENJSW1hZ2UgKilvdXRwdXRJbWFnZVdpdGhMaWdodFZlY3Rv
cnM6KENJU2FtcGxlciAqKWxpZ2h0VmVjdG9ycyBhbmRMaWdodERpcmVjdGlvbjooQ0lWZWN0b3Ig
KikgbGlnaHREaXJlY3Rpb24gYW5kU3BlY3VsYXJFeHBvbmVudDooZmxvYXQpIHNwZWN1bGFyRXhw
b25lbnQgYW5kQ29zQ3V0T2ZmQW5nbGU6IChmbG9hdCkgY29zY3V0b2ZmCit7CisgICAgW1dLU3Bv
dExpZ2h0RmlsdGVyIGluaXRpYWxpemVdOworICAgIGlmKCFpbnN0YW5jZSkgaW5zdGFuY2UgPSBb
W1dLU3BvdExpZ2h0RmlsdGVyIGFsbG9jXSBpbml0XTsKKyAgICByZXR1cm4gW2luc3RhbmNlIGFw
cGx5OnNwb3RMaWdodEZpbHRlciwgbGlnaHRWZWN0b3JzLCBsaWdodERpcmVjdGlvbiwgW05TTnVt
YmVyIG51bWJlcldpdGhGbG9hdDpzcGVjdWxhckV4cG9uZW50XSwgW05TTnVtYmVyIG51bWJlcldp
dGhGbG9hdDpjb3NjdXRvZmZdICwgbmlsXTsKK30KKworQGVuZApJbmRleDoga2NhbnZhcy9kZXZp
Y2UvcXVhcnR6L0tDYW52YXNGaWx0ZXJRdWFydHouaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zz
L3Jvb3QvU1ZHU3VwcG9ydC9rY2FudmFzL2RldmljZS9xdWFydHovS0NhbnZhc0ZpbHRlclF1YXJ0
ei5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjMKZGlmZiAtcCAtdSAtcjEuMyBrY2FudmFzL2Rl
dmljZS9xdWFydHovS0NhbnZhc0ZpbHRlclF1YXJ0ei5oCi0tLSBrY2FudmFzL2RldmljZS9xdWFy
dHovS0NhbnZhc0ZpbHRlclF1YXJ0ei5oCTEgU2VwIDIwMDUgMDc6MzI6NTQgLTAwMDAJMS4zCisr
KyBrY2FudmFzL2RldmljZS9xdWFydHovS0NhbnZhc0ZpbHRlclF1YXJ0ei5oCTIwIE5vdiAyMDA1
IDAxOjE1OjAxIC0wMDAwCkBAIC03MywxMSArNzMsMjEgQEAgcHVibGljOgogLy8gICAgdmlydHVh
bCBDSUZpbHRlciAqZ2V0Q0lGaWx0ZXIoS0NhbnZhc0ZpbHRlclF1YXJ0eiAqcXVhcnR6RmlsdGVy
KSBjb25zdDsKIC8vfTsKIAorY2xhc3MgS0NhbnZhc0ZFQ29udm9sdmVNYXRyaXhRdWFydHogOiBw
dWJsaWMgS0NhbnZhc0ZFQ29udm9sdmVNYXRyaXggeworcHVibGljOgorICAgIHZpcnR1YWwgQ0lG
aWx0ZXIgKmdldENJRmlsdGVyKEtDYW52YXNGaWx0ZXJRdWFydHogKnF1YXJ0ekZpbHRlcikgY29u
c3Q7Cit9OworCiBjbGFzcyBLQ2FudmFzRkVDb21wb3NpdGVRdWFydHogOiBwdWJsaWMgS0NhbnZh
c0ZFQ29tcG9zaXRlIHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIENJRmlsdGVyICpnZXRDSUZpbHRl
cihLQ2FudmFzRmlsdGVyUXVhcnR6ICpxdWFydHpGaWx0ZXIpIGNvbnN0OwogfTsKIAorY2xhc3Mg
S0NhbnZhc0ZFRGlmZnVzZUxpZ2h0aW5nUXVhcnR6IDogcHVibGljIEtDYW52YXNGRURpZmZ1c2VM
aWdodGluZyB7CitwdWJsaWM6CisgICAgdmlydHVhbCBDSUZpbHRlciAqZ2V0Q0lGaWx0ZXIoS0Nh
bnZhc0ZpbHRlclF1YXJ0eiAqcXVhcnR6RmlsdGVyKSBjb25zdDsKK307CisKIGNsYXNzIEtDYW52
YXNGRUZsb29kUXVhcnR6IDogcHVibGljIEtDYW52YXNGRUZsb29kIHsKIHB1YmxpYzoKICAgICB2
aXJ0dWFsIENJRmlsdGVyICpnZXRDSUZpbHRlcihLQ2FudmFzRmlsdGVyUXVhcnR6ICpxdWFydHpG
aWx0ZXIpIGNvbnN0OwpAQCAtOTMsNyArMTAzLDYgQEAgcHVibGljOgogICAgIHZpcnR1YWwgQ0lG
aWx0ZXIgKmdldENJRmlsdGVyKEtDYW52YXNGaWx0ZXJRdWFydHogKnF1YXJ0ekZpbHRlcikgY29u
c3Q7CiB9OwogCi0KIGNsYXNzIEtDYW52YXNGRU1lcmdlUXVhcnR6IDogcHVibGljIEtDYW52YXNG
RU1lcmdlIHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIENJRmlsdGVyICpnZXRDSUZpbHRlcihLQ2Fu
dmFzRmlsdGVyUXVhcnR6ICpxdWFydHpGaWx0ZXIpIGNvbnN0OwpAQCAtMTA0LDYgKzExMywxMSBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCBDSUZpbHRlciAqZ2V0Q0lGaWx0ZXIoS0NhbnZhc0ZpbHRl
clF1YXJ0eiAqcXVhcnR6RmlsdGVyKSBjb25zdDsKIH07CiAKK2NsYXNzIEtDYW52YXNGRVNwZWN1
bGFyTGlnaHRpbmdRdWFydHogOiBwdWJsaWMgS0NhbnZhc0ZFU3BlY3VsYXJMaWdodGluZyB7Citw
dWJsaWM6CisgICAgdmlydHVhbCBDSUZpbHRlciAqZ2V0Q0lGaWx0ZXIoS0NhbnZhc0ZpbHRlclF1
YXJ0eiAqcXVhcnR6RmlsdGVyKSBjb25zdDsKK307CisKIGNsYXNzIEtDYW52YXNGRVRpbGVRdWFy
dHogOiBwdWJsaWMgS0NhbnZhc0ZFVGlsZSB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCBDSUZpbHRl
ciAqZ2V0Q0lGaWx0ZXIoS0NhbnZhc0ZpbHRlclF1YXJ0eiAqcXVhcnR6RmlsdGVyKSBjb25zdDsK
SW5kZXg6IGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9LQ2FudmFzRmlsdGVyUXVhcnR6Lm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tjYW52YXMvZGV2aWNlL3F1YXJ0
ei9LQ2FudmFzRmlsdGVyUXVhcnR6Lm1tLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEwCmRpZmYg
LXAgLXUgLXIxLjEwIGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9LQ2FudmFzRmlsdGVyUXVhcnR6Lm1t
Ci0tLSBrY2FudmFzL2RldmljZS9xdWFydHovS0NhbnZhc0ZpbHRlclF1YXJ0ei5tbQk1IE9jdCAy
MDA1IDA1OjM2OjUxIC0wMDAwCTEuMTAKKysrIGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9LQ2FudmFz
RmlsdGVyUXVhcnR6Lm1tCTIwIE5vdiAyMDA1IDAxOjE1OjAzIC0wMDAwCkBAIC0zMSw2ICszMSwx
MyBAQAogI2ltcG9ydCAiS1JlbmRlcmluZ0RldmljZVF1YXJ0ei5oIgogI2ltcG9ydCAiUXVhcnR6
U3VwcG9ydC5oIgogI2ltcG9ydCAiS1dRRXhjZXB0aW9ucy5oIgorI2ltcG9ydCAiV0tEaWZmdXNl
TGlnaHRpbmdGaWx0ZXIuaCIKKyNpbXBvcnQgIldLU3BlY3VsYXJMaWdodGluZ0ZpbHRlci5oIgor
I2ltcG9ydCAiV0tTcG90TGlnaHRGaWx0ZXIuaCIKKyNpbXBvcnQgIldLUG9pbnRMaWdodEZpbHRl
ci5oIgorI2ltcG9ydCAiV0tEaXN0YW50TGlnaHRGaWx0ZXIuaCIKKyNpbXBvcnQgIldLTm9ybWFs
TWFwRmlsdGVyLmgiCisjaW1wb3J0ICJXS0FyaXRobWV0aWNGaWx0ZXIuaCIKIAogI2ltcG9ydCA8
UXVhcnR6Q29yZS9RdWFydHpDb3JlLmg+CiAKQEAgLTQwLDEzICs0NywyMiBAQAogCiBzdGF0aWMg
UVN0cmluZyBLQ1ByZXZpb3VzRmlsdGVyT3V0cHV0TmFtZSA9IFFTdHJpbmc6OmZyb21MYXRpbjEo
Il9fcHJldmlvdXNPdXRwdXRfXyIpOwogCi0vL3N0YXRpYyBDSUNvbG9yICpjaUNvbG9yKGNvbnN0
IFFDb2xvciAmYykKLS8vewotLy8gICAgQ0dDb2xvclJlZiBjb2xvckNHID0gY2dDb2xvcihjKTsK
LS8vICAgIENJQ29sb3IgKmNvbG9yQ0kgPSBbQ0lDb2xvciBjb2xvcldpdGhDR0NvbG9yOmNvbG9y
Q0ddOwotLy8gICAgQ0dDb2xvclJlbGVhc2UoY29sb3JDRyk7Ci0vLyAgICByZXR1cm4gY29sb3JD
STsKLS8vfQorc3RhdGljIGlubGluZSBDSUNvbG9yICpjaUNvbG9yKGNvbnN0IFFDb2xvciAmYykK
K3sKKyAgICBDR0NvbG9yUmVmIGNvbG9yQ0cgPSBjZ0NvbG9yKGMpOworICAgIENJQ29sb3IgKmNv
bG9yQ0kgPSBbQ0lDb2xvciBjb2xvcldpdGhDR0NvbG9yOmNvbG9yQ0ddOworICAgIENHQ29sb3JS
ZWxlYXNlKGNvbG9yQ0cpOworICAgIHJldHVybiBjb2xvckNJOworfQorCitzdGF0aWMgaW5saW5l
IENJVmVjdG9yICpjaVZlY3RvcihLQ2FudmFzUG9pbnQzRiBwb2ludCkgeworICAgIHJldHVybiBb
Q0lWZWN0b3IgdmVjdG9yV2l0aFg6cG9pbnQueCgpIFk6cG9pbnQueSgpIFo6cG9pbnQueigpXTsK
K30KKworc3RhdGljIGlubGluZSBDSVZlY3RvciAqY2lWZWN0b3IoUVBvaW50RiBwb2ludCkgewor
ICAgIHJldHVybiBbQ0lWZWN0b3IgdmVjdG9yV2l0aFg6cG9pbnQueCgpIFk6cG9pbnQueSgpXTsK
K30KKwogCiBLQ2FudmFzRmlsdGVyUXVhcnR6OjpLQ2FudmFzRmlsdGVyUXVhcnR6KCkgOiBtX3N0
b3JlZENHQ29udGV4dCgwKSwgbV9maWx0ZXJDSUNvbnRleHQoMCksIG1fZmlsdGVyQ0dMYXllcigw
KSwgbV9pbWFnZXNCeU5hbWUoMCkKIHsKQEAgLTI3NCw3ICsyOTAsNiBAQCBDSUltYWdlICpLQ2Fu
dmFzRmlsdGVyUXVhcnR6OjppbnB1dEltYWdlCiAjcHJhZ21hIG1hcmsgLQogI3ByYWdtYSBtYXJr
IEZpbHRlciBFbGVtZW50cwogCi0KICNkZWZpbmUgRkVfUVVBUlRaX1NFVFVQX0lOUFVUKG5hbWUp
IFwKICAgICBDSUltYWdlICppbnB1dEltYWdlID0gcXVhcnR6RmlsdGVyLT5pbnB1dEltYWdlKHRo
aXMpOyBcCiAgICAgRkVfUVVBUlRaX0NIRUNLX0lOUFVUKGlucHV0SW1hZ2UpIFwKQEAgLTQ4NSwx
MCArNTAwLDE1IEBAIENJRmlsdGVyICpLQ2FudmFzRkVDb21wb3NpdGVRdWFydHo6OmdldEMKIAlj
YXNlIENPX1hPUjoKIAkJLy9GSVhNRTogSSdtIG5vdCBzdXJlIHRoaXMgaXMgcmlnaHQuLi4KIAkJ
ZmlsdGVyID0gW0NJRmlsdGVyIGZpbHRlcldpdGhOYW1lOkAiQ0lFeGNsdXNpb25CbGVuZE1vZGUi
XTsKKyAgICAgICAgICAgICAgICBicmVhazsKIAljYXNlIENPX0FSSVRITUVUSUM6Ci0JCU5TTG9n
KEAiV2FybmluZzogYXJpdGhtZXRpYyBjb21wb3NpdGluZyBtb2RlIG5vdCB5ZXQgc3VwcG9ydGVk
IGluIFF1YXJ0ei4iKTsKLQkJLy8gdGhpcyB3b3VsZCBiZSB3aGVyZSB3ZSB1c2UgdGhlIGsgdmFs
dWVzLi4uCi0JCXJldHVybiBuaWw7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIE5TTG9n
KEAiV2FybmluZzogYXJpdGhtZXRpYyBjb21wb3NpdGluZyBtb2RlIG5vdCB5ZXQgc3VwcG9ydGVk
IGluIFF1YXJ0ei4iKTsKKyAgICAgICAgICAgIC8vIHRoaXMgd291bGQgYmUgd2hlcmUgd2UgdXNl
IHRoZSBrIHZhbHVlcy4uLgorICAgICAgICAgICAgLy8gcmV0dXJuIG5pbDsKKyAgICAgICAgICAg
ICAgICBbV0tBcml0aG1ldGljRmlsdGVyIGNsYXNzXTsKKyAgICAgICAgICAgICAgICBmaWx0ZXIg
PSBbQ0lGaWx0ZXIgZmlsdGVyV2l0aE5hbWU6QCJXS0FyaXRobWV0aWNGaWx0ZXIiXTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKIAl9CiAJCiAJW2ZpbHRlciBzZXREZWZhdWx0c107CkBAIC00OTgs
MTAgKzUxOCwxMzAgQEAgQ0lGaWx0ZXIgKktDYW52YXNGRUNvbXBvc2l0ZVF1YXJ0ejo6Z2V0Qwog
CUZFX1FVQVJUWl9DSEVDS19JTlBVVChiYWNrZ3JvdW5kSW1hZ2UpOwogCVtmaWx0ZXIgc2V0VmFs
dWU6aW5wdXRJbWFnZSBmb3JLZXk6QCJpbnB1dEltYWdlIl07CiAJW2ZpbHRlciBzZXRWYWx1ZTpi
YWNrZ3JvdW5kSW1hZ2UgZm9yS2V5OkAiaW5wdXRCYWNrZ3JvdW5kSW1hZ2UiXTsKLQkKKwlpZiAo
b3BlcmF0aW9uKCkgPT0gQ09fQVJJVEhNRVRJQykgeworICAgICAgICAgICAgW2ZpbHRlciBzZXRW
YWx1ZTpbTlNOdW1iZXIgbnVtYmVyV2l0aEZsb2F0OmsxKCldIGZvcktleTpAImlucHV0SzEiXTsK
KyAgICAgICAgICAgIFtmaWx0ZXIgc2V0VmFsdWU6W05TTnVtYmVyIG51bWJlcldpdGhGbG9hdDpr
MigpXSBmb3JLZXk6QCJpbnB1dEsyIl07CisgICAgICAgICAgICBbZmlsdGVyIHNldFZhbHVlOltO
U051bWJlciBudW1iZXJXaXRoRmxvYXQ6azMoKV0gZm9yS2V5OkAiaW5wdXRLMyJdOworICAgICAg
ICAgICAgW2ZpbHRlciBzZXRWYWx1ZTpbTlNOdW1iZXIgbnVtYmVyV2l0aEZsb2F0Oms0KCldIGZv
cktleTpAImlucHV0SzQiXTsKKyAgICAgICAgfQogCUZFX1FVQVJUWl9PVVRQVVRfUkVUVVJOOwog
fQogCitzdGF0aWMgaW5saW5lIENJRmlsdGVyICpnZXRQb2ludExpZ2h0VmVjdG9ycyhDSUltYWdl
ICogbm9ybWFscywgQ0lWZWN0b3IgKiBsaWdodFBvc2l0aW9uKQoreworICAgIENJRmlsdGVyICpm
aWx0ZXIgPSBuaWw7CisgICAgS1dRX0JMT0NLX0VYQ0VQVElPTlMKKyAgICBmaWx0ZXIgPSBbQ0lG
aWx0ZXIgZmlsdGVyV2l0aE5hbWU6QCJXS1BvaW50TGlnaHQiXTsKKyAgICBpZighZmlsdGVyKQor
ICAgICAgICByZXR1cm4gbmlsOworICAgIFtmaWx0ZXIgc2V0RGVmYXVsdHNdOworICAgIFtmaWx0
ZXIgc2V0VmFsdWU6bm9ybWFscyBmb3JLZXk6QCJpbnB1dE5vcm1hbE1hcCJdOworICAgIFtmaWx0
ZXIgc2V0VmFsdWU6bGlnaHRQb3NpdGlvbiBmb3JLZXk6QCJpbnB1dExpZ2h0UG9zaXRpb24iXTsg
ICAgCisgICAgcmV0dXJuIGZpbHRlcjsgCisgICAgS1dRX1VOQkxPQ0tfRVhDRVBUSU9OUyAKKyAg
ICByZXR1cm4gbmlsOworfQorc3RhdGljIENJRmlsdGVyICpnZXRMaWdodFZlY3RvcnMoQ0lJbWFn
ZSAqIG5vcm1hbHMsIGNvbnN0IEtDTGlnaHRTb3VyY2UgKiBsaWdodCkKK3sKKyAgICAvL0ZJWE1F
OiB0aGVyZSBoYXMgdG8gYmUgYSBiZXR0ZXIgd2F5IG9mIG1ha2luZyBzdXJlIHRoZXNlIGdldCBp
bml0aWFsaXNlZAorICAgIFtXS0Rpc3RhbnRMaWdodEZpbHRlciBjbGFzc107CisgICAgW1dLUG9p
bnRMaWdodEZpbHRlciBjbGFzc107CisgICAgW1dLU3BvdExpZ2h0RmlsdGVyIGNsYXNzXTsKKyAg
ICAKKyAgICBDSUZpbHRlciAqZmlsdGVyID0gbmlsOworICAgIEtXUV9CTE9DS19FWENFUFRJT05T
CisgICAgCisgICAgc3dpdGNoKGxpZ2h0LT50eXBlKCkpCisgICAgeworICAgICAgICBjYXNlIExT
X0RJU1RBTlQ6CisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IEtDRGlzdGFudExpZ2h0U291
cmNlICpkbGlnaHQgPSBzdGF0aWNfY2FzdDxjb25zdCBLQ0Rpc3RhbnRMaWdodFNvdXJjZSAqPihs
aWdodCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZpbHRlciA9IFtDSUZpbHRlciBmaWx0
ZXJXaXRoTmFtZTpAIldLRGlzdGFudExpZ2h0Il07CisgICAgICAgICAgICBpZighZmlsdGVyKQor
ICAgICAgICAgICAgICAgIHJldHVybiBuaWw7CisgICAgICAgICAgICBbZmlsdGVyIHNldERlZmF1
bHRzXTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZmxvYXQgYXppbXV0aCA9IGRsaWdodC0+
YXppbXV0aCgpOworICAgICAgICAgICAgZmxvYXQgZWxldmF0aW9uID0gZGxpZ2h0LT5lbGV2YXRp
b24oKTsKKyAgICAgICAgICAgIGF6aW11dGg9ZGVnMnJhZChhemltdXRoKTsKKyAgICAgICAgICAg
IGVsZXZhdGlvbj1kZWcycmFkKGVsZXZhdGlvbik7CisgICAgICAgICAgICBmbG9hdCBMeCA9IGNv
cyhhemltdXRoKSpjb3MoZWxldmF0aW9uKTsKKyAgICAgICAgICAgIGZsb2F0IEx5ID0gc2luKGF6
aW11dGgpKmNvcyhlbGV2YXRpb24pOworICAgICAgICAgICAgZmxvYXQgTHogPSBzaW4oZWxldmF0
aW9uKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgW2ZpbHRlciBzZXRWYWx1ZTpub3JtYWxz
IGZvcktleTpAImlucHV0Tm9ybWFsTWFwIl07CisgICAgICAgICAgICBbZmlsdGVyIHNldFZhbHVl
OltDSVZlY3RvciB2ZWN0b3JXaXRoWDogTHggWTogTHkgWjogTHpdIGZvcktleTpAImlucHV0TGln
aHREaXJlY3Rpb24iXTsKKyAgICAgICAgICAgIHJldHVybiBmaWx0ZXI7CisgICAgICAgIH0KKyAg
ICAgICAgY2FzZSBMU19QT0lOVDoKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgS0NQb2lu
dExpZ2h0U291cmNlICpwbGlnaHQgPSBzdGF0aWNfY2FzdDxjb25zdCBLQ1BvaW50TGlnaHRTb3Vy
Y2UgKj4obGlnaHQpOworICAgICAgICAgICAgcmV0dXJuIGdldFBvaW50TGlnaHRWZWN0b3JzKG5v
cm1hbHMsIFtDSVZlY3RvciB2ZWN0b3JXaXRoWDpwbGlnaHQtPnBvc2l0aW9uKCkueCgpIFk6cGxp
Z2h0LT5wb3NpdGlvbigpLnkoKSBaOnBsaWdodC0+cG9zaXRpb24oKS56KCldKTsKKyAgICAgICAg
fQorICAgICAgICBjYXNlIExTX1NQT1Q6CisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IEtD
U3BvdExpZ2h0U291cmNlICpzbGlnaHQgPSBzdGF0aWNfY2FzdDxjb25zdCBLQ1Nwb3RMaWdodFNv
dXJjZSAqPihsaWdodCk7CisgICAgICAgICAgICBmaWx0ZXIgPSBbQ0lGaWx0ZXIgZmlsdGVyV2l0
aE5hbWU6QCJXS1Nwb3RMaWdodCJdOworICAgICAgICAgICAgaWYoIWZpbHRlcikKKyAgICAgICAg
ICAgICAgICByZXR1cm4gbmlsOworICAgICAgICAgICAgCisgICAgICAgICAgICBDSUZpbHRlciAq
IHBvaW50TGlnaHRGaWx0ZXIgPSBnZXRQb2ludExpZ2h0VmVjdG9ycyhub3JtYWxzLCBbQ0lWZWN0
b3IgdmVjdG9yV2l0aFg6c2xpZ2h0LT5wb3NpdGlvbigpLngoKSBZOnNsaWdodC0+cG9zaXRpb24o
KS55KCkgWjpzbGlnaHQtPnBvc2l0aW9uKCkueigpXSk7CisgICAgICAgICAgICBpZighcG9pbnRM
aWdodEZpbHRlcikKKyAgICAgICAgICAgICAgICByZXR1cm4gbmlsOworICAgICAgICAgICAgW2Zp
bHRlciBzZXREZWZhdWx0c107CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFtmaWx0ZXIgc2V0
VmFsdWU6W3BvaW50TGlnaHRGaWx0ZXIgdmFsdWVGb3JLZXk6IEAib3V0cHV0SW1hZ2UiXSBmb3JL
ZXk6QCJpbnB1dExpZ2h0VmVjdG9ycyJdOworICAgICAgICAgICAgW2ZpbHRlciBzZXRWYWx1ZTpb
Q0lWZWN0b3IgdmVjdG9yV2l0aFg6c2xpZ2h0LT5kaXJlY3Rpb24oKS54KCkgWTpzbGlnaHQtPmRp
cmVjdGlvbigpLnkoKSBaOnNsaWdodC0+ZGlyZWN0aW9uKCkueigpXSBmb3JLZXk6QCJpbnB1dExp
Z2h0RGlyZWN0aW9uIl07CisgICAgICAgICAgICBbZmlsdGVyIHNldFZhbHVlOltOU051bWJlciBu
dW1iZXJXaXRoRmxvYXQ6c2xpZ2h0LT5zcGVjdWxhckV4cG9uZW50KCldIGZvcktleTpAImlucHV0
U3BlY3VsYXJFeHBvbmVudCJdOworICAgICAgICAgICAgW2ZpbHRlciBzZXRWYWx1ZTpbTlNOdW1i
ZXIgbnVtYmVyV2l0aEZsb2F0OmRlZzJyYWQoc2xpZ2h0LT5saW1pdGluZ0NvbmVBbmdsZSgpKV0g
Zm9yS2V5OkAiaW5wdXRMaW1pdGluZ0NvbmVBbmdsZSJdOworICAgICAgICAgICAgcmV0dXJuIGZp
bHRlcjsKKyAgICAgICAgfQorICAgIH0KKyAgICBLV1FfVU5CTE9DS19FWENFUFRJT05TIAorICAg
IHJldHVybiBuaWw7Cit9CisKKworc3RhdGljIENJSW1hZ2UgKmdldE5vcm1hbE1hcChDSUltYWdl
ICpidW1wTWFwLCBmbG9hdCBzY2FsZSkKK3sKKyAgICAvL1tXS05vcm1hbE1hcEZpbHRlciBjbGFz
c107CisgICAgLy9DSUZpbHRlciAqZmlsdGVyID0gbmlsOworICAgLy8gS1dRX0JMT0NLX0VYQ0VQ
VElPTlMKKyAgICAvL2ZpbHRlciA9IFtDSUZpbHRlciBmaWx0ZXJXaXRoTmFtZTpAIldLTm9ybWFs
TWFwIl07ICAgCisgICAgcmV0dXJuIFtXS05vcm1hbE1hcEZpbHRlciBvdXRwdXROb3JtYWxzV2l0
aEJ1bXBNYXA6YnVtcE1hcCBhbmRTdXJmYWNlU2NhbGU6IFtOU051bWJlciBudW1iZXJXaXRoRmxv
YXQ6c2NhbGVdXTsKK30KKworQ0lGaWx0ZXIgKktDYW52YXNGRURpZmZ1c2VMaWdodGluZ1F1YXJ0
ejo6Z2V0Q0lGaWx0ZXIoS0NhbnZhc0ZpbHRlclF1YXJ0eiAqcXVhcnR6RmlsdGVyKSBjb25zdAor
eworICAgIFtXS0RpZmZ1c2VMaWdodGluZ0ZpbHRlciBjbGFzc107CisgICAgCisgICAgQ0lGaWx0
ZXIgKmZpbHRlciA9IG5pbDsKKyAgICBLV1FfQkxPQ0tfRVhDRVBUSU9OUworICAgIGZpbHRlciA9
IFtDSUZpbHRlciBmaWx0ZXJXaXRoTmFtZTpAIldLRGlmZnVzZUxpZ2h0aW5nIl07CisgICAgaWYo
IWZpbHRlcikKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAKKyAgICBbZmlsdGVyIHNldERlZmF1
bHRzXTsKKyAgICBDSUltYWdlICpub3JtYWxzID0gZ2V0Tm9ybWFsTWFwKHF1YXJ0ekZpbHRlci0+
aW5wdXRJbWFnZSh0aGlzKSwgc3VyZmFjZVNjYWxlKCkpOworICAgIGlmICghbm9ybWFscykgCisg
ICAgICAgIHJldHVybiBuaWw7CisgICAgCisgICAgQ0lGaWx0ZXIgKmxpZ2h0VmVjdG9ycyA9IGdl
dExpZ2h0VmVjdG9ycyhub3JtYWxzLCBsaWdodFNvdXJjZSgpKTsKKyAgICBpZiAoIWxpZ2h0VmVj
dG9ycykgCisgICAgICAgIHJldHVybiBuaWw7CisgICAgCisgICAgW2ZpbHRlciBzZXRWYWx1ZTpu
b3JtYWxzIGZvcktleTpAImlucHV0Tm9ybWFsTWFwIl07CisgICAgW2ZpbHRlciBzZXRWYWx1ZTpb
bGlnaHRWZWN0b3JzIHZhbHVlRm9yS2V5OiBAIm91dHB1dEltYWdlIl0gZm9yS2V5OkAiaW5wdXRM
aWdodFZlY3RvcnMiXTsKKyAgICBbZmlsdGVyIHNldFZhbHVlOmNpQ29sb3IobGlnaHRpbmdDb2xv
cigpKSBmb3JLZXk6QCJpbnB1dExpZ2h0aW5nQ29sb3IiXTsKKyAgICBbZmlsdGVyIHNldFZhbHVl
OltOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6c3VyZmFjZVNjYWxlKCldIGZvcktleTpAImlucHV0
U3VyZmFjZVNjYWxlIl07CisgICAgW2ZpbHRlciBzZXRWYWx1ZTpbTlNOdW1iZXIgbnVtYmVyV2l0
aEZsb2F0OmRpZmZ1c2VDb25zdGFudCgpXSBmb3JLZXk6QCJpbnB1dERpZmZ1c2VDb25zdGFudCJd
OworICAgIFtmaWx0ZXIgc2V0VmFsdWU6W05TTnVtYmVyIG51bWJlcldpdGhGbG9hdDprZXJuZWxV
bml0TGVuZ3RoWCgpXSBmb3JLZXk6QCJpbnB1dEtlcm5lbFVuaXRMZW5ndGhYIl07CisgICAgW2Zp
bHRlciBzZXRWYWx1ZTpbTlNOdW1iZXIgbnVtYmVyV2l0aEZsb2F0Omtlcm5lbFVuaXRMZW5ndGhZ
KCldIGZvcktleTpAImlucHV0S2VybmVsVW5pdExlbmd0aFkiXTsKKyAgICAKKyAgICBGRV9RVUFS
VFpfT1VUUFVUX1JFVFVSTjsKK30KKwogQ0lGaWx0ZXIgKktDYW52YXNGRUZsb29kUXVhcnR6Ojpn
ZXRDSUZpbHRlcihLQ2FudmFzRmlsdGVyUXVhcnR6ICpxdWFydHpGaWx0ZXIpIGNvbnN0CiB7CiAJ
Q0lGaWx0ZXIgKmZpbHRlciA9IG5pbDsKQEAgLTU3OSw2ICs3MTksMzQgQEAgQ0lGaWx0ZXIgKktD
YW52YXNGRU9mZnNldFF1YXJ0ejo6Z2V0Q0lGaQogCUZFX1FVQVJUWl9PVVRQVVRfUkVUVVJOOwog
fQogCitDSUZpbHRlciAqS0NhbnZhc0ZFU3BlY3VsYXJMaWdodGluZ1F1YXJ0ejo6Z2V0Q0lGaWx0
ZXIoS0NhbnZhc0ZpbHRlclF1YXJ0eiAqcXVhcnR6RmlsdGVyKSBjb25zdAoreworICAgIFtXS1Nw
ZWN1bGFyTGlnaHRpbmdGaWx0ZXIgY2xhc3NdOworICAgIAorICAgIENJRmlsdGVyICpmaWx0ZXIg
PSBuaWw7CisgICAgS1dRX0JMT0NLX0VYQ0VQVElPTlMKKyAgICBmaWx0ZXIgPSBbQ0lGaWx0ZXIg
ZmlsdGVyV2l0aE5hbWU6QCJXS1NwZWN1bGFyTGlnaHRpbmciXTsKKyAgICBbZmlsdGVyIHNldERl
ZmF1bHRzXTsKKyAgICBDSUltYWdlICpub3JtYWxzID0gZ2V0Tm9ybWFsTWFwKHF1YXJ0ekZpbHRl
ci0+aW5wdXRJbWFnZSh0aGlzKSwgc3VyZmFjZVNjYWxlKCkpOworICAgIGlmICghbm9ybWFscykg
CisgICAgICAgIHJldHVybiBuaWw7CisgICAgCisgICAgQ0lGaWx0ZXIgKmxpZ2h0VmVjdG9ycyA9
IGdldExpZ2h0VmVjdG9ycyhub3JtYWxzLCBsaWdodFNvdXJjZSgpKTsKKyAgICBpZiAoIWxpZ2h0
VmVjdG9ycykgCisgICAgICAgIHJldHVybiBuaWw7CisgICAgW2ZpbHRlciBzZXRWYWx1ZTpub3Jt
YWxzIGZvcktleTpAImlucHV0Tm9ybWFsTWFwIl07CisgICAgW2ZpbHRlciBzZXRWYWx1ZTpbbGln
aHRWZWN0b3JzIHZhbHVlRm9yS2V5OiBAIm91dHB1dEltYWdlIl0gZm9yS2V5OkAiaW5wdXRMaWdo
dFZlY3RvcnMiXTsKKyAgICBbZmlsdGVyIHNldFZhbHVlOmNpQ29sb3IobGlnaHRpbmdDb2xvcigp
KSBmb3JLZXk6QCJpbnB1dExpZ2h0aW5nQ29sb3IiXTsKKyAgICBbZmlsdGVyIHNldFZhbHVlOltO
U051bWJlciBudW1iZXJXaXRoRmxvYXQ6c3VyZmFjZVNjYWxlKCldIGZvcktleTpAImlucHV0U3Vy
ZmFjZVNjYWxlIl07CisgICAgW2ZpbHRlciBzZXRWYWx1ZTpbTlNOdW1iZXIgbnVtYmVyV2l0aEZs
b2F0OnNwZWN1bGFyQ29uc3RhbnQoKV0gZm9yS2V5OkAiaW5wdXRTcGVjdWxhckNvbnN0YW50Il07
CisgICAgW2ZpbHRlciBzZXRWYWx1ZTpbTlNOdW1iZXIgbnVtYmVyV2l0aEZsb2F0OnNwZWN1bGFy
RXhwb25lbnQoKV0gZm9yS2V5OkAiaW5wdXRTcGVjdWxhckV4cG9uZW50Il07CisgICAgW2ZpbHRl
ciBzZXRWYWx1ZTpbTlNOdW1iZXIgbnVtYmVyV2l0aEZsb2F0Omtlcm5lbFVuaXRMZW5ndGhYKCld
IGZvcktleTpAImlucHV0S2VybmVsVW5pdExlbmd0aFgiXTsKKyAgICBbZmlsdGVyIHNldFZhbHVl
OltOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6a2VybmVsVW5pdExlbmd0aFkoKV0gZm9yS2V5OkAi
aW5wdXRLZXJuZWxVbml0TGVuZ3RoWSJdOworICAgIAorICAgIEZFX1FVQVJUWl9PVVRQVVRfUkVU
VVJOOworfQorCisKIENJRmlsdGVyICpLQ2FudmFzRkVUaWxlUXVhcnR6OjpnZXRDSUZpbHRlcihL
Q2FudmFzRmlsdGVyUXVhcnR6ICpxdWFydHpGaWx0ZXIpIGNvbnN0CiB7CiAJRkVfUVVBUlRaX1NF
VFVQX0lOUFVUKEAiQ0lBZmZpbmVUaWxlIik7CkBAIC01ODYsNiArNzU0LDMgQEAgQ0lGaWx0ZXIg
KktDYW52YXNGRVRpbGVRdWFydHo6OmdldENJRmlsdAogCUZFX1FVQVJUWl9PVVRQVVRfUkVUVVJO
OwogfQogCi0KLQotCkluZGV4OiBrY2FudmFzL2RldmljZS9xdWFydHovS1JlbmRlcmluZ0Rldmlj
ZVF1YXJ0ei5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rY2Fu
dmFzL2RldmljZS9xdWFydHovS1JlbmRlcmluZ0RldmljZVF1YXJ0ei5tbSx2CnJldHJpZXZpbmcg
cmV2aXNpb24gMS40CmRpZmYgLXAgLXUgLXIxLjQga2NhbnZhcy9kZXZpY2UvcXVhcnR6L0tSZW5k
ZXJpbmdEZXZpY2VRdWFydHoubW0KLS0tIGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9LUmVuZGVyaW5n
RGV2aWNlUXVhcnR6Lm1tCTUgT2N0IDIwMDUgMDU6MzY6NTIgLTAwMDAJMS40CisrKyBrY2FudmFz
L2RldmljZS9xdWFydHovS1JlbmRlcmluZ0RldmljZVF1YXJ0ei5tbQkyMCBOb3YgMjAwNSAwMTox
NTowNSAtMDAwMApAQCAtMjQzLDE1ICsyNDMsMTcgQEAgS0NhbnZhc0ZpbHRlckVmZmVjdCAqS1Jl
bmRlcmluZ0RldmljZVF1YQogewogCXN3aXRjaCh0eXBlKQogCXsKLS8vCWNhc2UgRkVfRElTVEFO
VF9MSUdIVDogCi0vLwljYXNlIEZFX1BPSU5UX0xJR0hUOiAKLS8vCWNhc2UgRkVfU1BPVF9MSUdI
VDogCisgICAgICAgIC8qIExpZ2h0IHNvdXJjZXMgYXJlIGNvbnRhaW5lZCBieSB0aGUgZGlmZnVz
ZS9zcGVjdWxhciBsaWdodCBibG9ja3MgCisgICAgICAgIGNhc2UgRkVfRElTVEFOVF9MSUdIVDog
CisgICAgICAgIGNhc2UgRkVfUE9JTlRfTElHSFQ6IAorICAgICAgICBjYXNlIEZFX1NQT1RfTElH
SFQ6IAorICAgICAgICAqLwogCWNhc2UgRkVfQkxFTkQ6IHJldHVybiBuZXcgS0NhbnZhc0ZFQmxl
bmRRdWFydHooKTsKIAljYXNlIEZFX0NPTE9SX01BVFJJWDogcmV0dXJuIG5ldyBLQ2FudmFzRkVD
b2xvck1hdHJpeFF1YXJ0eigpOwogLy8JY2FzZSBGRV9DT01QT05FTlRfVFJBTlNGRVI6IAogCWNh
c2UgRkVfQ09NUE9TSVRFOiByZXR1cm4gbmV3IEtDYW52YXNGRUNvbXBvc2l0ZVF1YXJ0eigpOwog
Ly8JY2FzZSBGRV9DT05WT0xWRV9NQVRSSVg6IAotLy8JY2FzZSBGRV9ESUZGVVNFX0xJR0hUSU5H
OiAKKwljYXNlIEZFX0RJRkZVU0VfTElHSFRJTkc6IHJldHVybiBuZXcgS0NhbnZhc0ZFRGlmZnVz
ZUxpZ2h0aW5nUXVhcnR6KCk7CiAvLwljYXNlIEZFX0RJU1BMQUNFTUVOVF9NQVA6IAogCWNhc2Ug
RkVfRkxPT0Q6IHJldHVybiBuZXcgS0NhbnZhc0ZFRmxvb2RRdWFydHooKTsKIAljYXNlIEZFX0dB
VVNTSUFOX0JMVVI6IHJldHVybiBuZXcgS0NhbnZhc0ZFR2F1c3NpYW5CbHVyUXVhcnR6KCk7CkBA
IC0yNTksNyArMjYxLDcgQEAgS0NhbnZhc0ZpbHRlckVmZmVjdCAqS1JlbmRlcmluZ0RldmljZVF1
YQogCWNhc2UgRkVfTUVSR0U6IHJldHVybiBuZXcgS0NhbnZhc0ZFTWVyZ2VRdWFydHooKTsKIC8v
CWNhc2UgRkVfTU9SUEhPTE9HWTogCiAJY2FzZSBGRV9PRkZTRVQ6IHJldHVybiBuZXcgS0NhbnZh
c0ZFT2Zmc2V0UXVhcnR6KCk7Ci0vLwljYXNlIEZFX1NQRUNVTEFSX0xJR0hUSU5HOiAKKwljYXNl
IEZFX1NQRUNVTEFSX0xJR0hUSU5HOiByZXR1cm4gbmV3IEtDYW52YXNGRVNwZWN1bGFyTGlnaHRp
bmdRdWFydHooKTsKIAljYXNlIEZFX1RJTEU6IHJldHVybiBuZXcgS0NhbnZhc0ZFVGlsZVF1YXJ0
eigpOwogLy8JY2FzZSBGRV9UVVJCVUxFTkNFOiAKIAlkZWZhdWx0OgpJbmRleDoga3N2ZzIvU1ZH
QW5pbWF0ZWRDb2xvckltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtTnB1IGtzdmcyL1NWR0FuaW1h
dGVkQ29sb3JJbXBsLmNwcAotLS0ga3N2ZzIvU1ZHQW5pbWF0ZWRDb2xvckltcGwuY3BwCTEgSmFu
IDE5NzAgMDA6MDA6MDAgLTAwMDAKKysrIGtzdmcyL1NWR0FuaW1hdGVkQ29sb3JJbXBsLmNwcAkx
MSBOb3YgMjAwNSAyMzozNjowMCAtMDAwMApAQCAtMCwwICsxLDM1IEBACisvKgorICogIFNWR0Fu
aW1hdGVkQ29sb3JJbXBsLmNwcAorICogIFdlYkNvcmUKKyAqCisgKiAgQ3JlYXRlZCBieSBPbGl2
ZXIgb24gNi8xMS8wNS4KKyAqICBDb3B5cmlnaHQgMjAwNSBPbGl2ZXIgSHVudC4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNW
R0FuaW1hdGVkQ29sb3JJbXBsLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBLU1ZHOworCitTVkdBbmlt
YXRlZENvbG9ySW1wbDo6U1ZHQW5pbWF0ZWRDb2xvckltcGwoY29uc3QgU1ZHU3R5bGVkRWxlbWVu
dEltcGwgKmNvbnRleHQpCis6IFNWR0FuaW1hdGVkVGVtcGxhdGU8U1ZHQ29sb3JJbXBsPihjb250
ZXh0KQoreworfQorCitTVkdBbmltYXRlZENvbG9ySW1wbDo6flNWR0FuaW1hdGVkQ29sb3JJbXBs
KCkKK3sKK30KKworU1ZHQ29sb3JJbXBsICpTVkdBbmltYXRlZENvbG9ySW1wbDo6Y3JlYXRlKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbmV3IFNWR0NvbG9ySW1wbCgpOworfQorCit2b2lkIFNWR0Fu
aW1hdGVkQ29sb3JJbXBsOjphc3NpZ24oU1ZHQ29sb3JJbXBsICpzcmMsIFNWR0NvbG9ySW1wbCAq
ZHN0KSBjb25zdAoreworICAgIGlmKCFzcmMgfHwgIWRzdCkKKyAgICAgICAgcmV0dXJuOworICAg
IGRzdC0+c2V0Q3NzVGV4dChzcmMtPmNzc1RleHQoKSk7Cit9CisKSW5kZXg6IGtzdmcyL1NWR0Fu
aW1hdGVkQ29sb3JJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpkaWZmIC1OcHUga3N2ZzIvU1ZHQW5pbWF0ZWRD
b2xvckltcGwuaAotLS0ga3N2ZzIvU1ZHQW5pbWF0ZWRDb2xvckltcGwuaAkxIEphbiAxOTcwIDAw
OjAwOjAwIC0wMDAwCisrKyBrc3ZnMi9TVkdBbmltYXRlZENvbG9ySW1wbC5oCTExIE5vdiAyMDA1
IDIzOjM2OjAwIC0wMDAwCkBAIC0wLDAgKzEsMzAgQEAKKy8qCisgKiAgU1ZHQW5pbWF0ZWRDb2xv
ckltcGwuaAorICogIFdlYkNvcmUKKyAqCisgKiAgQ3JlYXRlZCBieSBPbGl2ZXIgb24gNi8xMS8w
NS4KKyAqICBDb3B5cmlnaHQgMjAwNSBPbGl2ZXIgSHVudC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKi8KKworI2lmbmRlZiBLU1ZHX1NWR0FuaW1hdGVkQ29sb3JJbXBsX0gKKyNkZWZpbmUg
S1NWR19TVkdBbmltYXRlZENvbG9ySW1wbF9ICisKKyNpbmNsdWRlICJTVkdDb2xvckltcGwuaCIK
KyNpbmNsdWRlICJTVkdBbmltYXRlZFRlbXBsYXRlLmgiCisKK25hbWVzcGFjZSBLU1ZHCit7Cisg
ICAgY2xhc3MgU1ZHQW5pbWF0ZWRDb2xvckltcGwgOiBwdWJsaWMgU1ZHQW5pbWF0ZWRUZW1wbGF0
ZTxTVkdDb2xvckltcGw+CisgICAgeworICAgIHB1YmxpYzoKKyAgICAgICAgU1ZHQW5pbWF0ZWRD
b2xvckltcGwoY29uc3QgU1ZHU3R5bGVkRWxlbWVudEltcGwgKmNvbnRleHQpOworICAgICAgICB2
aXJ0dWFsIH5TVkdBbmltYXRlZENvbG9ySW1wbCgpOworICAgIAorICAgIHByb3RlY3RlZDoKKyAg
ICAgICAgdmlydHVhbCBTVkdDb2xvckltcGwgKmNyZWF0ZSgpIGNvbnN0OworICAgICAgICB2aXJ0
dWFsIHZvaWQgYXNzaWduKFNWR0NvbG9ySW1wbCAqc3JjLCBTVkdDb2xvckltcGwgKmRzdCkgY29u
c3Q7CisgICAgfTsKK307CisKKyNlbmRpZgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKSW5k
ZXg6IGtzdmcyL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudEltcGwuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
ZGlmZiAtTnB1IGtzdmcyL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudEltcGwuY3BwCi0tLSBr
c3ZnMi9TVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnRJbXBsLmNwcAkxIEphbiAxOTcwIDAwOjAw
OjAwIC0wMDAwCisrKyBrc3ZnMi9TVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnRJbXBsLmNwcAkx
NCBOb3YgMjAwNSAwODoyNDoyMyAtMDAwMApAQCAtMCwwICsxLDIyOCBAQAorLyoKKyAgICBDb3B5
cmlnaHQgKEMpIDIwMDQsIDIwMDUgTmlrb2xhcyBaaW1tZXJtYW5uIDx3aWxkZm94QGtkZS5vcmc+
CisgICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisK
KyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIHByb2plY3QKKworICAgIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAg
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAg
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMz
MCwKKyAgICBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlIDxxc3RyaW5nbGlzdC5oPgorCisjaW5jbHVkZSA8a2RvbS9jb3JlL0F0
dHJJbXBsLmg+CisKKyNpbmNsdWRlIDxrY2FudmFzL0tDYW52YXMuaD4KKyNpbmNsdWRlIDxrY2Fu
dmFzL0tDYW52YXNSZWdpc3RyeS5oPgorI2luY2x1ZGUgPGtjYW52YXMvS0NhbnZhc0ZpbHRlcnMu
aD4KKyNpbmNsdWRlIDxrY2FudmFzL2RldmljZS9LUmVuZGVyaW5nRGV2aWNlLmg+CisKKyNpbmNs
dWRlICJzdmdhdHRycy5oIgorI2luY2x1ZGUgIlNWR0hlbHBlci5oIgorI2luY2x1ZGUgIlNWR1Jl
bmRlclN0eWxlLmgiCisjaW5jbHVkZSAiU1ZHQW5pbWF0ZWRDb2xvckltcGwuaCIKKyNpbmNsdWRl
ICJTVkdBbmltYXRlZE51bWJlckltcGwuaCIKKyNpbmNsdWRlICJTVkdBbmltYXRlZFN0cmluZ0lt
cGwuaCIKKyNpbmNsdWRlICJTVkdGRUxpZ2h0RWxlbWVudEltcGwuaCIKKyNpbmNsdWRlICJTVkdE
T01JbXBsZW1lbnRhdGlvbkltcGwuaCIKKyNpbmNsdWRlICJTVkdGRURpZmZ1c2VMaWdodGluZ0Vs
ZW1lbnRJbXBsLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBLU1ZHOworCitTVkdGRURpZmZ1c2VMaWdo
dGluZ0VsZW1lbnRJbXBsOjpTVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnRJbXBsKEtET006OkRv
Y3VtZW50UHRyICpkb2MsIEtET006Ok5vZGVJbXBsOjpJZCBpZCwgS0RPTTo6RE9NU3RyaW5nSW1w
bCAqcHJlZml4KSA6IAorU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzSW1wbChk
b2MsIGlkLCBwcmVmaXgpCit7CisgICAgbV9kaWZmdXNlQ29uc3RhbnQgPSAwOworICAgIG1fc3Vy
ZmFjZVNjYWxlID0gMDsKKyAgICBtX2ZpbHRlckVmZmVjdCA9IDA7CisgICAgbV9saWdodGluZ0Nv
bG9yID0gMDsKKyAgICBtX2tlcm5lbFVuaXRMZW5ndGhYID0gMDsKKyAgICBtX2tlcm5lbFVuaXRM
ZW5ndGhZID0gMDsKKyAgICBtX2luMSA9IDA7Cit9CisKK1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxl
bWVudEltcGw6On5TVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnRJbXBsKCkKK3sKKyAgICBpZiht
X2xpZ2h0aW5nQ29sb3IpCisgICAgICAgIG1fbGlnaHRpbmdDb2xvci0+ZGVyZWYoKTsKKyAgICBp
ZihtX2luMSkKKyAgICAgICAgbV9pbjEtPmRlcmVmKCk7CisgICAgaWYobV9kaWZmdXNlQ29uc3Rh
bnQpCisgICAgICAgIG1fZGlmZnVzZUNvbnN0YW50LT5kZXJlZigpOworICAgIGlmKG1fc3VyZmFj
ZVNjYWxlKQorICAgICAgICBtX3N1cmZhY2VTY2FsZS0+ZGVyZWYoKTsKKyAgICBpZihtX2tlcm5l
bFVuaXRMZW5ndGhYKQorICAgICAgICBtX2tlcm5lbFVuaXRMZW5ndGhYLT5kZXJlZigpOworICAg
IGlmKG1fa2VybmVsVW5pdExlbmd0aFkpCisgICAgICAgIG1fa2VybmVsVW5pdExlbmd0aFktPmRl
cmVmKCk7Cit9CisKK1NWR0FuaW1hdGVkU3RyaW5nSW1wbCAqU1ZHRkVEaWZmdXNlTGlnaHRpbmdF
bGVtZW50SW1wbDo6aW4xKCkgY29uc3QKK3sKKyAgICBTVkdTdHlsZWRFbGVtZW50SW1wbCAqZHVt
bXkgPSAwOworICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZFN0cmluZ0ltcGw+KG1f
aW4xLCBkdW1teSk7Cit9CisKK1NWR0FuaW1hdGVkTnVtYmVySW1wbCAqU1ZHRkVEaWZmdXNlTGln
aHRpbmdFbGVtZW50SW1wbDo6ZGlmZnVzZUNvbnN0YW50KCkgY29uc3QKK3sKKyAgICBTVkdTdHls
ZWRFbGVtZW50SW1wbCAqZHVtbXkgPSAwOworICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmlt
YXRlZE51bWJlckltcGw+KG1fZGlmZnVzZUNvbnN0YW50LCBkdW1teSk7Cit9CisKK1NWR0FuaW1h
dGVkTnVtYmVySW1wbCAqU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50SW1wbDo6c3VyZmFjZVNj
YWxlKCkgY29uc3QKK3sKKyAgICBTVkdTdHlsZWRFbGVtZW50SW1wbCAqZHVtbXkgPSAwOworICAg
IHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZE51bWJlckltcGw+KG1fc3VyZmFjZVNjYWxl
LCBkdW1teSk7Cit9CisKK1NWR0FuaW1hdGVkTnVtYmVySW1wbCAqU1ZHRkVEaWZmdXNlTGlnaHRp
bmdFbGVtZW50SW1wbDo6a2VybmVsVW5pdExlbmd0aFgoKSBjb25zdAoreworICAgIFNWR1N0eWxl
ZEVsZW1lbnRJbXBsICpkdW1teSA9IDA7CisgICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1h
dGVkTnVtYmVySW1wbD4obV9rZXJuZWxVbml0TGVuZ3RoWCwgZHVtbXkpOworfQorCitTVkdBbmlt
YXRlZE51bWJlckltcGwgKlNWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudEltcGw6Omtlcm5lbFVu
aXRMZW5ndGhZKCkgY29uc3QKK3sKKyAgICBTVkdTdHlsZWRFbGVtZW50SW1wbCAqZHVtbXkgPSAw
OworICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZE51bWJlckltcGw+KG1fa2VybmVs
VW5pdExlbmd0aFksIGR1bW15KTsKK30KKworU1ZHQW5pbWF0ZWRDb2xvckltcGwgKlNWR0ZFRGlm
ZnVzZUxpZ2h0aW5nRWxlbWVudEltcGw6OmxpZ2h0aW5nQ29sb3IoKSBjb25zdAoreworICAgIFNW
R1N0eWxlZEVsZW1lbnRJbXBsICpkdW1teSA9IDA7CisgICAgcmV0dXJuIGxhenlfY3JlYXRlPFNW
R0FuaW1hdGVkQ29sb3JJbXBsPihtX2xpZ2h0aW5nQ29sb3IsIGR1bW15KTsKK30KKwordm9pZCBT
VkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnRJbXBsOjpwYXJzZUF0dHJpYnV0ZShLRE9NOjpBdHRy
aWJ1dGVJbXBsICphdHRyKQoreworICAgIGludCBpZCA9IChhdHRyLT5pZCgpICYgTm9kZUltcGxf
SWRMb2NhbE1hc2spOworICAgIEtET006OkRPTVN0cmluZyB2YWx1ZShhdHRyLT52YWx1ZSgpKTsK
KworICAgIHN3aXRjaChpZCkKKyAgICB7CisgICAgICAgIGNhc2UgQVRUUl9JTjoKKyAgICAgICAg
eworICAgICAgICAgICAgaW4xKCktPnNldEJhc2VWYWwodmFsdWUuaGFuZGxlKCkpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBBVFRSX1NVUkZBQ0VTQ0FMRToK
KyAgICAgICAgeworICAgICAgICAgICAgc3VyZmFjZVNjYWxlKCktPnNldEJhc2VWYWwodmFsdWUu
c3RyaW5nKCkudG9Eb3VibGUoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICBjYXNlIEFUVFJfRElGRlVTRUNPTlNUQU5UOgorICAgICAgICB7CisgICAgICAgICAgICBk
aWZmdXNlQ29uc3RhbnQoKS0+c2V0QmFzZVZhbCh2YWx1ZS5zdHJpbmcoKS50b0RvdWJsZSgpKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgQVRUUl9LRVJORUxV
TklUTEVOR1RIOgorICAgICAgICB7CisgICAgICAgICAgICBRU3RyaW5nTGlzdCBudW1iZXJzID0g
UVN0cmluZ0xpc3Q6OnNwbGl0KCcgJywgdmFsdWUuc3RyaW5nKCkpOworICAgICAgICAgICAga2Vy
bmVsVW5pdExlbmd0aFgoKS0+c2V0QmFzZVZhbChudW1iZXJzWzBdLnRvRG91YmxlKCkpOworICAg
ICAgICAgICAgaWYobnVtYmVycy5jb3VudCgpID09IDEpCisgICAgICAgICAgICAgICAga2VybmVs
VW5pdExlbmd0aFkoKS0+c2V0QmFzZVZhbChudW1iZXJzWzBdLnRvRG91YmxlKCkpOworICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGtlcm5lbFVuaXRMZW5ndGhZKCktPnNldEJhc2VW
YWwobnVtYmVyc1sxXS50b0RvdWJsZSgpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBBVFRSX0xJR0hUSU5HX0NPTE9SOgorICAgICAg
ICB7CisgICAgICAgICAgICAvL0ZJWE1FIHRoaXMgaXMgYmFkLCBwb3RlbnRpYWwgbWVtb3J5IGxl
YWsKKyAgICAgICAgICAgIGxpZ2h0aW5nQ29sb3IoKS0+c2V0QmFzZVZhbChuZXcgU1ZHQ29sb3JJ
bXBsKHZhbHVlLmhhbmRsZSgpKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICBkZWZhdWx0OgorICAgICAgICB7CisgICAgICAgICAgICBTVkdGaWx0ZXJQcmltaXRpdmVT
dGFuZGFyZEF0dHJpYnV0ZXNJbXBsOjpwYXJzZUF0dHJpYnV0ZShhdHRyKTsKKyAgICAgICAgfQor
ICAgIH07Cit9CisKK0tDYW52YXNJdGVtICpTVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnRJbXBs
OjpjcmVhdGVDYW52YXNJdGVtKEtDYW52YXMgKmNhbnZhcywgS1JlbmRlcmluZ1N0eWxlICpzdHls
ZSkgY29uc3QKK3sKKyAgICBtX2ZpbHRlckVmZmVjdCA9IHN0YXRpY19jYXN0PEtDYW52YXNGRURp
ZmZ1c2VMaWdodGluZyAqPihjYW52YXMtPnJlbmRlcmluZ0RldmljZSgpLT5jcmVhdGVGaWx0ZXJF
ZmZlY3QoRkVfRElGRlVTRV9MSUdIVElORykpOworICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRJbihL
RE9NOjpET01TdHJpbmcoaW4xKCktPmJhc2VWYWwoKSkuc3RyaW5nKCkpOworICAgIHNldFN0YW5k
YXJkQXR0cmlidXRlcyhtX2ZpbHRlckVmZmVjdCk7CisgICAgbV9maWx0ZXJFZmZlY3QtPnNldERp
ZmZ1c2VDb25zdGFudCgoZGlmZnVzZUNvbnN0YW50KCktPmJhc2VWYWwoKSkpOworICAgIG1fZmls
dGVyRWZmZWN0LT5zZXRTdXJmYWNlU2NhbGUoKHN1cmZhY2VTY2FsZSgpLT5iYXNlVmFsKCkpKTsK
KyAgICBtX2ZpbHRlckVmZmVjdC0+c2V0S2VybmVsVW5pdExlbmd0aFgoKGtlcm5lbFVuaXRMZW5n
dGhYKCktPmJhc2VWYWwoKSkpOworICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRLZXJuZWxVbml0TGVu
Z3RoWSgoa2VybmVsVW5pdExlbmd0aFkoKS0+YmFzZVZhbCgpKSk7CisgICAgbV9maWx0ZXJFZmZl
Y3QtPnNldExpZ2h0aW5nQ29sb3IobGlnaHRpbmdDb2xvcigpLT5iYXNlVmFsKCktPmNvbG9yKCkp
OworICAgIHVwZGF0ZUxpZ2h0cygpOworICAgIHJldHVybiAwOworfQorCitLQ2FudmFzRmlsdGVy
RWZmZWN0ICpTVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnRJbXBsOjpmaWx0ZXJFZmZlY3QoKSBj
b25zdAoreworICAgIHVwZGF0ZUxpZ2h0cygpOworICAgIHJldHVybiBtX2ZpbHRlckVmZmVjdDsK
K30KKworc3RhdGljIEtDYW52YXNQb2ludDNGIG1ha2VQb2ludChmbG9hdCB4LCBmbG9hdCB5LCBm
bG9hdCB6KQoreworICAgIEtDYW52YXNQb2ludDNGIHJlczsKKyAgICByZXMuc2V0WCh4KTsKKyAg
ICByZXMuc2V0WSh5KTsKKyAgICByZXMuc2V0Wih6KTsKKyAgICByZXR1cm4gcmVzOworfQorCitz
dGF0aWMgdm9pZCBub3JtYWxpc2UoS0NhbnZhc1BvaW50M0YgJiB2YWwpCit7CisgICAgZmxvYXQg
bGVuZ3RoID0gdmFsLngoKSp2YWwueCgpK3ZhbC55KCkqdmFsLnkoKSt2YWwueigpKnZhbC56KCk7
CisgICAgbGVuZ3RoID0gc3FydChsZW5ndGgpOworICAgIHZhbC5zZXRYKHZhbC54KCkvbGVuZ3Ro
KTsKKyAgICB2YWwuc2V0WSh2YWwueSgpL2xlbmd0aCk7CisgICAgdmFsLnNldFoodmFsLnooKS9s
ZW5ndGgpOworfQorCit2b2lkIFNWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudEltcGw6OnVwZGF0
ZUxpZ2h0cygpIGNvbnN0Cit7CisgICAgaWYgKCFtX2ZpbHRlckVmZmVjdCkKKyAgICAgICAgcmV0
dXJuOworICAgIEtET006Ok5vZGVJbXBsICpuID0gZmlyc3RDaGlsZCgpOworICAgIGlmKCFuKSBy
ZXR1cm47CisgICAgS0NMaWdodFNvdXJjZSAqIGxpZ2h0ID0gMDsKKyAgICBpZihuLT5pZCgpID09
IElEX0ZFRElTVEFOVExJR0hUKQorICAgIHsgICAgICAKKyAgICAgICAgU1ZHRkVMaWdodEVsZW1l
bnRJbXBsICpsaWdodE5vZGUgPSBzdGF0aWNfY2FzdDxTVkdGRUxpZ2h0RWxlbWVudEltcGwgKj4o
bik7ICAKKyAgICAgICAgbGlnaHQgPSBuZXcgS0NEaXN0YW50TGlnaHRTb3VyY2UobGlnaHROb2Rl
LT5hemltdXRoKCktPmJhc2VWYWwoKSwgbGlnaHROb2RlLT5lbGV2YXRpb24oKS0+YmFzZVZhbCgp
KTsKKyAgICB9CisgICAgZWxzZSBpZihuLT5pZCgpID09IElEX0ZFUE9JTlRMSUdIVCkKKyAgICB7
CisgICAgICAgIFNWR0ZFTGlnaHRFbGVtZW50SW1wbCAqbGlnaHROb2RlID0gc3RhdGljX2Nhc3Q8
U1ZHRkVMaWdodEVsZW1lbnRJbXBsICo+KG4pOyAgCisgICAgICAgIEtDYW52YXNQb2ludDNGIHBv
cyA9IG1ha2VQb2ludChsaWdodE5vZGUtPngoKS0+YmFzZVZhbCgpLCBsaWdodE5vZGUtPnkoKS0+
YmFzZVZhbCgpLCBsaWdodE5vZGUtPnooKS0+YmFzZVZhbCgpKTsKKyAgICAgICAgbGlnaHQgPSBu
ZXcgS0NQb2ludExpZ2h0U291cmNlKHBvcyk7CisgICAgfQorICAgIGVsc2UgaWYobi0+aWQoKSA9
PSBJRF9GRVNQT1RMSUdIVCkKKyAgICB7CisgICAgICAgIFNWR0ZFTGlnaHRFbGVtZW50SW1wbCAq
bGlnaHROb2RlID0gc3RhdGljX2Nhc3Q8U1ZHRkVMaWdodEVsZW1lbnRJbXBsICo+KG4pOyAgCisg
ICAgICAgIEtDYW52YXNQb2ludDNGIHBvcyA9IG1ha2VQb2ludChsaWdodE5vZGUtPngoKS0+YmFz
ZVZhbCgpLCBsaWdodE5vZGUtPnkoKS0+YmFzZVZhbCgpLCBsaWdodE5vZGUtPnooKS0+YmFzZVZh
bCgpKTsKKyAgICAgICAgLy9jb252ZXJ0IGxvb2tBdCB0byBhIGRpcmVjdGlvbgorICAgICAgICBL
Q2FudmFzUG9pbnQzRiBkaXJlY3Rpb24gPSBtYWtlUG9pbnQobGlnaHROb2RlLT5wb2ludHNBdFgo
KS0+YmFzZVZhbCgpLXBvcy54KCksIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGxpZ2h0Tm9kZS0+cG9pbnRzQXRZKCktPmJhc2VWYWwoKS1wb3MueSgpLCAKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWdodE5vZGUtPnBvaW50c0F0Wigp
LT5iYXNlVmFsKCktcG9zLnooKSk7CisgICAgICAgIG5vcm1hbGlzZShkaXJlY3Rpb24pOworICAg
ICAgICBsaWdodCA9IG5ldyBLQ1Nwb3RMaWdodFNvdXJjZShwb3MsIGRpcmVjdGlvbiwgbGlnaHRO
b2RlLT5zcGVjdWxhckV4cG9uZW50KCktPmJhc2VWYWwoKSwgbGlnaHROb2RlLT5saW1pdGluZ0Nv
bmVBbmdsZSgpLT5iYXNlVmFsKCkpOworICAgIH0KKyAgICBtX2ZpbHRlckVmZmVjdC0+c2V0TGln
aHRTb3VyY2UobGlnaHQpOworfQorCit2b2lkIFNWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudElt
cGw6OmNsb3NlKCkKK3sKKyAgICAvL3VwZGF0ZUxpZ2h0cygpOworfQpcIE5vIG5ld2xpbmUgYXQg
ZW5kIG9mIGZpbGUKSW5kZXg6IGtzdmcyL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudEltcGwu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09CmRpZmYgLU5wdSBrc3ZnMi9TVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnRJ
bXBsLmgKLS0tIGtzdmcyL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudEltcGwuaAkxIEphbiAx
OTcwIDAwOjAwOjAwIC0wMDAwCisrKyBrc3ZnMi9TVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnRJ
bXBsLmgJMTQgTm92IDIwMDUgMDg6MTk6NDYgLTAwMDAKQEAgLTAsMCArMSw3NiBAQAorLyoKKyAg
ICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgTmlrb2xhcyBaaW1tZXJtYW5uIDx3aWxkZm94QGtk
ZS5vcmc+CisgICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5v
cmc+CisKKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIHByb2plY3QKKworICAgIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAg
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1
aXRlIDMzMCwKKyAgICBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyovCisKKyNpZm5kZWYg
S1NWR19TVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnRJbXBsX0gKKyNkZWZpbmUgS1NWR19TVkdG
RURpZmZ1c2VMaWdodGluZ0VsZW1lbnRJbXBsX0gKKworI2luY2x1ZGUgIlNWR0ZpbHRlclByaW1p
dGl2ZVN0YW5kYXJkQXR0cmlidXRlc0ltcGwuaCIKKworY2xhc3MgS0NhbnZhc0ZFRGlmZnVzZUxp
Z2h0aW5nOworY2xhc3MgS0NhbnZhc0ZpbHRlckVmZmVjdDsKKworbmFtZXNwYWNlIEtTVkcKK3sK
KyAgICBjbGFzcyBTVkdBbmltYXRlZE51bWJlckltcGw7CisgICAgY2xhc3MgU1ZHQW5pbWF0ZWRT
dHJpbmdJbXBsOworICAgIGNsYXNzIFNWR0FuaW1hdGVkQ29sb3JJbXBsOworICAgIAorICAgIGNs
YXNzIFNWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudEltcGwgOiBwdWJsaWMgU1ZHRmlsdGVyUHJp
bWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzSW1wbAorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICAg
IFNWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudEltcGwoS0RPTTo6RG9jdW1lbnRQdHIgKmRvYywg
S0RPTTo6Tm9kZUltcGw6OklkIGlkLCBLRE9NOjpET01TdHJpbmdJbXBsICpwcmVmaXgpOworICAg
ICAgICB2aXJ0dWFsIH5TVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnRJbXBsKCk7CisKKyAgICAg
ICAgLy8gJ1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudCcgZnVuY3Rpb25zCisgICAgICAgIFNW
R0FuaW1hdGVkU3RyaW5nSW1wbCAqaW4xKCkgY29uc3Q7CisgICAgICAgIFNWR0FuaW1hdGVkTnVt
YmVySW1wbCAqZGlmZnVzZUNvbnN0YW50KCkgY29uc3Q7CisgICAgICAgIFNWR0FuaW1hdGVkTnVt
YmVySW1wbCAqc3VyZmFjZVNjYWxlKCkgY29uc3Q7CisgICAgICAgIFNWR0FuaW1hdGVkTnVtYmVy
SW1wbCAqa2VybmVsVW5pdExlbmd0aFgoKSBjb25zdDsKKyAgICAgICAgU1ZHQW5pbWF0ZWROdW1i
ZXJJbXBsICprZXJuZWxVbml0TGVuZ3RoWSgpIGNvbnN0OworICAgICAgICBTVkdBbmltYXRlZENv
bG9ySW1wbCAgKmxpZ2h0aW5nQ29sb3IoKSBjb25zdDsKKworICAgICAgICAvLyBEZXJpdmVkIGZy
b206ICdFbGVtZW50SW1wbCcKKyAgICAgICAgdmlydHVhbCB2b2lkIHBhcnNlQXR0cmlidXRlKEtE
T006OkF0dHJpYnV0ZUltcGwgKmF0dHIpOworCisgICAgICAgIHZpcnR1YWwgS0NhbnZhc0l0ZW0g
KmNyZWF0ZUNhbnZhc0l0ZW0oS0NhbnZhcyAqY2FudmFzLCBLUmVuZGVyaW5nU3R5bGUgKnN0eWxl
KSBjb25zdDsKKworICAgICAgICB2aXJ0dWFsIGJvb2wgaW1wbGVtZW50c0NhbnZhc0l0ZW0oKSBj
b25zdCB7IHJldHVybiB0cnVlOyB9CisKKyAgICAgICAgdmlydHVhbCBLQ2FudmFzRmlsdGVyRWZm
ZWN0ICpmaWx0ZXJFZmZlY3QoKSBjb25zdDsKKyAgICAgICAgCisgICAgICAgIHZpcnR1YWwgdm9p
ZCBjbG9zZSgpOworcHJpdmF0ZToKKyAgICAgICAgbXV0YWJsZSBTVkdBbmltYXRlZFN0cmluZ0lt
cGwgKm1faW4xOworICAgICAgICBtdXRhYmxlIFNWR0FuaW1hdGVkTnVtYmVySW1wbCAqbV9kaWZm
dXNlQ29uc3RhbnQ7CisgICAgICAgIG11dGFibGUgU1ZHQW5pbWF0ZWROdW1iZXJJbXBsICptX3N1
cmZhY2VTY2FsZTsKKyAgICAgICAgbXV0YWJsZSBTVkdBbmltYXRlZENvbG9ySW1wbCAgKm1fbGln
aHRpbmdDb2xvcjsKKyAgICAgICAgbXV0YWJsZSBTVkdBbmltYXRlZE51bWJlckltcGwgKm1fa2Vy
bmVsVW5pdExlbmd0aFg7CisgICAgICAgIG11dGFibGUgU1ZHQW5pbWF0ZWROdW1iZXJJbXBsICpt
X2tlcm5lbFVuaXRMZW5ndGhZOworICAgICAgICAvL25lZWQgb3RoZXIgcHJvcGVydGllcyBoZXJl
Li4uCisgICAgICAgIG11dGFibGUgS0NhbnZhc0ZFRGlmZnVzZUxpZ2h0aW5nICptX2ZpbHRlckVm
ZmVjdDsKKyAgICAgICAgCisgICAgICAgIC8vbGlnaHQgbWFuYWdtZW50CisgICAgICAgIHZvaWQg
dXBkYXRlTGlnaHRzKCkgY29uc3Q7CisgICAgfTsKK307CisKKyNlbmRpZgpJbmRleDoga3N2ZzIv
U1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50SW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpkaWZmIC1OcHUga3N2
ZzIvU1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50SW1wbC5jcHAKLS0tIGtzdmcyL1NWR0ZFRGlzdGFu
dExpZ2h0RWxlbWVudEltcGwuY3BwCTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAKKysrIGtzdmcy
L1NWR0ZFRGlzdGFudExpZ2h0RWxlbWVudEltcGwuY3BwCTExIE5vdiAyMDA1IDIzOjM2OjAwIC0w
MDAwCkBAIC0wLDAgKzEsMjIgQEAKKy8qCisgKiAgU1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50SW1w
bC5jcHAKKyAqICBXZWJDb3JlCisgKgorICogIENyZWF0ZWQgYnkgT2xpdmVyIG9uIDgvMTEvMDUu
CisgKiAgQ29weXJpZ2h0IDIwMDUgT2xpdmVyIEh1bnQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICovCisKKyNpbmNsdWRlICJTVkdGRURpc3RhbnRMaWdodEVsZW1lbnRJbXBsLmgiCisKK3Vz
aW5nIG5hbWVzcGFjZSBLU1ZHOworCitTVkdGRURpc3RhbnRMaWdodEVsZW1lbnRJbXBsOjpTVkdG
RURpc3RhbnRMaWdodEVsZW1lbnRJbXBsKEtET006OkRvY3VtZW50UHRyICpkb2MsIEtET006Ok5v
ZGVJbXBsOjpJZCBpZCwgS0RPTTo6RE9NU3RyaW5nSW1wbCAqcHJlZml4KSA6IAorU1ZHRkVMaWdo
dEVsZW1lbnRJbXBsKGRvYywgaWQsIHByZWZpeCkKK3sKK30KKworU1ZHRkVEaXN0YW50TGlnaHRF
bGVtZW50SW1wbDo6flNWR0ZFRGlzdGFudExpZ2h0RWxlbWVudEltcGwoKQoreworfQorCkluZGV4
OiBrc3ZnMi9TVkdGRURpc3RhbnRMaWdodEVsZW1lbnRJbXBsLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpkaWZmIC1O
cHUga3N2ZzIvU1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50SW1wbC5oCi0tLSBrc3ZnMi9TVkdGRURp
c3RhbnRMaWdodEVsZW1lbnRJbXBsLmgJMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMAorKysga3N2
ZzIvU1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50SW1wbC5oCTExIE5vdiAyMDA1IDIzOjM2OjAwIC0w
MDAwCkBAIC0wLDAgKzEsMjUgQEAKKy8qCisgKiAgU1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50SW1w
bC5oCisgKiAgV2ViQ29yZQorICoKKyAqICBDcmVhdGVkIGJ5IE9saXZlciBvbiA4LzExLzA1Lgor
ICogIENvcHlyaWdodCAyMDA1IE9saXZlciBIdW50LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqLworCisjaWZuZGVmIEtTVkdfU1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50SW1wbF9ICisjZGVm
aW5lIEtTVkdfU1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50SW1wbF9ICisKKyNpbmNsdWRlICJTVkdG
RUxpZ2h0RWxlbWVudEltcGwuaCIKKworbmFtZXNwYWNlIEtTVkcKK3sKKyAgICBjbGFzcyBTVkdG
RURpc3RhbnRMaWdodEVsZW1lbnRJbXBsIDogcHVibGljIFNWR0ZFTGlnaHRFbGVtZW50SW1wbAor
eworcHVibGljOgorICAgIFNWR0ZFRGlzdGFudExpZ2h0RWxlbWVudEltcGwoS0RPTTo6RG9jdW1l
bnRQdHIgKmRvYywgS0RPTTo6Tm9kZUltcGw6OklkIGlkLCBLRE9NOjpET01TdHJpbmdJbXBsICpw
cmVmaXgpOworICAgIHZpcnR1YWwgflNWR0ZFRGlzdGFudExpZ2h0RWxlbWVudEltcGwoKTsKK307
Cit9OworCisjZW5kaWYKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCkluZGV4OiBrc3ZnMi9T
VkdGRUxpZ2h0RWxlbWVudEltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtTnB1IGtzdmcyL1NWR0ZF
TGlnaHRFbGVtZW50SW1wbC5jcHAKLS0tIGtzdmcyL1NWR0ZFTGlnaHRFbGVtZW50SW1wbC5jcHAJ
MSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMAorKysga3N2ZzIvU1ZHRkVMaWdodEVsZW1lbnRJbXBs
LmNwcAkxMSBOb3YgMjAwNSAyMzozNjowMCAtMDAwMApAQCAtMCwwICsxLDE4NyBAQAorLy9jb3B5
cmlnaHQgZm9vIGdvZXMgaGVyZQorCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlIDxx
c3RyaW5nbGlzdC5oPgorCisjaW5jbHVkZSA8a2RvbS9jb3JlL0F0dHJJbXBsLmg+CisKKyNpbmNs
dWRlIDxrY2FudmFzL0tDYW52YXMuaD4KKyNpbmNsdWRlIDxrY2FudmFzL0tDYW52YXNSZWdpc3Ry
eS5oPgorI2luY2x1ZGUgPGtjYW52YXMvS0NhbnZhc1Jlc291cmNlcy5oPgorI2luY2x1ZGUgPGtj
YW52YXMvS0NhbnZhc0ZpbHRlcnMuaD4KKyNpbmNsdWRlIDxrY2FudmFzL2RldmljZS9LUmVuZGVy
aW5nRGV2aWNlLmg+CisKKyNpbmNsdWRlICJzdmdhdHRycy5oIgorI2luY2x1ZGUgIlNWR0hlbHBl
ci5oIgorI2luY2x1ZGUgIlNWR1JlbmRlclN0eWxlLmgiCisjaW5jbHVkZSAiU1ZHRkVMaWdodEVs
ZW1lbnRJbXBsLmgiCisjaW5jbHVkZSAiU1ZHQW5pbWF0ZWRTdHJpbmdJbXBsLmgiCisjaW5jbHVk
ZSAiU1ZHQW5pbWF0ZWROdW1iZXJJbXBsLmgiCisjaW5jbHVkZSAiU1ZHQW5pbWF0ZWRFbnVtZXJh
dGlvbkltcGwuaCIKKyNpbmNsdWRlICJTVkdET01JbXBsZW1lbnRhdGlvbkltcGwuaCIKKwordXNp
bmcgbmFtZXNwYWNlIEtTVkc7CisKK1NWR0ZFTGlnaHRFbGVtZW50SW1wbDo6U1ZHRkVMaWdodEVs
ZW1lbnRJbXBsKEtET006OkRvY3VtZW50UHRyICpkb2MsIEtET006Ok5vZGVJbXBsOjpJZCBpZCwg
S0RPTTo6RE9NU3RyaW5nSW1wbCAqcHJlZml4KSA6IAorU1ZHRWxlbWVudEltcGwoZG9jLCBpZCwg
cHJlZml4KQoreworICAgIG1fYXppbXV0aCA9IDA7CisgICAgbV9lbGV2YXRpb24gPSAwOworICAg
IG1feCA9IDA7CisgICAgbV95ID0gMDsKKyAgICBtX3ogPSAwOworICAgIG1fcG9pbnRzQXRYID0g
MDsKKyAgICBtX3BvaW50c0F0WSA9IDA7CisgICAgbV9wb2ludHNBdFogPSAwOworICAgIG1fc3Bl
Y3VsYXJFeHBvbmVudCA9IDA7CisgICAgbV9saW1pdGluZ0NvbmVBbmdsZSA9IDA7Cit9CisKK1NW
R0ZFTGlnaHRFbGVtZW50SW1wbDo6flNWR0ZFTGlnaHRFbGVtZW50SW1wbCgpCit7CisgICAgaWYo
bV9hemltdXRoKQorICAgICAgICBtX2F6aW11dGgtPmRlcmVmKCk7CisgICAgaWYobV9lbGV2YXRp
b24pCisgICAgICAgIG1fZWxldmF0aW9uLT5kZXJlZigpOworICAgIGlmKG1feCkKKyAgICAgICAg
bV94LT5kZXJlZigpOworICAgIGlmKG1feSkKKyAgICAgICAgbV95LT5kZXJlZigpOworICAgIGlm
KG1feikKKyAgICAgICAgbV96LT5kZXJlZigpOworICAgIGlmKG1fcG9pbnRzQXRYKQorICAgICAg
ICBtX3BvaW50c0F0WC0+ZGVyZWYoKTsKKyAgICBpZihtX3BvaW50c0F0WSkKKyAgICAgICAgbV9w
b2ludHNBdFktPmRlcmVmKCk7CisgICAgaWYobV9wb2ludHNBdFopCisgICAgICAgIG1fcG9pbnRz
QXRaLT5kZXJlZigpOworICAgIGlmKG1fc3BlY3VsYXJFeHBvbmVudCkKKyAgICAgICAgbV9zcGVj
dWxhckV4cG9uZW50LT5kZXJlZigpOworICAgIGlmKG1fbGltaXRpbmdDb25lQW5nbGUpCisgICAg
ICAgIG1fbGltaXRpbmdDb25lQW5nbGUtPmRlcmVmKCk7Cit9CisKK1NWR0FuaW1hdGVkTnVtYmVy
SW1wbCAqU1ZHRkVMaWdodEVsZW1lbnRJbXBsOjphemltdXRoKCkgY29uc3QKK3sKKyAgICBTVkdT
dHlsZWRFbGVtZW50SW1wbCAqZHVtbXkgPSAwOworICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdB
bmltYXRlZE51bWJlckltcGw+KG1fYXppbXV0aCwgZHVtbXkpOworfQorCitTVkdBbmltYXRlZE51
bWJlckltcGwgKlNWR0ZFTGlnaHRFbGVtZW50SW1wbDo6ZWxldmF0aW9uKCkgY29uc3QKK3sKKyAg
ICBTVkdTdHlsZWRFbGVtZW50SW1wbCAqZHVtbXkgPSAwOworICAgIHJldHVybiBsYXp5X2NyZWF0
ZTxTVkdBbmltYXRlZE51bWJlckltcGw+KG1fZWxldmF0aW9uLCBkdW1teSk7Cit9CisKK1NWR0Fu
aW1hdGVkTnVtYmVySW1wbCAqU1ZHRkVMaWdodEVsZW1lbnRJbXBsOjp4KCkgY29uc3QKK3sKKyAg
ICBTVkdTdHlsZWRFbGVtZW50SW1wbCAqZHVtbXkgPSAwOworICAgIHJldHVybiBsYXp5X2NyZWF0
ZTxTVkdBbmltYXRlZE51bWJlckltcGw+KG1feCwgZHVtbXkpOworfQorCitTVkdBbmltYXRlZE51
bWJlckltcGwgKlNWR0ZFTGlnaHRFbGVtZW50SW1wbDo6eSgpIGNvbnN0Cit7CisgICAgU1ZHU3R5
bGVkRWxlbWVudEltcGwgKmR1bW15ID0gMDsKKyAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5p
bWF0ZWROdW1iZXJJbXBsPihtX3ksIGR1bW15KTsKK30KKworCitTVkdBbmltYXRlZE51bWJlcklt
cGwgKlNWR0ZFTGlnaHRFbGVtZW50SW1wbDo6eigpIGNvbnN0Cit7CisgICAgU1ZHU3R5bGVkRWxl
bWVudEltcGwgKmR1bW15ID0gMDsKKyAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWRO
dW1iZXJJbXBsPihtX3osIGR1bW15KTsKK30KKworU1ZHQW5pbWF0ZWROdW1iZXJJbXBsICpTVkdG
RUxpZ2h0RWxlbWVudEltcGw6OnBvaW50c0F0WCgpIGNvbnN0Cit7CisgICAgU1ZHU3R5bGVkRWxl
bWVudEltcGwgKmR1bW15ID0gMDsKKyAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWRO
dW1iZXJJbXBsPihtX3BvaW50c0F0WCwgZHVtbXkpOworfQorCitTVkdBbmltYXRlZE51bWJlcklt
cGwgKlNWR0ZFTGlnaHRFbGVtZW50SW1wbDo6cG9pbnRzQXRZKCkgY29uc3QKK3sKKyAgICBTVkdT
dHlsZWRFbGVtZW50SW1wbCAqZHVtbXkgPSAwOworICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdB
bmltYXRlZE51bWJlckltcGw+KG1fcG9pbnRzQXRZLCBkdW1teSk7Cit9CisKK1NWR0FuaW1hdGVk
TnVtYmVySW1wbCAqU1ZHRkVMaWdodEVsZW1lbnRJbXBsOjpwb2ludHNBdFooKSBjb25zdAorewor
ICAgIFNWR1N0eWxlZEVsZW1lbnRJbXBsICpkdW1teSA9IDA7CisgICAgcmV0dXJuIGxhenlfY3Jl
YXRlPFNWR0FuaW1hdGVkTnVtYmVySW1wbD4obV9wb2ludHNBdFosIGR1bW15KTsKK30KKworU1ZH
QW5pbWF0ZWROdW1iZXJJbXBsICpTVkdGRUxpZ2h0RWxlbWVudEltcGw6OnNwZWN1bGFyRXhwb25l
bnQoKSBjb25zdAoreworICAgIFNWR1N0eWxlZEVsZW1lbnRJbXBsICpkdW1teSA9IDA7CisgICAg
cmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTnVtYmVySW1wbD4obV9zcGVjdWxhckV4cG9u
ZW50LCBkdW1teSk7Cit9CisKK1NWR0FuaW1hdGVkTnVtYmVySW1wbCAqU1ZHRkVMaWdodEVsZW1l
bnRJbXBsOjpsaW1pdGluZ0NvbmVBbmdsZSgpIGNvbnN0Cit7CisgICAgU1ZHU3R5bGVkRWxlbWVu
dEltcGwgKmR1bW15ID0gMDsKKyAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWROdW1i
ZXJJbXBsPihtX2xpbWl0aW5nQ29uZUFuZ2xlLCBkdW1teSk7Cit9CisKK3ZvaWQgU1ZHRkVMaWdo
dEVsZW1lbnRJbXBsOjpwYXJzZUF0dHJpYnV0ZShLRE9NOjpBdHRyaWJ1dGVJbXBsICphdHRyKQor
eworICAgIGludCBpZCA9IChhdHRyLT5pZCgpICYgTm9kZUltcGxfSWRMb2NhbE1hc2spOworICAg
IEtET006OkRPTVN0cmluZyB2YWx1ZShhdHRyLT52YWx1ZSgpKTsKKyAgICBzd2l0Y2goaWQpCisg
ICAgeworICAgICAgICBjYXNlIEFUVFJfQVpJTVVUSDoKKyAgICAgICAgeworICAgICAgICAgICAg
YXppbXV0aCgpLT5zZXRCYXNlVmFsKHZhbHVlLnN0cmluZygpLnRvRG91YmxlKCkpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBBVFRSX0VMRVZBVElPTjoKKyAg
ICAgICAgeworICAgICAgICAgICAgZWxldmF0aW9uKCktPnNldEJhc2VWYWwodmFsdWUuc3RyaW5n
KCkudG9Eb3VibGUoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBj
YXNlIEFUVFJfWDoKKyAgICAgICAgeworICAgICAgICAgICAgeCgpLT5zZXRCYXNlVmFsKHZhbHVl
LnN0cmluZygpLnRvRG91YmxlKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgY2FzZSBBVFRSX1k6CisgICAgICAgIHsKKyAgICAgICAgICAgIHkoKS0+c2V0QmFzZVZh
bCh2YWx1ZS5zdHJpbmcoKS50b0RvdWJsZSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgICAgIGNhc2UgQVRUUl9aOgorICAgICAgICB7CisgICAgICAgICAgICB6KCktPnNl
dEJhc2VWYWwodmFsdWUuc3RyaW5nKCkudG9Eb3VibGUoKSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICBjYXNlIEFUVFJfUE9JTlRTQVRYOgorICAgICAgICB7CisgICAg
ICAgICAgICBwb2ludHNBdFgoKS0+c2V0QmFzZVZhbCh2YWx1ZS5zdHJpbmcoKS50b0RvdWJsZSgp
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgQVRUUl9QT0lO
VFNBVFk6CisgICAgICAgIHsKKyAgICAgICAgICAgIHBvaW50c0F0WSgpLT5zZXRCYXNlVmFsKHZh
bHVlLnN0cmluZygpLnRvRG91YmxlKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICAgICAgY2FzZSBBVFRSX1BPSU5UU0FUWjoKKyAgICAgICAgeworICAgICAgICAgICAgcG9p
bnRzQXRaKCktPnNldEJhc2VWYWwodmFsdWUuc3RyaW5nKCkudG9Eb3VibGUoKSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEFUVFJfU1BFQ1VMQVJFWFBPTkVO
VDoKKyAgICAgICAgeworICAgICAgICAgICAgc3BlY3VsYXJFeHBvbmVudCgpLT5zZXRCYXNlVmFs
KHZhbHVlLnN0cmluZygpLnRvRG91YmxlKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgY2FzZSBBVFRSX0xJTUlUSU5HQ09ORUFOR0xFOgorICAgICAgICB7CisgICAg
ICAgICAgICBsaW1pdGluZ0NvbmVBbmdsZSgpLT5zZXRCYXNlVmFsKHZhbHVlLnN0cmluZygpLnRv
RG91YmxlKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgeworICAgICAgICAgICAgU1ZHRWxlbWVudEltcGw6OnBhcnNlQXR0cmlidXRl
KGF0dHIpOworICAgICAgICB9CisgICAgfTsKK30KSW5kZXg6IGtzdmcyL1NWR0ZFTGlnaHRFbGVt
ZW50SW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtTnB1IGtzdmcyL1NWR0ZFTGlnaHRFbGVtZW50SW1w
bC5oCi0tLSBrc3ZnMi9TVkdGRUxpZ2h0RWxlbWVudEltcGwuaAkxIEphbiAxOTcwIDAwOjAwOjAw
IC0wMDAwCisrKyBrc3ZnMi9TVkdGRUxpZ2h0RWxlbWVudEltcGwuaAkxMSBOb3YgMjAwNSAyMzoz
NjowMCAtMDAwMApAQCAtMCwwICsxLDUwIEBACisvL3ByZXN1bWFibHkgbmVlZCBhIGNvcHlyaWdo
dCBub3RpY2Ugb2Ygc29tZWtpbmQgaGVyZQorCisjaWZuZGVmIEtTVkdfU1ZHRkVMaWdodEVsZW1l
bnRJbXBsX0gKKyNkZWZpbmUgS1NWR19TVkdGRUxpZ2h0RWxlbWVudEltcGxfSAorI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIlNWR0VsZW1lbnRJbXBsLmgiCisKK25hbWVzcGFjZSBLU1ZH
Cit7CisgICAgY2xhc3MgU1ZHQW5pbWF0ZWROdW1iZXJJbXBsOworICAgIGNsYXNzIFNWR0FuaW1h
dGVkTnVtYmVyTGlzdEltcGw7CisgICAgY2xhc3MgU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbkltcGw7
CisgICAgCisgICAgY2xhc3MgU1ZHRkVMaWdodEVsZW1lbnRJbXBsIDogcHVibGljIFNWR0VsZW1l
bnRJbXBsCisgICAgeworICAgIHB1YmxpYzoKKyAgICAgICAgU1ZHRkVMaWdodEVsZW1lbnRJbXBs
KEtET006OkRvY3VtZW50UHRyICpkb2MsIEtET006Ok5vZGVJbXBsOjpJZCBpZCwgS0RPTTo6RE9N
U3RyaW5nSW1wbCAqcHJlZml4KTsKKyAgICAgICAgdmlydHVhbCB+U1ZHRkVMaWdodEVsZW1lbnRJ
bXBsKCk7CisgICAgICAgIAorICAgICAgICAvLyAnU1ZHQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlv
bkVsZW1lbnQnIGZ1bmN0aW9ucworICAgICAgICBTVkdBbmltYXRlZE51bWJlckltcGwgKmF6aW11
dGgoKSBjb25zdDsKKyAgICAgICAgU1ZHQW5pbWF0ZWROdW1iZXJJbXBsICplbGV2YXRpb24oKSBj
b25zdDsKKyAgICAgICAgU1ZHQW5pbWF0ZWROdW1iZXJJbXBsICp4KCkgY29uc3Q7CisgICAgICAg
IFNWR0FuaW1hdGVkTnVtYmVySW1wbCAqeSgpIGNvbnN0OworICAgICAgICBTVkdBbmltYXRlZE51
bWJlckltcGwgKnooKSBjb25zdDsKKyAgICAgICAgU1ZHQW5pbWF0ZWROdW1iZXJJbXBsICpwb2lu
dHNBdFgoKSBjb25zdDsKKyAgICAgICAgU1ZHQW5pbWF0ZWROdW1iZXJJbXBsICpwb2ludHNBdFko
KSBjb25zdDsKKyAgICAgICAgU1ZHQW5pbWF0ZWROdW1iZXJJbXBsICpwb2ludHNBdFooKSBjb25z
dDsKKyAgICAgICAgU1ZHQW5pbWF0ZWROdW1iZXJJbXBsICpzcGVjdWxhckV4cG9uZW50KCkgY29u
c3Q7CisgICAgICAgIFNWR0FuaW1hdGVkTnVtYmVySW1wbCAqbGltaXRpbmdDb25lQW5nbGUoKSBj
b25zdDsKKyAgICAgICAgCisgICAgICAgIC8vIERlcml2ZWQgZnJvbTogJ0VsZW1lbnRJbXBsJwor
ICAgICAgICB2b2lkIHBhcnNlQXR0cmlidXRlKEtET006OkF0dHJpYnV0ZUltcGwgKmF0dHIpOwor
ICAgICAgICAKKyAgICBwcml2YXRlOgorICAgICAgICBtdXRhYmxlIFNWR0FuaW1hdGVkTnVtYmVy
SW1wbCAqbV9hemltdXRoOworICAgICAgICBtdXRhYmxlIFNWR0FuaW1hdGVkTnVtYmVySW1wbCAq
bV9lbGV2YXRpb247CisgICAgICAgIG11dGFibGUgU1ZHQW5pbWF0ZWROdW1iZXJJbXBsICptX3g7
CisgICAgICAgIG11dGFibGUgU1ZHQW5pbWF0ZWROdW1iZXJJbXBsICptX3k7CisgICAgICAgIG11
dGFibGUgU1ZHQW5pbWF0ZWROdW1iZXJJbXBsICptX3o7CisgICAgICAgIG11dGFibGUgU1ZHQW5p
bWF0ZWROdW1iZXJJbXBsICptX3BvaW50c0F0WDsKKyAgICAgICAgbXV0YWJsZSBTVkdBbmltYXRl
ZE51bWJlckltcGwgKm1fcG9pbnRzQXRZOworICAgICAgICBtdXRhYmxlIFNWR0FuaW1hdGVkTnVt
YmVySW1wbCAqbV9wb2ludHNBdFo7CisgICAgICAgIG11dGFibGUgU1ZHQW5pbWF0ZWROdW1iZXJJ
bXBsICptX3NwZWN1bGFyRXhwb25lbnQ7CisgICAgICAgIG11dGFibGUgU1ZHQW5pbWF0ZWROdW1i
ZXJJbXBsICptX2xpbWl0aW5nQ29uZUFuZ2xlOworICAgICAgICAKKyAgICB9OworfTsKKworI2Vu
ZGlmClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpJbmRleDoga3N2ZzIvU1ZHRkVQb2ludExp
Z2h0RWxlbWVudEltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtTnB1IGtzdmcyL1NWR0ZFUG9pbnRM
aWdodEVsZW1lbnRJbXBsLmNwcAotLS0ga3N2ZzIvU1ZHRkVQb2ludExpZ2h0RWxlbWVudEltcGwu
Y3BwCTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAKKysrIGtzdmcyL1NWR0ZFUG9pbnRMaWdodEVs
ZW1lbnRJbXBsLmNwcAkxMSBOb3YgMjAwNSAyMzozNjowMCAtMDAwMApAQCAtMCwwICsxLDE1IEBA
CisvLyBjb3B5cmlnaHQgZm9vIGhlcmUKKworI2luY2x1ZGUgIlNWR0ZFUG9pbnRMaWdodEVsZW1l
bnRJbXBsLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBLU1ZHOworCitTVkdGRVBvaW50TGlnaHRFbGVt
ZW50SW1wbDo6U1ZHRkVQb2ludExpZ2h0RWxlbWVudEltcGwoS0RPTTo6RG9jdW1lbnRQdHIgKmRv
YywgS0RPTTo6Tm9kZUltcGw6OklkIGlkLCBLRE9NOjpET01TdHJpbmdJbXBsICpwcmVmaXgpIDog
CitTVkdGRUxpZ2h0RWxlbWVudEltcGwoZG9jLCBpZCwgcHJlZml4KQoreworfQorCitTVkdGRVBv
aW50TGlnaHRFbGVtZW50SW1wbDo6flNWR0ZFUG9pbnRMaWdodEVsZW1lbnRJbXBsKCkKK3sKK30K
KwpJbmRleDoga3N2ZzIvU1ZHRkVQb2ludExpZ2h0RWxlbWVudEltcGwuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CmRp
ZmYgLU5wdSBrc3ZnMi9TVkdGRVBvaW50TGlnaHRFbGVtZW50SW1wbC5oCi0tLSBrc3ZnMi9TVkdG
RVBvaW50TGlnaHRFbGVtZW50SW1wbC5oCTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAKKysrIGtz
dmcyL1NWR0ZFUG9pbnRMaWdodEVsZW1lbnRJbXBsLmgJMTEgTm92IDIwMDUgMjM6MzY6MDAgLTAw
MDAKQEAgLTAsMCArMSwxOCBAQAorLy9wcmVzdW1hYmx5IG5lZWQgYSBjb3B5cmlnaHQgbm90aWNl
IG9mIHNvbWVraW5kIGhlcmUKKworI2lmbmRlZiBLU1ZHX1NWR0ZFUG9pbnRMaWdodEVsZW1lbnRJ
bXBsX0gKKyNkZWZpbmUgS1NWR19TVkdGRVBvaW50TGlnaHRFbGVtZW50SW1wbF9ICisKKyNpbmNs
dWRlICJTVkdGRUxpZ2h0RWxlbWVudEltcGwuaCIKKworbmFtZXNwYWNlIEtTVkcKK3sKKyAgICBj
bGFzcyBTVkdGRVBvaW50TGlnaHRFbGVtZW50SW1wbCA6IHB1YmxpYyBTVkdGRUxpZ2h0RWxlbWVu
dEltcGwKKyAgICB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgU1ZHRkVQb2ludExpZ2h0RWxl
bWVudEltcGwoS0RPTTo6RG9jdW1lbnRQdHIgKmRvYywgS0RPTTo6Tm9kZUltcGw6OklkIGlkLCBL
RE9NOjpET01TdHJpbmdJbXBsICpwcmVmaXgpOworICAgICAgICB2aXJ0dWFsIH5TVkdGRVBvaW50
TGlnaHRFbGVtZW50SW1wbCgpOworICAgIH07Cit9OworCisjZW5kaWYKXCBObyBuZXdsaW5lIGF0
IGVuZCBvZiBmaWxlCkluZGV4OiBrc3ZnMi9TVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50SW1w
bC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQpkaWZmIC1OcHUga3N2ZzIvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxl
bWVudEltcGwuY3BwCi0tLSBrc3ZnMi9TVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50SW1wbC5j
cHAJMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMAorKysga3N2ZzIvU1ZHRkVTcGVjdWxhckxpZ2h0
aW5nRWxlbWVudEltcGwuY3BwCTEyIE5vdiAyMDA1IDAwOjM4OjMxIC0wMDAwCkBAIC0wLDAgKzEs
MjMwIEBACisvKgorICogIFNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnRJbXBsLmNwcAorICog
IFdlYkNvcmUKKyAqCisgKiAgQ3JlYXRlZCBieSBPbGl2ZXIgb24gOC8xMS8wNS4KKyAqICBDb3B5
cmlnaHQgMjAwNSBPbGl2ZXIgSHVudC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPHFzdHJpbmdsaXN0Lmg+CisKKyNpbmNsdWRl
IDxrZG9tL2NvcmUvQXR0ckltcGwuaD4KKworI2luY2x1ZGUgPGtjYW52YXMvS0NhbnZhcy5oPgor
I2luY2x1ZGUgPGtjYW52YXMvS0NhbnZhc1JlZ2lzdHJ5Lmg+CisjaW5jbHVkZSA8a2NhbnZhcy9L
Q2FudmFzRmlsdGVycy5oPgorI2luY2x1ZGUgPGtjYW52YXMvZGV2aWNlL0tSZW5kZXJpbmdEZXZp
Y2UuaD4KKworI2luY2x1ZGUgInN2Z2F0dHJzLmgiCisjaW5jbHVkZSAiU1ZHSGVscGVyLmgiCisj
aW5jbHVkZSAiU1ZHUmVuZGVyU3R5bGUuaCIKKyNpbmNsdWRlICJTVkdBbmltYXRlZENvbG9ySW1w
bC5oIgorI2luY2x1ZGUgIlNWR0FuaW1hdGVkTnVtYmVySW1wbC5oIgorI2luY2x1ZGUgIlNWR0Fu
aW1hdGVkU3RyaW5nSW1wbC5oIgorI2luY2x1ZGUgIlNWR0ZFTGlnaHRFbGVtZW50SW1wbC5oIgor
I2luY2x1ZGUgIlNWR0RPTUltcGxlbWVudGF0aW9uSW1wbC5oIgorI2luY2x1ZGUgIlNWR0ZFU3Bl
Y3VsYXJMaWdodGluZ0VsZW1lbnRJbXBsLmgiCisKKwordXNpbmcgbmFtZXNwYWNlIEtTVkc7CisK
K1NWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnRJbXBsOjpTVkdGRVNwZWN1bGFyTGlnaHRpbmdF
bGVtZW50SW1wbChLRE9NOjpEb2N1bWVudFB0ciAqZG9jLCBLRE9NOjpOb2RlSW1wbDo6SWQgaWQs
IEtET006OkRPTVN0cmluZ0ltcGwgKnByZWZpeCkgOiAKK1NWR0ZpbHRlclByaW1pdGl2ZVN0YW5k
YXJkQXR0cmlidXRlc0ltcGwoZG9jLCBpZCwgcHJlZml4KQoreworICAgIG1fc3BlY3VsYXJDb25z
dGFudCA9IDA7CisgICAgbV9zcGVjdWxhckV4cG9uZW50ID0gMDsKKyAgICBtX3N1cmZhY2VTY2Fs
ZSA9IDA7CisgICAgbV9maWx0ZXJFZmZlY3QgPSAwOworICAgIG1fa2VybmVsVW5pdExlbmd0aFgg
PSAwOworICAgIG1fa2VybmVsVW5pdExlbmd0aFkgPSAwOworICAgIG1fbGlnaHRpbmdDb2xvciA9
IDA7CisgICAgbV9pbjEgPSAwOworfQorCitTVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50SW1w
bDo6flNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnRJbXBsKCkKK3sKKyAgICBpZihtX2luMSkK
KyAgICAgICAgbV9pbjEtPmRlcmVmKCk7CisgICAgaWYobV9zcGVjdWxhckV4cG9uZW50KQorICAg
ICAgICBtX3NwZWN1bGFyRXhwb25lbnQtPmRlcmVmKCk7CisgICAgaWYobV9zcGVjdWxhckNvbnN0
YW50KQorICAgICAgICBtX3NwZWN1bGFyQ29uc3RhbnQtPmRlcmVmKCk7CisgICAgaWYobV9zdXJm
YWNlU2NhbGUpCisgICAgICAgIG1fc3VyZmFjZVNjYWxlLT5kZXJlZigpOworICAgIGlmKG1fa2Vy
bmVsVW5pdExlbmd0aFgpCisgICAgICAgIG1fa2VybmVsVW5pdExlbmd0aFgtPmRlcmVmKCk7Cisg
ICAgaWYobV9rZXJuZWxVbml0TGVuZ3RoWSkKKyAgICAgICAgbV9rZXJuZWxVbml0TGVuZ3RoWS0+
ZGVyZWYoKTsKKyAgICBpZihtX2xpZ2h0aW5nQ29sb3IpCisgICAgICAgIG1fbGlnaHRpbmdDb2xv
ci0+ZGVyZWYoKTsKK30KKworU1ZHQW5pbWF0ZWRTdHJpbmdJbXBsICpTVkdGRVNwZWN1bGFyTGln
aHRpbmdFbGVtZW50SW1wbDo6aW4xKCkgY29uc3QKK3sKKyAgICBTVkdTdHlsZWRFbGVtZW50SW1w
bCAqZHVtbXkgPSAwOworICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZFN0cmluZ0lt
cGw+KG1faW4xLCBkdW1teSk7Cit9CisKK1NWR0FuaW1hdGVkTnVtYmVySW1wbCAqU1ZHRkVTcGVj
dWxhckxpZ2h0aW5nRWxlbWVudEltcGw6OnNwZWN1bGFyQ29uc3RhbnQoKSBjb25zdAoreworICAg
IFNWR1N0eWxlZEVsZW1lbnRJbXBsICpkdW1teSA9IDA7CisgICAgcmV0dXJuIGxhenlfY3JlYXRl
PFNWR0FuaW1hdGVkTnVtYmVySW1wbD4obV9zcGVjdWxhckNvbnN0YW50LCBkdW1teSk7Cit9CisK
K1NWR0FuaW1hdGVkTnVtYmVySW1wbCAqU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudEltcGw6
OnNwZWN1bGFyRXhwb25lbnQoKSBjb25zdAoreworICAgIFNWR1N0eWxlZEVsZW1lbnRJbXBsICpk
dW1teSA9IDA7CisgICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTnVtYmVySW1wbD4o
bV9zcGVjdWxhckV4cG9uZW50LCBkdW1teSk7Cit9CisKK1NWR0FuaW1hdGVkTnVtYmVySW1wbCAq
U1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudEltcGw6OnN1cmZhY2VTY2FsZSgpIGNvbnN0Cit7
CisgICAgU1ZHU3R5bGVkRWxlbWVudEltcGwgKmR1bW15ID0gMDsKKyAgICByZXR1cm4gbGF6eV9j
cmVhdGU8U1ZHQW5pbWF0ZWROdW1iZXJJbXBsPihtX3N1cmZhY2VTY2FsZSwgZHVtbXkpOworfQor
CitTVkdBbmltYXRlZE51bWJlckltcGwgKlNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnRJbXBs
OjprZXJuZWxVbml0TGVuZ3RoWCgpIGNvbnN0Cit7CisgICAgU1ZHU3R5bGVkRWxlbWVudEltcGwg
KmR1bW15ID0gMDsKKyAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWROdW1iZXJJbXBs
PihtX2tlcm5lbFVuaXRMZW5ndGhYLCBkdW1teSk7Cit9CisKK1NWR0FuaW1hdGVkTnVtYmVySW1w
bCAqU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudEltcGw6Omtlcm5lbFVuaXRMZW5ndGhZKCkg
Y29uc3QKK3sKKyAgICBTVkdTdHlsZWRFbGVtZW50SW1wbCAqZHVtbXkgPSAwOworICAgIHJldHVy
biBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZE51bWJlckltcGw+KG1fa2VybmVsVW5pdExlbmd0aFks
IGR1bW15KTsKK30KKworU1ZHQW5pbWF0ZWRDb2xvckltcGwgICpTVkdGRVNwZWN1bGFyTGlnaHRp
bmdFbGVtZW50SW1wbDo6bGlnaHRpbmdDb2xvcigpIGNvbnN0Cit7CisgICAgU1ZHU3R5bGVkRWxl
bWVudEltcGwgKmR1bW15ID0gMDsKKyAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWRD
b2xvckltcGw+KG1fbGlnaHRpbmdDb2xvciwgZHVtbXkpOworfQorCit2b2lkIFNWR0ZFU3BlY3Vs
YXJMaWdodGluZ0VsZW1lbnRJbXBsOjpwYXJzZUF0dHJpYnV0ZShLRE9NOjpBdHRyaWJ1dGVJbXBs
ICphdHRyKQoreworICAgIGludCBpZCA9IChhdHRyLT5pZCgpICYgTm9kZUltcGxfSWRMb2NhbE1h
c2spOworICAgIEtET006OkRPTVN0cmluZyB2YWx1ZShhdHRyLT52YWx1ZSgpKTsKKyAgICAKKyAg
ICBzd2l0Y2goaWQpCisgICAgeworICAgICAgICBjYXNlIEFUVFJfSU46CisgICAgICAgIHsKKyAg
ICAgICAgICAgIGluMSgpLT5zZXRCYXNlVmFsKHZhbHVlLmhhbmRsZSgpKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgQVRUUl9TVVJGQUNFU0NBTEU6CisgICAg
ICAgIHsKKyAgICAgICAgICAgIHN1cmZhY2VTY2FsZSgpLT5zZXRCYXNlVmFsKHZhbHVlLnN0cmlu
ZygpLnRvRG91YmxlKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg
Y2FzZSBBVFRSX1NQRUNVTEFSQ09OU1RBTlQ6CisgICAgICAgIHsKKyAgICAgICAgICAgIHNwZWN1
bGFyQ29uc3RhbnQoKS0+c2V0QmFzZVZhbCh2YWx1ZS5zdHJpbmcoKS50b0RvdWJsZSgpKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgQVRUUl9TUEVDVUxBUkVY
UE9ORU5UOgorICAgICAgICB7CisgICAgICAgICAgICBzcGVjdWxhckV4cG9uZW50KCktPnNldEJh
c2VWYWwodmFsdWUuc3RyaW5nKCkudG9Eb3VibGUoKSk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgICAgICBjYXNlIEFUVFJfS0VSTkVMVU5JVExFTkdUSDoKKyAgICAgICAgewor
ICAgICAgICAgICAgUVN0cmluZ0xpc3QgbnVtYmVycyA9IFFTdHJpbmdMaXN0OjpzcGxpdCgnICcs
IHZhbHVlLnN0cmluZygpKTsKKyAgICAgICAgICAgIGtlcm5lbFVuaXRMZW5ndGhYKCktPnNldEJh
c2VWYWwobnVtYmVyc1swXS50b0RvdWJsZSgpKTsKKyAgICAgICAgICAgIGlmKG51bWJlcnMuY291
bnQoKSA9PSAxKQorICAgICAgICAgICAgICAgIGtlcm5lbFVuaXRMZW5ndGhZKCktPnNldEJhc2VW
YWwobnVtYmVyc1swXS50b0RvdWJsZSgpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICBrZXJuZWxVbml0TGVuZ3RoWSgpLT5zZXRCYXNlVmFsKG51bWJlcnNbMV0udG9Eb3VibGUo
KSk7ICAgICAgICAgICAgCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBj
YXNlIEFUVFJfTElHSFRJTkdfQ09MT1I6CisgICAgICAgIHsKKyAgICAgICAgICAgIC8vRklYTUUg
dGhpcyBpcyBiYWQsIHBvdGVudGlhbCBtZW1vcnkgbGVhaworICAgICAgICAgICAgbGlnaHRpbmdD
b2xvcigpLT5zZXRCYXNlVmFsKG5ldyBTVkdDb2xvckltcGwodmFsdWUuaGFuZGxlKCkpKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgIHsK
KyAgICAgICAgICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlc0ltcGw6OnBh
cnNlQXR0cmlidXRlKGF0dHIpOworICAgICAgICB9CisgICAgfTsKK30KKworS0NhbnZhc0l0ZW0g
KlNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnRJbXBsOjpjcmVhdGVDYW52YXNJdGVtKEtDYW52
YXMgKmNhbnZhcywgS1JlbmRlcmluZ1N0eWxlICpzdHlsZSkgY29uc3QKK3sKKyAgICBtX2ZpbHRl
ckVmZmVjdCA9IHN0YXRpY19jYXN0PEtDYW52YXNGRVNwZWN1bGFyTGlnaHRpbmcgKj4oY2FudmFz
LT5yZW5kZXJpbmdEZXZpY2UoKS0+Y3JlYXRlRmlsdGVyRWZmZWN0KEZFX1NQRUNVTEFSX0xJR0hU
SU5HKSk7CisgICAgbV9maWx0ZXJFZmZlY3QtPnNldEluKEtET006OkRPTVN0cmluZyhpbjEoKS0+
YmFzZVZhbCgpKS5zdHJpbmcoKSk7CisgICAgc2V0U3RhbmRhcmRBdHRyaWJ1dGVzKG1fZmlsdGVy
RWZmZWN0KTsKKyAgICBtX2ZpbHRlckVmZmVjdC0+c2V0U3BlY3VsYXJDb25zdGFudCgoc3BlY3Vs
YXJDb25zdGFudCgpLT5iYXNlVmFsKCkpKTsKKyAgICBtX2ZpbHRlckVmZmVjdC0+c2V0U3BlY3Vs
YXJFeHBvbmVudCgoc3BlY3VsYXJFeHBvbmVudCgpLT5iYXNlVmFsKCkpKTsKKyAgICBtX2ZpbHRl
ckVmZmVjdC0+c2V0U3VyZmFjZVNjYWxlKChzdXJmYWNlU2NhbGUoKS0+YmFzZVZhbCgpKSk7Cisg
ICAgbV9maWx0ZXJFZmZlY3QtPnNldEtlcm5lbFVuaXRMZW5ndGhYKChrZXJuZWxVbml0TGVuZ3Ro
WCgpLT5iYXNlVmFsKCkpKTsKKyAgICBtX2ZpbHRlckVmZmVjdC0+c2V0S2VybmVsVW5pdExlbmd0
aFkoKGtlcm5lbFVuaXRMZW5ndGhZKCktPmJhc2VWYWwoKSkpOworICAgIG1fZmlsdGVyRWZmZWN0
LT5zZXRMaWdodGluZ0NvbG9yKGxpZ2h0aW5nQ29sb3IoKS0+YmFzZVZhbCgpLT5jb2xvcigpKTsK
KyAgICB1cGRhdGVMaWdodHMoKTsKKyAgICByZXR1cm4gMDsKK30KKworS0NhbnZhc0ZpbHRlckVm
ZmVjdCAqU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudEltcGw6OmZpbHRlckVmZmVjdCgpIGNv
bnN0Cit7CisgICAgdXBkYXRlTGlnaHRzKCk7CisgICAgcmV0dXJuIG1fZmlsdGVyRWZmZWN0Owor
fQorCitzdGF0aWMgS0NhbnZhc1BvaW50M0YgbWFrZVBvaW50KGZsb2F0IHgsIGZsb2F0IHksIGZs
b2F0IHopCit7CisgICAgS0NhbnZhc1BvaW50M0YgcmVzOworICAgIHJlcy5zZXRYKHgpOworICAg
IHJlcy5zZXRZKHkpOworICAgIHJlcy5zZXRaKHopOworICAgIHJldHVybiByZXM7Cit9CisKK3N0
YXRpYyB2b2lkIG5vcm1hbGlzZShLQ2FudmFzUG9pbnQzRiAmIHZhbCkKK3sKKyAgICBmbG9hdCBs
ZW5ndGggPSB2YWwueCgpKnZhbC54KCkrdmFsLnkoKSp2YWwueSgpK3ZhbC56KCkqdmFsLnooKTsK
KyAgICBsZW5ndGggPSBzcXJ0KGxlbmd0aCk7CisgICAgdmFsLnNldFgodmFsLngoKS9sZW5ndGgp
OworICAgIHZhbC5zZXRZKHZhbC55KCkvbGVuZ3RoKTsKKyAgICB2YWwuc2V0Wih2YWwueigpL2xl
bmd0aCk7Cit9CisKK3ZvaWQgU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudEltcGw6OnVwZGF0
ZUxpZ2h0cygpIGNvbnN0Cit7CisgICAgaWYgKCFtX2ZpbHRlckVmZmVjdCkKKyAgICAgICAgcmV0
dXJuOworICAgIEtET006Ok5vZGVJbXBsICpuID0gZmlyc3RDaGlsZCgpOworICAgIGlmKCFuKSBy
ZXR1cm47CisgICAgS0NMaWdodFNvdXJjZSAqIGxpZ2h0ID0gMDsKKyAgICBpZihuLT5pZCgpID09
IElEX0ZFRElTVEFOVExJR0hUKQorICAgIHsgICAgICAKKyAgICAgICAgU1ZHRkVMaWdodEVsZW1l
bnRJbXBsICpsaWdodE5vZGUgPSBzdGF0aWNfY2FzdDxTVkdGRUxpZ2h0RWxlbWVudEltcGwgKj4o
bik7ICAKKyAgICAgICAgbGlnaHQgPSBuZXcgS0NEaXN0YW50TGlnaHRTb3VyY2UobGlnaHROb2Rl
LT5hemltdXRoKCktPmJhc2VWYWwoKSwgbGlnaHROb2RlLT5lbGV2YXRpb24oKS0+YmFzZVZhbCgp
KTsKKyAgICB9CisgICAgZWxzZSBpZihuLT5pZCgpID09IElEX0ZFUE9JTlRMSUdIVCkKKyAgICB7
CisgICAgICAgIFNWR0ZFTGlnaHRFbGVtZW50SW1wbCAqbGlnaHROb2RlID0gc3RhdGljX2Nhc3Q8
U1ZHRkVMaWdodEVsZW1lbnRJbXBsICo+KG4pOyAgCisgICAgICAgIEtDYW52YXNQb2ludDNGIHBv
cyA9IG1ha2VQb2ludChsaWdodE5vZGUtPngoKS0+YmFzZVZhbCgpLCBsaWdodE5vZGUtPnkoKS0+
YmFzZVZhbCgpLCBsaWdodE5vZGUtPnooKS0+YmFzZVZhbCgpKTsKKyAgICAgICAgbGlnaHQgPSBu
ZXcgS0NQb2ludExpZ2h0U291cmNlKHBvcyk7CisgICAgfQorICAgIGVsc2UgaWYobi0+aWQoKSA9
PSBJRF9GRVNQT1RMSUdIVCkKKyAgICB7CisgICAgICAgIFNWR0ZFTGlnaHRFbGVtZW50SW1wbCAq
bGlnaHROb2RlID0gc3RhdGljX2Nhc3Q8U1ZHRkVMaWdodEVsZW1lbnRJbXBsICo+KG4pOyAgCisg
ICAgICAgIEtDYW52YXNQb2ludDNGIHBvcyA9IG1ha2VQb2ludChsaWdodE5vZGUtPngoKS0+YmFz
ZVZhbCgpLCBsaWdodE5vZGUtPnkoKS0+YmFzZVZhbCgpLCBsaWdodE5vZGUtPnooKS0+YmFzZVZh
bCgpKTsKKyAgICAgICAgLy9jb252ZXJ0IGxvb2tBdCB0byBhIGRpcmVjdGlvbgorICAgICAgICBL
Q2FudmFzUG9pbnQzRiBkaXJlY3Rpb24gPSBtYWtlUG9pbnQobGlnaHROb2RlLT5wb2ludHNBdFgo
KS0+YmFzZVZhbCgpLXBvcy54KCksIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbGlnaHROb2RlLT5wb2ludHNBdFkoKS0+YmFzZVZhbCgpLXBvcy55KCksIAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlnaHROb2RlLT5w
b2ludHNBdFooKS0+YmFzZVZhbCgpLXBvcy56KCkpOworICAgICAgICBub3JtYWxpc2UoZGlyZWN0
aW9uKTsKKyAgICAgICAgbGlnaHQgPSBuZXcgS0NTcG90TGlnaHRTb3VyY2UocG9zLCBkaXJlY3Rp
b24sIGxpZ2h0Tm9kZS0+c3BlY3VsYXJFeHBvbmVudCgpLT5iYXNlVmFsKCksIGxpZ2h0Tm9kZS0+
bGltaXRpbmdDb25lQW5nbGUoKS0+YmFzZVZhbCgpKTsKKyAgICB9CisgICAgbV9maWx0ZXJFZmZl
Y3QtPnNldExpZ2h0U291cmNlKGxpZ2h0KTsKK30KKwordm9pZCBTVkdGRVNwZWN1bGFyTGlnaHRp
bmdFbGVtZW50SW1wbDo6Y2xvc2UoKQoreworICAgIC8vdXBkYXRlTGlnaHRzKCk7Cit9ClwgTm8g
bmV3bGluZSBhdCBlbmQgb2YgZmlsZQpJbmRleDoga3N2ZzIvU1ZHRkVTcGVjdWxhckxpZ2h0aW5n
RWxlbWVudEltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09CmRpZmYgLU5wdSBrc3ZnMi9TVkdGRVNwZWN1bGFyTGln
aHRpbmdFbGVtZW50SW1wbC5oCi0tLSBrc3ZnMi9TVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50
SW1wbC5oCTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAKKysrIGtzdmcyL1NWR0ZFU3BlY3VsYXJM
aWdodGluZ0VsZW1lbnRJbXBsLmgJMTEgTm92IDIwMDUgMjM6MzY6MDAgLTAwMDAKQEAgLTAsMCAr
MSw1OCBAQAorLy9Db3B5cmlnaHQgZm9vCisKKyNpZm5kZWYgS1NWR19TVkdGRVNwZWN1bGFyTGln
aHRpbmdFbGVtZW50SW1wbF9ICisjZGVmaW5lIEtTVkdfU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxl
bWVudEltcGxfSAorCisjaW5jbHVkZSAiU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1
dGVzSW1wbC5oIgorCitjbGFzcyBLQ2FudmFzRkVTcGVjdWxhckxpZ2h0aW5nOworY2xhc3MgS0Nh
bnZhc0ZpbHRlckVmZmVjdDsKKworbmFtZXNwYWNlIEtTVkcKK3sKKyAgICBjbGFzcyBTVkdBbmlt
YXRlZE51bWJlckltcGw7CisgICAgY2xhc3MgU1ZHQW5pbWF0ZWRTdHJpbmdJbXBsOworICAgIGNs
YXNzIFNWR0FuaW1hdGVkQ29sb3JJbXBsOworICAgIAorICAgIGNsYXNzIFNWR0ZFU3BlY3VsYXJM
aWdodGluZ0VsZW1lbnRJbXBsIDogcHVibGljIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0
cmlidXRlc0ltcGwKKyAgICB7CitwdWJsaWM6CisgICAgICAgIFNWR0ZFU3BlY3VsYXJMaWdodGlu
Z0VsZW1lbnRJbXBsKEtET006OkRvY3VtZW50UHRyICpkb2MsIEtET006Ok5vZGVJbXBsOjpJZCBp
ZCwgS0RPTTo6RE9NU3RyaW5nSW1wbCAqcHJlZml4KTsKKyAgICAgICAgdmlydHVhbCB+U1ZHRkVT
cGVjdWxhckxpZ2h0aW5nRWxlbWVudEltcGwoKTsKKyAgICAgICAgCisgICAgICAgIC8vICdTVkdG
RURpZmZ1c2VMaWdodGluZ0VsZW1lbnQnIGZ1bmN0aW9ucworICAgICAgICBTVkdBbmltYXRlZFN0
cmluZ0ltcGwgKmluMSgpIGNvbnN0OworICAgICAgICBTVkdBbmltYXRlZE51bWJlckltcGwgKnNw
ZWN1bGFyQ29uc3RhbnQoKSBjb25zdDsKKyAgICAgICAgU1ZHQW5pbWF0ZWROdW1iZXJJbXBsICpz
cGVjdWxhckV4cG9uZW50KCkgY29uc3Q7CisgICAgICAgIFNWR0FuaW1hdGVkTnVtYmVySW1wbCAq
c3VyZmFjZVNjYWxlKCkgY29uc3Q7CisgICAgICAgIFNWR0FuaW1hdGVkTnVtYmVySW1wbCAqa2Vy
bmVsVW5pdExlbmd0aFgoKSBjb25zdDsKKyAgICAgICAgU1ZHQW5pbWF0ZWROdW1iZXJJbXBsICpr
ZXJuZWxVbml0TGVuZ3RoWSgpIGNvbnN0OworICAgICAgICBTVkdBbmltYXRlZENvbG9ySW1wbCAg
KmxpZ2h0aW5nQ29sb3IoKSBjb25zdDsKKyAgICAgICAgCisgICAgICAgIC8vIERlcml2ZWQgZnJv
bTogJ0VsZW1lbnRJbXBsJworICAgICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VBdHRyaWJ1dGUoS0RP
TTo6QXR0cmlidXRlSW1wbCAqYXR0cik7CisgICAgICAgIAorICAgICAgICB2aXJ0dWFsIEtDYW52
YXNJdGVtICpjcmVhdGVDYW52YXNJdGVtKEtDYW52YXMgKmNhbnZhcywgS1JlbmRlcmluZ1N0eWxl
ICpzdHlsZSkgY29uc3Q7CisgICAgICAgIAorICAgICAgICB2aXJ0dWFsIGJvb2wgaW1wbGVtZW50
c0NhbnZhc0l0ZW0oKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisgICAgICAgIAorICAgICAgICB2
aXJ0dWFsIEtDYW52YXNGaWx0ZXJFZmZlY3QgKmZpbHRlckVmZmVjdCgpIGNvbnN0OworICAgICAg
ICAKKyAgICAgICAgdmlydHVhbCB2b2lkIGNsb3NlKCk7Citwcml2YXRlOgorICAgICAgICAgICAg
bXV0YWJsZSBTVkdBbmltYXRlZFN0cmluZ0ltcGwgKm1faW4xOworICAgICAgICBtdXRhYmxlIFNW
R0FuaW1hdGVkTnVtYmVySW1wbCAqbV9zcGVjdWxhckNvbnN0YW50OworICAgICAgICBtdXRhYmxl
IFNWR0FuaW1hdGVkTnVtYmVySW1wbCAqbV9zcGVjdWxhckV4cG9uZW50OworICAgICAgICBtdXRh
YmxlIFNWR0FuaW1hdGVkTnVtYmVySW1wbCAqbV9zdXJmYWNlU2NhbGU7CisgICAgICAgIG11dGFi
bGUgU1ZHQW5pbWF0ZWRDb2xvckltcGwgICptX2xpZ2h0aW5nQ29sb3I7CisgICAgICAgIG11dGFi
bGUgU1ZHQW5pbWF0ZWROdW1iZXJJbXBsICptX2tlcm5lbFVuaXRMZW5ndGhYOworICAgICAgICBt
dXRhYmxlIFNWR0FuaW1hdGVkTnVtYmVySW1wbCAqbV9rZXJuZWxVbml0TGVuZ3RoWTsKKyAgICAg
ICAgLy9uZWVkIG90aGVyIHByb3BlcnRpZXMgaGVyZS4uLgorICAgICAgICBtdXRhYmxlIEtDYW52
YXNGRVNwZWN1bGFyTGlnaHRpbmcgKm1fZmlsdGVyRWZmZWN0OworICAgICAgICAKKyAgICAgICAg
Ly9saWdodCBtYW5hZ21lbnQKKyAgICAgICAgdm9pZCB1cGRhdGVMaWdodHMoKSBjb25zdDsKKyAg
ICB9OworfTsKKworI2VuZGlmCkluZGV4OiBrc3ZnMi9TVkdGRVNwb3RMaWdodEVsZW1lbnRJbXBs
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09CmRpZmYgLU5wdSBrc3ZnMi9TVkdGRVNwb3RMaWdodEVsZW1lbnRJbXBs
LmNwcAotLS0ga3N2ZzIvU1ZHRkVTcG90TGlnaHRFbGVtZW50SW1wbC5jcHAJMSBKYW4gMTk3MCAw
MDowMDowMCAtMDAwMAorKysga3N2ZzIvU1ZHRkVTcG90TGlnaHRFbGVtZW50SW1wbC5jcHAJMTEg
Tm92IDIwMDUgMjM6MzY6MDAgLTAwMDAKQEAgLTAsMCArMSwyMSBAQAorLyoKKyAqICBTVkdGRVNw
b3RMaWdodEVsZW1lbnRJbXBsLmNwcAorICogIFdlYkNvcmUKKyAqCisgKiAgQ3JlYXRlZCBieSBP
bGl2ZXIgb24gOC8xMS8wNS4KKyAqICBDb3B5cmlnaHQgMjAwNSBPbGl2ZXIgSHVudC4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKi8KKworI2luY2x1ZGUgIlNWR0ZFU3BvdExpZ2h0RWxlbWVu
dEltcGwuaCIKKwordXNpbmcgbmFtZXNwYWNlIEtTVkc7CisKK1NWR0ZFU3BvdExpZ2h0RWxlbWVu
dEltcGw6OlNWR0ZFU3BvdExpZ2h0RWxlbWVudEltcGwoS0RPTTo6RG9jdW1lbnRQdHIgKmRvYywg
S0RPTTo6Tm9kZUltcGw6OklkIGlkLCBLRE9NOjpET01TdHJpbmdJbXBsICpwcmVmaXgpIDogCitT
VkdGRUxpZ2h0RWxlbWVudEltcGwoZG9jLCBpZCwgcHJlZml4KQoreworfQorCitTVkdGRVNwb3RM
aWdodEVsZW1lbnRJbXBsOjp+U1ZHRkVTcG90TGlnaHRFbGVtZW50SW1wbCgpCit7Cit9CkluZGV4
OiBrc3ZnMi9TVkdGRVNwb3RMaWdodEVsZW1lbnRJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpkaWZmIC1OcHUg
a3N2ZzIvU1ZHRkVTcG90TGlnaHRFbGVtZW50SW1wbC5oCi0tLSBrc3ZnMi9TVkdGRVNwb3RMaWdo
dEVsZW1lbnRJbXBsLmgJMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMAorKysga3N2ZzIvU1ZHRkVT
cG90TGlnaHRFbGVtZW50SW1wbC5oCTExIE5vdiAyMDA1IDIzOjM2OjAwIC0wMDAwCkBAIC0wLDAg
KzEsMjYgQEAKKy8qCisgKiAgU1ZHRkVTcG90TGlnaHRFbGVtZW50SW1wbC5oCisgKiAgV2ViQ29y
ZQorICoKKyAqICBDcmVhdGVkIGJ5IE9saXZlciBvbiA4LzExLzA1LgorICogIENvcHlyaWdodCAy
MDA1IE9saXZlciBIdW50LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqLworCisKKyNpZm5k
ZWYgS1NWR19TVkdGRVNwb3RMaWdodEVsZW1lbnRJbXBsX0gKKyNkZWZpbmUgS1NWR19TVkdGRVNw
b3RMaWdodEVsZW1lbnRJbXBsX0gKKworI2luY2x1ZGUgIlNWR0ZFTGlnaHRFbGVtZW50SW1wbC5o
IgorCituYW1lc3BhY2UgS1NWRworeworICAgIGNsYXNzIFNWR0ZFU3BvdExpZ2h0RWxlbWVudElt
cGwgOiBwdWJsaWMgU1ZHRkVMaWdodEVsZW1lbnRJbXBsCit7CitwdWJsaWM6CisgICAgU1ZHRkVT
cG90TGlnaHRFbGVtZW50SW1wbChLRE9NOjpEb2N1bWVudFB0ciAqZG9jLCBLRE9NOjpOb2RlSW1w
bDo6SWQgaWQsIEtET006OkRPTVN0cmluZ0ltcGwgKnByZWZpeCk7CisgICAgdmlydHVhbCB+U1ZH
RkVTcG90TGlnaHRFbGVtZW50SW1wbCgpOworfTsKK307CisKKyNlbmRpZgpcIE5vIG5ld2xpbmUg
YXQgZW5kIG9mIGZpbGUKSW5kZXg6IGtzdmcyL3N2Zy9TVkdEb2N1bWVudEltcGwuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL3N2Zy9TVkdEb2N1bWVu
dEltcGwuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjExCmRpZmYgLXAgLXUgLXIxLjExIGtz
dmcyL3N2Zy9TVkdEb2N1bWVudEltcGwuY3BwCi0tLSBrc3ZnMi9zdmcvU1ZHRG9jdW1lbnRJbXBs
LmNwcAk4IE9jdCAyMDA1IDA5OjE4OjE1IC0wMDAwCTEuMTEKKysrIGtzdmcyL3N2Zy9TVkdEb2N1
bWVudEltcGwuY3BwCTIwIE5vdiAyMDA1IDAxOjE1OjE0IC0wMDAwCkBAIC0xMDcsNyArMTA3LDEy
IEBACiAjaW5jbHVkZSAiU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50SW1wbC5oIgogI2luY2x1ZGUg
IlNWR1JhZGlhbEdyYWRpZW50RWxlbWVudEltcGwuaCIKICNpbmNsdWRlICJTVkdBbmltYXRlVHJh
bnNmb3JtRWxlbWVudEltcGwuaCIKKyNpbmNsdWRlICJTVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1l
bnRJbXBsLmgiCisjaW5jbHVkZSAiU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudEltcGwuaCIK
ICNpbmNsdWRlICJTVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudEltcGwuaCIKKyNpbmNsdWRl
ICJTVkdGRVBvaW50TGlnaHRFbGVtZW50SW1wbC5oIgorI2luY2x1ZGUgIlNWR0ZFRGlzdGFudExp
Z2h0RWxlbWVudEltcGwuaCIKKyNpbmNsdWRlICJTVkdGRVNwb3RMaWdodEVsZW1lbnRJbXBsLmgi
CiAKICNpbmNsdWRlICJzdmd0YWdzLmMiCiAjaW5jbHVkZSAic3ZndGFncy5oIgpAQCAtNDM1LDYg
KzQ0MCwzMSBAQCBTVkdFbGVtZW50SW1wbCAqU1ZHRG9jdW1lbnRJbXBsOjpjcmVhdGVTCiAgICAg
ICAgICAgICBlbGVtZW50ID0gbmV3IFNWR0N1cnNvckVsZW1lbnRJbXBsKGRvY1B0cigpLCBpZCwg
cHJlZml4KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CisgICAgICAgIGNhc2UgSURf
RkVESUZGVVNFTElHSFRJTkc6CisgICAgICAgIHsKKyAgICAgICAgICAgIGVsZW1lbnQgPSBuZXcg
U1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50SW1wbChkb2NQdHIoKSwgaWQsIHByZWZpeCk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIElEX0ZFUE9JTlRMSUdI
VDoKKyAgICAgICAgeworICAgICAgICAgICAgZWxlbWVudCA9IG5ldyBTVkdGRVBvaW50TGlnaHRF
bGVtZW50SW1wbChkb2NQdHIoKSwgaWQsIHByZWZpeCk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgICAgICBjYXNlIElEX0ZFU1BPVExJR0hUOgorICAgICAgICB7CisgICAgICAg
ICAgICBlbGVtZW50ID0gbmV3IFNWR0ZFU3BvdExpZ2h0RWxlbWVudEltcGwoZG9jUHRyKCksIGlk
LCBwcmVmaXgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBJ
RF9GRURJU1RBTlRMSUdIVDoKKyAgICAgICAgeworICAgICAgICAgICAgZWxlbWVudCA9IG5ldyBT
VkdGRURpc3RhbnRMaWdodEVsZW1lbnRJbXBsKGRvY1B0cigpLCBpZCwgcHJlZml4KTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgSURfRkVTUEVDVUxBUkxJR0hU
SU5HOgorICAgICAgICB7CisgICAgICAgICAgICBlbGVtZW50ID0gbmV3IFNWR0ZFU3BlY3VsYXJM
aWdodGluZ0VsZW1lbnRJbXBsKGRvY1B0cigpLCBpZCwgcHJlZml4KTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBlbGVtZW50ID0g
MDsKICAgICB9OwpJbmRleDoga3N2ZzIvc3ZnL1NWR0ZFQ29tcG9zaXRlRWxlbWVudEltcGwuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL3N2Zy9TVkdG
RUNvbXBvc2l0ZUVsZW1lbnRJbXBsLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS42CmRpZmYg
LXAgLXUgLXIxLjYga3N2ZzIvc3ZnL1NWR0ZFQ29tcG9zaXRlRWxlbWVudEltcGwuY3BwCi0tLSBr
c3ZnMi9zdmcvU1ZHRkVDb21wb3NpdGVFbGVtZW50SW1wbC5jcHAJNSBPY3QgMjAwNSAwNTozNToy
MCAtMDAwMAkxLjYKKysrIGtzdmcyL3N2Zy9TVkdGRUNvbXBvc2l0ZUVsZW1lbnRJbXBsLmNwcAky
MCBOb3YgMjAwNSAwMToxNToxNCAtMDAwMApAQCAtMTMxLDcgKzEzMSw3IEBAIHZvaWQgU1ZHRkVD
b21wb3NpdGVFbGVtZW50SW1wbDo6cGFyc2VBdHQKICAgICAgICAgICAgICAgICBfb3BlcmF0b3Io
KS0+c2V0QmFzZVZhbChTVkdfRkVDT01QT1NJVEVfT1BFUkFUT1JfQVRPUCk7CiAgICAgICAgICAg
ICBlbHNlIGlmKHZhbHVlID09ICJ4b3IiKQogICAgICAgICAgICAgICAgIF9vcGVyYXRvcigpLT5z
ZXRCYXNlVmFsKFNWR19GRUNPTVBPU0lURV9PUEVSQVRPUl9YT1IpOwotICAgICAgICAgICAgZWxz
ZSBpZih2YWx1ZSA9PSAiYXJpdGhtYXRpYyIpCisgICAgICAgICAgICBlbHNlIGlmKHZhbHVlID09
ICJhcml0aG1ldGljIikKICAgICAgICAgICAgICAgICBfb3BlcmF0b3IoKS0+c2V0QmFzZVZhbChT
VkdfRkVDT01QT1NJVEVfT1BFUkFUT1JfQVJJVEhNRVRJQyk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQpAQCAtMTQ1LDYgKzE0NSwyMiBAQCB2b2lkIFNWR0ZFQ29tcG9zaXRlRWxlbWVu
dEltcGw6OnBhcnNlQXR0CiAgICAgICAgICAgICBpbjIoKS0+c2V0QmFzZVZhbCh2YWx1ZS5oYW5k
bGUoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQorICAgICAgICBjYXNlIEFUVFJf
SzE6CisgICAgICAgIHsKKyAgICAgICAgICAgIGsxKCktPnNldEJhc2VWYWwodmFsdWUuc3RyaW5n
KCkudG9Eb3VibGUoKSk7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBBVFRSX0syOgorICAgICAg
ICB7CisgICAgICAgICAgICBrMigpLT5zZXRCYXNlVmFsKHZhbHVlLnN0cmluZygpLnRvRG91Ymxl
KCkpOworICAgICAgICB9CisgICAgICAgIGNhc2UgQVRUUl9LMzoKKyAgICAgICAgeworICAgICAg
ICAgICAgazMoKS0+c2V0QmFzZVZhbCh2YWx1ZS5zdHJpbmcoKS50b0RvdWJsZSgpKTsKKyAgICAg
ICAgfQorICAgICAgICBjYXNlIEFUVFJfSzQ6CisgICAgICAgIHsKKyAgICAgICAgICAgIGs0KCkt
PnNldEJhc2VWYWwodmFsdWUuc3RyaW5nKCkudG9Eb3VibGUoKSk7CisgICAgICAgIH0KICAgICAg
ICAgZGVmYXVsdDoKICAgICAgICAgewogICAgICAgICAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3Rh
bmRhcmRBdHRyaWJ1dGVzSW1wbDo6cGFyc2VBdHRyaWJ1dGUoYXR0cik7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>4739</attachid>
            <date>2005-11-20 05:27:22 -0800</date>
            <delta_ts>2005-11-27 19:57:04 -0800</delta_ts>
            <desc>more lighting</desc>
            <filename>lighting2.patch</filename>
            <type>text/plain</type>
            <size>105956</size>
            <attacher name="Oliver Hunt">oliver</attacher>
            
              <data encoding="base64">SW5kZXg6IGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL1dLQXJpdGhtZXRpY0ZpbHRlci5j
aWtlcm5lbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09CmRpZmYgLU5wdSBrY2FudmFzL2RldmljZS9xdWFydHovZmlsdGVy
cy9XS0FyaXRobWV0aWNGaWx0ZXIuY2lrZXJuZWwKLS0tIGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9m
aWx0ZXJzL1dLQXJpdGhtZXRpY0ZpbHRlci5jaWtlcm5lbAkxIEphbiAxOTcwIDAwOjAwOjAwIC0w
MDAwCisrKyBrY2FudmFzL2RldmljZS9xdWFydHovZmlsdGVycy9XS0FyaXRobWV0aWNGaWx0ZXIu
Y2lrZXJuZWwJMTkgTm92IDIwMDUgMTM6MzQ6MzAgLTAwMDAKQEAgLTAsMCArMSw3IEBACitrZXJu
ZWwgdmVjNCBjb21wb3NpdGUoc2FtcGxlciBpbjEsIHNhbXBsZXIgaW4yLCBmbG9hdCBrMSwgZmxv
YXQgazIsIGZsb2F0IGszLCBmbG9hdCBrNCkKK3sKKyAgICB2ZWM0IHZpbjEgPSBzYW1wbGUoaW4x
LCBzYW1wbGVyQ29vcmQoaW4xKSk7CisgICAgdmVjNCB2aW4yID0gc2FtcGxlKGluMiwgc2FtcGxl
ckNvb3JkKGluMikpOworICAgIHZlYzQgcmVzID0gazEqdmluMSp2aW4yK2syKnZpbjErazMqdmlu
Mit2ZWM0KGs0KTsKKyAgICByZXR1cm4gY2xhbXAocmVzLCB2ZWM0KDAuMCksIHZlYzQoMS4wKSk7
Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpJbmRleDoga2NhbnZhcy9kZXZpY2UvcXVh
cnR6L2ZpbHRlcnMvV0tBcml0aG1ldGljRmlsdGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpkaWZmIC1OcHUga2Nh
bnZhcy9kZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tBcml0aG1ldGljRmlsdGVyLmgKLS0tIGtjYW52
YXMvZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL1dLQXJpdGhtZXRpY0ZpbHRlci5oCTEgSmFuIDE5NzAg
MDA6MDA6MDAgLTAwMDAKKysrIGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL1dLQXJpdGht
ZXRpY0ZpbHRlci5oCTE5IE5vdiAyMDA1IDExOjIyOjQ3IC0wMDAwCkBAIC0wLDAgKzEsMjIgQEAK
Ky8vCisvLyAgV0tBcml0aG1ldGljRmlsdGVyLmgKKy8vICBXZWJDb3JlCisvLworLy8gIENyZWF0
ZWQgYnkgT2xpdmVyIG9uIDE5LzExLzA1LgorLy8gIENvcHlyaWdodCAyMDA1IE9saXZlciBIdW50
LiAKKy8vCisKKworI2ltcG9ydCA8UXVhcnR6Q29yZS9Db3JlSW1hZ2UuaD4KKworQGludGVyZmFj
ZSBXS0FyaXRobWV0aWNGaWx0ZXIgOiBDSUZpbHRlciB7CisgICAgQ0lJbWFnZSAgKmlucHV0SW1h
Z2U7CisgICAgQ0lJbWFnZSAgKmlucHV0QmFja2dyb3VuZEltYWdlOworICAgIE5TTnVtYmVyICpp
bnB1dEsxOworICAgIE5TTnVtYmVyICppbnB1dEsyOworICAgIE5TTnVtYmVyICppbnB1dEszOwor
ICAgIE5TTnVtYmVyICppbnB1dEs0OworfQorCitAZW5kCisKSW5kZXg6IGtjYW52YXMvZGV2aWNl
L3F1YXJ0ei9maWx0ZXJzL1dLQXJpdGhtZXRpY0ZpbHRlci5tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtTnB1
IGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL1dLQXJpdGhtZXRpY0ZpbHRlci5tCi0tLSBr
Y2FudmFzL2RldmljZS9xdWFydHovZmlsdGVycy9XS0FyaXRobWV0aWNGaWx0ZXIubQkxIEphbiAx
OTcwIDAwOjAwOjAwIC0wMDAwCisrKyBrY2FudmFzL2RldmljZS9xdWFydHovZmlsdGVycy9XS0Fy
aXRobWV0aWNGaWx0ZXIubQkyMCBOb3YgMjAwNSAxMzowNDoyMSAtMDAwMApAQCAtMCwwICsxLDc0
IEBACisvLworLy8gIFdLQXJpdGhtZXRpY0ZpbHRlci5tCisvLyAgV2ViQ29yZQorLy8KKy8vICBD
cmVhdGVkIGJ5IE9saXZlciBvbiAxOS8xMS8wNS4KKy8vICBDb3B5cmlnaHQgMjAwNSBPbGl2ZXIg
SHVudC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vCisKKyNpbXBvcnQgIldLQXJpdGhtZXRpY0Zp
bHRlci5oIgorCitzdGF0aWMgQ0lLZXJuZWwgKmFyaXRobWV0aWNGaWx0ZXIgPSBuaWw7CisKK0Bp
bXBsZW1lbnRhdGlvbiBXS0FyaXRobWV0aWNGaWx0ZXIKKysgKHZvaWQpaW5pdGlhbGl6ZQorewor
ICAgIFtDSUZpbHRlciByZWdpc3RlckZpbHRlck5hbWU6QCJXS0FyaXRobWV0aWNGaWx0ZXIiICAK
KyAgICAgICAgICAgICAgICAgICAgIGNvbnN0cnVjdG9yOiBzZWxmCisgICAgICAgICAgICAgICAg
IGNsYXNzQXR0cmlidXRlczogW05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVjdHNBbmRL
ZXlzOgorICAgICAgICAgICAgICAgICAgICAgQCJXZWJLaXQgQXJpdGhtZXRpYyBGaWx0ZXIiLCBr
Q0lBdHRyaWJ1dGVGaWx0ZXJEaXNwbGF5TmFtZSwKKyAgICAgICAgICAgICAgICAgICAgIFtOU0Fy
cmF5IGFycmF5V2l0aE9iamVjdHM6IGtDSUNhdGVnb3J5U3R5bGl6ZSwga0NJQ2F0ZWdvcnlWaWRl
bywKKyAgICAgICAgICAgICAgICAgICAgICAgICBrQ0lDYXRlZ29yeVN0aWxsSW1hZ2UsIGtDSUNh
dGVnb3J5Tm9uU3F1YXJlUGl4ZWxzLG5pbF0sIGtDSUF0dHJpYnV0ZUZpbHRlckNhdGVnb3JpZXMs
CisgICAgICAgICAgICAgICAgICAgICBbTlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnlXaXRoT2JqZWN0
c0FuZEtleXM6CisgICAgICAgICAgICAgICAgICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhE
b3VibGU6MC4wXSwga0NJQXR0cmlidXRlTWluLAorICAgICAgICAgICAgICAgICAgICAgICAgIFtO
U051bWJlciBudW1iZXJXaXRoRG91YmxlOjAuMF0sIGtDSUF0dHJpYnV0ZURlZmF1bHQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhEb3VibGU6MS4wXSwga0NJ
QXR0cmlidXRlSWRlbnRpdHksCisgICAgICAgICAgICAgICAgICAgICAgICAga0NJQXR0cmlidXRl
VHlwZVNjYWxhciwga0NJQXR0cmlidXRlVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBu
aWxdLCBAImlucHV0SzEiLCAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAg
IFtOU0RpY3Rpb25hcnkgZGljdGlvbmFyeVdpdGhPYmplY3RzQW5kS2V5czoKKyAgICAgICAgICAg
ICAgICAgICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aERvdWJsZTowLjBdLCBrQ0lBdHRyaWJ1
dGVNaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhEb3Vi
bGU6MC4wXSwga0NJQXR0cmlidXRlRGVmYXVsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBb
TlNOdW1iZXIgbnVtYmVyV2l0aERvdWJsZToxLjBdLCBrQ0lBdHRyaWJ1dGVJZGVudGl0eSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICBrQ0lBdHRyaWJ1dGVUeXBlU2NhbGFyLCBrQ0lBdHRyaWJ1
dGVUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgIG5pbF0sIEAiaW5wdXRLMiIsICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgIFtOU0RpY3Rpb25hcnkgZGljdGlvbmFyeVdp
dGhPYmplY3RzQW5kS2V5czoKKyAgICAgICAgICAgICAgICAgICAgICAgICBbTlNOdW1iZXIgbnVt
YmVyV2l0aERvdWJsZTowLjBdLCBrQ0lBdHRyaWJ1dGVNaW4sCisgICAgICAgICAgICAgICAgICAg
ICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhEb3VibGU6MC4wXSwga0NJQXR0cmlidXRlRGVmYXVs
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aERvdWJsZTox
LjBdLCBrQ0lBdHRyaWJ1dGVJZGVudGl0eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBrQ0lB
dHRyaWJ1dGVUeXBlU2NhbGFyLCBrQ0lBdHRyaWJ1dGVUeXBlLAorICAgICAgICAgICAgICAgICAg
ICAgICAgIG5pbF0sIEAiaW5wdXRLMyIsICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAg
ICAgIFtOU0RpY3Rpb25hcnkgZGljdGlvbmFyeVdpdGhPYmplY3RzQW5kS2V5czoKKyAgICAgICAg
ICAgICAgICAgICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aERvdWJsZTowLjBdLCBrQ0lBdHRy
aWJ1dGVNaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhE
b3VibGU6MC4wXSwga0NJQXR0cmlidXRlRGVmYXVsdCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICBbTlNOdW1iZXIgbnVtYmVyV2l0aERvdWJsZToxLjBdLCBrQ0lBdHRyaWJ1dGVJZGVudGl0eSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICBrQ0lBdHRyaWJ1dGVUeXBlU2NhbGFyLCBrQ0lBdHRy
aWJ1dGVUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgIG5pbF0sIEAiaW5wdXRLNCIsCisg
ICAgICAgICAgICAgICAgICAgICBuaWxdXTsKK30KKworKyAoQ0lGaWx0ZXIgKilmaWx0ZXJXaXRo
TmFtZTooTlNTdHJpbmcgKiluYW1lCit7CisgICAgQ0lGaWx0ZXIgKmZpbHRlcjsKKyAgICBmaWx0
ZXIgPSBbW3NlbGYgYWxsb2NdIGluaXRdOworICAgIHJldHVybiBbZmlsdGVyIGF1dG9yZWxlYXNl
XTsKK30KKworLSAoaWQpaW5pdAoreworICAgIGlmICghYXJpdGhtZXRpY0ZpbHRlcikgeworICAg
ICAgICBOU0J1bmRsZSAqYnVuZGxlID0gW05TQnVuZGxlIGJ1bmRsZUZvckNsYXNzOltzZWxmIGNs
YXNzXV07CisgICAgICAgIE5TU3RyaW5nICprZXJuZWxGaWxlID0gW2J1bmRsZSBwYXRoRm9yUmVz
b3VyY2U6QCJXS0FyaXRobWV0aWNGaWx0ZXIiIG9mVHlwZTpAImNpa2VybmVsIl07CisgICAgICAg
IE5TU3RyaW5nICpjb2RlID0gW05TU3RyaW5nIHN0cmluZ1dpdGhDb250ZW50c09mRmlsZTprZXJu
ZWxGaWxlXTsKKyAgICAgICAgTlNBcnJheSAqa2VybmVscyA9IFtDSUtlcm5lbCBrZXJuZWxzV2l0
aFN0cmluZzpjb2RlXTsKKyAgICAgICAgYXJpdGhtZXRpY0ZpbHRlciA9IFtba2VybmVscyBvYmpl
Y3RBdEluZGV4OjBdIHJldGFpbl07CisgICAgfQorICAgIHJldHVybiBbc3VwZXIgaW5pdF07Cit9
CisKKy0gKENJSW1hZ2UgKilvdXRwdXRJbWFnZQoreworICAgIHJldHVybiBbc2VsZiBhcHBseTph
cml0aG1ldGljRmlsdGVyLCBpbnB1dEltYWdlLCBpbnB1dEJhY2tncm91bmRJbWFnZSwgaW5wdXRL
MSwgaW5wdXRLMiwgaW5wdXRLMywKKyAgICAgICAgaW5wdXRLNCwgbmlsXTsKK30KKworQGVuZApJ
bmRleDoga2NhbnZhcy9kZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tDb252b2x2ZU1hdHJpeEZpbHRl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KZGlmZiAtTnB1IGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL1dL
Q29udm9sdmVNYXRyaXhGaWx0ZXIuaAotLS0ga2NhbnZhcy9kZXZpY2UvcXVhcnR6L2ZpbHRlcnMv
V0tDb252b2x2ZU1hdHJpeEZpbHRlci5oCTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAKKysrIGtj
YW52YXMvZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL1dLQ29udm9sdmVNYXRyaXhGaWx0ZXIuaAkxMSBO
b3YgMjAwNSAyMzozNjowMCAtMDAwMApAQCAtMCwwICsxLDM1IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDA1IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIs
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaW1wb3J0IDxRdWFydHpDb3JlL0NvcmVJbWFnZS5oPgorCitAaW50ZXJmYWNlIFdLQ29u
dm9sdmVNYXRyaXhGaWx0ZXI6IENJRmlsdGVyCit7CisgICAgQ0lJbWFnZSAgICppbnB1dEltYWdl
OworICAgIENJSW1hZ2UgICAqaW5wdXRLZXJuZWxNYXRyaXg7CisgICAgTlNOdW1iZXIgICppbnB1
dERpdmlzb3I7CisgICAgTlNOdW1iZXIgICppbnB1dEJpYXM7Cit9CitAZW5kCkluZGV4OiBrY2Fu
dmFzL2RldmljZS9xdWFydHovZmlsdGVycy9XS0NvbnZvbHZlTWF0cml4RmlsdGVyLm0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpkaWZmIC1OcHUga2NhbnZhcy9kZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tDb252b2x2ZU1h
dHJpeEZpbHRlci5tCi0tLSBrY2FudmFzL2RldmljZS9xdWFydHovZmlsdGVycy9XS0NvbnZvbHZl
TWF0cml4RmlsdGVyLm0JMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMAorKysga2NhbnZhcy9kZXZp
Y2UvcXVhcnR6L2ZpbHRlcnMvV0tDb252b2x2ZU1hdHJpeEZpbHRlci5tCTIwIE5vdiAyMDA1IDEz
OjA0OjIxIC0wMDAwCkBAIC0wLDAgKzEsOTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUg
QXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbXBv
cnQgIldLQ29udm9sdmVNYXRyaXhGaWx0ZXIuaCIKKworc3RhdGljIENJS2VybmVsICpjb252b2x2
ZU1hdHJpeEtlcm5lbCA9IG5pbDsKKworQGltcGxlbWVudGF0aW9uIFdLQ29udm9sdmVNYXRyaXhG
aWx0ZXIKKworKyAodm9pZClpbml0aWFsaXplCit7CisgICAgW0NJRmlsdGVyIHJlZ2lzdGVyRmls
dGVyTmFtZTpAIldLQ29udm9sdmVNYXRyaXgiICAKKyAgICAgICAgY29uc3RydWN0b3I6IHNlbGYK
KyAgICAgICAgY2xhc3NBdHRyaWJ1dGVzOiBbTlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnlXaXRoT2Jq
ZWN0c0FuZEtleXM6CisgICAgICAgICBAIldlYktpdCBDb252b2x2ZSBNYXRyaXgiLCBrQ0lBdHRy
aWJ1dGVGaWx0ZXJEaXNwbGF5TmFtZSwKKyAgICAgICAgW05TQXJyYXkgYXJyYXlXaXRoT2JqZWN0
czoga0NJQ2F0ZWdvcnlCbHVyLCBrQ0lDYXRlZ29yeVZpZGVvLAorICAgICAgICAgICAga0NJQ2F0
ZWdvcnlTdGlsbEltYWdlLCBrQ0lDYXRlZ29yeU5vblNxdWFyZVBpeGVscyxuaWxdLCBrQ0lBdHRy
aWJ1dGVGaWx0ZXJDYXRlZ29yaWVzLAorICAgICAgICBbTlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnlX
aXRoT2JqZWN0c0FuZEtleXM6CisgICAgICAgICAgICBrQ0lBdHRyaWJ1dGVUeXBlR3JhZGllbnQs
IGtDSUF0dHJpYnV0ZVR5cGUsCisgICAgICAgICAgICBuaWxdLCBAImlucHV0S2VybmVsTWF0cml4
IiwKKyAgICAgICAgW05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVjdHNBbmRLZXlzOgor
ICAgICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhEb3VibGU6MC4wXSwga0NJQXR0cmlidXRl
TWluLAorICAgICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhEb3VibGU6MS4wXSwga0NJQXR0
cmlidXRlRGVmYXVsdCwKKyAgICAgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoRG91YmxlOjEu
MF0sIGtDSUF0dHJpYnV0ZUlkZW50aXR5LAorICAgICAgICAgICAga0NJQXR0cmlidXRlVHlwZVNj
YWxhciwga0NJQXR0cmlidXRlVHlwZSwKKyAgICAgICAgICAgIG5pbF0sIEAiaW5wdXREaXZpc29y
IiwKKyAgICAgICAgW05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVjdHNBbmRLZXlzOgor
ICAgICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhEb3VibGU6MC4wXSwga0NJQXR0cmlidXRl
RGVmYXVsdCwKKyAgICAgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoRG91YmxlOjAuMF0sIGtD
SUF0dHJpYnV0ZUlkZW50aXR5LAorICAgICAgICAgICAga0NJQXR0cmlidXRlVHlwZVNjYWxhciwg
a0NJQXR0cmlidXRlVHlwZSwKKyAgICAgICAgICAgIG5pbF0sIEAiaW5wdXRCaWFzIiwKKyAgICAg
ICAgbmlsXV07Cit9CisKKysgKENJRmlsdGVyICopZmlsdGVyV2l0aE5hbWU6KE5TU3RyaW5nICop
bmFtZQoreworICAgIENJRmlsdGVyICpmaWx0ZXI7CisgICAgZmlsdGVyID0gW1tzZWxmIGFsbG9j
XSBpbml0XTsKKyAgICByZXR1cm4gW2ZpbHRlciBhdXRvcmVsZWFzZV07Cit9CisKKy0gKGlkKWlu
aXQKK3sKKyAgICBpZiAoIWNvbnZvbHZlTWF0cml4S2VybmVsKSB7CisgICAgICAgIE5TQnVuZGxl
ICpidW5kbGUgPSBbTlNCdW5kbGUgYnVuZGxlRm9yQ2xhc3M6W3NlbGYgY2xhc3NdXTsKKyAgICAg
ICAgTlNTdHJpbmcgKmtlcm5lbEZpbGUgPSBbYnVuZGxlIHBhdGhGb3JSZXNvdXJjZTpAIldLQ29u
dm9sdmVNYXRyaXhGaWx0ZXIiIG9mVHlwZTpAImNpa2VybmVsIl07CisgICAgICAgIE5TU3RyaW5n
ICpjb2RlID0gW05TU3RyaW5nIHN0cmluZ1dpdGhDb250ZW50c09mRmlsZTprZXJuZWxGaWxlXTsK
KyAgICAgICAgTlNBcnJheSAqa2VybmVscyA9IFtDSUtlcm5lbCBrZXJuZWxzV2l0aFN0cmluZzpj
b2RlXTsKKyAgICAgICAgY29udm9sdmVNYXRyaXhLZXJuZWwgPSBbW2tlcm5lbHMgb2JqZWN0QXRJ
bmRleDowXSByZXRhaW5dOworICAgIH0KKyAgICByZXR1cm4gW3N1cGVyIGluaXRdOworfQorCist
IChDSUltYWdlICopb3V0cHV0SW1hZ2UKK3sKKyAgICAvLyBGSVhNRSwgSSBkb24ndCB0aGluayB0
aGlzIGlzIHJpZ2h0IHlldC4uLgorICAgIENJU2FtcGxlciAqaW1hZ2UgPSBbQ0lTYW1wbGVyIHNh
bXBsZXJXaXRoSW1hZ2U6aW5wdXRJbWFnZV07CisgICAgQ0lTYW1wbGVyICprZXJuZWxNYXRyaXgg
PSBbQ0lTYW1wbGVyIHNhbXBsZXJXaXRoSW1hZ2U6aW5wdXRLZXJuZWxNYXRyaXhdOworICAgIHJl
dHVybiBbc2VsZiBhcHBseTpjb252b2x2ZU1hdHJpeEtlcm5lbCwgaW1hZ2UsIGtlcm5lbE1hdHJp
eCwgaW5wdXREaXZpc29yLAorICAgICAgICBpbnB1dEJpYXMsIGtDSUFwcGx5T3B0aW9uRGVmaW5p
dGlvbiwgW2ltYWdlIGRlZmluaXRpb25dLCBuaWxdOworfQorCistIChDR1JlY3QpcmVnaW9uT2Y6
KGludClzYW1wbGVySW5kZXggZGVzdFJlY3Q6KENHUmVjdClyCit7CisgICAgLy8gVGhpcyBpcyBn
b25uYSBiZSBzbG9vb293LgorICAgIENHUmVjdCBleHRlbnQgPSBbaW5wdXRLZXJuZWxNYXRyaXgg
ZXh0ZW50XTsKKyAgICBDR1NpemUgc2l6ZSA9IGV4dGVudC5zaXplOworICAgIHJldHVybiBDR1Jl
Y3RJbnNldChyLCAtMSAqIHNpemUud2lkdGgsIC0xICogc2l6ZS5oZWlnaHQpOworfQorCitAZW5k
CkluZGV4OiBrY2FudmFzL2RldmljZS9xdWFydHovZmlsdGVycy9XS0RpZmZ1c2VMaWdodGluZ0Zp
bHRlci5jaWtlcm5lbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09CmRpZmYgLU5wdSBrY2FudmFzL2RldmljZS9xdWFydHov
ZmlsdGVycy9XS0RpZmZ1c2VMaWdodGluZ0ZpbHRlci5jaWtlcm5lbAotLS0ga2NhbnZhcy9kZXZp
Y2UvcXVhcnR6L2ZpbHRlcnMvV0tEaWZmdXNlTGlnaHRpbmdGaWx0ZXIuY2lrZXJuZWwJMSBKYW4g
MTk3MCAwMDowMDowMCAtMDAwMAorKysga2NhbnZhcy9kZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tE
aWZmdXNlTGlnaHRpbmdGaWx0ZXIuY2lrZXJuZWwJMTQgTm92IDIwMDUgMDk6MDk6MjAgLTAwMDAK
QEAgLTAsMCArMSwxNCBAQAora2VybmVsIHZlYzQgZGlmZnVzZUxpZ2h0aW5nKHNhbXBsZXIgaW5w
dXROb3JtYWxWZWN0b3JzLCBzYW1wbGVyIGlucHV0TGlnaHRWZWN0b3JzLCBfX2NvbG9yIGlucHV0
TGlnaHRpbmdDb2xvciwgCisgICAgZmxvYXQgaW5wdXRTdXJmYWNlU2NhbGUsIGZsb2F0IGlucHV0
RGlmZnVzZUNvbnN0YW50LCBmbG9hdCBpbnB1dEtlcm5lbExlbmd0aFgsCisgICAgZmxvYXQgaW5w
dXRLZXJuZWxMZW5ndGhZKQoreworICAgIHZlYzIgcG9zPXNhbXBsZXJDb29yZChpbnB1dExpZ2h0
VmVjdG9ycyk7CisgICAgdmVjMiBwb3NuPXNhbXBsZXJDb29yZChpbnB1dE5vcm1hbFZlY3RvcnMp
OworICAgIHZlYzQgbDQgPSBzYW1wbGUoaW5wdXRMaWdodFZlY3RvcnMsIHBvcykueHl6OworICAg
IHZlYzMgbCA9IGw0Lnh5ejsKKyAgICB2ZWMzIG4gPSBzYW1wbGUoaW5wdXROb3JtYWxWZWN0b3Jz
LCBwb3NuKS54eXo7CisgICAgZmxvYXQgbmwgPSAoZG90KGwsIG4pKTsKKyAgICB2ZWM0IHJlcyA9
IHZlYzQoaW5wdXRMaWdodGluZ0NvbG9yLnIqbmwsIGlucHV0TGlnaHRpbmdDb2xvci5nKm5sLCBp
bnB1dExpZ2h0aW5nQ29sb3IuYipubCwgMS4wKTsKKyAgICByZXMueHl6ICo9IGw0Lnc7CisgICAg
cmV0dXJuIHJlczsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCkluZGV4OiBrY2FudmFz
L2RldmljZS9xdWFydHovZmlsdGVycy9XS0RpZmZ1c2VMaWdodGluZ0ZpbHRlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KZGlmZiAtTnB1IGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL1dLRGlmZnVzZUxpZ2h0
aW5nRmlsdGVyLmgKLS0tIGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL1dLRGlmZnVzZUxp
Z2h0aW5nRmlsdGVyLmgJMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMAorKysga2NhbnZhcy9kZXZp
Y2UvcXVhcnR6L2ZpbHRlcnMvV0tEaWZmdXNlTGlnaHRpbmdGaWx0ZXIuaAkxMiBOb3YgMjAwNSAx
MDowMDoyMCAtMDAwMApAQCAtMCwwICsxLDM3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1
IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW1w
b3J0IDxRdWFydHpDb3JlL0NvcmVJbWFnZS5oPgorCitAaW50ZXJmYWNlIFdLRGlmZnVzZUxpZ2h0
aW5nRmlsdGVyIDogQ0lGaWx0ZXIgeworICAgIENJSW1hZ2UgICppbnB1dE5vcm1hbE1hcDsKKyAg
ICBDSUltYWdlICAqaW5wdXRMaWdodFZlY3RvcnM7CisgICAgQ0lDb2xvciAgKmlucHV0TGlnaHRp
bmdDb2xvcjsKKyAgICBOU051bWJlciAqaW5wdXRTdXJmYWNlU2NhbGU7CisgICAgTlNOdW1iZXIg
KmlucHV0RGlmZnVzZUNvbnN0YW50OworICAgIE5TTnVtYmVyICppbnB1dEtlcm5lbFVuaXRMZW5n
dGhYOworICAgIE5TTnVtYmVyICppbnB1dEtlcm5lbFVuaXRMZW5ndGhZOworfQorQGVuZApJbmRl
eDoga2NhbnZhcy9kZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tEaWZmdXNlTGlnaHRpbmdGaWx0ZXIu
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09CmRpZmYgLU5wdSBrY2FudmFzL2RldmljZS9xdWFydHovZmlsdGVycy9XS0Rp
ZmZ1c2VMaWdodGluZ0ZpbHRlci5tCi0tLSBrY2FudmFzL2RldmljZS9xdWFydHovZmlsdGVycy9X
S0RpZmZ1c2VMaWdodGluZ0ZpbHRlci5tCTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAKKysrIGtj
YW52YXMvZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL1dLRGlmZnVzZUxpZ2h0aW5nRmlsdGVyLm0JMjAg
Tm92IDIwMDUgMTM6MDQ6MjIgLTAwMDAKQEAgLTAsMCArMSwxMDEgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDUgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRF
UiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVS
LCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpbXBvcnQgIldLRGlmZnVzZUxpZ2h0aW5nRmlsdGVyLmgiCisjaW1wb3J0IDxzdGRp
by5oPgorCitzdGF0aWMgQ0lLZXJuZWwgKmRpZmZ1c2VMaWdodGluZ0ZpbHRlciA9IG5pbDsKK3N0
YXRpYyBCT09MICAgICBkaWZmdXNlTGlnaHRpbmdGaWx0ZXJJbml0aWFsaXNlZCA9IE5POworQGlt
cGxlbWVudGF0aW9uIFdLRGlmZnVzZUxpZ2h0aW5nRmlsdGVyCisKKysgKHZvaWQpaW5pdGlhbGl6
ZQoreworICAgIFtDSUZpbHRlciByZWdpc3RlckZpbHRlck5hbWU6QCJXS0RpZmZ1c2VMaWdodGlu
ZyIgIAorICAgICAgIGNvbnN0cnVjdG9yOnNlbGYKKyAgICAgICBjbGFzc0F0dHJpYnV0ZXM6W05T
RGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVjdHNBbmRLZXlzOgorICAgICAgICAgICBAIldl
YktpdCBEaWZmdXNlIExpZ2h0aW5nIiwga0NJQXR0cmlidXRlRmlsdGVyRGlzcGxheU5hbWUsCisg
ICAgICAgICAgIFtOU0FycmF5IGFycmF5V2l0aE9iamVjdHM6IGtDSUNhdGVnb3J5U3R5bGl6ZSwg
a0NJQ2F0ZWdvcnlWaWRlbywKKyAgICAgICAgICAgICAgIGtDSUNhdGVnb3J5U3RpbGxJbWFnZSwg
a0NJQ2F0ZWdvcnlOb25TcXVhcmVQaXhlbHMsbmlsXSwga0NJQXR0cmlidXRlRmlsdGVyQ2F0ZWdv
cmllcywKKyAgICAgICAgICAgW05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVjdHNBbmRL
ZXlzOgorICAgICAgICAgICAgICAgW0NJQ29sb3IgY29sb3JXaXRoUmVkOjEuMCBncmVlbjoxLjAg
Ymx1ZToxLjAgYWxwaGE6MS4wXSwKKyAgICAgICAgICAgICAgIGtDSUF0dHJpYnV0ZURlZmF1bHQs
IG5pbF0sIEAiaW5wdXRMaWdodGluZ0NvbG9yIiwKKyAgICAgICAgICAgW05TRGljdGlvbmFyeSBk
aWN0aW9uYXJ5V2l0aE9iamVjdHNBbmRLZXlzOgorICAgICAgICAgICAgICAgW05TTnVtYmVyIG51
bWJlcldpdGhEb3VibGU6MC4wXSwga0NJQXR0cmlidXRlTWluLAorICAgICAgICAgICAgICAgW05T
TnVtYmVyIG51bWJlcldpdGhEb3VibGU6MS4wXSwga0NJQXR0cmlidXRlRGVmYXVsdCwKKyAgICAg
ICAgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoRG91YmxlOjEuMF0sIGtDSUF0dHJpYnV0ZUlk
ZW50aXR5LAorICAgICAgICAgICAgICAga0NJQXR0cmlidXRlVHlwZVNjYWxhciwga0NJQXR0cmli
dXRlVHlwZSwKKyAgICAgICAgICAgICAgIG5pbF0sIEAiaW5wdXRTdXJmYWNlU2NhbGUiLAorICAg
ICAgICAgICBbTlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnlXaXRoT2JqZWN0c0FuZEtleXM6CisgICAg
ICAgICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aERvdWJsZTowLjBdLCBrQ0lBdHRyaWJ1dGVN
aW4sCisgICAgICAgICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aERvdWJsZToxLjBdLCBrQ0lB
dHRyaWJ1dGVEZWZhdWx0LAorICAgICAgICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhEb3Vi
bGU6MS4wXSwga0NJQXR0cmlidXRlSWRlbnRpdHksCisgICAgICAgICAgICAgICBrQ0lBdHRyaWJ1
dGVUeXBlU2NhbGFyLCBrQ0lBdHRyaWJ1dGVUeXBlLAorICAgICAgICAgICAgICAgbmlsXSwgQCJp
bnB1dERpZmZ1c2VDb25zdGFudCIsCisgICAgICAgICAgIFtOU0RpY3Rpb25hcnkgZGljdGlvbmFy
eVdpdGhPYmplY3RzQW5kS2V5czoKKyAgICAgICAgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRo
RG91YmxlOjAuMF0sIGtDSUF0dHJpYnV0ZU1pbiwKKyAgICAgICAgICAgICAgIFtOU051bWJlciBu
dW1iZXJXaXRoRG91YmxlOjEuMF0sIGtDSUF0dHJpYnV0ZURlZmF1bHQsCisgICAgICAgICAgICAg
ICBbTlNOdW1iZXIgbnVtYmVyV2l0aERvdWJsZToxLjBdLCBrQ0lBdHRyaWJ1dGVJZGVudGl0eSwK
KyAgICAgICAgICAgICAgIGtDSUF0dHJpYnV0ZVR5cGVTY2FsYXIsIGtDSUF0dHJpYnV0ZVR5cGUs
CisgICAgICAgICAgICAgICBuaWxdLCBAImlucHV0S2VybmVsVW5pdExlbmd0aFgiLAorICAgICAg
ICAgICBbTlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnlXaXRoT2JqZWN0c0FuZEtleXM6CisgICAgICAg
ICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aERvdWJsZTowLjBdLCBrQ0lBdHRyaWJ1dGVNaW4s
CisgICAgICAgICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aERvdWJsZToxLjBdLCBrQ0lBdHRy
aWJ1dGVEZWZhdWx0LAorICAgICAgICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhEb3VibGU6
MS4wXSwga0NJQXR0cmlidXRlSWRlbnRpdHksCisgICAgICAgICAgICAgICBrQ0lBdHRyaWJ1dGVU
eXBlU2NhbGFyLCBrQ0lBdHRyaWJ1dGVUeXBlLAorICAgICAgICAgICAgICAgbmlsXSwgQCJpbnB1
dEtlcm5lbFVuaXRMZW5ndGhZIiwKKyAgICAgICAgICAgbmlsXV07CisgICAgZGlmZnVzZUxpZ2h0
aW5nRmlsdGVySW5pdGlhbGlzZWQgPSBZRVM7Cit9CisKKysgKENJRmlsdGVyICopZmlsdGVyV2l0
aE5hbWU6KE5TU3RyaW5nICopbmFtZQoreworICAgIENJRmlsdGVyICpmaWx0ZXI7CisgICAgZmls
dGVyID0gW1tzZWxmIGFsbG9jXSBpbml0XTsKKyAgICByZXR1cm4gW2ZpbHRlciBhdXRvcmVsZWFz
ZV07Cit9CisKKy0gKGlkKWluaXQKK3sKKyAgICBpZiAoIWRpZmZ1c2VMaWdodGluZ0ZpbHRlcikg
eworICAgICAgICBOU0J1bmRsZSAqYnVuZGxlID0gW05TQnVuZGxlIGJ1bmRsZUZvckNsYXNzOltz
ZWxmIGNsYXNzXV07CisgICAgICAgIE5TU3RyaW5nICprZXJuZWxGaWxlID0gW2J1bmRsZSBwYXRo
Rm9yUmVzb3VyY2U6QCJXS0RpZmZ1c2VMaWdodGluZ0ZpbHRlciIgb2ZUeXBlOkAiY2lrZXJuZWwi
XTsKKyAgICAgICAgTlNTdHJpbmcgKmNvZGUgPSBbTlNTdHJpbmcgc3RyaW5nV2l0aENvbnRlbnRz
T2ZGaWxlOmtlcm5lbEZpbGVdOworICAgICAgICBOU0FycmF5ICprZXJuZWxzID0gW0NJS2VybmVs
IGtlcm5lbHNXaXRoU3RyaW5nOmNvZGVdOworICAgICAgICBkaWZmdXNlTGlnaHRpbmdGaWx0ZXIg
PSBbW2tlcm5lbHMgb2JqZWN0QXRJbmRleDowXSByZXRhaW5dOworICAgIH0KKyAgICByZXR1cm4g
W3N1cGVyIGluaXRdOworfQorCistIChDSUltYWdlICopb3V0cHV0SW1hZ2UKK3sKKyAgICBDSVNh
bXBsZXIgKnNyYyA9IFtDSVNhbXBsZXIgc2FtcGxlcldpdGhJbWFnZTogaW5wdXROb3JtYWxNYXBd
OworICAgIENJU2FtcGxlciAqbGlnaHRTcmMgPSBbQ0lTYW1wbGVyIHNhbXBsZXJXaXRoSW1hZ2U6
IGlucHV0TGlnaHRWZWN0b3JzXTsKKyAgICByZXR1cm4gW3NlbGYgYXBwbHk6ZGlmZnVzZUxpZ2h0
aW5nRmlsdGVyLCBzcmMsIGxpZ2h0U3JjLCBpbnB1dExpZ2h0aW5nQ29sb3IsIGlucHV0U3VyZmFj
ZVNjYWxlLCBpbnB1dERpZmZ1c2VDb25zdGFudCwKKyAgICAgICAgaW5wdXRLZXJuZWxVbml0TGVu
Z3RoWCwgaW5wdXRLZXJuZWxVbml0TGVuZ3RoWSwgbmlsXTsKK30KKworQGVuZAorCisKSW5kZXg6
IGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL1dLRGlzdGFudExpZ2h0RmlsdGVyLmNpa2Vy
bmVsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KZGlmZiAtTnB1IGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL1dL
RGlzdGFudExpZ2h0RmlsdGVyLmNpa2VybmVsCi0tLSBrY2FudmFzL2RldmljZS9xdWFydHovZmls
dGVycy9XS0Rpc3RhbnRMaWdodEZpbHRlci5jaWtlcm5lbAkxIEphbiAxOTcwIDAwOjAwOjAwIC0w
MDAwCisrKyBrY2FudmFzL2RldmljZS9xdWFydHovZmlsdGVycy9XS0Rpc3RhbnRMaWdodEZpbHRl
ci5jaWtlcm5lbAkxMSBOb3YgMjAwNSAyMzozNjowMCAtMDAwMApAQCAtMCwwICsxLDQgQEAKK2tl
cm5lbCB2ZWM0IGRpc3RhbnRMaWdodChzYW1wbGVyIGltYWdlLCB2ZWMzIGRpcmVjdGlvbikKK3sK
KyAgICByZXR1cm4gdmVjNChkaXJlY3Rpb24ueCwgZGlyZWN0aW9uLnksIGRpcmVjdGlvbi56LCAx
LjApOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKSW5kZXg6IGtjYW52YXMvZGV2aWNl
L3F1YXJ0ei9maWx0ZXJzL1dLRGlzdGFudExpZ2h0RmlsdGVyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpkaWZmIC1O
cHUga2NhbnZhcy9kZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tEaXN0YW50TGlnaHRGaWx0ZXIuaAot
LS0ga2NhbnZhcy9kZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tEaXN0YW50TGlnaHRGaWx0ZXIuaAkx
IEphbiAxOTcwIDAwOjAwOjAwIC0wMDAwCisrKyBrY2FudmFzL2RldmljZS9xdWFydHovZmlsdGVy
cy9XS0Rpc3RhbnRMaWdodEZpbHRlci5oCTEzIE5vdiAyMDA1IDEwOjU3OjE4IC0wMDAwCkBAIC0w
LDAgKzEsMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgQXBwbGUgQ29tcHV0ZXIsIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbXBvcnQgPFF1YXJ0ekNvcmUvQ29y
ZUltYWdlLmg+CisKK0BpbnRlcmZhY2UgV0tEaXN0YW50TGlnaHRGaWx0ZXIgOiBDSUZpbHRlciB7
CisgICAgQ0lJbWFnZSAgKiBpbnB1dE5vcm1hbE1hcDsKKyAgICBDSVZlY3RvciAqIGlucHV0TGln
aHREaXJlY3Rpb247Cit9CitAZW5kCkluZGV4OiBrY2FudmFzL2RldmljZS9xdWFydHovZmlsdGVy
cy9XS0Rpc3RhbnRMaWdodEZpbHRlci5tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtTnB1IGtjYW52YXMvZGV2
aWNlL3F1YXJ0ei9maWx0ZXJzL1dLRGlzdGFudExpZ2h0RmlsdGVyLm0KLS0tIGtjYW52YXMvZGV2
aWNlL3F1YXJ0ei9maWx0ZXJzL1dLRGlzdGFudExpZ2h0RmlsdGVyLm0JMSBKYW4gMTk3MCAwMDow
MDowMCAtMDAwMAorKysga2NhbnZhcy9kZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tEaXN0YW50TGln
aHRGaWx0ZXIubQkyMCBOb3YgMjAwNSAxMzowNDoyMiAtMDAwMApAQCAtMCwwICsxLDcwIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA1IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworIAorI2ltcG9ydCAiV0tEaXN0YW50TGlnaHRGaWx0ZXIuaCIKKwor
c3RhdGljIENJS2VybmVsICpkaXN0YW50TGlnaHRGaWx0ZXIgPSBuaWw7CisKK0BpbXBsZW1lbnRh
dGlvbiBXS0Rpc3RhbnRMaWdodEZpbHRlcgorCisrICh2b2lkKWluaXRpYWxpemUKK3sKKyAgICBb
Q0lGaWx0ZXIgcmVnaXN0ZXJGaWx0ZXJOYW1lOkAiV0tEaXN0YW50TGlnaHQiCisgICAgICAgIGNv
bnN0cnVjdG9yOiBzZWxmCisgICAgICAgIGNsYXNzQXR0cmlidXRlczogW05TRGljdGlvbmFyeSBk
aWN0aW9uYXJ5V2l0aE9iamVjdHNBbmRLZXlzOgorICAgICAgICAgQCJXZWJLaXQgRGlzdGFudCBM
aWdodCIsIGtDSUF0dHJpYnV0ZUZpbHRlckRpc3BsYXlOYW1lLAorICAgICAgICBbTlNBcnJheSBh
cnJheVdpdGhPYmplY3RzOiBrQ0lDYXRlZ29yeVN0eWxpemUsIGtDSUNhdGVnb3J5VmlkZW8sCisg
ICAgICAgICAgICBrQ0lDYXRlZ29yeVN0aWxsSW1hZ2UsIGtDSUNhdGVnb3J5Tm9uU3F1YXJlUGl4
ZWxzLG5pbF0sIGtDSUF0dHJpYnV0ZUZpbHRlckNhdGVnb3JpZXMsCisgICAgICAgICAgICBbTlNE
aWN0aW9uYXJ5IGRpY3Rpb25hcnlXaXRoT2JqZWN0c0FuZEtleXM6CisgICAgICAgICAgICAgICAg
a0NJQXR0cmlidXRlVHlwZVBvc2l0aW9uMywga0NJQXR0cmlidXRlVHlwZSwKKyAgICAgICAgICAg
ICAgICBuaWxdLCBAImlucHV0TGlnaHREaXJlY3Rpb24iLAorICAgICAgICBuaWxdXTsKK30KKwor
KyAoQ0lGaWx0ZXIgKilmaWx0ZXJXaXRoTmFtZTooTlNTdHJpbmcgKiluYW1lCit7CisgICAgQ0lG
aWx0ZXIgKmZpbHRlcjsKKyAgICBmaWx0ZXIgPSBbW3NlbGYgYWxsb2NdIGluaXRdOworICAgIHJl
dHVybiBbZmlsdGVyIGF1dG9yZWxlYXNlXTsKK30KKworLSAoaWQpaW5pdAoreworICAgIGlmICgh
ZGlzdGFudExpZ2h0RmlsdGVyKSB7CisgICAgICAgIE5TQnVuZGxlICpidW5kbGUgPSBbTlNCdW5k
bGUgYnVuZGxlRm9yQ2xhc3M6W3NlbGYgY2xhc3NdXTsKKyAgICAgICAgTlNTdHJpbmcgKmtlcm5l
bEZpbGUgPSBbYnVuZGxlIHBhdGhGb3JSZXNvdXJjZTpAIldLRGlzdGFudExpZ2h0RmlsdGVyIiBv
ZlR5cGU6QCJjaWtlcm5lbCJdOworICAgICAgICBOU1N0cmluZyAqY29kZSA9IFtOU1N0cmluZyBz
dHJpbmdXaXRoQ29udGVudHNPZkZpbGU6a2VybmVsRmlsZV07CisgICAgICAgIE5TQXJyYXkgKmtl
cm5lbHMgPSBbQ0lLZXJuZWwga2VybmVsc1dpdGhTdHJpbmc6Y29kZV07CisgICAgICAgIGRpc3Rh
bnRMaWdodEZpbHRlciA9IFtba2VybmVscyBvYmplY3RBdEluZGV4OjBdIHJldGFpbl07CisgICAg
fQorICAgIHJldHVybiBbc3VwZXIgaW5pdF07Cit9CisKKy0gKENJSW1hZ2UgKilvdXRwdXRJbWFn
ZQoreworICAgIHJldHVybiBbc2VsZiBhcHBseTpkaXN0YW50TGlnaHRGaWx0ZXIsIFtDSVNhbXBs
ZXIgc2FtcGxlcldpdGhJbWFnZTppbnB1dE5vcm1hbE1hcF0sIGlucHV0TGlnaHREaXJlY3Rpb24s
IG5pbF07Cit9CisKK0BlbmQKSW5kZXg6IGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL1dL
Tm9ybWFsTWFwRmlsdGVyLmNpa2VybmVsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtTnB1IGtjYW52YXMvZGV2
aWNlL3F1YXJ0ei9maWx0ZXJzL1dLTm9ybWFsTWFwRmlsdGVyLmNpa2VybmVsCi0tLSBrY2FudmFz
L2RldmljZS9xdWFydHovZmlsdGVycy9XS05vcm1hbE1hcEZpbHRlci5jaWtlcm5lbAkxIEphbiAx
OTcwIDAwOjAwOjAwIC0wMDAwCisrKyBrY2FudmFzL2RldmljZS9xdWFydHovZmlsdGVycy9XS05v
cm1hbE1hcEZpbHRlci5jaWtlcm5lbAkxOSBOb3YgMjAwNSAxMzo1MzowMSAtMDAwMApAQCAtMCww
ICsxLDIzIEBACitrZXJuZWwgdmVjNCBjb252b2x2ZShzYW1wbGVyIGltYWdlLCAgZmxvYXQgZGl2
aXNvciwgZmxvYXQgYmlhcywKKwkJCXZlYzMgbTAsIHZlYzMgbTEsIHZlYzMgbTIgKQoreworICAg
IHZlYzQgY29sb3VyPXZlYzQoMC4wLCAwLjAsIDAuMCwgMC4wKTsKKyAgICB2ZWMyIHBvcz1zYW1w
bGVyQ29vcmQoaW1hZ2UpOworICAgIGNvbG91cj1zYW1wbGUoaW1hZ2UsIHBvcyt2ZWMyKC0xLC0x
KSkqbTAueDsKKyAgICBjb2xvdXIrPXNhbXBsZShpbWFnZSwgcG9zK3ZlYzIoLTEsIDAuMCkpKm0w
Lnk7CisgICAgY29sb3VyKz1zYW1wbGUoaW1hZ2UsIHBvcyt2ZWMyKC0xLCAxKSkqbTAuejsKKyAg
ICBjb2xvdXIrPXNhbXBsZShpbWFnZSwgcG9zK3ZlYzIoMCwtMSkpKm0xLng7CisgICAgY29sb3Vy
Kz1zYW1wbGUoaW1hZ2UsIHBvcykqbTEueTsKKyAgICBjb2xvdXIrPXNhbXBsZShpbWFnZSwgcG9z
K3ZlYzIoMCwgMS4wKSkqbTEuejsKKyAgICBjb2xvdXIrPXNhbXBsZShpbWFnZSwgcG9zK3ZlYzIo
MSwtMSkpKm0yLng7CisgICAgY29sb3VyKz1zYW1wbGUoaW1hZ2UsIHBvcyt2ZWMyKDEsIDAuMCkp
Km0yLnk7CisgICAgY29sb3VyKz1zYW1wbGUoaW1hZ2UsIHBvcyt2ZWMyKDEsIDEpKSptMi56Owor
ICAgIHJldHVybiAoKChjb2xvdXIvZGl2aXNvcikrYmlhcykpOworfQorCitrZXJuZWwgdmVjNCBt
ZXJnZU5vcm1hbHMoc2FtcGxlciBOeCwgc2FtcGxlciBOeSwgc2FtcGxlciBzcmMsIGZsb2F0IHN1
cmZhY2VTY2FsZSkKK3sKKyAgICB2ZWMzIE49dmVjMyhzdXJmYWNlU2NhbGUqc2FtcGxlKE54LCBz
YW1wbGVyQ29vcmQoTngpKS5hLCBzdXJmYWNlU2NhbGUqc2FtcGxlKE55LCBzYW1wbGVyQ29vcmQo
TnkpKS5hLCAxLjAsIDAuMCk7CisgICAgTiA9IE4vc3FydChkb3QoTixOKSk7CisgICAgcmV0dXJu
IHZlYzQoTi54LCBOLnksIE4ueiwgc3VyZmFjZVNjYWxlKnNhbXBsZShzcmMsIHNhbXBsZXJDb29y
ZChzcmMpKS5hKTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCkluZGV4OiBrY2FudmFz
L2RldmljZS9xdWFydHovZmlsdGVycy9XS05vcm1hbE1hcEZpbHRlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGlm
ZiAtTnB1IGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL1dLTm9ybWFsTWFwRmlsdGVyLmgK
LS0tIGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL1dLTm9ybWFsTWFwRmlsdGVyLmgJMSBK
YW4gMTk3MCAwMDowMDowMCAtMDAwMAorKysga2NhbnZhcy9kZXZpY2UvcXVhcnR6L2ZpbHRlcnMv
V0tOb3JtYWxNYXBGaWx0ZXIuaAkyMCBOb3YgMjAwNSAxMDoyODoyMCAtMDAwMApAQCAtMCwwICsx
LDMzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1IEFwcGxlIENvbXB1dGVyLCBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW1wb3J0IDxRdWFydHpDb3JlL0NvcmVJbWFn
ZS5oPgorLy9UT0RPOiBXZSBjdXJyZW50bHkgaWdub3JlIHRoZSBpbnB1dCBrZXJuZWwgbGVuZ3Ro
cworQGludGVyZmFjZSBXS05vcm1hbE1hcEZpbHRlciA6IENJRmlsdGVyIHsKKyAgICBDSUltYWdl
ICppbnB1dEltYWdlOworICAgIE5TTnVtYmVyICppbnB1dFN1cmZhY2VTY2FsZTsKK30KK0BlbmQK
KwpJbmRleDoga2NhbnZhcy9kZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tOb3JtYWxNYXBGaWx0ZXIu
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09CmRpZmYgLU5wdSBrY2FudmFzL2RldmljZS9xdWFydHovZmlsdGVycy9XS05v
cm1hbE1hcEZpbHRlci5tCi0tLSBrY2FudmFzL2RldmljZS9xdWFydHovZmlsdGVycy9XS05vcm1h
bE1hcEZpbHRlci5tCTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAKKysrIGtjYW52YXMvZGV2aWNl
L3F1YXJ0ei9maWx0ZXJzL1dLTm9ybWFsTWFwRmlsdGVyLm0JMjAgTm92IDIwMDUgMTM6MDQ6MjIg
LTAwMDAKQEAgLTAsMCArMSwxMDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgQXBwbGUg
Q29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbXBvcnQgIldL
Tm9ybWFsTWFwRmlsdGVyLmgiCisKK3N0YXRpYyBDSUtlcm5lbCAqY29udm9sdmVLZXJuZWwgPSBu
aWw7CitzdGF0aWMgQ0lLZXJuZWwgKm5vcm1hbE1hcEtlcm5lbCA9IG5pbDsKKworQGltcGxlbWVu
dGF0aW9uIFdLTm9ybWFsTWFwRmlsdGVyCisKKysgKHZvaWQpaW5pdGlhbGl6ZQoreworICAgIFtD
SUZpbHRlciByZWdpc3RlckZpbHRlck5hbWU6QCJXS05vcm1hbE1hcCIKKyAgICAgICAgY29uc3Ry
dWN0b3I6c2VsZgorICAgICAgICBjbGFzc0F0dHJpYnV0ZXM6W05TRGljdGlvbmFyeSBkaWN0aW9u
YXJ5V2l0aE9iamVjdHNBbmRLZXlzOgorICAgICAgICAgICAgQCJXZWJLaXQgTm9ybWFsIE1hcCIs
IGtDSUF0dHJpYnV0ZUZpbHRlckRpc3BsYXlOYW1lLAorICAgICAgICAgICAgW05TQXJyYXkgYXJy
YXlXaXRoT2JqZWN0czoga0NJQ2F0ZWdvcnlCbHVyLCBrQ0lDYXRlZ29yeVZpZGVvLAorICAgICAg
ICAgICAgICAgIGtDSUNhdGVnb3J5U3RpbGxJbWFnZSwga0NJQ2F0ZWdvcnlOb25TcXVhcmVQaXhl
bHMsIG5pbF0sIGtDSUF0dHJpYnV0ZUZpbHRlckNhdGVnb3JpZXMsICAgICAgIAorICAgICAgICAg
ICAgW05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVjdHNBbmRLZXlzOgorICAgICAgICAg
ICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoRG91YmxlOjAuMF0sIGtDSUF0dHJpYnV0ZU1pbiwK
KyAgICAgICAgICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aERvdWJsZToxLjBdLCBrQ0lBdHRy
aWJ1dGVEZWZhdWx0LAorICAgICAgICAgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoRG91Ymxl
OjEuMF0sIGtDSUF0dHJpYnV0ZUlkZW50aXR5LAorICAgICAgICAgICAgICAgIGtDSUF0dHJpYnV0
ZVR5cGVTY2FsYXIsIGtDSUF0dHJpYnV0ZVR5cGUsCisgICAgICAgICAgICAgICAgbmlsXSwgQCJp
bnB1dFN1cmZhY2VTY2FsZSIsCisgICAgICAgICAgICBuaWxdXTsKK30KKworKyAoQ0lGaWx0ZXIg
KilmaWx0ZXJXaXRoTmFtZTooTlNTdHJpbmcgKiluYW1lCit7CisgICAgQ0lGaWx0ZXIgKmZpbHRl
cjsKKyAgICBmaWx0ZXIgPSBbW3NlbGYgYWxsb2NdIGluaXRdOworICAgIHJldHVybiBbZmlsdGVy
IGF1dG9yZWxlYXNlXTsKK30KKworLSAoaWQpaW5pdAoreworICAgIGlmICghbm9ybWFsTWFwS2Vy
bmVsKSB7CisgICAgICAgIE5TQnVuZGxlICpidW5kbGUgPSBbTlNCdW5kbGUgYnVuZGxlRm9yQ2xh
c3M6W3NlbGYgY2xhc3NdXTsKKyAgICAgICAgTlNTdHJpbmcgKmtlcm5lbEZpbGUgPSBbYnVuZGxl
IHBhdGhGb3JSZXNvdXJjZTpAIldLTm9ybWFsTWFwRmlsdGVyIiBvZlR5cGU6QCJjaWtlcm5lbCJd
OworICAgICAgICBOU1N0cmluZyAqY29kZSA9IFtOU1N0cmluZyBzdHJpbmdXaXRoQ29udGVudHNP
ZkZpbGU6a2VybmVsRmlsZV07CisgICAgICAgIE5TQXJyYXkgKmtlcm5lbHMgPSBbQ0lLZXJuZWwg
a2VybmVsc1dpdGhTdHJpbmc6Y29kZV07CisgICAgICAgIGNvbnZvbHZlS2VybmVsID0gW1trZXJu
ZWxzIG9iamVjdEF0SW5kZXg6MF0gcmV0YWluXTsKKyAgICAgICAgbm9ybWFsTWFwS2VybmVsID0g
W1trZXJuZWxzIG9iamVjdEF0SW5kZXg6MV0gcmV0YWluXTsKKyAgICB9CisgICAgcmV0dXJuIFtz
dXBlciBpbml0XTsKK30KKworLSAoTlNBcnJheSAqKXhDb252b2x2ZUFyZ3NXaXRoQnVtcE1hcDoo
Q0lTYW1wbGVyICopYnVtcE1hcCB7CisgICAgcmV0dXJuIFtOU0FycmF5IGFycmF5V2l0aE9iamVj
dHM6CisgICAgICAgIGJ1bXBNYXAsCisgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6
NF0sCisgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6MF0sCisgICAgICAgIFtDSVZl
Y3RvciB2ZWN0b3JXaXRoWDogMSBZOiAyIFo6IDFdLAorICAgICAgICBbQ0lWZWN0b3IgdmVjdG9y
V2l0aFg6IDAgWTogMCBaOiAwXSwKKyAgICAgICAgW0NJVmVjdG9yIHZlY3RvcldpdGhYOi0xIFk6
LTIgWjotMV0sCisgICAgICAgIG5pbF07Cit9CisKKy0gKE5TQXJyYXkgKil5Q29udm9sdmVBcmdz
V2l0aEJ1bXBNYXA6KENJU2FtcGxlciAqKWJ1bXBNYXAgeworICAgIHJldHVybiBbTlNBcnJheSBh
cnJheVdpdGhPYmplY3RzOiAKKyAgICAgICAgYnVtcE1hcCwKKyAgICAgICAgW05TTnVtYmVyIG51
bWJlcldpdGhGbG9hdDo0XSwKKyAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhGbG9hdDowXSwK
KyAgICAgICAgW0NJVmVjdG9yIHZlY3RvcldpdGhYOiAxIFk6IDAgWjotMV0sCisgICAgICAgIFtD
SVZlY3RvciB2ZWN0b3JXaXRoWDogMiBZOiAwIFo6LTJdLAorICAgICAgICBbQ0lWZWN0b3IgdmVj
dG9yV2l0aFg6IDEgWTogMCBaOi0xXSwKKyAgICAgICAgbmlsXTsKK30KKworLSAoQ0lJbWFnZSAq
KW91dHB1dEltYWdlCit7CisgICAgQ0lTYW1wbGVyICppbWFnZSA9IFtDSVNhbXBsZXIgc2FtcGxl
cldpdGhJbWFnZTppbnB1dEltYWdlXTsKKyAgICBOU0RpY3Rpb25hcnkgKmFwcGx5T3B0aW9ucyA9
IFtOU0RpY3Rpb25hcnkgZGljdGlvbmFyeVdpdGhPYmplY3RzQW5kS2V5czpbaW1hZ2UgZGVmaW5p
dGlvbl0sIGtDSUFwcGx5T3B0aW9uRGVmaW5pdGlvbiwgbmlsXTsKKyAgICAKKyAgICBDSUltYWdl
ICpjb252b2x2ZVggPSBbc2VsZiBhcHBseTpjb252b2x2ZUtlcm5lbCBhcmd1bWVudHM6W3NlbGYg
eENvbnZvbHZlQXJnc1dpdGhCdW1wTWFwOiBpbWFnZV0gb3B0aW9uczphcHBseU9wdGlvbnNdOwor
ICAgIENJSW1hZ2UgKmNvbnZvbHZlWSA9IFtzZWxmIGFwcGx5OmNvbnZvbHZlS2VybmVsIGFyZ3Vt
ZW50czpbc2VsZiB5Q29udm9sdmVBcmdzV2l0aEJ1bXBNYXA6IGltYWdlXSBvcHRpb25zOmFwcGx5
T3B0aW9uc107CisgICAgQ0lTYW1wbGVyICpzYW1wbGVyWCA9IFtDSVNhbXBsZXIgc2FtcGxlcldp
dGhJbWFnZTpjb252b2x2ZVhdOworICAgIENJU2FtcGxlciAqc2FtcGxlclkgPSBbQ0lTYW1wbGVy
IHNhbXBsZXJXaXRoSW1hZ2U6Y29udm9sdmVZXTsKKyAgICAKKyAgICBOU0FycmF5ICpub3JtYWxN
YXBBcmdzID0gW05TQXJyYXkgYXJyYXlXaXRoT2JqZWN0czpzYW1wbGVyWCwgc2FtcGxlclksIGlt
YWdlLCBpbnB1dFN1cmZhY2VTY2FsZSwgbmlsXTsKKyAgICByZXR1cm4gW3NlbGYgYXBwbHk6bm9y
bWFsTWFwS2VybmVsIGFyZ3VtZW50czpub3JtYWxNYXBBcmdzIG9wdGlvbnM6YXBwbHlPcHRpb25z
XTsKK30KKworQGVuZApJbmRleDoga2NhbnZhcy9kZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tQb2lu
dExpZ2h0RmlsdGVyLmNpa2VybmVsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtTnB1IGtjYW52YXMvZGV2aWNl
L3F1YXJ0ei9maWx0ZXJzL1dLUG9pbnRMaWdodEZpbHRlci5jaWtlcm5lbAotLS0ga2NhbnZhcy9k
ZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tQb2ludExpZ2h0RmlsdGVyLmNpa2VybmVsCTEgSmFuIDE5
NzAgMDA6MDA6MDAgLTAwMDAKKysrIGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL1dLUG9p
bnRMaWdodEZpbHRlci5jaWtlcm5lbAkxOSBOb3YgMjAwNSAwOTozNjowMyAtMDAwMApAQCAtMCww
ICsxLDEyIEBACisvKgorR2VuZXJhdGUgdGhlIGxpZ2h0IHZlY3RvcnMgZm9yIGEgcG9pbnQgbGln
aHQgc291cmNlCisqLworCitrZXJuZWwgdmVjNCBnZW5Qb2ludExpZ2h0KHNhbXBsZXIgbm9ybWFs
TWFwLCB2ZWMzIGxpZ2h0UG9zKQoreworCXZlYzIgcG9zPXNhbXBsZXJDb29yZChub3JtYWxNYXAp
OworCXZlYzMgUCA9IHZlYzMocG9zLngsIHBvcy55LCBzYW1wbGUobm9ybWFsTWFwLCBwb3MpLmEp
OworCXZlYzMgTCA9IGxpZ2h0UG9zLVA7CisJTD1ML3NxcnQoZG90KEwsTCkpOworCXJldHVybiB2
ZWM0KEwueCwgTC55LCBMLnosIDEuMCk7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpJ
bmRleDoga2NhbnZhcy9kZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tQb2ludExpZ2h0RmlsdGVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQpkaWZmIC1OcHUga2NhbnZhcy9kZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tQb2lu
dExpZ2h0RmlsdGVyLmgKLS0tIGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL1dLUG9pbnRM
aWdodEZpbHRlci5oCTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAKKysrIGtjYW52YXMvZGV2aWNl
L3F1YXJ0ei9maWx0ZXJzL1dLUG9pbnRMaWdodEZpbHRlci5oCTIwIE5vdiAyMDA1IDExOjA0OjAz
IC0wMDAwCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgQXBwbGUg
Q29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbXBvcnQgPFF1
YXJ0ekNvcmUvQ29yZUltYWdlLmg+CisKK0BpbnRlcmZhY2UgV0tQb2ludExpZ2h0RmlsdGVyIDog
Q0lGaWx0ZXIgeworICAgIENJSW1hZ2UgICppbnB1dE5vcm1hbE1hcDsKKyAgICBDSVZlY3RvciAq
aW5wdXRMaWdodFBvc2l0aW9uOworfQorCitAZW5kCkluZGV4OiBrY2FudmFzL2RldmljZS9xdWFy
dHovZmlsdGVycy9XS1BvaW50TGlnaHRGaWx0ZXIubQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CmRpZmYgLU5wdSBrY2Fu
dmFzL2RldmljZS9xdWFydHovZmlsdGVycy9XS1BvaW50TGlnaHRGaWx0ZXIubQotLS0ga2NhbnZh
cy9kZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tQb2ludExpZ2h0RmlsdGVyLm0JMSBKYW4gMTk3MCAw
MDowMDowMCAtMDAwMAorKysga2NhbnZhcy9kZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tQb2ludExp
Z2h0RmlsdGVyLm0JMjAgTm92IDIwMDUgMTM6MDQ6MjIgLTAwMDAKQEAgLTAsMCArMSw3MCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2ltcG9ydCAiV0tQb2lu
dExpZ2h0RmlsdGVyLmgiCisKK3N0YXRpYyBDSUtlcm5lbCAqcG9pbnRMaWdodEZpbHRlciA9IG5p
bDsKKworQGltcGxlbWVudGF0aW9uIFdLUG9pbnRMaWdodEZpbHRlcgorCisrICh2b2lkKWluaXRp
YWxpemUKK3sKKyAgICBbQ0lGaWx0ZXIgcmVnaXN0ZXJGaWx0ZXJOYW1lOkAiV0tQb2ludExpZ2h0
IgorICAgICAgICAgICAgICAgICAgICAgY29uc3RydWN0b3I6IHNlbGYKKyAgICAgICAgICAgICAg
ICAgY2xhc3NBdHRyaWJ1dGVzOiBbTlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnlXaXRoT2JqZWN0c0Fu
ZEtleXM6CisgICAgICAgICAgICAgICAgICAgICBAIldlYktpdCBQb2ludCBMaWdodCIsIGtDSUF0
dHJpYnV0ZUZpbHRlckRpc3BsYXlOYW1lLAorICAgICAgICAgICAgICAgICAgICAgW05TQXJyYXkg
YXJyYXlXaXRoT2JqZWN0czoga0NJQ2F0ZWdvcnlTdHlsaXplLCBrQ0lDYXRlZ29yeVZpZGVvLAor
ICAgICAgICAgICAgICAgICAgICAgICAgIGtDSUNhdGVnb3J5U3RpbGxJbWFnZSwga0NJQ2F0ZWdv
cnlOb25TcXVhcmVQaXhlbHMsbmlsXSwga0NJQXR0cmlidXRlRmlsdGVyQ2F0ZWdvcmllcywKKyAg
ICAgICAgICAgICAgICAgICAgIFtOU0RpY3Rpb25hcnkgZGljdGlvbmFyeVdpdGhPYmplY3RzQW5k
S2V5czoKKyAgICAgICAgICAgICAgICAgICAgICAgICBrQ0lBdHRyaWJ1dGVUeXBlUG9zaXRpb24z
LCBrQ0lBdHRyaWJ1dGVUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgIG5pbF0sIEAiaW5w
dXRMaWdodFBvc2l0aW9uIiwKKyAgICAgICAgICAgICAgICAgICAgIG5pbF1dOworfQorCisrIChD
SUZpbHRlciAqKWZpbHRlcldpdGhOYW1lOihOU1N0cmluZyAqKW5hbWUKK3sKKyAgICBDSUZpbHRl
ciAqZmlsdGVyOworICAgIGZpbHRlciA9IFtbc2VsZiBhbGxvY10gaW5pdF07CisgICAgcmV0dXJu
IFtmaWx0ZXIgYXV0b3JlbGVhc2VdOworfQorCistIChpZClpbml0Cit7CisgICAgaWYgKCFwb2lu
dExpZ2h0RmlsdGVyKSB7CisgICAgICAgIE5TQnVuZGxlICpidW5kbGUgPSBbTlNCdW5kbGUgYnVu
ZGxlRm9yQ2xhc3M6W3NlbGYgY2xhc3NdXTsKKyAgICAgICAgTlNTdHJpbmcgKmtlcm5lbEZpbGUg
PSBbYnVuZGxlIHBhdGhGb3JSZXNvdXJjZTpAIldLUG9pbnRMaWdodEZpbHRlciIgb2ZUeXBlOkAi
Y2lrZXJuZWwiXTsKKyAgICAgICAgTlNTdHJpbmcgKmNvZGUgPSBbTlNTdHJpbmcgc3RyaW5nV2l0
aENvbnRlbnRzT2ZGaWxlOmtlcm5lbEZpbGVdOworICAgICAgICBOU0FycmF5ICprZXJuZWxzID0g
W0NJS2VybmVsIGtlcm5lbHNXaXRoU3RyaW5nOmNvZGVdOworICAgICAgICBwb2ludExpZ2h0Rmls
dGVyID0gW1trZXJuZWxzIG9iamVjdEF0SW5kZXg6MF0gcmV0YWluXTsKKyAgICB9CisgICAgcmV0
dXJuIFtzdXBlciBpbml0XTsKK30KKworLSAoQ0lJbWFnZSAqKW91dHB1dEltYWdlCit7CisgICAg
cmV0dXJuIFtzZWxmIGFwcGx5OnBvaW50TGlnaHRGaWx0ZXIsIGlucHV0Tm9ybWFsTWFwLCBpbnB1
dExpZ2h0UG9zaXRpb24sIG5pbF07Cit9CisKK0BlbmQKSW5kZXg6IGtjYW52YXMvZGV2aWNlL3F1
YXJ0ei9maWx0ZXJzL1dLU3BlY3VsYXJMaWdodGluZ0ZpbHRlci5jaWtlcm5lbAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
CmRpZmYgLU5wdSBrY2FudmFzL2RldmljZS9xdWFydHovZmlsdGVycy9XS1NwZWN1bGFyTGlnaHRp
bmdGaWx0ZXIuY2lrZXJuZWwKLS0tIGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL1dLU3Bl
Y3VsYXJMaWdodGluZ0ZpbHRlci5jaWtlcm5lbAkxIEphbiAxOTcwIDAwOjAwOjAwIC0wMDAwCisr
KyBrY2FudmFzL2RldmljZS9xdWFydHovZmlsdGVycy9XS1NwZWN1bGFyTGlnaHRpbmdGaWx0ZXIu
Y2lrZXJuZWwJMTkgTm92IDIwMDUgMTM6NTE6MTUgLTAwMDAKQEAgLTAsMCArMSwxNSBAQAora2Vy
bmVsIHZlYzQgYmFzaWMoc2FtcGxlciBpbnB1dE5vcm1hbFZlY3RvcnMsIHNhbXBsZXIgaW5wdXRM
aWdodFZlY3RvcnMsIF9fY29sb3IgaW5wdXRMaWdodGluZ0NvbG9yLCBmbG9hdCBpbnB1dFN1cmZh
Y2VTY2FsZSwgZmxvYXQgaW5wdXRTcGVjdWxhckNvbnN0YW50LAorICAgICAgICBmbG9hdCBpbnB1
dFNwZWN1bGFyRXhwb25lbnQsIGZsb2F0IGlucHV0S2VybmVsVW5pdExlbmd0aFgsIGZsb2F0IGlu
cHV0S2VybmVsVW5pdExlbmd0aFkpCit7CisJdmVjMiBwb3MgPSBzYW1wbGVyQ29vcmQoaW5wdXRM
aWdodFZlY3RvcnMpOworCXZlYzIgcG9zbiA9IHNhbXBsZXJDb29yZChpbnB1dE5vcm1hbFZlY3Rv
cnMpOworCXZlYzMgbCA9IHNhbXBsZShpbnB1dExpZ2h0VmVjdG9ycywgcG9zKS54eXo7CisJdmVj
MyBuID0gc2FtcGxlKGlucHV0Tm9ybWFsVmVjdG9ycywgcG9zbikueHl6OworICAgIHZlYzMgaCA9
IGwrdmVjMygwLjAsMC4wLDEuMCk7CisgICAgaCAvPSBzcXJ0KGRvdChoLGgpKTsKKyAgICBmbG9h
dCBuaCA9IGlucHV0U3BlY3VsYXJDb25zdGFudCpwb3coKGRvdChuLCBoKSksIGlucHV0U3BlY3Vs
YXJFeHBvbmVudCk7CisgICAgdmVjNCByZXMgPSBpbnB1dExpZ2h0aW5nQ29sb3IgKiBuaDsKKyAg
ICByZXMuYSA9IG1heChyZXMucixyZXMuZyk7CisgICAgcmVzLmEgPSBtYXgocmVzLmEsIHJlcy5i
KTsKKyAgICByZXR1cm4gcmVzOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKSW5kZXg6
IGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL1dLU3BlY3VsYXJMaWdodGluZ0ZpbHRlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KZGlmZiAtTnB1IGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL1dLU3Bl
Y3VsYXJMaWdodGluZ0ZpbHRlci5oCi0tLSBrY2FudmFzL2RldmljZS9xdWFydHovZmlsdGVycy9X
S1NwZWN1bGFyTGlnaHRpbmdGaWx0ZXIuaAkxIEphbiAxOTcwIDAwOjAwOjAwIC0wMDAwCisrKyBr
Y2FudmFzL2RldmljZS9xdWFydHovZmlsdGVycy9XS1NwZWN1bGFyTGlnaHRpbmdGaWx0ZXIuaAkx
MSBOb3YgMjAwNSAyMzozNjowMCAtMDAwMApAQCAtMCwwICsxLDM5IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDA1IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVU
RVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRF
UiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaW1wb3J0IDxRdWFydHpDb3JlL0NvcmVJbWFnZS5oPgorCisKK0BpbnRlcmZhY2Ug
V0tTcGVjdWxhckxpZ2h0aW5nRmlsdGVyIDogQ0lGaWx0ZXIgeworICAgIENJU2FtcGxlciAqaW5w
dXROb3JtYWxNYXA7CisgICAgQ0lTYW1wbGVyICppbnB1dExpZ2h0VmVjdG9yczsKKyAgICBDSUNv
bG9yICAqaW5wdXRMaWdodGluZ0NvbG9yOworICAgIE5TTnVtYmVyICppbnB1dFN1cmZhY2VTY2Fs
ZTsKKyAgICBOU051bWJlciAqaW5wdXRTcGVjdWxhckNvbnN0YW50OworICAgIE5TTnVtYmVyICpp
bnB1dFNwZWN1bGFyRXhwb25lbnQ7CisgICAgTlNOdW1iZXIgKmlucHV0S2VybmVsVW5pdExlbmd0
aFg7CisgICAgTlNOdW1iZXIgKmlucHV0S2VybmVsVW5pdExlbmd0aFk7Cit9CitAZW5kCkluZGV4
OiBrY2FudmFzL2RldmljZS9xdWFydHovZmlsdGVycy9XS1NwZWN1bGFyTGlnaHRpbmdGaWx0ZXIu
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09CmRpZmYgLU5wdSBrY2FudmFzL2RldmljZS9xdWFydHovZmlsdGVycy9XS1Nw
ZWN1bGFyTGlnaHRpbmdGaWx0ZXIubQotLS0ga2NhbnZhcy9kZXZpY2UvcXVhcnR6L2ZpbHRlcnMv
V0tTcGVjdWxhckxpZ2h0aW5nRmlsdGVyLm0JMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMAorKysg
a2NhbnZhcy9kZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tTcGVjdWxhckxpZ2h0aW5nRmlsdGVyLm0J
MjAgTm92IDIwMDUgMTM6MDQ6MjIgLTAwMDAKQEAgLTAsMCArMSw5MyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwNSBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBV
VEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVU
RVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2ltcG9ydCAiV0tTcGVjdWxhckxpZ2h0aW5nRmlsdGVyLmgiCisKK3N0YXRpYyBD
SUtlcm5lbCAqc3BlY3VsYXJMaWdodGluZ0ZpbHRlciA9IG5pbDsKKworQGltcGxlbWVudGF0aW9u
IFdLU3BlY3VsYXJMaWdodGluZ0ZpbHRlcgorCisrICh2b2lkKWluaXRpYWxpemUKK3sKKyAgICBb
Q0lGaWx0ZXIgcmVnaXN0ZXJGaWx0ZXJOYW1lOkAiV0tTcGVjdWxhckxpZ2h0aW5nIiAgCisgICAg
ICAgIGNvbnN0cnVjdG9yOiBzZWxmCisgICAgICAgIGNsYXNzQXR0cmlidXRlczogW05TRGljdGlv
bmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVjdHNBbmRLZXlzOgorICAgICAgICAgQCJXZWJLaXQgU3Bl
Y3VsYXIgTGlnaHRpbmciLCBrQ0lBdHRyaWJ1dGVGaWx0ZXJEaXNwbGF5TmFtZSwKKyAgICAgICAg
W05TQXJyYXkgYXJyYXlXaXRoT2JqZWN0czoga0NJQ2F0ZWdvcnlTdHlsaXplLCBrQ0lDYXRlZ29y
eVZpZGVvLAorICAgICAgICAgICAga0NJQ2F0ZWdvcnlTdGlsbEltYWdlLCBrQ0lDYXRlZ29yeU5v
blNxdWFyZVBpeGVscyxuaWxdLCBrQ0lBdHRyaWJ1dGVGaWx0ZXJDYXRlZ29yaWVzLAorICAgICAg
ICBbTlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnlXaXRoT2JqZWN0c0FuZEtleXM6CisgICAgICAgICAg
ICBbQ0lDb2xvciBjb2xvcldpdGhSZWQ6MS4wIGdyZWVuOjEuMCBibHVlOjEuMCBhbHBoYToxLjBd
LAorICAgICAgICAgICAgIGtDSUF0dHJpYnV0ZURlZmF1bHQsIG5pbF0sICBAImlucHV0TGlnaHRp
bmdDb2xvciIsCisgICAgICAgIFtOU0RpY3Rpb25hcnkgZGljdGlvbmFyeVdpdGhPYmplY3RzQW5k
S2V5czoKKyAgICAgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoRG91YmxlOjAuMF0sIGtDSUF0
dHJpYnV0ZU1pbiwKKyAgICAgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoRG91YmxlOjEuMF0s
IGtDSUF0dHJpYnV0ZURlZmF1bHQsCisgICAgICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aERv
dWJsZToxLjBdLCBrQ0lBdHRyaWJ1dGVJZGVudGl0eSwKKyAgICAgICAgICAgIGtDSUF0dHJpYnV0
ZVR5cGVTY2FsYXIsIGtDSUF0dHJpYnV0ZVR5cGUsCisgICAgICAgICAgICBuaWxdLCBAImlucHV0
U3VyZmFjZVNjYWxlIiwKKyAgICAgICAgW05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVj
dHNBbmRLZXlzOgorICAgICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhEb3VibGU6MC4wXSwg
a0NJQXR0cmlidXRlTWluLAorICAgICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhEb3VibGU6
MS4wXSwga0NJQXR0cmlidXRlRGVmYXVsdCwKKyAgICAgICAgICAgIFtOU051bWJlciBudW1iZXJX
aXRoRG91YmxlOjEuMF0sIGtDSUF0dHJpYnV0ZUlkZW50aXR5LAorICAgICAgICAgICAga0NJQXR0
cmlidXRlVHlwZVNjYWxhciwga0NJQXR0cmlidXRlVHlwZSwKKyAgICAgICAgICAgIG5pbF0sIEAi
aW5wdXRTcGVjdWxhckNvbnN0YW50IiwKKyAgICAgICAgW05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5
V2l0aE9iamVjdHNBbmRLZXlzOgorICAgICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhEb3Vi
bGU6MC4wXSwga0NJQXR0cmlidXRlTWluLAorICAgICAgICAgICAgW05TTnVtYmVyIG51bWJlcldp
dGhEb3VibGU6MTI4LjBdLCBrQ0lBdHRyaWJ1dGVNaW4sCisgICAgICAgICAgICBbTlNOdW1iZXIg
bnVtYmVyV2l0aERvdWJsZToxLjBdLCBrQ0lBdHRyaWJ1dGVEZWZhdWx0LAorICAgICAgICAgICAg
W05TTnVtYmVyIG51bWJlcldpdGhEb3VibGU6MS4wXSwga0NJQXR0cmlidXRlSWRlbnRpdHksCisg
ICAgICAgICAgICBrQ0lBdHRyaWJ1dGVUeXBlU2NhbGFyLCBrQ0lBdHRyaWJ1dGVUeXBlLAorICAg
ICAgICAgICAgbmlsXSwgQCJpbnB1dFNwZWN1bGFyRXhwb25lbnQiLAorICAgICAgICBbTlNEaWN0
aW9uYXJ5IGRpY3Rpb25hcnlXaXRoT2JqZWN0c0FuZEtleXM6CisgICAgICAgICAgICBrQ0lBdHRy
aWJ1dGVUeXBlT2Zmc2V0LCBrQ0lBdHRyaWJ1dGVUeXBlLAorICAgICAgICAgICAgbmlsXSwgQCJp
bnB1dEtlcm5lbFVuaXRMZW5ndGgiLAorICAgICAgICBuaWxdXTsKK30KKworKyAoQ0lGaWx0ZXIg
KilmaWx0ZXJXaXRoTmFtZTooTlNTdHJpbmcgKiluYW1lCit7CisgICAgQ0lGaWx0ZXIgKmZpbHRl
cjsKKyAgICBmaWx0ZXIgPSBbW3NlbGYgYWxsb2NdIGluaXRdOworICAgIHJldHVybiBbZmlsdGVy
IGF1dG9yZWxlYXNlXTsKK30KKworLSAoaWQpaW5pdAoreworICAgIGlmICghc3BlY3VsYXJMaWdo
dGluZ0ZpbHRlcikgeworICAgICAgICBOU0J1bmRsZSAqYnVuZGxlID0gW05TQnVuZGxlIGJ1bmRs
ZUZvckNsYXNzOltzZWxmIGNsYXNzXV07CisgICAgICAgIE5TU3RyaW5nICprZXJuZWxGaWxlID0g
W2J1bmRsZSBwYXRoRm9yUmVzb3VyY2U6QCJXS1NwZWN1bGFyTGlnaHRpbmdGaWx0ZXIiIG9mVHlw
ZTpAImNpa2VybmVsIl07CisgICAgICAgIE5TU3RyaW5nICpjb2RlID0gW05TU3RyaW5nIHN0cmlu
Z1dpdGhDb250ZW50c09mRmlsZTprZXJuZWxGaWxlXTsKKyAgICAgICAgTlNBcnJheSAqa2VybmVs
cyA9IFtDSUtlcm5lbCBrZXJuZWxzV2l0aFN0cmluZzpjb2RlXTsKKyAgICAgICAgc3BlY3VsYXJM
aWdodGluZ0ZpbHRlciA9IFtba2VybmVscyBvYmplY3RBdEluZGV4OjBdIHJldGFpbl07CisgICAg
fQorICAgIHJldHVybiBbc3VwZXIgaW5pdF07Cit9CisKKy0gKENJSW1hZ2UgKilvdXRwdXRJbWFn
ZQoreworICAgIHJldHVybiBbc2VsZiBhcHBseTpzcGVjdWxhckxpZ2h0aW5nRmlsdGVyLCBpbnB1
dE5vcm1hbE1hcCwgaW5wdXRMaWdodFZlY3RvcnMsIGlucHV0TGlnaHRpbmdDb2xvciwgaW5wdXRT
dXJmYWNlU2NhbGUsIGlucHV0U3BlY3VsYXJDb25zdGFudCwKKyAgICAgICAgaW5wdXRTcGVjdWxh
ckV4cG9uZW50LCBpbnB1dEtlcm5lbFVuaXRMZW5ndGhYLCBpbnB1dEtlcm5lbFVuaXRMZW5ndGhZ
LCBuaWxdOworfQorCitAZW5kCkluZGV4OiBrY2FudmFzL2RldmljZS9xdWFydHovZmlsdGVycy9X
S1Nwb3RMaWdodEZpbHRlci5jaWtlcm5lbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CmRpZmYgLU5wdSBrY2FudmFzL2Rl
dmljZS9xdWFydHovZmlsdGVycy9XS1Nwb3RMaWdodEZpbHRlci5jaWtlcm5lbAotLS0ga2NhbnZh
cy9kZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tTcG90TGlnaHRGaWx0ZXIuY2lrZXJuZWwJMSBKYW4g
MTk3MCAwMDowMDowMCAtMDAwMAorKysga2NhbnZhcy9kZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tT
cG90TGlnaHRGaWx0ZXIuY2lrZXJuZWwJMjAgTm92IDIwMDUgMTE6MDM6NTggLTAwMDAKQEAgLTAs
MCArMSwxMiBAQAora2VybmVsIHZlYzQgc3BvdExpZ2h0RmlsdGVyKHNhbXBsZXIgbGlnaHRWZWN0
b3JzLCB2ZWMzIGxpZ2h0RGlyZWN0aW9uLCBmbG9hdCBzcGVjdWxhckV4cG9uZW50LCBmbG9hdCBj
b3NDdXRvZmZBbmdsZSkKK3sKKyAgICB2ZWMyIHBvcz1zYW1wbGVyQ29vcmQobGlnaHRWZWN0b3Jz
KTsKKyAgICB2ZWMzIGwgPSBzYW1wbGUobGlnaHRWZWN0b3JzLCBwb3MpLnh5ejsKKyAgICBsLz1z
cXJ0KGRvdChsLGwpKTsKKyAgICBmbG9hdCBzbD0tKGRvdChsaWdodERpcmVjdGlvbixsKSk7Cisg
ICAgc2w9bWF4KHNsLDAuMCk7CisgICAgLy9wZXJmb3JtIGN1dG9mZgorICAgIGZsb2F0IG91dHNp
ZGVDdXRvZmYgPSBjb21wYXJlKGFicyhjb3NDdXRvZmZBbmdsZSktc2wsIDEuMCwgMC4wKTsKKyAg
ICBzbD1wb3coc2wsc3BlY3VsYXJFeHBvbmVudCk7CisgICAgcmV0dXJuIHZlYzQobC54LGwueSxs
Lnosb3V0c2lkZUN1dG9mZipzbCk7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpJbmRl
eDoga2NhbnZhcy9kZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tTcG90TGlnaHRGaWx0ZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09CmRpZmYgLU5wdSBrY2FudmFzL2RldmljZS9xdWFydHovZmlsdGVycy9XS1Nwb3RMaWdo
dEZpbHRlci5oCi0tLSBrY2FudmFzL2RldmljZS9xdWFydHovZmlsdGVycy9XS1Nwb3RMaWdodEZp
bHRlci5oCTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAKKysrIGtjYW52YXMvZGV2aWNlL3F1YXJ0
ei9maWx0ZXJzL1dLU3BvdExpZ2h0RmlsdGVyLmgJMjAgTm92IDIwMDUgMTE6MDQ6MDMgLTAwMDAK
QEAgLTAsMCArMSwzNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBBcHBsZSBDb21wdXRl
ciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2ltcG9ydCA8UXVhcnR6Q29y
ZS9Db3JlSW1hZ2UuaD4KKworQGludGVyZmFjZSBXS1Nwb3RMaWdodEZpbHRlciA6IENJRmlsdGVy
IHsKKyAgICBDSUltYWdlICAqaW5wdXRMaWdodFZlY3RvcnM7CisgICAgQ0lWZWN0b3IgKmlucHV0
TGlnaHREaXJlY3Rpb247CisgICAgTlNOdW1iZXIgKmlucHV0U3BlY3VsYXJFeHBvbmVudDsKKyAg
ICBOU051bWJlciAqaW5wdXRMaW1pdGluZ0NvbmVBbmdsZTsKK30KK0BlbmQKSW5kZXg6IGtjYW52
YXMvZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL1dLU3BvdExpZ2h0RmlsdGVyLm0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpk
aWZmIC1OcHUga2NhbnZhcy9kZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tTcG90TGlnaHRGaWx0ZXIu
bQotLS0ga2NhbnZhcy9kZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tTcG90TGlnaHRGaWx0ZXIubQkx
IEphbiAxOTcwIDAwOjAwOjAwIC0wMDAwCisrKyBrY2FudmFzL2RldmljZS9xdWFydHovZmlsdGVy
cy9XS1Nwb3RMaWdodEZpbHRlci5tCTIwIE5vdiAyMDA1IDEzOjA0OjIyIC0wMDAwCkBAIC0wLDAg
KzEsNzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgQXBwbGUgQ29tcHV0ZXIsIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisgCisjaW1wb3J0ICJXS1Nwb3RMaWdodEZpbHRl
ci5oIgorCitzdGF0aWMgQ0lLZXJuZWwgKnNwb3RMaWdodEZpbHRlciA9IG5pbDsKKworQGltcGxl
bWVudGF0aW9uIFdLU3BvdExpZ2h0RmlsdGVyCisKKysgKHZvaWQpaW5pdGlhbGl6ZQoreworICAg
IFtDSUZpbHRlciByZWdpc3RlckZpbHRlck5hbWU6QCJXS1Nwb3RMaWdodCIKKyAgICAgICAgY29u
c3RydWN0b3I6IHNlbGYKKyAgICAgICAgY2xhc3NBdHRyaWJ1dGVzOiBbTlNEaWN0aW9uYXJ5IGRp
Y3Rpb25hcnlXaXRoT2JqZWN0c0FuZEtleXM6CisgICAgICAgICBAIldlYktpdCBTcG90IExpZ2h0
Iiwga0NJQXR0cmlidXRlRmlsdGVyRGlzcGxheU5hbWUsCisgICAgICAgIFtOU0FycmF5IGFycmF5
V2l0aE9iamVjdHM6IGtDSUNhdGVnb3J5U3R5bGl6ZSwga0NJQ2F0ZWdvcnlWaWRlbywKKyAgICAg
ICAgICAgIGtDSUNhdGVnb3J5U3RpbGxJbWFnZSwga0NJQ2F0ZWdvcnlOb25TcXVhcmVQaXhlbHMs
bmlsXSwga0NJQXR0cmlidXRlRmlsdGVyQ2F0ZWdvcmllcywKKyAgICAgICAgW05TRGljdGlvbmFy
eSBkaWN0aW9uYXJ5V2l0aE9iamVjdHNBbmRLZXlzOgorICAgICAgICAgICAga0NJQXR0cmlidXRl
VHlwZVBvc2l0aW9uMywga0NJQXR0cmlidXRlVHlwZSwKKyAgICAgICAgICAgIG5pbF0sIEAiaW5w
dXRMaWdodERpcmVjdGlvbiIsCisgICAgICAgIFtOU0RpY3Rpb25hcnkgZGljdGlvbmFyeVdpdGhP
YmplY3RzQW5kS2V5czoKKyAgICAgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoRG91YmxlOjEu
MF0sIGtDSUF0dHJpYnV0ZURlZmF1bHQsCisgICAgICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0
aERvdWJsZToxLjBdLCBrQ0lBdHRyaWJ1dGVJZGVudGl0eSwKKyAgICAgICAgICAgIGtDSUF0dHJp
YnV0ZVR5cGVTY2FsYXIsIGtDSUF0dHJpYnV0ZVR5cGUsCisgICAgICAgICAgICBuaWxdLCBAImlu
cHV0U3BlY3VsYXJFeHBvbmVudCIsCisgICAgICAgIFtOU0RpY3Rpb25hcnkgZGljdGlvbmFyeVdp
dGhPYmplY3RzQW5kS2V5czoKKyAgICAgICAgICAgIGtDSUF0dHJpYnV0ZVR5cGVBbmdsZSwga0NJ
QXR0cmlidXRlVHlwZSwKKyAgICAgICAgICAgIG5pbF0sIEAiaW5wdXRMaW1pdGluZ0NvbmVBbmds
ZSIsCisgICAgICAgIG5pbF1dOworfQorCisrIChDSUZpbHRlciAqKWZpbHRlcldpdGhOYW1lOihO
U1N0cmluZyAqKW5hbWUKK3sKKyAgICBDSUZpbHRlciAqZmlsdGVyOworICAgIGZpbHRlciA9IFtb
c2VsZiBhbGxvY10gaW5pdF07CisgICAgcmV0dXJuIFtmaWx0ZXIgYXV0b3JlbGVhc2VdOworfQor
CistIChpZClpbml0Cit7CisgICAgaWYgKCFzcG90TGlnaHRGaWx0ZXIpIHsKKyAgICAgICAgTlNC
dW5kbGUgKmJ1bmRsZSA9IFtOU0J1bmRsZSBidW5kbGVGb3JDbGFzczpbc2VsZiBjbGFzc11dOwor
ICAgICAgICBOU1N0cmluZyAqa2VybmVsRmlsZSA9IFtidW5kbGUgcGF0aEZvclJlc291cmNlOkAi
V0tTcG90TGlnaHRGaWx0ZXIiIG9mVHlwZTpAImNpa2VybmVsIl07CisgICAgICAgIE5TU3RyaW5n
ICpjb2RlID0gW05TU3RyaW5nIHN0cmluZ1dpdGhDb250ZW50c09mRmlsZTprZXJuZWxGaWxlXTsK
KyAgICAgICAgTlNBcnJheSAqa2VybmVscyA9IFtDSUtlcm5lbCBrZXJuZWxzV2l0aFN0cmluZzpj
b2RlXTsKKyAgICAgICAgc3BvdExpZ2h0RmlsdGVyID0gW1trZXJuZWxzIG9iamVjdEF0SW5kZXg6
MF0gcmV0YWluXTsKKyAgICB9CisgICAgcmV0dXJuIFtzdXBlciBpbml0XTsKK30KKworLSAoQ0lJ
bWFnZSAqKW91dHB1dEltYWdlCit7CisgICAgZmxvYXQgY29zY3V0b2ZmID0gY29zKFtpbnB1dExp
bWl0aW5nQ29uZUFuZ2xlIGZsb2F0VmFsdWVdKTsKKyAgICByZXR1cm4gW3NlbGYgYXBwbHk6c3Bv
dExpZ2h0RmlsdGVyLCBpbnB1dExpZ2h0VmVjdG9ycywgaW5wdXRMaWdodERpcmVjdGlvbiwgaW5w
dXRTcGVjdWxhckV4cG9uZW50LCBbTlNOdW1iZXIgbnVtYmVyV2l0aEZsb2F0OmNvc2N1dG9mZl0s
IG5pbF07Cit9CisKK0BlbmQKSW5kZXg6IGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9LQ2FudmFzRmls
dGVyUXVhcnR6LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2Nh
bnZhcy9kZXZpY2UvcXVhcnR6L0tDYW52YXNGaWx0ZXJRdWFydHouaCx2CnJldHJpZXZpbmcgcmV2
aXNpb24gMS4zCmRpZmYgLXAgLXUgLXIxLjMga2NhbnZhcy9kZXZpY2UvcXVhcnR6L0tDYW52YXNG
aWx0ZXJRdWFydHouaAotLS0ga2NhbnZhcy9kZXZpY2UvcXVhcnR6L0tDYW52YXNGaWx0ZXJRdWFy
dHouaAkxIFNlcCAyMDA1IDA3OjMyOjU0IC0wMDAwCTEuMworKysga2NhbnZhcy9kZXZpY2UvcXVh
cnR6L0tDYW52YXNGaWx0ZXJRdWFydHouaAkyMCBOb3YgMjAwNSAxMzoyNTo0NiAtMDAwMApAQCAt
NzMsMTEgKzczLDIxIEBAIHB1YmxpYzoKIC8vICAgIHZpcnR1YWwgQ0lGaWx0ZXIgKmdldENJRmls
dGVyKEtDYW52YXNGaWx0ZXJRdWFydHogKnF1YXJ0ekZpbHRlcikgY29uc3Q7CiAvL307CiAKK2Ns
YXNzIEtDYW52YXNGRUNvbnZvbHZlTWF0cml4UXVhcnR6IDogcHVibGljIEtDYW52YXNGRUNvbnZv
bHZlTWF0cml4IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIENJRmlsdGVyICpnZXRDSUZpbHRlcihL
Q2FudmFzRmlsdGVyUXVhcnR6ICpxdWFydHpGaWx0ZXIpIGNvbnN0OworfTsKKwogY2xhc3MgS0Nh
bnZhc0ZFQ29tcG9zaXRlUXVhcnR6IDogcHVibGljIEtDYW52YXNGRUNvbXBvc2l0ZSB7CiBwdWJs
aWM6CiAgICAgdmlydHVhbCBDSUZpbHRlciAqZ2V0Q0lGaWx0ZXIoS0NhbnZhc0ZpbHRlclF1YXJ0
eiAqcXVhcnR6RmlsdGVyKSBjb25zdDsKIH07CiAKK2NsYXNzIEtDYW52YXNGRURpZmZ1c2VMaWdo
dGluZ1F1YXJ0eiA6IHB1YmxpYyBLQ2FudmFzRkVEaWZmdXNlTGlnaHRpbmcgeworcHVibGljOgor
ICAgIHZpcnR1YWwgQ0lGaWx0ZXIgKmdldENJRmlsdGVyKEtDYW52YXNGaWx0ZXJRdWFydHogKnF1
YXJ0ekZpbHRlcikgY29uc3Q7Cit9OworCiBjbGFzcyBLQ2FudmFzRkVGbG9vZFF1YXJ0eiA6IHB1
YmxpYyBLQ2FudmFzRkVGbG9vZCB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCBDSUZpbHRlciAqZ2V0
Q0lGaWx0ZXIoS0NhbnZhc0ZpbHRlclF1YXJ0eiAqcXVhcnR6RmlsdGVyKSBjb25zdDsKQEAgLTkz
LDcgKzEwMyw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIENJRmlsdGVyICpnZXRDSUZpbHRlcihL
Q2FudmFzRmlsdGVyUXVhcnR6ICpxdWFydHpGaWx0ZXIpIGNvbnN0OwogfTsKIAotCiBjbGFzcyBL
Q2FudmFzRkVNZXJnZVF1YXJ0eiA6IHB1YmxpYyBLQ2FudmFzRkVNZXJnZSB7CiBwdWJsaWM6CiAg
ICAgdmlydHVhbCBDSUZpbHRlciAqZ2V0Q0lGaWx0ZXIoS0NhbnZhc0ZpbHRlclF1YXJ0eiAqcXVh
cnR6RmlsdGVyKSBjb25zdDsKQEAgLTEwNCw2ICsxMTMsMTEgQEAgcHVibGljOgogICAgIHZpcnR1
YWwgQ0lGaWx0ZXIgKmdldENJRmlsdGVyKEtDYW52YXNGaWx0ZXJRdWFydHogKnF1YXJ0ekZpbHRl
cikgY29uc3Q7CiB9OwogCitjbGFzcyBLQ2FudmFzRkVTcGVjdWxhckxpZ2h0aW5nUXVhcnR6IDog
cHVibGljIEtDYW52YXNGRVNwZWN1bGFyTGlnaHRpbmcgeworcHVibGljOgorICAgIHZpcnR1YWwg
Q0lGaWx0ZXIgKmdldENJRmlsdGVyKEtDYW52YXNGaWx0ZXJRdWFydHogKnF1YXJ0ekZpbHRlcikg
Y29uc3Q7Cit9OworCiBjbGFzcyBLQ2FudmFzRkVUaWxlUXVhcnR6IDogcHVibGljIEtDYW52YXNG
RVRpbGUgewogcHVibGljOgogICAgIHZpcnR1YWwgQ0lGaWx0ZXIgKmdldENJRmlsdGVyKEtDYW52
YXNGaWx0ZXJRdWFydHogKnF1YXJ0ekZpbHRlcikgY29uc3Q7CkluZGV4OiBrY2FudmFzL2Rldmlj
ZS9xdWFydHovS0NhbnZhc0ZpbHRlclF1YXJ0ei5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zz
L3Jvb3QvU1ZHU3VwcG9ydC9rY2FudmFzL2RldmljZS9xdWFydHovS0NhbnZhc0ZpbHRlclF1YXJ0
ei5tbSx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xMApkaWZmIC1wIC11IC1yMS4xMCBrY2FudmFz
L2RldmljZS9xdWFydHovS0NhbnZhc0ZpbHRlclF1YXJ0ei5tbQotLS0ga2NhbnZhcy9kZXZpY2Uv
cXVhcnR6L0tDYW52YXNGaWx0ZXJRdWFydHoubW0JNSBPY3QgMjAwNSAwNTozNjo1MSAtMDAwMAkx
LjEwCisrKyBrY2FudmFzL2RldmljZS9xdWFydHovS0NhbnZhc0ZpbHRlclF1YXJ0ei5tbQkyMCBO
b3YgMjAwNSAxMzoyNTo1MCAtMDAwMApAQCAtMzEsNiArMzEsMTMgQEAKICNpbXBvcnQgIktSZW5k
ZXJpbmdEZXZpY2VRdWFydHouaCIKICNpbXBvcnQgIlF1YXJ0elN1cHBvcnQuaCIKICNpbXBvcnQg
IktXUUV4Y2VwdGlvbnMuaCIKKyNpbXBvcnQgIldLRGlmZnVzZUxpZ2h0aW5nRmlsdGVyLmgiCisj
aW1wb3J0ICJXS1NwZWN1bGFyTGlnaHRpbmdGaWx0ZXIuaCIKKyNpbXBvcnQgIldLU3BvdExpZ2h0
RmlsdGVyLmgiCisjaW1wb3J0ICJXS1BvaW50TGlnaHRGaWx0ZXIuaCIKKyNpbXBvcnQgIldLRGlz
dGFudExpZ2h0RmlsdGVyLmgiCisjaW1wb3J0ICJXS05vcm1hbE1hcEZpbHRlci5oIgorI2ltcG9y
dCAiV0tBcml0aG1ldGljRmlsdGVyLmgiCiAKICNpbXBvcnQgPFF1YXJ0ekNvcmUvUXVhcnR6Q29y
ZS5oPgogCkBAIC00MCwxMyArNDcsMjIgQEAKIAogc3RhdGljIFFTdHJpbmcgS0NQcmV2aW91c0Zp
bHRlck91dHB1dE5hbWUgPSBRU3RyaW5nOjpmcm9tTGF0aW4xKCJfX3ByZXZpb3VzT3V0cHV0X18i
KTsKIAotLy9zdGF0aWMgQ0lDb2xvciAqY2lDb2xvcihjb25zdCBRQ29sb3IgJmMpCi0vL3sKLS8v
ICAgIENHQ29sb3JSZWYgY29sb3JDRyA9IGNnQ29sb3IoYyk7Ci0vLyAgICBDSUNvbG9yICpjb2xv
ckNJID0gW0NJQ29sb3IgY29sb3JXaXRoQ0dDb2xvcjpjb2xvckNHXTsKLS8vICAgIENHQ29sb3JS
ZWxlYXNlKGNvbG9yQ0cpOwotLy8gICAgcmV0dXJuIGNvbG9yQ0k7Ci0vL30KK3N0YXRpYyBpbmxp
bmUgQ0lDb2xvciAqY2lDb2xvcihjb25zdCBRQ29sb3IgJmMpCit7CisgICAgQ0dDb2xvclJlZiBj
b2xvckNHID0gY2dDb2xvcihjKTsKKyAgICBDSUNvbG9yICpjb2xvckNJID0gW0NJQ29sb3IgY29s
b3JXaXRoQ0dDb2xvcjpjb2xvckNHXTsKKyAgICBDR0NvbG9yUmVsZWFzZShjb2xvckNHKTsKKyAg
ICByZXR1cm4gY29sb3JDSTsKK30KKworc3RhdGljIGlubGluZSBDSVZlY3RvciAqY2lWZWN0b3Io
S0NhbnZhc1BvaW50M0YgcG9pbnQpIHsKKyAgICByZXR1cm4gW0NJVmVjdG9yIHZlY3RvcldpdGhY
OnBvaW50LngoKSBZOnBvaW50LnkoKSBaOnBvaW50LnooKV07Cit9CisKK3N0YXRpYyBpbmxpbmUg
Q0lWZWN0b3IgKmNpVmVjdG9yKFFQb2ludEYgcG9pbnQpIHsKKyAgICByZXR1cm4gW0NJVmVjdG9y
IHZlY3RvcldpdGhYOnBvaW50LngoKSBZOnBvaW50LnkoKV07Cit9CisKIAogS0NhbnZhc0ZpbHRl
clF1YXJ0ejo6S0NhbnZhc0ZpbHRlclF1YXJ0eigpIDogbV9zdG9yZWRDR0NvbnRleHQoMCksIG1f
ZmlsdGVyQ0lDb250ZXh0KDApLCBtX2ZpbHRlckNHTGF5ZXIoMCksIG1faW1hZ2VzQnlOYW1lKDAp
CiB7CkBAIC0yNzQsNyArMjkwLDYgQEAgQ0lJbWFnZSAqS0NhbnZhc0ZpbHRlclF1YXJ0ejo6aW5w
dXRJbWFnZQogI3ByYWdtYSBtYXJrIC0KICNwcmFnbWEgbWFyayBGaWx0ZXIgRWxlbWVudHMKIAot
CiAjZGVmaW5lIEZFX1FVQVJUWl9TRVRVUF9JTlBVVChuYW1lKSBcCiAgICAgQ0lJbWFnZSAqaW5w
dXRJbWFnZSA9IHF1YXJ0ekZpbHRlci0+aW5wdXRJbWFnZSh0aGlzKTsgXAogICAgIEZFX1FVQVJU
Wl9DSEVDS19JTlBVVChpbnB1dEltYWdlKSBcCkBAIC00NzEsMjQgKzQ4NiwyNSBAQCBDSUZpbHRl
ciAqS0NhbnZhc0ZFQ29tcG9zaXRlUXVhcnR6OjpnZXRDCiAJS1dRX0JMT0NLX0VYQ0VQVElPTlMK
IAlzd2l0Y2gob3BlcmF0aW9uKCkpIHsKIAljYXNlIENPX09WRVI6Ci0JCWZpbHRlciA9IFtDSUZp
bHRlciBmaWx0ZXJXaXRoTmFtZTpAIkNJU291cmNlT3ZlckNvbXBvc2l0aW5nIl07Ci0JCWJyZWFr
OworICAgICAgICAgICAgZmlsdGVyID0gW0NJRmlsdGVyIGZpbHRlcldpdGhOYW1lOkAiQ0lTb3Vy
Y2VPdmVyQ29tcG9zaXRpbmciXTsKKyAgICAgICAgICAgIGJyZWFrOwogCWNhc2UgQ09fSU46Ci0J
CWZpbHRlciA9IFtDSUZpbHRlciBmaWx0ZXJXaXRoTmFtZTpAIkNJU291cmNlSW5Db21wb3NpdGlu
ZyJdOwotCQlicmVhazsKKyAgICAgICAgICAgIGZpbHRlciA9IFtDSUZpbHRlciBmaWx0ZXJXaXRo
TmFtZTpAIkNJU291cmNlSW5Db21wb3NpdGluZyJdOworICAgICAgICAgICAgYnJlYWs7CiAJY2Fz
ZSBDT19PVVQ6Ci0JCWZpbHRlciA9IFtDSUZpbHRlciBmaWx0ZXJXaXRoTmFtZTpAIkNJU291cmNl
T3V0Q29tcG9zaXRpbmciXTsKLQkJYnJlYWs7CisgICAgICAgICAgICBmaWx0ZXIgPSBbQ0lGaWx0
ZXIgZmlsdGVyV2l0aE5hbWU6QCJDSVNvdXJjZU91dENvbXBvc2l0aW5nIl07CisgICAgICAgICAg
ICBicmVhazsKIAljYXNlIENPX0FUT1A6Ci0JCWZpbHRlciA9IFtDSUZpbHRlciBmaWx0ZXJXaXRo
TmFtZTpAIkNJU291cmNlQXRvcENvbXBvc2l0aW5nIl07Ci0JCWJyZWFrOworICAgICAgICAgICAg
ZmlsdGVyID0gW0NJRmlsdGVyIGZpbHRlcldpdGhOYW1lOkAiQ0lTb3VyY2VBdG9wQ29tcG9zaXRp
bmciXTsKKyAgICAgICAgICAgIGJyZWFrOwogCWNhc2UgQ09fWE9SOgotCQkvL0ZJWE1FOiBJJ20g
bm90IHN1cmUgdGhpcyBpcyByaWdodC4uLgotCQlmaWx0ZXIgPSBbQ0lGaWx0ZXIgZmlsdGVyV2l0
aE5hbWU6QCJDSUV4Y2x1c2lvbkJsZW5kTW9kZSJdOworICAgICAgICAgICAgLy9GSVhNRTogSSdt
IG5vdCBzdXJlIHRoaXMgaXMgcmlnaHQuLi4KKyAgICAgICAgICAgIGZpbHRlciA9IFtDSUZpbHRl
ciBmaWx0ZXJXaXRoTmFtZTpAIkNJRXhjbHVzaW9uQmxlbmRNb2RlIl07CisgICAgICAgICAgICBi
cmVhazsKIAljYXNlIENPX0FSSVRITUVUSUM6Ci0JCU5TTG9nKEAiV2FybmluZzogYXJpdGhtZXRp
YyBjb21wb3NpdGluZyBtb2RlIG5vdCB5ZXQgc3VwcG9ydGVkIGluIFF1YXJ0ei4iKTsKLQkJLy8g
dGhpcyB3b3VsZCBiZSB3aGVyZSB3ZSB1c2UgdGhlIGsgdmFsdWVzLi4uCi0JCXJldHVybiBuaWw7
CisgICAgICAgICAgICBbV0tBcml0aG1ldGljRmlsdGVyIGNsYXNzXTsKKyAgICAgICAgICAgIGZp
bHRlciA9IFtDSUZpbHRlciBmaWx0ZXJXaXRoTmFtZTpAIldLQXJpdGhtZXRpY0ZpbHRlciJdOwor
ICAgICAgICAgICAgYnJlYWs7CiAJfQogCQogCVtmaWx0ZXIgc2V0RGVmYXVsdHNdOwpAQCAtNDk4
LDEwICs1MTQsMTM3IEBAIENJRmlsdGVyICpLQ2FudmFzRkVDb21wb3NpdGVRdWFydHo6OmdldEMK
IAlGRV9RVUFSVFpfQ0hFQ0tfSU5QVVQoYmFja2dyb3VuZEltYWdlKTsKIAlbZmlsdGVyIHNldFZh
bHVlOmlucHV0SW1hZ2UgZm9yS2V5OkAiaW5wdXRJbWFnZSJdOwogCVtmaWx0ZXIgc2V0VmFsdWU6
YmFja2dyb3VuZEltYWdlIGZvcktleTpAImlucHV0QmFja2dyb3VuZEltYWdlIl07Ci0JCisgICAg
ICAgIC8vRklYTUU6IHRoaXMgc2VlbXMgdWdseQorCWlmIChvcGVyYXRpb24oKSA9PSBDT19BUklU
SE1FVElDKSB7CisgICAgICAgICAgICBbZmlsdGVyIHNldFZhbHVlOltOU051bWJlciBudW1iZXJX
aXRoRmxvYXQ6azEoKV0gZm9yS2V5OkAiaW5wdXRLMSJdOworICAgICAgICAgICAgW2ZpbHRlciBz
ZXRWYWx1ZTpbTlNOdW1iZXIgbnVtYmVyV2l0aEZsb2F0OmsyKCldIGZvcktleTpAImlucHV0SzIi
XTsKKyAgICAgICAgICAgIFtmaWx0ZXIgc2V0VmFsdWU6W05TTnVtYmVyIG51bWJlcldpdGhGbG9h
dDprMygpXSBmb3JLZXk6QCJpbnB1dEszIl07CisgICAgICAgICAgICBbZmlsdGVyIHNldFZhbHVl
OltOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6azQoKV0gZm9yS2V5OkAiaW5wdXRLNCJdOworICAg
ICAgICB9CiAJRkVfUVVBUlRaX09VVFBVVF9SRVRVUk47CiB9CiAKK3N0YXRpYyBpbmxpbmUgQ0lG
aWx0ZXIgKmdldFBvaW50TGlnaHRWZWN0b3JzKENJRmlsdGVyICogbm9ybWFscywgQ0lWZWN0b3Ig
KiBsaWdodFBvc2l0aW9uKQoreworICAgIENJRmlsdGVyICpmaWx0ZXIgPSBuaWw7CisgICAgS1dR
X0JMT0NLX0VYQ0VQVElPTlMKKyAgICBmaWx0ZXIgPSBbQ0lGaWx0ZXIgZmlsdGVyV2l0aE5hbWU6
QCJXS1BvaW50TGlnaHQiXTsKKyAgICBpZiAoIWZpbHRlcikKKyAgICAgICAgcmV0dXJuIG5pbDsK
KyAgICBbZmlsdGVyIHNldERlZmF1bHRzXTsKKyAgICBbZmlsdGVyIHNldFZhbHVlOltub3JtYWxz
IHZhbHVlRm9yS2V5OiBAIm91dHB1dEltYWdlIl0gZm9yS2V5OkAiaW5wdXROb3JtYWxNYXAiXTsK
KyAgICBbZmlsdGVyIHNldFZhbHVlOmxpZ2h0UG9zaXRpb24gZm9yS2V5OkAiaW5wdXRMaWdodFBv
c2l0aW9uIl07ICAgIAorICAgIHJldHVybiBmaWx0ZXI7IAorICAgIEtXUV9VTkJMT0NLX0VYQ0VQ
VElPTlMgCisgICAgcmV0dXJuIG5pbDsKK30KK3N0YXRpYyBDSUZpbHRlciAqZ2V0TGlnaHRWZWN0
b3JzKENJRmlsdGVyICogbm9ybWFscywgY29uc3QgS0NMaWdodFNvdXJjZSAqIGxpZ2h0KQorewor
ICAgIC8vRklYTUU6IHRoZXJlIGhhcyB0byBiZSBhIGJldHRlciB3YXkgb2YgbWFraW5nIHN1cmUg
dGhlc2UgZ2V0IGluaXRpYWxpc2VkCisgICAgW1dLRGlzdGFudExpZ2h0RmlsdGVyIGNsYXNzXTsK
KyAgICBbV0tQb2ludExpZ2h0RmlsdGVyIGNsYXNzXTsKKyAgICBbV0tTcG90TGlnaHRGaWx0ZXIg
Y2xhc3NdOworICAgIAorICAgIENJRmlsdGVyICpmaWx0ZXIgPSBuaWw7CisgICAgS1dRX0JMT0NL
X0VYQ0VQVElPTlMKKyAgICAKKyAgICBzd2l0Y2gobGlnaHQtPnR5cGUoKSkKKyAgICB7CisgICAg
ICAgIGNhc2UgTFNfRElTVEFOVDoKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgS0NEaXN0
YW50TGlnaHRTb3VyY2UgKmRsaWdodCA9IHN0YXRpY19jYXN0PGNvbnN0IEtDRGlzdGFudExpZ2h0
U291cmNlICo+KGxpZ2h0KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZmlsdGVyID0gW0NJ
RmlsdGVyIGZpbHRlcldpdGhOYW1lOkAiV0tEaXN0YW50TGlnaHQiXTsKKyAgICAgICAgICAgIGlm
ICghZmlsdGVyKQorICAgICAgICAgICAgICAgIHJldHVybiBuaWw7CisgICAgICAgICAgICBbZmls
dGVyIHNldERlZmF1bHRzXTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZmxvYXQgYXppbXV0
aCA9IGRsaWdodC0+YXppbXV0aCgpOworICAgICAgICAgICAgZmxvYXQgZWxldmF0aW9uID0gZGxp
Z2h0LT5lbGV2YXRpb24oKTsKKyAgICAgICAgICAgIGF6aW11dGg9ZGVnMnJhZChhemltdXRoKTsK
KyAgICAgICAgICAgIGVsZXZhdGlvbj1kZWcycmFkKGVsZXZhdGlvbik7CisgICAgICAgICAgICBm
bG9hdCBMeCA9IGNvcyhhemltdXRoKSpjb3MoZWxldmF0aW9uKTsKKyAgICAgICAgICAgIGZsb2F0
IEx5ID0gc2luKGF6aW11dGgpKmNvcyhlbGV2YXRpb24pOworICAgICAgICAgICAgZmxvYXQgTHog
PSBzaW4oZWxldmF0aW9uKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgW2ZpbHRlciBzZXRW
YWx1ZTpbbm9ybWFscyB2YWx1ZUZvcktleTogQCJvdXRwdXRJbWFnZSJdIGZvcktleTpAImlucHV0
Tm9ybWFsTWFwIl07CisgICAgICAgICAgICBbZmlsdGVyIHNldFZhbHVlOltDSVZlY3RvciB2ZWN0
b3JXaXRoWDogTHggWTogTHkgWjogTHpdIGZvcktleTpAImlucHV0TGlnaHREaXJlY3Rpb24iXTsK
KyAgICAgICAgICAgIHJldHVybiBmaWx0ZXI7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBMU19Q
T0lOVDoKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgS0NQb2ludExpZ2h0U291cmNlICpw
bGlnaHQgPSBzdGF0aWNfY2FzdDxjb25zdCBLQ1BvaW50TGlnaHRTb3VyY2UgKj4obGlnaHQpOwor
ICAgICAgICAgICAgcmV0dXJuIGdldFBvaW50TGlnaHRWZWN0b3JzKG5vcm1hbHMsIFtDSVZlY3Rv
ciB2ZWN0b3JXaXRoWDpwbGlnaHQtPnBvc2l0aW9uKCkueCgpIFk6cGxpZ2h0LT5wb3NpdGlvbigp
LnkoKSBaOnBsaWdodC0+cG9zaXRpb24oKS56KCldKTsKKyAgICAgICAgfQorICAgICAgICBjYXNl
IExTX1NQT1Q6CisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IEtDU3BvdExpZ2h0U291cmNl
ICpzbGlnaHQgPSBzdGF0aWNfY2FzdDxjb25zdCBLQ1Nwb3RMaWdodFNvdXJjZSAqPihsaWdodCk7
CisgICAgICAgICAgICBmaWx0ZXIgPSBbQ0lGaWx0ZXIgZmlsdGVyV2l0aE5hbWU6QCJXS1Nwb3RM
aWdodCJdOworICAgICAgICAgICAgaWYgKCFmaWx0ZXIpCisgICAgICAgICAgICAgICAgcmV0dXJu
IG5pbDsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgQ0lGaWx0ZXIgKiBwb2ludExpZ2h0Rmls
dGVyID0gZ2V0UG9pbnRMaWdodFZlY3RvcnMobm9ybWFscywgW0NJVmVjdG9yIHZlY3RvcldpdGhY
OnNsaWdodC0+cG9zaXRpb24oKS54KCkgWTpzbGlnaHQtPnBvc2l0aW9uKCkueSgpIFo6c2xpZ2h0
LT5wb3NpdGlvbigpLnooKV0pOworICAgICAgICAgICAgaWYgKCFwb2ludExpZ2h0RmlsdGVyKQor
ICAgICAgICAgICAgICAgIHJldHVybiBuaWw7CisgICAgICAgICAgICBbZmlsdGVyIHNldERlZmF1
bHRzXTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgW2ZpbHRlciBzZXRWYWx1ZTpbcG9pbnRM
aWdodEZpbHRlciB2YWx1ZUZvcktleTogQCJvdXRwdXRJbWFnZSJdIGZvcktleTpAImlucHV0TGln
aHRWZWN0b3JzIl07CisgICAgICAgICAgICBbZmlsdGVyIHNldFZhbHVlOltDSVZlY3RvciB2ZWN0
b3JXaXRoWDpzbGlnaHQtPmRpcmVjdGlvbigpLngoKSBZOnNsaWdodC0+ZGlyZWN0aW9uKCkueSgp
IFo6c2xpZ2h0LT5kaXJlY3Rpb24oKS56KCldIGZvcktleTpAImlucHV0TGlnaHREaXJlY3Rpb24i
XTsKKyAgICAgICAgICAgIFtmaWx0ZXIgc2V0VmFsdWU6W05TTnVtYmVyIG51bWJlcldpdGhGbG9h
dDpzbGlnaHQtPnNwZWN1bGFyRXhwb25lbnQoKV0gZm9yS2V5OkAiaW5wdXRTcGVjdWxhckV4cG9u
ZW50Il07CisgICAgICAgICAgICBbZmlsdGVyIHNldFZhbHVlOltOU051bWJlciBudW1iZXJXaXRo
RmxvYXQ6ZGVnMnJhZChzbGlnaHQtPmxpbWl0aW5nQ29uZUFuZ2xlKCkpXSBmb3JLZXk6QCJpbnB1
dExpbWl0aW5nQ29uZUFuZ2xlIl07CisgICAgICAgICAgICByZXR1cm4gZmlsdGVyOworICAgICAg
ICB9CisgICAgfQorICAgIEtXUV9VTkJMT0NLX0VYQ0VQVElPTlMgCisgICAgcmV0dXJuIG5pbDsK
K30KKworCitzdGF0aWMgQ0lGaWx0ZXIgKmdldE5vcm1hbE1hcChDSUltYWdlICpidW1wTWFwLCBm
bG9hdCBzY2FsZSkKK3sKKyAgICBbV0tOb3JtYWxNYXBGaWx0ZXIgY2xhc3NdOworICAgIENJRmls
dGVyICpmaWx0ZXIgPSBuaWw7CisgICAgS1dRX0JMT0NLX0VYQ0VQVElPTlMKKyAgICBmaWx0ZXIg
PSBbQ0lGaWx0ZXIgZmlsdGVyV2l0aE5hbWU6QCJXS05vcm1hbE1hcCJdOyAgIAorICAgIFtmaWx0
ZXIgc2V0RGVmYXVsdHNdOworICAgIAorICAgIFtmaWx0ZXIgc2V0VmFsdWU6YnVtcE1hcCBmb3JL
ZXk6QCJpbnB1dEltYWdlIl07ICAgIAorICAgIFtmaWx0ZXIgc2V0VmFsdWU6W05TTnVtYmVyIG51
bWJlcldpdGhGbG9hdDpzY2FsZV0gZm9yS2V5OkAiaW5wdXRTdXJmYWNlU2NhbGUiXTsKKyAgICBy
ZXR1cm4gZmlsdGVyOworICAgIEtXUV9VTkJMT0NLX0VYQ0VQVElPTlMgCisgICAgcmV0dXJuIG5p
bDsKK30KKworQ0lGaWx0ZXIgKktDYW52YXNGRURpZmZ1c2VMaWdodGluZ1F1YXJ0ejo6Z2V0Q0lG
aWx0ZXIoS0NhbnZhc0ZpbHRlclF1YXJ0eiAqcXVhcnR6RmlsdGVyKSBjb25zdAoreworICAgIFtX
S0RpZmZ1c2VMaWdodGluZ0ZpbHRlciBjbGFzc107CisgICAgCisgICAgQ0lGaWx0ZXIgKmZpbHRl
ciA9IG5pbDsKKyAgICBLV1FfQkxPQ0tfRVhDRVBUSU9OUworICAgIGZpbHRlciA9IFtDSUZpbHRl
ciBmaWx0ZXJXaXRoTmFtZTpAIldLRGlmZnVzZUxpZ2h0aW5nIl07CisgICAgaWYgKCFmaWx0ZXIp
CisgICAgICAgIHJldHVybiBuaWw7CisgICAgCisgICAgW2ZpbHRlciBzZXREZWZhdWx0c107Cisg
ICAgQ0lGaWx0ZXIgKm5vcm1hbHMgPSBnZXROb3JtYWxNYXAocXVhcnR6RmlsdGVyLT5pbnB1dElt
YWdlKHRoaXMpLCBzdXJmYWNlU2NhbGUoKSk7CisgICAgaWYgKCFub3JtYWxzKSAKKyAgICAgICAg
cmV0dXJuIG5pbDsKKyAgICAKKyAgICBDSUZpbHRlciAqbGlnaHRWZWN0b3JzID0gZ2V0TGlnaHRW
ZWN0b3JzKG5vcm1hbHMsIGxpZ2h0U291cmNlKCkpOworICAgIGlmICghbGlnaHRWZWN0b3JzKSAK
KyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAKKyAgICBbZmlsdGVyIHNldFZhbHVlOltub3JtYWxz
IHZhbHVlRm9yS2V5OiBAIm91dHB1dEltYWdlIl0gZm9yS2V5OkAiaW5wdXROb3JtYWxNYXAiXTsK
KyAgICBbZmlsdGVyIHNldFZhbHVlOltsaWdodFZlY3RvcnMgdmFsdWVGb3JLZXk6IEAib3V0cHV0
SW1hZ2UiXSBmb3JLZXk6QCJpbnB1dExpZ2h0VmVjdG9ycyJdOworICAgIFtmaWx0ZXIgc2V0VmFs
dWU6Y2lDb2xvcihsaWdodGluZ0NvbG9yKCkpIGZvcktleTpAImlucHV0TGlnaHRpbmdDb2xvciJd
OworICAgIFtmaWx0ZXIgc2V0VmFsdWU6W05TTnVtYmVyIG51bWJlcldpdGhGbG9hdDpzdXJmYWNl
U2NhbGUoKV0gZm9yS2V5OkAiaW5wdXRTdXJmYWNlU2NhbGUiXTsKKyAgICBbZmlsdGVyIHNldFZh
bHVlOltOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6ZGlmZnVzZUNvbnN0YW50KCldIGZvcktleTpA
ImlucHV0RGlmZnVzZUNvbnN0YW50Il07CisgICAgW2ZpbHRlciBzZXRWYWx1ZTpbTlNOdW1iZXIg
bnVtYmVyV2l0aEZsb2F0Omtlcm5lbFVuaXRMZW5ndGhYKCldIGZvcktleTpAImlucHV0S2VybmVs
VW5pdExlbmd0aFgiXTsKKyAgICBbZmlsdGVyIHNldFZhbHVlOltOU051bWJlciBudW1iZXJXaXRo
RmxvYXQ6a2VybmVsVW5pdExlbmd0aFkoKV0gZm9yS2V5OkAiaW5wdXRLZXJuZWxVbml0TGVuZ3Ro
WSJdOworICAgIAorICAgIEZFX1FVQVJUWl9PVVRQVVRfUkVUVVJOOworfQorCiBDSUZpbHRlciAq
S0NhbnZhc0ZFRmxvb2RRdWFydHo6OmdldENJRmlsdGVyKEtDYW52YXNGaWx0ZXJRdWFydHogKnF1
YXJ0ekZpbHRlcikgY29uc3QKIHsKIAlDSUZpbHRlciAqZmlsdGVyID0gbmlsOwpAQCAtNTc5LDYg
KzcyMiwzNCBAQCBDSUZpbHRlciAqS0NhbnZhc0ZFT2Zmc2V0UXVhcnR6OjpnZXRDSUZpCiAJRkVf
UVVBUlRaX09VVFBVVF9SRVRVUk47CiB9CiAKK0NJRmlsdGVyICpLQ2FudmFzRkVTcGVjdWxhckxp
Z2h0aW5nUXVhcnR6OjpnZXRDSUZpbHRlcihLQ2FudmFzRmlsdGVyUXVhcnR6ICpxdWFydHpGaWx0
ZXIpIGNvbnN0Cit7CisgICAgW1dLU3BlY3VsYXJMaWdodGluZ0ZpbHRlciBjbGFzc107CisgICAg
CisgICAgQ0lGaWx0ZXIgKmZpbHRlciA9IG5pbDsKKyAgICBLV1FfQkxPQ0tfRVhDRVBUSU9OUwor
ICAgIGZpbHRlciA9IFtDSUZpbHRlciBmaWx0ZXJXaXRoTmFtZTpAIldLU3BlY3VsYXJMaWdodGlu
ZyJdOworICAgIFtmaWx0ZXIgc2V0RGVmYXVsdHNdOworICAgIENJRmlsdGVyICpub3JtYWxzID0g
Z2V0Tm9ybWFsTWFwKHF1YXJ0ekZpbHRlci0+aW5wdXRJbWFnZSh0aGlzKSwgc3VyZmFjZVNjYWxl
KCkpOworICAgIGlmICghbm9ybWFscykgCisgICAgICAgIHJldHVybiBuaWw7CisgICAgCisgICAg
Q0lGaWx0ZXIgKmxpZ2h0VmVjdG9ycyA9IGdldExpZ2h0VmVjdG9ycyhub3JtYWxzLCBsaWdodFNv
dXJjZSgpKTsKKyAgICBpZiAoIWxpZ2h0VmVjdG9ycykgCisgICAgICAgIHJldHVybiBuaWw7Cisg
ICAgW2ZpbHRlciBzZXRWYWx1ZTpbbm9ybWFscyB2YWx1ZUZvcktleTogQCJvdXRwdXRJbWFnZSJd
IGZvcktleTpAImlucHV0Tm9ybWFsTWFwIl07CisgICAgW2ZpbHRlciBzZXRWYWx1ZTpbbGlnaHRW
ZWN0b3JzIHZhbHVlRm9yS2V5OiBAIm91dHB1dEltYWdlIl0gZm9yS2V5OkAiaW5wdXRMaWdodFZl
Y3RvcnMiXTsKKyAgICBbZmlsdGVyIHNldFZhbHVlOmNpQ29sb3IobGlnaHRpbmdDb2xvcigpKSBm
b3JLZXk6QCJpbnB1dExpZ2h0aW5nQ29sb3IiXTsKKyAgICBbZmlsdGVyIHNldFZhbHVlOltOU051
bWJlciBudW1iZXJXaXRoRmxvYXQ6c3VyZmFjZVNjYWxlKCldIGZvcktleTpAImlucHV0U3VyZmFj
ZVNjYWxlIl07CisgICAgW2ZpbHRlciBzZXRWYWx1ZTpbTlNOdW1iZXIgbnVtYmVyV2l0aEZsb2F0
OnNwZWN1bGFyQ29uc3RhbnQoKV0gZm9yS2V5OkAiaW5wdXRTcGVjdWxhckNvbnN0YW50Il07Cisg
ICAgW2ZpbHRlciBzZXRWYWx1ZTpbTlNOdW1iZXIgbnVtYmVyV2l0aEZsb2F0OnNwZWN1bGFyRXhw
b25lbnQoKV0gZm9yS2V5OkAiaW5wdXRTcGVjdWxhckV4cG9uZW50Il07CisgICAgW2ZpbHRlciBz
ZXRWYWx1ZTpbTlNOdW1iZXIgbnVtYmVyV2l0aEZsb2F0Omtlcm5lbFVuaXRMZW5ndGhYKCldIGZv
cktleTpAImlucHV0S2VybmVsVW5pdExlbmd0aFgiXTsKKyAgICBbZmlsdGVyIHNldFZhbHVlOltO
U051bWJlciBudW1iZXJXaXRoRmxvYXQ6a2VybmVsVW5pdExlbmd0aFkoKV0gZm9yS2V5OkAiaW5w
dXRLZXJuZWxVbml0TGVuZ3RoWSJdOworICAgIAorICAgIEZFX1FVQVJUWl9PVVRQVVRfUkVUVVJO
OworfQorCisKIENJRmlsdGVyICpLQ2FudmFzRkVUaWxlUXVhcnR6OjpnZXRDSUZpbHRlcihLQ2Fu
dmFzRmlsdGVyUXVhcnR6ICpxdWFydHpGaWx0ZXIpIGNvbnN0CiB7CiAJRkVfUVVBUlRaX1NFVFVQ
X0lOUFVUKEAiQ0lBZmZpbmVUaWxlIik7CkBAIC01ODYsNiArNzU3LDMgQEAgQ0lGaWx0ZXIgKktD
YW52YXNGRVRpbGVRdWFydHo6OmdldENJRmlsdAogCUZFX1FVQVJUWl9PVVRQVVRfUkVUVVJOOwog
fQogCi0KLQotCkluZGV4OiBrY2FudmFzL2RldmljZS9xdWFydHovS1JlbmRlcmluZ0RldmljZVF1
YXJ0ei5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rY2FudmFz
L2RldmljZS9xdWFydHovS1JlbmRlcmluZ0RldmljZVF1YXJ0ei5tbSx2CnJldHJpZXZpbmcgcmV2
aXNpb24gMS40CmRpZmYgLXAgLXUgLXIxLjQga2NhbnZhcy9kZXZpY2UvcXVhcnR6L0tSZW5kZXJp
bmdEZXZpY2VRdWFydHoubW0KLS0tIGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9LUmVuZGVyaW5nRGV2
aWNlUXVhcnR6Lm1tCTUgT2N0IDIwMDUgMDU6MzY6NTIgLTAwMDAJMS40CisrKyBrY2FudmFzL2Rl
dmljZS9xdWFydHovS1JlbmRlcmluZ0RldmljZVF1YXJ0ei5tbQkyMCBOb3YgMjAwNSAxMzoyNTo1
MCAtMDAwMApAQCAtMjQzLDE1ICsyNDMsMTcgQEAgS0NhbnZhc0ZpbHRlckVmZmVjdCAqS1JlbmRl
cmluZ0RldmljZVF1YQogewogCXN3aXRjaCh0eXBlKQogCXsKLS8vCWNhc2UgRkVfRElTVEFOVF9M
SUdIVDogCi0vLwljYXNlIEZFX1BPSU5UX0xJR0hUOiAKLS8vCWNhc2UgRkVfU1BPVF9MSUdIVDog
CisgICAgICAgIC8qIExpZ2h0IHNvdXJjZXMgYXJlIGNvbnRhaW5lZCBieSB0aGUgZGlmZnVzZS9z
cGVjdWxhciBsaWdodCBibG9ja3MgCisgICAgICAgIGNhc2UgRkVfRElTVEFOVF9MSUdIVDogCisg
ICAgICAgIGNhc2UgRkVfUE9JTlRfTElHSFQ6IAorICAgICAgICBjYXNlIEZFX1NQT1RfTElHSFQ6
IAorICAgICAgICAqLwogCWNhc2UgRkVfQkxFTkQ6IHJldHVybiBuZXcgS0NhbnZhc0ZFQmxlbmRR
dWFydHooKTsKIAljYXNlIEZFX0NPTE9SX01BVFJJWDogcmV0dXJuIG5ldyBLQ2FudmFzRkVDb2xv
ck1hdHJpeFF1YXJ0eigpOwogLy8JY2FzZSBGRV9DT01QT05FTlRfVFJBTlNGRVI6IAogCWNhc2Ug
RkVfQ09NUE9TSVRFOiByZXR1cm4gbmV3IEtDYW52YXNGRUNvbXBvc2l0ZVF1YXJ0eigpOwogLy8J
Y2FzZSBGRV9DT05WT0xWRV9NQVRSSVg6IAotLy8JY2FzZSBGRV9ESUZGVVNFX0xJR0hUSU5HOiAK
KwljYXNlIEZFX0RJRkZVU0VfTElHSFRJTkc6IHJldHVybiBuZXcgS0NhbnZhc0ZFRGlmZnVzZUxp
Z2h0aW5nUXVhcnR6KCk7CiAvLwljYXNlIEZFX0RJU1BMQUNFTUVOVF9NQVA6IAogCWNhc2UgRkVf
RkxPT0Q6IHJldHVybiBuZXcgS0NhbnZhc0ZFRmxvb2RRdWFydHooKTsKIAljYXNlIEZFX0dBVVNT
SUFOX0JMVVI6IHJldHVybiBuZXcgS0NhbnZhc0ZFR2F1c3NpYW5CbHVyUXVhcnR6KCk7CkBAIC0y
NTksNyArMjYxLDcgQEAgS0NhbnZhc0ZpbHRlckVmZmVjdCAqS1JlbmRlcmluZ0RldmljZVF1YQog
CWNhc2UgRkVfTUVSR0U6IHJldHVybiBuZXcgS0NhbnZhc0ZFTWVyZ2VRdWFydHooKTsKIC8vCWNh
c2UgRkVfTU9SUEhPTE9HWTogCiAJY2FzZSBGRV9PRkZTRVQ6IHJldHVybiBuZXcgS0NhbnZhc0ZF
T2Zmc2V0UXVhcnR6KCk7Ci0vLwljYXNlIEZFX1NQRUNVTEFSX0xJR0hUSU5HOiAKKwljYXNlIEZF
X1NQRUNVTEFSX0xJR0hUSU5HOiByZXR1cm4gbmV3IEtDYW52YXNGRVNwZWN1bGFyTGlnaHRpbmdR
dWFydHooKTsKIAljYXNlIEZFX1RJTEU6IHJldHVybiBuZXcgS0NhbnZhc0ZFVGlsZVF1YXJ0eigp
OwogLy8JY2FzZSBGRV9UVVJCVUxFTkNFOiAKIAlkZWZhdWx0OgpJbmRleDoga3N2ZzIvU1ZHQW5p
bWF0ZWRDb2xvckltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtTnB1IGtzdmcyL1NWR0FuaW1hdGVk
Q29sb3JJbXBsLmNwcAotLS0ga3N2ZzIvU1ZHQW5pbWF0ZWRDb2xvckltcGwuY3BwCTEgSmFuIDE5
NzAgMDA6MDA6MDAgLTAwMDAKKysrIGtzdmcyL1NWR0FuaW1hdGVkQ29sb3JJbXBsLmNwcAkyMCBO
b3YgMjAwNSAxMzowNDoyMSAtMDAwMApAQCAtMCwwICsxLDM1IEBACisvKgorICogIFNWR0FuaW1h
dGVkQ29sb3JJbXBsLmNwcAorICogIFdlYkNvcmUKKyAqCisgKiAgQ3JlYXRlZCBieSBPbGl2ZXIg
b24gNi8xMS8wNS4KKyAqICBDb3B5cmlnaHQgMjAwNSBPbGl2ZXIgSHVudC4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNWR0Fu
aW1hdGVkQ29sb3JJbXBsLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBLU1ZHOworCitTVkdBbmltYXRl
ZENvbG9ySW1wbDo6U1ZHQW5pbWF0ZWRDb2xvckltcGwoY29uc3QgU1ZHU3R5bGVkRWxlbWVudElt
cGwgKmNvbnRleHQpCis6IFNWR0FuaW1hdGVkVGVtcGxhdGU8U1ZHQ29sb3JJbXBsPihjb250ZXh0
KQoreworfQorCitTVkdBbmltYXRlZENvbG9ySW1wbDo6flNWR0FuaW1hdGVkQ29sb3JJbXBsKCkK
K3sKK30KKworU1ZHQ29sb3JJbXBsICpTVkdBbmltYXRlZENvbG9ySW1wbDo6Y3JlYXRlKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbmV3IFNWR0NvbG9ySW1wbCgpOworfQorCit2b2lkIFNWR0FuaW1h
dGVkQ29sb3JJbXBsOjphc3NpZ24oU1ZHQ29sb3JJbXBsICpzcmMsIFNWR0NvbG9ySW1wbCAqZHN0
KSBjb25zdAoreworICAgIGlmICghc3JjIHx8ICFkc3QpCisgICAgICAgIHJldHVybjsKKyAgICBk
c3QtPnNldENzc1RleHQoc3JjLT5jc3NUZXh0KCkpOworfQorCkluZGV4OiBrc3ZnMi9TVkdBbmlt
YXRlZENvbG9ySW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtTnB1IGtzdmcyL1NWR0FuaW1hdGVkQ29s
b3JJbXBsLmgKLS0tIGtzdmcyL1NWR0FuaW1hdGVkQ29sb3JJbXBsLmgJMSBKYW4gMTk3MCAwMDow
MDowMCAtMDAwMAorKysga3N2ZzIvU1ZHQW5pbWF0ZWRDb2xvckltcGwuaAkxMSBOb3YgMjAwNSAy
MzozNjowMCAtMDAwMApAQCAtMCwwICsxLDMwIEBACisvKgorICogIFNWR0FuaW1hdGVkQ29sb3JJ
bXBsLmgKKyAqICBXZWJDb3JlCisgKgorICogIENyZWF0ZWQgYnkgT2xpdmVyIG9uIDYvMTEvMDUu
CisgKiAgQ29weXJpZ2h0IDIwMDUgT2xpdmVyIEh1bnQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICovCisKKyNpZm5kZWYgS1NWR19TVkdBbmltYXRlZENvbG9ySW1wbF9ICisjZGVmaW5lIEtT
VkdfU1ZHQW5pbWF0ZWRDb2xvckltcGxfSAorCisjaW5jbHVkZSAiU1ZHQ29sb3JJbXBsLmgiCisj
aW5jbHVkZSAiU1ZHQW5pbWF0ZWRUZW1wbGF0ZS5oIgorCituYW1lc3BhY2UgS1NWRworeworICAg
IGNsYXNzIFNWR0FuaW1hdGVkQ29sb3JJbXBsIDogcHVibGljIFNWR0FuaW1hdGVkVGVtcGxhdGU8
U1ZHQ29sb3JJbXBsPgorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFNWR0FuaW1hdGVkQ29s
b3JJbXBsKGNvbnN0IFNWR1N0eWxlZEVsZW1lbnRJbXBsICpjb250ZXh0KTsKKyAgICAgICAgdmly
dHVhbCB+U1ZHQW5pbWF0ZWRDb2xvckltcGwoKTsKKyAgICAKKyAgICBwcm90ZWN0ZWQ6CisgICAg
ICAgIHZpcnR1YWwgU1ZHQ29sb3JJbXBsICpjcmVhdGUoKSBjb25zdDsKKyAgICAgICAgdmlydHVh
bCB2b2lkIGFzc2lnbihTVkdDb2xvckltcGwgKnNyYywgU1ZHQ29sb3JJbXBsICpkc3QpIGNvbnN0
OworICAgIH07Cit9OworCisjZW5kaWYKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCkluZGV4
OiBrc3ZnMi9TVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnRJbXBsLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CmRp
ZmYgLU5wdSBrc3ZnMi9TVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnRJbXBsLmNwcAotLS0ga3N2
ZzIvU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50SW1wbC5jcHAJMSBKYW4gMTk3MCAwMDowMDow
MCAtMDAwMAorKysga3N2ZzIvU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50SW1wbC5jcHAJMjAg
Tm92IDIwMDUgMTM6MDY6NDQgLTAwMDAKQEAgLTAsMCArMSwyMDEgQEAKKy8qCisgQ29weXJpZ2h0
IChDKSAyMDA1IE9saXZlciBIdW50Li4uCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgPHFzdHJpbmdsaXN0Lmg+CisKKyNpbmNsdWRlIDxrZG9tL2NvcmUvQXR0ckltcGwuaD4K
KworI2luY2x1ZGUgPGtjYW52YXMvS0NhbnZhcy5oPmlmICgKKyNpbmNsdWRlIDxrY2FudmFzL0tD
YW52YXNSZWdpc3RyeS5oPgorI2luY2x1ZGUgPGtjYW52YXMvS0NhbnZhc0ZpbHRlcnMuaD4KKyNp
bmNsdWRlIDxrY2FudmFzL2RldmljZS9LUmVuZGVyaW5nRGV2aWNlLmg+CisKKyNpbmNsdWRlICJz
dmdhdHRycy5oIgorI2luY2x1ZGUgIlNWR0hlbHBlci5oIgorI2luY2x1ZGUgIlNWR1JlbmRlclN0
eWxlLmgiCisjaW5jbHVkZSAiU1ZHQW5pbWF0ZWRDb2xvckltcGwuaCIKKyNpbmNsdWRlICJTVkdB
bmltYXRlZE51bWJlckltcGwuaCIKKyNpbmNsdWRlICJTVkdBbmltYXRlZFN0cmluZ0ltcGwuaCIK
KyNpbmNsdWRlICJTVkdGRUxpZ2h0RWxlbWVudEltcGwuaCIKKyNpbmNsdWRlICJTVkdET01JbXBs
ZW1lbnRhdGlvbkltcGwuaCIKKyNpbmNsdWRlICJTVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnRJ
bXBsLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBLU1ZHOworCitTVkdGRURpZmZ1c2VMaWdodGluZ0Vs
ZW1lbnRJbXBsOjpTVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnRJbXBsKEtET006OkRvY3VtZW50
UHRyICpkb2MsIEtET006Ok5vZGVJbXBsOjpJZCBpZCwgS0RPTTo6RE9NU3RyaW5nSW1wbCAqcHJl
Zml4KSA6IAorU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzSW1wbChkb2MsIGlk
LCBwcmVmaXgpCit7CisgICAgbV9kaWZmdXNlQ29uc3RhbnQgPSAwOworICAgIG1fc3VyZmFjZVNj
YWxlID0gMDsKKyAgICBtX2ZpbHRlckVmZmVjdCA9IDA7CisgICAgbV9saWdodGluZ0NvbG9yID0g
MDsKKyAgICBtX2tlcm5lbFVuaXRMZW5ndGhYID0gMDsKKyAgICBtX2tlcm5lbFVuaXRMZW5ndGhZ
ID0gMDsKKyAgICBtX2luMSA9IDA7Cit9CisKK1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudElt
cGw6On5TVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnRJbXBsKCkKK3sKKyAgICBpZiAobV9saWdo
dGluZ0NvbG9yKQorICAgICAgICBtX2xpZ2h0aW5nQ29sb3ItPmRlcmVmKCk7CisgICAgaWYgKG1f
aW4xKQorICAgICAgICBtX2luMS0+ZGVyZWYoKTsKKyAgICBpZiAobV9kaWZmdXNlQ29uc3RhbnQp
CisgICAgICAgIG1fZGlmZnVzZUNvbnN0YW50LT5kZXJlZigpOworICAgIGlmIChtX3N1cmZhY2VT
Y2FsZSkKKyAgICAgICAgbV9zdXJmYWNlU2NhbGUtPmRlcmVmKCk7CisgICAgaWYgKG1fa2VybmVs
VW5pdExlbmd0aFgpCisgICAgICAgIG1fa2VybmVsVW5pdExlbmd0aFgtPmRlcmVmKCk7CisgICAg
aWYgKG1fa2VybmVsVW5pdExlbmd0aFkpCisgICAgICAgIG1fa2VybmVsVW5pdExlbmd0aFktPmRl
cmVmKCk7Cit9CisKK1NWR0FuaW1hdGVkU3RyaW5nSW1wbCAqU1ZHRkVEaWZmdXNlTGlnaHRpbmdF
bGVtZW50SW1wbDo6aW4xKCkgY29uc3QKK3sKKyAgICBTVkdTdHlsZWRFbGVtZW50SW1wbCAqZHVt
bXkgPSAwOworICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZFN0cmluZ0ltcGw+KG1f
aW4xLCBkdW1teSk7Cit9CisKK1NWR0FuaW1hdGVkTnVtYmVySW1wbCAqU1ZHRkVEaWZmdXNlTGln
aHRpbmdFbGVtZW50SW1wbDo6ZGlmZnVzZUNvbnN0YW50KCkgY29uc3QKK3sKKyAgICBTVkdTdHls
ZWRFbGVtZW50SW1wbCAqZHVtbXkgPSAwOworICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmlt
YXRlZE51bWJlckltcGw+KG1fZGlmZnVzZUNvbnN0YW50LCBkdW1teSk7Cit9CisKK1NWR0FuaW1h
dGVkTnVtYmVySW1wbCAqU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50SW1wbDo6c3VyZmFjZVNj
YWxlKCkgY29uc3QKK3sKKyAgICBTVkdTdHlsZWRFbGVtZW50SW1wbCAqZHVtbXkgPSAwOworICAg
IHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZE51bWJlckltcGw+KG1fc3VyZmFjZVNjYWxl
LCBkdW1teSk7Cit9CisKK1NWR0FuaW1hdGVkTnVtYmVySW1wbCAqU1ZHRkVEaWZmdXNlTGlnaHRp
bmdFbGVtZW50SW1wbDo6a2VybmVsVW5pdExlbmd0aFgoKSBjb25zdAoreworICAgIFNWR1N0eWxl
ZEVsZW1lbnRJbXBsICpkdW1teSA9IDA7CisgICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1h
dGVkTnVtYmVySW1wbD4obV9rZXJuZWxVbml0TGVuZ3RoWCwgZHVtbXkpOworfQorCitTVkdBbmlt
YXRlZE51bWJlckltcGwgKlNWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudEltcGw6Omtlcm5lbFVu
aXRMZW5ndGhZKCkgY29uc3QKK3sKKyAgICBTVkdTdHlsZWRFbGVtZW50SW1wbCAqZHVtbXkgPSAw
OworICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZE51bWJlckltcGw+KG1fa2VybmVs
VW5pdExlbmd0aFksIGR1bW15KTsKK30KKworU1ZHQW5pbWF0ZWRDb2xvckltcGwgKlNWR0ZFRGlm
ZnVzZUxpZ2h0aW5nRWxlbWVudEltcGw6OmxpZ2h0aW5nQ29sb3IoKSBjb25zdAoreworICAgIFNW
R1N0eWxlZEVsZW1lbnRJbXBsICpkdW1teSA9IDA7CisgICAgcmV0dXJuIGxhenlfY3JlYXRlPFNW
R0FuaW1hdGVkQ29sb3JJbXBsPihtX2xpZ2h0aW5nQ29sb3IsIGR1bW15KTsKK30KKwordm9pZCBT
VkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnRJbXBsOjpwYXJzZUF0dHJpYnV0ZShLRE9NOjpBdHRy
aWJ1dGVJbXBsICphdHRyKQoreworICAgIGludCBpZCA9IChhdHRyLT5pZCgpICYgTm9kZUltcGxf
SWRMb2NhbE1hc2spOworICAgIEtET006OkRPTVN0cmluZyB2YWx1ZShhdHRyLT52YWx1ZSgpKTsK
KworICAgIHN3aXRjaChpZCkKKyAgICB7CisgICAgICAgIGNhc2UgQVRUUl9JTjoKKyAgICAgICAg
ICAgIGluMSgpLT5zZXRCYXNlVmFsKHZhbHVlLmhhbmRsZSgpKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIEFUVFJfU1VSRkFDRVNDQUxFOgorICAgICAgICAgICAgc3VyZmFjZVNj
YWxlKCktPnNldEJhc2VWYWwodmFsdWUuc3RyaW5nKCkudG9Eb3VibGUoKSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBBVFRSX0RJRkZVU0VDT05TVEFOVDoKKyAgICAgICAgICAg
IGRpZmZ1c2VDb25zdGFudCgpLT5zZXRCYXNlVmFsKHZhbHVlLnN0cmluZygpLnRvRG91YmxlKCkp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQVRUUl9LRVJORUxVTklUTEVOR1RI
OgorICAgICAgICB7CisgICAgICAgICAgICBRU3RyaW5nTGlzdCBudW1iZXJzID0gUVN0cmluZ0xp
c3Q6OnNwbGl0KCcgJywgdmFsdWUuc3RyaW5nKCkpOworICAgICAgICAgICAga2VybmVsVW5pdExl
bmd0aFgoKS0+c2V0QmFzZVZhbChudW1iZXJzWzBdLnRvRG91YmxlKCkpOworICAgICAgICAgICAg
aWYgKG51bWJlcnMuY291bnQoKSA9PSAxKQorICAgICAgICAgICAgICAgIGtlcm5lbFVuaXRMZW5n
dGhZKCktPnNldEJhc2VWYWwobnVtYmVyc1swXS50b0RvdWJsZSgpKTsKKyAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICBrZXJuZWxVbml0TGVuZ3RoWSgpLT5zZXRCYXNlVmFsKG51bWJl
cnNbMV0udG9Eb3VibGUoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgICAgIGNhc2UgQVRUUl9MSUdIVElOR19DT0xPUjoKKyAgICAgICAgICAgIC8v
RklYTUUgdGhpcyBpcyBiYWQsIHBvdGVudGlhbCBtZW1vcnkgbGVhaworICAgICAgICAgICAgbGln
aHRpbmdDb2xvcigpLT5zZXRCYXNlVmFsKG5ldyBTVkdDb2xvckltcGwodmFsdWUuaGFuZGxlKCkp
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgU1ZH
RmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzSW1wbDo6cGFyc2VBdHRyaWJ1dGUoYXR0
cik7CisgICAgfQorfQorCitLQ2FudmFzSXRlbSAqU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50
SW1wbDo6Y3JlYXRlQ2FudmFzSXRlbShLQ2FudmFzICpjYW52YXMsIEtSZW5kZXJpbmdTdHlsZSAq
c3R5bGUpIGNvbnN0Cit7CisgICAgbV9maWx0ZXJFZmZlY3QgPSBzdGF0aWNfY2FzdDxLQ2FudmFz
RkVEaWZmdXNlTGlnaHRpbmcgKj4oY2FudmFzLT5yZW5kZXJpbmdEZXZpY2UoKS0+Y3JlYXRlRmls
dGVyRWZmZWN0KEZFX0RJRkZVU0VfTElHSFRJTkcpKTsKKyAgICBtX2ZpbHRlckVmZmVjdC0+c2V0
SW4oS0RPTTo6RE9NU3RyaW5nKGluMSgpLT5iYXNlVmFsKCkpLnN0cmluZygpKTsKKyAgICBzZXRT
dGFuZGFyZEF0dHJpYnV0ZXMobV9maWx0ZXJFZmZlY3QpOworICAgIG1fZmlsdGVyRWZmZWN0LT5z
ZXREaWZmdXNlQ29uc3RhbnQoKGRpZmZ1c2VDb25zdGFudCgpLT5iYXNlVmFsKCkpKTsKKyAgICBt
X2ZpbHRlckVmZmVjdC0+c2V0U3VyZmFjZVNjYWxlKChzdXJmYWNlU2NhbGUoKS0+YmFzZVZhbCgp
KSk7CisgICAgbV9maWx0ZXJFZmZlY3QtPnNldEtlcm5lbFVuaXRMZW5ndGhYKChrZXJuZWxVbml0
TGVuZ3RoWCgpLT5iYXNlVmFsKCkpKTsKKyAgICBtX2ZpbHRlckVmZmVjdC0+c2V0S2VybmVsVW5p
dExlbmd0aFkoKGtlcm5lbFVuaXRMZW5ndGhZKCktPmJhc2VWYWwoKSkpOworICAgIG1fZmlsdGVy
RWZmZWN0LT5zZXRMaWdodGluZ0NvbG9yKGxpZ2h0aW5nQ29sb3IoKS0+YmFzZVZhbCgpLT5jb2xv
cigpKTsKKyAgICB1cGRhdGVMaWdodHMoKTsKKyAgICByZXR1cm4gMDsKK30KKworS0NhbnZhc0Zp
bHRlckVmZmVjdCAqU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50SW1wbDo6ZmlsdGVyRWZmZWN0
KCkgY29uc3QKK3sKKyAgICB1cGRhdGVMaWdodHMoKTsKKyAgICByZXR1cm4gbV9maWx0ZXJFZmZl
Y3Q7Cit9CisKKy8vRklYTUU6IGhlcmUgYmUgZHJhZ29ucworc3RhdGljIEtDYW52YXNQb2ludDNG
IG1ha2VQb2ludChmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB6KQoreworICAgIEtDYW52YXNQb2lu
dDNGIHJlczsKKyAgICByZXMuc2V0WCh4KTsKKyAgICByZXMuc2V0WSh5KTsKKyAgICByZXMuc2V0
Wih6KTsKKyAgICByZXR1cm4gcmVzOworfQorCitzdGF0aWMgdm9pZCBub3JtYWxpc2UoS0NhbnZh
c1BvaW50M0YgJiB2YWwpCit7CisgICAgZmxvYXQgbGVuZ3RoID0gdmFsLngoKSp2YWwueCgpK3Zh
bC55KCkqdmFsLnkoKSt2YWwueigpKnZhbC56KCk7CisgICAgbGVuZ3RoID0gc3FydChsZW5ndGgp
OworICAgIHZhbC5zZXRYKHZhbC54KCkvbGVuZ3RoKTsKKyAgICB2YWwuc2V0WSh2YWwueSgpL2xl
bmd0aCk7CisgICAgdmFsLnNldFoodmFsLnooKS9sZW5ndGgpOworfQorCit2b2lkIFNWR0ZFRGlm
ZnVzZUxpZ2h0aW5nRWxlbWVudEltcGw6OnVwZGF0ZUxpZ2h0cygpIGNvbnN0Cit7CisgICAgaWYg
KCFtX2ZpbHRlckVmZmVjdCkKKyAgICAgICAgcmV0dXJuOworICAgIEtET006Ok5vZGVJbXBsICpu
ID0gZmlyc3RDaGlsZCgpOworICAgIGlmICghbikgcmV0dXJuOworICAgIEtDTGlnaHRTb3VyY2Ug
KiBsaWdodCA9IDA7CisgICAgaWYgKG4tPmlkKCkgPT0gSURfRkVESVNUQU5UTElHSFQpCisgICAg
eyAgICAgIAorICAgICAgICBTVkdGRUxpZ2h0RWxlbWVudEltcGwgKmxpZ2h0Tm9kZSA9IHN0YXRp
Y19jYXN0PFNWR0ZFTGlnaHRFbGVtZW50SW1wbCAqPihuKTsgIAorICAgICAgICBsaWdodCA9IG5l
dyBLQ0Rpc3RhbnRMaWdodFNvdXJjZShsaWdodE5vZGUtPmF6aW11dGgoKS0+YmFzZVZhbCgpLCBs
aWdodE5vZGUtPmVsZXZhdGlvbigpLT5iYXNlVmFsKCkpOworICAgIH0KKyAgICBlbHNlIGlmIChu
LT5pZCgpID09IElEX0ZFUE9JTlRMSUdIVCkKKyAgICB7CisgICAgICAgIFNWR0ZFTGlnaHRFbGVt
ZW50SW1wbCAqbGlnaHROb2RlID0gc3RhdGljX2Nhc3Q8U1ZHRkVMaWdodEVsZW1lbnRJbXBsICo+
KG4pOyAgCisgICAgICAgIEtDYW52YXNQb2ludDNGIHBvcyA9IG1ha2VQb2ludChsaWdodE5vZGUt
PngoKS0+YmFzZVZhbCgpLCBsaWdodE5vZGUtPnkoKS0+YmFzZVZhbCgpLCBsaWdodE5vZGUtPnoo
KS0+YmFzZVZhbCgpKTsKKyAgICAgICAgbGlnaHQgPSBuZXcgS0NQb2ludExpZ2h0U291cmNlKHBv
cyk7CisgICAgfQorICAgIGVsc2UgaWYgKG4tPmlkKCkgPT0gSURfRkVTUE9UTElHSFQpCisgICAg
eworICAgICAgICBTVkdGRUxpZ2h0RWxlbWVudEltcGwgKmxpZ2h0Tm9kZSA9IHN0YXRpY19jYXN0
PFNWR0ZFTGlnaHRFbGVtZW50SW1wbCAqPihuKTsgIAorICAgICAgICBLQ2FudmFzUG9pbnQzRiBw
b3MgPSBtYWtlUG9pbnQobGlnaHROb2RlLT54KCktPmJhc2VWYWwoKSwgbGlnaHROb2RlLT55KCkt
PmJhc2VWYWwoKSwgbGlnaHROb2RlLT56KCktPmJhc2VWYWwoKSk7CisgICAgICAgIC8vY29udmVy
dCBsb29rQXQgdG8gYSBkaXJlY3Rpb24KKyAgICAgICAgS0NhbnZhc1BvaW50M0YgZGlyZWN0aW9u
ID0gbWFrZVBvaW50KGxpZ2h0Tm9kZS0+cG9pbnRzQXRYKCktPmJhc2VWYWwoKS1wb3MueCgpLCAK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWdodE5vZGUtPnBvaW50
c0F0WSgpLT5iYXNlVmFsKCktcG9zLnkoKSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbGlnaHROb2RlLT5wb2ludHNBdFooKS0+YmFzZVZhbCgpLXBvcy56KCkpOwor
ICAgICAgICBub3JtYWxpc2UoZGlyZWN0aW9uKTsKKyAgICAgICAgbGlnaHQgPSBuZXcgS0NTcG90
TGlnaHRTb3VyY2UocG9zLCBkaXJlY3Rpb24sIGxpZ2h0Tm9kZS0+c3BlY3VsYXJFeHBvbmVudCgp
LT5iYXNlVmFsKCksIGxpZ2h0Tm9kZS0+bGltaXRpbmdDb25lQW5nbGUoKS0+YmFzZVZhbCgpKTsK
KyAgICB9CisgICAgbV9maWx0ZXJFZmZlY3QtPnNldExpZ2h0U291cmNlKGxpZ2h0KTsKK30KKwor
dm9pZCBTVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnRJbXBsOjpjbG9zZSgpCit7CisgICAgLy91
cGRhdGVMaWdodHMoKTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCkluZGV4OiBrc3Zn
Mi9TVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnRJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpkaWZmIC1OcHUg
a3N2ZzIvU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50SW1wbC5oCi0tLSBrc3ZnMi9TVkdGRURp
ZmZ1c2VMaWdodGluZ0VsZW1lbnRJbXBsLmgJMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMAorKysg
a3N2ZzIvU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50SW1wbC5oCTIwIE5vdiAyMDA1IDEzOjA0
OjIxIC0wMDAwCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDA1IE9s
aXZlciBIdW50Li4uCisqLworCisjaWZuZGVmIEtTVkdfU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVt
ZW50SW1wbF9ICisjZGVmaW5lIEtTVkdfU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50SW1wbF9I
CisKKyNpbmNsdWRlICJTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXNJbXBsLmgi
CisKK2NsYXNzIEtDYW52YXNGRURpZmZ1c2VMaWdodGluZzsKK2NsYXNzIEtDYW52YXNGaWx0ZXJF
ZmZlY3Q7CisKK25hbWVzcGFjZSBLU1ZHCit7CisgICAgY2xhc3MgU1ZHQW5pbWF0ZWROdW1iZXJJ
bXBsOworICAgIGNsYXNzIFNWR0FuaW1hdGVkU3RyaW5nSW1wbDsKKyAgICBjbGFzcyBTVkdBbmlt
YXRlZENvbG9ySW1wbDsKKyAgICAKKyAgICBjbGFzcyBTVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1l
bnRJbXBsIDogcHVibGljIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlc0ltcGwK
KyAgICB7CisgICAgcHVibGljOgorICAgICAgICBTVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnRJ
bXBsKEtET006OkRvY3VtZW50UHRyICpkb2MsIEtET006Ok5vZGVJbXBsOjpJZCBpZCwgS0RPTTo6
RE9NU3RyaW5nSW1wbCAqcHJlZml4KTsKKyAgICAgICAgdmlydHVhbCB+U1ZHRkVEaWZmdXNlTGln
aHRpbmdFbGVtZW50SW1wbCgpOworCisgICAgICAgIC8vICdTVkdGRURpZmZ1c2VMaWdodGluZ0Vs
ZW1lbnQnIGZ1bmN0aW9ucworICAgICAgICBTVkdBbmltYXRlZFN0cmluZ0ltcGwgKmluMSgpIGNv
bnN0OworICAgICAgICBTVkdBbmltYXRlZE51bWJlckltcGwgKmRpZmZ1c2VDb25zdGFudCgpIGNv
bnN0OworICAgICAgICBTVkdBbmltYXRlZE51bWJlckltcGwgKnN1cmZhY2VTY2FsZSgpIGNvbnN0
OworICAgICAgICBTVkdBbmltYXRlZE51bWJlckltcGwgKmtlcm5lbFVuaXRMZW5ndGhYKCkgY29u
c3Q7CisgICAgICAgIFNWR0FuaW1hdGVkTnVtYmVySW1wbCAqa2VybmVsVW5pdExlbmd0aFkoKSBj
b25zdDsKKyAgICAgICAgU1ZHQW5pbWF0ZWRDb2xvckltcGwgICpsaWdodGluZ0NvbG9yKCkgY29u
c3Q7CisKKyAgICAgICAgLy8gRGVyaXZlZCBmcm9tOiAnRWxlbWVudEltcGwnCisgICAgICAgIHZp
cnR1YWwgdm9pZCBwYXJzZUF0dHJpYnV0ZShLRE9NOjpBdHRyaWJ1dGVJbXBsICphdHRyKTsKKwor
ICAgICAgICB2aXJ0dWFsIEtDYW52YXNJdGVtICpjcmVhdGVDYW52YXNJdGVtKEtDYW52YXMgKmNh
bnZhcywgS1JlbmRlcmluZ1N0eWxlICpzdHlsZSkgY29uc3Q7CisKKyAgICAgICAgdmlydHVhbCBi
b29sIGltcGxlbWVudHNDYW52YXNJdGVtKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAg
ICAgIHZpcnR1YWwgS0NhbnZhc0ZpbHRlckVmZmVjdCAqZmlsdGVyRWZmZWN0KCkgY29uc3Q7Cisg
ICAgICAgIAorICAgICAgICB2aXJ0dWFsIHZvaWQgY2xvc2UoKTsKK3ByaXZhdGU6CisgICAgICAg
IG11dGFibGUgU1ZHQW5pbWF0ZWRTdHJpbmdJbXBsICptX2luMTsKKyAgICAgICAgbXV0YWJsZSBT
VkdBbmltYXRlZE51bWJlckltcGwgKm1fZGlmZnVzZUNvbnN0YW50OworICAgICAgICBtdXRhYmxl
IFNWR0FuaW1hdGVkTnVtYmVySW1wbCAqbV9zdXJmYWNlU2NhbGU7CisgICAgICAgIG11dGFibGUg
U1ZHQW5pbWF0ZWRDb2xvckltcGwgICptX2xpZ2h0aW5nQ29sb3I7CisgICAgICAgIG11dGFibGUg
U1ZHQW5pbWF0ZWROdW1iZXJJbXBsICptX2tlcm5lbFVuaXRMZW5ndGhYOworICAgICAgICBtdXRh
YmxlIFNWR0FuaW1hdGVkTnVtYmVySW1wbCAqbV9rZXJuZWxVbml0TGVuZ3RoWTsKKyAgICAgICAg
Ly9uZWVkIG90aGVyIHByb3BlcnRpZXMgaGVyZS4uLgorICAgICAgICBtdXRhYmxlIEtDYW52YXNG
RURpZmZ1c2VMaWdodGluZyAqbV9maWx0ZXJFZmZlY3Q7CisgICAgICAgIAorICAgICAgICAvL2xp
Z2h0IG1hbmFnbWVudAorICAgICAgICB2b2lkIHVwZGF0ZUxpZ2h0cygpIGNvbnN0OworICAgIH07
Cit9OworCisjZW5kaWYKSW5kZXg6IGtzdmcyL1NWR0ZFRGlzdGFudExpZ2h0RWxlbWVudEltcGwu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KZGlmZiAtTnB1IGtzdmcyL1NWR0ZFRGlzdGFudExpZ2h0RWxlbWVudElt
cGwuY3BwCi0tLSBrc3ZnMi9TVkdGRURpc3RhbnRMaWdodEVsZW1lbnRJbXBsLmNwcAkxIEphbiAx
OTcwIDAwOjAwOjAwIC0wMDAwCisrKyBrc3ZnMi9TVkdGRURpc3RhbnRMaWdodEVsZW1lbnRJbXBs
LmNwcAkxMSBOb3YgMjAwNSAyMzozNjowMCAtMDAwMApAQCAtMCwwICsxLDIyIEBACisvKgorICog
IFNWR0ZFRGlzdGFudExpZ2h0RWxlbWVudEltcGwuY3BwCisgKiAgV2ViQ29yZQorICoKKyAqICBD
cmVhdGVkIGJ5IE9saXZlciBvbiA4LzExLzA1LgorICogIENvcHlyaWdodCAyMDA1IE9saXZlciBI
dW50LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqLworCisjaW5jbHVkZSAiU1ZHRkVEaXN0
YW50TGlnaHRFbGVtZW50SW1wbC5oIgorCit1c2luZyBuYW1lc3BhY2UgS1NWRzsKKworU1ZHRkVE
aXN0YW50TGlnaHRFbGVtZW50SW1wbDo6U1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50SW1wbChLRE9N
OjpEb2N1bWVudFB0ciAqZG9jLCBLRE9NOjpOb2RlSW1wbDo6SWQgaWQsIEtET006OkRPTVN0cmlu
Z0ltcGwgKnByZWZpeCkgOiAKK1NWR0ZFTGlnaHRFbGVtZW50SW1wbChkb2MsIGlkLCBwcmVmaXgp
Cit7Cit9CisKK1NWR0ZFRGlzdGFudExpZ2h0RWxlbWVudEltcGw6On5TVkdGRURpc3RhbnRMaWdo
dEVsZW1lbnRJbXBsKCkKK3sKK30KKwpJbmRleDoga3N2ZzIvU1ZHRkVEaXN0YW50TGlnaHRFbGVt
ZW50SW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtTnB1IGtzdmcyL1NWR0ZFRGlzdGFudExpZ2h0RWxl
bWVudEltcGwuaAotLS0ga3N2ZzIvU1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50SW1wbC5oCTEgSmFu
IDE5NzAgMDA6MDA6MDAgLTAwMDAKKysrIGtzdmcyL1NWR0ZFRGlzdGFudExpZ2h0RWxlbWVudElt
cGwuaAkyMCBOb3YgMjAwNSAxMzowNDoyMSAtMDAwMApAQCAtMCwwICsxLDI1IEBACisvKgorICog
IFNWR0ZFRGlzdGFudExpZ2h0RWxlbWVudEltcGwuaAorICogIFdlYkNvcmUKKyAqCisgKiAgQ3Jl
YXRlZCBieSBPbGl2ZXIgb24gOC8xMS8wNS4KKyAqICBDb3B5cmlnaHQgMjAwNSBPbGl2ZXIgSHVu
dC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKi8KKworI2lmbmRlZiBLU1ZHX1NWR0ZFRGlz
dGFudExpZ2h0RWxlbWVudEltcGxfSAorI2RlZmluZSBLU1ZHX1NWR0ZFRGlzdGFudExpZ2h0RWxl
bWVudEltcGxfSAorCisjaW5jbHVkZSAiU1ZHRkVMaWdodEVsZW1lbnRJbXBsLmgiCisKK25hbWVz
cGFjZSBLU1ZHCit7CisgICAgY2xhc3MgU1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50SW1wbCA6IHB1
YmxpYyBTVkdGRUxpZ2h0RWxlbWVudEltcGwKKyAgICB7IAorICAgIHB1YmxpYzoKKyAgICAgICAg
U1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50SW1wbChLRE9NOjpEb2N1bWVudFB0ciAqZG9jLCBLRE9N
OjpOb2RlSW1wbDo6SWQgaWQsIEtET006OkRPTVN0cmluZ0ltcGwgKnByZWZpeCk7CisgICAgICAg
IHZpcnR1YWwgflNWR0ZFRGlzdGFudExpZ2h0RWxlbWVudEltcGwoKTsKKyAgICB9OworfTsKKwor
I2VuZGlmClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpJbmRleDoga3N2ZzIvU1ZHRkVMaWdo
dEVsZW1lbnRJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09CmRpZmYgLU5wdSBrc3ZnMi9TVkdGRUxpZ2h0RWxl
bWVudEltcGwuY3BwCi0tLSBrc3ZnMi9TVkdGRUxpZ2h0RWxlbWVudEltcGwuY3BwCTEgSmFuIDE5
NzAgMDA6MDA6MDAgLTAwMDAKKysrIGtzdmcyL1NWR0ZFTGlnaHRFbGVtZW50SW1wbC5jcHAJMjAg
Tm92IDIwMDUgMTM6MDQ6MjEgLTAwMDAKQEAgLTAsMCArMSwxNjUgQEAKKy8vY29weXJpZ2h0IGZv
byBnb2VzIGhlcmUKKworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8cXN0cmluZ2xp
c3QuaD4KKworI2luY2x1ZGUgPGtkb20vY29yZS9BdHRySW1wbC5oPgorCisjaW5jbHVkZSA8a2Nh
bnZhcy9LQ2FudmFzLmg+CisjaW5jbHVkZSA8a2NhbnZhcy9LQ2FudmFzUmVnaXN0cnkuaD4KKyNp
bmNsdWRlIDxrY2FudmFzL0tDYW52YXNSZXNvdXJjZXMuaD4KKyNpbmNsdWRlIDxrY2FudmFzL0tD
YW52YXNGaWx0ZXJzLmg+CisjaW5jbHVkZSA8a2NhbnZhcy9kZXZpY2UvS1JlbmRlcmluZ0Rldmlj
ZS5oPgorCisjaW5jbHVkZSAic3ZnYXR0cnMuaCIKKyNpbmNsdWRlICJTVkdIZWxwZXIuaCIKKyNp
bmNsdWRlICJTVkdSZW5kZXJTdHlsZS5oImlmICgKKyNpbmNsdWRlICJTVkdGRUxpZ2h0RWxlbWVu
dEltcGwuaCIKKyNpbmNsdWRlICJTVkdBbmltYXRlZFN0cmluZ0ltcGwuaCIKKyNpbmNsdWRlICJT
VkdBbmltYXRlZE51bWJlckltcGwuaCIKKyNpbmNsdWRlICJTVkdBbmltYXRlZEVudW1lcmF0aW9u
SW1wbC5oIgorI2luY2x1ZGUgIlNWR0RPTUltcGxlbWVudGF0aW9uSW1wbC5oIgorCit1c2luZyBu
YW1lc3BhY2UgS1NWRzsKKworU1ZHRkVMaWdodEVsZW1lbnRJbXBsOjpTVkdGRUxpZ2h0RWxlbWVu
dEltcGwoS0RPTTo6RG9jdW1lbnRQdHIgKmRvYywgS0RPTTo6Tm9kZUltcGw6OklkIGlkLCBLRE9N
OjpET01TdHJpbmdJbXBsICpwcmVmaXgpIDogCitTVkdFbGVtZW50SW1wbChkb2MsIGlkLCBwcmVm
aXgpCit7CisgICAgbV9hemltdXRoID0gMDsKKyAgICBtX2VsZXZhdGlvbiA9IDA7CisgICAgbV94
ID0gMDsKKyAgICBtX3kgPSAwOworICAgIG1feiA9IDA7CisgICAgbV9wb2ludHNBdFggPSAwOwor
ICAgIG1fcG9pbnRzQXRZID0gMDsKKyAgICBtX3BvaW50c0F0WiA9IDA7CisgICAgbV9zcGVjdWxh
ckV4cG9uZW50ID0gMDsKKyAgICBtX2xpbWl0aW5nQ29uZUFuZ2xlID0gMDsKK30KKworU1ZHRkVM
aWdodEVsZW1lbnRJbXBsOjp+U1ZHRkVMaWdodEVsZW1lbnRJbXBsKCkKK3sKKyAgICBpZiAobV9h
emltdXRoKQorICAgICAgICBtX2F6aW11dGgtPmRlcmVmKCk7CisgICAgaWYgKG1fZWxldmF0aW9u
KQorICAgICAgICBtX2VsZXZhdGlvbi0+ZGVyZWYoKTsKKyAgICBpZiAobV94KQorICAgICAgICBt
X3gtPmRlcmVmKCk7CisgICAgaWYgKG1feSkKKyAgICAgICAgbV95LT5kZXJlZigpOworICAgIGlm
IChtX3opCisgICAgICAgIG1fei0+ZGVyZWYoKTsKKyAgICBpZiAobV9wb2ludHNBdFgpCisgICAg
ICAgIG1fcG9pbnRzQXRYLT5kZXJlZigpOworICAgIGlmIChtX3BvaW50c0F0WSkKKyAgICAgICAg
bV9wb2ludHNBdFktPmRlcmVmKCk7CisgICAgaWYgKG1fcG9pbnRzQXRaKQorICAgICAgICBtX3Bv
aW50c0F0Wi0+ZGVyZWYoKTsKKyAgICBpZiAobV9zcGVjdWxhckV4cG9uZW50KQorICAgICAgICBt
X3NwZWN1bGFyRXhwb25lbnQtPmRlcmVmKCk7CisgICAgaWYgKG1fbGltaXRpbmdDb25lQW5nbGUp
CisgICAgICAgIG1fbGltaXRpbmdDb25lQW5nbGUtPmRlcmVmKCk7Cit9CisKK1NWR0FuaW1hdGVk
TnVtYmVySW1wbCAqU1ZHRkVMaWdodEVsZW1lbnRJbXBsOjphemltdXRoKCkgY29uc3QKK3sKKyAg
ICBTVkdTdHlsZWRFbGVtZW50SW1wbCAqZHVtbXkgPSAwOworICAgIHJldHVybiBsYXp5X2NyZWF0
ZTxTVkdBbmltYXRlZE51bWJlckltcGw+KG1fYXppbXV0aCwgZHVtbXkpOworfQorCitTVkdBbmlt
YXRlZE51bWJlckltcGwgKlNWR0ZFTGlnaHRFbGVtZW50SW1wbDo6ZWxldmF0aW9uKCkgY29uc3QK
K3sKKyAgICBTVkdTdHlsZWRFbGVtZW50SW1wbCAqZHVtbXkgPSAwOworICAgIHJldHVybiBsYXp5
X2NyZWF0ZTxTVkdBbmltYXRlZE51bWJlckltcGw+KG1fZWxldmF0aW9uLCBkdW1teSk7Cit9CisK
K1NWR0FuaW1hdGVkTnVtYmVySW1wbCAqU1ZHRkVMaWdodEVsZW1lbnRJbXBsOjp4KCkgY29uc3QK
K3sKKyAgICBTVkdTdHlsZWRFbGVtZW50SW1wbCAqZHVtbXkgPSAwOworICAgIHJldHVybiBsYXp5
X2NyZWF0ZTxTVkdBbmltYXRlZE51bWJlckltcGw+KG1feCwgZHVtbXkpOworfQorCitTVkdBbmlt
YXRlZE51bWJlckltcGwgKlNWR0ZFTGlnaHRFbGVtZW50SW1wbDo6eSgpIGNvbnN0Cit7CisgICAg
U1ZHU3R5bGVkRWxlbWVudEltcGwgKmR1bW15ID0gMDsKKyAgICByZXR1cm4gbGF6eV9jcmVhdGU8
U1ZHQW5pbWF0ZWROdW1iZXJJbXBsPihtX3ksIGR1bW15KTsKK30KKworCitTVkdBbmltYXRlZE51
bWJlckltcGwgKlNWR0ZFTGlnaHRFbGVtZW50SW1wbDo6eigpIGNvbnN0Cit7CisgICAgU1ZHU3R5
bGVkRWxlbWVudEltcGwgKmR1bW15ID0gMDsKKyAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5p
bWF0ZWROdW1iZXJJbXBsPihtX3osIGR1bW15KTsKK30KKworU1ZHQW5pbWF0ZWROdW1iZXJJbXBs
ICpTVkdGRUxpZ2h0RWxlbWVudEltcGw6OnBvaW50c0F0WCgpIGNvbnN0Cit7CisgICAgU1ZHU3R5
bGVkRWxlbWVudEltcGwgKmR1bW15ID0gMDsKKyAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5p
bWF0ZWROdW1iZXJJbXBsPihtX3BvaW50c0F0WCwgZHVtbXkpOworfQorCitTVkdBbmltYXRlZE51
bWJlckltcGwgKlNWR0ZFTGlnaHRFbGVtZW50SW1wbDo6cG9pbnRzQXRZKCkgY29uc3QKK3sKKyAg
ICBTVkdTdHlsZWRFbGVtZW50SW1wbCAqZHVtbXkgPSAwOworICAgIHJldHVybiBsYXp5X2NyZWF0
ZTxTVkdBbmltYXRlZE51bWJlckltcGw+KG1fcG9pbnRzQXRZLCBkdW1teSk7Cit9CisKK1NWR0Fu
aW1hdGVkTnVtYmVySW1wbCAqU1ZHRkVMaWdodEVsZW1lbnRJbXBsOjpwb2ludHNBdFooKSBjb25z
dAoreworICAgIFNWR1N0eWxlZEVsZW1lbnRJbXBsICpkdW1teSA9IDA7CisgICAgcmV0dXJuIGxh
enlfY3JlYXRlPFNWR0FuaW1hdGVkTnVtYmVySW1wbD4obV9wb2ludHNBdFosIGR1bW15KTsKK30K
KworU1ZHQW5pbWF0ZWROdW1iZXJJbXBsICpTVkdGRUxpZ2h0RWxlbWVudEltcGw6OnNwZWN1bGFy
RXhwb25lbnQoKSBjb25zdAoreworICAgIFNWR1N0eWxlZEVsZW1lbnRJbXBsICpkdW1teSA9IDA7
CisgICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTnVtYmVySW1wbD4obV9zcGVjdWxh
ckV4cG9uZW50LCBkdW1teSk7Cit9CisKK1NWR0FuaW1hdGVkTnVtYmVySW1wbCAqU1ZHRkVMaWdo
dEVsZW1lbnRJbXBsOjpsaW1pdGluZ0NvbmVBbmdsZSgpIGNvbnN0Cit7CisgICAgU1ZHU3R5bGVk
RWxlbWVudEltcGwgKmR1bW15ID0gMDsKKyAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0
ZWROdW1iZXJJbXBsPihtX2xpbWl0aW5nQ29uZUFuZ2xlLCBkdW1teSk7Cit9CisKK3ZvaWQgU1ZH
RkVMaWdodEVsZW1lbnRJbXBsOjpwYXJzZUF0dHJpYnV0ZShLRE9NOjpBdHRyaWJ1dGVJbXBsICph
dHRyKQoreworICAgIGludCBpZCA9IChhdHRyLT5pZCgpICYgTm9kZUltcGxfSWRMb2NhbE1hc2sp
OworICAgIEtET006OkRPTVN0cmluZyB2YWx1ZShhdHRyLT52YWx1ZSgpKTsKKyAgICBzd2l0Y2go
aWQpCisgICAgeworICAgICAgICBjYXNlIEFUVFJfQVpJTVVUSDoKKyAgICAgICAgICAgIGF6aW11
dGgoKS0+c2V0QmFzZVZhbCh2YWx1ZS5zdHJpbmcoKS50b0RvdWJsZSgpKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIEFUVFJfRUxFVkFUSU9OOgorICAgICAgICAgICAgZWxldmF0
aW9uKCktPnNldEJhc2VWYWwodmFsdWUuc3RyaW5nKCkudG9Eb3VibGUoKSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBBVFRSX1g6CisgICAgICAgICAgICB4KCktPnNldEJhc2VW
YWwodmFsdWUuc3RyaW5nKCkudG9Eb3VibGUoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBBVFRSX1k6CisgICAgICAgICAgICB5KCktPnNldEJhc2VWYWwodmFsdWUuc3RyaW5n
KCkudG9Eb3VibGUoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBVFRSX1o6
CisgICAgICAgICAgICB6KCktPnNldEJhc2VWYWwodmFsdWUuc3RyaW5nKCkudG9Eb3VibGUoKSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBVFRSX1BPSU5UU0FUWDoKKyAgICAg
ICAgICAgIHBvaW50c0F0WCgpLT5zZXRCYXNlVmFsKHZhbHVlLnN0cmluZygpLnRvRG91YmxlKCkp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQVRUUl9QT0lOVFNBVFk6CisgICAg
ICAgICAgICBwb2ludHNBdFkoKS0+c2V0QmFzZVZhbCh2YWx1ZS5zdHJpbmcoKS50b0RvdWJsZSgp
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFUVFJfUE9JTlRTQVRaOgorICAg
ICAgICAgICAgcG9pbnRzQXRaKCktPnNldEJhc2VWYWwodmFsdWUuc3RyaW5nKCkudG9Eb3VibGUo
KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBVFRSX1NQRUNVTEFSRVhQT05F
TlQ6CisgICAgICAgICAgICBzcGVjdWxhckV4cG9uZW50KCktPnNldEJhc2VWYWwodmFsdWUuc3Ry
aW5nKCkudG9Eb3VibGUoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBVFRS
X0xJTUlUSU5HQ09ORUFOR0xFOgorICAgICAgICAgICAgbGltaXRpbmdDb25lQW5nbGUoKS0+c2V0
QmFzZVZhbCh2YWx1ZS5zdHJpbmcoKS50b0RvdWJsZSgpKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgU1ZHRWxlbWVudEltcGw6OnBhcnNlQXR0cmli
dXRlKGF0dHIpOworICAgIH0KK30KSW5kZXg6IGtzdmcyL1NWR0ZFTGlnaHRFbGVtZW50SW1wbC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KZGlmZiAtTnB1IGtzdmcyL1NWR0ZFTGlnaHRFbGVtZW50SW1wbC5oCi0tLSBr
c3ZnMi9TVkdGRUxpZ2h0RWxlbWVudEltcGwuaAkxIEphbiAxOTcwIDAwOjAwOjAwIC0wMDAwCisr
KyBrc3ZnMi9TVkdGRUxpZ2h0RWxlbWVudEltcGwuaAkxMSBOb3YgMjAwNSAyMzozNjowMCAtMDAw
MApAQCAtMCwwICsxLDUwIEBACisvL3ByZXN1bWFibHkgbmVlZCBhIGNvcHlyaWdodCBub3RpY2Ug
b2Ygc29tZWtpbmQgaGVyZQorCisjaWZuZGVmIEtTVkdfU1ZHRkVMaWdodEVsZW1lbnRJbXBsX0gK
KyNkZWZpbmUgS1NWR19TVkdGRUxpZ2h0RWxlbWVudEltcGxfSAorI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIlNWR0VsZW1lbnRJbXBsLmgiCisKK25hbWVzcGFjZSBLU1ZHCit7CisgICAg
Y2xhc3MgU1ZHQW5pbWF0ZWROdW1iZXJJbXBsOworICAgIGNsYXNzIFNWR0FuaW1hdGVkTnVtYmVy
TGlzdEltcGw7CisgICAgY2xhc3MgU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbkltcGw7CisgICAgCisg
ICAgY2xhc3MgU1ZHRkVMaWdodEVsZW1lbnRJbXBsIDogcHVibGljIFNWR0VsZW1lbnRJbXBsCisg
ICAgeworICAgIHB1YmxpYzoKKyAgICAgICAgU1ZHRkVMaWdodEVsZW1lbnRJbXBsKEtET006OkRv
Y3VtZW50UHRyICpkb2MsIEtET006Ok5vZGVJbXBsOjpJZCBpZCwgS0RPTTo6RE9NU3RyaW5nSW1w
bCAqcHJlZml4KTsKKyAgICAgICAgdmlydHVhbCB+U1ZHRkVMaWdodEVsZW1lbnRJbXBsKCk7Cisg
ICAgICAgIAorICAgICAgICAvLyAnU1ZHQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbkVsZW1lbnQn
IGZ1bmN0aW9ucworICAgICAgICBTVkdBbmltYXRlZE51bWJlckltcGwgKmF6aW11dGgoKSBjb25z
dDsKKyAgICAgICAgU1ZHQW5pbWF0ZWROdW1iZXJJbXBsICplbGV2YXRpb24oKSBjb25zdDsKKyAg
ICAgICAgU1ZHQW5pbWF0ZWROdW1iZXJJbXBsICp4KCkgY29uc3Q7CisgICAgICAgIFNWR0FuaW1h
dGVkTnVtYmVySW1wbCAqeSgpIGNvbnN0OworICAgICAgICBTVkdBbmltYXRlZE51bWJlckltcGwg
KnooKSBjb25zdDsKKyAgICAgICAgU1ZHQW5pbWF0ZWROdW1iZXJJbXBsICpwb2ludHNBdFgoKSBj
b25zdDsKKyAgICAgICAgU1ZHQW5pbWF0ZWROdW1iZXJJbXBsICpwb2ludHNBdFkoKSBjb25zdDsK
KyAgICAgICAgU1ZHQW5pbWF0ZWROdW1iZXJJbXBsICpwb2ludHNBdFooKSBjb25zdDsKKyAgICAg
ICAgU1ZHQW5pbWF0ZWROdW1iZXJJbXBsICpzcGVjdWxhckV4cG9uZW50KCkgY29uc3Q7CisgICAg
ICAgIFNWR0FuaW1hdGVkTnVtYmVySW1wbCAqbGltaXRpbmdDb25lQW5nbGUoKSBjb25zdDsKKyAg
ICAgICAgCisgICAgICAgIC8vIERlcml2ZWQgZnJvbTogJ0VsZW1lbnRJbXBsJworICAgICAgICB2
b2lkIHBhcnNlQXR0cmlidXRlKEtET006OkF0dHJpYnV0ZUltcGwgKmF0dHIpOworICAgICAgICAK
KyAgICBwcml2YXRlOgorICAgICAgICBtdXRhYmxlIFNWR0FuaW1hdGVkTnVtYmVySW1wbCAqbV9h
emltdXRoOworICAgICAgICBtdXRhYmxlIFNWR0FuaW1hdGVkTnVtYmVySW1wbCAqbV9lbGV2YXRp
b247CisgICAgICAgIG11dGFibGUgU1ZHQW5pbWF0ZWROdW1iZXJJbXBsICptX3g7CisgICAgICAg
IG11dGFibGUgU1ZHQW5pbWF0ZWROdW1iZXJJbXBsICptX3k7CisgICAgICAgIG11dGFibGUgU1ZH
QW5pbWF0ZWROdW1iZXJJbXBsICptX3o7CisgICAgICAgIG11dGFibGUgU1ZHQW5pbWF0ZWROdW1i
ZXJJbXBsICptX3BvaW50c0F0WDsKKyAgICAgICAgbXV0YWJsZSBTVkdBbmltYXRlZE51bWJlcklt
cGwgKm1fcG9pbnRzQXRZOworICAgICAgICBtdXRhYmxlIFNWR0FuaW1hdGVkTnVtYmVySW1wbCAq
bV9wb2ludHNBdFo7CisgICAgICAgIG11dGFibGUgU1ZHQW5pbWF0ZWROdW1iZXJJbXBsICptX3Nw
ZWN1bGFyRXhwb25lbnQ7CisgICAgICAgIG11dGFibGUgU1ZHQW5pbWF0ZWROdW1iZXJJbXBsICpt
X2xpbWl0aW5nQ29uZUFuZ2xlOworICAgICAgICAKKyAgICB9OworfTsKKworI2VuZGlmClwgTm8g
bmV3bGluZSBhdCBlbmQgb2YgZmlsZQpJbmRleDoga3N2ZzIvU1ZHRkVQb2ludExpZ2h0RWxlbWVu
dEltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtTnB1IGtzdmcyL1NWR0ZFUG9pbnRMaWdodEVsZW1l
bnRJbXBsLmNwcAotLS0ga3N2ZzIvU1ZHRkVQb2ludExpZ2h0RWxlbWVudEltcGwuY3BwCTEgSmFu
IDE5NzAgMDA6MDA6MDAgLTAwMDAKKysrIGtzdmcyL1NWR0ZFUG9pbnRMaWdodEVsZW1lbnRJbXBs
LmNwcAkxMSBOb3YgMjAwNSAyMzozNjowMCAtMDAwMApAQCAtMCwwICsxLDE1IEBACisvLyBjb3B5
cmlnaHQgZm9vIGhlcmUKKworI2luY2x1ZGUgIlNWR0ZFUG9pbnRMaWdodEVsZW1lbnRJbXBsLmgi
CisKK3VzaW5nIG5hbWVzcGFjZSBLU1ZHOworCitTVkdGRVBvaW50TGlnaHRFbGVtZW50SW1wbDo6
U1ZHRkVQb2ludExpZ2h0RWxlbWVudEltcGwoS0RPTTo6RG9jdW1lbnRQdHIgKmRvYywgS0RPTTo6
Tm9kZUltcGw6OklkIGlkLCBLRE9NOjpET01TdHJpbmdJbXBsICpwcmVmaXgpIDogCitTVkdGRUxp
Z2h0RWxlbWVudEltcGwoZG9jLCBpZCwgcHJlZml4KQoreworfQorCitTVkdGRVBvaW50TGlnaHRF
bGVtZW50SW1wbDo6flNWR0ZFUG9pbnRMaWdodEVsZW1lbnRJbXBsKCkKK3sKK30KKwpJbmRleDog
a3N2ZzIvU1ZHRkVQb2ludExpZ2h0RWxlbWVudEltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CmRpZmYgLU5wdSBr
c3ZnMi9TVkdGRVBvaW50TGlnaHRFbGVtZW50SW1wbC5oCi0tLSBrc3ZnMi9TVkdGRVBvaW50TGln
aHRFbGVtZW50SW1wbC5oCTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAKKysrIGtzdmcyL1NWR0ZF
UG9pbnRMaWdodEVsZW1lbnRJbXBsLmgJMTEgTm92IDIwMDUgMjM6MzY6MDAgLTAwMDAKQEAgLTAs
MCArMSwxOCBAQAorLy9wcmVzdW1hYmx5IG5lZWQgYSBjb3B5cmlnaHQgbm90aWNlIG9mIHNvbWVr
aW5kIGhlcmUKKworI2lmbmRlZiBLU1ZHX1NWR0ZFUG9pbnRMaWdodEVsZW1lbnRJbXBsX0gKKyNk
ZWZpbmUgS1NWR19TVkdGRVBvaW50TGlnaHRFbGVtZW50SW1wbF9ICisKKyNpbmNsdWRlICJTVkdG
RUxpZ2h0RWxlbWVudEltcGwuaCIKKworbmFtZXNwYWNlIEtTVkcKK3sKKyAgICBjbGFzcyBTVkdG
RVBvaW50TGlnaHRFbGVtZW50SW1wbCA6IHB1YmxpYyBTVkdGRUxpZ2h0RWxlbWVudEltcGwKKyAg
ICB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgU1ZHRkVQb2ludExpZ2h0RWxlbWVudEltcGwo
S0RPTTo6RG9jdW1lbnRQdHIgKmRvYywgS0RPTTo6Tm9kZUltcGw6OklkIGlkLCBLRE9NOjpET01T
dHJpbmdJbXBsICpwcmVmaXgpOworICAgICAgICB2aXJ0dWFsIH5TVkdGRVBvaW50TGlnaHRFbGVt
ZW50SW1wbCgpOworICAgIH07Cit9OworCisjZW5kaWYKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBm
aWxlCkluZGV4OiBrc3ZnMi9TVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50SW1wbC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQpkaWZmIC1OcHUga3N2ZzIvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudEltcGwu
Y3BwCi0tLSBrc3ZnMi9TVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50SW1wbC5jcHAJMSBKYW4g
MTk3MCAwMDowMDowMCAtMDAwMAorKysga3N2ZzIvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVu
dEltcGwuY3BwCTIwIE5vdiAyMDA1IDEzOjA0OjIxIC0wMDAwCkBAIC0wLDAgKzEsMjE5IEBACisv
KgorICogIFNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnRJbXBsLmNwcAorICogIFdlYkNvcmUK
KyAqCisgKiAgQ3JlYXRlZCBieSBPbGl2ZXIgb24gOC8xMS8wNS4KKyAqICBDb3B5cmlnaHQgMjAw
NSBPbGl2ZXIgSHVudC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oImlmICgKKyNpbmNsdWRlIDxxc3RyaW5nbGlzdC5oPgorCisjaW5jbHVkZSA8a2Rv
bS9jb3JlL0F0dHJJbXBsLmg+CisKKyNpbmNsdWRlIDxrY2FudmFzL0tDYW52YXMuaD4KKyNpbmNs
dWRlIDxrY2FudmFzL0tDYW52YXNSZWdpc3RyeS5oPgorI2luY2x1ZGUgPGtjYW52YXMvS0NhbnZh
c0ZpbHRlcnMuaD4KKyNpbmNsdWRlIDxrY2FudmFzL2RldmljZS9LUmVuZGVyaW5nRGV2aWNlLmg+
CisKKyNpbmNsdWRlICJzdmdhdHRycy5oIgorI2luY2x1ZGUgIlNWR0hlbHBlci5oIgorI2luY2x1
ZGUgIlNWR1JlbmRlclN0eWxlLmgiCisjaW5jbHVkZSAiU1ZHQW5pbWF0ZWRDb2xvckltcGwuaCIK
KyNpbmNsdWRlICJTVkdBbmltYXRlZE51bWJlckltcGwuaCIKKyNpbmNsdWRlICJTVkdBbmltYXRl
ZFN0cmluZ0ltcGwuaCIKKyNpbmNsdWRlICJTVkdGRUxpZ2h0RWxlbWVudEltcGwuaCIKKyNpbmNs
dWRlICJTVkdET01JbXBsZW1lbnRhdGlvbkltcGwuaCIKKyNpbmNsdWRlICJTVkdGRVNwZWN1bGFy
TGlnaHRpbmdFbGVtZW50SW1wbC5oIgorCisKK3VzaW5nIG5hbWVzcGFjZSBLU1ZHOworCitTVkdG
RVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50SW1wbDo6U1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVu
dEltcGwoS0RPTTo6RG9jdW1lbnRQdHIgKmRvYywgS0RPTTo6Tm9kZUltcGw6OklkIGlkLCBLRE9N
OjpET01TdHJpbmdJbXBsICpwcmVmaXgpIDogCitTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0
dHJpYnV0ZXNJbXBsKGRvYywgaWQsIHByZWZpeCkKK3sKKyAgICBtX3NwZWN1bGFyQ29uc3RhbnQg
PSAwOworICAgIG1fc3BlY3VsYXJFeHBvbmVudCA9IDA7CisgICAgbV9zdXJmYWNlU2NhbGUgPSAw
OworICAgIG1fZmlsdGVyRWZmZWN0ID0gMDsKKyAgICBtX2tlcm5lbFVuaXRMZW5ndGhYID0gMDsK
KyAgICBtX2tlcm5lbFVuaXRMZW5ndGhZID0gMDsKKyAgICBtX2xpZ2h0aW5nQ29sb3IgPSAwOwor
ICAgIG1faW4xID0gMDsKK30KKworU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudEltcGw6On5T
VkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50SW1wbCgpCit7CisgICAgaWYgKG1faW4xKQorICAg
ICAgICBtX2luMS0+ZGVyZWYoKTsKKyAgICBpZiAobV9zcGVjdWxhckV4cG9uZW50KQorICAgICAg
ICBtX3NwZWN1bGFyRXhwb25lbnQtPmRlcmVmKCk7CisgICAgaWYgKG1fc3BlY3VsYXJDb25zdGFu
dCkKKyAgICAgICAgbV9zcGVjdWxhckNvbnN0YW50LT5kZXJlZigpOworICAgIGlmIChtX3N1cmZh
Y2VTY2FsZSkKKyAgICAgICAgbV9zdXJmYWNlU2NhbGUtPmRlcmVmKCk7CisgICAgaWYgKG1fa2Vy
bmVsVW5pdExlbmd0aFgpCisgICAgICAgIG1fa2VybmVsVW5pdExlbmd0aFgtPmRlcmVmKCk7Cisg
ICAgaWYgKG1fa2VybmVsVW5pdExlbmd0aFkpCisgICAgICAgIG1fa2VybmVsVW5pdExlbmd0aFkt
PmRlcmVmKCk7CisgICAgaWYgKG1fbGlnaHRpbmdDb2xvcikKKyAgICAgICAgbV9saWdodGluZ0Nv
bG9yLT5kZXJlZigpOworfQorCitTVkdBbmltYXRlZFN0cmluZ0ltcGwgKlNWR0ZFU3BlY3VsYXJM
aWdodGluZ0VsZW1lbnRJbXBsOjppbjEoKSBjb25zdAoreworICAgIFNWR1N0eWxlZEVsZW1lbnRJ
bXBsICpkdW1teSA9IDA7CisgICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkU3RyaW5n
SW1wbD4obV9pbjEsIGR1bW15KTsKK30KKworU1ZHQW5pbWF0ZWROdW1iZXJJbXBsICpTVkdGRVNw
ZWN1bGFyTGlnaHRpbmdFbGVtZW50SW1wbDo6c3BlY3VsYXJDb25zdGFudCgpIGNvbnN0Cit7Cisg
ICAgU1ZHU3R5bGVkRWxlbWVudEltcGwgKmR1bW15ID0gMDsKKyAgICByZXR1cm4gbGF6eV9jcmVh
dGU8U1ZHQW5pbWF0ZWROdW1iZXJJbXBsPihtX3NwZWN1bGFyQ29uc3RhbnQsIGR1bW15KTsKK30K
KworU1ZHQW5pbWF0ZWROdW1iZXJJbXBsICpTVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50SW1w
bDo6c3BlY3VsYXJFeHBvbmVudCgpIGNvbnN0Cit7CisgICAgU1ZHU3R5bGVkRWxlbWVudEltcGwg
KmR1bW15ID0gMDsKKyAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWROdW1iZXJJbXBs
PihtX3NwZWN1bGFyRXhwb25lbnQsIGR1bW15KTsKK30KKworU1ZHQW5pbWF0ZWROdW1iZXJJbXBs
ICpTVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50SW1wbDo6c3VyZmFjZVNjYWxlKCkgY29uc3QK
K3sKKyAgICBTVkdTdHlsZWRFbGVtZW50SW1wbCAqZHVtbXkgPSAwOworICAgIHJldHVybiBsYXp5
X2NyZWF0ZTxTVkdBbmltYXRlZE51bWJlckltcGw+KG1fc3VyZmFjZVNjYWxlLCBkdW1teSk7Cit9
CisKK1NWR0FuaW1hdGVkTnVtYmVySW1wbCAqU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudElt
cGw6Omtlcm5lbFVuaXRMZW5ndGhYKCkgY29uc3QKK3sKKyAgICBTVkdTdHlsZWRFbGVtZW50SW1w
bCAqZHVtbXkgPSAwOworICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZE51bWJlcklt
cGw+KG1fa2VybmVsVW5pdExlbmd0aFgsIGR1bW15KTsKK30KKworU1ZHQW5pbWF0ZWROdW1iZXJJ
bXBsICpTVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50SW1wbDo6a2VybmVsVW5pdExlbmd0aFko
KSBjb25zdAoreworICAgIFNWR1N0eWxlZEVsZW1lbnRJbXBsICpkdW1teSA9IDA7CisgICAgcmV0
dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTnVtYmVySW1wbD4obV9rZXJuZWxVbml0TGVuZ3Ro
WSwgZHVtbXkpOworfQorCitTVkdBbmltYXRlZENvbG9ySW1wbCAgKlNWR0ZFU3BlY3VsYXJMaWdo
dGluZ0VsZW1lbnRJbXBsOjpsaWdodGluZ0NvbG9yKCkgY29uc3QKK3sKKyAgICBTVkdTdHlsZWRF
bGVtZW50SW1wbCAqZHVtbXkgPSAwOworICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRl
ZENvbG9ySW1wbD4obV9saWdodGluZ0NvbG9yLCBkdW1teSk7Cit9CisKK3ZvaWQgU1ZHRkVTcGVj
dWxhckxpZ2h0aW5nRWxlbWVudEltcGw6OnBhcnNlQXR0cmlidXRlKEtET006OkF0dHJpYnV0ZUlt
cGwgKmF0dHIpCit7CisgICAgaW50IGlkID0gKGF0dHItPmlkKCkgJiBOb2RlSW1wbF9JZExvY2Fs
TWFzayk7CisgICAgS0RPTTo6RE9NU3RyaW5nIHZhbHVlKGF0dHItPnZhbHVlKCkpOworICAgIAor
ICAgIHN3aXRjaChpZCkKKyAgICB7CisgICAgICAgIGNhc2UgQVRUUl9JTjoKKyAgICAgICAgICAg
IGluMSgpLT5zZXRCYXNlVmFsKHZhbHVlLmhhbmRsZSgpKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIEFUVFJfU1VSRkFDRVNDQUxFOgorICAgICAgICAgICAgc3VyZmFjZVNjYWxl
KCktPnNldEJhc2VWYWwodmFsdWUuc3RyaW5nKCkudG9Eb3VibGUoKSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBBVFRSX1NQRUNVTEFSQ09OU1RBTlQ6CisgICAgICAgICAgICBz
cGVjdWxhckNvbnN0YW50KCktPnNldEJhc2VWYWwodmFsdWUuc3RyaW5nKCkudG9Eb3VibGUoKSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBVFRSX1NQRUNVTEFSRVhQT05FTlQ6
CisgICAgICAgICAgICBzcGVjdWxhckV4cG9uZW50KCktPnNldEJhc2VWYWwodmFsdWUuc3RyaW5n
KCkudG9Eb3VibGUoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBVFRSX0tF
Uk5FTFVOSVRMRU5HVEg6CisgICAgICAgIHsKKyAgICAgICAgICAgIFFTdHJpbmdMaXN0IG51bWJl
cnMgPSBRU3RyaW5nTGlzdDo6c3BsaXQoJyAnLCB2YWx1ZS5zdHJpbmcoKSk7CisgICAgICAgICAg
ICBrZXJuZWxVbml0TGVuZ3RoWCgpLT5zZXRCYXNlVmFsKG51bWJlcnNbMF0udG9Eb3VibGUoKSk7
CisgICAgICAgICAgICBpZiAobnVtYmVycy5jb3VudCgpID09IDEpCisgICAgICAgICAgICAgICAg
a2VybmVsVW5pdExlbmd0aFkoKS0+c2V0QmFzZVZhbChudW1iZXJzWzBdLnRvRG91YmxlKCkpOwor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGtlcm5lbFVuaXRMZW5ndGhZKCktPnNl
dEJhc2VWYWwobnVtYmVyc1sxXS50b0RvdWJsZSgpKTsgICAgICAgICAgICAKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgQVRUUl9MSUdIVElOR19DT0xPUjoKKyAg
ICAgICAgICAgIC8vRklYTUUgdGhpcyBpcyBiYWQsIHBvdGVudGlhbCBtZW1vcnkgbGVhaworICAg
ICAgICAgICAgbGlnaHRpbmdDb2xvcigpLT5zZXRCYXNlVmFsKG5ldyBTVkdDb2xvckltcGwodmFs
dWUuaGFuZGxlKCkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzSW1wbDo6cGFyc2VB
dHRyaWJ1dGUoYXR0cik7CisgICAgfTsKK30KKworS0NhbnZhc0l0ZW0gKlNWR0ZFU3BlY3VsYXJM
aWdodGluZ0VsZW1lbnRJbXBsOjpjcmVhdGVDYW52YXNJdGVtKEtDYW52YXMgKmNhbnZhcywgS1Jl
bmRlcmluZ1N0eWxlICpzdHlsZSkgY29uc3QKK3sKKyAgICBtX2ZpbHRlckVmZmVjdCA9IHN0YXRp
Y19jYXN0PEtDYW52YXNGRVNwZWN1bGFyTGlnaHRpbmcgKj4oY2FudmFzLT5yZW5kZXJpbmdEZXZp
Y2UoKS0+Y3JlYXRlRmlsdGVyRWZmZWN0KEZFX1NQRUNVTEFSX0xJR0hUSU5HKSk7CisgICAgbV9m
aWx0ZXJFZmZlY3QtPnNldEluKEtET006OkRPTVN0cmluZyhpbjEoKS0+YmFzZVZhbCgpKS5zdHJp
bmcoKSk7CisgICAgc2V0U3RhbmRhcmRBdHRyaWJ1dGVzKG1fZmlsdGVyRWZmZWN0KTsKKyAgICBt
X2ZpbHRlckVmZmVjdC0+c2V0U3BlY3VsYXJDb25zdGFudCgoc3BlY3VsYXJDb25zdGFudCgpLT5i
YXNlVmFsKCkpKTsKKyAgICBtX2ZpbHRlckVmZmVjdC0+c2V0U3BlY3VsYXJFeHBvbmVudCgoc3Bl
Y3VsYXJFeHBvbmVudCgpLT5iYXNlVmFsKCkpKTsKKyAgICBtX2ZpbHRlckVmZmVjdC0+c2V0U3Vy
ZmFjZVNjYWxlKChzdXJmYWNlU2NhbGUoKS0+YmFzZVZhbCgpKSk7CisgICAgbV9maWx0ZXJFZmZl
Y3QtPnNldEtlcm5lbFVuaXRMZW5ndGhYKChrZXJuZWxVbml0TGVuZ3RoWCgpLT5iYXNlVmFsKCkp
KTsKKyAgICBtX2ZpbHRlckVmZmVjdC0+c2V0S2VybmVsVW5pdExlbmd0aFkoKGtlcm5lbFVuaXRM
ZW5ndGhZKCktPmJhc2VWYWwoKSkpOworICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRMaWdodGluZ0Nv
bG9yKGxpZ2h0aW5nQ29sb3IoKS0+YmFzZVZhbCgpLT5jb2xvcigpKTsKKyAgICB1cGRhdGVMaWdo
dHMoKTsKKyAgICByZXR1cm4gMDsKK30KKworS0NhbnZhc0ZpbHRlckVmZmVjdCAqU1ZHRkVTcGVj
dWxhckxpZ2h0aW5nRWxlbWVudEltcGw6OmZpbHRlckVmZmVjdCgpIGNvbnN0Cit7CisgICAgdXBk
YXRlTGlnaHRzKCk7CisgICAgcmV0dXJuIG1fZmlsdGVyRWZmZWN0OworfQorCitzdGF0aWMgS0Nh
bnZhc1BvaW50M0YgbWFrZVBvaW50KGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHopCit7CisgICAg
S0NhbnZhc1BvaW50M0YgcmVzOworICAgIHJlcy5zZXRYKHgpOworICAgIHJlcy5zZXRZKHkpOwor
ICAgIHJlcy5zZXRaKHopOworICAgIHJldHVybiByZXM7Cit9CisKKy8vRklYTUU6IGhlcmUgYmUg
bW9yZSBkcmFnb25zCitzdGF0aWMgdm9pZCBub3JtYWxpc2UoS0NhbnZhc1BvaW50M0YgJiB2YWwp
Cit7CisgICAgZmxvYXQgbGVuZ3RoID0gdmFsLngoKSp2YWwueCgpK3ZhbC55KCkqdmFsLnkoKSt2
YWwueigpKnZhbC56KCk7CisgICAgbGVuZ3RoID0gc3FydChsZW5ndGgpOworICAgIHZhbC5zZXRY
KHZhbC54KCkvbGVuZ3RoKTsKKyAgICB2YWwuc2V0WSh2YWwueSgpL2xlbmd0aCk7CisgICAgdmFs
LnNldFoodmFsLnooKS9sZW5ndGgpOworfQorCit2b2lkIFNWR0ZFU3BlY3VsYXJMaWdodGluZ0Vs
ZW1lbnRJbXBsOjp1cGRhdGVMaWdodHMoKSBjb25zdAoreworICAgIGlmICghbV9maWx0ZXJFZmZl
Y3QpCisgICAgICAgIHJldHVybjsKKyAgICBLRE9NOjpOb2RlSW1wbCAqbiA9IGZpcnN0Q2hpbGQo
KTsKKyAgICBpZiAoIW4pIHJldHVybjsKKyAgICBLQ0xpZ2h0U291cmNlICogbGlnaHQgPSAwOwor
ICAgIGlmIChuLT5pZCgpID09IElEX0ZFRElTVEFOVExJR0hUKQorICAgIHsgICAgICAKKyAgICAg
ICAgU1ZHRkVMaWdodEVsZW1lbnRJbXBsICpsaWdodE5vZGUgPSBzdGF0aWNfY2FzdDxTVkdGRUxp
Z2h0RWxlbWVudEltcGwgKj4obik7ICAKKyAgICAgICAgbGlnaHQgPSBuZXcgS0NEaXN0YW50TGln
aHRTb3VyY2UobGlnaHROb2RlLT5hemltdXRoKCktPmJhc2VWYWwoKSwgbGlnaHROb2RlLT5lbGV2
YXRpb24oKS0+YmFzZVZhbCgpKTsKKyAgICB9CisgICAgZWxzZSBpZiAobi0+aWQoKSA9PSBJRF9G
RVBPSU5UTElHSFQpCisgICAgeworICAgICAgICBTVkdGRUxpZ2h0RWxlbWVudEltcGwgKmxpZ2h0
Tm9kZSA9IHN0YXRpY19jYXN0PFNWR0ZFTGlnaHRFbGVtZW50SW1wbCAqPihuKTsgIAorICAgICAg
ICBLQ2FudmFzUG9pbnQzRiBwb3MgPSBtYWtlUG9pbnQobGlnaHROb2RlLT54KCktPmJhc2VWYWwo
KSwgbGlnaHROb2RlLT55KCktPmJhc2VWYWwoKSwgbGlnaHROb2RlLT56KCktPmJhc2VWYWwoKSk7
CisgICAgICAgIGxpZ2h0ID0gbmV3IEtDUG9pbnRMaWdodFNvdXJjZShwb3MpOworICAgIH0KKyAg
ICBlbHNlIGlmIChuLT5pZCgpID09IElEX0ZFU1BPVExJR0hUKQorICAgIHsKKyAgICAgICAgU1ZH
RkVMaWdodEVsZW1lbnRJbXBsICpsaWdodE5vZGUgPSBzdGF0aWNfY2FzdDxTVkdGRUxpZ2h0RWxl
bWVudEltcGwgKj4obik7ICAKKyAgICAgICAgS0NhbnZhc1BvaW50M0YgcG9zID0gbWFrZVBvaW50
KGxpZ2h0Tm9kZS0+eCgpLT5iYXNlVmFsKCksIGxpZ2h0Tm9kZS0+eSgpLT5iYXNlVmFsKCksIGxp
Z2h0Tm9kZS0+eigpLT5iYXNlVmFsKCkpOworICAgICAgICAvL2NvbnZlcnQgbG9va0F0IHRvIGEg
ZGlyZWN0aW9uCisgICAgICAgIEtDYW52YXNQb2ludDNGIGRpcmVjdGlvbiA9IG1ha2VQb2ludChs
aWdodE5vZGUtPnBvaW50c0F0WCgpLT5iYXNlVmFsKCktcG9zLngoKSwgCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWdodE5vZGUtPnBvaW50c0F0WSgpLT5i
YXNlVmFsKCktcG9zLnkoKSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBsaWdodE5vZGUtPnBvaW50c0F0WigpLT5iYXNlVmFsKCktcG9zLnooKSk7CisgICAg
ICAgIG5vcm1hbGlzZShkaXJlY3Rpb24pOworICAgICAgICBsaWdodCA9IG5ldyBLQ1Nwb3RMaWdo
dFNvdXJjZShwb3MsIGRpcmVjdGlvbiwgbGlnaHROb2RlLT5zcGVjdWxhckV4cG9uZW50KCktPmJh
c2VWYWwoKSwgbGlnaHROb2RlLT5saW1pdGluZ0NvbmVBbmdsZSgpLT5iYXNlVmFsKCkpOworICAg
IH0KKyAgICBtX2ZpbHRlckVmZmVjdC0+c2V0TGlnaHRTb3VyY2UobGlnaHQpOworfQorCit2b2lk
IFNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnRJbXBsOjpjbG9zZSgpCit7CisgICAgLy91cGRh
dGVMaWdodHMoKTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCkluZGV4OiBrc3ZnMi9T
VkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50SW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtTnB1IGtz
dmcyL1NWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnRJbXBsLmgKLS0tIGtzdmcyL1NWR0ZFU3Bl
Y3VsYXJMaWdodGluZ0VsZW1lbnRJbXBsLmgJMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMAorKysg
a3N2ZzIvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudEltcGwuaAkxMSBOb3YgMjAwNSAyMzoz
NjowMCAtMDAwMApAQCAtMCwwICsxLDU4IEBACisvL0NvcHlyaWdodCBmb28KKworI2lmbmRlZiBL
U1ZHX1NWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnRJbXBsX0gKKyNkZWZpbmUgS1NWR19TVkdG
RVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50SW1wbF9ICisKKyNpbmNsdWRlICJTVkdGaWx0ZXJQcmlt
aXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXNJbXBsLmgiCisKK2NsYXNzIEtDYW52YXNGRVNwZWN1bGFy
TGlnaHRpbmc7CitjbGFzcyBLQ2FudmFzRmlsdGVyRWZmZWN0OworCituYW1lc3BhY2UgS1NWRwor
eworICAgIGNsYXNzIFNWR0FuaW1hdGVkTnVtYmVySW1wbDsKKyAgICBjbGFzcyBTVkdBbmltYXRl
ZFN0cmluZ0ltcGw7CisgICAgY2xhc3MgU1ZHQW5pbWF0ZWRDb2xvckltcGw7CisgICAgCisgICAg
Y2xhc3MgU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudEltcGwgOiBwdWJsaWMgU1ZHRmlsdGVy
UHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzSW1wbAorICAgIHsKK3B1YmxpYzoKKyAgICAgICAg
U1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudEltcGwoS0RPTTo6RG9jdW1lbnRQdHIgKmRvYywg
S0RPTTo6Tm9kZUltcGw6OklkIGlkLCBLRE9NOjpET01TdHJpbmdJbXBsICpwcmVmaXgpOworICAg
ICAgICB2aXJ0dWFsIH5TVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50SW1wbCgpOworICAgICAg
ICAKKyAgICAgICAgLy8gJ1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudCcgZnVuY3Rpb25zCisg
ICAgICAgIFNWR0FuaW1hdGVkU3RyaW5nSW1wbCAqaW4xKCkgY29uc3Q7CisgICAgICAgIFNWR0Fu
aW1hdGVkTnVtYmVySW1wbCAqc3BlY3VsYXJDb25zdGFudCgpIGNvbnN0OworICAgICAgICBTVkdB
bmltYXRlZE51bWJlckltcGwgKnNwZWN1bGFyRXhwb25lbnQoKSBjb25zdDsKKyAgICAgICAgU1ZH
QW5pbWF0ZWROdW1iZXJJbXBsICpzdXJmYWNlU2NhbGUoKSBjb25zdDsKKyAgICAgICAgU1ZHQW5p
bWF0ZWROdW1iZXJJbXBsICprZXJuZWxVbml0TGVuZ3RoWCgpIGNvbnN0OworICAgICAgICBTVkdB
bmltYXRlZE51bWJlckltcGwgKmtlcm5lbFVuaXRMZW5ndGhZKCkgY29uc3Q7CisgICAgICAgIFNW
R0FuaW1hdGVkQ29sb3JJbXBsICAqbGlnaHRpbmdDb2xvcigpIGNvbnN0OworICAgICAgICAKKyAg
ICAgICAgLy8gRGVyaXZlZCBmcm9tOiAnRWxlbWVudEltcGwnCisgICAgICAgIHZpcnR1YWwgdm9p
ZCBwYXJzZUF0dHJpYnV0ZShLRE9NOjpBdHRyaWJ1dGVJbXBsICphdHRyKTsKKyAgICAgICAgCisg
ICAgICAgIHZpcnR1YWwgS0NhbnZhc0l0ZW0gKmNyZWF0ZUNhbnZhc0l0ZW0oS0NhbnZhcyAqY2Fu
dmFzLCBLUmVuZGVyaW5nU3R5bGUgKnN0eWxlKSBjb25zdDsKKyAgICAgICAgCisgICAgICAgIHZp
cnR1YWwgYm9vbCBpbXBsZW1lbnRzQ2FudmFzSXRlbSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0K
KyAgICAgICAgCisgICAgICAgIHZpcnR1YWwgS0NhbnZhc0ZpbHRlckVmZmVjdCAqZmlsdGVyRWZm
ZWN0KCkgY29uc3Q7CisgICAgICAgIAorICAgICAgICB2aXJ0dWFsIHZvaWQgY2xvc2UoKTsKK3By
aXZhdGU6CisgICAgICAgICAgICBtdXRhYmxlIFNWR0FuaW1hdGVkU3RyaW5nSW1wbCAqbV9pbjE7
CisgICAgICAgIG11dGFibGUgU1ZHQW5pbWF0ZWROdW1iZXJJbXBsICptX3NwZWN1bGFyQ29uc3Rh
bnQ7CisgICAgICAgIG11dGFibGUgU1ZHQW5pbWF0ZWROdW1iZXJJbXBsICptX3NwZWN1bGFyRXhw
b25lbnQ7CisgICAgICAgIG11dGFibGUgU1ZHQW5pbWF0ZWROdW1iZXJJbXBsICptX3N1cmZhY2VT
Y2FsZTsKKyAgICAgICAgbXV0YWJsZSBTVkdBbmltYXRlZENvbG9ySW1wbCAgKm1fbGlnaHRpbmdD
b2xvcjsKKyAgICAgICAgbXV0YWJsZSBTVkdBbmltYXRlZE51bWJlckltcGwgKm1fa2VybmVsVW5p
dExlbmd0aFg7CisgICAgICAgIG11dGFibGUgU1ZHQW5pbWF0ZWROdW1iZXJJbXBsICptX2tlcm5l
bFVuaXRMZW5ndGhZOworICAgICAgICAvL25lZWQgb3RoZXIgcHJvcGVydGllcyBoZXJlLi4uCisg
ICAgICAgIG11dGFibGUgS0NhbnZhc0ZFU3BlY3VsYXJMaWdodGluZyAqbV9maWx0ZXJFZmZlY3Q7
CisgICAgICAgIAorICAgICAgICAvL2xpZ2h0IG1hbmFnbWVudAorICAgICAgICB2b2lkIHVwZGF0
ZUxpZ2h0cygpIGNvbnN0OworICAgIH07Cit9OworCisjZW5kaWYKSW5kZXg6IGtzdmcyL1NWR0ZF
U3BvdExpZ2h0RWxlbWVudEltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtTnB1IGtzdmcyL1NWR0ZF
U3BvdExpZ2h0RWxlbWVudEltcGwuY3BwCi0tLSBrc3ZnMi9TVkdGRVNwb3RMaWdodEVsZW1lbnRJ
bXBsLmNwcAkxIEphbiAxOTcwIDAwOjAwOjAwIC0wMDAwCisrKyBrc3ZnMi9TVkdGRVNwb3RMaWdo
dEVsZW1lbnRJbXBsLmNwcAkxMSBOb3YgMjAwNSAyMzozNjowMCAtMDAwMApAQCAtMCwwICsxLDIx
IEBACisvKgorICogIFNWR0ZFU3BvdExpZ2h0RWxlbWVudEltcGwuY3BwCisgKiAgV2ViQ29yZQor
ICoKKyAqICBDcmVhdGVkIGJ5IE9saXZlciBvbiA4LzExLzA1LgorICogIENvcHlyaWdodCAyMDA1
IE9saXZlciBIdW50LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqLworCisjaW5jbHVkZSAi
U1ZHRkVTcG90TGlnaHRFbGVtZW50SW1wbC5oIgorCit1c2luZyBuYW1lc3BhY2UgS1NWRzsKKwor
U1ZHRkVTcG90TGlnaHRFbGVtZW50SW1wbDo6U1ZHRkVTcG90TGlnaHRFbGVtZW50SW1wbChLRE9N
OjpEb2N1bWVudFB0ciAqZG9jLCBLRE9NOjpOb2RlSW1wbDo6SWQgaWQsIEtET006OkRPTVN0cmlu
Z0ltcGwgKnByZWZpeCkgOiAKK1NWR0ZFTGlnaHRFbGVtZW50SW1wbChkb2MsIGlkLCBwcmVmaXgp
Cit7Cit9CisKK1NWR0ZFU3BvdExpZ2h0RWxlbWVudEltcGw6On5TVkdGRVNwb3RMaWdodEVsZW1l
bnRJbXBsKCkKK3sKK30KSW5kZXg6IGtzdmcyL1NWR0ZFU3BvdExpZ2h0RWxlbWVudEltcGwuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09CmRpZmYgLU5wdSBrc3ZnMi9TVkdGRVNwb3RMaWdodEVsZW1lbnRJbXBsLmgKLS0t
IGtzdmcyL1NWR0ZFU3BvdExpZ2h0RWxlbWVudEltcGwuaAkxIEphbiAxOTcwIDAwOjAwOjAwIC0w
MDAwCisrKyBrc3ZnMi9TVkdGRVNwb3RMaWdodEVsZW1lbnRJbXBsLmgJMjAgTm92IDIwMDUgMTM6
MDQ6MjEgLTAwMDAKQEAgLTAsMCArMSwyNiBAQAorLyoKKyAqICBTVkdGRVNwb3RMaWdodEVsZW1l
bnRJbXBsLmgKKyAqICBXZWJDb3JlCisgKgorICogIENyZWF0ZWQgYnkgT2xpdmVyIG9uIDgvMTEv
MDUuCisgKiAgQ29weXJpZ2h0IDIwMDUgT2xpdmVyIEh1bnQuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICovCisKKworI2lmbmRlZiBLU1ZHX1NWR0ZFU3BvdExpZ2h0RWxlbWVudEltcGxfSAor
I2RlZmluZSBLU1ZHX1NWR0ZFU3BvdExpZ2h0RWxlbWVudEltcGxfSAorCisjaW5jbHVkZSAiU1ZH
RkVMaWdodEVsZW1lbnRJbXBsLmgiCisKK25hbWVzcGFjZSBLU1ZHCit7CisgICAgY2xhc3MgU1ZH
RkVTcG90TGlnaHRFbGVtZW50SW1wbCA6IHB1YmxpYyBTVkdGRUxpZ2h0RWxlbWVudEltcGwKKyAg
ICB7CisgICAgcHVibGljOgorICAgICAgICBTVkdGRVNwb3RMaWdodEVsZW1lbnRJbXBsKEtET006
OkRvY3VtZW50UHRyICpkb2MsIEtET006Ok5vZGVJbXBsOjpJZCBpZCwgS0RPTTo6RE9NU3RyaW5n
SW1wbCAqcHJlZml4KTsKKyAgICAgICAgdmlydHVhbCB+U1ZHRkVTcG90TGlnaHRFbGVtZW50SW1w
bCgpOworICAgIH07Cit9OworCisjZW5kaWYKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCklu
ZGV4OiBrc3ZnMi9zdmcvU1ZHRG9jdW1lbnRJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAv
Y3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9zdmcvU1ZHRG9jdW1lbnRJbXBsLmNwcCx2CnJldHJp
ZXZpbmcgcmV2aXNpb24gMS4xMQpkaWZmIC1wIC11IC1yMS4xMSBrc3ZnMi9zdmcvU1ZHRG9jdW1l
bnRJbXBsLmNwcAotLS0ga3N2ZzIvc3ZnL1NWR0RvY3VtZW50SW1wbC5jcHAJOCBPY3QgMjAwNSAw
OToxODoxNSAtMDAwMAkxLjExCisrKyBrc3ZnMi9zdmcvU1ZHRG9jdW1lbnRJbXBsLmNwcAkyMCBO
b3YgMjAwNSAxMzoyNTo1OCAtMDAwMApAQCAtMTA3LDcgKzEwNywxMiBAQAogI2luY2x1ZGUgIlNW
R0xpbmVhckdyYWRpZW50RWxlbWVudEltcGwuaCIKICNpbmNsdWRlICJTVkdSYWRpYWxHcmFkaWVu
dEVsZW1lbnRJbXBsLmgiCiAjaW5jbHVkZSAiU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnRJbXBs
LmgiCisjaW5jbHVkZSAiU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50SW1wbC5oIgorI2luY2x1
ZGUgIlNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnRJbXBsLmgiCiAjaW5jbHVkZSAiU1ZHRkVD
b21wb25lbnRUcmFuc2ZlckVsZW1lbnRJbXBsLmgiCisjaW5jbHVkZSAiU1ZHRkVQb2ludExpZ2h0
RWxlbWVudEltcGwuaCIKKyNpbmNsdWRlICJTVkdGRURpc3RhbnRMaWdodEVsZW1lbnRJbXBsLmgi
CisjaW5jbHVkZSAiU1ZHRkVTcG90TGlnaHRFbGVtZW50SW1wbC5oIgogCiAjaW5jbHVkZSAic3Zn
dGFncy5jIgogI2luY2x1ZGUgInN2Z3RhZ3MuaCIKQEAgLTQzNSw2ICs0NDAsMzEgQEAgU1ZHRWxl
bWVudEltcGwgKlNWR0RvY3VtZW50SW1wbDo6Y3JlYXRlUwogICAgICAgICAgICAgZWxlbWVudCA9
IG5ldyBTVkdDdXJzb3JFbGVtZW50SW1wbChkb2NQdHIoKSwgaWQsIHByZWZpeCk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQorICAgICAgICBjYXNlIElEX0ZFRElGRlVTRUxJR0hUSU5H
OgorICAgICAgICB7CisgICAgICAgICAgICBlbGVtZW50ID0gbmV3IFNWR0ZFRGlmZnVzZUxpZ2h0
aW5nRWxlbWVudEltcGwoZG9jUHRyKCksIGlkLCBwcmVmaXgpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBJRF9GRVBPSU5UTElHSFQ6CisgICAgICAgIHsKKyAg
ICAgICAgICAgIGVsZW1lbnQgPSBuZXcgU1ZHRkVQb2ludExpZ2h0RWxlbWVudEltcGwoZG9jUHRy
KCksIGlkLCBwcmVmaXgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg
Y2FzZSBJRF9GRVNQT1RMSUdIVDoKKyAgICAgICAgeworICAgICAgICAgICAgZWxlbWVudCA9IG5l
dyBTVkdGRVNwb3RMaWdodEVsZW1lbnRJbXBsKGRvY1B0cigpLCBpZCwgcHJlZml4KTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgSURfRkVESVNUQU5UTElHSFQ6
CisgICAgICAgIHsKKyAgICAgICAgICAgIGVsZW1lbnQgPSBuZXcgU1ZHRkVEaXN0YW50TGlnaHRF
bGVtZW50SW1wbChkb2NQdHIoKSwgaWQsIHByZWZpeCk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgICAgICBjYXNlIElEX0ZFU1BFQ1VMQVJMSUdIVElORzoKKyAgICAgICAgewor
ICAgICAgICAgICAgZWxlbWVudCA9IG5ldyBTVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50SW1w
bChkb2NQdHIoKSwgaWQsIHByZWZpeCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQog
ICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgZWxlbWVudCA9IDA7CiAgICAgfTsKSW5kZXg6
IGtzdmcyL3N2Zy9TVkdGRUNvbXBvc2l0ZUVsZW1lbnRJbXBsLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBm
aWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9zdmcvU1ZHRkVDb21wb3NpdGVFbGVtZW50
SW1wbC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNgpkaWZmIC1wIC11IC1yMS42IGtzdmcy
L3N2Zy9TVkdGRUNvbXBvc2l0ZUVsZW1lbnRJbXBsLmNwcAotLS0ga3N2ZzIvc3ZnL1NWR0ZFQ29t
cG9zaXRlRWxlbWVudEltcGwuY3BwCTUgT2N0IDIwMDUgMDU6MzU6MjAgLTAwMDAJMS42CisrKyBr
c3ZnMi9zdmcvU1ZHRkVDb21wb3NpdGVFbGVtZW50SW1wbC5jcHAJMjAgTm92IDIwMDUgMTM6MjU6
NTkgLTAwMDAKQEAgLTEzMSw3ICsxMzEsNyBAQCB2b2lkIFNWR0ZFQ29tcG9zaXRlRWxlbWVudElt
cGw6OnBhcnNlQXR0CiAgICAgICAgICAgICAgICAgX29wZXJhdG9yKCktPnNldEJhc2VWYWwoU1ZH
X0ZFQ09NUE9TSVRFX09QRVJBVE9SX0FUT1ApOwogICAgICAgICAgICAgZWxzZSBpZih2YWx1ZSA9
PSAieG9yIikKICAgICAgICAgICAgICAgICBfb3BlcmF0b3IoKS0+c2V0QmFzZVZhbChTVkdfRkVD
T01QT1NJVEVfT1BFUkFUT1JfWE9SKTsKLSAgICAgICAgICAgIGVsc2UgaWYodmFsdWUgPT0gImFy
aXRobWF0aWMiKQorICAgICAgICAgICAgZWxzZSBpZiAodmFsdWUgPT0gImFyaXRobWV0aWMiKQog
ICAgICAgICAgICAgICAgIF9vcGVyYXRvcigpLT5zZXRCYXNlVmFsKFNWR19GRUNPTVBPU0lURV9P
UEVSQVRPUl9BUklUSE1FVElDKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0x
NDUsNiArMTQ1LDI2IEBAIHZvaWQgU1ZHRkVDb21wb3NpdGVFbGVtZW50SW1wbDo6cGFyc2VBdHQK
ICAgICAgICAgICAgIGluMigpLT5zZXRCYXNlVmFsKHZhbHVlLmhhbmRsZSgpKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CisgICAgICAgIGNhc2UgQVRUUl9LMToKKyAgICAgICAgewor
ICAgICAgICAgICAgazEoKS0+c2V0QmFzZVZhbCh2YWx1ZS5zdHJpbmcoKS50b0RvdWJsZSgpKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgQVRUUl9LMjoKKyAg
ICAgICAgeworICAgICAgICAgICAgazIoKS0+c2V0QmFzZVZhbCh2YWx1ZS5zdHJpbmcoKS50b0Rv
dWJsZSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgQVRU
Ul9LMzoKKyAgICAgICAgeworICAgICAgICAgICAgazMoKS0+c2V0QmFzZVZhbCh2YWx1ZS5zdHJp
bmcoKS50b0RvdWJsZSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAg
IGNhc2UgQVRUUl9LNDoKKyAgICAgICAgeworICAgICAgICAgICAgazQoKS0+c2V0QmFzZVZhbCh2
YWx1ZS5zdHJpbmcoKS50b0RvdWJsZSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgIHsKICAgICAgICAgICAgIFNWR0ZpbHRlclByaW1p
dGl2ZVN0YW5kYXJkQXR0cmlidXRlc0ltcGw6OnBhcnNlQXR0cmlidXRlKGF0dHIpOwo=
</data>
<flag name="review"
          id="873"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>4824</attachid>
            <date>2005-11-27 19:57:04 -0800</date>
            <delta_ts>2005-11-27 20:47:32 -0800</delta_ts>
            <desc>Yet another update to the lighting patch</desc>
            <filename>lighting.patch</filename>
            <type>text/plain</type>
            <size>145865</size>
            <attacher name="Oliver Hunt">oliver</attacher>
            
              <data encoding="base64">SW5kZXg6IGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL2RldmljZS9xdWFydHovZmlsdGVy
cy9kZXZpY2UvcXVhcnR6L2ZpbHRlcnMvQ1ZTL0VudHJpZXMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpkaWZmIC1OcHUg
a2NhbnZhcy9kZXZpY2UvcXVhcnR6L2ZpbHRlcnMvZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL2Rldmlj
ZS9xdWFydHovZmlsdGVycy9DVlMvRW50cmllcwotLS0ga2NhbnZhcy9kZXZpY2UvcXVhcnR6L2Zp
bHRlcnMvZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL2RldmljZS9xdWFydHovZmlsdGVycy9DVlMvRW50
cmllcwkxIEphbiAxOTcwIDAwOjAwOjAwIC0wMDAwCisrKyBrY2FudmFzL2RldmljZS9xdWFydHov
ZmlsdGVycy9kZXZpY2UvcXVhcnR6L2ZpbHRlcnMvZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL0NWUy9F
bnRyaWVzCTIzIE5vdiAyMDA1IDEwOjE4OjQzIC0wMDAwCkBAIC0wLDAgKzEgQEAKK0QKSW5kZXg6
IGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL2RldmljZS9xdWFydHovZmlsdGVycy9kZXZp
Y2UvcXVhcnR6L2ZpbHRlcnMvQ1ZTL1JlcG9zaXRvcnkKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpkaWZmIC1OcHUga2Nh
bnZhcy9kZXZpY2UvcXVhcnR6L2ZpbHRlcnMvZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL2RldmljZS9x
dWFydHovZmlsdGVycy9DVlMvUmVwb3NpdG9yeQotLS0ga2NhbnZhcy9kZXZpY2UvcXVhcnR6L2Zp
bHRlcnMvZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL2RldmljZS9xdWFydHovZmlsdGVycy9DVlMvUmVw
b3NpdG9yeQkxIEphbiAxOTcwIDAwOjAwOjAwIC0wMDAwCisrKyBrY2FudmFzL2RldmljZS9xdWFy
dHovZmlsdGVycy9kZXZpY2UvcXVhcnR6L2ZpbHRlcnMvZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL0NW
Uy9SZXBvc2l0b3J5CTIzIE5vdiAyMDA1IDEwOjE4OjQzIC0wMDAwCkBAIC0wLDAgKzEgQEAKK1NW
R1N1cHBvcnQva2NhbnZhcy9kZXZpY2UvcXVhcnR6L2ZpbHRlcnMKSW5kZXg6IGtjYW52YXMvZGV2
aWNlL3F1YXJ0ei9maWx0ZXJzL2RldmljZS9xdWFydHovZmlsdGVycy9kZXZpY2UvcXVhcnR6L2Zp
bHRlcnMvQ1ZTL1Jvb3QKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQpkaWZmIC1OcHUga2NhbnZhcy9kZXZpY2UvcXVhcnR6
L2ZpbHRlcnMvZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL2RldmljZS9xdWFydHovZmlsdGVycy9DVlMv
Um9vdAotLS0ga2NhbnZhcy9kZXZpY2UvcXVhcnR6L2ZpbHRlcnMvZGV2aWNlL3F1YXJ0ei9maWx0
ZXJzL2RldmljZS9xdWFydHovZmlsdGVycy9DVlMvUm9vdAkxIEphbiAxOTcwIDAwOjAwOjAwIC0w
MDAwCisrKyBrY2FudmFzL2RldmljZS9xdWFydHovZmlsdGVycy9kZXZpY2UvcXVhcnR6L2ZpbHRl
cnMvZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL0NWUy9Sb290CTIzIE5vdiAyMDA1IDEwOjE4OjQzIC0w
MDAwCkBAIC0wLDAgKzEgQEAKKzpwc2VydmVyOmFub255bW91c0Bhbm9uY3ZzLm9wZW5zb3VyY2Uu
YXBwbGUuY29tOi9jdnMvcm9vdApJbmRleDoga2NhbnZhcy9kZXZpY2UvcXVhcnR6L2RldmljZS9x
dWFydHovZmlsdGVycy9XS0FyaXRobWV0aWNGaWx0ZXIuY2lrZXJuZWwKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpkaWZm
IC1OcHUga2NhbnZhcy9kZXZpY2UvcXVhcnR6L2RldmljZS9xdWFydHovZmlsdGVycy9XS0FyaXRo
bWV0aWNGaWx0ZXIuY2lrZXJuZWwKLS0tIGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9kZXZpY2UvcXVh
cnR6L2ZpbHRlcnMvV0tBcml0aG1ldGljRmlsdGVyLmNpa2VybmVsCTEgSmFuIDE5NzAgMDA6MDA6
MDAgLTAwMDAKKysrIGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9kZXZpY2UvcXVhcnR6L2ZpbHRlcnMv
V0tBcml0aG1ldGljRmlsdGVyLmNpa2VybmVsCTI4IE5vdiAyMDA1IDAzOjM3OjA2IC0wMDAwCkBA
IC0wLDAgKzEsNyBAQAora2VybmVsIHZlYzQgYXJpdGhtZXRpY0NvbXBvc2l0ZShzYW1wbGVyIGlu
MSwgc2FtcGxlciBpbjIsIGZsb2F0IGsxLCBmbG9hdCBrMiwgZmxvYXQgazMsIGZsb2F0IGs0KQor
eworICAgIHZlYzQgdmluMSA9IHNhbXBsZShpbjEsIHNhbXBsZXJDb29yZChpbjEpKTsKKyAgICB2
ZWM0IHZpbjIgPSBzYW1wbGUoaW4yLCBzYW1wbGVyQ29vcmQoaW4yKSk7CisgICAgdmVjNCByZXMg
PSBrMSp2aW4xKnZpbjIgKyBrMip2aW4xICsgazMqdmluMiArIHZlYzQoazQpOworICAgIHJldHVy
biByZXM7Cit9CkluZGV4OiBrY2FudmFzL2RldmljZS9xdWFydHovZGV2aWNlL3F1YXJ0ei9maWx0
ZXJzL1dLQXJpdGhtZXRpY0ZpbHRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtTnB1IGtjYW52YXMvZGV2
aWNlL3F1YXJ0ei9kZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tBcml0aG1ldGljRmlsdGVyLmgKLS0t
IGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9kZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tBcml0aG1ldGlj
RmlsdGVyLmgJMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMAorKysga2NhbnZhcy9kZXZpY2UvcXVh
cnR6L2RldmljZS9xdWFydHovZmlsdGVycy9XS0FyaXRobWV0aWNGaWx0ZXIuaAkyOCBOb3YgMjAw
NSAwMzowOToxNyAtMDAwMApAQCAtMCwwICsxLDM3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA1IE9saXZlciBIdW50IDxvamgxNkBzdHVkZW50LmNhbnRlcmJ1cnkuYWMubno+LiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVU
SE9SIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbXBvcnQgPFF1YXJ0ekNvcmUvQ29yZUltYWdlLmg+
CisKK0BpbnRlcmZhY2UgV0tBcml0aG1ldGljRmlsdGVyIDogQ0lGaWx0ZXIgeworICAgIENJSW1h
Z2UgICppbnB1dEltYWdlOworICAgIENJSW1hZ2UgICppbnB1dEJhY2tncm91bmRJbWFnZTsKKyAg
ICBOU051bWJlciAqaW5wdXRLMTsKKyAgICBOU051bWJlciAqaW5wdXRLMjsKKyAgICBOU051bWJl
ciAqaW5wdXRLMzsKKyAgICBOU051bWJlciAqaW5wdXRLNDsKK30KKworQGVuZApJbmRleDoga2Nh
bnZhcy9kZXZpY2UvcXVhcnR6L2RldmljZS9xdWFydHovZmlsdGVycy9XS0FyaXRobWV0aWNGaWx0
ZXIubQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09CmRpZmYgLU5wdSBrY2FudmFzL2RldmljZS9xdWFydHovZGV2aWNlL3F1
YXJ0ei9maWx0ZXJzL1dLQXJpdGhtZXRpY0ZpbHRlci5tCi0tLSBrY2FudmFzL2RldmljZS9xdWFy
dHovZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL1dLQXJpdGhtZXRpY0ZpbHRlci5tCTEgSmFuIDE5NzAg
MDA6MDA6MDAgLTAwMDAKKysrIGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9kZXZpY2UvcXVhcnR6L2Zp
bHRlcnMvV0tBcml0aG1ldGljRmlsdGVyLm0JMjggTm92IDIwMDUgMDM6MDk6MTcgLTAwMDAKQEAg
LTAsMCArMSw5MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBPbGl2ZXIgSHVudCA8b2po
MTZAc3R1ZGVudC5jYW50ZXJidXJ5LmFjLm56Pi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaW1wb3J0ICJXS0FyaXRobWV0aWNGaWx0ZXIuaCIKKworc3RhdGljIENJS2VybmVsICph
cml0aG1ldGljRmlsdGVyID0gbmlsOworCitAaW1wbGVtZW50YXRpb24gV0tBcml0aG1ldGljRmls
dGVyCisrICh2b2lkKWluaXRpYWxpemUKK3sKKyAgICBbQ0lGaWx0ZXIgcmVnaXN0ZXJGaWx0ZXJO
YW1lOkAiV0tBcml0aG1ldGljRmlsdGVyIiAgCisgICAgICAgICAgICAgICAgICAgICBjb25zdHJ1
Y3Rvcjogc2VsZgorICAgICAgICAgICAgICAgICBjbGFzc0F0dHJpYnV0ZXM6IFtOU0RpY3Rpb25h
cnkgZGljdGlvbmFyeVdpdGhPYmplY3RzQW5kS2V5czoKKyAgICAgICAgICAgICAgICAgICAgIEAi
V2ViS2l0IEFyaXRobWV0aWMgRmlsdGVyIiwga0NJQXR0cmlidXRlRmlsdGVyRGlzcGxheU5hbWUs
CisgICAgICAgICAgICAgICAgICAgICBbTlNBcnJheSBhcnJheVdpdGhPYmplY3RzOiBrQ0lDYXRl
Z29yeVN0eWxpemUsIGtDSUNhdGVnb3J5VmlkZW8sCisgICAgICAgICAgICAgICAgICAgICAgICAg
a0NJQ2F0ZWdvcnlTdGlsbEltYWdlLCBrQ0lDYXRlZ29yeU5vblNxdWFyZVBpeGVscyxuaWxdLCBr
Q0lBdHRyaWJ1dGVGaWx0ZXJDYXRlZ29yaWVzLAorICAgICAgICAgICAgICAgICAgICAgW05TRGlj
dGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVjdHNBbmRLZXlzOgorICAgICAgICAgICAgICAgICAg
ICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoRG91YmxlOjAuMF0sIGtDSUF0dHJpYnV0ZU1pbiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aERvdWJsZTowLjBd
LCBrQ0lBdHRyaWJ1dGVEZWZhdWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgIFtOU051bWJl
ciBudW1iZXJXaXRoRG91YmxlOjEuMF0sIGtDSUF0dHJpYnV0ZUlkZW50aXR5LAorICAgICAgICAg
ICAgICAgICAgICAgICAgIGtDSUF0dHJpYnV0ZVR5cGVTY2FsYXIsIGtDSUF0dHJpYnV0ZVR5cGUs
CisgICAgICAgICAgICAgICAgICAgICAgICAgbmlsXSwgQCJpbnB1dEsxIiwgICAgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgICAgICBbTlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnlXaXRo
T2JqZWN0c0FuZEtleXM6CisgICAgICAgICAgICAgICAgICAgICAgICAgW05TTnVtYmVyIG51bWJl
cldpdGhEb3VibGU6MC4wXSwga0NJQXR0cmlidXRlTWluLAorICAgICAgICAgICAgICAgICAgICAg
ICAgIFtOU051bWJlciBudW1iZXJXaXRoRG91YmxlOjAuMF0sIGtDSUF0dHJpYnV0ZURlZmF1bHQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhEb3VibGU6MS4w
XSwga0NJQXR0cmlidXRlSWRlbnRpdHksCisgICAgICAgICAgICAgICAgICAgICAgICAga0NJQXR0
cmlidXRlVHlwZVNjYWxhciwga0NJQXR0cmlidXRlVHlwZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICBuaWxdLCBAImlucHV0SzIiLCAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAg
ICBbTlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnlXaXRoT2JqZWN0c0FuZEtleXM6CisgICAgICAgICAg
ICAgICAgICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhEb3VibGU6MC4wXSwga0NJQXR0cmli
dXRlTWluLAorICAgICAgICAgICAgICAgICAgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoRG91
YmxlOjAuMF0sIGtDSUF0dHJpYnV0ZURlZmF1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
W05TTnVtYmVyIG51bWJlcldpdGhEb3VibGU6MS4wXSwga0NJQXR0cmlidXRlSWRlbnRpdHksCisg
ICAgICAgICAgICAgICAgICAgICAgICAga0NJQXR0cmlidXRlVHlwZVNjYWxhciwga0NJQXR0cmli
dXRlVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBuaWxdLCBAImlucHV0SzMiLCAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICBbTlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnlX
aXRoT2JqZWN0c0FuZEtleXM6CisgICAgICAgICAgICAgICAgICAgICAgICAgW05TTnVtYmVyIG51
bWJlcldpdGhEb3VibGU6MC4wXSwga0NJQXR0cmlidXRlTWluLAorICAgICAgICAgICAgICAgICAg
ICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoRG91YmxlOjAuMF0sIGtDSUF0dHJpYnV0ZURlZmF1
bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhEb3VibGU6
MS4wXSwga0NJQXR0cmlidXRlSWRlbnRpdHksCisgICAgICAgICAgICAgICAgICAgICAgICAga0NJ
QXR0cmlidXRlVHlwZVNjYWxhciwga0NJQXR0cmlidXRlVHlwZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICBuaWxdLCBAImlucHV0SzQiLAorICAgICAgICAgICAgICAgICAgICAgbmlsXV07Cit9
CisKKysgKENJRmlsdGVyICopZmlsdGVyV2l0aE5hbWU6KE5TU3RyaW5nICopbmFtZQoreworICAg
IENJRmlsdGVyICpmaWx0ZXI7CisgICAgZmlsdGVyID0gW1tzZWxmIGFsbG9jXSBpbml0XTsKKyAg
ICByZXR1cm4gW2ZpbHRlciBhdXRvcmVsZWFzZV07Cit9CisKKy0gKGlkKWluaXQKK3sKKyAgICBp
ZiAoIWFyaXRobWV0aWNGaWx0ZXIpIHsKKyAgICAgICAgTlNCdW5kbGUgKmJ1bmRsZSA9IFtOU0J1
bmRsZSBidW5kbGVGb3JDbGFzczpbc2VsZiBjbGFzc11dOworICAgICAgICBOU1N0cmluZyAqa2Vy
bmVsRmlsZSA9IFtidW5kbGUgcGF0aEZvclJlc291cmNlOkAiV0tBcml0aG1ldGljRmlsdGVyIiBv
ZlR5cGU6QCJjaWtlcm5lbCJdOworICAgICAgICBOU1N0cmluZyAqY29kZSA9IFtOU1N0cmluZyBz
dHJpbmdXaXRoQ29udGVudHNPZkZpbGU6a2VybmVsRmlsZV07CisgICAgICAgIE5TQXJyYXkgKmtl
cm5lbHMgPSBbQ0lLZXJuZWwga2VybmVsc1dpdGhTdHJpbmc6Y29kZV07CisgICAgICAgIGFyaXRo
bWV0aWNGaWx0ZXIgPSBbW2tlcm5lbHMgb2JqZWN0QXRJbmRleDowXSByZXRhaW5dOworICAgIH0K
KyAgICByZXR1cm4gW3N1cGVyIGluaXRdOworfQorCistIChDSUltYWdlICopb3V0cHV0SW1hZ2UK
K3sKKyAgICByZXR1cm4gW3NlbGYgYXBwbHk6YXJpdGhtZXRpY0ZpbHRlciwgaW5wdXRJbWFnZSwg
aW5wdXRCYWNrZ3JvdW5kSW1hZ2UsIGlucHV0SzEsIGlucHV0SzIsIGlucHV0SzMsCisgICAgICAg
IGlucHV0SzQsIG5pbF07Cit9CisKK0BlbmQKSW5kZXg6IGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9k
ZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tDb252b2x2ZU1hdHJpeEZpbHRlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
ZGlmZiAtTnB1IGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9kZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tD
b252b2x2ZU1hdHJpeEZpbHRlci5oCi0tLSBrY2FudmFzL2RldmljZS9xdWFydHovZGV2aWNlL3F1
YXJ0ei9maWx0ZXJzL1dLQ29udm9sdmVNYXRyaXhGaWx0ZXIuaAkxIEphbiAxOTcwIDAwOjAwOjAw
IC0wMDAwCisrKyBrY2FudmFzL2RldmljZS9xdWFydHovZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL1dL
Q29udm9sdmVNYXRyaXhGaWx0ZXIuaAkxMSBOb3YgMjAwNSAyMzozNjowMCAtMDAwMApAQCAtMCww
ICsxLDM1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1IEFwcGxlIENvbXB1dGVyLCBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW1wb3J0IDxRdWFydHpDb3JlL0NvcmVJ
bWFnZS5oPgorCitAaW50ZXJmYWNlIFdLQ29udm9sdmVNYXRyaXhGaWx0ZXI6IENJRmlsdGVyCit7
CisgICAgQ0lJbWFnZSAgICppbnB1dEltYWdlOworICAgIENJSW1hZ2UgICAqaW5wdXRLZXJuZWxN
YXRyaXg7CisgICAgTlNOdW1iZXIgICppbnB1dERpdmlzb3I7CisgICAgTlNOdW1iZXIgICppbnB1
dEJpYXM7Cit9CitAZW5kCkluZGV4OiBrY2FudmFzL2RldmljZS9xdWFydHovZGV2aWNlL3F1YXJ0
ei9maWx0ZXJzL1dLQ29udm9sdmVNYXRyaXhGaWx0ZXIubQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CmRpZmYgLU5wdSBr
Y2FudmFzL2RldmljZS9xdWFydHovZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL1dLQ29udm9sdmVNYXRy
aXhGaWx0ZXIubQotLS0ga2NhbnZhcy9kZXZpY2UvcXVhcnR6L2RldmljZS9xdWFydHovZmlsdGVy
cy9XS0NvbnZvbHZlTWF0cml4RmlsdGVyLm0JMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMAorKysg
a2NhbnZhcy9kZXZpY2UvcXVhcnR6L2RldmljZS9xdWFydHovZmlsdGVycy9XS0NvbnZvbHZlTWF0
cml4RmlsdGVyLm0JMjAgTm92IDIwMDUgMTM6MDQ6MjEgLTAwMDAKQEAgLTAsMCArMSw5MyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2ltcG9ydCAiV0tDb252b2x2ZU1hdHJpeEZpbHRlci5oIgor
CitzdGF0aWMgQ0lLZXJuZWwgKmNvbnZvbHZlTWF0cml4S2VybmVsID0gbmlsOworCitAaW1wbGVt
ZW50YXRpb24gV0tDb252b2x2ZU1hdHJpeEZpbHRlcgorCisrICh2b2lkKWluaXRpYWxpemUKK3sK
KyAgICBbQ0lGaWx0ZXIgcmVnaXN0ZXJGaWx0ZXJOYW1lOkAiV0tDb252b2x2ZU1hdHJpeCIgIAor
ICAgICAgICBjb25zdHJ1Y3Rvcjogc2VsZgorICAgICAgICBjbGFzc0F0dHJpYnV0ZXM6IFtOU0Rp
Y3Rpb25hcnkgZGljdGlvbmFyeVdpdGhPYmplY3RzQW5kS2V5czoKKyAgICAgICAgIEAiV2ViS2l0
IENvbnZvbHZlIE1hdHJpeCIsIGtDSUF0dHJpYnV0ZUZpbHRlckRpc3BsYXlOYW1lLAorICAgICAg
ICBbTlNBcnJheSBhcnJheVdpdGhPYmplY3RzOiBrQ0lDYXRlZ29yeUJsdXIsIGtDSUNhdGVnb3J5
VmlkZW8sCisgICAgICAgICAgICBrQ0lDYXRlZ29yeVN0aWxsSW1hZ2UsIGtDSUNhdGVnb3J5Tm9u
U3F1YXJlUGl4ZWxzLG5pbF0sIGtDSUF0dHJpYnV0ZUZpbHRlckNhdGVnb3JpZXMsCisgICAgICAg
IFtOU0RpY3Rpb25hcnkgZGljdGlvbmFyeVdpdGhPYmplY3RzQW5kS2V5czoKKyAgICAgICAgICAg
IGtDSUF0dHJpYnV0ZVR5cGVHcmFkaWVudCwga0NJQXR0cmlidXRlVHlwZSwKKyAgICAgICAgICAg
IG5pbF0sIEAiaW5wdXRLZXJuZWxNYXRyaXgiLAorICAgICAgICBbTlNEaWN0aW9uYXJ5IGRpY3Rp
b25hcnlXaXRoT2JqZWN0c0FuZEtleXM6CisgICAgICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0
aERvdWJsZTowLjBdLCBrQ0lBdHRyaWJ1dGVNaW4sCisgICAgICAgICAgICBbTlNOdW1iZXIgbnVt
YmVyV2l0aERvdWJsZToxLjBdLCBrQ0lBdHRyaWJ1dGVEZWZhdWx0LAorICAgICAgICAgICAgW05T
TnVtYmVyIG51bWJlcldpdGhEb3VibGU6MS4wXSwga0NJQXR0cmlidXRlSWRlbnRpdHksCisgICAg
ICAgICAgICBrQ0lBdHRyaWJ1dGVUeXBlU2NhbGFyLCBrQ0lBdHRyaWJ1dGVUeXBlLAorICAgICAg
ICAgICAgbmlsXSwgQCJpbnB1dERpdmlzb3IiLAorICAgICAgICBbTlNEaWN0aW9uYXJ5IGRpY3Rp
b25hcnlXaXRoT2JqZWN0c0FuZEtleXM6CisgICAgICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0
aERvdWJsZTowLjBdLCBrQ0lBdHRyaWJ1dGVEZWZhdWx0LAorICAgICAgICAgICAgW05TTnVtYmVy
IG51bWJlcldpdGhEb3VibGU6MC4wXSwga0NJQXR0cmlidXRlSWRlbnRpdHksCisgICAgICAgICAg
ICBrQ0lBdHRyaWJ1dGVUeXBlU2NhbGFyLCBrQ0lBdHRyaWJ1dGVUeXBlLAorICAgICAgICAgICAg
bmlsXSwgQCJpbnB1dEJpYXMiLAorICAgICAgICBuaWxdXTsKK30KKworKyAoQ0lGaWx0ZXIgKilm
aWx0ZXJXaXRoTmFtZTooTlNTdHJpbmcgKiluYW1lCit7CisgICAgQ0lGaWx0ZXIgKmZpbHRlcjsK
KyAgICBmaWx0ZXIgPSBbW3NlbGYgYWxsb2NdIGluaXRdOworICAgIHJldHVybiBbZmlsdGVyIGF1
dG9yZWxlYXNlXTsKK30KKworLSAoaWQpaW5pdAoreworICAgIGlmICghY29udm9sdmVNYXRyaXhL
ZXJuZWwpIHsKKyAgICAgICAgTlNCdW5kbGUgKmJ1bmRsZSA9IFtOU0J1bmRsZSBidW5kbGVGb3JD
bGFzczpbc2VsZiBjbGFzc11dOworICAgICAgICBOU1N0cmluZyAqa2VybmVsRmlsZSA9IFtidW5k
bGUgcGF0aEZvclJlc291cmNlOkAiV0tDb252b2x2ZU1hdHJpeEZpbHRlciIgb2ZUeXBlOkAiY2lr
ZXJuZWwiXTsKKyAgICAgICAgTlNTdHJpbmcgKmNvZGUgPSBbTlNTdHJpbmcgc3RyaW5nV2l0aENv
bnRlbnRzT2ZGaWxlOmtlcm5lbEZpbGVdOworICAgICAgICBOU0FycmF5ICprZXJuZWxzID0gW0NJ
S2VybmVsIGtlcm5lbHNXaXRoU3RyaW5nOmNvZGVdOworICAgICAgICBjb252b2x2ZU1hdHJpeEtl
cm5lbCA9IFtba2VybmVscyBvYmplY3RBdEluZGV4OjBdIHJldGFpbl07CisgICAgfQorICAgIHJl
dHVybiBbc3VwZXIgaW5pdF07Cit9CisKKy0gKENJSW1hZ2UgKilvdXRwdXRJbWFnZQoreworICAg
IC8vIEZJWE1FLCBJIGRvbid0IHRoaW5rIHRoaXMgaXMgcmlnaHQgeWV0Li4uCisgICAgQ0lTYW1w
bGVyICppbWFnZSA9IFtDSVNhbXBsZXIgc2FtcGxlcldpdGhJbWFnZTppbnB1dEltYWdlXTsKKyAg
ICBDSVNhbXBsZXIgKmtlcm5lbE1hdHJpeCA9IFtDSVNhbXBsZXIgc2FtcGxlcldpdGhJbWFnZTpp
bnB1dEtlcm5lbE1hdHJpeF07CisgICAgcmV0dXJuIFtzZWxmIGFwcGx5OmNvbnZvbHZlTWF0cml4
S2VybmVsLCBpbWFnZSwga2VybmVsTWF0cml4LCBpbnB1dERpdmlzb3IsCisgICAgICAgIGlucHV0
Qmlhcywga0NJQXBwbHlPcHRpb25EZWZpbml0aW9uLCBbaW1hZ2UgZGVmaW5pdGlvbl0sIG5pbF07
Cit9CisKKy0gKENHUmVjdClyZWdpb25PZjooaW50KXNhbXBsZXJJbmRleCBkZXN0UmVjdDooQ0dS
ZWN0KXIKK3sKKyAgICAvLyBUaGlzIGlzIGdvbm5hIGJlIHNsb29vb3cuCisgICAgQ0dSZWN0IGV4
dGVudCA9IFtpbnB1dEtlcm5lbE1hdHJpeCBleHRlbnRdOworICAgIENHU2l6ZSBzaXplID0gZXh0
ZW50LnNpemU7CisgICAgcmV0dXJuIENHUmVjdEluc2V0KHIsIC0xICogc2l6ZS53aWR0aCwgLTEg
KiBzaXplLmhlaWdodCk7Cit9CisKK0BlbmQKSW5kZXg6IGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9k
ZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tEaWZmdXNlTGlnaHRpbmdGaWx0ZXIuY2lrZXJuZWwKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQpkaWZmIC1OcHUga2NhbnZhcy9kZXZpY2UvcXVhcnR6L2RldmljZS9xdWFydHovZmls
dGVycy9XS0RpZmZ1c2VMaWdodGluZ0ZpbHRlci5jaWtlcm5lbAotLS0ga2NhbnZhcy9kZXZpY2Uv
cXVhcnR6L2RldmljZS9xdWFydHovZmlsdGVycy9XS0RpZmZ1c2VMaWdodGluZ0ZpbHRlci5jaWtl
cm5lbAkxIEphbiAxOTcwIDAwOjAwOjAwIC0wMDAwCisrKyBrY2FudmFzL2RldmljZS9xdWFydHov
ZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL1dLRGlmZnVzZUxpZ2h0aW5nRmlsdGVyLmNpa2VybmVsCTI4
IE5vdiAyMDA1IDAzOjQ0OjI0IC0wMDAwCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDUgT2xpdmVyIEh1bnQgPG9qaDE2QHN0dWRlbnQuY2FudGVyYnVyeS5hYy5uej4u
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBBVVRIT1IgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKwora2VybmVsIHZlYzQgZGlmZnVzZUxpZ2h0aW5nKHNhbXBsZXIgaW5wdXROb3Jt
YWxWZWN0b3JzLCBzYW1wbGVyIGlucHV0TGlnaHRWZWN0b3JzLCBfX2NvbG9yIGlucHV0TGlnaHRp
bmdDb2xvciwgCisgICAgZmxvYXQgaW5wdXRTdXJmYWNlU2NhbGUsIGZsb2F0IGlucHV0RGlmZnVz
ZUNvbnN0YW50LCBmbG9hdCBpbnB1dEtlcm5lbExlbmd0aFgsCisgICAgZmxvYXQgaW5wdXRLZXJu
ZWxMZW5ndGhZKQoreworICAgIHZlYzIgcG9zPXNhbXBsZXJDb29yZChpbnB1dExpZ2h0VmVjdG9y
cyk7CisgICAgdmVjMiBwb3NuPXNhbXBsZXJDb29yZChpbnB1dE5vcm1hbFZlY3RvcnMpOworICAg
IHZlYzQgbDQgPSBzYW1wbGUoaW5wdXRMaWdodFZlY3RvcnMsIHBvcykueHl6OworICAgIHZlYzMg
bCA9IGw0Lnh5ejsKKyAgICBsLz1zcXJ0KGRvdChsLGwpKTsKKyAgICB2ZWMzIG4gPSBzYW1wbGUo
aW5wdXROb3JtYWxWZWN0b3JzLCBwb3NuKS54eXo7CisgICAgZmxvYXQgbmwgPSAoZG90KGwsIG4p
KTsKKyAgICB2ZWM0IHJlcyA9IHZlYzQoaW5wdXRMaWdodGluZ0NvbG9yLnIqbmwsIGlucHV0TGln
aHRpbmdDb2xvci5nKm5sLCBpbnB1dExpZ2h0aW5nQ29sb3IuYipubCwgMS4wKTsKKyAgICByZXMu
eHl6ICo9IGw0Lnc7CisgICAgcmV0dXJuIHJlczsKK30KSW5kZXg6IGtjYW52YXMvZGV2aWNlL3F1
YXJ0ei9kZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tEaWZmdXNlTGlnaHRpbmdGaWx0ZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09CmRpZmYgLU5wdSBrY2FudmFzL2RldmljZS9xdWFydHovZGV2aWNlL3F1YXJ0ei9maWx0
ZXJzL1dLRGlmZnVzZUxpZ2h0aW5nRmlsdGVyLmgKLS0tIGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9k
ZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tEaWZmdXNlTGlnaHRpbmdGaWx0ZXIuaAkxIEphbiAxOTcw
IDAwOjAwOjAwIC0wMDAwCisrKyBrY2FudmFzL2RldmljZS9xdWFydHovZGV2aWNlL3F1YXJ0ei9m
aWx0ZXJzL1dLRGlmZnVzZUxpZ2h0aW5nRmlsdGVyLmgJMTIgTm92IDIwMDUgMTA6MDA6MjAgLTAw
MDAKQEAgLTAsMCArMSwzNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBBcHBsZSBDb21w
dXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2ltcG9ydCA8UXVhcnR6
Q29yZS9Db3JlSW1hZ2UuaD4KKworQGludGVyZmFjZSBXS0RpZmZ1c2VMaWdodGluZ0ZpbHRlciA6
IENJRmlsdGVyIHsKKyAgICBDSUltYWdlICAqaW5wdXROb3JtYWxNYXA7CisgICAgQ0lJbWFnZSAg
KmlucHV0TGlnaHRWZWN0b3JzOworICAgIENJQ29sb3IgICppbnB1dExpZ2h0aW5nQ29sb3I7Cisg
ICAgTlNOdW1iZXIgKmlucHV0U3VyZmFjZVNjYWxlOworICAgIE5TTnVtYmVyICppbnB1dERpZmZ1
c2VDb25zdGFudDsKKyAgICBOU051bWJlciAqaW5wdXRLZXJuZWxVbml0TGVuZ3RoWDsKKyAgICBO
U051bWJlciAqaW5wdXRLZXJuZWxVbml0TGVuZ3RoWTsKK30KK0BlbmQKSW5kZXg6IGtjYW52YXMv
ZGV2aWNlL3F1YXJ0ei9kZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tEaWZmdXNlTGlnaHRpbmdGaWx0
ZXIubQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09CmRpZmYgLU5wdSBrY2FudmFzL2RldmljZS9xdWFydHovZGV2aWNlL3F1
YXJ0ei9maWx0ZXJzL1dLRGlmZnVzZUxpZ2h0aW5nRmlsdGVyLm0KLS0tIGtjYW52YXMvZGV2aWNl
L3F1YXJ0ei9kZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tEaWZmdXNlTGlnaHRpbmdGaWx0ZXIubQkx
IEphbiAxOTcwIDAwOjAwOjAwIC0wMDAwCisrKyBrY2FudmFzL2RldmljZS9xdWFydHovZGV2aWNl
L3F1YXJ0ei9maWx0ZXJzL1dLRGlmZnVzZUxpZ2h0aW5nRmlsdGVyLm0JMjggTm92IDIwMDUgMDI6
NDQ6NTggLTAwMDAKQEAgLTAsMCArMSw5OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBB
cHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2ltcG9y
dCAiV0tEaWZmdXNlTGlnaHRpbmdGaWx0ZXIuaCIKKyNpbXBvcnQgPHN0ZGlvLmg+CisKK3N0YXRp
YyBDSUtlcm5lbCAqZGlmZnVzZUxpZ2h0aW5nRmlsdGVyID0gbmlsOworc3RhdGljIEJPT0wgICAg
IGRpZmZ1c2VMaWdodGluZ0ZpbHRlckluaXRpYWxpc2VkID0gTk87CitAaW1wbGVtZW50YXRpb24g
V0tEaWZmdXNlTGlnaHRpbmdGaWx0ZXIKKworKyAodm9pZClpbml0aWFsaXplCit7CisgICAgW0NJ
RmlsdGVyIHJlZ2lzdGVyRmlsdGVyTmFtZTpAIldLRGlmZnVzZUxpZ2h0aW5nIiAgCisgICAgICAg
Y29uc3RydWN0b3I6c2VsZgorICAgICAgIGNsYXNzQXR0cmlidXRlczpbTlNEaWN0aW9uYXJ5IGRp
Y3Rpb25hcnlXaXRoT2JqZWN0c0FuZEtleXM6CisgICAgICAgICAgIEAiV2ViS2l0IERpZmZ1c2Ug
TGlnaHRpbmciLCBrQ0lBdHRyaWJ1dGVGaWx0ZXJEaXNwbGF5TmFtZSwKKyAgICAgICAgICAgW05T
QXJyYXkgYXJyYXlXaXRoT2JqZWN0czoga0NJQ2F0ZWdvcnlTdHlsaXplLCBrQ0lDYXRlZ29yeVZp
ZGVvLAorICAgICAgICAgICAgICAga0NJQ2F0ZWdvcnlTdGlsbEltYWdlLCBrQ0lDYXRlZ29yeU5v
blNxdWFyZVBpeGVscyxuaWxdLCBrQ0lBdHRyaWJ1dGVGaWx0ZXJDYXRlZ29yaWVzLAorICAgICAg
ICAgICBbTlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnlXaXRoT2JqZWN0c0FuZEtleXM6CisgICAgICAg
ICAgICAgICBbQ0lDb2xvciBjb2xvcldpdGhSZWQ6MS4wIGdyZWVuOjEuMCBibHVlOjEuMCBhbHBo
YToxLjBdLAorICAgICAgICAgICAgICAga0NJQXR0cmlidXRlRGVmYXVsdCwgbmlsXSwgQCJpbnB1
dExpZ2h0aW5nQ29sb3IiLAorICAgICAgICAgICBbTlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnlXaXRo
T2JqZWN0c0FuZEtleXM6CisgICAgICAgICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aERvdWJs
ZTowLjBdLCBrQ0lBdHRyaWJ1dGVNaW4sCisgICAgICAgICAgICAgICBbTlNOdW1iZXIgbnVtYmVy
V2l0aERvdWJsZToxLjBdLCBrQ0lBdHRyaWJ1dGVEZWZhdWx0LAorICAgICAgICAgICAgICAgW05T
TnVtYmVyIG51bWJlcldpdGhEb3VibGU6MS4wXSwga0NJQXR0cmlidXRlSWRlbnRpdHksCisgICAg
ICAgICAgICAgICBrQ0lBdHRyaWJ1dGVUeXBlU2NhbGFyLCBrQ0lBdHRyaWJ1dGVUeXBlLAorICAg
ICAgICAgICAgICAgbmlsXSwgQCJpbnB1dFN1cmZhY2VTY2FsZSIsCisgICAgICAgICAgIFtOU0Rp
Y3Rpb25hcnkgZGljdGlvbmFyeVdpdGhPYmplY3RzQW5kS2V5czoKKyAgICAgICAgICAgICAgIFtO
U051bWJlciBudW1iZXJXaXRoRG91YmxlOjAuMF0sIGtDSUF0dHJpYnV0ZU1pbiwKKyAgICAgICAg
ICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoRG91YmxlOjEuMF0sIGtDSUF0dHJpYnV0ZURlZmF1
bHQsCisgICAgICAgICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aERvdWJsZToxLjBdLCBrQ0lB
dHRyaWJ1dGVJZGVudGl0eSwKKyAgICAgICAgICAgICAgIGtDSUF0dHJpYnV0ZVR5cGVTY2FsYXIs
IGtDSUF0dHJpYnV0ZVR5cGUsCisgICAgICAgICAgICAgICBuaWxdLCBAImlucHV0RGlmZnVzZUNv
bnN0YW50IiwKKyAgICAgICAgICAgW05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVjdHNB
bmRLZXlzOgorICAgICAgICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhEb3VibGU6MC4wXSwg
a0NJQXR0cmlidXRlTWluLAorICAgICAgICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhEb3Vi
bGU6MS4wXSwga0NJQXR0cmlidXRlRGVmYXVsdCwKKyAgICAgICAgICAgICAgIFtOU051bWJlciBu
dW1iZXJXaXRoRG91YmxlOjEuMF0sIGtDSUF0dHJpYnV0ZUlkZW50aXR5LAorICAgICAgICAgICAg
ICAga0NJQXR0cmlidXRlVHlwZVNjYWxhciwga0NJQXR0cmlidXRlVHlwZSwKKyAgICAgICAgICAg
ICAgIG5pbF0sIEAiaW5wdXRLZXJuZWxVbml0TGVuZ3RoWCIsCisgICAgICAgICAgIFtOU0RpY3Rp
b25hcnkgZGljdGlvbmFyeVdpdGhPYmplY3RzQW5kS2V5czoKKyAgICAgICAgICAgICAgIFtOU051
bWJlciBudW1iZXJXaXRoRG91YmxlOjAuMF0sIGtDSUF0dHJpYnV0ZU1pbiwKKyAgICAgICAgICAg
ICAgIFtOU051bWJlciBudW1iZXJXaXRoRG91YmxlOjEuMF0sIGtDSUF0dHJpYnV0ZURlZmF1bHQs
CisgICAgICAgICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aERvdWJsZToxLjBdLCBrQ0lBdHRy
aWJ1dGVJZGVudGl0eSwKKyAgICAgICAgICAgICAgIGtDSUF0dHJpYnV0ZVR5cGVTY2FsYXIsIGtD
SUF0dHJpYnV0ZVR5cGUsCisgICAgICAgICAgICAgICBuaWxdLCBAImlucHV0S2VybmVsVW5pdExl
bmd0aFkiLAorICAgICAgICAgICBuaWxdXTsKKyAgICBkaWZmdXNlTGlnaHRpbmdGaWx0ZXJJbml0
aWFsaXNlZCA9IFlFUzsKK30KKworKyAoQ0lGaWx0ZXIgKilmaWx0ZXJXaXRoTmFtZTooTlNTdHJp
bmcgKiluYW1lCit7CisgICAgQ0lGaWx0ZXIgKmZpbHRlcjsKKyAgICBmaWx0ZXIgPSBbW3NlbGYg
YWxsb2NdIGluaXRdOworICAgIHJldHVybiBbZmlsdGVyIGF1dG9yZWxlYXNlXTsKK30KKworLSAo
aWQpaW5pdAoreworICAgIGlmICghZGlmZnVzZUxpZ2h0aW5nRmlsdGVyKSB7CisgICAgICAgIE5T
QnVuZGxlICpidW5kbGUgPSBbTlNCdW5kbGUgYnVuZGxlRm9yQ2xhc3M6W3NlbGYgY2xhc3NdXTsK
KyAgICAgICAgTlNTdHJpbmcgKmtlcm5lbEZpbGUgPSBbYnVuZGxlIHBhdGhGb3JSZXNvdXJjZTpA
IldLRGlmZnVzZUxpZ2h0aW5nRmlsdGVyIiBvZlR5cGU6QCJjaWtlcm5lbCJdOworICAgICAgICBO
U1N0cmluZyAqY29kZSA9IFtOU1N0cmluZyBzdHJpbmdXaXRoQ29udGVudHNPZkZpbGU6a2VybmVs
RmlsZV07CisgICAgICAgIE5TQXJyYXkgKmtlcm5lbHMgPSBbQ0lLZXJuZWwga2VybmVsc1dpdGhT
dHJpbmc6Y29kZV07CisgICAgICAgIGRpZmZ1c2VMaWdodGluZ0ZpbHRlciA9IFtba2VybmVscyBv
YmplY3RBdEluZGV4OjBdIHJldGFpbl07CisgICAgfQorICAgIHJldHVybiBbc3VwZXIgaW5pdF07
Cit9CisKKy0gKENJSW1hZ2UgKilvdXRwdXRJbWFnZQoreworICAgIENJU2FtcGxlciAqc3JjID0g
W0NJU2FtcGxlciBzYW1wbGVyV2l0aEltYWdlOiBpbnB1dE5vcm1hbE1hcF07CisgICAgQ0lTYW1w
bGVyICpsaWdodFNyYyA9IFtDSVNhbXBsZXIgc2FtcGxlcldpdGhJbWFnZTogaW5wdXRMaWdodFZl
Y3RvcnNdOworICAgIHJldHVybiBbc2VsZiBhcHBseTpkaWZmdXNlTGlnaHRpbmdGaWx0ZXIsIHNy
YywgbGlnaHRTcmMsIGlucHV0TGlnaHRpbmdDb2xvciwgaW5wdXRTdXJmYWNlU2NhbGUsIGlucHV0
RGlmZnVzZUNvbnN0YW50LAorICAgICAgICBpbnB1dEtlcm5lbFVuaXRMZW5ndGhYLCBpbnB1dEtl
cm5lbFVuaXRMZW5ndGhZLCBuaWxdOworfQorCitAZW5kCkluZGV4OiBrY2FudmFzL2RldmljZS9x
dWFydHovZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL1dLRGlzdGFudExpZ2h0RmlsdGVyLmNpa2VybmVs
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KZGlmZiAtTnB1IGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9kZXZpY2UvcXVhcnR6
L2ZpbHRlcnMvV0tEaXN0YW50TGlnaHRGaWx0ZXIuY2lrZXJuZWwKLS0tIGtjYW52YXMvZGV2aWNl
L3F1YXJ0ei9kZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tEaXN0YW50TGlnaHRGaWx0ZXIuY2lrZXJu
ZWwJMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMAorKysga2NhbnZhcy9kZXZpY2UvcXVhcnR6L2Rl
dmljZS9xdWFydHovZmlsdGVycy9XS0Rpc3RhbnRMaWdodEZpbHRlci5jaWtlcm5lbAkyOCBOb3Yg
MjAwNSAwMzozNzowNiAtMDAwMApAQCAtMCwwICsxLDQgQEAKK2tlcm5lbCB2ZWM0IGRpc3RhbnRM
aWdodEdlbmVyYXRvcihzYW1wbGVyIGltYWdlLCB2ZWMzIGRpcmVjdGlvbikKK3sKKyAgICByZXR1
cm4gdmVjNChkaXJlY3Rpb24ueCwgZGlyZWN0aW9uLnksIGRpcmVjdGlvbi56LCAxLjApOworfQpJ
bmRleDoga2NhbnZhcy9kZXZpY2UvcXVhcnR6L2RldmljZS9xdWFydHovZmlsdGVycy9XS0Rpc3Rh
bnRMaWdodEZpbHRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtTnB1IGtjYW52YXMvZGV2aWNlL3F1YXJ0
ei9kZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tEaXN0YW50TGlnaHRGaWx0ZXIuaAotLS0ga2NhbnZh
cy9kZXZpY2UvcXVhcnR6L2RldmljZS9xdWFydHovZmlsdGVycy9XS0Rpc3RhbnRMaWdodEZpbHRl
ci5oCTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAKKysrIGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9k
ZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tEaXN0YW50TGlnaHRGaWx0ZXIuaAkxMyBOb3YgMjAwNSAx
MDo1NzoxOCAtMDAwMApAQCAtMCwwICsxLDMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1
IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW1w
b3J0IDxRdWFydHpDb3JlL0NvcmVJbWFnZS5oPgorCitAaW50ZXJmYWNlIFdLRGlzdGFudExpZ2h0
RmlsdGVyIDogQ0lGaWx0ZXIgeworICAgIENJSW1hZ2UgICogaW5wdXROb3JtYWxNYXA7CisgICAg
Q0lWZWN0b3IgKiBpbnB1dExpZ2h0RGlyZWN0aW9uOworfQorQGVuZApJbmRleDoga2NhbnZhcy9k
ZXZpY2UvcXVhcnR6L2RldmljZS9xdWFydHovZmlsdGVycy9XS0Rpc3RhbnRMaWdodEZpbHRlci5t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KZGlmZiAtTnB1IGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9kZXZpY2UvcXVhcnR6
L2ZpbHRlcnMvV0tEaXN0YW50TGlnaHRGaWx0ZXIubQotLS0ga2NhbnZhcy9kZXZpY2UvcXVhcnR6
L2RldmljZS9xdWFydHovZmlsdGVycy9XS0Rpc3RhbnRMaWdodEZpbHRlci5tCTEgSmFuIDE5NzAg
MDA6MDA6MDAgLTAwMDAKKysrIGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9kZXZpY2UvcXVhcnR6L2Zp
bHRlcnMvV0tEaXN0YW50TGlnaHRGaWx0ZXIubQkyMCBOb3YgMjAwNSAxMzowNDoyMiAtMDAwMApA
QCAtMCwwICsxLDcwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1IEFwcGxlIENvbXB1dGVy
LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworIAorI2ltcG9ydCAiV0tEaXN0YW50
TGlnaHRGaWx0ZXIuaCIKKworc3RhdGljIENJS2VybmVsICpkaXN0YW50TGlnaHRGaWx0ZXIgPSBu
aWw7CisKK0BpbXBsZW1lbnRhdGlvbiBXS0Rpc3RhbnRMaWdodEZpbHRlcgorCisrICh2b2lkKWlu
aXRpYWxpemUKK3sKKyAgICBbQ0lGaWx0ZXIgcmVnaXN0ZXJGaWx0ZXJOYW1lOkAiV0tEaXN0YW50
TGlnaHQiCisgICAgICAgIGNvbnN0cnVjdG9yOiBzZWxmCisgICAgICAgIGNsYXNzQXR0cmlidXRl
czogW05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVjdHNBbmRLZXlzOgorICAgICAgICAg
QCJXZWJLaXQgRGlzdGFudCBMaWdodCIsIGtDSUF0dHJpYnV0ZUZpbHRlckRpc3BsYXlOYW1lLAor
ICAgICAgICBbTlNBcnJheSBhcnJheVdpdGhPYmplY3RzOiBrQ0lDYXRlZ29yeVN0eWxpemUsIGtD
SUNhdGVnb3J5VmlkZW8sCisgICAgICAgICAgICBrQ0lDYXRlZ29yeVN0aWxsSW1hZ2UsIGtDSUNh
dGVnb3J5Tm9uU3F1YXJlUGl4ZWxzLG5pbF0sIGtDSUF0dHJpYnV0ZUZpbHRlckNhdGVnb3JpZXMs
CisgICAgICAgICAgICBbTlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnlXaXRoT2JqZWN0c0FuZEtleXM6
CisgICAgICAgICAgICAgICAga0NJQXR0cmlidXRlVHlwZVBvc2l0aW9uMywga0NJQXR0cmlidXRl
VHlwZSwKKyAgICAgICAgICAgICAgICBuaWxdLCBAImlucHV0TGlnaHREaXJlY3Rpb24iLAorICAg
ICAgICBuaWxdXTsKK30KKworKyAoQ0lGaWx0ZXIgKilmaWx0ZXJXaXRoTmFtZTooTlNTdHJpbmcg
KiluYW1lCit7CisgICAgQ0lGaWx0ZXIgKmZpbHRlcjsKKyAgICBmaWx0ZXIgPSBbW3NlbGYgYWxs
b2NdIGluaXRdOworICAgIHJldHVybiBbZmlsdGVyIGF1dG9yZWxlYXNlXTsKK30KKworLSAoaWQp
aW5pdAoreworICAgIGlmICghZGlzdGFudExpZ2h0RmlsdGVyKSB7CisgICAgICAgIE5TQnVuZGxl
ICpidW5kbGUgPSBbTlNCdW5kbGUgYnVuZGxlRm9yQ2xhc3M6W3NlbGYgY2xhc3NdXTsKKyAgICAg
ICAgTlNTdHJpbmcgKmtlcm5lbEZpbGUgPSBbYnVuZGxlIHBhdGhGb3JSZXNvdXJjZTpAIldLRGlz
dGFudExpZ2h0RmlsdGVyIiBvZlR5cGU6QCJjaWtlcm5lbCJdOworICAgICAgICBOU1N0cmluZyAq
Y29kZSA9IFtOU1N0cmluZyBzdHJpbmdXaXRoQ29udGVudHNPZkZpbGU6a2VybmVsRmlsZV07Cisg
ICAgICAgIE5TQXJyYXkgKmtlcm5lbHMgPSBbQ0lLZXJuZWwga2VybmVsc1dpdGhTdHJpbmc6Y29k
ZV07CisgICAgICAgIGRpc3RhbnRMaWdodEZpbHRlciA9IFtba2VybmVscyBvYmplY3RBdEluZGV4
OjBdIHJldGFpbl07CisgICAgfQorICAgIHJldHVybiBbc3VwZXIgaW5pdF07Cit9CisKKy0gKENJ
SW1hZ2UgKilvdXRwdXRJbWFnZQoreworICAgIHJldHVybiBbc2VsZiBhcHBseTpkaXN0YW50TGln
aHRGaWx0ZXIsIFtDSVNhbXBsZXIgc2FtcGxlcldpdGhJbWFnZTppbnB1dE5vcm1hbE1hcF0sIGlu
cHV0TGlnaHREaXJlY3Rpb24sIG5pbF07Cit9CisKK0BlbmQKSW5kZXg6IGtjYW52YXMvZGV2aWNl
L3F1YXJ0ei9kZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tOb3JtYWxNYXBGaWx0ZXIuY2lrZXJuZWwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQpkaWZmIC1OcHUga2NhbnZhcy9kZXZpY2UvcXVhcnR6L2RldmljZS9xdWFydHov
ZmlsdGVycy9XS05vcm1hbE1hcEZpbHRlci5jaWtlcm5lbAotLS0ga2NhbnZhcy9kZXZpY2UvcXVh
cnR6L2RldmljZS9xdWFydHovZmlsdGVycy9XS05vcm1hbE1hcEZpbHRlci5jaWtlcm5lbAkxIEph
biAxOTcwIDAwOjAwOjAwIC0wMDAwCisrKyBrY2FudmFzL2RldmljZS9xdWFydHovZGV2aWNlL3F1
YXJ0ei9maWx0ZXJzL1dLTm9ybWFsTWFwRmlsdGVyLmNpa2VybmVsCTI4IE5vdiAyMDA1IDAzOjQ0
OjI0IC0wMDAwCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgT2xp
dmVyIEh1bnQgPG9qaDE2QHN0dWRlbnQuY2FudGVyYnVyeS5hYy5uej4uICBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKyAKK2tl
cm5lbCB2ZWM0IGNvbnZvbHZlM3gzKHNhbXBsZXIgaW1hZ2UsICBmbG9hdCBkaXZpc29yLCBmbG9h
dCBiaWFzLAorCQkJdmVjMyBtMCwgdmVjMyBtMSwgdmVjMyBtMiApCit7CisgICAgdmVjNCBjb2xv
dXI9dmVjNCgwLjAsIDAuMCwgMC4wLCAwLjApOworICAgIHZlYzIgcG9zPXNhbXBsZXJDb29yZChp
bWFnZSk7CisgICAgY29sb3VyPXNhbXBsZShpbWFnZSwgcG9zK3ZlYzIoLTEsLTEpKSptMC54Owor
ICAgIGNvbG91cis9c2FtcGxlKGltYWdlLCBwb3MrdmVjMigtMSwgMC4wKSkqbTAueTsKKyAgICBj
b2xvdXIrPXNhbXBsZShpbWFnZSwgcG9zK3ZlYzIoLTEsIDEpKSptMC56OworICAgIGNvbG91cis9
c2FtcGxlKGltYWdlLCBwb3MrdmVjMigwLC0xKSkqbTEueDsKKyAgICBjb2xvdXIrPXNhbXBsZShp
bWFnZSwgcG9zKSptMS55OworICAgIGNvbG91cis9c2FtcGxlKGltYWdlLCBwb3MrdmVjMigwLCAx
LjApKSptMS56OworICAgIGNvbG91cis9c2FtcGxlKGltYWdlLCBwb3MrdmVjMigxLC0xKSkqbTIu
eDsKKyAgICBjb2xvdXIrPXNhbXBsZShpbWFnZSwgcG9zK3ZlYzIoMSwgMC4wKSkqbTIueTsKKyAg
ICBjb2xvdXIrPXNhbXBsZShpbWFnZSwgcG9zK3ZlYzIoMSwgMSkpKm0yLno7CisgICAgcmV0dXJu
ICgoKGNvbG91ci9kaXZpc29yKStiaWFzKSk7Cit9CisKK2tlcm5lbCB2ZWM0IG1lcmdlTm9ybWFs
cyhzYW1wbGVyIE54LCBzYW1wbGVyIE55LCBzYW1wbGVyIHNyYywgZmxvYXQgc3VyZmFjZVNjYWxl
KQoreworICAgIHZlYzMgTj12ZWMzKHN1cmZhY2VTY2FsZSpzYW1wbGUoTngsIHNhbXBsZXJDb29y
ZChOeCkpLmEsIC1zdXJmYWNlU2NhbGUqc2FtcGxlKE55LCBzYW1wbGVyQ29vcmQoTnkpKS5hLCAx
LjAsIDAuMCk7CisgICAgTiA9IE4vc3FydChkb3QoTixOKSk7CisgICAgcmV0dXJuIHZlYzQoTi54
LCBOLnksIE4ueiwgc2FtcGxlKHNyYywgc2FtcGxlckNvb3JkKHNyYykpLmEpOworfQpJbmRleDog
a2NhbnZhcy9kZXZpY2UvcXVhcnR6L2RldmljZS9xdWFydHovZmlsdGVycy9XS05vcm1hbE1hcEZp
bHRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KZGlmZiAtTnB1IGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9kZXZpY2Uv
cXVhcnR6L2ZpbHRlcnMvV0tOb3JtYWxNYXBGaWx0ZXIuaAotLS0ga2NhbnZhcy9kZXZpY2UvcXVh
cnR6L2RldmljZS9xdWFydHovZmlsdGVycy9XS05vcm1hbE1hcEZpbHRlci5oCTEgSmFuIDE5NzAg
MDA6MDA6MDAgLTAwMDAKKysrIGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9kZXZpY2UvcXVhcnR6L2Zp
bHRlcnMvV0tOb3JtYWxNYXBGaWx0ZXIuaAkyOCBOb3YgMjAwNSAwMjo0NDo1OCAtMDAwMApAQCAt
MCwwICsxLDMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1IEFwcGxlIENvbXB1dGVyLCBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW1wb3J0IDxRdWFydHpDb3JlL0Nv
cmVJbWFnZS5oPgorLy9UT0RPOiBXZSBjdXJyZW50bHkgaWdub3JlIHRoZSBpbnB1dCBrZXJuZWwg
bGVuZ3RocworQGludGVyZmFjZSBXS05vcm1hbE1hcEZpbHRlciA6IENJRmlsdGVyIHsKKyAgICBD
SUltYWdlICppbnB1dEltYWdlOworICAgIE5TTnVtYmVyICppbnB1dFN1cmZhY2VTY2FsZTsKK30K
K0BlbmQKSW5kZXg6IGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9kZXZpY2UvcXVhcnR6L2ZpbHRlcnMv
V0tOb3JtYWxNYXBGaWx0ZXIubQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CmRpZmYgLU5wdSBrY2FudmFzL2RldmljZS9x
dWFydHovZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL1dLTm9ybWFsTWFwRmlsdGVyLm0KLS0tIGtjYW52
YXMvZGV2aWNlL3F1YXJ0ei9kZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tOb3JtYWxNYXBGaWx0ZXIu
bQkxIEphbiAxOTcwIDAwOjAwOjAwIC0wMDAwCisrKyBrY2FudmFzL2RldmljZS9xdWFydHovZGV2
aWNlL3F1YXJ0ei9maWx0ZXJzL1dLTm9ybWFsTWFwRmlsdGVyLm0JMjAgTm92IDIwMDUgMTM6MDQ6
MjIgLTAwMDAKQEAgLTAsMCArMSwxMDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgQXBw
bGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbXBvcnQg
IldLTm9ybWFsTWFwRmlsdGVyLmgiCisKK3N0YXRpYyBDSUtlcm5lbCAqY29udm9sdmVLZXJuZWwg
PSBuaWw7CitzdGF0aWMgQ0lLZXJuZWwgKm5vcm1hbE1hcEtlcm5lbCA9IG5pbDsKKworQGltcGxl
bWVudGF0aW9uIFdLTm9ybWFsTWFwRmlsdGVyCisKKysgKHZvaWQpaW5pdGlhbGl6ZQoreworICAg
IFtDSUZpbHRlciByZWdpc3RlckZpbHRlck5hbWU6QCJXS05vcm1hbE1hcCIKKyAgICAgICAgY29u
c3RydWN0b3I6c2VsZgorICAgICAgICBjbGFzc0F0dHJpYnV0ZXM6W05TRGljdGlvbmFyeSBkaWN0
aW9uYXJ5V2l0aE9iamVjdHNBbmRLZXlzOgorICAgICAgICAgICAgQCJXZWJLaXQgTm9ybWFsIE1h
cCIsIGtDSUF0dHJpYnV0ZUZpbHRlckRpc3BsYXlOYW1lLAorICAgICAgICAgICAgW05TQXJyYXkg
YXJyYXlXaXRoT2JqZWN0czoga0NJQ2F0ZWdvcnlCbHVyLCBrQ0lDYXRlZ29yeVZpZGVvLAorICAg
ICAgICAgICAgICAgIGtDSUNhdGVnb3J5U3RpbGxJbWFnZSwga0NJQ2F0ZWdvcnlOb25TcXVhcmVQ
aXhlbHMsIG5pbF0sIGtDSUF0dHJpYnV0ZUZpbHRlckNhdGVnb3JpZXMsICAgICAgIAorICAgICAg
ICAgICAgW05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVjdHNBbmRLZXlzOgorICAgICAg
ICAgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoRG91YmxlOjAuMF0sIGtDSUF0dHJpYnV0ZU1p
biwKKyAgICAgICAgICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aERvdWJsZToxLjBdLCBrQ0lB
dHRyaWJ1dGVEZWZhdWx0LAorICAgICAgICAgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoRG91
YmxlOjEuMF0sIGtDSUF0dHJpYnV0ZUlkZW50aXR5LAorICAgICAgICAgICAgICAgIGtDSUF0dHJp
YnV0ZVR5cGVTY2FsYXIsIGtDSUF0dHJpYnV0ZVR5cGUsCisgICAgICAgICAgICAgICAgbmlsXSwg
QCJpbnB1dFN1cmZhY2VTY2FsZSIsCisgICAgICAgICAgICBuaWxdXTsKK30KKworKyAoQ0lGaWx0
ZXIgKilmaWx0ZXJXaXRoTmFtZTooTlNTdHJpbmcgKiluYW1lCit7CisgICAgQ0lGaWx0ZXIgKmZp
bHRlcjsKKyAgICBmaWx0ZXIgPSBbW3NlbGYgYWxsb2NdIGluaXRdOworICAgIHJldHVybiBbZmls
dGVyIGF1dG9yZWxlYXNlXTsKK30KKworLSAoaWQpaW5pdAoreworICAgIGlmICghbm9ybWFsTWFw
S2VybmVsKSB7CisgICAgICAgIE5TQnVuZGxlICpidW5kbGUgPSBbTlNCdW5kbGUgYnVuZGxlRm9y
Q2xhc3M6W3NlbGYgY2xhc3NdXTsKKyAgICAgICAgTlNTdHJpbmcgKmtlcm5lbEZpbGUgPSBbYnVu
ZGxlIHBhdGhGb3JSZXNvdXJjZTpAIldLTm9ybWFsTWFwRmlsdGVyIiBvZlR5cGU6QCJjaWtlcm5l
bCJdOworICAgICAgICBOU1N0cmluZyAqY29kZSA9IFtOU1N0cmluZyBzdHJpbmdXaXRoQ29udGVu
dHNPZkZpbGU6a2VybmVsRmlsZV07CisgICAgICAgIE5TQXJyYXkgKmtlcm5lbHMgPSBbQ0lLZXJu
ZWwga2VybmVsc1dpdGhTdHJpbmc6Y29kZV07CisgICAgICAgIGNvbnZvbHZlS2VybmVsID0gW1tr
ZXJuZWxzIG9iamVjdEF0SW5kZXg6MF0gcmV0YWluXTsKKyAgICAgICAgbm9ybWFsTWFwS2VybmVs
ID0gW1trZXJuZWxzIG9iamVjdEF0SW5kZXg6MV0gcmV0YWluXTsKKyAgICB9CisgICAgcmV0dXJu
IFtzdXBlciBpbml0XTsKK30KKworLSAoTlNBcnJheSAqKXhDb252b2x2ZUFyZ3NXaXRoQnVtcE1h
cDooQ0lTYW1wbGVyICopYnVtcE1hcCB7CisgICAgcmV0dXJuIFtOU0FycmF5IGFycmF5V2l0aE9i
amVjdHM6CisgICAgICAgIGJ1bXBNYXAsCisgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoRmxv
YXQ6NF0sCisgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6MF0sCisgICAgICAgIFtD
SVZlY3RvciB2ZWN0b3JXaXRoWDogMSBZOiAyIFo6IDFdLAorICAgICAgICBbQ0lWZWN0b3IgdmVj
dG9yV2l0aFg6IDAgWTogMCBaOiAwXSwKKyAgICAgICAgW0NJVmVjdG9yIHZlY3RvcldpdGhYOi0x
IFk6LTIgWjotMV0sCisgICAgICAgIG5pbF07Cit9CisKKy0gKE5TQXJyYXkgKil5Q29udm9sdmVB
cmdzV2l0aEJ1bXBNYXA6KENJU2FtcGxlciAqKWJ1bXBNYXAgeworICAgIHJldHVybiBbTlNBcnJh
eSBhcnJheVdpdGhPYmplY3RzOiAKKyAgICAgICAgYnVtcE1hcCwKKyAgICAgICAgW05TTnVtYmVy
IG51bWJlcldpdGhGbG9hdDo0XSwKKyAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhGbG9hdDow
XSwKKyAgICAgICAgW0NJVmVjdG9yIHZlY3RvcldpdGhYOiAxIFk6IDAgWjotMV0sCisgICAgICAg
IFtDSVZlY3RvciB2ZWN0b3JXaXRoWDogMiBZOiAwIFo6LTJdLAorICAgICAgICBbQ0lWZWN0b3Ig
dmVjdG9yV2l0aFg6IDEgWTogMCBaOi0xXSwKKyAgICAgICAgbmlsXTsKK30KKworLSAoQ0lJbWFn
ZSAqKW91dHB1dEltYWdlCit7CisgICAgQ0lTYW1wbGVyICppbWFnZSA9IFtDSVNhbXBsZXIgc2Ft
cGxlcldpdGhJbWFnZTppbnB1dEltYWdlXTsKKyAgICBOU0RpY3Rpb25hcnkgKmFwcGx5T3B0aW9u
cyA9IFtOU0RpY3Rpb25hcnkgZGljdGlvbmFyeVdpdGhPYmplY3RzQW5kS2V5czpbaW1hZ2UgZGVm
aW5pdGlvbl0sIGtDSUFwcGx5T3B0aW9uRGVmaW5pdGlvbiwgbmlsXTsKKyAgICAKKyAgICBDSUlt
YWdlICpjb252b2x2ZVggPSBbc2VsZiBhcHBseTpjb252b2x2ZUtlcm5lbCBhcmd1bWVudHM6W3Nl
bGYgeENvbnZvbHZlQXJnc1dpdGhCdW1wTWFwOiBpbWFnZV0gb3B0aW9uczphcHBseU9wdGlvbnNd
OworICAgIENJSW1hZ2UgKmNvbnZvbHZlWSA9IFtzZWxmIGFwcGx5OmNvbnZvbHZlS2VybmVsIGFy
Z3VtZW50czpbc2VsZiB5Q29udm9sdmVBcmdzV2l0aEJ1bXBNYXA6IGltYWdlXSBvcHRpb25zOmFw
cGx5T3B0aW9uc107CisgICAgQ0lTYW1wbGVyICpzYW1wbGVyWCA9IFtDSVNhbXBsZXIgc2FtcGxl
cldpdGhJbWFnZTpjb252b2x2ZVhdOworICAgIENJU2FtcGxlciAqc2FtcGxlclkgPSBbQ0lTYW1w
bGVyIHNhbXBsZXJXaXRoSW1hZ2U6Y29udm9sdmVZXTsKKyAgICAKKyAgICBOU0FycmF5ICpub3Jt
YWxNYXBBcmdzID0gW05TQXJyYXkgYXJyYXlXaXRoT2JqZWN0czpzYW1wbGVyWCwgc2FtcGxlclks
IGltYWdlLCBpbnB1dFN1cmZhY2VTY2FsZSwgbmlsXTsKKyAgICByZXR1cm4gW3NlbGYgYXBwbHk6
bm9ybWFsTWFwS2VybmVsIGFyZ3VtZW50czpub3JtYWxNYXBBcmdzIG9wdGlvbnM6YXBwbHlPcHRp
b25zXTsKK30KKworQGVuZApJbmRleDoga2NhbnZhcy9kZXZpY2UvcXVhcnR6L2RldmljZS9xdWFy
dHovZmlsdGVycy9XS1BvaW50TGlnaHRGaWx0ZXIuY2lrZXJuZWwKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpkaWZmIC1O
cHUga2NhbnZhcy9kZXZpY2UvcXVhcnR6L2RldmljZS9xdWFydHovZmlsdGVycy9XS1BvaW50TGln
aHRGaWx0ZXIuY2lrZXJuZWwKLS0tIGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9kZXZpY2UvcXVhcnR6
L2ZpbHRlcnMvV0tQb2ludExpZ2h0RmlsdGVyLmNpa2VybmVsCTEgSmFuIDE5NzAgMDA6MDA6MDAg
LTAwMDAKKysrIGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9kZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tQ
b2ludExpZ2h0RmlsdGVyLmNpa2VybmVsCTI4IE5vdiAyMDA1IDAzOjMxOjMyIC0wMDAwCkBAIC0w
LDAgKzEsOCBAQAora2VybmVsIHZlYzQgZ2VuUG9pbnRMaWdodChzYW1wbGVyIG5vcm1hbE1hcCwg
dmVjMyBsaWdodFBvcywgZmxvYXQgc3VyZmFjZVNjYWxlKQoreworCXZlYzIgcG9zPXNhbXBsZXJD
b29yZChub3JtYWxNYXApOworCXZlYzMgUCA9IHZlYzMocG9zLngsIHBvcy55LCBzdXJmYWNlU2Nh
bGUqc2FtcGxlKG5vcm1hbE1hcCwgcG9zKS5hKTsKKwl2ZWMzIEwgPSBsaWdodFBvcy1QOworCUw9
TC9zcXJ0KGRvdChMLEwpKTsKKwlyZXR1cm4gdmVjNChMLngsIEwueSwgTC56LCAxLjApOworfQpJ
bmRleDoga2NhbnZhcy9kZXZpY2UvcXVhcnR6L2RldmljZS9xdWFydHovZmlsdGVycy9XS1BvaW50
TGlnaHRGaWx0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09CmRpZmYgLU5wdSBrY2FudmFzL2RldmljZS9xdWFydHov
ZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL1dLUG9pbnRMaWdodEZpbHRlci5oCi0tLSBrY2FudmFzL2Rl
dmljZS9xdWFydHovZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL1dLUG9pbnRMaWdodEZpbHRlci5oCTEg
SmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAKKysrIGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9kZXZpY2Uv
cXVhcnR6L2ZpbHRlcnMvV0tQb2ludExpZ2h0RmlsdGVyLmgJMjggTm92IDIwMDUgMDE6NTY6MDQg
LTAwMDAKQEAgLTAsMCArMSwzNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBBcHBsZSBD
b21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2ltcG9ydCA8UXVh
cnR6Q29yZS9Db3JlSW1hZ2UuaD4KKworQGludGVyZmFjZSBXS1BvaW50TGlnaHRGaWx0ZXIgOiBD
SUZpbHRlciB7CisgICAgQ0lJbWFnZSAgKmlucHV0Tm9ybWFsTWFwOworICAgIENJVmVjdG9yICpp
bnB1dExpZ2h0UG9zaXRpb247CisgICAgTlNOdW1iZXIgKmlucHV0U3VyZmFjZVNjYWxlOworfQor
CitAZW5kCkluZGV4OiBrY2FudmFzL2RldmljZS9xdWFydHovZGV2aWNlL3F1YXJ0ei9maWx0ZXJz
L1dLUG9pbnRMaWdodEZpbHRlci5tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtTnB1IGtjYW52YXMvZGV2aWNl
L3F1YXJ0ei9kZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tQb2ludExpZ2h0RmlsdGVyLm0KLS0tIGtj
YW52YXMvZGV2aWNlL3F1YXJ0ei9kZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tQb2ludExpZ2h0Rmls
dGVyLm0JMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMAorKysga2NhbnZhcy9kZXZpY2UvcXVhcnR6
L2RldmljZS9xdWFydHovZmlsdGVycy9XS1BvaW50TGlnaHRGaWx0ZXIubQkyOCBOb3YgMjAwNSAw
MTo1MjoyMyAtMDAwMApAQCAtMCwwICsxLDcwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1
IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaW1wb3J0ICJXS1BvaW50TGlnaHRGaWx0ZXIuaCIKKworc3RhdGlj
IENJS2VybmVsICpwb2ludExpZ2h0RmlsdGVyID0gbmlsOworCitAaW1wbGVtZW50YXRpb24gV0tQ
b2ludExpZ2h0RmlsdGVyCisKKysgKHZvaWQpaW5pdGlhbGl6ZQoreworICAgIFtDSUZpbHRlciBy
ZWdpc3RlckZpbHRlck5hbWU6QCJXS1BvaW50TGlnaHQiCisgICAgICAgICAgICAgICAgICAgICBj
b25zdHJ1Y3Rvcjogc2VsZgorICAgICAgICAgICAgICAgICBjbGFzc0F0dHJpYnV0ZXM6IFtOU0Rp
Y3Rpb25hcnkgZGljdGlvbmFyeVdpdGhPYmplY3RzQW5kS2V5czoKKyAgICAgICAgICAgICAgICAg
ICAgIEAiV2ViS2l0IFBvaW50IExpZ2h0Iiwga0NJQXR0cmlidXRlRmlsdGVyRGlzcGxheU5hbWUs
CisgICAgICAgICAgICAgICAgICAgICBbTlNBcnJheSBhcnJheVdpdGhPYmplY3RzOiBrQ0lDYXRl
Z29yeVN0eWxpemUsIGtDSUNhdGVnb3J5VmlkZW8sCisgICAgICAgICAgICAgICAgICAgICAgICAg
a0NJQ2F0ZWdvcnlTdGlsbEltYWdlLCBrQ0lDYXRlZ29yeU5vblNxdWFyZVBpeGVscyxuaWxdLCBr
Q0lBdHRyaWJ1dGVGaWx0ZXJDYXRlZ29yaWVzLAorICAgICAgICAgICAgICAgICAgICAgW05TRGlj
dGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVjdHNBbmRLZXlzOgorICAgICAgICAgICAgICAgICAg
ICAgICAgIGtDSUF0dHJpYnV0ZVR5cGVQb3NpdGlvbjMsIGtDSUF0dHJpYnV0ZVR5cGUsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgbmlsXSwgQCJpbnB1dExpZ2h0UG9zaXRpb24iLAorICAgICAg
ICAgICAgICAgICAgICAgbmlsXV07Cit9CisKKysgKENJRmlsdGVyICopZmlsdGVyV2l0aE5hbWU6
KE5TU3RyaW5nICopbmFtZQoreworICAgIENJRmlsdGVyICpmaWx0ZXI7CisgICAgZmlsdGVyID0g
W1tzZWxmIGFsbG9jXSBpbml0XTsKKyAgICByZXR1cm4gW2ZpbHRlciBhdXRvcmVsZWFzZV07Cit9
CisKKy0gKGlkKWluaXQKK3sKKyAgICBpZiAoIXBvaW50TGlnaHRGaWx0ZXIpIHsKKyAgICAgICAg
TlNCdW5kbGUgKmJ1bmRsZSA9IFtOU0J1bmRsZSBidW5kbGVGb3JDbGFzczpbc2VsZiBjbGFzc11d
OworICAgICAgICBOU1N0cmluZyAqa2VybmVsRmlsZSA9IFtidW5kbGUgcGF0aEZvclJlc291cmNl
OkAiV0tQb2ludExpZ2h0RmlsdGVyIiBvZlR5cGU6QCJjaWtlcm5lbCJdOworICAgICAgICBOU1N0
cmluZyAqY29kZSA9IFtOU1N0cmluZyBzdHJpbmdXaXRoQ29udGVudHNPZkZpbGU6a2VybmVsRmls
ZV07CisgICAgICAgIE5TQXJyYXkgKmtlcm5lbHMgPSBbQ0lLZXJuZWwga2VybmVsc1dpdGhTdHJp
bmc6Y29kZV07CisgICAgICAgIHBvaW50TGlnaHRGaWx0ZXIgPSBbW2tlcm5lbHMgb2JqZWN0QXRJ
bmRleDowXSByZXRhaW5dOworICAgIH0KKyAgICByZXR1cm4gW3N1cGVyIGluaXRdOworfQorCist
IChDSUltYWdlICopb3V0cHV0SW1hZ2UKK3sKKyAgICByZXR1cm4gW3NlbGYgYXBwbHk6cG9pbnRM
aWdodEZpbHRlciwgaW5wdXROb3JtYWxNYXAsIGlucHV0TGlnaHRQb3NpdGlvbiwgaW5wdXRTdXJm
YWNlU2NhbGUsIG5pbF07Cit9CisKK0BlbmQKSW5kZXg6IGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9k
ZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tTcGVjdWxhckxpZ2h0aW5nRmlsdGVyLmNpa2VybmVsCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KZGlmZiAtTnB1IGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9kZXZpY2UvcXVhcnR6L2Zp
bHRlcnMvV0tTcGVjdWxhckxpZ2h0aW5nRmlsdGVyLmNpa2VybmVsCi0tLSBrY2FudmFzL2Rldmlj
ZS9xdWFydHovZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL1dLU3BlY3VsYXJMaWdodGluZ0ZpbHRlci5j
aWtlcm5lbAkxIEphbiAxOTcwIDAwOjAwOjAwIC0wMDAwCisrKyBrY2FudmFzL2RldmljZS9xdWFy
dHovZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL1dLU3BlY3VsYXJMaWdodGluZ0ZpbHRlci5jaWtlcm5l
bAkyOCBOb3YgMjAwNSAwMzo0NDoyNCAtMDAwMApAQCAtMCwwICsxLDQwIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA1IE9saXZlciBIdW50IDxvamgxNkBzdHVkZW50LmNhbnRlcmJ1cnkuYWMu
bno+LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQVVUSE9SIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisgCitrZXJuZWwgdmVjNCBiYXNpYyhzYW1wbGVyIGlucHV0Tm9ybWFsVmVj
dG9ycywgc2FtcGxlciBpbnB1dExpZ2h0VmVjdG9ycywgX19jb2xvciBpbnB1dExpZ2h0aW5nQ29s
b3IsIGZsb2F0IGlucHV0U3VyZmFjZVNjYWxlLCBmbG9hdCBpbnB1dFNwZWN1bGFyQ29uc3RhbnQs
CisgICAgICAgIGZsb2F0IGlucHV0U3BlY3VsYXJFeHBvbmVudCwgZmxvYXQgaW5wdXRLZXJuZWxV
bml0TGVuZ3RoWCwgZmxvYXQgaW5wdXRLZXJuZWxVbml0TGVuZ3RoWSkKK3sKKyAgICB2ZWMyIHBv
cyA9IHNhbXBsZXJDb29yZChpbnB1dExpZ2h0VmVjdG9ycyk7CisgICAgdmVjMiBwb3NuID0gc2Ft
cGxlckNvb3JkKGlucHV0Tm9ybWFsVmVjdG9ycyk7CisgICAgdmVjMyBsID0gc2FtcGxlKGlucHV0
TGlnaHRWZWN0b3JzLCBwb3MpLnh5ejsKKyAgICB2ZWMzIG4gPSBzYW1wbGUoaW5wdXROb3JtYWxW
ZWN0b3JzLCBwb3NuKS54eXo7CisgICAgdmVjMyBoID0gbCt2ZWMzKDAuMCwwLjAsMS4wKTsKKyAg
ICBoIC89IHNxcnQoZG90KGgsaCkpOworICAgIGZsb2F0IG5oID0gaW5wdXRTcGVjdWxhckNvbnN0
YW50KnBvdygoZG90KG4sIGgpKSwgaW5wdXRTcGVjdWxhckV4cG9uZW50KTsKKyAgICB2ZWM0IHJl
cyA9IGlucHV0TGlnaHRpbmdDb2xvciAqIG5oOworICAgIHJlcy5hID0gbWF4KHJlcy5yLHJlcy5n
KTsKKyAgICByZXMuYSA9IG1heChyZXMuYSwgcmVzLmIpOworICAgIHJldHVybiByZXM7Cit9Cklu
ZGV4OiBrY2FudmFzL2RldmljZS9xdWFydHovZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL1dLU3BlY3Vs
YXJMaWdodGluZ0ZpbHRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtTnB1IGtjYW52YXMvZGV2aWNlL3F1
YXJ0ei9kZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tTcGVjdWxhckxpZ2h0aW5nRmlsdGVyLmgKLS0t
IGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9kZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tTcGVjdWxhckxp
Z2h0aW5nRmlsdGVyLmgJMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMAorKysga2NhbnZhcy9kZXZp
Y2UvcXVhcnR6L2RldmljZS9xdWFydHovZmlsdGVycy9XS1NwZWN1bGFyTGlnaHRpbmdGaWx0ZXIu
aAkxMSBOb3YgMjAwNSAyMzozNjowMCAtMDAwMApAQCAtMCwwICsxLDM5IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA1IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09N
UFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW1wb3J0IDxRdWFydHpDb3JlL0NvcmVJbWFnZS5oPgorCisKK0BpbnRlcmZh
Y2UgV0tTcGVjdWxhckxpZ2h0aW5nRmlsdGVyIDogQ0lGaWx0ZXIgeworICAgIENJU2FtcGxlciAq
aW5wdXROb3JtYWxNYXA7CisgICAgQ0lTYW1wbGVyICppbnB1dExpZ2h0VmVjdG9yczsKKyAgICBD
SUNvbG9yICAqaW5wdXRMaWdodGluZ0NvbG9yOworICAgIE5TTnVtYmVyICppbnB1dFN1cmZhY2VT
Y2FsZTsKKyAgICBOU051bWJlciAqaW5wdXRTcGVjdWxhckNvbnN0YW50OworICAgIE5TTnVtYmVy
ICppbnB1dFNwZWN1bGFyRXhwb25lbnQ7CisgICAgTlNOdW1iZXIgKmlucHV0S2VybmVsVW5pdExl
bmd0aFg7CisgICAgTlNOdW1iZXIgKmlucHV0S2VybmVsVW5pdExlbmd0aFk7Cit9CitAZW5kCklu
ZGV4OiBrY2FudmFzL2RldmljZS9xdWFydHovZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL1dLU3BlY3Vs
YXJMaWdodGluZ0ZpbHRlci5tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtTnB1IGtjYW52YXMvZGV2aWNlL3F1
YXJ0ei9kZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tTcGVjdWxhckxpZ2h0aW5nRmlsdGVyLm0KLS0t
IGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9kZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tTcGVjdWxhckxp
Z2h0aW5nRmlsdGVyLm0JMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMAorKysga2NhbnZhcy9kZXZp
Y2UvcXVhcnR6L2RldmljZS9xdWFydHovZmlsdGVycy9XS1NwZWN1bGFyTGlnaHRpbmdGaWx0ZXIu
bQkyMCBOb3YgMjAwNSAxMzowNDoyMiAtMDAwMApAQCAtMCwwICsxLDkzIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA1IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09N
UFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW1wb3J0ICJXS1NwZWN1bGFyTGlnaHRpbmdGaWx0ZXIuaCIKKworc3RhdGlj
IENJS2VybmVsICpzcGVjdWxhckxpZ2h0aW5nRmlsdGVyID0gbmlsOworCitAaW1wbGVtZW50YXRp
b24gV0tTcGVjdWxhckxpZ2h0aW5nRmlsdGVyCisKKysgKHZvaWQpaW5pdGlhbGl6ZQoreworICAg
IFtDSUZpbHRlciByZWdpc3RlckZpbHRlck5hbWU6QCJXS1NwZWN1bGFyTGlnaHRpbmciICAKKyAg
ICAgICAgY29uc3RydWN0b3I6IHNlbGYKKyAgICAgICAgY2xhc3NBdHRyaWJ1dGVzOiBbTlNEaWN0
aW9uYXJ5IGRpY3Rpb25hcnlXaXRoT2JqZWN0c0FuZEtleXM6CisgICAgICAgICBAIldlYktpdCBT
cGVjdWxhciBMaWdodGluZyIsIGtDSUF0dHJpYnV0ZUZpbHRlckRpc3BsYXlOYW1lLAorICAgICAg
ICBbTlNBcnJheSBhcnJheVdpdGhPYmplY3RzOiBrQ0lDYXRlZ29yeVN0eWxpemUsIGtDSUNhdGVn
b3J5VmlkZW8sCisgICAgICAgICAgICBrQ0lDYXRlZ29yeVN0aWxsSW1hZ2UsIGtDSUNhdGVnb3J5
Tm9uU3F1YXJlUGl4ZWxzLG5pbF0sIGtDSUF0dHJpYnV0ZUZpbHRlckNhdGVnb3JpZXMsCisgICAg
ICAgIFtOU0RpY3Rpb25hcnkgZGljdGlvbmFyeVdpdGhPYmplY3RzQW5kS2V5czoKKyAgICAgICAg
ICAgIFtDSUNvbG9yIGNvbG9yV2l0aFJlZDoxLjAgZ3JlZW46MS4wIGJsdWU6MS4wIGFscGhhOjEu
MF0sCisgICAgICAgICAgICAga0NJQXR0cmlidXRlRGVmYXVsdCwgbmlsXSwgIEAiaW5wdXRMaWdo
dGluZ0NvbG9yIiwKKyAgICAgICAgW05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVjdHNB
bmRLZXlzOgorICAgICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhEb3VibGU6MC4wXSwga0NJ
QXR0cmlidXRlTWluLAorICAgICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhEb3VibGU6MS4w
XSwga0NJQXR0cmlidXRlRGVmYXVsdCwKKyAgICAgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRo
RG91YmxlOjEuMF0sIGtDSUF0dHJpYnV0ZUlkZW50aXR5LAorICAgICAgICAgICAga0NJQXR0cmli
dXRlVHlwZVNjYWxhciwga0NJQXR0cmlidXRlVHlwZSwKKyAgICAgICAgICAgIG5pbF0sIEAiaW5w
dXRTdXJmYWNlU2NhbGUiLAorICAgICAgICBbTlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnlXaXRoT2Jq
ZWN0c0FuZEtleXM6CisgICAgICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aERvdWJsZTowLjBd
LCBrQ0lBdHRyaWJ1dGVNaW4sCisgICAgICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aERvdWJs
ZToxLjBdLCBrQ0lBdHRyaWJ1dGVEZWZhdWx0LAorICAgICAgICAgICAgW05TTnVtYmVyIG51bWJl
cldpdGhEb3VibGU6MS4wXSwga0NJQXR0cmlidXRlSWRlbnRpdHksCisgICAgICAgICAgICBrQ0lB
dHRyaWJ1dGVUeXBlU2NhbGFyLCBrQ0lBdHRyaWJ1dGVUeXBlLAorICAgICAgICAgICAgbmlsXSwg
QCJpbnB1dFNwZWN1bGFyQ29uc3RhbnQiLAorICAgICAgICBbTlNEaWN0aW9uYXJ5IGRpY3Rpb25h
cnlXaXRoT2JqZWN0c0FuZEtleXM6CisgICAgICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aERv
dWJsZTowLjBdLCBrQ0lBdHRyaWJ1dGVNaW4sCisgICAgICAgICAgICBbTlNOdW1iZXIgbnVtYmVy
V2l0aERvdWJsZToxMjguMF0sIGtDSUF0dHJpYnV0ZU1pbiwKKyAgICAgICAgICAgIFtOU051bWJl
ciBudW1iZXJXaXRoRG91YmxlOjEuMF0sIGtDSUF0dHJpYnV0ZURlZmF1bHQsCisgICAgICAgICAg
ICBbTlNOdW1iZXIgbnVtYmVyV2l0aERvdWJsZToxLjBdLCBrQ0lBdHRyaWJ1dGVJZGVudGl0eSwK
KyAgICAgICAgICAgIGtDSUF0dHJpYnV0ZVR5cGVTY2FsYXIsIGtDSUF0dHJpYnV0ZVR5cGUsCisg
ICAgICAgICAgICBuaWxdLCBAImlucHV0U3BlY3VsYXJFeHBvbmVudCIsCisgICAgICAgIFtOU0Rp
Y3Rpb25hcnkgZGljdGlvbmFyeVdpdGhPYmplY3RzQW5kS2V5czoKKyAgICAgICAgICAgIGtDSUF0
dHJpYnV0ZVR5cGVPZmZzZXQsIGtDSUF0dHJpYnV0ZVR5cGUsCisgICAgICAgICAgICBuaWxdLCBA
ImlucHV0S2VybmVsVW5pdExlbmd0aCIsCisgICAgICAgIG5pbF1dOworfQorCisrIChDSUZpbHRl
ciAqKWZpbHRlcldpdGhOYW1lOihOU1N0cmluZyAqKW5hbWUKK3sKKyAgICBDSUZpbHRlciAqZmls
dGVyOworICAgIGZpbHRlciA9IFtbc2VsZiBhbGxvY10gaW5pdF07CisgICAgcmV0dXJuIFtmaWx0
ZXIgYXV0b3JlbGVhc2VdOworfQorCistIChpZClpbml0Cit7CisgICAgaWYgKCFzcGVjdWxhckxp
Z2h0aW5nRmlsdGVyKSB7CisgICAgICAgIE5TQnVuZGxlICpidW5kbGUgPSBbTlNCdW5kbGUgYnVu
ZGxlRm9yQ2xhc3M6W3NlbGYgY2xhc3NdXTsKKyAgICAgICAgTlNTdHJpbmcgKmtlcm5lbEZpbGUg
PSBbYnVuZGxlIHBhdGhGb3JSZXNvdXJjZTpAIldLU3BlY3VsYXJMaWdodGluZ0ZpbHRlciIgb2ZU
eXBlOkAiY2lrZXJuZWwiXTsKKyAgICAgICAgTlNTdHJpbmcgKmNvZGUgPSBbTlNTdHJpbmcgc3Ry
aW5nV2l0aENvbnRlbnRzT2ZGaWxlOmtlcm5lbEZpbGVdOworICAgICAgICBOU0FycmF5ICprZXJu
ZWxzID0gW0NJS2VybmVsIGtlcm5lbHNXaXRoU3RyaW5nOmNvZGVdOworICAgICAgICBzcGVjdWxh
ckxpZ2h0aW5nRmlsdGVyID0gW1trZXJuZWxzIG9iamVjdEF0SW5kZXg6MF0gcmV0YWluXTsKKyAg
ICB9CisgICAgcmV0dXJuIFtzdXBlciBpbml0XTsKK30KKworLSAoQ0lJbWFnZSAqKW91dHB1dElt
YWdlCit7CisgICAgcmV0dXJuIFtzZWxmIGFwcGx5OnNwZWN1bGFyTGlnaHRpbmdGaWx0ZXIsIGlu
cHV0Tm9ybWFsTWFwLCBpbnB1dExpZ2h0VmVjdG9ycywgaW5wdXRMaWdodGluZ0NvbG9yLCBpbnB1
dFN1cmZhY2VTY2FsZSwgaW5wdXRTcGVjdWxhckNvbnN0YW50LAorICAgICAgICBpbnB1dFNwZWN1
bGFyRXhwb25lbnQsIGlucHV0S2VybmVsVW5pdExlbmd0aFgsIGlucHV0S2VybmVsVW5pdExlbmd0
aFksIG5pbF07Cit9CisKK0BlbmQKSW5kZXg6IGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9kZXZpY2Uv
cXVhcnR6L2ZpbHRlcnMvV0tTcG90TGlnaHRGaWx0ZXIuY2lrZXJuZWwKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpkaWZm
IC1OcHUga2NhbnZhcy9kZXZpY2UvcXVhcnR6L2RldmljZS9xdWFydHovZmlsdGVycy9XS1Nwb3RM
aWdodEZpbHRlci5jaWtlcm5lbAotLS0ga2NhbnZhcy9kZXZpY2UvcXVhcnR6L2RldmljZS9xdWFy
dHovZmlsdGVycy9XS1Nwb3RMaWdodEZpbHRlci5jaWtlcm5lbAkxIEphbiAxOTcwIDAwOjAwOjAw
IC0wMDAwCisrKyBrY2FudmFzL2RldmljZS9xdWFydHovZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL1dL
U3BvdExpZ2h0RmlsdGVyLmNpa2VybmVsCTI4IE5vdiAyMDA1IDAzOjQ0OjE4IC0wMDAwCkBAIC0w
LDAgKzEsMzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgT2xpdmVyIEh1bnQgPG9qaDE2
QHN0dWRlbnQuY2FudGVyYnVyeS5hYy5uej4uICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKyAKK2tlcm5lbCB2ZWM0IHNwb3RM
aWdodEZpbHRlcihzYW1wbGVyIGxpZ2h0VmVjdG9ycywgdmVjMyBsaWdodERpcmVjdGlvbiwgZmxv
YXQgc3BlY3VsYXJFeHBvbmVudCwgZmxvYXQgY29zQ3V0b2ZmQW5nbGUpCit7CisgICAgdmVjMiBw
b3M9c2FtcGxlckNvb3JkKGxpZ2h0VmVjdG9ycyk7CisgICAgdmVjMyBsID0gc2FtcGxlKGxpZ2h0
VmVjdG9ycywgcG9zKS54eXo7CisgICAgbC89c3FydChkb3QobCxsKSk7CisgICAgZmxvYXQgc2w9
LShkb3QobGlnaHREaXJlY3Rpb24sbCkpOworICAgIHNsPW1heChzbCwwLjApOworICAgIAorICAg
IC8vcGVyZm9ybSBjdXRvZmYKKyAgICBmbG9hdCBvdXRzaWRlQ3V0b2ZmID0gY29tcGFyZShhYnMo
Y29zQ3V0b2ZmQW5nbGUpLXNsLCAxLjAsIDAuMCk7CisgICAgc2w9cG93KHNsLHNwZWN1bGFyRXhw
b25lbnQpOworICAgIHJldHVybiB2ZWM0KGwueCxsLnksbC56LG91dHNpZGVDdXRvZmYqc2wpOwor
fQpJbmRleDoga2NhbnZhcy9kZXZpY2UvcXVhcnR6L2RldmljZS9xdWFydHovZmlsdGVycy9XS1Nw
b3RMaWdodEZpbHRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtTnB1IGtjYW52YXMvZGV2aWNlL3F1YXJ0
ei9kZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tTcG90TGlnaHRGaWx0ZXIuaAotLS0ga2NhbnZhcy9k
ZXZpY2UvcXVhcnR6L2RldmljZS9xdWFydHovZmlsdGVycy9XS1Nwb3RMaWdodEZpbHRlci5oCTEg
SmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAKKysrIGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9kZXZpY2Uv
cXVhcnR6L2ZpbHRlcnMvV0tTcG90TGlnaHRGaWx0ZXIuaAkyMCBOb3YgMjAwNSAxMTowNDowMyAt
MDAwMApAQCAtMCwwICsxLDM0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1IEFwcGxlIENv
bXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW1wb3J0IDxRdWFy
dHpDb3JlL0NvcmVJbWFnZS5oPgorCitAaW50ZXJmYWNlIFdLU3BvdExpZ2h0RmlsdGVyIDogQ0lG
aWx0ZXIgeworICAgIENJSW1hZ2UgICppbnB1dExpZ2h0VmVjdG9yczsKKyAgICBDSVZlY3RvciAq
aW5wdXRMaWdodERpcmVjdGlvbjsKKyAgICBOU051bWJlciAqaW5wdXRTcGVjdWxhckV4cG9uZW50
OworICAgIE5TTnVtYmVyICppbnB1dExpbWl0aW5nQ29uZUFuZ2xlOworfQorQGVuZApJbmRleDog
a2NhbnZhcy9kZXZpY2UvcXVhcnR6L2RldmljZS9xdWFydHovZmlsdGVycy9XS1Nwb3RMaWdodEZp
bHRlci5tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KZGlmZiAtTnB1IGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9kZXZpY2Uv
cXVhcnR6L2ZpbHRlcnMvV0tTcG90TGlnaHRGaWx0ZXIubQotLS0ga2NhbnZhcy9kZXZpY2UvcXVh
cnR6L2RldmljZS9xdWFydHovZmlsdGVycy9XS1Nwb3RMaWdodEZpbHRlci5tCTEgSmFuIDE5NzAg
MDA6MDA6MDAgLTAwMDAKKysrIGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9kZXZpY2UvcXVhcnR6L2Zp
bHRlcnMvV0tTcG90TGlnaHRGaWx0ZXIubQkyMCBOb3YgMjAwNSAxMzowNDoyMiAtMDAwMApAQCAt
MCwwICsxLDc5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1IEFwcGxlIENvbXB1dGVyLCBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworIAorI2ltcG9ydCAiV0tTcG90TGlnaHRG
aWx0ZXIuaCIKKworc3RhdGljIENJS2VybmVsICpzcG90TGlnaHRGaWx0ZXIgPSBuaWw7CisKK0Bp
bXBsZW1lbnRhdGlvbiBXS1Nwb3RMaWdodEZpbHRlcgorCisrICh2b2lkKWluaXRpYWxpemUKK3sK
KyAgICBbQ0lGaWx0ZXIgcmVnaXN0ZXJGaWx0ZXJOYW1lOkAiV0tTcG90TGlnaHQiCisgICAgICAg
IGNvbnN0cnVjdG9yOiBzZWxmCisgICAgICAgIGNsYXNzQXR0cmlidXRlczogW05TRGljdGlvbmFy
eSBkaWN0aW9uYXJ5V2l0aE9iamVjdHNBbmRLZXlzOgorICAgICAgICAgQCJXZWJLaXQgU3BvdCBM
aWdodCIsIGtDSUF0dHJpYnV0ZUZpbHRlckRpc3BsYXlOYW1lLAorICAgICAgICBbTlNBcnJheSBh
cnJheVdpdGhPYmplY3RzOiBrQ0lDYXRlZ29yeVN0eWxpemUsIGtDSUNhdGVnb3J5VmlkZW8sCisg
ICAgICAgICAgICBrQ0lDYXRlZ29yeVN0aWxsSW1hZ2UsIGtDSUNhdGVnb3J5Tm9uU3F1YXJlUGl4
ZWxzLG5pbF0sIGtDSUF0dHJpYnV0ZUZpbHRlckNhdGVnb3JpZXMsCisgICAgICAgIFtOU0RpY3Rp
b25hcnkgZGljdGlvbmFyeVdpdGhPYmplY3RzQW5kS2V5czoKKyAgICAgICAgICAgIGtDSUF0dHJp
YnV0ZVR5cGVQb3NpdGlvbjMsIGtDSUF0dHJpYnV0ZVR5cGUsCisgICAgICAgICAgICBuaWxdLCBA
ImlucHV0TGlnaHREaXJlY3Rpb24iLAorICAgICAgICBbTlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnlX
aXRoT2JqZWN0c0FuZEtleXM6CisgICAgICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aERvdWJs
ZToxLjBdLCBrQ0lBdHRyaWJ1dGVEZWZhdWx0LAorICAgICAgICAgICAgW05TTnVtYmVyIG51bWJl
cldpdGhEb3VibGU6MS4wXSwga0NJQXR0cmlidXRlSWRlbnRpdHksCisgICAgICAgICAgICBrQ0lB
dHRyaWJ1dGVUeXBlU2NhbGFyLCBrQ0lBdHRyaWJ1dGVUeXBlLAorICAgICAgICAgICAgbmlsXSwg
QCJpbnB1dFNwZWN1bGFyRXhwb25lbnQiLAorICAgICAgICBbTlNEaWN0aW9uYXJ5IGRpY3Rpb25h
cnlXaXRoT2JqZWN0c0FuZEtleXM6CisgICAgICAgICAgICBrQ0lBdHRyaWJ1dGVUeXBlQW5nbGUs
IGtDSUF0dHJpYnV0ZVR5cGUsCisgICAgICAgICAgICBuaWxdLCBAImlucHV0TGltaXRpbmdDb25l
QW5nbGUiLAorICAgICAgICBuaWxdXTsKK30KKworKyAoQ0lGaWx0ZXIgKilmaWx0ZXJXaXRoTmFt
ZTooTlNTdHJpbmcgKiluYW1lCit7CisgICAgQ0lGaWx0ZXIgKmZpbHRlcjsKKyAgICBmaWx0ZXIg
PSBbW3NlbGYgYWxsb2NdIGluaXRdOworICAgIHJldHVybiBbZmlsdGVyIGF1dG9yZWxlYXNlXTsK
K30KKworLSAoaWQpaW5pdAoreworICAgIGlmICghc3BvdExpZ2h0RmlsdGVyKSB7CisgICAgICAg
IE5TQnVuZGxlICpidW5kbGUgPSBbTlNCdW5kbGUgYnVuZGxlRm9yQ2xhc3M6W3NlbGYgY2xhc3Nd
XTsKKyAgICAgICAgTlNTdHJpbmcgKmtlcm5lbEZpbGUgPSBbYnVuZGxlIHBhdGhGb3JSZXNvdXJj
ZTpAIldLU3BvdExpZ2h0RmlsdGVyIiBvZlR5cGU6QCJjaWtlcm5lbCJdOworICAgICAgICBOU1N0
cmluZyAqY29kZSA9IFtOU1N0cmluZyBzdHJpbmdXaXRoQ29udGVudHNPZkZpbGU6a2VybmVsRmls
ZV07CisgICAgICAgIE5TQXJyYXkgKmtlcm5lbHMgPSBbQ0lLZXJuZWwga2VybmVsc1dpdGhTdHJp
bmc6Y29kZV07CisgICAgICAgIHNwb3RMaWdodEZpbHRlciA9IFtba2VybmVscyBvYmplY3RBdElu
ZGV4OjBdIHJldGFpbl07CisgICAgfQorICAgIHJldHVybiBbc3VwZXIgaW5pdF07Cit9CisKKy0g
KENJSW1hZ2UgKilvdXRwdXRJbWFnZQoreworICAgIGZsb2F0IGNvc2N1dG9mZiA9IGNvcyhbaW5w
dXRMaW1pdGluZ0NvbmVBbmdsZSBmbG9hdFZhbHVlXSk7CisgICAgcmV0dXJuIFtzZWxmIGFwcGx5
OnNwb3RMaWdodEZpbHRlciwgaW5wdXRMaWdodFZlY3RvcnMsIGlucHV0TGlnaHREaXJlY3Rpb24s
IGlucHV0U3BlY3VsYXJFeHBvbmVudCwgW05TTnVtYmVyIG51bWJlcldpdGhGbG9hdDpjb3NjdXRv
ZmZdLCBuaWxdOworfQorCitAZW5kCkluZGV4OiBrY2FudmFzL0tDYW52YXNGaWx0ZXJzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rY2FudmFzL0tDYW52YXNG
aWx0ZXJzLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS45CmRpZmYgLXAgLXUgLXIxLjkga2Nh
bnZhcy9LQ2FudmFzRmlsdGVycy5jcHAKLS0tIGtjYW52YXMvS0NhbnZhc0ZpbHRlcnMuY3BwCTIy
IE5vdiAyMDA1IDEyOjAzOjE1IC0wMDAwCTEuOQorKysga2NhbnZhcy9LQ2FudmFzRmlsdGVycy5j
cHAJMjggTm92IDIwMDUgMDM6NTc6MzUgLTAwMDAKQEAgLTI4LDYgKzI4LDE0IEBACiAjaW5jbHVk
ZSAiS0NhbnZhc1RyZWVEZWJ1Zy5oIgogI2luY2x1ZGUgPGt4bWxjb3JlL0Fzc2VydGlvbnMuaD4K
IAordm9pZCBLQ2FudmFzUG9pbnQzRjo6bm9ybWFsaXplKCkKK3sKKyAgICBmbG9hdCBsZW5ndGgg
PSBzcXJ0KG1feCptX3grbV95Km1feSttX3oqbV96KTsKKyAgICBtX3ggLz0gbGVuZ3RoOworICAg
IG1feSAvPSBsZW5ndGg7CisgICAgbV96IC89IGxlbmd0aDsKK30KKwogLy8gRmlsdGVycwogCiB2
b2lkIEtDYW52YXNGaWx0ZXI6OmFkZEZpbHRlckVmZmVjdChLQ2FudmFzRmlsdGVyRWZmZWN0ICpl
ZmZlY3QpCkBAIC05Miw2ICsxMDAsMTQgQEAgdm9pZCBLQ2FudmFzRmlsdGVyRWZmZWN0OjpzZXRS
ZXN1bHQoY29ucwogICAgIG1fcmVzdWx0ID0gcmVzdWx0OwogfQogCisKK3N0YXRpYyBRVGV4dFN0
cmVhbSAmb3BlcmF0b3I8PChRVGV4dFN0cmVhbSAmdHMsIGNvbnN0IEtDYW52YXNQb2ludDNGIHAp
Cit7CisgICAgdHMgPDwgIng9IiA8PCBwLngoKSA8PCAiIHk9IiA8PCBwLnkoKSA8PCAiIHo9IiA8
PCBwLnooKTsKKyAgICByZXR1cm4gdHM7ICAKK30KKworCiBRVGV4dFN0cmVhbSAmS0NhbnZhc0Zp
bHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihRVGV4dFN0cmVhbSAmdHMpIGNvbnN0
CiB7CiAgICAgaWYgKCFpbigpLmlzRW1wdHkoKSkKQEAgLTEwMywzMCArMTE5LDM3IEBAIFFUZXh0
U3RyZWFtICZLQ2FudmFzRmlsdGVyRWZmZWN0OjpleHRlcm4KICAgICByZXR1cm4gdHM7ICAgIAog
fQogCi1RVGV4dFN0cmVhbSAmS0NhbnZhc0ZFRGlzdGFudExpZ2h0OjpleHRlcm5hbFJlcHJlc2Vu
dGF0aW9uKFFUZXh0U3RyZWFtICZ0cykgY29uc3QKK1FUZXh0U3RyZWFtICZLQ1BvaW50TGlnaHRT
b3VyY2U6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oUVRleHRTdHJlYW0gJnRzKSBjb25zdAogewot
ICAgIHRzIDw8ICJbdHlwZT1ESVNUQU5ULUxJR0hUXSAiOwotICAgIEtDYW52YXNGaWx0ZXJFZmZl
Y3Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMpOwotICAgIHRzIDw8ICJbYXppbXV0aD0iIDw8
IGF6aW11dGgoKSA8PCAiXSIKLSAgICAgICAgPDwgIltlbGV2YXRpb249IiA8PCBlbGV2YXRpb24o
KSA8PCAiXSI7Ci0gICAgcmV0dXJuIHRzOworICAgIHRzIDw8ICJbdHlwZT1QT0lOVC1MSUdIVF0g
IjsKKyAgICB0cyA8PCAiW3Bvc2l0aW9uPVwiIiA8PCBwb3NpdGlvbigpIDw8ICJcIl0iOworICAg
IHJldHVybiB0czsgIAogfQogCi1RVGV4dFN0cmVhbSAmS0NhbnZhc0ZFUG9pbnRMaWdodDo6ZXh0
ZXJuYWxSZXByZXNlbnRhdGlvbihRVGV4dFN0cmVhbSAmdHMpIGNvbnN0CitRVGV4dFN0cmVhbSAm
S0NTcG90TGlnaHRTb3VyY2U6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oUVRleHRTdHJlYW0gJnRz
KSBjb25zdAogewotICAgIHRzIDw8ICJbdHlwZT1QT0lOVC1MSUdIVF0gIjsKLSAgICBLQ2FudmFz
RmlsdGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzKTsKLSAgICB0cyA8PCAiW3g9
IiA8PCBtX3ggPDwgIiB5PSIgPDwgbV95IDw8ICIgej0iIDw8IG1feiA8PCAiXSI7CisgICAgdHMg
PDwgIlt0eXBlPVNQT1QtTElHSFRdICI7CisgICAgdHMgPDwgIltwb3NpdGlvbj1cIiIgPDwgcG9z
aXRpb24oKSA8PCAiXCJdIjsKKyAgICB0cyA8PCAiW2RpcmVjdGlvbj1cIiIgPDwgZGlyZWN0aW9u
KCkgPDwgIlwiXSI7CisgICAgdHMgPDwgIltzcGVjdWxhckV4cG9uZW50PVwiIiA8PCBzcGVjdWxh
ckV4cG9uZW50KCkgPDwgIlwiXSI7CisgICAgdHMgPDwgIltsaW1pdGluZ0NvbmVBbmdsZT1cIiIg
PDwgbGltaXRpbmdDb25lQW5nbGUoKSA8PCAiXCJdIjsKICAgICByZXR1cm4gdHM7CiB9CiAKLVFU
ZXh0U3RyZWFtICZLQ2FudmFzRkVTcG90TGlnaHQ6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oUVRl
eHRTdHJlYW0gJnRzKSBjb25zdAorUVRleHRTdHJlYW0gJktDRGlzdGFudExpZ2h0U291cmNlOjpl
eHRlcm5hbFJlcHJlc2VudGF0aW9uKFFUZXh0U3RyZWFtICZ0cykgY29uc3QKIHsKLSAgICB0cyA8
PCAiW3R5cGU9U1BPVC1MSUdIVF0gIjsgCi0gICAgS0NhbnZhc0ZpbHRlckVmZmVjdDo6ZXh0ZXJu
YWxSZXByZXNlbnRhdGlvbih0cyk7Ci0gICAgdHMgPDwgIlt4PSIgPDwgbV94IDw8ICIgeT0iIDw8
IG1feSA8PCAiIHo9IiA8PCBtX3ogPDwgIl0iCi0gICAgICAgIDw8ICJbcG9pbnRzIGF0IHg9IiA8
PCBtX3BvaW50c0F0WCA8PCAiIHk9IiA8PCBtX3BvaW50c0F0WSA8PCAiIHo9IiA8PCBtX3BvaW50
c0F0WiA8PCAiXSI7Ci0gICAgcmV0dXJuIHRzOworICAgIHRzIDw8ICJbdHlwZT1ESVNUQU5ULUxJ
R0hUXSAiOworICAgIHRzIDw8ICJbYXppbXV0aD1cIiIgPDwgYXppbXV0aCgpIDw8ICJcIl0iOwor
ICAgIHRzIDw8ICJbZWxldmF0aW9uPVwiIiA8PCBlbGV2YXRpb24oKSA8PCAiXCJdIjsKKyAgICBy
ZXR1cm4gdHM7ICAKK30KKworCisKK3N0YXRpYyBRVGV4dFN0cmVhbSAmb3BlcmF0b3I8PChRVGV4
dFN0cmVhbSAmdHMsIFFQb2ludEYgcCkKK3sKKyAgICB0cyA8PCAieD0iIDw8IHAueCgpIDw8ICIg
eT0iIDw8IHAueSgpOworICAgIHJldHVybiB0czsgIAogfQogCiBzdGF0aWMgUVRleHRTdHJlYW0g
Jm9wZXJhdG9yPDwoUVRleHRTdHJlYW0gJnRzLCBLQ0JsZW5kTW9kZVR5cGUgdCkKQEAgLTI0NCwy
MCArMjY3LDI2IEBAIHN0YXRpYyBRVGV4dFN0cmVhbSAmb3BlcmF0b3I8PChRVGV4dFN0cmUKICAg
ICAgICAgY2FzZSBFTV9OT05FOgogICAgICAgICAgICAgdHMgPDwgIk5PTkUiOyBicmVhazsKICAg
ICB9Ci0gICAgcmV0dXJuIHRzOyAgICAKKyAgICByZXR1cm4gdHM7Cit9CisKK3N0YXRpYyBRVGV4
dFN0cmVhbSAmb3BlcmF0b3I8PChRVGV4dFN0cmVhbSAmdHMsIFFTaXplIHMpCit7ICAgCisgICAg
dHMgPDwgIng9IiA8PCBzLndpZHRoKCkgPDwgIiB5PSIgPDwgcy5oZWlnaHQoKTsgCisgICAgcmV0
dXJuIHRzOwogfQogCiBRVGV4dFN0cmVhbSAmS0NhbnZhc0ZFQ29udm9sdmVNYXRyaXg6OmV4dGVy
bmFsUmVwcmVzZW50YXRpb24oUVRleHRTdHJlYW0gJnRzKSBjb25zdAogewogICAgIHRzIDw8ICJb
dHlwZT1DT05WT0xWRS1NQVRSSVhdICI7CiAgICAgS0NhbnZhc0ZpbHRlckVmZmVjdDo6ZXh0ZXJu
YWxSZXByZXNlbnRhdGlvbih0cyk7Ci0gICAgdHMgPDwgIiBbb3JkZXIgeD0gIiA8PCBtX29yZGVy
WCA8PCAiIHk9IiA8PCBtX29yZGVyWSA8PCAiXSIKKyAgICB0cyA8PCAiIFtvcmRlciAiIDw8IG1f
a2VybmVsU2l6ZSA8PCAiXSIKICAgICAgICAgPDwgIiBba2VybmVsIG1hdHJpeD0iIDw8IG1fa2Vy
bmVsTWF0cml4ICA8PCAiXSIKICAgICAgICAgPDwgIiBbZGl2aXNvcj0iIDw8IG1fZGl2aXNvciA8
PCAiXSIKICAgICAgICAgPDwgIiBbYmlhcz0iIDw8IG1fYmlhcyA8PCAiXSIKLSAgICAgICAgPDwg
IiBbdGFyZ2V0IHg9ICIgPDwgbV90YXJnZXRYIDw8ICIgeT0iIDw8IG1fdGFyZ2V0WSA8PCAiXSIK
KyAgICAgICAgPDwgIiBbdGFyZ2V0ICIgPDwgbV90YXJnZXRPZmZzZXQgPDwgIl0iCiAgICAgICAg
IDw8ICIgW2VkZ2UgbW9kZT0iIDw8IG1fZWRnZU1vZGUgPDwgIl0iCi0gICAgICAgIDw8ICIgW2tl
cm5lbCB1bml0IGxlbmd0aCB4PSIgPDwgbV9rZXJuZWxVbml0TGVuZ3RoWCA8PCAiIHk9IiA8PCBt
X2tlcm5lbFVuaXRMZW5ndGhZIDw8ICJdIgorICAgICAgICA8PCAiIFtrZXJuZWwgdW5pdCBsZW5n
dGggIiA8PCBtX2tlcm5lbFVuaXRMZW5ndGggPDwgIl0iCiAgICAgICAgIDw8ICIgW3ByZXNlcnZl
IGFscGhhPSIgPDwgbV9wcmVzZXJ2ZUFscGhhIDw8ICJdIjsgICAgICAgIAogICAgcmV0dXJuIHRz
OwogfQpAQCAtMjY4LDcgKzI5Nyw3IEBAIFFUZXh0U3RyZWFtICZLQ2FudmFzRkVEaWZmdXNlTGln
aHRpbmc6OmUKICAgICBLQ2FudmFzRmlsdGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9u
KHRzKTsKICAgICB0cyA8PCAiIFtzdXJmYWNlIHNjYWxlPSIgPDwgbV9zdXJmYWNlU2NhbGUgPDwg
Il0iCiAgICAgICAgIDw8ICIgW2RpZmZ1c2UgY29uc3RhbnQ9IiA8PCBtX2RpZmZ1c2VDb25zdGFu
dCA8PCAiXSIKLSAgICAgICAgPDwgIiBba2VybmVsIHVuaXQgbGVuZ3RoIHg9IiA8PCBtX2tlcm5l
bFVuaXRMZW5ndGhYIDw8ICIgeT0iIDw8IG1fa2VybmVsVW5pdExlbmd0aFkgPDwgIl0iOworICAg
ICAgICA8PCAiIFtrZXJuZWwgdW5pdCBsZW5ndGggIiA8PCBtX2tlcm5lbFVuaXRMZW5ndGhYIDw8
ICIsICIgPDwgbV9rZXJuZWxVbml0TGVuZ3RoWSA8PCAiXSI7CiAgICByZXR1cm4gdHM7CiB9CiAK
SW5kZXg6IGtjYW52YXMvS0NhbnZhc0ZpbHRlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zz
L3Jvb3QvU1ZHU3VwcG9ydC9rY2FudmFzL0tDYW52YXNGaWx0ZXJzLmgsdgpyZXRyaWV2aW5nIHJl
dmlzaW9uIDEuMTEKZGlmZiAtcCAtdSAtcjEuMTEga2NhbnZhcy9LQ2FudmFzRmlsdGVycy5oCi0t
LSBrY2FudmFzL0tDYW52YXNGaWx0ZXJzLmgJMjMgTm92IDIwMDUgMTU6MTQ6MDUgLTAwMDAJMS4x
MQorKysga2NhbnZhcy9LQ2FudmFzRmlsdGVycy5oCTI4IE5vdiAyMDA1IDAzOjU3OjM2IC0wMDAw
CkBAIC01Myw2ICs1Myw1NSBAQCB0eXBlZGVmIGVudW0KICNpbmNsdWRlIDxxY29sb3IuaD4KICNp
bmNsdWRlIDxxc3RyaW5nbGlzdC5oPgogCitjbGFzcyBLQ2FudmFzUG9pbnQzRiB7CitwdWJsaWM6
CisgICAgS0NhbnZhc1BvaW50M0YoKTptX3goMCksIG1feSgwKSwgbV96KDApIHt9CisgICAgS0Nh
bnZhc1BvaW50M0YoZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgeik6bV94KHgpLCBtX3koeSksIG1f
eih6KSB7fQorICAgIGZsb2F0IHgoKSBjb25zdCB7IHJldHVybiBtX3g7IH0KKyAgICB2b2lkIHNl
dFgoZmxvYXQgeCkgeyBtX3ggPSB4OyB9CisgICAgCisgICAgZmxvYXQgeSgpIGNvbnN0IHsgcmV0
dXJuIG1feTsgfQorICAgIHZvaWQgc2V0WShmbG9hdCB5KSB7IG1feSA9IHk7IH0KKyAgICAKKyAg
ICBmbG9hdCB6KCkgY29uc3QgeyByZXR1cm4gbV96OyB9CisgICAgdm9pZCBzZXRaKGZsb2F0IHop
IHsgbV96ID0gejsgfQorICAgIAorICAgIHZvaWQgbm9ybWFsaXplKCk7CisgICAgCitwcml2YXRl
OgorICAgIGZsb2F0IG1feDsKKyAgICBmbG9hdCBtX3k7CisgICAgZmxvYXQgbV96OworfTsKKwor
Ly8gVGVtcG9yYXJ5IEhBQ0sKK2NsYXNzIFFQb2ludEYgeworcHVibGljOgorICAgIGZsb2F0IHgo
KSBjb25zdCB7IHJldHVybiBtX3g7IH0KKyAgICB2b2lkIHNldFgoZmxvYXQgeCkgeyBtX3ggPSB4
OyB9CisgICAgCisgICAgZmxvYXQgeSgpIGNvbnN0IHsgcmV0dXJuIG1feTsgfQorICAgIHZvaWQg
c2V0WShmbG9hdCB5KSB7IG1feSA9IHk7IH0KKyAgICAKK3ByaXZhdGU6CisgICAgZmxvYXQgbV94
OworICAgIGZsb2F0IG1feTsKK307CisKKy8vIFRlbXBvcmFyeSBIQUNLCitjbGFzcyBRU2l6ZUYg
eworcHVibGljOgorICAgIGZsb2F0IHdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV93aWR0aDsgfQor
ICAgIHZvaWQgc2V0V2lkdGgoZmxvYXQgd2lkdGgpIHsgbV93aWR0aCA9IHdpZHRoOyB9CisgICAg
CisgICAgZmxvYXQgaGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9oZWlnaHQ7IH0KKyAgICB2b2lk
IHNldEhlaWdodChmbG9hdCBoZWlnaHQpIHsgbV9oZWlnaHQgPSBoZWlnaHQ7IH0KKyAgICAKK3By
aXZhdGU6CisgICAgZmxvYXQgbV93aWR0aDsKKyAgICBmbG9hdCBtX2hlaWdodDsKK307CisKIGNs
YXNzIEtDYW52YXNGaWx0ZXJFZmZlY3Q7CiBjbGFzcyBLUmVuZGVyaW5nRGV2aWNlOwogCkBAIC0x
MzAsNTEgKzE3OSw2IEBAIHByaXZhdGU6CiAKIFFUZXh0U3RyZWFtICZvcGVyYXRvcjw8KFFUZXh0
U3RyZWFtICYsIGNvbnN0IEtDYW52YXNGaWx0ZXJFZmZlY3QgJik7CiAKLWNsYXNzIEtDYW52YXNG
RURpc3RhbnRMaWdodCA6IHB1YmxpYyBLQ2FudmFzRmlsdGVyRWZmZWN0Ci17Ci1wdWJsaWM6Ci0g
ICAgZmxvYXQgYXppbXV0aCgpIGNvbnN0IHsgcmV0dXJuIG1fYXppbXV0aDsgfQotICAgIHZvaWQg
c2V0QXppbXV0aChmbG9hdCBhemltdXRoKSB7IG1fYXppbXV0aCA9IGF6aW11dGg7IH0KLQotICAg
IGZsb2F0IGVsZXZhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZWxldmF0aW9uOyB9Ci0gICAgdm9p
ZCBzZXRFbGV2YXRpb24oZmxvYXQgZWxldmF0aW9uKSB7IG1fZWxldmF0aW9uID0gZWxldmF0aW9u
OyB9Ci0gICAgCi0gICAgLy8gRklYTUUsIG1vcmUgaGVyZS4uLgotICAgICBRVGV4dFN0cmVhbSAm
ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihRVGV4dFN0cmVhbSAmKSBjb25zdDsKLXByaXZhdGU6Ci0g
ICAgZmxvYXQgbV9hemltdXRoOwotICAgIGZsb2F0IG1fZWxldmF0aW9uOwotfTsKLQotY2xhc3Mg
S0NhbnZhc0ZFUG9pbnRMaWdodCA6IHB1YmxpYyBLQ2FudmFzRmlsdGVyRWZmZWN0Ci17Ci1wdWJs
aWM6Ci0KLSAgICBRVGV4dFN0cmVhbSAmZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihRVGV4dFN0cmVh
bSAmKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICBmbG9hdCBtX3g7Ci0gICAgZmxvYXQgbV95Owot
ICAgIGZsb2F0IG1fejsKLX07Ci0KLWNsYXNzIEtDYW52YXNGRVNwb3RMaWdodCA6IHB1YmxpYyBL
Q2FudmFzRmlsdGVyRWZmZWN0Ci17Ci1wdWJsaWM6Ci0KLSAgICBRVGV4dFN0cmVhbSAmZXh0ZXJu
YWxSZXByZXNlbnRhdGlvbihRVGV4dFN0cmVhbSAmKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICBm
bG9hdCBtX3g7Ci0gICAgZmxvYXQgbV95OwotICAgIGZsb2F0IG1fejsKLSAgICBmbG9hdCBtX3Bv
aW50c0F0WDsKLSAgICBmbG9hdCBtX3BvaW50c0F0WTsKLSAgICBmbG9hdCBtX3BvaW50c0F0WjsK
LSAgICBmbG9hdCBtX3NwZWN1bGFyRXhwb25lbnQ7Ci0gICAgZmxvYXQgbV9saW1pdGluZ0NvbmVB
bmdsZTsKLX07Ci0KIHR5cGVkZWYgZW51bSB7CiAgICAgQk1fTk9STUFMID0gMCwKICAgICBCTV9N
VUxUSVBMWSA9IDEsCkBAIC0zMzUsMzQgKzMzOSwxNDUgQEAgdHlwZWRlZiBlbnVtIHsKIGNsYXNz
IEtDYW52YXNGRUNvbnZvbHZlTWF0cml4IDogcHVibGljIEtDYW52YXNGaWx0ZXJFZmZlY3QKIHsK
IHB1YmxpYzoKKyAgICBRU2l6ZSBrZXJuZWxTaXplKCkgY29uc3QgeyByZXR1cm4gbV9rZXJuZWxT
aXplOyB9CisgICAgdm9pZCBzZXRLZXJuZWxTaXplKFFTaXplIGtlcm5lbFNpemUpIHsgbV9rZXJu
ZWxTaXplID0ga2VybmVsU2l6ZTsgfQorICAgIAorICAgIFEzVmFsdWVMaXN0PGZsb2F0PiBrZXJu
ZWwoKSBjb25zdCB7IHJldHVybiBtX2tlcm5lbE1hdHJpeDsgfQorICAgIHZvaWQgc2V0S2VybmVs
KFEzVmFsdWVMaXN0PGZsb2F0PiBrZXJuZWwpIHsgbV9rZXJuZWxNYXRyaXggPSBrZXJuZWw7IH0K
KyAgICAKKyAgICBmbG9hdCBkaXZpc29yKCkgY29uc3QgeyByZXR1cm4gbV9kaXZpc29yOyB9Cisg
ICAgdm9pZCBzZXREaXZpc29yKGZsb2F0IGRpdmlzb3IpIHsgbV9kaXZpc29yID0gZGl2aXNvcjsg
fQorICAgIAorICAgIGZsb2F0IGJpYXMoKSBjb25zdCB7IHJldHVybiBtX2JpYXM7IH0KKyAgICB2
b2lkIHNldEJpYXMoZmxvYXQgYmlhcykgeyBtX2JpYXMgPSBiaWFzOyB9CisgICAgCisgICAgUVNp
emUgdGFyZ2V0T2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV90YXJnZXRPZmZzZXQ7IH0KKyAgICB2
b2lkIHNldFRhcmdldE9mZnNldChRU2l6ZSB0YXJnZXRPZmZzZXQpIHsgbV90YXJnZXRPZmZzZXQg
PSB0YXJnZXRPZmZzZXQ7IH0KKyAgICAKKyAgICBLQ0VkZ2VNb2RlVHlwZSBlZGdlTW9kZSgpIGNv
bnN0IHsgcmV0dXJuIG1fZWRnZU1vZGU7IH0KKyAgICB2b2lkIHNldEVkZ2VNb2RlKEtDRWRnZU1v
ZGVUeXBlIGVkZ2VNb2RlKSB7IG1fZWRnZU1vZGUgPSBlZGdlTW9kZTsgfQorICAgIAorICAgIFFQ
b2ludEYga2VybmVsVW5pdExlbmd0aCgpIGNvbnN0IHtyZXR1cm4gbV9rZXJuZWxVbml0TGVuZ3Ro
OyB9CisgICAgdm9pZCBzZXRLZXJuZWxVbml0TGVuZ3RoKFFQb2ludEYga2VybmVsVW5pdExlbmd0
aCkgeyBtX2tlcm5lbFVuaXRMZW5ndGggPSBrZXJuZWxVbml0TGVuZ3RoOyB9CisgICAgCisgICAg
Ym9vbCBwcmVzZXJ2ZUFscGhhKCkgY29uc3QgeyByZXR1cm4gbV9wcmVzZXJ2ZUFscGhhOyB9Cisg
ICAgdm9pZCBzZXRQcmVzZXJ2ZUFscGhhKGJvb2wgcHJlc2VydmVBbHBoYSkgeyBtX3ByZXNlcnZl
QWxwaGEgPSBwcmVzZXJ2ZUFscGhhOyB9CiAKICAgICBRVGV4dFN0cmVhbSAmZXh0ZXJuYWxSZXBy
ZXNlbnRhdGlvbihRVGV4dFN0cmVhbSAmKSBjb25zdDsKIAogcHJpdmF0ZToKLSAgICBpbnQgbV9v
cmRlclg7Ci0gICAgaW50IG1fb3JkZXJZOworICAgIFFTaXplIG1fa2VybmVsU2l6ZTsKICAgICBR
M1ZhbHVlTGlzdDxmbG9hdD4gbV9rZXJuZWxNYXRyaXg7IC8vIG1heWJlIHNob3VsZCBiZSBhIHJl
YWwgbWF0cml4PwogICAgIGZsb2F0IG1fZGl2aXNvcjsKICAgICBmbG9hdCBtX2JpYXM7Ci0gICAg
aW50IG1fdGFyZ2V0WDsKLSAgICBpbnQgbV90YXJnZXRZOworICAgIFFTaXplIG1fdGFyZ2V0T2Zm
c2V0OwogICAgIEtDRWRnZU1vZGVUeXBlIG1fZWRnZU1vZGU7Ci0gICAgZmxvYXQgbV9rZXJuZWxV
bml0TGVuZ3RoWDsKLSAgICBmbG9hdCBtX2tlcm5lbFVuaXRMZW5ndGhZOworICAgIFFQb2ludEYg
bV9rZXJuZWxVbml0TGVuZ3RoOwogICAgIGJvb2wgbV9wcmVzZXJ2ZUFscGhhOwogfTsKIAordHlw
ZWRlZiBlbnVteworICAgIExTX0RJU1RBTlQsCisgICAgTFNfUE9JTlQsCisgICAgTFNfU1BPVAor
fSBLQ0xpZ2h0VHlwZTsKKworLy9UaGUgbGlnaHQgc291cmNlIGZvciBEaWZmdXNlL1NwZWN1bGFy
TGlnaHRpbmcKK2NsYXNzIEtDTGlnaHRTb3VyY2UKK3sKK3B1YmxpYzoKKyAgICBLQ0xpZ2h0U291
cmNlKEtDTGlnaHRUeXBlIGFfdHlwZSk6bV90eXBlKGFfdHlwZSkge30KKyAgICAKKyAgICB2aXJ0
dWFsIH5LQ0xpZ2h0U291cmNlKCkge30KKyAgICAKKyAgICBLQ0xpZ2h0VHlwZSB0eXBlKCkgY29u
c3QgeworICAgICAgICByZXR1cm4gbV90eXBlOworICAgIH0KKyAgICAKKyAgICB2aXJ0dWFsIFFU
ZXh0U3RyZWFtICZleHRlcm5hbFJlcHJlc2VudGF0aW9uKFFUZXh0U3RyZWFtICYpIGNvbnN0ID0g
MDsKKyAgICAKK3ByaXZhdGU6CisgICAgS0NMaWdodFR5cGUgbV90eXBlOworfTsKKworY2xhc3Mg
S0NEaXN0YW50TGlnaHRTb3VyY2UgOiBwdWJsaWMgS0NMaWdodFNvdXJjZQoreworcHVibGljOgor
ICAgIEtDRGlzdGFudExpZ2h0U291cmNlKGZsb2F0IGF6aW11dGgsIGZsb2F0IGVsZXZhdGlvbik6
CisgICAgICAgIEtDTGlnaHRTb3VyY2UoTFNfRElTVEFOVCksIG1fYXppbXV0aChhemltdXRoKSwg
bV9lbGV2YXRpb24oZWxldmF0aW9uKSB7fQorICAgIAorICAgIGZsb2F0IGF6aW11dGgoKSBjb25z
dHsgcmV0dXJuIG1fYXppbXV0aDsgfQorICAgIAorICAgIGZsb2F0IGVsZXZhdGlvbigpIGNvbnN0
eyByZXR1cm4gbV9lbGV2YXRpb247IH0KKyAgICAKKyAgICB2aXJ0dWFsIFFUZXh0U3RyZWFtICZl
eHRlcm5hbFJlcHJlc2VudGF0aW9uKFFUZXh0U3RyZWFtICYpIGNvbnN0OworICAgIAorcHJpdmF0
ZToKKyAgICBmbG9hdCBtX2F6aW11dGg7CisgICAgZmxvYXQgbV9lbGV2YXRpb247Cit9OworCitj
bGFzcyBLQ1BvaW50TGlnaHRTb3VyY2UgOiBwdWJsaWMgS0NMaWdodFNvdXJjZQoreworcHVibGlj
OgorICAgIEtDUG9pbnRMaWdodFNvdXJjZShLQ2FudmFzUG9pbnQzRiAmIHBvc2l0aW9uKTpLQ0xp
Z2h0U291cmNlKExTX1BPSU5UKSwgbV9wb3NpdGlvbihwb3NpdGlvbikgeyB9CisgICAgCisgICAg
Y29uc3QgS0NhbnZhc1BvaW50M0YgJiBwb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fcG9zaXRp
b247IH0KKyAgICAKKyAgICB2aXJ0dWFsIFFUZXh0U3RyZWFtICZleHRlcm5hbFJlcHJlc2VudGF0
aW9uKFFUZXh0U3RyZWFtICYpIGNvbnN0OworCitwcml2YXRlOgorICAgIEtDYW52YXNQb2ludDNG
IG1fcG9zaXRpb247Cit9OworCitjbGFzcyBLQ1Nwb3RMaWdodFNvdXJjZSA6IHB1YmxpYyBLQ0xp
Z2h0U291cmNlCit7CitwdWJsaWM6CisgICAgS0NTcG90TGlnaHRTb3VyY2UoS0NhbnZhc1BvaW50
M0YgJiBwb3NpdGlvbiwgS0NhbnZhc1BvaW50M0YgJiBkaXJlY3Rpb24sIAorICAgICAgICBmbG9h
dCBzcGVjdWxhckV4cG9uZW50LCBmbG9hdCBsaW1pdGluZ0NvbmVBbmdsZSk6S0NMaWdodFNvdXJj
ZShMU19TUE9UKSwgCisgICAgICAgIG1fcG9zaXRpb24ocG9zaXRpb24pLCBtX2RpcmVjdGlvbihk
aXJlY3Rpb24pLCBtX3NwZWN1bGFyRXhwb25lbnQoc3BlY3VsYXJFeHBvbmVudCksIG1fbGltaXRp
bmdDb25lQW5nbGUobGltaXRpbmdDb25lQW5nbGUpIHsgfQorICAgIGNvbnN0IEtDYW52YXNQb2lu
dDNGICYgcG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX3Bvc2l0aW9uOyB9CisgICAgY29uc3Qg
S0NhbnZhc1BvaW50M0YgJiBkaXJlY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2RpcmVjdGlvbjsg
fQorICAgIGZsb2F0IHNwZWN1bGFyRXhwb25lbnQoKSBjb25zdCB7IHJldHVybiBtX3NwZWN1bGFy
RXhwb25lbnQ7IH0KKyAgICBmbG9hdCBsaW1pdGluZ0NvbmVBbmdsZSgpIGNvbnN0IHsgcmV0dXJu
IG1fbGltaXRpbmdDb25lQW5nbGU7IH0gICAgCisgICAgdmlydHVhbCBRVGV4dFN0cmVhbSAmZXh0
ZXJuYWxSZXByZXNlbnRhdGlvbihRVGV4dFN0cmVhbSAmKSBjb25zdDsKK3ByaXZhdGU6CisgICAg
S0NhbnZhc1BvaW50M0YgbV9wb3NpdGlvbjsKKyAgICBLQ2FudmFzUG9pbnQzRiBtX2RpcmVjdGlv
bjsKKyAgICBmbG9hdCAgICAgICAgICBtX3NwZWN1bGFyRXhwb25lbnQ7CisgICAgZmxvYXQgICAg
ICAgICAgbV9saW1pdGluZ0NvbmVBbmdsZTsKK307CisKIGNsYXNzIEtDYW52YXNGRURpZmZ1c2VM
aWdodGluZyA6IHB1YmxpYyBLQ2FudmFzRmlsdGVyRWZmZWN0CiB7CiBwdWJsaWM6CisgICAgUUNv
bG9yIGxpZ2h0aW5nQ29sb3IoKSBjb25zdCB7IHJldHVybiBtX2xpZ2h0aW5nQ29sb3I7IH0KKyAg
ICB2b2lkIHNldExpZ2h0aW5nQ29sb3IoY29uc3QgUUNvbG9yICZsaWdodGluZ0NvbG9yKSB7IG1f
bGlnaHRpbmdDb2xvciA9IGxpZ2h0aW5nQ29sb3I7IH0KIAorICAgIGZsb2F0IHN1cmZhY2VTY2Fs
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3VyZmFjZVNjYWxlOyB9CisgICAgdm9pZCBzZXRTdXJmYWNl
U2NhbGUoZmxvYXQgc3VyZmFjZVNjYWxlKSB7IG1fc3VyZmFjZVNjYWxlID0gc3VyZmFjZVNjYWxl
OyB9CisgICAgCisgICAgZmxvYXQgZGlmZnVzZUNvbnN0YW50KCkgY29uc3QgeyByZXR1cm4gbV9k
aWZmdXNlQ29uc3RhbnQ7IH0KKyAgICB2b2lkIHNldERpZmZ1c2VDb25zdGFudChmbG9hdCBkaWZm
dXNlQ29uc3RhbnQpIHsgbV9kaWZmdXNlQ29uc3RhbnQgPSBkaWZmdXNlQ29uc3RhbnQ7IH0KKyAg
ICAKKyAgICBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWCgpIGNvbnN0IHsgcmV0dXJuIG1fa2VybmVs
VW5pdExlbmd0aFg7IH0KKyAgICB2b2lkIHNldEtlcm5lbFVuaXRMZW5ndGhYKGZsb2F0IGtlcm5l
bFVuaXRMZW5ndGhYKSB7IG1fa2VybmVsVW5pdExlbmd0aFggPSBrZXJuZWxVbml0TGVuZ3RoWDsg
fQorICAgIAorICAgIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZKCkgY29uc3QgeyByZXR1cm4gbV9r
ZXJuZWxVbml0TGVuZ3RoWTsgfQorICAgIHZvaWQgc2V0S2VybmVsVW5pdExlbmd0aFkoZmxvYXQg
a2VybmVsVW5pdExlbmd0aFkpIHsgbV9rZXJuZWxVbml0TGVuZ3RoWSA9IGtlcm5lbFVuaXRMZW5n
dGhZOyB9CisKKyAgICBjb25zdCBLQ0xpZ2h0U291cmNlICogbGlnaHRTb3VyY2UoKSBjb25zdCB7
IHJldHVybiBtX2xpZ2h0U291cmNlOyB9CisgICAgdm9pZCBzZXRMaWdodFNvdXJjZShLQ0xpZ2h0
U291cmNlICogbGlnaHRTb3VyY2UpIHsgbV9saWdodFNvdXJjZSA9IGxpZ2h0U291cmNlOyB9Cisg
ICAgCiAgICAgUVRleHRTdHJlYW0gJmV4dGVybmFsUmVwcmVzZW50YXRpb24oUVRleHRTdHJlYW0g
JikgY29uc3Q7CiAKIHByaXZhdGU6CisgICAgUUNvbG9yIG1fbGlnaHRpbmdDb2xvcjsKICAgICBm
bG9hdCBtX3N1cmZhY2VTY2FsZTsKICAgICBmbG9hdCBtX2RpZmZ1c2VDb25zdGFudDsKICAgICBm
bG9hdCBtX2tlcm5lbFVuaXRMZW5ndGhYOwogICAgIGZsb2F0IG1fa2VybmVsVW5pdExlbmd0aFk7
CisgICAgS0NMaWdodFNvdXJjZSAqIG1fbGlnaHRTb3VyY2U7CiB9OwogCiB0eXBlZGVmIGVudW0g
ewpAQCAtMzkzLDcgKzUwOCw2IEBAIHB1YmxpYzoKICAgICBRQ29sb3IgZmxvb2RDb2xvcigpIGNv
bnN0IHsgcmV0dXJuIG1fZmxvb2RDb2xvcjsgfQogICAgIHZvaWQgc2V0Rmxvb2RDb2xvcihjb25z
dCBRQ29sb3IgJmNvbG9yKSB7IG1fZmxvb2RDb2xvciA9IGNvbG9yOyB9CiAKLQogICAgIGZsb2F0
IGZsb29kT3BhY2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1fZmxvb2RPcGFjaXR5OyB9CiAgICAgdm9p
ZCBzZXRGbG9vZE9wYWNpdHkoZmxvYXQgZmxvb2RPcGFjaXR5KSB7IG1fZmxvb2RPcGFjaXR5ID0g
Zmxvb2RPcGFjaXR5OyB9CiAKQEAgLTQ5NCwxMyArNjA4LDM3IEBAIHByaXZhdGU6CiBjbGFzcyBL
Q2FudmFzRkVTcGVjdWxhckxpZ2h0aW5nIDogcHVibGljIEtDYW52YXNGaWx0ZXJFZmZlY3QKIHsK
IHB1YmxpYzoKKyAgICBRQ29sb3IgbGlnaHRpbmdDb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fbGln
aHRpbmdDb2xvcjsgfQorICAgIHZvaWQgc2V0TGlnaHRpbmdDb2xvcihjb25zdCBRQ29sb3IgJmxp
Z2h0aW5nQ29sb3IpIHsgbV9saWdodGluZ0NvbG9yID0gbGlnaHRpbmdDb2xvcjsgfQogCisgICAg
ZmxvYXQgc3VyZmFjZVNjYWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdXJmYWNlU2NhbGU7IH0KKyAg
ICB2b2lkIHNldFN1cmZhY2VTY2FsZShmbG9hdCBzdXJmYWNlU2NhbGUpIHsgbV9zdXJmYWNlU2Nh
bGUgPSBzdXJmYWNlU2NhbGU7IH0KKyAgICAKKyAgICBmbG9hdCBzcGVjdWxhckNvbnN0YW50KCkg
Y29uc3QgeyByZXR1cm4gbV9zcGVjdWxhckNvbnN0YW50OyB9CisgICAgdm9pZCBzZXRTcGVjdWxh
ckNvbnN0YW50KGZsb2F0IHNwZWN1bGFyQ29uc3RhbnQpIHsgbV9zcGVjdWxhckNvbnN0YW50ID0g
c3BlY3VsYXJDb25zdGFudDsgfQorICAgIAorICAgIGZsb2F0IHNwZWN1bGFyRXhwb25lbnQoKSBj
b25zdCB7IHJldHVybiBtX3NwZWN1bGFyRXhwb25lbnQ7IH0KKyAgICB2b2lkIHNldFNwZWN1bGFy
RXhwb25lbnQoZmxvYXQgc3BlY3VsYXJFeHBvbmVudCkgeyBtX3NwZWN1bGFyRXhwb25lbnQgPSBz
cGVjdWxhckV4cG9uZW50OyB9CisgICAgCisgICAgZmxvYXQga2VybmVsVW5pdExlbmd0aFgoKSBj
b25zdCB7IHJldHVybiBtX2tlcm5lbFVuaXRMZW5ndGhYOyB9CisgICAgdm9pZCBzZXRLZXJuZWxV
bml0TGVuZ3RoWChmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWCkgeyBtX2tlcm5lbFVuaXRMZW5ndGhY
ID0ga2VybmVsVW5pdExlbmd0aFg7IH0KKyAgICAKKyAgICBmbG9hdCBrZXJuZWxVbml0TGVuZ3Ro
WSgpIGNvbnN0IHsgcmV0dXJuIG1fa2VybmVsVW5pdExlbmd0aFk7IH0KKyAgICB2b2lkIHNldEtl
cm5lbFVuaXRMZW5ndGhZKGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZKSB7IG1fa2VybmVsVW5pdExl
bmd0aFkgPSBrZXJuZWxVbml0TGVuZ3RoWTsgfQorICAgIAorICAgIGNvbnN0IEtDTGlnaHRTb3Vy
Y2UgKiBsaWdodFNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGlnaHRTb3VyY2U7IH0KKyAgICB2
b2lkIHNldExpZ2h0U291cmNlKEtDTGlnaHRTb3VyY2UgKiBsaWdodFNvdXJjZSkgeyBtX2xpZ2h0
U291cmNlID0gbGlnaHRTb3VyY2U7IH0KKyAgICAKICAgICBRVGV4dFN0cmVhbSAmZXh0ZXJuYWxS
ZXByZXNlbnRhdGlvbihRVGV4dFN0cmVhbSAmKSBjb25zdDsKICAgICAKIHByaXZhdGU6CisgICAg
UUNvbG9yIG1fbGlnaHRpbmdDb2xvcjsKICAgICBmbG9hdCBtX3N1cmZhY2VTY2FsZTsKICAgICBm
bG9hdCBtX3NwZWN1bGFyQ29uc3RhbnQ7CiAgICAgZmxvYXQgbV9zcGVjdWxhckV4cG9uZW50Owor
ICAgIGZsb2F0IG1fa2VybmVsVW5pdExlbmd0aFg7CisgICAgZmxvYXQgbV9rZXJuZWxVbml0TGVu
Z3RoWTsKKyAgICBLQ0xpZ2h0U291cmNlICogbV9saWdodFNvdXJjZTsKIH07CiAKIGNsYXNzIEtD
YW52YXNGRVRpbGUgOiBwdWJsaWMgS0NhbnZhc0ZpbHRlckVmZmVjdCB7fTsKSW5kZXg6IGtjYW52
YXMvZGV2aWNlL3F1YXJ0ei9LQ2FudmFzRmlsdGVyUXVhcnR6LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmls
ZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2NhbnZhcy9kZXZpY2UvcXVhcnR6L0tDYW52YXNGaWx0
ZXJRdWFydHouaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS43CmRpZmYgLXAgLXUgLXIxLjcga2Nh
bnZhcy9kZXZpY2UvcXVhcnR6L0tDYW52YXNGaWx0ZXJRdWFydHouaAotLS0ga2NhbnZhcy9kZXZp
Y2UvcXVhcnR6L0tDYW52YXNGaWx0ZXJRdWFydHouaAkyMyBOb3YgMjAwNSAxNToxNDowNyAtMDAw
MAkxLjcKKysrIGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9LQ2FudmFzRmlsdGVyUXVhcnR6LmgJMjgg
Tm92IDIwMDUgMDM6NTc6MzYgLTAwMDAKQEAgLTc1LDExICs3NSwyMSBAQCBwdWJsaWM6CiAvLyAg
ICB2aXJ0dWFsIENJRmlsdGVyICpnZXRDSUZpbHRlcihLQ2FudmFzRmlsdGVyUXVhcnR6ICpxdWFy
dHpGaWx0ZXIpIGNvbnN0OwogLy99OwogCitjbGFzcyBLQ2FudmFzRkVDb252b2x2ZU1hdHJpeFF1
YXJ0eiA6IHB1YmxpYyBLQ2FudmFzRkVDb252b2x2ZU1hdHJpeCB7CitwdWJsaWM6CisgICAgdmly
dHVhbCBDSUZpbHRlciAqZ2V0Q0lGaWx0ZXIoS0NhbnZhc0ZpbHRlclF1YXJ0eiAqcXVhcnR6Rmls
dGVyKSBjb25zdDsKK307CisKIGNsYXNzIEtDYW52YXNGRUNvbXBvc2l0ZVF1YXJ0eiA6IHB1Ymxp
YyBLQ2FudmFzRkVDb21wb3NpdGUgewogcHVibGljOgogICAgIHZpcnR1YWwgQ0lGaWx0ZXIgKmdl
dENJRmlsdGVyKEtDYW52YXNGaWx0ZXJRdWFydHogKnF1YXJ0ekZpbHRlcikgY29uc3Q7CiB9Owog
CitjbGFzcyBLQ2FudmFzRkVEaWZmdXNlTGlnaHRpbmdRdWFydHogOiBwdWJsaWMgS0NhbnZhc0ZF
RGlmZnVzZUxpZ2h0aW5nIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIENJRmlsdGVyICpnZXRDSUZp
bHRlcihLQ2FudmFzRmlsdGVyUXVhcnR6ICpxdWFydHpGaWx0ZXIpIGNvbnN0OworfTsKKwogY2xh
c3MgS0NhbnZhc0ZFRmxvb2RRdWFydHogOiBwdWJsaWMgS0NhbnZhc0ZFRmxvb2QgewogcHVibGlj
OgogICAgIHZpcnR1YWwgQ0lGaWx0ZXIgKmdldENJRmlsdGVyKEtDYW52YXNGaWx0ZXJRdWFydHog
KnF1YXJ0ekZpbHRlcikgY29uc3Q7CkBAIC0xMDUsNiArMTE1LDExIEBAIHB1YmxpYzoKICAgICB2
aXJ0dWFsIENJRmlsdGVyICpnZXRDSUZpbHRlcihLQ2FudmFzRmlsdGVyUXVhcnR6ICpxdWFydHpG
aWx0ZXIpIGNvbnN0OwogfTsKIAorY2xhc3MgS0NhbnZhc0ZFU3BlY3VsYXJMaWdodGluZ1F1YXJ0
eiA6IHB1YmxpYyBLQ2FudmFzRkVTcGVjdWxhckxpZ2h0aW5nIHsKK3B1YmxpYzoKKyAgICB2aXJ0
dWFsIENJRmlsdGVyICpnZXRDSUZpbHRlcihLQ2FudmFzRmlsdGVyUXVhcnR6ICpxdWFydHpGaWx0
ZXIpIGNvbnN0OworfTsKKwogY2xhc3MgS0NhbnZhc0ZFVGlsZVF1YXJ0eiA6IHB1YmxpYyBLQ2Fu
dmFzRkVUaWxlIHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIENJRmlsdGVyICpnZXRDSUZpbHRlcihL
Q2FudmFzRmlsdGVyUXVhcnR6ICpxdWFydHpGaWx0ZXIpIGNvbnN0OwpJbmRleDoga2NhbnZhcy9k
ZXZpY2UvcXVhcnR6L0tDYW52YXNGaWx0ZXJRdWFydHoubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTog
L2N2cy9yb290L1NWR1N1cHBvcnQva2NhbnZhcy9kZXZpY2UvcXVhcnR6L0tDYW52YXNGaWx0ZXJR
dWFydHoubW0sdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTUKZGlmZiAtcCAtdSAtcjEuMTUga2Nh
bnZhcy9kZXZpY2UvcXVhcnR6L0tDYW52YXNGaWx0ZXJRdWFydHoubW0KLS0tIGtjYW52YXMvZGV2
aWNlL3F1YXJ0ei9LQ2FudmFzRmlsdGVyUXVhcnR6Lm1tCTI2IE5vdiAyMDA1IDIyOjI3OjA1IC0w
MDAwCTEuMTUKKysrIGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9LQ2FudmFzRmlsdGVyUXVhcnR6Lm1t
CTI4IE5vdiAyMDA1IDAzOjU3OjM2IC0wMDAwCkBAIC0zMSw2ICszMSwxMyBAQAogI2ltcG9ydCAi
S1JlbmRlcmluZ0RldmljZVF1YXJ0ei5oIgogI2ltcG9ydCAiUXVhcnR6U3VwcG9ydC5oIgogI2lt
cG9ydCAiS1dRRXhjZXB0aW9ucy5oIgorI2ltcG9ydCAiV0tEaWZmdXNlTGlnaHRpbmdGaWx0ZXIu
aCIKKyNpbXBvcnQgIldLU3BlY3VsYXJMaWdodGluZ0ZpbHRlci5oIgorI2ltcG9ydCAiV0tTcG90
TGlnaHRGaWx0ZXIuaCIKKyNpbXBvcnQgIldLUG9pbnRMaWdodEZpbHRlci5oIgorI2ltcG9ydCAi
V0tEaXN0YW50TGlnaHRGaWx0ZXIuaCIKKyNpbXBvcnQgIldLTm9ybWFsTWFwRmlsdGVyLmgiCisj
aW1wb3J0ICJXS0FyaXRobWV0aWNGaWx0ZXIuaCIKIAogI2ltcG9ydCA8UXVhcnR6Q29yZS9RdWFy
dHpDb3JlLmg+CiAKQEAgLTQwLDEzICs0NywyMiBAQAogCiBzdGF0aWMgUVN0cmluZyBLQ1ByZXZp
b3VzRmlsdGVyT3V0cHV0TmFtZSA9IFFTdHJpbmc6OmZyb21MYXRpbjEoIl9fcHJldmlvdXNPdXRw
dXRfXyIpOwogCi0vL3N0YXRpYyBDSUNvbG9yICpjaUNvbG9yKGNvbnN0IFFDb2xvciAmYykKLS8v
ewotLy8gICAgQ0dDb2xvclJlZiBjb2xvckNHID0gY2dDb2xvcihjKTsKLS8vICAgIENJQ29sb3Ig
KmNvbG9yQ0kgPSBbQ0lDb2xvciBjb2xvcldpdGhDR0NvbG9yOmNvbG9yQ0ddOwotLy8gICAgQ0dD
b2xvclJlbGVhc2UoY29sb3JDRyk7Ci0vLyAgICByZXR1cm4gY29sb3JDSTsKLS8vfQorc3RhdGlj
IGlubGluZSBDSUNvbG9yICpjaUNvbG9yKGNvbnN0IFFDb2xvciAmYykKK3sKKyAgICBDR0NvbG9y
UmVmIGNvbG9yQ0cgPSBjZ0NvbG9yKGMpOworICAgIENJQ29sb3IgKmNvbG9yQ0kgPSBbQ0lDb2xv
ciBjb2xvcldpdGhDR0NvbG9yOmNvbG9yQ0ddOworICAgIENHQ29sb3JSZWxlYXNlKGNvbG9yQ0cp
OworICAgIHJldHVybiBjb2xvckNJOworfQorCitzdGF0aWMgaW5saW5lIENJVmVjdG9yICpjaVZl
Y3RvcihLQ2FudmFzUG9pbnQzRiBwb2ludCkgeworICAgIHJldHVybiBbQ0lWZWN0b3IgdmVjdG9y
V2l0aFg6cG9pbnQueCgpIFk6cG9pbnQueSgpIFo6cG9pbnQueigpXTsKK30KKworc3RhdGljIGlu
bGluZSBDSVZlY3RvciAqY2lWZWN0b3IoUVBvaW50RiBwb2ludCkgeworICAgIHJldHVybiBbQ0lW
ZWN0b3IgdmVjdG9yV2l0aFg6cG9pbnQueCgpIFk6cG9pbnQueSgpXTsKK30KKwogCiBLQ2FudmFz
RmlsdGVyUXVhcnR6OjpLQ2FudmFzRmlsdGVyUXVhcnR6KCkgOiBtX2ZpbHRlckNJQ29udGV4dCgw
KSwgbV9maWx0ZXJDR0xheWVyKDApLCBtX2ltYWdlc0J5TmFtZSgwKQogewpAQCAtMjI0LDcgKzI0
MCw2IEBAIENJSW1hZ2UgKktDYW52YXNGaWx0ZXJRdWFydHo6OmlucHV0SW1hZ2UKICNwcmFnbWEg
bWFyayAtCiAjcHJhZ21hIG1hcmsgRmlsdGVyIEVsZW1lbnRzCiAKLQogI2RlZmluZSBGRV9RVUFS
VFpfU0VUVVBfSU5QVVQobmFtZSkgXAogICAgIENJSW1hZ2UgKmlucHV0SW1hZ2UgPSBxdWFydHpG
aWx0ZXItPmlucHV0SW1hZ2UodGhpcyk7IFwKICAgICBGRV9RVUFSVFpfQ0hFQ0tfSU5QVVQoaW5w
dXRJbWFnZSkgXApAQCAtNDIxLDI0ICs0MzYsMjUgQEAgQ0lGaWx0ZXIgKktDYW52YXNGRUNvbXBv
c2l0ZVF1YXJ0ejo6Z2V0QwogCUtXUV9CTE9DS19FWENFUFRJT05TCiAJc3dpdGNoKG9wZXJhdGlv
bigpKSB7CiAJY2FzZSBDT19PVkVSOgotCQlmaWx0ZXIgPSBbQ0lGaWx0ZXIgZmlsdGVyV2l0aE5h
bWU6QCJDSVNvdXJjZU92ZXJDb21wb3NpdGluZyJdOwotCQlicmVhazsKKyAgICAgICAgICAgIGZp
bHRlciA9IFtDSUZpbHRlciBmaWx0ZXJXaXRoTmFtZTpAIkNJU291cmNlT3ZlckNvbXBvc2l0aW5n
Il07CisgICAgICAgICAgICBicmVhazsKIAljYXNlIENPX0lOOgotCQlmaWx0ZXIgPSBbQ0lGaWx0
ZXIgZmlsdGVyV2l0aE5hbWU6QCJDSVNvdXJjZUluQ29tcG9zaXRpbmciXTsKLQkJYnJlYWs7Cisg
ICAgICAgICAgICBmaWx0ZXIgPSBbQ0lGaWx0ZXIgZmlsdGVyV2l0aE5hbWU6QCJDSVNvdXJjZUlu
Q29tcG9zaXRpbmciXTsKKyAgICAgICAgICAgIGJyZWFrOwogCWNhc2UgQ09fT1VUOgotCQlmaWx0
ZXIgPSBbQ0lGaWx0ZXIgZmlsdGVyV2l0aE5hbWU6QCJDSVNvdXJjZU91dENvbXBvc2l0aW5nIl07
Ci0JCWJyZWFrOworICAgICAgICAgICAgZmlsdGVyID0gW0NJRmlsdGVyIGZpbHRlcldpdGhOYW1l
OkAiQ0lTb3VyY2VPdXRDb21wb3NpdGluZyJdOworICAgICAgICAgICAgYnJlYWs7CiAJY2FzZSBD
T19BVE9QOgotCQlmaWx0ZXIgPSBbQ0lGaWx0ZXIgZmlsdGVyV2l0aE5hbWU6QCJDSVNvdXJjZUF0
b3BDb21wb3NpdGluZyJdOwotCQlicmVhazsKKyAgICAgICAgICAgIGZpbHRlciA9IFtDSUZpbHRl
ciBmaWx0ZXJXaXRoTmFtZTpAIkNJU291cmNlQXRvcENvbXBvc2l0aW5nIl07CisgICAgICAgICAg
ICBicmVhazsKIAljYXNlIENPX1hPUjoKLQkJLy9GSVhNRTogSSdtIG5vdCBzdXJlIHRoaXMgaXMg
cmlnaHQuLi4KLQkJZmlsdGVyID0gW0NJRmlsdGVyIGZpbHRlcldpdGhOYW1lOkAiQ0lFeGNsdXNp
b25CbGVuZE1vZGUiXTsKKyAgICAgICAgICAgIC8vRklYTUU6IEknbSBub3Qgc3VyZSB0aGlzIGlz
IHJpZ2h0Li4uCisgICAgICAgICAgICBmaWx0ZXIgPSBbQ0lGaWx0ZXIgZmlsdGVyV2l0aE5hbWU6
QCJDSUV4Y2x1c2lvbkJsZW5kTW9kZSJdOworICAgICAgICAgICAgYnJlYWs7CiAJY2FzZSBDT19B
UklUSE1FVElDOgotCQlOU0xvZyhAIldhcm5pbmc6IGFyaXRobWV0aWMgY29tcG9zaXRpbmcgbW9k
ZSBub3QgeWV0IHN1cHBvcnRlZCBpbiBRdWFydHouIik7Ci0JCS8vIHRoaXMgd291bGQgYmUgd2hl
cmUgd2UgdXNlIHRoZSBrIHZhbHVlcy4uLgotCQlyZXR1cm4gbmlsOworICAgICAgICAgICAgW1dL
QXJpdGhtZXRpY0ZpbHRlciBjbGFzc107CisgICAgICAgICAgICBmaWx0ZXIgPSBbQ0lGaWx0ZXIg
ZmlsdGVyV2l0aE5hbWU6QCJXS0FyaXRobWV0aWNGaWx0ZXIiXTsKKyAgICAgICAgICAgIGJyZWFr
OwogCX0KIAkKIAlbZmlsdGVyIHNldERlZmF1bHRzXTsKQEAgLTQ0OCwxMCArNDY0LDEzNyBAQCBD
SUZpbHRlciAqS0NhbnZhc0ZFQ29tcG9zaXRlUXVhcnR6OjpnZXRDCiAJRkVfUVVBUlRaX0NIRUNL
X0lOUFVUKGJhY2tncm91bmRJbWFnZSk7CiAJW2ZpbHRlciBzZXRWYWx1ZTppbnB1dEltYWdlIGZv
cktleTpAImlucHV0SW1hZ2UiXTsKIAlbZmlsdGVyIHNldFZhbHVlOmJhY2tncm91bmRJbWFnZSBm
b3JLZXk6QCJpbnB1dEJhY2tncm91bmRJbWFnZSJdOwotCQorICAgICAgICAvL0ZJWE1FOiB0aGlz
IHNlZW1zIHVnbHkKKwlpZiAob3BlcmF0aW9uKCkgPT0gQ09fQVJJVEhNRVRJQykgeworICAgICAg
ICAgICAgW2ZpbHRlciBzZXRWYWx1ZTpbTlNOdW1iZXIgbnVtYmVyV2l0aEZsb2F0OmsxKCldIGZv
cktleTpAImlucHV0SzEiXTsKKyAgICAgICAgICAgIFtmaWx0ZXIgc2V0VmFsdWU6W05TTnVtYmVy
IG51bWJlcldpdGhGbG9hdDprMigpXSBmb3JLZXk6QCJpbnB1dEsyIl07CisgICAgICAgICAgICBb
ZmlsdGVyIHNldFZhbHVlOltOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6azMoKV0gZm9yS2V5OkAi
aW5wdXRLMyJdOworICAgICAgICAgICAgW2ZpbHRlciBzZXRWYWx1ZTpbTlNOdW1iZXIgbnVtYmVy
V2l0aEZsb2F0Oms0KCldIGZvcktleTpAImlucHV0SzQiXTsKKyAgICAgICAgfQogCUZFX1FVQVJU
Wl9PVVRQVVRfUkVUVVJOOwogfQogCitzdGF0aWMgaW5saW5lIENJRmlsdGVyICpnZXRQb2ludExp
Z2h0VmVjdG9ycyhDSUZpbHRlciAqIG5vcm1hbHMsIENJVmVjdG9yICogbGlnaHRQb3NpdGlvbiwg
ZmxvYXQgc3VyZmFjZVNjYWxlKQoreworICAgIENJRmlsdGVyICpmaWx0ZXIgPSBuaWw7CisgICAg
S1dRX0JMT0NLX0VYQ0VQVElPTlMKKyAgICBmaWx0ZXIgPSBbQ0lGaWx0ZXIgZmlsdGVyV2l0aE5h
bWU6QCJXS1BvaW50TGlnaHQiXTsKKyAgICBpZiAoIWZpbHRlcikKKyAgICAgICAgcmV0dXJuIG5p
bDsKKyAgICBbZmlsdGVyIHNldERlZmF1bHRzXTsKKyAgICBbZmlsdGVyIHNldFZhbHVlOltub3Jt
YWxzIHZhbHVlRm9yS2V5OiBAIm91dHB1dEltYWdlIl0gZm9yS2V5OkAiaW5wdXROb3JtYWxNYXAi
XTsKKyAgICBbZmlsdGVyIHNldFZhbHVlOmxpZ2h0UG9zaXRpb24gZm9yS2V5OkAiaW5wdXRMaWdo
dFBvc2l0aW9uIl07ICAgIAorICAgIFtmaWx0ZXIgc2V0VmFsdWU6W05TTnVtYmVyIG51bWJlcldp
dGhGbG9hdDpzdXJmYWNlU2NhbGVdIGZvcktleTpAImlucHV0U3VyZmFjZVNjYWxlIl07CisgICAg
cmV0dXJuIGZpbHRlcjsgCisgICAgS1dRX1VOQkxPQ0tfRVhDRVBUSU9OUyAKKyAgICByZXR1cm4g
bmlsOworfQorc3RhdGljIENJRmlsdGVyICpnZXRMaWdodFZlY3RvcnMoQ0lGaWx0ZXIgKiBub3Jt
YWxzLCBjb25zdCBLQ0xpZ2h0U291cmNlICogbGlnaHQsIGZsb2F0IHN1cmZhY2VTY2FsZSkKK3sK
KyAgICAvL0ZJWE1FOiB0aGVyZSBoYXMgdG8gYmUgYSBiZXR0ZXIgd2F5IG9mIG1ha2luZyBzdXJl
IHRoZXNlIGdldCBpbml0aWFsaXNlZAorICAgIFtXS0Rpc3RhbnRMaWdodEZpbHRlciBjbGFzc107
CisgICAgW1dLUG9pbnRMaWdodEZpbHRlciBjbGFzc107CisgICAgW1dLU3BvdExpZ2h0RmlsdGVy
IGNsYXNzXTsKKyAgICAKKyAgICBDSUZpbHRlciAqZmlsdGVyID0gbmlsOworICAgIEtXUV9CTE9D
S19FWENFUFRJT05TCisgICAgCisgICAgc3dpdGNoIChsaWdodC0+dHlwZSgpKSB7CisgICAgICAg
IGNhc2UgTFNfRElTVEFOVDoKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgS0NEaXN0YW50
TGlnaHRTb3VyY2UgKmRsaWdodCA9IHN0YXRpY19jYXN0PGNvbnN0IEtDRGlzdGFudExpZ2h0U291
cmNlICo+KGxpZ2h0KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZmlsdGVyID0gW0NJRmls
dGVyIGZpbHRlcldpdGhOYW1lOkAiV0tEaXN0YW50TGlnaHQiXTsKKyAgICAgICAgICAgIGlmICgh
ZmlsdGVyKQorICAgICAgICAgICAgICAgIHJldHVybiBuaWw7CisgICAgICAgICAgICBbZmlsdGVy
IHNldERlZmF1bHRzXTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZmxvYXQgYXppbXV0aCA9
IGRsaWdodC0+YXppbXV0aCgpOworICAgICAgICAgICAgZmxvYXQgZWxldmF0aW9uID0gZGxpZ2h0
LT5lbGV2YXRpb24oKTsKKyAgICAgICAgICAgIGF6aW11dGg9ZGVnMnJhZChhemltdXRoKTsKKyAg
ICAgICAgICAgIGVsZXZhdGlvbj1kZWcycmFkKGVsZXZhdGlvbik7CisgICAgICAgICAgICBmbG9h
dCBMeCA9IGNvcyhhemltdXRoKSpjb3MoZWxldmF0aW9uKTsKKyAgICAgICAgICAgIGZsb2F0IEx5
ID0gc2luKGF6aW11dGgpKmNvcyhlbGV2YXRpb24pOworICAgICAgICAgICAgZmxvYXQgTHogPSBz
aW4oZWxldmF0aW9uKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgW2ZpbHRlciBzZXRWYWx1
ZTpbbm9ybWFscyB2YWx1ZUZvcktleTogQCJvdXRwdXRJbWFnZSJdIGZvcktleTpAImlucHV0Tm9y
bWFsTWFwIl07CisgICAgICAgICAgICBbZmlsdGVyIHNldFZhbHVlOltDSVZlY3RvciB2ZWN0b3JX
aXRoWDogTHggWTogTHkgWjogTHpdIGZvcktleTpAImlucHV0TGlnaHREaXJlY3Rpb24iXTsKKyAg
ICAgICAgICAgIHJldHVybiBmaWx0ZXI7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBMU19QT0lO
VDoKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgS0NQb2ludExpZ2h0U291cmNlICpwbGln
aHQgPSBzdGF0aWNfY2FzdDxjb25zdCBLQ1BvaW50TGlnaHRTb3VyY2UgKj4obGlnaHQpOworICAg
ICAgICAgICAgcmV0dXJuIGdldFBvaW50TGlnaHRWZWN0b3JzKG5vcm1hbHMsIFtDSVZlY3RvciB2
ZWN0b3JXaXRoWDpwbGlnaHQtPnBvc2l0aW9uKCkueCgpIFk6cGxpZ2h0LT5wb3NpdGlvbigpLnko
KSBaOnBsaWdodC0+cG9zaXRpb24oKS56KCldLCBzdXJmYWNlU2NhbGUpOworICAgICAgICB9Cisg
ICAgICAgIGNhc2UgTFNfU1BPVDoKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgS0NTcG90
TGlnaHRTb3VyY2UgKnNsaWdodCA9IHN0YXRpY19jYXN0PGNvbnN0IEtDU3BvdExpZ2h0U291cmNl
ICo+KGxpZ2h0KTsKKyAgICAgICAgICAgIGZpbHRlciA9IFtDSUZpbHRlciBmaWx0ZXJXaXRoTmFt
ZTpAIldLU3BvdExpZ2h0Il07CisgICAgICAgICAgICBpZiAoIWZpbHRlcikKKyAgICAgICAgICAg
ICAgICByZXR1cm4gbmlsOworICAgICAgICAgICAgCisgICAgICAgICAgICBDSUZpbHRlciAqIHBv
aW50TGlnaHRGaWx0ZXIgPSBnZXRQb2ludExpZ2h0VmVjdG9ycyhub3JtYWxzLCBbQ0lWZWN0b3Ig
dmVjdG9yV2l0aFg6c2xpZ2h0LT5wb3NpdGlvbigpLngoKSBZOnNsaWdodC0+cG9zaXRpb24oKS55
KCkgWjpzbGlnaHQtPnBvc2l0aW9uKCkueigpXSwgc3VyZmFjZVNjYWxlKTsKKyAgICAgICAgICAg
IGlmICghcG9pbnRMaWdodEZpbHRlcikKKyAgICAgICAgICAgICAgICByZXR1cm4gbmlsOworICAg
ICAgICAgICAgW2ZpbHRlciBzZXREZWZhdWx0c107CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IFtmaWx0ZXIgc2V0VmFsdWU6W3BvaW50TGlnaHRGaWx0ZXIgdmFsdWVGb3JLZXk6IEAib3V0cHV0
SW1hZ2UiXSBmb3JLZXk6QCJpbnB1dExpZ2h0VmVjdG9ycyJdOworICAgICAgICAgICAgW2ZpbHRl
ciBzZXRWYWx1ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0aFg6c2xpZ2h0LT5kaXJlY3Rpb24oKS54KCkg
WTpzbGlnaHQtPmRpcmVjdGlvbigpLnkoKSBaOnNsaWdodC0+ZGlyZWN0aW9uKCkueigpXSBmb3JL
ZXk6QCJpbnB1dExpZ2h0RGlyZWN0aW9uIl07CisgICAgICAgICAgICBbZmlsdGVyIHNldFZhbHVl
OltOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6c2xpZ2h0LT5zcGVjdWxhckV4cG9uZW50KCldIGZv
cktleTpAImlucHV0U3BlY3VsYXJFeHBvbmVudCJdOworICAgICAgICAgICAgW2ZpbHRlciBzZXRW
YWx1ZTpbTlNOdW1iZXIgbnVtYmVyV2l0aEZsb2F0OmRlZzJyYWQoc2xpZ2h0LT5saW1pdGluZ0Nv
bmVBbmdsZSgpKV0gZm9yS2V5OkAiaW5wdXRMaW1pdGluZ0NvbmVBbmdsZSJdOworICAgICAgICAg
ICAgcmV0dXJuIGZpbHRlcjsKKyAgICAgICAgfQorICAgIH0KKyAgICBLV1FfVU5CTE9DS19FWENF
UFRJT05TIAorICAgIHJldHVybiBuaWw7Cit9CisKKworc3RhdGljIENJRmlsdGVyICpnZXROb3Jt
YWxNYXAoQ0lJbWFnZSAqYnVtcE1hcCwgZmxvYXQgc2NhbGUpCit7CisgICAgW1dLTm9ybWFsTWFw
RmlsdGVyIGNsYXNzXTsKKyAgICBDSUZpbHRlciAqZmlsdGVyID0gbmlsOworICAgIEtXUV9CTE9D
S19FWENFUFRJT05TCisgICAgZmlsdGVyID0gW0NJRmlsdGVyIGZpbHRlcldpdGhOYW1lOkAiV0tO
b3JtYWxNYXAiXTsgICAKKyAgICBbZmlsdGVyIHNldERlZmF1bHRzXTsKKyAgICAKKyAgICBbZmls
dGVyIHNldFZhbHVlOmJ1bXBNYXAgZm9yS2V5OkAiaW5wdXRJbWFnZSJdOyAgICAKKyAgICBbZmls
dGVyIHNldFZhbHVlOltOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6c2NhbGVdIGZvcktleTpAImlu
cHV0U3VyZmFjZVNjYWxlIl07CisgICAgcmV0dXJuIGZpbHRlcjsKKyAgICBLV1FfVU5CTE9DS19F
WENFUFRJT05TIAorICAgIHJldHVybiBuaWw7Cit9CisKK0NJRmlsdGVyICpLQ2FudmFzRkVEaWZm
dXNlTGlnaHRpbmdRdWFydHo6OmdldENJRmlsdGVyKEtDYW52YXNGaWx0ZXJRdWFydHogKnF1YXJ0
ekZpbHRlcikgY29uc3QKK3sKKyAgICBbV0tEaWZmdXNlTGlnaHRpbmdGaWx0ZXIgY2xhc3NdOwor
ICAgIAorICAgIENJRmlsdGVyICpmaWx0ZXIgPSBuaWw7CisgICAgS1dRX0JMT0NLX0VYQ0VQVElP
TlMKKyAgICBmaWx0ZXIgPSBbQ0lGaWx0ZXIgZmlsdGVyV2l0aE5hbWU6QCJXS0RpZmZ1c2VMaWdo
dGluZyJdOworICAgIGlmICghZmlsdGVyKQorICAgICAgICByZXR1cm4gbmlsOworICAgIAorICAg
IFtmaWx0ZXIgc2V0RGVmYXVsdHNdOworICAgIENJRmlsdGVyICpub3JtYWxzID0gZ2V0Tm9ybWFs
TWFwKHF1YXJ0ekZpbHRlci0+aW5wdXRJbWFnZSh0aGlzKSwgc3VyZmFjZVNjYWxlKCkpOworICAg
IGlmICghbm9ybWFscykgCisgICAgICAgIHJldHVybiBuaWw7CisgICAgCisgICAgQ0lGaWx0ZXIg
KmxpZ2h0VmVjdG9ycyA9IGdldExpZ2h0VmVjdG9ycyhub3JtYWxzLCBsaWdodFNvdXJjZSgpLCBz
dXJmYWNlU2NhbGUoKSk7CisgICAgaWYgKCFsaWdodFZlY3RvcnMpIAorICAgICAgICByZXR1cm4g
bmlsOworICAgIAorICAgIFtmaWx0ZXIgc2V0VmFsdWU6W25vcm1hbHMgdmFsdWVGb3JLZXk6IEAi
b3V0cHV0SW1hZ2UiXSBmb3JLZXk6QCJpbnB1dE5vcm1hbE1hcCJdOworICAgIFtmaWx0ZXIgc2V0
VmFsdWU6W2xpZ2h0VmVjdG9ycyB2YWx1ZUZvcktleTogQCJvdXRwdXRJbWFnZSJdIGZvcktleTpA
ImlucHV0TGlnaHRWZWN0b3JzIl07CisgICAgW2ZpbHRlciBzZXRWYWx1ZTpjaUNvbG9yKGxpZ2h0
aW5nQ29sb3IoKSkgZm9yS2V5OkAiaW5wdXRMaWdodGluZ0NvbG9yIl07CisgICAgW2ZpbHRlciBz
ZXRWYWx1ZTpbTlNOdW1iZXIgbnVtYmVyV2l0aEZsb2F0OnN1cmZhY2VTY2FsZSgpXSBmb3JLZXk6
QCJpbnB1dFN1cmZhY2VTY2FsZSJdOworICAgIFtmaWx0ZXIgc2V0VmFsdWU6W05TTnVtYmVyIG51
bWJlcldpdGhGbG9hdDpkaWZmdXNlQ29uc3RhbnQoKV0gZm9yS2V5OkAiaW5wdXREaWZmdXNlQ29u
c3RhbnQiXTsKKyAgICBbZmlsdGVyIHNldFZhbHVlOltOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6
a2VybmVsVW5pdExlbmd0aFgoKV0gZm9yS2V5OkAiaW5wdXRLZXJuZWxVbml0TGVuZ3RoWCJdOwor
ICAgIFtmaWx0ZXIgc2V0VmFsdWU6W05TTnVtYmVyIG51bWJlcldpdGhGbG9hdDprZXJuZWxVbml0
TGVuZ3RoWSgpXSBmb3JLZXk6QCJpbnB1dEtlcm5lbFVuaXRMZW5ndGhZIl07CisgICAgCisgICAg
RkVfUVVBUlRaX09VVFBVVF9SRVRVUk47Cit9CisKIENJRmlsdGVyICpLQ2FudmFzRkVGbG9vZFF1
YXJ0ejo6Z2V0Q0lGaWx0ZXIoS0NhbnZhc0ZpbHRlclF1YXJ0eiAqcXVhcnR6RmlsdGVyKSBjb25z
dAogewogCUNJRmlsdGVyICpmaWx0ZXIgPSBuaWw7CkBAIC01MDUsNyArNjQ4LDcgQEAgQ0lGaWx0
ZXIgKktDYW52YXNGRUltYWdlUXVhcnR6OjpnZXRDSUZpbAogCiBDSUZpbHRlciAqS0NhbnZhc0ZF
R2F1c3NpYW5CbHVyUXVhcnR6OjpnZXRDSUZpbHRlcihLQ2FudmFzRmlsdGVyUXVhcnR6ICpxdWFy
dHpGaWx0ZXIpIGNvbnN0CiB7Ci0JRkVfUVVBUlRaX1NFVFVQX0lOUFVUKEAiQ0lHYXVzc2lhblB5
cmFtaWQiKTsKKwlGRV9RVUFSVFpfU0VUVVBfSU5QVVQoQCJDSUdhdXNzaWFuQmx1ciIpOwogCQog
CWZsb2F0IGlucHV0UmFkaXVzID0gc3RkRGV2aWF0aW9uWCgpOwogCWlmIChpbnB1dFJhZGl1cyAh
PSBzdGREZXZpYXRpb25ZKCkpIHsKQEAgLTU1MSw2ICs2OTQsMzQgQEAgQ0lGaWx0ZXIgKktDYW52
YXNGRU9mZnNldFF1YXJ0ejo6Z2V0Q0lGaQogCUZFX1FVQVJUWl9PVVRQVVRfUkVUVVJOOwogfQog
CitDSUZpbHRlciAqS0NhbnZhc0ZFU3BlY3VsYXJMaWdodGluZ1F1YXJ0ejo6Z2V0Q0lGaWx0ZXIo
S0NhbnZhc0ZpbHRlclF1YXJ0eiAqcXVhcnR6RmlsdGVyKSBjb25zdAoreworICAgIFtXS1NwZWN1
bGFyTGlnaHRpbmdGaWx0ZXIgY2xhc3NdOworICAgIAorICAgIENJRmlsdGVyICpmaWx0ZXIgPSBu
aWw7CisgICAgS1dRX0JMT0NLX0VYQ0VQVElPTlMKKyAgICBmaWx0ZXIgPSBbQ0lGaWx0ZXIgZmls
dGVyV2l0aE5hbWU6QCJXS1NwZWN1bGFyTGlnaHRpbmciXTsKKyAgICBbZmlsdGVyIHNldERlZmF1
bHRzXTsKKyAgICBDSUZpbHRlciAqbm9ybWFscyA9IGdldE5vcm1hbE1hcChxdWFydHpGaWx0ZXIt
PmlucHV0SW1hZ2UodGhpcyksIHN1cmZhY2VTY2FsZSgpKTsKKyAgICBpZiAoIW5vcm1hbHMpIAor
ICAgICAgICByZXR1cm4gbmlsOworICAgIAorICAgIENJRmlsdGVyICpsaWdodFZlY3RvcnMgPSBn
ZXRMaWdodFZlY3RvcnMobm9ybWFscywgbGlnaHRTb3VyY2UoKSwgc3VyZmFjZVNjYWxlKCkpOwor
ICAgIGlmICghbGlnaHRWZWN0b3JzKSAKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBbZmlsdGVy
IHNldFZhbHVlOltub3JtYWxzIHZhbHVlRm9yS2V5OiBAIm91dHB1dEltYWdlIl0gZm9yS2V5OkAi
aW5wdXROb3JtYWxNYXAiXTsKKyAgICBbZmlsdGVyIHNldFZhbHVlOltsaWdodFZlY3RvcnMgdmFs
dWVGb3JLZXk6IEAib3V0cHV0SW1hZ2UiXSBmb3JLZXk6QCJpbnB1dExpZ2h0VmVjdG9ycyJdOwor
ICAgIFtmaWx0ZXIgc2V0VmFsdWU6Y2lDb2xvcihsaWdodGluZ0NvbG9yKCkpIGZvcktleTpAImlu
cHV0TGlnaHRpbmdDb2xvciJdOworICAgIFtmaWx0ZXIgc2V0VmFsdWU6W05TTnVtYmVyIG51bWJl
cldpdGhGbG9hdDpzdXJmYWNlU2NhbGUoKV0gZm9yS2V5OkAiaW5wdXRTdXJmYWNlU2NhbGUiXTsK
KyAgICBbZmlsdGVyIHNldFZhbHVlOltOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6c3BlY3VsYXJD
b25zdGFudCgpXSBmb3JLZXk6QCJpbnB1dFNwZWN1bGFyQ29uc3RhbnQiXTsKKyAgICBbZmlsdGVy
IHNldFZhbHVlOltOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6c3BlY3VsYXJFeHBvbmVudCgpXSBm
b3JLZXk6QCJpbnB1dFNwZWN1bGFyRXhwb25lbnQiXTsKKyAgICBbZmlsdGVyIHNldFZhbHVlOltO
U051bWJlciBudW1iZXJXaXRoRmxvYXQ6a2VybmVsVW5pdExlbmd0aFgoKV0gZm9yS2V5OkAiaW5w
dXRLZXJuZWxVbml0TGVuZ3RoWCJdOworICAgIFtmaWx0ZXIgc2V0VmFsdWU6W05TTnVtYmVyIG51
bWJlcldpdGhGbG9hdDprZXJuZWxVbml0TGVuZ3RoWSgpXSBmb3JLZXk6QCJpbnB1dEtlcm5lbFVu
aXRMZW5ndGhZIl07CisgICAgCisgICAgRkVfUVVBUlRaX09VVFBVVF9SRVRVUk47Cit9CisKKwog
Q0lGaWx0ZXIgKktDYW52YXNGRVRpbGVRdWFydHo6OmdldENJRmlsdGVyKEtDYW52YXNGaWx0ZXJR
dWFydHogKnF1YXJ0ekZpbHRlcikgY29uc3QKIHsKIAlGRV9RVUFSVFpfU0VUVVBfSU5QVVQoQCJD
SUFmZmluZVRpbGUiKTsKQEAgLTU1OCw2ICs3MjksMyBAQCBDSUZpbHRlciAqS0NhbnZhc0ZFVGls
ZVF1YXJ0ejo6Z2V0Q0lGaWx0CiAJRkVfUVVBUlRaX09VVFBVVF9SRVRVUk47CiB9CiAKLQotCi0K
SW5kZXg6IGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9LUmVuZGVyaW5nRGV2aWNlUXVhcnR6Lm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tjYW52YXMvZGV2aWNlL3F1
YXJ0ei9LUmVuZGVyaW5nRGV2aWNlUXVhcnR6Lm1tLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjYK
ZGlmZiAtcCAtdSAtcjEuNiBrY2FudmFzL2RldmljZS9xdWFydHovS1JlbmRlcmluZ0RldmljZVF1
YXJ0ei5tbQotLS0ga2NhbnZhcy9kZXZpY2UvcXVhcnR6L0tSZW5kZXJpbmdEZXZpY2VRdWFydHou
bW0JMjIgTm92IDIwMDUgMjM6MDQ6MjcgLTAwMDAJMS42CisrKyBrY2FudmFzL2RldmljZS9xdWFy
dHovS1JlbmRlcmluZ0RldmljZVF1YXJ0ei5tbQkyOCBOb3YgMjAwNSAwMzo1NzozNiAtMDAwMApA
QCAtMjkyLDE1ICsyOTIsMTcgQEAgS0NhbnZhc0ZpbHRlckVmZmVjdCAqS1JlbmRlcmluZ0Rldmlj
ZVF1YQogewogCXN3aXRjaCh0eXBlKQogCXsKLS8vCWNhc2UgRkVfRElTVEFOVF9MSUdIVDogCi0v
LwljYXNlIEZFX1BPSU5UX0xJR0hUOiAKLS8vCWNhc2UgRkVfU1BPVF9MSUdIVDogCisgICAgICAg
IC8qIExpZ2h0IHNvdXJjZXMgYXJlIGNvbnRhaW5lZCBieSB0aGUgZGlmZnVzZS9zcGVjdWxhciBs
aWdodCBibG9ja3MgCisgICAgICAgIGNhc2UgRkVfRElTVEFOVF9MSUdIVDogCisgICAgICAgIGNh
c2UgRkVfUE9JTlRfTElHSFQ6IAorICAgICAgICBjYXNlIEZFX1NQT1RfTElHSFQ6IAorICAgICAg
ICAqLwogCWNhc2UgRkVfQkxFTkQ6IHJldHVybiBuZXcgS0NhbnZhc0ZFQmxlbmRRdWFydHooKTsK
IAljYXNlIEZFX0NPTE9SX01BVFJJWDogcmV0dXJuIG5ldyBLQ2FudmFzRkVDb2xvck1hdHJpeFF1
YXJ0eigpOwogLy8JY2FzZSBGRV9DT01QT05FTlRfVFJBTlNGRVI6IAogCWNhc2UgRkVfQ09NUE9T
SVRFOiByZXR1cm4gbmV3IEtDYW52YXNGRUNvbXBvc2l0ZVF1YXJ0eigpOwogLy8JY2FzZSBGRV9D
T05WT0xWRV9NQVRSSVg6IAotLy8JY2FzZSBGRV9ESUZGVVNFX0xJR0hUSU5HOiAKKwljYXNlIEZF
X0RJRkZVU0VfTElHSFRJTkc6IHJldHVybiBuZXcgS0NhbnZhc0ZFRGlmZnVzZUxpZ2h0aW5nUXVh
cnR6KCk7CiAvLwljYXNlIEZFX0RJU1BMQUNFTUVOVF9NQVA6IAogCWNhc2UgRkVfRkxPT0Q6IHJl
dHVybiBuZXcgS0NhbnZhc0ZFRmxvb2RRdWFydHooKTsKIAljYXNlIEZFX0dBVVNTSUFOX0JMVVI6
IHJldHVybiBuZXcgS0NhbnZhc0ZFR2F1c3NpYW5CbHVyUXVhcnR6KCk7CkBAIC0zMDgsNyArMzEw
LDcgQEAgS0NhbnZhc0ZpbHRlckVmZmVjdCAqS1JlbmRlcmluZ0RldmljZVF1YQogCWNhc2UgRkVf
TUVSR0U6IHJldHVybiBuZXcgS0NhbnZhc0ZFTWVyZ2VRdWFydHooKTsKIC8vCWNhc2UgRkVfTU9S
UEhPTE9HWTogCiAJY2FzZSBGRV9PRkZTRVQ6IHJldHVybiBuZXcgS0NhbnZhc0ZFT2Zmc2V0UXVh
cnR6KCk7Ci0vLwljYXNlIEZFX1NQRUNVTEFSX0xJR0hUSU5HOiAKKwljYXNlIEZFX1NQRUNVTEFS
X0xJR0hUSU5HOiByZXR1cm4gbmV3IEtDYW52YXNGRVNwZWN1bGFyTGlnaHRpbmdRdWFydHooKTsK
IAljYXNlIEZFX1RJTEU6IHJldHVybiBuZXcgS0NhbnZhc0ZFVGlsZVF1YXJ0eigpOwogLy8JY2Fz
ZSBGRV9UVVJCVUxFTkNFOiAKIAlkZWZhdWx0OgpJbmRleDoga3N2ZzIvU1ZHQW5pbWF0ZWRDb2xv
ckltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtTnB1IGtzdmcyL1NWR0FuaW1hdGVkQ29sb3JJbXBs
LmNwcAotLS0ga3N2ZzIvU1ZHQW5pbWF0ZWRDb2xvckltcGwuY3BwCTEgSmFuIDE5NzAgMDA6MDA6
MDAgLTAwMDAKKysrIGtzdmcyL1NWR0FuaW1hdGVkQ29sb3JJbXBsLmNwcAkyOCBOb3YgMjAwNSAw
MzowOToxNiAtMDAwMApAQCAtMCwwICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1
IE9saXZlciBIdW50IDxvamgxNkBzdHVkZW50LmNhbnRlcmJ1cnkuYWMubno+LiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9S
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTVkdBbmltYXRlZENvbG9ySW1wbC5oIgor
Cit1c2luZyBuYW1lc3BhY2UgS1NWRzsKKworU1ZHQW5pbWF0ZWRDb2xvckltcGw6OlNWR0FuaW1h
dGVkQ29sb3JJbXBsKGNvbnN0IFNWR1N0eWxlZEVsZW1lbnRJbXBsICpjb250ZXh0KQorOiBTVkdB
bmltYXRlZFRlbXBsYXRlPFNWR0NvbG9ySW1wbD4oY29udGV4dCkKK3sKK30KKworU1ZHQW5pbWF0
ZWRDb2xvckltcGw6On5TVkdBbmltYXRlZENvbG9ySW1wbCgpCit7Cit9CisKK1NWR0NvbG9ySW1w
bCAqU1ZHQW5pbWF0ZWRDb2xvckltcGw6OmNyZWF0ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG5l
dyBTVkdDb2xvckltcGwoKTsKK30KKwordm9pZCBTVkdBbmltYXRlZENvbG9ySW1wbDo6YXNzaWdu
KFNWR0NvbG9ySW1wbCAqc3JjLCBTVkdDb2xvckltcGwgKmRzdCkgY29uc3QKK3sKKyAgICBpZiAo
IXNyYyB8fCAhZHN0KQorICAgICAgICByZXR1cm47CisgICAgZHN0LT5zZXRDc3NUZXh0KHNyYy0+
Y3NzVGV4dCgpKTsKK30KSW5kZXg6IGtzdmcyL1NWR0FuaW1hdGVkQ29sb3JJbXBsLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpkaWZmIC1OcHUga3N2ZzIvU1ZHQW5pbWF0ZWRDb2xvckltcGwuaAotLS0ga3N2ZzIvU1ZH
QW5pbWF0ZWRDb2xvckltcGwuaAkxIEphbiAxOTcwIDAwOjAwOjAwIC0wMDAwCisrKyBrc3ZnMi9T
VkdBbmltYXRlZENvbG9ySW1wbC5oCTI4IE5vdiAyMDA1IDAzOjA5OjE2IC0wMDAwCkBAIC0wLDAg
KzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgT2xpdmVyIEh1bnQgPG9qaDE2QHN0
dWRlbnQuY2FudGVyYnVyeS5hYy5uej4uICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBLU1ZHX1NWR0FuaW1h
dGVkQ29sb3JJbXBsX0gKKyNkZWZpbmUgS1NWR19TVkdBbmltYXRlZENvbG9ySW1wbF9ICisKKyNp
bmNsdWRlICJTVkdDb2xvckltcGwuaCIKKyNpbmNsdWRlICJTVkdBbmltYXRlZFRlbXBsYXRlLmgi
CisKK25hbWVzcGFjZSBLU1ZHCit7CisgICAgY2xhc3MgU1ZHQW5pbWF0ZWRDb2xvckltcGwgOiBw
dWJsaWMgU1ZHQW5pbWF0ZWRUZW1wbGF0ZTxTVkdDb2xvckltcGw+CisgICAgeworICAgIHB1Ymxp
YzoKKyAgICAgICAgU1ZHQW5pbWF0ZWRDb2xvckltcGwoY29uc3QgU1ZHU3R5bGVkRWxlbWVudElt
cGwgKmNvbnRleHQpOworICAgICAgICB2aXJ0dWFsIH5TVkdBbmltYXRlZENvbG9ySW1wbCgpOwor
ICAgIAorICAgIHByb3RlY3RlZDoKKyAgICAgICAgdmlydHVhbCBTVkdDb2xvckltcGwgKmNyZWF0
ZSgpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIHZvaWQgYXNzaWduKFNWR0NvbG9ySW1wbCAqc3Jj
LCBTVkdDb2xvckltcGwgKmRzdCkgY29uc3Q7CisgICAgfTsKK307CisKKyNlbmRpZgpJbmRleDog
a3N2ZzIvU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50SW1wbC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpkaWZm
IC1OcHUga3N2ZzIvU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50SW1wbC5jcHAKLS0tIGtzdmcy
L1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudEltcGwuY3BwCTEgSmFuIDE5NzAgMDA6MDA6MDAg
LTAwMDAKKysrIGtzdmcyL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudEltcGwuY3BwCTI4IE5v
diAyMDA1IDAzOjMzOjQ0IC0wMDAwCkBAIC0wLDAgKzEsMTY1IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDA1IE9saXZlciBIdW50IDxvamgxNkBzdHVkZW50LmNhbnRlcmJ1cnkuYWMubno+LiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQVVUSE9SIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlIDxxc3RyaW5nbGlzdC5oPgor
CisjaW5jbHVkZSA8a2RvbS9jb3JlL0F0dHJJbXBsLmg+CisKKyNpbmNsdWRlIDxrY2FudmFzL0tD
YW52YXMuaD4KKyNpbmNsdWRlIDxrY2FudmFzL0tDYW52YXNSZWdpc3RyeS5oPgorI2luY2x1ZGUg
PGtjYW52YXMvS0NhbnZhc0ZpbHRlcnMuaD4KKyNpbmNsdWRlIDxrY2FudmFzL2RldmljZS9LUmVu
ZGVyaW5nRGV2aWNlLmg+CisKKyNpbmNsdWRlICJrc3ZnLmgiCisjaW5jbHVkZSAiU1ZHTmFtZXMu
aCIKKyNpbmNsdWRlICJTVkdIZWxwZXIuaCIKKyNpbmNsdWRlICJTVkdSZW5kZXJTdHlsZS5oIgor
I2luY2x1ZGUgIlNWR0FuaW1hdGVkQ29sb3JJbXBsLmgiCisjaW5jbHVkZSAiU1ZHQW5pbWF0ZWRO
dW1iZXJJbXBsLmgiCisjaW5jbHVkZSAiU1ZHQW5pbWF0ZWRTdHJpbmdJbXBsLmgiCisjaW5jbHVk
ZSAiU1ZHRkVMaWdodEVsZW1lbnRJbXBsLmgiCisjaW5jbHVkZSAiU1ZHRE9NSW1wbGVtZW50YXRp
b25JbXBsLmgiCisjaW5jbHVkZSAiU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50SW1wbC5oIgor
Cit1c2luZyBuYW1lc3BhY2UgS1NWRzsKKworU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50SW1w
bDo6U1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50SW1wbChjb25zdCBLRE9NOjpRdWFsaWZpZWRO
YW1lJiB0YWdOYW1lLCBLRE9NOjpEb2N1bWVudEltcGwgKmRvYykgOiAKK1NWR0ZpbHRlclByaW1p
dGl2ZVN0YW5kYXJkQXR0cmlidXRlc0ltcGwodGFnTmFtZSwgZG9jKQoreworICAgIG1fZmlsdGVy
RWZmZWN0ID0gMDsKK30KKworU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50SW1wbDo6flNWR0ZF
RGlmZnVzZUxpZ2h0aW5nRWxlbWVudEltcGwoKQoreworfQorCitTVkdBbmltYXRlZFN0cmluZ0lt
cGwgKlNWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudEltcGw6OmluMSgpIGNvbnN0Cit7CisgICAg
U1ZHU3R5bGVkRWxlbWVudEltcGwgKmR1bW15ID0gMDsKKyAgICByZXR1cm4gbGF6eV9jcmVhdGU8
U1ZHQW5pbWF0ZWRTdHJpbmdJbXBsPihtX2luMSwgZHVtbXkpOworfQorCitTVkdBbmltYXRlZE51
bWJlckltcGwgKlNWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudEltcGw6OmRpZmZ1c2VDb25zdGFu
dCgpIGNvbnN0Cit7CisgICAgU1ZHU3R5bGVkRWxlbWVudEltcGwgKmR1bW15ID0gMDsKKyAgICBy
ZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWROdW1iZXJJbXBsPihtX2RpZmZ1c2VDb25zdGFu
dCwgZHVtbXkpOworfQorCitTVkdBbmltYXRlZE51bWJlckltcGwgKlNWR0ZFRGlmZnVzZUxpZ2h0
aW5nRWxlbWVudEltcGw6OnN1cmZhY2VTY2FsZSgpIGNvbnN0Cit7CisgICAgU1ZHU3R5bGVkRWxl
bWVudEltcGwgKmR1bW15ID0gMDsKKyAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWRO
dW1iZXJJbXBsPihtX3N1cmZhY2VTY2FsZSwgZHVtbXkpOworfQorCitTVkdBbmltYXRlZE51bWJl
ckltcGwgKlNWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudEltcGw6Omtlcm5lbFVuaXRMZW5ndGhY
KCkgY29uc3QKK3sKKyAgICBTVkdTdHlsZWRFbGVtZW50SW1wbCAqZHVtbXkgPSAwOworICAgIHJl
dHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZE51bWJlckltcGw+KG1fa2VybmVsVW5pdExlbmd0
aFgsIGR1bW15KTsKK30KKworU1ZHQW5pbWF0ZWROdW1iZXJJbXBsICpTVkdGRURpZmZ1c2VMaWdo
dGluZ0VsZW1lbnRJbXBsOjprZXJuZWxVbml0TGVuZ3RoWSgpIGNvbnN0Cit7CisgICAgU1ZHU3R5
bGVkRWxlbWVudEltcGwgKmR1bW15ID0gMDsKKyAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5p
bWF0ZWROdW1iZXJJbXBsPihtX2tlcm5lbFVuaXRMZW5ndGhZLCBkdW1teSk7Cit9CisKK1NWR0Fu
aW1hdGVkQ29sb3JJbXBsICpTVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnRJbXBsOjpsaWdodGlu
Z0NvbG9yKCkgY29uc3QKK3sKKyAgICBTVkdTdHlsZWRFbGVtZW50SW1wbCAqZHVtbXkgPSAwOwor
ICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZENvbG9ySW1wbD4obV9saWdodGluZ0Nv
bG9yLCBkdW1teSk7Cit9CisKK3ZvaWQgU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50SW1wbDo6
cGFyc2VNYXBwZWRBdHRyaWJ1dGUoS0RPTTo6TWFwcGVkQXR0cmlidXRlSW1wbCAqYXR0cikKK3sK
KyAgICBLRE9NOjpET01TdHJpbmcgdmFsdWUoYXR0ci0+dmFsdWUoKSk7CisgICAgaWYgKGF0dHIt
Pm5hbWUoKSA9PSBTVkdOYW1lczo6aW5BdHRyKQorICAgICAgICBpbjEoKS0+c2V0QmFzZVZhbCh2
YWx1ZS5pbXBsKCkpOworICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6c3Vy
ZmFjZVNjYWxlQXR0cikKKyAgICAgICAgc3VyZmFjZVNjYWxlKCktPnNldEJhc2VWYWwodmFsdWUu
cXN0cmluZygpLnRvRG91YmxlKCkpOworICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdO
YW1lczo6ZGlmZnVzZUNvbnN0YW50QXR0cikKKyAgICAgICAgZGlmZnVzZUNvbnN0YW50KCktPnNl
dEJhc2VWYWwodmFsdWUudG9JbnQoKSk7CisgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNW
R05hbWVzOjprZXJuZWxVbml0TGVuZ3RoQXR0cikgeworICAgICAgICBRU3RyaW5nTGlzdCBudW1i
ZXJzID0gUVN0cmluZ0xpc3Q6OnNwbGl0KCcgJywgdmFsdWUucXN0cmluZygpKTsKKyAgICAgICAg
a2VybmVsVW5pdExlbmd0aFgoKS0+c2V0QmFzZVZhbChudW1iZXJzWzBdLnRvRG91YmxlKCkpOwor
ICAgICAgICBpZiAobnVtYmVycy5jb3VudCgpID09IDEpCisgICAgICAgICAgICBrZXJuZWxVbml0
TGVuZ3RoWSgpLT5zZXRCYXNlVmFsKG51bWJlcnNbMF0udG9Eb3VibGUoKSk7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIGtlcm5lbFVuaXRMZW5ndGhZKCktPnNldEJhc2VWYWwobnVtYmVyc1sx
XS50b0RvdWJsZSgpKTsKKyAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6
bGlnaHRpbmdfY29sb3JBdHRyKQorICAgICAgICAvL0ZJWE1FIHRoaXMgaXMgYmFkLCBwb3RlbnRp
YWwgbWVtb3J5IGxlYWsKKyAgICAgICAgbGlnaHRpbmdDb2xvcigpLT5zZXRCYXNlVmFsKG5ldyBT
VkdDb2xvckltcGwodmFsdWUuaW1wbCgpKSk7CisgICAgZWxzZQorICAgICAgICBTVkdGaWx0ZXJQ
cmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXNJbXBsOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRy
KTsKK30KKworS0NhbnZhc0ZFRGlmZnVzZUxpZ2h0aW5nICpTVkdGRURpZmZ1c2VMaWdodGluZ0Vs
ZW1lbnRJbXBsOjpmaWx0ZXJFZmZlY3QoKSBjb25zdAoreworICAgIGlmICghbV9maWx0ZXJFZmZl
Y3QpIHsKKyAgICAgICAgbV9maWx0ZXJFZmZlY3QgPSBzdGF0aWNfY2FzdDxLQ2FudmFzRkVEaWZm
dXNlTGlnaHRpbmcgKj4oY2FudmFzKCktPnJlbmRlcmluZ0RldmljZSgpLT5jcmVhdGVGaWx0ZXJF
ZmZlY3QoRkVfRElGRlVTRV9MSUdIVElORykpOworICAgICAgICBtX2ZpbHRlckVmZmVjdC0+c2V0
SW4oS0RPTTo6RE9NU3RyaW5nKGluMSgpLT5iYXNlVmFsKCkpLnFzdHJpbmcoKSk7CisgICAgICAg
IHNldFN0YW5kYXJkQXR0cmlidXRlcyhtX2ZpbHRlckVmZmVjdCk7CisgICAgICAgIG1fZmlsdGVy
RWZmZWN0LT5zZXREaWZmdXNlQ29uc3RhbnQoKGRpZmZ1c2VDb25zdGFudCgpLT5iYXNlVmFsKCkp
KTsKKyAgICAgICAgbV9maWx0ZXJFZmZlY3QtPnNldFN1cmZhY2VTY2FsZSgoc3VyZmFjZVNjYWxl
KCktPmJhc2VWYWwoKSkpOworICAgICAgICBtX2ZpbHRlckVmZmVjdC0+c2V0S2VybmVsVW5pdExl
bmd0aFgoKGtlcm5lbFVuaXRMZW5ndGhYKCktPmJhc2VWYWwoKSkpOworICAgICAgICBtX2ZpbHRl
ckVmZmVjdC0+c2V0S2VybmVsVW5pdExlbmd0aFkoKGtlcm5lbFVuaXRMZW5ndGhZKCktPmJhc2VW
YWwoKSkpOworICAgICAgICBtX2ZpbHRlckVmZmVjdC0+c2V0TGlnaHRpbmdDb2xvcihsaWdodGlu
Z0NvbG9yKCktPmJhc2VWYWwoKS0+Y29sb3IoKSk7CisgICAgfQorICAgIHVwZGF0ZUxpZ2h0cygp
OworICAgIHJldHVybiBtX2ZpbHRlckVmZmVjdDsKK30KKworLy9GSVhNRTogaGVyZSBiZSBkcmFn
b25zCisKK3ZvaWQgU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50SW1wbDo6dXBkYXRlTGlnaHRz
KCkgY29uc3QKK3sKKyAgICBpZiAoIW1fZmlsdGVyRWZmZWN0KQorICAgICAgICByZXR1cm47Cisg
ICAgS0RPTTo6Tm9kZUltcGwgKm4gPSBmaXJzdENoaWxkKCk7CisgICAgaWYgKCFuKSAKKyAgICAg
ICAgcmV0dXJuOworICAgIEtDTGlnaHRTb3VyY2UgKiBsaWdodCA9IDA7CisgICAgCisgICAgZG8g
eworICAgICAgICBpZiAobi0+bm9kZU5hbWUoKS5xc3RyaW5nKCkgPT0gU1ZHTmFtZXM6OmZlRGlz
dGFudExpZ2h0VGFnKSB7ICAgICAgCisgICAgICAgICAgICBTVkdGRUxpZ2h0RWxlbWVudEltcGwg
KmxpZ2h0Tm9kZSA9IHN0YXRpY19jYXN0PFNWR0ZFTGlnaHRFbGVtZW50SW1wbCAqPihuKTsgIAor
ICAgICAgICAgICAgbGlnaHQgPSBuZXcgS0NEaXN0YW50TGlnaHRTb3VyY2UobGlnaHROb2RlLT5h
emltdXRoKCktPmJhc2VWYWwoKSwgbGlnaHROb2RlLT5lbGV2YXRpb24oKS0+YmFzZVZhbCgpKTsK
KyAgICAgICAgfSBlbHNlIGlmIChuLT5ub2RlTmFtZSgpLnFzdHJpbmcoKSA9PSBTVkdOYW1lczo6
ZmVQb2ludExpZ2h0VGFnKSB7CisgICAgICAgICAgICBTVkdGRUxpZ2h0RWxlbWVudEltcGwgKmxp
Z2h0Tm9kZSA9IHN0YXRpY19jYXN0PFNWR0ZFTGlnaHRFbGVtZW50SW1wbCAqPihuKTsgIAorICAg
ICAgICAgICAgS0NhbnZhc1BvaW50M0YgcG9zKGxpZ2h0Tm9kZS0+eCgpLT5iYXNlVmFsKCksIGxp
Z2h0Tm9kZS0+eSgpLT5iYXNlVmFsKCksIGxpZ2h0Tm9kZS0+eigpLT5iYXNlVmFsKCkpOworICAg
ICAgICAgICAgbGlnaHQgPSBuZXcgS0NQb2ludExpZ2h0U291cmNlKHBvcyk7CisgICAgICAgIH0g
ZWxzZSBpZiAobi0+bm9kZU5hbWUoKS5xc3RyaW5nKCkgPT0gU1ZHTmFtZXM6OmZlU3BvdExpZ2h0
VGFnKSB7CisgICAgICAgICAgICBTVkdGRUxpZ2h0RWxlbWVudEltcGwgKmxpZ2h0Tm9kZSA9IHN0
YXRpY19jYXN0PFNWR0ZFTGlnaHRFbGVtZW50SW1wbCAqPihuKTsgIAorICAgICAgICAgICAgS0Nh
bnZhc1BvaW50M0YgcG9zKGxpZ2h0Tm9kZS0+eCgpLT5iYXNlVmFsKCksIGxpZ2h0Tm9kZS0+eSgp
LT5iYXNlVmFsKCksIGxpZ2h0Tm9kZS0+eigpLT5iYXNlVmFsKCkpOworICAgICAgICAgICAgLy9j
b252ZXJ0IGxvb2tBdCB0byBhIGRpcmVjdGlvbgorICAgICAgICAgICAgS0NhbnZhc1BvaW50M0Yg
ZGlyZWN0aW9uKGxpZ2h0Tm9kZS0+cG9pbnRzQXRYKCktPmJhc2VWYWwoKS1wb3MueCgpLCAKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWdodE5vZGUtPnBvaW50c0F0WSgp
LT5iYXNlVmFsKCktcG9zLnkoKSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbGlnaHROb2RlLT5wb2ludHNBdFooKS0+YmFzZVZhbCgpLXBvcy56KCkpOworICAgICAgICAg
ICAgZGlyZWN0aW9uLm5vcm1hbGl6ZSgpOworICAgICAgICAgICAgbGlnaHQgPSBuZXcgS0NTcG90
TGlnaHRTb3VyY2UocG9zLCBkaXJlY3Rpb24sIGxpZ2h0Tm9kZS0+c3BlY3VsYXJFeHBvbmVudCgp
LT5iYXNlVmFsKCksIGxpZ2h0Tm9kZS0+bGltaXRpbmdDb25lQW5nbGUoKS0+YmFzZVZhbCgpKTsK
KyAgICAgICAgfSAgICAgICAKKyAgICB9IHdoaWxlICgoIWxpZ2h0KSAmJiAobj1uLT5uZXh0U2li
bGluZygpKSk7IAorICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRMaWdodFNvdXJjZShsaWdodCk7Cit9
CkluZGV4OiBrc3ZnMi9TVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnRJbXBsLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQpkaWZmIC1OcHUga3N2ZzIvU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50SW1wbC5oCi0tLSBr
c3ZnMi9TVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnRJbXBsLmgJMSBKYW4gMTk3MCAwMDowMDow
MCAtMDAwMAorKysga3N2ZzIvU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50SW1wbC5oCTI4IE5v
diAyMDA1IDAzOjMzOjQ0IC0wMDAwCkBAIC0wLDAgKzEsNzMgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDUgT2xpdmVyIEh1bnQgPG9qaDE2QHN0dWRlbnQuY2FudGVyYnVyeS5hYy5uej4uICBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBBVVRIT1IgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2lmbmRlZiBLU1ZHX1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudEltcGxfSAor
I2RlZmluZSBLU1ZHX1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudEltcGxfSAorCisjaW5jbHVk
ZSAiU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzSW1wbC5oIgorCitjbGFzcyBL
Q2FudmFzRkVEaWZmdXNlTGlnaHRpbmc7CisKK25hbWVzcGFjZSBLU1ZHCit7CisgICAgY2xhc3Mg
U1ZHQW5pbWF0ZWROdW1iZXJJbXBsOworICAgIGNsYXNzIFNWR0FuaW1hdGVkU3RyaW5nSW1wbDsK
KyAgICBjbGFzcyBTVkdBbmltYXRlZENvbG9ySW1wbDsKKyAgICAKKyAgICBjbGFzcyBTVkdGRURp
ZmZ1c2VMaWdodGluZ0VsZW1lbnRJbXBsIDogcHVibGljIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5k
YXJkQXR0cmlidXRlc0ltcGwKKyAgICB7CisgICAgcHVibGljOgorICAgICAgICBTVkdGRURpZmZ1
c2VMaWdodGluZ0VsZW1lbnRJbXBsKGNvbnN0IEtET006OlF1YWxpZmllZE5hbWUmIHRhZ05hbWUs
IEtET006OkRvY3VtZW50SW1wbCAqZG9jKTsKKyAgICAgICAgdmlydHVhbCB+U1ZHRkVEaWZmdXNl
TGlnaHRpbmdFbGVtZW50SW1wbCgpOworCisgICAgICAgIC8vICdTVkdGRURpZmZ1c2VMaWdodGlu
Z0VsZW1lbnQnIGZ1bmN0aW9ucworICAgICAgICBTVkdBbmltYXRlZFN0cmluZ0ltcGwgKmluMSgp
IGNvbnN0OworICAgICAgICBTVkdBbmltYXRlZE51bWJlckltcGwgKmRpZmZ1c2VDb25zdGFudCgp
IGNvbnN0OworICAgICAgICBTVkdBbmltYXRlZE51bWJlckltcGwgKnN1cmZhY2VTY2FsZSgpIGNv
bnN0OworICAgICAgICBTVkdBbmltYXRlZE51bWJlckltcGwgKmtlcm5lbFVuaXRMZW5ndGhYKCkg
Y29uc3Q7CisgICAgICAgIFNWR0FuaW1hdGVkTnVtYmVySW1wbCAqa2VybmVsVW5pdExlbmd0aFko
KSBjb25zdDsKKyAgICAgICAgU1ZHQW5pbWF0ZWRDb2xvckltcGwgICpsaWdodGluZ0NvbG9yKCkg
Y29uc3Q7CisKKyAgICAgICAgLy8gRGVyaXZlZCBmcm9tOiAnRWxlbWVudEltcGwnCisgICAgICAg
IHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShLRE9NOjpNYXBwZWRBdHRyaWJ1dGVJ
bXBsICphdHRyKTsKKworICAgICAgICB2aXJ0dWFsIEtDYW52YXNGRURpZmZ1c2VMaWdodGluZyAq
ZmlsdGVyRWZmZWN0KCkgY29uc3Q7CisKKyAgICBwcml2YXRlOgorICAgICAgICBtdXRhYmxlIFNo
YXJlZFB0cjxTVkdBbmltYXRlZFN0cmluZ0ltcGw+IG1faW4xOworICAgICAgICBtdXRhYmxlIFNo
YXJlZFB0cjxTVkdBbmltYXRlZE51bWJlckltcGw+IG1fZGlmZnVzZUNvbnN0YW50OworICAgICAg
ICBtdXRhYmxlIFNoYXJlZFB0cjxTVkdBbmltYXRlZE51bWJlckltcGw+IG1fc3VyZmFjZVNjYWxl
OworICAgICAgICBtdXRhYmxlIFNoYXJlZFB0cjxTVkdBbmltYXRlZENvbG9ySW1wbD4gIG1fbGln
aHRpbmdDb2xvcjsKKyAgICAgICAgbXV0YWJsZSBTaGFyZWRQdHI8U1ZHQW5pbWF0ZWROdW1iZXJJ
bXBsPiBtX2tlcm5lbFVuaXRMZW5ndGhYOworICAgICAgICBtdXRhYmxlIFNoYXJlZFB0cjxTVkdB
bmltYXRlZE51bWJlckltcGw+IG1fa2VybmVsVW5pdExlbmd0aFk7CisgICAgICAgIC8vbmVlZCBv
dGhlciBwcm9wZXJ0aWVzIGhlcmUuLi4KKyAgICAgICAgbXV0YWJsZSBLQ2FudmFzRkVEaWZmdXNl
TGlnaHRpbmcgKm1fZmlsdGVyRWZmZWN0OworICAgICAgICAKKyAgICAgICAgLy9saWdodCBtYW5h
Z2VtZW50CisgICAgICAgIHZvaWQgdXBkYXRlTGlnaHRzKCkgY29uc3Q7CisgICAgfTsKK307CisK
KyNlbmRpZgpJbmRleDoga3N2ZzIvU1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50SW1wbC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQpkaWZmIC1OcHUga3N2ZzIvU1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50SW1wbC5jcHAK
LS0tIGtzdmcyL1NWR0ZFRGlzdGFudExpZ2h0RWxlbWVudEltcGwuY3BwCTEgSmFuIDE5NzAgMDA6
MDA6MDAgLTAwMDAKKysrIGtzdmcyL1NWR0ZFRGlzdGFudExpZ2h0RWxlbWVudEltcGwuY3BwCTI4
IE5vdiAyMDA1IDAzOjA5OjE2IC0wMDAwCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDUgT2xpdmVyIEh1bnQgPG9qaDE2QHN0dWRlbnQuY2FudGVyYnVyeS5hYy5uej4u
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBBVVRIT1IgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2luY2x1ZGUgIlNWR0ZFRGlzdGFudExpZ2h0RWxlbWVudEltcGwuaCIKKwor
dXNpbmcgbmFtZXNwYWNlIEtTVkc7CisKK1NWR0ZFRGlzdGFudExpZ2h0RWxlbWVudEltcGw6OlNW
R0ZFRGlzdGFudExpZ2h0RWxlbWVudEltcGwoY29uc3QgS0RPTTo6UXVhbGlmaWVkTmFtZSYgdGFn
TmFtZSwgS0RPTTo6RG9jdW1lbnRJbXBsICpkb2MpIDogCitTVkdGRUxpZ2h0RWxlbWVudEltcGwo
dGFnTmFtZSwgZG9jKQoreworfQorCitTVkdGRURpc3RhbnRMaWdodEVsZW1lbnRJbXBsOjp+U1ZH
RkVEaXN0YW50TGlnaHRFbGVtZW50SW1wbCgpCit7Cit9CkluZGV4OiBrc3ZnMi9TVkdGRURpc3Rh
bnRMaWdodEVsZW1lbnRJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpkaWZmIC1OcHUga3N2ZzIvU1ZHRkVEaXN0
YW50TGlnaHRFbGVtZW50SW1wbC5oCi0tLSBrc3ZnMi9TVkdGRURpc3RhbnRMaWdodEVsZW1lbnRJ
bXBsLmgJMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMAorKysga3N2ZzIvU1ZHRkVEaXN0YW50TGln
aHRFbGVtZW50SW1wbC5oCTI4IE5vdiAyMDA1IDAzOjA5OjE2IC0wMDAwCkBAIC0wLDAgKzEsNDEg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgT2xpdmVyIEh1bnQgPG9qaDE2QHN0dWRlbnQu
Y2FudGVyYnVyeS5hYy5uej4uICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBLU1ZHX1NWR0ZFRGlzdGFudExp
Z2h0RWxlbWVudEltcGxfSAorI2RlZmluZSBLU1ZHX1NWR0ZFRGlzdGFudExpZ2h0RWxlbWVudElt
cGxfSAorCisjaW5jbHVkZSAiU1ZHRkVMaWdodEVsZW1lbnRJbXBsLmgiCisKK25hbWVzcGFjZSBL
U1ZHCit7CisgICAgY2xhc3MgU1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50SW1wbCA6IHB1YmxpYyBT
VkdGRUxpZ2h0RWxlbWVudEltcGwKKyAgICB7IAorICAgIHB1YmxpYzoKKyAgICAgICAgU1ZHRkVE
aXN0YW50TGlnaHRFbGVtZW50SW1wbChjb25zdCBLRE9NOjpRdWFsaWZpZWROYW1lJiB0YWdOYW1l
LCBLRE9NOjpEb2N1bWVudEltcGwgKmRvYyk7CisgICAgICAgIHZpcnR1YWwgflNWR0ZFRGlzdGFu
dExpZ2h0RWxlbWVudEltcGwoKTsKKyAgICB9OworfTsKKworI2VuZGlmCkluZGV4OiBrc3ZnMi9T
VkdGRUxpZ2h0RWxlbWVudEltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtTnB1IGtzdmcyL1NWR0ZF
TGlnaHRFbGVtZW50SW1wbC5jcHAKLS0tIGtzdmcyL1NWR0ZFTGlnaHRFbGVtZW50SW1wbC5jcHAJ
MSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMAorKysga3N2ZzIvU1ZHRkVMaWdodEVsZW1lbnRJbXBs
LmNwcAkyOCBOb3YgMjAwNSAwMzoyODo1NSAtMDAwMApAQCAtMCwwICsxLDE0MyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwNSBPbGl2ZXIgSHVudCA8b2poMTZAc3R1ZGVudC5jYW50ZXJidXJ5
LmFjLm56Pi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIEFVVEhPUiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8cXN0cmlu
Z2xpc3QuaD4KKworI2luY2x1ZGUgPGtkb20vY29yZS9BdHRySW1wbC5oPgorCisjaW5jbHVkZSA8
a2NhbnZhcy9LQ2FudmFzLmg+CisjaW5jbHVkZSA8a2NhbnZhcy9LQ2FudmFzUmVnaXN0cnkuaD4K
KyNpbmNsdWRlIDxrY2FudmFzL0tDYW52YXNSZXNvdXJjZXMuaD4KKyNpbmNsdWRlIDxrY2FudmFz
L0tDYW52YXNGaWx0ZXJzLmg+CisjaW5jbHVkZSA8a2NhbnZhcy9kZXZpY2UvS1JlbmRlcmluZ0Rl
dmljZS5oPgorCisjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKKyNpbmNsdWRlICJTVkdIZWxwZXIuaCIK
KyNpbmNsdWRlICJTVkdSZW5kZXJTdHlsZS5oIgorI2luY2x1ZGUgIlNWR0ZFTGlnaHRFbGVtZW50
SW1wbC5oIgorI2luY2x1ZGUgIlNWR0FuaW1hdGVkU3RyaW5nSW1wbC5oIgorI2luY2x1ZGUgIlNW
R0FuaW1hdGVkTnVtYmVySW1wbC5oIgorI2luY2x1ZGUgIlNWR0FuaW1hdGVkRW51bWVyYXRpb25J
bXBsLmgiCisjaW5jbHVkZSAiU1ZHRE9NSW1wbGVtZW50YXRpb25JbXBsLmgiCisKK3VzaW5nIG5h
bWVzcGFjZSBLU1ZHOworCitTVkdGRUxpZ2h0RWxlbWVudEltcGw6OlNWR0ZFTGlnaHRFbGVtZW50
SW1wbChjb25zdCBLRE9NOjpRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBLRE9NOjpEb2N1bWVudElt
cGwgKmRvYykgOiAKK1NWR0VsZW1lbnRJbXBsKHRhZ05hbWUsIGRvYykKK3sKK30KKworU1ZHRkVM
aWdodEVsZW1lbnRJbXBsOjp+U1ZHRkVMaWdodEVsZW1lbnRJbXBsKCkKK3sKK30KKworU1ZHQW5p
bWF0ZWROdW1iZXJJbXBsICpTVkdGRUxpZ2h0RWxlbWVudEltcGw6OmF6aW11dGgoKSBjb25zdAor
eworICAgIFNWR1N0eWxlZEVsZW1lbnRJbXBsICpkdW1teSA9IDA7CisgICAgcmV0dXJuIGxhenlf
Y3JlYXRlPFNWR0FuaW1hdGVkTnVtYmVySW1wbD4obV9hemltdXRoLCBkdW1teSk7Cit9CisKK1NW
R0FuaW1hdGVkTnVtYmVySW1wbCAqU1ZHRkVMaWdodEVsZW1lbnRJbXBsOjplbGV2YXRpb24oKSBj
b25zdAoreworICAgIFNWR1N0eWxlZEVsZW1lbnRJbXBsICpkdW1teSA9IDA7CisgICAgcmV0dXJu
IGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTnVtYmVySW1wbD4obV9lbGV2YXRpb24sIGR1bW15KTsK
K30KKworU1ZHQW5pbWF0ZWROdW1iZXJJbXBsICpTVkdGRUxpZ2h0RWxlbWVudEltcGw6OngoKSBj
b25zdAoreworICAgIFNWR1N0eWxlZEVsZW1lbnRJbXBsICpkdW1teSA9IDA7CisgICAgcmV0dXJu
IGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTnVtYmVySW1wbD4obV94LCBkdW1teSk7Cit9CisKK1NW
R0FuaW1hdGVkTnVtYmVySW1wbCAqU1ZHRkVMaWdodEVsZW1lbnRJbXBsOjp5KCkgY29uc3QKK3sK
KyAgICBTVkdTdHlsZWRFbGVtZW50SW1wbCAqZHVtbXkgPSAwOworICAgIHJldHVybiBsYXp5X2Ny
ZWF0ZTxTVkdBbmltYXRlZE51bWJlckltcGw+KG1feSwgZHVtbXkpOworfQorCisKK1NWR0FuaW1h
dGVkTnVtYmVySW1wbCAqU1ZHRkVMaWdodEVsZW1lbnRJbXBsOjp6KCkgY29uc3QKK3sKKyAgICBT
VkdTdHlsZWRFbGVtZW50SW1wbCAqZHVtbXkgPSAwOworICAgIHJldHVybiBsYXp5X2NyZWF0ZTxT
VkdBbmltYXRlZE51bWJlckltcGw+KG1feiwgZHVtbXkpOworfQorCitTVkdBbmltYXRlZE51bWJl
ckltcGwgKlNWR0ZFTGlnaHRFbGVtZW50SW1wbDo6cG9pbnRzQXRYKCkgY29uc3QKK3sKKyAgICBT
VkdTdHlsZWRFbGVtZW50SW1wbCAqZHVtbXkgPSAwOworICAgIHJldHVybiBsYXp5X2NyZWF0ZTxT
VkdBbmltYXRlZE51bWJlckltcGw+KG1fcG9pbnRzQXRYLCBkdW1teSk7Cit9CisKK1NWR0FuaW1h
dGVkTnVtYmVySW1wbCAqU1ZHRkVMaWdodEVsZW1lbnRJbXBsOjpwb2ludHNBdFkoKSBjb25zdAor
eworICAgIFNWR1N0eWxlZEVsZW1lbnRJbXBsICpkdW1teSA9IDA7CisgICAgcmV0dXJuIGxhenlf
Y3JlYXRlPFNWR0FuaW1hdGVkTnVtYmVySW1wbD4obV9wb2ludHNBdFksIGR1bW15KTsKK30KKwor
U1ZHQW5pbWF0ZWROdW1iZXJJbXBsICpTVkdGRUxpZ2h0RWxlbWVudEltcGw6OnBvaW50c0F0Wigp
IGNvbnN0Cit7CisgICAgU1ZHU3R5bGVkRWxlbWVudEltcGwgKmR1bW15ID0gMDsKKyAgICByZXR1
cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWROdW1iZXJJbXBsPihtX3BvaW50c0F0WiwgZHVtbXkp
OworfQorCitTVkdBbmltYXRlZE51bWJlckltcGwgKlNWR0ZFTGlnaHRFbGVtZW50SW1wbDo6c3Bl
Y3VsYXJFeHBvbmVudCgpIGNvbnN0Cit7CisgICAgU1ZHU3R5bGVkRWxlbWVudEltcGwgKmR1bW15
ID0gMDsKKyAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWROdW1iZXJJbXBsPihtX3Nw
ZWN1bGFyRXhwb25lbnQsIGR1bW15KTsKK30KKworU1ZHQW5pbWF0ZWROdW1iZXJJbXBsICpTVkdG
RUxpZ2h0RWxlbWVudEltcGw6OmxpbWl0aW5nQ29uZUFuZ2xlKCkgY29uc3QKK3sKKyAgICBTVkdT
dHlsZWRFbGVtZW50SW1wbCAqZHVtbXkgPSAwOworICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdB
bmltYXRlZE51bWJlckltcGw+KG1fbGltaXRpbmdDb25lQW5nbGUsIGR1bW15KTsKK30KKwordm9p
ZCBTVkdGRUxpZ2h0RWxlbWVudEltcGw6OnBhcnNlTWFwcGVkQXR0cmlidXRlKEtET006Ok1hcHBl
ZEF0dHJpYnV0ZUltcGwgKmF0dHIpCit7CisgICAgS0RPTTo6RE9NU3RyaW5nIHZhbHVlKGF0dHIt
PnZhbHVlKCkpOworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmF6aW11dGhBdHRy
KQorICAgICAgICBhemltdXRoKCktPnNldEJhc2VWYWwodmFsdWUucXN0cmluZygpLnRvRG91Ymxl
KCkpOworICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6ZWxldmF0aW9uQXR0
cikKKyAgICAgICAgZWxldmF0aW9uKCktPnNldEJhc2VWYWwodmFsdWUucXN0cmluZygpLnRvRG91
YmxlKCkpOworICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6eEF0dHIpCisg
ICAgICAgIHgoKS0+c2V0QmFzZVZhbCh2YWx1ZS5xc3RyaW5nKCkudG9Eb3VibGUoKSk7CisgICAg
ZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp5QXR0cikKKyAgICAgICAgeSgpLT5z
ZXRCYXNlVmFsKHZhbHVlLnFzdHJpbmcoKS50b0RvdWJsZSgpKTsKKyAgICBlbHNlIGlmIChhdHRy
LT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnpBdHRyKQorICAgICAgICB6KCktPnNldEJhc2VWYWwodmFs
dWUucXN0cmluZygpLnRvRG91YmxlKCkpOworICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBT
VkdOYW1lczo6cG9pbnRzQXRYQXR0cikKKyAgICAgICAgcG9pbnRzQXRYKCktPnNldEJhc2VWYWwo
dmFsdWUucXN0cmluZygpLnRvRG91YmxlKCkpOworICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9
PSBTVkdOYW1lczo6cG9pbnRzQXRZQXR0cikKKyAgICAgICAgcG9pbnRzQXRZKCktPnNldEJhc2VW
YWwodmFsdWUucXN0cmluZygpLnRvRG91YmxlKCkpOworICAgIGVsc2UgaWYgKGF0dHItPm5hbWUo
KSA9PSBTVkdOYW1lczo6cG9pbnRzQXRaQXR0cikKKyAgICAgICAgcG9pbnRzQXRaKCktPnNldEJh
c2VWYWwodmFsdWUucXN0cmluZygpLnRvRG91YmxlKCkpOworICAgIGVsc2UgaWYgKGF0dHItPm5h
bWUoKSA9PSBTVkdOYW1lczo6c3BlY3VsYXJFeHBvbmVudEF0dHIpCisgICAgICAgIHNwZWN1bGFy
RXhwb25lbnQoKS0+c2V0QmFzZVZhbCh2YWx1ZS5xc3RyaW5nKCkudG9Eb3VibGUoKSk7CisgICAg
ZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpsaW1pdGluZ0NvbmVBbmdsZUF0dHIp
CisgICAgICAgIGxpbWl0aW5nQ29uZUFuZ2xlKCktPnNldEJhc2VWYWwodmFsdWUucXN0cmluZygp
LnRvRG91YmxlKCkpOworICAgIGVsc2UKKyAgICAgICAgU1ZHRWxlbWVudEltcGw6OnBhcnNlTWFw
cGVkQXR0cmlidXRlKGF0dHIpOworfQpJbmRleDoga3N2ZzIvU1ZHRkVMaWdodEVsZW1lbnRJbXBs
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQpkaWZmIC1OcHUga3N2ZzIvU1ZHRkVMaWdodEVsZW1lbnRJbXBsLmgKLS0t
IGtzdmcyL1NWR0ZFTGlnaHRFbGVtZW50SW1wbC5oCTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAK
KysrIGtzdmcyL1NWR0ZFTGlnaHRFbGVtZW50SW1wbC5oCTI4IE5vdiAyMDA1IDAzOjA5OjE3IC0w
MDAwCkBAIC0wLDAgKzEsNzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgT2xpdmVyIEh1
bnQgPG9qaDE2QHN0dWRlbnQuY2FudGVyYnVyeS5hYy5uej4uICBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhP
UiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBL
U1ZHX1NWR0ZFTGlnaHRFbGVtZW50SW1wbF9ICisjZGVmaW5lIEtTVkdfU1ZHRkVMaWdodEVsZW1l
bnRJbXBsX0gKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTVkdFbGVtZW50SW1wbC5o
IgorCituYW1lc3BhY2UgS1NWRworeworICAgIGNsYXNzIFNWR0FuaW1hdGVkTnVtYmVySW1wbDsK
KyAgICBjbGFzcyBTVkdBbmltYXRlZE51bWJlckxpc3RJbXBsOworICAgIGNsYXNzIFNWR0FuaW1h
dGVkRW51bWVyYXRpb25JbXBsOworICAgIAorICAgIGNsYXNzIFNWR0ZFTGlnaHRFbGVtZW50SW1w
bCA6IHB1YmxpYyBTVkdFbGVtZW50SW1wbAorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFNW
R0ZFTGlnaHRFbGVtZW50SW1wbChjb25zdCBLRE9NOjpRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBL
RE9NOjpEb2N1bWVudEltcGwgKmRvYyk7CisgICAgICAgIHZpcnR1YWwgflNWR0ZFTGlnaHRFbGVt
ZW50SW1wbCgpOworICAgICAgICAKKyAgICAgICAgLy8gJ1NWR0NvbXBvbmVudFRyYW5zZmVyRnVu
Y3Rpb25FbGVtZW50JyBmdW5jdGlvbnMKKyAgICAgICAgU1ZHQW5pbWF0ZWROdW1iZXJJbXBsICph
emltdXRoKCkgY29uc3Q7CisgICAgICAgIFNWR0FuaW1hdGVkTnVtYmVySW1wbCAqZWxldmF0aW9u
KCkgY29uc3Q7CisgICAgICAgIFNWR0FuaW1hdGVkTnVtYmVySW1wbCAqeCgpIGNvbnN0OworICAg
ICAgICBTVkdBbmltYXRlZE51bWJlckltcGwgKnkoKSBjb25zdDsKKyAgICAgICAgU1ZHQW5pbWF0
ZWROdW1iZXJJbXBsICp6KCkgY29uc3Q7CisgICAgICAgIFNWR0FuaW1hdGVkTnVtYmVySW1wbCAq
cG9pbnRzQXRYKCkgY29uc3Q7CisgICAgICAgIFNWR0FuaW1hdGVkTnVtYmVySW1wbCAqcG9pbnRz
QXRZKCkgY29uc3Q7CisgICAgICAgIFNWR0FuaW1hdGVkTnVtYmVySW1wbCAqcG9pbnRzQXRaKCkg
Y29uc3Q7CisgICAgICAgIFNWR0FuaW1hdGVkTnVtYmVySW1wbCAqc3BlY3VsYXJFeHBvbmVudCgp
IGNvbnN0OworICAgICAgICBTVkdBbmltYXRlZE51bWJlckltcGwgKmxpbWl0aW5nQ29uZUFuZ2xl
KCkgY29uc3Q7CisgICAgICAgIAorICAgICAgICAvLyBEZXJpdmVkIGZyb206ICdFbGVtZW50SW1w
bCcKKyAgICAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKEtET006Ok1hcHBl
ZEF0dHJpYnV0ZUltcGwgKmF0dHIpOyAgICAgICAgCisgICAgcHJpdmF0ZToKKyAgICAgICAgbXV0
YWJsZSBTaGFyZWRQdHI8U1ZHQW5pbWF0ZWROdW1iZXJJbXBsPiBtX2F6aW11dGg7CisgICAgICAg
IG11dGFibGUgU2hhcmVkUHRyPFNWR0FuaW1hdGVkTnVtYmVySW1wbD4gbV9lbGV2YXRpb247Cisg
ICAgICAgIG11dGFibGUgU2hhcmVkUHRyPFNWR0FuaW1hdGVkTnVtYmVySW1wbD4gbV94OworICAg
ICAgICBtdXRhYmxlIFNoYXJlZFB0cjxTVkdBbmltYXRlZE51bWJlckltcGw+IG1feTsKKyAgICAg
ICAgbXV0YWJsZSBTaGFyZWRQdHI8U1ZHQW5pbWF0ZWROdW1iZXJJbXBsPiBtX3o7CisgICAgICAg
IG11dGFibGUgU2hhcmVkUHRyPFNWR0FuaW1hdGVkTnVtYmVySW1wbD4gbV9wb2ludHNBdFg7Cisg
ICAgICAgIG11dGFibGUgU2hhcmVkUHRyPFNWR0FuaW1hdGVkTnVtYmVySW1wbD4gbV9wb2ludHNB
dFk7CisgICAgICAgIG11dGFibGUgU2hhcmVkUHRyPFNWR0FuaW1hdGVkTnVtYmVySW1wbD4gbV9w
b2ludHNBdFo7CisgICAgICAgIG11dGFibGUgU2hhcmVkUHRyPFNWR0FuaW1hdGVkTnVtYmVySW1w
bD4gbV9zcGVjdWxhckV4cG9uZW50OworICAgICAgICBtdXRhYmxlIFNoYXJlZFB0cjxTVkdBbmlt
YXRlZE51bWJlckltcGw+IG1fbGltaXRpbmdDb25lQW5nbGU7CisgICAgICAgIAorICAgIH07Cit9
OworCisjZW5kaWYKSW5kZXg6IGtzdmcyL1NWR0ZFUG9pbnRMaWdodEVsZW1lbnRJbXBsLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09CmRpZmYgLU5wdSBrc3ZnMi9TVkdGRVBvaW50TGlnaHRFbGVtZW50SW1wbC5jcHAK
LS0tIGtzdmcyL1NWR0ZFUG9pbnRMaWdodEVsZW1lbnRJbXBsLmNwcAkxIEphbiAxOTcwIDAwOjAw
OjAwIC0wMDAwCisrKyBrc3ZnMi9TVkdGRVBvaW50TGlnaHRFbGVtZW50SW1wbC5jcHAJMjggTm92
IDIwMDUgMDM6MDk6MTcgLTAwMDAKQEAgLTAsMCArMSwzNyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwNSBPbGl2ZXIgSHVudCA8b2poMTZAc3R1ZGVudC5jYW50ZXJidXJ5LmFjLm56Pi4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IEFVVEhPUiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaW5jbHVkZSAiU1ZHRkVQb2ludExpZ2h0RWxlbWVudEltcGwuaCIKKwordXNpbmcg
bmFtZXNwYWNlIEtTVkc7CisKK1NWR0ZFUG9pbnRMaWdodEVsZW1lbnRJbXBsOjpTVkdGRVBvaW50
TGlnaHRFbGVtZW50SW1wbChjb25zdCBLRE9NOjpRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBLRE9N
OjpEb2N1bWVudEltcGwgKmRvYykgOiAKK1NWR0ZFTGlnaHRFbGVtZW50SW1wbCh0YWdOYW1lLCBk
b2MpCit7Cit9CisKK1NWR0ZFUG9pbnRMaWdodEVsZW1lbnRJbXBsOjp+U1ZHRkVQb2ludExpZ2h0
RWxlbWVudEltcGwoKQoreworfQpJbmRleDoga3N2ZzIvU1ZHRkVQb2ludExpZ2h0RWxlbWVudElt
cGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09CmRpZmYgLU5wdSBrc3ZnMi9TVkdGRVBvaW50TGlnaHRFbGVtZW50SW1w
bC5oCi0tLSBrc3ZnMi9TVkdGRVBvaW50TGlnaHRFbGVtZW50SW1wbC5oCTEgSmFuIDE5NzAgMDA6
MDA6MDAgLTAwMDAKKysrIGtzdmcyL1NWR0ZFUG9pbnRMaWdodEVsZW1lbnRJbXBsLmgJMjggTm92
IDIwMDUgMDM6MDk6MTcgLTAwMDAKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwNSBPbGl2ZXIgSHVudCA8b2poMTZAc3R1ZGVudC5jYW50ZXJidXJ5LmFjLm56Pi4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IEFVVEhPUiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaWZuZGVmIEtTVkdfU1ZHRkVQb2ludExpZ2h0RWxlbWVudEltcGxfSAorI2RlZmlu
ZSBLU1ZHX1NWR0ZFUG9pbnRMaWdodEVsZW1lbnRJbXBsX0gKKworI2luY2x1ZGUgIlNWR0ZFTGln
aHRFbGVtZW50SW1wbC5oIgorCituYW1lc3BhY2UgS1NWRworeworICAgIGNsYXNzIFNWR0ZFUG9p
bnRMaWdodEVsZW1lbnRJbXBsIDogcHVibGljIFNWR0ZFTGlnaHRFbGVtZW50SW1wbAorICAgIHsK
KyAgICAgICAgcHVibGljOgorICAgICAgICBTVkdGRVBvaW50TGlnaHRFbGVtZW50SW1wbChjb25z
dCBLRE9NOjpRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBLRE9NOjpEb2N1bWVudEltcGwgKmRvYyk7
CisgICAgICAgIHZpcnR1YWwgflNWR0ZFUG9pbnRMaWdodEVsZW1lbnRJbXBsKCk7CisgICAgfTsK
K307CisKKyNlbmRpZgpJbmRleDoga3N2ZzIvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudElt
cGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KZGlmZiAtTnB1IGtzdmcyL1NWR0ZFU3BlY3VsYXJMaWdodGluZ0Vs
ZW1lbnRJbXBsLmNwcAotLS0ga3N2ZzIvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudEltcGwu
Y3BwCTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAKKysrIGtzdmcyL1NWR0ZFU3BlY3VsYXJMaWdo
dGluZ0VsZW1lbnRJbXBsLmNwcAkyOCBOb3YgMjAwNSAwMzozMzo0NCAtMDAwMApAQCAtMCwwICsx
LDE3MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBPbGl2ZXIgSHVudCA8b2poMTZAc3R1
ZGVudC5jYW50ZXJidXJ5LmFjLm56Pi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSA8cXN0cmluZ2xpc3QuaD4KKworI2luY2x1ZGUgPGtkb20vY29yZS9BdHRySW1wbC5o
PgorCisjaW5jbHVkZSA8a2NhbnZhcy9LQ2FudmFzLmg+CisjaW5jbHVkZSA8a2NhbnZhcy9LQ2Fu
dmFzUmVnaXN0cnkuaD4KKyNpbmNsdWRlIDxrY2FudmFzL0tDYW52YXNGaWx0ZXJzLmg+CisjaW5j
bHVkZSA8a2NhbnZhcy9kZXZpY2UvS1JlbmRlcmluZ0RldmljZS5oPgorCisjaW5jbHVkZSAiU1ZH
TmFtZXMuaCIKKyNpbmNsdWRlICJTVkdIZWxwZXIuaCIKKyNpbmNsdWRlICJTVkdSZW5kZXJTdHls
ZS5oIgorI2luY2x1ZGUgIlNWR0FuaW1hdGVkQ29sb3JJbXBsLmgiCisjaW5jbHVkZSAiU1ZHQW5p
bWF0ZWROdW1iZXJJbXBsLmgiCisjaW5jbHVkZSAiU1ZHQW5pbWF0ZWRTdHJpbmdJbXBsLmgiCisj
aW5jbHVkZSAiU1ZHRkVMaWdodEVsZW1lbnRJbXBsLmgiCisjaW5jbHVkZSAiU1ZHRE9NSW1wbGVt
ZW50YXRpb25JbXBsLmgiCisjaW5jbHVkZSAiU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudElt
cGwuaCIKKworCit1c2luZyBuYW1lc3BhY2UgS1NWRzsKKworU1ZHRkVTcGVjdWxhckxpZ2h0aW5n
RWxlbWVudEltcGw6OlNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnRJbXBsKGNvbnN0IEtET006
OlF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIEtET006OkRvY3VtZW50SW1wbCAqZG9jKSA6IAorU1ZH
RmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzSW1wbCh0YWdOYW1lLCBkb2MpCit7Cisg
ICAgbV9maWx0ZXJFZmZlY3QgPSAwOworfQorCitTVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50
SW1wbDo6flNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnRJbXBsKCkKK3sKK30KKworU1ZHQW5p
bWF0ZWRTdHJpbmdJbXBsICpTVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50SW1wbDo6aW4xKCkg
Y29uc3QKK3sKKyAgICBTVkdTdHlsZWRFbGVtZW50SW1wbCAqZHVtbXkgPSAwOworICAgIHJldHVy
biBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZFN0cmluZ0ltcGw+KG1faW4xLCBkdW1teSk7Cit9CisK
K1NWR0FuaW1hdGVkTnVtYmVySW1wbCAqU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudEltcGw6
OnNwZWN1bGFyQ29uc3RhbnQoKSBjb25zdAoreworICAgIFNWR1N0eWxlZEVsZW1lbnRJbXBsICpk
dW1teSA9IDA7CisgICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTnVtYmVySW1wbD4o
bV9zcGVjdWxhckNvbnN0YW50LCBkdW1teSk7Cit9CisKK1NWR0FuaW1hdGVkTnVtYmVySW1wbCAq
U1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudEltcGw6OnNwZWN1bGFyRXhwb25lbnQoKSBjb25z
dAoreworICAgIFNWR1N0eWxlZEVsZW1lbnRJbXBsICpkdW1teSA9IDA7CisgICAgcmV0dXJuIGxh
enlfY3JlYXRlPFNWR0FuaW1hdGVkTnVtYmVySW1wbD4obV9zcGVjdWxhckV4cG9uZW50LCBkdW1t
eSk7Cit9CisKK1NWR0FuaW1hdGVkTnVtYmVySW1wbCAqU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxl
bWVudEltcGw6OnN1cmZhY2VTY2FsZSgpIGNvbnN0Cit7CisgICAgU1ZHU3R5bGVkRWxlbWVudElt
cGwgKmR1bW15ID0gMDsKKyAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWROdW1iZXJJ
bXBsPihtX3N1cmZhY2VTY2FsZSwgZHVtbXkpOworfQorCitTVkdBbmltYXRlZE51bWJlckltcGwg
KlNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnRJbXBsOjprZXJuZWxVbml0TGVuZ3RoWCgpIGNv
bnN0Cit7CisgICAgU1ZHU3R5bGVkRWxlbWVudEltcGwgKmR1bW15ID0gMDsKKyAgICByZXR1cm4g
bGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWROdW1iZXJJbXBsPihtX2tlcm5lbFVuaXRMZW5ndGhYLCBk
dW1teSk7Cit9CisKK1NWR0FuaW1hdGVkTnVtYmVySW1wbCAqU1ZHRkVTcGVjdWxhckxpZ2h0aW5n
RWxlbWVudEltcGw6Omtlcm5lbFVuaXRMZW5ndGhZKCkgY29uc3QKK3sKKyAgICBTVkdTdHlsZWRF
bGVtZW50SW1wbCAqZHVtbXkgPSAwOworICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRl
ZE51bWJlckltcGw+KG1fa2VybmVsVW5pdExlbmd0aFksIGR1bW15KTsKK30KKworU1ZHQW5pbWF0
ZWRDb2xvckltcGwgICpTVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50SW1wbDo6bGlnaHRpbmdD
b2xvcigpIGNvbnN0Cit7CisgICAgU1ZHU3R5bGVkRWxlbWVudEltcGwgKmR1bW15ID0gMDsKKyAg
ICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWRDb2xvckltcGw+KG1fbGlnaHRpbmdDb2xv
ciwgZHVtbXkpOworfQorCit2b2lkIFNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnRJbXBsOjpw
YXJzZU1hcHBlZEF0dHJpYnV0ZShLRE9NOjpNYXBwZWRBdHRyaWJ1dGVJbXBsICphdHRyKQoreyAg
ICAKKyAgICBLRE9NOjpET01TdHJpbmcgdmFsdWUoYXR0ci0+dmFsdWUoKSk7CisgICAgaWYgKGF0
dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6aW5BdHRyKQorICAgICAgICBpbjEoKS0+c2V0QmFzZVZh
bCh2YWx1ZS5pbXBsKCkpOworICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6
c3VyZmFjZVNjYWxlQXR0cikKKyAgICAgICAgc3VyZmFjZVNjYWxlKCktPnNldEJhc2VWYWwodmFs
dWUucXN0cmluZygpLnRvRG91YmxlKCkpOworICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBT
VkdOYW1lczo6c3BlY3VsYXJDb25zdGFudEF0dHIpCisgICAgICAgIHNwZWN1bGFyQ29uc3RhbnQo
KS0+c2V0QmFzZVZhbCh2YWx1ZS5xc3RyaW5nKCkudG9Eb3VibGUoKSk7CisgICAgZWxzZSBpZiAo
YXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpzcGVjdWxhckV4cG9uZW50QXR0cikKKyAgICAgICAg
c3BlY3VsYXJFeHBvbmVudCgpLT5zZXRCYXNlVmFsKHZhbHVlLnFzdHJpbmcoKS50b0RvdWJsZSgp
KTsKKyAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6Omtlcm5lbFVuaXRMZW5n
dGhBdHRyKSB7CisgICAgICAgIFFTdHJpbmdMaXN0IG51bWJlcnMgPSBRU3RyaW5nTGlzdDo6c3Bs
aXQoJyAnLCB2YWx1ZS5xc3RyaW5nKCkpOworICAgICAgICBrZXJuZWxVbml0TGVuZ3RoWCgpLT5z
ZXRCYXNlVmFsKG51bWJlcnNbMF0udG9Eb3VibGUoKSk7CisgICAgICAgIGlmIChudW1iZXJzLmNv
dW50KCkgPT0gMSkKKyAgICAgICAgICAgIGtlcm5lbFVuaXRMZW5ndGhZKCktPnNldEJhc2VWYWwo
bnVtYmVyc1swXS50b0RvdWJsZSgpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAga2VybmVs
VW5pdExlbmd0aFkoKS0+c2V0QmFzZVZhbChudW1iZXJzWzFdLnRvRG91YmxlKCkpOworICAgIH0g
ZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpsaWdodGluZ19jb2xvckF0dHIpCisg
ICAgICAgIC8vRklYTUUgdGhpcyBpcyBiYWQsIHBvdGVudGlhbCBtZW1vcnkgbGVhaworICAgICAg
ICBsaWdodGluZ0NvbG9yKCktPnNldEJhc2VWYWwobmV3IFNWR0NvbG9ySW1wbCh2YWx1ZS5pbXBs
KCkpKTsKKyAgICBlbHNlCisgICAgICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmli
dXRlc0ltcGw6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOworfQorCitLQ2FudmFzRkVTcGVj
dWxhckxpZ2h0aW5nICpTVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50SW1wbDo6ZmlsdGVyRWZm
ZWN0KCkgY29uc3QKK3sKKyAgICBpZiAoIW1fZmlsdGVyRWZmZWN0KSB7CisgICAgICAgIG1fZmls
dGVyRWZmZWN0ID0gc3RhdGljX2Nhc3Q8S0NhbnZhc0ZFU3BlY3VsYXJMaWdodGluZyAqPihjYW52
YXMoKS0+cmVuZGVyaW5nRGV2aWNlKCktPmNyZWF0ZUZpbHRlckVmZmVjdChGRV9TUEVDVUxBUl9M
SUdIVElORykpOworICAgICAgICBtX2ZpbHRlckVmZmVjdC0+c2V0SW4oS0RPTTo6RE9NU3RyaW5n
KGluMSgpLT5iYXNlVmFsKCkpLnFzdHJpbmcoKSk7CisgICAgICAgIHNldFN0YW5kYXJkQXR0cmli
dXRlcyhtX2ZpbHRlckVmZmVjdCk7CisgICAgICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRTcGVjdWxh
ckNvbnN0YW50KChzcGVjdWxhckNvbnN0YW50KCktPmJhc2VWYWwoKSkpOworICAgICAgICBtX2Zp
bHRlckVmZmVjdC0+c2V0U3BlY3VsYXJFeHBvbmVudCgoc3BlY3VsYXJFeHBvbmVudCgpLT5iYXNl
VmFsKCkpKTsKKyAgICAgICAgbV9maWx0ZXJFZmZlY3QtPnNldFN1cmZhY2VTY2FsZSgoc3VyZmFj
ZVNjYWxlKCktPmJhc2VWYWwoKSkpOworICAgICAgICBtX2ZpbHRlckVmZmVjdC0+c2V0S2VybmVs
VW5pdExlbmd0aFgoKGtlcm5lbFVuaXRMZW5ndGhYKCktPmJhc2VWYWwoKSkpOworICAgICAgICBt
X2ZpbHRlckVmZmVjdC0+c2V0S2VybmVsVW5pdExlbmd0aFkoKGtlcm5lbFVuaXRMZW5ndGhZKCkt
PmJhc2VWYWwoKSkpOworICAgICAgICBtX2ZpbHRlckVmZmVjdC0+c2V0TGlnaHRpbmdDb2xvcihs
aWdodGluZ0NvbG9yKCktPmJhc2VWYWwoKS0+Y29sb3IoKSk7CisgICAgfQorICAgIHVwZGF0ZUxp
Z2h0cygpOworICAgIHJldHVybiBtX2ZpbHRlckVmZmVjdDsKK30KKwordm9pZCBTVkdGRVNwZWN1
bGFyTGlnaHRpbmdFbGVtZW50SW1wbDo6dXBkYXRlTGlnaHRzKCkgY29uc3QKK3sKKyAgICBpZiAo
IW1fZmlsdGVyRWZmZWN0KQorICAgICAgICByZXR1cm47CisgICAgS0RPTTo6Tm9kZUltcGwgKm4g
PSBmaXJzdENoaWxkKCk7CisgICAgaWYgKCFuKSAKKyAgICAgICAgcmV0dXJuOworICAgIEtDTGln
aHRTb3VyY2UgKiBsaWdodCA9IDA7CisgICAgCisgICAgZG8geworICAgICAgICBpZiAobi0+bm9k
ZU5hbWUoKS5xc3RyaW5nKCkgPT0gU1ZHTmFtZXM6OmZlRGlzdGFudExpZ2h0VGFnKSB7ICAgICAg
CisgICAgICAgICAgICBTVkdGRUxpZ2h0RWxlbWVudEltcGwgKmxpZ2h0Tm9kZSA9IHN0YXRpY19j
YXN0PFNWR0ZFTGlnaHRFbGVtZW50SW1wbCAqPihuKTsgIAorICAgICAgICAgICAgbGlnaHQgPSBu
ZXcgS0NEaXN0YW50TGlnaHRTb3VyY2UobGlnaHROb2RlLT5hemltdXRoKCktPmJhc2VWYWwoKSwg
bGlnaHROb2RlLT5lbGV2YXRpb24oKS0+YmFzZVZhbCgpKTsKKyAgICAgICAgfSBlbHNlIGlmIChu
LT5ub2RlTmFtZSgpLnFzdHJpbmcoKSA9PSBTVkdOYW1lczo6ZmVQb2ludExpZ2h0VGFnKSB7Cisg
ICAgICAgICAgICBTVkdGRUxpZ2h0RWxlbWVudEltcGwgKmxpZ2h0Tm9kZSA9IHN0YXRpY19jYXN0
PFNWR0ZFTGlnaHRFbGVtZW50SW1wbCAqPihuKTsgIAorICAgICAgICAgICAgS0NhbnZhc1BvaW50
M0YgcG9zKGxpZ2h0Tm9kZS0+eCgpLT5iYXNlVmFsKCksIGxpZ2h0Tm9kZS0+eSgpLT5iYXNlVmFs
KCksIGxpZ2h0Tm9kZS0+eigpLT5iYXNlVmFsKCkpOworICAgICAgICAgICAgbGlnaHQgPSBuZXcg
S0NQb2ludExpZ2h0U291cmNlKHBvcyk7CisgICAgICAgIH0gZWxzZSBpZiAobi0+bm9kZU5hbWUo
KS5xc3RyaW5nKCkgPT0gU1ZHTmFtZXM6OmZlU3BvdExpZ2h0VGFnKSB7CisgICAgICAgICAgICBT
VkdGRUxpZ2h0RWxlbWVudEltcGwgKmxpZ2h0Tm9kZSA9IHN0YXRpY19jYXN0PFNWR0ZFTGlnaHRF
bGVtZW50SW1wbCAqPihuKTsgIAorICAgICAgICAgICAgS0NhbnZhc1BvaW50M0YgcG9zKGxpZ2h0
Tm9kZS0+eCgpLT5iYXNlVmFsKCksIGxpZ2h0Tm9kZS0+eSgpLT5iYXNlVmFsKCksIGxpZ2h0Tm9k
ZS0+eigpLT5iYXNlVmFsKCkpOworICAgICAgICAgICAgLy9jb252ZXJ0IGxvb2tBdCB0byBhIGRp
cmVjdGlvbgorICAgICAgICAgICAgS0NhbnZhc1BvaW50M0YgZGlyZWN0aW9uKGxpZ2h0Tm9kZS0+
cG9pbnRzQXRYKCktPmJhc2VWYWwoKS1wb3MueCgpLCAKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBsaWdodE5vZGUtPnBvaW50c0F0WSgpLT5iYXNlVmFsKCktcG9zLnkoKSwg
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlnaHROb2RlLT5wb2ludHNB
dFooKS0+YmFzZVZhbCgpLXBvcy56KCkpOworICAgICAgICAgICAgZGlyZWN0aW9uLm5vcm1hbGl6
ZSgpOworICAgICAgICAgICAgbGlnaHQgPSBuZXcgS0NTcG90TGlnaHRTb3VyY2UocG9zLCBkaXJl
Y3Rpb24sIGxpZ2h0Tm9kZS0+c3BlY3VsYXJFeHBvbmVudCgpLT5iYXNlVmFsKCksIGxpZ2h0Tm9k
ZS0+bGltaXRpbmdDb25lQW5nbGUoKS0+YmFzZVZhbCgpKTsKKyAgICAgICAgfSAgICAgIAorICAg
IH0gd2hpbGUgKCghbGlnaHQpICYmIChuPW4tPm5leHRTaWJsaW5nKCkpKTsKKyAgICBtX2ZpbHRl
ckVmZmVjdC0+c2V0TGlnaHRTb3VyY2UobGlnaHQpOworfQpJbmRleDoga3N2ZzIvU1ZHRkVTcGVj
dWxhckxpZ2h0aW5nRWxlbWVudEltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CmRpZmYgLU5wdSBrc3ZnMi9TVkdG
RVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50SW1wbC5oCi0tLSBrc3ZnMi9TVkdGRVNwZWN1bGFyTGln
aHRpbmdFbGVtZW50SW1wbC5oCTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAKKysrIGtzdmcyL1NW
R0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnRJbXBsLmgJMjggTm92IDIwMDUgMDM6MzM6MjYgLTAw
MDAKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBPbGl2ZXIgSHVu
dCA8b2poMTZAc3R1ZGVudC5jYW50ZXJidXJ5LmFjLm56Pi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9S
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEtT
VkdfU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudEltcGxfSAorI2RlZmluZSBLU1ZHX1NWR0ZF
U3BlY3VsYXJMaWdodGluZ0VsZW1lbnRJbXBsX0gKKworI2luY2x1ZGUgIlNWR0ZpbHRlclByaW1p
dGl2ZVN0YW5kYXJkQXR0cmlidXRlc0ltcGwuaCIKKyNpbmNsdWRlICJLQ2FudmFzRmlsdGVycy5o
IgorCituYW1lc3BhY2UgS1NWRworeworICAgIGNsYXNzIFNWR0FuaW1hdGVkTnVtYmVySW1wbDsK
KyAgICBjbGFzcyBTVkdBbmltYXRlZFN0cmluZ0ltcGw7CisgICAgY2xhc3MgU1ZHQW5pbWF0ZWRD
b2xvckltcGw7CisgICAgCisgICAgY2xhc3MgU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudElt
cGwgOiBwdWJsaWMgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzSW1wbAorICAg
IHsKKyAgICBwdWJsaWM6CisgICAgICAgIFNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnRJbXBs
KGNvbnN0IEtET006OlF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIEtET006OkRvY3VtZW50SW1wbCAq
ZG9jKTsKKyAgICAgICAgdmlydHVhbCB+U1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudEltcGwo
KTsKKyAgICAgICAgCisgICAgICAgIC8vICdTVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQnIGZ1
bmN0aW9ucworICAgICAgICBTVkdBbmltYXRlZFN0cmluZ0ltcGwgKmluMSgpIGNvbnN0OworICAg
ICAgICBTVkdBbmltYXRlZE51bWJlckltcGwgKnNwZWN1bGFyQ29uc3RhbnQoKSBjb25zdDsKKyAg
ICAgICAgU1ZHQW5pbWF0ZWROdW1iZXJJbXBsICpzcGVjdWxhckV4cG9uZW50KCkgY29uc3Q7Cisg
ICAgICAgIFNWR0FuaW1hdGVkTnVtYmVySW1wbCAqc3VyZmFjZVNjYWxlKCkgY29uc3Q7CisgICAg
ICAgIFNWR0FuaW1hdGVkTnVtYmVySW1wbCAqa2VybmVsVW5pdExlbmd0aFgoKSBjb25zdDsKKyAg
ICAgICAgU1ZHQW5pbWF0ZWROdW1iZXJJbXBsICprZXJuZWxVbml0TGVuZ3RoWSgpIGNvbnN0Owor
ICAgICAgICBTVkdBbmltYXRlZENvbG9ySW1wbCAgKmxpZ2h0aW5nQ29sb3IoKSBjb25zdDsKKyAg
ICAgICAgCisgICAgICAgIC8vIERlcml2ZWQgZnJvbTogJ0VsZW1lbnRJbXBsJworICAgICAgICB2
aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoS0RPTTo6TWFwcGVkQXR0cmlidXRlSW1w
bCAqYXR0cik7CisgICAgICAgIAorICAgICAgICB2aXJ0dWFsIEtDYW52YXNGRVNwZWN1bGFyTGln
aHRpbmcgKmZpbHRlckVmZmVjdCgpIGNvbnN0OworICAgIHByaXZhdGU6CisgICAgICAgIG11dGFi
bGUgU2hhcmVkUHRyPFNWR0FuaW1hdGVkU3RyaW5nSW1wbD4gbV9pbjE7CisgICAgICAgIG11dGFi
bGUgU2hhcmVkUHRyPFNWR0FuaW1hdGVkTnVtYmVySW1wbD4gbV9zcGVjdWxhckNvbnN0YW50Owor
ICAgICAgICBtdXRhYmxlIFNoYXJlZFB0cjxTVkdBbmltYXRlZE51bWJlckltcGw+IG1fc3BlY3Vs
YXJFeHBvbmVudDsKKyAgICAgICAgbXV0YWJsZSBTaGFyZWRQdHI8U1ZHQW5pbWF0ZWROdW1iZXJJ
bXBsPiBtX3N1cmZhY2VTY2FsZTsKKyAgICAgICAgbXV0YWJsZSBTaGFyZWRQdHI8U1ZHQW5pbWF0
ZWRDb2xvckltcGw+ICBtX2xpZ2h0aW5nQ29sb3I7CisgICAgICAgIG11dGFibGUgU2hhcmVkUHRy
PFNWR0FuaW1hdGVkTnVtYmVySW1wbD4gbV9rZXJuZWxVbml0TGVuZ3RoWDsKKyAgICAgICAgbXV0
YWJsZSBTaGFyZWRQdHI8U1ZHQW5pbWF0ZWROdW1iZXJJbXBsPiBtX2tlcm5lbFVuaXRMZW5ndGhZ
OworICAgICAgICAvL25lZWQgb3RoZXIgcHJvcGVydGllcyBoZXJlLi4uCisgICAgICAgIG11dGFi
bGUgS0NhbnZhc0ZFU3BlY3VsYXJMaWdodGluZyAqbV9maWx0ZXJFZmZlY3Q7CisgICAgICAgIAor
ICAgICAgICAvL2xpZ2h0IG1hbmFnZW1lbnQKKyAgICAgICAgdm9pZCB1cGRhdGVMaWdodHMoKSBj
b25zdDsKKyAgICB9OworfTsKKworI2VuZGlmCkluZGV4OiBrc3ZnMi9TVkdGRVNwb3RMaWdodEVs
ZW1lbnRJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09CmRpZmYgLU5wdSBrc3ZnMi9TVkdGRVNwb3RMaWdodEVs
ZW1lbnRJbXBsLmNwcAotLS0ga3N2ZzIvU1ZHRkVTcG90TGlnaHRFbGVtZW50SW1wbC5jcHAJMSBK
YW4gMTk3MCAwMDowMDowMCAtMDAwMAorKysga3N2ZzIvU1ZHRkVTcG90TGlnaHRFbGVtZW50SW1w
bC5jcHAJMjggTm92IDIwMDUgMDM6MDk6MTcgLTAwMDAKQEAgLTAsMCArMSwzNyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwNSBPbGl2ZXIgSHVudCA8b2poMTZAc3R1ZGVudC5jYW50ZXJidXJ5
LmFjLm56Pi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIEFVVEhPUiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiU1ZHRkVTcG90TGlnaHRFbGVtZW50SW1wbC5o
IgorCit1c2luZyBuYW1lc3BhY2UgS1NWRzsKKworU1ZHRkVTcG90TGlnaHRFbGVtZW50SW1wbDo6
U1ZHRkVTcG90TGlnaHRFbGVtZW50SW1wbChjb25zdCBLRE9NOjpRdWFsaWZpZWROYW1lJiB0YWdO
YW1lLCBLRE9NOjpEb2N1bWVudEltcGwgKmRvYykgOiAKK1NWR0ZFTGlnaHRFbGVtZW50SW1wbCh0
YWdOYW1lLCBkb2MpCit7Cit9CisKK1NWR0ZFU3BvdExpZ2h0RWxlbWVudEltcGw6On5TVkdGRVNw
b3RMaWdodEVsZW1lbnRJbXBsKCkKK3sKK30KSW5kZXg6IGtzdmcyL1NWR0ZFU3BvdExpZ2h0RWxl
bWVudEltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09CmRpZmYgLU5wdSBrc3ZnMi9TVkdGRVNwb3RMaWdodEVsZW1l
bnRJbXBsLmgKLS0tIGtzdmcyL1NWR0ZFU3BvdExpZ2h0RWxlbWVudEltcGwuaAkxIEphbiAxOTcw
IDAwOjAwOjAwIC0wMDAwCisrKyBrc3ZnMi9TVkdGRVNwb3RMaWdodEVsZW1lbnRJbXBsLmgJMjgg
Tm92IDIwMDUgMDM6MDk6MTcgLTAwMDAKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAwNSBPbGl2ZXIgSHVudCA8b2poMTZAc3R1ZGVudC5jYW50ZXJidXJ5LmFjLm56Pi4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIEFVVEhPUiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIEtTVkdfU1ZHRkVTcG90TGlnaHRFbGVtZW50SW1wbF9ICisjZGVm
aW5lIEtTVkdfU1ZHRkVTcG90TGlnaHRFbGVtZW50SW1wbF9ICisKKyNpbmNsdWRlICJTVkdGRUxp
Z2h0RWxlbWVudEltcGwuaCIKKworbmFtZXNwYWNlIEtTVkcKK3sKKyAgICBjbGFzcyBTVkdGRVNw
b3RMaWdodEVsZW1lbnRJbXBsIDogcHVibGljIFNWR0ZFTGlnaHRFbGVtZW50SW1wbAorICAgIHsK
KyAgICBwdWJsaWM6CisgICAgICAgIFNWR0ZFU3BvdExpZ2h0RWxlbWVudEltcGwoY29uc3QgS0RP
TTo6UXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgS0RPTTo6RG9jdW1lbnRJbXBsICpkb2MpOworICAg
ICAgICB2aXJ0dWFsIH5TVkdGRVNwb3RMaWdodEVsZW1lbnRJbXBsKCk7CisgICAgfTsKK307CisK
KyNlbmRpZgpJbmRleDoga3N2ZzIvc3ZnL1NWR0VsZW1lbnRJbXBsLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJD
UyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9zdmcvU1ZHRWxlbWVudEltcGwuY3Bw
LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEyCmRpZmYgLXAgLXUgLXIxLjEyIGtzdmcyL3N2Zy9T
VkdFbGVtZW50SW1wbC5jcHAKLS0tIGtzdmcyL3N2Zy9TVkdFbGVtZW50SW1wbC5jcHAJMjYgTm92
IDIwMDUgMjI6MzU6NDcgLTAwMDAJMS4xMgorKysga3N2ZzIvc3ZnL1NWR0VsZW1lbnRJbXBsLmNw
cAkyOCBOb3YgMjAwNSAwMzo1NzozOSAtMDAwMApAQCAtMzIsNyArMzIsNyBAQAogI2luY2x1ZGUg
ImtzdmcuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgogI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIK
LSNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJodG1sbmFtZXMuaCIKICNpbmNsdWRl
ICJTVkdFbGVtZW50SW1wbC5oIgogI2luY2x1ZGUgIlNWR1NWR0VsZW1lbnRJbXBsLmgiCiAjaW5j
bHVkZSAiU1ZHRE9NSW1wbGVtZW50YXRpb25JbXBsLmgiCkluZGV4OiBrc3ZnMi9zdmcvU1ZHRkVD
b21wb3NpdGVFbGVtZW50SW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NW
R1N1cHBvcnQva3N2ZzIvc3ZnL1NWR0ZFQ29tcG9zaXRlRWxlbWVudEltcGwuY3BwLHYKcmV0cmll
dmluZyByZXZpc2lvbiAxLjEwCmRpZmYgLXAgLXUgLXIxLjEwIGtzdmcyL3N2Zy9TVkdGRUNvbXBv
c2l0ZUVsZW1lbnRJbXBsLmNwcAotLS0ga3N2ZzIvc3ZnL1NWR0ZFQ29tcG9zaXRlRWxlbWVudElt
cGwuY3BwCTI2IE5vdiAyMDA1IDIyOjE5OjA4IC0wMDAwCTEuMTAKKysrIGtzdmcyL3N2Zy9TVkdG
RUNvbXBvc2l0ZUVsZW1lbnRJbXBsLmNwcAkyOCBOb3YgMjAwNSAwMzo1NzozOSAtMDAwMApAQCAt
MTEwLDEzICsxMTAsMjEgQEAgdm9pZCBTVkdGRUNvbXBvc2l0ZUVsZW1lbnRJbXBsOjpwYXJzZU1h
cAogICAgICAgICAgICAgX29wZXJhdG9yKCktPnNldEJhc2VWYWwoU1ZHX0ZFQ09NUE9TSVRFX09Q
RVJBVE9SX0FUT1ApOwogICAgICAgICBlbHNlIGlmKHZhbHVlID09ICJ4b3IiKQogICAgICAgICAg
ICAgX29wZXJhdG9yKCktPnNldEJhc2VWYWwoU1ZHX0ZFQ09NUE9TSVRFX09QRVJBVE9SX1hPUik7
Ci0gICAgICAgIGVsc2UgaWYodmFsdWUgPT0gImFyaXRobWF0aWMiKQorICAgICAgICBlbHNlIGlm
KHZhbHVlID09ICJhcml0aG1ldGljIikKICAgICAgICAgICAgIF9vcGVyYXRvcigpLT5zZXRCYXNl
VmFsKFNWR19GRUNPTVBPU0lURV9PUEVSQVRPUl9BUklUSE1FVElDKTsKICAgICB9CiAgICAgZWxz
ZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjppbkF0dHIpCiAgICAgICAgIGluMSgpLT5z
ZXRCYXNlVmFsKHZhbHVlLmltcGwoKSk7CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNW
R05hbWVzOjppbjJBdHRyKQogICAgICAgICBpbjIoKS0+c2V0QmFzZVZhbCh2YWx1ZS5pbXBsKCkp
OworICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6azFBdHRyKQorICAgICAg
ICBrMSgpLT5zZXRCYXNlVmFsKHZhbHVlLnFzdHJpbmcoKS50b0RvdWJsZSgpKTsKKyAgICBlbHNl
IGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmsyQXR0cikKKyAgICAgICAgazIoKS0+c2V0
QmFzZVZhbCh2YWx1ZS5xc3RyaW5nKCkudG9Eb3VibGUoKSk7CisgICAgZWxzZSBpZiAoYXR0ci0+
bmFtZSgpID09IFNWR05hbWVzOjprM0F0dHIpCisgICAgICAgIGszKCktPnNldEJhc2VWYWwodmFs
dWUucXN0cmluZygpLnRvRG91YmxlKCkpOworICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBT
VkdOYW1lczo6azRBdHRyKQorICAgICAgICBrNCgpLT5zZXRCYXNlVmFsKHZhbHVlLnFzdHJpbmco
KS50b0RvdWJsZSgpKTsKICAgICBlbHNlCiAgICAgICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5k
YXJkQXR0cmlidXRlc0ltcGw6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOwogfQpJbmRleDog
a3N2ZzIvc3ZnL1NWR1NWR0VsZW1lbnRJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zz
L3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9zdmcvU1ZHU1ZHRWxlbWVudEltcGwuY3BwLHYKcmV0cmll
dmluZyByZXZpc2lvbiAxLjEzCmRpZmYgLXAgLXUgLXIxLjEzIGtzdmcyL3N2Zy9TVkdTVkdFbGVt
ZW50SW1wbC5jcHAKLS0tIGtzdmcyL3N2Zy9TVkdTVkdFbGVtZW50SW1wbC5jcHAJMjYgTm92IDIw
MDUgMjI6MzU6NDggLTAwMDAJMS4xMworKysga3N2ZzIvc3ZnL1NWR1NWR0VsZW1lbnRJbXBsLmNw
cAkyOCBOb3YgMjAwNSAwMzo1NzozOSAtMDAwMApAQCAtNTksNyArNTksNyBAQAogI2luY2x1ZGUg
PHEzcGFpbnRkZXZpY2VtZXRyaWNzLmg+CiAjaW5jbHVkZSA8cXRleHRzdHJlYW0uaD4KIAotI2lu
Y2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgImh0bWxuYW1lcy5oIgogI2luY2x1ZGUgIkV2
ZW50TmFtZXMuaCIKIAogdXNpbmcgbmFtZXNwYWNlIEtTVkc7CkluZGV4OiBrc3ZnMi9zdmcvU1ZH
U3R5bGVkRWxlbWVudEltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdT
dXBwb3J0L2tzdmcyL3N2Zy9TVkdTdHlsZWRFbGVtZW50SW1wbC5jcHAsdgpyZXRyaWV2aW5nIHJl
dmlzaW9uIDEuMTIKZGlmZiAtcCAtdSAtcjEuMTIga3N2ZzIvc3ZnL1NWR1N0eWxlZEVsZW1lbnRJ
bXBsLmNwcAotLS0ga3N2ZzIvc3ZnL1NWR1N0eWxlZEVsZW1lbnRJbXBsLmNwcAkyNiBOb3YgMjAw
NSAyMjozNTo0OCAtMDAwMAkxLjEyCisrKyBrc3ZnMi9zdmcvU1ZHU3R5bGVkRWxlbWVudEltcGwu
Y3BwCTI4IE5vdiAyMDA1IDAzOjU3OjM5IC0wMDAwCkBAIC00OSw3ICs0OSw3IEBACiAjaW5jbHVk
ZSAiU1ZHSGVscGVyLmgiCiAKICNpbmNsdWRlICJTVkdOYW1lcy5oIgotI2luY2x1ZGUgIkhUTUxO
YW1lcy5oIgorI2luY2x1ZGUgImh0bWxuYW1lcy5oIgogCiB1c2luZyBuYW1lc3BhY2UgS1NWRzsK
IAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>4827</attachid>
            <date>2005-11-27 20:47:32 -0800</date>
            <delta_ts>2005-11-28 04:55:48 -0800</delta_ts>
            <desc>Patch updated to work with current ToT</desc>
            <filename>lighting.patch</filename>
            <type>text/plain</type>
            <size>146500</size>
            <attacher name="Oliver Hunt">oliver</attacher>
            
              <data encoding="base64">SW5kZXg6IGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL2RldmljZS9xdWFydHovZmlsdGVy
cy9kZXZpY2UvcXVhcnR6L2ZpbHRlcnMvQ1ZTL0VudHJpZXMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpkaWZmIC1OcHUg
a2NhbnZhcy9kZXZpY2UvcXVhcnR6L2ZpbHRlcnMvZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL2Rldmlj
ZS9xdWFydHovZmlsdGVycy9DVlMvRW50cmllcwotLS0ga2NhbnZhcy9kZXZpY2UvcXVhcnR6L2Zp
bHRlcnMvZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL2RldmljZS9xdWFydHovZmlsdGVycy9DVlMvRW50
cmllcwkxIEphbiAxOTcwIDAwOjAwOjAwIC0wMDAwCisrKyBrY2FudmFzL2RldmljZS9xdWFydHov
ZmlsdGVycy9kZXZpY2UvcXVhcnR6L2ZpbHRlcnMvZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL0NWUy9F
bnRyaWVzCTIzIE5vdiAyMDA1IDEwOjE4OjQzIC0wMDAwCkBAIC0wLDAgKzEgQEAKK0QKSW5kZXg6
IGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL2RldmljZS9xdWFydHovZmlsdGVycy9kZXZp
Y2UvcXVhcnR6L2ZpbHRlcnMvQ1ZTL1JlcG9zaXRvcnkKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpkaWZmIC1OcHUga2Nh
bnZhcy9kZXZpY2UvcXVhcnR6L2ZpbHRlcnMvZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL2RldmljZS9x
dWFydHovZmlsdGVycy9DVlMvUmVwb3NpdG9yeQotLS0ga2NhbnZhcy9kZXZpY2UvcXVhcnR6L2Zp
bHRlcnMvZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL2RldmljZS9xdWFydHovZmlsdGVycy9DVlMvUmVw
b3NpdG9yeQkxIEphbiAxOTcwIDAwOjAwOjAwIC0wMDAwCisrKyBrY2FudmFzL2RldmljZS9xdWFy
dHovZmlsdGVycy9kZXZpY2UvcXVhcnR6L2ZpbHRlcnMvZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL0NW
Uy9SZXBvc2l0b3J5CTIzIE5vdiAyMDA1IDEwOjE4OjQzIC0wMDAwCkBAIC0wLDAgKzEgQEAKK1NW
R1N1cHBvcnQva2NhbnZhcy9kZXZpY2UvcXVhcnR6L2ZpbHRlcnMKSW5kZXg6IGtjYW52YXMvZGV2
aWNlL3F1YXJ0ei9maWx0ZXJzL2RldmljZS9xdWFydHovZmlsdGVycy9kZXZpY2UvcXVhcnR6L2Zp
bHRlcnMvQ1ZTL1Jvb3QKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQpkaWZmIC1OcHUga2NhbnZhcy9kZXZpY2UvcXVhcnR6
L2ZpbHRlcnMvZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL2RldmljZS9xdWFydHovZmlsdGVycy9DVlMv
Um9vdAotLS0ga2NhbnZhcy9kZXZpY2UvcXVhcnR6L2ZpbHRlcnMvZGV2aWNlL3F1YXJ0ei9maWx0
ZXJzL2RldmljZS9xdWFydHovZmlsdGVycy9DVlMvUm9vdAkxIEphbiAxOTcwIDAwOjAwOjAwIC0w
MDAwCisrKyBrY2FudmFzL2RldmljZS9xdWFydHovZmlsdGVycy9kZXZpY2UvcXVhcnR6L2ZpbHRl
cnMvZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL0NWUy9Sb290CTIzIE5vdiAyMDA1IDEwOjE4OjQzIC0w
MDAwCkBAIC0wLDAgKzEgQEAKKzpwc2VydmVyOmFub255bW91c0Bhbm9uY3ZzLm9wZW5zb3VyY2Uu
YXBwbGUuY29tOi9jdnMvcm9vdApJbmRleDoga2NhbnZhcy9kZXZpY2UvcXVhcnR6L2RldmljZS9x
dWFydHovZmlsdGVycy9XS0FyaXRobWV0aWNGaWx0ZXIuY2lrZXJuZWwKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpkaWZm
IC1OcHUga2NhbnZhcy9kZXZpY2UvcXVhcnR6L2RldmljZS9xdWFydHovZmlsdGVycy9XS0FyaXRo
bWV0aWNGaWx0ZXIuY2lrZXJuZWwKLS0tIGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9kZXZpY2UvcXVh
cnR6L2ZpbHRlcnMvV0tBcml0aG1ldGljRmlsdGVyLmNpa2VybmVsCTEgSmFuIDE5NzAgMDA6MDA6
MDAgLTAwMDAKKysrIGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9kZXZpY2UvcXVhcnR6L2ZpbHRlcnMv
V0tBcml0aG1ldGljRmlsdGVyLmNpa2VybmVsCTI4IE5vdiAyMDA1IDAzOjM3OjA2IC0wMDAwCkBA
IC0wLDAgKzEsNyBAQAora2VybmVsIHZlYzQgYXJpdGhtZXRpY0NvbXBvc2l0ZShzYW1wbGVyIGlu
MSwgc2FtcGxlciBpbjIsIGZsb2F0IGsxLCBmbG9hdCBrMiwgZmxvYXQgazMsIGZsb2F0IGs0KQor
eworICAgIHZlYzQgdmluMSA9IHNhbXBsZShpbjEsIHNhbXBsZXJDb29yZChpbjEpKTsKKyAgICB2
ZWM0IHZpbjIgPSBzYW1wbGUoaW4yLCBzYW1wbGVyQ29vcmQoaW4yKSk7CisgICAgdmVjNCByZXMg
PSBrMSp2aW4xKnZpbjIgKyBrMip2aW4xICsgazMqdmluMiArIHZlYzQoazQpOworICAgIHJldHVy
biByZXM7Cit9CkluZGV4OiBrY2FudmFzL2RldmljZS9xdWFydHovZGV2aWNlL3F1YXJ0ei9maWx0
ZXJzL1dLQXJpdGhtZXRpY0ZpbHRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtTnB1IGtjYW52YXMvZGV2
aWNlL3F1YXJ0ei9kZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tBcml0aG1ldGljRmlsdGVyLmgKLS0t
IGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9kZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tBcml0aG1ldGlj
RmlsdGVyLmgJMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMAorKysga2NhbnZhcy9kZXZpY2UvcXVh
cnR6L2RldmljZS9xdWFydHovZmlsdGVycy9XS0FyaXRobWV0aWNGaWx0ZXIuaAkyOCBOb3YgMjAw
NSAwMzowOToxNyAtMDAwMApAQCAtMCwwICsxLDM3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA1IE9saXZlciBIdW50IDxvamgxNkBzdHVkZW50LmNhbnRlcmJ1cnkuYWMubno+LiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVU
SE9SIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbXBvcnQgPFF1YXJ0ekNvcmUvQ29yZUltYWdlLmg+
CisKK0BpbnRlcmZhY2UgV0tBcml0aG1ldGljRmlsdGVyIDogQ0lGaWx0ZXIgeworICAgIENJSW1h
Z2UgICppbnB1dEltYWdlOworICAgIENJSW1hZ2UgICppbnB1dEJhY2tncm91bmRJbWFnZTsKKyAg
ICBOU051bWJlciAqaW5wdXRLMTsKKyAgICBOU051bWJlciAqaW5wdXRLMjsKKyAgICBOU051bWJl
ciAqaW5wdXRLMzsKKyAgICBOU051bWJlciAqaW5wdXRLNDsKK30KKworQGVuZApJbmRleDoga2Nh
bnZhcy9kZXZpY2UvcXVhcnR6L2RldmljZS9xdWFydHovZmlsdGVycy9XS0FyaXRobWV0aWNGaWx0
ZXIubQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09CmRpZmYgLU5wdSBrY2FudmFzL2RldmljZS9xdWFydHovZGV2aWNlL3F1
YXJ0ei9maWx0ZXJzL1dLQXJpdGhtZXRpY0ZpbHRlci5tCi0tLSBrY2FudmFzL2RldmljZS9xdWFy
dHovZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL1dLQXJpdGhtZXRpY0ZpbHRlci5tCTEgSmFuIDE5NzAg
MDA6MDA6MDAgLTAwMDAKKysrIGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9kZXZpY2UvcXVhcnR6L2Zp
bHRlcnMvV0tBcml0aG1ldGljRmlsdGVyLm0JMjggTm92IDIwMDUgMDM6MDk6MTcgLTAwMDAKQEAg
LTAsMCArMSw5MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBPbGl2ZXIgSHVudCA8b2po
MTZAc3R1ZGVudC5jYW50ZXJidXJ5LmFjLm56Pi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaW1wb3J0ICJXS0FyaXRobWV0aWNGaWx0ZXIuaCIKKworc3RhdGljIENJS2VybmVsICph
cml0aG1ldGljRmlsdGVyID0gbmlsOworCitAaW1wbGVtZW50YXRpb24gV0tBcml0aG1ldGljRmls
dGVyCisrICh2b2lkKWluaXRpYWxpemUKK3sKKyAgICBbQ0lGaWx0ZXIgcmVnaXN0ZXJGaWx0ZXJO
YW1lOkAiV0tBcml0aG1ldGljRmlsdGVyIiAgCisgICAgICAgICAgICAgICAgICAgICBjb25zdHJ1
Y3Rvcjogc2VsZgorICAgICAgICAgICAgICAgICBjbGFzc0F0dHJpYnV0ZXM6IFtOU0RpY3Rpb25h
cnkgZGljdGlvbmFyeVdpdGhPYmplY3RzQW5kS2V5czoKKyAgICAgICAgICAgICAgICAgICAgIEAi
V2ViS2l0IEFyaXRobWV0aWMgRmlsdGVyIiwga0NJQXR0cmlidXRlRmlsdGVyRGlzcGxheU5hbWUs
CisgICAgICAgICAgICAgICAgICAgICBbTlNBcnJheSBhcnJheVdpdGhPYmplY3RzOiBrQ0lDYXRl
Z29yeVN0eWxpemUsIGtDSUNhdGVnb3J5VmlkZW8sCisgICAgICAgICAgICAgICAgICAgICAgICAg
a0NJQ2F0ZWdvcnlTdGlsbEltYWdlLCBrQ0lDYXRlZ29yeU5vblNxdWFyZVBpeGVscyxuaWxdLCBr
Q0lBdHRyaWJ1dGVGaWx0ZXJDYXRlZ29yaWVzLAorICAgICAgICAgICAgICAgICAgICAgW05TRGlj
dGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVjdHNBbmRLZXlzOgorICAgICAgICAgICAgICAgICAg
ICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoRG91YmxlOjAuMF0sIGtDSUF0dHJpYnV0ZU1pbiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aERvdWJsZTowLjBd
LCBrQ0lBdHRyaWJ1dGVEZWZhdWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgIFtOU051bWJl
ciBudW1iZXJXaXRoRG91YmxlOjEuMF0sIGtDSUF0dHJpYnV0ZUlkZW50aXR5LAorICAgICAgICAg
ICAgICAgICAgICAgICAgIGtDSUF0dHJpYnV0ZVR5cGVTY2FsYXIsIGtDSUF0dHJpYnV0ZVR5cGUs
CisgICAgICAgICAgICAgICAgICAgICAgICAgbmlsXSwgQCJpbnB1dEsxIiwgICAgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgICAgICBbTlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnlXaXRo
T2JqZWN0c0FuZEtleXM6CisgICAgICAgICAgICAgICAgICAgICAgICAgW05TTnVtYmVyIG51bWJl
cldpdGhEb3VibGU6MC4wXSwga0NJQXR0cmlidXRlTWluLAorICAgICAgICAgICAgICAgICAgICAg
ICAgIFtOU051bWJlciBudW1iZXJXaXRoRG91YmxlOjAuMF0sIGtDSUF0dHJpYnV0ZURlZmF1bHQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhEb3VibGU6MS4w
XSwga0NJQXR0cmlidXRlSWRlbnRpdHksCisgICAgICAgICAgICAgICAgICAgICAgICAga0NJQXR0
cmlidXRlVHlwZVNjYWxhciwga0NJQXR0cmlidXRlVHlwZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICBuaWxdLCBAImlucHV0SzIiLCAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAg
ICBbTlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnlXaXRoT2JqZWN0c0FuZEtleXM6CisgICAgICAgICAg
ICAgICAgICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhEb3VibGU6MC4wXSwga0NJQXR0cmli
dXRlTWluLAorICAgICAgICAgICAgICAgICAgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoRG91
YmxlOjAuMF0sIGtDSUF0dHJpYnV0ZURlZmF1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
W05TTnVtYmVyIG51bWJlcldpdGhEb3VibGU6MS4wXSwga0NJQXR0cmlidXRlSWRlbnRpdHksCisg
ICAgICAgICAgICAgICAgICAgICAgICAga0NJQXR0cmlidXRlVHlwZVNjYWxhciwga0NJQXR0cmli
dXRlVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBuaWxdLCBAImlucHV0SzMiLCAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICBbTlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnlX
aXRoT2JqZWN0c0FuZEtleXM6CisgICAgICAgICAgICAgICAgICAgICAgICAgW05TTnVtYmVyIG51
bWJlcldpdGhEb3VibGU6MC4wXSwga0NJQXR0cmlidXRlTWluLAorICAgICAgICAgICAgICAgICAg
ICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoRG91YmxlOjAuMF0sIGtDSUF0dHJpYnV0ZURlZmF1
bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhEb3VibGU6
MS4wXSwga0NJQXR0cmlidXRlSWRlbnRpdHksCisgICAgICAgICAgICAgICAgICAgICAgICAga0NJ
QXR0cmlidXRlVHlwZVNjYWxhciwga0NJQXR0cmlidXRlVHlwZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICBuaWxdLCBAImlucHV0SzQiLAorICAgICAgICAgICAgICAgICAgICAgbmlsXV07Cit9
CisKKysgKENJRmlsdGVyICopZmlsdGVyV2l0aE5hbWU6KE5TU3RyaW5nICopbmFtZQoreworICAg
IENJRmlsdGVyICpmaWx0ZXI7CisgICAgZmlsdGVyID0gW1tzZWxmIGFsbG9jXSBpbml0XTsKKyAg
ICByZXR1cm4gW2ZpbHRlciBhdXRvcmVsZWFzZV07Cit9CisKKy0gKGlkKWluaXQKK3sKKyAgICBp
ZiAoIWFyaXRobWV0aWNGaWx0ZXIpIHsKKyAgICAgICAgTlNCdW5kbGUgKmJ1bmRsZSA9IFtOU0J1
bmRsZSBidW5kbGVGb3JDbGFzczpbc2VsZiBjbGFzc11dOworICAgICAgICBOU1N0cmluZyAqa2Vy
bmVsRmlsZSA9IFtidW5kbGUgcGF0aEZvclJlc291cmNlOkAiV0tBcml0aG1ldGljRmlsdGVyIiBv
ZlR5cGU6QCJjaWtlcm5lbCJdOworICAgICAgICBOU1N0cmluZyAqY29kZSA9IFtOU1N0cmluZyBz
dHJpbmdXaXRoQ29udGVudHNPZkZpbGU6a2VybmVsRmlsZV07CisgICAgICAgIE5TQXJyYXkgKmtl
cm5lbHMgPSBbQ0lLZXJuZWwga2VybmVsc1dpdGhTdHJpbmc6Y29kZV07CisgICAgICAgIGFyaXRo
bWV0aWNGaWx0ZXIgPSBbW2tlcm5lbHMgb2JqZWN0QXRJbmRleDowXSByZXRhaW5dOworICAgIH0K
KyAgICByZXR1cm4gW3N1cGVyIGluaXRdOworfQorCistIChDSUltYWdlICopb3V0cHV0SW1hZ2UK
K3sKKyAgICByZXR1cm4gW3NlbGYgYXBwbHk6YXJpdGhtZXRpY0ZpbHRlciwgaW5wdXRJbWFnZSwg
aW5wdXRCYWNrZ3JvdW5kSW1hZ2UsIGlucHV0SzEsIGlucHV0SzIsIGlucHV0SzMsCisgICAgICAg
IGlucHV0SzQsIG5pbF07Cit9CisKK0BlbmQKSW5kZXg6IGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9k
ZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tDb252b2x2ZU1hdHJpeEZpbHRlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
ZGlmZiAtTnB1IGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9kZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tD
b252b2x2ZU1hdHJpeEZpbHRlci5oCi0tLSBrY2FudmFzL2RldmljZS9xdWFydHovZGV2aWNlL3F1
YXJ0ei9maWx0ZXJzL1dLQ29udm9sdmVNYXRyaXhGaWx0ZXIuaAkxIEphbiAxOTcwIDAwOjAwOjAw
IC0wMDAwCisrKyBrY2FudmFzL2RldmljZS9xdWFydHovZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL1dL
Q29udm9sdmVNYXRyaXhGaWx0ZXIuaAkxMSBOb3YgMjAwNSAyMzozNjowMCAtMDAwMApAQCAtMCww
ICsxLDM1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1IEFwcGxlIENvbXB1dGVyLCBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW1wb3J0IDxRdWFydHpDb3JlL0NvcmVJ
bWFnZS5oPgorCitAaW50ZXJmYWNlIFdLQ29udm9sdmVNYXRyaXhGaWx0ZXI6IENJRmlsdGVyCit7
CisgICAgQ0lJbWFnZSAgICppbnB1dEltYWdlOworICAgIENJSW1hZ2UgICAqaW5wdXRLZXJuZWxN
YXRyaXg7CisgICAgTlNOdW1iZXIgICppbnB1dERpdmlzb3I7CisgICAgTlNOdW1iZXIgICppbnB1
dEJpYXM7Cit9CitAZW5kCkluZGV4OiBrY2FudmFzL2RldmljZS9xdWFydHovZGV2aWNlL3F1YXJ0
ei9maWx0ZXJzL1dLQ29udm9sdmVNYXRyaXhGaWx0ZXIubQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CmRpZmYgLU5wdSBr
Y2FudmFzL2RldmljZS9xdWFydHovZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL1dLQ29udm9sdmVNYXRy
aXhGaWx0ZXIubQotLS0ga2NhbnZhcy9kZXZpY2UvcXVhcnR6L2RldmljZS9xdWFydHovZmlsdGVy
cy9XS0NvbnZvbHZlTWF0cml4RmlsdGVyLm0JMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMAorKysg
a2NhbnZhcy9kZXZpY2UvcXVhcnR6L2RldmljZS9xdWFydHovZmlsdGVycy9XS0NvbnZvbHZlTWF0
cml4RmlsdGVyLm0JMjAgTm92IDIwMDUgMTM6MDQ6MjEgLTAwMDAKQEAgLTAsMCArMSw5MyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2ltcG9ydCAiV0tDb252b2x2ZU1hdHJpeEZpbHRlci5oIgor
CitzdGF0aWMgQ0lLZXJuZWwgKmNvbnZvbHZlTWF0cml4S2VybmVsID0gbmlsOworCitAaW1wbGVt
ZW50YXRpb24gV0tDb252b2x2ZU1hdHJpeEZpbHRlcgorCisrICh2b2lkKWluaXRpYWxpemUKK3sK
KyAgICBbQ0lGaWx0ZXIgcmVnaXN0ZXJGaWx0ZXJOYW1lOkAiV0tDb252b2x2ZU1hdHJpeCIgIAor
ICAgICAgICBjb25zdHJ1Y3Rvcjogc2VsZgorICAgICAgICBjbGFzc0F0dHJpYnV0ZXM6IFtOU0Rp
Y3Rpb25hcnkgZGljdGlvbmFyeVdpdGhPYmplY3RzQW5kS2V5czoKKyAgICAgICAgIEAiV2ViS2l0
IENvbnZvbHZlIE1hdHJpeCIsIGtDSUF0dHJpYnV0ZUZpbHRlckRpc3BsYXlOYW1lLAorICAgICAg
ICBbTlNBcnJheSBhcnJheVdpdGhPYmplY3RzOiBrQ0lDYXRlZ29yeUJsdXIsIGtDSUNhdGVnb3J5
VmlkZW8sCisgICAgICAgICAgICBrQ0lDYXRlZ29yeVN0aWxsSW1hZ2UsIGtDSUNhdGVnb3J5Tm9u
U3F1YXJlUGl4ZWxzLG5pbF0sIGtDSUF0dHJpYnV0ZUZpbHRlckNhdGVnb3JpZXMsCisgICAgICAg
IFtOU0RpY3Rpb25hcnkgZGljdGlvbmFyeVdpdGhPYmplY3RzQW5kS2V5czoKKyAgICAgICAgICAg
IGtDSUF0dHJpYnV0ZVR5cGVHcmFkaWVudCwga0NJQXR0cmlidXRlVHlwZSwKKyAgICAgICAgICAg
IG5pbF0sIEAiaW5wdXRLZXJuZWxNYXRyaXgiLAorICAgICAgICBbTlNEaWN0aW9uYXJ5IGRpY3Rp
b25hcnlXaXRoT2JqZWN0c0FuZEtleXM6CisgICAgICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0
aERvdWJsZTowLjBdLCBrQ0lBdHRyaWJ1dGVNaW4sCisgICAgICAgICAgICBbTlNOdW1iZXIgbnVt
YmVyV2l0aERvdWJsZToxLjBdLCBrQ0lBdHRyaWJ1dGVEZWZhdWx0LAorICAgICAgICAgICAgW05T
TnVtYmVyIG51bWJlcldpdGhEb3VibGU6MS4wXSwga0NJQXR0cmlidXRlSWRlbnRpdHksCisgICAg
ICAgICAgICBrQ0lBdHRyaWJ1dGVUeXBlU2NhbGFyLCBrQ0lBdHRyaWJ1dGVUeXBlLAorICAgICAg
ICAgICAgbmlsXSwgQCJpbnB1dERpdmlzb3IiLAorICAgICAgICBbTlNEaWN0aW9uYXJ5IGRpY3Rp
b25hcnlXaXRoT2JqZWN0c0FuZEtleXM6CisgICAgICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0
aERvdWJsZTowLjBdLCBrQ0lBdHRyaWJ1dGVEZWZhdWx0LAorICAgICAgICAgICAgW05TTnVtYmVy
IG51bWJlcldpdGhEb3VibGU6MC4wXSwga0NJQXR0cmlidXRlSWRlbnRpdHksCisgICAgICAgICAg
ICBrQ0lBdHRyaWJ1dGVUeXBlU2NhbGFyLCBrQ0lBdHRyaWJ1dGVUeXBlLAorICAgICAgICAgICAg
bmlsXSwgQCJpbnB1dEJpYXMiLAorICAgICAgICBuaWxdXTsKK30KKworKyAoQ0lGaWx0ZXIgKilm
aWx0ZXJXaXRoTmFtZTooTlNTdHJpbmcgKiluYW1lCit7CisgICAgQ0lGaWx0ZXIgKmZpbHRlcjsK
KyAgICBmaWx0ZXIgPSBbW3NlbGYgYWxsb2NdIGluaXRdOworICAgIHJldHVybiBbZmlsdGVyIGF1
dG9yZWxlYXNlXTsKK30KKworLSAoaWQpaW5pdAoreworICAgIGlmICghY29udm9sdmVNYXRyaXhL
ZXJuZWwpIHsKKyAgICAgICAgTlNCdW5kbGUgKmJ1bmRsZSA9IFtOU0J1bmRsZSBidW5kbGVGb3JD
bGFzczpbc2VsZiBjbGFzc11dOworICAgICAgICBOU1N0cmluZyAqa2VybmVsRmlsZSA9IFtidW5k
bGUgcGF0aEZvclJlc291cmNlOkAiV0tDb252b2x2ZU1hdHJpeEZpbHRlciIgb2ZUeXBlOkAiY2lr
ZXJuZWwiXTsKKyAgICAgICAgTlNTdHJpbmcgKmNvZGUgPSBbTlNTdHJpbmcgc3RyaW5nV2l0aENv
bnRlbnRzT2ZGaWxlOmtlcm5lbEZpbGVdOworICAgICAgICBOU0FycmF5ICprZXJuZWxzID0gW0NJ
S2VybmVsIGtlcm5lbHNXaXRoU3RyaW5nOmNvZGVdOworICAgICAgICBjb252b2x2ZU1hdHJpeEtl
cm5lbCA9IFtba2VybmVscyBvYmplY3RBdEluZGV4OjBdIHJldGFpbl07CisgICAgfQorICAgIHJl
dHVybiBbc3VwZXIgaW5pdF07Cit9CisKKy0gKENJSW1hZ2UgKilvdXRwdXRJbWFnZQoreworICAg
IC8vIEZJWE1FLCBJIGRvbid0IHRoaW5rIHRoaXMgaXMgcmlnaHQgeWV0Li4uCisgICAgQ0lTYW1w
bGVyICppbWFnZSA9IFtDSVNhbXBsZXIgc2FtcGxlcldpdGhJbWFnZTppbnB1dEltYWdlXTsKKyAg
ICBDSVNhbXBsZXIgKmtlcm5lbE1hdHJpeCA9IFtDSVNhbXBsZXIgc2FtcGxlcldpdGhJbWFnZTpp
bnB1dEtlcm5lbE1hdHJpeF07CisgICAgcmV0dXJuIFtzZWxmIGFwcGx5OmNvbnZvbHZlTWF0cml4
S2VybmVsLCBpbWFnZSwga2VybmVsTWF0cml4LCBpbnB1dERpdmlzb3IsCisgICAgICAgIGlucHV0
Qmlhcywga0NJQXBwbHlPcHRpb25EZWZpbml0aW9uLCBbaW1hZ2UgZGVmaW5pdGlvbl0sIG5pbF07
Cit9CisKKy0gKENHUmVjdClyZWdpb25PZjooaW50KXNhbXBsZXJJbmRleCBkZXN0UmVjdDooQ0dS
ZWN0KXIKK3sKKyAgICAvLyBUaGlzIGlzIGdvbm5hIGJlIHNsb29vb3cuCisgICAgQ0dSZWN0IGV4
dGVudCA9IFtpbnB1dEtlcm5lbE1hdHJpeCBleHRlbnRdOworICAgIENHU2l6ZSBzaXplID0gZXh0
ZW50LnNpemU7CisgICAgcmV0dXJuIENHUmVjdEluc2V0KHIsIC0xICogc2l6ZS53aWR0aCwgLTEg
KiBzaXplLmhlaWdodCk7Cit9CisKK0BlbmQKSW5kZXg6IGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9k
ZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tEaWZmdXNlTGlnaHRpbmdGaWx0ZXIuY2lrZXJuZWwKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQpkaWZmIC1OcHUga2NhbnZhcy9kZXZpY2UvcXVhcnR6L2RldmljZS9xdWFydHovZmls
dGVycy9XS0RpZmZ1c2VMaWdodGluZ0ZpbHRlci5jaWtlcm5lbAotLS0ga2NhbnZhcy9kZXZpY2Uv
cXVhcnR6L2RldmljZS9xdWFydHovZmlsdGVycy9XS0RpZmZ1c2VMaWdodGluZ0ZpbHRlci5jaWtl
cm5lbAkxIEphbiAxOTcwIDAwOjAwOjAwIC0wMDAwCisrKyBrY2FudmFzL2RldmljZS9xdWFydHov
ZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL1dLRGlmZnVzZUxpZ2h0aW5nRmlsdGVyLmNpa2VybmVsCTI4
IE5vdiAyMDA1IDAzOjQ0OjI0IC0wMDAwCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDUgT2xpdmVyIEh1bnQgPG9qaDE2QHN0dWRlbnQuY2FudGVyYnVyeS5hYy5uej4u
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBBVVRIT1IgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKwora2VybmVsIHZlYzQgZGlmZnVzZUxpZ2h0aW5nKHNhbXBsZXIgaW5wdXROb3Jt
YWxWZWN0b3JzLCBzYW1wbGVyIGlucHV0TGlnaHRWZWN0b3JzLCBfX2NvbG9yIGlucHV0TGlnaHRp
bmdDb2xvciwgCisgICAgZmxvYXQgaW5wdXRTdXJmYWNlU2NhbGUsIGZsb2F0IGlucHV0RGlmZnVz
ZUNvbnN0YW50LCBmbG9hdCBpbnB1dEtlcm5lbExlbmd0aFgsCisgICAgZmxvYXQgaW5wdXRLZXJu
ZWxMZW5ndGhZKQoreworICAgIHZlYzIgcG9zPXNhbXBsZXJDb29yZChpbnB1dExpZ2h0VmVjdG9y
cyk7CisgICAgdmVjMiBwb3NuPXNhbXBsZXJDb29yZChpbnB1dE5vcm1hbFZlY3RvcnMpOworICAg
IHZlYzQgbDQgPSBzYW1wbGUoaW5wdXRMaWdodFZlY3RvcnMsIHBvcykueHl6OworICAgIHZlYzMg
bCA9IGw0Lnh5ejsKKyAgICBsLz1zcXJ0KGRvdChsLGwpKTsKKyAgICB2ZWMzIG4gPSBzYW1wbGUo
aW5wdXROb3JtYWxWZWN0b3JzLCBwb3NuKS54eXo7CisgICAgZmxvYXQgbmwgPSAoZG90KGwsIG4p
KTsKKyAgICB2ZWM0IHJlcyA9IHZlYzQoaW5wdXRMaWdodGluZ0NvbG9yLnIqbmwsIGlucHV0TGln
aHRpbmdDb2xvci5nKm5sLCBpbnB1dExpZ2h0aW5nQ29sb3IuYipubCwgMS4wKTsKKyAgICByZXMu
eHl6ICo9IGw0Lnc7CisgICAgcmV0dXJuIHJlczsKK30KSW5kZXg6IGtjYW52YXMvZGV2aWNlL3F1
YXJ0ei9kZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tEaWZmdXNlTGlnaHRpbmdGaWx0ZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09CmRpZmYgLU5wdSBrY2FudmFzL2RldmljZS9xdWFydHovZGV2aWNlL3F1YXJ0ei9maWx0
ZXJzL1dLRGlmZnVzZUxpZ2h0aW5nRmlsdGVyLmgKLS0tIGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9k
ZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tEaWZmdXNlTGlnaHRpbmdGaWx0ZXIuaAkxIEphbiAxOTcw
IDAwOjAwOjAwIC0wMDAwCisrKyBrY2FudmFzL2RldmljZS9xdWFydHovZGV2aWNlL3F1YXJ0ei9m
aWx0ZXJzL1dLRGlmZnVzZUxpZ2h0aW5nRmlsdGVyLmgJMTIgTm92IDIwMDUgMTA6MDA6MjAgLTAw
MDAKQEAgLTAsMCArMSwzNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBBcHBsZSBDb21w
dXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2ltcG9ydCA8UXVhcnR6
Q29yZS9Db3JlSW1hZ2UuaD4KKworQGludGVyZmFjZSBXS0RpZmZ1c2VMaWdodGluZ0ZpbHRlciA6
IENJRmlsdGVyIHsKKyAgICBDSUltYWdlICAqaW5wdXROb3JtYWxNYXA7CisgICAgQ0lJbWFnZSAg
KmlucHV0TGlnaHRWZWN0b3JzOworICAgIENJQ29sb3IgICppbnB1dExpZ2h0aW5nQ29sb3I7Cisg
ICAgTlNOdW1iZXIgKmlucHV0U3VyZmFjZVNjYWxlOworICAgIE5TTnVtYmVyICppbnB1dERpZmZ1
c2VDb25zdGFudDsKKyAgICBOU051bWJlciAqaW5wdXRLZXJuZWxVbml0TGVuZ3RoWDsKKyAgICBO
U051bWJlciAqaW5wdXRLZXJuZWxVbml0TGVuZ3RoWTsKK30KK0BlbmQKSW5kZXg6IGtjYW52YXMv
ZGV2aWNlL3F1YXJ0ei9kZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tEaWZmdXNlTGlnaHRpbmdGaWx0
ZXIubQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09CmRpZmYgLU5wdSBrY2FudmFzL2RldmljZS9xdWFydHovZGV2aWNlL3F1
YXJ0ei9maWx0ZXJzL1dLRGlmZnVzZUxpZ2h0aW5nRmlsdGVyLm0KLS0tIGtjYW52YXMvZGV2aWNl
L3F1YXJ0ei9kZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tEaWZmdXNlTGlnaHRpbmdGaWx0ZXIubQkx
IEphbiAxOTcwIDAwOjAwOjAwIC0wMDAwCisrKyBrY2FudmFzL2RldmljZS9xdWFydHovZGV2aWNl
L3F1YXJ0ei9maWx0ZXJzL1dLRGlmZnVzZUxpZ2h0aW5nRmlsdGVyLm0JMjggTm92IDIwMDUgMDI6
NDQ6NTggLTAwMDAKQEAgLTAsMCArMSw5OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBB
cHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2ltcG9y
dCAiV0tEaWZmdXNlTGlnaHRpbmdGaWx0ZXIuaCIKKyNpbXBvcnQgPHN0ZGlvLmg+CisKK3N0YXRp
YyBDSUtlcm5lbCAqZGlmZnVzZUxpZ2h0aW5nRmlsdGVyID0gbmlsOworc3RhdGljIEJPT0wgICAg
IGRpZmZ1c2VMaWdodGluZ0ZpbHRlckluaXRpYWxpc2VkID0gTk87CitAaW1wbGVtZW50YXRpb24g
V0tEaWZmdXNlTGlnaHRpbmdGaWx0ZXIKKworKyAodm9pZClpbml0aWFsaXplCit7CisgICAgW0NJ
RmlsdGVyIHJlZ2lzdGVyRmlsdGVyTmFtZTpAIldLRGlmZnVzZUxpZ2h0aW5nIiAgCisgICAgICAg
Y29uc3RydWN0b3I6c2VsZgorICAgICAgIGNsYXNzQXR0cmlidXRlczpbTlNEaWN0aW9uYXJ5IGRp
Y3Rpb25hcnlXaXRoT2JqZWN0c0FuZEtleXM6CisgICAgICAgICAgIEAiV2ViS2l0IERpZmZ1c2Ug
TGlnaHRpbmciLCBrQ0lBdHRyaWJ1dGVGaWx0ZXJEaXNwbGF5TmFtZSwKKyAgICAgICAgICAgW05T
QXJyYXkgYXJyYXlXaXRoT2JqZWN0czoga0NJQ2F0ZWdvcnlTdHlsaXplLCBrQ0lDYXRlZ29yeVZp
ZGVvLAorICAgICAgICAgICAgICAga0NJQ2F0ZWdvcnlTdGlsbEltYWdlLCBrQ0lDYXRlZ29yeU5v
blNxdWFyZVBpeGVscyxuaWxdLCBrQ0lBdHRyaWJ1dGVGaWx0ZXJDYXRlZ29yaWVzLAorICAgICAg
ICAgICBbTlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnlXaXRoT2JqZWN0c0FuZEtleXM6CisgICAgICAg
ICAgICAgICBbQ0lDb2xvciBjb2xvcldpdGhSZWQ6MS4wIGdyZWVuOjEuMCBibHVlOjEuMCBhbHBo
YToxLjBdLAorICAgICAgICAgICAgICAga0NJQXR0cmlidXRlRGVmYXVsdCwgbmlsXSwgQCJpbnB1
dExpZ2h0aW5nQ29sb3IiLAorICAgICAgICAgICBbTlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnlXaXRo
T2JqZWN0c0FuZEtleXM6CisgICAgICAgICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aERvdWJs
ZTowLjBdLCBrQ0lBdHRyaWJ1dGVNaW4sCisgICAgICAgICAgICAgICBbTlNOdW1iZXIgbnVtYmVy
V2l0aERvdWJsZToxLjBdLCBrQ0lBdHRyaWJ1dGVEZWZhdWx0LAorICAgICAgICAgICAgICAgW05T
TnVtYmVyIG51bWJlcldpdGhEb3VibGU6MS4wXSwga0NJQXR0cmlidXRlSWRlbnRpdHksCisgICAg
ICAgICAgICAgICBrQ0lBdHRyaWJ1dGVUeXBlU2NhbGFyLCBrQ0lBdHRyaWJ1dGVUeXBlLAorICAg
ICAgICAgICAgICAgbmlsXSwgQCJpbnB1dFN1cmZhY2VTY2FsZSIsCisgICAgICAgICAgIFtOU0Rp
Y3Rpb25hcnkgZGljdGlvbmFyeVdpdGhPYmplY3RzQW5kS2V5czoKKyAgICAgICAgICAgICAgIFtO
U051bWJlciBudW1iZXJXaXRoRG91YmxlOjAuMF0sIGtDSUF0dHJpYnV0ZU1pbiwKKyAgICAgICAg
ICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoRG91YmxlOjEuMF0sIGtDSUF0dHJpYnV0ZURlZmF1
bHQsCisgICAgICAgICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aERvdWJsZToxLjBdLCBrQ0lB
dHRyaWJ1dGVJZGVudGl0eSwKKyAgICAgICAgICAgICAgIGtDSUF0dHJpYnV0ZVR5cGVTY2FsYXIs
IGtDSUF0dHJpYnV0ZVR5cGUsCisgICAgICAgICAgICAgICBuaWxdLCBAImlucHV0RGlmZnVzZUNv
bnN0YW50IiwKKyAgICAgICAgICAgW05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVjdHNB
bmRLZXlzOgorICAgICAgICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhEb3VibGU6MC4wXSwg
a0NJQXR0cmlidXRlTWluLAorICAgICAgICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhEb3Vi
bGU6MS4wXSwga0NJQXR0cmlidXRlRGVmYXVsdCwKKyAgICAgICAgICAgICAgIFtOU051bWJlciBu
dW1iZXJXaXRoRG91YmxlOjEuMF0sIGtDSUF0dHJpYnV0ZUlkZW50aXR5LAorICAgICAgICAgICAg
ICAga0NJQXR0cmlidXRlVHlwZVNjYWxhciwga0NJQXR0cmlidXRlVHlwZSwKKyAgICAgICAgICAg
ICAgIG5pbF0sIEAiaW5wdXRLZXJuZWxVbml0TGVuZ3RoWCIsCisgICAgICAgICAgIFtOU0RpY3Rp
b25hcnkgZGljdGlvbmFyeVdpdGhPYmplY3RzQW5kS2V5czoKKyAgICAgICAgICAgICAgIFtOU051
bWJlciBudW1iZXJXaXRoRG91YmxlOjAuMF0sIGtDSUF0dHJpYnV0ZU1pbiwKKyAgICAgICAgICAg
ICAgIFtOU051bWJlciBudW1iZXJXaXRoRG91YmxlOjEuMF0sIGtDSUF0dHJpYnV0ZURlZmF1bHQs
CisgICAgICAgICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aERvdWJsZToxLjBdLCBrQ0lBdHRy
aWJ1dGVJZGVudGl0eSwKKyAgICAgICAgICAgICAgIGtDSUF0dHJpYnV0ZVR5cGVTY2FsYXIsIGtD
SUF0dHJpYnV0ZVR5cGUsCisgICAgICAgICAgICAgICBuaWxdLCBAImlucHV0S2VybmVsVW5pdExl
bmd0aFkiLAorICAgICAgICAgICBuaWxdXTsKKyAgICBkaWZmdXNlTGlnaHRpbmdGaWx0ZXJJbml0
aWFsaXNlZCA9IFlFUzsKK30KKworKyAoQ0lGaWx0ZXIgKilmaWx0ZXJXaXRoTmFtZTooTlNTdHJp
bmcgKiluYW1lCit7CisgICAgQ0lGaWx0ZXIgKmZpbHRlcjsKKyAgICBmaWx0ZXIgPSBbW3NlbGYg
YWxsb2NdIGluaXRdOworICAgIHJldHVybiBbZmlsdGVyIGF1dG9yZWxlYXNlXTsKK30KKworLSAo
aWQpaW5pdAoreworICAgIGlmICghZGlmZnVzZUxpZ2h0aW5nRmlsdGVyKSB7CisgICAgICAgIE5T
QnVuZGxlICpidW5kbGUgPSBbTlNCdW5kbGUgYnVuZGxlRm9yQ2xhc3M6W3NlbGYgY2xhc3NdXTsK
KyAgICAgICAgTlNTdHJpbmcgKmtlcm5lbEZpbGUgPSBbYnVuZGxlIHBhdGhGb3JSZXNvdXJjZTpA
IldLRGlmZnVzZUxpZ2h0aW5nRmlsdGVyIiBvZlR5cGU6QCJjaWtlcm5lbCJdOworICAgICAgICBO
U1N0cmluZyAqY29kZSA9IFtOU1N0cmluZyBzdHJpbmdXaXRoQ29udGVudHNPZkZpbGU6a2VybmVs
RmlsZV07CisgICAgICAgIE5TQXJyYXkgKmtlcm5lbHMgPSBbQ0lLZXJuZWwga2VybmVsc1dpdGhT
dHJpbmc6Y29kZV07CisgICAgICAgIGRpZmZ1c2VMaWdodGluZ0ZpbHRlciA9IFtba2VybmVscyBv
YmplY3RBdEluZGV4OjBdIHJldGFpbl07CisgICAgfQorICAgIHJldHVybiBbc3VwZXIgaW5pdF07
Cit9CisKKy0gKENJSW1hZ2UgKilvdXRwdXRJbWFnZQoreworICAgIENJU2FtcGxlciAqc3JjID0g
W0NJU2FtcGxlciBzYW1wbGVyV2l0aEltYWdlOiBpbnB1dE5vcm1hbE1hcF07CisgICAgQ0lTYW1w
bGVyICpsaWdodFNyYyA9IFtDSVNhbXBsZXIgc2FtcGxlcldpdGhJbWFnZTogaW5wdXRMaWdodFZl
Y3RvcnNdOworICAgIHJldHVybiBbc2VsZiBhcHBseTpkaWZmdXNlTGlnaHRpbmdGaWx0ZXIsIHNy
YywgbGlnaHRTcmMsIGlucHV0TGlnaHRpbmdDb2xvciwgaW5wdXRTdXJmYWNlU2NhbGUsIGlucHV0
RGlmZnVzZUNvbnN0YW50LAorICAgICAgICBpbnB1dEtlcm5lbFVuaXRMZW5ndGhYLCBpbnB1dEtl
cm5lbFVuaXRMZW5ndGhZLCBuaWxdOworfQorCitAZW5kCkluZGV4OiBrY2FudmFzL2RldmljZS9x
dWFydHovZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL1dLRGlzdGFudExpZ2h0RmlsdGVyLmNpa2VybmVs
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KZGlmZiAtTnB1IGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9kZXZpY2UvcXVhcnR6
L2ZpbHRlcnMvV0tEaXN0YW50TGlnaHRGaWx0ZXIuY2lrZXJuZWwKLS0tIGtjYW52YXMvZGV2aWNl
L3F1YXJ0ei9kZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tEaXN0YW50TGlnaHRGaWx0ZXIuY2lrZXJu
ZWwJMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMAorKysga2NhbnZhcy9kZXZpY2UvcXVhcnR6L2Rl
dmljZS9xdWFydHovZmlsdGVycy9XS0Rpc3RhbnRMaWdodEZpbHRlci5jaWtlcm5lbAkyOCBOb3Yg
MjAwNSAwMzozNzowNiAtMDAwMApAQCAtMCwwICsxLDQgQEAKK2tlcm5lbCB2ZWM0IGRpc3RhbnRM
aWdodEdlbmVyYXRvcihzYW1wbGVyIGltYWdlLCB2ZWMzIGRpcmVjdGlvbikKK3sKKyAgICByZXR1
cm4gdmVjNChkaXJlY3Rpb24ueCwgZGlyZWN0aW9uLnksIGRpcmVjdGlvbi56LCAxLjApOworfQpJ
bmRleDoga2NhbnZhcy9kZXZpY2UvcXVhcnR6L2RldmljZS9xdWFydHovZmlsdGVycy9XS0Rpc3Rh
bnRMaWdodEZpbHRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtTnB1IGtjYW52YXMvZGV2aWNlL3F1YXJ0
ei9kZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tEaXN0YW50TGlnaHRGaWx0ZXIuaAotLS0ga2NhbnZh
cy9kZXZpY2UvcXVhcnR6L2RldmljZS9xdWFydHovZmlsdGVycy9XS0Rpc3RhbnRMaWdodEZpbHRl
ci5oCTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAKKysrIGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9k
ZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tEaXN0YW50TGlnaHRGaWx0ZXIuaAkxMyBOb3YgMjAwNSAx
MDo1NzoxOCAtMDAwMApAQCAtMCwwICsxLDMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1
IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW1w
b3J0IDxRdWFydHpDb3JlL0NvcmVJbWFnZS5oPgorCitAaW50ZXJmYWNlIFdLRGlzdGFudExpZ2h0
RmlsdGVyIDogQ0lGaWx0ZXIgeworICAgIENJSW1hZ2UgICogaW5wdXROb3JtYWxNYXA7CisgICAg
Q0lWZWN0b3IgKiBpbnB1dExpZ2h0RGlyZWN0aW9uOworfQorQGVuZApJbmRleDoga2NhbnZhcy9k
ZXZpY2UvcXVhcnR6L2RldmljZS9xdWFydHovZmlsdGVycy9XS0Rpc3RhbnRMaWdodEZpbHRlci5t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KZGlmZiAtTnB1IGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9kZXZpY2UvcXVhcnR6
L2ZpbHRlcnMvV0tEaXN0YW50TGlnaHRGaWx0ZXIubQotLS0ga2NhbnZhcy9kZXZpY2UvcXVhcnR6
L2RldmljZS9xdWFydHovZmlsdGVycy9XS0Rpc3RhbnRMaWdodEZpbHRlci5tCTEgSmFuIDE5NzAg
MDA6MDA6MDAgLTAwMDAKKysrIGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9kZXZpY2UvcXVhcnR6L2Zp
bHRlcnMvV0tEaXN0YW50TGlnaHRGaWx0ZXIubQkyMCBOb3YgMjAwNSAxMzowNDoyMiAtMDAwMApA
QCAtMCwwICsxLDcwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1IEFwcGxlIENvbXB1dGVy
LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworIAorI2ltcG9ydCAiV0tEaXN0YW50
TGlnaHRGaWx0ZXIuaCIKKworc3RhdGljIENJS2VybmVsICpkaXN0YW50TGlnaHRGaWx0ZXIgPSBu
aWw7CisKK0BpbXBsZW1lbnRhdGlvbiBXS0Rpc3RhbnRMaWdodEZpbHRlcgorCisrICh2b2lkKWlu
aXRpYWxpemUKK3sKKyAgICBbQ0lGaWx0ZXIgcmVnaXN0ZXJGaWx0ZXJOYW1lOkAiV0tEaXN0YW50
TGlnaHQiCisgICAgICAgIGNvbnN0cnVjdG9yOiBzZWxmCisgICAgICAgIGNsYXNzQXR0cmlidXRl
czogW05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVjdHNBbmRLZXlzOgorICAgICAgICAg
QCJXZWJLaXQgRGlzdGFudCBMaWdodCIsIGtDSUF0dHJpYnV0ZUZpbHRlckRpc3BsYXlOYW1lLAor
ICAgICAgICBbTlNBcnJheSBhcnJheVdpdGhPYmplY3RzOiBrQ0lDYXRlZ29yeVN0eWxpemUsIGtD
SUNhdGVnb3J5VmlkZW8sCisgICAgICAgICAgICBrQ0lDYXRlZ29yeVN0aWxsSW1hZ2UsIGtDSUNh
dGVnb3J5Tm9uU3F1YXJlUGl4ZWxzLG5pbF0sIGtDSUF0dHJpYnV0ZUZpbHRlckNhdGVnb3JpZXMs
CisgICAgICAgICAgICBbTlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnlXaXRoT2JqZWN0c0FuZEtleXM6
CisgICAgICAgICAgICAgICAga0NJQXR0cmlidXRlVHlwZVBvc2l0aW9uMywga0NJQXR0cmlidXRl
VHlwZSwKKyAgICAgICAgICAgICAgICBuaWxdLCBAImlucHV0TGlnaHREaXJlY3Rpb24iLAorICAg
ICAgICBuaWxdXTsKK30KKworKyAoQ0lGaWx0ZXIgKilmaWx0ZXJXaXRoTmFtZTooTlNTdHJpbmcg
KiluYW1lCit7CisgICAgQ0lGaWx0ZXIgKmZpbHRlcjsKKyAgICBmaWx0ZXIgPSBbW3NlbGYgYWxs
b2NdIGluaXRdOworICAgIHJldHVybiBbZmlsdGVyIGF1dG9yZWxlYXNlXTsKK30KKworLSAoaWQp
aW5pdAoreworICAgIGlmICghZGlzdGFudExpZ2h0RmlsdGVyKSB7CisgICAgICAgIE5TQnVuZGxl
ICpidW5kbGUgPSBbTlNCdW5kbGUgYnVuZGxlRm9yQ2xhc3M6W3NlbGYgY2xhc3NdXTsKKyAgICAg
ICAgTlNTdHJpbmcgKmtlcm5lbEZpbGUgPSBbYnVuZGxlIHBhdGhGb3JSZXNvdXJjZTpAIldLRGlz
dGFudExpZ2h0RmlsdGVyIiBvZlR5cGU6QCJjaWtlcm5lbCJdOworICAgICAgICBOU1N0cmluZyAq
Y29kZSA9IFtOU1N0cmluZyBzdHJpbmdXaXRoQ29udGVudHNPZkZpbGU6a2VybmVsRmlsZV07Cisg
ICAgICAgIE5TQXJyYXkgKmtlcm5lbHMgPSBbQ0lLZXJuZWwga2VybmVsc1dpdGhTdHJpbmc6Y29k
ZV07CisgICAgICAgIGRpc3RhbnRMaWdodEZpbHRlciA9IFtba2VybmVscyBvYmplY3RBdEluZGV4
OjBdIHJldGFpbl07CisgICAgfQorICAgIHJldHVybiBbc3VwZXIgaW5pdF07Cit9CisKKy0gKENJ
SW1hZ2UgKilvdXRwdXRJbWFnZQoreworICAgIHJldHVybiBbc2VsZiBhcHBseTpkaXN0YW50TGln
aHRGaWx0ZXIsIFtDSVNhbXBsZXIgc2FtcGxlcldpdGhJbWFnZTppbnB1dE5vcm1hbE1hcF0sIGlu
cHV0TGlnaHREaXJlY3Rpb24sIG5pbF07Cit9CisKK0BlbmQKSW5kZXg6IGtjYW52YXMvZGV2aWNl
L3F1YXJ0ei9kZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tOb3JtYWxNYXBGaWx0ZXIuY2lrZXJuZWwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQpkaWZmIC1OcHUga2NhbnZhcy9kZXZpY2UvcXVhcnR6L2RldmljZS9xdWFydHov
ZmlsdGVycy9XS05vcm1hbE1hcEZpbHRlci5jaWtlcm5lbAotLS0ga2NhbnZhcy9kZXZpY2UvcXVh
cnR6L2RldmljZS9xdWFydHovZmlsdGVycy9XS05vcm1hbE1hcEZpbHRlci5jaWtlcm5lbAkxIEph
biAxOTcwIDAwOjAwOjAwIC0wMDAwCisrKyBrY2FudmFzL2RldmljZS9xdWFydHovZGV2aWNlL3F1
YXJ0ei9maWx0ZXJzL1dLTm9ybWFsTWFwRmlsdGVyLmNpa2VybmVsCTI4IE5vdiAyMDA1IDAzOjQ0
OjI0IC0wMDAwCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgT2xp
dmVyIEh1bnQgPG9qaDE2QHN0dWRlbnQuY2FudGVyYnVyeS5hYy5uej4uICBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKyAKK2tl
cm5lbCB2ZWM0IGNvbnZvbHZlM3gzKHNhbXBsZXIgaW1hZ2UsICBmbG9hdCBkaXZpc29yLCBmbG9h
dCBiaWFzLAorCQkJdmVjMyBtMCwgdmVjMyBtMSwgdmVjMyBtMiApCit7CisgICAgdmVjNCBjb2xv
dXI9dmVjNCgwLjAsIDAuMCwgMC4wLCAwLjApOworICAgIHZlYzIgcG9zPXNhbXBsZXJDb29yZChp
bWFnZSk7CisgICAgY29sb3VyPXNhbXBsZShpbWFnZSwgcG9zK3ZlYzIoLTEsLTEpKSptMC54Owor
ICAgIGNvbG91cis9c2FtcGxlKGltYWdlLCBwb3MrdmVjMigtMSwgMC4wKSkqbTAueTsKKyAgICBj
b2xvdXIrPXNhbXBsZShpbWFnZSwgcG9zK3ZlYzIoLTEsIDEpKSptMC56OworICAgIGNvbG91cis9
c2FtcGxlKGltYWdlLCBwb3MrdmVjMigwLC0xKSkqbTEueDsKKyAgICBjb2xvdXIrPXNhbXBsZShp
bWFnZSwgcG9zKSptMS55OworICAgIGNvbG91cis9c2FtcGxlKGltYWdlLCBwb3MrdmVjMigwLCAx
LjApKSptMS56OworICAgIGNvbG91cis9c2FtcGxlKGltYWdlLCBwb3MrdmVjMigxLC0xKSkqbTIu
eDsKKyAgICBjb2xvdXIrPXNhbXBsZShpbWFnZSwgcG9zK3ZlYzIoMSwgMC4wKSkqbTIueTsKKyAg
ICBjb2xvdXIrPXNhbXBsZShpbWFnZSwgcG9zK3ZlYzIoMSwgMSkpKm0yLno7CisgICAgcmV0dXJu
ICgoKGNvbG91ci9kaXZpc29yKStiaWFzKSk7Cit9CisKK2tlcm5lbCB2ZWM0IG1lcmdlTm9ybWFs
cyhzYW1wbGVyIE54LCBzYW1wbGVyIE55LCBzYW1wbGVyIHNyYywgZmxvYXQgc3VyZmFjZVNjYWxl
KQoreworICAgIHZlYzMgTj12ZWMzKHN1cmZhY2VTY2FsZSpzYW1wbGUoTngsIHNhbXBsZXJDb29y
ZChOeCkpLmEsIC1zdXJmYWNlU2NhbGUqc2FtcGxlKE55LCBzYW1wbGVyQ29vcmQoTnkpKS5hLCAx
LjAsIDAuMCk7CisgICAgTiA9IE4vc3FydChkb3QoTixOKSk7CisgICAgcmV0dXJuIHZlYzQoTi54
LCBOLnksIE4ueiwgc2FtcGxlKHNyYywgc2FtcGxlckNvb3JkKHNyYykpLmEpOworfQpJbmRleDog
a2NhbnZhcy9kZXZpY2UvcXVhcnR6L2RldmljZS9xdWFydHovZmlsdGVycy9XS05vcm1hbE1hcEZp
bHRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KZGlmZiAtTnB1IGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9kZXZpY2Uv
cXVhcnR6L2ZpbHRlcnMvV0tOb3JtYWxNYXBGaWx0ZXIuaAotLS0ga2NhbnZhcy9kZXZpY2UvcXVh
cnR6L2RldmljZS9xdWFydHovZmlsdGVycy9XS05vcm1hbE1hcEZpbHRlci5oCTEgSmFuIDE5NzAg
MDA6MDA6MDAgLTAwMDAKKysrIGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9kZXZpY2UvcXVhcnR6L2Zp
bHRlcnMvV0tOb3JtYWxNYXBGaWx0ZXIuaAkyOCBOb3YgMjAwNSAwMjo0NDo1OCAtMDAwMApAQCAt
MCwwICsxLDMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1IEFwcGxlIENvbXB1dGVyLCBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW1wb3J0IDxRdWFydHpDb3JlL0Nv
cmVJbWFnZS5oPgorLy9UT0RPOiBXZSBjdXJyZW50bHkgaWdub3JlIHRoZSBpbnB1dCBrZXJuZWwg
bGVuZ3RocworQGludGVyZmFjZSBXS05vcm1hbE1hcEZpbHRlciA6IENJRmlsdGVyIHsKKyAgICBD
SUltYWdlICppbnB1dEltYWdlOworICAgIE5TTnVtYmVyICppbnB1dFN1cmZhY2VTY2FsZTsKK30K
K0BlbmQKSW5kZXg6IGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9kZXZpY2UvcXVhcnR6L2ZpbHRlcnMv
V0tOb3JtYWxNYXBGaWx0ZXIubQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CmRpZmYgLU5wdSBrY2FudmFzL2RldmljZS9x
dWFydHovZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL1dLTm9ybWFsTWFwRmlsdGVyLm0KLS0tIGtjYW52
YXMvZGV2aWNlL3F1YXJ0ei9kZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tOb3JtYWxNYXBGaWx0ZXIu
bQkxIEphbiAxOTcwIDAwOjAwOjAwIC0wMDAwCisrKyBrY2FudmFzL2RldmljZS9xdWFydHovZGV2
aWNlL3F1YXJ0ei9maWx0ZXJzL1dLTm9ybWFsTWFwRmlsdGVyLm0JMjAgTm92IDIwMDUgMTM6MDQ6
MjIgLTAwMDAKQEAgLTAsMCArMSwxMDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgQXBw
bGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbXBvcnQg
IldLTm9ybWFsTWFwRmlsdGVyLmgiCisKK3N0YXRpYyBDSUtlcm5lbCAqY29udm9sdmVLZXJuZWwg
PSBuaWw7CitzdGF0aWMgQ0lLZXJuZWwgKm5vcm1hbE1hcEtlcm5lbCA9IG5pbDsKKworQGltcGxl
bWVudGF0aW9uIFdLTm9ybWFsTWFwRmlsdGVyCisKKysgKHZvaWQpaW5pdGlhbGl6ZQoreworICAg
IFtDSUZpbHRlciByZWdpc3RlckZpbHRlck5hbWU6QCJXS05vcm1hbE1hcCIKKyAgICAgICAgY29u
c3RydWN0b3I6c2VsZgorICAgICAgICBjbGFzc0F0dHJpYnV0ZXM6W05TRGljdGlvbmFyeSBkaWN0
aW9uYXJ5V2l0aE9iamVjdHNBbmRLZXlzOgorICAgICAgICAgICAgQCJXZWJLaXQgTm9ybWFsIE1h
cCIsIGtDSUF0dHJpYnV0ZUZpbHRlckRpc3BsYXlOYW1lLAorICAgICAgICAgICAgW05TQXJyYXkg
YXJyYXlXaXRoT2JqZWN0czoga0NJQ2F0ZWdvcnlCbHVyLCBrQ0lDYXRlZ29yeVZpZGVvLAorICAg
ICAgICAgICAgICAgIGtDSUNhdGVnb3J5U3RpbGxJbWFnZSwga0NJQ2F0ZWdvcnlOb25TcXVhcmVQ
aXhlbHMsIG5pbF0sIGtDSUF0dHJpYnV0ZUZpbHRlckNhdGVnb3JpZXMsICAgICAgIAorICAgICAg
ICAgICAgW05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVjdHNBbmRLZXlzOgorICAgICAg
ICAgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoRG91YmxlOjAuMF0sIGtDSUF0dHJpYnV0ZU1p
biwKKyAgICAgICAgICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aERvdWJsZToxLjBdLCBrQ0lB
dHRyaWJ1dGVEZWZhdWx0LAorICAgICAgICAgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoRG91
YmxlOjEuMF0sIGtDSUF0dHJpYnV0ZUlkZW50aXR5LAorICAgICAgICAgICAgICAgIGtDSUF0dHJp
YnV0ZVR5cGVTY2FsYXIsIGtDSUF0dHJpYnV0ZVR5cGUsCisgICAgICAgICAgICAgICAgbmlsXSwg
QCJpbnB1dFN1cmZhY2VTY2FsZSIsCisgICAgICAgICAgICBuaWxdXTsKK30KKworKyAoQ0lGaWx0
ZXIgKilmaWx0ZXJXaXRoTmFtZTooTlNTdHJpbmcgKiluYW1lCit7CisgICAgQ0lGaWx0ZXIgKmZp
bHRlcjsKKyAgICBmaWx0ZXIgPSBbW3NlbGYgYWxsb2NdIGluaXRdOworICAgIHJldHVybiBbZmls
dGVyIGF1dG9yZWxlYXNlXTsKK30KKworLSAoaWQpaW5pdAoreworICAgIGlmICghbm9ybWFsTWFw
S2VybmVsKSB7CisgICAgICAgIE5TQnVuZGxlICpidW5kbGUgPSBbTlNCdW5kbGUgYnVuZGxlRm9y
Q2xhc3M6W3NlbGYgY2xhc3NdXTsKKyAgICAgICAgTlNTdHJpbmcgKmtlcm5lbEZpbGUgPSBbYnVu
ZGxlIHBhdGhGb3JSZXNvdXJjZTpAIldLTm9ybWFsTWFwRmlsdGVyIiBvZlR5cGU6QCJjaWtlcm5l
bCJdOworICAgICAgICBOU1N0cmluZyAqY29kZSA9IFtOU1N0cmluZyBzdHJpbmdXaXRoQ29udGVu
dHNPZkZpbGU6a2VybmVsRmlsZV07CisgICAgICAgIE5TQXJyYXkgKmtlcm5lbHMgPSBbQ0lLZXJu
ZWwga2VybmVsc1dpdGhTdHJpbmc6Y29kZV07CisgICAgICAgIGNvbnZvbHZlS2VybmVsID0gW1tr
ZXJuZWxzIG9iamVjdEF0SW5kZXg6MF0gcmV0YWluXTsKKyAgICAgICAgbm9ybWFsTWFwS2VybmVs
ID0gW1trZXJuZWxzIG9iamVjdEF0SW5kZXg6MV0gcmV0YWluXTsKKyAgICB9CisgICAgcmV0dXJu
IFtzdXBlciBpbml0XTsKK30KKworLSAoTlNBcnJheSAqKXhDb252b2x2ZUFyZ3NXaXRoQnVtcE1h
cDooQ0lTYW1wbGVyICopYnVtcE1hcCB7CisgICAgcmV0dXJuIFtOU0FycmF5IGFycmF5V2l0aE9i
amVjdHM6CisgICAgICAgIGJ1bXBNYXAsCisgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoRmxv
YXQ6NF0sCisgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6MF0sCisgICAgICAgIFtD
SVZlY3RvciB2ZWN0b3JXaXRoWDogMSBZOiAyIFo6IDFdLAorICAgICAgICBbQ0lWZWN0b3IgdmVj
dG9yV2l0aFg6IDAgWTogMCBaOiAwXSwKKyAgICAgICAgW0NJVmVjdG9yIHZlY3RvcldpdGhYOi0x
IFk6LTIgWjotMV0sCisgICAgICAgIG5pbF07Cit9CisKKy0gKE5TQXJyYXkgKil5Q29udm9sdmVB
cmdzV2l0aEJ1bXBNYXA6KENJU2FtcGxlciAqKWJ1bXBNYXAgeworICAgIHJldHVybiBbTlNBcnJh
eSBhcnJheVdpdGhPYmplY3RzOiAKKyAgICAgICAgYnVtcE1hcCwKKyAgICAgICAgW05TTnVtYmVy
IG51bWJlcldpdGhGbG9hdDo0XSwKKyAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhGbG9hdDow
XSwKKyAgICAgICAgW0NJVmVjdG9yIHZlY3RvcldpdGhYOiAxIFk6IDAgWjotMV0sCisgICAgICAg
IFtDSVZlY3RvciB2ZWN0b3JXaXRoWDogMiBZOiAwIFo6LTJdLAorICAgICAgICBbQ0lWZWN0b3Ig
dmVjdG9yV2l0aFg6IDEgWTogMCBaOi0xXSwKKyAgICAgICAgbmlsXTsKK30KKworLSAoQ0lJbWFn
ZSAqKW91dHB1dEltYWdlCit7CisgICAgQ0lTYW1wbGVyICppbWFnZSA9IFtDSVNhbXBsZXIgc2Ft
cGxlcldpdGhJbWFnZTppbnB1dEltYWdlXTsKKyAgICBOU0RpY3Rpb25hcnkgKmFwcGx5T3B0aW9u
cyA9IFtOU0RpY3Rpb25hcnkgZGljdGlvbmFyeVdpdGhPYmplY3RzQW5kS2V5czpbaW1hZ2UgZGVm
aW5pdGlvbl0sIGtDSUFwcGx5T3B0aW9uRGVmaW5pdGlvbiwgbmlsXTsKKyAgICAKKyAgICBDSUlt
YWdlICpjb252b2x2ZVggPSBbc2VsZiBhcHBseTpjb252b2x2ZUtlcm5lbCBhcmd1bWVudHM6W3Nl
bGYgeENvbnZvbHZlQXJnc1dpdGhCdW1wTWFwOiBpbWFnZV0gb3B0aW9uczphcHBseU9wdGlvbnNd
OworICAgIENJSW1hZ2UgKmNvbnZvbHZlWSA9IFtzZWxmIGFwcGx5OmNvbnZvbHZlS2VybmVsIGFy
Z3VtZW50czpbc2VsZiB5Q29udm9sdmVBcmdzV2l0aEJ1bXBNYXA6IGltYWdlXSBvcHRpb25zOmFw
cGx5T3B0aW9uc107CisgICAgQ0lTYW1wbGVyICpzYW1wbGVyWCA9IFtDSVNhbXBsZXIgc2FtcGxl
cldpdGhJbWFnZTpjb252b2x2ZVhdOworICAgIENJU2FtcGxlciAqc2FtcGxlclkgPSBbQ0lTYW1w
bGVyIHNhbXBsZXJXaXRoSW1hZ2U6Y29udm9sdmVZXTsKKyAgICAKKyAgICBOU0FycmF5ICpub3Jt
YWxNYXBBcmdzID0gW05TQXJyYXkgYXJyYXlXaXRoT2JqZWN0czpzYW1wbGVyWCwgc2FtcGxlclks
IGltYWdlLCBpbnB1dFN1cmZhY2VTY2FsZSwgbmlsXTsKKyAgICByZXR1cm4gW3NlbGYgYXBwbHk6
bm9ybWFsTWFwS2VybmVsIGFyZ3VtZW50czpub3JtYWxNYXBBcmdzIG9wdGlvbnM6YXBwbHlPcHRp
b25zXTsKK30KKworQGVuZApJbmRleDoga2NhbnZhcy9kZXZpY2UvcXVhcnR6L2RldmljZS9xdWFy
dHovZmlsdGVycy9XS1BvaW50TGlnaHRGaWx0ZXIuY2lrZXJuZWwKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpkaWZmIC1O
cHUga2NhbnZhcy9kZXZpY2UvcXVhcnR6L2RldmljZS9xdWFydHovZmlsdGVycy9XS1BvaW50TGln
aHRGaWx0ZXIuY2lrZXJuZWwKLS0tIGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9kZXZpY2UvcXVhcnR6
L2ZpbHRlcnMvV0tQb2ludExpZ2h0RmlsdGVyLmNpa2VybmVsCTEgSmFuIDE5NzAgMDA6MDA6MDAg
LTAwMDAKKysrIGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9kZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tQ
b2ludExpZ2h0RmlsdGVyLmNpa2VybmVsCTI4IE5vdiAyMDA1IDAzOjMxOjMyIC0wMDAwCkBAIC0w
LDAgKzEsOCBAQAora2VybmVsIHZlYzQgZ2VuUG9pbnRMaWdodChzYW1wbGVyIG5vcm1hbE1hcCwg
dmVjMyBsaWdodFBvcywgZmxvYXQgc3VyZmFjZVNjYWxlKQoreworCXZlYzIgcG9zPXNhbXBsZXJD
b29yZChub3JtYWxNYXApOworCXZlYzMgUCA9IHZlYzMocG9zLngsIHBvcy55LCBzdXJmYWNlU2Nh
bGUqc2FtcGxlKG5vcm1hbE1hcCwgcG9zKS5hKTsKKwl2ZWMzIEwgPSBsaWdodFBvcy1QOworCUw9
TC9zcXJ0KGRvdChMLEwpKTsKKwlyZXR1cm4gdmVjNChMLngsIEwueSwgTC56LCAxLjApOworfQpJ
bmRleDoga2NhbnZhcy9kZXZpY2UvcXVhcnR6L2RldmljZS9xdWFydHovZmlsdGVycy9XS1BvaW50
TGlnaHRGaWx0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09CmRpZmYgLU5wdSBrY2FudmFzL2RldmljZS9xdWFydHov
ZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL1dLUG9pbnRMaWdodEZpbHRlci5oCi0tLSBrY2FudmFzL2Rl
dmljZS9xdWFydHovZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL1dLUG9pbnRMaWdodEZpbHRlci5oCTEg
SmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAKKysrIGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9kZXZpY2Uv
cXVhcnR6L2ZpbHRlcnMvV0tQb2ludExpZ2h0RmlsdGVyLmgJMjggTm92IDIwMDUgMDE6NTY6MDQg
LTAwMDAKQEAgLTAsMCArMSwzNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBBcHBsZSBD
b21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2ltcG9ydCA8UXVh
cnR6Q29yZS9Db3JlSW1hZ2UuaD4KKworQGludGVyZmFjZSBXS1BvaW50TGlnaHRGaWx0ZXIgOiBD
SUZpbHRlciB7CisgICAgQ0lJbWFnZSAgKmlucHV0Tm9ybWFsTWFwOworICAgIENJVmVjdG9yICpp
bnB1dExpZ2h0UG9zaXRpb247CisgICAgTlNOdW1iZXIgKmlucHV0U3VyZmFjZVNjYWxlOworfQor
CitAZW5kCkluZGV4OiBrY2FudmFzL2RldmljZS9xdWFydHovZGV2aWNlL3F1YXJ0ei9maWx0ZXJz
L1dLUG9pbnRMaWdodEZpbHRlci5tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtTnB1IGtjYW52YXMvZGV2aWNl
L3F1YXJ0ei9kZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tQb2ludExpZ2h0RmlsdGVyLm0KLS0tIGtj
YW52YXMvZGV2aWNlL3F1YXJ0ei9kZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tQb2ludExpZ2h0Rmls
dGVyLm0JMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMAorKysga2NhbnZhcy9kZXZpY2UvcXVhcnR6
L2RldmljZS9xdWFydHovZmlsdGVycy9XS1BvaW50TGlnaHRGaWx0ZXIubQkyOCBOb3YgMjAwNSAw
MTo1MjoyMyAtMDAwMApAQCAtMCwwICsxLDcwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1
IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaW1wb3J0ICJXS1BvaW50TGlnaHRGaWx0ZXIuaCIKKworc3RhdGlj
IENJS2VybmVsICpwb2ludExpZ2h0RmlsdGVyID0gbmlsOworCitAaW1wbGVtZW50YXRpb24gV0tQ
b2ludExpZ2h0RmlsdGVyCisKKysgKHZvaWQpaW5pdGlhbGl6ZQoreworICAgIFtDSUZpbHRlciBy
ZWdpc3RlckZpbHRlck5hbWU6QCJXS1BvaW50TGlnaHQiCisgICAgICAgICAgICAgICAgICAgICBj
b25zdHJ1Y3Rvcjogc2VsZgorICAgICAgICAgICAgICAgICBjbGFzc0F0dHJpYnV0ZXM6IFtOU0Rp
Y3Rpb25hcnkgZGljdGlvbmFyeVdpdGhPYmplY3RzQW5kS2V5czoKKyAgICAgICAgICAgICAgICAg
ICAgIEAiV2ViS2l0IFBvaW50IExpZ2h0Iiwga0NJQXR0cmlidXRlRmlsdGVyRGlzcGxheU5hbWUs
CisgICAgICAgICAgICAgICAgICAgICBbTlNBcnJheSBhcnJheVdpdGhPYmplY3RzOiBrQ0lDYXRl
Z29yeVN0eWxpemUsIGtDSUNhdGVnb3J5VmlkZW8sCisgICAgICAgICAgICAgICAgICAgICAgICAg
a0NJQ2F0ZWdvcnlTdGlsbEltYWdlLCBrQ0lDYXRlZ29yeU5vblNxdWFyZVBpeGVscyxuaWxdLCBr
Q0lBdHRyaWJ1dGVGaWx0ZXJDYXRlZ29yaWVzLAorICAgICAgICAgICAgICAgICAgICAgW05TRGlj
dGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVjdHNBbmRLZXlzOgorICAgICAgICAgICAgICAgICAg
ICAgICAgIGtDSUF0dHJpYnV0ZVR5cGVQb3NpdGlvbjMsIGtDSUF0dHJpYnV0ZVR5cGUsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgbmlsXSwgQCJpbnB1dExpZ2h0UG9zaXRpb24iLAorICAgICAg
ICAgICAgICAgICAgICAgbmlsXV07Cit9CisKKysgKENJRmlsdGVyICopZmlsdGVyV2l0aE5hbWU6
KE5TU3RyaW5nICopbmFtZQoreworICAgIENJRmlsdGVyICpmaWx0ZXI7CisgICAgZmlsdGVyID0g
W1tzZWxmIGFsbG9jXSBpbml0XTsKKyAgICByZXR1cm4gW2ZpbHRlciBhdXRvcmVsZWFzZV07Cit9
CisKKy0gKGlkKWluaXQKK3sKKyAgICBpZiAoIXBvaW50TGlnaHRGaWx0ZXIpIHsKKyAgICAgICAg
TlNCdW5kbGUgKmJ1bmRsZSA9IFtOU0J1bmRsZSBidW5kbGVGb3JDbGFzczpbc2VsZiBjbGFzc11d
OworICAgICAgICBOU1N0cmluZyAqa2VybmVsRmlsZSA9IFtidW5kbGUgcGF0aEZvclJlc291cmNl
OkAiV0tQb2ludExpZ2h0RmlsdGVyIiBvZlR5cGU6QCJjaWtlcm5lbCJdOworICAgICAgICBOU1N0
cmluZyAqY29kZSA9IFtOU1N0cmluZyBzdHJpbmdXaXRoQ29udGVudHNPZkZpbGU6a2VybmVsRmls
ZV07CisgICAgICAgIE5TQXJyYXkgKmtlcm5lbHMgPSBbQ0lLZXJuZWwga2VybmVsc1dpdGhTdHJp
bmc6Y29kZV07CisgICAgICAgIHBvaW50TGlnaHRGaWx0ZXIgPSBbW2tlcm5lbHMgb2JqZWN0QXRJ
bmRleDowXSByZXRhaW5dOworICAgIH0KKyAgICByZXR1cm4gW3N1cGVyIGluaXRdOworfQorCist
IChDSUltYWdlICopb3V0cHV0SW1hZ2UKK3sKKyAgICByZXR1cm4gW3NlbGYgYXBwbHk6cG9pbnRM
aWdodEZpbHRlciwgaW5wdXROb3JtYWxNYXAsIGlucHV0TGlnaHRQb3NpdGlvbiwgaW5wdXRTdXJm
YWNlU2NhbGUsIG5pbF07Cit9CisKK0BlbmQKSW5kZXg6IGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9k
ZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tTcGVjdWxhckxpZ2h0aW5nRmlsdGVyLmNpa2VybmVsCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KZGlmZiAtTnB1IGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9kZXZpY2UvcXVhcnR6L2Zp
bHRlcnMvV0tTcGVjdWxhckxpZ2h0aW5nRmlsdGVyLmNpa2VybmVsCi0tLSBrY2FudmFzL2Rldmlj
ZS9xdWFydHovZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL1dLU3BlY3VsYXJMaWdodGluZ0ZpbHRlci5j
aWtlcm5lbAkxIEphbiAxOTcwIDAwOjAwOjAwIC0wMDAwCisrKyBrY2FudmFzL2RldmljZS9xdWFy
dHovZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL1dLU3BlY3VsYXJMaWdodGluZ0ZpbHRlci5jaWtlcm5l
bAkyOCBOb3YgMjAwNSAwMzo0NDoyNCAtMDAwMApAQCAtMCwwICsxLDQwIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA1IE9saXZlciBIdW50IDxvamgxNkBzdHVkZW50LmNhbnRlcmJ1cnkuYWMu
bno+LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQVVUSE9SIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisgCitrZXJuZWwgdmVjNCBiYXNpYyhzYW1wbGVyIGlucHV0Tm9ybWFsVmVj
dG9ycywgc2FtcGxlciBpbnB1dExpZ2h0VmVjdG9ycywgX19jb2xvciBpbnB1dExpZ2h0aW5nQ29s
b3IsIGZsb2F0IGlucHV0U3VyZmFjZVNjYWxlLCBmbG9hdCBpbnB1dFNwZWN1bGFyQ29uc3RhbnQs
CisgICAgICAgIGZsb2F0IGlucHV0U3BlY3VsYXJFeHBvbmVudCwgZmxvYXQgaW5wdXRLZXJuZWxV
bml0TGVuZ3RoWCwgZmxvYXQgaW5wdXRLZXJuZWxVbml0TGVuZ3RoWSkKK3sKKyAgICB2ZWMyIHBv
cyA9IHNhbXBsZXJDb29yZChpbnB1dExpZ2h0VmVjdG9ycyk7CisgICAgdmVjMiBwb3NuID0gc2Ft
cGxlckNvb3JkKGlucHV0Tm9ybWFsVmVjdG9ycyk7CisgICAgdmVjMyBsID0gc2FtcGxlKGlucHV0
TGlnaHRWZWN0b3JzLCBwb3MpLnh5ejsKKyAgICB2ZWMzIG4gPSBzYW1wbGUoaW5wdXROb3JtYWxW
ZWN0b3JzLCBwb3NuKS54eXo7CisgICAgdmVjMyBoID0gbCt2ZWMzKDAuMCwwLjAsMS4wKTsKKyAg
ICBoIC89IHNxcnQoZG90KGgsaCkpOworICAgIGZsb2F0IG5oID0gaW5wdXRTcGVjdWxhckNvbnN0
YW50KnBvdygoZG90KG4sIGgpKSwgaW5wdXRTcGVjdWxhckV4cG9uZW50KTsKKyAgICB2ZWM0IHJl
cyA9IGlucHV0TGlnaHRpbmdDb2xvciAqIG5oOworICAgIHJlcy5hID0gbWF4KHJlcy5yLHJlcy5n
KTsKKyAgICByZXMuYSA9IG1heChyZXMuYSwgcmVzLmIpOworICAgIHJldHVybiByZXM7Cit9Cklu
ZGV4OiBrY2FudmFzL2RldmljZS9xdWFydHovZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL1dLU3BlY3Vs
YXJMaWdodGluZ0ZpbHRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtTnB1IGtjYW52YXMvZGV2aWNlL3F1
YXJ0ei9kZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tTcGVjdWxhckxpZ2h0aW5nRmlsdGVyLmgKLS0t
IGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9kZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tTcGVjdWxhckxp
Z2h0aW5nRmlsdGVyLmgJMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMAorKysga2NhbnZhcy9kZXZp
Y2UvcXVhcnR6L2RldmljZS9xdWFydHovZmlsdGVycy9XS1NwZWN1bGFyTGlnaHRpbmdGaWx0ZXIu
aAkxMSBOb3YgMjAwNSAyMzozNjowMCAtMDAwMApAQCAtMCwwICsxLDM5IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA1IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09N
UFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW1wb3J0IDxRdWFydHpDb3JlL0NvcmVJbWFnZS5oPgorCisKK0BpbnRlcmZh
Y2UgV0tTcGVjdWxhckxpZ2h0aW5nRmlsdGVyIDogQ0lGaWx0ZXIgeworICAgIENJU2FtcGxlciAq
aW5wdXROb3JtYWxNYXA7CisgICAgQ0lTYW1wbGVyICppbnB1dExpZ2h0VmVjdG9yczsKKyAgICBD
SUNvbG9yICAqaW5wdXRMaWdodGluZ0NvbG9yOworICAgIE5TTnVtYmVyICppbnB1dFN1cmZhY2VT
Y2FsZTsKKyAgICBOU051bWJlciAqaW5wdXRTcGVjdWxhckNvbnN0YW50OworICAgIE5TTnVtYmVy
ICppbnB1dFNwZWN1bGFyRXhwb25lbnQ7CisgICAgTlNOdW1iZXIgKmlucHV0S2VybmVsVW5pdExl
bmd0aFg7CisgICAgTlNOdW1iZXIgKmlucHV0S2VybmVsVW5pdExlbmd0aFk7Cit9CitAZW5kCklu
ZGV4OiBrY2FudmFzL2RldmljZS9xdWFydHovZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL1dLU3BlY3Vs
YXJMaWdodGluZ0ZpbHRlci5tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtTnB1IGtjYW52YXMvZGV2aWNlL3F1
YXJ0ei9kZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tTcGVjdWxhckxpZ2h0aW5nRmlsdGVyLm0KLS0t
IGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9kZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tTcGVjdWxhckxp
Z2h0aW5nRmlsdGVyLm0JMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMAorKysga2NhbnZhcy9kZXZp
Y2UvcXVhcnR6L2RldmljZS9xdWFydHovZmlsdGVycy9XS1NwZWN1bGFyTGlnaHRpbmdGaWx0ZXIu
bQkyMCBOb3YgMjAwNSAxMzowNDoyMiAtMDAwMApAQCAtMCwwICsxLDkzIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA1IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09N
UFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW1wb3J0ICJXS1NwZWN1bGFyTGlnaHRpbmdGaWx0ZXIuaCIKKworc3RhdGlj
IENJS2VybmVsICpzcGVjdWxhckxpZ2h0aW5nRmlsdGVyID0gbmlsOworCitAaW1wbGVtZW50YXRp
b24gV0tTcGVjdWxhckxpZ2h0aW5nRmlsdGVyCisKKysgKHZvaWQpaW5pdGlhbGl6ZQoreworICAg
IFtDSUZpbHRlciByZWdpc3RlckZpbHRlck5hbWU6QCJXS1NwZWN1bGFyTGlnaHRpbmciICAKKyAg
ICAgICAgY29uc3RydWN0b3I6IHNlbGYKKyAgICAgICAgY2xhc3NBdHRyaWJ1dGVzOiBbTlNEaWN0
aW9uYXJ5IGRpY3Rpb25hcnlXaXRoT2JqZWN0c0FuZEtleXM6CisgICAgICAgICBAIldlYktpdCBT
cGVjdWxhciBMaWdodGluZyIsIGtDSUF0dHJpYnV0ZUZpbHRlckRpc3BsYXlOYW1lLAorICAgICAg
ICBbTlNBcnJheSBhcnJheVdpdGhPYmplY3RzOiBrQ0lDYXRlZ29yeVN0eWxpemUsIGtDSUNhdGVn
b3J5VmlkZW8sCisgICAgICAgICAgICBrQ0lDYXRlZ29yeVN0aWxsSW1hZ2UsIGtDSUNhdGVnb3J5
Tm9uU3F1YXJlUGl4ZWxzLG5pbF0sIGtDSUF0dHJpYnV0ZUZpbHRlckNhdGVnb3JpZXMsCisgICAg
ICAgIFtOU0RpY3Rpb25hcnkgZGljdGlvbmFyeVdpdGhPYmplY3RzQW5kS2V5czoKKyAgICAgICAg
ICAgIFtDSUNvbG9yIGNvbG9yV2l0aFJlZDoxLjAgZ3JlZW46MS4wIGJsdWU6MS4wIGFscGhhOjEu
MF0sCisgICAgICAgICAgICAga0NJQXR0cmlidXRlRGVmYXVsdCwgbmlsXSwgIEAiaW5wdXRMaWdo
dGluZ0NvbG9yIiwKKyAgICAgICAgW05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVjdHNB
bmRLZXlzOgorICAgICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhEb3VibGU6MC4wXSwga0NJ
QXR0cmlidXRlTWluLAorICAgICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhEb3VibGU6MS4w
XSwga0NJQXR0cmlidXRlRGVmYXVsdCwKKyAgICAgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRo
RG91YmxlOjEuMF0sIGtDSUF0dHJpYnV0ZUlkZW50aXR5LAorICAgICAgICAgICAga0NJQXR0cmli
dXRlVHlwZVNjYWxhciwga0NJQXR0cmlidXRlVHlwZSwKKyAgICAgICAgICAgIG5pbF0sIEAiaW5w
dXRTdXJmYWNlU2NhbGUiLAorICAgICAgICBbTlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnlXaXRoT2Jq
ZWN0c0FuZEtleXM6CisgICAgICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aERvdWJsZTowLjBd
LCBrQ0lBdHRyaWJ1dGVNaW4sCisgICAgICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aERvdWJs
ZToxLjBdLCBrQ0lBdHRyaWJ1dGVEZWZhdWx0LAorICAgICAgICAgICAgW05TTnVtYmVyIG51bWJl
cldpdGhEb3VibGU6MS4wXSwga0NJQXR0cmlidXRlSWRlbnRpdHksCisgICAgICAgICAgICBrQ0lB
dHRyaWJ1dGVUeXBlU2NhbGFyLCBrQ0lBdHRyaWJ1dGVUeXBlLAorICAgICAgICAgICAgbmlsXSwg
QCJpbnB1dFNwZWN1bGFyQ29uc3RhbnQiLAorICAgICAgICBbTlNEaWN0aW9uYXJ5IGRpY3Rpb25h
cnlXaXRoT2JqZWN0c0FuZEtleXM6CisgICAgICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aERv
dWJsZTowLjBdLCBrQ0lBdHRyaWJ1dGVNaW4sCisgICAgICAgICAgICBbTlNOdW1iZXIgbnVtYmVy
V2l0aERvdWJsZToxMjguMF0sIGtDSUF0dHJpYnV0ZU1pbiwKKyAgICAgICAgICAgIFtOU051bWJl
ciBudW1iZXJXaXRoRG91YmxlOjEuMF0sIGtDSUF0dHJpYnV0ZURlZmF1bHQsCisgICAgICAgICAg
ICBbTlNOdW1iZXIgbnVtYmVyV2l0aERvdWJsZToxLjBdLCBrQ0lBdHRyaWJ1dGVJZGVudGl0eSwK
KyAgICAgICAgICAgIGtDSUF0dHJpYnV0ZVR5cGVTY2FsYXIsIGtDSUF0dHJpYnV0ZVR5cGUsCisg
ICAgICAgICAgICBuaWxdLCBAImlucHV0U3BlY3VsYXJFeHBvbmVudCIsCisgICAgICAgIFtOU0Rp
Y3Rpb25hcnkgZGljdGlvbmFyeVdpdGhPYmplY3RzQW5kS2V5czoKKyAgICAgICAgICAgIGtDSUF0
dHJpYnV0ZVR5cGVPZmZzZXQsIGtDSUF0dHJpYnV0ZVR5cGUsCisgICAgICAgICAgICBuaWxdLCBA
ImlucHV0S2VybmVsVW5pdExlbmd0aCIsCisgICAgICAgIG5pbF1dOworfQorCisrIChDSUZpbHRl
ciAqKWZpbHRlcldpdGhOYW1lOihOU1N0cmluZyAqKW5hbWUKK3sKKyAgICBDSUZpbHRlciAqZmls
dGVyOworICAgIGZpbHRlciA9IFtbc2VsZiBhbGxvY10gaW5pdF07CisgICAgcmV0dXJuIFtmaWx0
ZXIgYXV0b3JlbGVhc2VdOworfQorCistIChpZClpbml0Cit7CisgICAgaWYgKCFzcGVjdWxhckxp
Z2h0aW5nRmlsdGVyKSB7CisgICAgICAgIE5TQnVuZGxlICpidW5kbGUgPSBbTlNCdW5kbGUgYnVu
ZGxlRm9yQ2xhc3M6W3NlbGYgY2xhc3NdXTsKKyAgICAgICAgTlNTdHJpbmcgKmtlcm5lbEZpbGUg
PSBbYnVuZGxlIHBhdGhGb3JSZXNvdXJjZTpAIldLU3BlY3VsYXJMaWdodGluZ0ZpbHRlciIgb2ZU
eXBlOkAiY2lrZXJuZWwiXTsKKyAgICAgICAgTlNTdHJpbmcgKmNvZGUgPSBbTlNTdHJpbmcgc3Ry
aW5nV2l0aENvbnRlbnRzT2ZGaWxlOmtlcm5lbEZpbGVdOworICAgICAgICBOU0FycmF5ICprZXJu
ZWxzID0gW0NJS2VybmVsIGtlcm5lbHNXaXRoU3RyaW5nOmNvZGVdOworICAgICAgICBzcGVjdWxh
ckxpZ2h0aW5nRmlsdGVyID0gW1trZXJuZWxzIG9iamVjdEF0SW5kZXg6MF0gcmV0YWluXTsKKyAg
ICB9CisgICAgcmV0dXJuIFtzdXBlciBpbml0XTsKK30KKworLSAoQ0lJbWFnZSAqKW91dHB1dElt
YWdlCit7CisgICAgcmV0dXJuIFtzZWxmIGFwcGx5OnNwZWN1bGFyTGlnaHRpbmdGaWx0ZXIsIGlu
cHV0Tm9ybWFsTWFwLCBpbnB1dExpZ2h0VmVjdG9ycywgaW5wdXRMaWdodGluZ0NvbG9yLCBpbnB1
dFN1cmZhY2VTY2FsZSwgaW5wdXRTcGVjdWxhckNvbnN0YW50LAorICAgICAgICBpbnB1dFNwZWN1
bGFyRXhwb25lbnQsIGlucHV0S2VybmVsVW5pdExlbmd0aFgsIGlucHV0S2VybmVsVW5pdExlbmd0
aFksIG5pbF07Cit9CisKK0BlbmQKSW5kZXg6IGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9kZXZpY2Uv
cXVhcnR6L2ZpbHRlcnMvV0tTcG90TGlnaHRGaWx0ZXIuY2lrZXJuZWwKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpkaWZm
IC1OcHUga2NhbnZhcy9kZXZpY2UvcXVhcnR6L2RldmljZS9xdWFydHovZmlsdGVycy9XS1Nwb3RM
aWdodEZpbHRlci5jaWtlcm5lbAotLS0ga2NhbnZhcy9kZXZpY2UvcXVhcnR6L2RldmljZS9xdWFy
dHovZmlsdGVycy9XS1Nwb3RMaWdodEZpbHRlci5jaWtlcm5lbAkxIEphbiAxOTcwIDAwOjAwOjAw
IC0wMDAwCisrKyBrY2FudmFzL2RldmljZS9xdWFydHovZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL1dL
U3BvdExpZ2h0RmlsdGVyLmNpa2VybmVsCTI4IE5vdiAyMDA1IDAzOjQ0OjE4IC0wMDAwCkBAIC0w
LDAgKzEsMzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgT2xpdmVyIEh1bnQgPG9qaDE2
QHN0dWRlbnQuY2FudGVyYnVyeS5hYy5uej4uICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKyAKK2tlcm5lbCB2ZWM0IHNwb3RM
aWdodEZpbHRlcihzYW1wbGVyIGxpZ2h0VmVjdG9ycywgdmVjMyBsaWdodERpcmVjdGlvbiwgZmxv
YXQgc3BlY3VsYXJFeHBvbmVudCwgZmxvYXQgY29zQ3V0b2ZmQW5nbGUpCit7CisgICAgdmVjMiBw
b3M9c2FtcGxlckNvb3JkKGxpZ2h0VmVjdG9ycyk7CisgICAgdmVjMyBsID0gc2FtcGxlKGxpZ2h0
VmVjdG9ycywgcG9zKS54eXo7CisgICAgbC89c3FydChkb3QobCxsKSk7CisgICAgZmxvYXQgc2w9
LShkb3QobGlnaHREaXJlY3Rpb24sbCkpOworICAgIHNsPW1heChzbCwwLjApOworICAgIAorICAg
IC8vcGVyZm9ybSBjdXRvZmYKKyAgICBmbG9hdCBvdXRzaWRlQ3V0b2ZmID0gY29tcGFyZShhYnMo
Y29zQ3V0b2ZmQW5nbGUpLXNsLCAxLjAsIDAuMCk7CisgICAgc2w9cG93KHNsLHNwZWN1bGFyRXhw
b25lbnQpOworICAgIHJldHVybiB2ZWM0KGwueCxsLnksbC56LG91dHNpZGVDdXRvZmYqc2wpOwor
fQpJbmRleDoga2NhbnZhcy9kZXZpY2UvcXVhcnR6L2RldmljZS9xdWFydHovZmlsdGVycy9XS1Nw
b3RMaWdodEZpbHRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtTnB1IGtjYW52YXMvZGV2aWNlL3F1YXJ0
ei9kZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tTcG90TGlnaHRGaWx0ZXIuaAotLS0ga2NhbnZhcy9k
ZXZpY2UvcXVhcnR6L2RldmljZS9xdWFydHovZmlsdGVycy9XS1Nwb3RMaWdodEZpbHRlci5oCTEg
SmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAKKysrIGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9kZXZpY2Uv
cXVhcnR6L2ZpbHRlcnMvV0tTcG90TGlnaHRGaWx0ZXIuaAkyMCBOb3YgMjAwNSAxMTowNDowMyAt
MDAwMApAQCAtMCwwICsxLDM0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1IEFwcGxlIENv
bXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW1wb3J0IDxRdWFy
dHpDb3JlL0NvcmVJbWFnZS5oPgorCitAaW50ZXJmYWNlIFdLU3BvdExpZ2h0RmlsdGVyIDogQ0lG
aWx0ZXIgeworICAgIENJSW1hZ2UgICppbnB1dExpZ2h0VmVjdG9yczsKKyAgICBDSVZlY3RvciAq
aW5wdXRMaWdodERpcmVjdGlvbjsKKyAgICBOU051bWJlciAqaW5wdXRTcGVjdWxhckV4cG9uZW50
OworICAgIE5TTnVtYmVyICppbnB1dExpbWl0aW5nQ29uZUFuZ2xlOworfQorQGVuZApJbmRleDog
a2NhbnZhcy9kZXZpY2UvcXVhcnR6L2RldmljZS9xdWFydHovZmlsdGVycy9XS1Nwb3RMaWdodEZp
bHRlci5tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KZGlmZiAtTnB1IGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9kZXZpY2Uv
cXVhcnR6L2ZpbHRlcnMvV0tTcG90TGlnaHRGaWx0ZXIubQotLS0ga2NhbnZhcy9kZXZpY2UvcXVh
cnR6L2RldmljZS9xdWFydHovZmlsdGVycy9XS1Nwb3RMaWdodEZpbHRlci5tCTEgSmFuIDE5NzAg
MDA6MDA6MDAgLTAwMDAKKysrIGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9kZXZpY2UvcXVhcnR6L2Zp
bHRlcnMvV0tTcG90TGlnaHRGaWx0ZXIubQkyMCBOb3YgMjAwNSAxMzowNDoyMiAtMDAwMApAQCAt
MCwwICsxLDc5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1IEFwcGxlIENvbXB1dGVyLCBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworIAorI2ltcG9ydCAiV0tTcG90TGlnaHRG
aWx0ZXIuaCIKKworc3RhdGljIENJS2VybmVsICpzcG90TGlnaHRGaWx0ZXIgPSBuaWw7CisKK0Bp
bXBsZW1lbnRhdGlvbiBXS1Nwb3RMaWdodEZpbHRlcgorCisrICh2b2lkKWluaXRpYWxpemUKK3sK
KyAgICBbQ0lGaWx0ZXIgcmVnaXN0ZXJGaWx0ZXJOYW1lOkAiV0tTcG90TGlnaHQiCisgICAgICAg
IGNvbnN0cnVjdG9yOiBzZWxmCisgICAgICAgIGNsYXNzQXR0cmlidXRlczogW05TRGljdGlvbmFy
eSBkaWN0aW9uYXJ5V2l0aE9iamVjdHNBbmRLZXlzOgorICAgICAgICAgQCJXZWJLaXQgU3BvdCBM
aWdodCIsIGtDSUF0dHJpYnV0ZUZpbHRlckRpc3BsYXlOYW1lLAorICAgICAgICBbTlNBcnJheSBh
cnJheVdpdGhPYmplY3RzOiBrQ0lDYXRlZ29yeVN0eWxpemUsIGtDSUNhdGVnb3J5VmlkZW8sCisg
ICAgICAgICAgICBrQ0lDYXRlZ29yeVN0aWxsSW1hZ2UsIGtDSUNhdGVnb3J5Tm9uU3F1YXJlUGl4
ZWxzLG5pbF0sIGtDSUF0dHJpYnV0ZUZpbHRlckNhdGVnb3JpZXMsCisgICAgICAgIFtOU0RpY3Rp
b25hcnkgZGljdGlvbmFyeVdpdGhPYmplY3RzQW5kS2V5czoKKyAgICAgICAgICAgIGtDSUF0dHJp
YnV0ZVR5cGVQb3NpdGlvbjMsIGtDSUF0dHJpYnV0ZVR5cGUsCisgICAgICAgICAgICBuaWxdLCBA
ImlucHV0TGlnaHREaXJlY3Rpb24iLAorICAgICAgICBbTlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnlX
aXRoT2JqZWN0c0FuZEtleXM6CisgICAgICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aERvdWJs
ZToxLjBdLCBrQ0lBdHRyaWJ1dGVEZWZhdWx0LAorICAgICAgICAgICAgW05TTnVtYmVyIG51bWJl
cldpdGhEb3VibGU6MS4wXSwga0NJQXR0cmlidXRlSWRlbnRpdHksCisgICAgICAgICAgICBrQ0lB
dHRyaWJ1dGVUeXBlU2NhbGFyLCBrQ0lBdHRyaWJ1dGVUeXBlLAorICAgICAgICAgICAgbmlsXSwg
QCJpbnB1dFNwZWN1bGFyRXhwb25lbnQiLAorICAgICAgICBbTlNEaWN0aW9uYXJ5IGRpY3Rpb25h
cnlXaXRoT2JqZWN0c0FuZEtleXM6CisgICAgICAgICAgICBrQ0lBdHRyaWJ1dGVUeXBlQW5nbGUs
IGtDSUF0dHJpYnV0ZVR5cGUsCisgICAgICAgICAgICBuaWxdLCBAImlucHV0TGltaXRpbmdDb25l
QW5nbGUiLAorICAgICAgICBuaWxdXTsKK30KKworKyAoQ0lGaWx0ZXIgKilmaWx0ZXJXaXRoTmFt
ZTooTlNTdHJpbmcgKiluYW1lCit7CisgICAgQ0lGaWx0ZXIgKmZpbHRlcjsKKyAgICBmaWx0ZXIg
PSBbW3NlbGYgYWxsb2NdIGluaXRdOworICAgIHJldHVybiBbZmlsdGVyIGF1dG9yZWxlYXNlXTsK
K30KKworLSAoaWQpaW5pdAoreworICAgIGlmICghc3BvdExpZ2h0RmlsdGVyKSB7CisgICAgICAg
IE5TQnVuZGxlICpidW5kbGUgPSBbTlNCdW5kbGUgYnVuZGxlRm9yQ2xhc3M6W3NlbGYgY2xhc3Nd
XTsKKyAgICAgICAgTlNTdHJpbmcgKmtlcm5lbEZpbGUgPSBbYnVuZGxlIHBhdGhGb3JSZXNvdXJj
ZTpAIldLU3BvdExpZ2h0RmlsdGVyIiBvZlR5cGU6QCJjaWtlcm5lbCJdOworICAgICAgICBOU1N0
cmluZyAqY29kZSA9IFtOU1N0cmluZyBzdHJpbmdXaXRoQ29udGVudHNPZkZpbGU6a2VybmVsRmls
ZV07CisgICAgICAgIE5TQXJyYXkgKmtlcm5lbHMgPSBbQ0lLZXJuZWwga2VybmVsc1dpdGhTdHJp
bmc6Y29kZV07CisgICAgICAgIHNwb3RMaWdodEZpbHRlciA9IFtba2VybmVscyBvYmplY3RBdElu
ZGV4OjBdIHJldGFpbl07CisgICAgfQorICAgIHJldHVybiBbc3VwZXIgaW5pdF07Cit9CisKKy0g
KENJSW1hZ2UgKilvdXRwdXRJbWFnZQoreworICAgIGZsb2F0IGNvc2N1dG9mZiA9IGNvcyhbaW5w
dXRMaW1pdGluZ0NvbmVBbmdsZSBmbG9hdFZhbHVlXSk7CisgICAgcmV0dXJuIFtzZWxmIGFwcGx5
OnNwb3RMaWdodEZpbHRlciwgaW5wdXRMaWdodFZlY3RvcnMsIGlucHV0TGlnaHREaXJlY3Rpb24s
IGlucHV0U3BlY3VsYXJFeHBvbmVudCwgW05TTnVtYmVyIG51bWJlcldpdGhGbG9hdDpjb3NjdXRv
ZmZdLCBuaWxdOworfQorCitAZW5kCkluZGV4OiBrY2FudmFzL0tDYW52YXNGaWx0ZXJzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rY2FudmFzL0tDYW52YXNG
aWx0ZXJzLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS45CmRpZmYgLXAgLXUgLXIxLjkga2Nh
bnZhcy9LQ2FudmFzRmlsdGVycy5jcHAKLS0tIGtjYW52YXMvS0NhbnZhc0ZpbHRlcnMuY3BwCTIy
IE5vdiAyMDA1IDEyOjAzOjE1IC0wMDAwCTEuOQorKysga2NhbnZhcy9LQ2FudmFzRmlsdGVycy5j
cHAJMjggTm92IDIwMDUgMDQ6NTI6MTggLTAwMDAKQEAgLTI4LDYgKzI4LDE0IEBACiAjaW5jbHVk
ZSAiS0NhbnZhc1RyZWVEZWJ1Zy5oIgogI2luY2x1ZGUgPGt4bWxjb3JlL0Fzc2VydGlvbnMuaD4K
IAordm9pZCBLQ2FudmFzUG9pbnQzRjo6bm9ybWFsaXplKCkKK3sKKyAgICBmbG9hdCBsZW5ndGgg
PSBzcXJ0KG1feCptX3grbV95Km1feSttX3oqbV96KTsKKyAgICBtX3ggLz0gbGVuZ3RoOworICAg
IG1feSAvPSBsZW5ndGg7CisgICAgbV96IC89IGxlbmd0aDsKK30KKwogLy8gRmlsdGVycwogCiB2
b2lkIEtDYW52YXNGaWx0ZXI6OmFkZEZpbHRlckVmZmVjdChLQ2FudmFzRmlsdGVyRWZmZWN0ICpl
ZmZlY3QpCkBAIC05Miw2ICsxMDAsMTQgQEAgdm9pZCBLQ2FudmFzRmlsdGVyRWZmZWN0OjpzZXRS
ZXN1bHQoY29ucwogICAgIG1fcmVzdWx0ID0gcmVzdWx0OwogfQogCisKK3N0YXRpYyBRVGV4dFN0
cmVhbSAmb3BlcmF0b3I8PChRVGV4dFN0cmVhbSAmdHMsIGNvbnN0IEtDYW52YXNQb2ludDNGIHAp
Cit7CisgICAgdHMgPDwgIng9IiA8PCBwLngoKSA8PCAiIHk9IiA8PCBwLnkoKSA8PCAiIHo9IiA8
PCBwLnooKTsKKyAgICByZXR1cm4gdHM7ICAKK30KKworCiBRVGV4dFN0cmVhbSAmS0NhbnZhc0Zp
bHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihRVGV4dFN0cmVhbSAmdHMpIGNvbnN0
CiB7CiAgICAgaWYgKCFpbigpLmlzRW1wdHkoKSkKQEAgLTEwMywzMCArMTE5LDM3IEBAIFFUZXh0
U3RyZWFtICZLQ2FudmFzRmlsdGVyRWZmZWN0OjpleHRlcm4KICAgICByZXR1cm4gdHM7ICAgIAog
fQogCi1RVGV4dFN0cmVhbSAmS0NhbnZhc0ZFRGlzdGFudExpZ2h0OjpleHRlcm5hbFJlcHJlc2Vu
dGF0aW9uKFFUZXh0U3RyZWFtICZ0cykgY29uc3QKK1FUZXh0U3RyZWFtICZLQ1BvaW50TGlnaHRT
b3VyY2U6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oUVRleHRTdHJlYW0gJnRzKSBjb25zdAogewot
ICAgIHRzIDw8ICJbdHlwZT1ESVNUQU5ULUxJR0hUXSAiOwotICAgIEtDYW52YXNGaWx0ZXJFZmZl
Y3Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMpOwotICAgIHRzIDw8ICJbYXppbXV0aD0iIDw8
IGF6aW11dGgoKSA8PCAiXSIKLSAgICAgICAgPDwgIltlbGV2YXRpb249IiA8PCBlbGV2YXRpb24o
KSA8PCAiXSI7Ci0gICAgcmV0dXJuIHRzOworICAgIHRzIDw8ICJbdHlwZT1QT0lOVC1MSUdIVF0g
IjsKKyAgICB0cyA8PCAiW3Bvc2l0aW9uPVwiIiA8PCBwb3NpdGlvbigpIDw8ICJcIl0iOworICAg
IHJldHVybiB0czsgIAogfQogCi1RVGV4dFN0cmVhbSAmS0NhbnZhc0ZFUG9pbnRMaWdodDo6ZXh0
ZXJuYWxSZXByZXNlbnRhdGlvbihRVGV4dFN0cmVhbSAmdHMpIGNvbnN0CitRVGV4dFN0cmVhbSAm
S0NTcG90TGlnaHRTb3VyY2U6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oUVRleHRTdHJlYW0gJnRz
KSBjb25zdAogewotICAgIHRzIDw8ICJbdHlwZT1QT0lOVC1MSUdIVF0gIjsKLSAgICBLQ2FudmFz
RmlsdGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzKTsKLSAgICB0cyA8PCAiW3g9
IiA8PCBtX3ggPDwgIiB5PSIgPDwgbV95IDw8ICIgej0iIDw8IG1feiA8PCAiXSI7CisgICAgdHMg
PDwgIlt0eXBlPVNQT1QtTElHSFRdICI7CisgICAgdHMgPDwgIltwb3NpdGlvbj1cIiIgPDwgcG9z
aXRpb24oKSA8PCAiXCJdIjsKKyAgICB0cyA8PCAiW2RpcmVjdGlvbj1cIiIgPDwgZGlyZWN0aW9u
KCkgPDwgIlwiXSI7CisgICAgdHMgPDwgIltzcGVjdWxhckV4cG9uZW50PVwiIiA8PCBzcGVjdWxh
ckV4cG9uZW50KCkgPDwgIlwiXSI7CisgICAgdHMgPDwgIltsaW1pdGluZ0NvbmVBbmdsZT1cIiIg
PDwgbGltaXRpbmdDb25lQW5nbGUoKSA8PCAiXCJdIjsKICAgICByZXR1cm4gdHM7CiB9CiAKLVFU
ZXh0U3RyZWFtICZLQ2FudmFzRkVTcG90TGlnaHQ6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oUVRl
eHRTdHJlYW0gJnRzKSBjb25zdAorUVRleHRTdHJlYW0gJktDRGlzdGFudExpZ2h0U291cmNlOjpl
eHRlcm5hbFJlcHJlc2VudGF0aW9uKFFUZXh0U3RyZWFtICZ0cykgY29uc3QKIHsKLSAgICB0cyA8
PCAiW3R5cGU9U1BPVC1MSUdIVF0gIjsgCi0gICAgS0NhbnZhc0ZpbHRlckVmZmVjdDo6ZXh0ZXJu
YWxSZXByZXNlbnRhdGlvbih0cyk7Ci0gICAgdHMgPDwgIlt4PSIgPDwgbV94IDw8ICIgeT0iIDw8
IG1feSA8PCAiIHo9IiA8PCBtX3ogPDwgIl0iCi0gICAgICAgIDw8ICJbcG9pbnRzIGF0IHg9IiA8
PCBtX3BvaW50c0F0WCA8PCAiIHk9IiA8PCBtX3BvaW50c0F0WSA8PCAiIHo9IiA8PCBtX3BvaW50
c0F0WiA8PCAiXSI7Ci0gICAgcmV0dXJuIHRzOworICAgIHRzIDw8ICJbdHlwZT1ESVNUQU5ULUxJ
R0hUXSAiOworICAgIHRzIDw8ICJbYXppbXV0aD1cIiIgPDwgYXppbXV0aCgpIDw8ICJcIl0iOwor
ICAgIHRzIDw8ICJbZWxldmF0aW9uPVwiIiA8PCBlbGV2YXRpb24oKSA8PCAiXCJdIjsKKyAgICBy
ZXR1cm4gdHM7ICAKK30KKworCisKK3N0YXRpYyBRVGV4dFN0cmVhbSAmb3BlcmF0b3I8PChRVGV4
dFN0cmVhbSAmdHMsIFFQb2ludEYgcCkKK3sKKyAgICB0cyA8PCAieD0iIDw8IHAueCgpIDw8ICIg
eT0iIDw8IHAueSgpOworICAgIHJldHVybiB0czsgIAogfQogCiBzdGF0aWMgUVRleHRTdHJlYW0g
Jm9wZXJhdG9yPDwoUVRleHRTdHJlYW0gJnRzLCBLQ0JsZW5kTW9kZVR5cGUgdCkKQEAgLTI0NCwy
MCArMjY3LDI2IEBAIHN0YXRpYyBRVGV4dFN0cmVhbSAmb3BlcmF0b3I8PChRVGV4dFN0cmUKICAg
ICAgICAgY2FzZSBFTV9OT05FOgogICAgICAgICAgICAgdHMgPDwgIk5PTkUiOyBicmVhazsKICAg
ICB9Ci0gICAgcmV0dXJuIHRzOyAgICAKKyAgICByZXR1cm4gdHM7Cit9CisKK3N0YXRpYyBRVGV4
dFN0cmVhbSAmb3BlcmF0b3I8PChRVGV4dFN0cmVhbSAmdHMsIFFTaXplIHMpCit7ICAgCisgICAg
dHMgPDwgIng9IiA8PCBzLndpZHRoKCkgPDwgIiB5PSIgPDwgcy5oZWlnaHQoKTsgCisgICAgcmV0
dXJuIHRzOwogfQogCiBRVGV4dFN0cmVhbSAmS0NhbnZhc0ZFQ29udm9sdmVNYXRyaXg6OmV4dGVy
bmFsUmVwcmVzZW50YXRpb24oUVRleHRTdHJlYW0gJnRzKSBjb25zdAogewogICAgIHRzIDw8ICJb
dHlwZT1DT05WT0xWRS1NQVRSSVhdICI7CiAgICAgS0NhbnZhc0ZpbHRlckVmZmVjdDo6ZXh0ZXJu
YWxSZXByZXNlbnRhdGlvbih0cyk7Ci0gICAgdHMgPDwgIiBbb3JkZXIgeD0gIiA8PCBtX29yZGVy
WCA8PCAiIHk9IiA8PCBtX29yZGVyWSA8PCAiXSIKKyAgICB0cyA8PCAiIFtvcmRlciAiIDw8IG1f
a2VybmVsU2l6ZSA8PCAiXSIKICAgICAgICAgPDwgIiBba2VybmVsIG1hdHJpeD0iIDw8IG1fa2Vy
bmVsTWF0cml4ICA8PCAiXSIKICAgICAgICAgPDwgIiBbZGl2aXNvcj0iIDw8IG1fZGl2aXNvciA8
PCAiXSIKICAgICAgICAgPDwgIiBbYmlhcz0iIDw8IG1fYmlhcyA8PCAiXSIKLSAgICAgICAgPDwg
IiBbdGFyZ2V0IHg9ICIgPDwgbV90YXJnZXRYIDw8ICIgeT0iIDw8IG1fdGFyZ2V0WSA8PCAiXSIK
KyAgICAgICAgPDwgIiBbdGFyZ2V0ICIgPDwgbV90YXJnZXRPZmZzZXQgPDwgIl0iCiAgICAgICAg
IDw8ICIgW2VkZ2UgbW9kZT0iIDw8IG1fZWRnZU1vZGUgPDwgIl0iCi0gICAgICAgIDw8ICIgW2tl
cm5lbCB1bml0IGxlbmd0aCB4PSIgPDwgbV9rZXJuZWxVbml0TGVuZ3RoWCA8PCAiIHk9IiA8PCBt
X2tlcm5lbFVuaXRMZW5ndGhZIDw8ICJdIgorICAgICAgICA8PCAiIFtrZXJuZWwgdW5pdCBsZW5n
dGggIiA8PCBtX2tlcm5lbFVuaXRMZW5ndGggPDwgIl0iCiAgICAgICAgIDw8ICIgW3ByZXNlcnZl
IGFscGhhPSIgPDwgbV9wcmVzZXJ2ZUFscGhhIDw8ICJdIjsgICAgICAgIAogICAgcmV0dXJuIHRz
OwogfQpAQCAtMjY4LDcgKzI5Nyw3IEBAIFFUZXh0U3RyZWFtICZLQ2FudmFzRkVEaWZmdXNlTGln
aHRpbmc6OmUKICAgICBLQ2FudmFzRmlsdGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9u
KHRzKTsKICAgICB0cyA8PCAiIFtzdXJmYWNlIHNjYWxlPSIgPDwgbV9zdXJmYWNlU2NhbGUgPDwg
Il0iCiAgICAgICAgIDw8ICIgW2RpZmZ1c2UgY29uc3RhbnQ9IiA8PCBtX2RpZmZ1c2VDb25zdGFu
dCA8PCAiXSIKLSAgICAgICAgPDwgIiBba2VybmVsIHVuaXQgbGVuZ3RoIHg9IiA8PCBtX2tlcm5l
bFVuaXRMZW5ndGhYIDw8ICIgeT0iIDw8IG1fa2VybmVsVW5pdExlbmd0aFkgPDwgIl0iOworICAg
ICAgICA8PCAiIFtrZXJuZWwgdW5pdCBsZW5ndGggIiA8PCBtX2tlcm5lbFVuaXRMZW5ndGhYIDw8
ICIsICIgPDwgbV9rZXJuZWxVbml0TGVuZ3RoWSA8PCAiXSI7CiAgICByZXR1cm4gdHM7CiB9CiAK
SW5kZXg6IGtjYW52YXMvS0NhbnZhc0ZpbHRlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zz
L3Jvb3QvU1ZHU3VwcG9ydC9rY2FudmFzL0tDYW52YXNGaWx0ZXJzLmgsdgpyZXRyaWV2aW5nIHJl
dmlzaW9uIDEuMTEKZGlmZiAtcCAtdSAtcjEuMTEga2NhbnZhcy9LQ2FudmFzRmlsdGVycy5oCi0t
LSBrY2FudmFzL0tDYW52YXNGaWx0ZXJzLmgJMjMgTm92IDIwMDUgMTU6MTQ6MDUgLTAwMDAJMS4x
MQorKysga2NhbnZhcy9LQ2FudmFzRmlsdGVycy5oCTI4IE5vdiAyMDA1IDA0OjUyOjE4IC0wMDAw
CkBAIC01Myw2ICs1Myw1NSBAQCB0eXBlZGVmIGVudW0KICNpbmNsdWRlIDxxY29sb3IuaD4KICNp
bmNsdWRlIDxxc3RyaW5nbGlzdC5oPgogCitjbGFzcyBLQ2FudmFzUG9pbnQzRiB7CitwdWJsaWM6
CisgICAgS0NhbnZhc1BvaW50M0YoKTptX3goMCksIG1feSgwKSwgbV96KDApIHt9CisgICAgS0Nh
bnZhc1BvaW50M0YoZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgeik6bV94KHgpLCBtX3koeSksIG1f
eih6KSB7fQorICAgIGZsb2F0IHgoKSBjb25zdCB7IHJldHVybiBtX3g7IH0KKyAgICB2b2lkIHNl
dFgoZmxvYXQgeCkgeyBtX3ggPSB4OyB9CisgICAgCisgICAgZmxvYXQgeSgpIGNvbnN0IHsgcmV0
dXJuIG1feTsgfQorICAgIHZvaWQgc2V0WShmbG9hdCB5KSB7IG1feSA9IHk7IH0KKyAgICAKKyAg
ICBmbG9hdCB6KCkgY29uc3QgeyByZXR1cm4gbV96OyB9CisgICAgdm9pZCBzZXRaKGZsb2F0IHop
IHsgbV96ID0gejsgfQorICAgIAorICAgIHZvaWQgbm9ybWFsaXplKCk7CisgICAgCitwcml2YXRl
OgorICAgIGZsb2F0IG1feDsKKyAgICBmbG9hdCBtX3k7CisgICAgZmxvYXQgbV96OworfTsKKwor
Ly8gVGVtcG9yYXJ5IEhBQ0sKK2NsYXNzIFFQb2ludEYgeworcHVibGljOgorICAgIGZsb2F0IHgo
KSBjb25zdCB7IHJldHVybiBtX3g7IH0KKyAgICB2b2lkIHNldFgoZmxvYXQgeCkgeyBtX3ggPSB4
OyB9CisgICAgCisgICAgZmxvYXQgeSgpIGNvbnN0IHsgcmV0dXJuIG1feTsgfQorICAgIHZvaWQg
c2V0WShmbG9hdCB5KSB7IG1feSA9IHk7IH0KKyAgICAKK3ByaXZhdGU6CisgICAgZmxvYXQgbV94
OworICAgIGZsb2F0IG1feTsKK307CisKKy8vIFRlbXBvcmFyeSBIQUNLCitjbGFzcyBRU2l6ZUYg
eworcHVibGljOgorICAgIGZsb2F0IHdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV93aWR0aDsgfQor
ICAgIHZvaWQgc2V0V2lkdGgoZmxvYXQgd2lkdGgpIHsgbV93aWR0aCA9IHdpZHRoOyB9CisgICAg
CisgICAgZmxvYXQgaGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9oZWlnaHQ7IH0KKyAgICB2b2lk
IHNldEhlaWdodChmbG9hdCBoZWlnaHQpIHsgbV9oZWlnaHQgPSBoZWlnaHQ7IH0KKyAgICAKK3By
aXZhdGU6CisgICAgZmxvYXQgbV93aWR0aDsKKyAgICBmbG9hdCBtX2hlaWdodDsKK307CisKIGNs
YXNzIEtDYW52YXNGaWx0ZXJFZmZlY3Q7CiBjbGFzcyBLUmVuZGVyaW5nRGV2aWNlOwogCkBAIC0x
MzAsNTEgKzE3OSw2IEBAIHByaXZhdGU6CiAKIFFUZXh0U3RyZWFtICZvcGVyYXRvcjw8KFFUZXh0
U3RyZWFtICYsIGNvbnN0IEtDYW52YXNGaWx0ZXJFZmZlY3QgJik7CiAKLWNsYXNzIEtDYW52YXNG
RURpc3RhbnRMaWdodCA6IHB1YmxpYyBLQ2FudmFzRmlsdGVyRWZmZWN0Ci17Ci1wdWJsaWM6Ci0g
ICAgZmxvYXQgYXppbXV0aCgpIGNvbnN0IHsgcmV0dXJuIG1fYXppbXV0aDsgfQotICAgIHZvaWQg
c2V0QXppbXV0aChmbG9hdCBhemltdXRoKSB7IG1fYXppbXV0aCA9IGF6aW11dGg7IH0KLQotICAg
IGZsb2F0IGVsZXZhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZWxldmF0aW9uOyB9Ci0gICAgdm9p
ZCBzZXRFbGV2YXRpb24oZmxvYXQgZWxldmF0aW9uKSB7IG1fZWxldmF0aW9uID0gZWxldmF0aW9u
OyB9Ci0gICAgCi0gICAgLy8gRklYTUUsIG1vcmUgaGVyZS4uLgotICAgICBRVGV4dFN0cmVhbSAm
ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihRVGV4dFN0cmVhbSAmKSBjb25zdDsKLXByaXZhdGU6Ci0g
ICAgZmxvYXQgbV9hemltdXRoOwotICAgIGZsb2F0IG1fZWxldmF0aW9uOwotfTsKLQotY2xhc3Mg
S0NhbnZhc0ZFUG9pbnRMaWdodCA6IHB1YmxpYyBLQ2FudmFzRmlsdGVyRWZmZWN0Ci17Ci1wdWJs
aWM6Ci0KLSAgICBRVGV4dFN0cmVhbSAmZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihRVGV4dFN0cmVh
bSAmKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICBmbG9hdCBtX3g7Ci0gICAgZmxvYXQgbV95Owot
ICAgIGZsb2F0IG1fejsKLX07Ci0KLWNsYXNzIEtDYW52YXNGRVNwb3RMaWdodCA6IHB1YmxpYyBL
Q2FudmFzRmlsdGVyRWZmZWN0Ci17Ci1wdWJsaWM6Ci0KLSAgICBRVGV4dFN0cmVhbSAmZXh0ZXJu
YWxSZXByZXNlbnRhdGlvbihRVGV4dFN0cmVhbSAmKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICBm
bG9hdCBtX3g7Ci0gICAgZmxvYXQgbV95OwotICAgIGZsb2F0IG1fejsKLSAgICBmbG9hdCBtX3Bv
aW50c0F0WDsKLSAgICBmbG9hdCBtX3BvaW50c0F0WTsKLSAgICBmbG9hdCBtX3BvaW50c0F0WjsK
LSAgICBmbG9hdCBtX3NwZWN1bGFyRXhwb25lbnQ7Ci0gICAgZmxvYXQgbV9saW1pdGluZ0NvbmVB
bmdsZTsKLX07Ci0KIHR5cGVkZWYgZW51bSB7CiAgICAgQk1fTk9STUFMID0gMCwKICAgICBCTV9N
VUxUSVBMWSA9IDEsCkBAIC0zMzUsMzQgKzMzOSwxNDUgQEAgdHlwZWRlZiBlbnVtIHsKIGNsYXNz
IEtDYW52YXNGRUNvbnZvbHZlTWF0cml4IDogcHVibGljIEtDYW52YXNGaWx0ZXJFZmZlY3QKIHsK
IHB1YmxpYzoKKyAgICBRU2l6ZSBrZXJuZWxTaXplKCkgY29uc3QgeyByZXR1cm4gbV9rZXJuZWxT
aXplOyB9CisgICAgdm9pZCBzZXRLZXJuZWxTaXplKFFTaXplIGtlcm5lbFNpemUpIHsgbV9rZXJu
ZWxTaXplID0ga2VybmVsU2l6ZTsgfQorICAgIAorICAgIFEzVmFsdWVMaXN0PGZsb2F0PiBrZXJu
ZWwoKSBjb25zdCB7IHJldHVybiBtX2tlcm5lbE1hdHJpeDsgfQorICAgIHZvaWQgc2V0S2VybmVs
KFEzVmFsdWVMaXN0PGZsb2F0PiBrZXJuZWwpIHsgbV9rZXJuZWxNYXRyaXggPSBrZXJuZWw7IH0K
KyAgICAKKyAgICBmbG9hdCBkaXZpc29yKCkgY29uc3QgeyByZXR1cm4gbV9kaXZpc29yOyB9Cisg
ICAgdm9pZCBzZXREaXZpc29yKGZsb2F0IGRpdmlzb3IpIHsgbV9kaXZpc29yID0gZGl2aXNvcjsg
fQorICAgIAorICAgIGZsb2F0IGJpYXMoKSBjb25zdCB7IHJldHVybiBtX2JpYXM7IH0KKyAgICB2
b2lkIHNldEJpYXMoZmxvYXQgYmlhcykgeyBtX2JpYXMgPSBiaWFzOyB9CisgICAgCisgICAgUVNp
emUgdGFyZ2V0T2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV90YXJnZXRPZmZzZXQ7IH0KKyAgICB2
b2lkIHNldFRhcmdldE9mZnNldChRU2l6ZSB0YXJnZXRPZmZzZXQpIHsgbV90YXJnZXRPZmZzZXQg
PSB0YXJnZXRPZmZzZXQ7IH0KKyAgICAKKyAgICBLQ0VkZ2VNb2RlVHlwZSBlZGdlTW9kZSgpIGNv
bnN0IHsgcmV0dXJuIG1fZWRnZU1vZGU7IH0KKyAgICB2b2lkIHNldEVkZ2VNb2RlKEtDRWRnZU1v
ZGVUeXBlIGVkZ2VNb2RlKSB7IG1fZWRnZU1vZGUgPSBlZGdlTW9kZTsgfQorICAgIAorICAgIFFQ
b2ludEYga2VybmVsVW5pdExlbmd0aCgpIGNvbnN0IHtyZXR1cm4gbV9rZXJuZWxVbml0TGVuZ3Ro
OyB9CisgICAgdm9pZCBzZXRLZXJuZWxVbml0TGVuZ3RoKFFQb2ludEYga2VybmVsVW5pdExlbmd0
aCkgeyBtX2tlcm5lbFVuaXRMZW5ndGggPSBrZXJuZWxVbml0TGVuZ3RoOyB9CisgICAgCisgICAg
Ym9vbCBwcmVzZXJ2ZUFscGhhKCkgY29uc3QgeyByZXR1cm4gbV9wcmVzZXJ2ZUFscGhhOyB9Cisg
ICAgdm9pZCBzZXRQcmVzZXJ2ZUFscGhhKGJvb2wgcHJlc2VydmVBbHBoYSkgeyBtX3ByZXNlcnZl
QWxwaGEgPSBwcmVzZXJ2ZUFscGhhOyB9CiAKICAgICBRVGV4dFN0cmVhbSAmZXh0ZXJuYWxSZXBy
ZXNlbnRhdGlvbihRVGV4dFN0cmVhbSAmKSBjb25zdDsKIAogcHJpdmF0ZToKLSAgICBpbnQgbV9v
cmRlclg7Ci0gICAgaW50IG1fb3JkZXJZOworICAgIFFTaXplIG1fa2VybmVsU2l6ZTsKICAgICBR
M1ZhbHVlTGlzdDxmbG9hdD4gbV9rZXJuZWxNYXRyaXg7IC8vIG1heWJlIHNob3VsZCBiZSBhIHJl
YWwgbWF0cml4PwogICAgIGZsb2F0IG1fZGl2aXNvcjsKICAgICBmbG9hdCBtX2JpYXM7Ci0gICAg
aW50IG1fdGFyZ2V0WDsKLSAgICBpbnQgbV90YXJnZXRZOworICAgIFFTaXplIG1fdGFyZ2V0T2Zm
c2V0OwogICAgIEtDRWRnZU1vZGVUeXBlIG1fZWRnZU1vZGU7Ci0gICAgZmxvYXQgbV9rZXJuZWxV
bml0TGVuZ3RoWDsKLSAgICBmbG9hdCBtX2tlcm5lbFVuaXRMZW5ndGhZOworICAgIFFQb2ludEYg
bV9rZXJuZWxVbml0TGVuZ3RoOwogICAgIGJvb2wgbV9wcmVzZXJ2ZUFscGhhOwogfTsKIAordHlw
ZWRlZiBlbnVteworICAgIExTX0RJU1RBTlQsCisgICAgTFNfUE9JTlQsCisgICAgTFNfU1BPVAor
fSBLQ0xpZ2h0VHlwZTsKKworLy9UaGUgbGlnaHQgc291cmNlIGZvciBEaWZmdXNlL1NwZWN1bGFy
TGlnaHRpbmcKK2NsYXNzIEtDTGlnaHRTb3VyY2UKK3sKK3B1YmxpYzoKKyAgICBLQ0xpZ2h0U291
cmNlKEtDTGlnaHRUeXBlIGFfdHlwZSk6bV90eXBlKGFfdHlwZSkge30KKyAgICAKKyAgICB2aXJ0
dWFsIH5LQ0xpZ2h0U291cmNlKCkge30KKyAgICAKKyAgICBLQ0xpZ2h0VHlwZSB0eXBlKCkgY29u
c3QgeworICAgICAgICByZXR1cm4gbV90eXBlOworICAgIH0KKyAgICAKKyAgICB2aXJ0dWFsIFFU
ZXh0U3RyZWFtICZleHRlcm5hbFJlcHJlc2VudGF0aW9uKFFUZXh0U3RyZWFtICYpIGNvbnN0ID0g
MDsKKyAgICAKK3ByaXZhdGU6CisgICAgS0NMaWdodFR5cGUgbV90eXBlOworfTsKKworY2xhc3Mg
S0NEaXN0YW50TGlnaHRTb3VyY2UgOiBwdWJsaWMgS0NMaWdodFNvdXJjZQoreworcHVibGljOgor
ICAgIEtDRGlzdGFudExpZ2h0U291cmNlKGZsb2F0IGF6aW11dGgsIGZsb2F0IGVsZXZhdGlvbik6
CisgICAgICAgIEtDTGlnaHRTb3VyY2UoTFNfRElTVEFOVCksIG1fYXppbXV0aChhemltdXRoKSwg
bV9lbGV2YXRpb24oZWxldmF0aW9uKSB7fQorICAgIAorICAgIGZsb2F0IGF6aW11dGgoKSBjb25z
dHsgcmV0dXJuIG1fYXppbXV0aDsgfQorICAgIAorICAgIGZsb2F0IGVsZXZhdGlvbigpIGNvbnN0
eyByZXR1cm4gbV9lbGV2YXRpb247IH0KKyAgICAKKyAgICB2aXJ0dWFsIFFUZXh0U3RyZWFtICZl
eHRlcm5hbFJlcHJlc2VudGF0aW9uKFFUZXh0U3RyZWFtICYpIGNvbnN0OworICAgIAorcHJpdmF0
ZToKKyAgICBmbG9hdCBtX2F6aW11dGg7CisgICAgZmxvYXQgbV9lbGV2YXRpb247Cit9OworCitj
bGFzcyBLQ1BvaW50TGlnaHRTb3VyY2UgOiBwdWJsaWMgS0NMaWdodFNvdXJjZQoreworcHVibGlj
OgorICAgIEtDUG9pbnRMaWdodFNvdXJjZShLQ2FudmFzUG9pbnQzRiAmIHBvc2l0aW9uKTpLQ0xp
Z2h0U291cmNlKExTX1BPSU5UKSwgbV9wb3NpdGlvbihwb3NpdGlvbikgeyB9CisgICAgCisgICAg
Y29uc3QgS0NhbnZhc1BvaW50M0YgJiBwb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fcG9zaXRp
b247IH0KKyAgICAKKyAgICB2aXJ0dWFsIFFUZXh0U3RyZWFtICZleHRlcm5hbFJlcHJlc2VudGF0
aW9uKFFUZXh0U3RyZWFtICYpIGNvbnN0OworCitwcml2YXRlOgorICAgIEtDYW52YXNQb2ludDNG
IG1fcG9zaXRpb247Cit9OworCitjbGFzcyBLQ1Nwb3RMaWdodFNvdXJjZSA6IHB1YmxpYyBLQ0xp
Z2h0U291cmNlCit7CitwdWJsaWM6CisgICAgS0NTcG90TGlnaHRTb3VyY2UoS0NhbnZhc1BvaW50
M0YgJiBwb3NpdGlvbiwgS0NhbnZhc1BvaW50M0YgJiBkaXJlY3Rpb24sIAorICAgICAgICBmbG9h
dCBzcGVjdWxhckV4cG9uZW50LCBmbG9hdCBsaW1pdGluZ0NvbmVBbmdsZSk6S0NMaWdodFNvdXJj
ZShMU19TUE9UKSwgCisgICAgICAgIG1fcG9zaXRpb24ocG9zaXRpb24pLCBtX2RpcmVjdGlvbihk
aXJlY3Rpb24pLCBtX3NwZWN1bGFyRXhwb25lbnQoc3BlY3VsYXJFeHBvbmVudCksIG1fbGltaXRp
bmdDb25lQW5nbGUobGltaXRpbmdDb25lQW5nbGUpIHsgfQorICAgIGNvbnN0IEtDYW52YXNQb2lu
dDNGICYgcG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX3Bvc2l0aW9uOyB9CisgICAgY29uc3Qg
S0NhbnZhc1BvaW50M0YgJiBkaXJlY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2RpcmVjdGlvbjsg
fQorICAgIGZsb2F0IHNwZWN1bGFyRXhwb25lbnQoKSBjb25zdCB7IHJldHVybiBtX3NwZWN1bGFy
RXhwb25lbnQ7IH0KKyAgICBmbG9hdCBsaW1pdGluZ0NvbmVBbmdsZSgpIGNvbnN0IHsgcmV0dXJu
IG1fbGltaXRpbmdDb25lQW5nbGU7IH0gICAgCisgICAgdmlydHVhbCBRVGV4dFN0cmVhbSAmZXh0
ZXJuYWxSZXByZXNlbnRhdGlvbihRVGV4dFN0cmVhbSAmKSBjb25zdDsKK3ByaXZhdGU6CisgICAg
S0NhbnZhc1BvaW50M0YgbV9wb3NpdGlvbjsKKyAgICBLQ2FudmFzUG9pbnQzRiBtX2RpcmVjdGlv
bjsKKyAgICBmbG9hdCAgICAgICAgICBtX3NwZWN1bGFyRXhwb25lbnQ7CisgICAgZmxvYXQgICAg
ICAgICAgbV9saW1pdGluZ0NvbmVBbmdsZTsKK307CisKIGNsYXNzIEtDYW52YXNGRURpZmZ1c2VM
aWdodGluZyA6IHB1YmxpYyBLQ2FudmFzRmlsdGVyRWZmZWN0CiB7CiBwdWJsaWM6CisgICAgUUNv
bG9yIGxpZ2h0aW5nQ29sb3IoKSBjb25zdCB7IHJldHVybiBtX2xpZ2h0aW5nQ29sb3I7IH0KKyAg
ICB2b2lkIHNldExpZ2h0aW5nQ29sb3IoY29uc3QgUUNvbG9yICZsaWdodGluZ0NvbG9yKSB7IG1f
bGlnaHRpbmdDb2xvciA9IGxpZ2h0aW5nQ29sb3I7IH0KIAorICAgIGZsb2F0IHN1cmZhY2VTY2Fs
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3VyZmFjZVNjYWxlOyB9CisgICAgdm9pZCBzZXRTdXJmYWNl
U2NhbGUoZmxvYXQgc3VyZmFjZVNjYWxlKSB7IG1fc3VyZmFjZVNjYWxlID0gc3VyZmFjZVNjYWxl
OyB9CisgICAgCisgICAgZmxvYXQgZGlmZnVzZUNvbnN0YW50KCkgY29uc3QgeyByZXR1cm4gbV9k
aWZmdXNlQ29uc3RhbnQ7IH0KKyAgICB2b2lkIHNldERpZmZ1c2VDb25zdGFudChmbG9hdCBkaWZm
dXNlQ29uc3RhbnQpIHsgbV9kaWZmdXNlQ29uc3RhbnQgPSBkaWZmdXNlQ29uc3RhbnQ7IH0KKyAg
ICAKKyAgICBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWCgpIGNvbnN0IHsgcmV0dXJuIG1fa2VybmVs
VW5pdExlbmd0aFg7IH0KKyAgICB2b2lkIHNldEtlcm5lbFVuaXRMZW5ndGhYKGZsb2F0IGtlcm5l
bFVuaXRMZW5ndGhYKSB7IG1fa2VybmVsVW5pdExlbmd0aFggPSBrZXJuZWxVbml0TGVuZ3RoWDsg
fQorICAgIAorICAgIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZKCkgY29uc3QgeyByZXR1cm4gbV9r
ZXJuZWxVbml0TGVuZ3RoWTsgfQorICAgIHZvaWQgc2V0S2VybmVsVW5pdExlbmd0aFkoZmxvYXQg
a2VybmVsVW5pdExlbmd0aFkpIHsgbV9rZXJuZWxVbml0TGVuZ3RoWSA9IGtlcm5lbFVuaXRMZW5n
dGhZOyB9CisKKyAgICBjb25zdCBLQ0xpZ2h0U291cmNlICogbGlnaHRTb3VyY2UoKSBjb25zdCB7
IHJldHVybiBtX2xpZ2h0U291cmNlOyB9CisgICAgdm9pZCBzZXRMaWdodFNvdXJjZShLQ0xpZ2h0
U291cmNlICogbGlnaHRTb3VyY2UpIHsgbV9saWdodFNvdXJjZSA9IGxpZ2h0U291cmNlOyB9Cisg
ICAgCiAgICAgUVRleHRTdHJlYW0gJmV4dGVybmFsUmVwcmVzZW50YXRpb24oUVRleHRTdHJlYW0g
JikgY29uc3Q7CiAKIHByaXZhdGU6CisgICAgUUNvbG9yIG1fbGlnaHRpbmdDb2xvcjsKICAgICBm
bG9hdCBtX3N1cmZhY2VTY2FsZTsKICAgICBmbG9hdCBtX2RpZmZ1c2VDb25zdGFudDsKICAgICBm
bG9hdCBtX2tlcm5lbFVuaXRMZW5ndGhYOwogICAgIGZsb2F0IG1fa2VybmVsVW5pdExlbmd0aFk7
CisgICAgS0NMaWdodFNvdXJjZSAqIG1fbGlnaHRTb3VyY2U7CiB9OwogCiB0eXBlZGVmIGVudW0g
ewpAQCAtMzkzLDcgKzUwOCw2IEBAIHB1YmxpYzoKICAgICBRQ29sb3IgZmxvb2RDb2xvcigpIGNv
bnN0IHsgcmV0dXJuIG1fZmxvb2RDb2xvcjsgfQogICAgIHZvaWQgc2V0Rmxvb2RDb2xvcihjb25z
dCBRQ29sb3IgJmNvbG9yKSB7IG1fZmxvb2RDb2xvciA9IGNvbG9yOyB9CiAKLQogICAgIGZsb2F0
IGZsb29kT3BhY2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1fZmxvb2RPcGFjaXR5OyB9CiAgICAgdm9p
ZCBzZXRGbG9vZE9wYWNpdHkoZmxvYXQgZmxvb2RPcGFjaXR5KSB7IG1fZmxvb2RPcGFjaXR5ID0g
Zmxvb2RPcGFjaXR5OyB9CiAKQEAgLTQ5NCwxMyArNjA4LDM3IEBAIHByaXZhdGU6CiBjbGFzcyBL
Q2FudmFzRkVTcGVjdWxhckxpZ2h0aW5nIDogcHVibGljIEtDYW52YXNGaWx0ZXJFZmZlY3QKIHsK
IHB1YmxpYzoKKyAgICBRQ29sb3IgbGlnaHRpbmdDb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fbGln
aHRpbmdDb2xvcjsgfQorICAgIHZvaWQgc2V0TGlnaHRpbmdDb2xvcihjb25zdCBRQ29sb3IgJmxp
Z2h0aW5nQ29sb3IpIHsgbV9saWdodGluZ0NvbG9yID0gbGlnaHRpbmdDb2xvcjsgfQogCisgICAg
ZmxvYXQgc3VyZmFjZVNjYWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdXJmYWNlU2NhbGU7IH0KKyAg
ICB2b2lkIHNldFN1cmZhY2VTY2FsZShmbG9hdCBzdXJmYWNlU2NhbGUpIHsgbV9zdXJmYWNlU2Nh
bGUgPSBzdXJmYWNlU2NhbGU7IH0KKyAgICAKKyAgICBmbG9hdCBzcGVjdWxhckNvbnN0YW50KCkg
Y29uc3QgeyByZXR1cm4gbV9zcGVjdWxhckNvbnN0YW50OyB9CisgICAgdm9pZCBzZXRTcGVjdWxh
ckNvbnN0YW50KGZsb2F0IHNwZWN1bGFyQ29uc3RhbnQpIHsgbV9zcGVjdWxhckNvbnN0YW50ID0g
c3BlY3VsYXJDb25zdGFudDsgfQorICAgIAorICAgIGZsb2F0IHNwZWN1bGFyRXhwb25lbnQoKSBj
b25zdCB7IHJldHVybiBtX3NwZWN1bGFyRXhwb25lbnQ7IH0KKyAgICB2b2lkIHNldFNwZWN1bGFy
RXhwb25lbnQoZmxvYXQgc3BlY3VsYXJFeHBvbmVudCkgeyBtX3NwZWN1bGFyRXhwb25lbnQgPSBz
cGVjdWxhckV4cG9uZW50OyB9CisgICAgCisgICAgZmxvYXQga2VybmVsVW5pdExlbmd0aFgoKSBj
b25zdCB7IHJldHVybiBtX2tlcm5lbFVuaXRMZW5ndGhYOyB9CisgICAgdm9pZCBzZXRLZXJuZWxV
bml0TGVuZ3RoWChmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWCkgeyBtX2tlcm5lbFVuaXRMZW5ndGhY
ID0ga2VybmVsVW5pdExlbmd0aFg7IH0KKyAgICAKKyAgICBmbG9hdCBrZXJuZWxVbml0TGVuZ3Ro
WSgpIGNvbnN0IHsgcmV0dXJuIG1fa2VybmVsVW5pdExlbmd0aFk7IH0KKyAgICB2b2lkIHNldEtl
cm5lbFVuaXRMZW5ndGhZKGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZKSB7IG1fa2VybmVsVW5pdExl
bmd0aFkgPSBrZXJuZWxVbml0TGVuZ3RoWTsgfQorICAgIAorICAgIGNvbnN0IEtDTGlnaHRTb3Vy
Y2UgKiBsaWdodFNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGlnaHRTb3VyY2U7IH0KKyAgICB2
b2lkIHNldExpZ2h0U291cmNlKEtDTGlnaHRTb3VyY2UgKiBsaWdodFNvdXJjZSkgeyBtX2xpZ2h0
U291cmNlID0gbGlnaHRTb3VyY2U7IH0KKyAgICAKICAgICBRVGV4dFN0cmVhbSAmZXh0ZXJuYWxS
ZXByZXNlbnRhdGlvbihRVGV4dFN0cmVhbSAmKSBjb25zdDsKICAgICAKIHByaXZhdGU6CisgICAg
UUNvbG9yIG1fbGlnaHRpbmdDb2xvcjsKICAgICBmbG9hdCBtX3N1cmZhY2VTY2FsZTsKICAgICBm
bG9hdCBtX3NwZWN1bGFyQ29uc3RhbnQ7CiAgICAgZmxvYXQgbV9zcGVjdWxhckV4cG9uZW50Owor
ICAgIGZsb2F0IG1fa2VybmVsVW5pdExlbmd0aFg7CisgICAgZmxvYXQgbV9rZXJuZWxVbml0TGVu
Z3RoWTsKKyAgICBLQ0xpZ2h0U291cmNlICogbV9saWdodFNvdXJjZTsKIH07CiAKIGNsYXNzIEtD
YW52YXNGRVRpbGUgOiBwdWJsaWMgS0NhbnZhc0ZpbHRlckVmZmVjdCB7fTsKSW5kZXg6IGtjYW52
YXMvS0NhbnZhc1RyZWVEZWJ1Zy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NW
R1N1cHBvcnQva2NhbnZhcy9LQ2FudmFzVHJlZURlYnVnLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNp
b24gMS4xMApkaWZmIC1wIC11IC1yMS4xMCBrY2FudmFzL0tDYW52YXNUcmVlRGVidWcuY3BwCi0t
LSBrY2FudmFzL0tDYW52YXNUcmVlRGVidWcuY3BwCTI3IE5vdiAyMDA1IDExOjAyOjE1IC0wMDAw
CTEuMTAKKysrIGtjYW52YXMvS0NhbnZhc1RyZWVEZWJ1Zy5jcHAJMjggTm92IDIwMDUgMDQ6NTI6
MTggLTAwMDAKQEAgLTUzLDcgKzUzLDcgQEAKIAogI2luY2x1ZGUgPGtkb20vRE9NU3RyaW5nLmg+
CiAjaW5jbHVkZSAiZG9tX2F0b21pY3N0cmluZy5oIgotI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgor
I2luY2x1ZGUgImh0bWxuYW1lcy5oIgogCiAjaW5jbHVkZSA8cXRleHRzdHJlYW0uaD4KIApJbmRl
eDoga2NhbnZhcy9kZXZpY2UvcXVhcnR6L0tDYW52YXNGaWx0ZXJRdWFydHouaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rY2FudmFzL2RldmljZS9xdWFydHovS0Nh
bnZhc0ZpbHRlclF1YXJ0ei5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjcKZGlmZiAtcCAtdSAt
cjEuNyBrY2FudmFzL2RldmljZS9xdWFydHovS0NhbnZhc0ZpbHRlclF1YXJ0ei5oCi0tLSBrY2Fu
dmFzL2RldmljZS9xdWFydHovS0NhbnZhc0ZpbHRlclF1YXJ0ei5oCTIzIE5vdiAyMDA1IDE1OjE0
OjA3IC0wMDAwCTEuNworKysga2NhbnZhcy9kZXZpY2UvcXVhcnR6L0tDYW52YXNGaWx0ZXJRdWFy
dHouaAkyOCBOb3YgMjAwNSAwNDo1MjoxOCAtMDAwMApAQCAtNzUsMTEgKzc1LDIxIEBAIHB1Ymxp
YzoKIC8vICAgIHZpcnR1YWwgQ0lGaWx0ZXIgKmdldENJRmlsdGVyKEtDYW52YXNGaWx0ZXJRdWFy
dHogKnF1YXJ0ekZpbHRlcikgY29uc3Q7CiAvL307CiAKK2NsYXNzIEtDYW52YXNGRUNvbnZvbHZl
TWF0cml4UXVhcnR6IDogcHVibGljIEtDYW52YXNGRUNvbnZvbHZlTWF0cml4IHsKK3B1YmxpYzoK
KyAgICB2aXJ0dWFsIENJRmlsdGVyICpnZXRDSUZpbHRlcihLQ2FudmFzRmlsdGVyUXVhcnR6ICpx
dWFydHpGaWx0ZXIpIGNvbnN0OworfTsKKwogY2xhc3MgS0NhbnZhc0ZFQ29tcG9zaXRlUXVhcnR6
IDogcHVibGljIEtDYW52YXNGRUNvbXBvc2l0ZSB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCBDSUZp
bHRlciAqZ2V0Q0lGaWx0ZXIoS0NhbnZhc0ZpbHRlclF1YXJ0eiAqcXVhcnR6RmlsdGVyKSBjb25z
dDsKIH07CiAKK2NsYXNzIEtDYW52YXNGRURpZmZ1c2VMaWdodGluZ1F1YXJ0eiA6IHB1YmxpYyBL
Q2FudmFzRkVEaWZmdXNlTGlnaHRpbmcgeworcHVibGljOgorICAgIHZpcnR1YWwgQ0lGaWx0ZXIg
KmdldENJRmlsdGVyKEtDYW52YXNGaWx0ZXJRdWFydHogKnF1YXJ0ekZpbHRlcikgY29uc3Q7Cit9
OworCiBjbGFzcyBLQ2FudmFzRkVGbG9vZFF1YXJ0eiA6IHB1YmxpYyBLQ2FudmFzRkVGbG9vZCB7
CiBwdWJsaWM6CiAgICAgdmlydHVhbCBDSUZpbHRlciAqZ2V0Q0lGaWx0ZXIoS0NhbnZhc0ZpbHRl
clF1YXJ0eiAqcXVhcnR6RmlsdGVyKSBjb25zdDsKQEAgLTEwNSw2ICsxMTUsMTEgQEAgcHVibGlj
OgogICAgIHZpcnR1YWwgQ0lGaWx0ZXIgKmdldENJRmlsdGVyKEtDYW52YXNGaWx0ZXJRdWFydHog
KnF1YXJ0ekZpbHRlcikgY29uc3Q7CiB9OwogCitjbGFzcyBLQ2FudmFzRkVTcGVjdWxhckxpZ2h0
aW5nUXVhcnR6IDogcHVibGljIEtDYW52YXNGRVNwZWN1bGFyTGlnaHRpbmcgeworcHVibGljOgor
ICAgIHZpcnR1YWwgQ0lGaWx0ZXIgKmdldENJRmlsdGVyKEtDYW52YXNGaWx0ZXJRdWFydHogKnF1
YXJ0ekZpbHRlcikgY29uc3Q7Cit9OworCiBjbGFzcyBLQ2FudmFzRkVUaWxlUXVhcnR6IDogcHVi
bGljIEtDYW52YXNGRVRpbGUgewogcHVibGljOgogICAgIHZpcnR1YWwgQ0lGaWx0ZXIgKmdldENJ
RmlsdGVyKEtDYW52YXNGaWx0ZXJRdWFydHogKnF1YXJ0ekZpbHRlcikgY29uc3Q7CkluZGV4OiBr
Y2FudmFzL2RldmljZS9xdWFydHovS0NhbnZhc0ZpbHRlclF1YXJ0ei5tbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJD
UyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rY2FudmFzL2RldmljZS9xdWFydHovS0NhbnZh
c0ZpbHRlclF1YXJ0ei5tbSx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xNgpkaWZmIC1wIC11IC1y
MS4xNiBrY2FudmFzL2RldmljZS9xdWFydHovS0NhbnZhc0ZpbHRlclF1YXJ0ei5tbQotLS0ga2Nh
bnZhcy9kZXZpY2UvcXVhcnR6L0tDYW52YXNGaWx0ZXJRdWFydHoubW0JMjcgTm92IDIwMDUgMTE6
MDI6MTYgLTAwMDAJMS4xNgorKysga2NhbnZhcy9kZXZpY2UvcXVhcnR6L0tDYW52YXNGaWx0ZXJR
dWFydHoubW0JMjggTm92IDIwMDUgMDQ6NTI6MTkgLTAwMDAKQEAgLTMxLDYgKzMxLDEzIEBACiAj
aW1wb3J0ICJLUmVuZGVyaW5nRGV2aWNlUXVhcnR6LmgiCiAjaW1wb3J0ICJRdWFydHpTdXBwb3J0
LmgiCiAjaW1wb3J0ICJLV1FFeGNlcHRpb25zLmgiCisjaW1wb3J0ICJXS0RpZmZ1c2VMaWdodGlu
Z0ZpbHRlci5oIgorI2ltcG9ydCAiV0tTcGVjdWxhckxpZ2h0aW5nRmlsdGVyLmgiCisjaW1wb3J0
ICJXS1Nwb3RMaWdodEZpbHRlci5oIgorI2ltcG9ydCAiV0tQb2ludExpZ2h0RmlsdGVyLmgiCisj
aW1wb3J0ICJXS0Rpc3RhbnRMaWdodEZpbHRlci5oIgorI2ltcG9ydCAiV0tOb3JtYWxNYXBGaWx0
ZXIuaCIKKyNpbXBvcnQgIldLQXJpdGhtZXRpY0ZpbHRlci5oIgogCiAjaW1wb3J0IDxRdWFydHpD
b3JlL1F1YXJ0ekNvcmUuaD4KIApAQCAtNDAsMTMgKzQ3LDIyIEBACiAKIHN0YXRpYyBRU3RyaW5n
IEtDUHJldmlvdXNGaWx0ZXJPdXRwdXROYW1lID0gUVN0cmluZzo6ZnJvbUxhdGluMSgiX19wcmV2
aW91c091dHB1dF9fIik7CiAKLS8vc3RhdGljIENJQ29sb3IgKmNpQ29sb3IoY29uc3QgUUNvbG9y
ICZjKQotLy97Ci0vLyAgICBDR0NvbG9yUmVmIGNvbG9yQ0cgPSBjZ0NvbG9yKGMpOwotLy8gICAg
Q0lDb2xvciAqY29sb3JDSSA9IFtDSUNvbG9yIGNvbG9yV2l0aENHQ29sb3I6Y29sb3JDR107Ci0v
LyAgICBDR0NvbG9yUmVsZWFzZShjb2xvckNHKTsKLS8vICAgIHJldHVybiBjb2xvckNJOwotLy99
CitzdGF0aWMgaW5saW5lIENJQ29sb3IgKmNpQ29sb3IoY29uc3QgUUNvbG9yICZjKQoreworICAg
IENHQ29sb3JSZWYgY29sb3JDRyA9IGNnQ29sb3IoYyk7CisgICAgQ0lDb2xvciAqY29sb3JDSSA9
IFtDSUNvbG9yIGNvbG9yV2l0aENHQ29sb3I6Y29sb3JDR107CisgICAgQ0dDb2xvclJlbGVhc2Uo
Y29sb3JDRyk7CisgICAgcmV0dXJuIGNvbG9yQ0k7Cit9CisKK3N0YXRpYyBpbmxpbmUgQ0lWZWN0
b3IgKmNpVmVjdG9yKEtDYW52YXNQb2ludDNGIHBvaW50KSB7CisgICAgcmV0dXJuIFtDSVZlY3Rv
ciB2ZWN0b3JXaXRoWDpwb2ludC54KCkgWTpwb2ludC55KCkgWjpwb2ludC56KCldOworfQorCitz
dGF0aWMgaW5saW5lIENJVmVjdG9yICpjaVZlY3RvcihRUG9pbnRGIHBvaW50KSB7CisgICAgcmV0
dXJuIFtDSVZlY3RvciB2ZWN0b3JXaXRoWDpwb2ludC54KCkgWTpwb2ludC55KCldOworfQorCiAK
IEtDYW52YXNGaWx0ZXJRdWFydHo6OktDYW52YXNGaWx0ZXJRdWFydHooKSA6IG1fZmlsdGVyQ0lD
b250ZXh0KDApLCBtX2ZpbHRlckNHTGF5ZXIoMCksIG1faW1hZ2VzQnlOYW1lKDApCiB7CkBAIC0y
MjQsNyArMjQwLDYgQEAgQ0lJbWFnZSAqS0NhbnZhc0ZpbHRlclF1YXJ0ejo6aW5wdXRJbWFnZQog
I3ByYWdtYSBtYXJrIC0KICNwcmFnbWEgbWFyayBGaWx0ZXIgRWxlbWVudHMKIAotCiAjZGVmaW5l
IEZFX1FVQVJUWl9TRVRVUF9JTlBVVChuYW1lKSBcCiAgICAgQ0lJbWFnZSAqaW5wdXRJbWFnZSA9
IHF1YXJ0ekZpbHRlci0+aW5wdXRJbWFnZSh0aGlzKTsgXAogICAgIEZFX1FVQVJUWl9DSEVDS19J
TlBVVChpbnB1dEltYWdlKSBcCkBAIC00MjEsMjQgKzQzNiwyNSBAQCBDSUZpbHRlciAqS0NhbnZh
c0ZFQ29tcG9zaXRlUXVhcnR6OjpnZXRDCiAJS1dRX0JMT0NLX0VYQ0VQVElPTlMKIAlzd2l0Y2go
b3BlcmF0aW9uKCkpIHsKIAljYXNlIENPX09WRVI6Ci0JCWZpbHRlciA9IFtDSUZpbHRlciBmaWx0
ZXJXaXRoTmFtZTpAIkNJU291cmNlT3ZlckNvbXBvc2l0aW5nIl07Ci0JCWJyZWFrOworICAgICAg
ICAgICAgZmlsdGVyID0gW0NJRmlsdGVyIGZpbHRlcldpdGhOYW1lOkAiQ0lTb3VyY2VPdmVyQ29t
cG9zaXRpbmciXTsKKyAgICAgICAgICAgIGJyZWFrOwogCWNhc2UgQ09fSU46Ci0JCWZpbHRlciA9
IFtDSUZpbHRlciBmaWx0ZXJXaXRoTmFtZTpAIkNJU291cmNlSW5Db21wb3NpdGluZyJdOwotCQli
cmVhazsKKyAgICAgICAgICAgIGZpbHRlciA9IFtDSUZpbHRlciBmaWx0ZXJXaXRoTmFtZTpAIkNJ
U291cmNlSW5Db21wb3NpdGluZyJdOworICAgICAgICAgICAgYnJlYWs7CiAJY2FzZSBDT19PVVQ6
Ci0JCWZpbHRlciA9IFtDSUZpbHRlciBmaWx0ZXJXaXRoTmFtZTpAIkNJU291cmNlT3V0Q29tcG9z
aXRpbmciXTsKLQkJYnJlYWs7CisgICAgICAgICAgICBmaWx0ZXIgPSBbQ0lGaWx0ZXIgZmlsdGVy
V2l0aE5hbWU6QCJDSVNvdXJjZU91dENvbXBvc2l0aW5nIl07CisgICAgICAgICAgICBicmVhazsK
IAljYXNlIENPX0FUT1A6Ci0JCWZpbHRlciA9IFtDSUZpbHRlciBmaWx0ZXJXaXRoTmFtZTpAIkNJ
U291cmNlQXRvcENvbXBvc2l0aW5nIl07Ci0JCWJyZWFrOworICAgICAgICAgICAgZmlsdGVyID0g
W0NJRmlsdGVyIGZpbHRlcldpdGhOYW1lOkAiQ0lTb3VyY2VBdG9wQ29tcG9zaXRpbmciXTsKKyAg
ICAgICAgICAgIGJyZWFrOwogCWNhc2UgQ09fWE9SOgotCQkvL0ZJWE1FOiBJJ20gbm90IHN1cmUg
dGhpcyBpcyByaWdodC4uLgotCQlmaWx0ZXIgPSBbQ0lGaWx0ZXIgZmlsdGVyV2l0aE5hbWU6QCJD
SUV4Y2x1c2lvbkJsZW5kTW9kZSJdOworICAgICAgICAgICAgLy9GSVhNRTogSSdtIG5vdCBzdXJl
IHRoaXMgaXMgcmlnaHQuLi4KKyAgICAgICAgICAgIGZpbHRlciA9IFtDSUZpbHRlciBmaWx0ZXJX
aXRoTmFtZTpAIkNJRXhjbHVzaW9uQmxlbmRNb2RlIl07CisgICAgICAgICAgICBicmVhazsKIAlj
YXNlIENPX0FSSVRITUVUSUM6Ci0JCU5TTG9nKEAiV2FybmluZzogYXJpdGhtZXRpYyBjb21wb3Np
dGluZyBtb2RlIG5vdCB5ZXQgc3VwcG9ydGVkIGluIFF1YXJ0ei4iKTsKLQkJLy8gdGhpcyB3b3Vs
ZCBiZSB3aGVyZSB3ZSB1c2UgdGhlIGsgdmFsdWVzLi4uCi0JCXJldHVybiBuaWw7CisgICAgICAg
ICAgICBbV0tBcml0aG1ldGljRmlsdGVyIGNsYXNzXTsKKyAgICAgICAgICAgIGZpbHRlciA9IFtD
SUZpbHRlciBmaWx0ZXJXaXRoTmFtZTpAIldLQXJpdGhtZXRpY0ZpbHRlciJdOworICAgICAgICAg
ICAgYnJlYWs7CiAJfQogCQogCVtmaWx0ZXIgc2V0RGVmYXVsdHNdOwpAQCAtNDQ4LDEwICs0NjQs
MTM3IEBAIENJRmlsdGVyICpLQ2FudmFzRkVDb21wb3NpdGVRdWFydHo6OmdldEMKIAlGRV9RVUFS
VFpfQ0hFQ0tfSU5QVVQoYmFja2dyb3VuZEltYWdlKTsKIAlbZmlsdGVyIHNldFZhbHVlOmlucHV0
SW1hZ2UgZm9yS2V5OkAiaW5wdXRJbWFnZSJdOwogCVtmaWx0ZXIgc2V0VmFsdWU6YmFja2dyb3Vu
ZEltYWdlIGZvcktleTpAImlucHV0QmFja2dyb3VuZEltYWdlIl07Ci0JCisgICAgICAgIC8vRklY
TUU6IHRoaXMgc2VlbXMgdWdseQorCWlmIChvcGVyYXRpb24oKSA9PSBDT19BUklUSE1FVElDKSB7
CisgICAgICAgICAgICBbZmlsdGVyIHNldFZhbHVlOltOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6
azEoKV0gZm9yS2V5OkAiaW5wdXRLMSJdOworICAgICAgICAgICAgW2ZpbHRlciBzZXRWYWx1ZTpb
TlNOdW1iZXIgbnVtYmVyV2l0aEZsb2F0OmsyKCldIGZvcktleTpAImlucHV0SzIiXTsKKyAgICAg
ICAgICAgIFtmaWx0ZXIgc2V0VmFsdWU6W05TTnVtYmVyIG51bWJlcldpdGhGbG9hdDprMygpXSBm
b3JLZXk6QCJpbnB1dEszIl07CisgICAgICAgICAgICBbZmlsdGVyIHNldFZhbHVlOltOU051bWJl
ciBudW1iZXJXaXRoRmxvYXQ6azQoKV0gZm9yS2V5OkAiaW5wdXRLNCJdOworICAgICAgICB9CiAJ
RkVfUVVBUlRaX09VVFBVVF9SRVRVUk47CiB9CiAKK3N0YXRpYyBpbmxpbmUgQ0lGaWx0ZXIgKmdl
dFBvaW50TGlnaHRWZWN0b3JzKENJRmlsdGVyICogbm9ybWFscywgQ0lWZWN0b3IgKiBsaWdodFBv
c2l0aW9uLCBmbG9hdCBzdXJmYWNlU2NhbGUpCit7CisgICAgQ0lGaWx0ZXIgKmZpbHRlciA9IG5p
bDsKKyAgICBLV1FfQkxPQ0tfRVhDRVBUSU9OUworICAgIGZpbHRlciA9IFtDSUZpbHRlciBmaWx0
ZXJXaXRoTmFtZTpAIldLUG9pbnRMaWdodCJdOworICAgIGlmICghZmlsdGVyKQorICAgICAgICBy
ZXR1cm4gbmlsOworICAgIFtmaWx0ZXIgc2V0RGVmYXVsdHNdOworICAgIFtmaWx0ZXIgc2V0VmFs
dWU6W25vcm1hbHMgdmFsdWVGb3JLZXk6IEAib3V0cHV0SW1hZ2UiXSBmb3JLZXk6QCJpbnB1dE5v
cm1hbE1hcCJdOworICAgIFtmaWx0ZXIgc2V0VmFsdWU6bGlnaHRQb3NpdGlvbiBmb3JLZXk6QCJp
bnB1dExpZ2h0UG9zaXRpb24iXTsgICAgCisgICAgW2ZpbHRlciBzZXRWYWx1ZTpbTlNOdW1iZXIg
bnVtYmVyV2l0aEZsb2F0OnN1cmZhY2VTY2FsZV0gZm9yS2V5OkAiaW5wdXRTdXJmYWNlU2NhbGUi
XTsKKyAgICByZXR1cm4gZmlsdGVyOyAKKyAgICBLV1FfVU5CTE9DS19FWENFUFRJT05TIAorICAg
IHJldHVybiBuaWw7Cit9CitzdGF0aWMgQ0lGaWx0ZXIgKmdldExpZ2h0VmVjdG9ycyhDSUZpbHRl
ciAqIG5vcm1hbHMsIGNvbnN0IEtDTGlnaHRTb3VyY2UgKiBsaWdodCwgZmxvYXQgc3VyZmFjZVNj
YWxlKQoreworICAgIC8vRklYTUU6IHRoZXJlIGhhcyB0byBiZSBhIGJldHRlciB3YXkgb2YgbWFr
aW5nIHN1cmUgdGhlc2UgZ2V0IGluaXRpYWxpc2VkCisgICAgW1dLRGlzdGFudExpZ2h0RmlsdGVy
IGNsYXNzXTsKKyAgICBbV0tQb2ludExpZ2h0RmlsdGVyIGNsYXNzXTsKKyAgICBbV0tTcG90TGln
aHRGaWx0ZXIgY2xhc3NdOworICAgIAorICAgIENJRmlsdGVyICpmaWx0ZXIgPSBuaWw7CisgICAg
S1dRX0JMT0NLX0VYQ0VQVElPTlMKKyAgICAKKyAgICBzd2l0Y2ggKGxpZ2h0LT50eXBlKCkpIHsK
KyAgICAgICAgY2FzZSBMU19ESVNUQU5UOgorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBL
Q0Rpc3RhbnRMaWdodFNvdXJjZSAqZGxpZ2h0ID0gc3RhdGljX2Nhc3Q8Y29uc3QgS0NEaXN0YW50
TGlnaHRTb3VyY2UgKj4obGlnaHQpOworICAgICAgICAgICAgCisgICAgICAgICAgICBmaWx0ZXIg
PSBbQ0lGaWx0ZXIgZmlsdGVyV2l0aE5hbWU6QCJXS0Rpc3RhbnRMaWdodCJdOworICAgICAgICAg
ICAgaWYgKCFmaWx0ZXIpCisgICAgICAgICAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAgICAgICAg
IFtmaWx0ZXIgc2V0RGVmYXVsdHNdOworICAgICAgICAgICAgCisgICAgICAgICAgICBmbG9hdCBh
emltdXRoID0gZGxpZ2h0LT5hemltdXRoKCk7CisgICAgICAgICAgICBmbG9hdCBlbGV2YXRpb24g
PSBkbGlnaHQtPmVsZXZhdGlvbigpOworICAgICAgICAgICAgYXppbXV0aD1kZWcycmFkKGF6aW11
dGgpOworICAgICAgICAgICAgZWxldmF0aW9uPWRlZzJyYWQoZWxldmF0aW9uKTsKKyAgICAgICAg
ICAgIGZsb2F0IEx4ID0gY29zKGF6aW11dGgpKmNvcyhlbGV2YXRpb24pOworICAgICAgICAgICAg
ZmxvYXQgTHkgPSBzaW4oYXppbXV0aCkqY29zKGVsZXZhdGlvbik7CisgICAgICAgICAgICBmbG9h
dCBMeiA9IHNpbihlbGV2YXRpb24pOworICAgICAgICAgICAgCisgICAgICAgICAgICBbZmlsdGVy
IHNldFZhbHVlOltub3JtYWxzIHZhbHVlRm9yS2V5OiBAIm91dHB1dEltYWdlIl0gZm9yS2V5OkAi
aW5wdXROb3JtYWxNYXAiXTsKKyAgICAgICAgICAgIFtmaWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9y
IHZlY3RvcldpdGhYOiBMeCBZOiBMeSBaOiBMel0gZm9yS2V5OkAiaW5wdXRMaWdodERpcmVjdGlv
biJdOworICAgICAgICAgICAgcmV0dXJuIGZpbHRlcjsKKyAgICAgICAgfQorICAgICAgICBjYXNl
IExTX1BPSU5UOgorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBLQ1BvaW50TGlnaHRTb3Vy
Y2UgKnBsaWdodCA9IHN0YXRpY19jYXN0PGNvbnN0IEtDUG9pbnRMaWdodFNvdXJjZSAqPihsaWdo
dCk7CisgICAgICAgICAgICByZXR1cm4gZ2V0UG9pbnRMaWdodFZlY3RvcnMobm9ybWFscywgW0NJ
VmVjdG9yIHZlY3RvcldpdGhYOnBsaWdodC0+cG9zaXRpb24oKS54KCkgWTpwbGlnaHQtPnBvc2l0
aW9uKCkueSgpIFo6cGxpZ2h0LT5wb3NpdGlvbigpLnooKV0sIHN1cmZhY2VTY2FsZSk7CisgICAg
ICAgIH0KKyAgICAgICAgY2FzZSBMU19TUE9UOgorICAgICAgICB7CisgICAgICAgICAgICBjb25z
dCBLQ1Nwb3RMaWdodFNvdXJjZSAqc2xpZ2h0ID0gc3RhdGljX2Nhc3Q8Y29uc3QgS0NTcG90TGln
aHRTb3VyY2UgKj4obGlnaHQpOworICAgICAgICAgICAgZmlsdGVyID0gW0NJRmlsdGVyIGZpbHRl
cldpdGhOYW1lOkAiV0tTcG90TGlnaHQiXTsKKyAgICAgICAgICAgIGlmICghZmlsdGVyKQorICAg
ICAgICAgICAgICAgIHJldHVybiBuaWw7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIENJRmls
dGVyICogcG9pbnRMaWdodEZpbHRlciA9IGdldFBvaW50TGlnaHRWZWN0b3JzKG5vcm1hbHMsIFtD
SVZlY3RvciB2ZWN0b3JXaXRoWDpzbGlnaHQtPnBvc2l0aW9uKCkueCgpIFk6c2xpZ2h0LT5wb3Np
dGlvbigpLnkoKSBaOnNsaWdodC0+cG9zaXRpb24oKS56KCldLCBzdXJmYWNlU2NhbGUpOworICAg
ICAgICAgICAgaWYgKCFwb2ludExpZ2h0RmlsdGVyKQorICAgICAgICAgICAgICAgIHJldHVybiBu
aWw7CisgICAgICAgICAgICBbZmlsdGVyIHNldERlZmF1bHRzXTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgW2ZpbHRlciBzZXRWYWx1ZTpbcG9pbnRMaWdodEZpbHRlciB2YWx1ZUZvcktleTog
QCJvdXRwdXRJbWFnZSJdIGZvcktleTpAImlucHV0TGlnaHRWZWN0b3JzIl07CisgICAgICAgICAg
ICBbZmlsdGVyIHNldFZhbHVlOltDSVZlY3RvciB2ZWN0b3JXaXRoWDpzbGlnaHQtPmRpcmVjdGlv
bigpLngoKSBZOnNsaWdodC0+ZGlyZWN0aW9uKCkueSgpIFo6c2xpZ2h0LT5kaXJlY3Rpb24oKS56
KCldIGZvcktleTpAImlucHV0TGlnaHREaXJlY3Rpb24iXTsKKyAgICAgICAgICAgIFtmaWx0ZXIg
c2V0VmFsdWU6W05TTnVtYmVyIG51bWJlcldpdGhGbG9hdDpzbGlnaHQtPnNwZWN1bGFyRXhwb25l
bnQoKV0gZm9yS2V5OkAiaW5wdXRTcGVjdWxhckV4cG9uZW50Il07CisgICAgICAgICAgICBbZmls
dGVyIHNldFZhbHVlOltOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6ZGVnMnJhZChzbGlnaHQtPmxp
bWl0aW5nQ29uZUFuZ2xlKCkpXSBmb3JLZXk6QCJpbnB1dExpbWl0aW5nQ29uZUFuZ2xlIl07Cisg
ICAgICAgICAgICByZXR1cm4gZmlsdGVyOworICAgICAgICB9CisgICAgfQorICAgIEtXUV9VTkJM
T0NLX0VYQ0VQVElPTlMgCisgICAgcmV0dXJuIG5pbDsKK30KKworCitzdGF0aWMgQ0lGaWx0ZXIg
KmdldE5vcm1hbE1hcChDSUltYWdlICpidW1wTWFwLCBmbG9hdCBzY2FsZSkKK3sKKyAgICBbV0tO
b3JtYWxNYXBGaWx0ZXIgY2xhc3NdOworICAgIENJRmlsdGVyICpmaWx0ZXIgPSBuaWw7CisgICAg
S1dRX0JMT0NLX0VYQ0VQVElPTlMKKyAgICBmaWx0ZXIgPSBbQ0lGaWx0ZXIgZmlsdGVyV2l0aE5h
bWU6QCJXS05vcm1hbE1hcCJdOyAgIAorICAgIFtmaWx0ZXIgc2V0RGVmYXVsdHNdOworICAgIAor
ICAgIFtmaWx0ZXIgc2V0VmFsdWU6YnVtcE1hcCBmb3JLZXk6QCJpbnB1dEltYWdlIl07ICAgIAor
ICAgIFtmaWx0ZXIgc2V0VmFsdWU6W05TTnVtYmVyIG51bWJlcldpdGhGbG9hdDpzY2FsZV0gZm9y
S2V5OkAiaW5wdXRTdXJmYWNlU2NhbGUiXTsKKyAgICByZXR1cm4gZmlsdGVyOworICAgIEtXUV9V
TkJMT0NLX0VYQ0VQVElPTlMgCisgICAgcmV0dXJuIG5pbDsKK30KKworQ0lGaWx0ZXIgKktDYW52
YXNGRURpZmZ1c2VMaWdodGluZ1F1YXJ0ejo6Z2V0Q0lGaWx0ZXIoS0NhbnZhc0ZpbHRlclF1YXJ0
eiAqcXVhcnR6RmlsdGVyKSBjb25zdAoreworICAgIFtXS0RpZmZ1c2VMaWdodGluZ0ZpbHRlciBj
bGFzc107CisgICAgCisgICAgQ0lGaWx0ZXIgKmZpbHRlciA9IG5pbDsKKyAgICBLV1FfQkxPQ0tf
RVhDRVBUSU9OUworICAgIGZpbHRlciA9IFtDSUZpbHRlciBmaWx0ZXJXaXRoTmFtZTpAIldLRGlm
ZnVzZUxpZ2h0aW5nIl07CisgICAgaWYgKCFmaWx0ZXIpCisgICAgICAgIHJldHVybiBuaWw7Cisg
ICAgCisgICAgW2ZpbHRlciBzZXREZWZhdWx0c107CisgICAgQ0lGaWx0ZXIgKm5vcm1hbHMgPSBn
ZXROb3JtYWxNYXAocXVhcnR6RmlsdGVyLT5pbnB1dEltYWdlKHRoaXMpLCBzdXJmYWNlU2NhbGUo
KSk7CisgICAgaWYgKCFub3JtYWxzKSAKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAKKyAgICBD
SUZpbHRlciAqbGlnaHRWZWN0b3JzID0gZ2V0TGlnaHRWZWN0b3JzKG5vcm1hbHMsIGxpZ2h0U291
cmNlKCksIHN1cmZhY2VTY2FsZSgpKTsKKyAgICBpZiAoIWxpZ2h0VmVjdG9ycykgCisgICAgICAg
IHJldHVybiBuaWw7CisgICAgCisgICAgW2ZpbHRlciBzZXRWYWx1ZTpbbm9ybWFscyB2YWx1ZUZv
cktleTogQCJvdXRwdXRJbWFnZSJdIGZvcktleTpAImlucHV0Tm9ybWFsTWFwIl07CisgICAgW2Zp
bHRlciBzZXRWYWx1ZTpbbGlnaHRWZWN0b3JzIHZhbHVlRm9yS2V5OiBAIm91dHB1dEltYWdlIl0g
Zm9yS2V5OkAiaW5wdXRMaWdodFZlY3RvcnMiXTsKKyAgICBbZmlsdGVyIHNldFZhbHVlOmNpQ29s
b3IobGlnaHRpbmdDb2xvcigpKSBmb3JLZXk6QCJpbnB1dExpZ2h0aW5nQ29sb3IiXTsKKyAgICBb
ZmlsdGVyIHNldFZhbHVlOltOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6c3VyZmFjZVNjYWxlKCld
IGZvcktleTpAImlucHV0U3VyZmFjZVNjYWxlIl07CisgICAgW2ZpbHRlciBzZXRWYWx1ZTpbTlNO
dW1iZXIgbnVtYmVyV2l0aEZsb2F0OmRpZmZ1c2VDb25zdGFudCgpXSBmb3JLZXk6QCJpbnB1dERp
ZmZ1c2VDb25zdGFudCJdOworICAgIFtmaWx0ZXIgc2V0VmFsdWU6W05TTnVtYmVyIG51bWJlcldp
dGhGbG9hdDprZXJuZWxVbml0TGVuZ3RoWCgpXSBmb3JLZXk6QCJpbnB1dEtlcm5lbFVuaXRMZW5n
dGhYIl07CisgICAgW2ZpbHRlciBzZXRWYWx1ZTpbTlNOdW1iZXIgbnVtYmVyV2l0aEZsb2F0Omtl
cm5lbFVuaXRMZW5ndGhZKCldIGZvcktleTpAImlucHV0S2VybmVsVW5pdExlbmd0aFkiXTsKKyAg
ICAKKyAgICBGRV9RVUFSVFpfT1VUUFVUX1JFVFVSTjsKK30KKwogQ0lGaWx0ZXIgKktDYW52YXNG
RUZsb29kUXVhcnR6OjpnZXRDSUZpbHRlcihLQ2FudmFzRmlsdGVyUXVhcnR6ICpxdWFydHpGaWx0
ZXIpIGNvbnN0CiB7CiAJQ0lGaWx0ZXIgKmZpbHRlciA9IG5pbDsKQEAgLTUwNSw3ICs2NDgsNyBA
QCBDSUZpbHRlciAqS0NhbnZhc0ZFSW1hZ2VRdWFydHo6OmdldENJRmlsCiAKIENJRmlsdGVyICpL
Q2FudmFzRkVHYXVzc2lhbkJsdXJRdWFydHo6OmdldENJRmlsdGVyKEtDYW52YXNGaWx0ZXJRdWFy
dHogKnF1YXJ0ekZpbHRlcikgY29uc3QKIHsKLQlGRV9RVUFSVFpfU0VUVVBfSU5QVVQoQCJDSUdh
dXNzaWFuUHlyYW1pZCIpOworCUZFX1FVQVJUWl9TRVRVUF9JTlBVVChAIkNJR2F1c3NpYW5CbHVy
Iik7CiAJCiAJZmxvYXQgaW5wdXRSYWRpdXMgPSBzdGREZXZpYXRpb25YKCk7CiAJaWYgKGlucHV0
UmFkaXVzICE9IHN0ZERldmlhdGlvblkoKSkgewpAQCAtNTUxLDYgKzY5NCwzNCBAQCBDSUZpbHRl
ciAqS0NhbnZhc0ZFT2Zmc2V0UXVhcnR6OjpnZXRDSUZpCiAJRkVfUVVBUlRaX09VVFBVVF9SRVRV
Uk47CiB9CiAKK0NJRmlsdGVyICpLQ2FudmFzRkVTcGVjdWxhckxpZ2h0aW5nUXVhcnR6OjpnZXRD
SUZpbHRlcihLQ2FudmFzRmlsdGVyUXVhcnR6ICpxdWFydHpGaWx0ZXIpIGNvbnN0Cit7CisgICAg
W1dLU3BlY3VsYXJMaWdodGluZ0ZpbHRlciBjbGFzc107CisgICAgCisgICAgQ0lGaWx0ZXIgKmZp
bHRlciA9IG5pbDsKKyAgICBLV1FfQkxPQ0tfRVhDRVBUSU9OUworICAgIGZpbHRlciA9IFtDSUZp
bHRlciBmaWx0ZXJXaXRoTmFtZTpAIldLU3BlY3VsYXJMaWdodGluZyJdOworICAgIFtmaWx0ZXIg
c2V0RGVmYXVsdHNdOworICAgIENJRmlsdGVyICpub3JtYWxzID0gZ2V0Tm9ybWFsTWFwKHF1YXJ0
ekZpbHRlci0+aW5wdXRJbWFnZSh0aGlzKSwgc3VyZmFjZVNjYWxlKCkpOworICAgIGlmICghbm9y
bWFscykgCisgICAgICAgIHJldHVybiBuaWw7CisgICAgCisgICAgQ0lGaWx0ZXIgKmxpZ2h0VmVj
dG9ycyA9IGdldExpZ2h0VmVjdG9ycyhub3JtYWxzLCBsaWdodFNvdXJjZSgpLCBzdXJmYWNlU2Nh
bGUoKSk7CisgICAgaWYgKCFsaWdodFZlY3RvcnMpIAorICAgICAgICByZXR1cm4gbmlsOworICAg
IFtmaWx0ZXIgc2V0VmFsdWU6W25vcm1hbHMgdmFsdWVGb3JLZXk6IEAib3V0cHV0SW1hZ2UiXSBm
b3JLZXk6QCJpbnB1dE5vcm1hbE1hcCJdOworICAgIFtmaWx0ZXIgc2V0VmFsdWU6W2xpZ2h0VmVj
dG9ycyB2YWx1ZUZvcktleTogQCJvdXRwdXRJbWFnZSJdIGZvcktleTpAImlucHV0TGlnaHRWZWN0
b3JzIl07CisgICAgW2ZpbHRlciBzZXRWYWx1ZTpjaUNvbG9yKGxpZ2h0aW5nQ29sb3IoKSkgZm9y
S2V5OkAiaW5wdXRMaWdodGluZ0NvbG9yIl07CisgICAgW2ZpbHRlciBzZXRWYWx1ZTpbTlNOdW1i
ZXIgbnVtYmVyV2l0aEZsb2F0OnN1cmZhY2VTY2FsZSgpXSBmb3JLZXk6QCJpbnB1dFN1cmZhY2VT
Y2FsZSJdOworICAgIFtmaWx0ZXIgc2V0VmFsdWU6W05TTnVtYmVyIG51bWJlcldpdGhGbG9hdDpz
cGVjdWxhckNvbnN0YW50KCldIGZvcktleTpAImlucHV0U3BlY3VsYXJDb25zdGFudCJdOworICAg
IFtmaWx0ZXIgc2V0VmFsdWU6W05TTnVtYmVyIG51bWJlcldpdGhGbG9hdDpzcGVjdWxhckV4cG9u
ZW50KCldIGZvcktleTpAImlucHV0U3BlY3VsYXJFeHBvbmVudCJdOworICAgIFtmaWx0ZXIgc2V0
VmFsdWU6W05TTnVtYmVyIG51bWJlcldpdGhGbG9hdDprZXJuZWxVbml0TGVuZ3RoWCgpXSBmb3JL
ZXk6QCJpbnB1dEtlcm5lbFVuaXRMZW5ndGhYIl07CisgICAgW2ZpbHRlciBzZXRWYWx1ZTpbTlNO
dW1iZXIgbnVtYmVyV2l0aEZsb2F0Omtlcm5lbFVuaXRMZW5ndGhZKCldIGZvcktleTpAImlucHV0
S2VybmVsVW5pdExlbmd0aFkiXTsKKyAgICAKKyAgICBGRV9RVUFSVFpfT1VUUFVUX1JFVFVSTjsK
K30KKworCiBDSUZpbHRlciAqS0NhbnZhc0ZFVGlsZVF1YXJ0ejo6Z2V0Q0lGaWx0ZXIoS0NhbnZh
c0ZpbHRlclF1YXJ0eiAqcXVhcnR6RmlsdGVyKSBjb25zdAogewogCUZFX1FVQVJUWl9TRVRVUF9J
TlBVVChAIkNJQWZmaW5lVGlsZSIpOwpAQCAtNTU4LDYgKzcyOSwzIEBAIENJRmlsdGVyICpLQ2Fu
dmFzRkVUaWxlUXVhcnR6OjpnZXRDSUZpbHQKIAlGRV9RVUFSVFpfT1VUUFVUX1JFVFVSTjsKIH0K
IAotCi0KLQpJbmRleDoga2NhbnZhcy9kZXZpY2UvcXVhcnR6L0tSZW5kZXJpbmdEZXZpY2VRdWFy
dHoubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2NhbnZhcy9k
ZXZpY2UvcXVhcnR6L0tSZW5kZXJpbmdEZXZpY2VRdWFydHoubW0sdgpyZXRyaWV2aW5nIHJldmlz
aW9uIDEuNgpkaWZmIC1wIC11IC1yMS42IGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9LUmVuZGVyaW5n
RGV2aWNlUXVhcnR6Lm1tCi0tLSBrY2FudmFzL2RldmljZS9xdWFydHovS1JlbmRlcmluZ0Rldmlj
ZVF1YXJ0ei5tbQkyMiBOb3YgMjAwNSAyMzowNDoyNyAtMDAwMAkxLjYKKysrIGtjYW52YXMvZGV2
aWNlL3F1YXJ0ei9LUmVuZGVyaW5nRGV2aWNlUXVhcnR6Lm1tCTI4IE5vdiAyMDA1IDA0OjUyOjE5
IC0wMDAwCkBAIC0yOTIsMTUgKzI5MiwxNyBAQCBLQ2FudmFzRmlsdGVyRWZmZWN0ICpLUmVuZGVy
aW5nRGV2aWNlUXVhCiB7CiAJc3dpdGNoKHR5cGUpCiAJewotLy8JY2FzZSBGRV9ESVNUQU5UX0xJ
R0hUOiAKLS8vCWNhc2UgRkVfUE9JTlRfTElHSFQ6IAotLy8JY2FzZSBGRV9TUE9UX0xJR0hUOiAK
KyAgICAgICAgLyogTGlnaHQgc291cmNlcyBhcmUgY29udGFpbmVkIGJ5IHRoZSBkaWZmdXNlL3Nw
ZWN1bGFyIGxpZ2h0IGJsb2NrcyAKKyAgICAgICAgY2FzZSBGRV9ESVNUQU5UX0xJR0hUOiAKKyAg
ICAgICAgY2FzZSBGRV9QT0lOVF9MSUdIVDogCisgICAgICAgIGNhc2UgRkVfU1BPVF9MSUdIVDog
CisgICAgICAgICovCiAJY2FzZSBGRV9CTEVORDogcmV0dXJuIG5ldyBLQ2FudmFzRkVCbGVuZFF1
YXJ0eigpOwogCWNhc2UgRkVfQ09MT1JfTUFUUklYOiByZXR1cm4gbmV3IEtDYW52YXNGRUNvbG9y
TWF0cml4UXVhcnR6KCk7CiAvLwljYXNlIEZFX0NPTVBPTkVOVF9UUkFOU0ZFUjogCiAJY2FzZSBG
RV9DT01QT1NJVEU6IHJldHVybiBuZXcgS0NhbnZhc0ZFQ29tcG9zaXRlUXVhcnR6KCk7CiAvLwlj
YXNlIEZFX0NPTlZPTFZFX01BVFJJWDogCi0vLwljYXNlIEZFX0RJRkZVU0VfTElHSFRJTkc6IAor
CWNhc2UgRkVfRElGRlVTRV9MSUdIVElORzogcmV0dXJuIG5ldyBLQ2FudmFzRkVEaWZmdXNlTGln
aHRpbmdRdWFydHooKTsKIC8vCWNhc2UgRkVfRElTUExBQ0VNRU5UX01BUDogCiAJY2FzZSBGRV9G
TE9PRDogcmV0dXJuIG5ldyBLQ2FudmFzRkVGbG9vZFF1YXJ0eigpOwogCWNhc2UgRkVfR0FVU1NJ
QU5fQkxVUjogcmV0dXJuIG5ldyBLQ2FudmFzRkVHYXVzc2lhbkJsdXJRdWFydHooKTsKQEAgLTMw
OCw3ICszMTAsNyBAQCBLQ2FudmFzRmlsdGVyRWZmZWN0ICpLUmVuZGVyaW5nRGV2aWNlUXVhCiAJ
Y2FzZSBGRV9NRVJHRTogcmV0dXJuIG5ldyBLQ2FudmFzRkVNZXJnZVF1YXJ0eigpOwogLy8JY2Fz
ZSBGRV9NT1JQSE9MT0dZOiAKIAljYXNlIEZFX09GRlNFVDogcmV0dXJuIG5ldyBLQ2FudmFzRkVP
ZmZzZXRRdWFydHooKTsKLS8vCWNhc2UgRkVfU1BFQ1VMQVJfTElHSFRJTkc6IAorCWNhc2UgRkVf
U1BFQ1VMQVJfTElHSFRJTkc6IHJldHVybiBuZXcgS0NhbnZhc0ZFU3BlY3VsYXJMaWdodGluZ1F1
YXJ0eigpOwogCWNhc2UgRkVfVElMRTogcmV0dXJuIG5ldyBLQ2FudmFzRkVUaWxlUXVhcnR6KCk7
CiAvLwljYXNlIEZFX1RVUkJVTEVOQ0U6IAogCWRlZmF1bHQ6CkluZGV4OiBrc3ZnMi9TVkdBbmlt
YXRlZENvbG9ySW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpkaWZmIC1OcHUga3N2ZzIvU1ZHQW5pbWF0ZWRD
b2xvckltcGwuY3BwCi0tLSBrc3ZnMi9TVkdBbmltYXRlZENvbG9ySW1wbC5jcHAJMSBKYW4gMTk3
MCAwMDowMDowMCAtMDAwMAorKysga3N2ZzIvU1ZHQW5pbWF0ZWRDb2xvckltcGwuY3BwCTI4IE5v
diAyMDA1IDAzOjA5OjE2IC0wMDAwCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDUgT2xpdmVyIEh1bnQgPG9qaDE2QHN0dWRlbnQuY2FudGVyYnVyeS5hYy5uej4uICBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBBVVRIT1IgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNWR0FuaW1hdGVkQ29sb3JJ
bXBsLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBLU1ZHOworCitTVkdBbmltYXRlZENvbG9ySW1wbDo6
U1ZHQW5pbWF0ZWRDb2xvckltcGwoY29uc3QgU1ZHU3R5bGVkRWxlbWVudEltcGwgKmNvbnRleHQp
Cis6IFNWR0FuaW1hdGVkVGVtcGxhdGU8U1ZHQ29sb3JJbXBsPihjb250ZXh0KQoreworfQorCitT
VkdBbmltYXRlZENvbG9ySW1wbDo6flNWR0FuaW1hdGVkQ29sb3JJbXBsKCkKK3sKK30KKworU1ZH
Q29sb3JJbXBsICpTVkdBbmltYXRlZENvbG9ySW1wbDo6Y3JlYXRlKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbmV3IFNWR0NvbG9ySW1wbCgpOworfQorCit2b2lkIFNWR0FuaW1hdGVkQ29sb3JJbXBs
Ojphc3NpZ24oU1ZHQ29sb3JJbXBsICpzcmMsIFNWR0NvbG9ySW1wbCAqZHN0KSBjb25zdAorewor
ICAgIGlmICghc3JjIHx8ICFkc3QpCisgICAgICAgIHJldHVybjsKKyAgICBkc3QtPnNldENzc1Rl
eHQoc3JjLT5jc3NUZXh0KCkpOworfQpJbmRleDoga3N2ZzIvU1ZHQW5pbWF0ZWRDb2xvckltcGwu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09CmRpZmYgLU5wdSBrc3ZnMi9TVkdBbmltYXRlZENvbG9ySW1wbC5oCi0tLSBr
c3ZnMi9TVkdBbmltYXRlZENvbG9ySW1wbC5oCTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAKKysr
IGtzdmcyL1NWR0FuaW1hdGVkQ29sb3JJbXBsLmgJMjggTm92IDIwMDUgMDM6MDk6MTYgLTAwMDAK
QEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBPbGl2ZXIgSHVudCA8
b2poMTZAc3R1ZGVudC5jYW50ZXJidXJ5LmFjLm56Pi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEtTVkdf
U1ZHQW5pbWF0ZWRDb2xvckltcGxfSAorI2RlZmluZSBLU1ZHX1NWR0FuaW1hdGVkQ29sb3JJbXBs
X0gKKworI2luY2x1ZGUgIlNWR0NvbG9ySW1wbC5oIgorI2luY2x1ZGUgIlNWR0FuaW1hdGVkVGVt
cGxhdGUuaCIKKworbmFtZXNwYWNlIEtTVkcKK3sKKyAgICBjbGFzcyBTVkdBbmltYXRlZENvbG9y
SW1wbCA6IHB1YmxpYyBTVkdBbmltYXRlZFRlbXBsYXRlPFNWR0NvbG9ySW1wbD4KKyAgICB7Cisg
ICAgcHVibGljOgorICAgICAgICBTVkdBbmltYXRlZENvbG9ySW1wbChjb25zdCBTVkdTdHlsZWRF
bGVtZW50SW1wbCAqY29udGV4dCk7CisgICAgICAgIHZpcnR1YWwgflNWR0FuaW1hdGVkQ29sb3JJ
bXBsKCk7CisgICAgCisgICAgcHJvdGVjdGVkOgorICAgICAgICB2aXJ0dWFsIFNWR0NvbG9ySW1w
bCAqY3JlYXRlKCkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgdm9pZCBhc3NpZ24oU1ZHQ29sb3JJ
bXBsICpzcmMsIFNWR0NvbG9ySW1wbCAqZHN0KSBjb25zdDsKKyAgICB9OworfTsKKworI2VuZGlm
CkluZGV4OiBrc3ZnMi9TVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnRJbXBsLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09CmRpZmYgLU5wdSBrc3ZnMi9TVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnRJbXBsLmNwcAot
LS0ga3N2ZzIvU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50SW1wbC5jcHAJMSBKYW4gMTk3MCAw
MDowMDowMCAtMDAwMAorKysga3N2ZzIvU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50SW1wbC5j
cHAJMjggTm92IDIwMDUgMDQ6Mzc6MjcgLTAwMDAKQEAgLTAsMCArMSwxNjcgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDUgT2xpdmVyIEh1bnQgPG9qaDE2QHN0dWRlbnQuY2FudGVyYnVyeS5h
Yy5uej4uICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBBVVRIT1IgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPHFzdHJpbmds
aXN0Lmg+CisKKyNpbmNsdWRlIDxrZG9tL2NvcmUvQXR0ckltcGwuaD4KKworI2luY2x1ZGUgPGtj
YW52YXMvS0NhbnZhcy5oPgorI2luY2x1ZGUgPGtjYW52YXMvS0NhbnZhc1JlZ2lzdHJ5Lmg+Cisj
aW5jbHVkZSA8a2NhbnZhcy9LQ2FudmFzRmlsdGVycy5oPgorI2luY2x1ZGUgPGtjYW52YXMvZGV2
aWNlL0tSZW5kZXJpbmdEZXZpY2UuaD4KKworI2luY2x1ZGUgImtzdmcuaCIKKyNpbmNsdWRlICJT
VkdOYW1lcy5oIgorI2luY2x1ZGUgIlNWR0hlbHBlci5oIgorI2luY2x1ZGUgIlNWR1JlbmRlclN0
eWxlLmgiCisjaW5jbHVkZSAiU1ZHQW5pbWF0ZWRDb2xvckltcGwuaCIKKyNpbmNsdWRlICJTVkdB
bmltYXRlZE51bWJlckltcGwuaCIKKyNpbmNsdWRlICJTVkdBbmltYXRlZFN0cmluZ0ltcGwuaCIK
KyNpbmNsdWRlICJTVkdGRUxpZ2h0RWxlbWVudEltcGwuaCIKKyNpbmNsdWRlICJTVkdET01JbXBs
ZW1lbnRhdGlvbkltcGwuaCIKKyNpbmNsdWRlICJTVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnRJ
bXBsLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBLU1ZHOworCitTVkdGRURpZmZ1c2VMaWdodGluZ0Vs
ZW1lbnRJbXBsOjpTVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnRJbXBsKGNvbnN0IEtET006OlF1
YWxpZmllZE5hbWUmIHRhZ05hbWUsIEtET006OkRvY3VtZW50SW1wbCAqZG9jKSA6IAorU1ZHRmls
dGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzSW1wbCh0YWdOYW1lLCBkb2MpCit7CisgICAg
bV9maWx0ZXJFZmZlY3QgPSAwOworfQorCitTVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnRJbXBs
Ojp+U1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50SW1wbCgpCit7CisgICAgaWYgKG1fZmlsdGVy
RWZmZWN0KQorICAgICAgICBkZWxldGUgbV9maWx0ZXJFZmZlY3Q7Cit9CisKK1NWR0FuaW1hdGVk
U3RyaW5nSW1wbCAqU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50SW1wbDo6aW4xKCkgY29uc3QK
K3sKKyAgICBTVkdTdHlsZWRFbGVtZW50SW1wbCAqZHVtbXkgPSAwOworICAgIHJldHVybiBsYXp5
X2NyZWF0ZTxTVkdBbmltYXRlZFN0cmluZ0ltcGw+KG1faW4xLCBkdW1teSk7Cit9CisKK1NWR0Fu
aW1hdGVkTnVtYmVySW1wbCAqU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50SW1wbDo6ZGlmZnVz
ZUNvbnN0YW50KCkgY29uc3QKK3sKKyAgICBTVkdTdHlsZWRFbGVtZW50SW1wbCAqZHVtbXkgPSAw
OworICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZE51bWJlckltcGw+KG1fZGlmZnVz
ZUNvbnN0YW50LCBkdW1teSk7Cit9CisKK1NWR0FuaW1hdGVkTnVtYmVySW1wbCAqU1ZHRkVEaWZm
dXNlTGlnaHRpbmdFbGVtZW50SW1wbDo6c3VyZmFjZVNjYWxlKCkgY29uc3QKK3sKKyAgICBTVkdT
dHlsZWRFbGVtZW50SW1wbCAqZHVtbXkgPSAwOworICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdB
bmltYXRlZE51bWJlckltcGw+KG1fc3VyZmFjZVNjYWxlLCBkdW1teSk7Cit9CisKK1NWR0FuaW1h
dGVkTnVtYmVySW1wbCAqU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50SW1wbDo6a2VybmVsVW5p
dExlbmd0aFgoKSBjb25zdAoreworICAgIFNWR1N0eWxlZEVsZW1lbnRJbXBsICpkdW1teSA9IDA7
CisgICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTnVtYmVySW1wbD4obV9rZXJuZWxV
bml0TGVuZ3RoWCwgZHVtbXkpOworfQorCitTVkdBbmltYXRlZE51bWJlckltcGwgKlNWR0ZFRGlm
ZnVzZUxpZ2h0aW5nRWxlbWVudEltcGw6Omtlcm5lbFVuaXRMZW5ndGhZKCkgY29uc3QKK3sKKyAg
ICBTVkdTdHlsZWRFbGVtZW50SW1wbCAqZHVtbXkgPSAwOworICAgIHJldHVybiBsYXp5X2NyZWF0
ZTxTVkdBbmltYXRlZE51bWJlckltcGw+KG1fa2VybmVsVW5pdExlbmd0aFksIGR1bW15KTsKK30K
KworU1ZHQW5pbWF0ZWRDb2xvckltcGwgKlNWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudEltcGw6
OmxpZ2h0aW5nQ29sb3IoKSBjb25zdAoreworICAgIFNWR1N0eWxlZEVsZW1lbnRJbXBsICpkdW1t
eSA9IDA7CisgICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkQ29sb3JJbXBsPihtX2xp
Z2h0aW5nQ29sb3IsIGR1bW15KTsKK30KKwordm9pZCBTVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1l
bnRJbXBsOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShLRE9NOjpNYXBwZWRBdHRyaWJ1dGVJbXBsICph
dHRyKQoreworICAgIEtET006OkRPTVN0cmluZyB2YWx1ZShhdHRyLT52YWx1ZSgpKTsKKyAgICBp
ZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjppbkF0dHIpCisgICAgICAgIGluMSgpLT5zZXRC
YXNlVmFsKHZhbHVlLmltcGwoKSk7CisgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05h
bWVzOjpzdXJmYWNlU2NhbGVBdHRyKQorICAgICAgICBzdXJmYWNlU2NhbGUoKS0+c2V0QmFzZVZh
bCh2YWx1ZS5xc3RyaW5nKCkudG9Eb3VibGUoKSk7CisgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgp
ID09IFNWR05hbWVzOjpkaWZmdXNlQ29uc3RhbnRBdHRyKQorICAgICAgICBkaWZmdXNlQ29uc3Rh
bnQoKS0+c2V0QmFzZVZhbCh2YWx1ZS50b0ludCgpKTsKKyAgICBlbHNlIGlmIChhdHRyLT5uYW1l
KCkgPT0gU1ZHTmFtZXM6Omtlcm5lbFVuaXRMZW5ndGhBdHRyKSB7CisgICAgICAgIFFTdHJpbmdM
aXN0IG51bWJlcnMgPSBRU3RyaW5nTGlzdDo6c3BsaXQoJyAnLCB2YWx1ZS5xc3RyaW5nKCkpOwor
ICAgICAgICBrZXJuZWxVbml0TGVuZ3RoWCgpLT5zZXRCYXNlVmFsKG51bWJlcnNbMF0udG9Eb3Vi
bGUoKSk7CisgICAgICAgIGlmIChudW1iZXJzLmNvdW50KCkgPT0gMSkKKyAgICAgICAgICAgIGtl
cm5lbFVuaXRMZW5ndGhZKCktPnNldEJhc2VWYWwobnVtYmVyc1swXS50b0RvdWJsZSgpKTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAga2VybmVsVW5pdExlbmd0aFkoKS0+c2V0QmFzZVZhbChu
dW1iZXJzWzFdLnRvRG91YmxlKCkpOworICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNW
R05hbWVzOjpsaWdodGluZ19jb2xvckF0dHIpCisgICAgICAgIC8vRklYTUUgdGhpcyBpcyBiYWQs
IHBvdGVudGlhbCBtZW1vcnkgbGVhaworICAgICAgICBsaWdodGluZ0NvbG9yKCktPnNldEJhc2VW
YWwobmV3IFNWR0NvbG9ySW1wbCh2YWx1ZS5pbXBsKCkpKTsKKyAgICBlbHNlCisgICAgICAgIFNW
R0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlc0ltcGw6OnBhcnNlTWFwcGVkQXR0cmli
dXRlKGF0dHIpOworfQorCitLQ2FudmFzRkVEaWZmdXNlTGlnaHRpbmcgKlNWR0ZFRGlmZnVzZUxp
Z2h0aW5nRWxlbWVudEltcGw6OmZpbHRlckVmZmVjdCgpIGNvbnN0Cit7CisgICAgaWYgKCFtX2Zp
bHRlckVmZmVjdCkgeworICAgICAgICBtX2ZpbHRlckVmZmVjdCA9IHN0YXRpY19jYXN0PEtDYW52
YXNGRURpZmZ1c2VMaWdodGluZyAqPihRUGFpbnRlcjo6cmVuZGVyaW5nRGV2aWNlKCktPmNyZWF0
ZUZpbHRlckVmZmVjdChGRV9ESUZGVVNFX0xJR0hUSU5HKSk7CisgICAgICAgIG1fZmlsdGVyRWZm
ZWN0LT5zZXRJbihLRE9NOjpET01TdHJpbmcoaW4xKCktPmJhc2VWYWwoKSkucXN0cmluZygpKTsK
KyAgICAgICAgc2V0U3RhbmRhcmRBdHRyaWJ1dGVzKG1fZmlsdGVyRWZmZWN0KTsKKyAgICAgICAg
bV9maWx0ZXJFZmZlY3QtPnNldERpZmZ1c2VDb25zdGFudCgoZGlmZnVzZUNvbnN0YW50KCktPmJh
c2VWYWwoKSkpOworICAgICAgICBtX2ZpbHRlckVmZmVjdC0+c2V0U3VyZmFjZVNjYWxlKChzdXJm
YWNlU2NhbGUoKS0+YmFzZVZhbCgpKSk7CisgICAgICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRLZXJu
ZWxVbml0TGVuZ3RoWCgoa2VybmVsVW5pdExlbmd0aFgoKS0+YmFzZVZhbCgpKSk7CisgICAgICAg
IG1fZmlsdGVyRWZmZWN0LT5zZXRLZXJuZWxVbml0TGVuZ3RoWSgoa2VybmVsVW5pdExlbmd0aFko
KS0+YmFzZVZhbCgpKSk7CisgICAgICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRMaWdodGluZ0NvbG9y
KGxpZ2h0aW5nQ29sb3IoKS0+YmFzZVZhbCgpLT5jb2xvcigpKTsKKyAgICB9CisgICAgdXBkYXRl
TGlnaHRzKCk7CisgICAgcmV0dXJuIG1fZmlsdGVyRWZmZWN0OworfQorCisvL0ZJWE1FOiBoZXJl
IGJlIGRyYWdvbnMKKwordm9pZCBTVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnRJbXBsOjp1cGRh
dGVMaWdodHMoKSBjb25zdAoreworICAgIGlmICghbV9maWx0ZXJFZmZlY3QpCisgICAgICAgIHJl
dHVybjsKKyAgICBLRE9NOjpOb2RlSW1wbCAqbiA9IGZpcnN0Q2hpbGQoKTsKKyAgICBpZiAoIW4p
IAorICAgICAgICByZXR1cm47CisgICAgS0NMaWdodFNvdXJjZSAqIGxpZ2h0ID0gMDsKKyAgICAK
KyAgICBkbyB7CisgICAgICAgIGlmIChuLT5ub2RlTmFtZSgpLnFzdHJpbmcoKSA9PSBTVkdOYW1l
czo6ZmVEaXN0YW50TGlnaHRUYWcpIHsgICAgICAKKyAgICAgICAgICAgIFNWR0ZFTGlnaHRFbGVt
ZW50SW1wbCAqbGlnaHROb2RlID0gc3RhdGljX2Nhc3Q8U1ZHRkVMaWdodEVsZW1lbnRJbXBsICo+
KG4pOyAgCisgICAgICAgICAgICBsaWdodCA9IG5ldyBLQ0Rpc3RhbnRMaWdodFNvdXJjZShsaWdo
dE5vZGUtPmF6aW11dGgoKS0+YmFzZVZhbCgpLCBsaWdodE5vZGUtPmVsZXZhdGlvbigpLT5iYXNl
VmFsKCkpOworICAgICAgICB9IGVsc2UgaWYgKG4tPm5vZGVOYW1lKCkucXN0cmluZygpID09IFNW
R05hbWVzOjpmZVBvaW50TGlnaHRUYWcpIHsKKyAgICAgICAgICAgIFNWR0ZFTGlnaHRFbGVtZW50
SW1wbCAqbGlnaHROb2RlID0gc3RhdGljX2Nhc3Q8U1ZHRkVMaWdodEVsZW1lbnRJbXBsICo+KG4p
OyAgCisgICAgICAgICAgICBLQ2FudmFzUG9pbnQzRiBwb3MobGlnaHROb2RlLT54KCktPmJhc2VW
YWwoKSwgbGlnaHROb2RlLT55KCktPmJhc2VWYWwoKSwgbGlnaHROb2RlLT56KCktPmJhc2VWYWwo
KSk7CisgICAgICAgICAgICBsaWdodCA9IG5ldyBLQ1BvaW50TGlnaHRTb3VyY2UocG9zKTsKKyAg
ICAgICAgfSBlbHNlIGlmIChuLT5ub2RlTmFtZSgpLnFzdHJpbmcoKSA9PSBTVkdOYW1lczo6ZmVT
cG90TGlnaHRUYWcpIHsKKyAgICAgICAgICAgIFNWR0ZFTGlnaHRFbGVtZW50SW1wbCAqbGlnaHRO
b2RlID0gc3RhdGljX2Nhc3Q8U1ZHRkVMaWdodEVsZW1lbnRJbXBsICo+KG4pOyAgCisgICAgICAg
ICAgICBLQ2FudmFzUG9pbnQzRiBwb3MobGlnaHROb2RlLT54KCktPmJhc2VWYWwoKSwgbGlnaHRO
b2RlLT55KCktPmJhc2VWYWwoKSwgbGlnaHROb2RlLT56KCktPmJhc2VWYWwoKSk7CisgICAgICAg
ICAgICAvL2NvbnZlcnQgbG9va0F0IHRvIGEgZGlyZWN0aW9uCisgICAgICAgICAgICBLQ2FudmFz
UG9pbnQzRiBkaXJlY3Rpb24obGlnaHROb2RlLT5wb2ludHNBdFgoKS0+YmFzZVZhbCgpLXBvcy54
KCksIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpZ2h0Tm9kZS0+cG9p
bnRzQXRZKCktPmJhc2VWYWwoKS1wb3MueSgpLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBsaWdodE5vZGUtPnBvaW50c0F0WigpLT5iYXNlVmFsKCktcG9zLnooKSk7Cisg
ICAgICAgICAgICBkaXJlY3Rpb24ubm9ybWFsaXplKCk7CisgICAgICAgICAgICBsaWdodCA9IG5l
dyBLQ1Nwb3RMaWdodFNvdXJjZShwb3MsIGRpcmVjdGlvbiwgbGlnaHROb2RlLT5zcGVjdWxhckV4
cG9uZW50KCktPmJhc2VWYWwoKSwgbGlnaHROb2RlLT5saW1pdGluZ0NvbmVBbmdsZSgpLT5iYXNl
VmFsKCkpOworICAgICAgICB9ICAgICAgIAorICAgIH0gd2hpbGUgKCghbGlnaHQpICYmIChuPW4t
Pm5leHRTaWJsaW5nKCkpKTsgCisgICAgbV9maWx0ZXJFZmZlY3QtPnNldExpZ2h0U291cmNlKGxp
Z2h0KTsKK30KSW5kZXg6IGtzdmcyL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudEltcGwuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09CmRpZmYgLU5wdSBrc3ZnMi9TVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnRJbXBs
LmgKLS0tIGtzdmcyL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudEltcGwuaAkxIEphbiAxOTcw
IDAwOjAwOjAwIC0wMDAwCisrKyBrc3ZnMi9TVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnRJbXBs
LmgJMjggTm92IDIwMDUgMDM6MzM6NDQgLTAwMDAKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwNSBPbGl2ZXIgSHVudCA8b2poMTZAc3R1ZGVudC5jYW50ZXJidXJ5LmFj
Lm56Pi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIEFVVEhPUiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaWZuZGVmIEtTVkdfU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50
SW1wbF9ICisjZGVmaW5lIEtTVkdfU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50SW1wbF9ICisK
KyNpbmNsdWRlICJTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXNJbXBsLmgiCisK
K2NsYXNzIEtDYW52YXNGRURpZmZ1c2VMaWdodGluZzsKKworbmFtZXNwYWNlIEtTVkcKK3sKKyAg
ICBjbGFzcyBTVkdBbmltYXRlZE51bWJlckltcGw7CisgICAgY2xhc3MgU1ZHQW5pbWF0ZWRTdHJp
bmdJbXBsOworICAgIGNsYXNzIFNWR0FuaW1hdGVkQ29sb3JJbXBsOworICAgIAorICAgIGNsYXNz
IFNWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudEltcGwgOiBwdWJsaWMgU1ZHRmlsdGVyUHJpbWl0
aXZlU3RhbmRhcmRBdHRyaWJ1dGVzSW1wbAorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFNW
R0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudEltcGwoY29uc3QgS0RPTTo6UXVhbGlmaWVkTmFtZSYg
dGFnTmFtZSwgS0RPTTo6RG9jdW1lbnRJbXBsICpkb2MpOworICAgICAgICB2aXJ0dWFsIH5TVkdG
RURpZmZ1c2VMaWdodGluZ0VsZW1lbnRJbXBsKCk7CisKKyAgICAgICAgLy8gJ1NWR0ZFRGlmZnVz
ZUxpZ2h0aW5nRWxlbWVudCcgZnVuY3Rpb25zCisgICAgICAgIFNWR0FuaW1hdGVkU3RyaW5nSW1w
bCAqaW4xKCkgY29uc3Q7CisgICAgICAgIFNWR0FuaW1hdGVkTnVtYmVySW1wbCAqZGlmZnVzZUNv
bnN0YW50KCkgY29uc3Q7CisgICAgICAgIFNWR0FuaW1hdGVkTnVtYmVySW1wbCAqc3VyZmFjZVNj
YWxlKCkgY29uc3Q7CisgICAgICAgIFNWR0FuaW1hdGVkTnVtYmVySW1wbCAqa2VybmVsVW5pdExl
bmd0aFgoKSBjb25zdDsKKyAgICAgICAgU1ZHQW5pbWF0ZWROdW1iZXJJbXBsICprZXJuZWxVbml0
TGVuZ3RoWSgpIGNvbnN0OworICAgICAgICBTVkdBbmltYXRlZENvbG9ySW1wbCAgKmxpZ2h0aW5n
Q29sb3IoKSBjb25zdDsKKworICAgICAgICAvLyBEZXJpdmVkIGZyb206ICdFbGVtZW50SW1wbCcK
KyAgICAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKEtET006Ok1hcHBlZEF0
dHJpYnV0ZUltcGwgKmF0dHIpOworCisgICAgICAgIHZpcnR1YWwgS0NhbnZhc0ZFRGlmZnVzZUxp
Z2h0aW5nICpmaWx0ZXJFZmZlY3QoKSBjb25zdDsKKworICAgIHByaXZhdGU6CisgICAgICAgIG11
dGFibGUgU2hhcmVkUHRyPFNWR0FuaW1hdGVkU3RyaW5nSW1wbD4gbV9pbjE7CisgICAgICAgIG11
dGFibGUgU2hhcmVkUHRyPFNWR0FuaW1hdGVkTnVtYmVySW1wbD4gbV9kaWZmdXNlQ29uc3RhbnQ7
CisgICAgICAgIG11dGFibGUgU2hhcmVkUHRyPFNWR0FuaW1hdGVkTnVtYmVySW1wbD4gbV9zdXJm
YWNlU2NhbGU7CisgICAgICAgIG11dGFibGUgU2hhcmVkUHRyPFNWR0FuaW1hdGVkQ29sb3JJbXBs
PiAgbV9saWdodGluZ0NvbG9yOworICAgICAgICBtdXRhYmxlIFNoYXJlZFB0cjxTVkdBbmltYXRl
ZE51bWJlckltcGw+IG1fa2VybmVsVW5pdExlbmd0aFg7CisgICAgICAgIG11dGFibGUgU2hhcmVk
UHRyPFNWR0FuaW1hdGVkTnVtYmVySW1wbD4gbV9rZXJuZWxVbml0TGVuZ3RoWTsKKyAgICAgICAg
Ly9uZWVkIG90aGVyIHByb3BlcnRpZXMgaGVyZS4uLgorICAgICAgICBtdXRhYmxlIEtDYW52YXNG
RURpZmZ1c2VMaWdodGluZyAqbV9maWx0ZXJFZmZlY3Q7CisgICAgICAgIAorICAgICAgICAvL2xp
Z2h0IG1hbmFnZW1lbnQKKyAgICAgICAgdm9pZCB1cGRhdGVMaWdodHMoKSBjb25zdDsKKyAgICB9
OworfTsKKworI2VuZGlmCkluZGV4OiBrc3ZnMi9TVkdGRURpc3RhbnRMaWdodEVsZW1lbnRJbXBs
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09CmRpZmYgLU5wdSBrc3ZnMi9TVkdGRURpc3RhbnRMaWdodEVsZW1lbnRJ
bXBsLmNwcAotLS0ga3N2ZzIvU1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50SW1wbC5jcHAJMSBKYW4g
MTk3MCAwMDowMDowMCAtMDAwMAorKysga3N2ZzIvU1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50SW1w
bC5jcHAJMjggTm92IDIwMDUgMDM6MDk6MTYgLTAwMDAKQEAgLTAsMCArMSwzNyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwNSBPbGl2ZXIgSHVudCA8b2poMTZAc3R1ZGVudC5jYW50ZXJidXJ5
LmFjLm56Pi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIEFVVEhPUiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiU1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50SW1w
bC5oIgorCit1c2luZyBuYW1lc3BhY2UgS1NWRzsKKworU1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50
SW1wbDo6U1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50SW1wbChjb25zdCBLRE9NOjpRdWFsaWZpZWRO
YW1lJiB0YWdOYW1lLCBLRE9NOjpEb2N1bWVudEltcGwgKmRvYykgOiAKK1NWR0ZFTGlnaHRFbGVt
ZW50SW1wbCh0YWdOYW1lLCBkb2MpCit7Cit9CisKK1NWR0ZFRGlzdGFudExpZ2h0RWxlbWVudElt
cGw6On5TVkdGRURpc3RhbnRMaWdodEVsZW1lbnRJbXBsKCkKK3sKK30KSW5kZXg6IGtzdmcyL1NW
R0ZFRGlzdGFudExpZ2h0RWxlbWVudEltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CmRpZmYgLU5wdSBrc3ZnMi9T
VkdGRURpc3RhbnRMaWdodEVsZW1lbnRJbXBsLmgKLS0tIGtzdmcyL1NWR0ZFRGlzdGFudExpZ2h0
RWxlbWVudEltcGwuaAkxIEphbiAxOTcwIDAwOjAwOjAwIC0wMDAwCisrKyBrc3ZnMi9TVkdGRURp
c3RhbnRMaWdodEVsZW1lbnRJbXBsLmgJMjggTm92IDIwMDUgMDM6MDk6MTYgLTAwMDAKQEAgLTAs
MCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBPbGl2ZXIgSHVudCA8b2poMTZA
c3R1ZGVudC5jYW50ZXJidXJ5LmFjLm56Pi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEtTVkdfU1ZHRkVE
aXN0YW50TGlnaHRFbGVtZW50SW1wbF9ICisjZGVmaW5lIEtTVkdfU1ZHRkVEaXN0YW50TGlnaHRF
bGVtZW50SW1wbF9ICisKKyNpbmNsdWRlICJTVkdGRUxpZ2h0RWxlbWVudEltcGwuaCIKKworbmFt
ZXNwYWNlIEtTVkcKK3sKKyAgICBjbGFzcyBTVkdGRURpc3RhbnRMaWdodEVsZW1lbnRJbXBsIDog
cHVibGljIFNWR0ZFTGlnaHRFbGVtZW50SW1wbAorICAgIHsgCisgICAgcHVibGljOgorICAgICAg
ICBTVkdGRURpc3RhbnRMaWdodEVsZW1lbnRJbXBsKGNvbnN0IEtET006OlF1YWxpZmllZE5hbWUm
IHRhZ05hbWUsIEtET006OkRvY3VtZW50SW1wbCAqZG9jKTsKKyAgICAgICAgdmlydHVhbCB+U1ZH
RkVEaXN0YW50TGlnaHRFbGVtZW50SW1wbCgpOworICAgIH07Cit9OworCisjZW5kaWYKSW5kZXg6
IGtzdmcyL1NWR0ZFTGlnaHRFbGVtZW50SW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpkaWZmIC1OcHUga3N2
ZzIvU1ZHRkVMaWdodEVsZW1lbnRJbXBsLmNwcAotLS0ga3N2ZzIvU1ZHRkVMaWdodEVsZW1lbnRJ
bXBsLmNwcAkxIEphbiAxOTcwIDAwOjAwOjAwIC0wMDAwCisrKyBrc3ZnMi9TVkdGRUxpZ2h0RWxl
bWVudEltcGwuY3BwCTI4IE5vdiAyMDA1IDAzOjI4OjU1IC0wMDAwCkBAIC0wLDAgKzEsMTQzIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1IE9saXZlciBIdW50IDxvamgxNkBzdHVkZW50LmNh
bnRlcmJ1cnkuYWMubno+LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
IDxxc3RyaW5nbGlzdC5oPgorCisjaW5jbHVkZSA8a2RvbS9jb3JlL0F0dHJJbXBsLmg+CisKKyNp
bmNsdWRlIDxrY2FudmFzL0tDYW52YXMuaD4KKyNpbmNsdWRlIDxrY2FudmFzL0tDYW52YXNSZWdp
c3RyeS5oPgorI2luY2x1ZGUgPGtjYW52YXMvS0NhbnZhc1Jlc291cmNlcy5oPgorI2luY2x1ZGUg
PGtjYW52YXMvS0NhbnZhc0ZpbHRlcnMuaD4KKyNpbmNsdWRlIDxrY2FudmFzL2RldmljZS9LUmVu
ZGVyaW5nRGV2aWNlLmg+CisKKyNpbmNsdWRlICJTVkdOYW1lcy5oIgorI2luY2x1ZGUgIlNWR0hl
bHBlci5oIgorI2luY2x1ZGUgIlNWR1JlbmRlclN0eWxlLmgiCisjaW5jbHVkZSAiU1ZHRkVMaWdo
dEVsZW1lbnRJbXBsLmgiCisjaW5jbHVkZSAiU1ZHQW5pbWF0ZWRTdHJpbmdJbXBsLmgiCisjaW5j
bHVkZSAiU1ZHQW5pbWF0ZWROdW1iZXJJbXBsLmgiCisjaW5jbHVkZSAiU1ZHQW5pbWF0ZWRFbnVt
ZXJhdGlvbkltcGwuaCIKKyNpbmNsdWRlICJTVkdET01JbXBsZW1lbnRhdGlvbkltcGwuaCIKKwor
dXNpbmcgbmFtZXNwYWNlIEtTVkc7CisKK1NWR0ZFTGlnaHRFbGVtZW50SW1wbDo6U1ZHRkVMaWdo
dEVsZW1lbnRJbXBsKGNvbnN0IEtET006OlF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIEtET006OkRv
Y3VtZW50SW1wbCAqZG9jKSA6IAorU1ZHRWxlbWVudEltcGwodGFnTmFtZSwgZG9jKQoreworfQor
CitTVkdGRUxpZ2h0RWxlbWVudEltcGw6On5TVkdGRUxpZ2h0RWxlbWVudEltcGwoKQoreworfQor
CitTVkdBbmltYXRlZE51bWJlckltcGwgKlNWR0ZFTGlnaHRFbGVtZW50SW1wbDo6YXppbXV0aCgp
IGNvbnN0Cit7CisgICAgU1ZHU3R5bGVkRWxlbWVudEltcGwgKmR1bW15ID0gMDsKKyAgICByZXR1
cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWROdW1iZXJJbXBsPihtX2F6aW11dGgsIGR1bW15KTsK
K30KKworU1ZHQW5pbWF0ZWROdW1iZXJJbXBsICpTVkdGRUxpZ2h0RWxlbWVudEltcGw6OmVsZXZh
dGlvbigpIGNvbnN0Cit7CisgICAgU1ZHU3R5bGVkRWxlbWVudEltcGwgKmR1bW15ID0gMDsKKyAg
ICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWROdW1iZXJJbXBsPihtX2VsZXZhdGlvbiwg
ZHVtbXkpOworfQorCitTVkdBbmltYXRlZE51bWJlckltcGwgKlNWR0ZFTGlnaHRFbGVtZW50SW1w
bDo6eCgpIGNvbnN0Cit7CisgICAgU1ZHU3R5bGVkRWxlbWVudEltcGwgKmR1bW15ID0gMDsKKyAg
ICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWROdW1iZXJJbXBsPihtX3gsIGR1bW15KTsK
K30KKworU1ZHQW5pbWF0ZWROdW1iZXJJbXBsICpTVkdGRUxpZ2h0RWxlbWVudEltcGw6OnkoKSBj
b25zdAoreworICAgIFNWR1N0eWxlZEVsZW1lbnRJbXBsICpkdW1teSA9IDA7CisgICAgcmV0dXJu
IGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTnVtYmVySW1wbD4obV95LCBkdW1teSk7Cit9CisKKwor
U1ZHQW5pbWF0ZWROdW1iZXJJbXBsICpTVkdGRUxpZ2h0RWxlbWVudEltcGw6OnooKSBjb25zdAor
eworICAgIFNWR1N0eWxlZEVsZW1lbnRJbXBsICpkdW1teSA9IDA7CisgICAgcmV0dXJuIGxhenlf
Y3JlYXRlPFNWR0FuaW1hdGVkTnVtYmVySW1wbD4obV96LCBkdW1teSk7Cit9CisKK1NWR0FuaW1h
dGVkTnVtYmVySW1wbCAqU1ZHRkVMaWdodEVsZW1lbnRJbXBsOjpwb2ludHNBdFgoKSBjb25zdAor
eworICAgIFNWR1N0eWxlZEVsZW1lbnRJbXBsICpkdW1teSA9IDA7CisgICAgcmV0dXJuIGxhenlf
Y3JlYXRlPFNWR0FuaW1hdGVkTnVtYmVySW1wbD4obV9wb2ludHNBdFgsIGR1bW15KTsKK30KKwor
U1ZHQW5pbWF0ZWROdW1iZXJJbXBsICpTVkdGRUxpZ2h0RWxlbWVudEltcGw6OnBvaW50c0F0WSgp
IGNvbnN0Cit7CisgICAgU1ZHU3R5bGVkRWxlbWVudEltcGwgKmR1bW15ID0gMDsKKyAgICByZXR1
cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWROdW1iZXJJbXBsPihtX3BvaW50c0F0WSwgZHVtbXkp
OworfQorCitTVkdBbmltYXRlZE51bWJlckltcGwgKlNWR0ZFTGlnaHRFbGVtZW50SW1wbDo6cG9p
bnRzQXRaKCkgY29uc3QKK3sKKyAgICBTVkdTdHlsZWRFbGVtZW50SW1wbCAqZHVtbXkgPSAwOwor
ICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZE51bWJlckltcGw+KG1fcG9pbnRzQXRa
LCBkdW1teSk7Cit9CisKK1NWR0FuaW1hdGVkTnVtYmVySW1wbCAqU1ZHRkVMaWdodEVsZW1lbnRJ
bXBsOjpzcGVjdWxhckV4cG9uZW50KCkgY29uc3QKK3sKKyAgICBTVkdTdHlsZWRFbGVtZW50SW1w
bCAqZHVtbXkgPSAwOworICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZE51bWJlcklt
cGw+KG1fc3BlY3VsYXJFeHBvbmVudCwgZHVtbXkpOworfQorCitTVkdBbmltYXRlZE51bWJlcklt
cGwgKlNWR0ZFTGlnaHRFbGVtZW50SW1wbDo6bGltaXRpbmdDb25lQW5nbGUoKSBjb25zdAorewor
ICAgIFNWR1N0eWxlZEVsZW1lbnRJbXBsICpkdW1teSA9IDA7CisgICAgcmV0dXJuIGxhenlfY3Jl
YXRlPFNWR0FuaW1hdGVkTnVtYmVySW1wbD4obV9saW1pdGluZ0NvbmVBbmdsZSwgZHVtbXkpOwor
fQorCit2b2lkIFNWR0ZFTGlnaHRFbGVtZW50SW1wbDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoS0RP
TTo6TWFwcGVkQXR0cmlidXRlSW1wbCAqYXR0cikKK3sKKyAgICBLRE9NOjpET01TdHJpbmcgdmFs
dWUoYXR0ci0+dmFsdWUoKSk7CisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6YXpp
bXV0aEF0dHIpCisgICAgICAgIGF6aW11dGgoKS0+c2V0QmFzZVZhbCh2YWx1ZS5xc3RyaW5nKCku
dG9Eb3VibGUoKSk7CisgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjplbGV2
YXRpb25BdHRyKQorICAgICAgICBlbGV2YXRpb24oKS0+c2V0QmFzZVZhbCh2YWx1ZS5xc3RyaW5n
KCkudG9Eb3VibGUoKSk7CisgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp4
QXR0cikKKyAgICAgICAgeCgpLT5zZXRCYXNlVmFsKHZhbHVlLnFzdHJpbmcoKS50b0RvdWJsZSgp
KTsKKyAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnlBdHRyKQorICAgICAg
ICB5KCktPnNldEJhc2VWYWwodmFsdWUucXN0cmluZygpLnRvRG91YmxlKCkpOworICAgIGVsc2Ug
aWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6ekF0dHIpCisgICAgICAgIHooKS0+c2V0QmFz
ZVZhbCh2YWx1ZS5xc3RyaW5nKCkudG9Eb3VibGUoKSk7CisgICAgZWxzZSBpZiAoYXR0ci0+bmFt
ZSgpID09IFNWR05hbWVzOjpwb2ludHNBdFhBdHRyKQorICAgICAgICBwb2ludHNBdFgoKS0+c2V0
QmFzZVZhbCh2YWx1ZS5xc3RyaW5nKCkudG9Eb3VibGUoKSk7CisgICAgZWxzZSBpZiAoYXR0ci0+
bmFtZSgpID09IFNWR05hbWVzOjpwb2ludHNBdFlBdHRyKQorICAgICAgICBwb2ludHNBdFkoKS0+
c2V0QmFzZVZhbCh2YWx1ZS5xc3RyaW5nKCkudG9Eb3VibGUoKSk7CisgICAgZWxzZSBpZiAoYXR0
ci0+bmFtZSgpID09IFNWR05hbWVzOjpwb2ludHNBdFpBdHRyKQorICAgICAgICBwb2ludHNBdFoo
KS0+c2V0QmFzZVZhbCh2YWx1ZS5xc3RyaW5nKCkudG9Eb3VibGUoKSk7CisgICAgZWxzZSBpZiAo
YXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpzcGVjdWxhckV4cG9uZW50QXR0cikKKyAgICAgICAg
c3BlY3VsYXJFeHBvbmVudCgpLT5zZXRCYXNlVmFsKHZhbHVlLnFzdHJpbmcoKS50b0RvdWJsZSgp
KTsKKyAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmxpbWl0aW5nQ29uZUFu
Z2xlQXR0cikKKyAgICAgICAgbGltaXRpbmdDb25lQW5nbGUoKS0+c2V0QmFzZVZhbCh2YWx1ZS5x
c3RyaW5nKCkudG9Eb3VibGUoKSk7CisgICAgZWxzZQorICAgICAgICBTVkdFbGVtZW50SW1wbDo6
cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7Cit9CkluZGV4OiBrc3ZnMi9TVkdGRUxpZ2h0RWxl
bWVudEltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09CmRpZmYgLU5wdSBrc3ZnMi9TVkdGRUxpZ2h0RWxlbWVudElt
cGwuaAotLS0ga3N2ZzIvU1ZHRkVMaWdodEVsZW1lbnRJbXBsLmgJMSBKYW4gMTk3MCAwMDowMDow
MCAtMDAwMAorKysga3N2ZzIvU1ZHRkVMaWdodEVsZW1lbnRJbXBsLmgJMjggTm92IDIwMDUgMDM6
MDk6MTcgLTAwMDAKQEAgLTAsMCArMSw3MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBP
bGl2ZXIgSHVudCA8b2poMTZAc3R1ZGVudC5jYW50ZXJidXJ5LmFjLm56Pi4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIEtTVkdfU1ZHRkVMaWdodEVsZW1lbnRJbXBsX0gKKyNkZWZpbmUgS1NWR19TVkdGRUxp
Z2h0RWxlbWVudEltcGxfSAorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNWR0VsZW1l
bnRJbXBsLmgiCisKK25hbWVzcGFjZSBLU1ZHCit7CisgICAgY2xhc3MgU1ZHQW5pbWF0ZWROdW1i
ZXJJbXBsOworICAgIGNsYXNzIFNWR0FuaW1hdGVkTnVtYmVyTGlzdEltcGw7CisgICAgY2xhc3Mg
U1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbkltcGw7CisgICAgCisgICAgY2xhc3MgU1ZHRkVMaWdodEVs
ZW1lbnRJbXBsIDogcHVibGljIFNWR0VsZW1lbnRJbXBsCisgICAgeworICAgIHB1YmxpYzoKKyAg
ICAgICAgU1ZHRkVMaWdodEVsZW1lbnRJbXBsKGNvbnN0IEtET006OlF1YWxpZmllZE5hbWUmIHRh
Z05hbWUsIEtET006OkRvY3VtZW50SW1wbCAqZG9jKTsKKyAgICAgICAgdmlydHVhbCB+U1ZHRkVM
aWdodEVsZW1lbnRJbXBsKCk7CisgICAgICAgIAorICAgICAgICAvLyAnU1ZHQ29tcG9uZW50VHJh
bnNmZXJGdW5jdGlvbkVsZW1lbnQnIGZ1bmN0aW9ucworICAgICAgICBTVkdBbmltYXRlZE51bWJl
ckltcGwgKmF6aW11dGgoKSBjb25zdDsKKyAgICAgICAgU1ZHQW5pbWF0ZWROdW1iZXJJbXBsICpl
bGV2YXRpb24oKSBjb25zdDsKKyAgICAgICAgU1ZHQW5pbWF0ZWROdW1iZXJJbXBsICp4KCkgY29u
c3Q7CisgICAgICAgIFNWR0FuaW1hdGVkTnVtYmVySW1wbCAqeSgpIGNvbnN0OworICAgICAgICBT
VkdBbmltYXRlZE51bWJlckltcGwgKnooKSBjb25zdDsKKyAgICAgICAgU1ZHQW5pbWF0ZWROdW1i
ZXJJbXBsICpwb2ludHNBdFgoKSBjb25zdDsKKyAgICAgICAgU1ZHQW5pbWF0ZWROdW1iZXJJbXBs
ICpwb2ludHNBdFkoKSBjb25zdDsKKyAgICAgICAgU1ZHQW5pbWF0ZWROdW1iZXJJbXBsICpwb2lu
dHNBdFooKSBjb25zdDsKKyAgICAgICAgU1ZHQW5pbWF0ZWROdW1iZXJJbXBsICpzcGVjdWxhckV4
cG9uZW50KCkgY29uc3Q7CisgICAgICAgIFNWR0FuaW1hdGVkTnVtYmVySW1wbCAqbGltaXRpbmdD
b25lQW5nbGUoKSBjb25zdDsKKyAgICAgICAgCisgICAgICAgIC8vIERlcml2ZWQgZnJvbTogJ0Vs
ZW1lbnRJbXBsJworICAgICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoS0RP
TTo6TWFwcGVkQXR0cmlidXRlSW1wbCAqYXR0cik7ICAgICAgICAKKyAgICBwcml2YXRlOgorICAg
ICAgICBtdXRhYmxlIFNoYXJlZFB0cjxTVkdBbmltYXRlZE51bWJlckltcGw+IG1fYXppbXV0aDsK
KyAgICAgICAgbXV0YWJsZSBTaGFyZWRQdHI8U1ZHQW5pbWF0ZWROdW1iZXJJbXBsPiBtX2VsZXZh
dGlvbjsKKyAgICAgICAgbXV0YWJsZSBTaGFyZWRQdHI8U1ZHQW5pbWF0ZWROdW1iZXJJbXBsPiBt
X3g7CisgICAgICAgIG11dGFibGUgU2hhcmVkUHRyPFNWR0FuaW1hdGVkTnVtYmVySW1wbD4gbV95
OworICAgICAgICBtdXRhYmxlIFNoYXJlZFB0cjxTVkdBbmltYXRlZE51bWJlckltcGw+IG1fejsK
KyAgICAgICAgbXV0YWJsZSBTaGFyZWRQdHI8U1ZHQW5pbWF0ZWROdW1iZXJJbXBsPiBtX3BvaW50
c0F0WDsKKyAgICAgICAgbXV0YWJsZSBTaGFyZWRQdHI8U1ZHQW5pbWF0ZWROdW1iZXJJbXBsPiBt
X3BvaW50c0F0WTsKKyAgICAgICAgbXV0YWJsZSBTaGFyZWRQdHI8U1ZHQW5pbWF0ZWROdW1iZXJJ
bXBsPiBtX3BvaW50c0F0WjsKKyAgICAgICAgbXV0YWJsZSBTaGFyZWRQdHI8U1ZHQW5pbWF0ZWRO
dW1iZXJJbXBsPiBtX3NwZWN1bGFyRXhwb25lbnQ7CisgICAgICAgIG11dGFibGUgU2hhcmVkUHRy
PFNWR0FuaW1hdGVkTnVtYmVySW1wbD4gbV9saW1pdGluZ0NvbmVBbmdsZTsKKyAgICAgICAgCisg
ICAgfTsKK307CisKKyNlbmRpZgpJbmRleDoga3N2ZzIvU1ZHRkVQb2ludExpZ2h0RWxlbWVudElt
cGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KZGlmZiAtTnB1IGtzdmcyL1NWR0ZFUG9pbnRMaWdodEVsZW1lbnRJ
bXBsLmNwcAotLS0ga3N2ZzIvU1ZHRkVQb2ludExpZ2h0RWxlbWVudEltcGwuY3BwCTEgSmFuIDE5
NzAgMDA6MDA6MDAgLTAwMDAKKysrIGtzdmcyL1NWR0ZFUG9pbnRMaWdodEVsZW1lbnRJbXBsLmNw
cAkyOCBOb3YgMjAwNSAwMzowOToxNyAtMDAwMApAQCAtMCwwICsxLDM3IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA1IE9saXZlciBIdW50IDxvamgxNkBzdHVkZW50LmNhbnRlcmJ1cnkuYWMu
bno+LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQVVUSE9SIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpbmNsdWRlICJTVkdGRVBvaW50TGlnaHRFbGVtZW50SW1wbC5oIgor
Cit1c2luZyBuYW1lc3BhY2UgS1NWRzsKKworU1ZHRkVQb2ludExpZ2h0RWxlbWVudEltcGw6OlNW
R0ZFUG9pbnRMaWdodEVsZW1lbnRJbXBsKGNvbnN0IEtET006OlF1YWxpZmllZE5hbWUmIHRhZ05h
bWUsIEtET006OkRvY3VtZW50SW1wbCAqZG9jKSA6IAorU1ZHRkVMaWdodEVsZW1lbnRJbXBsKHRh
Z05hbWUsIGRvYykKK3sKK30KKworU1ZHRkVQb2ludExpZ2h0RWxlbWVudEltcGw6On5TVkdGRVBv
aW50TGlnaHRFbGVtZW50SW1wbCgpCit7Cit9CkluZGV4OiBrc3ZnMi9TVkdGRVBvaW50TGlnaHRF
bGVtZW50SW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtTnB1IGtzdmcyL1NWR0ZFUG9pbnRMaWdodEVs
ZW1lbnRJbXBsLmgKLS0tIGtzdmcyL1NWR0ZFUG9pbnRMaWdodEVsZW1lbnRJbXBsLmgJMSBKYW4g
MTk3MCAwMDowMDowMCAtMDAwMAorKysga3N2ZzIvU1ZHRkVQb2ludExpZ2h0RWxlbWVudEltcGwu
aAkyOCBOb3YgMjAwNSAwMzowOToxNyAtMDAwMApAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA1IE9saXZlciBIdW50IDxvamgxNkBzdHVkZW50LmNhbnRlcmJ1cnkuYWMu
bno+LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQVVUSE9SIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpZm5kZWYgS1NWR19TVkdGRVBvaW50TGlnaHRFbGVtZW50SW1wbF9I
CisjZGVmaW5lIEtTVkdfU1ZHRkVQb2ludExpZ2h0RWxlbWVudEltcGxfSAorCisjaW5jbHVkZSAi
U1ZHRkVMaWdodEVsZW1lbnRJbXBsLmgiCisKK25hbWVzcGFjZSBLU1ZHCit7CisgICAgY2xhc3Mg
U1ZHRkVQb2ludExpZ2h0RWxlbWVudEltcGwgOiBwdWJsaWMgU1ZHRkVMaWdodEVsZW1lbnRJbXBs
CisgICAgeworICAgICAgICBwdWJsaWM6CisgICAgICAgIFNWR0ZFUG9pbnRMaWdodEVsZW1lbnRJ
bXBsKGNvbnN0IEtET006OlF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIEtET006OkRvY3VtZW50SW1w
bCAqZG9jKTsKKyAgICAgICAgdmlydHVhbCB+U1ZHRkVQb2ludExpZ2h0RWxlbWVudEltcGwoKTsK
KyAgICB9OworfTsKKworI2VuZGlmCkluZGV4OiBrc3ZnMi9TVkdGRVNwZWN1bGFyTGlnaHRpbmdF
bGVtZW50SW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQpkaWZmIC1OcHUga3N2ZzIvU1ZHRkVTcGVjdWxhckxp
Z2h0aW5nRWxlbWVudEltcGwuY3BwCi0tLSBrc3ZnMi9TVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVt
ZW50SW1wbC5jcHAJMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMAorKysga3N2ZzIvU1ZHRkVTcGVj
dWxhckxpZ2h0aW5nRWxlbWVudEltcGwuY3BwCTI4IE5vdiAyMDA1IDA0OjM3OjUxIC0wMDAwCkBA
IC0wLDAgKzEsMTc0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1IE9saXZlciBIdW50IDxv
amgxNkBzdHVkZW50LmNhbnRlcmJ1cnkuYWMubno+LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlIDxxc3RyaW5nbGlzdC5oPgorCisjaW5jbHVkZSA8a2RvbS9jb3JlL0F0
dHJJbXBsLmg+CisKKyNpbmNsdWRlIDxrY2FudmFzL0tDYW52YXMuaD4KKyNpbmNsdWRlIDxrY2Fu
dmFzL0tDYW52YXNSZWdpc3RyeS5oPgorI2luY2x1ZGUgPGtjYW52YXMvS0NhbnZhc0ZpbHRlcnMu
aD4KKyNpbmNsdWRlIDxrY2FudmFzL2RldmljZS9LUmVuZGVyaW5nRGV2aWNlLmg+CisKKyNpbmNs
dWRlICJTVkdOYW1lcy5oIgorI2luY2x1ZGUgIlNWR0hlbHBlci5oIgorI2luY2x1ZGUgIlNWR1Jl
bmRlclN0eWxlLmgiCisjaW5jbHVkZSAiU1ZHQW5pbWF0ZWRDb2xvckltcGwuaCIKKyNpbmNsdWRl
ICJTVkdBbmltYXRlZE51bWJlckltcGwuaCIKKyNpbmNsdWRlICJTVkdBbmltYXRlZFN0cmluZ0lt
cGwuaCIKKyNpbmNsdWRlICJTVkdGRUxpZ2h0RWxlbWVudEltcGwuaCIKKyNpbmNsdWRlICJTVkdE
T01JbXBsZW1lbnRhdGlvbkltcGwuaCIKKyNpbmNsdWRlICJTVkdGRVNwZWN1bGFyTGlnaHRpbmdF
bGVtZW50SW1wbC5oIgorCisKK3VzaW5nIG5hbWVzcGFjZSBLU1ZHOworCitTVkdGRVNwZWN1bGFy
TGlnaHRpbmdFbGVtZW50SW1wbDo6U1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudEltcGwoY29u
c3QgS0RPTTo6UXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgS0RPTTo6RG9jdW1lbnRJbXBsICpkb2Mp
IDogCitTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXNJbXBsKHRhZ05hbWUsIGRv
YykKK3sKKyAgICBtX2ZpbHRlckVmZmVjdCA9IDA7Cit9CisKK1NWR0ZFU3BlY3VsYXJMaWdodGlu
Z0VsZW1lbnRJbXBsOjp+U1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudEltcGwoKQoreworICAg
IGlmIChtX2ZpbHRlckVmZmVjdCkKKyAgICAgICAgZGVsZXRlIG1fZmlsdGVyRWZmZWN0OworfQor
CitTVkdBbmltYXRlZFN0cmluZ0ltcGwgKlNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnRJbXBs
OjppbjEoKSBjb25zdAoreworICAgIFNWR1N0eWxlZEVsZW1lbnRJbXBsICpkdW1teSA9IDA7Cisg
ICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkU3RyaW5nSW1wbD4obV9pbjEsIGR1bW15
KTsKK30KKworU1ZHQW5pbWF0ZWROdW1iZXJJbXBsICpTVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVt
ZW50SW1wbDo6c3BlY3VsYXJDb25zdGFudCgpIGNvbnN0Cit7CisgICAgU1ZHU3R5bGVkRWxlbWVu
dEltcGwgKmR1bW15ID0gMDsKKyAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWROdW1i
ZXJJbXBsPihtX3NwZWN1bGFyQ29uc3RhbnQsIGR1bW15KTsKK30KKworU1ZHQW5pbWF0ZWROdW1i
ZXJJbXBsICpTVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50SW1wbDo6c3BlY3VsYXJFeHBvbmVu
dCgpIGNvbnN0Cit7CisgICAgU1ZHU3R5bGVkRWxlbWVudEltcGwgKmR1bW15ID0gMDsKKyAgICBy
ZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWROdW1iZXJJbXBsPihtX3NwZWN1bGFyRXhwb25l
bnQsIGR1bW15KTsKK30KKworU1ZHQW5pbWF0ZWROdW1iZXJJbXBsICpTVkdGRVNwZWN1bGFyTGln
aHRpbmdFbGVtZW50SW1wbDo6c3VyZmFjZVNjYWxlKCkgY29uc3QKK3sKKyAgICBTVkdTdHlsZWRF
bGVtZW50SW1wbCAqZHVtbXkgPSAwOworICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRl
ZE51bWJlckltcGw+KG1fc3VyZmFjZVNjYWxlLCBkdW1teSk7Cit9CisKK1NWR0FuaW1hdGVkTnVt
YmVySW1wbCAqU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudEltcGw6Omtlcm5lbFVuaXRMZW5n
dGhYKCkgY29uc3QKK3sKKyAgICBTVkdTdHlsZWRFbGVtZW50SW1wbCAqZHVtbXkgPSAwOworICAg
IHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZE51bWJlckltcGw+KG1fa2VybmVsVW5pdExl
bmd0aFgsIGR1bW15KTsKK30KKworU1ZHQW5pbWF0ZWROdW1iZXJJbXBsICpTVkdGRVNwZWN1bGFy
TGlnaHRpbmdFbGVtZW50SW1wbDo6a2VybmVsVW5pdExlbmd0aFkoKSBjb25zdAoreworICAgIFNW
R1N0eWxlZEVsZW1lbnRJbXBsICpkdW1teSA9IDA7CisgICAgcmV0dXJuIGxhenlfY3JlYXRlPFNW
R0FuaW1hdGVkTnVtYmVySW1wbD4obV9rZXJuZWxVbml0TGVuZ3RoWSwgZHVtbXkpOworfQorCitT
VkdBbmltYXRlZENvbG9ySW1wbCAgKlNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnRJbXBsOjps
aWdodGluZ0NvbG9yKCkgY29uc3QKK3sKKyAgICBTVkdTdHlsZWRFbGVtZW50SW1wbCAqZHVtbXkg
PSAwOworICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZENvbG9ySW1wbD4obV9saWdo
dGluZ0NvbG9yLCBkdW1teSk7Cit9CisKK3ZvaWQgU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVu
dEltcGw6OnBhcnNlTWFwcGVkQXR0cmlidXRlKEtET006Ok1hcHBlZEF0dHJpYnV0ZUltcGwgKmF0
dHIpCit7ICAgIAorICAgIEtET006OkRPTVN0cmluZyB2YWx1ZShhdHRyLT52YWx1ZSgpKTsKKyAg
ICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjppbkF0dHIpCisgICAgICAgIGluMSgpLT5z
ZXRCYXNlVmFsKHZhbHVlLmltcGwoKSk7CisgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNW
R05hbWVzOjpzdXJmYWNlU2NhbGVBdHRyKQorICAgICAgICBzdXJmYWNlU2NhbGUoKS0+c2V0QmFz
ZVZhbCh2YWx1ZS5xc3RyaW5nKCkudG9Eb3VibGUoKSk7CisgICAgZWxzZSBpZiAoYXR0ci0+bmFt
ZSgpID09IFNWR05hbWVzOjpzcGVjdWxhckNvbnN0YW50QXR0cikKKyAgICAgICAgc3BlY3VsYXJD
b25zdGFudCgpLT5zZXRCYXNlVmFsKHZhbHVlLnFzdHJpbmcoKS50b0RvdWJsZSgpKTsKKyAgICBl
bHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnNwZWN1bGFyRXhwb25lbnRBdHRyKQor
ICAgICAgICBzcGVjdWxhckV4cG9uZW50KCktPnNldEJhc2VWYWwodmFsdWUucXN0cmluZygpLnRv
RG91YmxlKCkpOworICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6a2VybmVs
VW5pdExlbmd0aEF0dHIpIHsKKyAgICAgICAgUVN0cmluZ0xpc3QgbnVtYmVycyA9IFFTdHJpbmdM
aXN0OjpzcGxpdCgnICcsIHZhbHVlLnFzdHJpbmcoKSk7CisgICAgICAgIGtlcm5lbFVuaXRMZW5n
dGhYKCktPnNldEJhc2VWYWwobnVtYmVyc1swXS50b0RvdWJsZSgpKTsKKyAgICAgICAgaWYgKG51
bWJlcnMuY291bnQoKSA9PSAxKQorICAgICAgICAgICAga2VybmVsVW5pdExlbmd0aFkoKS0+c2V0
QmFzZVZhbChudW1iZXJzWzBdLnRvRG91YmxlKCkpOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBrZXJuZWxVbml0TGVuZ3RoWSgpLT5zZXRCYXNlVmFsKG51bWJlcnNbMV0udG9Eb3VibGUoKSk7
CisgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmxpZ2h0aW5nX2NvbG9y
QXR0cikKKyAgICAgICAgLy9GSVhNRSB0aGlzIGlzIGJhZCwgcG90ZW50aWFsIG1lbW9yeSBsZWFr
CisgICAgICAgIGxpZ2h0aW5nQ29sb3IoKS0+c2V0QmFzZVZhbChuZXcgU1ZHQ29sb3JJbXBsKHZh
bHVlLmltcGwoKSkpOworICAgIGVsc2UKKyAgICAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRh
cmRBdHRyaWJ1dGVzSW1wbDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7Cit9CisKK0tDYW52
YXNGRVNwZWN1bGFyTGlnaHRpbmcgKlNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnRJbXBsOjpm
aWx0ZXJFZmZlY3QoKSBjb25zdAoreworICAgIGlmICghbV9maWx0ZXJFZmZlY3QpIHsKKyAgICAg
ICAgbV9maWx0ZXJFZmZlY3QgPSBzdGF0aWNfY2FzdDxLQ2FudmFzRkVTcGVjdWxhckxpZ2h0aW5n
ICo+KFFQYWludGVyOjpyZW5kZXJpbmdEZXZpY2UoKS0+Y3JlYXRlRmlsdGVyRWZmZWN0KEZFX1NQ
RUNVTEFSX0xJR0hUSU5HKSk7CisgICAgICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRJbihLRE9NOjpE
T01TdHJpbmcoaW4xKCktPmJhc2VWYWwoKSkucXN0cmluZygpKTsKKyAgICAgICAgc2V0U3RhbmRh
cmRBdHRyaWJ1dGVzKG1fZmlsdGVyRWZmZWN0KTsKKyAgICAgICAgbV9maWx0ZXJFZmZlY3QtPnNl
dFNwZWN1bGFyQ29uc3RhbnQoKHNwZWN1bGFyQ29uc3RhbnQoKS0+YmFzZVZhbCgpKSk7CisgICAg
ICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRTcGVjdWxhckV4cG9uZW50KChzcGVjdWxhckV4cG9uZW50
KCktPmJhc2VWYWwoKSkpOworICAgICAgICBtX2ZpbHRlckVmZmVjdC0+c2V0U3VyZmFjZVNjYWxl
KChzdXJmYWNlU2NhbGUoKS0+YmFzZVZhbCgpKSk7CisgICAgICAgIG1fZmlsdGVyRWZmZWN0LT5z
ZXRLZXJuZWxVbml0TGVuZ3RoWCgoa2VybmVsVW5pdExlbmd0aFgoKS0+YmFzZVZhbCgpKSk7Cisg
ICAgICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRLZXJuZWxVbml0TGVuZ3RoWSgoa2VybmVsVW5pdExl
bmd0aFkoKS0+YmFzZVZhbCgpKSk7CisgICAgICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRMaWdodGlu
Z0NvbG9yKGxpZ2h0aW5nQ29sb3IoKS0+YmFzZVZhbCgpLT5jb2xvcigpKTsKKyAgICB9CisgICAg
dXBkYXRlTGlnaHRzKCk7CisgICAgcmV0dXJuIG1fZmlsdGVyRWZmZWN0OworfQorCit2b2lkIFNW
R0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnRJbXBsOjp1cGRhdGVMaWdodHMoKSBjb25zdAorewor
ICAgIGlmICghbV9maWx0ZXJFZmZlY3QpCisgICAgICAgIHJldHVybjsKKyAgICBLRE9NOjpOb2Rl
SW1wbCAqbiA9IGZpcnN0Q2hpbGQoKTsKKyAgICBpZiAoIW4pIAorICAgICAgICByZXR1cm47Cisg
ICAgS0NMaWdodFNvdXJjZSAqIGxpZ2h0ID0gMDsKKyAgICAKKyAgICBkbyB7CisgICAgICAgIGlm
IChuLT5ub2RlTmFtZSgpLnFzdHJpbmcoKSA9PSBTVkdOYW1lczo6ZmVEaXN0YW50TGlnaHRUYWcp
IHsgICAgICAKKyAgICAgICAgICAgIFNWR0ZFTGlnaHRFbGVtZW50SW1wbCAqbGlnaHROb2RlID0g
c3RhdGljX2Nhc3Q8U1ZHRkVMaWdodEVsZW1lbnRJbXBsICo+KG4pOyAgCisgICAgICAgICAgICBs
aWdodCA9IG5ldyBLQ0Rpc3RhbnRMaWdodFNvdXJjZShsaWdodE5vZGUtPmF6aW11dGgoKS0+YmFz
ZVZhbCgpLCBsaWdodE5vZGUtPmVsZXZhdGlvbigpLT5iYXNlVmFsKCkpOworICAgICAgICB9IGVs
c2UgaWYgKG4tPm5vZGVOYW1lKCkucXN0cmluZygpID09IFNWR05hbWVzOjpmZVBvaW50TGlnaHRU
YWcpIHsKKyAgICAgICAgICAgIFNWR0ZFTGlnaHRFbGVtZW50SW1wbCAqbGlnaHROb2RlID0gc3Rh
dGljX2Nhc3Q8U1ZHRkVMaWdodEVsZW1lbnRJbXBsICo+KG4pOyAgCisgICAgICAgICAgICBLQ2Fu
dmFzUG9pbnQzRiBwb3MobGlnaHROb2RlLT54KCktPmJhc2VWYWwoKSwgbGlnaHROb2RlLT55KCkt
PmJhc2VWYWwoKSwgbGlnaHROb2RlLT56KCktPmJhc2VWYWwoKSk7CisgICAgICAgICAgICBsaWdo
dCA9IG5ldyBLQ1BvaW50TGlnaHRTb3VyY2UocG9zKTsKKyAgICAgICAgfSBlbHNlIGlmIChuLT5u
b2RlTmFtZSgpLnFzdHJpbmcoKSA9PSBTVkdOYW1lczo6ZmVTcG90TGlnaHRUYWcpIHsKKyAgICAg
ICAgICAgIFNWR0ZFTGlnaHRFbGVtZW50SW1wbCAqbGlnaHROb2RlID0gc3RhdGljX2Nhc3Q8U1ZH
RkVMaWdodEVsZW1lbnRJbXBsICo+KG4pOyAgCisgICAgICAgICAgICBLQ2FudmFzUG9pbnQzRiBw
b3MobGlnaHROb2RlLT54KCktPmJhc2VWYWwoKSwgbGlnaHROb2RlLT55KCktPmJhc2VWYWwoKSwg
bGlnaHROb2RlLT56KCktPmJhc2VWYWwoKSk7CisgICAgICAgICAgICAvL2NvbnZlcnQgbG9va0F0
IHRvIGEgZGlyZWN0aW9uCisgICAgICAgICAgICBLQ2FudmFzUG9pbnQzRiBkaXJlY3Rpb24obGln
aHROb2RlLT5wb2ludHNBdFgoKS0+YmFzZVZhbCgpLXBvcy54KCksIAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGxpZ2h0Tm9kZS0+cG9pbnRzQXRZKCktPmJhc2VWYWwoKS1w
b3MueSgpLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWdodE5vZGUt
PnBvaW50c0F0WigpLT5iYXNlVmFsKCktcG9zLnooKSk7CisgICAgICAgICAgICBkaXJlY3Rpb24u
bm9ybWFsaXplKCk7CisgICAgICAgICAgICBsaWdodCA9IG5ldyBLQ1Nwb3RMaWdodFNvdXJjZShw
b3MsIGRpcmVjdGlvbiwgbGlnaHROb2RlLT5zcGVjdWxhckV4cG9uZW50KCktPmJhc2VWYWwoKSwg
bGlnaHROb2RlLT5saW1pdGluZ0NvbmVBbmdsZSgpLT5iYXNlVmFsKCkpOworICAgICAgICB9ICAg
ICAgCisgICAgfSB3aGlsZSAoKCFsaWdodCkgJiYgKG49bi0+bmV4dFNpYmxpbmcoKSkpOworICAg
IG1fZmlsdGVyRWZmZWN0LT5zZXRMaWdodFNvdXJjZShsaWdodCk7Cit9CkluZGV4OiBrc3ZnMi9T
VkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50SW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtTnB1IGtz
dmcyL1NWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnRJbXBsLmgKLS0tIGtzdmcyL1NWR0ZFU3Bl
Y3VsYXJMaWdodGluZ0VsZW1lbnRJbXBsLmgJMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMAorKysg
a3N2ZzIvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudEltcGwuaAkyOCBOb3YgMjAwNSAwMzoz
MzoyNiAtMDAwMApAQCAtMCwwICsxLDczIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1IE9s
aXZlciBIdW50IDxvamgxNkBzdHVkZW50LmNhbnRlcmJ1cnkuYWMubno+LiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgS1NWR19TVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50SW1wbF9ICisjZGVmaW5lIEtT
VkdfU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudEltcGxfSAorCisjaW5jbHVkZSAiU1ZHRmls
dGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzSW1wbC5oIgorI2luY2x1ZGUgIktDYW52YXNG
aWx0ZXJzLmgiCisKK25hbWVzcGFjZSBLU1ZHCit7CisgICAgY2xhc3MgU1ZHQW5pbWF0ZWROdW1i
ZXJJbXBsOworICAgIGNsYXNzIFNWR0FuaW1hdGVkU3RyaW5nSW1wbDsKKyAgICBjbGFzcyBTVkdB
bmltYXRlZENvbG9ySW1wbDsKKyAgICAKKyAgICBjbGFzcyBTVkdGRVNwZWN1bGFyTGlnaHRpbmdF
bGVtZW50SW1wbCA6IHB1YmxpYyBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXNJ
bXBsCisgICAgeworICAgIHB1YmxpYzoKKyAgICAgICAgU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxl
bWVudEltcGwoY29uc3QgS0RPTTo6UXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgS0RPTTo6RG9jdW1l
bnRJbXBsICpkb2MpOworICAgICAgICB2aXJ0dWFsIH5TVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVt
ZW50SW1wbCgpOworICAgICAgICAKKyAgICAgICAgLy8gJ1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxl
bWVudCcgZnVuY3Rpb25zCisgICAgICAgIFNWR0FuaW1hdGVkU3RyaW5nSW1wbCAqaW4xKCkgY29u
c3Q7CisgICAgICAgIFNWR0FuaW1hdGVkTnVtYmVySW1wbCAqc3BlY3VsYXJDb25zdGFudCgpIGNv
bnN0OworICAgICAgICBTVkdBbmltYXRlZE51bWJlckltcGwgKnNwZWN1bGFyRXhwb25lbnQoKSBj
b25zdDsKKyAgICAgICAgU1ZHQW5pbWF0ZWROdW1iZXJJbXBsICpzdXJmYWNlU2NhbGUoKSBjb25z
dDsKKyAgICAgICAgU1ZHQW5pbWF0ZWROdW1iZXJJbXBsICprZXJuZWxVbml0TGVuZ3RoWCgpIGNv
bnN0OworICAgICAgICBTVkdBbmltYXRlZE51bWJlckltcGwgKmtlcm5lbFVuaXRMZW5ndGhZKCkg
Y29uc3Q7CisgICAgICAgIFNWR0FuaW1hdGVkQ29sb3JJbXBsICAqbGlnaHRpbmdDb2xvcigpIGNv
bnN0OworICAgICAgICAKKyAgICAgICAgLy8gRGVyaXZlZCBmcm9tOiAnRWxlbWVudEltcGwnCisg
ICAgICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShLRE9NOjpNYXBwZWRBdHRy
aWJ1dGVJbXBsICphdHRyKTsKKyAgICAgICAgCisgICAgICAgIHZpcnR1YWwgS0NhbnZhc0ZFU3Bl
Y3VsYXJMaWdodGluZyAqZmlsdGVyRWZmZWN0KCkgY29uc3Q7CisgICAgcHJpdmF0ZToKKyAgICAg
ICAgbXV0YWJsZSBTaGFyZWRQdHI8U1ZHQW5pbWF0ZWRTdHJpbmdJbXBsPiBtX2luMTsKKyAgICAg
ICAgbXV0YWJsZSBTaGFyZWRQdHI8U1ZHQW5pbWF0ZWROdW1iZXJJbXBsPiBtX3NwZWN1bGFyQ29u
c3RhbnQ7CisgICAgICAgIG11dGFibGUgU2hhcmVkUHRyPFNWR0FuaW1hdGVkTnVtYmVySW1wbD4g
bV9zcGVjdWxhckV4cG9uZW50OworICAgICAgICBtdXRhYmxlIFNoYXJlZFB0cjxTVkdBbmltYXRl
ZE51bWJlckltcGw+IG1fc3VyZmFjZVNjYWxlOworICAgICAgICBtdXRhYmxlIFNoYXJlZFB0cjxT
VkdBbmltYXRlZENvbG9ySW1wbD4gIG1fbGlnaHRpbmdDb2xvcjsKKyAgICAgICAgbXV0YWJsZSBT
aGFyZWRQdHI8U1ZHQW5pbWF0ZWROdW1iZXJJbXBsPiBtX2tlcm5lbFVuaXRMZW5ndGhYOworICAg
ICAgICBtdXRhYmxlIFNoYXJlZFB0cjxTVkdBbmltYXRlZE51bWJlckltcGw+IG1fa2VybmVsVW5p
dExlbmd0aFk7CisgICAgICAgIC8vbmVlZCBvdGhlciBwcm9wZXJ0aWVzIGhlcmUuLi4KKyAgICAg
ICAgbXV0YWJsZSBLQ2FudmFzRkVTcGVjdWxhckxpZ2h0aW5nICptX2ZpbHRlckVmZmVjdDsKKyAg
ICAgICAgCisgICAgICAgIC8vbGlnaHQgbWFuYWdlbWVudAorICAgICAgICB2b2lkIHVwZGF0ZUxp
Z2h0cygpIGNvbnN0OworICAgIH07Cit9OworCisjZW5kaWYKSW5kZXg6IGtzdmcyL1NWR0ZFU3Bv
dExpZ2h0RWxlbWVudEltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtTnB1IGtzdmcyL1NWR0ZFU3Bv
dExpZ2h0RWxlbWVudEltcGwuY3BwCi0tLSBrc3ZnMi9TVkdGRVNwb3RMaWdodEVsZW1lbnRJbXBs
LmNwcAkxIEphbiAxOTcwIDAwOjAwOjAwIC0wMDAwCisrKyBrc3ZnMi9TVkdGRVNwb3RMaWdodEVs
ZW1lbnRJbXBsLmNwcAkyOCBOb3YgMjAwNSAwMzowOToxNyAtMDAwMApAQCAtMCwwICsxLDM3IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1IE9saXZlciBIdW50IDxvamgxNkBzdHVkZW50LmNh
bnRlcmJ1cnkuYWMubno+LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJTVkdGRVNwb3RMaWdodEVsZW1l
bnRJbXBsLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBLU1ZHOworCitTVkdGRVNwb3RMaWdodEVsZW1l
bnRJbXBsOjpTVkdGRVNwb3RMaWdodEVsZW1lbnRJbXBsKGNvbnN0IEtET006OlF1YWxpZmllZE5h
bWUmIHRhZ05hbWUsIEtET006OkRvY3VtZW50SW1wbCAqZG9jKSA6IAorU1ZHRkVMaWdodEVsZW1l
bnRJbXBsKHRhZ05hbWUsIGRvYykKK3sKK30KKworU1ZHRkVTcG90TGlnaHRFbGVtZW50SW1wbDo6
flNWR0ZFU3BvdExpZ2h0RWxlbWVudEltcGwoKQoreworfQpJbmRleDoga3N2ZzIvU1ZHRkVTcG90
TGlnaHRFbGVtZW50SW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtTnB1IGtzdmcyL1NWR0ZFU3BvdExp
Z2h0RWxlbWVudEltcGwuaAotLS0ga3N2ZzIvU1ZHRkVTcG90TGlnaHRFbGVtZW50SW1wbC5oCTEg
SmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAKKysrIGtzdmcyL1NWR0ZFU3BvdExpZ2h0RWxlbWVudElt
cGwuaAkyOCBOb3YgMjAwNSAwMzowOToxNyAtMDAwMApAQCAtMCwwICsxLDQxIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDA1IE9saXZlciBIdW50IDxvamgxNkBzdHVkZW50LmNhbnRlcmJ1cnku
YWMubno+LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQVVUSE9SIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgS1NWR19TVkdGRVNwb3RMaWdodEVsZW1lbnRJbXBs
X0gKKyNkZWZpbmUgS1NWR19TVkdGRVNwb3RMaWdodEVsZW1lbnRJbXBsX0gKKworI2luY2x1ZGUg
IlNWR0ZFTGlnaHRFbGVtZW50SW1wbC5oIgorCituYW1lc3BhY2UgS1NWRworeworICAgIGNsYXNz
IFNWR0ZFU3BvdExpZ2h0RWxlbWVudEltcGwgOiBwdWJsaWMgU1ZHRkVMaWdodEVsZW1lbnRJbXBs
CisgICAgeworICAgIHB1YmxpYzoKKyAgICAgICAgU1ZHRkVTcG90TGlnaHRFbGVtZW50SW1wbChj
b25zdCBLRE9NOjpRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBLRE9NOjpEb2N1bWVudEltcGwgKmRv
Yyk7CisgICAgICAgIHZpcnR1YWwgflNWR0ZFU3BvdExpZ2h0RWxlbWVudEltcGwoKTsKKyAgICB9
OworfTsKKworI2VuZGlmCkluZGV4OiBrc3ZnMi9zdmcvU1ZHRWxlbWVudEltcGwuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL3N2Zy9TVkdFbGVtZW50
SW1wbC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTIKZGlmZiAtcCAtdSAtcjEuMTIga3N2
ZzIvc3ZnL1NWR0VsZW1lbnRJbXBsLmNwcAotLS0ga3N2ZzIvc3ZnL1NWR0VsZW1lbnRJbXBsLmNw
cAkyNiBOb3YgMjAwNSAyMjozNTo0NyAtMDAwMAkxLjEyCisrKyBrc3ZnMi9zdmcvU1ZHRWxlbWVu
dEltcGwuY3BwCTI4IE5vdiAyMDA1IDA0OjUyOjIxIC0wMDAwCkBAIC0zMiw3ICszMiw3IEBACiAj
aW5jbHVkZSAia3N2Zy5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVkZSAiRXZlbnRO
YW1lcy5oIgotI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgImh0bWxuYW1lcy5oIgog
I2luY2x1ZGUgIlNWR0VsZW1lbnRJbXBsLmgiCiAjaW5jbHVkZSAiU1ZHU1ZHRWxlbWVudEltcGwu
aCIKICNpbmNsdWRlICJTVkdET01JbXBsZW1lbnRhdGlvbkltcGwuaCIKSW5kZXg6IGtzdmcyL3N2
Zy9TVkdGRUNvbXBvc2l0ZUVsZW1lbnRJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zz
L3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9zdmcvU1ZHRkVDb21wb3NpdGVFbGVtZW50SW1wbC5jcHAs
dgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTEKZGlmZiAtcCAtdSAtcjEuMTEga3N2ZzIvc3ZnL1NW
R0ZFQ29tcG9zaXRlRWxlbWVudEltcGwuY3BwCi0tLSBrc3ZnMi9zdmcvU1ZHRkVDb21wb3NpdGVF
bGVtZW50SW1wbC5jcHAJMjcgTm92IDIwMDUgMTE6MDI6MjIgLTAwMDAJMS4xMQorKysga3N2ZzIv
c3ZnL1NWR0ZFQ29tcG9zaXRlRWxlbWVudEltcGwuY3BwCTI4IE5vdiAyMDA1IDA0OjUyOjIxIC0w
MDAwCkBAIC0xMTEsMTMgKzExMSwyMSBAQCB2b2lkIFNWR0ZFQ29tcG9zaXRlRWxlbWVudEltcGw6
OnBhcnNlTWFwCiAgICAgICAgICAgICBfb3BlcmF0b3IoKS0+c2V0QmFzZVZhbChTVkdfRkVDT01Q
T1NJVEVfT1BFUkFUT1JfQVRPUCk7CiAgICAgICAgIGVsc2UgaWYodmFsdWUgPT0gInhvciIpCiAg
ICAgICAgICAgICBfb3BlcmF0b3IoKS0+c2V0QmFzZVZhbChTVkdfRkVDT01QT1NJVEVfT1BFUkFU
T1JfWE9SKTsKLSAgICAgICAgZWxzZSBpZih2YWx1ZSA9PSAiYXJpdGhtYXRpYyIpCisgICAgICAg
IGVsc2UgaWYodmFsdWUgPT0gImFyaXRobWV0aWMiKQogICAgICAgICAgICAgX29wZXJhdG9yKCkt
PnNldEJhc2VWYWwoU1ZHX0ZFQ09NUE9TSVRFX09QRVJBVE9SX0FSSVRITUVUSUMpOwogICAgIH0K
ICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmluQXR0cikKICAgICAgICAg
aW4xKCktPnNldEJhc2VWYWwodmFsdWUuaW1wbCgpKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1l
KCkgPT0gU1ZHTmFtZXM6OmluMkF0dHIpCiAgICAgICAgIGluMigpLT5zZXRCYXNlVmFsKHZhbHVl
LmltcGwoKSk7CisgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjprMUF0dHIp
CisgICAgICAgIGsxKCktPnNldEJhc2VWYWwodmFsdWUucXN0cmluZygpLnRvRG91YmxlKCkpOwor
ICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6azJBdHRyKQorICAgICAgICBr
MigpLT5zZXRCYXNlVmFsKHZhbHVlLnFzdHJpbmcoKS50b0RvdWJsZSgpKTsKKyAgICBlbHNlIGlm
IChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmszQXR0cikKKyAgICAgICAgazMoKS0+c2V0QmFz
ZVZhbCh2YWx1ZS5xc3RyaW5nKCkudG9Eb3VibGUoKSk7CisgICAgZWxzZSBpZiAoYXR0ci0+bmFt
ZSgpID09IFNWR05hbWVzOjprNEF0dHIpCisgICAgICAgIGs0KCktPnNldEJhc2VWYWwodmFsdWUu
cXN0cmluZygpLnRvRG91YmxlKCkpOwogICAgIGVsc2UKICAgICAgICAgU1ZHRmlsdGVyUHJpbWl0
aXZlU3RhbmRhcmRBdHRyaWJ1dGVzSW1wbDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CiB9
CkluZGV4OiBrc3ZnMi9zdmcvU1ZHU1ZHRWxlbWVudEltcGwuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZp
bGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL3N2Zy9TVkdTVkdFbGVtZW50SW1wbC5jcHAs
dgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTQKZGlmZiAtcCAtdSAtcjEuMTQga3N2ZzIvc3ZnL1NW
R1NWR0VsZW1lbnRJbXBsLmNwcAotLS0ga3N2ZzIvc3ZnL1NWR1NWR0VsZW1lbnRJbXBsLmNwcAky
NyBOb3YgMjAwNSAxMTowMjoyNiAtMDAwMAkxLjE0CisrKyBrc3ZnMi9zdmcvU1ZHU1ZHRWxlbWVu
dEltcGwuY3BwCTI4IE5vdiAyMDA1IDA0OjUyOjIyIC0wMDAwCkBAIC01OSw3ICs1OSw3IEBACiAj
aW5jbHVkZSA8cTNwYWludGRldmljZW1ldHJpY3MuaD4KICNpbmNsdWRlIDxxdGV4dHN0cmVhbS5o
PgogCi0jaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiaHRtbG5hbWVzLmgiCiAjaW5j
bHVkZSAiRXZlbnROYW1lcy5oIgogCiB1c2luZyBuYW1lc3BhY2UgS1NWRzsKSW5kZXg6IGtzdmcy
L3N2Zy9TVkdTdHlsZWRFbGVtZW50SW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9y
b290L1NWR1N1cHBvcnQva3N2ZzIvc3ZnL1NWR1N0eWxlZEVsZW1lbnRJbXBsLmNwcCx2CnJldHJp
ZXZpbmcgcmV2aXNpb24gMS4xMwpkaWZmIC1wIC11IC1yMS4xMyBrc3ZnMi9zdmcvU1ZHU3R5bGVk
RWxlbWVudEltcGwuY3BwCi0tLSBrc3ZnMi9zdmcvU1ZHU3R5bGVkRWxlbWVudEltcGwuY3BwCTI3
IE5vdiAyMDA1IDExOjAyOjI3IC0wMDAwCTEuMTMKKysrIGtzdmcyL3N2Zy9TVkdTdHlsZWRFbGVt
ZW50SW1wbC5jcHAJMjggTm92IDIwMDUgMDQ6NTI6MjIgLTAwMDAKQEAgLTQ5LDcgKzQ5LDcgQEAK
ICNpbmNsdWRlICJTVkdIZWxwZXIuaCIKIAogI2luY2x1ZGUgIlNWR05hbWVzLmgiCi0jaW5jbHVk
ZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiaHRtbG5hbWVzLmgiCiAKIHVzaW5nIG5hbWVzcGFj
ZSBLU1ZHOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>4832</attachid>
            <date>2005-11-28 04:55:48 -0800</date>
            <delta_ts>2005-11-28 15:18:29 -0800</delta_ts>
            <desc>Lighting patch, with more formatting fixes</desc>
            <filename>lighting.patch</filename>
            <type>text/plain</type>
            <size>124038</size>
            <attacher name="Oliver Hunt">oliver</attacher>
            
              <data encoding="base64">SW5kZXg6IGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9kZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tBcml0
aG1ldGljRmlsdGVyLmNpa2VybmVsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtTnB1IGtjYW52YXMvZGV2aWNl
L3F1YXJ0ei9kZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tBcml0aG1ldGljRmlsdGVyLmNpa2VybmVs
Ci0tLSBrY2FudmFzL2RldmljZS9xdWFydHovZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL1dLQXJpdGht
ZXRpY0ZpbHRlci5jaWtlcm5lbAkxIEphbiAxOTcwIDAwOjAwOjAwIC0wMDAwCisrKyBrY2FudmFz
L2RldmljZS9xdWFydHovZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL1dLQXJpdGhtZXRpY0ZpbHRlci5j
aWtlcm5lbAkyOCBOb3YgMjAwNSAwMzozNzowNiAtMDAwMApAQCAtMCwwICsxLDcgQEAKK2tlcm5l
bCB2ZWM0IGFyaXRobWV0aWNDb21wb3NpdGUoc2FtcGxlciBpbjEsIHNhbXBsZXIgaW4yLCBmbG9h
dCBrMSwgZmxvYXQgazIsIGZsb2F0IGszLCBmbG9hdCBrNCkKK3sKKyAgICB2ZWM0IHZpbjEgPSBz
YW1wbGUoaW4xLCBzYW1wbGVyQ29vcmQoaW4xKSk7CisgICAgdmVjNCB2aW4yID0gc2FtcGxlKGlu
Miwgc2FtcGxlckNvb3JkKGluMikpOworICAgIHZlYzQgcmVzID0gazEqdmluMSp2aW4yICsgazIq
dmluMSArIGszKnZpbjIgKyB2ZWM0KGs0KTsKKyAgICByZXR1cm4gcmVzOworfQpJbmRleDoga2Nh
bnZhcy9kZXZpY2UvcXVhcnR6L2RldmljZS9xdWFydHovZmlsdGVycy9XS0FyaXRobWV0aWNGaWx0
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09CmRpZmYgLU5wdSBrY2FudmFzL2RldmljZS9xdWFydHovZGV2aWNlL3F1
YXJ0ei9maWx0ZXJzL1dLQXJpdGhtZXRpY0ZpbHRlci5oCi0tLSBrY2FudmFzL2RldmljZS9xdWFy
dHovZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL1dLQXJpdGhtZXRpY0ZpbHRlci5oCTEgSmFuIDE5NzAg
MDA6MDA6MDAgLTAwMDAKKysrIGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9kZXZpY2UvcXVhcnR6L2Zp
bHRlcnMvV0tBcml0aG1ldGljRmlsdGVyLmgJMjggTm92IDIwMDUgMDU6Mzc6MDcgLTAwMDAKQEAg
LTAsMCArMSwzNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBPbGl2ZXIgSHVudCA8b2po
MTZAc3R1ZGVudC5jYW50ZXJidXJ5LmFjLm56Pi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW1wb3J0IDxRdWFydHpD
b3JlL0NvcmVJbWFnZS5oPgorCitAaW50ZXJmYWNlIFdLQXJpdGhtZXRpY0ZpbHRlciA6IENJRmls
dGVyIHsKKyAgICBDSUltYWdlICAqaW5wdXRJbWFnZTsKKyAgICBDSUltYWdlICAqaW5wdXRCYWNr
Z3JvdW5kSW1hZ2U7CisgICAgTlNOdW1iZXIgKmlucHV0SzE7CisgICAgTlNOdW1iZXIgKmlucHV0
SzI7CisgICAgTlNOdW1iZXIgKmlucHV0SzM7CisgICAgTlNOdW1iZXIgKmlucHV0SzQ7Cit9CisK
K0BlbmQKSW5kZXg6IGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9kZXZpY2UvcXVhcnR6L2ZpbHRlcnMv
V0tBcml0aG1ldGljRmlsdGVyLm0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpkaWZmIC1OcHUga2NhbnZhcy9kZXZpY2Uv
cXVhcnR6L2RldmljZS9xdWFydHovZmlsdGVycy9XS0FyaXRobWV0aWNGaWx0ZXIubQotLS0ga2Nh
bnZhcy9kZXZpY2UvcXVhcnR6L2RldmljZS9xdWFydHovZmlsdGVycy9XS0FyaXRobWV0aWNGaWx0
ZXIubQkxIEphbiAxOTcwIDAwOjAwOjAwIC0wMDAwCisrKyBrY2FudmFzL2RldmljZS9xdWFydHov
ZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL1dLQXJpdGhtZXRpY0ZpbHRlci5tCTI4IE5vdiAyMDA1IDEw
OjM5OjAyIC0wMDAwCkBAIC0wLDAgKzEsODkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUg
T2xpdmVyIEh1bnQgPG9qaDE2QHN0dWRlbnQuY2FudGVyYnVyeS5hYy5uej4uICBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1Ig
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2ltcG9ydCAiV0tBcml0aG1ldGljRmlsdGVyLmgiCisKK3N0YXRpYyBDSUtlcm5lbCAqYXJpdGht
ZXRpY0ZpbHRlciA9IG5pbDsKKworQGltcGxlbWVudGF0aW9uIFdLQXJpdGhtZXRpY0ZpbHRlcgor
KyAodm9pZClpbml0aWFsaXplCit7CisgICAgW0NJRmlsdGVyIHJlZ2lzdGVyRmlsdGVyTmFtZTpA
IldLQXJpdGhtZXRpY0ZpbHRlciIgIAorICAgICAgICAgICAgICAgICAgICAgY29uc3RydWN0b3I6
c2VsZgorICAgICAgICAgICAgICAgICBjbGFzc0F0dHJpYnV0ZXM6W05TRGljdGlvbmFyeSBkaWN0
aW9uYXJ5V2l0aE9iamVjdHNBbmRLZXlzOgorICAgICAgICAgICAgICAgICAgICAgQCJXZWJLaXQg
QXJpdGhtZXRpYyBGaWx0ZXIiLCBrQ0lBdHRyaWJ1dGVGaWx0ZXJEaXNwbGF5TmFtZSwKKyAgICAg
ICAgICAgICAgICAgICAgIFtOU0FycmF5IGFycmF5V2l0aE9iamVjdHM6a0NJQ2F0ZWdvcnlTdHls
aXplLCBrQ0lDYXRlZ29yeVZpZGVvLAorICAgICAgICAgICAgICAgICAgICAgICAgIGtDSUNhdGVn
b3J5U3RpbGxJbWFnZSwga0NJQ2F0ZWdvcnlOb25TcXVhcmVQaXhlbHMsbmlsXSwga0NJQXR0cmli
dXRlRmlsdGVyQ2F0ZWdvcmllcywKKyAgICAgICAgICAgICAgICAgICAgIFtOU0RpY3Rpb25hcnkg
ZGljdGlvbmFyeVdpdGhPYmplY3RzQW5kS2V5czoKKyAgICAgICAgICAgICAgICAgICAgICAgICBb
TlNOdW1iZXIgbnVtYmVyV2l0aERvdWJsZTowLjBdLCBrQ0lBdHRyaWJ1dGVNaW4sCisgICAgICAg
ICAgICAgICAgICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhEb3VibGU6MC4wXSwga0NJQXR0
cmlidXRlRGVmYXVsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbTlNOdW1iZXIgbnVtYmVy
V2l0aERvdWJsZToxLjBdLCBrQ0lBdHRyaWJ1dGVJZGVudGl0eSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICBrQ0lBdHRyaWJ1dGVUeXBlU2NhbGFyLCBrQ0lBdHRyaWJ1dGVUeXBlLAorICAgICAg
ICAgICAgICAgICAgICAgICAgIG5pbF0sIEAiaW5wdXRLMSIsICAgICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgICAgICAgW05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVjdHNB
bmRLZXlzOgorICAgICAgICAgICAgICAgICAgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoRG91
YmxlOjAuMF0sIGtDSUF0dHJpYnV0ZU1pbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbTlNO
dW1iZXIgbnVtYmVyV2l0aERvdWJsZTowLjBdLCBrQ0lBdHRyaWJ1dGVEZWZhdWx0LAorICAgICAg
ICAgICAgICAgICAgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoRG91YmxlOjEuMF0sIGtDSUF0
dHJpYnV0ZUlkZW50aXR5LAorICAgICAgICAgICAgICAgICAgICAgICAgIGtDSUF0dHJpYnV0ZVR5
cGVTY2FsYXIsIGtDSUF0dHJpYnV0ZVR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgbmls
XSwgQCJpbnB1dEsyIiwgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgW05TRGlj
dGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVjdHNBbmRLZXlzOgorICAgICAgICAgICAgICAgICAg
ICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoRG91YmxlOjAuMF0sIGtDSUF0dHJpYnV0ZU1pbiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aERvdWJsZTowLjBd
LCBrQ0lBdHRyaWJ1dGVEZWZhdWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgIFtOU051bWJl
ciBudW1iZXJXaXRoRG91YmxlOjEuMF0sIGtDSUF0dHJpYnV0ZUlkZW50aXR5LAorICAgICAgICAg
ICAgICAgICAgICAgICAgIGtDSUF0dHJpYnV0ZVR5cGVTY2FsYXIsIGtDSUF0dHJpYnV0ZVR5cGUs
CisgICAgICAgICAgICAgICAgICAgICAgICAgbmlsXSwgQCJpbnB1dEszIiwgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgICAgICAgW05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVj
dHNBbmRLZXlzOgorICAgICAgICAgICAgICAgICAgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRo
RG91YmxlOjAuMF0sIGtDSUF0dHJpYnV0ZU1pbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBb
TlNOdW1iZXIgbnVtYmVyV2l0aERvdWJsZTowLjBdLCBrQ0lBdHRyaWJ1dGVEZWZhdWx0LAorICAg
ICAgICAgICAgICAgICAgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoRG91YmxlOjEuMF0sIGtD
SUF0dHJpYnV0ZUlkZW50aXR5LAorICAgICAgICAgICAgICAgICAgICAgICAgIGtDSUF0dHJpYnV0
ZVR5cGVTY2FsYXIsIGtDSUF0dHJpYnV0ZVR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAg
bmlsXSwgQCJpbnB1dEs0IiwKKyAgICAgICAgICAgICAgICAgICAgIG5pbF1dOworfQorCisrIChD
SUZpbHRlciAqKWZpbHRlcldpdGhOYW1lOihOU1N0cmluZyAqKW5hbWUKK3sKKyAgICByZXR1cm4g
W1tbc2VsZiBhbGxvY10gaW5pdF0gYXV0b3JlbGVhc2VdOworfQorCistIChpZClpbml0Cit7Cisg
ICAgaWYgKCFhcml0aG1ldGljRmlsdGVyKSB7CisgICAgICAgIE5TQnVuZGxlICpidW5kbGUgPSBb
TlNCdW5kbGUgYnVuZGxlRm9yQ2xhc3M6W3NlbGYgY2xhc3NdXTsKKyAgICAgICAgTlNTdHJpbmcg
Kmtlcm5lbEZpbGUgPSBbYnVuZGxlIHBhdGhGb3JSZXNvdXJjZTpAIldLQXJpdGhtZXRpY0ZpbHRl
ciIgb2ZUeXBlOkAiY2lrZXJuZWwiXTsKKyAgICAgICAgTlNTdHJpbmcgKmNvZGUgPSBbTlNTdHJp
bmcgc3RyaW5nV2l0aENvbnRlbnRzT2ZGaWxlOmtlcm5lbEZpbGVdOworICAgICAgICBOU0FycmF5
ICprZXJuZWxzID0gW0NJS2VybmVsIGtlcm5lbHNXaXRoU3RyaW5nOmNvZGVdOworICAgICAgICBh
cml0aG1ldGljRmlsdGVyID0gW1trZXJuZWxzIG9iamVjdEF0SW5kZXg6MF0gcmV0YWluXTsKKyAg
ICB9CisgICAgcmV0dXJuIFtzdXBlciBpbml0XTsKK30KKworLSAoQ0lJbWFnZSAqKW91dHB1dElt
YWdlCit7CisgICAgcmV0dXJuIFtzZWxmIGFwcGx5OmFyaXRobWV0aWNGaWx0ZXIsIGlucHV0SW1h
Z2UsIGlucHV0QmFja2dyb3VuZEltYWdlLCBpbnB1dEsxLCBpbnB1dEsyLCBpbnB1dEszLAorICAg
ICAgICBpbnB1dEs0LCBuaWxdOworfQorCitAZW5kCkluZGV4OiBrY2FudmFzL2RldmljZS9xdWFy
dHovZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL1dLRGlmZnVzZUxpZ2h0aW5nRmlsdGVyLmNpa2VybmVs
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KZGlmZiAtTnB1IGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9kZXZpY2UvcXVhcnR6
L2ZpbHRlcnMvV0tEaWZmdXNlTGlnaHRpbmdGaWx0ZXIuY2lrZXJuZWwKLS0tIGtjYW52YXMvZGV2
aWNlL3F1YXJ0ei9kZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tEaWZmdXNlTGlnaHRpbmdGaWx0ZXIu
Y2lrZXJuZWwJMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMAorKysga2NhbnZhcy9kZXZpY2UvcXVh
cnR6L2RldmljZS9xdWFydHovZmlsdGVycy9XS0RpZmZ1c2VMaWdodGluZ0ZpbHRlci5jaWtlcm5l
bAkyOCBOb3YgMjAwNSAxMTo0ODozMCAtMDAwMApAQCAtMCwwICsxLDQwIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA1IE9saXZlciBIdW50IDxvamgxNkBzdHVkZW50LmNhbnRlcmJ1cnkuYWMu
bno+LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQVVUSE9SIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKK2tlcm5lbCB2ZWM0IGRpZmZ1c2VMaWdodGluZyhzYW1wbGVyIG5vcm1h
bFZlY3RvcnMsIHNhbXBsZXIgbGlnaHRWZWN0b3JzLCBfX2NvbG9yIGxpZ2h0aW5nQ29sb3IsIAor
ICAgIGZsb2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQgZGlmZnVzZUNvbnN0YW50LCBmbG9hdCBrZXJu
ZWxMZW5ndGhYLAorICAgIGZsb2F0IGtlcm5lbExlbmd0aFkpCit7CisgICAgdmVjMiBwb3MgPSBz
YW1wbGVyQ29vcmQobGlnaHRWZWN0b3JzKTsKKyAgICB2ZWMyIHBvc24gPSBzYW1wbGVyQ29vcmQo
bm9ybWFsVmVjdG9ycyk7CisgICAgdmVjNCBsNCA9IHNhbXBsZShsaWdodFZlY3RvcnMsIHBvcyk7
CisgICAgdmVjMyBsID0gbDQueHl6OworICAgIGwgPSBub3JtYWxpemUobCk7CisgICAgdmVjMyBu
ID0gc2FtcGxlKG5vcm1hbFZlY3RvcnMsIHBvc24pLnh5ejsKKyAgICBmbG9hdCBubCA9IGRvdChs
LCBuKTsKKyAgICB2ZWM0IHJlcyA9IHZlYzQobGlnaHRpbmdDb2xvci5yICogbmwsIGxpZ2h0aW5n
Q29sb3IuZyAqIG5sLCBsaWdodGluZ0NvbG9yLmIgKiBubCwgMS4wKTsKKyAgICByZXMueHl6ICo9
IGw0Lnc7CisgICAgcmV0dXJuIHJlczsKK30KSW5kZXg6IGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9k
ZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tEaWZmdXNlTGlnaHRpbmdGaWx0ZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
CmRpZmYgLU5wdSBrY2FudmFzL2RldmljZS9xdWFydHovZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL1dL
RGlmZnVzZUxpZ2h0aW5nRmlsdGVyLmgKLS0tIGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9kZXZpY2Uv
cXVhcnR6L2ZpbHRlcnMvV0tEaWZmdXNlTGlnaHRpbmdGaWx0ZXIuaAkxIEphbiAxOTcwIDAwOjAw
OjAwIC0wMDAwCisrKyBrY2FudmFzL2RldmljZS9xdWFydHovZGV2aWNlL3F1YXJ0ei9maWx0ZXJz
L1dLRGlmZnVzZUxpZ2h0aW5nRmlsdGVyLmgJMjggTm92IDIwMDUgMTE6MDI6MDAgLTAwMDAKQEAg
LTAsMCArMSwzNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBBcHBsZSBDb21wdXRlciwg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2ltcG9ydCA8UXVhcnR6Q29yZS9D
b3JlSW1hZ2UuaD4KKworQGludGVyZmFjZSBXS0RpZmZ1c2VMaWdodGluZ0ZpbHRlciA6IENJRmls
dGVyIHsKKyAgICBDSVNhbXBsZXIgKmlucHV0Tm9ybWFsTWFwOworICAgIENJU2FtcGxlciAqaW5w
dXRMaWdodFZlY3RvcnM7CisgICAgQ0lDb2xvciAgICppbnB1dExpZ2h0aW5nQ29sb3I7CisgICAg
TlNOdW1iZXIgICppbnB1dFN1cmZhY2VTY2FsZTsKKyAgICBOU051bWJlciAgKmlucHV0RGlmZnVz
ZUNvbnN0YW50OworICAgIE5TTnVtYmVyICAqaW5wdXRLZXJuZWxVbml0TGVuZ3RoWDsKKyAgICBO
U051bWJlciAgKmlucHV0S2VybmVsVW5pdExlbmd0aFk7Cit9CitAZW5kCkluZGV4OiBrY2FudmFz
L2RldmljZS9xdWFydHovZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL1dLRGlmZnVzZUxpZ2h0aW5nRmls
dGVyLm0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQpkaWZmIC1OcHUga2NhbnZhcy9kZXZpY2UvcXVhcnR6L2RldmljZS9x
dWFydHovZmlsdGVycy9XS0RpZmZ1c2VMaWdodGluZ0ZpbHRlci5tCi0tLSBrY2FudmFzL2Rldmlj
ZS9xdWFydHovZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL1dLRGlmZnVzZUxpZ2h0aW5nRmlsdGVyLm0J
MSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMAorKysga2NhbnZhcy9kZXZpY2UvcXVhcnR6L2Rldmlj
ZS9xdWFydHovZmlsdGVycy9XS0RpZmZ1c2VMaWdodGluZ0ZpbHRlci5tCTI4IE5vdiAyMDA1IDEx
OjAyOjAwIC0wMDAwCkBAIC0wLDAgKzEsOTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUg
QXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbXBv
cnQgIldLRGlmZnVzZUxpZ2h0aW5nRmlsdGVyLmgiCisjaW1wb3J0IDxzdGRpby5oPgorCitzdGF0
aWMgQ0lLZXJuZWwgKmRpZmZ1c2VMaWdodGluZ0ZpbHRlciA9IG5pbDsKK0BpbXBsZW1lbnRhdGlv
biBXS0RpZmZ1c2VMaWdodGluZ0ZpbHRlcgorCisrICh2b2lkKWluaXRpYWxpemUKK3sKKyAgICBb
Q0lGaWx0ZXIgcmVnaXN0ZXJGaWx0ZXJOYW1lOkAiV0tEaWZmdXNlTGlnaHRpbmciICAKKyAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0cnVjdG9yOnNlbGYKKyAgICAgICAgICAgICAgICAgY2xhc3NB
dHRyaWJ1dGVzOltOU0RpY3Rpb25hcnkgZGljdGlvbmFyeVdpdGhPYmplY3RzQW5kS2V5czoKKyAg
ICAgICAgICAgICAgICAgICAgIEAiV2ViS2l0IERpZmZ1c2UgTGlnaHRpbmciLCBrQ0lBdHRyaWJ1
dGVGaWx0ZXJEaXNwbGF5TmFtZSwKKyAgICAgICAgICAgICAgICAgICAgIFtOU0FycmF5IGFycmF5
V2l0aE9iamVjdHM6a0NJQ2F0ZWdvcnlTdHlsaXplLCBrQ0lDYXRlZ29yeVZpZGVvLAorICAgICAg
ICAgICAgICAgICAgICAgICAgIGtDSUNhdGVnb3J5U3RpbGxJbWFnZSwga0NJQ2F0ZWdvcnlOb25T
cXVhcmVQaXhlbHMsbmlsXSwga0NJQXR0cmlidXRlRmlsdGVyQ2F0ZWdvcmllcywKKyAgICAgICAg
ICAgICAgICAgICAgIFtOU0RpY3Rpb25hcnkgZGljdGlvbmFyeVdpdGhPYmplY3RzQW5kS2V5czoK
KyAgICAgICAgICAgICAgICAgICAgICAgICBbQ0lDb2xvciBjb2xvcldpdGhSZWQ6MS4wIGdyZWVu
OjEuMCBibHVlOjEuMCBhbHBoYToxLjBdLAorICAgICAgICAgICAgICAgICAgICAgICAgIGtDSUF0
dHJpYnV0ZURlZmF1bHQsIG5pbF0sIEAiaW5wdXRMaWdodGluZ0NvbG9yIiwKKyAgICAgICAgICAg
ICAgICAgICAgIFtOU0RpY3Rpb25hcnkgZGljdGlvbmFyeVdpdGhPYmplY3RzQW5kS2V5czoKKyAg
ICAgICAgICAgICAgICAgICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aERvdWJsZTowLjBdLCBr
Q0lBdHRyaWJ1dGVNaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgW05TTnVtYmVyIG51bWJl
cldpdGhEb3VibGU6MS4wXSwga0NJQXR0cmlidXRlRGVmYXVsdCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aERvdWJsZToxLjBdLCBrQ0lBdHRyaWJ1dGVJZGVu
dGl0eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBrQ0lBdHRyaWJ1dGVUeXBlU2NhbGFyLCBr
Q0lBdHRyaWJ1dGVUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgIG5pbF0sIEAiaW5wdXRT
dXJmYWNlU2NhbGUiLAorICAgICAgICAgICAgICAgICAgICAgW05TRGljdGlvbmFyeSBkaWN0aW9u
YXJ5V2l0aE9iamVjdHNBbmRLZXlzOgorICAgICAgICAgICAgICAgICAgICAgICAgIFtOU051bWJl
ciBudW1iZXJXaXRoRG91YmxlOjAuMF0sIGtDSUF0dHJpYnV0ZU1pbiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aERvdWJsZToxLjBdLCBrQ0lBdHRyaWJ1dGVE
ZWZhdWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoRG91
YmxlOjEuMF0sIGtDSUF0dHJpYnV0ZUlkZW50aXR5LAorICAgICAgICAgICAgICAgICAgICAgICAg
IGtDSUF0dHJpYnV0ZVR5cGVTY2FsYXIsIGtDSUF0dHJpYnV0ZVR5cGUsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgbmlsXSwgQCJpbnB1dERpZmZ1c2VDb25zdGFudCIsCisgICAgICAgICAgICAg
ICAgICAgICBbTlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnlXaXRoT2JqZWN0c0FuZEtleXM6CisgICAg
ICAgICAgICAgICAgICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhEb3VibGU6MC4wXSwga0NJ
QXR0cmlidXRlTWluLAorICAgICAgICAgICAgICAgICAgICAgICAgIFtOU051bWJlciBudW1iZXJX
aXRoRG91YmxlOjEuMF0sIGtDSUF0dHJpYnV0ZURlZmF1bHQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhEb3VibGU6MS4wXSwga0NJQXR0cmlidXRlSWRlbnRp
dHksCisgICAgICAgICAgICAgICAgICAgICAgICAga0NJQXR0cmlidXRlVHlwZVNjYWxhciwga0NJ
QXR0cmlidXRlVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBuaWxdLCBAImlucHV0S2Vy
bmVsVW5pdExlbmd0aFgiLAorICAgICAgICAgICAgICAgICAgICAgW05TRGljdGlvbmFyeSBkaWN0
aW9uYXJ5V2l0aE9iamVjdHNBbmRLZXlzOgorICAgICAgICAgICAgICAgICAgICAgICAgIFtOU051
bWJlciBudW1iZXJXaXRoRG91YmxlOjAuMF0sIGtDSUF0dHJpYnV0ZU1pbiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aERvdWJsZToxLjBdLCBrQ0lBdHRyaWJ1
dGVEZWZhdWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRo
RG91YmxlOjEuMF0sIGtDSUF0dHJpYnV0ZUlkZW50aXR5LAorICAgICAgICAgICAgICAgICAgICAg
ICAgIGtDSUF0dHJpYnV0ZVR5cGVTY2FsYXIsIGtDSUF0dHJpYnV0ZVR5cGUsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgbmlsXSwgQCJpbnB1dEtlcm5lbFVuaXRMZW5ndGhZIiwKKyAgICAgICAg
ICAgICAgICAgICAgIG5pbF1dOworfQorCisrIChDSUZpbHRlciAqKWZpbHRlcldpdGhOYW1lOihO
U1N0cmluZyAqKW5hbWUKK3sKKyAgICByZXR1cm4gW1tbc2VsZiBhbGxvY10gaW5pdF0gYXV0b3Jl
bGVhc2VdOworfQorCistIChpZClpbml0Cit7CisgICAgaWYgKCFkaWZmdXNlTGlnaHRpbmdGaWx0
ZXIpIHsKKyAgICAgICAgTlNCdW5kbGUgKmJ1bmRsZSA9IFtOU0J1bmRsZSBidW5kbGVGb3JDbGFz
czpbc2VsZiBjbGFzc11dOworICAgICAgICBOU1N0cmluZyAqa2VybmVsRmlsZSA9IFtidW5kbGUg
cGF0aEZvclJlc291cmNlOkAiV0tEaWZmdXNlTGlnaHRpbmdGaWx0ZXIiIG9mVHlwZTpAImNpa2Vy
bmVsIl07CisgICAgICAgIE5TU3RyaW5nICpjb2RlID0gW05TU3RyaW5nIHN0cmluZ1dpdGhDb250
ZW50c09mRmlsZTprZXJuZWxGaWxlXTsKKyAgICAgICAgTlNBcnJheSAqa2VybmVscyA9IFtDSUtl
cm5lbCBrZXJuZWxzV2l0aFN0cmluZzpjb2RlXTsKKyAgICAgICAgZGlmZnVzZUxpZ2h0aW5nRmls
dGVyID0gW1trZXJuZWxzIG9iamVjdEF0SW5kZXg6MF0gcmV0YWluXTsKKyAgICB9CisgICAgcmV0
dXJuIFtzdXBlciBpbml0XTsKK30KKworLSAoQ0lJbWFnZSAqKW91dHB1dEltYWdlCit7CisgICAg
cmV0dXJuIFtzZWxmIGFwcGx5OmRpZmZ1c2VMaWdodGluZ0ZpbHRlciwgaW5wdXROb3JtYWxNYXAs
IGlucHV0TGlnaHRWZWN0b3JzLCBpbnB1dExpZ2h0aW5nQ29sb3IsIGlucHV0U3VyZmFjZVNjYWxl
LCBpbnB1dERpZmZ1c2VDb25zdGFudCwKKyAgICAgICAgaW5wdXRLZXJuZWxVbml0TGVuZ3RoWCwg
aW5wdXRLZXJuZWxVbml0TGVuZ3RoWSwgbmlsXTsKK30KKworQGVuZApJbmRleDoga2NhbnZhcy9k
ZXZpY2UvcXVhcnR6L2RldmljZS9xdWFydHovZmlsdGVycy9XS0Rpc3RhbnRMaWdodEZpbHRlci5j
aWtlcm5lbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09CmRpZmYgLU5wdSBrY2FudmFzL2RldmljZS9xdWFydHovZGV2aWNl
L3F1YXJ0ei9maWx0ZXJzL1dLRGlzdGFudExpZ2h0RmlsdGVyLmNpa2VybmVsCi0tLSBrY2FudmFz
L2RldmljZS9xdWFydHovZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL1dLRGlzdGFudExpZ2h0RmlsdGVy
LmNpa2VybmVsCTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAKKysrIGtjYW52YXMvZGV2aWNlL3F1
YXJ0ei9kZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tEaXN0YW50TGlnaHRGaWx0ZXIuY2lrZXJuZWwJ
MjggTm92IDIwMDUgMDM6Mzc6MDYgLTAwMDAKQEAgLTAsMCArMSw0IEBACitrZXJuZWwgdmVjNCBk
aXN0YW50TGlnaHRHZW5lcmF0b3Ioc2FtcGxlciBpbWFnZSwgdmVjMyBkaXJlY3Rpb24pCit7Cisg
ICAgcmV0dXJuIHZlYzQoZGlyZWN0aW9uLngsIGRpcmVjdGlvbi55LCBkaXJlY3Rpb24ueiwgMS4w
KTsKK30KSW5kZXg6IGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9kZXZpY2UvcXVhcnR6L2ZpbHRlcnMv
V0tEaXN0YW50TGlnaHRGaWx0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CmRpZmYgLU5wdSBrY2FudmFzL2Rldmlj
ZS9xdWFydHovZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL1dLRGlzdGFudExpZ2h0RmlsdGVyLmgKLS0t
IGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9kZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tEaXN0YW50TGln
aHRGaWx0ZXIuaAkxIEphbiAxOTcwIDAwOjAwOjAwIC0wMDAwCisrKyBrY2FudmFzL2RldmljZS9x
dWFydHovZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL1dLRGlzdGFudExpZ2h0RmlsdGVyLmgJMTMgTm92
IDIwMDUgMTA6NTc6MTggLTAwMDAKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwNSBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2ltcG9ydCA8UXVhcnR6Q29yZS9Db3JlSW1hZ2UuaD4KKworQGludGVyZmFjZSBXS0Rpc3Rh
bnRMaWdodEZpbHRlciA6IENJRmlsdGVyIHsKKyAgICBDSUltYWdlICAqIGlucHV0Tm9ybWFsTWFw
OworICAgIENJVmVjdG9yICogaW5wdXRMaWdodERpcmVjdGlvbjsKK30KK0BlbmQKSW5kZXg6IGtj
YW52YXMvZGV2aWNlL3F1YXJ0ei9kZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tEaXN0YW50TGlnaHRG
aWx0ZXIubQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09CmRpZmYgLU5wdSBrY2FudmFzL2RldmljZS9xdWFydHovZGV2aWNl
L3F1YXJ0ei9maWx0ZXJzL1dLRGlzdGFudExpZ2h0RmlsdGVyLm0KLS0tIGtjYW52YXMvZGV2aWNl
L3F1YXJ0ei9kZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tEaXN0YW50TGlnaHRGaWx0ZXIubQkxIEph
biAxOTcwIDAwOjAwOjAwIC0wMDAwCisrKyBrY2FudmFzL2RldmljZS9xdWFydHovZGV2aWNlL3F1
YXJ0ei9maWx0ZXJzL1dLRGlzdGFudExpZ2h0RmlsdGVyLm0JMjggTm92IDIwMDUgMTA6NDQ6MTAg
LTAwMDAKQEAgLTAsMCArMSw2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBBcHBsZSBD
b21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKyAKKyNpbXBvcnQgIldL
RGlzdGFudExpZ2h0RmlsdGVyLmgiCisKK3N0YXRpYyBDSUtlcm5lbCAqZGlzdGFudExpZ2h0Rmls
dGVyID0gbmlsOworCitAaW1wbGVtZW50YXRpb24gV0tEaXN0YW50TGlnaHRGaWx0ZXIKKworKyAo
dm9pZClpbml0aWFsaXplCit7CisgICAgW0NJRmlsdGVyIHJlZ2lzdGVyRmlsdGVyTmFtZTpAIldL
RGlzdGFudExpZ2h0IgorICAgICAgICAgICAgICAgICAgICAgY29uc3RydWN0b3I6c2VsZgorICAg
ICAgICAgICAgICAgICBjbGFzc0F0dHJpYnV0ZXM6W05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0
aE9iamVjdHNBbmRLZXlzOgorICAgICAgICAgICAgICAgICAgICAgQCJXZWJLaXQgRGlzdGFudCBM
aWdodCIsIGtDSUF0dHJpYnV0ZUZpbHRlckRpc3BsYXlOYW1lLAorICAgICAgICAgICAgICAgICAg
ICAgW05TQXJyYXkgYXJyYXlXaXRoT2JqZWN0czprQ0lDYXRlZ29yeVN0eWxpemUsIGtDSUNhdGVn
b3J5VmlkZW8sCisgICAgICAgICAgICAgICAgICAgICAgICAga0NJQ2F0ZWdvcnlTdGlsbEltYWdl
LCBrQ0lDYXRlZ29yeU5vblNxdWFyZVBpeGVscyxuaWxdLCBrQ0lBdHRyaWJ1dGVGaWx0ZXJDYXRl
Z29yaWVzLAorICAgICAgICAgICAgICAgICAgICAgW05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0
aE9iamVjdHNBbmRLZXlzOgorICAgICAgICAgICAgICAgICAgICAgICAgIGtDSUF0dHJpYnV0ZVR5
cGVQb3NpdGlvbjMsIGtDSUF0dHJpYnV0ZVR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAg
bmlsXSwgQCJpbnB1dExpZ2h0RGlyZWN0aW9uIiwKKyAgICAgICAgICAgICAgICAgICAgIG5pbF1d
OworfQorCisrIChDSUZpbHRlciAqKWZpbHRlcldpdGhOYW1lOihOU1N0cmluZyAqKW5hbWUKK3sK
KyAgICByZXR1cm4gW1tbc2VsZiBhbGxvY10gaW5pdF0gYXV0b3JlbGVhc2VdOworfQorCistIChp
ZClpbml0Cit7CisgICAgaWYgKCFkaXN0YW50TGlnaHRGaWx0ZXIpIHsKKyAgICAgICAgTlNCdW5k
bGUgKmJ1bmRsZSA9IFtOU0J1bmRsZSBidW5kbGVGb3JDbGFzczpbc2VsZiBjbGFzc11dOworICAg
ICAgICBOU1N0cmluZyAqa2VybmVsRmlsZSA9IFtidW5kbGUgcGF0aEZvclJlc291cmNlOkAiV0tE
aXN0YW50TGlnaHRGaWx0ZXIiIG9mVHlwZTpAImNpa2VybmVsIl07CisgICAgICAgIE5TU3RyaW5n
ICpjb2RlID0gW05TU3RyaW5nIHN0cmluZ1dpdGhDb250ZW50c09mRmlsZTprZXJuZWxGaWxlXTsK
KyAgICAgICAgTlNBcnJheSAqa2VybmVscyA9IFtDSUtlcm5lbCBrZXJuZWxzV2l0aFN0cmluZzpj
b2RlXTsKKyAgICAgICAgZGlzdGFudExpZ2h0RmlsdGVyID0gW1trZXJuZWxzIG9iamVjdEF0SW5k
ZXg6MF0gcmV0YWluXTsKKyAgICB9CisgICAgcmV0dXJuIFtzdXBlciBpbml0XTsKK30KKworLSAo
Q0lJbWFnZSAqKW91dHB1dEltYWdlCit7CisgICAgcmV0dXJuIFtzZWxmIGFwcGx5OmRpc3RhbnRM
aWdodEZpbHRlciwgW0NJU2FtcGxlciBzYW1wbGVyV2l0aEltYWdlOmlucHV0Tm9ybWFsTWFwXSwg
aW5wdXRMaWdodERpcmVjdGlvbiwgbmlsXTsKK30KKworQGVuZApJbmRleDoga2NhbnZhcy9kZXZp
Y2UvcXVhcnR6L2RldmljZS9xdWFydHovZmlsdGVycy9XS05vcm1hbE1hcEZpbHRlci5jaWtlcm5l
bAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09CmRpZmYgLU5wdSBrY2FudmFzL2RldmljZS9xdWFydHovZGV2aWNlL3F1YXJ0
ei9maWx0ZXJzL1dLTm9ybWFsTWFwRmlsdGVyLmNpa2VybmVsCi0tLSBrY2FudmFzL2RldmljZS9x
dWFydHovZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL1dLTm9ybWFsTWFwRmlsdGVyLmNpa2VybmVsCTEg
SmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAKKysrIGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9kZXZpY2Uv
cXVhcnR6L2ZpbHRlcnMvV0tOb3JtYWxNYXBGaWx0ZXIuY2lrZXJuZWwJMjggTm92IDIwMDUgMTE6
MTQ6MDggLTAwMDAKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBP
bGl2ZXIgSHVudCA8b2poMTZAc3R1ZGVudC5jYW50ZXJidXJ5LmFjLm56Pi4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisv
L1RPRE86IFdlIGN1cnJlbnRseSBpZ25vcmUgdGhlIGlucHV0IGtlcm5lbCBsZW5ndGhzCitrZXJu
ZWwgdmVjNCBjb252b2x2ZTN4MyhzYW1wbGVyIGltYWdlLCAgZmxvYXQgZGl2aXNvciwgZmxvYXQg
YmlhcywKKwkJCXZlYzMgbTAsIHZlYzMgbTEsIHZlYzMgbTIpCit7CisgICAgdmVjNCBjb2xvdXIg
PSB2ZWM0KDAuMCwgMC4wLCAwLjAsIDAuMCk7CisgICAgdmVjMiBwb3M9IHNhbXBsZXJDb29yZChp
bWFnZSk7CisgICAgY29sb3VyID0gIHNhbXBsZShpbWFnZSwgcG9zICsgdmVjMigtMS4wLCAtMS4w
KSkgKm0wLng7CisgICAgY29sb3VyICs9IHNhbXBsZShpbWFnZSwgcG9zICsgdmVjMigtMS4wLCAg
MC4wKSkgKm0wLnk7CisgICAgY29sb3VyICs9IHNhbXBsZShpbWFnZSwgcG9zICsgdmVjMigtMS4w
LCAgMS4wKSkgKm0wLno7CisgICAgY29sb3VyICs9IHNhbXBsZShpbWFnZSwgcG9zICsgdmVjMigg
MC4wLCAtMS4wKSkgKm0xLng7CisgICAgY29sb3VyICs9IHNhbXBsZShpbWFnZSwgcG9zKSAqIG0x
Lnk7CisgICAgY29sb3VyICs9IHNhbXBsZShpbWFnZSwgcG9zICsgdmVjMiggMC4wLCAgMS4wKSkq
bTEuejsKKyAgICBjb2xvdXIgKz0gc2FtcGxlKGltYWdlLCBwb3MgKyB2ZWMyKCAxLjAsIC0xLjAp
KSptMi54OworICAgIGNvbG91ciArPSBzYW1wbGUoaW1hZ2UsIHBvcyArIHZlYzIoIDEuMCwgIDAu
MCkpKm0yLnk7CisgICAgY29sb3VyICs9IHNhbXBsZShpbWFnZSwgcG9zICsgdmVjMiggMS4wLCAg
MS4wKSkqbTIuejsKKyAgICByZXR1cm4gY29sb3VyIC8gZGl2aXNvciArIGJpYXM7Cit9CisKK2tl
cm5lbCB2ZWM0IG1lcmdlTm9ybWFscyhzYW1wbGVyIE54LCBzYW1wbGVyIE55LCBzYW1wbGVyIHNy
YywgZmxvYXQgc3VyZmFjZVNjYWxlKQoreworICAgIHZlYzMgTiA9IHZlYzMoc3VyZmFjZVNjYWxl
ICogc2FtcGxlKE54LCBzYW1wbGVyQ29vcmQoTngpKS5hLCAtc3VyZmFjZVNjYWxlICogc2FtcGxl
KE55LCBzYW1wbGVyQ29vcmQoTnkpKS5hLCAxLjAsIDAuMCk7CisgICAgTiA9IG5vcm1hbGl6ZShO
KTsKKyAgICByZXR1cm4gdmVjNChOLngsIE4ueSwgTi56LCBzYW1wbGUoc3JjLCBzYW1wbGVyQ29v
cmQoc3JjKSkuYSk7Cit9CkluZGV4OiBrY2FudmFzL2RldmljZS9xdWFydHovZGV2aWNlL3F1YXJ0
ei9maWx0ZXJzL1dLTm9ybWFsTWFwRmlsdGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpkaWZmIC1OcHUga2NhbnZh
cy9kZXZpY2UvcXVhcnR6L2RldmljZS9xdWFydHovZmlsdGVycy9XS05vcm1hbE1hcEZpbHRlci5o
Ci0tLSBrY2FudmFzL2RldmljZS9xdWFydHovZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL1dLTm9ybWFs
TWFwRmlsdGVyLmgJMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMAorKysga2NhbnZhcy9kZXZpY2Uv
cXVhcnR6L2RldmljZS9xdWFydHovZmlsdGVycy9XS05vcm1hbE1hcEZpbHRlci5oCTI4IE5vdiAy
MDA1IDA1OjM3OjA3IC0wMDAwCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDUgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbXBvcnQgPFF1YXJ0ekNvcmUvQ29yZUltYWdlLmg+CisKK0BpbnRlcmZhY2UgV0tOb3JtYWxN
YXBGaWx0ZXIgOiBDSUZpbHRlciB7CisgICAgQ0lJbWFnZSAqaW5wdXRJbWFnZTsKKyAgICBOU051
bWJlciAqaW5wdXRTdXJmYWNlU2NhbGU7Cit9CitAZW5kCkluZGV4OiBrY2FudmFzL2RldmljZS9x
dWFydHovZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL1dLTm9ybWFsTWFwRmlsdGVyLm0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQpkaWZmIC1OcHUga2NhbnZhcy9kZXZpY2UvcXVhcnR6L2RldmljZS9xdWFydHovZmlsdGVycy9X
S05vcm1hbE1hcEZpbHRlci5tCi0tLSBrY2FudmFzL2RldmljZS9xdWFydHovZGV2aWNlL3F1YXJ0
ei9maWx0ZXJzL1dLTm9ybWFsTWFwRmlsdGVyLm0JMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMAor
Kysga2NhbnZhcy9kZXZpY2UvcXVhcnR6L2RldmljZS9xdWFydHovZmlsdGVycy9XS05vcm1hbE1h
cEZpbHRlci5tCTI4IE5vdiAyMDA1IDEyOjQwOjUxIC0wMDAwCkBAIC0wLDAgKzEsMTA0IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA1IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaW1wb3J0ICJXS05vcm1hbE1hcEZpbHRlci5oIgorCitzdGF0
aWMgQ0lLZXJuZWwgKmNvbnZvbHZlS2VybmVsID0gbmlsOworc3RhdGljIENJS2VybmVsICpub3Jt
YWxNYXBLZXJuZWwgPSBuaWw7CisKK0BpbXBsZW1lbnRhdGlvbiBXS05vcm1hbE1hcEZpbHRlcgor
CisrICh2b2lkKWluaXRpYWxpemUKK3sKKyAgICBbQ0lGaWx0ZXIgcmVnaXN0ZXJGaWx0ZXJOYW1l
OkAiV0tOb3JtYWxNYXAiCisgICAgICAgICAgICAgICAgICAgICBjb25zdHJ1Y3RvcjpzZWxmCisg
ICAgICAgICAgICAgICAgIGNsYXNzQXR0cmlidXRlczpbTlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnlX
aXRoT2JqZWN0c0FuZEtleXM6CisgICAgICAgICAgICAgICAgICAgICBAIldlYktpdCBOb3JtYWwg
TWFwIiwga0NJQXR0cmlidXRlRmlsdGVyRGlzcGxheU5hbWUsCisgICAgICAgICAgICAgICAgICAg
ICBbTlNBcnJheSBhcnJheVdpdGhPYmplY3RzOiBrQ0lDYXRlZ29yeUJsdXIsIGtDSUNhdGVnb3J5
VmlkZW8sCisgICAgICAgICAgICAgICAgICAgICAgICAga0NJQ2F0ZWdvcnlTdGlsbEltYWdlLCBr
Q0lDYXRlZ29yeU5vblNxdWFyZVBpeGVscywgbmlsXSwga0NJQXR0cmlidXRlRmlsdGVyQ2F0ZWdv
cmllcywgICAgICAgCisgICAgICAgICAgICAgICAgICAgICBbTlNEaWN0aW9uYXJ5IGRpY3Rpb25h
cnlXaXRoT2JqZWN0c0FuZEtleXM6CisgICAgICAgICAgICAgICAgICAgICAgICAgW05TTnVtYmVy
IG51bWJlcldpdGhEb3VibGU6MC4wXSwga0NJQXR0cmlidXRlTWluLAorICAgICAgICAgICAgICAg
ICAgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoRG91YmxlOjEuMF0sIGtDSUF0dHJpYnV0ZURl
ZmF1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhEb3Vi
bGU6MS4wXSwga0NJQXR0cmlidXRlSWRlbnRpdHksCisgICAgICAgICAgICAgICAgICAgICAgICAg
a0NJQXR0cmlidXRlVHlwZVNjYWxhciwga0NJQXR0cmlidXRlVHlwZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICBuaWxdLCBAImlucHV0U3VyZmFjZVNjYWxlIiwKKyAgICAgICAgICAgICAgICAg
ICAgIG5pbF1dOworfQorCisrIChDSUZpbHRlciAqKWZpbHRlcldpdGhOYW1lOihOU1N0cmluZyAq
KW5hbWUKK3sKKyAgICByZXR1cm4gW1tbc2VsZiBhbGxvY10gaW5pdF0gYXV0b3JlbGVhc2VdOwor
fQorCistIChpZClpbml0Cit7CisgICAgaWYgKCFub3JtYWxNYXBLZXJuZWwpIHsKKyAgICAgICAg
TlNCdW5kbGUgKmJ1bmRsZSA9IFtOU0J1bmRsZSBidW5kbGVGb3JDbGFzczpbc2VsZiBjbGFzc11d
OworICAgICAgICBOU1N0cmluZyAqa2VybmVsRmlsZSA9IFtidW5kbGUgcGF0aEZvclJlc291cmNl
OkAiV0tOb3JtYWxNYXBGaWx0ZXIiIG9mVHlwZTpAImNpa2VybmVsIl07CisgICAgICAgIE5TU3Ry
aW5nICpjb2RlID0gW05TU3RyaW5nIHN0cmluZ1dpdGhDb250ZW50c09mRmlsZTprZXJuZWxGaWxl
XTsKKyAgICAgICAgTlNBcnJheSAqa2VybmVscyA9IFtDSUtlcm5lbCBrZXJuZWxzV2l0aFN0cmlu
Zzpjb2RlXTsKKyAgICAgICAgY29udm9sdmVLZXJuZWwgPSBbW2tlcm5lbHMgb2JqZWN0QXRJbmRl
eDowXSByZXRhaW5dOworICAgICAgICBub3JtYWxNYXBLZXJuZWwgPSBbW2tlcm5lbHMgb2JqZWN0
QXRJbmRleDoxXSByZXRhaW5dOworICAgIH0KKyAgICByZXR1cm4gW3N1cGVyIGluaXRdOworfQor
CistIChOU0FycmF5ICopeENvbnZvbHZlQXJnc1dpdGhCdW1wTWFwOihDSVNhbXBsZXIgKilidW1w
TWFwIHsKKyAgICByZXR1cm4gW05TQXJyYXkgYXJyYXlXaXRoT2JqZWN0czoKKyAgICAgICAgYnVt
cE1hcCwKKyAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhGbG9hdDo0XSwKKyAgICAgICAgW05T
TnVtYmVyIG51bWJlcldpdGhGbG9hdDowXSwKKyAgICAgICAgW0NJVmVjdG9yIHZlY3RvcldpdGhY
OjEgWToyIFo6MV0sCisgICAgICAgIFtDSVZlY3RvciB2ZWN0b3JXaXRoWDowIFk6MCBaOjBdLAor
ICAgICAgICBbQ0lWZWN0b3IgdmVjdG9yV2l0aFg6LTEgWTotMiBaOi0xXSwKKyAgICAgICAgbmls
XTsKK30KKworLSAoTlNBcnJheSAqKXlDb252b2x2ZUFyZ3NXaXRoQnVtcE1hcDooQ0lTYW1wbGVy
ICopYnVtcE1hcCB7CisgICAgcmV0dXJuIFtOU0FycmF5IGFycmF5V2l0aE9iamVjdHM6IAorICAg
ICAgICBidW1wTWFwLAorICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aEZsb2F0OjRdLAorICAg
ICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aEZsb2F0OjBdLAorICAgICAgICBbQ0lWZWN0b3IgdmVj
dG9yV2l0aFg6MSBZOjAgWjotMV0sCisgICAgICAgIFtDSVZlY3RvciB2ZWN0b3JXaXRoWDoyIFk6
MCBaOi0yXSwKKyAgICAgICAgW0NJVmVjdG9yIHZlY3RvcldpdGhYOjEgWTowIFo6LTFdLAorICAg
ICAgICBuaWxdOworfQorCistIChDSUltYWdlICopb3V0cHV0SW1hZ2UKK3sKKyAgICBDSVNhbXBs
ZXIgKmltYWdlID0gW0NJU2FtcGxlciBzYW1wbGVyV2l0aEltYWdlOmlucHV0SW1hZ2VdOworICAg
IE5TRGljdGlvbmFyeSAqYXBwbHlPcHRpb25zID0gW05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0
aE9iamVjdHNBbmRLZXlzOltpbWFnZSBkZWZpbml0aW9uXSwga0NJQXBwbHlPcHRpb25EZWZpbml0
aW9uLCBuaWxdOworICAgIAorICAgIENJSW1hZ2UgKmNvbnZvbHZlWCA9IFtzZWxmIGFwcGx5OmNv
bnZvbHZlS2VybmVsIGFyZ3VtZW50czpbc2VsZiB4Q29udm9sdmVBcmdzV2l0aEJ1bXBNYXA6aW1h
Z2VdIG9wdGlvbnM6YXBwbHlPcHRpb25zXTsKKyAgICBDSUltYWdlICpjb252b2x2ZVkgPSBbc2Vs
ZiBhcHBseTpjb252b2x2ZUtlcm5lbCBhcmd1bWVudHM6W3NlbGYgeUNvbnZvbHZlQXJnc1dpdGhC
dW1wTWFwOmltYWdlXSBvcHRpb25zOmFwcGx5T3B0aW9uc107CisgICAgQ0lTYW1wbGVyICpzYW1w
bGVyWCA9IFtDSVNhbXBsZXIgc2FtcGxlcldpdGhJbWFnZTpjb252b2x2ZVhdOworICAgIENJU2Ft
cGxlciAqc2FtcGxlclkgPSBbQ0lTYW1wbGVyIHNhbXBsZXJXaXRoSW1hZ2U6Y29udm9sdmVZXTsK
KyAgICAKKyAgICBOU0FycmF5ICpub3JtYWxNYXBBcmdzID0gW05TQXJyYXkgYXJyYXlXaXRoT2Jq
ZWN0czpzYW1wbGVyWCwgc2FtcGxlclksIGltYWdlLCBpbnB1dFN1cmZhY2VTY2FsZSwgbmlsXTsK
KyAgICByZXR1cm4gW3NlbGYgYXBwbHk6bm9ybWFsTWFwS2VybmVsIGFyZ3VtZW50czpub3JtYWxN
YXBBcmdzIG9wdGlvbnM6YXBwbHlPcHRpb25zXTsKK30KKworQGVuZApJbmRleDoga2NhbnZhcy9k
ZXZpY2UvcXVhcnR6L2RldmljZS9xdWFydHovZmlsdGVycy9XS1BvaW50TGlnaHRGaWx0ZXIuY2lr
ZXJuZWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQpkaWZmIC1OcHUga2NhbnZhcy9kZXZpY2UvcXVhcnR6L2RldmljZS9x
dWFydHovZmlsdGVycy9XS1BvaW50TGlnaHRGaWx0ZXIuY2lrZXJuZWwKLS0tIGtjYW52YXMvZGV2
aWNlL3F1YXJ0ei9kZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tQb2ludExpZ2h0RmlsdGVyLmNpa2Vy
bmVsCTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAKKysrIGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9k
ZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tQb2ludExpZ2h0RmlsdGVyLmNpa2VybmVsCTI4IE5vdiAy
MDA1IDExOjE2OjU0IC0wMDAwCkBAIC0wLDAgKzEsOCBAQAora2VybmVsIHZlYzQgZ2VuUG9pbnRM
aWdodChzYW1wbGVyIG5vcm1hbE1hcCwgdmVjMyBsaWdodFBvcywgZmxvYXQgc3VyZmFjZVNjYWxl
KQoreworCXZlYzIgcG9zID0gc2FtcGxlckNvb3JkKG5vcm1hbE1hcCk7CisJdmVjMyBQID0gdmVj
Myhwb3MueCwgcG9zLnksIHN1cmZhY2VTY2FsZSAqIHNhbXBsZShub3JtYWxNYXAsIHBvcykuYSk7
CisJdmVjMyBMID0gbGlnaHRQb3MgLSBQOworCUwgPSBub3JtYWxpemUoTCk7CisJcmV0dXJuIHZl
YzQoTC54LCBMLnksIEwueiwgMS4wKTsKK30KSW5kZXg6IGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9k
ZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tQb2ludExpZ2h0RmlsdGVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpkaWZm
IC1OcHUga2NhbnZhcy9kZXZpY2UvcXVhcnR6L2RldmljZS9xdWFydHovZmlsdGVycy9XS1BvaW50
TGlnaHRGaWx0ZXIuaAotLS0ga2NhbnZhcy9kZXZpY2UvcXVhcnR6L2RldmljZS9xdWFydHovZmls
dGVycy9XS1BvaW50TGlnaHRGaWx0ZXIuaAkxIEphbiAxOTcwIDAwOjAwOjAwIC0wMDAwCisrKyBr
Y2FudmFzL2RldmljZS9xdWFydHovZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL1dLUG9pbnRMaWdodEZp
bHRlci5oCTI4IE5vdiAyMDA1IDAxOjU2OjA0IC0wMDAwCkBAIC0wLDAgKzEsMzQgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDUgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpbXBvcnQgPFF1YXJ0ekNvcmUvQ29yZUltYWdlLmg+CisKK0BpbnRl
cmZhY2UgV0tQb2ludExpZ2h0RmlsdGVyIDogQ0lGaWx0ZXIgeworICAgIENJSW1hZ2UgICppbnB1
dE5vcm1hbE1hcDsKKyAgICBDSVZlY3RvciAqaW5wdXRMaWdodFBvc2l0aW9uOworICAgIE5TTnVt
YmVyICppbnB1dFN1cmZhY2VTY2FsZTsKK30KKworQGVuZApJbmRleDoga2NhbnZhcy9kZXZpY2Uv
cXVhcnR6L2RldmljZS9xdWFydHovZmlsdGVycy9XS1BvaW50TGlnaHRGaWx0ZXIubQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09CmRpZmYgLU5wdSBrY2FudmFzL2RldmljZS9xdWFydHovZGV2aWNlL3F1YXJ0ei9maWx0ZXJz
L1dLUG9pbnRMaWdodEZpbHRlci5tCi0tLSBrY2FudmFzL2RldmljZS9xdWFydHovZGV2aWNlL3F1
YXJ0ei9maWx0ZXJzL1dLUG9pbnRMaWdodEZpbHRlci5tCTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAw
MDAKKysrIGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9kZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tQb2lu
dExpZ2h0RmlsdGVyLm0JMjggTm92IDIwMDUgMTE6MDI6MDAgLTAwMDAKQEAgLTAsMCArMSw2OCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2ltcG9ydCAiV0tQ
b2ludExpZ2h0RmlsdGVyLmgiCisKK3N0YXRpYyBDSUtlcm5lbCAqcG9pbnRMaWdodEZpbHRlciA9
IG5pbDsKKworQGltcGxlbWVudGF0aW9uIFdLUG9pbnRMaWdodEZpbHRlcgorCisrICh2b2lkKWlu
aXRpYWxpemUKK3sKKyAgICBbQ0lGaWx0ZXIgcmVnaXN0ZXJGaWx0ZXJOYW1lOkAiV0tQb2ludExp
Z2h0IgorICAgICAgICAgICAgICAgICAgICAgY29uc3RydWN0b3I6c2VsZgorICAgICAgICAgICAg
ICAgICBjbGFzc0F0dHJpYnV0ZXM6W05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVjdHNB
bmRLZXlzOgorICAgICAgICAgICAgICAgICAgICAgQCJXZWJLaXQgUG9pbnQgTGlnaHQiLCBrQ0lB
dHRyaWJ1dGVGaWx0ZXJEaXNwbGF5TmFtZSwKKyAgICAgICAgICAgICAgICAgICAgIFtOU0FycmF5
IGFycmF5V2l0aE9iamVjdHM6a0NJQ2F0ZWdvcnlTdHlsaXplLCBrQ0lDYXRlZ29yeVZpZGVvLAor
ICAgICAgICAgICAgICAgICAgICAgICAgIGtDSUNhdGVnb3J5U3RpbGxJbWFnZSwga0NJQ2F0ZWdv
cnlOb25TcXVhcmVQaXhlbHMsbmlsXSwga0NJQXR0cmlidXRlRmlsdGVyQ2F0ZWdvcmllcywKKyAg
ICAgICAgICAgICAgICAgICAgIFtOU0RpY3Rpb25hcnkgZGljdGlvbmFyeVdpdGhPYmplY3RzQW5k
S2V5czoKKyAgICAgICAgICAgICAgICAgICAgICAgICBrQ0lBdHRyaWJ1dGVUeXBlUG9zaXRpb24z
LCBrQ0lBdHRyaWJ1dGVUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgIG5pbF0sIEAiaW5w
dXRMaWdodFBvc2l0aW9uIiwKKyAgICAgICAgICAgICAgICAgICAgIG5pbF1dOworfQorCisrIChD
SUZpbHRlciAqKWZpbHRlcldpdGhOYW1lOihOU1N0cmluZyAqKW5hbWUKK3sKKyAgICByZXR1cm4g
W1tbc2VsZiBhbGxvY10gaW5pdF0gYXV0b3JlbGVhc2VdOworfQorCistIChpZClpbml0Cit7Cisg
ICAgaWYgKCFwb2ludExpZ2h0RmlsdGVyKSB7CisgICAgICAgIE5TQnVuZGxlICpidW5kbGUgPSBb
TlNCdW5kbGUgYnVuZGxlRm9yQ2xhc3M6W3NlbGYgY2xhc3NdXTsKKyAgICAgICAgTlNTdHJpbmcg
Kmtlcm5lbEZpbGUgPSBbYnVuZGxlIHBhdGhGb3JSZXNvdXJjZTpAIldLUG9pbnRMaWdodEZpbHRl
ciIgb2ZUeXBlOkAiY2lrZXJuZWwiXTsKKyAgICAgICAgTlNTdHJpbmcgKmNvZGUgPSBbTlNTdHJp
bmcgc3RyaW5nV2l0aENvbnRlbnRzT2ZGaWxlOmtlcm5lbEZpbGVdOworICAgICAgICBOU0FycmF5
ICprZXJuZWxzID0gW0NJS2VybmVsIGtlcm5lbHNXaXRoU3RyaW5nOmNvZGVdOworICAgICAgICBw
b2ludExpZ2h0RmlsdGVyID0gW1trZXJuZWxzIG9iamVjdEF0SW5kZXg6MF0gcmV0YWluXTsKKyAg
ICB9CisgICAgcmV0dXJuIFtzdXBlciBpbml0XTsKK30KKworLSAoQ0lJbWFnZSAqKW91dHB1dElt
YWdlCit7CisgICAgcmV0dXJuIFtzZWxmIGFwcGx5OnBvaW50TGlnaHRGaWx0ZXIsIGlucHV0Tm9y
bWFsTWFwLCBpbnB1dExpZ2h0UG9zaXRpb24sIGlucHV0U3VyZmFjZVNjYWxlLCBuaWxdOworfQor
CitAZW5kCkluZGV4OiBrY2FudmFzL2RldmljZS9xdWFydHovZGV2aWNlL3F1YXJ0ei9maWx0ZXJz
L1dLU3BlY3VsYXJMaWdodGluZ0ZpbHRlci5jaWtlcm5lbAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CmRpZmYgLU5wdSBr
Y2FudmFzL2RldmljZS9xdWFydHovZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL1dLU3BlY3VsYXJMaWdo
dGluZ0ZpbHRlci5jaWtlcm5lbAotLS0ga2NhbnZhcy9kZXZpY2UvcXVhcnR6L2RldmljZS9xdWFy
dHovZmlsdGVycy9XS1NwZWN1bGFyTGlnaHRpbmdGaWx0ZXIuY2lrZXJuZWwJMSBKYW4gMTk3MCAw
MDowMDowMCAtMDAwMAorKysga2NhbnZhcy9kZXZpY2UvcXVhcnR6L2RldmljZS9xdWFydHovZmls
dGVycy9XS1NwZWN1bGFyTGlnaHRpbmdGaWx0ZXIuY2lrZXJuZWwJMjggTm92IDIwMDUgMTE6MTY6
NTQgLTAwMDAKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBPbGl2
ZXIgSHVudCA8b2poMTZAc3R1ZGVudC5jYW50ZXJidXJ5LmFjLm56Pi4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
QVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworIAora2Vy
bmVsIHZlYzQgYmFzaWMoc2FtcGxlciBpbnB1dE5vcm1hbFZlY3RvcnMsIHNhbXBsZXIgaW5wdXRM
aWdodFZlY3RvcnMsIF9fY29sb3IgaW5wdXRMaWdodGluZ0NvbG9yLCBmbG9hdCBpbnB1dFN1cmZh
Y2VTY2FsZSwgZmxvYXQgaW5wdXRTcGVjdWxhckNvbnN0YW50LAorICAgICAgICBmbG9hdCBpbnB1
dFNwZWN1bGFyRXhwb25lbnQsIGZsb2F0IGlucHV0S2VybmVsVW5pdExlbmd0aFgsIGZsb2F0IGlu
cHV0S2VybmVsVW5pdExlbmd0aFkpCit7CisgICAgdmVjMiBwb3MgPSBzYW1wbGVyQ29vcmQoaW5w
dXRMaWdodFZlY3RvcnMpOworICAgIHZlYzIgcG9zbiA9IHNhbXBsZXJDb29yZChpbnB1dE5vcm1h
bFZlY3RvcnMpOworICAgIHZlYzMgbCA9IHNhbXBsZShpbnB1dExpZ2h0VmVjdG9ycywgcG9zKS54
eXo7CisgICAgdmVjMyBuID0gc2FtcGxlKGlucHV0Tm9ybWFsVmVjdG9ycywgcG9zbikueHl6Owor
ICAgIHZlYzMgaCA9IGwrdmVjMygwLjAsIDAuMCwgMS4wKTsKKyAgICBoID0gbm9ybWFsaXplKGgp
OworICAgIGZsb2F0IG5oID0gaW5wdXRTcGVjdWxhckNvbnN0YW50KnBvdygoZG90KG4sIGgpKSwg
aW5wdXRTcGVjdWxhckV4cG9uZW50KTsKKyAgICB2ZWM0IHJlcyA9IGlucHV0TGlnaHRpbmdDb2xv
ciAqIG5oOworICAgIHJlcy5hID0gbWF4KHJlcy5yLCByZXMuZyk7CisgICAgcmVzLmEgPSBtYXgo
cmVzLmEsIHJlcy5iKTsKKyAgICByZXR1cm4gcmVzOworfQpJbmRleDoga2NhbnZhcy9kZXZpY2Uv
cXVhcnR6L2RldmljZS9xdWFydHovZmlsdGVycy9XS1NwZWN1bGFyTGlnaHRpbmdGaWx0ZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09CmRpZmYgLU5wdSBrY2FudmFzL2RldmljZS9xdWFydHovZGV2aWNlL3F1YXJ0ei9m
aWx0ZXJzL1dLU3BlY3VsYXJMaWdodGluZ0ZpbHRlci5oCi0tLSBrY2FudmFzL2RldmljZS9xdWFy
dHovZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL1dLU3BlY3VsYXJMaWdodGluZ0ZpbHRlci5oCTEgSmFu
IDE5NzAgMDA6MDA6MDAgLTAwMDAKKysrIGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9kZXZpY2UvcXVh
cnR6L2ZpbHRlcnMvV0tTcGVjdWxhckxpZ2h0aW5nRmlsdGVyLmgJMTEgTm92IDIwMDUgMjM6MzY6
MDAgLTAwMDAKQEAgLTAsMCArMSwzOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBBcHBs
ZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2ltcG9ydCA8
UXVhcnR6Q29yZS9Db3JlSW1hZ2UuaD4KKworCitAaW50ZXJmYWNlIFdLU3BlY3VsYXJMaWdodGlu
Z0ZpbHRlciA6IENJRmlsdGVyIHsKKyAgICBDSVNhbXBsZXIgKmlucHV0Tm9ybWFsTWFwOworICAg
IENJU2FtcGxlciAqaW5wdXRMaWdodFZlY3RvcnM7CisgICAgQ0lDb2xvciAgKmlucHV0TGlnaHRp
bmdDb2xvcjsKKyAgICBOU051bWJlciAqaW5wdXRTdXJmYWNlU2NhbGU7CisgICAgTlNOdW1iZXIg
KmlucHV0U3BlY3VsYXJDb25zdGFudDsKKyAgICBOU051bWJlciAqaW5wdXRTcGVjdWxhckV4cG9u
ZW50OworICAgIE5TTnVtYmVyICppbnB1dEtlcm5lbFVuaXRMZW5ndGhYOworICAgIE5TTnVtYmVy
ICppbnB1dEtlcm5lbFVuaXRMZW5ndGhZOworfQorQGVuZApJbmRleDoga2NhbnZhcy9kZXZpY2Uv
cXVhcnR6L2RldmljZS9xdWFydHovZmlsdGVycy9XS1NwZWN1bGFyTGlnaHRpbmdGaWx0ZXIubQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09CmRpZmYgLU5wdSBrY2FudmFzL2RldmljZS9xdWFydHovZGV2aWNlL3F1YXJ0ei9m
aWx0ZXJzL1dLU3BlY3VsYXJMaWdodGluZ0ZpbHRlci5tCi0tLSBrY2FudmFzL2RldmljZS9xdWFy
dHovZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL1dLU3BlY3VsYXJMaWdodGluZ0ZpbHRlci5tCTEgSmFu
IDE5NzAgMDA6MDA6MDAgLTAwMDAKKysrIGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9kZXZpY2UvcXVh
cnR6L2ZpbHRlcnMvV0tTcGVjdWxhckxpZ2h0aW5nRmlsdGVyLm0JMjggTm92IDIwMDUgMTA6NDQ6
MTAgLTAwMDAKQEAgLTAsMCArMSw5MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBBcHBs
ZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2ltcG9ydCAi
V0tTcGVjdWxhckxpZ2h0aW5nRmlsdGVyLmgiCisKK3N0YXRpYyBDSUtlcm5lbCAqc3BlY3VsYXJM
aWdodGluZ0ZpbHRlciA9IG5pbDsKKworQGltcGxlbWVudGF0aW9uIFdLU3BlY3VsYXJMaWdodGlu
Z0ZpbHRlcgorCisrICh2b2lkKWluaXRpYWxpemUKK3sKKyAgICBbQ0lGaWx0ZXIgcmVnaXN0ZXJG
aWx0ZXJOYW1lOkAiV0tTcGVjdWxhckxpZ2h0aW5nIiAgCisgICAgICAgICAgICAgICAgICAgICBj
b25zdHJ1Y3RvcjpzZWxmCisgICAgICAgICAgICAgICAgIGNsYXNzQXR0cmlidXRlczpbTlNEaWN0
aW9uYXJ5IGRpY3Rpb25hcnlXaXRoT2JqZWN0c0FuZEtleXM6CisgICAgICAgICAgICAgICAgICAg
ICBAIldlYktpdCBTcGVjdWxhciBMaWdodGluZyIsIGtDSUF0dHJpYnV0ZUZpbHRlckRpc3BsYXlO
YW1lLAorICAgICAgICAgICAgICAgICAgICAgW05TQXJyYXkgYXJyYXlXaXRoT2JqZWN0czprQ0lD
YXRlZ29yeVN0eWxpemUsIGtDSUNhdGVnb3J5VmlkZW8sCisgICAgICAgICAgICAgICAgICAgICAg
ICAga0NJQ2F0ZWdvcnlTdGlsbEltYWdlLCBrQ0lDYXRlZ29yeU5vblNxdWFyZVBpeGVscyxuaWxd
LCBrQ0lBdHRyaWJ1dGVGaWx0ZXJDYXRlZ29yaWVzLAorICAgICAgICAgICAgICAgICAgICAgW05T
RGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVjdHNBbmRLZXlzOgorICAgICAgICAgICAgICAg
ICAgICAgICAgIFtDSUNvbG9yIGNvbG9yV2l0aFJlZDoxLjAgZ3JlZW46MS4wIGJsdWU6MS4wIGFs
cGhhOjEuMF0sCisgICAgICAgICAgICAgICAgICAgICAgICAga0NJQXR0cmlidXRlRGVmYXVsdCwg
bmlsXSwgIEAiaW5wdXRMaWdodGluZ0NvbG9yIiwKKyAgICAgICAgICAgICAgICAgICAgIFtOU0Rp
Y3Rpb25hcnkgZGljdGlvbmFyeVdpdGhPYmplY3RzQW5kS2V5czoKKyAgICAgICAgICAgICAgICAg
ICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aERvdWJsZTowLjBdLCBrQ0lBdHRyaWJ1dGVNaW4s
CisgICAgICAgICAgICAgICAgICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhEb3VibGU6MS4w
XSwga0NJQXR0cmlidXRlRGVmYXVsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbTlNOdW1i
ZXIgbnVtYmVyV2l0aERvdWJsZToxLjBdLCBrQ0lBdHRyaWJ1dGVJZGVudGl0eSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICBrQ0lBdHRyaWJ1dGVUeXBlU2NhbGFyLCBrQ0lBdHRyaWJ1dGVUeXBl
LAorICAgICAgICAgICAgICAgICAgICAgICAgIG5pbF0sIEAiaW5wdXRTdXJmYWNlU2NhbGUiLAor
ICAgICAgICAgICAgICAgICAgICAgW05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVjdHNB
bmRLZXlzOgorICAgICAgICAgICAgICAgICAgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoRG91
YmxlOjAuMF0sIGtDSUF0dHJpYnV0ZU1pbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbTlNO
dW1iZXIgbnVtYmVyV2l0aERvdWJsZToxLjBdLCBrQ0lBdHRyaWJ1dGVEZWZhdWx0LAorICAgICAg
ICAgICAgICAgICAgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoRG91YmxlOjEuMF0sIGtDSUF0
dHJpYnV0ZUlkZW50aXR5LAorICAgICAgICAgICAgICAgICAgICAgICAgIGtDSUF0dHJpYnV0ZVR5
cGVTY2FsYXIsIGtDSUF0dHJpYnV0ZVR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgbmls
XSwgQCJpbnB1dFNwZWN1bGFyQ29uc3RhbnQiLAorICAgICAgICAgICAgICAgICAgICAgW05TRGlj
dGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVjdHNBbmRLZXlzOgorICAgICAgICAgICAgICAgICAg
ICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoRG91YmxlOjAuMF0sIGtDSUF0dHJpYnV0ZU1pbiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aERvdWJsZToxMjgu
MF0sIGtDSUF0dHJpYnV0ZU1pbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbTlNOdW1iZXIg
bnVtYmVyV2l0aERvdWJsZToxLjBdLCBrQ0lBdHRyaWJ1dGVEZWZhdWx0LAorICAgICAgICAgICAg
ICAgICAgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoRG91YmxlOjEuMF0sIGtDSUF0dHJpYnV0
ZUlkZW50aXR5LAorICAgICAgICAgICAgICAgICAgICAgICAgIGtDSUF0dHJpYnV0ZVR5cGVTY2Fs
YXIsIGtDSUF0dHJpYnV0ZVR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgbmlsXSwgQCJp
bnB1dFNwZWN1bGFyRXhwb25lbnQiLAorICAgICAgICAgICAgICAgICAgICAgW05TRGljdGlvbmFy
eSBkaWN0aW9uYXJ5V2l0aE9iamVjdHNBbmRLZXlzOgorICAgICAgICAgICAgICAgICAgICAgICAg
IGtDSUF0dHJpYnV0ZVR5cGVPZmZzZXQsIGtDSUF0dHJpYnV0ZVR5cGUsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgbmlsXSwgQCJpbnB1dEtlcm5lbFVuaXRMZW5ndGgiLAorICAgICAgICAgICAg
ICAgICAgICAgbmlsXV07Cit9CisKKysgKENJRmlsdGVyICopZmlsdGVyV2l0aE5hbWU6KE5TU3Ry
aW5nICopbmFtZQoreworICAgIHJldHVybiBbW1tzZWxmIGFsbG9jXSBpbml0XSBhdXRvcmVsZWFz
ZV07Cit9CisKKy0gKGlkKWluaXQKK3sKKyAgICBpZiAoIXNwZWN1bGFyTGlnaHRpbmdGaWx0ZXIp
IHsKKyAgICAgICAgTlNCdW5kbGUgKmJ1bmRsZSA9IFtOU0J1bmRsZSBidW5kbGVGb3JDbGFzczpb
c2VsZiBjbGFzc11dOworICAgICAgICBOU1N0cmluZyAqa2VybmVsRmlsZSA9IFtidW5kbGUgcGF0
aEZvclJlc291cmNlOkAiV0tTcGVjdWxhckxpZ2h0aW5nRmlsdGVyIiBvZlR5cGU6QCJjaWtlcm5l
bCJdOworICAgICAgICBOU1N0cmluZyAqY29kZSA9IFtOU1N0cmluZyBzdHJpbmdXaXRoQ29udGVu
dHNPZkZpbGU6a2VybmVsRmlsZV07CisgICAgICAgIE5TQXJyYXkgKmtlcm5lbHMgPSBbQ0lLZXJu
ZWwga2VybmVsc1dpdGhTdHJpbmc6Y29kZV07CisgICAgICAgIHNwZWN1bGFyTGlnaHRpbmdGaWx0
ZXIgPSBbW2tlcm5lbHMgb2JqZWN0QXRJbmRleDowXSByZXRhaW5dOworICAgIH0KKyAgICByZXR1
cm4gW3N1cGVyIGluaXRdOworfQorCistIChDSUltYWdlICopb3V0cHV0SW1hZ2UKK3sKKyAgICBy
ZXR1cm4gW3NlbGYgYXBwbHk6c3BlY3VsYXJMaWdodGluZ0ZpbHRlciwgaW5wdXROb3JtYWxNYXAs
IGlucHV0TGlnaHRWZWN0b3JzLCBpbnB1dExpZ2h0aW5nQ29sb3IsIGlucHV0U3VyZmFjZVNjYWxl
LCBpbnB1dFNwZWN1bGFyQ29uc3RhbnQsCisgICAgICAgIGlucHV0U3BlY3VsYXJFeHBvbmVudCwg
aW5wdXRLZXJuZWxVbml0TGVuZ3RoWCwgaW5wdXRLZXJuZWxVbml0TGVuZ3RoWSwgbmlsXTsKK30K
KworQGVuZApJbmRleDoga2NhbnZhcy9kZXZpY2UvcXVhcnR6L2RldmljZS9xdWFydHovZmlsdGVy
cy9XS1Nwb3RMaWdodEZpbHRlci5jaWtlcm5lbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CmRpZmYgLU5wdSBrY2FudmFz
L2RldmljZS9xdWFydHovZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL1dLU3BvdExpZ2h0RmlsdGVyLmNp
a2VybmVsCi0tLSBrY2FudmFzL2RldmljZS9xdWFydHovZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL1dL
U3BvdExpZ2h0RmlsdGVyLmNpa2VybmVsCTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAKKysrIGtj
YW52YXMvZGV2aWNlL3F1YXJ0ei9kZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tTcG90TGlnaHRGaWx0
ZXIuY2lrZXJuZWwJMjggTm92IDIwMDUgMTE6Mzk6NDggLTAwMDAKQEAgLTAsMCArMSw5IEBACitr
ZXJuZWwgdmVjNCBzcG90TGlnaHRGaWx0ZXIoc2FtcGxlciBsaWdodFZlY3RvcnMsIHZlYzMgbGln
aHREaXJlY3Rpb24sIGZsb2F0IHNwZWN1bGFyRXhwb25lbnQsIGZsb2F0IGNvc0N1dG9mZkFuZ2xl
KQoreworICAgIHZlYzIgcG9zID0gc2FtcGxlckNvb3JkKGxpZ2h0VmVjdG9ycyk7CisgICAgdmVj
MyBsID0gc2FtcGxlKGxpZ2h0VmVjdG9ycywgcG9zKS54eXo7CisgICAgZmxvYXQgc2wgPSAtZG90
KGxpZ2h0RGlyZWN0aW9uLCBsKTsKKyAgICBzbCA9IG1heChzbCwgMC4wKTsKKyAgICBzbCA9IHBv
dyhzbCwgc3BlY3VsYXJFeHBvbmVudCkgKiBzaWduKHNsIC0gY29zQ3V0b2ZmQW5nbGUpOworICAg
IHJldHVybiB2ZWM0KGwueCwgbC55LCBsLnosIHNsKTsKK30KSW5kZXg6IGtjYW52YXMvZGV2aWNl
L3F1YXJ0ei9kZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tTcG90TGlnaHRGaWx0ZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09CmRpZmYgLU5wdSBrY2FudmFzL2RldmljZS9xdWFydHovZGV2aWNlL3F1YXJ0ei9maWx0ZXJz
L1dLU3BvdExpZ2h0RmlsdGVyLmgKLS0tIGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9kZXZpY2UvcXVh
cnR6L2ZpbHRlcnMvV0tTcG90TGlnaHRGaWx0ZXIuaAkxIEphbiAxOTcwIDAwOjAwOjAwIC0wMDAw
CisrKyBrY2FudmFzL2RldmljZS9xdWFydHovZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL1dLU3BvdExp
Z2h0RmlsdGVyLmgJMjAgTm92IDIwMDUgMTE6MDQ6MDMgLTAwMDAKQEAgLTAsMCArMSwzNCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2ltcG9ydCA8UXVhcnR6Q29yZS9Db3JlSW1hZ2UuaD4KKwor
QGludGVyZmFjZSBXS1Nwb3RMaWdodEZpbHRlciA6IENJRmlsdGVyIHsKKyAgICBDSUltYWdlICAq
aW5wdXRMaWdodFZlY3RvcnM7CisgICAgQ0lWZWN0b3IgKmlucHV0TGlnaHREaXJlY3Rpb247Cisg
ICAgTlNOdW1iZXIgKmlucHV0U3BlY3VsYXJFeHBvbmVudDsKKyAgICBOU051bWJlciAqaW5wdXRM
aW1pdGluZ0NvbmVBbmdsZTsKK30KK0BlbmQKSW5kZXg6IGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9k
ZXZpY2UvcXVhcnR6L2ZpbHRlcnMvV0tTcG90TGlnaHRGaWx0ZXIubQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CmRpZmYg
LU5wdSBrY2FudmFzL2RldmljZS9xdWFydHovZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL1dLU3BvdExp
Z2h0RmlsdGVyLm0KLS0tIGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9kZXZpY2UvcXVhcnR6L2ZpbHRl
cnMvV0tTcG90TGlnaHRGaWx0ZXIubQkxIEphbiAxOTcwIDAwOjAwOjAwIC0wMDAwCisrKyBrY2Fu
dmFzL2RldmljZS9xdWFydHovZGV2aWNlL3F1YXJ0ei9maWx0ZXJzL1dLU3BvdExpZ2h0RmlsdGVy
Lm0JMjggTm92IDIwMDUgMTA6NDQ6MTAgLTAwMDAKQEAgLTAsMCArMSw3OSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwNSBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENP
TVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09N
UFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKyAKKyNpbXBvcnQgIldLU3BvdExpZ2h0RmlsdGVyLmgiCisKK3N0YXRpYyBDSUtl
cm5lbCAqc3BvdExpZ2h0RmlsdGVyID0gbmlsOworCitAaW1wbGVtZW50YXRpb24gV0tTcG90TGln
aHRGaWx0ZXIKKworKyAodm9pZClpbml0aWFsaXplCit7CisgICAgW0NJRmlsdGVyIHJlZ2lzdGVy
RmlsdGVyTmFtZTpAIldLU3BvdExpZ2h0IgorICAgICAgICAgICAgICAgICAgICAgY29uc3RydWN0
b3I6c2VsZgorICAgICAgICAgICAgICAgICBjbGFzc0F0dHJpYnV0ZXM6W05TRGljdGlvbmFyeSBk
aWN0aW9uYXJ5V2l0aE9iamVjdHNBbmRLZXlzOgorICAgICAgICAgICAgICAgICAgICAgQCJXZWJL
aXQgU3BvdCBMaWdodCIsIGtDSUF0dHJpYnV0ZUZpbHRlckRpc3BsYXlOYW1lLAorICAgICAgICAg
ICAgICAgICAgICAgW05TQXJyYXkgYXJyYXlXaXRoT2JqZWN0czprQ0lDYXRlZ29yeVN0eWxpemUs
IGtDSUNhdGVnb3J5VmlkZW8sCisgICAgICAgICAgICAgICAgICAgICAgICAga0NJQ2F0ZWdvcnlT
dGlsbEltYWdlLCBrQ0lDYXRlZ29yeU5vblNxdWFyZVBpeGVscyxuaWxdLCBrQ0lBdHRyaWJ1dGVG
aWx0ZXJDYXRlZ29yaWVzLAorICAgICAgICAgICAgICAgICAgICAgW05TRGljdGlvbmFyeSBkaWN0
aW9uYXJ5V2l0aE9iamVjdHNBbmRLZXlzOgorICAgICAgICAgICAgICAgICAgICAgICAgIGtDSUF0
dHJpYnV0ZVR5cGVQb3NpdGlvbjMsIGtDSUF0dHJpYnV0ZVR5cGUsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgbmlsXSwgQCJpbnB1dExpZ2h0RGlyZWN0aW9uIiwKKyAgICAgICAgICAgICAgICAg
ICAgIFtOU0RpY3Rpb25hcnkgZGljdGlvbmFyeVdpdGhPYmplY3RzQW5kS2V5czoKKyAgICAgICAg
ICAgICAgICAgICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aERvdWJsZToxLjBdLCBrQ0lBdHRy
aWJ1dGVEZWZhdWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgIFtOU051bWJlciBudW1iZXJX
aXRoRG91YmxlOjEuMF0sIGtDSUF0dHJpYnV0ZUlkZW50aXR5LAorICAgICAgICAgICAgICAgICAg
ICAgICAgIGtDSUF0dHJpYnV0ZVR5cGVTY2FsYXIsIGtDSUF0dHJpYnV0ZVR5cGUsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgbmlsXSwgQCJpbnB1dFNwZWN1bGFyRXhwb25lbnQiLAorICAgICAg
ICAgICAgICAgICAgICAgW05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVjdHNBbmRLZXlz
OgorICAgICAgICAgICAgICAgICAgICAgICAgIGtDSUF0dHJpYnV0ZVR5cGVBbmdsZSwga0NJQXR0
cmlidXRlVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBuaWxdLCBAImlucHV0TGltaXRp
bmdDb25lQW5nbGUiLAorICAgICAgICAgICAgICAgICAgICAgbmlsXV07Cit9CisKKysgKENJRmls
dGVyICopZmlsdGVyV2l0aE5hbWU6KE5TU3RyaW5nICopbmFtZQoreworICAgIHJldHVybiBbW1tz
ZWxmIGFsbG9jXSBpbml0XSBhdXRvcmVsZWFzZV07Cit9CisKKy0gKGlkKWluaXQKK3sKKyAgICBp
ZiAoIXNwb3RMaWdodEZpbHRlcikgeworICAgICAgICBOU0J1bmRsZSAqYnVuZGxlID0gW05TQnVu
ZGxlIGJ1bmRsZUZvckNsYXNzOltzZWxmIGNsYXNzXV07CisgICAgICAgIE5TU3RyaW5nICprZXJu
ZWxGaWxlID0gW2J1bmRsZSBwYXRoRm9yUmVzb3VyY2U6QCJXS1Nwb3RMaWdodEZpbHRlciIgb2ZU
eXBlOkAiY2lrZXJuZWwiXTsKKyAgICAgICAgTlNTdHJpbmcgKmNvZGUgPSBbTlNTdHJpbmcgc3Ry
aW5nV2l0aENvbnRlbnRzT2ZGaWxlOmtlcm5lbEZpbGVdOworICAgICAgICBOU0FycmF5ICprZXJu
ZWxzID0gW0NJS2VybmVsIGtlcm5lbHNXaXRoU3RyaW5nOmNvZGVdOworICAgICAgICBzcG90TGln
aHRGaWx0ZXIgPSBbW2tlcm5lbHMgb2JqZWN0QXRJbmRleDowXSByZXRhaW5dOworICAgIH0KKyAg
ICByZXR1cm4gW3N1cGVyIGluaXRdOworfQorCistIChDSUltYWdlICopb3V0cHV0SW1hZ2UKK3sK
KyAgICBmbG9hdCBjb3NjdXRvZmYgPSBjb3MoW2lucHV0TGltaXRpbmdDb25lQW5nbGUgZmxvYXRW
YWx1ZV0pOworICAgIGlmIChjb3NjdXRvZmYgPCAwKSAKKyAgICAgICAgY29zY3V0b2ZmID0gLWNv
c2N1dG9mZjsKKyAgICByZXR1cm4gW3NlbGYgYXBwbHk6c3BvdExpZ2h0RmlsdGVyLCBpbnB1dExp
Z2h0VmVjdG9ycywgaW5wdXRMaWdodERpcmVjdGlvbiwgaW5wdXRTcGVjdWxhckV4cG9uZW50LCBb
TlNOdW1iZXIgbnVtYmVyV2l0aEZsb2F0OmNvc2N1dG9mZl0sIG5pbF07Cit9CisKK0BlbmQKSW5k
ZXg6IGtjYW52YXMvS0NhbnZhc0ZpbHRlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMv
cm9vdC9TVkdTdXBwb3J0L2tjYW52YXMvS0NhbnZhc0ZpbHRlcnMuY3BwLHYKcmV0cmlldmluZyBy
ZXZpc2lvbiAxLjkKZGlmZiAtcCAtdSAtcjEuOSBrY2FudmFzL0tDYW52YXNGaWx0ZXJzLmNwcAot
LS0ga2NhbnZhcy9LQ2FudmFzRmlsdGVycy5jcHAJMjIgTm92IDIwMDUgMTI6MDM6MTUgLTAwMDAJ
MS45CisrKyBrY2FudmFzL0tDYW52YXNGaWx0ZXJzLmNwcAkyOCBOb3YgMjAwNSAxMjo1NjoxMiAt
MDAwMApAQCAtMjgsNiArMjgsMTQgQEAKICNpbmNsdWRlICJLQ2FudmFzVHJlZURlYnVnLmgiCiAj
aW5jbHVkZSA8a3htbGNvcmUvQXNzZXJ0aW9ucy5oPgogCit2b2lkIEtDYW52YXNQb2ludDNGOjpu
b3JtYWxpemUoKQoreworICAgIGZsb2F0IGxlbmd0aCA9IHNxcnQobV94ICogbV94ICsgbV95ICog
bV95ICsgbV96ICogbV96KTsKKyAgICBtX3ggLz0gbGVuZ3RoOworICAgIG1feSAvPSBsZW5ndGg7
CisgICAgbV96IC89IGxlbmd0aDsKK30KKwogLy8gRmlsdGVycwogCiB2b2lkIEtDYW52YXNGaWx0
ZXI6OmFkZEZpbHRlckVmZmVjdChLQ2FudmFzRmlsdGVyRWZmZWN0ICplZmZlY3QpCkBAIC05Miw2
ICsxMDAsMTQgQEAgdm9pZCBLQ2FudmFzRmlsdGVyRWZmZWN0OjpzZXRSZXN1bHQoY29ucwogICAg
IG1fcmVzdWx0ID0gcmVzdWx0OwogfQogCisKK3N0YXRpYyBRVGV4dFN0cmVhbSAmb3BlcmF0b3I8
PChRVGV4dFN0cmVhbSAmdHMsIGNvbnN0IEtDYW52YXNQb2ludDNGIHApCit7CisgICAgdHMgPDwg
Ing9IiA8PCBwLngoKSA8PCAiIHk9IiA8PCBwLnkoKSA8PCAiIHo9IiA8PCBwLnooKTsKKyAgICBy
ZXR1cm4gdHM7ICAKK30KKworCiBRVGV4dFN0cmVhbSAmS0NhbnZhc0ZpbHRlckVmZmVjdDo6ZXh0
ZXJuYWxSZXByZXNlbnRhdGlvbihRVGV4dFN0cmVhbSAmdHMpIGNvbnN0CiB7CiAgICAgaWYgKCFp
bigpLmlzRW1wdHkoKSkKQEAgLTEwMywzMCArMTE5LDM3IEBAIFFUZXh0U3RyZWFtICZLQ2FudmFz
RmlsdGVyRWZmZWN0OjpleHRlcm4KICAgICByZXR1cm4gdHM7ICAgIAogfQogCi1RVGV4dFN0cmVh
bSAmS0NhbnZhc0ZFRGlzdGFudExpZ2h0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFFUZXh0U3Ry
ZWFtICZ0cykgY29uc3QKK1FUZXh0U3RyZWFtICZLQ1BvaW50TGlnaHRTb3VyY2U6OmV4dGVybmFs
UmVwcmVzZW50YXRpb24oUVRleHRTdHJlYW0gJnRzKSBjb25zdAogewotICAgIHRzIDw8ICJbdHlw
ZT1ESVNUQU5ULUxJR0hUXSAiOwotICAgIEtDYW52YXNGaWx0ZXJFZmZlY3Q6OmV4dGVybmFsUmVw
cmVzZW50YXRpb24odHMpOwotICAgIHRzIDw8ICJbYXppbXV0aD0iIDw8IGF6aW11dGgoKSA8PCAi
XSIKLSAgICAgICAgPDwgIltlbGV2YXRpb249IiA8PCBlbGV2YXRpb24oKSA8PCAiXSI7Ci0gICAg
cmV0dXJuIHRzOworICAgIHRzIDw8ICJbdHlwZT1QT0lOVC1MSUdIVF0gIjsKKyAgICB0cyA8PCAi
W3Bvc2l0aW9uPVwiIiA8PCBwb3NpdGlvbigpIDw8ICJcIl0iOworICAgIHJldHVybiB0czsgIAog
fQogCi1RVGV4dFN0cmVhbSAmS0NhbnZhc0ZFUG9pbnRMaWdodDo6ZXh0ZXJuYWxSZXByZXNlbnRh
dGlvbihRVGV4dFN0cmVhbSAmdHMpIGNvbnN0CitRVGV4dFN0cmVhbSAmS0NTcG90TGlnaHRTb3Vy
Y2U6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oUVRleHRTdHJlYW0gJnRzKSBjb25zdAogewotICAg
IHRzIDw8ICJbdHlwZT1QT0lOVC1MSUdIVF0gIjsKLSAgICBLQ2FudmFzRmlsdGVyRWZmZWN0Ojpl
eHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzKTsKLSAgICB0cyA8PCAiW3g9IiA8PCBtX3ggPDwgIiB5
PSIgPDwgbV95IDw8ICIgej0iIDw8IG1feiA8PCAiXSI7CisgICAgdHMgPDwgIlt0eXBlPVNQT1Qt
TElHSFRdICI7CisgICAgdHMgPDwgIltwb3NpdGlvbj1cIiIgPDwgcG9zaXRpb24oKSA8PCAiXCJd
IjsKKyAgICB0cyA8PCAiW2RpcmVjdGlvbj1cIiIgPDwgZGlyZWN0aW9uKCkgPDwgIlwiXSI7Cisg
ICAgdHMgPDwgIltzcGVjdWxhckV4cG9uZW50PVwiIiA8PCBzcGVjdWxhckV4cG9uZW50KCkgPDwg
IlwiXSI7CisgICAgdHMgPDwgIltsaW1pdGluZ0NvbmVBbmdsZT1cIiIgPDwgbGltaXRpbmdDb25l
QW5nbGUoKSA8PCAiXCJdIjsKICAgICByZXR1cm4gdHM7CiB9CiAKLVFUZXh0U3RyZWFtICZLQ2Fu
dmFzRkVTcG90TGlnaHQ6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oUVRleHRTdHJlYW0gJnRzKSBj
b25zdAorUVRleHRTdHJlYW0gJktDRGlzdGFudExpZ2h0U291cmNlOjpleHRlcm5hbFJlcHJlc2Vu
dGF0aW9uKFFUZXh0U3RyZWFtICZ0cykgY29uc3QKIHsKLSAgICB0cyA8PCAiW3R5cGU9U1BPVC1M
SUdIVF0gIjsgCi0gICAgS0NhbnZhc0ZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlv
bih0cyk7Ci0gICAgdHMgPDwgIlt4PSIgPDwgbV94IDw8ICIgeT0iIDw8IG1feSA8PCAiIHo9IiA8
PCBtX3ogPDwgIl0iCi0gICAgICAgIDw8ICJbcG9pbnRzIGF0IHg9IiA8PCBtX3BvaW50c0F0WCA8
PCAiIHk9IiA8PCBtX3BvaW50c0F0WSA8PCAiIHo9IiA8PCBtX3BvaW50c0F0WiA8PCAiXSI7Ci0g
ICAgcmV0dXJuIHRzOworICAgIHRzIDw8ICJbdHlwZT1ESVNUQU5ULUxJR0hUXSAiOworICAgIHRz
IDw8ICJbYXppbXV0aD1cIiIgPDwgYXppbXV0aCgpIDw8ICJcIl0iOworICAgIHRzIDw8ICJbZWxl
dmF0aW9uPVwiIiA8PCBlbGV2YXRpb24oKSA8PCAiXCJdIjsKKyAgICByZXR1cm4gdHM7ICAKK30K
KworCisKK3N0YXRpYyBRVGV4dFN0cmVhbSAmb3BlcmF0b3I8PChRVGV4dFN0cmVhbSAmdHMsIFFQ
b2ludEYgcCkKK3sKKyAgICB0cyA8PCAieD0iIDw8IHAueCgpIDw8ICIgeT0iIDw8IHAueSgpOwor
ICAgIHJldHVybiB0czsgIAogfQogCiBzdGF0aWMgUVRleHRTdHJlYW0gJm9wZXJhdG9yPDwoUVRl
eHRTdHJlYW0gJnRzLCBLQ0JsZW5kTW9kZVR5cGUgdCkKQEAgLTI0NCwyMCArMjY3LDI2IEBAIHN0
YXRpYyBRVGV4dFN0cmVhbSAmb3BlcmF0b3I8PChRVGV4dFN0cmUKICAgICAgICAgY2FzZSBFTV9O
T05FOgogICAgICAgICAgICAgdHMgPDwgIk5PTkUiOyBicmVhazsKICAgICB9Ci0gICAgcmV0dXJu
IHRzOyAgICAKKyAgICByZXR1cm4gdHM7Cit9CisKK3N0YXRpYyBRVGV4dFN0cmVhbSAmb3BlcmF0
b3I8PChRVGV4dFN0cmVhbSAmdHMsIFFTaXplIHMpCit7ICAgCisgICAgdHMgPDwgIng9IiA8PCBz
LndpZHRoKCkgPDwgIiB5PSIgPDwgcy5oZWlnaHQoKTsgCisgICAgcmV0dXJuIHRzOwogfQogCiBR
VGV4dFN0cmVhbSAmS0NhbnZhc0ZFQ29udm9sdmVNYXRyaXg6OmV4dGVybmFsUmVwcmVzZW50YXRp
b24oUVRleHRTdHJlYW0gJnRzKSBjb25zdAogewogICAgIHRzIDw8ICJbdHlwZT1DT05WT0xWRS1N
QVRSSVhdICI7CiAgICAgS0NhbnZhc0ZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlv
bih0cyk7Ci0gICAgdHMgPDwgIiBbb3JkZXIgeD0gIiA8PCBtX29yZGVyWCA8PCAiIHk9IiA8PCBt
X29yZGVyWSA8PCAiXSIKKyAgICB0cyA8PCAiIFtvcmRlciAiIDw8IG1fa2VybmVsU2l6ZSA8PCAi
XSIKICAgICAgICAgPDwgIiBba2VybmVsIG1hdHJpeD0iIDw8IG1fa2VybmVsTWF0cml4ICA8PCAi
XSIKICAgICAgICAgPDwgIiBbZGl2aXNvcj0iIDw8IG1fZGl2aXNvciA8PCAiXSIKICAgICAgICAg
PDwgIiBbYmlhcz0iIDw8IG1fYmlhcyA8PCAiXSIKLSAgICAgICAgPDwgIiBbdGFyZ2V0IHg9ICIg
PDwgbV90YXJnZXRYIDw8ICIgeT0iIDw8IG1fdGFyZ2V0WSA8PCAiXSIKKyAgICAgICAgPDwgIiBb
dGFyZ2V0ICIgPDwgbV90YXJnZXRPZmZzZXQgPDwgIl0iCiAgICAgICAgIDw8ICIgW2VkZ2UgbW9k
ZT0iIDw8IG1fZWRnZU1vZGUgPDwgIl0iCi0gICAgICAgIDw8ICIgW2tlcm5lbCB1bml0IGxlbmd0
aCB4PSIgPDwgbV9rZXJuZWxVbml0TGVuZ3RoWCA8PCAiIHk9IiA8PCBtX2tlcm5lbFVuaXRMZW5n
dGhZIDw8ICJdIgorICAgICAgICA8PCAiIFtrZXJuZWwgdW5pdCBsZW5ndGggIiA8PCBtX2tlcm5l
bFVuaXRMZW5ndGggPDwgIl0iCiAgICAgICAgIDw8ICIgW3ByZXNlcnZlIGFscGhhPSIgPDwgbV9w
cmVzZXJ2ZUFscGhhIDw8ICJdIjsgICAgICAgIAogICAgcmV0dXJuIHRzOwogfQpAQCAtMjY4LDcg
KzI5Nyw3IEBAIFFUZXh0U3RyZWFtICZLQ2FudmFzRkVEaWZmdXNlTGlnaHRpbmc6OmUKICAgICBL
Q2FudmFzRmlsdGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzKTsKICAgICB0cyA8
PCAiIFtzdXJmYWNlIHNjYWxlPSIgPDwgbV9zdXJmYWNlU2NhbGUgPDwgIl0iCiAgICAgICAgIDw8
ICIgW2RpZmZ1c2UgY29uc3RhbnQ9IiA8PCBtX2RpZmZ1c2VDb25zdGFudCA8PCAiXSIKLSAgICAg
ICAgPDwgIiBba2VybmVsIHVuaXQgbGVuZ3RoIHg9IiA8PCBtX2tlcm5lbFVuaXRMZW5ndGhYIDw8
ICIgeT0iIDw8IG1fa2VybmVsVW5pdExlbmd0aFkgPDwgIl0iOworICAgICAgICA8PCAiIFtrZXJu
ZWwgdW5pdCBsZW5ndGggIiA8PCBtX2tlcm5lbFVuaXRMZW5ndGhYIDw8ICIsICIgPDwgbV9rZXJu
ZWxVbml0TGVuZ3RoWSA8PCAiXSI7CiAgICByZXR1cm4gdHM7CiB9CiAKSW5kZXg6IGtjYW52YXMv
S0NhbnZhc0ZpbHRlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9y
dC9rY2FudmFzL0tDYW52YXNGaWx0ZXJzLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTEKZGlm
ZiAtcCAtdSAtcjEuMTEga2NhbnZhcy9LQ2FudmFzRmlsdGVycy5oCi0tLSBrY2FudmFzL0tDYW52
YXNGaWx0ZXJzLmgJMjMgTm92IDIwMDUgMTU6MTQ6MDUgLTAwMDAJMS4xMQorKysga2NhbnZhcy9L
Q2FudmFzRmlsdGVycy5oCTI4IE5vdiAyMDA1IDEyOjU2OjEyIC0wMDAwCkBAIC01Myw2ICs1Myw1
NSBAQCB0eXBlZGVmIGVudW0KICNpbmNsdWRlIDxxY29sb3IuaD4KICNpbmNsdWRlIDxxc3RyaW5n
bGlzdC5oPgogCitjbGFzcyBLQ2FudmFzUG9pbnQzRiB7CitwdWJsaWM6CisgICAgS0NhbnZhc1Bv
aW50M0YoKSA6IG1feCgwKSwgbV95KDApLCBtX3ooMCkge30KKyAgICBLQ2FudmFzUG9pbnQzRihm
bG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB6KSA6IG1feCh4KSwgbV95KHkpLCBtX3ooeikge30KKyAg
ICBmbG9hdCB4KCkgY29uc3QgeyByZXR1cm4gbV94OyB9CisgICAgdm9pZCBzZXRYKGZsb2F0IHgp
IHsgbV94ID0geDsgfQorICAgIAorICAgIGZsb2F0IHkoKSBjb25zdCB7IHJldHVybiBtX3k7IH0K
KyAgICB2b2lkIHNldFkoZmxvYXQgeSkgeyBtX3kgPSB5OyB9CisgICAgCisgICAgZmxvYXQgeigp
IGNvbnN0IHsgcmV0dXJuIG1fejsgfQorICAgIHZvaWQgc2V0WihmbG9hdCB6KSB7IG1feiA9IHo7
IH0KKyAgICAKKyAgICB2b2lkIG5vcm1hbGl6ZSgpOworICAgIAorcHJpdmF0ZToKKyAgICBmbG9h
dCBtX3g7CisgICAgZmxvYXQgbV95OworICAgIGZsb2F0IG1fejsKK307CisKKy8vIFRlbXBvcmFy
eSBIQUNLCitjbGFzcyBRUG9pbnRGIHsKK3B1YmxpYzoKKyAgICBmbG9hdCB4KCkgY29uc3QgeyBy
ZXR1cm4gbV94OyB9CisgICAgdm9pZCBzZXRYKGZsb2F0IHgpIHsgbV94ID0geDsgfQorICAgIAor
ICAgIGZsb2F0IHkoKSBjb25zdCB7IHJldHVybiBtX3k7IH0KKyAgICB2b2lkIHNldFkoZmxvYXQg
eSkgeyBtX3kgPSB5OyB9CisgICAgCitwcml2YXRlOgorICAgIGZsb2F0IG1feDsKKyAgICBmbG9h
dCBtX3k7Cit9OworCisvLyBUZW1wb3JhcnkgSEFDSworY2xhc3MgUVNpemVGIHsKK3B1YmxpYzoK
KyAgICBmbG9hdCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fd2lkdGg7IH0KKyAgICB2b2lkIHNl
dFdpZHRoKGZsb2F0IHdpZHRoKSB7IG1fd2lkdGggPSB3aWR0aDsgfQorICAgIAorICAgIGZsb2F0
IGhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1faGVpZ2h0OyB9CisgICAgdm9pZCBzZXRIZWlnaHQo
ZmxvYXQgaGVpZ2h0KSB7IG1faGVpZ2h0ID0gaGVpZ2h0OyB9CisgICAgCitwcml2YXRlOgorICAg
IGZsb2F0IG1fd2lkdGg7CisgICAgZmxvYXQgbV9oZWlnaHQ7Cit9OworCiBjbGFzcyBLQ2FudmFz
RmlsdGVyRWZmZWN0OwogY2xhc3MgS1JlbmRlcmluZ0RldmljZTsKIApAQCAtMTMwLDUxICsxNzks
NiBAQCBwcml2YXRlOgogCiBRVGV4dFN0cmVhbSAmb3BlcmF0b3I8PChRVGV4dFN0cmVhbSAmLCBj
b25zdCBLQ2FudmFzRmlsdGVyRWZmZWN0ICYpOwogCi1jbGFzcyBLQ2FudmFzRkVEaXN0YW50TGln
aHQgOiBwdWJsaWMgS0NhbnZhc0ZpbHRlckVmZmVjdAotewotcHVibGljOgotICAgIGZsb2F0IGF6
aW11dGgoKSBjb25zdCB7IHJldHVybiBtX2F6aW11dGg7IH0KLSAgICB2b2lkIHNldEF6aW11dGgo
ZmxvYXQgYXppbXV0aCkgeyBtX2F6aW11dGggPSBhemltdXRoOyB9Ci0KLSAgICBmbG9hdCBlbGV2
YXRpb24oKSBjb25zdCB7IHJldHVybiBtX2VsZXZhdGlvbjsgfQotICAgIHZvaWQgc2V0RWxldmF0
aW9uKGZsb2F0IGVsZXZhdGlvbikgeyBtX2VsZXZhdGlvbiA9IGVsZXZhdGlvbjsgfQotICAgIAot
ICAgIC8vIEZJWE1FLCBtb3JlIGhlcmUuLi4KLSAgICAgUVRleHRTdHJlYW0gJmV4dGVybmFsUmVw
cmVzZW50YXRpb24oUVRleHRTdHJlYW0gJikgY29uc3Q7Ci1wcml2YXRlOgotICAgIGZsb2F0IG1f
YXppbXV0aDsKLSAgICBmbG9hdCBtX2VsZXZhdGlvbjsKLX07Ci0KLWNsYXNzIEtDYW52YXNGRVBv
aW50TGlnaHQgOiBwdWJsaWMgS0NhbnZhc0ZpbHRlckVmZmVjdAotewotcHVibGljOgotCi0gICAg
UVRleHRTdHJlYW0gJmV4dGVybmFsUmVwcmVzZW50YXRpb24oUVRleHRTdHJlYW0gJikgY29uc3Q7
Ci0KLXByaXZhdGU6Ci0gICAgZmxvYXQgbV94OwotICAgIGZsb2F0IG1feTsKLSAgICBmbG9hdCBt
X3o7Ci19OwotCi1jbGFzcyBLQ2FudmFzRkVTcG90TGlnaHQgOiBwdWJsaWMgS0NhbnZhc0ZpbHRl
ckVmZmVjdAotewotcHVibGljOgotCi0gICAgUVRleHRTdHJlYW0gJmV4dGVybmFsUmVwcmVzZW50
YXRpb24oUVRleHRTdHJlYW0gJikgY29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAgZmxvYXQgbV94Owot
ICAgIGZsb2F0IG1feTsKLSAgICBmbG9hdCBtX3o7Ci0gICAgZmxvYXQgbV9wb2ludHNBdFg7Ci0g
ICAgZmxvYXQgbV9wb2ludHNBdFk7Ci0gICAgZmxvYXQgbV9wb2ludHNBdFo7Ci0gICAgZmxvYXQg
bV9zcGVjdWxhckV4cG9uZW50OwotICAgIGZsb2F0IG1fbGltaXRpbmdDb25lQW5nbGU7Ci19Owot
CiB0eXBlZGVmIGVudW0gewogICAgIEJNX05PUk1BTCA9IDAsCiAgICAgQk1fTVVMVElQTFkgPSAx
LApAQCAtMzM1LDM0ICszMzksMTQ1IEBAIHR5cGVkZWYgZW51bSB7CiBjbGFzcyBLQ2FudmFzRkVD
b252b2x2ZU1hdHJpeCA6IHB1YmxpYyBLQ2FudmFzRmlsdGVyRWZmZWN0CiB7CiBwdWJsaWM6Cisg
ICAgUVNpemUga2VybmVsU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fa2VybmVsU2l6ZTsgfQorICAg
IHZvaWQgc2V0S2VybmVsU2l6ZShRU2l6ZSBrZXJuZWxTaXplKSB7IG1fa2VybmVsU2l6ZSA9IGtl
cm5lbFNpemU7IH0KKyAgICAKKyAgICBRM1ZhbHVlTGlzdDxmbG9hdD4ga2VybmVsKCkgY29uc3Qg
eyByZXR1cm4gbV9rZXJuZWxNYXRyaXg7IH0KKyAgICB2b2lkIHNldEtlcm5lbChRM1ZhbHVlTGlz
dDxmbG9hdD4ga2VybmVsKSB7IG1fa2VybmVsTWF0cml4ID0ga2VybmVsOyB9CisgICAgCisgICAg
ZmxvYXQgZGl2aXNvcigpIGNvbnN0IHsgcmV0dXJuIG1fZGl2aXNvcjsgfQorICAgIHZvaWQgc2V0
RGl2aXNvcihmbG9hdCBkaXZpc29yKSB7IG1fZGl2aXNvciA9IGRpdmlzb3I7IH0KKyAgICAKKyAg
ICBmbG9hdCBiaWFzKCkgY29uc3QgeyByZXR1cm4gbV9iaWFzOyB9CisgICAgdm9pZCBzZXRCaWFz
KGZsb2F0IGJpYXMpIHsgbV9iaWFzID0gYmlhczsgfQorICAgIAorICAgIFFTaXplIHRhcmdldE9m
ZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fdGFyZ2V0T2Zmc2V0OyB9CisgICAgdm9pZCBzZXRUYXJn
ZXRPZmZzZXQoUVNpemUgdGFyZ2V0T2Zmc2V0KSB7IG1fdGFyZ2V0T2Zmc2V0ID0gdGFyZ2V0T2Zm
c2V0OyB9CisgICAgCisgICAgS0NFZGdlTW9kZVR5cGUgZWRnZU1vZGUoKSBjb25zdCB7IHJldHVy
biBtX2VkZ2VNb2RlOyB9CisgICAgdm9pZCBzZXRFZGdlTW9kZShLQ0VkZ2VNb2RlVHlwZSBlZGdl
TW9kZSkgeyBtX2VkZ2VNb2RlID0gZWRnZU1vZGU7IH0KKyAgICAKKyAgICBRUG9pbnRGIGtlcm5l
bFVuaXRMZW5ndGgoKSBjb25zdCB7cmV0dXJuIG1fa2VybmVsVW5pdExlbmd0aDsgfQorICAgIHZv
aWQgc2V0S2VybmVsVW5pdExlbmd0aChRUG9pbnRGIGtlcm5lbFVuaXRMZW5ndGgpIHsgbV9rZXJu
ZWxVbml0TGVuZ3RoID0ga2VybmVsVW5pdExlbmd0aDsgfQorICAgIAorICAgIGJvb2wgcHJlc2Vy
dmVBbHBoYSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJlc2VydmVBbHBoYTsgfQorICAgIHZvaWQgc2V0
UHJlc2VydmVBbHBoYShib29sIHByZXNlcnZlQWxwaGEpIHsgbV9wcmVzZXJ2ZUFscGhhID0gcHJl
c2VydmVBbHBoYTsgfQogCiAgICAgUVRleHRTdHJlYW0gJmV4dGVybmFsUmVwcmVzZW50YXRpb24o
UVRleHRTdHJlYW0gJikgY29uc3Q7CiAKIHByaXZhdGU6Ci0gICAgaW50IG1fb3JkZXJYOwotICAg
IGludCBtX29yZGVyWTsKKyAgICBRU2l6ZSBtX2tlcm5lbFNpemU7CiAgICAgUTNWYWx1ZUxpc3Q8
ZmxvYXQ+IG1fa2VybmVsTWF0cml4OyAvLyBtYXliZSBzaG91bGQgYmUgYSByZWFsIG1hdHJpeD8K
ICAgICBmbG9hdCBtX2Rpdmlzb3I7CiAgICAgZmxvYXQgbV9iaWFzOwotICAgIGludCBtX3Rhcmdl
dFg7Ci0gICAgaW50IG1fdGFyZ2V0WTsKKyAgICBRU2l6ZSBtX3RhcmdldE9mZnNldDsKICAgICBL
Q0VkZ2VNb2RlVHlwZSBtX2VkZ2VNb2RlOwotICAgIGZsb2F0IG1fa2VybmVsVW5pdExlbmd0aFg7
Ci0gICAgZmxvYXQgbV9rZXJuZWxVbml0TGVuZ3RoWTsKKyAgICBRUG9pbnRGIG1fa2VybmVsVW5p
dExlbmd0aDsKICAgICBib29sIG1fcHJlc2VydmVBbHBoYTsKIH07CiAKK3R5cGVkZWYgZW51bXsK
KyAgICBMU19ESVNUQU5ULAorICAgIExTX1BPSU5ULAorICAgIExTX1NQT1QKK30gS0NMaWdodFR5
cGU7CisKKy8vVGhlIGxpZ2h0IHNvdXJjZSBmb3IgRGlmZnVzZS9TcGVjdWxhckxpZ2h0aW5nCitj
bGFzcyBLQ0xpZ2h0U291cmNlCit7CitwdWJsaWM6CisgICAgS0NMaWdodFNvdXJjZShLQ0xpZ2h0
VHlwZSBhX3R5cGUpOm1fdHlwZShhX3R5cGUpIHt9CisgICAgCisgICAgdmlydHVhbCB+S0NMaWdo
dFNvdXJjZSgpIHt9CisgICAgCisgICAgS0NMaWdodFR5cGUgdHlwZSgpIGNvbnN0IHsKKyAgICAg
ICAgcmV0dXJuIG1fdHlwZTsKKyAgICB9CisgICAgCisgICAgdmlydHVhbCBRVGV4dFN0cmVhbSAm
ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihRVGV4dFN0cmVhbSAmKSBjb25zdCA9IDA7CisgICAgCitw
cml2YXRlOgorICAgIEtDTGlnaHRUeXBlIG1fdHlwZTsKK307CisKK2NsYXNzIEtDRGlzdGFudExp
Z2h0U291cmNlIDogcHVibGljIEtDTGlnaHRTb3VyY2UKK3sKK3B1YmxpYzoKKyAgICBLQ0Rpc3Rh
bnRMaWdodFNvdXJjZShmbG9hdCBhemltdXRoLCBmbG9hdCBlbGV2YXRpb24pOgorICAgICAgICBL
Q0xpZ2h0U291cmNlKExTX0RJU1RBTlQpLCBtX2F6aW11dGgoYXppbXV0aCksIG1fZWxldmF0aW9u
KGVsZXZhdGlvbikge30KKyAgICAKKyAgICBmbG9hdCBhemltdXRoKCkgY29uc3R7IHJldHVybiBt
X2F6aW11dGg7IH0KKyAgICAKKyAgICBmbG9hdCBlbGV2YXRpb24oKSBjb25zdHsgcmV0dXJuIG1f
ZWxldmF0aW9uOyB9CisgICAgCisgICAgdmlydHVhbCBRVGV4dFN0cmVhbSAmZXh0ZXJuYWxSZXBy
ZXNlbnRhdGlvbihRVGV4dFN0cmVhbSAmKSBjb25zdDsKKyAgICAKK3ByaXZhdGU6CisgICAgZmxv
YXQgbV9hemltdXRoOworICAgIGZsb2F0IG1fZWxldmF0aW9uOworfTsKKworY2xhc3MgS0NQb2lu
dExpZ2h0U291cmNlIDogcHVibGljIEtDTGlnaHRTb3VyY2UKK3sKK3B1YmxpYzoKKyAgICBLQ1Bv
aW50TGlnaHRTb3VyY2UoS0NhbnZhc1BvaW50M0YgJiBwb3NpdGlvbik6S0NMaWdodFNvdXJjZShM
U19QT0lOVCksIG1fcG9zaXRpb24ocG9zaXRpb24pIHsgfQorICAgIAorICAgIGNvbnN0IEtDYW52
YXNQb2ludDNGICYgcG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX3Bvc2l0aW9uOyB9CisgICAg
CisgICAgdmlydHVhbCBRVGV4dFN0cmVhbSAmZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihRVGV4dFN0
cmVhbSAmKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBLQ2FudmFzUG9pbnQzRiBtX3Bvc2l0aW9u
OworfTsKKworY2xhc3MgS0NTcG90TGlnaHRTb3VyY2UgOiBwdWJsaWMgS0NMaWdodFNvdXJjZQor
eworcHVibGljOgorICAgIEtDU3BvdExpZ2h0U291cmNlKEtDYW52YXNQb2ludDNGICYgcG9zaXRp
b24sIEtDYW52YXNQb2ludDNGICYgZGlyZWN0aW9uLCAKKyAgICAgICAgZmxvYXQgc3BlY3VsYXJF
eHBvbmVudCwgZmxvYXQgbGltaXRpbmdDb25lQW5nbGUpOktDTGlnaHRTb3VyY2UoTFNfU1BPVCks
IAorICAgICAgICBtX3Bvc2l0aW9uKHBvc2l0aW9uKSwgbV9kaXJlY3Rpb24oZGlyZWN0aW9uKSwg
bV9zcGVjdWxhckV4cG9uZW50KHNwZWN1bGFyRXhwb25lbnQpLCBtX2xpbWl0aW5nQ29uZUFuZ2xl
KGxpbWl0aW5nQ29uZUFuZ2xlKSB7IH0KKyAgICBjb25zdCBLQ2FudmFzUG9pbnQzRiAmIHBvc2l0
aW9uKCkgY29uc3QgeyByZXR1cm4gbV9wb3NpdGlvbjsgfQorICAgIGNvbnN0IEtDYW52YXNQb2lu
dDNGICYgZGlyZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9kaXJlY3Rpb247IH0KKyAgICBmbG9h
dCBzcGVjdWxhckV4cG9uZW50KCkgY29uc3QgeyByZXR1cm4gbV9zcGVjdWxhckV4cG9uZW50OyB9
CisgICAgZmxvYXQgbGltaXRpbmdDb25lQW5nbGUoKSBjb25zdCB7IHJldHVybiBtX2xpbWl0aW5n
Q29uZUFuZ2xlOyB9ICAgIAorICAgIHZpcnR1YWwgUVRleHRTdHJlYW0gJmV4dGVybmFsUmVwcmVz
ZW50YXRpb24oUVRleHRTdHJlYW0gJikgY29uc3Q7Citwcml2YXRlOgorICAgIEtDYW52YXNQb2lu
dDNGIG1fcG9zaXRpb247CisgICAgS0NhbnZhc1BvaW50M0YgbV9kaXJlY3Rpb247CisgICAgZmxv
YXQgICAgICAgICAgbV9zcGVjdWxhckV4cG9uZW50OworICAgIGZsb2F0ICAgICAgICAgIG1fbGlt
aXRpbmdDb25lQW5nbGU7Cit9OworCiBjbGFzcyBLQ2FudmFzRkVEaWZmdXNlTGlnaHRpbmcgOiBw
dWJsaWMgS0NhbnZhc0ZpbHRlckVmZmVjdAogewogcHVibGljOgorICAgIFFDb2xvciBsaWdodGlu
Z0NvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9saWdodGluZ0NvbG9yOyB9CisgICAgdm9pZCBzZXRM
aWdodGluZ0NvbG9yKGNvbnN0IFFDb2xvciAmbGlnaHRpbmdDb2xvcikgeyBtX2xpZ2h0aW5nQ29s
b3IgPSBsaWdodGluZ0NvbG9yOyB9CiAKKyAgICBmbG9hdCBzdXJmYWNlU2NhbGUoKSBjb25zdCB7
IHJldHVybiBtX3N1cmZhY2VTY2FsZTsgfQorICAgIHZvaWQgc2V0U3VyZmFjZVNjYWxlKGZsb2F0
IHN1cmZhY2VTY2FsZSkgeyBtX3N1cmZhY2VTY2FsZSA9IHN1cmZhY2VTY2FsZTsgfQorICAgIAor
ICAgIGZsb2F0IGRpZmZ1c2VDb25zdGFudCgpIGNvbnN0IHsgcmV0dXJuIG1fZGlmZnVzZUNvbnN0
YW50OyB9CisgICAgdm9pZCBzZXREaWZmdXNlQ29uc3RhbnQoZmxvYXQgZGlmZnVzZUNvbnN0YW50
KSB7IG1fZGlmZnVzZUNvbnN0YW50ID0gZGlmZnVzZUNvbnN0YW50OyB9CisgICAgCisgICAgZmxv
YXQga2VybmVsVW5pdExlbmd0aFgoKSBjb25zdCB7IHJldHVybiBtX2tlcm5lbFVuaXRMZW5ndGhY
OyB9CisgICAgdm9pZCBzZXRLZXJuZWxVbml0TGVuZ3RoWChmbG9hdCBrZXJuZWxVbml0TGVuZ3Ro
WCkgeyBtX2tlcm5lbFVuaXRMZW5ndGhYID0ga2VybmVsVW5pdExlbmd0aFg7IH0KKyAgICAKKyAg
ICBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSgpIGNvbnN0IHsgcmV0dXJuIG1fa2VybmVsVW5pdExl
bmd0aFk7IH0KKyAgICB2b2lkIHNldEtlcm5lbFVuaXRMZW5ndGhZKGZsb2F0IGtlcm5lbFVuaXRM
ZW5ndGhZKSB7IG1fa2VybmVsVW5pdExlbmd0aFkgPSBrZXJuZWxVbml0TGVuZ3RoWTsgfQorCisg
ICAgY29uc3QgS0NMaWdodFNvdXJjZSAqIGxpZ2h0U291cmNlKCkgY29uc3QgeyByZXR1cm4gbV9s
aWdodFNvdXJjZTsgfQorICAgIHZvaWQgc2V0TGlnaHRTb3VyY2UoS0NMaWdodFNvdXJjZSAqIGxp
Z2h0U291cmNlKSB7IG1fbGlnaHRTb3VyY2UgPSBsaWdodFNvdXJjZTsgfQorICAgIAogICAgIFFU
ZXh0U3RyZWFtICZleHRlcm5hbFJlcHJlc2VudGF0aW9uKFFUZXh0U3RyZWFtICYpIGNvbnN0Owog
CiBwcml2YXRlOgorICAgIFFDb2xvciBtX2xpZ2h0aW5nQ29sb3I7CiAgICAgZmxvYXQgbV9zdXJm
YWNlU2NhbGU7CiAgICAgZmxvYXQgbV9kaWZmdXNlQ29uc3RhbnQ7CiAgICAgZmxvYXQgbV9rZXJu
ZWxVbml0TGVuZ3RoWDsKICAgICBmbG9hdCBtX2tlcm5lbFVuaXRMZW5ndGhZOworICAgIEtDTGln
aHRTb3VyY2UgKiBtX2xpZ2h0U291cmNlOwogfTsKIAogdHlwZWRlZiBlbnVtIHsKQEAgLTM5Myw3
ICs1MDgsNiBAQCBwdWJsaWM6CiAgICAgUUNvbG9yIGZsb29kQ29sb3IoKSBjb25zdCB7IHJldHVy
biBtX2Zsb29kQ29sb3I7IH0KICAgICB2b2lkIHNldEZsb29kQ29sb3IoY29uc3QgUUNvbG9yICZj
b2xvcikgeyBtX2Zsb29kQ29sb3IgPSBjb2xvcjsgfQogCi0KICAgICBmbG9hdCBmbG9vZE9wYWNp
dHkoKSBjb25zdCB7IHJldHVybiBtX2Zsb29kT3BhY2l0eTsgfQogICAgIHZvaWQgc2V0Rmxvb2RP
cGFjaXR5KGZsb2F0IGZsb29kT3BhY2l0eSkgeyBtX2Zsb29kT3BhY2l0eSA9IGZsb29kT3BhY2l0
eTsgfQogCkBAIC00OTQsMTMgKzYwOCwzNyBAQCBwcml2YXRlOgogY2xhc3MgS0NhbnZhc0ZFU3Bl
Y3VsYXJMaWdodGluZyA6IHB1YmxpYyBLQ2FudmFzRmlsdGVyRWZmZWN0CiB7CiBwdWJsaWM6Cisg
ICAgUUNvbG9yIGxpZ2h0aW5nQ29sb3IoKSBjb25zdCB7IHJldHVybiBtX2xpZ2h0aW5nQ29sb3I7
IH0KKyAgICB2b2lkIHNldExpZ2h0aW5nQ29sb3IoY29uc3QgUUNvbG9yICZsaWdodGluZ0NvbG9y
KSB7IG1fbGlnaHRpbmdDb2xvciA9IGxpZ2h0aW5nQ29sb3I7IH0KIAorICAgIGZsb2F0IHN1cmZh
Y2VTY2FsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3VyZmFjZVNjYWxlOyB9CisgICAgdm9pZCBzZXRT
dXJmYWNlU2NhbGUoZmxvYXQgc3VyZmFjZVNjYWxlKSB7IG1fc3VyZmFjZVNjYWxlID0gc3VyZmFj
ZVNjYWxlOyB9CisgICAgCisgICAgZmxvYXQgc3BlY3VsYXJDb25zdGFudCgpIGNvbnN0IHsgcmV0
dXJuIG1fc3BlY3VsYXJDb25zdGFudDsgfQorICAgIHZvaWQgc2V0U3BlY3VsYXJDb25zdGFudChm
bG9hdCBzcGVjdWxhckNvbnN0YW50KSB7IG1fc3BlY3VsYXJDb25zdGFudCA9IHNwZWN1bGFyQ29u
c3RhbnQ7IH0KKyAgICAKKyAgICBmbG9hdCBzcGVjdWxhckV4cG9uZW50KCkgY29uc3QgeyByZXR1
cm4gbV9zcGVjdWxhckV4cG9uZW50OyB9CisgICAgdm9pZCBzZXRTcGVjdWxhckV4cG9uZW50KGZs
b2F0IHNwZWN1bGFyRXhwb25lbnQpIHsgbV9zcGVjdWxhckV4cG9uZW50ID0gc3BlY3VsYXJFeHBv
bmVudDsgfQorICAgIAorICAgIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhYKCkgY29uc3QgeyByZXR1
cm4gbV9rZXJuZWxVbml0TGVuZ3RoWDsgfQorICAgIHZvaWQgc2V0S2VybmVsVW5pdExlbmd0aFgo
ZmxvYXQga2VybmVsVW5pdExlbmd0aFgpIHsgbV9rZXJuZWxVbml0TGVuZ3RoWCA9IGtlcm5lbFVu
aXRMZW5ndGhYOyB9CisgICAgCisgICAgZmxvYXQga2VybmVsVW5pdExlbmd0aFkoKSBjb25zdCB7
IHJldHVybiBtX2tlcm5lbFVuaXRMZW5ndGhZOyB9CisgICAgdm9pZCBzZXRLZXJuZWxVbml0TGVu
Z3RoWShmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSkgeyBtX2tlcm5lbFVuaXRMZW5ndGhZID0ga2Vy
bmVsVW5pdExlbmd0aFk7IH0KKyAgICAKKyAgICBjb25zdCBLQ0xpZ2h0U291cmNlICogbGlnaHRT
b3VyY2UoKSBjb25zdCB7IHJldHVybiBtX2xpZ2h0U291cmNlOyB9CisgICAgdm9pZCBzZXRMaWdo
dFNvdXJjZShLQ0xpZ2h0U291cmNlICogbGlnaHRTb3VyY2UpIHsgbV9saWdodFNvdXJjZSA9IGxp
Z2h0U291cmNlOyB9CisgICAgCiAgICAgUVRleHRTdHJlYW0gJmV4dGVybmFsUmVwcmVzZW50YXRp
b24oUVRleHRTdHJlYW0gJikgY29uc3Q7CiAgICAgCiBwcml2YXRlOgorICAgIFFDb2xvciBtX2xp
Z2h0aW5nQ29sb3I7CiAgICAgZmxvYXQgbV9zdXJmYWNlU2NhbGU7CiAgICAgZmxvYXQgbV9zcGVj
dWxhckNvbnN0YW50OwogICAgIGZsb2F0IG1fc3BlY3VsYXJFeHBvbmVudDsKKyAgICBmbG9hdCBt
X2tlcm5lbFVuaXRMZW5ndGhYOworICAgIGZsb2F0IG1fa2VybmVsVW5pdExlbmd0aFk7CisgICAg
S0NMaWdodFNvdXJjZSAqIG1fbGlnaHRTb3VyY2U7CiB9OwogCiBjbGFzcyBLQ2FudmFzRkVUaWxl
IDogcHVibGljIEtDYW52YXNGaWx0ZXJFZmZlY3Qge307CkluZGV4OiBrY2FudmFzL0tDYW52YXNU
cmVlRGVidWcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tj
YW52YXMvS0NhbnZhc1RyZWVEZWJ1Zy5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTAKZGlm
ZiAtcCAtdSAtcjEuMTAga2NhbnZhcy9LQ2FudmFzVHJlZURlYnVnLmNwcAotLS0ga2NhbnZhcy9L
Q2FudmFzVHJlZURlYnVnLmNwcAkyNyBOb3YgMjAwNSAxMTowMjoxNSAtMDAwMAkxLjEwCisrKyBr
Y2FudmFzL0tDYW52YXNUcmVlRGVidWcuY3BwCTI4IE5vdiAyMDA1IDEyOjU2OjEyIC0wMDAwCkBA
IC01Myw3ICs1Myw3IEBACiAKICNpbmNsdWRlIDxrZG9tL0RPTVN0cmluZy5oPgogI2luY2x1ZGUg
ImRvbV9hdG9taWNzdHJpbmcuaCIKLSNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJo
dG1sbmFtZXMuaCIKIAogI2luY2x1ZGUgPHF0ZXh0c3RyZWFtLmg+CiAKSW5kZXg6IGtjYW52YXMv
ZGV2aWNlL3F1YXJ0ei9LQ2FudmFzRmlsdGVyUXVhcnR6LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTog
L2N2cy9yb290L1NWR1N1cHBvcnQva2NhbnZhcy9kZXZpY2UvcXVhcnR6L0tDYW52YXNGaWx0ZXJR
dWFydHouaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS43CmRpZmYgLXAgLXUgLXIxLjcga2NhbnZh
cy9kZXZpY2UvcXVhcnR6L0tDYW52YXNGaWx0ZXJRdWFydHouaAotLS0ga2NhbnZhcy9kZXZpY2Uv
cXVhcnR6L0tDYW52YXNGaWx0ZXJRdWFydHouaAkyMyBOb3YgMjAwNSAxNToxNDowNyAtMDAwMAkx
LjcKKysrIGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9LQ2FudmFzRmlsdGVyUXVhcnR6LmgJMjggTm92
IDIwMDUgMTI6NTY6MTIgLTAwMDAKQEAgLTc1LDExICs3NSwyMSBAQCBwdWJsaWM6CiAvLyAgICB2
aXJ0dWFsIENJRmlsdGVyICpnZXRDSUZpbHRlcihLQ2FudmFzRmlsdGVyUXVhcnR6ICpxdWFydHpG
aWx0ZXIpIGNvbnN0OwogLy99OwogCitjbGFzcyBLQ2FudmFzRkVDb252b2x2ZU1hdHJpeFF1YXJ0
eiA6IHB1YmxpYyBLQ2FudmFzRkVDb252b2x2ZU1hdHJpeCB7CitwdWJsaWM6CisgICAgdmlydHVh
bCBDSUZpbHRlciAqZ2V0Q0lGaWx0ZXIoS0NhbnZhc0ZpbHRlclF1YXJ0eiAqcXVhcnR6RmlsdGVy
KSBjb25zdDsKK307CisKIGNsYXNzIEtDYW52YXNGRUNvbXBvc2l0ZVF1YXJ0eiA6IHB1YmxpYyBL
Q2FudmFzRkVDb21wb3NpdGUgewogcHVibGljOgogICAgIHZpcnR1YWwgQ0lGaWx0ZXIgKmdldENJ
RmlsdGVyKEtDYW52YXNGaWx0ZXJRdWFydHogKnF1YXJ0ekZpbHRlcikgY29uc3Q7CiB9OwogCitj
bGFzcyBLQ2FudmFzRkVEaWZmdXNlTGlnaHRpbmdRdWFydHogOiBwdWJsaWMgS0NhbnZhc0ZFRGlm
ZnVzZUxpZ2h0aW5nIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIENJRmlsdGVyICpnZXRDSUZpbHRl
cihLQ2FudmFzRmlsdGVyUXVhcnR6ICpxdWFydHpGaWx0ZXIpIGNvbnN0OworfTsKKwogY2xhc3Mg
S0NhbnZhc0ZFRmxvb2RRdWFydHogOiBwdWJsaWMgS0NhbnZhc0ZFRmxvb2QgewogcHVibGljOgog
ICAgIHZpcnR1YWwgQ0lGaWx0ZXIgKmdldENJRmlsdGVyKEtDYW52YXNGaWx0ZXJRdWFydHogKnF1
YXJ0ekZpbHRlcikgY29uc3Q7CkBAIC0xMDUsNiArMTE1LDExIEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIENJRmlsdGVyICpnZXRDSUZpbHRlcihLQ2FudmFzRmlsdGVyUXVhcnR6ICpxdWFydHpGaWx0
ZXIpIGNvbnN0OwogfTsKIAorY2xhc3MgS0NhbnZhc0ZFU3BlY3VsYXJMaWdodGluZ1F1YXJ0eiA6
IHB1YmxpYyBLQ2FudmFzRkVTcGVjdWxhckxpZ2h0aW5nIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFs
IENJRmlsdGVyICpnZXRDSUZpbHRlcihLQ2FudmFzRmlsdGVyUXVhcnR6ICpxdWFydHpGaWx0ZXIp
IGNvbnN0OworfTsKKwogY2xhc3MgS0NhbnZhc0ZFVGlsZVF1YXJ0eiA6IHB1YmxpYyBLQ2FudmFz
RkVUaWxlIHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIENJRmlsdGVyICpnZXRDSUZpbHRlcihLQ2Fu
dmFzRmlsdGVyUXVhcnR6ICpxdWFydHpGaWx0ZXIpIGNvbnN0OwpJbmRleDoga2NhbnZhcy9kZXZp
Y2UvcXVhcnR6L0tDYW52YXNGaWx0ZXJRdWFydHoubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2
cy9yb290L1NWR1N1cHBvcnQva2NhbnZhcy9kZXZpY2UvcXVhcnR6L0tDYW52YXNGaWx0ZXJRdWFy
dHoubW0sdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTYKZGlmZiAtcCAtdSAtcjEuMTYga2NhbnZh
cy9kZXZpY2UvcXVhcnR6L0tDYW52YXNGaWx0ZXJRdWFydHoubW0KLS0tIGtjYW52YXMvZGV2aWNl
L3F1YXJ0ei9LQ2FudmFzRmlsdGVyUXVhcnR6Lm1tCTI3IE5vdiAyMDA1IDExOjAyOjE2IC0wMDAw
CTEuMTYKKysrIGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9LQ2FudmFzRmlsdGVyUXVhcnR6Lm1tCTI4
IE5vdiAyMDA1IDEyOjU2OjEzIC0wMDAwCkBAIC0zMSw2ICszMSwxMyBAQAogI2ltcG9ydCAiS1Jl
bmRlcmluZ0RldmljZVF1YXJ0ei5oIgogI2ltcG9ydCAiUXVhcnR6U3VwcG9ydC5oIgogI2ltcG9y
dCAiS1dRRXhjZXB0aW9ucy5oIgorI2ltcG9ydCAiV0tEaWZmdXNlTGlnaHRpbmdGaWx0ZXIuaCIK
KyNpbXBvcnQgIldLU3BlY3VsYXJMaWdodGluZ0ZpbHRlci5oIgorI2ltcG9ydCAiV0tTcG90TGln
aHRGaWx0ZXIuaCIKKyNpbXBvcnQgIldLUG9pbnRMaWdodEZpbHRlci5oIgorI2ltcG9ydCAiV0tE
aXN0YW50TGlnaHRGaWx0ZXIuaCIKKyNpbXBvcnQgIldLTm9ybWFsTWFwRmlsdGVyLmgiCisjaW1w
b3J0ICJXS0FyaXRobWV0aWNGaWx0ZXIuaCIKIAogI2ltcG9ydCA8UXVhcnR6Q29yZS9RdWFydHpD
b3JlLmg+CiAKQEAgLTQwLDEzICs0NywyMiBAQAogCiBzdGF0aWMgUVN0cmluZyBLQ1ByZXZpb3Vz
RmlsdGVyT3V0cHV0TmFtZSA9IFFTdHJpbmc6OmZyb21MYXRpbjEoIl9fcHJldmlvdXNPdXRwdXRf
XyIpOwogCi0vL3N0YXRpYyBDSUNvbG9yICpjaUNvbG9yKGNvbnN0IFFDb2xvciAmYykKLS8vewot
Ly8gICAgQ0dDb2xvclJlZiBjb2xvckNHID0gY2dDb2xvcihjKTsKLS8vICAgIENJQ29sb3IgKmNv
bG9yQ0kgPSBbQ0lDb2xvciBjb2xvcldpdGhDR0NvbG9yOmNvbG9yQ0ddOwotLy8gICAgQ0dDb2xv
clJlbGVhc2UoY29sb3JDRyk7Ci0vLyAgICByZXR1cm4gY29sb3JDSTsKLS8vfQorc3RhdGljIGlu
bGluZSBDSUNvbG9yICpjaUNvbG9yKGNvbnN0IFFDb2xvciAmYykKK3sKKyAgICBDR0NvbG9yUmVm
IGNvbG9yQ0cgPSBjZ0NvbG9yKGMpOworICAgIENJQ29sb3IgKmNvbG9yQ0kgPSBbQ0lDb2xvciBj
b2xvcldpdGhDR0NvbG9yOmNvbG9yQ0ddOworICAgIENHQ29sb3JSZWxlYXNlKGNvbG9yQ0cpOwor
ICAgIHJldHVybiBjb2xvckNJOworfQorCitzdGF0aWMgaW5saW5lIENJVmVjdG9yICpjaVZlY3Rv
cihLQ2FudmFzUG9pbnQzRiBwb2ludCkgeworICAgIHJldHVybiBbQ0lWZWN0b3IgdmVjdG9yV2l0
aFg6cG9pbnQueCgpIFk6cG9pbnQueSgpIFo6cG9pbnQueigpXTsKK30KKworc3RhdGljIGlubGlu
ZSBDSVZlY3RvciAqY2lWZWN0b3IoUVBvaW50RiBwb2ludCkgeworICAgIHJldHVybiBbQ0lWZWN0
b3IgdmVjdG9yV2l0aFg6cG9pbnQueCgpIFk6cG9pbnQueSgpXTsKK30KKwogCiBLQ2FudmFzRmls
dGVyUXVhcnR6OjpLQ2FudmFzRmlsdGVyUXVhcnR6KCkgOiBtX2ZpbHRlckNJQ29udGV4dCgwKSwg
bV9maWx0ZXJDR0xheWVyKDApLCBtX2ltYWdlc0J5TmFtZSgwKQogewpAQCAtMjI0LDcgKzI0MCw2
IEBAIENJSW1hZ2UgKktDYW52YXNGaWx0ZXJRdWFydHo6OmlucHV0SW1hZ2UKICNwcmFnbWEgbWFy
ayAtCiAjcHJhZ21hIG1hcmsgRmlsdGVyIEVsZW1lbnRzCiAKLQogI2RlZmluZSBGRV9RVUFSVFpf
U0VUVVBfSU5QVVQobmFtZSkgXAogICAgIENJSW1hZ2UgKmlucHV0SW1hZ2UgPSBxdWFydHpGaWx0
ZXItPmlucHV0SW1hZ2UodGhpcyk7IFwKICAgICBGRV9RVUFSVFpfQ0hFQ0tfSU5QVVQoaW5wdXRJ
bWFnZSkgXApAQCAtNDIxLDI0ICs0MzYsMjUgQEAgQ0lGaWx0ZXIgKktDYW52YXNGRUNvbXBvc2l0
ZVF1YXJ0ejo6Z2V0QwogCUtXUV9CTE9DS19FWENFUFRJT05TCiAJc3dpdGNoKG9wZXJhdGlvbigp
KSB7CiAJY2FzZSBDT19PVkVSOgotCQlmaWx0ZXIgPSBbQ0lGaWx0ZXIgZmlsdGVyV2l0aE5hbWU6
QCJDSVNvdXJjZU92ZXJDb21wb3NpdGluZyJdOwotCQlicmVhazsKKyAgICAgICAgICAgIGZpbHRl
ciA9IFtDSUZpbHRlciBmaWx0ZXJXaXRoTmFtZTpAIkNJU291cmNlT3ZlckNvbXBvc2l0aW5nIl07
CisgICAgICAgICAgICBicmVhazsKIAljYXNlIENPX0lOOgotCQlmaWx0ZXIgPSBbQ0lGaWx0ZXIg
ZmlsdGVyV2l0aE5hbWU6QCJDSVNvdXJjZUluQ29tcG9zaXRpbmciXTsKLQkJYnJlYWs7CisgICAg
ICAgICAgICBmaWx0ZXIgPSBbQ0lGaWx0ZXIgZmlsdGVyV2l0aE5hbWU6QCJDSVNvdXJjZUluQ29t
cG9zaXRpbmciXTsKKyAgICAgICAgICAgIGJyZWFrOwogCWNhc2UgQ09fT1VUOgotCQlmaWx0ZXIg
PSBbQ0lGaWx0ZXIgZmlsdGVyV2l0aE5hbWU6QCJDSVNvdXJjZU91dENvbXBvc2l0aW5nIl07Ci0J
CWJyZWFrOworICAgICAgICAgICAgZmlsdGVyID0gW0NJRmlsdGVyIGZpbHRlcldpdGhOYW1lOkAi
Q0lTb3VyY2VPdXRDb21wb3NpdGluZyJdOworICAgICAgICAgICAgYnJlYWs7CiAJY2FzZSBDT19B
VE9QOgotCQlmaWx0ZXIgPSBbQ0lGaWx0ZXIgZmlsdGVyV2l0aE5hbWU6QCJDSVNvdXJjZUF0b3BD
b21wb3NpdGluZyJdOwotCQlicmVhazsKKyAgICAgICAgICAgIGZpbHRlciA9IFtDSUZpbHRlciBm
aWx0ZXJXaXRoTmFtZTpAIkNJU291cmNlQXRvcENvbXBvc2l0aW5nIl07CisgICAgICAgICAgICBi
cmVhazsKIAljYXNlIENPX1hPUjoKLQkJLy9GSVhNRTogSSdtIG5vdCBzdXJlIHRoaXMgaXMgcmln
aHQuLi4KLQkJZmlsdGVyID0gW0NJRmlsdGVyIGZpbHRlcldpdGhOYW1lOkAiQ0lFeGNsdXNpb25C
bGVuZE1vZGUiXTsKKyAgICAgICAgICAgIC8vRklYTUU6IEknbSBub3Qgc3VyZSB0aGlzIGlzIHJp
Z2h0Li4uCisgICAgICAgICAgICBmaWx0ZXIgPSBbQ0lGaWx0ZXIgZmlsdGVyV2l0aE5hbWU6QCJD
SUV4Y2x1c2lvbkJsZW5kTW9kZSJdOworICAgICAgICAgICAgYnJlYWs7CiAJY2FzZSBDT19BUklU
SE1FVElDOgotCQlOU0xvZyhAIldhcm5pbmc6IGFyaXRobWV0aWMgY29tcG9zaXRpbmcgbW9kZSBu
b3QgeWV0IHN1cHBvcnRlZCBpbiBRdWFydHouIik7Ci0JCS8vIHRoaXMgd291bGQgYmUgd2hlcmUg
d2UgdXNlIHRoZSBrIHZhbHVlcy4uLgotCQlyZXR1cm4gbmlsOworICAgICAgICAgICAgW1dLQXJp
dGhtZXRpY0ZpbHRlciBjbGFzc107CisgICAgICAgICAgICBmaWx0ZXIgPSBbQ0lGaWx0ZXIgZmls
dGVyV2l0aE5hbWU6QCJXS0FyaXRobWV0aWNGaWx0ZXIiXTsKKyAgICAgICAgICAgIGJyZWFrOwog
CX0KIAkKIAlbZmlsdGVyIHNldERlZmF1bHRzXTsKQEAgLTQ0OCwxMCArNDY0LDE0MSBAQCBDSUZp
bHRlciAqS0NhbnZhc0ZFQ29tcG9zaXRlUXVhcnR6OjpnZXRDCiAJRkVfUVVBUlRaX0NIRUNLX0lO
UFVUKGJhY2tncm91bmRJbWFnZSk7CiAJW2ZpbHRlciBzZXRWYWx1ZTppbnB1dEltYWdlIGZvcktl
eTpAImlucHV0SW1hZ2UiXTsKIAlbZmlsdGVyIHNldFZhbHVlOmJhY2tncm91bmRJbWFnZSBmb3JL
ZXk6QCJpbnB1dEJhY2tncm91bmRJbWFnZSJdOwotCQorCS8vRklYTUU6IHRoaXMgc2VlbXMgdWds
eQorCWlmIChvcGVyYXRpb24oKSA9PSBDT19BUklUSE1FVElDKSB7CisgICAgICAgICAgICBbZmls
dGVyIHNldFZhbHVlOltOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6azEoKV0gZm9yS2V5OkAiaW5w
dXRLMSJdOworICAgICAgICAgICAgW2ZpbHRlciBzZXRWYWx1ZTpbTlNOdW1iZXIgbnVtYmVyV2l0
aEZsb2F0OmsyKCldIGZvcktleTpAImlucHV0SzIiXTsKKyAgICAgICAgICAgIFtmaWx0ZXIgc2V0
VmFsdWU6W05TTnVtYmVyIG51bWJlcldpdGhGbG9hdDprMygpXSBmb3JLZXk6QCJpbnB1dEszIl07
CisgICAgICAgICAgICBbZmlsdGVyIHNldFZhbHVlOltOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6
azQoKV0gZm9yS2V5OkAiaW5wdXRLNCJdOworICAgICAgICB9CiAJRkVfUVVBUlRaX09VVFBVVF9S
RVRVUk47CiB9CiAKK3N0YXRpYyBpbmxpbmUgQ0lGaWx0ZXIgKmdldFBvaW50TGlnaHRWZWN0b3Jz
KENJRmlsdGVyICogbm9ybWFscywgQ0lWZWN0b3IgKiBsaWdodFBvc2l0aW9uLCBmbG9hdCBzdXJm
YWNlU2NhbGUpCit7CisgICAgQ0lGaWx0ZXIgKmZpbHRlciA9IG5pbDsKKyAgICBLV1FfQkxPQ0tf
RVhDRVBUSU9OUworICAgIGZpbHRlciA9IFtDSUZpbHRlciBmaWx0ZXJXaXRoTmFtZTpAIldLUG9p
bnRMaWdodCJdOworICAgIGlmICghZmlsdGVyKQorICAgICAgICByZXR1cm4gbmlsOworICAgIFtm
aWx0ZXIgc2V0RGVmYXVsdHNdOworICAgIFtmaWx0ZXIgc2V0VmFsdWU6W25vcm1hbHMgdmFsdWVG
b3JLZXk6QCJvdXRwdXRJbWFnZSJdIGZvcktleTpAImlucHV0Tm9ybWFsTWFwIl07CisgICAgW2Zp
bHRlciBzZXRWYWx1ZTpsaWdodFBvc2l0aW9uIGZvcktleTpAImlucHV0TGlnaHRQb3NpdGlvbiJd
OyAgICAKKyAgICBbZmlsdGVyIHNldFZhbHVlOltOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6c3Vy
ZmFjZVNjYWxlXSBmb3JLZXk6QCJpbnB1dFN1cmZhY2VTY2FsZSJdOworICAgIHJldHVybiBmaWx0
ZXI7IAorICAgIEtXUV9VTkJMT0NLX0VYQ0VQVElPTlMgCisgICAgcmV0dXJuIG5pbDsKK30KK3N0
YXRpYyBDSUZpbHRlciAqZ2V0TGlnaHRWZWN0b3JzKENJRmlsdGVyICogbm9ybWFscywgY29uc3Qg
S0NMaWdodFNvdXJjZSAqIGxpZ2h0LCBmbG9hdCBzdXJmYWNlU2NhbGUpCit7CisgICAgLy9GSVhN
RTogdGhlcmUgaGFzIHRvIGJlIGEgYmV0dGVyIHdheSBvZiBtYWtpbmcgc3VyZSB0aGVzZSBnZXQg
aW5pdGlhbGlzZWQKKyAgICBbV0tEaXN0YW50TGlnaHRGaWx0ZXIgY2xhc3NdOworICAgIFtXS1Bv
aW50TGlnaHRGaWx0ZXIgY2xhc3NdOworICAgIFtXS1Nwb3RMaWdodEZpbHRlciBjbGFzc107Cisg
ICAgCisgICAgQ0lGaWx0ZXIgKmZpbHRlciA9IG5pbDsKKyAgICBLV1FfQkxPQ0tfRVhDRVBUSU9O
UworICAgIAorICAgIHN3aXRjaCAobGlnaHQtPnR5cGUoKSkgeworICAgICAgICBjYXNlIExTX0RJ
U1RBTlQ6CisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IEtDRGlzdGFudExpZ2h0U291cmNl
ICpkbGlnaHQgPSBzdGF0aWNfY2FzdDxjb25zdCBLQ0Rpc3RhbnRMaWdodFNvdXJjZSAqPihsaWdo
dCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZpbHRlciA9IFtDSUZpbHRlciBmaWx0ZXJX
aXRoTmFtZTpAIldLRGlzdGFudExpZ2h0Il07CisgICAgICAgICAgICBpZiAoIWZpbHRlcikKKyAg
ICAgICAgICAgICAgICByZXR1cm4gbmlsOworICAgICAgICAgICAgW2ZpbHRlciBzZXREZWZhdWx0
c107CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZsb2F0IGF6aW11dGggPSBkbGlnaHQtPmF6
aW11dGgoKTsKKyAgICAgICAgICAgIGZsb2F0IGVsZXZhdGlvbiA9IGRsaWdodC0+ZWxldmF0aW9u
KCk7CisgICAgICAgICAgICBhemltdXRoPWRlZzJyYWQoYXppbXV0aCk7CisgICAgICAgICAgICBl
bGV2YXRpb249ZGVnMnJhZChlbGV2YXRpb24pOworICAgICAgICAgICAgZmxvYXQgTHggPSBjb3Mo
YXppbXV0aCkqY29zKGVsZXZhdGlvbik7CisgICAgICAgICAgICBmbG9hdCBMeSA9IHNpbihhemlt
dXRoKSpjb3MoZWxldmF0aW9uKTsKKyAgICAgICAgICAgIGZsb2F0IEx6ID0gc2luKGVsZXZhdGlv
bik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFtmaWx0ZXIgc2V0VmFsdWU6W25vcm1hbHMg
dmFsdWVGb3JLZXk6QCJvdXRwdXRJbWFnZSJdIGZvcktleTpAImlucHV0Tm9ybWFsTWFwIl07Cisg
ICAgICAgICAgICBbZmlsdGVyIHNldFZhbHVlOltDSVZlY3RvciB2ZWN0b3JXaXRoWDpMeCBZOkx5
IFo6THpdIGZvcktleTpAImlucHV0TGlnaHREaXJlY3Rpb24iXTsKKyAgICAgICAgICAgIHJldHVy
biBmaWx0ZXI7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBMU19QT0lOVDoKKyAgICAgICAgewor
ICAgICAgICAgICAgY29uc3QgS0NQb2ludExpZ2h0U291cmNlICpwbGlnaHQgPSBzdGF0aWNfY2Fz
dDxjb25zdCBLQ1BvaW50TGlnaHRTb3VyY2UgKj4obGlnaHQpOworICAgICAgICAgICAgcmV0dXJu
IGdldFBvaW50TGlnaHRWZWN0b3JzKG5vcm1hbHMsIFtDSVZlY3RvciB2ZWN0b3JXaXRoWDpwbGln
aHQtPnBvc2l0aW9uKCkueCgpIFk6cGxpZ2h0LT5wb3NpdGlvbigpLnkoKSBaOnBsaWdodC0+cG9z
aXRpb24oKS56KCldLCBzdXJmYWNlU2NhbGUpOworICAgICAgICB9CisgICAgICAgIGNhc2UgTFNf
U1BPVDoKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgS0NTcG90TGlnaHRTb3VyY2UgKnNs
aWdodCA9IHN0YXRpY19jYXN0PGNvbnN0IEtDU3BvdExpZ2h0U291cmNlICo+KGxpZ2h0KTsKKyAg
ICAgICAgICAgIGZpbHRlciA9IFtDSUZpbHRlciBmaWx0ZXJXaXRoTmFtZTpAIldLU3BvdExpZ2h0
Il07CisgICAgICAgICAgICBpZiAoIWZpbHRlcikKKyAgICAgICAgICAgICAgICByZXR1cm4gbmls
OworICAgICAgICAgICAgCisgICAgICAgICAgICBDSUZpbHRlciAqIHBvaW50TGlnaHRGaWx0ZXIg
PSBnZXRQb2ludExpZ2h0VmVjdG9ycyhub3JtYWxzLCBbQ0lWZWN0b3IgdmVjdG9yV2l0aFg6c2xp
Z2h0LT5wb3NpdGlvbigpLngoKSBZOnNsaWdodC0+cG9zaXRpb24oKS55KCkgWjpzbGlnaHQtPnBv
c2l0aW9uKCkueigpXSwgc3VyZmFjZVNjYWxlKTsKKyAgICAgICAgICAgIGlmICghcG9pbnRMaWdo
dEZpbHRlcikKKyAgICAgICAgICAgICAgICByZXR1cm4gbmlsOworICAgICAgICAgICAgW2ZpbHRl
ciBzZXREZWZhdWx0c107CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFtmaWx0ZXIgc2V0VmFs
dWU6W3BvaW50TGlnaHRGaWx0ZXIgdmFsdWVGb3JLZXk6QCJvdXRwdXRJbWFnZSJdIGZvcktleTpA
ImlucHV0TGlnaHRWZWN0b3JzIl07CisgICAgICAgICAgICBbZmlsdGVyIHNldFZhbHVlOltDSVZl
Y3RvciB2ZWN0b3JXaXRoWDpzbGlnaHQtPmRpcmVjdGlvbigpLngoKSBZOnNsaWdodC0+ZGlyZWN0
aW9uKCkueSgpIFo6c2xpZ2h0LT5kaXJlY3Rpb24oKS56KCldIGZvcktleTpAImlucHV0TGlnaHRE
aXJlY3Rpb24iXTsKKyAgICAgICAgICAgIFtmaWx0ZXIgc2V0VmFsdWU6W05TTnVtYmVyIG51bWJl
cldpdGhGbG9hdDpzbGlnaHQtPnNwZWN1bGFyRXhwb25lbnQoKV0gZm9yS2V5OkAiaW5wdXRTcGVj
dWxhckV4cG9uZW50Il07CisgICAgICAgICAgICBbZmlsdGVyIHNldFZhbHVlOltOU051bWJlciBu
dW1iZXJXaXRoRmxvYXQ6ZGVnMnJhZChzbGlnaHQtPmxpbWl0aW5nQ29uZUFuZ2xlKCkpXSBmb3JL
ZXk6QCJpbnB1dExpbWl0aW5nQ29uZUFuZ2xlIl07CisgICAgICAgICAgICByZXR1cm4gZmlsdGVy
OworICAgICAgICB9CisgICAgfQorICAgIEtXUV9VTkJMT0NLX0VYQ0VQVElPTlMgCisgICAgcmV0
dXJuIG5pbDsKK30KKworCitzdGF0aWMgQ0lGaWx0ZXIgKmdldE5vcm1hbE1hcChDSUltYWdlICpi
dW1wTWFwLCBmbG9hdCBzY2FsZSkKK3sKKyAgICBbV0tOb3JtYWxNYXBGaWx0ZXIgY2xhc3NdOwor
ICAgIENJRmlsdGVyICpmaWx0ZXIgPSBuaWw7CisgICAgS1dRX0JMT0NLX0VYQ0VQVElPTlMKKyAg
ICBmaWx0ZXIgPSBbQ0lGaWx0ZXIgZmlsdGVyV2l0aE5hbWU6QCJXS05vcm1hbE1hcCJdOyAgIAor
ICAgIFtmaWx0ZXIgc2V0RGVmYXVsdHNdOworICAgIAorICAgIFtmaWx0ZXIgc2V0VmFsdWU6YnVt
cE1hcCBmb3JLZXk6QCJpbnB1dEltYWdlIl07ICAgIAorICAgIFtmaWx0ZXIgc2V0VmFsdWU6W05T
TnVtYmVyIG51bWJlcldpdGhGbG9hdDpzY2FsZV0gZm9yS2V5OkAiaW5wdXRTdXJmYWNlU2NhbGUi
XTsKKyAgICByZXR1cm4gZmlsdGVyOworICAgIEtXUV9VTkJMT0NLX0VYQ0VQVElPTlMgCisgICAg
cmV0dXJuIG5pbDsKK30KKworQ0lGaWx0ZXIgKktDYW52YXNGRURpZmZ1c2VMaWdodGluZ1F1YXJ0
ejo6Z2V0Q0lGaWx0ZXIoS0NhbnZhc0ZpbHRlclF1YXJ0eiAqcXVhcnR6RmlsdGVyKSBjb25zdAor
eworICAgIGNvbnN0IEtDTGlnaHRTb3VyY2UgKmxpZ2h0ID0gbGlnaHRTb3VyY2UoKTsKKyAgICBp
ZighbGlnaHQpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgCisgICAgW1dLRGlmZnVzZUxpZ2h0
aW5nRmlsdGVyIGNsYXNzXTsKKyAgICAKKyAgICBDSUZpbHRlciAqZmlsdGVyID0gbmlsOworICAg
IEtXUV9CTE9DS19FWENFUFRJT05TCisgICAgZmlsdGVyID0gW0NJRmlsdGVyIGZpbHRlcldpdGhO
YW1lOkAiV0tEaWZmdXNlTGlnaHRpbmciXTsKKyAgICBpZiAoIWZpbHRlcikKKyAgICAgICAgcmV0
dXJuIG5pbDsKKyAgICAKKyAgICBbZmlsdGVyIHNldERlZmF1bHRzXTsKKyAgICBDSUZpbHRlciAq
bm9ybWFscyA9IGdldE5vcm1hbE1hcChxdWFydHpGaWx0ZXItPmlucHV0SW1hZ2UodGhpcyksIHN1
cmZhY2VTY2FsZSgpKTsKKyAgICBpZiAoIW5vcm1hbHMpIAorICAgICAgICByZXR1cm4gbmlsOwor
ICAgIAorICAgIENJRmlsdGVyICpsaWdodFZlY3RvcnMgPSBnZXRMaWdodFZlY3RvcnMobm9ybWFs
cywgbGlnaHQsIHN1cmZhY2VTY2FsZSgpKTsKKyAgICBpZiAoIWxpZ2h0VmVjdG9ycykgCisgICAg
ICAgIHJldHVybiBuaWw7CisgICAgCisgICAgW2ZpbHRlciBzZXRWYWx1ZTpbbm9ybWFscyB2YWx1
ZUZvcktleTpAIm91dHB1dEltYWdlIl0gZm9yS2V5OkAiaW5wdXROb3JtYWxNYXAiXTsKKyAgICBb
ZmlsdGVyIHNldFZhbHVlOltsaWdodFZlY3RvcnMgdmFsdWVGb3JLZXk6QCJvdXRwdXRJbWFnZSJd
IGZvcktleTpAImlucHV0TGlnaHRWZWN0b3JzIl07CisgICAgW2ZpbHRlciBzZXRWYWx1ZTpjaUNv
bG9yKGxpZ2h0aW5nQ29sb3IoKSkgZm9yS2V5OkAiaW5wdXRMaWdodGluZ0NvbG9yIl07CisgICAg
W2ZpbHRlciBzZXRWYWx1ZTpbTlNOdW1iZXIgbnVtYmVyV2l0aEZsb2F0OnN1cmZhY2VTY2FsZSgp
XSBmb3JLZXk6QCJpbnB1dFN1cmZhY2VTY2FsZSJdOworICAgIFtmaWx0ZXIgc2V0VmFsdWU6W05T
TnVtYmVyIG51bWJlcldpdGhGbG9hdDpkaWZmdXNlQ29uc3RhbnQoKV0gZm9yS2V5OkAiaW5wdXRE
aWZmdXNlQ29uc3RhbnQiXTsKKyAgICBbZmlsdGVyIHNldFZhbHVlOltOU051bWJlciBudW1iZXJX
aXRoRmxvYXQ6a2VybmVsVW5pdExlbmd0aFgoKV0gZm9yS2V5OkAiaW5wdXRLZXJuZWxVbml0TGVu
Z3RoWCJdOworICAgIFtmaWx0ZXIgc2V0VmFsdWU6W05TTnVtYmVyIG51bWJlcldpdGhGbG9hdDpr
ZXJuZWxVbml0TGVuZ3RoWSgpXSBmb3JLZXk6QCJpbnB1dEtlcm5lbFVuaXRMZW5ndGhZIl07Cisg
ICAgCisgICAgRkVfUVVBUlRaX09VVFBVVF9SRVRVUk47Cit9CisKIENJRmlsdGVyICpLQ2FudmFz
RkVGbG9vZFF1YXJ0ejo6Z2V0Q0lGaWx0ZXIoS0NhbnZhc0ZpbHRlclF1YXJ0eiAqcXVhcnR6Rmls
dGVyKSBjb25zdAogewogCUNJRmlsdGVyICpmaWx0ZXIgPSBuaWw7CkBAIC01MDUsNyArNjUyLDcg
QEAgQ0lGaWx0ZXIgKktDYW52YXNGRUltYWdlUXVhcnR6OjpnZXRDSUZpbAogCiBDSUZpbHRlciAq
S0NhbnZhc0ZFR2F1c3NpYW5CbHVyUXVhcnR6OjpnZXRDSUZpbHRlcihLQ2FudmFzRmlsdGVyUXVh
cnR6ICpxdWFydHpGaWx0ZXIpIGNvbnN0CiB7Ci0JRkVfUVVBUlRaX1NFVFVQX0lOUFVUKEAiQ0lH
YXVzc2lhblB5cmFtaWQiKTsKKwlGRV9RVUFSVFpfU0VUVVBfSU5QVVQoQCJDSUdhdXNzaWFuQmx1
ciIpOwogCQogCWZsb2F0IGlucHV0UmFkaXVzID0gc3RkRGV2aWF0aW9uWCgpOwogCWlmIChpbnB1
dFJhZGl1cyAhPSBzdGREZXZpYXRpb25ZKCkpIHsKQEAgLTU1MSw2ICs2OTgsMzcgQEAgQ0lGaWx0
ZXIgKktDYW52YXNGRU9mZnNldFF1YXJ0ejo6Z2V0Q0lGaQogCUZFX1FVQVJUWl9PVVRQVVRfUkVU
VVJOOwogfQogCitDSUZpbHRlciAqS0NhbnZhc0ZFU3BlY3VsYXJMaWdodGluZ1F1YXJ0ejo6Z2V0
Q0lGaWx0ZXIoS0NhbnZhc0ZpbHRlclF1YXJ0eiAqcXVhcnR6RmlsdGVyKSBjb25zdAoreyAgCisg
ICAgY29uc3QgS0NMaWdodFNvdXJjZSAqbGlnaHQgPSBsaWdodFNvdXJjZSgpOworICAgIGlmKCFs
aWdodCkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAKKyAgICBbV0tTcGVjdWxhckxpZ2h0aW5n
RmlsdGVyIGNsYXNzXTsgIAorICAgIAorICAgIENJRmlsdGVyICpmaWx0ZXIgPSBuaWw7CisgICAg
S1dRX0JMT0NLX0VYQ0VQVElPTlMKKyAgICBmaWx0ZXIgPSBbQ0lGaWx0ZXIgZmlsdGVyV2l0aE5h
bWU6QCJXS1NwZWN1bGFyTGlnaHRpbmciXTsKKyAgICBbZmlsdGVyIHNldERlZmF1bHRzXTsKKyAg
ICBDSUZpbHRlciAqbm9ybWFscyA9IGdldE5vcm1hbE1hcChxdWFydHpGaWx0ZXItPmlucHV0SW1h
Z2UodGhpcyksIHN1cmZhY2VTY2FsZSgpKTsKKyAgICBpZiAoIW5vcm1hbHMpIAorICAgICAgICBy
ZXR1cm4gbmlsOworICAgIENJRmlsdGVyICpsaWdodFZlY3RvcnMgPSBnZXRMaWdodFZlY3RvcnMo
bm9ybWFscywgbGlnaHQsIHN1cmZhY2VTY2FsZSgpKTsKKyAgICBpZiAoIWxpZ2h0VmVjdG9ycykg
CisgICAgICAgIHJldHVybiBuaWw7CisgICAgW2ZpbHRlciBzZXRWYWx1ZTpbbm9ybWFscyB2YWx1
ZUZvcktleTpAIm91dHB1dEltYWdlIl0gZm9yS2V5OkAiaW5wdXROb3JtYWxNYXAiXTsKKyAgICBb
ZmlsdGVyIHNldFZhbHVlOltsaWdodFZlY3RvcnMgdmFsdWVGb3JLZXk6QCJvdXRwdXRJbWFnZSJd
IGZvcktleTpAImlucHV0TGlnaHRWZWN0b3JzIl07CisgICAgW2ZpbHRlciBzZXRWYWx1ZTpjaUNv
bG9yKGxpZ2h0aW5nQ29sb3IoKSkgZm9yS2V5OkAiaW5wdXRMaWdodGluZ0NvbG9yIl07CisgICAg
W2ZpbHRlciBzZXRWYWx1ZTpbTlNOdW1iZXIgbnVtYmVyV2l0aEZsb2F0OnN1cmZhY2VTY2FsZSgp
XSBmb3JLZXk6QCJpbnB1dFN1cmZhY2VTY2FsZSJdOworICAgIFtmaWx0ZXIgc2V0VmFsdWU6W05T
TnVtYmVyIG51bWJlcldpdGhGbG9hdDpzcGVjdWxhckNvbnN0YW50KCldIGZvcktleTpAImlucHV0
U3BlY3VsYXJDb25zdGFudCJdOworICAgIFtmaWx0ZXIgc2V0VmFsdWU6W05TTnVtYmVyIG51bWJl
cldpdGhGbG9hdDpzcGVjdWxhckV4cG9uZW50KCldIGZvcktleTpAImlucHV0U3BlY3VsYXJFeHBv
bmVudCJdOworICAgIFtmaWx0ZXIgc2V0VmFsdWU6W05TTnVtYmVyIG51bWJlcldpdGhGbG9hdDpr
ZXJuZWxVbml0TGVuZ3RoWCgpXSBmb3JLZXk6QCJpbnB1dEtlcm5lbFVuaXRMZW5ndGhYIl07Cisg
ICAgW2ZpbHRlciBzZXRWYWx1ZTpbTlNOdW1iZXIgbnVtYmVyV2l0aEZsb2F0Omtlcm5lbFVuaXRM
ZW5ndGhZKCldIGZvcktleTpAImlucHV0S2VybmVsVW5pdExlbmd0aFkiXTsKKyAgICAKKyAgICBG
RV9RVUFSVFpfT1VUUFVUX1JFVFVSTjsKK30KKworCiBDSUZpbHRlciAqS0NhbnZhc0ZFVGlsZVF1
YXJ0ejo6Z2V0Q0lGaWx0ZXIoS0NhbnZhc0ZpbHRlclF1YXJ0eiAqcXVhcnR6RmlsdGVyKSBjb25z
dAogewogCUZFX1FVQVJUWl9TRVRVUF9JTlBVVChAIkNJQWZmaW5lVGlsZSIpOwpAQCAtNTU4LDYg
KzczNiwzIEBAIENJRmlsdGVyICpLQ2FudmFzRkVUaWxlUXVhcnR6OjpnZXRDSUZpbHQKIAlGRV9R
VUFSVFpfT1VUUFVUX1JFVFVSTjsKIH0KIAotCi0KLQpJbmRleDoga2NhbnZhcy9kZXZpY2UvcXVh
cnR6L0tSZW5kZXJpbmdEZXZpY2VRdWFydHoubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9y
b290L1NWR1N1cHBvcnQva2NhbnZhcy9kZXZpY2UvcXVhcnR6L0tSZW5kZXJpbmdEZXZpY2VRdWFy
dHoubW0sdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNgpkaWZmIC1wIC11IC1yMS42IGtjYW52YXMv
ZGV2aWNlL3F1YXJ0ei9LUmVuZGVyaW5nRGV2aWNlUXVhcnR6Lm1tCi0tLSBrY2FudmFzL2Rldmlj
ZS9xdWFydHovS1JlbmRlcmluZ0RldmljZVF1YXJ0ei5tbQkyMiBOb3YgMjAwNSAyMzowNDoyNyAt
MDAwMAkxLjYKKysrIGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9LUmVuZGVyaW5nRGV2aWNlUXVhcnR6
Lm1tCTI4IE5vdiAyMDA1IDEyOjU2OjEzIC0wMDAwCkBAIC0yOTIsMTUgKzI5MiwxNyBAQCBLQ2Fu
dmFzRmlsdGVyRWZmZWN0ICpLUmVuZGVyaW5nRGV2aWNlUXVhCiB7CiAJc3dpdGNoKHR5cGUpCiAJ
ewotLy8JY2FzZSBGRV9ESVNUQU5UX0xJR0hUOiAKLS8vCWNhc2UgRkVfUE9JTlRfTElHSFQ6IAot
Ly8JY2FzZSBGRV9TUE9UX0xJR0hUOiAKKyAgICAgICAgLyogTGlnaHQgc291cmNlcyBhcmUgY29u
dGFpbmVkIGJ5IHRoZSBkaWZmdXNlL3NwZWN1bGFyIGxpZ2h0IGJsb2NrcyAKKyAgICAgICAgY2Fz
ZSBGRV9ESVNUQU5UX0xJR0hUOiAKKyAgICAgICAgY2FzZSBGRV9QT0lOVF9MSUdIVDogCisgICAg
ICAgIGNhc2UgRkVfU1BPVF9MSUdIVDogCisgICAgICAgICovCiAJY2FzZSBGRV9CTEVORDogcmV0
dXJuIG5ldyBLQ2FudmFzRkVCbGVuZFF1YXJ0eigpOwogCWNhc2UgRkVfQ09MT1JfTUFUUklYOiBy
ZXR1cm4gbmV3IEtDYW52YXNGRUNvbG9yTWF0cml4UXVhcnR6KCk7CiAvLwljYXNlIEZFX0NPTVBP
TkVOVF9UUkFOU0ZFUjogCiAJY2FzZSBGRV9DT01QT1NJVEU6IHJldHVybiBuZXcgS0NhbnZhc0ZF
Q29tcG9zaXRlUXVhcnR6KCk7CiAvLwljYXNlIEZFX0NPTlZPTFZFX01BVFJJWDogCi0vLwljYXNl
IEZFX0RJRkZVU0VfTElHSFRJTkc6IAorCWNhc2UgRkVfRElGRlVTRV9MSUdIVElORzogcmV0dXJu
IG5ldyBLQ2FudmFzRkVEaWZmdXNlTGlnaHRpbmdRdWFydHooKTsKIC8vCWNhc2UgRkVfRElTUExB
Q0VNRU5UX01BUDogCiAJY2FzZSBGRV9GTE9PRDogcmV0dXJuIG5ldyBLQ2FudmFzRkVGbG9vZFF1
YXJ0eigpOwogCWNhc2UgRkVfR0FVU1NJQU5fQkxVUjogcmV0dXJuIG5ldyBLQ2FudmFzRkVHYXVz
c2lhbkJsdXJRdWFydHooKTsKQEAgLTMwOCw3ICszMTAsNyBAQCBLQ2FudmFzRmlsdGVyRWZmZWN0
ICpLUmVuZGVyaW5nRGV2aWNlUXVhCiAJY2FzZSBGRV9NRVJHRTogcmV0dXJuIG5ldyBLQ2FudmFz
RkVNZXJnZVF1YXJ0eigpOwogLy8JY2FzZSBGRV9NT1JQSE9MT0dZOiAKIAljYXNlIEZFX09GRlNF
VDogcmV0dXJuIG5ldyBLQ2FudmFzRkVPZmZzZXRRdWFydHooKTsKLS8vCWNhc2UgRkVfU1BFQ1VM
QVJfTElHSFRJTkc6IAorCWNhc2UgRkVfU1BFQ1VMQVJfTElHSFRJTkc6IHJldHVybiBuZXcgS0Nh
bnZhc0ZFU3BlY3VsYXJMaWdodGluZ1F1YXJ0eigpOwogCWNhc2UgRkVfVElMRTogcmV0dXJuIG5l
dyBLQ2FudmFzRkVUaWxlUXVhcnR6KCk7CiAvLwljYXNlIEZFX1RVUkJVTEVOQ0U6IAogCWRlZmF1
bHQ6CkluZGV4OiBrc3ZnMi9TVkdBbmltYXRlZENvbG9ySW1wbC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpkaWZm
IC1OcHUga3N2ZzIvU1ZHQW5pbWF0ZWRDb2xvckltcGwuY3BwCi0tLSBrc3ZnMi9TVkdBbmltYXRl
ZENvbG9ySW1wbC5jcHAJMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMAorKysga3N2ZzIvU1ZHQW5p
bWF0ZWRDb2xvckltcGwuY3BwCTI4IE5vdiAyMDA1IDA1OjM3OjA3IC0wMDAwCkBAIC0wLDAgKzEs
NDYgQEAKKy8qCisgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IE5pa29sYXMgWmltbWVybWFubiA8
d2lsZGZveEBrZGUub3JnPgorIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAy
MDA1IE9saXZlciBIdW50IDxvamgxNkBzdHVkZW50LmNhbnRlcmJ1cnkuYWMubno+CisgCisgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorIAorIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAKKyBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgQm9zdG9uLCBNQSAwMjExMS0x
MzA3LCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNWR0FuaW1h
dGVkQ29sb3JJbXBsLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBLU1ZHOworCitTVkdBbmltYXRlZENv
bG9ySW1wbDo6U1ZHQW5pbWF0ZWRDb2xvckltcGwoY29uc3QgU1ZHU3R5bGVkRWxlbWVudEltcGwg
KmNvbnRleHQpCis6IFNWR0FuaW1hdGVkVGVtcGxhdGU8U1ZHQ29sb3JJbXBsPihjb250ZXh0KQor
eworfQorCitTVkdBbmltYXRlZENvbG9ySW1wbDo6flNWR0FuaW1hdGVkQ29sb3JJbXBsKCkKK3sK
K30KKworU1ZHQ29sb3JJbXBsICpTVkdBbmltYXRlZENvbG9ySW1wbDo6Y3JlYXRlKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbmV3IFNWR0NvbG9ySW1wbCgpOworfQorCit2b2lkIFNWR0FuaW1hdGVk
Q29sb3JJbXBsOjphc3NpZ24oU1ZHQ29sb3JJbXBsICpzcmMsIFNWR0NvbG9ySW1wbCAqZHN0KSBj
b25zdAoreworICAgIGlmICghc3JjIHx8ICFkc3QpCisgICAgICAgIHJldHVybjsKKyAgICBkc3Qt
PnNldENzc1RleHQoc3JjLT5jc3NUZXh0KCkpOworfQpJbmRleDoga3N2ZzIvU1ZHQW5pbWF0ZWRD
b2xvckltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09CmRpZmYgLU5wdSBrc3ZnMi9TVkdBbmltYXRlZENvbG9ySW1w
bC5oCi0tLSBrc3ZnMi9TVkdBbmltYXRlZENvbG9ySW1wbC5oCTEgSmFuIDE5NzAgMDA6MDA6MDAg
LTAwMDAKKysrIGtzdmcyL1NWR0FuaW1hdGVkQ29sb3JJbXBsLmgJMjggTm92IDIwMDUgMDU6Mzc6
MDcgLTAwMDAKQEAgLTAsMCArMSw0MiBAQAorLyoKKyBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUg
Tmlrb2xhcyBaaW1tZXJtYW5uIDx3aWxkZm94QGtkZS5vcmc+CisgMjAwNCwgMjAwNSBSb2IgQnVp
cyA8YnVpc0BrZGUub3JnPgorIDIwMDUgT2xpdmVyIEh1bnQgPG9qaDE2QHN0dWRlbnQuY2FudGVy
YnVyeS5hYy5uej4KKyAKKyBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgCisgVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorIAorIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwK
KyBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaWZuZGVmIEtTVkdfU1ZHQW5p
bWF0ZWRDb2xvckltcGxfSAorI2RlZmluZSBLU1ZHX1NWR0FuaW1hdGVkQ29sb3JJbXBsX0gKKwor
I2luY2x1ZGUgIlNWR0NvbG9ySW1wbC5oIgorI2luY2x1ZGUgIlNWR0FuaW1hdGVkVGVtcGxhdGUu
aCIKKworbmFtZXNwYWNlIEtTVkcKK3sKKyAgICBjbGFzcyBTVkdBbmltYXRlZENvbG9ySW1wbCA6
IHB1YmxpYyBTVkdBbmltYXRlZFRlbXBsYXRlPFNWR0NvbG9ySW1wbD4KKyAgICB7CisgICAgcHVi
bGljOgorICAgICAgICBTVkdBbmltYXRlZENvbG9ySW1wbChjb25zdCBTVkdTdHlsZWRFbGVtZW50
SW1wbCAqY29udGV4dCk7CisgICAgICAgIHZpcnR1YWwgflNWR0FuaW1hdGVkQ29sb3JJbXBsKCk7
CisgICAgCisgICAgcHJvdGVjdGVkOgorICAgICAgICB2aXJ0dWFsIFNWR0NvbG9ySW1wbCAqY3Jl
YXRlKCkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgdm9pZCBhc3NpZ24oU1ZHQ29sb3JJbXBsICpz
cmMsIFNWR0NvbG9ySW1wbCAqZHN0KSBjb25zdDsKKyAgICB9OworfTsKKworI2VuZGlmCkluZGV4
OiBrc3ZnMi9TVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnRJbXBsLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CmRp
ZmYgLU5wdSBrc3ZnMi9TVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnRJbXBsLmNwcAotLS0ga3N2
ZzIvU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50SW1wbC5jcHAJMSBKYW4gMTk3MCAwMDowMDow
MCAtMDAwMAorKysga3N2ZzIvU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50SW1wbC5jcHAJMjgg
Tm92IDIwMDUgMDg6NDA6MDMgLTAwMDAKQEAgLTAsMCArMSwxNDUgQEAKKy8qCisgQ29weXJpZ2h0
IChDKSAyMDA1IE9saXZlciBIdW50IDxvamgxNkBzdHVkZW50LmNhbnRlcmJ1cnkuYWMubno+Cisg
CisgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCisgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIAorIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAK
KyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgQm9zdG9uLCBNQSAw
MjExMS0xMzA3LCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPHFz
dHJpbmdsaXN0Lmg+CisKKyNpbmNsdWRlIDxrZG9tL2NvcmUvQXR0ckltcGwuaD4KKworI2luY2x1
ZGUgPGtjYW52YXMvS0NhbnZhcy5oPgorI2luY2x1ZGUgPGtjYW52YXMvS0NhbnZhc1JlZ2lzdHJ5
Lmg+CisjaW5jbHVkZSA8a2NhbnZhcy9LQ2FudmFzRmlsdGVycy5oPgorI2luY2x1ZGUgPGtjYW52
YXMvZGV2aWNlL0tSZW5kZXJpbmdEZXZpY2UuaD4KKworI2luY2x1ZGUgImtzdmcuaCIKKyNpbmNs
dWRlICJTVkdOYW1lcy5oIgorI2luY2x1ZGUgIlNWR0hlbHBlci5oIgorI2luY2x1ZGUgIlNWR1Jl
bmRlclN0eWxlLmgiCisjaW5jbHVkZSAiU1ZHQW5pbWF0ZWRDb2xvckltcGwuaCIKKyNpbmNsdWRl
ICJTVkdBbmltYXRlZE51bWJlckltcGwuaCIKKyNpbmNsdWRlICJTVkdBbmltYXRlZFN0cmluZ0lt
cGwuaCIKKyNpbmNsdWRlICJTVkdGRUxpZ2h0RWxlbWVudEltcGwuaCIKKyNpbmNsdWRlICJTVkdE
T01JbXBsZW1lbnRhdGlvbkltcGwuaCIKKyNpbmNsdWRlICJTVkdGRURpZmZ1c2VMaWdodGluZ0Vs
ZW1lbnRJbXBsLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBLU1ZHOworCitTVkdGRURpZmZ1c2VMaWdo
dGluZ0VsZW1lbnRJbXBsOjpTVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnRJbXBsKGNvbnN0IEtE
T006OlF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIEtET006OkRvY3VtZW50SW1wbCAqZG9jKSA6IAor
U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzSW1wbCh0YWdOYW1lLCBkb2MpCit7
CisgICAgbV9maWx0ZXJFZmZlY3QgPSAwOworfQorCitTVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1l
bnRJbXBsOjp+U1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50SW1wbCgpCit7CisgICAgZGVsZXRl
IG1fZmlsdGVyRWZmZWN0OworfQorCitTVkdBbmltYXRlZFN0cmluZ0ltcGwgKlNWR0ZFRGlmZnVz
ZUxpZ2h0aW5nRWxlbWVudEltcGw6OmluMSgpIGNvbnN0Cit7CisgICAgU1ZHU3R5bGVkRWxlbWVu
dEltcGwgKmR1bW15ID0gMDsKKyAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWRTdHJp
bmdJbXBsPihtX2luMSwgZHVtbXkpOworfQorCitTVkdBbmltYXRlZE51bWJlckltcGwgKlNWR0ZF
RGlmZnVzZUxpZ2h0aW5nRWxlbWVudEltcGw6OmRpZmZ1c2VDb25zdGFudCgpIGNvbnN0Cit7Cisg
ICAgU1ZHU3R5bGVkRWxlbWVudEltcGwgKmR1bW15ID0gMDsKKyAgICByZXR1cm4gbGF6eV9jcmVh
dGU8U1ZHQW5pbWF0ZWROdW1iZXJJbXBsPihtX2RpZmZ1c2VDb25zdGFudCwgZHVtbXkpOworfQor
CitTVkdBbmltYXRlZE51bWJlckltcGwgKlNWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudEltcGw6
OnN1cmZhY2VTY2FsZSgpIGNvbnN0Cit7CisgICAgU1ZHU3R5bGVkRWxlbWVudEltcGwgKmR1bW15
ID0gMDsKKyAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWROdW1iZXJJbXBsPihtX3N1
cmZhY2VTY2FsZSwgZHVtbXkpOworfQorCitTVkdBbmltYXRlZE51bWJlckltcGwgKlNWR0ZFRGlm
ZnVzZUxpZ2h0aW5nRWxlbWVudEltcGw6Omtlcm5lbFVuaXRMZW5ndGhYKCkgY29uc3QKK3sKKyAg
ICBTVkdTdHlsZWRFbGVtZW50SW1wbCAqZHVtbXkgPSAwOworICAgIHJldHVybiBsYXp5X2NyZWF0
ZTxTVkdBbmltYXRlZE51bWJlckltcGw+KG1fa2VybmVsVW5pdExlbmd0aFgsIGR1bW15KTsKK30K
KworU1ZHQW5pbWF0ZWROdW1iZXJJbXBsICpTVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnRJbXBs
OjprZXJuZWxVbml0TGVuZ3RoWSgpIGNvbnN0Cit7CisgICAgU1ZHU3R5bGVkRWxlbWVudEltcGwg
KmR1bW15ID0gMDsKKyAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWROdW1iZXJJbXBs
PihtX2tlcm5lbFVuaXRMZW5ndGhZLCBkdW1teSk7Cit9CisKK1NWR0FuaW1hdGVkQ29sb3JJbXBs
ICpTVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnRJbXBsOjpsaWdodGluZ0NvbG9yKCkgY29uc3QK
K3sKKyAgICBTVkdTdHlsZWRFbGVtZW50SW1wbCAqZHVtbXkgPSAwOworICAgIHJldHVybiBsYXp5
X2NyZWF0ZTxTVkdBbmltYXRlZENvbG9ySW1wbD4obV9saWdodGluZ0NvbG9yLCBkdW1teSk7Cit9
CisKK3ZvaWQgU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50SW1wbDo6cGFyc2VNYXBwZWRBdHRy
aWJ1dGUoS0RPTTo6TWFwcGVkQXR0cmlidXRlSW1wbCAqYXR0cikKK3sKKyAgICBLRE9NOjpET01T
dHJpbmcgdmFsdWUoYXR0ci0+dmFsdWUoKSk7CisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdO
YW1lczo6aW5BdHRyKQorICAgICAgICBpbjEoKS0+c2V0QmFzZVZhbCh2YWx1ZS5pbXBsKCkpOwor
ICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6c3VyZmFjZVNjYWxlQXR0cikK
KyAgICAgICAgc3VyZmFjZVNjYWxlKCktPnNldEJhc2VWYWwodmFsdWUucXN0cmluZygpLnRvRG91
YmxlKCkpOworICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6ZGlmZnVzZUNv
bnN0YW50QXR0cikKKyAgICAgICAgZGlmZnVzZUNvbnN0YW50KCktPnNldEJhc2VWYWwodmFsdWUu
dG9JbnQoKSk7CisgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjprZXJuZWxV
bml0TGVuZ3RoQXR0cikgeworICAgICAgICBRU3RyaW5nTGlzdCBudW1iZXJzID0gUVN0cmluZ0xp
c3Q6OnNwbGl0KCcgJywgdmFsdWUucXN0cmluZygpKTsKKyAgICAgICAga2VybmVsVW5pdExlbmd0
aFgoKS0+c2V0QmFzZVZhbChudW1iZXJzWzBdLnRvRG91YmxlKCkpOworICAgICAgICBpZiAobnVt
YmVycy5jb3VudCgpID09IDEpCisgICAgICAgICAgICBrZXJuZWxVbml0TGVuZ3RoWSgpLT5zZXRC
YXNlVmFsKG51bWJlcnNbMF0udG9Eb3VibGUoKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IGtlcm5lbFVuaXRMZW5ndGhZKCktPnNldEJhc2VWYWwobnVtYmVyc1sxXS50b0RvdWJsZSgpKTsK
KyAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6bGlnaHRpbmdfY29sb3JB
dHRyKQorICAgICAgICAvL0ZJWE1FIHRoaXMgaXMgYmFkLCBwb3RlbnRpYWwgbWVtb3J5IGxlYWsK
KyAgICAgICAgbGlnaHRpbmdDb2xvcigpLT5zZXRCYXNlVmFsKG5ldyBTVkdDb2xvckltcGwodmFs
dWUuaW1wbCgpKSk7CisgICAgZWxzZQorICAgICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFy
ZEF0dHJpYnV0ZXNJbXBsOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKK30KKworS0NhbnZh
c0ZFRGlmZnVzZUxpZ2h0aW5nICpTVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnRJbXBsOjpmaWx0
ZXJFZmZlY3QoKSBjb25zdAoreworICAgIGlmICghbV9maWx0ZXJFZmZlY3QpIAorICAgICAgICBt
X2ZpbHRlckVmZmVjdCA9IHN0YXRpY19jYXN0PEtDYW52YXNGRURpZmZ1c2VMaWdodGluZyAqPihR
UGFpbnRlcjo6cmVuZGVyaW5nRGV2aWNlKCktPmNyZWF0ZUZpbHRlckVmZmVjdChGRV9ESUZGVVNF
X0xJR0hUSU5HKSk7CisgICAgbV9maWx0ZXJFZmZlY3QtPnNldEluKEtET006OkRPTVN0cmluZyhp
bjEoKS0+YmFzZVZhbCgpKS5xc3RyaW5nKCkpOworICAgIHNldFN0YW5kYXJkQXR0cmlidXRlcyht
X2ZpbHRlckVmZmVjdCk7CisgICAgbV9maWx0ZXJFZmZlY3QtPnNldERpZmZ1c2VDb25zdGFudCgo
ZGlmZnVzZUNvbnN0YW50KCktPmJhc2VWYWwoKSkpOworICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRT
dXJmYWNlU2NhbGUoKHN1cmZhY2VTY2FsZSgpLT5iYXNlVmFsKCkpKTsKKyAgICBtX2ZpbHRlckVm
ZmVjdC0+c2V0S2VybmVsVW5pdExlbmd0aFgoKGtlcm5lbFVuaXRMZW5ndGhYKCktPmJhc2VWYWwo
KSkpOworICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRLZXJuZWxVbml0TGVuZ3RoWSgoa2VybmVsVW5p
dExlbmd0aFkoKS0+YmFzZVZhbCgpKSk7CisgICAgbV9maWx0ZXJFZmZlY3QtPnNldExpZ2h0aW5n
Q29sb3IobGlnaHRpbmdDb2xvcigpLT5iYXNlVmFsKCktPmNvbG9yKCkpOworICAgIHVwZGF0ZUxp
Z2h0cygpOworICAgIHJldHVybiBtX2ZpbHRlckVmZmVjdDsKK30KKwordm9pZCBTVkdGRURpZmZ1
c2VMaWdodGluZ0VsZW1lbnRJbXBsOjp1cGRhdGVMaWdodHMoKSBjb25zdAoreworICAgIGlmICgh
bV9maWx0ZXJFZmZlY3QpCisgICAgICAgIHJldHVybjsKKyAgICBLRE9NOjpOb2RlSW1wbCAqbiA9
IGZpcnN0Q2hpbGQoKTsKKyAgICBpZiAoIW4pIAorICAgICAgICByZXR1cm47CisgICAgS0NMaWdo
dFNvdXJjZSAqbGlnaHQgPSAwOworICAgIAorICAgIGZvcihLRE9NOjpOb2RlSW1wbCAqbiA9IGZp
cnN0Q2hpbGQoKTsgbjsgbiA9IG4tPm5leHRTaWJsaW5nKCkpIHsKKyAgICAgICAgaWYgKG4tPmhh
c1RhZ05hbWUoU1ZHTmFtZXM6OmZlRGlzdGFudExpZ2h0VGFnKXx8bi0+aGFzVGFnTmFtZShTVkdO
YW1lczo6ZmVQb2ludExpZ2h0VGFnKXx8bi0+aGFzVGFnTmFtZShTVkdOYW1lczo6ZmVTcG90TGln
aHRUYWcpKSB7CisgICAgICAgICAgICBTVkdGRUxpZ2h0RWxlbWVudEltcGwgKmxpZ2h0Tm9kZSA9
IHN0YXRpY19jYXN0PFNWR0ZFTGlnaHRFbGVtZW50SW1wbCAqPihuKTsgCisgICAgICAgICAgICBs
aWdodCA9IGxpZ2h0Tm9kZS0+bGlnaHRTb3VyY2UoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgfQorICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRMaWdodFNvdXJjZShsaWdodCk7
Cit9CkluZGV4OiBrc3ZnMi9TVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnRJbXBsLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpkaWZmIC1OcHUga3N2ZzIvU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50SW1wbC5oCi0t
LSBrc3ZnMi9TVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnRJbXBsLmgJMSBKYW4gMTk3MCAwMDow
MDowMCAtMDAwMAorKysga3N2ZzIvU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50SW1wbC5oCTI4
IE5vdiAyMDA1IDA1OjM3OjA3IC0wMDAwCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgQ29weXJpZ2h0
IChDKSAyMDA0LCAyMDA1IE5pa29sYXMgWmltbWVybWFubiA8d2lsZGZveEBrZGUub3JnPgorIDIw
MDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAyMDA1IE9saXZlciBIdW50IDxvamgx
NkBzdHVkZW50LmNhbnRlcmJ1cnkuYWMubno+CisgCisgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorIAorIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAKKyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxh
Y2UgLSBTdWl0ZSAzMzAsCisgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2lm
bmRlZiBLU1ZHX1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudEltcGxfSAorI2RlZmluZSBLU1ZH
X1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudEltcGxfSAorCisjaW5jbHVkZSAiU1ZHRmlsdGVy
UHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzSW1wbC5oIgorCitjbGFzcyBLQ2FudmFzRkVEaWZm
dXNlTGlnaHRpbmc7CisKK25hbWVzcGFjZSBLU1ZHCit7CisgICAgY2xhc3MgU1ZHQW5pbWF0ZWRO
dW1iZXJJbXBsOworICAgIGNsYXNzIFNWR0FuaW1hdGVkU3RyaW5nSW1wbDsKKyAgICBjbGFzcyBT
VkdBbmltYXRlZENvbG9ySW1wbDsKKyAgICAKKyAgICBjbGFzcyBTVkdGRURpZmZ1c2VMaWdodGlu
Z0VsZW1lbnRJbXBsIDogcHVibGljIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRl
c0ltcGwKKyAgICB7CisgICAgcHVibGljOgorICAgICAgICBTVkdGRURpZmZ1c2VMaWdodGluZ0Vs
ZW1lbnRJbXBsKGNvbnN0IEtET006OlF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIEtET006OkRvY3Vt
ZW50SW1wbCAqZG9jKTsKKyAgICAgICAgdmlydHVhbCB+U1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVt
ZW50SW1wbCgpOworCisgICAgICAgIC8vICdTVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQnIGZ1
bmN0aW9ucworICAgICAgICBTVkdBbmltYXRlZFN0cmluZ0ltcGwgKmluMSgpIGNvbnN0OworICAg
ICAgICBTVkdBbmltYXRlZE51bWJlckltcGwgKmRpZmZ1c2VDb25zdGFudCgpIGNvbnN0OworICAg
ICAgICBTVkdBbmltYXRlZE51bWJlckltcGwgKnN1cmZhY2VTY2FsZSgpIGNvbnN0OworICAgICAg
ICBTVkdBbmltYXRlZE51bWJlckltcGwgKmtlcm5lbFVuaXRMZW5ndGhYKCkgY29uc3Q7CisgICAg
ICAgIFNWR0FuaW1hdGVkTnVtYmVySW1wbCAqa2VybmVsVW5pdExlbmd0aFkoKSBjb25zdDsKKyAg
ICAgICAgU1ZHQW5pbWF0ZWRDb2xvckltcGwgICpsaWdodGluZ0NvbG9yKCkgY29uc3Q7CisKKyAg
ICAgICAgLy8gRGVyaXZlZCBmcm9tOiAnRWxlbWVudEltcGwnCisgICAgICAgIHZpcnR1YWwgdm9p
ZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShLRE9NOjpNYXBwZWRBdHRyaWJ1dGVJbXBsICphdHRyKTsK
KworICAgICAgICB2aXJ0dWFsIEtDYW52YXNGRURpZmZ1c2VMaWdodGluZyAqZmlsdGVyRWZmZWN0
KCkgY29uc3Q7CisKKyAgICBwcml2YXRlOgorICAgICAgICBtdXRhYmxlIFNoYXJlZFB0cjxTVkdB
bmltYXRlZFN0cmluZ0ltcGw+IG1faW4xOworICAgICAgICBtdXRhYmxlIFNoYXJlZFB0cjxTVkdB
bmltYXRlZE51bWJlckltcGw+IG1fZGlmZnVzZUNvbnN0YW50OworICAgICAgICBtdXRhYmxlIFNo
YXJlZFB0cjxTVkdBbmltYXRlZE51bWJlckltcGw+IG1fc3VyZmFjZVNjYWxlOworICAgICAgICBt
dXRhYmxlIFNoYXJlZFB0cjxTVkdBbmltYXRlZENvbG9ySW1wbD4gIG1fbGlnaHRpbmdDb2xvcjsK
KyAgICAgICAgbXV0YWJsZSBTaGFyZWRQdHI8U1ZHQW5pbWF0ZWROdW1iZXJJbXBsPiBtX2tlcm5l
bFVuaXRMZW5ndGhYOworICAgICAgICBtdXRhYmxlIFNoYXJlZFB0cjxTVkdBbmltYXRlZE51bWJl
ckltcGw+IG1fa2VybmVsVW5pdExlbmd0aFk7CisgICAgICAgIC8vbmVlZCBvdGhlciBwcm9wZXJ0
aWVzIGhlcmUuLi4KKyAgICAgICAgbXV0YWJsZSBLQ2FudmFzRkVEaWZmdXNlTGlnaHRpbmcgKm1f
ZmlsdGVyRWZmZWN0OworICAgICAgICAKKyAgICAgICAgLy9saWdodCBtYW5hZ2VtZW50CisgICAg
ICAgIHZvaWQgdXBkYXRlTGlnaHRzKCkgY29uc3Q7CisgICAgfTsKK307CisKKyNlbmRpZgpJbmRl
eDoga3N2ZzIvU1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50SW1wbC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpkaWZm
IC1OcHUga3N2ZzIvU1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50SW1wbC5jcHAKLS0tIGtzdmcyL1NW
R0ZFRGlzdGFudExpZ2h0RWxlbWVudEltcGwuY3BwCTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAK
KysrIGtzdmcyL1NWR0ZFRGlzdGFudExpZ2h0RWxlbWVudEltcGwuY3BwCTI4IE5vdiAyMDA1IDA4
OjI4OjE3IC0wMDAwCkBAIC0wLDAgKzEsMjEgQEAKKyNpbmNsdWRlICJTVkdGRURpc3RhbnRMaWdo
dEVsZW1lbnRJbXBsLmgiCisjaW5jbHVkZSAiU1ZHQW5pbWF0ZWRTdHJpbmdJbXBsLmgiCisjaW5j
bHVkZSAiU1ZHQW5pbWF0ZWROdW1iZXJJbXBsLmgiCisjaW5jbHVkZSAiU1ZHQW5pbWF0ZWRFbnVt
ZXJhdGlvbkltcGwuaCIKKyNpbmNsdWRlICJTVkdET01JbXBsZW1lbnRhdGlvbkltcGwuaCIKKwor
dXNpbmcgbmFtZXNwYWNlIEtTVkc7CisKK1NWR0ZFRGlzdGFudExpZ2h0RWxlbWVudEltcGw6OlNW
R0ZFRGlzdGFudExpZ2h0RWxlbWVudEltcGwoY29uc3QgS0RPTTo6UXVhbGlmaWVkTmFtZSYgdGFn
TmFtZSwgS0RPTTo6RG9jdW1lbnRJbXBsICpkb2MpIDogCitTVkdGRUxpZ2h0RWxlbWVudEltcGwo
dGFnTmFtZSwgZG9jKQoreworfQorCitTVkdGRURpc3RhbnRMaWdodEVsZW1lbnRJbXBsOjp+U1ZH
RkVEaXN0YW50TGlnaHRFbGVtZW50SW1wbCgpCit7Cit9CisKK0tDTGlnaHRTb3VyY2UgKlNWR0ZF
RGlzdGFudExpZ2h0RWxlbWVudEltcGw6OmxpZ2h0U291cmNlKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbmV3IEtDRGlzdGFudExpZ2h0U291cmNlKGF6aW11dGgoKS0+YmFzZVZhbCgpLCBlbGV2YXRp
b24oKS0+YmFzZVZhbCgpKTsKK30KSW5kZXg6IGtzdmcyL1NWR0ZFRGlzdGFudExpZ2h0RWxlbWVu
dEltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09CmRpZmYgLU5wdSBrc3ZnMi9TVkdGRURpc3RhbnRMaWdodEVsZW1l
bnRJbXBsLmgKLS0tIGtzdmcyL1NWR0ZFRGlzdGFudExpZ2h0RWxlbWVudEltcGwuaAkxIEphbiAx
OTcwIDAwOjAwOjAwIC0wMDAwCisrKyBrc3ZnMi9TVkdGRURpc3RhbnRMaWdodEVsZW1lbnRJbXBs
LmgJMjggTm92IDIwMDUgMDg6MjQ6MzEgLTAwMDAKQEAgLTAsMCArMSwxNyBAQAorI2lmbmRlZiBL
U1ZHX1NWR0ZFRGlzdGFudExpZ2h0RWxlbWVudEltcGxfSAorI2RlZmluZSBLU1ZHX1NWR0ZFRGlz
dGFudExpZ2h0RWxlbWVudEltcGxfSAorCisjaW5jbHVkZSAiU1ZHRkVMaWdodEVsZW1lbnRJbXBs
LmgiCisKK25hbWVzcGFjZSBLU1ZHCit7CisgICAgY2xhc3MgU1ZHRkVEaXN0YW50TGlnaHRFbGVt
ZW50SW1wbCA6IHB1YmxpYyBTVkdGRUxpZ2h0RWxlbWVudEltcGwKKyAgICB7IAorICAgIHB1Ymxp
YzoKKyAgICAgICAgU1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50SW1wbChjb25zdCBLRE9NOjpRdWFs
aWZpZWROYW1lJiB0YWdOYW1lLCBLRE9NOjpEb2N1bWVudEltcGwgKmRvYyk7CisgICAgICAgIHZp
cnR1YWwgflNWR0ZFRGlzdGFudExpZ2h0RWxlbWVudEltcGwoKTsKKyAgICAgICAgdmlydHVhbCBL
Q0xpZ2h0U291cmNlICpsaWdodFNvdXJjZSgpIGNvbnN0OworICAgIH07Cit9OworCisjZW5kaWYK
SW5kZXg6IGtzdmcyL1NWR0ZFTGlnaHRFbGVtZW50SW1wbC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpkaWZmIC1O
cHUga3N2ZzIvU1ZHRkVMaWdodEVsZW1lbnRJbXBsLmNwcAotLS0ga3N2ZzIvU1ZHRkVMaWdodEVs
ZW1lbnRJbXBsLmNwcAkxIEphbiAxOTcwIDAwOjAwOjAwIC0wMDAwCisrKyBrc3ZnMi9TVkdGRUxp
Z2h0RWxlbWVudEltcGwuY3BwCTI4IE5vdiAyMDA1IDA4OjI0OjMxIC0wMDAwCkBAIC0wLDAgKzEs
MTM5IEBACisvKgorIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBOaWtvbGFzIFppbW1lcm1hbm4g
PHdpbGRmb3hAa2RlLm9yZz4KKyAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+Cisg
MjAwNSBPbGl2ZXIgSHVudCA8b2poMTZAc3R1ZGVudC5jYW50ZXJidXJ5LmFjLm56PgorIAorIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAKKyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgCisgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorIEJvc3RvbiwgTUEgMDIxMTEt
MTMwNywgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlIDxxc3RyaW5n
bGlzdC5oPgorCisjaW5jbHVkZSA8a2RvbS9jb3JlL0F0dHJJbXBsLmg+CisKKyNpbmNsdWRlIDxr
Y2FudmFzL0tDYW52YXMuaD4KKyNpbmNsdWRlIDxrY2FudmFzL0tDYW52YXNSZWdpc3RyeS5oPgor
I2luY2x1ZGUgPGtjYW52YXMvS0NhbnZhc1Jlc291cmNlcy5oPgorI2luY2x1ZGUgPGtjYW52YXMv
S0NhbnZhc0ZpbHRlcnMuaD4KKyNpbmNsdWRlIDxrY2FudmFzL2RldmljZS9LUmVuZGVyaW5nRGV2
aWNlLmg+CisKKyNpbmNsdWRlICJTVkdOYW1lcy5oIgorI2luY2x1ZGUgIlNWR0hlbHBlci5oIgor
I2luY2x1ZGUgIlNWR1JlbmRlclN0eWxlLmgiCisjaW5jbHVkZSAiU1ZHRkVMaWdodEVsZW1lbnRJ
bXBsLmgiCisjaW5jbHVkZSAiU1ZHQW5pbWF0ZWRTdHJpbmdJbXBsLmgiCisjaW5jbHVkZSAiU1ZH
QW5pbWF0ZWROdW1iZXJJbXBsLmgiCisjaW5jbHVkZSAiU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbklt
cGwuaCIKKyNpbmNsdWRlICJTVkdET01JbXBsZW1lbnRhdGlvbkltcGwuaCIKKwordXNpbmcgbmFt
ZXNwYWNlIEtTVkc7CisKK1NWR0ZFTGlnaHRFbGVtZW50SW1wbDo6U1ZHRkVMaWdodEVsZW1lbnRJ
bXBsKGNvbnN0IEtET006OlF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIEtET006OkRvY3VtZW50SW1w
bCAqZG9jKSA6IAorU1ZHRWxlbWVudEltcGwodGFnTmFtZSwgZG9jKQoreworfQorCitTVkdGRUxp
Z2h0RWxlbWVudEltcGw6On5TVkdGRUxpZ2h0RWxlbWVudEltcGwoKQoreworfQorCitTVkdBbmlt
YXRlZE51bWJlckltcGwgKlNWR0ZFTGlnaHRFbGVtZW50SW1wbDo6YXppbXV0aCgpIGNvbnN0Cit7
CisgICAgU1ZHU3R5bGVkRWxlbWVudEltcGwgKmR1bW15ID0gMDsKKyAgICByZXR1cm4gbGF6eV9j
cmVhdGU8U1ZHQW5pbWF0ZWROdW1iZXJJbXBsPihtX2F6aW11dGgsIGR1bW15KTsKK30KKworU1ZH
QW5pbWF0ZWROdW1iZXJJbXBsICpTVkdGRUxpZ2h0RWxlbWVudEltcGw6OmVsZXZhdGlvbigpIGNv
bnN0Cit7CisgICAgU1ZHU3R5bGVkRWxlbWVudEltcGwgKmR1bW15ID0gMDsKKyAgICByZXR1cm4g
bGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWROdW1iZXJJbXBsPihtX2VsZXZhdGlvbiwgZHVtbXkpOwor
fQorCitTVkdBbmltYXRlZE51bWJlckltcGwgKlNWR0ZFTGlnaHRFbGVtZW50SW1wbDo6eCgpIGNv
bnN0Cit7CisgICAgU1ZHU3R5bGVkRWxlbWVudEltcGwgKmR1bW15ID0gMDsKKyAgICByZXR1cm4g
bGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWROdW1iZXJJbXBsPihtX3gsIGR1bW15KTsKK30KKworU1ZH
QW5pbWF0ZWROdW1iZXJJbXBsICpTVkdGRUxpZ2h0RWxlbWVudEltcGw6OnkoKSBjb25zdAorewor
ICAgIFNWR1N0eWxlZEVsZW1lbnRJbXBsICpkdW1teSA9IDA7CisgICAgcmV0dXJuIGxhenlfY3Jl
YXRlPFNWR0FuaW1hdGVkTnVtYmVySW1wbD4obV95LCBkdW1teSk7Cit9CisKKworU1ZHQW5pbWF0
ZWROdW1iZXJJbXBsICpTVkdGRUxpZ2h0RWxlbWVudEltcGw6OnooKSBjb25zdAoreworICAgIFNW
R1N0eWxlZEVsZW1lbnRJbXBsICpkdW1teSA9IDA7CisgICAgcmV0dXJuIGxhenlfY3JlYXRlPFNW
R0FuaW1hdGVkTnVtYmVySW1wbD4obV96LCBkdW1teSk7Cit9CisKK1NWR0FuaW1hdGVkTnVtYmVy
SW1wbCAqU1ZHRkVMaWdodEVsZW1lbnRJbXBsOjpwb2ludHNBdFgoKSBjb25zdAoreworICAgIFNW
R1N0eWxlZEVsZW1lbnRJbXBsICpkdW1teSA9IDA7CisgICAgcmV0dXJuIGxhenlfY3JlYXRlPFNW
R0FuaW1hdGVkTnVtYmVySW1wbD4obV9wb2ludHNBdFgsIGR1bW15KTsKK30KKworU1ZHQW5pbWF0
ZWROdW1iZXJJbXBsICpTVkdGRUxpZ2h0RWxlbWVudEltcGw6OnBvaW50c0F0WSgpIGNvbnN0Cit7
CisgICAgU1ZHU3R5bGVkRWxlbWVudEltcGwgKmR1bW15ID0gMDsKKyAgICByZXR1cm4gbGF6eV9j
cmVhdGU8U1ZHQW5pbWF0ZWROdW1iZXJJbXBsPihtX3BvaW50c0F0WSwgZHVtbXkpOworfQorCitT
VkdBbmltYXRlZE51bWJlckltcGwgKlNWR0ZFTGlnaHRFbGVtZW50SW1wbDo6cG9pbnRzQXRaKCkg
Y29uc3QKK3sKKyAgICBTVkdTdHlsZWRFbGVtZW50SW1wbCAqZHVtbXkgPSAwOworICAgIHJldHVy
biBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZE51bWJlckltcGw+KG1fcG9pbnRzQXRaLCBkdW1teSk7
Cit9CisKK1NWR0FuaW1hdGVkTnVtYmVySW1wbCAqU1ZHRkVMaWdodEVsZW1lbnRJbXBsOjpzcGVj
dWxhckV4cG9uZW50KCkgY29uc3QKK3sKKyAgICBTVkdTdHlsZWRFbGVtZW50SW1wbCAqZHVtbXkg
PSAwOworICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZE51bWJlckltcGw+KG1fc3Bl
Y3VsYXJFeHBvbmVudCwgZHVtbXkpOworfQorCitTVkdBbmltYXRlZE51bWJlckltcGwgKlNWR0ZF
TGlnaHRFbGVtZW50SW1wbDo6bGltaXRpbmdDb25lQW5nbGUoKSBjb25zdAoreworICAgIFNWR1N0
eWxlZEVsZW1lbnRJbXBsICpkdW1teSA9IDA7CisgICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0Fu
aW1hdGVkTnVtYmVySW1wbD4obV9saW1pdGluZ0NvbmVBbmdsZSwgZHVtbXkpOworfQorCit2b2lk
IFNWR0ZFTGlnaHRFbGVtZW50SW1wbDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoS0RPTTo6TWFwcGVk
QXR0cmlidXRlSW1wbCAqYXR0cikKK3sKKyAgICBLRE9NOjpET01TdHJpbmcgdmFsdWUoYXR0ci0+
dmFsdWUoKSk7CisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6YXppbXV0aEF0dHIp
CisgICAgICAgIGF6aW11dGgoKS0+c2V0QmFzZVZhbCh2YWx1ZS5xc3RyaW5nKCkudG9Eb3VibGUo
KSk7CisgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjplbGV2YXRpb25BdHRy
KQorICAgICAgICBlbGV2YXRpb24oKS0+c2V0QmFzZVZhbCh2YWx1ZS5xc3RyaW5nKCkudG9Eb3Vi
bGUoKSk7CisgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp4QXR0cikKKyAg
ICAgICAgeCgpLT5zZXRCYXNlVmFsKHZhbHVlLnFzdHJpbmcoKS50b0RvdWJsZSgpKTsKKyAgICBl
bHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnlBdHRyKQorICAgICAgICB5KCktPnNl
dEJhc2VWYWwodmFsdWUucXN0cmluZygpLnRvRG91YmxlKCkpOworICAgIGVsc2UgaWYgKGF0dHIt
Pm5hbWUoKSA9PSBTVkdOYW1lczo6ekF0dHIpCisgICAgICAgIHooKS0+c2V0QmFzZVZhbCh2YWx1
ZS5xc3RyaW5nKCkudG9Eb3VibGUoKSk7CisgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNW
R05hbWVzOjpwb2ludHNBdFhBdHRyKQorICAgICAgICBwb2ludHNBdFgoKS0+c2V0QmFzZVZhbCh2
YWx1ZS5xc3RyaW5nKCkudG9Eb3VibGUoKSk7CisgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09
IFNWR05hbWVzOjpwb2ludHNBdFlBdHRyKQorICAgICAgICBwb2ludHNBdFkoKS0+c2V0QmFzZVZh
bCh2YWx1ZS5xc3RyaW5nKCkudG9Eb3VibGUoKSk7CisgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgp
ID09IFNWR05hbWVzOjpwb2ludHNBdFpBdHRyKQorICAgICAgICBwb2ludHNBdFooKS0+c2V0QmFz
ZVZhbCh2YWx1ZS5xc3RyaW5nKCkudG9Eb3VibGUoKSk7CisgICAgZWxzZSBpZiAoYXR0ci0+bmFt
ZSgpID09IFNWR05hbWVzOjpzcGVjdWxhckV4cG9uZW50QXR0cikKKyAgICAgICAgc3BlY3VsYXJF
eHBvbmVudCgpLT5zZXRCYXNlVmFsKHZhbHVlLnFzdHJpbmcoKS50b0RvdWJsZSgpKTsKKyAgICBl
bHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmxpbWl0aW5nQ29uZUFuZ2xlQXR0cikK
KyAgICAgICAgbGltaXRpbmdDb25lQW5nbGUoKS0+c2V0QmFzZVZhbCh2YWx1ZS5xc3RyaW5nKCku
dG9Eb3VibGUoKSk7CisgICAgZWxzZQorICAgICAgICBTVkdFbGVtZW50SW1wbDo6cGFyc2VNYXBw
ZWRBdHRyaWJ1dGUoYXR0cik7Cit9CkluZGV4OiBrc3ZnMi9TVkdGRUxpZ2h0RWxlbWVudEltcGwu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09CmRpZmYgLU5wdSBrc3ZnMi9TVkdGRUxpZ2h0RWxlbWVudEltcGwuaAotLS0g
a3N2ZzIvU1ZHRkVMaWdodEVsZW1lbnRJbXBsLmgJMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMAor
Kysga3N2ZzIvU1ZHRkVMaWdodEVsZW1lbnRJbXBsLmgJMjggTm92IDIwMDUgMDg6MjU6NTAgLTAw
MDAKQEAgLTAsMCArMSw3MSBAQAorLyoKKyBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgTmlrb2xh
cyBaaW1tZXJtYW5uIDx3aWxkZm94QGtkZS5vcmc+CisgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVp
c0BrZGUub3JnPgorIDIwMDUgT2xpdmVyIEh1bnQgPG9qaDE2QHN0dWRlbnQuY2FudGVyYnVyeS5h
Yy5uej4KKyAKKyBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKKyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgCisgVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorIAorIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyBCb3N0
b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaWZuZGVmIEtTVkdfU1ZHRkVMaWdodEVs
ZW1lbnRJbXBsX0gKKyNkZWZpbmUgS1NWR19TVkdGRUxpZ2h0RWxlbWVudEltcGxfSAorI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNWR0VsZW1lbnRJbXBsLmgiCisjaW5jbHVkZSAiS0Nh
bnZhc0ZpbHRlcnMuaCIKKworbmFtZXNwYWNlIEtTVkcKK3sKKyAgICBjbGFzcyBTVkdBbmltYXRl
ZE51bWJlckltcGw7CisgICAgY2xhc3MgU1ZHQW5pbWF0ZWROdW1iZXJMaXN0SW1wbDsKKyAgICBj
bGFzcyBTVkdBbmltYXRlZEVudW1lcmF0aW9uSW1wbDsKKyAgICAKKyAgICBjbGFzcyBTVkdGRUxp
Z2h0RWxlbWVudEltcGwgOiBwdWJsaWMgU1ZHRWxlbWVudEltcGwKKyAgICB7CisgICAgcHVibGlj
OgorICAgICAgICBTVkdGRUxpZ2h0RWxlbWVudEltcGwoY29uc3QgS0RPTTo6UXVhbGlmaWVkTmFt
ZSYgdGFnTmFtZSwgS0RPTTo6RG9jdW1lbnRJbXBsICpkb2MpOworICAgICAgICB2aXJ0dWFsIH5T
VkdGRUxpZ2h0RWxlbWVudEltcGwoKTsKKyAgICAgICAgCisgICAgICAgIC8vICdTVkdDb21wb25l
bnRUcmFuc2ZlckZ1bmN0aW9uRWxlbWVudCcgZnVuY3Rpb25zCisgICAgICAgIFNWR0FuaW1hdGVk
TnVtYmVySW1wbCAqYXppbXV0aCgpIGNvbnN0OworICAgICAgICBTVkdBbmltYXRlZE51bWJlcklt
cGwgKmVsZXZhdGlvbigpIGNvbnN0OworICAgICAgICBTVkdBbmltYXRlZE51bWJlckltcGwgKngo
KSBjb25zdDsKKyAgICAgICAgU1ZHQW5pbWF0ZWROdW1iZXJJbXBsICp5KCkgY29uc3Q7CisgICAg
ICAgIFNWR0FuaW1hdGVkTnVtYmVySW1wbCAqeigpIGNvbnN0OworICAgICAgICBTVkdBbmltYXRl
ZE51bWJlckltcGwgKnBvaW50c0F0WCgpIGNvbnN0OworICAgICAgICBTVkdBbmltYXRlZE51bWJl
ckltcGwgKnBvaW50c0F0WSgpIGNvbnN0OworICAgICAgICBTVkdBbmltYXRlZE51bWJlckltcGwg
KnBvaW50c0F0WigpIGNvbnN0OworICAgICAgICBTVkdBbmltYXRlZE51bWJlckltcGwgKnNwZWN1
bGFyRXhwb25lbnQoKSBjb25zdDsKKyAgICAgICAgU1ZHQW5pbWF0ZWROdW1iZXJJbXBsICpsaW1p
dGluZ0NvbmVBbmdsZSgpIGNvbnN0OworICAgICAgICAKKyAgICAgICAgdmlydHVhbCBLQ0xpZ2h0
U291cmNlICpsaWdodFNvdXJjZSgpIGNvbnN0ID0gMDsKKyAgICAgICAgCisgICAgICAgIC8vIERl
cml2ZWQgZnJvbTogJ0VsZW1lbnRJbXBsJworICAgICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBw
ZWRBdHRyaWJ1dGUoS0RPTTo6TWFwcGVkQXR0cmlidXRlSW1wbCAqYXR0cik7ICAgICAgICAKKyAg
ICBwcml2YXRlOgorICAgICAgICBtdXRhYmxlIFNoYXJlZFB0cjxTVkdBbmltYXRlZE51bWJlcklt
cGw+IG1fYXppbXV0aDsKKyAgICAgICAgbXV0YWJsZSBTaGFyZWRQdHI8U1ZHQW5pbWF0ZWROdW1i
ZXJJbXBsPiBtX2VsZXZhdGlvbjsKKyAgICAgICAgbXV0YWJsZSBTaGFyZWRQdHI8U1ZHQW5pbWF0
ZWROdW1iZXJJbXBsPiBtX3g7CisgICAgICAgIG11dGFibGUgU2hhcmVkUHRyPFNWR0FuaW1hdGVk
TnVtYmVySW1wbD4gbV95OworICAgICAgICBtdXRhYmxlIFNoYXJlZFB0cjxTVkdBbmltYXRlZE51
bWJlckltcGw+IG1fejsKKyAgICAgICAgbXV0YWJsZSBTaGFyZWRQdHI8U1ZHQW5pbWF0ZWROdW1i
ZXJJbXBsPiBtX3BvaW50c0F0WDsKKyAgICAgICAgbXV0YWJsZSBTaGFyZWRQdHI8U1ZHQW5pbWF0
ZWROdW1iZXJJbXBsPiBtX3BvaW50c0F0WTsKKyAgICAgICAgbXV0YWJsZSBTaGFyZWRQdHI8U1ZH
QW5pbWF0ZWROdW1iZXJJbXBsPiBtX3BvaW50c0F0WjsKKyAgICAgICAgbXV0YWJsZSBTaGFyZWRQ
dHI8U1ZHQW5pbWF0ZWROdW1iZXJJbXBsPiBtX3NwZWN1bGFyRXhwb25lbnQ7CisgICAgICAgIG11
dGFibGUgU2hhcmVkUHRyPFNWR0FuaW1hdGVkTnVtYmVySW1wbD4gbV9saW1pdGluZ0NvbmVBbmds
ZTsKKyAgICAgICAgCisgICAgfTsKK307CisKKyNlbmRpZgpJbmRleDoga3N2ZzIvU1ZHRkVQb2lu
dExpZ2h0RWxlbWVudEltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtTnB1IGtzdmcyL1NWR0ZFUG9p
bnRMaWdodEVsZW1lbnRJbXBsLmNwcAotLS0ga3N2ZzIvU1ZHRkVQb2ludExpZ2h0RWxlbWVudElt
cGwuY3BwCTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAKKysrIGtzdmcyL1NWR0ZFUG9pbnRMaWdo
dEVsZW1lbnRJbXBsLmNwcAkyOCBOb3YgMjAwNSAwODoyODoxNyAtMDAwMApAQCAtMCwwICsxLDIy
IEBACisjaW5jbHVkZSAiU1ZHRkVQb2ludExpZ2h0RWxlbWVudEltcGwuaCIKKyNpbmNsdWRlICJT
VkdBbmltYXRlZFN0cmluZ0ltcGwuaCIKKyNpbmNsdWRlICJTVkdBbmltYXRlZE51bWJlckltcGwu
aCIKKyNpbmNsdWRlICJTVkdBbmltYXRlZEVudW1lcmF0aW9uSW1wbC5oIgorI2luY2x1ZGUgIlNW
R0RPTUltcGxlbWVudGF0aW9uSW1wbC5oIgorCit1c2luZyBuYW1lc3BhY2UgS1NWRzsKKworU1ZH
RkVQb2ludExpZ2h0RWxlbWVudEltcGw6OlNWR0ZFUG9pbnRMaWdodEVsZW1lbnRJbXBsKGNvbnN0
IEtET006OlF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIEtET006OkRvY3VtZW50SW1wbCAqZG9jKSA6
IAorU1ZHRkVMaWdodEVsZW1lbnRJbXBsKHRhZ05hbWUsIGRvYykKK3sKK30KKworU1ZHRkVQb2lu
dExpZ2h0RWxlbWVudEltcGw6On5TVkdGRVBvaW50TGlnaHRFbGVtZW50SW1wbCgpCit7Cit9CisK
K0tDTGlnaHRTb3VyY2UgKlNWR0ZFUG9pbnRMaWdodEVsZW1lbnRJbXBsOjpsaWdodFNvdXJjZSgp
IGNvbnN0Cit7CisgICAgS0NhbnZhc1BvaW50M0YgcG9zKHgoKS0+YmFzZVZhbCgpLCB5KCktPmJh
c2VWYWwoKSwgeigpLT5iYXNlVmFsKCkpOworICAgIHJldHVybiBuZXcgS0NQb2ludExpZ2h0U291
cmNlKHBvcyk7Cit9CkluZGV4OiBrc3ZnMi9TVkdGRVBvaW50TGlnaHRFbGVtZW50SW1wbC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KZGlmZiAtTnB1IGtzdmcyL1NWR0ZFUG9pbnRMaWdodEVsZW1lbnRJbXBsLmgKLS0t
IGtzdmcyL1NWR0ZFUG9pbnRMaWdodEVsZW1lbnRJbXBsLmgJMSBKYW4gMTk3MCAwMDowMDowMCAt
MDAwMAorKysga3N2ZzIvU1ZHRkVQb2ludExpZ2h0RWxlbWVudEltcGwuaAkyOCBOb3YgMjAwNSAw
ODoyNDozMSAtMDAwMApAQCAtMCwwICsxLDE3IEBACisjaWZuZGVmIEtTVkdfU1ZHRkVQb2ludExp
Z2h0RWxlbWVudEltcGxfSAorI2RlZmluZSBLU1ZHX1NWR0ZFUG9pbnRMaWdodEVsZW1lbnRJbXBs
X0gKKworI2luY2x1ZGUgIlNWR0ZFTGlnaHRFbGVtZW50SW1wbC5oIgorCituYW1lc3BhY2UgS1NW
RworeworICAgIGNsYXNzIFNWR0ZFUG9pbnRMaWdodEVsZW1lbnRJbXBsIDogcHVibGljIFNWR0ZF
TGlnaHRFbGVtZW50SW1wbAorICAgIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICBTVkdGRVBv
aW50TGlnaHRFbGVtZW50SW1wbChjb25zdCBLRE9NOjpRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBL
RE9NOjpEb2N1bWVudEltcGwgKmRvYyk7CisgICAgICAgIHZpcnR1YWwgflNWR0ZFUG9pbnRMaWdo
dEVsZW1lbnRJbXBsKCk7CisgICAgICAgIHZpcnR1YWwgS0NMaWdodFNvdXJjZSAqbGlnaHRTb3Vy
Y2UoKSBjb25zdDsKKyAgICB9OworfTsKKworI2VuZGlmCkluZGV4OiBrc3ZnMi9TVkdGRVNwZWN1
bGFyTGlnaHRpbmdFbGVtZW50SW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpkaWZmIC1OcHUga3N2ZzIvU1ZH
RkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudEltcGwuY3BwCi0tLSBrc3ZnMi9TVkdGRVNwZWN1bGFy
TGlnaHRpbmdFbGVtZW50SW1wbC5jcHAJMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMAorKysga3N2
ZzIvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudEltcGwuY3BwCTI4IE5vdiAyMDA1IDA4OjQw
OjA3IC0wMDAwCkBAIC0wLDAgKzEsMTUzIEBACisvKgorIENvcHlyaWdodCAoQykgMjAwNSBPbGl2
ZXIgSHVudCA8b2poMTZAc3R1ZGVudC5jYW50ZXJidXJ5LmFjLm56PgorIAorIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAKKyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgCisgWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNB
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlIDxxc3RyaW5nbGlzdC5oPgor
CisjaW5jbHVkZSA8a2RvbS9jb3JlL0F0dHJJbXBsLmg+CisKKyNpbmNsdWRlIDxrY2FudmFzL0tD
YW52YXMuaD4KKyNpbmNsdWRlIDxrY2FudmFzL0tDYW52YXNSZWdpc3RyeS5oPgorI2luY2x1ZGUg
PGtjYW52YXMvS0NhbnZhc0ZpbHRlcnMuaD4KKyNpbmNsdWRlIDxrY2FudmFzL2RldmljZS9LUmVu
ZGVyaW5nRGV2aWNlLmg+CisKKyNpbmNsdWRlICJTVkdOYW1lcy5oIgorI2luY2x1ZGUgIlNWR0hl
bHBlci5oIgorI2luY2x1ZGUgIlNWR1JlbmRlclN0eWxlLmgiCisjaW5jbHVkZSAiU1ZHQW5pbWF0
ZWRDb2xvckltcGwuaCIKKyNpbmNsdWRlICJTVkdBbmltYXRlZE51bWJlckltcGwuaCIKKyNpbmNs
dWRlICJTVkdBbmltYXRlZFN0cmluZ0ltcGwuaCIKKyNpbmNsdWRlICJTVkdGRUxpZ2h0RWxlbWVu
dEltcGwuaCIKKyNpbmNsdWRlICJTVkdET01JbXBsZW1lbnRhdGlvbkltcGwuaCIKKyNpbmNsdWRl
ICJTVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50SW1wbC5oIgorCisKK3VzaW5nIG5hbWVzcGFj
ZSBLU1ZHOworCitTVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50SW1wbDo6U1ZHRkVTcGVjdWxh
ckxpZ2h0aW5nRWxlbWVudEltcGwoY29uc3QgS0RPTTo6UXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwg
S0RPTTo6RG9jdW1lbnRJbXBsICpkb2MpIDogCitTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0
dHJpYnV0ZXNJbXBsKHRhZ05hbWUsIGRvYykKK3sKKyAgICBtX2ZpbHRlckVmZmVjdCA9IDA7Cit9
CisKK1NWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnRJbXBsOjp+U1ZHRkVTcGVjdWxhckxpZ2h0
aW5nRWxlbWVudEltcGwoKQoreworICAgIGRlbGV0ZSBtX2ZpbHRlckVmZmVjdDsKK30KKworU1ZH
QW5pbWF0ZWRTdHJpbmdJbXBsICpTVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50SW1wbDo6aW4x
KCkgY29uc3QKK3sKKyAgICBTVkdTdHlsZWRFbGVtZW50SW1wbCAqZHVtbXkgPSAwOworICAgIHJl
dHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZFN0cmluZ0ltcGw+KG1faW4xLCBkdW1teSk7Cit9
CisKK1NWR0FuaW1hdGVkTnVtYmVySW1wbCAqU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudElt
cGw6OnNwZWN1bGFyQ29uc3RhbnQoKSBjb25zdAoreworICAgIFNWR1N0eWxlZEVsZW1lbnRJbXBs
ICpkdW1teSA9IDA7CisgICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTnVtYmVySW1w
bD4obV9zcGVjdWxhckNvbnN0YW50LCBkdW1teSk7Cit9CisKK1NWR0FuaW1hdGVkTnVtYmVySW1w
bCAqU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudEltcGw6OnNwZWN1bGFyRXhwb25lbnQoKSBj
b25zdAoreworICAgIFNWR1N0eWxlZEVsZW1lbnRJbXBsICpkdW1teSA9IDA7CisgICAgcmV0dXJu
IGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTnVtYmVySW1wbD4obV9zcGVjdWxhckV4cG9uZW50LCBk
dW1teSk7Cit9CisKK1NWR0FuaW1hdGVkTnVtYmVySW1wbCAqU1ZHRkVTcGVjdWxhckxpZ2h0aW5n
RWxlbWVudEltcGw6OnN1cmZhY2VTY2FsZSgpIGNvbnN0Cit7CisgICAgU1ZHU3R5bGVkRWxlbWVu
dEltcGwgKmR1bW15ID0gMDsKKyAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWROdW1i
ZXJJbXBsPihtX3N1cmZhY2VTY2FsZSwgZHVtbXkpOworfQorCitTVkdBbmltYXRlZE51bWJlcklt
cGwgKlNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnRJbXBsOjprZXJuZWxVbml0TGVuZ3RoWCgp
IGNvbnN0Cit7CisgICAgU1ZHU3R5bGVkRWxlbWVudEltcGwgKmR1bW15ID0gMDsKKyAgICByZXR1
cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWROdW1iZXJJbXBsPihtX2tlcm5lbFVuaXRMZW5ndGhY
LCBkdW1teSk7Cit9CisKK1NWR0FuaW1hdGVkTnVtYmVySW1wbCAqU1ZHRkVTcGVjdWxhckxpZ2h0
aW5nRWxlbWVudEltcGw6Omtlcm5lbFVuaXRMZW5ndGhZKCkgY29uc3QKK3sKKyAgICBTVkdTdHls
ZWRFbGVtZW50SW1wbCAqZHVtbXkgPSAwOworICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmlt
YXRlZE51bWJlckltcGw+KG1fa2VybmVsVW5pdExlbmd0aFksIGR1bW15KTsKK30KKworU1ZHQW5p
bWF0ZWRDb2xvckltcGwgICpTVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50SW1wbDo6bGlnaHRp
bmdDb2xvcigpIGNvbnN0Cit7CisgICAgU1ZHU3R5bGVkRWxlbWVudEltcGwgKmR1bW15ID0gMDsK
KyAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWRDb2xvckltcGw+KG1fbGlnaHRpbmdD
b2xvciwgZHVtbXkpOworfQorCit2b2lkIFNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnRJbXBs
OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShLRE9NOjpNYXBwZWRBdHRyaWJ1dGVJbXBsICphdHRyKQor
eyAgICAKKyAgICBLRE9NOjpET01TdHJpbmcgdmFsdWUoYXR0ci0+dmFsdWUoKSk7CisgICAgaWYg
KGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6aW5BdHRyKQorICAgICAgICBpbjEoKS0+c2V0QmFz
ZVZhbCh2YWx1ZS5pbXBsKCkpOworICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1l
czo6c3VyZmFjZVNjYWxlQXR0cikKKyAgICAgICAgc3VyZmFjZVNjYWxlKCktPnNldEJhc2VWYWwo
dmFsdWUucXN0cmluZygpLnRvRG91YmxlKCkpOworICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9
PSBTVkdOYW1lczo6c3BlY3VsYXJDb25zdGFudEF0dHIpCisgICAgICAgIHNwZWN1bGFyQ29uc3Rh
bnQoKS0+c2V0QmFzZVZhbCh2YWx1ZS5xc3RyaW5nKCkudG9Eb3VibGUoKSk7CisgICAgZWxzZSBp
ZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpzcGVjdWxhckV4cG9uZW50QXR0cikKKyAgICAg
ICAgc3BlY3VsYXJFeHBvbmVudCgpLT5zZXRCYXNlVmFsKHZhbHVlLnFzdHJpbmcoKS50b0RvdWJs
ZSgpKTsKKyAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6Omtlcm5lbFVuaXRM
ZW5ndGhBdHRyKSB7CisgICAgICAgIFFTdHJpbmdMaXN0IG51bWJlcnMgPSBRU3RyaW5nTGlzdDo6
c3BsaXQoJyAnLCB2YWx1ZS5xc3RyaW5nKCkpOworICAgICAgICBrZXJuZWxVbml0TGVuZ3RoWCgp
LT5zZXRCYXNlVmFsKG51bWJlcnNbMF0udG9Eb3VibGUoKSk7CisgICAgICAgIGlmIChudW1iZXJz
LmNvdW50KCkgPT0gMSkKKyAgICAgICAgICAgIGtlcm5lbFVuaXRMZW5ndGhZKCktPnNldEJhc2VW
YWwobnVtYmVyc1swXS50b0RvdWJsZSgpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAga2Vy
bmVsVW5pdExlbmd0aFkoKS0+c2V0QmFzZVZhbChudW1iZXJzWzFdLnRvRG91YmxlKCkpOworICAg
IH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpsaWdodGluZ19jb2xvckF0dHIp
CisgICAgICAgIGxpZ2h0aW5nQ29sb3IoKS0+c2V0QmFzZVZhbChuZXcgU1ZHQ29sb3JJbXBsKHZh
bHVlLmltcGwoKSkpOworICAgIGVsc2UKKyAgICAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRh
cmRBdHRyaWJ1dGVzSW1wbDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7Cit9CisKK0tDYW52
YXNGRVNwZWN1bGFyTGlnaHRpbmcgKlNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnRJbXBsOjpm
aWx0ZXJFZmZlY3QoKSBjb25zdAoreworICAgIGlmICghbV9maWx0ZXJFZmZlY3QpIAorICAgICAg
ICBtX2ZpbHRlckVmZmVjdCA9IHN0YXRpY19jYXN0PEtDYW52YXNGRVNwZWN1bGFyTGlnaHRpbmcg
Kj4oUVBhaW50ZXI6OnJlbmRlcmluZ0RldmljZSgpLT5jcmVhdGVGaWx0ZXJFZmZlY3QoRkVfU1BF
Q1VMQVJfTElHSFRJTkcpKTsKKyAgICBtX2ZpbHRlckVmZmVjdC0+c2V0SW4oS0RPTTo6RE9NU3Ry
aW5nKGluMSgpLT5iYXNlVmFsKCkpLnFzdHJpbmcoKSk7CisgICAgc2V0U3RhbmRhcmRBdHRyaWJ1
dGVzKG1fZmlsdGVyRWZmZWN0KTsKKyAgICBtX2ZpbHRlckVmZmVjdC0+c2V0U3BlY3VsYXJDb25z
dGFudCgoc3BlY3VsYXJDb25zdGFudCgpLT5iYXNlVmFsKCkpKTsKKyAgICBtX2ZpbHRlckVmZmVj
dC0+c2V0U3BlY3VsYXJFeHBvbmVudCgoc3BlY3VsYXJFeHBvbmVudCgpLT5iYXNlVmFsKCkpKTsK
KyAgICBtX2ZpbHRlckVmZmVjdC0+c2V0U3VyZmFjZVNjYWxlKChzdXJmYWNlU2NhbGUoKS0+YmFz
ZVZhbCgpKSk7CisgICAgbV9maWx0ZXJFZmZlY3QtPnNldEtlcm5lbFVuaXRMZW5ndGhYKChrZXJu
ZWxVbml0TGVuZ3RoWCgpLT5iYXNlVmFsKCkpKTsKKyAgICBtX2ZpbHRlckVmZmVjdC0+c2V0S2Vy
bmVsVW5pdExlbmd0aFkoKGtlcm5lbFVuaXRMZW5ndGhZKCktPmJhc2VWYWwoKSkpOworICAgIG1f
ZmlsdGVyRWZmZWN0LT5zZXRMaWdodGluZ0NvbG9yKGxpZ2h0aW5nQ29sb3IoKS0+YmFzZVZhbCgp
LT5jb2xvcigpKTsKKyAgICB1cGRhdGVMaWdodHMoKTsKKyAgICByZXR1cm4gbV9maWx0ZXJFZmZl
Y3Q7Cit9CisKK3ZvaWQgU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudEltcGw6OnVwZGF0ZUxp
Z2h0cygpIGNvbnN0Cit7CisgICAgaWYgKCFtX2ZpbHRlckVmZmVjdCkKKyAgICAgICAgcmV0dXJu
OworICAgIEtET006Ok5vZGVJbXBsICpuID0gZmlyc3RDaGlsZCgpOworICAgIGlmICghbikgCisg
ICAgICAgIHJldHVybjsKKyAgICBLQ0xpZ2h0U291cmNlICpsaWdodCA9IDA7CisgICAgCisgICAg
Zm9yKEtET006Ok5vZGVJbXBsICpuID0gZmlyc3RDaGlsZCgpOyBuOyBuID0gbi0+bmV4dFNpYmxp
bmcoKSkgeworICAgICAgICBpZiAobi0+aGFzVGFnTmFtZShTVkdOYW1lczo6ZmVEaXN0YW50TGln
aHRUYWcpfHxuLT5oYXNUYWdOYW1lKFNWR05hbWVzOjpmZVBvaW50TGlnaHRUYWcpfHxuLT5oYXNU
YWdOYW1lKFNWR05hbWVzOjpmZVNwb3RMaWdodFRhZykpIHsKKyAgICAgICAgICAgIFNWR0ZFTGln
aHRFbGVtZW50SW1wbCAqbGlnaHROb2RlID0gc3RhdGljX2Nhc3Q8U1ZHRkVMaWdodEVsZW1lbnRJ
bXBsICo+KG4pOyAKKyAgICAgICAgICAgIGxpZ2h0ID0gbGlnaHROb2RlLT5saWdodFNvdXJjZSgp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgbV9maWx0ZXJFZmZl
Y3QtPnNldExpZ2h0U291cmNlKGxpZ2h0KTsKK30KSW5kZXg6IGtzdmcyL1NWR0ZFU3BlY3VsYXJM
aWdodGluZ0VsZW1lbnRJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpkaWZmIC1OcHUga3N2ZzIvU1ZHRkVTcGVj
dWxhckxpZ2h0aW5nRWxlbWVudEltcGwuaAotLS0ga3N2ZzIvU1ZHRkVTcGVjdWxhckxpZ2h0aW5n
RWxlbWVudEltcGwuaAkxIEphbiAxOTcwIDAwOjAwOjAwIC0wMDAwCisrKyBrc3ZnMi9TVkdGRVNw
ZWN1bGFyTGlnaHRpbmdFbGVtZW50SW1wbC5oCTI4IE5vdiAyMDA1IDA1OjM3OjA3IC0wMDAwCkBA
IC0wLDAgKzEsNjkgQEAKKy8qCisgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IE5pa29sYXMgWmlt
bWVybWFubiA8d2lsZGZveEBrZGUub3JnPgorIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2Rl
Lm9yZz4KKyAyMDA1IE9saXZlciBIdW50IDxvamgxNkBzdHVkZW50LmNhbnRlcmJ1cnkuYWMubno+
CisgCisgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIAorIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAKKyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgQm9zdG9uLCBN
QSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2lmbmRlZiBLU1ZHX1NWR0ZFU3BlY3VsYXJMaWdo
dGluZ0VsZW1lbnRJbXBsX0gKKyNkZWZpbmUgS1NWR19TVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVt
ZW50SW1wbF9ICisKKyNpbmNsdWRlICJTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0
ZXNJbXBsLmgiCisjaW5jbHVkZSAiS0NhbnZhc0ZpbHRlcnMuaCIKKworbmFtZXNwYWNlIEtTVkcK
K3sKKyAgICBjbGFzcyBTVkdBbmltYXRlZE51bWJlckltcGw7CisgICAgY2xhc3MgU1ZHQW5pbWF0
ZWRTdHJpbmdJbXBsOworICAgIGNsYXNzIFNWR0FuaW1hdGVkQ29sb3JJbXBsOworICAgIAorICAg
IGNsYXNzIFNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnRJbXBsIDogcHVibGljIFNWR0ZpbHRl
clByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlc0ltcGwKKyAgICB7CisgICAgcHVibGljOgorICAg
ICAgICBTVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50SW1wbChjb25zdCBLRE9NOjpRdWFsaWZp
ZWROYW1lJiB0YWdOYW1lLCBLRE9NOjpEb2N1bWVudEltcGwgKmRvYyk7CisgICAgICAgIHZpcnR1
YWwgflNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnRJbXBsKCk7CisgICAgICAgIAorICAgICAg
ICAvLyAnU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50JyBmdW5jdGlvbnMKKyAgICAgICAgU1ZH
QW5pbWF0ZWRTdHJpbmdJbXBsICppbjEoKSBjb25zdDsKKyAgICAgICAgU1ZHQW5pbWF0ZWROdW1i
ZXJJbXBsICpzcGVjdWxhckNvbnN0YW50KCkgY29uc3Q7CisgICAgICAgIFNWR0FuaW1hdGVkTnVt
YmVySW1wbCAqc3BlY3VsYXJFeHBvbmVudCgpIGNvbnN0OworICAgICAgICBTVkdBbmltYXRlZE51
bWJlckltcGwgKnN1cmZhY2VTY2FsZSgpIGNvbnN0OworICAgICAgICBTVkdBbmltYXRlZE51bWJl
ckltcGwgKmtlcm5lbFVuaXRMZW5ndGhYKCkgY29uc3Q7CisgICAgICAgIFNWR0FuaW1hdGVkTnVt
YmVySW1wbCAqa2VybmVsVW5pdExlbmd0aFkoKSBjb25zdDsKKyAgICAgICAgU1ZHQW5pbWF0ZWRD
b2xvckltcGwgICpsaWdodGluZ0NvbG9yKCkgY29uc3Q7CisgICAgICAgIAorICAgICAgICAvLyBE
ZXJpdmVkIGZyb206ICdFbGVtZW50SW1wbCcKKyAgICAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFw
cGVkQXR0cmlidXRlKEtET006Ok1hcHBlZEF0dHJpYnV0ZUltcGwgKmF0dHIpOworICAgICAgICAK
KyAgICAgICAgdmlydHVhbCBLQ2FudmFzRkVTcGVjdWxhckxpZ2h0aW5nICpmaWx0ZXJFZmZlY3Qo
KSBjb25zdDsKKyAgICBwcml2YXRlOgorICAgICAgICBtdXRhYmxlIFNoYXJlZFB0cjxTVkdBbmlt
YXRlZFN0cmluZ0ltcGw+IG1faW4xOworICAgICAgICBtdXRhYmxlIFNoYXJlZFB0cjxTVkdBbmlt
YXRlZE51bWJlckltcGw+IG1fc3BlY3VsYXJDb25zdGFudDsKKyAgICAgICAgbXV0YWJsZSBTaGFy
ZWRQdHI8U1ZHQW5pbWF0ZWROdW1iZXJJbXBsPiBtX3NwZWN1bGFyRXhwb25lbnQ7CisgICAgICAg
IG11dGFibGUgU2hhcmVkUHRyPFNWR0FuaW1hdGVkTnVtYmVySW1wbD4gbV9zdXJmYWNlU2NhbGU7
CisgICAgICAgIG11dGFibGUgU2hhcmVkUHRyPFNWR0FuaW1hdGVkQ29sb3JJbXBsPiAgbV9saWdo
dGluZ0NvbG9yOworICAgICAgICBtdXRhYmxlIFNoYXJlZFB0cjxTVkdBbmltYXRlZE51bWJlcklt
cGw+IG1fa2VybmVsVW5pdExlbmd0aFg7CisgICAgICAgIG11dGFibGUgU2hhcmVkUHRyPFNWR0Fu
aW1hdGVkTnVtYmVySW1wbD4gbV9rZXJuZWxVbml0TGVuZ3RoWTsKKyAgICAgICAgLy9uZWVkIG90
aGVyIHByb3BlcnRpZXMgaGVyZS4uLgorICAgICAgICBtdXRhYmxlIEtDYW52YXNGRVNwZWN1bGFy
TGlnaHRpbmcgKm1fZmlsdGVyRWZmZWN0OworICAgICAgICAKKyAgICAgICAgLy9saWdodCBtYW5h
Z2VtZW50CisgICAgICAgIHZvaWQgdXBkYXRlTGlnaHRzKCkgY29uc3Q7CisgICAgfTsKK307CisK
KyNlbmRpZgpJbmRleDoga3N2ZzIvU1ZHRkVTcG90TGlnaHRFbGVtZW50SW1wbC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpkaWZmIC1OcHUga3N2ZzIvU1ZHRkVTcG90TGlnaHRFbGVtZW50SW1wbC5jcHAKLS0tIGtz
dmcyL1NWR0ZFU3BvdExpZ2h0RWxlbWVudEltcGwuY3BwCTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAw
MDAKKysrIGtzdmcyL1NWR0ZFU3BvdExpZ2h0RWxlbWVudEltcGwuY3BwCTI4IE5vdiAyMDA1IDA4
OjI4OjE3IC0wMDAwCkBAIC0wLDAgKzEsMjcgQEAKKyNpbmNsdWRlICJTVkdGRVNwb3RMaWdodEVs
ZW1lbnRJbXBsLmgiCisjaW5jbHVkZSAiU1ZHQW5pbWF0ZWRTdHJpbmdJbXBsLmgiCisjaW5jbHVk
ZSAiU1ZHQW5pbWF0ZWROdW1iZXJJbXBsLmgiCisjaW5jbHVkZSAiU1ZHQW5pbWF0ZWRFbnVtZXJh
dGlvbkltcGwuaCIKKyNpbmNsdWRlICJTVkdET01JbXBsZW1lbnRhdGlvbkltcGwuaCIKKwordXNp
bmcgbmFtZXNwYWNlIEtTVkc7CisKK1NWR0ZFU3BvdExpZ2h0RWxlbWVudEltcGw6OlNWR0ZFU3Bv
dExpZ2h0RWxlbWVudEltcGwoY29uc3QgS0RPTTo6UXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgS0RP
TTo6RG9jdW1lbnRJbXBsICpkb2MpIDogCitTVkdGRUxpZ2h0RWxlbWVudEltcGwodGFnTmFtZSwg
ZG9jKQoreworfQorCitTVkdGRVNwb3RMaWdodEVsZW1lbnRJbXBsOjp+U1ZHRkVTcG90TGlnaHRF
bGVtZW50SW1wbCgpCit7Cit9CisKK0tDTGlnaHRTb3VyY2UgKlNWR0ZFU3BvdExpZ2h0RWxlbWVu
dEltcGw6OmxpZ2h0U291cmNlKCkgY29uc3QKK3sKKyAgICBLQ2FudmFzUG9pbnQzRiBwb3MoeCgp
LT5iYXNlVmFsKCksIHkoKS0+YmFzZVZhbCgpLCB6KCktPmJhc2VWYWwoKSk7CisgICAgLy9jb252
ZXJ0IGxvb2tBdCB0byBhIGRpcmVjdGlvbgorICAgIEtDYW52YXNQb2ludDNGIGRpcmVjdGlvbihw
b2ludHNBdFgoKS0+YmFzZVZhbCgpIC0gcG9zLngoKSwgCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHBvaW50c0F0WSgpLT5iYXNlVmFsKCkgLSBwb3MueSgpLCAKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcG9pbnRzQXRaKCktPmJhc2VWYWwoKSAtIHBvcy56KCkpOworICAgIGRp
cmVjdGlvbi5ub3JtYWxpemUoKTsKKyAgICByZXR1cm4gbmV3IEtDU3BvdExpZ2h0U291cmNlKHBv
cywgZGlyZWN0aW9uLCBzcGVjdWxhckV4cG9uZW50KCktPmJhc2VWYWwoKSwgbGltaXRpbmdDb25l
QW5nbGUoKS0+YmFzZVZhbCgpKTsKK30KSW5kZXg6IGtzdmcyL1NWR0ZFU3BvdExpZ2h0RWxlbWVu
dEltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09CmRpZmYgLU5wdSBrc3ZnMi9TVkdGRVNwb3RMaWdodEVsZW1lbnRJ
bXBsLmgKLS0tIGtzdmcyL1NWR0ZFU3BvdExpZ2h0RWxlbWVudEltcGwuaAkxIEphbiAxOTcwIDAw
OjAwOjAwIC0wMDAwCisrKyBrc3ZnMi9TVkdGRVNwb3RMaWdodEVsZW1lbnRJbXBsLmgJMjggTm92
IDIwMDUgMDg6MjQ6MzEgLTAwMDAKQEAgLTAsMCArMSwxNyBAQAorI2lmbmRlZiBLU1ZHX1NWR0ZF
U3BvdExpZ2h0RWxlbWVudEltcGxfSAorI2RlZmluZSBLU1ZHX1NWR0ZFU3BvdExpZ2h0RWxlbWVu
dEltcGxfSAorCisjaW5jbHVkZSAiU1ZHRkVMaWdodEVsZW1lbnRJbXBsLmgiCisKK25hbWVzcGFj
ZSBLU1ZHCit7CisgICAgY2xhc3MgU1ZHRkVTcG90TGlnaHRFbGVtZW50SW1wbCA6IHB1YmxpYyBT
VkdGRUxpZ2h0RWxlbWVudEltcGwKKyAgICB7CisgICAgcHVibGljOgorICAgICAgICBTVkdGRVNw
b3RMaWdodEVsZW1lbnRJbXBsKGNvbnN0IEtET006OlF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIEtE
T006OkRvY3VtZW50SW1wbCAqZG9jKTsKKyAgICAgICAgdmlydHVhbCB+U1ZHRkVTcG90TGlnaHRF
bGVtZW50SW1wbCgpOworICAgICAgICB2aXJ0dWFsIEtDTGlnaHRTb3VyY2UgKmxpZ2h0U291cmNl
KCkgY29uc3Q7CisgICAgfTsKK307CisKKyNlbmRpZgpJbmRleDoga3N2ZzIvc3ZnL1NWR0VsZW1l
bnRJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3Zn
Mi9zdmcvU1ZHRWxlbWVudEltcGwuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEyCmRpZmYg
LXAgLXUgLXIxLjEyIGtzdmcyL3N2Zy9TVkdFbGVtZW50SW1wbC5jcHAKLS0tIGtzdmcyL3N2Zy9T
VkdFbGVtZW50SW1wbC5jcHAJMjYgTm92IDIwMDUgMjI6MzU6NDcgLTAwMDAJMS4xMgorKysga3N2
ZzIvc3ZnL1NWR0VsZW1lbnRJbXBsLmNwcAkyOCBOb3YgMjAwNSAxMjo1NjoxNiAtMDAwMApAQCAt
MzIsNyArMzIsNyBAQAogI2luY2x1ZGUgImtzdmcuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgog
I2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKLSNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRl
ICJodG1sbmFtZXMuaCIKICNpbmNsdWRlICJTVkdFbGVtZW50SW1wbC5oIgogI2luY2x1ZGUgIlNW
R1NWR0VsZW1lbnRJbXBsLmgiCiAjaW5jbHVkZSAiU1ZHRE9NSW1wbGVtZW50YXRpb25JbXBsLmgi
CkluZGV4OiBrc3ZnMi9zdmcvU1ZHRkVDb21wb3NpdGVFbGVtZW50SW1wbC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvc3ZnL1NWR0ZFQ29tcG9zaXRl
RWxlbWVudEltcGwuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjExCmRpZmYgLXAgLXUgLXIx
LjExIGtzdmcyL3N2Zy9TVkdGRUNvbXBvc2l0ZUVsZW1lbnRJbXBsLmNwcAotLS0ga3N2ZzIvc3Zn
L1NWR0ZFQ29tcG9zaXRlRWxlbWVudEltcGwuY3BwCTI3IE5vdiAyMDA1IDExOjAyOjIyIC0wMDAw
CTEuMTEKKysrIGtzdmcyL3N2Zy9TVkdGRUNvbXBvc2l0ZUVsZW1lbnRJbXBsLmNwcAkyOCBOb3Yg
MjAwNSAxMjo1NjoxNiAtMDAwMApAQCAtMTExLDEzICsxMTEsMjEgQEAgdm9pZCBTVkdGRUNvbXBv
c2l0ZUVsZW1lbnRJbXBsOjpwYXJzZU1hcAogICAgICAgICAgICAgX29wZXJhdG9yKCktPnNldEJh
c2VWYWwoU1ZHX0ZFQ09NUE9TSVRFX09QRVJBVE9SX0FUT1ApOwogICAgICAgICBlbHNlIGlmKHZh
bHVlID09ICJ4b3IiKQogICAgICAgICAgICAgX29wZXJhdG9yKCktPnNldEJhc2VWYWwoU1ZHX0ZF
Q09NUE9TSVRFX09QRVJBVE9SX1hPUik7Ci0gICAgICAgIGVsc2UgaWYodmFsdWUgPT0gImFyaXRo
bWF0aWMiKQorICAgICAgICBlbHNlIGlmKHZhbHVlID09ICJhcml0aG1ldGljIikKICAgICAgICAg
ICAgIF9vcGVyYXRvcigpLT5zZXRCYXNlVmFsKFNWR19GRUNPTVBPU0lURV9PUEVSQVRPUl9BUklU
SE1FVElDKTsKICAgICB9CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpp
bkF0dHIpCiAgICAgICAgIGluMSgpLT5zZXRCYXNlVmFsKHZhbHVlLmltcGwoKSk7CiAgICAgZWxz
ZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjppbjJBdHRyKQogICAgICAgICBpbjIoKS0+
c2V0QmFzZVZhbCh2YWx1ZS5pbXBsKCkpOworICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBT
VkdOYW1lczo6azFBdHRyKQorICAgICAgICBrMSgpLT5zZXRCYXNlVmFsKHZhbHVlLnFzdHJpbmco
KS50b0RvdWJsZSgpKTsKKyAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6Omsy
QXR0cikKKyAgICAgICAgazIoKS0+c2V0QmFzZVZhbCh2YWx1ZS5xc3RyaW5nKCkudG9Eb3VibGUo
KSk7CisgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjprM0F0dHIpCisgICAg
ICAgIGszKCktPnNldEJhc2VWYWwodmFsdWUucXN0cmluZygpLnRvRG91YmxlKCkpOworICAgIGVs
c2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6azRBdHRyKQorICAgICAgICBrNCgpLT5z
ZXRCYXNlVmFsKHZhbHVlLnFzdHJpbmcoKS50b0RvdWJsZSgpKTsKICAgICBlbHNlCiAgICAgICAg
IFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlc0ltcGw6OnBhcnNlTWFwcGVkQXR0
cmlidXRlKGF0dHIpOwogfQpJbmRleDoga3N2ZzIvc3ZnL1NWR1NWR0VsZW1lbnRJbXBsLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9zdmcvU1ZHU1ZH
RWxlbWVudEltcGwuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjE0CmRpZmYgLXAgLXUgLXIx
LjE0IGtzdmcyL3N2Zy9TVkdTVkdFbGVtZW50SW1wbC5jcHAKLS0tIGtzdmcyL3N2Zy9TVkdTVkdF
bGVtZW50SW1wbC5jcHAJMjcgTm92IDIwMDUgMTE6MDI6MjYgLTAwMDAJMS4xNAorKysga3N2ZzIv
c3ZnL1NWR1NWR0VsZW1lbnRJbXBsLmNwcAkyOCBOb3YgMjAwNSAxMjo1NjoxNiAtMDAwMApAQCAt
NTksNyArNTksNyBAQAogI2luY2x1ZGUgPHEzcGFpbnRkZXZpY2VtZXRyaWNzLmg+CiAjaW5jbHVk
ZSA8cXRleHRzdHJlYW0uaD4KIAotI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgImh0
bWxuYW1lcy5oIgogI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKIAogdXNpbmcgbmFtZXNwYWNlIEtT
Vkc7CiAK
</data>
<flag name="review"
          id="907"
          type_id="1"
          status="+"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>