<?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>36262</bug_id>
          
          <creation_ts>2010-03-17 18:36:26 -0700</creation_ts>
          <short_desc>Add GraphicsContext3D abstraction to WebKit API</short_desc>
          <delta_ts>2010-03-22 23:30:29 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit API</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Kenneth Russell">kbr</reporter>
          <assigned_to name="Kenneth Russell">kbr</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>fishd</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zmo</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>201118</commentid>
    <comment_count>0</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-03-17 18:36:26 -0700</bug_when>
    <thetext>In order to run WebGL in Chrome&apos;s sandbox, GraphicsContext3D must call the command buffer implementation of the GLES 2 APIs rather than directly to OpenGL. Because this code lives in the Chrome repository, an abstraction for the GraphicsContext3D API needs to be added to the WebKit API and used by Chrome&apos;s GraphicsContext3D implementation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>201119</commentid>
    <comment_count>1</comment_count>
      <attachid>50992</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-03-17 18:41:24 -0700</bug_when>
    <thetext>Created attachment 50992
Patch

ChangeLog message follows:

Added WebGraphicsContext3D to the WebKit API and refactored Chromium&apos;s GraphicsContext3D implementation to use it. All of the OpenGL calls have been moved out of WebKit/chromium/src/GraphicsContext3D.cpp and into the WebGraphicsContext3D implementation. GraphicsContext3D is still responsible for the transfer of rendered output from the WebGraphicsContext3D to the HTMLCanvasElement.

The GraphicsContext3DInternal class, which is a data member of GraphicsContext3D for the Chromium port, remains. It is possible to eliminate this class and thereby one level of delegation, but this is being deferred.

The needed entry point for a Chrome implementation of WebGraphicsContext3D has been added to WebKitClient, but it is not being called yet by GraphicsContext3D. It will be once this patch lands and Chromium is rolled forward to support this entry point.

This is a large patch, but the transformation is almost entirely mechanical and there is no change in functionality. Nearly all of GraphicsContext3D and GraphicsContext3DInternal has been moved to WebGraphicsContext3DDefaultImpl. The only area where the splitting of logic is less than mechanical is GraphicsContext3D::beginPaint() and its callees.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>201121</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-03-17 18:53:58 -0700</bug_when>
    <thetext>Attachment 50992 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
WebKit/chromium/src/WebGraphicsContext3DDefaultImpl.h:54:  Alphabetical sorting problem.  [build/include_order] [4]
WebKit/chromium/src/WebGraphicsContext3DDefaultImpl.cpp:238:  Line contains only semicolon. If this should be an empty statement, use { } instead.  [whitespace/semicolon] [5]
WebKit/chromium/src/WebGraphicsContext3DDefaultImpl.cpp:404:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
WebKit/chromium/src/WebGraphicsContext3DDefaultImpl.cpp:408:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
WebKit/chromium/src/WebGraphicsContext3DDefaultImpl.cpp:491:  One space before end of line comments  [whitespace/comments] [5]
WebKit/chromium/src/WebGraphicsContext3DDefaultImpl.cpp:499:  One space before end of line comments  [whitespace/comments] [5]
WebKit/chromium/src/WebGraphicsContext3DDefaultImpl.cpp:562:  One space before end of line comments  [whitespace/comments] [5]
WebKit/chromium/src/GraphicsContext3D.cpp:357:  One line control clauses should not use braces.  [whitespace/braces] [4]
WebKit/chromium/src/GraphicsContext3D.cpp:495:  One space before end of line comments  [whitespace/comments] [5]
WebKit/chromium/src/GraphicsContext3D.cpp:654:  TEXTURE_WRAP_R is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Total errors found: 10 in 8 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>201467</commentid>
    <comment_count>3</comment_count>
      <attachid>51068</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-03-18 12:31:17 -0700</bug_when>
    <thetext>Created attachment 51068
Revised patch

Responded to offline review feedback. Fixed ChangeLog and expanded documentation of WebGraphicsContext3D interface.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>201509</commentid>
    <comment_count>4</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-03-18 13:30:20 -0700</bug_when>
    <thetext>Is this really the best way to do this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>201512</commentid>
    <comment_count>5</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-03-18 13:31:17 -0700</bug_when>
    <thetext>Classes like GraphicsContext and GraphicsContext3D are not intended to be stable API. We have to change them all the time. If Chrome has to do things this way, I suppose we can live with it, but it seems twisted and upside-down to do it this way.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>201517</commentid>
    <comment_count>6</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-03-18 13:34:55 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; Classes like GraphicsContext and GraphicsContext3D are not intended to be
&gt; stable API. We have to change them all the time. If Chrome has to do things
&gt; this way, I suppose we can live with it, but it seems twisted and upside-down
&gt; to do it this way.

It&apos;s necessary in order to make WebGL run within Chrome&apos;s sandbox; the OpenGL calls need to be remoted to another process. While I agree that GraphicsContext3D is supposed to be able to evolve rapidly, keep in mind that WebGraphicsContext3D is slightly lower level and its methods map almost verbatim to the OpenGL ES 2.0 API, which itself is stable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>201523</commentid>
    <comment_count>7</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-03-18 13:37:16 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; WebGraphicsContext3D is slightly lower level and its methods map almost
&gt; verbatim to the OpenGL ES 2.0 API, which itself is stable.

Given that, I think WebGraphicsContext3D is probably not the right name for it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>201531</commentid>
    <comment_count>8</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-03-18 13:44:47 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (In reply to comment #6)
&gt; &gt; WebGraphicsContext3D is slightly lower level and its methods map almost
&gt; &gt; verbatim to the OpenGL ES 2.0 API, which itself is stable.
&gt; 
&gt; Given that, I think WebGraphicsContext3D is probably not the right name for it.

The bulk of the GraphicsContext3D interface also maps nearly verbatim to OpenGL ES 2.0. We could call the new class something like WebOpenGLES2Context but that loses the naming connection to GraphicsContext3D. We are also adding a few entry points to WebGL that don&apos;t exist in OpenGL ES 2.0. Given the current naming conventions I prefer WebGraphicsContext3D.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>201544</commentid>
    <comment_count>9</comment_count>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2010-03-18 13:57:12 -0700</bug_when>
    <thetext>Given the similarity of this interface to OpenGL ES 2, I think we can tolerate exposing such a low-level API.  I would be more concerned if the interface were something likely to change frequently.  I&apos;m happy with the name for the reasons Ken gives.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>201553</commentid>
    <comment_count>10</comment_count>
      <attachid>51068</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2010-03-18 14:15:02 -0700</bug_when>
    <thetext>Comment on attachment 51068
Revised patch

&gt; Index: WebKit/chromium/public/WebGraphicsContext3D.h
...
&gt; +    struct Attributes {
&gt; +        Attributes()
&gt; +                : alpha(true)
&gt; +                , depth(true)
&gt; +                , stencil(true)
&gt; +                , antialias(true)
&gt; +                , premultipliedAlpha(true)

nit: ^^^ indent by 4 spaces


&gt; +    // Typedef for server-side objects like OpenGL textures and program objects.
&gt; +    typedef unsigned int WebGLId;

nit: since this typedef has the Web prefix, I&apos;d recommend just moving it
out of WebGraphicsContext3D and into the WebKit namespace.  anyways, it
seems like it might be convenient to not have to type WebGraphicsContext3D
in front of WebGLId in Chromium code.


&gt; +    // Creates a &quot;default&quot; implementation of WebGraphicsContext3D which, in
&gt; +    // Chromium, requires the sandbox to be disabled (strongly discouraged).
&gt; +    static WebGraphicsContext3D* createDefault();

nit: we generally try to avoid references back to chromium specific things
since they can bit rot.  maybe it is enough to just say that this default
implementation uses OpenGL directly.


&gt; +    // Initializes the graphics context; should be the first operation performed
&gt; +    // on newly-constructed instances. Returns true on success.
&gt; +    virtual bool initialize(Attributes attributes) = 0;

nit: webkit style is to leave off the parameter name when the parameter
name matches the parameter type (i.e., the name doesn&apos;t add information).


&gt; +    // Helper for software compositing path. Reads back the frame buffer into
&gt; +    // the memory region pointed to by &quot;pixels&quot;. It is expected that the storage
&gt; +    // for &quot;pixels&quot; covers (4 * width * height) bytes.
&gt; +    virtual void readBackFramebuffer(unsigned char* pixels) = 0;

nit: perhaps we should have the caller specify a size_t parameter here so
that it will be possible for the callee to check it at runtime.  this call
is already quite expensive so such a runtime check is not going to be an
issue.  it will help avoid memory corruption issues perhaps.


&gt; Index: WebKit/chromium/public/WebKitClient.h
...
&gt; +    // May return null if WebGL is not supported.
&gt; +    // Returns newly allocated WebGraphicsContext3D instance; caller must delete.
&gt; +    virtual WebGraphicsContext3D* createGraphicsContext3D() { return 0; }

nit: The &quot;createFoo&quot; pattern implies &quot;caller must delete&quot;, so it is okay
to leave that out of the comment.  but, redundancy is ok too.  i just wanted
to share that with you so you know the convention.


&gt; Index: WebKit/chromium/src/GraphicsContext3D.cpp

&gt; +// There are two levels of delegation in this file:
&gt; +//
&gt; +//   1. GraphicsContext3D delegates to GraphicsContext3DInternal. This is done
&gt; +//      so that we have some place to store data members common among
&gt; +//      implementations; GraphicsContext3D only provides us the m_internal
&gt; +//      pointer. We always delegate to the GraphicsContext3DInternal. While we
&gt; +//      could sidestep it and go directly to the WebGraphicsContext3D in some
&gt; +//      cases, it is better for consistency to always delegate through it.
&gt; +//
&gt; +//   2. GraphicsContext3DInternal delegates to an implementation of
&gt; +//      WebGraphicsContext3D. This is done so we have a place to inject our
&gt; +//      command buffer implementation.
&gt; +//
&gt; +// The legacy, in-process, implementation uses WebGraphicsContext3DDefaultImpl.
&gt; +// The command buffer implementation will use a to-be-decided class in Chrome.

nit: ^^^ again, it would be good to avoid comments that refer to Chrome like
this since they can get stale.  when that class is no longer to-be-decided,
will you remember to go back and revise this comment?  i would just leave off
the last sentence since point #2 basically implies the same thing.

R=me w/ nits addressed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>202050</commentid>
    <comment_count>11</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-03-19 15:05:57 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; (From update of attachment 51068 [details])
&gt; &gt; Index: WebKit/chromium/public/WebGraphicsContext3D.h
&gt; ...
&gt; &gt; +    struct Attributes {
&gt; &gt; +        Attributes()
&gt; &gt; +                : alpha(true)
&gt; &gt; +                , depth(true)
&gt; &gt; +                , stencil(true)
&gt; &gt; +                , antialias(true)
&gt; &gt; +                , premultipliedAlpha(true)
&gt; 
&gt; nit: ^^^ indent by 4 spaces
&gt; 
&gt; 
&gt; &gt; +    // Typedef for server-side objects like OpenGL textures and program objects.
&gt; &gt; +    typedef unsigned int WebGLId;
&gt; 
&gt; nit: since this typedef has the Web prefix, I&apos;d recommend just moving it
&gt; out of WebGraphicsContext3D and into the WebKit namespace.  anyways, it
&gt; seems like it might be convenient to not have to type WebGraphicsContext3D
&gt; in front of WebGLId in Chromium code.

It turns out that calling code generally does not need to refer to this typedef, but it&apos;s fine to. Moved out of class.

&gt; &gt; +    // Creates a &quot;default&quot; implementation of WebGraphicsContext3D which, in
&gt; &gt; +    // Chromium, requires the sandbox to be disabled (strongly discouraged).
&gt; &gt; +    static WebGraphicsContext3D* createDefault();
&gt; 
&gt; nit: we generally try to avoid references back to chromium specific things
&gt; since they can bit rot.  maybe it is enough to just say that this default
&gt; implementation uses OpenGL directly.

Done.

&gt; &gt; +    // Initializes the graphics context; should be the first operation performed
&gt; &gt; +    // on newly-constructed instances. Returns true on success.
&gt; &gt; +    virtual bool initialize(Attributes attributes) = 0;
&gt; 
&gt; nit: webkit style is to leave off the parameter name when the parameter
&gt; name matches the parameter type (i.e., the name doesn&apos;t add information).

Done.

&gt; &gt; +    // Helper for software compositing path. Reads back the frame buffer into
&gt; &gt; +    // the memory region pointed to by &quot;pixels&quot;. It is expected that the storage
&gt; &gt; +    // for &quot;pixels&quot; covers (4 * width * height) bytes.
&gt; &gt; +    virtual void readBackFramebuffer(unsigned char* pixels) = 0;
&gt; 
&gt; nit: perhaps we should have the caller specify a size_t parameter here so
&gt; that it will be possible for the callee to check it at runtime.  this call
&gt; is already quite expensive so such a runtime check is not going to be an
&gt; issue.  it will help avoid memory corruption issues perhaps.

Done.

&gt; &gt; Index: WebKit/chromium/public/WebKitClient.h
&gt; ...
&gt; &gt; +    // May return null if WebGL is not supported.
&gt; &gt; +    // Returns newly allocated WebGraphicsContext3D instance; caller must delete.
&gt; &gt; +    virtual WebGraphicsContext3D* createGraphicsContext3D() { return 0; }
&gt; 
&gt; nit: The &quot;createFoo&quot; pattern implies &quot;caller must delete&quot;, so it is okay
&gt; to leave that out of the comment.  but, redundancy is ok too.  i just wanted
&gt; to share that with you so you know the convention.

Done.

&gt; &gt; Index: WebKit/chromium/src/GraphicsContext3D.cpp
&gt; 
&gt; &gt; +// There are two levels of delegation in this file:
&gt; &gt; +//
&gt; &gt; +//   1. GraphicsContext3D delegates to GraphicsContext3DInternal. This is done
&gt; &gt; +//      so that we have some place to store data members common among
&gt; &gt; +//      implementations; GraphicsContext3D only provides us the m_internal
&gt; &gt; +//      pointer. We always delegate to the GraphicsContext3DInternal. While we
&gt; &gt; +//      could sidestep it and go directly to the WebGraphicsContext3D in some
&gt; &gt; +//      cases, it is better for consistency to always delegate through it.
&gt; &gt; +//
&gt; &gt; +//   2. GraphicsContext3DInternal delegates to an implementation of
&gt; &gt; +//      WebGraphicsContext3D. This is done so we have a place to inject our
&gt; &gt; +//      command buffer implementation.
&gt; &gt; +//
&gt; &gt; +// The legacy, in-process, implementation uses WebGraphicsContext3DDefaultImpl.
&gt; &gt; +// The command buffer implementation will use a to-be-decided class in Chrome.
&gt; 
&gt; nit: ^^^ again, it would be good to avoid comments that refer to Chrome like
&gt; this since they can get stale.  when that class is no longer to-be-decided,
&gt; will you remember to go back and revise this comment?  i would just leave off
&gt; the last sentence since point #2 basically implies the same thing.

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>202051</commentid>
    <comment_count>12</comment_count>
      <attachid>51189</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-03-19 15:06:37 -0700</bug_when>
    <thetext>Created attachment 51189
Revised patch

Addressed review feedback.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>202053</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-03-19 15:13:10 -0700</bug_when>
    <thetext>Attachment 51189 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
WebKit/chromium/src/WebGraphicsContext3DDefaultImpl.h:80:  buffer_size is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebKit/chromium/src/WebGraphicsContext3DDefaultImpl.cpp:535:  buffer_size is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebKit/chromium/src/WebGraphicsContext3DDefaultImpl.cpp:539:  One line control clauses should not use braces.  [whitespace/braces] [4]
WebKit/chromium/public/WebGraphicsContext3D.h:106:  buffer_size is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Total errors found: 4 in 8 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>202056</commentid>
    <comment_count>14</comment_count>
      <attachid>51192</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-03-19 15:23:21 -0700</bug_when>
    <thetext>Created attachment 51192
Revised patch

Fixed style errors introduced in last version of patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>202157</commentid>
    <comment_count>15</comment_count>
      <attachid>51192</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-03-19 20:35:16 -0700</bug_when>
    <thetext>Comment on attachment 51192
Revised patch

Clearing flags on attachment: 51192

Committed r56294: &lt;http://trac.webkit.org/changeset/56294&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>202158</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-03-19 20:35:23 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>202170</commentid>
    <comment_count>17</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2010-03-19 21:21:39 -0700</bug_when>
    <thetext>Broke the canary: http://build.chromium.org/buildbot/waterfall.fyi/builders/Webkit%20(webkit.org)/builds/23679/steps/compile/logs/stdio_html

Please fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>202209</commentid>
    <comment_count>18</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2010-03-20 09:38:39 -0700</bug_when>
    <thetext>Reverted r56294 for reason:

Broke compile on Chromium canaries.

Committed r56303: &lt;http://trac.webkit.org/changeset/56303&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>202211</commentid>
    <comment_count>19</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2010-03-20 10:14:02 -0700</bug_when>
    <thetext>Sorry guys, I am trying to switch over layout tests to use expectations upstream, so I had to roll this out in http://trac.webkit.org/changeset/56303.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>202735</commentid>
    <comment_count>20</comment_count>
      <attachid>51344</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-03-22 13:39:39 -0700</bug_when>
    <thetext>Created attachment 51344
Revised patch

Fixed compilation issues on Windows. Only changes compared to previous patch are: removal of reference to m_resizingBitmap from WebGraphicsContext3DDefaultImpl, reference to m_scanline from GraphicsContext3D.cpp and double free of m_resizingBitmap in destructor in GraphicsContext3D.cpp (bad merge). Tested on Windows.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>202737</commentid>
    <comment_count>21</comment_count>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2010-03-22 13:44:20 -0700</bug_when>
    <thetext>It seems like m_resizingBitmap could at least be an OwnPtr&lt;SkBitmap&gt;.  However, SkBitmap is itself internally reference counted.  It is in effect a smart pointer class.  Is there really need for the extra level of indirection?  Why not just make m_resizingBitmap be a SkBitmap?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>202753</commentid>
    <comment_count>22</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-03-22 14:21:17 -0700</bug_when>
    <thetext>(In reply to comment #21)
&gt; It seems like m_resizingBitmap could at least be an OwnPtr&lt;SkBitmap&gt;.  However,
&gt; SkBitmap is itself internally reference counted.  It is in effect a smart
&gt; pointer class.  Is there really need for the extra level of indirection?  Why
&gt; not just make m_resizingBitmap be a SkBitmap?

There&apos;s no good reason. Will fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>202755</commentid>
    <comment_count>23</comment_count>
      <attachid>51353</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-03-22 14:22:10 -0700</bug_when>
    <thetext>Created attachment 51353
Revised patch

Made m_resizingBitmap an SkBitmap instead of SkBitmap*. Eliminates potential double free bugs. Rebuilt and retested on Windows.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>202843</commentid>
    <comment_count>24</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-03-22 17:33:03 -0700</bug_when>
    <thetext>Changing status to assigned to see whether that will make the commit queue notice the latest patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>202847</commentid>
    <comment_count>25</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-03-22 17:43:51 -0700</bug_when>
    <thetext>The commit-queue is simply blocked behind failing tests at the moment:
http://webkit-commit-queue.appspot.com/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>202851</commentid>
    <comment_count>26</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-03-22 17:46:31 -0700</bug_when>
    <thetext>I just kicked it. It was a flaky SVG test which it last failed on.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>202852</commentid>
    <comment_count>27</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-03-22 17:47:01 -0700</bug_when>
    <thetext>bug 33433 was the test the commit-queue just failed on, hopefully it will pass it this time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>202942</commentid>
    <comment_count>28</comment_count>
      <attachid>51353</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-03-22 23:30:21 -0700</bug_when>
    <thetext>Comment on attachment 51353
Revised patch

Clearing flags on attachment: 51353

Committed r56381: &lt;http://trac.webkit.org/changeset/56381&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>202943</commentid>
    <comment_count>29</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-03-22 23:30:29 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>50992</attachid>
            <date>2010-03-17 18:41:24 -0700</date>
            <delta_ts>2010-03-18 12:31:17 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>refactoring.patch</filename>
            <type>text/plain</type>
            <size>198545</size>
            <attacher name="Kenneth Russell">kbr</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24gNTYxMzYpCisrKyBXZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQyIEBACisyMDEwLTAzLTE3ICBLZW5u
ZXRoIFJ1c3NlbGwgIDxrYnJAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBOZWVkIGEgc2hvcnQgZGVzY3JpcHRpb24gYW5kIGJ1ZyBV
UkwgKE9PUFMhKQorCisgICAgICAgIEFkZGVkIFdlYkdyYXBoaWNzQ29udGV4dDNEIHRvIHRoZSBX
ZWJLaXQgQVBJIGFuZCByZWZhY3RvcmVkIENocm9taXVtJ3MKKyAgICAgICAgR3JhcGhpY3NDb250
ZXh0M0QgaW1wbGVtZW50YXRpb24gdG8gdXNlIGl0LiBBbGwgb2YgdGhlIE9wZW5HTCBjYWxscyBo
YXZlCisgICAgICAgIGJlZW4gbW92ZWQgb3V0IG9mIFdlYktpdC9jaHJvbWl1bS9zcmMvR3JhcGhp
Y3NDb250ZXh0M0QuY3BwIGFuZCBpbnRvIHRoZQorICAgICAgICBXZWJHcmFwaGljc0NvbnRleHQz
RCBpbXBsZW1lbnRhdGlvbi4gR3JhcGhpY3NDb250ZXh0M0QgaXMgc3RpbGwKKyAgICAgICAgcmVz
cG9uc2libGUgZm9yIHRoZSB0cmFuc2ZlciBvZiByZW5kZXJlZCBvdXRwdXQgZnJvbSB0aGUKKyAg
ICAgICAgV2ViR3JhcGhpY3NDb250ZXh0M0QgdG8gdGhlIEhUTUxDYW52YXNFbGVtZW50LgorCisg
ICAgICAgIFRoZSBHcmFwaGljc0NvbnRleHQzREludGVybmFsIGNsYXNzLCB3aGljaCBpcyBhIGRh
dGEgbWVtYmVyIG9mCisgICAgICAgIEdyYXBoaWNzQ29udGV4dDNEIGZvciB0aGUgQ2hyb21pdW0g
cG9ydCwgcmVtYWlucy4gSXQgaXMgcG9zc2libGUgdG8KKyAgICAgICAgZWxpbWluYXRlIHRoaXMg
Y2xhc3MgYW5kIHRoZXJlYnkgb25lIGxldmVsIG9mIGRlbGVnYXRpb24sIGJ1dCB0aGlzIGlzCisg
ICAgICAgIGJlaW5nIGRlZmVycmVkLgorCisgICAgICAgIFRoZSBuZWVkZWQgZW50cnkgcG9pbnQg
Zm9yIGEgQ2hyb21lIGltcGxlbWVudGF0aW9uIG9mCisgICAgICAgIFdlYkdyYXBoaWNzQ29udGV4
dDNEIGhhcyBiZWVuIGFkZGVkIHRvIFdlYktpdENsaWVudCwgYnV0IGl0IGlzIG5vdCBiZWluZwor
ICAgICAgICBjYWxsZWQgeWV0IGJ5IEdyYXBoaWNzQ29udGV4dDNELiBJdCB3aWxsIGJlIG9uY2Ug
dGhpcyBwYXRjaCBsYW5kcyBhbmQKKyAgICAgICAgQ2hyb21pdW0gaXMgcm9sbGVkIGZvcndhcmQg
dG8gc3VwcG9ydCB0aGlzIGVudHJ5IHBvaW50LgorCisgICAgICAgIFRoaXMgaXMgYSBsYXJnZSBw
YXRjaCwgYnV0IHRoZSB0cmFuc2Zvcm1hdGlvbiBpcyBhbG1vc3QgZW50aXJlbHkKKyAgICAgICAg
bWVjaGFuaWNhbCBhbmQgdGhlcmUgaXMgbm8gY2hhbmdlIGluIGZ1bmN0aW9uYWxpdHkuIE5lYXJs
eSBhbGwgb2YKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0M0QgYW5kIEdyYXBoaWNzQ29udGV4dDNE
SW50ZXJuYWwgaGFzIGJlZW4gbW92ZWQgdG8KKyAgICAgICAgV2ViR3JhcGhpY3NDb250ZXh0M0RE
ZWZhdWx0SW1wbC4gVGhlIG9ubHkgYXJlYSB3aGVyZSB0aGUgc3BsaXR0aW5nIG9mCisgICAgICAg
IGxvZ2ljIGlzIGxlc3MgdGhhbiBtZWNoYW5pY2FsIGlzIEdyYXBoaWNzQ29udGV4dDNEOjpiZWdp
blBhaW50KCkgYW5kIGl0cworICAgICAgICBjYWxsZWVzLgorCisgICAgICAgICogV2ViS2l0Lmd5
cDoKKyAgICAgICAgKiBwdWJsaWMvV2ViR3JhcGhpY3NDb250ZXh0M0QuaDogQWRkZWQuCisgICAg
ICAgIChXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzOjpBdHRyaWJ1dGVz
KToKKyAgICAgICAgKFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0Q6On5XZWJHcmFwaGljc0Nv
bnRleHQzRCk6CisgICAgICAgICogcHVibGljL1dlYktpdENsaWVudC5oOgorICAgICAgICAoV2Vi
S2l0OjpXZWJLaXRDbGllbnQ6OmNyZWF0ZUdyYXBoaWNzQ29udGV4dDNEKToKKyAgICAgICAgKiBz
cmMvR3JhcGhpY3NDb250ZXh0M0QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0M0RJbnRlcm5hbDo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbCk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzREludGVybmFsOjp+R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5h
bCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzREludGVybmFsOjppbml0aWFs
aXplKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OnBsYXRm
b3JtR3JhcGhpY3NDb250ZXh0M0QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
M0RJbnRlcm5hbDo6cGxhdGZvcm1UZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNESW50ZXJuYWw6OmJlZ2luUGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0RJbnRlcm5hbDo6ZW5kUGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0RJbnRlcm5hbDo6cmVzaGFwZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQzREludGVybmFsOjpiaW5kQXR0cmliTG9jYXRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6YmluZFRleHR1cmUpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6YnVmZmVyRGF0YSk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpidWZmZXJTdWJEYXRhKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmdldEFjdGl2ZUF0dHJpYik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpnZXRBY3RpdmVV
bmlmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6Omdl
dEF0dHJpYkxvY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNESW50
ZXJuYWw6OmdldENvbnRleHRBdHRyaWJ1dGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNESW50ZXJuYWw6OmdldFByb2dyYW1JbmZvTG9nKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmdldFNoYWRlckluZm9Mb2cpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6Z2V0U2hhZGVyU291cmNlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmdldFN0cmluZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpnZXRVbmlmb3JtTG9j
YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6cmVh
ZFBpeGVscyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpz
aGFkZXJTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5h
bDo6dGV4SW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzREludGVy
bmFsOjp0ZXhTdWJJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
SW50ZXJuYWw6OnVuaWZvcm0xZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
M0RJbnRlcm5hbDo6dW5pZm9ybTFpdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQzREludGVybmFsOjp1bmlmb3JtMmZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNESW50ZXJuYWw6OnVuaWZvcm0yaXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0RJbnRlcm5hbDo6dW5pZm9ybTNmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQzREludGVybmFsOjp1bmlmb3JtM2l2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNESW50ZXJuYWw6OnVuaWZvcm00ZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6dW5pZm9ybTRpdik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzREludGVybmFsOjp1bmlmb3JtTWF0cml4MmZ2KToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OnVuaWZvcm1NYXRyaXgzZnYpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6dW5pZm9ybU1hdHJpeDRm
dik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0
M0QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6On5HcmFwaGljc0NvbnRl
eHQzRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpwbGF0Zm9ybUdyYXBoaWNzQ29udGV4
dDNEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpwbGF0Zm9ybVRleHR1
cmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnRleEltYWdlMkQpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnRleFN1YkltYWdlMkQpOgorICAg
ICAgICAqIHNyYy9XZWJHcmFwaGljc0NvbnRleHQzRC5jcHA6IEFkZGVkLgorICAgICAgICAoV2Vi
S2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlRGVmYXVsdCk6CisgICAgICAgICogc3Jj
L1dlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGwuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdl
YktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6R0xDb25uZWN0aW9uOjpjcmVh
dGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpH
TENvbm5lY3Rpb246On5HTENvbm5lY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJHcmFwaGlj
c0NvbnRleHQzRERlZmF1bHRJbXBsOjpWZXJ0ZXhBdHRyaWJQb2ludGVyU3RhdGU6OlZlcnRleEF0
dHJpYlBvaW50ZXJTdGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNE
RGVmYXVsdEltcGw6OldlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGwpOgorICAgICAgICAo
V2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjp+V2ViR3JhcGhpY3NDb250
ZXh0M0REZWZhdWx0SW1wbCk6CisgICAgICAgIChXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNE
RGVmYXVsdEltcGw6OmluaXRpYWxpemUpOgorICAgICAgICAoV2ViS2l0OjpXZWJHcmFwaGljc0Nv
bnRleHQzRERlZmF1bHRJbXBsOjptYWtlQ29udGV4dEN1cnJlbnQpOgorICAgICAgICAoV2ViS2l0
OjpXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjp3aWR0aCk6CisgICAgICAgIChXZWJL
aXQ6OldlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OmhlaWdodCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OnNpemVJbkJ5dGVzKToKKyAg
ICAgICAgKFdlYktpdDo6Y3JlYXRlVGV4dHVyZU9iamVjdCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OnJlc2hhcGUpOgorICAgICAgICAoV2ViS2l0
OjpXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpmbGlwVmVydGljYWxseSk6CisgICAg
ICAgIChXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OnJlYWRCYWNrRnJh
bWVidWZmZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJ
bXBsOjphY3RpdmVUZXh0dXJlKToKKyAgICAgICAgKFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0
M0REZWZhdWx0SW1wbDo6YmluZEJ1ZmZlcik6CisgICAgICAgIChXZWJLaXQ6OldlYkdyYXBoaWNz
Q29udGV4dDNERGVmYXVsdEltcGw6OmJpbmRGcmFtZWJ1ZmZlcik6CisgICAgICAgIChXZWJLaXQ6
OldlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJh
eSk6CisgICAgICAgIChXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OmRy
YXdFbGVtZW50cyk6CisgICAgICAgIChXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVs
dEltcGw6OmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KToKKyAgICAgICAgKFdlYktpdDo6V2ViR3Jh
cGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6Z2VuZXJhdGVNaXBtYXApOgorICAgICAgICAoV2Vi
S2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpnZXRBY3RpdmVBdHRyaWIpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpnZXRBY3Rp
dmVVbmlmb3JtKToKKyAgICAgICAgKFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0
SW1wbDo6Z2V0Q29udGV4dEF0dHJpYnV0ZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJHcmFwaGlj
c0NvbnRleHQzRERlZmF1bHRJbXBsOjpnZXRFcnJvcik6CisgICAgICAgIChXZWJLaXQ6OldlYkdy
YXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OmdldFByb2dyYW1JbmZvTG9nKToKKyAgICAgICAg
KFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6Z2V0U2hhZGVySW5mb0xv
Zyk6CisgICAgICAgIChXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6Omdl
dFNoYWRlclNvdXJjZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNERGVm
YXVsdEltcGw6OmdldFN0cmluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4
dDNERGVmYXVsdEltcGw6OmdldFZlcnRleEF0dHJpYk9mZnNldCk6CisgICAgICAgIChXZWJLaXQ6
OldlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OnJlbGVhc2VTaGFkZXJDb21waWxlcik6
CisgICAgICAgIChXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OnNoYWRl
clNvdXJjZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdElt
cGw6OnZlcnRleEF0dHJpYlBvaW50ZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJHcmFwaGljc0Nv
bnRleHQzRERlZmF1bHRJbXBsOjpjcmVhdGVCdWZmZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJH
cmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpjcmVhdGVGcmFtZWJ1ZmZlcik6CisgICAgICAg
IChXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OmNyZWF0ZVByb2dyYW0p
OgorICAgICAgICAoV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpjcmVh
dGVSZW5kZXJidWZmZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRERl
ZmF1bHRJbXBsOjpjcmVhdGVUZXh0dXJlKToKKyAgICAgICAgKFdlYktpdDo6V2ViR3JhcGhpY3ND
b250ZXh0M0REZWZhdWx0SW1wbDo6ZGVsZXRlQnVmZmVyKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
R3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6ZGVsZXRlRnJhbWVidWZmZXIpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpkZWxldGVQcm9ncmFt
KToKKyAgICAgICAgKFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6ZGVs
ZXRlUmVuZGVyYnVmZmVyKToKKyAgICAgICAgKFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0RE
ZWZhdWx0SW1wbDo6ZGVsZXRlU2hhZGVyKToKKyAgICAgICAgKFdlYktpdDo6V2ViR3JhcGhpY3ND
b250ZXh0M0REZWZhdWx0SW1wbDo6ZGVsZXRlVGV4dHVyZSk6CisgICAgICAgIChXZWJLaXQ6Oldl
YkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OnN5bnRoZXNpemVHTEVycm9yKToKKyAgICAg
ICAgKiBzcmMvV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbC5oOiBBZGRlZC4KKyAgICAg
ICAgKFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6KToKKyAgICAgICAg
KFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6R0xDb25uZWN0aW9uOjpj
aG9vc2VGQkNvbmZpZyk6CisgICAgICAgIChXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNERGVm
YXVsdEltcGw6OkdMQ29ubmVjdGlvbjo6Y3JlYXRlTmV3Q29udGV4dCk6CisgICAgICAgIChXZWJL
aXQ6OldlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OkdMQ29ubmVjdGlvbjo6Y3JlYXRl
UGJ1ZmZlcik6CisgICAgICAgIChXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdElt
cGw6OkdMQ29ubmVjdGlvbjo6ZGVzdHJveVBidWZmZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJH
cmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpHTENvbm5lY3Rpb246Om1ha2VDdXJyZW50KToK
KyAgICAgICAgKFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6R0xDb25u
ZWN0aW9uOjpkZXN0cm95Q29udGV4dCk6CisgICAgICAgIChXZWJLaXQ6OldlYkdyYXBoaWNzQ29u
dGV4dDNERGVmYXVsdEltcGw6OkdMQ29ubmVjdGlvbjo6Z2V0Q3VycmVudENvbnRleHQpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpHTENvbm5lY3Rp
b246OkdMQ29ubmVjdGlvbik6CisKIDIwMTAtMDMtMTcgIERtaXRyeSBUaXRvdiAgPGRpbWljaEBj
aHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGltaXRyaSBHbGF6a292LgpJbmRl
eDogV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9t
aXVtL1dlYktpdC5neXAJKHJldmlzaW9uIDU2MTM1KQorKysgV2ViS2l0L2Nocm9taXVtL1dlYktp
dC5neXAJKHdvcmtpbmcgY29weSkKQEAgLTEyMiw2ICsxMjIsNyBAQAogICAgICAgICAgICAgICAg
ICdwdWJsaWMvV2ViRm9udENhY2hlLmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViRm9y
bUVsZW1lbnQuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJHbHlwaENhY2hlLmgnLAor
ICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViR3JhcGhpY3NDb250ZXh0M0QuaCcsCiAgICAgICAg
ICAgICAgICAgJ3B1YmxpYy9XZWJIaXN0b3J5SXRlbS5oJywKICAgICAgICAgICAgICAgICAncHVi
bGljL1dlYkhUVFBCb2R5LmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViSW1hZ2UuaCcs
CkBAIC0zMTIsNiArMzEzLDkgQEAKICAgICAgICAgICAgICAgICAnc3JjL1dlYkZyYW1lSW1wbC5j
cHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViRnJhbWVJbXBsLmgnLAogICAgICAgICAgICAg
ICAgICdzcmMvV2ViR2x5cGhDYWNoZS5jcHAnLAorICAgICAgICAgICAgICAgICdzcmMvV2ViR3Jh
cGhpY3NDb250ZXh0M0QuY3BwJywKKyAgICAgICAgICAgICAgICAnc3JjL1dlYkdyYXBoaWNzQ29u
dGV4dDNERGVmYXVsdEltcGwuY3BwJywKKyAgICAgICAgICAgICAgICAnc3JjL1dlYkdyYXBoaWNz
Q29udGV4dDNERGVmYXVsdEltcGwuaCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJIaXN0b3J5
SXRlbS5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViSFRUUEJvZHkuY3BwJywKICAgICAg
ICAgICAgICAgICAnc3JjL1dlYkltYWdlQ0cuY3BwJywKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9w
dWJsaWMvV2ViR3JhcGhpY3NDb250ZXh0M0QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21p
dW0vcHVibGljL1dlYkdyYXBoaWNzQ29udGV4dDNELmgJKHJldmlzaW9uIDApCisrKyBXZWJLaXQv
Y2hyb21pdW0vcHVibGljL1dlYkdyYXBoaWNzQ29udGV4dDNELmgJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMjg3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBt
ZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICog
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2lmbmRlZiBXZWJHcmFwaGljc0NvbnRleHQzRF9oCisjZGVmaW5lIFdlYkdy
YXBoaWNzQ29udGV4dDNEX2gKKworI2luY2x1ZGUgIldlYkNvbW1vbi5oIgorI2luY2x1ZGUgIldl
Yk5vbkNvcHlhYmxlLmgiCisjaW5jbHVkZSAiV2ViU3RyaW5nLmgiCisKK25hbWVzcGFjZSBXZWJL
aXQgeworCisvLyBUaGlzIGlzIHRoZSB2ZXJ5IGxvdyBsZXZlbCBkZWxlZ2F0ZSBpbnRlcmZhY2Ug
d2hpY2ggYWJzdHJhY3RzIHRoZQorLy8gaW1wbGVtZW50YXRpb24gb2YgR3JhcGhpY3NDb250ZXh0
M0QuCisKK2NsYXNzIFdlYkdyYXBoaWNzQ29udGV4dDNEIDogcHVibGljIFdlYk5vbkNvcHlhYmxl
IHsKK3B1YmxpYzoKKyAgICBzdHJ1Y3QgQWN0aXZlSW5mbyB7CisgICAgICAgIFdlYlN0cmluZyBu
YW1lOworICAgICAgICB1bnNpZ25lZCB0eXBlOworICAgICAgICBpbnQgc2l6ZTsKKyAgICB9Owor
CisgICAgLy8gQ29udGV4dCBjcmVhdGlvbiBhdHRyaWJ1dGVzLgorICAgIHN0cnVjdCBBdHRyaWJ1
dGVzIHsKKyAgICAgICAgQXR0cmlidXRlcygpCisgICAgICAgICAgICAgICAgOiBhbHBoYSh0cnVl
KQorICAgICAgICAgICAgICAgICwgZGVwdGgodHJ1ZSkKKyAgICAgICAgICAgICAgICAsIHN0ZW5j
aWwodHJ1ZSkKKyAgICAgICAgICAgICAgICAsIGFudGlhbGlhcyh0cnVlKQorICAgICAgICAgICAg
ICAgICwgcHJlbXVsdGlwbGllZEFscGhhKHRydWUpCisgICAgICAgIHsKKyAgICAgICAgfQorCisg
ICAgICAgIGJvb2wgYWxwaGE7CisgICAgICAgIGJvb2wgZGVwdGg7CisgICAgICAgIGJvb2wgc3Rl
bmNpbDsKKyAgICAgICAgYm9vbCBhbnRpYWxpYXM7CisgICAgICAgIGJvb2wgcHJlbXVsdGlwbGll
ZEFscGhhOworICAgIH07CisKKyAgICAvLyBUeXBlZGVmIGZvciBzZXJ2ZXItc2lkZSBvYmplY3Rz
LgorICAgIHR5cGVkZWYgdW5zaWduZWQgaW50IFdlYkdMSWQ7CisKKyAgICAvLyBUaGlzIGRlc3Ry
dWN0b3IgbmVlZHMgdG8gYmUgcHVibGljIHNvIHRoYXQgdXNpbmcgY2xhc3NlcyBjYW4gZGVzdHJv
eSBpbnN0YW5jZXMgaWYgaW5pdGlhbGl6YXRpb24gZmFpbHMuCisgICAgdmlydHVhbCB+V2ViR3Jh
cGhpY3NDb250ZXh0M0QoKSB7fQorCisgICAgLy8gQ3JlYXRlcyBhICJkZWZhdWx0IiBpbXBsZW1l
bnRhdGlvbiBvZiBXZWJHcmFwaGljc0NvbnRleHQzRAorICAgIC8vIHdoaWNoLCBpbiBDaHJvbWl1
bSwgcmVxdWlyZXMgdGhlIHNhbmRib3ggdG8gYmUgZGlzYWJsZWQKKyAgICAvLyAoc3Ryb25nbHkg
ZGlzY291cmFnZWQpLgorICAgIHN0YXRpYyBXZWJHcmFwaGljc0NvbnRleHQzRCogY3JlYXRlRGVm
YXVsdCgpOworCisgICAgdmlydHVhbCBib29sIGluaXRpYWxpemUoQXR0cmlidXRlcyBhdHRyaWJ1
dGVzKSA9IDA7CisgICAgdmlydHVhbCBib29sIG1ha2VDb250ZXh0Q3VycmVudCgpID0gMDsKKwor
ICAgIHZpcnR1YWwgaW50IHdpZHRoKCkgPSAwOworICAgIHZpcnR1YWwgaW50IGhlaWdodCgpID0g
MDsKKworICAgIC8vIEhlbHBlciB0byByZXR1cm4gdGhlIHNpemUgaW4gYnl0ZXMgb2YgT3BlbkdM
IGRhdGEgdHlwZXMKKyAgICAvLyBsaWtlIEdMX0ZMT0FULCBHTF9JTlQsIGV0Yy4KKyAgICB2aXJ0
dWFsIGludCBzaXplSW5CeXRlcyhpbnQgdHlwZSkgPSAwOworCisgICAgdmlydHVhbCB2b2lkIHJl
c2hhcGUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KSA9IDA7CisKKyAgICAvLyBIZWxwZXIgZm9yIHNv
ZnR3YXJlIGNvbXBvc2l0aW5nIHBhdGguCisgICAgLy8gSXQgaXMgZXhwZWN0ZWQgdGhhdCB0aGUg
c3RvcmFnZSBmb3IgInBpeGVscyIgY292ZXJzIDQgKiB3aWR0aCAqIGhlaWdodCBieXRlcy4KKyAg
ICB2aXJ0dWFsIHZvaWQgcmVhZEJhY2tGcmFtZWJ1ZmZlcih1bnNpZ25lZCBjaGFyKiBwaXhlbHMp
ID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBhY3RpdmVUZXh0dXJlKHVuc2lnbmVkIGxvbmcgdGV4
dHVyZSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBhdHRhY2hTaGFkZXIoV2ViR0xJZCBwcm9ncmFt
LCBXZWJHTElkIHNoYWRlcikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBiaW5kQXR0cmliTG9jYXRp
b24oV2ViR0xJZCBwcm9ncmFtLCB1bnNpZ25lZCBsb25nIGluZGV4LCBjb25zdCBjaGFyKiBuYW1l
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGJpbmRCdWZmZXIodW5zaWduZWQgbG9uZyB0YXJnZXQs
IFdlYkdMSWQgYnVmZmVyKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGJpbmRGcmFtZWJ1ZmZlcih1
bnNpZ25lZCBsb25nIHRhcmdldCwgV2ViR0xJZCBmcmFtZWJ1ZmZlcikgPSAwOworICAgIHZpcnR1
YWwgdm9pZCBiaW5kUmVuZGVyYnVmZmVyKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBXZWJHTElkIHJl
bmRlcmJ1ZmZlcikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBiaW5kVGV4dHVyZSh1bnNpZ25lZCBs
b25nIHRhcmdldCwgV2ViR0xJZCB0ZXh0dXJlKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGJsZW5k
Q29sb3IoZG91YmxlIHJlZCwgZG91YmxlIGdyZWVuLCBkb3VibGUgYmx1ZSwgZG91YmxlIGFscGhh
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGJsZW5kRXF1YXRpb24odW5zaWduZWQgbG9uZyBtb2Rl
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGJsZW5kRXF1YXRpb25TZXBhcmF0ZSh1bnNpZ25lZCBs
b25nIG1vZGVSR0IsIHVuc2lnbmVkIGxvbmcgbW9kZUFscGhhKSA9IDA7CisgICAgdmlydHVhbCB2
b2lkIGJsZW5kRnVuYyh1bnNpZ25lZCBsb25nIHNmYWN0b3IsIHVuc2lnbmVkIGxvbmcgZGZhY3Rv
cikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBibGVuZEZ1bmNTZXBhcmF0ZSh1bnNpZ25lZCBsb25n
IHNyY1JHQiwgdW5zaWduZWQgbG9uZyBkc3RSR0IsIHVuc2lnbmVkIGxvbmcgc3JjQWxwaGEsIHVu
c2lnbmVkIGxvbmcgZHN0QWxwaGEpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBidWZmZXJEYXRh
KHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBpbnQgc2l6ZSwgY29uc3Qgdm9pZCogZGF0YSwgdW5zaWdu
ZWQgbG9uZyB1c2FnZSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBidWZmZXJTdWJEYXRhKHVuc2ln
bmVkIGxvbmcgdGFyZ2V0LCBsb25nIG9mZnNldCwgaW50IHNpemUsIGNvbnN0IHZvaWQqIGRhdGEp
ID0gMDsKKworICAgIHZpcnR1YWwgdW5zaWduZWQgbG9uZyBjaGVja0ZyYW1lYnVmZmVyU3RhdHVz
KHVuc2lnbmVkIGxvbmcgdGFyZ2V0KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGNsZWFyKHVuc2ln
bmVkIGxvbmcgbWFzaykgPSAwOworICAgIHZpcnR1YWwgdm9pZCBjbGVhckNvbG9yKGRvdWJsZSBy
ZWQsIGRvdWJsZSBncmVlbiwgZG91YmxlIGJsdWUsIGRvdWJsZSBhbHBoYSkgPSAwOworICAgIHZp
cnR1YWwgdm9pZCBjbGVhckRlcHRoKGRvdWJsZSBkZXB0aCkgPSAwOworICAgIHZpcnR1YWwgdm9p
ZCBjbGVhclN0ZW5jaWwobG9uZyBzKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGNvbG9yTWFzayhi
b29sIHJlZCwgYm9vbCBncmVlbiwgYm9vbCBibHVlLCBib29sIGFscGhhKSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIGNvbXBpbGVTaGFkZXIoV2ViR0xJZCBzaGFkZXIpID0gMDsKKworICAgIHZpcnR1
YWwgdm9pZCBjb3B5VGV4SW1hZ2UyRCh1bnNpZ25lZCBsb25nIHRhcmdldCwgbG9uZyBsZXZlbCwg
dW5zaWduZWQgbG9uZyBpbnRlcm5hbGZvcm1hdCwgbG9uZyB4LCBsb25nIHksIHVuc2lnbmVkIGxv
bmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0LCBsb25nIGJvcmRlcikgPSAwOworICAgIHZp
cnR1YWwgdm9pZCBjb3B5VGV4U3ViSW1hZ2UyRCh1bnNpZ25lZCBsb25nIHRhcmdldCwgbG9uZyBs
ZXZlbCwgbG9uZyB4b2Zmc2V0LCBsb25nIHlvZmZzZXQsIGxvbmcgeCwgbG9uZyB5LCB1bnNpZ25l
ZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCkgPSAwOworICAgIHZpcnR1YWwgdm9p
ZCBjdWxsRmFjZSh1bnNpZ25lZCBsb25nIG1vZGUpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGVw
dGhGdW5jKHVuc2lnbmVkIGxvbmcgZnVuYykgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkZXB0aE1h
c2soYm9vbCBmbGFnKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRlcHRoUmFuZ2UoZG91YmxlIHpO
ZWFyLCBkb3VibGUgekZhcikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkZXRhY2hTaGFkZXIoV2Vi
R0xJZCBwcm9ncmFtLCBXZWJHTElkIHNoYWRlcikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkaXNh
YmxlKHVuc2lnbmVkIGxvbmcgY2FwKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRpc2FibGVWZXJ0
ZXhBdHRyaWJBcnJheSh1bnNpZ25lZCBsb25nIGluZGV4KSA9IDA7CisgICAgdmlydHVhbCB2b2lk
IGRyYXdBcnJheXModW5zaWduZWQgbG9uZyBtb2RlLCBsb25nIGZpcnN0LCBsb25nIGNvdW50KSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIGRyYXdFbGVtZW50cyh1bnNpZ25lZCBsb25nIG1vZGUsIHVu
c2lnbmVkIGxvbmcgY291bnQsIHVuc2lnbmVkIGxvbmcgdHlwZSwgbG9uZyBvZmZzZXQpID0gMDsK
KworICAgIHZpcnR1YWwgdm9pZCBlbmFibGUodW5zaWduZWQgbG9uZyBjYXApID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgZW5hYmxlVmVydGV4QXR0cmliQXJyYXkodW5zaWduZWQgbG9uZyBpbmRleCkg
PSAwOworICAgIHZpcnR1YWwgdm9pZCBmaW5pc2goKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGZs
dXNoKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcih1bnNp
Z25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBhdHRhY2htZW50LCB1bnNpZ25lZCBsb25n
IHJlbmRlcmJ1ZmZlcnRhcmdldCwgV2ViR0xJZCByZW5kZXJidWZmZXIpID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgZnJhbWVidWZmZXJUZXh0dXJlMkQodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2ln
bmVkIGxvbmcgYXR0YWNobWVudCwgdW5zaWduZWQgbG9uZyB0ZXh0YXJnZXQsIFdlYkdMSWQgdGV4
dHVyZSwgbG9uZyBsZXZlbCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBmcm9udEZhY2UodW5zaWdu
ZWQgbG9uZyBtb2RlKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGdlbmVyYXRlTWlwbWFwKHVuc2ln
bmVkIGxvbmcgdGFyZ2V0KSA9IDA7CisKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0QWN0aXZlQXR0cmli
KFdlYkdMSWQgcHJvZ3JhbSwgdW5zaWduZWQgbG9uZyBpbmRleCwgQWN0aXZlSW5mbyYpID0gMDsK
KyAgICB2aXJ0dWFsIGJvb2wgZ2V0QWN0aXZlVW5pZm9ybShXZWJHTElkIHByb2dyYW0sIHVuc2ln
bmVkIGxvbmcgaW5kZXgsIEFjdGl2ZUluZm8mKSA9IDA7CisKKyAgICB2aXJ0dWFsIGludCAgZ2V0
QXR0cmliTG9jYXRpb24oV2ViR0xJZCBwcm9ncmFtLCBjb25zdCBjaGFyKiBuYW1lKSA9IDA7CisK
KyAgICB2aXJ0dWFsIHZvaWQgZ2V0Qm9vbGVhbnYodW5zaWduZWQgbG9uZyBwbmFtZSwgdW5zaWdu
ZWQgY2hhciogdmFsdWUpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBnZXRCdWZmZXJQYXJhbWV0
ZXJpdih1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBwbmFtZSwgaW50KiB2YWx1
ZSkgPSAwOworCisgICAgdmlydHVhbCBBdHRyaWJ1dGVzIGdldENvbnRleHRBdHRyaWJ1dGVzKCkg
PSAwOworCisgICAgdmlydHVhbCB1bnNpZ25lZCBsb25nIGdldEVycm9yKCkgPSAwOworCisgICAg
dmlydHVhbCB2b2lkIGdldEZsb2F0dih1bnNpZ25lZCBsb25nIHBuYW1lLCBmbG9hdCogdmFsdWUp
ID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0
ZXJpdih1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBhdHRhY2htZW50LCB1bnNp
Z25lZCBsb25nIHBuYW1lLCBpbnQqIHZhbHVlKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0
SW50ZWdlcnYodW5zaWduZWQgbG9uZyBwbmFtZSwgaW50KiB2YWx1ZSkgPSAwOworCisgICAgdmly
dHVhbCB2b2lkIGdldFByb2dyYW1pdihXZWJHTElkIHByb2dyYW0sIHVuc2lnbmVkIGxvbmcgcG5h
bWUsIGludCogdmFsdWUpID0gMDsKKworICAgIHZpcnR1YWwgV2ViU3RyaW5nIGdldFByb2dyYW1J
bmZvTG9nKFdlYkdMSWQgcHJvZ3JhbSkgPSAwOworCisgICAgdmlydHVhbCB2b2lkIGdldFJlbmRl
cmJ1ZmZlclBhcmFtZXRlcml2KHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIHBu
YW1lLCBpbnQqIHZhbHVlKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0U2hhZGVyaXYoV2Vi
R0xJZCBzaGFkZXIsIHVuc2lnbmVkIGxvbmcgcG5hbWUsIGludCogdmFsdWUpID0gMDsKKworICAg
IHZpcnR1YWwgV2ViU3RyaW5nIGdldFNoYWRlckluZm9Mb2coV2ViR0xJZCBzaGFkZXIpID0gMDsK
KworICAgIC8vIFRCRAorICAgIC8vIHZvaWQgZ2xHZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQgKEdM
ZW51bSBzaGFkZXJ0eXBlLCBHTGVudW0gcHJlY2lzaW9udHlwZSwgR0xpbnQqIHJhbmdlLCBHTGlu
dCogcHJlY2lzaW9uKTsKKworICAgIHZpcnR1YWwgV2ViU3RyaW5nIGdldFNoYWRlclNvdXJjZShX
ZWJHTElkIHNoYWRlcikgPSAwOworICAgIHZpcnR1YWwgV2ViU3RyaW5nIGdldFN0cmluZyh1bnNp
Z25lZCBsb25nIG5hbWUpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBnZXRUZXhQYXJhbWV0ZXJm
dih1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBwbmFtZSwgZmxvYXQqIHZhbHVl
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGdldFRleFBhcmFtZXRlcml2KHVuc2lnbmVkIGxvbmcg
dGFyZ2V0LCB1bnNpZ25lZCBsb25nIHBuYW1lLCBpbnQqIHZhbHVlKSA9IDA7CisKKyAgICB2aXJ0
dWFsIHZvaWQgZ2V0VW5pZm9ybWZ2KFdlYkdMSWQgcHJvZ3JhbSwgbG9uZyBsb2NhdGlvbiwgZmxv
YXQqIHZhbHVlKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGdldFVuaWZvcm1pdihXZWJHTElkIHBy
b2dyYW0sIGxvbmcgbG9jYXRpb24sIGludCogdmFsdWUpID0gMDsKKworICAgIHZpcnR1YWwgbG9u
ZyBnZXRVbmlmb3JtTG9jYXRpb24oV2ViR0xJZCBwcm9ncmFtLCBjb25zdCBjaGFyKiBuYW1lKSA9
IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0VmVydGV4QXR0cmliZnYodW5zaWduZWQgbG9uZyBp
bmRleCwgdW5zaWduZWQgbG9uZyBwbmFtZSwgZmxvYXQqIHZhbHVlKSA9IDA7CisgICAgdmlydHVh
bCB2b2lkIGdldFZlcnRleEF0dHJpYml2KHVuc2lnbmVkIGxvbmcgaW5kZXgsIHVuc2lnbmVkIGxv
bmcgcG5hbWUsIGludCogdmFsdWUpID0gMDsKKworICAgIHZpcnR1YWwgbG9uZyBnZXRWZXJ0ZXhB
dHRyaWJPZmZzZXQodW5zaWduZWQgbG9uZyBpbmRleCwgdW5zaWduZWQgbG9uZyBwbmFtZSkgPSAw
OworCisgICAgdmlydHVhbCB2b2lkIGhpbnQodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVk
IGxvbmcgbW9kZSkgPSAwOworICAgIHZpcnR1YWwgYm9vbCBpc0J1ZmZlcihXZWJHTElkIGJ1ZmZl
cikgPSAwOworICAgIHZpcnR1YWwgYm9vbCBpc0VuYWJsZWQodW5zaWduZWQgbG9uZyBjYXApID0g
MDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNGcmFtZWJ1ZmZlcihXZWJHTElkIGZyYW1lYnVmZmVyKSA9
IDA7CisgICAgdmlydHVhbCBib29sIGlzUHJvZ3JhbShXZWJHTElkIHByb2dyYW0pID0gMDsKKyAg
ICB2aXJ0dWFsIGJvb2wgaXNSZW5kZXJidWZmZXIoV2ViR0xJZCByZW5kZXJidWZmZXIpID0gMDsK
KyAgICB2aXJ0dWFsIGJvb2wgaXNTaGFkZXIoV2ViR0xJZCBzaGFkZXIpID0gMDsKKyAgICB2aXJ0
dWFsIGJvb2wgaXNUZXh0dXJlKFdlYkdMSWQgdGV4dHVyZSkgPSAwOworICAgIHZpcnR1YWwgdm9p
ZCBsaW5lV2lkdGgoZG91YmxlKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGxpbmtQcm9ncmFtKFdl
YkdMSWQgcHJvZ3JhbSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBwaXhlbFN0b3JlaSh1bnNpZ25l
ZCBsb25nIHBuYW1lLCBsb25nIHBhcmFtKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHBvbHlnb25P
ZmZzZXQoZG91YmxlIGZhY3RvciwgZG91YmxlIHVuaXRzKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZv
aWQgcmVhZFBpeGVscyhsb25nIHgsIGxvbmcgeSwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWdu
ZWQgbG9uZyBoZWlnaHQsIHVuc2lnbmVkIGxvbmcgZm9ybWF0LCB1bnNpZ25lZCBsb25nIHR5cGUs
IHZvaWQqIHBpeGVscykgPSAwOworCisgICAgdmlydHVhbCB2b2lkIHJlbGVhc2VTaGFkZXJDb21w
aWxlcigpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVuZGVyYnVmZmVyU3RvcmFnZSh1bnNpZ25l
ZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBpbnRlcm5hbGZvcm1hdCwgdW5zaWduZWQgbG9u
ZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2Ft
cGxlQ292ZXJhZ2UoZG91YmxlIHZhbHVlLCBib29sIGludmVydCkgPSAwOworICAgIHZpcnR1YWwg
dm9pZCBzY2lzc29yKGxvbmcgeCwgbG9uZyB5LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25l
ZCBsb25nIGhlaWdodCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzaGFkZXJTb3VyY2UoV2ViR0xJ
ZCBzaGFkZXIsIGNvbnN0IGNoYXIqIHN0cmluZykgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzdGVu
Y2lsRnVuYyh1bnNpZ25lZCBsb25nIGZ1bmMsIGxvbmcgcmVmLCB1bnNpZ25lZCBsb25nIG1hc2sp
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc3RlbmNpbEZ1bmNTZXBhcmF0ZSh1bnNpZ25lZCBsb25n
IGZhY2UsIHVuc2lnbmVkIGxvbmcgZnVuYywgbG9uZyByZWYsIHVuc2lnbmVkIGxvbmcgbWFzaykg
PSAwOworICAgIHZpcnR1YWwgdm9pZCBzdGVuY2lsTWFzayh1bnNpZ25lZCBsb25nIG1hc2spID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgc3RlbmNpbE1hc2tTZXBhcmF0ZSh1bnNpZ25lZCBsb25nIGZh
Y2UsIHVuc2lnbmVkIGxvbmcgbWFzaykgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzdGVuY2lsT3Ao
dW5zaWduZWQgbG9uZyBmYWlsLCB1bnNpZ25lZCBsb25nIHpmYWlsLCB1bnNpZ25lZCBsb25nIHpw
YXNzKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHN0ZW5jaWxPcFNlcGFyYXRlKHVuc2lnbmVkIGxv
bmcgZmFjZSwgdW5zaWduZWQgbG9uZyBmYWlsLCB1bnNpZ25lZCBsb25nIHpmYWlsLCB1bnNpZ25l
ZCBsb25nIHpwYXNzKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgdGV4SW1hZ2UyRCh1bnNpZ25l
ZCB0YXJnZXQsIHVuc2lnbmVkIGxldmVsLCB1bnNpZ25lZCBpbnRlcm5hbGZvcm1hdCwgdW5zaWdu
ZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCwgdW5zaWduZWQgYm9yZGVyLCB1bnNpZ25lZCBmb3Jt
YXQsIHVuc2lnbmVkIHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVscykgPSAwOworCisgICAgdmlydHVh
bCB2b2lkIHRleFBhcmFtZXRlcmYodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBwbmFtZSwgZmxv
YXQgcGFyYW0pID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdGV4UGFyYW1ldGVyaSh1bnNpZ25lZCB0
YXJnZXQsIHVuc2lnbmVkIHBuYW1lLCBpbnQgcGFyYW0pID0gMDsKKworICAgIHZpcnR1YWwgdm9p
ZCB0ZXhTdWJJbWFnZTJEKHVuc2lnbmVkIHRhcmdldCwgdW5zaWduZWQgbGV2ZWwsIHVuc2lnbmVk
IHhvZmZzZXQsIHVuc2lnbmVkIHlvZmZzZXQsIHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWln
aHQsIHVuc2lnbmVkIGZvcm1hdCwgdW5zaWduZWQgdHlwZSwgY29uc3Qgdm9pZCogcGl4ZWxzKSA9
IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgdW5pZm9ybTFmKGxvbmcgbG9jYXRpb24sIGZsb2F0IHgp
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdW5pZm9ybTFmdihsb25nIGxvY2F0aW9uLCBpbnQgY291
bnQsIGZsb2F0KiB2KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHVuaWZvcm0xaShsb25nIGxvY2F0
aW9uLCBpbnQgeCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCB1bmlmb3JtMWl2KGxvbmcgbG9jYXRp
b24sIGludCBjb3VudCwgaW50KiB2KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHVuaWZvcm0yZihs
b25nIGxvY2F0aW9uLCBmbG9hdCB4LCBmbG9hdCB5KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHVu
aWZvcm0yZnYobG9uZyBsb2NhdGlvbiwgaW50IGNvdW50LCBmbG9hdCogdikgPSAwOworICAgIHZp
cnR1YWwgdm9pZCB1bmlmb3JtMmkobG9uZyBsb2NhdGlvbiwgaW50IHgsIGludCB5KSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIHVuaWZvcm0yaXYobG9uZyBsb2NhdGlvbiwgaW50IGNvdW50LCBpbnQq
IHYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdW5pZm9ybTNmKGxvbmcgbG9jYXRpb24sIGZsb2F0
IHgsIGZsb2F0IHksIGZsb2F0IHopID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdW5pZm9ybTNmdihs
b25nIGxvY2F0aW9uLCBpbnQgY291bnQsIGZsb2F0KiB2KSA9IDA7CisgICAgdmlydHVhbCB2b2lk
IHVuaWZvcm0zaShsb25nIGxvY2F0aW9uLCBpbnQgeCwgaW50IHksIGludCB6KSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIHVuaWZvcm0zaXYobG9uZyBsb2NhdGlvbiwgaW50IGNvdW50LCBpbnQqIHYp
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdW5pZm9ybTRmKGxvbmcgbG9jYXRpb24sIGZsb2F0IHgs
IGZsb2F0IHksIGZsb2F0IHosIGZsb2F0IHcpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdW5pZm9y
bTRmdihsb25nIGxvY2F0aW9uLCBpbnQgY291bnQsIGZsb2F0KiB2KSA9IDA7CisgICAgdmlydHVh
bCB2b2lkIHVuaWZvcm00aShsb25nIGxvY2F0aW9uLCBpbnQgeCwgaW50IHksIGludCB6LCBpbnQg
dykgPSAwOworICAgIHZpcnR1YWwgdm9pZCB1bmlmb3JtNGl2KGxvbmcgbG9jYXRpb24sIGludCBj
b3VudCwgaW50KiB2KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHVuaWZvcm1NYXRyaXgyZnYobG9u
ZyBsb2NhdGlvbiwgaW50IGNvdW50LCBib29sIHRyYW5zcG9zZSwgY29uc3QgZmxvYXQqIHZhbHVl
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHVuaWZvcm1NYXRyaXgzZnYobG9uZyBsb2NhdGlvbiwg
aW50IGNvdW50LCBib29sIHRyYW5zcG9zZSwgY29uc3QgZmxvYXQqIHZhbHVlKSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIHVuaWZvcm1NYXRyaXg0ZnYobG9uZyBsb2NhdGlvbiwgaW50IGNvdW50LCBi
b29sIHRyYW5zcG9zZSwgY29uc3QgZmxvYXQqIHZhbHVlKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZv
aWQgdXNlUHJvZ3JhbShXZWJHTElkIHByb2dyYW0pID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdmFs
aWRhdGVQcm9ncmFtKFdlYkdMSWQgcHJvZ3JhbSkgPSAwOworCisgICAgdmlydHVhbCB2b2lkIHZl
cnRleEF0dHJpYjFmKHVuc2lnbmVkIGxvbmcgaW5keCwgZmxvYXQgeCkgPSAwOworICAgIHZpcnR1
YWwgdm9pZCB2ZXJ0ZXhBdHRyaWIxZnYodW5zaWduZWQgbG9uZyBpbmR4LCBjb25zdCBmbG9hdCog
dmFsdWVzKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHZlcnRleEF0dHJpYjJmKHVuc2lnbmVkIGxv
bmcgaW5keCwgZmxvYXQgeCwgZmxvYXQgeSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCB2ZXJ0ZXhB
dHRyaWIyZnYodW5zaWduZWQgbG9uZyBpbmR4LCBjb25zdCBmbG9hdCogdmFsdWVzKSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIHZlcnRleEF0dHJpYjNmKHVuc2lnbmVkIGxvbmcgaW5keCwgZmxvYXQg
eCwgZmxvYXQgeSwgZmxvYXQgeikgPSAwOworICAgIHZpcnR1YWwgdm9pZCB2ZXJ0ZXhBdHRyaWIz
ZnYodW5zaWduZWQgbG9uZyBpbmR4LCBjb25zdCBmbG9hdCogdmFsdWVzKSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIHZlcnRleEF0dHJpYjRmKHVuc2lnbmVkIGxvbmcgaW5keCwgZmxvYXQgeCwgZmxv
YXQgeSwgZmxvYXQgeiwgZmxvYXQgdykgPSAwOworICAgIHZpcnR1YWwgdm9pZCB2ZXJ0ZXhBdHRy
aWI0ZnYodW5zaWduZWQgbG9uZyBpbmR4LCBjb25zdCBmbG9hdCogdmFsdWVzKSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIHZlcnRleEF0dHJpYlBvaW50ZXIodW5zaWduZWQgbG9uZyBpbmR4LCBpbnQg
c2l6ZSwgaW50IHR5cGUsIGJvb2wgbm9ybWFsaXplZCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHN0cmlkZSwgdW5zaWduZWQgbG9uZyBvZmZzZXQp
ID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCB2aWV3cG9ydChsb25nIHgsIGxvbmcgeSwgdW5zaWdu
ZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQpID0gMDsKKworICAgIC8vIFN1cHBv
cnQgZm9yIGJ1ZmZlciBjcmVhdGlvbiBhbmQgZGVsZXRpb24KKyAgICB2aXJ0dWFsIHVuc2lnbmVk
IGNyZWF0ZUJ1ZmZlcigpID0gMDsKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGNyZWF0ZUZyYW1lYnVm
ZmVyKCkgPSAwOworICAgIHZpcnR1YWwgdW5zaWduZWQgY3JlYXRlUHJvZ3JhbSgpID0gMDsKKyAg
ICB2aXJ0dWFsIHVuc2lnbmVkIGNyZWF0ZVJlbmRlcmJ1ZmZlcigpID0gMDsKKyAgICB2aXJ0dWFs
IHVuc2lnbmVkIGNyZWF0ZVNoYWRlcih1bnNpZ25lZCBsb25nKSA9IDA7CisgICAgdmlydHVhbCB1
bnNpZ25lZCBjcmVhdGVUZXh0dXJlKCkgPSAwOworCisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZUJ1
ZmZlcih1bnNpZ25lZCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVGcmFtZWJ1ZmZlcih1
bnNpZ25lZCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVQcm9ncmFtKHVuc2lnbmVkKSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZVJlbmRlcmJ1ZmZlcih1bnNpZ25lZCkgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCBkZWxldGVTaGFkZXIodW5zaWduZWQpID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgZGVsZXRlVGV4dHVyZSh1bnNpZ25lZCkgPSAwOworCisgICAgLy8gU3ludGhlc2l6ZXMg
YW4gT3BlbkdMIGVycm9yIHdoaWNoIHdpbGwgYmUgcmV0dXJuZWQgZnJvbSBhCisgICAgLy8gbGF0
ZXIgY2FsbCB0byBnZXRFcnJvci4gVGhpcyBpcyB1c2VkIHRvIGVtdWxhdGUgT3BlbkdMIEVTCisg
ICAgLy8gMi4wIGJlaGF2aW9yIG9uIHRoZSBkZXNrdG9wIGFuZCB0byBlbmZvcmNlIGFkZGl0aW9u
YWwgZXJyb3IKKyAgICAvLyBjaGVja2luZyBtYW5kYXRlZCBieSBXZWJHTC4KKyAgICAvLworICAg
IC8vIFBlciB0aGUgYmVoYXZpb3Igb2YgZ2xHZXRFcnJvciwgdGhpcyBzdG9yZXMgYXQgbW9zdCBv
bmUKKyAgICAvLyBpbnN0YW5jZSBvZiBhbnkgZ2l2ZW4gZXJyb3IsIGFuZCByZXR1cm5zIHRoZW0g
ZnJvbSBjYWxscyB0bworICAgIC8vIGdldEVycm9yIGluIHRoZSBvcmRlciB0aGV5IHdlcmUgYWRk
ZWQuCisgICAgdmlydHVhbCB2b2lkIHN5bnRoZXNpemVHTEVycm9yKHVuc2lnbmVkIGxvbmcgZXJy
b3IpID0gMDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYKSW5kZXg6IFdl
YktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViS2l0Q2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0
L2Nocm9taXVtL3B1YmxpYy9XZWJLaXRDbGllbnQuaAkocmV2aXNpb24gNTYxMzUpCisrKyBXZWJL
aXQvY2hyb21pdW0vcHVibGljL1dlYktpdENsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSw2
ICs0OSw3IEBAIGNsYXNzIFdlYkFwcGxpY2F0aW9uQ2FjaGVIb3N0OwogY2xhc3MgV2ViQXBwbGlj
YXRpb25DYWNoZUhvc3RDbGllbnQ7CiBjbGFzcyBXZWJDbGlwYm9hcmQ7CiBjbGFzcyBXZWJDb29r
aWVKYXI7CitjbGFzcyBXZWJHcmFwaGljc0NvbnRleHQzRDsKIGNsYXNzIFdlYkluZGV4ZWREYXRh
YmFzZTsKIGNsYXNzIFdlYk1lc3NhZ2VQb3J0Q2hhbm5lbDsKIGNsYXNzIFdlYk1pbWVSZWdpc3Ry
eTsKQEAgLTI2OSw2ICsyNzAsMTIgQEAgcHVibGljOgogICAgIC8vIENhbGxhYmxlIGZyb20gYSBi
YWNrZ3JvdW5kIFdlYktpdCB0aHJlYWQuCiAgICAgdmlydHVhbCB2b2lkIGNhbGxPbk1haW5UaHJl
YWQodm9pZCAoKmZ1bmMpKCkpIHsgfQogCisgICAgLy8gV2ViR0wgLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIC8vIE1h
eSByZXR1cm4gbnVsbCBpZiBXZWJHTCBpcyBub3Qgc3VwcG9ydGVkLgorICAgIC8vIFJldHVybnMg
bmV3bHkgYWxsb2NhdGVkIFdlYkdyYXBoaWNzQ29udGV4dDNEIGluc3RhbmNlOyBjYWxsZXIgbXVz
dCBkZWxldGUuCisgICAgdmlydHVhbCBXZWJHcmFwaGljc0NvbnRleHQzRCogY3JlYXRlR3JhcGhp
Y3NDb250ZXh0M0QoKSB7IHJldHVybiAwOyB9CisKIHByb3RlY3RlZDoKICAgICB+V2ViS2l0Q2xp
ZW50KCkgeyB9CiB9OwpJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9HcmFwaGljc0NvbnRleHQz
RC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9HcmFwaGljc0NvbnRleHQz
RC5jcHAJKHJldmlzaW9uIDU2MTM1KQorKysgV2ViS2l0L2Nocm9taXVtL3NyYy9HcmFwaGljc0Nv
bnRleHQzRC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDYgQEAKICNpbmNsdWRlICJI
VE1MSW1hZ2VFbGVtZW50LmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRlICJJ
bWFnZURhdGEuaCIKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIldlYkdM
QnVmZmVyLmgiCiAjaW5jbHVkZSAiV2ViR0xCeXRlQXJyYXkuaCIKICNpbmNsdWRlICJXZWJHTEZs
b2F0QXJyYXkuaCIKQEAgLTUyLDM5ICs1MSw0MiBAQAogI2luY2x1ZGUgIldlYkdMU2hhZGVyLmgi
CiAjaW5jbHVkZSAiV2ViR0xUZXh0dXJlLmgiCiAjaW5jbHVkZSAiV2ViR0xVbnNpZ25lZEJ5dGVB
cnJheS5oIgorI2luY2x1ZGUgIldlYkdyYXBoaWNzQ29udGV4dDNELmgiCisjaW5jbHVkZSAiV2Vi
R3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbC5oIgorI2luY2x1ZGUgIldlYktpdC5oIgorI2lu
Y2x1ZGUgIldlYktpdENsaWVudC5oIgogCiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDx3
dGYvRmFzdE1hbGxvYy5oPgogCi0jaWYgT1MoV0lORE9XUykKLSNpbmNsdWRlIDx3aW5kb3dzLmg+
Ci0jZW5kaWYKLQotI2luY2x1ZGUgIkdML2dsZXcuaCIKLQogI2lmIFBMQVRGT1JNKENHKQogI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgPENvcmVHcmFwaGljcy9DR0NvbnRl
eHQuaD4KICNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ0dJbWFnZS5oPgotI2luY2x1ZGUgPE9wZW5H
TC9PcGVuR0wuaD4KLSNlbHNlCi0jZGVmaW5lIEZMSVBfRlJBTUVCVUZGRVJfVkVSVElDQUxMWQog
I2VuZGlmCiAKLSNpZiBPUyhEQVJXSU4pCi0jZGVmaW5lIFVTRV9URVhUVVJFX1JFQ1RBTkdMRV9G
T1JfRlJBTUVCVUZGRVIKLSNlbmRpZgotCi0jaWYgT1MoTElOVVgpCi0jaW5jbHVkZSA8ZGxmY24u
aD4KLSNpbmNsdWRlICJHTC9nbHhldy5oIgotI2VuZGlmCisvLyB1c2luZyBuYW1lc3BhY2Ugc3Rk
OwogCi11c2luZyBuYW1lc3BhY2Ugc3RkOworLy8gVGhlcmUgYXJlIHR3byBsZXZlbHMgb2YgZGVs
ZWdhdGlvbiBpbiB0aGlzIGZpbGU6CisvLworLy8gICAxLiBHcmFwaGljc0NvbnRleHQzRCBkZWxl
Z2F0ZXMgdG8gR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbC4gVGhpcyBpcyBkb25lCisvLyAgICAg
IHNvIHRoYXQgd2UgaGF2ZSBzb21lIHBsYWNlIHRvIHN0b3JlIGRhdGEgbWVtYmVycyBjb21tb24g
YW1vbmcKKy8vICAgICAgaW1wbGVtZW50YXRpb25zOyBHcmFwaGljc0NvbnRleHQzRCBvbmx5IHBy
b3ZpZGVzIHVzIHRoZSBtX2ludGVybmFsCisvLyAgICAgIHBvaW50ZXIuIFdlIGFsd2F5cyBkZWxl
Z2F0ZSB0byB0aGUgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbC4gV2hpbGUgd2UKKy8vICAgICAg
Y291bGQgc2lkZXN0ZXAgaXQgYW5kIGdvIGRpcmVjdGx5IHRvIHRoZSBXZWJHcmFwaGljc0NvbnRl
eHQzRCBpbiBzb21lCisvLyAgICAgIGNhc2VzLCBpdCBpcyBiZXR0ZXIgZm9yIGNvbnNpc3RlbmN5
IHRvIGFsd2F5cyBkZWxlZ2F0ZSB0aHJvdWdoIGl0LgorLy8KKy8vICAgMi4gR3JhcGhpY3NDb250
ZXh0M0RJbnRlcm5hbCBkZWxlZ2F0ZXMgdG8gYW4gaW1wbGVtZW50YXRpb24gb2YKKy8vICAgICAg
V2ViR3JhcGhpY3NDb250ZXh0M0QuIFRoaXMgaXMgZG9uZSBzbyB3ZSBoYXZlIGEgcGxhY2UgdG8g
aW5qZWN0IG91cgorLy8gICAgICBjb21tYW5kIGJ1ZmZlciBpbXBsZW1lbnRhdGlvbi4KKy8vCisv
LyBUaGUgbGVnYWN5LCBpbi1wcm9jZXNzLCBpbXBsZW1lbnRhdGlvbiB1c2VzIFdlYkdyYXBoaWNz
Q29udGV4dDNERGVmYXVsdEltcGwuCisvLyBUaGUgY29tbWFuZCBidWZmZXIgaW1wbGVtZW50YXRp
b24gd2lsbCB1c2UgYSB0by1iZS1kZWNpZGVkIGNsYXNzIGluIENocm9tZS4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi0vLyBHcmFwaGljc0NvbnRleHQzREludGVybmFsIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLy0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
Ky8vIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwKIAogLy8gVW5jb21tZW50IHRoaXMgdG8gcmVu
ZGVyIHRvIGEgc2VwYXJhdGUgd2luZG93IGZvciBkZWJ1Z2dpbmcKIC8vICNkZWZpbmUgUkVOREVS
X1RPX0RFQlVHR0lOR19XSU5ET1cKQEAgLTkzLDgzICs5NSwyMDcgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBjbGFzcyBHcmFwaGljc0NvbnRleHQzREludGVybmFsIHsKIHB1YmxpYzoKLSAgICBH
cmFwaGljc0NvbnRleHQzREludGVybmFsKEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0
dHJzKTsKKyAgICBHcmFwaGljc0NvbnRleHQzREludGVybmFsKCk7CiAgICAgfkdyYXBoaWNzQ29u
dGV4dDNESW50ZXJuYWwoKTsKIAotICAgIGJvb2wgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAg
Ym9vbCBpbml0aWFsaXplKEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJzKTsKIAog
ICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QgcGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCgp
IGNvbnN0OwogICAgIFBsYXRmb3JtM0RPYmplY3QgcGxhdGZvcm1UZXh0dXJlKCkgY29uc3Q7CiAK
KyAgICBib29sIG1ha2VDb250ZXh0Q3VycmVudCgpOworCisgICAgaW50IHNpemVJbkJ5dGVzKGlu
dCB0eXBlKTsKKwogICAgIHZvaWQgcmVzaGFwZShpbnQgd2lkdGgsIGludCBoZWlnaHQpOwogCiAg
ICAgdm9pZCBiZWdpblBhaW50KFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCk7CisgICAg
dm9pZCBlbmRQYWludCgpOwogCi0gICAgYm9vbCB2YWxpZGF0ZVRleHR1cmVUYXJnZXQoaW50IHRh
cmdldCk7Ci0gICAgYm9vbCB2YWxpZGF0ZVRleHR1cmVQYXJhbWV0ZXIoaW50IHBhcmFtKTsKLQor
ICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIEVudHJ5IHBvaW50cyBmb3IgV2ViR0wuCisgICAg
Ly8KICAgICB2b2lkIGFjdGl2ZVRleHR1cmUodW5zaWduZWQgbG9uZyB0ZXh0dXJlKTsKLSAgICB2
b2lkIGJpbmRCdWZmZXIodW5zaWduZWQgbG9uZyB0YXJnZXQsCi0gICAgICAgICAgICAgICAgICAg
IFdlYkdMQnVmZmVyKiBidWZmZXIpOwotICAgIHZvaWQgYmluZEZyYW1lYnVmZmVyKHVuc2lnbmVk
IGxvbmcgdGFyZ2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgIFdlYkdMRnJhbWVidWZmZXIq
IGZyYW1lYnVmZmVyKTsKLSAgICB2b2lkIGJpbmRUZXh0dXJlKHVuc2lnbmVkIGxvbmcgdGFyZ2V0
LAotICAgICAgICAgICAgICAgICAgICAgV2ViR0xUZXh0dXJlKiB0ZXh0dXJlKTsKLSAgICB2b2lk
IGJ1ZmZlckRhdGFJbXBsKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBpbnQgc2l6ZSwgY29uc3Qgdm9p
ZCogZGF0YSwgdW5zaWduZWQgbG9uZyB1c2FnZSk7CisgICAgdm9pZCBhdHRhY2hTaGFkZXIoV2Vi
R0xQcm9ncmFtKiBwcm9ncmFtLCBXZWJHTFNoYWRlciogc2hhZGVyKTsKKyAgICB2b2lkIGJpbmRB
dHRyaWJMb2NhdGlvbihXZWJHTFByb2dyYW0qLCB1bnNpZ25lZCBsb25nIGluZGV4LCBjb25zdCBT
dHJpbmcmIG5hbWUpOworICAgIHZvaWQgYmluZEJ1ZmZlcih1bnNpZ25lZCBsb25nIHRhcmdldCwg
V2ViR0xCdWZmZXIqKTsKKyAgICB2b2lkIGJpbmRGcmFtZWJ1ZmZlcih1bnNpZ25lZCBsb25nIHRh
cmdldCwgV2ViR0xGcmFtZWJ1ZmZlciopOworICAgIHZvaWQgYmluZFJlbmRlcmJ1ZmZlcih1bnNp
Z25lZCBsb25nIHRhcmdldCwgV2ViR0xSZW5kZXJidWZmZXIqKTsKKyAgICB2b2lkIGJpbmRUZXh0
dXJlKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBXZWJHTFRleHR1cmUqIHRleHR1cmUpOworICAgIHZv
aWQgYmxlbmRDb2xvcihkb3VibGUgcmVkLCBkb3VibGUgZ3JlZW4sIGRvdWJsZSBibHVlLCBkb3Vi
bGUgYWxwaGEpOworICAgIHZvaWQgYmxlbmRFcXVhdGlvbih1bnNpZ25lZCBsb25nIG1vZGUpOwor
ICAgIHZvaWQgYmxlbmRFcXVhdGlvblNlcGFyYXRlKHVuc2lnbmVkIGxvbmcgbW9kZVJHQiwgdW5z
aWduZWQgbG9uZyBtb2RlQWxwaGEpOworICAgIHZvaWQgYmxlbmRGdW5jKHVuc2lnbmVkIGxvbmcg
c2ZhY3RvciwgdW5zaWduZWQgbG9uZyBkZmFjdG9yKTsKKyAgICB2b2lkIGJsZW5kRnVuY1NlcGFy
YXRlKHVuc2lnbmVkIGxvbmcgc3JjUkdCLCB1bnNpZ25lZCBsb25nIGRzdFJHQiwgdW5zaWduZWQg
bG9uZyBzcmNBbHBoYSwgdW5zaWduZWQgbG9uZyBkc3RBbHBoYSk7CisKKyAgICB2b2lkIGJ1ZmZl
ckRhdGEodW5zaWduZWQgbG9uZyB0YXJnZXQsIGludCBzaXplLCB1bnNpZ25lZCBsb25nIHVzYWdl
KTsKKyAgICB2b2lkIGJ1ZmZlckRhdGEodW5zaWduZWQgbG9uZyB0YXJnZXQsIFdlYkdMQXJyYXkq
IGRhdGEsIHVuc2lnbmVkIGxvbmcgdXNhZ2UpOworICAgIHZvaWQgYnVmZmVyU3ViRGF0YSh1bnNp
Z25lZCBsb25nIHRhcmdldCwgbG9uZyBvZmZzZXQsIFdlYkdMQXJyYXkqIGRhdGEpOworCisgICAg
dW5zaWduZWQgbG9uZyBjaGVja0ZyYW1lYnVmZmVyU3RhdHVzKHVuc2lnbmVkIGxvbmcgdGFyZ2V0
KTsKKyAgICB2b2lkIGNsZWFyKHVuc2lnbmVkIGxvbmcgbWFzayk7CisgICAgdm9pZCBjbGVhckNv
bG9yKGRvdWJsZSByZWQsIGRvdWJsZSBncmVlbiwgZG91YmxlIGJsdWUsIGRvdWJsZSBhbHBoYSk7
CisgICAgdm9pZCBjbGVhckRlcHRoKGRvdWJsZSBkZXB0aCk7CisgICAgdm9pZCBjbGVhclN0ZW5j
aWwobG9uZyBzKTsKKyAgICB2b2lkIGNvbG9yTWFzayhib29sIHJlZCwgYm9vbCBncmVlbiwgYm9v
bCBibHVlLCBib29sIGFscGhhKTsKKyAgICB2b2lkIGNvbXBpbGVTaGFkZXIoV2ViR0xTaGFkZXIq
KTsKKworICAgIHZvaWQgY29weVRleEltYWdlMkQodW5zaWduZWQgbG9uZyB0YXJnZXQsIGxvbmcg
bGV2ZWwsIHVuc2lnbmVkIGxvbmcgaW50ZXJuYWxmb3JtYXQsIGxvbmcgeCwgbG9uZyB5LCB1bnNp
Z25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCwgbG9uZyBib3JkZXIpOworICAg
IHZvaWQgY29weVRleFN1YkltYWdlMkQodW5zaWduZWQgbG9uZyB0YXJnZXQsIGxvbmcgbGV2ZWws
IGxvbmcgeG9mZnNldCwgbG9uZyB5b2Zmc2V0LCBsb25nIHgsIGxvbmcgeSwgdW5zaWduZWQgbG9u
ZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQpOworICAgIHZvaWQgY3VsbEZhY2UodW5zaWdu
ZWQgbG9uZyBtb2RlKTsKKyAgICB2b2lkIGRlcHRoRnVuYyh1bnNpZ25lZCBsb25nIGZ1bmMpOwor
ICAgIHZvaWQgZGVwdGhNYXNrKGJvb2wgZmxhZyk7CisgICAgdm9pZCBkZXB0aFJhbmdlKGRvdWJs
ZSB6TmVhciwgZG91YmxlIHpGYXIpOworICAgIHZvaWQgZGV0YWNoU2hhZGVyKFdlYkdMUHJvZ3Jh
bSosIFdlYkdMU2hhZGVyKik7CisgICAgdm9pZCBkaXNhYmxlKHVuc2lnbmVkIGxvbmcgY2FwKTsK
ICAgICB2b2lkIGRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheSh1bnNpZ25lZCBsb25nIGluZGV4KTsK
KyAgICB2b2lkIGRyYXdBcnJheXModW5zaWduZWQgbG9uZyBtb2RlLCBsb25nIGZpcnN0LCBsb25n
IGNvdW50KTsKKyAgICB2b2lkIGRyYXdFbGVtZW50cyh1bnNpZ25lZCBsb25nIG1vZGUsIHVuc2ln
bmVkIGxvbmcgY291bnQsIHVuc2lnbmVkIGxvbmcgdHlwZSwgbG9uZyBvZmZzZXQpOworCisgICAg
dm9pZCBlbmFibGUodW5zaWduZWQgbG9uZyBjYXApOwogICAgIHZvaWQgZW5hYmxlVmVydGV4QXR0
cmliQXJyYXkodW5zaWduZWQgbG9uZyBpbmRleCk7Ci0gICAgdW5zaWduZWQgbG9uZyBnZXRFcnJv
cigpOworICAgIHZvaWQgZmluaXNoKCk7CisgICAgdm9pZCBmbHVzaCgpOworICAgIHZvaWQgZnJh
bWVidWZmZXJSZW5kZXJidWZmZXIodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcg
YXR0YWNobWVudCwgdW5zaWduZWQgbG9uZyByZW5kZXJidWZmZXJ0YXJnZXQsIFdlYkdMUmVuZGVy
YnVmZmVyKik7CisgICAgdm9pZCBmcmFtZWJ1ZmZlclRleHR1cmUyRCh1bnNpZ25lZCBsb25nIHRh
cmdldCwgdW5zaWduZWQgbG9uZyBhdHRhY2htZW50LCB1bnNpZ25lZCBsb25nIHRleHRhcmdldCwg
V2ViR0xUZXh0dXJlKiwgbG9uZyBsZXZlbCk7CisgICAgdm9pZCBmcm9udEZhY2UodW5zaWduZWQg
bG9uZyBtb2RlKTsKKyAgICB2b2lkIGdlbmVyYXRlTWlwbWFwKHVuc2lnbmVkIGxvbmcgdGFyZ2V0
KTsKKworICAgIGJvb2wgZ2V0QWN0aXZlQXR0cmliKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgdW5z
aWduZWQgbG9uZyBpbmRleCwgQWN0aXZlSW5mbyYpOworICAgIGJvb2wgZ2V0QWN0aXZlVW5pZm9y
bShXZWJHTFByb2dyYW0qIHByb2dyYW0sIHVuc2lnbmVkIGxvbmcgaW5kZXgsIEFjdGl2ZUluZm8m
KTsKKworICAgIGludCAgZ2V0QXR0cmliTG9jYXRpb24oV2ViR0xQcm9ncmFtKiwgY29uc3QgU3Ry
aW5nJiBuYW1lKTsKKworICAgIHZvaWQgZ2V0Qm9vbGVhbnYodW5zaWduZWQgbG9uZyBwbmFtZSwg
dW5zaWduZWQgY2hhciogdmFsdWUpOworCisgICAgdm9pZCBnZXRCdWZmZXJQYXJhbWV0ZXJpdih1
bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBwbmFtZSwgaW50KiB2YWx1ZSk7CisK
ICAgICBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBnZXRDb250ZXh0QXR0cmlidXRlcygp
OwotICAgIHZvaWQgdmVydGV4QXR0cmliUG9pbnRlcih1bnNpZ25lZCBsb25nIGluZHgsIGludCBz
aXplLCBpbnQgdHlwZSwgYm9vbCBub3JtYWxpemVkLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBsb25nIHN0cmlkZSwgdW5zaWduZWQgbG9uZyBvZmZzZXQpOwotICAgIHZv
aWQgdmlld3BvcnRJbXBsKGxvbmcgeCwgbG9uZyB5LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNp
Z25lZCBsb25nIGhlaWdodCk7CiAKLSAgICB2b2lkIHN5bnRoZXNpemVHTEVycm9yKHVuc2lnbmVk
IGxvbmcgZXJyb3IpOworICAgIHVuc2lnbmVkIGxvbmcgZ2V0RXJyb3IoKTsKIAotcHJpdmF0ZToK
LSAgICBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBtX2F0dHJzOworICAgIHZvaWQgZ2V0
RmxvYXR2KHVuc2lnbmVkIGxvbmcgcG5hbWUsIGZsb2F0KiB2YWx1ZSk7CiAKLSAgICB1bnNpZ25l
ZCBpbnQgbV90ZXh0dXJlOwotICAgIHVuc2lnbmVkIGludCBtX2ZibzsKLSAgICB1bnNpZ25lZCBp
bnQgbV9kZXB0aEJ1ZmZlcjsKLSAgICB1bnNpZ25lZCBpbnQgbV9jYWNoZWRXaWR0aCwgbV9jYWNo
ZWRIZWlnaHQ7CisgICAgdm9pZCBnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpdih1
bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBhdHRhY2htZW50LCB1bnNpZ25lZCBs
b25nIHBuYW1lLCBpbnQqIHZhbHVlKTsKIAotICAgIC8vIEZvciB0cmFja2luZyB3aGljaCBGQk8g
aXMgYm91bmQKLSAgICB1bnNpZ25lZCBpbnQgbV9ib3VuZEZCTzsKKyAgICB2b2lkIGdldEludGVn
ZXJ2KHVuc2lnbmVkIGxvbmcgcG5hbWUsIGludCogdmFsdWUpOwogCi0jaWZkZWYgRkxJUF9GUkFN
RUJVRkZFUl9WRVJUSUNBTExZCi0gICAgdW5zaWduZWQgY2hhciogbV9zY2FubGluZTsKLSAgICB2
b2lkIGZsaXBWZXJ0aWNhbGx5KHVuc2lnbmVkIGNoYXIqIGZyYW1lYnVmZmVyLAotICAgICAgICAg
ICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHdpZHRoLAotICAgICAgICAgICAgICAgICAgICAg
ICAgdW5zaWduZWQgaW50IGhlaWdodCk7Ci0jZW5kaWYKKyAgICB2b2lkIGdldFByb2dyYW1pdihX
ZWJHTFByb2dyYW0qIHByb2dyYW0sIHVuc2lnbmVkIGxvbmcgcG5hbWUsIGludCogdmFsdWUpOwor
CisgICAgU3RyaW5nIGdldFByb2dyYW1JbmZvTG9nKFdlYkdMUHJvZ3JhbSopOworCisgICAgdm9p
ZCBnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdih1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWdu
ZWQgbG9uZyBwbmFtZSwgaW50KiB2YWx1ZSk7CisKKyAgICB2b2lkIGdldFNoYWRlcml2KFdlYkdM
U2hhZGVyKiwgdW5zaWduZWQgbG9uZyBwbmFtZSwgaW50KiB2YWx1ZSk7CisKKyAgICBTdHJpbmcg
Z2V0U2hhZGVySW5mb0xvZyhXZWJHTFNoYWRlciopOworCisgICAgU3RyaW5nIGdldFNoYWRlclNv
dXJjZShXZWJHTFNoYWRlciopOworICAgIFN0cmluZyBnZXRTdHJpbmcodW5zaWduZWQgbG9uZyBu
YW1lKTsKKworICAgIHZvaWQgZ2V0VGV4UGFyYW1ldGVyZnYodW5zaWduZWQgbG9uZyB0YXJnZXQs
IHVuc2lnbmVkIGxvbmcgcG5hbWUsIGZsb2F0KiB2YWx1ZSk7CisgICAgdm9pZCBnZXRUZXhQYXJh
bWV0ZXJpdih1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBwbmFtZSwgaW50KiB2
YWx1ZSk7CisKKyAgICB2b2lkIGdldFVuaWZvcm1mdihXZWJHTFByb2dyYW0qIHByb2dyYW0sIGxv
bmcgbG9jYXRpb24sIGZsb2F0KiB2YWx1ZSk7CisgICAgdm9pZCBnZXRVbmlmb3JtaXYoV2ViR0xQ
cm9ncmFtKiBwcm9ncmFtLCBsb25nIGxvY2F0aW9uLCBpbnQqIHZhbHVlKTsKKworICAgIGxvbmcg
Z2V0VW5pZm9ybUxvY2F0aW9uKFdlYkdMUHJvZ3JhbSosIGNvbnN0IFN0cmluZyYgbmFtZSk7CisK
KyAgICB2b2lkIGdldFZlcnRleEF0dHJpYmZ2KHVuc2lnbmVkIGxvbmcgaW5kZXgsIHVuc2lnbmVk
IGxvbmcgcG5hbWUsIGZsb2F0KiB2YWx1ZSk7CisgICAgdm9pZCBnZXRWZXJ0ZXhBdHRyaWJpdih1
bnNpZ25lZCBsb25nIGluZGV4LCB1bnNpZ25lZCBsb25nIHBuYW1lLCBpbnQqIHZhbHVlKTsKKwor
ICAgIGxvbmcgZ2V0VmVydGV4QXR0cmliT2Zmc2V0KHVuc2lnbmVkIGxvbmcgaW5kZXgsIHVuc2ln
bmVkIGxvbmcgcG5hbWUpOworCisgICAgdm9pZCBoaW50KHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1
bnNpZ25lZCBsb25nIG1vZGUpOworICAgIGJvb2wgaXNCdWZmZXIoV2ViR0xCdWZmZXIqKTsKKyAg
ICBib29sIGlzRW5hYmxlZCh1bnNpZ25lZCBsb25nIGNhcCk7CisgICAgYm9vbCBpc0ZyYW1lYnVm
ZmVyKFdlYkdMRnJhbWVidWZmZXIqKTsKKyAgICBib29sIGlzUHJvZ3JhbShXZWJHTFByb2dyYW0q
KTsKKyAgICBib29sIGlzUmVuZGVyYnVmZmVyKFdlYkdMUmVuZGVyYnVmZmVyKik7CisgICAgYm9v
bCBpc1NoYWRlcihXZWJHTFNoYWRlciopOworICAgIGJvb2wgaXNUZXh0dXJlKFdlYkdMVGV4dHVy
ZSopOworICAgIHZvaWQgbGluZVdpZHRoKGRvdWJsZSk7CisgICAgdm9pZCBsaW5rUHJvZ3JhbShX
ZWJHTFByb2dyYW0qKTsKKyAgICB2b2lkIHBpeGVsU3RvcmVpKHVuc2lnbmVkIGxvbmcgcG5hbWUs
IGxvbmcgcGFyYW0pOworICAgIHZvaWQgcG9seWdvbk9mZnNldChkb3VibGUgZmFjdG9yLCBkb3Vi
bGUgdW5pdHMpOworCisgICAgUGFzc1JlZlB0cjxXZWJHTEFycmF5PiByZWFkUGl4ZWxzKGxvbmcg
eCwgbG9uZyB5LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCwgdW5z
aWduZWQgbG9uZyBmb3JtYXQsIHVuc2lnbmVkIGxvbmcgdHlwZSk7CisKKyAgICB2b2lkIHJlbGVh
c2VTaGFkZXJDb21waWxlcigpOworICAgIHZvaWQgcmVuZGVyYnVmZmVyU3RvcmFnZSh1bnNpZ25l
ZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBpbnRlcm5hbGZvcm1hdCwgdW5zaWduZWQgbG9u
ZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQpOworICAgIHZvaWQgc2FtcGxlQ292ZXJhZ2Uo
ZG91YmxlIHZhbHVlLCBib29sIGludmVydCk7CisgICAgdm9pZCBzY2lzc29yKGxvbmcgeCwgbG9u
ZyB5LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCk7CisgICAgdm9p
ZCBzaGFkZXJTb3VyY2UoV2ViR0xTaGFkZXIqLCBjb25zdCBTdHJpbmcmIHN0cmluZyk7CisgICAg
dm9pZCBzdGVuY2lsRnVuYyh1bnNpZ25lZCBsb25nIGZ1bmMsIGxvbmcgcmVmLCB1bnNpZ25lZCBs
b25nIG1hc2spOworICAgIHZvaWQgc3RlbmNpbEZ1bmNTZXBhcmF0ZSh1bnNpZ25lZCBsb25nIGZh
Y2UsIHVuc2lnbmVkIGxvbmcgZnVuYywgbG9uZyByZWYsIHVuc2lnbmVkIGxvbmcgbWFzayk7Cisg
ICAgdm9pZCBzdGVuY2lsTWFzayh1bnNpZ25lZCBsb25nIG1hc2spOworICAgIHZvaWQgc3RlbmNp
bE1hc2tTZXBhcmF0ZSh1bnNpZ25lZCBsb25nIGZhY2UsIHVuc2lnbmVkIGxvbmcgbWFzayk7Cisg
ICAgdm9pZCBzdGVuY2lsT3AodW5zaWduZWQgbG9uZyBmYWlsLCB1bnNpZ25lZCBsb25nIHpmYWls
LCB1bnNpZ25lZCBsb25nIHpwYXNzKTsKKyAgICB2b2lkIHN0ZW5jaWxPcFNlcGFyYXRlKHVuc2ln
bmVkIGxvbmcgZmFjZSwgdW5zaWduZWQgbG9uZyBmYWlsLCB1bnNpZ25lZCBsb25nIHpmYWlsLCB1
bnNpZ25lZCBsb25nIHpwYXNzKTsKKworICAgIC8vIFRoZXNlIG5leHQgc2V2ZXJhbCBmdW5jdGlv
bnMgcmV0dXJuIGFuIGVycm9yIGNvZGUgKDAgaWYgbm8gZXJyb3JzKSByYXRoZXIgdGhhbiB1c2lu
ZyBhbiBFeGNlcHRpb25Db2RlLgorICAgIC8vIEN1cnJlbnRseSB0aGV5IHJldHVybiAtMSBvbiBh
bnkgZXJyb3IuCisgICAgaW50IHRleEltYWdlMkQodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBs
ZXZlbCwgdW5zaWduZWQgaW50ZXJuYWxmb3JtYXQsIHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBo
ZWlnaHQsIHVuc2lnbmVkIGJvcmRlciwgdW5zaWduZWQgZm9ybWF0LCB1bnNpZ25lZCB0eXBlLCB2
b2lkKiBwaXhlbHMpOworCisgICAgdm9pZCB0ZXhQYXJhbWV0ZXJmKHVuc2lnbmVkIHRhcmdldCwg
dW5zaWduZWQgcG5hbWUsIGZsb2F0IHBhcmFtKTsKKyAgICB2b2lkIHRleFBhcmFtZXRlcmkodW5z
aWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBwbmFtZSwgaW50IHBhcmFtKTsKKworICAgIGludCB0ZXhT
dWJJbWFnZTJEKHVuc2lnbmVkIHRhcmdldCwgdW5zaWduZWQgbGV2ZWwsIHVuc2lnbmVkIHhvZmZz
ZXQsIHVuc2lnbmVkIHlvZmZzZXQsIHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQsIHVu
c2lnbmVkIGZvcm1hdCwgdW5zaWduZWQgdHlwZSwgdm9pZCogcGl4ZWxzKTsKKworICAgIHZvaWQg
dW5pZm9ybTFmKGxvbmcgbG9jYXRpb24sIGZsb2F0IHgpOworICAgIHZvaWQgdW5pZm9ybTFmdihs
b25nIGxvY2F0aW9uLCBmbG9hdCogdiwgaW50IHNpemUpOworICAgIHZvaWQgdW5pZm9ybTFpKGxv
bmcgbG9jYXRpb24sIGludCB4KTsKKyAgICB2b2lkIHVuaWZvcm0xaXYobG9uZyBsb2NhdGlvbiwg
aW50KiB2LCBpbnQgc2l6ZSk7CisgICAgdm9pZCB1bmlmb3JtMmYobG9uZyBsb2NhdGlvbiwgZmxv
YXQgeCwgZmxvYXQgeSk7CisgICAgdm9pZCB1bmlmb3JtMmZ2KGxvbmcgbG9jYXRpb24sIGZsb2F0
KiB2LCBpbnQgc2l6ZSk7CisgICAgdm9pZCB1bmlmb3JtMmkobG9uZyBsb2NhdGlvbiwgaW50IHgs
IGludCB5KTsKKyAgICB2b2lkIHVuaWZvcm0yaXYobG9uZyBsb2NhdGlvbiwgaW50KiB2LCBpbnQg
c2l6ZSk7CisgICAgdm9pZCB1bmlmb3JtM2YobG9uZyBsb2NhdGlvbiwgZmxvYXQgeCwgZmxvYXQg
eSwgZmxvYXQgeik7CisgICAgdm9pZCB1bmlmb3JtM2Z2KGxvbmcgbG9jYXRpb24sIGZsb2F0KiB2
LCBpbnQgc2l6ZSk7CisgICAgdm9pZCB1bmlmb3JtM2kobG9uZyBsb2NhdGlvbiwgaW50IHgsIGlu
dCB5LCBpbnQgeik7CisgICAgdm9pZCB1bmlmb3JtM2l2KGxvbmcgbG9jYXRpb24sIGludCogdiwg
aW50IHNpemUpOworICAgIHZvaWQgdW5pZm9ybTRmKGxvbmcgbG9jYXRpb24sIGZsb2F0IHgsIGZs
b2F0IHksIGZsb2F0IHosIGZsb2F0IHcpOworICAgIHZvaWQgdW5pZm9ybTRmdihsb25nIGxvY2F0
aW9uLCBmbG9hdCogdiwgaW50IHNpemUpOworICAgIHZvaWQgdW5pZm9ybTRpKGxvbmcgbG9jYXRp
b24sIGludCB4LCBpbnQgeSwgaW50IHosIGludCB3KTsKKyAgICB2b2lkIHVuaWZvcm00aXYobG9u
ZyBsb2NhdGlvbiwgaW50KiB2LCBpbnQgc2l6ZSk7CisgICAgdm9pZCB1bmlmb3JtTWF0cml4MmZ2
KGxvbmcgbG9jYXRpb24sIGJvb2wgdHJhbnNwb3NlLCBmbG9hdCogdmFsdWUsIGludCBzaXplKTsK
KyAgICB2b2lkIHVuaWZvcm1NYXRyaXgzZnYobG9uZyBsb2NhdGlvbiwgYm9vbCB0cmFuc3Bvc2Us
IGZsb2F0KiB2YWx1ZSwgaW50IHNpemUpOworICAgIHZvaWQgdW5pZm9ybU1hdHJpeDRmdihsb25n
IGxvY2F0aW9uLCBib29sIHRyYW5zcG9zZSwgZmxvYXQqIHZhbHVlLCBpbnQgc2l6ZSk7CisKKyAg
ICB2b2lkIHVzZVByb2dyYW0oV2ViR0xQcm9ncmFtKik7CisgICAgdm9pZCB2YWxpZGF0ZVByb2dy
YW0oV2ViR0xQcm9ncmFtKik7CisKKyAgICB2b2lkIHZlcnRleEF0dHJpYjFmKHVuc2lnbmVkIGxv
bmcgaW5keCwgZmxvYXQgeCk7CisgICAgdm9pZCB2ZXJ0ZXhBdHRyaWIxZnYodW5zaWduZWQgbG9u
ZyBpbmR4LCBmbG9hdCogdmFsdWVzKTsKKyAgICB2b2lkIHZlcnRleEF0dHJpYjJmKHVuc2lnbmVk
IGxvbmcgaW5keCwgZmxvYXQgeCwgZmxvYXQgeSk7CisgICAgdm9pZCB2ZXJ0ZXhBdHRyaWIyZnYo
dW5zaWduZWQgbG9uZyBpbmR4LCBmbG9hdCogdmFsdWVzKTsKKyAgICB2b2lkIHZlcnRleEF0dHJp
YjNmKHVuc2lnbmVkIGxvbmcgaW5keCwgZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgeik7CisgICAg
dm9pZCB2ZXJ0ZXhBdHRyaWIzZnYodW5zaWduZWQgbG9uZyBpbmR4LCBmbG9hdCogdmFsdWVzKTsK
KyAgICB2b2lkIHZlcnRleEF0dHJpYjRmKHVuc2lnbmVkIGxvbmcgaW5keCwgZmxvYXQgeCwgZmxv
YXQgeSwgZmxvYXQgeiwgZmxvYXQgdyk7CisgICAgdm9pZCB2ZXJ0ZXhBdHRyaWI0ZnYodW5zaWdu
ZWQgbG9uZyBpbmR4LCBmbG9hdCogdmFsdWVzKTsKKyAgICB2b2lkIHZlcnRleEF0dHJpYlBvaW50
ZXIodW5zaWduZWQgbG9uZyBpbmR4LCBpbnQgc2l6ZSwgaW50IHR5cGUsIGJvb2wgbm9ybWFsaXpl
ZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBzdHJpZGUsIHVu
c2lnbmVkIGxvbmcgb2Zmc2V0KTsKKworICAgIHZvaWQgdmlld3BvcnQobG9uZyB4LCBsb25nIHks
IHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0KTsKIAotICAgIC8vIE5v
dGU6IHdlIGFyZW4ndCBjdXJyZW50bHkgdXNpbmcgdGhpcyBpbmZvcm1hdGlvbiwgYnV0IHdlIHdp
bGwKLSAgICAvLyBuZWVkIHRvIGluIG9yZGVyIHRvIHZlcmlmeSB0aGF0IGFsbCBlbmFibGVkIHZl
cnRleCBhcnJheXMgaGF2ZQotICAgIC8vIGEgdmFsaWQgYnVmZmVyIGJvdW5kIC0tIHRvIGF2b2lk
IGNyYXNoZXMgb24gY2VydGFpbiBjYXJkcy4KLSAgICB1bnNpZ25lZCBpbnQgbV9ib3VuZEFycmF5
QnVmZmVyOwotICAgIGNsYXNzIFZlcnRleEF0dHJpYlBvaW50ZXJTdGF0ZSB7Ci0gICAgcHVibGlj
OgotICAgICAgICBWZXJ0ZXhBdHRyaWJQb2ludGVyU3RhdGUoKTsKLQotICAgICAgICBib29sIGVu
YWJsZWQ7Ci0gICAgICAgIHVuc2lnbmVkIGxvbmcgYnVmZmVyOwotICAgICAgICB1bnNpZ25lZCBs
b25nIGluZHg7Ci0gICAgICAgIGludCBzaXplOwotICAgICAgICBpbnQgdHlwZTsKLSAgICAgICAg
Ym9vbCBub3JtYWxpemVkOwotICAgICAgICB1bnNpZ25lZCBsb25nIHN0cmlkZTsKLSAgICAgICAg
dW5zaWduZWQgbG9uZyBvZmZzZXQ7Ci0gICAgfTsKLQotICAgIGVudW0gewotICAgICAgICBOdW1U
cmFja2VkUG9pbnRlclN0YXRlcyA9IDIKLSAgICB9OwotICAgIFZlcnRleEF0dHJpYlBvaW50ZXJT
dGF0ZSBtX3ZlcnRleEF0dHJpYlBvaW50ZXJTdGF0ZVtOdW1UcmFja2VkUG9pbnRlclN0YXRlc107
CisgICAgdW5zaWduZWQgY3JlYXRlQnVmZmVyKCk7CisgICAgdW5zaWduZWQgY3JlYXRlRnJhbWVi
dWZmZXIoKTsKKyAgICB1bnNpZ25lZCBjcmVhdGVQcm9ncmFtKCk7CisgICAgdW5zaWduZWQgY3Jl
YXRlUmVuZGVyYnVmZmVyKCk7CisgICAgdW5zaWduZWQgY3JlYXRlU2hhZGVyKHVuc2lnbmVkIGxv
bmcpOworICAgIHVuc2lnbmVkIGNyZWF0ZVRleHR1cmUoKTsKKworICAgIHZvaWQgZGVsZXRlQnVm
ZmVyKHVuc2lnbmVkKTsKKyAgICB2b2lkIGRlbGV0ZUZyYW1lYnVmZmVyKHVuc2lnbmVkKTsKKyAg
ICB2b2lkIGRlbGV0ZVByb2dyYW0odW5zaWduZWQpOworICAgIHZvaWQgZGVsZXRlUmVuZGVyYnVm
ZmVyKHVuc2lnbmVkKTsKKyAgICB2b2lkIGRlbGV0ZVNoYWRlcih1bnNpZ25lZCk7CisgICAgdm9p
ZCBkZWxldGVUZXh0dXJlKHVuc2lnbmVkKTsKIAotICAgIC8vIEVycm9ycyByYWlzZWQgYnkgc3lu
dGhlc2l6ZUdMRXJyb3IoKS4KLSAgICBMaXN0SGFzaFNldDx1bnNpZ25lZCBsb25nPiBtX3N5bnRo
ZXRpY0Vycm9yczsKKyAgICB2b2lkIHN5bnRoZXNpemVHTEVycm9yKHVuc2lnbmVkIGxvbmcgZXJy
b3IpOwogCitwcml2YXRlOgorICAgIE93blB0cjxXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNE
PiBtX2ltcGw7CiAjaWYgUExBVEZPUk0oU0tJQSkKICAgICAvLyBJZiB0aGUgd2lkdGggYW5kIGhl
aWdodCBvZiB0aGUgQ2FudmFzJ3MgYmFja2luZyBzdG9yZSBkb24ndAogICAgIC8vIG1hdGNoIHRo
b3NlIHRoYXQgd2Ugd2VyZSBnaXZlbiBpbiB0aGUgbW9zdCByZWNlbnQgY2FsbCB0bwpAQCAtMTc5
LDU5MyArMzA1LDg0IEBAIHByaXZhdGU6CiAgICAgU2tCaXRtYXAqIG1fcmVzaXppbmdCaXRtYXA7
CiAjZW5kaWYKIAotICAgIHN0YXRpYyBib29sIHNfaW5pdGlhbGl6ZWRHTEVXOwotI2lmIE9TKFdJ
TkRPV1MpCi0gICAgSFdORCAgbV9jYW52YXNXaW5kb3c7Ci0gICAgSERDICAgbV9jYW52YXNEQzsK
LSAgICBIR0xSQyBtX2NvbnRleHRPYmo7Ci0jZWxpZiBQTEFURk9STShDRykKLSAgICBDR0xQQnVm
ZmVyT2JqIG1fcGJ1ZmZlcjsKLSAgICBDR0xDb250ZXh0T2JqIG1fY29udGV4dE9iajsKKyNpZiBQ
TEFURk9STShDRykKICAgICB1bnNpZ25lZCBjaGFyKiBtX3JlbmRlck91dHB1dDsKLSNlbGlmIE9T
KExJTlVYKQotICAgIEdMWENvbnRleHQgbV9jb250ZXh0T2JqOwotICAgIEdMWFBidWZmZXIgbV9w
YnVmZmVyOwotCi0gICAgLy8gSW4gb3JkZXIgdG8gYXZvaWQgcHJvYmxlbXMgY2F1c2VkIGJ5IGxp
bmtpbmcgYWdhaW5zdCBsaWJHTCwgd2UKLSAgICAvLyBkeW5hbWljYWxseSBsb29rIHVwIGFsbCB0
aGUgc3ltYm9scyB3ZSBuZWVkLgotICAgIC8vIGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9jaHJv
bWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTE2ODAwCi0gICAgY2xhc3MgR0xDb25uZWN0aW9uIHsKLSAg
ICAgIHB1YmxpYzoKLSAgICAgICAgfkdMQ29ubmVjdGlvbigpOwotCi0gICAgICAgIHN0YXRpYyBH
TENvbm5lY3Rpb24qIGNyZWF0ZSgpOwotCi0gICAgICAgIEdMWEZCQ29uZmlnKiBjaG9vc2VGQkNv
bmZpZyhpbnQgc2NyZWVuLCBjb25zdCBpbnQgKmF0dHJpYl9saXN0LCBpbnQgKm5lbGVtZW50cykK
LSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1fZ2xYQ2hvb3NlRkJDb25maWcobV9kaXNw
bGF5LCBzY3JlZW4sIGF0dHJpYl9saXN0LCBuZWxlbWVudHMpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgR0xYQ29udGV4dCBjcmVhdGVOZXdDb250ZXh0KEdMWEZCQ29uZmlnIGNvbmZpZywgaW50IHJl
bmRlclR5cGUsIEdMWENvbnRleHQgc2hhcmVMaXN0LCBCb29sIGRpcmVjdCkKLSAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuIG1fZ2xYQ3JlYXRlTmV3Q29udGV4dChtX2Rpc3BsYXksIGNvbmZp
ZywgcmVuZGVyVHlwZSwgc2hhcmVMaXN0LCBkaXJlY3QpOwotICAgICAgICB9Ci0KLSAgICAgICAg
R0xYUGJ1ZmZlciBjcmVhdGVQYnVmZmVyKEdMWEZCQ29uZmlnIGNvbmZpZywgY29uc3QgaW50ICph
dHRyaWJMaXN0KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbV9nbFhDcmVhdGVQYnVm
ZmVyKG1fZGlzcGxheSwgY29uZmlnLCBhdHRyaWJMaXN0KTsKLSAgICAgICAgfQotCi0gICAgICAg
IHZvaWQgZGVzdHJveVBidWZmZXIoR0xYUGJ1ZmZlciBwYnVmKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBtX2dsWERlc3Ryb3lQYnVmZmVyKG1fZGlzcGxheSwgcGJ1Zik7Ci0gICAgICAgIH0KLQot
ICAgICAgICBCb29sIG1ha2VDdXJyZW50KEdMWERyYXdhYmxlIGRyYXdhYmxlLCBHTFhDb250ZXh0
IGN0eCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1fZ2xYTWFrZUN1cnJlbnQobV9k
aXNwbGF5LCBkcmF3YWJsZSwgY3R4KTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgZGVzdHJv
eUNvbnRleHQoR0xYQ29udGV4dCBjdHgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1fZ2xYRGVz
dHJveUNvbnRleHQobV9kaXNwbGF5LCBjdHgpOwotICAgICAgICB9Ci0KLSAgICAgICAgR0xYQ29u
dGV4dCBnZXRDdXJyZW50Q29udGV4dCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBt
X2dsWEdldEN1cnJlbnRDb250ZXh0KCk7Ci0gICAgICAgIH0KLQotICAgICAgcHJpdmF0ZToKLSAg
ICAgICAgRGlzcGxheSogbV9kaXNwbGF5OwotICAgICAgICB2b2lkKiBtX2xpYkdMOwotICAgICAg
ICBQRk5HTFhDSE9PU0VGQkNPTkZJR1BST0MgbV9nbFhDaG9vc2VGQkNvbmZpZzsKLSAgICAgICAg
UEZOR0xYQ1JFQVRFTkVXQ09OVEVYVFBST0MgbV9nbFhDcmVhdGVOZXdDb250ZXh0OwotICAgICAg
ICBQRk5HTFhDUkVBVEVQQlVGRkVSUFJPQyBtX2dsWENyZWF0ZVBidWZmZXI7Ci0gICAgICAgIFBG
TkdMWERFU1RST1lQQlVGRkVSUFJPQyBtX2dsWERlc3Ryb3lQYnVmZmVyOwotICAgICAgICB0eXBl
ZGVmIEJvb2wgKCogUEZOR0xYTUFLRUNVUlJFTlRQUk9DKShEaXNwbGF5KiBkcHksIEdMWERyYXdh
YmxlIGRyYXdhYmxlLCBHTFhDb250ZXh0IGN0eCk7Ci0gICAgICAgIFBGTkdMWE1BS0VDVVJSRU5U
UFJPQyBtX2dsWE1ha2VDdXJyZW50OwotICAgICAgICB0eXBlZGVmIHZvaWQgKCogUEZOR0xYREVT
VFJPWUNPTlRFWFRQUk9DKShEaXNwbGF5KiBkcHksIEdMWENvbnRleHQgY3R4KTsKLSAgICAgICAg
UEZOR0xYREVTVFJPWUNPTlRFWFRQUk9DIG1fZ2xYRGVzdHJveUNvbnRleHQ7Ci0gICAgICAgIHR5
cGVkZWYgR0xYQ29udGV4dCAoKiBQRk5HTFhHRVRDVVJSRU5UQ09OVEVYVFBST0MpKHZvaWQpOwot
ICAgICAgICBQRk5HTFhHRVRDVVJSRU5UQ09OVEVYVFBST0MgbV9nbFhHZXRDdXJyZW50Q29udGV4
dDsKLQotICAgICAgICBHTENvbm5lY3Rpb24oRGlzcGxheSogZGlzcGxheSwKLSAgICAgICAgICAg
ICAgICAgICAgIHZvaWQqIGxpYkdMLAotICAgICAgICAgICAgICAgICAgICAgUEZOR0xYQ0hPT1NF
RkJDT05GSUdQUk9DIGNob29zZUZCQ29uZmlnLAotICAgICAgICAgICAgICAgICAgICAgUEZOR0xY
Q1JFQVRFTkVXQ09OVEVYVFBST0MgY3JlYXRlTmV3Q29udGV4dCwKLSAgICAgICAgICAgICAgICAg
ICAgIFBGTkdMWENSRUFURVBCVUZGRVJQUk9DIGNyZWF0ZVBidWZmZXIsCi0gICAgICAgICAgICAg
ICAgICAgICBQRk5HTFhERVNUUk9ZUEJVRkZFUlBST0MgZGVzdHJveVBidWZmZXIsCi0gICAgICAg
ICAgICAgICAgICAgICBQRk5HTFhNQUtFQ1VSUkVOVFBST0MgbWFrZUN1cnJlbnQsCi0gICAgICAg
ICAgICAgICAgICAgICBQRk5HTFhERVNUUk9ZQ09OVEVYVFBST0MgZGVzdHJveUNvbnRleHQsCi0g
ICAgICAgICAgICAgICAgICAgICBQRk5HTFhHRVRDVVJSRU5UQ09OVEVYVFBST0MgZ2V0Q3VycmVu
dENvbnRleHQpCi0gICAgICAgICAgICA6IG1fbGliR0wobGliR0wpCi0gICAgICAgICAgICAsIG1f
ZGlzcGxheShkaXNwbGF5KQotICAgICAgICAgICAgLCBtX2dsWENob29zZUZCQ29uZmlnKGNob29z
ZUZCQ29uZmlnKQotICAgICAgICAgICAgLCBtX2dsWENyZWF0ZU5ld0NvbnRleHQoY3JlYXRlTmV3
Q29udGV4dCkKLSAgICAgICAgICAgICwgbV9nbFhDcmVhdGVQYnVmZmVyKGNyZWF0ZVBidWZmZXIp
Ci0gICAgICAgICAgICAsIG1fZ2xYRGVzdHJveVBidWZmZXIoZGVzdHJveVBidWZmZXIpCi0gICAg
ICAgICAgICAsIG1fZ2xYTWFrZUN1cnJlbnQobWFrZUN1cnJlbnQpCi0gICAgICAgICAgICAsIG1f
Z2xYRGVzdHJveUNvbnRleHQoZGVzdHJveUNvbnRleHQpCi0gICAgICAgICAgICAsIG1fZ2xYR2V0
Q3VycmVudENvbnRleHQoZ2V0Q3VycmVudENvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgfQot
ICAgIH07Ci0KLSAgICBzdGF0aWMgR0xDb25uZWN0aW9uKiBzX2dsOwotI2Vsc2UKLSAgICAjZXJy
b3IgTXVzdCBwb3J0IEdyYXBoaWNzQ29udGV4dDNEIHRvIHlvdXIgcGxhdGZvcm0KICNlbmRpZgog
fTsKIAotYm9vbCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpzX2luaXRpYWxpemVkR0xFVyA9
IGZhbHNlOwotCi0jaWYgT1MoTElOVVgpCi1HcmFwaGljc0NvbnRleHQzREludGVybmFsOjpHTENv
bm5lY3Rpb24qIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OnNfZ2wgPSAwOwotCi1HcmFwaGlj
c0NvbnRleHQzREludGVybmFsOjpHTENvbm5lY3Rpb24qIEdyYXBoaWNzQ29udGV4dDNESW50ZXJu
YWw6OkdMQ29ubmVjdGlvbjo6Y3JlYXRlKCkKLXsKLSAgICBEaXNwbGF5KiBkcHkgPSBYT3BlbkRp
c3BsYXkoMCk7Ci0gICAgaWYgKCFkcHkpIHsKLSAgICAgICAgcHJpbnRmKCJHcmFwaGljc0NvbnRl
eHQzRDogZXJyb3Igb3BlbmluZyBYIGRpc3BsYXlcbiIpOwotICAgICAgICByZXR1cm4gMDsKLSAg
ICB9Ci0KLSAgICAvLyBXZSB1c2UgUlRMRF9HTE9CQUwgc2VtYW50aWNzIHNvIHRoYXQgR0xFVyBp
bml0aWFsaXphdGlvbiB3b3JrczsKLSAgICAvLyBHTEVXIGV4cGVjdHMgdG8gYmUgYWJsZSB0byBv
cGVuIHRoZSBjdXJyZW50IHByb2Nlc3MncyBoYW5kbGUKLSAgICAvLyBhbmQgZG8gZGxzeW0ncyBv
ZiBHTCBlbnRyeSBwb2ludHMgZnJvbSB0aGVyZS4KLSAgICB2b2lkKiBsaWJHTCA9IGRsb3Blbigi
bGliR0wuc28uMSIsIFJUTERfTEFaWSB8IFJUTERfR0xPQkFMKTsKLSAgICBpZiAoIWxpYkdMKSB7
Ci0gICAgICAgIFhDbG9zZURpc3BsYXkoZHB5KTsKLSAgICAgICAgcHJpbnRmKCJHcmFwaGljc0Nv
bnRleHQzRDogZXJyb3Igb3BlbmluZyBsaWJHTC5zby4xOiAlc1xuIiwgZGxlcnJvcigpKTsKLSAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgUEZOR0xYQ0hPT1NFRkJDT05GSUdQUk9DIGNo
b29zZUZCQ29uZmlnID0gKFBGTkdMWENIT09TRUZCQ09ORklHUFJPQykgZGxzeW0obGliR0wsICJn
bFhDaG9vc2VGQkNvbmZpZyIpOwotICAgIFBGTkdMWENSRUFURU5FV0NPTlRFWFRQUk9DIGNyZWF0
ZU5ld0NvbnRleHQgPSAoUEZOR0xYQ1JFQVRFTkVXQ09OVEVYVFBST0MpIGRsc3ltKGxpYkdMLCAi
Z2xYQ3JlYXRlTmV3Q29udGV4dCIpOwotICAgIFBGTkdMWENSRUFURVBCVUZGRVJQUk9DIGNyZWF0
ZVBidWZmZXIgPSAoUEZOR0xYQ1JFQVRFUEJVRkZFUlBST0MpIGRsc3ltKGxpYkdMLCAiZ2xYQ3Jl
YXRlUGJ1ZmZlciIpOwotICAgIFBGTkdMWERFU1RST1lQQlVGRkVSUFJPQyBkZXN0cm95UGJ1ZmZl
ciA9IChQRk5HTFhERVNUUk9ZUEJVRkZFUlBST0MpIGRsc3ltKGxpYkdMLCAiZ2xYRGVzdHJveVBi
dWZmZXIiKTsKLSAgICBQRk5HTFhNQUtFQ1VSUkVOVFBST0MgbWFrZUN1cnJlbnQgPSAoUEZOR0xY
TUFLRUNVUlJFTlRQUk9DKSBkbHN5bShsaWJHTCwgImdsWE1ha2VDdXJyZW50Iik7Ci0gICAgUEZO
R0xYREVTVFJPWUNPTlRFWFRQUk9DIGRlc3Ryb3lDb250ZXh0ID0gKFBGTkdMWERFU1RST1lDT05U
RVhUUFJPQykgZGxzeW0obGliR0wsICJnbFhEZXN0cm95Q29udGV4dCIpOwotICAgIFBGTkdMWEdF
VENVUlJFTlRDT05URVhUUFJPQyBnZXRDdXJyZW50Q29udGV4dCA9IChQRk5HTFhHRVRDVVJSRU5U
Q09OVEVYVFBST0MpIGRsc3ltKGxpYkdMLCAiZ2xYR2V0Q3VycmVudENvbnRleHQiKTsKLSAgICBp
ZiAoIWNob29zZUZCQ29uZmlnIHx8ICFjcmVhdGVOZXdDb250ZXh0IHx8ICFjcmVhdGVQYnVmZmVy
Ci0gICAgICAgIHx8ICFkZXN0cm95UGJ1ZmZlciB8fCAhbWFrZUN1cnJlbnQgfHwgIWRlc3Ryb3lD
b250ZXh0Ci0gICAgICAgIHx8ICFnZXRDdXJyZW50Q29udGV4dCkgewotICAgICAgICBYQ2xvc2VE
aXNwbGF5KGRweSk7Ci0gICAgICAgIGRsY2xvc2UobGliR0wpOwotICAgICAgICBwcmludGYoIkdy
YXBoaWNzQ29udGV4dDNEOiBlcnJvciBsb29raW5nIHVwIGJvb3RzdHJhcHBpbmcgZW50cnkgcG9p
bnRzXG4iKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIHJldHVybiBuZXcgR0xDb25u
ZWN0aW9uKGRweSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJHTCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjaG9vc2VGQkNvbmZpZywKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjcmVhdGVOZXdDb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNy
ZWF0ZVBidWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdHJveVBidWZmZXIs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFrZUN1cnJlbnQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZGVzdHJveUNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZ2V0Q3VycmVudENvbnRleHQpOwotfQotCi1HcmFwaGljc0NvbnRleHQzREludGVybmFsOjpH
TENvbm5lY3Rpb246On5HTENvbm5lY3Rpb24oKQotewotICAgIFhDbG9zZURpc3BsYXkobV9kaXNw
bGF5KTsKLSAgICBkbGNsb3NlKG1fbGliR0wpOwotfQotCi0jZW5kaWYgLy8gT1MoTElOVVgpCi0K
LUdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OlZlcnRleEF0dHJpYlBvaW50ZXJTdGF0ZTo6VmVy
dGV4QXR0cmliUG9pbnRlclN0YXRlKCkKLSAgICA6IGVuYWJsZWQoZmFsc2UpCi0gICAgLCBidWZm
ZXIoMCkKLSAgICAsIGluZHgoMCkKLSAgICAsIHNpemUoMCkKLSAgICAsIHR5cGUoMCkKLSAgICAs
IG5vcm1hbGl6ZWQoZmFsc2UpCi0gICAgLCBzdHJpZGUoMCkKLSAgICAsIG9mZnNldCgwKQotewot
fQotCi1HcmFwaGljc0NvbnRleHQzREludGVybmFsOjpHcmFwaGljc0NvbnRleHQzREludGVybmFs
KEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJzKQotICAgIDogbV9hdHRycyhhdHRy
cykKLSAgICAsIG1fdGV4dHVyZSgwKQotICAgICwgbV9mYm8oMCkKLSAgICAsIG1fZGVwdGhCdWZm
ZXIoMCkKLSAgICAsIG1fYm91bmRGQk8oMCkKLSNpZmRlZiBGTElQX0ZSQU1FQlVGRkVSX1ZFUlRJ
Q0FMTFkKLSAgICAsIG1fc2NhbmxpbmUoMCkKLSNlbmRpZgotICAgICwgbV9ib3VuZEFycmF5QnVm
ZmVyKDApCitHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpHcmFwaGljc0NvbnRleHQzREludGVy
bmFsKCkKICNpZiBQTEFURk9STShTS0lBKQotICAgICwgbV9yZXNpemluZ0JpdG1hcCgwKQotI2Vu
ZGlmCi0jaWYgT1MoV0lORE9XUykKLSAgICAsIG1fY2FudmFzV2luZG93KDApCi0gICAgLCBtX2Nh
bnZhc0RDKDApCi0gICAgLCBtX2NvbnRleHRPYmooMCkKKyAgICA6IG1fcmVzaXppbmdCaXRtYXAo
MCkKICNlbGlmIFBMQVRGT1JNKENHKQotICAgICwgbV9wYnVmZmVyKDApCi0gICAgLCBtX2NvbnRl
eHRPYmooMCkKLSAgICAsIG1fcmVuZGVyT3V0cHV0KDApCi0jZWxpZiBPUyhMSU5VWCkKLSAgICAs
IG1fY29udGV4dE9iaigwKQotICAgICwgbV9wYnVmZmVyKDApCisgICAgOiBtX3JlbmRlck91dHB1
dCgwKQogI2Vsc2UKICNlcnJvciBNdXN0IHBvcnQgdG8geW91ciBwbGF0Zm9ybQogI2VuZGlmCiB7
Ci0gICAgLy8gRklYTUU6IHdlIG5lZWQgdG8gdGFrZSBpbnRvIGFjY291bnQgdGhlIHVzZXIncyBy
ZXF1ZXN0ZWQKLSAgICAvLyBjb250ZXh0IGNyZWF0aW9uIGF0dHJpYnV0ZXMsIGluIHBhcnRpY3Vs
YXIgc3RlbmNpbCBhbmQKLSAgICAvLyBhbnRpYWxpYXMsIGFuZCBkZXRlcm1pbmUgd2hpY2ggY291
bGQgYW5kIGNvdWxkIG5vdCBiZSBob25vcmVkCi0gICAgLy8gYmFzZWQgb24gdGhlIGNhcGFiaWxp
dGllcyBvZiB0aGUgT3BlbkdMIGltcGxlbWVudGF0aW9uLgotICAgIG1fYXR0cnMuYWxwaGEgPSB0
cnVlOwotICAgIG1fYXR0cnMuZGVwdGggPSB0cnVlOwotICAgIG1fYXR0cnMuc3RlbmNpbCA9IGZh
bHNlOwotICAgIG1fYXR0cnMuYW50aWFsaWFzID0gZmFsc2U7Ci0gICAgbV9hdHRycy5wcmVtdWx0
aXBsaWVkQWxwaGEgPSB0cnVlOwotCi0jaWYgT1MoV0lORE9XUykKLSAgICBXTkRDTEFTUyB3YzsK
LSAgICBpZiAoIUdldENsYXNzSW5mbyhHZXRNb2R1bGVIYW5kbGUoMCksIEwiQ0FOVkFTR0wiLCAm
d2MpKSB7Ci0gICAgICAgIFplcm9NZW1vcnkoJndjLCBzaXplb2YoV05EQ0xBU1MpKTsKLSAgICAg
ICAgd2Muc3R5bGUgPSBDU19PV05EQzsKLSAgICAgICAgd2MuaEluc3RhbmNlID0gR2V0TW9kdWxl
SGFuZGxlKDApOwotICAgICAgICB3Yy5scGZuV25kUHJvYyA9IERlZldpbmRvd1Byb2M7Ci0gICAg
ICAgIHdjLmxwc3pDbGFzc05hbWUgPSBMIkNBTlZBU0dMIjsKLQotICAgICAgICBpZiAoIVJlZ2lz
dGVyQ2xhc3MoJndjKSkgewotICAgICAgICAgICAgcHJpbnRmKCJHcmFwaGljc0NvbnRleHQzRDog
UmVnaXN0ZXJDbGFzcyBmYWlsZWRcbiIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9
Ci0gICAgfQotCi0gICAgbV9jYW52YXNXaW5kb3cgPSBDcmVhdGVXaW5kb3coTCJDQU5WQVNHTCIs
IEwiQ0FOVkFTR0wiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdTX0NBUFRJ
T04sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1dfVVNFREVGQVVMVCwgQ1df
VVNFREVGQVVMVCwgQ1dfVVNFREVGQVVMVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBDV19VU0VERUZBVUxULCAwLCAwLCBHZXRNb2R1bGVIYW5kbGUoMCksIDApOwotICAgIGlm
ICghbV9jYW52YXNXaW5kb3cpIHsKLSAgICAgICAgcHJpbnRmKCJHcmFwaGljc0NvbnRleHQzRElu
dGVybmFsOiBDcmVhdGVXaW5kb3cgZmFpbGVkXG4iKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIC8vIGdldCB0aGUgZGV2aWNlIGNvbnRleHQKLSAgICBtX2NhbnZhc0RDID0gR2V0REMo
bV9jYW52YXNXaW5kb3cpOwotICAgIGlmICghbV9jYW52YXNEQykgewotICAgICAgICBwcmludGYo
IkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6IEdldERDIGZhaWxlZFxuIik7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICAvLyBmaW5kIGRlZmF1bHQgcGl4ZWwgZm9ybWF0Ci0gICAgUElY
RUxGT1JNQVRERVNDUklQVE9SIHBmZDsKLSAgICBaZXJvTWVtb3J5KCZwZmQsIHNpemVvZihQSVhF
TEZPUk1BVERFU0NSSVBUT1IpKTsKLSAgICBwZmQublNpemUgPSBzaXplb2YoUElYRUxGT1JNQVRE
RVNDUklQVE9SKTsKLSAgICBwZmQublZlcnNpb24gPSAxOwotICAgIHBmZC5kd0ZsYWdzID0gUEZE
X0RSQVdfVE9fV0lORE9XIHwgUEZEX1NVUFBPUlRfT1BFTkdMCi0jaWZkZWYgUkVOREVSX1RPX0RF
QlVHR0lOR19XSU5ET1cKLSAgICAgICAgfCBQRkRfRE9VQkxFQlVGRkVSCi0jZW5kaWYgLy8gUkVO
REVSX1RPX0RFQlVHR0lOR19XSU5ET1cKLSAgICAgICAgOwotICAgIGludCBwaXhlbGZvcm1hdCA9
IENob29zZVBpeGVsRm9ybWF0KG1fY2FudmFzREMsICZwZmQpOwotCi0gICAgLy8gc2V0IHRoZSBw
aXhlbCBmb3JtYXQgZm9yIHRoZSBkYwotICAgIGlmICghU2V0UGl4ZWxGb3JtYXQobV9jYW52YXNE
QywgcGl4ZWxmb3JtYXQsICZwZmQpKSB7Ci0gICAgICAgIHByaW50ZigiR3JhcGhpY3NDb250ZXh0
M0Q6IFNldFBpeGVsRm9ybWF0IGZhaWxlZFxuIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICAvLyBjcmVhdGUgcmVuZGVyaW5nIGNvbnRleHQKLSAgICBtX2NvbnRleHRPYmogPSB3Z2xD
cmVhdGVDb250ZXh0KG1fY2FudmFzREMpOwotICAgIGlmICghbV9jb250ZXh0T2JqKSB7Ci0gICAg
ICAgIHByaW50ZigiR3JhcGhpY3NDb250ZXh0M0Q6IHdnbENyZWF0ZUNvbnRleHQgZmFpbGVkXG4i
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghd2dsTWFrZUN1cnJlbnQobV9j
YW52YXNEQywgbV9jb250ZXh0T2JqKSkgewotICAgICAgICBwcmludGYoIkdyYXBoaWNzQ29udGV4
dDNEOiB3Z2xNYWtlQ3VycmVudCBmYWlsZWRcbiIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0jaWZkZWYgUkVOREVSX1RPX0RFQlVHR0lOR19XSU5ET1cKLSAgICB0eXBlZGVmIEJPT0wgKFdJ
TkFQSSAqIFBGTldHTFNXQVBJTlRFUlZBTEVYVFBST0MpIChpbnQgaW50ZXJ2YWwpOwotICAgIFBG
TldHTFNXQVBJTlRFUlZBTEVYVFBST0Mgc2V0U3dhcEludGVydmFsID0gMDsKLSAgICBzZXRTd2Fw
SW50ZXJ2YWwgPSAoUEZOV0dMU1dBUElOVEVSVkFMRVhUUFJPQykgd2dsR2V0UHJvY0FkZHJlc3Mo
IndnbFN3YXBJbnRlcnZhbEVYVCIpOwotICAgIGlmIChzZXRTd2FwSW50ZXJ2YWwpCi0gICAgICAg
IHNldFN3YXBJbnRlcnZhbCgxKTsKLSNlbmRpZiAvLyBSRU5ERVJfVE9fREVCVUdHSU5HX1dJTkRP
VwotCi0jZWxpZiBQTEFURk9STShDRykKLSAgICAvLyBDcmVhdGUgYSAxeDEgcGJ1ZmZlciBhbmQg
YXNzb2NpYXRlZCBjb250ZXh0IHRvIGJvb3RzdHJhcCB0aGluZ3MKLSAgICBDR0xQaXhlbEZvcm1h
dEF0dHJpYnV0ZSBhdHRyaWJzW10gPSB7Ci0gICAgICAgIChDR0xQaXhlbEZvcm1hdEF0dHJpYnV0
ZSkga0NHTFBGQVBCdWZmZXIsCi0gICAgICAgIChDR0xQaXhlbEZvcm1hdEF0dHJpYnV0ZSkgMAot
ICAgIH07Ci0gICAgQ0dMUGl4ZWxGb3JtYXRPYmogcGl4ZWxGb3JtYXQ7Ci0gICAgR0xpbnQgbnVt
UGl4ZWxGb3JtYXRzOwotICAgIGlmIChDR0xDaG9vc2VQaXhlbEZvcm1hdChhdHRyaWJzLCAmcGl4
ZWxGb3JtYXQsICZudW1QaXhlbEZvcm1hdHMpICE9IGtDR0xOb0Vycm9yKSB7Ci0gICAgICAgIHBy
aW50ZigiR3JhcGhpY3NDb250ZXh0M0Q6IGVycm9yIGNob29zaW5nIHBpeGVsIGZvcm1hdFxuIik7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKCFwaXhlbEZvcm1hdCkgewotICAgICAg
ICBwcmludGYoIkdyYXBoaWNzQ29udGV4dDNEOiBubyBwaXhlbCBmb3JtYXQgc2VsZWN0ZWRcbiIp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIENHTENvbnRleHRPYmogY29udGV4dDsKLSAg
ICBDR0xFcnJvciByZXMgPSBDR0xDcmVhdGVDb250ZXh0KHBpeGVsRm9ybWF0LCAwLCAmY29udGV4
dCk7Ci0gICAgQ0dMRGVzdHJveVBpeGVsRm9ybWF0KHBpeGVsRm9ybWF0KTsKLSAgICBpZiAocmVz
ICE9IGtDR0xOb0Vycm9yKSB7Ci0gICAgICAgIHByaW50ZigiR3JhcGhpY3NDb250ZXh0M0Q6IGVy
cm9yIGNyZWF0aW5nIGNvbnRleHRcbiIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIENH
TFBCdWZmZXJPYmogcGJ1ZmZlcjsKLSAgICBpZiAoQ0dMQ3JlYXRlUEJ1ZmZlcigxLCAxLCBHTF9U
RVhUVVJFXzJELCBHTF9SR0JBLCAwLCAmcGJ1ZmZlcikgIT0ga0NHTE5vRXJyb3IpIHsKLSAgICAg
ICAgQ0dMRGVzdHJveUNvbnRleHQoY29udGV4dCk7Ci0gICAgICAgIHByaW50ZigiR3JhcGhpY3ND
b250ZXh0M0Q6IGVycm9yIGNyZWF0aW5nIHBidWZmZXJcbiIpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotICAgIGlmIChDR0xTZXRQQnVmZmVyKGNvbnRleHQsIHBidWZmZXIsIDAsIDAsIDApICE9
IGtDR0xOb0Vycm9yKSB7Ci0gICAgICAgIENHTERlc3Ryb3lDb250ZXh0KGNvbnRleHQpOwotICAg
ICAgICBDR0xEZXN0cm95UEJ1ZmZlcihwYnVmZmVyKTsKLSAgICAgICAgcHJpbnRmKCJHcmFwaGlj
c0NvbnRleHQzRDogZXJyb3IgYXR0YWNoaW5nIHBidWZmZXIgdG8gY29udGV4dFxuIik7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKENHTFNldEN1cnJlbnRDb250ZXh0KGNvbnRleHQp
ICE9IGtDR0xOb0Vycm9yKSB7Ci0gICAgICAgIENHTERlc3Ryb3lDb250ZXh0KGNvbnRleHQpOwot
ICAgICAgICBDR0xEZXN0cm95UEJ1ZmZlcihwYnVmZmVyKTsKLSAgICAgICAgcHJpbnRmKCJHcmFw
aGljc0NvbnRleHQzRDogZXJyb3IgbWFraW5nIGNvbnRleHQgY3VycmVudFxuIik7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0gICAgbV9wYnVmZmVyID0gcGJ1ZmZlcjsKLSAgICBtX2NvbnRleHRP
YmogPSBjb250ZXh0OwotI2VsaWYgT1MoTElOVVgpCi0gICAgaWYgKCFzX2dsKSB7Ci0gICAgICAg
IHNfZ2wgPSBHTENvbm5lY3Rpb246OmNyZWF0ZSgpOwotICAgICAgICBpZiAoIXNfZ2wpCi0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaW50IGNvbmZpZ0F0dHJzW10gPSB7Ci0gICAg
ICAgIEdMWF9EUkFXQUJMRV9UWVBFLAotICAgICAgICBHTFhfUEJVRkZFUl9CSVQsCi0gICAgICAg
IEdMWF9SRU5ERVJfVFlQRSwKLSAgICAgICAgR0xYX1JHQkFfQklULAotICAgICAgICBHTFhfRE9V
QkxFQlVGRkVSLAotICAgICAgICAwLAotICAgICAgICAwCi0gICAgfTsKLSAgICBpbnQgbmVsZW1l
bnRzID0gMDsKLSAgICBHTFhGQkNvbmZpZyogY29uZmlnID0gc19nbC0+Y2hvb3NlRkJDb25maWco
MCwgY29uZmlnQXR0cnMsICZuZWxlbWVudHMpOwotICAgIGlmICghY29uZmlnKSB7Ci0gICAgICAg
IHByaW50ZigiR3JhcGhpY3NDb250ZXh0M0Q6IGdsWENob29zZUZCQ29uZmlnIGZhaWxlZFxuIik7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKCFuZWxlbWVudHMpIHsKLSAgICAgICAg
cHJpbnRmKCJHcmFwaGljc0NvbnRleHQzRDogZ2xYQ2hvb3NlRkJDb25maWcgcmV0dXJuZWQgMCBl
bGVtZW50c1xuIik7Ci0gICAgICAgIFhGcmVlKGNvbmZpZyk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0gICAgR0xYQ29udGV4dCBjb250ZXh0ID0gc19nbC0+Y3JlYXRlTmV3Q29udGV4dChjb25m
aWdbMF0sIEdMWF9SR0JBX1RZUEUsIDAsIFRydWUpOwotICAgIGlmICghY29udGV4dCkgewotICAg
ICAgICBwcmludGYoIkdyYXBoaWNzQ29udGV4dDNEOiBnbFhDcmVhdGVOZXdDb250ZXh0IGZhaWxl
ZFxuIik7Ci0gICAgICAgIFhGcmVlKGNvbmZpZyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0g
ICAgaW50IHBidWZmZXJBdHRyc1tdID0gewotICAgICAgICBHTFhfUEJVRkZFUl9XSURUSCwKLSAg
ICAgICAgMSwKLSAgICAgICAgR0xYX1BCVUZGRVJfSEVJR0hULAotICAgICAgICAxLAotICAgICAg
ICAwCi0gICAgfTsKLSAgICBHTFhQYnVmZmVyIHBidWZmZXIgPSBzX2dsLT5jcmVhdGVQYnVmZmVy
KGNvbmZpZ1swXSwgcGJ1ZmZlckF0dHJzKTsKLSAgICBYRnJlZShjb25maWcpOwotICAgIGlmICgh
cGJ1ZmZlcikgewotICAgICAgICBwcmludGYoIkdyYXBoaWNzQ29udGV4dDNEOiBnbHhDcmVhdGVQ
YnVmZmVyIGZhaWxlZFxuIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKCFzX2ds
LT5tYWtlQ3VycmVudChwYnVmZmVyLCBjb250ZXh0KSkgewotICAgICAgICBwcmludGYoIkdyYXBo
aWNzQ29udGV4dDNEOiBnbFhNYWtlQ3VycmVudCBmYWlsZWRcbiIpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotICAgIG1fY29udGV4dE9iaiA9IGNvbnRleHQ7Ci0gICAgbV9wYnVmZmVyID0gcGJ1
ZmZlcjsKLSNlbHNlCi0jZXJyb3IgTXVzdCBwb3J0IHRvIHlvdXIgcGxhdGZvcm0KLSNlbmRpZgot
Ci0gICAgaWYgKCFzX2luaXRpYWxpemVkR0xFVykgewotICAgICAgICAvLyBJbml0aWFsaXplIEdM
RVcgYW5kIGNoZWNrIGZvciBHTCAyLjAgc3VwcG9ydCBieSB0aGUgZHJpdmVycy4KLSAgICAgICAg
R0xlbnVtIGdsZXdJbml0UmVzdWx0ID0gZ2xld0luaXQoKTsKLSAgICAgICAgaWYgKGdsZXdJbml0
UmVzdWx0ICE9IEdMRVdfT0spIHsKLSAgICAgICAgICAgIHByaW50ZigiR3JhcGhpY3NDb250ZXh0
M0Q6IEdMRVcgaW5pdGlhbGl6YXRpb24gZmFpbGVkXG4iKTsKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgfQotICAgICAgICBpZiAoIWdsZXdJc1N1cHBvcnRlZCgiR0xfVkVSU0lPTl8yXzAi
KSkgewotICAgICAgICAgICAgcHJpbnRmKCJHcmFwaGljc0NvbnRleHQzRDogT3BlbkdMIDIuMCBu
b3Qgc3VwcG9ydGVkXG4iKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAg
ICBzX2luaXRpYWxpemVkR0xFVyA9IHRydWU7Ci0gICAgfQogfQogCiBHcmFwaGljc0NvbnRleHQz
REludGVybmFsOjp+R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbCgpCiB7Ci0gICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7Ci0jaWZuZGVmIFJFTkRFUl9UT19ERUJVR0dJTkdfV0lORE9XCi0gICAgZ2xE
ZWxldGVSZW5kZXJidWZmZXJzRVhUKDEsICZtX2RlcHRoQnVmZmVyKTsKLSAgICBnbERlbGV0ZVRl
eHR1cmVzKDEsICZtX3RleHR1cmUpOworI2lmIFBMQVRGT1JNKFNLSUEpCisgICAgaWYgKG1fcmVz
aXppbmdCaXRtYXApCisgICAgICAgIGRlbGV0ZSBtX3Jlc2l6aW5nQml0bWFwOworI2VsaWYgUExB
VEZPUk0oQ0cpCisgICAgaWYgKG1fcmVuZGVyT3V0cHV0KQorICAgICAgICBkZWxldGVbXSBtX3Jl
bmRlck91dHB1dDsKKyNlbmRpZgorCiAjaWZkZWYgRkxJUF9GUkFNRUJVRkZFUl9WRVJUSUNBTExZ
CiAgICAgaWYgKG1fc2NhbmxpbmUpCiAgICAgICAgIGRlbGV0ZVtdIG1fc2NhbmxpbmU7CiAjZW5k
aWYKLSAgICBnbERlbGV0ZUZyYW1lYnVmZmVyc0VYVCgxLCAmbV9mYm8pOwotI2VuZGlmIC8vICFS
RU5ERVJfVE9fREVCVUdHSU5HX1dJTkRPVwogI2lmIFBMQVRGT1JNKFNLSUEpCiAgICAgaWYgKG1f
cmVzaXppbmdCaXRtYXApCiAgICAgICAgIGRlbGV0ZSBtX3Jlc2l6aW5nQml0bWFwOwogI2VuZGlm
Ci0jaWYgT1MoV0lORE9XUykKLSAgICB3Z2xNYWtlQ3VycmVudCgwLCAwKTsKLSAgICB3Z2xEZWxl
dGVDb250ZXh0KG1fY29udGV4dE9iaik7Ci0gICAgUmVsZWFzZURDKG1fY2FudmFzV2luZG93LCBt
X2NhbnZhc0RDKTsKLSAgICBEZXN0cm95V2luZG93KG1fY2FudmFzV2luZG93KTsKLSNlbGlmIFBM
QVRGT1JNKENHKQotICAgIENHTFNldEN1cnJlbnRDb250ZXh0KDApOwotICAgIENHTERlc3Ryb3lD
b250ZXh0KG1fY29udGV4dE9iaik7Ci0gICAgQ0dMRGVzdHJveVBCdWZmZXIobV9wYnVmZmVyKTsK
LSAgICBpZiAobV9yZW5kZXJPdXRwdXQpCi0gICAgICAgIGRlbGV0ZVtdIG1fcmVuZGVyT3V0cHV0
OwotI2VsaWYgT1MoTElOVVgpCi0gICAgc19nbC0+bWFrZUN1cnJlbnQoMCwgMCk7Ci0gICAgc19n
bC0+ZGVzdHJveUNvbnRleHQobV9jb250ZXh0T2JqKTsKLSAgICBzX2dsLT5kZXN0cm95UGJ1ZmZl
cihtX3BidWZmZXIpOwotI2Vsc2UKLSNlcnJvciBNdXN0IHBvcnQgdG8geW91ciBwbGF0Zm9ybQot
I2VuZGlmCi0gICAgbV9jb250ZXh0T2JqID0gMDsKIH0KIAotYm9vbCBHcmFwaGljc0NvbnRleHQz
REludGVybmFsOjptYWtlQ29udGV4dEN1cnJlbnQoKQorYm9vbCBHcmFwaGljc0NvbnRleHQzRElu
dGVybmFsOjppbml0aWFsaXplKEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJzKQog
ewotI2lmIE9TKFdJTkRPV1MpCi0gICAgaWYgKHdnbEdldEN1cnJlbnRDb250ZXh0KCkgIT0gbV9j
b250ZXh0T2JqKQotICAgICAgICBpZiAod2dsTWFrZUN1cnJlbnQobV9jYW52YXNEQywgbV9jb250
ZXh0T2JqKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotI2VsaWYgUExBVEZPUk0oQ0cpCi0g
ICAgaWYgKENHTEdldEN1cnJlbnRDb250ZXh0KCkgIT0gbV9jb250ZXh0T2JqKQotICAgICAgICBp
ZiAoQ0dMU2V0Q3VycmVudENvbnRleHQobV9jb250ZXh0T2JqKSA9PSBrQ0dMTm9FcnJvcikKLSAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotI2VsaWYgT1MoTElOVVgpCi0gICAgaWYgKHNfZ2wtPmdl
dEN1cnJlbnRDb250ZXh0KCkgIT0gbV9jb250ZXh0T2JqKQotICAgICAgICBpZiAoc19nbC0+bWFr
ZUN1cnJlbnQobV9wYnVmZmVyLCBtX2NvbnRleHRPYmopKQotICAgICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0jZWxzZQotI2Vycm9yIE11c3QgcG9ydCB0byB5b3VyIHBsYXRmb3JtCi0jZW5kaWYKLSAg
ICByZXR1cm4gZmFsc2U7CisgICAgV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRDo6QXR0cmli
dXRlcyB3ZWJBdHRyaWJ1dGVzOworICAgIHdlYkF0dHJpYnV0ZXMuYWxwaGEgPSBhdHRycy5hbHBo
YTsKKyAgICB3ZWJBdHRyaWJ1dGVzLmRlcHRoID0gYXR0cnMuZGVwdGg7CisgICAgd2ViQXR0cmli
dXRlcy5zdGVuY2lsID0gYXR0cnMuc3RlbmNpbDsKKyAgICB3ZWJBdHRyaWJ1dGVzLmFudGlhbGlh
cyA9IGF0dHJzLmFudGlhbGlhczsKKyAgICB3ZWJBdHRyaWJ1dGVzLnByZW11bHRpcGxpZWRBbHBo
YSA9IGF0dHJzLnByZW11bHRpcGxpZWRBbHBoYTsKKyAgICAvLyBGSVhNRTogb25jZSB0aGUgQ2hy
b21pdW0gcG9ydGlvbiBvZiB0aGUgV2ViS2l0Q2xpZW50IGNoYW5nZXMgaGFzIGxhbmRlZCwKKyAg
ICAvLyBjaGFuZ2UgdGhpcyB0byBjYWxsIFdlYktpdDo6d2ViS2l0Q2xpZW50KCktPmNyZWF0ZUdy
YXBoaWNzQ29udGV4dDNEKCkuCisgICAgV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRCogd2Vi
Q29udGV4dCA9IFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZURlZmF1bHQoKTsK
KyAgICBpZiAoIXdlYkNvbnRleHQpIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAg
ICBpZiAoIXdlYkNvbnRleHQtPmluaXRpYWxpemUod2ViQXR0cmlidXRlcykpIHsKKyAgICAgICAg
ZGVsZXRlIHdlYkNvbnRleHQ7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgbV9p
bXBsLnNldCh3ZWJDb250ZXh0KTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogUGxhdGZvcm1HcmFw
aGljc0NvbnRleHQzRCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpwbGF0Zm9ybUdyYXBoaWNz
Q29udGV4dDNEKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9jb250ZXh0T2JqOworICAgIHJldHVy
biAwOwogfQogCiBQbGF0Zm9ybTNET2JqZWN0IEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OnBs
YXRmb3JtVGV4dHVyZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fdGV4dHVyZTsKLX0KLQotc3Rh
dGljIGludCBjcmVhdGVUZXh0dXJlT2JqZWN0KEdMZW51bSB0YXJnZXQpCi17Ci0gICAgR0x1aW50
IHRleHR1cmUgPSAwOwotICAgIGdsR2VuVGV4dHVyZXMoMSwgJnRleHR1cmUpOwotICAgIGdsQmlu
ZFRleHR1cmUodGFyZ2V0LCB0ZXh0dXJlKTsKLSAgICBnbFRleFBhcmFtZXRlcmYodGFyZ2V0LCBH
TF9URVhUVVJFX01JTl9GSUxURVIsIEdMX05FQVJFU1QpOwotICAgIGdsVGV4UGFyYW1ldGVyZih0
YXJnZXQsIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xfTkVBUkVTVCk7Ci0gICAgcmV0dXJuIHRl
eHR1cmU7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6cmVzaGFwZShpbnQg
d2lkdGgsIGludCBoZWlnaHQpCi17Ci0jaWZkZWYgUkVOREVSX1RPX0RFQlVHR0lOR19XSU5ET1cK
LSAgICBTZXRXaW5kb3dQb3MobV9jYW52YXNXaW5kb3csIEhXTkRfVE9QLCAwLCAwLCB3aWR0aCwg
aGVpZ2h0LAotICAgICAgICAgICAgICAgICBTV1BfTk9NT1ZFKTsKLSAgICBTaG93V2luZG93KG1f
Y2FudmFzV2luZG93LCBTV19TSE9XKTsKLSNlbmRpZgotCi0gICAgbV9jYWNoZWRXaWR0aCA9IHdp
ZHRoOwotICAgIG1fY2FjaGVkSGVpZ2h0ID0gaGVpZ2h0OwotICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOwotCi0jaWZuZGVmIFJFTkRFUl9UT19ERUJVR0dJTkdfV0lORE9XCi0jaWZkZWYgVVNFX1RF
WFRVUkVfUkVDVEFOR0xFX0ZPUl9GUkFNRUJVRkZFUgotICAgIC8vIEdMX1RFWFRVUkVfUkVDVEFO
R0xFX0FSQiBpcyB0aGUgYmVzdCBzdXBwb3J0ZWQgcmVuZGVyIHRhcmdldCBvbiBNYWMgT1MgWAot
ICAgIEdMZW51bSB0YXJnZXQgPSBHTF9URVhUVVJFX1JFQ1RBTkdMRV9BUkI7Ci0jZWxzZQotICAg
IEdMZW51bSB0YXJnZXQgPSBHTF9URVhUVVJFXzJEOwotI2VuZGlmCi0gICAgaWYgKCFtX3RleHR1
cmUpIHsKLSAgICAgICAgLy8gR2VuZXJhdGUgdGhlIHRleHR1cmUgb2JqZWN0Ci0gICAgICAgIG1f
dGV4dHVyZSA9IGNyZWF0ZVRleHR1cmVPYmplY3QodGFyZ2V0KTsKLSAgICAgICAgLy8gR2VuZXJh
dGUgdGhlIGZyYW1lYnVmZmVyIG9iamVjdAotICAgICAgICBnbEdlbkZyYW1lYnVmZmVyc0VYVCgx
LCAmbV9mYm8pOwotICAgICAgICAvLyBHZW5lcmF0ZSB0aGUgZGVwdGggYnVmZmVyCi0gICAgICAg
IGdsR2VuUmVuZGVyYnVmZmVyc0VYVCgxLCAmbV9kZXB0aEJ1ZmZlcik7Ci0gICAgfQotCi0gICAg
Ly8gUmVhbGxvY2F0ZSB0aGUgY29sb3IgYW5kIGRlcHRoIGJ1ZmZlcnMKLSAgICBnbEJpbmRUZXh0
dXJlKHRhcmdldCwgbV90ZXh0dXJlKTsKLSAgICBnbFRleEltYWdlMkQodGFyZ2V0LCAwLCBHTF9S
R0JBOCwgd2lkdGgsIGhlaWdodCwgMCwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgMCk7Ci0g
ICAgZ2xCaW5kVGV4dHVyZSh0YXJnZXQsIDApOwotCi0gICAgZ2xCaW5kRnJhbWVidWZmZXJFWFQo
R0xfRlJBTUVCVUZGRVJfRVhULCBtX2Zibyk7Ci0gICAgbV9ib3VuZEZCTyA9IG1fZmJvOwotICAg
IGdsQmluZFJlbmRlcmJ1ZmZlckVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCBtX2RlcHRoQnVmZmVy
KTsKLSAgICBnbFJlbmRlcmJ1ZmZlclN0b3JhZ2VFWFQoR0xfUkVOREVSQlVGRkVSX0VYVCwgR0xf
REVQVEhfQ09NUE9ORU5ULCB3aWR0aCwgaGVpZ2h0KTsKLSAgICBnbEJpbmRSZW5kZXJidWZmZXJF
WFQoR0xfUkVOREVSQlVGRkVSX0VYVCwgMCk7Ci0KLSAgICBnbEZyYW1lYnVmZmVyVGV4dHVyZTJE
RVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgR0xfQ09MT1JfQVRUQUNITUVOVDBfRVhULCB0YXJnZXQs
IG1fdGV4dHVyZSwgMCk7Ci0gICAgZ2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlckVYVChHTF9GUkFN
RUJVRkZFUl9FWFQsIEdMX0RFUFRIX0FUVEFDSE1FTlRfRVhULCBHTF9SRU5ERVJCVUZGRVJfRVhU
LCBtX2RlcHRoQnVmZmVyKTsKLSAgICBHTGVudW0gc3RhdHVzID0gZ2xDaGVja0ZyYW1lYnVmZmVy
U3RhdHVzRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCk7Ci0gICAgaWYgKHN0YXR1cyAhPSBHTF9GUkFN
RUJVRkZFUl9DT01QTEVURV9FWFQpIHsKLSAgICAgICAgcHJpbnRmKCJHcmFwaGljc0NvbnRleHQz
RDogZnJhbWVidWZmZXIgd2FzIGluY29tcGxldGVcbiIpOwotCi0gICAgICAgIC8vIEZJWE1FOiBj
bGVhbnVwLgotICAgICAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIH0KLSNlbmRpZiAgLy8gUkVO
REVSX1RPX0RFQlVHR0lOR19XSU5ET1cKLQotI2lmZGVmIEZMSVBfRlJBTUVCVUZGRVJfVkVSVElD
QUxMWQotICAgIGlmIChtX3NjYW5saW5lKSB7Ci0gICAgICAgIGRlbGV0ZVtdIG1fc2NhbmxpbmU7
Ci0gICAgICAgIG1fc2NhbmxpbmUgPSAwOwotICAgIH0KLSAgICBtX3NjYW5saW5lID0gbmV3IHVu
c2lnbmVkIGNoYXJbd2lkdGggKiA0XTsKLSNlbmRpZiAgLy8gRkxJUF9GUkFNRUJVRkZFUl9WRVJU
SUNBTExZCi0KLSAgICBnbENsZWFyKEdMX0NPTE9SX0JVRkZFUl9CSVQpOwotCi0jaWYgUExBVEZP
Uk0oQ0cpCi0gICAgLy8gTmVlZCB0byByZWFsbG9jYXRlIHRoZSBjbGllbnQtc2lkZSBiYWNraW5n
IHN0b3JlLgotICAgIC8vIEZJWE1FOiBtYWtlIHRoaXMgbW9yZSBlZmZpY2llbnQuCi0gICAgaWYg
KG1fcmVuZGVyT3V0cHV0KSB7Ci0gICAgICAgIGRlbGV0ZVtdIG1fcmVuZGVyT3V0cHV0OwotICAg
ICAgICBtX3JlbmRlck91dHB1dCA9IDA7Ci0gICAgfQotICAgIGludCByb3dCeXRlcyA9IHdpZHRo
ICogNDsKLSAgICBtX3JlbmRlck91dHB1dCA9IG5ldyB1bnNpZ25lZCBjaGFyW2hlaWdodCAqIHJv
d0J5dGVzXTsKLSNlbmRpZiAgLy8gUExBVEZPUk0oQ0cpCi19Ci0KLSNpZmRlZiBGTElQX0ZSQU1F
QlVGRkVSX1ZFUlRJQ0FMTFkKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6ZmxpcFZl
cnRpY2FsbHkodW5zaWduZWQgY2hhciogZnJhbWVidWZmZXIsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCB3aWR0aCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGhlaWdo
dCkKLXsKLSAgICB1bnNpZ25lZCBjaGFyKiBzY2FubGluZSA9IG1fc2NhbmxpbmU7Ci0gICAgaWYg
KCFzY2FubGluZSkKLSAgICAgICAgcmV0dXJuOwotICAgIHVuc2lnbmVkIGludCByb3dCeXRlcyA9
IHdpZHRoICogNDsKLSAgICB1bnNpZ25lZCBpbnQgY291bnQgPSBoZWlnaHQgLyAyOwotICAgIGZv
ciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewotICAgICAgICB1bnNpZ25l
ZCBjaGFyKiByb3dBID0gZnJhbWVidWZmZXIgKyBpICogcm93Qnl0ZXM7Ci0gICAgICAgIHVuc2ln
bmVkIGNoYXIqIHJvd0IgPSBmcmFtZWJ1ZmZlciArIChoZWlnaHQgLSBpIC0gMSkgKiByb3dCeXRl
czsKLSAgICAgICAgLy8gRklYTUU6IHRoaXMgaXMgd2hlcmUgdGhlIG11bHRpcGxpY2F0aW9uIG9m
IHRoZSBhbHBoYQotICAgICAgICAvLyBjaGFubmVsIGludG8gdGhlIGNvbG9yIGJ1ZmZlciB3aWxs
IG5lZWQgdG8gb2NjdXIgaWYgdGhlCi0gICAgICAgIC8vIHVzZXIgc3BlY2lmaWVzIHRoZSAicHJl
bXVsdGlwbHlBbHBoYSIgZmxhZyBpbiB0aGUgY29udGV4dAotICAgICAgICAvLyBjcmVhdGlvbiBh
dHRyaWJ1dGVzLgotICAgICAgICBtZW1jcHkoc2NhbmxpbmUsIHJvd0IsIHJvd0J5dGVzKTsKLSAg
ICAgICAgbWVtY3B5KHJvd0IsIHJvd0EsIHJvd0J5dGVzKTsKLSAgICAgICAgbWVtY3B5KHJvd0Es
IHNjYW5saW5lLCByb3dCeXRlcyk7Ci0gICAgfQorICAgIHJldHVybiAwOwogfQotI2VuZGlmCiAK
IHZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6YmVnaW5QYWludChXZWJHTFJlbmRlcmlu
Z0NvbnRleHQqIGNvbnRleHQpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0KLSNpZmRl
ZiBSRU5ERVJfVE9fREVCVUdHSU5HX1dJTkRPVwotICAgIFN3YXBCdWZmZXJzKG1fY2FudmFzREMp
OwotI2Vsc2UKLSAgICAvLyBFYXJsaWVyIHZlcnNpb25zIG9mIHRoaXMgY29kZSB1c2VkIHRoZSBH
UFUgdG8gZmxpcCB0aGUKLSAgICAvLyBmcmFtZWJ1ZmZlciB2ZXJ0aWNhbGx5IGJlZm9yZSByZWFk
aW5nIGl0IGJhY2sgZm9yIGNvbXBvc2l0aW5nCi0gICAgLy8gdmlhIHNvZnR3YXJlLiBUaGlzIGNv
ZGUgd2FzIHF1aXRlIGNvbXBsaWNhdGVkLCB1c2VkIGEgbG90IG9mCi0gICAgLy8gR1BVIG1lbW9y
eSwgYW5kIGRpZG4ndCBwcm92aWRlIGFuIG9idmlvdXMgc3BlZWR1cC4gU2luY2UgdGhpcwotICAg
IC8vIHZlcnRpY2FsIGZsaXAgaXMgb25seSBhIHRlbXBvcmFyeSBzb2x1dGlvbiBhbnl3YXkgdW50
aWwgQ2hyb21lCi0gICAgLy8gaXMgZnVsbHkgR1BVIGNvbXBvc2l0ZWQsIGl0IHdhc24ndCB3b3J0
aCB0aGUgY29tcGxleGl0eS4KLQogICAgIEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXMgPSBjb250
ZXh0LT5jYW52YXMoKTsKICAgICBJbWFnZUJ1ZmZlciogaW1hZ2VCdWZmZXIgPSBjYW52YXMtPmJ1
ZmZlcigpOwogICAgIHVuc2lnbmVkIGNoYXIqIHBpeGVscyA9IDA7Ci0gICAgYm9vbCBtdXN0UmVz
dG9yZUZCTyA9IChtX2JvdW5kRkJPICE9IG1fZmJvKTsKLSAgICBpZiAobXVzdFJlc3RvcmVGQk8p
Ci0gICAgICAgIGdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9mYm8p
OwogI2lmIFBMQVRGT1JNKFNLSUEpCiAgICAgY29uc3QgU2tCaXRtYXAqIGNhbnZhc0JpdG1hcCA9
IGltYWdlQnVmZmVyLT5jb250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpLT5iaXRtYXAoKTsKICAg
ICBjb25zdCBTa0JpdG1hcCogcmVhZGJhY2tCaXRtYXAgPSAwOwogICAgIEFTU0VSVChjYW52YXNC
aXRtYXAtPmNvbmZpZygpID09IFNrQml0bWFwOjprQVJHQl84ODg4X0NvbmZpZyk7Ci0gICAgaWYg
KGNhbnZhc0JpdG1hcC0+d2lkdGgoKSA9PSBtX2NhY2hlZFdpZHRoICYmIGNhbnZhc0JpdG1hcC0+
aGVpZ2h0KCkgPT0gbV9jYWNoZWRIZWlnaHQpIHsKKyAgICBpZiAoY2FudmFzQml0bWFwLT53aWR0
aCgpID09IG1faW1wbC0+d2lkdGgoKSAmJiBjYW52YXNCaXRtYXAtPmhlaWdodCgpID09IG1faW1w
bC0+aGVpZ2h0KCkpIHsKICAgICAgICAgLy8gVGhpcyBpcyB0aGUgZmFzdGVzdCBhbmQgbW9zdCBj
b21tb24gY2FzZS4gV2UgcmVhZCBiYWNrCiAgICAgICAgIC8vIGRpcmVjdGx5IGludG8gdGhlIGNh
bnZhcydzIGJhY2tpbmcgc3RvcmUuCiAgICAgICAgIHJlYWRiYWNrQml0bWFwID0gY2FudmFzQml0
bWFwOwpAQCAtNzc3LDE1ICszOTQsMTUgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFs
OjpiZWdpblBhaQogICAgICAgICAvLyBXZSBuZWVkIHRvIGFsbG9jYXRlIGEgdGVtcG9yYXJ5IGJp
dG1hcCBmb3IgcmVhZGluZyBiYWNrIHRoZQogICAgICAgICAvLyBwaXhlbCBkYXRhLiBXZSB3aWxs
IHRoZW4gdXNlIFNraWEgdG8gcmVzY2FsZSB0aGlzIGJpdG1hcCB0bwogICAgICAgICAvLyB0aGUg
c2l6ZSBvZiB0aGUgY2FudmFzJ3MgYmFja2luZyBzdG9yZS4KLSAgICAgICAgaWYgKG1fcmVzaXpp
bmdCaXRtYXAgJiYgKG1fcmVzaXppbmdCaXRtYXAtPndpZHRoKCkgIT0gbV9jYWNoZWRXaWR0aCB8
fCBtX3Jlc2l6aW5nQml0bWFwLT5oZWlnaHQoKSAhPSBtX2NhY2hlZEhlaWdodCkpIHsKKyAgICAg
ICAgaWYgKG1fcmVzaXppbmdCaXRtYXAgJiYgKG1fcmVzaXppbmdCaXRtYXAtPndpZHRoKCkgIT0g
bV9pbXBsLT53aWR0aCgpIHx8IG1fcmVzaXppbmdCaXRtYXAtPmhlaWdodCgpICE9IG1faW1wbC0+
aGVpZ2h0KCkpKSB7CiAgICAgICAgICAgICBkZWxldGUgbV9yZXNpemluZ0JpdG1hcDsKICAgICAg
ICAgICAgIG1fcmVzaXppbmdCaXRtYXAgPSAwOwogICAgICAgICB9CiAgICAgICAgIGlmICghbV9y
ZXNpemluZ0JpdG1hcCkgewogICAgICAgICAgICAgbV9yZXNpemluZ0JpdG1hcCA9IG5ldyBTa0Jp
dG1hcCgpOwogICAgICAgICAgICAgbV9yZXNpemluZ0JpdG1hcC0+c2V0Q29uZmlnKFNrQml0bWFw
OjprQVJHQl84ODg4X0NvbmZpZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtX2NhY2hlZFdpZHRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1fY2FjaGVkSGVpZ2h0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtX2ltcGwtPndpZHRoKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbV9pbXBsLT5oZWlnaHQoKSk7CiAgICAgICAgICAgICBpZiAoIW1fcmVzaXppbmdCaXRt
YXAtPmFsbG9jUGl4ZWxzKCkpIHsKICAgICAgICAgICAgICAgICBkZWxldGUgbV9yZXNpemluZ0Jp
dG1hcDsKICAgICAgICAgICAgICAgICBtX3Jlc2l6aW5nQml0bWFwID0gMDsKQEAgLTc5OCwyMyAr
NDE1LDE1IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6YmVnaW5QYWkKICAgICAv
LyBSZWFkIGJhY2sgdGhlIGZyYW1lIGJ1ZmZlci4KICAgICBTa0F1dG9Mb2NrUGl4ZWxzIGJpdG1h
cExvY2soKnJlYWRiYWNrQml0bWFwKTsKICAgICBwaXhlbHMgPSBzdGF0aWNfY2FzdDx1bnNpZ25l
ZCBjaGFyKj4ocmVhZGJhY2tCaXRtYXAtPmdldFBpeGVscygpKTsKLSAgICBnbFJlYWRQaXhlbHMo
MCwgMCwgbV9jYWNoZWRXaWR0aCwgbV9jYWNoZWRIZWlnaHQsIEdMX0JHUkEsIEdMX1VOU0lHTkVE
X0JZVEUsIHBpeGVscyk7CiAjZWxpZiBQTEFURk9STShDRykKICAgICBpZiAobV9yZW5kZXJPdXRw
dXQpIHsKICAgICAgICAgcGl4ZWxzID0gbV9yZW5kZXJPdXRwdXQ7Ci0gICAgICAgIGdsUmVhZFBp
eGVscygwLCAwLCBtX2NhY2hlZFdpZHRoLCBtX2NhY2hlZEhlaWdodCwgR0xfQkdSQSwgR0xfVU5T
SUdORURfSU5UXzhfOF84XzhfUkVWLCBwaXhlbHMpOwogICAgIH0KICNlbHNlCiAjZXJyb3IgTXVz
dCBwb3J0IHRvIHlvdXIgcGxhdGZvcm0KICNlbmRpZgogCi0gICAgaWYgKG11c3RSZXN0b3JlRkJP
KQotICAgICAgICBnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fYm91
bmRGQk8pOwotCi0jaWZkZWYgRkxJUF9GUkFNRUJVRkZFUl9WRVJUSUNBTExZCi0gICAgaWYgKHBp
eGVscykKLSAgICAgICAgZmxpcFZlcnRpY2FsbHkocGl4ZWxzLCBtX2NhY2hlZFdpZHRoLCBtX2Nh
Y2hlZEhlaWdodCk7Ci0jZW5kaWYKKyAgICBtX2ltcGwtPnJlYWRCYWNrRnJhbWVidWZmZXIocGl4
ZWxzKTsKIAogI2lmIFBMQVRGT1JNKFNLSUEpCiAgICAgaWYgKG1fcmVzaXppbmdCaXRtYXApIHsK
QEAgLTgyNiwxMSArNDM1LDExIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6YmVn
aW5QYWkKICAgICB9CiAjZWxpZiBQTEFURk9STShDRykKICAgICBpZiAobV9yZW5kZXJPdXRwdXQp
IHsKLSAgICAgICAgaW50IHJvd0J5dGVzID0gbV9jYWNoZWRXaWR0aCAqIDQ7Ci0gICAgICAgIENH
RGF0YVByb3ZpZGVyUmVmIGRhdGFQcm92aWRlciA9IENHRGF0YVByb3ZpZGVyQ3JlYXRlV2l0aERh
dGEoMCwgbV9yZW5kZXJPdXRwdXQsIHJvd0J5dGVzICogbV9jYWNoZWRIZWlnaHQsIDApOworICAg
ICAgICBpbnQgcm93Qnl0ZXMgPSBtX2ltcGwtPndpZHRoKCkgKiA0OworICAgICAgICBDR0RhdGFQ
cm92aWRlclJlZiBkYXRhUHJvdmlkZXIgPSBDR0RhdGFQcm92aWRlckNyZWF0ZVdpdGhEYXRhKDAs
IG1fcmVuZGVyT3V0cHV0LCByb3dCeXRlcyAqIG1faW1wbC0+aGVpZ2h0KCksIDApOwogICAgICAg
ICBDR0NvbG9yU3BhY2VSZWYgY29sb3JTcGFjZSA9IENHQ29sb3JTcGFjZUNyZWF0ZURldmljZVJH
QigpOwotICAgICAgICBDR0ltYWdlUmVmIGNnSW1hZ2UgPSBDR0ltYWdlQ3JlYXRlKG1fY2FjaGVk
V2lkdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9jYWNo
ZWRIZWlnaHQsCisgICAgICAgIENHSW1hZ2VSZWYgY2dJbWFnZSA9IENHSW1hZ2VDcmVhdGUobV9p
bXBsLT53aWR0aCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1faW1wbC0+aGVpZ2h0KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMiwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dCeXRlcywKQEAg
LTg2MSwxMDE4ICs0NzAsNzYzIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6YmVn
aW5QYWkKICNlbHNlCiAjZXJyb3IgTXVzdCBwb3J0IHRvIHlvdXIgcGxhdGZvcm0KICNlbmRpZgot
Ci0jZW5kaWYgIC8vIFJFTkRFUl9UT19ERUJVR0dJTkdfV0lORE9XCi19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0M0RJbnRlcm5hbDo6YWN0aXZlVGV4dHVyZSh1bnNpZ25lZCBsb25nIHRleHR1cmUp
Ci17Ci0gICAgLy8gRklYTUU6IHF1ZXJ5IG51bWJlciBvZiB0ZXh0dXJlcyBhdmFpbGFibGUuCi0g
ICAgaWYgKHRleHR1cmUgPCBHTF9URVhUVVJFMCB8fCB0ZXh0dXJlID4gR0xfVEVYVFVSRTArMzIp
Ci0gICAgICAgIC8vIEZJWE1FOiByYWlzZSBleGNlcHRpb24uCi0gICAgICAgIHJldHVybjsKLQot
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsQWN0aXZlVGV4dHVyZSh0ZXh0dXJlKTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpiaW5kQnVmZmVyKHVuc2lnbmVk
IGxvbmcgdGFyZ2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFdlYkdMQnVmZmVyKiBidWZmZXIpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAg
R0x1aW50IGJ1ZklEID0gRVhUUkFDVChidWZmZXIpOwotICAgIGlmICh0YXJnZXQgPT0gR0xfQVJS
QVlfQlVGRkVSKQotICAgICAgICBtX2JvdW5kQXJyYXlCdWZmZXIgPSBidWZJRDsKLSAgICBnbEJp
bmRCdWZmZXIodGFyZ2V0LCBidWZJRCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRl
cm5hbDo6YmluZEZyYW1lYnVmZmVyKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViR0xGcmFtZWJ1ZmZlciogZnJh
bWVidWZmZXIpCit2b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmVuZFBhaW50KCkKIHsK
LSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBHTHVpbnQgaWQgPSBFWFRSQUNUKGZyYW1l
YnVmZmVyKTsKLSAgICBpZiAoIWlkKQotICAgICAgICBpZCA9IG1fZmJvOwotICAgIGdsQmluZEZy
YW1lYnVmZmVyRVhUKHRhcmdldCwgaWQpOwotICAgIG1fYm91bmRGQk8gPSBpZDsKIH0KIAotLy8g
SWYgd2UgZGlkbid0IGhhdmUgdG8gaGFjayBHTF9URVhUVVJFX1dSQVBfUiBmb3IgY3ViZSBtYXBz
LAotLy8gd2UgY291bGQganVzdCB1c2U6Ci0vLyBHTF9TQU1FX01FVEhPRF8yX1gyKEJpbmRUZXh0
dXJlLCBiaW5kVGV4dHVyZSwgdW5zaWduZWQgbG9uZywgV2ViR0xUZXh0dXJlKikKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6YmluZFRleHR1cmUodW5zaWduZWQgbG9uZyB0YXJnZXQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYkdMVGV4dHVy
ZSogdGV4dHVyZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6cmVzaGFwZShpbnQg
d2lkdGgsIGludCBoZWlnaHQpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgdW5z
aWduZWQgaW50IHRleHR1cmVPYmplY3QgPSBFWFRSQUNUKHRleHR1cmUpOworICAgIGlmICh3aWR0
aCA9PSBtX2ltcGwtPndpZHRoKCkgJiYgaGVpZ2h0ID09IG1faW1wbC0+aGVpZ2h0KCkpCisgICAg
ICAgIHJldHVybjsKIAotICAgIGdsQmluZFRleHR1cmUodGFyZ2V0LCB0ZXh0dXJlT2JqZWN0KTsK
KyAgICBtX2ltcGwtPnJlc2hhcGUod2lkdGgsIGhlaWdodCk7CiAKLSAgICAvLyBGSVhNRTogR0xf
VEVYVFVSRV9XUkFQX1IgaXNuJ3QgZXhwb3NlZCBpbiB0aGUgT3BlbkdMIEVTIDIuMAotICAgIC8v
IEFQSS4gT24gZGVza3RvcCBPcGVuR0wgaW1wbGVtZW50YXRpb25zIGl0IHNlZW1zIG5lY2Vzc2Fy
eSB0bwotICAgIC8vIHNldCB0aGlzIHdyYXAgbW9kZSB0byBHTF9DTEFNUF9UT19FREdFIHRvIGdl
dCBjb3JyZWN0IGJlaGF2aW9yCi0gICAgLy8gb2YgY3ViZSBtYXBzLgotICAgIGlmICh0ZXh0dXJl
KSB7Ci0gICAgICAgIGlmICh0YXJnZXQgPT0gR0xfVEVYVFVSRV9DVUJFX01BUCkgewotICAgICAg
ICAgICAgaWYgKCF0ZXh0dXJlLT5pc0N1YmVNYXBSV3JhcE1vZGVJbml0aWFsaXplZCgpKSB7Ci0g
ICAgICAgICAgICAgICAgZ2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfQ1VCRV9NQVAsIEdMX1RF
WFRVUkVfV1JBUF9SLCBHTF9DTEFNUF9UT19FREdFKTsKLSAgICAgICAgICAgICAgICB0ZXh0dXJl
LT5zZXRDdWJlTWFwUldyYXBNb2RlSW5pdGlhbGl6ZWQodHJ1ZSk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0gZWxzZQotICAgICAgICAgICAgdGV4dHVyZS0+c2V0Q3ViZU1hcFJXcmFwTW9kZUlu
aXRpYWxpemVkKGZhbHNlKTsKKyNpZiBQTEFURk9STShDRykKKyAgICAvLyBOZWVkIHRvIHJlYWxs
b2NhdGUgdGhlIGNsaWVudC1zaWRlIGJhY2tpbmcgc3RvcmUuCisgICAgLy8gRklYTUU6IG1ha2Ug
dGhpcyBtb3JlIGVmZmljaWVudC4KKyAgICBpZiAobV9yZW5kZXJPdXRwdXQpIHsKKyAgICAgICAg
ZGVsZXRlW10gbV9yZW5kZXJPdXRwdXQ7CisgICAgICAgIG1fcmVuZGVyT3V0cHV0ID0gMDsKICAg
ICB9CisgICAgaW50IHJvd0J5dGVzID0gd2lkdGggKiA0OworICAgIG1fcmVuZGVyT3V0cHV0ID0g
bmV3IHVuc2lnbmVkIGNoYXJbaGVpZ2h0ICogcm93Qnl0ZXNdOworI2VuZGlmICAvLyBQTEFURk9S
TShDRykKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpidWZmZXJEYXRhSW1w
bCh1bnNpZ25lZCBsb25nIHRhcmdldCwgaW50IHNpemUsIGNvbnN0IHZvaWQqIGRhdGEsIHVuc2ln
bmVkIGxvbmcgdXNhZ2UpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgLy8gRklY
TUU6IG1ha2UgdGhpcyB2ZXJpZmljYXRpb24gbW9yZSBlZmZpY2llbnQuCi0gICAgR0xpbnQgYmlu
ZGluZyA9IDA7Ci0gICAgR0xlbnVtIGJpbmRpbmdfdGFyZ2V0ID0gR0xfQVJSQVlfQlVGRkVSX0JJ
TkRJTkc7Ci0gICAgaWYgKHRhcmdldCA9PSBHTF9FTEVNRU5UX0FSUkFZX0JVRkZFUikKLSAgICAg
ICAgYmluZGluZ190YXJnZXQgPSBHTF9FTEVNRU5UX0FSUkFZX0JVRkZFUl9CSU5ESU5HOwotICAg
IGdsR2V0SW50ZWdlcnYoYmluZGluZ190YXJnZXQsICZiaW5kaW5nKTsKLSAgICBpZiAoYmluZGlu
ZyA8PSAwKSB7Ci0gICAgICAgIC8vIEZJWE1FOiByYWlzZSBleGNlcHRpb24uCi0gICAgICAgIC8v
IExvZ01lc3NhZ2VmKCgiYnVmZmVyRGF0YTogbm8gYnVmZmVyIGJvdW5kIikpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQorLy8gTWFjcm9zIHRvIGFzc2lzdCBpbiBkZWxlZ2F0aW5nIGZyb20gR3Jh
cGhpY3NDb250ZXh0M0RJbnRlcm5hbCB0bworLy8gV2ViR3JhcGhpY3NDb250ZXh0M0QuCiAKLSAg
ICBnbEJ1ZmZlckRhdGEodGFyZ2V0LAotICAgICAgICAgICAgICAgICAgIHNpemUsCi0gICAgICAg
ICAgICAgICAgICAgZGF0YSwKLSAgICAgICAgICAgICAgICAgICB1c2FnZSk7CisjZGVmaW5lIERF
TEVHQVRFX1RPX0lNUEwobmFtZSkgXAordm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpu
YW1lKCkgXAoreyBcCisgICAgbV9pbXBsLT5uYW1lKCk7IFwKIH0KIAotdm9pZCBHcmFwaGljc0Nv
bnRleHQzREludGVybmFsOjpkaXNhYmxlVmVydGV4QXR0cmliQXJyYXkodW5zaWduZWQgbG9uZyBp
bmRleCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBpZiAoaW5kZXggPCBOdW1U
cmFja2VkUG9pbnRlclN0YXRlcykKLSAgICAgICAgbV92ZXJ0ZXhBdHRyaWJQb2ludGVyU3RhdGVb
aW5kZXhdLmVuYWJsZWQgPSBmYWxzZTsKLSAgICBnbERpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShp
bmRleCk7CisjZGVmaW5lIERFTEVHQVRFX1RPX0lNUExfUihuYW1lLCBydCkgICAgICAgICAgIFwK
K3J0IEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6Om5hbWUoKSBcCit7IFwKKyAgICByZXR1cm4g
bV9pbXBsLT5uYW1lKCk7IFwKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpl
bmFibGVWZXJ0ZXhBdHRyaWJBcnJheSh1bnNpZ25lZCBsb25nIGluZGV4KQotewotICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOwotICAgIGlmIChpbmRleCA8IE51bVRyYWNrZWRQb2ludGVyU3RhdGVz
KQotICAgICAgICBtX3ZlcnRleEF0dHJpYlBvaW50ZXJTdGF0ZVtpbmRleF0uZW5hYmxlZCA9IHRy
dWU7Ci0gICAgZ2xFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShpbmRleCk7CisjZGVmaW5lIERFTEVH
QVRFX1RPX0lNUExfMShuYW1lLCB0MSkgXAordm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFs
OjpuYW1lKHQxIGExKSBcCit7IFwKKyAgICBtX2ltcGwtPm5hbWUoYTEpOyBcCiB9CiAKLXVuc2ln
bmVkIGxvbmcgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6Z2V0RXJyb3IoKQotewotICAgIGlm
IChtX3N5bnRoZXRpY0Vycm9ycy5zaXplKCkgPiAwKSB7Ci0gICAgICAgIExpc3RIYXNoU2V0PHVu
c2lnbmVkIGxvbmc+OjppdGVyYXRvciBpdGVyID0gbV9zeW50aGV0aWNFcnJvcnMuYmVnaW4oKTsK
LSAgICAgICAgdW5zaWduZWQgbG9uZyBlcnIgPSAqaXRlcjsKLSAgICAgICAgbV9zeW50aGV0aWNF
cnJvcnMucmVtb3ZlKGl0ZXIpOwotICAgICAgICByZXR1cm4gZXJyOwotICAgIH0KLQotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOwotICAgIHJldHVybiBnbEdldEVycm9yKCk7CisjZGVmaW5lIERF
TEVHQVRFX1RPX0lNUExfMV9YKG5hbWUsIHQxKSBcCit2b2lkIEdyYXBoaWNzQ29udGV4dDNESW50
ZXJuYWw6Om5hbWUodDEgYTEpIFwKK3sgXAorICAgIG1faW1wbC0+bmFtZShFWFRSQUNUKGExKSk7
ICAgICAgICAgICAgICAgICAgXAogfQogCi1HcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBH
cmFwaGljc0NvbnRleHQzREludGVybmFsOjpnZXRDb250ZXh0QXR0cmlidXRlcygpCi17Ci0gICAg
cmV0dXJuIG1fYXR0cnM7CisjZGVmaW5lIERFTEVHQVRFX1RPX0lNUExfMVIobmFtZSwgdDEsIHJ0
KSAgICBcCitydCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpuYW1lKHQxIGExKSBcCit7IFwK
KyAgICByZXR1cm4gbV9pbXBsLT5uYW1lKGExKTsgXAogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dDNESW50ZXJuYWw6OnZlcnRleEF0dHJpYlBvaW50ZXIodW5zaWduZWQgbG9uZyBpbmR4LCBpbnQg
c2l6ZSwgaW50IHR5cGUsIGJvb2wgbm9ybWFsaXplZCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHN0cmlkZSwgdW5zaWdu
ZWQgbG9uZyBvZmZzZXQpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0KLSAgICBpZiAo
bV9ib3VuZEFycmF5QnVmZmVyIDw9IDApIHsKLSAgICAgICAgLy8gRklYTUU6IHJhaXNlIGV4Y2Vw
dGlvbi4KLSAgICAgICAgLy8gTG9nTWVzc2FnZWYoKCJidWZmZXJEYXRhOiBubyBidWZmZXIgYm91
bmQiKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoaW5keCA8IE51bVRyYWNr
ZWRQb2ludGVyU3RhdGVzKSB7Ci0gICAgICAgIFZlcnRleEF0dHJpYlBvaW50ZXJTdGF0ZSYgc3Rh
dGUgPSBtX3ZlcnRleEF0dHJpYlBvaW50ZXJTdGF0ZVtpbmR4XTsKLSAgICAgICAgc3RhdGUuYnVm
ZmVyID0gbV9ib3VuZEFycmF5QnVmZmVyOwotICAgICAgICBzdGF0ZS5pbmR4ID0gaW5keDsKLSAg
ICAgICAgc3RhdGUuc2l6ZSA9IHNpemU7Ci0gICAgICAgIHN0YXRlLnR5cGUgPSB0eXBlOwotICAg
ICAgICBzdGF0ZS5ub3JtYWxpemVkID0gbm9ybWFsaXplZDsKLSAgICAgICAgc3RhdGUuc3RyaWRl
ID0gc3RyaWRlOwotICAgICAgICBzdGF0ZS5vZmZzZXQgPSBvZmZzZXQ7Ci0gICAgfQotCi0gICAg
Z2xWZXJ0ZXhBdHRyaWJQb2ludGVyKGluZHgsIHNpemUsIHR5cGUsIG5vcm1hbGl6ZWQsIHN0cmlk
ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oc3Rh
dGljX2Nhc3Q8aW50cHRyX3Q+KG9mZnNldCkpKTsKKyNkZWZpbmUgREVMRUdBVEVfVE9fSU1QTF8x
Ul9YKG5hbWUsIHQxLCBydCkgICAgXAorcnQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6bmFt
ZSh0MSBhMSkgXAoreyBcCisgICAgcmV0dXJuIG1faW1wbC0+bmFtZShFWFRSQUNUKGExKSk7ICAg
ICAgICAgICBcCiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6dmlld3BvcnRJ
bXBsKGxvbmcgeCwgbG9uZyB5LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhl
aWdodCkKLXsKLSAgICBnbFZpZXdwb3J0KHgsIHksIHdpZHRoLCBoZWlnaHQpOworI2RlZmluZSBE
RUxFR0FURV9UT19JTVBMXzIobmFtZSwgdDEsIHQyKSBcCit2b2lkIEdyYXBoaWNzQ29udGV4dDNE
SW50ZXJuYWw6Om5hbWUodDEgYTEsIHQyIGEyKSBcCit7IFwKKyAgICBtX2ltcGwtPm5hbWUoYTEs
IGEyKTsgXAogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OnN5bnRoZXNpemVH
TEVycm9yKHVuc2lnbmVkIGxvbmcgZXJyb3IpCi17Ci0gICAgbV9zeW50aGV0aWNFcnJvcnMuYWRk
KGVycm9yKTsKKyNkZWZpbmUgREVMRUdBVEVfVE9fSU1QTF8yX1gxMihuYW1lLCB0MSwgdDIpIFwK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6bmFtZSh0MSBhMSwgdDIgYTIpIFwKK3sg
XAorICAgIG1faW1wbC0+bmFtZShFWFRSQUNUKGExKSwgRVhUUkFDVChhMikpOyAgICAgXAogfQog
Ci0vLyBHcmFwaGljc0NvbnRleHQzRCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vKiBIZWxwZXIgbWFjcm9zIGZvciB3aGVuIHdlJ3JlIGp1
c3Qgd3JhcHBpbmcgYSBnbCBtZXRob2QsIHNvIHRoYXQKLSAqIHdlIGNhbiBhdm9pZCBoYXZpbmcg
dG8gdHlwZSB0aGlzIDUwMCB0aW1lcy4gIE5vdGUgdGhhdCB0aGVzZSBNVVNUCi0gKiBOT1QgQkUg
VVNFRCBpZiB3ZSBuZWVkIHRvIGNoZWNrIGFueSBvZiB0aGUgcGFyYW1ldGVycy4KLSAqLwotCi0j
ZGVmaW5lIEdMX1NBTUVfTUVUSE9EXzAoZ2xuYW1lLCBuYW1lKSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6bmFtZSgpICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLXsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGdsIyNnbG5hbWUo
KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKKyNkZWZpbmUgREVMRUdBVEVfVE9fSU1QTF8yX1gyKG5hbWUsIHQxLCB0MikgXAor
dm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpuYW1lKHQxIGExLCB0MiBhMikgXAoreyBc
CisgICAgbV9pbXBsLT5uYW1lKGExLCBFWFRSQUNUKGEyKSk7ICAgICBcCiB9CiAKLSNkZWZpbmUg
R0xfU0FNRV9NRVRIT0RfMShnbG5hbWUsIG5hbWUsIHQxKSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpuYW1lKHQxIGExKSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAoteyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgZ2wjI2dsbmFtZShhMSk7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAorI2RlZmluZSBERUxFR0FURV9UT19JTVBMXzJSKG5hbWUsIHQxLCB0MiwgcnQpICBcCitydCBH
cmFwaGljc0NvbnRleHQzREludGVybmFsOjpuYW1lKHQxIGExLCB0MiBhMikgXAoreyBcCisgICAg
cmV0dXJuIG1faW1wbC0+bmFtZShhMSwgYTIpOyBcCiB9CiAKLSNkZWZpbmUgR0xfU0FNRV9NRVRI
T0RfMV9YKGdsbmFtZSwgbmFtZSwgdDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpuYW1lKHQxIGExKSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAoteyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCi0gICAgZ2wjI2dsbmFtZShFWFRSQUNUKGExKSk7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorI2RlZmluZSBE
RUxFR0FURV9UT19JTVBMXzMobmFtZSwgdDEsIHQyLCB0MykgICBcCit2b2lkIEdyYXBoaWNzQ29u
dGV4dDNESW50ZXJuYWw6Om5hbWUodDEgYTEsIHQyIGEyLCB0MyBhMykgICAgXAoreyBcCisgICAg
bV9pbXBsLT5uYW1lKGExLCBhMiwgYTMpOyAgICAgICAgICAgICAgICAgIFwKIH0KIAotI2RlZmlu
ZSBHTF9TQU1FX01FVEhPRF8yKGdsbmFtZSwgbmFtZSwgdDEsIHQyKSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6Om5hbWUodDEgYTEsIHQy
IGEyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi17ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBnbCMjZ2xuYW1lKGExLCBh
Mik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCisjZGVmaW5lIERFTEVHQVRFX1RPX0lNUExfM19YMShuYW1lLCB0MSwgdDIsIHQzKSAgIFwK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6bmFtZSh0MSBhMSwgdDIgYTIsIHQzIGEz
KSAgICBcCit7IFwKKyAgICBtX2ltcGwtPm5hbWUoRVhUUkFDVChhMSksIGEyLCBhMyk7ICAgICAg
ICAgIFwKIH0KIAotI2RlZmluZSBHTF9TQU1FX01FVEhPRF8yX1gxMihnbG5hbWUsIG5hbWUsIHQx
LCB0MikgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLXZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6Om5hbWUodDEgYTEsIHQyIGEyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi17ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAg
ICBnbCMjZ2xuYW1lKEVYVFJBQ1QoYTEpLCBFWFRSQUNUKGEyKSk7ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCisjZGVmaW5lIERFTEVHQVRFX1RPX0lNUExfM1IobmFtZSwg
dDEsIHQyLCB0MywgcnQpICAgXAorcnQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6bmFtZSh0
MSBhMSwgdDIgYTIsIHQzIGEzKSAgICBcCit7IFwKKyAgICByZXR1cm4gbV9pbXBsLT5uYW1lKGEx
LCBhMiwgYTMpOyAgICAgICAgICAgICAgICAgIFwKIH0KIAotI2RlZmluZSBHTF9TQU1FX01FVEhP
RF8yX1gyKGdsbmFtZSwgbmFtZSwgdDEsIHQyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6Om5hbWUodDEgYTEsIHQyIGEyKSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi17ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKLSAgICBnbCMjZ2xuYW1lKGExLCBFWFRSQUNUKGEyKSk7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisjZGVmaW5lIERF
TEVHQVRFX1RPX0lNUExfNChuYW1lLCB0MSwgdDIsIHQzLCB0NCkgICAgXAordm9pZCBHcmFwaGlj
c0NvbnRleHQzREludGVybmFsOjpuYW1lKHQxIGExLCB0MiBhMiwgdDMgYTMsIHQ0IGE0KSAgXAor
eyBcCisgICAgbV9pbXBsLT5uYW1lKGExLCBhMiwgYTMsIGE0KTsgICAgICAgICAgICAgIFwKIH0K
IAotI2RlZmluZSBHTF9TQU1FX01FVEhPRF8zKGdsbmFtZSwgbmFtZSwgdDEsIHQyLCB0MykgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6Om5hbWUo
dDEgYTEsIHQyIGEyLCB0MyBhMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi17ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBnbCMjZ2xu
YW1lKGExLCBhMiwgYTMpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCisjZGVmaW5lIERFTEVHQVRFX1RPX0lNUExfNF9YNChuYW1lLCB0MSwgdDIs
IHQzLCB0NCkgICAgXAordm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpuYW1lKHQxIGEx
LCB0MiBhMiwgdDMgYTMsIHQ0IGE0KSAgXAoreyBcCisgICAgbV9pbXBsLT5uYW1lKGExLCBhMiwg
YTMsIEVYVFJBQ1QoYTQpKTsgICAgICBcCiB9CiAKLSNkZWZpbmUgR0xfU0FNRV9NRVRIT0RfM19Y
MTIoZ2xuYW1lLCBuYW1lLCB0MSwgdDIsIHQzKSAgICAgICAgICAgICAgICAgICAgICAgICBcCi12
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpuYW1lKHQxIGExLCB0MiBhMiwgdDMgYTMpICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAoteyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCi0gICAgZ2wjI2dsbmFtZShFWFRSQUNUKGExKSwgRVhUUkFDVChhMiks
IGEzKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorI2RlZmluZSBERUxFR0FU
RV9UT19JTVBMXzUobmFtZSwgdDEsIHQyLCB0MywgdDQsIHQ1KSAgICAgIFwKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0M0RJbnRlcm5hbDo6bmFtZSh0MSBhMSwgdDIgYTIsIHQzIGEzLCB0NCBhNCwgdDUg
YTUpICAgICAgICBcCit7IFwKKyAgICBtX2ltcGwtPm5hbWUoYTEsIGEyLCBhMywgYTQsIGE1KTsg
ICBcCiB9CiAKLSNkZWZpbmUgR0xfU0FNRV9NRVRIT0RfM19YMihnbG5hbWUsIG5hbWUsIHQxLCB0
MiwgdDMpICAgICAgICAgICAgICAgICAgICAgICAgICBcCi12b2lkIEdyYXBoaWNzQ29udGV4dDNE
OjpuYW1lKHQxIGExLCB0MiBhMiwgdDMgYTMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAoteyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAg
Z2wjI2dsbmFtZShhMSwgRVhUUkFDVChhMiksIGEzKTsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorI2RlZmluZSBERUxFR0FURV9UT19JTVBMXzVfWDQobmFtZSwg
dDEsIHQyLCB0MywgdDQsIHQ1KSAgICAgICAgICAgICAgICBcCit2b2lkIEdyYXBoaWNzQ29udGV4
dDNESW50ZXJuYWw6Om5hbWUodDEgYTEsIHQyIGEyLCB0MyBhMywgdDQgYTQsIHQ1IGE1KSAgICAg
ICAgXAoreyBcCisgICAgbV9pbXBsLT5uYW1lKGExLCBhMiwgYTMsIEVYVFJBQ1QoYTQpLCBhNSk7
ICBcCiB9CiAKLSNkZWZpbmUgR0xfU0FNRV9NRVRIT0RfNChnbG5hbWUsIG5hbWUsIHQxLCB0Miwg
dDMsIHQ0KSAgICAgICAgICAgICAgICAgICAgICAgICBcCi12b2lkIEdyYXBoaWNzQ29udGV4dDNE
OjpuYW1lKHQxIGExLCB0MiBhMiwgdDMgYTMsIHQ0IGE0KSAgICAgICAgICAgICAgICAgICAgICAg
XAoteyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAg
Z2wjI2dsbmFtZShhMSwgYTIsIGEzLCBhNCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorI2RlZmluZSBERUxFR0FURV9UT19JTVBMXzVSKG5hbWUsIHQx
LCB0MiwgdDMsIHQ0LCB0NSwgcnQpICAgICAgXAorcnQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5h
bDo6bmFtZSh0MSBhMSwgdDIgYTIsIHQzIGEzLCB0NCBhNCwgdDUgYTUpICAgICAgICBcCit7IFwK
KyAgICByZXR1cm4gbV9pbXBsLT5uYW1lKGExLCBhMiwgYTMsIGE0LCBhNSk7ICAgXAogfQogCi0j
ZGVmaW5lIEdMX1NBTUVfTUVUSE9EXzRfWDQoZ2xuYW1lLCBuYW1lLCB0MSwgdDIsIHQzLCB0NCkg
ICAgICAgICAgICAgICAgICAgICAgXAotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6bmFtZSh0MSBh
MSwgdDIgYTIsIHQzIGEzLCB0NCBhNCkgICAgICAgICAgICAgICAgICAgICAgIFwKLXsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGdsIyNnbG5hbWUo
YTEsIGEyLCBhMywgRVhUUkFDVChhNCkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKKyNkZWZpbmUgREVMRUdBVEVfVE9fSU1QTF82KG5hbWUsIHQxLCB0MiwgdDMsIHQ0
LCB0NSwgdDYpICBcCit2b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6Om5hbWUodDEgYTEs
IHQyIGEyLCB0MyBhMywgdDQgYTQsIHQ1IGE1LCB0NiBhNikgXAoreyBcCisgICAgbV9pbXBsLT5u
YW1lKGExLCBhMiwgYTMsIGE0LCBhNSwgYTYpOyAgICAgICBcCiB9CiAKLSNkZWZpbmUgR0xfU0FN
RV9NRVRIT0RfNShnbG5hbWUsIG5hbWUsIHQxLCB0MiwgdDMsIHQ0LCB0NSkgICAgICAgICAgICAg
ICAgICAgICBcCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpuYW1lKHQxIGExLCB0MiBhMiwgdDMg
YTMsIHQ0IGE0LCB0NSBhNSkgICAgICAgICAgICAgICAgXAoteyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgZ2wjI2dsbmFtZShhMSwgYTIsIGEzLCBh
NCwgYTUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorI2Rl
ZmluZSBERUxFR0FURV9UT19JTVBMXzZSKG5hbWUsIHQxLCB0MiwgdDMsIHQ0LCB0NSwgdDYsIHJ0
KSAgXAorcnQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6bmFtZSh0MSBhMSwgdDIgYTIsIHQz
IGEzLCB0NCBhNCwgdDUgYTUsIHQ2IGE2KSBcCit7IFwKKyAgICByZXR1cm4gbV9pbXBsLT5uYW1l
KGExLCBhMiwgYTMsIGE0LCBhNSwgYTYpOyAgICAgICBcCiB9CiAKLSNkZWZpbmUgR0xfU0FNRV9N
RVRIT0RfNV9YNChnbG5hbWUsIG5hbWUsIHQxLCB0MiwgdDMsIHQ0LCB0NSkgICAgICAgICAgICAg
ICAgICBcCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpuYW1lKHQxIGExLCB0MiBhMiwgdDMgYTMs
IHQ0IGE0LCB0NSBhNSkgICAgICAgICAgICAgICAgXAoteyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
LSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgZ2wjI2dsbmFtZShhMSwgYTIsIGEzLCBFWFRS
QUNUKGE0KSwgYTUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorI2RlZmlu
ZSBERUxFR0FURV9UT19JTVBMXzdSKG5hbWUsIHQxLCB0MiwgdDMsIHQ0LCB0NSwgdDYsIHQ3LCBy
dCkgXAorcnQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6bmFtZSh0MSBhMSwgdDIgYTIsIHQz
IGEzLCB0NCBhNCwgdDUgYTUsIHQ2IGE2LCB0NyBhNykgXAoreyBcCisgICAgcmV0dXJuIG1faW1w
bC0+bmFtZShhMSwgYTIsIGEzLCBhNCwgYTUsIGE2LCBhNyk7ICAgXAogfQogCi0jZGVmaW5lIEdM
X1NBTUVfTUVUSE9EXzYoZ2xuYW1lLCBuYW1lLCB0MSwgdDIsIHQzLCB0NCwgdDUsIHQ2KSAgICAg
ICAgICAgICAgICAgXAotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6bmFtZSh0MSBhMSwgdDIgYTIs
IHQzIGEzLCB0NCBhNCwgdDUgYTUsIHQ2IGE2KSAgICAgICAgIFwKLXsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGdsIyNnbG5hbWUoYTEsIGEyLCBh
MywgYTQsIGE1LCBhNik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
KyNkZWZpbmUgREVMRUdBVEVfVE9fSU1QTF84KG5hbWUsIHQxLCB0MiwgdDMsIHQ0LCB0NSwgdDYs
IHQ3LCB0OCkgICAgICAgXAordm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpuYW1lKHQx
IGExLCB0MiBhMiwgdDMgYTMsIHQ0IGE0LCB0NSBhNSwgdDYgYTYsIHQ3IGE3LCB0OCBhOCkgXAor
eyBcCisgICAgbV9pbXBsLT5uYW1lKGExLCBhMiwgYTMsIGE0LCBhNSwgYTYsIGE3LCBhOCk7ICAg
ICAgXAogfQogCi0jZGVmaW5lIEdMX1NBTUVfTUVUSE9EXzgoZ2xuYW1lLCBuYW1lLCB0MSwgdDIs
IHQzLCB0NCwgdDUsIHQ2LCB0NywgdDgpICAgICAgICAgXAotdm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6bmFtZSh0MSBhMSwgdDIgYTIsIHQzIGEzLCB0NCBhNCwgdDUgYTUsIHQ2IGE2LCB0NyBhNywg
dDggYTgpICAgXAoteyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gICAgZ2wjI2dsbmFtZShhMSwgYTIsIGEzLCBhNCwgYTUsIGE2LCBhNywgYTgpOyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorI2RlZmluZSBERUxFR0FURV9UT19JTVBMXzlS
KG5hbWUsIHQxLCB0MiwgdDMsIHQ0LCB0NSwgdDYsIHQ3LCB0OCwgdDksIHJ0KSBcCitydCBHcmFw
aGljc0NvbnRleHQzREludGVybmFsOjpuYW1lKHQxIGExLCB0MiBhMiwgdDMgYTMsIHQ0IGE0LCB0
NSBhNSwgdDYgYTYsIHQ3IGE3LCB0OCBhOCwgdDkgYTkpIFwKK3sgXAorICAgIHJldHVybiBtX2lt
cGwtPm5hbWUoYTEsIGEyLCBhMywgYTQsIGE1LCBhNiwgYTcsIGE4LCBhOSk7ICAgXAogfQogCi1Q
YXNzT3duUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlKEdy
YXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJzKQotewotICAgIFBhc3NPd25QdHI8R3Jh
cGhpY3NDb250ZXh0M0Q+IGNvbnRleHQgPSBuZXcgR3JhcGhpY3NDb250ZXh0M0QoYXR0cnMpOwot
ICAgIC8vIEZJWE1FOiBhZGQgZXJyb3IgY2hlY2tpbmcKLSAgICByZXR1cm4gY29udGV4dDsKLX0K
K0RFTEVHQVRFX1RPX0lNUExfUihtYWtlQ29udGV4dEN1cnJlbnQsIGJvb2wpCitERUxFR0FURV9U
T19JTVBMXzFSKHNpemVJbkJ5dGVzLCBpbnQsIGludCkKIAotR3JhcGhpY3NDb250ZXh0M0Q6Okdy
YXBoaWNzQ29udGV4dDNEKEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJzKQotICAg
IDogbV9jdXJyZW50V2lkdGgoMCkKLSAgICAsIG1fY3VycmVudEhlaWdodCgwKQotICAgICwgbV9p
bnRlcm5hbChuZXcgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbChhdHRycykpCi17Ci19CitERUxF
R0FURV9UT19JTVBMXzEoYWN0aXZlVGV4dHVyZSwgdW5zaWduZWQgbG9uZykKK0RFTEVHQVRFX1RP
X0lNUExfMl9YMTIoYXR0YWNoU2hhZGVyLCBXZWJHTFByb2dyYW0qLCBXZWJHTFNoYWRlciopCiAK
LUdyYXBoaWNzQ29udGV4dDNEOjp+R3JhcGhpY3NDb250ZXh0M0QoKQordm9pZCBHcmFwaGljc0Nv
bnRleHQzREludGVybmFsOjpiaW5kQXR0cmliTG9jYXRpb24oV2ViR0xQcm9ncmFtKiBwcm9ncmFt
LCB1bnNpZ25lZCBsb25nIGluZGV4LCBjb25zdCBTdHJpbmcmIG5hbWUpCiB7CisgICAgbV9pbXBs
LT5iaW5kQXR0cmliTG9jYXRpb24oRVhUUkFDVChwcm9ncmFtKSwgaW5kZXgsIG5hbWUudXRmOCgp
LmRhdGEoKSk7CiB9CiAKLVBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QgR3JhcGhpY3NDb250ZXh0
M0Q6OnBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QoKSBjb25zdAotewotICAgIHJldHVybiBtX2lu
dGVybmFsLT5wbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEKCk7Ci19CitERUxFR0FURV9UT19JTVBM
XzJfWDIoYmluZEJ1ZmZlciwgdW5zaWduZWQgbG9uZywgV2ViR0xCdWZmZXIqKQorREVMRUdBVEVf
VE9fSU1QTF8yX1gyKGJpbmRGcmFtZWJ1ZmZlciwgdW5zaWduZWQgbG9uZywgV2ViR0xGcmFtZWJ1
ZmZlciopCitERUxFR0FURV9UT19JTVBMXzJfWDIoYmluZFJlbmRlcmJ1ZmZlciwgdW5zaWduZWQg
bG9uZywgV2ViR0xSZW5kZXJidWZmZXIqKQogCi1QbGF0Zm9ybTNET2JqZWN0IEdyYXBoaWNzQ29u
dGV4dDNEOjpwbGF0Zm9ybVRleHR1cmUoKSBjb25zdAotewotICAgIHJldHVybiBtX2ludGVybmFs
LT5wbGF0Zm9ybVRleHR1cmUoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6bWFrZUNv
bnRleHRDdXJyZW50KCkKLXsKLSAgICBtX2ludGVybmFsLT5tYWtlQ29udGV4dEN1cnJlbnQoKTsK
LX0KK3N0YXRpYyBjb25zdCBpbnQgVEVYVFVSRV9XUkFQX1IgPSAweDgwNzI7CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OnJlc2hhcGUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQorLy8gSWYgd2Ug
ZGlkbid0IGhhdmUgdG8gaGFjayBHTF9URVhUVVJFX1dSQVBfUiBmb3IgY3ViZSBtYXBzLAorLy8g
d2UgY291bGQganVzdCB1c2U6CisvLyBERUxFR0FURV9UT19JTVBMXzJfWDIoYmluZFRleHR1cmUs
IHVuc2lnbmVkIGxvbmcsIFdlYkdMVGV4dHVyZSopCit2b2lkIEdyYXBoaWNzQ29udGV4dDNESW50
ZXJuYWw6OmJpbmRUZXh0dXJlKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJHTFRleHR1cmUqIHRleHR1cmUpCiB7Ci0g
ICAgaWYgKHdpZHRoID09IG1fY3VycmVudFdpZHRoICYmIGhlaWdodCA9PSBtX2N1cnJlbnRIZWln
aHQpCi0gICAgICAgIHJldHVybjsKKyAgICB1bnNpZ25lZCBpbnQgdGV4dHVyZU9iamVjdCA9IEVY
VFJBQ1QodGV4dHVyZSk7CiAKLSAgICBtX2N1cnJlbnRXaWR0aCA9IHdpZHRoOwotICAgIG1fY3Vy
cmVudEhlaWdodCA9IGhlaWdodDsKKyAgICBtX2ltcGwtPmJpbmRUZXh0dXJlKHRhcmdldCwgdGV4
dHVyZU9iamVjdCk7CiAKLSAgICBtX2ludGVybmFsLT5yZXNoYXBlKHdpZHRoLCBoZWlnaHQpOwor
ICAgIC8vIEZJWE1FOiBHTF9URVhUVVJFX1dSQVBfUiBpc24ndCBleHBvc2VkIGluIHRoZSBPcGVu
R0wgRVMgMi4wCisgICAgLy8gQVBJLiBPbiBkZXNrdG9wIE9wZW5HTCBpbXBsZW1lbnRhdGlvbnMg
aXQgc2VlbXMgbmVjZXNzYXJ5IHRvCisgICAgLy8gc2V0IHRoaXMgd3JhcCBtb2RlIHRvIEdMX0NM
QU1QX1RPX0VER0UgdG8gZ2V0IGNvcnJlY3QgYmVoYXZpb3IKKyAgICAvLyBvZiBjdWJlIG1hcHMu
CisgICAgaWYgKHRleHR1cmUpCisgICAgICAgIGlmICh0YXJnZXQgPT0gR3JhcGhpY3NDb250ZXh0
M0Q6OlRFWFRVUkVfQ1VCRV9NQVApIHsKKyAgICAgICAgICAgIGlmICghdGV4dHVyZS0+aXNDdWJl
TWFwUldyYXBNb2RlSW5pdGlhbGl6ZWQoKSkgeworICAgICAgICAgICAgICAgIG1faW1wbC0+dGV4
UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUCwgVEVYVFVSRV9X
UkFQX1IsIEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdFKTsKKyAgICAgICAgICAgICAg
ICB0ZXh0dXJlLT5zZXRDdWJlTWFwUldyYXBNb2RlSW5pdGlhbGl6ZWQodHJ1ZSk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgdGV4dHVyZS0+c2V0Q3ViZU1hcFJX
cmFwTW9kZUluaXRpYWxpemVkKGZhbHNlKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
YmVnaW5QYWludChXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQpCi17Ci0gICAgbV9pbnRl
cm5hbC0+YmVnaW5QYWludChjb250ZXh0KTsKLX0KK0RFTEVHQVRFX1RPX0lNUExfNChibGVuZENv
bG9yLCBkb3VibGUsIGRvdWJsZSwgZG91YmxlLCBkb3VibGUpCitERUxFR0FURV9UT19JTVBMXzEo
YmxlbmRFcXVhdGlvbiwgdW5zaWduZWQgbG9uZykKK0RFTEVHQVRFX1RPX0lNUExfMihibGVuZEVx
dWF0aW9uU2VwYXJhdGUsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpCitERUxFR0FURV9U
T19JTVBMXzIoYmxlbmRGdW5jLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKQorREVMRUdB
VEVfVE9fSU1QTF80KGJsZW5kRnVuY1NlcGFyYXRlLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBs
b25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjplbmRQYWludCgpCit2b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmJ1ZmZlckRh
dGEodW5zaWduZWQgbG9uZyB0YXJnZXQsIGludCBzaXplLCB1bnNpZ25lZCBsb25nIHVzYWdlKQog
eworICAgIG1faW1wbC0+YnVmZmVyRGF0YSh0YXJnZXQsIHNpemUsIDAsIHVzYWdlKTsKIH0KIAot
aW50IEdyYXBoaWNzQ29udGV4dDNEOjpzaXplSW5CeXRlcyhpbnQgdHlwZSkKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0M0RJbnRlcm5hbDo6YnVmZmVyRGF0YSh1bnNpZ25lZCBsb25nIHRhcmdldCwgV2Vi
R0xBcnJheSogYXJyYXksIHVuc2lnbmVkIGxvbmcgdXNhZ2UpCiB7Ci0gICAgc3dpdGNoICh0eXBl
KSB7Ci0gICAgY2FzZSBHTF9CWVRFOgotICAgICAgICByZXR1cm4gc2l6ZW9mKEdMYnl0ZSk7Ci0g
ICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgotICAgICAgICByZXR1cm4gc2l6ZW9mKEdMdWJ5dGUp
OwotICAgIGNhc2UgR0xfU0hPUlQ6Ci0gICAgICAgIHJldHVybiBzaXplb2YoR0xzaG9ydCk7Ci0g
ICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVDoKLSAgICAgICAgcmV0dXJuIHNpemVvZihHTHVzaG9y
dCk7Ci0gICAgY2FzZSBHTF9JTlQ6Ci0gICAgICAgIHJldHVybiBzaXplb2YoR0xpbnQpOwotICAg
IGNhc2UgR0xfVU5TSUdORURfSU5UOgotICAgICAgICByZXR1cm4gc2l6ZW9mKEdMdWludCk7Ci0g
ICAgY2FzZSBHTF9GTE9BVDoKLSAgICAgICAgcmV0dXJuIHNpemVvZihHTGZsb2F0KTsKLSAgICBk
ZWZhdWx0OiAvLyBGSVhNRTogZGVmYXVsdCBjYXNlcyBhcmUgZGlzY291cmFnZWQgaW4gV2ViS2l0
LgotICAgICAgICByZXR1cm4gMDsKLSAgICB9CisgICAgbV9pbXBsLT5idWZmZXJEYXRhKHRhcmdl
dCwgYXJyYXktPmJ5dGVMZW5ndGgoKSwgYXJyYXktPmJhc2VBZGRyZXNzKCksIHVzYWdlKTsKIH0K
IAotdW5zaWduZWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZUJ1ZmZlcigpCit2b2lkIEdyYXBo
aWNzQ29udGV4dDNESW50ZXJuYWw6OmJ1ZmZlclN1YkRhdGEodW5zaWduZWQgbG9uZyB0YXJnZXQs
IGxvbmcgb2Zmc2V0LCBXZWJHTEFycmF5KiBhcnJheSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKLSAgICBHTHVpbnQgbzsKLSAgICBnbEdlbkJ1ZmZlcnMoMSwgJm8pOwotICAgIHJldHVy
biBvOworICAgIG1faW1wbC0+YnVmZmVyU3ViRGF0YSh0YXJnZXQsIG9mZnNldCwgYXJyYXktPmJ5
dGVMZW5ndGgoKSwgYXJyYXktPmJhc2VBZGRyZXNzKCkpOwogfQogCi11bnNpZ25lZCBHcmFwaGlj
c0NvbnRleHQzRDo6Y3JlYXRlRnJhbWVidWZmZXIoKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOwotICAgIEdMdWludCBvID0gMDsKLSAgICBnbEdlbkZyYW1lYnVmZmVyc0VYVCgxLCAmbyk7
Ci0gICAgcmV0dXJuIG87Ci19CitERUxFR0FURV9UT19JTVBMXzFSKGNoZWNrRnJhbWVidWZmZXJT
dGF0dXMsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpCitERUxFR0FURV9UT19JTVBMXzEo
Y2xlYXIsIHVuc2lnbmVkIGxvbmcpCitERUxFR0FURV9UT19JTVBMXzQoY2xlYXJDb2xvciwgZG91
YmxlLCBkb3VibGUsIGRvdWJsZSwgZG91YmxlKQorREVMRUdBVEVfVE9fSU1QTF8xKGNsZWFyRGVw
dGgsIGRvdWJsZSkKK0RFTEVHQVRFX1RPX0lNUExfMShjbGVhclN0ZW5jaWwsIGxvbmcpCitERUxF
R0FURV9UT19JTVBMXzQoY29sb3JNYXNrLCBib29sLCBib29sLCBib29sLCBib29sKQorREVMRUdB
VEVfVE9fSU1QTF8xX1goY29tcGlsZVNoYWRlciwgV2ViR0xTaGFkZXIqKQogCi11bnNpZ25lZCBH
cmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlUHJvZ3JhbSgpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7Ci0gICAgcmV0dXJuIGdsQ3JlYXRlUHJvZ3JhbSgpOwotfQorREVMRUdBVEVfVE9fSU1Q
TF84KGNvcHlUZXhJbWFnZTJELCB1bnNpZ25lZCBsb25nLCBsb25nLCB1bnNpZ25lZCBsb25nLCBs
b25nLCBsb25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCBsb25nKQorREVMRUdBVEVf
VE9fSU1QTF84KGNvcHlUZXhTdWJJbWFnZTJELCB1bnNpZ25lZCBsb25nLCBsb25nLCBsb25nLCBs
b25nLCBsb25nLCBsb25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKQorREVMRUdBVEVf
VE9fSU1QTF8xKGN1bGxGYWNlLCB1bnNpZ25lZCBsb25nKQorREVMRUdBVEVfVE9fSU1QTF8xKGRl
cHRoRnVuYywgdW5zaWduZWQgbG9uZykKK0RFTEVHQVRFX1RPX0lNUExfMShkZXB0aE1hc2ssIGJv
b2wpCitERUxFR0FURV9UT19JTVBMXzIoZGVwdGhSYW5nZSwgZG91YmxlLCBkb3VibGUpCitERUxF
R0FURV9UT19JTVBMXzJfWDEyKGRldGFjaFNoYWRlciwgV2ViR0xQcm9ncmFtKiwgV2ViR0xTaGFk
ZXIqKQorREVMRUdBVEVfVE9fSU1QTF8xKGRpc2FibGUsIHVuc2lnbmVkIGxvbmcpCitERUxFR0FU
RV9UT19JTVBMXzEoZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5LCB1bnNpZ25lZCBsb25nKQorREVM
RUdBVEVfVE9fSU1QTF8zKGRyYXdBcnJheXMsIHVuc2lnbmVkIGxvbmcsIGxvbmcsIGxvbmcpCitE
RUxFR0FURV9UT19JTVBMXzQoZHJhd0VsZW1lbnRzLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBs
b25nLCB1bnNpZ25lZCBsb25nLCBsb25nKQogCi11bnNpZ25lZCBHcmFwaGljc0NvbnRleHQzRDo6
Y3JlYXRlUmVuZGVyYnVmZmVyKCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBH
THVpbnQgbzsKLSAgICBnbEdlblJlbmRlcmJ1ZmZlcnNFWFQoMSwgJm8pOwotICAgIHJldHVybiBv
OwotfQorREVMRUdBVEVfVE9fSU1QTF8xKGVuYWJsZSwgdW5zaWduZWQgbG9uZykKK0RFTEVHQVRF
X1RPX0lNUExfMShlbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSwgdW5zaWduZWQgbG9uZykKK0RFTEVH
QVRFX1RPX0lNUEwoZmluaXNoKQorREVMRUdBVEVfVE9fSU1QTChmbHVzaCkKK0RFTEVHQVRFX1RP
X0lNUExfNF9YNChmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlciwgdW5zaWduZWQgbG9uZywgdW5zaWdu
ZWQgbG9uZywgdW5zaWduZWQgbG9uZywgV2ViR0xSZW5kZXJidWZmZXIqKQorREVMRUdBVEVfVE9f
SU1QTF81X1g0KGZyYW1lYnVmZmVyVGV4dHVyZTJELCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBs
b25nLCB1bnNpZ25lZCBsb25nLCBXZWJHTFRleHR1cmUqLCBsb25nKQorREVMRUdBVEVfVE9fSU1Q
TF8xKGZyb250RmFjZSwgdW5zaWduZWQgbG9uZykKK0RFTEVHQVRFX1RPX0lNUExfMShnZW5lcmF0
ZU1pcG1hcCwgdW5zaWduZWQgbG9uZykKIAotdW5zaWduZWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNy
ZWF0ZVNoYWRlcih1bnNpZ25lZCBsb25nIHR5cGUpCitib29sIEdyYXBoaWNzQ29udGV4dDNESW50
ZXJuYWw6OmdldEFjdGl2ZUF0dHJpYihXZWJHTFByb2dyYW0qIHByb2dyYW0sIHVuc2lnbmVkIGxv
bmcgaW5kZXgsIEFjdGl2ZUluZm8mIGluZm8pCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
Ci0gICAgcmV0dXJuIGdsQ3JlYXRlU2hhZGVyKCh0eXBlID09IEZSQUdNRU5UX1NIQURFUikgPyBH
TF9GUkFHTUVOVF9TSEFERVIgOiBHTF9WRVJURVhfU0hBREVSKTsKKyAgICBXZWJLaXQ6OldlYkdy
YXBoaWNzQ29udGV4dDNEOjpBY3RpdmVJbmZvIHdlYkluZm87CisgICAgaWYgKCFtX2ltcGwtPmdl
dEFjdGl2ZUF0dHJpYihFWFRSQUNUKHByb2dyYW0pLCBpbmRleCwgd2ViSW5mbykpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBpbmZvLm5hbWUgPSB3ZWJJbmZvLm5hbWU7CisgICAgaW5mby50
eXBlID0gd2ViSW5mby50eXBlOworICAgIGluZm8uc2l6ZSA9IHdlYkluZm8uc2l6ZTsKKyAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAotdW5zaWduZWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZVRleHR1
cmUoKQorYm9vbCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpnZXRBY3RpdmVVbmlmb3JtKFdl
YkdMUHJvZ3JhbSogcHJvZ3JhbSwgdW5zaWduZWQgbG9uZyBpbmRleCwgQWN0aXZlSW5mbyYgaW5m
bykKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBHTHVpbnQgbzsKLSAgICBnbEdl
blRleHR1cmVzKDEsICZvKTsKLSAgICByZXR1cm4gbzsKKyAgICBXZWJLaXQ6OldlYkdyYXBoaWNz
Q29udGV4dDNEOjpBY3RpdmVJbmZvIHdlYkluZm87CisgICAgaWYgKCFtX2ltcGwtPmdldEFjdGl2
ZVVuaWZvcm0oRVhUUkFDVChwcm9ncmFtKSwgaW5kZXgsIHdlYkluZm8pKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgaW5mby5uYW1lID0gd2ViSW5mby5uYW1lOworICAgIGluZm8udHlwZSA9
IHdlYkluZm8udHlwZTsKKyAgICBpbmZvLnNpemUgPSB3ZWJJbmZvLnNpemU7CisgICAgcmV0dXJu
IHRydWU7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZUJ1ZmZlcih1bnNpZ25l
ZCBidWZmZXIpCitpbnQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6Z2V0QXR0cmliTG9jYXRp
b24oV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBjb25zdCBTdHJpbmcmIG5hbWUpCiB7Ci0gICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2xEZWxldGVCdWZmZXJzKDEsICZidWZmZXIpOworICAg
IHJldHVybiBtX2ltcGwtPmdldEF0dHJpYkxvY2F0aW9uKEVYVFJBQ1QocHJvZ3JhbSksIG5hbWUu
dXRmOCgpLmRhdGEoKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZUZyYW1l
YnVmZmVyKHVuc2lnbmVkIGZyYW1lYnVmZmVyKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OwotICAgIGdsRGVsZXRlRnJhbWVidWZmZXJzRVhUKDEsICZmcmFtZWJ1ZmZlcik7Ci19CitERUxF
R0FURV9UT19JTVBMXzIoZ2V0Qm9vbGVhbnYsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGNoYXIq
KQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVQcm9ncmFtKHVuc2lnbmVkIHByb2dy
YW0pCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2xEZWxldGVQcm9ncmFtKHBy
b2dyYW0pOwotfQorREVMRUdBVEVfVE9fSU1QTF8zKGdldEJ1ZmZlclBhcmFtZXRlcml2LCB1bnNp
Z25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCBpbnQqKQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNE
OjpkZWxldGVSZW5kZXJidWZmZXIodW5zaWduZWQgcmVuZGVyYnVmZmVyKQorR3JhcGhpY3NDb250
ZXh0M0Q6OkF0dHJpYnV0ZXMgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6Z2V0Q29udGV4dEF0
dHJpYnV0ZXMoKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsRGVsZXRlUmVu
ZGVyYnVmZmVyc0VYVCgxLCAmcmVuZGVyYnVmZmVyKTsKKyAgICBXZWJLaXQ6OldlYkdyYXBoaWNz
Q29udGV4dDNEOjpBdHRyaWJ1dGVzIHdlYkF0dHJpYnV0ZXMgPSBtX2ltcGwtPmdldENvbnRleHRB
dHRyaWJ1dGVzKCk7CisgICAgR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cmlidXRl
czsKKyAgICBhdHRyaWJ1dGVzLmFscGhhID0gd2ViQXR0cmlidXRlcy5hbHBoYTsKKyAgICBhdHRy
aWJ1dGVzLmRlcHRoID0gd2ViQXR0cmlidXRlcy5kZXB0aDsKKyAgICBhdHRyaWJ1dGVzLnN0ZW5j
aWwgPSB3ZWJBdHRyaWJ1dGVzLnN0ZW5jaWw7CisgICAgYXR0cmlidXRlcy5hbnRpYWxpYXMgPSB3
ZWJBdHRyaWJ1dGVzLmFudGlhbGlhczsKKyAgICBhdHRyaWJ1dGVzLnByZW11bHRpcGxpZWRBbHBo
YSA9IHdlYkF0dHJpYnV0ZXMucHJlbXVsdGlwbGllZEFscGhhOworICAgIHJldHVybiBhdHRyaWJ1
dGVzOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVTaGFkZXIodW5zaWduZWQg
c2hhZGVyKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsRGVsZXRlU2hhZGVy
KHNoYWRlcik7Ci19CitERUxFR0FURV9UT19JTVBMX1IoZ2V0RXJyb3IsIHVuc2lnbmVkIGxvbmcp
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZVRleHR1cmUodW5zaWduZWQgdGV4dHVy
ZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbERlbGV0ZVRleHR1cmVzKDEs
ICZ0ZXh0dXJlKTsKLX0KK0RFTEVHQVRFX1RPX0lNUExfMihnZXRGbG9hdHYsIHVuc2lnbmVkIGxv
bmcsIGZsb2F0KikKIAotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YWN0aXZlVGV4dHVyZSh1bnNp
Z25lZCBsb25nIHRleHR1cmUpCi17Ci0gICAgbV9pbnRlcm5hbC0+YWN0aXZlVGV4dHVyZSh0ZXh0
dXJlKTsKLX0KK0RFTEVHQVRFX1RPX0lNUExfNChnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJh
bWV0ZXJpdiwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgaW50
KikKIAotR0xfU0FNRV9NRVRIT0RfMl9YMTIoQXR0YWNoU2hhZGVyLCBhdHRhY2hTaGFkZXIsIFdl
YkdMUHJvZ3JhbSosIFdlYkdMU2hhZGVyKikKK0RFTEVHQVRFX1RPX0lNUExfMihnZXRJbnRlZ2Vy
diwgdW5zaWduZWQgbG9uZywgaW50KikKIAotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmluZEF0
dHJpYkxvY2F0aW9uKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGluZGV4LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgbmFtZSkKLXsKLSAg
ICBpZiAoIXByb2dyYW0pCi0gICAgICAgIHJldHVybjsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKLSAgICBnbEJpbmRBdHRyaWJMb2NhdGlvbihFWFRSQUNUKHByb2dyYW0pLCBpbmRleCwgbmFt
ZS51dGY4KCkuZGF0YSgpKTsKLX0KK0RFTEVHQVRFX1RPX0lNUExfM19YMShnZXRQcm9ncmFtaXYs
IFdlYkdMUHJvZ3JhbSosIHVuc2lnbmVkIGxvbmcsIGludCopCiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OmJpbmRCdWZmZXIodW5zaWduZWQgbG9uZyB0YXJnZXQsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFdlYkdMQnVmZmVyKiBidWZmZXIpCitTdHJpbmcgR3JhcGhpY3ND
b250ZXh0M0RJbnRlcm5hbDo6Z2V0UHJvZ3JhbUluZm9Mb2coV2ViR0xQcm9ncmFtKiBwcm9ncmFt
KQogewotICAgIG1faW50ZXJuYWwtPmJpbmRCdWZmZXIodGFyZ2V0LCBidWZmZXIpOworICAgIHJl
dHVybiBtX2ltcGwtPmdldFByb2dyYW1JbmZvTG9nKEVYVFJBQ1QocHJvZ3JhbSkpOwogfQogCi12
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpiaW5kRnJhbWVidWZmZXIodW5zaWduZWQgbG9uZyB0YXJn
ZXQsIFdlYkdMRnJhbWVidWZmZXIqIGZyYW1lYnVmZmVyKQotewotICAgIG1faW50ZXJuYWwtPmJp
bmRGcmFtZWJ1ZmZlcih0YXJnZXQsIGZyYW1lYnVmZmVyKTsKLX0KK0RFTEVHQVRFX1RPX0lNUExf
MyhnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdiwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9u
ZywgaW50KikKIAotR0xfU0FNRV9NRVRIT0RfMl9YMihCaW5kUmVuZGVyYnVmZmVyRVhULCBiaW5k
UmVuZGVyYnVmZmVyLCB1bnNpZ25lZCBsb25nLCBXZWJHTFJlbmRlcmJ1ZmZlciopCitERUxFR0FU
RV9UT19JTVBMXzNfWDEoZ2V0U2hhZGVyaXYsIFdlYkdMU2hhZGVyKiwgdW5zaWduZWQgbG9uZywg
aW50KikKIAotLy8gSWYgd2UgZGlkbid0IGhhdmUgdG8gaGFjayBHTF9URVhUVVJFX1dSQVBfUiBm
b3IgY3ViZSBtYXBzLAotLy8gd2UgY291bGQganVzdCB1c2U6Ci0vLyBHTF9TQU1FX01FVEhPRF8y
X1gyKEJpbmRUZXh0dXJlLCBiaW5kVGV4dHVyZSwgdW5zaWduZWQgbG9uZywgV2ViR0xUZXh0dXJl
KikKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRUZXh0dXJlKHVuc2lnbmVkIGxvbmcgdGFy
Z2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViR0xUZXh0dXJlKiB0
ZXh0dXJlKQorU3RyaW5nIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmdldFNoYWRlckluZm9M
b2coV2ViR0xTaGFkZXIqIHNoYWRlcikKIHsKLSAgICBtX2ludGVybmFsLT5iaW5kVGV4dHVyZSh0
YXJnZXQsIHRleHR1cmUpOworICAgIHJldHVybiBtX2ltcGwtPmdldFNoYWRlckluZm9Mb2coRVhU
UkFDVChzaGFkZXIpKTsKIH0KIAotR0xfU0FNRV9NRVRIT0RfNChCbGVuZENvbG9yLCBibGVuZENv
bG9yLCBkb3VibGUsIGRvdWJsZSwgZG91YmxlLCBkb3VibGUpCi0KLUdMX1NBTUVfTUVUSE9EXzEo
QmxlbmRFcXVhdGlvbiwgYmxlbmRFcXVhdGlvbiwgdW5zaWduZWQgbG9uZykKLQotR0xfU0FNRV9N
RVRIT0RfMihCbGVuZEVxdWF0aW9uU2VwYXJhdGUsIGJsZW5kRXF1YXRpb25TZXBhcmF0ZSwgdW5z
aWduZWQgbG9uZywgdW5zaWduZWQgbG9uZykKLQotR0xfU0FNRV9NRVRIT0RfMihCbGVuZEZ1bmMs
IGJsZW5kRnVuYywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZykKLQotR0xfU0FNRV9NRVRI
T0RfNChCbGVuZEZ1bmNTZXBhcmF0ZSwgYmxlbmRGdW5jU2VwYXJhdGUsIHVuc2lnbmVkIGxvbmcs
IHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpCi0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OmJ1ZmZlckRhdGEodW5zaWduZWQgbG9uZyB0YXJnZXQsIGludCBzaXpl
LCB1bnNpZ25lZCBsb25nIHVzYWdlKQorU3RyaW5nIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6
OmdldFNoYWRlclNvdXJjZShXZWJHTFNoYWRlciogc2hhZGVyKQogewotICAgIG1faW50ZXJuYWwt
PmJ1ZmZlckRhdGFJbXBsKHRhcmdldCwgc2l6ZSwgMCwgdXNhZ2UpOworICAgIHJldHVybiBtX2lt
cGwtPmdldFNoYWRlclNvdXJjZShFWFRSQUNUKHNoYWRlcikpOwogfQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpidWZmZXJEYXRhKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBXZWJHTEFycmF5KiBh
cnJheSwgdW5zaWduZWQgbG9uZyB1c2FnZSkKK1N0cmluZyBHcmFwaGljc0NvbnRleHQzREludGVy
bmFsOjpnZXRTdHJpbmcodW5zaWduZWQgbG9uZyBuYW1lKQogewotICAgIG1faW50ZXJuYWwtPmJ1
ZmZlckRhdGFJbXBsKHRhcmdldCwgYXJyYXktPmJ5dGVMZW5ndGgoKSwgYXJyYXktPmJhc2VBZGRy
ZXNzKCksIHVzYWdlKTsKKyAgICByZXR1cm4gbV9pbXBsLT5nZXRTdHJpbmcobmFtZSk7CiB9CiAK
LXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJ1ZmZlclN1YkRhdGEodW5zaWduZWQgbG9uZyB0YXJn
ZXQsIGxvbmcgb2Zmc2V0LCBXZWJHTEFycmF5KiBhcnJheSkKLXsKLSAgICBpZiAoIWFycmF5IHx8
ICFhcnJheS0+bGVuZ3RoKCkpCi0gICAgICAgIHJldHVybjsKK0RFTEVHQVRFX1RPX0lNUExfMyhn
ZXRUZXhQYXJhbWV0ZXJmdiwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgZmxvYXQqKQor
REVMRUdBVEVfVE9fSU1QTF8zKGdldFRleFBhcmFtZXRlcml2LCB1bnNpZ25lZCBsb25nLCB1bnNp
Z25lZCBsb25nLCBpbnQqKQogCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgLy8gRklY
TUU6IG1ha2UgdGhpcyB2ZXJpZmljYXRpb24gbW9yZSBlZmZpY2llbnQuCi0gICAgR0xpbnQgYmlu
ZGluZyA9IDA7Ci0gICAgR0xlbnVtIGJpbmRpbmdfdGFyZ2V0ID0gR0xfQVJSQVlfQlVGRkVSX0JJ
TkRJTkc7Ci0gICAgaWYgKHRhcmdldCA9PSBHTF9FTEVNRU5UX0FSUkFZX0JVRkZFUikKLSAgICAg
ICAgYmluZGluZ190YXJnZXQgPSBHTF9FTEVNRU5UX0FSUkFZX0JVRkZFUl9CSU5ESU5HOwotICAg
IGdsR2V0SW50ZWdlcnYoYmluZGluZ190YXJnZXQsICZiaW5kaW5nKTsKLSAgICBpZiAoYmluZGlu
ZyA8PSAwKSB7Ci0gICAgICAgIC8vIEZJWE1FOiByYWlzZSBleGNlcHRpb24uCi0gICAgICAgIC8v
IExvZ01lc3NhZ2VmKCgiYnVmZmVyU3ViRGF0YTogbm8gYnVmZmVyIGJvdW5kIikpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotICAgIGdsQnVmZmVyU3ViRGF0YSh0YXJnZXQsIG9mZnNldCwgYXJy
YXktPmJ5dGVMZW5ndGgoKSwgYXJyYXktPmJhc2VBZGRyZXNzKCkpOwotfQorREVMRUdBVEVfVE9f
SU1QTF8zX1gxKGdldFVuaWZvcm1mdiwgV2ViR0xQcm9ncmFtKiwgbG9uZywgZmxvYXQqKQorREVM
RUdBVEVfVE9fSU1QTF8zX1gxKGdldFVuaWZvcm1pdiwgV2ViR0xQcm9ncmFtKiwgbG9uZywgaW50
KikKIAotdW5zaWduZWQgbG9uZyBHcmFwaGljc0NvbnRleHQzRDo6Y2hlY2tGcmFtZWJ1ZmZlclN0
YXR1cyh1bnNpZ25lZCBsb25nIHRhcmdldCkKK2xvbmcgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5h
bDo6Z2V0VW5pZm9ybUxvY2F0aW9uKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgY29uc3QgU3RyaW5n
JiBuYW1lKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIHJldHVybiBnbENoZWNr
RnJhbWVidWZmZXJTdGF0dXNFWFQodGFyZ2V0KTsKKyAgICByZXR1cm4gbV9pbXBsLT5nZXRVbmlm
b3JtTG9jYXRpb24oRVhUUkFDVChwcm9ncmFtKSwgbmFtZS51dGY4KCkuZGF0YSgpKTsKIH0KIAot
R0xfU0FNRV9NRVRIT0RfMShDbGVhciwgY2xlYXIsIHVuc2lnbmVkIGxvbmcpCi0KLUdMX1NBTUVf
TUVUSE9EXzQoQ2xlYXJDb2xvciwgY2xlYXJDb2xvciwgZG91YmxlLCBkb3VibGUsIGRvdWJsZSwg
ZG91YmxlKQotCi1HTF9TQU1FX01FVEhPRF8xKENsZWFyRGVwdGgsIGNsZWFyRGVwdGgsIGRvdWJs
ZSkKLQotR0xfU0FNRV9NRVRIT0RfMShDbGVhclN0ZW5jaWwsIGNsZWFyU3RlbmNpbCwgbG9uZykK
K0RFTEVHQVRFX1RPX0lNUExfMyhnZXRWZXJ0ZXhBdHRyaWJmdiwgdW5zaWduZWQgbG9uZywgdW5z
aWduZWQgbG9uZywgZmxvYXQqKQorREVMRUdBVEVfVE9fSU1QTF8zKGdldFZlcnRleEF0dHJpYml2
LCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCBpbnQqKQogCi1HTF9TQU1FX01FVEhPRF80
KENvbG9yTWFzaywgY29sb3JNYXNrLCBib29sLCBib29sLCBib29sLCBib29sKQorREVMRUdBVEVf
VE9fSU1QTF8yUihnZXRWZXJ0ZXhBdHRyaWJPZmZzZXQsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVk
IGxvbmcsIGxvbmcpCiAKLUdMX1NBTUVfTUVUSE9EXzFfWChDb21waWxlU2hhZGVyLCBjb21waWxl
U2hhZGVyLCBXZWJHTFNoYWRlciopCitERUxFR0FURV9UT19JTVBMXzIoaGludCwgdW5zaWduZWQg
bG9uZywgdW5zaWduZWQgbG9uZykKK0RFTEVHQVRFX1RPX0lNUExfMVJfWChpc0J1ZmZlciwgV2Vi
R0xCdWZmZXIqLCBib29sKQorREVMRUdBVEVfVE9fSU1QTF8xUihpc0VuYWJsZWQsIHVuc2lnbmVk
IGxvbmcsIGJvb2wpCitERUxFR0FURV9UT19JTVBMXzFSX1goaXNGcmFtZWJ1ZmZlciwgV2ViR0xG
cmFtZWJ1ZmZlciosIGJvb2wpCitERUxFR0FURV9UT19JTVBMXzFSX1goaXNQcm9ncmFtLCBXZWJH
TFByb2dyYW0qLCBib29sKQorREVMRUdBVEVfVE9fSU1QTF8xUl9YKGlzUmVuZGVyYnVmZmVyLCBX
ZWJHTFJlbmRlcmJ1ZmZlciosIGJvb2wpCitERUxFR0FURV9UT19JTVBMXzFSX1goaXNTaGFkZXIs
IFdlYkdMU2hhZGVyKiwgYm9vbCkKK0RFTEVHQVRFX1RPX0lNUExfMVJfWChpc1RleHR1cmUsIFdl
YkdMVGV4dHVyZSosIGJvb2wpCitERUxFR0FURV9UT19JTVBMXzEobGluZVdpZHRoLCBkb3VibGUp
CitERUxFR0FURV9UT19JTVBMXzFfWChsaW5rUHJvZ3JhbSwgV2ViR0xQcm9ncmFtKikKK0RFTEVH
QVRFX1RPX0lNUExfMihwaXhlbFN0b3JlaSwgdW5zaWduZWQgbG9uZywgbG9uZykKK0RFTEVHQVRF
X1RPX0lNUExfMihwb2x5Z29uT2Zmc2V0LCBkb3VibGUsIGRvdWJsZSkKIAotR0xfU0FNRV9NRVRI
T0RfOChDb3B5VGV4SW1hZ2UyRCwgY29weVRleEltYWdlMkQsIHVuc2lnbmVkIGxvbmcsIGxvbmcs
IHVuc2lnbmVkIGxvbmcsIGxvbmcsIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcs
IGxvbmcpCi0KLUdMX1NBTUVfTUVUSE9EXzgoQ29weVRleFN1YkltYWdlMkQsIGNvcHlUZXhTdWJJ
bWFnZTJELCB1bnNpZ25lZCBsb25nLCBsb25nLCBsb25nLCBsb25nLCBsb25nLCBsb25nLCB1bnNp
Z25lZCBsb25nLCB1bnNpZ25lZCBsb25nKQotCi1HTF9TQU1FX01FVEhPRF8xKEN1bGxGYWNlLCBj
dWxsRmFjZSwgdW5zaWduZWQgbG9uZykKLQotR0xfU0FNRV9NRVRIT0RfMShEZXB0aEZ1bmMsIGRl
cHRoRnVuYywgdW5zaWduZWQgbG9uZykKLQotR0xfU0FNRV9NRVRIT0RfMShEZXB0aE1hc2ssIGRl
cHRoTWFzaywgYm9vbCkKLQotR0xfU0FNRV9NRVRIT0RfMihEZXB0aFJhbmdlLCBkZXB0aFJhbmdl
LCBkb3VibGUsIGRvdWJsZSkKLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGV0YWNoU2hhZGVy
KFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgV2ViR0xTaGFkZXIqIHNoYWRlcikKK1Bhc3NSZWZQdHI8
V2ViR0xBcnJheT4gR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6cmVhZFBpeGVscyhsb25nIHgs
IGxvbmcgeSwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQsIHVuc2ln
bmVkIGxvbmcgZm9ybWF0LCB1bnNpZ25lZCBsb25nIHR5cGUpCiB7Ci0gICAgaWYgKCFwcm9ncmFt
IHx8ICFzaGFkZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OwotICAgIGdsRGV0YWNoU2hhZGVyKEVYVFJBQ1QocHJvZ3JhbSksIEVYVFJBQ1Qoc2hhZGVyKSk7
CisgICAgLy8gRklYTUU6IHRha2UgaW50byBhY2NvdW50IHBhY2sgYWxpZ25tZW50LgorICAgIFJl
ZlB0cjxXZWJHTFVuc2lnbmVkQnl0ZUFycmF5PiBhcnJheSA9IFdlYkdMVW5zaWduZWRCeXRlQXJy
YXk6OmNyZWF0ZSh3aWR0aCAqIGhlaWdodCAqIDQpOworICAgIG1faW1wbC0+cmVhZFBpeGVscyh4
LCB5LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGFycmF5LT5iYXNlQWRkcmVzcygpKTsK
KyAgICByZXR1cm4gYXJyYXk7CiB9CiAKLUdMX1NBTUVfTUVUSE9EXzEoRGlzYWJsZSwgZGlzYWJs
ZSwgdW5zaWduZWQgbG9uZykKK0RFTEVHQVRFX1RPX0lNUEwocmVsZWFzZVNoYWRlckNvbXBpbGVy
KQorREVMRUdBVEVfVE9fSU1QTF80KHJlbmRlcmJ1ZmZlclN0b3JhZ2UsIHVuc2lnbmVkIGxvbmcs
IHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpCitERUxFR0FURV9U
T19JTVBMXzIoc2FtcGxlQ292ZXJhZ2UsIGRvdWJsZSwgYm9vbCkKK0RFTEVHQVRFX1RPX0lNUExf
NChzY2lzc29yLCBsb25nLCBsb25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKQogCi12
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkaXNhYmxlVmVydGV4QXR0cmliQXJyYXkodW5zaWduZWQg
bG9uZyBpbmRleCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6c2hhZGVyU291cmNl
KFdlYkdMU2hhZGVyKiBzaGFkZXIsIGNvbnN0IFN0cmluZyYgc3RyaW5nKQogewotICAgIG1faW50
ZXJuYWwtPmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShpbmRleCk7CisgICAgbV9pbXBsLT5zaGFk
ZXJTb3VyY2UoRVhUUkFDVChzaGFkZXIpLCBzdHJpbmcudXRmOCgpLmRhdGEoKSk7CiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRyYXdBcnJheXModW5zaWduZWQgbG9uZyBtb2RlLCBsb25n
IGZpcnN0LCBsb25nIGNvdW50KQotewotICAgIHN3aXRjaCAobW9kZSkgewotICAgIGNhc2UgR0xf
VFJJQU5HTEVTOgotICAgIGNhc2UgR0xfVFJJQU5HTEVfU1RSSVA6Ci0gICAgY2FzZSBHTF9UUklB
TkdMRV9GQU46Ci0gICAgY2FzZSBHTF9QT0lOVFM6Ci0gICAgY2FzZSBHTF9MSU5FX1NUUklQOgot
ICAgIGNhc2UgR0xfTElORV9MT09QOgotICAgIGNhc2UgR0xfTElORVM6Ci0gICAgICAgIGJyZWFr
OwotICAgIGRlZmF1bHQ6IC8vIEZJWE1FOiBkZWZhdWx0IGNhc2VzIGFyZSBkaXNjb3VyYWdlZCBp
biBXZWJLaXQuCi0gICAgICAgIC8vIEZJWE1FOiBvdXRwdXQgbG9nIG1lc3NhZ2UsIHJhaXNlIGV4
Y2VwdGlvbi4KLSAgICAgICAgLy8gTG9nTWVzc2FnZShOU19MSVRFUkFMX0NTVFJJTkcoImRyYXdB
cnJheXM6IGludmFsaWQgbW9kZSIpKTsKLSAgICAgICAgLy8gcmV0dXJuIE5TX0VSUk9SX0RPTV9T
WU5UQVhfRVJSOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKGZpcnN0K2NvdW50
IDwgZmlyc3QgfHwgZmlyc3QrY291bnQgPCBjb3VudCkgewotICAgICAgICAvLyBGSVhNRTogb3V0
cHV0IGxvZyBtZXNzYWdlLCByYWlzZSBleGNlcHRpb24uCi0gICAgICAgIC8vIExvZ01lc3NhZ2Uo
TlNfTElURVJBTF9DU1RSSU5HKCJkcmF3QXJyYXlzOiBvdmVyZmxvdyBpbiBmaXJzdCtjb3VudCIp
KTsKLSAgICAgICAgLy8gcmV0dXJuIE5TX0VSUk9SX0lOVkFMSURfQVJHOwotICAgICAgICByZXR1
cm47Ci0gICAgfQorREVMRUdBVEVfVE9fSU1QTF8zKHN0ZW5jaWxGdW5jLCB1bnNpZ25lZCBsb25n
LCBsb25nLCB1bnNpZ25lZCBsb25nKQorREVMRUdBVEVfVE9fSU1QTF80KHN0ZW5jaWxGdW5jU2Vw
YXJhdGUsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIGxvbmcsIHVuc2lnbmVkIGxvbmcp
CitERUxFR0FURV9UT19JTVBMXzEoc3RlbmNpbE1hc2ssIHVuc2lnbmVkIGxvbmcpCitERUxFR0FU
RV9UT19JTVBMXzIoc3RlbmNpbE1hc2tTZXBhcmF0ZSwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQg
bG9uZykKK0RFTEVHQVRFX1RPX0lNUExfMyhzdGVuY2lsT3AsIHVuc2lnbmVkIGxvbmcsIHVuc2ln
bmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpCitERUxFR0FURV9UT19JTVBMXzQoc3RlbmNpbE9wU2Vw
YXJhdGUsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2ln
bmVkIGxvbmcpCiAKLSAgICAvLyBGSVhNRTogdmFsaWRhdGUgYWdhaW5zdCBjdXJyZW50bHkgYm91
bmQgYnVmZmVyLgotICAgIC8vIGlmICghVmFsaWRhdGVCdWZmZXJzKGZpcnN0K2NvdW50KSkKLSAg
ICAvLyAgICAgcmV0dXJuIE5TX0VSUk9SX0lOVkFMSURfQVJHOwotCi0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7Ci0gICAgZ2xEcmF3QXJyYXlzKG1vZGUsIGZpcnN0LCBjb3VudCk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRyYXdFbGVtZW50cyh1bnNpZ25lZCBsb25nIG1vZGUsIHVu
c2lnbmVkIGxvbmcgY291bnQsIHVuc2lnbmVkIGxvbmcgdHlwZSwgbG9uZyBvZmZzZXQpCi17Ci0g
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgLy8gRklYTUU6IG1ha2UgdGhpcyB2ZXJpZmlj
YXRpb24gbW9yZSBlZmZpY2llbnQuCi0gICAgR0xpbnQgYmluZGluZyA9IDA7Ci0gICAgR0xlbnVt
IGJpbmRpbmdfdGFyZ2V0ID0gR0xfRUxFTUVOVF9BUlJBWV9CVUZGRVJfQklORElORzsKLSAgICBn
bEdldEludGVnZXJ2KGJpbmRpbmdfdGFyZ2V0LCAmYmluZGluZyk7Ci0gICAgaWYgKGJpbmRpbmcg
PD0gMCkgewotICAgICAgICAvLyBGSVhNRTogcmFpc2UgZXhjZXB0aW9uLgotICAgICAgICAvLyBM
b2dNZXNzYWdlZigoImJ1ZmZlckRhdGE6IG5vIGJ1ZmZlciBib3VuZCIpKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLSAgICBnbERyYXdFbGVtZW50cyhtb2RlLCBjb3VudCwgdHlwZSwKLSAgICAg
ICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PHZvaWQqPihzdGF0aWNfY2FzdDxpbnRwdHJf
dD4ob2Zmc2V0KSkpOworaW50IEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OnRleEltYWdlMkQo
dW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBsZXZlbCwgdW5zaWduZWQgaW50ZXJuYWxmb3JtYXQs
IHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQsIHVuc2lnbmVkIGJvcmRlciwgdW5zaWdu
ZWQgZm9ybWF0LCB1bnNpZ25lZCB0eXBlLCB2b2lkKiBwaXhlbHMpCit7CisgICAgbV9pbXBsLT50
ZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBi
b3JkZXIsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsKKyAgICByZXR1cm4gMDsKIH0KIAotR0xfU0FN
RV9NRVRIT0RfMShFbmFibGUsIGVuYWJsZSwgdW5zaWduZWQgbG9uZykKK0RFTEVHQVRFX1RPX0lN
UExfMyh0ZXhQYXJhbWV0ZXJmLCB1bnNpZ25lZCwgdW5zaWduZWQsIGZsb2F0KQorREVMRUdBVEVf
VE9fSU1QTF8zKHRleFBhcmFtZXRlcmksIHVuc2lnbmVkLCB1bnNpZ25lZCwgaW50KQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjplbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSh1bnNpZ25lZCBsb25n
IGluZGV4KQoraW50IEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OnRleFN1YkltYWdlMkQodW5z
aWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBsZXZlbCwgdW5zaWduZWQgeG9mZnNldCwgdW5zaWduZWQg
eW9mZnNldCwgdW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCwgdW5zaWduZWQgZm9ybWF0
LCB1bnNpZ25lZCB0eXBlLCB2b2lkKiBwaXhlbHMpCiB7Ci0gICAgbV9pbnRlcm5hbC0+ZW5hYmxl
VmVydGV4QXR0cmliQXJyYXkoaW5kZXgpOworICAgIG1faW1wbC0+dGV4U3ViSW1hZ2UyRCh0YXJn
ZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUs
IHBpeGVscyk7CisgICAgcmV0dXJuIDA7CiB9CiAKLUdMX1NBTUVfTUVUSE9EXzAoRmluaXNoLCBm
aW5pc2gpCi0KLUdMX1NBTUVfTUVUSE9EXzAoRmx1c2gsIGZsdXNoKQotCi1HTF9TQU1FX01FVEhP
RF80X1g0KEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyRVhULCBmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZl
ciwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgV2ViR0xSZW5k
ZXJidWZmZXIqKQorREVMRUdBVEVfVE9fSU1QTF8yKHVuaWZvcm0xZiwgbG9uZywgZmxvYXQpCiAK
LUdMX1NBTUVfTUVUSE9EXzVfWDQoRnJhbWVidWZmZXJUZXh0dXJlMkRFWFQsIGZyYW1lYnVmZmVy
VGV4dHVyZTJELCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCBX
ZWJHTFRleHR1cmUqLCBsb25nKQotCi1HTF9TQU1FX01FVEhPRF8xKEZyb250RmFjZSwgZnJvbnRG
YWNlLCB1bnNpZ25lZCBsb25nKQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZW5lcmF0ZU1p
cG1hcCh1bnNpZ25lZCBsb25nIHRhcmdldCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5h
bDo6dW5pZm9ybTFmdihsb25nIGxvY2F0aW9uLCBmbG9hdCogdiwgaW50IHNpemUpCiB7Ci0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgaWYgKGdsR2VuZXJhdGVNaXBtYXBFWFQpCi0gICAg
ICAgIGdsR2VuZXJhdGVNaXBtYXBFWFQodGFyZ2V0KTsKLSAgICAvLyBGSVhNRTogcHJvdmlkZSBh
bHRlcm5hdGl2ZSBjb2RlIHBhdGg/IFRoaXMgd2lsbCBiZSB1bnBsZWFzYW50Ci0gICAgLy8gdG8g
aW1wbGVtZW50IGlmIGdsR2VuZXJhdGVNaXBtYXBFWFQgaXMgbm90IGF2YWlsYWJsZSAtLSBpdCB3
aWxsCi0gICAgLy8gcmVxdWlyZSBhIHRleHR1cmUgcmVhZGJhY2sgYW5kIHJlLXVwbG9hZC4KKyAg
ICBtX2ltcGwtPnVuaWZvcm0xZnYobG9jYXRpb24sIHNpemUsIHYpOwogfQogCi1ib29sIEdyYXBo
aWNzQ29udGV4dDNEOjpnZXRBY3RpdmVBdHRyaWIoV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCB1bnNp
Z25lZCBsb25nIGluZGV4LCBBY3RpdmVJbmZvJiBpbmZvKQotewotICAgIGlmICghcHJvZ3JhbSkg
ewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihJTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLSAgICBHTGludCBtYXhOYW1lTGVuZ3RoID0gLTE7Ci0gICAgZ2xH
ZXRQcm9ncmFtaXYoRVhUUkFDVChwcm9ncmFtKSwgR0xfQUNUSVZFX0FUVFJJQlVURV9NQVhfTEVO
R1RILCAmbWF4TmFtZUxlbmd0aCk7Ci0gICAgaWYgKG1heE5hbWVMZW5ndGggPCAwKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgR0xjaGFyKiBuYW1lID0gMDsKLSAgICBpZiAoIXRyeUZhc3RN
YWxsb2MobWF4TmFtZUxlbmd0aCAqIHNpemVvZihHTGNoYXIpKS5nZXRWYWx1ZShuYW1lKSkgewot
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihPVVRfT0ZfTUVNT1JZKTsKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KLSAgICBHTHNpemVpIGxlbmd0aCA9IDA7Ci0gICAgR0xpbnQgc2l6ZSA9
IC0xOwotICAgIEdMZW51bSB0eXBlID0gMDsKLSAgICBnbEdldEFjdGl2ZUF0dHJpYihFWFRSQUNU
KHByb2dyYW0pLCBpbmRleCwgbWF4TmFtZUxlbmd0aCwKLSAgICAgICAgICAgICAgICAgICAgICAm
bGVuZ3RoLCAmc2l6ZSwgJnR5cGUsIG5hbWUpOwotICAgIGlmIChzaXplIDwgMCkgewotICAgICAg
ICBmYXN0RnJlZShuYW1lKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBpbmZv
Lm5hbWUgPSBTdHJpbmcobmFtZSwgbGVuZ3RoKTsKLSAgICBpbmZvLnR5cGUgPSB0eXBlOwotICAg
IGluZm8uc2l6ZSA9IHNpemU7Ci0gICAgZmFzdEZyZWUobmFtZSk7Ci0gICAgcmV0dXJuIHRydWU7
Ci19CitERUxFR0FURV9UT19JTVBMXzIodW5pZm9ybTFpLCBsb25nLCBpbnQpCiAKLWJvb2wgR3Jh
cGhpY3NDb250ZXh0M0Q6OmdldEFjdGl2ZVVuaWZvcm0oV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCB1
bnNpZ25lZCBsb25nIGluZGV4LCBBY3RpdmVJbmZvJiBpbmZvKQordm9pZCBHcmFwaGljc0NvbnRl
eHQzREludGVybmFsOjp1bmlmb3JtMWl2KGxvbmcgbG9jYXRpb24sIGludCogdiwgaW50IHNpemUp
CiB7Ci0gICAgaWYgKCFwcm9ncmFtKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKElOVkFM
SURfVkFMVUUpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIEdMaW50IG1heE5h
bWVMZW5ndGggPSAtMTsKLSAgICBnbEdldFByb2dyYW1pdihFWFRSQUNUKHByb2dyYW0pLCBHTF9B
Q1RJVkVfVU5JRk9STV9NQVhfTEVOR1RILCAmbWF4TmFtZUxlbmd0aCk7Ci0gICAgaWYgKG1heE5h
bWVMZW5ndGggPCAwKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgR0xjaGFyKiBuYW1lID0g
MDsKLSAgICBpZiAoIXRyeUZhc3RNYWxsb2MobWF4TmFtZUxlbmd0aCAqIHNpemVvZihHTGNoYXIp
KS5nZXRWYWx1ZShuYW1lKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihPVVRfT0ZfTUVN
T1JZKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBHTHNpemVpIGxlbmd0aCA9
IDA7Ci0gICAgR0xpbnQgc2l6ZSA9IC0xOwotICAgIEdMZW51bSB0eXBlID0gMDsKLSAgICBnbEdl
dEFjdGl2ZVVuaWZvcm0oRVhUUkFDVChwcm9ncmFtKSwgaW5kZXgsIG1heE5hbWVMZW5ndGgsCi0g
ICAgICAgICAgICAgICAgICAgICAgICZsZW5ndGgsICZzaXplLCAmdHlwZSwgbmFtZSk7Ci0gICAg
aWYgKHNpemUgPCAwKSB7Ci0gICAgICAgIGZhc3RGcmVlKG5hbWUpOwotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotICAgIGluZm8ubmFtZSA9IFN0cmluZyhuYW1lLCBsZW5ndGgpOwotICAg
IGluZm8udHlwZSA9IHR5cGU7Ci0gICAgaW5mby5zaXplID0gc2l6ZTsKLSAgICBmYXN0RnJlZShu
YW1lKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBtX2ltcGwtPnVuaWZvcm0xaXYobG9jYXRpb24s
IHNpemUsIHYpOwogfQogCi1pbnQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEF0dHJpYkxvY2F0aW9u
KFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lKQotewotICAgIGlmICgh
cHJvZ3JhbSkKLSAgICAgICAgcmV0dXJuIC0xOwotCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
Ci0gICAgcmV0dXJuIGdsR2V0QXR0cmliTG9jYXRpb24oRVhUUkFDVChwcm9ncmFtKSwgbmFtZS51
dGY4KCkuZGF0YSgpKTsKLX0KK0RFTEVHQVRFX1RPX0lNUExfMyh1bmlmb3JtMmYsIGxvbmcsIGZs
b2F0LCBmbG9hdCkKIAotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0Qm9vbGVhbnYodW5zaWdu
ZWQgbG9uZyBwbmFtZSwgdW5zaWduZWQgY2hhciogdmFsdWUpCit2b2lkIEdyYXBoaWNzQ29udGV4
dDNESW50ZXJuYWw6OnVuaWZvcm0yZnYobG9uZyBsb2NhdGlvbiwgZmxvYXQqIHYsIGludCBzaXpl
KQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsR2V0Qm9vbGVhbnYocG5hbWUs
IHZhbHVlKTsKKyAgICBtX2ltcGwtPnVuaWZvcm0yZnYobG9jYXRpb24sIHNpemUsIHYpOwogfQog
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRCdWZmZXJQYXJhbWV0ZXJpdih1bnNpZ25lZCBs
b25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBwbmFtZSwgaW50KiB2YWx1ZSkKLXsKLSAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKLSAgICBnbEdldEJ1ZmZlclBhcmFtZXRlcml2KHRhcmdldCwgcG5h
bWUsIHZhbHVlKTsKLX0KK0RFTEVHQVRFX1RPX0lNUExfMyh1bmlmb3JtMmksIGxvbmcsIGludCwg
aW50KQogCi1HcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBHcmFwaGljc0NvbnRleHQzRDo6
Z2V0Q29udGV4dEF0dHJpYnV0ZXMoKQordm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjp1
bmlmb3JtMml2KGxvbmcgbG9jYXRpb24sIGludCogdiwgaW50IHNpemUpCiB7Ci0gICAgcmV0dXJu
IG1faW50ZXJuYWwtPmdldENvbnRleHRBdHRyaWJ1dGVzKCk7CisgICAgbV9pbXBsLT51bmlmb3Jt
Mml2KGxvY2F0aW9uLCBzaXplLCB2KTsKIH0KIAotdW5zaWduZWQgbG9uZyBHcmFwaGljc0NvbnRl
eHQzRDo6Z2V0RXJyb3IoKQotewotICAgIHJldHVybiBtX2ludGVybmFsLT5nZXRFcnJvcigpOwot
fQorREVMRUdBVEVfVE9fSU1QTF80KHVuaWZvcm0zZiwgbG9uZywgZmxvYXQsIGZsb2F0LCBmbG9h
dCkKIAotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0RmxvYXR2KHVuc2lnbmVkIGxvbmcgcG5h
bWUsIGZsb2F0KiB2YWx1ZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6dW5pZm9y
bTNmdihsb25nIGxvY2F0aW9uLCBmbG9hdCogdiwgaW50IHNpemUpCiB7Ci0gICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7Ci0gICAgZ2xHZXRGbG9hdHYocG5hbWUsIHZhbHVlKTsKKyAgICBtX2ltcGwt
PnVuaWZvcm0zZnYobG9jYXRpb24sIHNpemUsIHYpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpdih1bnNpZ25lZCBsb25nIHRh
cmdldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIGxvbmcgYXR0YWNobWVudCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgcG5h
bWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQqIHZhbHVlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGds
R2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXZFWFQodGFyZ2V0LCBhdHRhY2htZW50
LCBwbmFtZSwgdmFsdWUpOwotfQorREVMRUdBVEVfVE9fSU1QTF80KHVuaWZvcm0zaSwgbG9uZywg
aW50LCBpbnQsIGludCkKIAotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0SW50ZWdlcnYodW5z
aWduZWQgbG9uZyBwbmFtZSwgaW50KiB2YWx1ZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRl
cm5hbDo6dW5pZm9ybTNpdihsb25nIGxvY2F0aW9uLCBpbnQqIHYsIGludCBzaXplKQogewotICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsR2V0SW50ZWdlcnYocG5hbWUsIHZhbHVlKTsK
KyAgICBtX2ltcGwtPnVuaWZvcm0zaXYobG9jYXRpb24sIHNpemUsIHYpOwogfQogCi12b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjpnZXRQcm9ncmFtaXYoV2ViR0xQcm9ncmFtKiBwcm9ncmFtLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgcG5hbWUsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50KiB2YWx1ZSkKLXsKLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbEdldFByb2dyYW1pdihFWFRSQUNUKHByb2dyYW0p
LCBwbmFtZSwgdmFsdWUpOwotfQorREVMRUdBVEVfVE9fSU1QTF81KHVuaWZvcm00ZiwgbG9uZywg
ZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQpCiAKLVN0cmluZyBHcmFwaGljc0NvbnRleHQzRDo6
Z2V0UHJvZ3JhbUluZm9Mb2coV2ViR0xQcm9ncmFtKiBwcm9ncmFtKQordm9pZCBHcmFwaGljc0Nv
bnRleHQzREludGVybmFsOjp1bmlmb3JtNGZ2KGxvbmcgbG9jYXRpb24sIGZsb2F0KiB2LCBpbnQg
c2l6ZSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBHTHVpbnQgcHJvZ3JhbUlE
ID0gRVhUUkFDVChwcm9ncmFtKTsKLSAgICBHTGludCBsb2dMZW5ndGg7Ci0gICAgZ2xHZXRQcm9n
cmFtaXYocHJvZ3JhbUlELCBHTF9JTkZPX0xPR19MRU5HVEgsICZsb2dMZW5ndGgpOwotICAgIGlm
ICghbG9nTGVuZ3RoKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgR0xjaGFyKiBsb2cg
PSAwOwotICAgIGlmICghdHJ5RmFzdE1hbGxvYyhsb2dMZW5ndGggKiBzaXplb2YoR0xjaGFyKSku
Z2V0VmFsdWUobG9nKSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIEdMc2l6ZWkgcmV0
dXJuZWRMb2dMZW5ndGg7Ci0gICAgZ2xHZXRQcm9ncmFtSW5mb0xvZyhwcm9ncmFtSUQsIGxvZ0xl
bmd0aCwgJnJldHVybmVkTG9nTGVuZ3RoLCBsb2cpOwotICAgIEFTU0VSVChsb2dMZW5ndGggPT0g
cmV0dXJuZWRMb2dMZW5ndGggKyAxKTsKLSAgICBTdHJpbmcgcmVzID0gU3RyaW5nKGxvZywgcmV0
dXJuZWRMb2dMZW5ndGgpOwotICAgIGZhc3RGcmVlKGxvZyk7Ci0gICAgcmV0dXJuIHJlczsKKyAg
ICBtX2ltcGwtPnVuaWZvcm00ZnYobG9jYXRpb24sIHNpemUsIHYpOwogfQogCi12b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdih1bnNpZ25lZCBsb25nIHRh
cmdldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHVuc2lnbmVkIGxvbmcgcG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQqIHZhbHVlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OwotICAgIGdsR2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXZFWFQodGFyZ2V0LCBwbmFtZSwgdmFs
dWUpOwotfQorREVMRUdBVEVfVE9fSU1QTF81KHVuaWZvcm00aSwgbG9uZywgaW50LCBpbnQsIGlu
dCwgaW50KQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRTaGFkZXJpdihXZWJHTFNoYWRl
ciogc2hhZGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg
bG9uZyBwbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCogdmFs
dWUpCit2b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OnVuaWZvcm00aXYobG9uZyBsb2Nh
dGlvbiwgaW50KiB2LCBpbnQgc2l6ZSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAg
ICBnbEdldFNoYWRlcml2KEVYVFJBQ1Qoc2hhZGVyKSwgcG5hbWUsIHZhbHVlKTsKKyAgICBtX2lt
cGwtPnVuaWZvcm00aXYobG9jYXRpb24sIHNpemUsIHYpOwogfQogCi1TdHJpbmcgR3JhcGhpY3ND
b250ZXh0M0Q6OmdldFNoYWRlckluZm9Mb2coV2ViR0xTaGFkZXIqIHNoYWRlcikKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6dW5pZm9ybU1hdHJpeDJmdihsb25nIGxvY2F0aW9uLCBi
b29sIHRyYW5zcG9zZSwgZmxvYXQqIHZhbHVlLCBpbnQgc2l6ZSkKIHsKLSAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKLSAgICBHTHVpbnQgc2hhZGVySUQgPSBFWFRSQUNUKHNoYWRlcik7Ci0gICAg
R0xpbnQgbG9nTGVuZ3RoOwotICAgIGdsR2V0U2hhZGVyaXYoc2hhZGVySUQsIEdMX0lORk9fTE9H
X0xFTkdUSCwgJmxvZ0xlbmd0aCk7Ci0gICAgaWYgKCFsb2dMZW5ndGgpCi0gICAgICAgIHJldHVy
biBTdHJpbmcoKTsKLSAgICBHTGNoYXIqIGxvZyA9IDA7Ci0gICAgaWYgKCF0cnlGYXN0TWFsbG9j
KGxvZ0xlbmd0aCAqIHNpemVvZihHTGNoYXIpKS5nZXRWYWx1ZShsb2cpKQotICAgICAgICByZXR1
cm4gU3RyaW5nKCk7Ci0gICAgR0xzaXplaSByZXR1cm5lZExvZ0xlbmd0aDsKLSAgICBnbEdldFNo
YWRlckluZm9Mb2coc2hhZGVySUQsIGxvZ0xlbmd0aCwgJnJldHVybmVkTG9nTGVuZ3RoLCBsb2cp
OwotICAgIEFTU0VSVChsb2dMZW5ndGggPT0gcmV0dXJuZWRMb2dMZW5ndGggKyAxKTsKLSAgICBT
dHJpbmcgcmVzID0gU3RyaW5nKGxvZywgcmV0dXJuZWRMb2dMZW5ndGgpOwotICAgIGZhc3RGcmVl
KGxvZyk7Ci0gICAgcmV0dXJuIHJlczsKKyAgICBtX2ltcGwtPnVuaWZvcm1NYXRyaXgyZnYobG9j
YXRpb24sIHNpemUsIHRyYW5zcG9zZSwgdmFsdWUpOwogfQogCi1TdHJpbmcgR3JhcGhpY3NDb250
ZXh0M0Q6OmdldFNoYWRlclNvdXJjZShXZWJHTFNoYWRlciogc2hhZGVyKQordm9pZCBHcmFwaGlj
c0NvbnRleHQzREludGVybmFsOjp1bmlmb3JtTWF0cml4M2Z2KGxvbmcgbG9jYXRpb24sIGJvb2wg
dHJhbnNwb3NlLCBmbG9hdCogdmFsdWUsIGludCBzaXplKQogewotICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOwotICAgIEdMdWludCBzaGFkZXJJRCA9IEVYVFJBQ1Qoc2hhZGVyKTsKLSAgICBHTGlu
dCBsb2dMZW5ndGg7Ci0gICAgZ2xHZXRTaGFkZXJpdihzaGFkZXJJRCwgR0xfU0hBREVSX1NPVVJD
RV9MRU5HVEgsICZsb2dMZW5ndGgpOwotICAgIGlmICghbG9nTGVuZ3RoKQotICAgICAgICByZXR1
cm4gU3RyaW5nKCk7Ci0gICAgR0xjaGFyKiBsb2cgPSAwOwotICAgIGlmICghdHJ5RmFzdE1hbGxv
Yyhsb2dMZW5ndGggKiBzaXplb2YoR0xjaGFyKSkuZ2V0VmFsdWUobG9nKSkKLSAgICAgICAgcmV0
dXJuIFN0cmluZygpOwotICAgIEdMc2l6ZWkgcmV0dXJuZWRMb2dMZW5ndGg7Ci0gICAgZ2xHZXRT
aGFkZXJTb3VyY2Uoc2hhZGVySUQsIGxvZ0xlbmd0aCwgJnJldHVybmVkTG9nTGVuZ3RoLCBsb2cp
OwotICAgIEFTU0VSVChsb2dMZW5ndGggPT0gcmV0dXJuZWRMb2dMZW5ndGggKyAxKTsKLSAgICBT
dHJpbmcgcmVzID0gU3RyaW5nKGxvZywgcmV0dXJuZWRMb2dMZW5ndGgpOwotICAgIGZhc3RGcmVl
KGxvZyk7Ci0gICAgcmV0dXJuIHJlczsKKyAgICBtX2ltcGwtPnVuaWZvcm1NYXRyaXgzZnYobG9j
YXRpb24sIHNpemUsIHRyYW5zcG9zZSwgdmFsdWUpOwogfQogCi1TdHJpbmcgR3JhcGhpY3NDb250
ZXh0M0Q6OmdldFN0cmluZyh1bnNpZ25lZCBsb25nIG5hbWUpCit2b2lkIEdyYXBoaWNzQ29udGV4
dDNESW50ZXJuYWw6OnVuaWZvcm1NYXRyaXg0ZnYobG9uZyBsb2NhdGlvbiwgYm9vbCB0cmFuc3Bv
c2UsIGZsb2F0KiB2YWx1ZSwgaW50IHNpemUpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
Ci0gICAgcmV0dXJuIFN0cmluZyhyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihnbEdldFN0
cmluZyhuYW1lKSkpOworICAgIG1faW1wbC0+dW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwgc2l6
ZSwgdHJhbnNwb3NlLCB2YWx1ZSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFRl
eFBhcmFtZXRlcmZ2KHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIHBuYW1lLCBm
bG9hdCogdmFsdWUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2xHZXRUZXhQ
YXJhbWV0ZXJmdih0YXJnZXQsIHBuYW1lLCB2YWx1ZSk7Ci19CitERUxFR0FURV9UT19JTVBMXzFf
WCh1c2VQcm9ncmFtLCBXZWJHTFByb2dyYW0qKQorREVMRUdBVEVfVE9fSU1QTF8xX1godmFsaWRh
dGVQcm9ncmFtLCBXZWJHTFByb2dyYW0qKQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRU
ZXhQYXJhbWV0ZXJpdih1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBwbmFtZSwg
aW50KiB2YWx1ZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbEdldFRleFBh
cmFtZXRlcml2KHRhcmdldCwgcG5hbWUsIHZhbHVlKTsKLX0KK0RFTEVHQVRFX1RPX0lNUExfMih2
ZXJ0ZXhBdHRyaWIxZiwgdW5zaWduZWQgbG9uZywgZmxvYXQpCitERUxFR0FURV9UT19JTVBMXzIo
dmVydGV4QXR0cmliMWZ2LCB1bnNpZ25lZCBsb25nLCBmbG9hdCopCitERUxFR0FURV9UT19JTVBM
XzModmVydGV4QXR0cmliMmYsIHVuc2lnbmVkIGxvbmcsIGZsb2F0LCBmbG9hdCkKK0RFTEVHQVRF
X1RPX0lNUExfMih2ZXJ0ZXhBdHRyaWIyZnYsIHVuc2lnbmVkIGxvbmcsIGZsb2F0KikKK0RFTEVH
QVRFX1RPX0lNUExfNCh2ZXJ0ZXhBdHRyaWIzZiwgdW5zaWduZWQgbG9uZywgZmxvYXQsIGZsb2F0
LCBmbG9hdCkKK0RFTEVHQVRFX1RPX0lNUExfMih2ZXJ0ZXhBdHRyaWIzZnYsIHVuc2lnbmVkIGxv
bmcsIGZsb2F0KikKK0RFTEVHQVRFX1RPX0lNUExfNSh2ZXJ0ZXhBdHRyaWI0ZiwgdW5zaWduZWQg
bG9uZywgZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQpCitERUxFR0FURV9UT19JTVBMXzIodmVy
dGV4QXR0cmliNGZ2LCB1bnNpZ25lZCBsb25nLCBmbG9hdCopCitERUxFR0FURV9UT19JTVBMXzYo
dmVydGV4QXR0cmliUG9pbnRlciwgdW5zaWduZWQgbG9uZywgaW50LCBpbnQsIGJvb2wsIHVuc2ln
bmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpCiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFVu
aWZvcm1mdihXZWJHTFByb2dyYW0qIHByb2dyYW0sIGxvbmcgbG9jYXRpb24sIGZsb2F0KiB2YWx1
ZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbEdldFVuaWZvcm1mdihFWFRS
QUNUKHByb2dyYW0pLCBsb2NhdGlvbiwgdmFsdWUpOwotfQorREVMRUdBVEVfVE9fSU1QTF80KHZp
ZXdwb3J0LCBsb25nLCBsb25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjpnZXRVbmlmb3JtaXYoV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBs
b25nIGxvY2F0aW9uLCBpbnQqIHZhbHVlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwot
ICAgIGdsR2V0VW5pZm9ybWl2KEVYVFJBQ1QocHJvZ3JhbSksIGxvY2F0aW9uLCB2YWx1ZSk7Ci19
CitERUxFR0FURV9UT19JTVBMX1IoY3JlYXRlQnVmZmVyLCB1bnNpZ25lZCkKK0RFTEVHQVRFX1RP
X0lNUExfUihjcmVhdGVGcmFtZWJ1ZmZlciwgdW5zaWduZWQpCitERUxFR0FURV9UT19JTVBMX1Io
Y3JlYXRlUHJvZ3JhbSwgdW5zaWduZWQpCitERUxFR0FURV9UT19JTVBMX1IoY3JlYXRlUmVuZGVy
YnVmZmVyLCB1bnNpZ25lZCkKK0RFTEVHQVRFX1RPX0lNUExfMVIoY3JlYXRlU2hhZGVyLCB1bnNp
Z25lZCBsb25nLCB1bnNpZ25lZCkKK0RFTEVHQVRFX1RPX0lNUExfUihjcmVhdGVUZXh0dXJlLCB1
bnNpZ25lZCkKIAotbG9uZyBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VW5pZm9ybUxvY2F0aW9uKFdl
YkdMUHJvZ3JhbSogcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lKQotewotICAgIGlmICghcHJv
Z3JhbSkKLSAgICAgICAgcmV0dXJuIC0xOworREVMRUdBVEVfVE9fSU1QTF8xKGRlbGV0ZUJ1ZmZl
ciwgdW5zaWduZWQpCitERUxFR0FURV9UT19JTVBMXzEoZGVsZXRlRnJhbWVidWZmZXIsIHVuc2ln
bmVkKQorREVMRUdBVEVfVE9fSU1QTF8xKGRlbGV0ZVByb2dyYW0sIHVuc2lnbmVkKQorREVMRUdB
VEVfVE9fSU1QTF8xKGRlbGV0ZVJlbmRlcmJ1ZmZlciwgdW5zaWduZWQpCitERUxFR0FURV9UT19J
TVBMXzEoZGVsZXRlU2hhZGVyLCB1bnNpZ25lZCkKK0RFTEVHQVRFX1RPX0lNUExfMShkZWxldGVU
ZXh0dXJlLCB1bnNpZ25lZCkKIAotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIHJldHVy
biBnbEdldFVuaWZvcm1Mb2NhdGlvbihFWFRSQUNUKHByb2dyYW0pLCBuYW1lLnV0ZjgoKS5kYXRh
KCkpOwotfQorREVMRUdBVEVfVE9fSU1QTF8xKHN5bnRoZXNpemVHTEVycm9yLCB1bnNpZ25lZCBs
b25nKQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRWZXJ0ZXhBdHRyaWJmdih1bnNpZ25l
ZCBsb25nIGluZGV4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dW5zaWduZWQgbG9uZyBwbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGZsb2F0KiB2YWx1ZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBn
bEdldFZlcnRleEF0dHJpYmZ2KGluZGV4LCBwbmFtZSwgdmFsdWUpOwotfQorLy8tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCisvLyBHcmFwaGljc0NvbnRleHQzRAorLy8KIAotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
Z2V0VmVydGV4QXR0cmliaXYodW5zaWduZWQgbG9uZyBpbmRleCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgcG5hbWUsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQqIHZhbHVlKQotewotICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOwotICAgIGdsR2V0VmVydGV4QXR0cmliaXYoaW5kZXgsIHBuYW1lLCB2
YWx1ZSk7Ci19CisvLyBNYWNyb3MgdG8gYXNzaXN0IGluIGRlbGVnYXRpbmcgZnJvbSBHcmFwaGlj
c0NvbnRleHQzRCB0bworLy8gR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbC4KIAotbG9uZyBHcmFw
aGljc0NvbnRleHQzRDo6Z2V0VmVydGV4QXR0cmliT2Zmc2V0KHVuc2lnbmVkIGxvbmcgaW5kZXgs
IHVuc2lnbmVkIGxvbmcgcG5hbWUpCi17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudC4KLSAgICBu
b3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiAwOworI2RlZmluZSBERUxFR0FURV9UT19JTlRF
Uk5BTChuYW1lKSBcCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpuYW1lKCkgXAoreyBcCisgICAg
bV9pbnRlcm5hbC0+bmFtZSgpOyBcCiB9CiAKLUdMX1NBTUVfTUVUSE9EXzIoSGludCwgaGludCwg
dW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyk7Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6
OmlzQnVmZmVyKFdlYkdMQnVmZmVyKiBidWZmZXIpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7Ci0gICAgcmV0dXJuIGdsSXNCdWZmZXIoRVhUUkFDVChidWZmZXIpKTsKKyNkZWZpbmUgREVM
RUdBVEVfVE9fSU5URVJOQUxfUihuYW1lLCBydCkgICAgICAgICAgIFwKK3J0IEdyYXBoaWNzQ29u
dGV4dDNEOjpuYW1lKCkgXAoreyBcCisgICAgcmV0dXJuIG1faW50ZXJuYWwtPm5hbWUoKTsgXAog
fQogCi1ib29sIEdyYXBoaWNzQ29udGV4dDNEOjppc0VuYWJsZWQodW5zaWduZWQgbG9uZyBjYXAp
Ci17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgcmV0dXJuIGdsSXNFbmFibGVkKGNh
cCk7CisjZGVmaW5lIERFTEVHQVRFX1RPX0lOVEVSTkFMXzEobmFtZSwgdDEpIFwKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6Om5hbWUodDEgYTEpIFwKK3sgXAorICAgIG1faW50ZXJuYWwtPm5hbWUo
YTEpOyBcCiB9CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmlzRnJhbWVidWZmZXIoV2ViR0xG
cmFtZWJ1ZmZlciogZnJhbWVidWZmZXIpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0g
ICAgcmV0dXJuIGdsSXNGcmFtZWJ1ZmZlckVYVChFWFRSQUNUKGZyYW1lYnVmZmVyKSk7CisjZGVm
aW5lIERFTEVHQVRFX1RPX0lOVEVSTkFMXzFSKG5hbWUsIHQxLCBydCkgICAgXAorcnQgR3JhcGhp
Y3NDb250ZXh0M0Q6Om5hbWUodDEgYTEpIFwKK3sgXAorICAgIHJldHVybiBtX2ludGVybmFsLT5u
YW1lKGExKTsgXAogfQogCi1ib29sIEdyYXBoaWNzQ29udGV4dDNEOjppc1Byb2dyYW0oV2ViR0xQ
cm9ncmFtKiBwcm9ncmFtKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIHJldHVy
biBnbElzUHJvZ3JhbShFWFRSQUNUKHByb2dyYW0pKTsKKyNkZWZpbmUgREVMRUdBVEVfVE9fSU5U
RVJOQUxfMihuYW1lLCB0MSwgdDIpIFwKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6Om5hbWUodDEg
YTEsIHQyIGEyKSBcCit7IFwKKyAgICBtX2ludGVybmFsLT5uYW1lKGExLCBhMik7IFwKIH0KIAot
Ym9vbCBHcmFwaGljc0NvbnRleHQzRDo6aXNSZW5kZXJidWZmZXIoV2ViR0xSZW5kZXJidWZmZXIq
IHJlbmRlcmJ1ZmZlcikKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICByZXR1cm4g
Z2xJc1JlbmRlcmJ1ZmZlckVYVChFWFRSQUNUKHJlbmRlcmJ1ZmZlcikpOworI2RlZmluZSBERUxF
R0FURV9UT19JTlRFUk5BTF8yUihuYW1lLCB0MSwgdDIsIHJ0KSAgXAorcnQgR3JhcGhpY3NDb250
ZXh0M0Q6Om5hbWUodDEgYTEsIHQyIGEyKSBcCit7IFwKKyAgICByZXR1cm4gbV9pbnRlcm5hbC0+
bmFtZShhMSwgYTIpOyBcCiB9CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmlzU2hhZGVyKFdl
YkdMU2hhZGVyKiBzaGFkZXIpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgcmV0
dXJuIGdsSXNTaGFkZXIoRVhUUkFDVChzaGFkZXIpKTsKKyNkZWZpbmUgREVMRUdBVEVfVE9fSU5U
RVJOQUxfMyhuYW1lLCB0MSwgdDIsIHQzKSAgIFwKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6Om5h
bWUodDEgYTEsIHQyIGEyLCB0MyBhMykgICAgXAoreyBcCisgICAgbV9pbnRlcm5hbC0+bmFtZShh
MSwgYTIsIGEzKTsgICAgICAgICAgICAgICAgICBcCiB9CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0
M0Q6OmlzVGV4dHVyZShXZWJHTFRleHR1cmUqIHRleHR1cmUpCi17Ci0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7Ci0gICAgcmV0dXJuIGdsSXNUZXh0dXJlKEVYVFJBQ1QodGV4dHVyZSkpOworI2Rl
ZmluZSBERUxFR0FURV9UT19JTlRFUk5BTF8zUihuYW1lLCB0MSwgdDIsIHQzLCBydCkgICBcCity
dCBHcmFwaGljc0NvbnRleHQzRDo6bmFtZSh0MSBhMSwgdDIgYTIsIHQzIGEzKSAgICBcCit7IFwK
KyAgICByZXR1cm4gbV9pbnRlcm5hbC0+bmFtZShhMSwgYTIsIGEzKTsgICAgICAgICAgICAgICAg
ICBcCiB9CiAKLUdMX1NBTUVfTUVUSE9EXzEoTGluZVdpZHRoLCBsaW5lV2lkdGgsIGRvdWJsZSkK
KyNkZWZpbmUgREVMRUdBVEVfVE9fSU5URVJOQUxfNChuYW1lLCB0MSwgdDIsIHQzLCB0NCkgICAg
XAordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6bmFtZSh0MSBhMSwgdDIgYTIsIHQzIGEzLCB0NCBh
NCkgIFwKK3sgXAorICAgIG1faW50ZXJuYWwtPm5hbWUoYTEsIGEyLCBhMywgYTQpOyAgICAgICAg
ICAgICAgXAorfQogCi1HTF9TQU1FX01FVEhPRF8xX1goTGlua1Byb2dyYW0sIGxpbmtQcm9ncmFt
LCBXZWJHTFByb2dyYW0qKQorI2RlZmluZSBERUxFR0FURV9UT19JTlRFUk5BTF81KG5hbWUsIHQx
LCB0MiwgdDMsIHQ0LCB0NSkgICAgICBcCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpuYW1lKHQx
IGExLCB0MiBhMiwgdDMgYTMsIHQ0IGE0LCB0NSBhNSkgICAgICAgIFwKK3sgXAorICAgIG1faW50
ZXJuYWwtPm5hbWUoYTEsIGEyLCBhMywgYTQsIGE1KTsgICBcCit9CiAKLXZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OnBpeGVsU3RvcmVpKHVuc2lnbmVkIGxvbmcgcG5hbWUsIGxvbmcgcGFyYW0pCi17
Ci0gICAgaWYgKHBuYW1lICE9IEdMX1BBQ0tfQUxJR05NRU5UICYmIHBuYW1lICE9IEdMX1VOUEFD
S19BTElHTk1FTlQpIHsKLSAgICAgICAgLy8gRklYTUU6IENyZWF0ZSBhIGZha2UgR0wgZXJyb3Ig
YW5kIHRocm93IGFuIGV4Y2VwdGlvbi4KLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyNkZWZpbmUg
REVMRUdBVEVfVE9fSU5URVJOQUxfNihuYW1lLCB0MSwgdDIsIHQzLCB0NCwgdDUsIHQ2KSAgXAor
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6bmFtZSh0MSBhMSwgdDIgYTIsIHQzIGEzLCB0NCBhNCwg
dDUgYTUsIHQ2IGE2KSBcCit7IFwKKyAgICBtX2ludGVybmFsLT5uYW1lKGExLCBhMiwgYTMsIGE0
LCBhNSwgYTYpOyAgIFwKK30KIAotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsUGl4
ZWxTdG9yZWkocG5hbWUsIHBhcmFtKTsKKyNkZWZpbmUgREVMRUdBVEVfVE9fSU5URVJOQUxfNlIo
bmFtZSwgdDEsIHQyLCB0MywgdDQsIHQ1LCB0NiwgcnQpICBcCitydCBHcmFwaGljc0NvbnRleHQz
RDo6bmFtZSh0MSBhMSwgdDIgYTIsIHQzIGEzLCB0NCBhNCwgdDUgYTUsIHQ2IGE2KSBcCit7IFwK
KyAgICByZXR1cm4gbV9pbnRlcm5hbC0+bmFtZShhMSwgYTIsIGEzLCBhNCwgYTUsIGE2KTsgICAg
ICAgXAogfQogCi1HTF9TQU1FX01FVEhPRF8yKFBvbHlnb25PZmZzZXQsIHBvbHlnb25PZmZzZXQs
IGRvdWJsZSwgZG91YmxlKQorI2RlZmluZSBERUxFR0FURV9UT19JTlRFUk5BTF83UihuYW1lLCB0
MSwgdDIsIHQzLCB0NCwgdDUsIHQ2LCB0NywgcnQpIFwKK3J0IEdyYXBoaWNzQ29udGV4dDNEOjpu
YW1lKHQxIGExLCB0MiBhMiwgdDMgYTMsIHQ0IGE0LCB0NSBhNSwgdDYgYTYsIHQ3IGE3KSBcCit7
IFwKKyAgICByZXR1cm4gbV9pbnRlcm5hbC0+bmFtZShhMSwgYTIsIGEzLCBhNCwgYTUsIGE2LCBh
Nyk7ICAgXAorfQogCi1QYXNzUmVmUHRyPFdlYkdMQXJyYXk+IEdyYXBoaWNzQ29udGV4dDNEOjpy
ZWFkUGl4ZWxzKGxvbmcgeCwgbG9uZyB5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9u
ZyBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB1bnNpZ25lZCBsb25nIGZvcm1hdCwgdW5zaWduZWQgbG9uZyB0eXBlKSB7Ci0gICAg
Ly8gRklYTUU6IHN1cHBvcnQgbW9yZSBwaXhlbCBmb3JtYXRzIGFuZCB0eXBlcy4KLSAgICBpZiAo
ISgoZm9ybWF0ID09IEdMX1JHQkEpICYmICh0eXBlID09IEdMX1VOU0lHTkVEX0JZVEUpKSkKLSAg
ICAgICAgcmV0dXJuIDA7CisjZGVmaW5lIERFTEVHQVRFX1RPX0lOVEVSTkFMXzgobmFtZSwgdDEs
IHQyLCB0MywgdDQsIHQ1LCB0NiwgdDcsIHQ4KSAgICAgICBcCit2b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpuYW1lKHQxIGExLCB0MiBhMiwgdDMgYTMsIHQ0IGE0LCB0NSBhNSwgdDYgYTYsIHQ3IGE3
LCB0OCBhOCkgXAoreyBcCisgICAgbV9pbnRlcm5hbC0+bmFtZShhMSwgYTIsIGEzLCBhNCwgYTUs
IGE2LCBhNywgYTgpOyAgICAgIFwKK30KIAotICAgIC8vIEZJWE1FOiB0YWtlIGludG8gYWNjb3Vu
dCBwYWNrIGFsaWdubWVudC4KLSAgICBSZWZQdHI8V2ViR0xVbnNpZ25lZEJ5dGVBcnJheT4gYXJy
YXkgPSBXZWJHTFVuc2lnbmVkQnl0ZUFycmF5OjpjcmVhdGUod2lkdGggKiBoZWlnaHQgKiA0KTsK
LSAgICBnbFJlYWRQaXhlbHMoeCwgeSwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBhcnJh
eS0+YmFzZUFkZHJlc3MoKSk7Ci0gICAgcmV0dXJuIGFycmF5OworI2RlZmluZSBERUxFR0FURV9U
T19JTlRFUk5BTF85UihuYW1lLCB0MSwgdDIsIHQzLCB0NCwgdDUsIHQ2LCB0NywgdDgsIHQ5LCBy
dCkgXAorcnQgR3JhcGhpY3NDb250ZXh0M0Q6Om5hbWUodDEgYTEsIHQyIGEyLCB0MyBhMywgdDQg
YTQsIHQ1IGE1LCB0NiBhNiwgdDcgYTcsIHQ4IGE4LCB0OSBhOSkgXAoreyBcCisgICAgcmV0dXJu
IG1faW50ZXJuYWwtPm5hbWUoYTEsIGEyLCBhMywgYTQsIGE1LCBhNiwgYTcsIGE4LCBhOSk7ICAg
XAogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZWxlYXNlU2hhZGVyQ29tcGlsZXIoKQor
R3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKEdyYXBoaWNzQ29udGV4dDNEOjpB
dHRyaWJ1dGVzIGF0dHJzKQogewogfQogCi1HTF9TQU1FX01FVEhPRF80KFJlbmRlcmJ1ZmZlclN0
b3JhZ2VFWFQsIHJlbmRlcmJ1ZmZlclN0b3JhZ2UsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxv
bmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpCi0KLUdMX1NBTUVfTUVUSE9EXzIoU2Ft
cGxlQ292ZXJhZ2UsIHNhbXBsZUNvdmVyYWdlLCBkb3VibGUsIGJvb2wpCi0KLUdMX1NBTUVfTUVU
SE9EXzQoU2Npc3Nvciwgc2Npc3NvciwgbG9uZywgbG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWdu
ZWQgbG9uZykKLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c2hhZGVyU291cmNlKFdlYkdMU2hh
ZGVyKiBzaGFkZXIsIGNvbnN0IFN0cmluZyYgc291cmNlKQorR3JhcGhpY3NDb250ZXh0M0Q6On5H
cmFwaGljc0NvbnRleHQzRCgpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgQ1N0
cmluZyBzdHIgPSBzb3VyY2UudXRmOCgpOwotICAgIGNvbnN0IGNoYXIqIGRhdGEgPSBzdHIuZGF0
YSgpOwotICAgIEdMaW50IGxlbmd0aCA9IHN0ci5sZW5ndGgoKTsKLSAgICBnbFNoYWRlclNvdXJj
ZShFWFRSQUNUKHNoYWRlciksIDEsICZkYXRhLCAmbGVuZ3RoKTsKIH0KIAotR0xfU0FNRV9NRVRI
T0RfMyhTdGVuY2lsRnVuYywgc3RlbmNpbEZ1bmMsIHVuc2lnbmVkIGxvbmcsIGxvbmcsIHVuc2ln
bmVkIGxvbmcpCi0KLUdMX1NBTUVfTUVUSE9EXzQoU3RlbmNpbEZ1bmNTZXBhcmF0ZSwgc3RlbmNp
bEZ1bmNTZXBhcmF0ZSwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgbG9uZywgdW5zaWdu
ZWQgbG9uZykKLQotR0xfU0FNRV9NRVRIT0RfMShTdGVuY2lsTWFzaywgc3RlbmNpbE1hc2ssIHVu
c2lnbmVkIGxvbmcpCi0KLUdMX1NBTUVfTUVUSE9EXzIoU3RlbmNpbE1hc2tTZXBhcmF0ZSwgc3Rl
bmNpbE1hc2tTZXBhcmF0ZSwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZykKLQotR0xfU0FN
RV9NRVRIT0RfMyhTdGVuY2lsT3AsIHN0ZW5jaWxPcCwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQg
bG9uZywgdW5zaWduZWQgbG9uZykKLQotR0xfU0FNRV9NRVRIT0RfNChTdGVuY2lsT3BTZXBhcmF0
ZSwgc3RlbmNpbE9wU2VwYXJhdGUsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2ln
bmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpCitQYXNzT3duUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBH
cmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlKEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0
dHJzKQoreworICAgIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwqIGludGVybmFsID0gbmV3IEdy
YXBoaWNzQ29udGV4dDNESW50ZXJuYWwoKTsKKyAgICBpZiAoIWludGVybmFsLT5pbml0aWFsaXpl
KGF0dHJzKSkgeworICAgICAgICBkZWxldGUgaW50ZXJuYWw7CisgICAgICAgIHJldHVybiAwOwor
ICAgIH0KKyAgICBQYXNzT3duUHRyPEdyYXBoaWNzQ29udGV4dDNEPiByZXN1bHQgPSBuZXcgR3Jh
cGhpY3NDb250ZXh0M0QoYXR0cnMpOworICAgIHJlc3VsdC0+bV9pbnRlcm5hbC5zZXQoaW50ZXJu
YWwpOworICAgIHJldHVybiByZXN1bHQ7Cit9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnN5
bnRoZXNpemVHTEVycm9yKHVuc2lnbmVkIGxvbmcgZXJyb3IpCitQbGF0Zm9ybUdyYXBoaWNzQ29u
dGV4dDNEIEdyYXBoaWNzQ29udGV4dDNEOjpwbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEKCkgY29u
c3QKIHsKLSAgICBtX2ludGVybmFsLT5zeW50aGVzaXplR0xFcnJvcihlcnJvcik7CisgICAgcmV0
dXJuIG1faW50ZXJuYWwtPnBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QoKTsKIH0KIAotaW50IEdy
YXBoaWNzQ29udGV4dDNEOjp0ZXhJbWFnZTJEKHVuc2lnbmVkIHRhcmdldCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsZXZlbCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnRlcm5hbGZvcm1hdCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCB3aWR0aCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdW5zaWduZWQgYm9yZGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIGZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1
bnNpZ25lZCB0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqIHBp
eGVscykKK1BsYXRmb3JtM0RPYmplY3QgR3JhcGhpY3NDb250ZXh0M0Q6OnBsYXRmb3JtVGV4dHVy
ZSgpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6IG11c3QgZG8gdmFsaWRhdGlvbiBzaW1pbGFyIHRv
IEpPR0wncyB0byBlbnN1cmUgdGhhdAotICAgIC8vIHRoZSBpbmNvbWluZyBhcnJheSBpcyBvZiB0
aGUgYXBwcm9wcmlhdGUgbGVuZ3RoLgotICAgIGdsVGV4SW1hZ2UyRCh0YXJnZXQsCi0gICAgICAg
ICAgICAgICAgIGxldmVsLAotICAgICAgICAgICAgICAgICBpbnRlcm5hbGZvcm1hdCwKLSAgICAg
ICAgICAgICAgICAgd2lkdGgsCi0gICAgICAgICAgICAgICAgIGhlaWdodCwKLSAgICAgICAgICAg
ICAgICAgYm9yZGVyLAotICAgICAgICAgICAgICAgICBmb3JtYXQsCi0gICAgICAgICAgICAgICAg
IHR5cGUsCi0gICAgICAgICAgICAgICAgIHBpeGVscyk7Ci0gICAgcmV0dXJuIDA7CisgICAgcmV0
dXJuIG1faW50ZXJuYWwtPnBsYXRmb3JtVGV4dHVyZSgpOwogfQogCitERUxFR0FURV9UT19JTlRF
Uk5BTChtYWtlQ29udGV4dEN1cnJlbnQpCitERUxFR0FURV9UT19JTlRFUk5BTF8xUihzaXplSW5C
eXRlcywgaW50LCBpbnQpCitERUxFR0FURV9UT19JTlRFUk5BTF8yKHJlc2hhcGUsIGludCwgaW50
KQorCitERUxFR0FURV9UT19JTlRFUk5BTF8xKGFjdGl2ZVRleHR1cmUsIHVuc2lnbmVkIGxvbmcp
CitERUxFR0FURV9UT19JTlRFUk5BTF8yKGF0dGFjaFNoYWRlciwgV2ViR0xQcm9ncmFtKiwgV2Vi
R0xTaGFkZXIqKQorREVMRUdBVEVfVE9fSU5URVJOQUxfMyhiaW5kQXR0cmliTG9jYXRpb24sIFdl
YkdMUHJvZ3JhbSosIHVuc2lnbmVkIGxvbmcsIGNvbnN0IFN0cmluZyYpCisKK0RFTEVHQVRFX1RP
X0lOVEVSTkFMXzIoYmluZEJ1ZmZlciwgdW5zaWduZWQgbG9uZywgV2ViR0xCdWZmZXIqKQorREVM
RUdBVEVfVE9fSU5URVJOQUxfMihiaW5kRnJhbWVidWZmZXIsIHVuc2lnbmVkIGxvbmcsIFdlYkdM
RnJhbWVidWZmZXIqKQorREVMRUdBVEVfVE9fSU5URVJOQUxfMihiaW5kUmVuZGVyYnVmZmVyLCB1
bnNpZ25lZCBsb25nLCBXZWJHTFJlbmRlcmJ1ZmZlciopCitERUxFR0FURV9UT19JTlRFUk5BTF8y
KGJpbmRUZXh0dXJlLCB1bnNpZ25lZCBsb25nLCBXZWJHTFRleHR1cmUqKQorREVMRUdBVEVfVE9f
SU5URVJOQUxfNChibGVuZENvbG9yLCBkb3VibGUsIGRvdWJsZSwgZG91YmxlLCBkb3VibGUpCitE
RUxFR0FURV9UT19JTlRFUk5BTF8xKGJsZW5kRXF1YXRpb24sIHVuc2lnbmVkIGxvbmcpCitERUxF
R0FURV9UT19JTlRFUk5BTF8yKGJsZW5kRXF1YXRpb25TZXBhcmF0ZSwgdW5zaWduZWQgbG9uZywg
dW5zaWduZWQgbG9uZykKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzIoYmxlbmRGdW5jLCB1bnNpZ25l
ZCBsb25nLCB1bnNpZ25lZCBsb25nKQorREVMRUdBVEVfVE9fSU5URVJOQUxfNChibGVuZEZ1bmNT
ZXBhcmF0ZSwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgdW5z
aWduZWQgbG9uZykKKworREVMRUdBVEVfVE9fSU5URVJOQUxfMyhidWZmZXJEYXRhLCB1bnNpZ25l
ZCBsb25nLCBpbnQsIHVuc2lnbmVkIGxvbmcpCitERUxFR0FURV9UT19JTlRFUk5BTF8zKGJ1ZmZl
ckRhdGEsIHVuc2lnbmVkIGxvbmcsIFdlYkdMQXJyYXkqLCB1bnNpZ25lZCBsb25nKQorREVMRUdB
VEVfVE9fSU5URVJOQUxfMyhidWZmZXJTdWJEYXRhLCB1bnNpZ25lZCBsb25nLCBsb25nLCBXZWJH
TEFycmF5KikKKworREVMRUdBVEVfVE9fSU5URVJOQUxfMVIoY2hlY2tGcmFtZWJ1ZmZlclN0YXR1
cywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZykKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzEo
Y2xlYXIsIHVuc2lnbmVkIGxvbmcpCitERUxFR0FURV9UT19JTlRFUk5BTF80KGNsZWFyQ29sb3Is
IGRvdWJsZSwgZG91YmxlLCBkb3VibGUsIGRvdWJsZSkKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzEo
Y2xlYXJEZXB0aCwgZG91YmxlKQorREVMRUdBVEVfVE9fSU5URVJOQUxfMShjbGVhclN0ZW5jaWws
IGxvbmcpCitERUxFR0FURV9UT19JTlRFUk5BTF80KGNvbG9yTWFzaywgYm9vbCwgYm9vbCwgYm9v
bCwgYm9vbCkKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzEoY29tcGlsZVNoYWRlciwgV2ViR0xTaGFk
ZXIqKQorCitERUxFR0FURV9UT19JTlRFUk5BTF84KGNvcHlUZXhJbWFnZTJELCB1bnNpZ25lZCBs
b25nLCBsb25nLCB1bnNpZ25lZCBsb25nLCBsb25nLCBsb25nLCB1bnNpZ25lZCBsb25nLCB1bnNp
Z25lZCBsb25nLCBsb25nKQorREVMRUdBVEVfVE9fSU5URVJOQUxfOChjb3B5VGV4U3ViSW1hZ2Uy
RCwgdW5zaWduZWQgbG9uZywgbG9uZywgbG9uZywgbG9uZywgbG9uZywgbG9uZywgdW5zaWduZWQg
bG9uZywgdW5zaWduZWQgbG9uZykKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzEoY3VsbEZhY2UsIHVu
c2lnbmVkIGxvbmcpCitERUxFR0FURV9UT19JTlRFUk5BTF8xKGRlcHRoRnVuYywgdW5zaWduZWQg
bG9uZykKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzEoZGVwdGhNYXNrLCBib29sKQorREVMRUdBVEVf
VE9fSU5URVJOQUxfMihkZXB0aFJhbmdlLCBkb3VibGUsIGRvdWJsZSkKK0RFTEVHQVRFX1RPX0lO
VEVSTkFMXzIoZGV0YWNoU2hhZGVyLCBXZWJHTFByb2dyYW0qLCBXZWJHTFNoYWRlciopCitERUxF
R0FURV9UT19JTlRFUk5BTF8xKGRpc2FibGUsIHVuc2lnbmVkIGxvbmcpCitERUxFR0FURV9UT19J
TlRFUk5BTF8xKGRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheSwgdW5zaWduZWQgbG9uZykKK0RFTEVH
QVRFX1RPX0lOVEVSTkFMXzMoZHJhd0FycmF5cywgdW5zaWduZWQgbG9uZywgbG9uZywgbG9uZykK
K0RFTEVHQVRFX1RPX0lOVEVSTkFMXzQoZHJhd0VsZW1lbnRzLCB1bnNpZ25lZCBsb25nLCB1bnNp
Z25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCBsb25nKQorCitERUxFR0FURV9UT19JTlRFUk5BTF8x
KGVuYWJsZSwgdW5zaWduZWQgbG9uZykKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzEoZW5hYmxlVmVy
dGV4QXR0cmliQXJyYXksIHVuc2lnbmVkIGxvbmcpCitERUxFR0FURV9UT19JTlRFUk5BTChmaW5p
c2gpCitERUxFR0FURV9UT19JTlRFUk5BTChmbHVzaCkKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzQo
ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVu
c2lnbmVkIGxvbmcsIFdlYkdMUmVuZGVyYnVmZmVyKikKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzUo
ZnJhbWVidWZmZXJUZXh0dXJlMkQsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2ln
bmVkIGxvbmcsIFdlYkdMVGV4dHVyZSosIGxvbmcpCitERUxFR0FURV9UT19JTlRFUk5BTF8xKGZy
b250RmFjZSwgdW5zaWduZWQgbG9uZykKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzEoZ2VuZXJhdGVN
aXBtYXAsIHVuc2lnbmVkIGxvbmcpCisKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzNSKGdldEFjdGl2
ZUF0dHJpYiwgV2ViR0xQcm9ncmFtKiwgdW5zaWduZWQgbG9uZywgQWN0aXZlSW5mbyYsIGJvb2wp
CitERUxFR0FURV9UT19JTlRFUk5BTF8zUihnZXRBY3RpdmVVbmlmb3JtLCBXZWJHTFByb2dyYW0q
LCB1bnNpZ25lZCBsb25nLCBBY3RpdmVJbmZvJiwgYm9vbCkKKworREVMRUdBVEVfVE9fSU5URVJO
QUxfMlIoZ2V0QXR0cmliTG9jYXRpb24sIFdlYkdMUHJvZ3JhbSosIGNvbnN0IFN0cmluZyYsIGlu
dCkKKworREVMRUdBVEVfVE9fSU5URVJOQUxfMihnZXRCb29sZWFudiwgdW5zaWduZWQgbG9uZywg
dW5zaWduZWQgY2hhciopCisKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzMoZ2V0QnVmZmVyUGFyYW1l
dGVyaXYsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIGludCopCisKK0RFTEVHQVRFX1RP
X0lOVEVSTkFMX1IoZ2V0Q29udGV4dEF0dHJpYnV0ZXMsIEdyYXBoaWNzQ29udGV4dDNEOjpBdHRy
aWJ1dGVzKQorCitERUxFR0FURV9UT19JTlRFUk5BTF9SKGdldEVycm9yLCB1bnNpZ25lZCBsb25n
KQorCitERUxFR0FURV9UT19JTlRFUk5BTF8yKGdldEZsb2F0diwgdW5zaWduZWQgbG9uZywgZmxv
YXQqKQorCitERUxFR0FURV9UT19JTlRFUk5BTF80KGdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBh
cmFtZXRlcml2LCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCBp
bnQqKQorCitERUxFR0FURV9UT19JTlRFUk5BTF8yKGdldEludGVnZXJ2LCB1bnNpZ25lZCBsb25n
LCBpbnQqKQorCitERUxFR0FURV9UT19JTlRFUk5BTF8zKGdldFByb2dyYW1pdiwgV2ViR0xQcm9n
cmFtKiwgdW5zaWduZWQgbG9uZywgaW50KikKKworREVMRUdBVEVfVE9fSU5URVJOQUxfMVIoZ2V0
UHJvZ3JhbUluZm9Mb2csIFdlYkdMUHJvZ3JhbSosIFN0cmluZykKKworREVMRUdBVEVfVE9fSU5U
RVJOQUxfMyhnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdiwgdW5zaWduZWQgbG9uZywgdW5zaWdu
ZWQgbG9uZywgaW50KikKKworREVMRUdBVEVfVE9fSU5URVJOQUxfMyhnZXRTaGFkZXJpdiwgV2Vi
R0xTaGFkZXIqLCB1bnNpZ25lZCBsb25nLCBpbnQqKQorCitERUxFR0FURV9UT19JTlRFUk5BTF8x
UihnZXRTaGFkZXJJbmZvTG9nLCBXZWJHTFNoYWRlciosIFN0cmluZykKKworREVMRUdBVEVfVE9f
SU5URVJOQUxfMVIoZ2V0U2hhZGVyU291cmNlLCBXZWJHTFNoYWRlciosIFN0cmluZykKK0RFTEVH
QVRFX1RPX0lOVEVSTkFMXzFSKGdldFN0cmluZywgdW5zaWduZWQgbG9uZywgU3RyaW5nKQorCitE
RUxFR0FURV9UT19JTlRFUk5BTF8zKGdldFRleFBhcmFtZXRlcmZ2LCB1bnNpZ25lZCBsb25nLCB1
bnNpZ25lZCBsb25nLCBmbG9hdCopCitERUxFR0FURV9UT19JTlRFUk5BTF8zKGdldFRleFBhcmFt
ZXRlcml2LCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCBpbnQqKQorCitERUxFR0FURV9U
T19JTlRFUk5BTF8zKGdldFVuaWZvcm1mdiwgV2ViR0xQcm9ncmFtKiwgbG9uZywgZmxvYXQqKQor
REVMRUdBVEVfVE9fSU5URVJOQUxfMyhnZXRVbmlmb3JtaXYsIFdlYkdMUHJvZ3JhbSosIGxvbmcs
IGludCopCisKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzJSKGdldFVuaWZvcm1Mb2NhdGlvbiwgV2Vi
R0xQcm9ncmFtKiwgY29uc3QgU3RyaW5nJiwgbG9uZykKKworREVMRUdBVEVfVE9fSU5URVJOQUxf
MyhnZXRWZXJ0ZXhBdHRyaWJmdiwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgZmxvYXQq
KQorREVMRUdBVEVfVE9fSU5URVJOQUxfMyhnZXRWZXJ0ZXhBdHRyaWJpdiwgdW5zaWduZWQgbG9u
ZywgdW5zaWduZWQgbG9uZywgaW50KikKKworREVMRUdBVEVfVE9fSU5URVJOQUxfMlIoZ2V0VmVy
dGV4QXR0cmliT2Zmc2V0LCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCBsb25nKQorCitE
RUxFR0FURV9UT19JTlRFUk5BTF8yKGhpbnQsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcp
CitERUxFR0FURV9UT19JTlRFUk5BTF8xUihpc0J1ZmZlciwgV2ViR0xCdWZmZXIqLCBib29sKQor
REVMRUdBVEVfVE9fSU5URVJOQUxfMVIoaXNFbmFibGVkLCB1bnNpZ25lZCBsb25nLCBib29sKQor
REVMRUdBVEVfVE9fSU5URVJOQUxfMVIoaXNGcmFtZWJ1ZmZlciwgV2ViR0xGcmFtZWJ1ZmZlcios
IGJvb2wpCitERUxFR0FURV9UT19JTlRFUk5BTF8xUihpc1Byb2dyYW0sIFdlYkdMUHJvZ3JhbSos
IGJvb2wpCitERUxFR0FURV9UT19JTlRFUk5BTF8xUihpc1JlbmRlcmJ1ZmZlciwgV2ViR0xSZW5k
ZXJidWZmZXIqLCBib29sKQorREVMRUdBVEVfVE9fSU5URVJOQUxfMVIoaXNTaGFkZXIsIFdlYkdM
U2hhZGVyKiwgYm9vbCkKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzFSKGlzVGV4dHVyZSwgV2ViR0xU
ZXh0dXJlKiwgYm9vbCkKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzEobGluZVdpZHRoLCBkb3VibGUp
CitERUxFR0FURV9UT19JTlRFUk5BTF8xKGxpbmtQcm9ncmFtLCBXZWJHTFByb2dyYW0qKQorREVM
RUdBVEVfVE9fSU5URVJOQUxfMihwaXhlbFN0b3JlaSwgdW5zaWduZWQgbG9uZywgbG9uZykKK0RF
TEVHQVRFX1RPX0lOVEVSTkFMXzIocG9seWdvbk9mZnNldCwgZG91YmxlLCBkb3VibGUpCisKK0RF
TEVHQVRFX1RPX0lOVEVSTkFMXzZSKHJlYWRQaXhlbHMsIGxvbmcsIGxvbmcsIHVuc2lnbmVkIGxv
bmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIFBhc3NSZWZQ
dHI8V2ViR0xBcnJheT4pCisKK0RFTEVHQVRFX1RPX0lOVEVSTkFMKHJlbGVhc2VTaGFkZXJDb21w
aWxlcikKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzQocmVuZGVyYnVmZmVyU3RvcmFnZSwgdW5zaWdu
ZWQgbG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZykKK0RF
TEVHQVRFX1RPX0lOVEVSTkFMXzIoc2FtcGxlQ292ZXJhZ2UsIGRvdWJsZSwgYm9vbCkKK0RFTEVH
QVRFX1RPX0lOVEVSTkFMXzQoc2Npc3NvciwgbG9uZywgbG9uZywgdW5zaWduZWQgbG9uZywgdW5z
aWduZWQgbG9uZykKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzIoc2hhZGVyU291cmNlLCBXZWJHTFNo
YWRlciosIGNvbnN0IFN0cmluZyYpCitERUxFR0FURV9UT19JTlRFUk5BTF8zKHN0ZW5jaWxGdW5j
LCB1bnNpZ25lZCBsb25nLCBsb25nLCB1bnNpZ25lZCBsb25nKQorREVMRUdBVEVfVE9fSU5URVJO
QUxfNChzdGVuY2lsRnVuY1NlcGFyYXRlLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCBs
b25nLCB1bnNpZ25lZCBsb25nKQorREVMRUdBVEVfVE9fSU5URVJOQUxfMShzdGVuY2lsTWFzaywg
dW5zaWduZWQgbG9uZykKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzIoc3RlbmNpbE1hc2tTZXBhcmF0
ZSwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZykKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzMo
c3RlbmNpbE9wLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKQor
REVMRUdBVEVfVE9fSU5URVJOQUxfNChzdGVuY2lsT3BTZXBhcmF0ZSwgdW5zaWduZWQgbG9uZywg
dW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZykKKworREVMRUdBVEVf
VE9fSU5URVJOQUxfOVIodGV4SW1hZ2UyRCwgdW5zaWduZWQsIHVuc2lnbmVkLCB1bnNpZ25lZCwg
dW5zaWduZWQsIHVuc2lnbmVkLCB1bnNpZ25lZCwgdW5zaWduZWQsIHVuc2lnbmVkLCB2b2lkKiwg
aW50KQorCiBpbnQgR3JhcGhpY3NDb250ZXh0M0Q6OnRleEltYWdlMkQodW5zaWduZWQgdGFyZ2V0
LCB1bnNpZ25lZCBsZXZlbCwgSW1hZ2UqIGltYWdlLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJvb2wgZmxpcFksIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSkKIHsKQEAgLTE4ODAs
MjkgKzEyMzQsMTUgQEAgaW50IEdyYXBoaWNzQ29udGV4dDNEOjp0ZXhJbWFnZTJEKHVuc2lnbgog
ICAgIHVuc2lnbmVkIGludCBmb3JtYXQsIGludGVybmFsRm9ybWF0OwogICAgIGlmICghZXh0cmFj
dEltYWdlRGF0YShpbWFnZSwgZmxpcFksIHByZW11bHRpcGx5QWxwaGEsIGltYWdlRGF0YSwgJmZv
cm1hdCwgJmludGVybmFsRm9ybWF0KSkKICAgICAgICAgcmV0dXJuIC0xOwotICAgIGdsVGV4SW1h
Z2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbEZvcm1hdCwKLSAgICAgICAgICAgICAgICAgaW1h
Z2UtPndpZHRoKCksIGltYWdlLT5oZWlnaHQoKSwgMCwKLSAgICAgICAgICAgICAgICAgZm9ybWF0
LCBHTF9VTlNJR05FRF9CWVRFLCBpbWFnZURhdGEuZGF0YSgpKTsKLSAgICByZXR1cm4gMDsKKyAg
ICByZXR1cm4gbV9pbnRlcm5hbC0+dGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbEZv
cm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZS0+d2lkdGgoKSwg
aW1hZ2UtPmhlaWdodCgpLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZv
cm1hdCwgVU5TSUdORURfQllURSwgaW1hZ2VEYXRhLmRhdGEoKSk7CiB9CiAKLUdMX1NBTUVfTUVU
SE9EXzMoVGV4UGFyYW1ldGVyZiwgdGV4UGFyYW1ldGVyZiwgdW5zaWduZWQsIHVuc2lnbmVkLCBm
bG9hdCk7Ci0KLUdMX1NBTUVfTUVUSE9EXzMoVGV4UGFyYW1ldGVyaSwgdGV4UGFyYW1ldGVyaSwg
dW5zaWduZWQsIHVuc2lnbmVkLCBpbnQpOworREVMRUdBVEVfVE9fSU5URVJOQUxfMyh0ZXhQYXJh
bWV0ZXJmLCB1bnNpZ25lZCwgdW5zaWduZWQsIGZsb2F0KQorREVMRUdBVEVfVE9fSU5URVJOQUxf
Myh0ZXhQYXJhbWV0ZXJpLCB1bnNpZ25lZCwgdW5zaWduZWQsIGludCkKIAotaW50IEdyYXBoaWNz
Q29udGV4dDNEOjp0ZXhTdWJJbWFnZTJEKHVuc2lnbmVkIHRhcmdldCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsZXZlbCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCB4b2Zmc2V0LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHlvZmZzZXQsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgd2lkdGgsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdW5zaWduZWQgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIGZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB1bnNpZ25lZCB0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHZvaWQqIHBpeGVscykKLXsKLSAgICBnbFRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZl
bCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBwaXhlbHMp
OwotICAgIHJldHVybiAwOwotfQorREVMRUdBVEVfVE9fSU5URVJOQUxfOVIodGV4U3ViSW1hZ2Uy
RCwgdW5zaWduZWQsIHVuc2lnbmVkLCB1bnNpZ25lZCwgdW5zaWduZWQsIHVuc2lnbmVkLCB1bnNp
Z25lZCwgdW5zaWduZWQsIHVuc2lnbmVkLCB2b2lkKiwgaW50KQogCiBpbnQgR3JhcGhpY3NDb250
ZXh0M0Q6OnRleFN1YkltYWdlMkQodW5zaWduZWQgdGFyZ2V0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxldmVsLApAQCAtMTkxNiwxNDIgKzEyNTYsNjUg
QEAgaW50IEdyYXBoaWNzQ29udGV4dDNEOjp0ZXhTdWJJbWFnZTJEKHVucwogICAgIHVuc2lnbmVk
IGludCBmb3JtYXQsIGludGVybmFsRm9ybWF0OwogICAgIGlmICghZXh0cmFjdEltYWdlRGF0YShp
bWFnZSwgZmxpcFksIHByZW11bHRpcGx5QWxwaGEsIGltYWdlRGF0YSwgJmZvcm1hdCwgJmludGVy
bmFsRm9ybWF0KSkKICAgICAgICAgcmV0dXJuIC0xOwotICAgIGdsVGV4U3ViSW1hZ2UyRCh0YXJn
ZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICBpbWFnZS0+
d2lkdGgoKSwgaW1hZ2UtPmhlaWdodCgpLAotICAgICAgICAgICAgICAgICAgICBmb3JtYXQsIEdM
X1VOU0lHTkVEX0JZVEUsIGltYWdlRGF0YS5kYXRhKCkpOwotICAgIHJldHVybiAwOwotfQorICAg
IHJldHVybiBtX2ludGVybmFsLT50ZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQs
IHlvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2UtPndp
ZHRoKCksIGltYWdlLT5oZWlnaHQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBmb3JtYXQsIFVOU0lHTkVEX0JZVEUsIGltYWdlRGF0YS5kYXRhKCkpOworfQorCitERUxF
R0FURV9UT19JTlRFUk5BTF8yKHVuaWZvcm0xZiwgbG9uZywgZmxvYXQpCitERUxFR0FURV9UT19J
TlRFUk5BTF8zKHVuaWZvcm0xZnYsIGxvbmcsIGZsb2F0KiwgaW50KQorREVMRUdBVEVfVE9fSU5U
RVJOQUxfMih1bmlmb3JtMWksIGxvbmcsIGludCkKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzModW5p
Zm9ybTFpdiwgbG9uZywgaW50KiwgaW50KQorREVMRUdBVEVfVE9fSU5URVJOQUxfMyh1bmlmb3Jt
MmYsIGxvbmcsIGZsb2F0LCBmbG9hdCkKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzModW5pZm9ybTJm
diwgbG9uZywgZmxvYXQqLCBpbnQpCitERUxFR0FURV9UT19JTlRFUk5BTF8zKHVuaWZvcm0yaSwg
bG9uZywgaW50LCBpbnQpCitERUxFR0FURV9UT19JTlRFUk5BTF8zKHVuaWZvcm0yaXYsIGxvbmcs
IGludCosIGludCkKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzQodW5pZm9ybTNmLCBsb25nLCBmbG9h
dCwgZmxvYXQsIGZsb2F0KQorREVMRUdBVEVfVE9fSU5URVJOQUxfMyh1bmlmb3JtM2Z2LCBsb25n
LCBmbG9hdCosIGludCkKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzQodW5pZm9ybTNpLCBsb25nLCBp
bnQsIGludCwgaW50KQorREVMRUdBVEVfVE9fSU5URVJOQUxfMyh1bmlmb3JtM2l2LCBsb25nLCBp
bnQqLCBpbnQpCitERUxFR0FURV9UT19JTlRFUk5BTF81KHVuaWZvcm00ZiwgbG9uZywgZmxvYXQs
IGZsb2F0LCBmbG9hdCwgZmxvYXQpCitERUxFR0FURV9UT19JTlRFUk5BTF8zKHVuaWZvcm00ZnYs
IGxvbmcsIGZsb2F0KiwgaW50KQorREVMRUdBVEVfVE9fSU5URVJOQUxfNSh1bmlmb3JtNGksIGxv
bmcsIGludCwgaW50LCBpbnQsIGludCkKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzModW5pZm9ybTRp
diwgbG9uZywgaW50KiwgaW50KQorREVMRUdBVEVfVE9fSU5URVJOQUxfNCh1bmlmb3JtTWF0cml4
MmZ2LCBsb25nLCBib29sLCBmbG9hdCosIGludCkKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzQodW5p
Zm9ybU1hdHJpeDNmdiwgbG9uZywgYm9vbCwgZmxvYXQqLCBpbnQpCitERUxFR0FURV9UT19JTlRF
Uk5BTF80KHVuaWZvcm1NYXRyaXg0ZnYsIGxvbmcsIGJvb2wsIGZsb2F0KiwgaW50KQorCitERUxF
R0FURV9UT19JTlRFUk5BTF8xKHVzZVByb2dyYW0sIFdlYkdMUHJvZ3JhbSopCitERUxFR0FURV9U
T19JTlRFUk5BTF8xKHZhbGlkYXRlUHJvZ3JhbSwgV2ViR0xQcm9ncmFtKikKKworREVMRUdBVEVf
VE9fSU5URVJOQUxfMih2ZXJ0ZXhBdHRyaWIxZiwgdW5zaWduZWQgbG9uZywgZmxvYXQpCitERUxF
R0FURV9UT19JTlRFUk5BTF8yKHZlcnRleEF0dHJpYjFmdiwgdW5zaWduZWQgbG9uZywgZmxvYXQq
KQorREVMRUdBVEVfVE9fSU5URVJOQUxfMyh2ZXJ0ZXhBdHRyaWIyZiwgdW5zaWduZWQgbG9uZywg
ZmxvYXQsIGZsb2F0KQorREVMRUdBVEVfVE9fSU5URVJOQUxfMih2ZXJ0ZXhBdHRyaWIyZnYsIHVu
c2lnbmVkIGxvbmcsIGZsb2F0KikKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzQodmVydGV4QXR0cmli
M2YsIHVuc2lnbmVkIGxvbmcsIGZsb2F0LCBmbG9hdCwgZmxvYXQpCitERUxFR0FURV9UT19JTlRF
Uk5BTF8yKHZlcnRleEF0dHJpYjNmdiwgdW5zaWduZWQgbG9uZywgZmxvYXQqKQorREVMRUdBVEVf
VE9fSU5URVJOQUxfNSh2ZXJ0ZXhBdHRyaWI0ZiwgdW5zaWduZWQgbG9uZywgZmxvYXQsIGZsb2F0
LCBmbG9hdCwgZmxvYXQpCitERUxFR0FURV9UT19JTlRFUk5BTF8yKHZlcnRleEF0dHJpYjRmdiwg
dW5zaWduZWQgbG9uZywgZmxvYXQqKQorREVMRUdBVEVfVE9fSU5URVJOQUxfNih2ZXJ0ZXhBdHRy
aWJQb2ludGVyLCB1bnNpZ25lZCBsb25nLCBpbnQsIGludCwgYm9vbCwgdW5zaWduZWQgbG9uZywg
dW5zaWduZWQgbG9uZykKKworREVMRUdBVEVfVE9fSU5URVJOQUxfNCh2aWV3cG9ydCwgbG9uZywg
bG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZykKKworREVMRUdBVEVfVE9fSU5URVJO
QUxfMShiZWdpblBhaW50LCBXZWJHTFJlbmRlcmluZ0NvbnRleHQqKQorREVMRUdBVEVfVE9fSU5U
RVJOQUwoZW5kUGFpbnQpCisKK0RFTEVHQVRFX1RPX0lOVEVSTkFMX1IoY3JlYXRlQnVmZmVyLCB1
bnNpZ25lZCkKK0RFTEVHQVRFX1RPX0lOVEVSTkFMX1IoY3JlYXRlRnJhbWVidWZmZXIsIHVuc2ln
bmVkKQorREVMRUdBVEVfVE9fSU5URVJOQUxfUihjcmVhdGVQcm9ncmFtLCB1bnNpZ25lZCkKK0RF
TEVHQVRFX1RPX0lOVEVSTkFMX1IoY3JlYXRlUmVuZGVyYnVmZmVyLCB1bnNpZ25lZCkKK0RFTEVH
QVRFX1RPX0lOVEVSTkFMXzFSKGNyZWF0ZVNoYWRlciwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQp
CitERUxFR0FURV9UT19JTlRFUk5BTF9SKGNyZWF0ZVRleHR1cmUsIHVuc2lnbmVkKQorCitERUxF
R0FURV9UT19JTlRFUk5BTF8xKGRlbGV0ZUJ1ZmZlciwgdW5zaWduZWQpCitERUxFR0FURV9UT19J
TlRFUk5BTF8xKGRlbGV0ZUZyYW1lYnVmZmVyLCB1bnNpZ25lZCkKK0RFTEVHQVRFX1RPX0lOVEVS
TkFMXzEoZGVsZXRlUHJvZ3JhbSwgdW5zaWduZWQpCitERUxFR0FURV9UT19JTlRFUk5BTF8xKGRl
bGV0ZVJlbmRlcmJ1ZmZlciwgdW5zaWduZWQpCitERUxFR0FURV9UT19JTlRFUk5BTF8xKGRlbGV0
ZVNoYWRlciwgdW5zaWduZWQpCitERUxFR0FURV9UT19JTlRFUk5BTF8xKGRlbGV0ZVRleHR1cmUs
IHVuc2lnbmVkKQogCi1HTF9TQU1FX01FVEhPRF8yKFVuaWZvcm0xZiwgdW5pZm9ybTFmLCBsb25n
LCBmbG9hdCkKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzEoc3ludGhlc2l6ZUdMRXJyb3IsIHVuc2ln
bmVkIGxvbmcpCiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0xZnYobG9uZyBsb2Nh
dGlvbiwgZmxvYXQqIHYsIGludCBzaXplKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwot
ICAgIGdsVW5pZm9ybTFmdihsb2NhdGlvbiwgc2l6ZSwgdik7Ci19Ci0KLUdMX1NBTUVfTUVUSE9E
XzIoVW5pZm9ybTFpLCB1bmlmb3JtMWksIGxvbmcsIGludCkKLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6dW5pZm9ybTFpdihsb25nIGxvY2F0aW9uLCBpbnQqIHYsIGludCBzaXplKQotewotICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsVW5pZm9ybTFpdihsb2NhdGlvbiwgc2l6ZSwg
dik7Ci19Ci0KLUdMX1NBTUVfTUVUSE9EXzMoVW5pZm9ybTJmLCB1bmlmb3JtMmYsIGxvbmcsIGZs
b2F0LCBmbG9hdCkKLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTJmdihsb25nIGxv
Y2F0aW9uLCBmbG9hdCogdiwgaW50IHNpemUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
Ci0gICAgZ2xVbmlmb3JtMmZ2KGxvY2F0aW9uLCBzaXplLCB2KTsKLX0KLQotR0xfU0FNRV9NRVRI
T0RfMyhVbmlmb3JtMmksIHVuaWZvcm0yaSwgbG9uZywgaW50LCBpbnQpCi0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OnVuaWZvcm0yaXYobG9uZyBsb2NhdGlvbiwgaW50KiB2LCBpbnQgc2l6ZSkK
LXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbFVuaWZvcm0yaXYobG9jYXRpb24s
IHNpemUsIHYpOwotfQotCi1HTF9TQU1FX01FVEhPRF80KFVuaWZvcm0zZiwgdW5pZm9ybTNmLCBs
b25nLCBmbG9hdCwgZmxvYXQsIGZsb2F0KQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlm
b3JtM2Z2KGxvbmcgbG9jYXRpb24sIGZsb2F0KiB2LCBpbnQgc2l6ZSkKLXsKLSAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKLSAgICBnbFVuaWZvcm0zZnYobG9jYXRpb24sIHNpemUsIHYpOwotfQot
Ci1HTF9TQU1FX01FVEhPRF80KFVuaWZvcm0zaSwgdW5pZm9ybTNpLCBsb25nLCBpbnQsIGludCwg
aW50KQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtM2l2KGxvbmcgbG9jYXRpb24s
IGludCogdiwgaW50IHNpemUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2xV
bmlmb3JtM2l2KGxvY2F0aW9uLCBzaXplLCB2KTsKLX0KLQotR0xfU0FNRV9NRVRIT0RfNShVbmlm
b3JtNGYsIHVuaWZvcm00ZiwgbG9uZywgZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQpCi0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm00ZnYobG9uZyBsb2NhdGlvbiwgZmxvYXQqIHYs
IGludCBzaXplKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsVW5pZm9ybTRm
dihsb2NhdGlvbiwgc2l6ZSwgdik7Ci19Ci0KLUdMX1NBTUVfTUVUSE9EXzUoVW5pZm9ybTRpLCB1
bmlmb3JtNGksIGxvbmcsIGludCwgaW50LCBpbnQsIGludCkKLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6dW5pZm9ybTRpdihsb25nIGxvY2F0aW9uLCBpbnQqIHYsIGludCBzaXplKQotewotICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsVW5pZm9ybTRpdihsb2NhdGlvbiwgc2l6ZSwg
dik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm1NYXRyaXgyZnYobG9uZyBs
b2NhdGlvbiwgYm9vbCB0cmFuc3Bvc2UsIGZsb2F0KiB2YWx1ZSwgaW50IHNpemUpCi17Ci0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2xVbmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9uLCBz
aXplLCB0cmFuc3Bvc2UsIHZhbHVlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5p
Zm9ybU1hdHJpeDNmdihsb25nIGxvY2F0aW9uLCBib29sIHRyYW5zcG9zZSwgZmxvYXQqIHZhbHVl
LCBpbnQgc2l6ZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbFVuaWZvcm1N
YXRyaXgzZnYobG9jYXRpb24sIHNpemUsIHRyYW5zcG9zZSwgdmFsdWUpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtTWF0cml4NGZ2KGxvbmcgbG9jYXRpb24sIGJvb2wgdHJh
bnNwb3NlLCBmbG9hdCogdmFsdWUsIGludCBzaXplKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOwotICAgIGdsVW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwgc2l6ZSwgdHJhbnNwb3NlLCB2
YWx1ZSk7Ci19Ci0KLUdMX1NBTUVfTUVUSE9EXzFfWChVc2VQcm9ncmFtLCB1c2VQcm9ncmFtLCBX
ZWJHTFByb2dyYW0qKQotCi1HTF9TQU1FX01FVEhPRF8xX1goVmFsaWRhdGVQcm9ncmFtLCB2YWxp
ZGF0ZVByb2dyYW0sIFdlYkdMUHJvZ3JhbSopCi0KLUdMX1NBTUVfTUVUSE9EXzIoVmVydGV4QXR0
cmliMWYsIHZlcnRleEF0dHJpYjFmLCB1bnNpZ25lZCBsb25nLCBmbG9hdCkKLQotdm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmliMWZ2KHVuc2lnbmVkIGxvbmcgaW5keCwgZmxvYXQq
IHZhbHVlcykKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbFZlcnRleEF0dHJp
YjFmdihpbmR4LCB2YWx1ZXMpOwotfQotCi1HTF9TQU1FX01FVEhPRF8zKFZlcnRleEF0dHJpYjJm
LCB2ZXJ0ZXhBdHRyaWIyZiwgdW5zaWduZWQgbG9uZywgZmxvYXQsIGZsb2F0KQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIyZnYodW5zaWduZWQgbG9uZyBpbmR4LCBmbG9h
dCogdmFsdWVzKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsVmVydGV4QXR0
cmliMmZ2KGluZHgsIHZhbHVlcyk7Ci19Ci0KLUdMX1NBTUVfTUVUSE9EXzQoVmVydGV4QXR0cmli
M2YsIHZlcnRleEF0dHJpYjNmLCB1bnNpZ25lZCBsb25nLCBmbG9hdCwgZmxvYXQsIGZsb2F0KQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIzZnYodW5zaWduZWQgbG9uZyBp
bmR4LCBmbG9hdCogdmFsdWVzKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGds
VmVydGV4QXR0cmliM2Z2KGluZHgsIHZhbHVlcyk7Ci19Ci0KLUdMX1NBTUVfTUVUSE9EXzUoVmVy
dGV4QXR0cmliNGYsIHZlcnRleEF0dHJpYjRmLCB1bnNpZ25lZCBsb25nLCBmbG9hdCwgZmxvYXQs
IGZsb2F0LCBmbG9hdCkKLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmliNGZ2
KHVuc2lnbmVkIGxvbmcgaW5keCwgZmxvYXQqIHZhbHVlcykKLXsKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKLSAgICBnbFZlcnRleEF0dHJpYjRmdihpbmR4LCB2YWx1ZXMpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWJQb2ludGVyKHVuc2lnbmVkIGxvbmcgaW5k
eCwgaW50IHNpemUsIGludCB0eXBlLCBib29sIG5vcm1hbGl6ZWQsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgc3RyaWRlLCB1bnNpZ25l
ZCBsb25nIG9mZnNldCkKLXsKLSAgICBtX2ludGVybmFsLT52ZXJ0ZXhBdHRyaWJQb2ludGVyKGlu
ZHgsIHNpemUsIHR5cGUsIG5vcm1hbGl6ZWQsIHN0cmlkZSwgb2Zmc2V0KTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6dmlld3BvcnQobG9uZyB4LCBsb25nIHksIHVuc2lnbmVkIGxvbmcg
d2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OwotICAgIG1faW50ZXJuYWwtPnZpZXdwb3J0SW1wbCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKLX0K
LQotfQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKDNEX0NBTlZB
UykKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViR3JhcGhpY3NDb250ZXh0M0QuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViR3JhcGhpY3NDb250ZXh0M0QuY3Bw
CShyZXZpc2lvbiAwKQorKysgV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJHcmFwaGljc0NvbnRleHQz
RC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICog
ICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0
cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiV2ViR3JhcGhpY3NDb250ZXh0M0QuaCIKKworI2lmIEVOQUJMRSgzRF9DQU5WQVMp
CisKKyNpbmNsdWRlICJXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsLmgiCisKK25hbWVz
cGFjZSBXZWJLaXQgeworCitXZWJHcmFwaGljc0NvbnRleHQzRCogV2ViR3JhcGhpY3NDb250ZXh0
M0Q6OmNyZWF0ZURlZmF1bHQoKQoreworI2lmIEVOQUJMRSgzRF9DQU5WQVMpCisgICAgcmV0dXJu
IG5ldyBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsKCk7CisjZWxzZQorICAgIHJldHVy
biAwOworI2VuZGlmCit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5B
QkxFKDNEX0NBTlZBUykKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViR3JhcGhpY3NDb250
ZXh0M0REZWZhdWx0SW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYktp
dC9jaHJvbWl1bS9zcmMvV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbC5jcHAJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMTE4NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisg
KiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJM
RSgzRF9DQU5WQVMpCisKKyNpbmNsdWRlICJXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBs
LmgiCisKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsK
KworLy8gVW5jb21tZW50IHRoaXMgdG8gcmVuZGVyIHRvIGEgc2VwYXJhdGUgd2luZG93IGZvciBk
ZWJ1Z2dpbmcKKy8vICNkZWZpbmUgUkVOREVSX1RPX0RFQlVHR0lOR19XSU5ET1cKKworI2lmIE9T
KERBUldJTikKKyNkZWZpbmUgVVNFX1RFWFRVUkVfUkVDVEFOR0xFX0ZPUl9GUkFNRUJVRkZFUgor
I2VuZGlmCisKK2Jvb2wgV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6c19pbml0aWFs
aXplZEdMRVcgPSBmYWxzZTsKKworI2lmIE9TKExJTlVYKQorV2ViR3JhcGhpY3NDb250ZXh0M0RE
ZWZhdWx0SW1wbDo6R0xDb25uZWN0aW9uKiBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBs
OjpzX2dsID0gMDsKKworV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6R0xDb25uZWN0
aW9uKiBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpHTENvbm5lY3Rpb246OmNyZWF0
ZSgpCit7CisgICAgRGlzcGxheSogZHB5ID0gWE9wZW5EaXNwbGF5KDApOworICAgIGlmICghZHB5
KSB7CisgICAgICAgIHByaW50ZigiR3JhcGhpY3NDb250ZXh0M0Q6IGVycm9yIG9wZW5pbmcgWCBk
aXNwbGF5XG4iKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgLy8gV2UgdXNlIFJU
TERfR0xPQkFMIHNlbWFudGljcyBzbyB0aGF0IEdMRVcgaW5pdGlhbGl6YXRpb24gd29ya3M7Cisg
ICAgLy8gR0xFVyBleHBlY3RzIHRvIGJlIGFibGUgdG8gb3BlbiB0aGUgY3VycmVudCBwcm9jZXNz
J3MgaGFuZGxlCisgICAgLy8gYW5kIGRvIGRsc3ltJ3Mgb2YgR0wgZW50cnkgcG9pbnRzIGZyb20g
dGhlcmUuCisgICAgdm9pZCogbGliR0wgPSBkbG9wZW4oImxpYkdMLnNvLjEiLCBSVExEX0xBWlkg
fCBSVExEX0dMT0JBTCk7CisgICAgaWYgKCFsaWJHTCkgeworICAgICAgICBYQ2xvc2VEaXNwbGF5
KGRweSk7CisgICAgICAgIHByaW50ZigiR3JhcGhpY3NDb250ZXh0M0Q6IGVycm9yIG9wZW5pbmcg
bGliR0wuc28uMTogJXNcbiIsIGRsZXJyb3IoKSk7CisgICAgICAgIHJldHVybiAwOworICAgIH0K
KworICAgIFBGTkdMWENIT09TRUZCQ09ORklHUFJPQyBjaG9vc2VGQkNvbmZpZyA9IChQRk5HTFhD
SE9PU0VGQkNPTkZJR1BST0MpIGRsc3ltKGxpYkdMLCAiZ2xYQ2hvb3NlRkJDb25maWciKTsKKyAg
ICBQRk5HTFhDUkVBVEVORVdDT05URVhUUFJPQyBjcmVhdGVOZXdDb250ZXh0ID0gKFBGTkdMWENS
RUFURU5FV0NPTlRFWFRQUk9DKSBkbHN5bShsaWJHTCwgImdsWENyZWF0ZU5ld0NvbnRleHQiKTsK
KyAgICBQRk5HTFhDUkVBVEVQQlVGRkVSUFJPQyBjcmVhdGVQYnVmZmVyID0gKFBGTkdMWENSRUFU
RVBCVUZGRVJQUk9DKSBkbHN5bShsaWJHTCwgImdsWENyZWF0ZVBidWZmZXIiKTsKKyAgICBQRk5H
TFhERVNUUk9ZUEJVRkZFUlBST0MgZGVzdHJveVBidWZmZXIgPSAoUEZOR0xYREVTVFJPWVBCVUZG
RVJQUk9DKSBkbHN5bShsaWJHTCwgImdsWERlc3Ryb3lQYnVmZmVyIik7CisgICAgUEZOR0xYTUFL
RUNVUlJFTlRQUk9DIG1ha2VDdXJyZW50ID0gKFBGTkdMWE1BS0VDVVJSRU5UUFJPQykgZGxzeW0o
bGliR0wsICJnbFhNYWtlQ3VycmVudCIpOworICAgIFBGTkdMWERFU1RST1lDT05URVhUUFJPQyBk
ZXN0cm95Q29udGV4dCA9IChQRk5HTFhERVNUUk9ZQ09OVEVYVFBST0MpIGRsc3ltKGxpYkdMLCAi
Z2xYRGVzdHJveUNvbnRleHQiKTsKKyAgICBQRk5HTFhHRVRDVVJSRU5UQ09OVEVYVFBST0MgZ2V0
Q3VycmVudENvbnRleHQgPSAoUEZOR0xYR0VUQ1VSUkVOVENPTlRFWFRQUk9DKSBkbHN5bShsaWJH
TCwgImdsWEdldEN1cnJlbnRDb250ZXh0Iik7CisgICAgaWYgKCFjaG9vc2VGQkNvbmZpZyB8fCAh
Y3JlYXRlTmV3Q29udGV4dCB8fCAhY3JlYXRlUGJ1ZmZlcgorICAgICAgICB8fCAhZGVzdHJveVBi
dWZmZXIgfHwgIW1ha2VDdXJyZW50IHx8ICFkZXN0cm95Q29udGV4dAorICAgICAgICB8fCAhZ2V0
Q3VycmVudENvbnRleHQpIHsKKyAgICAgICAgWENsb3NlRGlzcGxheShkcHkpOworICAgICAgICBk
bGNsb3NlKGxpYkdMKTsKKyAgICAgICAgcHJpbnRmKCJHcmFwaGljc0NvbnRleHQzRDogZXJyb3Ig
bG9va2luZyB1cCBib290c3RyYXBwaW5nIGVudHJ5IHBvaW50c1xuIik7CisgICAgICAgIHJldHVy
biAwOworICAgIH0KKyAgICByZXR1cm4gbmV3IEdMQ29ubmVjdGlvbihkcHksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbGliR0wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hv
b3NlRkJDb25maWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlTmV3Q29udGV4
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVQYnVmZmVyLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGRlc3Ryb3lQYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1ha2VDdXJyZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Ryb3lD
b250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldEN1cnJlbnRDb250ZXh0KTsK
K30KKworV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6R0xDb25uZWN0aW9uOjp+R0xD
b25uZWN0aW9uKCkKK3sKKyAgICBYQ2xvc2VEaXNwbGF5KG1fZGlzcGxheSk7CisgICAgZGxjbG9z
ZShtX2xpYkdMKTsKK30KKworI2VuZGlmIC8vIE9TKExJTlVYKQorCitXZWJHcmFwaGljc0NvbnRl
eHQzRERlZmF1bHRJbXBsOjpWZXJ0ZXhBdHRyaWJQb2ludGVyU3RhdGU6OlZlcnRleEF0dHJpYlBv
aW50ZXJTdGF0ZSgpCisgICAgOiBlbmFibGVkKGZhbHNlKQorICAgICwgYnVmZmVyKDApCisgICAg
LCBpbmR4KDApCisgICAgLCBzaXplKDApCisgICAgLCB0eXBlKDApCisgICAgLCBub3JtYWxpemVk
KGZhbHNlKQorICAgICwgc3RyaWRlKDApCisgICAgLCBvZmZzZXQoMCkKK3sKK30KKworV2ViR3Jh
cGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6V2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1w
bCgpCisgICAgOiBtX2luaXRpYWxpemVkKGZhbHNlKQorICAgICwgbV90ZXh0dXJlKDApCisgICAg
LCBtX2ZibygwKQorICAgICwgbV9kZXB0aEJ1ZmZlcigwKQorICAgICwgbV9ib3VuZEZCTygwKQor
I2lmZGVmIEZMSVBfRlJBTUVCVUZGRVJfVkVSVElDQUxMWQorICAgICwgbV9zY2FubGluZSgwKQor
I2VuZGlmCisgICAgLCBtX2JvdW5kQXJyYXlCdWZmZXIoMCkKKyNpZiBQTEFURk9STShTS0lBKQor
ICAgICwgbV9yZXNpemluZ0JpdG1hcCgwKQorI2VuZGlmCisjaWYgT1MoV0lORE9XUykKKyAgICAs
IG1fY2FudmFzV2luZG93KDApCisgICAgLCBtX2NhbnZhc0RDKDApCisgICAgLCBtX2NvbnRleHRP
YmooMCkKKyNlbGlmIFBMQVRGT1JNKENHKQorICAgICwgbV9wYnVmZmVyKDApCisgICAgLCBtX2Nv
bnRleHRPYmooMCkKKyAgICAsIG1fcmVuZGVyT3V0cHV0KDApCisjZWxpZiBPUyhMSU5VWCkKKyAg
ICAsIG1fY29udGV4dE9iaigwKQorICAgICwgbV9wYnVmZmVyKDApCisjZWxzZQorI2Vycm9yIE11
c3QgcG9ydCB0byB5b3VyIHBsYXRmb3JtCisjZW5kaWYKK3sKK30KKworV2ViR3JhcGhpY3NDb250
ZXh0M0REZWZhdWx0SW1wbDo6fldlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGwoKQorewor
ICAgIGlmIChtX2luaXRpYWxpemVkKSB7CisgICAgICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwor
I2lmbmRlZiBSRU5ERVJfVE9fREVCVUdHSU5HX1dJTkRPVworICAgICAgICBnbERlbGV0ZVJlbmRl
cmJ1ZmZlcnNFWFQoMSwgJm1fZGVwdGhCdWZmZXIpOworICAgICAgICBnbERlbGV0ZVRleHR1cmVz
KDEsICZtX3RleHR1cmUpOworI2lmZGVmIEZMSVBfRlJBTUVCVUZGRVJfVkVSVElDQUxMWQorICAg
ICAgICBpZiAobV9zY2FubGluZSkKKyAgICAgICAgICAgIGRlbGV0ZVtdIG1fc2NhbmxpbmU7Cisj
ZW5kaWYKKyAgICAgICAgZ2xEZWxldGVGcmFtZWJ1ZmZlcnNFWFQoMSwgJm1fZmJvKTsKKyNlbmRp
ZiAvLyAhUkVOREVSX1RPX0RFQlVHR0lOR19XSU5ET1cKKyNpZiBQTEFURk9STShTS0lBKQorICAg
ICAgICBpZiAobV9yZXNpemluZ0JpdG1hcCkKKyAgICAgICAgICAgIGRlbGV0ZSBtX3Jlc2l6aW5n
Qml0bWFwOworI2VuZGlmCisjaWYgT1MoV0lORE9XUykKKyAgICAgICAgd2dsTWFrZUN1cnJlbnQo
MCwgMCk7CisgICAgICAgIHdnbERlbGV0ZUNvbnRleHQobV9jb250ZXh0T2JqKTsKKyAgICAgICAg
UmVsZWFzZURDKG1fY2FudmFzV2luZG93LCBtX2NhbnZhc0RDKTsKKyAgICAgICAgRGVzdHJveVdp
bmRvdyhtX2NhbnZhc1dpbmRvdyk7CisjZWxpZiBQTEFURk9STShDRykKKyAgICAgICAgQ0dMU2V0
Q3VycmVudENvbnRleHQoMCk7CisgICAgICAgIENHTERlc3Ryb3lDb250ZXh0KG1fY29udGV4dE9i
aik7CisgICAgICAgIENHTERlc3Ryb3lQQnVmZmVyKG1fcGJ1ZmZlcik7CisgICAgICAgIGlmICht
X3JlbmRlck91dHB1dCkKKyAgICAgICAgICAgIGRlbGV0ZVtdIG1fcmVuZGVyT3V0cHV0OworI2Vs
aWYgT1MoTElOVVgpCisgICAgICAgIHNfZ2wtPm1ha2VDdXJyZW50KDAsIDApOworICAgICAgICBz
X2dsLT5kZXN0cm95Q29udGV4dChtX2NvbnRleHRPYmopOworICAgICAgICBzX2dsLT5kZXN0cm95
UGJ1ZmZlcihtX3BidWZmZXIpOworI2Vsc2UKKyNlcnJvciBNdXN0IHBvcnQgdG8geW91ciBwbGF0
Zm9ybQorI2VuZGlmCisgICAgICAgIG1fY29udGV4dE9iaiA9IDA7CisgICAgfQorfQorCitib29s
IFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OmluaXRpYWxpemUoV2ViR3JhcGhpY3ND
b250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cmlidXRlcykKK3sKKyAgICAvLyBGSVhNRTogd2UgbmVl
ZCB0byB0YWtlIGludG8gYWNjb3VudCB0aGUgdXNlcidzIHJlcXVlc3RlZAorICAgIC8vIGNvbnRl
eHQgY3JlYXRpb24gYXR0cmlidXRlcywgaW4gcGFydGljdWxhciBzdGVuY2lsIGFuZAorICAgIC8v
IGFudGlhbGlhcywgYW5kIGRldGVybWluZSB3aGljaCBjb3VsZCBhbmQgY291bGQgbm90IGJlIGhv
bm9yZWQKKyAgICAvLyBiYXNlZCBvbiB0aGUgY2FwYWJpbGl0aWVzIG9mIHRoZSBPcGVuR0wgaW1w
bGVtZW50YXRpb24uCisgICAgbV9hdHRyaWJ1dGVzLmFscGhhID0gdHJ1ZTsKKyAgICBtX2F0dHJp
YnV0ZXMuZGVwdGggPSB0cnVlOworICAgIG1fYXR0cmlidXRlcy5zdGVuY2lsID0gZmFsc2U7Cisg
ICAgbV9hdHRyaWJ1dGVzLmFudGlhbGlhcyA9IGZhbHNlOworICAgIG1fYXR0cmlidXRlcy5wcmVt
dWx0aXBsaWVkQWxwaGEgPSB0cnVlOworCisjaWYgT1MoV0lORE9XUykKKyAgICBXTkRDTEFTUyB3
YzsKKyAgICBpZiAoIUdldENsYXNzSW5mbyhHZXRNb2R1bGVIYW5kbGUoMCksIEwiQ0FOVkFTR0wi
LCAmd2MpKSB7CisgICAgICAgIFplcm9NZW1vcnkoJndjLCBzaXplb2YoV05EQ0xBU1MpKTsKKyAg
ICAgICAgd2Muc3R5bGUgPSBDU19PV05EQzsKKyAgICAgICAgd2MuaEluc3RhbmNlID0gR2V0TW9k
dWxlSGFuZGxlKDApOworICAgICAgICB3Yy5scGZuV25kUHJvYyA9IERlZldpbmRvd1Byb2M7Cisg
ICAgICAgIHdjLmxwc3pDbGFzc05hbWUgPSBMIkNBTlZBU0dMIjsKKworICAgICAgICBpZiAoIVJl
Z2lzdGVyQ2xhc3MoJndjKSkgeworICAgICAgICAgICAgcHJpbnRmKCJXZWJHcmFwaGljc0NvbnRl
eHQzRERlZmF1bHRJbXBsOiBSZWdpc3RlckNsYXNzIGZhaWxlZFxuIik7CisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBtX2NhbnZhc1dpbmRvdyA9IENy
ZWF0ZVdpbmRvdyhMIkNBTlZBU0dMIiwgTCJDQU5WQVNHTCIsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgV1NfQ0FQVElPTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBDV19VU0VERUZBVUxULCBDV19VU0VERUZBVUxULCBDV19VU0VERUZBVUxULAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIENXX1VTRURFRkFVTFQsIDAsIDAsIEdldE1vZHVs
ZUhhbmRsZSgwKSwgMCk7CisgICAgaWYgKCFtX2NhbnZhc1dpbmRvdykgeworICAgICAgICBwcmlu
dGYoIldlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6IENyZWF0ZVdpbmRvdyBmYWlsZWRc
biIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8gZ2V0IHRoZSBkZXZp
Y2UgY29udGV4dAorICAgIG1fY2FudmFzREMgPSBHZXREQyhtX2NhbnZhc1dpbmRvdyk7CisgICAg
aWYgKCFtX2NhbnZhc0RDKSB7CisgICAgICAgIHByaW50ZigiV2ViR3JhcGhpY3NDb250ZXh0M0RE
ZWZhdWx0SW1wbDogR2V0REMgZmFpbGVkXG4iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKworICAgIC8vIGZpbmQgZGVmYXVsdCBwaXhlbCBmb3JtYXQKKyAgICBQSVhFTEZPUk1BVERF
U0NSSVBUT1IgcGZkOworICAgIFplcm9NZW1vcnkoJnBmZCwgc2l6ZW9mKFBJWEVMRk9STUFUREVT
Q1JJUFRPUikpOworICAgIHBmZC5uU2l6ZSA9IHNpemVvZihQSVhFTEZPUk1BVERFU0NSSVBUT1Ip
OworICAgIHBmZC5uVmVyc2lvbiA9IDE7CisgICAgcGZkLmR3RmxhZ3MgPSBQRkRfRFJBV19UT19X
SU5ET1cgfCBQRkRfU1VQUE9SVF9PUEVOR0wKKyNpZmRlZiBSRU5ERVJfVE9fREVCVUdHSU5HX1dJ
TkRPVworICAgICAgICB8IFBGRF9ET1VCTEVCVUZGRVIKKyNlbmRpZiAvLyBSRU5ERVJfVE9fREVC
VUdHSU5HX1dJTkRPVworICAgICAgICA7CisgICAgaW50IHBpeGVsZm9ybWF0ID0gQ2hvb3NlUGl4
ZWxGb3JtYXQobV9jYW52YXNEQywgJnBmZCk7CisKKyAgICAvLyBzZXQgdGhlIHBpeGVsIGZvcm1h
dCBmb3IgdGhlIGRjCisgICAgaWYgKCFTZXRQaXhlbEZvcm1hdChtX2NhbnZhc0RDLCBwaXhlbGZv
cm1hdCwgJnBmZCkpIHsKKyAgICAgICAgcHJpbnRmKCJXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1
bHRJbXBsOiBTZXRQaXhlbEZvcm1hdCBmYWlsZWRcbiIpOworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorCisgICAgLy8gY3JlYXRlIHJlbmRlcmluZyBjb250ZXh0CisgICAgbV9jb250ZXh0
T2JqID0gd2dsQ3JlYXRlQ29udGV4dChtX2NhbnZhc0RDKTsKKyAgICBpZiAoIW1fY29udGV4dE9i
aikgeworICAgICAgICBwcmludGYoIldlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6IHdn
bENyZWF0ZUNvbnRleHQgZmFpbGVkXG4iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIGlmICghd2dsTWFrZUN1cnJlbnQobV9jYW52YXNEQywgbV9jb250ZXh0T2JqKSkgewor
ICAgICAgICBwcmludGYoIldlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6IHdnbE1ha2VD
dXJyZW50IGZhaWxlZFxuIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyNpZmRl
ZiBSRU5ERVJfVE9fREVCVUdHSU5HX1dJTkRPVworICAgIHR5cGVkZWYgQk9PTCAoV0lOQVBJICog
UEZOV0dMU1dBUElOVEVSVkFMRVhUUFJPQykgKGludCBpbnRlcnZhbCk7CisgICAgUEZOV0dMU1dB
UElOVEVSVkFMRVhUUFJPQyBzZXRTd2FwSW50ZXJ2YWwgPSAwOworICAgIHNldFN3YXBJbnRlcnZh
bCA9IChQRk5XR0xTV0FQSU5URVJWQUxFWFRQUk9DKSB3Z2xHZXRQcm9jQWRkcmVzcygid2dsU3dh
cEludGVydmFsRVhUIik7CisgICAgaWYgKHNldFN3YXBJbnRlcnZhbCkKKyAgICAgICAgc2V0U3dh
cEludGVydmFsKDEpOworI2VuZGlmIC8vIFJFTkRFUl9UT19ERUJVR0dJTkdfV0lORE9XCisKKyNl
bGlmIFBMQVRGT1JNKENHKQorICAgIC8vIENyZWF0ZSBhIDF4MSBwYnVmZmVyIGFuZCBhc3NvY2lh
dGVkIGNvbnRleHQgdG8gYm9vdHN0cmFwIHRoaW5ncworICAgIENHTFBpeGVsRm9ybWF0QXR0cmli
dXRlIGF0dHJpYnNbXSA9IHsKKyAgICAgICAgKENHTFBpeGVsRm9ybWF0QXR0cmlidXRlKSBrQ0dM
UEZBUEJ1ZmZlciwKKyAgICAgICAgKENHTFBpeGVsRm9ybWF0QXR0cmlidXRlKSAwCisgICAgfTsK
KyAgICBDR0xQaXhlbEZvcm1hdE9iaiBwaXhlbEZvcm1hdDsKKyAgICBHTGludCBudW1QaXhlbEZv
cm1hdHM7CisgICAgaWYgKENHTENob29zZVBpeGVsRm9ybWF0KGF0dHJpYnMsICZwaXhlbEZvcm1h
dCwgJm51bVBpeGVsRm9ybWF0cykgIT0ga0NHTE5vRXJyb3IpIHsKKyAgICAgICAgcHJpbnRmKCJX
ZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOiBlcnJvciBjaG9vc2luZyBwaXhlbCBmb3Jt
YXRcbiIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmICghcGl4ZWxGb3Jt
YXQpIHsKKyAgICAgICAgcHJpbnRmKCJXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOiBu
byBwaXhlbCBmb3JtYXQgc2VsZWN0ZWRcbiIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorICAgIENHTENvbnRleHRPYmogY29udGV4dDsKKyAgICBDR0xFcnJvciByZXMgPSBDR0xDcmVh
dGVDb250ZXh0KHBpeGVsRm9ybWF0LCAwLCAmY29udGV4dCk7CisgICAgQ0dMRGVzdHJveVBpeGVs
Rm9ybWF0KHBpeGVsRm9ybWF0KTsKKyAgICBpZiAocmVzICE9IGtDR0xOb0Vycm9yKSB7CisgICAg
ICAgIHByaW50ZigiV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDogZXJyb3IgY3JlYXRp
bmcgY29udGV4dFxuIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgQ0dMUEJ1
ZmZlck9iaiBwYnVmZmVyOworICAgIGlmIChDR0xDcmVhdGVQQnVmZmVyKDEsIDEsIEdMX1RFWFRV
UkVfMkQsIEdMX1JHQkEsIDAsICZwYnVmZmVyKSAhPSBrQ0dMTm9FcnJvcikgeworICAgICAgICBD
R0xEZXN0cm95Q29udGV4dChjb250ZXh0KTsKKyAgICAgICAgcHJpbnRmKCJXZWJHcmFwaGljc0Nv
bnRleHQzRERlZmF1bHRJbXBsOiBlcnJvciBjcmVhdGluZyBwYnVmZmVyXG4iKTsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBpZiAoQ0dMU2V0UEJ1ZmZlcihjb250ZXh0LCBwYnVm
ZmVyLCAwLCAwLCAwKSAhPSBrQ0dMTm9FcnJvcikgeworICAgICAgICBDR0xEZXN0cm95Q29udGV4
dChjb250ZXh0KTsKKyAgICAgICAgQ0dMRGVzdHJveVBCdWZmZXIocGJ1ZmZlcik7CisgICAgICAg
IHByaW50ZigiV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDogZXJyb3IgYXR0YWNoaW5n
IHBidWZmZXIgdG8gY29udGV4dFxuIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cisg
ICAgaWYgKENHTFNldEN1cnJlbnRDb250ZXh0KGNvbnRleHQpICE9IGtDR0xOb0Vycm9yKSB7Cisg
ICAgICAgIENHTERlc3Ryb3lDb250ZXh0KGNvbnRleHQpOworICAgICAgICBDR0xEZXN0cm95UEJ1
ZmZlcihwYnVmZmVyKTsKKyAgICAgICAgcHJpbnRmKCJXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1
bHRJbXBsOiBlcnJvciBtYWtpbmcgY29udGV4dCBjdXJyZW50XG4iKTsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKyAgICBtX3BidWZmZXIgPSBwYnVmZmVyOworICAgIG1fY29udGV4dE9i
aiA9IGNvbnRleHQ7CisjZWxpZiBPUyhMSU5VWCkKKyAgICBpZiAoIXNfZ2wpIHsKKyAgICAgICAg
c19nbCA9IEdMQ29ubmVjdGlvbjo6Y3JlYXRlKCk7CisgICAgICAgIGlmICghc19nbCkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpbnQgY29uZmlnQXR0cnNbXSA9IHsK
KyAgICAgICAgR0xYX0RSQVdBQkxFX1RZUEUsCisgICAgICAgIEdMWF9QQlVGRkVSX0JJVCwKKyAg
ICAgICAgR0xYX1JFTkRFUl9UWVBFLAorICAgICAgICBHTFhfUkdCQV9CSVQsCisgICAgICAgIEdM
WF9ET1VCTEVCVUZGRVIsCisgICAgICAgIDAsCisgICAgICAgIDAKKyAgICB9OworICAgIGludCBu
ZWxlbWVudHMgPSAwOworICAgIEdMWEZCQ29uZmlnKiBjb25maWcgPSBzX2dsLT5jaG9vc2VGQkNv
bmZpZygwLCBjb25maWdBdHRycywgJm5lbGVtZW50cyk7CisgICAgaWYgKCFjb25maWcpIHsKKyAg
ICAgICAgcHJpbnRmKCJXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOiBnbFhDaG9vc2VG
QkNvbmZpZyBmYWlsZWRcbiIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlm
ICghbmVsZW1lbnRzKSB7CisgICAgICAgIHByaW50ZigiV2ViR3JhcGhpY3NDb250ZXh0M0REZWZh
dWx0SW1wbDogZ2xYQ2hvb3NlRkJDb25maWcgcmV0dXJuZWQgMCBlbGVtZW50c1xuIik7CisgICAg
ICAgIFhGcmVlKGNvbmZpZyk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgR0xY
Q29udGV4dCBjb250ZXh0ID0gc19nbC0+Y3JlYXRlTmV3Q29udGV4dChjb25maWdbMF0sIEdMWF9S
R0JBX1RZUEUsIDAsIFRydWUpOworICAgIGlmICghY29udGV4dCkgeworICAgICAgICBwcmludGYo
IldlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6IGdsWENyZWF0ZU5ld0NvbnRleHQgZmFp
bGVkXG4iKTsKKyAgICAgICAgWEZyZWUoY29uZmlnKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKyAgICBpbnQgcGJ1ZmZlckF0dHJzW10gPSB7CisgICAgICAgIEdMWF9QQlVGRkVSX1dJ
RFRILAorICAgICAgICAxLAorICAgICAgICBHTFhfUEJVRkZFUl9IRUlHSFQsCisgICAgICAgIDEs
CisgICAgICAgIDAKKyAgICB9OworICAgIEdMWFBidWZmZXIgcGJ1ZmZlciA9IHNfZ2wtPmNyZWF0
ZVBidWZmZXIoY29uZmlnWzBdLCBwYnVmZmVyQXR0cnMpOworICAgIFhGcmVlKGNvbmZpZyk7Cisg
ICAgaWYgKCFwYnVmZmVyKSB7CisgICAgICAgIHByaW50ZigiV2ViR3JhcGhpY3NDb250ZXh0M0RE
ZWZhdWx0SW1wbDogZ2x4Q3JlYXRlUGJ1ZmZlciBmYWlsZWRcbiIpOworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorICAgIGlmICghc19nbC0+bWFrZUN1cnJlbnQocGJ1ZmZlciwgY29udGV4
dCkpIHsKKyAgICAgICAgcHJpbnRmKCJXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOiBn
bFhNYWtlQ3VycmVudCBmYWlsZWRcbiIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
ICAgIG1fY29udGV4dE9iaiA9IGNvbnRleHQ7CisgICAgbV9wYnVmZmVyID0gcGJ1ZmZlcjsKKyNl
bHNlCisjZXJyb3IgTXVzdCBwb3J0IHRvIHlvdXIgcGxhdGZvcm0KKyNlbmRpZgorCisgICAgaWYg
KCFzX2luaXRpYWxpemVkR0xFVykgeworICAgICAgICAvLyBJbml0aWFsaXplIEdMRVcgYW5kIGNo
ZWNrIGZvciBHTCAyLjAgc3VwcG9ydCBieSB0aGUgZHJpdmVycy4KKyAgICAgICAgR0xlbnVtIGds
ZXdJbml0UmVzdWx0ID0gZ2xld0luaXQoKTsKKyAgICAgICAgaWYgKGdsZXdJbml0UmVzdWx0ICE9
IEdMRVdfT0spIHsKKyAgICAgICAgICAgIHByaW50ZigiV2ViR3JhcGhpY3NDb250ZXh0M0REZWZh
dWx0SW1wbDogR0xFVyBpbml0aWFsaXphdGlvbiBmYWlsZWRcbiIpOworICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGlmICghZ2xld0lzU3VwcG9ydGVkKCJHTF9W
RVJTSU9OXzJfMCIpKSB7CisgICAgICAgICAgICBwcmludGYoIldlYkdyYXBoaWNzQ29udGV4dDNE
RGVmYXVsdEltcGw6IE9wZW5HTCAyLjAgbm90IHN1cHBvcnRlZFxuIik7CisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgc19pbml0aWFsaXplZEdMRVcgPSB0cnVl
OworICAgIH0KKworICAgIG1faW5pdGlhbGl6ZWQgPSB0cnVlOworICAgIHJldHVybiB0cnVlOwor
fQorCitib29sIFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6Om1ha2VDb250ZXh0Q3Vy
cmVudCgpCit7CisjaWYgT1MoV0lORE9XUykKKyAgICBpZiAod2dsR2V0Q3VycmVudENvbnRleHQo
KSAhPSBtX2NvbnRleHRPYmopCisgICAgICAgIGlmICh3Z2xNYWtlQ3VycmVudChtX2NhbnZhc0RD
LCBtX2NvbnRleHRPYmopKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisjZWxpZiBQTEFURk9S
TShDRykKKyAgICBpZiAoQ0dMR2V0Q3VycmVudENvbnRleHQoKSAhPSBtX2NvbnRleHRPYmopCisg
ICAgICAgIGlmIChDR0xTZXRDdXJyZW50Q29udGV4dChtX2NvbnRleHRPYmopID09IGtDR0xOb0Vy
cm9yKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisjZWxpZiBPUyhMSU5VWCkKKyAgICBpZiAo
c19nbC0+Z2V0Q3VycmVudENvbnRleHQoKSAhPSBtX2NvbnRleHRPYmopCisgICAgICAgIGlmIChz
X2dsLT5tYWtlQ3VycmVudChtX3BidWZmZXIsIG1fY29udGV4dE9iaikpCisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyNlbHNlCisjZXJyb3IgTXVzdCBwb3J0IHRvIHlvdXIgcGxhdGZvcm0KKyNl
bmRpZgorICAgIHJldHVybiBmYWxzZTsKK30KKworaW50IFdlYkdyYXBoaWNzQ29udGV4dDNERGVm
YXVsdEltcGw6OndpZHRoKCkgeworICAgIHJldHVybiBtX2NhY2hlZFdpZHRoOworfQorCitpbnQg
V2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6aGVpZ2h0KCkgeworICAgIHJldHVybiBt
X2NhY2hlZEhlaWdodDsKK30KKworaW50IFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6
OnNpemVJbkJ5dGVzKGludCB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2Ug
R0xfQllURToKKyAgICAgICAgcmV0dXJuIHNpemVvZihHTGJ5dGUpOworICAgIGNhc2UgR0xfVU5T
SUdORURfQllURToKKyAgICAgICAgcmV0dXJuIHNpemVvZihHTHVieXRlKTsKKyAgICBjYXNlIEdM
X1NIT1JUOgorICAgICAgICByZXR1cm4gc2l6ZW9mKEdMc2hvcnQpOworICAgIGNhc2UgR0xfVU5T
SUdORURfU0hPUlQ6CisgICAgICAgIHJldHVybiBzaXplb2YoR0x1c2hvcnQpOworICAgIGNhc2Ug
R0xfSU5UOgorICAgICAgICByZXR1cm4gc2l6ZW9mKEdMaW50KTsKKyAgICBjYXNlIEdMX1VOU0lH
TkVEX0lOVDoKKyAgICAgICAgcmV0dXJuIHNpemVvZihHTHVpbnQpOworICAgIGNhc2UgR0xfRkxP
QVQ6CisgICAgICAgIHJldHVybiBzaXplb2YoR0xmbG9hdCk7CisgICAgfQorICAgIHJldHVybiAw
OworfQorCitzdGF0aWMgaW50IGNyZWF0ZVRleHR1cmVPYmplY3QoR0xlbnVtIHRhcmdldCkKK3sK
KyAgICBHTHVpbnQgdGV4dHVyZSA9IDA7CisgICAgZ2xHZW5UZXh0dXJlcygxLCAmdGV4dHVyZSk7
CisgICAgZ2xCaW5kVGV4dHVyZSh0YXJnZXQsIHRleHR1cmUpOworICAgIGdsVGV4UGFyYW1ldGVy
Zih0YXJnZXQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTkVBUkVTVCk7CisgICAgZ2xUZXhQ
YXJhbWV0ZXJmKHRhcmdldCwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9ORUFSRVNUKTsKKyAg
ICByZXR1cm4gdGV4dHVyZTsKK30KKwordm9pZCBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJ
bXBsOjpyZXNoYXBlKGludCB3aWR0aCwgaW50IGhlaWdodCkKK3sKKyNpZmRlZiBSRU5ERVJfVE9f
REVCVUdHSU5HX1dJTkRPVworICAgIFNldFdpbmRvd1BvcyhtX2NhbnZhc1dpbmRvdywgSFdORF9U
T1AsIDAsIDAsIHdpZHRoLCBoZWlnaHQsCisgICAgICAgICAgICAgICAgIFNXUF9OT01PVkUpOwor
ICAgIFNob3dXaW5kb3cobV9jYW52YXNXaW5kb3csIFNXX1NIT1cpOworI2VuZGlmCisKKyAgICBt
X2NhY2hlZFdpZHRoID0gd2lkdGg7CisgICAgbV9jYWNoZWRIZWlnaHQgPSBoZWlnaHQ7CisgICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CisKKyNpZm5kZWYgUkVOREVSX1RPX0RFQlVHR0lOR19XSU5E
T1cKKyNpZmRlZiBVU0VfVEVYVFVSRV9SRUNUQU5HTEVfRk9SX0ZSQU1FQlVGRkVSCisgICAgLy8g
R0xfVEVYVFVSRV9SRUNUQU5HTEVfQVJCIGlzIHRoZSBiZXN0IHN1cHBvcnRlZCByZW5kZXIgdGFy
Z2V0IG9uIE1hYyBPUyBYCisgICAgR0xlbnVtIHRhcmdldCA9IEdMX1RFWFRVUkVfUkVDVEFOR0xF
X0FSQjsKKyNlbHNlCisgICAgR0xlbnVtIHRhcmdldCA9IEdMX1RFWFRVUkVfMkQ7CisjZW5kaWYK
KyAgICBpZiAoIW1fdGV4dHVyZSkgeworICAgICAgICAvLyBHZW5lcmF0ZSB0aGUgdGV4dHVyZSBv
YmplY3QKKyAgICAgICAgbV90ZXh0dXJlID0gY3JlYXRlVGV4dHVyZU9iamVjdCh0YXJnZXQpOwor
ICAgICAgICAvLyBHZW5lcmF0ZSB0aGUgZnJhbWVidWZmZXIgb2JqZWN0CisgICAgICAgIGdsR2Vu
RnJhbWVidWZmZXJzRVhUKDEsICZtX2Zibyk7CisgICAgICAgIC8vIEdlbmVyYXRlIHRoZSBkZXB0
aCBidWZmZXIKKyAgICAgICAgZ2xHZW5SZW5kZXJidWZmZXJzRVhUKDEsICZtX2RlcHRoQnVmZmVy
KTsKKyAgICB9CisKKyAgICAvLyBSZWFsbG9jYXRlIHRoZSBjb2xvciBhbmQgZGVwdGggYnVmZmVy
cworICAgIGdsQmluZFRleHR1cmUodGFyZ2V0LCBtX3RleHR1cmUpOworICAgIGdsVGV4SW1hZ2Uy
RCh0YXJnZXQsIDAsIEdMX1JHQkE4LCB3aWR0aCwgaGVpZ2h0LCAwLCBHTF9SR0JBLCBHTF9VTlNJ
R05FRF9CWVRFLCAwKTsKKyAgICBnbEJpbmRUZXh0dXJlKHRhcmdldCwgMCk7CisKKyAgICBnbEJp
bmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fZmJvKTsKKyAgICBtX2JvdW5k
RkJPID0gbV9mYm87CisgICAgZ2xCaW5kUmVuZGVyYnVmZmVyRVhUKEdMX1JFTkRFUkJVRkZFUl9F
WFQsIG1fZGVwdGhCdWZmZXIpOworICAgIGdsUmVuZGVyYnVmZmVyU3RvcmFnZUVYVChHTF9SRU5E
RVJCVUZGRVJfRVhULCBHTF9ERVBUSF9DT01QT05FTlQsIHdpZHRoLCBoZWlnaHQpOworICAgIGds
QmluZFJlbmRlcmJ1ZmZlckVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCAwKTsKKworICAgIGdsRnJh
bWVidWZmZXJUZXh0dXJlMkRFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBHTF9DT0xPUl9BVFRBQ0hN
RU5UMF9FWFQsIHRhcmdldCwgbV90ZXh0dXJlLCAwKTsKKyAgICBnbEZyYW1lYnVmZmVyUmVuZGVy
YnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgR0xfREVQVEhfQVRUQUNITUVOVF9FWFQsIEdM
X1JFTkRFUkJVRkZFUl9FWFQsIG1fZGVwdGhCdWZmZXIpOworICAgIEdMZW51bSBzdGF0dXMgPSBn
bENoZWNrRnJhbWVidWZmZXJTdGF0dXNFWFQoR0xfRlJBTUVCVUZGRVJfRVhUKTsKKyAgICBpZiAo
c3RhdHVzICE9IEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFX0VYVCkgeworICAgICAgICBwcmludGYo
IldlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6IGZyYW1lYnVmZmVyIHdhcyBpbmNvbXBs
ZXRlXG4iKTsKKworICAgICAgICAvLyBGSVhNRTogY2xlYW51cC4KKyAgICAgICAgbm90SW1wbGVt
ZW50ZWQoKTsKKyAgICB9CisjZW5kaWYgIC8vIFJFTkRFUl9UT19ERUJVR0dJTkdfV0lORE9XCisK
KyNpZmRlZiBGTElQX0ZSQU1FQlVGRkVSX1ZFUlRJQ0FMTFkKKyAgICBpZiAobV9zY2FubGluZSkg
eworICAgICAgICBkZWxldGVbXSBtX3NjYW5saW5lOworICAgICAgICBtX3NjYW5saW5lID0gMDsK
KyAgICB9CisgICAgbV9zY2FubGluZSA9IG5ldyB1bnNpZ25lZCBjaGFyW3dpZHRoICogNF07Cisj
ZW5kaWYgIC8vIEZMSVBfRlJBTUVCVUZGRVJfVkVSVElDQUxMWQorCisgICAgZ2xDbGVhcihHTF9D
T0xPUl9CVUZGRVJfQklUKTsKKworfQorCisjaWZkZWYgRkxJUF9GUkFNRUJVRkZFUl9WRVJUSUNB
TExZCit2b2lkIFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OmZsaXBWZXJ0aWNhbGx5
KHVuc2lnbmVkIGNoYXIqIGZyYW1lYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgd2lkdGgsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBo
ZWlnaHQpCit7CisgICAgdW5zaWduZWQgY2hhciogc2NhbmxpbmUgPSBtX3NjYW5saW5lOworICAg
IGlmICghc2NhbmxpbmUpCisgICAgICAgIHJldHVybjsKKyAgICB1bnNpZ25lZCBpbnQgcm93Qnl0
ZXMgPSB3aWR0aCAqIDQ7CisgICAgdW5zaWduZWQgaW50IGNvdW50ID0gaGVpZ2h0IC8gMjsKKyAg
ICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKyAgICAgICAgdW5z
aWduZWQgY2hhciogcm93QSA9IGZyYW1lYnVmZmVyICsgaSAqIHJvd0J5dGVzOworICAgICAgICB1
bnNpZ25lZCBjaGFyKiByb3dCID0gZnJhbWVidWZmZXIgKyAoaGVpZ2h0IC0gaSAtIDEpICogcm93
Qnl0ZXM7CisgICAgICAgIC8vIEZJWE1FOiB0aGlzIGlzIHdoZXJlIHRoZSBtdWx0aXBsaWNhdGlv
biBvZiB0aGUgYWxwaGEKKyAgICAgICAgLy8gY2hhbm5lbCBpbnRvIHRoZSBjb2xvciBidWZmZXIg
d2lsbCBuZWVkIHRvIG9jY3VyIGlmIHRoZQorICAgICAgICAvLyB1c2VyIHNwZWNpZmllcyB0aGUg
InByZW11bHRpcGx5QWxwaGEiIGZsYWcgaW4gdGhlIGNvbnRleHQKKyAgICAgICAgLy8gY3JlYXRp
b24gYXR0cmlidXRlcy4KKyAgICAgICAgbWVtY3B5KHNjYW5saW5lLCByb3dCLCByb3dCeXRlcyk7
CisgICAgICAgIG1lbWNweShyb3dCLCByb3dBLCByb3dCeXRlcyk7CisgICAgICAgIG1lbWNweShy
b3dBLCBzY2FubGluZSwgcm93Qnl0ZXMpOworICAgIH0KK30KKyNlbmRpZgorCit2b2lkIFdlYkdy
YXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OnJlYWRCYWNrRnJhbWVidWZmZXIodW5zaWduZWQg
Y2hhciogcGl4ZWxzKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworCisjaWZkZWYgUkVO
REVSX1RPX0RFQlVHR0lOR19XSU5ET1cKKyAgICBTd2FwQnVmZmVycyhtX2NhbnZhc0RDKTsKKyNl
bHNlCisgICAgLy8gRWFybGllciB2ZXJzaW9ucyBvZiB0aGlzIGNvZGUgdXNlZCB0aGUgR1BVIHRv
IGZsaXAgdGhlCisgICAgLy8gZnJhbWVidWZmZXIgdmVydGljYWxseSBiZWZvcmUgcmVhZGluZyBp
dCBiYWNrIGZvciBjb21wb3NpdGluZworICAgIC8vIHZpYSBzb2Z0d2FyZS4gVGhpcyBjb2RlIHdh
cyBxdWl0ZSBjb21wbGljYXRlZCwgdXNlZCBhIGxvdCBvZgorICAgIC8vIEdQVSBtZW1vcnksIGFu
ZCBkaWRuJ3QgcHJvdmlkZSBhbiBvYnZpb3VzIHNwZWVkdXAuIFNpbmNlIHRoaXMKKyAgICAvLyB2
ZXJ0aWNhbCBmbGlwIGlzIG9ubHkgYSB0ZW1wb3Jhcnkgc29sdXRpb24gYW55d2F5IHVudGlsIENo
cm9tZQorICAgIC8vIGlzIGZ1bGx5IEdQVSBjb21wb3NpdGVkLCBpdCB3YXNuJ3Qgd29ydGggdGhl
IGNvbXBsZXhpdHkuCisKKyAgICBib29sIG11c3RSZXN0b3JlRkJPID0gKG1fYm91bmRGQk8gIT0g
bV9mYm8pOworICAgIGlmIChtdXN0UmVzdG9yZUZCTykKKyAgICAgICAgZ2xCaW5kRnJhbWVidWZm
ZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX2Zibyk7CisjaWYgUExBVEZPUk0oU0tJQSkKKyAg
ICBnbFJlYWRQaXhlbHMoMCwgMCwgbV9jYWNoZWRXaWR0aCwgbV9jYWNoZWRIZWlnaHQsIEdMX0JH
UkEsIEdMX1VOU0lHTkVEX0JZVEUsIHBpeGVscyk7CisjZWxpZiBQTEFURk9STShDRykKKyAgICBn
bFJlYWRQaXhlbHMoMCwgMCwgbV9jYWNoZWRXaWR0aCwgbV9jYWNoZWRIZWlnaHQsIEdMX0JHUkEs
IEdMX1VOU0lHTkVEX0lOVF84XzhfOF84X1JFViwgcGl4ZWxzKTsKKyNlbHNlCisjZXJyb3IgTXVz
dCBwb3J0IHRvIHlvdXIgcGxhdGZvcm0KKyNlbmRpZgorCisgICAgaWYgKG11c3RSZXN0b3JlRkJP
KQorICAgICAgICBnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fYm91
bmRGQk8pOworCisjaWZkZWYgRkxJUF9GUkFNRUJVRkZFUl9WRVJUSUNBTExZCisgICAgaWYgKHBp
eGVscykKKyAgICAgICAgZmxpcFZlcnRpY2FsbHkocGl4ZWxzLCBtX2NhY2hlZFdpZHRoLCBtX2Nh
Y2hlZEhlaWdodCk7CisjZW5kaWYKKworI2VuZGlmICAvLyBSRU5ERVJfVE9fREVCVUdHSU5HX1dJ
TkRPVworfQorCisvLyBIZWxwZXIgbWFjcm9zIHRvIHJlZHVjZSB0aGUgYW1vdW50IG9mIGNvZGUu
CisKKyNkZWZpbmUgREVMRUdBVEVfVE9fR0wobmFtZSwgZ2xuYW1lKSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCit2b2lkIFdlYkdyYXBoaWNzQ29udGV4dDNERGVm
YXVsdEltcGw6Om5hbWUoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAoreyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZ2wjI2ds
bmFtZSgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAorfQorCisjZGVmaW5lIERFTEVHQVRFX1RPX0dMXzEobmFtZSwgZ2xuYW1l
LCB0MSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAordm9pZCBXZWJHcmFw
aGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpuYW1lKHQxIGExKSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAorICAgIGdsIyNnbG5hbWUoYTEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30KKworI2RlZmluZSBERUxFR0FURV9UT19H
TF8xUihuYW1lLCBnbG5hbWUsIHQxLCBydCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKK3J0IFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6Om5hbWUodDEgYTEpICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKyAgICByZXR1cm4gZ2wjI2dsbmFtZShhMSk7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9CisKKyNkZWZp
bmUgREVMRUdBVEVfVE9fR0xfMihuYW1lLCBnbG5hbWUsIHQxLCB0MikgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCit2b2lkIFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6
Om5hbWUodDEgYTEsIHQyIGEyKSAgICAgICAgICAgICAgICAgICAgICAgXAoreyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZ2wjI2dsbmFtZShhMSwg
YTIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAorfQorCisjZGVmaW5lIERFTEVHQVRFX1RPX0dMXzJSKG5hbWUsIGdsbmFtZSwgdDEsIHQy
LCBydCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorcnQgV2ViR3JhcGhpY3NDb250ZXh0
M0REZWZhdWx0SW1wbDo6bmFtZSh0MSBhMSwgdDIgYTIpICAgICAgICAgICAgICAgICAgICAgICAg
IFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg
IHJldHVybiBnbCMjZ2xuYW1lKGExLCBhMik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKK30KKworI2RlZmluZSBERUxFR0FURV9UT19HTF8zKG5hbWUs
IGdsbmFtZSwgdDEsIHQyLCB0MykgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK3ZvaWQg
V2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6bmFtZSh0MSBhMSwgdDIgYTIsIHQzIGEz
KSAgICAgICAgICAgICAgICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKKyAgICBnbCMjZ2xuYW1lKGExLCBhMiwgYTMpOyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9CisKKyNkZWZpbmUgREVMRUdB
VEVfVE9fR0xfNChuYW1lLCBnbG5hbWUsIHQxLCB0MiwgdDMsIHQ0KSAgICAgICAgICAgICAgICAg
ICAgICAgICBcCit2b2lkIFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6Om5hbWUodDEg
YTEsIHQyIGEyLCB0MyBhMywgdDQgYTQpICAgICAgICAgXAoreyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZ2wjI2dsbmFtZShhMSwgYTIsIGEzLCBh
NCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfQor
CisjZGVmaW5lIERFTEVHQVRFX1RPX0dMXzUobmFtZSwgZ2xuYW1lLCB0MSwgdDIsIHQzLCB0NCwg
dDUpICAgICAgICAgICAgICAgICAgICAgXAordm9pZCBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1
bHRJbXBsOjpuYW1lKHQxIGExLCB0MiBhMiwgdDMgYTMsIHQ0IGE0LCB0NSBhNSkgIFwKK3sgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGdsIyNnbG5h
bWUoYTEsIGEyLCBhMywgYTQsIGE1KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKK30KKworI2RlZmluZSBERUxFR0FURV9UT19HTF82KG5hbWUsIGdsbmFtZSwg
dDEsIHQyLCB0MywgdDQsIHQ1LCB0NikgICAgICAgICAgICAgICAgIFwKK3ZvaWQgV2ViR3JhcGhp
Y3NDb250ZXh0M0REZWZhdWx0SW1wbDo6bmFtZSh0MSBhMSwgdDIgYTIsIHQzIGEzLCB0NCBhNCwg
dDUgYTUsIHQ2IGE2KSBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKKyAgICBnbCMjZ2xuYW1lKGExLCBhMiwgYTMsIGE0LCBhNSwgYTYpOyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9CisKKyNkZWZpbmUgREVMRUdBVEVf
VE9fR0xfNyhuYW1lLCBnbG5hbWUsIHQxLCB0MiwgdDMsIHQ0LCB0NSwgdDYsIHQ3KSAgICAgICAg
ICAgICBcCit2b2lkIFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6Om5hbWUodDEgYTEs
IHQyIGEyLCB0MyBhMywgdDQgYTQsIHQ1IGE1LCB0NiBhNiwgdDcgYTcpIFwKK3sgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGdsIyNnbG5hbWUoYTEs
IGEyLCBhMywgYTQsIGE1LCBhNiwgYTcpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKK30KKworI2RlZmluZSBERUxFR0FURV9UT19HTF84KG5hbWUsIGdsbmFtZSwgdDEsIHQy
LCB0MywgdDQsIHQ1LCB0NiwgdDcsIHQ4KSAgICAgICAgIFwKK3ZvaWQgV2ViR3JhcGhpY3NDb250
ZXh0M0REZWZhdWx0SW1wbDo6bmFtZSh0MSBhMSwgdDIgYTIsIHQzIGEzLCB0NCBhNCwgdDUgYTUs
IHQ2IGE2LCB0NyBhNywgdDggYTgpIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgIGdsIyNnbG5hbWUoYTEsIGEyLCBhMywgYTQsIGE1LCBhNiwg
YTcsIGE4KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30KKworI2RlZmluZSBE
RUxFR0FURV9UT19HTF85KG5hbWUsIGdsbmFtZSwgdDEsIHQyLCB0MywgdDQsIHQ1LCB0NiwgdDcs
IHQ4LCB0OSkgICAgIFwKK3ZvaWQgV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6bmFt
ZSh0MSBhMSwgdDIgYTIsIHQzIGEzLCB0NCBhNCwgdDUgYTUsIHQ2IGE2LCB0NyBhNywgdDggYTgs
IHQ5IGE5KSBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKKyAgICBnbCMjZ2xuYW1lKGExLCBhMiwgYTMsIGE0LCBhNSwgYTYsIGE3LCBhOCwgYTkpOyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9CisKK3ZvaWQgV2ViR3JhcGhpY3NDb250ZXh0
M0REZWZhdWx0SW1wbDo6YWN0aXZlVGV4dHVyZSh1bnNpZ25lZCBsb25nIHRleHR1cmUpCit7Cisg
ICAgLy8gRklYTUU6IHF1ZXJ5IG51bWJlciBvZiB0ZXh0dXJlcyBhdmFpbGFibGUuCisgICAgaWYg
KHRleHR1cmUgPCBHTF9URVhUVVJFMCB8fCB0ZXh0dXJlID4gR0xfVEVYVFVSRTArMzIpCisgICAg
ICAgIC8vIEZJWE1FOiByYWlzZSBleGNlcHRpb24uCisgICAgICAgIHJldHVybjsKKworICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOworICAgIGdsQWN0aXZlVGV4dHVyZSh0ZXh0dXJlKTsKK30KKwor
REVMRUdBVEVfVE9fR0xfMihhdHRhY2hTaGFkZXIsIEF0dGFjaFNoYWRlciwgV2ViR0xJZCwgV2Vi
R0xJZCkKKworREVMRUdBVEVfVE9fR0xfMyhiaW5kQXR0cmliTG9jYXRpb24sIEJpbmRBdHRyaWJM
b2NhdGlvbiwgV2ViR0xJZCwgdW5zaWduZWQgbG9uZywgY29uc3QgY2hhciopCisKK3ZvaWQgV2Vi
R3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6YmluZEJ1ZmZlcih1bnNpZ25lZCBsb25nIHRh
cmdldCwgV2ViR0xJZCBidWZmZXIpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAg
aWYgKHRhcmdldCA9PSBHTF9BUlJBWV9CVUZGRVIpCisgICAgICAgIG1fYm91bmRBcnJheUJ1ZmZl
ciA9IGJ1ZmZlcjsKKyAgICBnbEJpbmRCdWZmZXIodGFyZ2V0LCBidWZmZXIpOworfQorCit2b2lk
IFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OmJpbmRGcmFtZWJ1ZmZlcih1bnNpZ25l
ZCBsb25nIHRhcmdldCwgV2ViR0xJZCBmcmFtZWJ1ZmZlcikKK3sKKyAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICBpZiAoIWZyYW1lYnVmZmVyKQorICAgICAgICBmcmFtZWJ1ZmZlciA9IG1f
ZmJvOworICAgIGdsQmluZEZyYW1lYnVmZmVyRVhUKHRhcmdldCwgZnJhbWVidWZmZXIpOworICAg
IG1fYm91bmRGQk8gPSBmcmFtZWJ1ZmZlcjsKK30KKworREVMRUdBVEVfVE9fR0xfMihiaW5kUmVu
ZGVyYnVmZmVyLCBCaW5kUmVuZGVyYnVmZmVyRVhULCB1bnNpZ25lZCBsb25nLCBXZWJHTElkKQor
CitERUxFR0FURV9UT19HTF8yKGJpbmRUZXh0dXJlLCBCaW5kVGV4dHVyZSwgdW5zaWduZWQgbG9u
ZywgV2ViR0xJZCkKKworREVMRUdBVEVfVE9fR0xfNChibGVuZENvbG9yLCBCbGVuZENvbG9yLCBk
b3VibGUsIGRvdWJsZSwgZG91YmxlLCBkb3VibGUpCisKK0RFTEVHQVRFX1RPX0dMXzEoYmxlbmRF
cXVhdGlvbiwgQmxlbmRFcXVhdGlvbiwgdW5zaWduZWQgbG9uZykKKworREVMRUdBVEVfVE9fR0xf
MihibGVuZEVxdWF0aW9uU2VwYXJhdGUsIEJsZW5kRXF1YXRpb25TZXBhcmF0ZSwgdW5zaWduZWQg
bG9uZywgdW5zaWduZWQgbG9uZykKKworREVMRUdBVEVfVE9fR0xfMihibGVuZEZ1bmMsIEJsZW5k
RnVuYywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZykKKworREVMRUdBVEVfVE9fR0xfNChi
bGVuZEZ1bmNTZXBhcmF0ZSwgQmxlbmRGdW5jU2VwYXJhdGUsIHVuc2lnbmVkIGxvbmcsIHVuc2ln
bmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpCisKK0RFTEVHQVRFX1RPX0dM
XzQoYnVmZmVyRGF0YSwgQnVmZmVyRGF0YSwgdW5zaWduZWQgbG9uZywgaW50LCBjb25zdCB2b2lk
KiwgdW5zaWduZWQgbG9uZykKKworREVMRUdBVEVfVE9fR0xfNChidWZmZXJTdWJEYXRhLCBCdWZm
ZXJTdWJEYXRhLCB1bnNpZ25lZCBsb25nLCBsb25nLCBpbnQsIGNvbnN0IHZvaWQqKQorCitERUxF
R0FURV9UT19HTF8xUihjaGVja0ZyYW1lYnVmZmVyU3RhdHVzLCBDaGVja0ZyYW1lYnVmZmVyU3Rh
dHVzRVhULCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKQorCitERUxFR0FURV9UT19HTF8x
KGNsZWFyLCBDbGVhciwgdW5zaWduZWQgbG9uZykKKworREVMRUdBVEVfVE9fR0xfNChjbGVhckNv
bG9yLCBDbGVhckNvbG9yLCBkb3VibGUsIGRvdWJsZSwgZG91YmxlLCBkb3VibGUpCisKK0RFTEVH
QVRFX1RPX0dMXzEoY2xlYXJEZXB0aCwgQ2xlYXJEZXB0aCwgZG91YmxlKQorCitERUxFR0FURV9U
T19HTF8xKGNsZWFyU3RlbmNpbCwgQ2xlYXJTdGVuY2lsLCBsb25nKQorCitERUxFR0FURV9UT19H
TF80KGNvbG9yTWFzaywgQ29sb3JNYXNrLCBib29sLCBib29sLCBib29sLCBib29sKQorCitERUxF
R0FURV9UT19HTF8xKGNvbXBpbGVTaGFkZXIsIENvbXBpbGVTaGFkZXIsIFdlYkdMSWQpCisKK0RF
TEVHQVRFX1RPX0dMXzgoY29weVRleEltYWdlMkQsIENvcHlUZXhJbWFnZTJELCB1bnNpZ25lZCBs
b25nLCBsb25nLCB1bnNpZ25lZCBsb25nLCBsb25nLCBsb25nLCB1bnNpZ25lZCBsb25nLCB1bnNp
Z25lZCBsb25nLCBsb25nKQorCitERUxFR0FURV9UT19HTF84KGNvcHlUZXhTdWJJbWFnZTJELCBD
b3B5VGV4U3ViSW1hZ2UyRCwgdW5zaWduZWQgbG9uZywgbG9uZywgbG9uZywgbG9uZywgbG9uZywg
bG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZykKKworREVMRUdBVEVfVE9fR0xfMShj
dWxsRmFjZSwgQ3VsbEZhY2UsIHVuc2lnbmVkIGxvbmcpCisKK0RFTEVHQVRFX1RPX0dMXzEoZGVw
dGhGdW5jLCBEZXB0aEZ1bmMsIHVuc2lnbmVkIGxvbmcpCisKK0RFTEVHQVRFX1RPX0dMXzEoZGVw
dGhNYXNrLCBEZXB0aE1hc2ssIGJvb2wpCisKK0RFTEVHQVRFX1RPX0dMXzIoZGVwdGhSYW5nZSwg
RGVwdGhSYW5nZSwgZG91YmxlLCBkb3VibGUpCisKK0RFTEVHQVRFX1RPX0dMXzIoZGV0YWNoU2hh
ZGVyLCBEZXRhY2hTaGFkZXIsIFdlYkdMSWQsIFdlYkdMSWQpCisKK0RFTEVHQVRFX1RPX0dMXzEo
ZGlzYWJsZSwgRGlzYWJsZSwgdW5zaWduZWQgbG9uZykKKwordm9pZCBXZWJHcmFwaGljc0NvbnRl
eHQzRERlZmF1bHRJbXBsOjpkaXNhYmxlVmVydGV4QXR0cmliQXJyYXkodW5zaWduZWQgbG9uZyBp
bmRleCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoaW5kZXggPCBOdW1U
cmFja2VkUG9pbnRlclN0YXRlcykKKyAgICAgICAgbV92ZXJ0ZXhBdHRyaWJQb2ludGVyU3RhdGVb
aW5kZXhdLmVuYWJsZWQgPSBmYWxzZTsKKyAgICBnbERpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShp
bmRleCk7Cit9CisKK0RFTEVHQVRFX1RPX0dMXzMoZHJhd0FycmF5cywgRHJhd0FycmF5cywgdW5z
aWduZWQgbG9uZywgbG9uZywgbG9uZykKKwordm9pZCBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1
bHRJbXBsOjpkcmF3RWxlbWVudHModW5zaWduZWQgbG9uZyBtb2RlLCB1bnNpZ25lZCBsb25nIGNv
dW50LCB1bnNpZ25lZCBsb25nIHR5cGUsIGxvbmcgb2Zmc2V0KQoreworICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOworICAgIGdsRHJhd0VsZW1lbnRzKG1vZGUsIGNvdW50LCB0eXBlLAorICAgICAg
ICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHN0YXRpY19jYXN0PGludHB0cl90
PihvZmZzZXQpKSk7Cit9CisKK0RFTEVHQVRFX1RPX0dMXzEoZW5hYmxlLCBFbmFibGUsIHVuc2ln
bmVkIGxvbmcpCisKK3ZvaWQgV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6ZW5hYmxl
VmVydGV4QXR0cmliQXJyYXkodW5zaWduZWQgbG9uZyBpbmRleCkKK3sKKyAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICBpZiAoaW5kZXggPCBOdW1UcmFja2VkUG9pbnRlclN0YXRlcykKKyAg
ICAgICAgbV92ZXJ0ZXhBdHRyaWJQb2ludGVyU3RhdGVbaW5kZXhdLmVuYWJsZWQgPSB0cnVlOwor
ICAgIGdsRW5hYmxlVmVydGV4QXR0cmliQXJyYXkoaW5kZXgpOworfQorCitERUxFR0FURV9UT19H
TChmaW5pc2gsIEZpbmlzaCkKKworREVMRUdBVEVfVE9fR0woZmx1c2gsIEZsdXNoKQorCitERUxF
R0FURV9UT19HTF80KGZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyLCBGcmFtZWJ1ZmZlclJlbmRlcmJ1
ZmZlckVYVCwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgV2Vi
R0xJZCkKKworREVMRUdBVEVfVE9fR0xfNShmcmFtZWJ1ZmZlclRleHR1cmUyRCwgRnJhbWVidWZm
ZXJUZXh0dXJlMkRFWFQsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxv
bmcsIFdlYkdMSWQsIGxvbmcpCisKK0RFTEVHQVRFX1RPX0dMXzEoZnJvbnRGYWNlLCBGcm9udEZh
Y2UsIHVuc2lnbmVkIGxvbmcpCisKK3ZvaWQgV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1w
bDo6Z2VuZXJhdGVNaXBtYXAodW5zaWduZWQgbG9uZyB0YXJnZXQpCit7CisgICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CisgICAgaWYgKGdsR2VuZXJhdGVNaXBtYXBFWFQpCisgICAgICAgIGdsR2Vu
ZXJhdGVNaXBtYXBFWFQodGFyZ2V0KTsKKyAgICAvLyBGSVhNRTogcHJvdmlkZSBhbHRlcm5hdGl2
ZSBjb2RlIHBhdGg/IFRoaXMgd2lsbCBiZSB1bnBsZWFzYW50CisgICAgLy8gdG8gaW1wbGVtZW50
IGlmIGdsR2VuZXJhdGVNaXBtYXBFWFQgaXMgbm90IGF2YWlsYWJsZSAtLSBpdCB3aWxsCisgICAg
Ly8gcmVxdWlyZSBhIHRleHR1cmUgcmVhZGJhY2sgYW5kIHJlLXVwbG9hZC4KK30KKworYm9vbCBX
ZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpnZXRBY3RpdmVBdHRyaWIoV2ViR0xJZCBw
cm9ncmFtLCB1bnNpZ25lZCBsb25nIGluZGV4LCBBY3RpdmVJbmZvJiBpbmZvKQoreworICAgIGlm
ICghcHJvZ3JhbSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHTF9JTlZBTElEX1ZBTFVF
KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBHTGludCBtYXhOYW1lTGVuZ3Ro
ID0gLTE7CisgICAgZ2xHZXRQcm9ncmFtaXYocHJvZ3JhbSwgR0xfQUNUSVZFX0FUVFJJQlVURV9N
QVhfTEVOR1RILCAmbWF4TmFtZUxlbmd0aCk7CisgICAgaWYgKG1heE5hbWVMZW5ndGggPCAwKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgR0xjaGFyKiBuYW1lID0gMDsKKyAgICBpZiAoIXRy
eUZhc3RNYWxsb2MobWF4TmFtZUxlbmd0aCAqIHNpemVvZihHTGNoYXIpKS5nZXRWYWx1ZShuYW1l
KSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBHTHNpemVpIGxlbmd0aCA9IDA7CisgICAgR0xp
bnQgc2l6ZSA9IC0xOworICAgIEdMZW51bSB0eXBlID0gMDsKKyAgICBnbEdldEFjdGl2ZUF0dHJp
Yihwcm9ncmFtLCBpbmRleCwgbWF4TmFtZUxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAm
bGVuZ3RoLCAmc2l6ZSwgJnR5cGUsIG5hbWUpOworICAgIGlmIChzaXplIDwgMCkgeworICAgICAg
ICBmYXN0RnJlZShuYW1lKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBpbmZv
Lm5hbWUgPSBXZWJTdHJpbmc6OmZyb21VVEY4KG5hbWUsIGxlbmd0aCk7CisgICAgaW5mby50eXBl
ID0gdHlwZTsKKyAgICBpbmZvLnNpemUgPSBzaXplOworICAgIGZhc3RGcmVlKG5hbWUpOworICAg
IHJldHVybiB0cnVlOworfQorCitib29sIFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6
OmdldEFjdGl2ZVVuaWZvcm0oV2ViR0xJZCBwcm9ncmFtLCB1bnNpZ25lZCBsb25nIGluZGV4LCBB
Y3RpdmVJbmZvJiBpbmZvKQoreworICAgIEdMaW50IG1heE5hbWVMZW5ndGggPSAtMTsKKyAgICBn
bEdldFByb2dyYW1pdihwcm9ncmFtLCBHTF9BQ1RJVkVfVU5JRk9STV9NQVhfTEVOR1RILCAmbWF4
TmFtZUxlbmd0aCk7CisgICAgaWYgKG1heE5hbWVMZW5ndGggPCAwKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgR0xjaGFyKiBuYW1lID0gMDsKKyAgICBpZiAoIXRyeUZhc3RNYWxsb2MobWF4
TmFtZUxlbmd0aCAqIHNpemVvZihHTGNoYXIpKS5nZXRWYWx1ZShuYW1lKSkgeworICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKyAgICBHTHNpemVpIGxlbmd0aCA9IDA7CisgICAgR0xpbnQgc2l6ZSA9IC0xOwor
ICAgIEdMZW51bSB0eXBlID0gMDsKKyAgICBnbEdldEFjdGl2ZVVuaWZvcm0ocHJvZ3JhbSwgaW5k
ZXgsIG1heE5hbWVMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICZsZW5ndGgsICZzaXpl
LCAmdHlwZSwgbmFtZSk7CisgICAgaWYgKHNpemUgPCAwKSB7CisgICAgICAgIGZhc3RGcmVlKG5h
bWUpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGluZm8ubmFtZSA9IFdlYlN0
cmluZzo6ZnJvbVVURjgobmFtZSwgbGVuZ3RoKTsKKyAgICBpbmZvLnR5cGUgPSB0eXBlOworICAg
IGluZm8uc2l6ZSA9IHNpemU7CisgICAgZmFzdEZyZWUobmFtZSk7CisgICAgcmV0dXJuIHRydWU7
Cit9CisKK0RFTEVHQVRFX1RPX0dMXzJSKGdldEF0dHJpYkxvY2F0aW9uLCBHZXRBdHRyaWJMb2Nh
dGlvbiwgV2ViR0xJZCwgY29uc3QgY2hhciosIGludCkKKworREVMRUdBVEVfVE9fR0xfMihnZXRC
b29sZWFudiwgR2V0Qm9vbGVhbnYsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGNoYXIqKQorCitE
RUxFR0FURV9UT19HTF8zKGdldEJ1ZmZlclBhcmFtZXRlcml2LCBHZXRCdWZmZXJQYXJhbWV0ZXJp
diwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgaW50KikKKworV2ViR3JhcGhpY3NDb250
ZXh0M0Q6OkF0dHJpYnV0ZXMgV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6Z2V0Q29u
dGV4dEF0dHJpYnV0ZXMoKQoreworICAgIHJldHVybiBtX2F0dHJpYnV0ZXM7Cit9CisKK3Vuc2ln
bmVkIGxvbmcgV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6Z2V0RXJyb3IoKQorewor
ICAgIGlmIChtX3N5bnRoZXRpY0Vycm9ycy5zaXplKCkgPiAwKSB7CisgICAgICAgIExpc3RIYXNo
U2V0PHVuc2lnbmVkIGxvbmc+OjppdGVyYXRvciBpdGVyID0gbV9zeW50aGV0aWNFcnJvcnMuYmVn
aW4oKTsKKyAgICAgICAgdW5zaWduZWQgbG9uZyBlcnIgPSAqaXRlcjsKKyAgICAgICAgbV9zeW50
aGV0aWNFcnJvcnMucmVtb3ZlKGl0ZXIpOworICAgICAgICByZXR1cm4gZXJyOworICAgIH0KKwor
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIHJldHVybiBnbEdldEVycm9yKCk7Cit9CisK
K0RFTEVHQVRFX1RPX0dMXzIoZ2V0RmxvYXR2LCBHZXRGbG9hdHYsIHVuc2lnbmVkIGxvbmcsIGZs
b2F0KikKKworREVMRUdBVEVfVE9fR0xfNChnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0
ZXJpdiwgR2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXZFWFQsIHVuc2lnbmVkIGxv
bmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIGludCopCisKK0RFTEVHQVRFX1RPX0dM
XzIoZ2V0SW50ZWdlcnYsIEdldEludGVnZXJ2LCB1bnNpZ25lZCBsb25nLCBpbnQqKQorCitERUxF
R0FURV9UT19HTF8zKGdldFByb2dyYW1pdiwgR2V0UHJvZ3JhbWl2LCBXZWJHTElkLCB1bnNpZ25l
ZCBsb25nLCBpbnQqKQorCitXZWJTdHJpbmcgV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1w
bDo6Z2V0UHJvZ3JhbUluZm9Mb2coV2ViR0xJZCBwcm9ncmFtKQoreworICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOworICAgIEdMaW50IGxvZ0xlbmd0aDsKKyAgICBnbEdldFByb2dyYW1pdihwcm9n
cmFtLCBHTF9JTkZPX0xPR19MRU5HVEgsICZsb2dMZW5ndGgpOworICAgIGlmICghbG9nTGVuZ3Ro
KQorICAgICAgICByZXR1cm4gV2ViU3RyaW5nKCk7CisgICAgR0xjaGFyKiBsb2cgPSAwOworICAg
IGlmICghdHJ5RmFzdE1hbGxvYyhsb2dMZW5ndGggKiBzaXplb2YoR0xjaGFyKSkuZ2V0VmFsdWUo
bG9nKSkKKyAgICAgICAgcmV0dXJuIFdlYlN0cmluZygpOworICAgIEdMc2l6ZWkgcmV0dXJuZWRM
b2dMZW5ndGg7CisgICAgZ2xHZXRQcm9ncmFtSW5mb0xvZyhwcm9ncmFtLCBsb2dMZW5ndGgsICZy
ZXR1cm5lZExvZ0xlbmd0aCwgbG9nKTsKKyAgICBBU1NFUlQobG9nTGVuZ3RoID09IHJldHVybmVk
TG9nTGVuZ3RoICsgMSk7CisgICAgV2ViU3RyaW5nIHJlcyA9IFdlYlN0cmluZzo6ZnJvbVVURjgo
bG9nLCByZXR1cm5lZExvZ0xlbmd0aCk7CisgICAgZmFzdEZyZWUobG9nKTsKKyAgICByZXR1cm4g
cmVzOworfQorCitERUxFR0FURV9UT19HTF8zKGdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcml2LCBH
ZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdkVYVCwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9u
ZywgaW50KikKKworREVMRUdBVEVfVE9fR0xfMyhnZXRTaGFkZXJpdiwgR2V0U2hhZGVyaXYsIFdl
YkdMSWQsIHVuc2lnbmVkIGxvbmcsIGludCopCisKK1dlYlN0cmluZyBXZWJHcmFwaGljc0NvbnRl
eHQzRERlZmF1bHRJbXBsOjpnZXRTaGFkZXJJbmZvTG9nKFdlYkdMSWQgc2hhZGVyKQoreworICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIEdMaW50IGxvZ0xlbmd0aDsKKyAgICBnbEdldFNo
YWRlcml2KHNoYWRlciwgR0xfSU5GT19MT0dfTEVOR1RILCAmbG9nTGVuZ3RoKTsKKyAgICBpZiAo
IWxvZ0xlbmd0aCkKKyAgICAgICAgcmV0dXJuIFdlYlN0cmluZygpOworICAgIEdMY2hhciogbG9n
ID0gMDsKKyAgICBpZiAoIXRyeUZhc3RNYWxsb2MobG9nTGVuZ3RoICogc2l6ZW9mKEdMY2hhcikp
LmdldFZhbHVlKGxvZykpCisgICAgICAgIHJldHVybiBXZWJTdHJpbmcoKTsKKyAgICBHTHNpemVp
IHJldHVybmVkTG9nTGVuZ3RoOworICAgIGdsR2V0U2hhZGVySW5mb0xvZyhzaGFkZXIsIGxvZ0xl
bmd0aCwgJnJldHVybmVkTG9nTGVuZ3RoLCBsb2cpOworICAgIEFTU0VSVChsb2dMZW5ndGggPT0g
cmV0dXJuZWRMb2dMZW5ndGggKyAxKTsKKyAgICBXZWJTdHJpbmcgcmVzID0gV2ViU3RyaW5nOjpm
cm9tVVRGOChsb2csIHJldHVybmVkTG9nTGVuZ3RoKTsKKyAgICBmYXN0RnJlZShsb2cpOworICAg
IHJldHVybiByZXM7Cit9CisKK1dlYlN0cmluZyBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJ
bXBsOjpnZXRTaGFkZXJTb3VyY2UoV2ViR0xJZCBzaGFkZXIpCit7CisgICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgR0xpbnQgbG9nTGVuZ3RoOworICAgIGdsR2V0U2hhZGVyaXYoc2hhZGVy
LCBHTF9TSEFERVJfU09VUkNFX0xFTkdUSCwgJmxvZ0xlbmd0aCk7CisgICAgaWYgKCFsb2dMZW5n
dGgpCisgICAgICAgIHJldHVybiBXZWJTdHJpbmcoKTsKKyAgICBHTGNoYXIqIGxvZyA9IDA7Cisg
ICAgaWYgKCF0cnlGYXN0TWFsbG9jKGxvZ0xlbmd0aCAqIHNpemVvZihHTGNoYXIpKS5nZXRWYWx1
ZShsb2cpKQorICAgICAgICByZXR1cm4gV2ViU3RyaW5nKCk7CisgICAgR0xzaXplaSByZXR1cm5l
ZExvZ0xlbmd0aDsKKyAgICBnbEdldFNoYWRlclNvdXJjZShzaGFkZXIsIGxvZ0xlbmd0aCwgJnJl
dHVybmVkTG9nTGVuZ3RoLCBsb2cpOworICAgIEFTU0VSVChsb2dMZW5ndGggPT0gcmV0dXJuZWRM
b2dMZW5ndGggKyAxKTsKKyAgICBXZWJTdHJpbmcgcmVzID0gV2ViU3RyaW5nOjpmcm9tVVRGOChs
b2csIHJldHVybmVkTG9nTGVuZ3RoKTsKKyAgICBmYXN0RnJlZShsb2cpOworICAgIHJldHVybiBy
ZXM7Cit9CisKK1dlYlN0cmluZyBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpnZXRT
dHJpbmcodW5zaWduZWQgbG9uZyBuYW1lKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwor
ICAgIHJldHVybiBXZWJTdHJpbmc6OmZyb21VVEY4KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hh
cio+KGdsR2V0U3RyaW5nKG5hbWUpKSk7Cit9CisKK0RFTEVHQVRFX1RPX0dMXzMoZ2V0VGV4UGFy
YW1ldGVyZnYsIEdldFRleFBhcmFtZXRlcmZ2LCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25n
LCBmbG9hdCopCisKK0RFTEVHQVRFX1RPX0dMXzMoZ2V0VGV4UGFyYW1ldGVyaXYsIEdldFRleFBh
cmFtZXRlcml2LCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCBpbnQqKQorCitERUxFR0FU
RV9UT19HTF8zKGdldFVuaWZvcm1mdiwgR2V0VW5pZm9ybWZ2LCBXZWJHTElkLCBsb25nLCBmbG9h
dCopCisKK0RFTEVHQVRFX1RPX0dMXzMoZ2V0VW5pZm9ybWl2LCBHZXRVbmlmb3JtaXYsIFdlYkdM
SWQsIGxvbmcsIGludCopCisKK0RFTEVHQVRFX1RPX0dMXzJSKGdldFVuaWZvcm1Mb2NhdGlvbiwg
R2V0VW5pZm9ybUxvY2F0aW9uLCBXZWJHTElkLCBjb25zdCBjaGFyKiwgbG9uZykKKworREVMRUdB
VEVfVE9fR0xfMyhnZXRWZXJ0ZXhBdHRyaWJmdiwgR2V0VmVydGV4QXR0cmliZnYsIHVuc2lnbmVk
IGxvbmcsIHVuc2lnbmVkIGxvbmcsIGZsb2F0KikKKworREVMRUdBVEVfVE9fR0xfMyhnZXRWZXJ0
ZXhBdHRyaWJpdiwgR2V0VmVydGV4QXR0cmliaXYsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxv
bmcsIGludCopCisKK2xvbmcgV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6Z2V0VmVy
dGV4QXR0cmliT2Zmc2V0KHVuc2lnbmVkIGxvbmcgaW5kZXgsIHVuc2lnbmVkIGxvbmcgcG5hbWUp
Cit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudC4KKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAg
IHJldHVybiAwOworfQorCitERUxFR0FURV9UT19HTF8yKGhpbnQsIEhpbnQsIHVuc2lnbmVkIGxv
bmcsIHVuc2lnbmVkIGxvbmcpCisKK0RFTEVHQVRFX1RPX0dMXzFSKGlzQnVmZmVyLCBJc0J1ZmZl
ciwgV2ViR0xJZCwgYm9vbCkKKworREVMRUdBVEVfVE9fR0xfMVIoaXNFbmFibGVkLCBJc0VuYWJs
ZWQsIHVuc2lnbmVkIGxvbmcsIGJvb2wpCisKK0RFTEVHQVRFX1RPX0dMXzFSKGlzRnJhbWVidWZm
ZXIsIElzRnJhbWVidWZmZXIsIFdlYkdMSWQsIGJvb2wpCisKK0RFTEVHQVRFX1RPX0dMXzFSKGlz
UHJvZ3JhbSwgSXNQcm9ncmFtLCBXZWJHTElkLCBib29sKQorCitERUxFR0FURV9UT19HTF8xUihp
c1JlbmRlcmJ1ZmZlciwgSXNSZW5kZXJidWZmZXIsIFdlYkdMSWQsIGJvb2wpCisKK0RFTEVHQVRF
X1RPX0dMXzFSKGlzU2hhZGVyLCBJc1NoYWRlciwgV2ViR0xJZCwgYm9vbCkKKworREVMRUdBVEVf
VE9fR0xfMVIoaXNUZXh0dXJlLCBJc1RleHR1cmUsIFdlYkdMSWQsIGJvb2wpCisKK0RFTEVHQVRF
X1RPX0dMXzEobGluZVdpZHRoLCBMaW5lV2lkdGgsIGRvdWJsZSkKKworREVMRUdBVEVfVE9fR0xf
MShsaW5rUHJvZ3JhbSwgTGlua1Byb2dyYW0sIFdlYkdMSWQpCisKK0RFTEVHQVRFX1RPX0dMXzIo
cGl4ZWxTdG9yZWksIFBpeGVsU3RvcmVpLCB1bnNpZ25lZCBsb25nLCBsb25nKQorCitERUxFR0FU
RV9UT19HTF8yKHBvbHlnb25PZmZzZXQsIFBvbHlnb25PZmZzZXQsIGRvdWJsZSwgZG91YmxlKQor
CitERUxFR0FURV9UT19HTF83KHJlYWRQaXhlbHMsIFJlYWRQaXhlbHMsIGxvbmcsIGxvbmcsIHVu
c2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcs
IHZvaWQqKQorCit2b2lkIFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OnJlbGVhc2VT
aGFkZXJDb21waWxlcigpCit7Cit9CisKK0RFTEVHQVRFX1RPX0dMXzQocmVuZGVyYnVmZmVyU3Rv
cmFnZSwgUmVuZGVyYnVmZmVyU3RvcmFnZUVYVCwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9u
ZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZykKKworREVMRUdBVEVfVE9fR0xfMihzYW1w
bGVDb3ZlcmFnZSwgU2FtcGxlQ292ZXJhZ2UsIGRvdWJsZSwgYm9vbCkKKworREVMRUdBVEVfVE9f
R0xfNChzY2lzc29yLCBTY2lzc29yLCBsb25nLCBsb25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25l
ZCBsb25nKQorCit2b2lkIFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OnNoYWRlclNv
dXJjZShXZWJHTElkIHNoYWRlciwgY29uc3QgY2hhciogc3RyaW5nKQoreworICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIEdMaW50IGxlbmd0aCA9IHN0cmxlbihzdHJpbmcpOworICAgIGds
U2hhZGVyU291cmNlKHNoYWRlciwgMSwgJnN0cmluZywgJmxlbmd0aCk7Cit9CisKK0RFTEVHQVRF
X1RPX0dMXzMoc3RlbmNpbEZ1bmMsIFN0ZW5jaWxGdW5jLCB1bnNpZ25lZCBsb25nLCBsb25nLCB1
bnNpZ25lZCBsb25nKQorCitERUxFR0FURV9UT19HTF80KHN0ZW5jaWxGdW5jU2VwYXJhdGUsIFN0
ZW5jaWxGdW5jU2VwYXJhdGUsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIGxvbmcsIHVu
c2lnbmVkIGxvbmcpCisKK0RFTEVHQVRFX1RPX0dMXzEoc3RlbmNpbE1hc2ssIFN0ZW5jaWxNYXNr
LCB1bnNpZ25lZCBsb25nKQorCitERUxFR0FURV9UT19HTF8yKHN0ZW5jaWxNYXNrU2VwYXJhdGUs
IFN0ZW5jaWxNYXNrU2VwYXJhdGUsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpCisKK0RF
TEVHQVRFX1RPX0dMXzMoc3RlbmNpbE9wLCBTdGVuY2lsT3AsIHVuc2lnbmVkIGxvbmcsIHVuc2ln
bmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpCisKK0RFTEVHQVRFX1RPX0dMXzQoc3RlbmNpbE9wU2Vw
YXJhdGUsIFN0ZW5jaWxPcFNlcGFyYXRlLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCB1
bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKQorCitERUxFR0FURV9UT19HTF85KHRleEltYWdl
MkQsIFRleEltYWdlMkQsIHVuc2lnbmVkLCB1bnNpZ25lZCwgdW5zaWduZWQsIHVuc2lnbmVkLCB1
bnNpZ25lZCwgdW5zaWduZWQsIHVuc2lnbmVkLCB1bnNpZ25lZCwgY29uc3Qgdm9pZCopCisKK0RF
TEVHQVRFX1RPX0dMXzModGV4UGFyYW1ldGVyZiwgVGV4UGFyYW1ldGVyZiwgdW5zaWduZWQsIHVu
c2lnbmVkLCBmbG9hdCk7CisKK0RFTEVHQVRFX1RPX0dMXzModGV4UGFyYW1ldGVyaSwgVGV4UGFy
YW1ldGVyaSwgdW5zaWduZWQsIHVuc2lnbmVkLCBpbnQpOworCitERUxFR0FURV9UT19HTF85KHRl
eFN1YkltYWdlMkQsIFRleFN1YkltYWdlMkQsIHVuc2lnbmVkLCB1bnNpZ25lZCwgdW5zaWduZWQs
IHVuc2lnbmVkLCB1bnNpZ25lZCwgdW5zaWduZWQsIHVuc2lnbmVkLCB1bnNpZ25lZCwgY29uc3Qg
dm9pZCopCisKK0RFTEVHQVRFX1RPX0dMXzIodW5pZm9ybTFmLCBVbmlmb3JtMWYsIGxvbmcsIGZs
b2F0KQorCitERUxFR0FURV9UT19HTF8zKHVuaWZvcm0xZnYsIFVuaWZvcm0xZnYsIGxvbmcsIGlu
dCwgZmxvYXQqKQorCitERUxFR0FURV9UT19HTF8yKHVuaWZvcm0xaSwgVW5pZm9ybTFpLCBsb25n
LCBpbnQpCisKK0RFTEVHQVRFX1RPX0dMXzModW5pZm9ybTFpdiwgVW5pZm9ybTFpdiwgbG9uZywg
aW50LCBpbnQqKQorCitERUxFR0FURV9UT19HTF8zKHVuaWZvcm0yZiwgVW5pZm9ybTJmLCBsb25n
LCBmbG9hdCwgZmxvYXQpCisKK0RFTEVHQVRFX1RPX0dMXzModW5pZm9ybTJmdiwgVW5pZm9ybTJm
diwgbG9uZywgaW50LCBmbG9hdCopCisKK0RFTEVHQVRFX1RPX0dMXzModW5pZm9ybTJpLCBVbmlm
b3JtMmksIGxvbmcsIGludCwgaW50KQorCitERUxFR0FURV9UT19HTF8zKHVuaWZvcm0yaXYsIFVu
aWZvcm0yaXYsIGxvbmcsIGludCwgaW50KikKKworREVMRUdBVEVfVE9fR0xfNCh1bmlmb3JtM2Ys
IFVuaWZvcm0zZiwgbG9uZywgZmxvYXQsIGZsb2F0LCBmbG9hdCkKKworREVMRUdBVEVfVE9fR0xf
Myh1bmlmb3JtM2Z2LCBVbmlmb3JtM2Z2LCBsb25nLCBpbnQsIGZsb2F0KikKKworREVMRUdBVEVf
VE9fR0xfNCh1bmlmb3JtM2ksIFVuaWZvcm0zaSwgbG9uZywgaW50LCBpbnQsIGludCkKKworREVM
RUdBVEVfVE9fR0xfMyh1bmlmb3JtM2l2LCBVbmlmb3JtM2l2LCBsb25nLCBpbnQsIGludCopCisK
K0RFTEVHQVRFX1RPX0dMXzUodW5pZm9ybTRmLCBVbmlmb3JtNGYsIGxvbmcsIGZsb2F0LCBmbG9h
dCwgZmxvYXQsIGZsb2F0KQorCitERUxFR0FURV9UT19HTF8zKHVuaWZvcm00ZnYsIFVuaWZvcm00
ZnYsIGxvbmcsIGludCwgZmxvYXQqKQorCitERUxFR0FURV9UT19HTF81KHVuaWZvcm00aSwgVW5p
Zm9ybTRpLCBsb25nLCBpbnQsIGludCwgaW50LCBpbnQpCisKK0RFTEVHQVRFX1RPX0dMXzModW5p
Zm9ybTRpdiwgVW5pZm9ybTRpdiwgbG9uZywgaW50LCBpbnQqKQorCitERUxFR0FURV9UT19HTF80
KHVuaWZvcm1NYXRyaXgyZnYsIFVuaWZvcm1NYXRyaXgyZnYsIGxvbmcsIGludCwgYm9vbCwgY29u
c3QgZmxvYXQqKQorCitERUxFR0FURV9UT19HTF80KHVuaWZvcm1NYXRyaXgzZnYsIFVuaWZvcm1N
YXRyaXgzZnYsIGxvbmcsIGludCwgYm9vbCwgY29uc3QgZmxvYXQqKQorCitERUxFR0FURV9UT19H
TF80KHVuaWZvcm1NYXRyaXg0ZnYsIFVuaWZvcm1NYXRyaXg0ZnYsIGxvbmcsIGludCwgYm9vbCwg
Y29uc3QgZmxvYXQqKQorCitERUxFR0FURV9UT19HTF8xKHVzZVByb2dyYW0sIFVzZVByb2dyYW0s
IFdlYkdMSWQpCisKK0RFTEVHQVRFX1RPX0dMXzEodmFsaWRhdGVQcm9ncmFtLCBWYWxpZGF0ZVBy
b2dyYW0sIFdlYkdMSWQpCisKK0RFTEVHQVRFX1RPX0dMXzIodmVydGV4QXR0cmliMWYsIFZlcnRl
eEF0dHJpYjFmLCB1bnNpZ25lZCBsb25nLCBmbG9hdCkKKworREVMRUdBVEVfVE9fR0xfMih2ZXJ0
ZXhBdHRyaWIxZnYsIFZlcnRleEF0dHJpYjFmdiwgdW5zaWduZWQgbG9uZywgY29uc3QgZmxvYXQq
KQorCitERUxFR0FURV9UT19HTF8zKHZlcnRleEF0dHJpYjJmLCBWZXJ0ZXhBdHRyaWIyZiwgdW5z
aWduZWQgbG9uZywgZmxvYXQsIGZsb2F0KQorCitERUxFR0FURV9UT19HTF8yKHZlcnRleEF0dHJp
YjJmdiwgVmVydGV4QXR0cmliMmZ2LCB1bnNpZ25lZCBsb25nLCBjb25zdCBmbG9hdCopCisKK0RF
TEVHQVRFX1RPX0dMXzQodmVydGV4QXR0cmliM2YsIFZlcnRleEF0dHJpYjNmLCB1bnNpZ25lZCBs
b25nLCBmbG9hdCwgZmxvYXQsIGZsb2F0KQorCitERUxFR0FURV9UT19HTF8yKHZlcnRleEF0dHJp
YjNmdiwgVmVydGV4QXR0cmliM2Z2LCB1bnNpZ25lZCBsb25nLCBjb25zdCBmbG9hdCopCisKK0RF
TEVHQVRFX1RPX0dMXzUodmVydGV4QXR0cmliNGYsIFZlcnRleEF0dHJpYjRmLCB1bnNpZ25lZCBs
b25nLCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCkKKworREVMRUdBVEVfVE9fR0xfMih2ZXJ0
ZXhBdHRyaWI0ZnYsIFZlcnRleEF0dHJpYjRmdiwgdW5zaWduZWQgbG9uZywgY29uc3QgZmxvYXQq
KQorCit2b2lkIFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OnZlcnRleEF0dHJpYlBv
aW50ZXIodW5zaWduZWQgbG9uZyBpbmR4LCBpbnQgc2l6ZSwgaW50IHR5cGUsIGJvb2wgbm9ybWFs
aXplZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB1bnNpZ25lZCBsb25nIHN0cmlkZSwgdW5zaWduZWQgbG9uZyBvZmZzZXQpCit7Cisg
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisKKyAgICBpZiAobV9ib3VuZEFycmF5QnVmZmVyIDw9
IDApIHsKKyAgICAgICAgLy8gRklYTUU6IHJhaXNlIGV4Y2VwdGlvbi4KKyAgICAgICAgLy8gTG9n
TWVzc2FnZWYoKCJidWZmZXJEYXRhOiBubyBidWZmZXIgYm91bmQiKSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBpZiAoaW5keCA8IE51bVRyYWNrZWRQb2ludGVyU3RhdGVzKSB7Cisg
ICAgICAgIFZlcnRleEF0dHJpYlBvaW50ZXJTdGF0ZSYgc3RhdGUgPSBtX3ZlcnRleEF0dHJpYlBv
aW50ZXJTdGF0ZVtpbmR4XTsKKyAgICAgICAgc3RhdGUuYnVmZmVyID0gbV9ib3VuZEFycmF5QnVm
ZmVyOworICAgICAgICBzdGF0ZS5pbmR4ID0gaW5keDsKKyAgICAgICAgc3RhdGUuc2l6ZSA9IHNp
emU7CisgICAgICAgIHN0YXRlLnR5cGUgPSB0eXBlOworICAgICAgICBzdGF0ZS5ub3JtYWxpemVk
ID0gbm9ybWFsaXplZDsKKyAgICAgICAgc3RhdGUuc3RyaWRlID0gc3RyaWRlOworICAgICAgICBz
dGF0ZS5vZmZzZXQgPSBvZmZzZXQ7CisgICAgfQorCisgICAgZ2xWZXJ0ZXhBdHRyaWJQb2ludGVy
KGluZHgsIHNpemUsIHR5cGUsIG5vcm1hbGl6ZWQsIHN0cmlkZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KG9m
ZnNldCkpKTsKK30KKworREVMRUdBVEVfVE9fR0xfNCh2aWV3cG9ydCwgVmlld3BvcnQsIGxvbmcs
IGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpCisKK3Vuc2lnbmVkIFdlYkdyYXBo
aWNzQ29udGV4dDNERGVmYXVsdEltcGw6OmNyZWF0ZUJ1ZmZlcigpCit7CisgICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CisgICAgR0x1aW50IG87CisgICAgZ2xHZW5CdWZmZXJzKDEsICZvKTsKKyAg
ICByZXR1cm4gbzsKK30KKwordW5zaWduZWQgV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1w
bDo6Y3JlYXRlRnJhbWVidWZmZXIoKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAg
IEdMdWludCBvID0gMDsKKyAgICBnbEdlbkZyYW1lYnVmZmVyc0VYVCgxLCAmbyk7CisgICAgcmV0
dXJuIG87Cit9CisKK3Vuc2lnbmVkIFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OmNy
ZWF0ZVByb2dyYW0oKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIHJldHVybiBn
bENyZWF0ZVByb2dyYW0oKTsKK30KKwordW5zaWduZWQgV2ViR3JhcGhpY3NDb250ZXh0M0REZWZh
dWx0SW1wbDo6Y3JlYXRlUmVuZGVyYnVmZmVyKCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICBHTHVpbnQgbzsKKyAgICBnbEdlblJlbmRlcmJ1ZmZlcnNFWFQoMSwgJm8pOworICAg
IHJldHVybiBvOworfQorCitERUxFR0FURV9UT19HTF8xUihjcmVhdGVTaGFkZXIsIENyZWF0ZVNo
YWRlciwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQpOworCit1bnNpZ25lZCBXZWJHcmFwaGljc0Nv
bnRleHQzRERlZmF1bHRJbXBsOjpjcmVhdGVUZXh0dXJlKCkKK3sKKyAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICBHTHVpbnQgbzsKKyAgICBnbEdlblRleHR1cmVzKDEsICZvKTsKKyAgICBy
ZXR1cm4gbzsKK30KKwordm9pZCBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpkZWxl
dGVCdWZmZXIodW5zaWduZWQgYnVmZmVyKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwor
ICAgIGdsRGVsZXRlQnVmZmVycygxLCAmYnVmZmVyKTsKK30KKwordm9pZCBXZWJHcmFwaGljc0Nv
bnRleHQzRERlZmF1bHRJbXBsOjpkZWxldGVGcmFtZWJ1ZmZlcih1bnNpZ25lZCBmcmFtZWJ1ZmZl
cikKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBnbERlbGV0ZUZyYW1lYnVmZmVy
c0VYVCgxLCAmZnJhbWVidWZmZXIpOworfQorCit2b2lkIFdlYkdyYXBoaWNzQ29udGV4dDNERGVm
YXVsdEltcGw6OmRlbGV0ZVByb2dyYW0odW5zaWduZWQgcHJvZ3JhbSkKK3sKKyAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKyAgICBnbERlbGV0ZVByb2dyYW0ocHJvZ3JhbSk7Cit9CisKK3ZvaWQg
V2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6ZGVsZXRlUmVuZGVyYnVmZmVyKHVuc2ln
bmVkIHJlbmRlcmJ1ZmZlcikKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBnbERl
bGV0ZVJlbmRlcmJ1ZmZlcnNFWFQoMSwgJnJlbmRlcmJ1ZmZlcik7Cit9CisKK3ZvaWQgV2ViR3Jh
cGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6ZGVsZXRlU2hhZGVyKHVuc2lnbmVkIHNoYWRlcikK
K3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBnbERlbGV0ZVNoYWRlcihzaGFkZXIp
OworfQorCit2b2lkIFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OmRlbGV0ZVRleHR1
cmUodW5zaWduZWQgdGV4dHVyZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBn
bERlbGV0ZVRleHR1cmVzKDEsICZ0ZXh0dXJlKTsKK30KKwordm9pZCBXZWJHcmFwaGljc0NvbnRl
eHQzRERlZmF1bHRJbXBsOjpzeW50aGVzaXplR0xFcnJvcih1bnNpZ25lZCBsb25nIGVycm9yKQor
eworICAgIG1fc3ludGhldGljRXJyb3JzLmFkZChlcnJvcik7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKDNEX0NBTlZBUykKSW5kZXg6IFdlYktpdC9jaHJv
bWl1bS9zcmMvV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbC5oCShy
ZXZpc2lvbiAwKQorKysgV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJHcmFwaGljc0NvbnRleHQzRERl
ZmF1bHRJbXBsLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDEwIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlv
bi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1l
cyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAq
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJHcmFw
aGljc0NvbnRleHQzRERlZmF1bHRJbXBsX2gKKyNkZWZpbmUgV2ViR3JhcGhpY3NDb250ZXh0M0RE
ZWZhdWx0SW1wbF9oCisKKyNpZiBFTkFCTEUoM0RfQ0FOVkFTKQorCisjaW5jbHVkZSAiV2ViR3Jh
cGhpY3NDb250ZXh0M0QuaCIKKworI2luY2x1ZGUgPHd0Zi9MaXN0SGFzaFNldC5oPgorCisjaWYg
T1MoV0lORE9XUykKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisjZW5kaWYKKworI2luY2x1ZGUgIkdM
L2dsZXcuaCIKKworI2lmIFBMQVRGT1JNKENHKQorI2luY2x1ZGUgPE9wZW5HTC9PcGVuR0wuaD4K
KyNlbHNlCisjZGVmaW5lIEZMSVBfRlJBTUVCVUZGRVJfVkVSVElDQUxMWQorI2VuZGlmCisKKyNp
ZiBPUyhMSU5VWCkKKyNpbmNsdWRlIDxkbGZjbi5oPgorI2luY2x1ZGUgIkdML2dseGV3LmgiCisj
ZW5kaWYKKworbmFtZXNwYWNlIFdlYktpdCB7CisKKy8vIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0
aW9uIG9mIFdlYkdMLiBJbiBDaHJvbWl1bSwgdXNpbmcgdGhpcyBjbGFzcworLy8gcmVxdWlyZXMg
dGhlIHNhbmRib3ggdG8gYmUgZGlzYWJsZWQsIHdoaWNoIGlzIHN0cm9uZ2x5IGRpc2NvdXJhZ2Vk
LgorLy8gSXQgaXMgcHJvdmlkZWQgZm9yIHN1cHBvcnQgb2YgdGVzdF9zaGVsbCBhbmQgYW55IENo
cm9taXVtIHBvcnRzCisvLyB3aGVyZSBhbiBpbi1yZW5kZXJlciBXZWJHTCBpbXBsZW1lbnRhdGlv
biB3b3VsZCBiZSBoZWxwZnVsLgorCitjbGFzcyBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJ
bXBsIDogcHVibGljIFdlYkdyYXBoaWNzQ29udGV4dDNEIHsKK3B1YmxpYzoKKyAgICBXZWJHcmFw
aGljc0NvbnRleHQzRERlZmF1bHRJbXBsKCk7CisgICAgdmlydHVhbCB+V2ViR3JhcGhpY3NDb250
ZXh0M0REZWZhdWx0SW1wbCgpOworCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gV2ViR3Jh
cGhpY3NDb250ZXh0M0QgbWV0aG9kcworICAgIHZpcnR1YWwgYm9vbCBpbml0aWFsaXplKFdlYkdy
YXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMpOworICAgIHZpcnR1YWwgYm9v
bCBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKworICAgIHZpcnR1YWwgaW50IHdpZHRoKCk7CisgICAg
dmlydHVhbCBpbnQgaGVpZ2h0KCk7CisKKyAgICB2aXJ0dWFsIGludCBzaXplSW5CeXRlcyhpbnQg
dHlwZSk7CisKKyAgICB2aXJ0dWFsIHZvaWQgcmVzaGFwZShpbnQgd2lkdGgsIGludCBoZWlnaHQp
OworCisgICAgdmlydHVhbCB2b2lkIHJlYWRCYWNrRnJhbWVidWZmZXIodW5zaWduZWQgY2hhciog
cGl4ZWxzKTsKKworICAgIHZpcnR1YWwgdm9pZCBhY3RpdmVUZXh0dXJlKHVuc2lnbmVkIGxvbmcg
dGV4dHVyZSk7CisgICAgdmlydHVhbCB2b2lkIGF0dGFjaFNoYWRlcihXZWJHTElkIHByb2dyYW0s
IFdlYkdMSWQgc2hhZGVyKTsKKyAgICB2aXJ0dWFsIHZvaWQgYmluZEF0dHJpYkxvY2F0aW9uKFdl
YkdMSWQgcHJvZ3JhbSwgdW5zaWduZWQgbG9uZyBpbmRleCwgY29uc3QgY2hhciogbmFtZSk7Cisg
ICAgdmlydHVhbCB2b2lkIGJpbmRCdWZmZXIodW5zaWduZWQgbG9uZyB0YXJnZXQsIFdlYkdMSWQg
YnVmZmVyKTsKKyAgICB2aXJ0dWFsIHZvaWQgYmluZEZyYW1lYnVmZmVyKHVuc2lnbmVkIGxvbmcg
dGFyZ2V0LCBXZWJHTElkIGZyYW1lYnVmZmVyKTsKKyAgICB2aXJ0dWFsIHZvaWQgYmluZFJlbmRl
cmJ1ZmZlcih1bnNpZ25lZCBsb25nIHRhcmdldCwgV2ViR0xJZCByZW5kZXJidWZmZXIpOworICAg
IHZpcnR1YWwgdm9pZCBiaW5kVGV4dHVyZSh1bnNpZ25lZCBsb25nIHRhcmdldCwgV2ViR0xJZCB0
ZXh0dXJlKTsKKyAgICB2aXJ0dWFsIHZvaWQgYmxlbmRDb2xvcihkb3VibGUgcmVkLCBkb3VibGUg
Z3JlZW4sIGRvdWJsZSBibHVlLCBkb3VibGUgYWxwaGEpOworICAgIHZpcnR1YWwgdm9pZCBibGVu
ZEVxdWF0aW9uKHVuc2lnbmVkIGxvbmcgbW9kZSk7CisgICAgdmlydHVhbCB2b2lkIGJsZW5kRXF1
YXRpb25TZXBhcmF0ZSh1bnNpZ25lZCBsb25nIG1vZGVSR0IsIHVuc2lnbmVkIGxvbmcgbW9kZUFs
cGhhKTsKKyAgICB2aXJ0dWFsIHZvaWQgYmxlbmRGdW5jKHVuc2lnbmVkIGxvbmcgc2ZhY3Rvciwg
dW5zaWduZWQgbG9uZyBkZmFjdG9yKTsKKyAgICB2aXJ0dWFsIHZvaWQgYmxlbmRGdW5jU2VwYXJh
dGUodW5zaWduZWQgbG9uZyBzcmNSR0IsIHVuc2lnbmVkIGxvbmcgZHN0UkdCLCB1bnNpZ25lZCBs
b25nIHNyY0FscGhhLCB1bnNpZ25lZCBsb25nIGRzdEFscGhhKTsKKworICAgIHZpcnR1YWwgdm9p
ZCBidWZmZXJEYXRhKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBpbnQgc2l6ZSwgY29uc3Qgdm9pZCog
ZGF0YSwgdW5zaWduZWQgbG9uZyB1c2FnZSk7CisgICAgdmlydHVhbCB2b2lkIGJ1ZmZlclN1YkRh
dGEodW5zaWduZWQgbG9uZyB0YXJnZXQsIGxvbmcgb2Zmc2V0LCBpbnQgc2l6ZSwgY29uc3Qgdm9p
ZCogZGF0YSk7CisKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGxvbmcgY2hlY2tGcmFtZWJ1ZmZlclN0
YXR1cyh1bnNpZ25lZCBsb25nIHRhcmdldCk7CisgICAgdmlydHVhbCB2b2lkIGNsZWFyKHVuc2ln
bmVkIGxvbmcgbWFzayk7CisgICAgdmlydHVhbCB2b2lkIGNsZWFyQ29sb3IoZG91YmxlIHJlZCwg
ZG91YmxlIGdyZWVuLCBkb3VibGUgYmx1ZSwgZG91YmxlIGFscGhhKTsKKyAgICB2aXJ0dWFsIHZv
aWQgY2xlYXJEZXB0aChkb3VibGUgZGVwdGgpOworICAgIHZpcnR1YWwgdm9pZCBjbGVhclN0ZW5j
aWwobG9uZyBzKTsKKyAgICB2aXJ0dWFsIHZvaWQgY29sb3JNYXNrKGJvb2wgcmVkLCBib29sIGdy
ZWVuLCBib29sIGJsdWUsIGJvb2wgYWxwaGEpOworICAgIHZpcnR1YWwgdm9pZCBjb21waWxlU2hh
ZGVyKFdlYkdMSWQgc2hhZGVyKTsKKworICAgIHZpcnR1YWwgdm9pZCBjb3B5VGV4SW1hZ2UyRCh1
bnNpZ25lZCBsb25nIHRhcmdldCwgbG9uZyBsZXZlbCwgdW5zaWduZWQgbG9uZyBpbnRlcm5hbGZv
cm1hdCwgbG9uZyB4LCBsb25nIHksIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcg
aGVpZ2h0LCBsb25nIGJvcmRlcik7CisgICAgdmlydHVhbCB2b2lkIGNvcHlUZXhTdWJJbWFnZTJE
KHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBsb25nIGxldmVsLCBsb25nIHhvZmZzZXQsIGxvbmcgeW9m
ZnNldCwgbG9uZyB4LCBsb25nIHksIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcg
aGVpZ2h0KTsKKyAgICB2aXJ0dWFsIHZvaWQgY3VsbEZhY2UodW5zaWduZWQgbG9uZyBtb2RlKTsK
KyAgICB2aXJ0dWFsIHZvaWQgZGVwdGhGdW5jKHVuc2lnbmVkIGxvbmcgZnVuYyk7CisgICAgdmly
dHVhbCB2b2lkIGRlcHRoTWFzayhib29sIGZsYWcpOworICAgIHZpcnR1YWwgdm9pZCBkZXB0aFJh
bmdlKGRvdWJsZSB6TmVhciwgZG91YmxlIHpGYXIpOworICAgIHZpcnR1YWwgdm9pZCBkZXRhY2hT
aGFkZXIoV2ViR0xJZCBwcm9ncmFtLCBXZWJHTElkIHNoYWRlcik7CisgICAgdmlydHVhbCB2b2lk
IGRpc2FibGUodW5zaWduZWQgbG9uZyBjYXApOworICAgIHZpcnR1YWwgdm9pZCBkaXNhYmxlVmVy
dGV4QXR0cmliQXJyYXkodW5zaWduZWQgbG9uZyBpbmRleCk7CisgICAgdmlydHVhbCB2b2lkIGRy
YXdBcnJheXModW5zaWduZWQgbG9uZyBtb2RlLCBsb25nIGZpcnN0LCBsb25nIGNvdW50KTsKKyAg
ICB2aXJ0dWFsIHZvaWQgZHJhd0VsZW1lbnRzKHVuc2lnbmVkIGxvbmcgbW9kZSwgdW5zaWduZWQg
bG9uZyBjb3VudCwgdW5zaWduZWQgbG9uZyB0eXBlLCBsb25nIG9mZnNldCk7CisKKyAgICB2aXJ0
dWFsIHZvaWQgZW5hYmxlKHVuc2lnbmVkIGxvbmcgY2FwKTsKKyAgICB2aXJ0dWFsIHZvaWQgZW5h
YmxlVmVydGV4QXR0cmliQXJyYXkodW5zaWduZWQgbG9uZyBpbmRleCk7CisgICAgdmlydHVhbCB2
b2lkIGZpbmlzaCgpOworICAgIHZpcnR1YWwgdm9pZCBmbHVzaCgpOworICAgIHZpcnR1YWwgdm9p
ZCBmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcih1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQg
bG9uZyBhdHRhY2htZW50LCB1bnNpZ25lZCBsb25nIHJlbmRlcmJ1ZmZlcnRhcmdldCwgV2ViR0xJ
ZCByZW5kZXJidWZmZXIpOworICAgIHZpcnR1YWwgdm9pZCBmcmFtZWJ1ZmZlclRleHR1cmUyRCh1
bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBhdHRhY2htZW50LCB1bnNpZ25lZCBs
b25nIHRleHRhcmdldCwgV2ViR0xJZCB0ZXh0dXJlLCBsb25nIGxldmVsKTsKKyAgICB2aXJ0dWFs
IHZvaWQgZnJvbnRGYWNlKHVuc2lnbmVkIGxvbmcgbW9kZSk7CisgICAgdmlydHVhbCB2b2lkIGdl
bmVyYXRlTWlwbWFwKHVuc2lnbmVkIGxvbmcgdGFyZ2V0KTsKKworICAgIHZpcnR1YWwgYm9vbCBn
ZXRBY3RpdmVBdHRyaWIoV2ViR0xJZCBwcm9ncmFtLCB1bnNpZ25lZCBsb25nIGluZGV4LCBBY3Rp
dmVJbmZvJik7CisgICAgdmlydHVhbCBib29sIGdldEFjdGl2ZVVuaWZvcm0oV2ViR0xJZCBwcm9n
cmFtLCB1bnNpZ25lZCBsb25nIGluZGV4LCBBY3RpdmVJbmZvJik7CisKKyAgICB2aXJ0dWFsIGlu
dCAgZ2V0QXR0cmliTG9jYXRpb24oV2ViR0xJZCBwcm9ncmFtLCBjb25zdCBjaGFyKiBuYW1lKTsK
KworICAgIHZpcnR1YWwgdm9pZCBnZXRCb29sZWFudih1bnNpZ25lZCBsb25nIHBuYW1lLCB1bnNp
Z25lZCBjaGFyKiB2YWx1ZSk7CisKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0QnVmZmVyUGFyYW1ldGVy
aXYodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgcG5hbWUsIGludCogdmFsdWUp
OworCisgICAgdmlydHVhbCBBdHRyaWJ1dGVzIGdldENvbnRleHRBdHRyaWJ1dGVzKCk7CisKKyAg
ICB2aXJ0dWFsIHVuc2lnbmVkIGxvbmcgZ2V0RXJyb3IoKTsKKworICAgIHZpcnR1YWwgdm9pZCBn
ZXRGbG9hdHYodW5zaWduZWQgbG9uZyBwbmFtZSwgZmxvYXQqIHZhbHVlKTsKKworICAgIHZpcnR1
YWwgdm9pZCBnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpdih1bnNpZ25lZCBsb25n
IHRhcmdldCwgdW5zaWduZWQgbG9uZyBhdHRhY2htZW50LCB1bnNpZ25lZCBsb25nIHBuYW1lLCBp
bnQqIHZhbHVlKTsKKworICAgIHZpcnR1YWwgdm9pZCBnZXRJbnRlZ2Vydih1bnNpZ25lZCBsb25n
IHBuYW1lLCBpbnQqIHZhbHVlKTsKKworICAgIHZpcnR1YWwgdm9pZCBnZXRQcm9ncmFtaXYoV2Vi
R0xJZCBwcm9ncmFtLCB1bnNpZ25lZCBsb25nIHBuYW1lLCBpbnQqIHZhbHVlKTsKKworICAgIHZp
cnR1YWwgV2ViU3RyaW5nIGdldFByb2dyYW1JbmZvTG9nKFdlYkdMSWQgcHJvZ3JhbSk7CisKKyAg
ICB2aXJ0dWFsIHZvaWQgZ2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXYodW5zaWduZWQgbG9uZyB0
YXJnZXQsIHVuc2lnbmVkIGxvbmcgcG5hbWUsIGludCogdmFsdWUpOworCisgICAgdmlydHVhbCB2
b2lkIGdldFNoYWRlcml2KFdlYkdMSWQgc2hhZGVyLCB1bnNpZ25lZCBsb25nIHBuYW1lLCBpbnQq
IHZhbHVlKTsKKworICAgIHZpcnR1YWwgV2ViU3RyaW5nIGdldFNoYWRlckluZm9Mb2coV2ViR0xJ
ZCBzaGFkZXIpOworCisgICAgLy8gVEJECisgICAgLy8gdm9pZCBnbEdldFNoYWRlclByZWNpc2lv
bkZvcm1hdCAoR0xlbnVtIHNoYWRlcnR5cGUsIEdMZW51bSBwcmVjaXNpb250eXBlLCBHTGludCog
cmFuZ2UsIEdMaW50KiBwcmVjaXNpb24pOworCisgICAgdmlydHVhbCBXZWJTdHJpbmcgZ2V0U2hh
ZGVyU291cmNlKFdlYkdMSWQgc2hhZGVyKTsKKyAgICB2aXJ0dWFsIFdlYlN0cmluZyBnZXRTdHJp
bmcodW5zaWduZWQgbG9uZyBuYW1lKTsKKworICAgIHZpcnR1YWwgdm9pZCBnZXRUZXhQYXJhbWV0
ZXJmdih1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBwbmFtZSwgZmxvYXQqIHZh
bHVlKTsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0VGV4UGFyYW1ldGVyaXYodW5zaWduZWQgbG9uZyB0
YXJnZXQsIHVuc2lnbmVkIGxvbmcgcG5hbWUsIGludCogdmFsdWUpOworCisgICAgdmlydHVhbCB2
b2lkIGdldFVuaWZvcm1mdihXZWJHTElkIHByb2dyYW0sIGxvbmcgbG9jYXRpb24sIGZsb2F0KiB2
YWx1ZSk7CisgICAgdmlydHVhbCB2b2lkIGdldFVuaWZvcm1pdihXZWJHTElkIHByb2dyYW0sIGxv
bmcgbG9jYXRpb24sIGludCogdmFsdWUpOworCisgICAgdmlydHVhbCBsb25nIGdldFVuaWZvcm1M
b2NhdGlvbihXZWJHTElkIHByb2dyYW0sIGNvbnN0IGNoYXIqIG5hbWUpOworCisgICAgdmlydHVh
bCB2b2lkIGdldFZlcnRleEF0dHJpYmZ2KHVuc2lnbmVkIGxvbmcgaW5kZXgsIHVuc2lnbmVkIGxv
bmcgcG5hbWUsIGZsb2F0KiB2YWx1ZSk7CisgICAgdmlydHVhbCB2b2lkIGdldFZlcnRleEF0dHJp
Yml2KHVuc2lnbmVkIGxvbmcgaW5kZXgsIHVuc2lnbmVkIGxvbmcgcG5hbWUsIGludCogdmFsdWUp
OworCisgICAgdmlydHVhbCBsb25nIGdldFZlcnRleEF0dHJpYk9mZnNldCh1bnNpZ25lZCBsb25n
IGluZGV4LCB1bnNpZ25lZCBsb25nIHBuYW1lKTsKKworICAgIHZpcnR1YWwgdm9pZCBoaW50KHVu
c2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIG1vZGUpOworICAgIHZpcnR1YWwgYm9v
bCBpc0J1ZmZlcihXZWJHTElkIGJ1ZmZlcik7CisgICAgdmlydHVhbCBib29sIGlzRW5hYmxlZCh1
bnNpZ25lZCBsb25nIGNhcCk7CisgICAgdmlydHVhbCBib29sIGlzRnJhbWVidWZmZXIoV2ViR0xJ
ZCBmcmFtZWJ1ZmZlcik7CisgICAgdmlydHVhbCBib29sIGlzUHJvZ3JhbShXZWJHTElkIHByb2dy
YW0pOworICAgIHZpcnR1YWwgYm9vbCBpc1JlbmRlcmJ1ZmZlcihXZWJHTElkIHJlbmRlcmJ1ZmZl
cik7CisgICAgdmlydHVhbCBib29sIGlzU2hhZGVyKFdlYkdMSWQgc2hhZGVyKTsKKyAgICB2aXJ0
dWFsIGJvb2wgaXNUZXh0dXJlKFdlYkdMSWQgdGV4dHVyZSk7CisgICAgdmlydHVhbCB2b2lkIGxp
bmVXaWR0aChkb3VibGUpOworICAgIHZpcnR1YWwgdm9pZCBsaW5rUHJvZ3JhbShXZWJHTElkIHBy
b2dyYW0pOworICAgIHZpcnR1YWwgdm9pZCBwaXhlbFN0b3JlaSh1bnNpZ25lZCBsb25nIHBuYW1l
LCBsb25nIHBhcmFtKTsKKyAgICB2aXJ0dWFsIHZvaWQgcG9seWdvbk9mZnNldChkb3VibGUgZmFj
dG9yLCBkb3VibGUgdW5pdHMpOworCisgICAgdmlydHVhbCB2b2lkIHJlYWRQaXhlbHMobG9uZyB4
LCBsb25nIHksIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0LCB1bnNp
Z25lZCBsb25nIGZvcm1hdCwgdW5zaWduZWQgbG9uZyB0eXBlLCB2b2lkKiBwaXhlbHMpOworCisg
ICAgdmlydHVhbCB2b2lkIHJlbGVhc2VTaGFkZXJDb21waWxlcigpOworICAgIHZpcnR1YWwgdm9p
ZCByZW5kZXJidWZmZXJTdG9yYWdlKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25n
IGludGVybmFsZm9ybWF0LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdo
dCk7CisgICAgdmlydHVhbCB2b2lkIHNhbXBsZUNvdmVyYWdlKGRvdWJsZSB2YWx1ZSwgYm9vbCBp
bnZlcnQpOworICAgIHZpcnR1YWwgdm9pZCBzY2lzc29yKGxvbmcgeCwgbG9uZyB5LCB1bnNpZ25l
ZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCk7CisgICAgdmlydHVhbCB2b2lkIHNo
YWRlclNvdXJjZShXZWJHTElkIHNoYWRlciwgY29uc3QgY2hhciogc3RyaW5nKTsKKyAgICB2aXJ0
dWFsIHZvaWQgc3RlbmNpbEZ1bmModW5zaWduZWQgbG9uZyBmdW5jLCBsb25nIHJlZiwgdW5zaWdu
ZWQgbG9uZyBtYXNrKTsKKyAgICB2aXJ0dWFsIHZvaWQgc3RlbmNpbEZ1bmNTZXBhcmF0ZSh1bnNp
Z25lZCBsb25nIGZhY2UsIHVuc2lnbmVkIGxvbmcgZnVuYywgbG9uZyByZWYsIHVuc2lnbmVkIGxv
bmcgbWFzayk7CisgICAgdmlydHVhbCB2b2lkIHN0ZW5jaWxNYXNrKHVuc2lnbmVkIGxvbmcgbWFz
ayk7CisgICAgdmlydHVhbCB2b2lkIHN0ZW5jaWxNYXNrU2VwYXJhdGUodW5zaWduZWQgbG9uZyBm
YWNlLCB1bnNpZ25lZCBsb25nIG1hc2spOworICAgIHZpcnR1YWwgdm9pZCBzdGVuY2lsT3AodW5z
aWduZWQgbG9uZyBmYWlsLCB1bnNpZ25lZCBsb25nIHpmYWlsLCB1bnNpZ25lZCBsb25nIHpwYXNz
KTsKKyAgICB2aXJ0dWFsIHZvaWQgc3RlbmNpbE9wU2VwYXJhdGUodW5zaWduZWQgbG9uZyBmYWNl
LCB1bnNpZ25lZCBsb25nIGZhaWwsIHVuc2lnbmVkIGxvbmcgemZhaWwsIHVuc2lnbmVkIGxvbmcg
enBhc3MpOworCisgICAgdmlydHVhbCB2b2lkIHRleEltYWdlMkQodW5zaWduZWQgdGFyZ2V0LCB1
bnNpZ25lZCBsZXZlbCwgdW5zaWduZWQgaW50ZXJuYWxmb3JtYXQsIHVuc2lnbmVkIHdpZHRoLCB1
bnNpZ25lZCBoZWlnaHQsIHVuc2lnbmVkIGJvcmRlciwgdW5zaWduZWQgZm9ybWF0LCB1bnNpZ25l
ZCB0eXBlLCBjb25zdCB2b2lkKiBwaXhlbHMpOworCisgICAgdmlydHVhbCB2b2lkIHRleFBhcmFt
ZXRlcmYodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBwbmFtZSwgZmxvYXQgcGFyYW0pOworICAg
IHZpcnR1YWwgdm9pZCB0ZXhQYXJhbWV0ZXJpKHVuc2lnbmVkIHRhcmdldCwgdW5zaWduZWQgcG5h
bWUsIGludCBwYXJhbSk7CisKKyAgICB2aXJ0dWFsIHZvaWQgdGV4U3ViSW1hZ2UyRCh1bnNpZ25l
ZCB0YXJnZXQsIHVuc2lnbmVkIGxldmVsLCB1bnNpZ25lZCB4b2Zmc2V0LCB1bnNpZ25lZCB5b2Zm
c2V0LCB1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0LCB1bnNpZ25lZCBmb3JtYXQsIHVu
c2lnbmVkIHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVscyk7CisKKyAgICB2aXJ0dWFsIHZvaWQgdW5p
Zm9ybTFmKGxvbmcgbG9jYXRpb24sIGZsb2F0IHgpOworICAgIHZpcnR1YWwgdm9pZCB1bmlmb3Jt
MWZ2KGxvbmcgbG9jYXRpb24sIGludCBjb3VudCwgZmxvYXQqIHYpOworICAgIHZpcnR1YWwgdm9p
ZCB1bmlmb3JtMWkobG9uZyBsb2NhdGlvbiwgaW50IHgpOworICAgIHZpcnR1YWwgdm9pZCB1bmlm
b3JtMWl2KGxvbmcgbG9jYXRpb24sIGludCBjb3VudCwgaW50KiB2KTsKKyAgICB2aXJ0dWFsIHZv
aWQgdW5pZm9ybTJmKGxvbmcgbG9jYXRpb24sIGZsb2F0IHgsIGZsb2F0IHkpOworICAgIHZpcnR1
YWwgdm9pZCB1bmlmb3JtMmZ2KGxvbmcgbG9jYXRpb24sIGludCBjb3VudCwgZmxvYXQqIHYpOwor
ICAgIHZpcnR1YWwgdm9pZCB1bmlmb3JtMmkobG9uZyBsb2NhdGlvbiwgaW50IHgsIGludCB5KTsK
KyAgICB2aXJ0dWFsIHZvaWQgdW5pZm9ybTJpdihsb25nIGxvY2F0aW9uLCBpbnQgY291bnQsIGlu
dCogdik7CisgICAgdmlydHVhbCB2b2lkIHVuaWZvcm0zZihsb25nIGxvY2F0aW9uLCBmbG9hdCB4
LCBmbG9hdCB5LCBmbG9hdCB6KTsKKyAgICB2aXJ0dWFsIHZvaWQgdW5pZm9ybTNmdihsb25nIGxv
Y2F0aW9uLCBpbnQgY291bnQsIGZsb2F0KiB2KTsKKyAgICB2aXJ0dWFsIHZvaWQgdW5pZm9ybTNp
KGxvbmcgbG9jYXRpb24sIGludCB4LCBpbnQgeSwgaW50IHopOworICAgIHZpcnR1YWwgdm9pZCB1
bmlmb3JtM2l2KGxvbmcgbG9jYXRpb24sIGludCBjb3VudCwgaW50KiB2KTsKKyAgICB2aXJ0dWFs
IHZvaWQgdW5pZm9ybTRmKGxvbmcgbG9jYXRpb24sIGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHos
IGZsb2F0IHcpOworICAgIHZpcnR1YWwgdm9pZCB1bmlmb3JtNGZ2KGxvbmcgbG9jYXRpb24sIGlu
dCBjb3VudCwgZmxvYXQqIHYpOworICAgIHZpcnR1YWwgdm9pZCB1bmlmb3JtNGkobG9uZyBsb2Nh
dGlvbiwgaW50IHgsIGludCB5LCBpbnQgeiwgaW50IHcpOworICAgIHZpcnR1YWwgdm9pZCB1bmlm
b3JtNGl2KGxvbmcgbG9jYXRpb24sIGludCBjb3VudCwgaW50KiB2KTsKKyAgICB2aXJ0dWFsIHZv
aWQgdW5pZm9ybU1hdHJpeDJmdihsb25nIGxvY2F0aW9uLCBpbnQgY291bnQsIGJvb2wgdHJhbnNw
b3NlLCBjb25zdCBmbG9hdCogdmFsdWUpOworICAgIHZpcnR1YWwgdm9pZCB1bmlmb3JtTWF0cml4
M2Z2KGxvbmcgbG9jYXRpb24sIGludCBjb3VudCwgYm9vbCB0cmFuc3Bvc2UsIGNvbnN0IGZsb2F0
KiB2YWx1ZSk7CisgICAgdmlydHVhbCB2b2lkIHVuaWZvcm1NYXRyaXg0ZnYobG9uZyBsb2NhdGlv
biwgaW50IGNvdW50LCBib29sIHRyYW5zcG9zZSwgY29uc3QgZmxvYXQqIHZhbHVlKTsKKworICAg
IHZpcnR1YWwgdm9pZCB1c2VQcm9ncmFtKFdlYkdMSWQgcHJvZ3JhbSk7CisgICAgdmlydHVhbCB2
b2lkIHZhbGlkYXRlUHJvZ3JhbShXZWJHTElkIHByb2dyYW0pOworCisgICAgdmlydHVhbCB2b2lk
IHZlcnRleEF0dHJpYjFmKHVuc2lnbmVkIGxvbmcgaW5keCwgZmxvYXQgeCk7CisgICAgdmlydHVh
bCB2b2lkIHZlcnRleEF0dHJpYjFmdih1bnNpZ25lZCBsb25nIGluZHgsIGNvbnN0IGZsb2F0KiB2
YWx1ZXMpOworICAgIHZpcnR1YWwgdm9pZCB2ZXJ0ZXhBdHRyaWIyZih1bnNpZ25lZCBsb25nIGlu
ZHgsIGZsb2F0IHgsIGZsb2F0IHkpOworICAgIHZpcnR1YWwgdm9pZCB2ZXJ0ZXhBdHRyaWIyZnYo
dW5zaWduZWQgbG9uZyBpbmR4LCBjb25zdCBmbG9hdCogdmFsdWVzKTsKKyAgICB2aXJ0dWFsIHZv
aWQgdmVydGV4QXR0cmliM2YodW5zaWduZWQgbG9uZyBpbmR4LCBmbG9hdCB4LCBmbG9hdCB5LCBm
bG9hdCB6KTsKKyAgICB2aXJ0dWFsIHZvaWQgdmVydGV4QXR0cmliM2Z2KHVuc2lnbmVkIGxvbmcg
aW5keCwgY29uc3QgZmxvYXQqIHZhbHVlcyk7CisgICAgdmlydHVhbCB2b2lkIHZlcnRleEF0dHJp
YjRmKHVuc2lnbmVkIGxvbmcgaW5keCwgZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgeiwgZmxvYXQg
dyk7CisgICAgdmlydHVhbCB2b2lkIHZlcnRleEF0dHJpYjRmdih1bnNpZ25lZCBsb25nIGluZHgs
IGNvbnN0IGZsb2F0KiB2YWx1ZXMpOworICAgIHZpcnR1YWwgdm9pZCB2ZXJ0ZXhBdHRyaWJQb2lu
dGVyKHVuc2lnbmVkIGxvbmcgaW5keCwgaW50IHNpemUsIGludCB0eXBlLCBib29sIG5vcm1hbGl6
ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBz
dHJpZGUsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KTsKKworICAgIHZpcnR1YWwgdm9pZCB2aWV3cG9y
dChsb25nIHgsIGxvbmcgeSwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWln
aHQpOworCisgICAgLy8gU3VwcG9ydCBmb3IgYnVmZmVyIGNyZWF0aW9uIGFuZCBkZWxldGlvbgor
ICAgIHZpcnR1YWwgdW5zaWduZWQgY3JlYXRlQnVmZmVyKCk7CisgICAgdmlydHVhbCB1bnNpZ25l
ZCBjcmVhdGVGcmFtZWJ1ZmZlcigpOworICAgIHZpcnR1YWwgdW5zaWduZWQgY3JlYXRlUHJvZ3Jh
bSgpOworICAgIHZpcnR1YWwgdW5zaWduZWQgY3JlYXRlUmVuZGVyYnVmZmVyKCk7CisgICAgdmly
dHVhbCB1bnNpZ25lZCBjcmVhdGVTaGFkZXIodW5zaWduZWQgbG9uZyk7CisgICAgdmlydHVhbCB1
bnNpZ25lZCBjcmVhdGVUZXh0dXJlKCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlQnVmZmVy
KHVuc2lnbmVkKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlRnJhbWVidWZmZXIodW5zaWduZWQp
OworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVQcm9ncmFtKHVuc2lnbmVkKTsKKyAgICB2aXJ0dWFs
IHZvaWQgZGVsZXRlUmVuZGVyYnVmZmVyKHVuc2lnbmVkKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVs
ZXRlU2hhZGVyKHVuc2lnbmVkKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlVGV4dHVyZSh1bnNp
Z25lZCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgc3ludGhlc2l6ZUdMRXJyb3IodW5zaWduZWQgbG9u
ZyBlcnJvcik7CisKK3ByaXZhdGU6CisgICAgV2ViR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0
ZXMgbV9hdHRyaWJ1dGVzOworICAgIGJvb2wgbV9pbml0aWFsaXplZDsKKyAgICB1bnNpZ25lZCBp
bnQgbV90ZXh0dXJlOworICAgIHVuc2lnbmVkIGludCBtX2ZibzsKKyAgICB1bnNpZ25lZCBpbnQg
bV9kZXB0aEJ1ZmZlcjsKKyAgICB1bnNpZ25lZCBpbnQgbV9jYWNoZWRXaWR0aCwgbV9jYWNoZWRI
ZWlnaHQ7CisKKyAgICAvLyBGb3IgdHJhY2tpbmcgd2hpY2ggRkJPIGlzIGJvdW5kCisgICAgdW5z
aWduZWQgaW50IG1fYm91bmRGQk87CisKKyNpZmRlZiBGTElQX0ZSQU1FQlVGRkVSX1ZFUlRJQ0FM
TFkKKyAgICB1bnNpZ25lZCBjaGFyKiBtX3NjYW5saW5lOworICAgIHZvaWQgZmxpcFZlcnRpY2Fs
bHkodW5zaWduZWQgY2hhciogZnJhbWVidWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICB1
bnNpZ25lZCBpbnQgd2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQg
aGVpZ2h0KTsKKyNlbmRpZgorCisgICAgLy8gTm90ZTogd2UgYXJlbid0IGN1cnJlbnRseSB1c2lu
ZyB0aGlzIGluZm9ybWF0aW9uLCBidXQgd2Ugd2lsbAorICAgIC8vIG5lZWQgdG8gaW4gb3JkZXIg
dG8gdmVyaWZ5IHRoYXQgYWxsIGVuYWJsZWQgdmVydGV4IGFycmF5cyBoYXZlCisgICAgLy8gYSB2
YWxpZCBidWZmZXIgYm91bmQgLS0gdG8gYXZvaWQgY3Jhc2hlcyBvbiBjZXJ0YWluIGNhcmRzLgor
ICAgIHVuc2lnbmVkIGludCBtX2JvdW5kQXJyYXlCdWZmZXI7CisgICAgY2xhc3MgVmVydGV4QXR0
cmliUG9pbnRlclN0YXRlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFZlcnRleEF0dHJpYlBvaW50
ZXJTdGF0ZSgpOworCisgICAgICAgIGJvb2wgZW5hYmxlZDsKKyAgICAgICAgdW5zaWduZWQgbG9u
ZyBidWZmZXI7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgaW5keDsKKyAgICAgICAgaW50IHNpemU7
CisgICAgICAgIGludCB0eXBlOworICAgICAgICBib29sIG5vcm1hbGl6ZWQ7CisgICAgICAgIHVu
c2lnbmVkIGxvbmcgc3RyaWRlOworICAgICAgICB1bnNpZ25lZCBsb25nIG9mZnNldDsKKyAgICB9
OworCisgICAgZW51bSB7CisgICAgICAgIE51bVRyYWNrZWRQb2ludGVyU3RhdGVzID0gMgorICAg
IH07CisgICAgVmVydGV4QXR0cmliUG9pbnRlclN0YXRlIG1fdmVydGV4QXR0cmliUG9pbnRlclN0
YXRlW051bVRyYWNrZWRQb2ludGVyU3RhdGVzXTsKKworICAgIC8vIEVycm9ycyByYWlzZWQgYnkg
c3ludGhlc2l6ZUdMRXJyb3IoKS4KKyAgICBMaXN0SGFzaFNldDx1bnNpZ25lZCBsb25nPiBtX3N5
bnRoZXRpY0Vycm9yczsKKworICAgIHN0YXRpYyBib29sIHNfaW5pdGlhbGl6ZWRHTEVXOworI2lm
IE9TKFdJTkRPV1MpCisgICAgSFdORCAgbV9jYW52YXNXaW5kb3c7CisgICAgSERDICAgbV9jYW52
YXNEQzsKKyAgICBIR0xSQyBtX2NvbnRleHRPYmo7CisjZWxpZiBQTEFURk9STShDRykKKyAgICBD
R0xQQnVmZmVyT2JqIG1fcGJ1ZmZlcjsKKyAgICBDR0xDb250ZXh0T2JqIG1fY29udGV4dE9iajsK
KyAgICB1bnNpZ25lZCBjaGFyKiBtX3JlbmRlck91dHB1dDsKKyNlbGlmIE9TKExJTlVYKQorICAg
IEdMWENvbnRleHQgbV9jb250ZXh0T2JqOworICAgIEdMWFBidWZmZXIgbV9wYnVmZmVyOworCisg
ICAgLy8gSW4gb3JkZXIgdG8gYXZvaWQgcHJvYmxlbXMgY2F1c2VkIGJ5IGxpbmtpbmcgYWdhaW5z
dCBsaWJHTCwgd2UKKyAgICAvLyBkeW5hbWljYWxseSBsb29rIHVwIGFsbCB0aGUgc3ltYm9scyB3
ZSBuZWVkLgorICAgIC8vIGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9jaHJvbWl1bS9pc3N1ZXMv
ZGV0YWlsP2lkPTE2ODAwCisgICAgY2xhc3MgR0xDb25uZWN0aW9uIHsKKyAgICAgIHB1YmxpYzoK
KyAgICAgICAgfkdMQ29ubmVjdGlvbigpOworCisgICAgICAgIHN0YXRpYyBHTENvbm5lY3Rpb24q
IGNyZWF0ZSgpOworCisgICAgICAgIEdMWEZCQ29uZmlnKiBjaG9vc2VGQkNvbmZpZyhpbnQgc2Ny
ZWVuLCBjb25zdCBpbnQgKmF0dHJpYl9saXN0LCBpbnQgKm5lbGVtZW50cykKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIG1fZ2xYQ2hvb3NlRkJDb25maWcobV9kaXNwbGF5LCBzY3JlZW4s
IGF0dHJpYl9saXN0LCBuZWxlbWVudHMpOworICAgICAgICB9CisKKyAgICAgICAgR0xYQ29udGV4
dCBjcmVhdGVOZXdDb250ZXh0KEdMWEZCQ29uZmlnIGNvbmZpZywgaW50IHJlbmRlclR5cGUsIEdM
WENvbnRleHQgc2hhcmVMaXN0LCBCb29sIGRpcmVjdCkKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIG1fZ2xYQ3JlYXRlTmV3Q29udGV4dChtX2Rpc3BsYXksIGNvbmZpZywgcmVuZGVyVHlw
ZSwgc2hhcmVMaXN0LCBkaXJlY3QpOworICAgICAgICB9CisKKyAgICAgICAgR0xYUGJ1ZmZlciBj
cmVhdGVQYnVmZmVyKEdMWEZCQ29uZmlnIGNvbmZpZywgY29uc3QgaW50ICphdHRyaWJMaXN0KQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9nbFhDcmVhdGVQYnVmZmVyKG1fZGlzcGxh
eSwgY29uZmlnLCBhdHRyaWJMaXN0KTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgZGVzdHJv
eVBidWZmZXIoR0xYUGJ1ZmZlciBwYnVmKQorICAgICAgICB7CisgICAgICAgICAgICBtX2dsWERl
c3Ryb3lQYnVmZmVyKG1fZGlzcGxheSwgcGJ1Zik7CisgICAgICAgIH0KKworICAgICAgICBCb29s
IG1ha2VDdXJyZW50KEdMWERyYXdhYmxlIGRyYXdhYmxlLCBHTFhDb250ZXh0IGN0eCkKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIG1fZ2xYTWFrZUN1cnJlbnQobV9kaXNwbGF5LCBkcmF3
YWJsZSwgY3R4KTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgZGVzdHJveUNvbnRleHQoR0xY
Q29udGV4dCBjdHgpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fZ2xYRGVzdHJveUNvbnRleHQo
bV9kaXNwbGF5LCBjdHgpOworICAgICAgICB9CisKKyAgICAgICAgR0xYQ29udGV4dCBnZXRDdXJy
ZW50Q29udGV4dCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2dsWEdldEN1cnJl
bnRDb250ZXh0KCk7CisgICAgICAgIH0KKworICAgICAgcHJpdmF0ZToKKyAgICAgICAgRGlzcGxh
eSogbV9kaXNwbGF5OworICAgICAgICB2b2lkKiBtX2xpYkdMOworICAgICAgICBQRk5HTFhDSE9P
U0VGQkNPTkZJR1BST0MgbV9nbFhDaG9vc2VGQkNvbmZpZzsKKyAgICAgICAgUEZOR0xYQ1JFQVRF
TkVXQ09OVEVYVFBST0MgbV9nbFhDcmVhdGVOZXdDb250ZXh0OworICAgICAgICBQRk5HTFhDUkVB
VEVQQlVGRkVSUFJPQyBtX2dsWENyZWF0ZVBidWZmZXI7CisgICAgICAgIFBGTkdMWERFU1RST1lQ
QlVGRkVSUFJPQyBtX2dsWERlc3Ryb3lQYnVmZmVyOworICAgICAgICB0eXBlZGVmIEJvb2wgKCog
UEZOR0xYTUFLRUNVUlJFTlRQUk9DKShEaXNwbGF5KiBkcHksIEdMWERyYXdhYmxlIGRyYXdhYmxl
LCBHTFhDb250ZXh0IGN0eCk7CisgICAgICAgIFBGTkdMWE1BS0VDVVJSRU5UUFJPQyBtX2dsWE1h
a2VDdXJyZW50OworICAgICAgICB0eXBlZGVmIHZvaWQgKCogUEZOR0xYREVTVFJPWUNPTlRFWFRQ
Uk9DKShEaXNwbGF5KiBkcHksIEdMWENvbnRleHQgY3R4KTsKKyAgICAgICAgUEZOR0xYREVTVFJP
WUNPTlRFWFRQUk9DIG1fZ2xYRGVzdHJveUNvbnRleHQ7CisgICAgICAgIHR5cGVkZWYgR0xYQ29u
dGV4dCAoKiBQRk5HTFhHRVRDVVJSRU5UQ09OVEVYVFBST0MpKHZvaWQpOworICAgICAgICBQRk5H
TFhHRVRDVVJSRU5UQ09OVEVYVFBST0MgbV9nbFhHZXRDdXJyZW50Q29udGV4dDsKKworICAgICAg
ICBHTENvbm5lY3Rpb24oRGlzcGxheSogZGlzcGxheSwKKyAgICAgICAgICAgICAgICAgICAgIHZv
aWQqIGxpYkdMLAorICAgICAgICAgICAgICAgICAgICAgUEZOR0xYQ0hPT1NFRkJDT05GSUdQUk9D
IGNob29zZUZCQ29uZmlnLAorICAgICAgICAgICAgICAgICAgICAgUEZOR0xYQ1JFQVRFTkVXQ09O
VEVYVFBST0MgY3JlYXRlTmV3Q29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgIFBGTkdMWENS
RUFURVBCVUZGRVJQUk9DIGNyZWF0ZVBidWZmZXIsCisgICAgICAgICAgICAgICAgICAgICBQRk5H
TFhERVNUUk9ZUEJVRkZFUlBST0MgZGVzdHJveVBidWZmZXIsCisgICAgICAgICAgICAgICAgICAg
ICBQRk5HTFhNQUtFQ1VSUkVOVFBST0MgbWFrZUN1cnJlbnQsCisgICAgICAgICAgICAgICAgICAg
ICBQRk5HTFhERVNUUk9ZQ09OVEVYVFBST0MgZGVzdHJveUNvbnRleHQsCisgICAgICAgICAgICAg
ICAgICAgICBQRk5HTFhHRVRDVVJSRU5UQ09OVEVYVFBST0MgZ2V0Q3VycmVudENvbnRleHQpCisg
ICAgICAgICAgICA6IG1fbGliR0wobGliR0wpCisgICAgICAgICAgICAsIG1fZGlzcGxheShkaXNw
bGF5KQorICAgICAgICAgICAgLCBtX2dsWENob29zZUZCQ29uZmlnKGNob29zZUZCQ29uZmlnKQor
ICAgICAgICAgICAgLCBtX2dsWENyZWF0ZU5ld0NvbnRleHQoY3JlYXRlTmV3Q29udGV4dCkKKyAg
ICAgICAgICAgICwgbV9nbFhDcmVhdGVQYnVmZmVyKGNyZWF0ZVBidWZmZXIpCisgICAgICAgICAg
ICAsIG1fZ2xYRGVzdHJveVBidWZmZXIoZGVzdHJveVBidWZmZXIpCisgICAgICAgICAgICAsIG1f
Z2xYTWFrZUN1cnJlbnQobWFrZUN1cnJlbnQpCisgICAgICAgICAgICAsIG1fZ2xYRGVzdHJveUNv
bnRleHQoZGVzdHJveUNvbnRleHQpCisgICAgICAgICAgICAsIG1fZ2xYR2V0Q3VycmVudENvbnRl
eHQoZ2V0Q3VycmVudENvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgIH07CisKKyAg
ICBzdGF0aWMgR0xDb25uZWN0aW9uKiBzX2dsOworI2Vsc2UKKyAgICAjZXJyb3IgTXVzdCBwb3J0
IFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGwgdG8geW91ciBwbGF0Zm9ybQorI2VuZGlm
Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRSgzRF9DQU5W
QVMpCisKKyNlbmRpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>51068</attachid>
            <date>2010-03-18 12:31:17 -0700</date>
            <delta_ts>2010-03-19 15:06:37 -0700</delta_ts>
            <desc>Revised patch</desc>
            <filename>refactoring.patch</filename>
            <type>text/plain</type>
            <size>199809</size>
            <attacher name="Kenneth Russell">kbr</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24gNTYxNzgpCisrKyBXZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQ1IEBACisyMDEwLTAzLTE3ICBLZW5u
ZXRoIFJ1c3NlbGwgIDxrYnJAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgR3JhcGhpY3NDb250ZXh0M0QgYWJzdHJhY3Rpb24g
dG8gV2ViS2l0IEFQSQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MzYyNjIKKworICAgICAgICBBZGRlZCBXZWJHcmFwaGljc0NvbnRleHQzRCB0byB0aGUg
V2ViS2l0IEFQSSBhbmQgcmVmYWN0b3JlZCBDaHJvbWl1bSdzCisgICAgICAgIEdyYXBoaWNzQ29u
dGV4dDNEIGltcGxlbWVudGF0aW9uIHRvIHVzZSBpdC4gQWxsIG9mIHRoZSBPcGVuR0wgY2FsbHMg
aGF2ZQorICAgICAgICBiZWVuIG1vdmVkIG91dCBvZiBXZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBo
aWNzQ29udGV4dDNELmNwcCBhbmQgaW50byB0aGUKKyAgICAgICAgV2ViR3JhcGhpY3NDb250ZXh0
M0QgaW1wbGVtZW50YXRpb24uIEdyYXBoaWNzQ29udGV4dDNEIGlzIHN0aWxsCisgICAgICAgIHJl
c3BvbnNpYmxlIGZvciB0aGUgdHJhbnNmZXIgb2YgcmVuZGVyZWQgb3V0cHV0IGZyb20gdGhlCisg
ICAgICAgIFdlYkdyYXBoaWNzQ29udGV4dDNEIHRvIHRoZSBIVE1MQ2FudmFzRWxlbWVudC4KKwor
ICAgICAgICBUaGUgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbCBjbGFzcywgd2hpY2ggaXMgYSBk
YXRhIG1lbWJlciBvZgorICAgICAgICBHcmFwaGljc0NvbnRleHQzRCBmb3IgdGhlIENocm9taXVt
IHBvcnQsIHJlbWFpbnMuIEl0IGlzIHBvc3NpYmxlIHRvCisgICAgICAgIGVsaW1pbmF0ZSB0aGlz
IGNsYXNzIGFuZCB0aGVyZWJ5IG9uZSBsZXZlbCBvZiBkZWxlZ2F0aW9uLCBidXQgdGhpcyBpcwor
ICAgICAgICBiZWluZyBkZWZlcnJlZC4KKworICAgICAgICBUaGUgbmVlZGVkIGVudHJ5IHBvaW50
IGZvciBhIENocm9tZSBpbXBsZW1lbnRhdGlvbiBvZgorICAgICAgICBXZWJHcmFwaGljc0NvbnRl
eHQzRCBoYXMgYmVlbiBhZGRlZCB0byBXZWJLaXRDbGllbnQsIGJ1dCBpdCBpcyBub3QgYmVpbmcK
KyAgICAgICAgY2FsbGVkIHlldCBieSBHcmFwaGljc0NvbnRleHQzRC4gSXQgd2lsbCBiZSBvbmNl
IHRoaXMgcGF0Y2ggbGFuZHMgYW5kCisgICAgICAgIENocm9taXVtIGlzIHJvbGxlZCBmb3J3YXJk
IHRvIHN1cHBvcnQgdGhpcyBlbnRyeSBwb2ludC4KKworICAgICAgICBUaGlzIGlzIGEgbGFyZ2Ug
cGF0Y2gsIGJ1dCB0aGUgdHJhbnNmb3JtYXRpb24gaXMgYWxtb3N0IGVudGlyZWx5CisgICAgICAg
IG1lY2hhbmljYWwgYW5kIHRoZXJlIGlzIG5vIGNoYW5nZSBpbiBmdW5jdGlvbmFsaXR5LiBOZWFy
bHkgYWxsIG9mCisgICAgICAgIEdyYXBoaWNzQ29udGV4dDNEIGFuZCBHcmFwaGljc0NvbnRleHQz
REludGVybmFsIGhhcyBiZWVuIG1vdmVkIHRvCisgICAgICAgIFdlYkdyYXBoaWNzQ29udGV4dDNE
RGVmYXVsdEltcGwuIFRoZSBvbmx5IGFyZWEgd2hlcmUgdGhlIHNwbGl0dGluZyBvZgorICAgICAg
ICBsb2dpYyBpcyBsZXNzIHRoYW4gbWVjaGFuaWNhbCBpcyBHcmFwaGljc0NvbnRleHQzRDo6YmVn
aW5QYWludCgpIGFuZCBpdHMKKyAgICAgICAgY2FsbGVlcy4KKworICAgICAgICBSYW4gYWxsIFdl
YkdMIGxheW91dCB0ZXN0cyBhbmQgZGVtb3MgZnJvbSBLaHJvbm9zIHNpdGUgaW4gQ2hyb21pdW0u
CisKKyAgICAgICAgKiBXZWJLaXQuZ3lwOgorICAgICAgICAqIHB1YmxpYy9XZWJHcmFwaGljc0Nv
bnRleHQzRC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0Q6
OkF0dHJpYnV0ZXM6OkF0dHJpYnV0ZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJHcmFwaGljc0Nv
bnRleHQzRDo6fldlYkdyYXBoaWNzQ29udGV4dDNEKToKKyAgICAgICAgKiBwdWJsaWMvV2ViS2l0
Q2xpZW50Lmg6CisgICAgICAgIChXZWJLaXQ6OldlYktpdENsaWVudDo6Y3JlYXRlR3JhcGhpY3ND
b250ZXh0M0QpOgorICAgICAgICAqIHNyYy9HcmFwaGljc0NvbnRleHQzRC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpHcmFwaGljc0NvbnRleHQzRElu
dGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6On5H
cmFwaGljc0NvbnRleHQzREludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNESW50ZXJuYWw6OmluaXRpYWxpemUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0RJbnRlcm5hbDo6cGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpwbGF0Zm9ybVRleHR1cmUpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6YmVnaW5QYWludCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzREludGVybmFsOjplbmRQYWludCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpyZXNoYXBlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmJpbmRBdHRyaWJMb2Nh
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpiaW5k
VGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpi
dWZmZXJEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6
OmJ1ZmZlclN1YkRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RJbnRl
cm5hbDo6Z2V0QWN0aXZlQXR0cmliKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDNESW50ZXJuYWw6OmdldEFjdGl2ZVVuaWZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0RJbnRlcm5hbDo6Z2V0QXR0cmliTG9jYXRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6Z2V0Q29udGV4dEF0dHJpYnV0ZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6Z2V0UHJvZ3JhbUluZm9M
b2cpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6Z2V0U2hh
ZGVySW5mb0xvZyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzREludGVybmFs
OjpnZXRTaGFkZXJTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RJ
bnRlcm5hbDo6Z2V0U3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
SW50ZXJuYWw6OmdldFVuaWZvcm1Mb2NhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQzREludGVybmFsOjpyZWFkUGl4ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNESW50ZXJuYWw6OnNoYWRlclNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzREludGVybmFsOjp0ZXhJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OnRleFN1YkltYWdlMkQpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6dW5pZm9ybTFmdik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzREludGVybmFsOjp1bmlmb3JtMWl2KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OnVuaWZvcm0yZnYpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6dW5pZm9ybTJpdik6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzREludGVybmFsOjp1bmlmb3JtM2Z2KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OnVuaWZvcm0zaXYpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6dW5pZm9ybTRmdik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzREludGVybmFsOjp1bmlmb3JtNGl2
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OnVuaWZvcm1N
YXRyaXgyZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6
dW5pZm9ybU1hdHJpeDNmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRElu
dGVybmFsOjp1bmlmb3JtTWF0cml4NGZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRDo6fkdyYXBoaWNzQ29udGV4dDNEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6
OnBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0Q6OnBsYXRmb3JtVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRDo6dGV4SW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQz
RDo6dGV4U3ViSW1hZ2UyRCk6CisgICAgICAgICogc3JjL1dlYkdyYXBoaWNzQ29udGV4dDNELmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVE
ZWZhdWx0KToKKyAgICAgICAgKiBzcmMvV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbC5j
cHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJ
bXBsOjpHTENvbm5lY3Rpb246OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkdyYXBoaWNz
Q29udGV4dDNERGVmYXVsdEltcGw6OkdMQ29ubmVjdGlvbjo6fkdMQ29ubmVjdGlvbik6CisgICAg
ICAgIChXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OlZlcnRleEF0dHJp
YlBvaW50ZXJTdGF0ZTo6VmVydGV4QXR0cmliUG9pbnRlclN0YXRlKToKKyAgICAgICAgKFdlYktp
dDo6V2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6V2ViR3JhcGhpY3NDb250ZXh0M0RE
ZWZhdWx0SW1wbCk6CisgICAgICAgIChXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVs
dEltcGw6On5XZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsKToKKyAgICAgICAgKFdlYktp
dDo6V2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6aW5pdGlhbGl6ZSk6CisgICAgICAg
IChXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6Om1ha2VDb250ZXh0Q3Vy
cmVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6
OndpZHRoKToKKyAgICAgICAgKFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1w
bDo6aGVpZ2h0KToKKyAgICAgICAgKFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0
SW1wbDo6c2l6ZUluQnl0ZXMpOgorICAgICAgICAoV2ViS2l0OjpjcmVhdGVUZXh0dXJlT2JqZWN0
KToKKyAgICAgICAgKFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6cmVz
aGFwZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6
OmZsaXBWZXJ0aWNhbGx5KToKKyAgICAgICAgKFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0RE
ZWZhdWx0SW1wbDo6cmVhZEJhY2tGcmFtZWJ1ZmZlcik6CisgICAgICAgIChXZWJLaXQ6OldlYkdy
YXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OmFjdGl2ZVRleHR1cmUpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpiaW5kQnVmZmVyKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6YmluZEZyYW1lYnVm
ZmVyKToKKyAgICAgICAgKFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6
ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KToKKyAgICAgICAgKFdlYktpdDo6V2ViR3JhcGhpY3ND
b250ZXh0M0REZWZhdWx0SW1wbDo6ZHJhd0VsZW1lbnRzKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
R3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpnZW5lcmF0
ZU1pcG1hcCk6CisgICAgICAgIChXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdElt
cGw6OmdldEFjdGl2ZUF0dHJpYik6CisgICAgICAgIChXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4
dDNERGVmYXVsdEltcGw6OmdldEFjdGl2ZVVuaWZvcm0pOgorICAgICAgICAoV2ViS2l0OjpXZWJH
cmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpnZXRDb250ZXh0QXR0cmlidXRlcyk6CisgICAg
ICAgIChXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OmdldEVycm9yKToK
KyAgICAgICAgKFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6Z2V0UHJv
Z3JhbUluZm9Mb2cpOgorICAgICAgICAoV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1
bHRJbXBsOjpnZXRTaGFkZXJJbmZvTG9nKToKKyAgICAgICAgKFdlYktpdDo6V2ViR3JhcGhpY3ND
b250ZXh0M0REZWZhdWx0SW1wbDo6Z2V0U2hhZGVyU291cmNlKToKKyAgICAgICAgKFdlYktpdDo6
V2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6Z2V0U3RyaW5nKToKKyAgICAgICAgKFdl
YktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6Z2V0VmVydGV4QXR0cmliT2Zm
c2V0KToKKyAgICAgICAgKFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6
cmVsZWFzZVNoYWRlckNvbXBpbGVyKToKKyAgICAgICAgKFdlYktpdDo6V2ViR3JhcGhpY3NDb250
ZXh0M0REZWZhdWx0SW1wbDo6c2hhZGVyU291cmNlKToKKyAgICAgICAgKFdlYktpdDo6V2ViR3Jh
cGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6dmVydGV4QXR0cmliUG9pbnRlcik6CisgICAgICAg
IChXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OmNyZWF0ZUJ1ZmZlcik6
CisgICAgICAgIChXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OmNyZWF0
ZUZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0REZWZh
dWx0SW1wbDo6Y3JlYXRlUHJvZ3JhbSk6CisgICAgICAgIChXZWJLaXQ6OldlYkdyYXBoaWNzQ29u
dGV4dDNERGVmYXVsdEltcGw6OmNyZWF0ZVJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChXZWJLaXQ6
OldlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OmNyZWF0ZVRleHR1cmUpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpkZWxldGVCdWZmZXIp
OgorICAgICAgICAoV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpkZWxl
dGVGcmFtZWJ1ZmZlcik6CisgICAgICAgIChXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNERGVm
YXVsdEltcGw6OmRlbGV0ZVByb2dyYW0pOgorICAgICAgICAoV2ViS2l0OjpXZWJHcmFwaGljc0Nv
bnRleHQzRERlZmF1bHRJbXBsOjpkZWxldGVSZW5kZXJidWZmZXIpOgorICAgICAgICAoV2ViS2l0
OjpXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpkZWxldGVTaGFkZXIpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpkZWxldGVUZXh0dXJl
KToKKyAgICAgICAgKFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6c3lu
dGhlc2l6ZUdMRXJyb3IpOgorICAgICAgICAqIHNyYy9XZWJHcmFwaGljc0NvbnRleHQzRERlZmF1
bHRJbXBsLmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRERl
ZmF1bHRJbXBsOjopOgorICAgICAgICAoV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1
bHRJbXBsOjpHTENvbm5lY3Rpb246OmNob29zZUZCQ29uZmlnKToKKyAgICAgICAgKFdlYktpdDo6
V2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6R0xDb25uZWN0aW9uOjpjcmVhdGVOZXdD
b250ZXh0KToKKyAgICAgICAgKFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1w
bDo6R0xDb25uZWN0aW9uOjpjcmVhdGVQYnVmZmVyKToKKyAgICAgICAgKFdlYktpdDo6V2ViR3Jh
cGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6R0xDb25uZWN0aW9uOjpkZXN0cm95UGJ1ZmZlcik6
CisgICAgICAgIChXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OkdMQ29u
bmVjdGlvbjo6bWFrZUN1cnJlbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRl
eHQzRERlZmF1bHRJbXBsOjpHTENvbm5lY3Rpb246OmRlc3Ryb3lDb250ZXh0KToKKyAgICAgICAg
KFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6R0xDb25uZWN0aW9uOjpn
ZXRDdXJyZW50Q29udGV4dCk6CisgICAgICAgIChXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNE
RGVmYXVsdEltcGw6OkdMQ29ubmVjdGlvbjo6R0xDb25uZWN0aW9uKToKKwogMjAxMC0wMy0xMiAg
T2phbiBWYWZhaSAgPG9qYW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERh
dmlkIExldmluLgpJbmRleDogV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAJKHJldmlzaW9uIDU2MTc4KQorKysgV2ViS2l0
L2Nocm9taXVtL1dlYktpdC5neXAJKHdvcmtpbmcgY29weSkKQEAgLTEyMiw2ICsxMjIsNyBAQAog
ICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViRm9udENhY2hlLmgnLAogICAgICAgICAgICAgICAg
ICdwdWJsaWMvV2ViRm9ybUVsZW1lbnQuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJH
bHlwaENhY2hlLmgnLAorICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViR3JhcGhpY3NDb250ZXh0
M0QuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJIaXN0b3J5SXRlbS5oJywKICAgICAg
ICAgICAgICAgICAncHVibGljL1dlYkhUVFBCb2R5LmgnLAogICAgICAgICAgICAgICAgICdwdWJs
aWMvV2ViSW1hZ2UuaCcsCkBAIC0zMTIsNiArMzEzLDkgQEAKICAgICAgICAgICAgICAgICAnc3Jj
L1dlYkZyYW1lSW1wbC5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViRnJhbWVJbXBsLmgn
LAogICAgICAgICAgICAgICAgICdzcmMvV2ViR2x5cGhDYWNoZS5jcHAnLAorICAgICAgICAgICAg
ICAgICdzcmMvV2ViR3JhcGhpY3NDb250ZXh0M0QuY3BwJywKKyAgICAgICAgICAgICAgICAnc3Jj
L1dlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGwuY3BwJywKKyAgICAgICAgICAgICAgICAn
c3JjL1dlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGwuaCcsCiAgICAgICAgICAgICAgICAg
J3NyYy9XZWJIaXN0b3J5SXRlbS5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViSFRUUEJv
ZHkuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYkltYWdlQ0cuY3BwJywKSW5kZXg6IFdl
YktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViR3JhcGhpY3NDb250ZXh0M0QuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkdyYXBoaWNzQ29udGV4dDNELmgJKHJldmlzaW9u
IDApCisrKyBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkdyYXBoaWNzQ29udGV4dDNELmgJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMzAxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
KyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJHcmFwaGljc0NvbnRleHQzRF9o
CisjZGVmaW5lIFdlYkdyYXBoaWNzQ29udGV4dDNEX2gKKworI2luY2x1ZGUgIldlYkNvbW1vbi5o
IgorI2luY2x1ZGUgIldlYk5vbkNvcHlhYmxlLmgiCisjaW5jbHVkZSAiV2ViU3RyaW5nLmgiCisK
K25hbWVzcGFjZSBXZWJLaXQgeworCisvLyBUaGlzIGludGVyZmFjZSBhYnN0cmFjdHMgdGhlIG9w
ZXJhdGlvbnMgcGVyZm9ybWVkIGJ5IHRoZQorLy8gR3JhcGhpY3NDb250ZXh0M0QgaW4gb3JkZXIg
dG8gaW1wbGVtZW50IFdlYkdMLiBOZWFybHkgYWxsIG9mIHRoZQorLy8gbWV0aG9kcyBleHBvc2Vk
IG9uIHRoaXMgaW50ZXJmYWNlIG1hcCBkaXJlY3RseSB0byBlbnRyeSBwb2ludHMgaW4KKy8vIHRo
ZSBPcGVuR0wgRVMgMi4wIEFQSS4KKworY2xhc3MgV2ViR3JhcGhpY3NDb250ZXh0M0QgOiBwdWJs
aWMgV2ViTm9uQ29weWFibGUgeworcHVibGljOgorICAgIC8vIFJldHVybiB2YWx1ZSBmcm9tIGdl
dEFjdGl2ZVVuaWZvcm0gYW5kIGdldEFjdGl2ZUF0dHJpYi4KKyAgICBzdHJ1Y3QgQWN0aXZlSW5m
byB7CisgICAgICAgIFdlYlN0cmluZyBuYW1lOworICAgICAgICB1bnNpZ25lZCB0eXBlOworICAg
ICAgICBpbnQgc2l6ZTsKKyAgICB9OworCisgICAgLy8gQ29udGV4dCBjcmVhdGlvbiBhdHRyaWJ1
dGVzLgorICAgIHN0cnVjdCBBdHRyaWJ1dGVzIHsKKyAgICAgICAgQXR0cmlidXRlcygpCisgICAg
ICAgICAgICAgICAgOiBhbHBoYSh0cnVlKQorICAgICAgICAgICAgICAgICwgZGVwdGgodHJ1ZSkK
KyAgICAgICAgICAgICAgICAsIHN0ZW5jaWwodHJ1ZSkKKyAgICAgICAgICAgICAgICAsIGFudGlh
bGlhcyh0cnVlKQorICAgICAgICAgICAgICAgICwgcHJlbXVsdGlwbGllZEFscGhhKHRydWUpCisg
ICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgYWxwaGE7CisgICAgICAgIGJvb2wg
ZGVwdGg7CisgICAgICAgIGJvb2wgc3RlbmNpbDsKKyAgICAgICAgYm9vbCBhbnRpYWxpYXM7Cisg
ICAgICAgIGJvb2wgcHJlbXVsdGlwbGllZEFscGhhOworICAgIH07CisKKyAgICAvLyBUeXBlZGVm
IGZvciBzZXJ2ZXItc2lkZSBvYmplY3RzIGxpa2UgT3BlbkdMIHRleHR1cmVzIGFuZCBwcm9ncmFt
IG9iamVjdHMuCisgICAgdHlwZWRlZiB1bnNpZ25lZCBpbnQgV2ViR0xJZDsKKworICAgIC8vIFRo
aXMgZGVzdHJ1Y3RvciBuZWVkcyB0byBiZSBwdWJsaWMgc28gdGhhdCB1c2luZyBjbGFzc2VzIGNh
biBkZXN0cm95IGluc3RhbmNlcyBpZiBpbml0aWFsaXphdGlvbiBmYWlscy4KKyAgICB2aXJ0dWFs
IH5XZWJHcmFwaGljc0NvbnRleHQzRCgpIHt9CisKKyAgICAvLyBDcmVhdGVzIGEgImRlZmF1bHQi
IGltcGxlbWVudGF0aW9uIG9mIFdlYkdyYXBoaWNzQ29udGV4dDNEIHdoaWNoLCBpbgorICAgIC8v
IENocm9taXVtLCByZXF1aXJlcyB0aGUgc2FuZGJveCB0byBiZSBkaXNhYmxlZCAoc3Ryb25nbHkg
ZGlzY291cmFnZWQpLgorICAgIHN0YXRpYyBXZWJHcmFwaGljc0NvbnRleHQzRCogY3JlYXRlRGVm
YXVsdCgpOworCisgICAgLy8gSW5pdGlhbGl6ZXMgdGhlIGdyYXBoaWNzIGNvbnRleHQ7IHNob3Vs
ZCBiZSB0aGUgZmlyc3Qgb3BlcmF0aW9uIHBlcmZvcm1lZAorICAgIC8vIG9uIG5ld2x5LWNvbnN0
cnVjdGVkIGluc3RhbmNlcy4gUmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3MuCisgICAgdmlydHVhbCBi
b29sIGluaXRpYWxpemUoQXR0cmlidXRlcyBhdHRyaWJ1dGVzKSA9IDA7CisKKyAgICAvLyBNYWtl
cyB0aGUgT3BlbkdMIGNvbnRleHQgY3VycmVudCBvbiB0aGUgY3VycmVudCB0aHJlYWQuIFJldHVy
bnMgdHJ1ZSBvbgorICAgIC8vIHN1Y2Nlc3MuCisgICAgdmlydHVhbCBib29sIG1ha2VDb250ZXh0
Q3VycmVudCgpID0gMDsKKworICAgIC8vIFRoZSBzaXplIG9mIHRoZSByZWdpb24gaW50byB3aGlj
aCB0aGlzIFdlYkdyYXBoaWNzQ29udGV4dDNEIGlzIHJlbmRlcmluZy4KKyAgICAvLyBSZXR1cm5z
IHRoZSBsYXN0IHZhbHVlcyBwYXNzZWQgdG8gcmVzaGFwZSgpLgorICAgIHZpcnR1YWwgaW50IHdp
ZHRoKCkgPSAwOworICAgIHZpcnR1YWwgaW50IGhlaWdodCgpID0gMDsKKworICAgIC8vIEhlbHBl
ciB0byByZXR1cm4gdGhlIHNpemUgaW4gYnl0ZXMgb2YgT3BlbkdMIGRhdGEgdHlwZXMKKyAgICAv
LyBsaWtlIEdMX0ZMT0FULCBHTF9JTlQsIGV0Yy4KKyAgICB2aXJ0dWFsIGludCBzaXplSW5CeXRl
cyhpbnQgdHlwZSkgPSAwOworCisgICAgLy8gUmVzaXplcyB0aGUgcmVnaW9uIGludG8gd2hpY2gg
dGhpcyBXZWJHcmFwaGljc0NvbnRleHQzRCBpcyBkcmF3aW5nLgorICAgIHZpcnR1YWwgdm9pZCBy
ZXNoYXBlKGludCB3aWR0aCwgaW50IGhlaWdodCkgPSAwOworCisgICAgLy8gSGVscGVyIGZvciBz
b2Z0d2FyZSBjb21wb3NpdGluZyBwYXRoLiBSZWFkcyBiYWNrIHRoZSBmcmFtZSBidWZmZXIgaW50
bworICAgIC8vIHRoZSBtZW1vcnkgcmVnaW9uIHBvaW50ZWQgdG8gYnkgInBpeGVscyIuIEl0IGlz
IGV4cGVjdGVkIHRoYXQgdGhlIHN0b3JhZ2UKKyAgICAvLyBmb3IgInBpeGVscyIgY292ZXJzICg0
ICogd2lkdGggKiBoZWlnaHQpIGJ5dGVzLgorICAgIHZpcnR1YWwgdm9pZCByZWFkQmFja0ZyYW1l
YnVmZmVyKHVuc2lnbmVkIGNoYXIqIHBpeGVscykgPSAwOworCisgICAgLy8gU3ludGhlc2l6ZXMg
YW4gT3BlbkdMIGVycm9yIHdoaWNoIHdpbGwgYmUgcmV0dXJuZWQgZnJvbSBhCisgICAgLy8gbGF0
ZXIgY2FsbCB0byBnZXRFcnJvci4gVGhpcyBpcyB1c2VkIHRvIGVtdWxhdGUgT3BlbkdMIEVTCisg
ICAgLy8gMi4wIGJlaGF2aW9yIG9uIHRoZSBkZXNrdG9wIGFuZCB0byBlbmZvcmNlIGFkZGl0aW9u
YWwgZXJyb3IKKyAgICAvLyBjaGVja2luZyBtYW5kYXRlZCBieSBXZWJHTC4KKyAgICAvLworICAg
IC8vIFBlciB0aGUgYmVoYXZpb3Igb2YgZ2xHZXRFcnJvciwgdGhpcyBzdG9yZXMgYXQgbW9zdCBv
bmUKKyAgICAvLyBpbnN0YW5jZSBvZiBhbnkgZ2l2ZW4gZXJyb3IsIGFuZCByZXR1cm5zIHRoZW0g
ZnJvbSBjYWxscyB0bworICAgIC8vIGdldEVycm9yIGluIHRoZSBvcmRlciB0aGV5IHdlcmUgYWRk
ZWQuCisgICAgdmlydHVhbCB2b2lkIHN5bnRoZXNpemVHTEVycm9yKHVuc2lnbmVkIGxvbmcgZXJy
b3IpID0gMDsKKworICAgIC8vIFRoZSBlbnRyeSBwb2ludHMgYmVsb3cgbWFwIGRpcmVjdGx5IHRv
IHRoZSBPcGVuR0wgRVMgMi4wIEFQSS4KKyAgICAvLyBTZWU6IGh0dHA6Ly93d3cua2hyb25vcy5v
cmcvcmVnaXN0cnkvZ2xlcy8KKyAgICAvLyBhbmQ6IGh0dHA6Ly93d3cua2hyb25vcy5vcmcvb3Bl
bmdsZXMvc2RrL2RvY3MvbWFuLworICAgIHZpcnR1YWwgdm9pZCBhY3RpdmVUZXh0dXJlKHVuc2ln
bmVkIGxvbmcgdGV4dHVyZSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBhdHRhY2hTaGFkZXIoV2Vi
R0xJZCBwcm9ncmFtLCBXZWJHTElkIHNoYWRlcikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBiaW5k
QXR0cmliTG9jYXRpb24oV2ViR0xJZCBwcm9ncmFtLCB1bnNpZ25lZCBsb25nIGluZGV4LCBjb25z
dCBjaGFyKiBuYW1lKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGJpbmRCdWZmZXIodW5zaWduZWQg
bG9uZyB0YXJnZXQsIFdlYkdMSWQgYnVmZmVyKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGJpbmRG
cmFtZWJ1ZmZlcih1bnNpZ25lZCBsb25nIHRhcmdldCwgV2ViR0xJZCBmcmFtZWJ1ZmZlcikgPSAw
OworICAgIHZpcnR1YWwgdm9pZCBiaW5kUmVuZGVyYnVmZmVyKHVuc2lnbmVkIGxvbmcgdGFyZ2V0
LCBXZWJHTElkIHJlbmRlcmJ1ZmZlcikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBiaW5kVGV4dHVy
ZSh1bnNpZ25lZCBsb25nIHRhcmdldCwgV2ViR0xJZCB0ZXh0dXJlKSA9IDA7CisgICAgdmlydHVh
bCB2b2lkIGJsZW5kQ29sb3IoZG91YmxlIHJlZCwgZG91YmxlIGdyZWVuLCBkb3VibGUgYmx1ZSwg
ZG91YmxlIGFscGhhKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGJsZW5kRXF1YXRpb24odW5zaWdu
ZWQgbG9uZyBtb2RlKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGJsZW5kRXF1YXRpb25TZXBhcmF0
ZSh1bnNpZ25lZCBsb25nIG1vZGVSR0IsIHVuc2lnbmVkIGxvbmcgbW9kZUFscGhhKSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIGJsZW5kRnVuYyh1bnNpZ25lZCBsb25nIHNmYWN0b3IsIHVuc2lnbmVk
IGxvbmcgZGZhY3RvcikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBibGVuZEZ1bmNTZXBhcmF0ZSh1
bnNpZ25lZCBsb25nIHNyY1JHQiwgdW5zaWduZWQgbG9uZyBkc3RSR0IsIHVuc2lnbmVkIGxvbmcg
c3JjQWxwaGEsIHVuc2lnbmVkIGxvbmcgZHN0QWxwaGEpID0gMDsKKworICAgIHZpcnR1YWwgdm9p
ZCBidWZmZXJEYXRhKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBpbnQgc2l6ZSwgY29uc3Qgdm9pZCog
ZGF0YSwgdW5zaWduZWQgbG9uZyB1c2FnZSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBidWZmZXJT
dWJEYXRhKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBsb25nIG9mZnNldCwgaW50IHNpemUsIGNvbnN0
IHZvaWQqIGRhdGEpID0gMDsKKworICAgIHZpcnR1YWwgdW5zaWduZWQgbG9uZyBjaGVja0ZyYW1l
YnVmZmVyU3RhdHVzKHVuc2lnbmVkIGxvbmcgdGFyZ2V0KSA9IDA7CisgICAgdmlydHVhbCB2b2lk
IGNsZWFyKHVuc2lnbmVkIGxvbmcgbWFzaykgPSAwOworICAgIHZpcnR1YWwgdm9pZCBjbGVhckNv
bG9yKGRvdWJsZSByZWQsIGRvdWJsZSBncmVlbiwgZG91YmxlIGJsdWUsIGRvdWJsZSBhbHBoYSkg
PSAwOworICAgIHZpcnR1YWwgdm9pZCBjbGVhckRlcHRoKGRvdWJsZSBkZXB0aCkgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBjbGVhclN0ZW5jaWwobG9uZyBzKSA9IDA7CisgICAgdmlydHVhbCB2b2lk
IGNvbG9yTWFzayhib29sIHJlZCwgYm9vbCBncmVlbiwgYm9vbCBibHVlLCBib29sIGFscGhhKSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIGNvbXBpbGVTaGFkZXIoV2ViR0xJZCBzaGFkZXIpID0gMDsK
KworICAgIHZpcnR1YWwgdm9pZCBjb3B5VGV4SW1hZ2UyRCh1bnNpZ25lZCBsb25nIHRhcmdldCwg
bG9uZyBsZXZlbCwgdW5zaWduZWQgbG9uZyBpbnRlcm5hbGZvcm1hdCwgbG9uZyB4LCBsb25nIHks
IHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0LCBsb25nIGJvcmRlcikg
PSAwOworICAgIHZpcnR1YWwgdm9pZCBjb3B5VGV4U3ViSW1hZ2UyRCh1bnNpZ25lZCBsb25nIHRh
cmdldCwgbG9uZyBsZXZlbCwgbG9uZyB4b2Zmc2V0LCBsb25nIHlvZmZzZXQsIGxvbmcgeCwgbG9u
ZyB5LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCkgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBjdWxsRmFjZSh1bnNpZ25lZCBsb25nIG1vZGUpID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgZGVwdGhGdW5jKHVuc2lnbmVkIGxvbmcgZnVuYykgPSAwOworICAgIHZpcnR1YWwg
dm9pZCBkZXB0aE1hc2soYm9vbCBmbGFnKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRlcHRoUmFu
Z2UoZG91YmxlIHpOZWFyLCBkb3VibGUgekZhcikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkZXRh
Y2hTaGFkZXIoV2ViR0xJZCBwcm9ncmFtLCBXZWJHTElkIHNoYWRlcikgPSAwOworICAgIHZpcnR1
YWwgdm9pZCBkaXNhYmxlKHVuc2lnbmVkIGxvbmcgY2FwKSA9IDA7CisgICAgdmlydHVhbCB2b2lk
IGRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheSh1bnNpZ25lZCBsb25nIGluZGV4KSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIGRyYXdBcnJheXModW5zaWduZWQgbG9uZyBtb2RlLCBsb25nIGZpcnN0LCBs
b25nIGNvdW50KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRyYXdFbGVtZW50cyh1bnNpZ25lZCBs
b25nIG1vZGUsIHVuc2lnbmVkIGxvbmcgY291bnQsIHVuc2lnbmVkIGxvbmcgdHlwZSwgbG9uZyBv
ZmZzZXQpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBlbmFibGUodW5zaWduZWQgbG9uZyBjYXAp
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZW5hYmxlVmVydGV4QXR0cmliQXJyYXkodW5zaWduZWQg
bG9uZyBpbmRleCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBmaW5pc2goKSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIGZsdXNoKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBmcmFtZWJ1ZmZlclJlbmRl
cmJ1ZmZlcih1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBhdHRhY2htZW50LCB1
bnNpZ25lZCBsb25nIHJlbmRlcmJ1ZmZlcnRhcmdldCwgV2ViR0xJZCByZW5kZXJidWZmZXIpID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgZnJhbWVidWZmZXJUZXh0dXJlMkQodW5zaWduZWQgbG9uZyB0
YXJnZXQsIHVuc2lnbmVkIGxvbmcgYXR0YWNobWVudCwgdW5zaWduZWQgbG9uZyB0ZXh0YXJnZXQs
IFdlYkdMSWQgdGV4dHVyZSwgbG9uZyBsZXZlbCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBmcm9u
dEZhY2UodW5zaWduZWQgbG9uZyBtb2RlKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGdlbmVyYXRl
TWlwbWFwKHVuc2lnbmVkIGxvbmcgdGFyZ2V0KSA9IDA7CisKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0
QWN0aXZlQXR0cmliKFdlYkdMSWQgcHJvZ3JhbSwgdW5zaWduZWQgbG9uZyBpbmRleCwgQWN0aXZl
SW5mbyYpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0QWN0aXZlVW5pZm9ybShXZWJHTElkIHBy
b2dyYW0sIHVuc2lnbmVkIGxvbmcgaW5kZXgsIEFjdGl2ZUluZm8mKSA9IDA7CisKKyAgICB2aXJ0
dWFsIGludCAgZ2V0QXR0cmliTG9jYXRpb24oV2ViR0xJZCBwcm9ncmFtLCBjb25zdCBjaGFyKiBu
YW1lKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0Qm9vbGVhbnYodW5zaWduZWQgbG9uZyBw
bmFtZSwgdW5zaWduZWQgY2hhciogdmFsdWUpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBnZXRC
dWZmZXJQYXJhbWV0ZXJpdih1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBwbmFt
ZSwgaW50KiB2YWx1ZSkgPSAwOworCisgICAgdmlydHVhbCBBdHRyaWJ1dGVzIGdldENvbnRleHRB
dHRyaWJ1dGVzKCkgPSAwOworCisgICAgdmlydHVhbCB1bnNpZ25lZCBsb25nIGdldEVycm9yKCkg
PSAwOworCisgICAgdmlydHVhbCB2b2lkIGdldEZsb2F0dih1bnNpZ25lZCBsb25nIHBuYW1lLCBm
bG9hdCogdmFsdWUpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBnZXRGcmFtZWJ1ZmZlckF0dGFj
aG1lbnRQYXJhbWV0ZXJpdih1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBhdHRh
Y2htZW50LCB1bnNpZ25lZCBsb25nIHBuYW1lLCBpbnQqIHZhbHVlKSA9IDA7CisKKyAgICB2aXJ0
dWFsIHZvaWQgZ2V0SW50ZWdlcnYodW5zaWduZWQgbG9uZyBwbmFtZSwgaW50KiB2YWx1ZSkgPSAw
OworCisgICAgdmlydHVhbCB2b2lkIGdldFByb2dyYW1pdihXZWJHTElkIHByb2dyYW0sIHVuc2ln
bmVkIGxvbmcgcG5hbWUsIGludCogdmFsdWUpID0gMDsKKworICAgIHZpcnR1YWwgV2ViU3RyaW5n
IGdldFByb2dyYW1JbmZvTG9nKFdlYkdMSWQgcHJvZ3JhbSkgPSAwOworCisgICAgdmlydHVhbCB2
b2lkIGdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcml2KHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNp
Z25lZCBsb25nIHBuYW1lLCBpbnQqIHZhbHVlKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0
U2hhZGVyaXYoV2ViR0xJZCBzaGFkZXIsIHVuc2lnbmVkIGxvbmcgcG5hbWUsIGludCogdmFsdWUp
ID0gMDsKKworICAgIHZpcnR1YWwgV2ViU3RyaW5nIGdldFNoYWRlckluZm9Mb2coV2ViR0xJZCBz
aGFkZXIpID0gMDsKKworICAgIC8vIFRCRAorICAgIC8vIHZvaWQgZ2xHZXRTaGFkZXJQcmVjaXNp
b25Gb3JtYXQgKEdMZW51bSBzaGFkZXJ0eXBlLCBHTGVudW0gcHJlY2lzaW9udHlwZSwgR0xpbnQq
IHJhbmdlLCBHTGludCogcHJlY2lzaW9uKTsKKworICAgIHZpcnR1YWwgV2ViU3RyaW5nIGdldFNo
YWRlclNvdXJjZShXZWJHTElkIHNoYWRlcikgPSAwOworICAgIHZpcnR1YWwgV2ViU3RyaW5nIGdl
dFN0cmluZyh1bnNpZ25lZCBsb25nIG5hbWUpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBnZXRU
ZXhQYXJhbWV0ZXJmdih1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBwbmFtZSwg
ZmxvYXQqIHZhbHVlKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGdldFRleFBhcmFtZXRlcml2KHVu
c2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIHBuYW1lLCBpbnQqIHZhbHVlKSA9IDA7
CisKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0VW5pZm9ybWZ2KFdlYkdMSWQgcHJvZ3JhbSwgbG9uZyBs
b2NhdGlvbiwgZmxvYXQqIHZhbHVlKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGdldFVuaWZvcm1p
dihXZWJHTElkIHByb2dyYW0sIGxvbmcgbG9jYXRpb24sIGludCogdmFsdWUpID0gMDsKKworICAg
IHZpcnR1YWwgbG9uZyBnZXRVbmlmb3JtTG9jYXRpb24oV2ViR0xJZCBwcm9ncmFtLCBjb25zdCBj
aGFyKiBuYW1lKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0VmVydGV4QXR0cmliZnYodW5z
aWduZWQgbG9uZyBpbmRleCwgdW5zaWduZWQgbG9uZyBwbmFtZSwgZmxvYXQqIHZhbHVlKSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIGdldFZlcnRleEF0dHJpYml2KHVuc2lnbmVkIGxvbmcgaW5kZXgs
IHVuc2lnbmVkIGxvbmcgcG5hbWUsIGludCogdmFsdWUpID0gMDsKKworICAgIHZpcnR1YWwgbG9u
ZyBnZXRWZXJ0ZXhBdHRyaWJPZmZzZXQodW5zaWduZWQgbG9uZyBpbmRleCwgdW5zaWduZWQgbG9u
ZyBwbmFtZSkgPSAwOworCisgICAgdmlydHVhbCB2b2lkIGhpbnQodW5zaWduZWQgbG9uZyB0YXJn
ZXQsIHVuc2lnbmVkIGxvbmcgbW9kZSkgPSAwOworICAgIHZpcnR1YWwgYm9vbCBpc0J1ZmZlcihX
ZWJHTElkIGJ1ZmZlcikgPSAwOworICAgIHZpcnR1YWwgYm9vbCBpc0VuYWJsZWQodW5zaWduZWQg
bG9uZyBjYXApID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNGcmFtZWJ1ZmZlcihXZWJHTElkIGZy
YW1lYnVmZmVyKSA9IDA7CisgICAgdmlydHVhbCBib29sIGlzUHJvZ3JhbShXZWJHTElkIHByb2dy
YW0pID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNSZW5kZXJidWZmZXIoV2ViR0xJZCByZW5kZXJi
dWZmZXIpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNTaGFkZXIoV2ViR0xJZCBzaGFkZXIpID0g
MDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNUZXh0dXJlKFdlYkdMSWQgdGV4dHVyZSkgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBsaW5lV2lkdGgoZG91YmxlKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGxp
bmtQcm9ncmFtKFdlYkdMSWQgcHJvZ3JhbSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBwaXhlbFN0
b3JlaSh1bnNpZ25lZCBsb25nIHBuYW1lLCBsb25nIHBhcmFtKSA9IDA7CisgICAgdmlydHVhbCB2
b2lkIHBvbHlnb25PZmZzZXQoZG91YmxlIGZhY3RvciwgZG91YmxlIHVuaXRzKSA9IDA7CisKKyAg
ICB2aXJ0dWFsIHZvaWQgcmVhZFBpeGVscyhsb25nIHgsIGxvbmcgeSwgdW5zaWduZWQgbG9uZyB3
aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQsIHVuc2lnbmVkIGxvbmcgZm9ybWF0LCB1bnNpZ25l
ZCBsb25nIHR5cGUsIHZvaWQqIHBpeGVscykgPSAwOworCisgICAgdmlydHVhbCB2b2lkIHJlbGVh
c2VTaGFkZXJDb21waWxlcigpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVuZGVyYnVmZmVyU3Rv
cmFnZSh1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBpbnRlcm5hbGZvcm1hdCwg
dW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQpID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgc2FtcGxlQ292ZXJhZ2UoZG91YmxlIHZhbHVlLCBib29sIGludmVydCkgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCBzY2lzc29yKGxvbmcgeCwgbG9uZyB5LCB1bnNpZ25lZCBsb25nIHdp
ZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzaGFkZXJT
b3VyY2UoV2ViR0xJZCBzaGFkZXIsIGNvbnN0IGNoYXIqIHN0cmluZykgPSAwOworICAgIHZpcnR1
YWwgdm9pZCBzdGVuY2lsRnVuYyh1bnNpZ25lZCBsb25nIGZ1bmMsIGxvbmcgcmVmLCB1bnNpZ25l
ZCBsb25nIG1hc2spID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc3RlbmNpbEZ1bmNTZXBhcmF0ZSh1
bnNpZ25lZCBsb25nIGZhY2UsIHVuc2lnbmVkIGxvbmcgZnVuYywgbG9uZyByZWYsIHVuc2lnbmVk
IGxvbmcgbWFzaykgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzdGVuY2lsTWFzayh1bnNpZ25lZCBs
b25nIG1hc2spID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc3RlbmNpbE1hc2tTZXBhcmF0ZSh1bnNp
Z25lZCBsb25nIGZhY2UsIHVuc2lnbmVkIGxvbmcgbWFzaykgPSAwOworICAgIHZpcnR1YWwgdm9p
ZCBzdGVuY2lsT3AodW5zaWduZWQgbG9uZyBmYWlsLCB1bnNpZ25lZCBsb25nIHpmYWlsLCB1bnNp
Z25lZCBsb25nIHpwYXNzKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHN0ZW5jaWxPcFNlcGFyYXRl
KHVuc2lnbmVkIGxvbmcgZmFjZSwgdW5zaWduZWQgbG9uZyBmYWlsLCB1bnNpZ25lZCBsb25nIHpm
YWlsLCB1bnNpZ25lZCBsb25nIHpwYXNzKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgdGV4SW1h
Z2UyRCh1bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVkIGxldmVsLCB1bnNpZ25lZCBpbnRlcm5hbGZv
cm1hdCwgdW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCwgdW5zaWduZWQgYm9yZGVyLCB1
bnNpZ25lZCBmb3JtYXQsIHVuc2lnbmVkIHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVscykgPSAwOwor
CisgICAgdmlydHVhbCB2b2lkIHRleFBhcmFtZXRlcmYodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25l
ZCBwbmFtZSwgZmxvYXQgcGFyYW0pID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdGV4UGFyYW1ldGVy
aSh1bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVkIHBuYW1lLCBpbnQgcGFyYW0pID0gMDsKKworICAg
IHZpcnR1YWwgdm9pZCB0ZXhTdWJJbWFnZTJEKHVuc2lnbmVkIHRhcmdldCwgdW5zaWduZWQgbGV2
ZWwsIHVuc2lnbmVkIHhvZmZzZXQsIHVuc2lnbmVkIHlvZmZzZXQsIHVuc2lnbmVkIHdpZHRoLCB1
bnNpZ25lZCBoZWlnaHQsIHVuc2lnbmVkIGZvcm1hdCwgdW5zaWduZWQgdHlwZSwgY29uc3Qgdm9p
ZCogcGl4ZWxzKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgdW5pZm9ybTFmKGxvbmcgbG9jYXRp
b24sIGZsb2F0IHgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdW5pZm9ybTFmdihsb25nIGxvY2F0
aW9uLCBpbnQgY291bnQsIGZsb2F0KiB2KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHVuaWZvcm0x
aShsb25nIGxvY2F0aW9uLCBpbnQgeCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCB1bmlmb3JtMWl2
KGxvbmcgbG9jYXRpb24sIGludCBjb3VudCwgaW50KiB2KSA9IDA7CisgICAgdmlydHVhbCB2b2lk
IHVuaWZvcm0yZihsb25nIGxvY2F0aW9uLCBmbG9hdCB4LCBmbG9hdCB5KSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIHVuaWZvcm0yZnYobG9uZyBsb2NhdGlvbiwgaW50IGNvdW50LCBmbG9hdCogdikg
PSAwOworICAgIHZpcnR1YWwgdm9pZCB1bmlmb3JtMmkobG9uZyBsb2NhdGlvbiwgaW50IHgsIGlu
dCB5KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHVuaWZvcm0yaXYobG9uZyBsb2NhdGlvbiwgaW50
IGNvdW50LCBpbnQqIHYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdW5pZm9ybTNmKGxvbmcgbG9j
YXRpb24sIGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHopID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
dW5pZm9ybTNmdihsb25nIGxvY2F0aW9uLCBpbnQgY291bnQsIGZsb2F0KiB2KSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIHVuaWZvcm0zaShsb25nIGxvY2F0aW9uLCBpbnQgeCwgaW50IHksIGludCB6
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHVuaWZvcm0zaXYobG9uZyBsb2NhdGlvbiwgaW50IGNv
dW50LCBpbnQqIHYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdW5pZm9ybTRmKGxvbmcgbG9jYXRp
b24sIGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHosIGZsb2F0IHcpID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgdW5pZm9ybTRmdihsb25nIGxvY2F0aW9uLCBpbnQgY291bnQsIGZsb2F0KiB2KSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIHVuaWZvcm00aShsb25nIGxvY2F0aW9uLCBpbnQgeCwgaW50IHks
IGludCB6LCBpbnQgdykgPSAwOworICAgIHZpcnR1YWwgdm9pZCB1bmlmb3JtNGl2KGxvbmcgbG9j
YXRpb24sIGludCBjb3VudCwgaW50KiB2KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHVuaWZvcm1N
YXRyaXgyZnYobG9uZyBsb2NhdGlvbiwgaW50IGNvdW50LCBib29sIHRyYW5zcG9zZSwgY29uc3Qg
ZmxvYXQqIHZhbHVlKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHVuaWZvcm1NYXRyaXgzZnYobG9u
ZyBsb2NhdGlvbiwgaW50IGNvdW50LCBib29sIHRyYW5zcG9zZSwgY29uc3QgZmxvYXQqIHZhbHVl
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHVuaWZvcm1NYXRyaXg0ZnYobG9uZyBsb2NhdGlvbiwg
aW50IGNvdW50LCBib29sIHRyYW5zcG9zZSwgY29uc3QgZmxvYXQqIHZhbHVlKSA9IDA7CisKKyAg
ICB2aXJ0dWFsIHZvaWQgdXNlUHJvZ3JhbShXZWJHTElkIHByb2dyYW0pID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgdmFsaWRhdGVQcm9ncmFtKFdlYkdMSWQgcHJvZ3JhbSkgPSAwOworCisgICAgdmly
dHVhbCB2b2lkIHZlcnRleEF0dHJpYjFmKHVuc2lnbmVkIGxvbmcgaW5keCwgZmxvYXQgeCkgPSAw
OworICAgIHZpcnR1YWwgdm9pZCB2ZXJ0ZXhBdHRyaWIxZnYodW5zaWduZWQgbG9uZyBpbmR4LCBj
b25zdCBmbG9hdCogdmFsdWVzKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHZlcnRleEF0dHJpYjJm
KHVuc2lnbmVkIGxvbmcgaW5keCwgZmxvYXQgeCwgZmxvYXQgeSkgPSAwOworICAgIHZpcnR1YWwg
dm9pZCB2ZXJ0ZXhBdHRyaWIyZnYodW5zaWduZWQgbG9uZyBpbmR4LCBjb25zdCBmbG9hdCogdmFs
dWVzKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHZlcnRleEF0dHJpYjNmKHVuc2lnbmVkIGxvbmcg
aW5keCwgZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgeikgPSAwOworICAgIHZpcnR1YWwgdm9pZCB2
ZXJ0ZXhBdHRyaWIzZnYodW5zaWduZWQgbG9uZyBpbmR4LCBjb25zdCBmbG9hdCogdmFsdWVzKSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIHZlcnRleEF0dHJpYjRmKHVuc2lnbmVkIGxvbmcgaW5keCwg
ZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgeiwgZmxvYXQgdykgPSAwOworICAgIHZpcnR1YWwgdm9p
ZCB2ZXJ0ZXhBdHRyaWI0ZnYodW5zaWduZWQgbG9uZyBpbmR4LCBjb25zdCBmbG9hdCogdmFsdWVz
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHZlcnRleEF0dHJpYlBvaW50ZXIodW5zaWduZWQgbG9u
ZyBpbmR4LCBpbnQgc2l6ZSwgaW50IHR5cGUsIGJvb2wgbm9ybWFsaXplZCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHN0cmlkZSwgdW5zaWduZWQg
bG9uZyBvZmZzZXQpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCB2aWV3cG9ydChsb25nIHgsIGxv
bmcgeSwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQpID0gMDsKKwor
ICAgIC8vIFN1cHBvcnQgZm9yIGJ1ZmZlciBjcmVhdGlvbiBhbmQgZGVsZXRpb24uCisgICAgdmly
dHVhbCB1bnNpZ25lZCBjcmVhdGVCdWZmZXIoKSA9IDA7CisgICAgdmlydHVhbCB1bnNpZ25lZCBj
cmVhdGVGcmFtZWJ1ZmZlcigpID0gMDsKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGNyZWF0ZVByb2dy
YW0oKSA9IDA7CisgICAgdmlydHVhbCB1bnNpZ25lZCBjcmVhdGVSZW5kZXJidWZmZXIoKSA9IDA7
CisgICAgdmlydHVhbCB1bnNpZ25lZCBjcmVhdGVTaGFkZXIodW5zaWduZWQgbG9uZykgPSAwOwor
ICAgIHZpcnR1YWwgdW5zaWduZWQgY3JlYXRlVGV4dHVyZSgpID0gMDsKKworICAgIHZpcnR1YWwg
dm9pZCBkZWxldGVCdWZmZXIodW5zaWduZWQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRl
RnJhbWVidWZmZXIodW5zaWduZWQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlUHJvZ3Jh
bSh1bnNpZ25lZCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVSZW5kZXJidWZmZXIodW5z
aWduZWQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlU2hhZGVyKHVuc2lnbmVkKSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZVRleHR1cmUodW5zaWduZWQpID0gMDsKK307CisKK30g
Ly8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9wdWJs
aWMvV2ViS2l0Q2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9X
ZWJLaXRDbGllbnQuaAkocmV2aXNpb24gNTYxNzgpCisrKyBXZWJLaXQvY2hyb21pdW0vcHVibGlj
L1dlYktpdENsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSw2ICs0OSw3IEBAIGNsYXNzIFdl
YkFwcGxpY2F0aW9uQ2FjaGVIb3N0OwogY2xhc3MgV2ViQXBwbGljYXRpb25DYWNoZUhvc3RDbGll
bnQ7CiBjbGFzcyBXZWJDbGlwYm9hcmQ7CiBjbGFzcyBXZWJDb29raWVKYXI7CitjbGFzcyBXZWJH
cmFwaGljc0NvbnRleHQzRDsKIGNsYXNzIFdlYkluZGV4ZWREYXRhYmFzZTsKIGNsYXNzIFdlYk1l
c3NhZ2VQb3J0Q2hhbm5lbDsKIGNsYXNzIFdlYk1pbWVSZWdpc3RyeTsKQEAgLTI2OSw2ICsyNzAs
MTIgQEAgcHVibGljOgogICAgIC8vIENhbGxhYmxlIGZyb20gYSBiYWNrZ3JvdW5kIFdlYktpdCB0
aHJlYWQuCiAgICAgdmlydHVhbCB2b2lkIGNhbGxPbk1haW5UaHJlYWQodm9pZCAoKmZ1bmMpKCkp
IHsgfQogCisgICAgLy8gV2ViR0wgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIC8vIE1heSByZXR1cm4gbnVsbCBpZiBX
ZWJHTCBpcyBub3Qgc3VwcG9ydGVkLgorICAgIC8vIFJldHVybnMgbmV3bHkgYWxsb2NhdGVkIFdl
YkdyYXBoaWNzQ29udGV4dDNEIGluc3RhbmNlOyBjYWxsZXIgbXVzdCBkZWxldGUuCisgICAgdmly
dHVhbCBXZWJHcmFwaGljc0NvbnRleHQzRCogY3JlYXRlR3JhcGhpY3NDb250ZXh0M0QoKSB7IHJl
dHVybiAwOyB9CisKIHByb3RlY3RlZDoKICAgICB+V2ViS2l0Q2xpZW50KCkgeyB9CiB9OwpJbmRl
eDogV2ViS2l0L2Nocm9taXVtL3NyYy9HcmFwaGljc0NvbnRleHQzRC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViS2l0L2Nocm9taXVtL3NyYy9HcmFwaGljc0NvbnRleHQzRC5jcHAJKHJldmlzaW9uIDU2
MTc4KQorKysgV2ViS2l0L2Nocm9taXVtL3NyYy9HcmFwaGljc0NvbnRleHQzRC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM0LDEzICszNCwxMiBAQAogCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
M0QuaCIKIAotI2luY2x1ZGUgIkNhY2hlZEltYWdlLmgiCiAjaW5jbHVkZSAiQ1N0cmluZy5oIgor
I2luY2x1ZGUgIkNhY2hlZEltYWdlLmgiCiAjaW5jbHVkZSAiSFRNTENhbnZhc0VsZW1lbnQuaCIK
ICNpbmNsdWRlICJIVE1MSW1hZ2VFbGVtZW50LmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIK
ICNpbmNsdWRlICJJbWFnZURhdGEuaCIKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2lu
Y2x1ZGUgIldlYkdMQnVmZmVyLmgiCiAjaW5jbHVkZSAiV2ViR0xCeXRlQXJyYXkuaCIKICNpbmNs
dWRlICJXZWJHTEZsb2F0QXJyYXkuaCIKQEAgLTUyLDM5ICs1MSw0MiBAQAogI2luY2x1ZGUgIldl
YkdMU2hhZGVyLmgiCiAjaW5jbHVkZSAiV2ViR0xUZXh0dXJlLmgiCiAjaW5jbHVkZSAiV2ViR0xV
bnNpZ25lZEJ5dGVBcnJheS5oIgorI2luY2x1ZGUgIldlYkdyYXBoaWNzQ29udGV4dDNELmgiCisj
aW5jbHVkZSAiV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbC5oIgorI2luY2x1ZGUgIldl
YktpdC5oIgorI2luY2x1ZGUgIldlYktpdENsaWVudC5oIgogCiAjaW5jbHVkZSA8c3RkaW8uaD4K
ICNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgogCi0jaWYgT1MoV0lORE9XUykKLSNpbmNsdWRl
IDx3aW5kb3dzLmg+Ci0jZW5kaWYKLQotI2luY2x1ZGUgIkdML2dsZXcuaCIKLQogI2lmIFBMQVRG
T1JNKENHKQogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgPENvcmVHcmFw
aGljcy9DR0NvbnRleHQuaD4KICNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ0dJbWFnZS5oPgotI2lu
Y2x1ZGUgPE9wZW5HTC9PcGVuR0wuaD4KLSNlbHNlCi0jZGVmaW5lIEZMSVBfRlJBTUVCVUZGRVJf
VkVSVElDQUxMWQotI2VuZGlmCi0KLSNpZiBPUyhEQVJXSU4pCi0jZGVmaW5lIFVTRV9URVhUVVJF
X1JFQ1RBTkdMRV9GT1JfRlJBTUVCVUZGRVIKICNlbmRpZgogCi0jaWYgT1MoTElOVVgpCi0jaW5j
bHVkZSA8ZGxmY24uaD4KLSNpbmNsdWRlICJHTC9nbHhldy5oIgotI2VuZGlmCisvLyB1c2luZyBu
YW1lc3BhY2Ugc3RkOwogCi11c2luZyBuYW1lc3BhY2Ugc3RkOworLy8gVGhlcmUgYXJlIHR3byBs
ZXZlbHMgb2YgZGVsZWdhdGlvbiBpbiB0aGlzIGZpbGU6CisvLworLy8gICAxLiBHcmFwaGljc0Nv
bnRleHQzRCBkZWxlZ2F0ZXMgdG8gR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbC4gVGhpcyBpcyBk
b25lCisvLyAgICAgIHNvIHRoYXQgd2UgaGF2ZSBzb21lIHBsYWNlIHRvIHN0b3JlIGRhdGEgbWVt
YmVycyBjb21tb24gYW1vbmcKKy8vICAgICAgaW1wbGVtZW50YXRpb25zOyBHcmFwaGljc0NvbnRl
eHQzRCBvbmx5IHByb3ZpZGVzIHVzIHRoZSBtX2ludGVybmFsCisvLyAgICAgIHBvaW50ZXIuIFdl
IGFsd2F5cyBkZWxlZ2F0ZSB0byB0aGUgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbC4gV2hpbGUg
d2UKKy8vICAgICAgY291bGQgc2lkZXN0ZXAgaXQgYW5kIGdvIGRpcmVjdGx5IHRvIHRoZSBXZWJH
cmFwaGljc0NvbnRleHQzRCBpbiBzb21lCisvLyAgICAgIGNhc2VzLCBpdCBpcyBiZXR0ZXIgZm9y
IGNvbnNpc3RlbmN5IHRvIGFsd2F5cyBkZWxlZ2F0ZSB0aHJvdWdoIGl0LgorLy8KKy8vICAgMi4g
R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbCBkZWxlZ2F0ZXMgdG8gYW4gaW1wbGVtZW50YXRpb24g
b2YKKy8vICAgICAgV2ViR3JhcGhpY3NDb250ZXh0M0QuIFRoaXMgaXMgZG9uZSBzbyB3ZSBoYXZl
IGEgcGxhY2UgdG8gaW5qZWN0IG91cgorLy8gICAgICBjb21tYW5kIGJ1ZmZlciBpbXBsZW1lbnRh
dGlvbi4KKy8vCisvLyBUaGUgbGVnYWN5LCBpbi1wcm9jZXNzLCBpbXBsZW1lbnRhdGlvbiB1c2Vz
IFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGwuCisvLyBUaGUgY29tbWFuZCBidWZmZXIg
aW1wbGVtZW50YXRpb24gd2lsbCB1c2UgYSB0by1iZS1kZWNpZGVkIGNsYXNzIGluIENocm9tZS4K
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0vLyBHcmFwaGljc0NvbnRleHQzREludGVybmFsIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLy0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KKy8vIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwKIAogLy8gVW5jb21tZW50
IHRoaXMgdG8gcmVuZGVyIHRvIGEgc2VwYXJhdGUgd2luZG93IGZvciBkZWJ1Z2dpbmcKIC8vICNk
ZWZpbmUgUkVOREVSX1RPX0RFQlVHR0lOR19XSU5ET1cKQEAgLTkzLDgzICs5NSwyMDcgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBHcmFwaGljc0NvbnRleHQzREludGVybmFsIHsKIHB1
YmxpYzoKLSAgICBHcmFwaGljc0NvbnRleHQzREludGVybmFsKEdyYXBoaWNzQ29udGV4dDNEOjpB
dHRyaWJ1dGVzIGF0dHJzKTsKKyAgICBHcmFwaGljc0NvbnRleHQzREludGVybmFsKCk7CiAgICAg
fkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwoKTsKIAotICAgIGJvb2wgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgYm9vbCBpbml0aWFsaXplKEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVz
IGF0dHJzKTsKIAogICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QgcGxhdGZvcm1HcmFwaGlj
c0NvbnRleHQzRCgpIGNvbnN0OwogICAgIFBsYXRmb3JtM0RPYmplY3QgcGxhdGZvcm1UZXh0dXJl
KCkgY29uc3Q7CiAKKyAgICBib29sIG1ha2VDb250ZXh0Q3VycmVudCgpOworCisgICAgaW50IHNp
emVJbkJ5dGVzKGludCB0eXBlKTsKKwogICAgIHZvaWQgcmVzaGFwZShpbnQgd2lkdGgsIGludCBo
ZWlnaHQpOwogCiAgICAgdm9pZCBiZWdpblBhaW50KFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29u
dGV4dCk7CisgICAgdm9pZCBlbmRQYWludCgpOwogCi0gICAgYm9vbCB2YWxpZGF0ZVRleHR1cmVU
YXJnZXQoaW50IHRhcmdldCk7Ci0gICAgYm9vbCB2YWxpZGF0ZVRleHR1cmVQYXJhbWV0ZXIoaW50
IHBhcmFtKTsKLQorICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIEVudHJ5IHBvaW50cyBmb3Ig
V2ViR0wuCisgICAgLy8KICAgICB2b2lkIGFjdGl2ZVRleHR1cmUodW5zaWduZWQgbG9uZyB0ZXh0
dXJlKTsKLSAgICB2b2lkIGJpbmRCdWZmZXIodW5zaWduZWQgbG9uZyB0YXJnZXQsCi0gICAgICAg
ICAgICAgICAgICAgIFdlYkdMQnVmZmVyKiBidWZmZXIpOwotICAgIHZvaWQgYmluZEZyYW1lYnVm
ZmVyKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgIFdlYkdM
RnJhbWVidWZmZXIqIGZyYW1lYnVmZmVyKTsKLSAgICB2b2lkIGJpbmRUZXh0dXJlKHVuc2lnbmVk
IGxvbmcgdGFyZ2V0LAotICAgICAgICAgICAgICAgICAgICAgV2ViR0xUZXh0dXJlKiB0ZXh0dXJl
KTsKLSAgICB2b2lkIGJ1ZmZlckRhdGFJbXBsKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBpbnQgc2l6
ZSwgY29uc3Qgdm9pZCogZGF0YSwgdW5zaWduZWQgbG9uZyB1c2FnZSk7CisgICAgdm9pZCBhdHRh
Y2hTaGFkZXIoV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBXZWJHTFNoYWRlciogc2hhZGVyKTsKKyAg
ICB2b2lkIGJpbmRBdHRyaWJMb2NhdGlvbihXZWJHTFByb2dyYW0qLCB1bnNpZ25lZCBsb25nIGlu
ZGV4LCBjb25zdCBTdHJpbmcmIG5hbWUpOworICAgIHZvaWQgYmluZEJ1ZmZlcih1bnNpZ25lZCBs
b25nIHRhcmdldCwgV2ViR0xCdWZmZXIqKTsKKyAgICB2b2lkIGJpbmRGcmFtZWJ1ZmZlcih1bnNp
Z25lZCBsb25nIHRhcmdldCwgV2ViR0xGcmFtZWJ1ZmZlciopOworICAgIHZvaWQgYmluZFJlbmRl
cmJ1ZmZlcih1bnNpZ25lZCBsb25nIHRhcmdldCwgV2ViR0xSZW5kZXJidWZmZXIqKTsKKyAgICB2
b2lkIGJpbmRUZXh0dXJlKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBXZWJHTFRleHR1cmUqIHRleHR1
cmUpOworICAgIHZvaWQgYmxlbmRDb2xvcihkb3VibGUgcmVkLCBkb3VibGUgZ3JlZW4sIGRvdWJs
ZSBibHVlLCBkb3VibGUgYWxwaGEpOworICAgIHZvaWQgYmxlbmRFcXVhdGlvbih1bnNpZ25lZCBs
b25nIG1vZGUpOworICAgIHZvaWQgYmxlbmRFcXVhdGlvblNlcGFyYXRlKHVuc2lnbmVkIGxvbmcg
bW9kZVJHQiwgdW5zaWduZWQgbG9uZyBtb2RlQWxwaGEpOworICAgIHZvaWQgYmxlbmRGdW5jKHVu
c2lnbmVkIGxvbmcgc2ZhY3RvciwgdW5zaWduZWQgbG9uZyBkZmFjdG9yKTsKKyAgICB2b2lkIGJs
ZW5kRnVuY1NlcGFyYXRlKHVuc2lnbmVkIGxvbmcgc3JjUkdCLCB1bnNpZ25lZCBsb25nIGRzdFJH
QiwgdW5zaWduZWQgbG9uZyBzcmNBbHBoYSwgdW5zaWduZWQgbG9uZyBkc3RBbHBoYSk7CisKKyAg
ICB2b2lkIGJ1ZmZlckRhdGEodW5zaWduZWQgbG9uZyB0YXJnZXQsIGludCBzaXplLCB1bnNpZ25l
ZCBsb25nIHVzYWdlKTsKKyAgICB2b2lkIGJ1ZmZlckRhdGEodW5zaWduZWQgbG9uZyB0YXJnZXQs
IFdlYkdMQXJyYXkqIGRhdGEsIHVuc2lnbmVkIGxvbmcgdXNhZ2UpOworICAgIHZvaWQgYnVmZmVy
U3ViRGF0YSh1bnNpZ25lZCBsb25nIHRhcmdldCwgbG9uZyBvZmZzZXQsIFdlYkdMQXJyYXkqIGRh
dGEpOworCisgICAgdW5zaWduZWQgbG9uZyBjaGVja0ZyYW1lYnVmZmVyU3RhdHVzKHVuc2lnbmVk
IGxvbmcgdGFyZ2V0KTsKKyAgICB2b2lkIGNsZWFyKHVuc2lnbmVkIGxvbmcgbWFzayk7CisgICAg
dm9pZCBjbGVhckNvbG9yKGRvdWJsZSByZWQsIGRvdWJsZSBncmVlbiwgZG91YmxlIGJsdWUsIGRv
dWJsZSBhbHBoYSk7CisgICAgdm9pZCBjbGVhckRlcHRoKGRvdWJsZSBkZXB0aCk7CisgICAgdm9p
ZCBjbGVhclN0ZW5jaWwobG9uZyBzKTsKKyAgICB2b2lkIGNvbG9yTWFzayhib29sIHJlZCwgYm9v
bCBncmVlbiwgYm9vbCBibHVlLCBib29sIGFscGhhKTsKKyAgICB2b2lkIGNvbXBpbGVTaGFkZXIo
V2ViR0xTaGFkZXIqKTsKKworICAgIHZvaWQgY29weVRleEltYWdlMkQodW5zaWduZWQgbG9uZyB0
YXJnZXQsIGxvbmcgbGV2ZWwsIHVuc2lnbmVkIGxvbmcgaW50ZXJuYWxmb3JtYXQsIGxvbmcgeCwg
bG9uZyB5LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCwgbG9uZyBi
b3JkZXIpOworICAgIHZvaWQgY29weVRleFN1YkltYWdlMkQodW5zaWduZWQgbG9uZyB0YXJnZXQs
IGxvbmcgbGV2ZWwsIGxvbmcgeG9mZnNldCwgbG9uZyB5b2Zmc2V0LCBsb25nIHgsIGxvbmcgeSwg
dW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQpOworICAgIHZvaWQgY3Vs
bEZhY2UodW5zaWduZWQgbG9uZyBtb2RlKTsKKyAgICB2b2lkIGRlcHRoRnVuYyh1bnNpZ25lZCBs
b25nIGZ1bmMpOworICAgIHZvaWQgZGVwdGhNYXNrKGJvb2wgZmxhZyk7CisgICAgdm9pZCBkZXB0
aFJhbmdlKGRvdWJsZSB6TmVhciwgZG91YmxlIHpGYXIpOworICAgIHZvaWQgZGV0YWNoU2hhZGVy
KFdlYkdMUHJvZ3JhbSosIFdlYkdMU2hhZGVyKik7CisgICAgdm9pZCBkaXNhYmxlKHVuc2lnbmVk
IGxvbmcgY2FwKTsKICAgICB2b2lkIGRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheSh1bnNpZ25lZCBs
b25nIGluZGV4KTsKKyAgICB2b2lkIGRyYXdBcnJheXModW5zaWduZWQgbG9uZyBtb2RlLCBsb25n
IGZpcnN0LCBsb25nIGNvdW50KTsKKyAgICB2b2lkIGRyYXdFbGVtZW50cyh1bnNpZ25lZCBsb25n
IG1vZGUsIHVuc2lnbmVkIGxvbmcgY291bnQsIHVuc2lnbmVkIGxvbmcgdHlwZSwgbG9uZyBvZmZz
ZXQpOworCisgICAgdm9pZCBlbmFibGUodW5zaWduZWQgbG9uZyBjYXApOwogICAgIHZvaWQgZW5h
YmxlVmVydGV4QXR0cmliQXJyYXkodW5zaWduZWQgbG9uZyBpbmRleCk7Ci0gICAgdW5zaWduZWQg
bG9uZyBnZXRFcnJvcigpOworICAgIHZvaWQgZmluaXNoKCk7CisgICAgdm9pZCBmbHVzaCgpOwor
ICAgIHZvaWQgZnJhbWVidWZmZXJSZW5kZXJidWZmZXIodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVu
c2lnbmVkIGxvbmcgYXR0YWNobWVudCwgdW5zaWduZWQgbG9uZyByZW5kZXJidWZmZXJ0YXJnZXQs
IFdlYkdMUmVuZGVyYnVmZmVyKik7CisgICAgdm9pZCBmcmFtZWJ1ZmZlclRleHR1cmUyRCh1bnNp
Z25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBhdHRhY2htZW50LCB1bnNpZ25lZCBsb25n
IHRleHRhcmdldCwgV2ViR0xUZXh0dXJlKiwgbG9uZyBsZXZlbCk7CisgICAgdm9pZCBmcm9udEZh
Y2UodW5zaWduZWQgbG9uZyBtb2RlKTsKKyAgICB2b2lkIGdlbmVyYXRlTWlwbWFwKHVuc2lnbmVk
IGxvbmcgdGFyZ2V0KTsKKworICAgIGJvb2wgZ2V0QWN0aXZlQXR0cmliKFdlYkdMUHJvZ3JhbSog
cHJvZ3JhbSwgdW5zaWduZWQgbG9uZyBpbmRleCwgQWN0aXZlSW5mbyYpOworICAgIGJvb2wgZ2V0
QWN0aXZlVW5pZm9ybShXZWJHTFByb2dyYW0qIHByb2dyYW0sIHVuc2lnbmVkIGxvbmcgaW5kZXgs
IEFjdGl2ZUluZm8mKTsKKworICAgIGludCAgZ2V0QXR0cmliTG9jYXRpb24oV2ViR0xQcm9ncmFt
KiwgY29uc3QgU3RyaW5nJiBuYW1lKTsKKworICAgIHZvaWQgZ2V0Qm9vbGVhbnYodW5zaWduZWQg
bG9uZyBwbmFtZSwgdW5zaWduZWQgY2hhciogdmFsdWUpOworCisgICAgdm9pZCBnZXRCdWZmZXJQ
YXJhbWV0ZXJpdih1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBwbmFtZSwgaW50
KiB2YWx1ZSk7CisKICAgICBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBnZXRDb250ZXh0
QXR0cmlidXRlcygpOwotICAgIHZvaWQgdmVydGV4QXR0cmliUG9pbnRlcih1bnNpZ25lZCBsb25n
IGluZHgsIGludCBzaXplLCBpbnQgdHlwZSwgYm9vbCBub3JtYWxpemVkLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHN0cmlkZSwgdW5zaWduZWQgbG9uZyBvZmZz
ZXQpOwotICAgIHZvaWQgdmlld3BvcnRJbXBsKGxvbmcgeCwgbG9uZyB5LCB1bnNpZ25lZCBsb25n
IHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCk7CiAKLSAgICB2b2lkIHN5bnRoZXNpemVHTEVy
cm9yKHVuc2lnbmVkIGxvbmcgZXJyb3IpOworICAgIHVuc2lnbmVkIGxvbmcgZ2V0RXJyb3IoKTsK
IAotcHJpdmF0ZToKLSAgICBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBtX2F0dHJzOwor
ICAgIHZvaWQgZ2V0RmxvYXR2KHVuc2lnbmVkIGxvbmcgcG5hbWUsIGZsb2F0KiB2YWx1ZSk7CiAK
LSAgICB1bnNpZ25lZCBpbnQgbV90ZXh0dXJlOwotICAgIHVuc2lnbmVkIGludCBtX2ZibzsKLSAg
ICB1bnNpZ25lZCBpbnQgbV9kZXB0aEJ1ZmZlcjsKLSAgICB1bnNpZ25lZCBpbnQgbV9jYWNoZWRX
aWR0aCwgbV9jYWNoZWRIZWlnaHQ7CisgICAgdm9pZCBnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQ
YXJhbWV0ZXJpdih1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBhdHRhY2htZW50
LCB1bnNpZ25lZCBsb25nIHBuYW1lLCBpbnQqIHZhbHVlKTsKIAotICAgIC8vIEZvciB0cmFja2lu
ZyB3aGljaCBGQk8gaXMgYm91bmQKLSAgICB1bnNpZ25lZCBpbnQgbV9ib3VuZEZCTzsKKyAgICB2
b2lkIGdldEludGVnZXJ2KHVuc2lnbmVkIGxvbmcgcG5hbWUsIGludCogdmFsdWUpOwogCi0jaWZk
ZWYgRkxJUF9GUkFNRUJVRkZFUl9WRVJUSUNBTExZCi0gICAgdW5zaWduZWQgY2hhciogbV9zY2Fu
bGluZTsKLSAgICB2b2lkIGZsaXBWZXJ0aWNhbGx5KHVuc2lnbmVkIGNoYXIqIGZyYW1lYnVmZmVy
LAotICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHdpZHRoLAotICAgICAgICAg
ICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGhlaWdodCk7Ci0jZW5kaWYKKyAgICB2b2lkIGdl
dFByb2dyYW1pdihXZWJHTFByb2dyYW0qIHByb2dyYW0sIHVuc2lnbmVkIGxvbmcgcG5hbWUsIGlu
dCogdmFsdWUpOworCisgICAgU3RyaW5nIGdldFByb2dyYW1JbmZvTG9nKFdlYkdMUHJvZ3JhbSop
OworCisgICAgdm9pZCBnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdih1bnNpZ25lZCBsb25nIHRh
cmdldCwgdW5zaWduZWQgbG9uZyBwbmFtZSwgaW50KiB2YWx1ZSk7CisKKyAgICB2b2lkIGdldFNo
YWRlcml2KFdlYkdMU2hhZGVyKiwgdW5zaWduZWQgbG9uZyBwbmFtZSwgaW50KiB2YWx1ZSk7CisK
KyAgICBTdHJpbmcgZ2V0U2hhZGVySW5mb0xvZyhXZWJHTFNoYWRlciopOworCisgICAgU3RyaW5n
IGdldFNoYWRlclNvdXJjZShXZWJHTFNoYWRlciopOworICAgIFN0cmluZyBnZXRTdHJpbmcodW5z
aWduZWQgbG9uZyBuYW1lKTsKKworICAgIHZvaWQgZ2V0VGV4UGFyYW1ldGVyZnYodW5zaWduZWQg
bG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgcG5hbWUsIGZsb2F0KiB2YWx1ZSk7CisgICAgdm9p
ZCBnZXRUZXhQYXJhbWV0ZXJpdih1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBw
bmFtZSwgaW50KiB2YWx1ZSk7CisKKyAgICB2b2lkIGdldFVuaWZvcm1mdihXZWJHTFByb2dyYW0q
IHByb2dyYW0sIGxvbmcgbG9jYXRpb24sIGZsb2F0KiB2YWx1ZSk7CisgICAgdm9pZCBnZXRVbmlm
b3JtaXYoV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBsb25nIGxvY2F0aW9uLCBpbnQqIHZhbHVlKTsK
KworICAgIGxvbmcgZ2V0VW5pZm9ybUxvY2F0aW9uKFdlYkdMUHJvZ3JhbSosIGNvbnN0IFN0cmlu
ZyYgbmFtZSk7CisKKyAgICB2b2lkIGdldFZlcnRleEF0dHJpYmZ2KHVuc2lnbmVkIGxvbmcgaW5k
ZXgsIHVuc2lnbmVkIGxvbmcgcG5hbWUsIGZsb2F0KiB2YWx1ZSk7CisgICAgdm9pZCBnZXRWZXJ0
ZXhBdHRyaWJpdih1bnNpZ25lZCBsb25nIGluZGV4LCB1bnNpZ25lZCBsb25nIHBuYW1lLCBpbnQq
IHZhbHVlKTsKKworICAgIGxvbmcgZ2V0VmVydGV4QXR0cmliT2Zmc2V0KHVuc2lnbmVkIGxvbmcg
aW5kZXgsIHVuc2lnbmVkIGxvbmcgcG5hbWUpOworCisgICAgdm9pZCBoaW50KHVuc2lnbmVkIGxv
bmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIG1vZGUpOworICAgIGJvb2wgaXNCdWZmZXIoV2ViR0xC
dWZmZXIqKTsKKyAgICBib29sIGlzRW5hYmxlZCh1bnNpZ25lZCBsb25nIGNhcCk7CisgICAgYm9v
bCBpc0ZyYW1lYnVmZmVyKFdlYkdMRnJhbWVidWZmZXIqKTsKKyAgICBib29sIGlzUHJvZ3JhbShX
ZWJHTFByb2dyYW0qKTsKKyAgICBib29sIGlzUmVuZGVyYnVmZmVyKFdlYkdMUmVuZGVyYnVmZmVy
Kik7CisgICAgYm9vbCBpc1NoYWRlcihXZWJHTFNoYWRlciopOworICAgIGJvb2wgaXNUZXh0dXJl
KFdlYkdMVGV4dHVyZSopOworICAgIHZvaWQgbGluZVdpZHRoKGRvdWJsZSk7CisgICAgdm9pZCBs
aW5rUHJvZ3JhbShXZWJHTFByb2dyYW0qKTsKKyAgICB2b2lkIHBpeGVsU3RvcmVpKHVuc2lnbmVk
IGxvbmcgcG5hbWUsIGxvbmcgcGFyYW0pOworICAgIHZvaWQgcG9seWdvbk9mZnNldChkb3VibGUg
ZmFjdG9yLCBkb3VibGUgdW5pdHMpOworCisgICAgUGFzc1JlZlB0cjxXZWJHTEFycmF5PiByZWFk
UGl4ZWxzKGxvbmcgeCwgbG9uZyB5LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25n
IGhlaWdodCwgdW5zaWduZWQgbG9uZyBmb3JtYXQsIHVuc2lnbmVkIGxvbmcgdHlwZSk7CisKKyAg
ICB2b2lkIHJlbGVhc2VTaGFkZXJDb21waWxlcigpOworICAgIHZvaWQgcmVuZGVyYnVmZmVyU3Rv
cmFnZSh1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBpbnRlcm5hbGZvcm1hdCwg
dW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQpOworICAgIHZvaWQgc2Ft
cGxlQ292ZXJhZ2UoZG91YmxlIHZhbHVlLCBib29sIGludmVydCk7CisgICAgdm9pZCBzY2lzc29y
KGxvbmcgeCwgbG9uZyB5LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdo
dCk7CisgICAgdm9pZCBzaGFkZXJTb3VyY2UoV2ViR0xTaGFkZXIqLCBjb25zdCBTdHJpbmcmIHN0
cmluZyk7CisgICAgdm9pZCBzdGVuY2lsRnVuYyh1bnNpZ25lZCBsb25nIGZ1bmMsIGxvbmcgcmVm
LCB1bnNpZ25lZCBsb25nIG1hc2spOworICAgIHZvaWQgc3RlbmNpbEZ1bmNTZXBhcmF0ZSh1bnNp
Z25lZCBsb25nIGZhY2UsIHVuc2lnbmVkIGxvbmcgZnVuYywgbG9uZyByZWYsIHVuc2lnbmVkIGxv
bmcgbWFzayk7CisgICAgdm9pZCBzdGVuY2lsTWFzayh1bnNpZ25lZCBsb25nIG1hc2spOworICAg
IHZvaWQgc3RlbmNpbE1hc2tTZXBhcmF0ZSh1bnNpZ25lZCBsb25nIGZhY2UsIHVuc2lnbmVkIGxv
bmcgbWFzayk7CisgICAgdm9pZCBzdGVuY2lsT3AodW5zaWduZWQgbG9uZyBmYWlsLCB1bnNpZ25l
ZCBsb25nIHpmYWlsLCB1bnNpZ25lZCBsb25nIHpwYXNzKTsKKyAgICB2b2lkIHN0ZW5jaWxPcFNl
cGFyYXRlKHVuc2lnbmVkIGxvbmcgZmFjZSwgdW5zaWduZWQgbG9uZyBmYWlsLCB1bnNpZ25lZCBs
b25nIHpmYWlsLCB1bnNpZ25lZCBsb25nIHpwYXNzKTsKKworICAgIC8vIFRoZXNlIG5leHQgc2V2
ZXJhbCBmdW5jdGlvbnMgcmV0dXJuIGFuIGVycm9yIGNvZGUgKDAgaWYgbm8gZXJyb3JzKSByYXRo
ZXIgdGhhbiB1c2luZyBhbiBFeGNlcHRpb25Db2RlLgorICAgIC8vIEN1cnJlbnRseSB0aGV5IHJl
dHVybiAtMSBvbiBhbnkgZXJyb3IuCisgICAgaW50IHRleEltYWdlMkQodW5zaWduZWQgdGFyZ2V0
LCB1bnNpZ25lZCBsZXZlbCwgdW5zaWduZWQgaW50ZXJuYWxmb3JtYXQsIHVuc2lnbmVkIHdpZHRo
LCB1bnNpZ25lZCBoZWlnaHQsIHVuc2lnbmVkIGJvcmRlciwgdW5zaWduZWQgZm9ybWF0LCB1bnNp
Z25lZCB0eXBlLCB2b2lkKiBwaXhlbHMpOworCisgICAgdm9pZCB0ZXhQYXJhbWV0ZXJmKHVuc2ln
bmVkIHRhcmdldCwgdW5zaWduZWQgcG5hbWUsIGZsb2F0IHBhcmFtKTsKKyAgICB2b2lkIHRleFBh
cmFtZXRlcmkodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBwbmFtZSwgaW50IHBhcmFtKTsKKwor
ICAgIGludCB0ZXhTdWJJbWFnZTJEKHVuc2lnbmVkIHRhcmdldCwgdW5zaWduZWQgbGV2ZWwsIHVu
c2lnbmVkIHhvZmZzZXQsIHVuc2lnbmVkIHlvZmZzZXQsIHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25l
ZCBoZWlnaHQsIHVuc2lnbmVkIGZvcm1hdCwgdW5zaWduZWQgdHlwZSwgdm9pZCogcGl4ZWxzKTsK
KworICAgIHZvaWQgdW5pZm9ybTFmKGxvbmcgbG9jYXRpb24sIGZsb2F0IHgpOworICAgIHZvaWQg
dW5pZm9ybTFmdihsb25nIGxvY2F0aW9uLCBmbG9hdCogdiwgaW50IHNpemUpOworICAgIHZvaWQg
dW5pZm9ybTFpKGxvbmcgbG9jYXRpb24sIGludCB4KTsKKyAgICB2b2lkIHVuaWZvcm0xaXYobG9u
ZyBsb2NhdGlvbiwgaW50KiB2LCBpbnQgc2l6ZSk7CisgICAgdm9pZCB1bmlmb3JtMmYobG9uZyBs
b2NhdGlvbiwgZmxvYXQgeCwgZmxvYXQgeSk7CisgICAgdm9pZCB1bmlmb3JtMmZ2KGxvbmcgbG9j
YXRpb24sIGZsb2F0KiB2LCBpbnQgc2l6ZSk7CisgICAgdm9pZCB1bmlmb3JtMmkobG9uZyBsb2Nh
dGlvbiwgaW50IHgsIGludCB5KTsKKyAgICB2b2lkIHVuaWZvcm0yaXYobG9uZyBsb2NhdGlvbiwg
aW50KiB2LCBpbnQgc2l6ZSk7CisgICAgdm9pZCB1bmlmb3JtM2YobG9uZyBsb2NhdGlvbiwgZmxv
YXQgeCwgZmxvYXQgeSwgZmxvYXQgeik7CisgICAgdm9pZCB1bmlmb3JtM2Z2KGxvbmcgbG9jYXRp
b24sIGZsb2F0KiB2LCBpbnQgc2l6ZSk7CisgICAgdm9pZCB1bmlmb3JtM2kobG9uZyBsb2NhdGlv
biwgaW50IHgsIGludCB5LCBpbnQgeik7CisgICAgdm9pZCB1bmlmb3JtM2l2KGxvbmcgbG9jYXRp
b24sIGludCogdiwgaW50IHNpemUpOworICAgIHZvaWQgdW5pZm9ybTRmKGxvbmcgbG9jYXRpb24s
IGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHosIGZsb2F0IHcpOworICAgIHZvaWQgdW5pZm9ybTRm
dihsb25nIGxvY2F0aW9uLCBmbG9hdCogdiwgaW50IHNpemUpOworICAgIHZvaWQgdW5pZm9ybTRp
KGxvbmcgbG9jYXRpb24sIGludCB4LCBpbnQgeSwgaW50IHosIGludCB3KTsKKyAgICB2b2lkIHVu
aWZvcm00aXYobG9uZyBsb2NhdGlvbiwgaW50KiB2LCBpbnQgc2l6ZSk7CisgICAgdm9pZCB1bmlm
b3JtTWF0cml4MmZ2KGxvbmcgbG9jYXRpb24sIGJvb2wgdHJhbnNwb3NlLCBmbG9hdCogdmFsdWUs
IGludCBzaXplKTsKKyAgICB2b2lkIHVuaWZvcm1NYXRyaXgzZnYobG9uZyBsb2NhdGlvbiwgYm9v
bCB0cmFuc3Bvc2UsIGZsb2F0KiB2YWx1ZSwgaW50IHNpemUpOworICAgIHZvaWQgdW5pZm9ybU1h
dHJpeDRmdihsb25nIGxvY2F0aW9uLCBib29sIHRyYW5zcG9zZSwgZmxvYXQqIHZhbHVlLCBpbnQg
c2l6ZSk7CisKKyAgICB2b2lkIHVzZVByb2dyYW0oV2ViR0xQcm9ncmFtKik7CisgICAgdm9pZCB2
YWxpZGF0ZVByb2dyYW0oV2ViR0xQcm9ncmFtKik7CisKKyAgICB2b2lkIHZlcnRleEF0dHJpYjFm
KHVuc2lnbmVkIGxvbmcgaW5keCwgZmxvYXQgeCk7CisgICAgdm9pZCB2ZXJ0ZXhBdHRyaWIxZnYo
dW5zaWduZWQgbG9uZyBpbmR4LCBmbG9hdCogdmFsdWVzKTsKKyAgICB2b2lkIHZlcnRleEF0dHJp
YjJmKHVuc2lnbmVkIGxvbmcgaW5keCwgZmxvYXQgeCwgZmxvYXQgeSk7CisgICAgdm9pZCB2ZXJ0
ZXhBdHRyaWIyZnYodW5zaWduZWQgbG9uZyBpbmR4LCBmbG9hdCogdmFsdWVzKTsKKyAgICB2b2lk
IHZlcnRleEF0dHJpYjNmKHVuc2lnbmVkIGxvbmcgaW5keCwgZmxvYXQgeCwgZmxvYXQgeSwgZmxv
YXQgeik7CisgICAgdm9pZCB2ZXJ0ZXhBdHRyaWIzZnYodW5zaWduZWQgbG9uZyBpbmR4LCBmbG9h
dCogdmFsdWVzKTsKKyAgICB2b2lkIHZlcnRleEF0dHJpYjRmKHVuc2lnbmVkIGxvbmcgaW5keCwg
ZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgeiwgZmxvYXQgdyk7CisgICAgdm9pZCB2ZXJ0ZXhBdHRy
aWI0ZnYodW5zaWduZWQgbG9uZyBpbmR4LCBmbG9hdCogdmFsdWVzKTsKKyAgICB2b2lkIHZlcnRl
eEF0dHJpYlBvaW50ZXIodW5zaWduZWQgbG9uZyBpbmR4LCBpbnQgc2l6ZSwgaW50IHR5cGUsIGJv
b2wgbm9ybWFsaXplZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9u
ZyBzdHJpZGUsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KTsKKworICAgIHZvaWQgdmlld3BvcnQobG9u
ZyB4LCBsb25nIHksIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0KTsK
IAotICAgIC8vIE5vdGU6IHdlIGFyZW4ndCBjdXJyZW50bHkgdXNpbmcgdGhpcyBpbmZvcm1hdGlv
biwgYnV0IHdlIHdpbGwKLSAgICAvLyBuZWVkIHRvIGluIG9yZGVyIHRvIHZlcmlmeSB0aGF0IGFs
bCBlbmFibGVkIHZlcnRleCBhcnJheXMgaGF2ZQotICAgIC8vIGEgdmFsaWQgYnVmZmVyIGJvdW5k
IC0tIHRvIGF2b2lkIGNyYXNoZXMgb24gY2VydGFpbiBjYXJkcy4KLSAgICB1bnNpZ25lZCBpbnQg
bV9ib3VuZEFycmF5QnVmZmVyOwotICAgIGNsYXNzIFZlcnRleEF0dHJpYlBvaW50ZXJTdGF0ZSB7
Ci0gICAgcHVibGljOgotICAgICAgICBWZXJ0ZXhBdHRyaWJQb2ludGVyU3RhdGUoKTsKLQotICAg
ICAgICBib29sIGVuYWJsZWQ7Ci0gICAgICAgIHVuc2lnbmVkIGxvbmcgYnVmZmVyOwotICAgICAg
ICB1bnNpZ25lZCBsb25nIGluZHg7Ci0gICAgICAgIGludCBzaXplOwotICAgICAgICBpbnQgdHlw
ZTsKLSAgICAgICAgYm9vbCBub3JtYWxpemVkOwotICAgICAgICB1bnNpZ25lZCBsb25nIHN0cmlk
ZTsKLSAgICAgICAgdW5zaWduZWQgbG9uZyBvZmZzZXQ7Ci0gICAgfTsKLQotICAgIGVudW0gewot
ICAgICAgICBOdW1UcmFja2VkUG9pbnRlclN0YXRlcyA9IDIKLSAgICB9OwotICAgIFZlcnRleEF0
dHJpYlBvaW50ZXJTdGF0ZSBtX3ZlcnRleEF0dHJpYlBvaW50ZXJTdGF0ZVtOdW1UcmFja2VkUG9p
bnRlclN0YXRlc107CisgICAgdW5zaWduZWQgY3JlYXRlQnVmZmVyKCk7CisgICAgdW5zaWduZWQg
Y3JlYXRlRnJhbWVidWZmZXIoKTsKKyAgICB1bnNpZ25lZCBjcmVhdGVQcm9ncmFtKCk7CisgICAg
dW5zaWduZWQgY3JlYXRlUmVuZGVyYnVmZmVyKCk7CisgICAgdW5zaWduZWQgY3JlYXRlU2hhZGVy
KHVuc2lnbmVkIGxvbmcpOworICAgIHVuc2lnbmVkIGNyZWF0ZVRleHR1cmUoKTsKKworICAgIHZv
aWQgZGVsZXRlQnVmZmVyKHVuc2lnbmVkKTsKKyAgICB2b2lkIGRlbGV0ZUZyYW1lYnVmZmVyKHVu
c2lnbmVkKTsKKyAgICB2b2lkIGRlbGV0ZVByb2dyYW0odW5zaWduZWQpOworICAgIHZvaWQgZGVs
ZXRlUmVuZGVyYnVmZmVyKHVuc2lnbmVkKTsKKyAgICB2b2lkIGRlbGV0ZVNoYWRlcih1bnNpZ25l
ZCk7CisgICAgdm9pZCBkZWxldGVUZXh0dXJlKHVuc2lnbmVkKTsKIAotICAgIC8vIEVycm9ycyBy
YWlzZWQgYnkgc3ludGhlc2l6ZUdMRXJyb3IoKS4KLSAgICBMaXN0SGFzaFNldDx1bnNpZ25lZCBs
b25nPiBtX3N5bnRoZXRpY0Vycm9yczsKKyAgICB2b2lkIHN5bnRoZXNpemVHTEVycm9yKHVuc2ln
bmVkIGxvbmcgZXJyb3IpOwogCitwcml2YXRlOgorICAgIE93blB0cjxXZWJLaXQ6OldlYkdyYXBo
aWNzQ29udGV4dDNEPiBtX2ltcGw7CiAjaWYgUExBVEZPUk0oU0tJQSkKICAgICAvLyBJZiB0aGUg
d2lkdGggYW5kIGhlaWdodCBvZiB0aGUgQ2FudmFzJ3MgYmFja2luZyBzdG9yZSBkb24ndAogICAg
IC8vIG1hdGNoIHRob3NlIHRoYXQgd2Ugd2VyZSBnaXZlbiBpbiB0aGUgbW9zdCByZWNlbnQgY2Fs
bCB0bwpAQCAtMTc5LDU5MyArMzA1LDgzIEBAIHByaXZhdGU6CiAgICAgU2tCaXRtYXAqIG1fcmVz
aXppbmdCaXRtYXA7CiAjZW5kaWYKIAotICAgIHN0YXRpYyBib29sIHNfaW5pdGlhbGl6ZWRHTEVX
OwotI2lmIE9TKFdJTkRPV1MpCi0gICAgSFdORCAgbV9jYW52YXNXaW5kb3c7Ci0gICAgSERDICAg
bV9jYW52YXNEQzsKLSAgICBIR0xSQyBtX2NvbnRleHRPYmo7Ci0jZWxpZiBQTEFURk9STShDRykK
LSAgICBDR0xQQnVmZmVyT2JqIG1fcGJ1ZmZlcjsKLSAgICBDR0xDb250ZXh0T2JqIG1fY29udGV4
dE9iajsKKyNpZiBQTEFURk9STShDRykKICAgICB1bnNpZ25lZCBjaGFyKiBtX3JlbmRlck91dHB1
dDsKLSNlbGlmIE9TKExJTlVYKQotICAgIEdMWENvbnRleHQgbV9jb250ZXh0T2JqOwotICAgIEdM
WFBidWZmZXIgbV9wYnVmZmVyOwotCi0gICAgLy8gSW4gb3JkZXIgdG8gYXZvaWQgcHJvYmxlbXMg
Y2F1c2VkIGJ5IGxpbmtpbmcgYWdhaW5zdCBsaWJHTCwgd2UKLSAgICAvLyBkeW5hbWljYWxseSBs
b29rIHVwIGFsbCB0aGUgc3ltYm9scyB3ZSBuZWVkLgotICAgIC8vIGh0dHA6Ly9jb2RlLmdvb2ds
ZS5jb20vcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTE2ODAwCi0gICAgY2xhc3MgR0xDb25u
ZWN0aW9uIHsKLSAgICAgIHB1YmxpYzoKLSAgICAgICAgfkdMQ29ubmVjdGlvbigpOwotCi0gICAg
ICAgIHN0YXRpYyBHTENvbm5lY3Rpb24qIGNyZWF0ZSgpOwotCi0gICAgICAgIEdMWEZCQ29uZmln
KiBjaG9vc2VGQkNvbmZpZyhpbnQgc2NyZWVuLCBjb25zdCBpbnQgKmF0dHJpYl9saXN0LCBpbnQg
Km5lbGVtZW50cykKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1fZ2xYQ2hvb3NlRkJD
b25maWcobV9kaXNwbGF5LCBzY3JlZW4sIGF0dHJpYl9saXN0LCBuZWxlbWVudHMpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgR0xYQ29udGV4dCBjcmVhdGVOZXdDb250ZXh0KEdMWEZCQ29uZmlnIGNv
bmZpZywgaW50IHJlbmRlclR5cGUsIEdMWENvbnRleHQgc2hhcmVMaXN0LCBCb29sIGRpcmVjdCkK
LSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1fZ2xYQ3JlYXRlTmV3Q29udGV4dChtX2Rp
c3BsYXksIGNvbmZpZywgcmVuZGVyVHlwZSwgc2hhcmVMaXN0LCBkaXJlY3QpOwotICAgICAgICB9
Ci0KLSAgICAgICAgR0xYUGJ1ZmZlciBjcmVhdGVQYnVmZmVyKEdMWEZCQ29uZmlnIGNvbmZpZywg
Y29uc3QgaW50ICphdHRyaWJMaXN0KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbV9n
bFhDcmVhdGVQYnVmZmVyKG1fZGlzcGxheSwgY29uZmlnLCBhdHRyaWJMaXN0KTsKLSAgICAgICAg
fQotCi0gICAgICAgIHZvaWQgZGVzdHJveVBidWZmZXIoR0xYUGJ1ZmZlciBwYnVmKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBtX2dsWERlc3Ryb3lQYnVmZmVyKG1fZGlzcGxheSwgcGJ1Zik7Ci0g
ICAgICAgIH0KLQotICAgICAgICBCb29sIG1ha2VDdXJyZW50KEdMWERyYXdhYmxlIGRyYXdhYmxl
LCBHTFhDb250ZXh0IGN0eCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1fZ2xYTWFr
ZUN1cnJlbnQobV9kaXNwbGF5LCBkcmF3YWJsZSwgY3R4KTsKLSAgICAgICAgfQotCi0gICAgICAg
IHZvaWQgZGVzdHJveUNvbnRleHQoR0xYQ29udGV4dCBjdHgpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIG1fZ2xYRGVzdHJveUNvbnRleHQobV9kaXNwbGF5LCBjdHgpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgR0xYQ29udGV4dCBnZXRDdXJyZW50Q29udGV4dCgpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiBtX2dsWEdldEN1cnJlbnRDb250ZXh0KCk7Ci0gICAgICAgIH0KLQotICAgICAg
cHJpdmF0ZToKLSAgICAgICAgRGlzcGxheSogbV9kaXNwbGF5OwotICAgICAgICB2b2lkKiBtX2xp
YkdMOwotICAgICAgICBQRk5HTFhDSE9PU0VGQkNPTkZJR1BST0MgbV9nbFhDaG9vc2VGQkNvbmZp
ZzsKLSAgICAgICAgUEZOR0xYQ1JFQVRFTkVXQ09OVEVYVFBST0MgbV9nbFhDcmVhdGVOZXdDb250
ZXh0OwotICAgICAgICBQRk5HTFhDUkVBVEVQQlVGRkVSUFJPQyBtX2dsWENyZWF0ZVBidWZmZXI7
Ci0gICAgICAgIFBGTkdMWERFU1RST1lQQlVGRkVSUFJPQyBtX2dsWERlc3Ryb3lQYnVmZmVyOwot
ICAgICAgICB0eXBlZGVmIEJvb2wgKCogUEZOR0xYTUFLRUNVUlJFTlRQUk9DKShEaXNwbGF5KiBk
cHksIEdMWERyYXdhYmxlIGRyYXdhYmxlLCBHTFhDb250ZXh0IGN0eCk7Ci0gICAgICAgIFBGTkdM
WE1BS0VDVVJSRU5UUFJPQyBtX2dsWE1ha2VDdXJyZW50OwotICAgICAgICB0eXBlZGVmIHZvaWQg
KCogUEZOR0xYREVTVFJPWUNPTlRFWFRQUk9DKShEaXNwbGF5KiBkcHksIEdMWENvbnRleHQgY3R4
KTsKLSAgICAgICAgUEZOR0xYREVTVFJPWUNPTlRFWFRQUk9DIG1fZ2xYRGVzdHJveUNvbnRleHQ7
Ci0gICAgICAgIHR5cGVkZWYgR0xYQ29udGV4dCAoKiBQRk5HTFhHRVRDVVJSRU5UQ09OVEVYVFBS
T0MpKHZvaWQpOwotICAgICAgICBQRk5HTFhHRVRDVVJSRU5UQ09OVEVYVFBST0MgbV9nbFhHZXRD
dXJyZW50Q29udGV4dDsKLQotICAgICAgICBHTENvbm5lY3Rpb24oRGlzcGxheSogZGlzcGxheSwK
LSAgICAgICAgICAgICAgICAgICAgIHZvaWQqIGxpYkdMLAotICAgICAgICAgICAgICAgICAgICAg
UEZOR0xYQ0hPT1NFRkJDT05GSUdQUk9DIGNob29zZUZCQ29uZmlnLAotICAgICAgICAgICAgICAg
ICAgICAgUEZOR0xYQ1JFQVRFTkVXQ09OVEVYVFBST0MgY3JlYXRlTmV3Q29udGV4dCwKLSAgICAg
ICAgICAgICAgICAgICAgIFBGTkdMWENSRUFURVBCVUZGRVJQUk9DIGNyZWF0ZVBidWZmZXIsCi0g
ICAgICAgICAgICAgICAgICAgICBQRk5HTFhERVNUUk9ZUEJVRkZFUlBST0MgZGVzdHJveVBidWZm
ZXIsCi0gICAgICAgICAgICAgICAgICAgICBQRk5HTFhNQUtFQ1VSUkVOVFBST0MgbWFrZUN1cnJl
bnQsCi0gICAgICAgICAgICAgICAgICAgICBQRk5HTFhERVNUUk9ZQ09OVEVYVFBST0MgZGVzdHJv
eUNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICBQRk5HTFhHRVRDVVJSRU5UQ09OVEVYVFBS
T0MgZ2V0Q3VycmVudENvbnRleHQpCi0gICAgICAgICAgICA6IG1fbGliR0wobGliR0wpCi0gICAg
ICAgICAgICAsIG1fZGlzcGxheShkaXNwbGF5KQotICAgICAgICAgICAgLCBtX2dsWENob29zZUZC
Q29uZmlnKGNob29zZUZCQ29uZmlnKQotICAgICAgICAgICAgLCBtX2dsWENyZWF0ZU5ld0NvbnRl
eHQoY3JlYXRlTmV3Q29udGV4dCkKLSAgICAgICAgICAgICwgbV9nbFhDcmVhdGVQYnVmZmVyKGNy
ZWF0ZVBidWZmZXIpCi0gICAgICAgICAgICAsIG1fZ2xYRGVzdHJveVBidWZmZXIoZGVzdHJveVBi
dWZmZXIpCi0gICAgICAgICAgICAsIG1fZ2xYTWFrZUN1cnJlbnQobWFrZUN1cnJlbnQpCi0gICAg
ICAgICAgICAsIG1fZ2xYRGVzdHJveUNvbnRleHQoZGVzdHJveUNvbnRleHQpCi0gICAgICAgICAg
ICAsIG1fZ2xYR2V0Q3VycmVudENvbnRleHQoZ2V0Q3VycmVudENvbnRleHQpCi0gICAgICAgIHsK
LSAgICAgICAgfQotICAgIH07Ci0KLSAgICBzdGF0aWMgR0xDb25uZWN0aW9uKiBzX2dsOwotI2Vs
c2UKLSAgICAjZXJyb3IgTXVzdCBwb3J0IEdyYXBoaWNzQ29udGV4dDNEIHRvIHlvdXIgcGxhdGZv
cm0KICNlbmRpZgogfTsKIAotYm9vbCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpzX2luaXRp
YWxpemVkR0xFVyA9IGZhbHNlOwotCi0jaWYgT1MoTElOVVgpCi1HcmFwaGljc0NvbnRleHQzRElu
dGVybmFsOjpHTENvbm5lY3Rpb24qIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OnNfZ2wgPSAw
OwotCi1HcmFwaGljc0NvbnRleHQzREludGVybmFsOjpHTENvbm5lY3Rpb24qIEdyYXBoaWNzQ29u
dGV4dDNESW50ZXJuYWw6OkdMQ29ubmVjdGlvbjo6Y3JlYXRlKCkKLXsKLSAgICBEaXNwbGF5KiBk
cHkgPSBYT3BlbkRpc3BsYXkoMCk7Ci0gICAgaWYgKCFkcHkpIHsKLSAgICAgICAgcHJpbnRmKCJH
cmFwaGljc0NvbnRleHQzRDogZXJyb3Igb3BlbmluZyBYIGRpc3BsYXlcbiIpOwotICAgICAgICBy
ZXR1cm4gMDsKLSAgICB9Ci0KLSAgICAvLyBXZSB1c2UgUlRMRF9HTE9CQUwgc2VtYW50aWNzIHNv
IHRoYXQgR0xFVyBpbml0aWFsaXphdGlvbiB3b3JrczsKLSAgICAvLyBHTEVXIGV4cGVjdHMgdG8g
YmUgYWJsZSB0byBvcGVuIHRoZSBjdXJyZW50IHByb2Nlc3MncyBoYW5kbGUKLSAgICAvLyBhbmQg
ZG8gZGxzeW0ncyBvZiBHTCBlbnRyeSBwb2ludHMgZnJvbSB0aGVyZS4KLSAgICB2b2lkKiBsaWJH
TCA9IGRsb3BlbigibGliR0wuc28uMSIsIFJUTERfTEFaWSB8IFJUTERfR0xPQkFMKTsKLSAgICBp
ZiAoIWxpYkdMKSB7Ci0gICAgICAgIFhDbG9zZURpc3BsYXkoZHB5KTsKLSAgICAgICAgcHJpbnRm
KCJHcmFwaGljc0NvbnRleHQzRDogZXJyb3Igb3BlbmluZyBsaWJHTC5zby4xOiAlc1xuIiwgZGxl
cnJvcigpKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgUEZOR0xYQ0hPT1NFRkJD
T05GSUdQUk9DIGNob29zZUZCQ29uZmlnID0gKFBGTkdMWENIT09TRUZCQ09ORklHUFJPQykgZGxz
eW0obGliR0wsICJnbFhDaG9vc2VGQkNvbmZpZyIpOwotICAgIFBGTkdMWENSRUFURU5FV0NPTlRF
WFRQUk9DIGNyZWF0ZU5ld0NvbnRleHQgPSAoUEZOR0xYQ1JFQVRFTkVXQ09OVEVYVFBST0MpIGRs
c3ltKGxpYkdMLCAiZ2xYQ3JlYXRlTmV3Q29udGV4dCIpOwotICAgIFBGTkdMWENSRUFURVBCVUZG
RVJQUk9DIGNyZWF0ZVBidWZmZXIgPSAoUEZOR0xYQ1JFQVRFUEJVRkZFUlBST0MpIGRsc3ltKGxp
YkdMLCAiZ2xYQ3JlYXRlUGJ1ZmZlciIpOwotICAgIFBGTkdMWERFU1RST1lQQlVGRkVSUFJPQyBk
ZXN0cm95UGJ1ZmZlciA9IChQRk5HTFhERVNUUk9ZUEJVRkZFUlBST0MpIGRsc3ltKGxpYkdMLCAi
Z2xYRGVzdHJveVBidWZmZXIiKTsKLSAgICBQRk5HTFhNQUtFQ1VSUkVOVFBST0MgbWFrZUN1cnJl
bnQgPSAoUEZOR0xYTUFLRUNVUlJFTlRQUk9DKSBkbHN5bShsaWJHTCwgImdsWE1ha2VDdXJyZW50
Iik7Ci0gICAgUEZOR0xYREVTVFJPWUNPTlRFWFRQUk9DIGRlc3Ryb3lDb250ZXh0ID0gKFBGTkdM
WERFU1RST1lDT05URVhUUFJPQykgZGxzeW0obGliR0wsICJnbFhEZXN0cm95Q29udGV4dCIpOwot
ICAgIFBGTkdMWEdFVENVUlJFTlRDT05URVhUUFJPQyBnZXRDdXJyZW50Q29udGV4dCA9IChQRk5H
TFhHRVRDVVJSRU5UQ09OVEVYVFBST0MpIGRsc3ltKGxpYkdMLCAiZ2xYR2V0Q3VycmVudENvbnRl
eHQiKTsKLSAgICBpZiAoIWNob29zZUZCQ29uZmlnIHx8ICFjcmVhdGVOZXdDb250ZXh0IHx8ICFj
cmVhdGVQYnVmZmVyCi0gICAgICAgIHx8ICFkZXN0cm95UGJ1ZmZlciB8fCAhbWFrZUN1cnJlbnQg
fHwgIWRlc3Ryb3lDb250ZXh0Ci0gICAgICAgIHx8ICFnZXRDdXJyZW50Q29udGV4dCkgewotICAg
ICAgICBYQ2xvc2VEaXNwbGF5KGRweSk7Ci0gICAgICAgIGRsY2xvc2UobGliR0wpOwotICAgICAg
ICBwcmludGYoIkdyYXBoaWNzQ29udGV4dDNEOiBlcnJvciBsb29raW5nIHVwIGJvb3RzdHJhcHBp
bmcgZW50cnkgcG9pbnRzXG4iKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIHJldHVy
biBuZXcgR0xDb25uZWN0aW9uKGRweSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJH
TCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaG9vc2VGQkNvbmZpZywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjcmVhdGVOZXdDb250ZXh0LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNyZWF0ZVBidWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVz
dHJveVBidWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFrZUN1cnJlbnQsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdHJveUNvbnRleHQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZ2V0Q3VycmVudENvbnRleHQpOwotfQotCi1HcmFwaGljc0NvbnRleHQz
REludGVybmFsOjpHTENvbm5lY3Rpb246On5HTENvbm5lY3Rpb24oKQotewotICAgIFhDbG9zZURp
c3BsYXkobV9kaXNwbGF5KTsKLSAgICBkbGNsb3NlKG1fbGliR0wpOwotfQotCi0jZW5kaWYgLy8g
T1MoTElOVVgpCi0KLUdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OlZlcnRleEF0dHJpYlBvaW50
ZXJTdGF0ZTo6VmVydGV4QXR0cmliUG9pbnRlclN0YXRlKCkKLSAgICA6IGVuYWJsZWQoZmFsc2Up
Ci0gICAgLCBidWZmZXIoMCkKLSAgICAsIGluZHgoMCkKLSAgICAsIHNpemUoMCkKLSAgICAsIHR5
cGUoMCkKLSAgICAsIG5vcm1hbGl6ZWQoZmFsc2UpCi0gICAgLCBzdHJpZGUoMCkKLSAgICAsIG9m
ZnNldCgwKQotewotfQotCi1HcmFwaGljc0NvbnRleHQzREludGVybmFsOjpHcmFwaGljc0NvbnRl
eHQzREludGVybmFsKEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJzKQotICAgIDog
bV9hdHRycyhhdHRycykKLSAgICAsIG1fdGV4dHVyZSgwKQotICAgICwgbV9mYm8oMCkKLSAgICAs
IG1fZGVwdGhCdWZmZXIoMCkKLSAgICAsIG1fYm91bmRGQk8oMCkKLSNpZmRlZiBGTElQX0ZSQU1F
QlVGRkVSX1ZFUlRJQ0FMTFkKLSAgICAsIG1fc2NhbmxpbmUoMCkKLSNlbmRpZgotICAgICwgbV9i
b3VuZEFycmF5QnVmZmVyKDApCitHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpHcmFwaGljc0Nv
bnRleHQzREludGVybmFsKCkKICNpZiBQTEFURk9STShTS0lBKQotICAgICwgbV9yZXNpemluZ0Jp
dG1hcCgwKQotI2VuZGlmCi0jaWYgT1MoV0lORE9XUykKLSAgICAsIG1fY2FudmFzV2luZG93KDAp
Ci0gICAgLCBtX2NhbnZhc0RDKDApCi0gICAgLCBtX2NvbnRleHRPYmooMCkKKyAgICA6IG1fcmVz
aXppbmdCaXRtYXAoMCkKICNlbGlmIFBMQVRGT1JNKENHKQotICAgICwgbV9wYnVmZmVyKDApCi0g
ICAgLCBtX2NvbnRleHRPYmooMCkKLSAgICAsIG1fcmVuZGVyT3V0cHV0KDApCi0jZWxpZiBPUyhM
SU5VWCkKLSAgICAsIG1fY29udGV4dE9iaigwKQotICAgICwgbV9wYnVmZmVyKDApCisgICAgOiBt
X3JlbmRlck91dHB1dCgwKQogI2Vsc2UKICNlcnJvciBNdXN0IHBvcnQgdG8geW91ciBwbGF0Zm9y
bQogI2VuZGlmCiB7Ci0gICAgLy8gRklYTUU6IHdlIG5lZWQgdG8gdGFrZSBpbnRvIGFjY291bnQg
dGhlIHVzZXIncyByZXF1ZXN0ZWQKLSAgICAvLyBjb250ZXh0IGNyZWF0aW9uIGF0dHJpYnV0ZXMs
IGluIHBhcnRpY3VsYXIgc3RlbmNpbCBhbmQKLSAgICAvLyBhbnRpYWxpYXMsIGFuZCBkZXRlcm1p
bmUgd2hpY2ggY291bGQgYW5kIGNvdWxkIG5vdCBiZSBob25vcmVkCi0gICAgLy8gYmFzZWQgb24g
dGhlIGNhcGFiaWxpdGllcyBvZiB0aGUgT3BlbkdMIGltcGxlbWVudGF0aW9uLgotICAgIG1fYXR0
cnMuYWxwaGEgPSB0cnVlOwotICAgIG1fYXR0cnMuZGVwdGggPSB0cnVlOwotICAgIG1fYXR0cnMu
c3RlbmNpbCA9IGZhbHNlOwotICAgIG1fYXR0cnMuYW50aWFsaWFzID0gZmFsc2U7Ci0gICAgbV9h
dHRycy5wcmVtdWx0aXBsaWVkQWxwaGEgPSB0cnVlOwotCi0jaWYgT1MoV0lORE9XUykKLSAgICBX
TkRDTEFTUyB3YzsKLSAgICBpZiAoIUdldENsYXNzSW5mbyhHZXRNb2R1bGVIYW5kbGUoMCksIEwi
Q0FOVkFTR0wiLCAmd2MpKSB7Ci0gICAgICAgIFplcm9NZW1vcnkoJndjLCBzaXplb2YoV05EQ0xB
U1MpKTsKLSAgICAgICAgd2Muc3R5bGUgPSBDU19PV05EQzsKLSAgICAgICAgd2MuaEluc3RhbmNl
ID0gR2V0TW9kdWxlSGFuZGxlKDApOwotICAgICAgICB3Yy5scGZuV25kUHJvYyA9IERlZldpbmRv
d1Byb2M7Ci0gICAgICAgIHdjLmxwc3pDbGFzc05hbWUgPSBMIkNBTlZBU0dMIjsKLQotICAgICAg
ICBpZiAoIVJlZ2lzdGVyQ2xhc3MoJndjKSkgewotICAgICAgICAgICAgcHJpbnRmKCJHcmFwaGlj
c0NvbnRleHQzRDogUmVnaXN0ZXJDbGFzcyBmYWlsZWRcbiIpOwotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgbV9jYW52YXNXaW5kb3cgPSBDcmVhdGVXaW5kb3co
TCJDQU5WQVNHTCIsIEwiQ0FOVkFTR0wiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFdTX0NBUFRJT04sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1dfVVNF
REVGQVVMVCwgQ1dfVVNFREVGQVVMVCwgQ1dfVVNFREVGQVVMVCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBDV19VU0VERUZBVUxULCAwLCAwLCBHZXRNb2R1bGVIYW5kbGUoMCks
IDApOwotICAgIGlmICghbV9jYW52YXNXaW5kb3cpIHsKLSAgICAgICAgcHJpbnRmKCJHcmFwaGlj
c0NvbnRleHQzREludGVybmFsOiBDcmVhdGVXaW5kb3cgZmFpbGVkXG4iKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIC8vIGdldCB0aGUgZGV2aWNlIGNvbnRleHQKLSAgICBtX2NhbnZh
c0RDID0gR2V0REMobV9jYW52YXNXaW5kb3cpOwotICAgIGlmICghbV9jYW52YXNEQykgewotICAg
ICAgICBwcmludGYoIkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6IEdldERDIGZhaWxlZFxuIik7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBmaW5kIGRlZmF1bHQgcGl4ZWwgZm9y
bWF0Ci0gICAgUElYRUxGT1JNQVRERVNDUklQVE9SIHBmZDsKLSAgICBaZXJvTWVtb3J5KCZwZmQs
IHNpemVvZihQSVhFTEZPUk1BVERFU0NSSVBUT1IpKTsKLSAgICBwZmQublNpemUgPSBzaXplb2Yo
UElYRUxGT1JNQVRERVNDUklQVE9SKTsKLSAgICBwZmQublZlcnNpb24gPSAxOwotICAgIHBmZC5k
d0ZsYWdzID0gUEZEX0RSQVdfVE9fV0lORE9XIHwgUEZEX1NVUFBPUlRfT1BFTkdMCi0jaWZkZWYg
UkVOREVSX1RPX0RFQlVHR0lOR19XSU5ET1cKLSAgICAgICAgfCBQRkRfRE9VQkxFQlVGRkVSCi0j
ZW5kaWYgLy8gUkVOREVSX1RPX0RFQlVHR0lOR19XSU5ET1cKLSAgICAgICAgOwotICAgIGludCBw
aXhlbGZvcm1hdCA9IENob29zZVBpeGVsRm9ybWF0KG1fY2FudmFzREMsICZwZmQpOwotCi0gICAg
Ly8gc2V0IHRoZSBwaXhlbCBmb3JtYXQgZm9yIHRoZSBkYwotICAgIGlmICghU2V0UGl4ZWxGb3Jt
YXQobV9jYW52YXNEQywgcGl4ZWxmb3JtYXQsICZwZmQpKSB7Ci0gICAgICAgIHByaW50ZigiR3Jh
cGhpY3NDb250ZXh0M0Q6IFNldFBpeGVsRm9ybWF0IGZhaWxlZFxuIik7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICAvLyBjcmVhdGUgcmVuZGVyaW5nIGNvbnRleHQKLSAgICBtX2NvbnRl
eHRPYmogPSB3Z2xDcmVhdGVDb250ZXh0KG1fY2FudmFzREMpOwotICAgIGlmICghbV9jb250ZXh0
T2JqKSB7Ci0gICAgICAgIHByaW50ZigiR3JhcGhpY3NDb250ZXh0M0Q6IHdnbENyZWF0ZUNvbnRl
eHQgZmFpbGVkXG4iKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghd2dsTWFr
ZUN1cnJlbnQobV9jYW52YXNEQywgbV9jb250ZXh0T2JqKSkgewotICAgICAgICBwcmludGYoIkdy
YXBoaWNzQ29udGV4dDNEOiB3Z2xNYWtlQ3VycmVudCBmYWlsZWRcbiIpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0jaWZkZWYgUkVOREVSX1RPX0RFQlVHR0lOR19XSU5ET1cKLSAgICB0eXBl
ZGVmIEJPT0wgKFdJTkFQSSAqIFBGTldHTFNXQVBJTlRFUlZBTEVYVFBST0MpIChpbnQgaW50ZXJ2
YWwpOwotICAgIFBGTldHTFNXQVBJTlRFUlZBTEVYVFBST0Mgc2V0U3dhcEludGVydmFsID0gMDsK
LSAgICBzZXRTd2FwSW50ZXJ2YWwgPSAoUEZOV0dMU1dBUElOVEVSVkFMRVhUUFJPQykgd2dsR2V0
UHJvY0FkZHJlc3MoIndnbFN3YXBJbnRlcnZhbEVYVCIpOwotICAgIGlmIChzZXRTd2FwSW50ZXJ2
YWwpCi0gICAgICAgIHNldFN3YXBJbnRlcnZhbCgxKTsKLSNlbmRpZiAvLyBSRU5ERVJfVE9fREVC
VUdHSU5HX1dJTkRPVwotCi0jZWxpZiBQTEFURk9STShDRykKLSAgICAvLyBDcmVhdGUgYSAxeDEg
cGJ1ZmZlciBhbmQgYXNzb2NpYXRlZCBjb250ZXh0IHRvIGJvb3RzdHJhcCB0aGluZ3MKLSAgICBD
R0xQaXhlbEZvcm1hdEF0dHJpYnV0ZSBhdHRyaWJzW10gPSB7Ci0gICAgICAgIChDR0xQaXhlbEZv
cm1hdEF0dHJpYnV0ZSkga0NHTFBGQVBCdWZmZXIsCi0gICAgICAgIChDR0xQaXhlbEZvcm1hdEF0
dHJpYnV0ZSkgMAotICAgIH07Ci0gICAgQ0dMUGl4ZWxGb3JtYXRPYmogcGl4ZWxGb3JtYXQ7Ci0g
ICAgR0xpbnQgbnVtUGl4ZWxGb3JtYXRzOwotICAgIGlmIChDR0xDaG9vc2VQaXhlbEZvcm1hdChh
dHRyaWJzLCAmcGl4ZWxGb3JtYXQsICZudW1QaXhlbEZvcm1hdHMpICE9IGtDR0xOb0Vycm9yKSB7
Ci0gICAgICAgIHByaW50ZigiR3JhcGhpY3NDb250ZXh0M0Q6IGVycm9yIGNob29zaW5nIHBpeGVs
IGZvcm1hdFxuIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKCFwaXhlbEZvcm1h
dCkgewotICAgICAgICBwcmludGYoIkdyYXBoaWNzQ29udGV4dDNEOiBubyBwaXhlbCBmb3JtYXQg
c2VsZWN0ZWRcbiIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIENHTENvbnRleHRPYmog
Y29udGV4dDsKLSAgICBDR0xFcnJvciByZXMgPSBDR0xDcmVhdGVDb250ZXh0KHBpeGVsRm9ybWF0
LCAwLCAmY29udGV4dCk7Ci0gICAgQ0dMRGVzdHJveVBpeGVsRm9ybWF0KHBpeGVsRm9ybWF0KTsK
LSAgICBpZiAocmVzICE9IGtDR0xOb0Vycm9yKSB7Ci0gICAgICAgIHByaW50ZigiR3JhcGhpY3ND
b250ZXh0M0Q6IGVycm9yIGNyZWF0aW5nIGNvbnRleHRcbiIpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotICAgIENHTFBCdWZmZXJPYmogcGJ1ZmZlcjsKLSAgICBpZiAoQ0dMQ3JlYXRlUEJ1ZmZl
cigxLCAxLCBHTF9URVhUVVJFXzJELCBHTF9SR0JBLCAwLCAmcGJ1ZmZlcikgIT0ga0NHTE5vRXJy
b3IpIHsKLSAgICAgICAgQ0dMRGVzdHJveUNvbnRleHQoY29udGV4dCk7Ci0gICAgICAgIHByaW50
ZigiR3JhcGhpY3NDb250ZXh0M0Q6IGVycm9yIGNyZWF0aW5nIHBidWZmZXJcbiIpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotICAgIGlmIChDR0xTZXRQQnVmZmVyKGNvbnRleHQsIHBidWZmZXIs
IDAsIDAsIDApICE9IGtDR0xOb0Vycm9yKSB7Ci0gICAgICAgIENHTERlc3Ryb3lDb250ZXh0KGNv
bnRleHQpOwotICAgICAgICBDR0xEZXN0cm95UEJ1ZmZlcihwYnVmZmVyKTsKLSAgICAgICAgcHJp
bnRmKCJHcmFwaGljc0NvbnRleHQzRDogZXJyb3IgYXR0YWNoaW5nIHBidWZmZXIgdG8gY29udGV4
dFxuIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKENHTFNldEN1cnJlbnRDb250
ZXh0KGNvbnRleHQpICE9IGtDR0xOb0Vycm9yKSB7Ci0gICAgICAgIENHTERlc3Ryb3lDb250ZXh0
KGNvbnRleHQpOwotICAgICAgICBDR0xEZXN0cm95UEJ1ZmZlcihwYnVmZmVyKTsKLSAgICAgICAg
cHJpbnRmKCJHcmFwaGljc0NvbnRleHQzRDogZXJyb3IgbWFraW5nIGNvbnRleHQgY3VycmVudFxu
Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgbV9wYnVmZmVyID0gcGJ1ZmZlcjsKLSAg
ICBtX2NvbnRleHRPYmogPSBjb250ZXh0OwotI2VsaWYgT1MoTElOVVgpCi0gICAgaWYgKCFzX2ds
KSB7Ci0gICAgICAgIHNfZ2wgPSBHTENvbm5lY3Rpb246OmNyZWF0ZSgpOwotICAgICAgICBpZiAo
IXNfZ2wpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaW50IGNvbmZpZ0F0dHJz
W10gPSB7Ci0gICAgICAgIEdMWF9EUkFXQUJMRV9UWVBFLAotICAgICAgICBHTFhfUEJVRkZFUl9C
SVQsCi0gICAgICAgIEdMWF9SRU5ERVJfVFlQRSwKLSAgICAgICAgR0xYX1JHQkFfQklULAotICAg
ICAgICBHTFhfRE9VQkxFQlVGRkVSLAotICAgICAgICAwLAotICAgICAgICAwCi0gICAgfTsKLSAg
ICBpbnQgbmVsZW1lbnRzID0gMDsKLSAgICBHTFhGQkNvbmZpZyogY29uZmlnID0gc19nbC0+Y2hv
b3NlRkJDb25maWcoMCwgY29uZmlnQXR0cnMsICZuZWxlbWVudHMpOwotICAgIGlmICghY29uZmln
KSB7Ci0gICAgICAgIHByaW50ZigiR3JhcGhpY3NDb250ZXh0M0Q6IGdsWENob29zZUZCQ29uZmln
IGZhaWxlZFxuIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKCFuZWxlbWVudHMp
IHsKLSAgICAgICAgcHJpbnRmKCJHcmFwaGljc0NvbnRleHQzRDogZ2xYQ2hvb3NlRkJDb25maWcg
cmV0dXJuZWQgMCBlbGVtZW50c1xuIik7Ci0gICAgICAgIFhGcmVlKGNvbmZpZyk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0gICAgR0xYQ29udGV4dCBjb250ZXh0ID0gc19nbC0+Y3JlYXRlTmV3
Q29udGV4dChjb25maWdbMF0sIEdMWF9SR0JBX1RZUEUsIDAsIFRydWUpOwotICAgIGlmICghY29u
dGV4dCkgewotICAgICAgICBwcmludGYoIkdyYXBoaWNzQ29udGV4dDNEOiBnbFhDcmVhdGVOZXdD
b250ZXh0IGZhaWxlZFxuIik7Ci0gICAgICAgIFhGcmVlKGNvbmZpZyk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0gICAgaW50IHBidWZmZXJBdHRyc1tdID0gewotICAgICAgICBHTFhfUEJVRkZF
Ul9XSURUSCwKLSAgICAgICAgMSwKLSAgICAgICAgR0xYX1BCVUZGRVJfSEVJR0hULAotICAgICAg
ICAxLAotICAgICAgICAwCi0gICAgfTsKLSAgICBHTFhQYnVmZmVyIHBidWZmZXIgPSBzX2dsLT5j
cmVhdGVQYnVmZmVyKGNvbmZpZ1swXSwgcGJ1ZmZlckF0dHJzKTsKLSAgICBYRnJlZShjb25maWcp
OwotICAgIGlmICghcGJ1ZmZlcikgewotICAgICAgICBwcmludGYoIkdyYXBoaWNzQ29udGV4dDNE
OiBnbHhDcmVhdGVQYnVmZmVyIGZhaWxlZFxuIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0g
ICAgaWYgKCFzX2dsLT5tYWtlQ3VycmVudChwYnVmZmVyLCBjb250ZXh0KSkgewotICAgICAgICBw
cmludGYoIkdyYXBoaWNzQ29udGV4dDNEOiBnbFhNYWtlQ3VycmVudCBmYWlsZWRcbiIpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotICAgIG1fY29udGV4dE9iaiA9IGNvbnRleHQ7Ci0gICAgbV9w
YnVmZmVyID0gcGJ1ZmZlcjsKLSNlbHNlCi0jZXJyb3IgTXVzdCBwb3J0IHRvIHlvdXIgcGxhdGZv
cm0KLSNlbmRpZgotCi0gICAgaWYgKCFzX2luaXRpYWxpemVkR0xFVykgewotICAgICAgICAvLyBJ
bml0aWFsaXplIEdMRVcgYW5kIGNoZWNrIGZvciBHTCAyLjAgc3VwcG9ydCBieSB0aGUgZHJpdmVy
cy4KLSAgICAgICAgR0xlbnVtIGdsZXdJbml0UmVzdWx0ID0gZ2xld0luaXQoKTsKLSAgICAgICAg
aWYgKGdsZXdJbml0UmVzdWx0ICE9IEdMRVdfT0spIHsKLSAgICAgICAgICAgIHByaW50ZigiR3Jh
cGhpY3NDb250ZXh0M0Q6IEdMRVcgaW5pdGlhbGl6YXRpb24gZmFpbGVkXG4iKTsKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBpZiAoIWdsZXdJc1N1cHBvcnRlZCgiR0xf
VkVSU0lPTl8yXzAiKSkgewotICAgICAgICAgICAgcHJpbnRmKCJHcmFwaGljc0NvbnRleHQzRDog
T3BlbkdMIDIuMCBub3Qgc3VwcG9ydGVkXG4iKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQotICAgICAgICBzX2luaXRpYWxpemVkR0xFVyA9IHRydWU7Ci0gICAgfQogfQogCiBHcmFw
aGljc0NvbnRleHQzREludGVybmFsOjp+R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbCgpCiB7Ci0g
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0jaWZuZGVmIFJFTkRFUl9UT19ERUJVR0dJTkdfV0lO
RE9XCi0gICAgZ2xEZWxldGVSZW5kZXJidWZmZXJzRVhUKDEsICZtX2RlcHRoQnVmZmVyKTsKLSAg
ICBnbERlbGV0ZVRleHR1cmVzKDEsICZtX3RleHR1cmUpOworI2lmIFBMQVRGT1JNKFNLSUEpCisg
ICAgaWYgKG1fcmVzaXppbmdCaXRtYXApCisgICAgICAgIGRlbGV0ZSBtX3Jlc2l6aW5nQml0bWFw
OworI2VsaWYgUExBVEZPUk0oQ0cpCisgICAgaWYgKG1fcmVuZGVyT3V0cHV0KQorICAgICAgICBk
ZWxldGVbXSBtX3JlbmRlck91dHB1dDsKKyNlbmRpZgorCiAjaWZkZWYgRkxJUF9GUkFNRUJVRkZF
Ul9WRVJUSUNBTExZCiAgICAgaWYgKG1fc2NhbmxpbmUpCiAgICAgICAgIGRlbGV0ZVtdIG1fc2Nh
bmxpbmU7CiAjZW5kaWYKLSAgICBnbERlbGV0ZUZyYW1lYnVmZmVyc0VYVCgxLCAmbV9mYm8pOwot
I2VuZGlmIC8vICFSRU5ERVJfVE9fREVCVUdHSU5HX1dJTkRPVwogI2lmIFBMQVRGT1JNKFNLSUEp
CiAgICAgaWYgKG1fcmVzaXppbmdCaXRtYXApCiAgICAgICAgIGRlbGV0ZSBtX3Jlc2l6aW5nQml0
bWFwOwogI2VuZGlmCi0jaWYgT1MoV0lORE9XUykKLSAgICB3Z2xNYWtlQ3VycmVudCgwLCAwKTsK
LSAgICB3Z2xEZWxldGVDb250ZXh0KG1fY29udGV4dE9iaik7Ci0gICAgUmVsZWFzZURDKG1fY2Fu
dmFzV2luZG93LCBtX2NhbnZhc0RDKTsKLSAgICBEZXN0cm95V2luZG93KG1fY2FudmFzV2luZG93
KTsKLSNlbGlmIFBMQVRGT1JNKENHKQotICAgIENHTFNldEN1cnJlbnRDb250ZXh0KDApOwotICAg
IENHTERlc3Ryb3lDb250ZXh0KG1fY29udGV4dE9iaik7Ci0gICAgQ0dMRGVzdHJveVBCdWZmZXIo
bV9wYnVmZmVyKTsKLSAgICBpZiAobV9yZW5kZXJPdXRwdXQpCi0gICAgICAgIGRlbGV0ZVtdIG1f
cmVuZGVyT3V0cHV0OwotI2VsaWYgT1MoTElOVVgpCi0gICAgc19nbC0+bWFrZUN1cnJlbnQoMCwg
MCk7Ci0gICAgc19nbC0+ZGVzdHJveUNvbnRleHQobV9jb250ZXh0T2JqKTsKLSAgICBzX2dsLT5k
ZXN0cm95UGJ1ZmZlcihtX3BidWZmZXIpOwotI2Vsc2UKLSNlcnJvciBNdXN0IHBvcnQgdG8geW91
ciBwbGF0Zm9ybQotI2VuZGlmCi0gICAgbV9jb250ZXh0T2JqID0gMDsKIH0KIAotYm9vbCBHcmFw
aGljc0NvbnRleHQzREludGVybmFsOjptYWtlQ29udGV4dEN1cnJlbnQoKQorYm9vbCBHcmFwaGlj
c0NvbnRleHQzREludGVybmFsOjppbml0aWFsaXplKEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1
dGVzIGF0dHJzKQogewotI2lmIE9TKFdJTkRPV1MpCi0gICAgaWYgKHdnbEdldEN1cnJlbnRDb250
ZXh0KCkgIT0gbV9jb250ZXh0T2JqKQotICAgICAgICBpZiAod2dsTWFrZUN1cnJlbnQobV9jYW52
YXNEQywgbV9jb250ZXh0T2JqKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotI2VsaWYgUExB
VEZPUk0oQ0cpCi0gICAgaWYgKENHTEdldEN1cnJlbnRDb250ZXh0KCkgIT0gbV9jb250ZXh0T2Jq
KQotICAgICAgICBpZiAoQ0dMU2V0Q3VycmVudENvbnRleHQobV9jb250ZXh0T2JqKSA9PSBrQ0dM
Tm9FcnJvcikKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotI2VsaWYgT1MoTElOVVgpCi0gICAg
aWYgKHNfZ2wtPmdldEN1cnJlbnRDb250ZXh0KCkgIT0gbV9jb250ZXh0T2JqKQotICAgICAgICBp
ZiAoc19nbC0+bWFrZUN1cnJlbnQobV9wYnVmZmVyLCBtX2NvbnRleHRPYmopKQotICAgICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0jZWxzZQotI2Vycm9yIE11c3QgcG9ydCB0byB5b3VyIHBsYXRmb3Jt
Ci0jZW5kaWYKLSAgICByZXR1cm4gZmFsc2U7CisgICAgV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRl
eHQzRDo6QXR0cmlidXRlcyB3ZWJBdHRyaWJ1dGVzOworICAgIHdlYkF0dHJpYnV0ZXMuYWxwaGEg
PSBhdHRycy5hbHBoYTsKKyAgICB3ZWJBdHRyaWJ1dGVzLmRlcHRoID0gYXR0cnMuZGVwdGg7Cisg
ICAgd2ViQXR0cmlidXRlcy5zdGVuY2lsID0gYXR0cnMuc3RlbmNpbDsKKyAgICB3ZWJBdHRyaWJ1
dGVzLmFudGlhbGlhcyA9IGF0dHJzLmFudGlhbGlhczsKKyAgICB3ZWJBdHRyaWJ1dGVzLnByZW11
bHRpcGxpZWRBbHBoYSA9IGF0dHJzLnByZW11bHRpcGxpZWRBbHBoYTsKKyAgICAvLyBGSVhNRTog
b25jZSB0aGUgQ2hyb21pdW0gcG9ydGlvbiBvZiB0aGUgV2ViS2l0Q2xpZW50IGNoYW5nZXMgaGFz
IGxhbmRlZCwKKyAgICAvLyBjaGFuZ2UgdGhpcyB0byBjYWxsIFdlYktpdDo6d2ViS2l0Q2xpZW50
KCktPmNyZWF0ZUdyYXBoaWNzQ29udGV4dDNEKCkuCisgICAgV2ViS2l0OjpXZWJHcmFwaGljc0Nv
bnRleHQzRCogd2ViQ29udGV4dCA9IFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0
ZURlZmF1bHQoKTsKKyAgICBpZiAoIXdlYkNvbnRleHQpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICBpZiAoIXdlYkNvbnRleHQtPmluaXRpYWxpemUod2ViQXR0cmlidXRlcykpIHsKKyAgICAg
ICAgZGVsZXRlIHdlYkNvbnRleHQ7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAg
bV9pbXBsLnNldCh3ZWJDb250ZXh0KTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogUGxhdGZvcm1H
cmFwaGljc0NvbnRleHQzRCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpwbGF0Zm9ybUdyYXBo
aWNzQ29udGV4dDNEKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9jb250ZXh0T2JqOworICAgIHJl
dHVybiAwOwogfQogCiBQbGF0Zm9ybTNET2JqZWN0IEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6
OnBsYXRmb3JtVGV4dHVyZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fdGV4dHVyZTsKLX0KLQot
c3RhdGljIGludCBjcmVhdGVUZXh0dXJlT2JqZWN0KEdMZW51bSB0YXJnZXQpCi17Ci0gICAgR0x1
aW50IHRleHR1cmUgPSAwOwotICAgIGdsR2VuVGV4dHVyZXMoMSwgJnRleHR1cmUpOwotICAgIGds
QmluZFRleHR1cmUodGFyZ2V0LCB0ZXh0dXJlKTsKLSAgICBnbFRleFBhcmFtZXRlcmYodGFyZ2V0
LCBHTF9URVhUVVJFX01JTl9GSUxURVIsIEdMX05FQVJFU1QpOwotICAgIGdsVGV4UGFyYW1ldGVy
Zih0YXJnZXQsIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xfTkVBUkVTVCk7Ci0gICAgcmV0dXJu
IHRleHR1cmU7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6cmVzaGFwZShp
bnQgd2lkdGgsIGludCBoZWlnaHQpCi17Ci0jaWZkZWYgUkVOREVSX1RPX0RFQlVHR0lOR19XSU5E
T1cKLSAgICBTZXRXaW5kb3dQb3MobV9jYW52YXNXaW5kb3csIEhXTkRfVE9QLCAwLCAwLCB3aWR0
aCwgaGVpZ2h0LAotICAgICAgICAgICAgICAgICBTV1BfTk9NT1ZFKTsKLSAgICBTaG93V2luZG93
KG1fY2FudmFzV2luZG93LCBTV19TSE9XKTsKLSNlbmRpZgotCi0gICAgbV9jYWNoZWRXaWR0aCA9
IHdpZHRoOwotICAgIG1fY2FjaGVkSGVpZ2h0ID0gaGVpZ2h0OwotICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOwotCi0jaWZuZGVmIFJFTkRFUl9UT19ERUJVR0dJTkdfV0lORE9XCi0jaWZkZWYgVVNF
X1RFWFRVUkVfUkVDVEFOR0xFX0ZPUl9GUkFNRUJVRkZFUgotICAgIC8vIEdMX1RFWFRVUkVfUkVD
VEFOR0xFX0FSQiBpcyB0aGUgYmVzdCBzdXBwb3J0ZWQgcmVuZGVyIHRhcmdldCBvbiBNYWMgT1Mg
WAotICAgIEdMZW51bSB0YXJnZXQgPSBHTF9URVhUVVJFX1JFQ1RBTkdMRV9BUkI7Ci0jZWxzZQot
ICAgIEdMZW51bSB0YXJnZXQgPSBHTF9URVhUVVJFXzJEOwotI2VuZGlmCi0gICAgaWYgKCFtX3Rl
eHR1cmUpIHsKLSAgICAgICAgLy8gR2VuZXJhdGUgdGhlIHRleHR1cmUgb2JqZWN0Ci0gICAgICAg
IG1fdGV4dHVyZSA9IGNyZWF0ZVRleHR1cmVPYmplY3QodGFyZ2V0KTsKLSAgICAgICAgLy8gR2Vu
ZXJhdGUgdGhlIGZyYW1lYnVmZmVyIG9iamVjdAotICAgICAgICBnbEdlbkZyYW1lYnVmZmVyc0VY
VCgxLCAmbV9mYm8pOwotICAgICAgICAvLyBHZW5lcmF0ZSB0aGUgZGVwdGggYnVmZmVyCi0gICAg
ICAgIGdsR2VuUmVuZGVyYnVmZmVyc0VYVCgxLCAmbV9kZXB0aEJ1ZmZlcik7Ci0gICAgfQotCi0g
ICAgLy8gUmVhbGxvY2F0ZSB0aGUgY29sb3IgYW5kIGRlcHRoIGJ1ZmZlcnMKLSAgICBnbEJpbmRU
ZXh0dXJlKHRhcmdldCwgbV90ZXh0dXJlKTsKLSAgICBnbFRleEltYWdlMkQodGFyZ2V0LCAwLCBH
TF9SR0JBOCwgd2lkdGgsIGhlaWdodCwgMCwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgMCk7
Ci0gICAgZ2xCaW5kVGV4dHVyZSh0YXJnZXQsIDApOwotCi0gICAgZ2xCaW5kRnJhbWVidWZmZXJF
WFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX2Zibyk7Ci0gICAgbV9ib3VuZEZCTyA9IG1fZmJvOwot
ICAgIGdsQmluZFJlbmRlcmJ1ZmZlckVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCBtX2RlcHRoQnVm
ZmVyKTsKLSAgICBnbFJlbmRlcmJ1ZmZlclN0b3JhZ2VFWFQoR0xfUkVOREVSQlVGRkVSX0VYVCwg
R0xfREVQVEhfQ09NUE9ORU5ULCB3aWR0aCwgaGVpZ2h0KTsKLSAgICBnbEJpbmRSZW5kZXJidWZm
ZXJFWFQoR0xfUkVOREVSQlVGRkVSX0VYVCwgMCk7Ci0KLSAgICBnbEZyYW1lYnVmZmVyVGV4dHVy
ZTJERVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgR0xfQ09MT1JfQVRUQUNITUVOVDBfRVhULCB0YXJn
ZXQsIG1fdGV4dHVyZSwgMCk7Ci0gICAgZ2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlckVYVChHTF9G
UkFNRUJVRkZFUl9FWFQsIEdMX0RFUFRIX0FUVEFDSE1FTlRfRVhULCBHTF9SRU5ERVJCVUZGRVJf
RVhULCBtX2RlcHRoQnVmZmVyKTsKLSAgICBHTGVudW0gc3RhdHVzID0gZ2xDaGVja0ZyYW1lYnVm
ZmVyU3RhdHVzRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCk7Ci0gICAgaWYgKHN0YXR1cyAhPSBHTF9G
UkFNRUJVRkZFUl9DT01QTEVURV9FWFQpIHsKLSAgICAgICAgcHJpbnRmKCJHcmFwaGljc0NvbnRl
eHQzRDogZnJhbWVidWZmZXIgd2FzIGluY29tcGxldGVcbiIpOwotCi0gICAgICAgIC8vIEZJWE1F
OiBjbGVhbnVwLgotICAgICAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIH0KLSNlbmRpZiAgLy8g
UkVOREVSX1RPX0RFQlVHR0lOR19XSU5ET1cKLQotI2lmZGVmIEZMSVBfRlJBTUVCVUZGRVJfVkVS
VElDQUxMWQotICAgIGlmIChtX3NjYW5saW5lKSB7Ci0gICAgICAgIGRlbGV0ZVtdIG1fc2Nhbmxp
bmU7Ci0gICAgICAgIG1fc2NhbmxpbmUgPSAwOwotICAgIH0KLSAgICBtX3NjYW5saW5lID0gbmV3
IHVuc2lnbmVkIGNoYXJbd2lkdGggKiA0XTsKLSNlbmRpZiAgLy8gRkxJUF9GUkFNRUJVRkZFUl9W
RVJUSUNBTExZCi0KLSAgICBnbENsZWFyKEdMX0NPTE9SX0JVRkZFUl9CSVQpOwotCi0jaWYgUExB
VEZPUk0oQ0cpCi0gICAgLy8gTmVlZCB0byByZWFsbG9jYXRlIHRoZSBjbGllbnQtc2lkZSBiYWNr
aW5nIHN0b3JlLgotICAgIC8vIEZJWE1FOiBtYWtlIHRoaXMgbW9yZSBlZmZpY2llbnQuCi0gICAg
aWYgKG1fcmVuZGVyT3V0cHV0KSB7Ci0gICAgICAgIGRlbGV0ZVtdIG1fcmVuZGVyT3V0cHV0Owot
ICAgICAgICBtX3JlbmRlck91dHB1dCA9IDA7Ci0gICAgfQotICAgIGludCByb3dCeXRlcyA9IHdp
ZHRoICogNDsKLSAgICBtX3JlbmRlck91dHB1dCA9IG5ldyB1bnNpZ25lZCBjaGFyW2hlaWdodCAq
IHJvd0J5dGVzXTsKLSNlbmRpZiAgLy8gUExBVEZPUk0oQ0cpCi19Ci0KLSNpZmRlZiBGTElQX0ZS
QU1FQlVGRkVSX1ZFUlRJQ0FMTFkKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6Zmxp
cFZlcnRpY2FsbHkodW5zaWduZWQgY2hhciogZnJhbWVidWZmZXIsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCB3aWR0aCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGhl
aWdodCkKLXsKLSAgICB1bnNpZ25lZCBjaGFyKiBzY2FubGluZSA9IG1fc2NhbmxpbmU7Ci0gICAg
aWYgKCFzY2FubGluZSkKLSAgICAgICAgcmV0dXJuOwotICAgIHVuc2lnbmVkIGludCByb3dCeXRl
cyA9IHdpZHRoICogNDsKLSAgICB1bnNpZ25lZCBpbnQgY291bnQgPSBoZWlnaHQgLyAyOwotICAg
IGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewotICAgICAgICB1bnNp
Z25lZCBjaGFyKiByb3dBID0gZnJhbWVidWZmZXIgKyBpICogcm93Qnl0ZXM7Ci0gICAgICAgIHVu
c2lnbmVkIGNoYXIqIHJvd0IgPSBmcmFtZWJ1ZmZlciArIChoZWlnaHQgLSBpIC0gMSkgKiByb3dC
eXRlczsKLSAgICAgICAgLy8gRklYTUU6IHRoaXMgaXMgd2hlcmUgdGhlIG11bHRpcGxpY2F0aW9u
IG9mIHRoZSBhbHBoYQotICAgICAgICAvLyBjaGFubmVsIGludG8gdGhlIGNvbG9yIGJ1ZmZlciB3
aWxsIG5lZWQgdG8gb2NjdXIgaWYgdGhlCi0gICAgICAgIC8vIHVzZXIgc3BlY2lmaWVzIHRoZSAi
cHJlbXVsdGlwbHlBbHBoYSIgZmxhZyBpbiB0aGUgY29udGV4dAotICAgICAgICAvLyBjcmVhdGlv
biBhdHRyaWJ1dGVzLgotICAgICAgICBtZW1jcHkoc2NhbmxpbmUsIHJvd0IsIHJvd0J5dGVzKTsK
LSAgICAgICAgbWVtY3B5KHJvd0IsIHJvd0EsIHJvd0J5dGVzKTsKLSAgICAgICAgbWVtY3B5KHJv
d0EsIHNjYW5saW5lLCByb3dCeXRlcyk7Ci0gICAgfQorICAgIHJldHVybiAwOwogfQotI2VuZGlm
CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6YmVnaW5QYWludChXZWJHTFJlbmRl
cmluZ0NvbnRleHQqIGNvbnRleHQpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0KLSNp
ZmRlZiBSRU5ERVJfVE9fREVCVUdHSU5HX1dJTkRPVwotICAgIFN3YXBCdWZmZXJzKG1fY2FudmFz
REMpOwotI2Vsc2UKLSAgICAvLyBFYXJsaWVyIHZlcnNpb25zIG9mIHRoaXMgY29kZSB1c2VkIHRo
ZSBHUFUgdG8gZmxpcCB0aGUKLSAgICAvLyBmcmFtZWJ1ZmZlciB2ZXJ0aWNhbGx5IGJlZm9yZSBy
ZWFkaW5nIGl0IGJhY2sgZm9yIGNvbXBvc2l0aW5nCi0gICAgLy8gdmlhIHNvZnR3YXJlLiBUaGlz
IGNvZGUgd2FzIHF1aXRlIGNvbXBsaWNhdGVkLCB1c2VkIGEgbG90IG9mCi0gICAgLy8gR1BVIG1l
bW9yeSwgYW5kIGRpZG4ndCBwcm92aWRlIGFuIG9idmlvdXMgc3BlZWR1cC4gU2luY2UgdGhpcwot
ICAgIC8vIHZlcnRpY2FsIGZsaXAgaXMgb25seSBhIHRlbXBvcmFyeSBzb2x1dGlvbiBhbnl3YXkg
dW50aWwgQ2hyb21lCi0gICAgLy8gaXMgZnVsbHkgR1BVIGNvbXBvc2l0ZWQsIGl0IHdhc24ndCB3
b3J0aCB0aGUgY29tcGxleGl0eS4KLQogICAgIEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXMgPSBj
b250ZXh0LT5jYW52YXMoKTsKICAgICBJbWFnZUJ1ZmZlciogaW1hZ2VCdWZmZXIgPSBjYW52YXMt
PmJ1ZmZlcigpOwogICAgIHVuc2lnbmVkIGNoYXIqIHBpeGVscyA9IDA7Ci0gICAgYm9vbCBtdXN0
UmVzdG9yZUZCTyA9IChtX2JvdW5kRkJPICE9IG1fZmJvKTsKLSAgICBpZiAobXVzdFJlc3RvcmVG
Qk8pCi0gICAgICAgIGdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9m
Ym8pOwogI2lmIFBMQVRGT1JNKFNLSUEpCiAgICAgY29uc3QgU2tCaXRtYXAqIGNhbnZhc0JpdG1h
cCA9IGltYWdlQnVmZmVyLT5jb250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpLT5iaXRtYXAoKTsK
ICAgICBjb25zdCBTa0JpdG1hcCogcmVhZGJhY2tCaXRtYXAgPSAwOwogICAgIEFTU0VSVChjYW52
YXNCaXRtYXAtPmNvbmZpZygpID09IFNrQml0bWFwOjprQVJHQl84ODg4X0NvbmZpZyk7Ci0gICAg
aWYgKGNhbnZhc0JpdG1hcC0+d2lkdGgoKSA9PSBtX2NhY2hlZFdpZHRoICYmIGNhbnZhc0JpdG1h
cC0+aGVpZ2h0KCkgPT0gbV9jYWNoZWRIZWlnaHQpIHsKKyAgICBpZiAoY2FudmFzQml0bWFwLT53
aWR0aCgpID09IG1faW1wbC0+d2lkdGgoKSAmJiBjYW52YXNCaXRtYXAtPmhlaWdodCgpID09IG1f
aW1wbC0+aGVpZ2h0KCkpIHsKICAgICAgICAgLy8gVGhpcyBpcyB0aGUgZmFzdGVzdCBhbmQgbW9z
dCBjb21tb24gY2FzZS4gV2UgcmVhZCBiYWNrCiAgICAgICAgIC8vIGRpcmVjdGx5IGludG8gdGhl
IGNhbnZhcydzIGJhY2tpbmcgc3RvcmUuCiAgICAgICAgIHJlYWRiYWNrQml0bWFwID0gY2FudmFz
Qml0bWFwOwpAQCAtNzc3LDE1ICszOTMsMTUgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzREludGVy
bmFsOjpiZWdpblBhaQogICAgICAgICAvLyBXZSBuZWVkIHRvIGFsbG9jYXRlIGEgdGVtcG9yYXJ5
IGJpdG1hcCBmb3IgcmVhZGluZyBiYWNrIHRoZQogICAgICAgICAvLyBwaXhlbCBkYXRhLiBXZSB3
aWxsIHRoZW4gdXNlIFNraWEgdG8gcmVzY2FsZSB0aGlzIGJpdG1hcCB0bwogICAgICAgICAvLyB0
aGUgc2l6ZSBvZiB0aGUgY2FudmFzJ3MgYmFja2luZyBzdG9yZS4KLSAgICAgICAgaWYgKG1fcmVz
aXppbmdCaXRtYXAgJiYgKG1fcmVzaXppbmdCaXRtYXAtPndpZHRoKCkgIT0gbV9jYWNoZWRXaWR0
aCB8fCBtX3Jlc2l6aW5nQml0bWFwLT5oZWlnaHQoKSAhPSBtX2NhY2hlZEhlaWdodCkpIHsKKyAg
ICAgICAgaWYgKG1fcmVzaXppbmdCaXRtYXAgJiYgKG1fcmVzaXppbmdCaXRtYXAtPndpZHRoKCkg
IT0gbV9pbXBsLT53aWR0aCgpIHx8IG1fcmVzaXppbmdCaXRtYXAtPmhlaWdodCgpICE9IG1faW1w
bC0+aGVpZ2h0KCkpKSB7CiAgICAgICAgICAgICBkZWxldGUgbV9yZXNpemluZ0JpdG1hcDsKICAg
ICAgICAgICAgIG1fcmVzaXppbmdCaXRtYXAgPSAwOwogICAgICAgICB9CiAgICAgICAgIGlmICgh
bV9yZXNpemluZ0JpdG1hcCkgewogICAgICAgICAgICAgbV9yZXNpemluZ0JpdG1hcCA9IG5ldyBT
a0JpdG1hcCgpOwogICAgICAgICAgICAgbV9yZXNpemluZ0JpdG1hcC0+c2V0Q29uZmlnKFNrQml0
bWFwOjprQVJHQl84ODg4X0NvbmZpZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtX2NhY2hlZFdpZHRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1fY2FjaGVkSGVpZ2h0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtX2ltcGwtPndpZHRoKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbV9pbXBsLT5oZWlnaHQoKSk7CiAgICAgICAgICAgICBpZiAoIW1fcmVzaXppbmdC
aXRtYXAtPmFsbG9jUGl4ZWxzKCkpIHsKICAgICAgICAgICAgICAgICBkZWxldGUgbV9yZXNpemlu
Z0JpdG1hcDsKICAgICAgICAgICAgICAgICBtX3Jlc2l6aW5nQml0bWFwID0gMDsKQEAgLTc5OCwy
MyArNDE0LDE0IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6YmVnaW5QYWkKICAg
ICAvLyBSZWFkIGJhY2sgdGhlIGZyYW1lIGJ1ZmZlci4KICAgICBTa0F1dG9Mb2NrUGl4ZWxzIGJp
dG1hcExvY2soKnJlYWRiYWNrQml0bWFwKTsKICAgICBwaXhlbHMgPSBzdGF0aWNfY2FzdDx1bnNp
Z25lZCBjaGFyKj4ocmVhZGJhY2tCaXRtYXAtPmdldFBpeGVscygpKTsKLSAgICBnbFJlYWRQaXhl
bHMoMCwgMCwgbV9jYWNoZWRXaWR0aCwgbV9jYWNoZWRIZWlnaHQsIEdMX0JHUkEsIEdMX1VOU0lH
TkVEX0JZVEUsIHBpeGVscyk7CiAjZWxpZiBQTEFURk9STShDRykKLSAgICBpZiAobV9yZW5kZXJP
dXRwdXQpIHsKKyAgICBpZiAobV9yZW5kZXJPdXRwdXQpCiAgICAgICAgIHBpeGVscyA9IG1fcmVu
ZGVyT3V0cHV0OwotICAgICAgICBnbFJlYWRQaXhlbHMoMCwgMCwgbV9jYWNoZWRXaWR0aCwgbV9j
YWNoZWRIZWlnaHQsIEdMX0JHUkEsIEdMX1VOU0lHTkVEX0lOVF84XzhfOF84X1JFViwgcGl4ZWxz
KTsKLSAgICB9CiAjZWxzZQogI2Vycm9yIE11c3QgcG9ydCB0byB5b3VyIHBsYXRmb3JtCiAjZW5k
aWYKIAotICAgIGlmIChtdXN0UmVzdG9yZUZCTykKLSAgICAgICAgZ2xCaW5kRnJhbWVidWZmZXJF
WFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX2JvdW5kRkJPKTsKLQotI2lmZGVmIEZMSVBfRlJBTUVC
VUZGRVJfVkVSVElDQUxMWQotICAgIGlmIChwaXhlbHMpCi0gICAgICAgIGZsaXBWZXJ0aWNhbGx5
KHBpeGVscywgbV9jYWNoZWRXaWR0aCwgbV9jYWNoZWRIZWlnaHQpOwotI2VuZGlmCisgICAgbV9p
bXBsLT5yZWFkQmFja0ZyYW1lYnVmZmVyKHBpeGVscyk7CiAKICNpZiBQTEFURk9STShTS0lBKQog
ICAgIGlmIChtX3Jlc2l6aW5nQml0bWFwKSB7CkBAIC04MjYsMTEgKzQzMywxMSBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmJlZ2luUGFpCiAgICAgfQogI2VsaWYgUExBVEZPUk0o
Q0cpCiAgICAgaWYgKG1fcmVuZGVyT3V0cHV0KSB7Ci0gICAgICAgIGludCByb3dCeXRlcyA9IG1f
Y2FjaGVkV2lkdGggKiA0OwotICAgICAgICBDR0RhdGFQcm92aWRlclJlZiBkYXRhUHJvdmlkZXIg
PSBDR0RhdGFQcm92aWRlckNyZWF0ZVdpdGhEYXRhKDAsIG1fcmVuZGVyT3V0cHV0LCByb3dCeXRl
cyAqIG1fY2FjaGVkSGVpZ2h0LCAwKTsKKyAgICAgICAgaW50IHJvd0J5dGVzID0gbV9pbXBsLT53
aWR0aCgpICogNDsKKyAgICAgICAgQ0dEYXRhUHJvdmlkZXJSZWYgZGF0YVByb3ZpZGVyID0gQ0dE
YXRhUHJvdmlkZXJDcmVhdGVXaXRoRGF0YSgwLCBtX3JlbmRlck91dHB1dCwgcm93Qnl0ZXMgKiBt
X2ltcGwtPmhlaWdodCgpLCAwKTsKICAgICAgICAgQ0dDb2xvclNwYWNlUmVmIGNvbG9yU3BhY2Ug
PSBDR0NvbG9yU3BhY2VDcmVhdGVEZXZpY2VSR0IoKTsKLSAgICAgICAgQ0dJbWFnZVJlZiBjZ0lt
YWdlID0gQ0dJbWFnZUNyZWF0ZShtX2NhY2hlZFdpZHRoLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1fY2FjaGVkSGVpZ2h0LAorICAgICAgICBDR0ltYWdlUmVm
IGNnSW1hZ2UgPSBDR0ltYWdlQ3JlYXRlKG1faW1wbC0+d2lkdGgoKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2ltcGwtPmhlaWdodCgpLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMzIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcm93Qnl0ZXMsCkBAIC04NjEsMTAxOCArNDY4LDc2MyBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmJlZ2luUGFpCiAjZWxzZQogI2Vycm9yIE11c3QgcG9y
dCB0byB5b3VyIHBsYXRmb3JtCiAjZW5kaWYKLQotI2VuZGlmICAvLyBSRU5ERVJfVE9fREVCVUdH
SU5HX1dJTkRPVwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmFjdGl2ZVRl
eHR1cmUodW5zaWduZWQgbG9uZyB0ZXh0dXJlKQordm9pZCBHcmFwaGljc0NvbnRleHQzREludGVy
bmFsOjplbmRQYWludCgpCiB7Ci0gICAgLy8gRklYTUU6IHF1ZXJ5IG51bWJlciBvZiB0ZXh0dXJl
cyBhdmFpbGFibGUuCi0gICAgaWYgKHRleHR1cmUgPCBHTF9URVhUVVJFMCB8fCB0ZXh0dXJlID4g
R0xfVEVYVFVSRTArMzIpCi0gICAgICAgIC8vIEZJWE1FOiByYWlzZSBleGNlcHRpb24uCi0gICAg
ICAgIHJldHVybjsKLQotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsQWN0aXZlVGV4
dHVyZSh0ZXh0dXJlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpiaW5k
QnVmZmVyKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFdlYkdMQnVmZmVyKiBidWZmZXIpCi17Ci0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7Ci0gICAgR0x1aW50IGJ1ZklEID0gRVhUUkFDVChidWZmZXIpOwotICAgIGlmICh0
YXJnZXQgPT0gR0xfQVJSQVlfQlVGRkVSKQotICAgICAgICBtX2JvdW5kQXJyYXlCdWZmZXIgPSBi
dWZJRDsKLSAgICBnbEJpbmRCdWZmZXIodGFyZ2V0LCBidWZJRCk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0M0RJbnRlcm5hbDo6YmluZEZyYW1lYnVmZmVyKHVuc2lnbmVkIGxvbmcgdGFyZ2V0
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViR0xG
cmFtZWJ1ZmZlciogZnJhbWVidWZmZXIpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0g
ICAgR0x1aW50IGlkID0gRVhUUkFDVChmcmFtZWJ1ZmZlcik7Ci0gICAgaWYgKCFpZCkKLSAgICAg
ICAgaWQgPSBtX2ZibzsKLSAgICBnbEJpbmRGcmFtZWJ1ZmZlckVYVCh0YXJnZXQsIGlkKTsKLSAg
ICBtX2JvdW5kRkJPID0gaWQ7CiB9CiAKLS8vIElmIHdlIGRpZG4ndCBoYXZlIHRvIGhhY2sgR0xf
VEVYVFVSRV9XUkFQX1IgZm9yIGN1YmUgbWFwcywKLS8vIHdlIGNvdWxkIGp1c3QgdXNlOgotLy8g
R0xfU0FNRV9NRVRIT0RfMl9YMihCaW5kVGV4dHVyZSwgYmluZFRleHR1cmUsIHVuc2lnbmVkIGxv
bmcsIFdlYkdMVGV4dHVyZSopCi12b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmJpbmRU
ZXh0dXJlKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBXZWJHTFRleHR1cmUqIHRleHR1cmUpCit2b2lkIEdyYXBoaWNzQ29u
dGV4dDNESW50ZXJuYWw6OnJlc2hhcGUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQogewotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOwotICAgIHVuc2lnbmVkIGludCB0ZXh0dXJlT2JqZWN0ID0gRVhU
UkFDVCh0ZXh0dXJlKTsKKyAgICBpZiAod2lkdGggPT0gbV9pbXBsLT53aWR0aCgpICYmIGhlaWdo
dCA9PSBtX2ltcGwtPmhlaWdodCgpKQorICAgICAgICByZXR1cm47CiAKLSAgICBnbEJpbmRUZXh0
dXJlKHRhcmdldCwgdGV4dHVyZU9iamVjdCk7CisgICAgbV9pbXBsLT5yZXNoYXBlKHdpZHRoLCBo
ZWlnaHQpOwogCi0gICAgLy8gRklYTUU6IEdMX1RFWFRVUkVfV1JBUF9SIGlzbid0IGV4cG9zZWQg
aW4gdGhlIE9wZW5HTCBFUyAyLjAKLSAgICAvLyBBUEkuIE9uIGRlc2t0b3AgT3BlbkdMIGltcGxl
bWVudGF0aW9ucyBpdCBzZWVtcyBuZWNlc3NhcnkgdG8KLSAgICAvLyBzZXQgdGhpcyB3cmFwIG1v
ZGUgdG8gR0xfQ0xBTVBfVE9fRURHRSB0byBnZXQgY29ycmVjdCBiZWhhdmlvcgotICAgIC8vIG9m
IGN1YmUgbWFwcy4KLSAgICBpZiAodGV4dHVyZSkgewotICAgICAgICBpZiAodGFyZ2V0ID09IEdM
X1RFWFRVUkVfQ1VCRV9NQVApIHsKLSAgICAgICAgICAgIGlmICghdGV4dHVyZS0+aXNDdWJlTWFw
UldyYXBNb2RlSW5pdGlhbGl6ZWQoKSkgewotICAgICAgICAgICAgICAgIGdsVGV4UGFyYW1ldGVy
aShHTF9URVhUVVJFX0NVQkVfTUFQLCBHTF9URVhUVVJFX1dSQVBfUiwgR0xfQ0xBTVBfVE9fRURH
RSk7Ci0gICAgICAgICAgICAgICAgdGV4dHVyZS0+c2V0Q3ViZU1hcFJXcmFwTW9kZUluaXRpYWxp
emVkKHRydWUpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHRl
eHR1cmUtPnNldEN1YmVNYXBSV3JhcE1vZGVJbml0aWFsaXplZChmYWxzZSk7CisjaWYgUExBVEZP
Uk0oQ0cpCisgICAgLy8gTmVlZCB0byByZWFsbG9jYXRlIHRoZSBjbGllbnQtc2lkZSBiYWNraW5n
IHN0b3JlLgorICAgIC8vIEZJWE1FOiBtYWtlIHRoaXMgbW9yZSBlZmZpY2llbnQuCisgICAgaWYg
KG1fcmVuZGVyT3V0cHV0KSB7CisgICAgICAgIGRlbGV0ZVtdIG1fcmVuZGVyT3V0cHV0OworICAg
ICAgICBtX3JlbmRlck91dHB1dCA9IDA7CiAgICAgfQorICAgIGludCByb3dCeXRlcyA9IHdpZHRo
ICogNDsKKyAgICBtX3JlbmRlck91dHB1dCA9IG5ldyB1bnNpZ25lZCBjaGFyW2hlaWdodCAqIHJv
d0J5dGVzXTsKKyNlbmRpZiAvLyBQTEFURk9STShDRykKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHQzREludGVybmFsOjpidWZmZXJEYXRhSW1wbCh1bnNpZ25lZCBsb25nIHRhcmdldCwgaW50IHNp
emUsIGNvbnN0IHZvaWQqIGRhdGEsIHVuc2lnbmVkIGxvbmcgdXNhZ2UpCi17Ci0gICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7Ci0gICAgLy8gRklYTUU6IG1ha2UgdGhpcyB2ZXJpZmljYXRpb24gbW9y
ZSBlZmZpY2llbnQuCi0gICAgR0xpbnQgYmluZGluZyA9IDA7Ci0gICAgR0xlbnVtIGJpbmRpbmdf
dGFyZ2V0ID0gR0xfQVJSQVlfQlVGRkVSX0JJTkRJTkc7Ci0gICAgaWYgKHRhcmdldCA9PSBHTF9F
TEVNRU5UX0FSUkFZX0JVRkZFUikKLSAgICAgICAgYmluZGluZ190YXJnZXQgPSBHTF9FTEVNRU5U
X0FSUkFZX0JVRkZFUl9CSU5ESU5HOwotICAgIGdsR2V0SW50ZWdlcnYoYmluZGluZ190YXJnZXQs
ICZiaW5kaW5nKTsKLSAgICBpZiAoYmluZGluZyA8PSAwKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBy
YWlzZSBleGNlcHRpb24uCi0gICAgICAgIC8vIExvZ01lc3NhZ2VmKCgiYnVmZmVyRGF0YTogbm8g
YnVmZmVyIGJvdW5kIikpOwotICAgICAgICByZXR1cm47Ci0gICAgfQorLy8gTWFjcm9zIHRvIGFz
c2lzdCBpbiBkZWxlZ2F0aW5nIGZyb20gR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbCB0bworLy8g
V2ViR3JhcGhpY3NDb250ZXh0M0QuCiAKLSAgICBnbEJ1ZmZlckRhdGEodGFyZ2V0LAotICAgICAg
ICAgICAgICAgICAgIHNpemUsCi0gICAgICAgICAgICAgICAgICAgZGF0YSwKLSAgICAgICAgICAg
ICAgICAgICB1c2FnZSk7CisjZGVmaW5lIERFTEVHQVRFX1RPX0lNUEwobmFtZSkgXAordm9pZCBH
cmFwaGljc0NvbnRleHQzREludGVybmFsOjpuYW1lKCkgXAoreyBcCisgICAgbV9pbXBsLT5uYW1l
KCk7IFwKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpkaXNhYmxlVmVydGV4
QXR0cmliQXJyYXkodW5zaWduZWQgbG9uZyBpbmRleCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKLSAgICBpZiAoaW5kZXggPCBOdW1UcmFja2VkUG9pbnRlclN0YXRlcykKLSAgICAgICAg
bV92ZXJ0ZXhBdHRyaWJQb2ludGVyU3RhdGVbaW5kZXhdLmVuYWJsZWQgPSBmYWxzZTsKLSAgICBn
bERpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShpbmRleCk7CisjZGVmaW5lIERFTEVHQVRFX1RPX0lN
UExfUihuYW1lLCBydCkgICAgICAgICAgIFwKK3J0IEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6
Om5hbWUoKSBcCit7IFwKKyAgICByZXR1cm4gbV9pbXBsLT5uYW1lKCk7IFwKIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHQzREludGVybmFsOjplbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSh1bnNpZ25l
ZCBsb25nIGluZGV4KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGlmIChpbmRl
eCA8IE51bVRyYWNrZWRQb2ludGVyU3RhdGVzKQotICAgICAgICBtX3ZlcnRleEF0dHJpYlBvaW50
ZXJTdGF0ZVtpbmRleF0uZW5hYmxlZCA9IHRydWU7Ci0gICAgZ2xFbmFibGVWZXJ0ZXhBdHRyaWJB
cnJheShpbmRleCk7CisjZGVmaW5lIERFTEVHQVRFX1RPX0lNUExfMShuYW1lLCB0MSkgXAordm9p
ZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpuYW1lKHQxIGExKSBcCit7IFwKKyAgICBtX2lt
cGwtPm5hbWUoYTEpOyBcCiB9CiAKLXVuc2lnbmVkIGxvbmcgR3JhcGhpY3NDb250ZXh0M0RJbnRl
cm5hbDo6Z2V0RXJyb3IoKQotewotICAgIGlmIChtX3N5bnRoZXRpY0Vycm9ycy5zaXplKCkgPiAw
KSB7Ci0gICAgICAgIExpc3RIYXNoU2V0PHVuc2lnbmVkIGxvbmc+OjppdGVyYXRvciBpdGVyID0g
bV9zeW50aGV0aWNFcnJvcnMuYmVnaW4oKTsKLSAgICAgICAgdW5zaWduZWQgbG9uZyBlcnIgPSAq
aXRlcjsKLSAgICAgICAgbV9zeW50aGV0aWNFcnJvcnMucmVtb3ZlKGl0ZXIpOwotICAgICAgICBy
ZXR1cm4gZXJyOwotICAgIH0KLQotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIHJldHVy
biBnbEdldEVycm9yKCk7CisjZGVmaW5lIERFTEVHQVRFX1RPX0lNUExfMV9YKG5hbWUsIHQxKSBc
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6Om5hbWUodDEgYTEpIFwKK3sgXAorICAg
IG1faW1wbC0+bmFtZShFWFRSQUNUKGExKSk7ICAgICAgICAgICAgICAgICAgXAogfQogCi1HcmFw
aGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpnZXRD
b250ZXh0QXR0cmlidXRlcygpCi17Ci0gICAgcmV0dXJuIG1fYXR0cnM7CisjZGVmaW5lIERFTEVH
QVRFX1RPX0lNUExfMVIobmFtZSwgdDEsIHJ0KSAgICBcCitydCBHcmFwaGljc0NvbnRleHQzRElu
dGVybmFsOjpuYW1lKHQxIGExKSBcCit7IFwKKyAgICByZXR1cm4gbV9pbXBsLT5uYW1lKGExKTsg
XAogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OnZlcnRleEF0dHJpYlBvaW50
ZXIodW5zaWduZWQgbG9uZyBpbmR4LCBpbnQgc2l6ZSwgaW50IHR5cGUsIGJvb2wgbm9ybWFsaXpl
ZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1
bnNpZ25lZCBsb25nIHN0cmlkZSwgdW5zaWduZWQgbG9uZyBvZmZzZXQpCi17Ci0gICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7Ci0KLSAgICBpZiAobV9ib3VuZEFycmF5QnVmZmVyIDw9IDApIHsKLSAg
ICAgICAgLy8gRklYTUU6IHJhaXNlIGV4Y2VwdGlvbi4KLSAgICAgICAgLy8gTG9nTWVzc2FnZWYo
KCJidWZmZXJEYXRhOiBubyBidWZmZXIgYm91bmQiKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBpZiAoaW5keCA8IE51bVRyYWNrZWRQb2ludGVyU3RhdGVzKSB7Ci0gICAgICAgIFZl
cnRleEF0dHJpYlBvaW50ZXJTdGF0ZSYgc3RhdGUgPSBtX3ZlcnRleEF0dHJpYlBvaW50ZXJTdGF0
ZVtpbmR4XTsKLSAgICAgICAgc3RhdGUuYnVmZmVyID0gbV9ib3VuZEFycmF5QnVmZmVyOwotICAg
ICAgICBzdGF0ZS5pbmR4ID0gaW5keDsKLSAgICAgICAgc3RhdGUuc2l6ZSA9IHNpemU7Ci0gICAg
ICAgIHN0YXRlLnR5cGUgPSB0eXBlOwotICAgICAgICBzdGF0ZS5ub3JtYWxpemVkID0gbm9ybWFs
aXplZDsKLSAgICAgICAgc3RhdGUuc3RyaWRlID0gc3RyaWRlOwotICAgICAgICBzdGF0ZS5vZmZz
ZXQgPSBvZmZzZXQ7Ci0gICAgfQotCi0gICAgZ2xWZXJ0ZXhBdHRyaWJQb2ludGVyKGluZHgsIHNp
emUsIHR5cGUsIG5vcm1hbGl6ZWQsIHN0cmlkZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
cmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KG9mZnNldCkpKTsK
KyNkZWZpbmUgREVMRUdBVEVfVE9fSU1QTF8xUl9YKG5hbWUsIHQxLCBydCkgICAgXAorcnQgR3Jh
cGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6bmFtZSh0MSBhMSkgXAoreyBcCisgICAgcmV0dXJuIG1f
aW1wbC0+bmFtZShFWFRSQUNUKGExKSk7ICAgICAgICAgICBcCiB9CiAKLXZvaWQgR3JhcGhpY3ND
b250ZXh0M0RJbnRlcm5hbDo6dmlld3BvcnRJbXBsKGxvbmcgeCwgbG9uZyB5LCB1bnNpZ25lZCBs
b25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCkKLXsKLSAgICBnbFZpZXdwb3J0KHgsIHks
IHdpZHRoLCBoZWlnaHQpOworI2RlZmluZSBERUxFR0FURV9UT19JTVBMXzIobmFtZSwgdDEsIHQy
KSBcCit2b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6Om5hbWUodDEgYTEsIHQyIGEyKSBc
Cit7IFwKKyAgICBtX2ltcGwtPm5hbWUoYTEsIGEyKTsgXAogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDNESW50ZXJuYWw6OnN5bnRoZXNpemVHTEVycm9yKHVuc2lnbmVkIGxvbmcgZXJyb3IpCi17
Ci0gICAgbV9zeW50aGV0aWNFcnJvcnMuYWRkKGVycm9yKTsKKyNkZWZpbmUgREVMRUdBVEVfVE9f
SU1QTF8yX1gxMihuYW1lLCB0MSwgdDIpIFwKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5h
bDo6bmFtZSh0MSBhMSwgdDIgYTIpIFwKK3sgXAorICAgIG1faW1wbC0+bmFtZShFWFRSQUNUKGEx
KSwgRVhUUkFDVChhMikpOyAgICAgXAogfQogCi0vLyBHcmFwaGljc0NvbnRleHQzRCAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vKiBIZWxw
ZXIgbWFjcm9zIGZvciB3aGVuIHdlJ3JlIGp1c3Qgd3JhcHBpbmcgYSBnbCBtZXRob2QsIHNvIHRo
YXQKLSAqIHdlIGNhbiBhdm9pZCBoYXZpbmcgdG8gdHlwZSB0aGlzIDUwMCB0aW1lcy4gIE5vdGUg
dGhhdCB0aGVzZSBNVVNUCi0gKiBOT1QgQkUgVVNFRCBpZiB3ZSBuZWVkIHRvIGNoZWNrIGFueSBv
ZiB0aGUgcGFyYW1ldGVycy4KLSAqLwotCi0jZGVmaW5lIEdMX1NBTUVfTUVUSE9EXzAoZ2xuYW1l
LCBuYW1lKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotdm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6bmFtZSgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKLXsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICAgIGdsIyNnbG5hbWUoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyNkZWZpbmUgREVMRUdBVEVfVE9f
SU1QTF8yX1gyKG5hbWUsIHQxLCB0MikgXAordm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFs
OjpuYW1lKHQxIGExLCB0MiBhMikgXAoreyBcCisgICAgbV9pbXBsLT5uYW1lKGExLCBFWFRSQUNU
KGEyKSk7ICAgICBcCiB9CiAKLSNkZWZpbmUgR0xfU0FNRV9NRVRIT0RfMShnbG5hbWUsIG5hbWUs
IHQxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi12b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpuYW1lKHQxIGExKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAoteyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gICAgZ2wjI2dsbmFtZShhMSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorI2RlZmluZSBERUxFR0FURV9UT19JTVBMXzJS
KG5hbWUsIHQxLCB0MiwgcnQpICBcCitydCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpuYW1l
KHQxIGExLCB0MiBhMikgXAoreyBcCisgICAgcmV0dXJuIG1faW1wbC0+bmFtZShhMSwgYTIpOyBc
CiB9CiAKLSNkZWZpbmUgR0xfU0FNRV9NRVRIT0RfMV9YKGdsbmFtZSwgbmFtZSwgdDEpICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpu
YW1lKHQxIGExKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
eyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgZ2wj
I2dsbmFtZShFWFRSQUNUKGExKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorI2RlZmluZSBERUxFR0FURV9UT19JTVBMXzMobmFtZSwgdDEsIHQy
LCB0MykgICBcCit2b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6Om5hbWUodDEgYTEsIHQy
IGEyLCB0MyBhMykgICAgXAoreyBcCisgICAgbV9pbXBsLT5uYW1lKGExLCBhMiwgYTMpOyAgICAg
ICAgICAgICAgICAgIFwKIH0KIAotI2RlZmluZSBHTF9TQU1FX01FVEhPRF8yKGdsbmFtZSwgbmFt
ZSwgdDEsIHQyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6Om5hbWUodDEgYTEsIHQyIGEyKSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCi17ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKLSAgICBnbCMjZ2xuYW1lKGExLCBhMik7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisjZGVmaW5lIERFTEVHQVRFX1RPX0lNUExf
M19YMShuYW1lLCB0MSwgdDIsIHQzKSAgIFwKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5h
bDo6bmFtZSh0MSBhMSwgdDIgYTIsIHQzIGEzKSAgICBcCit7IFwKKyAgICBtX2ltcGwtPm5hbWUo
RVhUUkFDVChhMSksIGEyLCBhMyk7ICAgICAgICAgIFwKIH0KIAotI2RlZmluZSBHTF9TQU1FX01F
VEhPRF8yX1gxMihnbG5hbWUsIG5hbWUsIHQxLCB0MikgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6Om5hbWUodDEgYTEsIHQyIGEyKSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi17ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBnbCMjZ2xuYW1lKEVYVFJBQ1QoYTEpLCBFWFRS
QUNUKGEyKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisjZGVmaW5l
IERFTEVHQVRFX1RPX0lNUExfM1IobmFtZSwgdDEsIHQyLCB0MywgcnQpICAgXAorcnQgR3JhcGhp
Y3NDb250ZXh0M0RJbnRlcm5hbDo6bmFtZSh0MSBhMSwgdDIgYTIsIHQzIGEzKSAgICBcCit7IFwK
KyAgICByZXR1cm4gbV9pbXBsLT5uYW1lKGExLCBhMiwgYTMpOyAgICAgICAgICAgICAgICAgIFwK
IH0KIAotI2RlZmluZSBHTF9TQU1FX01FVEhPRF8yX1gyKGdsbmFtZSwgbmFtZSwgdDEsIHQyKSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6Om5h
bWUodDEgYTEsIHQyIGEyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi17
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBnbCMj
Z2xuYW1lKGExLCBFWFRSQUNUKGEyKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCisjZGVmaW5lIERFTEVHQVRFX1RPX0lNUExfNChuYW1lLCB0MSwgdDIs
IHQzLCB0NCkgICAgXAordm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpuYW1lKHQxIGEx
LCB0MiBhMiwgdDMgYTMsIHQ0IGE0KSAgXAoreyBcCisgICAgbV9pbXBsLT5uYW1lKGExLCBhMiwg
YTMsIGE0KTsgICAgICAgICAgICAgIFwKIH0KIAotI2RlZmluZSBHTF9TQU1FX01FVEhPRF8zKGds
bmFtZSwgbmFtZSwgdDEsIHQyLCB0MykgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLXZv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6Om5hbWUodDEgYTEsIHQyIGEyLCB0MyBhMykgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCi17ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgICBnbCMjZ2xuYW1lKGExLCBhMiwgYTMpOyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisjZGVmaW5lIERFTEVHQVRF
X1RPX0lNUExfNF9YNChuYW1lLCB0MSwgdDIsIHQzLCB0NCkgICAgXAordm9pZCBHcmFwaGljc0Nv
bnRleHQzREludGVybmFsOjpuYW1lKHQxIGExLCB0MiBhMiwgdDMgYTMsIHQ0IGE0KSAgXAoreyBc
CisgICAgbV9pbXBsLT5uYW1lKGExLCBhMiwgYTMsIEVYVFJBQ1QoYTQpKTsgICAgICBcCiB9CiAK
LSNkZWZpbmUgR0xfU0FNRV9NRVRIT0RfM19YMTIoZ2xuYW1lLCBuYW1lLCB0MSwgdDIsIHQzKSAg
ICAgICAgICAgICAgICAgICAgICAgICBcCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpuYW1lKHQx
IGExLCB0MiBhMiwgdDMgYTMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAoteyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgZ2wjI2dsbmFt
ZShFWFRSQUNUKGExKSwgRVhUUkFDVChhMiksIGEzKTsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorI2RlZmluZSBERUxFR0FURV9UT19JTVBMXzUobmFtZSwgdDEsIHQyLCB0Mywg
dDQsIHQ1KSAgICAgIFwKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6bmFtZSh0MSBh
MSwgdDIgYTIsIHQzIGEzLCB0NCBhNCwgdDUgYTUpICAgICAgICBcCit7IFwKKyAgICBtX2ltcGwt
Pm5hbWUoYTEsIGEyLCBhMywgYTQsIGE1KTsgICBcCiB9CiAKLSNkZWZpbmUgR0xfU0FNRV9NRVRI
T0RfM19YMihnbG5hbWUsIG5hbWUsIHQxLCB0MiwgdDMpICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpuYW1lKHQxIGExLCB0MiBhMiwgdDMgYTMpICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAoteyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCi0gICAgZ2wjI2dsbmFtZShhMSwgRVhUUkFDVChhMiksIGEz
KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorI2RlZmluZSBE
RUxFR0FURV9UT19JTVBMXzVfWDQobmFtZSwgdDEsIHQyLCB0MywgdDQsIHQ1KSAgICAgICAgICAg
ICAgICBcCit2b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6Om5hbWUodDEgYTEsIHQyIGEy
LCB0MyBhMywgdDQgYTQsIHQ1IGE1KSAgICAgICAgXAoreyBcCisgICAgbV9pbXBsLT5uYW1lKGEx
LCBhMiwgYTMsIEVYVFJBQ1QoYTQpLCBhNSk7ICBcCiB9CiAKLSNkZWZpbmUgR0xfU0FNRV9NRVRI
T0RfNChnbG5hbWUsIG5hbWUsIHQxLCB0MiwgdDMsIHQ0KSAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpuYW1lKHQxIGExLCB0MiBhMiwgdDMgYTMsIHQ0
IGE0KSAgICAgICAgICAgICAgICAgICAgICAgXAoteyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCi0gICAgZ2wjI2dsbmFtZShhMSwgYTIsIGEzLCBhNCk7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorI2RlZmluZSBE
RUxFR0FURV9UT19JTVBMXzVSKG5hbWUsIHQxLCB0MiwgdDMsIHQ0LCB0NSwgcnQpICAgICAgXAor
cnQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6bmFtZSh0MSBhMSwgdDIgYTIsIHQzIGEzLCB0
NCBhNCwgdDUgYTUpICAgICAgICBcCit7IFwKKyAgICByZXR1cm4gbV9pbXBsLT5uYW1lKGExLCBh
MiwgYTMsIGE0LCBhNSk7ICAgXAogfQogCi0jZGVmaW5lIEdMX1NBTUVfTUVUSE9EXzRfWDQoZ2xu
YW1lLCBuYW1lLCB0MSwgdDIsIHQzLCB0NCkgICAgICAgICAgICAgICAgICAgICAgXAotdm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6bmFtZSh0MSBhMSwgdDIgYTIsIHQzIGEzLCB0NCBhNCkgICAgICAg
ICAgICAgICAgICAgICAgIFwKLXsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICAgIGdsIyNnbG5hbWUoYTEsIGEyLCBhMywgRVhUUkFDVChhNCkpOyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyNkZWZpbmUgREVMRUdBVEVfVE9f
SU1QTF82KG5hbWUsIHQxLCB0MiwgdDMsIHQ0LCB0NSwgdDYpICBcCit2b2lkIEdyYXBoaWNzQ29u
dGV4dDNESW50ZXJuYWw6Om5hbWUodDEgYTEsIHQyIGEyLCB0MyBhMywgdDQgYTQsIHQ1IGE1LCB0
NiBhNikgXAoreyBcCisgICAgbV9pbXBsLT5uYW1lKGExLCBhMiwgYTMsIGE0LCBhNSwgYTYpOyAg
ICAgICBcCiB9CiAKLSNkZWZpbmUgR0xfU0FNRV9NRVRIT0RfNShnbG5hbWUsIG5hbWUsIHQxLCB0
MiwgdDMsIHQ0LCB0NSkgICAgICAgICAgICAgICAgICAgICBcCi12b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpuYW1lKHQxIGExLCB0MiBhMiwgdDMgYTMsIHQ0IGE0LCB0NSBhNSkgICAgICAgICAgICAg
ICAgXAoteyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0g
ICAgZ2wjI2dsbmFtZShhMSwgYTIsIGEzLCBhNCwgYTUpOyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAorI2RlZmluZSBERUxFR0FURV9UT19JTVBMXzZSKG5hbWUs
IHQxLCB0MiwgdDMsIHQ0LCB0NSwgdDYsIHJ0KSAgXAorcnQgR3JhcGhpY3NDb250ZXh0M0RJbnRl
cm5hbDo6bmFtZSh0MSBhMSwgdDIgYTIsIHQzIGEzLCB0NCBhNCwgdDUgYTUsIHQ2IGE2KSBcCit7
IFwKKyAgICByZXR1cm4gbV9pbXBsLT5uYW1lKGExLCBhMiwgYTMsIGE0LCBhNSwgYTYpOyAgICAg
ICBcCiB9CiAKLSNkZWZpbmUgR0xfU0FNRV9NRVRIT0RfNV9YNChnbG5hbWUsIG5hbWUsIHQxLCB0
MiwgdDMsIHQ0LCB0NSkgICAgICAgICAgICAgICAgICBcCi12b2lkIEdyYXBoaWNzQ29udGV4dDNE
OjpuYW1lKHQxIGExLCB0MiBhMiwgdDMgYTMsIHQ0IGE0LCB0NSBhNSkgICAgICAgICAgICAgICAg
XAoteyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAg
Z2wjI2dsbmFtZShhMSwgYTIsIGEzLCBFWFRSQUNUKGE0KSwgYTUpOyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorI2RlZmluZSBERUxFR0FURV9UT19JTVBMXzdSKG5hbWUsIHQx
LCB0MiwgdDMsIHQ0LCB0NSwgdDYsIHQ3LCBydCkgXAorcnQgR3JhcGhpY3NDb250ZXh0M0RJbnRl
cm5hbDo6bmFtZSh0MSBhMSwgdDIgYTIsIHQzIGEzLCB0NCBhNCwgdDUgYTUsIHQ2IGE2LCB0NyBh
NykgXAoreyBcCisgICAgcmV0dXJuIG1faW1wbC0+bmFtZShhMSwgYTIsIGEzLCBhNCwgYTUsIGE2
LCBhNyk7ICAgXAogfQogCi0jZGVmaW5lIEdMX1NBTUVfTUVUSE9EXzYoZ2xuYW1lLCBuYW1lLCB0
MSwgdDIsIHQzLCB0NCwgdDUsIHQ2KSAgICAgICAgICAgICAgICAgXAotdm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6bmFtZSh0MSBhMSwgdDIgYTIsIHQzIGEzLCB0NCBhNCwgdDUgYTUsIHQ2IGE2KSAg
ICAgICAgIFwKLXsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAotICAgIGdsIyNnbG5hbWUoYTEsIGEyLCBhMywgYTQsIGE1LCBhNik7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyNkZWZpbmUgREVMRUdBVEVfVE9fSU1QTF84KG5h
bWUsIHQxLCB0MiwgdDMsIHQ0LCB0NSwgdDYsIHQ3LCB0OCkgICAgICAgXAordm9pZCBHcmFwaGlj
c0NvbnRleHQzREludGVybmFsOjpuYW1lKHQxIGExLCB0MiBhMiwgdDMgYTMsIHQ0IGE0LCB0NSBh
NSwgdDYgYTYsIHQ3IGE3LCB0OCBhOCkgXAoreyBcCisgICAgbV9pbXBsLT5uYW1lKGExLCBhMiwg
YTMsIGE0LCBhNSwgYTYsIGE3LCBhOCk7ICAgICAgXAogfQogCi0jZGVmaW5lIEdMX1NBTUVfTUVU
SE9EXzgoZ2xuYW1lLCBuYW1lLCB0MSwgdDIsIHQzLCB0NCwgdDUsIHQ2LCB0NywgdDgpICAgICAg
ICAgXAotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6bmFtZSh0MSBhMSwgdDIgYTIsIHQzIGEzLCB0
NCBhNCwgdDUgYTUsIHQ2IGE2LCB0NyBhNywgdDggYTgpICAgXAoteyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgZ2wjI2dsbmFtZShhMSwgYTIsIGEz
LCBhNCwgYTUsIGE2LCBhNywgYTgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor
I2RlZmluZSBERUxFR0FURV9UT19JTVBMXzlSKG5hbWUsIHQxLCB0MiwgdDMsIHQ0LCB0NSwgdDYs
IHQ3LCB0OCwgdDksIHJ0KSBcCitydCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpuYW1lKHQx
IGExLCB0MiBhMiwgdDMgYTMsIHQ0IGE0LCB0NSBhNSwgdDYgYTYsIHQ3IGE3LCB0OCBhOCwgdDkg
YTkpIFwKK3sgXAorICAgIHJldHVybiBtX2ltcGwtPm5hbWUoYTEsIGEyLCBhMywgYTQsIGE1LCBh
NiwgYTcsIGE4LCBhOSk7ICAgXAogfQogCi1QYXNzT3duUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBH
cmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlKEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0
dHJzKQotewotICAgIFBhc3NPd25QdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQgPSBuZXcg
R3JhcGhpY3NDb250ZXh0M0QoYXR0cnMpOwotICAgIC8vIEZJWE1FOiBhZGQgZXJyb3IgY2hlY2tp
bmcKLSAgICByZXR1cm4gY29udGV4dDsKLX0KK0RFTEVHQVRFX1RPX0lNUExfUihtYWtlQ29udGV4
dEN1cnJlbnQsIGJvb2wpCitERUxFR0FURV9UT19JTVBMXzFSKHNpemVJbkJ5dGVzLCBpbnQsIGlu
dCkKIAotR3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKEdyYXBoaWNzQ29udGV4
dDNEOjpBdHRyaWJ1dGVzIGF0dHJzKQotICAgIDogbV9jdXJyZW50V2lkdGgoMCkKLSAgICAsIG1f
Y3VycmVudEhlaWdodCgwKQotICAgICwgbV9pbnRlcm5hbChuZXcgR3JhcGhpY3NDb250ZXh0M0RJ
bnRlcm5hbChhdHRycykpCi17Ci19CitERUxFR0FURV9UT19JTVBMXzEoYWN0aXZlVGV4dHVyZSwg
dW5zaWduZWQgbG9uZykKK0RFTEVHQVRFX1RPX0lNUExfMl9YMTIoYXR0YWNoU2hhZGVyLCBXZWJH
TFByb2dyYW0qLCBXZWJHTFNoYWRlciopCiAKLUdyYXBoaWNzQ29udGV4dDNEOjp+R3JhcGhpY3ND
b250ZXh0M0QoKQordm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpiaW5kQXR0cmliTG9j
YXRpb24oV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCB1bnNpZ25lZCBsb25nIGluZGV4LCBjb25zdCBT
dHJpbmcmIG5hbWUpCiB7CisgICAgbV9pbXBsLT5iaW5kQXR0cmliTG9jYXRpb24oRVhUUkFDVChw
cm9ncmFtKSwgaW5kZXgsIG5hbWUudXRmOCgpLmRhdGEoKSk7CiB9CiAKLVBsYXRmb3JtR3JhcGhp
Y3NDb250ZXh0M0QgR3JhcGhpY3NDb250ZXh0M0Q6OnBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0Qo
KSBjb25zdAotewotICAgIHJldHVybiBtX2ludGVybmFsLT5wbGF0Zm9ybUdyYXBoaWNzQ29udGV4
dDNEKCk7Ci19CitERUxFR0FURV9UT19JTVBMXzJfWDIoYmluZEJ1ZmZlciwgdW5zaWduZWQgbG9u
ZywgV2ViR0xCdWZmZXIqKQorREVMRUdBVEVfVE9fSU1QTF8yX1gyKGJpbmRGcmFtZWJ1ZmZlciwg
dW5zaWduZWQgbG9uZywgV2ViR0xGcmFtZWJ1ZmZlciopCitERUxFR0FURV9UT19JTVBMXzJfWDIo
YmluZFJlbmRlcmJ1ZmZlciwgdW5zaWduZWQgbG9uZywgV2ViR0xSZW5kZXJidWZmZXIqKQogCi1Q
bGF0Zm9ybTNET2JqZWN0IEdyYXBoaWNzQ29udGV4dDNEOjpwbGF0Zm9ybVRleHR1cmUoKSBjb25z
dAotewotICAgIHJldHVybiBtX2ludGVybmFsLT5wbGF0Zm9ybVRleHR1cmUoKTsKLX0KK3N0YXRp
YyBjb25zdCBpbnQga1RleHR1cmVXcmFwUiA9IDB4ODA3MjsKIAotdm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6bWFrZUNvbnRleHRDdXJyZW50KCkKLXsKLSAgICBtX2ludGVybmFsLT5tYWtlQ29udGV4
dEN1cnJlbnQoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVzaGFwZShpbnQgd2lk
dGgsIGludCBoZWlnaHQpCisvLyBJZiB3ZSBkaWRuJ3QgaGF2ZSB0byBoYWNrIEdMX1RFWFRVUkVf
V1JBUF9SIGZvciBjdWJlIG1hcHMsCisvLyB3ZSBjb3VsZCBqdXN0IHVzZToKKy8vIERFTEVHQVRF
X1RPX0lNUExfMl9YMihiaW5kVGV4dHVyZSwgdW5zaWduZWQgbG9uZywgV2ViR0xUZXh0dXJlKikK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6YmluZFRleHR1cmUodW5zaWduZWQgbG9u
ZyB0YXJnZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdl
YkdMVGV4dHVyZSogdGV4dHVyZSkKIHsKLSAgICBpZiAod2lkdGggPT0gbV9jdXJyZW50V2lkdGgg
JiYgaGVpZ2h0ID09IG1fY3VycmVudEhlaWdodCkKLSAgICAgICAgcmV0dXJuOworICAgIHVuc2ln
bmVkIGludCB0ZXh0dXJlT2JqZWN0ID0gRVhUUkFDVCh0ZXh0dXJlKTsKIAotICAgIG1fY3VycmVu
dFdpZHRoID0gd2lkdGg7Ci0gICAgbV9jdXJyZW50SGVpZ2h0ID0gaGVpZ2h0OworICAgIG1faW1w
bC0+YmluZFRleHR1cmUodGFyZ2V0LCB0ZXh0dXJlT2JqZWN0KTsKIAotICAgIG1faW50ZXJuYWwt
PnJlc2hhcGUod2lkdGgsIGhlaWdodCk7CisgICAgLy8gRklYTUU6IEdMX1RFWFRVUkVfV1JBUF9S
IGlzbid0IGV4cG9zZWQgaW4gdGhlIE9wZW5HTCBFUyAyLjAKKyAgICAvLyBBUEkuIE9uIGRlc2t0
b3AgT3BlbkdMIGltcGxlbWVudGF0aW9ucyBpdCBzZWVtcyBuZWNlc3NhcnkgdG8KKyAgICAvLyBz
ZXQgdGhpcyB3cmFwIG1vZGUgdG8gR0xfQ0xBTVBfVE9fRURHRSB0byBnZXQgY29ycmVjdCBiZWhh
dmlvcgorICAgIC8vIG9mIGN1YmUgbWFwcy4KKyAgICBpZiAodGV4dHVyZSkKKyAgICAgICAgaWYg
KHRhcmdldCA9PSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUCkgeworICAgICAg
ICAgICAgaWYgKCF0ZXh0dXJlLT5pc0N1YmVNYXBSV3JhcE1vZGVJbml0aWFsaXplZCgpKSB7Cisg
ICAgICAgICAgICAgICAgbV9pbXBsLT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFX0NVQkVfTUFQLCBrVGV4dHVyZVdyYXBSLCBHcmFwaGljc0NvbnRleHQzRDo6Q0xBTVBf
VE9fRURHRSk7CisgICAgICAgICAgICAgICAgdGV4dHVyZS0+c2V0Q3ViZU1hcFJXcmFwTW9kZUlu
aXRpYWxpemVkKHRydWUpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UKKyAgICAgICAg
ICAgIHRleHR1cmUtPnNldEN1YmVNYXBSV3JhcE1vZGVJbml0aWFsaXplZChmYWxzZSk7CiB9CiAK
LXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJlZ2luUGFpbnQoV2ViR0xSZW5kZXJpbmdDb250ZXh0
KiBjb250ZXh0KQotewotICAgIG1faW50ZXJuYWwtPmJlZ2luUGFpbnQoY29udGV4dCk7Ci19CitE
RUxFR0FURV9UT19JTVBMXzQoYmxlbmRDb2xvciwgZG91YmxlLCBkb3VibGUsIGRvdWJsZSwgZG91
YmxlKQorREVMRUdBVEVfVE9fSU1QTF8xKGJsZW5kRXF1YXRpb24sIHVuc2lnbmVkIGxvbmcpCitE
RUxFR0FURV9UT19JTVBMXzIoYmxlbmRFcXVhdGlvblNlcGFyYXRlLCB1bnNpZ25lZCBsb25nLCB1
bnNpZ25lZCBsb25nKQorREVMRUdBVEVfVE9fSU1QTF8yKGJsZW5kRnVuYywgdW5zaWduZWQgbG9u
ZywgdW5zaWduZWQgbG9uZykKK0RFTEVHQVRFX1RPX0lNUExfNChibGVuZEZ1bmNTZXBhcmF0ZSwg
dW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9u
ZykKIAotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZW5kUGFpbnQoKQordm9pZCBHcmFwaGljc0Nv
bnRleHQzREludGVybmFsOjpidWZmZXJEYXRhKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBpbnQgc2l6
ZSwgdW5zaWduZWQgbG9uZyB1c2FnZSkKIHsKKyAgICBtX2ltcGwtPmJ1ZmZlckRhdGEodGFyZ2V0
LCBzaXplLCAwLCB1c2FnZSk7CiB9CiAKLWludCBHcmFwaGljc0NvbnRleHQzRDo6c2l6ZUluQnl0
ZXMoaW50IHR5cGUpCit2b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmJ1ZmZlckRhdGEo
dW5zaWduZWQgbG9uZyB0YXJnZXQsIFdlYkdMQXJyYXkqIGFycmF5LCB1bnNpZ25lZCBsb25nIHVz
YWdlKQogewotICAgIHN3aXRjaCAodHlwZSkgewotICAgIGNhc2UgR0xfQllURToKLSAgICAgICAg
cmV0dXJuIHNpemVvZihHTGJ5dGUpOwotICAgIGNhc2UgR0xfVU5TSUdORURfQllURToKLSAgICAg
ICAgcmV0dXJuIHNpemVvZihHTHVieXRlKTsKLSAgICBjYXNlIEdMX1NIT1JUOgotICAgICAgICBy
ZXR1cm4gc2l6ZW9mKEdMc2hvcnQpOwotICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlQ6Ci0gICAg
ICAgIHJldHVybiBzaXplb2YoR0x1c2hvcnQpOwotICAgIGNhc2UgR0xfSU5UOgotICAgICAgICBy
ZXR1cm4gc2l6ZW9mKEdMaW50KTsKLSAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVDoKLSAgICAgICAg
cmV0dXJuIHNpemVvZihHTHVpbnQpOwotICAgIGNhc2UgR0xfRkxPQVQ6Ci0gICAgICAgIHJldHVy
biBzaXplb2YoR0xmbG9hdCk7Ci0gICAgZGVmYXVsdDogLy8gRklYTUU6IGRlZmF1bHQgY2FzZXMg
YXJlIGRpc2NvdXJhZ2VkIGluIFdlYktpdC4KLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQorICAg
IG1faW1wbC0+YnVmZmVyRGF0YSh0YXJnZXQsIGFycmF5LT5ieXRlTGVuZ3RoKCksIGFycmF5LT5i
YXNlQWRkcmVzcygpLCB1c2FnZSk7CiB9CiAKLXVuc2lnbmVkIEdyYXBoaWNzQ29udGV4dDNEOjpj
cmVhdGVCdWZmZXIoKQordm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpidWZmZXJTdWJE
YXRhKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBsb25nIG9mZnNldCwgV2ViR0xBcnJheSogYXJyYXkp
CiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgR0x1aW50IG87Ci0gICAgZ2xHZW5C
dWZmZXJzKDEsICZvKTsKLSAgICByZXR1cm4gbzsKKyAgICBtX2ltcGwtPmJ1ZmZlclN1YkRhdGEo
dGFyZ2V0LCBvZmZzZXQsIGFycmF5LT5ieXRlTGVuZ3RoKCksIGFycmF5LT5iYXNlQWRkcmVzcygp
KTsKIH0KIAotdW5zaWduZWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZUZyYW1lYnVmZmVyKCkK
LXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBHTHVpbnQgbyA9IDA7Ci0gICAgZ2xH
ZW5GcmFtZWJ1ZmZlcnNFWFQoMSwgJm8pOwotICAgIHJldHVybiBvOwotfQorREVMRUdBVEVfVE9f
SU1QTF8xUihjaGVja0ZyYW1lYnVmZmVyU3RhdHVzLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBs
b25nKQorREVMRUdBVEVfVE9fSU1QTF8xKGNsZWFyLCB1bnNpZ25lZCBsb25nKQorREVMRUdBVEVf
VE9fSU1QTF80KGNsZWFyQ29sb3IsIGRvdWJsZSwgZG91YmxlLCBkb3VibGUsIGRvdWJsZSkKK0RF
TEVHQVRFX1RPX0lNUExfMShjbGVhckRlcHRoLCBkb3VibGUpCitERUxFR0FURV9UT19JTVBMXzEo
Y2xlYXJTdGVuY2lsLCBsb25nKQorREVMRUdBVEVfVE9fSU1QTF80KGNvbG9yTWFzaywgYm9vbCwg
Ym9vbCwgYm9vbCwgYm9vbCkKK0RFTEVHQVRFX1RPX0lNUExfMV9YKGNvbXBpbGVTaGFkZXIsIFdl
YkdMU2hhZGVyKikKIAotdW5zaWduZWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZVByb2dyYW0o
KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIHJldHVybiBnbENyZWF0ZVByb2dy
YW0oKTsKLX0KK0RFTEVHQVRFX1RPX0lNUExfOChjb3B5VGV4SW1hZ2UyRCwgdW5zaWduZWQgbG9u
ZywgbG9uZywgdW5zaWduZWQgbG9uZywgbG9uZywgbG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWdu
ZWQgbG9uZywgbG9uZykKK0RFTEVHQVRFX1RPX0lNUExfOChjb3B5VGV4U3ViSW1hZ2UyRCwgdW5z
aWduZWQgbG9uZywgbG9uZywgbG9uZywgbG9uZywgbG9uZywgbG9uZywgdW5zaWduZWQgbG9uZywg
dW5zaWduZWQgbG9uZykKK0RFTEVHQVRFX1RPX0lNUExfMShjdWxsRmFjZSwgdW5zaWduZWQgbG9u
ZykKK0RFTEVHQVRFX1RPX0lNUExfMShkZXB0aEZ1bmMsIHVuc2lnbmVkIGxvbmcpCitERUxFR0FU
RV9UT19JTVBMXzEoZGVwdGhNYXNrLCBib29sKQorREVMRUdBVEVfVE9fSU1QTF8yKGRlcHRoUmFu
Z2UsIGRvdWJsZSwgZG91YmxlKQorREVMRUdBVEVfVE9fSU1QTF8yX1gxMihkZXRhY2hTaGFkZXIs
IFdlYkdMUHJvZ3JhbSosIFdlYkdMU2hhZGVyKikKK0RFTEVHQVRFX1RPX0lNUExfMShkaXNhYmxl
LCB1bnNpZ25lZCBsb25nKQorREVMRUdBVEVfVE9fSU1QTF8xKGRpc2FibGVWZXJ0ZXhBdHRyaWJB
cnJheSwgdW5zaWduZWQgbG9uZykKK0RFTEVHQVRFX1RPX0lNUExfMyhkcmF3QXJyYXlzLCB1bnNp
Z25lZCBsb25nLCBsb25nLCBsb25nKQorREVMRUdBVEVfVE9fSU1QTF80KGRyYXdFbGVtZW50cywg
dW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgbG9uZykKIAotdW5z
aWduZWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZVJlbmRlcmJ1ZmZlcigpCi17Ci0gICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgR0x1aW50IG87Ci0gICAgZ2xHZW5SZW5kZXJidWZmZXJz
RVhUKDEsICZvKTsKLSAgICByZXR1cm4gbzsKLX0KK0RFTEVHQVRFX1RPX0lNUExfMShlbmFibGUs
IHVuc2lnbmVkIGxvbmcpCitERUxFR0FURV9UT19JTVBMXzEoZW5hYmxlVmVydGV4QXR0cmliQXJy
YXksIHVuc2lnbmVkIGxvbmcpCitERUxFR0FURV9UT19JTVBMKGZpbmlzaCkKK0RFTEVHQVRFX1RP
X0lNUEwoZmx1c2gpCitERUxFR0FURV9UT19JTVBMXzRfWDQoZnJhbWVidWZmZXJSZW5kZXJidWZm
ZXIsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIFdlYkdMUmVu
ZGVyYnVmZmVyKikKK0RFTEVHQVRFX1RPX0lNUExfNV9YNChmcmFtZWJ1ZmZlclRleHR1cmUyRCwg
dW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgV2ViR0xUZXh0dXJl
KiwgbG9uZykKK0RFTEVHQVRFX1RPX0lNUExfMShmcm9udEZhY2UsIHVuc2lnbmVkIGxvbmcpCitE
RUxFR0FURV9UT19JTVBMXzEoZ2VuZXJhdGVNaXBtYXAsIHVuc2lnbmVkIGxvbmcpCiAKLXVuc2ln
bmVkIEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVTaGFkZXIodW5zaWduZWQgbG9uZyB0eXBlKQor
Ym9vbCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpnZXRBY3RpdmVBdHRyaWIoV2ViR0xQcm9n
cmFtKiBwcm9ncmFtLCB1bnNpZ25lZCBsb25nIGluZGV4LCBBY3RpdmVJbmZvJiBpbmZvKQogewot
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIHJldHVybiBnbENyZWF0ZVNoYWRlcigodHlw
ZSA9PSBGUkFHTUVOVF9TSEFERVIpID8gR0xfRlJBR01FTlRfU0hBREVSIDogR0xfVkVSVEVYX1NI
QURFUik7CisgICAgV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRDo6QWN0aXZlSW5mbyB3ZWJJ
bmZvOworICAgIGlmICghbV9pbXBsLT5nZXRBY3RpdmVBdHRyaWIoRVhUUkFDVChwcm9ncmFtKSwg
aW5kZXgsIHdlYkluZm8pKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaW5mby5uYW1lID0g
d2ViSW5mby5uYW1lOworICAgIGluZm8udHlwZSA9IHdlYkluZm8udHlwZTsKKyAgICBpbmZvLnNp
emUgPSB3ZWJJbmZvLnNpemU7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKLXVuc2lnbmVkIEdyYXBo
aWNzQ29udGV4dDNEOjpjcmVhdGVUZXh0dXJlKCkKK2Jvb2wgR3JhcGhpY3NDb250ZXh0M0RJbnRl
cm5hbDo6Z2V0QWN0aXZlVW5pZm9ybShXZWJHTFByb2dyYW0qIHByb2dyYW0sIHVuc2lnbmVkIGxv
bmcgaW5kZXgsIEFjdGl2ZUluZm8mIGluZm8pCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
Ci0gICAgR0x1aW50IG87Ci0gICAgZ2xHZW5UZXh0dXJlcygxLCAmbyk7Ci0gICAgcmV0dXJuIG87
CisgICAgV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRDo6QWN0aXZlSW5mbyB3ZWJJbmZvOwor
ICAgIGlmICghbV9pbXBsLT5nZXRBY3RpdmVVbmlmb3JtKEVYVFJBQ1QocHJvZ3JhbSksIGluZGV4
LCB3ZWJJbmZvKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGluZm8ubmFtZSA9IHdlYklu
Zm8ubmFtZTsKKyAgICBpbmZvLnR5cGUgPSB3ZWJJbmZvLnR5cGU7CisgICAgaW5mby5zaXplID0g
d2ViSW5mby5zaXplOworICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpkZWxldGVCdWZmZXIodW5zaWduZWQgYnVmZmVyKQoraW50IEdyYXBoaWNzQ29udGV4dDNE
SW50ZXJuYWw6OmdldEF0dHJpYkxvY2F0aW9uKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgY29uc3Qg
U3RyaW5nJiBuYW1lKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsRGVsZXRl
QnVmZmVycygxLCAmYnVmZmVyKTsKKyAgICByZXR1cm4gbV9pbXBsLT5nZXRBdHRyaWJMb2NhdGlv
bihFWFRSQUNUKHByb2dyYW0pLCBuYW1lLnV0ZjgoKS5kYXRhKCkpOwogfQogCi12b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpkZWxldGVGcmFtZWJ1ZmZlcih1bnNpZ25lZCBmcmFtZWJ1ZmZlcikKLXsK
LSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbERlbGV0ZUZyYW1lYnVmZmVyc0VYVCgx
LCAmZnJhbWVidWZmZXIpOwotfQorREVMRUdBVEVfVE9fSU1QTF8yKGdldEJvb2xlYW52LCB1bnNp
Z25lZCBsb25nLCB1bnNpZ25lZCBjaGFyKikKIAotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVs
ZXRlUHJvZ3JhbSh1bnNpZ25lZCBwcm9ncmFtKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OwotICAgIGdsRGVsZXRlUHJvZ3JhbShwcm9ncmFtKTsKLX0KK0RFTEVHQVRFX1RPX0lNUExfMyhn
ZXRCdWZmZXJQYXJhbWV0ZXJpdiwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgaW50KikK
IAotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVsZXRlUmVuZGVyYnVmZmVyKHVuc2lnbmVkIHJl
bmRlcmJ1ZmZlcikKK0dyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIEdyYXBoaWNzQ29udGV4
dDNESW50ZXJuYWw6OmdldENvbnRleHRBdHRyaWJ1dGVzKCkKIHsKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKLSAgICBnbERlbGV0ZVJlbmRlcmJ1ZmZlcnNFWFQoMSwgJnJlbmRlcmJ1ZmZlcik7
CisgICAgV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyB3ZWJBdHRyaWJ1
dGVzID0gbV9pbXBsLT5nZXRDb250ZXh0QXR0cmlidXRlcygpOworICAgIEdyYXBoaWNzQ29udGV4
dDNEOjpBdHRyaWJ1dGVzIGF0dHJpYnV0ZXM7CisgICAgYXR0cmlidXRlcy5hbHBoYSA9IHdlYkF0
dHJpYnV0ZXMuYWxwaGE7CisgICAgYXR0cmlidXRlcy5kZXB0aCA9IHdlYkF0dHJpYnV0ZXMuZGVw
dGg7CisgICAgYXR0cmlidXRlcy5zdGVuY2lsID0gd2ViQXR0cmlidXRlcy5zdGVuY2lsOworICAg
IGF0dHJpYnV0ZXMuYW50aWFsaWFzID0gd2ViQXR0cmlidXRlcy5hbnRpYWxpYXM7CisgICAgYXR0
cmlidXRlcy5wcmVtdWx0aXBsaWVkQWxwaGEgPSB3ZWJBdHRyaWJ1dGVzLnByZW11bHRpcGxpZWRB
bHBoYTsKKyAgICByZXR1cm4gYXR0cmlidXRlczsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6ZGVsZXRlU2hhZGVyKHVuc2lnbmVkIHNoYWRlcikKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKLSAgICBnbERlbGV0ZVNoYWRlcihzaGFkZXIpOwotfQorREVMRUdBVEVfVE9fSU1QTF9S
KGdldEVycm9yLCB1bnNpZ25lZCBsb25nKQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZWxl
dGVUZXh0dXJlKHVuc2lnbmVkIHRleHR1cmUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
Ci0gICAgZ2xEZWxldGVUZXh0dXJlcygxLCAmdGV4dHVyZSk7Ci19CitERUxFR0FURV9UT19JTVBM
XzIoZ2V0RmxvYXR2LCB1bnNpZ25lZCBsb25nLCBmbG9hdCopCiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OmFjdGl2ZVRleHR1cmUodW5zaWduZWQgbG9uZyB0ZXh0dXJlKQotewotICAgIG1faW50
ZXJuYWwtPmFjdGl2ZVRleHR1cmUodGV4dHVyZSk7Ci19CitERUxFR0FURV9UT19JTVBMXzQoZ2V0
RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVk
IGxvbmcsIHVuc2lnbmVkIGxvbmcsIGludCopCiAKLUdMX1NBTUVfTUVUSE9EXzJfWDEyKEF0dGFj
aFNoYWRlciwgYXR0YWNoU2hhZGVyLCBXZWJHTFByb2dyYW0qLCBXZWJHTFNoYWRlciopCitERUxF
R0FURV9UT19JTVBMXzIoZ2V0SW50ZWdlcnYsIHVuc2lnbmVkIGxvbmcsIGludCopCiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRBdHRyaWJMb2NhdGlvbihXZWJHTFByb2dyYW0qIHByb2dy
YW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg
bG9uZyBpbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBTdHJpbmcmIG5hbWUpCi17Ci0gICAgaWYgKCFwcm9ncmFtKQotICAgICAgICByZXR1cm47
Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2xCaW5kQXR0cmliTG9jYXRpb24oRVhU
UkFDVChwcm9ncmFtKSwgaW5kZXgsIG5hbWUudXRmOCgpLmRhdGEoKSk7Ci19CitERUxFR0FURV9U
T19JTVBMXzNfWDEoZ2V0UHJvZ3JhbWl2LCBXZWJHTFByb2dyYW0qLCB1bnNpZ25lZCBsb25nLCBp
bnQqKQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpiaW5kQnVmZmVyKHVuc2lnbmVkIGxvbmcg
dGFyZ2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJHTEJ1ZmZlciog
YnVmZmVyKQorU3RyaW5nIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmdldFByb2dyYW1JbmZv
TG9nKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSkKIHsKLSAgICBtX2ludGVybmFsLT5iaW5kQnVmZmVy
KHRhcmdldCwgYnVmZmVyKTsKKyAgICByZXR1cm4gbV9pbXBsLT5nZXRQcm9ncmFtSW5mb0xvZyhF
WFRSQUNUKHByb2dyYW0pKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmluZEZyYW1l
YnVmZmVyKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBXZWJHTEZyYW1lYnVmZmVyKiBmcmFtZWJ1ZmZl
cikKLXsKLSAgICBtX2ludGVybmFsLT5iaW5kRnJhbWVidWZmZXIodGFyZ2V0LCBmcmFtZWJ1ZmZl
cik7Ci19CitERUxFR0FURV9UT19JTVBMXzMoZ2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXYsIHVu
c2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIGludCopCiAKLUdMX1NBTUVfTUVUSE9EXzJfWDIo
QmluZFJlbmRlcmJ1ZmZlckVYVCwgYmluZFJlbmRlcmJ1ZmZlciwgdW5zaWduZWQgbG9uZywgV2Vi
R0xSZW5kZXJidWZmZXIqKQorREVMRUdBVEVfVE9fSU1QTF8zX1gxKGdldFNoYWRlcml2LCBXZWJH
TFNoYWRlciosIHVuc2lnbmVkIGxvbmcsIGludCopCiAKLS8vIElmIHdlIGRpZG4ndCBoYXZlIHRv
IGhhY2sgR0xfVEVYVFVSRV9XUkFQX1IgZm9yIGN1YmUgbWFwcywKLS8vIHdlIGNvdWxkIGp1c3Qg
dXNlOgotLy8gR0xfU0FNRV9NRVRIT0RfMl9YMihCaW5kVGV4dHVyZSwgYmluZFRleHR1cmUsIHVu
c2lnbmVkIGxvbmcsIFdlYkdMVGV4dHVyZSopCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpiaW5k
VGV4dHVyZSh1bnNpZ25lZCBsb25nIHRhcmdldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFdlYkdMVGV4dHVyZSogdGV4dHVyZSkKK1N0cmluZyBHcmFwaGljc0NvbnRleHQz
REludGVybmFsOjpnZXRTaGFkZXJJbmZvTG9nKFdlYkdMU2hhZGVyKiBzaGFkZXIpCiB7Ci0gICAg
bV9pbnRlcm5hbC0+YmluZFRleHR1cmUodGFyZ2V0LCB0ZXh0dXJlKTsKKyAgICByZXR1cm4gbV9p
bXBsLT5nZXRTaGFkZXJJbmZvTG9nKEVYVFJBQ1Qoc2hhZGVyKSk7CiB9CiAKLUdMX1NBTUVfTUVU
SE9EXzQoQmxlbmRDb2xvciwgYmxlbmRDb2xvciwgZG91YmxlLCBkb3VibGUsIGRvdWJsZSwgZG91
YmxlKQotCi1HTF9TQU1FX01FVEhPRF8xKEJsZW5kRXF1YXRpb24sIGJsZW5kRXF1YXRpb24sIHVu
c2lnbmVkIGxvbmcpCi0KLUdMX1NBTUVfTUVUSE9EXzIoQmxlbmRFcXVhdGlvblNlcGFyYXRlLCBi
bGVuZEVxdWF0aW9uU2VwYXJhdGUsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpCi0KLUdM
X1NBTUVfTUVUSE9EXzIoQmxlbmRGdW5jLCBibGVuZEZ1bmMsIHVuc2lnbmVkIGxvbmcsIHVuc2ln
bmVkIGxvbmcpCi0KLUdMX1NBTUVfTUVUSE9EXzQoQmxlbmRGdW5jU2VwYXJhdGUsIGJsZW5kRnVu
Y1NlcGFyYXRlLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCB1
bnNpZ25lZCBsb25nKQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpidWZmZXJEYXRhKHVuc2ln
bmVkIGxvbmcgdGFyZ2V0LCBpbnQgc2l6ZSwgdW5zaWduZWQgbG9uZyB1c2FnZSkKK1N0cmluZyBH
cmFwaGljc0NvbnRleHQzREludGVybmFsOjpnZXRTaGFkZXJTb3VyY2UoV2ViR0xTaGFkZXIqIHNo
YWRlcikKIHsKLSAgICBtX2ludGVybmFsLT5idWZmZXJEYXRhSW1wbCh0YXJnZXQsIHNpemUsIDAs
IHVzYWdlKTsKKyAgICByZXR1cm4gbV9pbXBsLT5nZXRTaGFkZXJTb3VyY2UoRVhUUkFDVChzaGFk
ZXIpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YnVmZmVyRGF0YSh1bnNpZ25lZCBs
b25nIHRhcmdldCwgV2ViR0xBcnJheSogYXJyYXksIHVuc2lnbmVkIGxvbmcgdXNhZ2UpCitTdHJp
bmcgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6Z2V0U3RyaW5nKHVuc2lnbmVkIGxvbmcgbmFt
ZSkKIHsKLSAgICBtX2ludGVybmFsLT5idWZmZXJEYXRhSW1wbCh0YXJnZXQsIGFycmF5LT5ieXRl
TGVuZ3RoKCksIGFycmF5LT5iYXNlQWRkcmVzcygpLCB1c2FnZSk7CisgICAgcmV0dXJuIG1faW1w
bC0+Z2V0U3RyaW5nKG5hbWUpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpidWZmZXJT
dWJEYXRhKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBsb25nIG9mZnNldCwgV2ViR0xBcnJheSogYXJy
YXkpCi17Ci0gICAgaWYgKCFhcnJheSB8fCAhYXJyYXktPmxlbmd0aCgpKQotICAgICAgICByZXR1
cm47CitERUxFR0FURV9UT19JTVBMXzMoZ2V0VGV4UGFyYW1ldGVyZnYsIHVuc2lnbmVkIGxvbmcs
IHVuc2lnbmVkIGxvbmcsIGZsb2F0KikKK0RFTEVHQVRFX1RPX0lNUExfMyhnZXRUZXhQYXJhbWV0
ZXJpdiwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgaW50KikKIAotICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOwotICAgIC8vIEZJWE1FOiBtYWtlIHRoaXMgdmVyaWZpY2F0aW9uIG1vcmUg
ZWZmaWNpZW50LgotICAgIEdMaW50IGJpbmRpbmcgPSAwOwotICAgIEdMZW51bSBiaW5kaW5nX3Rh
cmdldCA9IEdMX0FSUkFZX0JVRkZFUl9CSU5ESU5HOwotICAgIGlmICh0YXJnZXQgPT0gR0xfRUxF
TUVOVF9BUlJBWV9CVUZGRVIpCi0gICAgICAgIGJpbmRpbmdfdGFyZ2V0ID0gR0xfRUxFTUVOVF9B
UlJBWV9CVUZGRVJfQklORElORzsKLSAgICBnbEdldEludGVnZXJ2KGJpbmRpbmdfdGFyZ2V0LCAm
YmluZGluZyk7Ci0gICAgaWYgKGJpbmRpbmcgPD0gMCkgewotICAgICAgICAvLyBGSVhNRTogcmFp
c2UgZXhjZXB0aW9uLgotICAgICAgICAvLyBMb2dNZXNzYWdlZigoImJ1ZmZlclN1YkRhdGE6IG5v
IGJ1ZmZlciBib3VuZCIpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBnbEJ1ZmZlclN1
YkRhdGEodGFyZ2V0LCBvZmZzZXQsIGFycmF5LT5ieXRlTGVuZ3RoKCksIGFycmF5LT5iYXNlQWRk
cmVzcygpKTsKLX0KK0RFTEVHQVRFX1RPX0lNUExfM19YMShnZXRVbmlmb3JtZnYsIFdlYkdMUHJv
Z3JhbSosIGxvbmcsIGZsb2F0KikKK0RFTEVHQVRFX1RPX0lNUExfM19YMShnZXRVbmlmb3JtaXYs
IFdlYkdMUHJvZ3JhbSosIGxvbmcsIGludCopCiAKLXVuc2lnbmVkIGxvbmcgR3JhcGhpY3NDb250
ZXh0M0Q6OmNoZWNrRnJhbWVidWZmZXJTdGF0dXModW5zaWduZWQgbG9uZyB0YXJnZXQpCitsb25n
IEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmdldFVuaWZvcm1Mb2NhdGlvbihXZWJHTFByb2dy
YW0qIHByb2dyYW0sIGNvbnN0IFN0cmluZyYgbmFtZSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKLSAgICByZXR1cm4gZ2xDaGVja0ZyYW1lYnVmZmVyU3RhdHVzRVhUKHRhcmdldCk7Cisg
ICAgcmV0dXJuIG1faW1wbC0+Z2V0VW5pZm9ybUxvY2F0aW9uKEVYVFJBQ1QocHJvZ3JhbSksIG5h
bWUudXRmOCgpLmRhdGEoKSk7CiB9CiAKLUdMX1NBTUVfTUVUSE9EXzEoQ2xlYXIsIGNsZWFyLCB1
bnNpZ25lZCBsb25nKQotCi1HTF9TQU1FX01FVEhPRF80KENsZWFyQ29sb3IsIGNsZWFyQ29sb3Is
IGRvdWJsZSwgZG91YmxlLCBkb3VibGUsIGRvdWJsZSkKK0RFTEVHQVRFX1RPX0lNUExfMyhnZXRW
ZXJ0ZXhBdHRyaWJmdiwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgZmxvYXQqKQorREVM
RUdBVEVfVE9fSU1QTF8zKGdldFZlcnRleEF0dHJpYml2LCB1bnNpZ25lZCBsb25nLCB1bnNpZ25l
ZCBsb25nLCBpbnQqKQogCi1HTF9TQU1FX01FVEhPRF8xKENsZWFyRGVwdGgsIGNsZWFyRGVwdGgs
IGRvdWJsZSkKK0RFTEVHQVRFX1RPX0lNUExfMlIoZ2V0VmVydGV4QXR0cmliT2Zmc2V0LCB1bnNp
Z25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCBsb25nKQogCi1HTF9TQU1FX01FVEhPRF8xKENsZWFy
U3RlbmNpbCwgY2xlYXJTdGVuY2lsLCBsb25nKQorREVMRUdBVEVfVE9fSU1QTF8yKGhpbnQsIHVu
c2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpCitERUxFR0FURV9UT19JTVBMXzFSX1goaXNCdWZm
ZXIsIFdlYkdMQnVmZmVyKiwgYm9vbCkKK0RFTEVHQVRFX1RPX0lNUExfMVIoaXNFbmFibGVkLCB1
bnNpZ25lZCBsb25nLCBib29sKQorREVMRUdBVEVfVE9fSU1QTF8xUl9YKGlzRnJhbWVidWZmZXIs
IFdlYkdMRnJhbWVidWZmZXIqLCBib29sKQorREVMRUdBVEVfVE9fSU1QTF8xUl9YKGlzUHJvZ3Jh
bSwgV2ViR0xQcm9ncmFtKiwgYm9vbCkKK0RFTEVHQVRFX1RPX0lNUExfMVJfWChpc1JlbmRlcmJ1
ZmZlciwgV2ViR0xSZW5kZXJidWZmZXIqLCBib29sKQorREVMRUdBVEVfVE9fSU1QTF8xUl9YKGlz
U2hhZGVyLCBXZWJHTFNoYWRlciosIGJvb2wpCitERUxFR0FURV9UT19JTVBMXzFSX1goaXNUZXh0
dXJlLCBXZWJHTFRleHR1cmUqLCBib29sKQorREVMRUdBVEVfVE9fSU1QTF8xKGxpbmVXaWR0aCwg
ZG91YmxlKQorREVMRUdBVEVfVE9fSU1QTF8xX1gobGlua1Byb2dyYW0sIFdlYkdMUHJvZ3JhbSop
CitERUxFR0FURV9UT19JTVBMXzIocGl4ZWxTdG9yZWksIHVuc2lnbmVkIGxvbmcsIGxvbmcpCitE
RUxFR0FURV9UT19JTVBMXzIocG9seWdvbk9mZnNldCwgZG91YmxlLCBkb3VibGUpCiAKLUdMX1NB
TUVfTUVUSE9EXzQoQ29sb3JNYXNrLCBjb2xvck1hc2ssIGJvb2wsIGJvb2wsIGJvb2wsIGJvb2wp
Ci0KLUdMX1NBTUVfTUVUSE9EXzFfWChDb21waWxlU2hhZGVyLCBjb21waWxlU2hhZGVyLCBXZWJH
TFNoYWRlciopCi0KLUdMX1NBTUVfTUVUSE9EXzgoQ29weVRleEltYWdlMkQsIGNvcHlUZXhJbWFn
ZTJELCB1bnNpZ25lZCBsb25nLCBsb25nLCB1bnNpZ25lZCBsb25nLCBsb25nLCBsb25nLCB1bnNp
Z25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCBsb25nKQotCi1HTF9TQU1FX01FVEhPRF84KENvcHlU
ZXhTdWJJbWFnZTJELCBjb3B5VGV4U3ViSW1hZ2UyRCwgdW5zaWduZWQgbG9uZywgbG9uZywgbG9u
ZywgbG9uZywgbG9uZywgbG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZykKLQotR0xf
U0FNRV9NRVRIT0RfMShDdWxsRmFjZSwgY3VsbEZhY2UsIHVuc2lnbmVkIGxvbmcpCi0KLUdMX1NB
TUVfTUVUSE9EXzEoRGVwdGhGdW5jLCBkZXB0aEZ1bmMsIHVuc2lnbmVkIGxvbmcpCi0KLUdMX1NB
TUVfTUVUSE9EXzEoRGVwdGhNYXNrLCBkZXB0aE1hc2ssIGJvb2wpCi0KLUdMX1NBTUVfTUVUSE9E
XzIoRGVwdGhSYW5nZSwgZGVwdGhSYW5nZSwgZG91YmxlLCBkb3VibGUpCi0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OmRldGFjaFNoYWRlcihXZWJHTFByb2dyYW0qIHByb2dyYW0sIFdlYkdMU2hh
ZGVyKiBzaGFkZXIpCitQYXNzUmVmUHRyPFdlYkdMQXJyYXk+IEdyYXBoaWNzQ29udGV4dDNESW50
ZXJuYWw6OnJlYWRQaXhlbHMobG9uZyB4LCBsb25nIHksIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVu
c2lnbmVkIGxvbmcgaGVpZ2h0LCB1bnNpZ25lZCBsb25nIGZvcm1hdCwgdW5zaWduZWQgbG9uZyB0
eXBlKQogewotICAgIGlmICghcHJvZ3JhbSB8fCAhc2hhZGVyKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbERldGFjaFNoYWRlcihFWFRSQUNUKHBy
b2dyYW0pLCBFWFRSQUNUKHNoYWRlcikpOworICAgIC8vIEZJWE1FOiB0YWtlIGludG8gYWNjb3Vu
dCBwYWNrIGFsaWdubWVudC4KKyAgICBSZWZQdHI8V2ViR0xVbnNpZ25lZEJ5dGVBcnJheT4gYXJy
YXkgPSBXZWJHTFVuc2lnbmVkQnl0ZUFycmF5OjpjcmVhdGUod2lkdGggKiBoZWlnaHQgKiA0KTsK
KyAgICBtX2ltcGwtPnJlYWRQaXhlbHMoeCwgeSwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBl
LCBhcnJheS0+YmFzZUFkZHJlc3MoKSk7CisgICAgcmV0dXJuIGFycmF5OwogfQogCi1HTF9TQU1F
X01FVEhPRF8xKERpc2FibGUsIGRpc2FibGUsIHVuc2lnbmVkIGxvbmcpCitERUxFR0FURV9UT19J
TVBMKHJlbGVhc2VTaGFkZXJDb21waWxlcikKK0RFTEVHQVRFX1RPX0lNUExfNChyZW5kZXJidWZm
ZXJTdG9yYWdlLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCB1
bnNpZ25lZCBsb25nKQorREVMRUdBVEVfVE9fSU1QTF8yKHNhbXBsZUNvdmVyYWdlLCBkb3VibGUs
IGJvb2wpCitERUxFR0FURV9UT19JTVBMXzQoc2Npc3NvciwgbG9uZywgbG9uZywgdW5zaWduZWQg
bG9uZywgdW5zaWduZWQgbG9uZykKIAotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGlzYWJsZVZl
cnRleEF0dHJpYkFycmF5KHVuc2lnbmVkIGxvbmcgaW5kZXgpCit2b2lkIEdyYXBoaWNzQ29udGV4
dDNESW50ZXJuYWw6OnNoYWRlclNvdXJjZShXZWJHTFNoYWRlciogc2hhZGVyLCBjb25zdCBTdHJp
bmcmIHN0cmluZykKIHsKLSAgICBtX2ludGVybmFsLT5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXko
aW5kZXgpOworICAgIG1faW1wbC0+c2hhZGVyU291cmNlKEVYVFJBQ1Qoc2hhZGVyKSwgc3RyaW5n
LnV0ZjgoKS5kYXRhKCkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkcmF3QXJyYXlz
KHVuc2lnbmVkIGxvbmcgbW9kZSwgbG9uZyBmaXJzdCwgbG9uZyBjb3VudCkKLXsKLSAgICBzd2l0
Y2ggKG1vZGUpIHsKLSAgICBjYXNlIEdMX1RSSUFOR0xFUzoKLSAgICBjYXNlIEdMX1RSSUFOR0xF
X1NUUklQOgotICAgIGNhc2UgR0xfVFJJQU5HTEVfRkFOOgotICAgIGNhc2UgR0xfUE9JTlRTOgot
ICAgIGNhc2UgR0xfTElORV9TVFJJUDoKLSAgICBjYXNlIEdMX0xJTkVfTE9PUDoKLSAgICBjYXNl
IEdMX0xJTkVTOgotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OiAvLyBGSVhNRTogZGVmYXVs
dCBjYXNlcyBhcmUgZGlzY291cmFnZWQgaW4gV2ViS2l0LgotICAgICAgICAvLyBGSVhNRTogb3V0
cHV0IGxvZyBtZXNzYWdlLCByYWlzZSBleGNlcHRpb24uCi0gICAgICAgIC8vIExvZ01lc3NhZ2Uo
TlNfTElURVJBTF9DU1RSSU5HKCJkcmF3QXJyYXlzOiBpbnZhbGlkIG1vZGUiKSk7Ci0gICAgICAg
IC8vIHJldHVybiBOU19FUlJPUl9ET01fU1lOVEFYX0VSUjsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KK0RFTEVHQVRFX1RPX0lNUExfMyhzdGVuY2lsRnVuYywgdW5zaWduZWQgbG9uZywgbG9uZywg
dW5zaWduZWQgbG9uZykKK0RFTEVHQVRFX1RPX0lNUExfNChzdGVuY2lsRnVuY1NlcGFyYXRlLCB1
bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCBsb25nLCB1bnNpZ25lZCBsb25nKQorREVMRUdB
VEVfVE9fSU1QTF8xKHN0ZW5jaWxNYXNrLCB1bnNpZ25lZCBsb25nKQorREVMRUdBVEVfVE9fSU1Q
TF8yKHN0ZW5jaWxNYXNrU2VwYXJhdGUsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpCitE
RUxFR0FURV9UT19JTVBMXzMoc3RlbmNpbE9wLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25n
LCB1bnNpZ25lZCBsb25nKQorREVMRUdBVEVfVE9fSU1QTF80KHN0ZW5jaWxPcFNlcGFyYXRlLCB1
bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25n
KQogCi0gICAgaWYgKGZpcnN0K2NvdW50IDwgZmlyc3QgfHwgZmlyc3QrY291bnQgPCBjb3VudCkg
ewotICAgICAgICAvLyBGSVhNRTogb3V0cHV0IGxvZyBtZXNzYWdlLCByYWlzZSBleGNlcHRpb24u
Ci0gICAgICAgIC8vIExvZ01lc3NhZ2UoTlNfTElURVJBTF9DU1RSSU5HKCJkcmF3QXJyYXlzOiBv
dmVyZmxvdyBpbiBmaXJzdCtjb3VudCIpKTsKLSAgICAgICAgLy8gcmV0dXJuIE5TX0VSUk9SX0lO
VkFMSURfQVJHOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gRklYTUU6IHZhbGlk
YXRlIGFnYWluc3QgY3VycmVudGx5IGJvdW5kIGJ1ZmZlci4KLSAgICAvLyBpZiAoIVZhbGlkYXRl
QnVmZmVycyhmaXJzdCtjb3VudCkpCi0gICAgLy8gICAgIHJldHVybiBOU19FUlJPUl9JTlZBTElE
X0FSRzsKLQotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsRHJhd0FycmF5cyhtb2Rl
LCBmaXJzdCwgY291bnQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkcmF3RWxlbWVu
dHModW5zaWduZWQgbG9uZyBtb2RlLCB1bnNpZ25lZCBsb25nIGNvdW50LCB1bnNpZ25lZCBsb25n
IHR5cGUsIGxvbmcgb2Zmc2V0KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIC8v
IEZJWE1FOiBtYWtlIHRoaXMgdmVyaWZpY2F0aW9uIG1vcmUgZWZmaWNpZW50LgotICAgIEdMaW50
IGJpbmRpbmcgPSAwOwotICAgIEdMZW51bSBiaW5kaW5nX3RhcmdldCA9IEdMX0VMRU1FTlRfQVJS
QVlfQlVGRkVSX0JJTkRJTkc7Ci0gICAgZ2xHZXRJbnRlZ2VydihiaW5kaW5nX3RhcmdldCwgJmJp
bmRpbmcpOwotICAgIGlmIChiaW5kaW5nIDw9IDApIHsKLSAgICAgICAgLy8gRklYTUU6IHJhaXNl
IGV4Y2VwdGlvbi4KLSAgICAgICAgLy8gTG9nTWVzc2FnZWYoKCJidWZmZXJEYXRhOiBubyBidWZm
ZXIgYm91bmQiKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgZ2xEcmF3RWxlbWVudHMo
bW9kZSwgY291bnQsIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx2
b2lkKj4oc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KG9mZnNldCkpKTsKK2ludCBHcmFwaGljc0NvbnRl
eHQzREludGVybmFsOjp0ZXhJbWFnZTJEKHVuc2lnbmVkIHRhcmdldCwgdW5zaWduZWQgbGV2ZWws
IHVuc2lnbmVkIGludGVybmFsZm9ybWF0LCB1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0
LCB1bnNpZ25lZCBib3JkZXIsIHVuc2lnbmVkIGZvcm1hdCwgdW5zaWduZWQgdHlwZSwgdm9pZCog
cGl4ZWxzKQoreworICAgIG1faW1wbC0+dGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5h
bGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBmb3JtYXQsIHR5cGUsIHBpeGVscyk7Cisg
ICAgcmV0dXJuIDA7CiB9CiAKLUdMX1NBTUVfTUVUSE9EXzEoRW5hYmxlLCBlbmFibGUsIHVuc2ln
bmVkIGxvbmcpCitERUxFR0FURV9UT19JTVBMXzModGV4UGFyYW1ldGVyZiwgdW5zaWduZWQsIHVu
c2lnbmVkLCBmbG9hdCkKK0RFTEVHQVRFX1RPX0lNUExfMyh0ZXhQYXJhbWV0ZXJpLCB1bnNpZ25l
ZCwgdW5zaWduZWQsIGludCkKIAotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZW5hYmxlVmVydGV4
QXR0cmliQXJyYXkodW5zaWduZWQgbG9uZyBpbmRleCkKK2ludCBHcmFwaGljc0NvbnRleHQzRElu
dGVybmFsOjp0ZXhTdWJJbWFnZTJEKHVuc2lnbmVkIHRhcmdldCwgdW5zaWduZWQgbGV2ZWwsIHVu
c2lnbmVkIHhvZmZzZXQsIHVuc2lnbmVkIHlvZmZzZXQsIHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25l
ZCBoZWlnaHQsIHVuc2lnbmVkIGZvcm1hdCwgdW5zaWduZWQgdHlwZSwgdm9pZCogcGl4ZWxzKQog
ewotICAgIG1faW50ZXJuYWwtPmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGluZGV4KTsKKyAgICBt
X2ltcGwtPnRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lk
dGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpOworICAgIHJldHVybiAwOwogfQogCi1H
TF9TQU1FX01FVEhPRF8wKEZpbmlzaCwgZmluaXNoKQotCi1HTF9TQU1FX01FVEhPRF8wKEZsdXNo
LCBmbHVzaCkKK0RFTEVHQVRFX1RPX0lNUExfMih1bmlmb3JtMWYsIGxvbmcsIGZsb2F0KQogCi1H
TF9TQU1FX01FVEhPRF80X1g0KEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyRVhULCBmcmFtZWJ1ZmZl
clJlbmRlcmJ1ZmZlciwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9u
ZywgV2ViR0xSZW5kZXJidWZmZXIqKQotCi1HTF9TQU1FX01FVEhPRF81X1g0KEZyYW1lYnVmZmVy
VGV4dHVyZTJERVhULCBmcmFtZWJ1ZmZlclRleHR1cmUyRCwgdW5zaWduZWQgbG9uZywgdW5zaWdu
ZWQgbG9uZywgdW5zaWduZWQgbG9uZywgV2ViR0xUZXh0dXJlKiwgbG9uZykKLQotR0xfU0FNRV9N
RVRIT0RfMShGcm9udEZhY2UsIGZyb250RmFjZSwgdW5zaWduZWQgbG9uZykKLQotdm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6Z2VuZXJhdGVNaXBtYXAodW5zaWduZWQgbG9uZyB0YXJnZXQpCit2b2lk
IEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OnVuaWZvcm0xZnYobG9uZyBsb2NhdGlvbiwgZmxv
YXQqIHYsIGludCBzaXplKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGlmIChn
bEdlbmVyYXRlTWlwbWFwRVhUKQotICAgICAgICBnbEdlbmVyYXRlTWlwbWFwRVhUKHRhcmdldCk7
Ci0gICAgLy8gRklYTUU6IHByb3ZpZGUgYWx0ZXJuYXRpdmUgY29kZSBwYXRoPyBUaGlzIHdpbGwg
YmUgdW5wbGVhc2FudAotICAgIC8vIHRvIGltcGxlbWVudCBpZiBnbEdlbmVyYXRlTWlwbWFwRVhU
IGlzIG5vdCBhdmFpbGFibGUgLS0gaXQgd2lsbAotICAgIC8vIHJlcXVpcmUgYSB0ZXh0dXJlIHJl
YWRiYWNrIGFuZCByZS11cGxvYWQuCisgICAgbV9pbXBsLT51bmlmb3JtMWZ2KGxvY2F0aW9uLCBz
aXplLCB2KTsKIH0KIAotYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0QWN0aXZlQXR0cmliKFdl
YkdMUHJvZ3JhbSogcHJvZ3JhbSwgdW5zaWduZWQgbG9uZyBpbmRleCwgQWN0aXZlSW5mbyYgaW5m
bykKLXsKLSAgICBpZiAoIXByb2dyYW0pIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoSU5W
QUxJRF9WQUxVRSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgR0xpbnQgbWF4
TmFtZUxlbmd0aCA9IC0xOwotICAgIGdsR2V0UHJvZ3JhbWl2KEVYVFJBQ1QocHJvZ3JhbSksIEdM
X0FDVElWRV9BVFRSSUJVVEVfTUFYX0xFTkdUSCwgJm1heE5hbWVMZW5ndGgpOwotICAgIGlmICht
YXhOYW1lTGVuZ3RoIDwgMCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIEdMY2hhciogbmFt
ZSA9IDA7Ci0gICAgaWYgKCF0cnlGYXN0TWFsbG9jKG1heE5hbWVMZW5ndGggKiBzaXplb2YoR0xj
aGFyKSkuZ2V0VmFsdWUobmFtZSkpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoT1VUX09G
X01FTU9SWSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgR0xzaXplaSBsZW5n
dGggPSAwOwotICAgIEdMaW50IHNpemUgPSAtMTsKLSAgICBHTGVudW0gdHlwZSA9IDA7Ci0gICAg
Z2xHZXRBY3RpdmVBdHRyaWIoRVhUUkFDVChwcm9ncmFtKSwgaW5kZXgsIG1heE5hbWVMZW5ndGgs
Ci0gICAgICAgICAgICAgICAgICAgICAgJmxlbmd0aCwgJnNpemUsICZ0eXBlLCBuYW1lKTsKLSAg
ICBpZiAoc2l6ZSA8IDApIHsKLSAgICAgICAgZmFzdEZyZWUobmFtZSk7Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci0gICAgaW5mby5uYW1lID0gU3RyaW5nKG5hbWUsIGxlbmd0aCk7Ci0g
ICAgaW5mby50eXBlID0gdHlwZTsKLSAgICBpbmZvLnNpemUgPSBzaXplOwotICAgIGZhc3RGcmVl
KG5hbWUpOwotICAgIHJldHVybiB0cnVlOwotfQorREVMRUdBVEVfVE9fSU1QTF8yKHVuaWZvcm0x
aSwgbG9uZywgaW50KQogCi1ib29sIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRBY3RpdmVVbmlmb3Jt
KFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgdW5zaWduZWQgbG9uZyBpbmRleCwgQWN0aXZlSW5mbyYg
aW5mbykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6dW5pZm9ybTFpdihsb25nIGxv
Y2F0aW9uLCBpbnQqIHYsIGludCBzaXplKQogewotICAgIGlmICghcHJvZ3JhbSkgewotICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihJTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLSAgICBHTGludCBtYXhOYW1lTGVuZ3RoID0gLTE7Ci0gICAgZ2xHZXRQcm9ncmFt
aXYoRVhUUkFDVChwcm9ncmFtKSwgR0xfQUNUSVZFX1VOSUZPUk1fTUFYX0xFTkdUSCwgJm1heE5h
bWVMZW5ndGgpOwotICAgIGlmIChtYXhOYW1lTGVuZ3RoIDwgMCkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIEdMY2hhciogbmFtZSA9IDA7Ci0gICAgaWYgKCF0cnlGYXN0TWFsbG9jKG1heE5h
bWVMZW5ndGggKiBzaXplb2YoR0xjaGFyKSkuZ2V0VmFsdWUobmFtZSkpIHsKLSAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoT1VUX09GX01FTU9SWSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0gICAgR0xzaXplaSBsZW5ndGggPSAwOwotICAgIEdMaW50IHNpemUgPSAtMTsKLSAgICBH
TGVudW0gdHlwZSA9IDA7Ci0gICAgZ2xHZXRBY3RpdmVVbmlmb3JtKEVYVFJBQ1QocHJvZ3JhbSks
IGluZGV4LCBtYXhOYW1lTGVuZ3RoLAotICAgICAgICAgICAgICAgICAgICAgICAmbGVuZ3RoLCAm
c2l6ZSwgJnR5cGUsIG5hbWUpOwotICAgIGlmIChzaXplIDwgMCkgewotICAgICAgICBmYXN0RnJl
ZShuYW1lKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBpbmZvLm5hbWUgPSBT
dHJpbmcobmFtZSwgbGVuZ3RoKTsKLSAgICBpbmZvLnR5cGUgPSB0eXBlOwotICAgIGluZm8uc2l6
ZSA9IHNpemU7Ci0gICAgZmFzdEZyZWUobmFtZSk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgbV9p
bXBsLT51bmlmb3JtMWl2KGxvY2F0aW9uLCBzaXplLCB2KTsKIH0KIAotaW50IEdyYXBoaWNzQ29u
dGV4dDNEOjpnZXRBdHRyaWJMb2NhdGlvbihXZWJHTFByb2dyYW0qIHByb2dyYW0sIGNvbnN0IFN0
cmluZyYgbmFtZSkKLXsKLSAgICBpZiAoIXByb2dyYW0pCi0gICAgICAgIHJldHVybiAtMTsKLQot
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIHJldHVybiBnbEdldEF0dHJpYkxvY2F0aW9u
KEVYVFJBQ1QocHJvZ3JhbSksIG5hbWUudXRmOCgpLmRhdGEoKSk7Ci19CitERUxFR0FURV9UT19J
TVBMXzModW5pZm9ybTJmLCBsb25nLCBmbG9hdCwgZmxvYXQpCiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OmdldEJvb2xlYW52KHVuc2lnbmVkIGxvbmcgcG5hbWUsIHVuc2lnbmVkIGNoYXIqIHZh
bHVlKQordm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjp1bmlmb3JtMmZ2KGxvbmcgbG9j
YXRpb24sIGZsb2F0KiB2LCBpbnQgc2l6ZSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
LSAgICBnbEdldEJvb2xlYW52KHBuYW1lLCB2YWx1ZSk7CisgICAgbV9pbXBsLT51bmlmb3JtMmZ2
KGxvY2F0aW9uLCBzaXplLCB2KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0QnVm
ZmVyUGFyYW1ldGVyaXYodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgcG5hbWUs
IGludCogdmFsdWUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2xHZXRCdWZm
ZXJQYXJhbWV0ZXJpdih0YXJnZXQsIHBuYW1lLCB2YWx1ZSk7Ci19CitERUxFR0FURV9UT19JTVBM
XzModW5pZm9ybTJpLCBsb25nLCBpbnQsIGludCkKIAotR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJp
YnV0ZXMgR3JhcGhpY3NDb250ZXh0M0Q6OmdldENvbnRleHRBdHRyaWJ1dGVzKCkKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6dW5pZm9ybTJpdihsb25nIGxvY2F0aW9uLCBpbnQqIHYs
IGludCBzaXplKQogewotICAgIHJldHVybiBtX2ludGVybmFsLT5nZXRDb250ZXh0QXR0cmlidXRl
cygpOworICAgIG1faW1wbC0+dW5pZm9ybTJpdihsb2NhdGlvbiwgc2l6ZSwgdik7CiB9CiAKLXVu
c2lnbmVkIGxvbmcgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEVycm9yKCkKLXsKLSAgICByZXR1cm4g
bV9pbnRlcm5hbC0+Z2V0RXJyb3IoKTsKLX0KK0RFTEVHQVRFX1RPX0lNUExfNCh1bmlmb3JtM2Ys
IGxvbmcsIGZsb2F0LCBmbG9hdCwgZmxvYXQpCiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6Omdl
dEZsb2F0dih1bnNpZ25lZCBsb25nIHBuYW1lLCBmbG9hdCogdmFsdWUpCit2b2lkIEdyYXBoaWNz
Q29udGV4dDNESW50ZXJuYWw6OnVuaWZvcm0zZnYobG9uZyBsb2NhdGlvbiwgZmxvYXQqIHYsIGlu
dCBzaXplKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsR2V0RmxvYXR2KHBu
YW1lLCB2YWx1ZSk7CisgICAgbV9pbXBsLT51bmlmb3JtM2Z2KGxvY2F0aW9uLCBzaXplLCB2KTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFy
YW1ldGVyaXYodW5zaWduZWQgbG9uZyB0YXJnZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGF0dGFjaG1l
bnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB1bnNpZ25lZCBsb25nIHBuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50KiB2YWx1ZSkKLXsKLSAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKLSAgICBnbEdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRl
cml2RVhUKHRhcmdldCwgYXR0YWNobWVudCwgcG5hbWUsIHZhbHVlKTsKLX0KK0RFTEVHQVRFX1RP
X0lNUExfNCh1bmlmb3JtM2ksIGxvbmcsIGludCwgaW50LCBpbnQpCiAKLXZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OmdldEludGVnZXJ2KHVuc2lnbmVkIGxvbmcgcG5hbWUsIGludCogdmFsdWUpCit2
b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OnVuaWZvcm0zaXYobG9uZyBsb2NhdGlvbiwg
aW50KiB2LCBpbnQgc2l6ZSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbEdl
dEludGVnZXJ2KHBuYW1lLCB2YWx1ZSk7CisgICAgbV9pbXBsLT51bmlmb3JtM2l2KGxvY2F0aW9u
LCBzaXplLCB2KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0UHJvZ3JhbWl2KFdl
YkdMUHJvZ3JhbSogcHJvZ3JhbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBsb25nIHBuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCogdmFsdWUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2xHZXRQ
cm9ncmFtaXYoRVhUUkFDVChwcm9ncmFtKSwgcG5hbWUsIHZhbHVlKTsKLX0KK0RFTEVHQVRFX1RP
X0lNUExfNSh1bmlmb3JtNGYsIGxvbmcsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0KQogCi1T
dHJpbmcgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFByb2dyYW1JbmZvTG9nKFdlYkdMUHJvZ3JhbSog
cHJvZ3JhbSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6dW5pZm9ybTRmdihsb25n
IGxvY2F0aW9uLCBmbG9hdCogdiwgaW50IHNpemUpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7Ci0gICAgR0x1aW50IHByb2dyYW1JRCA9IEVYVFJBQ1QocHJvZ3JhbSk7Ci0gICAgR0xpbnQg
bG9nTGVuZ3RoOwotICAgIGdsR2V0UHJvZ3JhbWl2KHByb2dyYW1JRCwgR0xfSU5GT19MT0dfTEVO
R1RILCAmbG9nTGVuZ3RoKTsKLSAgICBpZiAoIWxvZ0xlbmd0aCkKLSAgICAgICAgcmV0dXJuIFN0
cmluZygpOwotICAgIEdMY2hhciogbG9nID0gMDsKLSAgICBpZiAoIXRyeUZhc3RNYWxsb2MobG9n
TGVuZ3RoICogc2l6ZW9mKEdMY2hhcikpLmdldFZhbHVlKGxvZykpCi0gICAgICAgIHJldHVybiBT
dHJpbmcoKTsKLSAgICBHTHNpemVpIHJldHVybmVkTG9nTGVuZ3RoOwotICAgIGdsR2V0UHJvZ3Jh
bUluZm9Mb2cocHJvZ3JhbUlELCBsb2dMZW5ndGgsICZyZXR1cm5lZExvZ0xlbmd0aCwgbG9nKTsK
LSAgICBBU1NFUlQobG9nTGVuZ3RoID09IHJldHVybmVkTG9nTGVuZ3RoICsgMSk7Ci0gICAgU3Ry
aW5nIHJlcyA9IFN0cmluZyhsb2csIHJldHVybmVkTG9nTGVuZ3RoKTsKLSAgICBmYXN0RnJlZShs
b2cpOwotICAgIHJldHVybiByZXM7CisgICAgbV9pbXBsLT51bmlmb3JtNGZ2KGxvY2F0aW9uLCBz
aXplLCB2KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0UmVuZGVyYnVmZmVyUGFy
YW1ldGVyaXYodW5zaWduZWQgbG9uZyB0YXJnZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHBuYW1lLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50KiB2YWx1ZSkKLXsK
LSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbEdldFJlbmRlcmJ1ZmZlclBhcmFtZXRl
cml2RVhUKHRhcmdldCwgcG5hbWUsIHZhbHVlKTsKLX0KK0RFTEVHQVRFX1RPX0lNUExfNSh1bmlm
b3JtNGksIGxvbmcsIGludCwgaW50LCBpbnQsIGludCkKIAotdm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6Z2V0U2hhZGVyaXYoV2ViR0xTaGFkZXIqIHNoYWRlciwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgcG5hbWUsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQqIHZhbHVlKQordm9pZCBHcmFwaGljc0NvbnRleHQzREludGVy
bmFsOjp1bmlmb3JtNGl2KGxvbmcgbG9jYXRpb24sIGludCogdiwgaW50IHNpemUpCiB7Ci0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2xHZXRTaGFkZXJpdihFWFRSQUNUKHNoYWRlciks
IHBuYW1lLCB2YWx1ZSk7CisgICAgbV9pbXBsLT51bmlmb3JtNGl2KGxvY2F0aW9uLCBzaXplLCB2
KTsKIH0KIAotU3RyaW5nIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRTaGFkZXJJbmZvTG9nKFdlYkdM
U2hhZGVyKiBzaGFkZXIpCit2b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OnVuaWZvcm1N
YXRyaXgyZnYobG9uZyBsb2NhdGlvbiwgYm9vbCB0cmFuc3Bvc2UsIGZsb2F0KiB2YWx1ZSwgaW50
IHNpemUpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgR0x1aW50IHNoYWRlcklE
ID0gRVhUUkFDVChzaGFkZXIpOwotICAgIEdMaW50IGxvZ0xlbmd0aDsKLSAgICBnbEdldFNoYWRl
cml2KHNoYWRlcklELCBHTF9JTkZPX0xPR19MRU5HVEgsICZsb2dMZW5ndGgpOwotICAgIGlmICgh
bG9nTGVuZ3RoKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgR0xjaGFyKiBsb2cgPSAw
OwotICAgIGlmICghdHJ5RmFzdE1hbGxvYyhsb2dMZW5ndGggKiBzaXplb2YoR0xjaGFyKSkuZ2V0
VmFsdWUobG9nKSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIEdMc2l6ZWkgcmV0dXJu
ZWRMb2dMZW5ndGg7Ci0gICAgZ2xHZXRTaGFkZXJJbmZvTG9nKHNoYWRlcklELCBsb2dMZW5ndGgs
ICZyZXR1cm5lZExvZ0xlbmd0aCwgbG9nKTsKLSAgICBBU1NFUlQobG9nTGVuZ3RoID09IHJldHVy
bmVkTG9nTGVuZ3RoICsgMSk7Ci0gICAgU3RyaW5nIHJlcyA9IFN0cmluZyhsb2csIHJldHVybmVk
TG9nTGVuZ3RoKTsKLSAgICBmYXN0RnJlZShsb2cpOwotICAgIHJldHVybiByZXM7CisgICAgbV9p
bXBsLT51bmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9uLCBzaXplLCB0cmFuc3Bvc2UsIHZhbHVlKTsK
IH0KIAotU3RyaW5nIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRTaGFkZXJTb3VyY2UoV2ViR0xTaGFk
ZXIqIHNoYWRlcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6dW5pZm9ybU1hdHJp
eDNmdihsb25nIGxvY2F0aW9uLCBib29sIHRyYW5zcG9zZSwgZmxvYXQqIHZhbHVlLCBpbnQgc2l6
ZSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBHTHVpbnQgc2hhZGVySUQgPSBF
WFRSQUNUKHNoYWRlcik7Ci0gICAgR0xpbnQgbG9nTGVuZ3RoOwotICAgIGdsR2V0U2hhZGVyaXYo
c2hhZGVySUQsIEdMX1NIQURFUl9TT1VSQ0VfTEVOR1RILCAmbG9nTGVuZ3RoKTsKLSAgICBpZiAo
IWxvZ0xlbmd0aCkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIEdMY2hhciogbG9nID0g
MDsKLSAgICBpZiAoIXRyeUZhc3RNYWxsb2MobG9nTGVuZ3RoICogc2l6ZW9mKEdMY2hhcikpLmdl
dFZhbHVlKGxvZykpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICBHTHNpemVpIHJldHVy
bmVkTG9nTGVuZ3RoOwotICAgIGdsR2V0U2hhZGVyU291cmNlKHNoYWRlcklELCBsb2dMZW5ndGgs
ICZyZXR1cm5lZExvZ0xlbmd0aCwgbG9nKTsKLSAgICBBU1NFUlQobG9nTGVuZ3RoID09IHJldHVy
bmVkTG9nTGVuZ3RoICsgMSk7Ci0gICAgU3RyaW5nIHJlcyA9IFN0cmluZyhsb2csIHJldHVybmVk
TG9nTGVuZ3RoKTsKLSAgICBmYXN0RnJlZShsb2cpOwotICAgIHJldHVybiByZXM7CisgICAgbV9p
bXBsLT51bmlmb3JtTWF0cml4M2Z2KGxvY2F0aW9uLCBzaXplLCB0cmFuc3Bvc2UsIHZhbHVlKTsK
IH0KIAotU3RyaW5nIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRTdHJpbmcodW5zaWduZWQgbG9uZyBu
YW1lKQordm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjp1bmlmb3JtTWF0cml4NGZ2KGxv
bmcgbG9jYXRpb24sIGJvb2wgdHJhbnNwb3NlLCBmbG9hdCogdmFsdWUsIGludCBzaXplKQogewot
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIHJldHVybiBTdHJpbmcocmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBjaGFyKj4oZ2xHZXRTdHJpbmcobmFtZSkpKTsKKyAgICBtX2ltcGwtPnVuaWZv
cm1NYXRyaXg0ZnYobG9jYXRpb24sIHNpemUsIHRyYW5zcG9zZSwgdmFsdWUpOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjpnZXRUZXhQYXJhbWV0ZXJmdih1bnNpZ25lZCBsb25nIHRhcmdl
dCwgdW5zaWduZWQgbG9uZyBwbmFtZSwgZmxvYXQqIHZhbHVlKQotewotICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOwotICAgIGdsR2V0VGV4UGFyYW1ldGVyZnYodGFyZ2V0LCBwbmFtZSwgdmFsdWUp
OwotfQorREVMRUdBVEVfVE9fSU1QTF8xX1godXNlUHJvZ3JhbSwgV2ViR0xQcm9ncmFtKikKK0RF
TEVHQVRFX1RPX0lNUExfMV9YKHZhbGlkYXRlUHJvZ3JhbSwgV2ViR0xQcm9ncmFtKikKIAotdm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VGV4UGFyYW1ldGVyaXYodW5zaWduZWQgbG9uZyB0YXJn
ZXQsIHVuc2lnbmVkIGxvbmcgcG5hbWUsIGludCogdmFsdWUpCi17Ci0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7Ci0gICAgZ2xHZXRUZXhQYXJhbWV0ZXJpdih0YXJnZXQsIHBuYW1lLCB2YWx1ZSk7
Ci19CitERUxFR0FURV9UT19JTVBMXzIodmVydGV4QXR0cmliMWYsIHVuc2lnbmVkIGxvbmcsIGZs
b2F0KQorREVMRUdBVEVfVE9fSU1QTF8yKHZlcnRleEF0dHJpYjFmdiwgdW5zaWduZWQgbG9uZywg
ZmxvYXQqKQorREVMRUdBVEVfVE9fSU1QTF8zKHZlcnRleEF0dHJpYjJmLCB1bnNpZ25lZCBsb25n
LCBmbG9hdCwgZmxvYXQpCitERUxFR0FURV9UT19JTVBMXzIodmVydGV4QXR0cmliMmZ2LCB1bnNp
Z25lZCBsb25nLCBmbG9hdCopCitERUxFR0FURV9UT19JTVBMXzQodmVydGV4QXR0cmliM2YsIHVu
c2lnbmVkIGxvbmcsIGZsb2F0LCBmbG9hdCwgZmxvYXQpCitERUxFR0FURV9UT19JTVBMXzIodmVy
dGV4QXR0cmliM2Z2LCB1bnNpZ25lZCBsb25nLCBmbG9hdCopCitERUxFR0FURV9UT19JTVBMXzUo
dmVydGV4QXR0cmliNGYsIHVuc2lnbmVkIGxvbmcsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0
KQorREVMRUdBVEVfVE9fSU1QTF8yKHZlcnRleEF0dHJpYjRmdiwgdW5zaWduZWQgbG9uZywgZmxv
YXQqKQorREVMRUdBVEVfVE9fSU1QTF82KHZlcnRleEF0dHJpYlBvaW50ZXIsIHVuc2lnbmVkIGxv
bmcsIGludCwgaW50LCBib29sLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjpnZXRVbmlmb3JtZnYoV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBs
b25nIGxvY2F0aW9uLCBmbG9hdCogdmFsdWUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
Ci0gICAgZ2xHZXRVbmlmb3JtZnYoRVhUUkFDVChwcm9ncmFtKSwgbG9jYXRpb24sIHZhbHVlKTsK
LX0KK0RFTEVHQVRFX1RPX0lNUExfNCh2aWV3cG9ydCwgbG9uZywgbG9uZywgdW5zaWduZWQgbG9u
ZywgdW5zaWduZWQgbG9uZykKIAotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VW5pZm9ybWl2
KFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgbG9uZyBsb2NhdGlvbiwgaW50KiB2YWx1ZSkKLXsKLSAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbEdldFVuaWZvcm1pdihFWFRSQUNUKHByb2dy
YW0pLCBsb2NhdGlvbiwgdmFsdWUpOwotfQorREVMRUdBVEVfVE9fSU1QTF9SKGNyZWF0ZUJ1ZmZl
ciwgdW5zaWduZWQpCitERUxFR0FURV9UT19JTVBMX1IoY3JlYXRlRnJhbWVidWZmZXIsIHVuc2ln
bmVkKQorREVMRUdBVEVfVE9fSU1QTF9SKGNyZWF0ZVByb2dyYW0sIHVuc2lnbmVkKQorREVMRUdB
VEVfVE9fSU1QTF9SKGNyZWF0ZVJlbmRlcmJ1ZmZlciwgdW5zaWduZWQpCitERUxFR0FURV9UT19J
TVBMXzFSKGNyZWF0ZVNoYWRlciwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQpCitERUxFR0FURV9U
T19JTVBMX1IoY3JlYXRlVGV4dHVyZSwgdW5zaWduZWQpCiAKLWxvbmcgR3JhcGhpY3NDb250ZXh0
M0Q6OmdldFVuaWZvcm1Mb2NhdGlvbihXZWJHTFByb2dyYW0qIHByb2dyYW0sIGNvbnN0IFN0cmlu
ZyYgbmFtZSkKLXsKLSAgICBpZiAoIXByb2dyYW0pCi0gICAgICAgIHJldHVybiAtMTsKK0RFTEVH
QVRFX1RPX0lNUExfMShkZWxldGVCdWZmZXIsIHVuc2lnbmVkKQorREVMRUdBVEVfVE9fSU1QTF8x
KGRlbGV0ZUZyYW1lYnVmZmVyLCB1bnNpZ25lZCkKK0RFTEVHQVRFX1RPX0lNUExfMShkZWxldGVQ
cm9ncmFtLCB1bnNpZ25lZCkKK0RFTEVHQVRFX1RPX0lNUExfMShkZWxldGVSZW5kZXJidWZmZXIs
IHVuc2lnbmVkKQorREVMRUdBVEVfVE9fSU1QTF8xKGRlbGV0ZVNoYWRlciwgdW5zaWduZWQpCitE
RUxFR0FURV9UT19JTVBMXzEoZGVsZXRlVGV4dHVyZSwgdW5zaWduZWQpCiAKLSAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKLSAgICByZXR1cm4gZ2xHZXRVbmlmb3JtTG9jYXRpb24oRVhUUkFDVChw
cm9ncmFtKSwgbmFtZS51dGY4KCkuZGF0YSgpKTsKLX0KK0RFTEVHQVRFX1RPX0lNUExfMShzeW50
aGVzaXplR0xFcnJvciwgdW5zaWduZWQgbG9uZykKIAotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
Z2V0VmVydGV4QXR0cmliZnYodW5zaWduZWQgbG9uZyBpbmRleCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgcG5hbWUsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCogdmFsdWUpCi17Ci0gICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2xHZXRWZXJ0ZXhBdHRyaWJmdihpbmRleCwgcG5hbWUs
IHZhbHVlKTsKLX0KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gR3JhcGhpY3NDb250ZXh0M0QKKy8vCiAK
LXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFZlcnRleEF0dHJpYml2KHVuc2lnbmVkIGxvbmcg
aW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBsb25nIHBuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50KiB2YWx1ZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbEdldFZlcnRl
eEF0dHJpYml2KGluZGV4LCBwbmFtZSwgdmFsdWUpOwotfQorLy8gTWFjcm9zIHRvIGFzc2lzdCBp
biBkZWxlZ2F0aW5nIGZyb20gR3JhcGhpY3NDb250ZXh0M0QgdG8KKy8vIEdyYXBoaWNzQ29udGV4
dDNESW50ZXJuYWwuCiAKLWxvbmcgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFZlcnRleEF0dHJpYk9m
ZnNldCh1bnNpZ25lZCBsb25nIGluZGV4LCB1bnNpZ25lZCBsb25nIHBuYW1lKQotewotICAgIC8v
IEZJWE1FOiBpbXBsZW1lbnQuCi0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gMDsK
KyNkZWZpbmUgREVMRUdBVEVfVE9fSU5URVJOQUwobmFtZSkgXAordm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6bmFtZSgpIFwKK3sgXAorICAgIG1faW50ZXJuYWwtPm5hbWUoKTsgXAogfQogCi1HTF9T
QU1FX01FVEhPRF8yKEhpbnQsIGhpbnQsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpOwot
Ci1ib29sIEdyYXBoaWNzQ29udGV4dDNEOjppc0J1ZmZlcihXZWJHTEJ1ZmZlciogYnVmZmVyKQot
ewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIHJldHVybiBnbElzQnVmZmVyKEVYVFJB
Q1QoYnVmZmVyKSk7CisjZGVmaW5lIERFTEVHQVRFX1RPX0lOVEVSTkFMX1IobmFtZSwgcnQpICAg
ICAgICAgICBcCitydCBHcmFwaGljc0NvbnRleHQzRDo6bmFtZSgpIFwKK3sgXAorICAgIHJldHVy
biBtX2ludGVybmFsLT5uYW1lKCk7IFwKIH0KIAotYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6aXNF
bmFibGVkKHVuc2lnbmVkIGxvbmcgY2FwKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwot
ICAgIHJldHVybiBnbElzRW5hYmxlZChjYXApOworI2RlZmluZSBERUxFR0FURV9UT19JTlRFUk5B
TF8xKG5hbWUsIHQxKSBcCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpuYW1lKHQxIGExKSBcCit7
IFwKKyAgICBtX2ludGVybmFsLT5uYW1lKGExKTsgXAogfQogCi1ib29sIEdyYXBoaWNzQ29udGV4
dDNEOjppc0ZyYW1lYnVmZmVyKFdlYkdMRnJhbWVidWZmZXIqIGZyYW1lYnVmZmVyKQotewotICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIHJldHVybiBnbElzRnJhbWVidWZmZXJFWFQoRVhU
UkFDVChmcmFtZWJ1ZmZlcikpOworI2RlZmluZSBERUxFR0FURV9UT19JTlRFUk5BTF8xUihuYW1l
LCB0MSwgcnQpICAgIFwKK3J0IEdyYXBoaWNzQ29udGV4dDNEOjpuYW1lKHQxIGExKSBcCit7IFwK
KyAgICByZXR1cm4gbV9pbnRlcm5hbC0+bmFtZShhMSk7IFwKIH0KIAotYm9vbCBHcmFwaGljc0Nv
bnRleHQzRDo6aXNQcm9ncmFtKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSkKLXsKLSAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKLSAgICByZXR1cm4gZ2xJc1Byb2dyYW0oRVhUUkFDVChwcm9ncmFtKSk7
CisjZGVmaW5lIERFTEVHQVRFX1RPX0lOVEVSTkFMXzIobmFtZSwgdDEsIHQyKSBcCit2b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjpuYW1lKHQxIGExLCB0MiBhMikgXAoreyBcCisgICAgbV9pbnRlcm5h
bC0+bmFtZShhMSwgYTIpOyBcCiB9CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmlzUmVuZGVy
YnVmZmVyKFdlYkdMUmVuZGVyYnVmZmVyKiByZW5kZXJidWZmZXIpCi17Ci0gICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7Ci0gICAgcmV0dXJuIGdsSXNSZW5kZXJidWZmZXJFWFQoRVhUUkFDVChyZW5k
ZXJidWZmZXIpKTsKKyNkZWZpbmUgREVMRUdBVEVfVE9fSU5URVJOQUxfMlIobmFtZSwgdDEsIHQy
LCBydCkgIFwKK3J0IEdyYXBoaWNzQ29udGV4dDNEOjpuYW1lKHQxIGExLCB0MiBhMikgXAoreyBc
CisgICAgcmV0dXJuIG1faW50ZXJuYWwtPm5hbWUoYTEsIGEyKTsgXAogfQogCi1ib29sIEdyYXBo
aWNzQ29udGV4dDNEOjppc1NoYWRlcihXZWJHTFNoYWRlciogc2hhZGVyKQotewotICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOwotICAgIHJldHVybiBnbElzU2hhZGVyKEVYVFJBQ1Qoc2hhZGVyKSk7
CisjZGVmaW5lIERFTEVHQVRFX1RPX0lOVEVSTkFMXzMobmFtZSwgdDEsIHQyLCB0MykgICBcCit2
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpuYW1lKHQxIGExLCB0MiBhMiwgdDMgYTMpICAgIFwKK3sg
XAorICAgIG1faW50ZXJuYWwtPm5hbWUoYTEsIGEyLCBhMyk7ICAgICAgICAgICAgICAgICAgXAog
fQogCi1ib29sIEdyYXBoaWNzQ29udGV4dDNEOjppc1RleHR1cmUoV2ViR0xUZXh0dXJlKiB0ZXh0
dXJlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIHJldHVybiBnbElzVGV4dHVy
ZShFWFRSQUNUKHRleHR1cmUpKTsKKyNkZWZpbmUgREVMRUdBVEVfVE9fSU5URVJOQUxfM1IobmFt
ZSwgdDEsIHQyLCB0MywgcnQpICAgXAorcnQgR3JhcGhpY3NDb250ZXh0M0Q6Om5hbWUodDEgYTEs
IHQyIGEyLCB0MyBhMykgICAgXAoreyBcCisgICAgcmV0dXJuIG1faW50ZXJuYWwtPm5hbWUoYTEs
IGEyLCBhMyk7ICAgICAgICAgICAgICAgICAgXAogfQogCi1HTF9TQU1FX01FVEhPRF8xKExpbmVX
aWR0aCwgbGluZVdpZHRoLCBkb3VibGUpCisjZGVmaW5lIERFTEVHQVRFX1RPX0lOVEVSTkFMXzQo
bmFtZSwgdDEsIHQyLCB0MywgdDQpICAgIFwKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6Om5hbWUo
dDEgYTEsIHQyIGEyLCB0MyBhMywgdDQgYTQpICBcCit7IFwKKyAgICBtX2ludGVybmFsLT5uYW1l
KGExLCBhMiwgYTMsIGE0KTsgICAgICAgICAgICAgIFwKK30KIAotR0xfU0FNRV9NRVRIT0RfMV9Y
KExpbmtQcm9ncmFtLCBsaW5rUHJvZ3JhbSwgV2ViR0xQcm9ncmFtKikKKyNkZWZpbmUgREVMRUdB
VEVfVE9fSU5URVJOQUxfNShuYW1lLCB0MSwgdDIsIHQzLCB0NCwgdDUpICAgICAgXAordm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6bmFtZSh0MSBhMSwgdDIgYTIsIHQzIGEzLCB0NCBhNCwgdDUgYTUp
ICAgICAgICBcCit7IFwKKyAgICBtX2ludGVybmFsLT5uYW1lKGExLCBhMiwgYTMsIGE0LCBhNSk7
ICAgXAorfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpwaXhlbFN0b3JlaSh1bnNpZ25lZCBs
b25nIHBuYW1lLCBsb25nIHBhcmFtKQotewotICAgIGlmIChwbmFtZSAhPSBHTF9QQUNLX0FMSUdO
TUVOVCAmJiBwbmFtZSAhPSBHTF9VTlBBQ0tfQUxJR05NRU5UKSB7Ci0gICAgICAgIC8vIEZJWE1F
OiBDcmVhdGUgYSBmYWtlIEdMIGVycm9yIGFuZCB0aHJvdyBhbiBleGNlcHRpb24uCi0gICAgICAg
IHJldHVybjsKLSAgICB9CisjZGVmaW5lIERFTEVHQVRFX1RPX0lOVEVSTkFMXzYobmFtZSwgdDEs
IHQyLCB0MywgdDQsIHQ1LCB0NikgIFwKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6Om5hbWUodDEg
YTEsIHQyIGEyLCB0MyBhMywgdDQgYTQsIHQ1IGE1LCB0NiBhNikgXAoreyBcCisgICAgbV9pbnRl
cm5hbC0+bmFtZShhMSwgYTIsIGEzLCBhNCwgYTUsIGE2KTsgICBcCit9CiAKLSAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKLSAgICBnbFBpeGVsU3RvcmVpKHBuYW1lLCBwYXJhbSk7CisjZGVmaW5l
IERFTEVHQVRFX1RPX0lOVEVSTkFMXzZSKG5hbWUsIHQxLCB0MiwgdDMsIHQ0LCB0NSwgdDYsIHJ0
KSAgXAorcnQgR3JhcGhpY3NDb250ZXh0M0Q6Om5hbWUodDEgYTEsIHQyIGEyLCB0MyBhMywgdDQg
YTQsIHQ1IGE1LCB0NiBhNikgXAoreyBcCisgICAgcmV0dXJuIG1faW50ZXJuYWwtPm5hbWUoYTEs
IGEyLCBhMywgYTQsIGE1LCBhNik7ICAgICAgIFwKIH0KIAotR0xfU0FNRV9NRVRIT0RfMihQb2x5
Z29uT2Zmc2V0LCBwb2x5Z29uT2Zmc2V0LCBkb3VibGUsIGRvdWJsZSkKKyNkZWZpbmUgREVMRUdB
VEVfVE9fSU5URVJOQUxfN1IobmFtZSwgdDEsIHQyLCB0MywgdDQsIHQ1LCB0NiwgdDcsIHJ0KSBc
CitydCBHcmFwaGljc0NvbnRleHQzRDo6bmFtZSh0MSBhMSwgdDIgYTIsIHQzIGEzLCB0NCBhNCwg
dDUgYTUsIHQ2IGE2LCB0NyBhNykgXAoreyBcCisgICAgcmV0dXJuIG1faW50ZXJuYWwtPm5hbWUo
YTEsIGEyLCBhMywgYTQsIGE1LCBhNiwgYTcpOyAgIFwKK30KIAotUGFzc1JlZlB0cjxXZWJHTEFy
cmF5PiBHcmFwaGljc0NvbnRleHQzRDo6cmVhZFBpeGVscyhsb25nIHgsIGxvbmcgeSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk
IGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBmb3JtYXQsIHVu
c2lnbmVkIGxvbmcgdHlwZSkgewotICAgIC8vIEZJWE1FOiBzdXBwb3J0IG1vcmUgcGl4ZWwgZm9y
bWF0cyBhbmQgdHlwZXMuCi0gICAgaWYgKCEoKGZvcm1hdCA9PSBHTF9SR0JBKSAmJiAodHlwZSA9
PSBHTF9VTlNJR05FRF9CWVRFKSkpCi0gICAgICAgIHJldHVybiAwOworI2RlZmluZSBERUxFR0FU
RV9UT19JTlRFUk5BTF84KG5hbWUsIHQxLCB0MiwgdDMsIHQ0LCB0NSwgdDYsIHQ3LCB0OCkgICAg
ICAgXAordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6bmFtZSh0MSBhMSwgdDIgYTIsIHQzIGEzLCB0
NCBhNCwgdDUgYTUsIHQ2IGE2LCB0NyBhNywgdDggYTgpIFwKK3sgXAorICAgIG1faW50ZXJuYWwt
Pm5hbWUoYTEsIGEyLCBhMywgYTQsIGE1LCBhNiwgYTcsIGE4KTsgICAgICBcCit9CiAKLSAgICAv
LyBGSVhNRTogdGFrZSBpbnRvIGFjY291bnQgcGFjayBhbGlnbm1lbnQuCi0gICAgUmVmUHRyPFdl
YkdMVW5zaWduZWRCeXRlQXJyYXk+IGFycmF5ID0gV2ViR0xVbnNpZ25lZEJ5dGVBcnJheTo6Y3Jl
YXRlKHdpZHRoICogaGVpZ2h0ICogNCk7Ci0gICAgZ2xSZWFkUGl4ZWxzKHgsIHksIHdpZHRoLCBo
ZWlnaHQsIGZvcm1hdCwgdHlwZSwgYXJyYXktPmJhc2VBZGRyZXNzKCkpOwotICAgIHJldHVybiBh
cnJheTsKKyNkZWZpbmUgREVMRUdBVEVfVE9fSU5URVJOQUxfOVIobmFtZSwgdDEsIHQyLCB0Mywg
dDQsIHQ1LCB0NiwgdDcsIHQ4LCB0OSwgcnQpIFwKK3J0IEdyYXBoaWNzQ29udGV4dDNEOjpuYW1l
KHQxIGExLCB0MiBhMiwgdDMgYTMsIHQ0IGE0LCB0NSBhNSwgdDYgYTYsIHQ3IGE3LCB0OCBhOCwg
dDkgYTkpIFwKK3sgXAorICAgIHJldHVybiBtX2ludGVybmFsLT5uYW1lKGExLCBhMiwgYTMsIGE0
LCBhNSwgYTYsIGE3LCBhOCwgYTkpOyAgIFwKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
cmVsZWFzZVNoYWRlckNvbXBpbGVyKCkKK0dyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRl
eHQzRChHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRycykKIHsKIH0KIAotR0xfU0FN
RV9NRVRIT0RfNChSZW5kZXJidWZmZXJTdG9yYWdlRVhULCByZW5kZXJidWZmZXJTdG9yYWdlLCB1
bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25n
KQotCi1HTF9TQU1FX01FVEhPRF8yKFNhbXBsZUNvdmVyYWdlLCBzYW1wbGVDb3ZlcmFnZSwgZG91
YmxlLCBib29sKQotCi1HTF9TQU1FX01FVEhPRF80KFNjaXNzb3IsIHNjaXNzb3IsIGxvbmcsIGxv
bmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpCi0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OnNoYWRlclNvdXJjZShXZWJHTFNoYWRlciogc2hhZGVyLCBjb25zdCBTdHJpbmcmIHNvdXJj
ZSkKK0dyYXBoaWNzQ29udGV4dDNEOjp+R3JhcGhpY3NDb250ZXh0M0QoKQogewotICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOwotICAgIENTdHJpbmcgc3RyID0gc291cmNlLnV0ZjgoKTsKLSAgICBj
b25zdCBjaGFyKiBkYXRhID0gc3RyLmRhdGEoKTsKLSAgICBHTGludCBsZW5ndGggPSBzdHIubGVu
Z3RoKCk7Ci0gICAgZ2xTaGFkZXJTb3VyY2UoRVhUUkFDVChzaGFkZXIpLCAxLCAmZGF0YSwgJmxl
bmd0aCk7CiB9CiAKLUdMX1NBTUVfTUVUSE9EXzMoU3RlbmNpbEZ1bmMsIHN0ZW5jaWxGdW5jLCB1
bnNpZ25lZCBsb25nLCBsb25nLCB1bnNpZ25lZCBsb25nKQotCi1HTF9TQU1FX01FVEhPRF80KFN0
ZW5jaWxGdW5jU2VwYXJhdGUsIHN0ZW5jaWxGdW5jU2VwYXJhdGUsIHVuc2lnbmVkIGxvbmcsIHVu
c2lnbmVkIGxvbmcsIGxvbmcsIHVuc2lnbmVkIGxvbmcpCi0KLUdMX1NBTUVfTUVUSE9EXzEoU3Rl
bmNpbE1hc2ssIHN0ZW5jaWxNYXNrLCB1bnNpZ25lZCBsb25nKQotCi1HTF9TQU1FX01FVEhPRF8y
KFN0ZW5jaWxNYXNrU2VwYXJhdGUsIHN0ZW5jaWxNYXNrU2VwYXJhdGUsIHVuc2lnbmVkIGxvbmcs
IHVuc2lnbmVkIGxvbmcpCi0KLUdMX1NBTUVfTUVUSE9EXzMoU3RlbmNpbE9wLCBzdGVuY2lsT3As
IHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpCi0KLUdMX1NBTUVf
TUVUSE9EXzQoU3RlbmNpbE9wU2VwYXJhdGUsIHN0ZW5jaWxPcFNlcGFyYXRlLCB1bnNpZ25lZCBs
b25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKQorUGFzc093
blB0cjxHcmFwaGljc0NvbnRleHQzRD4gR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZShHcmFwaGlj
c0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRycykKK3sKKyAgICBHcmFwaGljc0NvbnRleHQzRElu
dGVybmFsKiBpbnRlcm5hbCA9IG5ldyBHcmFwaGljc0NvbnRleHQzREludGVybmFsKCk7CisgICAg
aWYgKCFpbnRlcm5hbC0+aW5pdGlhbGl6ZShhdHRycykpIHsKKyAgICAgICAgZGVsZXRlIGludGVy
bmFsOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgUGFzc093blB0cjxHcmFwaGljc0Nv
bnRleHQzRD4gcmVzdWx0ID0gbmV3IEdyYXBoaWNzQ29udGV4dDNEKGF0dHJzKTsKKyAgICByZXN1
bHQtPm1faW50ZXJuYWwuc2V0KGludGVybmFsKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQogCi12
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzeW50aGVzaXplR0xFcnJvcih1bnNpZ25lZCBsb25nIGVy
cm9yKQorUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCBHcmFwaGljc0NvbnRleHQzRDo6cGxhdGZv
cm1HcmFwaGljc0NvbnRleHQzRCgpIGNvbnN0CiB7Ci0gICAgbV9pbnRlcm5hbC0+c3ludGhlc2l6
ZUdMRXJyb3IoZXJyb3IpOworICAgIHJldHVybiBtX2ludGVybmFsLT5wbGF0Zm9ybUdyYXBoaWNz
Q29udGV4dDNEKCk7CiB9CiAKLWludCBHcmFwaGljc0NvbnRleHQzRDo6dGV4SW1hZ2UyRCh1bnNp
Z25lZCB0YXJnZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg
bGV2ZWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ZXJu
YWxmb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgd2lk
dGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaGVpZ2h0LAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGJvcmRlciwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBmb3JtYXQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgdHlwZSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB2b2lkKiBwaXhlbHMpCitQbGF0Zm9ybTNET2JqZWN0IEdyYXBoaWNz
Q29udGV4dDNEOjpwbGF0Zm9ybVRleHR1cmUoKSBjb25zdAogewotICAgIC8vIEZJWE1FOiBtdXN0
IGRvIHZhbGlkYXRpb24gc2ltaWxhciB0byBKT0dMJ3MgdG8gZW5zdXJlIHRoYXQKLSAgICAvLyB0
aGUgaW5jb21pbmcgYXJyYXkgaXMgb2YgdGhlIGFwcHJvcHJpYXRlIGxlbmd0aC4KLSAgICBnbFRl
eEltYWdlMkQodGFyZ2V0LAotICAgICAgICAgICAgICAgICBsZXZlbCwKLSAgICAgICAgICAgICAg
ICAgaW50ZXJuYWxmb3JtYXQsCi0gICAgICAgICAgICAgICAgIHdpZHRoLAotICAgICAgICAgICAg
ICAgICBoZWlnaHQsCi0gICAgICAgICAgICAgICAgIGJvcmRlciwKLSAgICAgICAgICAgICAgICAg
Zm9ybWF0LAotICAgICAgICAgICAgICAgICB0eXBlLAotICAgICAgICAgICAgICAgICBwaXhlbHMp
OwotICAgIHJldHVybiAwOworICAgIHJldHVybiBtX2ludGVybmFsLT5wbGF0Zm9ybVRleHR1cmUo
KTsKIH0KIAorREVMRUdBVEVfVE9fSU5URVJOQUwobWFrZUNvbnRleHRDdXJyZW50KQorREVMRUdB
VEVfVE9fSU5URVJOQUxfMVIoc2l6ZUluQnl0ZXMsIGludCwgaW50KQorREVMRUdBVEVfVE9fSU5U
RVJOQUxfMihyZXNoYXBlLCBpbnQsIGludCkKKworREVMRUdBVEVfVE9fSU5URVJOQUxfMShhY3Rp
dmVUZXh0dXJlLCB1bnNpZ25lZCBsb25nKQorREVMRUdBVEVfVE9fSU5URVJOQUxfMihhdHRhY2hT
aGFkZXIsIFdlYkdMUHJvZ3JhbSosIFdlYkdMU2hhZGVyKikKK0RFTEVHQVRFX1RPX0lOVEVSTkFM
XzMoYmluZEF0dHJpYkxvY2F0aW9uLCBXZWJHTFByb2dyYW0qLCB1bnNpZ25lZCBsb25nLCBjb25z
dCBTdHJpbmcmKQorCitERUxFR0FURV9UT19JTlRFUk5BTF8yKGJpbmRCdWZmZXIsIHVuc2lnbmVk
IGxvbmcsIFdlYkdMQnVmZmVyKikKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzIoYmluZEZyYW1lYnVm
ZmVyLCB1bnNpZ25lZCBsb25nLCBXZWJHTEZyYW1lYnVmZmVyKikKK0RFTEVHQVRFX1RPX0lOVEVS
TkFMXzIoYmluZFJlbmRlcmJ1ZmZlciwgdW5zaWduZWQgbG9uZywgV2ViR0xSZW5kZXJidWZmZXIq
KQorREVMRUdBVEVfVE9fSU5URVJOQUxfMihiaW5kVGV4dHVyZSwgdW5zaWduZWQgbG9uZywgV2Vi
R0xUZXh0dXJlKikKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzQoYmxlbmRDb2xvciwgZG91YmxlLCBk
b3VibGUsIGRvdWJsZSwgZG91YmxlKQorREVMRUdBVEVfVE9fSU5URVJOQUxfMShibGVuZEVxdWF0
aW9uLCB1bnNpZ25lZCBsb25nKQorREVMRUdBVEVfVE9fSU5URVJOQUxfMihibGVuZEVxdWF0aW9u
U2VwYXJhdGUsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpCitERUxFR0FURV9UT19JTlRF
Uk5BTF8yKGJsZW5kRnVuYywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZykKK0RFTEVHQVRF
X1RPX0lOVEVSTkFMXzQoYmxlbmRGdW5jU2VwYXJhdGUsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVk
IGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpCisKK0RFTEVHQVRFX1RPX0lOVEVS
TkFMXzMoYnVmZmVyRGF0YSwgdW5zaWduZWQgbG9uZywgaW50LCB1bnNpZ25lZCBsb25nKQorREVM
RUdBVEVfVE9fSU5URVJOQUxfMyhidWZmZXJEYXRhLCB1bnNpZ25lZCBsb25nLCBXZWJHTEFycmF5
KiwgdW5zaWduZWQgbG9uZykKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzMoYnVmZmVyU3ViRGF0YSwg
dW5zaWduZWQgbG9uZywgbG9uZywgV2ViR0xBcnJheSopCisKK0RFTEVHQVRFX1RPX0lOVEVSTkFM
XzFSKGNoZWNrRnJhbWVidWZmZXJTdGF0dXMsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcp
CitERUxFR0FURV9UT19JTlRFUk5BTF8xKGNsZWFyLCB1bnNpZ25lZCBsb25nKQorREVMRUdBVEVf
VE9fSU5URVJOQUxfNChjbGVhckNvbG9yLCBkb3VibGUsIGRvdWJsZSwgZG91YmxlLCBkb3VibGUp
CitERUxFR0FURV9UT19JTlRFUk5BTF8xKGNsZWFyRGVwdGgsIGRvdWJsZSkKK0RFTEVHQVRFX1RP
X0lOVEVSTkFMXzEoY2xlYXJTdGVuY2lsLCBsb25nKQorREVMRUdBVEVfVE9fSU5URVJOQUxfNChj
b2xvck1hc2ssIGJvb2wsIGJvb2wsIGJvb2wsIGJvb2wpCitERUxFR0FURV9UT19JTlRFUk5BTF8x
KGNvbXBpbGVTaGFkZXIsIFdlYkdMU2hhZGVyKikKKworREVMRUdBVEVfVE9fSU5URVJOQUxfOChj
b3B5VGV4SW1hZ2UyRCwgdW5zaWduZWQgbG9uZywgbG9uZywgdW5zaWduZWQgbG9uZywgbG9uZywg
bG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgbG9uZykKK0RFTEVHQVRFX1RPX0lO
VEVSTkFMXzgoY29weVRleFN1YkltYWdlMkQsIHVuc2lnbmVkIGxvbmcsIGxvbmcsIGxvbmcsIGxv
bmcsIGxvbmcsIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpCitERUxFR0FURV9U
T19JTlRFUk5BTF8xKGN1bGxGYWNlLCB1bnNpZ25lZCBsb25nKQorREVMRUdBVEVfVE9fSU5URVJO
QUxfMShkZXB0aEZ1bmMsIHVuc2lnbmVkIGxvbmcpCitERUxFR0FURV9UT19JTlRFUk5BTF8xKGRl
cHRoTWFzaywgYm9vbCkKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzIoZGVwdGhSYW5nZSwgZG91Ymxl
LCBkb3VibGUpCitERUxFR0FURV9UT19JTlRFUk5BTF8yKGRldGFjaFNoYWRlciwgV2ViR0xQcm9n
cmFtKiwgV2ViR0xTaGFkZXIqKQorREVMRUdBVEVfVE9fSU5URVJOQUxfMShkaXNhYmxlLCB1bnNp
Z25lZCBsb25nKQorREVMRUdBVEVfVE9fSU5URVJOQUxfMShkaXNhYmxlVmVydGV4QXR0cmliQXJy
YXksIHVuc2lnbmVkIGxvbmcpCitERUxFR0FURV9UT19JTlRFUk5BTF8zKGRyYXdBcnJheXMsIHVu
c2lnbmVkIGxvbmcsIGxvbmcsIGxvbmcpCitERUxFR0FURV9UT19JTlRFUk5BTF80KGRyYXdFbGVt
ZW50cywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgbG9uZykK
KworREVMRUdBVEVfVE9fSU5URVJOQUxfMShlbmFibGUsIHVuc2lnbmVkIGxvbmcpCitERUxFR0FU
RV9UT19JTlRFUk5BTF8xKGVuYWJsZVZlcnRleEF0dHJpYkFycmF5LCB1bnNpZ25lZCBsb25nKQor
REVMRUdBVEVfVE9fSU5URVJOQUwoZmluaXNoKQorREVMRUdBVEVfVE9fSU5URVJOQUwoZmx1c2gp
CitERUxFR0FURV9UT19JTlRFUk5BTF80KGZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyLCB1bnNpZ25l
ZCBsb25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCBXZWJHTFJlbmRlcmJ1ZmZlciop
CitERUxFR0FURV9UT19JTlRFUk5BTF81KGZyYW1lYnVmZmVyVGV4dHVyZTJELCB1bnNpZ25lZCBs
b25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCBXZWJHTFRleHR1cmUqLCBsb25nKQor
REVMRUdBVEVfVE9fSU5URVJOQUxfMShmcm9udEZhY2UsIHVuc2lnbmVkIGxvbmcpCitERUxFR0FU
RV9UT19JTlRFUk5BTF8xKGdlbmVyYXRlTWlwbWFwLCB1bnNpZ25lZCBsb25nKQorCitERUxFR0FU
RV9UT19JTlRFUk5BTF8zUihnZXRBY3RpdmVBdHRyaWIsIFdlYkdMUHJvZ3JhbSosIHVuc2lnbmVk
IGxvbmcsIEFjdGl2ZUluZm8mLCBib29sKQorREVMRUdBVEVfVE9fSU5URVJOQUxfM1IoZ2V0QWN0
aXZlVW5pZm9ybSwgV2ViR0xQcm9ncmFtKiwgdW5zaWduZWQgbG9uZywgQWN0aXZlSW5mbyYsIGJv
b2wpCisKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzJSKGdldEF0dHJpYkxvY2F0aW9uLCBXZWJHTFBy
b2dyYW0qLCBjb25zdCBTdHJpbmcmLCBpbnQpCisKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzIoZ2V0
Qm9vbGVhbnYsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGNoYXIqKQorCitERUxFR0FURV9UT19J
TlRFUk5BTF8zKGdldEJ1ZmZlclBhcmFtZXRlcml2LCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBs
b25nLCBpbnQqKQorCitERUxFR0FURV9UT19JTlRFUk5BTF9SKGdldENvbnRleHRBdHRyaWJ1dGVz
LCBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcykKKworREVMRUdBVEVfVE9fSU5URVJOQUxf
UihnZXRFcnJvciwgdW5zaWduZWQgbG9uZykKKworREVMRUdBVEVfVE9fSU5URVJOQUxfMihnZXRG
bG9hdHYsIHVuc2lnbmVkIGxvbmcsIGZsb2F0KikKKworREVMRUdBVEVfVE9fSU5URVJOQUxfNChn
ZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpdiwgdW5zaWduZWQgbG9uZywgdW5zaWdu
ZWQgbG9uZywgdW5zaWduZWQgbG9uZywgaW50KikKKworREVMRUdBVEVfVE9fSU5URVJOQUxfMihn
ZXRJbnRlZ2VydiwgdW5zaWduZWQgbG9uZywgaW50KikKKworREVMRUdBVEVfVE9fSU5URVJOQUxf
MyhnZXRQcm9ncmFtaXYsIFdlYkdMUHJvZ3JhbSosIHVuc2lnbmVkIGxvbmcsIGludCopCisKK0RF
TEVHQVRFX1RPX0lOVEVSTkFMXzFSKGdldFByb2dyYW1JbmZvTG9nLCBXZWJHTFByb2dyYW0qLCBT
dHJpbmcpCisKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzMoZ2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVy
aXYsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIGludCopCisKK0RFTEVHQVRFX1RPX0lO
VEVSTkFMXzMoZ2V0U2hhZGVyaXYsIFdlYkdMU2hhZGVyKiwgdW5zaWduZWQgbG9uZywgaW50KikK
KworREVMRUdBVEVfVE9fSU5URVJOQUxfMVIoZ2V0U2hhZGVySW5mb0xvZywgV2ViR0xTaGFkZXIq
LCBTdHJpbmcpCisKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzFSKGdldFNoYWRlclNvdXJjZSwgV2Vi
R0xTaGFkZXIqLCBTdHJpbmcpCitERUxFR0FURV9UT19JTlRFUk5BTF8xUihnZXRTdHJpbmcsIHVu
c2lnbmVkIGxvbmcsIFN0cmluZykKKworREVMRUdBVEVfVE9fSU5URVJOQUxfMyhnZXRUZXhQYXJh
bWV0ZXJmdiwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgZmxvYXQqKQorREVMRUdBVEVf
VE9fSU5URVJOQUxfMyhnZXRUZXhQYXJhbWV0ZXJpdiwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQg
bG9uZywgaW50KikKKworREVMRUdBVEVfVE9fSU5URVJOQUxfMyhnZXRVbmlmb3JtZnYsIFdlYkdM
UHJvZ3JhbSosIGxvbmcsIGZsb2F0KikKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzMoZ2V0VW5pZm9y
bWl2LCBXZWJHTFByb2dyYW0qLCBsb25nLCBpbnQqKQorCitERUxFR0FURV9UT19JTlRFUk5BTF8y
UihnZXRVbmlmb3JtTG9jYXRpb24sIFdlYkdMUHJvZ3JhbSosIGNvbnN0IFN0cmluZyYsIGxvbmcp
CisKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzMoZ2V0VmVydGV4QXR0cmliZnYsIHVuc2lnbmVkIGxv
bmcsIHVuc2lnbmVkIGxvbmcsIGZsb2F0KikKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzMoZ2V0VmVy
dGV4QXR0cmliaXYsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIGludCopCisKK0RFTEVH
QVRFX1RPX0lOVEVSTkFMXzJSKGdldFZlcnRleEF0dHJpYk9mZnNldCwgdW5zaWduZWQgbG9uZywg
dW5zaWduZWQgbG9uZywgbG9uZykKKworREVMRUdBVEVfVE9fSU5URVJOQUxfMihoaW50LCB1bnNp
Z25lZCBsb25nLCB1bnNpZ25lZCBsb25nKQorREVMRUdBVEVfVE9fSU5URVJOQUxfMVIoaXNCdWZm
ZXIsIFdlYkdMQnVmZmVyKiwgYm9vbCkKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzFSKGlzRW5hYmxl
ZCwgdW5zaWduZWQgbG9uZywgYm9vbCkKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzFSKGlzRnJhbWVi
dWZmZXIsIFdlYkdMRnJhbWVidWZmZXIqLCBib29sKQorREVMRUdBVEVfVE9fSU5URVJOQUxfMVIo
aXNQcm9ncmFtLCBXZWJHTFByb2dyYW0qLCBib29sKQorREVMRUdBVEVfVE9fSU5URVJOQUxfMVIo
aXNSZW5kZXJidWZmZXIsIFdlYkdMUmVuZGVyYnVmZmVyKiwgYm9vbCkKK0RFTEVHQVRFX1RPX0lO
VEVSTkFMXzFSKGlzU2hhZGVyLCBXZWJHTFNoYWRlciosIGJvb2wpCitERUxFR0FURV9UT19JTlRF
Uk5BTF8xUihpc1RleHR1cmUsIFdlYkdMVGV4dHVyZSosIGJvb2wpCitERUxFR0FURV9UT19JTlRF
Uk5BTF8xKGxpbmVXaWR0aCwgZG91YmxlKQorREVMRUdBVEVfVE9fSU5URVJOQUxfMShsaW5rUHJv
Z3JhbSwgV2ViR0xQcm9ncmFtKikKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzIocGl4ZWxTdG9yZWks
IHVuc2lnbmVkIGxvbmcsIGxvbmcpCitERUxFR0FURV9UT19JTlRFUk5BTF8yKHBvbHlnb25PZmZz
ZXQsIGRvdWJsZSwgZG91YmxlKQorCitERUxFR0FURV9UT19JTlRFUk5BTF82UihyZWFkUGl4ZWxz
LCBsb25nLCBsb25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25n
LCB1bnNpZ25lZCBsb25nLCBQYXNzUmVmUHRyPFdlYkdMQXJyYXk+KQorCitERUxFR0FURV9UT19J
TlRFUk5BTChyZWxlYXNlU2hhZGVyQ29tcGlsZXIpCitERUxFR0FURV9UT19JTlRFUk5BTF80KHJl
bmRlcmJ1ZmZlclN0b3JhZ2UsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVk
IGxvbmcsIHVuc2lnbmVkIGxvbmcpCitERUxFR0FURV9UT19JTlRFUk5BTF8yKHNhbXBsZUNvdmVy
YWdlLCBkb3VibGUsIGJvb2wpCitERUxFR0FURV9UT19JTlRFUk5BTF80KHNjaXNzb3IsIGxvbmcs
IGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpCitERUxFR0FURV9UT19JTlRFUk5B
TF8yKHNoYWRlclNvdXJjZSwgV2ViR0xTaGFkZXIqLCBjb25zdCBTdHJpbmcmKQorREVMRUdBVEVf
VE9fSU5URVJOQUxfMyhzdGVuY2lsRnVuYywgdW5zaWduZWQgbG9uZywgbG9uZywgdW5zaWduZWQg
bG9uZykKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzQoc3RlbmNpbEZ1bmNTZXBhcmF0ZSwgdW5zaWdu
ZWQgbG9uZywgdW5zaWduZWQgbG9uZywgbG9uZywgdW5zaWduZWQgbG9uZykKK0RFTEVHQVRFX1RP
X0lOVEVSTkFMXzEoc3RlbmNpbE1hc2ssIHVuc2lnbmVkIGxvbmcpCitERUxFR0FURV9UT19JTlRF
Uk5BTF8yKHN0ZW5jaWxNYXNrU2VwYXJhdGUsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcp
CitERUxFR0FURV9UT19JTlRFUk5BTF8zKHN0ZW5jaWxPcCwgdW5zaWduZWQgbG9uZywgdW5zaWdu
ZWQgbG9uZywgdW5zaWduZWQgbG9uZykKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzQoc3RlbmNpbE9w
U2VwYXJhdGUsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVu
c2lnbmVkIGxvbmcpCisKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzlSKHRleEltYWdlMkQsIHVuc2ln
bmVkLCB1bnNpZ25lZCwgdW5zaWduZWQsIHVuc2lnbmVkLCB1bnNpZ25lZCwgdW5zaWduZWQsIHVu
c2lnbmVkLCB1bnNpZ25lZCwgdm9pZCosIGludCkKKwogaW50IEdyYXBoaWNzQ29udGV4dDNEOjp0
ZXhJbWFnZTJEKHVuc2lnbmVkIHRhcmdldCwgdW5zaWduZWQgbGV2ZWwsIEltYWdlKiBpbWFnZSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGZsaXBZLCBib29sIHByZW11
bHRpcGx5QWxwaGEpCiB7CkBAIC0xODgwLDI5ICsxMjMyLDE1IEBAIGludCBHcmFwaGljc0NvbnRl
eHQzRDo6dGV4SW1hZ2UyRCh1bnNpZ24KICAgICB1bnNpZ25lZCBpbnQgZm9ybWF0LCBpbnRlcm5h
bEZvcm1hdDsKICAgICBpZiAoIWV4dHJhY3RJbWFnZURhdGEoaW1hZ2UsIGZsaXBZLCBwcmVtdWx0
aXBseUFscGhhLCBpbWFnZURhdGEsICZmb3JtYXQsICZpbnRlcm5hbEZvcm1hdCkpCiAgICAgICAg
IHJldHVybiAtMTsKLSAgICBnbFRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxGb3Jt
YXQsCi0gICAgICAgICAgICAgICAgIGltYWdlLT53aWR0aCgpLCBpbWFnZS0+aGVpZ2h0KCksIDAs
Ci0gICAgICAgICAgICAgICAgIGZvcm1hdCwgR0xfVU5TSUdORURfQllURSwgaW1hZ2VEYXRhLmRh
dGEoKSk7Ci0gICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIG1faW50ZXJuYWwtPnRleEltYWdlMkQo
dGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxGb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW1hZ2UtPndpZHRoKCksIGltYWdlLT5oZWlnaHQoKSwgMCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQsIFVOU0lHTkVEX0JZVEUsIGltYWdlRGF0YS5k
YXRhKCkpOwogfQogCi1HTF9TQU1FX01FVEhPRF8zKFRleFBhcmFtZXRlcmYsIHRleFBhcmFtZXRl
cmYsIHVuc2lnbmVkLCB1bnNpZ25lZCwgZmxvYXQpOworREVMRUdBVEVfVE9fSU5URVJOQUxfMyh0
ZXhQYXJhbWV0ZXJmLCB1bnNpZ25lZCwgdW5zaWduZWQsIGZsb2F0KQorREVMRUdBVEVfVE9fSU5U
RVJOQUxfMyh0ZXhQYXJhbWV0ZXJpLCB1bnNpZ25lZCwgdW5zaWduZWQsIGludCkKIAotR0xfU0FN
RV9NRVRIT0RfMyhUZXhQYXJhbWV0ZXJpLCB0ZXhQYXJhbWV0ZXJpLCB1bnNpZ25lZCwgdW5zaWdu
ZWQsIGludCk7Ci0KLWludCBHcmFwaGljc0NvbnRleHQzRDo6dGV4U3ViSW1hZ2UyRCh1bnNpZ25l
ZCB0YXJnZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg
bGV2ZWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgeG9m
ZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCB5b2Zm
c2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHdpZHRo
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGhlaWdodCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBmb3JtYXQsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgdHlwZSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiBwaXhlbHMpCi17Ci0gICAgZ2xU
ZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWln
aHQsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsKLSAgICByZXR1cm4gMDsKLX0KK0RFTEVHQVRFX1RP
X0lOVEVSTkFMXzlSKHRleFN1YkltYWdlMkQsIHVuc2lnbmVkLCB1bnNpZ25lZCwgdW5zaWduZWQs
IHVuc2lnbmVkLCB1bnNpZ25lZCwgdW5zaWduZWQsIHVuc2lnbmVkLCB1bnNpZ25lZCwgdm9pZCos
IGludCkKIAogaW50IEdyYXBoaWNzQ29udGV4dDNEOjp0ZXhTdWJJbWFnZTJEKHVuc2lnbmVkIHRh
cmdldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsZXZl
bCwKQEAgLTE5MTYsMTQyICsxMjU0LDY1IEBAIGludCBHcmFwaGljc0NvbnRleHQzRDo6dGV4U3Vi
SW1hZ2UyRCh1bnMKICAgICB1bnNpZ25lZCBpbnQgZm9ybWF0LCBpbnRlcm5hbEZvcm1hdDsKICAg
ICBpZiAoIWV4dHJhY3RJbWFnZURhdGEoaW1hZ2UsIGZsaXBZLCBwcmVtdWx0aXBseUFscGhhLCBp
bWFnZURhdGEsICZmb3JtYXQsICZpbnRlcm5hbEZvcm1hdCkpCiAgICAgICAgIHJldHVybiAtMTsK
LSAgICBnbFRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwKLSAg
ICAgICAgICAgICAgICAgICAgaW1hZ2UtPndpZHRoKCksIGltYWdlLT5oZWlnaHQoKSwKLSAgICAg
ICAgICAgICAgICAgICAgZm9ybWF0LCBHTF9VTlNJR05FRF9CWVRFLCBpbWFnZURhdGEuZGF0YSgp
KTsKLSAgICByZXR1cm4gMDsKLX0KKyAgICByZXR1cm4gbV9pbnRlcm5hbC0+dGV4U3ViSW1hZ2Uy
RCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGltYWdlLT53aWR0aCgpLCBpbWFnZS0+aGVpZ2h0KCksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0LCBVTlNJR05FRF9CWVRFLCBpbWFn
ZURhdGEuZGF0YSgpKTsKK30KKworREVMRUdBVEVfVE9fSU5URVJOQUxfMih1bmlmb3JtMWYsIGxv
bmcsIGZsb2F0KQorREVMRUdBVEVfVE9fSU5URVJOQUxfMyh1bmlmb3JtMWZ2LCBsb25nLCBmbG9h
dCosIGludCkKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzIodW5pZm9ybTFpLCBsb25nLCBpbnQpCitE
RUxFR0FURV9UT19JTlRFUk5BTF8zKHVuaWZvcm0xaXYsIGxvbmcsIGludCosIGludCkKK0RFTEVH
QVRFX1RPX0lOVEVSTkFMXzModW5pZm9ybTJmLCBsb25nLCBmbG9hdCwgZmxvYXQpCitERUxFR0FU
RV9UT19JTlRFUk5BTF8zKHVuaWZvcm0yZnYsIGxvbmcsIGZsb2F0KiwgaW50KQorREVMRUdBVEVf
VE9fSU5URVJOQUxfMyh1bmlmb3JtMmksIGxvbmcsIGludCwgaW50KQorREVMRUdBVEVfVE9fSU5U
RVJOQUxfMyh1bmlmb3JtMml2LCBsb25nLCBpbnQqLCBpbnQpCitERUxFR0FURV9UT19JTlRFUk5B
TF80KHVuaWZvcm0zZiwgbG9uZywgZmxvYXQsIGZsb2F0LCBmbG9hdCkKK0RFTEVHQVRFX1RPX0lO
VEVSTkFMXzModW5pZm9ybTNmdiwgbG9uZywgZmxvYXQqLCBpbnQpCitERUxFR0FURV9UT19JTlRF
Uk5BTF80KHVuaWZvcm0zaSwgbG9uZywgaW50LCBpbnQsIGludCkKK0RFTEVHQVRFX1RPX0lOVEVS
TkFMXzModW5pZm9ybTNpdiwgbG9uZywgaW50KiwgaW50KQorREVMRUdBVEVfVE9fSU5URVJOQUxf
NSh1bmlmb3JtNGYsIGxvbmcsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0KQorREVMRUdBVEVf
VE9fSU5URVJOQUxfMyh1bmlmb3JtNGZ2LCBsb25nLCBmbG9hdCosIGludCkKK0RFTEVHQVRFX1RP
X0lOVEVSTkFMXzUodW5pZm9ybTRpLCBsb25nLCBpbnQsIGludCwgaW50LCBpbnQpCitERUxFR0FU
RV9UT19JTlRFUk5BTF8zKHVuaWZvcm00aXYsIGxvbmcsIGludCosIGludCkKK0RFTEVHQVRFX1RP
X0lOVEVSTkFMXzQodW5pZm9ybU1hdHJpeDJmdiwgbG9uZywgYm9vbCwgZmxvYXQqLCBpbnQpCitE
RUxFR0FURV9UT19JTlRFUk5BTF80KHVuaWZvcm1NYXRyaXgzZnYsIGxvbmcsIGJvb2wsIGZsb2F0
KiwgaW50KQorREVMRUdBVEVfVE9fSU5URVJOQUxfNCh1bmlmb3JtTWF0cml4NGZ2LCBsb25nLCBi
b29sLCBmbG9hdCosIGludCkKKworREVMRUdBVEVfVE9fSU5URVJOQUxfMSh1c2VQcm9ncmFtLCBX
ZWJHTFByb2dyYW0qKQorREVMRUdBVEVfVE9fSU5URVJOQUxfMSh2YWxpZGF0ZVByb2dyYW0sIFdl
YkdMUHJvZ3JhbSopCisKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzIodmVydGV4QXR0cmliMWYsIHVu
c2lnbmVkIGxvbmcsIGZsb2F0KQorREVMRUdBVEVfVE9fSU5URVJOQUxfMih2ZXJ0ZXhBdHRyaWIx
ZnYsIHVuc2lnbmVkIGxvbmcsIGZsb2F0KikKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzModmVydGV4
QXR0cmliMmYsIHVuc2lnbmVkIGxvbmcsIGZsb2F0LCBmbG9hdCkKK0RFTEVHQVRFX1RPX0lOVEVS
TkFMXzIodmVydGV4QXR0cmliMmZ2LCB1bnNpZ25lZCBsb25nLCBmbG9hdCopCitERUxFR0FURV9U
T19JTlRFUk5BTF80KHZlcnRleEF0dHJpYjNmLCB1bnNpZ25lZCBsb25nLCBmbG9hdCwgZmxvYXQs
IGZsb2F0KQorREVMRUdBVEVfVE9fSU5URVJOQUxfMih2ZXJ0ZXhBdHRyaWIzZnYsIHVuc2lnbmVk
IGxvbmcsIGZsb2F0KikKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzUodmVydGV4QXR0cmliNGYsIHVu
c2lnbmVkIGxvbmcsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0KQorREVMRUdBVEVfVE9fSU5U
RVJOQUxfMih2ZXJ0ZXhBdHRyaWI0ZnYsIHVuc2lnbmVkIGxvbmcsIGZsb2F0KikKK0RFTEVHQVRF
X1RPX0lOVEVSTkFMXzYodmVydGV4QXR0cmliUG9pbnRlciwgdW5zaWduZWQgbG9uZywgaW50LCBp
bnQsIGJvb2wsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpCisKK0RFTEVHQVRFX1RPX0lO
VEVSTkFMXzQodmlld3BvcnQsIGxvbmcsIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxv
bmcpCisKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzEoYmVnaW5QYWludCwgV2ViR0xSZW5kZXJpbmdD
b250ZXh0KikKK0RFTEVHQVRFX1RPX0lOVEVSTkFMKGVuZFBhaW50KQorCitERUxFR0FURV9UT19J
TlRFUk5BTF9SKGNyZWF0ZUJ1ZmZlciwgdW5zaWduZWQpCitERUxFR0FURV9UT19JTlRFUk5BTF9S
KGNyZWF0ZUZyYW1lYnVmZmVyLCB1bnNpZ25lZCkKK0RFTEVHQVRFX1RPX0lOVEVSTkFMX1IoY3Jl
YXRlUHJvZ3JhbSwgdW5zaWduZWQpCitERUxFR0FURV9UT19JTlRFUk5BTF9SKGNyZWF0ZVJlbmRl
cmJ1ZmZlciwgdW5zaWduZWQpCitERUxFR0FURV9UT19JTlRFUk5BTF8xUihjcmVhdGVTaGFkZXIs
IHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkKQorREVMRUdBVEVfVE9fSU5URVJOQUxfUihjcmVhdGVU
ZXh0dXJlLCB1bnNpZ25lZCkKKworREVMRUdBVEVfVE9fSU5URVJOQUxfMShkZWxldGVCdWZmZXIs
IHVuc2lnbmVkKQorREVMRUdBVEVfVE9fSU5URVJOQUxfMShkZWxldGVGcmFtZWJ1ZmZlciwgdW5z
aWduZWQpCitERUxFR0FURV9UT19JTlRFUk5BTF8xKGRlbGV0ZVByb2dyYW0sIHVuc2lnbmVkKQor
REVMRUdBVEVfVE9fSU5URVJOQUxfMShkZWxldGVSZW5kZXJidWZmZXIsIHVuc2lnbmVkKQorREVM
RUdBVEVfVE9fSU5URVJOQUxfMShkZWxldGVTaGFkZXIsIHVuc2lnbmVkKQorREVMRUdBVEVfVE9f
SU5URVJOQUxfMShkZWxldGVUZXh0dXJlLCB1bnNpZ25lZCkKIAotR0xfU0FNRV9NRVRIT0RfMihV
bmlmb3JtMWYsIHVuaWZvcm0xZiwgbG9uZywgZmxvYXQpCitERUxFR0FURV9UT19JTlRFUk5BTF8x
KHN5bnRoZXNpemVHTEVycm9yLCB1bnNpZ25lZCBsb25nKQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjp1bmlmb3JtMWZ2KGxvbmcgbG9jYXRpb24sIGZsb2F0KiB2LCBpbnQgc2l6ZSkKLXsKLSAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbFVuaWZvcm0xZnYobG9jYXRpb24sIHNpemUs
IHYpOwotfQotCi1HTF9TQU1FX01FVEhPRF8yKFVuaWZvcm0xaSwgdW5pZm9ybTFpLCBsb25nLCBp
bnQpCi0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0xaXYobG9uZyBsb2NhdGlvbiwg
aW50KiB2LCBpbnQgc2l6ZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbFVu
aWZvcm0xaXYobG9jYXRpb24sIHNpemUsIHYpOwotfQotCi1HTF9TQU1FX01FVEhPRF8zKFVuaWZv
cm0yZiwgdW5pZm9ybTJmLCBsb25nLCBmbG9hdCwgZmxvYXQpCi0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OnVuaWZvcm0yZnYobG9uZyBsb2NhdGlvbiwgZmxvYXQqIHYsIGludCBzaXplKQotewot
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsVW5pZm9ybTJmdihsb2NhdGlvbiwgc2l6
ZSwgdik7Ci19Ci0KLUdMX1NBTUVfTUVUSE9EXzMoVW5pZm9ybTJpLCB1bmlmb3JtMmksIGxvbmcs
IGludCwgaW50KQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMml2KGxvbmcgbG9j
YXRpb24sIGludCogdiwgaW50IHNpemUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0g
ICAgZ2xVbmlmb3JtMml2KGxvY2F0aW9uLCBzaXplLCB2KTsKLX0KLQotR0xfU0FNRV9NRVRIT0Rf
NChVbmlmb3JtM2YsIHVuaWZvcm0zZiwgbG9uZywgZmxvYXQsIGZsb2F0LCBmbG9hdCkKLQotdm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTNmdihsb25nIGxvY2F0aW9uLCBmbG9hdCogdiwg
aW50IHNpemUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2xVbmlmb3JtM2Z2
KGxvY2F0aW9uLCBzaXplLCB2KTsKLX0KLQotR0xfU0FNRV9NRVRIT0RfNChVbmlmb3JtM2ksIHVu
aWZvcm0zaSwgbG9uZywgaW50LCBpbnQsIGludCkKLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
dW5pZm9ybTNpdihsb25nIGxvY2F0aW9uLCBpbnQqIHYsIGludCBzaXplKQotewotICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOwotICAgIGdsVW5pZm9ybTNpdihsb2NhdGlvbiwgc2l6ZSwgdik7Ci19
Ci0KLUdMX1NBTUVfTUVUSE9EXzUoVW5pZm9ybTRmLCB1bmlmb3JtNGYsIGxvbmcsIGZsb2F0LCBm
bG9hdCwgZmxvYXQsIGZsb2F0KQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtNGZ2
KGxvbmcgbG9jYXRpb24sIGZsb2F0KiB2LCBpbnQgc2l6ZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKLSAgICBnbFVuaWZvcm00ZnYobG9jYXRpb24sIHNpemUsIHYpOwotfQotCi1HTF9T
QU1FX01FVEhPRF81KFVuaWZvcm00aSwgdW5pZm9ybTRpLCBsb25nLCBpbnQsIGludCwgaW50LCBp
bnQpCi0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm00aXYobG9uZyBsb2NhdGlvbiwg
aW50KiB2LCBpbnQgc2l6ZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbFVu
aWZvcm00aXYobG9jYXRpb24sIHNpemUsIHYpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNE
Ojp1bmlmb3JtTWF0cml4MmZ2KGxvbmcgbG9jYXRpb24sIGJvb2wgdHJhbnNwb3NlLCBmbG9hdCog
dmFsdWUsIGludCBzaXplKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsVW5p
Zm9ybU1hdHJpeDJmdihsb2NhdGlvbiwgc2l6ZSwgdHJhbnNwb3NlLCB2YWx1ZSk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm1NYXRyaXgzZnYobG9uZyBsb2NhdGlvbiwgYm9v
bCB0cmFuc3Bvc2UsIGZsb2F0KiB2YWx1ZSwgaW50IHNpemUpCi17Ci0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7Ci0gICAgZ2xVbmlmb3JtTWF0cml4M2Z2KGxvY2F0aW9uLCBzaXplLCB0cmFuc3Bv
c2UsIHZhbHVlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybU1hdHJpeDRm
dihsb25nIGxvY2F0aW9uLCBib29sIHRyYW5zcG9zZSwgZmxvYXQqIHZhbHVlLCBpbnQgc2l6ZSkK
LXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbFVuaWZvcm1NYXRyaXg0ZnYobG9j
YXRpb24sIHNpemUsIHRyYW5zcG9zZSwgdmFsdWUpOwotfQotCi1HTF9TQU1FX01FVEhPRF8xX1go
VXNlUHJvZ3JhbSwgdXNlUHJvZ3JhbSwgV2ViR0xQcm9ncmFtKikKLQotR0xfU0FNRV9NRVRIT0Rf
MV9YKFZhbGlkYXRlUHJvZ3JhbSwgdmFsaWRhdGVQcm9ncmFtLCBXZWJHTFByb2dyYW0qKQotCi1H
TF9TQU1FX01FVEhPRF8yKFZlcnRleEF0dHJpYjFmLCB2ZXJ0ZXhBdHRyaWIxZiwgdW5zaWduZWQg
bG9uZywgZmxvYXQpCi0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjFmdih1
bnNpZ25lZCBsb25nIGluZHgsIGZsb2F0KiB2YWx1ZXMpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7Ci0gICAgZ2xWZXJ0ZXhBdHRyaWIxZnYoaW5keCwgdmFsdWVzKTsKLX0KLQotR0xfU0FN
RV9NRVRIT0RfMyhWZXJ0ZXhBdHRyaWIyZiwgdmVydGV4QXR0cmliMmYsIHVuc2lnbmVkIGxvbmcs
IGZsb2F0LCBmbG9hdCkKLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmliMmZ2
KHVuc2lnbmVkIGxvbmcgaW5keCwgZmxvYXQqIHZhbHVlcykKLXsKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKLSAgICBnbFZlcnRleEF0dHJpYjJmdihpbmR4LCB2YWx1ZXMpOwotfQotCi1HTF9T
QU1FX01FVEhPRF80KFZlcnRleEF0dHJpYjNmLCB2ZXJ0ZXhBdHRyaWIzZiwgdW5zaWduZWQgbG9u
ZywgZmxvYXQsIGZsb2F0LCBmbG9hdCkKLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4
QXR0cmliM2Z2KHVuc2lnbmVkIGxvbmcgaW5keCwgZmxvYXQqIHZhbHVlcykKLXsKLSAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKLSAgICBnbFZlcnRleEF0dHJpYjNmdihpbmR4LCB2YWx1ZXMpOwot
fQotCi1HTF9TQU1FX01FVEhPRF81KFZlcnRleEF0dHJpYjRmLCB2ZXJ0ZXhBdHRyaWI0ZiwgdW5z
aWduZWQgbG9uZywgZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQpCi0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OnZlcnRleEF0dHJpYjRmdih1bnNpZ25lZCBsb25nIGluZHgsIGZsb2F0KiB2YWx1
ZXMpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2xWZXJ0ZXhBdHRyaWI0ZnYo
aW5keCwgdmFsdWVzKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmli
UG9pbnRlcih1bnNpZ25lZCBsb25nIGluZHgsIGludCBzaXplLCBpbnQgdHlwZSwgYm9vbCBub3Jt
YWxpemVkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNp
Z25lZCBsb25nIHN0cmlkZSwgdW5zaWduZWQgbG9uZyBvZmZzZXQpCi17Ci0gICAgbV9pbnRlcm5h
bC0+dmVydGV4QXR0cmliUG9pbnRlcihpbmR4LCBzaXplLCB0eXBlLCBub3JtYWxpemVkLCBzdHJp
ZGUsIG9mZnNldCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZpZXdwb3J0KGxvbmcg
eCwgbG9uZyB5LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCkKLXsK
LSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBtX2ludGVybmFsLT52aWV3cG9ydEltcGwo
eCwgeSwgd2lkdGgsIGhlaWdodCk7Ci19Ci0KLX0KK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAog
I2VuZGlmIC8vIEVOQUJMRSgzRF9DQU5WQVMpCkluZGV4OiBXZWJLaXQvY2hyb21pdW0vc3JjL1dl
YkdyYXBoaWNzQ29udGV4dDNELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYkdyYXBoaWNzQ29udGV4dDNELmNwcAkocmV2aXNpb24gMCkKKysrIFdlYktpdC9jaHJvbWl1
bS9zcmMvV2ViR3JhcGhpY3NDb250ZXh0M0QuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUx
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgor
ICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xl
IEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisg
KiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYkdyYXBoaWNzQ29udGV4dDNELmgi
CisKKyNpZiBFTkFCTEUoM0RfQ0FOVkFTKQorCisjaW5jbHVkZSAiV2ViR3JhcGhpY3NDb250ZXh0
M0REZWZhdWx0SW1wbC5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViR3JhcGhpY3NDb250
ZXh0M0QqIFdlYkdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVEZWZhdWx0KCkKK3sKKyNpZiBFTkFC
TEUoM0RfQ0FOVkFTKQorICAgIHJldHVybiBuZXcgV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0
SW1wbCgpOworI2Vsc2UKKyAgICByZXR1cm4gMDsKKyNlbmRpZgorfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRSgzRF9DQU5WQVMpCkluZGV4OiBXZWJLaXQvY2hy
b21pdW0vc3JjL1dlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGwuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbC5j
cHAJKHJldmlzaW9uIDApCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYkdyYXBoaWNzQ29udGV4
dDNERGVmYXVsdEltcGwuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExOTEgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlz
dHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwor
ICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoM0RfQ0FOVkFTKQorCisjaW5jbHVkZSAiV2ViR3Jh
cGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbC5oIgorCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQu
aCIKKworI2lmIE9TKExJTlVYKQorI2luY2x1ZGUgPGRsZmNuLmg+CisjZW5kaWYKKworbmFtZXNw
YWNlIFdlYktpdCB7CisKKy8vIFVuY29tbWVudCB0aGlzIHRvIHJlbmRlciB0byBhIHNlcGFyYXRl
IHdpbmRvdyBmb3IgZGVidWdnaW5nCisvLyAjZGVmaW5lIFJFTkRFUl9UT19ERUJVR0dJTkdfV0lO
RE9XCisKKyNpZiBPUyhEQVJXSU4pCisjZGVmaW5lIFVTRV9URVhUVVJFX1JFQ1RBTkdMRV9GT1Jf
RlJBTUVCVUZGRVIKKyNlbmRpZgorCitib29sIFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdElt
cGw6OnNfaW5pdGlhbGl6ZWRHTEVXID0gZmFsc2U7CisKKyNpZiBPUyhMSU5VWCkKK1dlYkdyYXBo
aWNzQ29udGV4dDNERGVmYXVsdEltcGw6OkdMQ29ubmVjdGlvbiogV2ViR3JhcGhpY3NDb250ZXh0
M0REZWZhdWx0SW1wbDo6c19nbCA9IDA7CisKK1dlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdElt
cGw6OkdMQ29ubmVjdGlvbiogV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6R0xDb25u
ZWN0aW9uOjpjcmVhdGUoKQoreworICAgIERpc3BsYXkqIGRweSA9IFhPcGVuRGlzcGxheSgwKTsK
KyAgICBpZiAoIWRweSkgeworICAgICAgICBwcmludGYoIkdyYXBoaWNzQ29udGV4dDNEOiBlcnJv
ciBvcGVuaW5nIFggZGlzcGxheVxuIik7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAg
IC8vIFdlIHVzZSBSVExEX0dMT0JBTCBzZW1hbnRpY3Mgc28gdGhhdCBHTEVXIGluaXRpYWxpemF0
aW9uIHdvcmtzOworICAgIC8vIEdMRVcgZXhwZWN0cyB0byBiZSBhYmxlIHRvIG9wZW4gdGhlIGN1
cnJlbnQgcHJvY2VzcydzIGhhbmRsZQorICAgIC8vIGFuZCBkbyBkbHN5bSdzIG9mIEdMIGVudHJ5
IHBvaW50cyBmcm9tIHRoZXJlLgorICAgIHZvaWQqIGxpYkdMID0gZGxvcGVuKCJsaWJHTC5zby4x
IiwgUlRMRF9MQVpZIHwgUlRMRF9HTE9CQUwpOworICAgIGlmICghbGliR0wpIHsKKyAgICAgICAg
WENsb3NlRGlzcGxheShkcHkpOworICAgICAgICBwcmludGYoIkdyYXBoaWNzQ29udGV4dDNEOiBl
cnJvciBvcGVuaW5nIGxpYkdMLnNvLjE6ICVzXG4iLCBkbGVycm9yKCkpOworICAgICAgICByZXR1
cm4gMDsKKyAgICB9CisKKyAgICBQRk5HTFhDSE9PU0VGQkNPTkZJR1BST0MgY2hvb3NlRkJDb25m
aWcgPSAoUEZOR0xYQ0hPT1NFRkJDT05GSUdQUk9DKSBkbHN5bShsaWJHTCwgImdsWENob29zZUZC
Q29uZmlnIik7CisgICAgUEZOR0xYQ1JFQVRFTkVXQ09OVEVYVFBST0MgY3JlYXRlTmV3Q29udGV4
dCA9IChQRk5HTFhDUkVBVEVORVdDT05URVhUUFJPQykgZGxzeW0obGliR0wsICJnbFhDcmVhdGVO
ZXdDb250ZXh0Iik7CisgICAgUEZOR0xYQ1JFQVRFUEJVRkZFUlBST0MgY3JlYXRlUGJ1ZmZlciA9
IChQRk5HTFhDUkVBVEVQQlVGRkVSUFJPQykgZGxzeW0obGliR0wsICJnbFhDcmVhdGVQYnVmZmVy
Iik7CisgICAgUEZOR0xYREVTVFJPWVBCVUZGRVJQUk9DIGRlc3Ryb3lQYnVmZmVyID0gKFBGTkdM
WERFU1RST1lQQlVGRkVSUFJPQykgZGxzeW0obGliR0wsICJnbFhEZXN0cm95UGJ1ZmZlciIpOwor
ICAgIFBGTkdMWE1BS0VDVVJSRU5UUFJPQyBtYWtlQ3VycmVudCA9IChQRk5HTFhNQUtFQ1VSUkVO
VFBST0MpIGRsc3ltKGxpYkdMLCAiZ2xYTWFrZUN1cnJlbnQiKTsKKyAgICBQRk5HTFhERVNUUk9Z
Q09OVEVYVFBST0MgZGVzdHJveUNvbnRleHQgPSAoUEZOR0xYREVTVFJPWUNPTlRFWFRQUk9DKSBk
bHN5bShsaWJHTCwgImdsWERlc3Ryb3lDb250ZXh0Iik7CisgICAgUEZOR0xYR0VUQ1VSUkVOVENP
TlRFWFRQUk9DIGdldEN1cnJlbnRDb250ZXh0ID0gKFBGTkdMWEdFVENVUlJFTlRDT05URVhUUFJP
QykgZGxzeW0obGliR0wsICJnbFhHZXRDdXJyZW50Q29udGV4dCIpOworICAgIGlmICghY2hvb3Nl
RkJDb25maWcgfHwgIWNyZWF0ZU5ld0NvbnRleHQgfHwgIWNyZWF0ZVBidWZmZXIKKyAgICAgICAg
fHwgIWRlc3Ryb3lQYnVmZmVyIHx8ICFtYWtlQ3VycmVudCB8fCAhZGVzdHJveUNvbnRleHQKKyAg
ICAgICAgfHwgIWdldEN1cnJlbnRDb250ZXh0KSB7CisgICAgICAgIFhDbG9zZURpc3BsYXkoZHB5
KTsKKyAgICAgICAgZGxjbG9zZShsaWJHTCk7CisgICAgICAgIHByaW50ZigiR3JhcGhpY3NDb250
ZXh0M0Q6IGVycm9yIGxvb2tpbmcgdXAgYm9vdHN0cmFwcGluZyBlbnRyeSBwb2ludHNcbiIpOwor
ICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgcmV0dXJuIG5ldyBHTENvbm5lY3Rpb24oZHB5
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYkdMLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNob29zZUZCQ29uZmlnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNy
ZWF0ZU5ld0NvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlUGJ1ZmZl
ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0cm95UGJ1ZmZlciwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtYWtlQ3VycmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBkZXN0cm95Q29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRDdXJy
ZW50Q29udGV4dCk7Cit9CisKK1dlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OkdMQ29u
bmVjdGlvbjo6fkdMQ29ubmVjdGlvbigpCit7CisgICAgWENsb3NlRGlzcGxheShtX2Rpc3BsYXkp
OworICAgIGRsY2xvc2UobV9saWJHTCk7Cit9CisKKyNlbmRpZiAvLyBPUyhMSU5VWCkKKworV2Vi
R3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6VmVydGV4QXR0cmliUG9pbnRlclN0YXRlOjpW
ZXJ0ZXhBdHRyaWJQb2ludGVyU3RhdGUoKQorICAgIDogZW5hYmxlZChmYWxzZSkKKyAgICAsIGJ1
ZmZlcigwKQorICAgICwgaW5keCgwKQorICAgICwgc2l6ZSgwKQorICAgICwgdHlwZSgwKQorICAg
ICwgbm9ybWFsaXplZChmYWxzZSkKKyAgICAsIHN0cmlkZSgwKQorICAgICwgb2Zmc2V0KDApCit7
Cit9CisKK1dlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OldlYkdyYXBoaWNzQ29udGV4
dDNERGVmYXVsdEltcGwoKQorICAgIDogbV9pbml0aWFsaXplZChmYWxzZSkKKyAgICAsIG1fdGV4
dHVyZSgwKQorICAgICwgbV9mYm8oMCkKKyAgICAsIG1fZGVwdGhCdWZmZXIoMCkKKyAgICAsIG1f
Ym91bmRGQk8oMCkKKyNpZmRlZiBGTElQX0ZSQU1FQlVGRkVSX1ZFUlRJQ0FMTFkKKyAgICAsIG1f
c2NhbmxpbmUoMCkKKyNlbmRpZgorICAgICwgbV9ib3VuZEFycmF5QnVmZmVyKDApCisjaWYgUExB
VEZPUk0oU0tJQSkKKyAgICAsIG1fcmVzaXppbmdCaXRtYXAoMCkKKyNlbmRpZgorI2lmIE9TKFdJ
TkRPV1MpCisgICAgLCBtX2NhbnZhc1dpbmRvdygwKQorICAgICwgbV9jYW52YXNEQygwKQorICAg
ICwgbV9jb250ZXh0T2JqKDApCisjZWxpZiBQTEFURk9STShDRykKKyAgICAsIG1fcGJ1ZmZlcigw
KQorICAgICwgbV9jb250ZXh0T2JqKDApCisgICAgLCBtX3JlbmRlck91dHB1dCgwKQorI2VsaWYg
T1MoTElOVVgpCisgICAgLCBtX2NvbnRleHRPYmooMCkKKyAgICAsIG1fcGJ1ZmZlcigwKQorI2Vs
c2UKKyNlcnJvciBNdXN0IHBvcnQgdG8geW91ciBwbGF0Zm9ybQorI2VuZGlmCit7Cit9CisKK1dl
YkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6On5XZWJHcmFwaGljc0NvbnRleHQzRERlZmF1
bHRJbXBsKCkKK3sKKyAgICBpZiAobV9pbml0aWFsaXplZCkgeworICAgICAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyNpZm5kZWYgUkVOREVSX1RPX0RFQlVHR0lOR19XSU5ET1cKKyAgICAgICAg
Z2xEZWxldGVSZW5kZXJidWZmZXJzRVhUKDEsICZtX2RlcHRoQnVmZmVyKTsKKyAgICAgICAgZ2xE
ZWxldGVUZXh0dXJlcygxLCAmbV90ZXh0dXJlKTsKKyNpZmRlZiBGTElQX0ZSQU1FQlVGRkVSX1ZF
UlRJQ0FMTFkKKyAgICAgICAgaWYgKG1fc2NhbmxpbmUpCisgICAgICAgICAgICBkZWxldGVbXSBt
X3NjYW5saW5lOworI2VuZGlmCisgICAgICAgIGdsRGVsZXRlRnJhbWVidWZmZXJzRVhUKDEsICZt
X2Zibyk7CisjZW5kaWYgLy8gIVJFTkRFUl9UT19ERUJVR0dJTkdfV0lORE9XCisjaWYgUExBVEZP
Uk0oU0tJQSkKKyAgICAgICAgaWYgKG1fcmVzaXppbmdCaXRtYXApCisgICAgICAgICAgICBkZWxl
dGUgbV9yZXNpemluZ0JpdG1hcDsKKyNlbmRpZgorI2lmIE9TKFdJTkRPV1MpCisgICAgICAgIHdn
bE1ha2VDdXJyZW50KDAsIDApOworICAgICAgICB3Z2xEZWxldGVDb250ZXh0KG1fY29udGV4dE9i
aik7CisgICAgICAgIFJlbGVhc2VEQyhtX2NhbnZhc1dpbmRvdywgbV9jYW52YXNEQyk7CisgICAg
ICAgIERlc3Ryb3lXaW5kb3cobV9jYW52YXNXaW5kb3cpOworI2VsaWYgUExBVEZPUk0oQ0cpCisg
ICAgICAgIENHTFNldEN1cnJlbnRDb250ZXh0KDApOworICAgICAgICBDR0xEZXN0cm95Q29udGV4
dChtX2NvbnRleHRPYmopOworICAgICAgICBDR0xEZXN0cm95UEJ1ZmZlcihtX3BidWZmZXIpOwor
ICAgICAgICBpZiAobV9yZW5kZXJPdXRwdXQpCisgICAgICAgICAgICBkZWxldGVbXSBtX3JlbmRl
ck91dHB1dDsKKyNlbGlmIE9TKExJTlVYKQorICAgICAgICBzX2dsLT5tYWtlQ3VycmVudCgwLCAw
KTsKKyAgICAgICAgc19nbC0+ZGVzdHJveUNvbnRleHQobV9jb250ZXh0T2JqKTsKKyAgICAgICAg
c19nbC0+ZGVzdHJveVBidWZmZXIobV9wYnVmZmVyKTsKKyNlbHNlCisjZXJyb3IgTXVzdCBwb3J0
IHRvIHlvdXIgcGxhdGZvcm0KKyNlbmRpZgorICAgICAgICBtX2NvbnRleHRPYmogPSAwOworICAg
IH0KK30KKworYm9vbCBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjppbml0aWFsaXpl
KFdlYkdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMpCit7CisgICAgLy8g
RklYTUU6IHdlIG5lZWQgdG8gdGFrZSBpbnRvIGFjY291bnQgdGhlIHVzZXIncyByZXF1ZXN0ZWQK
KyAgICAvLyBjb250ZXh0IGNyZWF0aW9uIGF0dHJpYnV0ZXMsIGluIHBhcnRpY3VsYXIgc3RlbmNp
bCBhbmQKKyAgICAvLyBhbnRpYWxpYXMsIGFuZCBkZXRlcm1pbmUgd2hpY2ggY291bGQgYW5kIGNv
dWxkIG5vdCBiZSBob25vcmVkCisgICAgLy8gYmFzZWQgb24gdGhlIGNhcGFiaWxpdGllcyBvZiB0
aGUgT3BlbkdMIGltcGxlbWVudGF0aW9uLgorICAgIG1fYXR0cmlidXRlcy5hbHBoYSA9IHRydWU7
CisgICAgbV9hdHRyaWJ1dGVzLmRlcHRoID0gdHJ1ZTsKKyAgICBtX2F0dHJpYnV0ZXMuc3RlbmNp
bCA9IGZhbHNlOworICAgIG1fYXR0cmlidXRlcy5hbnRpYWxpYXMgPSBmYWxzZTsKKyAgICBtX2F0
dHJpYnV0ZXMucHJlbXVsdGlwbGllZEFscGhhID0gdHJ1ZTsKKworI2lmIE9TKFdJTkRPV1MpCisg
ICAgV05EQ0xBU1Mgd2M7CisgICAgaWYgKCFHZXRDbGFzc0luZm8oR2V0TW9kdWxlSGFuZGxlKDAp
LCBMIkNBTlZBU0dMIiwgJndjKSkgeworICAgICAgICBaZXJvTWVtb3J5KCZ3Yywgc2l6ZW9mKFdO
RENMQVNTKSk7CisgICAgICAgIHdjLnN0eWxlID0gQ1NfT1dOREM7CisgICAgICAgIHdjLmhJbnN0
YW5jZSA9IEdldE1vZHVsZUhhbmRsZSgwKTsKKyAgICAgICAgd2MubHBmblduZFByb2MgPSBEZWZX
aW5kb3dQcm9jOworICAgICAgICB3Yy5scHN6Q2xhc3NOYW1lID0gTCJDQU5WQVNHTCI7CisKKyAg
ICAgICAgaWYgKCFSZWdpc3RlckNsYXNzKCZ3YykpIHsKKyAgICAgICAgICAgIHByaW50ZigiV2Vi
R3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDogUmVnaXN0ZXJDbGFzcyBmYWlsZWRcbiIpOwor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgbV9jYW52
YXNXaW5kb3cgPSBDcmVhdGVXaW5kb3coTCJDQU5WQVNHTCIsIEwiQ0FOVkFTR0wiLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdTX0NBUFRJT04sCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQ1dfVVNFREVGQVVMVCwgQ1dfVVNFREVGQVVMVCwgQ1dfVVNFREVG
QVVMVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDV19VU0VERUZBVUxULCAw
LCAwLCBHZXRNb2R1bGVIYW5kbGUoMCksIDApOworICAgIGlmICghbV9jYW52YXNXaW5kb3cpIHsK
KyAgICAgICAgcHJpbnRmKCJXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOiBDcmVhdGVX
aW5kb3cgZmFpbGVkXG4iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8v
IGdldCB0aGUgZGV2aWNlIGNvbnRleHQKKyAgICBtX2NhbnZhc0RDID0gR2V0REMobV9jYW52YXNX
aW5kb3cpOworICAgIGlmICghbV9jYW52YXNEQykgeworICAgICAgICBwcmludGYoIldlYkdyYXBo
aWNzQ29udGV4dDNERGVmYXVsdEltcGw6IEdldERDIGZhaWxlZFxuIik7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisKKyAgICAvLyBmaW5kIGRlZmF1bHQgcGl4ZWwgZm9ybWF0CisgICAg
UElYRUxGT1JNQVRERVNDUklQVE9SIHBmZDsKKyAgICBaZXJvTWVtb3J5KCZwZmQsIHNpemVvZihQ
SVhFTEZPUk1BVERFU0NSSVBUT1IpKTsKKyAgICBwZmQublNpemUgPSBzaXplb2YoUElYRUxGT1JN
QVRERVNDUklQVE9SKTsKKyAgICBwZmQublZlcnNpb24gPSAxOworI2lmZGVmIFJFTkRFUl9UT19E
RUJVR0dJTkdfV0lORE9XCisgICAgcGZkLmR3RmxhZ3MgPSBQRkRfRFJBV19UT19XSU5ET1cgfCBQ
RkRfU1VQUE9SVF9PUEVOR0wgfCBQRkRfRE9VQkxFQlVGRkVSOworI2Vsc2UKKyAgICBwZmQuZHdG
bGFncyA9IFBGRF9EUkFXX1RPX1dJTkRPVyB8IFBGRF9TVVBQT1JUX09QRU5HTDsKKyNlbmRpZgor
ICAgIGludCBwaXhlbGZvcm1hdCA9IENob29zZVBpeGVsRm9ybWF0KG1fY2FudmFzREMsICZwZmQp
OworCisgICAgLy8gc2V0IHRoZSBwaXhlbCBmb3JtYXQgZm9yIHRoZSBkYworICAgIGlmICghU2V0
UGl4ZWxGb3JtYXQobV9jYW52YXNEQywgcGl4ZWxmb3JtYXQsICZwZmQpKSB7CisgICAgICAgIHBy
aW50ZigiV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDogU2V0UGl4ZWxGb3JtYXQgZmFp
bGVkXG4iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIGNyZWF0ZSBy
ZW5kZXJpbmcgY29udGV4dAorICAgIG1fY29udGV4dE9iaiA9IHdnbENyZWF0ZUNvbnRleHQobV9j
YW52YXNEQyk7CisgICAgaWYgKCFtX2NvbnRleHRPYmopIHsKKyAgICAgICAgcHJpbnRmKCJXZWJH
cmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOiB3Z2xDcmVhdGVDb250ZXh0IGZhaWxlZFxuIik7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoIXdnbE1ha2VDdXJyZW50
KG1fY2FudmFzREMsIG1fY29udGV4dE9iaikpIHsKKyAgICAgICAgcHJpbnRmKCJXZWJHcmFwaGlj
c0NvbnRleHQzRERlZmF1bHRJbXBsOiB3Z2xNYWtlQ3VycmVudCBmYWlsZWRcbiIpOworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorCisjaWZkZWYgUkVOREVSX1RPX0RFQlVHR0lOR19XSU5E
T1cKKyAgICB0eXBlZGVmIEJPT0wgKFdJTkFQSSAqIFBGTldHTFNXQVBJTlRFUlZBTEVYVFBST0Mp
IChpbnQgaW50ZXJ2YWwpOworICAgIFBGTldHTFNXQVBJTlRFUlZBTEVYVFBST0Mgc2V0U3dhcElu
dGVydmFsID0gMDsKKyAgICBzZXRTd2FwSW50ZXJ2YWwgPSAoUEZOV0dMU1dBUElOVEVSVkFMRVhU
UFJPQykgd2dsR2V0UHJvY0FkZHJlc3MoIndnbFN3YXBJbnRlcnZhbEVYVCIpOworICAgIGlmIChz
ZXRTd2FwSW50ZXJ2YWwpCisgICAgICAgIHNldFN3YXBJbnRlcnZhbCgxKTsKKyNlbmRpZiAvLyBS
RU5ERVJfVE9fREVCVUdHSU5HX1dJTkRPVworCisjZWxpZiBQTEFURk9STShDRykKKyAgICAvLyBD
cmVhdGUgYSAxeDEgcGJ1ZmZlciBhbmQgYXNzb2NpYXRlZCBjb250ZXh0IHRvIGJvb3RzdHJhcCB0
aGluZ3MKKyAgICBDR0xQaXhlbEZvcm1hdEF0dHJpYnV0ZSBhdHRyaWJzW10gPSB7CisgICAgICAg
IChDR0xQaXhlbEZvcm1hdEF0dHJpYnV0ZSkga0NHTFBGQVBCdWZmZXIsCisgICAgICAgIChDR0xQ
aXhlbEZvcm1hdEF0dHJpYnV0ZSkgMAorICAgIH07CisgICAgQ0dMUGl4ZWxGb3JtYXRPYmogcGl4
ZWxGb3JtYXQ7CisgICAgR0xpbnQgbnVtUGl4ZWxGb3JtYXRzOworICAgIGlmIChDR0xDaG9vc2VQ
aXhlbEZvcm1hdChhdHRyaWJzLCAmcGl4ZWxGb3JtYXQsICZudW1QaXhlbEZvcm1hdHMpICE9IGtD
R0xOb0Vycm9yKSB7CisgICAgICAgIHByaW50ZigiV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0
SW1wbDogZXJyb3IgY2hvb3NpbmcgcGl4ZWwgZm9ybWF0XG4iKTsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKyAgICBpZiAoIXBpeGVsRm9ybWF0KSB7CisgICAgICAgIHByaW50ZigiV2Vi
R3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDogbm8gcGl4ZWwgZm9ybWF0IHNlbGVjdGVkXG4i
KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBDR0xDb250ZXh0T2JqIGNvbnRl
eHQ7CisgICAgQ0dMRXJyb3IgcmVzID0gQ0dMQ3JlYXRlQ29udGV4dChwaXhlbEZvcm1hdCwgMCwg
JmNvbnRleHQpOworICAgIENHTERlc3Ryb3lQaXhlbEZvcm1hdChwaXhlbEZvcm1hdCk7CisgICAg
aWYgKHJlcyAhPSBrQ0dMTm9FcnJvcikgeworICAgICAgICBwcmludGYoIldlYkdyYXBoaWNzQ29u
dGV4dDNERGVmYXVsdEltcGw6IGVycm9yIGNyZWF0aW5nIGNvbnRleHRcbiIpOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorICAgIENHTFBCdWZmZXJPYmogcGJ1ZmZlcjsKKyAgICBpZiAo
Q0dMQ3JlYXRlUEJ1ZmZlcigxLCAxLCBHTF9URVhUVVJFXzJELCBHTF9SR0JBLCAwLCAmcGJ1ZmZl
cikgIT0ga0NHTE5vRXJyb3IpIHsKKyAgICAgICAgQ0dMRGVzdHJveUNvbnRleHQoY29udGV4dCk7
CisgICAgICAgIHByaW50ZigiV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDogZXJyb3Ig
Y3JlYXRpbmcgcGJ1ZmZlclxuIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAg
aWYgKENHTFNldFBCdWZmZXIoY29udGV4dCwgcGJ1ZmZlciwgMCwgMCwgMCkgIT0ga0NHTE5vRXJy
b3IpIHsKKyAgICAgICAgQ0dMRGVzdHJveUNvbnRleHQoY29udGV4dCk7CisgICAgICAgIENHTERl
c3Ryb3lQQnVmZmVyKHBidWZmZXIpOworICAgICAgICBwcmludGYoIldlYkdyYXBoaWNzQ29udGV4
dDNERGVmYXVsdEltcGw6IGVycm9yIGF0dGFjaGluZyBwYnVmZmVyIHRvIGNvbnRleHRcbiIpOwor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmIChDR0xTZXRDdXJyZW50Q29udGV4
dChjb250ZXh0KSAhPSBrQ0dMTm9FcnJvcikgeworICAgICAgICBDR0xEZXN0cm95Q29udGV4dChj
b250ZXh0KTsKKyAgICAgICAgQ0dMRGVzdHJveVBCdWZmZXIocGJ1ZmZlcik7CisgICAgICAgIHBy
aW50ZigiV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDogZXJyb3IgbWFraW5nIGNvbnRl
eHQgY3VycmVudFxuIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgbV9wYnVm
ZmVyID0gcGJ1ZmZlcjsKKyAgICBtX2NvbnRleHRPYmogPSBjb250ZXh0OworI2VsaWYgT1MoTElO
VVgpCisgICAgaWYgKCFzX2dsKSB7CisgICAgICAgIHNfZ2wgPSBHTENvbm5lY3Rpb246OmNyZWF0
ZSgpOworICAgICAgICBpZiAoIXNfZ2wpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorCisgICAgaW50IGNvbmZpZ0F0dHJzW10gPSB7CisgICAgICAgIEdMWF9EUkFXQUJMRV9UWVBF
LAorICAgICAgICBHTFhfUEJVRkZFUl9CSVQsCisgICAgICAgIEdMWF9SRU5ERVJfVFlQRSwKKyAg
ICAgICAgR0xYX1JHQkFfQklULAorICAgICAgICBHTFhfRE9VQkxFQlVGRkVSLAorICAgICAgICAw
LAorICAgICAgICAwCisgICAgfTsKKyAgICBpbnQgbmVsZW1lbnRzID0gMDsKKyAgICBHTFhGQkNv
bmZpZyogY29uZmlnID0gc19nbC0+Y2hvb3NlRkJDb25maWcoMCwgY29uZmlnQXR0cnMsICZuZWxl
bWVudHMpOworICAgIGlmICghY29uZmlnKSB7CisgICAgICAgIHByaW50ZigiV2ViR3JhcGhpY3ND
b250ZXh0M0REZWZhdWx0SW1wbDogZ2xYQ2hvb3NlRkJDb25maWcgZmFpbGVkXG4iKTsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBpZiAoIW5lbGVtZW50cykgeworICAgICAgICBw
cmludGYoIldlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6IGdsWENob29zZUZCQ29uZmln
IHJldHVybmVkIDAgZWxlbWVudHNcbiIpOworICAgICAgICBYRnJlZShjb25maWcpOworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIEdMWENvbnRleHQgY29udGV4dCA9IHNfZ2wtPmNy
ZWF0ZU5ld0NvbnRleHQoY29uZmlnWzBdLCBHTFhfUkdCQV9UWVBFLCAwLCBUcnVlKTsKKyAgICBp
ZiAoIWNvbnRleHQpIHsKKyAgICAgICAgcHJpbnRmKCJXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1
bHRJbXBsOiBnbFhDcmVhdGVOZXdDb250ZXh0IGZhaWxlZFxuIik7CisgICAgICAgIFhGcmVlKGNv
bmZpZyk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgaW50IHBidWZmZXJBdHRy
c1tdID0geworICAgICAgICBHTFhfUEJVRkZFUl9XSURUSCwKKyAgICAgICAgMSwKKyAgICAgICAg
R0xYX1BCVUZGRVJfSEVJR0hULAorICAgICAgICAxLAorICAgICAgICAwCisgICAgfTsKKyAgICBH
TFhQYnVmZmVyIHBidWZmZXIgPSBzX2dsLT5jcmVhdGVQYnVmZmVyKGNvbmZpZ1swXSwgcGJ1ZmZl
ckF0dHJzKTsKKyAgICBYRnJlZShjb25maWcpOworICAgIGlmICghcGJ1ZmZlcikgeworICAgICAg
ICBwcmludGYoIldlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6IGdseENyZWF0ZVBidWZm
ZXIgZmFpbGVkXG4iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBpZiAoIXNf
Z2wtPm1ha2VDdXJyZW50KHBidWZmZXIsIGNvbnRleHQpKSB7CisgICAgICAgIHByaW50ZigiV2Vi
R3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDogZ2xYTWFrZUN1cnJlbnQgZmFpbGVkXG4iKTsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBtX2NvbnRleHRPYmogPSBjb250ZXh0
OworICAgIG1fcGJ1ZmZlciA9IHBidWZmZXI7CisjZWxzZQorI2Vycm9yIE11c3QgcG9ydCB0byB5
b3VyIHBsYXRmb3JtCisjZW5kaWYKKworICAgIGlmICghc19pbml0aWFsaXplZEdMRVcpIHsKKyAg
ICAgICAgLy8gSW5pdGlhbGl6ZSBHTEVXIGFuZCBjaGVjayBmb3IgR0wgMi4wIHN1cHBvcnQgYnkg
dGhlIGRyaXZlcnMuCisgICAgICAgIEdMZW51bSBnbGV3SW5pdFJlc3VsdCA9IGdsZXdJbml0KCk7
CisgICAgICAgIGlmIChnbGV3SW5pdFJlc3VsdCAhPSBHTEVXX09LKSB7CisgICAgICAgICAgICBw
cmludGYoIldlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6IEdMRVcgaW5pdGlhbGl6YXRp
b24gZmFpbGVkXG4iKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAg
ICAgICBpZiAoIWdsZXdJc1N1cHBvcnRlZCgiR0xfVkVSU0lPTl8yXzAiKSkgeworICAgICAgICAg
ICAgcHJpbnRmKCJXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOiBPcGVuR0wgMi4wIG5v
dCBzdXBwb3J0ZWRcbiIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9Cisg
ICAgICAgIHNfaW5pdGlhbGl6ZWRHTEVXID0gdHJ1ZTsKKyAgICB9CisKKyAgICBtX2luaXRpYWxp
emVkID0gdHJ1ZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBXZWJHcmFwaGljc0NvbnRl
eHQzRERlZmF1bHRJbXBsOjptYWtlQ29udGV4dEN1cnJlbnQoKQoreworI2lmIE9TKFdJTkRPV1Mp
CisgICAgaWYgKHdnbEdldEN1cnJlbnRDb250ZXh0KCkgIT0gbV9jb250ZXh0T2JqKQorICAgICAg
ICBpZiAod2dsTWFrZUN1cnJlbnQobV9jYW52YXNEQywgbV9jb250ZXh0T2JqKSkKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworI2VsaWYgUExBVEZPUk0oQ0cpCisgICAgaWYgKENHTEdldEN1cnJl
bnRDb250ZXh0KCkgIT0gbV9jb250ZXh0T2JqKQorICAgICAgICBpZiAoQ0dMU2V0Q3VycmVudENv
bnRleHQobV9jb250ZXh0T2JqKSA9PSBrQ0dMTm9FcnJvcikKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworI2VsaWYgT1MoTElOVVgpCisgICAgaWYgKHNfZ2wtPmdldEN1cnJlbnRDb250ZXh0KCkg
IT0gbV9jb250ZXh0T2JqKQorICAgICAgICBpZiAoc19nbC0+bWFrZUN1cnJlbnQobV9wYnVmZmVy
LCBtX2NvbnRleHRPYmopKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisjZWxzZQorI2Vycm9y
IE11c3QgcG9ydCB0byB5b3VyIHBsYXRmb3JtCisjZW5kaWYKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK2ludCBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjp3aWR0aCgpCit7CisgICAg
cmV0dXJuIG1fY2FjaGVkV2lkdGg7Cit9CisKK2ludCBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1
bHRJbXBsOjpoZWlnaHQoKQoreworICAgIHJldHVybiBtX2NhY2hlZEhlaWdodDsKK30KKworaW50
IFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OnNpemVJbkJ5dGVzKGludCB0eXBlKQor
eworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgR0xfQllURToKKyAgICAgICAgcmV0dXJu
IHNpemVvZihHTGJ5dGUpOworICAgIGNhc2UgR0xfVU5TSUdORURfQllURToKKyAgICAgICAgcmV0
dXJuIHNpemVvZihHTHVieXRlKTsKKyAgICBjYXNlIEdMX1NIT1JUOgorICAgICAgICByZXR1cm4g
c2l6ZW9mKEdMc2hvcnQpOworICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlQ6CisgICAgICAgIHJl
dHVybiBzaXplb2YoR0x1c2hvcnQpOworICAgIGNhc2UgR0xfSU5UOgorICAgICAgICByZXR1cm4g
c2l6ZW9mKEdMaW50KTsKKyAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVDoKKyAgICAgICAgcmV0dXJu
IHNpemVvZihHTHVpbnQpOworICAgIGNhc2UgR0xfRkxPQVQ6CisgICAgICAgIHJldHVybiBzaXpl
b2YoR0xmbG9hdCk7CisgICAgfQorICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNyZWF0
ZVRleHR1cmVPYmplY3QoR0xlbnVtIHRhcmdldCkKK3sKKyAgICBHTHVpbnQgdGV4dHVyZSA9IDA7
CisgICAgZ2xHZW5UZXh0dXJlcygxLCAmdGV4dHVyZSk7CisgICAgZ2xCaW5kVGV4dHVyZSh0YXJn
ZXQsIHRleHR1cmUpOworICAgIGdsVGV4UGFyYW1ldGVyZih0YXJnZXQsIEdMX1RFWFRVUkVfTUlO
X0ZJTFRFUiwgR0xfTkVBUkVTVCk7CisgICAgZ2xUZXhQYXJhbWV0ZXJmKHRhcmdldCwgR0xfVEVY
VFVSRV9NQUdfRklMVEVSLCBHTF9ORUFSRVNUKTsKKyAgICByZXR1cm4gdGV4dHVyZTsKK30KKwor
dm9pZCBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpyZXNoYXBlKGludCB3aWR0aCwg
aW50IGhlaWdodCkKK3sKKyNpZmRlZiBSRU5ERVJfVE9fREVCVUdHSU5HX1dJTkRPVworICAgIFNl
dFdpbmRvd1BvcyhtX2NhbnZhc1dpbmRvdywgSFdORF9UT1AsIDAsIDAsIHdpZHRoLCBoZWlnaHQs
CisgICAgICAgICAgICAgICAgIFNXUF9OT01PVkUpOworICAgIFNob3dXaW5kb3cobV9jYW52YXNX
aW5kb3csIFNXX1NIT1cpOworI2VuZGlmCisKKyAgICBtX2NhY2hlZFdpZHRoID0gd2lkdGg7Cisg
ICAgbV9jYWNoZWRIZWlnaHQgPSBoZWlnaHQ7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisK
KyNpZm5kZWYgUkVOREVSX1RPX0RFQlVHR0lOR19XSU5ET1cKKyNpZmRlZiBVU0VfVEVYVFVSRV9S
RUNUQU5HTEVfRk9SX0ZSQU1FQlVGRkVSCisgICAgLy8gR0xfVEVYVFVSRV9SRUNUQU5HTEVfQVJC
IGlzIHRoZSBiZXN0IHN1cHBvcnRlZCByZW5kZXIgdGFyZ2V0IG9uIE1hYyBPUyBYCisgICAgR0xl
bnVtIHRhcmdldCA9IEdMX1RFWFRVUkVfUkVDVEFOR0xFX0FSQjsKKyNlbHNlCisgICAgR0xlbnVt
IHRhcmdldCA9IEdMX1RFWFRVUkVfMkQ7CisjZW5kaWYKKyAgICBpZiAoIW1fdGV4dHVyZSkgewor
ICAgICAgICAvLyBHZW5lcmF0ZSB0aGUgdGV4dHVyZSBvYmplY3QKKyAgICAgICAgbV90ZXh0dXJl
ID0gY3JlYXRlVGV4dHVyZU9iamVjdCh0YXJnZXQpOworICAgICAgICAvLyBHZW5lcmF0ZSB0aGUg
ZnJhbWVidWZmZXIgb2JqZWN0CisgICAgICAgIGdsR2VuRnJhbWVidWZmZXJzRVhUKDEsICZtX2Zi
byk7CisgICAgICAgIC8vIEdlbmVyYXRlIHRoZSBkZXB0aCBidWZmZXIKKyAgICAgICAgZ2xHZW5S
ZW5kZXJidWZmZXJzRVhUKDEsICZtX2RlcHRoQnVmZmVyKTsKKyAgICB9CisKKyAgICAvLyBSZWFs
bG9jYXRlIHRoZSBjb2xvciBhbmQgZGVwdGggYnVmZmVycworICAgIGdsQmluZFRleHR1cmUodGFy
Z2V0LCBtX3RleHR1cmUpOworICAgIGdsVGV4SW1hZ2UyRCh0YXJnZXQsIDAsIEdMX1JHQkE4LCB3
aWR0aCwgaGVpZ2h0LCAwLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCAwKTsKKyAgICBnbEJp
bmRUZXh0dXJlKHRhcmdldCwgMCk7CisKKyAgICBnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFN
RUJVRkZFUl9FWFQsIG1fZmJvKTsKKyAgICBtX2JvdW5kRkJPID0gbV9mYm87CisgICAgZ2xCaW5k
UmVuZGVyYnVmZmVyRVhUKEdMX1JFTkRFUkJVRkZFUl9FWFQsIG1fZGVwdGhCdWZmZXIpOworICAg
IGdsUmVuZGVyYnVmZmVyU3RvcmFnZUVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCBHTF9ERVBUSF9D
T01QT05FTlQsIHdpZHRoLCBoZWlnaHQpOworICAgIGdsQmluZFJlbmRlcmJ1ZmZlckVYVChHTF9S
RU5ERVJCVUZGRVJfRVhULCAwKTsKKworICAgIGdsRnJhbWVidWZmZXJUZXh0dXJlMkRFWFQoR0xf
RlJBTUVCVUZGRVJfRVhULCBHTF9DT0xPUl9BVFRBQ0hNRU5UMF9FWFQsIHRhcmdldCwgbV90ZXh0
dXJlLCAwKTsKKyAgICBnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVS
X0VYVCwgR0xfREVQVEhfQVRUQUNITUVOVF9FWFQsIEdMX1JFTkRFUkJVRkZFUl9FWFQsIG1fZGVw
dGhCdWZmZXIpOworICAgIEdMZW51bSBzdGF0dXMgPSBnbENoZWNrRnJhbWVidWZmZXJTdGF0dXNF
WFQoR0xfRlJBTUVCVUZGRVJfRVhUKTsKKyAgICBpZiAoc3RhdHVzICE9IEdMX0ZSQU1FQlVGRkVS
X0NPTVBMRVRFX0VYVCkgeworICAgICAgICBwcmludGYoIldlYkdyYXBoaWNzQ29udGV4dDNERGVm
YXVsdEltcGw6IGZyYW1lYnVmZmVyIHdhcyBpbmNvbXBsZXRlXG4iKTsKKworICAgICAgICAvLyBG
SVhNRTogY2xlYW51cC4KKyAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICB9CisjZW5kaWYg
Ly8gUkVOREVSX1RPX0RFQlVHR0lOR19XSU5ET1cKKworI2lmZGVmIEZMSVBfRlJBTUVCVUZGRVJf
VkVSVElDQUxMWQorICAgIGlmIChtX3NjYW5saW5lKSB7CisgICAgICAgIGRlbGV0ZVtdIG1fc2Nh
bmxpbmU7CisgICAgICAgIG1fc2NhbmxpbmUgPSAwOworICAgIH0KKyAgICBtX3NjYW5saW5lID0g
bmV3IHVuc2lnbmVkIGNoYXJbd2lkdGggKiA0XTsKKyNlbmRpZiAvLyBGTElQX0ZSQU1FQlVGRkVS
X1ZFUlRJQ0FMTFkKKworICAgIGdsQ2xlYXIoR0xfQ09MT1JfQlVGRkVSX0JJVCk7CisKK30KKwor
I2lmZGVmIEZMSVBfRlJBTUVCVUZGRVJfVkVSVElDQUxMWQordm9pZCBXZWJHcmFwaGljc0NvbnRl
eHQzRERlZmF1bHRJbXBsOjpmbGlwVmVydGljYWxseSh1bnNpZ25lZCBjaGFyKiBmcmFtZWJ1ZmZl
ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dW5zaWduZWQgaW50IHdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgaGVpZ2h0KQoreworICAgIHVuc2lnbmVkIGNo
YXIqIHNjYW5saW5lID0gbV9zY2FubGluZTsKKyAgICBpZiAoIXNjYW5saW5lKQorICAgICAgICBy
ZXR1cm47CisgICAgdW5zaWduZWQgaW50IHJvd0J5dGVzID0gd2lkdGggKiA0OworICAgIHVuc2ln
bmVkIGludCBjb3VudCA9IGhlaWdodCAvIDI7CisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7
IGkgPCBjb3VudDsgaSsrKSB7CisgICAgICAgIHVuc2lnbmVkIGNoYXIqIHJvd0EgPSBmcmFtZWJ1
ZmZlciArIGkgKiByb3dCeXRlczsKKyAgICAgICAgdW5zaWduZWQgY2hhciogcm93QiA9IGZyYW1l
YnVmZmVyICsgKGhlaWdodCAtIGkgLSAxKSAqIHJvd0J5dGVzOworICAgICAgICAvLyBGSVhNRTog
dGhpcyBpcyB3aGVyZSB0aGUgbXVsdGlwbGljYXRpb24gb2YgdGhlIGFscGhhCisgICAgICAgIC8v
IGNoYW5uZWwgaW50byB0aGUgY29sb3IgYnVmZmVyIHdpbGwgbmVlZCB0byBvY2N1ciBpZiB0aGUK
KyAgICAgICAgLy8gdXNlciBzcGVjaWZpZXMgdGhlICJwcmVtdWx0aXBseUFscGhhIiBmbGFnIGlu
IHRoZSBjb250ZXh0CisgICAgICAgIC8vIGNyZWF0aW9uIGF0dHJpYnV0ZXMuCisgICAgICAgIG1l
bWNweShzY2FubGluZSwgcm93Qiwgcm93Qnl0ZXMpOworICAgICAgICBtZW1jcHkocm93Qiwgcm93
QSwgcm93Qnl0ZXMpOworICAgICAgICBtZW1jcHkocm93QSwgc2NhbmxpbmUsIHJvd0J5dGVzKTsK
KyAgICB9Cit9CisjZW5kaWYKKwordm9pZCBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBs
OjpyZWFkQmFja0ZyYW1lYnVmZmVyKHVuc2lnbmVkIGNoYXIqIHBpeGVscykKK3sKKyAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKKworI2lmZGVmIFJFTkRFUl9UT19ERUJVR0dJTkdfV0lORE9XCisg
ICAgU3dhcEJ1ZmZlcnMobV9jYW52YXNEQyk7CisjZWxzZQorICAgIC8vIEVhcmxpZXIgdmVyc2lv
bnMgb2YgdGhpcyBjb2RlIHVzZWQgdGhlIEdQVSB0byBmbGlwIHRoZQorICAgIC8vIGZyYW1lYnVm
ZmVyIHZlcnRpY2FsbHkgYmVmb3JlIHJlYWRpbmcgaXQgYmFjayBmb3IgY29tcG9zaXRpbmcKKyAg
ICAvLyB2aWEgc29mdHdhcmUuIFRoaXMgY29kZSB3YXMgcXVpdGUgY29tcGxpY2F0ZWQsIHVzZWQg
YSBsb3Qgb2YKKyAgICAvLyBHUFUgbWVtb3J5LCBhbmQgZGlkbid0IHByb3ZpZGUgYW4gb2J2aW91
cyBzcGVlZHVwLiBTaW5jZSB0aGlzCisgICAgLy8gdmVydGljYWwgZmxpcCBpcyBvbmx5IGEgdGVt
cG9yYXJ5IHNvbHV0aW9uIGFueXdheSB1bnRpbCBDaHJvbWUKKyAgICAvLyBpcyBmdWxseSBHUFUg
Y29tcG9zaXRlZCwgaXQgd2Fzbid0IHdvcnRoIHRoZSBjb21wbGV4aXR5LgorCisgICAgYm9vbCBt
dXN0UmVzdG9yZUZCTyA9IChtX2JvdW5kRkJPICE9IG1fZmJvKTsKKyAgICBpZiAobXVzdFJlc3Rv
cmVGQk8pCisgICAgICAgIGdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwg
bV9mYm8pOworI2lmIFBMQVRGT1JNKFNLSUEpCisgICAgZ2xSZWFkUGl4ZWxzKDAsIDAsIG1fY2Fj
aGVkV2lkdGgsIG1fY2FjaGVkSGVpZ2h0LCBHTF9CR1JBLCBHTF9VTlNJR05FRF9CWVRFLCBwaXhl
bHMpOworI2VsaWYgUExBVEZPUk0oQ0cpCisgICAgZ2xSZWFkUGl4ZWxzKDAsIDAsIG1fY2FjaGVk
V2lkdGgsIG1fY2FjaGVkSGVpZ2h0LCBHTF9CR1JBLCBHTF9VTlNJR05FRF9JTlRfOF84XzhfOF9S
RVYsIHBpeGVscyk7CisjZWxzZQorI2Vycm9yIE11c3QgcG9ydCB0byB5b3VyIHBsYXRmb3JtCisj
ZW5kaWYKKworICAgIGlmIChtdXN0UmVzdG9yZUZCTykKKyAgICAgICAgZ2xCaW5kRnJhbWVidWZm
ZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX2JvdW5kRkJPKTsKKworI2lmZGVmIEZMSVBfRlJB
TUVCVUZGRVJfVkVSVElDQUxMWQorICAgIGlmIChwaXhlbHMpCisgICAgICAgIGZsaXBWZXJ0aWNh
bGx5KHBpeGVscywgbV9jYWNoZWRXaWR0aCwgbV9jYWNoZWRIZWlnaHQpOworI2VuZGlmCisKKyNl
bmRpZiAvLyBSRU5ERVJfVE9fREVCVUdHSU5HX1dJTkRPVworfQorCit2b2lkIFdlYkdyYXBoaWNz
Q29udGV4dDNERGVmYXVsdEltcGw6OnN5bnRoZXNpemVHTEVycm9yKHVuc2lnbmVkIGxvbmcgZXJy
b3IpCit7CisgICAgbV9zeW50aGV0aWNFcnJvcnMuYWRkKGVycm9yKTsKK30KKworLy8gSGVscGVy
IG1hY3JvcyB0byByZWR1Y2UgdGhlIGFtb3VudCBvZiBjb2RlLgorCisjZGVmaW5lIERFTEVHQVRF
X1RPX0dMKG5hbWUsIGdsbmFtZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAordm9pZCBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpuYW1lKCkgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK3sgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGdsIyNnbG5hbWUoKTsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30KKwor
I2RlZmluZSBERUxFR0FURV9UT19HTF8xKG5hbWUsIGdsbmFtZSwgdDEpICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKK3ZvaWQgV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0
SW1wbDo6bmFtZSh0MSBhMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBnbCMjZ2xuYW1l
KGExKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCit9CisKKyNkZWZpbmUgREVMRUdBVEVfVE9fR0xfMVIobmFtZSwgZ2xuYW1lLCB0
MSwgcnQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCitydCBXZWJHcmFwaGljc0Nv
bnRleHQzRERlZmF1bHRJbXBsOjpuYW1lKHQxIGExKSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAoreyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
CisgICAgcmV0dXJuIGdsIyNnbG5hbWUoYTEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAorfQorCisjZGVmaW5lIERFTEVHQVRFX1RPX0dMXzIo
bmFtZSwgZ2xuYW1lLCB0MSwgdDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor
dm9pZCBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpuYW1lKHQxIGExLCB0MiBhMikg
ICAgICAgICAgICAgICAgICAgICAgIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgIGdsIyNnbG5hbWUoYTEsIGEyKTsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30KKworI2RlZmluZSBE
RUxFR0FURV9UT19HTF8yUihuYW1lLCBnbG5hbWUsIHQxLCB0MiwgcnQpICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKK3J0IFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6Om5hbWUo
dDEgYTEsIHQyIGEyKSAgICAgICAgICAgICAgICAgICAgICAgICBcCit7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICByZXR1cm4gZ2wjI2dsbmFtZShh
MSwgYTIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
Cit9CisKKyNkZWZpbmUgREVMRUdBVEVfVE9fR0xfMyhuYW1lLCBnbG5hbWUsIHQxLCB0MiwgdDMp
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit2b2lkIFdlYkdyYXBoaWNzQ29udGV4dDNE
RGVmYXVsdEltcGw6Om5hbWUodDEgYTEsIHQyIGEyLCB0MyBhMykgICAgICAgICAgICAgICAgXAor
eyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZ2wj
I2dsbmFtZShhMSwgYTIsIGEzKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorfQorCisjZGVmaW5lIERFTEVHQVRFX1RPX0dMXzQobmFtZSwgZ2xu
YW1lLCB0MSwgdDIsIHQzLCB0NCkgICAgICAgICAgICAgICAgICAgICAgICAgXAordm9pZCBXZWJH
cmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpuYW1lKHQxIGExLCB0MiBhMiwgdDMgYTMsIHQ0
IGE0KSAgICAgICAgIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorICAgIGdsIyNnbG5hbWUoYTEsIGEyLCBhMywgYTQpOyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30KKworI2RlZmluZSBERUxFR0FURV9U
T19HTF81KG5hbWUsIGdsbmFtZSwgdDEsIHQyLCB0MywgdDQsIHQ1KSAgICAgICAgICAgICAgICAg
ICAgIFwKK3ZvaWQgV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6bmFtZSh0MSBhMSwg
dDIgYTIsIHQzIGEzLCB0NCBhNCwgdDUgYTUpICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBnbCMjZ2xuYW1lKGExLCBhMiwgYTMsIGE0LCBh
NSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9CisKKyNk
ZWZpbmUgREVMRUdBVEVfVE9fR0xfNihuYW1lLCBnbG5hbWUsIHQxLCB0MiwgdDMsIHQ0LCB0NSwg
dDYpICAgICAgICAgICAgICAgICBcCit2b2lkIFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdElt
cGw6Om5hbWUodDEgYTEsIHQyIGEyLCB0MyBhMywgdDQgYTQsIHQ1IGE1LCB0NiBhNikgXAoreyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZ2wjI2ds
bmFtZShhMSwgYTIsIGEzLCBhNCwgYTUsIGE2KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAorfQorCisjZGVmaW5lIERFTEVHQVRFX1RPX0dMXzcobmFtZSwgZ2xuYW1l
LCB0MSwgdDIsIHQzLCB0NCwgdDUsIHQ2LCB0NykgICAgICAgICAgICAgXAordm9pZCBXZWJHcmFw
aGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpuYW1lKHQxIGExLCB0MiBhMiwgdDMgYTMsIHQ0IGE0
LCB0NSBhNSwgdDYgYTYsIHQ3IGE3KSBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKyAgICBnbCMjZ2xuYW1lKGExLCBhMiwgYTMsIGE0LCBhNSwgYTYs
IGE3KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9CisKKyNkZWZpbmUg
REVMRUdBVEVfVE9fR0xfOChuYW1lLCBnbG5hbWUsIHQxLCB0MiwgdDMsIHQ0LCB0NSwgdDYsIHQ3
LCB0OCkgICAgICAgICBcCit2b2lkIFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6Om5h
bWUodDEgYTEsIHQyIGEyLCB0MyBhMywgdDQgYTQsIHQ1IGE1LCB0NiBhNiwgdDcgYTcsIHQ4IGE4
KSBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg
ICBnbCMjZ2xuYW1lKGExLCBhMiwgYTMsIGE0LCBhNSwgYTYsIGE3LCBhOCk7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCit9CisKKyNkZWZpbmUgREVMRUdBVEVfVE9fR0xfOShuYW1l
LCBnbG5hbWUsIHQxLCB0MiwgdDMsIHQ0LCB0NSwgdDYsIHQ3LCB0OCwgdDkpICAgICBcCit2b2lk
IFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6Om5hbWUodDEgYTEsIHQyIGEyLCB0MyBh
MywgdDQgYTQsIHQ1IGE1LCB0NiBhNiwgdDcgYTcsIHQ4IGE4LCB0OSBhOSkgXAoreyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZ2wjI2dsbmFtZShh
MSwgYTIsIGEzLCBhNCwgYTUsIGE2LCBhNywgYTgsIGE5KTsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorfQorCit2b2lkIFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OmFjdGl2
ZVRleHR1cmUodW5zaWduZWQgbG9uZyB0ZXh0dXJlKQoreworICAgIC8vIEZJWE1FOiBxdWVyeSBu
dW1iZXIgb2YgdGV4dHVyZXMgYXZhaWxhYmxlLgorICAgIGlmICh0ZXh0dXJlIDwgR0xfVEVYVFVS
RTAgfHwgdGV4dHVyZSA+IEdMX1RFWFRVUkUwKzMyKQorICAgICAgICAvLyBGSVhNRTogcmFpc2Ug
ZXhjZXB0aW9uLgorICAgICAgICByZXR1cm47CisKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
KyAgICBnbEFjdGl2ZVRleHR1cmUodGV4dHVyZSk7Cit9CisKK0RFTEVHQVRFX1RPX0dMXzIoYXR0
YWNoU2hhZGVyLCBBdHRhY2hTaGFkZXIsIFdlYkdMSWQsIFdlYkdMSWQpCisKK0RFTEVHQVRFX1RP
X0dMXzMoYmluZEF0dHJpYkxvY2F0aW9uLCBCaW5kQXR0cmliTG9jYXRpb24sIFdlYkdMSWQsIHVu
c2lnbmVkIGxvbmcsIGNvbnN0IGNoYXIqKQorCit2b2lkIFdlYkdyYXBoaWNzQ29udGV4dDNERGVm
YXVsdEltcGw6OmJpbmRCdWZmZXIodW5zaWduZWQgbG9uZyB0YXJnZXQsIFdlYkdMSWQgYnVmZmVy
KQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICh0YXJnZXQgPT0gR0xfQVJS
QVlfQlVGRkVSKQorICAgICAgICBtX2JvdW5kQXJyYXlCdWZmZXIgPSBidWZmZXI7CisgICAgZ2xC
aW5kQnVmZmVyKHRhcmdldCwgYnVmZmVyKTsKK30KKwordm9pZCBXZWJHcmFwaGljc0NvbnRleHQz
RERlZmF1bHRJbXBsOjpiaW5kRnJhbWVidWZmZXIodW5zaWduZWQgbG9uZyB0YXJnZXQsIFdlYkdM
SWQgZnJhbWVidWZmZXIpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFm
cmFtZWJ1ZmZlcikKKyAgICAgICAgZnJhbWVidWZmZXIgPSBtX2ZibzsKKyAgICBnbEJpbmRGcmFt
ZWJ1ZmZlckVYVCh0YXJnZXQsIGZyYW1lYnVmZmVyKTsKKyAgICBtX2JvdW5kRkJPID0gZnJhbWVi
dWZmZXI7Cit9CisKK0RFTEVHQVRFX1RPX0dMXzIoYmluZFJlbmRlcmJ1ZmZlciwgQmluZFJlbmRl
cmJ1ZmZlckVYVCwgdW5zaWduZWQgbG9uZywgV2ViR0xJZCkKKworREVMRUdBVEVfVE9fR0xfMihi
aW5kVGV4dHVyZSwgQmluZFRleHR1cmUsIHVuc2lnbmVkIGxvbmcsIFdlYkdMSWQpCisKK0RFTEVH
QVRFX1RPX0dMXzQoYmxlbmRDb2xvciwgQmxlbmRDb2xvciwgZG91YmxlLCBkb3VibGUsIGRvdWJs
ZSwgZG91YmxlKQorCitERUxFR0FURV9UT19HTF8xKGJsZW5kRXF1YXRpb24sIEJsZW5kRXF1YXRp
b24sIHVuc2lnbmVkIGxvbmcpCisKK0RFTEVHQVRFX1RPX0dMXzIoYmxlbmRFcXVhdGlvblNlcGFy
YXRlLCBCbGVuZEVxdWF0aW9uU2VwYXJhdGUsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcp
CisKK0RFTEVHQVRFX1RPX0dMXzIoYmxlbmRGdW5jLCBCbGVuZEZ1bmMsIHVuc2lnbmVkIGxvbmcs
IHVuc2lnbmVkIGxvbmcpCisKK0RFTEVHQVRFX1RPX0dMXzQoYmxlbmRGdW5jU2VwYXJhdGUsIEJs
ZW5kRnVuY1NlcGFyYXRlLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBs
b25nLCB1bnNpZ25lZCBsb25nKQorCitERUxFR0FURV9UT19HTF80KGJ1ZmZlckRhdGEsIEJ1ZmZl
ckRhdGEsIHVuc2lnbmVkIGxvbmcsIGludCwgY29uc3Qgdm9pZCosIHVuc2lnbmVkIGxvbmcpCisK
K0RFTEVHQVRFX1RPX0dMXzQoYnVmZmVyU3ViRGF0YSwgQnVmZmVyU3ViRGF0YSwgdW5zaWduZWQg
bG9uZywgbG9uZywgaW50LCBjb25zdCB2b2lkKikKKworREVMRUdBVEVfVE9fR0xfMVIoY2hlY2tG
cmFtZWJ1ZmZlclN0YXR1cywgQ2hlY2tGcmFtZWJ1ZmZlclN0YXR1c0VYVCwgdW5zaWduZWQgbG9u
ZywgdW5zaWduZWQgbG9uZykKKworREVMRUdBVEVfVE9fR0xfMShjbGVhciwgQ2xlYXIsIHVuc2ln
bmVkIGxvbmcpCisKK0RFTEVHQVRFX1RPX0dMXzQoY2xlYXJDb2xvciwgQ2xlYXJDb2xvciwgZG91
YmxlLCBkb3VibGUsIGRvdWJsZSwgZG91YmxlKQorCitERUxFR0FURV9UT19HTF8xKGNsZWFyRGVw
dGgsIENsZWFyRGVwdGgsIGRvdWJsZSkKKworREVMRUdBVEVfVE9fR0xfMShjbGVhclN0ZW5jaWws
IENsZWFyU3RlbmNpbCwgbG9uZykKKworREVMRUdBVEVfVE9fR0xfNChjb2xvck1hc2ssIENvbG9y
TWFzaywgYm9vbCwgYm9vbCwgYm9vbCwgYm9vbCkKKworREVMRUdBVEVfVE9fR0xfMShjb21waWxl
U2hhZGVyLCBDb21waWxlU2hhZGVyLCBXZWJHTElkKQorCitERUxFR0FURV9UT19HTF84KGNvcHlU
ZXhJbWFnZTJELCBDb3B5VGV4SW1hZ2UyRCwgdW5zaWduZWQgbG9uZywgbG9uZywgdW5zaWduZWQg
bG9uZywgbG9uZywgbG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgbG9uZykKKwor
REVMRUdBVEVfVE9fR0xfOChjb3B5VGV4U3ViSW1hZ2UyRCwgQ29weVRleFN1YkltYWdlMkQsIHVu
c2lnbmVkIGxvbmcsIGxvbmcsIGxvbmcsIGxvbmcsIGxvbmcsIGxvbmcsIHVuc2lnbmVkIGxvbmcs
IHVuc2lnbmVkIGxvbmcpCisKK0RFTEVHQVRFX1RPX0dMXzEoY3VsbEZhY2UsIEN1bGxGYWNlLCB1
bnNpZ25lZCBsb25nKQorCitERUxFR0FURV9UT19HTF8xKGRlcHRoRnVuYywgRGVwdGhGdW5jLCB1
bnNpZ25lZCBsb25nKQorCitERUxFR0FURV9UT19HTF8xKGRlcHRoTWFzaywgRGVwdGhNYXNrLCBi
b29sKQorCitERUxFR0FURV9UT19HTF8yKGRlcHRoUmFuZ2UsIERlcHRoUmFuZ2UsIGRvdWJsZSwg
ZG91YmxlKQorCitERUxFR0FURV9UT19HTF8yKGRldGFjaFNoYWRlciwgRGV0YWNoU2hhZGVyLCBX
ZWJHTElkLCBXZWJHTElkKQorCitERUxFR0FURV9UT19HTF8xKGRpc2FibGUsIERpc2FibGUsIHVu
c2lnbmVkIGxvbmcpCisKK3ZvaWQgV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6ZGlz
YWJsZVZlcnRleEF0dHJpYkFycmF5KHVuc2lnbmVkIGxvbmcgaW5kZXgpCit7CisgICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgaWYgKGluZGV4IDwgTnVtVHJhY2tlZFBvaW50ZXJTdGF0ZXMp
CisgICAgICAgIG1fdmVydGV4QXR0cmliUG9pbnRlclN0YXRlW2luZGV4XS5lbmFibGVkID0gZmFs
c2U7CisgICAgZ2xEaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoaW5kZXgpOworfQorCitERUxFR0FU
RV9UT19HTF8zKGRyYXdBcnJheXMsIERyYXdBcnJheXMsIHVuc2lnbmVkIGxvbmcsIGxvbmcsIGxv
bmcpCisKK3ZvaWQgV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6ZHJhd0VsZW1lbnRz
KHVuc2lnbmVkIGxvbmcgbW9kZSwgdW5zaWduZWQgbG9uZyBjb3VudCwgdW5zaWduZWQgbG9uZyB0
eXBlLCBsb25nIG9mZnNldCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBnbERy
YXdFbGVtZW50cyhtb2RlLCBjb3VudCwgdHlwZSwKKyAgICAgICAgICAgICAgICAgICByZWludGVy
cHJldF9jYXN0PHZvaWQqPihzdGF0aWNfY2FzdDxpbnRwdHJfdD4ob2Zmc2V0KSkpOworfQorCitE
RUxFR0FURV9UT19HTF8xKGVuYWJsZSwgRW5hYmxlLCB1bnNpZ25lZCBsb25nKQorCit2b2lkIFdl
YkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHVu
c2lnbmVkIGxvbmcgaW5kZXgpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYg
KGluZGV4IDwgTnVtVHJhY2tlZFBvaW50ZXJTdGF0ZXMpCisgICAgICAgIG1fdmVydGV4QXR0cmli
UG9pbnRlclN0YXRlW2luZGV4XS5lbmFibGVkID0gdHJ1ZTsKKyAgICBnbEVuYWJsZVZlcnRleEF0
dHJpYkFycmF5KGluZGV4KTsKK30KKworREVMRUdBVEVfVE9fR0woZmluaXNoLCBGaW5pc2gpCisK
K0RFTEVHQVRFX1RPX0dMKGZsdXNoLCBGbHVzaCkKKworREVMRUdBVEVfVE9fR0xfNChmcmFtZWJ1
ZmZlclJlbmRlcmJ1ZmZlciwgRnJhbWVidWZmZXJSZW5kZXJidWZmZXJFWFQsIHVuc2lnbmVkIGxv
bmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIFdlYkdMSWQpCisKK0RFTEVHQVRFX1RP
X0dMXzUoZnJhbWVidWZmZXJUZXh0dXJlMkQsIEZyYW1lYnVmZmVyVGV4dHVyZTJERVhULCB1bnNp
Z25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCBXZWJHTElkLCBsb25nKQor
CitERUxFR0FURV9UT19HTF8xKGZyb250RmFjZSwgRnJvbnRGYWNlLCB1bnNpZ25lZCBsb25nKQor
Cit2b2lkIFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OmdlbmVyYXRlTWlwbWFwKHVu
c2lnbmVkIGxvbmcgdGFyZ2V0KQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlm
IChnbEdlbmVyYXRlTWlwbWFwRVhUKQorICAgICAgICBnbEdlbmVyYXRlTWlwbWFwRVhUKHRhcmdl
dCk7CisgICAgLy8gRklYTUU6IHByb3ZpZGUgYWx0ZXJuYXRpdmUgY29kZSBwYXRoPyBUaGlzIHdp
bGwgYmUgdW5wbGVhc2FudAorICAgIC8vIHRvIGltcGxlbWVudCBpZiBnbEdlbmVyYXRlTWlwbWFw
RVhUIGlzIG5vdCBhdmFpbGFibGUgLS0gaXQgd2lsbAorICAgIC8vIHJlcXVpcmUgYSB0ZXh0dXJl
IHJlYWRiYWNrIGFuZCByZS11cGxvYWQuCit9CisKK2Jvb2wgV2ViR3JhcGhpY3NDb250ZXh0M0RE
ZWZhdWx0SW1wbDo6Z2V0QWN0aXZlQXR0cmliKFdlYkdMSWQgcHJvZ3JhbSwgdW5zaWduZWQgbG9u
ZyBpbmRleCwgQWN0aXZlSW5mbyYgaW5mbykKK3sKKyAgICBpZiAoIXByb2dyYW0pIHsKKyAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisgICAgR0xpbnQgbWF4TmFtZUxlbmd0aCA9IC0xOworICAgIGdsR2V0UHJv
Z3JhbWl2KHByb2dyYW0sIEdMX0FDVElWRV9BVFRSSUJVVEVfTUFYX0xFTkdUSCwgJm1heE5hbWVM
ZW5ndGgpOworICAgIGlmIChtYXhOYW1lTGVuZ3RoIDwgMCkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIEdMY2hhciogbmFtZSA9IDA7CisgICAgaWYgKCF0cnlGYXN0TWFsbG9jKG1heE5hbWVM
ZW5ndGggKiBzaXplb2YoR0xjaGFyKSkuZ2V0VmFsdWUobmFtZSkpIHsKKyAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisgICAgR0xzaXplaSBsZW5ndGggPSAwOworICAgIEdMaW50IHNpemUgPSAtMTsKKyAgICBH
TGVudW0gdHlwZSA9IDA7CisgICAgZ2xHZXRBY3RpdmVBdHRyaWIocHJvZ3JhbSwgaW5kZXgsIG1h
eE5hbWVMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgJmxlbmd0aCwgJnNpemUsICZ0eXBl
LCBuYW1lKTsKKyAgICBpZiAoc2l6ZSA8IDApIHsKKyAgICAgICAgZmFzdEZyZWUobmFtZSk7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgaW5mby5uYW1lID0gV2ViU3RyaW5nOjpm
cm9tVVRGOChuYW1lLCBsZW5ndGgpOworICAgIGluZm8udHlwZSA9IHR5cGU7CisgICAgaW5mby5z
aXplID0gc2l6ZTsKKyAgICBmYXN0RnJlZShuYW1lKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
Ym9vbCBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpnZXRBY3RpdmVVbmlmb3JtKFdl
YkdMSWQgcHJvZ3JhbSwgdW5zaWduZWQgbG9uZyBpbmRleCwgQWN0aXZlSW5mbyYgaW5mbykKK3sK
KyAgICBHTGludCBtYXhOYW1lTGVuZ3RoID0gLTE7CisgICAgZ2xHZXRQcm9ncmFtaXYocHJvZ3Jh
bSwgR0xfQUNUSVZFX1VOSUZPUk1fTUFYX0xFTkdUSCwgJm1heE5hbWVMZW5ndGgpOworICAgIGlm
IChtYXhOYW1lTGVuZ3RoIDwgMCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIEdMY2hhciog
bmFtZSA9IDA7CisgICAgaWYgKCF0cnlGYXN0TWFsbG9jKG1heE5hbWVMZW5ndGggKiBzaXplb2Yo
R0xjaGFyKSkuZ2V0VmFsdWUobmFtZSkpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR0xf
T1VUX09GX01FTU9SWSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgR0xzaXpl
aSBsZW5ndGggPSAwOworICAgIEdMaW50IHNpemUgPSAtMTsKKyAgICBHTGVudW0gdHlwZSA9IDA7
CisgICAgZ2xHZXRBY3RpdmVVbmlmb3JtKHByb2dyYW0sIGluZGV4LCBtYXhOYW1lTGVuZ3RoLAor
ICAgICAgICAgICAgICAgICAgICAgICAmbGVuZ3RoLCAmc2l6ZSwgJnR5cGUsIG5hbWUpOworICAg
IGlmIChzaXplIDwgMCkgeworICAgICAgICBmYXN0RnJlZShuYW1lKTsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKyAgICBpbmZvLm5hbWUgPSBXZWJTdHJpbmc6OmZyb21VVEY4KG5hbWUs
IGxlbmd0aCk7CisgICAgaW5mby50eXBlID0gdHlwZTsKKyAgICBpbmZvLnNpemUgPSBzaXplOwor
ICAgIGZhc3RGcmVlKG5hbWUpOworICAgIHJldHVybiB0cnVlOworfQorCitERUxFR0FURV9UT19H
TF8yUihnZXRBdHRyaWJMb2NhdGlvbiwgR2V0QXR0cmliTG9jYXRpb24sIFdlYkdMSWQsIGNvbnN0
IGNoYXIqLCBpbnQpCisKK0RFTEVHQVRFX1RPX0dMXzIoZ2V0Qm9vbGVhbnYsIEdldEJvb2xlYW52
LCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBjaGFyKikKKworREVMRUdBVEVfVE9fR0xfMyhnZXRC
dWZmZXJQYXJhbWV0ZXJpdiwgR2V0QnVmZmVyUGFyYW1ldGVyaXYsIHVuc2lnbmVkIGxvbmcsIHVu
c2lnbmVkIGxvbmcsIGludCopCisKK1dlYkdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIFdl
YkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OmdldENvbnRleHRBdHRyaWJ1dGVzKCkKK3sK
KyAgICByZXR1cm4gbV9hdHRyaWJ1dGVzOworfQorCit1bnNpZ25lZCBsb25nIFdlYkdyYXBoaWNz
Q29udGV4dDNERGVmYXVsdEltcGw6OmdldEVycm9yKCkKK3sKKyAgICBpZiAobV9zeW50aGV0aWNF
cnJvcnMuc2l6ZSgpID4gMCkgeworICAgICAgICBMaXN0SGFzaFNldDx1bnNpZ25lZCBsb25nPjo6
aXRlcmF0b3IgaXRlciA9IG1fc3ludGhldGljRXJyb3JzLmJlZ2luKCk7CisgICAgICAgIHVuc2ln
bmVkIGxvbmcgZXJyID0gKml0ZXI7CisgICAgICAgIG1fc3ludGhldGljRXJyb3JzLnJlbW92ZShp
dGVyKTsKKyAgICAgICAgcmV0dXJuIGVycjsKKyAgICB9CisKKyAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKKyAgICByZXR1cm4gZ2xHZXRFcnJvcigpOworfQorCitERUxFR0FURV9UT19HTF8yKGdl
dEZsb2F0diwgR2V0RmxvYXR2LCB1bnNpZ25lZCBsb25nLCBmbG9hdCopCisKK0RFTEVHQVRFX1RP
X0dMXzQoZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYsIEdldEZyYW1lYnVmZmVy
QXR0YWNobWVudFBhcmFtZXRlcml2RVhULCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCB1
bnNpZ25lZCBsb25nLCBpbnQqKQorCitERUxFR0FURV9UT19HTF8yKGdldEludGVnZXJ2LCBHZXRJ
bnRlZ2VydiwgdW5zaWduZWQgbG9uZywgaW50KikKKworREVMRUdBVEVfVE9fR0xfMyhnZXRQcm9n
cmFtaXYsIEdldFByb2dyYW1pdiwgV2ViR0xJZCwgdW5zaWduZWQgbG9uZywgaW50KikKKworV2Vi
U3RyaW5nIFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OmdldFByb2dyYW1JbmZvTG9n
KFdlYkdMSWQgcHJvZ3JhbSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBHTGlu
dCBsb2dMZW5ndGg7CisgICAgZ2xHZXRQcm9ncmFtaXYocHJvZ3JhbSwgR0xfSU5GT19MT0dfTEVO
R1RILCAmbG9nTGVuZ3RoKTsKKyAgICBpZiAoIWxvZ0xlbmd0aCkKKyAgICAgICAgcmV0dXJuIFdl
YlN0cmluZygpOworICAgIEdMY2hhciogbG9nID0gMDsKKyAgICBpZiAoIXRyeUZhc3RNYWxsb2Mo
bG9nTGVuZ3RoICogc2l6ZW9mKEdMY2hhcikpLmdldFZhbHVlKGxvZykpCisgICAgICAgIHJldHVy
biBXZWJTdHJpbmcoKTsKKyAgICBHTHNpemVpIHJldHVybmVkTG9nTGVuZ3RoOworICAgIGdsR2V0
UHJvZ3JhbUluZm9Mb2cocHJvZ3JhbSwgbG9nTGVuZ3RoLCAmcmV0dXJuZWRMb2dMZW5ndGgsIGxv
Zyk7CisgICAgQVNTRVJUKGxvZ0xlbmd0aCA9PSByZXR1cm5lZExvZ0xlbmd0aCArIDEpOworICAg
IFdlYlN0cmluZyByZXMgPSBXZWJTdHJpbmc6OmZyb21VVEY4KGxvZywgcmV0dXJuZWRMb2dMZW5n
dGgpOworICAgIGZhc3RGcmVlKGxvZyk7CisgICAgcmV0dXJuIHJlczsKK30KKworREVMRUdBVEVf
VE9fR0xfMyhnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdiwgR2V0UmVuZGVyYnVmZmVyUGFyYW1l
dGVyaXZFWFQsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIGludCopCisKK0RFTEVHQVRF
X1RPX0dMXzMoZ2V0U2hhZGVyaXYsIEdldFNoYWRlcml2LCBXZWJHTElkLCB1bnNpZ25lZCBsb25n
LCBpbnQqKQorCitXZWJTdHJpbmcgV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6Z2V0
U2hhZGVySW5mb0xvZyhXZWJHTElkIHNoYWRlcikKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICBHTGludCBsb2dMZW5ndGg7CisgICAgZ2xHZXRTaGFkZXJpdihzaGFkZXIsIEdMX0lO
Rk9fTE9HX0xFTkdUSCwgJmxvZ0xlbmd0aCk7CisgICAgaWYgKCFsb2dMZW5ndGgpCisgICAgICAg
IHJldHVybiBXZWJTdHJpbmcoKTsKKyAgICBHTGNoYXIqIGxvZyA9IDA7CisgICAgaWYgKCF0cnlG
YXN0TWFsbG9jKGxvZ0xlbmd0aCAqIHNpemVvZihHTGNoYXIpKS5nZXRWYWx1ZShsb2cpKQorICAg
ICAgICByZXR1cm4gV2ViU3RyaW5nKCk7CisgICAgR0xzaXplaSByZXR1cm5lZExvZ0xlbmd0aDsK
KyAgICBnbEdldFNoYWRlckluZm9Mb2coc2hhZGVyLCBsb2dMZW5ndGgsICZyZXR1cm5lZExvZ0xl
bmd0aCwgbG9nKTsKKyAgICBBU1NFUlQobG9nTGVuZ3RoID09IHJldHVybmVkTG9nTGVuZ3RoICsg
MSk7CisgICAgV2ViU3RyaW5nIHJlcyA9IFdlYlN0cmluZzo6ZnJvbVVURjgobG9nLCByZXR1cm5l
ZExvZ0xlbmd0aCk7CisgICAgZmFzdEZyZWUobG9nKTsKKyAgICByZXR1cm4gcmVzOworfQorCitX
ZWJTdHJpbmcgV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6Z2V0U2hhZGVyU291cmNl
KFdlYkdMSWQgc2hhZGVyKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIEdMaW50
IGxvZ0xlbmd0aDsKKyAgICBnbEdldFNoYWRlcml2KHNoYWRlciwgR0xfU0hBREVSX1NPVVJDRV9M
RU5HVEgsICZsb2dMZW5ndGgpOworICAgIGlmICghbG9nTGVuZ3RoKQorICAgICAgICByZXR1cm4g
V2ViU3RyaW5nKCk7CisgICAgR0xjaGFyKiBsb2cgPSAwOworICAgIGlmICghdHJ5RmFzdE1hbGxv
Yyhsb2dMZW5ndGggKiBzaXplb2YoR0xjaGFyKSkuZ2V0VmFsdWUobG9nKSkKKyAgICAgICAgcmV0
dXJuIFdlYlN0cmluZygpOworICAgIEdMc2l6ZWkgcmV0dXJuZWRMb2dMZW5ndGg7CisgICAgZ2xH
ZXRTaGFkZXJTb3VyY2Uoc2hhZGVyLCBsb2dMZW5ndGgsICZyZXR1cm5lZExvZ0xlbmd0aCwgbG9n
KTsKKyAgICBBU1NFUlQobG9nTGVuZ3RoID09IHJldHVybmVkTG9nTGVuZ3RoICsgMSk7CisgICAg
V2ViU3RyaW5nIHJlcyA9IFdlYlN0cmluZzo6ZnJvbVVURjgobG9nLCByZXR1cm5lZExvZ0xlbmd0
aCk7CisgICAgZmFzdEZyZWUobG9nKTsKKyAgICByZXR1cm4gcmVzOworfQorCitXZWJTdHJpbmcg
V2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6Z2V0U3RyaW5nKHVuc2lnbmVkIGxvbmcg
bmFtZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICByZXR1cm4gV2ViU3RyaW5n
Ojpmcm9tVVRGOChyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihnbEdldFN0cmluZyhuYW1l
KSkpOworfQorCitERUxFR0FURV9UT19HTF8zKGdldFRleFBhcmFtZXRlcmZ2LCBHZXRUZXhQYXJh
bWV0ZXJmdiwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgZmxvYXQqKQorCitERUxFR0FU
RV9UT19HTF8zKGdldFRleFBhcmFtZXRlcml2LCBHZXRUZXhQYXJhbWV0ZXJpdiwgdW5zaWduZWQg
bG9uZywgdW5zaWduZWQgbG9uZywgaW50KikKKworREVMRUdBVEVfVE9fR0xfMyhnZXRVbmlmb3Jt
ZnYsIEdldFVuaWZvcm1mdiwgV2ViR0xJZCwgbG9uZywgZmxvYXQqKQorCitERUxFR0FURV9UT19H
TF8zKGdldFVuaWZvcm1pdiwgR2V0VW5pZm9ybWl2LCBXZWJHTElkLCBsb25nLCBpbnQqKQorCitE
RUxFR0FURV9UT19HTF8yUihnZXRVbmlmb3JtTG9jYXRpb24sIEdldFVuaWZvcm1Mb2NhdGlvbiwg
V2ViR0xJZCwgY29uc3QgY2hhciosIGxvbmcpCisKK0RFTEVHQVRFX1RPX0dMXzMoZ2V0VmVydGV4
QXR0cmliZnYsIEdldFZlcnRleEF0dHJpYmZ2LCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25n
LCBmbG9hdCopCisKK0RFTEVHQVRFX1RPX0dMXzMoZ2V0VmVydGV4QXR0cmliaXYsIEdldFZlcnRl
eEF0dHJpYml2LCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCBpbnQqKQorCitsb25nIFdl
YkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OmdldFZlcnRleEF0dHJpYk9mZnNldCh1bnNp
Z25lZCBsb25nIGluZGV4LCB1bnNpZ25lZCBsb25nIHBuYW1lKQoreworICAgIC8vIEZJWE1FOiBp
bXBsZW1lbnQuCisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KKworREVM
RUdBVEVfVE9fR0xfMihoaW50LCBIaW50LCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKQor
CitERUxFR0FURV9UT19HTF8xUihpc0J1ZmZlciwgSXNCdWZmZXIsIFdlYkdMSWQsIGJvb2wpCisK
K0RFTEVHQVRFX1RPX0dMXzFSKGlzRW5hYmxlZCwgSXNFbmFibGVkLCB1bnNpZ25lZCBsb25nLCBi
b29sKQorCitERUxFR0FURV9UT19HTF8xUihpc0ZyYW1lYnVmZmVyLCBJc0ZyYW1lYnVmZmVyLCBX
ZWJHTElkLCBib29sKQorCitERUxFR0FURV9UT19HTF8xUihpc1Byb2dyYW0sIElzUHJvZ3JhbSwg
V2ViR0xJZCwgYm9vbCkKKworREVMRUdBVEVfVE9fR0xfMVIoaXNSZW5kZXJidWZmZXIsIElzUmVu
ZGVyYnVmZmVyLCBXZWJHTElkLCBib29sKQorCitERUxFR0FURV9UT19HTF8xUihpc1NoYWRlciwg
SXNTaGFkZXIsIFdlYkdMSWQsIGJvb2wpCisKK0RFTEVHQVRFX1RPX0dMXzFSKGlzVGV4dHVyZSwg
SXNUZXh0dXJlLCBXZWJHTElkLCBib29sKQorCitERUxFR0FURV9UT19HTF8xKGxpbmVXaWR0aCwg
TGluZVdpZHRoLCBkb3VibGUpCisKK0RFTEVHQVRFX1RPX0dMXzEobGlua1Byb2dyYW0sIExpbmtQ
cm9ncmFtLCBXZWJHTElkKQorCitERUxFR0FURV9UT19HTF8yKHBpeGVsU3RvcmVpLCBQaXhlbFN0
b3JlaSwgdW5zaWduZWQgbG9uZywgbG9uZykKKworREVMRUdBVEVfVE9fR0xfMihwb2x5Z29uT2Zm
c2V0LCBQb2x5Z29uT2Zmc2V0LCBkb3VibGUsIGRvdWJsZSkKKworREVMRUdBVEVfVE9fR0xfNyhy
ZWFkUGl4ZWxzLCBSZWFkUGl4ZWxzLCBsb25nLCBsb25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25l
ZCBsb25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCB2b2lkKikKKwordm9pZCBXZWJH
cmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpyZWxlYXNlU2hhZGVyQ29tcGlsZXIoKQorewor
fQorCitERUxFR0FURV9UT19HTF80KHJlbmRlcmJ1ZmZlclN0b3JhZ2UsIFJlbmRlcmJ1ZmZlclN0
b3JhZ2VFWFQsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVu
c2lnbmVkIGxvbmcpCisKK0RFTEVHQVRFX1RPX0dMXzIoc2FtcGxlQ292ZXJhZ2UsIFNhbXBsZUNv
dmVyYWdlLCBkb3VibGUsIGJvb2wpCisKK0RFTEVHQVRFX1RPX0dMXzQoc2Npc3NvciwgU2Npc3Nv
ciwgbG9uZywgbG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZykKKwordm9pZCBXZWJH
cmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpzaGFkZXJTb3VyY2UoV2ViR0xJZCBzaGFkZXIs
IGNvbnN0IGNoYXIqIHN0cmluZykKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBH
TGludCBsZW5ndGggPSBzdHJsZW4oc3RyaW5nKTsKKyAgICBnbFNoYWRlclNvdXJjZShzaGFkZXIs
IDEsICZzdHJpbmcsICZsZW5ndGgpOworfQorCitERUxFR0FURV9UT19HTF8zKHN0ZW5jaWxGdW5j
LCBTdGVuY2lsRnVuYywgdW5zaWduZWQgbG9uZywgbG9uZywgdW5zaWduZWQgbG9uZykKKworREVM
RUdBVEVfVE9fR0xfNChzdGVuY2lsRnVuY1NlcGFyYXRlLCBTdGVuY2lsRnVuY1NlcGFyYXRlLCB1
bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCBsb25nLCB1bnNpZ25lZCBsb25nKQorCitERUxF
R0FURV9UT19HTF8xKHN0ZW5jaWxNYXNrLCBTdGVuY2lsTWFzaywgdW5zaWduZWQgbG9uZykKKwor
REVMRUdBVEVfVE9fR0xfMihzdGVuY2lsTWFza1NlcGFyYXRlLCBTdGVuY2lsTWFza1NlcGFyYXRl
LCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKQorCitERUxFR0FURV9UT19HTF8zKHN0ZW5j
aWxPcCwgU3RlbmNpbE9wLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBs
b25nKQorCitERUxFR0FURV9UT19HTF80KHN0ZW5jaWxPcFNlcGFyYXRlLCBTdGVuY2lsT3BTZXBh
cmF0ZSwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWdu
ZWQgbG9uZykKKworREVMRUdBVEVfVE9fR0xfOSh0ZXhJbWFnZTJELCBUZXhJbWFnZTJELCB1bnNp
Z25lZCwgdW5zaWduZWQsIHVuc2lnbmVkLCB1bnNpZ25lZCwgdW5zaWduZWQsIHVuc2lnbmVkLCB1
bnNpZ25lZCwgdW5zaWduZWQsIGNvbnN0IHZvaWQqKQorCitERUxFR0FURV9UT19HTF8zKHRleFBh
cmFtZXRlcmYsIFRleFBhcmFtZXRlcmYsIHVuc2lnbmVkLCB1bnNpZ25lZCwgZmxvYXQpOworCitE
RUxFR0FURV9UT19HTF8zKHRleFBhcmFtZXRlcmksIFRleFBhcmFtZXRlcmksIHVuc2lnbmVkLCB1
bnNpZ25lZCwgaW50KTsKKworREVMRUdBVEVfVE9fR0xfOSh0ZXhTdWJJbWFnZTJELCBUZXhTdWJJ
bWFnZTJELCB1bnNpZ25lZCwgdW5zaWduZWQsIHVuc2lnbmVkLCB1bnNpZ25lZCwgdW5zaWduZWQs
IHVuc2lnbmVkLCB1bnNpZ25lZCwgdW5zaWduZWQsIGNvbnN0IHZvaWQqKQorCitERUxFR0FURV9U
T19HTF8yKHVuaWZvcm0xZiwgVW5pZm9ybTFmLCBsb25nLCBmbG9hdCkKKworREVMRUdBVEVfVE9f
R0xfMyh1bmlmb3JtMWZ2LCBVbmlmb3JtMWZ2LCBsb25nLCBpbnQsIGZsb2F0KikKKworREVMRUdB
VEVfVE9fR0xfMih1bmlmb3JtMWksIFVuaWZvcm0xaSwgbG9uZywgaW50KQorCitERUxFR0FURV9U
T19HTF8zKHVuaWZvcm0xaXYsIFVuaWZvcm0xaXYsIGxvbmcsIGludCwgaW50KikKKworREVMRUdB
VEVfVE9fR0xfMyh1bmlmb3JtMmYsIFVuaWZvcm0yZiwgbG9uZywgZmxvYXQsIGZsb2F0KQorCitE
RUxFR0FURV9UT19HTF8zKHVuaWZvcm0yZnYsIFVuaWZvcm0yZnYsIGxvbmcsIGludCwgZmxvYXQq
KQorCitERUxFR0FURV9UT19HTF8zKHVuaWZvcm0yaSwgVW5pZm9ybTJpLCBsb25nLCBpbnQsIGlu
dCkKKworREVMRUdBVEVfVE9fR0xfMyh1bmlmb3JtMml2LCBVbmlmb3JtMml2LCBsb25nLCBpbnQs
IGludCopCisKK0RFTEVHQVRFX1RPX0dMXzQodW5pZm9ybTNmLCBVbmlmb3JtM2YsIGxvbmcsIGZs
b2F0LCBmbG9hdCwgZmxvYXQpCisKK0RFTEVHQVRFX1RPX0dMXzModW5pZm9ybTNmdiwgVW5pZm9y
bTNmdiwgbG9uZywgaW50LCBmbG9hdCopCisKK0RFTEVHQVRFX1RPX0dMXzQodW5pZm9ybTNpLCBV
bmlmb3JtM2ksIGxvbmcsIGludCwgaW50LCBpbnQpCisKK0RFTEVHQVRFX1RPX0dMXzModW5pZm9y
bTNpdiwgVW5pZm9ybTNpdiwgbG9uZywgaW50LCBpbnQqKQorCitERUxFR0FURV9UT19HTF81KHVu
aWZvcm00ZiwgVW5pZm9ybTRmLCBsb25nLCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCkKKwor
REVMRUdBVEVfVE9fR0xfMyh1bmlmb3JtNGZ2LCBVbmlmb3JtNGZ2LCBsb25nLCBpbnQsIGZsb2F0
KikKKworREVMRUdBVEVfVE9fR0xfNSh1bmlmb3JtNGksIFVuaWZvcm00aSwgbG9uZywgaW50LCBp
bnQsIGludCwgaW50KQorCitERUxFR0FURV9UT19HTF8zKHVuaWZvcm00aXYsIFVuaWZvcm00aXYs
IGxvbmcsIGludCwgaW50KikKKworREVMRUdBVEVfVE9fR0xfNCh1bmlmb3JtTWF0cml4MmZ2LCBV
bmlmb3JtTWF0cml4MmZ2LCBsb25nLCBpbnQsIGJvb2wsIGNvbnN0IGZsb2F0KikKKworREVMRUdB
VEVfVE9fR0xfNCh1bmlmb3JtTWF0cml4M2Z2LCBVbmlmb3JtTWF0cml4M2Z2LCBsb25nLCBpbnQs
IGJvb2wsIGNvbnN0IGZsb2F0KikKKworREVMRUdBVEVfVE9fR0xfNCh1bmlmb3JtTWF0cml4NGZ2
LCBVbmlmb3JtTWF0cml4NGZ2LCBsb25nLCBpbnQsIGJvb2wsIGNvbnN0IGZsb2F0KikKKworREVM
RUdBVEVfVE9fR0xfMSh1c2VQcm9ncmFtLCBVc2VQcm9ncmFtLCBXZWJHTElkKQorCitERUxFR0FU
RV9UT19HTF8xKHZhbGlkYXRlUHJvZ3JhbSwgVmFsaWRhdGVQcm9ncmFtLCBXZWJHTElkKQorCitE
RUxFR0FURV9UT19HTF8yKHZlcnRleEF0dHJpYjFmLCBWZXJ0ZXhBdHRyaWIxZiwgdW5zaWduZWQg
bG9uZywgZmxvYXQpCisKK0RFTEVHQVRFX1RPX0dMXzIodmVydGV4QXR0cmliMWZ2LCBWZXJ0ZXhB
dHRyaWIxZnYsIHVuc2lnbmVkIGxvbmcsIGNvbnN0IGZsb2F0KikKKworREVMRUdBVEVfVE9fR0xf
Myh2ZXJ0ZXhBdHRyaWIyZiwgVmVydGV4QXR0cmliMmYsIHVuc2lnbmVkIGxvbmcsIGZsb2F0LCBm
bG9hdCkKKworREVMRUdBVEVfVE9fR0xfMih2ZXJ0ZXhBdHRyaWIyZnYsIFZlcnRleEF0dHJpYjJm
diwgdW5zaWduZWQgbG9uZywgY29uc3QgZmxvYXQqKQorCitERUxFR0FURV9UT19HTF80KHZlcnRl
eEF0dHJpYjNmLCBWZXJ0ZXhBdHRyaWIzZiwgdW5zaWduZWQgbG9uZywgZmxvYXQsIGZsb2F0LCBm
bG9hdCkKKworREVMRUdBVEVfVE9fR0xfMih2ZXJ0ZXhBdHRyaWIzZnYsIFZlcnRleEF0dHJpYjNm
diwgdW5zaWduZWQgbG9uZywgY29uc3QgZmxvYXQqKQorCitERUxFR0FURV9UT19HTF81KHZlcnRl
eEF0dHJpYjRmLCBWZXJ0ZXhBdHRyaWI0ZiwgdW5zaWduZWQgbG9uZywgZmxvYXQsIGZsb2F0LCBm
bG9hdCwgZmxvYXQpCisKK0RFTEVHQVRFX1RPX0dMXzIodmVydGV4QXR0cmliNGZ2LCBWZXJ0ZXhB
dHRyaWI0ZnYsIHVuc2lnbmVkIGxvbmcsIGNvbnN0IGZsb2F0KikKKwordm9pZCBXZWJHcmFwaGlj
c0NvbnRleHQzRERlZmF1bHRJbXBsOjp2ZXJ0ZXhBdHRyaWJQb2ludGVyKHVuc2lnbmVkIGxvbmcg
aW5keCwgaW50IHNpemUsIGludCB0eXBlLCBib29sIG5vcm1hbGl6ZWQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9u
ZyBzdHJpZGUsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KQoreworICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOworCisgICAgaWYgKG1fYm91bmRBcnJheUJ1ZmZlciA8PSAwKSB7CisgICAgICAgIC8vIEZJ
WE1FOiByYWlzZSBleGNlcHRpb24uCisgICAgICAgIC8vIExvZ01lc3NhZ2VmKCgiYnVmZmVyRGF0
YTogbm8gYnVmZmVyIGJvdW5kIikpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYg
KGluZHggPCBOdW1UcmFja2VkUG9pbnRlclN0YXRlcykgeworICAgICAgICBWZXJ0ZXhBdHRyaWJQ
b2ludGVyU3RhdGUmIHN0YXRlID0gbV92ZXJ0ZXhBdHRyaWJQb2ludGVyU3RhdGVbaW5keF07Cisg
ICAgICAgIHN0YXRlLmJ1ZmZlciA9IG1fYm91bmRBcnJheUJ1ZmZlcjsKKyAgICAgICAgc3RhdGUu
aW5keCA9IGluZHg7CisgICAgICAgIHN0YXRlLnNpemUgPSBzaXplOworICAgICAgICBzdGF0ZS50
eXBlID0gdHlwZTsKKyAgICAgICAgc3RhdGUubm9ybWFsaXplZCA9IG5vcm1hbGl6ZWQ7CisgICAg
ICAgIHN0YXRlLnN0cmlkZSA9IHN0cmlkZTsKKyAgICAgICAgc3RhdGUub2Zmc2V0ID0gb2Zmc2V0
OworICAgIH0KKworICAgIGdsVmVydGV4QXR0cmliUG9pbnRlcihpbmR4LCBzaXplLCB0eXBlLCBu
b3JtYWxpemVkLCBzdHJpZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0
X2Nhc3Q8dm9pZCo+KHN0YXRpY19jYXN0PGludHB0cl90PihvZmZzZXQpKSk7Cit9CisKK0RFTEVH
QVRFX1RPX0dMXzQodmlld3BvcnQsIFZpZXdwb3J0LCBsb25nLCBsb25nLCB1bnNpZ25lZCBsb25n
LCB1bnNpZ25lZCBsb25nKQorCit1bnNpZ25lZCBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJ
bXBsOjpjcmVhdGVCdWZmZXIoKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIEdM
dWludCBvOworICAgIGdsR2VuQnVmZmVycygxLCAmbyk7CisgICAgcmV0dXJuIG87Cit9CisKK3Vu
c2lnbmVkIFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OmNyZWF0ZUZyYW1lYnVmZmVy
KCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBHTHVpbnQgbyA9IDA7CisgICAg
Z2xHZW5GcmFtZWJ1ZmZlcnNFWFQoMSwgJm8pOworICAgIHJldHVybiBvOworfQorCit1bnNpZ25l
ZCBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpjcmVhdGVQcm9ncmFtKCkKK3sKKyAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICByZXR1cm4gZ2xDcmVhdGVQcm9ncmFtKCk7Cit9
CisKK3Vuc2lnbmVkIFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OmNyZWF0ZVJlbmRl
cmJ1ZmZlcigpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgR0x1aW50IG87Cisg
ICAgZ2xHZW5SZW5kZXJidWZmZXJzRVhUKDEsICZvKTsKKyAgICByZXR1cm4gbzsKK30KKworREVM
RUdBVEVfVE9fR0xfMVIoY3JlYXRlU2hhZGVyLCBDcmVhdGVTaGFkZXIsIHVuc2lnbmVkIGxvbmcs
IHVuc2lnbmVkKTsKKwordW5zaWduZWQgV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6
Y3JlYXRlVGV4dHVyZSgpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgR0x1aW50
IG87CisgICAgZ2xHZW5UZXh0dXJlcygxLCAmbyk7CisgICAgcmV0dXJuIG87Cit9CisKK3ZvaWQg
V2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6ZGVsZXRlQnVmZmVyKHVuc2lnbmVkIGJ1
ZmZlcikKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBnbERlbGV0ZUJ1ZmZlcnMo
MSwgJmJ1ZmZlcik7Cit9CisKK3ZvaWQgV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6
ZGVsZXRlRnJhbWVidWZmZXIodW5zaWduZWQgZnJhbWVidWZmZXIpCit7CisgICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CisgICAgZ2xEZWxldGVGcmFtZWJ1ZmZlcnNFWFQoMSwgJmZyYW1lYnVmZmVy
KTsKK30KKwordm9pZCBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpkZWxldGVQcm9n
cmFtKHVuc2lnbmVkIHByb2dyYW0pCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAg
Z2xEZWxldGVQcm9ncmFtKHByb2dyYW0pOworfQorCit2b2lkIFdlYkdyYXBoaWNzQ29udGV4dDNE
RGVmYXVsdEltcGw6OmRlbGV0ZVJlbmRlcmJ1ZmZlcih1bnNpZ25lZCByZW5kZXJidWZmZXIpCit7
CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgZ2xEZWxldGVSZW5kZXJidWZmZXJzRVhU
KDEsICZyZW5kZXJidWZmZXIpOworfQorCit2b2lkIFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVs
dEltcGw6OmRlbGV0ZVNoYWRlcih1bnNpZ25lZCBzaGFkZXIpCit7CisgICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgZ2xEZWxldGVTaGFkZXIoc2hhZGVyKTsKK30KKwordm9pZCBXZWJHcmFw
aGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpkZWxldGVUZXh0dXJlKHVuc2lnbmVkIHRleHR1cmUp
Cit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgZ2xEZWxldGVUZXh0dXJlcygxLCAm
dGV4dHVyZSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxF
KDNEX0NBTlZBUykKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViR3JhcGhpY3NDb250ZXh0
M0REZWZhdWx0SW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViR3Jh
cGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbC5oCShyZXZpc2lvbiAwKQorKysgV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsLmgJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsNDA5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisg
KiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisg
KiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAor
ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsX2gK
KyNkZWZpbmUgV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbF9oCisKKyNpZiBFTkFCTEUo
M0RfQ0FOVkFTKQorCisjaW5jbHVkZSAiV2ViR3JhcGhpY3NDb250ZXh0M0QuaCIKKworI2luY2x1
ZGUgPHd0Zi9MaXN0SGFzaFNldC5oPgorCisjaWYgT1MoV0lORE9XUykKKyNpbmNsdWRlIDx3aW5k
b3dzLmg+CisjZW5kaWYKKworI2luY2x1ZGUgIkdML2dsZXcuaCIKKworI2lmIFBMQVRGT1JNKENH
KQorI2luY2x1ZGUgPE9wZW5HTC9PcGVuR0wuaD4KKyNlbHNlCisjZGVmaW5lIEZMSVBfRlJBTUVC
VUZGRVJfVkVSVElDQUxMWQorI2VuZGlmCisKKyNpZiBPUyhMSU5VWCkKKyNpbmNsdWRlICJHTC9n
bHhldy5oIgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJLaXQgeworCisvLyBUaGUgZGVmYXVsdCBp
bXBsZW1lbnRhdGlvbiBvZiBXZWJHTC4gSW4gQ2hyb21pdW0sIHVzaW5nIHRoaXMgY2xhc3MKKy8v
IHJlcXVpcmVzIHRoZSBzYW5kYm94IHRvIGJlIGRpc2FibGVkLCB3aGljaCBpcyBzdHJvbmdseSBk
aXNjb3VyYWdlZC4KKy8vIEl0IGlzIHByb3ZpZGVkIGZvciBzdXBwb3J0IG9mIHRlc3Rfc2hlbGwg
YW5kIGFueSBDaHJvbWl1bSBwb3J0cworLy8gd2hlcmUgYW4gaW4tcmVuZGVyZXIgV2ViR0wgaW1w
bGVtZW50YXRpb24gd291bGQgYmUgaGVscGZ1bC4KKworY2xhc3MgV2ViR3JhcGhpY3NDb250ZXh0
M0REZWZhdWx0SW1wbCA6IHB1YmxpYyBXZWJHcmFwaGljc0NvbnRleHQzRCB7CitwdWJsaWM6Cisg
ICAgV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbCgpOworICAgIHZpcnR1YWwgfldlYkdy
YXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGwoKTsKKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAg
IC8vIFdlYkdyYXBoaWNzQ29udGV4dDNEIG1ldGhvZHMKKyAgICB2aXJ0dWFsIGJvb2wgaW5pdGlh
bGl6ZShXZWJHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRyaWJ1dGVzKTsKKyAgICB2
aXJ0dWFsIGJvb2wgbWFrZUNvbnRleHRDdXJyZW50KCk7CisKKyAgICB2aXJ0dWFsIGludCB3aWR0
aCgpOworICAgIHZpcnR1YWwgaW50IGhlaWdodCgpOworCisgICAgdmlydHVhbCBpbnQgc2l6ZUlu
Qnl0ZXMoaW50IHR5cGUpOworCisgICAgdmlydHVhbCB2b2lkIHJlc2hhcGUoaW50IHdpZHRoLCBp
bnQgaGVpZ2h0KTsKKworICAgIHZpcnR1YWwgdm9pZCByZWFkQmFja0ZyYW1lYnVmZmVyKHVuc2ln
bmVkIGNoYXIqIHBpeGVscyk7CisKKyAgICB2aXJ0dWFsIHZvaWQgc3ludGhlc2l6ZUdMRXJyb3Io
dW5zaWduZWQgbG9uZyBlcnJvcik7CisKKyAgICB2aXJ0dWFsIHZvaWQgYWN0aXZlVGV4dHVyZSh1
bnNpZ25lZCBsb25nIHRleHR1cmUpOworICAgIHZpcnR1YWwgdm9pZCBhdHRhY2hTaGFkZXIoV2Vi
R0xJZCBwcm9ncmFtLCBXZWJHTElkIHNoYWRlcik7CisgICAgdmlydHVhbCB2b2lkIGJpbmRBdHRy
aWJMb2NhdGlvbihXZWJHTElkIHByb2dyYW0sIHVuc2lnbmVkIGxvbmcgaW5kZXgsIGNvbnN0IGNo
YXIqIG5hbWUpOworICAgIHZpcnR1YWwgdm9pZCBiaW5kQnVmZmVyKHVuc2lnbmVkIGxvbmcgdGFy
Z2V0LCBXZWJHTElkIGJ1ZmZlcik7CisgICAgdmlydHVhbCB2b2lkIGJpbmRGcmFtZWJ1ZmZlcih1
bnNpZ25lZCBsb25nIHRhcmdldCwgV2ViR0xJZCBmcmFtZWJ1ZmZlcik7CisgICAgdmlydHVhbCB2
b2lkIGJpbmRSZW5kZXJidWZmZXIodW5zaWduZWQgbG9uZyB0YXJnZXQsIFdlYkdMSWQgcmVuZGVy
YnVmZmVyKTsKKyAgICB2aXJ0dWFsIHZvaWQgYmluZFRleHR1cmUodW5zaWduZWQgbG9uZyB0YXJn
ZXQsIFdlYkdMSWQgdGV4dHVyZSk7CisgICAgdmlydHVhbCB2b2lkIGJsZW5kQ29sb3IoZG91Ymxl
IHJlZCwgZG91YmxlIGdyZWVuLCBkb3VibGUgYmx1ZSwgZG91YmxlIGFscGhhKTsKKyAgICB2aXJ0
dWFsIHZvaWQgYmxlbmRFcXVhdGlvbih1bnNpZ25lZCBsb25nIG1vZGUpOworICAgIHZpcnR1YWwg
dm9pZCBibGVuZEVxdWF0aW9uU2VwYXJhdGUodW5zaWduZWQgbG9uZyBtb2RlUkdCLCB1bnNpZ25l
ZCBsb25nIG1vZGVBbHBoYSk7CisgICAgdmlydHVhbCB2b2lkIGJsZW5kRnVuYyh1bnNpZ25lZCBs
b25nIHNmYWN0b3IsIHVuc2lnbmVkIGxvbmcgZGZhY3Rvcik7CisgICAgdmlydHVhbCB2b2lkIGJs
ZW5kRnVuY1NlcGFyYXRlKHVuc2lnbmVkIGxvbmcgc3JjUkdCLCB1bnNpZ25lZCBsb25nIGRzdFJH
QiwgdW5zaWduZWQgbG9uZyBzcmNBbHBoYSwgdW5zaWduZWQgbG9uZyBkc3RBbHBoYSk7CisKKyAg
ICB2aXJ0dWFsIHZvaWQgYnVmZmVyRGF0YSh1bnNpZ25lZCBsb25nIHRhcmdldCwgaW50IHNpemUs
IGNvbnN0IHZvaWQqIGRhdGEsIHVuc2lnbmVkIGxvbmcgdXNhZ2UpOworICAgIHZpcnR1YWwgdm9p
ZCBidWZmZXJTdWJEYXRhKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBsb25nIG9mZnNldCwgaW50IHNp
emUsIGNvbnN0IHZvaWQqIGRhdGEpOworCisgICAgdmlydHVhbCB1bnNpZ25lZCBsb25nIGNoZWNr
RnJhbWVidWZmZXJTdGF0dXModW5zaWduZWQgbG9uZyB0YXJnZXQpOworICAgIHZpcnR1YWwgdm9p
ZCBjbGVhcih1bnNpZ25lZCBsb25nIG1hc2spOworICAgIHZpcnR1YWwgdm9pZCBjbGVhckNvbG9y
KGRvdWJsZSByZWQsIGRvdWJsZSBncmVlbiwgZG91YmxlIGJsdWUsIGRvdWJsZSBhbHBoYSk7Cisg
ICAgdmlydHVhbCB2b2lkIGNsZWFyRGVwdGgoZG91YmxlIGRlcHRoKTsKKyAgICB2aXJ0dWFsIHZv
aWQgY2xlYXJTdGVuY2lsKGxvbmcgcyk7CisgICAgdmlydHVhbCB2b2lkIGNvbG9yTWFzayhib29s
IHJlZCwgYm9vbCBncmVlbiwgYm9vbCBibHVlLCBib29sIGFscGhhKTsKKyAgICB2aXJ0dWFsIHZv
aWQgY29tcGlsZVNoYWRlcihXZWJHTElkIHNoYWRlcik7CisKKyAgICB2aXJ0dWFsIHZvaWQgY29w
eVRleEltYWdlMkQodW5zaWduZWQgbG9uZyB0YXJnZXQsIGxvbmcgbGV2ZWwsIHVuc2lnbmVkIGxv
bmcgaW50ZXJuYWxmb3JtYXQsIGxvbmcgeCwgbG9uZyB5LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1
bnNpZ25lZCBsb25nIGhlaWdodCwgbG9uZyBib3JkZXIpOworICAgIHZpcnR1YWwgdm9pZCBjb3B5
VGV4U3ViSW1hZ2UyRCh1bnNpZ25lZCBsb25nIHRhcmdldCwgbG9uZyBsZXZlbCwgbG9uZyB4b2Zm
c2V0LCBsb25nIHlvZmZzZXQsIGxvbmcgeCwgbG9uZyB5LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1
bnNpZ25lZCBsb25nIGhlaWdodCk7CisgICAgdmlydHVhbCB2b2lkIGN1bGxGYWNlKHVuc2lnbmVk
IGxvbmcgbW9kZSk7CisgICAgdmlydHVhbCB2b2lkIGRlcHRoRnVuYyh1bnNpZ25lZCBsb25nIGZ1
bmMpOworICAgIHZpcnR1YWwgdm9pZCBkZXB0aE1hc2soYm9vbCBmbGFnKTsKKyAgICB2aXJ0dWFs
IHZvaWQgZGVwdGhSYW5nZShkb3VibGUgek5lYXIsIGRvdWJsZSB6RmFyKTsKKyAgICB2aXJ0dWFs
IHZvaWQgZGV0YWNoU2hhZGVyKFdlYkdMSWQgcHJvZ3JhbSwgV2ViR0xJZCBzaGFkZXIpOworICAg
IHZpcnR1YWwgdm9pZCBkaXNhYmxlKHVuc2lnbmVkIGxvbmcgY2FwKTsKKyAgICB2aXJ0dWFsIHZv
aWQgZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KHVuc2lnbmVkIGxvbmcgaW5kZXgpOworICAgIHZp
cnR1YWwgdm9pZCBkcmF3QXJyYXlzKHVuc2lnbmVkIGxvbmcgbW9kZSwgbG9uZyBmaXJzdCwgbG9u
ZyBjb3VudCk7CisgICAgdmlydHVhbCB2b2lkIGRyYXdFbGVtZW50cyh1bnNpZ25lZCBsb25nIG1v
ZGUsIHVuc2lnbmVkIGxvbmcgY291bnQsIHVuc2lnbmVkIGxvbmcgdHlwZSwgbG9uZyBvZmZzZXQp
OworCisgICAgdmlydHVhbCB2b2lkIGVuYWJsZSh1bnNpZ25lZCBsb25nIGNhcCk7CisgICAgdmly
dHVhbCB2b2lkIGVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHVuc2lnbmVkIGxvbmcgaW5kZXgpOwor
ICAgIHZpcnR1YWwgdm9pZCBmaW5pc2goKTsKKyAgICB2aXJ0dWFsIHZvaWQgZmx1c2goKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgZnJhbWVidWZmZXJSZW5kZXJidWZmZXIodW5zaWduZWQgbG9uZyB0YXJn
ZXQsIHVuc2lnbmVkIGxvbmcgYXR0YWNobWVudCwgdW5zaWduZWQgbG9uZyByZW5kZXJidWZmZXJ0
YXJnZXQsIFdlYkdMSWQgcmVuZGVyYnVmZmVyKTsKKyAgICB2aXJ0dWFsIHZvaWQgZnJhbWVidWZm
ZXJUZXh0dXJlMkQodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgYXR0YWNobWVu
dCwgdW5zaWduZWQgbG9uZyB0ZXh0YXJnZXQsIFdlYkdMSWQgdGV4dHVyZSwgbG9uZyBsZXZlbCk7
CisgICAgdmlydHVhbCB2b2lkIGZyb250RmFjZSh1bnNpZ25lZCBsb25nIG1vZGUpOworICAgIHZp
cnR1YWwgdm9pZCBnZW5lcmF0ZU1pcG1hcCh1bnNpZ25lZCBsb25nIHRhcmdldCk7CisKKyAgICB2
aXJ0dWFsIGJvb2wgZ2V0QWN0aXZlQXR0cmliKFdlYkdMSWQgcHJvZ3JhbSwgdW5zaWduZWQgbG9u
ZyBpbmRleCwgQWN0aXZlSW5mbyYpOworICAgIHZpcnR1YWwgYm9vbCBnZXRBY3RpdmVVbmlmb3Jt
KFdlYkdMSWQgcHJvZ3JhbSwgdW5zaWduZWQgbG9uZyBpbmRleCwgQWN0aXZlSW5mbyYpOworCisg
ICAgdmlydHVhbCBpbnQgIGdldEF0dHJpYkxvY2F0aW9uKFdlYkdMSWQgcHJvZ3JhbSwgY29uc3Qg
Y2hhciogbmFtZSk7CisKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0Qm9vbGVhbnYodW5zaWduZWQgbG9u
ZyBwbmFtZSwgdW5zaWduZWQgY2hhciogdmFsdWUpOworCisgICAgdmlydHVhbCB2b2lkIGdldEJ1
ZmZlclBhcmFtZXRlcml2KHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIHBuYW1l
LCBpbnQqIHZhbHVlKTsKKworICAgIHZpcnR1YWwgQXR0cmlidXRlcyBnZXRDb250ZXh0QXR0cmli
dXRlcygpOworCisgICAgdmlydHVhbCB1bnNpZ25lZCBsb25nIGdldEVycm9yKCk7CisKKyAgICB2
aXJ0dWFsIHZvaWQgZ2V0RmxvYXR2KHVuc2lnbmVkIGxvbmcgcG5hbWUsIGZsb2F0KiB2YWx1ZSk7
CisKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYo
dW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgYXR0YWNobWVudCwgdW5zaWduZWQg
bG9uZyBwbmFtZSwgaW50KiB2YWx1ZSk7CisKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0SW50ZWdlcnYo
dW5zaWduZWQgbG9uZyBwbmFtZSwgaW50KiB2YWx1ZSk7CisKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0
UHJvZ3JhbWl2KFdlYkdMSWQgcHJvZ3JhbSwgdW5zaWduZWQgbG9uZyBwbmFtZSwgaW50KiB2YWx1
ZSk7CisKKyAgICB2aXJ0dWFsIFdlYlN0cmluZyBnZXRQcm9ncmFtSW5mb0xvZyhXZWJHTElkIHBy
b2dyYW0pOworCisgICAgdmlydHVhbCB2b2lkIGdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcml2KHVu
c2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIHBuYW1lLCBpbnQqIHZhbHVlKTsKKwor
ICAgIHZpcnR1YWwgdm9pZCBnZXRTaGFkZXJpdihXZWJHTElkIHNoYWRlciwgdW5zaWduZWQgbG9u
ZyBwbmFtZSwgaW50KiB2YWx1ZSk7CisKKyAgICB2aXJ0dWFsIFdlYlN0cmluZyBnZXRTaGFkZXJJ
bmZvTG9nKFdlYkdMSWQgc2hhZGVyKTsKKworICAgIC8vIFRCRAorICAgIC8vIHZvaWQgZ2xHZXRT
aGFkZXJQcmVjaXNpb25Gb3JtYXQgKEdMZW51bSBzaGFkZXJ0eXBlLCBHTGVudW0gcHJlY2lzaW9u
dHlwZSwgR0xpbnQqIHJhbmdlLCBHTGludCogcHJlY2lzaW9uKTsKKworICAgIHZpcnR1YWwgV2Vi
U3RyaW5nIGdldFNoYWRlclNvdXJjZShXZWJHTElkIHNoYWRlcik7CisgICAgdmlydHVhbCBXZWJT
dHJpbmcgZ2V0U3RyaW5nKHVuc2lnbmVkIGxvbmcgbmFtZSk7CisKKyAgICB2aXJ0dWFsIHZvaWQg
Z2V0VGV4UGFyYW1ldGVyZnYodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgcG5h
bWUsIGZsb2F0KiB2YWx1ZSk7CisgICAgdmlydHVhbCB2b2lkIGdldFRleFBhcmFtZXRlcml2KHVu
c2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIHBuYW1lLCBpbnQqIHZhbHVlKTsKKwor
ICAgIHZpcnR1YWwgdm9pZCBnZXRVbmlmb3JtZnYoV2ViR0xJZCBwcm9ncmFtLCBsb25nIGxvY2F0
aW9uLCBmbG9hdCogdmFsdWUpOworICAgIHZpcnR1YWwgdm9pZCBnZXRVbmlmb3JtaXYoV2ViR0xJ
ZCBwcm9ncmFtLCBsb25nIGxvY2F0aW9uLCBpbnQqIHZhbHVlKTsKKworICAgIHZpcnR1YWwgbG9u
ZyBnZXRVbmlmb3JtTG9jYXRpb24oV2ViR0xJZCBwcm9ncmFtLCBjb25zdCBjaGFyKiBuYW1lKTsK
KworICAgIHZpcnR1YWwgdm9pZCBnZXRWZXJ0ZXhBdHRyaWJmdih1bnNpZ25lZCBsb25nIGluZGV4
LCB1bnNpZ25lZCBsb25nIHBuYW1lLCBmbG9hdCogdmFsdWUpOworICAgIHZpcnR1YWwgdm9pZCBn
ZXRWZXJ0ZXhBdHRyaWJpdih1bnNpZ25lZCBsb25nIGluZGV4LCB1bnNpZ25lZCBsb25nIHBuYW1l
LCBpbnQqIHZhbHVlKTsKKworICAgIHZpcnR1YWwgbG9uZyBnZXRWZXJ0ZXhBdHRyaWJPZmZzZXQo
dW5zaWduZWQgbG9uZyBpbmRleCwgdW5zaWduZWQgbG9uZyBwbmFtZSk7CisKKyAgICB2aXJ0dWFs
IHZvaWQgaGludCh1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBtb2RlKTsKKyAg
ICB2aXJ0dWFsIGJvb2wgaXNCdWZmZXIoV2ViR0xJZCBidWZmZXIpOworICAgIHZpcnR1YWwgYm9v
bCBpc0VuYWJsZWQodW5zaWduZWQgbG9uZyBjYXApOworICAgIHZpcnR1YWwgYm9vbCBpc0ZyYW1l
YnVmZmVyKFdlYkdMSWQgZnJhbWVidWZmZXIpOworICAgIHZpcnR1YWwgYm9vbCBpc1Byb2dyYW0o
V2ViR0xJZCBwcm9ncmFtKTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNSZW5kZXJidWZmZXIoV2ViR0xJ
ZCByZW5kZXJidWZmZXIpOworICAgIHZpcnR1YWwgYm9vbCBpc1NoYWRlcihXZWJHTElkIHNoYWRl
cik7CisgICAgdmlydHVhbCBib29sIGlzVGV4dHVyZShXZWJHTElkIHRleHR1cmUpOworICAgIHZp
cnR1YWwgdm9pZCBsaW5lV2lkdGgoZG91YmxlKTsKKyAgICB2aXJ0dWFsIHZvaWQgbGlua1Byb2dy
YW0oV2ViR0xJZCBwcm9ncmFtKTsKKyAgICB2aXJ0dWFsIHZvaWQgcGl4ZWxTdG9yZWkodW5zaWdu
ZWQgbG9uZyBwbmFtZSwgbG9uZyBwYXJhbSk7CisgICAgdmlydHVhbCB2b2lkIHBvbHlnb25PZmZz
ZXQoZG91YmxlIGZhY3RvciwgZG91YmxlIHVuaXRzKTsKKworICAgIHZpcnR1YWwgdm9pZCByZWFk
UGl4ZWxzKGxvbmcgeCwgbG9uZyB5LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25n
IGhlaWdodCwgdW5zaWduZWQgbG9uZyBmb3JtYXQsIHVuc2lnbmVkIGxvbmcgdHlwZSwgdm9pZCog
cGl4ZWxzKTsKKworICAgIHZpcnR1YWwgdm9pZCByZWxlYXNlU2hhZGVyQ29tcGlsZXIoKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgcmVuZGVyYnVmZmVyU3RvcmFnZSh1bnNpZ25lZCBsb25nIHRhcmdldCwg
dW5zaWduZWQgbG9uZyBpbnRlcm5hbGZvcm1hdCwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWdu
ZWQgbG9uZyBoZWlnaHQpOworICAgIHZpcnR1YWwgdm9pZCBzYW1wbGVDb3ZlcmFnZShkb3VibGUg
dmFsdWUsIGJvb2wgaW52ZXJ0KTsKKyAgICB2aXJ0dWFsIHZvaWQgc2Npc3Nvcihsb25nIHgsIGxv
bmcgeSwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQpOworICAgIHZp
cnR1YWwgdm9pZCBzaGFkZXJTb3VyY2UoV2ViR0xJZCBzaGFkZXIsIGNvbnN0IGNoYXIqIHN0cmlu
Zyk7CisgICAgdmlydHVhbCB2b2lkIHN0ZW5jaWxGdW5jKHVuc2lnbmVkIGxvbmcgZnVuYywgbG9u
ZyByZWYsIHVuc2lnbmVkIGxvbmcgbWFzayk7CisgICAgdmlydHVhbCB2b2lkIHN0ZW5jaWxGdW5j
U2VwYXJhdGUodW5zaWduZWQgbG9uZyBmYWNlLCB1bnNpZ25lZCBsb25nIGZ1bmMsIGxvbmcgcmVm
LCB1bnNpZ25lZCBsb25nIG1hc2spOworICAgIHZpcnR1YWwgdm9pZCBzdGVuY2lsTWFzayh1bnNp
Z25lZCBsb25nIG1hc2spOworICAgIHZpcnR1YWwgdm9pZCBzdGVuY2lsTWFza1NlcGFyYXRlKHVu
c2lnbmVkIGxvbmcgZmFjZSwgdW5zaWduZWQgbG9uZyBtYXNrKTsKKyAgICB2aXJ0dWFsIHZvaWQg
c3RlbmNpbE9wKHVuc2lnbmVkIGxvbmcgZmFpbCwgdW5zaWduZWQgbG9uZyB6ZmFpbCwgdW5zaWdu
ZWQgbG9uZyB6cGFzcyk7CisgICAgdmlydHVhbCB2b2lkIHN0ZW5jaWxPcFNlcGFyYXRlKHVuc2ln
bmVkIGxvbmcgZmFjZSwgdW5zaWduZWQgbG9uZyBmYWlsLCB1bnNpZ25lZCBsb25nIHpmYWlsLCB1
bnNpZ25lZCBsb25nIHpwYXNzKTsKKworICAgIHZpcnR1YWwgdm9pZCB0ZXhJbWFnZTJEKHVuc2ln
bmVkIHRhcmdldCwgdW5zaWduZWQgbGV2ZWwsIHVuc2lnbmVkIGludGVybmFsZm9ybWF0LCB1bnNp
Z25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0LCB1bnNpZ25lZCBib3JkZXIsIHVuc2lnbmVkIGZv
cm1hdCwgdW5zaWduZWQgdHlwZSwgY29uc3Qgdm9pZCogcGl4ZWxzKTsKKworICAgIHZpcnR1YWwg
dm9pZCB0ZXhQYXJhbWV0ZXJmKHVuc2lnbmVkIHRhcmdldCwgdW5zaWduZWQgcG5hbWUsIGZsb2F0
IHBhcmFtKTsKKyAgICB2aXJ0dWFsIHZvaWQgdGV4UGFyYW1ldGVyaSh1bnNpZ25lZCB0YXJnZXQs
IHVuc2lnbmVkIHBuYW1lLCBpbnQgcGFyYW0pOworCisgICAgdmlydHVhbCB2b2lkIHRleFN1Yklt
YWdlMkQodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBsZXZlbCwgdW5zaWduZWQgeG9mZnNldCwg
dW5zaWduZWQgeW9mZnNldCwgdW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCwgdW5zaWdu
ZWQgZm9ybWF0LCB1bnNpZ25lZCB0eXBlLCBjb25zdCB2b2lkKiBwaXhlbHMpOworCisgICAgdmly
dHVhbCB2b2lkIHVuaWZvcm0xZihsb25nIGxvY2F0aW9uLCBmbG9hdCB4KTsKKyAgICB2aXJ0dWFs
IHZvaWQgdW5pZm9ybTFmdihsb25nIGxvY2F0aW9uLCBpbnQgY291bnQsIGZsb2F0KiB2KTsKKyAg
ICB2aXJ0dWFsIHZvaWQgdW5pZm9ybTFpKGxvbmcgbG9jYXRpb24sIGludCB4KTsKKyAgICB2aXJ0
dWFsIHZvaWQgdW5pZm9ybTFpdihsb25nIGxvY2F0aW9uLCBpbnQgY291bnQsIGludCogdik7Cisg
ICAgdmlydHVhbCB2b2lkIHVuaWZvcm0yZihsb25nIGxvY2F0aW9uLCBmbG9hdCB4LCBmbG9hdCB5
KTsKKyAgICB2aXJ0dWFsIHZvaWQgdW5pZm9ybTJmdihsb25nIGxvY2F0aW9uLCBpbnQgY291bnQs
IGZsb2F0KiB2KTsKKyAgICB2aXJ0dWFsIHZvaWQgdW5pZm9ybTJpKGxvbmcgbG9jYXRpb24sIGlu
dCB4LCBpbnQgeSk7CisgICAgdmlydHVhbCB2b2lkIHVuaWZvcm0yaXYobG9uZyBsb2NhdGlvbiwg
aW50IGNvdW50LCBpbnQqIHYpOworICAgIHZpcnR1YWwgdm9pZCB1bmlmb3JtM2YobG9uZyBsb2Nh
dGlvbiwgZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgeik7CisgICAgdmlydHVhbCB2b2lkIHVuaWZv
cm0zZnYobG9uZyBsb2NhdGlvbiwgaW50IGNvdW50LCBmbG9hdCogdik7CisgICAgdmlydHVhbCB2
b2lkIHVuaWZvcm0zaShsb25nIGxvY2F0aW9uLCBpbnQgeCwgaW50IHksIGludCB6KTsKKyAgICB2
aXJ0dWFsIHZvaWQgdW5pZm9ybTNpdihsb25nIGxvY2F0aW9uLCBpbnQgY291bnQsIGludCogdik7
CisgICAgdmlydHVhbCB2b2lkIHVuaWZvcm00Zihsb25nIGxvY2F0aW9uLCBmbG9hdCB4LCBmbG9h
dCB5LCBmbG9hdCB6LCBmbG9hdCB3KTsKKyAgICB2aXJ0dWFsIHZvaWQgdW5pZm9ybTRmdihsb25n
IGxvY2F0aW9uLCBpbnQgY291bnQsIGZsb2F0KiB2KTsKKyAgICB2aXJ0dWFsIHZvaWQgdW5pZm9y
bTRpKGxvbmcgbG9jYXRpb24sIGludCB4LCBpbnQgeSwgaW50IHosIGludCB3KTsKKyAgICB2aXJ0
dWFsIHZvaWQgdW5pZm9ybTRpdihsb25nIGxvY2F0aW9uLCBpbnQgY291bnQsIGludCogdik7Cisg
ICAgdmlydHVhbCB2b2lkIHVuaWZvcm1NYXRyaXgyZnYobG9uZyBsb2NhdGlvbiwgaW50IGNvdW50
LCBib29sIHRyYW5zcG9zZSwgY29uc3QgZmxvYXQqIHZhbHVlKTsKKyAgICB2aXJ0dWFsIHZvaWQg
dW5pZm9ybU1hdHJpeDNmdihsb25nIGxvY2F0aW9uLCBpbnQgY291bnQsIGJvb2wgdHJhbnNwb3Nl
LCBjb25zdCBmbG9hdCogdmFsdWUpOworICAgIHZpcnR1YWwgdm9pZCB1bmlmb3JtTWF0cml4NGZ2
KGxvbmcgbG9jYXRpb24sIGludCBjb3VudCwgYm9vbCB0cmFuc3Bvc2UsIGNvbnN0IGZsb2F0KiB2
YWx1ZSk7CisKKyAgICB2aXJ0dWFsIHZvaWQgdXNlUHJvZ3JhbShXZWJHTElkIHByb2dyYW0pOwor
ICAgIHZpcnR1YWwgdm9pZCB2YWxpZGF0ZVByb2dyYW0oV2ViR0xJZCBwcm9ncmFtKTsKKworICAg
IHZpcnR1YWwgdm9pZCB2ZXJ0ZXhBdHRyaWIxZih1bnNpZ25lZCBsb25nIGluZHgsIGZsb2F0IHgp
OworICAgIHZpcnR1YWwgdm9pZCB2ZXJ0ZXhBdHRyaWIxZnYodW5zaWduZWQgbG9uZyBpbmR4LCBj
b25zdCBmbG9hdCogdmFsdWVzKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmVydGV4QXR0cmliMmYodW5z
aWduZWQgbG9uZyBpbmR4LCBmbG9hdCB4LCBmbG9hdCB5KTsKKyAgICB2aXJ0dWFsIHZvaWQgdmVy
dGV4QXR0cmliMmZ2KHVuc2lnbmVkIGxvbmcgaW5keCwgY29uc3QgZmxvYXQqIHZhbHVlcyk7Cisg
ICAgdmlydHVhbCB2b2lkIHZlcnRleEF0dHJpYjNmKHVuc2lnbmVkIGxvbmcgaW5keCwgZmxvYXQg
eCwgZmxvYXQgeSwgZmxvYXQgeik7CisgICAgdmlydHVhbCB2b2lkIHZlcnRleEF0dHJpYjNmdih1
bnNpZ25lZCBsb25nIGluZHgsIGNvbnN0IGZsb2F0KiB2YWx1ZXMpOworICAgIHZpcnR1YWwgdm9p
ZCB2ZXJ0ZXhBdHRyaWI0Zih1bnNpZ25lZCBsb25nIGluZHgsIGZsb2F0IHgsIGZsb2F0IHksIGZs
b2F0IHosIGZsb2F0IHcpOworICAgIHZpcnR1YWwgdm9pZCB2ZXJ0ZXhBdHRyaWI0ZnYodW5zaWdu
ZWQgbG9uZyBpbmR4LCBjb25zdCBmbG9hdCogdmFsdWVzKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmVy
dGV4QXR0cmliUG9pbnRlcih1bnNpZ25lZCBsb25nIGluZHgsIGludCBzaXplLCBpbnQgdHlwZSwg
Ym9vbCBub3JtYWxpemVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVu
c2lnbmVkIGxvbmcgc3RyaWRlLCB1bnNpZ25lZCBsb25nIG9mZnNldCk7CisKKyAgICB2aXJ0dWFs
IHZvaWQgdmlld3BvcnQobG9uZyB4LCBsb25nIHksIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2ln
bmVkIGxvbmcgaGVpZ2h0KTsKKworICAgIC8vIFN1cHBvcnQgZm9yIGJ1ZmZlciBjcmVhdGlvbiBh
bmQgZGVsZXRpb24KKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGNyZWF0ZUJ1ZmZlcigpOworICAgIHZp
cnR1YWwgdW5zaWduZWQgY3JlYXRlRnJhbWVidWZmZXIoKTsKKyAgICB2aXJ0dWFsIHVuc2lnbmVk
IGNyZWF0ZVByb2dyYW0oKTsKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGNyZWF0ZVJlbmRlcmJ1ZmZl
cigpOworICAgIHZpcnR1YWwgdW5zaWduZWQgY3JlYXRlU2hhZGVyKHVuc2lnbmVkIGxvbmcpOwor
ICAgIHZpcnR1YWwgdW5zaWduZWQgY3JlYXRlVGV4dHVyZSgpOworCisgICAgdmlydHVhbCB2b2lk
IGRlbGV0ZUJ1ZmZlcih1bnNpZ25lZCk7CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZUZyYW1lYnVm
ZmVyKHVuc2lnbmVkKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlUHJvZ3JhbSh1bnNpZ25lZCk7
CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZVJlbmRlcmJ1ZmZlcih1bnNpZ25lZCk7CisgICAgdmly
dHVhbCB2b2lkIGRlbGV0ZVNoYWRlcih1bnNpZ25lZCk7CisgICAgdmlydHVhbCB2b2lkIGRlbGV0
ZVRleHR1cmUodW5zaWduZWQpOworCitwcml2YXRlOgorICAgIFdlYkdyYXBoaWNzQ29udGV4dDNE
OjpBdHRyaWJ1dGVzIG1fYXR0cmlidXRlczsKKyAgICBib29sIG1faW5pdGlhbGl6ZWQ7CisgICAg
dW5zaWduZWQgaW50IG1fdGV4dHVyZTsKKyAgICB1bnNpZ25lZCBpbnQgbV9mYm87CisgICAgdW5z
aWduZWQgaW50IG1fZGVwdGhCdWZmZXI7CisgICAgdW5zaWduZWQgaW50IG1fY2FjaGVkV2lkdGgs
IG1fY2FjaGVkSGVpZ2h0OworCisgICAgLy8gRm9yIHRyYWNraW5nIHdoaWNoIEZCTyBpcyBib3Vu
ZAorICAgIHVuc2lnbmVkIGludCBtX2JvdW5kRkJPOworCisjaWZkZWYgRkxJUF9GUkFNRUJVRkZF
Ul9WRVJUSUNBTExZCisgICAgdW5zaWduZWQgY2hhciogbV9zY2FubGluZTsKKyAgICB2b2lkIGZs
aXBWZXJ0aWNhbGx5KHVuc2lnbmVkIGNoYXIqIGZyYW1lYnVmZmVyLAorICAgICAgICAgICAgICAg
ICAgICAgICAgdW5zaWduZWQgaW50IHdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgdW5z
aWduZWQgaW50IGhlaWdodCk7CisjZW5kaWYKKworICAgIC8vIE5vdGU6IHdlIGFyZW4ndCBjdXJy
ZW50bHkgdXNpbmcgdGhpcyBpbmZvcm1hdGlvbiwgYnV0IHdlIHdpbGwKKyAgICAvLyBuZWVkIHRv
IGluIG9yZGVyIHRvIHZlcmlmeSB0aGF0IGFsbCBlbmFibGVkIHZlcnRleCBhcnJheXMgaGF2ZQor
ICAgIC8vIGEgdmFsaWQgYnVmZmVyIGJvdW5kIC0tIHRvIGF2b2lkIGNyYXNoZXMgb24gY2VydGFp
biBjYXJkcy4KKyAgICB1bnNpZ25lZCBpbnQgbV9ib3VuZEFycmF5QnVmZmVyOworICAgIGNsYXNz
IFZlcnRleEF0dHJpYlBvaW50ZXJTdGF0ZSB7CisgICAgcHVibGljOgorICAgICAgICBWZXJ0ZXhB
dHRyaWJQb2ludGVyU3RhdGUoKTsKKworICAgICAgICBib29sIGVuYWJsZWQ7CisgICAgICAgIHVu
c2lnbmVkIGxvbmcgYnVmZmVyOworICAgICAgICB1bnNpZ25lZCBsb25nIGluZHg7CisgICAgICAg
IGludCBzaXplOworICAgICAgICBpbnQgdHlwZTsKKyAgICAgICAgYm9vbCBub3JtYWxpemVkOwor
ICAgICAgICB1bnNpZ25lZCBsb25nIHN0cmlkZTsKKyAgICAgICAgdW5zaWduZWQgbG9uZyBvZmZz
ZXQ7CisgICAgfTsKKworICAgIGVudW0geworICAgICAgICBOdW1UcmFja2VkUG9pbnRlclN0YXRl
cyA9IDIKKyAgICB9OworICAgIFZlcnRleEF0dHJpYlBvaW50ZXJTdGF0ZSBtX3ZlcnRleEF0dHJp
YlBvaW50ZXJTdGF0ZVtOdW1UcmFja2VkUG9pbnRlclN0YXRlc107CisKKyAgICAvLyBFcnJvcnMg
cmFpc2VkIGJ5IHN5bnRoZXNpemVHTEVycm9yKCkuCisgICAgTGlzdEhhc2hTZXQ8dW5zaWduZWQg
bG9uZz4gbV9zeW50aGV0aWNFcnJvcnM7CisKKyAgICBzdGF0aWMgYm9vbCBzX2luaXRpYWxpemVk
R0xFVzsKKyNpZiBPUyhXSU5ET1dTKQorICAgIEhXTkQgIG1fY2FudmFzV2luZG93OworICAgIEhE
QyAgIG1fY2FudmFzREM7CisgICAgSEdMUkMgbV9jb250ZXh0T2JqOworI2VsaWYgUExBVEZPUk0o
Q0cpCisgICAgQ0dMUEJ1ZmZlck9iaiBtX3BidWZmZXI7CisgICAgQ0dMQ29udGV4dE9iaiBtX2Nv
bnRleHRPYmo7CisgICAgdW5zaWduZWQgY2hhciogbV9yZW5kZXJPdXRwdXQ7CisjZWxpZiBPUyhM
SU5VWCkKKyAgICBHTFhDb250ZXh0IG1fY29udGV4dE9iajsKKyAgICBHTFhQYnVmZmVyIG1fcGJ1
ZmZlcjsKKworICAgIC8vIEluIG9yZGVyIHRvIGF2b2lkIHByb2JsZW1zIGNhdXNlZCBieSBsaW5r
aW5nIGFnYWluc3QgbGliR0wsIHdlCisgICAgLy8gZHluYW1pY2FsbHkgbG9vayB1cCBhbGwgdGhl
IHN5bWJvbHMgd2UgbmVlZC4KKyAgICAvLyBodHRwOi8vY29kZS5nb29nbGUuY29tL3AvY2hyb21p
dW0vaXNzdWVzL2RldGFpbD9pZD0xNjgwMAorICAgIGNsYXNzIEdMQ29ubmVjdGlvbiB7CisgICAg
ICBwdWJsaWM6CisgICAgICAgIH5HTENvbm5lY3Rpb24oKTsKKworICAgICAgICBzdGF0aWMgR0xD
b25uZWN0aW9uKiBjcmVhdGUoKTsKKworICAgICAgICBHTFhGQkNvbmZpZyogY2hvb3NlRkJDb25m
aWcoaW50IHNjcmVlbiwgY29uc3QgaW50ICphdHRyaWJfbGlzdCwgaW50ICpuZWxlbWVudHMpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2dsWENob29zZUZCQ29uZmlnKG1fZGlzcGxh
eSwgc2NyZWVuLCBhdHRyaWJfbGlzdCwgbmVsZW1lbnRzKTsKKyAgICAgICAgfQorCisgICAgICAg
IEdMWENvbnRleHQgY3JlYXRlTmV3Q29udGV4dChHTFhGQkNvbmZpZyBjb25maWcsIGludCByZW5k
ZXJUeXBlLCBHTFhDb250ZXh0IHNoYXJlTGlzdCwgQm9vbCBkaXJlY3QpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBtX2dsWENyZWF0ZU5ld0NvbnRleHQobV9kaXNwbGF5LCBjb25maWcs
IHJlbmRlclR5cGUsIHNoYXJlTGlzdCwgZGlyZWN0KTsKKyAgICAgICAgfQorCisgICAgICAgIEdM
WFBidWZmZXIgY3JlYXRlUGJ1ZmZlcihHTFhGQkNvbmZpZyBjb25maWcsIGNvbnN0IGludCAqYXR0
cmliTGlzdCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fZ2xYQ3JlYXRlUGJ1ZmZl
cihtX2Rpc3BsYXksIGNvbmZpZywgYXR0cmliTGlzdCk7CisgICAgICAgIH0KKworICAgICAgICB2
b2lkIGRlc3Ryb3lQYnVmZmVyKEdMWFBidWZmZXIgcGJ1ZikKKyAgICAgICAgeworICAgICAgICAg
ICAgbV9nbFhEZXN0cm95UGJ1ZmZlcihtX2Rpc3BsYXksIHBidWYpOworICAgICAgICB9CisKKyAg
ICAgICAgQm9vbCBtYWtlQ3VycmVudChHTFhEcmF3YWJsZSBkcmF3YWJsZSwgR0xYQ29udGV4dCBj
dHgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2dsWE1ha2VDdXJyZW50KG1fZGlz
cGxheSwgZHJhd2FibGUsIGN0eCk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGRlc3Ryb3lD
b250ZXh0KEdMWENvbnRleHQgY3R4KQorICAgICAgICB7CisgICAgICAgICAgICBtX2dsWERlc3Ry
b3lDb250ZXh0KG1fZGlzcGxheSwgY3R4KTsKKyAgICAgICAgfQorCisgICAgICAgIEdMWENvbnRl
eHQgZ2V0Q3VycmVudENvbnRleHQoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9n
bFhHZXRDdXJyZW50Q29udGV4dCgpOworICAgICAgICB9CisKKyAgICAgIHByaXZhdGU6CisgICAg
ICAgIERpc3BsYXkqIG1fZGlzcGxheTsKKyAgICAgICAgdm9pZCogbV9saWJHTDsKKyAgICAgICAg
UEZOR0xYQ0hPT1NFRkJDT05GSUdQUk9DIG1fZ2xYQ2hvb3NlRkJDb25maWc7CisgICAgICAgIFBG
TkdMWENSRUFURU5FV0NPTlRFWFRQUk9DIG1fZ2xYQ3JlYXRlTmV3Q29udGV4dDsKKyAgICAgICAg
UEZOR0xYQ1JFQVRFUEJVRkZFUlBST0MgbV9nbFhDcmVhdGVQYnVmZmVyOworICAgICAgICBQRk5H
TFhERVNUUk9ZUEJVRkZFUlBST0MgbV9nbFhEZXN0cm95UGJ1ZmZlcjsKKyAgICAgICAgdHlwZWRl
ZiBCb29sICgqIFBGTkdMWE1BS0VDVVJSRU5UUFJPQykoRGlzcGxheSogZHB5LCBHTFhEcmF3YWJs
ZSBkcmF3YWJsZSwgR0xYQ29udGV4dCBjdHgpOworICAgICAgICBQRk5HTFhNQUtFQ1VSUkVOVFBS
T0MgbV9nbFhNYWtlQ3VycmVudDsKKyAgICAgICAgdHlwZWRlZiB2b2lkICgqIFBGTkdMWERFU1RS
T1lDT05URVhUUFJPQykoRGlzcGxheSogZHB5LCBHTFhDb250ZXh0IGN0eCk7CisgICAgICAgIFBG
TkdMWERFU1RST1lDT05URVhUUFJPQyBtX2dsWERlc3Ryb3lDb250ZXh0OworICAgICAgICB0eXBl
ZGVmIEdMWENvbnRleHQgKCogUEZOR0xYR0VUQ1VSUkVOVENPTlRFWFRQUk9DKSh2b2lkKTsKKyAg
ICAgICAgUEZOR0xYR0VUQ1VSUkVOVENPTlRFWFRQUk9DIG1fZ2xYR2V0Q3VycmVudENvbnRleHQ7
CisKKyAgICAgICAgR0xDb25uZWN0aW9uKERpc3BsYXkqIGRpc3BsYXksCisgICAgICAgICAgICAg
ICAgICAgICB2b2lkKiBsaWJHTCwKKyAgICAgICAgICAgICAgICAgICAgIFBGTkdMWENIT09TRUZC
Q09ORklHUFJPQyBjaG9vc2VGQkNvbmZpZywKKyAgICAgICAgICAgICAgICAgICAgIFBGTkdMWENS
RUFURU5FV0NPTlRFWFRQUk9DIGNyZWF0ZU5ld0NvbnRleHQsCisgICAgICAgICAgICAgICAgICAg
ICBQRk5HTFhDUkVBVEVQQlVGRkVSUFJPQyBjcmVhdGVQYnVmZmVyLAorICAgICAgICAgICAgICAg
ICAgICAgUEZOR0xYREVTVFJPWVBCVUZGRVJQUk9DIGRlc3Ryb3lQYnVmZmVyLAorICAgICAgICAg
ICAgICAgICAgICAgUEZOR0xYTUFLRUNVUlJFTlRQUk9DIG1ha2VDdXJyZW50LAorICAgICAgICAg
ICAgICAgICAgICAgUEZOR0xYREVTVFJPWUNPTlRFWFRQUk9DIGRlc3Ryb3lDb250ZXh0LAorICAg
ICAgICAgICAgICAgICAgICAgUEZOR0xYR0VUQ1VSUkVOVENPTlRFWFRQUk9DIGdldEN1cnJlbnRD
b250ZXh0KQorICAgICAgICAgICAgOiBtX2xpYkdMKGxpYkdMKQorICAgICAgICAgICAgLCBtX2Rp
c3BsYXkoZGlzcGxheSkKKyAgICAgICAgICAgICwgbV9nbFhDaG9vc2VGQkNvbmZpZyhjaG9vc2VG
QkNvbmZpZykKKyAgICAgICAgICAgICwgbV9nbFhDcmVhdGVOZXdDb250ZXh0KGNyZWF0ZU5ld0Nv
bnRleHQpCisgICAgICAgICAgICAsIG1fZ2xYQ3JlYXRlUGJ1ZmZlcihjcmVhdGVQYnVmZmVyKQor
ICAgICAgICAgICAgLCBtX2dsWERlc3Ryb3lQYnVmZmVyKGRlc3Ryb3lQYnVmZmVyKQorICAgICAg
ICAgICAgLCBtX2dsWE1ha2VDdXJyZW50KG1ha2VDdXJyZW50KQorICAgICAgICAgICAgLCBtX2ds
WERlc3Ryb3lDb250ZXh0KGRlc3Ryb3lDb250ZXh0KQorICAgICAgICAgICAgLCBtX2dsWEdldEN1
cnJlbnRDb250ZXh0KGdldEN1cnJlbnRDb250ZXh0KQorICAgICAgICB7CisgICAgICAgIH0KKyAg
ICB9OworCisgICAgc3RhdGljIEdMQ29ubmVjdGlvbiogc19nbDsKKyNlbHNlCisgICAgI2Vycm9y
IE11c3QgcG9ydCBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsIHRvIHlvdXIgcGxhdGZv
cm0KKyNlbmRpZgorfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFC
TEUoM0RfQ0FOVkFTKQorCisjZW5kaWYK
</data>
<flag name="review"
          id="34272"
          type_id="1"
          status="+"
          setter="fishd"
    />
    <flag name="commit-queue"
          id="34299"
          type_id="3"
          status="-"
          setter="fishd"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>51189</attachid>
            <date>2010-03-19 15:06:37 -0700</date>
            <delta_ts>2010-03-19 15:23:21 -0700</delta_ts>
            <desc>Revised patch</desc>
            <filename>refactoring.patch</filename>
            <type>text/plain</type>
            <size>199936</size>
            <attacher name="Kenneth Russell">kbr</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24gNTYyNjYpCisrKyBXZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQ1IEBACisyMDEwLTAzLTE5ICBLZW5u
ZXRoIFJ1c3NlbGwgIDxrYnJAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgR3JhcGhpY3NDb250ZXh0M0QgYWJzdHJhY3Rpb24g
dG8gV2ViS2l0IEFQSQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MzYyNjIKKworICAgICAgICBBZGRlZCBXZWJHcmFwaGljc0NvbnRleHQzRCB0byB0aGUg
V2ViS2l0IEFQSSBhbmQgcmVmYWN0b3JlZCBDaHJvbWl1bSdzCisgICAgICAgIEdyYXBoaWNzQ29u
dGV4dDNEIGltcGxlbWVudGF0aW9uIHRvIHVzZSBpdC4gQWxsIG9mIHRoZSBPcGVuR0wgY2FsbHMg
aGF2ZQorICAgICAgICBiZWVuIG1vdmVkIG91dCBvZiBXZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBo
aWNzQ29udGV4dDNELmNwcCBhbmQgaW50byB0aGUKKyAgICAgICAgV2ViR3JhcGhpY3NDb250ZXh0
M0QgaW1wbGVtZW50YXRpb24uIEdyYXBoaWNzQ29udGV4dDNEIGlzIHN0aWxsCisgICAgICAgIHJl
c3BvbnNpYmxlIGZvciB0aGUgdHJhbnNmZXIgb2YgcmVuZGVyZWQgb3V0cHV0IGZyb20gdGhlCisg
ICAgICAgIFdlYkdyYXBoaWNzQ29udGV4dDNEIHRvIHRoZSBIVE1MQ2FudmFzRWxlbWVudC4KKwor
ICAgICAgICBUaGUgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbCBjbGFzcywgd2hpY2ggaXMgYSBk
YXRhIG1lbWJlciBvZgorICAgICAgICBHcmFwaGljc0NvbnRleHQzRCBmb3IgdGhlIENocm9taXVt
IHBvcnQsIHJlbWFpbnMuIEl0IGlzIHBvc3NpYmxlIHRvCisgICAgICAgIGVsaW1pbmF0ZSB0aGlz
IGNsYXNzIGFuZCB0aGVyZWJ5IG9uZSBsZXZlbCBvZiBkZWxlZ2F0aW9uLCBidXQgdGhpcyBpcwor
ICAgICAgICBiZWluZyBkZWZlcnJlZC4KKworICAgICAgICBUaGUgbmVlZGVkIGVudHJ5IHBvaW50
IGZvciBhIENocm9tZSBpbXBsZW1lbnRhdGlvbiBvZgorICAgICAgICBXZWJHcmFwaGljc0NvbnRl
eHQzRCBoYXMgYmVlbiBhZGRlZCB0byBXZWJLaXRDbGllbnQsIGJ1dCBpdCBpcyBub3QgYmVpbmcK
KyAgICAgICAgY2FsbGVkIHlldCBieSBHcmFwaGljc0NvbnRleHQzRC4gSXQgd2lsbCBiZSBvbmNl
IHRoaXMgcGF0Y2ggbGFuZHMgYW5kCisgICAgICAgIENocm9taXVtIGlzIHJvbGxlZCBmb3J3YXJk
IHRvIHN1cHBvcnQgdGhpcyBlbnRyeSBwb2ludC4KKworICAgICAgICBUaGlzIGlzIGEgbGFyZ2Ug
cGF0Y2gsIGJ1dCB0aGUgdHJhbnNmb3JtYXRpb24gaXMgYWxtb3N0IGVudGlyZWx5CisgICAgICAg
IG1lY2hhbmljYWwgYW5kIHRoZXJlIGlzIG5vIGNoYW5nZSBpbiBmdW5jdGlvbmFsaXR5LiBOZWFy
bHkgYWxsIG9mCisgICAgICAgIEdyYXBoaWNzQ29udGV4dDNEIGFuZCBHcmFwaGljc0NvbnRleHQz
REludGVybmFsIGhhcyBiZWVuIG1vdmVkIHRvCisgICAgICAgIFdlYkdyYXBoaWNzQ29udGV4dDNE
RGVmYXVsdEltcGwuIFRoZSBvbmx5IGFyZWEgd2hlcmUgdGhlIHNwbGl0dGluZyBvZgorICAgICAg
ICBsb2dpYyBpcyBsZXNzIHRoYW4gbWVjaGFuaWNhbCBpcyBHcmFwaGljc0NvbnRleHQzRDo6YmVn
aW5QYWludCgpIGFuZCBpdHMKKyAgICAgICAgY2FsbGVlcy4KKworICAgICAgICBSYW4gYWxsIFdl
YkdMIGxheW91dCB0ZXN0cyBhbmQgZGVtb3MgZnJvbSBLaHJvbm9zIHNpdGUgaW4gQ2hyb21pdW0u
CisKKyAgICAgICAgKiBXZWJLaXQuZ3lwOgorICAgICAgICAqIHB1YmxpYy9XZWJHcmFwaGljc0Nv
bnRleHQzRC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0Q6
OkF0dHJpYnV0ZXM6OkF0dHJpYnV0ZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJHcmFwaGljc0Nv
bnRleHQzRDo6fldlYkdyYXBoaWNzQ29udGV4dDNEKToKKyAgICAgICAgKiBwdWJsaWMvV2ViS2l0
Q2xpZW50Lmg6CisgICAgICAgIChXZWJLaXQ6OldlYktpdENsaWVudDo6Y3JlYXRlR3JhcGhpY3ND
b250ZXh0M0QpOgorICAgICAgICAqIHNyYy9HcmFwaGljc0NvbnRleHQzRC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpHcmFwaGljc0NvbnRleHQzRElu
dGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6On5H
cmFwaGljc0NvbnRleHQzREludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNESW50ZXJuYWw6OmluaXRpYWxpemUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0RJbnRlcm5hbDo6cGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpwbGF0Zm9ybVRleHR1cmUpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6YmVnaW5QYWludCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzREludGVybmFsOjplbmRQYWludCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpyZXNoYXBlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmJpbmRBdHRyaWJMb2Nh
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpiaW5k
VGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpi
dWZmZXJEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6
OmJ1ZmZlclN1YkRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RJbnRl
cm5hbDo6Z2V0QWN0aXZlQXR0cmliKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDNESW50ZXJuYWw6OmdldEFjdGl2ZVVuaWZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0RJbnRlcm5hbDo6Z2V0QXR0cmliTG9jYXRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6Z2V0Q29udGV4dEF0dHJpYnV0ZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6Z2V0UHJvZ3JhbUluZm9M
b2cpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6Z2V0U2hh
ZGVySW5mb0xvZyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzREludGVybmFs
OjpnZXRTaGFkZXJTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RJ
bnRlcm5hbDo6Z2V0U3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
SW50ZXJuYWw6OmdldFVuaWZvcm1Mb2NhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQzREludGVybmFsOjpyZWFkUGl4ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNESW50ZXJuYWw6OnNoYWRlclNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzREludGVybmFsOjp0ZXhJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OnRleFN1YkltYWdlMkQpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6dW5pZm9ybTFmdik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzREludGVybmFsOjp1bmlmb3JtMWl2KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OnVuaWZvcm0yZnYpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6dW5pZm9ybTJpdik6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzREludGVybmFsOjp1bmlmb3JtM2Z2KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OnVuaWZvcm0zaXYpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6dW5pZm9ybTRmdik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzREludGVybmFsOjp1bmlmb3JtNGl2
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OnVuaWZvcm1N
YXRyaXgyZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6
dW5pZm9ybU1hdHJpeDNmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRElu
dGVybmFsOjp1bmlmb3JtTWF0cml4NGZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRDo6fkdyYXBoaWNzQ29udGV4dDNEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6
OnBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0Q6OnBsYXRmb3JtVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRDo6dGV4SW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQz
RDo6dGV4U3ViSW1hZ2UyRCk6CisgICAgICAgICogc3JjL1dlYkdyYXBoaWNzQ29udGV4dDNELmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVE
ZWZhdWx0KToKKyAgICAgICAgKiBzcmMvV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbC5j
cHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJ
bXBsOjpHTENvbm5lY3Rpb246OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkdyYXBoaWNz
Q29udGV4dDNERGVmYXVsdEltcGw6OkdMQ29ubmVjdGlvbjo6fkdMQ29ubmVjdGlvbik6CisgICAg
ICAgIChXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OlZlcnRleEF0dHJp
YlBvaW50ZXJTdGF0ZTo6VmVydGV4QXR0cmliUG9pbnRlclN0YXRlKToKKyAgICAgICAgKFdlYktp
dDo6V2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6V2ViR3JhcGhpY3NDb250ZXh0M0RE
ZWZhdWx0SW1wbCk6CisgICAgICAgIChXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVs
dEltcGw6On5XZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsKToKKyAgICAgICAgKFdlYktp
dDo6V2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6aW5pdGlhbGl6ZSk6CisgICAgICAg
IChXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6Om1ha2VDb250ZXh0Q3Vy
cmVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6
OndpZHRoKToKKyAgICAgICAgKFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1w
bDo6aGVpZ2h0KToKKyAgICAgICAgKFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0
SW1wbDo6c2l6ZUluQnl0ZXMpOgorICAgICAgICAoV2ViS2l0OjpjcmVhdGVUZXh0dXJlT2JqZWN0
KToKKyAgICAgICAgKFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6cmVz
aGFwZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6
OmZsaXBWZXJ0aWNhbGx5KToKKyAgICAgICAgKFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0RE
ZWZhdWx0SW1wbDo6cmVhZEJhY2tGcmFtZWJ1ZmZlcik6CisgICAgICAgIChXZWJLaXQ6OldlYkdy
YXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OmFjdGl2ZVRleHR1cmUpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpiaW5kQnVmZmVyKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6YmluZEZyYW1lYnVm
ZmVyKToKKyAgICAgICAgKFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6
ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KToKKyAgICAgICAgKFdlYktpdDo6V2ViR3JhcGhpY3ND
b250ZXh0M0REZWZhdWx0SW1wbDo6ZHJhd0VsZW1lbnRzKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
R3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpnZW5lcmF0
ZU1pcG1hcCk6CisgICAgICAgIChXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdElt
cGw6OmdldEFjdGl2ZUF0dHJpYik6CisgICAgICAgIChXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4
dDNERGVmYXVsdEltcGw6OmdldEFjdGl2ZVVuaWZvcm0pOgorICAgICAgICAoV2ViS2l0OjpXZWJH
cmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpnZXRDb250ZXh0QXR0cmlidXRlcyk6CisgICAg
ICAgIChXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OmdldEVycm9yKToK
KyAgICAgICAgKFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6Z2V0UHJv
Z3JhbUluZm9Mb2cpOgorICAgICAgICAoV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1
bHRJbXBsOjpnZXRTaGFkZXJJbmZvTG9nKToKKyAgICAgICAgKFdlYktpdDo6V2ViR3JhcGhpY3ND
b250ZXh0M0REZWZhdWx0SW1wbDo6Z2V0U2hhZGVyU291cmNlKToKKyAgICAgICAgKFdlYktpdDo6
V2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6Z2V0U3RyaW5nKToKKyAgICAgICAgKFdl
YktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6Z2V0VmVydGV4QXR0cmliT2Zm
c2V0KToKKyAgICAgICAgKFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6
cmVsZWFzZVNoYWRlckNvbXBpbGVyKToKKyAgICAgICAgKFdlYktpdDo6V2ViR3JhcGhpY3NDb250
ZXh0M0REZWZhdWx0SW1wbDo6c2hhZGVyU291cmNlKToKKyAgICAgICAgKFdlYktpdDo6V2ViR3Jh
cGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6dmVydGV4QXR0cmliUG9pbnRlcik6CisgICAgICAg
IChXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OmNyZWF0ZUJ1ZmZlcik6
CisgICAgICAgIChXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OmNyZWF0
ZUZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0REZWZh
dWx0SW1wbDo6Y3JlYXRlUHJvZ3JhbSk6CisgICAgICAgIChXZWJLaXQ6OldlYkdyYXBoaWNzQ29u
dGV4dDNERGVmYXVsdEltcGw6OmNyZWF0ZVJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChXZWJLaXQ6
OldlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OmNyZWF0ZVRleHR1cmUpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpkZWxldGVCdWZmZXIp
OgorICAgICAgICAoV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpkZWxl
dGVGcmFtZWJ1ZmZlcik6CisgICAgICAgIChXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNERGVm
YXVsdEltcGw6OmRlbGV0ZVByb2dyYW0pOgorICAgICAgICAoV2ViS2l0OjpXZWJHcmFwaGljc0Nv
bnRleHQzRERlZmF1bHRJbXBsOjpkZWxldGVSZW5kZXJidWZmZXIpOgorICAgICAgICAoV2ViS2l0
OjpXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpkZWxldGVTaGFkZXIpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpkZWxldGVUZXh0dXJl
KToKKyAgICAgICAgKFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6c3lu
dGhlc2l6ZUdMRXJyb3IpOgorICAgICAgICAqIHNyYy9XZWJHcmFwaGljc0NvbnRleHQzRERlZmF1
bHRJbXBsLmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRERl
ZmF1bHRJbXBsOjopOgorICAgICAgICAoV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1
bHRJbXBsOjpHTENvbm5lY3Rpb246OmNob29zZUZCQ29uZmlnKToKKyAgICAgICAgKFdlYktpdDo6
V2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6R0xDb25uZWN0aW9uOjpjcmVhdGVOZXdD
b250ZXh0KToKKyAgICAgICAgKFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1w
bDo6R0xDb25uZWN0aW9uOjpjcmVhdGVQYnVmZmVyKToKKyAgICAgICAgKFdlYktpdDo6V2ViR3Jh
cGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6R0xDb25uZWN0aW9uOjpkZXN0cm95UGJ1ZmZlcik6
CisgICAgICAgIChXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OkdMQ29u
bmVjdGlvbjo6bWFrZUN1cnJlbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRl
eHQzRERlZmF1bHRJbXBsOjpHTENvbm5lY3Rpb246OmRlc3Ryb3lDb250ZXh0KToKKyAgICAgICAg
KFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6R0xDb25uZWN0aW9uOjpn
ZXRDdXJyZW50Q29udGV4dCk6CisgICAgICAgIChXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNE
RGVmYXVsdEltcGw6OkdMQ29ubmVjdGlvbjo6R0xDb25uZWN0aW9uKToKKwogMjAxMC0wMy0xOSAg
RGltaXRyaSBHbGF6a292ICA8ZGdsYXprb3ZAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFVucmV2
aWV3ZWQsIGJ1aWxkIGZpeC4KSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCShyZXZpc2lvbiA1NjI2NikKKysr
IFdlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjIsNiArMTIy
LDcgQEAKICAgICAgICAgICAgICAgICAncHVibGljL1dlYkZvbnRDYWNoZS5oJywKICAgICAgICAg
ICAgICAgICAncHVibGljL1dlYkZvcm1FbGVtZW50LmgnLAogICAgICAgICAgICAgICAgICdwdWJs
aWMvV2ViR2x5cGhDYWNoZS5oJywKKyAgICAgICAgICAgICAgICAncHVibGljL1dlYkdyYXBoaWNz
Q29udGV4dDNELmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViSGlzdG9yeUl0ZW0uaCcs
CiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJIVFRQQm9keS5oJywKICAgICAgICAgICAgICAg
ICAncHVibGljL1dlYkltYWdlLmgnLApAQCAtMzEyLDYgKzMxMyw5IEBACiAgICAgICAgICAgICAg
ICAgJ3NyYy9XZWJGcmFtZUltcGwuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYkZyYW1l
SW1wbC5oJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYkdseXBoQ2FjaGUuY3BwJywKKyAgICAg
ICAgICAgICAgICAnc3JjL1dlYkdyYXBoaWNzQ29udGV4dDNELmNwcCcsCisgICAgICAgICAgICAg
ICAgJ3NyYy9XZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsLmNwcCcsCisgICAgICAgICAg
ICAgICAgJ3NyYy9XZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsLmgnLAogICAgICAgICAg
ICAgICAgICdzcmMvV2ViSGlzdG9yeUl0ZW0uY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dl
YkhUVFBCb2R5LmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJJbWFnZUNHLmNwcCcsCklu
ZGV4OiBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkdyYXBoaWNzQ29udGV4dDNELmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJHcmFwaGljc0NvbnRleHQzRC5oCShy
ZXZpc2lvbiAwKQorKysgV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJHcmFwaGljc0NvbnRleHQz
RC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMwMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAg
ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
CisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViR3JhcGhpY3NDb250
ZXh0M0RfaAorI2RlZmluZSBXZWJHcmFwaGljc0NvbnRleHQzRF9oCisKKyNpbmNsdWRlICJXZWJD
b21tb24uaCIKKyNpbmNsdWRlICJXZWJOb25Db3B5YWJsZS5oIgorI2luY2x1ZGUgIldlYlN0cmlu
Zy5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworLy8gVHlwZWRlZiBmb3Igc2VydmVyLXNpZGUg
b2JqZWN0cyBsaWtlIE9wZW5HTCB0ZXh0dXJlcyBhbmQgcHJvZ3JhbSBvYmplY3RzLgordHlwZWRl
ZiB1bnNpZ25lZCBpbnQgV2ViR0xJZDsKKworLy8gVGhpcyBpbnRlcmZhY2UgYWJzdHJhY3RzIHRo
ZSBvcGVyYXRpb25zIHBlcmZvcm1lZCBieSB0aGUKKy8vIEdyYXBoaWNzQ29udGV4dDNEIGluIG9y
ZGVyIHRvIGltcGxlbWVudCBXZWJHTC4gTmVhcmx5IGFsbCBvZiB0aGUKKy8vIG1ldGhvZHMgZXhw
b3NlZCBvbiB0aGlzIGludGVyZmFjZSBtYXAgZGlyZWN0bHkgdG8gZW50cnkgcG9pbnRzIGluCisv
LyB0aGUgT3BlbkdMIEVTIDIuMCBBUEkuCisKK2NsYXNzIFdlYkdyYXBoaWNzQ29udGV4dDNEIDog
cHVibGljIFdlYk5vbkNvcHlhYmxlIHsKK3B1YmxpYzoKKyAgICAvLyBSZXR1cm4gdmFsdWUgZnJv
bSBnZXRBY3RpdmVVbmlmb3JtIGFuZCBnZXRBY3RpdmVBdHRyaWIuCisgICAgc3RydWN0IEFjdGl2
ZUluZm8geworICAgICAgICBXZWJTdHJpbmcgbmFtZTsKKyAgICAgICAgdW5zaWduZWQgdHlwZTsK
KyAgICAgICAgaW50IHNpemU7CisgICAgfTsKKworICAgIC8vIENvbnRleHQgY3JlYXRpb24gYXR0
cmlidXRlcy4KKyAgICBzdHJ1Y3QgQXR0cmlidXRlcyB7CisgICAgICAgIEF0dHJpYnV0ZXMoKQor
ICAgICAgICAgICAgOiBhbHBoYSh0cnVlKQorICAgICAgICAgICAgLCBkZXB0aCh0cnVlKQorICAg
ICAgICAgICAgLCBzdGVuY2lsKHRydWUpCisgICAgICAgICAgICAsIGFudGlhbGlhcyh0cnVlKQor
ICAgICAgICAgICAgLCBwcmVtdWx0aXBsaWVkQWxwaGEodHJ1ZSkKKyAgICAgICAgeworICAgICAg
ICB9CisKKyAgICAgICAgYm9vbCBhbHBoYTsKKyAgICAgICAgYm9vbCBkZXB0aDsKKyAgICAgICAg
Ym9vbCBzdGVuY2lsOworICAgICAgICBib29sIGFudGlhbGlhczsKKyAgICAgICAgYm9vbCBwcmVt
dWx0aXBsaWVkQWxwaGE7CisgICAgfTsKKworICAgIC8vIFRoaXMgZGVzdHJ1Y3RvciBuZWVkcyB0
byBiZSBwdWJsaWMgc28gdGhhdCB1c2luZyBjbGFzc2VzIGNhbiBkZXN0cm95IGluc3RhbmNlcyBp
ZiBpbml0aWFsaXphdGlvbiBmYWlscy4KKyAgICB2aXJ0dWFsIH5XZWJHcmFwaGljc0NvbnRleHQz
RCgpIHt9CisKKyAgICAvLyBDcmVhdGVzIGEgImRlZmF1bHQiIGltcGxlbWVudGF0aW9uIG9mIFdl
YkdyYXBoaWNzQ29udGV4dDNEIHdoaWNoIGNhbGxzCisgICAgLy8gT3BlbkdMIGRpcmVjdGx5Lgor
ICAgIHN0YXRpYyBXZWJHcmFwaGljc0NvbnRleHQzRCogY3JlYXRlRGVmYXVsdCgpOworCisgICAg
Ly8gSW5pdGlhbGl6ZXMgdGhlIGdyYXBoaWNzIGNvbnRleHQ7IHNob3VsZCBiZSB0aGUgZmlyc3Qg
b3BlcmF0aW9uIHBlcmZvcm1lZAorICAgIC8vIG9uIG5ld2x5LWNvbnN0cnVjdGVkIGluc3RhbmNl
cy4gUmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3MuCisgICAgdmlydHVhbCBib29sIGluaXRpYWxpemUo
QXR0cmlidXRlcykgPSAwOworCisgICAgLy8gTWFrZXMgdGhlIE9wZW5HTCBjb250ZXh0IGN1cnJl
bnQgb24gdGhlIGN1cnJlbnQgdGhyZWFkLiBSZXR1cm5zIHRydWUgb24KKyAgICAvLyBzdWNjZXNz
LgorICAgIHZpcnR1YWwgYm9vbCBtYWtlQ29udGV4dEN1cnJlbnQoKSA9IDA7CisKKyAgICAvLyBU
aGUgc2l6ZSBvZiB0aGUgcmVnaW9uIGludG8gd2hpY2ggdGhpcyBXZWJHcmFwaGljc0NvbnRleHQz
RCBpcyByZW5kZXJpbmcuCisgICAgLy8gUmV0dXJucyB0aGUgbGFzdCB2YWx1ZXMgcGFzc2VkIHRv
IHJlc2hhcGUoKS4KKyAgICB2aXJ0dWFsIGludCB3aWR0aCgpID0gMDsKKyAgICB2aXJ0dWFsIGlu
dCBoZWlnaHQoKSA9IDA7CisKKyAgICAvLyBIZWxwZXIgdG8gcmV0dXJuIHRoZSBzaXplIGluIGJ5
dGVzIG9mIE9wZW5HTCBkYXRhIHR5cGVzCisgICAgLy8gbGlrZSBHTF9GTE9BVCwgR0xfSU5ULCBl
dGMuCisgICAgdmlydHVhbCBpbnQgc2l6ZUluQnl0ZXMoaW50IHR5cGUpID0gMDsKKworICAgIC8v
IFJlc2l6ZXMgdGhlIHJlZ2lvbiBpbnRvIHdoaWNoIHRoaXMgV2ViR3JhcGhpY3NDb250ZXh0M0Qg
aXMgZHJhd2luZy4KKyAgICB2aXJ0dWFsIHZvaWQgcmVzaGFwZShpbnQgd2lkdGgsIGludCBoZWln
aHQpID0gMDsKKworICAgIC8vIEhlbHBlciBmb3Igc29mdHdhcmUgY29tcG9zaXRpbmcgcGF0aC4g
UmVhZHMgYmFjayB0aGUgZnJhbWUgYnVmZmVyIGludG8KKyAgICAvLyB0aGUgbWVtb3J5IHJlZ2lv
biBwb2ludGVkIHRvIGJ5ICJwaXhlbHMiIHdpdGggc2l6ZSAiYnVmZmVyX3NpemUiLiBJdCBpcwor
ICAgIC8vIGV4cGVjdGVkIHRoYXQgdGhlIHN0b3JhZ2UgZm9yICJwaXhlbHMiIGNvdmVycyAoNCAq
IHdpZHRoICogaGVpZ2h0KSBieXRlcy4KKyAgICAvLyBSZXR1cm5zIHRydWUgb24gc3VjY2Vzcy4K
KyAgICB2aXJ0dWFsIGJvb2wgcmVhZEJhY2tGcmFtZWJ1ZmZlcih1bnNpZ25lZCBjaGFyKiBwaXhl
bHMsIHNpemVfdCBidWZmZXJfc2l6ZSkgPSAwOworCisgICAgLy8gU3ludGhlc2l6ZXMgYW4gT3Bl
bkdMIGVycm9yIHdoaWNoIHdpbGwgYmUgcmV0dXJuZWQgZnJvbSBhCisgICAgLy8gbGF0ZXIgY2Fs
bCB0byBnZXRFcnJvci4gVGhpcyBpcyB1c2VkIHRvIGVtdWxhdGUgT3BlbkdMIEVTCisgICAgLy8g
Mi4wIGJlaGF2aW9yIG9uIHRoZSBkZXNrdG9wIGFuZCB0byBlbmZvcmNlIGFkZGl0aW9uYWwgZXJy
b3IKKyAgICAvLyBjaGVja2luZyBtYW5kYXRlZCBieSBXZWJHTC4KKyAgICAvLworICAgIC8vIFBl
ciB0aGUgYmVoYXZpb3Igb2YgZ2xHZXRFcnJvciwgdGhpcyBzdG9yZXMgYXQgbW9zdCBvbmUKKyAg
ICAvLyBpbnN0YW5jZSBvZiBhbnkgZ2l2ZW4gZXJyb3IsIGFuZCByZXR1cm5zIHRoZW0gZnJvbSBj
YWxscyB0bworICAgIC8vIGdldEVycm9yIGluIHRoZSBvcmRlciB0aGV5IHdlcmUgYWRkZWQuCisg
ICAgdmlydHVhbCB2b2lkIHN5bnRoZXNpemVHTEVycm9yKHVuc2lnbmVkIGxvbmcgZXJyb3IpID0g
MDsKKworICAgIC8vIFRoZSBlbnRyeSBwb2ludHMgYmVsb3cgbWFwIGRpcmVjdGx5IHRvIHRoZSBP
cGVuR0wgRVMgMi4wIEFQSS4KKyAgICAvLyBTZWU6IGh0dHA6Ly93d3cua2hyb25vcy5vcmcvcmVn
aXN0cnkvZ2xlcy8KKyAgICAvLyBhbmQ6IGh0dHA6Ly93d3cua2hyb25vcy5vcmcvb3BlbmdsZXMv
c2RrL2RvY3MvbWFuLworICAgIHZpcnR1YWwgdm9pZCBhY3RpdmVUZXh0dXJlKHVuc2lnbmVkIGxv
bmcgdGV4dHVyZSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBhdHRhY2hTaGFkZXIoV2ViR0xJZCBw
cm9ncmFtLCBXZWJHTElkIHNoYWRlcikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBiaW5kQXR0cmli
TG9jYXRpb24oV2ViR0xJZCBwcm9ncmFtLCB1bnNpZ25lZCBsb25nIGluZGV4LCBjb25zdCBjaGFy
KiBuYW1lKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGJpbmRCdWZmZXIodW5zaWduZWQgbG9uZyB0
YXJnZXQsIFdlYkdMSWQgYnVmZmVyKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGJpbmRGcmFtZWJ1
ZmZlcih1bnNpZ25lZCBsb25nIHRhcmdldCwgV2ViR0xJZCBmcmFtZWJ1ZmZlcikgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBiaW5kUmVuZGVyYnVmZmVyKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBXZWJH
TElkIHJlbmRlcmJ1ZmZlcikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBiaW5kVGV4dHVyZSh1bnNp
Z25lZCBsb25nIHRhcmdldCwgV2ViR0xJZCB0ZXh0dXJlKSA9IDA7CisgICAgdmlydHVhbCB2b2lk
IGJsZW5kQ29sb3IoZG91YmxlIHJlZCwgZG91YmxlIGdyZWVuLCBkb3VibGUgYmx1ZSwgZG91Ymxl
IGFscGhhKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGJsZW5kRXF1YXRpb24odW5zaWduZWQgbG9u
ZyBtb2RlKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGJsZW5kRXF1YXRpb25TZXBhcmF0ZSh1bnNp
Z25lZCBsb25nIG1vZGVSR0IsIHVuc2lnbmVkIGxvbmcgbW9kZUFscGhhKSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIGJsZW5kRnVuYyh1bnNpZ25lZCBsb25nIHNmYWN0b3IsIHVuc2lnbmVkIGxvbmcg
ZGZhY3RvcikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBibGVuZEZ1bmNTZXBhcmF0ZSh1bnNpZ25l
ZCBsb25nIHNyY1JHQiwgdW5zaWduZWQgbG9uZyBkc3RSR0IsIHVuc2lnbmVkIGxvbmcgc3JjQWxw
aGEsIHVuc2lnbmVkIGxvbmcgZHN0QWxwaGEpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBidWZm
ZXJEYXRhKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBpbnQgc2l6ZSwgY29uc3Qgdm9pZCogZGF0YSwg
dW5zaWduZWQgbG9uZyB1c2FnZSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBidWZmZXJTdWJEYXRh
KHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBsb25nIG9mZnNldCwgaW50IHNpemUsIGNvbnN0IHZvaWQq
IGRhdGEpID0gMDsKKworICAgIHZpcnR1YWwgdW5zaWduZWQgbG9uZyBjaGVja0ZyYW1lYnVmZmVy
U3RhdHVzKHVuc2lnbmVkIGxvbmcgdGFyZ2V0KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGNsZWFy
KHVuc2lnbmVkIGxvbmcgbWFzaykgPSAwOworICAgIHZpcnR1YWwgdm9pZCBjbGVhckNvbG9yKGRv
dWJsZSByZWQsIGRvdWJsZSBncmVlbiwgZG91YmxlIGJsdWUsIGRvdWJsZSBhbHBoYSkgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCBjbGVhckRlcHRoKGRvdWJsZSBkZXB0aCkgPSAwOworICAgIHZpcnR1
YWwgdm9pZCBjbGVhclN0ZW5jaWwobG9uZyBzKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGNvbG9y
TWFzayhib29sIHJlZCwgYm9vbCBncmVlbiwgYm9vbCBibHVlLCBib29sIGFscGhhKSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIGNvbXBpbGVTaGFkZXIoV2ViR0xJZCBzaGFkZXIpID0gMDsKKworICAg
IHZpcnR1YWwgdm9pZCBjb3B5VGV4SW1hZ2UyRCh1bnNpZ25lZCBsb25nIHRhcmdldCwgbG9uZyBs
ZXZlbCwgdW5zaWduZWQgbG9uZyBpbnRlcm5hbGZvcm1hdCwgbG9uZyB4LCBsb25nIHksIHVuc2ln
bmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0LCBsb25nIGJvcmRlcikgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCBjb3B5VGV4U3ViSW1hZ2UyRCh1bnNpZ25lZCBsb25nIHRhcmdldCwg
bG9uZyBsZXZlbCwgbG9uZyB4b2Zmc2V0LCBsb25nIHlvZmZzZXQsIGxvbmcgeCwgbG9uZyB5LCB1
bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCkgPSAwOworICAgIHZpcnR1
YWwgdm9pZCBjdWxsRmFjZSh1bnNpZ25lZCBsb25nIG1vZGUpID0gMDsKKyAgICB2aXJ0dWFsIHZv
aWQgZGVwdGhGdW5jKHVuc2lnbmVkIGxvbmcgZnVuYykgPSAwOworICAgIHZpcnR1YWwgdm9pZCBk
ZXB0aE1hc2soYm9vbCBmbGFnKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRlcHRoUmFuZ2UoZG91
YmxlIHpOZWFyLCBkb3VibGUgekZhcikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkZXRhY2hTaGFk
ZXIoV2ViR0xJZCBwcm9ncmFtLCBXZWJHTElkIHNoYWRlcikgPSAwOworICAgIHZpcnR1YWwgdm9p
ZCBkaXNhYmxlKHVuc2lnbmVkIGxvbmcgY2FwKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRpc2Fi
bGVWZXJ0ZXhBdHRyaWJBcnJheSh1bnNpZ25lZCBsb25nIGluZGV4KSA9IDA7CisgICAgdmlydHVh
bCB2b2lkIGRyYXdBcnJheXModW5zaWduZWQgbG9uZyBtb2RlLCBsb25nIGZpcnN0LCBsb25nIGNv
dW50KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRyYXdFbGVtZW50cyh1bnNpZ25lZCBsb25nIG1v
ZGUsIHVuc2lnbmVkIGxvbmcgY291bnQsIHVuc2lnbmVkIGxvbmcgdHlwZSwgbG9uZyBvZmZzZXQp
ID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBlbmFibGUodW5zaWduZWQgbG9uZyBjYXApID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgZW5hYmxlVmVydGV4QXR0cmliQXJyYXkodW5zaWduZWQgbG9uZyBp
bmRleCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBmaW5pc2goKSA9IDA7CisgICAgdmlydHVhbCB2
b2lkIGZsdXNoKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZl
cih1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBhdHRhY2htZW50LCB1bnNpZ25l
ZCBsb25nIHJlbmRlcmJ1ZmZlcnRhcmdldCwgV2ViR0xJZCByZW5kZXJidWZmZXIpID0gMDsKKyAg
ICB2aXJ0dWFsIHZvaWQgZnJhbWVidWZmZXJUZXh0dXJlMkQodW5zaWduZWQgbG9uZyB0YXJnZXQs
IHVuc2lnbmVkIGxvbmcgYXR0YWNobWVudCwgdW5zaWduZWQgbG9uZyB0ZXh0YXJnZXQsIFdlYkdM
SWQgdGV4dHVyZSwgbG9uZyBsZXZlbCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBmcm9udEZhY2Uo
dW5zaWduZWQgbG9uZyBtb2RlKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGdlbmVyYXRlTWlwbWFw
KHVuc2lnbmVkIGxvbmcgdGFyZ2V0KSA9IDA7CisKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0QWN0aXZl
QXR0cmliKFdlYkdMSWQgcHJvZ3JhbSwgdW5zaWduZWQgbG9uZyBpbmRleCwgQWN0aXZlSW5mbyYp
ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0QWN0aXZlVW5pZm9ybShXZWJHTElkIHByb2dyYW0s
IHVuc2lnbmVkIGxvbmcgaW5kZXgsIEFjdGl2ZUluZm8mKSA9IDA7CisKKyAgICB2aXJ0dWFsIGlu
dCAgZ2V0QXR0cmliTG9jYXRpb24oV2ViR0xJZCBwcm9ncmFtLCBjb25zdCBjaGFyKiBuYW1lKSA9
IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0Qm9vbGVhbnYodW5zaWduZWQgbG9uZyBwbmFtZSwg
dW5zaWduZWQgY2hhciogdmFsdWUpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBnZXRCdWZmZXJQ
YXJhbWV0ZXJpdih1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBwbmFtZSwgaW50
KiB2YWx1ZSkgPSAwOworCisgICAgdmlydHVhbCBBdHRyaWJ1dGVzIGdldENvbnRleHRBdHRyaWJ1
dGVzKCkgPSAwOworCisgICAgdmlydHVhbCB1bnNpZ25lZCBsb25nIGdldEVycm9yKCkgPSAwOwor
CisgICAgdmlydHVhbCB2b2lkIGdldEZsb2F0dih1bnNpZ25lZCBsb25nIHBuYW1lLCBmbG9hdCog
dmFsdWUpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQ
YXJhbWV0ZXJpdih1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBhdHRhY2htZW50
LCB1bnNpZ25lZCBsb25nIHBuYW1lLCBpbnQqIHZhbHVlKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZv
aWQgZ2V0SW50ZWdlcnYodW5zaWduZWQgbG9uZyBwbmFtZSwgaW50KiB2YWx1ZSkgPSAwOworCisg
ICAgdmlydHVhbCB2b2lkIGdldFByb2dyYW1pdihXZWJHTElkIHByb2dyYW0sIHVuc2lnbmVkIGxv
bmcgcG5hbWUsIGludCogdmFsdWUpID0gMDsKKworICAgIHZpcnR1YWwgV2ViU3RyaW5nIGdldFBy
b2dyYW1JbmZvTG9nKFdlYkdMSWQgcHJvZ3JhbSkgPSAwOworCisgICAgdmlydHVhbCB2b2lkIGdl
dFJlbmRlcmJ1ZmZlclBhcmFtZXRlcml2KHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBs
b25nIHBuYW1lLCBpbnQqIHZhbHVlKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0U2hhZGVy
aXYoV2ViR0xJZCBzaGFkZXIsIHVuc2lnbmVkIGxvbmcgcG5hbWUsIGludCogdmFsdWUpID0gMDsK
KworICAgIHZpcnR1YWwgV2ViU3RyaW5nIGdldFNoYWRlckluZm9Mb2coV2ViR0xJZCBzaGFkZXIp
ID0gMDsKKworICAgIC8vIFRCRAorICAgIC8vIHZvaWQgZ2xHZXRTaGFkZXJQcmVjaXNpb25Gb3Jt
YXQgKEdMZW51bSBzaGFkZXJ0eXBlLCBHTGVudW0gcHJlY2lzaW9udHlwZSwgR0xpbnQqIHJhbmdl
LCBHTGludCogcHJlY2lzaW9uKTsKKworICAgIHZpcnR1YWwgV2ViU3RyaW5nIGdldFNoYWRlclNv
dXJjZShXZWJHTElkIHNoYWRlcikgPSAwOworICAgIHZpcnR1YWwgV2ViU3RyaW5nIGdldFN0cmlu
Zyh1bnNpZ25lZCBsb25nIG5hbWUpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBnZXRUZXhQYXJh
bWV0ZXJmdih1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBwbmFtZSwgZmxvYXQq
IHZhbHVlKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGdldFRleFBhcmFtZXRlcml2KHVuc2lnbmVk
IGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIHBuYW1lLCBpbnQqIHZhbHVlKSA9IDA7CisKKyAg
ICB2aXJ0dWFsIHZvaWQgZ2V0VW5pZm9ybWZ2KFdlYkdMSWQgcHJvZ3JhbSwgbG9uZyBsb2NhdGlv
biwgZmxvYXQqIHZhbHVlKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGdldFVuaWZvcm1pdihXZWJH
TElkIHByb2dyYW0sIGxvbmcgbG9jYXRpb24sIGludCogdmFsdWUpID0gMDsKKworICAgIHZpcnR1
YWwgbG9uZyBnZXRVbmlmb3JtTG9jYXRpb24oV2ViR0xJZCBwcm9ncmFtLCBjb25zdCBjaGFyKiBu
YW1lKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0VmVydGV4QXR0cmliZnYodW5zaWduZWQg
bG9uZyBpbmRleCwgdW5zaWduZWQgbG9uZyBwbmFtZSwgZmxvYXQqIHZhbHVlKSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIGdldFZlcnRleEF0dHJpYml2KHVuc2lnbmVkIGxvbmcgaW5kZXgsIHVuc2ln
bmVkIGxvbmcgcG5hbWUsIGludCogdmFsdWUpID0gMDsKKworICAgIHZpcnR1YWwgbG9uZyBnZXRW
ZXJ0ZXhBdHRyaWJPZmZzZXQodW5zaWduZWQgbG9uZyBpbmRleCwgdW5zaWduZWQgbG9uZyBwbmFt
ZSkgPSAwOworCisgICAgdmlydHVhbCB2b2lkIGhpbnQodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVu
c2lnbmVkIGxvbmcgbW9kZSkgPSAwOworICAgIHZpcnR1YWwgYm9vbCBpc0J1ZmZlcihXZWJHTElk
IGJ1ZmZlcikgPSAwOworICAgIHZpcnR1YWwgYm9vbCBpc0VuYWJsZWQodW5zaWduZWQgbG9uZyBj
YXApID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNGcmFtZWJ1ZmZlcihXZWJHTElkIGZyYW1lYnVm
ZmVyKSA9IDA7CisgICAgdmlydHVhbCBib29sIGlzUHJvZ3JhbShXZWJHTElkIHByb2dyYW0pID0g
MDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNSZW5kZXJidWZmZXIoV2ViR0xJZCByZW5kZXJidWZmZXIp
ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNTaGFkZXIoV2ViR0xJZCBzaGFkZXIpID0gMDsKKyAg
ICB2aXJ0dWFsIGJvb2wgaXNUZXh0dXJlKFdlYkdMSWQgdGV4dHVyZSkgPSAwOworICAgIHZpcnR1
YWwgdm9pZCBsaW5lV2lkdGgoZG91YmxlKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGxpbmtQcm9n
cmFtKFdlYkdMSWQgcHJvZ3JhbSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBwaXhlbFN0b3JlaSh1
bnNpZ25lZCBsb25nIHBuYW1lLCBsb25nIHBhcmFtKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHBv
bHlnb25PZmZzZXQoZG91YmxlIGZhY3RvciwgZG91YmxlIHVuaXRzKSA9IDA7CisKKyAgICB2aXJ0
dWFsIHZvaWQgcmVhZFBpeGVscyhsb25nIHgsIGxvbmcgeSwgdW5zaWduZWQgbG9uZyB3aWR0aCwg
dW5zaWduZWQgbG9uZyBoZWlnaHQsIHVuc2lnbmVkIGxvbmcgZm9ybWF0LCB1bnNpZ25lZCBsb25n
IHR5cGUsIHZvaWQqIHBpeGVscykgPSAwOworCisgICAgdmlydHVhbCB2b2lkIHJlbGVhc2VTaGFk
ZXJDb21waWxlcigpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVuZGVyYnVmZmVyU3RvcmFnZSh1
bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBpbnRlcm5hbGZvcm1hdCwgdW5zaWdu
ZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQpID0gMDsKKyAgICB2aXJ0dWFsIHZv
aWQgc2FtcGxlQ292ZXJhZ2UoZG91YmxlIHZhbHVlLCBib29sIGludmVydCkgPSAwOworICAgIHZp
cnR1YWwgdm9pZCBzY2lzc29yKGxvbmcgeCwgbG9uZyB5LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1
bnNpZ25lZCBsb25nIGhlaWdodCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzaGFkZXJTb3VyY2Uo
V2ViR0xJZCBzaGFkZXIsIGNvbnN0IGNoYXIqIHN0cmluZykgPSAwOworICAgIHZpcnR1YWwgdm9p
ZCBzdGVuY2lsRnVuYyh1bnNpZ25lZCBsb25nIGZ1bmMsIGxvbmcgcmVmLCB1bnNpZ25lZCBsb25n
IG1hc2spID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc3RlbmNpbEZ1bmNTZXBhcmF0ZSh1bnNpZ25l
ZCBsb25nIGZhY2UsIHVuc2lnbmVkIGxvbmcgZnVuYywgbG9uZyByZWYsIHVuc2lnbmVkIGxvbmcg
bWFzaykgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzdGVuY2lsTWFzayh1bnNpZ25lZCBsb25nIG1h
c2spID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc3RlbmNpbE1hc2tTZXBhcmF0ZSh1bnNpZ25lZCBs
b25nIGZhY2UsIHVuc2lnbmVkIGxvbmcgbWFzaykgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzdGVu
Y2lsT3AodW5zaWduZWQgbG9uZyBmYWlsLCB1bnNpZ25lZCBsb25nIHpmYWlsLCB1bnNpZ25lZCBs
b25nIHpwYXNzKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHN0ZW5jaWxPcFNlcGFyYXRlKHVuc2ln
bmVkIGxvbmcgZmFjZSwgdW5zaWduZWQgbG9uZyBmYWlsLCB1bnNpZ25lZCBsb25nIHpmYWlsLCB1
bnNpZ25lZCBsb25nIHpwYXNzKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgdGV4SW1hZ2UyRCh1
bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVkIGxldmVsLCB1bnNpZ25lZCBpbnRlcm5hbGZvcm1hdCwg
dW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCwgdW5zaWduZWQgYm9yZGVyLCB1bnNpZ25l
ZCBmb3JtYXQsIHVuc2lnbmVkIHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVscykgPSAwOworCisgICAg
dmlydHVhbCB2b2lkIHRleFBhcmFtZXRlcmYodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBwbmFt
ZSwgZmxvYXQgcGFyYW0pID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdGV4UGFyYW1ldGVyaSh1bnNp
Z25lZCB0YXJnZXQsIHVuc2lnbmVkIHBuYW1lLCBpbnQgcGFyYW0pID0gMDsKKworICAgIHZpcnR1
YWwgdm9pZCB0ZXhTdWJJbWFnZTJEKHVuc2lnbmVkIHRhcmdldCwgdW5zaWduZWQgbGV2ZWwsIHVu
c2lnbmVkIHhvZmZzZXQsIHVuc2lnbmVkIHlvZmZzZXQsIHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25l
ZCBoZWlnaHQsIHVuc2lnbmVkIGZvcm1hdCwgdW5zaWduZWQgdHlwZSwgY29uc3Qgdm9pZCogcGl4
ZWxzKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgdW5pZm9ybTFmKGxvbmcgbG9jYXRpb24sIGZs
b2F0IHgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdW5pZm9ybTFmdihsb25nIGxvY2F0aW9uLCBp
bnQgY291bnQsIGZsb2F0KiB2KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHVuaWZvcm0xaShsb25n
IGxvY2F0aW9uLCBpbnQgeCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCB1bmlmb3JtMWl2KGxvbmcg
bG9jYXRpb24sIGludCBjb3VudCwgaW50KiB2KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHVuaWZv
cm0yZihsb25nIGxvY2F0aW9uLCBmbG9hdCB4LCBmbG9hdCB5KSA9IDA7CisgICAgdmlydHVhbCB2
b2lkIHVuaWZvcm0yZnYobG9uZyBsb2NhdGlvbiwgaW50IGNvdW50LCBmbG9hdCogdikgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCB1bmlmb3JtMmkobG9uZyBsb2NhdGlvbiwgaW50IHgsIGludCB5KSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIHVuaWZvcm0yaXYobG9uZyBsb2NhdGlvbiwgaW50IGNvdW50
LCBpbnQqIHYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdW5pZm9ybTNmKGxvbmcgbG9jYXRpb24s
IGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHopID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdW5pZm9y
bTNmdihsb25nIGxvY2F0aW9uLCBpbnQgY291bnQsIGZsb2F0KiB2KSA9IDA7CisgICAgdmlydHVh
bCB2b2lkIHVuaWZvcm0zaShsb25nIGxvY2F0aW9uLCBpbnQgeCwgaW50IHksIGludCB6KSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIHVuaWZvcm0zaXYobG9uZyBsb2NhdGlvbiwgaW50IGNvdW50LCBp
bnQqIHYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdW5pZm9ybTRmKGxvbmcgbG9jYXRpb24sIGZs
b2F0IHgsIGZsb2F0IHksIGZsb2F0IHosIGZsb2F0IHcpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
dW5pZm9ybTRmdihsb25nIGxvY2F0aW9uLCBpbnQgY291bnQsIGZsb2F0KiB2KSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIHVuaWZvcm00aShsb25nIGxvY2F0aW9uLCBpbnQgeCwgaW50IHksIGludCB6
LCBpbnQgdykgPSAwOworICAgIHZpcnR1YWwgdm9pZCB1bmlmb3JtNGl2KGxvbmcgbG9jYXRpb24s
IGludCBjb3VudCwgaW50KiB2KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHVuaWZvcm1NYXRyaXgy
ZnYobG9uZyBsb2NhdGlvbiwgaW50IGNvdW50LCBib29sIHRyYW5zcG9zZSwgY29uc3QgZmxvYXQq
IHZhbHVlKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHVuaWZvcm1NYXRyaXgzZnYobG9uZyBsb2Nh
dGlvbiwgaW50IGNvdW50LCBib29sIHRyYW5zcG9zZSwgY29uc3QgZmxvYXQqIHZhbHVlKSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIHVuaWZvcm1NYXRyaXg0ZnYobG9uZyBsb2NhdGlvbiwgaW50IGNv
dW50LCBib29sIHRyYW5zcG9zZSwgY29uc3QgZmxvYXQqIHZhbHVlKSA9IDA7CisKKyAgICB2aXJ0
dWFsIHZvaWQgdXNlUHJvZ3JhbShXZWJHTElkIHByb2dyYW0pID0gMDsKKyAgICB2aXJ0dWFsIHZv
aWQgdmFsaWRhdGVQcm9ncmFtKFdlYkdMSWQgcHJvZ3JhbSkgPSAwOworCisgICAgdmlydHVhbCB2
b2lkIHZlcnRleEF0dHJpYjFmKHVuc2lnbmVkIGxvbmcgaW5keCwgZmxvYXQgeCkgPSAwOworICAg
IHZpcnR1YWwgdm9pZCB2ZXJ0ZXhBdHRyaWIxZnYodW5zaWduZWQgbG9uZyBpbmR4LCBjb25zdCBm
bG9hdCogdmFsdWVzKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHZlcnRleEF0dHJpYjJmKHVuc2ln
bmVkIGxvbmcgaW5keCwgZmxvYXQgeCwgZmxvYXQgeSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCB2
ZXJ0ZXhBdHRyaWIyZnYodW5zaWduZWQgbG9uZyBpbmR4LCBjb25zdCBmbG9hdCogdmFsdWVzKSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIHZlcnRleEF0dHJpYjNmKHVuc2lnbmVkIGxvbmcgaW5keCwg
ZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgeikgPSAwOworICAgIHZpcnR1YWwgdm9pZCB2ZXJ0ZXhB
dHRyaWIzZnYodW5zaWduZWQgbG9uZyBpbmR4LCBjb25zdCBmbG9hdCogdmFsdWVzKSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIHZlcnRleEF0dHJpYjRmKHVuc2lnbmVkIGxvbmcgaW5keCwgZmxvYXQg
eCwgZmxvYXQgeSwgZmxvYXQgeiwgZmxvYXQgdykgPSAwOworICAgIHZpcnR1YWwgdm9pZCB2ZXJ0
ZXhBdHRyaWI0ZnYodW5zaWduZWQgbG9uZyBpbmR4LCBjb25zdCBmbG9hdCogdmFsdWVzKSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIHZlcnRleEF0dHJpYlBvaW50ZXIodW5zaWduZWQgbG9uZyBpbmR4
LCBpbnQgc2l6ZSwgaW50IHR5cGUsIGJvb2wgbm9ybWFsaXplZCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHN0cmlkZSwgdW5zaWduZWQgbG9uZyBv
ZmZzZXQpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCB2aWV3cG9ydChsb25nIHgsIGxvbmcgeSwg
dW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQpID0gMDsKKworICAgIC8v
IFN1cHBvcnQgZm9yIGJ1ZmZlciBjcmVhdGlvbiBhbmQgZGVsZXRpb24uCisgICAgdmlydHVhbCB1
bnNpZ25lZCBjcmVhdGVCdWZmZXIoKSA9IDA7CisgICAgdmlydHVhbCB1bnNpZ25lZCBjcmVhdGVG
cmFtZWJ1ZmZlcigpID0gMDsKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGNyZWF0ZVByb2dyYW0oKSA9
IDA7CisgICAgdmlydHVhbCB1bnNpZ25lZCBjcmVhdGVSZW5kZXJidWZmZXIoKSA9IDA7CisgICAg
dmlydHVhbCB1bnNpZ25lZCBjcmVhdGVTaGFkZXIodW5zaWduZWQgbG9uZykgPSAwOworICAgIHZp
cnR1YWwgdW5zaWduZWQgY3JlYXRlVGV4dHVyZSgpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBk
ZWxldGVCdWZmZXIodW5zaWduZWQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlRnJhbWVi
dWZmZXIodW5zaWduZWQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlUHJvZ3JhbSh1bnNp
Z25lZCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVSZW5kZXJidWZmZXIodW5zaWduZWQp
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlU2hhZGVyKHVuc2lnbmVkKSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIGRlbGV0ZVRleHR1cmUodW5zaWduZWQpID0gMDsKK307CisKK30gLy8gbmFt
ZXNwYWNlIFdlYktpdAorCisjZW5kaWYKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2Vi
S2l0Q2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJLaXRD
bGllbnQuaAkocmV2aXNpb24gNTYyNjYpCisrKyBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYktp
dENsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSw2ICs0OSw3IEBAIGNsYXNzIFdlYkFwcGxp
Y2F0aW9uQ2FjaGVIb3N0OwogY2xhc3MgV2ViQXBwbGljYXRpb25DYWNoZUhvc3RDbGllbnQ7CiBj
bGFzcyBXZWJDbGlwYm9hcmQ7CiBjbGFzcyBXZWJDb29raWVKYXI7CitjbGFzcyBXZWJHcmFwaGlj
c0NvbnRleHQzRDsKIGNsYXNzIFdlYkluZGV4ZWREYXRhYmFzZTsKIGNsYXNzIFdlYk1lc3NhZ2VQ
b3J0Q2hhbm5lbDsKIGNsYXNzIFdlYk1pbWVSZWdpc3RyeTsKQEAgLTI2OSw2ICsyNzAsMTIgQEAg
cHVibGljOgogICAgIC8vIENhbGxhYmxlIGZyb20gYSBiYWNrZ3JvdW5kIFdlYktpdCB0aHJlYWQu
CiAgICAgdmlydHVhbCB2b2lkIGNhbGxPbk1haW5UaHJlYWQodm9pZCAoKmZ1bmMpKCkpIHsgfQog
CisgICAgLy8gV2ViR0wgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIC8vIE1heSByZXR1cm4gbnVsbCBpZiBXZWJHTCBp
cyBub3Qgc3VwcG9ydGVkLgorICAgIC8vIFJldHVybnMgbmV3bHkgYWxsb2NhdGVkIFdlYkdyYXBo
aWNzQ29udGV4dDNEIGluc3RhbmNlLgorICAgIHZpcnR1YWwgV2ViR3JhcGhpY3NDb250ZXh0M0Qq
IGNyZWF0ZUdyYXBoaWNzQ29udGV4dDNEKCkgeyByZXR1cm4gMDsgfQorCiBwcm90ZWN0ZWQ6CiAg
ICAgfldlYktpdENsaWVudCgpIHsgfQogfTsKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvR3Jh
cGhpY3NDb250ZXh0M0QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9zcmMvR3Jh
cGhpY3NDb250ZXh0M0QuY3BwCShyZXZpc2lvbiA1NjI2NikKKysrIFdlYktpdC9jaHJvbWl1bS9z
cmMvR3JhcGhpY3NDb250ZXh0M0QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCwxMyArMzQsMTIg
QEAKIAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCiAKLSNpbmNsdWRlICJDYWNoZWRJ
bWFnZS5oIgogI2luY2x1ZGUgIkNTdHJpbmcuaCIKKyNpbmNsdWRlICJDYWNoZWRJbWFnZS5oIgog
I2luY2x1ZGUgIkhUTUxDYW52YXNFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTEltYWdlRWxlbWVu
dC5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCi0j
aW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJXZWJHTEJ1ZmZlci5oIgogI2lu
Y2x1ZGUgIldlYkdMQnl0ZUFycmF5LmgiCiAjaW5jbHVkZSAiV2ViR0xGbG9hdEFycmF5LmgiCkBA
IC01MiwzOSArNTEsNDEgQEAKICNpbmNsdWRlICJXZWJHTFNoYWRlci5oIgogI2luY2x1ZGUgIldl
YkdMVGV4dHVyZS5oIgogI2luY2x1ZGUgIldlYkdMVW5zaWduZWRCeXRlQXJyYXkuaCIKKyNpbmNs
dWRlICJXZWJHcmFwaGljc0NvbnRleHQzRC5oIgorI2luY2x1ZGUgIldlYkdyYXBoaWNzQ29udGV4
dDNERGVmYXVsdEltcGwuaCIKKyNpbmNsdWRlICJXZWJLaXQuaCIKKyNpbmNsdWRlICJXZWJLaXRD
bGllbnQuaCIKIAogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2Mu
aD4KIAotI2lmIE9TKFdJTkRPV1MpCi0jaW5jbHVkZSA8d2luZG93cy5oPgotI2VuZGlmCi0KLSNp
bmNsdWRlICJHTC9nbGV3LmgiCi0KICNpZiBQTEFURk9STShDRykKICNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQuaCIKICNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ0dDb250ZXh0Lmg+CiAjaW5jbHVk
ZSA8Q29yZUdyYXBoaWNzL0NHSW1hZ2UuaD4KLSNpbmNsdWRlIDxPcGVuR0wvT3BlbkdMLmg+Ci0j
ZWxzZQotI2RlZmluZSBGTElQX0ZSQU1FQlVGRkVSX1ZFUlRJQ0FMTFkKLSNlbmRpZgotCi0jaWYg
T1MoREFSV0lOKQotI2RlZmluZSBVU0VfVEVYVFVSRV9SRUNUQU5HTEVfRk9SX0ZSQU1FQlVGRkVS
CiAjZW5kaWYKIAotI2lmIE9TKExJTlVYKQotI2luY2x1ZGUgPGRsZmNuLmg+Ci0jaW5jbHVkZSAi
R0wvZ2x4ZXcuaCIKLSNlbmRpZgorLy8gdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAotdXNpbmcgbmFt
ZXNwYWNlIHN0ZDsKKy8vIFRoZXJlIGFyZSB0d28gbGV2ZWxzIG9mIGRlbGVnYXRpb24gaW4gdGhp
cyBmaWxlOgorLy8KKy8vICAgMS4gR3JhcGhpY3NDb250ZXh0M0QgZGVsZWdhdGVzIHRvIEdyYXBo
aWNzQ29udGV4dDNESW50ZXJuYWwuIFRoaXMgaXMgZG9uZQorLy8gICAgICBzbyB0aGF0IHdlIGhh
dmUgc29tZSBwbGFjZSB0byBzdG9yZSBkYXRhIG1lbWJlcnMgY29tbW9uIGFtb25nCisvLyAgICAg
IGltcGxlbWVudGF0aW9uczsgR3JhcGhpY3NDb250ZXh0M0Qgb25seSBwcm92aWRlcyB1cyB0aGUg
bV9pbnRlcm5hbAorLy8gICAgICBwb2ludGVyLiBXZSBhbHdheXMgZGVsZWdhdGUgdG8gdGhlIEdy
YXBoaWNzQ29udGV4dDNESW50ZXJuYWwuIFdoaWxlIHdlCisvLyAgICAgIGNvdWxkIHNpZGVzdGVw
IGl0IGFuZCBnbyBkaXJlY3RseSB0byB0aGUgV2ViR3JhcGhpY3NDb250ZXh0M0QgaW4gc29tZQor
Ly8gICAgICBjYXNlcywgaXQgaXMgYmV0dGVyIGZvciBjb25zaXN0ZW5jeSB0byBhbHdheXMgZGVs
ZWdhdGUgdGhyb3VnaCBpdC4KKy8vCisvLyAgIDIuIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwg
ZGVsZWdhdGVzIHRvIGFuIGltcGxlbWVudGF0aW9uIG9mCisvLyAgICAgIFdlYkdyYXBoaWNzQ29u
dGV4dDNELiBUaGlzIGlzIGRvbmUgc28gd2UgaGF2ZSBhIHBsYWNlIHRvIGluamVjdCBhbgorLy8g
ICAgICBpbXBsZW1lbnRhdGlvbiB3aGljaCByZW1vdGVzIHRoZSBPcGVuR0wgY2FsbHMgYWNyb3Nz
IHByb2Nlc3Nlcy4KKy8vCisvLyBUaGUgbGVnYWN5LCBpbi1wcm9jZXNzLCBpbXBsZW1lbnRhdGlv
biB1c2VzIFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGwuCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotLy8gR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbCAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBH
cmFwaGljc0NvbnRleHQzREludGVybmFsCiAKIC8vIFVuY29tbWVudCB0aGlzIHRvIHJlbmRlciB0
byBhIHNlcGFyYXRlIHdpbmRvdyBmb3IgZGVidWdnaW5nCiAvLyAjZGVmaW5lIFJFTkRFUl9UT19E
RUJVR0dJTkdfV0lORE9XCkBAIC05Myw4MyArOTQsMjA3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogY2xhc3MgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbCB7CiBwdWJsaWM6Ci0gICAgR3JhcGhp
Y3NDb250ZXh0M0RJbnRlcm5hbChHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRycyk7
CisgICAgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbCgpOwogICAgIH5HcmFwaGljc0NvbnRleHQz
REludGVybmFsKCk7CiAKLSAgICBib29sIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGJvb2wg
aW5pdGlhbGl6ZShHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRycyk7CiAKICAgICBQ
bGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEIHBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QoKSBjb25z
dDsKICAgICBQbGF0Zm9ybTNET2JqZWN0IHBsYXRmb3JtVGV4dHVyZSgpIGNvbnN0OwogCisgICAg
Ym9vbCBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKworICAgIGludCBzaXplSW5CeXRlcyhpbnQgdHlw
ZSk7CisKICAgICB2b2lkIHJlc2hhcGUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKIAogICAgIHZv
aWQgYmVnaW5QYWludChXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQpOworICAgIHZvaWQg
ZW5kUGFpbnQoKTsKIAotICAgIGJvb2wgdmFsaWRhdGVUZXh0dXJlVGFyZ2V0KGludCB0YXJnZXQp
OwotICAgIGJvb2wgdmFsaWRhdGVUZXh0dXJlUGFyYW1ldGVyKGludCBwYXJhbSk7Ci0KKyAgICAv
Ly0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KKyAgICAvLyBFbnRyeSBwb2ludHMgZm9yIFdlYkdMLgorICAgIC8vCiAg
ICAgdm9pZCBhY3RpdmVUZXh0dXJlKHVuc2lnbmVkIGxvbmcgdGV4dHVyZSk7Ci0gICAgdm9pZCBi
aW5kQnVmZmVyKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LAotICAgICAgICAgICAgICAgICAgICBXZWJH
TEJ1ZmZlciogYnVmZmVyKTsKLSAgICB2b2lkIGJpbmRGcmFtZWJ1ZmZlcih1bnNpZ25lZCBsb25n
IHRhcmdldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBXZWJHTEZyYW1lYnVmZmVyKiBmcmFt
ZWJ1ZmZlcik7Ci0gICAgdm9pZCBiaW5kVGV4dHVyZSh1bnNpZ25lZCBsb25nIHRhcmdldCwKLSAg
ICAgICAgICAgICAgICAgICAgIFdlYkdMVGV4dHVyZSogdGV4dHVyZSk7Ci0gICAgdm9pZCBidWZm
ZXJEYXRhSW1wbCh1bnNpZ25lZCBsb25nIHRhcmdldCwgaW50IHNpemUsIGNvbnN0IHZvaWQqIGRh
dGEsIHVuc2lnbmVkIGxvbmcgdXNhZ2UpOworICAgIHZvaWQgYXR0YWNoU2hhZGVyKFdlYkdMUHJv
Z3JhbSogcHJvZ3JhbSwgV2ViR0xTaGFkZXIqIHNoYWRlcik7CisgICAgdm9pZCBiaW5kQXR0cmli
TG9jYXRpb24oV2ViR0xQcm9ncmFtKiwgdW5zaWduZWQgbG9uZyBpbmRleCwgY29uc3QgU3RyaW5n
JiBuYW1lKTsKKyAgICB2b2lkIGJpbmRCdWZmZXIodW5zaWduZWQgbG9uZyB0YXJnZXQsIFdlYkdM
QnVmZmVyKik7CisgICAgdm9pZCBiaW5kRnJhbWVidWZmZXIodW5zaWduZWQgbG9uZyB0YXJnZXQs
IFdlYkdMRnJhbWVidWZmZXIqKTsKKyAgICB2b2lkIGJpbmRSZW5kZXJidWZmZXIodW5zaWduZWQg
bG9uZyB0YXJnZXQsIFdlYkdMUmVuZGVyYnVmZmVyKik7CisgICAgdm9pZCBiaW5kVGV4dHVyZSh1
bnNpZ25lZCBsb25nIHRhcmdldCwgV2ViR0xUZXh0dXJlKiB0ZXh0dXJlKTsKKyAgICB2b2lkIGJs
ZW5kQ29sb3IoZG91YmxlIHJlZCwgZG91YmxlIGdyZWVuLCBkb3VibGUgYmx1ZSwgZG91YmxlIGFs
cGhhKTsKKyAgICB2b2lkIGJsZW5kRXF1YXRpb24odW5zaWduZWQgbG9uZyBtb2RlKTsKKyAgICB2
b2lkIGJsZW5kRXF1YXRpb25TZXBhcmF0ZSh1bnNpZ25lZCBsb25nIG1vZGVSR0IsIHVuc2lnbmVk
IGxvbmcgbW9kZUFscGhhKTsKKyAgICB2b2lkIGJsZW5kRnVuYyh1bnNpZ25lZCBsb25nIHNmYWN0
b3IsIHVuc2lnbmVkIGxvbmcgZGZhY3Rvcik7CisgICAgdm9pZCBibGVuZEZ1bmNTZXBhcmF0ZSh1
bnNpZ25lZCBsb25nIHNyY1JHQiwgdW5zaWduZWQgbG9uZyBkc3RSR0IsIHVuc2lnbmVkIGxvbmcg
c3JjQWxwaGEsIHVuc2lnbmVkIGxvbmcgZHN0QWxwaGEpOworCisgICAgdm9pZCBidWZmZXJEYXRh
KHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBpbnQgc2l6ZSwgdW5zaWduZWQgbG9uZyB1c2FnZSk7Cisg
ICAgdm9pZCBidWZmZXJEYXRhKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBXZWJHTEFycmF5KiBkYXRh
LCB1bnNpZ25lZCBsb25nIHVzYWdlKTsKKyAgICB2b2lkIGJ1ZmZlclN1YkRhdGEodW5zaWduZWQg
bG9uZyB0YXJnZXQsIGxvbmcgb2Zmc2V0LCBXZWJHTEFycmF5KiBkYXRhKTsKKworICAgIHVuc2ln
bmVkIGxvbmcgY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyh1bnNpZ25lZCBsb25nIHRhcmdldCk7Cisg
ICAgdm9pZCBjbGVhcih1bnNpZ25lZCBsb25nIG1hc2spOworICAgIHZvaWQgY2xlYXJDb2xvcihk
b3VibGUgcmVkLCBkb3VibGUgZ3JlZW4sIGRvdWJsZSBibHVlLCBkb3VibGUgYWxwaGEpOworICAg
IHZvaWQgY2xlYXJEZXB0aChkb3VibGUgZGVwdGgpOworICAgIHZvaWQgY2xlYXJTdGVuY2lsKGxv
bmcgcyk7CisgICAgdm9pZCBjb2xvck1hc2soYm9vbCByZWQsIGJvb2wgZ3JlZW4sIGJvb2wgYmx1
ZSwgYm9vbCBhbHBoYSk7CisgICAgdm9pZCBjb21waWxlU2hhZGVyKFdlYkdMU2hhZGVyKik7CisK
KyAgICB2b2lkIGNvcHlUZXhJbWFnZTJEKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBsb25nIGxldmVs
LCB1bnNpZ25lZCBsb25nIGludGVybmFsZm9ybWF0LCBsb25nIHgsIGxvbmcgeSwgdW5zaWduZWQg
bG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQsIGxvbmcgYm9yZGVyKTsKKyAgICB2b2lk
IGNvcHlUZXhTdWJJbWFnZTJEKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBsb25nIGxldmVsLCBsb25n
IHhvZmZzZXQsIGxvbmcgeW9mZnNldCwgbG9uZyB4LCBsb25nIHksIHVuc2lnbmVkIGxvbmcgd2lk
dGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0KTsKKyAgICB2b2lkIGN1bGxGYWNlKHVuc2lnbmVkIGxv
bmcgbW9kZSk7CisgICAgdm9pZCBkZXB0aEZ1bmModW5zaWduZWQgbG9uZyBmdW5jKTsKKyAgICB2
b2lkIGRlcHRoTWFzayhib29sIGZsYWcpOworICAgIHZvaWQgZGVwdGhSYW5nZShkb3VibGUgek5l
YXIsIGRvdWJsZSB6RmFyKTsKKyAgICB2b2lkIGRldGFjaFNoYWRlcihXZWJHTFByb2dyYW0qLCBX
ZWJHTFNoYWRlciopOworICAgIHZvaWQgZGlzYWJsZSh1bnNpZ25lZCBsb25nIGNhcCk7CiAgICAg
dm9pZCBkaXNhYmxlVmVydGV4QXR0cmliQXJyYXkodW5zaWduZWQgbG9uZyBpbmRleCk7CisgICAg
dm9pZCBkcmF3QXJyYXlzKHVuc2lnbmVkIGxvbmcgbW9kZSwgbG9uZyBmaXJzdCwgbG9uZyBjb3Vu
dCk7CisgICAgdm9pZCBkcmF3RWxlbWVudHModW5zaWduZWQgbG9uZyBtb2RlLCB1bnNpZ25lZCBs
b25nIGNvdW50LCB1bnNpZ25lZCBsb25nIHR5cGUsIGxvbmcgb2Zmc2V0KTsKKworICAgIHZvaWQg
ZW5hYmxlKHVuc2lnbmVkIGxvbmcgY2FwKTsKICAgICB2b2lkIGVuYWJsZVZlcnRleEF0dHJpYkFy
cmF5KHVuc2lnbmVkIGxvbmcgaW5kZXgpOwotICAgIHVuc2lnbmVkIGxvbmcgZ2V0RXJyb3IoKTsK
KyAgICB2b2lkIGZpbmlzaCgpOworICAgIHZvaWQgZmx1c2goKTsKKyAgICB2b2lkIGZyYW1lYnVm
ZmVyUmVuZGVyYnVmZmVyKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIGF0dGFj
aG1lbnQsIHVuc2lnbmVkIGxvbmcgcmVuZGVyYnVmZmVydGFyZ2V0LCBXZWJHTFJlbmRlcmJ1ZmZl
ciopOworICAgIHZvaWQgZnJhbWVidWZmZXJUZXh0dXJlMkQodW5zaWduZWQgbG9uZyB0YXJnZXQs
IHVuc2lnbmVkIGxvbmcgYXR0YWNobWVudCwgdW5zaWduZWQgbG9uZyB0ZXh0YXJnZXQsIFdlYkdM
VGV4dHVyZSosIGxvbmcgbGV2ZWwpOworICAgIHZvaWQgZnJvbnRGYWNlKHVuc2lnbmVkIGxvbmcg
bW9kZSk7CisgICAgdm9pZCBnZW5lcmF0ZU1pcG1hcCh1bnNpZ25lZCBsb25nIHRhcmdldCk7CisK
KyAgICBib29sIGdldEFjdGl2ZUF0dHJpYihXZWJHTFByb2dyYW0qIHByb2dyYW0sIHVuc2lnbmVk
IGxvbmcgaW5kZXgsIEFjdGl2ZUluZm8mKTsKKyAgICBib29sIGdldEFjdGl2ZVVuaWZvcm0oV2Vi
R0xQcm9ncmFtKiBwcm9ncmFtLCB1bnNpZ25lZCBsb25nIGluZGV4LCBBY3RpdmVJbmZvJik7CisK
KyAgICBpbnQgIGdldEF0dHJpYkxvY2F0aW9uKFdlYkdMUHJvZ3JhbSosIGNvbnN0IFN0cmluZyYg
bmFtZSk7CisKKyAgICB2b2lkIGdldEJvb2xlYW52KHVuc2lnbmVkIGxvbmcgcG5hbWUsIHVuc2ln
bmVkIGNoYXIqIHZhbHVlKTsKKworICAgIHZvaWQgZ2V0QnVmZmVyUGFyYW1ldGVyaXYodW5zaWdu
ZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgcG5hbWUsIGludCogdmFsdWUpOworCiAgICAg
R3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgZ2V0Q29udGV4dEF0dHJpYnV0ZXMoKTsKLSAg
ICB2b2lkIHZlcnRleEF0dHJpYlBvaW50ZXIodW5zaWduZWQgbG9uZyBpbmR4LCBpbnQgc2l6ZSwg
aW50IHR5cGUsIGJvb2wgbm9ybWFsaXplZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dW5zaWduZWQgbG9uZyBzdHJpZGUsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KTsKLSAgICB2b2lkIHZp
ZXdwb3J0SW1wbChsb25nIHgsIGxvbmcgeSwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQg
bG9uZyBoZWlnaHQpOwogCi0gICAgdm9pZCBzeW50aGVzaXplR0xFcnJvcih1bnNpZ25lZCBsb25n
IGVycm9yKTsKKyAgICB1bnNpZ25lZCBsb25nIGdldEVycm9yKCk7CiAKLXByaXZhdGU6Ci0gICAg
R3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgbV9hdHRyczsKKyAgICB2b2lkIGdldEZsb2F0
dih1bnNpZ25lZCBsb25nIHBuYW1lLCBmbG9hdCogdmFsdWUpOwogCi0gICAgdW5zaWduZWQgaW50
IG1fdGV4dHVyZTsKLSAgICB1bnNpZ25lZCBpbnQgbV9mYm87Ci0gICAgdW5zaWduZWQgaW50IG1f
ZGVwdGhCdWZmZXI7Ci0gICAgdW5zaWduZWQgaW50IG1fY2FjaGVkV2lkdGgsIG1fY2FjaGVkSGVp
Z2h0OworICAgIHZvaWQgZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYodW5zaWdu
ZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgYXR0YWNobWVudCwgdW5zaWduZWQgbG9uZyBw
bmFtZSwgaW50KiB2YWx1ZSk7CiAKLSAgICAvLyBGb3IgdHJhY2tpbmcgd2hpY2ggRkJPIGlzIGJv
dW5kCi0gICAgdW5zaWduZWQgaW50IG1fYm91bmRGQk87CisgICAgdm9pZCBnZXRJbnRlZ2Vydih1
bnNpZ25lZCBsb25nIHBuYW1lLCBpbnQqIHZhbHVlKTsKIAotI2lmZGVmIEZMSVBfRlJBTUVCVUZG
RVJfVkVSVElDQUxMWQotICAgIHVuc2lnbmVkIGNoYXIqIG1fc2NhbmxpbmU7Ci0gICAgdm9pZCBm
bGlwVmVydGljYWxseSh1bnNpZ25lZCBjaGFyKiBmcmFtZWJ1ZmZlciwKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIGludCB3aWR0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgIHVu
c2lnbmVkIGludCBoZWlnaHQpOwotI2VuZGlmCisgICAgdm9pZCBnZXRQcm9ncmFtaXYoV2ViR0xQ
cm9ncmFtKiBwcm9ncmFtLCB1bnNpZ25lZCBsb25nIHBuYW1lLCBpbnQqIHZhbHVlKTsKKworICAg
IFN0cmluZyBnZXRQcm9ncmFtSW5mb0xvZyhXZWJHTFByb2dyYW0qKTsKKworICAgIHZvaWQgZ2V0
UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXYodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxv
bmcgcG5hbWUsIGludCogdmFsdWUpOworCisgICAgdm9pZCBnZXRTaGFkZXJpdihXZWJHTFNoYWRl
ciosIHVuc2lnbmVkIGxvbmcgcG5hbWUsIGludCogdmFsdWUpOworCisgICAgU3RyaW5nIGdldFNo
YWRlckluZm9Mb2coV2ViR0xTaGFkZXIqKTsKKworICAgIFN0cmluZyBnZXRTaGFkZXJTb3VyY2Uo
V2ViR0xTaGFkZXIqKTsKKyAgICBTdHJpbmcgZ2V0U3RyaW5nKHVuc2lnbmVkIGxvbmcgbmFtZSk7
CisKKyAgICB2b2lkIGdldFRleFBhcmFtZXRlcmZ2KHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNp
Z25lZCBsb25nIHBuYW1lLCBmbG9hdCogdmFsdWUpOworICAgIHZvaWQgZ2V0VGV4UGFyYW1ldGVy
aXYodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgcG5hbWUsIGludCogdmFsdWUp
OworCisgICAgdm9pZCBnZXRVbmlmb3JtZnYoV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBsb25nIGxv
Y2F0aW9uLCBmbG9hdCogdmFsdWUpOworICAgIHZvaWQgZ2V0VW5pZm9ybWl2KFdlYkdMUHJvZ3Jh
bSogcHJvZ3JhbSwgbG9uZyBsb2NhdGlvbiwgaW50KiB2YWx1ZSk7CisKKyAgICBsb25nIGdldFVu
aWZvcm1Mb2NhdGlvbihXZWJHTFByb2dyYW0qLCBjb25zdCBTdHJpbmcmIG5hbWUpOworCisgICAg
dm9pZCBnZXRWZXJ0ZXhBdHRyaWJmdih1bnNpZ25lZCBsb25nIGluZGV4LCB1bnNpZ25lZCBsb25n
IHBuYW1lLCBmbG9hdCogdmFsdWUpOworICAgIHZvaWQgZ2V0VmVydGV4QXR0cmliaXYodW5zaWdu
ZWQgbG9uZyBpbmRleCwgdW5zaWduZWQgbG9uZyBwbmFtZSwgaW50KiB2YWx1ZSk7CisKKyAgICBs
b25nIGdldFZlcnRleEF0dHJpYk9mZnNldCh1bnNpZ25lZCBsb25nIGluZGV4LCB1bnNpZ25lZCBs
b25nIHBuYW1lKTsKKworICAgIHZvaWQgaGludCh1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWdu
ZWQgbG9uZyBtb2RlKTsKKyAgICBib29sIGlzQnVmZmVyKFdlYkdMQnVmZmVyKik7CisgICAgYm9v
bCBpc0VuYWJsZWQodW5zaWduZWQgbG9uZyBjYXApOworICAgIGJvb2wgaXNGcmFtZWJ1ZmZlcihX
ZWJHTEZyYW1lYnVmZmVyKik7CisgICAgYm9vbCBpc1Byb2dyYW0oV2ViR0xQcm9ncmFtKik7Cisg
ICAgYm9vbCBpc1JlbmRlcmJ1ZmZlcihXZWJHTFJlbmRlcmJ1ZmZlciopOworICAgIGJvb2wgaXNT
aGFkZXIoV2ViR0xTaGFkZXIqKTsKKyAgICBib29sIGlzVGV4dHVyZShXZWJHTFRleHR1cmUqKTsK
KyAgICB2b2lkIGxpbmVXaWR0aChkb3VibGUpOworICAgIHZvaWQgbGlua1Byb2dyYW0oV2ViR0xQ
cm9ncmFtKik7CisgICAgdm9pZCBwaXhlbFN0b3JlaSh1bnNpZ25lZCBsb25nIHBuYW1lLCBsb25n
IHBhcmFtKTsKKyAgICB2b2lkIHBvbHlnb25PZmZzZXQoZG91YmxlIGZhY3RvciwgZG91YmxlIHVu
aXRzKTsKKworICAgIFBhc3NSZWZQdHI8V2ViR0xBcnJheT4gcmVhZFBpeGVscyhsb25nIHgsIGxv
bmcgeSwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQsIHVuc2lnbmVk
IGxvbmcgZm9ybWF0LCB1bnNpZ25lZCBsb25nIHR5cGUpOworCisgICAgdm9pZCByZWxlYXNlU2hh
ZGVyQ29tcGlsZXIoKTsKKyAgICB2b2lkIHJlbmRlcmJ1ZmZlclN0b3JhZ2UodW5zaWduZWQgbG9u
ZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgaW50ZXJuYWxmb3JtYXQsIHVuc2lnbmVkIGxvbmcgd2lk
dGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0KTsKKyAgICB2b2lkIHNhbXBsZUNvdmVyYWdlKGRvdWJs
ZSB2YWx1ZSwgYm9vbCBpbnZlcnQpOworICAgIHZvaWQgc2Npc3Nvcihsb25nIHgsIGxvbmcgeSwg
dW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQpOworICAgIHZvaWQgc2hh
ZGVyU291cmNlKFdlYkdMU2hhZGVyKiwgY29uc3QgU3RyaW5nJiBzdHJpbmcpOworICAgIHZvaWQg
c3RlbmNpbEZ1bmModW5zaWduZWQgbG9uZyBmdW5jLCBsb25nIHJlZiwgdW5zaWduZWQgbG9uZyBt
YXNrKTsKKyAgICB2b2lkIHN0ZW5jaWxGdW5jU2VwYXJhdGUodW5zaWduZWQgbG9uZyBmYWNlLCB1
bnNpZ25lZCBsb25nIGZ1bmMsIGxvbmcgcmVmLCB1bnNpZ25lZCBsb25nIG1hc2spOworICAgIHZv
aWQgc3RlbmNpbE1hc2sodW5zaWduZWQgbG9uZyBtYXNrKTsKKyAgICB2b2lkIHN0ZW5jaWxNYXNr
U2VwYXJhdGUodW5zaWduZWQgbG9uZyBmYWNlLCB1bnNpZ25lZCBsb25nIG1hc2spOworICAgIHZv
aWQgc3RlbmNpbE9wKHVuc2lnbmVkIGxvbmcgZmFpbCwgdW5zaWduZWQgbG9uZyB6ZmFpbCwgdW5z
aWduZWQgbG9uZyB6cGFzcyk7CisgICAgdm9pZCBzdGVuY2lsT3BTZXBhcmF0ZSh1bnNpZ25lZCBs
b25nIGZhY2UsIHVuc2lnbmVkIGxvbmcgZmFpbCwgdW5zaWduZWQgbG9uZyB6ZmFpbCwgdW5zaWdu
ZWQgbG9uZyB6cGFzcyk7CisKKyAgICAvLyBUaGVzZSBuZXh0IHNldmVyYWwgZnVuY3Rpb25zIHJl
dHVybiBhbiBlcnJvciBjb2RlICgwIGlmIG5vIGVycm9ycykgcmF0aGVyIHRoYW4gdXNpbmcgYW4g
RXhjZXB0aW9uQ29kZS4KKyAgICAvLyBDdXJyZW50bHkgdGhleSByZXR1cm4gLTEgb24gYW55IGVy
cm9yLgorICAgIGludCB0ZXhJbWFnZTJEKHVuc2lnbmVkIHRhcmdldCwgdW5zaWduZWQgbGV2ZWws
IHVuc2lnbmVkIGludGVybmFsZm9ybWF0LCB1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0
LCB1bnNpZ25lZCBib3JkZXIsIHVuc2lnbmVkIGZvcm1hdCwgdW5zaWduZWQgdHlwZSwgdm9pZCog
cGl4ZWxzKTsKKworICAgIHZvaWQgdGV4UGFyYW1ldGVyZih1bnNpZ25lZCB0YXJnZXQsIHVuc2ln
bmVkIHBuYW1lLCBmbG9hdCBwYXJhbSk7CisgICAgdm9pZCB0ZXhQYXJhbWV0ZXJpKHVuc2lnbmVk
IHRhcmdldCwgdW5zaWduZWQgcG5hbWUsIGludCBwYXJhbSk7CisKKyAgICBpbnQgdGV4U3ViSW1h
Z2UyRCh1bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVkIGxldmVsLCB1bnNpZ25lZCB4b2Zmc2V0LCB1
bnNpZ25lZCB5b2Zmc2V0LCB1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0LCB1bnNpZ25l
ZCBmb3JtYXQsIHVuc2lnbmVkIHR5cGUsIHZvaWQqIHBpeGVscyk7CisKKyAgICB2b2lkIHVuaWZv
cm0xZihsb25nIGxvY2F0aW9uLCBmbG9hdCB4KTsKKyAgICB2b2lkIHVuaWZvcm0xZnYobG9uZyBs
b2NhdGlvbiwgZmxvYXQqIHYsIGludCBzaXplKTsKKyAgICB2b2lkIHVuaWZvcm0xaShsb25nIGxv
Y2F0aW9uLCBpbnQgeCk7CisgICAgdm9pZCB1bmlmb3JtMWl2KGxvbmcgbG9jYXRpb24sIGludCog
diwgaW50IHNpemUpOworICAgIHZvaWQgdW5pZm9ybTJmKGxvbmcgbG9jYXRpb24sIGZsb2F0IHgs
IGZsb2F0IHkpOworICAgIHZvaWQgdW5pZm9ybTJmdihsb25nIGxvY2F0aW9uLCBmbG9hdCogdiwg
aW50IHNpemUpOworICAgIHZvaWQgdW5pZm9ybTJpKGxvbmcgbG9jYXRpb24sIGludCB4LCBpbnQg
eSk7CisgICAgdm9pZCB1bmlmb3JtMml2KGxvbmcgbG9jYXRpb24sIGludCogdiwgaW50IHNpemUp
OworICAgIHZvaWQgdW5pZm9ybTNmKGxvbmcgbG9jYXRpb24sIGZsb2F0IHgsIGZsb2F0IHksIGZs
b2F0IHopOworICAgIHZvaWQgdW5pZm9ybTNmdihsb25nIGxvY2F0aW9uLCBmbG9hdCogdiwgaW50
IHNpemUpOworICAgIHZvaWQgdW5pZm9ybTNpKGxvbmcgbG9jYXRpb24sIGludCB4LCBpbnQgeSwg
aW50IHopOworICAgIHZvaWQgdW5pZm9ybTNpdihsb25nIGxvY2F0aW9uLCBpbnQqIHYsIGludCBz
aXplKTsKKyAgICB2b2lkIHVuaWZvcm00Zihsb25nIGxvY2F0aW9uLCBmbG9hdCB4LCBmbG9hdCB5
LCBmbG9hdCB6LCBmbG9hdCB3KTsKKyAgICB2b2lkIHVuaWZvcm00ZnYobG9uZyBsb2NhdGlvbiwg
ZmxvYXQqIHYsIGludCBzaXplKTsKKyAgICB2b2lkIHVuaWZvcm00aShsb25nIGxvY2F0aW9uLCBp
bnQgeCwgaW50IHksIGludCB6LCBpbnQgdyk7CisgICAgdm9pZCB1bmlmb3JtNGl2KGxvbmcgbG9j
YXRpb24sIGludCogdiwgaW50IHNpemUpOworICAgIHZvaWQgdW5pZm9ybU1hdHJpeDJmdihsb25n
IGxvY2F0aW9uLCBib29sIHRyYW5zcG9zZSwgZmxvYXQqIHZhbHVlLCBpbnQgc2l6ZSk7CisgICAg
dm9pZCB1bmlmb3JtTWF0cml4M2Z2KGxvbmcgbG9jYXRpb24sIGJvb2wgdHJhbnNwb3NlLCBmbG9h
dCogdmFsdWUsIGludCBzaXplKTsKKyAgICB2b2lkIHVuaWZvcm1NYXRyaXg0ZnYobG9uZyBsb2Nh
dGlvbiwgYm9vbCB0cmFuc3Bvc2UsIGZsb2F0KiB2YWx1ZSwgaW50IHNpemUpOworCisgICAgdm9p
ZCB1c2VQcm9ncmFtKFdlYkdMUHJvZ3JhbSopOworICAgIHZvaWQgdmFsaWRhdGVQcm9ncmFtKFdl
YkdMUHJvZ3JhbSopOworCisgICAgdm9pZCB2ZXJ0ZXhBdHRyaWIxZih1bnNpZ25lZCBsb25nIGlu
ZHgsIGZsb2F0IHgpOworICAgIHZvaWQgdmVydGV4QXR0cmliMWZ2KHVuc2lnbmVkIGxvbmcgaW5k
eCwgZmxvYXQqIHZhbHVlcyk7CisgICAgdm9pZCB2ZXJ0ZXhBdHRyaWIyZih1bnNpZ25lZCBsb25n
IGluZHgsIGZsb2F0IHgsIGZsb2F0IHkpOworICAgIHZvaWQgdmVydGV4QXR0cmliMmZ2KHVuc2ln
bmVkIGxvbmcgaW5keCwgZmxvYXQqIHZhbHVlcyk7CisgICAgdm9pZCB2ZXJ0ZXhBdHRyaWIzZih1
bnNpZ25lZCBsb25nIGluZHgsIGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHopOworICAgIHZvaWQg
dmVydGV4QXR0cmliM2Z2KHVuc2lnbmVkIGxvbmcgaW5keCwgZmxvYXQqIHZhbHVlcyk7CisgICAg
dm9pZCB2ZXJ0ZXhBdHRyaWI0Zih1bnNpZ25lZCBsb25nIGluZHgsIGZsb2F0IHgsIGZsb2F0IHks
IGZsb2F0IHosIGZsb2F0IHcpOworICAgIHZvaWQgdmVydGV4QXR0cmliNGZ2KHVuc2lnbmVkIGxv
bmcgaW5keCwgZmxvYXQqIHZhbHVlcyk7CisgICAgdm9pZCB2ZXJ0ZXhBdHRyaWJQb2ludGVyKHVu
c2lnbmVkIGxvbmcgaW5keCwgaW50IHNpemUsIGludCB0eXBlLCBib29sIG5vcm1hbGl6ZWQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgc3RyaWRlLCB1bnNpZ25l
ZCBsb25nIG9mZnNldCk7CisKKyAgICB2b2lkIHZpZXdwb3J0KGxvbmcgeCwgbG9uZyB5LCB1bnNp
Z25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCk7CiAKLSAgICAvLyBOb3RlOiB3
ZSBhcmVuJ3QgY3VycmVudGx5IHVzaW5nIHRoaXMgaW5mb3JtYXRpb24sIGJ1dCB3ZSB3aWxsCi0g
ICAgLy8gbmVlZCB0byBpbiBvcmRlciB0byB2ZXJpZnkgdGhhdCBhbGwgZW5hYmxlZCB2ZXJ0ZXgg
YXJyYXlzIGhhdmUKLSAgICAvLyBhIHZhbGlkIGJ1ZmZlciBib3VuZCAtLSB0byBhdm9pZCBjcmFz
aGVzIG9uIGNlcnRhaW4gY2FyZHMuCi0gICAgdW5zaWduZWQgaW50IG1fYm91bmRBcnJheUJ1ZmZl
cjsKLSAgICBjbGFzcyBWZXJ0ZXhBdHRyaWJQb2ludGVyU3RhdGUgewotICAgIHB1YmxpYzoKLSAg
ICAgICAgVmVydGV4QXR0cmliUG9pbnRlclN0YXRlKCk7Ci0KLSAgICAgICAgYm9vbCBlbmFibGVk
OwotICAgICAgICB1bnNpZ25lZCBsb25nIGJ1ZmZlcjsKLSAgICAgICAgdW5zaWduZWQgbG9uZyBp
bmR4OwotICAgICAgICBpbnQgc2l6ZTsKLSAgICAgICAgaW50IHR5cGU7Ci0gICAgICAgIGJvb2wg
bm9ybWFsaXplZDsKLSAgICAgICAgdW5zaWduZWQgbG9uZyBzdHJpZGU7Ci0gICAgICAgIHVuc2ln
bmVkIGxvbmcgb2Zmc2V0OwotICAgIH07Ci0KLSAgICBlbnVtIHsKLSAgICAgICAgTnVtVHJhY2tl
ZFBvaW50ZXJTdGF0ZXMgPSAyCi0gICAgfTsKLSAgICBWZXJ0ZXhBdHRyaWJQb2ludGVyU3RhdGUg
bV92ZXJ0ZXhBdHRyaWJQb2ludGVyU3RhdGVbTnVtVHJhY2tlZFBvaW50ZXJTdGF0ZXNdOworICAg
IHVuc2lnbmVkIGNyZWF0ZUJ1ZmZlcigpOworICAgIHVuc2lnbmVkIGNyZWF0ZUZyYW1lYnVmZmVy
KCk7CisgICAgdW5zaWduZWQgY3JlYXRlUHJvZ3JhbSgpOworICAgIHVuc2lnbmVkIGNyZWF0ZVJl
bmRlcmJ1ZmZlcigpOworICAgIHVuc2lnbmVkIGNyZWF0ZVNoYWRlcih1bnNpZ25lZCBsb25nKTsK
KyAgICB1bnNpZ25lZCBjcmVhdGVUZXh0dXJlKCk7CisKKyAgICB2b2lkIGRlbGV0ZUJ1ZmZlcih1
bnNpZ25lZCk7CisgICAgdm9pZCBkZWxldGVGcmFtZWJ1ZmZlcih1bnNpZ25lZCk7CisgICAgdm9p
ZCBkZWxldGVQcm9ncmFtKHVuc2lnbmVkKTsKKyAgICB2b2lkIGRlbGV0ZVJlbmRlcmJ1ZmZlcih1
bnNpZ25lZCk7CisgICAgdm9pZCBkZWxldGVTaGFkZXIodW5zaWduZWQpOworICAgIHZvaWQgZGVs
ZXRlVGV4dHVyZSh1bnNpZ25lZCk7CiAKLSAgICAvLyBFcnJvcnMgcmFpc2VkIGJ5IHN5bnRoZXNp
emVHTEVycm9yKCkuCi0gICAgTGlzdEhhc2hTZXQ8dW5zaWduZWQgbG9uZz4gbV9zeW50aGV0aWNF
cnJvcnM7CisgICAgdm9pZCBzeW50aGVzaXplR0xFcnJvcih1bnNpZ25lZCBsb25nIGVycm9yKTsK
IAorcHJpdmF0ZToKKyAgICBPd25QdHI8V2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRD4gbV9p
bXBsOwogI2lmIFBMQVRGT1JNKFNLSUEpCiAgICAgLy8gSWYgdGhlIHdpZHRoIGFuZCBoZWlnaHQg
b2YgdGhlIENhbnZhcydzIGJhY2tpbmcgc3RvcmUgZG9uJ3QKICAgICAvLyBtYXRjaCB0aG9zZSB0
aGF0IHdlIHdlcmUgZ2l2ZW4gaW4gdGhlIG1vc3QgcmVjZW50IGNhbGwgdG8KQEAgLTE3OSw1OTMg
KzMwNCw4MyBAQCBwcml2YXRlOgogICAgIFNrQml0bWFwKiBtX3Jlc2l6aW5nQml0bWFwOwogI2Vu
ZGlmCiAKLSAgICBzdGF0aWMgYm9vbCBzX2luaXRpYWxpemVkR0xFVzsKLSNpZiBPUyhXSU5ET1dT
KQotICAgIEhXTkQgIG1fY2FudmFzV2luZG93OwotICAgIEhEQyAgIG1fY2FudmFzREM7Ci0gICAg
SEdMUkMgbV9jb250ZXh0T2JqOwotI2VsaWYgUExBVEZPUk0oQ0cpCi0gICAgQ0dMUEJ1ZmZlck9i
aiBtX3BidWZmZXI7Ci0gICAgQ0dMQ29udGV4dE9iaiBtX2NvbnRleHRPYmo7CisjaWYgUExBVEZP
Uk0oQ0cpCiAgICAgdW5zaWduZWQgY2hhciogbV9yZW5kZXJPdXRwdXQ7Ci0jZWxpZiBPUyhMSU5V
WCkKLSAgICBHTFhDb250ZXh0IG1fY29udGV4dE9iajsKLSAgICBHTFhQYnVmZmVyIG1fcGJ1ZmZl
cjsKLQotICAgIC8vIEluIG9yZGVyIHRvIGF2b2lkIHByb2JsZW1zIGNhdXNlZCBieSBsaW5raW5n
IGFnYWluc3QgbGliR0wsIHdlCi0gICAgLy8gZHluYW1pY2FsbHkgbG9vayB1cCBhbGwgdGhlIHN5
bWJvbHMgd2UgbmVlZC4KLSAgICAvLyBodHRwOi8vY29kZS5nb29nbGUuY29tL3AvY2hyb21pdW0v
aXNzdWVzL2RldGFpbD9pZD0xNjgwMAotICAgIGNsYXNzIEdMQ29ubmVjdGlvbiB7Ci0gICAgICBw
dWJsaWM6Ci0gICAgICAgIH5HTENvbm5lY3Rpb24oKTsKLQotICAgICAgICBzdGF0aWMgR0xDb25u
ZWN0aW9uKiBjcmVhdGUoKTsKLQotICAgICAgICBHTFhGQkNvbmZpZyogY2hvb3NlRkJDb25maWco
aW50IHNjcmVlbiwgY29uc3QgaW50ICphdHRyaWJfbGlzdCwgaW50ICpuZWxlbWVudHMpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHJldHVybiBtX2dsWENob29zZUZCQ29uZmlnKG1fZGlzcGxheSwg
c2NyZWVuLCBhdHRyaWJfbGlzdCwgbmVsZW1lbnRzKTsKLSAgICAgICAgfQotCi0gICAgICAgIEdM
WENvbnRleHQgY3JlYXRlTmV3Q29udGV4dChHTFhGQkNvbmZpZyBjb25maWcsIGludCByZW5kZXJU
eXBlLCBHTFhDb250ZXh0IHNoYXJlTGlzdCwgQm9vbCBkaXJlY3QpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHJldHVybiBtX2dsWENyZWF0ZU5ld0NvbnRleHQobV9kaXNwbGF5LCBjb25maWcsIHJl
bmRlclR5cGUsIHNoYXJlTGlzdCwgZGlyZWN0KTsKLSAgICAgICAgfQotCi0gICAgICAgIEdMWFBi
dWZmZXIgY3JlYXRlUGJ1ZmZlcihHTFhGQkNvbmZpZyBjb25maWcsIGNvbnN0IGludCAqYXR0cmli
TGlzdCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1fZ2xYQ3JlYXRlUGJ1ZmZlciht
X2Rpc3BsYXksIGNvbmZpZywgYXR0cmliTGlzdCk7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lk
IGRlc3Ryb3lQYnVmZmVyKEdMWFBidWZmZXIgcGJ1ZikKLSAgICAgICAgewotICAgICAgICAgICAg
bV9nbFhEZXN0cm95UGJ1ZmZlcihtX2Rpc3BsYXksIHBidWYpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgQm9vbCBtYWtlQ3VycmVudChHTFhEcmF3YWJsZSBkcmF3YWJsZSwgR0xYQ29udGV4dCBjdHgp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBtX2dsWE1ha2VDdXJyZW50KG1fZGlzcGxh
eSwgZHJhd2FibGUsIGN0eCk7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIGRlc3Ryb3lDb250
ZXh0KEdMWENvbnRleHQgY3R4KQotICAgICAgICB7Ci0gICAgICAgICAgICBtX2dsWERlc3Ryb3lD
b250ZXh0KG1fZGlzcGxheSwgY3R4KTsKLSAgICAgICAgfQotCi0gICAgICAgIEdMWENvbnRleHQg
Z2V0Q3VycmVudENvbnRleHQoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbV9nbFhH
ZXRDdXJyZW50Q29udGV4dCgpOwotICAgICAgICB9Ci0KLSAgICAgIHByaXZhdGU6Ci0gICAgICAg
IERpc3BsYXkqIG1fZGlzcGxheTsKLSAgICAgICAgdm9pZCogbV9saWJHTDsKLSAgICAgICAgUEZO
R0xYQ0hPT1NFRkJDT05GSUdQUk9DIG1fZ2xYQ2hvb3NlRkJDb25maWc7Ci0gICAgICAgIFBGTkdM
WENSRUFURU5FV0NPTlRFWFRQUk9DIG1fZ2xYQ3JlYXRlTmV3Q29udGV4dDsKLSAgICAgICAgUEZO
R0xYQ1JFQVRFUEJVRkZFUlBST0MgbV9nbFhDcmVhdGVQYnVmZmVyOwotICAgICAgICBQRk5HTFhE
RVNUUk9ZUEJVRkZFUlBST0MgbV9nbFhEZXN0cm95UGJ1ZmZlcjsKLSAgICAgICAgdHlwZWRlZiBC
b29sICgqIFBGTkdMWE1BS0VDVVJSRU5UUFJPQykoRGlzcGxheSogZHB5LCBHTFhEcmF3YWJsZSBk
cmF3YWJsZSwgR0xYQ29udGV4dCBjdHgpOwotICAgICAgICBQRk5HTFhNQUtFQ1VSUkVOVFBST0Mg
bV9nbFhNYWtlQ3VycmVudDsKLSAgICAgICAgdHlwZWRlZiB2b2lkICgqIFBGTkdMWERFU1RST1lD
T05URVhUUFJPQykoRGlzcGxheSogZHB5LCBHTFhDb250ZXh0IGN0eCk7Ci0gICAgICAgIFBGTkdM
WERFU1RST1lDT05URVhUUFJPQyBtX2dsWERlc3Ryb3lDb250ZXh0OwotICAgICAgICB0eXBlZGVm
IEdMWENvbnRleHQgKCogUEZOR0xYR0VUQ1VSUkVOVENPTlRFWFRQUk9DKSh2b2lkKTsKLSAgICAg
ICAgUEZOR0xYR0VUQ1VSUkVOVENPTlRFWFRQUk9DIG1fZ2xYR2V0Q3VycmVudENvbnRleHQ7Ci0K
LSAgICAgICAgR0xDb25uZWN0aW9uKERpc3BsYXkqIGRpc3BsYXksCi0gICAgICAgICAgICAgICAg
ICAgICB2b2lkKiBsaWJHTCwKLSAgICAgICAgICAgICAgICAgICAgIFBGTkdMWENIT09TRUZCQ09O
RklHUFJPQyBjaG9vc2VGQkNvbmZpZywKLSAgICAgICAgICAgICAgICAgICAgIFBGTkdMWENSRUFU
RU5FV0NPTlRFWFRQUk9DIGNyZWF0ZU5ld0NvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICBQ
Rk5HTFhDUkVBVEVQQlVGRkVSUFJPQyBjcmVhdGVQYnVmZmVyLAotICAgICAgICAgICAgICAgICAg
ICAgUEZOR0xYREVTVFJPWVBCVUZGRVJQUk9DIGRlc3Ryb3lQYnVmZmVyLAotICAgICAgICAgICAg
ICAgICAgICAgUEZOR0xYTUFLRUNVUlJFTlRQUk9DIG1ha2VDdXJyZW50LAotICAgICAgICAgICAg
ICAgICAgICAgUEZOR0xYREVTVFJPWUNPTlRFWFRQUk9DIGRlc3Ryb3lDb250ZXh0LAotICAgICAg
ICAgICAgICAgICAgICAgUEZOR0xYR0VUQ1VSUkVOVENPTlRFWFRQUk9DIGdldEN1cnJlbnRDb250
ZXh0KQotICAgICAgICAgICAgOiBtX2xpYkdMKGxpYkdMKQotICAgICAgICAgICAgLCBtX2Rpc3Bs
YXkoZGlzcGxheSkKLSAgICAgICAgICAgICwgbV9nbFhDaG9vc2VGQkNvbmZpZyhjaG9vc2VGQkNv
bmZpZykKLSAgICAgICAgICAgICwgbV9nbFhDcmVhdGVOZXdDb250ZXh0KGNyZWF0ZU5ld0NvbnRl
eHQpCi0gICAgICAgICAgICAsIG1fZ2xYQ3JlYXRlUGJ1ZmZlcihjcmVhdGVQYnVmZmVyKQotICAg
ICAgICAgICAgLCBtX2dsWERlc3Ryb3lQYnVmZmVyKGRlc3Ryb3lQYnVmZmVyKQotICAgICAgICAg
ICAgLCBtX2dsWE1ha2VDdXJyZW50KG1ha2VDdXJyZW50KQotICAgICAgICAgICAgLCBtX2dsWERl
c3Ryb3lDb250ZXh0KGRlc3Ryb3lDb250ZXh0KQotICAgICAgICAgICAgLCBtX2dsWEdldEN1cnJl
bnRDb250ZXh0KGdldEN1cnJlbnRDb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgIH0KLSAgICB9
OwotCi0gICAgc3RhdGljIEdMQ29ubmVjdGlvbiogc19nbDsKLSNlbHNlCi0gICAgI2Vycm9yIE11
c3QgcG9ydCBHcmFwaGljc0NvbnRleHQzRCB0byB5b3VyIHBsYXRmb3JtCiAjZW5kaWYKIH07CiAK
LWJvb2wgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6c19pbml0aWFsaXplZEdMRVcgPSBmYWxz
ZTsKLQotI2lmIE9TKExJTlVYKQotR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6R0xDb25uZWN0
aW9uKiBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpzX2dsID0gMDsKLQotR3JhcGhpY3NDb250
ZXh0M0RJbnRlcm5hbDo6R0xDb25uZWN0aW9uKiBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpH
TENvbm5lY3Rpb246OmNyZWF0ZSgpCi17Ci0gICAgRGlzcGxheSogZHB5ID0gWE9wZW5EaXNwbGF5
KDApOwotICAgIGlmICghZHB5KSB7Ci0gICAgICAgIHByaW50ZigiR3JhcGhpY3NDb250ZXh0M0Q6
IGVycm9yIG9wZW5pbmcgWCBkaXNwbGF5XG4iKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQot
Ci0gICAgLy8gV2UgdXNlIFJUTERfR0xPQkFMIHNlbWFudGljcyBzbyB0aGF0IEdMRVcgaW5pdGlh
bGl6YXRpb24gd29ya3M7Ci0gICAgLy8gR0xFVyBleHBlY3RzIHRvIGJlIGFibGUgdG8gb3BlbiB0
aGUgY3VycmVudCBwcm9jZXNzJ3MgaGFuZGxlCi0gICAgLy8gYW5kIGRvIGRsc3ltJ3Mgb2YgR0wg
ZW50cnkgcG9pbnRzIGZyb20gdGhlcmUuCi0gICAgdm9pZCogbGliR0wgPSBkbG9wZW4oImxpYkdM
LnNvLjEiLCBSVExEX0xBWlkgfCBSVExEX0dMT0JBTCk7Ci0gICAgaWYgKCFsaWJHTCkgewotICAg
ICAgICBYQ2xvc2VEaXNwbGF5KGRweSk7Ci0gICAgICAgIHByaW50ZigiR3JhcGhpY3NDb250ZXh0
M0Q6IGVycm9yIG9wZW5pbmcgbGliR0wuc28uMTogJXNcbiIsIGRsZXJyb3IoKSk7Ci0gICAgICAg
IHJldHVybiAwOwotICAgIH0KLQotICAgIFBGTkdMWENIT09TRUZCQ09ORklHUFJPQyBjaG9vc2VG
QkNvbmZpZyA9IChQRk5HTFhDSE9PU0VGQkNPTkZJR1BST0MpIGRsc3ltKGxpYkdMLCAiZ2xYQ2hv
b3NlRkJDb25maWciKTsKLSAgICBQRk5HTFhDUkVBVEVORVdDT05URVhUUFJPQyBjcmVhdGVOZXdD
b250ZXh0ID0gKFBGTkdMWENSRUFURU5FV0NPTlRFWFRQUk9DKSBkbHN5bShsaWJHTCwgImdsWENy
ZWF0ZU5ld0NvbnRleHQiKTsKLSAgICBQRk5HTFhDUkVBVEVQQlVGRkVSUFJPQyBjcmVhdGVQYnVm
ZmVyID0gKFBGTkdMWENSRUFURVBCVUZGRVJQUk9DKSBkbHN5bShsaWJHTCwgImdsWENyZWF0ZVBi
dWZmZXIiKTsKLSAgICBQRk5HTFhERVNUUk9ZUEJVRkZFUlBST0MgZGVzdHJveVBidWZmZXIgPSAo
UEZOR0xYREVTVFJPWVBCVUZGRVJQUk9DKSBkbHN5bShsaWJHTCwgImdsWERlc3Ryb3lQYnVmZmVy
Iik7Ci0gICAgUEZOR0xYTUFLRUNVUlJFTlRQUk9DIG1ha2VDdXJyZW50ID0gKFBGTkdMWE1BS0VD
VVJSRU5UUFJPQykgZGxzeW0obGliR0wsICJnbFhNYWtlQ3VycmVudCIpOwotICAgIFBGTkdMWERF
U1RST1lDT05URVhUUFJPQyBkZXN0cm95Q29udGV4dCA9IChQRk5HTFhERVNUUk9ZQ09OVEVYVFBS
T0MpIGRsc3ltKGxpYkdMLCAiZ2xYRGVzdHJveUNvbnRleHQiKTsKLSAgICBQRk5HTFhHRVRDVVJS
RU5UQ09OVEVYVFBST0MgZ2V0Q3VycmVudENvbnRleHQgPSAoUEZOR0xYR0VUQ1VSUkVOVENPTlRF
WFRQUk9DKSBkbHN5bShsaWJHTCwgImdsWEdldEN1cnJlbnRDb250ZXh0Iik7Ci0gICAgaWYgKCFj
aG9vc2VGQkNvbmZpZyB8fCAhY3JlYXRlTmV3Q29udGV4dCB8fCAhY3JlYXRlUGJ1ZmZlcgotICAg
ICAgICB8fCAhZGVzdHJveVBidWZmZXIgfHwgIW1ha2VDdXJyZW50IHx8ICFkZXN0cm95Q29udGV4
dAotICAgICAgICB8fCAhZ2V0Q3VycmVudENvbnRleHQpIHsKLSAgICAgICAgWENsb3NlRGlzcGxh
eShkcHkpOwotICAgICAgICBkbGNsb3NlKGxpYkdMKTsKLSAgICAgICAgcHJpbnRmKCJHcmFwaGlj
c0NvbnRleHQzRDogZXJyb3IgbG9va2luZyB1cCBib290c3RyYXBwaW5nIGVudHJ5IHBvaW50c1xu
Iik7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICByZXR1cm4gbmV3IEdMQ29ubmVjdGlv
bihkcHksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGliR0wsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY2hvb3NlRkJDb25maWcsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY3JlYXRlTmV3Q29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVQ
YnVmZmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Ryb3lQYnVmZmVyLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1ha2VDdXJyZW50LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRlc3Ryb3lDb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdl
dEN1cnJlbnRDb250ZXh0KTsKLX0KLQotR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6R0xDb25u
ZWN0aW9uOjp+R0xDb25uZWN0aW9uKCkKLXsKLSAgICBYQ2xvc2VEaXNwbGF5KG1fZGlzcGxheSk7
Ci0gICAgZGxjbG9zZShtX2xpYkdMKTsKLX0KLQotI2VuZGlmIC8vIE9TKExJTlVYKQotCi1HcmFw
aGljc0NvbnRleHQzREludGVybmFsOjpWZXJ0ZXhBdHRyaWJQb2ludGVyU3RhdGU6OlZlcnRleEF0
dHJpYlBvaW50ZXJTdGF0ZSgpCi0gICAgOiBlbmFibGVkKGZhbHNlKQotICAgICwgYnVmZmVyKDAp
Ci0gICAgLCBpbmR4KDApCi0gICAgLCBzaXplKDApCi0gICAgLCB0eXBlKDApCi0gICAgLCBub3Jt
YWxpemVkKGZhbHNlKQotICAgICwgc3RyaWRlKDApCi0gICAgLCBvZmZzZXQoMCkKLXsKLX0KLQot
R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbChHcmFw
aGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRycykKLSAgICA6IG1fYXR0cnMoYXR0cnMpCi0g
ICAgLCBtX3RleHR1cmUoMCkKLSAgICAsIG1fZmJvKDApCi0gICAgLCBtX2RlcHRoQnVmZmVyKDAp
Ci0gICAgLCBtX2JvdW5kRkJPKDApCi0jaWZkZWYgRkxJUF9GUkFNRUJVRkZFUl9WRVJUSUNBTExZ
Ci0gICAgLCBtX3NjYW5saW5lKDApCi0jZW5kaWYKLSAgICAsIG1fYm91bmRBcnJheUJ1ZmZlcigw
KQorR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbCgp
CiAjaWYgUExBVEZPUk0oU0tJQSkKLSAgICAsIG1fcmVzaXppbmdCaXRtYXAoMCkKLSNlbmRpZgot
I2lmIE9TKFdJTkRPV1MpCi0gICAgLCBtX2NhbnZhc1dpbmRvdygwKQotICAgICwgbV9jYW52YXNE
QygwKQotICAgICwgbV9jb250ZXh0T2JqKDApCisgICAgOiBtX3Jlc2l6aW5nQml0bWFwKDApCiAj
ZWxpZiBQTEFURk9STShDRykKLSAgICAsIG1fcGJ1ZmZlcigwKQotICAgICwgbV9jb250ZXh0T2Jq
KDApCi0gICAgLCBtX3JlbmRlck91dHB1dCgwKQotI2VsaWYgT1MoTElOVVgpCi0gICAgLCBtX2Nv
bnRleHRPYmooMCkKLSAgICAsIG1fcGJ1ZmZlcigwKQorICAgIDogbV9yZW5kZXJPdXRwdXQoMCkK
ICNlbHNlCiAjZXJyb3IgTXVzdCBwb3J0IHRvIHlvdXIgcGxhdGZvcm0KICNlbmRpZgogewotICAg
IC8vIEZJWE1FOiB3ZSBuZWVkIHRvIHRha2UgaW50byBhY2NvdW50IHRoZSB1c2VyJ3MgcmVxdWVz
dGVkCi0gICAgLy8gY29udGV4dCBjcmVhdGlvbiBhdHRyaWJ1dGVzLCBpbiBwYXJ0aWN1bGFyIHN0
ZW5jaWwgYW5kCi0gICAgLy8gYW50aWFsaWFzLCBhbmQgZGV0ZXJtaW5lIHdoaWNoIGNvdWxkIGFu
ZCBjb3VsZCBub3QgYmUgaG9ub3JlZAotICAgIC8vIGJhc2VkIG9uIHRoZSBjYXBhYmlsaXRpZXMg
b2YgdGhlIE9wZW5HTCBpbXBsZW1lbnRhdGlvbi4KLSAgICBtX2F0dHJzLmFscGhhID0gdHJ1ZTsK
LSAgICBtX2F0dHJzLmRlcHRoID0gdHJ1ZTsKLSAgICBtX2F0dHJzLnN0ZW5jaWwgPSBmYWxzZTsK
LSAgICBtX2F0dHJzLmFudGlhbGlhcyA9IGZhbHNlOwotICAgIG1fYXR0cnMucHJlbXVsdGlwbGll
ZEFscGhhID0gdHJ1ZTsKLQotI2lmIE9TKFdJTkRPV1MpCi0gICAgV05EQ0xBU1Mgd2M7Ci0gICAg
aWYgKCFHZXRDbGFzc0luZm8oR2V0TW9kdWxlSGFuZGxlKDApLCBMIkNBTlZBU0dMIiwgJndjKSkg
ewotICAgICAgICBaZXJvTWVtb3J5KCZ3Yywgc2l6ZW9mKFdORENMQVNTKSk7Ci0gICAgICAgIHdj
LnN0eWxlID0gQ1NfT1dOREM7Ci0gICAgICAgIHdjLmhJbnN0YW5jZSA9IEdldE1vZHVsZUhhbmRs
ZSgwKTsKLSAgICAgICAgd2MubHBmblduZFByb2MgPSBEZWZXaW5kb3dQcm9jOwotICAgICAgICB3
Yy5scHN6Q2xhc3NOYW1lID0gTCJDQU5WQVNHTCI7Ci0KLSAgICAgICAgaWYgKCFSZWdpc3RlckNs
YXNzKCZ3YykpIHsKLSAgICAgICAgICAgIHByaW50ZigiR3JhcGhpY3NDb250ZXh0M0Q6IFJlZ2lz
dGVyQ2xhc3MgZmFpbGVkXG4iKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAg
IH0KLQotICAgIG1fY2FudmFzV2luZG93ID0gQ3JlYXRlV2luZG93KEwiQ0FOVkFTR0wiLCBMIkNB
TlZBU0dMIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXU19DQVBUSU9OLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENXX1VTRURFRkFVTFQsIENXX1VTRURF
RkFVTFQsIENXX1VTRURFRkFVTFQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Q1dfVVNFREVGQVVMVCwgMCwgMCwgR2V0TW9kdWxlSGFuZGxlKDApLCAwKTsKLSAgICBpZiAoIW1f
Y2FudmFzV2luZG93KSB7Ci0gICAgICAgIHByaW50ZigiR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5h
bDogQ3JlYXRlV2luZG93IGZhaWxlZFxuIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICAvLyBnZXQgdGhlIGRldmljZSBjb250ZXh0Ci0gICAgbV9jYW52YXNEQyA9IEdldERDKG1fY2Fu
dmFzV2luZG93KTsKLSAgICBpZiAoIW1fY2FudmFzREMpIHsKLSAgICAgICAgcHJpbnRmKCJHcmFw
aGljc0NvbnRleHQzREludGVybmFsOiBHZXREQyBmYWlsZWRcbiIpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgLy8gZmluZCBkZWZhdWx0IHBpeGVsIGZvcm1hdAotICAgIFBJWEVMRk9S
TUFUREVTQ1JJUFRPUiBwZmQ7Ci0gICAgWmVyb01lbW9yeSgmcGZkLCBzaXplb2YoUElYRUxGT1JN
QVRERVNDUklQVE9SKSk7Ci0gICAgcGZkLm5TaXplID0gc2l6ZW9mKFBJWEVMRk9STUFUREVTQ1JJ
UFRPUik7Ci0gICAgcGZkLm5WZXJzaW9uID0gMTsKLSAgICBwZmQuZHdGbGFncyA9IFBGRF9EUkFX
X1RPX1dJTkRPVyB8IFBGRF9TVVBQT1JUX09QRU5HTAotI2lmZGVmIFJFTkRFUl9UT19ERUJVR0dJ
TkdfV0lORE9XCi0gICAgICAgIHwgUEZEX0RPVUJMRUJVRkZFUgotI2VuZGlmIC8vIFJFTkRFUl9U
T19ERUJVR0dJTkdfV0lORE9XCi0gICAgICAgIDsKLSAgICBpbnQgcGl4ZWxmb3JtYXQgPSBDaG9v
c2VQaXhlbEZvcm1hdChtX2NhbnZhc0RDLCAmcGZkKTsKLQotICAgIC8vIHNldCB0aGUgcGl4ZWwg
Zm9ybWF0IGZvciB0aGUgZGMKLSAgICBpZiAoIVNldFBpeGVsRm9ybWF0KG1fY2FudmFzREMsIHBp
eGVsZm9ybWF0LCAmcGZkKSkgewotICAgICAgICBwcmludGYoIkdyYXBoaWNzQ29udGV4dDNEOiBT
ZXRQaXhlbEZvcm1hdCBmYWlsZWRcbiIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
Ly8gY3JlYXRlIHJlbmRlcmluZyBjb250ZXh0Ci0gICAgbV9jb250ZXh0T2JqID0gd2dsQ3JlYXRl
Q29udGV4dChtX2NhbnZhc0RDKTsKLSAgICBpZiAoIW1fY29udGV4dE9iaikgewotICAgICAgICBw
cmludGYoIkdyYXBoaWNzQ29udGV4dDNEOiB3Z2xDcmVhdGVDb250ZXh0IGZhaWxlZFxuIik7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIXdnbE1ha2VDdXJyZW50KG1fY2FudmFz
REMsIG1fY29udGV4dE9iaikpIHsKLSAgICAgICAgcHJpbnRmKCJHcmFwaGljc0NvbnRleHQzRDog
d2dsTWFrZUN1cnJlbnQgZmFpbGVkXG4iKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotI2lm
ZGVmIFJFTkRFUl9UT19ERUJVR0dJTkdfV0lORE9XCi0gICAgdHlwZWRlZiBCT09MIChXSU5BUEkg
KiBQRk5XR0xTV0FQSU5URVJWQUxFWFRQUk9DKSAoaW50IGludGVydmFsKTsKLSAgICBQRk5XR0xT
V0FQSU5URVJWQUxFWFRQUk9DIHNldFN3YXBJbnRlcnZhbCA9IDA7Ci0gICAgc2V0U3dhcEludGVy
dmFsID0gKFBGTldHTFNXQVBJTlRFUlZBTEVYVFBST0MpIHdnbEdldFByb2NBZGRyZXNzKCJ3Z2xT
d2FwSW50ZXJ2YWxFWFQiKTsKLSAgICBpZiAoc2V0U3dhcEludGVydmFsKQotICAgICAgICBzZXRT
d2FwSW50ZXJ2YWwoMSk7Ci0jZW5kaWYgLy8gUkVOREVSX1RPX0RFQlVHR0lOR19XSU5ET1cKLQot
I2VsaWYgUExBVEZPUk0oQ0cpCi0gICAgLy8gQ3JlYXRlIGEgMXgxIHBidWZmZXIgYW5kIGFzc29j
aWF0ZWQgY29udGV4dCB0byBib290c3RyYXAgdGhpbmdzCi0gICAgQ0dMUGl4ZWxGb3JtYXRBdHRy
aWJ1dGUgYXR0cmlic1tdID0gewotICAgICAgICAoQ0dMUGl4ZWxGb3JtYXRBdHRyaWJ1dGUpIGtD
R0xQRkFQQnVmZmVyLAotICAgICAgICAoQ0dMUGl4ZWxGb3JtYXRBdHRyaWJ1dGUpIDAKLSAgICB9
OwotICAgIENHTFBpeGVsRm9ybWF0T2JqIHBpeGVsRm9ybWF0OwotICAgIEdMaW50IG51bVBpeGVs
Rm9ybWF0czsKLSAgICBpZiAoQ0dMQ2hvb3NlUGl4ZWxGb3JtYXQoYXR0cmlicywgJnBpeGVsRm9y
bWF0LCAmbnVtUGl4ZWxGb3JtYXRzKSAhPSBrQ0dMTm9FcnJvcikgewotICAgICAgICBwcmludGYo
IkdyYXBoaWNzQ29udGV4dDNEOiBlcnJvciBjaG9vc2luZyBwaXhlbCBmb3JtYXRcbiIpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICghcGl4ZWxGb3JtYXQpIHsKLSAgICAgICAgcHJp
bnRmKCJHcmFwaGljc0NvbnRleHQzRDogbm8gcGl4ZWwgZm9ybWF0IHNlbGVjdGVkXG4iKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBDR0xDb250ZXh0T2JqIGNvbnRleHQ7Ci0gICAgQ0dM
RXJyb3IgcmVzID0gQ0dMQ3JlYXRlQ29udGV4dChwaXhlbEZvcm1hdCwgMCwgJmNvbnRleHQpOwot
ICAgIENHTERlc3Ryb3lQaXhlbEZvcm1hdChwaXhlbEZvcm1hdCk7Ci0gICAgaWYgKHJlcyAhPSBr
Q0dMTm9FcnJvcikgewotICAgICAgICBwcmludGYoIkdyYXBoaWNzQ29udGV4dDNEOiBlcnJvciBj
cmVhdGluZyBjb250ZXh0XG4iKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBDR0xQQnVm
ZmVyT2JqIHBidWZmZXI7Ci0gICAgaWYgKENHTENyZWF0ZVBCdWZmZXIoMSwgMSwgR0xfVEVYVFVS
RV8yRCwgR0xfUkdCQSwgMCwgJnBidWZmZXIpICE9IGtDR0xOb0Vycm9yKSB7Ci0gICAgICAgIENH
TERlc3Ryb3lDb250ZXh0KGNvbnRleHQpOwotICAgICAgICBwcmludGYoIkdyYXBoaWNzQ29udGV4
dDNEOiBlcnJvciBjcmVhdGluZyBwYnVmZmVyXG4iKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LSAgICBpZiAoQ0dMU2V0UEJ1ZmZlcihjb250ZXh0LCBwYnVmZmVyLCAwLCAwLCAwKSAhPSBrQ0dM
Tm9FcnJvcikgewotICAgICAgICBDR0xEZXN0cm95Q29udGV4dChjb250ZXh0KTsKLSAgICAgICAg
Q0dMRGVzdHJveVBCdWZmZXIocGJ1ZmZlcik7Ci0gICAgICAgIHByaW50ZigiR3JhcGhpY3NDb250
ZXh0M0Q6IGVycm9yIGF0dGFjaGluZyBwYnVmZmVyIHRvIGNvbnRleHRcbiIpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotICAgIGlmIChDR0xTZXRDdXJyZW50Q29udGV4dChjb250ZXh0KSAhPSBr
Q0dMTm9FcnJvcikgewotICAgICAgICBDR0xEZXN0cm95Q29udGV4dChjb250ZXh0KTsKLSAgICAg
ICAgQ0dMRGVzdHJveVBCdWZmZXIocGJ1ZmZlcik7Ci0gICAgICAgIHByaW50ZigiR3JhcGhpY3ND
b250ZXh0M0Q6IGVycm9yIG1ha2luZyBjb250ZXh0IGN1cnJlbnRcbiIpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotICAgIG1fcGJ1ZmZlciA9IHBidWZmZXI7Ci0gICAgbV9jb250ZXh0T2JqID0g
Y29udGV4dDsKLSNlbGlmIE9TKExJTlVYKQotICAgIGlmICghc19nbCkgewotICAgICAgICBzX2ds
ID0gR0xDb25uZWN0aW9uOjpjcmVhdGUoKTsKLSAgICAgICAgaWYgKCFzX2dsKQotICAgICAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIGludCBjb25maWdBdHRyc1tdID0gewotICAgICAgICBH
TFhfRFJBV0FCTEVfVFlQRSwKLSAgICAgICAgR0xYX1BCVUZGRVJfQklULAotICAgICAgICBHTFhf
UkVOREVSX1RZUEUsCi0gICAgICAgIEdMWF9SR0JBX0JJVCwKLSAgICAgICAgR0xYX0RPVUJMRUJV
RkZFUiwKLSAgICAgICAgMCwKLSAgICAgICAgMAotICAgIH07Ci0gICAgaW50IG5lbGVtZW50cyA9
IDA7Ci0gICAgR0xYRkJDb25maWcqIGNvbmZpZyA9IHNfZ2wtPmNob29zZUZCQ29uZmlnKDAsIGNv
bmZpZ0F0dHJzLCAmbmVsZW1lbnRzKTsKLSAgICBpZiAoIWNvbmZpZykgewotICAgICAgICBwcmlu
dGYoIkdyYXBoaWNzQ29udGV4dDNEOiBnbFhDaG9vc2VGQkNvbmZpZyBmYWlsZWRcbiIpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICghbmVsZW1lbnRzKSB7Ci0gICAgICAgIHByaW50
ZigiR3JhcGhpY3NDb250ZXh0M0Q6IGdsWENob29zZUZCQ29uZmlnIHJldHVybmVkIDAgZWxlbWVu
dHNcbiIpOwotICAgICAgICBYRnJlZShjb25maWcpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
ICAgIEdMWENvbnRleHQgY29udGV4dCA9IHNfZ2wtPmNyZWF0ZU5ld0NvbnRleHQoY29uZmlnWzBd
LCBHTFhfUkdCQV9UWVBFLCAwLCBUcnVlKTsKLSAgICBpZiAoIWNvbnRleHQpIHsKLSAgICAgICAg
cHJpbnRmKCJHcmFwaGljc0NvbnRleHQzRDogZ2xYQ3JlYXRlTmV3Q29udGV4dCBmYWlsZWRcbiIp
OwotICAgICAgICBYRnJlZShjb25maWcpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlu
dCBwYnVmZmVyQXR0cnNbXSA9IHsKLSAgICAgICAgR0xYX1BCVUZGRVJfV0lEVEgsCi0gICAgICAg
IDEsCi0gICAgICAgIEdMWF9QQlVGRkVSX0hFSUdIVCwKLSAgICAgICAgMSwKLSAgICAgICAgMAot
ICAgIH07Ci0gICAgR0xYUGJ1ZmZlciBwYnVmZmVyID0gc19nbC0+Y3JlYXRlUGJ1ZmZlcihjb25m
aWdbMF0sIHBidWZmZXJBdHRycyk7Ci0gICAgWEZyZWUoY29uZmlnKTsKLSAgICBpZiAoIXBidWZm
ZXIpIHsKLSAgICAgICAgcHJpbnRmKCJHcmFwaGljc0NvbnRleHQzRDogZ2x4Q3JlYXRlUGJ1ZmZl
ciBmYWlsZWRcbiIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICghc19nbC0+bWFr
ZUN1cnJlbnQocGJ1ZmZlciwgY29udGV4dCkpIHsKLSAgICAgICAgcHJpbnRmKCJHcmFwaGljc0Nv
bnRleHQzRDogZ2xYTWFrZUN1cnJlbnQgZmFpbGVkXG4iKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLSAgICBtX2NvbnRleHRPYmogPSBjb250ZXh0OwotICAgIG1fcGJ1ZmZlciA9IHBidWZmZXI7
Ci0jZWxzZQotI2Vycm9yIE11c3QgcG9ydCB0byB5b3VyIHBsYXRmb3JtCi0jZW5kaWYKLQotICAg
IGlmICghc19pbml0aWFsaXplZEdMRVcpIHsKLSAgICAgICAgLy8gSW5pdGlhbGl6ZSBHTEVXIGFu
ZCBjaGVjayBmb3IgR0wgMi4wIHN1cHBvcnQgYnkgdGhlIGRyaXZlcnMuCi0gICAgICAgIEdMZW51
bSBnbGV3SW5pdFJlc3VsdCA9IGdsZXdJbml0KCk7Ci0gICAgICAgIGlmIChnbGV3SW5pdFJlc3Vs
dCAhPSBHTEVXX09LKSB7Ci0gICAgICAgICAgICBwcmludGYoIkdyYXBoaWNzQ29udGV4dDNEOiBH
TEVXIGluaXRpYWxpemF0aW9uIGZhaWxlZFxuIik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIH0KLSAgICAgICAgaWYgKCFnbGV3SXNTdXBwb3J0ZWQoIkdMX1ZFUlNJT05fMl8wIikpIHsK
LSAgICAgICAgICAgIHByaW50ZigiR3JhcGhpY3NDb250ZXh0M0Q6IE9wZW5HTCAyLjAgbm90IHN1
cHBvcnRlZFxuIik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgc19p
bml0aWFsaXplZEdMRVcgPSB0cnVlOwotICAgIH0KIH0KIAogR3JhcGhpY3NDb250ZXh0M0RJbnRl
cm5hbDo6fkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwoKQogewotICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOwotI2lmbmRlZiBSRU5ERVJfVE9fREVCVUdHSU5HX1dJTkRPVwotICAgIGdsRGVsZXRl
UmVuZGVyYnVmZmVyc0VYVCgxLCAmbV9kZXB0aEJ1ZmZlcik7Ci0gICAgZ2xEZWxldGVUZXh0dXJl
cygxLCAmbV90ZXh0dXJlKTsKKyNpZiBQTEFURk9STShTS0lBKQorICAgIGlmIChtX3Jlc2l6aW5n
Qml0bWFwKQorICAgICAgICBkZWxldGUgbV9yZXNpemluZ0JpdG1hcDsKKyNlbGlmIFBMQVRGT1JN
KENHKQorICAgIGlmIChtX3JlbmRlck91dHB1dCkKKyAgICAgICAgZGVsZXRlW10gbV9yZW5kZXJP
dXRwdXQ7CisjZW5kaWYKKwogI2lmZGVmIEZMSVBfRlJBTUVCVUZGRVJfVkVSVElDQUxMWQogICAg
IGlmIChtX3NjYW5saW5lKQogICAgICAgICBkZWxldGVbXSBtX3NjYW5saW5lOwogI2VuZGlmCi0g
ICAgZ2xEZWxldGVGcmFtZWJ1ZmZlcnNFWFQoMSwgJm1fZmJvKTsKLSNlbmRpZiAvLyAhUkVOREVS
X1RPX0RFQlVHR0lOR19XSU5ET1cKICNpZiBQTEFURk9STShTS0lBKQogICAgIGlmIChtX3Jlc2l6
aW5nQml0bWFwKQogICAgICAgICBkZWxldGUgbV9yZXNpemluZ0JpdG1hcDsKICNlbmRpZgotI2lm
IE9TKFdJTkRPV1MpCi0gICAgd2dsTWFrZUN1cnJlbnQoMCwgMCk7Ci0gICAgd2dsRGVsZXRlQ29u
dGV4dChtX2NvbnRleHRPYmopOwotICAgIFJlbGVhc2VEQyhtX2NhbnZhc1dpbmRvdywgbV9jYW52
YXNEQyk7Ci0gICAgRGVzdHJveVdpbmRvdyhtX2NhbnZhc1dpbmRvdyk7Ci0jZWxpZiBQTEFURk9S
TShDRykKLSAgICBDR0xTZXRDdXJyZW50Q29udGV4dCgwKTsKLSAgICBDR0xEZXN0cm95Q29udGV4
dChtX2NvbnRleHRPYmopOwotICAgIENHTERlc3Ryb3lQQnVmZmVyKG1fcGJ1ZmZlcik7Ci0gICAg
aWYgKG1fcmVuZGVyT3V0cHV0KQotICAgICAgICBkZWxldGVbXSBtX3JlbmRlck91dHB1dDsKLSNl
bGlmIE9TKExJTlVYKQotICAgIHNfZ2wtPm1ha2VDdXJyZW50KDAsIDApOwotICAgIHNfZ2wtPmRl
c3Ryb3lDb250ZXh0KG1fY29udGV4dE9iaik7Ci0gICAgc19nbC0+ZGVzdHJveVBidWZmZXIobV9w
YnVmZmVyKTsKLSNlbHNlCi0jZXJyb3IgTXVzdCBwb3J0IHRvIHlvdXIgcGxhdGZvcm0KLSNlbmRp
ZgotICAgIG1fY29udGV4dE9iaiA9IDA7CiB9CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0M0RJbnRl
cm5hbDo6bWFrZUNvbnRleHRDdXJyZW50KCkKK2Jvb2wgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5h
bDo6aW5pdGlhbGl6ZShHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRycykKIHsKLSNp
ZiBPUyhXSU5ET1dTKQotICAgIGlmICh3Z2xHZXRDdXJyZW50Q29udGV4dCgpICE9IG1fY29udGV4
dE9iaikKLSAgICAgICAgaWYgKHdnbE1ha2VDdXJyZW50KG1fY2FudmFzREMsIG1fY29udGV4dE9i
aikpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSNlbGlmIFBMQVRGT1JNKENHKQotICAgIGlm
IChDR0xHZXRDdXJyZW50Q29udGV4dCgpICE9IG1fY29udGV4dE9iaikKLSAgICAgICAgaWYgKENH
TFNldEN1cnJlbnRDb250ZXh0KG1fY29udGV4dE9iaikgPT0ga0NHTE5vRXJyb3IpCi0gICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSNlbGlmIE9TKExJTlVYKQotICAgIGlmIChzX2dsLT5nZXRDdXJy
ZW50Q29udGV4dCgpICE9IG1fY29udGV4dE9iaikKLSAgICAgICAgaWYgKHNfZ2wtPm1ha2VDdXJy
ZW50KG1fcGJ1ZmZlciwgbV9jb250ZXh0T2JqKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwot
I2Vsc2UKLSNlcnJvciBNdXN0IHBvcnQgdG8geW91ciBwbGF0Zm9ybQotI2VuZGlmCi0gICAgcmV0
dXJuIGZhbHNlOworICAgIFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMg
d2ViQXR0cmlidXRlczsKKyAgICB3ZWJBdHRyaWJ1dGVzLmFscGhhID0gYXR0cnMuYWxwaGE7Cisg
ICAgd2ViQXR0cmlidXRlcy5kZXB0aCA9IGF0dHJzLmRlcHRoOworICAgIHdlYkF0dHJpYnV0ZXMu
c3RlbmNpbCA9IGF0dHJzLnN0ZW5jaWw7CisgICAgd2ViQXR0cmlidXRlcy5hbnRpYWxpYXMgPSBh
dHRycy5hbnRpYWxpYXM7CisgICAgd2ViQXR0cmlidXRlcy5wcmVtdWx0aXBsaWVkQWxwaGEgPSBh
dHRycy5wcmVtdWx0aXBsaWVkQWxwaGE7CisgICAgLy8gRklYTUU6IG9uY2UgdGhlIENocm9taXVt
IHBvcnRpb24gb2YgdGhlIFdlYktpdENsaWVudCBjaGFuZ2VzIGhhcyBsYW5kZWQsCisgICAgLy8g
Y2hhbmdlIHRoaXMgdG8gY2FsbCBXZWJLaXQ6OndlYktpdENsaWVudCgpLT5jcmVhdGVHcmFwaGlj
c0NvbnRleHQzRCgpLgorICAgIFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0QqIHdlYkNvbnRl
eHQgPSBXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVEZWZhdWx0KCk7CisgICAg
aWYgKCF3ZWJDb250ZXh0KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCF3ZWJDb250
ZXh0LT5pbml0aWFsaXplKHdlYkF0dHJpYnV0ZXMpKSB7CisgICAgICAgIGRlbGV0ZSB3ZWJDb250
ZXh0OworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIG1faW1wbC5zZXQod2ViQ29u
dGV4dCk7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0Qg
R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6cGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCgpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIG1fY29udGV4dE9iajsKKyAgICByZXR1cm4gMDsKIH0KIAogUGxh
dGZvcm0zRE9iamVjdCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpwbGF0Zm9ybVRleHR1cmUo
KSBjb25zdAogewotICAgIHJldHVybiBtX3RleHR1cmU7Ci19Ci0KLXN0YXRpYyBpbnQgY3JlYXRl
VGV4dHVyZU9iamVjdChHTGVudW0gdGFyZ2V0KQotewotICAgIEdMdWludCB0ZXh0dXJlID0gMDsK
LSAgICBnbEdlblRleHR1cmVzKDEsICZ0ZXh0dXJlKTsKLSAgICBnbEJpbmRUZXh0dXJlKHRhcmdl
dCwgdGV4dHVyZSk7Ci0gICAgZ2xUZXhQYXJhbWV0ZXJmKHRhcmdldCwgR0xfVEVYVFVSRV9NSU5f
RklMVEVSLCBHTF9ORUFSRVNUKTsKLSAgICBnbFRleFBhcmFtZXRlcmYodGFyZ2V0LCBHTF9URVhU
VVJFX01BR19GSUxURVIsIEdMX05FQVJFU1QpOwotICAgIHJldHVybiB0ZXh0dXJlOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OnJlc2hhcGUoaW50IHdpZHRoLCBpbnQgaGVp
Z2h0KQotewotI2lmZGVmIFJFTkRFUl9UT19ERUJVR0dJTkdfV0lORE9XCi0gICAgU2V0V2luZG93
UG9zKG1fY2FudmFzV2luZG93LCBIV05EX1RPUCwgMCwgMCwgd2lkdGgsIGhlaWdodCwKLSAgICAg
ICAgICAgICAgICAgU1dQX05PTU9WRSk7Ci0gICAgU2hvd1dpbmRvdyhtX2NhbnZhc1dpbmRvdywg
U1dfU0hPVyk7Ci0jZW5kaWYKLQotICAgIG1fY2FjaGVkV2lkdGggPSB3aWR0aDsKLSAgICBtX2Nh
Y2hlZEhlaWdodCA9IGhlaWdodDsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLQotI2lmbmRl
ZiBSRU5ERVJfVE9fREVCVUdHSU5HX1dJTkRPVwotI2lmZGVmIFVTRV9URVhUVVJFX1JFQ1RBTkdM
RV9GT1JfRlJBTUVCVUZGRVIKLSAgICAvLyBHTF9URVhUVVJFX1JFQ1RBTkdMRV9BUkIgaXMgdGhl
IGJlc3Qgc3VwcG9ydGVkIHJlbmRlciB0YXJnZXQgb24gTWFjIE9TIFgKLSAgICBHTGVudW0gdGFy
Z2V0ID0gR0xfVEVYVFVSRV9SRUNUQU5HTEVfQVJCOwotI2Vsc2UKLSAgICBHTGVudW0gdGFyZ2V0
ID0gR0xfVEVYVFVSRV8yRDsKLSNlbmRpZgotICAgIGlmICghbV90ZXh0dXJlKSB7Ci0gICAgICAg
IC8vIEdlbmVyYXRlIHRoZSB0ZXh0dXJlIG9iamVjdAotICAgICAgICBtX3RleHR1cmUgPSBjcmVh
dGVUZXh0dXJlT2JqZWN0KHRhcmdldCk7Ci0gICAgICAgIC8vIEdlbmVyYXRlIHRoZSBmcmFtZWJ1
ZmZlciBvYmplY3QKLSAgICAgICAgZ2xHZW5GcmFtZWJ1ZmZlcnNFWFQoMSwgJm1fZmJvKTsKLSAg
ICAgICAgLy8gR2VuZXJhdGUgdGhlIGRlcHRoIGJ1ZmZlcgotICAgICAgICBnbEdlblJlbmRlcmJ1
ZmZlcnNFWFQoMSwgJm1fZGVwdGhCdWZmZXIpOwotICAgIH0KLQotICAgIC8vIFJlYWxsb2NhdGUg
dGhlIGNvbG9yIGFuZCBkZXB0aCBidWZmZXJzCi0gICAgZ2xCaW5kVGV4dHVyZSh0YXJnZXQsIG1f
dGV4dHVyZSk7Ci0gICAgZ2xUZXhJbWFnZTJEKHRhcmdldCwgMCwgR0xfUkdCQTgsIHdpZHRoLCBo
ZWlnaHQsIDAsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIDApOwotICAgIGdsQmluZFRleHR1
cmUodGFyZ2V0LCAwKTsKLQotICAgIGdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVS
X0VYVCwgbV9mYm8pOwotICAgIG1fYm91bmRGQk8gPSBtX2ZibzsKLSAgICBnbEJpbmRSZW5kZXJi
dWZmZXJFWFQoR0xfUkVOREVSQlVGRkVSX0VYVCwgbV9kZXB0aEJ1ZmZlcik7Ci0gICAgZ2xSZW5k
ZXJidWZmZXJTdG9yYWdlRVhUKEdMX1JFTkRFUkJVRkZFUl9FWFQsIEdMX0RFUFRIX0NPTVBPTkVO
VCwgd2lkdGgsIGhlaWdodCk7Ci0gICAgZ2xCaW5kUmVuZGVyYnVmZmVyRVhUKEdMX1JFTkRFUkJV
RkZFUl9FWFQsIDApOwotCi0gICAgZ2xGcmFtZWJ1ZmZlclRleHR1cmUyREVYVChHTF9GUkFNRUJV
RkZFUl9FWFQsIEdMX0NPTE9SX0FUVEFDSE1FTlQwX0VYVCwgdGFyZ2V0LCBtX3RleHR1cmUsIDAp
OwotICAgIGdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBH
TF9ERVBUSF9BVFRBQ0hNRU5UX0VYVCwgR0xfUkVOREVSQlVGRkVSX0VYVCwgbV9kZXB0aEJ1ZmZl
cik7Ci0gICAgR0xlbnVtIHN0YXR1cyA9IGdsQ2hlY2tGcmFtZWJ1ZmZlclN0YXR1c0VYVChHTF9G
UkFNRUJVRkZFUl9FWFQpOwotICAgIGlmIChzdGF0dXMgIT0gR0xfRlJBTUVCVUZGRVJfQ09NUExF
VEVfRVhUKSB7Ci0gICAgICAgIHByaW50ZigiR3JhcGhpY3NDb250ZXh0M0Q6IGZyYW1lYnVmZmVy
IHdhcyBpbmNvbXBsZXRlXG4iKTsKLQotICAgICAgICAvLyBGSVhNRTogY2xlYW51cC4KLSAgICAg
ICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICB9Ci0jZW5kaWYgIC8vIFJFTkRFUl9UT19ERUJVR0dJ
TkdfV0lORE9XCi0KLSNpZmRlZiBGTElQX0ZSQU1FQlVGRkVSX1ZFUlRJQ0FMTFkKLSAgICBpZiAo
bV9zY2FubGluZSkgewotICAgICAgICBkZWxldGVbXSBtX3NjYW5saW5lOwotICAgICAgICBtX3Nj
YW5saW5lID0gMDsKLSAgICB9Ci0gICAgbV9zY2FubGluZSA9IG5ldyB1bnNpZ25lZCBjaGFyW3dp
ZHRoICogNF07Ci0jZW5kaWYgIC8vIEZMSVBfRlJBTUVCVUZGRVJfVkVSVElDQUxMWQotCi0gICAg
Z2xDbGVhcihHTF9DT0xPUl9CVUZGRVJfQklUKTsKLQotI2lmIFBMQVRGT1JNKENHKQotICAgIC8v
IE5lZWQgdG8gcmVhbGxvY2F0ZSB0aGUgY2xpZW50LXNpZGUgYmFja2luZyBzdG9yZS4KLSAgICAv
LyBGSVhNRTogbWFrZSB0aGlzIG1vcmUgZWZmaWNpZW50LgotICAgIGlmIChtX3JlbmRlck91dHB1
dCkgewotICAgICAgICBkZWxldGVbXSBtX3JlbmRlck91dHB1dDsKLSAgICAgICAgbV9yZW5kZXJP
dXRwdXQgPSAwOwotICAgIH0KLSAgICBpbnQgcm93Qnl0ZXMgPSB3aWR0aCAqIDQ7Ci0gICAgbV9y
ZW5kZXJPdXRwdXQgPSBuZXcgdW5zaWduZWQgY2hhcltoZWlnaHQgKiByb3dCeXRlc107Ci0jZW5k
aWYgIC8vIFBMQVRGT1JNKENHKQotfQotCi0jaWZkZWYgRkxJUF9GUkFNRUJVRkZFUl9WRVJUSUNB
TExZCi12b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmZsaXBWZXJ0aWNhbGx5KHVuc2ln
bmVkIGNoYXIqIGZyYW1lYnVmZmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgd2lkdGgsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBoZWlnaHQpCi17Ci0gICAgdW5z
aWduZWQgY2hhciogc2NhbmxpbmUgPSBtX3NjYW5saW5lOwotICAgIGlmICghc2NhbmxpbmUpCi0g
ICAgICAgIHJldHVybjsKLSAgICB1bnNpZ25lZCBpbnQgcm93Qnl0ZXMgPSB3aWR0aCAqIDQ7Ci0g
ICAgdW5zaWduZWQgaW50IGNvdW50ID0gaGVpZ2h0IC8gMjsKLSAgICBmb3IgKHVuc2lnbmVkIGlu
dCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKLSAgICAgICAgdW5zaWduZWQgY2hhciogcm93QSA9
IGZyYW1lYnVmZmVyICsgaSAqIHJvd0J5dGVzOwotICAgICAgICB1bnNpZ25lZCBjaGFyKiByb3dC
ID0gZnJhbWVidWZmZXIgKyAoaGVpZ2h0IC0gaSAtIDEpICogcm93Qnl0ZXM7Ci0gICAgICAgIC8v
IEZJWE1FOiB0aGlzIGlzIHdoZXJlIHRoZSBtdWx0aXBsaWNhdGlvbiBvZiB0aGUgYWxwaGEKLSAg
ICAgICAgLy8gY2hhbm5lbCBpbnRvIHRoZSBjb2xvciBidWZmZXIgd2lsbCBuZWVkIHRvIG9jY3Vy
IGlmIHRoZQotICAgICAgICAvLyB1c2VyIHNwZWNpZmllcyB0aGUgInByZW11bHRpcGx5QWxwaGEi
IGZsYWcgaW4gdGhlIGNvbnRleHQKLSAgICAgICAgLy8gY3JlYXRpb24gYXR0cmlidXRlcy4KLSAg
ICAgICAgbWVtY3B5KHNjYW5saW5lLCByb3dCLCByb3dCeXRlcyk7Ci0gICAgICAgIG1lbWNweShy
b3dCLCByb3dBLCByb3dCeXRlcyk7Ci0gICAgICAgIG1lbWNweShyb3dBLCBzY2FubGluZSwgcm93
Qnl0ZXMpOwotICAgIH0KKyAgICByZXR1cm4gMDsKIH0KLSNlbmRpZgogCiB2b2lkIEdyYXBoaWNz
Q29udGV4dDNESW50ZXJuYWw6OmJlZ2luUGFpbnQoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjb250
ZXh0KQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotCi0jaWZkZWYgUkVOREVSX1RPX0RF
QlVHR0lOR19XSU5ET1cKLSAgICBTd2FwQnVmZmVycyhtX2NhbnZhc0RDKTsKLSNlbHNlCi0gICAg
Ly8gRWFybGllciB2ZXJzaW9ucyBvZiB0aGlzIGNvZGUgdXNlZCB0aGUgR1BVIHRvIGZsaXAgdGhl
Ci0gICAgLy8gZnJhbWVidWZmZXIgdmVydGljYWxseSBiZWZvcmUgcmVhZGluZyBpdCBiYWNrIGZv
ciBjb21wb3NpdGluZwotICAgIC8vIHZpYSBzb2Z0d2FyZS4gVGhpcyBjb2RlIHdhcyBxdWl0ZSBj
b21wbGljYXRlZCwgdXNlZCBhIGxvdCBvZgotICAgIC8vIEdQVSBtZW1vcnksIGFuZCBkaWRuJ3Qg
cHJvdmlkZSBhbiBvYnZpb3VzIHNwZWVkdXAuIFNpbmNlIHRoaXMKLSAgICAvLyB2ZXJ0aWNhbCBm
bGlwIGlzIG9ubHkgYSB0ZW1wb3Jhcnkgc29sdXRpb24gYW55d2F5IHVudGlsIENocm9tZQotICAg
IC8vIGlzIGZ1bGx5IEdQVSBjb21wb3NpdGVkLCBpdCB3YXNuJ3Qgd29ydGggdGhlIGNvbXBsZXhp
dHkuCi0KICAgICBIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzID0gY29udGV4dC0+Y2FudmFzKCk7
CiAgICAgSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyID0gY2FudmFzLT5idWZmZXIoKTsKICAgICB1
bnNpZ25lZCBjaGFyKiBwaXhlbHMgPSAwOwotICAgIGJvb2wgbXVzdFJlc3RvcmVGQk8gPSAobV9i
b3VuZEZCTyAhPSBtX2Zibyk7Ci0gICAgaWYgKG11c3RSZXN0b3JlRkJPKQotICAgICAgICBnbEJp
bmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fZmJvKTsKICNpZiBQTEFURk9S
TShTS0lBKQogICAgIGNvbnN0IFNrQml0bWFwKiBjYW52YXNCaXRtYXAgPSBpbWFnZUJ1ZmZlci0+
Y29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKS0+Yml0bWFwKCk7CiAgICAgY29uc3QgU2tCaXRt
YXAqIHJlYWRiYWNrQml0bWFwID0gMDsKICAgICBBU1NFUlQoY2FudmFzQml0bWFwLT5jb25maWco
KSA9PSBTa0JpdG1hcDo6a0FSR0JfODg4OF9Db25maWcpOwotICAgIGlmIChjYW52YXNCaXRtYXAt
PndpZHRoKCkgPT0gbV9jYWNoZWRXaWR0aCAmJiBjYW52YXNCaXRtYXAtPmhlaWdodCgpID09IG1f
Y2FjaGVkSGVpZ2h0KSB7CisgICAgaWYgKGNhbnZhc0JpdG1hcC0+d2lkdGgoKSA9PSBtX2ltcGwt
PndpZHRoKCkgJiYgY2FudmFzQml0bWFwLT5oZWlnaHQoKSA9PSBtX2ltcGwtPmhlaWdodCgpKSB7
CiAgICAgICAgIC8vIFRoaXMgaXMgdGhlIGZhc3Rlc3QgYW5kIG1vc3QgY29tbW9uIGNhc2UuIFdl
IHJlYWQgYmFjawogICAgICAgICAvLyBkaXJlY3RseSBpbnRvIHRoZSBjYW52YXMncyBiYWNraW5n
IHN0b3JlLgogICAgICAgICByZWFkYmFja0JpdG1hcCA9IGNhbnZhc0JpdG1hcDsKQEAgLTc3Nywx
NSArMzkyLDE1IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6YmVnaW5QYWkKICAg
ICAgICAgLy8gV2UgbmVlZCB0byBhbGxvY2F0ZSBhIHRlbXBvcmFyeSBiaXRtYXAgZm9yIHJlYWRp
bmcgYmFjayB0aGUKICAgICAgICAgLy8gcGl4ZWwgZGF0YS4gV2Ugd2lsbCB0aGVuIHVzZSBTa2lh
IHRvIHJlc2NhbGUgdGhpcyBiaXRtYXAgdG8KICAgICAgICAgLy8gdGhlIHNpemUgb2YgdGhlIGNh
bnZhcydzIGJhY2tpbmcgc3RvcmUuCi0gICAgICAgIGlmIChtX3Jlc2l6aW5nQml0bWFwICYmICht
X3Jlc2l6aW5nQml0bWFwLT53aWR0aCgpICE9IG1fY2FjaGVkV2lkdGggfHwgbV9yZXNpemluZ0Jp
dG1hcC0+aGVpZ2h0KCkgIT0gbV9jYWNoZWRIZWlnaHQpKSB7CisgICAgICAgIGlmIChtX3Jlc2l6
aW5nQml0bWFwICYmIChtX3Jlc2l6aW5nQml0bWFwLT53aWR0aCgpICE9IG1faW1wbC0+d2lkdGgo
KSB8fCBtX3Jlc2l6aW5nQml0bWFwLT5oZWlnaHQoKSAhPSBtX2ltcGwtPmhlaWdodCgpKSkgewog
ICAgICAgICAgICAgZGVsZXRlIG1fcmVzaXppbmdCaXRtYXA7CiAgICAgICAgICAgICBtX3Jlc2l6
aW5nQml0bWFwID0gMDsKICAgICAgICAgfQogICAgICAgICBpZiAoIW1fcmVzaXppbmdCaXRtYXAp
IHsKICAgICAgICAgICAgIG1fcmVzaXppbmdCaXRtYXAgPSBuZXcgU2tCaXRtYXAoKTsKICAgICAg
ICAgICAgIG1fcmVzaXppbmdCaXRtYXAtPnNldENvbmZpZyhTa0JpdG1hcDo6a0FSR0JfODg4OF9D
b25maWcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9jYWNoZWRX
aWR0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2NhY2hlZEhl
aWdodCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pbXBsLT53
aWR0aCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faW1wbC0+
aGVpZ2h0KCkpOwogICAgICAgICAgICAgaWYgKCFtX3Jlc2l6aW5nQml0bWFwLT5hbGxvY1BpeGVs
cygpKSB7CiAgICAgICAgICAgICAgICAgZGVsZXRlIG1fcmVzaXppbmdCaXRtYXA7CiAgICAgICAg
ICAgICAgICAgbV9yZXNpemluZ0JpdG1hcCA9IDA7CkBAIC03OTgsMjMgKzQxMywxNCBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmJlZ2luUGFpCiAgICAgLy8gUmVhZCBiYWNrIHRo
ZSBmcmFtZSBidWZmZXIuCiAgICAgU2tBdXRvTG9ja1BpeGVscyBiaXRtYXBMb2NrKCpyZWFkYmFj
a0JpdG1hcCk7CiAgICAgcGl4ZWxzID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KHJlYWRi
YWNrQml0bWFwLT5nZXRQaXhlbHMoKSk7Ci0gICAgZ2xSZWFkUGl4ZWxzKDAsIDAsIG1fY2FjaGVk
V2lkdGgsIG1fY2FjaGVkSGVpZ2h0LCBHTF9CR1JBLCBHTF9VTlNJR05FRF9CWVRFLCBwaXhlbHMp
OwogI2VsaWYgUExBVEZPUk0oQ0cpCi0gICAgaWYgKG1fcmVuZGVyT3V0cHV0KSB7CisgICAgaWYg
KG1fcmVuZGVyT3V0cHV0KQogICAgICAgICBwaXhlbHMgPSBtX3JlbmRlck91dHB1dDsKLSAgICAg
ICAgZ2xSZWFkUGl4ZWxzKDAsIDAsIG1fY2FjaGVkV2lkdGgsIG1fY2FjaGVkSGVpZ2h0LCBHTF9C
R1JBLCBHTF9VTlNJR05FRF9JTlRfOF84XzhfOF9SRVYsIHBpeGVscyk7Ci0gICAgfQogI2Vsc2UK
ICNlcnJvciBNdXN0IHBvcnQgdG8geW91ciBwbGF0Zm9ybQogI2VuZGlmCiAKLSAgICBpZiAobXVz
dFJlc3RvcmVGQk8pCi0gICAgICAgIGdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVS
X0VYVCwgbV9ib3VuZEZCTyk7Ci0KLSNpZmRlZiBGTElQX0ZSQU1FQlVGRkVSX1ZFUlRJQ0FMTFkK
LSAgICBpZiAocGl4ZWxzKQotICAgICAgICBmbGlwVmVydGljYWxseShwaXhlbHMsIG1fY2FjaGVk
V2lkdGgsIG1fY2FjaGVkSGVpZ2h0KTsKLSNlbmRpZgorICAgIG1faW1wbC0+cmVhZEJhY2tGcmFt
ZWJ1ZmZlcihwaXhlbHMsIDQgKiBtX2ltcGwtPndpZHRoKCkgKiBtX2ltcGwtPmhlaWdodCgpKTsK
IAogI2lmIFBMQVRGT1JNKFNLSUEpCiAgICAgaWYgKG1fcmVzaXppbmdCaXRtYXApIHsKQEAgLTgy
NiwxMSArNDMyLDExIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6YmVnaW5QYWkK
ICAgICB9CiAjZWxpZiBQTEFURk9STShDRykKICAgICBpZiAobV9yZW5kZXJPdXRwdXQpIHsKLSAg
ICAgICAgaW50IHJvd0J5dGVzID0gbV9jYWNoZWRXaWR0aCAqIDQ7Ci0gICAgICAgIENHRGF0YVBy
b3ZpZGVyUmVmIGRhdGFQcm92aWRlciA9IENHRGF0YVByb3ZpZGVyQ3JlYXRlV2l0aERhdGEoMCwg
bV9yZW5kZXJPdXRwdXQsIHJvd0J5dGVzICogbV9jYWNoZWRIZWlnaHQsIDApOworICAgICAgICBp
bnQgcm93Qnl0ZXMgPSBtX2ltcGwtPndpZHRoKCkgKiA0OworICAgICAgICBDR0RhdGFQcm92aWRl
clJlZiBkYXRhUHJvdmlkZXIgPSBDR0RhdGFQcm92aWRlckNyZWF0ZVdpdGhEYXRhKDAsIG1fcmVu
ZGVyT3V0cHV0LCByb3dCeXRlcyAqIG1faW1wbC0+aGVpZ2h0KCksIDApOwogICAgICAgICBDR0Nv
bG9yU3BhY2VSZWYgY29sb3JTcGFjZSA9IENHQ29sb3JTcGFjZUNyZWF0ZURldmljZVJHQigpOwot
ICAgICAgICBDR0ltYWdlUmVmIGNnSW1hZ2UgPSBDR0ltYWdlQ3JlYXRlKG1fY2FjaGVkV2lkdGgs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9jYWNoZWRIZWln
aHQsCisgICAgICAgIENHSW1hZ2VSZWYgY2dJbWFnZSA9IENHSW1hZ2VDcmVhdGUobV9pbXBsLT53
aWR0aCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faW1w
bC0+aGVpZ2h0KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
OCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMiwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dCeXRlcywKQEAgLTg2MSwx
MDE4ICs0NjcsNzYzIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6YmVnaW5QYWkK
ICNlbHNlCiAjZXJyb3IgTXVzdCBwb3J0IHRvIHlvdXIgcGxhdGZvcm0KICNlbmRpZgotCi0jZW5k
aWYgIC8vIFJFTkRFUl9UT19ERUJVR0dJTkdfV0lORE9XCiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0M0RJbnRlcm5hbDo6YWN0aXZlVGV4dHVyZSh1bnNpZ25lZCBsb25nIHRleHR1cmUpCit2b2lk
IEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmVuZFBhaW50KCkKIHsKLSAgICAvLyBGSVhNRTog
cXVlcnkgbnVtYmVyIG9mIHRleHR1cmVzIGF2YWlsYWJsZS4KLSAgICBpZiAodGV4dHVyZSA8IEdM
X1RFWFRVUkUwIHx8IHRleHR1cmUgPiBHTF9URVhUVVJFMCszMikKLSAgICAgICAgLy8gRklYTUU6
IHJhaXNlIGV4Y2VwdGlvbi4KLSAgICAgICAgcmV0dXJuOwotCi0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7Ci0gICAgZ2xBY3RpdmVUZXh0dXJlKHRleHR1cmUpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDNESW50ZXJuYWw6OmJpbmRCdWZmZXIodW5zaWduZWQgbG9uZyB0YXJnZXQsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViR0xCdWZmZXIqIGJ1ZmZl
cikKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBHTHVpbnQgYnVmSUQgPSBFWFRS
QUNUKGJ1ZmZlcik7Ci0gICAgaWYgKHRhcmdldCA9PSBHTF9BUlJBWV9CVUZGRVIpCi0gICAgICAg
IG1fYm91bmRBcnJheUJ1ZmZlciA9IGJ1ZklEOwotICAgIGdsQmluZEJ1ZmZlcih0YXJnZXQsIGJ1
ZklEKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpiaW5kRnJhbWVidWZm
ZXIodW5zaWduZWQgbG9uZyB0YXJnZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBXZWJHTEZyYW1lYnVmZmVyKiBmcmFtZWJ1ZmZlcikKLXsKLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBHTHVpbnQgaWQgPSBFWFRSQUNUKGZyYW1lYnVmZmVy
KTsKLSAgICBpZiAoIWlkKQotICAgICAgICBpZCA9IG1fZmJvOwotICAgIGdsQmluZEZyYW1lYnVm
ZmVyRVhUKHRhcmdldCwgaWQpOwotICAgIG1fYm91bmRGQk8gPSBpZDsKIH0KIAotLy8gSWYgd2Ug
ZGlkbid0IGhhdmUgdG8gaGFjayBHTF9URVhUVVJFX1dSQVBfUiBmb3IgY3ViZSBtYXBzLAotLy8g
d2UgY291bGQganVzdCB1c2U6Ci0vLyBHTF9TQU1FX01FVEhPRF8yX1gyKEJpbmRUZXh0dXJlLCBi
aW5kVGV4dHVyZSwgdW5zaWduZWQgbG9uZywgV2ViR0xUZXh0dXJlKikKLXZvaWQgR3JhcGhpY3ND
b250ZXh0M0RJbnRlcm5hbDo6YmluZFRleHR1cmUodW5zaWduZWQgbG9uZyB0YXJnZXQsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYkdMVGV4dHVyZSogdGV4
dHVyZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6cmVzaGFwZShpbnQgd2lkdGgs
IGludCBoZWlnaHQpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgdW5zaWduZWQg
aW50IHRleHR1cmVPYmplY3QgPSBFWFRSQUNUKHRleHR1cmUpOworICAgIGlmICh3aWR0aCA9PSBt
X2ltcGwtPndpZHRoKCkgJiYgaGVpZ2h0ID09IG1faW1wbC0+aGVpZ2h0KCkpCisgICAgICAgIHJl
dHVybjsKIAotICAgIGdsQmluZFRleHR1cmUodGFyZ2V0LCB0ZXh0dXJlT2JqZWN0KTsKKyAgICBt
X2ltcGwtPnJlc2hhcGUod2lkdGgsIGhlaWdodCk7CiAKLSAgICAvLyBGSVhNRTogR0xfVEVYVFVS
RV9XUkFQX1IgaXNuJ3QgZXhwb3NlZCBpbiB0aGUgT3BlbkdMIEVTIDIuMAotICAgIC8vIEFQSS4g
T24gZGVza3RvcCBPcGVuR0wgaW1wbGVtZW50YXRpb25zIGl0IHNlZW1zIG5lY2Vzc2FyeSB0bwot
ICAgIC8vIHNldCB0aGlzIHdyYXAgbW9kZSB0byBHTF9DTEFNUF9UT19FREdFIHRvIGdldCBjb3Jy
ZWN0IGJlaGF2aW9yCi0gICAgLy8gb2YgY3ViZSBtYXBzLgotICAgIGlmICh0ZXh0dXJlKSB7Ci0g
ICAgICAgIGlmICh0YXJnZXQgPT0gR0xfVEVYVFVSRV9DVUJFX01BUCkgewotICAgICAgICAgICAg
aWYgKCF0ZXh0dXJlLT5pc0N1YmVNYXBSV3JhcE1vZGVJbml0aWFsaXplZCgpKSB7Ci0gICAgICAg
ICAgICAgICAgZ2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfQ1VCRV9NQVAsIEdMX1RFWFRVUkVf
V1JBUF9SLCBHTF9DTEFNUF9UT19FREdFKTsKLSAgICAgICAgICAgICAgICB0ZXh0dXJlLT5zZXRD
dWJlTWFwUldyYXBNb2RlSW5pdGlhbGl6ZWQodHJ1ZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0gZWxzZQotICAgICAgICAgICAgdGV4dHVyZS0+c2V0Q3ViZU1hcFJXcmFwTW9kZUluaXRpYWxp
emVkKGZhbHNlKTsKKyNpZiBQTEFURk9STShDRykKKyAgICAvLyBOZWVkIHRvIHJlYWxsb2NhdGUg
dGhlIGNsaWVudC1zaWRlIGJhY2tpbmcgc3RvcmUuCisgICAgLy8gRklYTUU6IG1ha2UgdGhpcyBt
b3JlIGVmZmljaWVudC4KKyAgICBpZiAobV9yZW5kZXJPdXRwdXQpIHsKKyAgICAgICAgZGVsZXRl
W10gbV9yZW5kZXJPdXRwdXQ7CisgICAgICAgIG1fcmVuZGVyT3V0cHV0ID0gMDsKICAgICB9Cisg
ICAgaW50IHJvd0J5dGVzID0gd2lkdGggKiA0OworICAgIG1fcmVuZGVyT3V0cHV0ID0gbmV3IHVu
c2lnbmVkIGNoYXJbaGVpZ2h0ICogcm93Qnl0ZXNdOworI2VuZGlmIC8vIFBMQVRGT1JNKENHKQog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmJ1ZmZlckRhdGFJbXBsKHVuc2ln
bmVkIGxvbmcgdGFyZ2V0LCBpbnQgc2l6ZSwgY29uc3Qgdm9pZCogZGF0YSwgdW5zaWduZWQgbG9u
ZyB1c2FnZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICAvLyBGSVhNRTogbWFr
ZSB0aGlzIHZlcmlmaWNhdGlvbiBtb3JlIGVmZmljaWVudC4KLSAgICBHTGludCBiaW5kaW5nID0g
MDsKLSAgICBHTGVudW0gYmluZGluZ190YXJnZXQgPSBHTF9BUlJBWV9CVUZGRVJfQklORElORzsK
LSAgICBpZiAodGFyZ2V0ID09IEdMX0VMRU1FTlRfQVJSQVlfQlVGRkVSKQotICAgICAgICBiaW5k
aW5nX3RhcmdldCA9IEdMX0VMRU1FTlRfQVJSQVlfQlVGRkVSX0JJTkRJTkc7Ci0gICAgZ2xHZXRJ
bnRlZ2VydihiaW5kaW5nX3RhcmdldCwgJmJpbmRpbmcpOwotICAgIGlmIChiaW5kaW5nIDw9IDAp
IHsKLSAgICAgICAgLy8gRklYTUU6IHJhaXNlIGV4Y2VwdGlvbi4KLSAgICAgICAgLy8gTG9nTWVz
c2FnZWYoKCJidWZmZXJEYXRhOiBubyBidWZmZXIgYm91bmQiKSk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9CisvLyBNYWNyb3MgdG8gYXNzaXN0IGluIGRlbGVnYXRpbmcgZnJvbSBHcmFwaGljc0Nv
bnRleHQzREludGVybmFsIHRvCisvLyBXZWJHcmFwaGljc0NvbnRleHQzRC4KIAotICAgIGdsQnVm
ZmVyRGF0YSh0YXJnZXQsCi0gICAgICAgICAgICAgICAgICAgc2l6ZSwKLSAgICAgICAgICAgICAg
ICAgICBkYXRhLAotICAgICAgICAgICAgICAgICAgIHVzYWdlKTsKKyNkZWZpbmUgREVMRUdBVEVf
VE9fSU1QTChuYW1lKSBcCit2b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6Om5hbWUoKSBc
Cit7IFwKKyAgICBtX2ltcGwtPm5hbWUoKTsgXAogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNE
SW50ZXJuYWw6OmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheSh1bnNpZ25lZCBsb25nIGluZGV4KQot
ewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGlmIChpbmRleCA8IE51bVRyYWNrZWRQ
b2ludGVyU3RhdGVzKQotICAgICAgICBtX3ZlcnRleEF0dHJpYlBvaW50ZXJTdGF0ZVtpbmRleF0u
ZW5hYmxlZCA9IGZhbHNlOwotICAgIGdsRGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGluZGV4KTsK
KyNkZWZpbmUgREVMRUdBVEVfVE9fSU1QTF9SKG5hbWUsIHJ0KSAgICAgICAgICAgXAorcnQgR3Jh
cGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6bmFtZSgpIFwKK3sgXAorICAgIHJldHVybiBtX2ltcGwt
Pm5hbWUoKTsgXAogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmVuYWJsZVZl
cnRleEF0dHJpYkFycmF5KHVuc2lnbmVkIGxvbmcgaW5kZXgpCi17Ci0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7Ci0gICAgaWYgKGluZGV4IDwgTnVtVHJhY2tlZFBvaW50ZXJTdGF0ZXMpCi0gICAg
ICAgIG1fdmVydGV4QXR0cmliUG9pbnRlclN0YXRlW2luZGV4XS5lbmFibGVkID0gdHJ1ZTsKLSAg
ICBnbEVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGluZGV4KTsKKyNkZWZpbmUgREVMRUdBVEVfVE9f
SU1QTF8xKG5hbWUsIHQxKSBcCit2b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6Om5hbWUo
dDEgYTEpIFwKK3sgXAorICAgIG1faW1wbC0+bmFtZShhMSk7IFwKIH0KIAotdW5zaWduZWQgbG9u
ZyBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpnZXRFcnJvcigpCi17Ci0gICAgaWYgKG1fc3lu
dGhldGljRXJyb3JzLnNpemUoKSA+IDApIHsKLSAgICAgICAgTGlzdEhhc2hTZXQ8dW5zaWduZWQg
bG9uZz46Oml0ZXJhdG9yIGl0ZXIgPSBtX3N5bnRoZXRpY0Vycm9ycy5iZWdpbigpOwotICAgICAg
ICB1bnNpZ25lZCBsb25nIGVyciA9ICppdGVyOwotICAgICAgICBtX3N5bnRoZXRpY0Vycm9ycy5y
ZW1vdmUoaXRlcik7Ci0gICAgICAgIHJldHVybiBlcnI7Ci0gICAgfQotCi0gICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7Ci0gICAgcmV0dXJuIGdsR2V0RXJyb3IoKTsKKyNkZWZpbmUgREVMRUdBVEVf
VE9fSU1QTF8xX1gobmFtZSwgdDEpIFwKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6
bmFtZSh0MSBhMSkgXAoreyBcCisgICAgbV9pbXBsLT5uYW1lKEVYVFJBQ1QoYTEpKTsgICAgICAg
ICAgICAgICAgICBcCiB9CiAKLUdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIEdyYXBoaWNz
Q29udGV4dDNESW50ZXJuYWw6OmdldENvbnRleHRBdHRyaWJ1dGVzKCkKLXsKLSAgICByZXR1cm4g
bV9hdHRyczsKKyNkZWZpbmUgREVMRUdBVEVfVE9fSU1QTF8xUihuYW1lLCB0MSwgcnQpICAgIFwK
K3J0IEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6Om5hbWUodDEgYTEpIFwKK3sgXAorICAgIHJl
dHVybiBtX2ltcGwtPm5hbWUoYTEpOyBcCiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRl
cm5hbDo6dmVydGV4QXR0cmliUG9pbnRlcih1bnNpZ25lZCBsb25nIGluZHgsIGludCBzaXplLCBp
bnQgdHlwZSwgYm9vbCBub3JtYWxpemVkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgc3RyaWRlLCB1bnNpZ25lZCBsb25n
IG9mZnNldCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLQotICAgIGlmIChtX2JvdW5k
QXJyYXlCdWZmZXIgPD0gMCkgewotICAgICAgICAvLyBGSVhNRTogcmFpc2UgZXhjZXB0aW9uLgot
ICAgICAgICAvLyBMb2dNZXNzYWdlZigoImJ1ZmZlckRhdGE6IG5vIGJ1ZmZlciBib3VuZCIpKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChpbmR4IDwgTnVtVHJhY2tlZFBvaW50
ZXJTdGF0ZXMpIHsKLSAgICAgICAgVmVydGV4QXR0cmliUG9pbnRlclN0YXRlJiBzdGF0ZSA9IG1f
dmVydGV4QXR0cmliUG9pbnRlclN0YXRlW2luZHhdOwotICAgICAgICBzdGF0ZS5idWZmZXIgPSBt
X2JvdW5kQXJyYXlCdWZmZXI7Ci0gICAgICAgIHN0YXRlLmluZHggPSBpbmR4OwotICAgICAgICBz
dGF0ZS5zaXplID0gc2l6ZTsKLSAgICAgICAgc3RhdGUudHlwZSA9IHR5cGU7Ci0gICAgICAgIHN0
YXRlLm5vcm1hbGl6ZWQgPSBub3JtYWxpemVkOwotICAgICAgICBzdGF0ZS5zdHJpZGUgPSBzdHJp
ZGU7Ci0gICAgICAgIHN0YXRlLm9mZnNldCA9IG9mZnNldDsKLSAgICB9Ci0KLSAgICBnbFZlcnRl
eEF0dHJpYlBvaW50ZXIoaW5keCwgc2l6ZSwgdHlwZSwgbm9ybWFsaXplZCwgc3RyaWRlLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PHZvaWQqPihzdGF0aWNfY2Fz
dDxpbnRwdHJfdD4ob2Zmc2V0KSkpOworI2RlZmluZSBERUxFR0FURV9UT19JTVBMXzFSX1gobmFt
ZSwgdDEsIHJ0KSAgICBcCitydCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpuYW1lKHQxIGEx
KSBcCit7IFwKKyAgICByZXR1cm4gbV9pbXBsLT5uYW1lKEVYVFJBQ1QoYTEpKTsgICAgICAgICAg
IFwKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjp2aWV3cG9ydEltcGwobG9u
ZyB4LCBsb25nIHksIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0KQot
ewotICAgIGdsVmlld3BvcnQoeCwgeSwgd2lkdGgsIGhlaWdodCk7CisjZGVmaW5lIERFTEVHQVRF
X1RPX0lNUExfMihuYW1lLCB0MSwgdDIpIFwKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5h
bDo6bmFtZSh0MSBhMSwgdDIgYTIpIFwKK3sgXAorICAgIG1faW1wbC0+bmFtZShhMSwgYTIpOyBc
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6c3ludGhlc2l6ZUdMRXJyb3Io
dW5zaWduZWQgbG9uZyBlcnJvcikKLXsKLSAgICBtX3N5bnRoZXRpY0Vycm9ycy5hZGQoZXJyb3Ip
OworI2RlZmluZSBERUxFR0FURV9UT19JTVBMXzJfWDEyKG5hbWUsIHQxLCB0MikgXAordm9pZCBH
cmFwaGljc0NvbnRleHQzREludGVybmFsOjpuYW1lKHQxIGExLCB0MiBhMikgXAoreyBcCisgICAg
bV9pbXBsLT5uYW1lKEVYVFJBQ1QoYTEpLCBFWFRSQUNUKGEyKSk7ICAgICBcCiB9CiAKLS8vIEdy
YXBoaWNzQ29udGV4dDNEIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCi0KLS8qIEhlbHBlciBtYWNyb3MgZm9yIHdoZW4gd2UncmUganVzdCB3cmFw
cGluZyBhIGdsIG1ldGhvZCwgc28gdGhhdAotICogd2UgY2FuIGF2b2lkIGhhdmluZyB0byB0eXBl
IHRoaXMgNTAwIHRpbWVzLiAgTm90ZSB0aGF0IHRoZXNlIE1VU1QKLSAqIE5PVCBCRSBVU0VEIGlm
IHdlIG5lZWQgdG8gY2hlY2sgYW55IG9mIHRoZSBwYXJhbWV0ZXJzLgotICovCi0KLSNkZWZpbmUg
R0xfU0FNRV9NRVRIT0RfMChnbG5hbWUsIG5hbWUpICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpuYW1lKCkgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAoteyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgZ2wjI2dsbmFtZSgpOyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAorI2RlZmluZSBERUxFR0FURV9UT19JTVBMXzJfWDIobmFtZSwgdDEsIHQyKSBcCit2b2lkIEdy
YXBoaWNzQ29udGV4dDNESW50ZXJuYWw6Om5hbWUodDEgYTEsIHQyIGEyKSBcCit7IFwKKyAgICBt
X2ltcGwtPm5hbWUoYTEsIEVYVFJBQ1QoYTIpKTsgICAgIFwKIH0KIAotI2RlZmluZSBHTF9TQU1F
X01FVEhPRF8xKGdsbmFtZSwgbmFtZSwgdDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6Om5hbWUodDEgYTEpICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi17ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBnbCMjZ2xuYW1lKGExKTsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisjZGVm
aW5lIERFTEVHQVRFX1RPX0lNUExfMlIobmFtZSwgdDEsIHQyLCBydCkgIFwKK3J0IEdyYXBoaWNz
Q29udGV4dDNESW50ZXJuYWw6Om5hbWUodDEgYTEsIHQyIGEyKSBcCit7IFwKKyAgICByZXR1cm4g
bV9pbXBsLT5uYW1lKGExLCBhMik7IFwKIH0KIAotI2RlZmluZSBHTF9TQU1FX01FVEhPRF8xX1go
Z2xuYW1lLCBuYW1lLCB0MSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLXZv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6Om5hbWUodDEgYTEpICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCi17ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgICBnbCMjZ2xuYW1lKEVYVFJBQ1QoYTEpKTsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisjZGVmaW5lIERFTEVHQVRF
X1RPX0lNUExfMyhuYW1lLCB0MSwgdDIsIHQzKSAgIFwKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RJ
bnRlcm5hbDo6bmFtZSh0MSBhMSwgdDIgYTIsIHQzIGEzKSAgICBcCit7IFwKKyAgICBtX2ltcGwt
Pm5hbWUoYTEsIGEyLCBhMyk7ICAgICAgICAgICAgICAgICAgXAogfQogCi0jZGVmaW5lIEdMX1NB
TUVfTUVUSE9EXzIoZ2xuYW1lLCBuYW1lLCB0MSwgdDIpICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6bmFtZSh0MSBhMSwgdDIgYTIpICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLXsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGdsIyNnbG5hbWUoYTEsIGEyKTsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyNk
ZWZpbmUgREVMRUdBVEVfVE9fSU1QTF8zX1gxKG5hbWUsIHQxLCB0MiwgdDMpICAgXAordm9pZCBH
cmFwaGljc0NvbnRleHQzREludGVybmFsOjpuYW1lKHQxIGExLCB0MiBhMiwgdDMgYTMpICAgIFwK
K3sgXAorICAgIG1faW1wbC0+bmFtZShFWFRSQUNUKGExKSwgYTIsIGEzKTsgICAgICAgICAgXAog
fQogCi0jZGVmaW5lIEdMX1NBTUVfTUVUSE9EXzJfWDEyKGdsbmFtZSwgbmFtZSwgdDEsIHQyKSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6bmFt
ZSh0MSBhMSwgdDIgYTIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLXsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGdsIyNn
bG5hbWUoRVhUUkFDVChhMSksIEVYVFJBQ1QoYTIpKTsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKKyNkZWZpbmUgREVMRUdBVEVfVE9fSU1QTF8zUihuYW1lLCB0MSwgdDIs
IHQzLCBydCkgICBcCitydCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpuYW1lKHQxIGExLCB0
MiBhMiwgdDMgYTMpICAgIFwKK3sgXAorICAgIHJldHVybiBtX2ltcGwtPm5hbWUoYTEsIGEyLCBh
Myk7ICAgICAgICAgICAgICAgICAgXAogfQogCi0jZGVmaW5lIEdMX1NBTUVfTUVUSE9EXzJfWDIo
Z2xuYW1lLCBuYW1lLCB0MSwgdDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotdm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6bmFtZSh0MSBhMSwgdDIgYTIpICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKLXsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotICAgIGdsIyNnbG5hbWUoYTEsIEVYVFJBQ1QoYTIpKTsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyNkZWZpbmUgREVMRUdBVEVf
VE9fSU1QTF80KG5hbWUsIHQxLCB0MiwgdDMsIHQ0KSAgICBcCit2b2lkIEdyYXBoaWNzQ29udGV4
dDNESW50ZXJuYWw6Om5hbWUodDEgYTEsIHQyIGEyLCB0MyBhMywgdDQgYTQpICBcCit7IFwKKyAg
ICBtX2ltcGwtPm5hbWUoYTEsIGEyLCBhMywgYTQpOyAgICAgICAgICAgICAgXAogfQogCi0jZGVm
aW5lIEdMX1NBTUVfTUVUSE9EXzMoZ2xuYW1lLCBuYW1lLCB0MSwgdDIsIHQzKSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6bmFtZSh0MSBhMSwg
dDIgYTIsIHQzIGEzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLXsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGdsIyNnbG5hbWUoYTEs
IGEyLCBhMyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKKyNkZWZpbmUgREVMRUdBVEVfVE9fSU1QTF80X1g0KG5hbWUsIHQxLCB0MiwgdDMsIHQ0
KSAgICBcCit2b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6Om5hbWUodDEgYTEsIHQyIGEy
LCB0MyBhMywgdDQgYTQpICBcCit7IFwKKyAgICBtX2ltcGwtPm5hbWUoYTEsIGEyLCBhMywgRVhU
UkFDVChhNCkpOyAgICAgIFwKIH0KIAotI2RlZmluZSBHTF9TQU1FX01FVEhPRF8zX1gxMihnbG5h
bWUsIG5hbWUsIHQxLCB0MiwgdDMpICAgICAgICAgICAgICAgICAgICAgICAgIFwKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6Om5hbWUodDEgYTEsIHQyIGEyLCB0MyBhMykgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCi17ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKLSAgICBnbCMjZ2xuYW1lKEVYVFJBQ1QoYTEpLCBFWFRSQUNUKGEyKSwgYTMpOyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisjZGVmaW5lIERFTEVHQVRFX1RPX0lN
UExfNShuYW1lLCB0MSwgdDIsIHQzLCB0NCwgdDUpICAgICAgXAordm9pZCBHcmFwaGljc0NvbnRl
eHQzREludGVybmFsOjpuYW1lKHQxIGExLCB0MiBhMiwgdDMgYTMsIHQ0IGE0LCB0NSBhNSkgICAg
ICAgIFwKK3sgXAorICAgIG1faW1wbC0+bmFtZShhMSwgYTIsIGEzLCBhNCwgYTUpOyAgIFwKIH0K
IAotI2RlZmluZSBHTF9TQU1FX01FVEhPRF8zX1gyKGdsbmFtZSwgbmFtZSwgdDEsIHQyLCB0Mykg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6Om5hbWUo
dDEgYTEsIHQyIGEyLCB0MyBhMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi17ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBnbCMjZ2xu
YW1lKGExLCBFWFRSQUNUKGEyKSwgYTMpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCisjZGVmaW5lIERFTEVHQVRFX1RPX0lNUExfNV9YNChuYW1lLCB0MSwgdDIs
IHQzLCB0NCwgdDUpICAgICAgICAgICAgICAgIFwKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRl
cm5hbDo6bmFtZSh0MSBhMSwgdDIgYTIsIHQzIGEzLCB0NCBhNCwgdDUgYTUpICAgICAgICBcCit7
IFwKKyAgICBtX2ltcGwtPm5hbWUoYTEsIGEyLCBhMywgRVhUUkFDVChhNCksIGE1KTsgIFwKIH0K
IAotI2RlZmluZSBHTF9TQU1FX01FVEhPRF80KGdsbmFtZSwgbmFtZSwgdDEsIHQyLCB0MywgdDQp
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6Om5hbWUo
dDEgYTEsIHQyIGEyLCB0MyBhMywgdDQgYTQpICAgICAgICAgICAgICAgICAgICAgICBcCi17ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBnbCMjZ2xu
YW1lKGExLCBhMiwgYTMsIGE0KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCisjZGVmaW5lIERFTEVHQVRFX1RPX0lNUExfNVIobmFtZSwgdDEsIHQyLCB0
MywgdDQsIHQ1LCBydCkgICAgICBcCitydCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpuYW1l
KHQxIGExLCB0MiBhMiwgdDMgYTMsIHQ0IGE0LCB0NSBhNSkgICAgICAgIFwKK3sgXAorICAgIHJl
dHVybiBtX2ltcGwtPm5hbWUoYTEsIGEyLCBhMywgYTQsIGE1KTsgICBcCiB9CiAKLSNkZWZpbmUg
R0xfU0FNRV9NRVRIT0RfNF9YNChnbG5hbWUsIG5hbWUsIHQxLCB0MiwgdDMsIHQ0KSAgICAgICAg
ICAgICAgICAgICAgICBcCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpuYW1lKHQxIGExLCB0MiBh
MiwgdDMgYTMsIHQ0IGE0KSAgICAgICAgICAgICAgICAgICAgICAgXAoteyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgZ2wjI2dsbmFtZShhMSwgYTIs
IGEzLCBFWFRSQUNUKGE0KSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAorI2RlZmluZSBERUxFR0FURV9UT19JTVBMXzYobmFtZSwgdDEsIHQyLCB0MywgdDQsIHQ1LCB0
NikgIFwKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6bmFtZSh0MSBhMSwgdDIgYTIs
IHQzIGEzLCB0NCBhNCwgdDUgYTUsIHQ2IGE2KSBcCit7IFwKKyAgICBtX2ltcGwtPm5hbWUoYTEs
IGEyLCBhMywgYTQsIGE1LCBhNik7ICAgICAgIFwKIH0KIAotI2RlZmluZSBHTF9TQU1FX01FVEhP
RF81KGdsbmFtZSwgbmFtZSwgdDEsIHQyLCB0MywgdDQsIHQ1KSAgICAgICAgICAgICAgICAgICAg
IFwKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6Om5hbWUodDEgYTEsIHQyIGEyLCB0MyBhMywgdDQg
YTQsIHQ1IGE1KSAgICAgICAgICAgICAgICBcCi17ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKLSAgICBnbCMjZ2xuYW1lKGExLCBhMiwgYTMsIGE0LCBhNSk7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisjZGVmaW5lIERF
TEVHQVRFX1RPX0lNUExfNlIobmFtZSwgdDEsIHQyLCB0MywgdDQsIHQ1LCB0NiwgcnQpICBcCity
dCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpuYW1lKHQxIGExLCB0MiBhMiwgdDMgYTMsIHQ0
IGE0LCB0NSBhNSwgdDYgYTYpIFwKK3sgXAorICAgIHJldHVybiBtX2ltcGwtPm5hbWUoYTEsIGEy
LCBhMywgYTQsIGE1LCBhNik7ICAgICAgIFwKIH0KIAotI2RlZmluZSBHTF9TQU1FX01FVEhPRF81
X1g0KGdsbmFtZSwgbmFtZSwgdDEsIHQyLCB0MywgdDQsIHQ1KSAgICAgICAgICAgICAgICAgIFwK
LXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6Om5hbWUodDEgYTEsIHQyIGEyLCB0MyBhMywgdDQgYTQs
IHQ1IGE1KSAgICAgICAgICAgICAgICBcCi17ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKLSAgICBnbCMjZ2xuYW1lKGExLCBhMiwgYTMsIEVYVFJBQ1QoYTQp
LCBhNSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisjZGVmaW5lIERFTEVH
QVRFX1RPX0lNUExfN1IobmFtZSwgdDEsIHQyLCB0MywgdDQsIHQ1LCB0NiwgdDcsIHJ0KSBcCity
dCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpuYW1lKHQxIGExLCB0MiBhMiwgdDMgYTMsIHQ0
IGE0LCB0NSBhNSwgdDYgYTYsIHQ3IGE3KSBcCit7IFwKKyAgICByZXR1cm4gbV9pbXBsLT5uYW1l
KGExLCBhMiwgYTMsIGE0LCBhNSwgYTYsIGE3KTsgICBcCiB9CiAKLSNkZWZpbmUgR0xfU0FNRV9N
RVRIT0RfNihnbG5hbWUsIG5hbWUsIHQxLCB0MiwgdDMsIHQ0LCB0NSwgdDYpICAgICAgICAgICAg
ICAgICBcCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpuYW1lKHQxIGExLCB0MiBhMiwgdDMgYTMs
IHQ0IGE0LCB0NSBhNSwgdDYgYTYpICAgICAgICAgXAoteyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
LSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgZ2wjI2dsbmFtZShhMSwgYTIsIGEzLCBhNCwg
YTUsIGE2KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorI2RlZmlu
ZSBERUxFR0FURV9UT19JTVBMXzgobmFtZSwgdDEsIHQyLCB0MywgdDQsIHQ1LCB0NiwgdDcsIHQ4
KSAgICAgICBcCit2b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6Om5hbWUodDEgYTEsIHQy
IGEyLCB0MyBhMywgdDQgYTQsIHQ1IGE1LCB0NiBhNiwgdDcgYTcsIHQ4IGE4KSBcCit7IFwKKyAg
ICBtX2ltcGwtPm5hbWUoYTEsIGEyLCBhMywgYTQsIGE1LCBhNiwgYTcsIGE4KTsgICAgICBcCiB9
CiAKLSNkZWZpbmUgR0xfU0FNRV9NRVRIT0RfOChnbG5hbWUsIG5hbWUsIHQxLCB0MiwgdDMsIHQ0
LCB0NSwgdDYsIHQ3LCB0OCkgICAgICAgICBcCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpuYW1l
KHQxIGExLCB0MiBhMiwgdDMgYTMsIHQ0IGE0LCB0NSBhNSwgdDYgYTYsIHQ3IGE3LCB0OCBhOCkg
ICBcCi17ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAg
ICBnbCMjZ2xuYW1lKGExLCBhMiwgYTMsIGE0LCBhNSwgYTYsIGE3LCBhOCk7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCisjZGVmaW5lIERFTEVHQVRFX1RPX0lNUExfOVIobmFtZSwg
dDEsIHQyLCB0MywgdDQsIHQ1LCB0NiwgdDcsIHQ4LCB0OSwgcnQpIFwKK3J0IEdyYXBoaWNzQ29u
dGV4dDNESW50ZXJuYWw6Om5hbWUodDEgYTEsIHQyIGEyLCB0MyBhMywgdDQgYTQsIHQ1IGE1LCB0
NiBhNiwgdDcgYTcsIHQ4IGE4LCB0OSBhOSkgXAoreyBcCisgICAgcmV0dXJuIG1faW1wbC0+bmFt
ZShhMSwgYTIsIGEzLCBhNCwgYTUsIGE2LCBhNywgYTgsIGE5KTsgICBcCiB9CiAKLVBhc3NPd25Q
dHI8R3JhcGhpY3NDb250ZXh0M0Q+IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUoR3JhcGhpY3ND
b250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cnMpCi17Ci0gICAgUGFzc093blB0cjxHcmFwaGljc0Nv
bnRleHQzRD4gY29udGV4dCA9IG5ldyBHcmFwaGljc0NvbnRleHQzRChhdHRycyk7Ci0gICAgLy8g
RklYTUU6IGFkZCBlcnJvciBjaGVja2luZwotICAgIHJldHVybiBjb250ZXh0OwotfQorREVMRUdB
VEVfVE9fSU1QTF9SKG1ha2VDb250ZXh0Q3VycmVudCwgYm9vbCkKK0RFTEVHQVRFX1RPX0lNUExf
MVIoc2l6ZUluQnl0ZXMsIGludCwgaW50KQogCi1HcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3ND
b250ZXh0M0QoR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cnMpCi0gICAgOiBtX2N1
cnJlbnRXaWR0aCgwKQotICAgICwgbV9jdXJyZW50SGVpZ2h0KDApCi0gICAgLCBtX2ludGVybmFs
KG5ldyBHcmFwaGljc0NvbnRleHQzREludGVybmFsKGF0dHJzKSkKLXsKLX0KK0RFTEVHQVRFX1RP
X0lNUExfMShhY3RpdmVUZXh0dXJlLCB1bnNpZ25lZCBsb25nKQorREVMRUdBVEVfVE9fSU1QTF8y
X1gxMihhdHRhY2hTaGFkZXIsIFdlYkdMUHJvZ3JhbSosIFdlYkdMU2hhZGVyKikKIAotR3JhcGhp
Y3NDb250ZXh0M0Q6On5HcmFwaGljc0NvbnRleHQzRCgpCit2b2lkIEdyYXBoaWNzQ29udGV4dDNE
SW50ZXJuYWw6OmJpbmRBdHRyaWJMb2NhdGlvbihXZWJHTFByb2dyYW0qIHByb2dyYW0sIHVuc2ln
bmVkIGxvbmcgaW5kZXgsIGNvbnN0IFN0cmluZyYgbmFtZSkKIHsKKyAgICBtX2ltcGwtPmJpbmRB
dHRyaWJMb2NhdGlvbihFWFRSQUNUKHByb2dyYW0pLCBpbmRleCwgbmFtZS51dGY4KCkuZGF0YSgp
KTsKIH0KIAotUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCBHcmFwaGljc0NvbnRleHQzRDo6cGxh
dGZvcm1HcmFwaGljc0NvbnRleHQzRCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1faW50ZXJuYWwt
PnBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QoKTsKLX0KK0RFTEVHQVRFX1RPX0lNUExfMl9YMihi
aW5kQnVmZmVyLCB1bnNpZ25lZCBsb25nLCBXZWJHTEJ1ZmZlciopCitERUxFR0FURV9UT19JTVBM
XzJfWDIoYmluZEZyYW1lYnVmZmVyLCB1bnNpZ25lZCBsb25nLCBXZWJHTEZyYW1lYnVmZmVyKikK
K0RFTEVHQVRFX1RPX0lNUExfMl9YMihiaW5kUmVuZGVyYnVmZmVyLCB1bnNpZ25lZCBsb25nLCBX
ZWJHTFJlbmRlcmJ1ZmZlciopCiAKLVBsYXRmb3JtM0RPYmplY3QgR3JhcGhpY3NDb250ZXh0M0Q6
OnBsYXRmb3JtVGV4dHVyZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1faW50ZXJuYWwtPnBsYXRm
b3JtVGV4dHVyZSgpOwotfQorc3RhdGljIGNvbnN0IGludCBrVGV4dHVyZVdyYXBSID0gMHg4MDcy
OwogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjptYWtlQ29udGV4dEN1cnJlbnQoKQotewotICAg
IG1faW50ZXJuYWwtPm1ha2VDb250ZXh0Q3VycmVudCgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjpyZXNoYXBlKGludCB3aWR0aCwgaW50IGhlaWdodCkKKy8vIElmIHdlIGRpZG4ndCBo
YXZlIHRvIGhhY2sgR0xfVEVYVFVSRV9XUkFQX1IgZm9yIGN1YmUgbWFwcywKKy8vIHdlIGNvdWxk
IGp1c3QgdXNlOgorLy8gREVMRUdBVEVfVE9fSU1QTF8yX1gyKGJpbmRUZXh0dXJlLCB1bnNpZ25l
ZCBsb25nLCBXZWJHTFRleHR1cmUqKQordm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpi
aW5kVGV4dHVyZSh1bnNpZ25lZCBsb25nIHRhcmdldCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgV2ViR0xUZXh0dXJlKiB0ZXh0dXJlKQogewotICAgIGlmICh3
aWR0aCA9PSBtX2N1cnJlbnRXaWR0aCAmJiBoZWlnaHQgPT0gbV9jdXJyZW50SGVpZ2h0KQotICAg
ICAgICByZXR1cm47CisgICAgdW5zaWduZWQgaW50IHRleHR1cmVPYmplY3QgPSBFWFRSQUNUKHRl
eHR1cmUpOwogCi0gICAgbV9jdXJyZW50V2lkdGggPSB3aWR0aDsKLSAgICBtX2N1cnJlbnRIZWln
aHQgPSBoZWlnaHQ7CisgICAgbV9pbXBsLT5iaW5kVGV4dHVyZSh0YXJnZXQsIHRleHR1cmVPYmpl
Y3QpOwogCi0gICAgbV9pbnRlcm5hbC0+cmVzaGFwZSh3aWR0aCwgaGVpZ2h0KTsKKyAgICAvLyBG
SVhNRTogR0xfVEVYVFVSRV9XUkFQX1IgaXNuJ3QgZXhwb3NlZCBpbiB0aGUgT3BlbkdMIEVTIDIu
MAorICAgIC8vIEFQSS4gT24gZGVza3RvcCBPcGVuR0wgaW1wbGVtZW50YXRpb25zIGl0IHNlZW1z
IG5lY2Vzc2FyeSB0bworICAgIC8vIHNldCB0aGlzIHdyYXAgbW9kZSB0byBHTF9DTEFNUF9UT19F
REdFIHRvIGdldCBjb3JyZWN0IGJlaGF2aW9yCisgICAgLy8gb2YgY3ViZSBtYXBzLgorICAgIGlm
ICh0ZXh0dXJlKQorICAgICAgICBpZiAodGFyZ2V0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFX0NVQkVfTUFQKSB7CisgICAgICAgICAgICBpZiAoIXRleHR1cmUtPmlzQ3ViZU1hcFJXcmFw
TW9kZUluaXRpYWxpemVkKCkpIHsKKyAgICAgICAgICAgICAgICBtX2ltcGwtPnRleFBhcmFtZXRl
cmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVAsIGtUZXh0dXJlV3JhcFIsIEdy
YXBoaWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdFKTsKKyAgICAgICAgICAgICAgICB0ZXh0dXJl
LT5zZXRDdWJlTWFwUldyYXBNb2RlSW5pdGlhbGl6ZWQodHJ1ZSk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0gZWxzZQorICAgICAgICAgICAgdGV4dHVyZS0+c2V0Q3ViZU1hcFJXcmFwTW9kZUlu
aXRpYWxpemVkKGZhbHNlKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmVnaW5QYWlu
dChXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQpCi17Ci0gICAgbV9pbnRlcm5hbC0+YmVn
aW5QYWludChjb250ZXh0KTsKLX0KK0RFTEVHQVRFX1RPX0lNUExfNChibGVuZENvbG9yLCBkb3Vi
bGUsIGRvdWJsZSwgZG91YmxlLCBkb3VibGUpCitERUxFR0FURV9UT19JTVBMXzEoYmxlbmRFcXVh
dGlvbiwgdW5zaWduZWQgbG9uZykKK0RFTEVHQVRFX1RPX0lNUExfMihibGVuZEVxdWF0aW9uU2Vw
YXJhdGUsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpCitERUxFR0FURV9UT19JTVBMXzIo
YmxlbmRGdW5jLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKQorREVMRUdBVEVfVE9fSU1Q
TF80KGJsZW5kRnVuY1NlcGFyYXRlLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCB1bnNp
Z25lZCBsb25nLCB1bnNpZ25lZCBsb25nKQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjplbmRQ
YWludCgpCit2b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmJ1ZmZlckRhdGEodW5zaWdu
ZWQgbG9uZyB0YXJnZXQsIGludCBzaXplLCB1bnNpZ25lZCBsb25nIHVzYWdlKQogeworICAgIG1f
aW1wbC0+YnVmZmVyRGF0YSh0YXJnZXQsIHNpemUsIDAsIHVzYWdlKTsKIH0KIAotaW50IEdyYXBo
aWNzQ29udGV4dDNEOjpzaXplSW5CeXRlcyhpbnQgdHlwZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
M0RJbnRlcm5hbDo6YnVmZmVyRGF0YSh1bnNpZ25lZCBsb25nIHRhcmdldCwgV2ViR0xBcnJheSog
YXJyYXksIHVuc2lnbmVkIGxvbmcgdXNhZ2UpCiB7Ci0gICAgc3dpdGNoICh0eXBlKSB7Ci0gICAg
Y2FzZSBHTF9CWVRFOgotICAgICAgICByZXR1cm4gc2l6ZW9mKEdMYnl0ZSk7Ci0gICAgY2FzZSBH
TF9VTlNJR05FRF9CWVRFOgotICAgICAgICByZXR1cm4gc2l6ZW9mKEdMdWJ5dGUpOwotICAgIGNh
c2UgR0xfU0hPUlQ6Ci0gICAgICAgIHJldHVybiBzaXplb2YoR0xzaG9ydCk7Ci0gICAgY2FzZSBH
TF9VTlNJR05FRF9TSE9SVDoKLSAgICAgICAgcmV0dXJuIHNpemVvZihHTHVzaG9ydCk7Ci0gICAg
Y2FzZSBHTF9JTlQ6Ci0gICAgICAgIHJldHVybiBzaXplb2YoR0xpbnQpOwotICAgIGNhc2UgR0xf
VU5TSUdORURfSU5UOgotICAgICAgICByZXR1cm4gc2l6ZW9mKEdMdWludCk7Ci0gICAgY2FzZSBH
TF9GTE9BVDoKLSAgICAgICAgcmV0dXJuIHNpemVvZihHTGZsb2F0KTsKLSAgICBkZWZhdWx0OiAv
LyBGSVhNRTogZGVmYXVsdCBjYXNlcyBhcmUgZGlzY291cmFnZWQgaW4gV2ViS2l0LgotICAgICAg
ICByZXR1cm4gMDsKLSAgICB9CisgICAgbV9pbXBsLT5idWZmZXJEYXRhKHRhcmdldCwgYXJyYXkt
PmJ5dGVMZW5ndGgoKSwgYXJyYXktPmJhc2VBZGRyZXNzKCksIHVzYWdlKTsKIH0KIAotdW5zaWdu
ZWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZUJ1ZmZlcigpCit2b2lkIEdyYXBoaWNzQ29udGV4
dDNESW50ZXJuYWw6OmJ1ZmZlclN1YkRhdGEodW5zaWduZWQgbG9uZyB0YXJnZXQsIGxvbmcgb2Zm
c2V0LCBXZWJHTEFycmF5KiBhcnJheSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAg
ICBHTHVpbnQgbzsKLSAgICBnbEdlbkJ1ZmZlcnMoMSwgJm8pOwotICAgIHJldHVybiBvOworICAg
IG1faW1wbC0+YnVmZmVyU3ViRGF0YSh0YXJnZXQsIG9mZnNldCwgYXJyYXktPmJ5dGVMZW5ndGgo
KSwgYXJyYXktPmJhc2VBZGRyZXNzKCkpOwogfQogCi11bnNpZ25lZCBHcmFwaGljc0NvbnRleHQz
RDo6Y3JlYXRlRnJhbWVidWZmZXIoKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAg
IEdMdWludCBvID0gMDsKLSAgICBnbEdlbkZyYW1lYnVmZmVyc0VYVCgxLCAmbyk7Ci0gICAgcmV0
dXJuIG87Ci19CitERUxFR0FURV9UT19JTVBMXzFSKGNoZWNrRnJhbWVidWZmZXJTdGF0dXMsIHVu
c2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpCitERUxFR0FURV9UT19JTVBMXzEoY2xlYXIsIHVu
c2lnbmVkIGxvbmcpCitERUxFR0FURV9UT19JTVBMXzQoY2xlYXJDb2xvciwgZG91YmxlLCBkb3Vi
bGUsIGRvdWJsZSwgZG91YmxlKQorREVMRUdBVEVfVE9fSU1QTF8xKGNsZWFyRGVwdGgsIGRvdWJs
ZSkKK0RFTEVHQVRFX1RPX0lNUExfMShjbGVhclN0ZW5jaWwsIGxvbmcpCitERUxFR0FURV9UT19J
TVBMXzQoY29sb3JNYXNrLCBib29sLCBib29sLCBib29sLCBib29sKQorREVMRUdBVEVfVE9fSU1Q
TF8xX1goY29tcGlsZVNoYWRlciwgV2ViR0xTaGFkZXIqKQogCi11bnNpZ25lZCBHcmFwaGljc0Nv
bnRleHQzRDo6Y3JlYXRlUHJvZ3JhbSgpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0g
ICAgcmV0dXJuIGdsQ3JlYXRlUHJvZ3JhbSgpOwotfQorREVMRUdBVEVfVE9fSU1QTF84KGNvcHlU
ZXhJbWFnZTJELCB1bnNpZ25lZCBsb25nLCBsb25nLCB1bnNpZ25lZCBsb25nLCBsb25nLCBsb25n
LCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCBsb25nKQorREVMRUdBVEVfVE9fSU1QTF84
KGNvcHlUZXhTdWJJbWFnZTJELCB1bnNpZ25lZCBsb25nLCBsb25nLCBsb25nLCBsb25nLCBsb25n
LCBsb25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKQorREVMRUdBVEVfVE9fSU1QTF8x
KGN1bGxGYWNlLCB1bnNpZ25lZCBsb25nKQorREVMRUdBVEVfVE9fSU1QTF8xKGRlcHRoRnVuYywg
dW5zaWduZWQgbG9uZykKK0RFTEVHQVRFX1RPX0lNUExfMShkZXB0aE1hc2ssIGJvb2wpCitERUxF
R0FURV9UT19JTVBMXzIoZGVwdGhSYW5nZSwgZG91YmxlLCBkb3VibGUpCitERUxFR0FURV9UT19J
TVBMXzJfWDEyKGRldGFjaFNoYWRlciwgV2ViR0xQcm9ncmFtKiwgV2ViR0xTaGFkZXIqKQorREVM
RUdBVEVfVE9fSU1QTF8xKGRpc2FibGUsIHVuc2lnbmVkIGxvbmcpCitERUxFR0FURV9UT19JTVBM
XzEoZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5LCB1bnNpZ25lZCBsb25nKQorREVMRUdBVEVfVE9f
SU1QTF8zKGRyYXdBcnJheXMsIHVuc2lnbmVkIGxvbmcsIGxvbmcsIGxvbmcpCitERUxFR0FURV9U
T19JTVBMXzQoZHJhd0VsZW1lbnRzLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCB1bnNp
Z25lZCBsb25nLCBsb25nKQogCi11bnNpZ25lZCBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlUmVu
ZGVyYnVmZmVyKCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBHTHVpbnQgbzsK
LSAgICBnbEdlblJlbmRlcmJ1ZmZlcnNFWFQoMSwgJm8pOwotICAgIHJldHVybiBvOwotfQorREVM
RUdBVEVfVE9fSU1QTF8xKGVuYWJsZSwgdW5zaWduZWQgbG9uZykKK0RFTEVHQVRFX1RPX0lNUExf
MShlbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSwgdW5zaWduZWQgbG9uZykKK0RFTEVHQVRFX1RPX0lN
UEwoZmluaXNoKQorREVMRUdBVEVfVE9fSU1QTChmbHVzaCkKK0RFTEVHQVRFX1RPX0lNUExfNF9Y
NChmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlciwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywg
dW5zaWduZWQgbG9uZywgV2ViR0xSZW5kZXJidWZmZXIqKQorREVMRUdBVEVfVE9fSU1QTF81X1g0
KGZyYW1lYnVmZmVyVGV4dHVyZTJELCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCB1bnNp
Z25lZCBsb25nLCBXZWJHTFRleHR1cmUqLCBsb25nKQorREVMRUdBVEVfVE9fSU1QTF8xKGZyb250
RmFjZSwgdW5zaWduZWQgbG9uZykKK0RFTEVHQVRFX1RPX0lNUExfMShnZW5lcmF0ZU1pcG1hcCwg
dW5zaWduZWQgbG9uZykKIAotdW5zaWduZWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZVNoYWRl
cih1bnNpZ25lZCBsb25nIHR5cGUpCitib29sIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6Omdl
dEFjdGl2ZUF0dHJpYihXZWJHTFByb2dyYW0qIHByb2dyYW0sIHVuc2lnbmVkIGxvbmcgaW5kZXgs
IEFjdGl2ZUluZm8mIGluZm8pCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgcmV0
dXJuIGdsQ3JlYXRlU2hhZGVyKCh0eXBlID09IEZSQUdNRU5UX1NIQURFUikgPyBHTF9GUkFHTUVO
VF9TSEFERVIgOiBHTF9WRVJURVhfU0hBREVSKTsKKyAgICBXZWJLaXQ6OldlYkdyYXBoaWNzQ29u
dGV4dDNEOjpBY3RpdmVJbmZvIHdlYkluZm87CisgICAgaWYgKCFtX2ltcGwtPmdldEFjdGl2ZUF0
dHJpYihFWFRSQUNUKHByb2dyYW0pLCBpbmRleCwgd2ViSW5mbykpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBpbmZvLm5hbWUgPSB3ZWJJbmZvLm5hbWU7CisgICAgaW5mby50eXBlID0gd2Vi
SW5mby50eXBlOworICAgIGluZm8uc2l6ZSA9IHdlYkluZm8uc2l6ZTsKKyAgICByZXR1cm4gdHJ1
ZTsKIH0KIAotdW5zaWduZWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZVRleHR1cmUoKQorYm9v
bCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpnZXRBY3RpdmVVbmlmb3JtKFdlYkdMUHJvZ3Jh
bSogcHJvZ3JhbSwgdW5zaWduZWQgbG9uZyBpbmRleCwgQWN0aXZlSW5mbyYgaW5mbykKIHsKLSAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBHTHVpbnQgbzsKLSAgICBnbEdlblRleHR1cmVz
KDEsICZvKTsKLSAgICByZXR1cm4gbzsKKyAgICBXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNE
OjpBY3RpdmVJbmZvIHdlYkluZm87CisgICAgaWYgKCFtX2ltcGwtPmdldEFjdGl2ZVVuaWZvcm0o
RVhUUkFDVChwcm9ncmFtKSwgaW5kZXgsIHdlYkluZm8pKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgaW5mby5uYW1lID0gd2ViSW5mby5uYW1lOworICAgIGluZm8udHlwZSA9IHdlYkluZm8u
dHlwZTsKKyAgICBpbmZvLnNpemUgPSB3ZWJJbmZvLnNpemU7CisgICAgcmV0dXJuIHRydWU7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZUJ1ZmZlcih1bnNpZ25lZCBidWZmZXIp
CitpbnQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6Z2V0QXR0cmliTG9jYXRpb24oV2ViR0xQ
cm9ncmFtKiBwcm9ncmFtLCBjb25zdCBTdHJpbmcmIG5hbWUpCiB7Ci0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7Ci0gICAgZ2xEZWxldGVCdWZmZXJzKDEsICZidWZmZXIpOworICAgIHJldHVybiBt
X2ltcGwtPmdldEF0dHJpYkxvY2F0aW9uKEVYVFJBQ1QocHJvZ3JhbSksIG5hbWUudXRmOCgpLmRh
dGEoKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZUZyYW1lYnVmZmVyKHVu
c2lnbmVkIGZyYW1lYnVmZmVyKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGds
RGVsZXRlRnJhbWVidWZmZXJzRVhUKDEsICZmcmFtZWJ1ZmZlcik7Ci19CitERUxFR0FURV9UT19J
TVBMXzIoZ2V0Qm9vbGVhbnYsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGNoYXIqKQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVQcm9ncmFtKHVuc2lnbmVkIHByb2dyYW0pCi17Ci0g
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2xEZWxldGVQcm9ncmFtKHByb2dyYW0pOwot
fQorREVMRUdBVEVfVE9fSU1QTF8zKGdldEJ1ZmZlclBhcmFtZXRlcml2LCB1bnNpZ25lZCBsb25n
LCB1bnNpZ25lZCBsb25nLCBpbnQqKQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVS
ZW5kZXJidWZmZXIodW5zaWduZWQgcmVuZGVyYnVmZmVyKQorR3JhcGhpY3NDb250ZXh0M0Q6OkF0
dHJpYnV0ZXMgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6Z2V0Q29udGV4dEF0dHJpYnV0ZXMo
KQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsRGVsZXRlUmVuZGVyYnVmZmVy
c0VYVCgxLCAmcmVuZGVyYnVmZmVyKTsKKyAgICBXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNE
OjpBdHRyaWJ1dGVzIHdlYkF0dHJpYnV0ZXMgPSBtX2ltcGwtPmdldENvbnRleHRBdHRyaWJ1dGVz
KCk7CisgICAgR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cmlidXRlczsKKyAgICBh
dHRyaWJ1dGVzLmFscGhhID0gd2ViQXR0cmlidXRlcy5hbHBoYTsKKyAgICBhdHRyaWJ1dGVzLmRl
cHRoID0gd2ViQXR0cmlidXRlcy5kZXB0aDsKKyAgICBhdHRyaWJ1dGVzLnN0ZW5jaWwgPSB3ZWJB
dHRyaWJ1dGVzLnN0ZW5jaWw7CisgICAgYXR0cmlidXRlcy5hbnRpYWxpYXMgPSB3ZWJBdHRyaWJ1
dGVzLmFudGlhbGlhczsKKyAgICBhdHRyaWJ1dGVzLnByZW11bHRpcGxpZWRBbHBoYSA9IHdlYkF0
dHJpYnV0ZXMucHJlbXVsdGlwbGllZEFscGhhOworICAgIHJldHVybiBhdHRyaWJ1dGVzOwogfQog
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVTaGFkZXIodW5zaWduZWQgc2hhZGVyKQot
ewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsRGVsZXRlU2hhZGVyKHNoYWRlcik7
Ci19CitERUxFR0FURV9UT19JTVBMX1IoZ2V0RXJyb3IsIHVuc2lnbmVkIGxvbmcpCiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZVRleHR1cmUodW5zaWduZWQgdGV4dHVyZSkKLXsKLSAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbERlbGV0ZVRleHR1cmVzKDEsICZ0ZXh0dXJl
KTsKLX0KK0RFTEVHQVRFX1RPX0lNUExfMihnZXRGbG9hdHYsIHVuc2lnbmVkIGxvbmcsIGZsb2F0
KikKIAotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YWN0aXZlVGV4dHVyZSh1bnNpZ25lZCBsb25n
IHRleHR1cmUpCi17Ci0gICAgbV9pbnRlcm5hbC0+YWN0aXZlVGV4dHVyZSh0ZXh0dXJlKTsKLX0K
K0RFTEVHQVRFX1RPX0lNUExfNChnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpdiwg
dW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgaW50KikKIAotR0xf
U0FNRV9NRVRIT0RfMl9YMTIoQXR0YWNoU2hhZGVyLCBhdHRhY2hTaGFkZXIsIFdlYkdMUHJvZ3Jh
bSosIFdlYkdMU2hhZGVyKikKK0RFTEVHQVRFX1RPX0lNUExfMihnZXRJbnRlZ2VydiwgdW5zaWdu
ZWQgbG9uZywgaW50KikKIAotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmluZEF0dHJpYkxvY2F0
aW9uKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGluZGV4LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgbmFtZSkKLXsKLSAgICBpZiAoIXBy
b2dyYW0pCi0gICAgICAgIHJldHVybjsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBn
bEJpbmRBdHRyaWJMb2NhdGlvbihFWFRSQUNUKHByb2dyYW0pLCBpbmRleCwgbmFtZS51dGY4KCku
ZGF0YSgpKTsKLX0KK0RFTEVHQVRFX1RPX0lNUExfM19YMShnZXRQcm9ncmFtaXYsIFdlYkdMUHJv
Z3JhbSosIHVuc2lnbmVkIGxvbmcsIGludCopCiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJp
bmRCdWZmZXIodW5zaWduZWQgbG9uZyB0YXJnZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFdlYkdMQnVmZmVyKiBidWZmZXIpCitTdHJpbmcgR3JhcGhpY3NDb250ZXh0M0RJ
bnRlcm5hbDo6Z2V0UHJvZ3JhbUluZm9Mb2coV2ViR0xQcm9ncmFtKiBwcm9ncmFtKQogewotICAg
IG1faW50ZXJuYWwtPmJpbmRCdWZmZXIodGFyZ2V0LCBidWZmZXIpOworICAgIHJldHVybiBtX2lt
cGwtPmdldFByb2dyYW1JbmZvTG9nKEVYVFJBQ1QocHJvZ3JhbSkpOwogfQogCi12b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpiaW5kRnJhbWVidWZmZXIodW5zaWduZWQgbG9uZyB0YXJnZXQsIFdlYkdM
RnJhbWVidWZmZXIqIGZyYW1lYnVmZmVyKQotewotICAgIG1faW50ZXJuYWwtPmJpbmRGcmFtZWJ1
ZmZlcih0YXJnZXQsIGZyYW1lYnVmZmVyKTsKLX0KK0RFTEVHQVRFX1RPX0lNUExfMyhnZXRSZW5k
ZXJidWZmZXJQYXJhbWV0ZXJpdiwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgaW50KikK
IAotR0xfU0FNRV9NRVRIT0RfMl9YMihCaW5kUmVuZGVyYnVmZmVyRVhULCBiaW5kUmVuZGVyYnVm
ZmVyLCB1bnNpZ25lZCBsb25nLCBXZWJHTFJlbmRlcmJ1ZmZlciopCitERUxFR0FURV9UT19JTVBM
XzNfWDEoZ2V0U2hhZGVyaXYsIFdlYkdMU2hhZGVyKiwgdW5zaWduZWQgbG9uZywgaW50KikKIAot
Ly8gSWYgd2UgZGlkbid0IGhhdmUgdG8gaGFjayBHTF9URVhUVVJFX1dSQVBfUiBmb3IgY3ViZSBt
YXBzLAotLy8gd2UgY291bGQganVzdCB1c2U6Ci0vLyBHTF9TQU1FX01FVEhPRF8yX1gyKEJpbmRU
ZXh0dXJlLCBiaW5kVGV4dHVyZSwgdW5zaWduZWQgbG9uZywgV2ViR0xUZXh0dXJlKikKLXZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRUZXh0dXJlKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViR0xUZXh0dXJlKiB0ZXh0dXJlKQor
U3RyaW5nIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmdldFNoYWRlckluZm9Mb2coV2ViR0xT
aGFkZXIqIHNoYWRlcikKIHsKLSAgICBtX2ludGVybmFsLT5iaW5kVGV4dHVyZSh0YXJnZXQsIHRl
eHR1cmUpOworICAgIHJldHVybiBtX2ltcGwtPmdldFNoYWRlckluZm9Mb2coRVhUUkFDVChzaGFk
ZXIpKTsKIH0KIAotR0xfU0FNRV9NRVRIT0RfNChCbGVuZENvbG9yLCBibGVuZENvbG9yLCBkb3Vi
bGUsIGRvdWJsZSwgZG91YmxlLCBkb3VibGUpCi0KLUdMX1NBTUVfTUVUSE9EXzEoQmxlbmRFcXVh
dGlvbiwgYmxlbmRFcXVhdGlvbiwgdW5zaWduZWQgbG9uZykKLQotR0xfU0FNRV9NRVRIT0RfMihC
bGVuZEVxdWF0aW9uU2VwYXJhdGUsIGJsZW5kRXF1YXRpb25TZXBhcmF0ZSwgdW5zaWduZWQgbG9u
ZywgdW5zaWduZWQgbG9uZykKLQotR0xfU0FNRV9NRVRIT0RfMihCbGVuZEZ1bmMsIGJsZW5kRnVu
YywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZykKLQotR0xfU0FNRV9NRVRIT0RfNChCbGVu
ZEZ1bmNTZXBhcmF0ZSwgYmxlbmRGdW5jU2VwYXJhdGUsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVk
IGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpCi0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OmJ1ZmZlckRhdGEodW5zaWduZWQgbG9uZyB0YXJnZXQsIGludCBzaXplLCB1bnNpZ25l
ZCBsb25nIHVzYWdlKQorU3RyaW5nIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmdldFNoYWRl
clNvdXJjZShXZWJHTFNoYWRlciogc2hhZGVyKQogewotICAgIG1faW50ZXJuYWwtPmJ1ZmZlckRh
dGFJbXBsKHRhcmdldCwgc2l6ZSwgMCwgdXNhZ2UpOworICAgIHJldHVybiBtX2ltcGwtPmdldFNo
YWRlclNvdXJjZShFWFRSQUNUKHNoYWRlcikpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNE
OjpidWZmZXJEYXRhKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBXZWJHTEFycmF5KiBhcnJheSwgdW5z
aWduZWQgbG9uZyB1c2FnZSkKK1N0cmluZyBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpnZXRT
dHJpbmcodW5zaWduZWQgbG9uZyBuYW1lKQogewotICAgIG1faW50ZXJuYWwtPmJ1ZmZlckRhdGFJ
bXBsKHRhcmdldCwgYXJyYXktPmJ5dGVMZW5ndGgoKSwgYXJyYXktPmJhc2VBZGRyZXNzKCksIHVz
YWdlKTsKKyAgICByZXR1cm4gbV9pbXBsLT5nZXRTdHJpbmcobmFtZSk7CiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OmJ1ZmZlclN1YkRhdGEodW5zaWduZWQgbG9uZyB0YXJnZXQsIGxvbmcg
b2Zmc2V0LCBXZWJHTEFycmF5KiBhcnJheSkKLXsKLSAgICBpZiAoIWFycmF5IHx8ICFhcnJheS0+
bGVuZ3RoKCkpCi0gICAgICAgIHJldHVybjsKK0RFTEVHQVRFX1RPX0lNUExfMyhnZXRUZXhQYXJh
bWV0ZXJmdiwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgZmxvYXQqKQorREVMRUdBVEVf
VE9fSU1QTF8zKGdldFRleFBhcmFtZXRlcml2LCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25n
LCBpbnQqKQogCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgLy8gRklYTUU6IG1ha2Ug
dGhpcyB2ZXJpZmljYXRpb24gbW9yZSBlZmZpY2llbnQuCi0gICAgR0xpbnQgYmluZGluZyA9IDA7
Ci0gICAgR0xlbnVtIGJpbmRpbmdfdGFyZ2V0ID0gR0xfQVJSQVlfQlVGRkVSX0JJTkRJTkc7Ci0g
ICAgaWYgKHRhcmdldCA9PSBHTF9FTEVNRU5UX0FSUkFZX0JVRkZFUikKLSAgICAgICAgYmluZGlu
Z190YXJnZXQgPSBHTF9FTEVNRU5UX0FSUkFZX0JVRkZFUl9CSU5ESU5HOwotICAgIGdsR2V0SW50
ZWdlcnYoYmluZGluZ190YXJnZXQsICZiaW5kaW5nKTsKLSAgICBpZiAoYmluZGluZyA8PSAwKSB7
Ci0gICAgICAgIC8vIEZJWE1FOiByYWlzZSBleGNlcHRpb24uCi0gICAgICAgIC8vIExvZ01lc3Nh
Z2VmKCgiYnVmZmVyU3ViRGF0YTogbm8gYnVmZmVyIGJvdW5kIikpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotICAgIGdsQnVmZmVyU3ViRGF0YSh0YXJnZXQsIG9mZnNldCwgYXJyYXktPmJ5dGVM
ZW5ndGgoKSwgYXJyYXktPmJhc2VBZGRyZXNzKCkpOwotfQorREVMRUdBVEVfVE9fSU1QTF8zX1gx
KGdldFVuaWZvcm1mdiwgV2ViR0xQcm9ncmFtKiwgbG9uZywgZmxvYXQqKQorREVMRUdBVEVfVE9f
SU1QTF8zX1gxKGdldFVuaWZvcm1pdiwgV2ViR0xQcm9ncmFtKiwgbG9uZywgaW50KikKIAotdW5z
aWduZWQgbG9uZyBHcmFwaGljc0NvbnRleHQzRDo6Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyh1bnNp
Z25lZCBsb25nIHRhcmdldCkKK2xvbmcgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6Z2V0VW5p
Zm9ybUxvY2F0aW9uKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lKQog
ewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIHJldHVybiBnbENoZWNrRnJhbWVidWZm
ZXJTdGF0dXNFWFQodGFyZ2V0KTsKKyAgICByZXR1cm4gbV9pbXBsLT5nZXRVbmlmb3JtTG9jYXRp
b24oRVhUUkFDVChwcm9ncmFtKSwgbmFtZS51dGY4KCkuZGF0YSgpKTsKIH0KIAotR0xfU0FNRV9N
RVRIT0RfMShDbGVhciwgY2xlYXIsIHVuc2lnbmVkIGxvbmcpCi0KLUdMX1NBTUVfTUVUSE9EXzQo
Q2xlYXJDb2xvciwgY2xlYXJDb2xvciwgZG91YmxlLCBkb3VibGUsIGRvdWJsZSwgZG91YmxlKQor
REVMRUdBVEVfVE9fSU1QTF8zKGdldFZlcnRleEF0dHJpYmZ2LCB1bnNpZ25lZCBsb25nLCB1bnNp
Z25lZCBsb25nLCBmbG9hdCopCitERUxFR0FURV9UT19JTVBMXzMoZ2V0VmVydGV4QXR0cmliaXYs
IHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIGludCopCiAKLUdMX1NBTUVfTUVUSE9EXzEo
Q2xlYXJEZXB0aCwgY2xlYXJEZXB0aCwgZG91YmxlKQorREVMRUdBVEVfVE9fSU1QTF8yUihnZXRW
ZXJ0ZXhBdHRyaWJPZmZzZXQsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIGxvbmcpCiAK
LUdMX1NBTUVfTUVUSE9EXzEoQ2xlYXJTdGVuY2lsLCBjbGVhclN0ZW5jaWwsIGxvbmcpCitERUxF
R0FURV9UT19JTVBMXzIoaGludCwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZykKK0RFTEVH
QVRFX1RPX0lNUExfMVJfWChpc0J1ZmZlciwgV2ViR0xCdWZmZXIqLCBib29sKQorREVMRUdBVEVf
VE9fSU1QTF8xUihpc0VuYWJsZWQsIHVuc2lnbmVkIGxvbmcsIGJvb2wpCitERUxFR0FURV9UT19J
TVBMXzFSX1goaXNGcmFtZWJ1ZmZlciwgV2ViR0xGcmFtZWJ1ZmZlciosIGJvb2wpCitERUxFR0FU
RV9UT19JTVBMXzFSX1goaXNQcm9ncmFtLCBXZWJHTFByb2dyYW0qLCBib29sKQorREVMRUdBVEVf
VE9fSU1QTF8xUl9YKGlzUmVuZGVyYnVmZmVyLCBXZWJHTFJlbmRlcmJ1ZmZlciosIGJvb2wpCitE
RUxFR0FURV9UT19JTVBMXzFSX1goaXNTaGFkZXIsIFdlYkdMU2hhZGVyKiwgYm9vbCkKK0RFTEVH
QVRFX1RPX0lNUExfMVJfWChpc1RleHR1cmUsIFdlYkdMVGV4dHVyZSosIGJvb2wpCitERUxFR0FU
RV9UT19JTVBMXzEobGluZVdpZHRoLCBkb3VibGUpCitERUxFR0FURV9UT19JTVBMXzFfWChsaW5r
UHJvZ3JhbSwgV2ViR0xQcm9ncmFtKikKK0RFTEVHQVRFX1RPX0lNUExfMihwaXhlbFN0b3JlaSwg
dW5zaWduZWQgbG9uZywgbG9uZykKK0RFTEVHQVRFX1RPX0lNUExfMihwb2x5Z29uT2Zmc2V0LCBk
b3VibGUsIGRvdWJsZSkKIAotR0xfU0FNRV9NRVRIT0RfNChDb2xvck1hc2ssIGNvbG9yTWFzaywg
Ym9vbCwgYm9vbCwgYm9vbCwgYm9vbCkKLQotR0xfU0FNRV9NRVRIT0RfMV9YKENvbXBpbGVTaGFk
ZXIsIGNvbXBpbGVTaGFkZXIsIFdlYkdMU2hhZGVyKikKLQotR0xfU0FNRV9NRVRIT0RfOChDb3B5
VGV4SW1hZ2UyRCwgY29weVRleEltYWdlMkQsIHVuc2lnbmVkIGxvbmcsIGxvbmcsIHVuc2lnbmVk
IGxvbmcsIGxvbmcsIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIGxvbmcpCi0K
LUdMX1NBTUVfTUVUSE9EXzgoQ29weVRleFN1YkltYWdlMkQsIGNvcHlUZXhTdWJJbWFnZTJELCB1
bnNpZ25lZCBsb25nLCBsb25nLCBsb25nLCBsb25nLCBsb25nLCBsb25nLCB1bnNpZ25lZCBsb25n
LCB1bnNpZ25lZCBsb25nKQotCi1HTF9TQU1FX01FVEhPRF8xKEN1bGxGYWNlLCBjdWxsRmFjZSwg
dW5zaWduZWQgbG9uZykKLQotR0xfU0FNRV9NRVRIT0RfMShEZXB0aEZ1bmMsIGRlcHRoRnVuYywg
dW5zaWduZWQgbG9uZykKLQotR0xfU0FNRV9NRVRIT0RfMShEZXB0aE1hc2ssIGRlcHRoTWFzaywg
Ym9vbCkKLQotR0xfU0FNRV9NRVRIT0RfMihEZXB0aFJhbmdlLCBkZXB0aFJhbmdlLCBkb3VibGUs
IGRvdWJsZSkKLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGV0YWNoU2hhZGVyKFdlYkdMUHJv
Z3JhbSogcHJvZ3JhbSwgV2ViR0xTaGFkZXIqIHNoYWRlcikKK1Bhc3NSZWZQdHI8V2ViR0xBcnJh
eT4gR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6cmVhZFBpeGVscyhsb25nIHgsIGxvbmcgeSwg
dW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQsIHVuc2lnbmVkIGxvbmcg
Zm9ybWF0LCB1bnNpZ25lZCBsb25nIHR5cGUpCiB7Ci0gICAgaWYgKCFwcm9ncmFtIHx8ICFzaGFk
ZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGds
RGV0YWNoU2hhZGVyKEVYVFJBQ1QocHJvZ3JhbSksIEVYVFJBQ1Qoc2hhZGVyKSk7CisgICAgLy8g
RklYTUU6IHRha2UgaW50byBhY2NvdW50IHBhY2sgYWxpZ25tZW50LgorICAgIFJlZlB0cjxXZWJH
TFVuc2lnbmVkQnl0ZUFycmF5PiBhcnJheSA9IFdlYkdMVW5zaWduZWRCeXRlQXJyYXk6OmNyZWF0
ZSh3aWR0aCAqIGhlaWdodCAqIDQpOworICAgIG1faW1wbC0+cmVhZFBpeGVscyh4LCB5LCB3aWR0
aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGFycmF5LT5iYXNlQWRkcmVzcygpKTsKKyAgICByZXR1
cm4gYXJyYXk7CiB9CiAKLUdMX1NBTUVfTUVUSE9EXzEoRGlzYWJsZSwgZGlzYWJsZSwgdW5zaWdu
ZWQgbG9uZykKK0RFTEVHQVRFX1RPX0lNUEwocmVsZWFzZVNoYWRlckNvbXBpbGVyKQorREVMRUdB
VEVfVE9fSU1QTF80KHJlbmRlcmJ1ZmZlclN0b3JhZ2UsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVk
IGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpCitERUxFR0FURV9UT19JTVBMXzIo
c2FtcGxlQ292ZXJhZ2UsIGRvdWJsZSwgYm9vbCkKK0RFTEVHQVRFX1RPX0lNUExfNChzY2lzc29y
LCBsb25nLCBsb25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKQogCi12b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpkaXNhYmxlVmVydGV4QXR0cmliQXJyYXkodW5zaWduZWQgbG9uZyBpbmRl
eCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6c2hhZGVyU291cmNlKFdlYkdMU2hh
ZGVyKiBzaGFkZXIsIGNvbnN0IFN0cmluZyYgc3RyaW5nKQogewotICAgIG1faW50ZXJuYWwtPmRp
c2FibGVWZXJ0ZXhBdHRyaWJBcnJheShpbmRleCk7CisgICAgbV9pbXBsLT5zaGFkZXJTb3VyY2Uo
RVhUUkFDVChzaGFkZXIpLCBzdHJpbmcudXRmOCgpLmRhdGEoKSk7CiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OmRyYXdBcnJheXModW5zaWduZWQgbG9uZyBtb2RlLCBsb25nIGZpcnN0LCBs
b25nIGNvdW50KQotewotICAgIHN3aXRjaCAobW9kZSkgewotICAgIGNhc2UgR0xfVFJJQU5HTEVT
OgotICAgIGNhc2UgR0xfVFJJQU5HTEVfU1RSSVA6Ci0gICAgY2FzZSBHTF9UUklBTkdMRV9GQU46
Ci0gICAgY2FzZSBHTF9QT0lOVFM6Ci0gICAgY2FzZSBHTF9MSU5FX1NUUklQOgotICAgIGNhc2Ug
R0xfTElORV9MT09QOgotICAgIGNhc2UgR0xfTElORVM6Ci0gICAgICAgIGJyZWFrOwotICAgIGRl
ZmF1bHQ6IC8vIEZJWE1FOiBkZWZhdWx0IGNhc2VzIGFyZSBkaXNjb3VyYWdlZCBpbiBXZWJLaXQu
Ci0gICAgICAgIC8vIEZJWE1FOiBvdXRwdXQgbG9nIG1lc3NhZ2UsIHJhaXNlIGV4Y2VwdGlvbi4K
LSAgICAgICAgLy8gTG9nTWVzc2FnZShOU19MSVRFUkFMX0NTVFJJTkcoImRyYXdBcnJheXM6IGlu
dmFsaWQgbW9kZSIpKTsKLSAgICAgICAgLy8gcmV0dXJuIE5TX0VSUk9SX0RPTV9TWU5UQVhfRVJS
OwotICAgICAgICByZXR1cm47Ci0gICAgfQorREVMRUdBVEVfVE9fSU1QTF8zKHN0ZW5jaWxGdW5j
LCB1bnNpZ25lZCBsb25nLCBsb25nLCB1bnNpZ25lZCBsb25nKQorREVMRUdBVEVfVE9fSU1QTF80
KHN0ZW5jaWxGdW5jU2VwYXJhdGUsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIGxvbmcs
IHVuc2lnbmVkIGxvbmcpCitERUxFR0FURV9UT19JTVBMXzEoc3RlbmNpbE1hc2ssIHVuc2lnbmVk
IGxvbmcpCitERUxFR0FURV9UT19JTVBMXzIoc3RlbmNpbE1hc2tTZXBhcmF0ZSwgdW5zaWduZWQg
bG9uZywgdW5zaWduZWQgbG9uZykKK0RFTEVHQVRFX1RPX0lNUExfMyhzdGVuY2lsT3AsIHVuc2ln
bmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpCitERUxFR0FURV9UT19JTVBM
XzQoc3RlbmNpbE9wU2VwYXJhdGUsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2ln
bmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpCiAKLSAgICBpZiAoZmlyc3QrY291bnQgPCBmaXJzdCB8
fCBmaXJzdCtjb3VudCA8IGNvdW50KSB7Ci0gICAgICAgIC8vIEZJWE1FOiBvdXRwdXQgbG9nIG1l
c3NhZ2UsIHJhaXNlIGV4Y2VwdGlvbi4KLSAgICAgICAgLy8gTG9nTWVzc2FnZShOU19MSVRFUkFM
X0NTVFJJTkcoImRyYXdBcnJheXM6IG92ZXJmbG93IGluIGZpcnN0K2NvdW50IikpOwotICAgICAg
ICAvLyByZXR1cm4gTlNfRVJST1JfSU5WQUxJRF9BUkc7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICAvLyBGSVhNRTogdmFsaWRhdGUgYWdhaW5zdCBjdXJyZW50bHkgYm91bmQgYnVmZmVy
LgotICAgIC8vIGlmICghVmFsaWRhdGVCdWZmZXJzKGZpcnN0K2NvdW50KSkKLSAgICAvLyAgICAg
cmV0dXJuIE5TX0VSUk9SX0lOVkFMSURfQVJHOwotCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
Ci0gICAgZ2xEcmF3QXJyYXlzKG1vZGUsIGZpcnN0LCBjb3VudCk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OmRyYXdFbGVtZW50cyh1bnNpZ25lZCBsb25nIG1vZGUsIHVuc2lnbmVkIGxv
bmcgY291bnQsIHVuc2lnbmVkIGxvbmcgdHlwZSwgbG9uZyBvZmZzZXQpCi17Ci0gICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7Ci0gICAgLy8gRklYTUU6IG1ha2UgdGhpcyB2ZXJpZmljYXRpb24gbW9y
ZSBlZmZpY2llbnQuCi0gICAgR0xpbnQgYmluZGluZyA9IDA7Ci0gICAgR0xlbnVtIGJpbmRpbmdf
dGFyZ2V0ID0gR0xfRUxFTUVOVF9BUlJBWV9CVUZGRVJfQklORElORzsKLSAgICBnbEdldEludGVn
ZXJ2KGJpbmRpbmdfdGFyZ2V0LCAmYmluZGluZyk7Ci0gICAgaWYgKGJpbmRpbmcgPD0gMCkgewot
ICAgICAgICAvLyBGSVhNRTogcmFpc2UgZXhjZXB0aW9uLgotICAgICAgICAvLyBMb2dNZXNzYWdl
ZigoImJ1ZmZlckRhdGE6IG5vIGJ1ZmZlciBib3VuZCIpKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLSAgICBnbERyYXdFbGVtZW50cyhtb2RlLCBjb3VudCwgdHlwZSwKLSAgICAgICAgICAgICAg
ICAgICByZWludGVycHJldF9jYXN0PHZvaWQqPihzdGF0aWNfY2FzdDxpbnRwdHJfdD4ob2Zmc2V0
KSkpOworaW50IEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OnRleEltYWdlMkQodW5zaWduZWQg
dGFyZ2V0LCB1bnNpZ25lZCBsZXZlbCwgdW5zaWduZWQgaW50ZXJuYWxmb3JtYXQsIHVuc2lnbmVk
IHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQsIHVuc2lnbmVkIGJvcmRlciwgdW5zaWduZWQgZm9ybWF0
LCB1bnNpZ25lZCB0eXBlLCB2b2lkKiBwaXhlbHMpCit7CisgICAgbV9pbXBsLT50ZXhJbWFnZTJE
KHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGZv
cm1hdCwgdHlwZSwgcGl4ZWxzKTsKKyAgICByZXR1cm4gMDsKIH0KIAotR0xfU0FNRV9NRVRIT0Rf
MShFbmFibGUsIGVuYWJsZSwgdW5zaWduZWQgbG9uZykKK0RFTEVHQVRFX1RPX0lNUExfMyh0ZXhQ
YXJhbWV0ZXJmLCB1bnNpZ25lZCwgdW5zaWduZWQsIGZsb2F0KQorREVMRUdBVEVfVE9fSU1QTF8z
KHRleFBhcmFtZXRlcmksIHVuc2lnbmVkLCB1bnNpZ25lZCwgaW50KQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjplbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSh1bnNpZ25lZCBsb25nIGluZGV4KQor
aW50IEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OnRleFN1YkltYWdlMkQodW5zaWduZWQgdGFy
Z2V0LCB1bnNpZ25lZCBsZXZlbCwgdW5zaWduZWQgeG9mZnNldCwgdW5zaWduZWQgeW9mZnNldCwg
dW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCwgdW5zaWduZWQgZm9ybWF0LCB1bnNpZ25l
ZCB0eXBlLCB2b2lkKiBwaXhlbHMpCiB7Ci0gICAgbV9pbnRlcm5hbC0+ZW5hYmxlVmVydGV4QXR0
cmliQXJyYXkoaW5kZXgpOworICAgIG1faW1wbC0+dGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVs
LCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHBpeGVscyk7
CisgICAgcmV0dXJuIDA7CiB9CiAKLUdMX1NBTUVfTUVUSE9EXzAoRmluaXNoLCBmaW5pc2gpCi0K
LUdMX1NBTUVfTUVUSE9EXzAoRmx1c2gsIGZsdXNoKQorREVMRUdBVEVfVE9fSU1QTF8yKHVuaWZv
cm0xZiwgbG9uZywgZmxvYXQpCiAKLUdMX1NBTUVfTUVUSE9EXzRfWDQoRnJhbWVidWZmZXJSZW5k
ZXJidWZmZXJFWFQsIGZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyLCB1bnNpZ25lZCBsb25nLCB1bnNp
Z25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCBXZWJHTFJlbmRlcmJ1ZmZlciopCi0KLUdMX1NBTUVf
TUVUSE9EXzVfWDQoRnJhbWVidWZmZXJUZXh0dXJlMkRFWFQsIGZyYW1lYnVmZmVyVGV4dHVyZTJE
LCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCBXZWJHTFRleHR1
cmUqLCBsb25nKQotCi1HTF9TQU1FX01FVEhPRF8xKEZyb250RmFjZSwgZnJvbnRGYWNlLCB1bnNp
Z25lZCBsb25nKQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZW5lcmF0ZU1pcG1hcCh1bnNp
Z25lZCBsb25nIHRhcmdldCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6dW5pZm9y
bTFmdihsb25nIGxvY2F0aW9uLCBmbG9hdCogdiwgaW50IHNpemUpCiB7Ci0gICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7Ci0gICAgaWYgKGdsR2VuZXJhdGVNaXBtYXBFWFQpCi0gICAgICAgIGdsR2Vu
ZXJhdGVNaXBtYXBFWFQodGFyZ2V0KTsKLSAgICAvLyBGSVhNRTogcHJvdmlkZSBhbHRlcm5hdGl2
ZSBjb2RlIHBhdGg/IFRoaXMgd2lsbCBiZSB1bnBsZWFzYW50Ci0gICAgLy8gdG8gaW1wbGVtZW50
IGlmIGdsR2VuZXJhdGVNaXBtYXBFWFQgaXMgbm90IGF2YWlsYWJsZSAtLSBpdCB3aWxsCi0gICAg
Ly8gcmVxdWlyZSBhIHRleHR1cmUgcmVhZGJhY2sgYW5kIHJlLXVwbG9hZC4KKyAgICBtX2ltcGwt
PnVuaWZvcm0xZnYobG9jYXRpb24sIHNpemUsIHYpOwogfQogCi1ib29sIEdyYXBoaWNzQ29udGV4
dDNEOjpnZXRBY3RpdmVBdHRyaWIoV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCB1bnNpZ25lZCBsb25n
IGluZGV4LCBBY3RpdmVJbmZvJiBpbmZvKQotewotICAgIGlmICghcHJvZ3JhbSkgewotICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihJTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLSAgICBHTGludCBtYXhOYW1lTGVuZ3RoID0gLTE7Ci0gICAgZ2xHZXRQcm9ncmFt
aXYoRVhUUkFDVChwcm9ncmFtKSwgR0xfQUNUSVZFX0FUVFJJQlVURV9NQVhfTEVOR1RILCAmbWF4
TmFtZUxlbmd0aCk7Ci0gICAgaWYgKG1heE5hbWVMZW5ndGggPCAwKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgR0xjaGFyKiBuYW1lID0gMDsKLSAgICBpZiAoIXRyeUZhc3RNYWxsb2MobWF4
TmFtZUxlbmd0aCAqIHNpemVvZihHTGNoYXIpKS5nZXRWYWx1ZShuYW1lKSkgewotICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihPVVRfT0ZfTUVNT1JZKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLSAgICBHTHNpemVpIGxlbmd0aCA9IDA7Ci0gICAgR0xpbnQgc2l6ZSA9IC0xOwotICAg
IEdMZW51bSB0eXBlID0gMDsKLSAgICBnbEdldEFjdGl2ZUF0dHJpYihFWFRSQUNUKHByb2dyYW0p
LCBpbmRleCwgbWF4TmFtZUxlbmd0aCwKLSAgICAgICAgICAgICAgICAgICAgICAmbGVuZ3RoLCAm
c2l6ZSwgJnR5cGUsIG5hbWUpOwotICAgIGlmIChzaXplIDwgMCkgewotICAgICAgICBmYXN0RnJl
ZShuYW1lKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBpbmZvLm5hbWUgPSBT
dHJpbmcobmFtZSwgbGVuZ3RoKTsKLSAgICBpbmZvLnR5cGUgPSB0eXBlOwotICAgIGluZm8uc2l6
ZSA9IHNpemU7Ci0gICAgZmFzdEZyZWUobmFtZSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19CitERUxF
R0FURV9UT19JTVBMXzIodW5pZm9ybTFpLCBsb25nLCBpbnQpCiAKLWJvb2wgR3JhcGhpY3NDb250
ZXh0M0Q6OmdldEFjdGl2ZVVuaWZvcm0oV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCB1bnNpZ25lZCBs
b25nIGluZGV4LCBBY3RpdmVJbmZvJiBpbmZvKQordm9pZCBHcmFwaGljc0NvbnRleHQzREludGVy
bmFsOjp1bmlmb3JtMWl2KGxvbmcgbG9jYXRpb24sIGludCogdiwgaW50IHNpemUpCiB7Ci0gICAg
aWYgKCFwcm9ncmFtKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKElOVkFMSURfVkFMVUUp
OwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIEdMaW50IG1heE5hbWVMZW5ndGgg
PSAtMTsKLSAgICBnbEdldFByb2dyYW1pdihFWFRSQUNUKHByb2dyYW0pLCBHTF9BQ1RJVkVfVU5J
Rk9STV9NQVhfTEVOR1RILCAmbWF4TmFtZUxlbmd0aCk7Ci0gICAgaWYgKG1heE5hbWVMZW5ndGgg
PCAwKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgR0xjaGFyKiBuYW1lID0gMDsKLSAgICBp
ZiAoIXRyeUZhc3RNYWxsb2MobWF4TmFtZUxlbmd0aCAqIHNpemVvZihHTGNoYXIpKS5nZXRWYWx1
ZShuYW1lKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihPVVRfT0ZfTUVNT1JZKTsKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBHTHNpemVpIGxlbmd0aCA9IDA7Ci0gICAg
R0xpbnQgc2l6ZSA9IC0xOwotICAgIEdMZW51bSB0eXBlID0gMDsKLSAgICBnbEdldEFjdGl2ZVVu
aWZvcm0oRVhUUkFDVChwcm9ncmFtKSwgaW5kZXgsIG1heE5hbWVMZW5ndGgsCi0gICAgICAgICAg
ICAgICAgICAgICAgICZsZW5ndGgsICZzaXplLCAmdHlwZSwgbmFtZSk7Ci0gICAgaWYgKHNpemUg
PCAwKSB7Ci0gICAgICAgIGZhc3RGcmVlKG5hbWUpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQotICAgIGluZm8ubmFtZSA9IFN0cmluZyhuYW1lLCBsZW5ndGgpOwotICAgIGluZm8udHlw
ZSA9IHR5cGU7Ci0gICAgaW5mby5zaXplID0gc2l6ZTsKLSAgICBmYXN0RnJlZShuYW1lKTsKLSAg
ICByZXR1cm4gdHJ1ZTsKKyAgICBtX2ltcGwtPnVuaWZvcm0xaXYobG9jYXRpb24sIHNpemUsIHYp
OwogfQogCi1pbnQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEF0dHJpYkxvY2F0aW9uKFdlYkdMUHJv
Z3JhbSogcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lKQotewotICAgIGlmICghcHJvZ3JhbSkK
LSAgICAgICAgcmV0dXJuIC0xOwotCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgcmV0
dXJuIGdsR2V0QXR0cmliTG9jYXRpb24oRVhUUkFDVChwcm9ncmFtKSwgbmFtZS51dGY4KCkuZGF0
YSgpKTsKLX0KK0RFTEVHQVRFX1RPX0lNUExfMyh1bmlmb3JtMmYsIGxvbmcsIGZsb2F0LCBmbG9h
dCkKIAotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0Qm9vbGVhbnYodW5zaWduZWQgbG9uZyBw
bmFtZSwgdW5zaWduZWQgY2hhciogdmFsdWUpCit2b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJu
YWw6OnVuaWZvcm0yZnYobG9uZyBsb2NhdGlvbiwgZmxvYXQqIHYsIGludCBzaXplKQogewotICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsR2V0Qm9vbGVhbnYocG5hbWUsIHZhbHVlKTsK
KyAgICBtX2ltcGwtPnVuaWZvcm0yZnYobG9jYXRpb24sIHNpemUsIHYpOwogfQogCi12b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjpnZXRCdWZmZXJQYXJhbWV0ZXJpdih1bnNpZ25lZCBsb25nIHRhcmdl
dCwgdW5zaWduZWQgbG9uZyBwbmFtZSwgaW50KiB2YWx1ZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKLSAgICBnbEdldEJ1ZmZlclBhcmFtZXRlcml2KHRhcmdldCwgcG5hbWUsIHZhbHVl
KTsKLX0KK0RFTEVHQVRFX1RPX0lNUExfMyh1bmlmb3JtMmksIGxvbmcsIGludCwgaW50KQogCi1H
cmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBHcmFwaGljc0NvbnRleHQzRDo6Z2V0Q29udGV4
dEF0dHJpYnV0ZXMoKQordm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjp1bmlmb3JtMml2
KGxvbmcgbG9jYXRpb24sIGludCogdiwgaW50IHNpemUpCiB7Ci0gICAgcmV0dXJuIG1faW50ZXJu
YWwtPmdldENvbnRleHRBdHRyaWJ1dGVzKCk7CisgICAgbV9pbXBsLT51bmlmb3JtMml2KGxvY2F0
aW9uLCBzaXplLCB2KTsKIH0KIAotdW5zaWduZWQgbG9uZyBHcmFwaGljc0NvbnRleHQzRDo6Z2V0
RXJyb3IoKQotewotICAgIHJldHVybiBtX2ludGVybmFsLT5nZXRFcnJvcigpOwotfQorREVMRUdB
VEVfVE9fSU1QTF80KHVuaWZvcm0zZiwgbG9uZywgZmxvYXQsIGZsb2F0LCBmbG9hdCkKIAotdm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0RmxvYXR2KHVuc2lnbmVkIGxvbmcgcG5hbWUsIGZsb2F0
KiB2YWx1ZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6dW5pZm9ybTNmdihsb25n
IGxvY2F0aW9uLCBmbG9hdCogdiwgaW50IHNpemUpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7Ci0gICAgZ2xHZXRGbG9hdHYocG5hbWUsIHZhbHVlKTsKKyAgICBtX2ltcGwtPnVuaWZvcm0z
ZnYobG9jYXRpb24sIHNpemUsIHYpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRG
cmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpdih1bnNpZ25lZCBsb25nIHRhcmdldCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHVuc2lnbmVkIGxvbmcgYXR0YWNobWVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgcG5hbWUsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQqIHZhbHVlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsR2V0RnJhbWVi
dWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXZFWFQodGFyZ2V0LCBhdHRhY2htZW50LCBwbmFtZSwg
dmFsdWUpOwotfQorREVMRUdBVEVfVE9fSU1QTF80KHVuaWZvcm0zaSwgbG9uZywgaW50LCBpbnQs
IGludCkKIAotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0SW50ZWdlcnYodW5zaWduZWQgbG9u
ZyBwbmFtZSwgaW50KiB2YWx1ZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6dW5p
Zm9ybTNpdihsb25nIGxvY2F0aW9uLCBpbnQqIHYsIGludCBzaXplKQogewotICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOwotICAgIGdsR2V0SW50ZWdlcnYocG5hbWUsIHZhbHVlKTsKKyAgICBtX2lt
cGwtPnVuaWZvcm0zaXYobG9jYXRpb24sIHNpemUsIHYpOwogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjpnZXRQcm9ncmFtaXYoV2ViR0xQcm9ncmFtKiBwcm9ncmFtLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgcG5hbWUsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50KiB2YWx1ZSkKLXsKLSAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKLSAgICBnbEdldFByb2dyYW1pdihFWFRSQUNUKHByb2dyYW0pLCBwbmFtZSwg
dmFsdWUpOwotfQorREVMRUdBVEVfVE9fSU1QTF81KHVuaWZvcm00ZiwgbG9uZywgZmxvYXQsIGZs
b2F0LCBmbG9hdCwgZmxvYXQpCiAKLVN0cmluZyBHcmFwaGljc0NvbnRleHQzRDo6Z2V0UHJvZ3Jh
bUluZm9Mb2coV2ViR0xQcm9ncmFtKiBwcm9ncmFtKQordm9pZCBHcmFwaGljc0NvbnRleHQzRElu
dGVybmFsOjp1bmlmb3JtNGZ2KGxvbmcgbG9jYXRpb24sIGZsb2F0KiB2LCBpbnQgc2l6ZSkKIHsK
LSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBHTHVpbnQgcHJvZ3JhbUlEID0gRVhUUkFD
VChwcm9ncmFtKTsKLSAgICBHTGludCBsb2dMZW5ndGg7Ci0gICAgZ2xHZXRQcm9ncmFtaXYocHJv
Z3JhbUlELCBHTF9JTkZPX0xPR19MRU5HVEgsICZsb2dMZW5ndGgpOwotICAgIGlmICghbG9nTGVu
Z3RoKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgR0xjaGFyKiBsb2cgPSAwOwotICAg
IGlmICghdHJ5RmFzdE1hbGxvYyhsb2dMZW5ndGggKiBzaXplb2YoR0xjaGFyKSkuZ2V0VmFsdWUo
bG9nKSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIEdMc2l6ZWkgcmV0dXJuZWRMb2dM
ZW5ndGg7Ci0gICAgZ2xHZXRQcm9ncmFtSW5mb0xvZyhwcm9ncmFtSUQsIGxvZ0xlbmd0aCwgJnJl
dHVybmVkTG9nTGVuZ3RoLCBsb2cpOwotICAgIEFTU0VSVChsb2dMZW5ndGggPT0gcmV0dXJuZWRM
b2dMZW5ndGggKyAxKTsKLSAgICBTdHJpbmcgcmVzID0gU3RyaW5nKGxvZywgcmV0dXJuZWRMb2dM
ZW5ndGgpOwotICAgIGZhc3RGcmVlKGxvZyk7Ci0gICAgcmV0dXJuIHJlczsKKyAgICBtX2ltcGwt
PnVuaWZvcm00ZnYobG9jYXRpb24sIHNpemUsIHYpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdih1bnNpZ25lZCBsb25nIHRhcmdldCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk
IGxvbmcgcG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQqIHZhbHVlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGds
R2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXZFWFQodGFyZ2V0LCBwbmFtZSwgdmFsdWUpOwotfQor
REVMRUdBVEVfVE9fSU1QTF81KHVuaWZvcm00aSwgbG9uZywgaW50LCBpbnQsIGludCwgaW50KQog
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRTaGFkZXJpdihXZWJHTFNoYWRlciogc2hhZGVy
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBwbmFt
ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCogdmFsdWUpCit2b2lk
IEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OnVuaWZvcm00aXYobG9uZyBsb2NhdGlvbiwgaW50
KiB2LCBpbnQgc2l6ZSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbEdldFNo
YWRlcml2KEVYVFJBQ1Qoc2hhZGVyKSwgcG5hbWUsIHZhbHVlKTsKKyAgICBtX2ltcGwtPnVuaWZv
cm00aXYobG9jYXRpb24sIHNpemUsIHYpOwogfQogCi1TdHJpbmcgR3JhcGhpY3NDb250ZXh0M0Q6
OmdldFNoYWRlckluZm9Mb2coV2ViR0xTaGFkZXIqIHNoYWRlcikKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0M0RJbnRlcm5hbDo6dW5pZm9ybU1hdHJpeDJmdihsb25nIGxvY2F0aW9uLCBib29sIHRyYW5z
cG9zZSwgZmxvYXQqIHZhbHVlLCBpbnQgc2l6ZSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKLSAgICBHTHVpbnQgc2hhZGVySUQgPSBFWFRSQUNUKHNoYWRlcik7Ci0gICAgR0xpbnQgbG9n
TGVuZ3RoOwotICAgIGdsR2V0U2hhZGVyaXYoc2hhZGVySUQsIEdMX0lORk9fTE9HX0xFTkdUSCwg
JmxvZ0xlbmd0aCk7Ci0gICAgaWYgKCFsb2dMZW5ndGgpCi0gICAgICAgIHJldHVybiBTdHJpbmco
KTsKLSAgICBHTGNoYXIqIGxvZyA9IDA7Ci0gICAgaWYgKCF0cnlGYXN0TWFsbG9jKGxvZ0xlbmd0
aCAqIHNpemVvZihHTGNoYXIpKS5nZXRWYWx1ZShsb2cpKQotICAgICAgICByZXR1cm4gU3RyaW5n
KCk7Ci0gICAgR0xzaXplaSByZXR1cm5lZExvZ0xlbmd0aDsKLSAgICBnbEdldFNoYWRlckluZm9M
b2coc2hhZGVySUQsIGxvZ0xlbmd0aCwgJnJldHVybmVkTG9nTGVuZ3RoLCBsb2cpOwotICAgIEFT
U0VSVChsb2dMZW5ndGggPT0gcmV0dXJuZWRMb2dMZW5ndGggKyAxKTsKLSAgICBTdHJpbmcgcmVz
ID0gU3RyaW5nKGxvZywgcmV0dXJuZWRMb2dMZW5ndGgpOwotICAgIGZhc3RGcmVlKGxvZyk7Ci0g
ICAgcmV0dXJuIHJlczsKKyAgICBtX2ltcGwtPnVuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIHNp
emUsIHRyYW5zcG9zZSwgdmFsdWUpOwogfQogCi1TdHJpbmcgR3JhcGhpY3NDb250ZXh0M0Q6Omdl
dFNoYWRlclNvdXJjZShXZWJHTFNoYWRlciogc2hhZGVyKQordm9pZCBHcmFwaGljc0NvbnRleHQz
REludGVybmFsOjp1bmlmb3JtTWF0cml4M2Z2KGxvbmcgbG9jYXRpb24sIGJvb2wgdHJhbnNwb3Nl
LCBmbG9hdCogdmFsdWUsIGludCBzaXplKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwot
ICAgIEdMdWludCBzaGFkZXJJRCA9IEVYVFJBQ1Qoc2hhZGVyKTsKLSAgICBHTGludCBsb2dMZW5n
dGg7Ci0gICAgZ2xHZXRTaGFkZXJpdihzaGFkZXJJRCwgR0xfU0hBREVSX1NPVVJDRV9MRU5HVEgs
ICZsb2dMZW5ndGgpOwotICAgIGlmICghbG9nTGVuZ3RoKQotICAgICAgICByZXR1cm4gU3RyaW5n
KCk7Ci0gICAgR0xjaGFyKiBsb2cgPSAwOwotICAgIGlmICghdHJ5RmFzdE1hbGxvYyhsb2dMZW5n
dGggKiBzaXplb2YoR0xjaGFyKSkuZ2V0VmFsdWUobG9nKSkKLSAgICAgICAgcmV0dXJuIFN0cmlu
ZygpOwotICAgIEdMc2l6ZWkgcmV0dXJuZWRMb2dMZW5ndGg7Ci0gICAgZ2xHZXRTaGFkZXJTb3Vy
Y2Uoc2hhZGVySUQsIGxvZ0xlbmd0aCwgJnJldHVybmVkTG9nTGVuZ3RoLCBsb2cpOwotICAgIEFT
U0VSVChsb2dMZW5ndGggPT0gcmV0dXJuZWRMb2dMZW5ndGggKyAxKTsKLSAgICBTdHJpbmcgcmVz
ID0gU3RyaW5nKGxvZywgcmV0dXJuZWRMb2dMZW5ndGgpOwotICAgIGZhc3RGcmVlKGxvZyk7Ci0g
ICAgcmV0dXJuIHJlczsKKyAgICBtX2ltcGwtPnVuaWZvcm1NYXRyaXgzZnYobG9jYXRpb24sIHNp
emUsIHRyYW5zcG9zZSwgdmFsdWUpOwogfQogCi1TdHJpbmcgR3JhcGhpY3NDb250ZXh0M0Q6Omdl
dFN0cmluZyh1bnNpZ25lZCBsb25nIG5hbWUpCit2b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJu
YWw6OnVuaWZvcm1NYXRyaXg0ZnYobG9uZyBsb2NhdGlvbiwgYm9vbCB0cmFuc3Bvc2UsIGZsb2F0
KiB2YWx1ZSwgaW50IHNpemUpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgcmV0
dXJuIFN0cmluZyhyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihnbEdldFN0cmluZyhuYW1l
KSkpOworICAgIG1faW1wbC0+dW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwgc2l6ZSwgdHJhbnNw
b3NlLCB2YWx1ZSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFRleFBhcmFtZXRl
cmZ2KHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIHBuYW1lLCBmbG9hdCogdmFs
dWUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2xHZXRUZXhQYXJhbWV0ZXJm
dih0YXJnZXQsIHBuYW1lLCB2YWx1ZSk7Ci19CitERUxFR0FURV9UT19JTVBMXzFfWCh1c2VQcm9n
cmFtLCBXZWJHTFByb2dyYW0qKQorREVMRUdBVEVfVE9fSU1QTF8xX1godmFsaWRhdGVQcm9ncmFt
LCBXZWJHTFByb2dyYW0qKQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRUZXhQYXJhbWV0
ZXJpdih1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBwbmFtZSwgaW50KiB2YWx1
ZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbEdldFRleFBhcmFtZXRlcml2
KHRhcmdldCwgcG5hbWUsIHZhbHVlKTsKLX0KK0RFTEVHQVRFX1RPX0lNUExfMih2ZXJ0ZXhBdHRy
aWIxZiwgdW5zaWduZWQgbG9uZywgZmxvYXQpCitERUxFR0FURV9UT19JTVBMXzIodmVydGV4QXR0
cmliMWZ2LCB1bnNpZ25lZCBsb25nLCBmbG9hdCopCitERUxFR0FURV9UT19JTVBMXzModmVydGV4
QXR0cmliMmYsIHVuc2lnbmVkIGxvbmcsIGZsb2F0LCBmbG9hdCkKK0RFTEVHQVRFX1RPX0lNUExf
Mih2ZXJ0ZXhBdHRyaWIyZnYsIHVuc2lnbmVkIGxvbmcsIGZsb2F0KikKK0RFTEVHQVRFX1RPX0lN
UExfNCh2ZXJ0ZXhBdHRyaWIzZiwgdW5zaWduZWQgbG9uZywgZmxvYXQsIGZsb2F0LCBmbG9hdCkK
K0RFTEVHQVRFX1RPX0lNUExfMih2ZXJ0ZXhBdHRyaWIzZnYsIHVuc2lnbmVkIGxvbmcsIGZsb2F0
KikKK0RFTEVHQVRFX1RPX0lNUExfNSh2ZXJ0ZXhBdHRyaWI0ZiwgdW5zaWduZWQgbG9uZywgZmxv
YXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQpCitERUxFR0FURV9UT19JTVBMXzIodmVydGV4QXR0cmli
NGZ2LCB1bnNpZ25lZCBsb25nLCBmbG9hdCopCitERUxFR0FURV9UT19JTVBMXzYodmVydGV4QXR0
cmliUG9pbnRlciwgdW5zaWduZWQgbG9uZywgaW50LCBpbnQsIGJvb2wsIHVuc2lnbmVkIGxvbmcs
IHVuc2lnbmVkIGxvbmcpCiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFVuaWZvcm1mdihX
ZWJHTFByb2dyYW0qIHByb2dyYW0sIGxvbmcgbG9jYXRpb24sIGZsb2F0KiB2YWx1ZSkKLXsKLSAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbEdldFVuaWZvcm1mdihFWFRSQUNUKHByb2dy
YW0pLCBsb2NhdGlvbiwgdmFsdWUpOwotfQorREVMRUdBVEVfVE9fSU1QTF80KHZpZXdwb3J0LCBs
b25nLCBsb25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpnZXRVbmlmb3JtaXYoV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBsb25nIGxvY2F0
aW9uLCBpbnQqIHZhbHVlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsR2V0
VW5pZm9ybWl2KEVYVFJBQ1QocHJvZ3JhbSksIGxvY2F0aW9uLCB2YWx1ZSk7Ci19CitERUxFR0FU
RV9UT19JTVBMX1IoY3JlYXRlQnVmZmVyLCB1bnNpZ25lZCkKK0RFTEVHQVRFX1RPX0lNUExfUihj
cmVhdGVGcmFtZWJ1ZmZlciwgdW5zaWduZWQpCitERUxFR0FURV9UT19JTVBMX1IoY3JlYXRlUHJv
Z3JhbSwgdW5zaWduZWQpCitERUxFR0FURV9UT19JTVBMX1IoY3JlYXRlUmVuZGVyYnVmZmVyLCB1
bnNpZ25lZCkKK0RFTEVHQVRFX1RPX0lNUExfMVIoY3JlYXRlU2hhZGVyLCB1bnNpZ25lZCBsb25n
LCB1bnNpZ25lZCkKK0RFTEVHQVRFX1RPX0lNUExfUihjcmVhdGVUZXh0dXJlLCB1bnNpZ25lZCkK
IAotbG9uZyBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VW5pZm9ybUxvY2F0aW9uKFdlYkdMUHJvZ3Jh
bSogcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lKQotewotICAgIGlmICghcHJvZ3JhbSkKLSAg
ICAgICAgcmV0dXJuIC0xOworREVMRUdBVEVfVE9fSU1QTF8xKGRlbGV0ZUJ1ZmZlciwgdW5zaWdu
ZWQpCitERUxFR0FURV9UT19JTVBMXzEoZGVsZXRlRnJhbWVidWZmZXIsIHVuc2lnbmVkKQorREVM
RUdBVEVfVE9fSU1QTF8xKGRlbGV0ZVByb2dyYW0sIHVuc2lnbmVkKQorREVMRUdBVEVfVE9fSU1Q
TF8xKGRlbGV0ZVJlbmRlcmJ1ZmZlciwgdW5zaWduZWQpCitERUxFR0FURV9UT19JTVBMXzEoZGVs
ZXRlU2hhZGVyLCB1bnNpZ25lZCkKK0RFTEVHQVRFX1RPX0lNUExfMShkZWxldGVUZXh0dXJlLCB1
bnNpZ25lZCkKIAotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIHJldHVybiBnbEdldFVu
aWZvcm1Mb2NhdGlvbihFWFRSQUNUKHByb2dyYW0pLCBuYW1lLnV0ZjgoKS5kYXRhKCkpOwotfQor
REVMRUdBVEVfVE9fSU1QTF8xKHN5bnRoZXNpemVHTEVycm9yLCB1bnNpZ25lZCBsb25nKQogCi12
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRWZXJ0ZXhBdHRyaWJmdih1bnNpZ25lZCBsb25nIGlu
ZGV4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg
bG9uZyBwbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZs
b2F0KiB2YWx1ZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbEdldFZlcnRl
eEF0dHJpYmZ2KGluZGV4LCBwbmFtZSwgdmFsdWUpOwotfQorLy8tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBH
cmFwaGljc0NvbnRleHQzRAorLy8KIAotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VmVydGV4
QXR0cmliaXYodW5zaWduZWQgbG9uZyBpbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgcG5hbWUsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQqIHZhbHVlKQotewotICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOwotICAgIGdsR2V0VmVydGV4QXR0cmliaXYoaW5kZXgsIHBuYW1lLCB2YWx1ZSk7Ci19
CisvLyBNYWNyb3MgdG8gYXNzaXN0IGluIGRlbGVnYXRpbmcgZnJvbSBHcmFwaGljc0NvbnRleHQz
RCB0bworLy8gR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbC4KIAotbG9uZyBHcmFwaGljc0NvbnRl
eHQzRDo6Z2V0VmVydGV4QXR0cmliT2Zmc2V0KHVuc2lnbmVkIGxvbmcgaW5kZXgsIHVuc2lnbmVk
IGxvbmcgcG5hbWUpCi17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudC4KLSAgICBub3RJbXBsZW1l
bnRlZCgpOwotICAgIHJldHVybiAwOworI2RlZmluZSBERUxFR0FURV9UT19JTlRFUk5BTChuYW1l
KSBcCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpuYW1lKCkgXAoreyBcCisgICAgbV9pbnRlcm5h
bC0+bmFtZSgpOyBcCiB9CiAKLUdMX1NBTUVfTUVUSE9EXzIoSGludCwgaGludCwgdW5zaWduZWQg
bG9uZywgdW5zaWduZWQgbG9uZyk7Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmlzQnVmZmVy
KFdlYkdMQnVmZmVyKiBidWZmZXIpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAg
cmV0dXJuIGdsSXNCdWZmZXIoRVhUUkFDVChidWZmZXIpKTsKKyNkZWZpbmUgREVMRUdBVEVfVE9f
SU5URVJOQUxfUihuYW1lLCBydCkgICAgICAgICAgIFwKK3J0IEdyYXBoaWNzQ29udGV4dDNEOjpu
YW1lKCkgXAoreyBcCisgICAgcmV0dXJuIG1faW50ZXJuYWwtPm5hbWUoKTsgXAogfQogCi1ib29s
IEdyYXBoaWNzQ29udGV4dDNEOjppc0VuYWJsZWQodW5zaWduZWQgbG9uZyBjYXApCi17Ci0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgcmV0dXJuIGdsSXNFbmFibGVkKGNhcCk7CisjZGVm
aW5lIERFTEVHQVRFX1RPX0lOVEVSTkFMXzEobmFtZSwgdDEpIFwKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6Om5hbWUodDEgYTEpIFwKK3sgXAorICAgIG1faW50ZXJuYWwtPm5hbWUoYTEpOyBcCiB9
CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmlzRnJhbWVidWZmZXIoV2ViR0xGcmFtZWJ1ZmZl
ciogZnJhbWVidWZmZXIpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgcmV0dXJu
IGdsSXNGcmFtZWJ1ZmZlckVYVChFWFRSQUNUKGZyYW1lYnVmZmVyKSk7CisjZGVmaW5lIERFTEVH
QVRFX1RPX0lOVEVSTkFMXzFSKG5hbWUsIHQxLCBydCkgICAgXAorcnQgR3JhcGhpY3NDb250ZXh0
M0Q6Om5hbWUodDEgYTEpIFwKK3sgXAorICAgIHJldHVybiBtX2ludGVybmFsLT5uYW1lKGExKTsg
XAogfQogCi1ib29sIEdyYXBoaWNzQ29udGV4dDNEOjppc1Byb2dyYW0oV2ViR0xQcm9ncmFtKiBw
cm9ncmFtKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIHJldHVybiBnbElzUHJv
Z3JhbShFWFRSQUNUKHByb2dyYW0pKTsKKyNkZWZpbmUgREVMRUdBVEVfVE9fSU5URVJOQUxfMihu
YW1lLCB0MSwgdDIpIFwKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6Om5hbWUodDEgYTEsIHQyIGEy
KSBcCit7IFwKKyAgICBtX2ludGVybmFsLT5uYW1lKGExLCBhMik7IFwKIH0KIAotYm9vbCBHcmFw
aGljc0NvbnRleHQzRDo6aXNSZW5kZXJidWZmZXIoV2ViR0xSZW5kZXJidWZmZXIqIHJlbmRlcmJ1
ZmZlcikKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICByZXR1cm4gZ2xJc1JlbmRl
cmJ1ZmZlckVYVChFWFRSQUNUKHJlbmRlcmJ1ZmZlcikpOworI2RlZmluZSBERUxFR0FURV9UT19J
TlRFUk5BTF8yUihuYW1lLCB0MSwgdDIsIHJ0KSAgXAorcnQgR3JhcGhpY3NDb250ZXh0M0Q6Om5h
bWUodDEgYTEsIHQyIGEyKSBcCit7IFwKKyAgICByZXR1cm4gbV9pbnRlcm5hbC0+bmFtZShhMSwg
YTIpOyBcCiB9CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmlzU2hhZGVyKFdlYkdMU2hhZGVy
KiBzaGFkZXIpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgcmV0dXJuIGdsSXNT
aGFkZXIoRVhUUkFDVChzaGFkZXIpKTsKKyNkZWZpbmUgREVMRUdBVEVfVE9fSU5URVJOQUxfMyhu
YW1lLCB0MSwgdDIsIHQzKSAgIFwKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6Om5hbWUodDEgYTEs
IHQyIGEyLCB0MyBhMykgICAgXAoreyBcCisgICAgbV9pbnRlcm5hbC0+bmFtZShhMSwgYTIsIGEz
KTsgICAgICAgICAgICAgICAgICBcCiB9CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmlzVGV4
dHVyZShXZWJHTFRleHR1cmUqIHRleHR1cmUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
Ci0gICAgcmV0dXJuIGdsSXNUZXh0dXJlKEVYVFJBQ1QodGV4dHVyZSkpOworI2RlZmluZSBERUxF
R0FURV9UT19JTlRFUk5BTF8zUihuYW1lLCB0MSwgdDIsIHQzLCBydCkgICBcCitydCBHcmFwaGlj
c0NvbnRleHQzRDo6bmFtZSh0MSBhMSwgdDIgYTIsIHQzIGEzKSAgICBcCit7IFwKKyAgICByZXR1
cm4gbV9pbnRlcm5hbC0+bmFtZShhMSwgYTIsIGEzKTsgICAgICAgICAgICAgICAgICBcCiB9CiAK
LUdMX1NBTUVfTUVUSE9EXzEoTGluZVdpZHRoLCBsaW5lV2lkdGgsIGRvdWJsZSkKKyNkZWZpbmUg
REVMRUdBVEVfVE9fSU5URVJOQUxfNChuYW1lLCB0MSwgdDIsIHQzLCB0NCkgICAgXAordm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6bmFtZSh0MSBhMSwgdDIgYTIsIHQzIGEzLCB0NCBhNCkgIFwKK3sg
XAorICAgIG1faW50ZXJuYWwtPm5hbWUoYTEsIGEyLCBhMywgYTQpOyAgICAgICAgICAgICAgXAor
fQogCi1HTF9TQU1FX01FVEhPRF8xX1goTGlua1Byb2dyYW0sIGxpbmtQcm9ncmFtLCBXZWJHTFBy
b2dyYW0qKQorI2RlZmluZSBERUxFR0FURV9UT19JTlRFUk5BTF81KG5hbWUsIHQxLCB0MiwgdDMs
IHQ0LCB0NSkgICAgICBcCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpuYW1lKHQxIGExLCB0MiBh
MiwgdDMgYTMsIHQ0IGE0LCB0NSBhNSkgICAgICAgIFwKK3sgXAorICAgIG1faW50ZXJuYWwtPm5h
bWUoYTEsIGEyLCBhMywgYTQsIGE1KTsgICBcCit9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OnBpeGVsU3RvcmVpKHVuc2lnbmVkIGxvbmcgcG5hbWUsIGxvbmcgcGFyYW0pCi17Ci0gICAgaWYg
KHBuYW1lICE9IEdMX1BBQ0tfQUxJR05NRU5UICYmIHBuYW1lICE9IEdMX1VOUEFDS19BTElHTk1F
TlQpIHsKLSAgICAgICAgLy8gRklYTUU6IENyZWF0ZSBhIGZha2UgR0wgZXJyb3IgYW5kIHRocm93
IGFuIGV4Y2VwdGlvbi4KLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyNkZWZpbmUgREVMRUdBVEVf
VE9fSU5URVJOQUxfNihuYW1lLCB0MSwgdDIsIHQzLCB0NCwgdDUsIHQ2KSAgXAordm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6bmFtZSh0MSBhMSwgdDIgYTIsIHQzIGEzLCB0NCBhNCwgdDUgYTUsIHQ2
IGE2KSBcCit7IFwKKyAgICBtX2ludGVybmFsLT5uYW1lKGExLCBhMiwgYTMsIGE0LCBhNSwgYTYp
OyAgIFwKK30KIAotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsUGl4ZWxTdG9yZWko
cG5hbWUsIHBhcmFtKTsKKyNkZWZpbmUgREVMRUdBVEVfVE9fSU5URVJOQUxfNlIobmFtZSwgdDEs
IHQyLCB0MywgdDQsIHQ1LCB0NiwgcnQpICBcCitydCBHcmFwaGljc0NvbnRleHQzRDo6bmFtZSh0
MSBhMSwgdDIgYTIsIHQzIGEzLCB0NCBhNCwgdDUgYTUsIHQ2IGE2KSBcCit7IFwKKyAgICByZXR1
cm4gbV9pbnRlcm5hbC0+bmFtZShhMSwgYTIsIGEzLCBhNCwgYTUsIGE2KTsgICAgICAgXAogfQog
Ci1HTF9TQU1FX01FVEhPRF8yKFBvbHlnb25PZmZzZXQsIHBvbHlnb25PZmZzZXQsIGRvdWJsZSwg
ZG91YmxlKQorI2RlZmluZSBERUxFR0FURV9UT19JTlRFUk5BTF83UihuYW1lLCB0MSwgdDIsIHQz
LCB0NCwgdDUsIHQ2LCB0NywgcnQpIFwKK3J0IEdyYXBoaWNzQ29udGV4dDNEOjpuYW1lKHQxIGEx
LCB0MiBhMiwgdDMgYTMsIHQ0IGE0LCB0NSBhNSwgdDYgYTYsIHQ3IGE3KSBcCit7IFwKKyAgICBy
ZXR1cm4gbV9pbnRlcm5hbC0+bmFtZShhMSwgYTIsIGEzLCBhNCwgYTUsIGE2LCBhNyk7ICAgXAor
fQogCi1QYXNzUmVmUHRyPFdlYkdMQXJyYXk+IEdyYXBoaWNzQ29udGV4dDNEOjpyZWFkUGl4ZWxz
KGxvbmcgeCwgbG9uZyB5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1
bnNpZ25lZCBsb25nIGZvcm1hdCwgdW5zaWduZWQgbG9uZyB0eXBlKSB7Ci0gICAgLy8gRklYTUU6
IHN1cHBvcnQgbW9yZSBwaXhlbCBmb3JtYXRzIGFuZCB0eXBlcy4KLSAgICBpZiAoISgoZm9ybWF0
ID09IEdMX1JHQkEpICYmICh0eXBlID09IEdMX1VOU0lHTkVEX0JZVEUpKSkKLSAgICAgICAgcmV0
dXJuIDA7CisjZGVmaW5lIERFTEVHQVRFX1RPX0lOVEVSTkFMXzgobmFtZSwgdDEsIHQyLCB0Mywg
dDQsIHQ1LCB0NiwgdDcsIHQ4KSAgICAgICBcCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpuYW1l
KHQxIGExLCB0MiBhMiwgdDMgYTMsIHQ0IGE0LCB0NSBhNSwgdDYgYTYsIHQ3IGE3LCB0OCBhOCkg
XAoreyBcCisgICAgbV9pbnRlcm5hbC0+bmFtZShhMSwgYTIsIGEzLCBhNCwgYTUsIGE2LCBhNywg
YTgpOyAgICAgIFwKK30KIAotICAgIC8vIEZJWE1FOiB0YWtlIGludG8gYWNjb3VudCBwYWNrIGFs
aWdubWVudC4KLSAgICBSZWZQdHI8V2ViR0xVbnNpZ25lZEJ5dGVBcnJheT4gYXJyYXkgPSBXZWJH
TFVuc2lnbmVkQnl0ZUFycmF5OjpjcmVhdGUod2lkdGggKiBoZWlnaHQgKiA0KTsKLSAgICBnbFJl
YWRQaXhlbHMoeCwgeSwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBhcnJheS0+YmFzZUFk
ZHJlc3MoKSk7Ci0gICAgcmV0dXJuIGFycmF5OworI2RlZmluZSBERUxFR0FURV9UT19JTlRFUk5B
TF85UihuYW1lLCB0MSwgdDIsIHQzLCB0NCwgdDUsIHQ2LCB0NywgdDgsIHQ5LCBydCkgXAorcnQg
R3JhcGhpY3NDb250ZXh0M0Q6Om5hbWUodDEgYTEsIHQyIGEyLCB0MyBhMywgdDQgYTQsIHQ1IGE1
LCB0NiBhNiwgdDcgYTcsIHQ4IGE4LCB0OSBhOSkgXAoreyBcCisgICAgcmV0dXJuIG1faW50ZXJu
YWwtPm5hbWUoYTEsIGEyLCBhMywgYTQsIGE1LCBhNiwgYTcsIGE4LCBhOSk7ICAgXAogfQogCi12
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZWxlYXNlU2hhZGVyQ29tcGlsZXIoKQorR3JhcGhpY3ND
b250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVz
IGF0dHJzKQogewogfQogCi1HTF9TQU1FX01FVEhPRF80KFJlbmRlcmJ1ZmZlclN0b3JhZ2VFWFQs
IHJlbmRlcmJ1ZmZlclN0b3JhZ2UsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2ln
bmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpCi0KLUdMX1NBTUVfTUVUSE9EXzIoU2FtcGxlQ292ZXJh
Z2UsIHNhbXBsZUNvdmVyYWdlLCBkb3VibGUsIGJvb2wpCi0KLUdMX1NBTUVfTUVUSE9EXzQoU2Np
c3Nvciwgc2Npc3NvciwgbG9uZywgbG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZykK
LQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c2hhZGVyU291cmNlKFdlYkdMU2hhZGVyKiBzaGFk
ZXIsIGNvbnN0IFN0cmluZyYgc291cmNlKQorR3JhcGhpY3NDb250ZXh0M0Q6On5HcmFwaGljc0Nv
bnRleHQzRCgpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgQ1N0cmluZyBzdHIg
PSBzb3VyY2UudXRmOCgpOwotICAgIGNvbnN0IGNoYXIqIGRhdGEgPSBzdHIuZGF0YSgpOwotICAg
IEdMaW50IGxlbmd0aCA9IHN0ci5sZW5ndGgoKTsKLSAgICBnbFNoYWRlclNvdXJjZShFWFRSQUNU
KHNoYWRlciksIDEsICZkYXRhLCAmbGVuZ3RoKTsKIH0KIAotR0xfU0FNRV9NRVRIT0RfMyhTdGVu
Y2lsRnVuYywgc3RlbmNpbEZ1bmMsIHVuc2lnbmVkIGxvbmcsIGxvbmcsIHVuc2lnbmVkIGxvbmcp
Ci0KLUdMX1NBTUVfTUVUSE9EXzQoU3RlbmNpbEZ1bmNTZXBhcmF0ZSwgc3RlbmNpbEZ1bmNTZXBh
cmF0ZSwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgbG9uZywgdW5zaWduZWQgbG9uZykK
LQotR0xfU0FNRV9NRVRIT0RfMShTdGVuY2lsTWFzaywgc3RlbmNpbE1hc2ssIHVuc2lnbmVkIGxv
bmcpCi0KLUdMX1NBTUVfTUVUSE9EXzIoU3RlbmNpbE1hc2tTZXBhcmF0ZSwgc3RlbmNpbE1hc2tT
ZXBhcmF0ZSwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZykKLQotR0xfU0FNRV9NRVRIT0Rf
MyhTdGVuY2lsT3AsIHN0ZW5jaWxPcCwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgdW5z
aWduZWQgbG9uZykKLQotR0xfU0FNRV9NRVRIT0RfNChTdGVuY2lsT3BTZXBhcmF0ZSwgc3RlbmNp
bE9wU2VwYXJhdGUsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcs
IHVuc2lnbmVkIGxvbmcpCitQYXNzT3duUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBHcmFwaGljc0Nv
bnRleHQzRDo6Y3JlYXRlKEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJzKQorewor
ICAgIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwqIGludGVybmFsID0gbmV3IEdyYXBoaWNzQ29u
dGV4dDNESW50ZXJuYWwoKTsKKyAgICBpZiAoIWludGVybmFsLT5pbml0aWFsaXplKGF0dHJzKSkg
eworICAgICAgICBkZWxldGUgaW50ZXJuYWw7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAg
ICBQYXNzT3duUHRyPEdyYXBoaWNzQ29udGV4dDNEPiByZXN1bHQgPSBuZXcgR3JhcGhpY3NDb250
ZXh0M0QoYXR0cnMpOworICAgIHJlc3VsdC0+bV9pbnRlcm5hbC5zZXQoaW50ZXJuYWwpOworICAg
IHJldHVybiByZXN1bHQ7Cit9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnN5bnRoZXNpemVH
TEVycm9yKHVuc2lnbmVkIGxvbmcgZXJyb3IpCitQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEIEdy
YXBoaWNzQ29udGV4dDNEOjpwbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEKCkgY29uc3QKIHsKLSAg
ICBtX2ludGVybmFsLT5zeW50aGVzaXplR0xFcnJvcihlcnJvcik7CisgICAgcmV0dXJuIG1faW50
ZXJuYWwtPnBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QoKTsKIH0KIAotaW50IEdyYXBoaWNzQ29u
dGV4dDNEOjp0ZXhJbWFnZTJEKHVuc2lnbmVkIHRhcmdldCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBsZXZlbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB1bnNpZ25lZCBpbnRlcm5hbGZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB1bnNpZ25lZCB3aWR0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dW5zaWduZWQgYm9yZGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2ln
bmVkIGZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCB0
eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqIHBpeGVscykKK1Bs
YXRmb3JtM0RPYmplY3QgR3JhcGhpY3NDb250ZXh0M0Q6OnBsYXRmb3JtVGV4dHVyZSgpIGNvbnN0
CiB7Ci0gICAgLy8gRklYTUU6IG11c3QgZG8gdmFsaWRhdGlvbiBzaW1pbGFyIHRvIEpPR0wncyB0
byBlbnN1cmUgdGhhdAotICAgIC8vIHRoZSBpbmNvbWluZyBhcnJheSBpcyBvZiB0aGUgYXBwcm9w
cmlhdGUgbGVuZ3RoLgotICAgIGdsVGV4SW1hZ2UyRCh0YXJnZXQsCi0gICAgICAgICAgICAgICAg
IGxldmVsLAotICAgICAgICAgICAgICAgICBpbnRlcm5hbGZvcm1hdCwKLSAgICAgICAgICAgICAg
ICAgd2lkdGgsCi0gICAgICAgICAgICAgICAgIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgYm9y
ZGVyLAotICAgICAgICAgICAgICAgICBmb3JtYXQsCi0gICAgICAgICAgICAgICAgIHR5cGUsCi0g
ICAgICAgICAgICAgICAgIHBpeGVscyk7Ci0gICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIG1faW50
ZXJuYWwtPnBsYXRmb3JtVGV4dHVyZSgpOwogfQogCitERUxFR0FURV9UT19JTlRFUk5BTChtYWtl
Q29udGV4dEN1cnJlbnQpCitERUxFR0FURV9UT19JTlRFUk5BTF8xUihzaXplSW5CeXRlcywgaW50
LCBpbnQpCitERUxFR0FURV9UT19JTlRFUk5BTF8yKHJlc2hhcGUsIGludCwgaW50KQorCitERUxF
R0FURV9UT19JTlRFUk5BTF8xKGFjdGl2ZVRleHR1cmUsIHVuc2lnbmVkIGxvbmcpCitERUxFR0FU
RV9UT19JTlRFUk5BTF8yKGF0dGFjaFNoYWRlciwgV2ViR0xQcm9ncmFtKiwgV2ViR0xTaGFkZXIq
KQorREVMRUdBVEVfVE9fSU5URVJOQUxfMyhiaW5kQXR0cmliTG9jYXRpb24sIFdlYkdMUHJvZ3Jh
bSosIHVuc2lnbmVkIGxvbmcsIGNvbnN0IFN0cmluZyYpCisKK0RFTEVHQVRFX1RPX0lOVEVSTkFM
XzIoYmluZEJ1ZmZlciwgdW5zaWduZWQgbG9uZywgV2ViR0xCdWZmZXIqKQorREVMRUdBVEVfVE9f
SU5URVJOQUxfMihiaW5kRnJhbWVidWZmZXIsIHVuc2lnbmVkIGxvbmcsIFdlYkdMRnJhbWVidWZm
ZXIqKQorREVMRUdBVEVfVE9fSU5URVJOQUxfMihiaW5kUmVuZGVyYnVmZmVyLCB1bnNpZ25lZCBs
b25nLCBXZWJHTFJlbmRlcmJ1ZmZlciopCitERUxFR0FURV9UT19JTlRFUk5BTF8yKGJpbmRUZXh0
dXJlLCB1bnNpZ25lZCBsb25nLCBXZWJHTFRleHR1cmUqKQorREVMRUdBVEVfVE9fSU5URVJOQUxf
NChibGVuZENvbG9yLCBkb3VibGUsIGRvdWJsZSwgZG91YmxlLCBkb3VibGUpCitERUxFR0FURV9U
T19JTlRFUk5BTF8xKGJsZW5kRXF1YXRpb24sIHVuc2lnbmVkIGxvbmcpCitERUxFR0FURV9UT19J
TlRFUk5BTF8yKGJsZW5kRXF1YXRpb25TZXBhcmF0ZSwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQg
bG9uZykKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzIoYmxlbmRGdW5jLCB1bnNpZ25lZCBsb25nLCB1
bnNpZ25lZCBsb25nKQorREVMRUdBVEVfVE9fSU5URVJOQUxfNChibGVuZEZ1bmNTZXBhcmF0ZSwg
dW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9u
ZykKKworREVMRUdBVEVfVE9fSU5URVJOQUxfMyhidWZmZXJEYXRhLCB1bnNpZ25lZCBsb25nLCBp
bnQsIHVuc2lnbmVkIGxvbmcpCitERUxFR0FURV9UT19JTlRFUk5BTF8zKGJ1ZmZlckRhdGEsIHVu
c2lnbmVkIGxvbmcsIFdlYkdMQXJyYXkqLCB1bnNpZ25lZCBsb25nKQorREVMRUdBVEVfVE9fSU5U
RVJOQUxfMyhidWZmZXJTdWJEYXRhLCB1bnNpZ25lZCBsb25nLCBsb25nLCBXZWJHTEFycmF5KikK
KworREVMRUdBVEVfVE9fSU5URVJOQUxfMVIoY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cywgdW5zaWdu
ZWQgbG9uZywgdW5zaWduZWQgbG9uZykKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzEoY2xlYXIsIHVu
c2lnbmVkIGxvbmcpCitERUxFR0FURV9UT19JTlRFUk5BTF80KGNsZWFyQ29sb3IsIGRvdWJsZSwg
ZG91YmxlLCBkb3VibGUsIGRvdWJsZSkKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzEoY2xlYXJEZXB0
aCwgZG91YmxlKQorREVMRUdBVEVfVE9fSU5URVJOQUxfMShjbGVhclN0ZW5jaWwsIGxvbmcpCitE
RUxFR0FURV9UT19JTlRFUk5BTF80KGNvbG9yTWFzaywgYm9vbCwgYm9vbCwgYm9vbCwgYm9vbCkK
K0RFTEVHQVRFX1RPX0lOVEVSTkFMXzEoY29tcGlsZVNoYWRlciwgV2ViR0xTaGFkZXIqKQorCitE
RUxFR0FURV9UT19JTlRFUk5BTF84KGNvcHlUZXhJbWFnZTJELCB1bnNpZ25lZCBsb25nLCBsb25n
LCB1bnNpZ25lZCBsb25nLCBsb25nLCBsb25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25n
LCBsb25nKQorREVMRUdBVEVfVE9fSU5URVJOQUxfOChjb3B5VGV4U3ViSW1hZ2UyRCwgdW5zaWdu
ZWQgbG9uZywgbG9uZywgbG9uZywgbG9uZywgbG9uZywgbG9uZywgdW5zaWduZWQgbG9uZywgdW5z
aWduZWQgbG9uZykKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzEoY3VsbEZhY2UsIHVuc2lnbmVkIGxv
bmcpCitERUxFR0FURV9UT19JTlRFUk5BTF8xKGRlcHRoRnVuYywgdW5zaWduZWQgbG9uZykKK0RF
TEVHQVRFX1RPX0lOVEVSTkFMXzEoZGVwdGhNYXNrLCBib29sKQorREVMRUdBVEVfVE9fSU5URVJO
QUxfMihkZXB0aFJhbmdlLCBkb3VibGUsIGRvdWJsZSkKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzIo
ZGV0YWNoU2hhZGVyLCBXZWJHTFByb2dyYW0qLCBXZWJHTFNoYWRlciopCitERUxFR0FURV9UT19J
TlRFUk5BTF8xKGRpc2FibGUsIHVuc2lnbmVkIGxvbmcpCitERUxFR0FURV9UT19JTlRFUk5BTF8x
KGRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheSwgdW5zaWduZWQgbG9uZykKK0RFTEVHQVRFX1RPX0lO
VEVSTkFMXzMoZHJhd0FycmF5cywgdW5zaWduZWQgbG9uZywgbG9uZywgbG9uZykKK0RFTEVHQVRF
X1RPX0lOVEVSTkFMXzQoZHJhd0VsZW1lbnRzLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25n
LCB1bnNpZ25lZCBsb25nLCBsb25nKQorCitERUxFR0FURV9UT19JTlRFUk5BTF8xKGVuYWJsZSwg
dW5zaWduZWQgbG9uZykKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzEoZW5hYmxlVmVydGV4QXR0cmli
QXJyYXksIHVuc2lnbmVkIGxvbmcpCitERUxFR0FURV9UT19JTlRFUk5BTChmaW5pc2gpCitERUxF
R0FURV9UT19JTlRFUk5BTChmbHVzaCkKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzQoZnJhbWVidWZm
ZXJSZW5kZXJidWZmZXIsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxv
bmcsIFdlYkdMUmVuZGVyYnVmZmVyKikKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzUoZnJhbWVidWZm
ZXJUZXh0dXJlMkQsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcs
IFdlYkdMVGV4dHVyZSosIGxvbmcpCitERUxFR0FURV9UT19JTlRFUk5BTF8xKGZyb250RmFjZSwg
dW5zaWduZWQgbG9uZykKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzEoZ2VuZXJhdGVNaXBtYXAsIHVu
c2lnbmVkIGxvbmcpCisKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzNSKGdldEFjdGl2ZUF0dHJpYiwg
V2ViR0xQcm9ncmFtKiwgdW5zaWduZWQgbG9uZywgQWN0aXZlSW5mbyYsIGJvb2wpCitERUxFR0FU
RV9UT19JTlRFUk5BTF8zUihnZXRBY3RpdmVVbmlmb3JtLCBXZWJHTFByb2dyYW0qLCB1bnNpZ25l
ZCBsb25nLCBBY3RpdmVJbmZvJiwgYm9vbCkKKworREVMRUdBVEVfVE9fSU5URVJOQUxfMlIoZ2V0
QXR0cmliTG9jYXRpb24sIFdlYkdMUHJvZ3JhbSosIGNvbnN0IFN0cmluZyYsIGludCkKKworREVM
RUdBVEVfVE9fSU5URVJOQUxfMihnZXRCb29sZWFudiwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQg
Y2hhciopCisKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzMoZ2V0QnVmZmVyUGFyYW1ldGVyaXYsIHVu
c2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIGludCopCisKK0RFTEVHQVRFX1RPX0lOVEVSTkFM
X1IoZ2V0Q29udGV4dEF0dHJpYnV0ZXMsIEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzKQor
CitERUxFR0FURV9UT19JTlRFUk5BTF9SKGdldEVycm9yLCB1bnNpZ25lZCBsb25nKQorCitERUxF
R0FURV9UT19JTlRFUk5BTF8yKGdldEZsb2F0diwgdW5zaWduZWQgbG9uZywgZmxvYXQqKQorCitE
RUxFR0FURV9UT19JTlRFUk5BTF80KGdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcml2
LCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCBpbnQqKQorCitE
RUxFR0FURV9UT19JTlRFUk5BTF8yKGdldEludGVnZXJ2LCB1bnNpZ25lZCBsb25nLCBpbnQqKQor
CitERUxFR0FURV9UT19JTlRFUk5BTF8zKGdldFByb2dyYW1pdiwgV2ViR0xQcm9ncmFtKiwgdW5z
aWduZWQgbG9uZywgaW50KikKKworREVMRUdBVEVfVE9fSU5URVJOQUxfMVIoZ2V0UHJvZ3JhbUlu
Zm9Mb2csIFdlYkdMUHJvZ3JhbSosIFN0cmluZykKKworREVMRUdBVEVfVE9fSU5URVJOQUxfMyhn
ZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdiwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywg
aW50KikKKworREVMRUdBVEVfVE9fSU5URVJOQUxfMyhnZXRTaGFkZXJpdiwgV2ViR0xTaGFkZXIq
LCB1bnNpZ25lZCBsb25nLCBpbnQqKQorCitERUxFR0FURV9UT19JTlRFUk5BTF8xUihnZXRTaGFk
ZXJJbmZvTG9nLCBXZWJHTFNoYWRlciosIFN0cmluZykKKworREVMRUdBVEVfVE9fSU5URVJOQUxf
MVIoZ2V0U2hhZGVyU291cmNlLCBXZWJHTFNoYWRlciosIFN0cmluZykKK0RFTEVHQVRFX1RPX0lO
VEVSTkFMXzFSKGdldFN0cmluZywgdW5zaWduZWQgbG9uZywgU3RyaW5nKQorCitERUxFR0FURV9U
T19JTlRFUk5BTF8zKGdldFRleFBhcmFtZXRlcmZ2LCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBs
b25nLCBmbG9hdCopCitERUxFR0FURV9UT19JTlRFUk5BTF8zKGdldFRleFBhcmFtZXRlcml2LCB1
bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCBpbnQqKQorCitERUxFR0FURV9UT19JTlRFUk5B
TF8zKGdldFVuaWZvcm1mdiwgV2ViR0xQcm9ncmFtKiwgbG9uZywgZmxvYXQqKQorREVMRUdBVEVf
VE9fSU5URVJOQUxfMyhnZXRVbmlmb3JtaXYsIFdlYkdMUHJvZ3JhbSosIGxvbmcsIGludCopCisK
K0RFTEVHQVRFX1RPX0lOVEVSTkFMXzJSKGdldFVuaWZvcm1Mb2NhdGlvbiwgV2ViR0xQcm9ncmFt
KiwgY29uc3QgU3RyaW5nJiwgbG9uZykKKworREVMRUdBVEVfVE9fSU5URVJOQUxfMyhnZXRWZXJ0
ZXhBdHRyaWJmdiwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgZmxvYXQqKQorREVMRUdB
VEVfVE9fSU5URVJOQUxfMyhnZXRWZXJ0ZXhBdHRyaWJpdiwgdW5zaWduZWQgbG9uZywgdW5zaWdu
ZWQgbG9uZywgaW50KikKKworREVMRUdBVEVfVE9fSU5URVJOQUxfMlIoZ2V0VmVydGV4QXR0cmli
T2Zmc2V0LCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCBsb25nKQorCitERUxFR0FURV9U
T19JTlRFUk5BTF8yKGhpbnQsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpCitERUxFR0FU
RV9UT19JTlRFUk5BTF8xUihpc0J1ZmZlciwgV2ViR0xCdWZmZXIqLCBib29sKQorREVMRUdBVEVf
VE9fSU5URVJOQUxfMVIoaXNFbmFibGVkLCB1bnNpZ25lZCBsb25nLCBib29sKQorREVMRUdBVEVf
VE9fSU5URVJOQUxfMVIoaXNGcmFtZWJ1ZmZlciwgV2ViR0xGcmFtZWJ1ZmZlciosIGJvb2wpCitE
RUxFR0FURV9UT19JTlRFUk5BTF8xUihpc1Byb2dyYW0sIFdlYkdMUHJvZ3JhbSosIGJvb2wpCitE
RUxFR0FURV9UT19JTlRFUk5BTF8xUihpc1JlbmRlcmJ1ZmZlciwgV2ViR0xSZW5kZXJidWZmZXIq
LCBib29sKQorREVMRUdBVEVfVE9fSU5URVJOQUxfMVIoaXNTaGFkZXIsIFdlYkdMU2hhZGVyKiwg
Ym9vbCkKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzFSKGlzVGV4dHVyZSwgV2ViR0xUZXh0dXJlKiwg
Ym9vbCkKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzEobGluZVdpZHRoLCBkb3VibGUpCitERUxFR0FU
RV9UT19JTlRFUk5BTF8xKGxpbmtQcm9ncmFtLCBXZWJHTFByb2dyYW0qKQorREVMRUdBVEVfVE9f
SU5URVJOQUxfMihwaXhlbFN0b3JlaSwgdW5zaWduZWQgbG9uZywgbG9uZykKK0RFTEVHQVRFX1RP
X0lOVEVSTkFMXzIocG9seWdvbk9mZnNldCwgZG91YmxlLCBkb3VibGUpCisKK0RFTEVHQVRFX1RP
X0lOVEVSTkFMXzZSKHJlYWRQaXhlbHMsIGxvbmcsIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2ln
bmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIFBhc3NSZWZQdHI8V2ViR0xB
cnJheT4pCisKK0RFTEVHQVRFX1RPX0lOVEVSTkFMKHJlbGVhc2VTaGFkZXJDb21waWxlcikKK0RF
TEVHQVRFX1RPX0lOVEVSTkFMXzQocmVuZGVyYnVmZmVyU3RvcmFnZSwgdW5zaWduZWQgbG9uZywg
dW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZykKK0RFTEVHQVRFX1RP
X0lOVEVSTkFMXzIoc2FtcGxlQ292ZXJhZ2UsIGRvdWJsZSwgYm9vbCkKK0RFTEVHQVRFX1RPX0lO
VEVSTkFMXzQoc2Npc3NvciwgbG9uZywgbG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9u
ZykKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzIoc2hhZGVyU291cmNlLCBXZWJHTFNoYWRlciosIGNv
bnN0IFN0cmluZyYpCitERUxFR0FURV9UT19JTlRFUk5BTF8zKHN0ZW5jaWxGdW5jLCB1bnNpZ25l
ZCBsb25nLCBsb25nLCB1bnNpZ25lZCBsb25nKQorREVMRUdBVEVfVE9fSU5URVJOQUxfNChzdGVu
Y2lsRnVuY1NlcGFyYXRlLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCBsb25nLCB1bnNp
Z25lZCBsb25nKQorREVMRUdBVEVfVE9fSU5URVJOQUxfMShzdGVuY2lsTWFzaywgdW5zaWduZWQg
bG9uZykKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzIoc3RlbmNpbE1hc2tTZXBhcmF0ZSwgdW5zaWdu
ZWQgbG9uZywgdW5zaWduZWQgbG9uZykKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzMoc3RlbmNpbE9w
LCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKQorREVMRUdBVEVf
VE9fSU5URVJOQUxfNChzdGVuY2lsT3BTZXBhcmF0ZSwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQg
bG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZykKKworREVMRUdBVEVfVE9fSU5URVJO
QUxfOVIodGV4SW1hZ2UyRCwgdW5zaWduZWQsIHVuc2lnbmVkLCB1bnNpZ25lZCwgdW5zaWduZWQs
IHVuc2lnbmVkLCB1bnNpZ25lZCwgdW5zaWduZWQsIHVuc2lnbmVkLCB2b2lkKiwgaW50KQorCiBp
bnQgR3JhcGhpY3NDb250ZXh0M0Q6OnRleEltYWdlMkQodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25l
ZCBsZXZlbCwgSW1hZ2UqIGltYWdlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJvb2wgZmxpcFksIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSkKIHsKQEAgLTE4ODAsMjkgKzEyMzEs
MTUgQEAgaW50IEdyYXBoaWNzQ29udGV4dDNEOjp0ZXhJbWFnZTJEKHVuc2lnbgogICAgIHVuc2ln
bmVkIGludCBmb3JtYXQsIGludGVybmFsRm9ybWF0OwogICAgIGlmICghZXh0cmFjdEltYWdlRGF0
YShpbWFnZSwgZmxpcFksIHByZW11bHRpcGx5QWxwaGEsIGltYWdlRGF0YSwgJmZvcm1hdCwgJmlu
dGVybmFsRm9ybWF0KSkKICAgICAgICAgcmV0dXJuIC0xOwotICAgIGdsVGV4SW1hZ2UyRCh0YXJn
ZXQsIGxldmVsLCBpbnRlcm5hbEZvcm1hdCwKLSAgICAgICAgICAgICAgICAgaW1hZ2UtPndpZHRo
KCksIGltYWdlLT5oZWlnaHQoKSwgMCwKLSAgICAgICAgICAgICAgICAgZm9ybWF0LCBHTF9VTlNJ
R05FRF9CWVRFLCBpbWFnZURhdGEuZGF0YSgpKTsKLSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4g
bV9pbnRlcm5hbC0+dGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbEZvcm1hdCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZS0+d2lkdGgoKSwgaW1hZ2UtPmhl
aWdodCgpLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdCwgVU5T
SUdORURfQllURSwgaW1hZ2VEYXRhLmRhdGEoKSk7CiB9CiAKLUdMX1NBTUVfTUVUSE9EXzMoVGV4
UGFyYW1ldGVyZiwgdGV4UGFyYW1ldGVyZiwgdW5zaWduZWQsIHVuc2lnbmVkLCBmbG9hdCk7CitE
RUxFR0FURV9UT19JTlRFUk5BTF8zKHRleFBhcmFtZXRlcmYsIHVuc2lnbmVkLCB1bnNpZ25lZCwg
ZmxvYXQpCitERUxFR0FURV9UT19JTlRFUk5BTF8zKHRleFBhcmFtZXRlcmksIHVuc2lnbmVkLCB1
bnNpZ25lZCwgaW50KQogCi1HTF9TQU1FX01FVEhPRF8zKFRleFBhcmFtZXRlcmksIHRleFBhcmFt
ZXRlcmksIHVuc2lnbmVkLCB1bnNpZ25lZCwgaW50KTsKLQotaW50IEdyYXBoaWNzQ29udGV4dDNE
Ojp0ZXhTdWJJbWFnZTJEKHVuc2lnbmVkIHRhcmdldCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBsZXZlbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB1bnNpZ25lZCB4b2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIHlvZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdW5zaWduZWQgd2lkdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdW5zaWduZWQgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIGZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB1bnNpZ25lZCB0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZv
aWQqIHBpeGVscykKLXsKLSAgICBnbFRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNl
dCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpOwotICAgIHJl
dHVybiAwOwotfQorREVMRUdBVEVfVE9fSU5URVJOQUxfOVIodGV4U3ViSW1hZ2UyRCwgdW5zaWdu
ZWQsIHVuc2lnbmVkLCB1bnNpZ25lZCwgdW5zaWduZWQsIHVuc2lnbmVkLCB1bnNpZ25lZCwgdW5z
aWduZWQsIHVuc2lnbmVkLCB2b2lkKiwgaW50KQogCiBpbnQgR3JhcGhpY3NDb250ZXh0M0Q6OnRl
eFN1YkltYWdlMkQodW5zaWduZWQgdGFyZ2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIGxldmVsLApAQCAtMTkxNiwxNDIgKzEyNTMsNjUgQEAgaW50IEdy
YXBoaWNzQ29udGV4dDNEOjp0ZXhTdWJJbWFnZTJEKHVucwogICAgIHVuc2lnbmVkIGludCBmb3Jt
YXQsIGludGVybmFsRm9ybWF0OwogICAgIGlmICghZXh0cmFjdEltYWdlRGF0YShpbWFnZSwgZmxp
cFksIHByZW11bHRpcGx5QWxwaGEsIGltYWdlRGF0YSwgJmZvcm1hdCwgJmludGVybmFsRm9ybWF0
KSkKICAgICAgICAgcmV0dXJuIC0xOwotICAgIGdsVGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVs
LCB4b2Zmc2V0LCB5b2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICBpbWFnZS0+d2lkdGgoKSwg
aW1hZ2UtPmhlaWdodCgpLAotICAgICAgICAgICAgICAgICAgICBmb3JtYXQsIEdMX1VOU0lHTkVE
X0JZVEUsIGltYWdlRGF0YS5kYXRhKCkpOwotICAgIHJldHVybiAwOwotfQorICAgIHJldHVybiBt
X2ludGVybmFsLT50ZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2UtPndpZHRoKCksIGlt
YWdlLT5oZWlnaHQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3Jt
YXQsIFVOU0lHTkVEX0JZVEUsIGltYWdlRGF0YS5kYXRhKCkpOworfQorCitERUxFR0FURV9UT19J
TlRFUk5BTF8yKHVuaWZvcm0xZiwgbG9uZywgZmxvYXQpCitERUxFR0FURV9UT19JTlRFUk5BTF8z
KHVuaWZvcm0xZnYsIGxvbmcsIGZsb2F0KiwgaW50KQorREVMRUdBVEVfVE9fSU5URVJOQUxfMih1
bmlmb3JtMWksIGxvbmcsIGludCkKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzModW5pZm9ybTFpdiwg
bG9uZywgaW50KiwgaW50KQorREVMRUdBVEVfVE9fSU5URVJOQUxfMyh1bmlmb3JtMmYsIGxvbmcs
IGZsb2F0LCBmbG9hdCkKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzModW5pZm9ybTJmdiwgbG9uZywg
ZmxvYXQqLCBpbnQpCitERUxFR0FURV9UT19JTlRFUk5BTF8zKHVuaWZvcm0yaSwgbG9uZywgaW50
LCBpbnQpCitERUxFR0FURV9UT19JTlRFUk5BTF8zKHVuaWZvcm0yaXYsIGxvbmcsIGludCosIGlu
dCkKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzQodW5pZm9ybTNmLCBsb25nLCBmbG9hdCwgZmxvYXQs
IGZsb2F0KQorREVMRUdBVEVfVE9fSU5URVJOQUxfMyh1bmlmb3JtM2Z2LCBsb25nLCBmbG9hdCos
IGludCkKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzQodW5pZm9ybTNpLCBsb25nLCBpbnQsIGludCwg
aW50KQorREVMRUdBVEVfVE9fSU5URVJOQUxfMyh1bmlmb3JtM2l2LCBsb25nLCBpbnQqLCBpbnQp
CitERUxFR0FURV9UT19JTlRFUk5BTF81KHVuaWZvcm00ZiwgbG9uZywgZmxvYXQsIGZsb2F0LCBm
bG9hdCwgZmxvYXQpCitERUxFR0FURV9UT19JTlRFUk5BTF8zKHVuaWZvcm00ZnYsIGxvbmcsIGZs
b2F0KiwgaW50KQorREVMRUdBVEVfVE9fSU5URVJOQUxfNSh1bmlmb3JtNGksIGxvbmcsIGludCwg
aW50LCBpbnQsIGludCkKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzModW5pZm9ybTRpdiwgbG9uZywg
aW50KiwgaW50KQorREVMRUdBVEVfVE9fSU5URVJOQUxfNCh1bmlmb3JtTWF0cml4MmZ2LCBsb25n
LCBib29sLCBmbG9hdCosIGludCkKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzQodW5pZm9ybU1hdHJp
eDNmdiwgbG9uZywgYm9vbCwgZmxvYXQqLCBpbnQpCitERUxFR0FURV9UT19JTlRFUk5BTF80KHVu
aWZvcm1NYXRyaXg0ZnYsIGxvbmcsIGJvb2wsIGZsb2F0KiwgaW50KQorCitERUxFR0FURV9UT19J
TlRFUk5BTF8xKHVzZVByb2dyYW0sIFdlYkdMUHJvZ3JhbSopCitERUxFR0FURV9UT19JTlRFUk5B
TF8xKHZhbGlkYXRlUHJvZ3JhbSwgV2ViR0xQcm9ncmFtKikKKworREVMRUdBVEVfVE9fSU5URVJO
QUxfMih2ZXJ0ZXhBdHRyaWIxZiwgdW5zaWduZWQgbG9uZywgZmxvYXQpCitERUxFR0FURV9UT19J
TlRFUk5BTF8yKHZlcnRleEF0dHJpYjFmdiwgdW5zaWduZWQgbG9uZywgZmxvYXQqKQorREVMRUdB
VEVfVE9fSU5URVJOQUxfMyh2ZXJ0ZXhBdHRyaWIyZiwgdW5zaWduZWQgbG9uZywgZmxvYXQsIGZs
b2F0KQorREVMRUdBVEVfVE9fSU5URVJOQUxfMih2ZXJ0ZXhBdHRyaWIyZnYsIHVuc2lnbmVkIGxv
bmcsIGZsb2F0KikKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzQodmVydGV4QXR0cmliM2YsIHVuc2ln
bmVkIGxvbmcsIGZsb2F0LCBmbG9hdCwgZmxvYXQpCitERUxFR0FURV9UT19JTlRFUk5BTF8yKHZl
cnRleEF0dHJpYjNmdiwgdW5zaWduZWQgbG9uZywgZmxvYXQqKQorREVMRUdBVEVfVE9fSU5URVJO
QUxfNSh2ZXJ0ZXhBdHRyaWI0ZiwgdW5zaWduZWQgbG9uZywgZmxvYXQsIGZsb2F0LCBmbG9hdCwg
ZmxvYXQpCitERUxFR0FURV9UT19JTlRFUk5BTF8yKHZlcnRleEF0dHJpYjRmdiwgdW5zaWduZWQg
bG9uZywgZmxvYXQqKQorREVMRUdBVEVfVE9fSU5URVJOQUxfNih2ZXJ0ZXhBdHRyaWJQb2ludGVy
LCB1bnNpZ25lZCBsb25nLCBpbnQsIGludCwgYm9vbCwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQg
bG9uZykKKworREVMRUdBVEVfVE9fSU5URVJOQUxfNCh2aWV3cG9ydCwgbG9uZywgbG9uZywgdW5z
aWduZWQgbG9uZywgdW5zaWduZWQgbG9uZykKKworREVMRUdBVEVfVE9fSU5URVJOQUxfMShiZWdp
blBhaW50LCBXZWJHTFJlbmRlcmluZ0NvbnRleHQqKQorREVMRUdBVEVfVE9fSU5URVJOQUwoZW5k
UGFpbnQpCisKK0RFTEVHQVRFX1RPX0lOVEVSTkFMX1IoY3JlYXRlQnVmZmVyLCB1bnNpZ25lZCkK
K0RFTEVHQVRFX1RPX0lOVEVSTkFMX1IoY3JlYXRlRnJhbWVidWZmZXIsIHVuc2lnbmVkKQorREVM
RUdBVEVfVE9fSU5URVJOQUxfUihjcmVhdGVQcm9ncmFtLCB1bnNpZ25lZCkKK0RFTEVHQVRFX1RP
X0lOVEVSTkFMX1IoY3JlYXRlUmVuZGVyYnVmZmVyLCB1bnNpZ25lZCkKK0RFTEVHQVRFX1RPX0lO
VEVSTkFMXzFSKGNyZWF0ZVNoYWRlciwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQpCitERUxFR0FU
RV9UT19JTlRFUk5BTF9SKGNyZWF0ZVRleHR1cmUsIHVuc2lnbmVkKQorCitERUxFR0FURV9UT19J
TlRFUk5BTF8xKGRlbGV0ZUJ1ZmZlciwgdW5zaWduZWQpCitERUxFR0FURV9UT19JTlRFUk5BTF8x
KGRlbGV0ZUZyYW1lYnVmZmVyLCB1bnNpZ25lZCkKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzEoZGVs
ZXRlUHJvZ3JhbSwgdW5zaWduZWQpCitERUxFR0FURV9UT19JTlRFUk5BTF8xKGRlbGV0ZVJlbmRl
cmJ1ZmZlciwgdW5zaWduZWQpCitERUxFR0FURV9UT19JTlRFUk5BTF8xKGRlbGV0ZVNoYWRlciwg
dW5zaWduZWQpCitERUxFR0FURV9UT19JTlRFUk5BTF8xKGRlbGV0ZVRleHR1cmUsIHVuc2lnbmVk
KQogCi1HTF9TQU1FX01FVEhPRF8yKFVuaWZvcm0xZiwgdW5pZm9ybTFmLCBsb25nLCBmbG9hdCkK
K0RFTEVHQVRFX1RPX0lOVEVSTkFMXzEoc3ludGhlc2l6ZUdMRXJyb3IsIHVuc2lnbmVkIGxvbmcp
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0xZnYobG9uZyBsb2NhdGlvbiwgZmxv
YXQqIHYsIGludCBzaXplKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsVW5p
Zm9ybTFmdihsb2NhdGlvbiwgc2l6ZSwgdik7Ci19Ci0KLUdMX1NBTUVfTUVUSE9EXzIoVW5pZm9y
bTFpLCB1bmlmb3JtMWksIGxvbmcsIGludCkKLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5p
Zm9ybTFpdihsb25nIGxvY2F0aW9uLCBpbnQqIHYsIGludCBzaXplKQotewotICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOwotICAgIGdsVW5pZm9ybTFpdihsb2NhdGlvbiwgc2l6ZSwgdik7Ci19Ci0K
LUdMX1NBTUVfTUVUSE9EXzMoVW5pZm9ybTJmLCB1bmlmb3JtMmYsIGxvbmcsIGZsb2F0LCBmbG9h
dCkKLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTJmdihsb25nIGxvY2F0aW9uLCBm
bG9hdCogdiwgaW50IHNpemUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2xV
bmlmb3JtMmZ2KGxvY2F0aW9uLCBzaXplLCB2KTsKLX0KLQotR0xfU0FNRV9NRVRIT0RfMyhVbmlm
b3JtMmksIHVuaWZvcm0yaSwgbG9uZywgaW50LCBpbnQpCi0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OnVuaWZvcm0yaXYobG9uZyBsb2NhdGlvbiwgaW50KiB2LCBpbnQgc2l6ZSkKLXsKLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbFVuaWZvcm0yaXYobG9jYXRpb24sIHNpemUsIHYp
OwotfQotCi1HTF9TQU1FX01FVEhPRF80KFVuaWZvcm0zZiwgdW5pZm9ybTNmLCBsb25nLCBmbG9h
dCwgZmxvYXQsIGZsb2F0KQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtM2Z2KGxv
bmcgbG9jYXRpb24sIGZsb2F0KiB2LCBpbnQgc2l6ZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKLSAgICBnbFVuaWZvcm0zZnYobG9jYXRpb24sIHNpemUsIHYpOwotfQotCi1HTF9TQU1F
X01FVEhPRF80KFVuaWZvcm0zaSwgdW5pZm9ybTNpLCBsb25nLCBpbnQsIGludCwgaW50KQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtM2l2KGxvbmcgbG9jYXRpb24sIGludCogdiwg
aW50IHNpemUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2xVbmlmb3JtM2l2
KGxvY2F0aW9uLCBzaXplLCB2KTsKLX0KLQotR0xfU0FNRV9NRVRIT0RfNShVbmlmb3JtNGYsIHVu
aWZvcm00ZiwgbG9uZywgZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQpCi0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OnVuaWZvcm00ZnYobG9uZyBsb2NhdGlvbiwgZmxvYXQqIHYsIGludCBzaXpl
KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsVW5pZm9ybTRmdihsb2NhdGlv
biwgc2l6ZSwgdik7Ci19Ci0KLUdMX1NBTUVfTUVUSE9EXzUoVW5pZm9ybTRpLCB1bmlmb3JtNGks
IGxvbmcsIGludCwgaW50LCBpbnQsIGludCkKLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5p
Zm9ybTRpdihsb25nIGxvY2F0aW9uLCBpbnQqIHYsIGludCBzaXplKQotewotICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOwotICAgIGdsVW5pZm9ybTRpdihsb2NhdGlvbiwgc2l6ZSwgdik7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm1NYXRyaXgyZnYobG9uZyBsb2NhdGlvbiwg
Ym9vbCB0cmFuc3Bvc2UsIGZsb2F0KiB2YWx1ZSwgaW50IHNpemUpCi17Ci0gICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7Ci0gICAgZ2xVbmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9uLCBzaXplLCB0cmFu
c3Bvc2UsIHZhbHVlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybU1hdHJp
eDNmdihsb25nIGxvY2F0aW9uLCBib29sIHRyYW5zcG9zZSwgZmxvYXQqIHZhbHVlLCBpbnQgc2l6
ZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbFVuaWZvcm1NYXRyaXgzZnYo
bG9jYXRpb24sIHNpemUsIHRyYW5zcG9zZSwgdmFsdWUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjp1bmlmb3JtTWF0cml4NGZ2KGxvbmcgbG9jYXRpb24sIGJvb2wgdHJhbnNwb3NlLCBm
bG9hdCogdmFsdWUsIGludCBzaXplKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAg
IGdsVW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwgc2l6ZSwgdHJhbnNwb3NlLCB2YWx1ZSk7Ci19
Ci0KLUdMX1NBTUVfTUVUSE9EXzFfWChVc2VQcm9ncmFtLCB1c2VQcm9ncmFtLCBXZWJHTFByb2dy
YW0qKQotCi1HTF9TQU1FX01FVEhPRF8xX1goVmFsaWRhdGVQcm9ncmFtLCB2YWxpZGF0ZVByb2dy
YW0sIFdlYkdMUHJvZ3JhbSopCi0KLUdMX1NBTUVfTUVUSE9EXzIoVmVydGV4QXR0cmliMWYsIHZl
cnRleEF0dHJpYjFmLCB1bnNpZ25lZCBsb25nLCBmbG9hdCkKLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6dmVydGV4QXR0cmliMWZ2KHVuc2lnbmVkIGxvbmcgaW5keCwgZmxvYXQqIHZhbHVlcykK
LXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbFZlcnRleEF0dHJpYjFmdihpbmR4
LCB2YWx1ZXMpOwotfQotCi1HTF9TQU1FX01FVEhPRF8zKFZlcnRleEF0dHJpYjJmLCB2ZXJ0ZXhB
dHRyaWIyZiwgdW5zaWduZWQgbG9uZywgZmxvYXQsIGZsb2F0KQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjp2ZXJ0ZXhBdHRyaWIyZnYodW5zaWduZWQgbG9uZyBpbmR4LCBmbG9hdCogdmFsdWVz
KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsVmVydGV4QXR0cmliMmZ2KGlu
ZHgsIHZhbHVlcyk7Ci19Ci0KLUdMX1NBTUVfTUVUSE9EXzQoVmVydGV4QXR0cmliM2YsIHZlcnRl
eEF0dHJpYjNmLCB1bnNpZ25lZCBsb25nLCBmbG9hdCwgZmxvYXQsIGZsb2F0KQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIzZnYodW5zaWduZWQgbG9uZyBpbmR4LCBmbG9h
dCogdmFsdWVzKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsVmVydGV4QXR0
cmliM2Z2KGluZHgsIHZhbHVlcyk7Ci19Ci0KLUdMX1NBTUVfTUVUSE9EXzUoVmVydGV4QXR0cmli
NGYsIHZlcnRleEF0dHJpYjRmLCB1bnNpZ25lZCBsb25nLCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBm
bG9hdCkKLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmliNGZ2KHVuc2lnbmVk
IGxvbmcgaW5keCwgZmxvYXQqIHZhbHVlcykKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
LSAgICBnbFZlcnRleEF0dHJpYjRmdihpbmR4LCB2YWx1ZXMpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWJQb2ludGVyKHVuc2lnbmVkIGxvbmcgaW5keCwgaW50IHNp
emUsIGludCB0eXBlLCBib29sIG5vcm1hbGl6ZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgc3RyaWRlLCB1bnNpZ25lZCBsb25nIG9m
ZnNldCkKLXsKLSAgICBtX2ludGVybmFsLT52ZXJ0ZXhBdHRyaWJQb2ludGVyKGluZHgsIHNpemUs
IHR5cGUsIG5vcm1hbGl6ZWQsIHN0cmlkZSwgb2Zmc2V0KTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6dmlld3BvcnQobG9uZyB4LCBsb25nIHksIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVu
c2lnbmVkIGxvbmcgaGVpZ2h0KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1f
aW50ZXJuYWwtPnZpZXdwb3J0SW1wbCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKLX0KLQotfQorfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKDNEX0NBTlZBUykKSW5kZXg6
IFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViR3JhcGhpY3NDb250ZXh0M0QuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViR3JhcGhpY3NDb250ZXh0M0QuY3BwCShyZXZpc2lv
biAwKQorKysgV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJHcmFwaGljc0NvbnRleHQzRC5jcHAJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQor
ICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
V2ViR3JhcGhpY3NDb250ZXh0M0QuaCIKKworI2lmIEVOQUJMRSgzRF9DQU5WQVMpCisKKyNpbmNs
dWRlICJXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsLmgiCisKK25hbWVzcGFjZSBXZWJL
aXQgeworCitXZWJHcmFwaGljc0NvbnRleHQzRCogV2ViR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0
ZURlZmF1bHQoKQoreworI2lmIEVOQUJMRSgzRF9DQU5WQVMpCisgICAgcmV0dXJuIG5ldyBXZWJH
cmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsKCk7CisjZWxzZQorICAgIHJldHVybiAwOworI2Vu
ZGlmCit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKDNEX0NB
TlZBUykKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViR3JhcGhpY3NDb250ZXh0M0REZWZh
dWx0SW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJHcmFwaGlj
c0NvbnRleHQzRERlZmF1bHRJbXBsLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYktpdC9jaHJvbWl1
bS9zcmMvV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbC5jcHAJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsMTE5NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQor
ICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBu
YW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQor
ICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
KyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRSgzRF9DQU5W
QVMpCisKKyNpbmNsdWRlICJXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsLmgiCisKKyNp
bmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorCisjaWYgT1MoTElOVVgpCisjaW5jbHVkZSA8ZGxm
Y24uaD4KKyNlbmRpZgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworLy8gVW5jb21tZW50IHRoaXMg
dG8gcmVuZGVyIHRvIGEgc2VwYXJhdGUgd2luZG93IGZvciBkZWJ1Z2dpbmcKKy8vICNkZWZpbmUg
UkVOREVSX1RPX0RFQlVHR0lOR19XSU5ET1cKKworI2lmIE9TKERBUldJTikKKyNkZWZpbmUgVVNF
X1RFWFRVUkVfUkVDVEFOR0xFX0ZPUl9GUkFNRUJVRkZFUgorI2VuZGlmCisKK2Jvb2wgV2ViR3Jh
cGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6c19pbml0aWFsaXplZEdMRVcgPSBmYWxzZTsKKwor
I2lmIE9TKExJTlVYKQorV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6R0xDb25uZWN0
aW9uKiBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpzX2dsID0gMDsKKworV2ViR3Jh
cGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6R0xDb25uZWN0aW9uKiBXZWJHcmFwaGljc0NvbnRl
eHQzRERlZmF1bHRJbXBsOjpHTENvbm5lY3Rpb246OmNyZWF0ZSgpCit7CisgICAgRGlzcGxheSog
ZHB5ID0gWE9wZW5EaXNwbGF5KDApOworICAgIGlmICghZHB5KSB7CisgICAgICAgIHByaW50Zigi
R3JhcGhpY3NDb250ZXh0M0Q6IGVycm9yIG9wZW5pbmcgWCBkaXNwbGF5XG4iKTsKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgfQorCisgICAgLy8gV2UgdXNlIFJUTERfR0xPQkFMIHNlbWFudGljcyBz
byB0aGF0IEdMRVcgaW5pdGlhbGl6YXRpb24gd29ya3M7CisgICAgLy8gR0xFVyBleHBlY3RzIHRv
IGJlIGFibGUgdG8gb3BlbiB0aGUgY3VycmVudCBwcm9jZXNzJ3MgaGFuZGxlCisgICAgLy8gYW5k
IGRvIGRsc3ltJ3Mgb2YgR0wgZW50cnkgcG9pbnRzIGZyb20gdGhlcmUuCisgICAgdm9pZCogbGli
R0wgPSBkbG9wZW4oImxpYkdMLnNvLjEiLCBSVExEX0xBWlkgfCBSVExEX0dMT0JBTCk7CisgICAg
aWYgKCFsaWJHTCkgeworICAgICAgICBYQ2xvc2VEaXNwbGF5KGRweSk7CisgICAgICAgIHByaW50
ZigiR3JhcGhpY3NDb250ZXh0M0Q6IGVycm9yIG9wZW5pbmcgbGliR0wuc28uMTogJXNcbiIsIGRs
ZXJyb3IoKSk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIFBGTkdMWENIT09TRUZC
Q09ORklHUFJPQyBjaG9vc2VGQkNvbmZpZyA9IChQRk5HTFhDSE9PU0VGQkNPTkZJR1BST0MpIGRs
c3ltKGxpYkdMLCAiZ2xYQ2hvb3NlRkJDb25maWciKTsKKyAgICBQRk5HTFhDUkVBVEVORVdDT05U
RVhUUFJPQyBjcmVhdGVOZXdDb250ZXh0ID0gKFBGTkdMWENSRUFURU5FV0NPTlRFWFRQUk9DKSBk
bHN5bShsaWJHTCwgImdsWENyZWF0ZU5ld0NvbnRleHQiKTsKKyAgICBQRk5HTFhDUkVBVEVQQlVG
RkVSUFJPQyBjcmVhdGVQYnVmZmVyID0gKFBGTkdMWENSRUFURVBCVUZGRVJQUk9DKSBkbHN5bShs
aWJHTCwgImdsWENyZWF0ZVBidWZmZXIiKTsKKyAgICBQRk5HTFhERVNUUk9ZUEJVRkZFUlBST0Mg
ZGVzdHJveVBidWZmZXIgPSAoUEZOR0xYREVTVFJPWVBCVUZGRVJQUk9DKSBkbHN5bShsaWJHTCwg
ImdsWERlc3Ryb3lQYnVmZmVyIik7CisgICAgUEZOR0xYTUFLRUNVUlJFTlRQUk9DIG1ha2VDdXJy
ZW50ID0gKFBGTkdMWE1BS0VDVVJSRU5UUFJPQykgZGxzeW0obGliR0wsICJnbFhNYWtlQ3VycmVu
dCIpOworICAgIFBGTkdMWERFU1RST1lDT05URVhUUFJPQyBkZXN0cm95Q29udGV4dCA9IChQRk5H
TFhERVNUUk9ZQ09OVEVYVFBST0MpIGRsc3ltKGxpYkdMLCAiZ2xYRGVzdHJveUNvbnRleHQiKTsK
KyAgICBQRk5HTFhHRVRDVVJSRU5UQ09OVEVYVFBST0MgZ2V0Q3VycmVudENvbnRleHQgPSAoUEZO
R0xYR0VUQ1VSUkVOVENPTlRFWFRQUk9DKSBkbHN5bShsaWJHTCwgImdsWEdldEN1cnJlbnRDb250
ZXh0Iik7CisgICAgaWYgKCFjaG9vc2VGQkNvbmZpZyB8fCAhY3JlYXRlTmV3Q29udGV4dCB8fCAh
Y3JlYXRlUGJ1ZmZlcgorICAgICAgICB8fCAhZGVzdHJveVBidWZmZXIgfHwgIW1ha2VDdXJyZW50
IHx8ICFkZXN0cm95Q29udGV4dAorICAgICAgICB8fCAhZ2V0Q3VycmVudENvbnRleHQpIHsKKyAg
ICAgICAgWENsb3NlRGlzcGxheShkcHkpOworICAgICAgICBkbGNsb3NlKGxpYkdMKTsKKyAgICAg
ICAgcHJpbnRmKCJHcmFwaGljc0NvbnRleHQzRDogZXJyb3IgbG9va2luZyB1cCBib290c3RyYXBw
aW5nIGVudHJ5IHBvaW50c1xuIik7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICByZXR1
cm4gbmV3IEdMQ29ubmVjdGlvbihkcHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGli
R0wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hvb3NlRkJDb25maWcsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY3JlYXRlTmV3Q29udGV4dCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjcmVhdGVQYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRl
c3Ryb3lQYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ha2VDdXJyZW50LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Ryb3lDb250ZXh0LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGdldEN1cnJlbnRDb250ZXh0KTsKK30KKworV2ViR3JhcGhpY3NDb250
ZXh0M0REZWZhdWx0SW1wbDo6R0xDb25uZWN0aW9uOjp+R0xDb25uZWN0aW9uKCkKK3sKKyAgICBY
Q2xvc2VEaXNwbGF5KG1fZGlzcGxheSk7CisgICAgZGxjbG9zZShtX2xpYkdMKTsKK30KKworI2Vu
ZGlmIC8vIE9TKExJTlVYKQorCitXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpWZXJ0
ZXhBdHRyaWJQb2ludGVyU3RhdGU6OlZlcnRleEF0dHJpYlBvaW50ZXJTdGF0ZSgpCisgICAgOiBl
bmFibGVkKGZhbHNlKQorICAgICwgYnVmZmVyKDApCisgICAgLCBpbmR4KDApCisgICAgLCBzaXpl
KDApCisgICAgLCB0eXBlKDApCisgICAgLCBub3JtYWxpemVkKGZhbHNlKQorICAgICwgc3RyaWRl
KDApCisgICAgLCBvZmZzZXQoMCkKK3sKK30KKworV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0
SW1wbDo6V2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbCgpCisgICAgOiBtX2luaXRpYWxp
emVkKGZhbHNlKQorICAgICwgbV90ZXh0dXJlKDApCisgICAgLCBtX2ZibygwKQorICAgICwgbV9k
ZXB0aEJ1ZmZlcigwKQorICAgICwgbV9ib3VuZEZCTygwKQorI2lmZGVmIEZMSVBfRlJBTUVCVUZG
RVJfVkVSVElDQUxMWQorICAgICwgbV9zY2FubGluZSgwKQorI2VuZGlmCisgICAgLCBtX2JvdW5k
QXJyYXlCdWZmZXIoMCkKKyNpZiBQTEFURk9STShTS0lBKQorICAgICwgbV9yZXNpemluZ0JpdG1h
cCgwKQorI2VuZGlmCisjaWYgT1MoV0lORE9XUykKKyAgICAsIG1fY2FudmFzV2luZG93KDApCisg
ICAgLCBtX2NhbnZhc0RDKDApCisgICAgLCBtX2NvbnRleHRPYmooMCkKKyNlbGlmIFBMQVRGT1JN
KENHKQorICAgICwgbV9wYnVmZmVyKDApCisgICAgLCBtX2NvbnRleHRPYmooMCkKKyAgICAsIG1f
cmVuZGVyT3V0cHV0KDApCisjZWxpZiBPUyhMSU5VWCkKKyAgICAsIG1fY29udGV4dE9iaigwKQor
ICAgICwgbV9wYnVmZmVyKDApCisjZWxzZQorI2Vycm9yIE11c3QgcG9ydCB0byB5b3VyIHBsYXRm
b3JtCisjZW5kaWYKK3sKK30KKworV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6fldl
YkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGwoKQoreworICAgIGlmIChtX2luaXRpYWxpemVk
KSB7CisgICAgICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworI2lmbmRlZiBSRU5ERVJfVE9fREVC
VUdHSU5HX1dJTkRPVworICAgICAgICBnbERlbGV0ZVJlbmRlcmJ1ZmZlcnNFWFQoMSwgJm1fZGVw
dGhCdWZmZXIpOworICAgICAgICBnbERlbGV0ZVRleHR1cmVzKDEsICZtX3RleHR1cmUpOworI2lm
ZGVmIEZMSVBfRlJBTUVCVUZGRVJfVkVSVElDQUxMWQorICAgICAgICBpZiAobV9zY2FubGluZSkK
KyAgICAgICAgICAgIGRlbGV0ZVtdIG1fc2NhbmxpbmU7CisjZW5kaWYKKyAgICAgICAgZ2xEZWxl
dGVGcmFtZWJ1ZmZlcnNFWFQoMSwgJm1fZmJvKTsKKyNlbmRpZiAvLyAhUkVOREVSX1RPX0RFQlVH
R0lOR19XSU5ET1cKKyNpZiBQTEFURk9STShTS0lBKQorICAgICAgICBpZiAobV9yZXNpemluZ0Jp
dG1hcCkKKyAgICAgICAgICAgIGRlbGV0ZSBtX3Jlc2l6aW5nQml0bWFwOworI2VuZGlmCisjaWYg
T1MoV0lORE9XUykKKyAgICAgICAgd2dsTWFrZUN1cnJlbnQoMCwgMCk7CisgICAgICAgIHdnbERl
bGV0ZUNvbnRleHQobV9jb250ZXh0T2JqKTsKKyAgICAgICAgUmVsZWFzZURDKG1fY2FudmFzV2lu
ZG93LCBtX2NhbnZhc0RDKTsKKyAgICAgICAgRGVzdHJveVdpbmRvdyhtX2NhbnZhc1dpbmRvdyk7
CisjZWxpZiBQTEFURk9STShDRykKKyAgICAgICAgQ0dMU2V0Q3VycmVudENvbnRleHQoMCk7Cisg
ICAgICAgIENHTERlc3Ryb3lDb250ZXh0KG1fY29udGV4dE9iaik7CisgICAgICAgIENHTERlc3Ry
b3lQQnVmZmVyKG1fcGJ1ZmZlcik7CisgICAgICAgIGlmIChtX3JlbmRlck91dHB1dCkKKyAgICAg
ICAgICAgIGRlbGV0ZVtdIG1fcmVuZGVyT3V0cHV0OworI2VsaWYgT1MoTElOVVgpCisgICAgICAg
IHNfZ2wtPm1ha2VDdXJyZW50KDAsIDApOworICAgICAgICBzX2dsLT5kZXN0cm95Q29udGV4dCht
X2NvbnRleHRPYmopOworICAgICAgICBzX2dsLT5kZXN0cm95UGJ1ZmZlcihtX3BidWZmZXIpOwor
I2Vsc2UKKyNlcnJvciBNdXN0IHBvcnQgdG8geW91ciBwbGF0Zm9ybQorI2VuZGlmCisgICAgICAg
IG1fY29udGV4dE9iaiA9IDA7CisgICAgfQorfQorCitib29sIFdlYkdyYXBoaWNzQ29udGV4dDNE
RGVmYXVsdEltcGw6OmluaXRpYWxpemUoV2ViR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMg
YXR0cmlidXRlcykKK3sKKyAgICAvLyBGSVhNRTogd2UgbmVlZCB0byB0YWtlIGludG8gYWNjb3Vu
dCB0aGUgdXNlcidzIHJlcXVlc3RlZAorICAgIC8vIGNvbnRleHQgY3JlYXRpb24gYXR0cmlidXRl
cywgaW4gcGFydGljdWxhciBzdGVuY2lsIGFuZAorICAgIC8vIGFudGlhbGlhcywgYW5kIGRldGVy
bWluZSB3aGljaCBjb3VsZCBhbmQgY291bGQgbm90IGJlIGhvbm9yZWQKKyAgICAvLyBiYXNlZCBv
biB0aGUgY2FwYWJpbGl0aWVzIG9mIHRoZSBPcGVuR0wgaW1wbGVtZW50YXRpb24uCisgICAgbV9h
dHRyaWJ1dGVzLmFscGhhID0gdHJ1ZTsKKyAgICBtX2F0dHJpYnV0ZXMuZGVwdGggPSB0cnVlOwor
ICAgIG1fYXR0cmlidXRlcy5zdGVuY2lsID0gZmFsc2U7CisgICAgbV9hdHRyaWJ1dGVzLmFudGlh
bGlhcyA9IGZhbHNlOworICAgIG1fYXR0cmlidXRlcy5wcmVtdWx0aXBsaWVkQWxwaGEgPSB0cnVl
OworCisjaWYgT1MoV0lORE9XUykKKyAgICBXTkRDTEFTUyB3YzsKKyAgICBpZiAoIUdldENsYXNz
SW5mbyhHZXRNb2R1bGVIYW5kbGUoMCksIEwiQ0FOVkFTR0wiLCAmd2MpKSB7CisgICAgICAgIFpl
cm9NZW1vcnkoJndjLCBzaXplb2YoV05EQ0xBU1MpKTsKKyAgICAgICAgd2Muc3R5bGUgPSBDU19P
V05EQzsKKyAgICAgICAgd2MuaEluc3RhbmNlID0gR2V0TW9kdWxlSGFuZGxlKDApOworICAgICAg
ICB3Yy5scGZuV25kUHJvYyA9IERlZldpbmRvd1Byb2M7CisgICAgICAgIHdjLmxwc3pDbGFzc05h
bWUgPSBMIkNBTlZBU0dMIjsKKworICAgICAgICBpZiAoIVJlZ2lzdGVyQ2xhc3MoJndjKSkgewor
ICAgICAgICAgICAgcHJpbnRmKCJXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOiBSZWdp
c3RlckNsYXNzIGZhaWxlZFxuIik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBtX2NhbnZhc1dpbmRvdyA9IENyZWF0ZVdpbmRvdyhMIkNBTlZBU0dM
IiwgTCJDQU5WQVNHTCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV1NfQ0FQ
VElPTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDV19VU0VERUZBVUxULCBD
V19VU0VERUZBVUxULCBDV19VU0VERUZBVUxULAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIENXX1VTRURFRkFVTFQsIDAsIDAsIEdldE1vZHVsZUhhbmRsZSgwKSwgMCk7CisgICAg
aWYgKCFtX2NhbnZhc1dpbmRvdykgeworICAgICAgICBwcmludGYoIldlYkdyYXBoaWNzQ29udGV4
dDNERGVmYXVsdEltcGw6IENyZWF0ZVdpbmRvdyBmYWlsZWRcbiIpOworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorCisgICAgLy8gZ2V0IHRoZSBkZXZpY2UgY29udGV4dAorICAgIG1fY2Fu
dmFzREMgPSBHZXREQyhtX2NhbnZhc1dpbmRvdyk7CisgICAgaWYgKCFtX2NhbnZhc0RDKSB7Cisg
ICAgICAgIHByaW50ZigiV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDogR2V0REMgZmFp
bGVkXG4iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIGZpbmQgZGVm
YXVsdCBwaXhlbCBmb3JtYXQKKyAgICBQSVhFTEZPUk1BVERFU0NSSVBUT1IgcGZkOworICAgIFpl
cm9NZW1vcnkoJnBmZCwgc2l6ZW9mKFBJWEVMRk9STUFUREVTQ1JJUFRPUikpOworICAgIHBmZC5u
U2l6ZSA9IHNpemVvZihQSVhFTEZPUk1BVERFU0NSSVBUT1IpOworICAgIHBmZC5uVmVyc2lvbiA9
IDE7CisjaWZkZWYgUkVOREVSX1RPX0RFQlVHR0lOR19XSU5ET1cKKyAgICBwZmQuZHdGbGFncyA9
IFBGRF9EUkFXX1RPX1dJTkRPVyB8IFBGRF9TVVBQT1JUX09QRU5HTCB8IFBGRF9ET1VCTEVCVUZG
RVI7CisjZWxzZQorICAgIHBmZC5kd0ZsYWdzID0gUEZEX0RSQVdfVE9fV0lORE9XIHwgUEZEX1NV
UFBPUlRfT1BFTkdMOworI2VuZGlmCisgICAgaW50IHBpeGVsZm9ybWF0ID0gQ2hvb3NlUGl4ZWxG
b3JtYXQobV9jYW52YXNEQywgJnBmZCk7CisKKyAgICAvLyBzZXQgdGhlIHBpeGVsIGZvcm1hdCBm
b3IgdGhlIGRjCisgICAgaWYgKCFTZXRQaXhlbEZvcm1hdChtX2NhbnZhc0RDLCBwaXhlbGZvcm1h
dCwgJnBmZCkpIHsKKyAgICAgICAgcHJpbnRmKCJXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJ
bXBsOiBTZXRQaXhlbEZvcm1hdCBmYWlsZWRcbiIpOworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgLy8gY3JlYXRlIHJlbmRlcmluZyBjb250ZXh0CisgICAgbV9jb250ZXh0T2Jq
ID0gd2dsQ3JlYXRlQ29udGV4dChtX2NhbnZhc0RDKTsKKyAgICBpZiAoIW1fY29udGV4dE9iaikg
eworICAgICAgICBwcmludGYoIldlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6IHdnbENy
ZWF0ZUNvbnRleHQgZmFpbGVkXG4iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwor
ICAgIGlmICghd2dsTWFrZUN1cnJlbnQobV9jYW52YXNEQywgbV9jb250ZXh0T2JqKSkgeworICAg
ICAgICBwcmludGYoIldlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6IHdnbE1ha2VDdXJy
ZW50IGZhaWxlZFxuIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyNpZmRlZiBS
RU5ERVJfVE9fREVCVUdHSU5HX1dJTkRPVworICAgIHR5cGVkZWYgQk9PTCAoV0lOQVBJICogUEZO
V0dMU1dBUElOVEVSVkFMRVhUUFJPQykgKGludCBpbnRlcnZhbCk7CisgICAgUEZOV0dMU1dBUElO
VEVSVkFMRVhUUFJPQyBzZXRTd2FwSW50ZXJ2YWwgPSAwOworICAgIHNldFN3YXBJbnRlcnZhbCA9
IChQRk5XR0xTV0FQSU5URVJWQUxFWFRQUk9DKSB3Z2xHZXRQcm9jQWRkcmVzcygid2dsU3dhcElu
dGVydmFsRVhUIik7CisgICAgaWYgKHNldFN3YXBJbnRlcnZhbCkKKyAgICAgICAgc2V0U3dhcElu
dGVydmFsKDEpOworI2VuZGlmIC8vIFJFTkRFUl9UT19ERUJVR0dJTkdfV0lORE9XCisKKyNlbGlm
IFBMQVRGT1JNKENHKQorICAgIC8vIENyZWF0ZSBhIDF4MSBwYnVmZmVyIGFuZCBhc3NvY2lhdGVk
IGNvbnRleHQgdG8gYm9vdHN0cmFwIHRoaW5ncworICAgIENHTFBpeGVsRm9ybWF0QXR0cmlidXRl
IGF0dHJpYnNbXSA9IHsKKyAgICAgICAgKENHTFBpeGVsRm9ybWF0QXR0cmlidXRlKSBrQ0dMUEZB
UEJ1ZmZlciwKKyAgICAgICAgKENHTFBpeGVsRm9ybWF0QXR0cmlidXRlKSAwCisgICAgfTsKKyAg
ICBDR0xQaXhlbEZvcm1hdE9iaiBwaXhlbEZvcm1hdDsKKyAgICBHTGludCBudW1QaXhlbEZvcm1h
dHM7CisgICAgaWYgKENHTENob29zZVBpeGVsRm9ybWF0KGF0dHJpYnMsICZwaXhlbEZvcm1hdCwg
Jm51bVBpeGVsRm9ybWF0cykgIT0ga0NHTE5vRXJyb3IpIHsKKyAgICAgICAgcHJpbnRmKCJXZWJH
cmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOiBlcnJvciBjaG9vc2luZyBwaXhlbCBmb3JtYXRc
biIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmICghcGl4ZWxGb3JtYXQp
IHsKKyAgICAgICAgcHJpbnRmKCJXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOiBubyBw
aXhlbCBmb3JtYXQgc2VsZWN0ZWRcbiIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
ICAgIENHTENvbnRleHRPYmogY29udGV4dDsKKyAgICBDR0xFcnJvciByZXMgPSBDR0xDcmVhdGVD
b250ZXh0KHBpeGVsRm9ybWF0LCAwLCAmY29udGV4dCk7CisgICAgQ0dMRGVzdHJveVBpeGVsRm9y
bWF0KHBpeGVsRm9ybWF0KTsKKyAgICBpZiAocmVzICE9IGtDR0xOb0Vycm9yKSB7CisgICAgICAg
IHByaW50ZigiV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDogZXJyb3IgY3JlYXRpbmcg
Y29udGV4dFxuIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgQ0dMUEJ1ZmZl
ck9iaiBwYnVmZmVyOworICAgIGlmIChDR0xDcmVhdGVQQnVmZmVyKDEsIDEsIEdMX1RFWFRVUkVf
MkQsIEdMX1JHQkEsIDAsICZwYnVmZmVyKSAhPSBrQ0dMTm9FcnJvcikgeworICAgICAgICBDR0xE
ZXN0cm95Q29udGV4dChjb250ZXh0KTsKKyAgICAgICAgcHJpbnRmKCJXZWJHcmFwaGljc0NvbnRl
eHQzRERlZmF1bHRJbXBsOiBlcnJvciBjcmVhdGluZyBwYnVmZmVyXG4iKTsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKyAgICBpZiAoQ0dMU2V0UEJ1ZmZlcihjb250ZXh0LCBwYnVmZmVy
LCAwLCAwLCAwKSAhPSBrQ0dMTm9FcnJvcikgeworICAgICAgICBDR0xEZXN0cm95Q29udGV4dChj
b250ZXh0KTsKKyAgICAgICAgQ0dMRGVzdHJveVBCdWZmZXIocGJ1ZmZlcik7CisgICAgICAgIHBy
aW50ZigiV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDogZXJyb3IgYXR0YWNoaW5nIHBi
dWZmZXIgdG8gY29udGV4dFxuIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAg
aWYgKENHTFNldEN1cnJlbnRDb250ZXh0KGNvbnRleHQpICE9IGtDR0xOb0Vycm9yKSB7CisgICAg
ICAgIENHTERlc3Ryb3lDb250ZXh0KGNvbnRleHQpOworICAgICAgICBDR0xEZXN0cm95UEJ1ZmZl
cihwYnVmZmVyKTsKKyAgICAgICAgcHJpbnRmKCJXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJ
bXBsOiBlcnJvciBtYWtpbmcgY29udGV4dCBjdXJyZW50XG4iKTsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKyAgICBtX3BidWZmZXIgPSBwYnVmZmVyOworICAgIG1fY29udGV4dE9iaiA9
IGNvbnRleHQ7CisjZWxpZiBPUyhMSU5VWCkKKyAgICBpZiAoIXNfZ2wpIHsKKyAgICAgICAgc19n
bCA9IEdMQ29ubmVjdGlvbjo6Y3JlYXRlKCk7CisgICAgICAgIGlmICghc19nbCkKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpbnQgY29uZmlnQXR0cnNbXSA9IHsKKyAg
ICAgICAgR0xYX0RSQVdBQkxFX1RZUEUsCisgICAgICAgIEdMWF9QQlVGRkVSX0JJVCwKKyAgICAg
ICAgR0xYX1JFTkRFUl9UWVBFLAorICAgICAgICBHTFhfUkdCQV9CSVQsCisgICAgICAgIEdMWF9E
T1VCTEVCVUZGRVIsCisgICAgICAgIDAsCisgICAgICAgIDAKKyAgICB9OworICAgIGludCBuZWxl
bWVudHMgPSAwOworICAgIEdMWEZCQ29uZmlnKiBjb25maWcgPSBzX2dsLT5jaG9vc2VGQkNvbmZp
ZygwLCBjb25maWdBdHRycywgJm5lbGVtZW50cyk7CisgICAgaWYgKCFjb25maWcpIHsKKyAgICAg
ICAgcHJpbnRmKCJXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOiBnbFhDaG9vc2VGQkNv
bmZpZyBmYWlsZWRcbiIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmICgh
bmVsZW1lbnRzKSB7CisgICAgICAgIHByaW50ZigiV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0
SW1wbDogZ2xYQ2hvb3NlRkJDb25maWcgcmV0dXJuZWQgMCBlbGVtZW50c1xuIik7CisgICAgICAg
IFhGcmVlKGNvbmZpZyk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgR0xYQ29u
dGV4dCBjb250ZXh0ID0gc19nbC0+Y3JlYXRlTmV3Q29udGV4dChjb25maWdbMF0sIEdMWF9SR0JB
X1RZUEUsIDAsIFRydWUpOworICAgIGlmICghY29udGV4dCkgeworICAgICAgICBwcmludGYoIldl
YkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6IGdsWENyZWF0ZU5ld0NvbnRleHQgZmFpbGVk
XG4iKTsKKyAgICAgICAgWEZyZWUoY29uZmlnKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKyAgICBpbnQgcGJ1ZmZlckF0dHJzW10gPSB7CisgICAgICAgIEdMWF9QQlVGRkVSX1dJRFRI
LAorICAgICAgICAxLAorICAgICAgICBHTFhfUEJVRkZFUl9IRUlHSFQsCisgICAgICAgIDEsCisg
ICAgICAgIDAKKyAgICB9OworICAgIEdMWFBidWZmZXIgcGJ1ZmZlciA9IHNfZ2wtPmNyZWF0ZVBi
dWZmZXIoY29uZmlnWzBdLCBwYnVmZmVyQXR0cnMpOworICAgIFhGcmVlKGNvbmZpZyk7CisgICAg
aWYgKCFwYnVmZmVyKSB7CisgICAgICAgIHByaW50ZigiV2ViR3JhcGhpY3NDb250ZXh0M0REZWZh
dWx0SW1wbDogZ2x4Q3JlYXRlUGJ1ZmZlciBmYWlsZWRcbiIpOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorICAgIGlmICghc19nbC0+bWFrZUN1cnJlbnQocGJ1ZmZlciwgY29udGV4dCkp
IHsKKyAgICAgICAgcHJpbnRmKCJXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOiBnbFhN
YWtlQ3VycmVudCBmYWlsZWRcbiIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAg
IG1fY29udGV4dE9iaiA9IGNvbnRleHQ7CisgICAgbV9wYnVmZmVyID0gcGJ1ZmZlcjsKKyNlbHNl
CisjZXJyb3IgTXVzdCBwb3J0IHRvIHlvdXIgcGxhdGZvcm0KKyNlbmRpZgorCisgICAgaWYgKCFz
X2luaXRpYWxpemVkR0xFVykgeworICAgICAgICAvLyBJbml0aWFsaXplIEdMRVcgYW5kIGNoZWNr
IGZvciBHTCAyLjAgc3VwcG9ydCBieSB0aGUgZHJpdmVycy4KKyAgICAgICAgR0xlbnVtIGdsZXdJ
bml0UmVzdWx0ID0gZ2xld0luaXQoKTsKKyAgICAgICAgaWYgKGdsZXdJbml0UmVzdWx0ICE9IEdM
RVdfT0spIHsKKyAgICAgICAgICAgIHByaW50ZigiV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0
SW1wbDogR0xFVyBpbml0aWFsaXphdGlvbiBmYWlsZWRcbiIpOworICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB9CisgICAgICAgIGlmICghZ2xld0lzU3VwcG9ydGVkKCJHTF9WRVJT
SU9OXzJfMCIpKSB7CisgICAgICAgICAgICBwcmludGYoIldlYkdyYXBoaWNzQ29udGV4dDNERGVm
YXVsdEltcGw6IE9wZW5HTCAyLjAgbm90IHN1cHBvcnRlZFxuIik7CisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgc19pbml0aWFsaXplZEdMRVcgPSB0cnVlOwor
ICAgIH0KKworICAgIG1faW5pdGlhbGl6ZWQgPSB0cnVlOworICAgIHJldHVybiB0cnVlOworfQor
Citib29sIFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6Om1ha2VDb250ZXh0Q3VycmVu
dCgpCit7CisjaWYgT1MoV0lORE9XUykKKyAgICBpZiAod2dsR2V0Q3VycmVudENvbnRleHQoKSAh
PSBtX2NvbnRleHRPYmopCisgICAgICAgIGlmICh3Z2xNYWtlQ3VycmVudChtX2NhbnZhc0RDLCBt
X2NvbnRleHRPYmopKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisjZWxpZiBQTEFURk9STShD
RykKKyAgICBpZiAoQ0dMR2V0Q3VycmVudENvbnRleHQoKSAhPSBtX2NvbnRleHRPYmopCisgICAg
ICAgIGlmIChDR0xTZXRDdXJyZW50Q29udGV4dChtX2NvbnRleHRPYmopID09IGtDR0xOb0Vycm9y
KQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisjZWxpZiBPUyhMSU5VWCkKKyAgICBpZiAoc19n
bC0+Z2V0Q3VycmVudENvbnRleHQoKSAhPSBtX2NvbnRleHRPYmopCisgICAgICAgIGlmIChzX2ds
LT5tYWtlQ3VycmVudChtX3BidWZmZXIsIG1fY29udGV4dE9iaikpCisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyNlbHNlCisjZXJyb3IgTXVzdCBwb3J0IHRvIHlvdXIgcGxhdGZvcm0KKyNlbmRp
ZgorICAgIHJldHVybiBmYWxzZTsKK30KKworaW50IFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVs
dEltcGw6OndpZHRoKCkKK3sKKyAgICByZXR1cm4gbV9jYWNoZWRXaWR0aDsKK30KKworaW50IFdl
YkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OmhlaWdodCgpCit7CisgICAgcmV0dXJuIG1f
Y2FjaGVkSGVpZ2h0OworfQorCitpbnQgV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6
c2l6ZUluQnl0ZXMoaW50IHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBH
TF9CWVRFOgorICAgICAgICByZXR1cm4gc2l6ZW9mKEdMYnl0ZSk7CisgICAgY2FzZSBHTF9VTlNJ
R05FRF9CWVRFOgorICAgICAgICByZXR1cm4gc2l6ZW9mKEdMdWJ5dGUpOworICAgIGNhc2UgR0xf
U0hPUlQ6CisgICAgICAgIHJldHVybiBzaXplb2YoR0xzaG9ydCk7CisgICAgY2FzZSBHTF9VTlNJ
R05FRF9TSE9SVDoKKyAgICAgICAgcmV0dXJuIHNpemVvZihHTHVzaG9ydCk7CisgICAgY2FzZSBH
TF9JTlQ6CisgICAgICAgIHJldHVybiBzaXplb2YoR0xpbnQpOworICAgIGNhc2UgR0xfVU5TSUdO
RURfSU5UOgorICAgICAgICByZXR1cm4gc2l6ZW9mKEdMdWludCk7CisgICAgY2FzZSBHTF9GTE9B
VDoKKyAgICAgICAgcmV0dXJuIHNpemVvZihHTGZsb2F0KTsKKyAgICB9CisgICAgcmV0dXJuIDA7
Cit9CisKK3N0YXRpYyBpbnQgY3JlYXRlVGV4dHVyZU9iamVjdChHTGVudW0gdGFyZ2V0KQorewor
ICAgIEdMdWludCB0ZXh0dXJlID0gMDsKKyAgICBnbEdlblRleHR1cmVzKDEsICZ0ZXh0dXJlKTsK
KyAgICBnbEJpbmRUZXh0dXJlKHRhcmdldCwgdGV4dHVyZSk7CisgICAgZ2xUZXhQYXJhbWV0ZXJm
KHRhcmdldCwgR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBHTF9ORUFSRVNUKTsKKyAgICBnbFRleFBh
cmFtZXRlcmYodGFyZ2V0LCBHTF9URVhUVVJFX01BR19GSUxURVIsIEdMX05FQVJFU1QpOworICAg
IHJldHVybiB0ZXh0dXJlOworfQorCit2b2lkIFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdElt
cGw6OnJlc2hhcGUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQoreworI2lmZGVmIFJFTkRFUl9UT19E
RUJVR0dJTkdfV0lORE9XCisgICAgU2V0V2luZG93UG9zKG1fY2FudmFzV2luZG93LCBIV05EX1RP
UCwgMCwgMCwgd2lkdGgsIGhlaWdodCwKKyAgICAgICAgICAgICAgICAgU1dQX05PTU9WRSk7Cisg
ICAgU2hvd1dpbmRvdyhtX2NhbnZhc1dpbmRvdywgU1dfU0hPVyk7CisjZW5kaWYKKworICAgIG1f
Y2FjaGVkV2lkdGggPSB3aWR0aDsKKyAgICBtX2NhY2hlZEhlaWdodCA9IGhlaWdodDsKKyAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKKworI2lmbmRlZiBSRU5ERVJfVE9fREVCVUdHSU5HX1dJTkRP
VworI2lmZGVmIFVTRV9URVhUVVJFX1JFQ1RBTkdMRV9GT1JfRlJBTUVCVUZGRVIKKyAgICAvLyBH
TF9URVhUVVJFX1JFQ1RBTkdMRV9BUkIgaXMgdGhlIGJlc3Qgc3VwcG9ydGVkIHJlbmRlciB0YXJn
ZXQgb24gTWFjIE9TIFgKKyAgICBHTGVudW0gdGFyZ2V0ID0gR0xfVEVYVFVSRV9SRUNUQU5HTEVf
QVJCOworI2Vsc2UKKyAgICBHTGVudW0gdGFyZ2V0ID0gR0xfVEVYVFVSRV8yRDsKKyNlbmRpZgor
ICAgIGlmICghbV90ZXh0dXJlKSB7CisgICAgICAgIC8vIEdlbmVyYXRlIHRoZSB0ZXh0dXJlIG9i
amVjdAorICAgICAgICBtX3RleHR1cmUgPSBjcmVhdGVUZXh0dXJlT2JqZWN0KHRhcmdldCk7Cisg
ICAgICAgIC8vIEdlbmVyYXRlIHRoZSBmcmFtZWJ1ZmZlciBvYmplY3QKKyAgICAgICAgZ2xHZW5G
cmFtZWJ1ZmZlcnNFWFQoMSwgJm1fZmJvKTsKKyAgICAgICAgLy8gR2VuZXJhdGUgdGhlIGRlcHRo
IGJ1ZmZlcgorICAgICAgICBnbEdlblJlbmRlcmJ1ZmZlcnNFWFQoMSwgJm1fZGVwdGhCdWZmZXIp
OworICAgIH0KKworICAgIC8vIFJlYWxsb2NhdGUgdGhlIGNvbG9yIGFuZCBkZXB0aCBidWZmZXJz
CisgICAgZ2xCaW5kVGV4dHVyZSh0YXJnZXQsIG1fdGV4dHVyZSk7CisgICAgZ2xUZXhJbWFnZTJE
KHRhcmdldCwgMCwgR0xfUkdCQTgsIHdpZHRoLCBoZWlnaHQsIDAsIEdMX1JHQkEsIEdMX1VOU0lH
TkVEX0JZVEUsIDApOworICAgIGdsQmluZFRleHR1cmUodGFyZ2V0LCAwKTsKKworICAgIGdsQmlu
ZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9mYm8pOworICAgIG1fYm91bmRG
Qk8gPSBtX2ZibzsKKyAgICBnbEJpbmRSZW5kZXJidWZmZXJFWFQoR0xfUkVOREVSQlVGRkVSX0VY
VCwgbV9kZXB0aEJ1ZmZlcik7CisgICAgZ2xSZW5kZXJidWZmZXJTdG9yYWdlRVhUKEdMX1JFTkRF
UkJVRkZFUl9FWFQsIEdMX0RFUFRIX0NPTVBPTkVOVCwgd2lkdGgsIGhlaWdodCk7CisgICAgZ2xC
aW5kUmVuZGVyYnVmZmVyRVhUKEdMX1JFTkRFUkJVRkZFUl9FWFQsIDApOworCisgICAgZ2xGcmFt
ZWJ1ZmZlclRleHR1cmUyREVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIEdMX0NPTE9SX0FUVEFDSE1F
TlQwX0VYVCwgdGFyZ2V0LCBtX3RleHR1cmUsIDApOworICAgIGdsRnJhbWVidWZmZXJSZW5kZXJi
dWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBHTF9ERVBUSF9BVFRBQ0hNRU5UX0VYVCwgR0xf
UkVOREVSQlVGRkVSX0VYVCwgbV9kZXB0aEJ1ZmZlcik7CisgICAgR0xlbnVtIHN0YXR1cyA9IGds
Q2hlY2tGcmFtZWJ1ZmZlclN0YXR1c0VYVChHTF9GUkFNRUJVRkZFUl9FWFQpOworICAgIGlmIChz
dGF0dXMgIT0gR0xfRlJBTUVCVUZGRVJfQ09NUExFVEVfRVhUKSB7CisgICAgICAgIHByaW50Zigi
V2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDogZnJhbWVidWZmZXIgd2FzIGluY29tcGxl
dGVcbiIpOworCisgICAgICAgIC8vIEZJWE1FOiBjbGVhbnVwLgorICAgICAgICBub3RJbXBsZW1l
bnRlZCgpOworICAgIH0KKyNlbmRpZiAvLyBSRU5ERVJfVE9fREVCVUdHSU5HX1dJTkRPVworCisj
aWZkZWYgRkxJUF9GUkFNRUJVRkZFUl9WRVJUSUNBTExZCisgICAgaWYgKG1fc2NhbmxpbmUpIHsK
KyAgICAgICAgZGVsZXRlW10gbV9zY2FubGluZTsKKyAgICAgICAgbV9zY2FubGluZSA9IDA7Cisg
ICAgfQorICAgIG1fc2NhbmxpbmUgPSBuZXcgdW5zaWduZWQgY2hhclt3aWR0aCAqIDRdOworI2Vu
ZGlmIC8vIEZMSVBfRlJBTUVCVUZGRVJfVkVSVElDQUxMWQorCisgICAgZ2xDbGVhcihHTF9DT0xP
Ul9CVUZGRVJfQklUKTsKKworfQorCisjaWZkZWYgRkxJUF9GUkFNRUJVRkZFUl9WRVJUSUNBTExZ
Cit2b2lkIFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OmZsaXBWZXJ0aWNhbGx5KHVu
c2lnbmVkIGNoYXIqIGZyYW1lYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgd2lkdGgsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBoZWln
aHQpCit7CisgICAgdW5zaWduZWQgY2hhciogc2NhbmxpbmUgPSBtX3NjYW5saW5lOworICAgIGlm
ICghc2NhbmxpbmUpCisgICAgICAgIHJldHVybjsKKyAgICB1bnNpZ25lZCBpbnQgcm93Qnl0ZXMg
PSB3aWR0aCAqIDQ7CisgICAgdW5zaWduZWQgaW50IGNvdW50ID0gaGVpZ2h0IC8gMjsKKyAgICBm
b3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKyAgICAgICAgdW5zaWdu
ZWQgY2hhciogcm93QSA9IGZyYW1lYnVmZmVyICsgaSAqIHJvd0J5dGVzOworICAgICAgICB1bnNp
Z25lZCBjaGFyKiByb3dCID0gZnJhbWVidWZmZXIgKyAoaGVpZ2h0IC0gaSAtIDEpICogcm93Qnl0
ZXM7CisgICAgICAgIC8vIEZJWE1FOiB0aGlzIGlzIHdoZXJlIHRoZSBtdWx0aXBsaWNhdGlvbiBv
ZiB0aGUgYWxwaGEKKyAgICAgICAgLy8gY2hhbm5lbCBpbnRvIHRoZSBjb2xvciBidWZmZXIgd2ls
bCBuZWVkIHRvIG9jY3VyIGlmIHRoZQorICAgICAgICAvLyB1c2VyIHNwZWNpZmllcyB0aGUgInBy
ZW11bHRpcGx5QWxwaGEiIGZsYWcgaW4gdGhlIGNvbnRleHQKKyAgICAgICAgLy8gY3JlYXRpb24g
YXR0cmlidXRlcy4KKyAgICAgICAgbWVtY3B5KHNjYW5saW5lLCByb3dCLCByb3dCeXRlcyk7Cisg
ICAgICAgIG1lbWNweShyb3dCLCByb3dBLCByb3dCeXRlcyk7CisgICAgICAgIG1lbWNweShyb3dB
LCBzY2FubGluZSwgcm93Qnl0ZXMpOworICAgIH0KK30KKyNlbmRpZgorCitib29sIFdlYkdyYXBo
aWNzQ29udGV4dDNERGVmYXVsdEltcGw6OnJlYWRCYWNrRnJhbWVidWZmZXIodW5zaWduZWQgY2hh
ciogcGl4ZWxzLCBzaXplX3QgYnVmZmVyX3NpemUpCit7CisgICAgaWYgKGJ1ZmZlcl9zaXplICE9
IHN0YXRpY19jYXN0PHNpemVfdD4oNCAqIHdpZHRoKCkgKiBoZWlnaHQoKSkpIHsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworCisjaWZk
ZWYgUkVOREVSX1RPX0RFQlVHR0lOR19XSU5ET1cKKyAgICBTd2FwQnVmZmVycyhtX2NhbnZhc0RD
KTsKKyNlbHNlCisgICAgLy8gRWFybGllciB2ZXJzaW9ucyBvZiB0aGlzIGNvZGUgdXNlZCB0aGUg
R1BVIHRvIGZsaXAgdGhlCisgICAgLy8gZnJhbWVidWZmZXIgdmVydGljYWxseSBiZWZvcmUgcmVh
ZGluZyBpdCBiYWNrIGZvciBjb21wb3NpdGluZworICAgIC8vIHZpYSBzb2Z0d2FyZS4gVGhpcyBj
b2RlIHdhcyBxdWl0ZSBjb21wbGljYXRlZCwgdXNlZCBhIGxvdCBvZgorICAgIC8vIEdQVSBtZW1v
cnksIGFuZCBkaWRuJ3QgcHJvdmlkZSBhbiBvYnZpb3VzIHNwZWVkdXAuIFNpbmNlIHRoaXMKKyAg
ICAvLyB2ZXJ0aWNhbCBmbGlwIGlzIG9ubHkgYSB0ZW1wb3Jhcnkgc29sdXRpb24gYW55d2F5IHVu
dGlsIENocm9tZQorICAgIC8vIGlzIGZ1bGx5IEdQVSBjb21wb3NpdGVkLCBpdCB3YXNuJ3Qgd29y
dGggdGhlIGNvbXBsZXhpdHkuCisKKyAgICBib29sIG11c3RSZXN0b3JlRkJPID0gKG1fYm91bmRG
Qk8gIT0gbV9mYm8pOworICAgIGlmIChtdXN0UmVzdG9yZUZCTykKKyAgICAgICAgZ2xCaW5kRnJh
bWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX2Zibyk7CisjaWYgUExBVEZPUk0oU0tJ
QSkKKyAgICBnbFJlYWRQaXhlbHMoMCwgMCwgbV9jYWNoZWRXaWR0aCwgbV9jYWNoZWRIZWlnaHQs
IEdMX0JHUkEsIEdMX1VOU0lHTkVEX0JZVEUsIHBpeGVscyk7CisjZWxpZiBQTEFURk9STShDRykK
KyAgICBnbFJlYWRQaXhlbHMoMCwgMCwgbV9jYWNoZWRXaWR0aCwgbV9jYWNoZWRIZWlnaHQsIEdM
X0JHUkEsIEdMX1VOU0lHTkVEX0lOVF84XzhfOF84X1JFViwgcGl4ZWxzKTsKKyNlbHNlCisjZXJy
b3IgTXVzdCBwb3J0IHRvIHlvdXIgcGxhdGZvcm0KKyNlbmRpZgorCisgICAgaWYgKG11c3RSZXN0
b3JlRkJPKQorICAgICAgICBnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQs
IG1fYm91bmRGQk8pOworCisjaWZkZWYgRkxJUF9GUkFNRUJVRkZFUl9WRVJUSUNBTExZCisgICAg
aWYgKHBpeGVscykKKyAgICAgICAgZmxpcFZlcnRpY2FsbHkocGl4ZWxzLCBtX2NhY2hlZFdpZHRo
LCBtX2NhY2hlZEhlaWdodCk7CisjZW5kaWYKKworI2VuZGlmIC8vIFJFTkRFUl9UT19ERUJVR0dJ
TkdfV0lORE9XCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgV2ViR3JhcGhpY3NDb250ZXh0
M0REZWZhdWx0SW1wbDo6c3ludGhlc2l6ZUdMRXJyb3IodW5zaWduZWQgbG9uZyBlcnJvcikKK3sK
KyAgICBtX3N5bnRoZXRpY0Vycm9ycy5hZGQoZXJyb3IpOworfQorCisvLyBIZWxwZXIgbWFjcm9z
IHRvIHJlZHVjZSB0aGUgYW1vdW50IG9mIGNvZGUuCisKKyNkZWZpbmUgREVMRUdBVEVfVE9fR0wo
bmFtZSwgZ2xuYW1lKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
Cit2b2lkIFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6Om5hbWUoKSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAoreyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCisgICAgZ2wjI2dsbmFtZSgpOyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfQorCisjZGVmaW5l
IERFTEVHQVRFX1RPX0dMXzEobmFtZSwgZ2xuYW1lLCB0MSkgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAordm9pZCBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpu
YW1lKHQxIGExKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK3sgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGdsIyNnbG5hbWUoYTEpOyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKK30KKworI2RlZmluZSBERUxFR0FURV9UT19HTF8xUihuYW1lLCBnbG5hbWUsIHQxLCBydCkg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK3J0IFdlYkdyYXBoaWNzQ29udGV4dDNE
RGVmYXVsdEltcGw6Om5hbWUodDEgYTEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
Cit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBy
ZXR1cm4gZ2wjI2dsbmFtZShhMSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCit9CisKKyNkZWZpbmUgREVMRUdBVEVfVE9fR0xfMihuYW1lLCBn
bG5hbWUsIHQxLCB0MikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit2b2lkIFdl
YkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6Om5hbWUodDEgYTEsIHQyIGEyKSAgICAgICAg
ICAgICAgICAgICAgICAgXAoreyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCisgICAgZ2wjI2dsbmFtZShhMSwgYTIpOyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfQorCisjZGVmaW5lIERFTEVHQVRF
X1RPX0dMXzJSKG5hbWUsIGdsbmFtZSwgdDEsIHQyLCBydCkgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorcnQgV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6bmFtZSh0MSBhMSwg
dDIgYTIpICAgICAgICAgICAgICAgICAgICAgICAgIFwKK3sgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHJldHVybiBnbCMjZ2xuYW1lKGExLCBhMik7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30KKwor
I2RlZmluZSBERUxFR0FURV9UT19HTF8zKG5hbWUsIGdsbmFtZSwgdDEsIHQyLCB0MykgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKK3ZvaWQgV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0
SW1wbDo6bmFtZSh0MSBhMSwgdDIgYTIsIHQzIGEzKSAgICAgICAgICAgICAgICBcCit7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBnbCMjZ2xuYW1l
KGExLCBhMiwgYTMpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCit9CisKKyNkZWZpbmUgREVMRUdBVEVfVE9fR0xfNChuYW1lLCBnbG5hbWUsIHQx
LCB0MiwgdDMsIHQ0KSAgICAgICAgICAgICAgICAgICAgICAgICBcCit2b2lkIFdlYkdyYXBoaWNz
Q29udGV4dDNERGVmYXVsdEltcGw6Om5hbWUodDEgYTEsIHQyIGEyLCB0MyBhMywgdDQgYTQpICAg
ICAgICAgXAoreyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
CisgICAgZ2wjI2dsbmFtZShhMSwgYTIsIGEzLCBhNCk7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAorfQorCisjZGVmaW5lIERFTEVHQVRFX1RPX0dMXzUo
bmFtZSwgZ2xuYW1lLCB0MSwgdDIsIHQzLCB0NCwgdDUpICAgICAgICAgICAgICAgICAgICAgXAor
dm9pZCBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpuYW1lKHQxIGExLCB0MiBhMiwg
dDMgYTMsIHQ0IGE0LCB0NSBhNSkgIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgIGdsIyNnbG5hbWUoYTEsIGEyLCBhMywgYTQsIGE1KTsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30KKworI2RlZmluZSBE
RUxFR0FURV9UT19HTF82KG5hbWUsIGdsbmFtZSwgdDEsIHQyLCB0MywgdDQsIHQ1LCB0NikgICAg
ICAgICAgICAgICAgIFwKK3ZvaWQgV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6bmFt
ZSh0MSBhMSwgdDIgYTIsIHQzIGEzLCB0NCBhNCwgdDUgYTUsIHQ2IGE2KSBcCit7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBnbCMjZ2xuYW1lKGEx
LCBhMiwgYTMsIGE0LCBhNSwgYTYpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCit9CisKKyNkZWZpbmUgREVMRUdBVEVfVE9fR0xfNyhuYW1lLCBnbG5hbWUsIHQxLCB0
MiwgdDMsIHQ0LCB0NSwgdDYsIHQ3KSAgICAgICAgICAgICBcCit2b2lkIFdlYkdyYXBoaWNzQ29u
dGV4dDNERGVmYXVsdEltcGw6Om5hbWUodDEgYTEsIHQyIGEyLCB0MyBhMywgdDQgYTQsIHQ1IGE1
LCB0NiBhNiwgdDcgYTcpIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorICAgIGdsIyNnbG5hbWUoYTEsIGEyLCBhMywgYTQsIGE1LCBhNiwgYTcpOyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30KKworI2RlZmluZSBERUxFR0FU
RV9UT19HTF84KG5hbWUsIGdsbmFtZSwgdDEsIHQyLCB0MywgdDQsIHQ1LCB0NiwgdDcsIHQ4KSAg
ICAgICAgIFwKK3ZvaWQgV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6bmFtZSh0MSBh
MSwgdDIgYTIsIHQzIGEzLCB0NCBhNCwgdDUgYTUsIHQ2IGE2LCB0NyBhNywgdDggYTgpIFwKK3sg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGdsIyNn
bG5hbWUoYTEsIGEyLCBhMywgYTQsIGE1LCBhNiwgYTcsIGE4KTsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKK30KKworI2RlZmluZSBERUxFR0FURV9UT19HTF85KG5hbWUsIGdsbmFt
ZSwgdDEsIHQyLCB0MywgdDQsIHQ1LCB0NiwgdDcsIHQ4LCB0OSkgICAgIFwKK3ZvaWQgV2ViR3Jh
cGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6bmFtZSh0MSBhMSwgdDIgYTIsIHQzIGEzLCB0NCBh
NCwgdDUgYTUsIHQ2IGE2LCB0NyBhNywgdDggYTgsIHQ5IGE5KSBcCit7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBnbCMjZ2xuYW1lKGExLCBhMiwg
YTMsIGE0LCBhNSwgYTYsIGE3LCBhOCwgYTkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
Cit9CisKK3ZvaWQgV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6YWN0aXZlVGV4dHVy
ZSh1bnNpZ25lZCBsb25nIHRleHR1cmUpCit7CisgICAgLy8gRklYTUU6IHF1ZXJ5IG51bWJlciBv
ZiB0ZXh0dXJlcyBhdmFpbGFibGUuCisgICAgaWYgKHRleHR1cmUgPCBHTF9URVhUVVJFMCB8fCB0
ZXh0dXJlID4gR0xfVEVYVFVSRTArMzIpCisgICAgICAgIC8vIEZJWE1FOiByYWlzZSBleGNlcHRp
b24uCisgICAgICAgIHJldHVybjsKKworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGds
QWN0aXZlVGV4dHVyZSh0ZXh0dXJlKTsKK30KKworREVMRUdBVEVfVE9fR0xfMihhdHRhY2hTaGFk
ZXIsIEF0dGFjaFNoYWRlciwgV2ViR0xJZCwgV2ViR0xJZCkKKworREVMRUdBVEVfVE9fR0xfMyhi
aW5kQXR0cmliTG9jYXRpb24sIEJpbmRBdHRyaWJMb2NhdGlvbiwgV2ViR0xJZCwgdW5zaWduZWQg
bG9uZywgY29uc3QgY2hhciopCisKK3ZvaWQgV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1w
bDo6YmluZEJ1ZmZlcih1bnNpZ25lZCBsb25nIHRhcmdldCwgV2ViR0xJZCBidWZmZXIpCit7Cisg
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKHRhcmdldCA9PSBHTF9BUlJBWV9CVUZG
RVIpCisgICAgICAgIG1fYm91bmRBcnJheUJ1ZmZlciA9IGJ1ZmZlcjsKKyAgICBnbEJpbmRCdWZm
ZXIodGFyZ2V0LCBidWZmZXIpOworfQorCit2b2lkIFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVs
dEltcGw6OmJpbmRGcmFtZWJ1ZmZlcih1bnNpZ25lZCBsb25nIHRhcmdldCwgV2ViR0xJZCBmcmFt
ZWJ1ZmZlcikKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIWZyYW1lYnVm
ZmVyKQorICAgICAgICBmcmFtZWJ1ZmZlciA9IG1fZmJvOworICAgIGdsQmluZEZyYW1lYnVmZmVy
RVhUKHRhcmdldCwgZnJhbWVidWZmZXIpOworICAgIG1fYm91bmRGQk8gPSBmcmFtZWJ1ZmZlcjsK
K30KKworREVMRUdBVEVfVE9fR0xfMihiaW5kUmVuZGVyYnVmZmVyLCBCaW5kUmVuZGVyYnVmZmVy
RVhULCB1bnNpZ25lZCBsb25nLCBXZWJHTElkKQorCitERUxFR0FURV9UT19HTF8yKGJpbmRUZXh0
dXJlLCBCaW5kVGV4dHVyZSwgdW5zaWduZWQgbG9uZywgV2ViR0xJZCkKKworREVMRUdBVEVfVE9f
R0xfNChibGVuZENvbG9yLCBCbGVuZENvbG9yLCBkb3VibGUsIGRvdWJsZSwgZG91YmxlLCBkb3Vi
bGUpCisKK0RFTEVHQVRFX1RPX0dMXzEoYmxlbmRFcXVhdGlvbiwgQmxlbmRFcXVhdGlvbiwgdW5z
aWduZWQgbG9uZykKKworREVMRUdBVEVfVE9fR0xfMihibGVuZEVxdWF0aW9uU2VwYXJhdGUsIEJs
ZW5kRXF1YXRpb25TZXBhcmF0ZSwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZykKKworREVM
RUdBVEVfVE9fR0xfMihibGVuZEZ1bmMsIEJsZW5kRnVuYywgdW5zaWduZWQgbG9uZywgdW5zaWdu
ZWQgbG9uZykKKworREVMRUdBVEVfVE9fR0xfNChibGVuZEZ1bmNTZXBhcmF0ZSwgQmxlbmRGdW5j
U2VwYXJhdGUsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVu
c2lnbmVkIGxvbmcpCisKK0RFTEVHQVRFX1RPX0dMXzQoYnVmZmVyRGF0YSwgQnVmZmVyRGF0YSwg
dW5zaWduZWQgbG9uZywgaW50LCBjb25zdCB2b2lkKiwgdW5zaWduZWQgbG9uZykKKworREVMRUdB
VEVfVE9fR0xfNChidWZmZXJTdWJEYXRhLCBCdWZmZXJTdWJEYXRhLCB1bnNpZ25lZCBsb25nLCBs
b25nLCBpbnQsIGNvbnN0IHZvaWQqKQorCitERUxFR0FURV9UT19HTF8xUihjaGVja0ZyYW1lYnVm
ZmVyU3RhdHVzLCBDaGVja0ZyYW1lYnVmZmVyU3RhdHVzRVhULCB1bnNpZ25lZCBsb25nLCB1bnNp
Z25lZCBsb25nKQorCitERUxFR0FURV9UT19HTF8xKGNsZWFyLCBDbGVhciwgdW5zaWduZWQgbG9u
ZykKKworREVMRUdBVEVfVE9fR0xfNChjbGVhckNvbG9yLCBDbGVhckNvbG9yLCBkb3VibGUsIGRv
dWJsZSwgZG91YmxlLCBkb3VibGUpCisKK0RFTEVHQVRFX1RPX0dMXzEoY2xlYXJEZXB0aCwgQ2xl
YXJEZXB0aCwgZG91YmxlKQorCitERUxFR0FURV9UT19HTF8xKGNsZWFyU3RlbmNpbCwgQ2xlYXJT
dGVuY2lsLCBsb25nKQorCitERUxFR0FURV9UT19HTF80KGNvbG9yTWFzaywgQ29sb3JNYXNrLCBi
b29sLCBib29sLCBib29sLCBib29sKQorCitERUxFR0FURV9UT19HTF8xKGNvbXBpbGVTaGFkZXIs
IENvbXBpbGVTaGFkZXIsIFdlYkdMSWQpCisKK0RFTEVHQVRFX1RPX0dMXzgoY29weVRleEltYWdl
MkQsIENvcHlUZXhJbWFnZTJELCB1bnNpZ25lZCBsb25nLCBsb25nLCB1bnNpZ25lZCBsb25nLCBs
b25nLCBsb25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCBsb25nKQorCitERUxFR0FU
RV9UT19HTF84KGNvcHlUZXhTdWJJbWFnZTJELCBDb3B5VGV4U3ViSW1hZ2UyRCwgdW5zaWduZWQg
bG9uZywgbG9uZywgbG9uZywgbG9uZywgbG9uZywgbG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWdu
ZWQgbG9uZykKKworREVMRUdBVEVfVE9fR0xfMShjdWxsRmFjZSwgQ3VsbEZhY2UsIHVuc2lnbmVk
IGxvbmcpCisKK0RFTEVHQVRFX1RPX0dMXzEoZGVwdGhGdW5jLCBEZXB0aEZ1bmMsIHVuc2lnbmVk
IGxvbmcpCisKK0RFTEVHQVRFX1RPX0dMXzEoZGVwdGhNYXNrLCBEZXB0aE1hc2ssIGJvb2wpCisK
K0RFTEVHQVRFX1RPX0dMXzIoZGVwdGhSYW5nZSwgRGVwdGhSYW5nZSwgZG91YmxlLCBkb3VibGUp
CisKK0RFTEVHQVRFX1RPX0dMXzIoZGV0YWNoU2hhZGVyLCBEZXRhY2hTaGFkZXIsIFdlYkdMSWQs
IFdlYkdMSWQpCisKK0RFTEVHQVRFX1RPX0dMXzEoZGlzYWJsZSwgRGlzYWJsZSwgdW5zaWduZWQg
bG9uZykKKwordm9pZCBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpkaXNhYmxlVmVy
dGV4QXR0cmliQXJyYXkodW5zaWduZWQgbG9uZyBpbmRleCkKK3sKKyAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICBpZiAoaW5kZXggPCBOdW1UcmFja2VkUG9pbnRlclN0YXRlcykKKyAgICAg
ICAgbV92ZXJ0ZXhBdHRyaWJQb2ludGVyU3RhdGVbaW5kZXhdLmVuYWJsZWQgPSBmYWxzZTsKKyAg
ICBnbERpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShpbmRleCk7Cit9CisKK0RFTEVHQVRFX1RPX0dM
XzMoZHJhd0FycmF5cywgRHJhd0FycmF5cywgdW5zaWduZWQgbG9uZywgbG9uZywgbG9uZykKKwor
dm9pZCBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpkcmF3RWxlbWVudHModW5zaWdu
ZWQgbG9uZyBtb2RlLCB1bnNpZ25lZCBsb25nIGNvdW50LCB1bnNpZ25lZCBsb25nIHR5cGUsIGxv
bmcgb2Zmc2V0KQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGdsRHJhd0VsZW1l
bnRzKG1vZGUsIGNvdW50LCB0eXBlLAorICAgICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nh
c3Q8dm9pZCo+KHN0YXRpY19jYXN0PGludHB0cl90PihvZmZzZXQpKSk7Cit9CisKK0RFTEVHQVRF
X1RPX0dMXzEoZW5hYmxlLCBFbmFibGUsIHVuc2lnbmVkIGxvbmcpCisKK3ZvaWQgV2ViR3JhcGhp
Y3NDb250ZXh0M0REZWZhdWx0SW1wbDo6ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkodW5zaWduZWQg
bG9uZyBpbmRleCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoaW5kZXgg
PCBOdW1UcmFja2VkUG9pbnRlclN0YXRlcykKKyAgICAgICAgbV92ZXJ0ZXhBdHRyaWJQb2ludGVy
U3RhdGVbaW5kZXhdLmVuYWJsZWQgPSB0cnVlOworICAgIGdsRW5hYmxlVmVydGV4QXR0cmliQXJy
YXkoaW5kZXgpOworfQorCitERUxFR0FURV9UT19HTChmaW5pc2gsIEZpbmlzaCkKKworREVMRUdB
VEVfVE9fR0woZmx1c2gsIEZsdXNoKQorCitERUxFR0FURV9UT19HTF80KGZyYW1lYnVmZmVyUmVu
ZGVyYnVmZmVyLCBGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlckVYVCwgdW5zaWduZWQgbG9uZywgdW5z
aWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgV2ViR0xJZCkKKworREVMRUdBVEVfVE9fR0xfNShm
cmFtZWJ1ZmZlclRleHR1cmUyRCwgRnJhbWVidWZmZXJUZXh0dXJlMkRFWFQsIHVuc2lnbmVkIGxv
bmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIFdlYkdMSWQsIGxvbmcpCisKK0RFTEVH
QVRFX1RPX0dMXzEoZnJvbnRGYWNlLCBGcm9udEZhY2UsIHVuc2lnbmVkIGxvbmcpCisKK3ZvaWQg
V2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6Z2VuZXJhdGVNaXBtYXAodW5zaWduZWQg
bG9uZyB0YXJnZXQpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKGdsR2Vu
ZXJhdGVNaXBtYXBFWFQpCisgICAgICAgIGdsR2VuZXJhdGVNaXBtYXBFWFQodGFyZ2V0KTsKKyAg
ICAvLyBGSVhNRTogcHJvdmlkZSBhbHRlcm5hdGl2ZSBjb2RlIHBhdGg/IFRoaXMgd2lsbCBiZSB1
bnBsZWFzYW50CisgICAgLy8gdG8gaW1wbGVtZW50IGlmIGdsR2VuZXJhdGVNaXBtYXBFWFQgaXMg
bm90IGF2YWlsYWJsZSAtLSBpdCB3aWxsCisgICAgLy8gcmVxdWlyZSBhIHRleHR1cmUgcmVhZGJh
Y2sgYW5kIHJlLXVwbG9hZC4KK30KKworYm9vbCBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJ
bXBsOjpnZXRBY3RpdmVBdHRyaWIoV2ViR0xJZCBwcm9ncmFtLCB1bnNpZ25lZCBsb25nIGluZGV4
LCBBY3RpdmVJbmZvJiBpbmZvKQoreworICAgIGlmICghcHJvZ3JhbSkgeworICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKyAgICBHTGludCBtYXhOYW1lTGVuZ3RoID0gLTE7CisgICAgZ2xHZXRQcm9ncmFtaXYo
cHJvZ3JhbSwgR0xfQUNUSVZFX0FUVFJJQlVURV9NQVhfTEVOR1RILCAmbWF4TmFtZUxlbmd0aCk7
CisgICAgaWYgKG1heE5hbWVMZW5ndGggPCAwKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
R0xjaGFyKiBuYW1lID0gMDsKKyAgICBpZiAoIXRyeUZhc3RNYWxsb2MobWF4TmFtZUxlbmd0aCAq
IHNpemVvZihHTGNoYXIpKS5nZXRWYWx1ZShuYW1lKSkgeworICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAg
ICBHTHNpemVpIGxlbmd0aCA9IDA7CisgICAgR0xpbnQgc2l6ZSA9IC0xOworICAgIEdMZW51bSB0
eXBlID0gMDsKKyAgICBnbEdldEFjdGl2ZUF0dHJpYihwcm9ncmFtLCBpbmRleCwgbWF4TmFtZUxl
bmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAmbGVuZ3RoLCAmc2l6ZSwgJnR5cGUsIG5hbWUp
OworICAgIGlmIChzaXplIDwgMCkgeworICAgICAgICBmYXN0RnJlZShuYW1lKTsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBpbmZvLm5hbWUgPSBXZWJTdHJpbmc6OmZyb21VVEY4
KG5hbWUsIGxlbmd0aCk7CisgICAgaW5mby50eXBlID0gdHlwZTsKKyAgICBpbmZvLnNpemUgPSBz
aXplOworICAgIGZhc3RGcmVlKG5hbWUpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFdl
YkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OmdldEFjdGl2ZVVuaWZvcm0oV2ViR0xJZCBw
cm9ncmFtLCB1bnNpZ25lZCBsb25nIGluZGV4LCBBY3RpdmVJbmZvJiBpbmZvKQoreworICAgIEdM
aW50IG1heE5hbWVMZW5ndGggPSAtMTsKKyAgICBnbEdldFByb2dyYW1pdihwcm9ncmFtLCBHTF9B
Q1RJVkVfVU5JRk9STV9NQVhfTEVOR1RILCAmbWF4TmFtZUxlbmd0aCk7CisgICAgaWYgKG1heE5h
bWVMZW5ndGggPCAwKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgR0xjaGFyKiBuYW1lID0g
MDsKKyAgICBpZiAoIXRyeUZhc3RNYWxsb2MobWF4TmFtZUxlbmd0aCAqIHNpemVvZihHTGNoYXIp
KS5nZXRWYWx1ZShuYW1lKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHTF9PVVRfT0Zf
TUVNT1JZKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBHTHNpemVpIGxlbmd0
aCA9IDA7CisgICAgR0xpbnQgc2l6ZSA9IC0xOworICAgIEdMZW51bSB0eXBlID0gMDsKKyAgICBn
bEdldEFjdGl2ZVVuaWZvcm0ocHJvZ3JhbSwgaW5kZXgsIG1heE5hbWVMZW5ndGgsCisgICAgICAg
ICAgICAgICAgICAgICAgICZsZW5ndGgsICZzaXplLCAmdHlwZSwgbmFtZSk7CisgICAgaWYgKHNp
emUgPCAwKSB7CisgICAgICAgIGZhc3RGcmVlKG5hbWUpOworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorICAgIGluZm8ubmFtZSA9IFdlYlN0cmluZzo6ZnJvbVVURjgobmFtZSwgbGVuZ3Ro
KTsKKyAgICBpbmZvLnR5cGUgPSB0eXBlOworICAgIGluZm8uc2l6ZSA9IHNpemU7CisgICAgZmFz
dEZyZWUobmFtZSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK0RFTEVHQVRFX1RPX0dMXzJSKGdl
dEF0dHJpYkxvY2F0aW9uLCBHZXRBdHRyaWJMb2NhdGlvbiwgV2ViR0xJZCwgY29uc3QgY2hhcios
IGludCkKKworREVMRUdBVEVfVE9fR0xfMihnZXRCb29sZWFudiwgR2V0Qm9vbGVhbnYsIHVuc2ln
bmVkIGxvbmcsIHVuc2lnbmVkIGNoYXIqKQorCitERUxFR0FURV9UT19HTF8zKGdldEJ1ZmZlclBh
cmFtZXRlcml2LCBHZXRCdWZmZXJQYXJhbWV0ZXJpdiwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQg
bG9uZywgaW50KikKKworV2ViR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgV2ViR3JhcGhp
Y3NDb250ZXh0M0REZWZhdWx0SW1wbDo6Z2V0Q29udGV4dEF0dHJpYnV0ZXMoKQoreworICAgIHJl
dHVybiBtX2F0dHJpYnV0ZXM7Cit9CisKK3Vuc2lnbmVkIGxvbmcgV2ViR3JhcGhpY3NDb250ZXh0
M0REZWZhdWx0SW1wbDo6Z2V0RXJyb3IoKQoreworICAgIGlmIChtX3N5bnRoZXRpY0Vycm9ycy5z
aXplKCkgPiAwKSB7CisgICAgICAgIExpc3RIYXNoU2V0PHVuc2lnbmVkIGxvbmc+OjppdGVyYXRv
ciBpdGVyID0gbV9zeW50aGV0aWNFcnJvcnMuYmVnaW4oKTsKKyAgICAgICAgdW5zaWduZWQgbG9u
ZyBlcnIgPSAqaXRlcjsKKyAgICAgICAgbV9zeW50aGV0aWNFcnJvcnMucmVtb3ZlKGl0ZXIpOwor
ICAgICAgICByZXR1cm4gZXJyOworICAgIH0KKworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwor
ICAgIHJldHVybiBnbEdldEVycm9yKCk7Cit9CisKK0RFTEVHQVRFX1RPX0dMXzIoZ2V0RmxvYXR2
LCBHZXRGbG9hdHYsIHVuc2lnbmVkIGxvbmcsIGZsb2F0KikKKworREVMRUdBVEVfVE9fR0xfNChn
ZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpdiwgR2V0RnJhbWVidWZmZXJBdHRhY2ht
ZW50UGFyYW1ldGVyaXZFWFQsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVk
IGxvbmcsIGludCopCisKK0RFTEVHQVRFX1RPX0dMXzIoZ2V0SW50ZWdlcnYsIEdldEludGVnZXJ2
LCB1bnNpZ25lZCBsb25nLCBpbnQqKQorCitERUxFR0FURV9UT19HTF8zKGdldFByb2dyYW1pdiwg
R2V0UHJvZ3JhbWl2LCBXZWJHTElkLCB1bnNpZ25lZCBsb25nLCBpbnQqKQorCitXZWJTdHJpbmcg
V2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6Z2V0UHJvZ3JhbUluZm9Mb2coV2ViR0xJ
ZCBwcm9ncmFtKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIEdMaW50IGxvZ0xl
bmd0aDsKKyAgICBnbEdldFByb2dyYW1pdihwcm9ncmFtLCBHTF9JTkZPX0xPR19MRU5HVEgsICZs
b2dMZW5ndGgpOworICAgIGlmICghbG9nTGVuZ3RoKQorICAgICAgICByZXR1cm4gV2ViU3RyaW5n
KCk7CisgICAgR0xjaGFyKiBsb2cgPSAwOworICAgIGlmICghdHJ5RmFzdE1hbGxvYyhsb2dMZW5n
dGggKiBzaXplb2YoR0xjaGFyKSkuZ2V0VmFsdWUobG9nKSkKKyAgICAgICAgcmV0dXJuIFdlYlN0
cmluZygpOworICAgIEdMc2l6ZWkgcmV0dXJuZWRMb2dMZW5ndGg7CisgICAgZ2xHZXRQcm9ncmFt
SW5mb0xvZyhwcm9ncmFtLCBsb2dMZW5ndGgsICZyZXR1cm5lZExvZ0xlbmd0aCwgbG9nKTsKKyAg
ICBBU1NFUlQobG9nTGVuZ3RoID09IHJldHVybmVkTG9nTGVuZ3RoICsgMSk7CisgICAgV2ViU3Ry
aW5nIHJlcyA9IFdlYlN0cmluZzo6ZnJvbVVURjgobG9nLCByZXR1cm5lZExvZ0xlbmd0aCk7Cisg
ICAgZmFzdEZyZWUobG9nKTsKKyAgICByZXR1cm4gcmVzOworfQorCitERUxFR0FURV9UT19HTF8z
KGdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcml2LCBHZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdkVY
VCwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgaW50KikKKworREVMRUdBVEVfVE9fR0xf
MyhnZXRTaGFkZXJpdiwgR2V0U2hhZGVyaXYsIFdlYkdMSWQsIHVuc2lnbmVkIGxvbmcsIGludCop
CisKK1dlYlN0cmluZyBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpnZXRTaGFkZXJJ
bmZvTG9nKFdlYkdMSWQgc2hhZGVyKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAg
IEdMaW50IGxvZ0xlbmd0aDsKKyAgICBnbEdldFNoYWRlcml2KHNoYWRlciwgR0xfSU5GT19MT0df
TEVOR1RILCAmbG9nTGVuZ3RoKTsKKyAgICBpZiAoIWxvZ0xlbmd0aCkKKyAgICAgICAgcmV0dXJu
IFdlYlN0cmluZygpOworICAgIEdMY2hhciogbG9nID0gMDsKKyAgICBpZiAoIXRyeUZhc3RNYWxs
b2MobG9nTGVuZ3RoICogc2l6ZW9mKEdMY2hhcikpLmdldFZhbHVlKGxvZykpCisgICAgICAgIHJl
dHVybiBXZWJTdHJpbmcoKTsKKyAgICBHTHNpemVpIHJldHVybmVkTG9nTGVuZ3RoOworICAgIGds
R2V0U2hhZGVySW5mb0xvZyhzaGFkZXIsIGxvZ0xlbmd0aCwgJnJldHVybmVkTG9nTGVuZ3RoLCBs
b2cpOworICAgIEFTU0VSVChsb2dMZW5ndGggPT0gcmV0dXJuZWRMb2dMZW5ndGggKyAxKTsKKyAg
ICBXZWJTdHJpbmcgcmVzID0gV2ViU3RyaW5nOjpmcm9tVVRGOChsb2csIHJldHVybmVkTG9nTGVu
Z3RoKTsKKyAgICBmYXN0RnJlZShsb2cpOworICAgIHJldHVybiByZXM7Cit9CisKK1dlYlN0cmlu
ZyBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpnZXRTaGFkZXJTb3VyY2UoV2ViR0xJ
ZCBzaGFkZXIpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgR0xpbnQgbG9nTGVu
Z3RoOworICAgIGdsR2V0U2hhZGVyaXYoc2hhZGVyLCBHTF9TSEFERVJfU09VUkNFX0xFTkdUSCwg
JmxvZ0xlbmd0aCk7CisgICAgaWYgKCFsb2dMZW5ndGgpCisgICAgICAgIHJldHVybiBXZWJTdHJp
bmcoKTsKKyAgICBHTGNoYXIqIGxvZyA9IDA7CisgICAgaWYgKCF0cnlGYXN0TWFsbG9jKGxvZ0xl
bmd0aCAqIHNpemVvZihHTGNoYXIpKS5nZXRWYWx1ZShsb2cpKQorICAgICAgICByZXR1cm4gV2Vi
U3RyaW5nKCk7CisgICAgR0xzaXplaSByZXR1cm5lZExvZ0xlbmd0aDsKKyAgICBnbEdldFNoYWRl
clNvdXJjZShzaGFkZXIsIGxvZ0xlbmd0aCwgJnJldHVybmVkTG9nTGVuZ3RoLCBsb2cpOworICAg
IEFTU0VSVChsb2dMZW5ndGggPT0gcmV0dXJuZWRMb2dMZW5ndGggKyAxKTsKKyAgICBXZWJTdHJp
bmcgcmVzID0gV2ViU3RyaW5nOjpmcm9tVVRGOChsb2csIHJldHVybmVkTG9nTGVuZ3RoKTsKKyAg
ICBmYXN0RnJlZShsb2cpOworICAgIHJldHVybiByZXM7Cit9CisKK1dlYlN0cmluZyBXZWJHcmFw
aGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpnZXRTdHJpbmcodW5zaWduZWQgbG9uZyBuYW1lKQor
eworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIHJldHVybiBXZWJTdHJpbmc6OmZyb21V
VEY4KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGdsR2V0U3RyaW5nKG5hbWUpKSk7Cit9
CisKK0RFTEVHQVRFX1RPX0dMXzMoZ2V0VGV4UGFyYW1ldGVyZnYsIEdldFRleFBhcmFtZXRlcmZ2
LCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCBmbG9hdCopCisKK0RFTEVHQVRFX1RPX0dM
XzMoZ2V0VGV4UGFyYW1ldGVyaXYsIEdldFRleFBhcmFtZXRlcml2LCB1bnNpZ25lZCBsb25nLCB1
bnNpZ25lZCBsb25nLCBpbnQqKQorCitERUxFR0FURV9UT19HTF8zKGdldFVuaWZvcm1mdiwgR2V0
VW5pZm9ybWZ2LCBXZWJHTElkLCBsb25nLCBmbG9hdCopCisKK0RFTEVHQVRFX1RPX0dMXzMoZ2V0
VW5pZm9ybWl2LCBHZXRVbmlmb3JtaXYsIFdlYkdMSWQsIGxvbmcsIGludCopCisKK0RFTEVHQVRF
X1RPX0dMXzJSKGdldFVuaWZvcm1Mb2NhdGlvbiwgR2V0VW5pZm9ybUxvY2F0aW9uLCBXZWJHTElk
LCBjb25zdCBjaGFyKiwgbG9uZykKKworREVMRUdBVEVfVE9fR0xfMyhnZXRWZXJ0ZXhBdHRyaWJm
diwgR2V0VmVydGV4QXR0cmliZnYsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIGZsb2F0
KikKKworREVMRUdBVEVfVE9fR0xfMyhnZXRWZXJ0ZXhBdHRyaWJpdiwgR2V0VmVydGV4QXR0cmli
aXYsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIGludCopCisKK2xvbmcgV2ViR3JhcGhp
Y3NDb250ZXh0M0REZWZhdWx0SW1wbDo6Z2V0VmVydGV4QXR0cmliT2Zmc2V0KHVuc2lnbmVkIGxv
bmcgaW5kZXgsIHVuc2lnbmVkIGxvbmcgcG5hbWUpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVu
dC4KKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOworfQorCitERUxFR0FURV9U
T19HTF8yKGhpbnQsIEhpbnQsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpCisKK0RFTEVH
QVRFX1RPX0dMXzFSKGlzQnVmZmVyLCBJc0J1ZmZlciwgV2ViR0xJZCwgYm9vbCkKKworREVMRUdB
VEVfVE9fR0xfMVIoaXNFbmFibGVkLCBJc0VuYWJsZWQsIHVuc2lnbmVkIGxvbmcsIGJvb2wpCisK
K0RFTEVHQVRFX1RPX0dMXzFSKGlzRnJhbWVidWZmZXIsIElzRnJhbWVidWZmZXIsIFdlYkdMSWQs
IGJvb2wpCisKK0RFTEVHQVRFX1RPX0dMXzFSKGlzUHJvZ3JhbSwgSXNQcm9ncmFtLCBXZWJHTElk
LCBib29sKQorCitERUxFR0FURV9UT19HTF8xUihpc1JlbmRlcmJ1ZmZlciwgSXNSZW5kZXJidWZm
ZXIsIFdlYkdMSWQsIGJvb2wpCisKK0RFTEVHQVRFX1RPX0dMXzFSKGlzU2hhZGVyLCBJc1NoYWRl
ciwgV2ViR0xJZCwgYm9vbCkKKworREVMRUdBVEVfVE9fR0xfMVIoaXNUZXh0dXJlLCBJc1RleHR1
cmUsIFdlYkdMSWQsIGJvb2wpCisKK0RFTEVHQVRFX1RPX0dMXzEobGluZVdpZHRoLCBMaW5lV2lk
dGgsIGRvdWJsZSkKKworREVMRUdBVEVfVE9fR0xfMShsaW5rUHJvZ3JhbSwgTGlua1Byb2dyYW0s
IFdlYkdMSWQpCisKK0RFTEVHQVRFX1RPX0dMXzIocGl4ZWxTdG9yZWksIFBpeGVsU3RvcmVpLCB1
bnNpZ25lZCBsb25nLCBsb25nKQorCitERUxFR0FURV9UT19HTF8yKHBvbHlnb25PZmZzZXQsIFBv
bHlnb25PZmZzZXQsIGRvdWJsZSwgZG91YmxlKQorCitERUxFR0FURV9UT19HTF83KHJlYWRQaXhl
bHMsIFJlYWRQaXhlbHMsIGxvbmcsIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcs
IHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHZvaWQqKQorCit2b2lkIFdlYkdyYXBoaWNz
Q29udGV4dDNERGVmYXVsdEltcGw6OnJlbGVhc2VTaGFkZXJDb21waWxlcigpCit7Cit9CisKK0RF
TEVHQVRFX1RPX0dMXzQocmVuZGVyYnVmZmVyU3RvcmFnZSwgUmVuZGVyYnVmZmVyU3RvcmFnZUVY
VCwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQg
bG9uZykKKworREVMRUdBVEVfVE9fR0xfMihzYW1wbGVDb3ZlcmFnZSwgU2FtcGxlQ292ZXJhZ2Us
IGRvdWJsZSwgYm9vbCkKKworREVMRUdBVEVfVE9fR0xfNChzY2lzc29yLCBTY2lzc29yLCBsb25n
LCBsb25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKQorCit2b2lkIFdlYkdyYXBoaWNz
Q29udGV4dDNERGVmYXVsdEltcGw6OnNoYWRlclNvdXJjZShXZWJHTElkIHNoYWRlciwgY29uc3Qg
Y2hhciogc3RyaW5nKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIEdMaW50IGxl
bmd0aCA9IHN0cmxlbihzdHJpbmcpOworICAgIGdsU2hhZGVyU291cmNlKHNoYWRlciwgMSwgJnN0
cmluZywgJmxlbmd0aCk7Cit9CisKK0RFTEVHQVRFX1RPX0dMXzMoc3RlbmNpbEZ1bmMsIFN0ZW5j
aWxGdW5jLCB1bnNpZ25lZCBsb25nLCBsb25nLCB1bnNpZ25lZCBsb25nKQorCitERUxFR0FURV9U
T19HTF80KHN0ZW5jaWxGdW5jU2VwYXJhdGUsIFN0ZW5jaWxGdW5jU2VwYXJhdGUsIHVuc2lnbmVk
IGxvbmcsIHVuc2lnbmVkIGxvbmcsIGxvbmcsIHVuc2lnbmVkIGxvbmcpCisKK0RFTEVHQVRFX1RP
X0dMXzEoc3RlbmNpbE1hc2ssIFN0ZW5jaWxNYXNrLCB1bnNpZ25lZCBsb25nKQorCitERUxFR0FU
RV9UT19HTF8yKHN0ZW5jaWxNYXNrU2VwYXJhdGUsIFN0ZW5jaWxNYXNrU2VwYXJhdGUsIHVuc2ln
bmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpCisKK0RFTEVHQVRFX1RPX0dMXzMoc3RlbmNpbE9wLCBT
dGVuY2lsT3AsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpCisK
K0RFTEVHQVRFX1RPX0dMXzQoc3RlbmNpbE9wU2VwYXJhdGUsIFN0ZW5jaWxPcFNlcGFyYXRlLCB1
bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25n
KQorCitERUxFR0FURV9UT19HTF85KHRleEltYWdlMkQsIFRleEltYWdlMkQsIHVuc2lnbmVkLCB1
bnNpZ25lZCwgdW5zaWduZWQsIHVuc2lnbmVkLCB1bnNpZ25lZCwgdW5zaWduZWQsIHVuc2lnbmVk
LCB1bnNpZ25lZCwgY29uc3Qgdm9pZCopCisKK0RFTEVHQVRFX1RPX0dMXzModGV4UGFyYW1ldGVy
ZiwgVGV4UGFyYW1ldGVyZiwgdW5zaWduZWQsIHVuc2lnbmVkLCBmbG9hdCk7CisKK0RFTEVHQVRF
X1RPX0dMXzModGV4UGFyYW1ldGVyaSwgVGV4UGFyYW1ldGVyaSwgdW5zaWduZWQsIHVuc2lnbmVk
LCBpbnQpOworCitERUxFR0FURV9UT19HTF85KHRleFN1YkltYWdlMkQsIFRleFN1YkltYWdlMkQs
IHVuc2lnbmVkLCB1bnNpZ25lZCwgdW5zaWduZWQsIHVuc2lnbmVkLCB1bnNpZ25lZCwgdW5zaWdu
ZWQsIHVuc2lnbmVkLCB1bnNpZ25lZCwgY29uc3Qgdm9pZCopCisKK0RFTEVHQVRFX1RPX0dMXzIo
dW5pZm9ybTFmLCBVbmlmb3JtMWYsIGxvbmcsIGZsb2F0KQorCitERUxFR0FURV9UT19HTF8zKHVu
aWZvcm0xZnYsIFVuaWZvcm0xZnYsIGxvbmcsIGludCwgZmxvYXQqKQorCitERUxFR0FURV9UT19H
TF8yKHVuaWZvcm0xaSwgVW5pZm9ybTFpLCBsb25nLCBpbnQpCisKK0RFTEVHQVRFX1RPX0dMXzMo
dW5pZm9ybTFpdiwgVW5pZm9ybTFpdiwgbG9uZywgaW50LCBpbnQqKQorCitERUxFR0FURV9UT19H
TF8zKHVuaWZvcm0yZiwgVW5pZm9ybTJmLCBsb25nLCBmbG9hdCwgZmxvYXQpCisKK0RFTEVHQVRF
X1RPX0dMXzModW5pZm9ybTJmdiwgVW5pZm9ybTJmdiwgbG9uZywgaW50LCBmbG9hdCopCisKK0RF
TEVHQVRFX1RPX0dMXzModW5pZm9ybTJpLCBVbmlmb3JtMmksIGxvbmcsIGludCwgaW50KQorCitE
RUxFR0FURV9UT19HTF8zKHVuaWZvcm0yaXYsIFVuaWZvcm0yaXYsIGxvbmcsIGludCwgaW50KikK
KworREVMRUdBVEVfVE9fR0xfNCh1bmlmb3JtM2YsIFVuaWZvcm0zZiwgbG9uZywgZmxvYXQsIGZs
b2F0LCBmbG9hdCkKKworREVMRUdBVEVfVE9fR0xfMyh1bmlmb3JtM2Z2LCBVbmlmb3JtM2Z2LCBs
b25nLCBpbnQsIGZsb2F0KikKKworREVMRUdBVEVfVE9fR0xfNCh1bmlmb3JtM2ksIFVuaWZvcm0z
aSwgbG9uZywgaW50LCBpbnQsIGludCkKKworREVMRUdBVEVfVE9fR0xfMyh1bmlmb3JtM2l2LCBV
bmlmb3JtM2l2LCBsb25nLCBpbnQsIGludCopCisKK0RFTEVHQVRFX1RPX0dMXzUodW5pZm9ybTRm
LCBVbmlmb3JtNGYsIGxvbmcsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0KQorCitERUxFR0FU
RV9UT19HTF8zKHVuaWZvcm00ZnYsIFVuaWZvcm00ZnYsIGxvbmcsIGludCwgZmxvYXQqKQorCitE
RUxFR0FURV9UT19HTF81KHVuaWZvcm00aSwgVW5pZm9ybTRpLCBsb25nLCBpbnQsIGludCwgaW50
LCBpbnQpCisKK0RFTEVHQVRFX1RPX0dMXzModW5pZm9ybTRpdiwgVW5pZm9ybTRpdiwgbG9uZywg
aW50LCBpbnQqKQorCitERUxFR0FURV9UT19HTF80KHVuaWZvcm1NYXRyaXgyZnYsIFVuaWZvcm1N
YXRyaXgyZnYsIGxvbmcsIGludCwgYm9vbCwgY29uc3QgZmxvYXQqKQorCitERUxFR0FURV9UT19H
TF80KHVuaWZvcm1NYXRyaXgzZnYsIFVuaWZvcm1NYXRyaXgzZnYsIGxvbmcsIGludCwgYm9vbCwg
Y29uc3QgZmxvYXQqKQorCitERUxFR0FURV9UT19HTF80KHVuaWZvcm1NYXRyaXg0ZnYsIFVuaWZv
cm1NYXRyaXg0ZnYsIGxvbmcsIGludCwgYm9vbCwgY29uc3QgZmxvYXQqKQorCitERUxFR0FURV9U
T19HTF8xKHVzZVByb2dyYW0sIFVzZVByb2dyYW0sIFdlYkdMSWQpCisKK0RFTEVHQVRFX1RPX0dM
XzEodmFsaWRhdGVQcm9ncmFtLCBWYWxpZGF0ZVByb2dyYW0sIFdlYkdMSWQpCisKK0RFTEVHQVRF
X1RPX0dMXzIodmVydGV4QXR0cmliMWYsIFZlcnRleEF0dHJpYjFmLCB1bnNpZ25lZCBsb25nLCBm
bG9hdCkKKworREVMRUdBVEVfVE9fR0xfMih2ZXJ0ZXhBdHRyaWIxZnYsIFZlcnRleEF0dHJpYjFm
diwgdW5zaWduZWQgbG9uZywgY29uc3QgZmxvYXQqKQorCitERUxFR0FURV9UT19HTF8zKHZlcnRl
eEF0dHJpYjJmLCBWZXJ0ZXhBdHRyaWIyZiwgdW5zaWduZWQgbG9uZywgZmxvYXQsIGZsb2F0KQor
CitERUxFR0FURV9UT19HTF8yKHZlcnRleEF0dHJpYjJmdiwgVmVydGV4QXR0cmliMmZ2LCB1bnNp
Z25lZCBsb25nLCBjb25zdCBmbG9hdCopCisKK0RFTEVHQVRFX1RPX0dMXzQodmVydGV4QXR0cmli
M2YsIFZlcnRleEF0dHJpYjNmLCB1bnNpZ25lZCBsb25nLCBmbG9hdCwgZmxvYXQsIGZsb2F0KQor
CitERUxFR0FURV9UT19HTF8yKHZlcnRleEF0dHJpYjNmdiwgVmVydGV4QXR0cmliM2Z2LCB1bnNp
Z25lZCBsb25nLCBjb25zdCBmbG9hdCopCisKK0RFTEVHQVRFX1RPX0dMXzUodmVydGV4QXR0cmli
NGYsIFZlcnRleEF0dHJpYjRmLCB1bnNpZ25lZCBsb25nLCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBm
bG9hdCkKKworREVMRUdBVEVfVE9fR0xfMih2ZXJ0ZXhBdHRyaWI0ZnYsIFZlcnRleEF0dHJpYjRm
diwgdW5zaWduZWQgbG9uZywgY29uc3QgZmxvYXQqKQorCit2b2lkIFdlYkdyYXBoaWNzQ29udGV4
dDNERGVmYXVsdEltcGw6OnZlcnRleEF0dHJpYlBvaW50ZXIodW5zaWduZWQgbG9uZyBpbmR4LCBp
bnQgc2l6ZSwgaW50IHR5cGUsIGJvb2wgbm9ybWFsaXplZCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHN0cmlk
ZSwgdW5zaWduZWQgbG9uZyBvZmZzZXQpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisK
KyAgICBpZiAobV9ib3VuZEFycmF5QnVmZmVyIDw9IDApIHsKKyAgICAgICAgLy8gRklYTUU6IHJh
aXNlIGV4Y2VwdGlvbi4KKyAgICAgICAgLy8gTG9nTWVzc2FnZWYoKCJidWZmZXJEYXRhOiBubyBi
dWZmZXIgYm91bmQiKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoaW5keCA8
IE51bVRyYWNrZWRQb2ludGVyU3RhdGVzKSB7CisgICAgICAgIFZlcnRleEF0dHJpYlBvaW50ZXJT
dGF0ZSYgc3RhdGUgPSBtX3ZlcnRleEF0dHJpYlBvaW50ZXJTdGF0ZVtpbmR4XTsKKyAgICAgICAg
c3RhdGUuYnVmZmVyID0gbV9ib3VuZEFycmF5QnVmZmVyOworICAgICAgICBzdGF0ZS5pbmR4ID0g
aW5keDsKKyAgICAgICAgc3RhdGUuc2l6ZSA9IHNpemU7CisgICAgICAgIHN0YXRlLnR5cGUgPSB0
eXBlOworICAgICAgICBzdGF0ZS5ub3JtYWxpemVkID0gbm9ybWFsaXplZDsKKyAgICAgICAgc3Rh
dGUuc3RyaWRlID0gc3RyaWRlOworICAgICAgICBzdGF0ZS5vZmZzZXQgPSBvZmZzZXQ7CisgICAg
fQorCisgICAgZ2xWZXJ0ZXhBdHRyaWJQb2ludGVyKGluZHgsIHNpemUsIHR5cGUsIG5vcm1hbGl6
ZWQsIHN0cmlkZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx2
b2lkKj4oc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KG9mZnNldCkpKTsKK30KKworREVMRUdBVEVfVE9f
R0xfNCh2aWV3cG9ydCwgVmlld3BvcnQsIGxvbmcsIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2ln
bmVkIGxvbmcpCisKK3Vuc2lnbmVkIFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OmNy
ZWF0ZUJ1ZmZlcigpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgR0x1aW50IG87
CisgICAgZ2xHZW5CdWZmZXJzKDEsICZvKTsKKyAgICByZXR1cm4gbzsKK30KKwordW5zaWduZWQg
V2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6Y3JlYXRlRnJhbWVidWZmZXIoKQorewor
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIEdMdWludCBvID0gMDsKKyAgICBnbEdlbkZy
YW1lYnVmZmVyc0VYVCgxLCAmbyk7CisgICAgcmV0dXJuIG87Cit9CisKK3Vuc2lnbmVkIFdlYkdy
YXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OmNyZWF0ZVByb2dyYW0oKQoreworICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOworICAgIHJldHVybiBnbENyZWF0ZVByb2dyYW0oKTsKK30KKwordW5z
aWduZWQgV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6Y3JlYXRlUmVuZGVyYnVmZmVy
KCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBHTHVpbnQgbzsKKyAgICBnbEdl
blJlbmRlcmJ1ZmZlcnNFWFQoMSwgJm8pOworICAgIHJldHVybiBvOworfQorCitERUxFR0FURV9U
T19HTF8xUihjcmVhdGVTaGFkZXIsIENyZWF0ZVNoYWRlciwgdW5zaWduZWQgbG9uZywgdW5zaWdu
ZWQpOworCit1bnNpZ25lZCBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpjcmVhdGVU
ZXh0dXJlKCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBHTHVpbnQgbzsKKyAg
ICBnbEdlblRleHR1cmVzKDEsICZvKTsKKyAgICByZXR1cm4gbzsKK30KKwordm9pZCBXZWJHcmFw
aGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpkZWxldGVCdWZmZXIodW5zaWduZWQgYnVmZmVyKQor
eworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGdsRGVsZXRlQnVmZmVycygxLCAmYnVm
ZmVyKTsKK30KKwordm9pZCBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpkZWxldGVG
cmFtZWJ1ZmZlcih1bnNpZ25lZCBmcmFtZWJ1ZmZlcikKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKKyAgICBnbERlbGV0ZUZyYW1lYnVmZmVyc0VYVCgxLCAmZnJhbWVidWZmZXIpOworfQor
Cit2b2lkIFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OmRlbGV0ZVByb2dyYW0odW5z
aWduZWQgcHJvZ3JhbSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBnbERlbGV0
ZVByb2dyYW0ocHJvZ3JhbSk7Cit9CisKK3ZvaWQgV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0
SW1wbDo6ZGVsZXRlUmVuZGVyYnVmZmVyKHVuc2lnbmVkIHJlbmRlcmJ1ZmZlcikKK3sKKyAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBnbERlbGV0ZVJlbmRlcmJ1ZmZlcnNFWFQoMSwgJnJl
bmRlcmJ1ZmZlcik7Cit9CisKK3ZvaWQgV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6
ZGVsZXRlU2hhZGVyKHVuc2lnbmVkIHNoYWRlcikKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICBnbERlbGV0ZVNoYWRlcihzaGFkZXIpOworfQorCit2b2lkIFdlYkdyYXBoaWNzQ29u
dGV4dDNERGVmYXVsdEltcGw6OmRlbGV0ZVRleHR1cmUodW5zaWduZWQgdGV4dHVyZSkKK3sKKyAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBnbERlbGV0ZVRleHR1cmVzKDEsICZ0ZXh0dXJl
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoM0RfQ0FO
VkFTKQpJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJHcmFwaGljc0NvbnRleHQzRERlZmF1
bHRJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJHcmFwaGljc0Nv
bnRleHQzRERlZmF1bHRJbXBsLmgJKHJldmlzaW9uIDApCisrKyBXZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGwuaAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSw0MDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoK
KyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgor
ICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaWZuZGVmIFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGxfaAorI2RlZmlu
ZSBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsX2gKKworI2lmIEVOQUJMRSgzRF9DQU5W
QVMpCisKKyNpbmNsdWRlICJXZWJHcmFwaGljc0NvbnRleHQzRC5oIgorCisjaW5jbHVkZSA8d3Rm
L0xpc3RIYXNoU2V0Lmg+CisKKyNpZiBPUyhXSU5ET1dTKQorI2luY2x1ZGUgPHdpbmRvd3MuaD4K
KyNlbmRpZgorCisjaW5jbHVkZSAiR0wvZ2xldy5oIgorCisjaWYgUExBVEZPUk0oQ0cpCisjaW5j
bHVkZSA8T3BlbkdML09wZW5HTC5oPgorI2Vsc2UKKyNkZWZpbmUgRkxJUF9GUkFNRUJVRkZFUl9W
RVJUSUNBTExZCisjZW5kaWYKKworI2lmIE9TKExJTlVYKQorI2luY2x1ZGUgIkdML2dseGV3Lmgi
CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYktpdCB7CisKKy8vIFRoZSBkZWZhdWx0IGltcGxlbWVu
dGF0aW9uIG9mIFdlYkdMLiBJbiBDaHJvbWl1bSwgdXNpbmcgdGhpcyBjbGFzcworLy8gcmVxdWly
ZXMgdGhlIHNhbmRib3ggdG8gYmUgZGlzYWJsZWQsIHdoaWNoIGlzIHN0cm9uZ2x5IGRpc2NvdXJh
Z2VkLgorLy8gSXQgaXMgcHJvdmlkZWQgZm9yIHN1cHBvcnQgb2YgdGVzdF9zaGVsbCBhbmQgYW55
IENocm9taXVtIHBvcnRzCisvLyB3aGVyZSBhbiBpbi1yZW5kZXJlciBXZWJHTCBpbXBsZW1lbnRh
dGlvbiB3b3VsZCBiZSBoZWxwZnVsLgorCitjbGFzcyBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1
bHRJbXBsIDogcHVibGljIFdlYkdyYXBoaWNzQ29udGV4dDNEIHsKK3B1YmxpYzoKKyAgICBXZWJH
cmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsKCk7CisgICAgdmlydHVhbCB+V2ViR3JhcGhpY3ND
b250ZXh0M0REZWZhdWx0SW1wbCgpOworCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gV2Vi
R3JhcGhpY3NDb250ZXh0M0QgbWV0aG9kcworICAgIHZpcnR1YWwgYm9vbCBpbml0aWFsaXplKFdl
YkdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMpOworICAgIHZpcnR1YWwg
Ym9vbCBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKworICAgIHZpcnR1YWwgaW50IHdpZHRoKCk7Cisg
ICAgdmlydHVhbCBpbnQgaGVpZ2h0KCk7CisKKyAgICB2aXJ0dWFsIGludCBzaXplSW5CeXRlcyhp
bnQgdHlwZSk7CisKKyAgICB2aXJ0dWFsIHZvaWQgcmVzaGFwZShpbnQgd2lkdGgsIGludCBoZWln
aHQpOworCisgICAgdmlydHVhbCBib29sIHJlYWRCYWNrRnJhbWVidWZmZXIodW5zaWduZWQgY2hh
ciogcGl4ZWxzLCBzaXplX3QgYnVmZmVyX3NpemUpOworCisgICAgdmlydHVhbCB2b2lkIHN5bnRo
ZXNpemVHTEVycm9yKHVuc2lnbmVkIGxvbmcgZXJyb3IpOworCisgICAgdmlydHVhbCB2b2lkIGFj
dGl2ZVRleHR1cmUodW5zaWduZWQgbG9uZyB0ZXh0dXJlKTsKKyAgICB2aXJ0dWFsIHZvaWQgYXR0
YWNoU2hhZGVyKFdlYkdMSWQgcHJvZ3JhbSwgV2ViR0xJZCBzaGFkZXIpOworICAgIHZpcnR1YWwg
dm9pZCBiaW5kQXR0cmliTG9jYXRpb24oV2ViR0xJZCBwcm9ncmFtLCB1bnNpZ25lZCBsb25nIGlu
ZGV4LCBjb25zdCBjaGFyKiBuYW1lKTsKKyAgICB2aXJ0dWFsIHZvaWQgYmluZEJ1ZmZlcih1bnNp
Z25lZCBsb25nIHRhcmdldCwgV2ViR0xJZCBidWZmZXIpOworICAgIHZpcnR1YWwgdm9pZCBiaW5k
RnJhbWVidWZmZXIodW5zaWduZWQgbG9uZyB0YXJnZXQsIFdlYkdMSWQgZnJhbWVidWZmZXIpOwor
ICAgIHZpcnR1YWwgdm9pZCBiaW5kUmVuZGVyYnVmZmVyKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBX
ZWJHTElkIHJlbmRlcmJ1ZmZlcik7CisgICAgdmlydHVhbCB2b2lkIGJpbmRUZXh0dXJlKHVuc2ln
bmVkIGxvbmcgdGFyZ2V0LCBXZWJHTElkIHRleHR1cmUpOworICAgIHZpcnR1YWwgdm9pZCBibGVu
ZENvbG9yKGRvdWJsZSByZWQsIGRvdWJsZSBncmVlbiwgZG91YmxlIGJsdWUsIGRvdWJsZSBhbHBo
YSk7CisgICAgdmlydHVhbCB2b2lkIGJsZW5kRXF1YXRpb24odW5zaWduZWQgbG9uZyBtb2RlKTsK
KyAgICB2aXJ0dWFsIHZvaWQgYmxlbmRFcXVhdGlvblNlcGFyYXRlKHVuc2lnbmVkIGxvbmcgbW9k
ZVJHQiwgdW5zaWduZWQgbG9uZyBtb2RlQWxwaGEpOworICAgIHZpcnR1YWwgdm9pZCBibGVuZEZ1
bmModW5zaWduZWQgbG9uZyBzZmFjdG9yLCB1bnNpZ25lZCBsb25nIGRmYWN0b3IpOworICAgIHZp
cnR1YWwgdm9pZCBibGVuZEZ1bmNTZXBhcmF0ZSh1bnNpZ25lZCBsb25nIHNyY1JHQiwgdW5zaWdu
ZWQgbG9uZyBkc3RSR0IsIHVuc2lnbmVkIGxvbmcgc3JjQWxwaGEsIHVuc2lnbmVkIGxvbmcgZHN0
QWxwaGEpOworCisgICAgdmlydHVhbCB2b2lkIGJ1ZmZlckRhdGEodW5zaWduZWQgbG9uZyB0YXJn
ZXQsIGludCBzaXplLCBjb25zdCB2b2lkKiBkYXRhLCB1bnNpZ25lZCBsb25nIHVzYWdlKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgYnVmZmVyU3ViRGF0YSh1bnNpZ25lZCBsb25nIHRhcmdldCwgbG9uZyBv
ZmZzZXQsIGludCBzaXplLCBjb25zdCB2b2lkKiBkYXRhKTsKKworICAgIHZpcnR1YWwgdW5zaWdu
ZWQgbG9uZyBjaGVja0ZyYW1lYnVmZmVyU3RhdHVzKHVuc2lnbmVkIGxvbmcgdGFyZ2V0KTsKKyAg
ICB2aXJ0dWFsIHZvaWQgY2xlYXIodW5zaWduZWQgbG9uZyBtYXNrKTsKKyAgICB2aXJ0dWFsIHZv
aWQgY2xlYXJDb2xvcihkb3VibGUgcmVkLCBkb3VibGUgZ3JlZW4sIGRvdWJsZSBibHVlLCBkb3Vi
bGUgYWxwaGEpOworICAgIHZpcnR1YWwgdm9pZCBjbGVhckRlcHRoKGRvdWJsZSBkZXB0aCk7Cisg
ICAgdmlydHVhbCB2b2lkIGNsZWFyU3RlbmNpbChsb25nIHMpOworICAgIHZpcnR1YWwgdm9pZCBj
b2xvck1hc2soYm9vbCByZWQsIGJvb2wgZ3JlZW4sIGJvb2wgYmx1ZSwgYm9vbCBhbHBoYSk7Cisg
ICAgdmlydHVhbCB2b2lkIGNvbXBpbGVTaGFkZXIoV2ViR0xJZCBzaGFkZXIpOworCisgICAgdmly
dHVhbCB2b2lkIGNvcHlUZXhJbWFnZTJEKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBsb25nIGxldmVs
LCB1bnNpZ25lZCBsb25nIGludGVybmFsZm9ybWF0LCBsb25nIHgsIGxvbmcgeSwgdW5zaWduZWQg
bG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQsIGxvbmcgYm9yZGVyKTsKKyAgICB2aXJ0
dWFsIHZvaWQgY29weVRleFN1YkltYWdlMkQodW5zaWduZWQgbG9uZyB0YXJnZXQsIGxvbmcgbGV2
ZWwsIGxvbmcgeG9mZnNldCwgbG9uZyB5b2Zmc2V0LCBsb25nIHgsIGxvbmcgeSwgdW5zaWduZWQg
bG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQpOworICAgIHZpcnR1YWwgdm9pZCBjdWxs
RmFjZSh1bnNpZ25lZCBsb25nIG1vZGUpOworICAgIHZpcnR1YWwgdm9pZCBkZXB0aEZ1bmModW5z
aWduZWQgbG9uZyBmdW5jKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVwdGhNYXNrKGJvb2wgZmxhZyk7
CisgICAgdmlydHVhbCB2b2lkIGRlcHRoUmFuZ2UoZG91YmxlIHpOZWFyLCBkb3VibGUgekZhcik7
CisgICAgdmlydHVhbCB2b2lkIGRldGFjaFNoYWRlcihXZWJHTElkIHByb2dyYW0sIFdlYkdMSWQg
c2hhZGVyKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlzYWJsZSh1bnNpZ25lZCBsb25nIGNhcCk7Cisg
ICAgdmlydHVhbCB2b2lkIGRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheSh1bnNpZ25lZCBsb25nIGlu
ZGV4KTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0FycmF5cyh1bnNpZ25lZCBsb25nIG1vZGUsIGxv
bmcgZmlyc3QsIGxvbmcgY291bnQpOworICAgIHZpcnR1YWwgdm9pZCBkcmF3RWxlbWVudHModW5z
aWduZWQgbG9uZyBtb2RlLCB1bnNpZ25lZCBsb25nIGNvdW50LCB1bnNpZ25lZCBsb25nIHR5cGUs
IGxvbmcgb2Zmc2V0KTsKKworICAgIHZpcnR1YWwgdm9pZCBlbmFibGUodW5zaWduZWQgbG9uZyBj
YXApOworICAgIHZpcnR1YWwgdm9pZCBlbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSh1bnNpZ25lZCBs
b25nIGluZGV4KTsKKyAgICB2aXJ0dWFsIHZvaWQgZmluaXNoKCk7CisgICAgdmlydHVhbCB2b2lk
IGZsdXNoKCk7CisgICAgdmlydHVhbCB2b2lkIGZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKHVuc2ln
bmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIGF0dGFjaG1lbnQsIHVuc2lnbmVkIGxvbmcg
cmVuZGVyYnVmZmVydGFyZ2V0LCBXZWJHTElkIHJlbmRlcmJ1ZmZlcik7CisgICAgdmlydHVhbCB2
b2lkIGZyYW1lYnVmZmVyVGV4dHVyZTJEKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBs
b25nIGF0dGFjaG1lbnQsIHVuc2lnbmVkIGxvbmcgdGV4dGFyZ2V0LCBXZWJHTElkIHRleHR1cmUs
IGxvbmcgbGV2ZWwpOworICAgIHZpcnR1YWwgdm9pZCBmcm9udEZhY2UodW5zaWduZWQgbG9uZyBt
b2RlKTsKKyAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVNaXBtYXAodW5zaWduZWQgbG9uZyB0YXJn
ZXQpOworCisgICAgdmlydHVhbCBib29sIGdldEFjdGl2ZUF0dHJpYihXZWJHTElkIHByb2dyYW0s
IHVuc2lnbmVkIGxvbmcgaW5kZXgsIEFjdGl2ZUluZm8mKTsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0
QWN0aXZlVW5pZm9ybShXZWJHTElkIHByb2dyYW0sIHVuc2lnbmVkIGxvbmcgaW5kZXgsIEFjdGl2
ZUluZm8mKTsKKworICAgIHZpcnR1YWwgaW50ICBnZXRBdHRyaWJMb2NhdGlvbihXZWJHTElkIHBy
b2dyYW0sIGNvbnN0IGNoYXIqIG5hbWUpOworCisgICAgdmlydHVhbCB2b2lkIGdldEJvb2xlYW52
KHVuc2lnbmVkIGxvbmcgcG5hbWUsIHVuc2lnbmVkIGNoYXIqIHZhbHVlKTsKKworICAgIHZpcnR1
YWwgdm9pZCBnZXRCdWZmZXJQYXJhbWV0ZXJpdih1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWdu
ZWQgbG9uZyBwbmFtZSwgaW50KiB2YWx1ZSk7CisKKyAgICB2aXJ0dWFsIEF0dHJpYnV0ZXMgZ2V0
Q29udGV4dEF0dHJpYnV0ZXMoKTsKKworICAgIHZpcnR1YWwgdW5zaWduZWQgbG9uZyBnZXRFcnJv
cigpOworCisgICAgdmlydHVhbCB2b2lkIGdldEZsb2F0dih1bnNpZ25lZCBsb25nIHBuYW1lLCBm
bG9hdCogdmFsdWUpOworCisgICAgdmlydHVhbCB2b2lkIGdldEZyYW1lYnVmZmVyQXR0YWNobWVu
dFBhcmFtZXRlcml2KHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIGF0dGFjaG1l
bnQsIHVuc2lnbmVkIGxvbmcgcG5hbWUsIGludCogdmFsdWUpOworCisgICAgdmlydHVhbCB2b2lk
IGdldEludGVnZXJ2KHVuc2lnbmVkIGxvbmcgcG5hbWUsIGludCogdmFsdWUpOworCisgICAgdmly
dHVhbCB2b2lkIGdldFByb2dyYW1pdihXZWJHTElkIHByb2dyYW0sIHVuc2lnbmVkIGxvbmcgcG5h
bWUsIGludCogdmFsdWUpOworCisgICAgdmlydHVhbCBXZWJTdHJpbmcgZ2V0UHJvZ3JhbUluZm9M
b2coV2ViR0xJZCBwcm9ncmFtKTsKKworICAgIHZpcnR1YWwgdm9pZCBnZXRSZW5kZXJidWZmZXJQ
YXJhbWV0ZXJpdih1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBwbmFtZSwgaW50
KiB2YWx1ZSk7CisKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0U2hhZGVyaXYoV2ViR0xJZCBzaGFkZXIs
IHVuc2lnbmVkIGxvbmcgcG5hbWUsIGludCogdmFsdWUpOworCisgICAgdmlydHVhbCBXZWJTdHJp
bmcgZ2V0U2hhZGVySW5mb0xvZyhXZWJHTElkIHNoYWRlcik7CisKKyAgICAvLyBUQkQKKyAgICAv
LyB2b2lkIGdsR2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0IChHTGVudW0gc2hhZGVydHlwZSwgR0xl
bnVtIHByZWNpc2lvbnR5cGUsIEdMaW50KiByYW5nZSwgR0xpbnQqIHByZWNpc2lvbik7CisKKyAg
ICB2aXJ0dWFsIFdlYlN0cmluZyBnZXRTaGFkZXJTb3VyY2UoV2ViR0xJZCBzaGFkZXIpOworICAg
IHZpcnR1YWwgV2ViU3RyaW5nIGdldFN0cmluZyh1bnNpZ25lZCBsb25nIG5hbWUpOworCisgICAg
dmlydHVhbCB2b2lkIGdldFRleFBhcmFtZXRlcmZ2KHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNp
Z25lZCBsb25nIHBuYW1lLCBmbG9hdCogdmFsdWUpOworICAgIHZpcnR1YWwgdm9pZCBnZXRUZXhQ
YXJhbWV0ZXJpdih1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBwbmFtZSwgaW50
KiB2YWx1ZSk7CisKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0VW5pZm9ybWZ2KFdlYkdMSWQgcHJvZ3Jh
bSwgbG9uZyBsb2NhdGlvbiwgZmxvYXQqIHZhbHVlKTsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0VW5p
Zm9ybWl2KFdlYkdMSWQgcHJvZ3JhbSwgbG9uZyBsb2NhdGlvbiwgaW50KiB2YWx1ZSk7CisKKyAg
ICB2aXJ0dWFsIGxvbmcgZ2V0VW5pZm9ybUxvY2F0aW9uKFdlYkdMSWQgcHJvZ3JhbSwgY29uc3Qg
Y2hhciogbmFtZSk7CisKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0VmVydGV4QXR0cmliZnYodW5zaWdu
ZWQgbG9uZyBpbmRleCwgdW5zaWduZWQgbG9uZyBwbmFtZSwgZmxvYXQqIHZhbHVlKTsKKyAgICB2
aXJ0dWFsIHZvaWQgZ2V0VmVydGV4QXR0cmliaXYodW5zaWduZWQgbG9uZyBpbmRleCwgdW5zaWdu
ZWQgbG9uZyBwbmFtZSwgaW50KiB2YWx1ZSk7CisKKyAgICB2aXJ0dWFsIGxvbmcgZ2V0VmVydGV4
QXR0cmliT2Zmc2V0KHVuc2lnbmVkIGxvbmcgaW5kZXgsIHVuc2lnbmVkIGxvbmcgcG5hbWUpOwor
CisgICAgdmlydHVhbCB2b2lkIGhpbnQodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxv
bmcgbW9kZSk7CisgICAgdmlydHVhbCBib29sIGlzQnVmZmVyKFdlYkdMSWQgYnVmZmVyKTsKKyAg
ICB2aXJ0dWFsIGJvb2wgaXNFbmFibGVkKHVuc2lnbmVkIGxvbmcgY2FwKTsKKyAgICB2aXJ0dWFs
IGJvb2wgaXNGcmFtZWJ1ZmZlcihXZWJHTElkIGZyYW1lYnVmZmVyKTsKKyAgICB2aXJ0dWFsIGJv
b2wgaXNQcm9ncmFtKFdlYkdMSWQgcHJvZ3JhbSk7CisgICAgdmlydHVhbCBib29sIGlzUmVuZGVy
YnVmZmVyKFdlYkdMSWQgcmVuZGVyYnVmZmVyKTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNTaGFkZXIo
V2ViR0xJZCBzaGFkZXIpOworICAgIHZpcnR1YWwgYm9vbCBpc1RleHR1cmUoV2ViR0xJZCB0ZXh0
dXJlKTsKKyAgICB2aXJ0dWFsIHZvaWQgbGluZVdpZHRoKGRvdWJsZSk7CisgICAgdmlydHVhbCB2
b2lkIGxpbmtQcm9ncmFtKFdlYkdMSWQgcHJvZ3JhbSk7CisgICAgdmlydHVhbCB2b2lkIHBpeGVs
U3RvcmVpKHVuc2lnbmVkIGxvbmcgcG5hbWUsIGxvbmcgcGFyYW0pOworICAgIHZpcnR1YWwgdm9p
ZCBwb2x5Z29uT2Zmc2V0KGRvdWJsZSBmYWN0b3IsIGRvdWJsZSB1bml0cyk7CisKKyAgICB2aXJ0
dWFsIHZvaWQgcmVhZFBpeGVscyhsb25nIHgsIGxvbmcgeSwgdW5zaWduZWQgbG9uZyB3aWR0aCwg
dW5zaWduZWQgbG9uZyBoZWlnaHQsIHVuc2lnbmVkIGxvbmcgZm9ybWF0LCB1bnNpZ25lZCBsb25n
IHR5cGUsIHZvaWQqIHBpeGVscyk7CisKKyAgICB2aXJ0dWFsIHZvaWQgcmVsZWFzZVNoYWRlckNv
bXBpbGVyKCk7CisgICAgdmlydHVhbCB2b2lkIHJlbmRlcmJ1ZmZlclN0b3JhZ2UodW5zaWduZWQg
bG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgaW50ZXJuYWxmb3JtYXQsIHVuc2lnbmVkIGxvbmcg
d2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0KTsKKyAgICB2aXJ0dWFsIHZvaWQgc2FtcGxlQ292
ZXJhZ2UoZG91YmxlIHZhbHVlLCBib29sIGludmVydCk7CisgICAgdmlydHVhbCB2b2lkIHNjaXNz
b3IobG9uZyB4LCBsb25nIHksIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVp
Z2h0KTsKKyAgICB2aXJ0dWFsIHZvaWQgc2hhZGVyU291cmNlKFdlYkdMSWQgc2hhZGVyLCBjb25z
dCBjaGFyKiBzdHJpbmcpOworICAgIHZpcnR1YWwgdm9pZCBzdGVuY2lsRnVuYyh1bnNpZ25lZCBs
b25nIGZ1bmMsIGxvbmcgcmVmLCB1bnNpZ25lZCBsb25nIG1hc2spOworICAgIHZpcnR1YWwgdm9p
ZCBzdGVuY2lsRnVuY1NlcGFyYXRlKHVuc2lnbmVkIGxvbmcgZmFjZSwgdW5zaWduZWQgbG9uZyBm
dW5jLCBsb25nIHJlZiwgdW5zaWduZWQgbG9uZyBtYXNrKTsKKyAgICB2aXJ0dWFsIHZvaWQgc3Rl
bmNpbE1hc2sodW5zaWduZWQgbG9uZyBtYXNrKTsKKyAgICB2aXJ0dWFsIHZvaWQgc3RlbmNpbE1h
c2tTZXBhcmF0ZSh1bnNpZ25lZCBsb25nIGZhY2UsIHVuc2lnbmVkIGxvbmcgbWFzayk7CisgICAg
dmlydHVhbCB2b2lkIHN0ZW5jaWxPcCh1bnNpZ25lZCBsb25nIGZhaWwsIHVuc2lnbmVkIGxvbmcg
emZhaWwsIHVuc2lnbmVkIGxvbmcgenBhc3MpOworICAgIHZpcnR1YWwgdm9pZCBzdGVuY2lsT3BT
ZXBhcmF0ZSh1bnNpZ25lZCBsb25nIGZhY2UsIHVuc2lnbmVkIGxvbmcgZmFpbCwgdW5zaWduZWQg
bG9uZyB6ZmFpbCwgdW5zaWduZWQgbG9uZyB6cGFzcyk7CisKKyAgICB2aXJ0dWFsIHZvaWQgdGV4
SW1hZ2UyRCh1bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVkIGxldmVsLCB1bnNpZ25lZCBpbnRlcm5h
bGZvcm1hdCwgdW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCwgdW5zaWduZWQgYm9yZGVy
LCB1bnNpZ25lZCBmb3JtYXQsIHVuc2lnbmVkIHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVscyk7CisK
KyAgICB2aXJ0dWFsIHZvaWQgdGV4UGFyYW1ldGVyZih1bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVk
IHBuYW1lLCBmbG9hdCBwYXJhbSk7CisgICAgdmlydHVhbCB2b2lkIHRleFBhcmFtZXRlcmkodW5z
aWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBwbmFtZSwgaW50IHBhcmFtKTsKKworICAgIHZpcnR1YWwg
dm9pZCB0ZXhTdWJJbWFnZTJEKHVuc2lnbmVkIHRhcmdldCwgdW5zaWduZWQgbGV2ZWwsIHVuc2ln
bmVkIHhvZmZzZXQsIHVuc2lnbmVkIHlvZmZzZXQsIHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBo
ZWlnaHQsIHVuc2lnbmVkIGZvcm1hdCwgdW5zaWduZWQgdHlwZSwgY29uc3Qgdm9pZCogcGl4ZWxz
KTsKKworICAgIHZpcnR1YWwgdm9pZCB1bmlmb3JtMWYobG9uZyBsb2NhdGlvbiwgZmxvYXQgeCk7
CisgICAgdmlydHVhbCB2b2lkIHVuaWZvcm0xZnYobG9uZyBsb2NhdGlvbiwgaW50IGNvdW50LCBm
bG9hdCogdik7CisgICAgdmlydHVhbCB2b2lkIHVuaWZvcm0xaShsb25nIGxvY2F0aW9uLCBpbnQg
eCk7CisgICAgdmlydHVhbCB2b2lkIHVuaWZvcm0xaXYobG9uZyBsb2NhdGlvbiwgaW50IGNvdW50
LCBpbnQqIHYpOworICAgIHZpcnR1YWwgdm9pZCB1bmlmb3JtMmYobG9uZyBsb2NhdGlvbiwgZmxv
YXQgeCwgZmxvYXQgeSk7CisgICAgdmlydHVhbCB2b2lkIHVuaWZvcm0yZnYobG9uZyBsb2NhdGlv
biwgaW50IGNvdW50LCBmbG9hdCogdik7CisgICAgdmlydHVhbCB2b2lkIHVuaWZvcm0yaShsb25n
IGxvY2F0aW9uLCBpbnQgeCwgaW50IHkpOworICAgIHZpcnR1YWwgdm9pZCB1bmlmb3JtMml2KGxv
bmcgbG9jYXRpb24sIGludCBjb3VudCwgaW50KiB2KTsKKyAgICB2aXJ0dWFsIHZvaWQgdW5pZm9y
bTNmKGxvbmcgbG9jYXRpb24sIGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHopOworICAgIHZpcnR1
YWwgdm9pZCB1bmlmb3JtM2Z2KGxvbmcgbG9jYXRpb24sIGludCBjb3VudCwgZmxvYXQqIHYpOwor
ICAgIHZpcnR1YWwgdm9pZCB1bmlmb3JtM2kobG9uZyBsb2NhdGlvbiwgaW50IHgsIGludCB5LCBp
bnQgeik7CisgICAgdmlydHVhbCB2b2lkIHVuaWZvcm0zaXYobG9uZyBsb2NhdGlvbiwgaW50IGNv
dW50LCBpbnQqIHYpOworICAgIHZpcnR1YWwgdm9pZCB1bmlmb3JtNGYobG9uZyBsb2NhdGlvbiwg
ZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgeiwgZmxvYXQgdyk7CisgICAgdmlydHVhbCB2b2lkIHVu
aWZvcm00ZnYobG9uZyBsb2NhdGlvbiwgaW50IGNvdW50LCBmbG9hdCogdik7CisgICAgdmlydHVh
bCB2b2lkIHVuaWZvcm00aShsb25nIGxvY2F0aW9uLCBpbnQgeCwgaW50IHksIGludCB6LCBpbnQg
dyk7CisgICAgdmlydHVhbCB2b2lkIHVuaWZvcm00aXYobG9uZyBsb2NhdGlvbiwgaW50IGNvdW50
LCBpbnQqIHYpOworICAgIHZpcnR1YWwgdm9pZCB1bmlmb3JtTWF0cml4MmZ2KGxvbmcgbG9jYXRp
b24sIGludCBjb3VudCwgYm9vbCB0cmFuc3Bvc2UsIGNvbnN0IGZsb2F0KiB2YWx1ZSk7CisgICAg
dmlydHVhbCB2b2lkIHVuaWZvcm1NYXRyaXgzZnYobG9uZyBsb2NhdGlvbiwgaW50IGNvdW50LCBi
b29sIHRyYW5zcG9zZSwgY29uc3QgZmxvYXQqIHZhbHVlKTsKKyAgICB2aXJ0dWFsIHZvaWQgdW5p
Zm9ybU1hdHJpeDRmdihsb25nIGxvY2F0aW9uLCBpbnQgY291bnQsIGJvb2wgdHJhbnNwb3NlLCBj
b25zdCBmbG9hdCogdmFsdWUpOworCisgICAgdmlydHVhbCB2b2lkIHVzZVByb2dyYW0oV2ViR0xJ
ZCBwcm9ncmFtKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmFsaWRhdGVQcm9ncmFtKFdlYkdMSWQgcHJv
Z3JhbSk7CisKKyAgICB2aXJ0dWFsIHZvaWQgdmVydGV4QXR0cmliMWYodW5zaWduZWQgbG9uZyBp
bmR4LCBmbG9hdCB4KTsKKyAgICB2aXJ0dWFsIHZvaWQgdmVydGV4QXR0cmliMWZ2KHVuc2lnbmVk
IGxvbmcgaW5keCwgY29uc3QgZmxvYXQqIHZhbHVlcyk7CisgICAgdmlydHVhbCB2b2lkIHZlcnRl
eEF0dHJpYjJmKHVuc2lnbmVkIGxvbmcgaW5keCwgZmxvYXQgeCwgZmxvYXQgeSk7CisgICAgdmly
dHVhbCB2b2lkIHZlcnRleEF0dHJpYjJmdih1bnNpZ25lZCBsb25nIGluZHgsIGNvbnN0IGZsb2F0
KiB2YWx1ZXMpOworICAgIHZpcnR1YWwgdm9pZCB2ZXJ0ZXhBdHRyaWIzZih1bnNpZ25lZCBsb25n
IGluZHgsIGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHopOworICAgIHZpcnR1YWwgdm9pZCB2ZXJ0
ZXhBdHRyaWIzZnYodW5zaWduZWQgbG9uZyBpbmR4LCBjb25zdCBmbG9hdCogdmFsdWVzKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgdmVydGV4QXR0cmliNGYodW5zaWduZWQgbG9uZyBpbmR4LCBmbG9hdCB4
LCBmbG9hdCB5LCBmbG9hdCB6LCBmbG9hdCB3KTsKKyAgICB2aXJ0dWFsIHZvaWQgdmVydGV4QXR0
cmliNGZ2KHVuc2lnbmVkIGxvbmcgaW5keCwgY29uc3QgZmxvYXQqIHZhbHVlcyk7CisgICAgdmly
dHVhbCB2b2lkIHZlcnRleEF0dHJpYlBvaW50ZXIodW5zaWduZWQgbG9uZyBpbmR4LCBpbnQgc2l6
ZSwgaW50IHR5cGUsIGJvb2wgbm9ybWFsaXplZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBsb25nIHN0cmlkZSwgdW5zaWduZWQgbG9uZyBvZmZzZXQpOwor
CisgICAgdmlydHVhbCB2b2lkIHZpZXdwb3J0KGxvbmcgeCwgbG9uZyB5LCB1bnNpZ25lZCBsb25n
IHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCk7CisKKyAgICAvLyBTdXBwb3J0IGZvciBidWZm
ZXIgY3JlYXRpb24gYW5kIGRlbGV0aW9uCisgICAgdmlydHVhbCB1bnNpZ25lZCBjcmVhdGVCdWZm
ZXIoKTsKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGNyZWF0ZUZyYW1lYnVmZmVyKCk7CisgICAgdmly
dHVhbCB1bnNpZ25lZCBjcmVhdGVQcm9ncmFtKCk7CisgICAgdmlydHVhbCB1bnNpZ25lZCBjcmVh
dGVSZW5kZXJidWZmZXIoKTsKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGNyZWF0ZVNoYWRlcih1bnNp
Z25lZCBsb25nKTsKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGNyZWF0ZVRleHR1cmUoKTsKKworICAg
IHZpcnR1YWwgdm9pZCBkZWxldGVCdWZmZXIodW5zaWduZWQpOworICAgIHZpcnR1YWwgdm9pZCBk
ZWxldGVGcmFtZWJ1ZmZlcih1bnNpZ25lZCk7CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZVByb2dy
YW0odW5zaWduZWQpOworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVSZW5kZXJidWZmZXIodW5zaWdu
ZWQpOworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVTaGFkZXIodW5zaWduZWQpOworICAgIHZpcnR1
YWwgdm9pZCBkZWxldGVUZXh0dXJlKHVuc2lnbmVkKTsKKworcHJpdmF0ZToKKyAgICBXZWJHcmFw
aGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBtX2F0dHJpYnV0ZXM7CisgICAgYm9vbCBtX2luaXRp
YWxpemVkOworICAgIHVuc2lnbmVkIGludCBtX3RleHR1cmU7CisgICAgdW5zaWduZWQgaW50IG1f
ZmJvOworICAgIHVuc2lnbmVkIGludCBtX2RlcHRoQnVmZmVyOworICAgIHVuc2lnbmVkIGludCBt
X2NhY2hlZFdpZHRoLCBtX2NhY2hlZEhlaWdodDsKKworICAgIC8vIEZvciB0cmFja2luZyB3aGlj
aCBGQk8gaXMgYm91bmQKKyAgICB1bnNpZ25lZCBpbnQgbV9ib3VuZEZCTzsKKworI2lmZGVmIEZM
SVBfRlJBTUVCVUZGRVJfVkVSVElDQUxMWQorICAgIHVuc2lnbmVkIGNoYXIqIG1fc2NhbmxpbmU7
CisgICAgdm9pZCBmbGlwVmVydGljYWxseSh1bnNpZ25lZCBjaGFyKiBmcmFtZWJ1ZmZlciwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCB3aWR0aCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIGludCBoZWlnaHQpOworI2VuZGlmCisKKyAgICAvLyBOb3RlOiB3
ZSBhcmVuJ3QgY3VycmVudGx5IHVzaW5nIHRoaXMgaW5mb3JtYXRpb24sIGJ1dCB3ZSB3aWxsCisg
ICAgLy8gbmVlZCB0byBpbiBvcmRlciB0byB2ZXJpZnkgdGhhdCBhbGwgZW5hYmxlZCB2ZXJ0ZXgg
YXJyYXlzIGhhdmUKKyAgICAvLyBhIHZhbGlkIGJ1ZmZlciBib3VuZCAtLSB0byBhdm9pZCBjcmFz
aGVzIG9uIGNlcnRhaW4gY2FyZHMuCisgICAgdW5zaWduZWQgaW50IG1fYm91bmRBcnJheUJ1ZmZl
cjsKKyAgICBjbGFzcyBWZXJ0ZXhBdHRyaWJQb2ludGVyU3RhdGUgeworICAgIHB1YmxpYzoKKyAg
ICAgICAgVmVydGV4QXR0cmliUG9pbnRlclN0YXRlKCk7CisKKyAgICAgICAgYm9vbCBlbmFibGVk
OworICAgICAgICB1bnNpZ25lZCBsb25nIGJ1ZmZlcjsKKyAgICAgICAgdW5zaWduZWQgbG9uZyBp
bmR4OworICAgICAgICBpbnQgc2l6ZTsKKyAgICAgICAgaW50IHR5cGU7CisgICAgICAgIGJvb2wg
bm9ybWFsaXplZDsKKyAgICAgICAgdW5zaWduZWQgbG9uZyBzdHJpZGU7CisgICAgICAgIHVuc2ln
bmVkIGxvbmcgb2Zmc2V0OworICAgIH07CisKKyAgICBlbnVtIHsKKyAgICAgICAgTnVtVHJhY2tl
ZFBvaW50ZXJTdGF0ZXMgPSAyCisgICAgfTsKKyAgICBWZXJ0ZXhBdHRyaWJQb2ludGVyU3RhdGUg
bV92ZXJ0ZXhBdHRyaWJQb2ludGVyU3RhdGVbTnVtVHJhY2tlZFBvaW50ZXJTdGF0ZXNdOworCisg
ICAgLy8gRXJyb3JzIHJhaXNlZCBieSBzeW50aGVzaXplR0xFcnJvcigpLgorICAgIExpc3RIYXNo
U2V0PHVuc2lnbmVkIGxvbmc+IG1fc3ludGhldGljRXJyb3JzOworCisgICAgc3RhdGljIGJvb2wg
c19pbml0aWFsaXplZEdMRVc7CisjaWYgT1MoV0lORE9XUykKKyAgICBIV05EICBtX2NhbnZhc1dp
bmRvdzsKKyAgICBIREMgICBtX2NhbnZhc0RDOworICAgIEhHTFJDIG1fY29udGV4dE9iajsKKyNl
bGlmIFBMQVRGT1JNKENHKQorICAgIENHTFBCdWZmZXJPYmogbV9wYnVmZmVyOworICAgIENHTENv
bnRleHRPYmogbV9jb250ZXh0T2JqOworICAgIHVuc2lnbmVkIGNoYXIqIG1fcmVuZGVyT3V0cHV0
OworI2VsaWYgT1MoTElOVVgpCisgICAgR0xYQ29udGV4dCBtX2NvbnRleHRPYmo7CisgICAgR0xY
UGJ1ZmZlciBtX3BidWZmZXI7CisKKyAgICAvLyBJbiBvcmRlciB0byBhdm9pZCBwcm9ibGVtcyBj
YXVzZWQgYnkgbGlua2luZyBhZ2FpbnN0IGxpYkdMLCB3ZQorICAgIC8vIGR5bmFtaWNhbGx5IGxv
b2sgdXAgYWxsIHRoZSBzeW1ib2xzIHdlIG5lZWQuCisgICAgLy8gaHR0cDovL2NvZGUuZ29vZ2xl
LmNvbS9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9MTY4MDAKKyAgICBjbGFzcyBHTENvbm5l
Y3Rpb24geworICAgICAgcHVibGljOgorICAgICAgICB+R0xDb25uZWN0aW9uKCk7CisKKyAgICAg
ICAgc3RhdGljIEdMQ29ubmVjdGlvbiogY3JlYXRlKCk7CisKKyAgICAgICAgR0xYRkJDb25maWcq
IGNob29zZUZCQ29uZmlnKGludCBzY3JlZW4sIGNvbnN0IGludCAqYXR0cmliX2xpc3QsIGludCAq
bmVsZW1lbnRzKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9nbFhDaG9vc2VGQkNv
bmZpZyhtX2Rpc3BsYXksIHNjcmVlbiwgYXR0cmliX2xpc3QsIG5lbGVtZW50cyk7CisgICAgICAg
IH0KKworICAgICAgICBHTFhDb250ZXh0IGNyZWF0ZU5ld0NvbnRleHQoR0xYRkJDb25maWcgY29u
ZmlnLCBpbnQgcmVuZGVyVHlwZSwgR0xYQ29udGV4dCBzaGFyZUxpc3QsIEJvb2wgZGlyZWN0KQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9nbFhDcmVhdGVOZXdDb250ZXh0KG1fZGlz
cGxheSwgY29uZmlnLCByZW5kZXJUeXBlLCBzaGFyZUxpc3QsIGRpcmVjdCk7CisgICAgICAgIH0K
KworICAgICAgICBHTFhQYnVmZmVyIGNyZWF0ZVBidWZmZXIoR0xYRkJDb25maWcgY29uZmlnLCBj
b25zdCBpbnQgKmF0dHJpYkxpc3QpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2ds
WENyZWF0ZVBidWZmZXIobV9kaXNwbGF5LCBjb25maWcsIGF0dHJpYkxpc3QpOworICAgICAgICB9
CisKKyAgICAgICAgdm9pZCBkZXN0cm95UGJ1ZmZlcihHTFhQYnVmZmVyIHBidWYpCisgICAgICAg
IHsKKyAgICAgICAgICAgIG1fZ2xYRGVzdHJveVBidWZmZXIobV9kaXNwbGF5LCBwYnVmKTsKKyAg
ICAgICAgfQorCisgICAgICAgIEJvb2wgbWFrZUN1cnJlbnQoR0xYRHJhd2FibGUgZHJhd2FibGUs
IEdMWENvbnRleHQgY3R4KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9nbFhNYWtl
Q3VycmVudChtX2Rpc3BsYXksIGRyYXdhYmxlLCBjdHgpOworICAgICAgICB9CisKKyAgICAgICAg
dm9pZCBkZXN0cm95Q29udGV4dChHTFhDb250ZXh0IGN0eCkKKyAgICAgICAgeworICAgICAgICAg
ICAgbV9nbFhEZXN0cm95Q29udGV4dChtX2Rpc3BsYXksIGN0eCk7CisgICAgICAgIH0KKworICAg
ICAgICBHTFhDb250ZXh0IGdldEN1cnJlbnRDb250ZXh0KCkKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIG1fZ2xYR2V0Q3VycmVudENvbnRleHQoKTsKKyAgICAgICAgfQorCisgICAgICBw
cml2YXRlOgorICAgICAgICBEaXNwbGF5KiBtX2Rpc3BsYXk7CisgICAgICAgIHZvaWQqIG1fbGli
R0w7CisgICAgICAgIFBGTkdMWENIT09TRUZCQ09ORklHUFJPQyBtX2dsWENob29zZUZCQ29uZmln
OworICAgICAgICBQRk5HTFhDUkVBVEVORVdDT05URVhUUFJPQyBtX2dsWENyZWF0ZU5ld0NvbnRl
eHQ7CisgICAgICAgIFBGTkdMWENSRUFURVBCVUZGRVJQUk9DIG1fZ2xYQ3JlYXRlUGJ1ZmZlcjsK
KyAgICAgICAgUEZOR0xYREVTVFJPWVBCVUZGRVJQUk9DIG1fZ2xYRGVzdHJveVBidWZmZXI7Cisg
ICAgICAgIHR5cGVkZWYgQm9vbCAoKiBQRk5HTFhNQUtFQ1VSUkVOVFBST0MpKERpc3BsYXkqIGRw
eSwgR0xYRHJhd2FibGUgZHJhd2FibGUsIEdMWENvbnRleHQgY3R4KTsKKyAgICAgICAgUEZOR0xY
TUFLRUNVUlJFTlRQUk9DIG1fZ2xYTWFrZUN1cnJlbnQ7CisgICAgICAgIHR5cGVkZWYgdm9pZCAo
KiBQRk5HTFhERVNUUk9ZQ09OVEVYVFBST0MpKERpc3BsYXkqIGRweSwgR0xYQ29udGV4dCBjdHgp
OworICAgICAgICBQRk5HTFhERVNUUk9ZQ09OVEVYVFBST0MgbV9nbFhEZXN0cm95Q29udGV4dDsK
KyAgICAgICAgdHlwZWRlZiBHTFhDb250ZXh0ICgqIFBGTkdMWEdFVENVUlJFTlRDT05URVhUUFJP
Qykodm9pZCk7CisgICAgICAgIFBGTkdMWEdFVENVUlJFTlRDT05URVhUUFJPQyBtX2dsWEdldEN1
cnJlbnRDb250ZXh0OworCisgICAgICAgIEdMQ29ubmVjdGlvbihEaXNwbGF5KiBkaXNwbGF5LAor
ICAgICAgICAgICAgICAgICAgICAgdm9pZCogbGliR0wsCisgICAgICAgICAgICAgICAgICAgICBQ
Rk5HTFhDSE9PU0VGQkNPTkZJR1BST0MgY2hvb3NlRkJDb25maWcsCisgICAgICAgICAgICAgICAg
ICAgICBQRk5HTFhDUkVBVEVORVdDT05URVhUUFJPQyBjcmVhdGVOZXdDb250ZXh0LAorICAgICAg
ICAgICAgICAgICAgICAgUEZOR0xYQ1JFQVRFUEJVRkZFUlBST0MgY3JlYXRlUGJ1ZmZlciwKKyAg
ICAgICAgICAgICAgICAgICAgIFBGTkdMWERFU1RST1lQQlVGRkVSUFJPQyBkZXN0cm95UGJ1ZmZl
ciwKKyAgICAgICAgICAgICAgICAgICAgIFBGTkdMWE1BS0VDVVJSRU5UUFJPQyBtYWtlQ3VycmVu
dCwKKyAgICAgICAgICAgICAgICAgICAgIFBGTkdMWERFU1RST1lDT05URVhUUFJPQyBkZXN0cm95
Q29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgIFBGTkdMWEdFVENVUlJFTlRDT05URVhUUFJP
QyBnZXRDdXJyZW50Q29udGV4dCkKKyAgICAgICAgICAgIDogbV9saWJHTChsaWJHTCkKKyAgICAg
ICAgICAgICwgbV9kaXNwbGF5KGRpc3BsYXkpCisgICAgICAgICAgICAsIG1fZ2xYQ2hvb3NlRkJD
b25maWcoY2hvb3NlRkJDb25maWcpCisgICAgICAgICAgICAsIG1fZ2xYQ3JlYXRlTmV3Q29udGV4
dChjcmVhdGVOZXdDb250ZXh0KQorICAgICAgICAgICAgLCBtX2dsWENyZWF0ZVBidWZmZXIoY3Jl
YXRlUGJ1ZmZlcikKKyAgICAgICAgICAgICwgbV9nbFhEZXN0cm95UGJ1ZmZlcihkZXN0cm95UGJ1
ZmZlcikKKyAgICAgICAgICAgICwgbV9nbFhNYWtlQ3VycmVudChtYWtlQ3VycmVudCkKKyAgICAg
ICAgICAgICwgbV9nbFhEZXN0cm95Q29udGV4dChkZXN0cm95Q29udGV4dCkKKyAgICAgICAgICAg
ICwgbV9nbFhHZXRDdXJyZW50Q29udGV4dChnZXRDdXJyZW50Q29udGV4dCkKKyAgICAgICAgewor
ICAgICAgICB9CisgICAgfTsKKworICAgIHN0YXRpYyBHTENvbm5lY3Rpb24qIHNfZ2w7CisjZWxz
ZQorICAgICNlcnJvciBNdXN0IHBvcnQgV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbCB0
byB5b3VyIHBsYXRmb3JtCisjZW5kaWYKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisj
ZW5kaWYgLy8gRU5BQkxFKDNEX0NBTlZBUykKKworI2VuZGlmCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>51192</attachid>
            <date>2010-03-19 15:23:21 -0700</date>
            <delta_ts>2010-03-22 13:39:39 -0700</delta_ts>
            <desc>Revised patch</desc>
            <filename>refactoring.patch</filename>
            <type>text/plain</type>
            <size>199922</size>
            <attacher name="Kenneth Russell">kbr</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24gNTYyNjYpCisrKyBXZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQ1IEBACisyMDEwLTAzLTE5ICBLZW5u
ZXRoIFJ1c3NlbGwgIDxrYnJAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgR3JhcGhpY3NDb250ZXh0M0QgYWJzdHJhY3Rpb24g
dG8gV2ViS2l0IEFQSQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MzYyNjIKKworICAgICAgICBBZGRlZCBXZWJHcmFwaGljc0NvbnRleHQzRCB0byB0aGUg
V2ViS2l0IEFQSSBhbmQgcmVmYWN0b3JlZCBDaHJvbWl1bSdzCisgICAgICAgIEdyYXBoaWNzQ29u
dGV4dDNEIGltcGxlbWVudGF0aW9uIHRvIHVzZSBpdC4gQWxsIG9mIHRoZSBPcGVuR0wgY2FsbHMg
aGF2ZQorICAgICAgICBiZWVuIG1vdmVkIG91dCBvZiBXZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBo
aWNzQ29udGV4dDNELmNwcCBhbmQgaW50byB0aGUKKyAgICAgICAgV2ViR3JhcGhpY3NDb250ZXh0
M0QgaW1wbGVtZW50YXRpb24uIEdyYXBoaWNzQ29udGV4dDNEIGlzIHN0aWxsCisgICAgICAgIHJl
c3BvbnNpYmxlIGZvciB0aGUgdHJhbnNmZXIgb2YgcmVuZGVyZWQgb3V0cHV0IGZyb20gdGhlCisg
ICAgICAgIFdlYkdyYXBoaWNzQ29udGV4dDNEIHRvIHRoZSBIVE1MQ2FudmFzRWxlbWVudC4KKwor
ICAgICAgICBUaGUgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbCBjbGFzcywgd2hpY2ggaXMgYSBk
YXRhIG1lbWJlciBvZgorICAgICAgICBHcmFwaGljc0NvbnRleHQzRCBmb3IgdGhlIENocm9taXVt
IHBvcnQsIHJlbWFpbnMuIEl0IGlzIHBvc3NpYmxlIHRvCisgICAgICAgIGVsaW1pbmF0ZSB0aGlz
IGNsYXNzIGFuZCB0aGVyZWJ5IG9uZSBsZXZlbCBvZiBkZWxlZ2F0aW9uLCBidXQgdGhpcyBpcwor
ICAgICAgICBiZWluZyBkZWZlcnJlZC4KKworICAgICAgICBUaGUgbmVlZGVkIGVudHJ5IHBvaW50
IGZvciBhIENocm9tZSBpbXBsZW1lbnRhdGlvbiBvZgorICAgICAgICBXZWJHcmFwaGljc0NvbnRl
eHQzRCBoYXMgYmVlbiBhZGRlZCB0byBXZWJLaXRDbGllbnQsIGJ1dCBpdCBpcyBub3QgYmVpbmcK
KyAgICAgICAgY2FsbGVkIHlldCBieSBHcmFwaGljc0NvbnRleHQzRC4gSXQgd2lsbCBiZSBvbmNl
IHRoaXMgcGF0Y2ggbGFuZHMgYW5kCisgICAgICAgIENocm9taXVtIGlzIHJvbGxlZCBmb3J3YXJk
IHRvIHN1cHBvcnQgdGhpcyBlbnRyeSBwb2ludC4KKworICAgICAgICBUaGlzIGlzIGEgbGFyZ2Ug
cGF0Y2gsIGJ1dCB0aGUgdHJhbnNmb3JtYXRpb24gaXMgYWxtb3N0IGVudGlyZWx5CisgICAgICAg
IG1lY2hhbmljYWwgYW5kIHRoZXJlIGlzIG5vIGNoYW5nZSBpbiBmdW5jdGlvbmFsaXR5LiBOZWFy
bHkgYWxsIG9mCisgICAgICAgIEdyYXBoaWNzQ29udGV4dDNEIGFuZCBHcmFwaGljc0NvbnRleHQz
REludGVybmFsIGhhcyBiZWVuIG1vdmVkIHRvCisgICAgICAgIFdlYkdyYXBoaWNzQ29udGV4dDNE
RGVmYXVsdEltcGwuIFRoZSBvbmx5IGFyZWEgd2hlcmUgdGhlIHNwbGl0dGluZyBvZgorICAgICAg
ICBsb2dpYyBpcyBsZXNzIHRoYW4gbWVjaGFuaWNhbCBpcyBHcmFwaGljc0NvbnRleHQzRDo6YmVn
aW5QYWludCgpIGFuZCBpdHMKKyAgICAgICAgY2FsbGVlcy4KKworICAgICAgICBSYW4gYWxsIFdl
YkdMIGxheW91dCB0ZXN0cyBhbmQgZGVtb3MgZnJvbSBLaHJvbm9zIHNpdGUgaW4gQ2hyb21pdW0u
CisKKyAgICAgICAgKiBXZWJLaXQuZ3lwOgorICAgICAgICAqIHB1YmxpYy9XZWJHcmFwaGljc0Nv
bnRleHQzRC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0Q6
OkF0dHJpYnV0ZXM6OkF0dHJpYnV0ZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJHcmFwaGljc0Nv
bnRleHQzRDo6fldlYkdyYXBoaWNzQ29udGV4dDNEKToKKyAgICAgICAgKiBwdWJsaWMvV2ViS2l0
Q2xpZW50Lmg6CisgICAgICAgIChXZWJLaXQ6OldlYktpdENsaWVudDo6Y3JlYXRlR3JhcGhpY3ND
b250ZXh0M0QpOgorICAgICAgICAqIHNyYy9HcmFwaGljc0NvbnRleHQzRC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpHcmFwaGljc0NvbnRleHQzRElu
dGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6On5H
cmFwaGljc0NvbnRleHQzREludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNESW50ZXJuYWw6OmluaXRpYWxpemUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0RJbnRlcm5hbDo6cGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpwbGF0Zm9ybVRleHR1cmUpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6YmVnaW5QYWludCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzREludGVybmFsOjplbmRQYWludCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpyZXNoYXBlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmJpbmRBdHRyaWJMb2Nh
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpiaW5k
VGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpi
dWZmZXJEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6
OmJ1ZmZlclN1YkRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RJbnRl
cm5hbDo6Z2V0QWN0aXZlQXR0cmliKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDNESW50ZXJuYWw6OmdldEFjdGl2ZVVuaWZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0RJbnRlcm5hbDo6Z2V0QXR0cmliTG9jYXRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6Z2V0Q29udGV4dEF0dHJpYnV0ZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6Z2V0UHJvZ3JhbUluZm9M
b2cpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6Z2V0U2hh
ZGVySW5mb0xvZyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzREludGVybmFs
OjpnZXRTaGFkZXJTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RJ
bnRlcm5hbDo6Z2V0U3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
SW50ZXJuYWw6OmdldFVuaWZvcm1Mb2NhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQzREludGVybmFsOjpyZWFkUGl4ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNESW50ZXJuYWw6OnNoYWRlclNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzREludGVybmFsOjp0ZXhJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OnRleFN1YkltYWdlMkQpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6dW5pZm9ybTFmdik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzREludGVybmFsOjp1bmlmb3JtMWl2KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OnVuaWZvcm0yZnYpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6dW5pZm9ybTJpdik6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzREludGVybmFsOjp1bmlmb3JtM2Z2KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OnVuaWZvcm0zaXYpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6dW5pZm9ybTRmdik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzREludGVybmFsOjp1bmlmb3JtNGl2
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OnVuaWZvcm1N
YXRyaXgyZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6
dW5pZm9ybU1hdHJpeDNmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRElu
dGVybmFsOjp1bmlmb3JtTWF0cml4NGZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRDo6fkdyYXBoaWNzQ29udGV4dDNEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6
OnBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0Q6OnBsYXRmb3JtVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRDo6dGV4SW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQz
RDo6dGV4U3ViSW1hZ2UyRCk6CisgICAgICAgICogc3JjL1dlYkdyYXBoaWNzQ29udGV4dDNELmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVE
ZWZhdWx0KToKKyAgICAgICAgKiBzcmMvV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbC5j
cHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJ
bXBsOjpHTENvbm5lY3Rpb246OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkdyYXBoaWNz
Q29udGV4dDNERGVmYXVsdEltcGw6OkdMQ29ubmVjdGlvbjo6fkdMQ29ubmVjdGlvbik6CisgICAg
ICAgIChXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OlZlcnRleEF0dHJp
YlBvaW50ZXJTdGF0ZTo6VmVydGV4QXR0cmliUG9pbnRlclN0YXRlKToKKyAgICAgICAgKFdlYktp
dDo6V2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6V2ViR3JhcGhpY3NDb250ZXh0M0RE
ZWZhdWx0SW1wbCk6CisgICAgICAgIChXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVs
dEltcGw6On5XZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsKToKKyAgICAgICAgKFdlYktp
dDo6V2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6aW5pdGlhbGl6ZSk6CisgICAgICAg
IChXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6Om1ha2VDb250ZXh0Q3Vy
cmVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6
OndpZHRoKToKKyAgICAgICAgKFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1w
bDo6aGVpZ2h0KToKKyAgICAgICAgKFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0
SW1wbDo6c2l6ZUluQnl0ZXMpOgorICAgICAgICAoV2ViS2l0OjpjcmVhdGVUZXh0dXJlT2JqZWN0
KToKKyAgICAgICAgKFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6cmVz
aGFwZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6
OmZsaXBWZXJ0aWNhbGx5KToKKyAgICAgICAgKFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0RE
ZWZhdWx0SW1wbDo6cmVhZEJhY2tGcmFtZWJ1ZmZlcik6CisgICAgICAgIChXZWJLaXQ6OldlYkdy
YXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OmFjdGl2ZVRleHR1cmUpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpiaW5kQnVmZmVyKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6YmluZEZyYW1lYnVm
ZmVyKToKKyAgICAgICAgKFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6
ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KToKKyAgICAgICAgKFdlYktpdDo6V2ViR3JhcGhpY3ND
b250ZXh0M0REZWZhdWx0SW1wbDo6ZHJhd0VsZW1lbnRzKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
R3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpnZW5lcmF0
ZU1pcG1hcCk6CisgICAgICAgIChXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdElt
cGw6OmdldEFjdGl2ZUF0dHJpYik6CisgICAgICAgIChXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4
dDNERGVmYXVsdEltcGw6OmdldEFjdGl2ZVVuaWZvcm0pOgorICAgICAgICAoV2ViS2l0OjpXZWJH
cmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpnZXRDb250ZXh0QXR0cmlidXRlcyk6CisgICAg
ICAgIChXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OmdldEVycm9yKToK
KyAgICAgICAgKFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6Z2V0UHJv
Z3JhbUluZm9Mb2cpOgorICAgICAgICAoV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1
bHRJbXBsOjpnZXRTaGFkZXJJbmZvTG9nKToKKyAgICAgICAgKFdlYktpdDo6V2ViR3JhcGhpY3ND
b250ZXh0M0REZWZhdWx0SW1wbDo6Z2V0U2hhZGVyU291cmNlKToKKyAgICAgICAgKFdlYktpdDo6
V2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6Z2V0U3RyaW5nKToKKyAgICAgICAgKFdl
YktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6Z2V0VmVydGV4QXR0cmliT2Zm
c2V0KToKKyAgICAgICAgKFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6
cmVsZWFzZVNoYWRlckNvbXBpbGVyKToKKyAgICAgICAgKFdlYktpdDo6V2ViR3JhcGhpY3NDb250
ZXh0M0REZWZhdWx0SW1wbDo6c2hhZGVyU291cmNlKToKKyAgICAgICAgKFdlYktpdDo6V2ViR3Jh
cGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6dmVydGV4QXR0cmliUG9pbnRlcik6CisgICAgICAg
IChXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OmNyZWF0ZUJ1ZmZlcik6
CisgICAgICAgIChXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OmNyZWF0
ZUZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0REZWZh
dWx0SW1wbDo6Y3JlYXRlUHJvZ3JhbSk6CisgICAgICAgIChXZWJLaXQ6OldlYkdyYXBoaWNzQ29u
dGV4dDNERGVmYXVsdEltcGw6OmNyZWF0ZVJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChXZWJLaXQ6
OldlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OmNyZWF0ZVRleHR1cmUpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpkZWxldGVCdWZmZXIp
OgorICAgICAgICAoV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpkZWxl
dGVGcmFtZWJ1ZmZlcik6CisgICAgICAgIChXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNERGVm
YXVsdEltcGw6OmRlbGV0ZVByb2dyYW0pOgorICAgICAgICAoV2ViS2l0OjpXZWJHcmFwaGljc0Nv
bnRleHQzRERlZmF1bHRJbXBsOjpkZWxldGVSZW5kZXJidWZmZXIpOgorICAgICAgICAoV2ViS2l0
OjpXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpkZWxldGVTaGFkZXIpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpkZWxldGVUZXh0dXJl
KToKKyAgICAgICAgKFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6c3lu
dGhlc2l6ZUdMRXJyb3IpOgorICAgICAgICAqIHNyYy9XZWJHcmFwaGljc0NvbnRleHQzRERlZmF1
bHRJbXBsLmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRERl
ZmF1bHRJbXBsOjopOgorICAgICAgICAoV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1
bHRJbXBsOjpHTENvbm5lY3Rpb246OmNob29zZUZCQ29uZmlnKToKKyAgICAgICAgKFdlYktpdDo6
V2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6R0xDb25uZWN0aW9uOjpjcmVhdGVOZXdD
b250ZXh0KToKKyAgICAgICAgKFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1w
bDo6R0xDb25uZWN0aW9uOjpjcmVhdGVQYnVmZmVyKToKKyAgICAgICAgKFdlYktpdDo6V2ViR3Jh
cGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6R0xDb25uZWN0aW9uOjpkZXN0cm95UGJ1ZmZlcik6
CisgICAgICAgIChXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OkdMQ29u
bmVjdGlvbjo6bWFrZUN1cnJlbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRl
eHQzRERlZmF1bHRJbXBsOjpHTENvbm5lY3Rpb246OmRlc3Ryb3lDb250ZXh0KToKKyAgICAgICAg
KFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6R0xDb25uZWN0aW9uOjpn
ZXRDdXJyZW50Q29udGV4dCk6CisgICAgICAgIChXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNE
RGVmYXVsdEltcGw6OkdMQ29ubmVjdGlvbjo6R0xDb25uZWN0aW9uKToKKwogMjAxMC0wMy0xOSAg
RGltaXRyaSBHbGF6a292ICA8ZGdsYXprb3ZAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFVucmV2
aWV3ZWQsIGJ1aWxkIGZpeC4KSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCShyZXZpc2lvbiA1NjI2NikKKysr
IFdlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjIsNiArMTIy
LDcgQEAKICAgICAgICAgICAgICAgICAncHVibGljL1dlYkZvbnRDYWNoZS5oJywKICAgICAgICAg
ICAgICAgICAncHVibGljL1dlYkZvcm1FbGVtZW50LmgnLAogICAgICAgICAgICAgICAgICdwdWJs
aWMvV2ViR2x5cGhDYWNoZS5oJywKKyAgICAgICAgICAgICAgICAncHVibGljL1dlYkdyYXBoaWNz
Q29udGV4dDNELmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViSGlzdG9yeUl0ZW0uaCcs
CiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJIVFRQQm9keS5oJywKICAgICAgICAgICAgICAg
ICAncHVibGljL1dlYkltYWdlLmgnLApAQCAtMzEyLDYgKzMxMyw5IEBACiAgICAgICAgICAgICAg
ICAgJ3NyYy9XZWJGcmFtZUltcGwuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYkZyYW1l
SW1wbC5oJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYkdseXBoQ2FjaGUuY3BwJywKKyAgICAg
ICAgICAgICAgICAnc3JjL1dlYkdyYXBoaWNzQ29udGV4dDNELmNwcCcsCisgICAgICAgICAgICAg
ICAgJ3NyYy9XZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsLmNwcCcsCisgICAgICAgICAg
ICAgICAgJ3NyYy9XZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsLmgnLAogICAgICAgICAg
ICAgICAgICdzcmMvV2ViSGlzdG9yeUl0ZW0uY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dl
YkhUVFBCb2R5LmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJJbWFnZUNHLmNwcCcsCklu
ZGV4OiBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkdyYXBoaWNzQ29udGV4dDNELmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJHcmFwaGljc0NvbnRleHQzRC5oCShy
ZXZpc2lvbiAwKQorKysgV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJHcmFwaGljc0NvbnRleHQz
RC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMwMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAg
ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
CisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViR3JhcGhpY3NDb250
ZXh0M0RfaAorI2RlZmluZSBXZWJHcmFwaGljc0NvbnRleHQzRF9oCisKKyNpbmNsdWRlICJXZWJD
b21tb24uaCIKKyNpbmNsdWRlICJXZWJOb25Db3B5YWJsZS5oIgorI2luY2x1ZGUgIldlYlN0cmlu
Zy5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworLy8gVHlwZWRlZiBmb3Igc2VydmVyLXNpZGUg
b2JqZWN0cyBsaWtlIE9wZW5HTCB0ZXh0dXJlcyBhbmQgcHJvZ3JhbSBvYmplY3RzLgordHlwZWRl
ZiB1bnNpZ25lZCBpbnQgV2ViR0xJZDsKKworLy8gVGhpcyBpbnRlcmZhY2UgYWJzdHJhY3RzIHRo
ZSBvcGVyYXRpb25zIHBlcmZvcm1lZCBieSB0aGUKKy8vIEdyYXBoaWNzQ29udGV4dDNEIGluIG9y
ZGVyIHRvIGltcGxlbWVudCBXZWJHTC4gTmVhcmx5IGFsbCBvZiB0aGUKKy8vIG1ldGhvZHMgZXhw
b3NlZCBvbiB0aGlzIGludGVyZmFjZSBtYXAgZGlyZWN0bHkgdG8gZW50cnkgcG9pbnRzIGluCisv
LyB0aGUgT3BlbkdMIEVTIDIuMCBBUEkuCisKK2NsYXNzIFdlYkdyYXBoaWNzQ29udGV4dDNEIDog
cHVibGljIFdlYk5vbkNvcHlhYmxlIHsKK3B1YmxpYzoKKyAgICAvLyBSZXR1cm4gdmFsdWUgZnJv
bSBnZXRBY3RpdmVVbmlmb3JtIGFuZCBnZXRBY3RpdmVBdHRyaWIuCisgICAgc3RydWN0IEFjdGl2
ZUluZm8geworICAgICAgICBXZWJTdHJpbmcgbmFtZTsKKyAgICAgICAgdW5zaWduZWQgdHlwZTsK
KyAgICAgICAgaW50IHNpemU7CisgICAgfTsKKworICAgIC8vIENvbnRleHQgY3JlYXRpb24gYXR0
cmlidXRlcy4KKyAgICBzdHJ1Y3QgQXR0cmlidXRlcyB7CisgICAgICAgIEF0dHJpYnV0ZXMoKQor
ICAgICAgICAgICAgOiBhbHBoYSh0cnVlKQorICAgICAgICAgICAgLCBkZXB0aCh0cnVlKQorICAg
ICAgICAgICAgLCBzdGVuY2lsKHRydWUpCisgICAgICAgICAgICAsIGFudGlhbGlhcyh0cnVlKQor
ICAgICAgICAgICAgLCBwcmVtdWx0aXBsaWVkQWxwaGEodHJ1ZSkKKyAgICAgICAgeworICAgICAg
ICB9CisKKyAgICAgICAgYm9vbCBhbHBoYTsKKyAgICAgICAgYm9vbCBkZXB0aDsKKyAgICAgICAg
Ym9vbCBzdGVuY2lsOworICAgICAgICBib29sIGFudGlhbGlhczsKKyAgICAgICAgYm9vbCBwcmVt
dWx0aXBsaWVkQWxwaGE7CisgICAgfTsKKworICAgIC8vIFRoaXMgZGVzdHJ1Y3RvciBuZWVkcyB0
byBiZSBwdWJsaWMgc28gdGhhdCB1c2luZyBjbGFzc2VzIGNhbiBkZXN0cm95IGluc3RhbmNlcyBp
ZiBpbml0aWFsaXphdGlvbiBmYWlscy4KKyAgICB2aXJ0dWFsIH5XZWJHcmFwaGljc0NvbnRleHQz
RCgpIHt9CisKKyAgICAvLyBDcmVhdGVzIGEgImRlZmF1bHQiIGltcGxlbWVudGF0aW9uIG9mIFdl
YkdyYXBoaWNzQ29udGV4dDNEIHdoaWNoIGNhbGxzCisgICAgLy8gT3BlbkdMIGRpcmVjdGx5Lgor
ICAgIHN0YXRpYyBXZWJHcmFwaGljc0NvbnRleHQzRCogY3JlYXRlRGVmYXVsdCgpOworCisgICAg
Ly8gSW5pdGlhbGl6ZXMgdGhlIGdyYXBoaWNzIGNvbnRleHQ7IHNob3VsZCBiZSB0aGUgZmlyc3Qg
b3BlcmF0aW9uIHBlcmZvcm1lZAorICAgIC8vIG9uIG5ld2x5LWNvbnN0cnVjdGVkIGluc3RhbmNl
cy4gUmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3MuCisgICAgdmlydHVhbCBib29sIGluaXRpYWxpemUo
QXR0cmlidXRlcykgPSAwOworCisgICAgLy8gTWFrZXMgdGhlIE9wZW5HTCBjb250ZXh0IGN1cnJl
bnQgb24gdGhlIGN1cnJlbnQgdGhyZWFkLiBSZXR1cm5zIHRydWUgb24KKyAgICAvLyBzdWNjZXNz
LgorICAgIHZpcnR1YWwgYm9vbCBtYWtlQ29udGV4dEN1cnJlbnQoKSA9IDA7CisKKyAgICAvLyBU
aGUgc2l6ZSBvZiB0aGUgcmVnaW9uIGludG8gd2hpY2ggdGhpcyBXZWJHcmFwaGljc0NvbnRleHQz
RCBpcyByZW5kZXJpbmcuCisgICAgLy8gUmV0dXJucyB0aGUgbGFzdCB2YWx1ZXMgcGFzc2VkIHRv
IHJlc2hhcGUoKS4KKyAgICB2aXJ0dWFsIGludCB3aWR0aCgpID0gMDsKKyAgICB2aXJ0dWFsIGlu
dCBoZWlnaHQoKSA9IDA7CisKKyAgICAvLyBIZWxwZXIgdG8gcmV0dXJuIHRoZSBzaXplIGluIGJ5
dGVzIG9mIE9wZW5HTCBkYXRhIHR5cGVzCisgICAgLy8gbGlrZSBHTF9GTE9BVCwgR0xfSU5ULCBl
dGMuCisgICAgdmlydHVhbCBpbnQgc2l6ZUluQnl0ZXMoaW50IHR5cGUpID0gMDsKKworICAgIC8v
IFJlc2l6ZXMgdGhlIHJlZ2lvbiBpbnRvIHdoaWNoIHRoaXMgV2ViR3JhcGhpY3NDb250ZXh0M0Qg
aXMgZHJhd2luZy4KKyAgICB2aXJ0dWFsIHZvaWQgcmVzaGFwZShpbnQgd2lkdGgsIGludCBoZWln
aHQpID0gMDsKKworICAgIC8vIEhlbHBlciBmb3Igc29mdHdhcmUgY29tcG9zaXRpbmcgcGF0aC4g
UmVhZHMgYmFjayB0aGUgZnJhbWUgYnVmZmVyIGludG8KKyAgICAvLyB0aGUgbWVtb3J5IHJlZ2lv
biBwb2ludGVkIHRvIGJ5ICJwaXhlbHMiIHdpdGggc2l6ZSAiYnVmZmVyU2l6ZSIuIEl0IGlzCisg
ICAgLy8gZXhwZWN0ZWQgdGhhdCB0aGUgc3RvcmFnZSBmb3IgInBpeGVscyIgY292ZXJzICg0ICog
d2lkdGggKiBoZWlnaHQpIGJ5dGVzLgorICAgIC8vIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzLgor
ICAgIHZpcnR1YWwgYm9vbCByZWFkQmFja0ZyYW1lYnVmZmVyKHVuc2lnbmVkIGNoYXIqIHBpeGVs
cywgc2l6ZV90IGJ1ZmZlclNpemUpID0gMDsKKworICAgIC8vIFN5bnRoZXNpemVzIGFuIE9wZW5H
TCBlcnJvciB3aGljaCB3aWxsIGJlIHJldHVybmVkIGZyb20gYQorICAgIC8vIGxhdGVyIGNhbGwg
dG8gZ2V0RXJyb3IuIFRoaXMgaXMgdXNlZCB0byBlbXVsYXRlIE9wZW5HTCBFUworICAgIC8vIDIu
MCBiZWhhdmlvciBvbiB0aGUgZGVza3RvcCBhbmQgdG8gZW5mb3JjZSBhZGRpdGlvbmFsIGVycm9y
CisgICAgLy8gY2hlY2tpbmcgbWFuZGF0ZWQgYnkgV2ViR0wuCisgICAgLy8KKyAgICAvLyBQZXIg
dGhlIGJlaGF2aW9yIG9mIGdsR2V0RXJyb3IsIHRoaXMgc3RvcmVzIGF0IG1vc3Qgb25lCisgICAg
Ly8gaW5zdGFuY2Ugb2YgYW55IGdpdmVuIGVycm9yLCBhbmQgcmV0dXJucyB0aGVtIGZyb20gY2Fs
bHMgdG8KKyAgICAvLyBnZXRFcnJvciBpbiB0aGUgb3JkZXIgdGhleSB3ZXJlIGFkZGVkLgorICAg
IHZpcnR1YWwgdm9pZCBzeW50aGVzaXplR0xFcnJvcih1bnNpZ25lZCBsb25nIGVycm9yKSA9IDA7
CisKKyAgICAvLyBUaGUgZW50cnkgcG9pbnRzIGJlbG93IG1hcCBkaXJlY3RseSB0byB0aGUgT3Bl
bkdMIEVTIDIuMCBBUEkuCisgICAgLy8gU2VlOiBodHRwOi8vd3d3Lmtocm9ub3Mub3JnL3JlZ2lz
dHJ5L2dsZXMvCisgICAgLy8gYW5kOiBodHRwOi8vd3d3Lmtocm9ub3Mub3JnL29wZW5nbGVzL3Nk
ay9kb2NzL21hbi8KKyAgICB2aXJ0dWFsIHZvaWQgYWN0aXZlVGV4dHVyZSh1bnNpZ25lZCBsb25n
IHRleHR1cmUpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoU2hhZGVyKFdlYkdMSWQgcHJv
Z3JhbSwgV2ViR0xJZCBzaGFkZXIpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgYmluZEF0dHJpYkxv
Y2F0aW9uKFdlYkdMSWQgcHJvZ3JhbSwgdW5zaWduZWQgbG9uZyBpbmRleCwgY29uc3QgY2hhciog
bmFtZSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBiaW5kQnVmZmVyKHVuc2lnbmVkIGxvbmcgdGFy
Z2V0LCBXZWJHTElkIGJ1ZmZlcikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBiaW5kRnJhbWVidWZm
ZXIodW5zaWduZWQgbG9uZyB0YXJnZXQsIFdlYkdMSWQgZnJhbWVidWZmZXIpID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgYmluZFJlbmRlcmJ1ZmZlcih1bnNpZ25lZCBsb25nIHRhcmdldCwgV2ViR0xJ
ZCByZW5kZXJidWZmZXIpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgYmluZFRleHR1cmUodW5zaWdu
ZWQgbG9uZyB0YXJnZXQsIFdlYkdMSWQgdGV4dHVyZSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBi
bGVuZENvbG9yKGRvdWJsZSByZWQsIGRvdWJsZSBncmVlbiwgZG91YmxlIGJsdWUsIGRvdWJsZSBh
bHBoYSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBibGVuZEVxdWF0aW9uKHVuc2lnbmVkIGxvbmcg
bW9kZSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBibGVuZEVxdWF0aW9uU2VwYXJhdGUodW5zaWdu
ZWQgbG9uZyBtb2RlUkdCLCB1bnNpZ25lZCBsb25nIG1vZGVBbHBoYSkgPSAwOworICAgIHZpcnR1
YWwgdm9pZCBibGVuZEZ1bmModW5zaWduZWQgbG9uZyBzZmFjdG9yLCB1bnNpZ25lZCBsb25nIGRm
YWN0b3IpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgYmxlbmRGdW5jU2VwYXJhdGUodW5zaWduZWQg
bG9uZyBzcmNSR0IsIHVuc2lnbmVkIGxvbmcgZHN0UkdCLCB1bnNpZ25lZCBsb25nIHNyY0FscGhh
LCB1bnNpZ25lZCBsb25nIGRzdEFscGhhKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgYnVmZmVy
RGF0YSh1bnNpZ25lZCBsb25nIHRhcmdldCwgaW50IHNpemUsIGNvbnN0IHZvaWQqIGRhdGEsIHVu
c2lnbmVkIGxvbmcgdXNhZ2UpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgYnVmZmVyU3ViRGF0YSh1
bnNpZ25lZCBsb25nIHRhcmdldCwgbG9uZyBvZmZzZXQsIGludCBzaXplLCBjb25zdCB2b2lkKiBk
YXRhKSA9IDA7CisKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGxvbmcgY2hlY2tGcmFtZWJ1ZmZlclN0
YXR1cyh1bnNpZ25lZCBsb25nIHRhcmdldCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBjbGVhcih1
bnNpZ25lZCBsb25nIG1hc2spID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY2xlYXJDb2xvcihkb3Vi
bGUgcmVkLCBkb3VibGUgZ3JlZW4sIGRvdWJsZSBibHVlLCBkb3VibGUgYWxwaGEpID0gMDsKKyAg
ICB2aXJ0dWFsIHZvaWQgY2xlYXJEZXB0aChkb3VibGUgZGVwdGgpID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgY2xlYXJTdGVuY2lsKGxvbmcgcykgPSAwOworICAgIHZpcnR1YWwgdm9pZCBjb2xvck1h
c2soYm9vbCByZWQsIGJvb2wgZ3JlZW4sIGJvb2wgYmx1ZSwgYm9vbCBhbHBoYSkgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBjb21waWxlU2hhZGVyKFdlYkdMSWQgc2hhZGVyKSA9IDA7CisKKyAgICB2
aXJ0dWFsIHZvaWQgY29weVRleEltYWdlMkQodW5zaWduZWQgbG9uZyB0YXJnZXQsIGxvbmcgbGV2
ZWwsIHVuc2lnbmVkIGxvbmcgaW50ZXJuYWxmb3JtYXQsIGxvbmcgeCwgbG9uZyB5LCB1bnNpZ25l
ZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCwgbG9uZyBib3JkZXIpID0gMDsKKyAg
ICB2aXJ0dWFsIHZvaWQgY29weVRleFN1YkltYWdlMkQodW5zaWduZWQgbG9uZyB0YXJnZXQsIGxv
bmcgbGV2ZWwsIGxvbmcgeG9mZnNldCwgbG9uZyB5b2Zmc2V0LCBsb25nIHgsIGxvbmcgeSwgdW5z
aWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQpID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgY3VsbEZhY2UodW5zaWduZWQgbG9uZyBtb2RlKSA9IDA7CisgICAgdmlydHVhbCB2b2lk
IGRlcHRoRnVuYyh1bnNpZ25lZCBsb25nIGZ1bmMpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGVw
dGhNYXNrKGJvb2wgZmxhZykgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkZXB0aFJhbmdlKGRvdWJs
ZSB6TmVhciwgZG91YmxlIHpGYXIpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoU2hhZGVy
KFdlYkdMSWQgcHJvZ3JhbSwgV2ViR0xJZCBzaGFkZXIpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
ZGlzYWJsZSh1bnNpZ25lZCBsb25nIGNhcCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkaXNhYmxl
VmVydGV4QXR0cmliQXJyYXkodW5zaWduZWQgbG9uZyBpbmRleCkgPSAwOworICAgIHZpcnR1YWwg
dm9pZCBkcmF3QXJyYXlzKHVuc2lnbmVkIGxvbmcgbW9kZSwgbG9uZyBmaXJzdCwgbG9uZyBjb3Vu
dCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkcmF3RWxlbWVudHModW5zaWduZWQgbG9uZyBtb2Rl
LCB1bnNpZ25lZCBsb25nIGNvdW50LCB1bnNpZ25lZCBsb25nIHR5cGUsIGxvbmcgb2Zmc2V0KSA9
IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgZW5hYmxlKHVuc2lnbmVkIGxvbmcgY2FwKSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIGVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHVuc2lnbmVkIGxvbmcgaW5k
ZXgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZmluaXNoKCkgPSAwOworICAgIHZpcnR1YWwgdm9p
ZCBmbHVzaCgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZnJhbWVidWZmZXJSZW5kZXJidWZmZXIo
dW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgYXR0YWNobWVudCwgdW5zaWduZWQg
bG9uZyByZW5kZXJidWZmZXJ0YXJnZXQsIFdlYkdMSWQgcmVuZGVyYnVmZmVyKSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIGZyYW1lYnVmZmVyVGV4dHVyZTJEKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1
bnNpZ25lZCBsb25nIGF0dGFjaG1lbnQsIHVuc2lnbmVkIGxvbmcgdGV4dGFyZ2V0LCBXZWJHTElk
IHRleHR1cmUsIGxvbmcgbGV2ZWwpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZnJvbnRGYWNlKHVu
c2lnbmVkIGxvbmcgbW9kZSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBnZW5lcmF0ZU1pcG1hcCh1
bnNpZ25lZCBsb25nIHRhcmdldCkgPSAwOworCisgICAgdmlydHVhbCBib29sIGdldEFjdGl2ZUF0
dHJpYihXZWJHTElkIHByb2dyYW0sIHVuc2lnbmVkIGxvbmcgaW5kZXgsIEFjdGl2ZUluZm8mKSA9
IDA7CisgICAgdmlydHVhbCBib29sIGdldEFjdGl2ZVVuaWZvcm0oV2ViR0xJZCBwcm9ncmFtLCB1
bnNpZ25lZCBsb25nIGluZGV4LCBBY3RpdmVJbmZvJikgPSAwOworCisgICAgdmlydHVhbCBpbnQg
IGdldEF0dHJpYkxvY2F0aW9uKFdlYkdMSWQgcHJvZ3JhbSwgY29uc3QgY2hhciogbmFtZSkgPSAw
OworCisgICAgdmlydHVhbCB2b2lkIGdldEJvb2xlYW52KHVuc2lnbmVkIGxvbmcgcG5hbWUsIHVu
c2lnbmVkIGNoYXIqIHZhbHVlKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0QnVmZmVyUGFy
YW1ldGVyaXYodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgcG5hbWUsIGludCog
dmFsdWUpID0gMDsKKworICAgIHZpcnR1YWwgQXR0cmlidXRlcyBnZXRDb250ZXh0QXR0cmlidXRl
cygpID0gMDsKKworICAgIHZpcnR1YWwgdW5zaWduZWQgbG9uZyBnZXRFcnJvcigpID0gMDsKKwor
ICAgIHZpcnR1YWwgdm9pZCBnZXRGbG9hdHYodW5zaWduZWQgbG9uZyBwbmFtZSwgZmxvYXQqIHZh
bHVlKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFy
YW1ldGVyaXYodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgYXR0YWNobWVudCwg
dW5zaWduZWQgbG9uZyBwbmFtZSwgaW50KiB2YWx1ZSkgPSAwOworCisgICAgdmlydHVhbCB2b2lk
IGdldEludGVnZXJ2KHVuc2lnbmVkIGxvbmcgcG5hbWUsIGludCogdmFsdWUpID0gMDsKKworICAg
IHZpcnR1YWwgdm9pZCBnZXRQcm9ncmFtaXYoV2ViR0xJZCBwcm9ncmFtLCB1bnNpZ25lZCBsb25n
IHBuYW1lLCBpbnQqIHZhbHVlKSA9IDA7CisKKyAgICB2aXJ0dWFsIFdlYlN0cmluZyBnZXRQcm9n
cmFtSW5mb0xvZyhXZWJHTElkIHByb2dyYW0pID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBnZXRS
ZW5kZXJidWZmZXJQYXJhbWV0ZXJpdih1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9u
ZyBwbmFtZSwgaW50KiB2YWx1ZSkgPSAwOworCisgICAgdmlydHVhbCB2b2lkIGdldFNoYWRlcml2
KFdlYkdMSWQgc2hhZGVyLCB1bnNpZ25lZCBsb25nIHBuYW1lLCBpbnQqIHZhbHVlKSA9IDA7CisK
KyAgICB2aXJ0dWFsIFdlYlN0cmluZyBnZXRTaGFkZXJJbmZvTG9nKFdlYkdMSWQgc2hhZGVyKSA9
IDA7CisKKyAgICAvLyBUQkQKKyAgICAvLyB2b2lkIGdsR2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0
IChHTGVudW0gc2hhZGVydHlwZSwgR0xlbnVtIHByZWNpc2lvbnR5cGUsIEdMaW50KiByYW5nZSwg
R0xpbnQqIHByZWNpc2lvbik7CisKKyAgICB2aXJ0dWFsIFdlYlN0cmluZyBnZXRTaGFkZXJTb3Vy
Y2UoV2ViR0xJZCBzaGFkZXIpID0gMDsKKyAgICB2aXJ0dWFsIFdlYlN0cmluZyBnZXRTdHJpbmco
dW5zaWduZWQgbG9uZyBuYW1lKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0VGV4UGFyYW1l
dGVyZnYodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgcG5hbWUsIGZsb2F0KiB2
YWx1ZSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBnZXRUZXhQYXJhbWV0ZXJpdih1bnNpZ25lZCBs
b25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBwbmFtZSwgaW50KiB2YWx1ZSkgPSAwOworCisgICAg
dmlydHVhbCB2b2lkIGdldFVuaWZvcm1mdihXZWJHTElkIHByb2dyYW0sIGxvbmcgbG9jYXRpb24s
IGZsb2F0KiB2YWx1ZSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBnZXRVbmlmb3JtaXYoV2ViR0xJ
ZCBwcm9ncmFtLCBsb25nIGxvY2F0aW9uLCBpbnQqIHZhbHVlKSA9IDA7CisKKyAgICB2aXJ0dWFs
IGxvbmcgZ2V0VW5pZm9ybUxvY2F0aW9uKFdlYkdMSWQgcHJvZ3JhbSwgY29uc3QgY2hhciogbmFt
ZSkgPSAwOworCisgICAgdmlydHVhbCB2b2lkIGdldFZlcnRleEF0dHJpYmZ2KHVuc2lnbmVkIGxv
bmcgaW5kZXgsIHVuc2lnbmVkIGxvbmcgcG5hbWUsIGZsb2F0KiB2YWx1ZSkgPSAwOworICAgIHZp
cnR1YWwgdm9pZCBnZXRWZXJ0ZXhBdHRyaWJpdih1bnNpZ25lZCBsb25nIGluZGV4LCB1bnNpZ25l
ZCBsb25nIHBuYW1lLCBpbnQqIHZhbHVlKSA9IDA7CisKKyAgICB2aXJ0dWFsIGxvbmcgZ2V0VmVy
dGV4QXR0cmliT2Zmc2V0KHVuc2lnbmVkIGxvbmcgaW5kZXgsIHVuc2lnbmVkIGxvbmcgcG5hbWUp
ID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBoaW50KHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNp
Z25lZCBsb25nIG1vZGUpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNCdWZmZXIoV2ViR0xJZCBi
dWZmZXIpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNFbmFibGVkKHVuc2lnbmVkIGxvbmcgY2Fw
KSA9IDA7CisgICAgdmlydHVhbCBib29sIGlzRnJhbWVidWZmZXIoV2ViR0xJZCBmcmFtZWJ1ZmZl
cikgPSAwOworICAgIHZpcnR1YWwgYm9vbCBpc1Byb2dyYW0oV2ViR0xJZCBwcm9ncmFtKSA9IDA7
CisgICAgdmlydHVhbCBib29sIGlzUmVuZGVyYnVmZmVyKFdlYkdMSWQgcmVuZGVyYnVmZmVyKSA9
IDA7CisgICAgdmlydHVhbCBib29sIGlzU2hhZGVyKFdlYkdMSWQgc2hhZGVyKSA9IDA7CisgICAg
dmlydHVhbCBib29sIGlzVGV4dHVyZShXZWJHTElkIHRleHR1cmUpID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgbGluZVdpZHRoKGRvdWJsZSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBsaW5rUHJvZ3Jh
bShXZWJHTElkIHByb2dyYW0pID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcGl4ZWxTdG9yZWkodW5z
aWduZWQgbG9uZyBwbmFtZSwgbG9uZyBwYXJhbSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBwb2x5
Z29uT2Zmc2V0KGRvdWJsZSBmYWN0b3IsIGRvdWJsZSB1bml0cykgPSAwOworCisgICAgdmlydHVh
bCB2b2lkIHJlYWRQaXhlbHMobG9uZyB4LCBsb25nIHksIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVu
c2lnbmVkIGxvbmcgaGVpZ2h0LCB1bnNpZ25lZCBsb25nIGZvcm1hdCwgdW5zaWduZWQgbG9uZyB0
eXBlLCB2b2lkKiBwaXhlbHMpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCByZWxlYXNlU2hhZGVy
Q29tcGlsZXIoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlbmRlcmJ1ZmZlclN0b3JhZ2UodW5z
aWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgaW50ZXJuYWxmb3JtYXQsIHVuc2lnbmVk
IGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0KSA9IDA7CisgICAgdmlydHVhbCB2b2lk
IHNhbXBsZUNvdmVyYWdlKGRvdWJsZSB2YWx1ZSwgYm9vbCBpbnZlcnQpID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgc2Npc3Nvcihsb25nIHgsIGxvbmcgeSwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5z
aWduZWQgbG9uZyBoZWlnaHQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2hhZGVyU291cmNlKFdl
YkdMSWQgc2hhZGVyLCBjb25zdCBjaGFyKiBzdHJpbmcpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
c3RlbmNpbEZ1bmModW5zaWduZWQgbG9uZyBmdW5jLCBsb25nIHJlZiwgdW5zaWduZWQgbG9uZyBt
YXNrKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHN0ZW5jaWxGdW5jU2VwYXJhdGUodW5zaWduZWQg
bG9uZyBmYWNlLCB1bnNpZ25lZCBsb25nIGZ1bmMsIGxvbmcgcmVmLCB1bnNpZ25lZCBsb25nIG1h
c2spID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc3RlbmNpbE1hc2sodW5zaWduZWQgbG9uZyBtYXNr
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHN0ZW5jaWxNYXNrU2VwYXJhdGUodW5zaWduZWQgbG9u
ZyBmYWNlLCB1bnNpZ25lZCBsb25nIG1hc2spID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc3RlbmNp
bE9wKHVuc2lnbmVkIGxvbmcgZmFpbCwgdW5zaWduZWQgbG9uZyB6ZmFpbCwgdW5zaWduZWQgbG9u
ZyB6cGFzcykgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzdGVuY2lsT3BTZXBhcmF0ZSh1bnNpZ25l
ZCBsb25nIGZhY2UsIHVuc2lnbmVkIGxvbmcgZmFpbCwgdW5zaWduZWQgbG9uZyB6ZmFpbCwgdW5z
aWduZWQgbG9uZyB6cGFzcykgPSAwOworCisgICAgdmlydHVhbCB2b2lkIHRleEltYWdlMkQodW5z
aWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBsZXZlbCwgdW5zaWduZWQgaW50ZXJuYWxmb3JtYXQsIHVu
c2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQsIHVuc2lnbmVkIGJvcmRlciwgdW5zaWduZWQg
Zm9ybWF0LCB1bnNpZ25lZCB0eXBlLCBjb25zdCB2b2lkKiBwaXhlbHMpID0gMDsKKworICAgIHZp
cnR1YWwgdm9pZCB0ZXhQYXJhbWV0ZXJmKHVuc2lnbmVkIHRhcmdldCwgdW5zaWduZWQgcG5hbWUs
IGZsb2F0IHBhcmFtKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHRleFBhcmFtZXRlcmkodW5zaWdu
ZWQgdGFyZ2V0LCB1bnNpZ25lZCBwbmFtZSwgaW50IHBhcmFtKSA9IDA7CisKKyAgICB2aXJ0dWFs
IHZvaWQgdGV4U3ViSW1hZ2UyRCh1bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVkIGxldmVsLCB1bnNp
Z25lZCB4b2Zmc2V0LCB1bnNpZ25lZCB5b2Zmc2V0LCB1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQg
aGVpZ2h0LCB1bnNpZ25lZCBmb3JtYXQsIHVuc2lnbmVkIHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVs
cykgPSAwOworCisgICAgdmlydHVhbCB2b2lkIHVuaWZvcm0xZihsb25nIGxvY2F0aW9uLCBmbG9h
dCB4KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHVuaWZvcm0xZnYobG9uZyBsb2NhdGlvbiwgaW50
IGNvdW50LCBmbG9hdCogdikgPSAwOworICAgIHZpcnR1YWwgdm9pZCB1bmlmb3JtMWkobG9uZyBs
b2NhdGlvbiwgaW50IHgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdW5pZm9ybTFpdihsb25nIGxv
Y2F0aW9uLCBpbnQgY291bnQsIGludCogdikgPSAwOworICAgIHZpcnR1YWwgdm9pZCB1bmlmb3Jt
MmYobG9uZyBsb2NhdGlvbiwgZmxvYXQgeCwgZmxvYXQgeSkgPSAwOworICAgIHZpcnR1YWwgdm9p
ZCB1bmlmb3JtMmZ2KGxvbmcgbG9jYXRpb24sIGludCBjb3VudCwgZmxvYXQqIHYpID0gMDsKKyAg
ICB2aXJ0dWFsIHZvaWQgdW5pZm9ybTJpKGxvbmcgbG9jYXRpb24sIGludCB4LCBpbnQgeSkgPSAw
OworICAgIHZpcnR1YWwgdm9pZCB1bmlmb3JtMml2KGxvbmcgbG9jYXRpb24sIGludCBjb3VudCwg
aW50KiB2KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHVuaWZvcm0zZihsb25nIGxvY2F0aW9uLCBm
bG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB6KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHVuaWZvcm0z
ZnYobG9uZyBsb2NhdGlvbiwgaW50IGNvdW50LCBmbG9hdCogdikgPSAwOworICAgIHZpcnR1YWwg
dm9pZCB1bmlmb3JtM2kobG9uZyBsb2NhdGlvbiwgaW50IHgsIGludCB5LCBpbnQgeikgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCB1bmlmb3JtM2l2KGxvbmcgbG9jYXRpb24sIGludCBjb3VudCwgaW50
KiB2KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHVuaWZvcm00Zihsb25nIGxvY2F0aW9uLCBmbG9h
dCB4LCBmbG9hdCB5LCBmbG9hdCB6LCBmbG9hdCB3KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHVu
aWZvcm00ZnYobG9uZyBsb2NhdGlvbiwgaW50IGNvdW50LCBmbG9hdCogdikgPSAwOworICAgIHZp
cnR1YWwgdm9pZCB1bmlmb3JtNGkobG9uZyBsb2NhdGlvbiwgaW50IHgsIGludCB5LCBpbnQgeiwg
aW50IHcpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdW5pZm9ybTRpdihsb25nIGxvY2F0aW9uLCBp
bnQgY291bnQsIGludCogdikgPSAwOworICAgIHZpcnR1YWwgdm9pZCB1bmlmb3JtTWF0cml4MmZ2
KGxvbmcgbG9jYXRpb24sIGludCBjb3VudCwgYm9vbCB0cmFuc3Bvc2UsIGNvbnN0IGZsb2F0KiB2
YWx1ZSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCB1bmlmb3JtTWF0cml4M2Z2KGxvbmcgbG9jYXRp
b24sIGludCBjb3VudCwgYm9vbCB0cmFuc3Bvc2UsIGNvbnN0IGZsb2F0KiB2YWx1ZSkgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCB1bmlmb3JtTWF0cml4NGZ2KGxvbmcgbG9jYXRpb24sIGludCBjb3Vu
dCwgYm9vbCB0cmFuc3Bvc2UsIGNvbnN0IGZsb2F0KiB2YWx1ZSkgPSAwOworCisgICAgdmlydHVh
bCB2b2lkIHVzZVByb2dyYW0oV2ViR0xJZCBwcm9ncmFtKSA9IDA7CisgICAgdmlydHVhbCB2b2lk
IHZhbGlkYXRlUHJvZ3JhbShXZWJHTElkIHByb2dyYW0pID0gMDsKKworICAgIHZpcnR1YWwgdm9p
ZCB2ZXJ0ZXhBdHRyaWIxZih1bnNpZ25lZCBsb25nIGluZHgsIGZsb2F0IHgpID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgdmVydGV4QXR0cmliMWZ2KHVuc2lnbmVkIGxvbmcgaW5keCwgY29uc3QgZmxv
YXQqIHZhbHVlcykgPSAwOworICAgIHZpcnR1YWwgdm9pZCB2ZXJ0ZXhBdHRyaWIyZih1bnNpZ25l
ZCBsb25nIGluZHgsIGZsb2F0IHgsIGZsb2F0IHkpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdmVy
dGV4QXR0cmliMmZ2KHVuc2lnbmVkIGxvbmcgaW5keCwgY29uc3QgZmxvYXQqIHZhbHVlcykgPSAw
OworICAgIHZpcnR1YWwgdm9pZCB2ZXJ0ZXhBdHRyaWIzZih1bnNpZ25lZCBsb25nIGluZHgsIGZs
b2F0IHgsIGZsb2F0IHksIGZsb2F0IHopID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdmVydGV4QXR0
cmliM2Z2KHVuc2lnbmVkIGxvbmcgaW5keCwgY29uc3QgZmxvYXQqIHZhbHVlcykgPSAwOworICAg
IHZpcnR1YWwgdm9pZCB2ZXJ0ZXhBdHRyaWI0Zih1bnNpZ25lZCBsb25nIGluZHgsIGZsb2F0IHgs
IGZsb2F0IHksIGZsb2F0IHosIGZsb2F0IHcpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdmVydGV4
QXR0cmliNGZ2KHVuc2lnbmVkIGxvbmcgaW5keCwgY29uc3QgZmxvYXQqIHZhbHVlcykgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCB2ZXJ0ZXhBdHRyaWJQb2ludGVyKHVuc2lnbmVkIGxvbmcgaW5keCwg
aW50IHNpemUsIGludCB0eXBlLCBib29sIG5vcm1hbGl6ZWQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBzdHJpZGUsIHVuc2lnbmVkIGxvbmcgb2Zm
c2V0KSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgdmlld3BvcnQobG9uZyB4LCBsb25nIHksIHVu
c2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0KSA9IDA7CisKKyAgICAvLyBT
dXBwb3J0IGZvciBidWZmZXIgY3JlYXRpb24gYW5kIGRlbGV0aW9uLgorICAgIHZpcnR1YWwgdW5z
aWduZWQgY3JlYXRlQnVmZmVyKCkgPSAwOworICAgIHZpcnR1YWwgdW5zaWduZWQgY3JlYXRlRnJh
bWVidWZmZXIoKSA9IDA7CisgICAgdmlydHVhbCB1bnNpZ25lZCBjcmVhdGVQcm9ncmFtKCkgPSAw
OworICAgIHZpcnR1YWwgdW5zaWduZWQgY3JlYXRlUmVuZGVyYnVmZmVyKCkgPSAwOworICAgIHZp
cnR1YWwgdW5zaWduZWQgY3JlYXRlU2hhZGVyKHVuc2lnbmVkIGxvbmcpID0gMDsKKyAgICB2aXJ0
dWFsIHVuc2lnbmVkIGNyZWF0ZVRleHR1cmUoKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgZGVs
ZXRlQnVmZmVyKHVuc2lnbmVkKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZUZyYW1lYnVm
ZmVyKHVuc2lnbmVkKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZVByb2dyYW0odW5zaWdu
ZWQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlUmVuZGVyYnVmZmVyKHVuc2lnbmVkKSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZVNoYWRlcih1bnNpZ25lZCkgPSAwOworICAgIHZp
cnR1YWwgdm9pZCBkZWxldGVUZXh0dXJlKHVuc2lnbmVkKSA9IDA7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKKworI2VuZGlmCkluZGV4OiBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYktp
dENsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViS2l0Q2xp
ZW50LmgJKHJldmlzaW9uIDU2MjY2KQorKysgV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJLaXRD
bGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDksNiArNDksNyBAQCBjbGFzcyBXZWJBcHBsaWNh
dGlvbkNhY2hlSG9zdDsKIGNsYXNzIFdlYkFwcGxpY2F0aW9uQ2FjaGVIb3N0Q2xpZW50OwogY2xh
c3MgV2ViQ2xpcGJvYXJkOwogY2xhc3MgV2ViQ29va2llSmFyOworY2xhc3MgV2ViR3JhcGhpY3ND
b250ZXh0M0Q7CiBjbGFzcyBXZWJJbmRleGVkRGF0YWJhc2U7CiBjbGFzcyBXZWJNZXNzYWdlUG9y
dENoYW5uZWw7CiBjbGFzcyBXZWJNaW1lUmVnaXN0cnk7CkBAIC0yNjksNiArMjcwLDEyIEBAIHB1
YmxpYzoKICAgICAvLyBDYWxsYWJsZSBmcm9tIGEgYmFja2dyb3VuZCBXZWJLaXQgdGhyZWFkLgog
ICAgIHZpcnR1YWwgdm9pZCBjYWxsT25NYWluVGhyZWFkKHZvaWQgKCpmdW5jKSgpKSB7IH0KIAor
ICAgIC8vIFdlYkdMIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAvLyBNYXkgcmV0dXJuIG51bGwgaWYgV2ViR0wgaXMg
bm90IHN1cHBvcnRlZC4KKyAgICAvLyBSZXR1cm5zIG5ld2x5IGFsbG9jYXRlZCBXZWJHcmFwaGlj
c0NvbnRleHQzRCBpbnN0YW5jZS4KKyAgICB2aXJ0dWFsIFdlYkdyYXBoaWNzQ29udGV4dDNEKiBj
cmVhdGVHcmFwaGljc0NvbnRleHQzRCgpIHsgcmV0dXJuIDA7IH0KKwogcHJvdGVjdGVkOgogICAg
IH5XZWJLaXRDbGllbnQoKSB7IH0KIH07CkluZGV4OiBXZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBo
aWNzQ29udGV4dDNELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBo
aWNzQ29udGV4dDNELmNwcAkocmV2aXNpb24gNTYyNjYpCisrKyBXZWJLaXQvY2hyb21pdW0vc3Jj
L0dyYXBoaWNzQ29udGV4dDNELmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsMTMgKzM0LDEyIEBA
CiAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgogCi0jaW5jbHVkZSAiQ2FjaGVkSW1h
Z2UuaCIKICNpbmNsdWRlICJDU3RyaW5nLmgiCisjaW5jbHVkZSAiQ2FjaGVkSW1hZ2UuaCIKICNp
bmNsdWRlICJIVE1MQ2FudmFzRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxJbWFnZUVsZW1lbnQu
aCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIkltYWdlRGF0YS5oIgotI2lu
Y2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiV2ViR0xCdWZmZXIuaCIKICNpbmNs
dWRlICJXZWJHTEJ5dGVBcnJheS5oIgogI2luY2x1ZGUgIldlYkdMRmxvYXRBcnJheS5oIgpAQCAt
NTIsMzkgKzUxLDQxIEBACiAjaW5jbHVkZSAiV2ViR0xTaGFkZXIuaCIKICNpbmNsdWRlICJXZWJH
TFRleHR1cmUuaCIKICNpbmNsdWRlICJXZWJHTFVuc2lnbmVkQnl0ZUFycmF5LmgiCisjaW5jbHVk
ZSAiV2ViR3JhcGhpY3NDb250ZXh0M0QuaCIKKyNpbmNsdWRlICJXZWJHcmFwaGljc0NvbnRleHQz
RERlZmF1bHRJbXBsLmgiCisjaW5jbHVkZSAiV2ViS2l0LmgiCisjaW5jbHVkZSAiV2ViS2l0Q2xp
ZW50LmgiCiAKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+
CiAKLSNpZiBPUyhXSU5ET1dTKQotI2luY2x1ZGUgPHdpbmRvd3MuaD4KLSNlbmRpZgotCi0jaW5j
bHVkZSAiR0wvZ2xldy5oIgotCiAjaWYgUExBVEZPUk0oQ0cpCiAjaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0LmgiCiAjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NHQ29udGV4dC5oPgogI2luY2x1ZGUg
PENvcmVHcmFwaGljcy9DR0ltYWdlLmg+Ci0jaW5jbHVkZSA8T3BlbkdML09wZW5HTC5oPgotI2Vs
c2UKLSNkZWZpbmUgRkxJUF9GUkFNRUJVRkZFUl9WRVJUSUNBTExZCi0jZW5kaWYKLQotI2lmIE9T
KERBUldJTikKLSNkZWZpbmUgVVNFX1RFWFRVUkVfUkVDVEFOR0xFX0ZPUl9GUkFNRUJVRkZFUgog
I2VuZGlmCiAKLSNpZiBPUyhMSU5VWCkKLSNpbmNsdWRlIDxkbGZjbi5oPgotI2luY2x1ZGUgIkdM
L2dseGV3LmgiCi0jZW5kaWYKKy8vIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKLXVzaW5nIG5hbWVz
cGFjZSBzdGQ7CisvLyBUaGVyZSBhcmUgdHdvIGxldmVscyBvZiBkZWxlZ2F0aW9uIGluIHRoaXMg
ZmlsZToKKy8vCisvLyAgIDEuIEdyYXBoaWNzQ29udGV4dDNEIGRlbGVnYXRlcyB0byBHcmFwaGlj
c0NvbnRleHQzREludGVybmFsLiBUaGlzIGlzIGRvbmUKKy8vICAgICAgc28gdGhhdCB3ZSBoYXZl
IHNvbWUgcGxhY2UgdG8gc3RvcmUgZGF0YSBtZW1iZXJzIGNvbW1vbiBhbW9uZworLy8gICAgICBp
bXBsZW1lbnRhdGlvbnM7IEdyYXBoaWNzQ29udGV4dDNEIG9ubHkgcHJvdmlkZXMgdXMgdGhlIG1f
aW50ZXJuYWwKKy8vICAgICAgcG9pbnRlci4gV2UgYWx3YXlzIGRlbGVnYXRlIHRvIHRoZSBHcmFw
aGljc0NvbnRleHQzREludGVybmFsLiBXaGlsZSB3ZQorLy8gICAgICBjb3VsZCBzaWRlc3RlcCBp
dCBhbmQgZ28gZGlyZWN0bHkgdG8gdGhlIFdlYkdyYXBoaWNzQ29udGV4dDNEIGluIHNvbWUKKy8v
ICAgICAgY2FzZXMsIGl0IGlzIGJldHRlciBmb3IgY29uc2lzdGVuY3kgdG8gYWx3YXlzIGRlbGVn
YXRlIHRocm91Z2ggaXQuCisvLworLy8gICAyLiBHcmFwaGljc0NvbnRleHQzREludGVybmFsIGRl
bGVnYXRlcyB0byBhbiBpbXBsZW1lbnRhdGlvbiBvZgorLy8gICAgICBXZWJHcmFwaGljc0NvbnRl
eHQzRC4gVGhpcyBpcyBkb25lIHNvIHdlIGhhdmUgYSBwbGFjZSB0byBpbmplY3QgYW4KKy8vICAg
ICAgaW1wbGVtZW50YXRpb24gd2hpY2ggcmVtb3RlcyB0aGUgT3BlbkdMIGNhbGxzIGFjcm9zcyBw
cm9jZXNzZXMuCisvLworLy8gVGhlIGxlZ2FjeSwgaW4tcHJvY2VzcywgaW1wbGVtZW50YXRpb24g
dXNlcyBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsLgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLS8vIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwgLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gR3Jh
cGhpY3NDb250ZXh0M0RJbnRlcm5hbAogCiAvLyBVbmNvbW1lbnQgdGhpcyB0byByZW5kZXIgdG8g
YSBzZXBhcmF0ZSB3aW5kb3cgZm9yIGRlYnVnZ2luZwogLy8gI2RlZmluZSBSRU5ERVJfVE9fREVC
VUdHSU5HX1dJTkRPVwpAQCAtOTMsODMgKzk0LDIwNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IGNsYXNzIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwgewogcHVibGljOgotICAgIEdyYXBoaWNz
Q29udGV4dDNESW50ZXJuYWwoR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cnMpOwor
ICAgIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwoKTsKICAgICB+R3JhcGhpY3NDb250ZXh0M0RJ
bnRlcm5hbCgpOwogCi0gICAgYm9vbCBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBib29sIGlu
aXRpYWxpemUoR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cnMpOwogCiAgICAgUGxh
dGZvcm1HcmFwaGljc0NvbnRleHQzRCBwbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEKCkgY29uc3Q7
CiAgICAgUGxhdGZvcm0zRE9iamVjdCBwbGF0Zm9ybVRleHR1cmUoKSBjb25zdDsKIAorICAgIGJv
b2wgbWFrZUNvbnRleHRDdXJyZW50KCk7CisKKyAgICBpbnQgc2l6ZUluQnl0ZXMoaW50IHR5cGUp
OworCiAgICAgdm9pZCByZXNoYXBlKGludCB3aWR0aCwgaW50IGhlaWdodCk7CiAKICAgICB2b2lk
IGJlZ2luUGFpbnQoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0KTsKKyAgICB2b2lkIGVu
ZFBhaW50KCk7CiAKLSAgICBib29sIHZhbGlkYXRlVGV4dHVyZVRhcmdldChpbnQgdGFyZ2V0KTsK
LSAgICBib29sIHZhbGlkYXRlVGV4dHVyZVBhcmFtZXRlcihpbnQgcGFyYW0pOwotCisgICAgLy8t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCisgICAgLy8gRW50cnkgcG9pbnRzIGZvciBXZWJHTC4KKyAgICAvLwogICAg
IHZvaWQgYWN0aXZlVGV4dHVyZSh1bnNpZ25lZCBsb25nIHRleHR1cmUpOwotICAgIHZvaWQgYmlu
ZEJ1ZmZlcih1bnNpZ25lZCBsb25nIHRhcmdldCwKLSAgICAgICAgICAgICAgICAgICAgV2ViR0xC
dWZmZXIqIGJ1ZmZlcik7Ci0gICAgdm9pZCBiaW5kRnJhbWVidWZmZXIodW5zaWduZWQgbG9uZyB0
YXJnZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgV2ViR0xGcmFtZWJ1ZmZlciogZnJhbWVi
dWZmZXIpOwotICAgIHZvaWQgYmluZFRleHR1cmUodW5zaWduZWQgbG9uZyB0YXJnZXQsCi0gICAg
ICAgICAgICAgICAgICAgICBXZWJHTFRleHR1cmUqIHRleHR1cmUpOwotICAgIHZvaWQgYnVmZmVy
RGF0YUltcGwodW5zaWduZWQgbG9uZyB0YXJnZXQsIGludCBzaXplLCBjb25zdCB2b2lkKiBkYXRh
LCB1bnNpZ25lZCBsb25nIHVzYWdlKTsKKyAgICB2b2lkIGF0dGFjaFNoYWRlcihXZWJHTFByb2dy
YW0qIHByb2dyYW0sIFdlYkdMU2hhZGVyKiBzaGFkZXIpOworICAgIHZvaWQgYmluZEF0dHJpYkxv
Y2F0aW9uKFdlYkdMUHJvZ3JhbSosIHVuc2lnbmVkIGxvbmcgaW5kZXgsIGNvbnN0IFN0cmluZyYg
bmFtZSk7CisgICAgdm9pZCBiaW5kQnVmZmVyKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBXZWJHTEJ1
ZmZlciopOworICAgIHZvaWQgYmluZEZyYW1lYnVmZmVyKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBX
ZWJHTEZyYW1lYnVmZmVyKik7CisgICAgdm9pZCBiaW5kUmVuZGVyYnVmZmVyKHVuc2lnbmVkIGxv
bmcgdGFyZ2V0LCBXZWJHTFJlbmRlcmJ1ZmZlciopOworICAgIHZvaWQgYmluZFRleHR1cmUodW5z
aWduZWQgbG9uZyB0YXJnZXQsIFdlYkdMVGV4dHVyZSogdGV4dHVyZSk7CisgICAgdm9pZCBibGVu
ZENvbG9yKGRvdWJsZSByZWQsIGRvdWJsZSBncmVlbiwgZG91YmxlIGJsdWUsIGRvdWJsZSBhbHBo
YSk7CisgICAgdm9pZCBibGVuZEVxdWF0aW9uKHVuc2lnbmVkIGxvbmcgbW9kZSk7CisgICAgdm9p
ZCBibGVuZEVxdWF0aW9uU2VwYXJhdGUodW5zaWduZWQgbG9uZyBtb2RlUkdCLCB1bnNpZ25lZCBs
b25nIG1vZGVBbHBoYSk7CisgICAgdm9pZCBibGVuZEZ1bmModW5zaWduZWQgbG9uZyBzZmFjdG9y
LCB1bnNpZ25lZCBsb25nIGRmYWN0b3IpOworICAgIHZvaWQgYmxlbmRGdW5jU2VwYXJhdGUodW5z
aWduZWQgbG9uZyBzcmNSR0IsIHVuc2lnbmVkIGxvbmcgZHN0UkdCLCB1bnNpZ25lZCBsb25nIHNy
Y0FscGhhLCB1bnNpZ25lZCBsb25nIGRzdEFscGhhKTsKKworICAgIHZvaWQgYnVmZmVyRGF0YSh1
bnNpZ25lZCBsb25nIHRhcmdldCwgaW50IHNpemUsIHVuc2lnbmVkIGxvbmcgdXNhZ2UpOworICAg
IHZvaWQgYnVmZmVyRGF0YSh1bnNpZ25lZCBsb25nIHRhcmdldCwgV2ViR0xBcnJheSogZGF0YSwg
dW5zaWduZWQgbG9uZyB1c2FnZSk7CisgICAgdm9pZCBidWZmZXJTdWJEYXRhKHVuc2lnbmVkIGxv
bmcgdGFyZ2V0LCBsb25nIG9mZnNldCwgV2ViR0xBcnJheSogZGF0YSk7CisKKyAgICB1bnNpZ25l
ZCBsb25nIGNoZWNrRnJhbWVidWZmZXJTdGF0dXModW5zaWduZWQgbG9uZyB0YXJnZXQpOworICAg
IHZvaWQgY2xlYXIodW5zaWduZWQgbG9uZyBtYXNrKTsKKyAgICB2b2lkIGNsZWFyQ29sb3IoZG91
YmxlIHJlZCwgZG91YmxlIGdyZWVuLCBkb3VibGUgYmx1ZSwgZG91YmxlIGFscGhhKTsKKyAgICB2
b2lkIGNsZWFyRGVwdGgoZG91YmxlIGRlcHRoKTsKKyAgICB2b2lkIGNsZWFyU3RlbmNpbChsb25n
IHMpOworICAgIHZvaWQgY29sb3JNYXNrKGJvb2wgcmVkLCBib29sIGdyZWVuLCBib29sIGJsdWUs
IGJvb2wgYWxwaGEpOworICAgIHZvaWQgY29tcGlsZVNoYWRlcihXZWJHTFNoYWRlciopOworCisg
ICAgdm9pZCBjb3B5VGV4SW1hZ2UyRCh1bnNpZ25lZCBsb25nIHRhcmdldCwgbG9uZyBsZXZlbCwg
dW5zaWduZWQgbG9uZyBpbnRlcm5hbGZvcm1hdCwgbG9uZyB4LCBsb25nIHksIHVuc2lnbmVkIGxv
bmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0LCBsb25nIGJvcmRlcik7CisgICAgdm9pZCBj
b3B5VGV4U3ViSW1hZ2UyRCh1bnNpZ25lZCBsb25nIHRhcmdldCwgbG9uZyBsZXZlbCwgbG9uZyB4
b2Zmc2V0LCBsb25nIHlvZmZzZXQsIGxvbmcgeCwgbG9uZyB5LCB1bnNpZ25lZCBsb25nIHdpZHRo
LCB1bnNpZ25lZCBsb25nIGhlaWdodCk7CisgICAgdm9pZCBjdWxsRmFjZSh1bnNpZ25lZCBsb25n
IG1vZGUpOworICAgIHZvaWQgZGVwdGhGdW5jKHVuc2lnbmVkIGxvbmcgZnVuYyk7CisgICAgdm9p
ZCBkZXB0aE1hc2soYm9vbCBmbGFnKTsKKyAgICB2b2lkIGRlcHRoUmFuZ2UoZG91YmxlIHpOZWFy
LCBkb3VibGUgekZhcik7CisgICAgdm9pZCBkZXRhY2hTaGFkZXIoV2ViR0xQcm9ncmFtKiwgV2Vi
R0xTaGFkZXIqKTsKKyAgICB2b2lkIGRpc2FibGUodW5zaWduZWQgbG9uZyBjYXApOwogICAgIHZv
aWQgZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KHVuc2lnbmVkIGxvbmcgaW5kZXgpOworICAgIHZv
aWQgZHJhd0FycmF5cyh1bnNpZ25lZCBsb25nIG1vZGUsIGxvbmcgZmlyc3QsIGxvbmcgY291bnQp
OworICAgIHZvaWQgZHJhd0VsZW1lbnRzKHVuc2lnbmVkIGxvbmcgbW9kZSwgdW5zaWduZWQgbG9u
ZyBjb3VudCwgdW5zaWduZWQgbG9uZyB0eXBlLCBsb25nIG9mZnNldCk7CisKKyAgICB2b2lkIGVu
YWJsZSh1bnNpZ25lZCBsb25nIGNhcCk7CiAgICAgdm9pZCBlbmFibGVWZXJ0ZXhBdHRyaWJBcnJh
eSh1bnNpZ25lZCBsb25nIGluZGV4KTsKLSAgICB1bnNpZ25lZCBsb25nIGdldEVycm9yKCk7Cisg
ICAgdm9pZCBmaW5pc2goKTsKKyAgICB2b2lkIGZsdXNoKCk7CisgICAgdm9pZCBmcmFtZWJ1ZmZl
clJlbmRlcmJ1ZmZlcih1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBhdHRhY2ht
ZW50LCB1bnNpZ25lZCBsb25nIHJlbmRlcmJ1ZmZlcnRhcmdldCwgV2ViR0xSZW5kZXJidWZmZXIq
KTsKKyAgICB2b2lkIGZyYW1lYnVmZmVyVGV4dHVyZTJEKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1
bnNpZ25lZCBsb25nIGF0dGFjaG1lbnQsIHVuc2lnbmVkIGxvbmcgdGV4dGFyZ2V0LCBXZWJHTFRl
eHR1cmUqLCBsb25nIGxldmVsKTsKKyAgICB2b2lkIGZyb250RmFjZSh1bnNpZ25lZCBsb25nIG1v
ZGUpOworICAgIHZvaWQgZ2VuZXJhdGVNaXBtYXAodW5zaWduZWQgbG9uZyB0YXJnZXQpOworCisg
ICAgYm9vbCBnZXRBY3RpdmVBdHRyaWIoV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCB1bnNpZ25lZCBs
b25nIGluZGV4LCBBY3RpdmVJbmZvJik7CisgICAgYm9vbCBnZXRBY3RpdmVVbmlmb3JtKFdlYkdM
UHJvZ3JhbSogcHJvZ3JhbSwgdW5zaWduZWQgbG9uZyBpbmRleCwgQWN0aXZlSW5mbyYpOworCisg
ICAgaW50ICBnZXRBdHRyaWJMb2NhdGlvbihXZWJHTFByb2dyYW0qLCBjb25zdCBTdHJpbmcmIG5h
bWUpOworCisgICAgdm9pZCBnZXRCb29sZWFudih1bnNpZ25lZCBsb25nIHBuYW1lLCB1bnNpZ25l
ZCBjaGFyKiB2YWx1ZSk7CisKKyAgICB2b2lkIGdldEJ1ZmZlclBhcmFtZXRlcml2KHVuc2lnbmVk
IGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIHBuYW1lLCBpbnQqIHZhbHVlKTsKKwogICAgIEdy
YXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGdldENvbnRleHRBdHRyaWJ1dGVzKCk7Ci0gICAg
dm9pZCB2ZXJ0ZXhBdHRyaWJQb2ludGVyKHVuc2lnbmVkIGxvbmcgaW5keCwgaW50IHNpemUsIGlu
dCB0eXBlLCBib29sIG5vcm1hbGl6ZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVu
c2lnbmVkIGxvbmcgc3RyaWRlLCB1bnNpZ25lZCBsb25nIG9mZnNldCk7Ci0gICAgdm9pZCB2aWV3
cG9ydEltcGwobG9uZyB4LCBsb25nIHksIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxv
bmcgaGVpZ2h0KTsKIAotICAgIHZvaWQgc3ludGhlc2l6ZUdMRXJyb3IodW5zaWduZWQgbG9uZyBl
cnJvcik7CisgICAgdW5zaWduZWQgbG9uZyBnZXRFcnJvcigpOwogCi1wcml2YXRlOgotICAgIEdy
YXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIG1fYXR0cnM7CisgICAgdm9pZCBnZXRGbG9hdHYo
dW5zaWduZWQgbG9uZyBwbmFtZSwgZmxvYXQqIHZhbHVlKTsKIAotICAgIHVuc2lnbmVkIGludCBt
X3RleHR1cmU7Ci0gICAgdW5zaWduZWQgaW50IG1fZmJvOwotICAgIHVuc2lnbmVkIGludCBtX2Rl
cHRoQnVmZmVyOwotICAgIHVuc2lnbmVkIGludCBtX2NhY2hlZFdpZHRoLCBtX2NhY2hlZEhlaWdo
dDsKKyAgICB2b2lkIGdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcml2KHVuc2lnbmVk
IGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIGF0dGFjaG1lbnQsIHVuc2lnbmVkIGxvbmcgcG5h
bWUsIGludCogdmFsdWUpOwogCi0gICAgLy8gRm9yIHRyYWNraW5nIHdoaWNoIEZCTyBpcyBib3Vu
ZAotICAgIHVuc2lnbmVkIGludCBtX2JvdW5kRkJPOworICAgIHZvaWQgZ2V0SW50ZWdlcnYodW5z
aWduZWQgbG9uZyBwbmFtZSwgaW50KiB2YWx1ZSk7CiAKLSNpZmRlZiBGTElQX0ZSQU1FQlVGRkVS
X1ZFUlRJQ0FMTFkKLSAgICB1bnNpZ25lZCBjaGFyKiBtX3NjYW5saW5lOwotICAgIHZvaWQgZmxp
cFZlcnRpY2FsbHkodW5zaWduZWQgY2hhciogZnJhbWVidWZmZXIsCi0gICAgICAgICAgICAgICAg
ICAgICAgICB1bnNpZ25lZCBpbnQgd2lkdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICB1bnNp
Z25lZCBpbnQgaGVpZ2h0KTsKLSNlbmRpZgorICAgIHZvaWQgZ2V0UHJvZ3JhbWl2KFdlYkdMUHJv
Z3JhbSogcHJvZ3JhbSwgdW5zaWduZWQgbG9uZyBwbmFtZSwgaW50KiB2YWx1ZSk7CisKKyAgICBT
dHJpbmcgZ2V0UHJvZ3JhbUluZm9Mb2coV2ViR0xQcm9ncmFtKik7CisKKyAgICB2b2lkIGdldFJl
bmRlcmJ1ZmZlclBhcmFtZXRlcml2KHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25n
IHBuYW1lLCBpbnQqIHZhbHVlKTsKKworICAgIHZvaWQgZ2V0U2hhZGVyaXYoV2ViR0xTaGFkZXIq
LCB1bnNpZ25lZCBsb25nIHBuYW1lLCBpbnQqIHZhbHVlKTsKKworICAgIFN0cmluZyBnZXRTaGFk
ZXJJbmZvTG9nKFdlYkdMU2hhZGVyKik7CisKKyAgICBTdHJpbmcgZ2V0U2hhZGVyU291cmNlKFdl
YkdMU2hhZGVyKik7CisgICAgU3RyaW5nIGdldFN0cmluZyh1bnNpZ25lZCBsb25nIG5hbWUpOwor
CisgICAgdm9pZCBnZXRUZXhQYXJhbWV0ZXJmdih1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWdu
ZWQgbG9uZyBwbmFtZSwgZmxvYXQqIHZhbHVlKTsKKyAgICB2b2lkIGdldFRleFBhcmFtZXRlcml2
KHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIHBuYW1lLCBpbnQqIHZhbHVlKTsK
KworICAgIHZvaWQgZ2V0VW5pZm9ybWZ2KFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgbG9uZyBsb2Nh
dGlvbiwgZmxvYXQqIHZhbHVlKTsKKyAgICB2b2lkIGdldFVuaWZvcm1pdihXZWJHTFByb2dyYW0q
IHByb2dyYW0sIGxvbmcgbG9jYXRpb24sIGludCogdmFsdWUpOworCisgICAgbG9uZyBnZXRVbmlm
b3JtTG9jYXRpb24oV2ViR0xQcm9ncmFtKiwgY29uc3QgU3RyaW5nJiBuYW1lKTsKKworICAgIHZv
aWQgZ2V0VmVydGV4QXR0cmliZnYodW5zaWduZWQgbG9uZyBpbmRleCwgdW5zaWduZWQgbG9uZyBw
bmFtZSwgZmxvYXQqIHZhbHVlKTsKKyAgICB2b2lkIGdldFZlcnRleEF0dHJpYml2KHVuc2lnbmVk
IGxvbmcgaW5kZXgsIHVuc2lnbmVkIGxvbmcgcG5hbWUsIGludCogdmFsdWUpOworCisgICAgbG9u
ZyBnZXRWZXJ0ZXhBdHRyaWJPZmZzZXQodW5zaWduZWQgbG9uZyBpbmRleCwgdW5zaWduZWQgbG9u
ZyBwbmFtZSk7CisKKyAgICB2b2lkIGhpbnQodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVk
IGxvbmcgbW9kZSk7CisgICAgYm9vbCBpc0J1ZmZlcihXZWJHTEJ1ZmZlciopOworICAgIGJvb2wg
aXNFbmFibGVkKHVuc2lnbmVkIGxvbmcgY2FwKTsKKyAgICBib29sIGlzRnJhbWVidWZmZXIoV2Vi
R0xGcmFtZWJ1ZmZlciopOworICAgIGJvb2wgaXNQcm9ncmFtKFdlYkdMUHJvZ3JhbSopOworICAg
IGJvb2wgaXNSZW5kZXJidWZmZXIoV2ViR0xSZW5kZXJidWZmZXIqKTsKKyAgICBib29sIGlzU2hh
ZGVyKFdlYkdMU2hhZGVyKik7CisgICAgYm9vbCBpc1RleHR1cmUoV2ViR0xUZXh0dXJlKik7Cisg
ICAgdm9pZCBsaW5lV2lkdGgoZG91YmxlKTsKKyAgICB2b2lkIGxpbmtQcm9ncmFtKFdlYkdMUHJv
Z3JhbSopOworICAgIHZvaWQgcGl4ZWxTdG9yZWkodW5zaWduZWQgbG9uZyBwbmFtZSwgbG9uZyBw
YXJhbSk7CisgICAgdm9pZCBwb2x5Z29uT2Zmc2V0KGRvdWJsZSBmYWN0b3IsIGRvdWJsZSB1bml0
cyk7CisKKyAgICBQYXNzUmVmUHRyPFdlYkdMQXJyYXk+IHJlYWRQaXhlbHMobG9uZyB4LCBsb25n
IHksIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0LCB1bnNpZ25lZCBs
b25nIGZvcm1hdCwgdW5zaWduZWQgbG9uZyB0eXBlKTsKKworICAgIHZvaWQgcmVsZWFzZVNoYWRl
ckNvbXBpbGVyKCk7CisgICAgdm9pZCByZW5kZXJidWZmZXJTdG9yYWdlKHVuc2lnbmVkIGxvbmcg
dGFyZ2V0LCB1bnNpZ25lZCBsb25nIGludGVybmFsZm9ybWF0LCB1bnNpZ25lZCBsb25nIHdpZHRo
LCB1bnNpZ25lZCBsb25nIGhlaWdodCk7CisgICAgdm9pZCBzYW1wbGVDb3ZlcmFnZShkb3VibGUg
dmFsdWUsIGJvb2wgaW52ZXJ0KTsKKyAgICB2b2lkIHNjaXNzb3IobG9uZyB4LCBsb25nIHksIHVu
c2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0KTsKKyAgICB2b2lkIHNoYWRl
clNvdXJjZShXZWJHTFNoYWRlciosIGNvbnN0IFN0cmluZyYgc3RyaW5nKTsKKyAgICB2b2lkIHN0
ZW5jaWxGdW5jKHVuc2lnbmVkIGxvbmcgZnVuYywgbG9uZyByZWYsIHVuc2lnbmVkIGxvbmcgbWFz
ayk7CisgICAgdm9pZCBzdGVuY2lsRnVuY1NlcGFyYXRlKHVuc2lnbmVkIGxvbmcgZmFjZSwgdW5z
aWduZWQgbG9uZyBmdW5jLCBsb25nIHJlZiwgdW5zaWduZWQgbG9uZyBtYXNrKTsKKyAgICB2b2lk
IHN0ZW5jaWxNYXNrKHVuc2lnbmVkIGxvbmcgbWFzayk7CisgICAgdm9pZCBzdGVuY2lsTWFza1Nl
cGFyYXRlKHVuc2lnbmVkIGxvbmcgZmFjZSwgdW5zaWduZWQgbG9uZyBtYXNrKTsKKyAgICB2b2lk
IHN0ZW5jaWxPcCh1bnNpZ25lZCBsb25nIGZhaWwsIHVuc2lnbmVkIGxvbmcgemZhaWwsIHVuc2ln
bmVkIGxvbmcgenBhc3MpOworICAgIHZvaWQgc3RlbmNpbE9wU2VwYXJhdGUodW5zaWduZWQgbG9u
ZyBmYWNlLCB1bnNpZ25lZCBsb25nIGZhaWwsIHVuc2lnbmVkIGxvbmcgemZhaWwsIHVuc2lnbmVk
IGxvbmcgenBhc3MpOworCisgICAgLy8gVGhlc2UgbmV4dCBzZXZlcmFsIGZ1bmN0aW9ucyByZXR1
cm4gYW4gZXJyb3IgY29kZSAoMCBpZiBubyBlcnJvcnMpIHJhdGhlciB0aGFuIHVzaW5nIGFuIEV4
Y2VwdGlvbkNvZGUuCisgICAgLy8gQ3VycmVudGx5IHRoZXkgcmV0dXJuIC0xIG9uIGFueSBlcnJv
ci4KKyAgICBpbnQgdGV4SW1hZ2UyRCh1bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVkIGxldmVsLCB1
bnNpZ25lZCBpbnRlcm5hbGZvcm1hdCwgdW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCwg
dW5zaWduZWQgYm9yZGVyLCB1bnNpZ25lZCBmb3JtYXQsIHVuc2lnbmVkIHR5cGUsIHZvaWQqIHBp
eGVscyk7CisKKyAgICB2b2lkIHRleFBhcmFtZXRlcmYodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25l
ZCBwbmFtZSwgZmxvYXQgcGFyYW0pOworICAgIHZvaWQgdGV4UGFyYW1ldGVyaSh1bnNpZ25lZCB0
YXJnZXQsIHVuc2lnbmVkIHBuYW1lLCBpbnQgcGFyYW0pOworCisgICAgaW50IHRleFN1YkltYWdl
MkQodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBsZXZlbCwgdW5zaWduZWQgeG9mZnNldCwgdW5z
aWduZWQgeW9mZnNldCwgdW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCwgdW5zaWduZWQg
Zm9ybWF0LCB1bnNpZ25lZCB0eXBlLCB2b2lkKiBwaXhlbHMpOworCisgICAgdm9pZCB1bmlmb3Jt
MWYobG9uZyBsb2NhdGlvbiwgZmxvYXQgeCk7CisgICAgdm9pZCB1bmlmb3JtMWZ2KGxvbmcgbG9j
YXRpb24sIGZsb2F0KiB2LCBpbnQgc2l6ZSk7CisgICAgdm9pZCB1bmlmb3JtMWkobG9uZyBsb2Nh
dGlvbiwgaW50IHgpOworICAgIHZvaWQgdW5pZm9ybTFpdihsb25nIGxvY2F0aW9uLCBpbnQqIHYs
IGludCBzaXplKTsKKyAgICB2b2lkIHVuaWZvcm0yZihsb25nIGxvY2F0aW9uLCBmbG9hdCB4LCBm
bG9hdCB5KTsKKyAgICB2b2lkIHVuaWZvcm0yZnYobG9uZyBsb2NhdGlvbiwgZmxvYXQqIHYsIGlu
dCBzaXplKTsKKyAgICB2b2lkIHVuaWZvcm0yaShsb25nIGxvY2F0aW9uLCBpbnQgeCwgaW50IHkp
OworICAgIHZvaWQgdW5pZm9ybTJpdihsb25nIGxvY2F0aW9uLCBpbnQqIHYsIGludCBzaXplKTsK
KyAgICB2b2lkIHVuaWZvcm0zZihsb25nIGxvY2F0aW9uLCBmbG9hdCB4LCBmbG9hdCB5LCBmbG9h
dCB6KTsKKyAgICB2b2lkIHVuaWZvcm0zZnYobG9uZyBsb2NhdGlvbiwgZmxvYXQqIHYsIGludCBz
aXplKTsKKyAgICB2b2lkIHVuaWZvcm0zaShsb25nIGxvY2F0aW9uLCBpbnQgeCwgaW50IHksIGlu
dCB6KTsKKyAgICB2b2lkIHVuaWZvcm0zaXYobG9uZyBsb2NhdGlvbiwgaW50KiB2LCBpbnQgc2l6
ZSk7CisgICAgdm9pZCB1bmlmb3JtNGYobG9uZyBsb2NhdGlvbiwgZmxvYXQgeCwgZmxvYXQgeSwg
ZmxvYXQgeiwgZmxvYXQgdyk7CisgICAgdm9pZCB1bmlmb3JtNGZ2KGxvbmcgbG9jYXRpb24sIGZs
b2F0KiB2LCBpbnQgc2l6ZSk7CisgICAgdm9pZCB1bmlmb3JtNGkobG9uZyBsb2NhdGlvbiwgaW50
IHgsIGludCB5LCBpbnQgeiwgaW50IHcpOworICAgIHZvaWQgdW5pZm9ybTRpdihsb25nIGxvY2F0
aW9uLCBpbnQqIHYsIGludCBzaXplKTsKKyAgICB2b2lkIHVuaWZvcm1NYXRyaXgyZnYobG9uZyBs
b2NhdGlvbiwgYm9vbCB0cmFuc3Bvc2UsIGZsb2F0KiB2YWx1ZSwgaW50IHNpemUpOworICAgIHZv
aWQgdW5pZm9ybU1hdHJpeDNmdihsb25nIGxvY2F0aW9uLCBib29sIHRyYW5zcG9zZSwgZmxvYXQq
IHZhbHVlLCBpbnQgc2l6ZSk7CisgICAgdm9pZCB1bmlmb3JtTWF0cml4NGZ2KGxvbmcgbG9jYXRp
b24sIGJvb2wgdHJhbnNwb3NlLCBmbG9hdCogdmFsdWUsIGludCBzaXplKTsKKworICAgIHZvaWQg
dXNlUHJvZ3JhbShXZWJHTFByb2dyYW0qKTsKKyAgICB2b2lkIHZhbGlkYXRlUHJvZ3JhbShXZWJH
TFByb2dyYW0qKTsKKworICAgIHZvaWQgdmVydGV4QXR0cmliMWYodW5zaWduZWQgbG9uZyBpbmR4
LCBmbG9hdCB4KTsKKyAgICB2b2lkIHZlcnRleEF0dHJpYjFmdih1bnNpZ25lZCBsb25nIGluZHgs
IGZsb2F0KiB2YWx1ZXMpOworICAgIHZvaWQgdmVydGV4QXR0cmliMmYodW5zaWduZWQgbG9uZyBp
bmR4LCBmbG9hdCB4LCBmbG9hdCB5KTsKKyAgICB2b2lkIHZlcnRleEF0dHJpYjJmdih1bnNpZ25l
ZCBsb25nIGluZHgsIGZsb2F0KiB2YWx1ZXMpOworICAgIHZvaWQgdmVydGV4QXR0cmliM2YodW5z
aWduZWQgbG9uZyBpbmR4LCBmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB6KTsKKyAgICB2b2lkIHZl
cnRleEF0dHJpYjNmdih1bnNpZ25lZCBsb25nIGluZHgsIGZsb2F0KiB2YWx1ZXMpOworICAgIHZv
aWQgdmVydGV4QXR0cmliNGYodW5zaWduZWQgbG9uZyBpbmR4LCBmbG9hdCB4LCBmbG9hdCB5LCBm
bG9hdCB6LCBmbG9hdCB3KTsKKyAgICB2b2lkIHZlcnRleEF0dHJpYjRmdih1bnNpZ25lZCBsb25n
IGluZHgsIGZsb2F0KiB2YWx1ZXMpOworICAgIHZvaWQgdmVydGV4QXR0cmliUG9pbnRlcih1bnNp
Z25lZCBsb25nIGluZHgsIGludCBzaXplLCBpbnQgdHlwZSwgYm9vbCBub3JtYWxpemVkLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHN0cmlkZSwgdW5zaWduZWQg
bG9uZyBvZmZzZXQpOworCisgICAgdm9pZCB2aWV3cG9ydChsb25nIHgsIGxvbmcgeSwgdW5zaWdu
ZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQpOwogCi0gICAgLy8gTm90ZTogd2Ug
YXJlbid0IGN1cnJlbnRseSB1c2luZyB0aGlzIGluZm9ybWF0aW9uLCBidXQgd2Ugd2lsbAotICAg
IC8vIG5lZWQgdG8gaW4gb3JkZXIgdG8gdmVyaWZ5IHRoYXQgYWxsIGVuYWJsZWQgdmVydGV4IGFy
cmF5cyBoYXZlCi0gICAgLy8gYSB2YWxpZCBidWZmZXIgYm91bmQgLS0gdG8gYXZvaWQgY3Jhc2hl
cyBvbiBjZXJ0YWluIGNhcmRzLgotICAgIHVuc2lnbmVkIGludCBtX2JvdW5kQXJyYXlCdWZmZXI7
Ci0gICAgY2xhc3MgVmVydGV4QXR0cmliUG9pbnRlclN0YXRlIHsKLSAgICBwdWJsaWM6Ci0gICAg
ICAgIFZlcnRleEF0dHJpYlBvaW50ZXJTdGF0ZSgpOwotCi0gICAgICAgIGJvb2wgZW5hYmxlZDsK
LSAgICAgICAgdW5zaWduZWQgbG9uZyBidWZmZXI7Ci0gICAgICAgIHVuc2lnbmVkIGxvbmcgaW5k
eDsKLSAgICAgICAgaW50IHNpemU7Ci0gICAgICAgIGludCB0eXBlOwotICAgICAgICBib29sIG5v
cm1hbGl6ZWQ7Ci0gICAgICAgIHVuc2lnbmVkIGxvbmcgc3RyaWRlOwotICAgICAgICB1bnNpZ25l
ZCBsb25nIG9mZnNldDsKLSAgICB9OwotCi0gICAgZW51bSB7Ci0gICAgICAgIE51bVRyYWNrZWRQ
b2ludGVyU3RhdGVzID0gMgotICAgIH07Ci0gICAgVmVydGV4QXR0cmliUG9pbnRlclN0YXRlIG1f
dmVydGV4QXR0cmliUG9pbnRlclN0YXRlW051bVRyYWNrZWRQb2ludGVyU3RhdGVzXTsKKyAgICB1
bnNpZ25lZCBjcmVhdGVCdWZmZXIoKTsKKyAgICB1bnNpZ25lZCBjcmVhdGVGcmFtZWJ1ZmZlcigp
OworICAgIHVuc2lnbmVkIGNyZWF0ZVByb2dyYW0oKTsKKyAgICB1bnNpZ25lZCBjcmVhdGVSZW5k
ZXJidWZmZXIoKTsKKyAgICB1bnNpZ25lZCBjcmVhdGVTaGFkZXIodW5zaWduZWQgbG9uZyk7Cisg
ICAgdW5zaWduZWQgY3JlYXRlVGV4dHVyZSgpOworCisgICAgdm9pZCBkZWxldGVCdWZmZXIodW5z
aWduZWQpOworICAgIHZvaWQgZGVsZXRlRnJhbWVidWZmZXIodW5zaWduZWQpOworICAgIHZvaWQg
ZGVsZXRlUHJvZ3JhbSh1bnNpZ25lZCk7CisgICAgdm9pZCBkZWxldGVSZW5kZXJidWZmZXIodW5z
aWduZWQpOworICAgIHZvaWQgZGVsZXRlU2hhZGVyKHVuc2lnbmVkKTsKKyAgICB2b2lkIGRlbGV0
ZVRleHR1cmUodW5zaWduZWQpOwogCi0gICAgLy8gRXJyb3JzIHJhaXNlZCBieSBzeW50aGVzaXpl
R0xFcnJvcigpLgotICAgIExpc3RIYXNoU2V0PHVuc2lnbmVkIGxvbmc+IG1fc3ludGhldGljRXJy
b3JzOworICAgIHZvaWQgc3ludGhlc2l6ZUdMRXJyb3IodW5zaWduZWQgbG9uZyBlcnJvcik7CiAK
K3ByaXZhdGU6CisgICAgT3duUHRyPFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0Q+IG1faW1w
bDsKICNpZiBQTEFURk9STShTS0lBKQogICAgIC8vIElmIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IG9m
IHRoZSBDYW52YXMncyBiYWNraW5nIHN0b3JlIGRvbid0CiAgICAgLy8gbWF0Y2ggdGhvc2UgdGhh
dCB3ZSB3ZXJlIGdpdmVuIGluIHRoZSBtb3N0IHJlY2VudCBjYWxsIHRvCkBAIC0xNzksNTkzICsz
MDQsODMgQEAgcHJpdmF0ZToKICAgICBTa0JpdG1hcCogbV9yZXNpemluZ0JpdG1hcDsKICNlbmRp
ZgogCi0gICAgc3RhdGljIGJvb2wgc19pbml0aWFsaXplZEdMRVc7Ci0jaWYgT1MoV0lORE9XUykK
LSAgICBIV05EICBtX2NhbnZhc1dpbmRvdzsKLSAgICBIREMgICBtX2NhbnZhc0RDOwotICAgIEhH
TFJDIG1fY29udGV4dE9iajsKLSNlbGlmIFBMQVRGT1JNKENHKQotICAgIENHTFBCdWZmZXJPYmog
bV9wYnVmZmVyOwotICAgIENHTENvbnRleHRPYmogbV9jb250ZXh0T2JqOworI2lmIFBMQVRGT1JN
KENHKQogICAgIHVuc2lnbmVkIGNoYXIqIG1fcmVuZGVyT3V0cHV0OwotI2VsaWYgT1MoTElOVVgp
Ci0gICAgR0xYQ29udGV4dCBtX2NvbnRleHRPYmo7Ci0gICAgR0xYUGJ1ZmZlciBtX3BidWZmZXI7
Ci0KLSAgICAvLyBJbiBvcmRlciB0byBhdm9pZCBwcm9ibGVtcyBjYXVzZWQgYnkgbGlua2luZyBh
Z2FpbnN0IGxpYkdMLCB3ZQotICAgIC8vIGR5bmFtaWNhbGx5IGxvb2sgdXAgYWxsIHRoZSBzeW1i
b2xzIHdlIG5lZWQuCi0gICAgLy8gaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL2Nocm9taXVtL2lz
c3Vlcy9kZXRhaWw/aWQ9MTY4MDAKLSAgICBjbGFzcyBHTENvbm5lY3Rpb24gewotICAgICAgcHVi
bGljOgotICAgICAgICB+R0xDb25uZWN0aW9uKCk7Ci0KLSAgICAgICAgc3RhdGljIEdMQ29ubmVj
dGlvbiogY3JlYXRlKCk7Ci0KLSAgICAgICAgR0xYRkJDb25maWcqIGNob29zZUZCQ29uZmlnKGlu
dCBzY3JlZW4sIGNvbnN0IGludCAqYXR0cmliX2xpc3QsIGludCAqbmVsZW1lbnRzKQotICAgICAg
ICB7Ci0gICAgICAgICAgICByZXR1cm4gbV9nbFhDaG9vc2VGQkNvbmZpZyhtX2Rpc3BsYXksIHNj
cmVlbiwgYXR0cmliX2xpc3QsIG5lbGVtZW50cyk7Ci0gICAgICAgIH0KLQotICAgICAgICBHTFhD
b250ZXh0IGNyZWF0ZU5ld0NvbnRleHQoR0xYRkJDb25maWcgY29uZmlnLCBpbnQgcmVuZGVyVHlw
ZSwgR0xYQ29udGV4dCBzaGFyZUxpc3QsIEJvb2wgZGlyZWN0KQotICAgICAgICB7Ci0gICAgICAg
ICAgICByZXR1cm4gbV9nbFhDcmVhdGVOZXdDb250ZXh0KG1fZGlzcGxheSwgY29uZmlnLCByZW5k
ZXJUeXBlLCBzaGFyZUxpc3QsIGRpcmVjdCk7Ci0gICAgICAgIH0KLQotICAgICAgICBHTFhQYnVm
ZmVyIGNyZWF0ZVBidWZmZXIoR0xYRkJDb25maWcgY29uZmlnLCBjb25zdCBpbnQgKmF0dHJpYkxp
c3QpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBtX2dsWENyZWF0ZVBidWZmZXIobV9k
aXNwbGF5LCBjb25maWcsIGF0dHJpYkxpc3QpOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBk
ZXN0cm95UGJ1ZmZlcihHTFhQYnVmZmVyIHBidWYpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1f
Z2xYRGVzdHJveVBidWZmZXIobV9kaXNwbGF5LCBwYnVmKTsKLSAgICAgICAgfQotCi0gICAgICAg
IEJvb2wgbWFrZUN1cnJlbnQoR0xYRHJhd2FibGUgZHJhd2FibGUsIEdMWENvbnRleHQgY3R4KQot
ICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbV9nbFhNYWtlQ3VycmVudChtX2Rpc3BsYXks
IGRyYXdhYmxlLCBjdHgpOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBkZXN0cm95Q29udGV4
dChHTFhDb250ZXh0IGN0eCkKLSAgICAgICAgewotICAgICAgICAgICAgbV9nbFhEZXN0cm95Q29u
dGV4dChtX2Rpc3BsYXksIGN0eCk7Ci0gICAgICAgIH0KLQotICAgICAgICBHTFhDb250ZXh0IGdl
dEN1cnJlbnRDb250ZXh0KCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1fZ2xYR2V0
Q3VycmVudENvbnRleHQoKTsKLSAgICAgICAgfQotCi0gICAgICBwcml2YXRlOgotICAgICAgICBE
aXNwbGF5KiBtX2Rpc3BsYXk7Ci0gICAgICAgIHZvaWQqIG1fbGliR0w7Ci0gICAgICAgIFBGTkdM
WENIT09TRUZCQ09ORklHUFJPQyBtX2dsWENob29zZUZCQ29uZmlnOwotICAgICAgICBQRk5HTFhD
UkVBVEVORVdDT05URVhUUFJPQyBtX2dsWENyZWF0ZU5ld0NvbnRleHQ7Ci0gICAgICAgIFBGTkdM
WENSRUFURVBCVUZGRVJQUk9DIG1fZ2xYQ3JlYXRlUGJ1ZmZlcjsKLSAgICAgICAgUEZOR0xYREVT
VFJPWVBCVUZGRVJQUk9DIG1fZ2xYRGVzdHJveVBidWZmZXI7Ci0gICAgICAgIHR5cGVkZWYgQm9v
bCAoKiBQRk5HTFhNQUtFQ1VSUkVOVFBST0MpKERpc3BsYXkqIGRweSwgR0xYRHJhd2FibGUgZHJh
d2FibGUsIEdMWENvbnRleHQgY3R4KTsKLSAgICAgICAgUEZOR0xYTUFLRUNVUlJFTlRQUk9DIG1f
Z2xYTWFrZUN1cnJlbnQ7Ci0gICAgICAgIHR5cGVkZWYgdm9pZCAoKiBQRk5HTFhERVNUUk9ZQ09O
VEVYVFBST0MpKERpc3BsYXkqIGRweSwgR0xYQ29udGV4dCBjdHgpOwotICAgICAgICBQRk5HTFhE
RVNUUk9ZQ09OVEVYVFBST0MgbV9nbFhEZXN0cm95Q29udGV4dDsKLSAgICAgICAgdHlwZWRlZiBH
TFhDb250ZXh0ICgqIFBGTkdMWEdFVENVUlJFTlRDT05URVhUUFJPQykodm9pZCk7Ci0gICAgICAg
IFBGTkdMWEdFVENVUlJFTlRDT05URVhUUFJPQyBtX2dsWEdldEN1cnJlbnRDb250ZXh0OwotCi0g
ICAgICAgIEdMQ29ubmVjdGlvbihEaXNwbGF5KiBkaXNwbGF5LAotICAgICAgICAgICAgICAgICAg
ICAgdm9pZCogbGliR0wsCi0gICAgICAgICAgICAgICAgICAgICBQRk5HTFhDSE9PU0VGQkNPTkZJ
R1BST0MgY2hvb3NlRkJDb25maWcsCi0gICAgICAgICAgICAgICAgICAgICBQRk5HTFhDUkVBVEVO
RVdDT05URVhUUFJPQyBjcmVhdGVOZXdDb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgUEZO
R0xYQ1JFQVRFUEJVRkZFUlBST0MgY3JlYXRlUGJ1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAg
IFBGTkdMWERFU1RST1lQQlVGRkVSUFJPQyBkZXN0cm95UGJ1ZmZlciwKLSAgICAgICAgICAgICAg
ICAgICAgIFBGTkdMWE1BS0VDVVJSRU5UUFJPQyBtYWtlQ3VycmVudCwKLSAgICAgICAgICAgICAg
ICAgICAgIFBGTkdMWERFU1RST1lDT05URVhUUFJPQyBkZXN0cm95Q29udGV4dCwKLSAgICAgICAg
ICAgICAgICAgICAgIFBGTkdMWEdFVENVUlJFTlRDT05URVhUUFJPQyBnZXRDdXJyZW50Q29udGV4
dCkKLSAgICAgICAgICAgIDogbV9saWJHTChsaWJHTCkKLSAgICAgICAgICAgICwgbV9kaXNwbGF5
KGRpc3BsYXkpCi0gICAgICAgICAgICAsIG1fZ2xYQ2hvb3NlRkJDb25maWcoY2hvb3NlRkJDb25m
aWcpCi0gICAgICAgICAgICAsIG1fZ2xYQ3JlYXRlTmV3Q29udGV4dChjcmVhdGVOZXdDb250ZXh0
KQotICAgICAgICAgICAgLCBtX2dsWENyZWF0ZVBidWZmZXIoY3JlYXRlUGJ1ZmZlcikKLSAgICAg
ICAgICAgICwgbV9nbFhEZXN0cm95UGJ1ZmZlcihkZXN0cm95UGJ1ZmZlcikKLSAgICAgICAgICAg
ICwgbV9nbFhNYWtlQ3VycmVudChtYWtlQ3VycmVudCkKLSAgICAgICAgICAgICwgbV9nbFhEZXN0
cm95Q29udGV4dChkZXN0cm95Q29udGV4dCkKLSAgICAgICAgICAgICwgbV9nbFhHZXRDdXJyZW50
Q29udGV4dChnZXRDdXJyZW50Q29udGV4dCkKLSAgICAgICAgewotICAgICAgICB9Ci0gICAgfTsK
LQotICAgIHN0YXRpYyBHTENvbm5lY3Rpb24qIHNfZ2w7Ci0jZWxzZQotICAgICNlcnJvciBNdXN0
IHBvcnQgR3JhcGhpY3NDb250ZXh0M0QgdG8geW91ciBwbGF0Zm9ybQogI2VuZGlmCiB9OwogCi1i
b29sIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OnNfaW5pdGlhbGl6ZWRHTEVXID0gZmFsc2U7
Ci0KLSNpZiBPUyhMSU5VWCkKLUdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OkdMQ29ubmVjdGlv
biogR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6c19nbCA9IDA7Ci0KLUdyYXBoaWNzQ29udGV4
dDNESW50ZXJuYWw6OkdMQ29ubmVjdGlvbiogR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6R0xD
b25uZWN0aW9uOjpjcmVhdGUoKQotewotICAgIERpc3BsYXkqIGRweSA9IFhPcGVuRGlzcGxheSgw
KTsKLSAgICBpZiAoIWRweSkgewotICAgICAgICBwcmludGYoIkdyYXBoaWNzQ29udGV4dDNEOiBl
cnJvciBvcGVuaW5nIFggZGlzcGxheVxuIik7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQot
ICAgIC8vIFdlIHVzZSBSVExEX0dMT0JBTCBzZW1hbnRpY3Mgc28gdGhhdCBHTEVXIGluaXRpYWxp
emF0aW9uIHdvcmtzOwotICAgIC8vIEdMRVcgZXhwZWN0cyB0byBiZSBhYmxlIHRvIG9wZW4gdGhl
IGN1cnJlbnQgcHJvY2VzcydzIGhhbmRsZQotICAgIC8vIGFuZCBkbyBkbHN5bSdzIG9mIEdMIGVu
dHJ5IHBvaW50cyBmcm9tIHRoZXJlLgotICAgIHZvaWQqIGxpYkdMID0gZGxvcGVuKCJsaWJHTC5z
by4xIiwgUlRMRF9MQVpZIHwgUlRMRF9HTE9CQUwpOwotICAgIGlmICghbGliR0wpIHsKLSAgICAg
ICAgWENsb3NlRGlzcGxheShkcHkpOwotICAgICAgICBwcmludGYoIkdyYXBoaWNzQ29udGV4dDNE
OiBlcnJvciBvcGVuaW5nIGxpYkdMLnNvLjE6ICVzXG4iLCBkbGVycm9yKCkpOwotICAgICAgICBy
ZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBQRk5HTFhDSE9PU0VGQkNPTkZJR1BST0MgY2hvb3NlRkJD
b25maWcgPSAoUEZOR0xYQ0hPT1NFRkJDT05GSUdQUk9DKSBkbHN5bShsaWJHTCwgImdsWENob29z
ZUZCQ29uZmlnIik7Ci0gICAgUEZOR0xYQ1JFQVRFTkVXQ09OVEVYVFBST0MgY3JlYXRlTmV3Q29u
dGV4dCA9IChQRk5HTFhDUkVBVEVORVdDT05URVhUUFJPQykgZGxzeW0obGliR0wsICJnbFhDcmVh
dGVOZXdDb250ZXh0Iik7Ci0gICAgUEZOR0xYQ1JFQVRFUEJVRkZFUlBST0MgY3JlYXRlUGJ1ZmZl
ciA9IChQRk5HTFhDUkVBVEVQQlVGRkVSUFJPQykgZGxzeW0obGliR0wsICJnbFhDcmVhdGVQYnVm
ZmVyIik7Ci0gICAgUEZOR0xYREVTVFJPWVBCVUZGRVJQUk9DIGRlc3Ryb3lQYnVmZmVyID0gKFBG
TkdMWERFU1RST1lQQlVGRkVSUFJPQykgZGxzeW0obGliR0wsICJnbFhEZXN0cm95UGJ1ZmZlciIp
OwotICAgIFBGTkdMWE1BS0VDVVJSRU5UUFJPQyBtYWtlQ3VycmVudCA9IChQRk5HTFhNQUtFQ1VS
UkVOVFBST0MpIGRsc3ltKGxpYkdMLCAiZ2xYTWFrZUN1cnJlbnQiKTsKLSAgICBQRk5HTFhERVNU
Uk9ZQ09OVEVYVFBST0MgZGVzdHJveUNvbnRleHQgPSAoUEZOR0xYREVTVFJPWUNPTlRFWFRQUk9D
KSBkbHN5bShsaWJHTCwgImdsWERlc3Ryb3lDb250ZXh0Iik7Ci0gICAgUEZOR0xYR0VUQ1VSUkVO
VENPTlRFWFRQUk9DIGdldEN1cnJlbnRDb250ZXh0ID0gKFBGTkdMWEdFVENVUlJFTlRDT05URVhU
UFJPQykgZGxzeW0obGliR0wsICJnbFhHZXRDdXJyZW50Q29udGV4dCIpOwotICAgIGlmICghY2hv
b3NlRkJDb25maWcgfHwgIWNyZWF0ZU5ld0NvbnRleHQgfHwgIWNyZWF0ZVBidWZmZXIKLSAgICAg
ICAgfHwgIWRlc3Ryb3lQYnVmZmVyIHx8ICFtYWtlQ3VycmVudCB8fCAhZGVzdHJveUNvbnRleHQK
LSAgICAgICAgfHwgIWdldEN1cnJlbnRDb250ZXh0KSB7Ci0gICAgICAgIFhDbG9zZURpc3BsYXko
ZHB5KTsKLSAgICAgICAgZGxjbG9zZShsaWJHTCk7Ci0gICAgICAgIHByaW50ZigiR3JhcGhpY3ND
b250ZXh0M0Q6IGVycm9yIGxvb2tpbmcgdXAgYm9vdHN0cmFwcGluZyBlbnRyeSBwb2ludHNcbiIp
OwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgcmV0dXJuIG5ldyBHTENvbm5lY3Rpb24o
ZHB5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYkdMLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNob29zZUZCQ29uZmlnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNyZWF0ZU5ld0NvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlUGJ1
ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0cm95UGJ1ZmZlciwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtYWtlQ3VycmVudCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBkZXN0cm95Q29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRD
dXJyZW50Q29udGV4dCk7Ci19Ci0KLUdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OkdMQ29ubmVj
dGlvbjo6fkdMQ29ubmVjdGlvbigpCi17Ci0gICAgWENsb3NlRGlzcGxheShtX2Rpc3BsYXkpOwot
ICAgIGRsY2xvc2UobV9saWJHTCk7Ci19Ci0KLSNlbmRpZiAvLyBPUyhMSU5VWCkKLQotR3JhcGhp
Y3NDb250ZXh0M0RJbnRlcm5hbDo6VmVydGV4QXR0cmliUG9pbnRlclN0YXRlOjpWZXJ0ZXhBdHRy
aWJQb2ludGVyU3RhdGUoKQotICAgIDogZW5hYmxlZChmYWxzZSkKLSAgICAsIGJ1ZmZlcigwKQot
ICAgICwgaW5keCgwKQotICAgICwgc2l6ZSgwKQotICAgICwgdHlwZSgwKQotICAgICwgbm9ybWFs
aXplZChmYWxzZSkKLSAgICAsIHN0cmlkZSgwKQotICAgICwgb2Zmc2V0KDApCi17Ci19Ci0KLUdy
YXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwoR3JhcGhp
Y3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cnMpCi0gICAgOiBtX2F0dHJzKGF0dHJzKQotICAg
ICwgbV90ZXh0dXJlKDApCi0gICAgLCBtX2ZibygwKQotICAgICwgbV9kZXB0aEJ1ZmZlcigwKQot
ICAgICwgbV9ib3VuZEZCTygwKQotI2lmZGVmIEZMSVBfRlJBTUVCVUZGRVJfVkVSVElDQUxMWQot
ICAgICwgbV9zY2FubGluZSgwKQotI2VuZGlmCi0gICAgLCBtX2JvdW5kQXJyYXlCdWZmZXIoMCkK
K0dyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwoKQog
I2lmIFBMQVRGT1JNKFNLSUEpCi0gICAgLCBtX3Jlc2l6aW5nQml0bWFwKDApCi0jZW5kaWYKLSNp
ZiBPUyhXSU5ET1dTKQotICAgICwgbV9jYW52YXNXaW5kb3coMCkKLSAgICAsIG1fY2FudmFzREMo
MCkKLSAgICAsIG1fY29udGV4dE9iaigwKQorICAgIDogbV9yZXNpemluZ0JpdG1hcCgwKQogI2Vs
aWYgUExBVEZPUk0oQ0cpCi0gICAgLCBtX3BidWZmZXIoMCkKLSAgICAsIG1fY29udGV4dE9iaigw
KQotICAgICwgbV9yZW5kZXJPdXRwdXQoMCkKLSNlbGlmIE9TKExJTlVYKQotICAgICwgbV9jb250
ZXh0T2JqKDApCi0gICAgLCBtX3BidWZmZXIoMCkKKyAgICA6IG1fcmVuZGVyT3V0cHV0KDApCiAj
ZWxzZQogI2Vycm9yIE11c3QgcG9ydCB0byB5b3VyIHBsYXRmb3JtCiAjZW5kaWYKIHsKLSAgICAv
LyBGSVhNRTogd2UgbmVlZCB0byB0YWtlIGludG8gYWNjb3VudCB0aGUgdXNlcidzIHJlcXVlc3Rl
ZAotICAgIC8vIGNvbnRleHQgY3JlYXRpb24gYXR0cmlidXRlcywgaW4gcGFydGljdWxhciBzdGVu
Y2lsIGFuZAotICAgIC8vIGFudGlhbGlhcywgYW5kIGRldGVybWluZSB3aGljaCBjb3VsZCBhbmQg
Y291bGQgbm90IGJlIGhvbm9yZWQKLSAgICAvLyBiYXNlZCBvbiB0aGUgY2FwYWJpbGl0aWVzIG9m
IHRoZSBPcGVuR0wgaW1wbGVtZW50YXRpb24uCi0gICAgbV9hdHRycy5hbHBoYSA9IHRydWU7Ci0g
ICAgbV9hdHRycy5kZXB0aCA9IHRydWU7Ci0gICAgbV9hdHRycy5zdGVuY2lsID0gZmFsc2U7Ci0g
ICAgbV9hdHRycy5hbnRpYWxpYXMgPSBmYWxzZTsKLSAgICBtX2F0dHJzLnByZW11bHRpcGxpZWRB
bHBoYSA9IHRydWU7Ci0KLSNpZiBPUyhXSU5ET1dTKQotICAgIFdORENMQVNTIHdjOwotICAgIGlm
ICghR2V0Q2xhc3NJbmZvKEdldE1vZHVsZUhhbmRsZSgwKSwgTCJDQU5WQVNHTCIsICZ3YykpIHsK
LSAgICAgICAgWmVyb01lbW9yeSgmd2MsIHNpemVvZihXTkRDTEFTUykpOwotICAgICAgICB3Yy5z
dHlsZSA9IENTX09XTkRDOwotICAgICAgICB3Yy5oSW5zdGFuY2UgPSBHZXRNb2R1bGVIYW5kbGUo
MCk7Ci0gICAgICAgIHdjLmxwZm5XbmRQcm9jID0gRGVmV2luZG93UHJvYzsKLSAgICAgICAgd2Mu
bHBzekNsYXNzTmFtZSA9IEwiQ0FOVkFTR0wiOwotCi0gICAgICAgIGlmICghUmVnaXN0ZXJDbGFz
cygmd2MpKSB7Ci0gICAgICAgICAgICBwcmludGYoIkdyYXBoaWNzQ29udGV4dDNEOiBSZWdpc3Rl
ckNsYXNzIGZhaWxlZFxuIik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICBtX2NhbnZhc1dpbmRvdyA9IENyZWF0ZVdpbmRvdyhMIkNBTlZBU0dMIiwgTCJDQU5W
QVNHTCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV1NfQ0FQVElPTiwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDV19VU0VERUZBVUxULCBDV19VU0VERUZB
VUxULCBDV19VU0VERUZBVUxULAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENX
X1VTRURFRkFVTFQsIDAsIDAsIEdldE1vZHVsZUhhbmRsZSgwKSwgMCk7Ci0gICAgaWYgKCFtX2Nh
bnZhc1dpbmRvdykgewotICAgICAgICBwcmludGYoIkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6
IENyZWF0ZVdpbmRvdyBmYWlsZWRcbiIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
Ly8gZ2V0IHRoZSBkZXZpY2UgY29udGV4dAotICAgIG1fY2FudmFzREMgPSBHZXREQyhtX2NhbnZh
c1dpbmRvdyk7Ci0gICAgaWYgKCFtX2NhbnZhc0RDKSB7Ci0gICAgICAgIHByaW50ZigiR3JhcGhp
Y3NDb250ZXh0M0RJbnRlcm5hbDogR2V0REMgZmFpbGVkXG4iKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIC8vIGZpbmQgZGVmYXVsdCBwaXhlbCBmb3JtYXQKLSAgICBQSVhFTEZPUk1B
VERFU0NSSVBUT1IgcGZkOwotICAgIFplcm9NZW1vcnkoJnBmZCwgc2l6ZW9mKFBJWEVMRk9STUFU
REVTQ1JJUFRPUikpOwotICAgIHBmZC5uU2l6ZSA9IHNpemVvZihQSVhFTEZPUk1BVERFU0NSSVBU
T1IpOwotICAgIHBmZC5uVmVyc2lvbiA9IDE7Ci0gICAgcGZkLmR3RmxhZ3MgPSBQRkRfRFJBV19U
T19XSU5ET1cgfCBQRkRfU1VQUE9SVF9PUEVOR0wKLSNpZmRlZiBSRU5ERVJfVE9fREVCVUdHSU5H
X1dJTkRPVwotICAgICAgICB8IFBGRF9ET1VCTEVCVUZGRVIKLSNlbmRpZiAvLyBSRU5ERVJfVE9f
REVCVUdHSU5HX1dJTkRPVwotICAgICAgICA7Ci0gICAgaW50IHBpeGVsZm9ybWF0ID0gQ2hvb3Nl
UGl4ZWxGb3JtYXQobV9jYW52YXNEQywgJnBmZCk7Ci0KLSAgICAvLyBzZXQgdGhlIHBpeGVsIGZv
cm1hdCBmb3IgdGhlIGRjCi0gICAgaWYgKCFTZXRQaXhlbEZvcm1hdChtX2NhbnZhc0RDLCBwaXhl
bGZvcm1hdCwgJnBmZCkpIHsKLSAgICAgICAgcHJpbnRmKCJHcmFwaGljc0NvbnRleHQzRDogU2V0
UGl4ZWxGb3JtYXQgZmFpbGVkXG4iKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8v
IGNyZWF0ZSByZW5kZXJpbmcgY29udGV4dAotICAgIG1fY29udGV4dE9iaiA9IHdnbENyZWF0ZUNv
bnRleHQobV9jYW52YXNEQyk7Ci0gICAgaWYgKCFtX2NvbnRleHRPYmopIHsKLSAgICAgICAgcHJp
bnRmKCJHcmFwaGljc0NvbnRleHQzRDogd2dsQ3JlYXRlQ29udGV4dCBmYWlsZWRcbiIpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCF3Z2xNYWtlQ3VycmVudChtX2NhbnZhc0RD
LCBtX2NvbnRleHRPYmopKSB7Ci0gICAgICAgIHByaW50ZigiR3JhcGhpY3NDb250ZXh0M0Q6IHdn
bE1ha2VDdXJyZW50IGZhaWxlZFxuIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSNpZmRl
ZiBSRU5ERVJfVE9fREVCVUdHSU5HX1dJTkRPVwotICAgIHR5cGVkZWYgQk9PTCAoV0lOQVBJICog
UEZOV0dMU1dBUElOVEVSVkFMRVhUUFJPQykgKGludCBpbnRlcnZhbCk7Ci0gICAgUEZOV0dMU1dB
UElOVEVSVkFMRVhUUFJPQyBzZXRTd2FwSW50ZXJ2YWwgPSAwOwotICAgIHNldFN3YXBJbnRlcnZh
bCA9IChQRk5XR0xTV0FQSU5URVJWQUxFWFRQUk9DKSB3Z2xHZXRQcm9jQWRkcmVzcygid2dsU3dh
cEludGVydmFsRVhUIik7Ci0gICAgaWYgKHNldFN3YXBJbnRlcnZhbCkKLSAgICAgICAgc2V0U3dh
cEludGVydmFsKDEpOwotI2VuZGlmIC8vIFJFTkRFUl9UT19ERUJVR0dJTkdfV0lORE9XCi0KLSNl
bGlmIFBMQVRGT1JNKENHKQotICAgIC8vIENyZWF0ZSBhIDF4MSBwYnVmZmVyIGFuZCBhc3NvY2lh
dGVkIGNvbnRleHQgdG8gYm9vdHN0cmFwIHRoaW5ncwotICAgIENHTFBpeGVsRm9ybWF0QXR0cmli
dXRlIGF0dHJpYnNbXSA9IHsKLSAgICAgICAgKENHTFBpeGVsRm9ybWF0QXR0cmlidXRlKSBrQ0dM
UEZBUEJ1ZmZlciwKLSAgICAgICAgKENHTFBpeGVsRm9ybWF0QXR0cmlidXRlKSAwCi0gICAgfTsK
LSAgICBDR0xQaXhlbEZvcm1hdE9iaiBwaXhlbEZvcm1hdDsKLSAgICBHTGludCBudW1QaXhlbEZv
cm1hdHM7Ci0gICAgaWYgKENHTENob29zZVBpeGVsRm9ybWF0KGF0dHJpYnMsICZwaXhlbEZvcm1h
dCwgJm51bVBpeGVsRm9ybWF0cykgIT0ga0NHTE5vRXJyb3IpIHsKLSAgICAgICAgcHJpbnRmKCJH
cmFwaGljc0NvbnRleHQzRDogZXJyb3IgY2hvb3NpbmcgcGl4ZWwgZm9ybWF0XG4iKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoIXBpeGVsRm9ybWF0KSB7Ci0gICAgICAgIHByaW50
ZigiR3JhcGhpY3NDb250ZXh0M0Q6IG5vIHBpeGVsIGZvcm1hdCBzZWxlY3RlZFxuIik7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0gICAgQ0dMQ29udGV4dE9iaiBjb250ZXh0OwotICAgIENHTEVy
cm9yIHJlcyA9IENHTENyZWF0ZUNvbnRleHQocGl4ZWxGb3JtYXQsIDAsICZjb250ZXh0KTsKLSAg
ICBDR0xEZXN0cm95UGl4ZWxGb3JtYXQocGl4ZWxGb3JtYXQpOwotICAgIGlmIChyZXMgIT0ga0NH
TE5vRXJyb3IpIHsKLSAgICAgICAgcHJpbnRmKCJHcmFwaGljc0NvbnRleHQzRDogZXJyb3IgY3Jl
YXRpbmcgY29udGV4dFxuIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgQ0dMUEJ1ZmZl
ck9iaiBwYnVmZmVyOwotICAgIGlmIChDR0xDcmVhdGVQQnVmZmVyKDEsIDEsIEdMX1RFWFRVUkVf
MkQsIEdMX1JHQkEsIDAsICZwYnVmZmVyKSAhPSBrQ0dMTm9FcnJvcikgewotICAgICAgICBDR0xE
ZXN0cm95Q29udGV4dChjb250ZXh0KTsKLSAgICAgICAgcHJpbnRmKCJHcmFwaGljc0NvbnRleHQz
RDogZXJyb3IgY3JlYXRpbmcgcGJ1ZmZlclxuIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0g
ICAgaWYgKENHTFNldFBCdWZmZXIoY29udGV4dCwgcGJ1ZmZlciwgMCwgMCwgMCkgIT0ga0NHTE5v
RXJyb3IpIHsKLSAgICAgICAgQ0dMRGVzdHJveUNvbnRleHQoY29udGV4dCk7Ci0gICAgICAgIENH
TERlc3Ryb3lQQnVmZmVyKHBidWZmZXIpOwotICAgICAgICBwcmludGYoIkdyYXBoaWNzQ29udGV4
dDNEOiBlcnJvciBhdHRhY2hpbmcgcGJ1ZmZlciB0byBjb250ZXh0XG4iKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLSAgICBpZiAoQ0dMU2V0Q3VycmVudENvbnRleHQoY29udGV4dCkgIT0ga0NH
TE5vRXJyb3IpIHsKLSAgICAgICAgQ0dMRGVzdHJveUNvbnRleHQoY29udGV4dCk7Ci0gICAgICAg
IENHTERlc3Ryb3lQQnVmZmVyKHBidWZmZXIpOwotICAgICAgICBwcmludGYoIkdyYXBoaWNzQ29u
dGV4dDNEOiBlcnJvciBtYWtpbmcgY29udGV4dCBjdXJyZW50XG4iKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLSAgICBtX3BidWZmZXIgPSBwYnVmZmVyOwotICAgIG1fY29udGV4dE9iaiA9IGNv
bnRleHQ7Ci0jZWxpZiBPUyhMSU5VWCkKLSAgICBpZiAoIXNfZ2wpIHsKLSAgICAgICAgc19nbCA9
IEdMQ29ubmVjdGlvbjo6Y3JlYXRlKCk7Ci0gICAgICAgIGlmICghc19nbCkKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBpbnQgY29uZmlnQXR0cnNbXSA9IHsKLSAgICAgICAgR0xY
X0RSQVdBQkxFX1RZUEUsCi0gICAgICAgIEdMWF9QQlVGRkVSX0JJVCwKLSAgICAgICAgR0xYX1JF
TkRFUl9UWVBFLAotICAgICAgICBHTFhfUkdCQV9CSVQsCi0gICAgICAgIEdMWF9ET1VCTEVCVUZG
RVIsCi0gICAgICAgIDAsCi0gICAgICAgIDAKLSAgICB9OwotICAgIGludCBuZWxlbWVudHMgPSAw
OwotICAgIEdMWEZCQ29uZmlnKiBjb25maWcgPSBzX2dsLT5jaG9vc2VGQkNvbmZpZygwLCBjb25m
aWdBdHRycywgJm5lbGVtZW50cyk7Ci0gICAgaWYgKCFjb25maWcpIHsKLSAgICAgICAgcHJpbnRm
KCJHcmFwaGljc0NvbnRleHQzRDogZ2xYQ2hvb3NlRkJDb25maWcgZmFpbGVkXG4iKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoIW5lbGVtZW50cykgewotICAgICAgICBwcmludGYo
IkdyYXBoaWNzQ29udGV4dDNEOiBnbFhDaG9vc2VGQkNvbmZpZyByZXR1cm5lZCAwIGVsZW1lbnRz
XG4iKTsKLSAgICAgICAgWEZyZWUoY29uZmlnKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAg
ICBHTFhDb250ZXh0IGNvbnRleHQgPSBzX2dsLT5jcmVhdGVOZXdDb250ZXh0KGNvbmZpZ1swXSwg
R0xYX1JHQkFfVFlQRSwgMCwgVHJ1ZSk7Ci0gICAgaWYgKCFjb250ZXh0KSB7Ci0gICAgICAgIHBy
aW50ZigiR3JhcGhpY3NDb250ZXh0M0Q6IGdsWENyZWF0ZU5ld0NvbnRleHQgZmFpbGVkXG4iKTsK
LSAgICAgICAgWEZyZWUoY29uZmlnKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpbnQg
cGJ1ZmZlckF0dHJzW10gPSB7Ci0gICAgICAgIEdMWF9QQlVGRkVSX1dJRFRILAotICAgICAgICAx
LAotICAgICAgICBHTFhfUEJVRkZFUl9IRUlHSFQsCi0gICAgICAgIDEsCi0gICAgICAgIDAKLSAg
ICB9OwotICAgIEdMWFBidWZmZXIgcGJ1ZmZlciA9IHNfZ2wtPmNyZWF0ZVBidWZmZXIoY29uZmln
WzBdLCBwYnVmZmVyQXR0cnMpOwotICAgIFhGcmVlKGNvbmZpZyk7Ci0gICAgaWYgKCFwYnVmZmVy
KSB7Ci0gICAgICAgIHByaW50ZigiR3JhcGhpY3NDb250ZXh0M0Q6IGdseENyZWF0ZVBidWZmZXIg
ZmFpbGVkXG4iKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoIXNfZ2wtPm1ha2VD
dXJyZW50KHBidWZmZXIsIGNvbnRleHQpKSB7Ci0gICAgICAgIHByaW50ZigiR3JhcGhpY3NDb250
ZXh0M0Q6IGdsWE1ha2VDdXJyZW50IGZhaWxlZFxuIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0gICAgbV9jb250ZXh0T2JqID0gY29udGV4dDsKLSAgICBtX3BidWZmZXIgPSBwYnVmZmVyOwot
I2Vsc2UKLSNlcnJvciBNdXN0IHBvcnQgdG8geW91ciBwbGF0Zm9ybQotI2VuZGlmCi0KLSAgICBp
ZiAoIXNfaW5pdGlhbGl6ZWRHTEVXKSB7Ci0gICAgICAgIC8vIEluaXRpYWxpemUgR0xFVyBhbmQg
Y2hlY2sgZm9yIEdMIDIuMCBzdXBwb3J0IGJ5IHRoZSBkcml2ZXJzLgotICAgICAgICBHTGVudW0g
Z2xld0luaXRSZXN1bHQgPSBnbGV3SW5pdCgpOwotICAgICAgICBpZiAoZ2xld0luaXRSZXN1bHQg
IT0gR0xFV19PSykgewotICAgICAgICAgICAgcHJpbnRmKCJHcmFwaGljc0NvbnRleHQzRDogR0xF
VyBpbml0aWFsaXphdGlvbiBmYWlsZWRcbiIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB9Ci0gICAgICAgIGlmICghZ2xld0lzU3VwcG9ydGVkKCJHTF9WRVJTSU9OXzJfMCIpKSB7Ci0g
ICAgICAgICAgICBwcmludGYoIkdyYXBoaWNzQ29udGV4dDNEOiBPcGVuR0wgMi4wIG5vdCBzdXBw
b3J0ZWRcbiIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIHNfaW5p
dGlhbGl6ZWRHTEVXID0gdHJ1ZTsKLSAgICB9CiB9CiAKIEdyYXBoaWNzQ29udGV4dDNESW50ZXJu
YWw6On5HcmFwaGljc0NvbnRleHQzREludGVybmFsKCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKLSNpZm5kZWYgUkVOREVSX1RPX0RFQlVHR0lOR19XSU5ET1cKLSAgICBnbERlbGV0ZVJl
bmRlcmJ1ZmZlcnNFWFQoMSwgJm1fZGVwdGhCdWZmZXIpOwotICAgIGdsRGVsZXRlVGV4dHVyZXMo
MSwgJm1fdGV4dHVyZSk7CisjaWYgUExBVEZPUk0oU0tJQSkKKyAgICBpZiAobV9yZXNpemluZ0Jp
dG1hcCkKKyAgICAgICAgZGVsZXRlIG1fcmVzaXppbmdCaXRtYXA7CisjZWxpZiBQTEFURk9STShD
RykKKyAgICBpZiAobV9yZW5kZXJPdXRwdXQpCisgICAgICAgIGRlbGV0ZVtdIG1fcmVuZGVyT3V0
cHV0OworI2VuZGlmCisKICNpZmRlZiBGTElQX0ZSQU1FQlVGRkVSX1ZFUlRJQ0FMTFkKICAgICBp
ZiAobV9zY2FubGluZSkKICAgICAgICAgZGVsZXRlW10gbV9zY2FubGluZTsKICNlbmRpZgotICAg
IGdsRGVsZXRlRnJhbWVidWZmZXJzRVhUKDEsICZtX2Zibyk7Ci0jZW5kaWYgLy8gIVJFTkRFUl9U
T19ERUJVR0dJTkdfV0lORE9XCiAjaWYgUExBVEZPUk0oU0tJQSkKICAgICBpZiAobV9yZXNpemlu
Z0JpdG1hcCkKICAgICAgICAgZGVsZXRlIG1fcmVzaXppbmdCaXRtYXA7CiAjZW5kaWYKLSNpZiBP
UyhXSU5ET1dTKQotICAgIHdnbE1ha2VDdXJyZW50KDAsIDApOwotICAgIHdnbERlbGV0ZUNvbnRl
eHQobV9jb250ZXh0T2JqKTsKLSAgICBSZWxlYXNlREMobV9jYW52YXNXaW5kb3csIG1fY2FudmFz
REMpOwotICAgIERlc3Ryb3lXaW5kb3cobV9jYW52YXNXaW5kb3cpOwotI2VsaWYgUExBVEZPUk0o
Q0cpCi0gICAgQ0dMU2V0Q3VycmVudENvbnRleHQoMCk7Ci0gICAgQ0dMRGVzdHJveUNvbnRleHQo
bV9jb250ZXh0T2JqKTsKLSAgICBDR0xEZXN0cm95UEJ1ZmZlcihtX3BidWZmZXIpOwotICAgIGlm
IChtX3JlbmRlck91dHB1dCkKLSAgICAgICAgZGVsZXRlW10gbV9yZW5kZXJPdXRwdXQ7Ci0jZWxp
ZiBPUyhMSU5VWCkKLSAgICBzX2dsLT5tYWtlQ3VycmVudCgwLCAwKTsKLSAgICBzX2dsLT5kZXN0
cm95Q29udGV4dChtX2NvbnRleHRPYmopOwotICAgIHNfZ2wtPmRlc3Ryb3lQYnVmZmVyKG1fcGJ1
ZmZlcik7Ci0jZWxzZQotI2Vycm9yIE11c3QgcG9ydCB0byB5b3VyIHBsYXRmb3JtCi0jZW5kaWYK
LSAgICBtX2NvbnRleHRPYmogPSAwOwogfQogCi1ib29sIEdyYXBoaWNzQ29udGV4dDNESW50ZXJu
YWw6Om1ha2VDb250ZXh0Q3VycmVudCgpCitib29sIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6
OmluaXRpYWxpemUoR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cnMpCiB7Ci0jaWYg
T1MoV0lORE9XUykKLSAgICBpZiAod2dsR2V0Q3VycmVudENvbnRleHQoKSAhPSBtX2NvbnRleHRP
YmopCi0gICAgICAgIGlmICh3Z2xNYWtlQ3VycmVudChtX2NhbnZhc0RDLCBtX2NvbnRleHRPYmop
KQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0jZWxpZiBQTEFURk9STShDRykKLSAgICBpZiAo
Q0dMR2V0Q3VycmVudENvbnRleHQoKSAhPSBtX2NvbnRleHRPYmopCi0gICAgICAgIGlmIChDR0xT
ZXRDdXJyZW50Q29udGV4dChtX2NvbnRleHRPYmopID09IGtDR0xOb0Vycm9yKQotICAgICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0jZWxpZiBPUyhMSU5VWCkKLSAgICBpZiAoc19nbC0+Z2V0Q3VycmVu
dENvbnRleHQoKSAhPSBtX2NvbnRleHRPYmopCi0gICAgICAgIGlmIChzX2dsLT5tYWtlQ3VycmVu
dChtX3BidWZmZXIsIG1fY29udGV4dE9iaikpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSNl
bHNlCi0jZXJyb3IgTXVzdCBwb3J0IHRvIHlvdXIgcGxhdGZvcm0KLSNlbmRpZgotICAgIHJldHVy
biBmYWxzZTsKKyAgICBXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIHdl
YkF0dHJpYnV0ZXM7CisgICAgd2ViQXR0cmlidXRlcy5hbHBoYSA9IGF0dHJzLmFscGhhOworICAg
IHdlYkF0dHJpYnV0ZXMuZGVwdGggPSBhdHRycy5kZXB0aDsKKyAgICB3ZWJBdHRyaWJ1dGVzLnN0
ZW5jaWwgPSBhdHRycy5zdGVuY2lsOworICAgIHdlYkF0dHJpYnV0ZXMuYW50aWFsaWFzID0gYXR0
cnMuYW50aWFsaWFzOworICAgIHdlYkF0dHJpYnV0ZXMucHJlbXVsdGlwbGllZEFscGhhID0gYXR0
cnMucHJlbXVsdGlwbGllZEFscGhhOworICAgIC8vIEZJWE1FOiBvbmNlIHRoZSBDaHJvbWl1bSBw
b3J0aW9uIG9mIHRoZSBXZWJLaXRDbGllbnQgY2hhbmdlcyBoYXMgbGFuZGVkLAorICAgIC8vIGNo
YW5nZSB0aGlzIHRvIGNhbGwgV2ViS2l0Ojp3ZWJLaXRDbGllbnQoKS0+Y3JlYXRlR3JhcGhpY3ND
b250ZXh0M0QoKS4KKyAgICBXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNEKiB3ZWJDb250ZXh0
ID0gV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlRGVmYXVsdCgpOworICAgIGlm
ICghd2ViQ29udGV4dCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghd2ViQ29udGV4
dC0+aW5pdGlhbGl6ZSh3ZWJBdHRyaWJ1dGVzKSkgeworICAgICAgICBkZWxldGUgd2ViQ29udGV4
dDsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBtX2ltcGwuc2V0KHdlYkNvbnRl
eHQpOworICAgIHJldHVybiB0cnVlOwogfQogCiBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEIEdy
YXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OnBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QoKSBjb25z
dAogewotICAgIHJldHVybiBtX2NvbnRleHRPYmo7CisgICAgcmV0dXJuIDA7CiB9CiAKIFBsYXRm
b3JtM0RPYmplY3QgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6cGxhdGZvcm1UZXh0dXJlKCkg
Y29uc3QKIHsKLSAgICByZXR1cm4gbV90ZXh0dXJlOwotfQotCi1zdGF0aWMgaW50IGNyZWF0ZVRl
eHR1cmVPYmplY3QoR0xlbnVtIHRhcmdldCkKLXsKLSAgICBHTHVpbnQgdGV4dHVyZSA9IDA7Ci0g
ICAgZ2xHZW5UZXh0dXJlcygxLCAmdGV4dHVyZSk7Ci0gICAgZ2xCaW5kVGV4dHVyZSh0YXJnZXQs
IHRleHR1cmUpOwotICAgIGdsVGV4UGFyYW1ldGVyZih0YXJnZXQsIEdMX1RFWFRVUkVfTUlOX0ZJ
TFRFUiwgR0xfTkVBUkVTVCk7Ci0gICAgZ2xUZXhQYXJhbWV0ZXJmKHRhcmdldCwgR0xfVEVYVFVS
RV9NQUdfRklMVEVSLCBHTF9ORUFSRVNUKTsKLSAgICByZXR1cm4gdGV4dHVyZTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpyZXNoYXBlKGludCB3aWR0aCwgaW50IGhlaWdo
dCkKLXsKLSNpZmRlZiBSRU5ERVJfVE9fREVCVUdHSU5HX1dJTkRPVwotICAgIFNldFdpbmRvd1Bv
cyhtX2NhbnZhc1dpbmRvdywgSFdORF9UT1AsIDAsIDAsIHdpZHRoLCBoZWlnaHQsCi0gICAgICAg
ICAgICAgICAgIFNXUF9OT01PVkUpOwotICAgIFNob3dXaW5kb3cobV9jYW52YXNXaW5kb3csIFNX
X1NIT1cpOwotI2VuZGlmCi0KLSAgICBtX2NhY2hlZFdpZHRoID0gd2lkdGg7Ci0gICAgbV9jYWNo
ZWRIZWlnaHQgPSBoZWlnaHQ7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0KLSNpZm5kZWYg
UkVOREVSX1RPX0RFQlVHR0lOR19XSU5ET1cKLSNpZmRlZiBVU0VfVEVYVFVSRV9SRUNUQU5HTEVf
Rk9SX0ZSQU1FQlVGRkVSCi0gICAgLy8gR0xfVEVYVFVSRV9SRUNUQU5HTEVfQVJCIGlzIHRoZSBi
ZXN0IHN1cHBvcnRlZCByZW5kZXIgdGFyZ2V0IG9uIE1hYyBPUyBYCi0gICAgR0xlbnVtIHRhcmdl
dCA9IEdMX1RFWFRVUkVfUkVDVEFOR0xFX0FSQjsKLSNlbHNlCi0gICAgR0xlbnVtIHRhcmdldCA9
IEdMX1RFWFRVUkVfMkQ7Ci0jZW5kaWYKLSAgICBpZiAoIW1fdGV4dHVyZSkgewotICAgICAgICAv
LyBHZW5lcmF0ZSB0aGUgdGV4dHVyZSBvYmplY3QKLSAgICAgICAgbV90ZXh0dXJlID0gY3JlYXRl
VGV4dHVyZU9iamVjdCh0YXJnZXQpOwotICAgICAgICAvLyBHZW5lcmF0ZSB0aGUgZnJhbWVidWZm
ZXIgb2JqZWN0Ci0gICAgICAgIGdsR2VuRnJhbWVidWZmZXJzRVhUKDEsICZtX2Zibyk7Ci0gICAg
ICAgIC8vIEdlbmVyYXRlIHRoZSBkZXB0aCBidWZmZXIKLSAgICAgICAgZ2xHZW5SZW5kZXJidWZm
ZXJzRVhUKDEsICZtX2RlcHRoQnVmZmVyKTsKLSAgICB9Ci0KLSAgICAvLyBSZWFsbG9jYXRlIHRo
ZSBjb2xvciBhbmQgZGVwdGggYnVmZmVycwotICAgIGdsQmluZFRleHR1cmUodGFyZ2V0LCBtX3Rl
eHR1cmUpOwotICAgIGdsVGV4SW1hZ2UyRCh0YXJnZXQsIDAsIEdMX1JHQkE4LCB3aWR0aCwgaGVp
Z2h0LCAwLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCAwKTsKLSAgICBnbEJpbmRUZXh0dXJl
KHRhcmdldCwgMCk7Ci0KLSAgICBnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9F
WFQsIG1fZmJvKTsKLSAgICBtX2JvdW5kRkJPID0gbV9mYm87Ci0gICAgZ2xCaW5kUmVuZGVyYnVm
ZmVyRVhUKEdMX1JFTkRFUkJVRkZFUl9FWFQsIG1fZGVwdGhCdWZmZXIpOwotICAgIGdsUmVuZGVy
YnVmZmVyU3RvcmFnZUVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCBHTF9ERVBUSF9DT01QT05FTlQs
IHdpZHRoLCBoZWlnaHQpOwotICAgIGdsQmluZFJlbmRlcmJ1ZmZlckVYVChHTF9SRU5ERVJCVUZG
RVJfRVhULCAwKTsKLQotICAgIGdsRnJhbWVidWZmZXJUZXh0dXJlMkRFWFQoR0xfRlJBTUVCVUZG
RVJfRVhULCBHTF9DT0xPUl9BVFRBQ0hNRU5UMF9FWFQsIHRhcmdldCwgbV90ZXh0dXJlLCAwKTsK
LSAgICBnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgR0xf
REVQVEhfQVRUQUNITUVOVF9FWFQsIEdMX1JFTkRFUkJVRkZFUl9FWFQsIG1fZGVwdGhCdWZmZXIp
OwotICAgIEdMZW51bSBzdGF0dXMgPSBnbENoZWNrRnJhbWVidWZmZXJTdGF0dXNFWFQoR0xfRlJB
TUVCVUZGRVJfRVhUKTsKLSAgICBpZiAoc3RhdHVzICE9IEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRF
X0VYVCkgewotICAgICAgICBwcmludGYoIkdyYXBoaWNzQ29udGV4dDNEOiBmcmFtZWJ1ZmZlciB3
YXMgaW5jb21wbGV0ZVxuIik7Ci0KLSAgICAgICAgLy8gRklYTUU6IGNsZWFudXAuCi0gICAgICAg
IG5vdEltcGxlbWVudGVkKCk7Ci0gICAgfQotI2VuZGlmICAvLyBSRU5ERVJfVE9fREVCVUdHSU5H
X1dJTkRPVwotCi0jaWZkZWYgRkxJUF9GUkFNRUJVRkZFUl9WRVJUSUNBTExZCi0gICAgaWYgKG1f
c2NhbmxpbmUpIHsKLSAgICAgICAgZGVsZXRlW10gbV9zY2FubGluZTsKLSAgICAgICAgbV9zY2Fu
bGluZSA9IDA7Ci0gICAgfQotICAgIG1fc2NhbmxpbmUgPSBuZXcgdW5zaWduZWQgY2hhclt3aWR0
aCAqIDRdOwotI2VuZGlmICAvLyBGTElQX0ZSQU1FQlVGRkVSX1ZFUlRJQ0FMTFkKLQotICAgIGds
Q2xlYXIoR0xfQ09MT1JfQlVGRkVSX0JJVCk7Ci0KLSNpZiBQTEFURk9STShDRykKLSAgICAvLyBO
ZWVkIHRvIHJlYWxsb2NhdGUgdGhlIGNsaWVudC1zaWRlIGJhY2tpbmcgc3RvcmUuCi0gICAgLy8g
RklYTUU6IG1ha2UgdGhpcyBtb3JlIGVmZmljaWVudC4KLSAgICBpZiAobV9yZW5kZXJPdXRwdXQp
IHsKLSAgICAgICAgZGVsZXRlW10gbV9yZW5kZXJPdXRwdXQ7Ci0gICAgICAgIG1fcmVuZGVyT3V0
cHV0ID0gMDsKLSAgICB9Ci0gICAgaW50IHJvd0J5dGVzID0gd2lkdGggKiA0OwotICAgIG1fcmVu
ZGVyT3V0cHV0ID0gbmV3IHVuc2lnbmVkIGNoYXJbaGVpZ2h0ICogcm93Qnl0ZXNdOwotI2VuZGlm
ICAvLyBQTEFURk9STShDRykKLX0KLQotI2lmZGVmIEZMSVBfRlJBTUVCVUZGRVJfVkVSVElDQUxM
WQotdm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpmbGlwVmVydGljYWxseSh1bnNpZ25l
ZCBjaGFyKiBmcmFtZWJ1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdW5zaWduZWQgaW50IHdpZHRoLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgaGVpZ2h0KQotewotICAgIHVuc2ln
bmVkIGNoYXIqIHNjYW5saW5lID0gbV9zY2FubGluZTsKLSAgICBpZiAoIXNjYW5saW5lKQotICAg
ICAgICByZXR1cm47Ci0gICAgdW5zaWduZWQgaW50IHJvd0J5dGVzID0gd2lkdGggKiA0OwotICAg
IHVuc2lnbmVkIGludCBjb3VudCA9IGhlaWdodCAvIDI7Ci0gICAgZm9yICh1bnNpZ25lZCBpbnQg
aSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIqIHJvd0EgPSBm
cmFtZWJ1ZmZlciArIGkgKiByb3dCeXRlczsKLSAgICAgICAgdW5zaWduZWQgY2hhciogcm93QiA9
IGZyYW1lYnVmZmVyICsgKGhlaWdodCAtIGkgLSAxKSAqIHJvd0J5dGVzOwotICAgICAgICAvLyBG
SVhNRTogdGhpcyBpcyB3aGVyZSB0aGUgbXVsdGlwbGljYXRpb24gb2YgdGhlIGFscGhhCi0gICAg
ICAgIC8vIGNoYW5uZWwgaW50byB0aGUgY29sb3IgYnVmZmVyIHdpbGwgbmVlZCB0byBvY2N1ciBp
ZiB0aGUKLSAgICAgICAgLy8gdXNlciBzcGVjaWZpZXMgdGhlICJwcmVtdWx0aXBseUFscGhhIiBm
bGFnIGluIHRoZSBjb250ZXh0Ci0gICAgICAgIC8vIGNyZWF0aW9uIGF0dHJpYnV0ZXMuCi0gICAg
ICAgIG1lbWNweShzY2FubGluZSwgcm93Qiwgcm93Qnl0ZXMpOwotICAgICAgICBtZW1jcHkocm93
Qiwgcm93QSwgcm93Qnl0ZXMpOwotICAgICAgICBtZW1jcHkocm93QSwgc2NhbmxpbmUsIHJvd0J5
dGVzKTsKLSAgICB9CisgICAgcmV0dXJuIDA7CiB9Ci0jZW5kaWYKIAogdm9pZCBHcmFwaGljc0Nv
bnRleHQzREludGVybmFsOjpiZWdpblBhaW50KFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4
dCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLQotI2lmZGVmIFJFTkRFUl9UT19ERUJV
R0dJTkdfV0lORE9XCi0gICAgU3dhcEJ1ZmZlcnMobV9jYW52YXNEQyk7Ci0jZWxzZQotICAgIC8v
IEVhcmxpZXIgdmVyc2lvbnMgb2YgdGhpcyBjb2RlIHVzZWQgdGhlIEdQVSB0byBmbGlwIHRoZQot
ICAgIC8vIGZyYW1lYnVmZmVyIHZlcnRpY2FsbHkgYmVmb3JlIHJlYWRpbmcgaXQgYmFjayBmb3Ig
Y29tcG9zaXRpbmcKLSAgICAvLyB2aWEgc29mdHdhcmUuIFRoaXMgY29kZSB3YXMgcXVpdGUgY29t
cGxpY2F0ZWQsIHVzZWQgYSBsb3Qgb2YKLSAgICAvLyBHUFUgbWVtb3J5LCBhbmQgZGlkbid0IHBy
b3ZpZGUgYW4gb2J2aW91cyBzcGVlZHVwLiBTaW5jZSB0aGlzCi0gICAgLy8gdmVydGljYWwgZmxp
cCBpcyBvbmx5IGEgdGVtcG9yYXJ5IHNvbHV0aW9uIGFueXdheSB1bnRpbCBDaHJvbWUKLSAgICAv
LyBpcyBmdWxseSBHUFUgY29tcG9zaXRlZCwgaXQgd2Fzbid0IHdvcnRoIHRoZSBjb21wbGV4aXR5
LgotCiAgICAgSFRNTENhbnZhc0VsZW1lbnQqIGNhbnZhcyA9IGNvbnRleHQtPmNhbnZhcygpOwog
ICAgIEltYWdlQnVmZmVyKiBpbWFnZUJ1ZmZlciA9IGNhbnZhcy0+YnVmZmVyKCk7CiAgICAgdW5z
aWduZWQgY2hhciogcGl4ZWxzID0gMDsKLSAgICBib29sIG11c3RSZXN0b3JlRkJPID0gKG1fYm91
bmRGQk8gIT0gbV9mYm8pOwotICAgIGlmIChtdXN0UmVzdG9yZUZCTykKLSAgICAgICAgZ2xCaW5k
RnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX2Zibyk7CiAjaWYgUExBVEZPUk0o
U0tJQSkKICAgICBjb25zdCBTa0JpdG1hcCogY2FudmFzQml0bWFwID0gaW1hZ2VCdWZmZXItPmNv
bnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCktPmJpdG1hcCgpOwogICAgIGNvbnN0IFNrQml0bWFw
KiByZWFkYmFja0JpdG1hcCA9IDA7CiAgICAgQVNTRVJUKGNhbnZhc0JpdG1hcC0+Y29uZmlnKCkg
PT0gU2tCaXRtYXA6OmtBUkdCXzg4ODhfQ29uZmlnKTsKLSAgICBpZiAoY2FudmFzQml0bWFwLT53
aWR0aCgpID09IG1fY2FjaGVkV2lkdGggJiYgY2FudmFzQml0bWFwLT5oZWlnaHQoKSA9PSBtX2Nh
Y2hlZEhlaWdodCkgeworICAgIGlmIChjYW52YXNCaXRtYXAtPndpZHRoKCkgPT0gbV9pbXBsLT53
aWR0aCgpICYmIGNhbnZhc0JpdG1hcC0+aGVpZ2h0KCkgPT0gbV9pbXBsLT5oZWlnaHQoKSkgewog
ICAgICAgICAvLyBUaGlzIGlzIHRoZSBmYXN0ZXN0IGFuZCBtb3N0IGNvbW1vbiBjYXNlLiBXZSBy
ZWFkIGJhY2sKICAgICAgICAgLy8gZGlyZWN0bHkgaW50byB0aGUgY2FudmFzJ3MgYmFja2luZyBz
dG9yZS4KICAgICAgICAgcmVhZGJhY2tCaXRtYXAgPSBjYW52YXNCaXRtYXA7CkBAIC03NzcsMTUg
KzM5MiwxNSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmJlZ2luUGFpCiAgICAg
ICAgIC8vIFdlIG5lZWQgdG8gYWxsb2NhdGUgYSB0ZW1wb3JhcnkgYml0bWFwIGZvciByZWFkaW5n
IGJhY2sgdGhlCiAgICAgICAgIC8vIHBpeGVsIGRhdGEuIFdlIHdpbGwgdGhlbiB1c2UgU2tpYSB0
byByZXNjYWxlIHRoaXMgYml0bWFwIHRvCiAgICAgICAgIC8vIHRoZSBzaXplIG9mIHRoZSBjYW52
YXMncyBiYWNraW5nIHN0b3JlLgotICAgICAgICBpZiAobV9yZXNpemluZ0JpdG1hcCAmJiAobV9y
ZXNpemluZ0JpdG1hcC0+d2lkdGgoKSAhPSBtX2NhY2hlZFdpZHRoIHx8IG1fcmVzaXppbmdCaXRt
YXAtPmhlaWdodCgpICE9IG1fY2FjaGVkSGVpZ2h0KSkgeworICAgICAgICBpZiAobV9yZXNpemlu
Z0JpdG1hcCAmJiAobV9yZXNpemluZ0JpdG1hcC0+d2lkdGgoKSAhPSBtX2ltcGwtPndpZHRoKCkg
fHwgbV9yZXNpemluZ0JpdG1hcC0+aGVpZ2h0KCkgIT0gbV9pbXBsLT5oZWlnaHQoKSkpIHsKICAg
ICAgICAgICAgIGRlbGV0ZSBtX3Jlc2l6aW5nQml0bWFwOwogICAgICAgICAgICAgbV9yZXNpemlu
Z0JpdG1hcCA9IDA7CiAgICAgICAgIH0KICAgICAgICAgaWYgKCFtX3Jlc2l6aW5nQml0bWFwKSB7
CiAgICAgICAgICAgICBtX3Jlc2l6aW5nQml0bWFwID0gbmV3IFNrQml0bWFwKCk7CiAgICAgICAg
ICAgICBtX3Jlc2l6aW5nQml0bWFwLT5zZXRDb25maWcoU2tCaXRtYXA6OmtBUkdCXzg4ODhfQ29u
ZmlnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fY2FjaGVkV2lk
dGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9jYWNoZWRIZWln
aHQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faW1wbC0+d2lk
dGgoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2ltcGwtPmhl
aWdodCgpKTsKICAgICAgICAgICAgIGlmICghbV9yZXNpemluZ0JpdG1hcC0+YWxsb2NQaXhlbHMo
KSkgewogICAgICAgICAgICAgICAgIGRlbGV0ZSBtX3Jlc2l6aW5nQml0bWFwOwogICAgICAgICAg
ICAgICAgIG1fcmVzaXppbmdCaXRtYXAgPSAwOwpAQCAtNzk4LDIzICs0MTMsMTQgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHQzREludGVybmFsOjpiZWdpblBhaQogICAgIC8vIFJlYWQgYmFjayB0aGUg
ZnJhbWUgYnVmZmVyLgogICAgIFNrQXV0b0xvY2tQaXhlbHMgYml0bWFwTG9jaygqcmVhZGJhY2tC
aXRtYXApOwogICAgIHBpeGVscyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihyZWFkYmFj
a0JpdG1hcC0+Z2V0UGl4ZWxzKCkpOwotICAgIGdsUmVhZFBpeGVscygwLCAwLCBtX2NhY2hlZFdp
ZHRoLCBtX2NhY2hlZEhlaWdodCwgR0xfQkdSQSwgR0xfVU5TSUdORURfQllURSwgcGl4ZWxzKTsK
ICNlbGlmIFBMQVRGT1JNKENHKQotICAgIGlmIChtX3JlbmRlck91dHB1dCkgeworICAgIGlmICht
X3JlbmRlck91dHB1dCkKICAgICAgICAgcGl4ZWxzID0gbV9yZW5kZXJPdXRwdXQ7Ci0gICAgICAg
IGdsUmVhZFBpeGVscygwLCAwLCBtX2NhY2hlZFdpZHRoLCBtX2NhY2hlZEhlaWdodCwgR0xfQkdS
QSwgR0xfVU5TSUdORURfSU5UXzhfOF84XzhfUkVWLCBwaXhlbHMpOwotICAgIH0KICNlbHNlCiAj
ZXJyb3IgTXVzdCBwb3J0IHRvIHlvdXIgcGxhdGZvcm0KICNlbmRpZgogCi0gICAgaWYgKG11c3RS
ZXN0b3JlRkJPKQotICAgICAgICBnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9F
WFQsIG1fYm91bmRGQk8pOwotCi0jaWZkZWYgRkxJUF9GUkFNRUJVRkZFUl9WRVJUSUNBTExZCi0g
ICAgaWYgKHBpeGVscykKLSAgICAgICAgZmxpcFZlcnRpY2FsbHkocGl4ZWxzLCBtX2NhY2hlZFdp
ZHRoLCBtX2NhY2hlZEhlaWdodCk7Ci0jZW5kaWYKKyAgICBtX2ltcGwtPnJlYWRCYWNrRnJhbWVi
dWZmZXIocGl4ZWxzLCA0ICogbV9pbXBsLT53aWR0aCgpICogbV9pbXBsLT5oZWlnaHQoKSk7CiAK
ICNpZiBQTEFURk9STShTS0lBKQogICAgIGlmIChtX3Jlc2l6aW5nQml0bWFwKSB7CkBAIC04MjYs
MTEgKzQzMiwxMSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmJlZ2luUGFpCiAg
ICAgfQogI2VsaWYgUExBVEZPUk0oQ0cpCiAgICAgaWYgKG1fcmVuZGVyT3V0cHV0KSB7Ci0gICAg
ICAgIGludCByb3dCeXRlcyA9IG1fY2FjaGVkV2lkdGggKiA0OwotICAgICAgICBDR0RhdGFQcm92
aWRlclJlZiBkYXRhUHJvdmlkZXIgPSBDR0RhdGFQcm92aWRlckNyZWF0ZVdpdGhEYXRhKDAsIG1f
cmVuZGVyT3V0cHV0LCByb3dCeXRlcyAqIG1fY2FjaGVkSGVpZ2h0LCAwKTsKKyAgICAgICAgaW50
IHJvd0J5dGVzID0gbV9pbXBsLT53aWR0aCgpICogNDsKKyAgICAgICAgQ0dEYXRhUHJvdmlkZXJS
ZWYgZGF0YVByb3ZpZGVyID0gQ0dEYXRhUHJvdmlkZXJDcmVhdGVXaXRoRGF0YSgwLCBtX3JlbmRl
ck91dHB1dCwgcm93Qnl0ZXMgKiBtX2ltcGwtPmhlaWdodCgpLCAwKTsKICAgICAgICAgQ0dDb2xv
clNwYWNlUmVmIGNvbG9yU3BhY2UgPSBDR0NvbG9yU3BhY2VDcmVhdGVEZXZpY2VSR0IoKTsKLSAg
ICAgICAgQ0dJbWFnZVJlZiBjZ0ltYWdlID0gQ0dJbWFnZUNyZWF0ZShtX2NhY2hlZFdpZHRoLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fY2FjaGVkSGVpZ2h0
LAorICAgICAgICBDR0ltYWdlUmVmIGNnSW1hZ2UgPSBDR0ltYWdlQ3JlYXRlKG1faW1wbC0+d2lk
dGgoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2ltcGwt
PmhlaWdodCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzIsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93Qnl0ZXMsCkBAIC04NjEsMTAx
OCArNDY3LDc2MyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmJlZ2luUGFpCiAj
ZWxzZQogI2Vycm9yIE11c3QgcG9ydCB0byB5b3VyIHBsYXRmb3JtCiAjZW5kaWYKLQotI2VuZGlm
ICAvLyBSRU5ERVJfVE9fREVCVUdHSU5HX1dJTkRPVwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dDNESW50ZXJuYWw6OmFjdGl2ZVRleHR1cmUodW5zaWduZWQgbG9uZyB0ZXh0dXJlKQordm9pZCBH
cmFwaGljc0NvbnRleHQzREludGVybmFsOjplbmRQYWludCgpCiB7Ci0gICAgLy8gRklYTUU6IHF1
ZXJ5IG51bWJlciBvZiB0ZXh0dXJlcyBhdmFpbGFibGUuCi0gICAgaWYgKHRleHR1cmUgPCBHTF9U
RVhUVVJFMCB8fCB0ZXh0dXJlID4gR0xfVEVYVFVSRTArMzIpCi0gICAgICAgIC8vIEZJWE1FOiBy
YWlzZSBleGNlcHRpb24uCi0gICAgICAgIHJldHVybjsKLQotICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOwotICAgIGdsQWN0aXZlVGV4dHVyZSh0ZXh0dXJlKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHQzREludGVybmFsOjpiaW5kQnVmZmVyKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYkdMQnVmZmVyKiBidWZmZXIp
Ci17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgR0x1aW50IGJ1ZklEID0gRVhUUkFD
VChidWZmZXIpOwotICAgIGlmICh0YXJnZXQgPT0gR0xfQVJSQVlfQlVGRkVSKQotICAgICAgICBt
X2JvdW5kQXJyYXlCdWZmZXIgPSBidWZJRDsKLSAgICBnbEJpbmRCdWZmZXIodGFyZ2V0LCBidWZJ
RCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6YmluZEZyYW1lYnVmZmVy
KHVuc2lnbmVkIGxvbmcgdGFyZ2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgV2ViR0xGcmFtZWJ1ZmZlciogZnJhbWVidWZmZXIpCi17Ci0gICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgR0x1aW50IGlkID0gRVhUUkFDVChmcmFtZWJ1ZmZlcik7
Ci0gICAgaWYgKCFpZCkKLSAgICAgICAgaWQgPSBtX2ZibzsKLSAgICBnbEJpbmRGcmFtZWJ1ZmZl
ckVYVCh0YXJnZXQsIGlkKTsKLSAgICBtX2JvdW5kRkJPID0gaWQ7CiB9CiAKLS8vIElmIHdlIGRp
ZG4ndCBoYXZlIHRvIGhhY2sgR0xfVEVYVFVSRV9XUkFQX1IgZm9yIGN1YmUgbWFwcywKLS8vIHdl
IGNvdWxkIGp1c3QgdXNlOgotLy8gR0xfU0FNRV9NRVRIT0RfMl9YMihCaW5kVGV4dHVyZSwgYmlu
ZFRleHR1cmUsIHVuc2lnbmVkIGxvbmcsIFdlYkdMVGV4dHVyZSopCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDNESW50ZXJuYWw6OmJpbmRUZXh0dXJlKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJHTFRleHR1cmUqIHRleHR1
cmUpCit2b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OnJlc2hhcGUoaW50IHdpZHRoLCBp
bnQgaGVpZ2h0KQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIHVuc2lnbmVkIGlu
dCB0ZXh0dXJlT2JqZWN0ID0gRVhUUkFDVCh0ZXh0dXJlKTsKKyAgICBpZiAod2lkdGggPT0gbV9p
bXBsLT53aWR0aCgpICYmIGhlaWdodCA9PSBtX2ltcGwtPmhlaWdodCgpKQorICAgICAgICByZXR1
cm47CiAKLSAgICBnbEJpbmRUZXh0dXJlKHRhcmdldCwgdGV4dHVyZU9iamVjdCk7CisgICAgbV9p
bXBsLT5yZXNoYXBlKHdpZHRoLCBoZWlnaHQpOwogCi0gICAgLy8gRklYTUU6IEdMX1RFWFRVUkVf
V1JBUF9SIGlzbid0IGV4cG9zZWQgaW4gdGhlIE9wZW5HTCBFUyAyLjAKLSAgICAvLyBBUEkuIE9u
IGRlc2t0b3AgT3BlbkdMIGltcGxlbWVudGF0aW9ucyBpdCBzZWVtcyBuZWNlc3NhcnkgdG8KLSAg
ICAvLyBzZXQgdGhpcyB3cmFwIG1vZGUgdG8gR0xfQ0xBTVBfVE9fRURHRSB0byBnZXQgY29ycmVj
dCBiZWhhdmlvcgotICAgIC8vIG9mIGN1YmUgbWFwcy4KLSAgICBpZiAodGV4dHVyZSkgewotICAg
ICAgICBpZiAodGFyZ2V0ID09IEdMX1RFWFRVUkVfQ1VCRV9NQVApIHsKLSAgICAgICAgICAgIGlm
ICghdGV4dHVyZS0+aXNDdWJlTWFwUldyYXBNb2RlSW5pdGlhbGl6ZWQoKSkgewotICAgICAgICAg
ICAgICAgIGdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFX0NVQkVfTUFQLCBHTF9URVhUVVJFX1dS
QVBfUiwgR0xfQ0xBTVBfVE9fRURHRSk7Ci0gICAgICAgICAgICAgICAgdGV4dHVyZS0+c2V0Q3Vi
ZU1hcFJXcmFwTW9kZUluaXRpYWxpemVkKHRydWUpOwotICAgICAgICAgICAgfQotICAgICAgICB9
IGVsc2UKLSAgICAgICAgICAgIHRleHR1cmUtPnNldEN1YmVNYXBSV3JhcE1vZGVJbml0aWFsaXpl
ZChmYWxzZSk7CisjaWYgUExBVEZPUk0oQ0cpCisgICAgLy8gTmVlZCB0byByZWFsbG9jYXRlIHRo
ZSBjbGllbnQtc2lkZSBiYWNraW5nIHN0b3JlLgorICAgIC8vIEZJWE1FOiBtYWtlIHRoaXMgbW9y
ZSBlZmZpY2llbnQuCisgICAgaWYgKG1fcmVuZGVyT3V0cHV0KSB7CisgICAgICAgIGRlbGV0ZVtd
IG1fcmVuZGVyT3V0cHV0OworICAgICAgICBtX3JlbmRlck91dHB1dCA9IDA7CiAgICAgfQorICAg
IGludCByb3dCeXRlcyA9IHdpZHRoICogNDsKKyAgICBtX3JlbmRlck91dHB1dCA9IG5ldyB1bnNp
Z25lZCBjaGFyW2hlaWdodCAqIHJvd0J5dGVzXTsKKyNlbmRpZiAvLyBQTEFURk9STShDRykKIH0K
IAotdm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpidWZmZXJEYXRhSW1wbCh1bnNpZ25l
ZCBsb25nIHRhcmdldCwgaW50IHNpemUsIGNvbnN0IHZvaWQqIGRhdGEsIHVuc2lnbmVkIGxvbmcg
dXNhZ2UpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgLy8gRklYTUU6IG1ha2Ug
dGhpcyB2ZXJpZmljYXRpb24gbW9yZSBlZmZpY2llbnQuCi0gICAgR0xpbnQgYmluZGluZyA9IDA7
Ci0gICAgR0xlbnVtIGJpbmRpbmdfdGFyZ2V0ID0gR0xfQVJSQVlfQlVGRkVSX0JJTkRJTkc7Ci0g
ICAgaWYgKHRhcmdldCA9PSBHTF9FTEVNRU5UX0FSUkFZX0JVRkZFUikKLSAgICAgICAgYmluZGlu
Z190YXJnZXQgPSBHTF9FTEVNRU5UX0FSUkFZX0JVRkZFUl9CSU5ESU5HOwotICAgIGdsR2V0SW50
ZWdlcnYoYmluZGluZ190YXJnZXQsICZiaW5kaW5nKTsKLSAgICBpZiAoYmluZGluZyA8PSAwKSB7
Ci0gICAgICAgIC8vIEZJWE1FOiByYWlzZSBleGNlcHRpb24uCi0gICAgICAgIC8vIExvZ01lc3Nh
Z2VmKCgiYnVmZmVyRGF0YTogbm8gYnVmZmVyIGJvdW5kIikpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQorLy8gTWFjcm9zIHRvIGFzc2lzdCBpbiBkZWxlZ2F0aW5nIGZyb20gR3JhcGhpY3NDb250
ZXh0M0RJbnRlcm5hbCB0bworLy8gV2ViR3JhcGhpY3NDb250ZXh0M0QuCiAKLSAgICBnbEJ1ZmZl
ckRhdGEodGFyZ2V0LAotICAgICAgICAgICAgICAgICAgIHNpemUsCi0gICAgICAgICAgICAgICAg
ICAgZGF0YSwKLSAgICAgICAgICAgICAgICAgICB1c2FnZSk7CisjZGVmaW5lIERFTEVHQVRFX1RP
X0lNUEwobmFtZSkgXAordm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpuYW1lKCkgXAor
eyBcCisgICAgbV9pbXBsLT5uYW1lKCk7IFwKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQzRElu
dGVybmFsOjpkaXNhYmxlVmVydGV4QXR0cmliQXJyYXkodW5zaWduZWQgbG9uZyBpbmRleCkKLXsK
LSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBpZiAoaW5kZXggPCBOdW1UcmFja2VkUG9p
bnRlclN0YXRlcykKLSAgICAgICAgbV92ZXJ0ZXhBdHRyaWJQb2ludGVyU3RhdGVbaW5kZXhdLmVu
YWJsZWQgPSBmYWxzZTsKLSAgICBnbERpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShpbmRleCk7Cisj
ZGVmaW5lIERFTEVHQVRFX1RPX0lNUExfUihuYW1lLCBydCkgICAgICAgICAgIFwKK3J0IEdyYXBo
aWNzQ29udGV4dDNESW50ZXJuYWw6Om5hbWUoKSBcCit7IFwKKyAgICByZXR1cm4gbV9pbXBsLT5u
YW1lKCk7IFwKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjplbmFibGVWZXJ0
ZXhBdHRyaWJBcnJheSh1bnNpZ25lZCBsb25nIGluZGV4KQotewotICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOwotICAgIGlmIChpbmRleCA8IE51bVRyYWNrZWRQb2ludGVyU3RhdGVzKQotICAgICAg
ICBtX3ZlcnRleEF0dHJpYlBvaW50ZXJTdGF0ZVtpbmRleF0uZW5hYmxlZCA9IHRydWU7Ci0gICAg
Z2xFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShpbmRleCk7CisjZGVmaW5lIERFTEVHQVRFX1RPX0lN
UExfMShuYW1lLCB0MSkgXAordm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpuYW1lKHQx
IGExKSBcCit7IFwKKyAgICBtX2ltcGwtPm5hbWUoYTEpOyBcCiB9CiAKLXVuc2lnbmVkIGxvbmcg
R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6Z2V0RXJyb3IoKQotewotICAgIGlmIChtX3N5bnRo
ZXRpY0Vycm9ycy5zaXplKCkgPiAwKSB7Ci0gICAgICAgIExpc3RIYXNoU2V0PHVuc2lnbmVkIGxv
bmc+OjppdGVyYXRvciBpdGVyID0gbV9zeW50aGV0aWNFcnJvcnMuYmVnaW4oKTsKLSAgICAgICAg
dW5zaWduZWQgbG9uZyBlcnIgPSAqaXRlcjsKLSAgICAgICAgbV9zeW50aGV0aWNFcnJvcnMucmVt
b3ZlKGl0ZXIpOwotICAgICAgICByZXR1cm4gZXJyOwotICAgIH0KLQotICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOwotICAgIHJldHVybiBnbEdldEVycm9yKCk7CisjZGVmaW5lIERFTEVHQVRFX1RP
X0lNUExfMV9YKG5hbWUsIHQxKSBcCit2b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6Om5h
bWUodDEgYTEpIFwKK3sgXAorICAgIG1faW1wbC0+bmFtZShFWFRSQUNUKGExKSk7ICAgICAgICAg
ICAgICAgICAgXAogfQogCi1HcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBHcmFwaGljc0Nv
bnRleHQzREludGVybmFsOjpnZXRDb250ZXh0QXR0cmlidXRlcygpCi17Ci0gICAgcmV0dXJuIG1f
YXR0cnM7CisjZGVmaW5lIERFTEVHQVRFX1RPX0lNUExfMVIobmFtZSwgdDEsIHJ0KSAgICBcCity
dCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpuYW1lKHQxIGExKSBcCit7IFwKKyAgICByZXR1
cm4gbV9pbXBsLT5uYW1lKGExKTsgXAogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJu
YWw6OnZlcnRleEF0dHJpYlBvaW50ZXIodW5zaWduZWQgbG9uZyBpbmR4LCBpbnQgc2l6ZSwgaW50
IHR5cGUsIGJvb2wgbm9ybWFsaXplZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHN0cmlkZSwgdW5zaWduZWQgbG9uZyBv
ZmZzZXQpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0KLSAgICBpZiAobV9ib3VuZEFy
cmF5QnVmZmVyIDw9IDApIHsKLSAgICAgICAgLy8gRklYTUU6IHJhaXNlIGV4Y2VwdGlvbi4KLSAg
ICAgICAgLy8gTG9nTWVzc2FnZWYoKCJidWZmZXJEYXRhOiBubyBidWZmZXIgYm91bmQiKSk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoaW5keCA8IE51bVRyYWNrZWRQb2ludGVy
U3RhdGVzKSB7Ci0gICAgICAgIFZlcnRleEF0dHJpYlBvaW50ZXJTdGF0ZSYgc3RhdGUgPSBtX3Zl
cnRleEF0dHJpYlBvaW50ZXJTdGF0ZVtpbmR4XTsKLSAgICAgICAgc3RhdGUuYnVmZmVyID0gbV9i
b3VuZEFycmF5QnVmZmVyOwotICAgICAgICBzdGF0ZS5pbmR4ID0gaW5keDsKLSAgICAgICAgc3Rh
dGUuc2l6ZSA9IHNpemU7Ci0gICAgICAgIHN0YXRlLnR5cGUgPSB0eXBlOwotICAgICAgICBzdGF0
ZS5ub3JtYWxpemVkID0gbm9ybWFsaXplZDsKLSAgICAgICAgc3RhdGUuc3RyaWRlID0gc3RyaWRl
OwotICAgICAgICBzdGF0ZS5vZmZzZXQgPSBvZmZzZXQ7Ci0gICAgfQotCi0gICAgZ2xWZXJ0ZXhB
dHRyaWJQb2ludGVyKGluZHgsIHNpemUsIHR5cGUsIG5vcm1hbGl6ZWQsIHN0cmlkZSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oc3RhdGljX2Nhc3Q8
aW50cHRyX3Q+KG9mZnNldCkpKTsKKyNkZWZpbmUgREVMRUdBVEVfVE9fSU1QTF8xUl9YKG5hbWUs
IHQxLCBydCkgICAgXAorcnQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6bmFtZSh0MSBhMSkg
XAoreyBcCisgICAgcmV0dXJuIG1faW1wbC0+bmFtZShFWFRSQUNUKGExKSk7ICAgICAgICAgICBc
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6dmlld3BvcnRJbXBsKGxvbmcg
eCwgbG9uZyB5LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCkKLXsK
LSAgICBnbFZpZXdwb3J0KHgsIHksIHdpZHRoLCBoZWlnaHQpOworI2RlZmluZSBERUxFR0FURV9U
T19JTVBMXzIobmFtZSwgdDEsIHQyKSBcCit2b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6
Om5hbWUodDEgYTEsIHQyIGEyKSBcCit7IFwKKyAgICBtX2ltcGwtPm5hbWUoYTEsIGEyKTsgXAog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OnN5bnRoZXNpemVHTEVycm9yKHVu
c2lnbmVkIGxvbmcgZXJyb3IpCi17Ci0gICAgbV9zeW50aGV0aWNFcnJvcnMuYWRkKGVycm9yKTsK
KyNkZWZpbmUgREVMRUdBVEVfVE9fSU1QTF8yX1gxMihuYW1lLCB0MSwgdDIpIFwKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6bmFtZSh0MSBhMSwgdDIgYTIpIFwKK3sgXAorICAgIG1f
aW1wbC0+bmFtZShFWFRSQUNUKGExKSwgRVhUUkFDVChhMikpOyAgICAgXAogfQogCi0vLyBHcmFw
aGljc0NvbnRleHQzRCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQotCi0vKiBIZWxwZXIgbWFjcm9zIGZvciB3aGVuIHdlJ3JlIGp1c3Qgd3JhcHBp
bmcgYSBnbCBtZXRob2QsIHNvIHRoYXQKLSAqIHdlIGNhbiBhdm9pZCBoYXZpbmcgdG8gdHlwZSB0
aGlzIDUwMCB0aW1lcy4gIE5vdGUgdGhhdCB0aGVzZSBNVVNUCi0gKiBOT1QgQkUgVVNFRCBpZiB3
ZSBuZWVkIHRvIGNoZWNrIGFueSBvZiB0aGUgcGFyYW1ldGVycy4KLSAqLwotCi0jZGVmaW5lIEdM
X1NBTUVfTUVUSE9EXzAoZ2xuYW1lLCBuYW1lKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6bmFtZSgpICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLXsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGdsIyNnbG5hbWUoKTsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
KyNkZWZpbmUgREVMRUdBVEVfVE9fSU1QTF8yX1gyKG5hbWUsIHQxLCB0MikgXAordm9pZCBHcmFw
aGljc0NvbnRleHQzREludGVybmFsOjpuYW1lKHQxIGExLCB0MiBhMikgXAoreyBcCisgICAgbV9p
bXBsLT5uYW1lKGExLCBFWFRSQUNUKGEyKSk7ICAgICBcCiB9CiAKLSNkZWZpbmUgR0xfU0FNRV9N
RVRIT0RfMShnbG5hbWUsIG5hbWUsIHQxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpuYW1lKHQxIGExKSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAoteyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
LSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgZ2wjI2dsbmFtZShhMSk7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorI2RlZmlu
ZSBERUxFR0FURV9UT19JTVBMXzJSKG5hbWUsIHQxLCB0MiwgcnQpICBcCitydCBHcmFwaGljc0Nv
bnRleHQzREludGVybmFsOjpuYW1lKHQxIGExLCB0MiBhMikgXAoreyBcCisgICAgcmV0dXJuIG1f
aW1wbC0+bmFtZShhMSwgYTIpOyBcCiB9CiAKLSNkZWZpbmUgR0xfU0FNRV9NRVRIT0RfMV9YKGds
bmFtZSwgbmFtZSwgdDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi12b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjpuYW1lKHQxIGExKSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAoteyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCi0gICAgZ2wjI2dsbmFtZShFWFRSQUNUKGExKSk7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorI2RlZmluZSBERUxFR0FURV9U
T19JTVBMXzMobmFtZSwgdDEsIHQyLCB0MykgICBcCit2b2lkIEdyYXBoaWNzQ29udGV4dDNESW50
ZXJuYWw6Om5hbWUodDEgYTEsIHQyIGEyLCB0MyBhMykgICAgXAoreyBcCisgICAgbV9pbXBsLT5u
YW1lKGExLCBhMiwgYTMpOyAgICAgICAgICAgICAgICAgIFwKIH0KIAotI2RlZmluZSBHTF9TQU1F
X01FVEhPRF8yKGdsbmFtZSwgbmFtZSwgdDEsIHQyKSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6Om5hbWUodDEgYTEsIHQyIGEyKSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi17ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBnbCMjZ2xuYW1lKGExLCBhMik7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisjZGVm
aW5lIERFTEVHQVRFX1RPX0lNUExfM19YMShuYW1lLCB0MSwgdDIsIHQzKSAgIFwKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6bmFtZSh0MSBhMSwgdDIgYTIsIHQzIGEzKSAgICBcCit7
IFwKKyAgICBtX2ltcGwtPm5hbWUoRVhUUkFDVChhMSksIGEyLCBhMyk7ICAgICAgICAgIFwKIH0K
IAotI2RlZmluZSBHTF9TQU1FX01FVEhPRF8yX1gxMihnbG5hbWUsIG5hbWUsIHQxLCB0MikgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6Om5hbWUo
dDEgYTEsIHQyIGEyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi17ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBnbCMjZ2xu
YW1lKEVYVFJBQ1QoYTEpLCBFWFRSQUNUKGEyKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCisjZGVmaW5lIERFTEVHQVRFX1RPX0lNUExfM1IobmFtZSwgdDEsIHQyLCB0
MywgcnQpICAgXAorcnQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6bmFtZSh0MSBhMSwgdDIg
YTIsIHQzIGEzKSAgICBcCit7IFwKKyAgICByZXR1cm4gbV9pbXBsLT5uYW1lKGExLCBhMiwgYTMp
OyAgICAgICAgICAgICAgICAgIFwKIH0KIAotI2RlZmluZSBHTF9TQU1FX01FVEhPRF8yX1gyKGds
bmFtZSwgbmFtZSwgdDEsIHQyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLXZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6Om5hbWUodDEgYTEsIHQyIGEyKSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCi17ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKLSAgICBnbCMjZ2xuYW1lKGExLCBFWFRSQUNUKGEyKSk7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisjZGVmaW5lIERFTEVHQVRFX1RP
X0lNUExfNChuYW1lLCB0MSwgdDIsIHQzLCB0NCkgICAgXAordm9pZCBHcmFwaGljc0NvbnRleHQz
REludGVybmFsOjpuYW1lKHQxIGExLCB0MiBhMiwgdDMgYTMsIHQ0IGE0KSAgXAoreyBcCisgICAg
bV9pbXBsLT5uYW1lKGExLCBhMiwgYTMsIGE0KTsgICAgICAgICAgICAgIFwKIH0KIAotI2RlZmlu
ZSBHTF9TQU1FX01FVEhPRF8zKGdsbmFtZSwgbmFtZSwgdDEsIHQyLCB0MykgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6Om5hbWUodDEgYTEsIHQy
IGEyLCB0MyBhMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi17ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBnbCMjZ2xuYW1lKGExLCBh
MiwgYTMpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCisjZGVmaW5lIERFTEVHQVRFX1RPX0lNUExfNF9YNChuYW1lLCB0MSwgdDIsIHQzLCB0NCkg
ICAgXAordm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpuYW1lKHQxIGExLCB0MiBhMiwg
dDMgYTMsIHQ0IGE0KSAgXAoreyBcCisgICAgbV9pbXBsLT5uYW1lKGExLCBhMiwgYTMsIEVYVFJB
Q1QoYTQpKTsgICAgICBcCiB9CiAKLSNkZWZpbmUgR0xfU0FNRV9NRVRIT0RfM19YMTIoZ2xuYW1l
LCBuYW1lLCB0MSwgdDIsIHQzKSAgICAgICAgICAgICAgICAgICAgICAgICBcCi12b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpuYW1lKHQxIGExLCB0MiBhMiwgdDMgYTMpICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAoteyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCi0gICAgZ2wjI2dsbmFtZShFWFRSQUNUKGExKSwgRVhUUkFDVChhMiksIGEzKTsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorI2RlZmluZSBERUxFR0FURV9UT19JTVBM
XzUobmFtZSwgdDEsIHQyLCB0MywgdDQsIHQ1KSAgICAgIFwKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
M0RJbnRlcm5hbDo6bmFtZSh0MSBhMSwgdDIgYTIsIHQzIGEzLCB0NCBhNCwgdDUgYTUpICAgICAg
ICBcCit7IFwKKyAgICBtX2ltcGwtPm5hbWUoYTEsIGEyLCBhMywgYTQsIGE1KTsgICBcCiB9CiAK
LSNkZWZpbmUgR0xfU0FNRV9NRVRIT0RfM19YMihnbG5hbWUsIG5hbWUsIHQxLCB0MiwgdDMpICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpuYW1lKHQx
IGExLCB0MiBhMiwgdDMgYTMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAoteyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgZ2wjI2dsbmFt
ZShhMSwgRVhUUkFDVChhMiksIGEzKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorI2RlZmluZSBERUxFR0FURV9UT19JTVBMXzVfWDQobmFtZSwgdDEsIHQyLCB0
MywgdDQsIHQ1KSAgICAgICAgICAgICAgICBcCit2b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJu
YWw6Om5hbWUodDEgYTEsIHQyIGEyLCB0MyBhMywgdDQgYTQsIHQ1IGE1KSAgICAgICAgXAoreyBc
CisgICAgbV9pbXBsLT5uYW1lKGExLCBhMiwgYTMsIEVYVFJBQ1QoYTQpLCBhNSk7ICBcCiB9CiAK
LSNkZWZpbmUgR0xfU0FNRV9NRVRIT0RfNChnbG5hbWUsIG5hbWUsIHQxLCB0MiwgdDMsIHQ0KSAg
ICAgICAgICAgICAgICAgICAgICAgICBcCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpuYW1lKHQx
IGExLCB0MiBhMiwgdDMgYTMsIHQ0IGE0KSAgICAgICAgICAgICAgICAgICAgICAgXAoteyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgZ2wjI2dsbmFt
ZShhMSwgYTIsIGEzLCBhNCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorI2RlZmluZSBERUxFR0FURV9UT19JTVBMXzVSKG5hbWUsIHQxLCB0MiwgdDMs
IHQ0LCB0NSwgcnQpICAgICAgXAorcnQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6bmFtZSh0
MSBhMSwgdDIgYTIsIHQzIGEzLCB0NCBhNCwgdDUgYTUpICAgICAgICBcCit7IFwKKyAgICByZXR1
cm4gbV9pbXBsLT5uYW1lKGExLCBhMiwgYTMsIGE0LCBhNSk7ICAgXAogfQogCi0jZGVmaW5lIEdM
X1NBTUVfTUVUSE9EXzRfWDQoZ2xuYW1lLCBuYW1lLCB0MSwgdDIsIHQzLCB0NCkgICAgICAgICAg
ICAgICAgICAgICAgXAotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6bmFtZSh0MSBhMSwgdDIgYTIs
IHQzIGEzLCB0NCBhNCkgICAgICAgICAgICAgICAgICAgICAgIFwKLXsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGdsIyNnbG5hbWUoYTEsIGEyLCBh
MywgRVhUUkFDVChhNCkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
KyNkZWZpbmUgREVMRUdBVEVfVE9fSU1QTF82KG5hbWUsIHQxLCB0MiwgdDMsIHQ0LCB0NSwgdDYp
ICBcCit2b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6Om5hbWUodDEgYTEsIHQyIGEyLCB0
MyBhMywgdDQgYTQsIHQ1IGE1LCB0NiBhNikgXAoreyBcCisgICAgbV9pbXBsLT5uYW1lKGExLCBh
MiwgYTMsIGE0LCBhNSwgYTYpOyAgICAgICBcCiB9CiAKLSNkZWZpbmUgR0xfU0FNRV9NRVRIT0Rf
NShnbG5hbWUsIG5hbWUsIHQxLCB0MiwgdDMsIHQ0LCB0NSkgICAgICAgICAgICAgICAgICAgICBc
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpuYW1lKHQxIGExLCB0MiBhMiwgdDMgYTMsIHQ0IGE0
LCB0NSBhNSkgICAgICAgICAgICAgICAgXAoteyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCi0gICAgZ2wjI2dsbmFtZShhMSwgYTIsIGEzLCBhNCwgYTUpOyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorI2RlZmluZSBERUxF
R0FURV9UT19JTVBMXzZSKG5hbWUsIHQxLCB0MiwgdDMsIHQ0LCB0NSwgdDYsIHJ0KSAgXAorcnQg
R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6bmFtZSh0MSBhMSwgdDIgYTIsIHQzIGEzLCB0NCBh
NCwgdDUgYTUsIHQ2IGE2KSBcCit7IFwKKyAgICByZXR1cm4gbV9pbXBsLT5uYW1lKGExLCBhMiwg
YTMsIGE0LCBhNSwgYTYpOyAgICAgICBcCiB9CiAKLSNkZWZpbmUgR0xfU0FNRV9NRVRIT0RfNV9Y
NChnbG5hbWUsIG5hbWUsIHQxLCB0MiwgdDMsIHQ0LCB0NSkgICAgICAgICAgICAgICAgICBcCi12
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpuYW1lKHQxIGExLCB0MiBhMiwgdDMgYTMsIHQ0IGE0LCB0
NSBhNSkgICAgICAgICAgICAgICAgXAoteyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCi0gICAgZ2wjI2dsbmFtZShhMSwgYTIsIGEzLCBFWFRSQUNUKGE0KSwg
YTUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorI2RlZmluZSBERUxFR0FU
RV9UT19JTVBMXzdSKG5hbWUsIHQxLCB0MiwgdDMsIHQ0LCB0NSwgdDYsIHQ3LCBydCkgXAorcnQg
R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6bmFtZSh0MSBhMSwgdDIgYTIsIHQzIGEzLCB0NCBh
NCwgdDUgYTUsIHQ2IGE2LCB0NyBhNykgXAoreyBcCisgICAgcmV0dXJuIG1faW1wbC0+bmFtZShh
MSwgYTIsIGEzLCBhNCwgYTUsIGE2LCBhNyk7ICAgXAogfQogCi0jZGVmaW5lIEdMX1NBTUVfTUVU
SE9EXzYoZ2xuYW1lLCBuYW1lLCB0MSwgdDIsIHQzLCB0NCwgdDUsIHQ2KSAgICAgICAgICAgICAg
ICAgXAotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6bmFtZSh0MSBhMSwgdDIgYTIsIHQzIGEzLCB0
NCBhNCwgdDUgYTUsIHQ2IGE2KSAgICAgICAgIFwKLXsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0g
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICAgIGdsIyNnbG5hbWUoYTEsIGEyLCBhMywgYTQsIGE1
LCBhNik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyNkZWZpbmUg
REVMRUdBVEVfVE9fSU1QTF84KG5hbWUsIHQxLCB0MiwgdDMsIHQ0LCB0NSwgdDYsIHQ3LCB0OCkg
ICAgICAgXAordm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpuYW1lKHQxIGExLCB0MiBh
MiwgdDMgYTMsIHQ0IGE0LCB0NSBhNSwgdDYgYTYsIHQ3IGE3LCB0OCBhOCkgXAoreyBcCisgICAg
bV9pbXBsLT5uYW1lKGExLCBhMiwgYTMsIGE0LCBhNSwgYTYsIGE3LCBhOCk7ICAgICAgXAogfQog
Ci0jZGVmaW5lIEdMX1NBTUVfTUVUSE9EXzgoZ2xuYW1lLCBuYW1lLCB0MSwgdDIsIHQzLCB0NCwg
dDUsIHQ2LCB0NywgdDgpICAgICAgICAgXAotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6bmFtZSh0
MSBhMSwgdDIgYTIsIHQzIGEzLCB0NCBhNCwgdDUgYTUsIHQ2IGE2LCB0NyBhNywgdDggYTgpICAg
XAoteyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAg
Z2wjI2dsbmFtZShhMSwgYTIsIGEzLCBhNCwgYTUsIGE2LCBhNywgYTgpOyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorI2RlZmluZSBERUxFR0FURV9UT19JTVBMXzlSKG5hbWUsIHQx
LCB0MiwgdDMsIHQ0LCB0NSwgdDYsIHQ3LCB0OCwgdDksIHJ0KSBcCitydCBHcmFwaGljc0NvbnRl
eHQzREludGVybmFsOjpuYW1lKHQxIGExLCB0MiBhMiwgdDMgYTMsIHQ0IGE0LCB0NSBhNSwgdDYg
YTYsIHQ3IGE3LCB0OCBhOCwgdDkgYTkpIFwKK3sgXAorICAgIHJldHVybiBtX2ltcGwtPm5hbWUo
YTEsIGEyLCBhMywgYTQsIGE1LCBhNiwgYTcsIGE4LCBhOSk7ICAgXAogfQogCi1QYXNzT3duUHRy
PEdyYXBoaWNzQ29udGV4dDNEPiBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlKEdyYXBoaWNzQ29u
dGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJzKQotewotICAgIFBhc3NPd25QdHI8R3JhcGhpY3NDb250
ZXh0M0Q+IGNvbnRleHQgPSBuZXcgR3JhcGhpY3NDb250ZXh0M0QoYXR0cnMpOwotICAgIC8vIEZJ
WE1FOiBhZGQgZXJyb3IgY2hlY2tpbmcKLSAgICByZXR1cm4gY29udGV4dDsKLX0KK0RFTEVHQVRF
X1RPX0lNUExfUihtYWtlQ29udGV4dEN1cnJlbnQsIGJvb2wpCitERUxFR0FURV9UT19JTVBMXzFS
KHNpemVJbkJ5dGVzLCBpbnQsIGludCkKIAotR3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29u
dGV4dDNEKEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJzKQotICAgIDogbV9jdXJy
ZW50V2lkdGgoMCkKLSAgICAsIG1fY3VycmVudEhlaWdodCgwKQotICAgICwgbV9pbnRlcm5hbChu
ZXcgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbChhdHRycykpCi17Ci19CitERUxFR0FURV9UT19J
TVBMXzEoYWN0aXZlVGV4dHVyZSwgdW5zaWduZWQgbG9uZykKK0RFTEVHQVRFX1RPX0lNUExfMl9Y
MTIoYXR0YWNoU2hhZGVyLCBXZWJHTFByb2dyYW0qLCBXZWJHTFNoYWRlciopCiAKLUdyYXBoaWNz
Q29udGV4dDNEOjp+R3JhcGhpY3NDb250ZXh0M0QoKQordm9pZCBHcmFwaGljc0NvbnRleHQzRElu
dGVybmFsOjpiaW5kQXR0cmliTG9jYXRpb24oV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCB1bnNpZ25l
ZCBsb25nIGluZGV4LCBjb25zdCBTdHJpbmcmIG5hbWUpCiB7CisgICAgbV9pbXBsLT5iaW5kQXR0
cmliTG9jYXRpb24oRVhUUkFDVChwcm9ncmFtKSwgaW5kZXgsIG5hbWUudXRmOCgpLmRhdGEoKSk7
CiB9CiAKLVBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QgR3JhcGhpY3NDb250ZXh0M0Q6OnBsYXRm
b3JtR3JhcGhpY3NDb250ZXh0M0QoKSBjb25zdAotewotICAgIHJldHVybiBtX2ludGVybmFsLT5w
bGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEKCk7Ci19CitERUxFR0FURV9UT19JTVBMXzJfWDIoYmlu
ZEJ1ZmZlciwgdW5zaWduZWQgbG9uZywgV2ViR0xCdWZmZXIqKQorREVMRUdBVEVfVE9fSU1QTF8y
X1gyKGJpbmRGcmFtZWJ1ZmZlciwgdW5zaWduZWQgbG9uZywgV2ViR0xGcmFtZWJ1ZmZlciopCitE
RUxFR0FURV9UT19JTVBMXzJfWDIoYmluZFJlbmRlcmJ1ZmZlciwgdW5zaWduZWQgbG9uZywgV2Vi
R0xSZW5kZXJidWZmZXIqKQogCi1QbGF0Zm9ybTNET2JqZWN0IEdyYXBoaWNzQ29udGV4dDNEOjpw
bGF0Zm9ybVRleHR1cmUoKSBjb25zdAotewotICAgIHJldHVybiBtX2ludGVybmFsLT5wbGF0Zm9y
bVRleHR1cmUoKTsKLX0KK3N0YXRpYyBjb25zdCBpbnQga1RleHR1cmVXcmFwUiA9IDB4ODA3MjsK
IAotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6bWFrZUNvbnRleHRDdXJyZW50KCkKLXsKLSAgICBt
X2ludGVybmFsLT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6cmVzaGFwZShpbnQgd2lkdGgsIGludCBoZWlnaHQpCisvLyBJZiB3ZSBkaWRuJ3QgaGF2
ZSB0byBoYWNrIEdMX1RFWFRVUkVfV1JBUF9SIGZvciBjdWJlIG1hcHMsCisvLyB3ZSBjb3VsZCBq
dXN0IHVzZToKKy8vIERFTEVHQVRFX1RPX0lNUExfMl9YMihiaW5kVGV4dHVyZSwgdW5zaWduZWQg
bG9uZywgV2ViR0xUZXh0dXJlKikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6Ymlu
ZFRleHR1cmUodW5zaWduZWQgbG9uZyB0YXJnZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFdlYkdMVGV4dHVyZSogdGV4dHVyZSkKIHsKLSAgICBpZiAod2lk
dGggPT0gbV9jdXJyZW50V2lkdGggJiYgaGVpZ2h0ID09IG1fY3VycmVudEhlaWdodCkKLSAgICAg
ICAgcmV0dXJuOworICAgIHVuc2lnbmVkIGludCB0ZXh0dXJlT2JqZWN0ID0gRVhUUkFDVCh0ZXh0
dXJlKTsKIAotICAgIG1fY3VycmVudFdpZHRoID0gd2lkdGg7Ci0gICAgbV9jdXJyZW50SGVpZ2h0
ID0gaGVpZ2h0OworICAgIG1faW1wbC0+YmluZFRleHR1cmUodGFyZ2V0LCB0ZXh0dXJlT2JqZWN0
KTsKIAotICAgIG1faW50ZXJuYWwtPnJlc2hhcGUod2lkdGgsIGhlaWdodCk7CisgICAgLy8gRklY
TUU6IEdMX1RFWFRVUkVfV1JBUF9SIGlzbid0IGV4cG9zZWQgaW4gdGhlIE9wZW5HTCBFUyAyLjAK
KyAgICAvLyBBUEkuIE9uIGRlc2t0b3AgT3BlbkdMIGltcGxlbWVudGF0aW9ucyBpdCBzZWVtcyBu
ZWNlc3NhcnkgdG8KKyAgICAvLyBzZXQgdGhpcyB3cmFwIG1vZGUgdG8gR0xfQ0xBTVBfVE9fRURH
RSB0byBnZXQgY29ycmVjdCBiZWhhdmlvcgorICAgIC8vIG9mIGN1YmUgbWFwcy4KKyAgICBpZiAo
dGV4dHVyZSkKKyAgICAgICAgaWYgKHRhcmdldCA9PSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RV9DVUJFX01BUCkgeworICAgICAgICAgICAgaWYgKCF0ZXh0dXJlLT5pc0N1YmVNYXBSV3JhcE1v
ZGVJbml0aWFsaXplZCgpKSB7CisgICAgICAgICAgICAgICAgbV9pbXBsLT50ZXhQYXJhbWV0ZXJp
KEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQLCBrVGV4dHVyZVdyYXBSLCBHcmFw
aGljc0NvbnRleHQzRDo6Q0xBTVBfVE9fRURHRSk7CisgICAgICAgICAgICAgICAgdGV4dHVyZS0+
c2V0Q3ViZU1hcFJXcmFwTW9kZUluaXRpYWxpemVkKHRydWUpOworICAgICAgICAgICAgfQorICAg
ICAgICB9IGVsc2UKKyAgICAgICAgICAgIHRleHR1cmUtPnNldEN1YmVNYXBSV3JhcE1vZGVJbml0
aWFsaXplZChmYWxzZSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJlZ2luUGFpbnQo
V2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0KQotewotICAgIG1faW50ZXJuYWwtPmJlZ2lu
UGFpbnQoY29udGV4dCk7Ci19CitERUxFR0FURV9UT19JTVBMXzQoYmxlbmRDb2xvciwgZG91Ymxl
LCBkb3VibGUsIGRvdWJsZSwgZG91YmxlKQorREVMRUdBVEVfVE9fSU1QTF8xKGJsZW5kRXF1YXRp
b24sIHVuc2lnbmVkIGxvbmcpCitERUxFR0FURV9UT19JTVBMXzIoYmxlbmRFcXVhdGlvblNlcGFy
YXRlLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKQorREVMRUdBVEVfVE9fSU1QTF8yKGJs
ZW5kRnVuYywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZykKK0RFTEVHQVRFX1RPX0lNUExf
NChibGVuZEZ1bmNTZXBhcmF0ZSwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWdu
ZWQgbG9uZywgdW5zaWduZWQgbG9uZykKIAotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZW5kUGFp
bnQoKQordm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpidWZmZXJEYXRhKHVuc2lnbmVk
IGxvbmcgdGFyZ2V0LCBpbnQgc2l6ZSwgdW5zaWduZWQgbG9uZyB1c2FnZSkKIHsKKyAgICBtX2lt
cGwtPmJ1ZmZlckRhdGEodGFyZ2V0LCBzaXplLCAwLCB1c2FnZSk7CiB9CiAKLWludCBHcmFwaGlj
c0NvbnRleHQzRDo6c2l6ZUluQnl0ZXMoaW50IHR5cGUpCit2b2lkIEdyYXBoaWNzQ29udGV4dDNE
SW50ZXJuYWw6OmJ1ZmZlckRhdGEodW5zaWduZWQgbG9uZyB0YXJnZXQsIFdlYkdMQXJyYXkqIGFy
cmF5LCB1bnNpZ25lZCBsb25nIHVzYWdlKQogewotICAgIHN3aXRjaCAodHlwZSkgewotICAgIGNh
c2UgR0xfQllURToKLSAgICAgICAgcmV0dXJuIHNpemVvZihHTGJ5dGUpOwotICAgIGNhc2UgR0xf
VU5TSUdORURfQllURToKLSAgICAgICAgcmV0dXJuIHNpemVvZihHTHVieXRlKTsKLSAgICBjYXNl
IEdMX1NIT1JUOgotICAgICAgICByZXR1cm4gc2l6ZW9mKEdMc2hvcnQpOwotICAgIGNhc2UgR0xf
VU5TSUdORURfU0hPUlQ6Ci0gICAgICAgIHJldHVybiBzaXplb2YoR0x1c2hvcnQpOwotICAgIGNh
c2UgR0xfSU5UOgotICAgICAgICByZXR1cm4gc2l6ZW9mKEdMaW50KTsKLSAgICBjYXNlIEdMX1VO
U0lHTkVEX0lOVDoKLSAgICAgICAgcmV0dXJuIHNpemVvZihHTHVpbnQpOwotICAgIGNhc2UgR0xf
RkxPQVQ6Ci0gICAgICAgIHJldHVybiBzaXplb2YoR0xmbG9hdCk7Ci0gICAgZGVmYXVsdDogLy8g
RklYTUU6IGRlZmF1bHQgY2FzZXMgYXJlIGRpc2NvdXJhZ2VkIGluIFdlYktpdC4KLSAgICAgICAg
cmV0dXJuIDA7Ci0gICAgfQorICAgIG1faW1wbC0+YnVmZmVyRGF0YSh0YXJnZXQsIGFycmF5LT5i
eXRlTGVuZ3RoKCksIGFycmF5LT5iYXNlQWRkcmVzcygpLCB1c2FnZSk7CiB9CiAKLXVuc2lnbmVk
IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVCdWZmZXIoKQordm9pZCBHcmFwaGljc0NvbnRleHQz
REludGVybmFsOjpidWZmZXJTdWJEYXRhKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBsb25nIG9mZnNl
dCwgV2ViR0xBcnJheSogYXJyYXkpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAg
R0x1aW50IG87Ci0gICAgZ2xHZW5CdWZmZXJzKDEsICZvKTsKLSAgICByZXR1cm4gbzsKKyAgICBt
X2ltcGwtPmJ1ZmZlclN1YkRhdGEodGFyZ2V0LCBvZmZzZXQsIGFycmF5LT5ieXRlTGVuZ3RoKCks
IGFycmF5LT5iYXNlQWRkcmVzcygpKTsKIH0KIAotdW5zaWduZWQgR3JhcGhpY3NDb250ZXh0M0Q6
OmNyZWF0ZUZyYW1lYnVmZmVyKCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBH
THVpbnQgbyA9IDA7Ci0gICAgZ2xHZW5GcmFtZWJ1ZmZlcnNFWFQoMSwgJm8pOwotICAgIHJldHVy
biBvOwotfQorREVMRUdBVEVfVE9fSU1QTF8xUihjaGVja0ZyYW1lYnVmZmVyU3RhdHVzLCB1bnNp
Z25lZCBsb25nLCB1bnNpZ25lZCBsb25nKQorREVMRUdBVEVfVE9fSU1QTF8xKGNsZWFyLCB1bnNp
Z25lZCBsb25nKQorREVMRUdBVEVfVE9fSU1QTF80KGNsZWFyQ29sb3IsIGRvdWJsZSwgZG91Ymxl
LCBkb3VibGUsIGRvdWJsZSkKK0RFTEVHQVRFX1RPX0lNUExfMShjbGVhckRlcHRoLCBkb3VibGUp
CitERUxFR0FURV9UT19JTVBMXzEoY2xlYXJTdGVuY2lsLCBsb25nKQorREVMRUdBVEVfVE9fSU1Q
TF80KGNvbG9yTWFzaywgYm9vbCwgYm9vbCwgYm9vbCwgYm9vbCkKK0RFTEVHQVRFX1RPX0lNUExf
MV9YKGNvbXBpbGVTaGFkZXIsIFdlYkdMU2hhZGVyKikKIAotdW5zaWduZWQgR3JhcGhpY3NDb250
ZXh0M0Q6OmNyZWF0ZVByb2dyYW0oKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAg
IHJldHVybiBnbENyZWF0ZVByb2dyYW0oKTsKLX0KK0RFTEVHQVRFX1RPX0lNUExfOChjb3B5VGV4
SW1hZ2UyRCwgdW5zaWduZWQgbG9uZywgbG9uZywgdW5zaWduZWQgbG9uZywgbG9uZywgbG9uZywg
dW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgbG9uZykKK0RFTEVHQVRFX1RPX0lNUExfOChj
b3B5VGV4U3ViSW1hZ2UyRCwgdW5zaWduZWQgbG9uZywgbG9uZywgbG9uZywgbG9uZywgbG9uZywg
bG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZykKK0RFTEVHQVRFX1RPX0lNUExfMShj
dWxsRmFjZSwgdW5zaWduZWQgbG9uZykKK0RFTEVHQVRFX1RPX0lNUExfMShkZXB0aEZ1bmMsIHVu
c2lnbmVkIGxvbmcpCitERUxFR0FURV9UT19JTVBMXzEoZGVwdGhNYXNrLCBib29sKQorREVMRUdB
VEVfVE9fSU1QTF8yKGRlcHRoUmFuZ2UsIGRvdWJsZSwgZG91YmxlKQorREVMRUdBVEVfVE9fSU1Q
TF8yX1gxMihkZXRhY2hTaGFkZXIsIFdlYkdMUHJvZ3JhbSosIFdlYkdMU2hhZGVyKikKK0RFTEVH
QVRFX1RPX0lNUExfMShkaXNhYmxlLCB1bnNpZ25lZCBsb25nKQorREVMRUdBVEVfVE9fSU1QTF8x
KGRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheSwgdW5zaWduZWQgbG9uZykKK0RFTEVHQVRFX1RPX0lN
UExfMyhkcmF3QXJyYXlzLCB1bnNpZ25lZCBsb25nLCBsb25nLCBsb25nKQorREVMRUdBVEVfVE9f
SU1QTF80KGRyYXdFbGVtZW50cywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWdu
ZWQgbG9uZywgbG9uZykKIAotdW5zaWduZWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZVJlbmRl
cmJ1ZmZlcigpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgR0x1aW50IG87Ci0g
ICAgZ2xHZW5SZW5kZXJidWZmZXJzRVhUKDEsICZvKTsKLSAgICByZXR1cm4gbzsKLX0KK0RFTEVH
QVRFX1RPX0lNUExfMShlbmFibGUsIHVuc2lnbmVkIGxvbmcpCitERUxFR0FURV9UT19JTVBMXzEo
ZW5hYmxlVmVydGV4QXR0cmliQXJyYXksIHVuc2lnbmVkIGxvbmcpCitERUxFR0FURV9UT19JTVBM
KGZpbmlzaCkKK0RFTEVHQVRFX1RPX0lNUEwoZmx1c2gpCitERUxFR0FURV9UT19JTVBMXzRfWDQo
ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVu
c2lnbmVkIGxvbmcsIFdlYkdMUmVuZGVyYnVmZmVyKikKK0RFTEVHQVRFX1RPX0lNUExfNV9YNChm
cmFtZWJ1ZmZlclRleHR1cmUyRCwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWdu
ZWQgbG9uZywgV2ViR0xUZXh0dXJlKiwgbG9uZykKK0RFTEVHQVRFX1RPX0lNUExfMShmcm9udEZh
Y2UsIHVuc2lnbmVkIGxvbmcpCitERUxFR0FURV9UT19JTVBMXzEoZ2VuZXJhdGVNaXBtYXAsIHVu
c2lnbmVkIGxvbmcpCiAKLXVuc2lnbmVkIEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVTaGFkZXIo
dW5zaWduZWQgbG9uZyB0eXBlKQorYm9vbCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpnZXRB
Y3RpdmVBdHRyaWIoV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCB1bnNpZ25lZCBsb25nIGluZGV4LCBB
Y3RpdmVJbmZvJiBpbmZvKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIHJldHVy
biBnbENyZWF0ZVNoYWRlcigodHlwZSA9PSBGUkFHTUVOVF9TSEFERVIpID8gR0xfRlJBR01FTlRf
U0hBREVSIDogR0xfVkVSVEVYX1NIQURFUik7CisgICAgV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRl
eHQzRDo6QWN0aXZlSW5mbyB3ZWJJbmZvOworICAgIGlmICghbV9pbXBsLT5nZXRBY3RpdmVBdHRy
aWIoRVhUUkFDVChwcm9ncmFtKSwgaW5kZXgsIHdlYkluZm8pKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgaW5mby5uYW1lID0gd2ViSW5mby5uYW1lOworICAgIGluZm8udHlwZSA9IHdlYklu
Zm8udHlwZTsKKyAgICBpbmZvLnNpemUgPSB3ZWJJbmZvLnNpemU7CisgICAgcmV0dXJuIHRydWU7
CiB9CiAKLXVuc2lnbmVkIEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVUZXh0dXJlKCkKK2Jvb2wg
R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6Z2V0QWN0aXZlVW5pZm9ybShXZWJHTFByb2dyYW0q
IHByb2dyYW0sIHVuc2lnbmVkIGxvbmcgaW5kZXgsIEFjdGl2ZUluZm8mIGluZm8pCiB7Ci0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgR0x1aW50IG87Ci0gICAgZ2xHZW5UZXh0dXJlcygx
LCAmbyk7Ci0gICAgcmV0dXJuIG87CisgICAgV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRDo6
QWN0aXZlSW5mbyB3ZWJJbmZvOworICAgIGlmICghbV9pbXBsLT5nZXRBY3RpdmVVbmlmb3JtKEVY
VFJBQ1QocHJvZ3JhbSksIGluZGV4LCB3ZWJJbmZvKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIGluZm8ubmFtZSA9IHdlYkluZm8ubmFtZTsKKyAgICBpbmZvLnR5cGUgPSB3ZWJJbmZvLnR5
cGU7CisgICAgaW5mby5zaXplID0gd2ViSW5mby5zaXplOworICAgIHJldHVybiB0cnVlOwogfQog
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVCdWZmZXIodW5zaWduZWQgYnVmZmVyKQor
aW50IEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmdldEF0dHJpYkxvY2F0aW9uKFdlYkdMUHJv
Z3JhbSogcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lKQogewotICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOwotICAgIGdsRGVsZXRlQnVmZmVycygxLCAmYnVmZmVyKTsKKyAgICByZXR1cm4gbV9p
bXBsLT5nZXRBdHRyaWJMb2NhdGlvbihFWFRSQUNUKHByb2dyYW0pLCBuYW1lLnV0ZjgoKS5kYXRh
KCkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVGcmFtZWJ1ZmZlcih1bnNp
Z25lZCBmcmFtZWJ1ZmZlcikKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbERl
bGV0ZUZyYW1lYnVmZmVyc0VYVCgxLCAmZnJhbWVidWZmZXIpOwotfQorREVMRUdBVEVfVE9fSU1Q
TF8yKGdldEJvb2xlYW52LCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBjaGFyKikKIAotdm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6ZGVsZXRlUHJvZ3JhbSh1bnNpZ25lZCBwcm9ncmFtKQotewotICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsRGVsZXRlUHJvZ3JhbShwcm9ncmFtKTsKLX0K
K0RFTEVHQVRFX1RPX0lNUExfMyhnZXRCdWZmZXJQYXJhbWV0ZXJpdiwgdW5zaWduZWQgbG9uZywg
dW5zaWduZWQgbG9uZywgaW50KikKIAotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVsZXRlUmVu
ZGVyYnVmZmVyKHVuc2lnbmVkIHJlbmRlcmJ1ZmZlcikKK0dyYXBoaWNzQ29udGV4dDNEOjpBdHRy
aWJ1dGVzIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmdldENvbnRleHRBdHRyaWJ1dGVzKCkK
IHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbERlbGV0ZVJlbmRlcmJ1ZmZlcnNF
WFQoMSwgJnJlbmRlcmJ1ZmZlcik7CisgICAgV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRDo6
QXR0cmlidXRlcyB3ZWJBdHRyaWJ1dGVzID0gbV9pbXBsLT5nZXRDb250ZXh0QXR0cmlidXRlcygp
OworICAgIEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJpYnV0ZXM7CisgICAgYXR0
cmlidXRlcy5hbHBoYSA9IHdlYkF0dHJpYnV0ZXMuYWxwaGE7CisgICAgYXR0cmlidXRlcy5kZXB0
aCA9IHdlYkF0dHJpYnV0ZXMuZGVwdGg7CisgICAgYXR0cmlidXRlcy5zdGVuY2lsID0gd2ViQXR0
cmlidXRlcy5zdGVuY2lsOworICAgIGF0dHJpYnV0ZXMuYW50aWFsaWFzID0gd2ViQXR0cmlidXRl
cy5hbnRpYWxpYXM7CisgICAgYXR0cmlidXRlcy5wcmVtdWx0aXBsaWVkQWxwaGEgPSB3ZWJBdHRy
aWJ1dGVzLnByZW11bHRpcGxpZWRBbHBoYTsKKyAgICByZXR1cm4gYXR0cmlidXRlczsKIH0KIAot
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVsZXRlU2hhZGVyKHVuc2lnbmVkIHNoYWRlcikKLXsK
LSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbERlbGV0ZVNoYWRlcihzaGFkZXIpOwot
fQorREVMRUdBVEVfVE9fSU1QTF9SKGdldEVycm9yLCB1bnNpZ25lZCBsb25nKQogCi12b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjpkZWxldGVUZXh0dXJlKHVuc2lnbmVkIHRleHR1cmUpCi17Ci0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2xEZWxldGVUZXh0dXJlcygxLCAmdGV4dHVyZSk7
Ci19CitERUxFR0FURV9UT19JTVBMXzIoZ2V0RmxvYXR2LCB1bnNpZ25lZCBsb25nLCBmbG9hdCop
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmFjdGl2ZVRleHR1cmUodW5zaWduZWQgbG9uZyB0
ZXh0dXJlKQotewotICAgIG1faW50ZXJuYWwtPmFjdGl2ZVRleHR1cmUodGV4dHVyZSk7Ci19CitE
RUxFR0FURV9UT19JTVBMXzQoZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYsIHVu
c2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIGludCopCiAKLUdMX1NB
TUVfTUVUSE9EXzJfWDEyKEF0dGFjaFNoYWRlciwgYXR0YWNoU2hhZGVyLCBXZWJHTFByb2dyYW0q
LCBXZWJHTFNoYWRlciopCitERUxFR0FURV9UT19JTVBMXzIoZ2V0SW50ZWdlcnYsIHVuc2lnbmVk
IGxvbmcsIGludCopCiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRBdHRyaWJMb2NhdGlv
bihXZWJHTFByb2dyYW0qIHByb2dyYW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBpbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIG5hbWUpCi17Ci0gICAgaWYgKCFwcm9n
cmFtKQotICAgICAgICByZXR1cm47Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2xC
aW5kQXR0cmliTG9jYXRpb24oRVhUUkFDVChwcm9ncmFtKSwgaW5kZXgsIG5hbWUudXRmOCgpLmRh
dGEoKSk7Ci19CitERUxFR0FURV9UT19JTVBMXzNfWDEoZ2V0UHJvZ3JhbWl2LCBXZWJHTFByb2dy
YW0qLCB1bnNpZ25lZCBsb25nLCBpbnQqKQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpiaW5k
QnVmZmVyKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBXZWJHTEJ1ZmZlciogYnVmZmVyKQorU3RyaW5nIEdyYXBoaWNzQ29udGV4dDNESW50
ZXJuYWw6OmdldFByb2dyYW1JbmZvTG9nKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSkKIHsKLSAgICBt
X2ludGVybmFsLT5iaW5kQnVmZmVyKHRhcmdldCwgYnVmZmVyKTsKKyAgICByZXR1cm4gbV9pbXBs
LT5nZXRQcm9ncmFtSW5mb0xvZyhFWFRSQUNUKHByb2dyYW0pKTsKIH0KIAotdm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6YmluZEZyYW1lYnVmZmVyKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBXZWJHTEZy
YW1lYnVmZmVyKiBmcmFtZWJ1ZmZlcikKLXsKLSAgICBtX2ludGVybmFsLT5iaW5kRnJhbWVidWZm
ZXIodGFyZ2V0LCBmcmFtZWJ1ZmZlcik7Ci19CitERUxFR0FURV9UT19JTVBMXzMoZ2V0UmVuZGVy
YnVmZmVyUGFyYW1ldGVyaXYsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIGludCopCiAK
LUdMX1NBTUVfTUVUSE9EXzJfWDIoQmluZFJlbmRlcmJ1ZmZlckVYVCwgYmluZFJlbmRlcmJ1ZmZl
ciwgdW5zaWduZWQgbG9uZywgV2ViR0xSZW5kZXJidWZmZXIqKQorREVMRUdBVEVfVE9fSU1QTF8z
X1gxKGdldFNoYWRlcml2LCBXZWJHTFNoYWRlciosIHVuc2lnbmVkIGxvbmcsIGludCopCiAKLS8v
IElmIHdlIGRpZG4ndCBoYXZlIHRvIGhhY2sgR0xfVEVYVFVSRV9XUkFQX1IgZm9yIGN1YmUgbWFw
cywKLS8vIHdlIGNvdWxkIGp1c3QgdXNlOgotLy8gR0xfU0FNRV9NRVRIT0RfMl9YMihCaW5kVGV4
dHVyZSwgYmluZFRleHR1cmUsIHVuc2lnbmVkIGxvbmcsIFdlYkdMVGV4dHVyZSopCi12b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjpiaW5kVGV4dHVyZSh1bnNpZ25lZCBsb25nIHRhcmdldCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYkdMVGV4dHVyZSogdGV4dHVyZSkKK1N0
cmluZyBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpnZXRTaGFkZXJJbmZvTG9nKFdlYkdMU2hh
ZGVyKiBzaGFkZXIpCiB7Ci0gICAgbV9pbnRlcm5hbC0+YmluZFRleHR1cmUodGFyZ2V0LCB0ZXh0
dXJlKTsKKyAgICByZXR1cm4gbV9pbXBsLT5nZXRTaGFkZXJJbmZvTG9nKEVYVFJBQ1Qoc2hhZGVy
KSk7CiB9CiAKLUdMX1NBTUVfTUVUSE9EXzQoQmxlbmRDb2xvciwgYmxlbmRDb2xvciwgZG91Ymxl
LCBkb3VibGUsIGRvdWJsZSwgZG91YmxlKQotCi1HTF9TQU1FX01FVEhPRF8xKEJsZW5kRXF1YXRp
b24sIGJsZW5kRXF1YXRpb24sIHVuc2lnbmVkIGxvbmcpCi0KLUdMX1NBTUVfTUVUSE9EXzIoQmxl
bmRFcXVhdGlvblNlcGFyYXRlLCBibGVuZEVxdWF0aW9uU2VwYXJhdGUsIHVuc2lnbmVkIGxvbmcs
IHVuc2lnbmVkIGxvbmcpCi0KLUdMX1NBTUVfTUVUSE9EXzIoQmxlbmRGdW5jLCBibGVuZEZ1bmMs
IHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpCi0KLUdMX1NBTUVfTUVUSE9EXzQoQmxlbmRG
dW5jU2VwYXJhdGUsIGJsZW5kRnVuY1NlcGFyYXRlLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBs
b25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpidWZmZXJEYXRhKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBpbnQgc2l6ZSwgdW5zaWduZWQg
bG9uZyB1c2FnZSkKK1N0cmluZyBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpnZXRTaGFkZXJT
b3VyY2UoV2ViR0xTaGFkZXIqIHNoYWRlcikKIHsKLSAgICBtX2ludGVybmFsLT5idWZmZXJEYXRh
SW1wbCh0YXJnZXQsIHNpemUsIDAsIHVzYWdlKTsKKyAgICByZXR1cm4gbV9pbXBsLT5nZXRTaGFk
ZXJTb3VyY2UoRVhUUkFDVChzaGFkZXIpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
YnVmZmVyRGF0YSh1bnNpZ25lZCBsb25nIHRhcmdldCwgV2ViR0xBcnJheSogYXJyYXksIHVuc2ln
bmVkIGxvbmcgdXNhZ2UpCitTdHJpbmcgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6Z2V0U3Ry
aW5nKHVuc2lnbmVkIGxvbmcgbmFtZSkKIHsKLSAgICBtX2ludGVybmFsLT5idWZmZXJEYXRhSW1w
bCh0YXJnZXQsIGFycmF5LT5ieXRlTGVuZ3RoKCksIGFycmF5LT5iYXNlQWRkcmVzcygpLCB1c2Fn
ZSk7CisgICAgcmV0dXJuIG1faW1wbC0+Z2V0U3RyaW5nKG5hbWUpOwogfQogCi12b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpidWZmZXJTdWJEYXRhKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBsb25nIG9m
ZnNldCwgV2ViR0xBcnJheSogYXJyYXkpCi17Ci0gICAgaWYgKCFhcnJheSB8fCAhYXJyYXktPmxl
bmd0aCgpKQotICAgICAgICByZXR1cm47CitERUxFR0FURV9UT19JTVBMXzMoZ2V0VGV4UGFyYW1l
dGVyZnYsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIGZsb2F0KikKK0RFTEVHQVRFX1RP
X0lNUExfMyhnZXRUZXhQYXJhbWV0ZXJpdiwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywg
aW50KikKIAotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIC8vIEZJWE1FOiBtYWtlIHRo
aXMgdmVyaWZpY2F0aW9uIG1vcmUgZWZmaWNpZW50LgotICAgIEdMaW50IGJpbmRpbmcgPSAwOwot
ICAgIEdMZW51bSBiaW5kaW5nX3RhcmdldCA9IEdMX0FSUkFZX0JVRkZFUl9CSU5ESU5HOwotICAg
IGlmICh0YXJnZXQgPT0gR0xfRUxFTUVOVF9BUlJBWV9CVUZGRVIpCi0gICAgICAgIGJpbmRpbmdf
dGFyZ2V0ID0gR0xfRUxFTUVOVF9BUlJBWV9CVUZGRVJfQklORElORzsKLSAgICBnbEdldEludGVn
ZXJ2KGJpbmRpbmdfdGFyZ2V0LCAmYmluZGluZyk7Ci0gICAgaWYgKGJpbmRpbmcgPD0gMCkgewot
ICAgICAgICAvLyBGSVhNRTogcmFpc2UgZXhjZXB0aW9uLgotICAgICAgICAvLyBMb2dNZXNzYWdl
ZigoImJ1ZmZlclN1YkRhdGE6IG5vIGJ1ZmZlciBib3VuZCIpKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLSAgICBnbEJ1ZmZlclN1YkRhdGEodGFyZ2V0LCBvZmZzZXQsIGFycmF5LT5ieXRlTGVu
Z3RoKCksIGFycmF5LT5iYXNlQWRkcmVzcygpKTsKLX0KK0RFTEVHQVRFX1RPX0lNUExfM19YMShn
ZXRVbmlmb3JtZnYsIFdlYkdMUHJvZ3JhbSosIGxvbmcsIGZsb2F0KikKK0RFTEVHQVRFX1RPX0lN
UExfM19YMShnZXRVbmlmb3JtaXYsIFdlYkdMUHJvZ3JhbSosIGxvbmcsIGludCopCiAKLXVuc2ln
bmVkIGxvbmcgR3JhcGhpY3NDb250ZXh0M0Q6OmNoZWNrRnJhbWVidWZmZXJTdGF0dXModW5zaWdu
ZWQgbG9uZyB0YXJnZXQpCitsb25nIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmdldFVuaWZv
cm1Mb2NhdGlvbihXZWJHTFByb2dyYW0qIHByb2dyYW0sIGNvbnN0IFN0cmluZyYgbmFtZSkKIHsK
LSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICByZXR1cm4gZ2xDaGVja0ZyYW1lYnVmZmVy
U3RhdHVzRVhUKHRhcmdldCk7CisgICAgcmV0dXJuIG1faW1wbC0+Z2V0VW5pZm9ybUxvY2F0aW9u
KEVYVFJBQ1QocHJvZ3JhbSksIG5hbWUudXRmOCgpLmRhdGEoKSk7CiB9CiAKLUdMX1NBTUVfTUVU
SE9EXzEoQ2xlYXIsIGNsZWFyLCB1bnNpZ25lZCBsb25nKQotCi1HTF9TQU1FX01FVEhPRF80KENs
ZWFyQ29sb3IsIGNsZWFyQ29sb3IsIGRvdWJsZSwgZG91YmxlLCBkb3VibGUsIGRvdWJsZSkKK0RF
TEVHQVRFX1RPX0lNUExfMyhnZXRWZXJ0ZXhBdHRyaWJmdiwgdW5zaWduZWQgbG9uZywgdW5zaWdu
ZWQgbG9uZywgZmxvYXQqKQorREVMRUdBVEVfVE9fSU1QTF8zKGdldFZlcnRleEF0dHJpYml2LCB1
bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCBpbnQqKQogCi1HTF9TQU1FX01FVEhPRF8xKENs
ZWFyRGVwdGgsIGNsZWFyRGVwdGgsIGRvdWJsZSkKK0RFTEVHQVRFX1RPX0lNUExfMlIoZ2V0VmVy
dGV4QXR0cmliT2Zmc2V0LCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCBsb25nKQogCi1H
TF9TQU1FX01FVEhPRF8xKENsZWFyU3RlbmNpbCwgY2xlYXJTdGVuY2lsLCBsb25nKQorREVMRUdB
VEVfVE9fSU1QTF8yKGhpbnQsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpCitERUxFR0FU
RV9UT19JTVBMXzFSX1goaXNCdWZmZXIsIFdlYkdMQnVmZmVyKiwgYm9vbCkKK0RFTEVHQVRFX1RP
X0lNUExfMVIoaXNFbmFibGVkLCB1bnNpZ25lZCBsb25nLCBib29sKQorREVMRUdBVEVfVE9fSU1Q
TF8xUl9YKGlzRnJhbWVidWZmZXIsIFdlYkdMRnJhbWVidWZmZXIqLCBib29sKQorREVMRUdBVEVf
VE9fSU1QTF8xUl9YKGlzUHJvZ3JhbSwgV2ViR0xQcm9ncmFtKiwgYm9vbCkKK0RFTEVHQVRFX1RP
X0lNUExfMVJfWChpc1JlbmRlcmJ1ZmZlciwgV2ViR0xSZW5kZXJidWZmZXIqLCBib29sKQorREVM
RUdBVEVfVE9fSU1QTF8xUl9YKGlzU2hhZGVyLCBXZWJHTFNoYWRlciosIGJvb2wpCitERUxFR0FU
RV9UT19JTVBMXzFSX1goaXNUZXh0dXJlLCBXZWJHTFRleHR1cmUqLCBib29sKQorREVMRUdBVEVf
VE9fSU1QTF8xKGxpbmVXaWR0aCwgZG91YmxlKQorREVMRUdBVEVfVE9fSU1QTF8xX1gobGlua1By
b2dyYW0sIFdlYkdMUHJvZ3JhbSopCitERUxFR0FURV9UT19JTVBMXzIocGl4ZWxTdG9yZWksIHVu
c2lnbmVkIGxvbmcsIGxvbmcpCitERUxFR0FURV9UT19JTVBMXzIocG9seWdvbk9mZnNldCwgZG91
YmxlLCBkb3VibGUpCiAKLUdMX1NBTUVfTUVUSE9EXzQoQ29sb3JNYXNrLCBjb2xvck1hc2ssIGJv
b2wsIGJvb2wsIGJvb2wsIGJvb2wpCi0KLUdMX1NBTUVfTUVUSE9EXzFfWChDb21waWxlU2hhZGVy
LCBjb21waWxlU2hhZGVyLCBXZWJHTFNoYWRlciopCi0KLUdMX1NBTUVfTUVUSE9EXzgoQ29weVRl
eEltYWdlMkQsIGNvcHlUZXhJbWFnZTJELCB1bnNpZ25lZCBsb25nLCBsb25nLCB1bnNpZ25lZCBs
b25nLCBsb25nLCBsb25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCBsb25nKQotCi1H
TF9TQU1FX01FVEhPRF84KENvcHlUZXhTdWJJbWFnZTJELCBjb3B5VGV4U3ViSW1hZ2UyRCwgdW5z
aWduZWQgbG9uZywgbG9uZywgbG9uZywgbG9uZywgbG9uZywgbG9uZywgdW5zaWduZWQgbG9uZywg
dW5zaWduZWQgbG9uZykKLQotR0xfU0FNRV9NRVRIT0RfMShDdWxsRmFjZSwgY3VsbEZhY2UsIHVu
c2lnbmVkIGxvbmcpCi0KLUdMX1NBTUVfTUVUSE9EXzEoRGVwdGhGdW5jLCBkZXB0aEZ1bmMsIHVu
c2lnbmVkIGxvbmcpCi0KLUdMX1NBTUVfTUVUSE9EXzEoRGVwdGhNYXNrLCBkZXB0aE1hc2ssIGJv
b2wpCi0KLUdMX1NBTUVfTUVUSE9EXzIoRGVwdGhSYW5nZSwgZGVwdGhSYW5nZSwgZG91YmxlLCBk
b3VibGUpCi0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRldGFjaFNoYWRlcihXZWJHTFByb2dy
YW0qIHByb2dyYW0sIFdlYkdMU2hhZGVyKiBzaGFkZXIpCitQYXNzUmVmUHRyPFdlYkdMQXJyYXk+
IEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OnJlYWRQaXhlbHMobG9uZyB4LCBsb25nIHksIHVu
c2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0LCB1bnNpZ25lZCBsb25nIGZv
cm1hdCwgdW5zaWduZWQgbG9uZyB0eXBlKQogewotICAgIGlmICghcHJvZ3JhbSB8fCAhc2hhZGVy
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbERl
dGFjaFNoYWRlcihFWFRSQUNUKHByb2dyYW0pLCBFWFRSQUNUKHNoYWRlcikpOworICAgIC8vIEZJ
WE1FOiB0YWtlIGludG8gYWNjb3VudCBwYWNrIGFsaWdubWVudC4KKyAgICBSZWZQdHI8V2ViR0xV
bnNpZ25lZEJ5dGVBcnJheT4gYXJyYXkgPSBXZWJHTFVuc2lnbmVkQnl0ZUFycmF5OjpjcmVhdGUo
d2lkdGggKiBoZWlnaHQgKiA0KTsKKyAgICBtX2ltcGwtPnJlYWRQaXhlbHMoeCwgeSwgd2lkdGgs
IGhlaWdodCwgZm9ybWF0LCB0eXBlLCBhcnJheS0+YmFzZUFkZHJlc3MoKSk7CisgICAgcmV0dXJu
IGFycmF5OwogfQogCi1HTF9TQU1FX01FVEhPRF8xKERpc2FibGUsIGRpc2FibGUsIHVuc2lnbmVk
IGxvbmcpCitERUxFR0FURV9UT19JTVBMKHJlbGVhc2VTaGFkZXJDb21waWxlcikKK0RFTEVHQVRF
X1RPX0lNUExfNChyZW5kZXJidWZmZXJTdG9yYWdlLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBs
b25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKQorREVMRUdBVEVfVE9fSU1QTF8yKHNh
bXBsZUNvdmVyYWdlLCBkb3VibGUsIGJvb2wpCitERUxFR0FURV9UT19JTVBMXzQoc2Npc3Nvciwg
bG9uZywgbG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZykKIAotdm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KHVuc2lnbmVkIGxvbmcgaW5kZXgp
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OnNoYWRlclNvdXJjZShXZWJHTFNoYWRl
ciogc2hhZGVyLCBjb25zdCBTdHJpbmcmIHN0cmluZykKIHsKLSAgICBtX2ludGVybmFsLT5kaXNh
YmxlVmVydGV4QXR0cmliQXJyYXkoaW5kZXgpOworICAgIG1faW1wbC0+c2hhZGVyU291cmNlKEVY
VFJBQ1Qoc2hhZGVyKSwgc3RyaW5nLnV0ZjgoKS5kYXRhKCkpOwogfQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpkcmF3QXJyYXlzKHVuc2lnbmVkIGxvbmcgbW9kZSwgbG9uZyBmaXJzdCwgbG9u
ZyBjb3VudCkKLXsKLSAgICBzd2l0Y2ggKG1vZGUpIHsKLSAgICBjYXNlIEdMX1RSSUFOR0xFUzoK
LSAgICBjYXNlIEdMX1RSSUFOR0xFX1NUUklQOgotICAgIGNhc2UgR0xfVFJJQU5HTEVfRkFOOgot
ICAgIGNhc2UgR0xfUE9JTlRTOgotICAgIGNhc2UgR0xfTElORV9TVFJJUDoKLSAgICBjYXNlIEdM
X0xJTkVfTE9PUDoKLSAgICBjYXNlIEdMX0xJTkVTOgotICAgICAgICBicmVhazsKLSAgICBkZWZh
dWx0OiAvLyBGSVhNRTogZGVmYXVsdCBjYXNlcyBhcmUgZGlzY291cmFnZWQgaW4gV2ViS2l0Lgot
ICAgICAgICAvLyBGSVhNRTogb3V0cHV0IGxvZyBtZXNzYWdlLCByYWlzZSBleGNlcHRpb24uCi0g
ICAgICAgIC8vIExvZ01lc3NhZ2UoTlNfTElURVJBTF9DU1RSSU5HKCJkcmF3QXJyYXlzOiBpbnZh
bGlkIG1vZGUiKSk7Ci0gICAgICAgIC8vIHJldHVybiBOU19FUlJPUl9ET01fU1lOVEFYX0VSUjsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KK0RFTEVHQVRFX1RPX0lNUExfMyhzdGVuY2lsRnVuYywg
dW5zaWduZWQgbG9uZywgbG9uZywgdW5zaWduZWQgbG9uZykKK0RFTEVHQVRFX1RPX0lNUExfNChz
dGVuY2lsRnVuY1NlcGFyYXRlLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCBsb25nLCB1
bnNpZ25lZCBsb25nKQorREVMRUdBVEVfVE9fSU1QTF8xKHN0ZW5jaWxNYXNrLCB1bnNpZ25lZCBs
b25nKQorREVMRUdBVEVfVE9fSU1QTF8yKHN0ZW5jaWxNYXNrU2VwYXJhdGUsIHVuc2lnbmVkIGxv
bmcsIHVuc2lnbmVkIGxvbmcpCitERUxFR0FURV9UT19JTVBMXzMoc3RlbmNpbE9wLCB1bnNpZ25l
ZCBsb25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKQorREVMRUdBVEVfVE9fSU1QTF80
KHN0ZW5jaWxPcFNlcGFyYXRlLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25l
ZCBsb25nLCB1bnNpZ25lZCBsb25nKQogCi0gICAgaWYgKGZpcnN0K2NvdW50IDwgZmlyc3QgfHwg
Zmlyc3QrY291bnQgPCBjb3VudCkgewotICAgICAgICAvLyBGSVhNRTogb3V0cHV0IGxvZyBtZXNz
YWdlLCByYWlzZSBleGNlcHRpb24uCi0gICAgICAgIC8vIExvZ01lc3NhZ2UoTlNfTElURVJBTF9D
U1RSSU5HKCJkcmF3QXJyYXlzOiBvdmVyZmxvdyBpbiBmaXJzdCtjb3VudCIpKTsKLSAgICAgICAg
Ly8gcmV0dXJuIE5TX0VSUk9SX0lOVkFMSURfQVJHOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgLy8gRklYTUU6IHZhbGlkYXRlIGFnYWluc3QgY3VycmVudGx5IGJvdW5kIGJ1ZmZlci4K
LSAgICAvLyBpZiAoIVZhbGlkYXRlQnVmZmVycyhmaXJzdCtjb3VudCkpCi0gICAgLy8gICAgIHJl
dHVybiBOU19FUlJPUl9JTlZBTElEX0FSRzsKLQotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwot
ICAgIGdsRHJhd0FycmF5cyhtb2RlLCBmaXJzdCwgY291bnQpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpkcmF3RWxlbWVudHModW5zaWduZWQgbG9uZyBtb2RlLCB1bnNpZ25lZCBsb25n
IGNvdW50LCB1bnNpZ25lZCBsb25nIHR5cGUsIGxvbmcgb2Zmc2V0KQotewotICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOwotICAgIC8vIEZJWE1FOiBtYWtlIHRoaXMgdmVyaWZpY2F0aW9uIG1vcmUg
ZWZmaWNpZW50LgotICAgIEdMaW50IGJpbmRpbmcgPSAwOwotICAgIEdMZW51bSBiaW5kaW5nX3Rh
cmdldCA9IEdMX0VMRU1FTlRfQVJSQVlfQlVGRkVSX0JJTkRJTkc7Ci0gICAgZ2xHZXRJbnRlZ2Vy
dihiaW5kaW5nX3RhcmdldCwgJmJpbmRpbmcpOwotICAgIGlmIChiaW5kaW5nIDw9IDApIHsKLSAg
ICAgICAgLy8gRklYTUU6IHJhaXNlIGV4Y2VwdGlvbi4KLSAgICAgICAgLy8gTG9nTWVzc2FnZWYo
KCJidWZmZXJEYXRhOiBubyBidWZmZXIgYm91bmQiKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0gICAgZ2xEcmF3RWxlbWVudHMobW9kZSwgY291bnQsIHR5cGUsCi0gICAgICAgICAgICAgICAg
ICAgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KG9mZnNldCkp
KTsKK2ludCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjp0ZXhJbWFnZTJEKHVuc2lnbmVkIHRh
cmdldCwgdW5zaWduZWQgbGV2ZWwsIHVuc2lnbmVkIGludGVybmFsZm9ybWF0LCB1bnNpZ25lZCB3
aWR0aCwgdW5zaWduZWQgaGVpZ2h0LCB1bnNpZ25lZCBib3JkZXIsIHVuc2lnbmVkIGZvcm1hdCwg
dW5zaWduZWQgdHlwZSwgdm9pZCogcGl4ZWxzKQoreworICAgIG1faW1wbC0+dGV4SW1hZ2UyRCh0
YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBmb3Jt
YXQsIHR5cGUsIHBpeGVscyk7CisgICAgcmV0dXJuIDA7CiB9CiAKLUdMX1NBTUVfTUVUSE9EXzEo
RW5hYmxlLCBlbmFibGUsIHVuc2lnbmVkIGxvbmcpCitERUxFR0FURV9UT19JTVBMXzModGV4UGFy
YW1ldGVyZiwgdW5zaWduZWQsIHVuc2lnbmVkLCBmbG9hdCkKK0RFTEVHQVRFX1RPX0lNUExfMyh0
ZXhQYXJhbWV0ZXJpLCB1bnNpZ25lZCwgdW5zaWduZWQsIGludCkKIAotdm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkodW5zaWduZWQgbG9uZyBpbmRleCkKK2lu
dCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjp0ZXhTdWJJbWFnZTJEKHVuc2lnbmVkIHRhcmdl
dCwgdW5zaWduZWQgbGV2ZWwsIHVuc2lnbmVkIHhvZmZzZXQsIHVuc2lnbmVkIHlvZmZzZXQsIHVu
c2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQsIHVuc2lnbmVkIGZvcm1hdCwgdW5zaWduZWQg
dHlwZSwgdm9pZCogcGl4ZWxzKQogewotICAgIG1faW50ZXJuYWwtPmVuYWJsZVZlcnRleEF0dHJp
YkFycmF5KGluZGV4KTsKKyAgICBtX2ltcGwtPnRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwg
eG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpOwor
ICAgIHJldHVybiAwOwogfQogCi1HTF9TQU1FX01FVEhPRF8wKEZpbmlzaCwgZmluaXNoKQotCi1H
TF9TQU1FX01FVEhPRF8wKEZsdXNoLCBmbHVzaCkKK0RFTEVHQVRFX1RPX0lNUExfMih1bmlmb3Jt
MWYsIGxvbmcsIGZsb2F0KQogCi1HTF9TQU1FX01FVEhPRF80X1g0KEZyYW1lYnVmZmVyUmVuZGVy
YnVmZmVyRVhULCBmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlciwgdW5zaWduZWQgbG9uZywgdW5zaWdu
ZWQgbG9uZywgdW5zaWduZWQgbG9uZywgV2ViR0xSZW5kZXJidWZmZXIqKQotCi1HTF9TQU1FX01F
VEhPRF81X1g0KEZyYW1lYnVmZmVyVGV4dHVyZTJERVhULCBmcmFtZWJ1ZmZlclRleHR1cmUyRCwg
dW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgV2ViR0xUZXh0dXJl
KiwgbG9uZykKLQotR0xfU0FNRV9NRVRIT0RfMShGcm9udEZhY2UsIGZyb250RmFjZSwgdW5zaWdu
ZWQgbG9uZykKLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2VuZXJhdGVNaXBtYXAodW5zaWdu
ZWQgbG9uZyB0YXJnZXQpCit2b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OnVuaWZvcm0x
ZnYobG9uZyBsb2NhdGlvbiwgZmxvYXQqIHYsIGludCBzaXplKQogewotICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOwotICAgIGlmIChnbEdlbmVyYXRlTWlwbWFwRVhUKQotICAgICAgICBnbEdlbmVy
YXRlTWlwbWFwRVhUKHRhcmdldCk7Ci0gICAgLy8gRklYTUU6IHByb3ZpZGUgYWx0ZXJuYXRpdmUg
Y29kZSBwYXRoPyBUaGlzIHdpbGwgYmUgdW5wbGVhc2FudAotICAgIC8vIHRvIGltcGxlbWVudCBp
ZiBnbEdlbmVyYXRlTWlwbWFwRVhUIGlzIG5vdCBhdmFpbGFibGUgLS0gaXQgd2lsbAotICAgIC8v
IHJlcXVpcmUgYSB0ZXh0dXJlIHJlYWRiYWNrIGFuZCByZS11cGxvYWQuCisgICAgbV9pbXBsLT51
bmlmb3JtMWZ2KGxvY2F0aW9uLCBzaXplLCB2KTsKIH0KIAotYm9vbCBHcmFwaGljc0NvbnRleHQz
RDo6Z2V0QWN0aXZlQXR0cmliKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgdW5zaWduZWQgbG9uZyBp
bmRleCwgQWN0aXZlSW5mbyYgaW5mbykKLXsKLSAgICBpZiAoIXByb2dyYW0pIHsKLSAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9Ci0gICAgR0xpbnQgbWF4TmFtZUxlbmd0aCA9IC0xOwotICAgIGdsR2V0UHJvZ3JhbWl2
KEVYVFJBQ1QocHJvZ3JhbSksIEdMX0FDVElWRV9BVFRSSUJVVEVfTUFYX0xFTkdUSCwgJm1heE5h
bWVMZW5ndGgpOwotICAgIGlmIChtYXhOYW1lTGVuZ3RoIDwgMCkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIEdMY2hhciogbmFtZSA9IDA7Ci0gICAgaWYgKCF0cnlGYXN0TWFsbG9jKG1heE5h
bWVMZW5ndGggKiBzaXplb2YoR0xjaGFyKSkuZ2V0VmFsdWUobmFtZSkpIHsKLSAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoT1VUX09GX01FTU9SWSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0gICAgR0xzaXplaSBsZW5ndGggPSAwOwotICAgIEdMaW50IHNpemUgPSAtMTsKLSAgICBH
TGVudW0gdHlwZSA9IDA7Ci0gICAgZ2xHZXRBY3RpdmVBdHRyaWIoRVhUUkFDVChwcm9ncmFtKSwg
aW5kZXgsIG1heE5hbWVMZW5ndGgsCi0gICAgICAgICAgICAgICAgICAgICAgJmxlbmd0aCwgJnNp
emUsICZ0eXBlLCBuYW1lKTsKLSAgICBpZiAoc2l6ZSA8IDApIHsKLSAgICAgICAgZmFzdEZyZWUo
bmFtZSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgaW5mby5uYW1lID0gU3Ry
aW5nKG5hbWUsIGxlbmd0aCk7Ci0gICAgaW5mby50eXBlID0gdHlwZTsKLSAgICBpbmZvLnNpemUg
PSBzaXplOwotICAgIGZhc3RGcmVlKG5hbWUpOwotICAgIHJldHVybiB0cnVlOwotfQorREVMRUdB
VEVfVE9fSU1QTF8yKHVuaWZvcm0xaSwgbG9uZywgaW50KQogCi1ib29sIEdyYXBoaWNzQ29udGV4
dDNEOjpnZXRBY3RpdmVVbmlmb3JtKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgdW5zaWduZWQgbG9u
ZyBpbmRleCwgQWN0aXZlSW5mbyYgaW5mbykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5h
bDo6dW5pZm9ybTFpdihsb25nIGxvY2F0aW9uLCBpbnQqIHYsIGludCBzaXplKQogewotICAgIGlm
ICghcHJvZ3JhbSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihJTlZBTElEX1ZBTFVFKTsK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBHTGludCBtYXhOYW1lTGVuZ3RoID0g
LTE7Ci0gICAgZ2xHZXRQcm9ncmFtaXYoRVhUUkFDVChwcm9ncmFtKSwgR0xfQUNUSVZFX1VOSUZP
Uk1fTUFYX0xFTkdUSCwgJm1heE5hbWVMZW5ndGgpOwotICAgIGlmIChtYXhOYW1lTGVuZ3RoIDwg
MCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIEdMY2hhciogbmFtZSA9IDA7Ci0gICAgaWYg
KCF0cnlGYXN0TWFsbG9jKG1heE5hbWVMZW5ndGggKiBzaXplb2YoR0xjaGFyKSkuZ2V0VmFsdWUo
bmFtZSkpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoT1VUX09GX01FTU9SWSk7Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgR0xzaXplaSBsZW5ndGggPSAwOwotICAgIEdM
aW50IHNpemUgPSAtMTsKLSAgICBHTGVudW0gdHlwZSA9IDA7Ci0gICAgZ2xHZXRBY3RpdmVVbmlm
b3JtKEVYVFJBQ1QocHJvZ3JhbSksIGluZGV4LCBtYXhOYW1lTGVuZ3RoLAotICAgICAgICAgICAg
ICAgICAgICAgICAmbGVuZ3RoLCAmc2l6ZSwgJnR5cGUsIG5hbWUpOwotICAgIGlmIChzaXplIDwg
MCkgewotICAgICAgICBmYXN0RnJlZShuYW1lKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLSAgICBpbmZvLm5hbWUgPSBTdHJpbmcobmFtZSwgbGVuZ3RoKTsKLSAgICBpbmZvLnR5cGUg
PSB0eXBlOwotICAgIGluZm8uc2l6ZSA9IHNpemU7Ci0gICAgZmFzdEZyZWUobmFtZSk7Ci0gICAg
cmV0dXJuIHRydWU7CisgICAgbV9pbXBsLT51bmlmb3JtMWl2KGxvY2F0aW9uLCBzaXplLCB2KTsK
IH0KIAotaW50IEdyYXBoaWNzQ29udGV4dDNEOjpnZXRBdHRyaWJMb2NhdGlvbihXZWJHTFByb2dy
YW0qIHByb2dyYW0sIGNvbnN0IFN0cmluZyYgbmFtZSkKLXsKLSAgICBpZiAoIXByb2dyYW0pCi0g
ICAgICAgIHJldHVybiAtMTsKLQotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIHJldHVy
biBnbEdldEF0dHJpYkxvY2F0aW9uKEVYVFJBQ1QocHJvZ3JhbSksIG5hbWUudXRmOCgpLmRhdGEo
KSk7Ci19CitERUxFR0FURV9UT19JTVBMXzModW5pZm9ybTJmLCBsb25nLCBmbG9hdCwgZmxvYXQp
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEJvb2xlYW52KHVuc2lnbmVkIGxvbmcgcG5h
bWUsIHVuc2lnbmVkIGNoYXIqIHZhbHVlKQordm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFs
Ojp1bmlmb3JtMmZ2KGxvbmcgbG9jYXRpb24sIGZsb2F0KiB2LCBpbnQgc2l6ZSkKIHsKLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbEdldEJvb2xlYW52KHBuYW1lLCB2YWx1ZSk7Cisg
ICAgbV9pbXBsLT51bmlmb3JtMmZ2KGxvY2F0aW9uLCBzaXplLCB2KTsKIH0KIAotdm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6Z2V0QnVmZmVyUGFyYW1ldGVyaXYodW5zaWduZWQgbG9uZyB0YXJnZXQs
IHVuc2lnbmVkIGxvbmcgcG5hbWUsIGludCogdmFsdWUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7Ci0gICAgZ2xHZXRCdWZmZXJQYXJhbWV0ZXJpdih0YXJnZXQsIHBuYW1lLCB2YWx1ZSk7
Ci19CitERUxFR0FURV9UT19JTVBMXzModW5pZm9ybTJpLCBsb25nLCBpbnQsIGludCkKIAotR3Jh
cGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgR3JhcGhpY3NDb250ZXh0M0Q6OmdldENvbnRleHRB
dHRyaWJ1dGVzKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6dW5pZm9ybTJpdihs
b25nIGxvY2F0aW9uLCBpbnQqIHYsIGludCBzaXplKQogewotICAgIHJldHVybiBtX2ludGVybmFs
LT5nZXRDb250ZXh0QXR0cmlidXRlcygpOworICAgIG1faW1wbC0+dW5pZm9ybTJpdihsb2NhdGlv
biwgc2l6ZSwgdik7CiB9CiAKLXVuc2lnbmVkIGxvbmcgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEVy
cm9yKCkKLXsKLSAgICByZXR1cm4gbV9pbnRlcm5hbC0+Z2V0RXJyb3IoKTsKLX0KK0RFTEVHQVRF
X1RPX0lNUExfNCh1bmlmb3JtM2YsIGxvbmcsIGZsb2F0LCBmbG9hdCwgZmxvYXQpCiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OmdldEZsb2F0dih1bnNpZ25lZCBsb25nIHBuYW1lLCBmbG9hdCog
dmFsdWUpCit2b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OnVuaWZvcm0zZnYobG9uZyBs
b2NhdGlvbiwgZmxvYXQqIHYsIGludCBzaXplKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OwotICAgIGdsR2V0RmxvYXR2KHBuYW1lLCB2YWx1ZSk7CisgICAgbV9pbXBsLT51bmlmb3JtM2Z2
KGxvY2F0aW9uLCBzaXplLCB2KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0RnJh
bWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYodW5zaWduZWQgbG9uZyB0YXJnZXQsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1
bnNpZ25lZCBsb25nIGF0dGFjaG1lbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHBuYW1lLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
KiB2YWx1ZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbEdldEZyYW1lYnVm
ZmVyQXR0YWNobWVudFBhcmFtZXRlcml2RVhUKHRhcmdldCwgYXR0YWNobWVudCwgcG5hbWUsIHZh
bHVlKTsKLX0KK0RFTEVHQVRFX1RPX0lNUExfNCh1bmlmb3JtM2ksIGxvbmcsIGludCwgaW50LCBp
bnQpCiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEludGVnZXJ2KHVuc2lnbmVkIGxvbmcg
cG5hbWUsIGludCogdmFsdWUpCit2b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OnVuaWZv
cm0zaXYobG9uZyBsb2NhdGlvbiwgaW50KiB2LCBpbnQgc2l6ZSkKIHsKLSAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKLSAgICBnbEdldEludGVnZXJ2KHBuYW1lLCB2YWx1ZSk7CisgICAgbV9pbXBs
LT51bmlmb3JtM2l2KGxvY2F0aW9uLCBzaXplLCB2KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6Z2V0UHJvZ3JhbWl2KFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHBuYW1lLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCogdmFsdWUpCi17Ci0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7Ci0gICAgZ2xHZXRQcm9ncmFtaXYoRVhUUkFDVChwcm9ncmFtKSwgcG5hbWUsIHZh
bHVlKTsKLX0KK0RFTEVHQVRFX1RPX0lNUExfNSh1bmlmb3JtNGYsIGxvbmcsIGZsb2F0LCBmbG9h
dCwgZmxvYXQsIGZsb2F0KQogCi1TdHJpbmcgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFByb2dyYW1J
bmZvTG9nKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRl
cm5hbDo6dW5pZm9ybTRmdihsb25nIGxvY2F0aW9uLCBmbG9hdCogdiwgaW50IHNpemUpCiB7Ci0g
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgR0x1aW50IHByb2dyYW1JRCA9IEVYVFJBQ1Qo
cHJvZ3JhbSk7Ci0gICAgR0xpbnQgbG9nTGVuZ3RoOwotICAgIGdsR2V0UHJvZ3JhbWl2KHByb2dy
YW1JRCwgR0xfSU5GT19MT0dfTEVOR1RILCAmbG9nTGVuZ3RoKTsKLSAgICBpZiAoIWxvZ0xlbmd0
aCkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIEdMY2hhciogbG9nID0gMDsKLSAgICBp
ZiAoIXRyeUZhc3RNYWxsb2MobG9nTGVuZ3RoICogc2l6ZW9mKEdMY2hhcikpLmdldFZhbHVlKGxv
ZykpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICBHTHNpemVpIHJldHVybmVkTG9nTGVu
Z3RoOwotICAgIGdsR2V0UHJvZ3JhbUluZm9Mb2cocHJvZ3JhbUlELCBsb2dMZW5ndGgsICZyZXR1
cm5lZExvZ0xlbmd0aCwgbG9nKTsKLSAgICBBU1NFUlQobG9nTGVuZ3RoID09IHJldHVybmVkTG9n
TGVuZ3RoICsgMSk7Ci0gICAgU3RyaW5nIHJlcyA9IFN0cmluZyhsb2csIHJldHVybmVkTG9nTGVu
Z3RoKTsKLSAgICBmYXN0RnJlZShsb2cpOwotICAgIHJldHVybiByZXM7CisgICAgbV9pbXBsLT51
bmlmb3JtNGZ2KGxvY2F0aW9uLCBzaXplLCB2KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXYodW5zaWduZWQgbG9uZyB0YXJnZXQsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBs
b25nIHBuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50KiB2YWx1ZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbEdl
dFJlbmRlcmJ1ZmZlclBhcmFtZXRlcml2RVhUKHRhcmdldCwgcG5hbWUsIHZhbHVlKTsKLX0KK0RF
TEVHQVRFX1RPX0lNUExfNSh1bmlmb3JtNGksIGxvbmcsIGludCwgaW50LCBpbnQsIGludCkKIAot
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0U2hhZGVyaXYoV2ViR0xTaGFkZXIqIHNoYWRlciwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgcG5hbWUs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQqIHZhbHVlKQordm9pZCBH
cmFwaGljc0NvbnRleHQzREludGVybmFsOjp1bmlmb3JtNGl2KGxvbmcgbG9jYXRpb24sIGludCog
diwgaW50IHNpemUpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2xHZXRTaGFk
ZXJpdihFWFRSQUNUKHNoYWRlciksIHBuYW1lLCB2YWx1ZSk7CisgICAgbV9pbXBsLT51bmlmb3Jt
NGl2KGxvY2F0aW9uLCBzaXplLCB2KTsKIH0KIAotU3RyaW5nIEdyYXBoaWNzQ29udGV4dDNEOjpn
ZXRTaGFkZXJJbmZvTG9nKFdlYkdMU2hhZGVyKiBzaGFkZXIpCit2b2lkIEdyYXBoaWNzQ29udGV4
dDNESW50ZXJuYWw6OnVuaWZvcm1NYXRyaXgyZnYobG9uZyBsb2NhdGlvbiwgYm9vbCB0cmFuc3Bv
c2UsIGZsb2F0KiB2YWx1ZSwgaW50IHNpemUpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
Ci0gICAgR0x1aW50IHNoYWRlcklEID0gRVhUUkFDVChzaGFkZXIpOwotICAgIEdMaW50IGxvZ0xl
bmd0aDsKLSAgICBnbEdldFNoYWRlcml2KHNoYWRlcklELCBHTF9JTkZPX0xPR19MRU5HVEgsICZs
b2dMZW5ndGgpOwotICAgIGlmICghbG9nTGVuZ3RoKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7
Ci0gICAgR0xjaGFyKiBsb2cgPSAwOwotICAgIGlmICghdHJ5RmFzdE1hbGxvYyhsb2dMZW5ndGgg
KiBzaXplb2YoR0xjaGFyKSkuZ2V0VmFsdWUobG9nKSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygp
OwotICAgIEdMc2l6ZWkgcmV0dXJuZWRMb2dMZW5ndGg7Ci0gICAgZ2xHZXRTaGFkZXJJbmZvTG9n
KHNoYWRlcklELCBsb2dMZW5ndGgsICZyZXR1cm5lZExvZ0xlbmd0aCwgbG9nKTsKLSAgICBBU1NF
UlQobG9nTGVuZ3RoID09IHJldHVybmVkTG9nTGVuZ3RoICsgMSk7Ci0gICAgU3RyaW5nIHJlcyA9
IFN0cmluZyhsb2csIHJldHVybmVkTG9nTGVuZ3RoKTsKLSAgICBmYXN0RnJlZShsb2cpOwotICAg
IHJldHVybiByZXM7CisgICAgbV9pbXBsLT51bmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9uLCBzaXpl
LCB0cmFuc3Bvc2UsIHZhbHVlKTsKIH0KIAotU3RyaW5nIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRT
aGFkZXJTb3VyY2UoV2ViR0xTaGFkZXIqIHNoYWRlcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RJ
bnRlcm5hbDo6dW5pZm9ybU1hdHJpeDNmdihsb25nIGxvY2F0aW9uLCBib29sIHRyYW5zcG9zZSwg
ZmxvYXQqIHZhbHVlLCBpbnQgc2l6ZSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAg
ICBHTHVpbnQgc2hhZGVySUQgPSBFWFRSQUNUKHNoYWRlcik7Ci0gICAgR0xpbnQgbG9nTGVuZ3Ro
OwotICAgIGdsR2V0U2hhZGVyaXYoc2hhZGVySUQsIEdMX1NIQURFUl9TT1VSQ0VfTEVOR1RILCAm
bG9nTGVuZ3RoKTsKLSAgICBpZiAoIWxvZ0xlbmd0aCkKLSAgICAgICAgcmV0dXJuIFN0cmluZygp
OwotICAgIEdMY2hhciogbG9nID0gMDsKLSAgICBpZiAoIXRyeUZhc3RNYWxsb2MobG9nTGVuZ3Ro
ICogc2l6ZW9mKEdMY2hhcikpLmdldFZhbHVlKGxvZykpCi0gICAgICAgIHJldHVybiBTdHJpbmco
KTsKLSAgICBHTHNpemVpIHJldHVybmVkTG9nTGVuZ3RoOwotICAgIGdsR2V0U2hhZGVyU291cmNl
KHNoYWRlcklELCBsb2dMZW5ndGgsICZyZXR1cm5lZExvZ0xlbmd0aCwgbG9nKTsKLSAgICBBU1NF
UlQobG9nTGVuZ3RoID09IHJldHVybmVkTG9nTGVuZ3RoICsgMSk7Ci0gICAgU3RyaW5nIHJlcyA9
IFN0cmluZyhsb2csIHJldHVybmVkTG9nTGVuZ3RoKTsKLSAgICBmYXN0RnJlZShsb2cpOwotICAg
IHJldHVybiByZXM7CisgICAgbV9pbXBsLT51bmlmb3JtTWF0cml4M2Z2KGxvY2F0aW9uLCBzaXpl
LCB0cmFuc3Bvc2UsIHZhbHVlKTsKIH0KIAotU3RyaW5nIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRT
dHJpbmcodW5zaWduZWQgbG9uZyBuYW1lKQordm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFs
Ojp1bmlmb3JtTWF0cml4NGZ2KGxvbmcgbG9jYXRpb24sIGJvb2wgdHJhbnNwb3NlLCBmbG9hdCog
dmFsdWUsIGludCBzaXplKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIHJldHVy
biBTdHJpbmcocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oZ2xHZXRTdHJpbmcobmFtZSkp
KTsKKyAgICBtX2ltcGwtPnVuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24sIHNpemUsIHRyYW5zcG9z
ZSwgdmFsdWUpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRUZXhQYXJhbWV0ZXJm
dih1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBwbmFtZSwgZmxvYXQqIHZhbHVl
KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsR2V0VGV4UGFyYW1ldGVyZnYo
dGFyZ2V0LCBwbmFtZSwgdmFsdWUpOwotfQorREVMRUdBVEVfVE9fSU1QTF8xX1godXNlUHJvZ3Jh
bSwgV2ViR0xQcm9ncmFtKikKK0RFTEVHQVRFX1RPX0lNUExfMV9YKHZhbGlkYXRlUHJvZ3JhbSwg
V2ViR0xQcm9ncmFtKikKIAotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VGV4UGFyYW1ldGVy
aXYodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgcG5hbWUsIGludCogdmFsdWUp
Ci17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2xHZXRUZXhQYXJhbWV0ZXJpdih0
YXJnZXQsIHBuYW1lLCB2YWx1ZSk7Ci19CitERUxFR0FURV9UT19JTVBMXzIodmVydGV4QXR0cmli
MWYsIHVuc2lnbmVkIGxvbmcsIGZsb2F0KQorREVMRUdBVEVfVE9fSU1QTF8yKHZlcnRleEF0dHJp
YjFmdiwgdW5zaWduZWQgbG9uZywgZmxvYXQqKQorREVMRUdBVEVfVE9fSU1QTF8zKHZlcnRleEF0
dHJpYjJmLCB1bnNpZ25lZCBsb25nLCBmbG9hdCwgZmxvYXQpCitERUxFR0FURV9UT19JTVBMXzIo
dmVydGV4QXR0cmliMmZ2LCB1bnNpZ25lZCBsb25nLCBmbG9hdCopCitERUxFR0FURV9UT19JTVBM
XzQodmVydGV4QXR0cmliM2YsIHVuc2lnbmVkIGxvbmcsIGZsb2F0LCBmbG9hdCwgZmxvYXQpCitE
RUxFR0FURV9UT19JTVBMXzIodmVydGV4QXR0cmliM2Z2LCB1bnNpZ25lZCBsb25nLCBmbG9hdCop
CitERUxFR0FURV9UT19JTVBMXzUodmVydGV4QXR0cmliNGYsIHVuc2lnbmVkIGxvbmcsIGZsb2F0
LCBmbG9hdCwgZmxvYXQsIGZsb2F0KQorREVMRUdBVEVfVE9fSU1QTF8yKHZlcnRleEF0dHJpYjRm
diwgdW5zaWduZWQgbG9uZywgZmxvYXQqKQorREVMRUdBVEVfVE9fSU1QTF82KHZlcnRleEF0dHJp
YlBvaW50ZXIsIHVuc2lnbmVkIGxvbmcsIGludCwgaW50LCBib29sLCB1bnNpZ25lZCBsb25nLCB1
bnNpZ25lZCBsb25nKQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRVbmlmb3JtZnYoV2Vi
R0xQcm9ncmFtKiBwcm9ncmFtLCBsb25nIGxvY2F0aW9uLCBmbG9hdCogdmFsdWUpCi17Ci0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2xHZXRVbmlmb3JtZnYoRVhUUkFDVChwcm9ncmFt
KSwgbG9jYXRpb24sIHZhbHVlKTsKLX0KK0RFTEVHQVRFX1RPX0lNUExfNCh2aWV3cG9ydCwgbG9u
ZywgbG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZykKIAotdm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6Z2V0VW5pZm9ybWl2KFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgbG9uZyBsb2NhdGlv
biwgaW50KiB2YWx1ZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbEdldFVu
aWZvcm1pdihFWFRSQUNUKHByb2dyYW0pLCBsb2NhdGlvbiwgdmFsdWUpOwotfQorREVMRUdBVEVf
VE9fSU1QTF9SKGNyZWF0ZUJ1ZmZlciwgdW5zaWduZWQpCitERUxFR0FURV9UT19JTVBMX1IoY3Jl
YXRlRnJhbWVidWZmZXIsIHVuc2lnbmVkKQorREVMRUdBVEVfVE9fSU1QTF9SKGNyZWF0ZVByb2dy
YW0sIHVuc2lnbmVkKQorREVMRUdBVEVfVE9fSU1QTF9SKGNyZWF0ZVJlbmRlcmJ1ZmZlciwgdW5z
aWduZWQpCitERUxFR0FURV9UT19JTVBMXzFSKGNyZWF0ZVNoYWRlciwgdW5zaWduZWQgbG9uZywg
dW5zaWduZWQpCitERUxFR0FURV9UT19JTVBMX1IoY3JlYXRlVGV4dHVyZSwgdW5zaWduZWQpCiAK
LWxvbmcgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFVuaWZvcm1Mb2NhdGlvbihXZWJHTFByb2dyYW0q
IHByb2dyYW0sIGNvbnN0IFN0cmluZyYgbmFtZSkKLXsKLSAgICBpZiAoIXByb2dyYW0pCi0gICAg
ICAgIHJldHVybiAtMTsKK0RFTEVHQVRFX1RPX0lNUExfMShkZWxldGVCdWZmZXIsIHVuc2lnbmVk
KQorREVMRUdBVEVfVE9fSU1QTF8xKGRlbGV0ZUZyYW1lYnVmZmVyLCB1bnNpZ25lZCkKK0RFTEVH
QVRFX1RPX0lNUExfMShkZWxldGVQcm9ncmFtLCB1bnNpZ25lZCkKK0RFTEVHQVRFX1RPX0lNUExf
MShkZWxldGVSZW5kZXJidWZmZXIsIHVuc2lnbmVkKQorREVMRUdBVEVfVE9fSU1QTF8xKGRlbGV0
ZVNoYWRlciwgdW5zaWduZWQpCitERUxFR0FURV9UT19JTVBMXzEoZGVsZXRlVGV4dHVyZSwgdW5z
aWduZWQpCiAKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICByZXR1cm4gZ2xHZXRVbmlm
b3JtTG9jYXRpb24oRVhUUkFDVChwcm9ncmFtKSwgbmFtZS51dGY4KCkuZGF0YSgpKTsKLX0KK0RF
TEVHQVRFX1RPX0lNUExfMShzeW50aGVzaXplR0xFcnJvciwgdW5zaWduZWQgbG9uZykKIAotdm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VmVydGV4QXR0cmliZnYodW5zaWduZWQgbG9uZyBpbmRl
eCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxv
bmcgcG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9h
dCogdmFsdWUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2xHZXRWZXJ0ZXhB
dHRyaWJmdihpbmRleCwgcG5hbWUsIHZhbHVlKTsKLX0KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gR3Jh
cGhpY3NDb250ZXh0M0QKKy8vCiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFZlcnRleEF0
dHJpYml2KHVuc2lnbmVkIGxvbmcgaW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHBuYW1lLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50KiB2YWx1ZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKLSAgICBnbEdldFZlcnRleEF0dHJpYml2KGluZGV4LCBwbmFtZSwgdmFsdWUpOwotfQor
Ly8gTWFjcm9zIHRvIGFzc2lzdCBpbiBkZWxlZ2F0aW5nIGZyb20gR3JhcGhpY3NDb250ZXh0M0Qg
dG8KKy8vIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwuCiAKLWxvbmcgR3JhcGhpY3NDb250ZXh0
M0Q6OmdldFZlcnRleEF0dHJpYk9mZnNldCh1bnNpZ25lZCBsb25nIGluZGV4LCB1bnNpZ25lZCBs
b25nIHBuYW1lKQotewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQuCi0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLSAgICByZXR1cm4gMDsKKyNkZWZpbmUgREVMRUdBVEVfVE9fSU5URVJOQUwobmFtZSkg
XAordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6bmFtZSgpIFwKK3sgXAorICAgIG1faW50ZXJuYWwt
Pm5hbWUoKTsgXAogfQogCi1HTF9TQU1FX01FVEhPRF8yKEhpbnQsIGhpbnQsIHVuc2lnbmVkIGxv
bmcsIHVuc2lnbmVkIGxvbmcpOwotCi1ib29sIEdyYXBoaWNzQ29udGV4dDNEOjppc0J1ZmZlcihX
ZWJHTEJ1ZmZlciogYnVmZmVyKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIHJl
dHVybiBnbElzQnVmZmVyKEVYVFJBQ1QoYnVmZmVyKSk7CisjZGVmaW5lIERFTEVHQVRFX1RPX0lO
VEVSTkFMX1IobmFtZSwgcnQpICAgICAgICAgICBcCitydCBHcmFwaGljc0NvbnRleHQzRDo6bmFt
ZSgpIFwKK3sgXAorICAgIHJldHVybiBtX2ludGVybmFsLT5uYW1lKCk7IFwKIH0KIAotYm9vbCBH
cmFwaGljc0NvbnRleHQzRDo6aXNFbmFibGVkKHVuc2lnbmVkIGxvbmcgY2FwKQotewotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOwotICAgIHJldHVybiBnbElzRW5hYmxlZChjYXApOworI2RlZmlu
ZSBERUxFR0FURV9UT19JTlRFUk5BTF8xKG5hbWUsIHQxKSBcCit2b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpuYW1lKHQxIGExKSBcCit7IFwKKyAgICBtX2ludGVybmFsLT5uYW1lKGExKTsgXAogfQog
Ci1ib29sIEdyYXBoaWNzQ29udGV4dDNEOjppc0ZyYW1lYnVmZmVyKFdlYkdMRnJhbWVidWZmZXIq
IGZyYW1lYnVmZmVyKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIHJldHVybiBn
bElzRnJhbWVidWZmZXJFWFQoRVhUUkFDVChmcmFtZWJ1ZmZlcikpOworI2RlZmluZSBERUxFR0FU
RV9UT19JTlRFUk5BTF8xUihuYW1lLCB0MSwgcnQpICAgIFwKK3J0IEdyYXBoaWNzQ29udGV4dDNE
OjpuYW1lKHQxIGExKSBcCit7IFwKKyAgICByZXR1cm4gbV9pbnRlcm5hbC0+bmFtZShhMSk7IFwK
IH0KIAotYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6aXNQcm9ncmFtKFdlYkdMUHJvZ3JhbSogcHJv
Z3JhbSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICByZXR1cm4gZ2xJc1Byb2dy
YW0oRVhUUkFDVChwcm9ncmFtKSk7CisjZGVmaW5lIERFTEVHQVRFX1RPX0lOVEVSTkFMXzIobmFt
ZSwgdDEsIHQyKSBcCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpuYW1lKHQxIGExLCB0MiBhMikg
XAoreyBcCisgICAgbV9pbnRlcm5hbC0+bmFtZShhMSwgYTIpOyBcCiB9CiAKLWJvb2wgR3JhcGhp
Y3NDb250ZXh0M0Q6OmlzUmVuZGVyYnVmZmVyKFdlYkdMUmVuZGVyYnVmZmVyKiByZW5kZXJidWZm
ZXIpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgcmV0dXJuIGdsSXNSZW5kZXJi
dWZmZXJFWFQoRVhUUkFDVChyZW5kZXJidWZmZXIpKTsKKyNkZWZpbmUgREVMRUdBVEVfVE9fSU5U
RVJOQUxfMlIobmFtZSwgdDEsIHQyLCBydCkgIFwKK3J0IEdyYXBoaWNzQ29udGV4dDNEOjpuYW1l
KHQxIGExLCB0MiBhMikgXAoreyBcCisgICAgcmV0dXJuIG1faW50ZXJuYWwtPm5hbWUoYTEsIGEy
KTsgXAogfQogCi1ib29sIEdyYXBoaWNzQ29udGV4dDNEOjppc1NoYWRlcihXZWJHTFNoYWRlciog
c2hhZGVyKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIHJldHVybiBnbElzU2hh
ZGVyKEVYVFJBQ1Qoc2hhZGVyKSk7CisjZGVmaW5lIERFTEVHQVRFX1RPX0lOVEVSTkFMXzMobmFt
ZSwgdDEsIHQyLCB0MykgICBcCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpuYW1lKHQxIGExLCB0
MiBhMiwgdDMgYTMpICAgIFwKK3sgXAorICAgIG1faW50ZXJuYWwtPm5hbWUoYTEsIGEyLCBhMyk7
ICAgICAgICAgICAgICAgICAgXAogfQogCi1ib29sIEdyYXBoaWNzQ29udGV4dDNEOjppc1RleHR1
cmUoV2ViR0xUZXh0dXJlKiB0ZXh0dXJlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwot
ICAgIHJldHVybiBnbElzVGV4dHVyZShFWFRSQUNUKHRleHR1cmUpKTsKKyNkZWZpbmUgREVMRUdB
VEVfVE9fSU5URVJOQUxfM1IobmFtZSwgdDEsIHQyLCB0MywgcnQpICAgXAorcnQgR3JhcGhpY3ND
b250ZXh0M0Q6Om5hbWUodDEgYTEsIHQyIGEyLCB0MyBhMykgICAgXAoreyBcCisgICAgcmV0dXJu
IG1faW50ZXJuYWwtPm5hbWUoYTEsIGEyLCBhMyk7ICAgICAgICAgICAgICAgICAgXAogfQogCi1H
TF9TQU1FX01FVEhPRF8xKExpbmVXaWR0aCwgbGluZVdpZHRoLCBkb3VibGUpCisjZGVmaW5lIERF
TEVHQVRFX1RPX0lOVEVSTkFMXzQobmFtZSwgdDEsIHQyLCB0MywgdDQpICAgIFwKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6Om5hbWUodDEgYTEsIHQyIGEyLCB0MyBhMywgdDQgYTQpICBcCit7IFwK
KyAgICBtX2ludGVybmFsLT5uYW1lKGExLCBhMiwgYTMsIGE0KTsgICAgICAgICAgICAgIFwKK30K
IAotR0xfU0FNRV9NRVRIT0RfMV9YKExpbmtQcm9ncmFtLCBsaW5rUHJvZ3JhbSwgV2ViR0xQcm9n
cmFtKikKKyNkZWZpbmUgREVMRUdBVEVfVE9fSU5URVJOQUxfNShuYW1lLCB0MSwgdDIsIHQzLCB0
NCwgdDUpICAgICAgXAordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6bmFtZSh0MSBhMSwgdDIgYTIs
IHQzIGEzLCB0NCBhNCwgdDUgYTUpICAgICAgICBcCit7IFwKKyAgICBtX2ludGVybmFsLT5uYW1l
KGExLCBhMiwgYTMsIGE0LCBhNSk7ICAgXAorfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpw
aXhlbFN0b3JlaSh1bnNpZ25lZCBsb25nIHBuYW1lLCBsb25nIHBhcmFtKQotewotICAgIGlmIChw
bmFtZSAhPSBHTF9QQUNLX0FMSUdOTUVOVCAmJiBwbmFtZSAhPSBHTF9VTlBBQ0tfQUxJR05NRU5U
KSB7Ci0gICAgICAgIC8vIEZJWE1FOiBDcmVhdGUgYSBmYWtlIEdMIGVycm9yIGFuZCB0aHJvdyBh
biBleGNlcHRpb24uCi0gICAgICAgIHJldHVybjsKLSAgICB9CisjZGVmaW5lIERFTEVHQVRFX1RP
X0lOVEVSTkFMXzYobmFtZSwgdDEsIHQyLCB0MywgdDQsIHQ1LCB0NikgIFwKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6Om5hbWUodDEgYTEsIHQyIGEyLCB0MyBhMywgdDQgYTQsIHQ1IGE1LCB0NiBh
NikgXAoreyBcCisgICAgbV9pbnRlcm5hbC0+bmFtZShhMSwgYTIsIGEzLCBhNCwgYTUsIGE2KTsg
ICBcCit9CiAKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbFBpeGVsU3RvcmVpKHBu
YW1lLCBwYXJhbSk7CisjZGVmaW5lIERFTEVHQVRFX1RPX0lOVEVSTkFMXzZSKG5hbWUsIHQxLCB0
MiwgdDMsIHQ0LCB0NSwgdDYsIHJ0KSAgXAorcnQgR3JhcGhpY3NDb250ZXh0M0Q6Om5hbWUodDEg
YTEsIHQyIGEyLCB0MyBhMywgdDQgYTQsIHQ1IGE1LCB0NiBhNikgXAoreyBcCisgICAgcmV0dXJu
IG1faW50ZXJuYWwtPm5hbWUoYTEsIGEyLCBhMywgYTQsIGE1LCBhNik7ICAgICAgIFwKIH0KIAot
R0xfU0FNRV9NRVRIT0RfMihQb2x5Z29uT2Zmc2V0LCBwb2x5Z29uT2Zmc2V0LCBkb3VibGUsIGRv
dWJsZSkKKyNkZWZpbmUgREVMRUdBVEVfVE9fSU5URVJOQUxfN1IobmFtZSwgdDEsIHQyLCB0Mywg
dDQsIHQ1LCB0NiwgdDcsIHJ0KSBcCitydCBHcmFwaGljc0NvbnRleHQzRDo6bmFtZSh0MSBhMSwg
dDIgYTIsIHQzIGEzLCB0NCBhNCwgdDUgYTUsIHQ2IGE2LCB0NyBhNykgXAoreyBcCisgICAgcmV0
dXJuIG1faW50ZXJuYWwtPm5hbWUoYTEsIGEyLCBhMywgYTQsIGE1LCBhNiwgYTcpOyAgIFwKK30K
IAotUGFzc1JlZlB0cjxXZWJHTEFycmF5PiBHcmFwaGljc0NvbnRleHQzRDo6cmVhZFBpeGVscyhs
b25nIHgsIGxvbmcgeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0LAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5z
aWduZWQgbG9uZyBmb3JtYXQsIHVuc2lnbmVkIGxvbmcgdHlwZSkgewotICAgIC8vIEZJWE1FOiBz
dXBwb3J0IG1vcmUgcGl4ZWwgZm9ybWF0cyBhbmQgdHlwZXMuCi0gICAgaWYgKCEoKGZvcm1hdCA9
PSBHTF9SR0JBKSAmJiAodHlwZSA9PSBHTF9VTlNJR05FRF9CWVRFKSkpCi0gICAgICAgIHJldHVy
biAwOworI2RlZmluZSBERUxFR0FURV9UT19JTlRFUk5BTF84KG5hbWUsIHQxLCB0MiwgdDMsIHQ0
LCB0NSwgdDYsIHQ3LCB0OCkgICAgICAgXAordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6bmFtZSh0
MSBhMSwgdDIgYTIsIHQzIGEzLCB0NCBhNCwgdDUgYTUsIHQ2IGE2LCB0NyBhNywgdDggYTgpIFwK
K3sgXAorICAgIG1faW50ZXJuYWwtPm5hbWUoYTEsIGEyLCBhMywgYTQsIGE1LCBhNiwgYTcsIGE4
KTsgICAgICBcCit9CiAKLSAgICAvLyBGSVhNRTogdGFrZSBpbnRvIGFjY291bnQgcGFjayBhbGln
bm1lbnQuCi0gICAgUmVmUHRyPFdlYkdMVW5zaWduZWRCeXRlQXJyYXk+IGFycmF5ID0gV2ViR0xV
bnNpZ25lZEJ5dGVBcnJheTo6Y3JlYXRlKHdpZHRoICogaGVpZ2h0ICogNCk7Ci0gICAgZ2xSZWFk
UGl4ZWxzKHgsIHksIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgYXJyYXktPmJhc2VBZGRy
ZXNzKCkpOwotICAgIHJldHVybiBhcnJheTsKKyNkZWZpbmUgREVMRUdBVEVfVE9fSU5URVJOQUxf
OVIobmFtZSwgdDEsIHQyLCB0MywgdDQsIHQ1LCB0NiwgdDcsIHQ4LCB0OSwgcnQpIFwKK3J0IEdy
YXBoaWNzQ29udGV4dDNEOjpuYW1lKHQxIGExLCB0MiBhMiwgdDMgYTMsIHQ0IGE0LCB0NSBhNSwg
dDYgYTYsIHQ3IGE3LCB0OCBhOCwgdDkgYTkpIFwKK3sgXAorICAgIHJldHVybiBtX2ludGVybmFs
LT5uYW1lKGExLCBhMiwgYTMsIGE0LCBhNSwgYTYsIGE3LCBhOCwgYTkpOyAgIFwKIH0KIAotdm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6cmVsZWFzZVNoYWRlckNvbXBpbGVyKCkKK0dyYXBoaWNzQ29u
dGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRChHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBh
dHRycykKIHsKIH0KIAotR0xfU0FNRV9NRVRIT0RfNChSZW5kZXJidWZmZXJTdG9yYWdlRVhULCBy
ZW5kZXJidWZmZXJTdG9yYWdlLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25l
ZCBsb25nLCB1bnNpZ25lZCBsb25nKQotCi1HTF9TQU1FX01FVEhPRF8yKFNhbXBsZUNvdmVyYWdl
LCBzYW1wbGVDb3ZlcmFnZSwgZG91YmxlLCBib29sKQotCi1HTF9TQU1FX01FVEhPRF80KFNjaXNz
b3IsIHNjaXNzb3IsIGxvbmcsIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpCi0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnNoYWRlclNvdXJjZShXZWJHTFNoYWRlciogc2hhZGVy
LCBjb25zdCBTdHJpbmcmIHNvdXJjZSkKK0dyYXBoaWNzQ29udGV4dDNEOjp+R3JhcGhpY3NDb250
ZXh0M0QoKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIENTdHJpbmcgc3RyID0g
c291cmNlLnV0ZjgoKTsKLSAgICBjb25zdCBjaGFyKiBkYXRhID0gc3RyLmRhdGEoKTsKLSAgICBH
TGludCBsZW5ndGggPSBzdHIubGVuZ3RoKCk7Ci0gICAgZ2xTaGFkZXJTb3VyY2UoRVhUUkFDVChz
aGFkZXIpLCAxLCAmZGF0YSwgJmxlbmd0aCk7CiB9CiAKLUdMX1NBTUVfTUVUSE9EXzMoU3RlbmNp
bEZ1bmMsIHN0ZW5jaWxGdW5jLCB1bnNpZ25lZCBsb25nLCBsb25nLCB1bnNpZ25lZCBsb25nKQot
Ci1HTF9TQU1FX01FVEhPRF80KFN0ZW5jaWxGdW5jU2VwYXJhdGUsIHN0ZW5jaWxGdW5jU2VwYXJh
dGUsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIGxvbmcsIHVuc2lnbmVkIGxvbmcpCi0K
LUdMX1NBTUVfTUVUSE9EXzEoU3RlbmNpbE1hc2ssIHN0ZW5jaWxNYXNrLCB1bnNpZ25lZCBsb25n
KQotCi1HTF9TQU1FX01FVEhPRF8yKFN0ZW5jaWxNYXNrU2VwYXJhdGUsIHN0ZW5jaWxNYXNrU2Vw
YXJhdGUsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpCi0KLUdMX1NBTUVfTUVUSE9EXzMo
U3RlbmNpbE9wLCBzdGVuY2lsT3AsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2ln
bmVkIGxvbmcpCi0KLUdMX1NBTUVfTUVUSE9EXzQoU3RlbmNpbE9wU2VwYXJhdGUsIHN0ZW5jaWxP
cFNlcGFyYXRlLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCB1
bnNpZ25lZCBsb25nKQorUGFzc093blB0cjxHcmFwaGljc0NvbnRleHQzRD4gR3JhcGhpY3NDb250
ZXh0M0Q6OmNyZWF0ZShHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRycykKK3sKKyAg
ICBHcmFwaGljc0NvbnRleHQzREludGVybmFsKiBpbnRlcm5hbCA9IG5ldyBHcmFwaGljc0NvbnRl
eHQzREludGVybmFsKCk7CisgICAgaWYgKCFpbnRlcm5hbC0+aW5pdGlhbGl6ZShhdHRycykpIHsK
KyAgICAgICAgZGVsZXRlIGludGVybmFsOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAg
UGFzc093blB0cjxHcmFwaGljc0NvbnRleHQzRD4gcmVzdWx0ID0gbmV3IEdyYXBoaWNzQ29udGV4
dDNEKGF0dHJzKTsKKyAgICByZXN1bHQtPm1faW50ZXJuYWwuc2V0KGludGVybmFsKTsKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzeW50aGVzaXplR0xF
cnJvcih1bnNpZ25lZCBsb25nIGVycm9yKQorUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCBHcmFw
aGljc0NvbnRleHQzRDo6cGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCgpIGNvbnN0CiB7Ci0gICAg
bV9pbnRlcm5hbC0+c3ludGhlc2l6ZUdMRXJyb3IoZXJyb3IpOworICAgIHJldHVybiBtX2ludGVy
bmFsLT5wbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEKCk7CiB9CiAKLWludCBHcmFwaGljc0NvbnRl
eHQzRDo6dGV4SW1hZ2UyRCh1bnNpZ25lZCB0YXJnZXQsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdW5zaWduZWQgbGV2ZWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdW5zaWduZWQgaW50ZXJuYWxmb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdW5zaWduZWQgd2lkdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdW5zaWduZWQgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVu
c2lnbmVkIGJvcmRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBmb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgdHlw
ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiBwaXhlbHMpCitQbGF0
Zm9ybTNET2JqZWN0IEdyYXBoaWNzQ29udGV4dDNEOjpwbGF0Zm9ybVRleHR1cmUoKSBjb25zdAog
ewotICAgIC8vIEZJWE1FOiBtdXN0IGRvIHZhbGlkYXRpb24gc2ltaWxhciB0byBKT0dMJ3MgdG8g
ZW5zdXJlIHRoYXQKLSAgICAvLyB0aGUgaW5jb21pbmcgYXJyYXkgaXMgb2YgdGhlIGFwcHJvcHJp
YXRlIGxlbmd0aC4KLSAgICBnbFRleEltYWdlMkQodGFyZ2V0LAotICAgICAgICAgICAgICAgICBs
ZXZlbCwKLSAgICAgICAgICAgICAgICAgaW50ZXJuYWxmb3JtYXQsCi0gICAgICAgICAgICAgICAg
IHdpZHRoLAotICAgICAgICAgICAgICAgICBoZWlnaHQsCi0gICAgICAgICAgICAgICAgIGJvcmRl
ciwKLSAgICAgICAgICAgICAgICAgZm9ybWF0LAotICAgICAgICAgICAgICAgICB0eXBlLAotICAg
ICAgICAgICAgICAgICBwaXhlbHMpOwotICAgIHJldHVybiAwOworICAgIHJldHVybiBtX2ludGVy
bmFsLT5wbGF0Zm9ybVRleHR1cmUoKTsKIH0KIAorREVMRUdBVEVfVE9fSU5URVJOQUwobWFrZUNv
bnRleHRDdXJyZW50KQorREVMRUdBVEVfVE9fSU5URVJOQUxfMVIoc2l6ZUluQnl0ZXMsIGludCwg
aW50KQorREVMRUdBVEVfVE9fSU5URVJOQUxfMihyZXNoYXBlLCBpbnQsIGludCkKKworREVMRUdB
VEVfVE9fSU5URVJOQUxfMShhY3RpdmVUZXh0dXJlLCB1bnNpZ25lZCBsb25nKQorREVMRUdBVEVf
VE9fSU5URVJOQUxfMihhdHRhY2hTaGFkZXIsIFdlYkdMUHJvZ3JhbSosIFdlYkdMU2hhZGVyKikK
K0RFTEVHQVRFX1RPX0lOVEVSTkFMXzMoYmluZEF0dHJpYkxvY2F0aW9uLCBXZWJHTFByb2dyYW0q
LCB1bnNpZ25lZCBsb25nLCBjb25zdCBTdHJpbmcmKQorCitERUxFR0FURV9UT19JTlRFUk5BTF8y
KGJpbmRCdWZmZXIsIHVuc2lnbmVkIGxvbmcsIFdlYkdMQnVmZmVyKikKK0RFTEVHQVRFX1RPX0lO
VEVSTkFMXzIoYmluZEZyYW1lYnVmZmVyLCB1bnNpZ25lZCBsb25nLCBXZWJHTEZyYW1lYnVmZmVy
KikKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzIoYmluZFJlbmRlcmJ1ZmZlciwgdW5zaWduZWQgbG9u
ZywgV2ViR0xSZW5kZXJidWZmZXIqKQorREVMRUdBVEVfVE9fSU5URVJOQUxfMihiaW5kVGV4dHVy
ZSwgdW5zaWduZWQgbG9uZywgV2ViR0xUZXh0dXJlKikKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzQo
YmxlbmRDb2xvciwgZG91YmxlLCBkb3VibGUsIGRvdWJsZSwgZG91YmxlKQorREVMRUdBVEVfVE9f
SU5URVJOQUxfMShibGVuZEVxdWF0aW9uLCB1bnNpZ25lZCBsb25nKQorREVMRUdBVEVfVE9fSU5U
RVJOQUxfMihibGVuZEVxdWF0aW9uU2VwYXJhdGUsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxv
bmcpCitERUxFR0FURV9UT19JTlRFUk5BTF8yKGJsZW5kRnVuYywgdW5zaWduZWQgbG9uZywgdW5z
aWduZWQgbG9uZykKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzQoYmxlbmRGdW5jU2VwYXJhdGUsIHVu
c2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcp
CisKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzMoYnVmZmVyRGF0YSwgdW5zaWduZWQgbG9uZywgaW50
LCB1bnNpZ25lZCBsb25nKQorREVMRUdBVEVfVE9fSU5URVJOQUxfMyhidWZmZXJEYXRhLCB1bnNp
Z25lZCBsb25nLCBXZWJHTEFycmF5KiwgdW5zaWduZWQgbG9uZykKK0RFTEVHQVRFX1RPX0lOVEVS
TkFMXzMoYnVmZmVyU3ViRGF0YSwgdW5zaWduZWQgbG9uZywgbG9uZywgV2ViR0xBcnJheSopCisK
K0RFTEVHQVRFX1RPX0lOVEVSTkFMXzFSKGNoZWNrRnJhbWVidWZmZXJTdGF0dXMsIHVuc2lnbmVk
IGxvbmcsIHVuc2lnbmVkIGxvbmcpCitERUxFR0FURV9UT19JTlRFUk5BTF8xKGNsZWFyLCB1bnNp
Z25lZCBsb25nKQorREVMRUdBVEVfVE9fSU5URVJOQUxfNChjbGVhckNvbG9yLCBkb3VibGUsIGRv
dWJsZSwgZG91YmxlLCBkb3VibGUpCitERUxFR0FURV9UT19JTlRFUk5BTF8xKGNsZWFyRGVwdGgs
IGRvdWJsZSkKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzEoY2xlYXJTdGVuY2lsLCBsb25nKQorREVM
RUdBVEVfVE9fSU5URVJOQUxfNChjb2xvck1hc2ssIGJvb2wsIGJvb2wsIGJvb2wsIGJvb2wpCitE
RUxFR0FURV9UT19JTlRFUk5BTF8xKGNvbXBpbGVTaGFkZXIsIFdlYkdMU2hhZGVyKikKKworREVM
RUdBVEVfVE9fSU5URVJOQUxfOChjb3B5VGV4SW1hZ2UyRCwgdW5zaWduZWQgbG9uZywgbG9uZywg
dW5zaWduZWQgbG9uZywgbG9uZywgbG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywg
bG9uZykKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzgoY29weVRleFN1YkltYWdlMkQsIHVuc2lnbmVk
IGxvbmcsIGxvbmcsIGxvbmcsIGxvbmcsIGxvbmcsIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2ln
bmVkIGxvbmcpCitERUxFR0FURV9UT19JTlRFUk5BTF8xKGN1bGxGYWNlLCB1bnNpZ25lZCBsb25n
KQorREVMRUdBVEVfVE9fSU5URVJOQUxfMShkZXB0aEZ1bmMsIHVuc2lnbmVkIGxvbmcpCitERUxF
R0FURV9UT19JTlRFUk5BTF8xKGRlcHRoTWFzaywgYm9vbCkKK0RFTEVHQVRFX1RPX0lOVEVSTkFM
XzIoZGVwdGhSYW5nZSwgZG91YmxlLCBkb3VibGUpCitERUxFR0FURV9UT19JTlRFUk5BTF8yKGRl
dGFjaFNoYWRlciwgV2ViR0xQcm9ncmFtKiwgV2ViR0xTaGFkZXIqKQorREVMRUdBVEVfVE9fSU5U
RVJOQUxfMShkaXNhYmxlLCB1bnNpZ25lZCBsb25nKQorREVMRUdBVEVfVE9fSU5URVJOQUxfMShk
aXNhYmxlVmVydGV4QXR0cmliQXJyYXksIHVuc2lnbmVkIGxvbmcpCitERUxFR0FURV9UT19JTlRF
Uk5BTF8zKGRyYXdBcnJheXMsIHVuc2lnbmVkIGxvbmcsIGxvbmcsIGxvbmcpCitERUxFR0FURV9U
T19JTlRFUk5BTF80KGRyYXdFbGVtZW50cywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywg
dW5zaWduZWQgbG9uZywgbG9uZykKKworREVMRUdBVEVfVE9fSU5URVJOQUxfMShlbmFibGUsIHVu
c2lnbmVkIGxvbmcpCitERUxFR0FURV9UT19JTlRFUk5BTF8xKGVuYWJsZVZlcnRleEF0dHJpYkFy
cmF5LCB1bnNpZ25lZCBsb25nKQorREVMRUdBVEVfVE9fSU5URVJOQUwoZmluaXNoKQorREVMRUdB
VEVfVE9fSU5URVJOQUwoZmx1c2gpCitERUxFR0FURV9UT19JTlRFUk5BTF80KGZyYW1lYnVmZmVy
UmVuZGVyYnVmZmVyLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25n
LCBXZWJHTFJlbmRlcmJ1ZmZlciopCitERUxFR0FURV9UT19JTlRFUk5BTF81KGZyYW1lYnVmZmVy
VGV4dHVyZTJELCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCBX
ZWJHTFRleHR1cmUqLCBsb25nKQorREVMRUdBVEVfVE9fSU5URVJOQUxfMShmcm9udEZhY2UsIHVu
c2lnbmVkIGxvbmcpCitERUxFR0FURV9UT19JTlRFUk5BTF8xKGdlbmVyYXRlTWlwbWFwLCB1bnNp
Z25lZCBsb25nKQorCitERUxFR0FURV9UT19JTlRFUk5BTF8zUihnZXRBY3RpdmVBdHRyaWIsIFdl
YkdMUHJvZ3JhbSosIHVuc2lnbmVkIGxvbmcsIEFjdGl2ZUluZm8mLCBib29sKQorREVMRUdBVEVf
VE9fSU5URVJOQUxfM1IoZ2V0QWN0aXZlVW5pZm9ybSwgV2ViR0xQcm9ncmFtKiwgdW5zaWduZWQg
bG9uZywgQWN0aXZlSW5mbyYsIGJvb2wpCisKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzJSKGdldEF0
dHJpYkxvY2F0aW9uLCBXZWJHTFByb2dyYW0qLCBjb25zdCBTdHJpbmcmLCBpbnQpCisKK0RFTEVH
QVRFX1RPX0lOVEVSTkFMXzIoZ2V0Qm9vbGVhbnYsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGNo
YXIqKQorCitERUxFR0FURV9UT19JTlRFUk5BTF8zKGdldEJ1ZmZlclBhcmFtZXRlcml2LCB1bnNp
Z25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCBpbnQqKQorCitERUxFR0FURV9UT19JTlRFUk5BTF9S
KGdldENvbnRleHRBdHRyaWJ1dGVzLCBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcykKKwor
REVMRUdBVEVfVE9fSU5URVJOQUxfUihnZXRFcnJvciwgdW5zaWduZWQgbG9uZykKKworREVMRUdB
VEVfVE9fSU5URVJOQUxfMihnZXRGbG9hdHYsIHVuc2lnbmVkIGxvbmcsIGZsb2F0KikKKworREVM
RUdBVEVfVE9fSU5URVJOQUxfNChnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpdiwg
dW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgaW50KikKKworREVM
RUdBVEVfVE9fSU5URVJOQUxfMihnZXRJbnRlZ2VydiwgdW5zaWduZWQgbG9uZywgaW50KikKKwor
REVMRUdBVEVfVE9fSU5URVJOQUxfMyhnZXRQcm9ncmFtaXYsIFdlYkdMUHJvZ3JhbSosIHVuc2ln
bmVkIGxvbmcsIGludCopCisKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzFSKGdldFByb2dyYW1JbmZv
TG9nLCBXZWJHTFByb2dyYW0qLCBTdHJpbmcpCisKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzMoZ2V0
UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXYsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIGlu
dCopCisKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzMoZ2V0U2hhZGVyaXYsIFdlYkdMU2hhZGVyKiwg
dW5zaWduZWQgbG9uZywgaW50KikKKworREVMRUdBVEVfVE9fSU5URVJOQUxfMVIoZ2V0U2hhZGVy
SW5mb0xvZywgV2ViR0xTaGFkZXIqLCBTdHJpbmcpCisKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzFS
KGdldFNoYWRlclNvdXJjZSwgV2ViR0xTaGFkZXIqLCBTdHJpbmcpCitERUxFR0FURV9UT19JTlRF
Uk5BTF8xUihnZXRTdHJpbmcsIHVuc2lnbmVkIGxvbmcsIFN0cmluZykKKworREVMRUdBVEVfVE9f
SU5URVJOQUxfMyhnZXRUZXhQYXJhbWV0ZXJmdiwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9u
ZywgZmxvYXQqKQorREVMRUdBVEVfVE9fSU5URVJOQUxfMyhnZXRUZXhQYXJhbWV0ZXJpdiwgdW5z
aWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgaW50KikKKworREVMRUdBVEVfVE9fSU5URVJOQUxf
MyhnZXRVbmlmb3JtZnYsIFdlYkdMUHJvZ3JhbSosIGxvbmcsIGZsb2F0KikKK0RFTEVHQVRFX1RP
X0lOVEVSTkFMXzMoZ2V0VW5pZm9ybWl2LCBXZWJHTFByb2dyYW0qLCBsb25nLCBpbnQqKQorCitE
RUxFR0FURV9UT19JTlRFUk5BTF8yUihnZXRVbmlmb3JtTG9jYXRpb24sIFdlYkdMUHJvZ3JhbSos
IGNvbnN0IFN0cmluZyYsIGxvbmcpCisKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzMoZ2V0VmVydGV4
QXR0cmliZnYsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIGZsb2F0KikKK0RFTEVHQVRF
X1RPX0lOVEVSTkFMXzMoZ2V0VmVydGV4QXR0cmliaXYsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVk
IGxvbmcsIGludCopCisKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzJSKGdldFZlcnRleEF0dHJpYk9m
ZnNldCwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgbG9uZykKKworREVMRUdBVEVfVE9f
SU5URVJOQUxfMihoaW50LCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKQorREVMRUdBVEVf
VE9fSU5URVJOQUxfMVIoaXNCdWZmZXIsIFdlYkdMQnVmZmVyKiwgYm9vbCkKK0RFTEVHQVRFX1RP
X0lOVEVSTkFMXzFSKGlzRW5hYmxlZCwgdW5zaWduZWQgbG9uZywgYm9vbCkKK0RFTEVHQVRFX1RP
X0lOVEVSTkFMXzFSKGlzRnJhbWVidWZmZXIsIFdlYkdMRnJhbWVidWZmZXIqLCBib29sKQorREVM
RUdBVEVfVE9fSU5URVJOQUxfMVIoaXNQcm9ncmFtLCBXZWJHTFByb2dyYW0qLCBib29sKQorREVM
RUdBVEVfVE9fSU5URVJOQUxfMVIoaXNSZW5kZXJidWZmZXIsIFdlYkdMUmVuZGVyYnVmZmVyKiwg
Ym9vbCkKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzFSKGlzU2hhZGVyLCBXZWJHTFNoYWRlciosIGJv
b2wpCitERUxFR0FURV9UT19JTlRFUk5BTF8xUihpc1RleHR1cmUsIFdlYkdMVGV4dHVyZSosIGJv
b2wpCitERUxFR0FURV9UT19JTlRFUk5BTF8xKGxpbmVXaWR0aCwgZG91YmxlKQorREVMRUdBVEVf
VE9fSU5URVJOQUxfMShsaW5rUHJvZ3JhbSwgV2ViR0xQcm9ncmFtKikKK0RFTEVHQVRFX1RPX0lO
VEVSTkFMXzIocGl4ZWxTdG9yZWksIHVuc2lnbmVkIGxvbmcsIGxvbmcpCitERUxFR0FURV9UT19J
TlRFUk5BTF8yKHBvbHlnb25PZmZzZXQsIGRvdWJsZSwgZG91YmxlKQorCitERUxFR0FURV9UT19J
TlRFUk5BTF82UihyZWFkUGl4ZWxzLCBsb25nLCBsb25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25l
ZCBsb25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCBQYXNzUmVmUHRyPFdlYkdMQXJy
YXk+KQorCitERUxFR0FURV9UT19JTlRFUk5BTChyZWxlYXNlU2hhZGVyQ29tcGlsZXIpCitERUxF
R0FURV9UT19JTlRFUk5BTF80KHJlbmRlcmJ1ZmZlclN0b3JhZ2UsIHVuc2lnbmVkIGxvbmcsIHVu
c2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpCitERUxFR0FURV9UT19J
TlRFUk5BTF8yKHNhbXBsZUNvdmVyYWdlLCBkb3VibGUsIGJvb2wpCitERUxFR0FURV9UT19JTlRF
Uk5BTF80KHNjaXNzb3IsIGxvbmcsIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcp
CitERUxFR0FURV9UT19JTlRFUk5BTF8yKHNoYWRlclNvdXJjZSwgV2ViR0xTaGFkZXIqLCBjb25z
dCBTdHJpbmcmKQorREVMRUdBVEVfVE9fSU5URVJOQUxfMyhzdGVuY2lsRnVuYywgdW5zaWduZWQg
bG9uZywgbG9uZywgdW5zaWduZWQgbG9uZykKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzQoc3RlbmNp
bEZ1bmNTZXBhcmF0ZSwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgbG9uZywgdW5zaWdu
ZWQgbG9uZykKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzEoc3RlbmNpbE1hc2ssIHVuc2lnbmVkIGxv
bmcpCitERUxFR0FURV9UT19JTlRFUk5BTF8yKHN0ZW5jaWxNYXNrU2VwYXJhdGUsIHVuc2lnbmVk
IGxvbmcsIHVuc2lnbmVkIGxvbmcpCitERUxFR0FURV9UT19JTlRFUk5BTF8zKHN0ZW5jaWxPcCwg
dW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZykKK0RFTEVHQVRFX1RP
X0lOVEVSTkFMXzQoc3RlbmNpbE9wU2VwYXJhdGUsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxv
bmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpCisKK0RFTEVHQVRFX1RPX0lOVEVSTkFM
XzlSKHRleEltYWdlMkQsIHVuc2lnbmVkLCB1bnNpZ25lZCwgdW5zaWduZWQsIHVuc2lnbmVkLCB1
bnNpZ25lZCwgdW5zaWduZWQsIHVuc2lnbmVkLCB1bnNpZ25lZCwgdm9pZCosIGludCkKKwogaW50
IEdyYXBoaWNzQ29udGV4dDNEOjp0ZXhJbWFnZTJEKHVuc2lnbmVkIHRhcmdldCwgdW5zaWduZWQg
bGV2ZWwsIEltYWdlKiBpbWFnZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
b29sIGZsaXBZLCBib29sIHByZW11bHRpcGx5QWxwaGEpCiB7CkBAIC0xODgwLDI5ICsxMjMxLDE1
IEBAIGludCBHcmFwaGljc0NvbnRleHQzRDo6dGV4SW1hZ2UyRCh1bnNpZ24KICAgICB1bnNpZ25l
ZCBpbnQgZm9ybWF0LCBpbnRlcm5hbEZvcm1hdDsKICAgICBpZiAoIWV4dHJhY3RJbWFnZURhdGEo
aW1hZ2UsIGZsaXBZLCBwcmVtdWx0aXBseUFscGhhLCBpbWFnZURhdGEsICZmb3JtYXQsICZpbnRl
cm5hbEZvcm1hdCkpCiAgICAgICAgIHJldHVybiAtMTsKLSAgICBnbFRleEltYWdlMkQodGFyZ2V0
LCBsZXZlbCwgaW50ZXJuYWxGb3JtYXQsCi0gICAgICAgICAgICAgICAgIGltYWdlLT53aWR0aCgp
LCBpbWFnZS0+aGVpZ2h0KCksIDAsCi0gICAgICAgICAgICAgICAgIGZvcm1hdCwgR0xfVU5TSUdO
RURfQllURSwgaW1hZ2VEYXRhLmRhdGEoKSk7Ci0gICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIG1f
aW50ZXJuYWwtPnRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxGb3JtYXQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2UtPndpZHRoKCksIGltYWdlLT5oZWln
aHQoKSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQsIFVOU0lH
TkVEX0JZVEUsIGltYWdlRGF0YS5kYXRhKCkpOwogfQogCi1HTF9TQU1FX01FVEhPRF8zKFRleFBh
cmFtZXRlcmYsIHRleFBhcmFtZXRlcmYsIHVuc2lnbmVkLCB1bnNpZ25lZCwgZmxvYXQpOworREVM
RUdBVEVfVE9fSU5URVJOQUxfMyh0ZXhQYXJhbWV0ZXJmLCB1bnNpZ25lZCwgdW5zaWduZWQsIGZs
b2F0KQorREVMRUdBVEVfVE9fSU5URVJOQUxfMyh0ZXhQYXJhbWV0ZXJpLCB1bnNpZ25lZCwgdW5z
aWduZWQsIGludCkKIAotR0xfU0FNRV9NRVRIT0RfMyhUZXhQYXJhbWV0ZXJpLCB0ZXhQYXJhbWV0
ZXJpLCB1bnNpZ25lZCwgdW5zaWduZWQsIGludCk7Ci0KLWludCBHcmFwaGljc0NvbnRleHQzRDo6
dGV4U3ViSW1hZ2UyRCh1bnNpZ25lZCB0YXJnZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdW5zaWduZWQgbGV2ZWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdW5zaWduZWQgeG9mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB1bnNpZ25lZCB5b2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIHdpZHRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBmb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dW5zaWduZWQgdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lk
KiBwaXhlbHMpCi17Ci0gICAgZ2xUZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQs
IHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsKLSAgICByZXR1
cm4gMDsKLX0KK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzlSKHRleFN1YkltYWdlMkQsIHVuc2lnbmVk
LCB1bnNpZ25lZCwgdW5zaWduZWQsIHVuc2lnbmVkLCB1bnNpZ25lZCwgdW5zaWduZWQsIHVuc2ln
bmVkLCB1bnNpZ25lZCwgdm9pZCosIGludCkKIAogaW50IEdyYXBoaWNzQ29udGV4dDNEOjp0ZXhT
dWJJbWFnZTJEKHVuc2lnbmVkIHRhcmdldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB1bnNpZ25lZCBsZXZlbCwKQEAgLTE5MTYsMTQyICsxMjUzLDY1IEBAIGludCBHcmFw
aGljc0NvbnRleHQzRDo6dGV4U3ViSW1hZ2UyRCh1bnMKICAgICB1bnNpZ25lZCBpbnQgZm9ybWF0
LCBpbnRlcm5hbEZvcm1hdDsKICAgICBpZiAoIWV4dHJhY3RJbWFnZURhdGEoaW1hZ2UsIGZsaXBZ
LCBwcmVtdWx0aXBseUFscGhhLCBpbWFnZURhdGEsICZmb3JtYXQsICZpbnRlcm5hbEZvcm1hdCkp
CiAgICAgICAgIHJldHVybiAtMTsKLSAgICBnbFRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwg
eG9mZnNldCwgeW9mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgaW1hZ2UtPndpZHRoKCksIGlt
YWdlLT5oZWlnaHQoKSwKLSAgICAgICAgICAgICAgICAgICAgZm9ybWF0LCBHTF9VTlNJR05FRF9C
WVRFLCBpbWFnZURhdGEuZGF0YSgpKTsKLSAgICByZXR1cm4gMDsKLX0KKyAgICByZXR1cm4gbV9p
bnRlcm5hbC0+dGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlLT53aWR0aCgpLCBpbWFn
ZS0+aGVpZ2h0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0
LCBVTlNJR05FRF9CWVRFLCBpbWFnZURhdGEuZGF0YSgpKTsKK30KKworREVMRUdBVEVfVE9fSU5U
RVJOQUxfMih1bmlmb3JtMWYsIGxvbmcsIGZsb2F0KQorREVMRUdBVEVfVE9fSU5URVJOQUxfMyh1
bmlmb3JtMWZ2LCBsb25nLCBmbG9hdCosIGludCkKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzIodW5p
Zm9ybTFpLCBsb25nLCBpbnQpCitERUxFR0FURV9UT19JTlRFUk5BTF8zKHVuaWZvcm0xaXYsIGxv
bmcsIGludCosIGludCkKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzModW5pZm9ybTJmLCBsb25nLCBm
bG9hdCwgZmxvYXQpCitERUxFR0FURV9UT19JTlRFUk5BTF8zKHVuaWZvcm0yZnYsIGxvbmcsIGZs
b2F0KiwgaW50KQorREVMRUdBVEVfVE9fSU5URVJOQUxfMyh1bmlmb3JtMmksIGxvbmcsIGludCwg
aW50KQorREVMRUdBVEVfVE9fSU5URVJOQUxfMyh1bmlmb3JtMml2LCBsb25nLCBpbnQqLCBpbnQp
CitERUxFR0FURV9UT19JTlRFUk5BTF80KHVuaWZvcm0zZiwgbG9uZywgZmxvYXQsIGZsb2F0LCBm
bG9hdCkKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzModW5pZm9ybTNmdiwgbG9uZywgZmxvYXQqLCBp
bnQpCitERUxFR0FURV9UT19JTlRFUk5BTF80KHVuaWZvcm0zaSwgbG9uZywgaW50LCBpbnQsIGlu
dCkKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzModW5pZm9ybTNpdiwgbG9uZywgaW50KiwgaW50KQor
REVMRUdBVEVfVE9fSU5URVJOQUxfNSh1bmlmb3JtNGYsIGxvbmcsIGZsb2F0LCBmbG9hdCwgZmxv
YXQsIGZsb2F0KQorREVMRUdBVEVfVE9fSU5URVJOQUxfMyh1bmlmb3JtNGZ2LCBsb25nLCBmbG9h
dCosIGludCkKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzUodW5pZm9ybTRpLCBsb25nLCBpbnQsIGlu
dCwgaW50LCBpbnQpCitERUxFR0FURV9UT19JTlRFUk5BTF8zKHVuaWZvcm00aXYsIGxvbmcsIGlu
dCosIGludCkKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzQodW5pZm9ybU1hdHJpeDJmdiwgbG9uZywg
Ym9vbCwgZmxvYXQqLCBpbnQpCitERUxFR0FURV9UT19JTlRFUk5BTF80KHVuaWZvcm1NYXRyaXgz
ZnYsIGxvbmcsIGJvb2wsIGZsb2F0KiwgaW50KQorREVMRUdBVEVfVE9fSU5URVJOQUxfNCh1bmlm
b3JtTWF0cml4NGZ2LCBsb25nLCBib29sLCBmbG9hdCosIGludCkKKworREVMRUdBVEVfVE9fSU5U
RVJOQUxfMSh1c2VQcm9ncmFtLCBXZWJHTFByb2dyYW0qKQorREVMRUdBVEVfVE9fSU5URVJOQUxf
MSh2YWxpZGF0ZVByb2dyYW0sIFdlYkdMUHJvZ3JhbSopCisKK0RFTEVHQVRFX1RPX0lOVEVSTkFM
XzIodmVydGV4QXR0cmliMWYsIHVuc2lnbmVkIGxvbmcsIGZsb2F0KQorREVMRUdBVEVfVE9fSU5U
RVJOQUxfMih2ZXJ0ZXhBdHRyaWIxZnYsIHVuc2lnbmVkIGxvbmcsIGZsb2F0KikKK0RFTEVHQVRF
X1RPX0lOVEVSTkFMXzModmVydGV4QXR0cmliMmYsIHVuc2lnbmVkIGxvbmcsIGZsb2F0LCBmbG9h
dCkKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzIodmVydGV4QXR0cmliMmZ2LCB1bnNpZ25lZCBsb25n
LCBmbG9hdCopCitERUxFR0FURV9UT19JTlRFUk5BTF80KHZlcnRleEF0dHJpYjNmLCB1bnNpZ25l
ZCBsb25nLCBmbG9hdCwgZmxvYXQsIGZsb2F0KQorREVMRUdBVEVfVE9fSU5URVJOQUxfMih2ZXJ0
ZXhBdHRyaWIzZnYsIHVuc2lnbmVkIGxvbmcsIGZsb2F0KikKK0RFTEVHQVRFX1RPX0lOVEVSTkFM
XzUodmVydGV4QXR0cmliNGYsIHVuc2lnbmVkIGxvbmcsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZs
b2F0KQorREVMRUdBVEVfVE9fSU5URVJOQUxfMih2ZXJ0ZXhBdHRyaWI0ZnYsIHVuc2lnbmVkIGxv
bmcsIGZsb2F0KikKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzYodmVydGV4QXR0cmliUG9pbnRlciwg
dW5zaWduZWQgbG9uZywgaW50LCBpbnQsIGJvb2wsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxv
bmcpCisKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzQodmlld3BvcnQsIGxvbmcsIGxvbmcsIHVuc2ln
bmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpCisKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzEoYmVnaW5Q
YWludCwgV2ViR0xSZW5kZXJpbmdDb250ZXh0KikKK0RFTEVHQVRFX1RPX0lOVEVSTkFMKGVuZFBh
aW50KQorCitERUxFR0FURV9UT19JTlRFUk5BTF9SKGNyZWF0ZUJ1ZmZlciwgdW5zaWduZWQpCitE
RUxFR0FURV9UT19JTlRFUk5BTF9SKGNyZWF0ZUZyYW1lYnVmZmVyLCB1bnNpZ25lZCkKK0RFTEVH
QVRFX1RPX0lOVEVSTkFMX1IoY3JlYXRlUHJvZ3JhbSwgdW5zaWduZWQpCitERUxFR0FURV9UT19J
TlRFUk5BTF9SKGNyZWF0ZVJlbmRlcmJ1ZmZlciwgdW5zaWduZWQpCitERUxFR0FURV9UT19JTlRF
Uk5BTF8xUihjcmVhdGVTaGFkZXIsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkKQorREVMRUdBVEVf
VE9fSU5URVJOQUxfUihjcmVhdGVUZXh0dXJlLCB1bnNpZ25lZCkKKworREVMRUdBVEVfVE9fSU5U
RVJOQUxfMShkZWxldGVCdWZmZXIsIHVuc2lnbmVkKQorREVMRUdBVEVfVE9fSU5URVJOQUxfMShk
ZWxldGVGcmFtZWJ1ZmZlciwgdW5zaWduZWQpCitERUxFR0FURV9UT19JTlRFUk5BTF8xKGRlbGV0
ZVByb2dyYW0sIHVuc2lnbmVkKQorREVMRUdBVEVfVE9fSU5URVJOQUxfMShkZWxldGVSZW5kZXJi
dWZmZXIsIHVuc2lnbmVkKQorREVMRUdBVEVfVE9fSU5URVJOQUxfMShkZWxldGVTaGFkZXIsIHVu
c2lnbmVkKQorREVMRUdBVEVfVE9fSU5URVJOQUxfMShkZWxldGVUZXh0dXJlLCB1bnNpZ25lZCkK
IAotR0xfU0FNRV9NRVRIT0RfMihVbmlmb3JtMWYsIHVuaWZvcm0xZiwgbG9uZywgZmxvYXQpCitE
RUxFR0FURV9UT19JTlRFUk5BTF8xKHN5bnRoZXNpemVHTEVycm9yLCB1bnNpZ25lZCBsb25nKQog
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMWZ2KGxvbmcgbG9jYXRpb24sIGZsb2F0
KiB2LCBpbnQgc2l6ZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbFVuaWZv
cm0xZnYobG9jYXRpb24sIHNpemUsIHYpOwotfQotCi1HTF9TQU1FX01FVEhPRF8yKFVuaWZvcm0x
aSwgdW5pZm9ybTFpLCBsb25nLCBpbnQpCi0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZv
cm0xaXYobG9uZyBsb2NhdGlvbiwgaW50KiB2LCBpbnQgc2l6ZSkKLXsKLSAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKLSAgICBnbFVuaWZvcm0xaXYobG9jYXRpb24sIHNpemUsIHYpOwotfQotCi1H
TF9TQU1FX01FVEhPRF8zKFVuaWZvcm0yZiwgdW5pZm9ybTJmLCBsb25nLCBmbG9hdCwgZmxvYXQp
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0yZnYobG9uZyBsb2NhdGlvbiwgZmxv
YXQqIHYsIGludCBzaXplKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsVW5p
Zm9ybTJmdihsb2NhdGlvbiwgc2l6ZSwgdik7Ci19Ci0KLUdMX1NBTUVfTUVUSE9EXzMoVW5pZm9y
bTJpLCB1bmlmb3JtMmksIGxvbmcsIGludCwgaW50KQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNE
Ojp1bmlmb3JtMml2KGxvbmcgbG9jYXRpb24sIGludCogdiwgaW50IHNpemUpCi17Ci0gICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2xVbmlmb3JtMml2KGxvY2F0aW9uLCBzaXplLCB2KTsK
LX0KLQotR0xfU0FNRV9NRVRIT0RfNChVbmlmb3JtM2YsIHVuaWZvcm0zZiwgbG9uZywgZmxvYXQs
IGZsb2F0LCBmbG9hdCkKLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTNmdihsb25n
IGxvY2F0aW9uLCBmbG9hdCogdiwgaW50IHNpemUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7Ci0gICAgZ2xVbmlmb3JtM2Z2KGxvY2F0aW9uLCBzaXplLCB2KTsKLX0KLQotR0xfU0FNRV9N
RVRIT0RfNChVbmlmb3JtM2ksIHVuaWZvcm0zaSwgbG9uZywgaW50LCBpbnQsIGludCkKLQotdm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTNpdihsb25nIGxvY2F0aW9uLCBpbnQqIHYsIGlu
dCBzaXplKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsVW5pZm9ybTNpdihs
b2NhdGlvbiwgc2l6ZSwgdik7Ci19Ci0KLUdMX1NBTUVfTUVUSE9EXzUoVW5pZm9ybTRmLCB1bmlm
b3JtNGYsIGxvbmcsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0KQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjp1bmlmb3JtNGZ2KGxvbmcgbG9jYXRpb24sIGZsb2F0KiB2LCBpbnQgc2l6ZSkK
LXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbFVuaWZvcm00ZnYobG9jYXRpb24s
IHNpemUsIHYpOwotfQotCi1HTF9TQU1FX01FVEhPRF81KFVuaWZvcm00aSwgdW5pZm9ybTRpLCBs
b25nLCBpbnQsIGludCwgaW50LCBpbnQpCi0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZv
cm00aXYobG9uZyBsb2NhdGlvbiwgaW50KiB2LCBpbnQgc2l6ZSkKLXsKLSAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKLSAgICBnbFVuaWZvcm00aXYobG9jYXRpb24sIHNpemUsIHYpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtTWF0cml4MmZ2KGxvbmcgbG9jYXRpb24sIGJv
b2wgdHJhbnNwb3NlLCBmbG9hdCogdmFsdWUsIGludCBzaXplKQotewotICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOwotICAgIGdsVW5pZm9ybU1hdHJpeDJmdihsb2NhdGlvbiwgc2l6ZSwgdHJhbnNw
b3NlLCB2YWx1ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm1NYXRyaXgz
ZnYobG9uZyBsb2NhdGlvbiwgYm9vbCB0cmFuc3Bvc2UsIGZsb2F0KiB2YWx1ZSwgaW50IHNpemUp
Ci17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2xVbmlmb3JtTWF0cml4M2Z2KGxv
Y2F0aW9uLCBzaXplLCB0cmFuc3Bvc2UsIHZhbHVlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6dW5pZm9ybU1hdHJpeDRmdihsb25nIGxvY2F0aW9uLCBib29sIHRyYW5zcG9zZSwgZmxv
YXQqIHZhbHVlLCBpbnQgc2l6ZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBn
bFVuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24sIHNpemUsIHRyYW5zcG9zZSwgdmFsdWUpOwotfQot
Ci1HTF9TQU1FX01FVEhPRF8xX1goVXNlUHJvZ3JhbSwgdXNlUHJvZ3JhbSwgV2ViR0xQcm9ncmFt
KikKLQotR0xfU0FNRV9NRVRIT0RfMV9YKFZhbGlkYXRlUHJvZ3JhbSwgdmFsaWRhdGVQcm9ncmFt
LCBXZWJHTFByb2dyYW0qKQotCi1HTF9TQU1FX01FVEhPRF8yKFZlcnRleEF0dHJpYjFmLCB2ZXJ0
ZXhBdHRyaWIxZiwgdW5zaWduZWQgbG9uZywgZmxvYXQpCi0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OnZlcnRleEF0dHJpYjFmdih1bnNpZ25lZCBsb25nIGluZHgsIGZsb2F0KiB2YWx1ZXMpCi17
Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2xWZXJ0ZXhBdHRyaWIxZnYoaW5keCwg
dmFsdWVzKTsKLX0KLQotR0xfU0FNRV9NRVRIT0RfMyhWZXJ0ZXhBdHRyaWIyZiwgdmVydGV4QXR0
cmliMmYsIHVuc2lnbmVkIGxvbmcsIGZsb2F0LCBmbG9hdCkKLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6dmVydGV4QXR0cmliMmZ2KHVuc2lnbmVkIGxvbmcgaW5keCwgZmxvYXQqIHZhbHVlcykK
LXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbFZlcnRleEF0dHJpYjJmdihpbmR4
LCB2YWx1ZXMpOwotfQotCi1HTF9TQU1FX01FVEhPRF80KFZlcnRleEF0dHJpYjNmLCB2ZXJ0ZXhB
dHRyaWIzZiwgdW5zaWduZWQgbG9uZywgZmxvYXQsIGZsb2F0LCBmbG9hdCkKLQotdm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmliM2Z2KHVuc2lnbmVkIGxvbmcgaW5keCwgZmxvYXQq
IHZhbHVlcykKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbFZlcnRleEF0dHJp
YjNmdihpbmR4LCB2YWx1ZXMpOwotfQotCi1HTF9TQU1FX01FVEhPRF81KFZlcnRleEF0dHJpYjRm
LCB2ZXJ0ZXhBdHRyaWI0ZiwgdW5zaWduZWQgbG9uZywgZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxv
YXQpCi0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjRmdih1bnNpZ25lZCBs
b25nIGluZHgsIGZsb2F0KiB2YWx1ZXMpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0g
ICAgZ2xWZXJ0ZXhBdHRyaWI0ZnYoaW5keCwgdmFsdWVzKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6dmVydGV4QXR0cmliUG9pbnRlcih1bnNpZ25lZCBsb25nIGluZHgsIGludCBzaXpl
LCBpbnQgdHlwZSwgYm9vbCBub3JtYWxpemVkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHN0cmlkZSwgdW5zaWduZWQgbG9uZyBvZmZz
ZXQpCi17Ci0gICAgbV9pbnRlcm5hbC0+dmVydGV4QXR0cmliUG9pbnRlcihpbmR4LCBzaXplLCB0
eXBlLCBub3JtYWxpemVkLCBzdHJpZGUsIG9mZnNldCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OnZpZXdwb3J0KGxvbmcgeCwgbG9uZyB5LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNp
Z25lZCBsb25nIGhlaWdodCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBtX2lu
dGVybmFsLT52aWV3cG9ydEltcGwoeCwgeSwgd2lkdGgsIGhlaWdodCk7Ci19Ci0KLX0KK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRSgzRF9DQU5WQVMpCkluZGV4OiBX
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYkdyYXBoaWNzQ29udGV4dDNELmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYkdyYXBoaWNzQ29udGV4dDNELmNwcAkocmV2aXNpb24g
MCkKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViR3JhcGhpY3NDb250ZXh0M0QuY3BwCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAq
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRo
ZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldl
YkdyYXBoaWNzQ29udGV4dDNELmgiCisKKyNpZiBFTkFCTEUoM0RfQ0FOVkFTKQorCisjaW5jbHVk
ZSAiV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbC5oIgorCituYW1lc3BhY2UgV2ViS2l0
IHsKKworV2ViR3JhcGhpY3NDb250ZXh0M0QqIFdlYkdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVE
ZWZhdWx0KCkKK3sKKyNpZiBFTkFCTEUoM0RfQ0FOVkFTKQorICAgIHJldHVybiBuZXcgV2ViR3Jh
cGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbCgpOworI2Vsc2UKKyAgICByZXR1cm4gMDsKKyNlbmRp
ZgorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRSgzRF9DQU5W
QVMpCkluZGV4OiBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVs
dEltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViR3JhcGhpY3ND
b250ZXh0M0REZWZhdWx0SW1wbC5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJLaXQvY2hyb21pdW0v
c3JjL1dlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGwuY3BwCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDExOTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAq
IG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAq
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisg
KiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoM0RfQ0FOVkFT
KQorCisjaW5jbHVkZSAiV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbC5oIgorCisjaW5j
bHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKworI2lmIE9TKExJTlVYKQorI2luY2x1ZGUgPGRsZmNu
Lmg+CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYktpdCB7CisKKy8vIFVuY29tbWVudCB0aGlzIHRv
IHJlbmRlciB0byBhIHNlcGFyYXRlIHdpbmRvdyBmb3IgZGVidWdnaW5nCisvLyAjZGVmaW5lIFJF
TkRFUl9UT19ERUJVR0dJTkdfV0lORE9XCisKKyNpZiBPUyhEQVJXSU4pCisjZGVmaW5lIFVTRV9U
RVhUVVJFX1JFQ1RBTkdMRV9GT1JfRlJBTUVCVUZGRVIKKyNlbmRpZgorCitib29sIFdlYkdyYXBo
aWNzQ29udGV4dDNERGVmYXVsdEltcGw6OnNfaW5pdGlhbGl6ZWRHTEVXID0gZmFsc2U7CisKKyNp
ZiBPUyhMSU5VWCkKK1dlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OkdMQ29ubmVjdGlv
biogV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6c19nbCA9IDA7CisKK1dlYkdyYXBo
aWNzQ29udGV4dDNERGVmYXVsdEltcGw6OkdMQ29ubmVjdGlvbiogV2ViR3JhcGhpY3NDb250ZXh0
M0REZWZhdWx0SW1wbDo6R0xDb25uZWN0aW9uOjpjcmVhdGUoKQoreworICAgIERpc3BsYXkqIGRw
eSA9IFhPcGVuRGlzcGxheSgwKTsKKyAgICBpZiAoIWRweSkgeworICAgICAgICBwcmludGYoIkdy
YXBoaWNzQ29udGV4dDNEOiBlcnJvciBvcGVuaW5nIFggZGlzcGxheVxuIik7CisgICAgICAgIHJl
dHVybiAwOworICAgIH0KKworICAgIC8vIFdlIHVzZSBSVExEX0dMT0JBTCBzZW1hbnRpY3Mgc28g
dGhhdCBHTEVXIGluaXRpYWxpemF0aW9uIHdvcmtzOworICAgIC8vIEdMRVcgZXhwZWN0cyB0byBi
ZSBhYmxlIHRvIG9wZW4gdGhlIGN1cnJlbnQgcHJvY2VzcydzIGhhbmRsZQorICAgIC8vIGFuZCBk
byBkbHN5bSdzIG9mIEdMIGVudHJ5IHBvaW50cyBmcm9tIHRoZXJlLgorICAgIHZvaWQqIGxpYkdM
ID0gZGxvcGVuKCJsaWJHTC5zby4xIiwgUlRMRF9MQVpZIHwgUlRMRF9HTE9CQUwpOworICAgIGlm
ICghbGliR0wpIHsKKyAgICAgICAgWENsb3NlRGlzcGxheShkcHkpOworICAgICAgICBwcmludGYo
IkdyYXBoaWNzQ29udGV4dDNEOiBlcnJvciBvcGVuaW5nIGxpYkdMLnNvLjE6ICVzXG4iLCBkbGVy
cm9yKCkpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBQRk5HTFhDSE9PU0VGQkNP
TkZJR1BST0MgY2hvb3NlRkJDb25maWcgPSAoUEZOR0xYQ0hPT1NFRkJDT05GSUdQUk9DKSBkbHN5
bShsaWJHTCwgImdsWENob29zZUZCQ29uZmlnIik7CisgICAgUEZOR0xYQ1JFQVRFTkVXQ09OVEVY
VFBST0MgY3JlYXRlTmV3Q29udGV4dCA9IChQRk5HTFhDUkVBVEVORVdDT05URVhUUFJPQykgZGxz
eW0obGliR0wsICJnbFhDcmVhdGVOZXdDb250ZXh0Iik7CisgICAgUEZOR0xYQ1JFQVRFUEJVRkZF
UlBST0MgY3JlYXRlUGJ1ZmZlciA9IChQRk5HTFhDUkVBVEVQQlVGRkVSUFJPQykgZGxzeW0obGli
R0wsICJnbFhDcmVhdGVQYnVmZmVyIik7CisgICAgUEZOR0xYREVTVFJPWVBCVUZGRVJQUk9DIGRl
c3Ryb3lQYnVmZmVyID0gKFBGTkdMWERFU1RST1lQQlVGRkVSUFJPQykgZGxzeW0obGliR0wsICJn
bFhEZXN0cm95UGJ1ZmZlciIpOworICAgIFBGTkdMWE1BS0VDVVJSRU5UUFJPQyBtYWtlQ3VycmVu
dCA9IChQRk5HTFhNQUtFQ1VSUkVOVFBST0MpIGRsc3ltKGxpYkdMLCAiZ2xYTWFrZUN1cnJlbnQi
KTsKKyAgICBQRk5HTFhERVNUUk9ZQ09OVEVYVFBST0MgZGVzdHJveUNvbnRleHQgPSAoUEZOR0xY
REVTVFJPWUNPTlRFWFRQUk9DKSBkbHN5bShsaWJHTCwgImdsWERlc3Ryb3lDb250ZXh0Iik7Cisg
ICAgUEZOR0xYR0VUQ1VSUkVOVENPTlRFWFRQUk9DIGdldEN1cnJlbnRDb250ZXh0ID0gKFBGTkdM
WEdFVENVUlJFTlRDT05URVhUUFJPQykgZGxzeW0obGliR0wsICJnbFhHZXRDdXJyZW50Q29udGV4
dCIpOworICAgIGlmICghY2hvb3NlRkJDb25maWcgfHwgIWNyZWF0ZU5ld0NvbnRleHQgfHwgIWNy
ZWF0ZVBidWZmZXIKKyAgICAgICAgfHwgIWRlc3Ryb3lQYnVmZmVyIHx8ICFtYWtlQ3VycmVudCB8
fCAhZGVzdHJveUNvbnRleHQKKyAgICAgICAgfHwgIWdldEN1cnJlbnRDb250ZXh0KSB7CisgICAg
ICAgIFhDbG9zZURpc3BsYXkoZHB5KTsKKyAgICAgICAgZGxjbG9zZShsaWJHTCk7CisgICAgICAg
IHByaW50ZigiR3JhcGhpY3NDb250ZXh0M0Q6IGVycm9yIGxvb2tpbmcgdXAgYm9vdHN0cmFwcGlu
ZyBlbnRyeSBwb2ludHNcbiIpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgcmV0dXJu
IG5ldyBHTENvbm5lY3Rpb24oZHB5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYkdM
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNob29zZUZCQ29uZmlnLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNyZWF0ZU5ld0NvbnRleHQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY3JlYXRlUGJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0
cm95UGJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtlQ3VycmVudCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0cm95Q29udGV4dCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBnZXRDdXJyZW50Q29udGV4dCk7Cit9CisKK1dlYkdyYXBoaWNzQ29udGV4
dDNERGVmYXVsdEltcGw6OkdMQ29ubmVjdGlvbjo6fkdMQ29ubmVjdGlvbigpCit7CisgICAgWENs
b3NlRGlzcGxheShtX2Rpc3BsYXkpOworICAgIGRsY2xvc2UobV9saWJHTCk7Cit9CisKKyNlbmRp
ZiAvLyBPUyhMSU5VWCkKKworV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6VmVydGV4
QXR0cmliUG9pbnRlclN0YXRlOjpWZXJ0ZXhBdHRyaWJQb2ludGVyU3RhdGUoKQorICAgIDogZW5h
YmxlZChmYWxzZSkKKyAgICAsIGJ1ZmZlcigwKQorICAgICwgaW5keCgwKQorICAgICwgc2l6ZSgw
KQorICAgICwgdHlwZSgwKQorICAgICwgbm9ybWFsaXplZChmYWxzZSkKKyAgICAsIHN0cmlkZSgw
KQorICAgICwgb2Zmc2V0KDApCit7Cit9CisKK1dlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdElt
cGw6OldlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGwoKQorICAgIDogbV9pbml0aWFsaXpl
ZChmYWxzZSkKKyAgICAsIG1fdGV4dHVyZSgwKQorICAgICwgbV9mYm8oMCkKKyAgICAsIG1fZGVw
dGhCdWZmZXIoMCkKKyAgICAsIG1fYm91bmRGQk8oMCkKKyNpZmRlZiBGTElQX0ZSQU1FQlVGRkVS
X1ZFUlRJQ0FMTFkKKyAgICAsIG1fc2NhbmxpbmUoMCkKKyNlbmRpZgorICAgICwgbV9ib3VuZEFy
cmF5QnVmZmVyKDApCisjaWYgUExBVEZPUk0oU0tJQSkKKyAgICAsIG1fcmVzaXppbmdCaXRtYXAo
MCkKKyNlbmRpZgorI2lmIE9TKFdJTkRPV1MpCisgICAgLCBtX2NhbnZhc1dpbmRvdygwKQorICAg
ICwgbV9jYW52YXNEQygwKQorICAgICwgbV9jb250ZXh0T2JqKDApCisjZWxpZiBQTEFURk9STShD
RykKKyAgICAsIG1fcGJ1ZmZlcigwKQorICAgICwgbV9jb250ZXh0T2JqKDApCisgICAgLCBtX3Jl
bmRlck91dHB1dCgwKQorI2VsaWYgT1MoTElOVVgpCisgICAgLCBtX2NvbnRleHRPYmooMCkKKyAg
ICAsIG1fcGJ1ZmZlcigwKQorI2Vsc2UKKyNlcnJvciBNdXN0IHBvcnQgdG8geW91ciBwbGF0Zm9y
bQorI2VuZGlmCit7Cit9CisKK1dlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6On5XZWJH
cmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsKCkKK3sKKyAgICBpZiAobV9pbml0aWFsaXplZCkg
eworICAgICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyNpZm5kZWYgUkVOREVSX1RPX0RFQlVH
R0lOR19XSU5ET1cKKyAgICAgICAgZ2xEZWxldGVSZW5kZXJidWZmZXJzRVhUKDEsICZtX2RlcHRo
QnVmZmVyKTsKKyAgICAgICAgZ2xEZWxldGVUZXh0dXJlcygxLCAmbV90ZXh0dXJlKTsKKyNpZmRl
ZiBGTElQX0ZSQU1FQlVGRkVSX1ZFUlRJQ0FMTFkKKyAgICAgICAgaWYgKG1fc2NhbmxpbmUpCisg
ICAgICAgICAgICBkZWxldGVbXSBtX3NjYW5saW5lOworI2VuZGlmCisgICAgICAgIGdsRGVsZXRl
RnJhbWVidWZmZXJzRVhUKDEsICZtX2Zibyk7CisjZW5kaWYgLy8gIVJFTkRFUl9UT19ERUJVR0dJ
TkdfV0lORE9XCisjaWYgUExBVEZPUk0oU0tJQSkKKyAgICAgICAgaWYgKG1fcmVzaXppbmdCaXRt
YXApCisgICAgICAgICAgICBkZWxldGUgbV9yZXNpemluZ0JpdG1hcDsKKyNlbmRpZgorI2lmIE9T
KFdJTkRPV1MpCisgICAgICAgIHdnbE1ha2VDdXJyZW50KDAsIDApOworICAgICAgICB3Z2xEZWxl
dGVDb250ZXh0KG1fY29udGV4dE9iaik7CisgICAgICAgIFJlbGVhc2VEQyhtX2NhbnZhc1dpbmRv
dywgbV9jYW52YXNEQyk7CisgICAgICAgIERlc3Ryb3lXaW5kb3cobV9jYW52YXNXaW5kb3cpOwor
I2VsaWYgUExBVEZPUk0oQ0cpCisgICAgICAgIENHTFNldEN1cnJlbnRDb250ZXh0KDApOworICAg
ICAgICBDR0xEZXN0cm95Q29udGV4dChtX2NvbnRleHRPYmopOworICAgICAgICBDR0xEZXN0cm95
UEJ1ZmZlcihtX3BidWZmZXIpOworICAgICAgICBpZiAobV9yZW5kZXJPdXRwdXQpCisgICAgICAg
ICAgICBkZWxldGVbXSBtX3JlbmRlck91dHB1dDsKKyNlbGlmIE9TKExJTlVYKQorICAgICAgICBz
X2dsLT5tYWtlQ3VycmVudCgwLCAwKTsKKyAgICAgICAgc19nbC0+ZGVzdHJveUNvbnRleHQobV9j
b250ZXh0T2JqKTsKKyAgICAgICAgc19nbC0+ZGVzdHJveVBidWZmZXIobV9wYnVmZmVyKTsKKyNl
bHNlCisjZXJyb3IgTXVzdCBwb3J0IHRvIHlvdXIgcGxhdGZvcm0KKyNlbmRpZgorICAgICAgICBt
X2NvbnRleHRPYmogPSAwOworICAgIH0KK30KKworYm9vbCBXZWJHcmFwaGljc0NvbnRleHQzRERl
ZmF1bHRJbXBsOjppbml0aWFsaXplKFdlYkdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0
dHJpYnV0ZXMpCit7CisgICAgLy8gRklYTUU6IHdlIG5lZWQgdG8gdGFrZSBpbnRvIGFjY291bnQg
dGhlIHVzZXIncyByZXF1ZXN0ZWQKKyAgICAvLyBjb250ZXh0IGNyZWF0aW9uIGF0dHJpYnV0ZXMs
IGluIHBhcnRpY3VsYXIgc3RlbmNpbCBhbmQKKyAgICAvLyBhbnRpYWxpYXMsIGFuZCBkZXRlcm1p
bmUgd2hpY2ggY291bGQgYW5kIGNvdWxkIG5vdCBiZSBob25vcmVkCisgICAgLy8gYmFzZWQgb24g
dGhlIGNhcGFiaWxpdGllcyBvZiB0aGUgT3BlbkdMIGltcGxlbWVudGF0aW9uLgorICAgIG1fYXR0
cmlidXRlcy5hbHBoYSA9IHRydWU7CisgICAgbV9hdHRyaWJ1dGVzLmRlcHRoID0gdHJ1ZTsKKyAg
ICBtX2F0dHJpYnV0ZXMuc3RlbmNpbCA9IGZhbHNlOworICAgIG1fYXR0cmlidXRlcy5hbnRpYWxp
YXMgPSBmYWxzZTsKKyAgICBtX2F0dHJpYnV0ZXMucHJlbXVsdGlwbGllZEFscGhhID0gdHJ1ZTsK
KworI2lmIE9TKFdJTkRPV1MpCisgICAgV05EQ0xBU1Mgd2M7CisgICAgaWYgKCFHZXRDbGFzc0lu
Zm8oR2V0TW9kdWxlSGFuZGxlKDApLCBMIkNBTlZBU0dMIiwgJndjKSkgeworICAgICAgICBaZXJv
TWVtb3J5KCZ3Yywgc2l6ZW9mKFdORENMQVNTKSk7CisgICAgICAgIHdjLnN0eWxlID0gQ1NfT1dO
REM7CisgICAgICAgIHdjLmhJbnN0YW5jZSA9IEdldE1vZHVsZUhhbmRsZSgwKTsKKyAgICAgICAg
d2MubHBmblduZFByb2MgPSBEZWZXaW5kb3dQcm9jOworICAgICAgICB3Yy5scHN6Q2xhc3NOYW1l
ID0gTCJDQU5WQVNHTCI7CisKKyAgICAgICAgaWYgKCFSZWdpc3RlckNsYXNzKCZ3YykpIHsKKyAg
ICAgICAgICAgIHByaW50ZigiV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDogUmVnaXN0
ZXJDbGFzcyBmYWlsZWRcbiIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9
CisgICAgfQorCisgICAgbV9jYW52YXNXaW5kb3cgPSBDcmVhdGVXaW5kb3coTCJDQU5WQVNHTCIs
IEwiQ0FOVkFTR0wiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdTX0NBUFRJ
T04sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1dfVVNFREVGQVVMVCwgQ1df
VVNFREVGQVVMVCwgQ1dfVVNFREVGQVVMVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBDV19VU0VERUZBVUxULCAwLCAwLCBHZXRNb2R1bGVIYW5kbGUoMCksIDApOworICAgIGlm
ICghbV9jYW52YXNXaW5kb3cpIHsKKyAgICAgICAgcHJpbnRmKCJXZWJHcmFwaGljc0NvbnRleHQz
RERlZmF1bHRJbXBsOiBDcmVhdGVXaW5kb3cgZmFpbGVkXG4iKTsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIC8vIGdldCB0aGUgZGV2aWNlIGNvbnRleHQKKyAgICBtX2NhbnZh
c0RDID0gR2V0REMobV9jYW52YXNXaW5kb3cpOworICAgIGlmICghbV9jYW52YXNEQykgeworICAg
ICAgICBwcmludGYoIldlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6IEdldERDIGZhaWxl
ZFxuIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLyBmaW5kIGRlZmF1
bHQgcGl4ZWwgZm9ybWF0CisgICAgUElYRUxGT1JNQVRERVNDUklQVE9SIHBmZDsKKyAgICBaZXJv
TWVtb3J5KCZwZmQsIHNpemVvZihQSVhFTEZPUk1BVERFU0NSSVBUT1IpKTsKKyAgICBwZmQublNp
emUgPSBzaXplb2YoUElYRUxGT1JNQVRERVNDUklQVE9SKTsKKyAgICBwZmQublZlcnNpb24gPSAx
OworI2lmZGVmIFJFTkRFUl9UT19ERUJVR0dJTkdfV0lORE9XCisgICAgcGZkLmR3RmxhZ3MgPSBQ
RkRfRFJBV19UT19XSU5ET1cgfCBQRkRfU1VQUE9SVF9PUEVOR0wgfCBQRkRfRE9VQkxFQlVGRkVS
OworI2Vsc2UKKyAgICBwZmQuZHdGbGFncyA9IFBGRF9EUkFXX1RPX1dJTkRPVyB8IFBGRF9TVVBQ
T1JUX09QRU5HTDsKKyNlbmRpZgorICAgIGludCBwaXhlbGZvcm1hdCA9IENob29zZVBpeGVsRm9y
bWF0KG1fY2FudmFzREMsICZwZmQpOworCisgICAgLy8gc2V0IHRoZSBwaXhlbCBmb3JtYXQgZm9y
IHRoZSBkYworICAgIGlmICghU2V0UGl4ZWxGb3JtYXQobV9jYW52YXNEQywgcGl4ZWxmb3JtYXQs
ICZwZmQpKSB7CisgICAgICAgIHByaW50ZigiV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1w
bDogU2V0UGl4ZWxGb3JtYXQgZmFpbGVkXG4iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKworICAgIC8vIGNyZWF0ZSByZW5kZXJpbmcgY29udGV4dAorICAgIG1fY29udGV4dE9iaiA9
IHdnbENyZWF0ZUNvbnRleHQobV9jYW52YXNEQyk7CisgICAgaWYgKCFtX2NvbnRleHRPYmopIHsK
KyAgICAgICAgcHJpbnRmKCJXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOiB3Z2xDcmVh
dGVDb250ZXh0IGZhaWxlZFxuIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAg
ICBpZiAoIXdnbE1ha2VDdXJyZW50KG1fY2FudmFzREMsIG1fY29udGV4dE9iaikpIHsKKyAgICAg
ICAgcHJpbnRmKCJXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOiB3Z2xNYWtlQ3VycmVu
dCBmYWlsZWRcbiIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisjaWZkZWYgUkVO
REVSX1RPX0RFQlVHR0lOR19XSU5ET1cKKyAgICB0eXBlZGVmIEJPT0wgKFdJTkFQSSAqIFBGTldH
TFNXQVBJTlRFUlZBTEVYVFBST0MpIChpbnQgaW50ZXJ2YWwpOworICAgIFBGTldHTFNXQVBJTlRF
UlZBTEVYVFBST0Mgc2V0U3dhcEludGVydmFsID0gMDsKKyAgICBzZXRTd2FwSW50ZXJ2YWwgPSAo
UEZOV0dMU1dBUElOVEVSVkFMRVhUUFJPQykgd2dsR2V0UHJvY0FkZHJlc3MoIndnbFN3YXBJbnRl
cnZhbEVYVCIpOworICAgIGlmIChzZXRTd2FwSW50ZXJ2YWwpCisgICAgICAgIHNldFN3YXBJbnRl
cnZhbCgxKTsKKyNlbmRpZiAvLyBSRU5ERVJfVE9fREVCVUdHSU5HX1dJTkRPVworCisjZWxpZiBQ
TEFURk9STShDRykKKyAgICAvLyBDcmVhdGUgYSAxeDEgcGJ1ZmZlciBhbmQgYXNzb2NpYXRlZCBj
b250ZXh0IHRvIGJvb3RzdHJhcCB0aGluZ3MKKyAgICBDR0xQaXhlbEZvcm1hdEF0dHJpYnV0ZSBh
dHRyaWJzW10gPSB7CisgICAgICAgIChDR0xQaXhlbEZvcm1hdEF0dHJpYnV0ZSkga0NHTFBGQVBC
dWZmZXIsCisgICAgICAgIChDR0xQaXhlbEZvcm1hdEF0dHJpYnV0ZSkgMAorICAgIH07CisgICAg
Q0dMUGl4ZWxGb3JtYXRPYmogcGl4ZWxGb3JtYXQ7CisgICAgR0xpbnQgbnVtUGl4ZWxGb3JtYXRz
OworICAgIGlmIChDR0xDaG9vc2VQaXhlbEZvcm1hdChhdHRyaWJzLCAmcGl4ZWxGb3JtYXQsICZu
dW1QaXhlbEZvcm1hdHMpICE9IGtDR0xOb0Vycm9yKSB7CisgICAgICAgIHByaW50ZigiV2ViR3Jh
cGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDogZXJyb3IgY2hvb3NpbmcgcGl4ZWwgZm9ybWF0XG4i
KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBpZiAoIXBpeGVsRm9ybWF0KSB7
CisgICAgICAgIHByaW50ZigiV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDogbm8gcGl4
ZWwgZm9ybWF0IHNlbGVjdGVkXG4iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAg
ICBDR0xDb250ZXh0T2JqIGNvbnRleHQ7CisgICAgQ0dMRXJyb3IgcmVzID0gQ0dMQ3JlYXRlQ29u
dGV4dChwaXhlbEZvcm1hdCwgMCwgJmNvbnRleHQpOworICAgIENHTERlc3Ryb3lQaXhlbEZvcm1h
dChwaXhlbEZvcm1hdCk7CisgICAgaWYgKHJlcyAhPSBrQ0dMTm9FcnJvcikgeworICAgICAgICBw
cmludGYoIldlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6IGVycm9yIGNyZWF0aW5nIGNv
bnRleHRcbiIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIENHTFBCdWZmZXJP
YmogcGJ1ZmZlcjsKKyAgICBpZiAoQ0dMQ3JlYXRlUEJ1ZmZlcigxLCAxLCBHTF9URVhUVVJFXzJE
LCBHTF9SR0JBLCAwLCAmcGJ1ZmZlcikgIT0ga0NHTE5vRXJyb3IpIHsKKyAgICAgICAgQ0dMRGVz
dHJveUNvbnRleHQoY29udGV4dCk7CisgICAgICAgIHByaW50ZigiV2ViR3JhcGhpY3NDb250ZXh0
M0REZWZhdWx0SW1wbDogZXJyb3IgY3JlYXRpbmcgcGJ1ZmZlclxuIik7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisgICAgaWYgKENHTFNldFBCdWZmZXIoY29udGV4dCwgcGJ1ZmZlciwg
MCwgMCwgMCkgIT0ga0NHTE5vRXJyb3IpIHsKKyAgICAgICAgQ0dMRGVzdHJveUNvbnRleHQoY29u
dGV4dCk7CisgICAgICAgIENHTERlc3Ryb3lQQnVmZmVyKHBidWZmZXIpOworICAgICAgICBwcmlu
dGYoIldlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6IGVycm9yIGF0dGFjaGluZyBwYnVm
ZmVyIHRvIGNvbnRleHRcbiIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlm
IChDR0xTZXRDdXJyZW50Q29udGV4dChjb250ZXh0KSAhPSBrQ0dMTm9FcnJvcikgeworICAgICAg
ICBDR0xEZXN0cm95Q29udGV4dChjb250ZXh0KTsKKyAgICAgICAgQ0dMRGVzdHJveVBCdWZmZXIo
cGJ1ZmZlcik7CisgICAgICAgIHByaW50ZigiV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1w
bDogZXJyb3IgbWFraW5nIGNvbnRleHQgY3VycmVudFxuIik7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisgICAgbV9wYnVmZmVyID0gcGJ1ZmZlcjsKKyAgICBtX2NvbnRleHRPYmogPSBj
b250ZXh0OworI2VsaWYgT1MoTElOVVgpCisgICAgaWYgKCFzX2dsKSB7CisgICAgICAgIHNfZ2wg
PSBHTENvbm5lY3Rpb246OmNyZWF0ZSgpOworICAgICAgICBpZiAoIXNfZ2wpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaW50IGNvbmZpZ0F0dHJzW10gPSB7CisgICAg
ICAgIEdMWF9EUkFXQUJMRV9UWVBFLAorICAgICAgICBHTFhfUEJVRkZFUl9CSVQsCisgICAgICAg
IEdMWF9SRU5ERVJfVFlQRSwKKyAgICAgICAgR0xYX1JHQkFfQklULAorICAgICAgICBHTFhfRE9V
QkxFQlVGRkVSLAorICAgICAgICAwLAorICAgICAgICAwCisgICAgfTsKKyAgICBpbnQgbmVsZW1l
bnRzID0gMDsKKyAgICBHTFhGQkNvbmZpZyogY29uZmlnID0gc19nbC0+Y2hvb3NlRkJDb25maWco
MCwgY29uZmlnQXR0cnMsICZuZWxlbWVudHMpOworICAgIGlmICghY29uZmlnKSB7CisgICAgICAg
IHByaW50ZigiV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDogZ2xYQ2hvb3NlRkJDb25m
aWcgZmFpbGVkXG4iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBpZiAoIW5l
bGVtZW50cykgeworICAgICAgICBwcmludGYoIldlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdElt
cGw6IGdsWENob29zZUZCQ29uZmlnIHJldHVybmVkIDAgZWxlbWVudHNcbiIpOworICAgICAgICBY
RnJlZShjb25maWcpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIEdMWENvbnRl
eHQgY29udGV4dCA9IHNfZ2wtPmNyZWF0ZU5ld0NvbnRleHQoY29uZmlnWzBdLCBHTFhfUkdCQV9U
WVBFLCAwLCBUcnVlKTsKKyAgICBpZiAoIWNvbnRleHQpIHsKKyAgICAgICAgcHJpbnRmKCJXZWJH
cmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOiBnbFhDcmVhdGVOZXdDb250ZXh0IGZhaWxlZFxu
Iik7CisgICAgICAgIFhGcmVlKGNvbmZpZyk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisgICAgaW50IHBidWZmZXJBdHRyc1tdID0geworICAgICAgICBHTFhfUEJVRkZFUl9XSURUSCwK
KyAgICAgICAgMSwKKyAgICAgICAgR0xYX1BCVUZGRVJfSEVJR0hULAorICAgICAgICAxLAorICAg
ICAgICAwCisgICAgfTsKKyAgICBHTFhQYnVmZmVyIHBidWZmZXIgPSBzX2dsLT5jcmVhdGVQYnVm
ZmVyKGNvbmZpZ1swXSwgcGJ1ZmZlckF0dHJzKTsKKyAgICBYRnJlZShjb25maWcpOworICAgIGlm
ICghcGJ1ZmZlcikgeworICAgICAgICBwcmludGYoIldlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVs
dEltcGw6IGdseENyZWF0ZVBidWZmZXIgZmFpbGVkXG4iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKyAgICBpZiAoIXNfZ2wtPm1ha2VDdXJyZW50KHBidWZmZXIsIGNvbnRleHQpKSB7
CisgICAgICAgIHByaW50ZigiV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDogZ2xYTWFr
ZUN1cnJlbnQgZmFpbGVkXG4iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBt
X2NvbnRleHRPYmogPSBjb250ZXh0OworICAgIG1fcGJ1ZmZlciA9IHBidWZmZXI7CisjZWxzZQor
I2Vycm9yIE11c3QgcG9ydCB0byB5b3VyIHBsYXRmb3JtCisjZW5kaWYKKworICAgIGlmICghc19p
bml0aWFsaXplZEdMRVcpIHsKKyAgICAgICAgLy8gSW5pdGlhbGl6ZSBHTEVXIGFuZCBjaGVjayBm
b3IgR0wgMi4wIHN1cHBvcnQgYnkgdGhlIGRyaXZlcnMuCisgICAgICAgIEdMZW51bSBnbGV3SW5p
dFJlc3VsdCA9IGdsZXdJbml0KCk7CisgICAgICAgIGlmIChnbGV3SW5pdFJlc3VsdCAhPSBHTEVX
X09LKSB7CisgICAgICAgICAgICBwcmludGYoIldlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdElt
cGw6IEdMRVcgaW5pdGlhbGl6YXRpb24gZmFpbGVkXG4iKTsKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIWdsZXdJc1N1cHBvcnRlZCgiR0xfVkVSU0lP
Tl8yXzAiKSkgeworICAgICAgICAgICAgcHJpbnRmKCJXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1
bHRJbXBsOiBPcGVuR0wgMi4wIG5vdCBzdXBwb3J0ZWRcbiIpOworICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB9CisgICAgICAgIHNfaW5pdGlhbGl6ZWRHTEVXID0gdHJ1ZTsKKyAg
ICB9CisKKyAgICBtX2luaXRpYWxpemVkID0gdHJ1ZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
Ym9vbCBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjptYWtlQ29udGV4dEN1cnJlbnQo
KQoreworI2lmIE9TKFdJTkRPV1MpCisgICAgaWYgKHdnbEdldEN1cnJlbnRDb250ZXh0KCkgIT0g
bV9jb250ZXh0T2JqKQorICAgICAgICBpZiAod2dsTWFrZUN1cnJlbnQobV9jYW52YXNEQywgbV9j
b250ZXh0T2JqKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworI2VsaWYgUExBVEZPUk0oQ0cp
CisgICAgaWYgKENHTEdldEN1cnJlbnRDb250ZXh0KCkgIT0gbV9jb250ZXh0T2JqKQorICAgICAg
ICBpZiAoQ0dMU2V0Q3VycmVudENvbnRleHQobV9jb250ZXh0T2JqKSA9PSBrQ0dMTm9FcnJvcikK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworI2VsaWYgT1MoTElOVVgpCisgICAgaWYgKHNfZ2wt
PmdldEN1cnJlbnRDb250ZXh0KCkgIT0gbV9jb250ZXh0T2JqKQorICAgICAgICBpZiAoc19nbC0+
bWFrZUN1cnJlbnQobV9wYnVmZmVyLCBtX2NvbnRleHRPYmopKQorICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisjZWxzZQorI2Vycm9yIE11c3QgcG9ydCB0byB5b3VyIHBsYXRmb3JtCisjZW5kaWYK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2ludCBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJ
bXBsOjp3aWR0aCgpCit7CisgICAgcmV0dXJuIG1fY2FjaGVkV2lkdGg7Cit9CisKK2ludCBXZWJH
cmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpoZWlnaHQoKQoreworICAgIHJldHVybiBtX2Nh
Y2hlZEhlaWdodDsKK30KKworaW50IFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OnNp
emVJbkJ5dGVzKGludCB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgR0xf
QllURToKKyAgICAgICAgcmV0dXJuIHNpemVvZihHTGJ5dGUpOworICAgIGNhc2UgR0xfVU5TSUdO
RURfQllURToKKyAgICAgICAgcmV0dXJuIHNpemVvZihHTHVieXRlKTsKKyAgICBjYXNlIEdMX1NI
T1JUOgorICAgICAgICByZXR1cm4gc2l6ZW9mKEdMc2hvcnQpOworICAgIGNhc2UgR0xfVU5TSUdO
RURfU0hPUlQ6CisgICAgICAgIHJldHVybiBzaXplb2YoR0x1c2hvcnQpOworICAgIGNhc2UgR0xf
SU5UOgorICAgICAgICByZXR1cm4gc2l6ZW9mKEdMaW50KTsKKyAgICBjYXNlIEdMX1VOU0lHTkVE
X0lOVDoKKyAgICAgICAgcmV0dXJuIHNpemVvZihHTHVpbnQpOworICAgIGNhc2UgR0xfRkxPQVQ6
CisgICAgICAgIHJldHVybiBzaXplb2YoR0xmbG9hdCk7CisgICAgfQorICAgIHJldHVybiAwOwor
fQorCitzdGF0aWMgaW50IGNyZWF0ZVRleHR1cmVPYmplY3QoR0xlbnVtIHRhcmdldCkKK3sKKyAg
ICBHTHVpbnQgdGV4dHVyZSA9IDA7CisgICAgZ2xHZW5UZXh0dXJlcygxLCAmdGV4dHVyZSk7Cisg
ICAgZ2xCaW5kVGV4dHVyZSh0YXJnZXQsIHRleHR1cmUpOworICAgIGdsVGV4UGFyYW1ldGVyZih0
YXJnZXQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTkVBUkVTVCk7CisgICAgZ2xUZXhQYXJh
bWV0ZXJmKHRhcmdldCwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9ORUFSRVNUKTsKKyAgICBy
ZXR1cm4gdGV4dHVyZTsKK30KKwordm9pZCBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBs
OjpyZXNoYXBlKGludCB3aWR0aCwgaW50IGhlaWdodCkKK3sKKyNpZmRlZiBSRU5ERVJfVE9fREVC
VUdHSU5HX1dJTkRPVworICAgIFNldFdpbmRvd1BvcyhtX2NhbnZhc1dpbmRvdywgSFdORF9UT1As
IDAsIDAsIHdpZHRoLCBoZWlnaHQsCisgICAgICAgICAgICAgICAgIFNXUF9OT01PVkUpOworICAg
IFNob3dXaW5kb3cobV9jYW52YXNXaW5kb3csIFNXX1NIT1cpOworI2VuZGlmCisKKyAgICBtX2Nh
Y2hlZFdpZHRoID0gd2lkdGg7CisgICAgbV9jYWNoZWRIZWlnaHQgPSBoZWlnaHQ7CisgICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CisKKyNpZm5kZWYgUkVOREVSX1RPX0RFQlVHR0lOR19XSU5ET1cK
KyNpZmRlZiBVU0VfVEVYVFVSRV9SRUNUQU5HTEVfRk9SX0ZSQU1FQlVGRkVSCisgICAgLy8gR0xf
VEVYVFVSRV9SRUNUQU5HTEVfQVJCIGlzIHRoZSBiZXN0IHN1cHBvcnRlZCByZW5kZXIgdGFyZ2V0
IG9uIE1hYyBPUyBYCisgICAgR0xlbnVtIHRhcmdldCA9IEdMX1RFWFRVUkVfUkVDVEFOR0xFX0FS
QjsKKyNlbHNlCisgICAgR0xlbnVtIHRhcmdldCA9IEdMX1RFWFRVUkVfMkQ7CisjZW5kaWYKKyAg
ICBpZiAoIW1fdGV4dHVyZSkgeworICAgICAgICAvLyBHZW5lcmF0ZSB0aGUgdGV4dHVyZSBvYmpl
Y3QKKyAgICAgICAgbV90ZXh0dXJlID0gY3JlYXRlVGV4dHVyZU9iamVjdCh0YXJnZXQpOworICAg
ICAgICAvLyBHZW5lcmF0ZSB0aGUgZnJhbWVidWZmZXIgb2JqZWN0CisgICAgICAgIGdsR2VuRnJh
bWVidWZmZXJzRVhUKDEsICZtX2Zibyk7CisgICAgICAgIC8vIEdlbmVyYXRlIHRoZSBkZXB0aCBi
dWZmZXIKKyAgICAgICAgZ2xHZW5SZW5kZXJidWZmZXJzRVhUKDEsICZtX2RlcHRoQnVmZmVyKTsK
KyAgICB9CisKKyAgICAvLyBSZWFsbG9jYXRlIHRoZSBjb2xvciBhbmQgZGVwdGggYnVmZmVycwor
ICAgIGdsQmluZFRleHR1cmUodGFyZ2V0LCBtX3RleHR1cmUpOworICAgIGdsVGV4SW1hZ2UyRCh0
YXJnZXQsIDAsIEdMX1JHQkE4LCB3aWR0aCwgaGVpZ2h0LCAwLCBHTF9SR0JBLCBHTF9VTlNJR05F
RF9CWVRFLCAwKTsKKyAgICBnbEJpbmRUZXh0dXJlKHRhcmdldCwgMCk7CisKKyAgICBnbEJpbmRG
cmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fZmJvKTsKKyAgICBtX2JvdW5kRkJP
ID0gbV9mYm87CisgICAgZ2xCaW5kUmVuZGVyYnVmZmVyRVhUKEdMX1JFTkRFUkJVRkZFUl9FWFQs
IG1fZGVwdGhCdWZmZXIpOworICAgIGdsUmVuZGVyYnVmZmVyU3RvcmFnZUVYVChHTF9SRU5ERVJC
VUZGRVJfRVhULCBHTF9ERVBUSF9DT01QT05FTlQsIHdpZHRoLCBoZWlnaHQpOworICAgIGdsQmlu
ZFJlbmRlcmJ1ZmZlckVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCAwKTsKKworICAgIGdsRnJhbWVi
dWZmZXJUZXh0dXJlMkRFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBHTF9DT0xPUl9BVFRBQ0hNRU5U
MF9FWFQsIHRhcmdldCwgbV90ZXh0dXJlLCAwKTsKKyAgICBnbEZyYW1lYnVmZmVyUmVuZGVyYnVm
ZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgR0xfREVQVEhfQVRUQUNITUVOVF9FWFQsIEdMX1JF
TkRFUkJVRkZFUl9FWFQsIG1fZGVwdGhCdWZmZXIpOworICAgIEdMZW51bSBzdGF0dXMgPSBnbENo
ZWNrRnJhbWVidWZmZXJTdGF0dXNFWFQoR0xfRlJBTUVCVUZGRVJfRVhUKTsKKyAgICBpZiAoc3Rh
dHVzICE9IEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFX0VYVCkgeworICAgICAgICBwcmludGYoIldl
YkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6IGZyYW1lYnVmZmVyIHdhcyBpbmNvbXBsZXRl
XG4iKTsKKworICAgICAgICAvLyBGSVhNRTogY2xlYW51cC4KKyAgICAgICAgbm90SW1wbGVtZW50
ZWQoKTsKKyAgICB9CisjZW5kaWYgLy8gUkVOREVSX1RPX0RFQlVHR0lOR19XSU5ET1cKKworI2lm
ZGVmIEZMSVBfRlJBTUVCVUZGRVJfVkVSVElDQUxMWQorICAgIGlmIChtX3NjYW5saW5lKSB7Cisg
ICAgICAgIGRlbGV0ZVtdIG1fc2NhbmxpbmU7CisgICAgICAgIG1fc2NhbmxpbmUgPSAwOworICAg
IH0KKyAgICBtX3NjYW5saW5lID0gbmV3IHVuc2lnbmVkIGNoYXJbd2lkdGggKiA0XTsKKyNlbmRp
ZiAvLyBGTElQX0ZSQU1FQlVGRkVSX1ZFUlRJQ0FMTFkKKworICAgIGdsQ2xlYXIoR0xfQ09MT1Jf
QlVGRkVSX0JJVCk7CisKK30KKworI2lmZGVmIEZMSVBfRlJBTUVCVUZGRVJfVkVSVElDQUxMWQor
dm9pZCBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpmbGlwVmVydGljYWxseSh1bnNp
Z25lZCBjaGFyKiBmcmFtZWJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHdpZHRoLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgaGVpZ2h0
KQoreworICAgIHVuc2lnbmVkIGNoYXIqIHNjYW5saW5lID0gbV9zY2FubGluZTsKKyAgICBpZiAo
IXNjYW5saW5lKQorICAgICAgICByZXR1cm47CisgICAgdW5zaWduZWQgaW50IHJvd0J5dGVzID0g
d2lkdGggKiA0OworICAgIHVuc2lnbmVkIGludCBjb3VudCA9IGhlaWdodCAvIDI7CisgICAgZm9y
ICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisgICAgICAgIHVuc2lnbmVk
IGNoYXIqIHJvd0EgPSBmcmFtZWJ1ZmZlciArIGkgKiByb3dCeXRlczsKKyAgICAgICAgdW5zaWdu
ZWQgY2hhciogcm93QiA9IGZyYW1lYnVmZmVyICsgKGhlaWdodCAtIGkgLSAxKSAqIHJvd0J5dGVz
OworICAgICAgICAvLyBGSVhNRTogdGhpcyBpcyB3aGVyZSB0aGUgbXVsdGlwbGljYXRpb24gb2Yg
dGhlIGFscGhhCisgICAgICAgIC8vIGNoYW5uZWwgaW50byB0aGUgY29sb3IgYnVmZmVyIHdpbGwg
bmVlZCB0byBvY2N1ciBpZiB0aGUKKyAgICAgICAgLy8gdXNlciBzcGVjaWZpZXMgdGhlICJwcmVt
dWx0aXBseUFscGhhIiBmbGFnIGluIHRoZSBjb250ZXh0CisgICAgICAgIC8vIGNyZWF0aW9uIGF0
dHJpYnV0ZXMuCisgICAgICAgIG1lbWNweShzY2FubGluZSwgcm93Qiwgcm93Qnl0ZXMpOworICAg
ICAgICBtZW1jcHkocm93Qiwgcm93QSwgcm93Qnl0ZXMpOworICAgICAgICBtZW1jcHkocm93QSwg
c2NhbmxpbmUsIHJvd0J5dGVzKTsKKyAgICB9Cit9CisjZW5kaWYKKworYm9vbCBXZWJHcmFwaGlj
c0NvbnRleHQzRERlZmF1bHRJbXBsOjpyZWFkQmFja0ZyYW1lYnVmZmVyKHVuc2lnbmVkIGNoYXIq
IHBpeGVscywgc2l6ZV90IGJ1ZmZlclNpemUpCit7CisgICAgaWYgKGJ1ZmZlclNpemUgIT0gc3Rh
dGljX2Nhc3Q8c2l6ZV90Pig0ICogd2lkdGgoKSAqIGhlaWdodCgpKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisKKyNpZmRlZiBSRU5ERVJfVE9f
REVCVUdHSU5HX1dJTkRPVworICAgIFN3YXBCdWZmZXJzKG1fY2FudmFzREMpOworI2Vsc2UKKyAg
ICAvLyBFYXJsaWVyIHZlcnNpb25zIG9mIHRoaXMgY29kZSB1c2VkIHRoZSBHUFUgdG8gZmxpcCB0
aGUKKyAgICAvLyBmcmFtZWJ1ZmZlciB2ZXJ0aWNhbGx5IGJlZm9yZSByZWFkaW5nIGl0IGJhY2sg
Zm9yIGNvbXBvc2l0aW5nCisgICAgLy8gdmlhIHNvZnR3YXJlLiBUaGlzIGNvZGUgd2FzIHF1aXRl
IGNvbXBsaWNhdGVkLCB1c2VkIGEgbG90IG9mCisgICAgLy8gR1BVIG1lbW9yeSwgYW5kIGRpZG4n
dCBwcm92aWRlIGFuIG9idmlvdXMgc3BlZWR1cC4gU2luY2UgdGhpcworICAgIC8vIHZlcnRpY2Fs
IGZsaXAgaXMgb25seSBhIHRlbXBvcmFyeSBzb2x1dGlvbiBhbnl3YXkgdW50aWwgQ2hyb21lCisg
ICAgLy8gaXMgZnVsbHkgR1BVIGNvbXBvc2l0ZWQsIGl0IHdhc24ndCB3b3J0aCB0aGUgY29tcGxl
eGl0eS4KKworICAgIGJvb2wgbXVzdFJlc3RvcmVGQk8gPSAobV9ib3VuZEZCTyAhPSBtX2Zibyk7
CisgICAgaWYgKG11c3RSZXN0b3JlRkJPKQorICAgICAgICBnbEJpbmRGcmFtZWJ1ZmZlckVYVChH
TF9GUkFNRUJVRkZFUl9FWFQsIG1fZmJvKTsKKyNpZiBQTEFURk9STShTS0lBKQorICAgIGdsUmVh
ZFBpeGVscygwLCAwLCBtX2NhY2hlZFdpZHRoLCBtX2NhY2hlZEhlaWdodCwgR0xfQkdSQSwgR0xf
VU5TSUdORURfQllURSwgcGl4ZWxzKTsKKyNlbGlmIFBMQVRGT1JNKENHKQorICAgIGdsUmVhZFBp
eGVscygwLCAwLCBtX2NhY2hlZFdpZHRoLCBtX2NhY2hlZEhlaWdodCwgR0xfQkdSQSwgR0xfVU5T
SUdORURfSU5UXzhfOF84XzhfUkVWLCBwaXhlbHMpOworI2Vsc2UKKyNlcnJvciBNdXN0IHBvcnQg
dG8geW91ciBwbGF0Zm9ybQorI2VuZGlmCisKKyAgICBpZiAobXVzdFJlc3RvcmVGQk8pCisgICAg
ICAgIGdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9ib3VuZEZCTyk7
CisKKyNpZmRlZiBGTElQX0ZSQU1FQlVGRkVSX1ZFUlRJQ0FMTFkKKyAgICBpZiAocGl4ZWxzKQor
ICAgICAgICBmbGlwVmVydGljYWxseShwaXhlbHMsIG1fY2FjaGVkV2lkdGgsIG1fY2FjaGVkSGVp
Z2h0KTsKKyNlbmRpZgorCisjZW5kaWYgLy8gUkVOREVSX1RPX0RFQlVHR0lOR19XSU5ET1cKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBs
OjpzeW50aGVzaXplR0xFcnJvcih1bnNpZ25lZCBsb25nIGVycm9yKQoreworICAgIG1fc3ludGhl
dGljRXJyb3JzLmFkZChlcnJvcik7Cit9CisKKy8vIEhlbHBlciBtYWNyb3MgdG8gcmVkdWNlIHRo
ZSBhbW91bnQgb2YgY29kZS4KKworI2RlZmluZSBERUxFR0FURV9UT19HTChuYW1lLCBnbG5hbWUp
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK3ZvaWQgV2ViR3Jh
cGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6bmFtZSgpICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKKyAgICBnbCMjZ2xuYW1lKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9CisKKyNkZWZpbmUgREVMRUdBVEVfVE9f
R0xfMShuYW1lLCBnbG5hbWUsIHQxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCit2b2lkIFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6Om5hbWUodDEgYTEpICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAoreyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCisgICAgZ2wjI2dsbmFtZShhMSk7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfQorCisjZGVm
aW5lIERFTEVHQVRFX1RPX0dMXzFSKG5hbWUsIGdsbmFtZSwgdDEsIHJ0KSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorcnQgV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6
bmFtZSh0MSBhMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK3sgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHJldHVybiBnbCMjZ2xu
YW1lKGExKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKK30KKworI2RlZmluZSBERUxFR0FURV9UT19HTF8yKG5hbWUsIGdsbmFtZSwgdDEsIHQy
KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK3ZvaWQgV2ViR3JhcGhpY3NDb250
ZXh0M0REZWZhdWx0SW1wbDo6bmFtZSh0MSBhMSwgdDIgYTIpICAgICAgICAgICAgICAgICAgICAg
ICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg
ICBnbCMjZ2xuYW1lKGExLCBhMik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCit9CisKKyNkZWZpbmUgREVMRUdBVEVfVE9fR0xfMlIobmFt
ZSwgZ2xuYW1lLCB0MSwgdDIsIHJ0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCitydCBX
ZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpuYW1lKHQxIGExLCB0MiBhMikgICAgICAg
ICAgICAgICAgICAgICAgICAgXAoreyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCisgICAgcmV0dXJuIGdsIyNnbG5hbWUoYTEsIGEyKTsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfQorCisjZGVmaW5lIERFTEVH
QVRFX1RPX0dMXzMobmFtZSwgZ2xuYW1lLCB0MSwgdDIsIHQzKSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAordm9pZCBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpuYW1lKHQx
IGExLCB0MiBhMiwgdDMgYTMpICAgICAgICAgICAgICAgIFwKK3sgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGdsIyNnbG5hbWUoYTEsIGEyLCBhMyk7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30K
KworI2RlZmluZSBERUxFR0FURV9UT19HTF80KG5hbWUsIGdsbmFtZSwgdDEsIHQyLCB0MywgdDQp
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKK3ZvaWQgV2ViR3JhcGhpY3NDb250ZXh0M0REZWZh
dWx0SW1wbDo6bmFtZSh0MSBhMSwgdDIgYTIsIHQzIGEzLCB0NCBhNCkgICAgICAgICBcCit7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBnbCMjZ2xu
YW1lKGExLCBhMiwgYTMsIGE0KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCit9CisKKyNkZWZpbmUgREVMRUdBVEVfVE9fR0xfNShuYW1lLCBnbG5hbWUs
IHQxLCB0MiwgdDMsIHQ0LCB0NSkgICAgICAgICAgICAgICAgICAgICBcCit2b2lkIFdlYkdyYXBo
aWNzQ29udGV4dDNERGVmYXVsdEltcGw6Om5hbWUodDEgYTEsIHQyIGEyLCB0MyBhMywgdDQgYTQs
IHQ1IGE1KSAgXAoreyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCisgICAgZ2wjI2dsbmFtZShhMSwgYTIsIGEzLCBhNCwgYTUpOyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfQorCisjZGVmaW5lIERFTEVHQVRFX1RPX0dM
XzYobmFtZSwgZ2xuYW1lLCB0MSwgdDIsIHQzLCB0NCwgdDUsIHQ2KSAgICAgICAgICAgICAgICAg
XAordm9pZCBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpuYW1lKHQxIGExLCB0MiBh
MiwgdDMgYTMsIHQ0IGE0LCB0NSBhNSwgdDYgYTYpIFwKK3sgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGdsIyNnbG5hbWUoYTEsIGEyLCBhMywgYTQs
IGE1LCBhNik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30KKwor
I2RlZmluZSBERUxFR0FURV9UT19HTF83KG5hbWUsIGdsbmFtZSwgdDEsIHQyLCB0MywgdDQsIHQ1
LCB0NiwgdDcpICAgICAgICAgICAgIFwKK3ZvaWQgV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0
SW1wbDo6bmFtZSh0MSBhMSwgdDIgYTIsIHQzIGEzLCB0NCBhNCwgdDUgYTUsIHQ2IGE2LCB0NyBh
NykgXAoreyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg
ICAgZ2wjI2dsbmFtZShhMSwgYTIsIGEzLCBhNCwgYTUsIGE2LCBhNyk7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAorfQorCisjZGVmaW5lIERFTEVHQVRFX1RPX0dMXzgobmFt
ZSwgZ2xuYW1lLCB0MSwgdDIsIHQzLCB0NCwgdDUsIHQ2LCB0NywgdDgpICAgICAgICAgXAordm9p
ZCBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpuYW1lKHQxIGExLCB0MiBhMiwgdDMg
YTMsIHQ0IGE0LCB0NSBhNSwgdDYgYTYsIHQ3IGE3LCB0OCBhOCkgXAoreyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZ2wjI2dsbmFtZShhMSwgYTIs
IGEzLCBhNCwgYTUsIGE2LCBhNywgYTgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAorfQorCisjZGVmaW5lIERFTEVHQVRFX1RPX0dMXzkobmFtZSwgZ2xuYW1lLCB0MSwgdDIsIHQz
LCB0NCwgdDUsIHQ2LCB0NywgdDgsIHQ5KSAgICAgXAordm9pZCBXZWJHcmFwaGljc0NvbnRleHQz
RERlZmF1bHRJbXBsOjpuYW1lKHQxIGExLCB0MiBhMiwgdDMgYTMsIHQ0IGE0LCB0NSBhNSwgdDYg
YTYsIHQ3IGE3LCB0OCBhOCwgdDkgYTkpIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorICAgIGdsIyNnbG5hbWUoYTEsIGEyLCBhMywgYTQsIGE1LCBh
NiwgYTcsIGE4LCBhOSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30KKwordm9pZCBX
ZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjphY3RpdmVUZXh0dXJlKHVuc2lnbmVkIGxv
bmcgdGV4dHVyZSkKK3sKKyAgICAvLyBGSVhNRTogcXVlcnkgbnVtYmVyIG9mIHRleHR1cmVzIGF2
YWlsYWJsZS4KKyAgICBpZiAodGV4dHVyZSA8IEdMX1RFWFRVUkUwIHx8IHRleHR1cmUgPiBHTF9U
RVhUVVJFMCszMikKKyAgICAgICAgLy8gRklYTUU6IHJhaXNlIGV4Y2VwdGlvbi4KKyAgICAgICAg
cmV0dXJuOworCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgZ2xBY3RpdmVUZXh0dXJl
KHRleHR1cmUpOworfQorCitERUxFR0FURV9UT19HTF8yKGF0dGFjaFNoYWRlciwgQXR0YWNoU2hh
ZGVyLCBXZWJHTElkLCBXZWJHTElkKQorCitERUxFR0FURV9UT19HTF8zKGJpbmRBdHRyaWJMb2Nh
dGlvbiwgQmluZEF0dHJpYkxvY2F0aW9uLCBXZWJHTElkLCB1bnNpZ25lZCBsb25nLCBjb25zdCBj
aGFyKikKKwordm9pZCBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpiaW5kQnVmZmVy
KHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBXZWJHTElkIGJ1ZmZlcikKK3sKKyAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICBpZiAodGFyZ2V0ID09IEdMX0FSUkFZX0JVRkZFUikKKyAgICAgICAg
bV9ib3VuZEFycmF5QnVmZmVyID0gYnVmZmVyOworICAgIGdsQmluZEJ1ZmZlcih0YXJnZXQsIGJ1
ZmZlcik7Cit9CisKK3ZvaWQgV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6YmluZEZy
YW1lYnVmZmVyKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBXZWJHTElkIGZyYW1lYnVmZmVyKQorewor
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghZnJhbWVidWZmZXIpCisgICAgICAg
IGZyYW1lYnVmZmVyID0gbV9mYm87CisgICAgZ2xCaW5kRnJhbWVidWZmZXJFWFQodGFyZ2V0LCBm
cmFtZWJ1ZmZlcik7CisgICAgbV9ib3VuZEZCTyA9IGZyYW1lYnVmZmVyOworfQorCitERUxFR0FU
RV9UT19HTF8yKGJpbmRSZW5kZXJidWZmZXIsIEJpbmRSZW5kZXJidWZmZXJFWFQsIHVuc2lnbmVk
IGxvbmcsIFdlYkdMSWQpCisKK0RFTEVHQVRFX1RPX0dMXzIoYmluZFRleHR1cmUsIEJpbmRUZXh0
dXJlLCB1bnNpZ25lZCBsb25nLCBXZWJHTElkKQorCitERUxFR0FURV9UT19HTF80KGJsZW5kQ29s
b3IsIEJsZW5kQ29sb3IsIGRvdWJsZSwgZG91YmxlLCBkb3VibGUsIGRvdWJsZSkKKworREVMRUdB
VEVfVE9fR0xfMShibGVuZEVxdWF0aW9uLCBCbGVuZEVxdWF0aW9uLCB1bnNpZ25lZCBsb25nKQor
CitERUxFR0FURV9UT19HTF8yKGJsZW5kRXF1YXRpb25TZXBhcmF0ZSwgQmxlbmRFcXVhdGlvblNl
cGFyYXRlLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKQorCitERUxFR0FURV9UT19HTF8y
KGJsZW5kRnVuYywgQmxlbmRGdW5jLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKQorCitE
RUxFR0FURV9UT19HTF80KGJsZW5kRnVuY1NlcGFyYXRlLCBCbGVuZEZ1bmNTZXBhcmF0ZSwgdW5z
aWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZykK
KworREVMRUdBVEVfVE9fR0xfNChidWZmZXJEYXRhLCBCdWZmZXJEYXRhLCB1bnNpZ25lZCBsb25n
LCBpbnQsIGNvbnN0IHZvaWQqLCB1bnNpZ25lZCBsb25nKQorCitERUxFR0FURV9UT19HTF80KGJ1
ZmZlclN1YkRhdGEsIEJ1ZmZlclN1YkRhdGEsIHVuc2lnbmVkIGxvbmcsIGxvbmcsIGludCwgY29u
c3Qgdm9pZCopCisKK0RFTEVHQVRFX1RPX0dMXzFSKGNoZWNrRnJhbWVidWZmZXJTdGF0dXMsIENo
ZWNrRnJhbWVidWZmZXJTdGF0dXNFWFQsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpCisK
K0RFTEVHQVRFX1RPX0dMXzEoY2xlYXIsIENsZWFyLCB1bnNpZ25lZCBsb25nKQorCitERUxFR0FU
RV9UT19HTF80KGNsZWFyQ29sb3IsIENsZWFyQ29sb3IsIGRvdWJsZSwgZG91YmxlLCBkb3VibGUs
IGRvdWJsZSkKKworREVMRUdBVEVfVE9fR0xfMShjbGVhckRlcHRoLCBDbGVhckRlcHRoLCBkb3Vi
bGUpCisKK0RFTEVHQVRFX1RPX0dMXzEoY2xlYXJTdGVuY2lsLCBDbGVhclN0ZW5jaWwsIGxvbmcp
CisKK0RFTEVHQVRFX1RPX0dMXzQoY29sb3JNYXNrLCBDb2xvck1hc2ssIGJvb2wsIGJvb2wsIGJv
b2wsIGJvb2wpCisKK0RFTEVHQVRFX1RPX0dMXzEoY29tcGlsZVNoYWRlciwgQ29tcGlsZVNoYWRl
ciwgV2ViR0xJZCkKKworREVMRUdBVEVfVE9fR0xfOChjb3B5VGV4SW1hZ2UyRCwgQ29weVRleElt
YWdlMkQsIHVuc2lnbmVkIGxvbmcsIGxvbmcsIHVuc2lnbmVkIGxvbmcsIGxvbmcsIGxvbmcsIHVu
c2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIGxvbmcpCisKK0RFTEVHQVRFX1RPX0dMXzgoY29w
eVRleFN1YkltYWdlMkQsIENvcHlUZXhTdWJJbWFnZTJELCB1bnNpZ25lZCBsb25nLCBsb25nLCBs
b25nLCBsb25nLCBsb25nLCBsb25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKQorCitE
RUxFR0FURV9UT19HTF8xKGN1bGxGYWNlLCBDdWxsRmFjZSwgdW5zaWduZWQgbG9uZykKKworREVM
RUdBVEVfVE9fR0xfMShkZXB0aEZ1bmMsIERlcHRoRnVuYywgdW5zaWduZWQgbG9uZykKKworREVM
RUdBVEVfVE9fR0xfMShkZXB0aE1hc2ssIERlcHRoTWFzaywgYm9vbCkKKworREVMRUdBVEVfVE9f
R0xfMihkZXB0aFJhbmdlLCBEZXB0aFJhbmdlLCBkb3VibGUsIGRvdWJsZSkKKworREVMRUdBVEVf
VE9fR0xfMihkZXRhY2hTaGFkZXIsIERldGFjaFNoYWRlciwgV2ViR0xJZCwgV2ViR0xJZCkKKwor
REVMRUdBVEVfVE9fR0xfMShkaXNhYmxlLCBEaXNhYmxlLCB1bnNpZ25lZCBsb25nKQorCit2b2lk
IFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJh
eSh1bnNpZ25lZCBsb25nIGluZGV4KQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAg
IGlmIChpbmRleCA8IE51bVRyYWNrZWRQb2ludGVyU3RhdGVzKQorICAgICAgICBtX3ZlcnRleEF0
dHJpYlBvaW50ZXJTdGF0ZVtpbmRleF0uZW5hYmxlZCA9IGZhbHNlOworICAgIGdsRGlzYWJsZVZl
cnRleEF0dHJpYkFycmF5KGluZGV4KTsKK30KKworREVMRUdBVEVfVE9fR0xfMyhkcmF3QXJyYXlz
LCBEcmF3QXJyYXlzLCB1bnNpZ25lZCBsb25nLCBsb25nLCBsb25nKQorCit2b2lkIFdlYkdyYXBo
aWNzQ29udGV4dDNERGVmYXVsdEltcGw6OmRyYXdFbGVtZW50cyh1bnNpZ25lZCBsb25nIG1vZGUs
IHVuc2lnbmVkIGxvbmcgY291bnQsIHVuc2lnbmVkIGxvbmcgdHlwZSwgbG9uZyBvZmZzZXQpCit7
CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgZ2xEcmF3RWxlbWVudHMobW9kZSwgY291
bnQsIHR5cGUsCisgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oc3Rh
dGljX2Nhc3Q8aW50cHRyX3Q+KG9mZnNldCkpKTsKK30KKworREVMRUdBVEVfVE9fR0xfMShlbmFi
bGUsIEVuYWJsZSwgdW5zaWduZWQgbG9uZykKKwordm9pZCBXZWJHcmFwaGljc0NvbnRleHQzRERl
ZmF1bHRJbXBsOjplbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSh1bnNpZ25lZCBsb25nIGluZGV4KQor
eworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmIChpbmRleCA8IE51bVRyYWNrZWRQ
b2ludGVyU3RhdGVzKQorICAgICAgICBtX3ZlcnRleEF0dHJpYlBvaW50ZXJTdGF0ZVtpbmRleF0u
ZW5hYmxlZCA9IHRydWU7CisgICAgZ2xFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShpbmRleCk7Cit9
CisKK0RFTEVHQVRFX1RPX0dMKGZpbmlzaCwgRmluaXNoKQorCitERUxFR0FURV9UT19HTChmbHVz
aCwgRmx1c2gpCisKK0RFTEVHQVRFX1RPX0dMXzQoZnJhbWVidWZmZXJSZW5kZXJidWZmZXIsIEZy
YW1lYnVmZmVyUmVuZGVyYnVmZmVyRVhULCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCB1
bnNpZ25lZCBsb25nLCBXZWJHTElkKQorCitERUxFR0FURV9UT19HTF81KGZyYW1lYnVmZmVyVGV4
dHVyZTJELCBGcmFtZWJ1ZmZlclRleHR1cmUyREVYVCwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQg
bG9uZywgdW5zaWduZWQgbG9uZywgV2ViR0xJZCwgbG9uZykKKworREVMRUdBVEVfVE9fR0xfMShm
cm9udEZhY2UsIEZyb250RmFjZSwgdW5zaWduZWQgbG9uZykKKwordm9pZCBXZWJHcmFwaGljc0Nv
bnRleHQzRERlZmF1bHRJbXBsOjpnZW5lcmF0ZU1pcG1hcCh1bnNpZ25lZCBsb25nIHRhcmdldCkK
K3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoZ2xHZW5lcmF0ZU1pcG1hcEVY
VCkKKyAgICAgICAgZ2xHZW5lcmF0ZU1pcG1hcEVYVCh0YXJnZXQpOworICAgIC8vIEZJWE1FOiBw
cm92aWRlIGFsdGVybmF0aXZlIGNvZGUgcGF0aD8gVGhpcyB3aWxsIGJlIHVucGxlYXNhbnQKKyAg
ICAvLyB0byBpbXBsZW1lbnQgaWYgZ2xHZW5lcmF0ZU1pcG1hcEVYVCBpcyBub3QgYXZhaWxhYmxl
IC0tIGl0IHdpbGwKKyAgICAvLyByZXF1aXJlIGEgdGV4dHVyZSByZWFkYmFjayBhbmQgcmUtdXBs
b2FkLgorfQorCitib29sIFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OmdldEFjdGl2
ZUF0dHJpYihXZWJHTElkIHByb2dyYW0sIHVuc2lnbmVkIGxvbmcgaW5kZXgsIEFjdGl2ZUluZm8m
IGluZm8pCit7CisgICAgaWYgKCFwcm9ncmFtKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIEdM
aW50IG1heE5hbWVMZW5ndGggPSAtMTsKKyAgICBnbEdldFByb2dyYW1pdihwcm9ncmFtLCBHTF9B
Q1RJVkVfQVRUUklCVVRFX01BWF9MRU5HVEgsICZtYXhOYW1lTGVuZ3RoKTsKKyAgICBpZiAobWF4
TmFtZUxlbmd0aCA8IDApCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBHTGNoYXIqIG5hbWUg
PSAwOworICAgIGlmICghdHJ5RmFzdE1hbGxvYyhtYXhOYW1lTGVuZ3RoICogc2l6ZW9mKEdMY2hh
cikpLmdldFZhbHVlKG5hbWUpKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdMX09VVF9P
Rl9NRU1PUlkpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIEdMc2l6ZWkgbGVu
Z3RoID0gMDsKKyAgICBHTGludCBzaXplID0gLTE7CisgICAgR0xlbnVtIHR5cGUgPSAwOworICAg
IGdsR2V0QWN0aXZlQXR0cmliKHByb2dyYW0sIGluZGV4LCBtYXhOYW1lTGVuZ3RoLAorICAgICAg
ICAgICAgICAgICAgICAgICZsZW5ndGgsICZzaXplLCAmdHlwZSwgbmFtZSk7CisgICAgaWYgKHNp
emUgPCAwKSB7CisgICAgICAgIGZhc3RGcmVlKG5hbWUpOworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorICAgIGluZm8ubmFtZSA9IFdlYlN0cmluZzo6ZnJvbVVURjgobmFtZSwgbGVuZ3Ro
KTsKKyAgICBpbmZvLnR5cGUgPSB0eXBlOworICAgIGluZm8uc2l6ZSA9IHNpemU7CisgICAgZmFz
dEZyZWUobmFtZSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgV2ViR3JhcGhpY3NDb250
ZXh0M0REZWZhdWx0SW1wbDo6Z2V0QWN0aXZlVW5pZm9ybShXZWJHTElkIHByb2dyYW0sIHVuc2ln
bmVkIGxvbmcgaW5kZXgsIEFjdGl2ZUluZm8mIGluZm8pCit7CisgICAgR0xpbnQgbWF4TmFtZUxl
bmd0aCA9IC0xOworICAgIGdsR2V0UHJvZ3JhbWl2KHByb2dyYW0sIEdMX0FDVElWRV9VTklGT1JN
X01BWF9MRU5HVEgsICZtYXhOYW1lTGVuZ3RoKTsKKyAgICBpZiAobWF4TmFtZUxlbmd0aCA8IDAp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBHTGNoYXIqIG5hbWUgPSAwOworICAgIGlmICgh
dHJ5RmFzdE1hbGxvYyhtYXhOYW1lTGVuZ3RoICogc2l6ZW9mKEdMY2hhcikpLmdldFZhbHVlKG5h
bWUpKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIEdMc2l6ZWkgbGVuZ3RoID0gMDsKKyAgICBH
TGludCBzaXplID0gLTE7CisgICAgR0xlbnVtIHR5cGUgPSAwOworICAgIGdsR2V0QWN0aXZlVW5p
Zm9ybShwcm9ncmFtLCBpbmRleCwgbWF4TmFtZUxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgJmxlbmd0aCwgJnNpemUsICZ0eXBlLCBuYW1lKTsKKyAgICBpZiAoc2l6ZSA8IDApIHsKKyAg
ICAgICAgZmFzdEZyZWUobmFtZSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAg
aW5mby5uYW1lID0gV2ViU3RyaW5nOjpmcm9tVVRGOChuYW1lLCBsZW5ndGgpOworICAgIGluZm8u
dHlwZSA9IHR5cGU7CisgICAgaW5mby5zaXplID0gc2l6ZTsKKyAgICBmYXN0RnJlZShuYW1lKTsK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworREVMRUdBVEVfVE9fR0xfMlIoZ2V0QXR0cmliTG9jYXRp
b24sIEdldEF0dHJpYkxvY2F0aW9uLCBXZWJHTElkLCBjb25zdCBjaGFyKiwgaW50KQorCitERUxF
R0FURV9UT19HTF8yKGdldEJvb2xlYW52LCBHZXRCb29sZWFudiwgdW5zaWduZWQgbG9uZywgdW5z
aWduZWQgY2hhciopCisKK0RFTEVHQVRFX1RPX0dMXzMoZ2V0QnVmZmVyUGFyYW1ldGVyaXYsIEdl
dEJ1ZmZlclBhcmFtZXRlcml2LCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCBpbnQqKQor
CitXZWJHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBXZWJHcmFwaGljc0NvbnRleHQzRERl
ZmF1bHRJbXBsOjpnZXRDb250ZXh0QXR0cmlidXRlcygpCit7CisgICAgcmV0dXJuIG1fYXR0cmli
dXRlczsKK30KKwordW5zaWduZWQgbG9uZyBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBs
OjpnZXRFcnJvcigpCit7CisgICAgaWYgKG1fc3ludGhldGljRXJyb3JzLnNpemUoKSA+IDApIHsK
KyAgICAgICAgTGlzdEhhc2hTZXQ8dW5zaWduZWQgbG9uZz46Oml0ZXJhdG9yIGl0ZXIgPSBtX3N5
bnRoZXRpY0Vycm9ycy5iZWdpbigpOworICAgICAgICB1bnNpZ25lZCBsb25nIGVyciA9ICppdGVy
OworICAgICAgICBtX3N5bnRoZXRpY0Vycm9ycy5yZW1vdmUoaXRlcik7CisgICAgICAgIHJldHVy
biBlcnI7CisgICAgfQorCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgcmV0dXJuIGds
R2V0RXJyb3IoKTsKK30KKworREVMRUdBVEVfVE9fR0xfMihnZXRGbG9hdHYsIEdldEZsb2F0diwg
dW5zaWduZWQgbG9uZywgZmxvYXQqKQorCitERUxFR0FURV9UT19HTF80KGdldEZyYW1lYnVmZmVy
QXR0YWNobWVudFBhcmFtZXRlcml2LCBHZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJp
dkVYVCwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgaW50KikK
KworREVMRUdBVEVfVE9fR0xfMihnZXRJbnRlZ2VydiwgR2V0SW50ZWdlcnYsIHVuc2lnbmVkIGxv
bmcsIGludCopCisKK0RFTEVHQVRFX1RPX0dMXzMoZ2V0UHJvZ3JhbWl2LCBHZXRQcm9ncmFtaXYs
IFdlYkdMSWQsIHVuc2lnbmVkIGxvbmcsIGludCopCisKK1dlYlN0cmluZyBXZWJHcmFwaGljc0Nv
bnRleHQzRERlZmF1bHRJbXBsOjpnZXRQcm9ncmFtSW5mb0xvZyhXZWJHTElkIHByb2dyYW0pCit7
CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgR0xpbnQgbG9nTGVuZ3RoOworICAgIGds
R2V0UHJvZ3JhbWl2KHByb2dyYW0sIEdMX0lORk9fTE9HX0xFTkdUSCwgJmxvZ0xlbmd0aCk7Cisg
ICAgaWYgKCFsb2dMZW5ndGgpCisgICAgICAgIHJldHVybiBXZWJTdHJpbmcoKTsKKyAgICBHTGNo
YXIqIGxvZyA9IDA7CisgICAgaWYgKCF0cnlGYXN0TWFsbG9jKGxvZ0xlbmd0aCAqIHNpemVvZihH
TGNoYXIpKS5nZXRWYWx1ZShsb2cpKQorICAgICAgICByZXR1cm4gV2ViU3RyaW5nKCk7CisgICAg
R0xzaXplaSByZXR1cm5lZExvZ0xlbmd0aDsKKyAgICBnbEdldFByb2dyYW1JbmZvTG9nKHByb2dy
YW0sIGxvZ0xlbmd0aCwgJnJldHVybmVkTG9nTGVuZ3RoLCBsb2cpOworICAgIEFTU0VSVChsb2dM
ZW5ndGggPT0gcmV0dXJuZWRMb2dMZW5ndGggKyAxKTsKKyAgICBXZWJTdHJpbmcgcmVzID0gV2Vi
U3RyaW5nOjpmcm9tVVRGOChsb2csIHJldHVybmVkTG9nTGVuZ3RoKTsKKyAgICBmYXN0RnJlZShs
b2cpOworICAgIHJldHVybiByZXM7Cit9CisKK0RFTEVHQVRFX1RPX0dMXzMoZ2V0UmVuZGVyYnVm
ZmVyUGFyYW1ldGVyaXYsIEdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcml2RVhULCB1bnNpZ25lZCBs
b25nLCB1bnNpZ25lZCBsb25nLCBpbnQqKQorCitERUxFR0FURV9UT19HTF8zKGdldFNoYWRlcml2
LCBHZXRTaGFkZXJpdiwgV2ViR0xJZCwgdW5zaWduZWQgbG9uZywgaW50KikKKworV2ViU3RyaW5n
IFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OmdldFNoYWRlckluZm9Mb2coV2ViR0xJ
ZCBzaGFkZXIpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgR0xpbnQgbG9nTGVu
Z3RoOworICAgIGdsR2V0U2hhZGVyaXYoc2hhZGVyLCBHTF9JTkZPX0xPR19MRU5HVEgsICZsb2dM
ZW5ndGgpOworICAgIGlmICghbG9nTGVuZ3RoKQorICAgICAgICByZXR1cm4gV2ViU3RyaW5nKCk7
CisgICAgR0xjaGFyKiBsb2cgPSAwOworICAgIGlmICghdHJ5RmFzdE1hbGxvYyhsb2dMZW5ndGgg
KiBzaXplb2YoR0xjaGFyKSkuZ2V0VmFsdWUobG9nKSkKKyAgICAgICAgcmV0dXJuIFdlYlN0cmlu
ZygpOworICAgIEdMc2l6ZWkgcmV0dXJuZWRMb2dMZW5ndGg7CisgICAgZ2xHZXRTaGFkZXJJbmZv
TG9nKHNoYWRlciwgbG9nTGVuZ3RoLCAmcmV0dXJuZWRMb2dMZW5ndGgsIGxvZyk7CisgICAgQVNT
RVJUKGxvZ0xlbmd0aCA9PSByZXR1cm5lZExvZ0xlbmd0aCArIDEpOworICAgIFdlYlN0cmluZyBy
ZXMgPSBXZWJTdHJpbmc6OmZyb21VVEY4KGxvZywgcmV0dXJuZWRMb2dMZW5ndGgpOworICAgIGZh
c3RGcmVlKGxvZyk7CisgICAgcmV0dXJuIHJlczsKK30KKworV2ViU3RyaW5nIFdlYkdyYXBoaWNz
Q29udGV4dDNERGVmYXVsdEltcGw6OmdldFNoYWRlclNvdXJjZShXZWJHTElkIHNoYWRlcikKK3sK
KyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBHTGludCBsb2dMZW5ndGg7CisgICAgZ2xH
ZXRTaGFkZXJpdihzaGFkZXIsIEdMX1NIQURFUl9TT1VSQ0VfTEVOR1RILCAmbG9nTGVuZ3RoKTsK
KyAgICBpZiAoIWxvZ0xlbmd0aCkKKyAgICAgICAgcmV0dXJuIFdlYlN0cmluZygpOworICAgIEdM
Y2hhciogbG9nID0gMDsKKyAgICBpZiAoIXRyeUZhc3RNYWxsb2MobG9nTGVuZ3RoICogc2l6ZW9m
KEdMY2hhcikpLmdldFZhbHVlKGxvZykpCisgICAgICAgIHJldHVybiBXZWJTdHJpbmcoKTsKKyAg
ICBHTHNpemVpIHJldHVybmVkTG9nTGVuZ3RoOworICAgIGdsR2V0U2hhZGVyU291cmNlKHNoYWRl
ciwgbG9nTGVuZ3RoLCAmcmV0dXJuZWRMb2dMZW5ndGgsIGxvZyk7CisgICAgQVNTRVJUKGxvZ0xl
bmd0aCA9PSByZXR1cm5lZExvZ0xlbmd0aCArIDEpOworICAgIFdlYlN0cmluZyByZXMgPSBXZWJT
dHJpbmc6OmZyb21VVEY4KGxvZywgcmV0dXJuZWRMb2dMZW5ndGgpOworICAgIGZhc3RGcmVlKGxv
Zyk7CisgICAgcmV0dXJuIHJlczsKK30KKworV2ViU3RyaW5nIFdlYkdyYXBoaWNzQ29udGV4dDNE
RGVmYXVsdEltcGw6OmdldFN0cmluZyh1bnNpZ25lZCBsb25nIG5hbWUpCit7CisgICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgcmV0dXJuIFdlYlN0cmluZzo6ZnJvbVVURjgocmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCBjaGFyKj4oZ2xHZXRTdHJpbmcobmFtZSkpKTsKK30KKworREVMRUdBVEVf
VE9fR0xfMyhnZXRUZXhQYXJhbWV0ZXJmdiwgR2V0VGV4UGFyYW1ldGVyZnYsIHVuc2lnbmVkIGxv
bmcsIHVuc2lnbmVkIGxvbmcsIGZsb2F0KikKKworREVMRUdBVEVfVE9fR0xfMyhnZXRUZXhQYXJh
bWV0ZXJpdiwgR2V0VGV4UGFyYW1ldGVyaXYsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcs
IGludCopCisKK0RFTEVHQVRFX1RPX0dMXzMoZ2V0VW5pZm9ybWZ2LCBHZXRVbmlmb3JtZnYsIFdl
YkdMSWQsIGxvbmcsIGZsb2F0KikKKworREVMRUdBVEVfVE9fR0xfMyhnZXRVbmlmb3JtaXYsIEdl
dFVuaWZvcm1pdiwgV2ViR0xJZCwgbG9uZywgaW50KikKKworREVMRUdBVEVfVE9fR0xfMlIoZ2V0
VW5pZm9ybUxvY2F0aW9uLCBHZXRVbmlmb3JtTG9jYXRpb24sIFdlYkdMSWQsIGNvbnN0IGNoYXIq
LCBsb25nKQorCitERUxFR0FURV9UT19HTF8zKGdldFZlcnRleEF0dHJpYmZ2LCBHZXRWZXJ0ZXhB
dHRyaWJmdiwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgZmxvYXQqKQorCitERUxFR0FU
RV9UT19HTF8zKGdldFZlcnRleEF0dHJpYml2LCBHZXRWZXJ0ZXhBdHRyaWJpdiwgdW5zaWduZWQg
bG9uZywgdW5zaWduZWQgbG9uZywgaW50KikKKworbG9uZyBXZWJHcmFwaGljc0NvbnRleHQzRERl
ZmF1bHRJbXBsOjpnZXRWZXJ0ZXhBdHRyaWJPZmZzZXQodW5zaWduZWQgbG9uZyBpbmRleCwgdW5z
aWduZWQgbG9uZyBwbmFtZSkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50LgorICAgIG5vdElt
cGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK0RFTEVHQVRFX1RPX0dMXzIoaGludCwg
SGludCwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZykKKworREVMRUdBVEVfVE9fR0xfMVIo
aXNCdWZmZXIsIElzQnVmZmVyLCBXZWJHTElkLCBib29sKQorCitERUxFR0FURV9UT19HTF8xUihp
c0VuYWJsZWQsIElzRW5hYmxlZCwgdW5zaWduZWQgbG9uZywgYm9vbCkKKworREVMRUdBVEVfVE9f
R0xfMVIoaXNGcmFtZWJ1ZmZlciwgSXNGcmFtZWJ1ZmZlciwgV2ViR0xJZCwgYm9vbCkKKworREVM
RUdBVEVfVE9fR0xfMVIoaXNQcm9ncmFtLCBJc1Byb2dyYW0sIFdlYkdMSWQsIGJvb2wpCisKK0RF
TEVHQVRFX1RPX0dMXzFSKGlzUmVuZGVyYnVmZmVyLCBJc1JlbmRlcmJ1ZmZlciwgV2ViR0xJZCwg
Ym9vbCkKKworREVMRUdBVEVfVE9fR0xfMVIoaXNTaGFkZXIsIElzU2hhZGVyLCBXZWJHTElkLCBi
b29sKQorCitERUxFR0FURV9UT19HTF8xUihpc1RleHR1cmUsIElzVGV4dHVyZSwgV2ViR0xJZCwg
Ym9vbCkKKworREVMRUdBVEVfVE9fR0xfMShsaW5lV2lkdGgsIExpbmVXaWR0aCwgZG91YmxlKQor
CitERUxFR0FURV9UT19HTF8xKGxpbmtQcm9ncmFtLCBMaW5rUHJvZ3JhbSwgV2ViR0xJZCkKKwor
REVMRUdBVEVfVE9fR0xfMihwaXhlbFN0b3JlaSwgUGl4ZWxTdG9yZWksIHVuc2lnbmVkIGxvbmcs
IGxvbmcpCisKK0RFTEVHQVRFX1RPX0dMXzIocG9seWdvbk9mZnNldCwgUG9seWdvbk9mZnNldCwg
ZG91YmxlLCBkb3VibGUpCisKK0RFTEVHQVRFX1RPX0dMXzcocmVhZFBpeGVscywgUmVhZFBpeGVs
cywgbG9uZywgbG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9u
ZywgdW5zaWduZWQgbG9uZywgdm9pZCopCisKK3ZvaWQgV2ViR3JhcGhpY3NDb250ZXh0M0REZWZh
dWx0SW1wbDo6cmVsZWFzZVNoYWRlckNvbXBpbGVyKCkKK3sKK30KKworREVMRUdBVEVfVE9fR0xf
NChyZW5kZXJidWZmZXJTdG9yYWdlLCBSZW5kZXJidWZmZXJTdG9yYWdlRVhULCB1bnNpZ25lZCBs
b25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKQorCitERUxF
R0FURV9UT19HTF8yKHNhbXBsZUNvdmVyYWdlLCBTYW1wbGVDb3ZlcmFnZSwgZG91YmxlLCBib29s
KQorCitERUxFR0FURV9UT19HTF80KHNjaXNzb3IsIFNjaXNzb3IsIGxvbmcsIGxvbmcsIHVuc2ln
bmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpCisKK3ZvaWQgV2ViR3JhcGhpY3NDb250ZXh0M0REZWZh
dWx0SW1wbDo6c2hhZGVyU291cmNlKFdlYkdMSWQgc2hhZGVyLCBjb25zdCBjaGFyKiBzdHJpbmcp
Cit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgR0xpbnQgbGVuZ3RoID0gc3RybGVu
KHN0cmluZyk7CisgICAgZ2xTaGFkZXJTb3VyY2Uoc2hhZGVyLCAxLCAmc3RyaW5nLCAmbGVuZ3Ro
KTsKK30KKworREVMRUdBVEVfVE9fR0xfMyhzdGVuY2lsRnVuYywgU3RlbmNpbEZ1bmMsIHVuc2ln
bmVkIGxvbmcsIGxvbmcsIHVuc2lnbmVkIGxvbmcpCisKK0RFTEVHQVRFX1RPX0dMXzQoc3RlbmNp
bEZ1bmNTZXBhcmF0ZSwgU3RlbmNpbEZ1bmNTZXBhcmF0ZSwgdW5zaWduZWQgbG9uZywgdW5zaWdu
ZWQgbG9uZywgbG9uZywgdW5zaWduZWQgbG9uZykKKworREVMRUdBVEVfVE9fR0xfMShzdGVuY2ls
TWFzaywgU3RlbmNpbE1hc2ssIHVuc2lnbmVkIGxvbmcpCisKK0RFTEVHQVRFX1RPX0dMXzIoc3Rl
bmNpbE1hc2tTZXBhcmF0ZSwgU3RlbmNpbE1hc2tTZXBhcmF0ZSwgdW5zaWduZWQgbG9uZywgdW5z
aWduZWQgbG9uZykKKworREVMRUdBVEVfVE9fR0xfMyhzdGVuY2lsT3AsIFN0ZW5jaWxPcCwgdW5z
aWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZykKKworREVMRUdBVEVfVE9f
R0xfNChzdGVuY2lsT3BTZXBhcmF0ZSwgU3RlbmNpbE9wU2VwYXJhdGUsIHVuc2lnbmVkIGxvbmcs
IHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpCisKK0RFTEVHQVRF
X1RPX0dMXzkodGV4SW1hZ2UyRCwgVGV4SW1hZ2UyRCwgdW5zaWduZWQsIHVuc2lnbmVkLCB1bnNp
Z25lZCwgdW5zaWduZWQsIHVuc2lnbmVkLCB1bnNpZ25lZCwgdW5zaWduZWQsIHVuc2lnbmVkLCBj
b25zdCB2b2lkKikKKworREVMRUdBVEVfVE9fR0xfMyh0ZXhQYXJhbWV0ZXJmLCBUZXhQYXJhbWV0
ZXJmLCB1bnNpZ25lZCwgdW5zaWduZWQsIGZsb2F0KTsKKworREVMRUdBVEVfVE9fR0xfMyh0ZXhQ
YXJhbWV0ZXJpLCBUZXhQYXJhbWV0ZXJpLCB1bnNpZ25lZCwgdW5zaWduZWQsIGludCk7CisKK0RF
TEVHQVRFX1RPX0dMXzkodGV4U3ViSW1hZ2UyRCwgVGV4U3ViSW1hZ2UyRCwgdW5zaWduZWQsIHVu
c2lnbmVkLCB1bnNpZ25lZCwgdW5zaWduZWQsIHVuc2lnbmVkLCB1bnNpZ25lZCwgdW5zaWduZWQs
IHVuc2lnbmVkLCBjb25zdCB2b2lkKikKKworREVMRUdBVEVfVE9fR0xfMih1bmlmb3JtMWYsIFVu
aWZvcm0xZiwgbG9uZywgZmxvYXQpCisKK0RFTEVHQVRFX1RPX0dMXzModW5pZm9ybTFmdiwgVW5p
Zm9ybTFmdiwgbG9uZywgaW50LCBmbG9hdCopCisKK0RFTEVHQVRFX1RPX0dMXzIodW5pZm9ybTFp
LCBVbmlmb3JtMWksIGxvbmcsIGludCkKKworREVMRUdBVEVfVE9fR0xfMyh1bmlmb3JtMWl2LCBV
bmlmb3JtMWl2LCBsb25nLCBpbnQsIGludCopCisKK0RFTEVHQVRFX1RPX0dMXzModW5pZm9ybTJm
LCBVbmlmb3JtMmYsIGxvbmcsIGZsb2F0LCBmbG9hdCkKKworREVMRUdBVEVfVE9fR0xfMyh1bmlm
b3JtMmZ2LCBVbmlmb3JtMmZ2LCBsb25nLCBpbnQsIGZsb2F0KikKKworREVMRUdBVEVfVE9fR0xf
Myh1bmlmb3JtMmksIFVuaWZvcm0yaSwgbG9uZywgaW50LCBpbnQpCisKK0RFTEVHQVRFX1RPX0dM
XzModW5pZm9ybTJpdiwgVW5pZm9ybTJpdiwgbG9uZywgaW50LCBpbnQqKQorCitERUxFR0FURV9U
T19HTF80KHVuaWZvcm0zZiwgVW5pZm9ybTNmLCBsb25nLCBmbG9hdCwgZmxvYXQsIGZsb2F0KQor
CitERUxFR0FURV9UT19HTF8zKHVuaWZvcm0zZnYsIFVuaWZvcm0zZnYsIGxvbmcsIGludCwgZmxv
YXQqKQorCitERUxFR0FURV9UT19HTF80KHVuaWZvcm0zaSwgVW5pZm9ybTNpLCBsb25nLCBpbnQs
IGludCwgaW50KQorCitERUxFR0FURV9UT19HTF8zKHVuaWZvcm0zaXYsIFVuaWZvcm0zaXYsIGxv
bmcsIGludCwgaW50KikKKworREVMRUdBVEVfVE9fR0xfNSh1bmlmb3JtNGYsIFVuaWZvcm00Ziwg
bG9uZywgZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQpCisKK0RFTEVHQVRFX1RPX0dMXzModW5p
Zm9ybTRmdiwgVW5pZm9ybTRmdiwgbG9uZywgaW50LCBmbG9hdCopCisKK0RFTEVHQVRFX1RPX0dM
XzUodW5pZm9ybTRpLCBVbmlmb3JtNGksIGxvbmcsIGludCwgaW50LCBpbnQsIGludCkKKworREVM
RUdBVEVfVE9fR0xfMyh1bmlmb3JtNGl2LCBVbmlmb3JtNGl2LCBsb25nLCBpbnQsIGludCopCisK
K0RFTEVHQVRFX1RPX0dMXzQodW5pZm9ybU1hdHJpeDJmdiwgVW5pZm9ybU1hdHJpeDJmdiwgbG9u
ZywgaW50LCBib29sLCBjb25zdCBmbG9hdCopCisKK0RFTEVHQVRFX1RPX0dMXzQodW5pZm9ybU1h
dHJpeDNmdiwgVW5pZm9ybU1hdHJpeDNmdiwgbG9uZywgaW50LCBib29sLCBjb25zdCBmbG9hdCop
CisKK0RFTEVHQVRFX1RPX0dMXzQodW5pZm9ybU1hdHJpeDRmdiwgVW5pZm9ybU1hdHJpeDRmdiwg
bG9uZywgaW50LCBib29sLCBjb25zdCBmbG9hdCopCisKK0RFTEVHQVRFX1RPX0dMXzEodXNlUHJv
Z3JhbSwgVXNlUHJvZ3JhbSwgV2ViR0xJZCkKKworREVMRUdBVEVfVE9fR0xfMSh2YWxpZGF0ZVBy
b2dyYW0sIFZhbGlkYXRlUHJvZ3JhbSwgV2ViR0xJZCkKKworREVMRUdBVEVfVE9fR0xfMih2ZXJ0
ZXhBdHRyaWIxZiwgVmVydGV4QXR0cmliMWYsIHVuc2lnbmVkIGxvbmcsIGZsb2F0KQorCitERUxF
R0FURV9UT19HTF8yKHZlcnRleEF0dHJpYjFmdiwgVmVydGV4QXR0cmliMWZ2LCB1bnNpZ25lZCBs
b25nLCBjb25zdCBmbG9hdCopCisKK0RFTEVHQVRFX1RPX0dMXzModmVydGV4QXR0cmliMmYsIFZl
cnRleEF0dHJpYjJmLCB1bnNpZ25lZCBsb25nLCBmbG9hdCwgZmxvYXQpCisKK0RFTEVHQVRFX1RP
X0dMXzIodmVydGV4QXR0cmliMmZ2LCBWZXJ0ZXhBdHRyaWIyZnYsIHVuc2lnbmVkIGxvbmcsIGNv
bnN0IGZsb2F0KikKKworREVMRUdBVEVfVE9fR0xfNCh2ZXJ0ZXhBdHRyaWIzZiwgVmVydGV4QXR0
cmliM2YsIHVuc2lnbmVkIGxvbmcsIGZsb2F0LCBmbG9hdCwgZmxvYXQpCisKK0RFTEVHQVRFX1RP
X0dMXzIodmVydGV4QXR0cmliM2Z2LCBWZXJ0ZXhBdHRyaWIzZnYsIHVuc2lnbmVkIGxvbmcsIGNv
bnN0IGZsb2F0KikKKworREVMRUdBVEVfVE9fR0xfNSh2ZXJ0ZXhBdHRyaWI0ZiwgVmVydGV4QXR0
cmliNGYsIHVuc2lnbmVkIGxvbmcsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0KQorCitERUxF
R0FURV9UT19HTF8yKHZlcnRleEF0dHJpYjRmdiwgVmVydGV4QXR0cmliNGZ2LCB1bnNpZ25lZCBs
b25nLCBjb25zdCBmbG9hdCopCisKK3ZvaWQgV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1w
bDo6dmVydGV4QXR0cmliUG9pbnRlcih1bnNpZ25lZCBsb25nIGluZHgsIGludCBzaXplLCBpbnQg
dHlwZSwgYm9vbCBub3JtYWxpemVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgc3RyaWRlLCB1bnNpZ25lZCBs
b25nIG9mZnNldCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKworICAgIGlmIChtX2Jv
dW5kQXJyYXlCdWZmZXIgPD0gMCkgeworICAgICAgICAvLyBGSVhNRTogcmFpc2UgZXhjZXB0aW9u
LgorICAgICAgICAvLyBMb2dNZXNzYWdlZigoImJ1ZmZlckRhdGE6IG5vIGJ1ZmZlciBib3VuZCIp
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChpbmR4IDwgTnVtVHJhY2tlZFBv
aW50ZXJTdGF0ZXMpIHsKKyAgICAgICAgVmVydGV4QXR0cmliUG9pbnRlclN0YXRlJiBzdGF0ZSA9
IG1fdmVydGV4QXR0cmliUG9pbnRlclN0YXRlW2luZHhdOworICAgICAgICBzdGF0ZS5idWZmZXIg
PSBtX2JvdW5kQXJyYXlCdWZmZXI7CisgICAgICAgIHN0YXRlLmluZHggPSBpbmR4OworICAgICAg
ICBzdGF0ZS5zaXplID0gc2l6ZTsKKyAgICAgICAgc3RhdGUudHlwZSA9IHR5cGU7CisgICAgICAg
IHN0YXRlLm5vcm1hbGl6ZWQgPSBub3JtYWxpemVkOworICAgICAgICBzdGF0ZS5zdHJpZGUgPSBz
dHJpZGU7CisgICAgICAgIHN0YXRlLm9mZnNldCA9IG9mZnNldDsKKyAgICB9CisKKyAgICBnbFZl
cnRleEF0dHJpYlBvaW50ZXIoaW5keCwgc2l6ZSwgdHlwZSwgbm9ybWFsaXplZCwgc3RyaWRlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PHZvaWQqPihzdGF0aWNf
Y2FzdDxpbnRwdHJfdD4ob2Zmc2V0KSkpOworfQorCitERUxFR0FURV9UT19HTF80KHZpZXdwb3J0
LCBWaWV3cG9ydCwgbG9uZywgbG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZykKKwor
dW5zaWduZWQgV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6Y3JlYXRlQnVmZmVyKCkK
K3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBHTHVpbnQgbzsKKyAgICBnbEdlbkJ1
ZmZlcnMoMSwgJm8pOworICAgIHJldHVybiBvOworfQorCit1bnNpZ25lZCBXZWJHcmFwaGljc0Nv
bnRleHQzRERlZmF1bHRJbXBsOjpjcmVhdGVGcmFtZWJ1ZmZlcigpCit7CisgICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CisgICAgR0x1aW50IG8gPSAwOworICAgIGdsR2VuRnJhbWVidWZmZXJzRVhU
KDEsICZvKTsKKyAgICByZXR1cm4gbzsKK30KKwordW5zaWduZWQgV2ViR3JhcGhpY3NDb250ZXh0
M0REZWZhdWx0SW1wbDo6Y3JlYXRlUHJvZ3JhbSgpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7CisgICAgcmV0dXJuIGdsQ3JlYXRlUHJvZ3JhbSgpOworfQorCit1bnNpZ25lZCBXZWJHcmFw
aGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpjcmVhdGVSZW5kZXJidWZmZXIoKQoreworICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOworICAgIEdMdWludCBvOworICAgIGdsR2VuUmVuZGVyYnVmZmVy
c0VYVCgxLCAmbyk7CisgICAgcmV0dXJuIG87Cit9CisKK0RFTEVHQVRFX1RPX0dMXzFSKGNyZWF0
ZVNoYWRlciwgQ3JlYXRlU2hhZGVyLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCk7CisKK3Vuc2ln
bmVkIFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OmNyZWF0ZVRleHR1cmUoKQorewor
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIEdMdWludCBvOworICAgIGdsR2VuVGV4dHVy
ZXMoMSwgJm8pOworICAgIHJldHVybiBvOworfQorCit2b2lkIFdlYkdyYXBoaWNzQ29udGV4dDNE
RGVmYXVsdEltcGw6OmRlbGV0ZUJ1ZmZlcih1bnNpZ25lZCBidWZmZXIpCit7CisgICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgZ2xEZWxldGVCdWZmZXJzKDEsICZidWZmZXIpOworfQorCit2
b2lkIFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OmRlbGV0ZUZyYW1lYnVmZmVyKHVu
c2lnbmVkIGZyYW1lYnVmZmVyKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGds
RGVsZXRlRnJhbWVidWZmZXJzRVhUKDEsICZmcmFtZWJ1ZmZlcik7Cit9CisKK3ZvaWQgV2ViR3Jh
cGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6ZGVsZXRlUHJvZ3JhbSh1bnNpZ25lZCBwcm9ncmFt
KQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGdsRGVsZXRlUHJvZ3JhbShwcm9n
cmFtKTsKK30KKwordm9pZCBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpkZWxldGVS
ZW5kZXJidWZmZXIodW5zaWduZWQgcmVuZGVyYnVmZmVyKQoreworICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIGdsRGVsZXRlUmVuZGVyYnVmZmVyc0VYVCgxLCAmcmVuZGVyYnVmZmVyKTsK
K30KKwordm9pZCBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpkZWxldGVTaGFkZXIo
dW5zaWduZWQgc2hhZGVyKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGdsRGVs
ZXRlU2hhZGVyKHNoYWRlcik7Cit9CisKK3ZvaWQgV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0
SW1wbDo6ZGVsZXRlVGV4dHVyZSh1bnNpZ25lZCB0ZXh0dXJlKQoreworICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOworICAgIGdsRGVsZXRlVGV4dHVyZXMoMSwgJnRleHR1cmUpOworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRSgzRF9DQU5WQVMpCkluZGV4OiBX
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGwuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVs
dEltcGwuaAkocmV2aXNpb24gMCkKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViR3JhcGhpY3ND
b250ZXh0M0REZWZhdWx0SW1wbC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQwOSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBk
aXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
CisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICog
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5k
ZWYgV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbF9oCisjZGVmaW5lIFdlYkdyYXBoaWNz
Q29udGV4dDNERGVmYXVsdEltcGxfaAorCisjaWYgRU5BQkxFKDNEX0NBTlZBUykKKworI2luY2x1
ZGUgIldlYkdyYXBoaWNzQ29udGV4dDNELmgiCisKKyNpbmNsdWRlIDx3dGYvTGlzdEhhc2hTZXQu
aD4KKworI2lmIE9TKFdJTkRPV1MpCisjaW5jbHVkZSA8d2luZG93cy5oPgorI2VuZGlmCisKKyNp
bmNsdWRlICJHTC9nbGV3LmgiCisKKyNpZiBQTEFURk9STShDRykKKyNpbmNsdWRlIDxPcGVuR0wv
T3BlbkdMLmg+CisjZWxzZQorI2RlZmluZSBGTElQX0ZSQU1FQlVGRkVSX1ZFUlRJQ0FMTFkKKyNl
bmRpZgorCisjaWYgT1MoTElOVVgpCisjaW5jbHVkZSAiR0wvZ2x4ZXcuaCIKKyNlbmRpZgorCitu
YW1lc3BhY2UgV2ViS2l0IHsKKworLy8gVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gb2YgV2Vi
R0wuIEluIENocm9taXVtLCB1c2luZyB0aGlzIGNsYXNzCisvLyByZXF1aXJlcyB0aGUgc2FuZGJv
eCB0byBiZSBkaXNhYmxlZCwgd2hpY2ggaXMgc3Ryb25nbHkgZGlzY291cmFnZWQuCisvLyBJdCBp
cyBwcm92aWRlZCBmb3Igc3VwcG9ydCBvZiB0ZXN0X3NoZWxsIGFuZCBhbnkgQ2hyb21pdW0gcG9y
dHMKKy8vIHdoZXJlIGFuIGluLXJlbmRlcmVyIFdlYkdMIGltcGxlbWVudGF0aW9uIHdvdWxkIGJl
IGhlbHBmdWwuCisKK2NsYXNzIFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGwgOiBwdWJs
aWMgV2ViR3JhcGhpY3NDb250ZXh0M0QgeworcHVibGljOgorICAgIFdlYkdyYXBoaWNzQ29udGV4
dDNERGVmYXVsdEltcGwoKTsKKyAgICB2aXJ0dWFsIH5XZWJHcmFwaGljc0NvbnRleHQzRERlZmF1
bHRJbXBsKCk7CisKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBXZWJHcmFwaGljc0NvbnRl
eHQzRCBtZXRob2RzCisgICAgdmlydHVhbCBib29sIGluaXRpYWxpemUoV2ViR3JhcGhpY3NDb250
ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cmlidXRlcyk7CisgICAgdmlydHVhbCBib29sIG1ha2VDb250
ZXh0Q3VycmVudCgpOworCisgICAgdmlydHVhbCBpbnQgd2lkdGgoKTsKKyAgICB2aXJ0dWFsIGlu
dCBoZWlnaHQoKTsKKworICAgIHZpcnR1YWwgaW50IHNpemVJbkJ5dGVzKGludCB0eXBlKTsKKwor
ICAgIHZpcnR1YWwgdm9pZCByZXNoYXBlKGludCB3aWR0aCwgaW50IGhlaWdodCk7CisKKyAgICB2
aXJ0dWFsIGJvb2wgcmVhZEJhY2tGcmFtZWJ1ZmZlcih1bnNpZ25lZCBjaGFyKiBwaXhlbHMsIHNp
emVfdCBidWZmZXJTaXplKTsKKworICAgIHZpcnR1YWwgdm9pZCBzeW50aGVzaXplR0xFcnJvcih1
bnNpZ25lZCBsb25nIGVycm9yKTsKKworICAgIHZpcnR1YWwgdm9pZCBhY3RpdmVUZXh0dXJlKHVu
c2lnbmVkIGxvbmcgdGV4dHVyZSk7CisgICAgdmlydHVhbCB2b2lkIGF0dGFjaFNoYWRlcihXZWJH
TElkIHByb2dyYW0sIFdlYkdMSWQgc2hhZGVyKTsKKyAgICB2aXJ0dWFsIHZvaWQgYmluZEF0dHJp
YkxvY2F0aW9uKFdlYkdMSWQgcHJvZ3JhbSwgdW5zaWduZWQgbG9uZyBpbmRleCwgY29uc3QgY2hh
ciogbmFtZSk7CisgICAgdmlydHVhbCB2b2lkIGJpbmRCdWZmZXIodW5zaWduZWQgbG9uZyB0YXJn
ZXQsIFdlYkdMSWQgYnVmZmVyKTsKKyAgICB2aXJ0dWFsIHZvaWQgYmluZEZyYW1lYnVmZmVyKHVu
c2lnbmVkIGxvbmcgdGFyZ2V0LCBXZWJHTElkIGZyYW1lYnVmZmVyKTsKKyAgICB2aXJ0dWFsIHZv
aWQgYmluZFJlbmRlcmJ1ZmZlcih1bnNpZ25lZCBsb25nIHRhcmdldCwgV2ViR0xJZCByZW5kZXJi
dWZmZXIpOworICAgIHZpcnR1YWwgdm9pZCBiaW5kVGV4dHVyZSh1bnNpZ25lZCBsb25nIHRhcmdl
dCwgV2ViR0xJZCB0ZXh0dXJlKTsKKyAgICB2aXJ0dWFsIHZvaWQgYmxlbmRDb2xvcihkb3VibGUg
cmVkLCBkb3VibGUgZ3JlZW4sIGRvdWJsZSBibHVlLCBkb3VibGUgYWxwaGEpOworICAgIHZpcnR1
YWwgdm9pZCBibGVuZEVxdWF0aW9uKHVuc2lnbmVkIGxvbmcgbW9kZSk7CisgICAgdmlydHVhbCB2
b2lkIGJsZW5kRXF1YXRpb25TZXBhcmF0ZSh1bnNpZ25lZCBsb25nIG1vZGVSR0IsIHVuc2lnbmVk
IGxvbmcgbW9kZUFscGhhKTsKKyAgICB2aXJ0dWFsIHZvaWQgYmxlbmRGdW5jKHVuc2lnbmVkIGxv
bmcgc2ZhY3RvciwgdW5zaWduZWQgbG9uZyBkZmFjdG9yKTsKKyAgICB2aXJ0dWFsIHZvaWQgYmxl
bmRGdW5jU2VwYXJhdGUodW5zaWduZWQgbG9uZyBzcmNSR0IsIHVuc2lnbmVkIGxvbmcgZHN0UkdC
LCB1bnNpZ25lZCBsb25nIHNyY0FscGhhLCB1bnNpZ25lZCBsb25nIGRzdEFscGhhKTsKKworICAg
IHZpcnR1YWwgdm9pZCBidWZmZXJEYXRhKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBpbnQgc2l6ZSwg
Y29uc3Qgdm9pZCogZGF0YSwgdW5zaWduZWQgbG9uZyB1c2FnZSk7CisgICAgdmlydHVhbCB2b2lk
IGJ1ZmZlclN1YkRhdGEodW5zaWduZWQgbG9uZyB0YXJnZXQsIGxvbmcgb2Zmc2V0LCBpbnQgc2l6
ZSwgY29uc3Qgdm9pZCogZGF0YSk7CisKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGxvbmcgY2hlY2tG
cmFtZWJ1ZmZlclN0YXR1cyh1bnNpZ25lZCBsb25nIHRhcmdldCk7CisgICAgdmlydHVhbCB2b2lk
IGNsZWFyKHVuc2lnbmVkIGxvbmcgbWFzayk7CisgICAgdmlydHVhbCB2b2lkIGNsZWFyQ29sb3Io
ZG91YmxlIHJlZCwgZG91YmxlIGdyZWVuLCBkb3VibGUgYmx1ZSwgZG91YmxlIGFscGhhKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgY2xlYXJEZXB0aChkb3VibGUgZGVwdGgpOworICAgIHZpcnR1YWwgdm9p
ZCBjbGVhclN0ZW5jaWwobG9uZyBzKTsKKyAgICB2aXJ0dWFsIHZvaWQgY29sb3JNYXNrKGJvb2wg
cmVkLCBib29sIGdyZWVuLCBib29sIGJsdWUsIGJvb2wgYWxwaGEpOworICAgIHZpcnR1YWwgdm9p
ZCBjb21waWxlU2hhZGVyKFdlYkdMSWQgc2hhZGVyKTsKKworICAgIHZpcnR1YWwgdm9pZCBjb3B5
VGV4SW1hZ2UyRCh1bnNpZ25lZCBsb25nIHRhcmdldCwgbG9uZyBsZXZlbCwgdW5zaWduZWQgbG9u
ZyBpbnRlcm5hbGZvcm1hdCwgbG9uZyB4LCBsb25nIHksIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVu
c2lnbmVkIGxvbmcgaGVpZ2h0LCBsb25nIGJvcmRlcik7CisgICAgdmlydHVhbCB2b2lkIGNvcHlU
ZXhTdWJJbWFnZTJEKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBsb25nIGxldmVsLCBsb25nIHhvZmZz
ZXQsIGxvbmcgeW9mZnNldCwgbG9uZyB4LCBsb25nIHksIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVu
c2lnbmVkIGxvbmcgaGVpZ2h0KTsKKyAgICB2aXJ0dWFsIHZvaWQgY3VsbEZhY2UodW5zaWduZWQg
bG9uZyBtb2RlKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVwdGhGdW5jKHVuc2lnbmVkIGxvbmcgZnVu
Yyk7CisgICAgdmlydHVhbCB2b2lkIGRlcHRoTWFzayhib29sIGZsYWcpOworICAgIHZpcnR1YWwg
dm9pZCBkZXB0aFJhbmdlKGRvdWJsZSB6TmVhciwgZG91YmxlIHpGYXIpOworICAgIHZpcnR1YWwg
dm9pZCBkZXRhY2hTaGFkZXIoV2ViR0xJZCBwcm9ncmFtLCBXZWJHTElkIHNoYWRlcik7CisgICAg
dmlydHVhbCB2b2lkIGRpc2FibGUodW5zaWduZWQgbG9uZyBjYXApOworICAgIHZpcnR1YWwgdm9p
ZCBkaXNhYmxlVmVydGV4QXR0cmliQXJyYXkodW5zaWduZWQgbG9uZyBpbmRleCk7CisgICAgdmly
dHVhbCB2b2lkIGRyYXdBcnJheXModW5zaWduZWQgbG9uZyBtb2RlLCBsb25nIGZpcnN0LCBsb25n
IGNvdW50KTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0VsZW1lbnRzKHVuc2lnbmVkIGxvbmcgbW9k
ZSwgdW5zaWduZWQgbG9uZyBjb3VudCwgdW5zaWduZWQgbG9uZyB0eXBlLCBsb25nIG9mZnNldCk7
CisKKyAgICB2aXJ0dWFsIHZvaWQgZW5hYmxlKHVuc2lnbmVkIGxvbmcgY2FwKTsKKyAgICB2aXJ0
dWFsIHZvaWQgZW5hYmxlVmVydGV4QXR0cmliQXJyYXkodW5zaWduZWQgbG9uZyBpbmRleCk7Cisg
ICAgdmlydHVhbCB2b2lkIGZpbmlzaCgpOworICAgIHZpcnR1YWwgdm9pZCBmbHVzaCgpOworICAg
IHZpcnR1YWwgdm9pZCBmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcih1bnNpZ25lZCBsb25nIHRhcmdl
dCwgdW5zaWduZWQgbG9uZyBhdHRhY2htZW50LCB1bnNpZ25lZCBsb25nIHJlbmRlcmJ1ZmZlcnRh
cmdldCwgV2ViR0xJZCByZW5kZXJidWZmZXIpOworICAgIHZpcnR1YWwgdm9pZCBmcmFtZWJ1ZmZl
clRleHR1cmUyRCh1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBhdHRhY2htZW50
LCB1bnNpZ25lZCBsb25nIHRleHRhcmdldCwgV2ViR0xJZCB0ZXh0dXJlLCBsb25nIGxldmVsKTsK
KyAgICB2aXJ0dWFsIHZvaWQgZnJvbnRGYWNlKHVuc2lnbmVkIGxvbmcgbW9kZSk7CisgICAgdmly
dHVhbCB2b2lkIGdlbmVyYXRlTWlwbWFwKHVuc2lnbmVkIGxvbmcgdGFyZ2V0KTsKKworICAgIHZp
cnR1YWwgYm9vbCBnZXRBY3RpdmVBdHRyaWIoV2ViR0xJZCBwcm9ncmFtLCB1bnNpZ25lZCBsb25n
IGluZGV4LCBBY3RpdmVJbmZvJik7CisgICAgdmlydHVhbCBib29sIGdldEFjdGl2ZVVuaWZvcm0o
V2ViR0xJZCBwcm9ncmFtLCB1bnNpZ25lZCBsb25nIGluZGV4LCBBY3RpdmVJbmZvJik7CisKKyAg
ICB2aXJ0dWFsIGludCAgZ2V0QXR0cmliTG9jYXRpb24oV2ViR0xJZCBwcm9ncmFtLCBjb25zdCBj
aGFyKiBuYW1lKTsKKworICAgIHZpcnR1YWwgdm9pZCBnZXRCb29sZWFudih1bnNpZ25lZCBsb25n
IHBuYW1lLCB1bnNpZ25lZCBjaGFyKiB2YWx1ZSk7CisKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0QnVm
ZmVyUGFyYW1ldGVyaXYodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgcG5hbWUs
IGludCogdmFsdWUpOworCisgICAgdmlydHVhbCBBdHRyaWJ1dGVzIGdldENvbnRleHRBdHRyaWJ1
dGVzKCk7CisKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGxvbmcgZ2V0RXJyb3IoKTsKKworICAgIHZp
cnR1YWwgdm9pZCBnZXRGbG9hdHYodW5zaWduZWQgbG9uZyBwbmFtZSwgZmxvYXQqIHZhbHVlKTsK
KworICAgIHZpcnR1YWwgdm9pZCBnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpdih1
bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBhdHRhY2htZW50LCB1bnNpZ25lZCBs
b25nIHBuYW1lLCBpbnQqIHZhbHVlKTsKKworICAgIHZpcnR1YWwgdm9pZCBnZXRJbnRlZ2Vydih1
bnNpZ25lZCBsb25nIHBuYW1lLCBpbnQqIHZhbHVlKTsKKworICAgIHZpcnR1YWwgdm9pZCBnZXRQ
cm9ncmFtaXYoV2ViR0xJZCBwcm9ncmFtLCB1bnNpZ25lZCBsb25nIHBuYW1lLCBpbnQqIHZhbHVl
KTsKKworICAgIHZpcnR1YWwgV2ViU3RyaW5nIGdldFByb2dyYW1JbmZvTG9nKFdlYkdMSWQgcHJv
Z3JhbSk7CisKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXYodW5z
aWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgcG5hbWUsIGludCogdmFsdWUpOworCisg
ICAgdmlydHVhbCB2b2lkIGdldFNoYWRlcml2KFdlYkdMSWQgc2hhZGVyLCB1bnNpZ25lZCBsb25n
IHBuYW1lLCBpbnQqIHZhbHVlKTsKKworICAgIHZpcnR1YWwgV2ViU3RyaW5nIGdldFNoYWRlcklu
Zm9Mb2coV2ViR0xJZCBzaGFkZXIpOworCisgICAgLy8gVEJECisgICAgLy8gdm9pZCBnbEdldFNo
YWRlclByZWNpc2lvbkZvcm1hdCAoR0xlbnVtIHNoYWRlcnR5cGUsIEdMZW51bSBwcmVjaXNpb250
eXBlLCBHTGludCogcmFuZ2UsIEdMaW50KiBwcmVjaXNpb24pOworCisgICAgdmlydHVhbCBXZWJT
dHJpbmcgZ2V0U2hhZGVyU291cmNlKFdlYkdMSWQgc2hhZGVyKTsKKyAgICB2aXJ0dWFsIFdlYlN0
cmluZyBnZXRTdHJpbmcodW5zaWduZWQgbG9uZyBuYW1lKTsKKworICAgIHZpcnR1YWwgdm9pZCBn
ZXRUZXhQYXJhbWV0ZXJmdih1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBwbmFt
ZSwgZmxvYXQqIHZhbHVlKTsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0VGV4UGFyYW1ldGVyaXYodW5z
aWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgcG5hbWUsIGludCogdmFsdWUpOworCisg
ICAgdmlydHVhbCB2b2lkIGdldFVuaWZvcm1mdihXZWJHTElkIHByb2dyYW0sIGxvbmcgbG9jYXRp
b24sIGZsb2F0KiB2YWx1ZSk7CisgICAgdmlydHVhbCB2b2lkIGdldFVuaWZvcm1pdihXZWJHTElk
IHByb2dyYW0sIGxvbmcgbG9jYXRpb24sIGludCogdmFsdWUpOworCisgICAgdmlydHVhbCBsb25n
IGdldFVuaWZvcm1Mb2NhdGlvbihXZWJHTElkIHByb2dyYW0sIGNvbnN0IGNoYXIqIG5hbWUpOwor
CisgICAgdmlydHVhbCB2b2lkIGdldFZlcnRleEF0dHJpYmZ2KHVuc2lnbmVkIGxvbmcgaW5kZXgs
IHVuc2lnbmVkIGxvbmcgcG5hbWUsIGZsb2F0KiB2YWx1ZSk7CisgICAgdmlydHVhbCB2b2lkIGdl
dFZlcnRleEF0dHJpYml2KHVuc2lnbmVkIGxvbmcgaW5kZXgsIHVuc2lnbmVkIGxvbmcgcG5hbWUs
IGludCogdmFsdWUpOworCisgICAgdmlydHVhbCBsb25nIGdldFZlcnRleEF0dHJpYk9mZnNldCh1
bnNpZ25lZCBsb25nIGluZGV4LCB1bnNpZ25lZCBsb25nIHBuYW1lKTsKKworICAgIHZpcnR1YWwg
dm9pZCBoaW50KHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIG1vZGUpOworICAg
IHZpcnR1YWwgYm9vbCBpc0J1ZmZlcihXZWJHTElkIGJ1ZmZlcik7CisgICAgdmlydHVhbCBib29s
IGlzRW5hYmxlZCh1bnNpZ25lZCBsb25nIGNhcCk7CisgICAgdmlydHVhbCBib29sIGlzRnJhbWVi
dWZmZXIoV2ViR0xJZCBmcmFtZWJ1ZmZlcik7CisgICAgdmlydHVhbCBib29sIGlzUHJvZ3JhbShX
ZWJHTElkIHByb2dyYW0pOworICAgIHZpcnR1YWwgYm9vbCBpc1JlbmRlcmJ1ZmZlcihXZWJHTElk
IHJlbmRlcmJ1ZmZlcik7CisgICAgdmlydHVhbCBib29sIGlzU2hhZGVyKFdlYkdMSWQgc2hhZGVy
KTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNUZXh0dXJlKFdlYkdMSWQgdGV4dHVyZSk7CisgICAgdmly
dHVhbCB2b2lkIGxpbmVXaWR0aChkb3VibGUpOworICAgIHZpcnR1YWwgdm9pZCBsaW5rUHJvZ3Jh
bShXZWJHTElkIHByb2dyYW0pOworICAgIHZpcnR1YWwgdm9pZCBwaXhlbFN0b3JlaSh1bnNpZ25l
ZCBsb25nIHBuYW1lLCBsb25nIHBhcmFtKTsKKyAgICB2aXJ0dWFsIHZvaWQgcG9seWdvbk9mZnNl
dChkb3VibGUgZmFjdG9yLCBkb3VibGUgdW5pdHMpOworCisgICAgdmlydHVhbCB2b2lkIHJlYWRQ
aXhlbHMobG9uZyB4LCBsb25nIHksIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcg
aGVpZ2h0LCB1bnNpZ25lZCBsb25nIGZvcm1hdCwgdW5zaWduZWQgbG9uZyB0eXBlLCB2b2lkKiBw
aXhlbHMpOworCisgICAgdmlydHVhbCB2b2lkIHJlbGVhc2VTaGFkZXJDb21waWxlcigpOworICAg
IHZpcnR1YWwgdm9pZCByZW5kZXJidWZmZXJTdG9yYWdlKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1
bnNpZ25lZCBsb25nIGludGVybmFsZm9ybWF0LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25l
ZCBsb25nIGhlaWdodCk7CisgICAgdmlydHVhbCB2b2lkIHNhbXBsZUNvdmVyYWdlKGRvdWJsZSB2
YWx1ZSwgYm9vbCBpbnZlcnQpOworICAgIHZpcnR1YWwgdm9pZCBzY2lzc29yKGxvbmcgeCwgbG9u
ZyB5LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCk7CisgICAgdmly
dHVhbCB2b2lkIHNoYWRlclNvdXJjZShXZWJHTElkIHNoYWRlciwgY29uc3QgY2hhciogc3RyaW5n
KTsKKyAgICB2aXJ0dWFsIHZvaWQgc3RlbmNpbEZ1bmModW5zaWduZWQgbG9uZyBmdW5jLCBsb25n
IHJlZiwgdW5zaWduZWQgbG9uZyBtYXNrKTsKKyAgICB2aXJ0dWFsIHZvaWQgc3RlbmNpbEZ1bmNT
ZXBhcmF0ZSh1bnNpZ25lZCBsb25nIGZhY2UsIHVuc2lnbmVkIGxvbmcgZnVuYywgbG9uZyByZWYs
IHVuc2lnbmVkIGxvbmcgbWFzayk7CisgICAgdmlydHVhbCB2b2lkIHN0ZW5jaWxNYXNrKHVuc2ln
bmVkIGxvbmcgbWFzayk7CisgICAgdmlydHVhbCB2b2lkIHN0ZW5jaWxNYXNrU2VwYXJhdGUodW5z
aWduZWQgbG9uZyBmYWNlLCB1bnNpZ25lZCBsb25nIG1hc2spOworICAgIHZpcnR1YWwgdm9pZCBz
dGVuY2lsT3AodW5zaWduZWQgbG9uZyBmYWlsLCB1bnNpZ25lZCBsb25nIHpmYWlsLCB1bnNpZ25l
ZCBsb25nIHpwYXNzKTsKKyAgICB2aXJ0dWFsIHZvaWQgc3RlbmNpbE9wU2VwYXJhdGUodW5zaWdu
ZWQgbG9uZyBmYWNlLCB1bnNpZ25lZCBsb25nIGZhaWwsIHVuc2lnbmVkIGxvbmcgemZhaWwsIHVu
c2lnbmVkIGxvbmcgenBhc3MpOworCisgICAgdmlydHVhbCB2b2lkIHRleEltYWdlMkQodW5zaWdu
ZWQgdGFyZ2V0LCB1bnNpZ25lZCBsZXZlbCwgdW5zaWduZWQgaW50ZXJuYWxmb3JtYXQsIHVuc2ln
bmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQsIHVuc2lnbmVkIGJvcmRlciwgdW5zaWduZWQgZm9y
bWF0LCB1bnNpZ25lZCB0eXBlLCBjb25zdCB2b2lkKiBwaXhlbHMpOworCisgICAgdmlydHVhbCB2
b2lkIHRleFBhcmFtZXRlcmYodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBwbmFtZSwgZmxvYXQg
cGFyYW0pOworICAgIHZpcnR1YWwgdm9pZCB0ZXhQYXJhbWV0ZXJpKHVuc2lnbmVkIHRhcmdldCwg
dW5zaWduZWQgcG5hbWUsIGludCBwYXJhbSk7CisKKyAgICB2aXJ0dWFsIHZvaWQgdGV4U3ViSW1h
Z2UyRCh1bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVkIGxldmVsLCB1bnNpZ25lZCB4b2Zmc2V0LCB1
bnNpZ25lZCB5b2Zmc2V0LCB1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0LCB1bnNpZ25l
ZCBmb3JtYXQsIHVuc2lnbmVkIHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVscyk7CisKKyAgICB2aXJ0
dWFsIHZvaWQgdW5pZm9ybTFmKGxvbmcgbG9jYXRpb24sIGZsb2F0IHgpOworICAgIHZpcnR1YWwg
dm9pZCB1bmlmb3JtMWZ2KGxvbmcgbG9jYXRpb24sIGludCBjb3VudCwgZmxvYXQqIHYpOworICAg
IHZpcnR1YWwgdm9pZCB1bmlmb3JtMWkobG9uZyBsb2NhdGlvbiwgaW50IHgpOworICAgIHZpcnR1
YWwgdm9pZCB1bmlmb3JtMWl2KGxvbmcgbG9jYXRpb24sIGludCBjb3VudCwgaW50KiB2KTsKKyAg
ICB2aXJ0dWFsIHZvaWQgdW5pZm9ybTJmKGxvbmcgbG9jYXRpb24sIGZsb2F0IHgsIGZsb2F0IHkp
OworICAgIHZpcnR1YWwgdm9pZCB1bmlmb3JtMmZ2KGxvbmcgbG9jYXRpb24sIGludCBjb3VudCwg
ZmxvYXQqIHYpOworICAgIHZpcnR1YWwgdm9pZCB1bmlmb3JtMmkobG9uZyBsb2NhdGlvbiwgaW50
IHgsIGludCB5KTsKKyAgICB2aXJ0dWFsIHZvaWQgdW5pZm9ybTJpdihsb25nIGxvY2F0aW9uLCBp
bnQgY291bnQsIGludCogdik7CisgICAgdmlydHVhbCB2b2lkIHVuaWZvcm0zZihsb25nIGxvY2F0
aW9uLCBmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB6KTsKKyAgICB2aXJ0dWFsIHZvaWQgdW5pZm9y
bTNmdihsb25nIGxvY2F0aW9uLCBpbnQgY291bnQsIGZsb2F0KiB2KTsKKyAgICB2aXJ0dWFsIHZv
aWQgdW5pZm9ybTNpKGxvbmcgbG9jYXRpb24sIGludCB4LCBpbnQgeSwgaW50IHopOworICAgIHZp
cnR1YWwgdm9pZCB1bmlmb3JtM2l2KGxvbmcgbG9jYXRpb24sIGludCBjb3VudCwgaW50KiB2KTsK
KyAgICB2aXJ0dWFsIHZvaWQgdW5pZm9ybTRmKGxvbmcgbG9jYXRpb24sIGZsb2F0IHgsIGZsb2F0
IHksIGZsb2F0IHosIGZsb2F0IHcpOworICAgIHZpcnR1YWwgdm9pZCB1bmlmb3JtNGZ2KGxvbmcg
bG9jYXRpb24sIGludCBjb3VudCwgZmxvYXQqIHYpOworICAgIHZpcnR1YWwgdm9pZCB1bmlmb3Jt
NGkobG9uZyBsb2NhdGlvbiwgaW50IHgsIGludCB5LCBpbnQgeiwgaW50IHcpOworICAgIHZpcnR1
YWwgdm9pZCB1bmlmb3JtNGl2KGxvbmcgbG9jYXRpb24sIGludCBjb3VudCwgaW50KiB2KTsKKyAg
ICB2aXJ0dWFsIHZvaWQgdW5pZm9ybU1hdHJpeDJmdihsb25nIGxvY2F0aW9uLCBpbnQgY291bnQs
IGJvb2wgdHJhbnNwb3NlLCBjb25zdCBmbG9hdCogdmFsdWUpOworICAgIHZpcnR1YWwgdm9pZCB1
bmlmb3JtTWF0cml4M2Z2KGxvbmcgbG9jYXRpb24sIGludCBjb3VudCwgYm9vbCB0cmFuc3Bvc2Us
IGNvbnN0IGZsb2F0KiB2YWx1ZSk7CisgICAgdmlydHVhbCB2b2lkIHVuaWZvcm1NYXRyaXg0ZnYo
bG9uZyBsb2NhdGlvbiwgaW50IGNvdW50LCBib29sIHRyYW5zcG9zZSwgY29uc3QgZmxvYXQqIHZh
bHVlKTsKKworICAgIHZpcnR1YWwgdm9pZCB1c2VQcm9ncmFtKFdlYkdMSWQgcHJvZ3JhbSk7Cisg
ICAgdmlydHVhbCB2b2lkIHZhbGlkYXRlUHJvZ3JhbShXZWJHTElkIHByb2dyYW0pOworCisgICAg
dmlydHVhbCB2b2lkIHZlcnRleEF0dHJpYjFmKHVuc2lnbmVkIGxvbmcgaW5keCwgZmxvYXQgeCk7
CisgICAgdmlydHVhbCB2b2lkIHZlcnRleEF0dHJpYjFmdih1bnNpZ25lZCBsb25nIGluZHgsIGNv
bnN0IGZsb2F0KiB2YWx1ZXMpOworICAgIHZpcnR1YWwgdm9pZCB2ZXJ0ZXhBdHRyaWIyZih1bnNp
Z25lZCBsb25nIGluZHgsIGZsb2F0IHgsIGZsb2F0IHkpOworICAgIHZpcnR1YWwgdm9pZCB2ZXJ0
ZXhBdHRyaWIyZnYodW5zaWduZWQgbG9uZyBpbmR4LCBjb25zdCBmbG9hdCogdmFsdWVzKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgdmVydGV4QXR0cmliM2YodW5zaWduZWQgbG9uZyBpbmR4LCBmbG9hdCB4
LCBmbG9hdCB5LCBmbG9hdCB6KTsKKyAgICB2aXJ0dWFsIHZvaWQgdmVydGV4QXR0cmliM2Z2KHVu
c2lnbmVkIGxvbmcgaW5keCwgY29uc3QgZmxvYXQqIHZhbHVlcyk7CisgICAgdmlydHVhbCB2b2lk
IHZlcnRleEF0dHJpYjRmKHVuc2lnbmVkIGxvbmcgaW5keCwgZmxvYXQgeCwgZmxvYXQgeSwgZmxv
YXQgeiwgZmxvYXQgdyk7CisgICAgdmlydHVhbCB2b2lkIHZlcnRleEF0dHJpYjRmdih1bnNpZ25l
ZCBsb25nIGluZHgsIGNvbnN0IGZsb2F0KiB2YWx1ZXMpOworICAgIHZpcnR1YWwgdm9pZCB2ZXJ0
ZXhBdHRyaWJQb2ludGVyKHVuc2lnbmVkIGxvbmcgaW5keCwgaW50IHNpemUsIGludCB0eXBlLCBi
b29sIG5vcm1hbGl6ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5z
aWduZWQgbG9uZyBzdHJpZGUsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KTsKKworICAgIHZpcnR1YWwg
dm9pZCB2aWV3cG9ydChsb25nIHgsIGxvbmcgeSwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWdu
ZWQgbG9uZyBoZWlnaHQpOworCisgICAgLy8gU3VwcG9ydCBmb3IgYnVmZmVyIGNyZWF0aW9uIGFu
ZCBkZWxldGlvbgorICAgIHZpcnR1YWwgdW5zaWduZWQgY3JlYXRlQnVmZmVyKCk7CisgICAgdmly
dHVhbCB1bnNpZ25lZCBjcmVhdGVGcmFtZWJ1ZmZlcigpOworICAgIHZpcnR1YWwgdW5zaWduZWQg
Y3JlYXRlUHJvZ3JhbSgpOworICAgIHZpcnR1YWwgdW5zaWduZWQgY3JlYXRlUmVuZGVyYnVmZmVy
KCk7CisgICAgdmlydHVhbCB1bnNpZ25lZCBjcmVhdGVTaGFkZXIodW5zaWduZWQgbG9uZyk7Cisg
ICAgdmlydHVhbCB1bnNpZ25lZCBjcmVhdGVUZXh0dXJlKCk7CisKKyAgICB2aXJ0dWFsIHZvaWQg
ZGVsZXRlQnVmZmVyKHVuc2lnbmVkKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlRnJhbWVidWZm
ZXIodW5zaWduZWQpOworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVQcm9ncmFtKHVuc2lnbmVkKTsK
KyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlUmVuZGVyYnVmZmVyKHVuc2lnbmVkKTsKKyAgICB2aXJ0
dWFsIHZvaWQgZGVsZXRlU2hhZGVyKHVuc2lnbmVkKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRl
VGV4dHVyZSh1bnNpZ25lZCk7CisKK3ByaXZhdGU6CisgICAgV2ViR3JhcGhpY3NDb250ZXh0M0Q6
OkF0dHJpYnV0ZXMgbV9hdHRyaWJ1dGVzOworICAgIGJvb2wgbV9pbml0aWFsaXplZDsKKyAgICB1
bnNpZ25lZCBpbnQgbV90ZXh0dXJlOworICAgIHVuc2lnbmVkIGludCBtX2ZibzsKKyAgICB1bnNp
Z25lZCBpbnQgbV9kZXB0aEJ1ZmZlcjsKKyAgICB1bnNpZ25lZCBpbnQgbV9jYWNoZWRXaWR0aCwg
bV9jYWNoZWRIZWlnaHQ7CisKKyAgICAvLyBGb3IgdHJhY2tpbmcgd2hpY2ggRkJPIGlzIGJvdW5k
CisgICAgdW5zaWduZWQgaW50IG1fYm91bmRGQk87CisKKyNpZmRlZiBGTElQX0ZSQU1FQlVGRkVS
X1ZFUlRJQ0FMTFkKKyAgICB1bnNpZ25lZCBjaGFyKiBtX3NjYW5saW5lOworICAgIHZvaWQgZmxp
cFZlcnRpY2FsbHkodW5zaWduZWQgY2hhciogZnJhbWVidWZmZXIsCisgICAgICAgICAgICAgICAg
ICAgICAgICB1bnNpZ25lZCBpbnQgd2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICB1bnNp
Z25lZCBpbnQgaGVpZ2h0KTsKKyNlbmRpZgorCisgICAgLy8gTm90ZTogd2UgYXJlbid0IGN1cnJl
bnRseSB1c2luZyB0aGlzIGluZm9ybWF0aW9uLCBidXQgd2Ugd2lsbAorICAgIC8vIG5lZWQgdG8g
aW4gb3JkZXIgdG8gdmVyaWZ5IHRoYXQgYWxsIGVuYWJsZWQgdmVydGV4IGFycmF5cyBoYXZlCisg
ICAgLy8gYSB2YWxpZCBidWZmZXIgYm91bmQgLS0gdG8gYXZvaWQgY3Jhc2hlcyBvbiBjZXJ0YWlu
IGNhcmRzLgorICAgIHVuc2lnbmVkIGludCBtX2JvdW5kQXJyYXlCdWZmZXI7CisgICAgY2xhc3Mg
VmVydGV4QXR0cmliUG9pbnRlclN0YXRlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFZlcnRleEF0
dHJpYlBvaW50ZXJTdGF0ZSgpOworCisgICAgICAgIGJvb2wgZW5hYmxlZDsKKyAgICAgICAgdW5z
aWduZWQgbG9uZyBidWZmZXI7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgaW5keDsKKyAgICAgICAg
aW50IHNpemU7CisgICAgICAgIGludCB0eXBlOworICAgICAgICBib29sIG5vcm1hbGl6ZWQ7Cisg
ICAgICAgIHVuc2lnbmVkIGxvbmcgc3RyaWRlOworICAgICAgICB1bnNpZ25lZCBsb25nIG9mZnNl
dDsKKyAgICB9OworCisgICAgZW51bSB7CisgICAgICAgIE51bVRyYWNrZWRQb2ludGVyU3RhdGVz
ID0gMgorICAgIH07CisgICAgVmVydGV4QXR0cmliUG9pbnRlclN0YXRlIG1fdmVydGV4QXR0cmli
UG9pbnRlclN0YXRlW051bVRyYWNrZWRQb2ludGVyU3RhdGVzXTsKKworICAgIC8vIEVycm9ycyBy
YWlzZWQgYnkgc3ludGhlc2l6ZUdMRXJyb3IoKS4KKyAgICBMaXN0SGFzaFNldDx1bnNpZ25lZCBs
b25nPiBtX3N5bnRoZXRpY0Vycm9yczsKKworICAgIHN0YXRpYyBib29sIHNfaW5pdGlhbGl6ZWRH
TEVXOworI2lmIE9TKFdJTkRPV1MpCisgICAgSFdORCAgbV9jYW52YXNXaW5kb3c7CisgICAgSERD
ICAgbV9jYW52YXNEQzsKKyAgICBIR0xSQyBtX2NvbnRleHRPYmo7CisjZWxpZiBQTEFURk9STShD
RykKKyAgICBDR0xQQnVmZmVyT2JqIG1fcGJ1ZmZlcjsKKyAgICBDR0xDb250ZXh0T2JqIG1fY29u
dGV4dE9iajsKKyAgICB1bnNpZ25lZCBjaGFyKiBtX3JlbmRlck91dHB1dDsKKyNlbGlmIE9TKExJ
TlVYKQorICAgIEdMWENvbnRleHQgbV9jb250ZXh0T2JqOworICAgIEdMWFBidWZmZXIgbV9wYnVm
ZmVyOworCisgICAgLy8gSW4gb3JkZXIgdG8gYXZvaWQgcHJvYmxlbXMgY2F1c2VkIGJ5IGxpbmtp
bmcgYWdhaW5zdCBsaWJHTCwgd2UKKyAgICAvLyBkeW5hbWljYWxseSBsb29rIHVwIGFsbCB0aGUg
c3ltYm9scyB3ZSBuZWVkLgorICAgIC8vIGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9jaHJvbWl1
bS9pc3N1ZXMvZGV0YWlsP2lkPTE2ODAwCisgICAgY2xhc3MgR0xDb25uZWN0aW9uIHsKKyAgICAg
IHB1YmxpYzoKKyAgICAgICAgfkdMQ29ubmVjdGlvbigpOworCisgICAgICAgIHN0YXRpYyBHTENv
bm5lY3Rpb24qIGNyZWF0ZSgpOworCisgICAgICAgIEdMWEZCQ29uZmlnKiBjaG9vc2VGQkNvbmZp
ZyhpbnQgc2NyZWVuLCBjb25zdCBpbnQgKmF0dHJpYl9saXN0LCBpbnQgKm5lbGVtZW50cykKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fZ2xYQ2hvb3NlRkJDb25maWcobV9kaXNwbGF5
LCBzY3JlZW4sIGF0dHJpYl9saXN0LCBuZWxlbWVudHMpOworICAgICAgICB9CisKKyAgICAgICAg
R0xYQ29udGV4dCBjcmVhdGVOZXdDb250ZXh0KEdMWEZCQ29uZmlnIGNvbmZpZywgaW50IHJlbmRl
clR5cGUsIEdMWENvbnRleHQgc2hhcmVMaXN0LCBCb29sIGRpcmVjdCkKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIG1fZ2xYQ3JlYXRlTmV3Q29udGV4dChtX2Rpc3BsYXksIGNvbmZpZywg
cmVuZGVyVHlwZSwgc2hhcmVMaXN0LCBkaXJlY3QpOworICAgICAgICB9CisKKyAgICAgICAgR0xY
UGJ1ZmZlciBjcmVhdGVQYnVmZmVyKEdMWEZCQ29uZmlnIGNvbmZpZywgY29uc3QgaW50ICphdHRy
aWJMaXN0KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9nbFhDcmVhdGVQYnVmZmVy
KG1fZGlzcGxheSwgY29uZmlnLCBhdHRyaWJMaXN0KTsKKyAgICAgICAgfQorCisgICAgICAgIHZv
aWQgZGVzdHJveVBidWZmZXIoR0xYUGJ1ZmZlciBwYnVmKQorICAgICAgICB7CisgICAgICAgICAg
ICBtX2dsWERlc3Ryb3lQYnVmZmVyKG1fZGlzcGxheSwgcGJ1Zik7CisgICAgICAgIH0KKworICAg
ICAgICBCb29sIG1ha2VDdXJyZW50KEdMWERyYXdhYmxlIGRyYXdhYmxlLCBHTFhDb250ZXh0IGN0
eCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fZ2xYTWFrZUN1cnJlbnQobV9kaXNw
bGF5LCBkcmF3YWJsZSwgY3R4KTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgZGVzdHJveUNv
bnRleHQoR0xYQ29udGV4dCBjdHgpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fZ2xYRGVzdHJv
eUNvbnRleHQobV9kaXNwbGF5LCBjdHgpOworICAgICAgICB9CisKKyAgICAgICAgR0xYQ29udGV4
dCBnZXRDdXJyZW50Q29udGV4dCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2ds
WEdldEN1cnJlbnRDb250ZXh0KCk7CisgICAgICAgIH0KKworICAgICAgcHJpdmF0ZToKKyAgICAg
ICAgRGlzcGxheSogbV9kaXNwbGF5OworICAgICAgICB2b2lkKiBtX2xpYkdMOworICAgICAgICBQ
Rk5HTFhDSE9PU0VGQkNPTkZJR1BST0MgbV9nbFhDaG9vc2VGQkNvbmZpZzsKKyAgICAgICAgUEZO
R0xYQ1JFQVRFTkVXQ09OVEVYVFBST0MgbV9nbFhDcmVhdGVOZXdDb250ZXh0OworICAgICAgICBQ
Rk5HTFhDUkVBVEVQQlVGRkVSUFJPQyBtX2dsWENyZWF0ZVBidWZmZXI7CisgICAgICAgIFBGTkdM
WERFU1RST1lQQlVGRkVSUFJPQyBtX2dsWERlc3Ryb3lQYnVmZmVyOworICAgICAgICB0eXBlZGVm
IEJvb2wgKCogUEZOR0xYTUFLRUNVUlJFTlRQUk9DKShEaXNwbGF5KiBkcHksIEdMWERyYXdhYmxl
IGRyYXdhYmxlLCBHTFhDb250ZXh0IGN0eCk7CisgICAgICAgIFBGTkdMWE1BS0VDVVJSRU5UUFJP
QyBtX2dsWE1ha2VDdXJyZW50OworICAgICAgICB0eXBlZGVmIHZvaWQgKCogUEZOR0xYREVTVFJP
WUNPTlRFWFRQUk9DKShEaXNwbGF5KiBkcHksIEdMWENvbnRleHQgY3R4KTsKKyAgICAgICAgUEZO
R0xYREVTVFJPWUNPTlRFWFRQUk9DIG1fZ2xYRGVzdHJveUNvbnRleHQ7CisgICAgICAgIHR5cGVk
ZWYgR0xYQ29udGV4dCAoKiBQRk5HTFhHRVRDVVJSRU5UQ09OVEVYVFBST0MpKHZvaWQpOworICAg
ICAgICBQRk5HTFhHRVRDVVJSRU5UQ09OVEVYVFBST0MgbV9nbFhHZXRDdXJyZW50Q29udGV4dDsK
KworICAgICAgICBHTENvbm5lY3Rpb24oRGlzcGxheSogZGlzcGxheSwKKyAgICAgICAgICAgICAg
ICAgICAgIHZvaWQqIGxpYkdMLAorICAgICAgICAgICAgICAgICAgICAgUEZOR0xYQ0hPT1NFRkJD
T05GSUdQUk9DIGNob29zZUZCQ29uZmlnLAorICAgICAgICAgICAgICAgICAgICAgUEZOR0xYQ1JF
QVRFTkVXQ09OVEVYVFBST0MgY3JlYXRlTmV3Q29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAg
IFBGTkdMWENSRUFURVBCVUZGRVJQUk9DIGNyZWF0ZVBidWZmZXIsCisgICAgICAgICAgICAgICAg
ICAgICBQRk5HTFhERVNUUk9ZUEJVRkZFUlBST0MgZGVzdHJveVBidWZmZXIsCisgICAgICAgICAg
ICAgICAgICAgICBQRk5HTFhNQUtFQ1VSUkVOVFBST0MgbWFrZUN1cnJlbnQsCisgICAgICAgICAg
ICAgICAgICAgICBQRk5HTFhERVNUUk9ZQ09OVEVYVFBST0MgZGVzdHJveUNvbnRleHQsCisgICAg
ICAgICAgICAgICAgICAgICBQRk5HTFhHRVRDVVJSRU5UQ09OVEVYVFBST0MgZ2V0Q3VycmVudENv
bnRleHQpCisgICAgICAgICAgICA6IG1fbGliR0wobGliR0wpCisgICAgICAgICAgICAsIG1fZGlz
cGxheShkaXNwbGF5KQorICAgICAgICAgICAgLCBtX2dsWENob29zZUZCQ29uZmlnKGNob29zZUZC
Q29uZmlnKQorICAgICAgICAgICAgLCBtX2dsWENyZWF0ZU5ld0NvbnRleHQoY3JlYXRlTmV3Q29u
dGV4dCkKKyAgICAgICAgICAgICwgbV9nbFhDcmVhdGVQYnVmZmVyKGNyZWF0ZVBidWZmZXIpCisg
ICAgICAgICAgICAsIG1fZ2xYRGVzdHJveVBidWZmZXIoZGVzdHJveVBidWZmZXIpCisgICAgICAg
ICAgICAsIG1fZ2xYTWFrZUN1cnJlbnQobWFrZUN1cnJlbnQpCisgICAgICAgICAgICAsIG1fZ2xY
RGVzdHJveUNvbnRleHQoZGVzdHJveUNvbnRleHQpCisgICAgICAgICAgICAsIG1fZ2xYR2V0Q3Vy
cmVudENvbnRleHQoZ2V0Q3VycmVudENvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgfQorICAg
IH07CisKKyAgICBzdGF0aWMgR0xDb25uZWN0aW9uKiBzX2dsOworI2Vsc2UKKyAgICAjZXJyb3Ig
TXVzdCBwb3J0IFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGwgdG8geW91ciBwbGF0Zm9y
bQorI2VuZGlmCit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJM
RSgzRF9DQU5WQVMpCisKKyNlbmRpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>51344</attachid>
            <date>2010-03-22 13:39:39 -0700</date>
            <delta_ts>2010-03-22 14:22:10 -0700</delta_ts>
            <desc>Revised patch</desc>
            <filename>refactoring.patch</filename>
            <type>text/plain</type>
            <size>199628</size>
            <attacher name="Kenneth Russell">kbr</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24gNTYzNTYpCisrKyBXZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQ2IEBACisyMDEwLTAzLTIyICBLZW5u
ZXRoIFJ1c3NlbGwgIDxrYnJAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgR3JhcGhpY3NDb250ZXh0M0QgYWJzdHJhY3Rpb24g
dG8gV2ViS2l0IEFQSQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MzYyNjIKKworICAgICAgICBBZGRlZCBXZWJHcmFwaGljc0NvbnRleHQzRCB0byB0aGUg
V2ViS2l0IEFQSSBhbmQgcmVmYWN0b3JlZCBDaHJvbWl1bSdzCisgICAgICAgIEdyYXBoaWNzQ29u
dGV4dDNEIGltcGxlbWVudGF0aW9uIHRvIHVzZSBpdC4gQWxsIG9mIHRoZSBPcGVuR0wgY2FsbHMg
aGF2ZQorICAgICAgICBiZWVuIG1vdmVkIG91dCBvZiBXZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBo
aWNzQ29udGV4dDNELmNwcCBhbmQgaW50byB0aGUKKyAgICAgICAgV2ViR3JhcGhpY3NDb250ZXh0
M0QgaW1wbGVtZW50YXRpb24uIEdyYXBoaWNzQ29udGV4dDNEIGlzIHN0aWxsCisgICAgICAgIHJl
c3BvbnNpYmxlIGZvciB0aGUgdHJhbnNmZXIgb2YgcmVuZGVyZWQgb3V0cHV0IGZyb20gdGhlCisg
ICAgICAgIFdlYkdyYXBoaWNzQ29udGV4dDNEIHRvIHRoZSBIVE1MQ2FudmFzRWxlbWVudC4KKwor
ICAgICAgICBUaGUgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbCBjbGFzcywgd2hpY2ggaXMgYSBk
YXRhIG1lbWJlciBvZgorICAgICAgICBHcmFwaGljc0NvbnRleHQzRCBmb3IgdGhlIENocm9taXVt
IHBvcnQsIHJlbWFpbnMuIEl0IGlzIHBvc3NpYmxlIHRvCisgICAgICAgIGVsaW1pbmF0ZSB0aGlz
IGNsYXNzIGFuZCB0aGVyZWJ5IG9uZSBsZXZlbCBvZiBkZWxlZ2F0aW9uLCBidXQgdGhpcyBpcwor
ICAgICAgICBiZWluZyBkZWZlcnJlZC4KKworICAgICAgICBUaGUgbmVlZGVkIGVudHJ5IHBvaW50
IGZvciBhIENocm9tZSBpbXBsZW1lbnRhdGlvbiBvZgorICAgICAgICBXZWJHcmFwaGljc0NvbnRl
eHQzRCBoYXMgYmVlbiBhZGRlZCB0byBXZWJLaXRDbGllbnQsIGJ1dCBpdCBpcyBub3QgYmVpbmcK
KyAgICAgICAgY2FsbGVkIHlldCBieSBHcmFwaGljc0NvbnRleHQzRC4gSXQgd2lsbCBiZSBvbmNl
IHRoaXMgcGF0Y2ggbGFuZHMgYW5kCisgICAgICAgIENocm9taXVtIGlzIHJvbGxlZCBmb3J3YXJk
IHRvIHN1cHBvcnQgdGhpcyBlbnRyeSBwb2ludC4KKworICAgICAgICBUaGlzIGlzIGEgbGFyZ2Ug
cGF0Y2gsIGJ1dCB0aGUgdHJhbnNmb3JtYXRpb24gaXMgYWxtb3N0IGVudGlyZWx5CisgICAgICAg
IG1lY2hhbmljYWwgYW5kIHRoZXJlIGlzIG5vIGNoYW5nZSBpbiBmdW5jdGlvbmFsaXR5LiBOZWFy
bHkgYWxsIG9mCisgICAgICAgIEdyYXBoaWNzQ29udGV4dDNEIGFuZCBHcmFwaGljc0NvbnRleHQz
REludGVybmFsIGhhcyBiZWVuIG1vdmVkIHRvCisgICAgICAgIFdlYkdyYXBoaWNzQ29udGV4dDNE
RGVmYXVsdEltcGwuIFRoZSBvbmx5IGFyZWEgd2hlcmUgdGhlIHNwbGl0dGluZyBvZgorICAgICAg
ICBsb2dpYyBpcyBsZXNzIHRoYW4gbWVjaGFuaWNhbCBpcyBHcmFwaGljc0NvbnRleHQzRDo6YmVn
aW5QYWludCgpIGFuZCBpdHMKKyAgICAgICAgY2FsbGVlcy4KKworICAgICAgICBSYW4gYWxsIFdl
YkdMIGxheW91dCB0ZXN0cyBhbmQgZGVtb3MgZnJvbSBLaHJvbm9zIHNpdGUgaW4gQ2hyb21pdW0K
KyAgICAgICAgb24gTWFjIGFuZCBXaW5kb3dzLgorCisgICAgICAgICogV2ViS2l0Lmd5cDoKKyAg
ICAgICAgKiBwdWJsaWMvV2ViR3JhcGhpY3NDb250ZXh0M0QuaDogQWRkZWQuCisgICAgICAgIChX
ZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzOjpBdHRyaWJ1dGVzKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0Q6On5XZWJHcmFwaGljc0NvbnRleHQz
RCk6CisgICAgICAgICogcHVibGljL1dlYktpdENsaWVudC5oOgorICAgICAgICAoV2ViS2l0OjpX
ZWJLaXRDbGllbnQ6OmNyZWF0ZUdyYXBoaWNzQ29udGV4dDNEKToKKyAgICAgICAgKiBzcmMvR3Jh
cGhpY3NDb250ZXh0M0QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RJ
bnRlcm5hbDo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzREludGVybmFsOjp+R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzREludGVybmFsOjppbml0aWFsaXplKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OnBsYXRmb3JtR3Jh
cGhpY3NDb250ZXh0M0QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RJbnRl
cm5hbDo6cGxhdGZvcm1UZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDNESW50ZXJuYWw6OmJlZ2luUGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0M0RJbnRlcm5hbDo6ZW5kUGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0M0RJbnRlcm5hbDo6cmVzaGFwZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQzREludGVybmFsOjpiaW5kQXR0cmliTG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6YmluZFRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6YnVmZmVyRGF0YSk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpidWZmZXJTdWJEYXRhKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmdldEFjdGl2ZUF0dHJpYik6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpnZXRBY3RpdmVVbmlmb3Jt
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmdldEF0dHJp
YkxvY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6
OmdldENvbnRleHRBdHRyaWJ1dGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDNESW50ZXJuYWw6OmdldFByb2dyYW1JbmZvTG9nKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNESW50ZXJuYWw6OmdldFNoYWRlckluZm9Mb2cpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6Z2V0U2hhZGVyU291cmNlKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmdldFN0cmluZyk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpnZXRVbmlmb3JtTG9jYXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6cmVhZFBpeGVs
cyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpzaGFkZXJT
b3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6dGV4
SW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzREludGVybmFsOjp0
ZXhTdWJJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNESW50ZXJu
YWw6OnVuaWZvcm0xZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RJbnRl
cm5hbDo6dW5pZm9ybTFpdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRElu
dGVybmFsOjp1bmlmb3JtMmZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
SW50ZXJuYWw6OnVuaWZvcm0yaXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
M0RJbnRlcm5hbDo6dW5pZm9ybTNmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQzREludGVybmFsOjp1bmlmb3JtM2l2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNESW50ZXJuYWw6OnVuaWZvcm00ZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0RJbnRlcm5hbDo6dW5pZm9ybTRpdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQzREludGVybmFsOjp1bmlmb3JtTWF0cml4MmZ2KToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OnVuaWZvcm1NYXRyaXgzZnYpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6dW5pZm9ybU1hdHJpeDRmdik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6On5HcmFwaGljc0NvbnRleHQzRCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpwbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpwbGF0Zm9ybVRleHR1cmUpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnRleEltYWdlMkQpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnRleFN1YkltYWdlMkQpOgorICAgICAgICAq
IHNyYy9XZWJHcmFwaGljc0NvbnRleHQzRC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpX
ZWJHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlRGVmYXVsdCk6CisgICAgICAgICogc3JjL1dlYkdy
YXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGwuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6
V2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6R0xDb25uZWN0aW9uOjpjcmVhdGUpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpHTENvbm5l
Y3Rpb246On5HTENvbm5lY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRl
eHQzRERlZmF1bHRJbXBsOjpWZXJ0ZXhBdHRyaWJQb2ludGVyU3RhdGU6OlZlcnRleEF0dHJpYlBv
aW50ZXJTdGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVs
dEltcGw6OldlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGwpOgorICAgICAgICAoV2ViS2l0
OjpXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjp+V2ViR3JhcGhpY3NDb250ZXh0M0RE
ZWZhdWx0SW1wbCk6CisgICAgICAgIChXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVs
dEltcGw6OmluaXRpYWxpemUpOgorICAgICAgICAoV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQz
RERlZmF1bHRJbXBsOjptYWtlQ29udGV4dEN1cnJlbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJH
cmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjp3aWR0aCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OmhlaWdodCk6CisgICAgICAgIChXZWJLaXQ6
OldlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OnNpemVJbkJ5dGVzKToKKyAgICAgICAg
KFdlYktpdDo6Y3JlYXRlVGV4dHVyZU9iamVjdCk6CisgICAgICAgIChXZWJLaXQ6OldlYkdyYXBo
aWNzQ29udGV4dDNERGVmYXVsdEltcGw6OnJlc2hhcGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJH
cmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpmbGlwVmVydGljYWxseSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OnJlYWRCYWNrRnJhbWVidWZm
ZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjph
Y3RpdmVUZXh0dXJlKToKKyAgICAgICAgKFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0REZWZh
dWx0SW1wbDo6YmluZEJ1ZmZlcik6CisgICAgICAgIChXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4
dDNERGVmYXVsdEltcGw6OmJpbmRGcmFtZWJ1ZmZlcik6CisgICAgICAgIChXZWJLaXQ6OldlYkdy
YXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheSk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OmRyYXdFbGVt
ZW50cyk6CisgICAgICAgIChXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6
OmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KToKKyAgICAgICAgKFdlYktpdDo6V2ViR3JhcGhpY3ND
b250ZXh0M0REZWZhdWx0SW1wbDo6Z2VuZXJhdGVNaXBtYXApOgorICAgICAgICAoV2ViS2l0OjpX
ZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpnZXRBY3RpdmVBdHRyaWIpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpnZXRBY3RpdmVVbmlm
b3JtKToKKyAgICAgICAgKFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6
Z2V0Q29udGV4dEF0dHJpYnV0ZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRl
eHQzRERlZmF1bHRJbXBsOjpnZXRFcnJvcik6CisgICAgICAgIChXZWJLaXQ6OldlYkdyYXBoaWNz
Q29udGV4dDNERGVmYXVsdEltcGw6OmdldFByb2dyYW1JbmZvTG9nKToKKyAgICAgICAgKFdlYktp
dDo6V2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6Z2V0U2hhZGVySW5mb0xvZyk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OmdldFNoYWRl
clNvdXJjZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdElt
cGw6OmdldFN0cmluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNERGVm
YXVsdEltcGw6OmdldFZlcnRleEF0dHJpYk9mZnNldCk6CisgICAgICAgIChXZWJLaXQ6OldlYkdy
YXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OnJlbGVhc2VTaGFkZXJDb21waWxlcik6CisgICAg
ICAgIChXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OnNoYWRlclNvdXJj
ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OnZl
cnRleEF0dHJpYlBvaW50ZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQz
RERlZmF1bHRJbXBsOjpjcmVhdGVCdWZmZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJHcmFwaGlj
c0NvbnRleHQzRERlZmF1bHRJbXBsOjpjcmVhdGVGcmFtZWJ1ZmZlcik6CisgICAgICAgIChXZWJL
aXQ6OldlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OmNyZWF0ZVByb2dyYW0pOgorICAg
ICAgICAoV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpjcmVhdGVSZW5k
ZXJidWZmZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJ
bXBsOjpjcmVhdGVUZXh0dXJlKToKKyAgICAgICAgKFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0
M0REZWZhdWx0SW1wbDo6ZGVsZXRlQnVmZmVyKToKKyAgICAgICAgKFdlYktpdDo6V2ViR3JhcGhp
Y3NDb250ZXh0M0REZWZhdWx0SW1wbDo6ZGVsZXRlRnJhbWVidWZmZXIpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpkZWxldGVQcm9ncmFtKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6ZGVsZXRlUmVu
ZGVyYnVmZmVyKToKKyAgICAgICAgKFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0
SW1wbDo6ZGVsZXRlU2hhZGVyKToKKyAgICAgICAgKFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0
M0REZWZhdWx0SW1wbDo6ZGVsZXRlVGV4dHVyZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkdyYXBo
aWNzQ29udGV4dDNERGVmYXVsdEltcGw6OnN5bnRoZXNpemVHTEVycm9yKToKKyAgICAgICAgKiBz
cmMvV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbC5oOiBBZGRlZC4KKyAgICAgICAgKFdl
YktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6KToKKyAgICAgICAgKFdlYktp
dDo6V2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6R0xDb25uZWN0aW9uOjpjaG9vc2VG
QkNvbmZpZyk6CisgICAgICAgIChXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdElt
cGw6OkdMQ29ubmVjdGlvbjo6Y3JlYXRlTmV3Q29udGV4dCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OkdMQ29ubmVjdGlvbjo6Y3JlYXRlUGJ1ZmZl
cik6CisgICAgICAgIChXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OkdM
Q29ubmVjdGlvbjo6ZGVzdHJveVBidWZmZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJHcmFwaGlj
c0NvbnRleHQzRERlZmF1bHRJbXBsOjpHTENvbm5lY3Rpb246Om1ha2VDdXJyZW50KToKKyAgICAg
ICAgKFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6R0xDb25uZWN0aW9u
OjpkZXN0cm95Q29udGV4dCk6CisgICAgICAgIChXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNE
RGVmYXVsdEltcGw6OkdMQ29ubmVjdGlvbjo6Z2V0Q3VycmVudENvbnRleHQpOgorICAgICAgICAo
V2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpHTENvbm5lY3Rpb246OkdM
Q29ubmVjdGlvbik6CisKIDIwMTAtMDMtMjIgIERhcmluIEZpc2hlciAgPGRhcmluQGNocm9taXVt
Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBOYXRlIENoYXBpbi4KSW5kZXg6IFdlYktpdC9j
aHJvbWl1bS9XZWJLaXQuZ3lwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9XZWJLaXQu
Z3lwCShyZXZpc2lvbiA1NjM1NikKKysrIFdlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMjIsNiArMTIyLDcgQEAKICAgICAgICAgICAgICAgICAncHVibGljL1dl
YkZvbnRDYWNoZS5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYkZvcm1FbGVtZW50Lmgn
LAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViR2x5cGhDYWNoZS5oJywKKyAgICAgICAgICAg
ICAgICAncHVibGljL1dlYkdyYXBoaWNzQ29udGV4dDNELmgnLAogICAgICAgICAgICAgICAgICdw
dWJsaWMvV2ViSGlzdG9yeUl0ZW0uaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJIVFRQ
Qm9keS5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYkltYWdlLmgnLApAQCAtMzEyLDYg
KzMxMyw5IEBACiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJGcmFtZUltcGwuY3BwJywKICAgICAg
ICAgICAgICAgICAnc3JjL1dlYkZyYW1lSW1wbC5oJywKICAgICAgICAgICAgICAgICAnc3JjL1dl
YkdseXBoQ2FjaGUuY3BwJywKKyAgICAgICAgICAgICAgICAnc3JjL1dlYkdyYXBoaWNzQ29udGV4
dDNELmNwcCcsCisgICAgICAgICAgICAgICAgJ3NyYy9XZWJHcmFwaGljc0NvbnRleHQzRERlZmF1
bHRJbXBsLmNwcCcsCisgICAgICAgICAgICAgICAgJ3NyYy9XZWJHcmFwaGljc0NvbnRleHQzRERl
ZmF1bHRJbXBsLmgnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViSGlzdG9yeUl0ZW0uY3BwJywK
ICAgICAgICAgICAgICAgICAnc3JjL1dlYkhUVFBCb2R5LmNwcCcsCiAgICAgICAgICAgICAgICAg
J3NyYy9XZWJJbWFnZUNHLmNwcCcsCkluZGV4OiBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkdy
YXBoaWNzQ29udGV4dDNELmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9X
ZWJHcmFwaGljc0NvbnRleHQzRC5oCShyZXZpc2lvbiAwKQorKysgV2ViS2l0L2Nocm9taXVtL3B1
YmxpYy9XZWJHcmFwaGljc0NvbnRleHQzRC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMwMiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
CisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICog
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpZm5kZWYgV2ViR3JhcGhpY3NDb250ZXh0M0RfaAorI2RlZmluZSBXZWJHcmFwaGljc0NvbnRl
eHQzRF9oCisKKyNpbmNsdWRlICJXZWJDb21tb24uaCIKKyNpbmNsdWRlICJXZWJOb25Db3B5YWJs
ZS5oIgorI2luY2x1ZGUgIldlYlN0cmluZy5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworLy8g
VHlwZWRlZiBmb3Igc2VydmVyLXNpZGUgb2JqZWN0cyBsaWtlIE9wZW5HTCB0ZXh0dXJlcyBhbmQg
cHJvZ3JhbSBvYmplY3RzLgordHlwZWRlZiB1bnNpZ25lZCBpbnQgV2ViR0xJZDsKKworLy8gVGhp
cyBpbnRlcmZhY2UgYWJzdHJhY3RzIHRoZSBvcGVyYXRpb25zIHBlcmZvcm1lZCBieSB0aGUKKy8v
IEdyYXBoaWNzQ29udGV4dDNEIGluIG9yZGVyIHRvIGltcGxlbWVudCBXZWJHTC4gTmVhcmx5IGFs
bCBvZiB0aGUKKy8vIG1ldGhvZHMgZXhwb3NlZCBvbiB0aGlzIGludGVyZmFjZSBtYXAgZGlyZWN0
bHkgdG8gZW50cnkgcG9pbnRzIGluCisvLyB0aGUgT3BlbkdMIEVTIDIuMCBBUEkuCisKK2NsYXNz
IFdlYkdyYXBoaWNzQ29udGV4dDNEIDogcHVibGljIFdlYk5vbkNvcHlhYmxlIHsKK3B1YmxpYzoK
KyAgICAvLyBSZXR1cm4gdmFsdWUgZnJvbSBnZXRBY3RpdmVVbmlmb3JtIGFuZCBnZXRBY3RpdmVB
dHRyaWIuCisgICAgc3RydWN0IEFjdGl2ZUluZm8geworICAgICAgICBXZWJTdHJpbmcgbmFtZTsK
KyAgICAgICAgdW5zaWduZWQgdHlwZTsKKyAgICAgICAgaW50IHNpemU7CisgICAgfTsKKworICAg
IC8vIENvbnRleHQgY3JlYXRpb24gYXR0cmlidXRlcy4KKyAgICBzdHJ1Y3QgQXR0cmlidXRlcyB7
CisgICAgICAgIEF0dHJpYnV0ZXMoKQorICAgICAgICAgICAgOiBhbHBoYSh0cnVlKQorICAgICAg
ICAgICAgLCBkZXB0aCh0cnVlKQorICAgICAgICAgICAgLCBzdGVuY2lsKHRydWUpCisgICAgICAg
ICAgICAsIGFudGlhbGlhcyh0cnVlKQorICAgICAgICAgICAgLCBwcmVtdWx0aXBsaWVkQWxwaGEo
dHJ1ZSkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBhbHBoYTsKKyAgICAg
ICAgYm9vbCBkZXB0aDsKKyAgICAgICAgYm9vbCBzdGVuY2lsOworICAgICAgICBib29sIGFudGlh
bGlhczsKKyAgICAgICAgYm9vbCBwcmVtdWx0aXBsaWVkQWxwaGE7CisgICAgfTsKKworICAgIC8v
IFRoaXMgZGVzdHJ1Y3RvciBuZWVkcyB0byBiZSBwdWJsaWMgc28gdGhhdCB1c2luZyBjbGFzc2Vz
IGNhbiBkZXN0cm95IGluc3RhbmNlcyBpZiBpbml0aWFsaXphdGlvbiBmYWlscy4KKyAgICB2aXJ0
dWFsIH5XZWJHcmFwaGljc0NvbnRleHQzRCgpIHt9CisKKyAgICAvLyBDcmVhdGVzIGEgImRlZmF1
bHQiIGltcGxlbWVudGF0aW9uIG9mIFdlYkdyYXBoaWNzQ29udGV4dDNEIHdoaWNoIGNhbGxzCisg
ICAgLy8gT3BlbkdMIGRpcmVjdGx5LgorICAgIHN0YXRpYyBXZWJHcmFwaGljc0NvbnRleHQzRCog
Y3JlYXRlRGVmYXVsdCgpOworCisgICAgLy8gSW5pdGlhbGl6ZXMgdGhlIGdyYXBoaWNzIGNvbnRl
eHQ7IHNob3VsZCBiZSB0aGUgZmlyc3Qgb3BlcmF0aW9uIHBlcmZvcm1lZAorICAgIC8vIG9uIG5l
d2x5LWNvbnN0cnVjdGVkIGluc3RhbmNlcy4gUmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3MuCisgICAg
dmlydHVhbCBib29sIGluaXRpYWxpemUoQXR0cmlidXRlcykgPSAwOworCisgICAgLy8gTWFrZXMg
dGhlIE9wZW5HTCBjb250ZXh0IGN1cnJlbnQgb24gdGhlIGN1cnJlbnQgdGhyZWFkLiBSZXR1cm5z
IHRydWUgb24KKyAgICAvLyBzdWNjZXNzLgorICAgIHZpcnR1YWwgYm9vbCBtYWtlQ29udGV4dEN1
cnJlbnQoKSA9IDA7CisKKyAgICAvLyBUaGUgc2l6ZSBvZiB0aGUgcmVnaW9uIGludG8gd2hpY2gg
dGhpcyBXZWJHcmFwaGljc0NvbnRleHQzRCBpcyByZW5kZXJpbmcuCisgICAgLy8gUmV0dXJucyB0
aGUgbGFzdCB2YWx1ZXMgcGFzc2VkIHRvIHJlc2hhcGUoKS4KKyAgICB2aXJ0dWFsIGludCB3aWR0
aCgpID0gMDsKKyAgICB2aXJ0dWFsIGludCBoZWlnaHQoKSA9IDA7CisKKyAgICAvLyBIZWxwZXIg
dG8gcmV0dXJuIHRoZSBzaXplIGluIGJ5dGVzIG9mIE9wZW5HTCBkYXRhIHR5cGVzCisgICAgLy8g
bGlrZSBHTF9GTE9BVCwgR0xfSU5ULCBldGMuCisgICAgdmlydHVhbCBpbnQgc2l6ZUluQnl0ZXMo
aW50IHR5cGUpID0gMDsKKworICAgIC8vIFJlc2l6ZXMgdGhlIHJlZ2lvbiBpbnRvIHdoaWNoIHRo
aXMgV2ViR3JhcGhpY3NDb250ZXh0M0QgaXMgZHJhd2luZy4KKyAgICB2aXJ0dWFsIHZvaWQgcmVz
aGFwZShpbnQgd2lkdGgsIGludCBoZWlnaHQpID0gMDsKKworICAgIC8vIEhlbHBlciBmb3Igc29m
dHdhcmUgY29tcG9zaXRpbmcgcGF0aC4gUmVhZHMgYmFjayB0aGUgZnJhbWUgYnVmZmVyIGludG8K
KyAgICAvLyB0aGUgbWVtb3J5IHJlZ2lvbiBwb2ludGVkIHRvIGJ5ICJwaXhlbHMiIHdpdGggc2l6
ZSAiYnVmZmVyU2l6ZSIuIEl0IGlzCisgICAgLy8gZXhwZWN0ZWQgdGhhdCB0aGUgc3RvcmFnZSBm
b3IgInBpeGVscyIgY292ZXJzICg0ICogd2lkdGggKiBoZWlnaHQpIGJ5dGVzLgorICAgIC8vIFJl
dHVybnMgdHJ1ZSBvbiBzdWNjZXNzLgorICAgIHZpcnR1YWwgYm9vbCByZWFkQmFja0ZyYW1lYnVm
ZmVyKHVuc2lnbmVkIGNoYXIqIHBpeGVscywgc2l6ZV90IGJ1ZmZlclNpemUpID0gMDsKKworICAg
IC8vIFN5bnRoZXNpemVzIGFuIE9wZW5HTCBlcnJvciB3aGljaCB3aWxsIGJlIHJldHVybmVkIGZy
b20gYQorICAgIC8vIGxhdGVyIGNhbGwgdG8gZ2V0RXJyb3IuIFRoaXMgaXMgdXNlZCB0byBlbXVs
YXRlIE9wZW5HTCBFUworICAgIC8vIDIuMCBiZWhhdmlvciBvbiB0aGUgZGVza3RvcCBhbmQgdG8g
ZW5mb3JjZSBhZGRpdGlvbmFsIGVycm9yCisgICAgLy8gY2hlY2tpbmcgbWFuZGF0ZWQgYnkgV2Vi
R0wuCisgICAgLy8KKyAgICAvLyBQZXIgdGhlIGJlaGF2aW9yIG9mIGdsR2V0RXJyb3IsIHRoaXMg
c3RvcmVzIGF0IG1vc3Qgb25lCisgICAgLy8gaW5zdGFuY2Ugb2YgYW55IGdpdmVuIGVycm9yLCBh
bmQgcmV0dXJucyB0aGVtIGZyb20gY2FsbHMgdG8KKyAgICAvLyBnZXRFcnJvciBpbiB0aGUgb3Jk
ZXIgdGhleSB3ZXJlIGFkZGVkLgorICAgIHZpcnR1YWwgdm9pZCBzeW50aGVzaXplR0xFcnJvcih1
bnNpZ25lZCBsb25nIGVycm9yKSA9IDA7CisKKyAgICAvLyBUaGUgZW50cnkgcG9pbnRzIGJlbG93
IG1hcCBkaXJlY3RseSB0byB0aGUgT3BlbkdMIEVTIDIuMCBBUEkuCisgICAgLy8gU2VlOiBodHRw
Oi8vd3d3Lmtocm9ub3Mub3JnL3JlZ2lzdHJ5L2dsZXMvCisgICAgLy8gYW5kOiBodHRwOi8vd3d3
Lmtocm9ub3Mub3JnL29wZW5nbGVzL3Nkay9kb2NzL21hbi8KKyAgICB2aXJ0dWFsIHZvaWQgYWN0
aXZlVGV4dHVyZSh1bnNpZ25lZCBsb25nIHRleHR1cmUpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
YXR0YWNoU2hhZGVyKFdlYkdMSWQgcHJvZ3JhbSwgV2ViR0xJZCBzaGFkZXIpID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgYmluZEF0dHJpYkxvY2F0aW9uKFdlYkdMSWQgcHJvZ3JhbSwgdW5zaWduZWQg
bG9uZyBpbmRleCwgY29uc3QgY2hhciogbmFtZSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBiaW5k
QnVmZmVyKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBXZWJHTElkIGJ1ZmZlcikgPSAwOworICAgIHZp
cnR1YWwgdm9pZCBiaW5kRnJhbWVidWZmZXIodW5zaWduZWQgbG9uZyB0YXJnZXQsIFdlYkdMSWQg
ZnJhbWVidWZmZXIpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgYmluZFJlbmRlcmJ1ZmZlcih1bnNp
Z25lZCBsb25nIHRhcmdldCwgV2ViR0xJZCByZW5kZXJidWZmZXIpID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgYmluZFRleHR1cmUodW5zaWduZWQgbG9uZyB0YXJnZXQsIFdlYkdMSWQgdGV4dHVyZSkg
PSAwOworICAgIHZpcnR1YWwgdm9pZCBibGVuZENvbG9yKGRvdWJsZSByZWQsIGRvdWJsZSBncmVl
biwgZG91YmxlIGJsdWUsIGRvdWJsZSBhbHBoYSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBibGVu
ZEVxdWF0aW9uKHVuc2lnbmVkIGxvbmcgbW9kZSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBibGVu
ZEVxdWF0aW9uU2VwYXJhdGUodW5zaWduZWQgbG9uZyBtb2RlUkdCLCB1bnNpZ25lZCBsb25nIG1v
ZGVBbHBoYSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBibGVuZEZ1bmModW5zaWduZWQgbG9uZyBz
ZmFjdG9yLCB1bnNpZ25lZCBsb25nIGRmYWN0b3IpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgYmxl
bmRGdW5jU2VwYXJhdGUodW5zaWduZWQgbG9uZyBzcmNSR0IsIHVuc2lnbmVkIGxvbmcgZHN0UkdC
LCB1bnNpZ25lZCBsb25nIHNyY0FscGhhLCB1bnNpZ25lZCBsb25nIGRzdEFscGhhKSA9IDA7CisK
KyAgICB2aXJ0dWFsIHZvaWQgYnVmZmVyRGF0YSh1bnNpZ25lZCBsb25nIHRhcmdldCwgaW50IHNp
emUsIGNvbnN0IHZvaWQqIGRhdGEsIHVuc2lnbmVkIGxvbmcgdXNhZ2UpID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgYnVmZmVyU3ViRGF0YSh1bnNpZ25lZCBsb25nIHRhcmdldCwgbG9uZyBvZmZzZXQs
IGludCBzaXplLCBjb25zdCB2b2lkKiBkYXRhKSA9IDA7CisKKyAgICB2aXJ0dWFsIHVuc2lnbmVk
IGxvbmcgY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyh1bnNpZ25lZCBsb25nIHRhcmdldCkgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCBjbGVhcih1bnNpZ25lZCBsb25nIG1hc2spID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgY2xlYXJDb2xvcihkb3VibGUgcmVkLCBkb3VibGUgZ3JlZW4sIGRvdWJsZSBibHVl
LCBkb3VibGUgYWxwaGEpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY2xlYXJEZXB0aChkb3VibGUg
ZGVwdGgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY2xlYXJTdGVuY2lsKGxvbmcgcykgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCBjb2xvck1hc2soYm9vbCByZWQsIGJvb2wgZ3JlZW4sIGJvb2wgYmx1
ZSwgYm9vbCBhbHBoYSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBjb21waWxlU2hhZGVyKFdlYkdM
SWQgc2hhZGVyKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgY29weVRleEltYWdlMkQodW5zaWdu
ZWQgbG9uZyB0YXJnZXQsIGxvbmcgbGV2ZWwsIHVuc2lnbmVkIGxvbmcgaW50ZXJuYWxmb3JtYXQs
IGxvbmcgeCwgbG9uZyB5LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdo
dCwgbG9uZyBib3JkZXIpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY29weVRleFN1YkltYWdlMkQo
dW5zaWduZWQgbG9uZyB0YXJnZXQsIGxvbmcgbGV2ZWwsIGxvbmcgeG9mZnNldCwgbG9uZyB5b2Zm
c2V0LCBsb25nIHgsIGxvbmcgeSwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBo
ZWlnaHQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY3VsbEZhY2UodW5zaWduZWQgbG9uZyBtb2Rl
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRlcHRoRnVuYyh1bnNpZ25lZCBsb25nIGZ1bmMpID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgZGVwdGhNYXNrKGJvb2wgZmxhZykgPSAwOworICAgIHZpcnR1
YWwgdm9pZCBkZXB0aFJhbmdlKGRvdWJsZSB6TmVhciwgZG91YmxlIHpGYXIpID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgZGV0YWNoU2hhZGVyKFdlYkdMSWQgcHJvZ3JhbSwgV2ViR0xJZCBzaGFkZXIp
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGlzYWJsZSh1bnNpZ25lZCBsb25nIGNhcCkgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCBkaXNhYmxlVmVydGV4QXR0cmliQXJyYXkodW5zaWduZWQgbG9uZyBp
bmRleCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkcmF3QXJyYXlzKHVuc2lnbmVkIGxvbmcgbW9k
ZSwgbG9uZyBmaXJzdCwgbG9uZyBjb3VudCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkcmF3RWxl
bWVudHModW5zaWduZWQgbG9uZyBtb2RlLCB1bnNpZ25lZCBsb25nIGNvdW50LCB1bnNpZ25lZCBs
b25nIHR5cGUsIGxvbmcgb2Zmc2V0KSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgZW5hYmxlKHVu
c2lnbmVkIGxvbmcgY2FwKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGVuYWJsZVZlcnRleEF0dHJp
YkFycmF5KHVuc2lnbmVkIGxvbmcgaW5kZXgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZmluaXNo
KCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBmbHVzaCgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxv
bmcgYXR0YWNobWVudCwgdW5zaWduZWQgbG9uZyByZW5kZXJidWZmZXJ0YXJnZXQsIFdlYkdMSWQg
cmVuZGVyYnVmZmVyKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGZyYW1lYnVmZmVyVGV4dHVyZTJE
KHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIGF0dGFjaG1lbnQsIHVuc2lnbmVk
IGxvbmcgdGV4dGFyZ2V0LCBXZWJHTElkIHRleHR1cmUsIGxvbmcgbGV2ZWwpID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgZnJvbnRGYWNlKHVuc2lnbmVkIGxvbmcgbW9kZSkgPSAwOworICAgIHZpcnR1
YWwgdm9pZCBnZW5lcmF0ZU1pcG1hcCh1bnNpZ25lZCBsb25nIHRhcmdldCkgPSAwOworCisgICAg
dmlydHVhbCBib29sIGdldEFjdGl2ZUF0dHJpYihXZWJHTElkIHByb2dyYW0sIHVuc2lnbmVkIGxv
bmcgaW5kZXgsIEFjdGl2ZUluZm8mKSA9IDA7CisgICAgdmlydHVhbCBib29sIGdldEFjdGl2ZVVu
aWZvcm0oV2ViR0xJZCBwcm9ncmFtLCB1bnNpZ25lZCBsb25nIGluZGV4LCBBY3RpdmVJbmZvJikg
PSAwOworCisgICAgdmlydHVhbCBpbnQgIGdldEF0dHJpYkxvY2F0aW9uKFdlYkdMSWQgcHJvZ3Jh
bSwgY29uc3QgY2hhciogbmFtZSkgPSAwOworCisgICAgdmlydHVhbCB2b2lkIGdldEJvb2xlYW52
KHVuc2lnbmVkIGxvbmcgcG5hbWUsIHVuc2lnbmVkIGNoYXIqIHZhbHVlKSA9IDA7CisKKyAgICB2
aXJ0dWFsIHZvaWQgZ2V0QnVmZmVyUGFyYW1ldGVyaXYodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVu
c2lnbmVkIGxvbmcgcG5hbWUsIGludCogdmFsdWUpID0gMDsKKworICAgIHZpcnR1YWwgQXR0cmli
dXRlcyBnZXRDb250ZXh0QXR0cmlidXRlcygpID0gMDsKKworICAgIHZpcnR1YWwgdW5zaWduZWQg
bG9uZyBnZXRFcnJvcigpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBnZXRGbG9hdHYodW5zaWdu
ZWQgbG9uZyBwbmFtZSwgZmxvYXQqIHZhbHVlKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0
RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVu
c2lnbmVkIGxvbmcgYXR0YWNobWVudCwgdW5zaWduZWQgbG9uZyBwbmFtZSwgaW50KiB2YWx1ZSkg
PSAwOworCisgICAgdmlydHVhbCB2b2lkIGdldEludGVnZXJ2KHVuc2lnbmVkIGxvbmcgcG5hbWUs
IGludCogdmFsdWUpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBnZXRQcm9ncmFtaXYoV2ViR0xJ
ZCBwcm9ncmFtLCB1bnNpZ25lZCBsb25nIHBuYW1lLCBpbnQqIHZhbHVlKSA9IDA7CisKKyAgICB2
aXJ0dWFsIFdlYlN0cmluZyBnZXRQcm9ncmFtSW5mb0xvZyhXZWJHTElkIHByb2dyYW0pID0gMDsK
KworICAgIHZpcnR1YWwgdm9pZCBnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdih1bnNpZ25lZCBs
b25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBwbmFtZSwgaW50KiB2YWx1ZSkgPSAwOworCisgICAg
dmlydHVhbCB2b2lkIGdldFNoYWRlcml2KFdlYkdMSWQgc2hhZGVyLCB1bnNpZ25lZCBsb25nIHBu
YW1lLCBpbnQqIHZhbHVlKSA9IDA7CisKKyAgICB2aXJ0dWFsIFdlYlN0cmluZyBnZXRTaGFkZXJJ
bmZvTG9nKFdlYkdMSWQgc2hhZGVyKSA9IDA7CisKKyAgICAvLyBUQkQKKyAgICAvLyB2b2lkIGds
R2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0IChHTGVudW0gc2hhZGVydHlwZSwgR0xlbnVtIHByZWNp
c2lvbnR5cGUsIEdMaW50KiByYW5nZSwgR0xpbnQqIHByZWNpc2lvbik7CisKKyAgICB2aXJ0dWFs
IFdlYlN0cmluZyBnZXRTaGFkZXJTb3VyY2UoV2ViR0xJZCBzaGFkZXIpID0gMDsKKyAgICB2aXJ0
dWFsIFdlYlN0cmluZyBnZXRTdHJpbmcodW5zaWduZWQgbG9uZyBuYW1lKSA9IDA7CisKKyAgICB2
aXJ0dWFsIHZvaWQgZ2V0VGV4UGFyYW1ldGVyZnYodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2ln
bmVkIGxvbmcgcG5hbWUsIGZsb2F0KiB2YWx1ZSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBnZXRU
ZXhQYXJhbWV0ZXJpdih1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBwbmFtZSwg
aW50KiB2YWx1ZSkgPSAwOworCisgICAgdmlydHVhbCB2b2lkIGdldFVuaWZvcm1mdihXZWJHTElk
IHByb2dyYW0sIGxvbmcgbG9jYXRpb24sIGZsb2F0KiB2YWx1ZSkgPSAwOworICAgIHZpcnR1YWwg
dm9pZCBnZXRVbmlmb3JtaXYoV2ViR0xJZCBwcm9ncmFtLCBsb25nIGxvY2F0aW9uLCBpbnQqIHZh
bHVlKSA9IDA7CisKKyAgICB2aXJ0dWFsIGxvbmcgZ2V0VW5pZm9ybUxvY2F0aW9uKFdlYkdMSWQg
cHJvZ3JhbSwgY29uc3QgY2hhciogbmFtZSkgPSAwOworCisgICAgdmlydHVhbCB2b2lkIGdldFZl
cnRleEF0dHJpYmZ2KHVuc2lnbmVkIGxvbmcgaW5kZXgsIHVuc2lnbmVkIGxvbmcgcG5hbWUsIGZs
b2F0KiB2YWx1ZSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBnZXRWZXJ0ZXhBdHRyaWJpdih1bnNp
Z25lZCBsb25nIGluZGV4LCB1bnNpZ25lZCBsb25nIHBuYW1lLCBpbnQqIHZhbHVlKSA9IDA7CisK
KyAgICB2aXJ0dWFsIGxvbmcgZ2V0VmVydGV4QXR0cmliT2Zmc2V0KHVuc2lnbmVkIGxvbmcgaW5k
ZXgsIHVuc2lnbmVkIGxvbmcgcG5hbWUpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBoaW50KHVu
c2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIG1vZGUpID0gMDsKKyAgICB2aXJ0dWFs
IGJvb2wgaXNCdWZmZXIoV2ViR0xJZCBidWZmZXIpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNF
bmFibGVkKHVuc2lnbmVkIGxvbmcgY2FwKSA9IDA7CisgICAgdmlydHVhbCBib29sIGlzRnJhbWVi
dWZmZXIoV2ViR0xJZCBmcmFtZWJ1ZmZlcikgPSAwOworICAgIHZpcnR1YWwgYm9vbCBpc1Byb2dy
YW0oV2ViR0xJZCBwcm9ncmFtKSA9IDA7CisgICAgdmlydHVhbCBib29sIGlzUmVuZGVyYnVmZmVy
KFdlYkdMSWQgcmVuZGVyYnVmZmVyKSA9IDA7CisgICAgdmlydHVhbCBib29sIGlzU2hhZGVyKFdl
YkdMSWQgc2hhZGVyKSA9IDA7CisgICAgdmlydHVhbCBib29sIGlzVGV4dHVyZShXZWJHTElkIHRl
eHR1cmUpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgbGluZVdpZHRoKGRvdWJsZSkgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBsaW5rUHJvZ3JhbShXZWJHTElkIHByb2dyYW0pID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgcGl4ZWxTdG9yZWkodW5zaWduZWQgbG9uZyBwbmFtZSwgbG9uZyBwYXJhbSkgPSAw
OworICAgIHZpcnR1YWwgdm9pZCBwb2x5Z29uT2Zmc2V0KGRvdWJsZSBmYWN0b3IsIGRvdWJsZSB1
bml0cykgPSAwOworCisgICAgdmlydHVhbCB2b2lkIHJlYWRQaXhlbHMobG9uZyB4LCBsb25nIHks
IHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0LCB1bnNpZ25lZCBsb25n
IGZvcm1hdCwgdW5zaWduZWQgbG9uZyB0eXBlLCB2b2lkKiBwaXhlbHMpID0gMDsKKworICAgIHZp
cnR1YWwgdm9pZCByZWxlYXNlU2hhZGVyQ29tcGlsZXIoKSA9IDA7CisgICAgdmlydHVhbCB2b2lk
IHJlbmRlcmJ1ZmZlclN0b3JhZ2UodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcg
aW50ZXJuYWxmb3JtYXQsIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNhbXBsZUNvdmVyYWdlKGRvdWJsZSB2YWx1ZSwgYm9v
bCBpbnZlcnQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2Npc3Nvcihsb25nIHgsIGxvbmcgeSwg
dW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQpID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgc2hhZGVyU291cmNlKFdlYkdMSWQgc2hhZGVyLCBjb25zdCBjaGFyKiBzdHJpbmcp
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc3RlbmNpbEZ1bmModW5zaWduZWQgbG9uZyBmdW5jLCBs
b25nIHJlZiwgdW5zaWduZWQgbG9uZyBtYXNrKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHN0ZW5j
aWxGdW5jU2VwYXJhdGUodW5zaWduZWQgbG9uZyBmYWNlLCB1bnNpZ25lZCBsb25nIGZ1bmMsIGxv
bmcgcmVmLCB1bnNpZ25lZCBsb25nIG1hc2spID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc3RlbmNp
bE1hc2sodW5zaWduZWQgbG9uZyBtYXNrKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHN0ZW5jaWxN
YXNrU2VwYXJhdGUodW5zaWduZWQgbG9uZyBmYWNlLCB1bnNpZ25lZCBsb25nIG1hc2spID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgc3RlbmNpbE9wKHVuc2lnbmVkIGxvbmcgZmFpbCwgdW5zaWduZWQg
bG9uZyB6ZmFpbCwgdW5zaWduZWQgbG9uZyB6cGFzcykgPSAwOworICAgIHZpcnR1YWwgdm9pZCBz
dGVuY2lsT3BTZXBhcmF0ZSh1bnNpZ25lZCBsb25nIGZhY2UsIHVuc2lnbmVkIGxvbmcgZmFpbCwg
dW5zaWduZWQgbG9uZyB6ZmFpbCwgdW5zaWduZWQgbG9uZyB6cGFzcykgPSAwOworCisgICAgdmly
dHVhbCB2b2lkIHRleEltYWdlMkQodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBsZXZlbCwgdW5z
aWduZWQgaW50ZXJuYWxmb3JtYXQsIHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQsIHVu
c2lnbmVkIGJvcmRlciwgdW5zaWduZWQgZm9ybWF0LCB1bnNpZ25lZCB0eXBlLCBjb25zdCB2b2lk
KiBwaXhlbHMpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCB0ZXhQYXJhbWV0ZXJmKHVuc2lnbmVk
IHRhcmdldCwgdW5zaWduZWQgcG5hbWUsIGZsb2F0IHBhcmFtKSA9IDA7CisgICAgdmlydHVhbCB2
b2lkIHRleFBhcmFtZXRlcmkodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBwbmFtZSwgaW50IHBh
cmFtKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgdGV4U3ViSW1hZ2UyRCh1bnNpZ25lZCB0YXJn
ZXQsIHVuc2lnbmVkIGxldmVsLCB1bnNpZ25lZCB4b2Zmc2V0LCB1bnNpZ25lZCB5b2Zmc2V0LCB1
bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0LCB1bnNpZ25lZCBmb3JtYXQsIHVuc2lnbmVk
IHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVscykgPSAwOworCisgICAgdmlydHVhbCB2b2lkIHVuaWZv
cm0xZihsb25nIGxvY2F0aW9uLCBmbG9hdCB4KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHVuaWZv
cm0xZnYobG9uZyBsb2NhdGlvbiwgaW50IGNvdW50LCBmbG9hdCogdikgPSAwOworICAgIHZpcnR1
YWwgdm9pZCB1bmlmb3JtMWkobG9uZyBsb2NhdGlvbiwgaW50IHgpID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgdW5pZm9ybTFpdihsb25nIGxvY2F0aW9uLCBpbnQgY291bnQsIGludCogdikgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCB1bmlmb3JtMmYobG9uZyBsb2NhdGlvbiwgZmxvYXQgeCwgZmxvYXQg
eSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCB1bmlmb3JtMmZ2KGxvbmcgbG9jYXRpb24sIGludCBj
b3VudCwgZmxvYXQqIHYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdW5pZm9ybTJpKGxvbmcgbG9j
YXRpb24sIGludCB4LCBpbnQgeSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCB1bmlmb3JtMml2KGxv
bmcgbG9jYXRpb24sIGludCBjb3VudCwgaW50KiB2KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHVu
aWZvcm0zZihsb25nIGxvY2F0aW9uLCBmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB6KSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIHVuaWZvcm0zZnYobG9uZyBsb2NhdGlvbiwgaW50IGNvdW50LCBmbG9h
dCogdikgPSAwOworICAgIHZpcnR1YWwgdm9pZCB1bmlmb3JtM2kobG9uZyBsb2NhdGlvbiwgaW50
IHgsIGludCB5LCBpbnQgeikgPSAwOworICAgIHZpcnR1YWwgdm9pZCB1bmlmb3JtM2l2KGxvbmcg
bG9jYXRpb24sIGludCBjb3VudCwgaW50KiB2KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHVuaWZv
cm00Zihsb25nIGxvY2F0aW9uLCBmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB6LCBmbG9hdCB3KSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIHVuaWZvcm00ZnYobG9uZyBsb2NhdGlvbiwgaW50IGNvdW50
LCBmbG9hdCogdikgPSAwOworICAgIHZpcnR1YWwgdm9pZCB1bmlmb3JtNGkobG9uZyBsb2NhdGlv
biwgaW50IHgsIGludCB5LCBpbnQgeiwgaW50IHcpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdW5p
Zm9ybTRpdihsb25nIGxvY2F0aW9uLCBpbnQgY291bnQsIGludCogdikgPSAwOworICAgIHZpcnR1
YWwgdm9pZCB1bmlmb3JtTWF0cml4MmZ2KGxvbmcgbG9jYXRpb24sIGludCBjb3VudCwgYm9vbCB0
cmFuc3Bvc2UsIGNvbnN0IGZsb2F0KiB2YWx1ZSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCB1bmlm
b3JtTWF0cml4M2Z2KGxvbmcgbG9jYXRpb24sIGludCBjb3VudCwgYm9vbCB0cmFuc3Bvc2UsIGNv
bnN0IGZsb2F0KiB2YWx1ZSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCB1bmlmb3JtTWF0cml4NGZ2
KGxvbmcgbG9jYXRpb24sIGludCBjb3VudCwgYm9vbCB0cmFuc3Bvc2UsIGNvbnN0IGZsb2F0KiB2
YWx1ZSkgPSAwOworCisgICAgdmlydHVhbCB2b2lkIHVzZVByb2dyYW0oV2ViR0xJZCBwcm9ncmFt
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHZhbGlkYXRlUHJvZ3JhbShXZWJHTElkIHByb2dyYW0p
ID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCB2ZXJ0ZXhBdHRyaWIxZih1bnNpZ25lZCBsb25nIGlu
ZHgsIGZsb2F0IHgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdmVydGV4QXR0cmliMWZ2KHVuc2ln
bmVkIGxvbmcgaW5keCwgY29uc3QgZmxvYXQqIHZhbHVlcykgPSAwOworICAgIHZpcnR1YWwgdm9p
ZCB2ZXJ0ZXhBdHRyaWIyZih1bnNpZ25lZCBsb25nIGluZHgsIGZsb2F0IHgsIGZsb2F0IHkpID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgdmVydGV4QXR0cmliMmZ2KHVuc2lnbmVkIGxvbmcgaW5keCwg
Y29uc3QgZmxvYXQqIHZhbHVlcykgPSAwOworICAgIHZpcnR1YWwgdm9pZCB2ZXJ0ZXhBdHRyaWIz
Zih1bnNpZ25lZCBsb25nIGluZHgsIGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHopID0gMDsKKyAg
ICB2aXJ0dWFsIHZvaWQgdmVydGV4QXR0cmliM2Z2KHVuc2lnbmVkIGxvbmcgaW5keCwgY29uc3Qg
ZmxvYXQqIHZhbHVlcykgPSAwOworICAgIHZpcnR1YWwgdm9pZCB2ZXJ0ZXhBdHRyaWI0Zih1bnNp
Z25lZCBsb25nIGluZHgsIGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHosIGZsb2F0IHcpID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgdmVydGV4QXR0cmliNGZ2KHVuc2lnbmVkIGxvbmcgaW5keCwgY29u
c3QgZmxvYXQqIHZhbHVlcykgPSAwOworICAgIHZpcnR1YWwgdm9pZCB2ZXJ0ZXhBdHRyaWJQb2lu
dGVyKHVuc2lnbmVkIGxvbmcgaW5keCwgaW50IHNpemUsIGludCB0eXBlLCBib29sIG5vcm1hbGl6
ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBz
dHJpZGUsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgdmll
d3BvcnQobG9uZyB4LCBsb25nIHksIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcg
aGVpZ2h0KSA9IDA7CisKKyAgICAvLyBTdXBwb3J0IGZvciBidWZmZXIgY3JlYXRpb24gYW5kIGRl
bGV0aW9uLgorICAgIHZpcnR1YWwgdW5zaWduZWQgY3JlYXRlQnVmZmVyKCkgPSAwOworICAgIHZp
cnR1YWwgdW5zaWduZWQgY3JlYXRlRnJhbWVidWZmZXIoKSA9IDA7CisgICAgdmlydHVhbCB1bnNp
Z25lZCBjcmVhdGVQcm9ncmFtKCkgPSAwOworICAgIHZpcnR1YWwgdW5zaWduZWQgY3JlYXRlUmVu
ZGVyYnVmZmVyKCkgPSAwOworICAgIHZpcnR1YWwgdW5zaWduZWQgY3JlYXRlU2hhZGVyKHVuc2ln
bmVkIGxvbmcpID0gMDsKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGNyZWF0ZVRleHR1cmUoKSA9IDA7
CisKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlQnVmZmVyKHVuc2lnbmVkKSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIGRlbGV0ZUZyYW1lYnVmZmVyKHVuc2lnbmVkKSA9IDA7CisgICAgdmlydHVhbCB2
b2lkIGRlbGV0ZVByb2dyYW0odW5zaWduZWQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRl
UmVuZGVyYnVmZmVyKHVuc2lnbmVkKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZVNoYWRl
cih1bnNpZ25lZCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVUZXh0dXJlKHVuc2lnbmVk
KSA9IDA7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmCkluZGV4OiBXZWJL
aXQvY2hyb21pdW0vcHVibGljL1dlYktpdENsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9j
aHJvbWl1bS9wdWJsaWMvV2ViS2l0Q2xpZW50LmgJKHJldmlzaW9uIDU2MzU2KQorKysgV2ViS2l0
L2Nocm9taXVtL3B1YmxpYy9XZWJLaXRDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDksNiAr
NDksNyBAQCBjbGFzcyBXZWJBcHBsaWNhdGlvbkNhY2hlSG9zdDsKIGNsYXNzIFdlYkFwcGxpY2F0
aW9uQ2FjaGVIb3N0Q2xpZW50OwogY2xhc3MgV2ViQ2xpcGJvYXJkOwogY2xhc3MgV2ViQ29va2ll
SmFyOworY2xhc3MgV2ViR3JhcGhpY3NDb250ZXh0M0Q7CiBjbGFzcyBXZWJJbmRleGVkRGF0YWJh
c2U7CiBjbGFzcyBXZWJNZXNzYWdlUG9ydENoYW5uZWw7CiBjbGFzcyBXZWJNaW1lUmVnaXN0cnk7
CkBAIC0yNjksNiArMjcwLDEyIEBAIHB1YmxpYzoKICAgICAvLyBDYWxsYWJsZSBmcm9tIGEgYmFj
a2dyb3VuZCBXZWJLaXQgdGhyZWFkLgogICAgIHZpcnR1YWwgdm9pZCBjYWxsT25NYWluVGhyZWFk
KHZvaWQgKCpmdW5jKSgpKSB7IH0KIAorICAgIC8vIFdlYkdMIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAvLyBNYXkg
cmV0dXJuIG51bGwgaWYgV2ViR0wgaXMgbm90IHN1cHBvcnRlZC4KKyAgICAvLyBSZXR1cm5zIG5l
d2x5IGFsbG9jYXRlZCBXZWJHcmFwaGljc0NvbnRleHQzRCBpbnN0YW5jZS4KKyAgICB2aXJ0dWFs
IFdlYkdyYXBoaWNzQ29udGV4dDNEKiBjcmVhdGVHcmFwaGljc0NvbnRleHQzRCgpIHsgcmV0dXJu
IDA7IH0KKwogcHJvdGVjdGVkOgogICAgIH5XZWJLaXRDbGllbnQoKSB7IH0KIH07CkluZGV4OiBX
ZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBoaWNzQ29udGV4dDNELmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBoaWNzQ29udGV4dDNELmNwcAkocmV2aXNpb24gNTYzNTYp
CisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBoaWNzQ29udGV4dDNELmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzQsMTMgKzM0LDEyIEBACiAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5o
IgogCi0jaW5jbHVkZSAiQ2FjaGVkSW1hZ2UuaCIKICNpbmNsdWRlICJDU3RyaW5nLmgiCisjaW5j
bHVkZSAiQ2FjaGVkSW1hZ2UuaCIKICNpbmNsdWRlICJIVE1MQ2FudmFzRWxlbWVudC5oIgogI2lu
Y2x1ZGUgIkhUTUxJbWFnZUVsZW1lbnQuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2lu
Y2x1ZGUgIkltYWdlRGF0YS5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVk
ZSAiV2ViR0xCdWZmZXIuaCIKICNpbmNsdWRlICJXZWJHTEJ5dGVBcnJheS5oIgogI2luY2x1ZGUg
IldlYkdMRmxvYXRBcnJheS5oIgpAQCAtNTIsMzkgKzUxLDQxIEBACiAjaW5jbHVkZSAiV2ViR0xT
aGFkZXIuaCIKICNpbmNsdWRlICJXZWJHTFRleHR1cmUuaCIKICNpbmNsdWRlICJXZWJHTFVuc2ln
bmVkQnl0ZUFycmF5LmgiCisjaW5jbHVkZSAiV2ViR3JhcGhpY3NDb250ZXh0M0QuaCIKKyNpbmNs
dWRlICJXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsLmgiCisjaW5jbHVkZSAiV2ViS2l0
LmgiCisjaW5jbHVkZSAiV2ViS2l0Q2xpZW50LmgiCiAKICNpbmNsdWRlIDxzdGRpby5oPgogI2lu
Y2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CiAKLSNpZiBPUyhXSU5ET1dTKQotI2luY2x1ZGUgPHdp
bmRvd3MuaD4KLSNlbmRpZgotCi0jaW5jbHVkZSAiR0wvZ2xldy5oIgotCiAjaWYgUExBVEZPUk0o
Q0cpCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSA8Q29yZUdyYXBoaWNz
L0NHQ29udGV4dC5oPgogI2luY2x1ZGUgPENvcmVHcmFwaGljcy9DR0ltYWdlLmg+Ci0jaW5jbHVk
ZSA8T3BlbkdML09wZW5HTC5oPgotI2Vsc2UKLSNkZWZpbmUgRkxJUF9GUkFNRUJVRkZFUl9WRVJU
SUNBTExZCi0jZW5kaWYKLQotI2lmIE9TKERBUldJTikKLSNkZWZpbmUgVVNFX1RFWFRVUkVfUkVD
VEFOR0xFX0ZPUl9GUkFNRUJVRkZFUgogI2VuZGlmCiAKLSNpZiBPUyhMSU5VWCkKLSNpbmNsdWRl
IDxkbGZjbi5oPgotI2luY2x1ZGUgIkdML2dseGV3LmgiCi0jZW5kaWYKKy8vIHVzaW5nIG5hbWVz
cGFjZSBzdGQ7CiAKLXVzaW5nIG5hbWVzcGFjZSBzdGQ7CisvLyBUaGVyZSBhcmUgdHdvIGxldmVs
cyBvZiBkZWxlZ2F0aW9uIGluIHRoaXMgZmlsZToKKy8vCisvLyAgIDEuIEdyYXBoaWNzQ29udGV4
dDNEIGRlbGVnYXRlcyB0byBHcmFwaGljc0NvbnRleHQzREludGVybmFsLiBUaGlzIGlzIGRvbmUK
Ky8vICAgICAgc28gdGhhdCB3ZSBoYXZlIHNvbWUgcGxhY2UgdG8gc3RvcmUgZGF0YSBtZW1iZXJz
IGNvbW1vbiBhbW9uZworLy8gICAgICBpbXBsZW1lbnRhdGlvbnM7IEdyYXBoaWNzQ29udGV4dDNE
IG9ubHkgcHJvdmlkZXMgdXMgdGhlIG1faW50ZXJuYWwKKy8vICAgICAgcG9pbnRlci4gV2UgYWx3
YXlzIGRlbGVnYXRlIHRvIHRoZSBHcmFwaGljc0NvbnRleHQzREludGVybmFsLiBXaGlsZSB3ZQor
Ly8gICAgICBjb3VsZCBzaWRlc3RlcCBpdCBhbmQgZ28gZGlyZWN0bHkgdG8gdGhlIFdlYkdyYXBo
aWNzQ29udGV4dDNEIGluIHNvbWUKKy8vICAgICAgY2FzZXMsIGl0IGlzIGJldHRlciBmb3IgY29u
c2lzdGVuY3kgdG8gYWx3YXlzIGRlbGVnYXRlIHRocm91Z2ggaXQuCisvLworLy8gICAyLiBHcmFw
aGljc0NvbnRleHQzREludGVybmFsIGRlbGVnYXRlcyB0byBhbiBpbXBsZW1lbnRhdGlvbiBvZgor
Ly8gICAgICBXZWJHcmFwaGljc0NvbnRleHQzRC4gVGhpcyBpcyBkb25lIHNvIHdlIGhhdmUgYSBw
bGFjZSB0byBpbmplY3QgYW4KKy8vICAgICAgaW1wbGVtZW50YXRpb24gd2hpY2ggcmVtb3RlcyB0
aGUgT3BlbkdMIGNhbGxzIGFjcm9zcyBwcm9jZXNzZXMuCisvLworLy8gVGhlIGxlZ2FjeSwgaW4t
cHJvY2VzcywgaW1wbGVtZW50YXRpb24gdXNlcyBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJ
bXBsLgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLS8vIEdyYXBoaWNzQ29udGV4dDNESW50ZXJu
YWwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
Ky8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQorLy8gR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbAogCiAvLyBVbmNv
bW1lbnQgdGhpcyB0byByZW5kZXIgdG8gYSBzZXBhcmF0ZSB3aW5kb3cgZm9yIGRlYnVnZ2luZwog
Ly8gI2RlZmluZSBSRU5ERVJfVE9fREVCVUdHSU5HX1dJTkRPVwpAQCAtOTMsODMgKzk0LDIwNyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwg
ewogcHVibGljOgotICAgIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwoR3JhcGhpY3NDb250ZXh0
M0Q6OkF0dHJpYnV0ZXMgYXR0cnMpOworICAgIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwoKTsK
ICAgICB+R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbCgpOwogCi0gICAgYm9vbCBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICBib29sIGluaXRpYWxpemUoR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJp
YnV0ZXMgYXR0cnMpOwogCiAgICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCBwbGF0Zm9ybUdy
YXBoaWNzQ29udGV4dDNEKCkgY29uc3Q7CiAgICAgUGxhdGZvcm0zRE9iamVjdCBwbGF0Zm9ybVRl
eHR1cmUoKSBjb25zdDsKIAorICAgIGJvb2wgbWFrZUNvbnRleHRDdXJyZW50KCk7CisKKyAgICBp
bnQgc2l6ZUluQnl0ZXMoaW50IHR5cGUpOworCiAgICAgdm9pZCByZXNoYXBlKGludCB3aWR0aCwg
aW50IGhlaWdodCk7CiAKICAgICB2b2lkIGJlZ2luUGFpbnQoV2ViR0xSZW5kZXJpbmdDb250ZXh0
KiBjb250ZXh0KTsKKyAgICB2b2lkIGVuZFBhaW50KCk7CiAKLSAgICBib29sIHZhbGlkYXRlVGV4
dHVyZVRhcmdldChpbnQgdGFyZ2V0KTsKLSAgICBib29sIHZhbGlkYXRlVGV4dHVyZVBhcmFtZXRl
cihpbnQgcGFyYW0pOwotCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gRW50cnkgcG9pbnRz
IGZvciBXZWJHTC4KKyAgICAvLwogICAgIHZvaWQgYWN0aXZlVGV4dHVyZSh1bnNpZ25lZCBsb25n
IHRleHR1cmUpOwotICAgIHZvaWQgYmluZEJ1ZmZlcih1bnNpZ25lZCBsb25nIHRhcmdldCwKLSAg
ICAgICAgICAgICAgICAgICAgV2ViR0xCdWZmZXIqIGJ1ZmZlcik7Ci0gICAgdm9pZCBiaW5kRnJh
bWVidWZmZXIodW5zaWduZWQgbG9uZyB0YXJnZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
V2ViR0xGcmFtZWJ1ZmZlciogZnJhbWVidWZmZXIpOwotICAgIHZvaWQgYmluZFRleHR1cmUodW5z
aWduZWQgbG9uZyB0YXJnZXQsCi0gICAgICAgICAgICAgICAgICAgICBXZWJHTFRleHR1cmUqIHRl
eHR1cmUpOwotICAgIHZvaWQgYnVmZmVyRGF0YUltcGwodW5zaWduZWQgbG9uZyB0YXJnZXQsIGlu
dCBzaXplLCBjb25zdCB2b2lkKiBkYXRhLCB1bnNpZ25lZCBsb25nIHVzYWdlKTsKKyAgICB2b2lk
IGF0dGFjaFNoYWRlcihXZWJHTFByb2dyYW0qIHByb2dyYW0sIFdlYkdMU2hhZGVyKiBzaGFkZXIp
OworICAgIHZvaWQgYmluZEF0dHJpYkxvY2F0aW9uKFdlYkdMUHJvZ3JhbSosIHVuc2lnbmVkIGxv
bmcgaW5kZXgsIGNvbnN0IFN0cmluZyYgbmFtZSk7CisgICAgdm9pZCBiaW5kQnVmZmVyKHVuc2ln
bmVkIGxvbmcgdGFyZ2V0LCBXZWJHTEJ1ZmZlciopOworICAgIHZvaWQgYmluZEZyYW1lYnVmZmVy
KHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBXZWJHTEZyYW1lYnVmZmVyKik7CisgICAgdm9pZCBiaW5k
UmVuZGVyYnVmZmVyKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBXZWJHTFJlbmRlcmJ1ZmZlciopOwor
ICAgIHZvaWQgYmluZFRleHR1cmUodW5zaWduZWQgbG9uZyB0YXJnZXQsIFdlYkdMVGV4dHVyZSog
dGV4dHVyZSk7CisgICAgdm9pZCBibGVuZENvbG9yKGRvdWJsZSByZWQsIGRvdWJsZSBncmVlbiwg
ZG91YmxlIGJsdWUsIGRvdWJsZSBhbHBoYSk7CisgICAgdm9pZCBibGVuZEVxdWF0aW9uKHVuc2ln
bmVkIGxvbmcgbW9kZSk7CisgICAgdm9pZCBibGVuZEVxdWF0aW9uU2VwYXJhdGUodW5zaWduZWQg
bG9uZyBtb2RlUkdCLCB1bnNpZ25lZCBsb25nIG1vZGVBbHBoYSk7CisgICAgdm9pZCBibGVuZEZ1
bmModW5zaWduZWQgbG9uZyBzZmFjdG9yLCB1bnNpZ25lZCBsb25nIGRmYWN0b3IpOworICAgIHZv
aWQgYmxlbmRGdW5jU2VwYXJhdGUodW5zaWduZWQgbG9uZyBzcmNSR0IsIHVuc2lnbmVkIGxvbmcg
ZHN0UkdCLCB1bnNpZ25lZCBsb25nIHNyY0FscGhhLCB1bnNpZ25lZCBsb25nIGRzdEFscGhhKTsK
KworICAgIHZvaWQgYnVmZmVyRGF0YSh1bnNpZ25lZCBsb25nIHRhcmdldCwgaW50IHNpemUsIHVu
c2lnbmVkIGxvbmcgdXNhZ2UpOworICAgIHZvaWQgYnVmZmVyRGF0YSh1bnNpZ25lZCBsb25nIHRh
cmdldCwgV2ViR0xBcnJheSogZGF0YSwgdW5zaWduZWQgbG9uZyB1c2FnZSk7CisgICAgdm9pZCBi
dWZmZXJTdWJEYXRhKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBsb25nIG9mZnNldCwgV2ViR0xBcnJh
eSogZGF0YSk7CisKKyAgICB1bnNpZ25lZCBsb25nIGNoZWNrRnJhbWVidWZmZXJTdGF0dXModW5z
aWduZWQgbG9uZyB0YXJnZXQpOworICAgIHZvaWQgY2xlYXIodW5zaWduZWQgbG9uZyBtYXNrKTsK
KyAgICB2b2lkIGNsZWFyQ29sb3IoZG91YmxlIHJlZCwgZG91YmxlIGdyZWVuLCBkb3VibGUgYmx1
ZSwgZG91YmxlIGFscGhhKTsKKyAgICB2b2lkIGNsZWFyRGVwdGgoZG91YmxlIGRlcHRoKTsKKyAg
ICB2b2lkIGNsZWFyU3RlbmNpbChsb25nIHMpOworICAgIHZvaWQgY29sb3JNYXNrKGJvb2wgcmVk
LCBib29sIGdyZWVuLCBib29sIGJsdWUsIGJvb2wgYWxwaGEpOworICAgIHZvaWQgY29tcGlsZVNo
YWRlcihXZWJHTFNoYWRlciopOworCisgICAgdm9pZCBjb3B5VGV4SW1hZ2UyRCh1bnNpZ25lZCBs
b25nIHRhcmdldCwgbG9uZyBsZXZlbCwgdW5zaWduZWQgbG9uZyBpbnRlcm5hbGZvcm1hdCwgbG9u
ZyB4LCBsb25nIHksIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0LCBs
b25nIGJvcmRlcik7CisgICAgdm9pZCBjb3B5VGV4U3ViSW1hZ2UyRCh1bnNpZ25lZCBsb25nIHRh
cmdldCwgbG9uZyBsZXZlbCwgbG9uZyB4b2Zmc2V0LCBsb25nIHlvZmZzZXQsIGxvbmcgeCwgbG9u
ZyB5LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCk7CisgICAgdm9p
ZCBjdWxsRmFjZSh1bnNpZ25lZCBsb25nIG1vZGUpOworICAgIHZvaWQgZGVwdGhGdW5jKHVuc2ln
bmVkIGxvbmcgZnVuYyk7CisgICAgdm9pZCBkZXB0aE1hc2soYm9vbCBmbGFnKTsKKyAgICB2b2lk
IGRlcHRoUmFuZ2UoZG91YmxlIHpOZWFyLCBkb3VibGUgekZhcik7CisgICAgdm9pZCBkZXRhY2hT
aGFkZXIoV2ViR0xQcm9ncmFtKiwgV2ViR0xTaGFkZXIqKTsKKyAgICB2b2lkIGRpc2FibGUodW5z
aWduZWQgbG9uZyBjYXApOwogICAgIHZvaWQgZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KHVuc2ln
bmVkIGxvbmcgaW5kZXgpOworICAgIHZvaWQgZHJhd0FycmF5cyh1bnNpZ25lZCBsb25nIG1vZGUs
IGxvbmcgZmlyc3QsIGxvbmcgY291bnQpOworICAgIHZvaWQgZHJhd0VsZW1lbnRzKHVuc2lnbmVk
IGxvbmcgbW9kZSwgdW5zaWduZWQgbG9uZyBjb3VudCwgdW5zaWduZWQgbG9uZyB0eXBlLCBsb25n
IG9mZnNldCk7CisKKyAgICB2b2lkIGVuYWJsZSh1bnNpZ25lZCBsb25nIGNhcCk7CiAgICAgdm9p
ZCBlbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSh1bnNpZ25lZCBsb25nIGluZGV4KTsKLSAgICB1bnNp
Z25lZCBsb25nIGdldEVycm9yKCk7CisgICAgdm9pZCBmaW5pc2goKTsKKyAgICB2b2lkIGZsdXNo
KCk7CisgICAgdm9pZCBmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcih1bnNpZ25lZCBsb25nIHRhcmdl
dCwgdW5zaWduZWQgbG9uZyBhdHRhY2htZW50LCB1bnNpZ25lZCBsb25nIHJlbmRlcmJ1ZmZlcnRh
cmdldCwgV2ViR0xSZW5kZXJidWZmZXIqKTsKKyAgICB2b2lkIGZyYW1lYnVmZmVyVGV4dHVyZTJE
KHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIGF0dGFjaG1lbnQsIHVuc2lnbmVk
IGxvbmcgdGV4dGFyZ2V0LCBXZWJHTFRleHR1cmUqLCBsb25nIGxldmVsKTsKKyAgICB2b2lkIGZy
b250RmFjZSh1bnNpZ25lZCBsb25nIG1vZGUpOworICAgIHZvaWQgZ2VuZXJhdGVNaXBtYXAodW5z
aWduZWQgbG9uZyB0YXJnZXQpOworCisgICAgYm9vbCBnZXRBY3RpdmVBdHRyaWIoV2ViR0xQcm9n
cmFtKiBwcm9ncmFtLCB1bnNpZ25lZCBsb25nIGluZGV4LCBBY3RpdmVJbmZvJik7CisgICAgYm9v
bCBnZXRBY3RpdmVVbmlmb3JtKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgdW5zaWduZWQgbG9uZyBp
bmRleCwgQWN0aXZlSW5mbyYpOworCisgICAgaW50ICBnZXRBdHRyaWJMb2NhdGlvbihXZWJHTFBy
b2dyYW0qLCBjb25zdCBTdHJpbmcmIG5hbWUpOworCisgICAgdm9pZCBnZXRCb29sZWFudih1bnNp
Z25lZCBsb25nIHBuYW1lLCB1bnNpZ25lZCBjaGFyKiB2YWx1ZSk7CisKKyAgICB2b2lkIGdldEJ1
ZmZlclBhcmFtZXRlcml2KHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIHBuYW1l
LCBpbnQqIHZhbHVlKTsKKwogICAgIEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGdldENv
bnRleHRBdHRyaWJ1dGVzKCk7Ci0gICAgdm9pZCB2ZXJ0ZXhBdHRyaWJQb2ludGVyKHVuc2lnbmVk
IGxvbmcgaW5keCwgaW50IHNpemUsIGludCB0eXBlLCBib29sIG5vcm1hbGl6ZWQsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgc3RyaWRlLCB1bnNpZ25lZCBsb25n
IG9mZnNldCk7Ci0gICAgdm9pZCB2aWV3cG9ydEltcGwobG9uZyB4LCBsb25nIHksIHVuc2lnbmVk
IGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0KTsKIAotICAgIHZvaWQgc3ludGhlc2l6
ZUdMRXJyb3IodW5zaWduZWQgbG9uZyBlcnJvcik7CisgICAgdW5zaWduZWQgbG9uZyBnZXRFcnJv
cigpOwogCi1wcml2YXRlOgotICAgIEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIG1fYXR0
cnM7CisgICAgdm9pZCBnZXRGbG9hdHYodW5zaWduZWQgbG9uZyBwbmFtZSwgZmxvYXQqIHZhbHVl
KTsKIAotICAgIHVuc2lnbmVkIGludCBtX3RleHR1cmU7Ci0gICAgdW5zaWduZWQgaW50IG1fZmJv
OwotICAgIHVuc2lnbmVkIGludCBtX2RlcHRoQnVmZmVyOwotICAgIHVuc2lnbmVkIGludCBtX2Nh
Y2hlZFdpZHRoLCBtX2NhY2hlZEhlaWdodDsKLQotICAgIC8vIEZvciB0cmFja2luZyB3aGljaCBG
Qk8gaXMgYm91bmQKLSAgICB1bnNpZ25lZCBpbnQgbV9ib3VuZEZCTzsKLQotI2lmZGVmIEZMSVBf
RlJBTUVCVUZGRVJfVkVSVElDQUxMWQotICAgIHVuc2lnbmVkIGNoYXIqIG1fc2NhbmxpbmU7Ci0g
ICAgdm9pZCBmbGlwVmVydGljYWxseSh1bnNpZ25lZCBjaGFyKiBmcmFtZWJ1ZmZlciwKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCB3aWR0aCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIGludCBoZWlnaHQpOwotI2VuZGlmCisgICAgdm9pZCBnZXRGcmFtZWJ1
ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpdih1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQg
bG9uZyBhdHRhY2htZW50LCB1bnNpZ25lZCBsb25nIHBuYW1lLCBpbnQqIHZhbHVlKTsKKworICAg
IHZvaWQgZ2V0SW50ZWdlcnYodW5zaWduZWQgbG9uZyBwbmFtZSwgaW50KiB2YWx1ZSk7CisKKyAg
ICB2b2lkIGdldFByb2dyYW1pdihXZWJHTFByb2dyYW0qIHByb2dyYW0sIHVuc2lnbmVkIGxvbmcg
cG5hbWUsIGludCogdmFsdWUpOworCisgICAgU3RyaW5nIGdldFByb2dyYW1JbmZvTG9nKFdlYkdM
UHJvZ3JhbSopOworCisgICAgdm9pZCBnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdih1bnNpZ25l
ZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBwbmFtZSwgaW50KiB2YWx1ZSk7CisKKyAgICB2
b2lkIGdldFNoYWRlcml2KFdlYkdMU2hhZGVyKiwgdW5zaWduZWQgbG9uZyBwbmFtZSwgaW50KiB2
YWx1ZSk7CisKKyAgICBTdHJpbmcgZ2V0U2hhZGVySW5mb0xvZyhXZWJHTFNoYWRlciopOworCisg
ICAgU3RyaW5nIGdldFNoYWRlclNvdXJjZShXZWJHTFNoYWRlciopOworICAgIFN0cmluZyBnZXRT
dHJpbmcodW5zaWduZWQgbG9uZyBuYW1lKTsKKworICAgIHZvaWQgZ2V0VGV4UGFyYW1ldGVyZnYo
dW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgcG5hbWUsIGZsb2F0KiB2YWx1ZSk7
CisgICAgdm9pZCBnZXRUZXhQYXJhbWV0ZXJpdih1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWdu
ZWQgbG9uZyBwbmFtZSwgaW50KiB2YWx1ZSk7CisKKyAgICB2b2lkIGdldFVuaWZvcm1mdihXZWJH
TFByb2dyYW0qIHByb2dyYW0sIGxvbmcgbG9jYXRpb24sIGZsb2F0KiB2YWx1ZSk7CisgICAgdm9p
ZCBnZXRVbmlmb3JtaXYoV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBsb25nIGxvY2F0aW9uLCBpbnQq
IHZhbHVlKTsKKworICAgIGxvbmcgZ2V0VW5pZm9ybUxvY2F0aW9uKFdlYkdMUHJvZ3JhbSosIGNv
bnN0IFN0cmluZyYgbmFtZSk7CisKKyAgICB2b2lkIGdldFZlcnRleEF0dHJpYmZ2KHVuc2lnbmVk
IGxvbmcgaW5kZXgsIHVuc2lnbmVkIGxvbmcgcG5hbWUsIGZsb2F0KiB2YWx1ZSk7CisgICAgdm9p
ZCBnZXRWZXJ0ZXhBdHRyaWJpdih1bnNpZ25lZCBsb25nIGluZGV4LCB1bnNpZ25lZCBsb25nIHBu
YW1lLCBpbnQqIHZhbHVlKTsKKworICAgIGxvbmcgZ2V0VmVydGV4QXR0cmliT2Zmc2V0KHVuc2ln
bmVkIGxvbmcgaW5kZXgsIHVuc2lnbmVkIGxvbmcgcG5hbWUpOworCisgICAgdm9pZCBoaW50KHVu
c2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIG1vZGUpOworICAgIGJvb2wgaXNCdWZm
ZXIoV2ViR0xCdWZmZXIqKTsKKyAgICBib29sIGlzRW5hYmxlZCh1bnNpZ25lZCBsb25nIGNhcCk7
CisgICAgYm9vbCBpc0ZyYW1lYnVmZmVyKFdlYkdMRnJhbWVidWZmZXIqKTsKKyAgICBib29sIGlz
UHJvZ3JhbShXZWJHTFByb2dyYW0qKTsKKyAgICBib29sIGlzUmVuZGVyYnVmZmVyKFdlYkdMUmVu
ZGVyYnVmZmVyKik7CisgICAgYm9vbCBpc1NoYWRlcihXZWJHTFNoYWRlciopOworICAgIGJvb2wg
aXNUZXh0dXJlKFdlYkdMVGV4dHVyZSopOworICAgIHZvaWQgbGluZVdpZHRoKGRvdWJsZSk7Cisg
ICAgdm9pZCBsaW5rUHJvZ3JhbShXZWJHTFByb2dyYW0qKTsKKyAgICB2b2lkIHBpeGVsU3RvcmVp
KHVuc2lnbmVkIGxvbmcgcG5hbWUsIGxvbmcgcGFyYW0pOworICAgIHZvaWQgcG9seWdvbk9mZnNl
dChkb3VibGUgZmFjdG9yLCBkb3VibGUgdW5pdHMpOworCisgICAgUGFzc1JlZlB0cjxXZWJHTEFy
cmF5PiByZWFkUGl4ZWxzKGxvbmcgeCwgbG9uZyB5LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNp
Z25lZCBsb25nIGhlaWdodCwgdW5zaWduZWQgbG9uZyBmb3JtYXQsIHVuc2lnbmVkIGxvbmcgdHlw
ZSk7CisKKyAgICB2b2lkIHJlbGVhc2VTaGFkZXJDb21waWxlcigpOworICAgIHZvaWQgcmVuZGVy
YnVmZmVyU3RvcmFnZSh1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBpbnRlcm5h
bGZvcm1hdCwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQpOworICAg
IHZvaWQgc2FtcGxlQ292ZXJhZ2UoZG91YmxlIHZhbHVlLCBib29sIGludmVydCk7CisgICAgdm9p
ZCBzY2lzc29yKGxvbmcgeCwgbG9uZyB5LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBs
b25nIGhlaWdodCk7CisgICAgdm9pZCBzaGFkZXJTb3VyY2UoV2ViR0xTaGFkZXIqLCBjb25zdCBT
dHJpbmcmIHN0cmluZyk7CisgICAgdm9pZCBzdGVuY2lsRnVuYyh1bnNpZ25lZCBsb25nIGZ1bmMs
IGxvbmcgcmVmLCB1bnNpZ25lZCBsb25nIG1hc2spOworICAgIHZvaWQgc3RlbmNpbEZ1bmNTZXBh
cmF0ZSh1bnNpZ25lZCBsb25nIGZhY2UsIHVuc2lnbmVkIGxvbmcgZnVuYywgbG9uZyByZWYsIHVu
c2lnbmVkIGxvbmcgbWFzayk7CisgICAgdm9pZCBzdGVuY2lsTWFzayh1bnNpZ25lZCBsb25nIG1h
c2spOworICAgIHZvaWQgc3RlbmNpbE1hc2tTZXBhcmF0ZSh1bnNpZ25lZCBsb25nIGZhY2UsIHVu
c2lnbmVkIGxvbmcgbWFzayk7CisgICAgdm9pZCBzdGVuY2lsT3AodW5zaWduZWQgbG9uZyBmYWls
LCB1bnNpZ25lZCBsb25nIHpmYWlsLCB1bnNpZ25lZCBsb25nIHpwYXNzKTsKKyAgICB2b2lkIHN0
ZW5jaWxPcFNlcGFyYXRlKHVuc2lnbmVkIGxvbmcgZmFjZSwgdW5zaWduZWQgbG9uZyBmYWlsLCB1
bnNpZ25lZCBsb25nIHpmYWlsLCB1bnNpZ25lZCBsb25nIHpwYXNzKTsKKworICAgIC8vIFRoZXNl
IG5leHQgc2V2ZXJhbCBmdW5jdGlvbnMgcmV0dXJuIGFuIGVycm9yIGNvZGUgKDAgaWYgbm8gZXJy
b3JzKSByYXRoZXIgdGhhbiB1c2luZyBhbiBFeGNlcHRpb25Db2RlLgorICAgIC8vIEN1cnJlbnRs
eSB0aGV5IHJldHVybiAtMSBvbiBhbnkgZXJyb3IuCisgICAgaW50IHRleEltYWdlMkQodW5zaWdu
ZWQgdGFyZ2V0LCB1bnNpZ25lZCBsZXZlbCwgdW5zaWduZWQgaW50ZXJuYWxmb3JtYXQsIHVuc2ln
bmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQsIHVuc2lnbmVkIGJvcmRlciwgdW5zaWduZWQgZm9y
bWF0LCB1bnNpZ25lZCB0eXBlLCB2b2lkKiBwaXhlbHMpOworCisgICAgdm9pZCB0ZXhQYXJhbWV0
ZXJmKHVuc2lnbmVkIHRhcmdldCwgdW5zaWduZWQgcG5hbWUsIGZsb2F0IHBhcmFtKTsKKyAgICB2
b2lkIHRleFBhcmFtZXRlcmkodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBwbmFtZSwgaW50IHBh
cmFtKTsKKworICAgIGludCB0ZXhTdWJJbWFnZTJEKHVuc2lnbmVkIHRhcmdldCwgdW5zaWduZWQg
bGV2ZWwsIHVuc2lnbmVkIHhvZmZzZXQsIHVuc2lnbmVkIHlvZmZzZXQsIHVuc2lnbmVkIHdpZHRo
LCB1bnNpZ25lZCBoZWlnaHQsIHVuc2lnbmVkIGZvcm1hdCwgdW5zaWduZWQgdHlwZSwgdm9pZCog
cGl4ZWxzKTsKKworICAgIHZvaWQgdW5pZm9ybTFmKGxvbmcgbG9jYXRpb24sIGZsb2F0IHgpOwor
ICAgIHZvaWQgdW5pZm9ybTFmdihsb25nIGxvY2F0aW9uLCBmbG9hdCogdiwgaW50IHNpemUpOwor
ICAgIHZvaWQgdW5pZm9ybTFpKGxvbmcgbG9jYXRpb24sIGludCB4KTsKKyAgICB2b2lkIHVuaWZv
cm0xaXYobG9uZyBsb2NhdGlvbiwgaW50KiB2LCBpbnQgc2l6ZSk7CisgICAgdm9pZCB1bmlmb3Jt
MmYobG9uZyBsb2NhdGlvbiwgZmxvYXQgeCwgZmxvYXQgeSk7CisgICAgdm9pZCB1bmlmb3JtMmZ2
KGxvbmcgbG9jYXRpb24sIGZsb2F0KiB2LCBpbnQgc2l6ZSk7CisgICAgdm9pZCB1bmlmb3JtMmko
bG9uZyBsb2NhdGlvbiwgaW50IHgsIGludCB5KTsKKyAgICB2b2lkIHVuaWZvcm0yaXYobG9uZyBs
b2NhdGlvbiwgaW50KiB2LCBpbnQgc2l6ZSk7CisgICAgdm9pZCB1bmlmb3JtM2YobG9uZyBsb2Nh
dGlvbiwgZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgeik7CisgICAgdm9pZCB1bmlmb3JtM2Z2KGxv
bmcgbG9jYXRpb24sIGZsb2F0KiB2LCBpbnQgc2l6ZSk7CisgICAgdm9pZCB1bmlmb3JtM2kobG9u
ZyBsb2NhdGlvbiwgaW50IHgsIGludCB5LCBpbnQgeik7CisgICAgdm9pZCB1bmlmb3JtM2l2KGxv
bmcgbG9jYXRpb24sIGludCogdiwgaW50IHNpemUpOworICAgIHZvaWQgdW5pZm9ybTRmKGxvbmcg
bG9jYXRpb24sIGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHosIGZsb2F0IHcpOworICAgIHZvaWQg
dW5pZm9ybTRmdihsb25nIGxvY2F0aW9uLCBmbG9hdCogdiwgaW50IHNpemUpOworICAgIHZvaWQg
dW5pZm9ybTRpKGxvbmcgbG9jYXRpb24sIGludCB4LCBpbnQgeSwgaW50IHosIGludCB3KTsKKyAg
ICB2b2lkIHVuaWZvcm00aXYobG9uZyBsb2NhdGlvbiwgaW50KiB2LCBpbnQgc2l6ZSk7CisgICAg
dm9pZCB1bmlmb3JtTWF0cml4MmZ2KGxvbmcgbG9jYXRpb24sIGJvb2wgdHJhbnNwb3NlLCBmbG9h
dCogdmFsdWUsIGludCBzaXplKTsKKyAgICB2b2lkIHVuaWZvcm1NYXRyaXgzZnYobG9uZyBsb2Nh
dGlvbiwgYm9vbCB0cmFuc3Bvc2UsIGZsb2F0KiB2YWx1ZSwgaW50IHNpemUpOworICAgIHZvaWQg
dW5pZm9ybU1hdHJpeDRmdihsb25nIGxvY2F0aW9uLCBib29sIHRyYW5zcG9zZSwgZmxvYXQqIHZh
bHVlLCBpbnQgc2l6ZSk7CisKKyAgICB2b2lkIHVzZVByb2dyYW0oV2ViR0xQcm9ncmFtKik7Cisg
ICAgdm9pZCB2YWxpZGF0ZVByb2dyYW0oV2ViR0xQcm9ncmFtKik7CisKKyAgICB2b2lkIHZlcnRl
eEF0dHJpYjFmKHVuc2lnbmVkIGxvbmcgaW5keCwgZmxvYXQgeCk7CisgICAgdm9pZCB2ZXJ0ZXhB
dHRyaWIxZnYodW5zaWduZWQgbG9uZyBpbmR4LCBmbG9hdCogdmFsdWVzKTsKKyAgICB2b2lkIHZl
cnRleEF0dHJpYjJmKHVuc2lnbmVkIGxvbmcgaW5keCwgZmxvYXQgeCwgZmxvYXQgeSk7CisgICAg
dm9pZCB2ZXJ0ZXhBdHRyaWIyZnYodW5zaWduZWQgbG9uZyBpbmR4LCBmbG9hdCogdmFsdWVzKTsK
KyAgICB2b2lkIHZlcnRleEF0dHJpYjNmKHVuc2lnbmVkIGxvbmcgaW5keCwgZmxvYXQgeCwgZmxv
YXQgeSwgZmxvYXQgeik7CisgICAgdm9pZCB2ZXJ0ZXhBdHRyaWIzZnYodW5zaWduZWQgbG9uZyBp
bmR4LCBmbG9hdCogdmFsdWVzKTsKKyAgICB2b2lkIHZlcnRleEF0dHJpYjRmKHVuc2lnbmVkIGxv
bmcgaW5keCwgZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgeiwgZmxvYXQgdyk7CisgICAgdm9pZCB2
ZXJ0ZXhBdHRyaWI0ZnYodW5zaWduZWQgbG9uZyBpbmR4LCBmbG9hdCogdmFsdWVzKTsKKyAgICB2
b2lkIHZlcnRleEF0dHJpYlBvaW50ZXIodW5zaWduZWQgbG9uZyBpbmR4LCBpbnQgc2l6ZSwgaW50
IHR5cGUsIGJvb2wgbm9ybWFsaXplZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5z
aWduZWQgbG9uZyBzdHJpZGUsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KTsKIAotICAgIC8vIE5vdGU6
IHdlIGFyZW4ndCBjdXJyZW50bHkgdXNpbmcgdGhpcyBpbmZvcm1hdGlvbiwgYnV0IHdlIHdpbGwK
LSAgICAvLyBuZWVkIHRvIGluIG9yZGVyIHRvIHZlcmlmeSB0aGF0IGFsbCBlbmFibGVkIHZlcnRl
eCBhcnJheXMgaGF2ZQotICAgIC8vIGEgdmFsaWQgYnVmZmVyIGJvdW5kIC0tIHRvIGF2b2lkIGNy
YXNoZXMgb24gY2VydGFpbiBjYXJkcy4KLSAgICB1bnNpZ25lZCBpbnQgbV9ib3VuZEFycmF5QnVm
ZmVyOwotICAgIGNsYXNzIFZlcnRleEF0dHJpYlBvaW50ZXJTdGF0ZSB7Ci0gICAgcHVibGljOgot
ICAgICAgICBWZXJ0ZXhBdHRyaWJQb2ludGVyU3RhdGUoKTsKLQotICAgICAgICBib29sIGVuYWJs
ZWQ7Ci0gICAgICAgIHVuc2lnbmVkIGxvbmcgYnVmZmVyOwotICAgICAgICB1bnNpZ25lZCBsb25n
IGluZHg7Ci0gICAgICAgIGludCBzaXplOwotICAgICAgICBpbnQgdHlwZTsKLSAgICAgICAgYm9v
bCBub3JtYWxpemVkOwotICAgICAgICB1bnNpZ25lZCBsb25nIHN0cmlkZTsKLSAgICAgICAgdW5z
aWduZWQgbG9uZyBvZmZzZXQ7Ci0gICAgfTsKLQotICAgIGVudW0gewotICAgICAgICBOdW1UcmFj
a2VkUG9pbnRlclN0YXRlcyA9IDIKLSAgICB9OwotICAgIFZlcnRleEF0dHJpYlBvaW50ZXJTdGF0
ZSBtX3ZlcnRleEF0dHJpYlBvaW50ZXJTdGF0ZVtOdW1UcmFja2VkUG9pbnRlclN0YXRlc107Cisg
ICAgdm9pZCB2aWV3cG9ydChsb25nIHgsIGxvbmcgeSwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5z
aWduZWQgbG9uZyBoZWlnaHQpOwogCi0gICAgLy8gRXJyb3JzIHJhaXNlZCBieSBzeW50aGVzaXpl
R0xFcnJvcigpLgotICAgIExpc3RIYXNoU2V0PHVuc2lnbmVkIGxvbmc+IG1fc3ludGhldGljRXJy
b3JzOworICAgIHVuc2lnbmVkIGNyZWF0ZUJ1ZmZlcigpOworICAgIHVuc2lnbmVkIGNyZWF0ZUZy
YW1lYnVmZmVyKCk7CisgICAgdW5zaWduZWQgY3JlYXRlUHJvZ3JhbSgpOworICAgIHVuc2lnbmVk
IGNyZWF0ZVJlbmRlcmJ1ZmZlcigpOworICAgIHVuc2lnbmVkIGNyZWF0ZVNoYWRlcih1bnNpZ25l
ZCBsb25nKTsKKyAgICB1bnNpZ25lZCBjcmVhdGVUZXh0dXJlKCk7CisKKyAgICB2b2lkIGRlbGV0
ZUJ1ZmZlcih1bnNpZ25lZCk7CisgICAgdm9pZCBkZWxldGVGcmFtZWJ1ZmZlcih1bnNpZ25lZCk7
CisgICAgdm9pZCBkZWxldGVQcm9ncmFtKHVuc2lnbmVkKTsKKyAgICB2b2lkIGRlbGV0ZVJlbmRl
cmJ1ZmZlcih1bnNpZ25lZCk7CisgICAgdm9pZCBkZWxldGVTaGFkZXIodW5zaWduZWQpOworICAg
IHZvaWQgZGVsZXRlVGV4dHVyZSh1bnNpZ25lZCk7CiAKKyAgICB2b2lkIHN5bnRoZXNpemVHTEVy
cm9yKHVuc2lnbmVkIGxvbmcgZXJyb3IpOworCitwcml2YXRlOgorICAgIE93blB0cjxXZWJLaXQ6
OldlYkdyYXBoaWNzQ29udGV4dDNEPiBtX2ltcGw7CiAjaWYgUExBVEZPUk0oU0tJQSkKICAgICAv
LyBJZiB0aGUgd2lkdGggYW5kIGhlaWdodCBvZiB0aGUgQ2FudmFzJ3MgYmFja2luZyBzdG9yZSBk
b24ndAogICAgIC8vIG1hdGNoIHRob3NlIHRoYXQgd2Ugd2VyZSBnaXZlbiBpbiB0aGUgbW9zdCBy
ZWNlbnQgY2FsbCB0bwpAQCAtMTc5LDU5MyArMzA0LDc0IEBAIHByaXZhdGU6CiAgICAgU2tCaXRt
YXAqIG1fcmVzaXppbmdCaXRtYXA7CiAjZW5kaWYKIAotICAgIHN0YXRpYyBib29sIHNfaW5pdGlh
bGl6ZWRHTEVXOwotI2lmIE9TKFdJTkRPV1MpCi0gICAgSFdORCAgbV9jYW52YXNXaW5kb3c7Ci0g
ICAgSERDICAgbV9jYW52YXNEQzsKLSAgICBIR0xSQyBtX2NvbnRleHRPYmo7Ci0jZWxpZiBQTEFU
Rk9STShDRykKLSAgICBDR0xQQnVmZmVyT2JqIG1fcGJ1ZmZlcjsKLSAgICBDR0xDb250ZXh0T2Jq
IG1fY29udGV4dE9iajsKKyNpZiBQTEFURk9STShDRykKICAgICB1bnNpZ25lZCBjaGFyKiBtX3Jl
bmRlck91dHB1dDsKLSNlbGlmIE9TKExJTlVYKQotICAgIEdMWENvbnRleHQgbV9jb250ZXh0T2Jq
OwotICAgIEdMWFBidWZmZXIgbV9wYnVmZmVyOwotCi0gICAgLy8gSW4gb3JkZXIgdG8gYXZvaWQg
cHJvYmxlbXMgY2F1c2VkIGJ5IGxpbmtpbmcgYWdhaW5zdCBsaWJHTCwgd2UKLSAgICAvLyBkeW5h
bWljYWxseSBsb29rIHVwIGFsbCB0aGUgc3ltYm9scyB3ZSBuZWVkLgotICAgIC8vIGh0dHA6Ly9j
b2RlLmdvb2dsZS5jb20vcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTE2ODAwCi0gICAgY2xh
c3MgR0xDb25uZWN0aW9uIHsKLSAgICAgIHB1YmxpYzoKLSAgICAgICAgfkdMQ29ubmVjdGlvbigp
OwotCi0gICAgICAgIHN0YXRpYyBHTENvbm5lY3Rpb24qIGNyZWF0ZSgpOwotCi0gICAgICAgIEdM
WEZCQ29uZmlnKiBjaG9vc2VGQkNvbmZpZyhpbnQgc2NyZWVuLCBjb25zdCBpbnQgKmF0dHJpYl9s
aXN0LCBpbnQgKm5lbGVtZW50cykKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1fZ2xY
Q2hvb3NlRkJDb25maWcobV9kaXNwbGF5LCBzY3JlZW4sIGF0dHJpYl9saXN0LCBuZWxlbWVudHMp
OwotICAgICAgICB9Ci0KLSAgICAgICAgR0xYQ29udGV4dCBjcmVhdGVOZXdDb250ZXh0KEdMWEZC
Q29uZmlnIGNvbmZpZywgaW50IHJlbmRlclR5cGUsIEdMWENvbnRleHQgc2hhcmVMaXN0LCBCb29s
IGRpcmVjdCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1fZ2xYQ3JlYXRlTmV3Q29u
dGV4dChtX2Rpc3BsYXksIGNvbmZpZywgcmVuZGVyVHlwZSwgc2hhcmVMaXN0LCBkaXJlY3QpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgR0xYUGJ1ZmZlciBjcmVhdGVQYnVmZmVyKEdMWEZCQ29uZmln
IGNvbmZpZywgY29uc3QgaW50ICphdHRyaWJMaXN0KQotICAgICAgICB7Ci0gICAgICAgICAgICBy
ZXR1cm4gbV9nbFhDcmVhdGVQYnVmZmVyKG1fZGlzcGxheSwgY29uZmlnLCBhdHRyaWJMaXN0KTsK
LSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgZGVzdHJveVBidWZmZXIoR0xYUGJ1ZmZlciBwYnVm
KQotICAgICAgICB7Ci0gICAgICAgICAgICBtX2dsWERlc3Ryb3lQYnVmZmVyKG1fZGlzcGxheSwg
cGJ1Zik7Ci0gICAgICAgIH0KLQotICAgICAgICBCb29sIG1ha2VDdXJyZW50KEdMWERyYXdhYmxl
IGRyYXdhYmxlLCBHTFhDb250ZXh0IGN0eCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJu
IG1fZ2xYTWFrZUN1cnJlbnQobV9kaXNwbGF5LCBkcmF3YWJsZSwgY3R4KTsKLSAgICAgICAgfQot
Ci0gICAgICAgIHZvaWQgZGVzdHJveUNvbnRleHQoR0xYQ29udGV4dCBjdHgpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIG1fZ2xYRGVzdHJveUNvbnRleHQobV9kaXNwbGF5LCBjdHgpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgR0xYQ29udGV4dCBnZXRDdXJyZW50Q29udGV4dCgpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiBtX2dsWEdldEN1cnJlbnRDb250ZXh0KCk7Ci0gICAgICAgIH0K
LQotICAgICAgcHJpdmF0ZToKLSAgICAgICAgRGlzcGxheSogbV9kaXNwbGF5OwotICAgICAgICB2
b2lkKiBtX2xpYkdMOwotICAgICAgICBQRk5HTFhDSE9PU0VGQkNPTkZJR1BST0MgbV9nbFhDaG9v
c2VGQkNvbmZpZzsKLSAgICAgICAgUEZOR0xYQ1JFQVRFTkVXQ09OVEVYVFBST0MgbV9nbFhDcmVh
dGVOZXdDb250ZXh0OwotICAgICAgICBQRk5HTFhDUkVBVEVQQlVGRkVSUFJPQyBtX2dsWENyZWF0
ZVBidWZmZXI7Ci0gICAgICAgIFBGTkdMWERFU1RST1lQQlVGRkVSUFJPQyBtX2dsWERlc3Ryb3lQ
YnVmZmVyOwotICAgICAgICB0eXBlZGVmIEJvb2wgKCogUEZOR0xYTUFLRUNVUlJFTlRQUk9DKShE
aXNwbGF5KiBkcHksIEdMWERyYXdhYmxlIGRyYXdhYmxlLCBHTFhDb250ZXh0IGN0eCk7Ci0gICAg
ICAgIFBGTkdMWE1BS0VDVVJSRU5UUFJPQyBtX2dsWE1ha2VDdXJyZW50OwotICAgICAgICB0eXBl
ZGVmIHZvaWQgKCogUEZOR0xYREVTVFJPWUNPTlRFWFRQUk9DKShEaXNwbGF5KiBkcHksIEdMWENv
bnRleHQgY3R4KTsKLSAgICAgICAgUEZOR0xYREVTVFJPWUNPTlRFWFRQUk9DIG1fZ2xYRGVzdHJv
eUNvbnRleHQ7Ci0gICAgICAgIHR5cGVkZWYgR0xYQ29udGV4dCAoKiBQRk5HTFhHRVRDVVJSRU5U
Q09OVEVYVFBST0MpKHZvaWQpOwotICAgICAgICBQRk5HTFhHRVRDVVJSRU5UQ09OVEVYVFBST0Mg
bV9nbFhHZXRDdXJyZW50Q29udGV4dDsKLQotICAgICAgICBHTENvbm5lY3Rpb24oRGlzcGxheSog
ZGlzcGxheSwKLSAgICAgICAgICAgICAgICAgICAgIHZvaWQqIGxpYkdMLAotICAgICAgICAgICAg
ICAgICAgICAgUEZOR0xYQ0hPT1NFRkJDT05GSUdQUk9DIGNob29zZUZCQ29uZmlnLAotICAgICAg
ICAgICAgICAgICAgICAgUEZOR0xYQ1JFQVRFTkVXQ09OVEVYVFBST0MgY3JlYXRlTmV3Q29udGV4
dCwKLSAgICAgICAgICAgICAgICAgICAgIFBGTkdMWENSRUFURVBCVUZGRVJQUk9DIGNyZWF0ZVBi
dWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICBQRk5HTFhERVNUUk9ZUEJVRkZFUlBST0MgZGVz
dHJveVBidWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICBQRk5HTFhNQUtFQ1VSUkVOVFBST0Mg
bWFrZUN1cnJlbnQsCi0gICAgICAgICAgICAgICAgICAgICBQRk5HTFhERVNUUk9ZQ09OVEVYVFBS
T0MgZGVzdHJveUNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICBQRk5HTFhHRVRDVVJSRU5U
Q09OVEVYVFBST0MgZ2V0Q3VycmVudENvbnRleHQpCi0gICAgICAgICAgICA6IG1fbGliR0wobGli
R0wpCi0gICAgICAgICAgICAsIG1fZGlzcGxheShkaXNwbGF5KQotICAgICAgICAgICAgLCBtX2ds
WENob29zZUZCQ29uZmlnKGNob29zZUZCQ29uZmlnKQotICAgICAgICAgICAgLCBtX2dsWENyZWF0
ZU5ld0NvbnRleHQoY3JlYXRlTmV3Q29udGV4dCkKLSAgICAgICAgICAgICwgbV9nbFhDcmVhdGVQ
YnVmZmVyKGNyZWF0ZVBidWZmZXIpCi0gICAgICAgICAgICAsIG1fZ2xYRGVzdHJveVBidWZmZXIo
ZGVzdHJveVBidWZmZXIpCi0gICAgICAgICAgICAsIG1fZ2xYTWFrZUN1cnJlbnQobWFrZUN1cnJl
bnQpCi0gICAgICAgICAgICAsIG1fZ2xYRGVzdHJveUNvbnRleHQoZGVzdHJveUNvbnRleHQpCi0g
ICAgICAgICAgICAsIG1fZ2xYR2V0Q3VycmVudENvbnRleHQoZ2V0Q3VycmVudENvbnRleHQpCi0g
ICAgICAgIHsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICBzdGF0aWMgR0xDb25uZWN0aW9uKiBz
X2dsOwotI2Vsc2UKLSAgICAjZXJyb3IgTXVzdCBwb3J0IEdyYXBoaWNzQ29udGV4dDNEIHRvIHlv
dXIgcGxhdGZvcm0KICNlbmRpZgogfTsKIAotYm9vbCBHcmFwaGljc0NvbnRleHQzREludGVybmFs
OjpzX2luaXRpYWxpemVkR0xFVyA9IGZhbHNlOwotCi0jaWYgT1MoTElOVVgpCi1HcmFwaGljc0Nv
bnRleHQzREludGVybmFsOjpHTENvbm5lY3Rpb24qIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6
OnNfZ2wgPSAwOwotCi1HcmFwaGljc0NvbnRleHQzREludGVybmFsOjpHTENvbm5lY3Rpb24qIEdy
YXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OkdMQ29ubmVjdGlvbjo6Y3JlYXRlKCkKLXsKLSAgICBE
aXNwbGF5KiBkcHkgPSBYT3BlbkRpc3BsYXkoMCk7Ci0gICAgaWYgKCFkcHkpIHsKLSAgICAgICAg
cHJpbnRmKCJHcmFwaGljc0NvbnRleHQzRDogZXJyb3Igb3BlbmluZyBYIGRpc3BsYXlcbiIpOwot
ICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICAvLyBXZSB1c2UgUlRMRF9HTE9CQUwgc2Vt
YW50aWNzIHNvIHRoYXQgR0xFVyBpbml0aWFsaXphdGlvbiB3b3JrczsKLSAgICAvLyBHTEVXIGV4
cGVjdHMgdG8gYmUgYWJsZSB0byBvcGVuIHRoZSBjdXJyZW50IHByb2Nlc3MncyBoYW5kbGUKLSAg
ICAvLyBhbmQgZG8gZGxzeW0ncyBvZiBHTCBlbnRyeSBwb2ludHMgZnJvbSB0aGVyZS4KLSAgICB2
b2lkKiBsaWJHTCA9IGRsb3BlbigibGliR0wuc28uMSIsIFJUTERfTEFaWSB8IFJUTERfR0xPQkFM
KTsKLSAgICBpZiAoIWxpYkdMKSB7Ci0gICAgICAgIFhDbG9zZURpc3BsYXkoZHB5KTsKLSAgICAg
ICAgcHJpbnRmKCJHcmFwaGljc0NvbnRleHQzRDogZXJyb3Igb3BlbmluZyBsaWJHTC5zby4xOiAl
c1xuIiwgZGxlcnJvcigpKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgUEZOR0xY
Q0hPT1NFRkJDT05GSUdQUk9DIGNob29zZUZCQ29uZmlnID0gKFBGTkdMWENIT09TRUZCQ09ORklH
UFJPQykgZGxzeW0obGliR0wsICJnbFhDaG9vc2VGQkNvbmZpZyIpOwotICAgIFBGTkdMWENSRUFU
RU5FV0NPTlRFWFRQUk9DIGNyZWF0ZU5ld0NvbnRleHQgPSAoUEZOR0xYQ1JFQVRFTkVXQ09OVEVY
VFBST0MpIGRsc3ltKGxpYkdMLCAiZ2xYQ3JlYXRlTmV3Q29udGV4dCIpOwotICAgIFBGTkdMWENS
RUFURVBCVUZGRVJQUk9DIGNyZWF0ZVBidWZmZXIgPSAoUEZOR0xYQ1JFQVRFUEJVRkZFUlBST0Mp
IGRsc3ltKGxpYkdMLCAiZ2xYQ3JlYXRlUGJ1ZmZlciIpOwotICAgIFBGTkdMWERFU1RST1lQQlVG
RkVSUFJPQyBkZXN0cm95UGJ1ZmZlciA9IChQRk5HTFhERVNUUk9ZUEJVRkZFUlBST0MpIGRsc3lt
KGxpYkdMLCAiZ2xYRGVzdHJveVBidWZmZXIiKTsKLSAgICBQRk5HTFhNQUtFQ1VSUkVOVFBST0Mg
bWFrZUN1cnJlbnQgPSAoUEZOR0xYTUFLRUNVUlJFTlRQUk9DKSBkbHN5bShsaWJHTCwgImdsWE1h
a2VDdXJyZW50Iik7Ci0gICAgUEZOR0xYREVTVFJPWUNPTlRFWFRQUk9DIGRlc3Ryb3lDb250ZXh0
ID0gKFBGTkdMWERFU1RST1lDT05URVhUUFJPQykgZGxzeW0obGliR0wsICJnbFhEZXN0cm95Q29u
dGV4dCIpOwotICAgIFBGTkdMWEdFVENVUlJFTlRDT05URVhUUFJPQyBnZXRDdXJyZW50Q29udGV4
dCA9IChQRk5HTFhHRVRDVVJSRU5UQ09OVEVYVFBST0MpIGRsc3ltKGxpYkdMLCAiZ2xYR2V0Q3Vy
cmVudENvbnRleHQiKTsKLSAgICBpZiAoIWNob29zZUZCQ29uZmlnIHx8ICFjcmVhdGVOZXdDb250
ZXh0IHx8ICFjcmVhdGVQYnVmZmVyCi0gICAgICAgIHx8ICFkZXN0cm95UGJ1ZmZlciB8fCAhbWFr
ZUN1cnJlbnQgfHwgIWRlc3Ryb3lDb250ZXh0Ci0gICAgICAgIHx8ICFnZXRDdXJyZW50Q29udGV4
dCkgewotICAgICAgICBYQ2xvc2VEaXNwbGF5KGRweSk7Ci0gICAgICAgIGRsY2xvc2UobGliR0wp
OwotICAgICAgICBwcmludGYoIkdyYXBoaWNzQ29udGV4dDNEOiBlcnJvciBsb29raW5nIHVwIGJv
b3RzdHJhcHBpbmcgZW50cnkgcG9pbnRzXG4iKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQot
ICAgIHJldHVybiBuZXcgR0xDb25uZWN0aW9uKGRweSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBsaWJHTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaG9vc2VGQkNvbmZpZywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVOZXdDb250ZXh0LAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNyZWF0ZVBidWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZGVzdHJveVBidWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFrZUN1
cnJlbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdHJveUNvbnRleHQsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZ2V0Q3VycmVudENvbnRleHQpOwotfQotCi1HcmFwaGlj
c0NvbnRleHQzREludGVybmFsOjpHTENvbm5lY3Rpb246On5HTENvbm5lY3Rpb24oKQotewotICAg
IFhDbG9zZURpc3BsYXkobV9kaXNwbGF5KTsKLSAgICBkbGNsb3NlKG1fbGliR0wpOwotfQotCi0j
ZW5kaWYgLy8gT1MoTElOVVgpCi0KLUdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OlZlcnRleEF0
dHJpYlBvaW50ZXJTdGF0ZTo6VmVydGV4QXR0cmliUG9pbnRlclN0YXRlKCkKLSAgICA6IGVuYWJs
ZWQoZmFsc2UpCi0gICAgLCBidWZmZXIoMCkKLSAgICAsIGluZHgoMCkKLSAgICAsIHNpemUoMCkK
LSAgICAsIHR5cGUoMCkKLSAgICAsIG5vcm1hbGl6ZWQoZmFsc2UpCi0gICAgLCBzdHJpZGUoMCkK
LSAgICAsIG9mZnNldCgwKQotewotfQotCi1HcmFwaGljc0NvbnRleHQzREludGVybmFsOjpHcmFw
aGljc0NvbnRleHQzREludGVybmFsKEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJz
KQotICAgIDogbV9hdHRycyhhdHRycykKLSAgICAsIG1fdGV4dHVyZSgwKQotICAgICwgbV9mYm8o
MCkKLSAgICAsIG1fZGVwdGhCdWZmZXIoMCkKLSAgICAsIG1fYm91bmRGQk8oMCkKLSNpZmRlZiBG
TElQX0ZSQU1FQlVGRkVSX1ZFUlRJQ0FMTFkKLSAgICAsIG1fc2NhbmxpbmUoMCkKLSNlbmRpZgot
ICAgICwgbV9ib3VuZEFycmF5QnVmZmVyKDApCitHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpH
cmFwaGljc0NvbnRleHQzREludGVybmFsKCkKICNpZiBQTEFURk9STShTS0lBKQotICAgICwgbV9y
ZXNpemluZ0JpdG1hcCgwKQotI2VuZGlmCi0jaWYgT1MoV0lORE9XUykKLSAgICAsIG1fY2FudmFz
V2luZG93KDApCi0gICAgLCBtX2NhbnZhc0RDKDApCi0gICAgLCBtX2NvbnRleHRPYmooMCkKKyAg
ICA6IG1fcmVzaXppbmdCaXRtYXAoMCkKICNlbGlmIFBMQVRGT1JNKENHKQotICAgICwgbV9wYnVm
ZmVyKDApCi0gICAgLCBtX2NvbnRleHRPYmooMCkKLSAgICAsIG1fcmVuZGVyT3V0cHV0KDApCi0j
ZWxpZiBPUyhMSU5VWCkKLSAgICAsIG1fY29udGV4dE9iaigwKQotICAgICwgbV9wYnVmZmVyKDAp
CisgICAgOiBtX3JlbmRlck91dHB1dCgwKQogI2Vsc2UKICNlcnJvciBNdXN0IHBvcnQgdG8geW91
ciBwbGF0Zm9ybQogI2VuZGlmCiB7Ci0gICAgLy8gRklYTUU6IHdlIG5lZWQgdG8gdGFrZSBpbnRv
IGFjY291bnQgdGhlIHVzZXIncyByZXF1ZXN0ZWQKLSAgICAvLyBjb250ZXh0IGNyZWF0aW9uIGF0
dHJpYnV0ZXMsIGluIHBhcnRpY3VsYXIgc3RlbmNpbCBhbmQKLSAgICAvLyBhbnRpYWxpYXMsIGFu
ZCBkZXRlcm1pbmUgd2hpY2ggY291bGQgYW5kIGNvdWxkIG5vdCBiZSBob25vcmVkCi0gICAgLy8g
YmFzZWQgb24gdGhlIGNhcGFiaWxpdGllcyBvZiB0aGUgT3BlbkdMIGltcGxlbWVudGF0aW9uLgot
ICAgIG1fYXR0cnMuYWxwaGEgPSB0cnVlOwotICAgIG1fYXR0cnMuZGVwdGggPSB0cnVlOwotICAg
IG1fYXR0cnMuc3RlbmNpbCA9IGZhbHNlOwotICAgIG1fYXR0cnMuYW50aWFsaWFzID0gZmFsc2U7
Ci0gICAgbV9hdHRycy5wcmVtdWx0aXBsaWVkQWxwaGEgPSB0cnVlOwotCi0jaWYgT1MoV0lORE9X
UykKLSAgICBXTkRDTEFTUyB3YzsKLSAgICBpZiAoIUdldENsYXNzSW5mbyhHZXRNb2R1bGVIYW5k
bGUoMCksIEwiQ0FOVkFTR0wiLCAmd2MpKSB7Ci0gICAgICAgIFplcm9NZW1vcnkoJndjLCBzaXpl
b2YoV05EQ0xBU1MpKTsKLSAgICAgICAgd2Muc3R5bGUgPSBDU19PV05EQzsKLSAgICAgICAgd2Mu
aEluc3RhbmNlID0gR2V0TW9kdWxlSGFuZGxlKDApOwotICAgICAgICB3Yy5scGZuV25kUHJvYyA9
IERlZldpbmRvd1Byb2M7Ci0gICAgICAgIHdjLmxwc3pDbGFzc05hbWUgPSBMIkNBTlZBU0dMIjsK
LQotICAgICAgICBpZiAoIVJlZ2lzdGVyQ2xhc3MoJndjKSkgewotICAgICAgICAgICAgcHJpbnRm
KCJHcmFwaGljc0NvbnRleHQzRDogUmVnaXN0ZXJDbGFzcyBmYWlsZWRcbiIpOwotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgbV9jYW52YXNXaW5kb3cgPSBDcmVh
dGVXaW5kb3coTCJDQU5WQVNHTCIsIEwiQ0FOVkFTR0wiLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFdTX0NBUFRJT04sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQ1dfVVNFREVGQVVMVCwgQ1dfVVNFREVGQVVMVCwgQ1dfVVNFREVGQVVMVCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBDV19VU0VERUZBVUxULCAwLCAwLCBHZXRNb2R1bGVI
YW5kbGUoMCksIDApOwotICAgIGlmICghbV9jYW52YXNXaW5kb3cpIHsKLSAgICAgICAgcHJpbnRm
KCJHcmFwaGljc0NvbnRleHQzREludGVybmFsOiBDcmVhdGVXaW5kb3cgZmFpbGVkXG4iKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIGdldCB0aGUgZGV2aWNlIGNvbnRleHQKLSAg
ICBtX2NhbnZhc0RDID0gR2V0REMobV9jYW52YXNXaW5kb3cpOwotICAgIGlmICghbV9jYW52YXNE
QykgewotICAgICAgICBwcmludGYoIkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6IEdldERDIGZh
aWxlZFxuIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBmaW5kIGRlZmF1bHQg
cGl4ZWwgZm9ybWF0Ci0gICAgUElYRUxGT1JNQVRERVNDUklQVE9SIHBmZDsKLSAgICBaZXJvTWVt
b3J5KCZwZmQsIHNpemVvZihQSVhFTEZPUk1BVERFU0NSSVBUT1IpKTsKLSAgICBwZmQublNpemUg
PSBzaXplb2YoUElYRUxGT1JNQVRERVNDUklQVE9SKTsKLSAgICBwZmQublZlcnNpb24gPSAxOwot
ICAgIHBmZC5kd0ZsYWdzID0gUEZEX0RSQVdfVE9fV0lORE9XIHwgUEZEX1NVUFBPUlRfT1BFTkdM
Ci0jaWZkZWYgUkVOREVSX1RPX0RFQlVHR0lOR19XSU5ET1cKLSAgICAgICAgfCBQRkRfRE9VQkxF
QlVGRkVSCi0jZW5kaWYgLy8gUkVOREVSX1RPX0RFQlVHR0lOR19XSU5ET1cKLSAgICAgICAgOwot
ICAgIGludCBwaXhlbGZvcm1hdCA9IENob29zZVBpeGVsRm9ybWF0KG1fY2FudmFzREMsICZwZmQp
OwotCi0gICAgLy8gc2V0IHRoZSBwaXhlbCBmb3JtYXQgZm9yIHRoZSBkYwotICAgIGlmICghU2V0
UGl4ZWxGb3JtYXQobV9jYW52YXNEQywgcGl4ZWxmb3JtYXQsICZwZmQpKSB7Ci0gICAgICAgIHBy
aW50ZigiR3JhcGhpY3NDb250ZXh0M0Q6IFNldFBpeGVsRm9ybWF0IGZhaWxlZFxuIik7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBjcmVhdGUgcmVuZGVyaW5nIGNvbnRleHQKLSAg
ICBtX2NvbnRleHRPYmogPSB3Z2xDcmVhdGVDb250ZXh0KG1fY2FudmFzREMpOwotICAgIGlmICgh
bV9jb250ZXh0T2JqKSB7Ci0gICAgICAgIHByaW50ZigiR3JhcGhpY3NDb250ZXh0M0Q6IHdnbENy
ZWF0ZUNvbnRleHQgZmFpbGVkXG4iKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlm
ICghd2dsTWFrZUN1cnJlbnQobV9jYW52YXNEQywgbV9jb250ZXh0T2JqKSkgewotICAgICAgICBw
cmludGYoIkdyYXBoaWNzQ29udGV4dDNEOiB3Z2xNYWtlQ3VycmVudCBmYWlsZWRcbiIpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0jaWZkZWYgUkVOREVSX1RPX0RFQlVHR0lOR19XSU5ET1cK
LSAgICB0eXBlZGVmIEJPT0wgKFdJTkFQSSAqIFBGTldHTFNXQVBJTlRFUlZBTEVYVFBST0MpIChp
bnQgaW50ZXJ2YWwpOwotICAgIFBGTldHTFNXQVBJTlRFUlZBTEVYVFBST0Mgc2V0U3dhcEludGVy
dmFsID0gMDsKLSAgICBzZXRTd2FwSW50ZXJ2YWwgPSAoUEZOV0dMU1dBUElOVEVSVkFMRVhUUFJP
Qykgd2dsR2V0UHJvY0FkZHJlc3MoIndnbFN3YXBJbnRlcnZhbEVYVCIpOwotICAgIGlmIChzZXRT
d2FwSW50ZXJ2YWwpCi0gICAgICAgIHNldFN3YXBJbnRlcnZhbCgxKTsKLSNlbmRpZiAvLyBSRU5E
RVJfVE9fREVCVUdHSU5HX1dJTkRPVwotCi0jZWxpZiBQTEFURk9STShDRykKLSAgICAvLyBDcmVh
dGUgYSAxeDEgcGJ1ZmZlciBhbmQgYXNzb2NpYXRlZCBjb250ZXh0IHRvIGJvb3RzdHJhcCB0aGlu
Z3MKLSAgICBDR0xQaXhlbEZvcm1hdEF0dHJpYnV0ZSBhdHRyaWJzW10gPSB7Ci0gICAgICAgIChD
R0xQaXhlbEZvcm1hdEF0dHJpYnV0ZSkga0NHTFBGQVBCdWZmZXIsCi0gICAgICAgIChDR0xQaXhl
bEZvcm1hdEF0dHJpYnV0ZSkgMAotICAgIH07Ci0gICAgQ0dMUGl4ZWxGb3JtYXRPYmogcGl4ZWxG
b3JtYXQ7Ci0gICAgR0xpbnQgbnVtUGl4ZWxGb3JtYXRzOwotICAgIGlmIChDR0xDaG9vc2VQaXhl
bEZvcm1hdChhdHRyaWJzLCAmcGl4ZWxGb3JtYXQsICZudW1QaXhlbEZvcm1hdHMpICE9IGtDR0xO
b0Vycm9yKSB7Ci0gICAgICAgIHByaW50ZigiR3JhcGhpY3NDb250ZXh0M0Q6IGVycm9yIGNob29z
aW5nIHBpeGVsIGZvcm1hdFxuIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKCFw
aXhlbEZvcm1hdCkgewotICAgICAgICBwcmludGYoIkdyYXBoaWNzQ29udGV4dDNEOiBubyBwaXhl
bCBmb3JtYXQgc2VsZWN0ZWRcbiIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIENHTENv
bnRleHRPYmogY29udGV4dDsKLSAgICBDR0xFcnJvciByZXMgPSBDR0xDcmVhdGVDb250ZXh0KHBp
eGVsRm9ybWF0LCAwLCAmY29udGV4dCk7Ci0gICAgQ0dMRGVzdHJveVBpeGVsRm9ybWF0KHBpeGVs
Rm9ybWF0KTsKLSAgICBpZiAocmVzICE9IGtDR0xOb0Vycm9yKSB7Ci0gICAgICAgIHByaW50Zigi
R3JhcGhpY3NDb250ZXh0M0Q6IGVycm9yIGNyZWF0aW5nIGNvbnRleHRcbiIpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotICAgIENHTFBCdWZmZXJPYmogcGJ1ZmZlcjsKLSAgICBpZiAoQ0dMQ3Jl
YXRlUEJ1ZmZlcigxLCAxLCBHTF9URVhUVVJFXzJELCBHTF9SR0JBLCAwLCAmcGJ1ZmZlcikgIT0g
a0NHTE5vRXJyb3IpIHsKLSAgICAgICAgQ0dMRGVzdHJveUNvbnRleHQoY29udGV4dCk7Ci0gICAg
ICAgIHByaW50ZigiR3JhcGhpY3NDb250ZXh0M0Q6IGVycm9yIGNyZWF0aW5nIHBidWZmZXJcbiIp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChDR0xTZXRQQnVmZmVyKGNvbnRleHQs
IHBidWZmZXIsIDAsIDAsIDApICE9IGtDR0xOb0Vycm9yKSB7Ci0gICAgICAgIENHTERlc3Ryb3lD
b250ZXh0KGNvbnRleHQpOwotICAgICAgICBDR0xEZXN0cm95UEJ1ZmZlcihwYnVmZmVyKTsKLSAg
ICAgICAgcHJpbnRmKCJHcmFwaGljc0NvbnRleHQzRDogZXJyb3IgYXR0YWNoaW5nIHBidWZmZXIg
dG8gY29udGV4dFxuIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKENHTFNldEN1
cnJlbnRDb250ZXh0KGNvbnRleHQpICE9IGtDR0xOb0Vycm9yKSB7Ci0gICAgICAgIENHTERlc3Ry
b3lDb250ZXh0KGNvbnRleHQpOwotICAgICAgICBDR0xEZXN0cm95UEJ1ZmZlcihwYnVmZmVyKTsK
LSAgICAgICAgcHJpbnRmKCJHcmFwaGljc0NvbnRleHQzRDogZXJyb3IgbWFraW5nIGNvbnRleHQg
Y3VycmVudFxuIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgbV9wYnVmZmVyID0gcGJ1
ZmZlcjsKLSAgICBtX2NvbnRleHRPYmogPSBjb250ZXh0OwotI2VsaWYgT1MoTElOVVgpCi0gICAg
aWYgKCFzX2dsKSB7Ci0gICAgICAgIHNfZ2wgPSBHTENvbm5lY3Rpb246OmNyZWF0ZSgpOwotICAg
ICAgICBpZiAoIXNfZ2wpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaW50IGNv
bmZpZ0F0dHJzW10gPSB7Ci0gICAgICAgIEdMWF9EUkFXQUJMRV9UWVBFLAotICAgICAgICBHTFhf
UEJVRkZFUl9CSVQsCi0gICAgICAgIEdMWF9SRU5ERVJfVFlQRSwKLSAgICAgICAgR0xYX1JHQkFf
QklULAotICAgICAgICBHTFhfRE9VQkxFQlVGRkVSLAotICAgICAgICAwLAotICAgICAgICAwCi0g
ICAgfTsKLSAgICBpbnQgbmVsZW1lbnRzID0gMDsKLSAgICBHTFhGQkNvbmZpZyogY29uZmlnID0g
c19nbC0+Y2hvb3NlRkJDb25maWcoMCwgY29uZmlnQXR0cnMsICZuZWxlbWVudHMpOwotICAgIGlm
ICghY29uZmlnKSB7Ci0gICAgICAgIHByaW50ZigiR3JhcGhpY3NDb250ZXh0M0Q6IGdsWENob29z
ZUZCQ29uZmlnIGZhaWxlZFxuIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKCFu
ZWxlbWVudHMpIHsKLSAgICAgICAgcHJpbnRmKCJHcmFwaGljc0NvbnRleHQzRDogZ2xYQ2hvb3Nl
RkJDb25maWcgcmV0dXJuZWQgMCBlbGVtZW50c1xuIik7Ci0gICAgICAgIFhGcmVlKGNvbmZpZyk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgR0xYQ29udGV4dCBjb250ZXh0ID0gc19nbC0+
Y3JlYXRlTmV3Q29udGV4dChjb25maWdbMF0sIEdMWF9SR0JBX1RZUEUsIDAsIFRydWUpOwotICAg
IGlmICghY29udGV4dCkgewotICAgICAgICBwcmludGYoIkdyYXBoaWNzQ29udGV4dDNEOiBnbFhD
cmVhdGVOZXdDb250ZXh0IGZhaWxlZFxuIik7Ci0gICAgICAgIFhGcmVlKGNvbmZpZyk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0gICAgaW50IHBidWZmZXJBdHRyc1tdID0gewotICAgICAgICBH
TFhfUEJVRkZFUl9XSURUSCwKLSAgICAgICAgMSwKLSAgICAgICAgR0xYX1BCVUZGRVJfSEVJR0hU
LAotICAgICAgICAxLAotICAgICAgICAwCi0gICAgfTsKLSAgICBHTFhQYnVmZmVyIHBidWZmZXIg
PSBzX2dsLT5jcmVhdGVQYnVmZmVyKGNvbmZpZ1swXSwgcGJ1ZmZlckF0dHJzKTsKLSAgICBYRnJl
ZShjb25maWcpOwotICAgIGlmICghcGJ1ZmZlcikgewotICAgICAgICBwcmludGYoIkdyYXBoaWNz
Q29udGV4dDNEOiBnbHhDcmVhdGVQYnVmZmVyIGZhaWxlZFxuIik7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0gICAgaWYgKCFzX2dsLT5tYWtlQ3VycmVudChwYnVmZmVyLCBjb250ZXh0KSkgewot
ICAgICAgICBwcmludGYoIkdyYXBoaWNzQ29udGV4dDNEOiBnbFhNYWtlQ3VycmVudCBmYWlsZWRc
biIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIG1fY29udGV4dE9iaiA9IGNvbnRleHQ7
Ci0gICAgbV9wYnVmZmVyID0gcGJ1ZmZlcjsKLSNlbHNlCi0jZXJyb3IgTXVzdCBwb3J0IHRvIHlv
dXIgcGxhdGZvcm0KLSNlbmRpZgotCi0gICAgaWYgKCFzX2luaXRpYWxpemVkR0xFVykgewotICAg
ICAgICAvLyBJbml0aWFsaXplIEdMRVcgYW5kIGNoZWNrIGZvciBHTCAyLjAgc3VwcG9ydCBieSB0
aGUgZHJpdmVycy4KLSAgICAgICAgR0xlbnVtIGdsZXdJbml0UmVzdWx0ID0gZ2xld0luaXQoKTsK
LSAgICAgICAgaWYgKGdsZXdJbml0UmVzdWx0ICE9IEdMRVdfT0spIHsKLSAgICAgICAgICAgIHBy
aW50ZigiR3JhcGhpY3NDb250ZXh0M0Q6IEdMRVcgaW5pdGlhbGl6YXRpb24gZmFpbGVkXG4iKTsK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBpZiAoIWdsZXdJc1N1cHBv
cnRlZCgiR0xfVkVSU0lPTl8yXzAiKSkgewotICAgICAgICAgICAgcHJpbnRmKCJHcmFwaGljc0Nv
bnRleHQzRDogT3BlbkdMIDIuMCBub3Qgc3VwcG9ydGVkXG4iKTsKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfQotICAgICAgICBzX2luaXRpYWxpemVkR0xFVyA9IHRydWU7Ci0gICAgfQog
fQogCiBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjp+R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5h
bCgpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0jaWZuZGVmIFJFTkRFUl9UT19ERUJV
R0dJTkdfV0lORE9XCi0gICAgZ2xEZWxldGVSZW5kZXJidWZmZXJzRVhUKDEsICZtX2RlcHRoQnVm
ZmVyKTsKLSAgICBnbERlbGV0ZVRleHR1cmVzKDEsICZtX3RleHR1cmUpOwotI2lmZGVmIEZMSVBf
RlJBTUVCVUZGRVJfVkVSVElDQUxMWQotICAgIGlmIChtX3NjYW5saW5lKQotICAgICAgICBkZWxl
dGVbXSBtX3NjYW5saW5lOwotI2VuZGlmCi0gICAgZ2xEZWxldGVGcmFtZWJ1ZmZlcnNFWFQoMSwg
Jm1fZmJvKTsKLSNlbmRpZiAvLyAhUkVOREVSX1RPX0RFQlVHR0lOR19XSU5ET1cKICNpZiBQTEFU
Rk9STShTS0lBKQogICAgIGlmIChtX3Jlc2l6aW5nQml0bWFwKQogICAgICAgICBkZWxldGUgbV9y
ZXNpemluZ0JpdG1hcDsKLSNlbmRpZgotI2lmIE9TKFdJTkRPV1MpCi0gICAgd2dsTWFrZUN1cnJl
bnQoMCwgMCk7Ci0gICAgd2dsRGVsZXRlQ29udGV4dChtX2NvbnRleHRPYmopOwotICAgIFJlbGVh
c2VEQyhtX2NhbnZhc1dpbmRvdywgbV9jYW52YXNEQyk7Ci0gICAgRGVzdHJveVdpbmRvdyhtX2Nh
bnZhc1dpbmRvdyk7CiAjZWxpZiBQTEFURk9STShDRykKLSAgICBDR0xTZXRDdXJyZW50Q29udGV4
dCgwKTsKLSAgICBDR0xEZXN0cm95Q29udGV4dChtX2NvbnRleHRPYmopOwotICAgIENHTERlc3Ry
b3lQQnVmZmVyKG1fcGJ1ZmZlcik7CiAgICAgaWYgKG1fcmVuZGVyT3V0cHV0KQogICAgICAgICBk
ZWxldGVbXSBtX3JlbmRlck91dHB1dDsKLSNlbGlmIE9TKExJTlVYKQotICAgIHNfZ2wtPm1ha2VD
dXJyZW50KDAsIDApOwotICAgIHNfZ2wtPmRlc3Ryb3lDb250ZXh0KG1fY29udGV4dE9iaik7Ci0g
ICAgc19nbC0+ZGVzdHJveVBidWZmZXIobV9wYnVmZmVyKTsKLSNlbHNlCi0jZXJyb3IgTXVzdCBw
b3J0IHRvIHlvdXIgcGxhdGZvcm0KICNlbmRpZgotICAgIG1fY29udGV4dE9iaiA9IDA7CiB9CiAK
LWJvb2wgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6bWFrZUNvbnRleHRDdXJyZW50KCkKK2Jv
b2wgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6aW5pdGlhbGl6ZShHcmFwaGljc0NvbnRleHQz
RDo6QXR0cmlidXRlcyBhdHRycykKIHsKLSNpZiBPUyhXSU5ET1dTKQotICAgIGlmICh3Z2xHZXRD
dXJyZW50Q29udGV4dCgpICE9IG1fY29udGV4dE9iaikKLSAgICAgICAgaWYgKHdnbE1ha2VDdXJy
ZW50KG1fY2FudmFzREMsIG1fY29udGV4dE9iaikpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
LSNlbGlmIFBMQVRGT1JNKENHKQotICAgIGlmIChDR0xHZXRDdXJyZW50Q29udGV4dCgpICE9IG1f
Y29udGV4dE9iaikKLSAgICAgICAgaWYgKENHTFNldEN1cnJlbnRDb250ZXh0KG1fY29udGV4dE9i
aikgPT0ga0NHTE5vRXJyb3IpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSNlbGlmIE9TKExJ
TlVYKQotICAgIGlmIChzX2dsLT5nZXRDdXJyZW50Q29udGV4dCgpICE9IG1fY29udGV4dE9iaikK
LSAgICAgICAgaWYgKHNfZ2wtPm1ha2VDdXJyZW50KG1fcGJ1ZmZlciwgbV9jb250ZXh0T2JqKSkK
LSAgICAgICAgICAgIHJldHVybiB0cnVlOwotI2Vsc2UKLSNlcnJvciBNdXN0IHBvcnQgdG8geW91
ciBwbGF0Zm9ybQotI2VuZGlmCi0gICAgcmV0dXJuIGZhbHNlOworICAgIFdlYktpdDo6V2ViR3Jh
cGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgd2ViQXR0cmlidXRlczsKKyAgICB3ZWJBdHRyaWJ1
dGVzLmFscGhhID0gYXR0cnMuYWxwaGE7CisgICAgd2ViQXR0cmlidXRlcy5kZXB0aCA9IGF0dHJz
LmRlcHRoOworICAgIHdlYkF0dHJpYnV0ZXMuc3RlbmNpbCA9IGF0dHJzLnN0ZW5jaWw7CisgICAg
d2ViQXR0cmlidXRlcy5hbnRpYWxpYXMgPSBhdHRycy5hbnRpYWxpYXM7CisgICAgd2ViQXR0cmli
dXRlcy5wcmVtdWx0aXBsaWVkQWxwaGEgPSBhdHRycy5wcmVtdWx0aXBsaWVkQWxwaGE7CisgICAg
Ly8gRklYTUU6IG9uY2UgdGhlIENocm9taXVtIHBvcnRpb24gb2YgdGhlIFdlYktpdENsaWVudCBj
aGFuZ2VzIGhhcyBsYW5kZWQsCisgICAgLy8gY2hhbmdlIHRoaXMgdG8gY2FsbCBXZWJLaXQ6Ondl
YktpdENsaWVudCgpLT5jcmVhdGVHcmFwaGljc0NvbnRleHQzRCgpLgorICAgIFdlYktpdDo6V2Vi
R3JhcGhpY3NDb250ZXh0M0QqIHdlYkNvbnRleHQgPSBXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4
dDNEOjpjcmVhdGVEZWZhdWx0KCk7CisgICAgaWYgKCF3ZWJDb250ZXh0KQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgaWYgKCF3ZWJDb250ZXh0LT5pbml0aWFsaXplKHdlYkF0dHJpYnV0ZXMp
KSB7CisgICAgICAgIGRlbGV0ZSB3ZWJDb250ZXh0OworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorICAgIG1faW1wbC5zZXQod2ViQ29udGV4dCk7CisgICAgcmV0dXJuIHRydWU7CiB9CiAK
IFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6cGxh
dGZvcm1HcmFwaGljc0NvbnRleHQzRCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fY29udGV4dE9i
ajsKKyAgICByZXR1cm4gMDsKIH0KIAogUGxhdGZvcm0zRE9iamVjdCBHcmFwaGljc0NvbnRleHQz
REludGVybmFsOjpwbGF0Zm9ybVRleHR1cmUoKSBjb25zdAogewotICAgIHJldHVybiBtX3RleHR1
cmU7Ci19Ci0KLXN0YXRpYyBpbnQgY3JlYXRlVGV4dHVyZU9iamVjdChHTGVudW0gdGFyZ2V0KQot
ewotICAgIEdMdWludCB0ZXh0dXJlID0gMDsKLSAgICBnbEdlblRleHR1cmVzKDEsICZ0ZXh0dXJl
KTsKLSAgICBnbEJpbmRUZXh0dXJlKHRhcmdldCwgdGV4dHVyZSk7Ci0gICAgZ2xUZXhQYXJhbWV0
ZXJmKHRhcmdldCwgR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBHTF9ORUFSRVNUKTsKLSAgICBnbFRl
eFBhcmFtZXRlcmYodGFyZ2V0LCBHTF9URVhUVVJFX01BR19GSUxURVIsIEdMX05FQVJFU1QpOwot
ICAgIHJldHVybiB0ZXh0dXJlOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6
OnJlc2hhcGUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQotewotI2lmZGVmIFJFTkRFUl9UT19ERUJV
R0dJTkdfV0lORE9XCi0gICAgU2V0V2luZG93UG9zKG1fY2FudmFzV2luZG93LCBIV05EX1RPUCwg
MCwgMCwgd2lkdGgsIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgU1dQX05PTU9WRSk7Ci0gICAg
U2hvd1dpbmRvdyhtX2NhbnZhc1dpbmRvdywgU1dfU0hPVyk7Ci0jZW5kaWYKLQotICAgIG1fY2Fj
aGVkV2lkdGggPSB3aWR0aDsKLSAgICBtX2NhY2hlZEhlaWdodCA9IGhlaWdodDsKLSAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKLQotI2lmbmRlZiBSRU5ERVJfVE9fREVCVUdHSU5HX1dJTkRPVwot
I2lmZGVmIFVTRV9URVhUVVJFX1JFQ1RBTkdMRV9GT1JfRlJBTUVCVUZGRVIKLSAgICAvLyBHTF9U
RVhUVVJFX1JFQ1RBTkdMRV9BUkIgaXMgdGhlIGJlc3Qgc3VwcG9ydGVkIHJlbmRlciB0YXJnZXQg
b24gTWFjIE9TIFgKLSAgICBHTGVudW0gdGFyZ2V0ID0gR0xfVEVYVFVSRV9SRUNUQU5HTEVfQVJC
OwotI2Vsc2UKLSAgICBHTGVudW0gdGFyZ2V0ID0gR0xfVEVYVFVSRV8yRDsKLSNlbmRpZgotICAg
IGlmICghbV90ZXh0dXJlKSB7Ci0gICAgICAgIC8vIEdlbmVyYXRlIHRoZSB0ZXh0dXJlIG9iamVj
dAotICAgICAgICBtX3RleHR1cmUgPSBjcmVhdGVUZXh0dXJlT2JqZWN0KHRhcmdldCk7Ci0gICAg
ICAgIC8vIEdlbmVyYXRlIHRoZSBmcmFtZWJ1ZmZlciBvYmplY3QKLSAgICAgICAgZ2xHZW5GcmFt
ZWJ1ZmZlcnNFWFQoMSwgJm1fZmJvKTsKLSAgICAgICAgLy8gR2VuZXJhdGUgdGhlIGRlcHRoIGJ1
ZmZlcgotICAgICAgICBnbEdlblJlbmRlcmJ1ZmZlcnNFWFQoMSwgJm1fZGVwdGhCdWZmZXIpOwot
ICAgIH0KLQotICAgIC8vIFJlYWxsb2NhdGUgdGhlIGNvbG9yIGFuZCBkZXB0aCBidWZmZXJzCi0g
ICAgZ2xCaW5kVGV4dHVyZSh0YXJnZXQsIG1fdGV4dHVyZSk7Ci0gICAgZ2xUZXhJbWFnZTJEKHRh
cmdldCwgMCwgR0xfUkdCQTgsIHdpZHRoLCBoZWlnaHQsIDAsIEdMX1JHQkEsIEdMX1VOU0lHTkVE
X0JZVEUsIDApOwotICAgIGdsQmluZFRleHR1cmUodGFyZ2V0LCAwKTsKLQotICAgIGdsQmluZEZy
YW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9mYm8pOwotICAgIG1fYm91bmRGQk8g
PSBtX2ZibzsKLSAgICBnbEJpbmRSZW5kZXJidWZmZXJFWFQoR0xfUkVOREVSQlVGRkVSX0VYVCwg
bV9kZXB0aEJ1ZmZlcik7Ci0gICAgZ2xSZW5kZXJidWZmZXJTdG9yYWdlRVhUKEdMX1JFTkRFUkJV
RkZFUl9FWFQsIEdMX0RFUFRIX0NPTVBPTkVOVCwgd2lkdGgsIGhlaWdodCk7Ci0gICAgZ2xCaW5k
UmVuZGVyYnVmZmVyRVhUKEdMX1JFTkRFUkJVRkZFUl9FWFQsIDApOwotCi0gICAgZ2xGcmFtZWJ1
ZmZlclRleHR1cmUyREVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIEdMX0NPTE9SX0FUVEFDSE1FTlQw
X0VYVCwgdGFyZ2V0LCBtX3RleHR1cmUsIDApOwotICAgIGdsRnJhbWVidWZmZXJSZW5kZXJidWZm
ZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBHTF9ERVBUSF9BVFRBQ0hNRU5UX0VYVCwgR0xfUkVO
REVSQlVGRkVSX0VYVCwgbV9kZXB0aEJ1ZmZlcik7Ci0gICAgR0xlbnVtIHN0YXR1cyA9IGdsQ2hl
Y2tGcmFtZWJ1ZmZlclN0YXR1c0VYVChHTF9GUkFNRUJVRkZFUl9FWFQpOwotICAgIGlmIChzdGF0
dXMgIT0gR0xfRlJBTUVCVUZGRVJfQ09NUExFVEVfRVhUKSB7Ci0gICAgICAgIHByaW50ZigiR3Jh
cGhpY3NDb250ZXh0M0Q6IGZyYW1lYnVmZmVyIHdhcyBpbmNvbXBsZXRlXG4iKTsKLQotICAgICAg
ICAvLyBGSVhNRTogY2xlYW51cC4KLSAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICB9Ci0j
ZW5kaWYgIC8vIFJFTkRFUl9UT19ERUJVR0dJTkdfV0lORE9XCi0KLSNpZmRlZiBGTElQX0ZSQU1F
QlVGRkVSX1ZFUlRJQ0FMTFkKLSAgICBpZiAobV9zY2FubGluZSkgewotICAgICAgICBkZWxldGVb
XSBtX3NjYW5saW5lOwotICAgICAgICBtX3NjYW5saW5lID0gMDsKLSAgICB9Ci0gICAgbV9zY2Fu
bGluZSA9IG5ldyB1bnNpZ25lZCBjaGFyW3dpZHRoICogNF07Ci0jZW5kaWYgIC8vIEZMSVBfRlJB
TUVCVUZGRVJfVkVSVElDQUxMWQotCi0gICAgZ2xDbGVhcihHTF9DT0xPUl9CVUZGRVJfQklUKTsK
LQotI2lmIFBMQVRGT1JNKENHKQotICAgIC8vIE5lZWQgdG8gcmVhbGxvY2F0ZSB0aGUgY2xpZW50
LXNpZGUgYmFja2luZyBzdG9yZS4KLSAgICAvLyBGSVhNRTogbWFrZSB0aGlzIG1vcmUgZWZmaWNp
ZW50LgotICAgIGlmIChtX3JlbmRlck91dHB1dCkgewotICAgICAgICBkZWxldGVbXSBtX3JlbmRl
ck91dHB1dDsKLSAgICAgICAgbV9yZW5kZXJPdXRwdXQgPSAwOwotICAgIH0KLSAgICBpbnQgcm93
Qnl0ZXMgPSB3aWR0aCAqIDQ7Ci0gICAgbV9yZW5kZXJPdXRwdXQgPSBuZXcgdW5zaWduZWQgY2hh
cltoZWlnaHQgKiByb3dCeXRlc107Ci0jZW5kaWYgIC8vIFBMQVRGT1JNKENHKQotfQotCi0jaWZk
ZWYgRkxJUF9GUkFNRUJVRkZFUl9WRVJUSUNBTExZCi12b2lkIEdyYXBoaWNzQ29udGV4dDNESW50
ZXJuYWw6OmZsaXBWZXJ0aWNhbGx5KHVuc2lnbmVkIGNoYXIqIGZyYW1lYnVmZmVyLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgd2lk
dGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2ln
bmVkIGludCBoZWlnaHQpCi17Ci0gICAgdW5zaWduZWQgY2hhciogc2NhbmxpbmUgPSBtX3NjYW5s
aW5lOwotICAgIGlmICghc2NhbmxpbmUpCi0gICAgICAgIHJldHVybjsKLSAgICB1bnNpZ25lZCBp
bnQgcm93Qnl0ZXMgPSB3aWR0aCAqIDQ7Ci0gICAgdW5zaWduZWQgaW50IGNvdW50ID0gaGVpZ2h0
IC8gMjsKLSAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKLSAg
ICAgICAgdW5zaWduZWQgY2hhciogcm93QSA9IGZyYW1lYnVmZmVyICsgaSAqIHJvd0J5dGVzOwot
ICAgICAgICB1bnNpZ25lZCBjaGFyKiByb3dCID0gZnJhbWVidWZmZXIgKyAoaGVpZ2h0IC0gaSAt
IDEpICogcm93Qnl0ZXM7Ci0gICAgICAgIC8vIEZJWE1FOiB0aGlzIGlzIHdoZXJlIHRoZSBtdWx0
aXBsaWNhdGlvbiBvZiB0aGUgYWxwaGEKLSAgICAgICAgLy8gY2hhbm5lbCBpbnRvIHRoZSBjb2xv
ciBidWZmZXIgd2lsbCBuZWVkIHRvIG9jY3VyIGlmIHRoZQotICAgICAgICAvLyB1c2VyIHNwZWNp
ZmllcyB0aGUgInByZW11bHRpcGx5QWxwaGEiIGZsYWcgaW4gdGhlIGNvbnRleHQKLSAgICAgICAg
Ly8gY3JlYXRpb24gYXR0cmlidXRlcy4KLSAgICAgICAgbWVtY3B5KHNjYW5saW5lLCByb3dCLCBy
b3dCeXRlcyk7Ci0gICAgICAgIG1lbWNweShyb3dCLCByb3dBLCByb3dCeXRlcyk7Ci0gICAgICAg
IG1lbWNweShyb3dBLCBzY2FubGluZSwgcm93Qnl0ZXMpOwotICAgIH0KKyAgICByZXR1cm4gMDsK
IH0KLSNlbmRpZgogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmJlZ2luUGFpbnQo
V2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0KQogewotICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOwotCi0jaWZkZWYgUkVOREVSX1RPX0RFQlVHR0lOR19XSU5ET1cKLSAgICBTd2FwQnVmZmVy
cyhtX2NhbnZhc0RDKTsKLSNlbHNlCi0gICAgLy8gRWFybGllciB2ZXJzaW9ucyBvZiB0aGlzIGNv
ZGUgdXNlZCB0aGUgR1BVIHRvIGZsaXAgdGhlCi0gICAgLy8gZnJhbWVidWZmZXIgdmVydGljYWxs
eSBiZWZvcmUgcmVhZGluZyBpdCBiYWNrIGZvciBjb21wb3NpdGluZwotICAgIC8vIHZpYSBzb2Z0
d2FyZS4gVGhpcyBjb2RlIHdhcyBxdWl0ZSBjb21wbGljYXRlZCwgdXNlZCBhIGxvdCBvZgotICAg
IC8vIEdQVSBtZW1vcnksIGFuZCBkaWRuJ3QgcHJvdmlkZSBhbiBvYnZpb3VzIHNwZWVkdXAuIFNp
bmNlIHRoaXMKLSAgICAvLyB2ZXJ0aWNhbCBmbGlwIGlzIG9ubHkgYSB0ZW1wb3Jhcnkgc29sdXRp
b24gYW55d2F5IHVudGlsIENocm9tZQotICAgIC8vIGlzIGZ1bGx5IEdQVSBjb21wb3NpdGVkLCBp
dCB3YXNuJ3Qgd29ydGggdGhlIGNvbXBsZXhpdHkuCi0KICAgICBIVE1MQ2FudmFzRWxlbWVudCog
Y2FudmFzID0gY29udGV4dC0+Y2FudmFzKCk7CiAgICAgSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVy
ID0gY2FudmFzLT5idWZmZXIoKTsKICAgICB1bnNpZ25lZCBjaGFyKiBwaXhlbHMgPSAwOwotICAg
IGJvb2wgbXVzdFJlc3RvcmVGQk8gPSAobV9ib3VuZEZCTyAhPSBtX2Zibyk7Ci0gICAgaWYgKG11
c3RSZXN0b3JlRkJPKQotICAgICAgICBnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZF
Ul9FWFQsIG1fZmJvKTsKICNpZiBQTEFURk9STShTS0lBKQogICAgIGNvbnN0IFNrQml0bWFwKiBj
YW52YXNCaXRtYXAgPSBpbWFnZUJ1ZmZlci0+Y29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKS0+
Yml0bWFwKCk7CiAgICAgY29uc3QgU2tCaXRtYXAqIHJlYWRiYWNrQml0bWFwID0gMDsKICAgICBB
U1NFUlQoY2FudmFzQml0bWFwLT5jb25maWcoKSA9PSBTa0JpdG1hcDo6a0FSR0JfODg4OF9Db25m
aWcpOwotICAgIGlmIChjYW52YXNCaXRtYXAtPndpZHRoKCkgPT0gbV9jYWNoZWRXaWR0aCAmJiBj
YW52YXNCaXRtYXAtPmhlaWdodCgpID09IG1fY2FjaGVkSGVpZ2h0KSB7CisgICAgaWYgKGNhbnZh
c0JpdG1hcC0+d2lkdGgoKSA9PSBtX2ltcGwtPndpZHRoKCkgJiYgY2FudmFzQml0bWFwLT5oZWln
aHQoKSA9PSBtX2ltcGwtPmhlaWdodCgpKSB7CiAgICAgICAgIC8vIFRoaXMgaXMgdGhlIGZhc3Rl
c3QgYW5kIG1vc3QgY29tbW9uIGNhc2UuIFdlIHJlYWQgYmFjawogICAgICAgICAvLyBkaXJlY3Rs
eSBpbnRvIHRoZSBjYW52YXMncyBiYWNraW5nIHN0b3JlLgogICAgICAgICByZWFkYmFja0JpdG1h
cCA9IGNhbnZhc0JpdG1hcDsKQEAgLTc3NywxNSArMzgzLDE1IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0M0RJbnRlcm5hbDo6YmVnaW5QYWkKICAgICAgICAgLy8gV2UgbmVlZCB0byBhbGxvY2F0ZSBh
IHRlbXBvcmFyeSBiaXRtYXAgZm9yIHJlYWRpbmcgYmFjayB0aGUKICAgICAgICAgLy8gcGl4ZWwg
ZGF0YS4gV2Ugd2lsbCB0aGVuIHVzZSBTa2lhIHRvIHJlc2NhbGUgdGhpcyBiaXRtYXAgdG8KICAg
ICAgICAgLy8gdGhlIHNpemUgb2YgdGhlIGNhbnZhcydzIGJhY2tpbmcgc3RvcmUuCi0gICAgICAg
IGlmIChtX3Jlc2l6aW5nQml0bWFwICYmIChtX3Jlc2l6aW5nQml0bWFwLT53aWR0aCgpICE9IG1f
Y2FjaGVkV2lkdGggfHwgbV9yZXNpemluZ0JpdG1hcC0+aGVpZ2h0KCkgIT0gbV9jYWNoZWRIZWln
aHQpKSB7CisgICAgICAgIGlmIChtX3Jlc2l6aW5nQml0bWFwICYmIChtX3Jlc2l6aW5nQml0bWFw
LT53aWR0aCgpICE9IG1faW1wbC0+d2lkdGgoKSB8fCBtX3Jlc2l6aW5nQml0bWFwLT5oZWlnaHQo
KSAhPSBtX2ltcGwtPmhlaWdodCgpKSkgewogICAgICAgICAgICAgZGVsZXRlIG1fcmVzaXppbmdC
aXRtYXA7CiAgICAgICAgICAgICBtX3Jlc2l6aW5nQml0bWFwID0gMDsKICAgICAgICAgfQogICAg
ICAgICBpZiAoIW1fcmVzaXppbmdCaXRtYXApIHsKICAgICAgICAgICAgIG1fcmVzaXppbmdCaXRt
YXAgPSBuZXcgU2tCaXRtYXAoKTsKICAgICAgICAgICAgIG1fcmVzaXppbmdCaXRtYXAtPnNldENv
bmZpZyhTa0JpdG1hcDo6a0FSR0JfODg4OF9Db25maWcsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbV9jYWNoZWRXaWR0aCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtX2NhY2hlZEhlaWdodCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbV9pbXBsLT53aWR0aCgpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1faW1wbC0+aGVpZ2h0KCkpOwogICAgICAgICAgICAgaWYgKCFt
X3Jlc2l6aW5nQml0bWFwLT5hbGxvY1BpeGVscygpKSB7CiAgICAgICAgICAgICAgICAgZGVsZXRl
IG1fcmVzaXppbmdCaXRtYXA7CiAgICAgICAgICAgICAgICAgbV9yZXNpemluZ0JpdG1hcCA9IDA7
CkBAIC03OTgsMjMgKzQwNCwxNCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmJl
Z2luUGFpCiAgICAgLy8gUmVhZCBiYWNrIHRoZSBmcmFtZSBidWZmZXIuCiAgICAgU2tBdXRvTG9j
a1BpeGVscyBiaXRtYXBMb2NrKCpyZWFkYmFja0JpdG1hcCk7CiAgICAgcGl4ZWxzID0gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQgY2hhcio+KHJlYWRiYWNrQml0bWFwLT5nZXRQaXhlbHMoKSk7Ci0gICAg
Z2xSZWFkUGl4ZWxzKDAsIDAsIG1fY2FjaGVkV2lkdGgsIG1fY2FjaGVkSGVpZ2h0LCBHTF9CR1JB
LCBHTF9VTlNJR05FRF9CWVRFLCBwaXhlbHMpOwogI2VsaWYgUExBVEZPUk0oQ0cpCi0gICAgaWYg
KG1fcmVuZGVyT3V0cHV0KSB7CisgICAgaWYgKG1fcmVuZGVyT3V0cHV0KQogICAgICAgICBwaXhl
bHMgPSBtX3JlbmRlck91dHB1dDsKLSAgICAgICAgZ2xSZWFkUGl4ZWxzKDAsIDAsIG1fY2FjaGVk
V2lkdGgsIG1fY2FjaGVkSGVpZ2h0LCBHTF9CR1JBLCBHTF9VTlNJR05FRF9JTlRfOF84XzhfOF9S
RVYsIHBpeGVscyk7Ci0gICAgfQogI2Vsc2UKICNlcnJvciBNdXN0IHBvcnQgdG8geW91ciBwbGF0
Zm9ybQogI2VuZGlmCiAKLSAgICBpZiAobXVzdFJlc3RvcmVGQk8pCi0gICAgICAgIGdsQmluZEZy
YW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9ib3VuZEZCTyk7Ci0KLSNpZmRlZiBG
TElQX0ZSQU1FQlVGRkVSX1ZFUlRJQ0FMTFkKLSAgICBpZiAocGl4ZWxzKQotICAgICAgICBmbGlw
VmVydGljYWxseShwaXhlbHMsIG1fY2FjaGVkV2lkdGgsIG1fY2FjaGVkSGVpZ2h0KTsKLSNlbmRp
ZgorICAgIG1faW1wbC0+cmVhZEJhY2tGcmFtZWJ1ZmZlcihwaXhlbHMsIDQgKiBtX2ltcGwtPndp
ZHRoKCkgKiBtX2ltcGwtPmhlaWdodCgpKTsKIAogI2lmIFBMQVRGT1JNKFNLSUEpCiAgICAgaWYg
KG1fcmVzaXppbmdCaXRtYXApIHsKQEAgLTgyNiwxMSArNDIzLDExIEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0M0RJbnRlcm5hbDo6YmVnaW5QYWkKICAgICB9CiAjZWxpZiBQTEFURk9STShDRykKICAg
ICBpZiAobV9yZW5kZXJPdXRwdXQpIHsKLSAgICAgICAgaW50IHJvd0J5dGVzID0gbV9jYWNoZWRX
aWR0aCAqIDQ7Ci0gICAgICAgIENHRGF0YVByb3ZpZGVyUmVmIGRhdGFQcm92aWRlciA9IENHRGF0
YVByb3ZpZGVyQ3JlYXRlV2l0aERhdGEoMCwgbV9yZW5kZXJPdXRwdXQsIHJvd0J5dGVzICogbV9j
YWNoZWRIZWlnaHQsIDApOworICAgICAgICBpbnQgcm93Qnl0ZXMgPSBtX2ltcGwtPndpZHRoKCkg
KiA0OworICAgICAgICBDR0RhdGFQcm92aWRlclJlZiBkYXRhUHJvdmlkZXIgPSBDR0RhdGFQcm92
aWRlckNyZWF0ZVdpdGhEYXRhKDAsIG1fcmVuZGVyT3V0cHV0LCByb3dCeXRlcyAqIG1faW1wbC0+
aGVpZ2h0KCksIDApOwogICAgICAgICBDR0NvbG9yU3BhY2VSZWYgY29sb3JTcGFjZSA9IENHQ29s
b3JTcGFjZUNyZWF0ZURldmljZVJHQigpOwotICAgICAgICBDR0ltYWdlUmVmIGNnSW1hZ2UgPSBD
R0ltYWdlQ3JlYXRlKG1fY2FjaGVkV2lkdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbV9jYWNoZWRIZWlnaHQsCisgICAgICAgIENHSW1hZ2VSZWYgY2dJbWFn
ZSA9IENHSW1hZ2VDcmVhdGUobV9pbXBsLT53aWR0aCgpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1faW1wbC0+aGVpZ2h0KCksCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAzMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByb3dCeXRlcywKQEAgLTg2MSwxMDE4ICs0NTgsNzYzIEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0M0RJbnRlcm5hbDo6YmVnaW5QYWkKICNlbHNlCiAjZXJyb3IgTXVzdCBwb3J0IHRvIHlv
dXIgcGxhdGZvcm0KICNlbmRpZgotCi0jZW5kaWYgIC8vIFJFTkRFUl9UT19ERUJVR0dJTkdfV0lO
RE9XCiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6YWN0aXZlVGV4dHVyZSh1
bnNpZ25lZCBsb25nIHRleHR1cmUpCit2b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmVu
ZFBhaW50KCkKIHsKLSAgICAvLyBGSVhNRTogcXVlcnkgbnVtYmVyIG9mIHRleHR1cmVzIGF2YWls
YWJsZS4KLSAgICBpZiAodGV4dHVyZSA8IEdMX1RFWFRVUkUwIHx8IHRleHR1cmUgPiBHTF9URVhU
VVJFMCszMikKLSAgICAgICAgLy8gRklYTUU6IHJhaXNlIGV4Y2VwdGlvbi4KLSAgICAgICAgcmV0
dXJuOwotCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2xBY3RpdmVUZXh0dXJlKHRl
eHR1cmUpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmJpbmRCdWZmZXIo
dW5zaWduZWQgbG9uZyB0YXJnZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgV2ViR0xCdWZmZXIqIGJ1ZmZlcikKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKLSAgICBHTHVpbnQgYnVmSUQgPSBFWFRSQUNUKGJ1ZmZlcik7Ci0gICAgaWYgKHRhcmdldCA9
PSBHTF9BUlJBWV9CVUZGRVIpCi0gICAgICAgIG1fYm91bmRBcnJheUJ1ZmZlciA9IGJ1ZklEOwot
ICAgIGdsQmluZEJ1ZmZlcih0YXJnZXQsIGJ1ZklEKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQzREludGVybmFsOjpiaW5kRnJhbWVidWZmZXIodW5zaWduZWQgbG9uZyB0YXJnZXQsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJHTEZyYW1lYnVm
ZmVyKiBmcmFtZWJ1ZmZlcikKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBHTHVp
bnQgaWQgPSBFWFRSQUNUKGZyYW1lYnVmZmVyKTsKLSAgICBpZiAoIWlkKQotICAgICAgICBpZCA9
IG1fZmJvOwotICAgIGdsQmluZEZyYW1lYnVmZmVyRVhUKHRhcmdldCwgaWQpOwotICAgIG1fYm91
bmRGQk8gPSBpZDsKLX0KLQotLy8gSWYgd2UgZGlkbid0IGhhdmUgdG8gaGFjayBHTF9URVhUVVJF
X1dSQVBfUiBmb3IgY3ViZSBtYXBzLAotLy8gd2UgY291bGQganVzdCB1c2U6Ci0vLyBHTF9TQU1F
X01FVEhPRF8yX1gyKEJpbmRUZXh0dXJlLCBiaW5kVGV4dHVyZSwgdW5zaWduZWQgbG9uZywgV2Vi
R0xUZXh0dXJlKikKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6YmluZFRleHR1cmUo
dW5zaWduZWQgbG9uZyB0YXJnZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFdlYkdMVGV4dHVyZSogdGV4dHVyZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RJ
bnRlcm5hbDo6cmVzaGFwZShpbnQgd2lkdGgsIGludCBoZWlnaHQpCiB7Ci0gICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7Ci0gICAgdW5zaWduZWQgaW50IHRleHR1cmVPYmplY3QgPSBFWFRSQUNUKHRl
eHR1cmUpOworICAgIGlmICh3aWR0aCA9PSBtX2ltcGwtPndpZHRoKCkgJiYgaGVpZ2h0ID09IG1f
aW1wbC0+aGVpZ2h0KCkpCisgICAgICAgIHJldHVybjsKIAotICAgIGdsQmluZFRleHR1cmUodGFy
Z2V0LCB0ZXh0dXJlT2JqZWN0KTsKKyAgICBtX2ltcGwtPnJlc2hhcGUod2lkdGgsIGhlaWdodCk7
CiAKLSAgICAvLyBGSVhNRTogR0xfVEVYVFVSRV9XUkFQX1IgaXNuJ3QgZXhwb3NlZCBpbiB0aGUg
T3BlbkdMIEVTIDIuMAotICAgIC8vIEFQSS4gT24gZGVza3RvcCBPcGVuR0wgaW1wbGVtZW50YXRp
b25zIGl0IHNlZW1zIG5lY2Vzc2FyeSB0bwotICAgIC8vIHNldCB0aGlzIHdyYXAgbW9kZSB0byBH
TF9DTEFNUF9UT19FREdFIHRvIGdldCBjb3JyZWN0IGJlaGF2aW9yCi0gICAgLy8gb2YgY3ViZSBt
YXBzLgotICAgIGlmICh0ZXh0dXJlKSB7Ci0gICAgICAgIGlmICh0YXJnZXQgPT0gR0xfVEVYVFVS
RV9DVUJFX01BUCkgewotICAgICAgICAgICAgaWYgKCF0ZXh0dXJlLT5pc0N1YmVNYXBSV3JhcE1v
ZGVJbml0aWFsaXplZCgpKSB7Ci0gICAgICAgICAgICAgICAgZ2xUZXhQYXJhbWV0ZXJpKEdMX1RF
WFRVUkVfQ1VCRV9NQVAsIEdMX1RFWFRVUkVfV1JBUF9SLCBHTF9DTEFNUF9UT19FREdFKTsKLSAg
ICAgICAgICAgICAgICB0ZXh0dXJlLT5zZXRDdWJlTWFwUldyYXBNb2RlSW5pdGlhbGl6ZWQodHJ1
ZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgdGV4dHVyZS0+
c2V0Q3ViZU1hcFJXcmFwTW9kZUluaXRpYWxpemVkKGZhbHNlKTsKKyNpZiBQTEFURk9STShDRykK
KyAgICAvLyBOZWVkIHRvIHJlYWxsb2NhdGUgdGhlIGNsaWVudC1zaWRlIGJhY2tpbmcgc3RvcmUu
CisgICAgLy8gRklYTUU6IG1ha2UgdGhpcyBtb3JlIGVmZmljaWVudC4KKyAgICBpZiAobV9yZW5k
ZXJPdXRwdXQpIHsKKyAgICAgICAgZGVsZXRlW10gbV9yZW5kZXJPdXRwdXQ7CisgICAgICAgIG1f
cmVuZGVyT3V0cHV0ID0gMDsKICAgICB9CisgICAgaW50IHJvd0J5dGVzID0gd2lkdGggKiA0Owor
ICAgIG1fcmVuZGVyT3V0cHV0ID0gbmV3IHVuc2lnbmVkIGNoYXJbaGVpZ2h0ICogcm93Qnl0ZXNd
OworI2VuZGlmIC8vIFBMQVRGT1JNKENHKQogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNESW50
ZXJuYWw6OmJ1ZmZlckRhdGFJbXBsKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBpbnQgc2l6ZSwgY29u
c3Qgdm9pZCogZGF0YSwgdW5zaWduZWQgbG9uZyB1c2FnZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKLSAgICAvLyBGSVhNRTogbWFrZSB0aGlzIHZlcmlmaWNhdGlvbiBtb3JlIGVmZmlj
aWVudC4KLSAgICBHTGludCBiaW5kaW5nID0gMDsKLSAgICBHTGVudW0gYmluZGluZ190YXJnZXQg
PSBHTF9BUlJBWV9CVUZGRVJfQklORElORzsKLSAgICBpZiAodGFyZ2V0ID09IEdMX0VMRU1FTlRf
QVJSQVlfQlVGRkVSKQotICAgICAgICBiaW5kaW5nX3RhcmdldCA9IEdMX0VMRU1FTlRfQVJSQVlf
QlVGRkVSX0JJTkRJTkc7Ci0gICAgZ2xHZXRJbnRlZ2VydihiaW5kaW5nX3RhcmdldCwgJmJpbmRp
bmcpOwotICAgIGlmIChiaW5kaW5nIDw9IDApIHsKLSAgICAgICAgLy8gRklYTUU6IHJhaXNlIGV4
Y2VwdGlvbi4KLSAgICAgICAgLy8gTG9nTWVzc2FnZWYoKCJidWZmZXJEYXRhOiBubyBidWZmZXIg
Ym91bmQiKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisvLyBNYWNyb3MgdG8gYXNzaXN0IGlu
IGRlbGVnYXRpbmcgZnJvbSBHcmFwaGljc0NvbnRleHQzREludGVybmFsIHRvCisvLyBXZWJHcmFw
aGljc0NvbnRleHQzRC4KIAotICAgIGdsQnVmZmVyRGF0YSh0YXJnZXQsCi0gICAgICAgICAgICAg
ICAgICAgc2l6ZSwKLSAgICAgICAgICAgICAgICAgICBkYXRhLAotICAgICAgICAgICAgICAgICAg
IHVzYWdlKTsKKyNkZWZpbmUgREVMRUdBVEVfVE9fSU1QTChuYW1lKSBcCit2b2lkIEdyYXBoaWNz
Q29udGV4dDNESW50ZXJuYWw6Om5hbWUoKSBcCit7IFwKKyAgICBtX2ltcGwtPm5hbWUoKTsgXAog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmRpc2FibGVWZXJ0ZXhBdHRyaWJB
cnJheSh1bnNpZ25lZCBsb25nIGluZGV4KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwot
ICAgIGlmIChpbmRleCA8IE51bVRyYWNrZWRQb2ludGVyU3RhdGVzKQotICAgICAgICBtX3ZlcnRl
eEF0dHJpYlBvaW50ZXJTdGF0ZVtpbmRleF0uZW5hYmxlZCA9IGZhbHNlOwotICAgIGdsRGlzYWJs
ZVZlcnRleEF0dHJpYkFycmF5KGluZGV4KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRElu
dGVybmFsOjplbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSh1bnNpZ25lZCBsb25nIGluZGV4KQotewot
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGlmIChpbmRleCA8IE51bVRyYWNrZWRQb2lu
dGVyU3RhdGVzKQotICAgICAgICBtX3ZlcnRleEF0dHJpYlBvaW50ZXJTdGF0ZVtpbmRleF0uZW5h
YmxlZCA9IHRydWU7Ci0gICAgZ2xFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShpbmRleCk7CisjZGVm
aW5lIERFTEVHQVRFX1RPX0lNUExfUihuYW1lLCBydCkgICAgICAgICAgIFwKK3J0IEdyYXBoaWNz
Q29udGV4dDNESW50ZXJuYWw6Om5hbWUoKSBcCit7IFwKKyAgICByZXR1cm4gbV9pbXBsLT5uYW1l
KCk7IFwKIH0KIAotdW5zaWduZWQgbG9uZyBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpnZXRF
cnJvcigpCi17Ci0gICAgaWYgKG1fc3ludGhldGljRXJyb3JzLnNpemUoKSA+IDApIHsKLSAgICAg
ICAgTGlzdEhhc2hTZXQ8dW5zaWduZWQgbG9uZz46Oml0ZXJhdG9yIGl0ZXIgPSBtX3N5bnRoZXRp
Y0Vycm9ycy5iZWdpbigpOwotICAgICAgICB1bnNpZ25lZCBsb25nIGVyciA9ICppdGVyOwotICAg
ICAgICBtX3N5bnRoZXRpY0Vycm9ycy5yZW1vdmUoaXRlcik7Ci0gICAgICAgIHJldHVybiBlcnI7
Ci0gICAgfQotCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgcmV0dXJuIGdsR2V0RXJy
b3IoKTsKKyNkZWZpbmUgREVMRUdBVEVfVE9fSU1QTF8xKG5hbWUsIHQxKSBcCit2b2lkIEdyYXBo
aWNzQ29udGV4dDNESW50ZXJuYWw6Om5hbWUodDEgYTEpIFwKK3sgXAorICAgIG1faW1wbC0+bmFt
ZShhMSk7IFwKIH0KIAotR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgR3JhcGhpY3NDb250
ZXh0M0RJbnRlcm5hbDo6Z2V0Q29udGV4dEF0dHJpYnV0ZXMoKQotewotICAgIHJldHVybiBtX2F0
dHJzOworI2RlZmluZSBERUxFR0FURV9UT19JTVBMXzFfWChuYW1lLCB0MSkgXAordm9pZCBHcmFw
aGljc0NvbnRleHQzREludGVybmFsOjpuYW1lKHQxIGExKSBcCit7IFwKKyAgICBtX2ltcGwtPm5h
bWUoRVhUUkFDVChhMSkpOyAgICAgICAgICAgICAgICAgIFwKIH0KIAotdm9pZCBHcmFwaGljc0Nv
bnRleHQzREludGVybmFsOjp2ZXJ0ZXhBdHRyaWJQb2ludGVyKHVuc2lnbmVkIGxvbmcgaW5keCwg
aW50IHNpemUsIGludCB0eXBlLCBib29sIG5vcm1hbGl6ZWQsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBzdHJpZGUsIHVu
c2lnbmVkIGxvbmcgb2Zmc2V0KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotCi0gICAg
aWYgKG1fYm91bmRBcnJheUJ1ZmZlciA8PSAwKSB7Ci0gICAgICAgIC8vIEZJWE1FOiByYWlzZSBl
eGNlcHRpb24uCi0gICAgICAgIC8vIExvZ01lc3NhZ2VmKCgiYnVmZmVyRGF0YTogbm8gYnVmZmVy
IGJvdW5kIikpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKGluZHggPCBOdW1U
cmFja2VkUG9pbnRlclN0YXRlcykgewotICAgICAgICBWZXJ0ZXhBdHRyaWJQb2ludGVyU3RhdGUm
IHN0YXRlID0gbV92ZXJ0ZXhBdHRyaWJQb2ludGVyU3RhdGVbaW5keF07Ci0gICAgICAgIHN0YXRl
LmJ1ZmZlciA9IG1fYm91bmRBcnJheUJ1ZmZlcjsKLSAgICAgICAgc3RhdGUuaW5keCA9IGluZHg7
Ci0gICAgICAgIHN0YXRlLnNpemUgPSBzaXplOwotICAgICAgICBzdGF0ZS50eXBlID0gdHlwZTsK
LSAgICAgICAgc3RhdGUubm9ybWFsaXplZCA9IG5vcm1hbGl6ZWQ7Ci0gICAgICAgIHN0YXRlLnN0
cmlkZSA9IHN0cmlkZTsKLSAgICAgICAgc3RhdGUub2Zmc2V0ID0gb2Zmc2V0OwotICAgIH0KLQot
ICAgIGdsVmVydGV4QXR0cmliUG9pbnRlcihpbmR4LCBzaXplLCB0eXBlLCBub3JtYWxpemVkLCBz
dHJpZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+
KHN0YXRpY19jYXN0PGludHB0cl90PihvZmZzZXQpKSk7CisjZGVmaW5lIERFTEVHQVRFX1RPX0lN
UExfMVIobmFtZSwgdDEsIHJ0KSAgICBcCitydCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpu
YW1lKHQxIGExKSBcCit7IFwKKyAgICByZXR1cm4gbV9pbXBsLT5uYW1lKGExKTsgXAogfQogCi12
b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OnZpZXdwb3J0SW1wbChsb25nIHgsIGxvbmcg
eSwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQpCi17Ci0gICAgZ2xW
aWV3cG9ydCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKKyNkZWZpbmUgREVMRUdBVEVfVE9fSU1QTF8x
Ul9YKG5hbWUsIHQxLCBydCkgICAgXAorcnQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6bmFt
ZSh0MSBhMSkgXAoreyBcCisgICAgcmV0dXJuIG1faW1wbC0+bmFtZShFWFRSQUNUKGExKSk7ICAg
ICAgICAgICBcCiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6c3ludGhlc2l6
ZUdMRXJyb3IodW5zaWduZWQgbG9uZyBlcnJvcikKLXsKLSAgICBtX3N5bnRoZXRpY0Vycm9ycy5h
ZGQoZXJyb3IpOworI2RlZmluZSBERUxFR0FURV9UT19JTVBMXzIobmFtZSwgdDEsIHQyKSBcCit2
b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6Om5hbWUodDEgYTEsIHQyIGEyKSBcCit7IFwK
KyAgICBtX2ltcGwtPm5hbWUoYTEsIGEyKTsgXAogfQogCi0vLyBHcmFwaGljc0NvbnRleHQzRCAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0v
KiBIZWxwZXIgbWFjcm9zIGZvciB3aGVuIHdlJ3JlIGp1c3Qgd3JhcHBpbmcgYSBnbCBtZXRob2Qs
IHNvIHRoYXQKLSAqIHdlIGNhbiBhdm9pZCBoYXZpbmcgdG8gdHlwZSB0aGlzIDUwMCB0aW1lcy4g
IE5vdGUgdGhhdCB0aGVzZSBNVVNUCi0gKiBOT1QgQkUgVVNFRCBpZiB3ZSBuZWVkIHRvIGNoZWNr
IGFueSBvZiB0aGUgcGFyYW1ldGVycy4KLSAqLwotCi0jZGVmaW5lIEdMX1NBTUVfTUVUSE9EXzAo
Z2xuYW1lLCBuYW1lKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6bmFtZSgpICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKLXsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAotICAgIGdsIyNnbG5hbWUoKTsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyNkZWZpbmUgREVMRUdB
VEVfVE9fSU1QTF8yX1gxMihuYW1lLCB0MSwgdDIpIFwKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RJ
bnRlcm5hbDo6bmFtZSh0MSBhMSwgdDIgYTIpIFwKK3sgXAorICAgIG1faW1wbC0+bmFtZShFWFRS
QUNUKGExKSwgRVhUUkFDVChhMikpOyAgICAgXAogfQogCi0jZGVmaW5lIEdMX1NBTUVfTUVUSE9E
XzEoZ2xuYW1lLCBuYW1lLCB0MSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6bmFtZSh0MSBhMSkgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLXsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICAgIGdsIyNnbG5hbWUoYTEpOyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyNkZWZpbmUgREVM
RUdBVEVfVE9fSU1QTF8yX1gyKG5hbWUsIHQxLCB0MikgXAordm9pZCBHcmFwaGljc0NvbnRleHQz
REludGVybmFsOjpuYW1lKHQxIGExLCB0MiBhMikgXAoreyBcCisgICAgbV9pbXBsLT5uYW1lKGEx
LCBFWFRSQUNUKGEyKSk7ICAgICBcCiB9CiAKLSNkZWZpbmUgR0xfU0FNRV9NRVRIT0RfMV9YKGds
bmFtZSwgbmFtZSwgdDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi12b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjpuYW1lKHQxIGExKSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAoteyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCi0gICAgZ2wjI2dsbmFtZShFWFRSQUNUKGExKSk7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorI2RlZmluZSBERUxFR0FURV9U
T19JTVBMXzJSKG5hbWUsIHQxLCB0MiwgcnQpICBcCitydCBHcmFwaGljc0NvbnRleHQzREludGVy
bmFsOjpuYW1lKHQxIGExLCB0MiBhMikgXAoreyBcCisgICAgcmV0dXJuIG1faW1wbC0+bmFtZShh
MSwgYTIpOyBcCiB9CiAKLSNkZWZpbmUgR0xfU0FNRV9NRVRIT0RfMihnbG5hbWUsIG5hbWUsIHQx
LCB0MikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjpuYW1lKHQxIGExLCB0MiBhMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAoteyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci0gICAgZ2wjI2dsbmFtZShhMSwgYTIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAorI2RlZmluZSBERUxFR0FURV9UT19JTVBMXzMobmFt
ZSwgdDEsIHQyLCB0MykgICBcCit2b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6Om5hbWUo
dDEgYTEsIHQyIGEyLCB0MyBhMykgICAgXAoreyBcCisgICAgbV9pbXBsLT5uYW1lKGExLCBhMiwg
YTMpOyAgICAgICAgICAgICAgICAgIFwKIH0KIAotI2RlZmluZSBHTF9TQU1FX01FVEhPRF8yX1gx
MihnbG5hbWUsIG5hbWUsIHQxLCB0MikgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLXZv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6Om5hbWUodDEgYTEsIHQyIGEyKSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCi17ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgICBnbCMjZ2xuYW1lKEVYVFJBQ1QoYTEpLCBFWFRSQUNUKGEyKSk7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisjZGVmaW5lIERFTEVHQVRF
X1RPX0lNUExfM19YMShuYW1lLCB0MSwgdDIsIHQzKSAgIFwKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
M0RJbnRlcm5hbDo6bmFtZSh0MSBhMSwgdDIgYTIsIHQzIGEzKSAgICBcCit7IFwKKyAgICBtX2lt
cGwtPm5hbWUoRVhUUkFDVChhMSksIGEyLCBhMyk7ICAgICAgICAgIFwKIH0KIAotI2RlZmluZSBH
TF9TQU1FX01FVEhPRF8yX1gyKGdsbmFtZSwgbmFtZSwgdDEsIHQyKSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6Om5hbWUodDEgYTEsIHQyIGEy
KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi17ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBnbCMjZ2xuYW1lKGExLCBFWFRS
QUNUKGEyKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
CisjZGVmaW5lIERFTEVHQVRFX1RPX0lNUExfM1IobmFtZSwgdDEsIHQyLCB0MywgcnQpICAgXAor
cnQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6bmFtZSh0MSBhMSwgdDIgYTIsIHQzIGEzKSAg
ICBcCit7IFwKKyAgICByZXR1cm4gbV9pbXBsLT5uYW1lKGExLCBhMiwgYTMpOyAgICAgICAgICAg
ICAgICAgIFwKIH0KIAotI2RlZmluZSBHTF9TQU1FX01FVEhPRF8zKGdsbmFtZSwgbmFtZSwgdDEs
IHQyLCB0MykgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLXZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6Om5hbWUodDEgYTEsIHQyIGEyLCB0MyBhMykgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCi17ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
LSAgICBnbCMjZ2xuYW1lKGExLCBhMiwgYTMpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCisjZGVmaW5lIERFTEVHQVRFX1RPX0lNUExfNChuYW1l
LCB0MSwgdDIsIHQzLCB0NCkgICAgXAordm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpu
YW1lKHQxIGExLCB0MiBhMiwgdDMgYTMsIHQ0IGE0KSAgXAoreyBcCisgICAgbV9pbXBsLT5uYW1l
KGExLCBhMiwgYTMsIGE0KTsgICAgICAgICAgICAgIFwKIH0KIAotI2RlZmluZSBHTF9TQU1FX01F
VEhPRF8zX1gxMihnbG5hbWUsIG5hbWUsIHQxLCB0MiwgdDMpICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6Om5hbWUodDEgYTEsIHQyIGEyLCB0MyBhMykg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi17ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBnbCMjZ2xuYW1lKEVYVFJBQ1QoYTEpLCBFWFRS
QUNUKGEyKSwgYTMpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisjZGVmaW5l
IERFTEVHQVRFX1RPX0lNUExfNF9YNChuYW1lLCB0MSwgdDIsIHQzLCB0NCkgICAgXAordm9pZCBH
cmFwaGljc0NvbnRleHQzREludGVybmFsOjpuYW1lKHQxIGExLCB0MiBhMiwgdDMgYTMsIHQ0IGE0
KSAgXAoreyBcCisgICAgbV9pbXBsLT5uYW1lKGExLCBhMiwgYTMsIEVYVFJBQ1QoYTQpKTsgICAg
ICBcCiB9CiAKLSNkZWZpbmUgR0xfU0FNRV9NRVRIT0RfM19YMihnbG5hbWUsIG5hbWUsIHQxLCB0
MiwgdDMpICAgICAgICAgICAgICAgICAgICAgICAgICBcCi12b2lkIEdyYXBoaWNzQ29udGV4dDNE
OjpuYW1lKHQxIGExLCB0MiBhMiwgdDMgYTMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAoteyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAg
Z2wjI2dsbmFtZShhMSwgRVhUUkFDVChhMiksIGEzKTsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorI2RlZmluZSBERUxFR0FURV9UT19JTVBMXzUobmFtZSwgdDEs
IHQyLCB0MywgdDQsIHQ1KSAgICAgIFwKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6
bmFtZSh0MSBhMSwgdDIgYTIsIHQzIGEzLCB0NCBhNCwgdDUgYTUpICAgICAgICBcCit7IFwKKyAg
ICBtX2ltcGwtPm5hbWUoYTEsIGEyLCBhMywgYTQsIGE1KTsgICBcCiB9CiAKLSNkZWZpbmUgR0xf
U0FNRV9NRVRIT0RfNChnbG5hbWUsIG5hbWUsIHQxLCB0MiwgdDMsIHQ0KSAgICAgICAgICAgICAg
ICAgICAgICAgICBcCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpuYW1lKHQxIGExLCB0MiBhMiwg
dDMgYTMsIHQ0IGE0KSAgICAgICAgICAgICAgICAgICAgICAgXAoteyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgZ2wjI2dsbmFtZShhMSwgYTIsIGEz
LCBhNCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor
I2RlZmluZSBERUxFR0FURV9UT19JTVBMXzVfWDQobmFtZSwgdDEsIHQyLCB0MywgdDQsIHQ1KSAg
ICAgICAgICAgICAgICBcCit2b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6Om5hbWUodDEg
YTEsIHQyIGEyLCB0MyBhMywgdDQgYTQsIHQ1IGE1KSAgICAgICAgXAoreyBcCisgICAgbV9pbXBs
LT5uYW1lKGExLCBhMiwgYTMsIEVYVFJBQ1QoYTQpLCBhNSk7ICBcCiB9CiAKLSNkZWZpbmUgR0xf
U0FNRV9NRVRIT0RfNF9YNChnbG5hbWUsIG5hbWUsIHQxLCB0MiwgdDMsIHQ0KSAgICAgICAgICAg
ICAgICAgICAgICBcCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpuYW1lKHQxIGExLCB0MiBhMiwg
dDMgYTMsIHQ0IGE0KSAgICAgICAgICAgICAgICAgICAgICAgXAoteyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgZ2wjI2dsbmFtZShhMSwgYTIsIGEz
LCBFWFRSQUNUKGE0KSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor
I2RlZmluZSBERUxFR0FURV9UT19JTVBMXzVSKG5hbWUsIHQxLCB0MiwgdDMsIHQ0LCB0NSwgcnQp
ICAgICAgXAorcnQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6bmFtZSh0MSBhMSwgdDIgYTIs
IHQzIGEzLCB0NCBhNCwgdDUgYTUpICAgICAgICBcCit7IFwKKyAgICByZXR1cm4gbV9pbXBsLT5u
YW1lKGExLCBhMiwgYTMsIGE0LCBhNSk7ICAgXAogfQogCi0jZGVmaW5lIEdMX1NBTUVfTUVUSE9E
XzUoZ2xuYW1lLCBuYW1lLCB0MSwgdDIsIHQzLCB0NCwgdDUpICAgICAgICAgICAgICAgICAgICAg
XAotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6bmFtZSh0MSBhMSwgdDIgYTIsIHQzIGEzLCB0NCBh
NCwgdDUgYTUpICAgICAgICAgICAgICAgIFwKLXsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICAgIGdsIyNnbG5hbWUoYTEsIGEyLCBhMywgYTQsIGE1KTsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyNkZWZpbmUgREVM
RUdBVEVfVE9fSU1QTF82KG5hbWUsIHQxLCB0MiwgdDMsIHQ0LCB0NSwgdDYpICBcCit2b2lkIEdy
YXBoaWNzQ29udGV4dDNESW50ZXJuYWw6Om5hbWUodDEgYTEsIHQyIGEyLCB0MyBhMywgdDQgYTQs
IHQ1IGE1LCB0NiBhNikgXAoreyBcCisgICAgbV9pbXBsLT5uYW1lKGExLCBhMiwgYTMsIGE0LCBh
NSwgYTYpOyAgICAgICBcCiB9CiAKLSNkZWZpbmUgR0xfU0FNRV9NRVRIT0RfNV9YNChnbG5hbWUs
IG5hbWUsIHQxLCB0MiwgdDMsIHQ0LCB0NSkgICAgICAgICAgICAgICAgICBcCi12b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpuYW1lKHQxIGExLCB0MiBhMiwgdDMgYTMsIHQ0IGE0LCB0NSBhNSkgICAg
ICAgICAgICAgICAgXAoteyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCi0gICAgZ2wjI2dsbmFtZShhMSwgYTIsIGEzLCBFWFRSQUNUKGE0KSwgYTUpOyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorI2RlZmluZSBERUxFR0FURV9UT19JTVBM
XzZSKG5hbWUsIHQxLCB0MiwgdDMsIHQ0LCB0NSwgdDYsIHJ0KSAgXAorcnQgR3JhcGhpY3NDb250
ZXh0M0RJbnRlcm5hbDo6bmFtZSh0MSBhMSwgdDIgYTIsIHQzIGEzLCB0NCBhNCwgdDUgYTUsIHQ2
IGE2KSBcCit7IFwKKyAgICByZXR1cm4gbV9pbXBsLT5uYW1lKGExLCBhMiwgYTMsIGE0LCBhNSwg
YTYpOyAgICAgICBcCiB9CiAKLSNkZWZpbmUgR0xfU0FNRV9NRVRIT0RfNihnbG5hbWUsIG5hbWUs
IHQxLCB0MiwgdDMsIHQ0LCB0NSwgdDYpICAgICAgICAgICAgICAgICBcCi12b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpuYW1lKHQxIGExLCB0MiBhMiwgdDMgYTMsIHQ0IGE0LCB0NSBhNSwgdDYgYTYp
ICAgICAgICAgXAoteyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gICAgZ2wjI2dsbmFtZShhMSwgYTIsIGEzLCBhNCwgYTUsIGE2KTsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorI2RlZmluZSBERUxFR0FURV9UT19JTVBMXzdS
KG5hbWUsIHQxLCB0MiwgdDMsIHQ0LCB0NSwgdDYsIHQ3LCBydCkgXAorcnQgR3JhcGhpY3NDb250
ZXh0M0RJbnRlcm5hbDo6bmFtZSh0MSBhMSwgdDIgYTIsIHQzIGEzLCB0NCBhNCwgdDUgYTUsIHQ2
IGE2LCB0NyBhNykgXAoreyBcCisgICAgcmV0dXJuIG1faW1wbC0+bmFtZShhMSwgYTIsIGEzLCBh
NCwgYTUsIGE2LCBhNyk7ICAgXAogfQogCi0jZGVmaW5lIEdMX1NBTUVfTUVUSE9EXzgoZ2xuYW1l
LCBuYW1lLCB0MSwgdDIsIHQzLCB0NCwgdDUsIHQ2LCB0NywgdDgpICAgICAgICAgXAotdm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6bmFtZSh0MSBhMSwgdDIgYTIsIHQzIGEzLCB0NCBhNCwgdDUgYTUs
IHQ2IGE2LCB0NyBhNywgdDggYTgpICAgXAoteyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCi0gICAgZ2wjI2dsbmFtZShhMSwgYTIsIGEzLCBhNCwgYTUsIGE2
LCBhNywgYTgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorI2RlZmluZSBERUxF
R0FURV9UT19JTVBMXzgobmFtZSwgdDEsIHQyLCB0MywgdDQsIHQ1LCB0NiwgdDcsIHQ4KSAgICAg
ICBcCit2b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6Om5hbWUodDEgYTEsIHQyIGEyLCB0
MyBhMywgdDQgYTQsIHQ1IGE1LCB0NiBhNiwgdDcgYTcsIHQ4IGE4KSBcCit7IFwKKyAgICBtX2lt
cGwtPm5hbWUoYTEsIGEyLCBhMywgYTQsIGE1LCBhNiwgYTcsIGE4KTsgICAgICBcCiB9CiAKLVBh
c3NPd25QdHI8R3JhcGhpY3NDb250ZXh0M0Q+IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUoR3Jh
cGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cnMpCi17Ci0gICAgUGFzc093blB0cjxHcmFw
aGljc0NvbnRleHQzRD4gY29udGV4dCA9IG5ldyBHcmFwaGljc0NvbnRleHQzRChhdHRycyk7Ci0g
ICAgLy8gRklYTUU6IGFkZCBlcnJvciBjaGVja2luZwotICAgIHJldHVybiBjb250ZXh0OworI2Rl
ZmluZSBERUxFR0FURV9UT19JTVBMXzlSKG5hbWUsIHQxLCB0MiwgdDMsIHQ0LCB0NSwgdDYsIHQ3
LCB0OCwgdDksIHJ0KSBcCitydCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpuYW1lKHQxIGEx
LCB0MiBhMiwgdDMgYTMsIHQ0IGE0LCB0NSBhNSwgdDYgYTYsIHQ3IGE3LCB0OCBhOCwgdDkgYTkp
IFwKK3sgXAorICAgIHJldHVybiBtX2ltcGwtPm5hbWUoYTEsIGEyLCBhMywgYTQsIGE1LCBhNiwg
YTcsIGE4LCBhOSk7ICAgXAogfQogCi1HcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0
M0QoR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cnMpCi0gICAgOiBtX2N1cnJlbnRX
aWR0aCgwKQotICAgICwgbV9jdXJyZW50SGVpZ2h0KDApCi0gICAgLCBtX2ludGVybmFsKG5ldyBH
cmFwaGljc0NvbnRleHQzREludGVybmFsKGF0dHJzKSkKLXsKLX0KK0RFTEVHQVRFX1RPX0lNUExf
UihtYWtlQ29udGV4dEN1cnJlbnQsIGJvb2wpCitERUxFR0FURV9UT19JTVBMXzFSKHNpemVJbkJ5
dGVzLCBpbnQsIGludCkKIAotR3JhcGhpY3NDb250ZXh0M0Q6On5HcmFwaGljc0NvbnRleHQzRCgp
Ci17Ci19CitERUxFR0FURV9UT19JTVBMXzEoYWN0aXZlVGV4dHVyZSwgdW5zaWduZWQgbG9uZykK
K0RFTEVHQVRFX1RPX0lNUExfMl9YMTIoYXR0YWNoU2hhZGVyLCBXZWJHTFByb2dyYW0qLCBXZWJH
TFNoYWRlciopCiAKLVBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QgR3JhcGhpY3NDb250ZXh0M0Q6
OnBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QoKSBjb25zdAordm9pZCBHcmFwaGljc0NvbnRleHQz
REludGVybmFsOjpiaW5kQXR0cmliTG9jYXRpb24oV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCB1bnNp
Z25lZCBsb25nIGluZGV4LCBjb25zdCBTdHJpbmcmIG5hbWUpCiB7Ci0gICAgcmV0dXJuIG1faW50
ZXJuYWwtPnBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QoKTsKKyAgICBtX2ltcGwtPmJpbmRBdHRy
aWJMb2NhdGlvbihFWFRSQUNUKHByb2dyYW0pLCBpbmRleCwgbmFtZS51dGY4KCkuZGF0YSgpKTsK
IH0KIAotUGxhdGZvcm0zRE9iamVjdCBHcmFwaGljc0NvbnRleHQzRDo6cGxhdGZvcm1UZXh0dXJl
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9pbnRlcm5hbC0+cGxhdGZvcm1UZXh0dXJlKCk7Ci19
CitERUxFR0FURV9UT19JTVBMXzJfWDIoYmluZEJ1ZmZlciwgdW5zaWduZWQgbG9uZywgV2ViR0xC
dWZmZXIqKQorREVMRUdBVEVfVE9fSU1QTF8yX1gyKGJpbmRGcmFtZWJ1ZmZlciwgdW5zaWduZWQg
bG9uZywgV2ViR0xGcmFtZWJ1ZmZlciopCitERUxFR0FURV9UT19JTVBMXzJfWDIoYmluZFJlbmRl
cmJ1ZmZlciwgdW5zaWduZWQgbG9uZywgV2ViR0xSZW5kZXJidWZmZXIqKQogCi12b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjptYWtlQ29udGV4dEN1cnJlbnQoKQotewotICAgIG1faW50ZXJuYWwtPm1h
a2VDb250ZXh0Q3VycmVudCgpOwotfQorc3RhdGljIGNvbnN0IGludCBrVGV4dHVyZVdyYXBSID0g
MHg4MDcyOwogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZXNoYXBlKGludCB3aWR0aCwgaW50
IGhlaWdodCkKKy8vIElmIHdlIGRpZG4ndCBoYXZlIHRvIGhhY2sgR0xfVEVYVFVSRV9XUkFQX1Ig
Zm9yIGN1YmUgbWFwcywKKy8vIHdlIGNvdWxkIGp1c3QgdXNlOgorLy8gREVMRUdBVEVfVE9fSU1Q
TF8yX1gyKGJpbmRUZXh0dXJlLCB1bnNpZ25lZCBsb25nLCBXZWJHTFRleHR1cmUqKQordm9pZCBH
cmFwaGljc0NvbnRleHQzREludGVybmFsOjpiaW5kVGV4dHVyZSh1bnNpZ25lZCBsb25nIHRhcmdl
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViR0xUZXh0
dXJlKiB0ZXh0dXJlKQogewotICAgIGlmICh3aWR0aCA9PSBtX2N1cnJlbnRXaWR0aCAmJiBoZWln
aHQgPT0gbV9jdXJyZW50SGVpZ2h0KQotICAgICAgICByZXR1cm47CisgICAgdW5zaWduZWQgaW50
IHRleHR1cmVPYmplY3QgPSBFWFRSQUNUKHRleHR1cmUpOwogCi0gICAgbV9jdXJyZW50V2lkdGgg
PSB3aWR0aDsKLSAgICBtX2N1cnJlbnRIZWlnaHQgPSBoZWlnaHQ7CisgICAgbV9pbXBsLT5iaW5k
VGV4dHVyZSh0YXJnZXQsIHRleHR1cmVPYmplY3QpOwogCi0gICAgbV9pbnRlcm5hbC0+cmVzaGFw
ZSh3aWR0aCwgaGVpZ2h0KTsKKyAgICAvLyBGSVhNRTogR0xfVEVYVFVSRV9XUkFQX1IgaXNuJ3Qg
ZXhwb3NlZCBpbiB0aGUgT3BlbkdMIEVTIDIuMAorICAgIC8vIEFQSS4gT24gZGVza3RvcCBPcGVu
R0wgaW1wbGVtZW50YXRpb25zIGl0IHNlZW1zIG5lY2Vzc2FyeSB0bworICAgIC8vIHNldCB0aGlz
IHdyYXAgbW9kZSB0byBHTF9DTEFNUF9UT19FREdFIHRvIGdldCBjb3JyZWN0IGJlaGF2aW9yCisg
ICAgLy8gb2YgY3ViZSBtYXBzLgorICAgIGlmICh0ZXh0dXJlKQorICAgICAgICBpZiAodGFyZ2V0
ID09IEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQKSB7CisgICAgICAgICAgICBp
ZiAoIXRleHR1cmUtPmlzQ3ViZU1hcFJXcmFwTW9kZUluaXRpYWxpemVkKCkpIHsKKyAgICAgICAg
ICAgICAgICBtX2ltcGwtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVf
Q1VCRV9NQVAsIGtUZXh0dXJlV3JhcFIsIEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdF
KTsKKyAgICAgICAgICAgICAgICB0ZXh0dXJlLT5zZXRDdWJlTWFwUldyYXBNb2RlSW5pdGlhbGl6
ZWQodHJ1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgdGV4
dHVyZS0+c2V0Q3ViZU1hcFJXcmFwTW9kZUluaXRpYWxpemVkKGZhbHNlKTsKIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6YmVnaW5QYWludChXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNvbnRl
eHQpCi17Ci0gICAgbV9pbnRlcm5hbC0+YmVnaW5QYWludChjb250ZXh0KTsKLX0KK0RFTEVHQVRF
X1RPX0lNUExfNChibGVuZENvbG9yLCBkb3VibGUsIGRvdWJsZSwgZG91YmxlLCBkb3VibGUpCitE
RUxFR0FURV9UT19JTVBMXzEoYmxlbmRFcXVhdGlvbiwgdW5zaWduZWQgbG9uZykKK0RFTEVHQVRF
X1RPX0lNUExfMihibGVuZEVxdWF0aW9uU2VwYXJhdGUsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVk
IGxvbmcpCitERUxFR0FURV9UT19JTVBMXzIoYmxlbmRGdW5jLCB1bnNpZ25lZCBsb25nLCB1bnNp
Z25lZCBsb25nKQorREVMRUdBVEVfVE9fSU1QTF80KGJsZW5kRnVuY1NlcGFyYXRlLCB1bnNpZ25l
ZCBsb25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKQogCi12
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjplbmRQYWludCgpCit2b2lkIEdyYXBoaWNzQ29udGV4dDNE
SW50ZXJuYWw6OmJ1ZmZlckRhdGEodW5zaWduZWQgbG9uZyB0YXJnZXQsIGludCBzaXplLCB1bnNp
Z25lZCBsb25nIHVzYWdlKQogeworICAgIG1faW1wbC0+YnVmZmVyRGF0YSh0YXJnZXQsIHNpemUs
IDAsIHVzYWdlKTsKIH0KIAotaW50IEdyYXBoaWNzQ29udGV4dDNEOjpzaXplSW5CeXRlcyhpbnQg
dHlwZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6YnVmZmVyRGF0YSh1bnNpZ25l
ZCBsb25nIHRhcmdldCwgV2ViR0xBcnJheSogYXJyYXksIHVuc2lnbmVkIGxvbmcgdXNhZ2UpCiB7
Ci0gICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBHTF9CWVRFOgotICAgICAgICByZXR1cm4g
c2l6ZW9mKEdMYnl0ZSk7Ci0gICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgotICAgICAgICByZXR1
cm4gc2l6ZW9mKEdMdWJ5dGUpOwotICAgIGNhc2UgR0xfU0hPUlQ6Ci0gICAgICAgIHJldHVybiBz
aXplb2YoR0xzaG9ydCk7Ci0gICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVDoKLSAgICAgICAgcmV0
dXJuIHNpemVvZihHTHVzaG9ydCk7Ci0gICAgY2FzZSBHTF9JTlQ6Ci0gICAgICAgIHJldHVybiBz
aXplb2YoR0xpbnQpOwotICAgIGNhc2UgR0xfVU5TSUdORURfSU5UOgotICAgICAgICByZXR1cm4g
c2l6ZW9mKEdMdWludCk7Ci0gICAgY2FzZSBHTF9GTE9BVDoKLSAgICAgICAgcmV0dXJuIHNpemVv
ZihHTGZsb2F0KTsKLSAgICBkZWZhdWx0OiAvLyBGSVhNRTogZGVmYXVsdCBjYXNlcyBhcmUgZGlz
Y291cmFnZWQgaW4gV2ViS2l0LgotICAgICAgICByZXR1cm4gMDsKLSAgICB9CisgICAgbV9pbXBs
LT5idWZmZXJEYXRhKHRhcmdldCwgYXJyYXktPmJ5dGVMZW5ndGgoKSwgYXJyYXktPmJhc2VBZGRy
ZXNzKCksIHVzYWdlKTsKIH0KIAotdW5zaWduZWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZUJ1
ZmZlcigpCit2b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmJ1ZmZlclN1YkRhdGEodW5z
aWduZWQgbG9uZyB0YXJnZXQsIGxvbmcgb2Zmc2V0LCBXZWJHTEFycmF5KiBhcnJheSkKIHsKLSAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBHTHVpbnQgbzsKLSAgICBnbEdlbkJ1ZmZlcnMo
MSwgJm8pOwotICAgIHJldHVybiBvOworICAgIG1faW1wbC0+YnVmZmVyU3ViRGF0YSh0YXJnZXQs
IG9mZnNldCwgYXJyYXktPmJ5dGVMZW5ndGgoKSwgYXJyYXktPmJhc2VBZGRyZXNzKCkpOwogfQog
Ci11bnNpZ25lZCBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlRnJhbWVidWZmZXIoKQotewotICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIEdMdWludCBvID0gMDsKLSAgICBnbEdlbkZyYW1l
YnVmZmVyc0VYVCgxLCAmbyk7Ci0gICAgcmV0dXJuIG87Ci19CitERUxFR0FURV9UT19JTVBMXzFS
KGNoZWNrRnJhbWVidWZmZXJTdGF0dXMsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpCitE
RUxFR0FURV9UT19JTVBMXzEoY2xlYXIsIHVuc2lnbmVkIGxvbmcpCitERUxFR0FURV9UT19JTVBM
XzQoY2xlYXJDb2xvciwgZG91YmxlLCBkb3VibGUsIGRvdWJsZSwgZG91YmxlKQorREVMRUdBVEVf
VE9fSU1QTF8xKGNsZWFyRGVwdGgsIGRvdWJsZSkKK0RFTEVHQVRFX1RPX0lNUExfMShjbGVhclN0
ZW5jaWwsIGxvbmcpCitERUxFR0FURV9UT19JTVBMXzQoY29sb3JNYXNrLCBib29sLCBib29sLCBi
b29sLCBib29sKQorREVMRUdBVEVfVE9fSU1QTF8xX1goY29tcGlsZVNoYWRlciwgV2ViR0xTaGFk
ZXIqKQogCi11bnNpZ25lZCBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlUHJvZ3JhbSgpCi17Ci0g
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgcmV0dXJuIGdsQ3JlYXRlUHJvZ3JhbSgpOwot
fQorREVMRUdBVEVfVE9fSU1QTF84KGNvcHlUZXhJbWFnZTJELCB1bnNpZ25lZCBsb25nLCBsb25n
LCB1bnNpZ25lZCBsb25nLCBsb25nLCBsb25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25n
LCBsb25nKQorREVMRUdBVEVfVE9fSU1QTF84KGNvcHlUZXhTdWJJbWFnZTJELCB1bnNpZ25lZCBs
b25nLCBsb25nLCBsb25nLCBsb25nLCBsb25nLCBsb25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25l
ZCBsb25nKQorREVMRUdBVEVfVE9fSU1QTF8xKGN1bGxGYWNlLCB1bnNpZ25lZCBsb25nKQorREVM
RUdBVEVfVE9fSU1QTF8xKGRlcHRoRnVuYywgdW5zaWduZWQgbG9uZykKK0RFTEVHQVRFX1RPX0lN
UExfMShkZXB0aE1hc2ssIGJvb2wpCitERUxFR0FURV9UT19JTVBMXzIoZGVwdGhSYW5nZSwgZG91
YmxlLCBkb3VibGUpCitERUxFR0FURV9UT19JTVBMXzJfWDEyKGRldGFjaFNoYWRlciwgV2ViR0xQ
cm9ncmFtKiwgV2ViR0xTaGFkZXIqKQorREVMRUdBVEVfVE9fSU1QTF8xKGRpc2FibGUsIHVuc2ln
bmVkIGxvbmcpCitERUxFR0FURV9UT19JTVBMXzEoZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5LCB1
bnNpZ25lZCBsb25nKQorREVMRUdBVEVfVE9fSU1QTF8zKGRyYXdBcnJheXMsIHVuc2lnbmVkIGxv
bmcsIGxvbmcsIGxvbmcpCitERUxFR0FURV9UT19JTVBMXzQoZHJhd0VsZW1lbnRzLCB1bnNpZ25l
ZCBsb25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCBsb25nKQogCi11bnNpZ25lZCBH
cmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlUmVuZGVyYnVmZmVyKCkKLXsKLSAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKLSAgICBHTHVpbnQgbzsKLSAgICBnbEdlblJlbmRlcmJ1ZmZlcnNFWFQoMSwg
Jm8pOwotICAgIHJldHVybiBvOwotfQorREVMRUdBVEVfVE9fSU1QTF8xKGVuYWJsZSwgdW5zaWdu
ZWQgbG9uZykKK0RFTEVHQVRFX1RPX0lNUExfMShlbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSwgdW5z
aWduZWQgbG9uZykKK0RFTEVHQVRFX1RPX0lNUEwoZmluaXNoKQorREVMRUdBVEVfVE9fSU1QTChm
bHVzaCkKK0RFTEVHQVRFX1RPX0lNUExfNF9YNChmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlciwgdW5z
aWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgV2ViR0xSZW5kZXJidWZm
ZXIqKQorREVMRUdBVEVfVE9fSU1QTF81X1g0KGZyYW1lYnVmZmVyVGV4dHVyZTJELCB1bnNpZ25l
ZCBsb25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCBXZWJHTFRleHR1cmUqLCBsb25n
KQorREVMRUdBVEVfVE9fSU1QTF8xKGZyb250RmFjZSwgdW5zaWduZWQgbG9uZykKK0RFTEVHQVRF
X1RPX0lNUExfMShnZW5lcmF0ZU1pcG1hcCwgdW5zaWduZWQgbG9uZykKIAotdW5zaWduZWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OmNyZWF0ZVNoYWRlcih1bnNpZ25lZCBsb25nIHR5cGUpCitib29sIEdy
YXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmdldEFjdGl2ZUF0dHJpYihXZWJHTFByb2dyYW0qIHBy
b2dyYW0sIHVuc2lnbmVkIGxvbmcgaW5kZXgsIEFjdGl2ZUluZm8mIGluZm8pCiB7Ci0gICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgcmV0dXJuIGdsQ3JlYXRlU2hhZGVyKCh0eXBlID09IEZS
QUdNRU5UX1NIQURFUikgPyBHTF9GUkFHTUVOVF9TSEFERVIgOiBHTF9WRVJURVhfU0hBREVSKTsK
KyAgICBXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNEOjpBY3RpdmVJbmZvIHdlYkluZm87Cisg
ICAgaWYgKCFtX2ltcGwtPmdldEFjdGl2ZUF0dHJpYihFWFRSQUNUKHByb2dyYW0pLCBpbmRleCwg
d2ViSW5mbykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpbmZvLm5hbWUgPSB3ZWJJbmZv
Lm5hbWU7CisgICAgaW5mby50eXBlID0gd2ViSW5mby50eXBlOworICAgIGluZm8uc2l6ZSA9IHdl
YkluZm8uc2l6ZTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdW5zaWduZWQgR3JhcGhpY3NDb250
ZXh0M0Q6OmNyZWF0ZVRleHR1cmUoKQorYm9vbCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpn
ZXRBY3RpdmVVbmlmb3JtKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgdW5zaWduZWQgbG9uZyBpbmRl
eCwgQWN0aXZlSW5mbyYgaW5mbykKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBH
THVpbnQgbzsKLSAgICBnbEdlblRleHR1cmVzKDEsICZvKTsKLSAgICByZXR1cm4gbzsKKyAgICBX
ZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNEOjpBY3RpdmVJbmZvIHdlYkluZm87CisgICAgaWYg
KCFtX2ltcGwtPmdldEFjdGl2ZVVuaWZvcm0oRVhUUkFDVChwcm9ncmFtKSwgaW5kZXgsIHdlYklu
Zm8pKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaW5mby5uYW1lID0gd2ViSW5mby5uYW1l
OworICAgIGluZm8udHlwZSA9IHdlYkluZm8udHlwZTsKKyAgICBpbmZvLnNpemUgPSB3ZWJJbmZv
LnNpemU7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRl
bGV0ZUJ1ZmZlcih1bnNpZ25lZCBidWZmZXIpCitpbnQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5h
bDo6Z2V0QXR0cmliTG9jYXRpb24oV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBjb25zdCBTdHJpbmcm
IG5hbWUpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2xEZWxldGVCdWZmZXJz
KDEsICZidWZmZXIpOworICAgIHJldHVybiBtX2ltcGwtPmdldEF0dHJpYkxvY2F0aW9uKEVYVFJB
Q1QocHJvZ3JhbSksIG5hbWUudXRmOCgpLmRhdGEoKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OmRlbGV0ZUZyYW1lYnVmZmVyKHVuc2lnbmVkIGZyYW1lYnVmZmVyKQotewotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsRGVsZXRlRnJhbWVidWZmZXJzRVhUKDEsICZmcmFt
ZWJ1ZmZlcik7Ci19CitERUxFR0FURV9UT19JTVBMXzIoZ2V0Qm9vbGVhbnYsIHVuc2lnbmVkIGxv
bmcsIHVuc2lnbmVkIGNoYXIqKQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVQcm9n
cmFtKHVuc2lnbmVkIHByb2dyYW0pCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAg
Z2xEZWxldGVQcm9ncmFtKHByb2dyYW0pOwotfQorREVMRUdBVEVfVE9fSU1QTF8zKGdldEJ1ZmZl
clBhcmFtZXRlcml2LCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCBpbnQqKQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVSZW5kZXJidWZmZXIodW5zaWduZWQgcmVuZGVyYnVm
ZmVyKQorR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgR3JhcGhpY3NDb250ZXh0M0RJbnRl
cm5hbDo6Z2V0Q29udGV4dEF0dHJpYnV0ZXMoKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OwotICAgIGdsRGVsZXRlUmVuZGVyYnVmZmVyc0VYVCgxLCAmcmVuZGVyYnVmZmVyKTsKKyAgICBX
ZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIHdlYkF0dHJpYnV0ZXMgPSBt
X2ltcGwtPmdldENvbnRleHRBdHRyaWJ1dGVzKCk7CisgICAgR3JhcGhpY3NDb250ZXh0M0Q6OkF0
dHJpYnV0ZXMgYXR0cmlidXRlczsKKyAgICBhdHRyaWJ1dGVzLmFscGhhID0gd2ViQXR0cmlidXRl
cy5hbHBoYTsKKyAgICBhdHRyaWJ1dGVzLmRlcHRoID0gd2ViQXR0cmlidXRlcy5kZXB0aDsKKyAg
ICBhdHRyaWJ1dGVzLnN0ZW5jaWwgPSB3ZWJBdHRyaWJ1dGVzLnN0ZW5jaWw7CisgICAgYXR0cmli
dXRlcy5hbnRpYWxpYXMgPSB3ZWJBdHRyaWJ1dGVzLmFudGlhbGlhczsKKyAgICBhdHRyaWJ1dGVz
LnByZW11bHRpcGxpZWRBbHBoYSA9IHdlYkF0dHJpYnV0ZXMucHJlbXVsdGlwbGllZEFscGhhOwor
ICAgIHJldHVybiBhdHRyaWJ1dGVzOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZWxl
dGVTaGFkZXIodW5zaWduZWQgc2hhZGVyKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwot
ICAgIGdsRGVsZXRlU2hhZGVyKHNoYWRlcik7Ci19CitERUxFR0FURV9UT19JTVBMX1IoZ2V0RXJy
b3IsIHVuc2lnbmVkIGxvbmcpCiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZVRleHR1
cmUodW5zaWduZWQgdGV4dHVyZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBn
bERlbGV0ZVRleHR1cmVzKDEsICZ0ZXh0dXJlKTsKLX0KK0RFTEVHQVRFX1RPX0lNUExfMihnZXRG
bG9hdHYsIHVuc2lnbmVkIGxvbmcsIGZsb2F0KikKIAotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
YWN0aXZlVGV4dHVyZSh1bnNpZ25lZCBsb25nIHRleHR1cmUpCi17Ci0gICAgbV9pbnRlcm5hbC0+
YWN0aXZlVGV4dHVyZSh0ZXh0dXJlKTsKLX0KK0RFTEVHQVRFX1RPX0lNUExfNChnZXRGcmFtZWJ1
ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpdiwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywg
dW5zaWduZWQgbG9uZywgaW50KikKIAotR0xfU0FNRV9NRVRIT0RfMl9YMTIoQXR0YWNoU2hhZGVy
LCBhdHRhY2hTaGFkZXIsIFdlYkdMUHJvZ3JhbSosIFdlYkdMU2hhZGVyKikKK0RFTEVHQVRFX1RP
X0lNUExfMihnZXRJbnRlZ2VydiwgdW5zaWduZWQgbG9uZywgaW50KikKIAotdm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6YmluZEF0dHJpYkxvY2F0aW9uKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGlu
ZGV4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0
cmluZyYgbmFtZSkKLXsKLSAgICBpZiAoIXByb2dyYW0pCi0gICAgICAgIHJldHVybjsKLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbEJpbmRBdHRyaWJMb2NhdGlvbihFWFRSQUNUKHBy
b2dyYW0pLCBpbmRleCwgbmFtZS51dGY4KCkuZGF0YSgpKTsKLX0KK0RFTEVHQVRFX1RPX0lNUExf
M19YMShnZXRQcm9ncmFtaXYsIFdlYkdMUHJvZ3JhbSosIHVuc2lnbmVkIGxvbmcsIGludCopCiAK
LXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRCdWZmZXIodW5zaWduZWQgbG9uZyB0YXJnZXQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYkdMQnVmZmVyKiBidWZmZXIp
CitTdHJpbmcgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6Z2V0UHJvZ3JhbUluZm9Mb2coV2Vi
R0xQcm9ncmFtKiBwcm9ncmFtKQogewotICAgIG1faW50ZXJuYWwtPmJpbmRCdWZmZXIodGFyZ2V0
LCBidWZmZXIpOworICAgIHJldHVybiBtX2ltcGwtPmdldFByb2dyYW1JbmZvTG9nKEVYVFJBQ1Qo
cHJvZ3JhbSkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpiaW5kRnJhbWVidWZmZXIo
dW5zaWduZWQgbG9uZyB0YXJnZXQsIFdlYkdMRnJhbWVidWZmZXIqIGZyYW1lYnVmZmVyKQotewot
ICAgIG1faW50ZXJuYWwtPmJpbmRGcmFtZWJ1ZmZlcih0YXJnZXQsIGZyYW1lYnVmZmVyKTsKLX0K
K0RFTEVHQVRFX1RPX0lNUExfMyhnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdiwgdW5zaWduZWQg
bG9uZywgdW5zaWduZWQgbG9uZywgaW50KikKIAotR0xfU0FNRV9NRVRIT0RfMl9YMihCaW5kUmVu
ZGVyYnVmZmVyRVhULCBiaW5kUmVuZGVyYnVmZmVyLCB1bnNpZ25lZCBsb25nLCBXZWJHTFJlbmRl
cmJ1ZmZlciopCitERUxFR0FURV9UT19JTVBMXzNfWDEoZ2V0U2hhZGVyaXYsIFdlYkdMU2hhZGVy
KiwgdW5zaWduZWQgbG9uZywgaW50KikKIAotLy8gSWYgd2UgZGlkbid0IGhhdmUgdG8gaGFjayBH
TF9URVhUVVJFX1dSQVBfUiBmb3IgY3ViZSBtYXBzLAotLy8gd2UgY291bGQganVzdCB1c2U6Ci0v
LyBHTF9TQU1FX01FVEhPRF8yX1gyKEJpbmRUZXh0dXJlLCBiaW5kVGV4dHVyZSwgdW5zaWduZWQg
bG9uZywgV2ViR0xUZXh0dXJlKikKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRUZXh0dXJl
KHVuc2lnbmVkIGxvbmcgdGFyZ2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgV2ViR0xUZXh0dXJlKiB0ZXh0dXJlKQorU3RyaW5nIEdyYXBoaWNzQ29udGV4dDNESW50ZXJu
YWw6OmdldFNoYWRlckluZm9Mb2coV2ViR0xTaGFkZXIqIHNoYWRlcikKIHsKLSAgICBtX2ludGVy
bmFsLT5iaW5kVGV4dHVyZSh0YXJnZXQsIHRleHR1cmUpOworICAgIHJldHVybiBtX2ltcGwtPmdl
dFNoYWRlckluZm9Mb2coRVhUUkFDVChzaGFkZXIpKTsKIH0KIAotR0xfU0FNRV9NRVRIT0RfNChC
bGVuZENvbG9yLCBibGVuZENvbG9yLCBkb3VibGUsIGRvdWJsZSwgZG91YmxlLCBkb3VibGUpCi0K
LUdMX1NBTUVfTUVUSE9EXzEoQmxlbmRFcXVhdGlvbiwgYmxlbmRFcXVhdGlvbiwgdW5zaWduZWQg
bG9uZykKLQotR0xfU0FNRV9NRVRIT0RfMihCbGVuZEVxdWF0aW9uU2VwYXJhdGUsIGJsZW5kRXF1
YXRpb25TZXBhcmF0ZSwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZykKLQotR0xfU0FNRV9N
RVRIT0RfMihCbGVuZEZ1bmMsIGJsZW5kRnVuYywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9u
ZykKLQotR0xfU0FNRV9NRVRIT0RfNChCbGVuZEZ1bmNTZXBhcmF0ZSwgYmxlbmRGdW5jU2VwYXJh
dGUsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVk
IGxvbmcpCi0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJ1ZmZlckRhdGEodW5zaWduZWQgbG9u
ZyB0YXJnZXQsIGludCBzaXplLCB1bnNpZ25lZCBsb25nIHVzYWdlKQorU3RyaW5nIEdyYXBoaWNz
Q29udGV4dDNESW50ZXJuYWw6OmdldFNoYWRlclNvdXJjZShXZWJHTFNoYWRlciogc2hhZGVyKQog
ewotICAgIG1faW50ZXJuYWwtPmJ1ZmZlckRhdGFJbXBsKHRhcmdldCwgc2l6ZSwgMCwgdXNhZ2Up
OworICAgIHJldHVybiBtX2ltcGwtPmdldFNoYWRlclNvdXJjZShFWFRSQUNUKHNoYWRlcikpOwog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpidWZmZXJEYXRhKHVuc2lnbmVkIGxvbmcgdGFy
Z2V0LCBXZWJHTEFycmF5KiBhcnJheSwgdW5zaWduZWQgbG9uZyB1c2FnZSkKK1N0cmluZyBHcmFw
aGljc0NvbnRleHQzREludGVybmFsOjpnZXRTdHJpbmcodW5zaWduZWQgbG9uZyBuYW1lKQogewot
ICAgIG1faW50ZXJuYWwtPmJ1ZmZlckRhdGFJbXBsKHRhcmdldCwgYXJyYXktPmJ5dGVMZW5ndGgo
KSwgYXJyYXktPmJhc2VBZGRyZXNzKCksIHVzYWdlKTsKKyAgICByZXR1cm4gbV9pbXBsLT5nZXRT
dHJpbmcobmFtZSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJ1ZmZlclN1YkRhdGEo
dW5zaWduZWQgbG9uZyB0YXJnZXQsIGxvbmcgb2Zmc2V0LCBXZWJHTEFycmF5KiBhcnJheSkKLXsK
LSAgICBpZiAoIWFycmF5IHx8ICFhcnJheS0+bGVuZ3RoKCkpCi0gICAgICAgIHJldHVybjsKK0RF
TEVHQVRFX1RPX0lNUExfMyhnZXRUZXhQYXJhbWV0ZXJmdiwgdW5zaWduZWQgbG9uZywgdW5zaWdu
ZWQgbG9uZywgZmxvYXQqKQorREVMRUdBVEVfVE9fSU1QTF8zKGdldFRleFBhcmFtZXRlcml2LCB1
bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCBpbnQqKQogCi0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7Ci0gICAgLy8gRklYTUU6IG1ha2UgdGhpcyB2ZXJpZmljYXRpb24gbW9yZSBlZmZpY2ll
bnQuCi0gICAgR0xpbnQgYmluZGluZyA9IDA7Ci0gICAgR0xlbnVtIGJpbmRpbmdfdGFyZ2V0ID0g
R0xfQVJSQVlfQlVGRkVSX0JJTkRJTkc7Ci0gICAgaWYgKHRhcmdldCA9PSBHTF9FTEVNRU5UX0FS
UkFZX0JVRkZFUikKLSAgICAgICAgYmluZGluZ190YXJnZXQgPSBHTF9FTEVNRU5UX0FSUkFZX0JV
RkZFUl9CSU5ESU5HOwotICAgIGdsR2V0SW50ZWdlcnYoYmluZGluZ190YXJnZXQsICZiaW5kaW5n
KTsKLSAgICBpZiAoYmluZGluZyA8PSAwKSB7Ci0gICAgICAgIC8vIEZJWE1FOiByYWlzZSBleGNl
cHRpb24uCi0gICAgICAgIC8vIExvZ01lc3NhZ2VmKCgiYnVmZmVyU3ViRGF0YTogbm8gYnVmZmVy
IGJvdW5kIikpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGdsQnVmZmVyU3ViRGF0YSh0
YXJnZXQsIG9mZnNldCwgYXJyYXktPmJ5dGVMZW5ndGgoKSwgYXJyYXktPmJhc2VBZGRyZXNzKCkp
OwotfQorREVMRUdBVEVfVE9fSU1QTF8zX1gxKGdldFVuaWZvcm1mdiwgV2ViR0xQcm9ncmFtKiwg
bG9uZywgZmxvYXQqKQorREVMRUdBVEVfVE9fSU1QTF8zX1gxKGdldFVuaWZvcm1pdiwgV2ViR0xQ
cm9ncmFtKiwgbG9uZywgaW50KikKIAotdW5zaWduZWQgbG9uZyBHcmFwaGljc0NvbnRleHQzRDo6
Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyh1bnNpZ25lZCBsb25nIHRhcmdldCkKK2xvbmcgR3JhcGhp
Y3NDb250ZXh0M0RJbnRlcm5hbDo6Z2V0VW5pZm9ybUxvY2F0aW9uKFdlYkdMUHJvZ3JhbSogcHJv
Z3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwot
ICAgIHJldHVybiBnbENoZWNrRnJhbWVidWZmZXJTdGF0dXNFWFQodGFyZ2V0KTsKKyAgICByZXR1
cm4gbV9pbXBsLT5nZXRVbmlmb3JtTG9jYXRpb24oRVhUUkFDVChwcm9ncmFtKSwgbmFtZS51dGY4
KCkuZGF0YSgpKTsKIH0KIAotR0xfU0FNRV9NRVRIT0RfMShDbGVhciwgY2xlYXIsIHVuc2lnbmVk
IGxvbmcpCi0KLUdMX1NBTUVfTUVUSE9EXzQoQ2xlYXJDb2xvciwgY2xlYXJDb2xvciwgZG91Ymxl
LCBkb3VibGUsIGRvdWJsZSwgZG91YmxlKQotCi1HTF9TQU1FX01FVEhPRF8xKENsZWFyRGVwdGgs
IGNsZWFyRGVwdGgsIGRvdWJsZSkKLQotR0xfU0FNRV9NRVRIT0RfMShDbGVhclN0ZW5jaWwsIGNs
ZWFyU3RlbmNpbCwgbG9uZykKLQotR0xfU0FNRV9NRVRIT0RfNChDb2xvck1hc2ssIGNvbG9yTWFz
aywgYm9vbCwgYm9vbCwgYm9vbCwgYm9vbCkKLQotR0xfU0FNRV9NRVRIT0RfMV9YKENvbXBpbGVT
aGFkZXIsIGNvbXBpbGVTaGFkZXIsIFdlYkdMU2hhZGVyKikKLQotR0xfU0FNRV9NRVRIT0RfOChD
b3B5VGV4SW1hZ2UyRCwgY29weVRleEltYWdlMkQsIHVuc2lnbmVkIGxvbmcsIGxvbmcsIHVuc2ln
bmVkIGxvbmcsIGxvbmcsIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIGxvbmcp
Ci0KLUdMX1NBTUVfTUVUSE9EXzgoQ29weVRleFN1YkltYWdlMkQsIGNvcHlUZXhTdWJJbWFnZTJE
LCB1bnNpZ25lZCBsb25nLCBsb25nLCBsb25nLCBsb25nLCBsb25nLCBsb25nLCB1bnNpZ25lZCBs
b25nLCB1bnNpZ25lZCBsb25nKQotCi1HTF9TQU1FX01FVEhPRF8xKEN1bGxGYWNlLCBjdWxsRmFj
ZSwgdW5zaWduZWQgbG9uZykKK0RFTEVHQVRFX1RPX0lNUExfMyhnZXRWZXJ0ZXhBdHRyaWJmdiwg
dW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgZmxvYXQqKQorREVMRUdBVEVfVE9fSU1QTF8z
KGdldFZlcnRleEF0dHJpYml2LCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCBpbnQqKQog
Ci1HTF9TQU1FX01FVEhPRF8xKERlcHRoRnVuYywgZGVwdGhGdW5jLCB1bnNpZ25lZCBsb25nKQor
REVMRUdBVEVfVE9fSU1QTF8yUihnZXRWZXJ0ZXhBdHRyaWJPZmZzZXQsIHVuc2lnbmVkIGxvbmcs
IHVuc2lnbmVkIGxvbmcsIGxvbmcpCiAKLUdMX1NBTUVfTUVUSE9EXzEoRGVwdGhNYXNrLCBkZXB0
aE1hc2ssIGJvb2wpCitERUxFR0FURV9UT19JTVBMXzIoaGludCwgdW5zaWduZWQgbG9uZywgdW5z
aWduZWQgbG9uZykKK0RFTEVHQVRFX1RPX0lNUExfMVJfWChpc0J1ZmZlciwgV2ViR0xCdWZmZXIq
LCBib29sKQorREVMRUdBVEVfVE9fSU1QTF8xUihpc0VuYWJsZWQsIHVuc2lnbmVkIGxvbmcsIGJv
b2wpCitERUxFR0FURV9UT19JTVBMXzFSX1goaXNGcmFtZWJ1ZmZlciwgV2ViR0xGcmFtZWJ1ZmZl
ciosIGJvb2wpCitERUxFR0FURV9UT19JTVBMXzFSX1goaXNQcm9ncmFtLCBXZWJHTFByb2dyYW0q
LCBib29sKQorREVMRUdBVEVfVE9fSU1QTF8xUl9YKGlzUmVuZGVyYnVmZmVyLCBXZWJHTFJlbmRl
cmJ1ZmZlciosIGJvb2wpCitERUxFR0FURV9UT19JTVBMXzFSX1goaXNTaGFkZXIsIFdlYkdMU2hh
ZGVyKiwgYm9vbCkKK0RFTEVHQVRFX1RPX0lNUExfMVJfWChpc1RleHR1cmUsIFdlYkdMVGV4dHVy
ZSosIGJvb2wpCitERUxFR0FURV9UT19JTVBMXzEobGluZVdpZHRoLCBkb3VibGUpCitERUxFR0FU
RV9UT19JTVBMXzFfWChsaW5rUHJvZ3JhbSwgV2ViR0xQcm9ncmFtKikKK0RFTEVHQVRFX1RPX0lN
UExfMihwaXhlbFN0b3JlaSwgdW5zaWduZWQgbG9uZywgbG9uZykKK0RFTEVHQVRFX1RPX0lNUExf
Mihwb2x5Z29uT2Zmc2V0LCBkb3VibGUsIGRvdWJsZSkKIAotR0xfU0FNRV9NRVRIT0RfMihEZXB0
aFJhbmdlLCBkZXB0aFJhbmdlLCBkb3VibGUsIGRvdWJsZSkKLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6ZGV0YWNoU2hhZGVyKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgV2ViR0xTaGFkZXIqIHNo
YWRlcikKK1Bhc3NSZWZQdHI8V2ViR0xBcnJheT4gR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6
cmVhZFBpeGVscyhsb25nIHgsIGxvbmcgeSwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQg
bG9uZyBoZWlnaHQsIHVuc2lnbmVkIGxvbmcgZm9ybWF0LCB1bnNpZ25lZCBsb25nIHR5cGUpCiB7
Ci0gICAgaWYgKCFwcm9ncmFtIHx8ICFzaGFkZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsRGV0YWNoU2hhZGVyKEVYVFJBQ1QocHJvZ3JhbSks
IEVYVFJBQ1Qoc2hhZGVyKSk7CisgICAgLy8gRklYTUU6IHRha2UgaW50byBhY2NvdW50IHBhY2sg
YWxpZ25tZW50LgorICAgIFJlZlB0cjxXZWJHTFVuc2lnbmVkQnl0ZUFycmF5PiBhcnJheSA9IFdl
YkdMVW5zaWduZWRCeXRlQXJyYXk6OmNyZWF0ZSh3aWR0aCAqIGhlaWdodCAqIDQpOworICAgIG1f
aW1wbC0+cmVhZFBpeGVscyh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGFycmF5
LT5iYXNlQWRkcmVzcygpKTsKKyAgICByZXR1cm4gYXJyYXk7CiB9CiAKLUdMX1NBTUVfTUVUSE9E
XzEoRGlzYWJsZSwgZGlzYWJsZSwgdW5zaWduZWQgbG9uZykKK0RFTEVHQVRFX1RPX0lNUEwocmVs
ZWFzZVNoYWRlckNvbXBpbGVyKQorREVMRUdBVEVfVE9fSU1QTF80KHJlbmRlcmJ1ZmZlclN0b3Jh
Z2UsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVk
IGxvbmcpCitERUxFR0FURV9UT19JTVBMXzIoc2FtcGxlQ292ZXJhZ2UsIGRvdWJsZSwgYm9vbCkK
K0RFTEVHQVRFX1RPX0lNUExfNChzY2lzc29yLCBsb25nLCBsb25nLCB1bnNpZ25lZCBsb25nLCB1
bnNpZ25lZCBsb25nKQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkaXNhYmxlVmVydGV4QXR0
cmliQXJyYXkodW5zaWduZWQgbG9uZyBpbmRleCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRl
cm5hbDo6c2hhZGVyU291cmNlKFdlYkdMU2hhZGVyKiBzaGFkZXIsIGNvbnN0IFN0cmluZyYgc3Ry
aW5nKQogewotICAgIG1faW50ZXJuYWwtPmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShpbmRleCk7
CisgICAgbV9pbXBsLT5zaGFkZXJTb3VyY2UoRVhUUkFDVChzaGFkZXIpLCBzdHJpbmcudXRmOCgp
LmRhdGEoKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRyYXdBcnJheXModW5zaWdu
ZWQgbG9uZyBtb2RlLCBsb25nIGZpcnN0LCBsb25nIGNvdW50KQotewotICAgIHN3aXRjaCAobW9k
ZSkgewotICAgIGNhc2UgR0xfVFJJQU5HTEVTOgotICAgIGNhc2UgR0xfVFJJQU5HTEVfU1RSSVA6
Ci0gICAgY2FzZSBHTF9UUklBTkdMRV9GQU46Ci0gICAgY2FzZSBHTF9QT0lOVFM6Ci0gICAgY2Fz
ZSBHTF9MSU5FX1NUUklQOgotICAgIGNhc2UgR0xfTElORV9MT09QOgotICAgIGNhc2UgR0xfTElO
RVM6Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6IC8vIEZJWE1FOiBkZWZhdWx0IGNhc2Vz
IGFyZSBkaXNjb3VyYWdlZCBpbiBXZWJLaXQuCi0gICAgICAgIC8vIEZJWE1FOiBvdXRwdXQgbG9n
IG1lc3NhZ2UsIHJhaXNlIGV4Y2VwdGlvbi4KLSAgICAgICAgLy8gTG9nTWVzc2FnZShOU19MSVRF
UkFMX0NTVFJJTkcoImRyYXdBcnJheXM6IGludmFsaWQgbW9kZSIpKTsKLSAgICAgICAgLy8gcmV0
dXJuIE5TX0VSUk9SX0RPTV9TWU5UQVhfRVJSOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgaWYgKGZpcnN0K2NvdW50IDwgZmlyc3QgfHwgZmlyc3QrY291bnQgPCBjb3VudCkgewotICAg
ICAgICAvLyBGSVhNRTogb3V0cHV0IGxvZyBtZXNzYWdlLCByYWlzZSBleGNlcHRpb24uCi0gICAg
ICAgIC8vIExvZ01lc3NhZ2UoTlNfTElURVJBTF9DU1RSSU5HKCJkcmF3QXJyYXlzOiBvdmVyZmxv
dyBpbiBmaXJzdCtjb3VudCIpKTsKLSAgICAgICAgLy8gcmV0dXJuIE5TX0VSUk9SX0lOVkFMSURf
QVJHOwotICAgICAgICByZXR1cm47Ci0gICAgfQorREVMRUdBVEVfVE9fSU1QTF8zKHN0ZW5jaWxG
dW5jLCB1bnNpZ25lZCBsb25nLCBsb25nLCB1bnNpZ25lZCBsb25nKQorREVMRUdBVEVfVE9fSU1Q
TF80KHN0ZW5jaWxGdW5jU2VwYXJhdGUsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIGxv
bmcsIHVuc2lnbmVkIGxvbmcpCitERUxFR0FURV9UT19JTVBMXzEoc3RlbmNpbE1hc2ssIHVuc2ln
bmVkIGxvbmcpCitERUxFR0FURV9UT19JTVBMXzIoc3RlbmNpbE1hc2tTZXBhcmF0ZSwgdW5zaWdu
ZWQgbG9uZywgdW5zaWduZWQgbG9uZykKK0RFTEVHQVRFX1RPX0lNUExfMyhzdGVuY2lsT3AsIHVu
c2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpCitERUxFR0FURV9UT19J
TVBMXzQoc3RlbmNpbE9wU2VwYXJhdGUsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVu
c2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpCiAKLSAgICAvLyBGSVhNRTogdmFsaWRhdGUgYWdh
aW5zdCBjdXJyZW50bHkgYm91bmQgYnVmZmVyLgotICAgIC8vIGlmICghVmFsaWRhdGVCdWZmZXJz
KGZpcnN0K2NvdW50KSkKLSAgICAvLyAgICAgcmV0dXJuIE5TX0VSUk9SX0lOVkFMSURfQVJHOwot
Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2xEcmF3QXJyYXlzKG1vZGUsIGZpcnN0
LCBjb3VudCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRyYXdFbGVtZW50cyh1bnNp
Z25lZCBsb25nIG1vZGUsIHVuc2lnbmVkIGxvbmcgY291bnQsIHVuc2lnbmVkIGxvbmcgdHlwZSwg
bG9uZyBvZmZzZXQpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgLy8gRklYTUU6
IG1ha2UgdGhpcyB2ZXJpZmljYXRpb24gbW9yZSBlZmZpY2llbnQuCi0gICAgR0xpbnQgYmluZGlu
ZyA9IDA7Ci0gICAgR0xlbnVtIGJpbmRpbmdfdGFyZ2V0ID0gR0xfRUxFTUVOVF9BUlJBWV9CVUZG
RVJfQklORElORzsKLSAgICBnbEdldEludGVnZXJ2KGJpbmRpbmdfdGFyZ2V0LCAmYmluZGluZyk7
Ci0gICAgaWYgKGJpbmRpbmcgPD0gMCkgewotICAgICAgICAvLyBGSVhNRTogcmFpc2UgZXhjZXB0
aW9uLgotICAgICAgICAvLyBMb2dNZXNzYWdlZigoImJ1ZmZlckRhdGE6IG5vIGJ1ZmZlciBib3Vu
ZCIpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBnbERyYXdFbGVtZW50cyhtb2RlLCBj
b3VudCwgdHlwZSwKLSAgICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PHZvaWQqPihz
dGF0aWNfY2FzdDxpbnRwdHJfdD4ob2Zmc2V0KSkpOworaW50IEdyYXBoaWNzQ29udGV4dDNESW50
ZXJuYWw6OnRleEltYWdlMkQodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBsZXZlbCwgdW5zaWdu
ZWQgaW50ZXJuYWxmb3JtYXQsIHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQsIHVuc2ln
bmVkIGJvcmRlciwgdW5zaWduZWQgZm9ybWF0LCB1bnNpZ25lZCB0eXBlLCB2b2lkKiBwaXhlbHMp
Cit7CisgICAgbV9pbXBsLT50ZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0
LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsKKyAgICByZXR1
cm4gMDsKIH0KIAotR0xfU0FNRV9NRVRIT0RfMShFbmFibGUsIGVuYWJsZSwgdW5zaWduZWQgbG9u
ZykKK0RFTEVHQVRFX1RPX0lNUExfMyh0ZXhQYXJhbWV0ZXJmLCB1bnNpZ25lZCwgdW5zaWduZWQs
IGZsb2F0KQorREVMRUdBVEVfVE9fSU1QTF8zKHRleFBhcmFtZXRlcmksIHVuc2lnbmVkLCB1bnNp
Z25lZCwgaW50KQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjplbmFibGVWZXJ0ZXhBdHRyaWJB
cnJheSh1bnNpZ25lZCBsb25nIGluZGV4KQoraW50IEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6
OnRleFN1YkltYWdlMkQodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBsZXZlbCwgdW5zaWduZWQg
eG9mZnNldCwgdW5zaWduZWQgeW9mZnNldCwgdW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdo
dCwgdW5zaWduZWQgZm9ybWF0LCB1bnNpZ25lZCB0eXBlLCB2b2lkKiBwaXhlbHMpCiB7Ci0gICAg
bV9pbnRlcm5hbC0+ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoaW5kZXgpOworICAgIG1faW1wbC0+
dGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVp
Z2h0LCBmb3JtYXQsIHR5cGUsIHBpeGVscyk7CisgICAgcmV0dXJuIDA7CiB9CiAKLUdMX1NBTUVf
TUVUSE9EXzAoRmluaXNoLCBmaW5pc2gpCi0KLUdMX1NBTUVfTUVUSE9EXzAoRmx1c2gsIGZsdXNo
KQotCi1HTF9TQU1FX01FVEhPRF80X1g0KEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyRVhULCBmcmFt
ZWJ1ZmZlclJlbmRlcmJ1ZmZlciwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWdu
ZWQgbG9uZywgV2ViR0xSZW5kZXJidWZmZXIqKQotCi1HTF9TQU1FX01FVEhPRF81X1g0KEZyYW1l
YnVmZmVyVGV4dHVyZTJERVhULCBmcmFtZWJ1ZmZlclRleHR1cmUyRCwgdW5zaWduZWQgbG9uZywg
dW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgV2ViR0xUZXh0dXJlKiwgbG9uZykKK0RFTEVH
QVRFX1RPX0lNUExfMih1bmlmb3JtMWYsIGxvbmcsIGZsb2F0KQogCi1HTF9TQU1FX01FVEhPRF8x
KEZyb250RmFjZSwgZnJvbnRGYWNlLCB1bnNpZ25lZCBsb25nKQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjpnZW5lcmF0ZU1pcG1hcCh1bnNpZ25lZCBsb25nIHRhcmdldCkKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0M0RJbnRlcm5hbDo6dW5pZm9ybTFmdihsb25nIGxvY2F0aW9uLCBmbG9hdCogdiwg
aW50IHNpemUpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgaWYgKGdsR2VuZXJh
dGVNaXBtYXBFWFQpCi0gICAgICAgIGdsR2VuZXJhdGVNaXBtYXBFWFQodGFyZ2V0KTsKLSAgICAv
LyBGSVhNRTogcHJvdmlkZSBhbHRlcm5hdGl2ZSBjb2RlIHBhdGg/IFRoaXMgd2lsbCBiZSB1bnBs
ZWFzYW50Ci0gICAgLy8gdG8gaW1wbGVtZW50IGlmIGdsR2VuZXJhdGVNaXBtYXBFWFQgaXMgbm90
IGF2YWlsYWJsZSAtLSBpdCB3aWxsCi0gICAgLy8gcmVxdWlyZSBhIHRleHR1cmUgcmVhZGJhY2sg
YW5kIHJlLXVwbG9hZC4KKyAgICBtX2ltcGwtPnVuaWZvcm0xZnYobG9jYXRpb24sIHNpemUsIHYp
OwogfQogCi1ib29sIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRBY3RpdmVBdHRyaWIoV2ViR0xQcm9n
cmFtKiBwcm9ncmFtLCB1bnNpZ25lZCBsb25nIGluZGV4LCBBY3RpdmVJbmZvJiBpbmZvKQotewot
ICAgIGlmICghcHJvZ3JhbSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihJTlZBTElEX1ZB
TFVFKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBHTGludCBtYXhOYW1lTGVu
Z3RoID0gLTE7Ci0gICAgZ2xHZXRQcm9ncmFtaXYoRVhUUkFDVChwcm9ncmFtKSwgR0xfQUNUSVZF
X0FUVFJJQlVURV9NQVhfTEVOR1RILCAmbWF4TmFtZUxlbmd0aCk7Ci0gICAgaWYgKG1heE5hbWVM
ZW5ndGggPCAwKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgR0xjaGFyKiBuYW1lID0gMDsK
LSAgICBpZiAoIXRyeUZhc3RNYWxsb2MobWF4TmFtZUxlbmd0aCAqIHNpemVvZihHTGNoYXIpKS5n
ZXRWYWx1ZShuYW1lKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihPVVRfT0ZfTUVNT1JZ
KTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBHTHNpemVpIGxlbmd0aCA9IDA7
Ci0gICAgR0xpbnQgc2l6ZSA9IC0xOwotICAgIEdMZW51bSB0eXBlID0gMDsKLSAgICBnbEdldEFj
dGl2ZUF0dHJpYihFWFRSQUNUKHByb2dyYW0pLCBpbmRleCwgbWF4TmFtZUxlbmd0aCwKLSAgICAg
ICAgICAgICAgICAgICAgICAmbGVuZ3RoLCAmc2l6ZSwgJnR5cGUsIG5hbWUpOwotICAgIGlmIChz
aXplIDwgMCkgewotICAgICAgICBmYXN0RnJlZShuYW1lKTsKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLSAgICBpbmZvLm5hbWUgPSBTdHJpbmcobmFtZSwgbGVuZ3RoKTsKLSAgICBpbmZv
LnR5cGUgPSB0eXBlOwotICAgIGluZm8uc2l6ZSA9IHNpemU7Ci0gICAgZmFzdEZyZWUobmFtZSk7
Ci0gICAgcmV0dXJuIHRydWU7Ci19CitERUxFR0FURV9UT19JTVBMXzIodW5pZm9ybTFpLCBsb25n
LCBpbnQpCiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEFjdGl2ZVVuaWZvcm0oV2ViR0xQ
cm9ncmFtKiBwcm9ncmFtLCB1bnNpZ25lZCBsb25nIGluZGV4LCBBY3RpdmVJbmZvJiBpbmZvKQor
dm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjp1bmlmb3JtMWl2KGxvbmcgbG9jYXRpb24s
IGludCogdiwgaW50IHNpemUpCiB7Ci0gICAgaWYgKCFwcm9ncmFtKSB7Ci0gICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKElOVkFMSURfVkFMVUUpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQotICAgIEdMaW50IG1heE5hbWVMZW5ndGggPSAtMTsKLSAgICBnbEdldFByb2dyYW1pdihFWFRS
QUNUKHByb2dyYW0pLCBHTF9BQ1RJVkVfVU5JRk9STV9NQVhfTEVOR1RILCAmbWF4TmFtZUxlbmd0
aCk7Ci0gICAgaWYgKG1heE5hbWVMZW5ndGggPCAwKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgR0xjaGFyKiBuYW1lID0gMDsKLSAgICBpZiAoIXRyeUZhc3RNYWxsb2MobWF4TmFtZUxlbmd0
aCAqIHNpemVvZihHTGNoYXIpKS5nZXRWYWx1ZShuYW1lKSkgewotICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihPVVRfT0ZfTUVNT1JZKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAg
ICBHTHNpemVpIGxlbmd0aCA9IDA7Ci0gICAgR0xpbnQgc2l6ZSA9IC0xOwotICAgIEdMZW51bSB0
eXBlID0gMDsKLSAgICBnbEdldEFjdGl2ZVVuaWZvcm0oRVhUUkFDVChwcm9ncmFtKSwgaW5kZXgs
IG1heE5hbWVMZW5ndGgsCi0gICAgICAgICAgICAgICAgICAgICAgICZsZW5ndGgsICZzaXplLCAm
dHlwZSwgbmFtZSk7Ci0gICAgaWYgKHNpemUgPCAwKSB7Ci0gICAgICAgIGZhc3RGcmVlKG5hbWUp
OwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGluZm8ubmFtZSA9IFN0cmluZyhu
YW1lLCBsZW5ndGgpOwotICAgIGluZm8udHlwZSA9IHR5cGU7Ci0gICAgaW5mby5zaXplID0gc2l6
ZTsKLSAgICBmYXN0RnJlZShuYW1lKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBtX2ltcGwtPnVu
aWZvcm0xaXYobG9jYXRpb24sIHNpemUsIHYpOwogfQogCi1pbnQgR3JhcGhpY3NDb250ZXh0M0Q6
OmdldEF0dHJpYkxvY2F0aW9uKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBu
YW1lKQotewotICAgIGlmICghcHJvZ3JhbSkKLSAgICAgICAgcmV0dXJuIC0xOwotCi0gICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgcmV0dXJuIGdsR2V0QXR0cmliTG9jYXRpb24oRVhUUkFD
VChwcm9ncmFtKSwgbmFtZS51dGY4KCkuZGF0YSgpKTsKLX0KK0RFTEVHQVRFX1RPX0lNUExfMyh1
bmlmb3JtMmYsIGxvbmcsIGZsb2F0LCBmbG9hdCkKIAotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
Z2V0Qm9vbGVhbnYodW5zaWduZWQgbG9uZyBwbmFtZSwgdW5zaWduZWQgY2hhciogdmFsdWUpCit2
b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OnVuaWZvcm0yZnYobG9uZyBsb2NhdGlvbiwg
ZmxvYXQqIHYsIGludCBzaXplKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGds
R2V0Qm9vbGVhbnYocG5hbWUsIHZhbHVlKTsKKyAgICBtX2ltcGwtPnVuaWZvcm0yZnYobG9jYXRp
b24sIHNpemUsIHYpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRCdWZmZXJQYXJh
bWV0ZXJpdih1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBwbmFtZSwgaW50KiB2
YWx1ZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbEdldEJ1ZmZlclBhcmFt
ZXRlcml2KHRhcmdldCwgcG5hbWUsIHZhbHVlKTsKLX0KK0RFTEVHQVRFX1RPX0lNUExfMyh1bmlm
b3JtMmksIGxvbmcsIGludCwgaW50KQogCi1HcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBH
cmFwaGljc0NvbnRleHQzRDo6Z2V0Q29udGV4dEF0dHJpYnV0ZXMoKQordm9pZCBHcmFwaGljc0Nv
bnRleHQzREludGVybmFsOjp1bmlmb3JtMml2KGxvbmcgbG9jYXRpb24sIGludCogdiwgaW50IHNp
emUpCiB7Ci0gICAgcmV0dXJuIG1faW50ZXJuYWwtPmdldENvbnRleHRBdHRyaWJ1dGVzKCk7Cisg
ICAgbV9pbXBsLT51bmlmb3JtMml2KGxvY2F0aW9uLCBzaXplLCB2KTsKIH0KIAotdW5zaWduZWQg
bG9uZyBHcmFwaGljc0NvbnRleHQzRDo6Z2V0RXJyb3IoKQotewotICAgIHJldHVybiBtX2ludGVy
bmFsLT5nZXRFcnJvcigpOwotfQorREVMRUdBVEVfVE9fSU1QTF80KHVuaWZvcm0zZiwgbG9uZywg
ZmxvYXQsIGZsb2F0LCBmbG9hdCkKIAotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0RmxvYXR2
KHVuc2lnbmVkIGxvbmcgcG5hbWUsIGZsb2F0KiB2YWx1ZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
M0RJbnRlcm5hbDo6dW5pZm9ybTNmdihsb25nIGxvY2F0aW9uLCBmbG9hdCogdiwgaW50IHNpemUp
CiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2xHZXRGbG9hdHYocG5hbWUsIHZh
bHVlKTsKKyAgICBtX2ltcGwtPnVuaWZvcm0zZnYobG9jYXRpb24sIHNpemUsIHYpOwogfQogCi12
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJp
dih1bnNpZ25lZCBsb25nIHRhcmdldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgYXR0YWNobWVudCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHVuc2lnbmVkIGxvbmcgcG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQqIHZhbHVlKQotewotICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOwotICAgIGdsR2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXZFWFQo
dGFyZ2V0LCBhdHRhY2htZW50LCBwbmFtZSwgdmFsdWUpOwotfQorREVMRUdBVEVfVE9fSU1QTF80
KHVuaWZvcm0zaSwgbG9uZywgaW50LCBpbnQsIGludCkKIAotdm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6Z2V0SW50ZWdlcnYodW5zaWduZWQgbG9uZyBwbmFtZSwgaW50KiB2YWx1ZSkKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6dW5pZm9ybTNpdihsb25nIGxvY2F0aW9uLCBpbnQqIHYs
IGludCBzaXplKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsR2V0SW50ZWdl
cnYocG5hbWUsIHZhbHVlKTsKKyAgICBtX2ltcGwtPnVuaWZvcm0zaXYobG9jYXRpb24sIHNpemUs
IHYpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRQcm9ncmFtaXYoV2ViR0xQcm9n
cmFtKiBwcm9ncmFtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2ln
bmVkIGxvbmcgcG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
KiB2YWx1ZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbEdldFByb2dyYW1p
dihFWFRSQUNUKHByb2dyYW0pLCBwbmFtZSwgdmFsdWUpOwotfQorREVMRUdBVEVfVE9fSU1QTF81
KHVuaWZvcm00ZiwgbG9uZywgZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQpCiAKLVN0cmluZyBH
cmFwaGljc0NvbnRleHQzRDo6Z2V0UHJvZ3JhbUluZm9Mb2coV2ViR0xQcm9ncmFtKiBwcm9ncmFt
KQordm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjp1bmlmb3JtNGZ2KGxvbmcgbG9jYXRp
b24sIGZsb2F0KiB2LCBpbnQgc2l6ZSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAg
ICBHTHVpbnQgcHJvZ3JhbUlEID0gRVhUUkFDVChwcm9ncmFtKTsKLSAgICBHTGludCBsb2dMZW5n
dGg7Ci0gICAgZ2xHZXRQcm9ncmFtaXYocHJvZ3JhbUlELCBHTF9JTkZPX0xPR19MRU5HVEgsICZs
b2dMZW5ndGgpOwotICAgIGlmICghbG9nTGVuZ3RoKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7
Ci0gICAgR0xjaGFyKiBsb2cgPSAwOwotICAgIGlmICghdHJ5RmFzdE1hbGxvYyhsb2dMZW5ndGgg
KiBzaXplb2YoR0xjaGFyKSkuZ2V0VmFsdWUobG9nKSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygp
OwotICAgIEdMc2l6ZWkgcmV0dXJuZWRMb2dMZW5ndGg7Ci0gICAgZ2xHZXRQcm9ncmFtSW5mb0xv
Zyhwcm9ncmFtSUQsIGxvZ0xlbmd0aCwgJnJldHVybmVkTG9nTGVuZ3RoLCBsb2cpOwotICAgIEFT
U0VSVChsb2dMZW5ndGggPT0gcmV0dXJuZWRMb2dMZW5ndGggKyAxKTsKLSAgICBTdHJpbmcgcmVz
ID0gU3RyaW5nKGxvZywgcmV0dXJuZWRMb2dMZW5ndGgpOwotICAgIGZhc3RGcmVlKGxvZyk7Ci0g
ICAgcmV0dXJuIHJlczsKKyAgICBtX2ltcGwtPnVuaWZvcm00ZnYobG9jYXRpb24sIHNpemUsIHYp
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJp
dih1bnNpZ25lZCBsb25nIHRhcmdldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgcG5hbWUsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQqIHZhbHVlKQotewotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsR2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXZFWFQo
dGFyZ2V0LCBwbmFtZSwgdmFsdWUpOwotfQorREVMRUdBVEVfVE9fSU1QTF81KHVuaWZvcm00aSwg
bG9uZywgaW50LCBpbnQsIGludCwgaW50KQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRT
aGFkZXJpdihXZWJHTFNoYWRlciogc2hhZGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdW5zaWduZWQgbG9uZyBwbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCogdmFsdWUpCit2b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OnVu
aWZvcm00aXYobG9uZyBsb2NhdGlvbiwgaW50KiB2LCBpbnQgc2l6ZSkKIHsKLSAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKLSAgICBnbEdldFNoYWRlcml2KEVYVFJBQ1Qoc2hhZGVyKSwgcG5hbWUs
IHZhbHVlKTsKKyAgICBtX2ltcGwtPnVuaWZvcm00aXYobG9jYXRpb24sIHNpemUsIHYpOwogfQog
Ci1TdHJpbmcgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFNoYWRlckluZm9Mb2coV2ViR0xTaGFkZXIq
IHNoYWRlcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6dW5pZm9ybU1hdHJpeDJm
dihsb25nIGxvY2F0aW9uLCBib29sIHRyYW5zcG9zZSwgZmxvYXQqIHZhbHVlLCBpbnQgc2l6ZSkK
IHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBHTHVpbnQgc2hhZGVySUQgPSBFWFRS
QUNUKHNoYWRlcik7Ci0gICAgR0xpbnQgbG9nTGVuZ3RoOwotICAgIGdsR2V0U2hhZGVyaXYoc2hh
ZGVySUQsIEdMX0lORk9fTE9HX0xFTkdUSCwgJmxvZ0xlbmd0aCk7Ci0gICAgaWYgKCFsb2dMZW5n
dGgpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICBHTGNoYXIqIGxvZyA9IDA7Ci0gICAg
aWYgKCF0cnlGYXN0TWFsbG9jKGxvZ0xlbmd0aCAqIHNpemVvZihHTGNoYXIpKS5nZXRWYWx1ZShs
b2cpKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgR0xzaXplaSByZXR1cm5lZExvZ0xl
bmd0aDsKLSAgICBnbEdldFNoYWRlckluZm9Mb2coc2hhZGVySUQsIGxvZ0xlbmd0aCwgJnJldHVy
bmVkTG9nTGVuZ3RoLCBsb2cpOwotICAgIEFTU0VSVChsb2dMZW5ndGggPT0gcmV0dXJuZWRMb2dM
ZW5ndGggKyAxKTsKLSAgICBTdHJpbmcgcmVzID0gU3RyaW5nKGxvZywgcmV0dXJuZWRMb2dMZW5n
dGgpOwotICAgIGZhc3RGcmVlKGxvZyk7Ci0gICAgcmV0dXJuIHJlczsKKyAgICBtX2ltcGwtPnVu
aWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIHNpemUsIHRyYW5zcG9zZSwgdmFsdWUpOwogfQogCi1T
dHJpbmcgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFNoYWRlclNvdXJjZShXZWJHTFNoYWRlciogc2hh
ZGVyKQordm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjp1bmlmb3JtTWF0cml4M2Z2KGxv
bmcgbG9jYXRpb24sIGJvb2wgdHJhbnNwb3NlLCBmbG9hdCogdmFsdWUsIGludCBzaXplKQogewot
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIEdMdWludCBzaGFkZXJJRCA9IEVYVFJBQ1Qo
c2hhZGVyKTsKLSAgICBHTGludCBsb2dMZW5ndGg7Ci0gICAgZ2xHZXRTaGFkZXJpdihzaGFkZXJJ
RCwgR0xfU0hBREVSX1NPVVJDRV9MRU5HVEgsICZsb2dMZW5ndGgpOwotICAgIGlmICghbG9nTGVu
Z3RoKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgR0xjaGFyKiBsb2cgPSAwOwotICAg
IGlmICghdHJ5RmFzdE1hbGxvYyhsb2dMZW5ndGggKiBzaXplb2YoR0xjaGFyKSkuZ2V0VmFsdWUo
bG9nKSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIEdMc2l6ZWkgcmV0dXJuZWRMb2dM
ZW5ndGg7Ci0gICAgZ2xHZXRTaGFkZXJTb3VyY2Uoc2hhZGVySUQsIGxvZ0xlbmd0aCwgJnJldHVy
bmVkTG9nTGVuZ3RoLCBsb2cpOwotICAgIEFTU0VSVChsb2dMZW5ndGggPT0gcmV0dXJuZWRMb2dM
ZW5ndGggKyAxKTsKLSAgICBTdHJpbmcgcmVzID0gU3RyaW5nKGxvZywgcmV0dXJuZWRMb2dMZW5n
dGgpOwotICAgIGZhc3RGcmVlKGxvZyk7Ci0gICAgcmV0dXJuIHJlczsKKyAgICBtX2ltcGwtPnVu
aWZvcm1NYXRyaXgzZnYobG9jYXRpb24sIHNpemUsIHRyYW5zcG9zZSwgdmFsdWUpOwogfQogCi1T
dHJpbmcgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFN0cmluZyh1bnNpZ25lZCBsb25nIG5hbWUpCit2
b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OnVuaWZvcm1NYXRyaXg0ZnYobG9uZyBsb2Nh
dGlvbiwgYm9vbCB0cmFuc3Bvc2UsIGZsb2F0KiB2YWx1ZSwgaW50IHNpemUpCiB7Ci0gICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgcmV0dXJuIFN0cmluZyhyZWludGVycHJldF9jYXN0PGNv
bnN0IGNoYXIqPihnbEdldFN0cmluZyhuYW1lKSkpOworICAgIG1faW1wbC0+dW5pZm9ybU1hdHJp
eDRmdihsb2NhdGlvbiwgc2l6ZSwgdHJhbnNwb3NlLCB2YWx1ZSk7CiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OmdldFRleFBhcmFtZXRlcmZ2KHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNp
Z25lZCBsb25nIHBuYW1lLCBmbG9hdCogdmFsdWUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7Ci0gICAgZ2xHZXRUZXhQYXJhbWV0ZXJmdih0YXJnZXQsIHBuYW1lLCB2YWx1ZSk7Ci19CitE
RUxFR0FURV9UT19JTVBMXzFfWCh1c2VQcm9ncmFtLCBXZWJHTFByb2dyYW0qKQorREVMRUdBVEVf
VE9fSU1QTF8xX1godmFsaWRhdGVQcm9ncmFtLCBXZWJHTFByb2dyYW0qKQogCi12b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpnZXRUZXhQYXJhbWV0ZXJpdih1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5z
aWduZWQgbG9uZyBwbmFtZSwgaW50KiB2YWx1ZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKLSAgICBnbEdldFRleFBhcmFtZXRlcml2KHRhcmdldCwgcG5hbWUsIHZhbHVlKTsKLX0KK0RF
TEVHQVRFX1RPX0lNUExfMih2ZXJ0ZXhBdHRyaWIxZiwgdW5zaWduZWQgbG9uZywgZmxvYXQpCitE
RUxFR0FURV9UT19JTVBMXzIodmVydGV4QXR0cmliMWZ2LCB1bnNpZ25lZCBsb25nLCBmbG9hdCop
CitERUxFR0FURV9UT19JTVBMXzModmVydGV4QXR0cmliMmYsIHVuc2lnbmVkIGxvbmcsIGZsb2F0
LCBmbG9hdCkKK0RFTEVHQVRFX1RPX0lNUExfMih2ZXJ0ZXhBdHRyaWIyZnYsIHVuc2lnbmVkIGxv
bmcsIGZsb2F0KikKK0RFTEVHQVRFX1RPX0lNUExfNCh2ZXJ0ZXhBdHRyaWIzZiwgdW5zaWduZWQg
bG9uZywgZmxvYXQsIGZsb2F0LCBmbG9hdCkKK0RFTEVHQVRFX1RPX0lNUExfMih2ZXJ0ZXhBdHRy
aWIzZnYsIHVuc2lnbmVkIGxvbmcsIGZsb2F0KikKK0RFTEVHQVRFX1RPX0lNUExfNSh2ZXJ0ZXhB
dHRyaWI0ZiwgdW5zaWduZWQgbG9uZywgZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQpCitERUxF
R0FURV9UT19JTVBMXzIodmVydGV4QXR0cmliNGZ2LCB1bnNpZ25lZCBsb25nLCBmbG9hdCopCitE
RUxFR0FURV9UT19JTVBMXzYodmVydGV4QXR0cmliUG9pbnRlciwgdW5zaWduZWQgbG9uZywgaW50
LCBpbnQsIGJvb2wsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpCiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OmdldFVuaWZvcm1mdihXZWJHTFByb2dyYW0qIHByb2dyYW0sIGxvbmcgbG9j
YXRpb24sIGZsb2F0KiB2YWx1ZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBn
bEdldFVuaWZvcm1mdihFWFRSQUNUKHByb2dyYW0pLCBsb2NhdGlvbiwgdmFsdWUpOwotfQorREVM
RUdBVEVfVE9fSU1QTF80KHZpZXdwb3J0LCBsb25nLCBsb25nLCB1bnNpZ25lZCBsb25nLCB1bnNp
Z25lZCBsb25nKQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRVbmlmb3JtaXYoV2ViR0xQ
cm9ncmFtKiBwcm9ncmFtLCBsb25nIGxvY2F0aW9uLCBpbnQqIHZhbHVlKQotewotICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOwotICAgIGdsR2V0VW5pZm9ybWl2KEVYVFJBQ1QocHJvZ3JhbSksIGxv
Y2F0aW9uLCB2YWx1ZSk7Ci19CitERUxFR0FURV9UT19JTVBMX1IoY3JlYXRlQnVmZmVyLCB1bnNp
Z25lZCkKK0RFTEVHQVRFX1RPX0lNUExfUihjcmVhdGVGcmFtZWJ1ZmZlciwgdW5zaWduZWQpCitE
RUxFR0FURV9UT19JTVBMX1IoY3JlYXRlUHJvZ3JhbSwgdW5zaWduZWQpCitERUxFR0FURV9UT19J
TVBMX1IoY3JlYXRlUmVuZGVyYnVmZmVyLCB1bnNpZ25lZCkKK0RFTEVHQVRFX1RPX0lNUExfMVIo
Y3JlYXRlU2hhZGVyLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCkKK0RFTEVHQVRFX1RPX0lNUExf
UihjcmVhdGVUZXh0dXJlLCB1bnNpZ25lZCkKIAotbG9uZyBHcmFwaGljc0NvbnRleHQzRDo6Z2V0
VW5pZm9ybUxvY2F0aW9uKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1l
KQotewotICAgIGlmICghcHJvZ3JhbSkKLSAgICAgICAgcmV0dXJuIC0xOworREVMRUdBVEVfVE9f
SU1QTF8xKGRlbGV0ZUJ1ZmZlciwgdW5zaWduZWQpCitERUxFR0FURV9UT19JTVBMXzEoZGVsZXRl
RnJhbWVidWZmZXIsIHVuc2lnbmVkKQorREVMRUdBVEVfVE9fSU1QTF8xKGRlbGV0ZVByb2dyYW0s
IHVuc2lnbmVkKQorREVMRUdBVEVfVE9fSU1QTF8xKGRlbGV0ZVJlbmRlcmJ1ZmZlciwgdW5zaWdu
ZWQpCitERUxFR0FURV9UT19JTVBMXzEoZGVsZXRlU2hhZGVyLCB1bnNpZ25lZCkKK0RFTEVHQVRF
X1RPX0lNUExfMShkZWxldGVUZXh0dXJlLCB1bnNpZ25lZCkKIAotICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOwotICAgIHJldHVybiBnbEdldFVuaWZvcm1Mb2NhdGlvbihFWFRSQUNUKHByb2dyYW0p
LCBuYW1lLnV0ZjgoKS5kYXRhKCkpOwotfQorREVMRUdBVEVfVE9fSU1QTF8xKHN5bnRoZXNpemVH
TEVycm9yLCB1bnNpZ25lZCBsb25nKQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRWZXJ0
ZXhBdHRyaWJmdih1bnNpZ25lZCBsb25nIGluZGV4LAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBwbmFtZSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0KiB2YWx1ZSkKLXsKLSAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKLSAgICBnbEdldFZlcnRleEF0dHJpYmZ2KGluZGV4LCBwbmFtZSwgdmFsdWUp
OwotfQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBHcmFwaGljc0NvbnRleHQzRAorLy8KIAotdm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6Z2V0VmVydGV4QXR0cmliaXYodW5zaWduZWQgbG9uZyBpbmRleCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcg
cG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQqIHZh
bHVlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsR2V0VmVydGV4QXR0cmli
aXYoaW5kZXgsIHBuYW1lLCB2YWx1ZSk7Ci19CisvLyBNYWNyb3MgdG8gYXNzaXN0IGluIGRlbGVn
YXRpbmcgZnJvbSBHcmFwaGljc0NvbnRleHQzRCB0bworLy8gR3JhcGhpY3NDb250ZXh0M0RJbnRl
cm5hbC4KIAotbG9uZyBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VmVydGV4QXR0cmliT2Zmc2V0KHVu
c2lnbmVkIGxvbmcgaW5kZXgsIHVuc2lnbmVkIGxvbmcgcG5hbWUpCi17Ci0gICAgLy8gRklYTUU6
IGltcGxlbWVudC4KLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiAwOworI2RlZmlu
ZSBERUxFR0FURV9UT19JTlRFUk5BTChuYW1lKSBcCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpu
YW1lKCkgXAoreyBcCisgICAgbV9pbnRlcm5hbC0+bmFtZSgpOyBcCiB9CiAKLUdMX1NBTUVfTUVU
SE9EXzIoSGludCwgaGludCwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyk7Ci0KLWJvb2wg
R3JhcGhpY3NDb250ZXh0M0Q6OmlzQnVmZmVyKFdlYkdMQnVmZmVyKiBidWZmZXIpCi17Ci0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgcmV0dXJuIGdsSXNCdWZmZXIoRVhUUkFDVChidWZm
ZXIpKTsKKyNkZWZpbmUgREVMRUdBVEVfVE9fSU5URVJOQUxfUihuYW1lLCBydCkgICAgICAgICAg
IFwKK3J0IEdyYXBoaWNzQ29udGV4dDNEOjpuYW1lKCkgXAoreyBcCisgICAgcmV0dXJuIG1faW50
ZXJuYWwtPm5hbWUoKTsgXAogfQogCi1ib29sIEdyYXBoaWNzQ29udGV4dDNEOjppc0VuYWJsZWQo
dW5zaWduZWQgbG9uZyBjYXApCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgcmV0
dXJuIGdsSXNFbmFibGVkKGNhcCk7CisjZGVmaW5lIERFTEVHQVRFX1RPX0lOVEVSTkFMXzEobmFt
ZSwgdDEpIFwKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6Om5hbWUodDEgYTEpIFwKK3sgXAorICAg
IG1faW50ZXJuYWwtPm5hbWUoYTEpOyBcCiB9CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6Omlz
RnJhbWVidWZmZXIoV2ViR0xGcmFtZWJ1ZmZlciogZnJhbWVidWZmZXIpCi17Ci0gICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7Ci0gICAgcmV0dXJuIGdsSXNGcmFtZWJ1ZmZlckVYVChFWFRSQUNUKGZy
YW1lYnVmZmVyKSk7CisjZGVmaW5lIERFTEVHQVRFX1RPX0lOVEVSTkFMXzFSKG5hbWUsIHQxLCBy
dCkgICAgXAorcnQgR3JhcGhpY3NDb250ZXh0M0Q6Om5hbWUodDEgYTEpIFwKK3sgXAorICAgIHJl
dHVybiBtX2ludGVybmFsLT5uYW1lKGExKTsgXAogfQogCi1ib29sIEdyYXBoaWNzQ29udGV4dDNE
Ojppc1Byb2dyYW0oV2ViR0xQcm9ncmFtKiBwcm9ncmFtKQotewotICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOwotICAgIHJldHVybiBnbElzUHJvZ3JhbShFWFRSQUNUKHByb2dyYW0pKTsKKyNkZWZp
bmUgREVMRUdBVEVfVE9fSU5URVJOQUxfMihuYW1lLCB0MSwgdDIpIFwKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6Om5hbWUodDEgYTEsIHQyIGEyKSBcCit7IFwKKyAgICBtX2ludGVybmFsLT5uYW1l
KGExLCBhMik7IFwKIH0KIAotYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6aXNSZW5kZXJidWZmZXIo
V2ViR0xSZW5kZXJidWZmZXIqIHJlbmRlcmJ1ZmZlcikKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKLSAgICByZXR1cm4gZ2xJc1JlbmRlcmJ1ZmZlckVYVChFWFRSQUNUKHJlbmRlcmJ1ZmZl
cikpOworI2RlZmluZSBERUxFR0FURV9UT19JTlRFUk5BTF8yUihuYW1lLCB0MSwgdDIsIHJ0KSAg
XAorcnQgR3JhcGhpY3NDb250ZXh0M0Q6Om5hbWUodDEgYTEsIHQyIGEyKSBcCit7IFwKKyAgICBy
ZXR1cm4gbV9pbnRlcm5hbC0+bmFtZShhMSwgYTIpOyBcCiB9CiAKLWJvb2wgR3JhcGhpY3NDb250
ZXh0M0Q6OmlzU2hhZGVyKFdlYkdMU2hhZGVyKiBzaGFkZXIpCi17Ci0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7Ci0gICAgcmV0dXJuIGdsSXNTaGFkZXIoRVhUUkFDVChzaGFkZXIpKTsKKyNkZWZp
bmUgREVMRUdBVEVfVE9fSU5URVJOQUxfMyhuYW1lLCB0MSwgdDIsIHQzKSAgIFwKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6Om5hbWUodDEgYTEsIHQyIGEyLCB0MyBhMykgICAgXAoreyBcCisgICAg
bV9pbnRlcm5hbC0+bmFtZShhMSwgYTIsIGEzKTsgICAgICAgICAgICAgICAgICBcCiB9CiAKLWJv
b2wgR3JhcGhpY3NDb250ZXh0M0Q6OmlzVGV4dHVyZShXZWJHTFRleHR1cmUqIHRleHR1cmUpCi17
Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgcmV0dXJuIGdsSXNUZXh0dXJlKEVYVFJB
Q1QodGV4dHVyZSkpOworI2RlZmluZSBERUxFR0FURV9UT19JTlRFUk5BTF8zUihuYW1lLCB0MSwg
dDIsIHQzLCBydCkgICBcCitydCBHcmFwaGljc0NvbnRleHQzRDo6bmFtZSh0MSBhMSwgdDIgYTIs
IHQzIGEzKSAgICBcCit7IFwKKyAgICByZXR1cm4gbV9pbnRlcm5hbC0+bmFtZShhMSwgYTIsIGEz
KTsgICAgICAgICAgICAgICAgICBcCiB9CiAKLUdMX1NBTUVfTUVUSE9EXzEoTGluZVdpZHRoLCBs
aW5lV2lkdGgsIGRvdWJsZSkKKyNkZWZpbmUgREVMRUdBVEVfVE9fSU5URVJOQUxfNChuYW1lLCB0
MSwgdDIsIHQzLCB0NCkgICAgXAordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6bmFtZSh0MSBhMSwg
dDIgYTIsIHQzIGEzLCB0NCBhNCkgIFwKK3sgXAorICAgIG1faW50ZXJuYWwtPm5hbWUoYTEsIGEy
LCBhMywgYTQpOyAgICAgICAgICAgICAgXAorfQogCi1HTF9TQU1FX01FVEhPRF8xX1goTGlua1By
b2dyYW0sIGxpbmtQcm9ncmFtLCBXZWJHTFByb2dyYW0qKQorI2RlZmluZSBERUxFR0FURV9UT19J
TlRFUk5BTF81KG5hbWUsIHQxLCB0MiwgdDMsIHQ0LCB0NSkgICAgICBcCit2b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpuYW1lKHQxIGExLCB0MiBhMiwgdDMgYTMsIHQ0IGE0LCB0NSBhNSkgICAgICAg
IFwKK3sgXAorICAgIG1faW50ZXJuYWwtPm5hbWUoYTEsIGEyLCBhMywgYTQsIGE1KTsgICBcCit9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnBpeGVsU3RvcmVpKHVuc2lnbmVkIGxvbmcgcG5h
bWUsIGxvbmcgcGFyYW0pCi17Ci0gICAgaWYgKHBuYW1lICE9IEdMX1BBQ0tfQUxJR05NRU5UICYm
IHBuYW1lICE9IEdMX1VOUEFDS19BTElHTk1FTlQpIHsKLSAgICAgICAgLy8gRklYTUU6IENyZWF0
ZSBhIGZha2UgR0wgZXJyb3IgYW5kIHRocm93IGFuIGV4Y2VwdGlvbi4KLSAgICAgICAgcmV0dXJu
OwotICAgIH0KKyNkZWZpbmUgREVMRUdBVEVfVE9fSU5URVJOQUxfNihuYW1lLCB0MSwgdDIsIHQz
LCB0NCwgdDUsIHQ2KSAgXAordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6bmFtZSh0MSBhMSwgdDIg
YTIsIHQzIGEzLCB0NCBhNCwgdDUgYTUsIHQ2IGE2KSBcCit7IFwKKyAgICBtX2ludGVybmFsLT5u
YW1lKGExLCBhMiwgYTMsIGE0LCBhNSwgYTYpOyAgIFwKK30KIAotICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOwotICAgIGdsUGl4ZWxTdG9yZWkocG5hbWUsIHBhcmFtKTsKKyNkZWZpbmUgREVMRUdB
VEVfVE9fSU5URVJOQUxfNlIobmFtZSwgdDEsIHQyLCB0MywgdDQsIHQ1LCB0NiwgcnQpICBcCity
dCBHcmFwaGljc0NvbnRleHQzRDo6bmFtZSh0MSBhMSwgdDIgYTIsIHQzIGEzLCB0NCBhNCwgdDUg
YTUsIHQ2IGE2KSBcCit7IFwKKyAgICByZXR1cm4gbV9pbnRlcm5hbC0+bmFtZShhMSwgYTIsIGEz
LCBhNCwgYTUsIGE2KTsgICAgICAgXAogfQogCi1HTF9TQU1FX01FVEhPRF8yKFBvbHlnb25PZmZz
ZXQsIHBvbHlnb25PZmZzZXQsIGRvdWJsZSwgZG91YmxlKQorI2RlZmluZSBERUxFR0FURV9UT19J
TlRFUk5BTF83UihuYW1lLCB0MSwgdDIsIHQzLCB0NCwgdDUsIHQ2LCB0NywgcnQpIFwKK3J0IEdy
YXBoaWNzQ29udGV4dDNEOjpuYW1lKHQxIGExLCB0MiBhMiwgdDMgYTMsIHQ0IGE0LCB0NSBhNSwg
dDYgYTYsIHQ3IGE3KSBcCit7IFwKKyAgICByZXR1cm4gbV9pbnRlcm5hbC0+bmFtZShhMSwgYTIs
IGEzLCBhNCwgYTUsIGE2LCBhNyk7ICAgXAorfQogCi1QYXNzUmVmUHRyPFdlYkdMQXJyYXk+IEdy
YXBoaWNzQ29udGV4dDNEOjpyZWFkUGl4ZWxzKGxvbmcgeCwgbG9uZyB5LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyB3
aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGZvcm1hdCwgdW5zaWduZWQg
bG9uZyB0eXBlKSB7Ci0gICAgLy8gRklYTUU6IHN1cHBvcnQgbW9yZSBwaXhlbCBmb3JtYXRzIGFu
ZCB0eXBlcy4KLSAgICBpZiAoISgoZm9ybWF0ID09IEdMX1JHQkEpICYmICh0eXBlID09IEdMX1VO
U0lHTkVEX0JZVEUpKSkKLSAgICAgICAgcmV0dXJuIDA7CisjZGVmaW5lIERFTEVHQVRFX1RPX0lO
VEVSTkFMXzgobmFtZSwgdDEsIHQyLCB0MywgdDQsIHQ1LCB0NiwgdDcsIHQ4KSAgICAgICBcCit2
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpuYW1lKHQxIGExLCB0MiBhMiwgdDMgYTMsIHQ0IGE0LCB0
NSBhNSwgdDYgYTYsIHQ3IGE3LCB0OCBhOCkgXAoreyBcCisgICAgbV9pbnRlcm5hbC0+bmFtZShh
MSwgYTIsIGEzLCBhNCwgYTUsIGE2LCBhNywgYTgpOyAgICAgIFwKK30KIAotICAgIC8vIEZJWE1F
OiB0YWtlIGludG8gYWNjb3VudCBwYWNrIGFsaWdubWVudC4KLSAgICBSZWZQdHI8V2ViR0xVbnNp
Z25lZEJ5dGVBcnJheT4gYXJyYXkgPSBXZWJHTFVuc2lnbmVkQnl0ZUFycmF5OjpjcmVhdGUod2lk
dGggKiBoZWlnaHQgKiA0KTsKLSAgICBnbFJlYWRQaXhlbHMoeCwgeSwgd2lkdGgsIGhlaWdodCwg
Zm9ybWF0LCB0eXBlLCBhcnJheS0+YmFzZUFkZHJlc3MoKSk7Ci0gICAgcmV0dXJuIGFycmF5Owor
I2RlZmluZSBERUxFR0FURV9UT19JTlRFUk5BTF85UihuYW1lLCB0MSwgdDIsIHQzLCB0NCwgdDUs
IHQ2LCB0NywgdDgsIHQ5LCBydCkgXAorcnQgR3JhcGhpY3NDb250ZXh0M0Q6Om5hbWUodDEgYTEs
IHQyIGEyLCB0MyBhMywgdDQgYTQsIHQ1IGE1LCB0NiBhNiwgdDcgYTcsIHQ4IGE4LCB0OSBhOSkg
XAoreyBcCisgICAgcmV0dXJuIG1faW50ZXJuYWwtPm5hbWUoYTEsIGEyLCBhMywgYTQsIGE1LCBh
NiwgYTcsIGE4LCBhOSk7ICAgXAogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZWxlYXNl
U2hhZGVyQ29tcGlsZXIoKQorR3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKEdy
YXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJzKQogewogfQogCi1HTF9TQU1FX01FVEhP
RF80KFJlbmRlcmJ1ZmZlclN0b3JhZ2VFWFQsIHJlbmRlcmJ1ZmZlclN0b3JhZ2UsIHVuc2lnbmVk
IGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpCi0KLUdM
X1NBTUVfTUVUSE9EXzIoU2FtcGxlQ292ZXJhZ2UsIHNhbXBsZUNvdmVyYWdlLCBkb3VibGUsIGJv
b2wpCi0KLUdMX1NBTUVfTUVUSE9EXzQoU2Npc3Nvciwgc2Npc3NvciwgbG9uZywgbG9uZywgdW5z
aWduZWQgbG9uZywgdW5zaWduZWQgbG9uZykKLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c2hh
ZGVyU291cmNlKFdlYkdMU2hhZGVyKiBzaGFkZXIsIGNvbnN0IFN0cmluZyYgc291cmNlKQorR3Jh
cGhpY3NDb250ZXh0M0Q6On5HcmFwaGljc0NvbnRleHQzRCgpCiB7Ci0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7Ci0gICAgQ1N0cmluZyBzdHIgPSBzb3VyY2UudXRmOCgpOwotICAgIGNvbnN0IGNo
YXIqIGRhdGEgPSBzdHIuZGF0YSgpOwotICAgIEdMaW50IGxlbmd0aCA9IHN0ci5sZW5ndGgoKTsK
LSAgICBnbFNoYWRlclNvdXJjZShFWFRSQUNUKHNoYWRlciksIDEsICZkYXRhLCAmbGVuZ3RoKTsK
IH0KIAotR0xfU0FNRV9NRVRIT0RfMyhTdGVuY2lsRnVuYywgc3RlbmNpbEZ1bmMsIHVuc2lnbmVk
IGxvbmcsIGxvbmcsIHVuc2lnbmVkIGxvbmcpCi0KLUdMX1NBTUVfTUVUSE9EXzQoU3RlbmNpbEZ1
bmNTZXBhcmF0ZSwgc3RlbmNpbEZ1bmNTZXBhcmF0ZSwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQg
bG9uZywgbG9uZywgdW5zaWduZWQgbG9uZykKLQotR0xfU0FNRV9NRVRIT0RfMShTdGVuY2lsTWFz
aywgc3RlbmNpbE1hc2ssIHVuc2lnbmVkIGxvbmcpCi0KLUdMX1NBTUVfTUVUSE9EXzIoU3RlbmNp
bE1hc2tTZXBhcmF0ZSwgc3RlbmNpbE1hc2tTZXBhcmF0ZSwgdW5zaWduZWQgbG9uZywgdW5zaWdu
ZWQgbG9uZykKLQotR0xfU0FNRV9NRVRIT0RfMyhTdGVuY2lsT3AsIHN0ZW5jaWxPcCwgdW5zaWdu
ZWQgbG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZykKLQotR0xfU0FNRV9NRVRIT0Rf
NChTdGVuY2lsT3BTZXBhcmF0ZSwgc3RlbmNpbE9wU2VwYXJhdGUsIHVuc2lnbmVkIGxvbmcsIHVu
c2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpCitQYXNzT3duUHRyPEdy
YXBoaWNzQ29udGV4dDNEPiBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlKEdyYXBoaWNzQ29udGV4
dDNEOjpBdHRyaWJ1dGVzIGF0dHJzKQoreworICAgIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwq
IGludGVybmFsID0gbmV3IEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwoKTsKKyAgICBpZiAoIWlu
dGVybmFsLT5pbml0aWFsaXplKGF0dHJzKSkgeworICAgICAgICBkZWxldGUgaW50ZXJuYWw7Cisg
ICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBQYXNzT3duUHRyPEdyYXBoaWNzQ29udGV4dDNE
PiByZXN1bHQgPSBuZXcgR3JhcGhpY3NDb250ZXh0M0QoYXR0cnMpOworICAgIHJlc3VsdC0+bV9p
bnRlcm5hbC5zZXQoaW50ZXJuYWwpOworICAgIHJldHVybiByZXN1bHQ7Cit9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OnN5bnRoZXNpemVHTEVycm9yKHVuc2lnbmVkIGxvbmcgZXJyb3IpCitQ
bGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEIEdyYXBoaWNzQ29udGV4dDNEOjpwbGF0Zm9ybUdyYXBo
aWNzQ29udGV4dDNEKCkgY29uc3QKIHsKLSAgICBtX2ludGVybmFsLT5zeW50aGVzaXplR0xFcnJv
cihlcnJvcik7CisgICAgcmV0dXJuIG1faW50ZXJuYWwtPnBsYXRmb3JtR3JhcGhpY3NDb250ZXh0
M0QoKTsKIH0KIAotaW50IEdyYXBoaWNzQ29udGV4dDNEOjp0ZXhJbWFnZTJEKHVuc2lnbmVkIHRh
cmdldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsZXZlbCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnRlcm5hbGZvcm1h
dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCB3aWR0aCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBoZWlnaHQsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgYm9yZGVyLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGZvcm1hdCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB1bnNpZ25lZCB0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHZvaWQqIHBpeGVscykKK1BsYXRmb3JtM0RPYmplY3QgR3JhcGhpY3NDb250ZXh0
M0Q6OnBsYXRmb3JtVGV4dHVyZSgpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6IG11c3QgZG8gdmFs
aWRhdGlvbiBzaW1pbGFyIHRvIEpPR0wncyB0byBlbnN1cmUgdGhhdAotICAgIC8vIHRoZSBpbmNv
bWluZyBhcnJheSBpcyBvZiB0aGUgYXBwcm9wcmlhdGUgbGVuZ3RoLgotICAgIGdsVGV4SW1hZ2Uy
RCh0YXJnZXQsCi0gICAgICAgICAgICAgICAgIGxldmVsLAotICAgICAgICAgICAgICAgICBpbnRl
cm5hbGZvcm1hdCwKLSAgICAgICAgICAgICAgICAgd2lkdGgsCi0gICAgICAgICAgICAgICAgIGhl
aWdodCwKLSAgICAgICAgICAgICAgICAgYm9yZGVyLAotICAgICAgICAgICAgICAgICBmb3JtYXQs
Ci0gICAgICAgICAgICAgICAgIHR5cGUsCi0gICAgICAgICAgICAgICAgIHBpeGVscyk7Ci0gICAg
cmV0dXJuIDA7CisgICAgcmV0dXJuIG1faW50ZXJuYWwtPnBsYXRmb3JtVGV4dHVyZSgpOwogfQog
CitERUxFR0FURV9UT19JTlRFUk5BTChtYWtlQ29udGV4dEN1cnJlbnQpCitERUxFR0FURV9UT19J
TlRFUk5BTF8xUihzaXplSW5CeXRlcywgaW50LCBpbnQpCitERUxFR0FURV9UT19JTlRFUk5BTF8y
KHJlc2hhcGUsIGludCwgaW50KQorCitERUxFR0FURV9UT19JTlRFUk5BTF8xKGFjdGl2ZVRleHR1
cmUsIHVuc2lnbmVkIGxvbmcpCitERUxFR0FURV9UT19JTlRFUk5BTF8yKGF0dGFjaFNoYWRlciwg
V2ViR0xQcm9ncmFtKiwgV2ViR0xTaGFkZXIqKQorREVMRUdBVEVfVE9fSU5URVJOQUxfMyhiaW5k
QXR0cmliTG9jYXRpb24sIFdlYkdMUHJvZ3JhbSosIHVuc2lnbmVkIGxvbmcsIGNvbnN0IFN0cmlu
ZyYpCisKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzIoYmluZEJ1ZmZlciwgdW5zaWduZWQgbG9uZywg
V2ViR0xCdWZmZXIqKQorREVMRUdBVEVfVE9fSU5URVJOQUxfMihiaW5kRnJhbWVidWZmZXIsIHVu
c2lnbmVkIGxvbmcsIFdlYkdMRnJhbWVidWZmZXIqKQorREVMRUdBVEVfVE9fSU5URVJOQUxfMihi
aW5kUmVuZGVyYnVmZmVyLCB1bnNpZ25lZCBsb25nLCBXZWJHTFJlbmRlcmJ1ZmZlciopCitERUxF
R0FURV9UT19JTlRFUk5BTF8yKGJpbmRUZXh0dXJlLCB1bnNpZ25lZCBsb25nLCBXZWJHTFRleHR1
cmUqKQorREVMRUdBVEVfVE9fSU5URVJOQUxfNChibGVuZENvbG9yLCBkb3VibGUsIGRvdWJsZSwg
ZG91YmxlLCBkb3VibGUpCitERUxFR0FURV9UT19JTlRFUk5BTF8xKGJsZW5kRXF1YXRpb24sIHVu
c2lnbmVkIGxvbmcpCitERUxFR0FURV9UT19JTlRFUk5BTF8yKGJsZW5kRXF1YXRpb25TZXBhcmF0
ZSwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZykKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzIo
YmxlbmRGdW5jLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKQorREVMRUdBVEVfVE9fSU5U
RVJOQUxfNChibGVuZEZ1bmNTZXBhcmF0ZSwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywg
dW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZykKKworREVMRUdBVEVfVE9fSU5URVJOQUxfMyhi
dWZmZXJEYXRhLCB1bnNpZ25lZCBsb25nLCBpbnQsIHVuc2lnbmVkIGxvbmcpCitERUxFR0FURV9U
T19JTlRFUk5BTF8zKGJ1ZmZlckRhdGEsIHVuc2lnbmVkIGxvbmcsIFdlYkdMQXJyYXkqLCB1bnNp
Z25lZCBsb25nKQorREVMRUdBVEVfVE9fSU5URVJOQUxfMyhidWZmZXJTdWJEYXRhLCB1bnNpZ25l
ZCBsb25nLCBsb25nLCBXZWJHTEFycmF5KikKKworREVMRUdBVEVfVE9fSU5URVJOQUxfMVIoY2hl
Y2tGcmFtZWJ1ZmZlclN0YXR1cywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZykKK0RFTEVH
QVRFX1RPX0lOVEVSTkFMXzEoY2xlYXIsIHVuc2lnbmVkIGxvbmcpCitERUxFR0FURV9UT19JTlRF
Uk5BTF80KGNsZWFyQ29sb3IsIGRvdWJsZSwgZG91YmxlLCBkb3VibGUsIGRvdWJsZSkKK0RFTEVH
QVRFX1RPX0lOVEVSTkFMXzEoY2xlYXJEZXB0aCwgZG91YmxlKQorREVMRUdBVEVfVE9fSU5URVJO
QUxfMShjbGVhclN0ZW5jaWwsIGxvbmcpCitERUxFR0FURV9UT19JTlRFUk5BTF80KGNvbG9yTWFz
aywgYm9vbCwgYm9vbCwgYm9vbCwgYm9vbCkKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzEoY29tcGls
ZVNoYWRlciwgV2ViR0xTaGFkZXIqKQorCitERUxFR0FURV9UT19JTlRFUk5BTF84KGNvcHlUZXhJ
bWFnZTJELCB1bnNpZ25lZCBsb25nLCBsb25nLCB1bnNpZ25lZCBsb25nLCBsb25nLCBsb25nLCB1
bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCBsb25nKQorREVMRUdBVEVfVE9fSU5URVJOQUxf
OChjb3B5VGV4U3ViSW1hZ2UyRCwgdW5zaWduZWQgbG9uZywgbG9uZywgbG9uZywgbG9uZywgbG9u
ZywgbG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZykKK0RFTEVHQVRFX1RPX0lOVEVS
TkFMXzEoY3VsbEZhY2UsIHVuc2lnbmVkIGxvbmcpCitERUxFR0FURV9UT19JTlRFUk5BTF8xKGRl
cHRoRnVuYywgdW5zaWduZWQgbG9uZykKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzEoZGVwdGhNYXNr
LCBib29sKQorREVMRUdBVEVfVE9fSU5URVJOQUxfMihkZXB0aFJhbmdlLCBkb3VibGUsIGRvdWJs
ZSkKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzIoZGV0YWNoU2hhZGVyLCBXZWJHTFByb2dyYW0qLCBX
ZWJHTFNoYWRlciopCitERUxFR0FURV9UT19JTlRFUk5BTF8xKGRpc2FibGUsIHVuc2lnbmVkIGxv
bmcpCitERUxFR0FURV9UT19JTlRFUk5BTF8xKGRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheSwgdW5z
aWduZWQgbG9uZykKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzMoZHJhd0FycmF5cywgdW5zaWduZWQg
bG9uZywgbG9uZywgbG9uZykKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzQoZHJhd0VsZW1lbnRzLCB1
bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCBsb25nKQorCitERUxF
R0FURV9UT19JTlRFUk5BTF8xKGVuYWJsZSwgdW5zaWduZWQgbG9uZykKK0RFTEVHQVRFX1RPX0lO
VEVSTkFMXzEoZW5hYmxlVmVydGV4QXR0cmliQXJyYXksIHVuc2lnbmVkIGxvbmcpCitERUxFR0FU
RV9UT19JTlRFUk5BTChmaW5pc2gpCitERUxFR0FURV9UT19JTlRFUk5BTChmbHVzaCkKK0RFTEVH
QVRFX1RPX0lOVEVSTkFMXzQoZnJhbWVidWZmZXJSZW5kZXJidWZmZXIsIHVuc2lnbmVkIGxvbmcs
IHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIFdlYkdMUmVuZGVyYnVmZmVyKikKK0RFTEVH
QVRFX1RPX0lOVEVSTkFMXzUoZnJhbWVidWZmZXJUZXh0dXJlMkQsIHVuc2lnbmVkIGxvbmcsIHVu
c2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIFdlYkdMVGV4dHVyZSosIGxvbmcpCitERUxFR0FU
RV9UT19JTlRFUk5BTF8xKGZyb250RmFjZSwgdW5zaWduZWQgbG9uZykKK0RFTEVHQVRFX1RPX0lO
VEVSTkFMXzEoZ2VuZXJhdGVNaXBtYXAsIHVuc2lnbmVkIGxvbmcpCisKK0RFTEVHQVRFX1RPX0lO
VEVSTkFMXzNSKGdldEFjdGl2ZUF0dHJpYiwgV2ViR0xQcm9ncmFtKiwgdW5zaWduZWQgbG9uZywg
QWN0aXZlSW5mbyYsIGJvb2wpCitERUxFR0FURV9UT19JTlRFUk5BTF8zUihnZXRBY3RpdmVVbmlm
b3JtLCBXZWJHTFByb2dyYW0qLCB1bnNpZ25lZCBsb25nLCBBY3RpdmVJbmZvJiwgYm9vbCkKKwor
REVMRUdBVEVfVE9fSU5URVJOQUxfMlIoZ2V0QXR0cmliTG9jYXRpb24sIFdlYkdMUHJvZ3JhbSos
IGNvbnN0IFN0cmluZyYsIGludCkKKworREVMRUdBVEVfVE9fSU5URVJOQUxfMihnZXRCb29sZWFu
diwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgY2hhciopCisKK0RFTEVHQVRFX1RPX0lOVEVSTkFM
XzMoZ2V0QnVmZmVyUGFyYW1ldGVyaXYsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIGlu
dCopCisKK0RFTEVHQVRFX1RPX0lOVEVSTkFMX1IoZ2V0Q29udGV4dEF0dHJpYnV0ZXMsIEdyYXBo
aWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzKQorCitERUxFR0FURV9UT19JTlRFUk5BTF9SKGdldEVy
cm9yLCB1bnNpZ25lZCBsb25nKQorCitERUxFR0FURV9UT19JTlRFUk5BTF8yKGdldEZsb2F0diwg
dW5zaWduZWQgbG9uZywgZmxvYXQqKQorCitERUxFR0FURV9UT19JTlRFUk5BTF80KGdldEZyYW1l
YnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcml2LCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25n
LCB1bnNpZ25lZCBsb25nLCBpbnQqKQorCitERUxFR0FURV9UT19JTlRFUk5BTF8yKGdldEludGVn
ZXJ2LCB1bnNpZ25lZCBsb25nLCBpbnQqKQorCitERUxFR0FURV9UT19JTlRFUk5BTF8zKGdldFBy
b2dyYW1pdiwgV2ViR0xQcm9ncmFtKiwgdW5zaWduZWQgbG9uZywgaW50KikKKworREVMRUdBVEVf
VE9fSU5URVJOQUxfMVIoZ2V0UHJvZ3JhbUluZm9Mb2csIFdlYkdMUHJvZ3JhbSosIFN0cmluZykK
KworREVMRUdBVEVfVE9fSU5URVJOQUxfMyhnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdiwgdW5z
aWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgaW50KikKKworREVMRUdBVEVfVE9fSU5URVJOQUxf
MyhnZXRTaGFkZXJpdiwgV2ViR0xTaGFkZXIqLCB1bnNpZ25lZCBsb25nLCBpbnQqKQorCitERUxF
R0FURV9UT19JTlRFUk5BTF8xUihnZXRTaGFkZXJJbmZvTG9nLCBXZWJHTFNoYWRlciosIFN0cmlu
ZykKKworREVMRUdBVEVfVE9fSU5URVJOQUxfMVIoZ2V0U2hhZGVyU291cmNlLCBXZWJHTFNoYWRl
ciosIFN0cmluZykKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzFSKGdldFN0cmluZywgdW5zaWduZWQg
bG9uZywgU3RyaW5nKQorCitERUxFR0FURV9UT19JTlRFUk5BTF8zKGdldFRleFBhcmFtZXRlcmZ2
LCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCBmbG9hdCopCitERUxFR0FURV9UT19JTlRF
Uk5BTF8zKGdldFRleFBhcmFtZXRlcml2LCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCBp
bnQqKQorCitERUxFR0FURV9UT19JTlRFUk5BTF8zKGdldFVuaWZvcm1mdiwgV2ViR0xQcm9ncmFt
KiwgbG9uZywgZmxvYXQqKQorREVMRUdBVEVfVE9fSU5URVJOQUxfMyhnZXRVbmlmb3JtaXYsIFdl
YkdMUHJvZ3JhbSosIGxvbmcsIGludCopCisKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzJSKGdldFVu
aWZvcm1Mb2NhdGlvbiwgV2ViR0xQcm9ncmFtKiwgY29uc3QgU3RyaW5nJiwgbG9uZykKKworREVM
RUdBVEVfVE9fSU5URVJOQUxfMyhnZXRWZXJ0ZXhBdHRyaWJmdiwgdW5zaWduZWQgbG9uZywgdW5z
aWduZWQgbG9uZywgZmxvYXQqKQorREVMRUdBVEVfVE9fSU5URVJOQUxfMyhnZXRWZXJ0ZXhBdHRy
aWJpdiwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgaW50KikKKworREVMRUdBVEVfVE9f
SU5URVJOQUxfMlIoZ2V0VmVydGV4QXR0cmliT2Zmc2V0LCB1bnNpZ25lZCBsb25nLCB1bnNpZ25l
ZCBsb25nLCBsb25nKQorCitERUxFR0FURV9UT19JTlRFUk5BTF8yKGhpbnQsIHVuc2lnbmVkIGxv
bmcsIHVuc2lnbmVkIGxvbmcpCitERUxFR0FURV9UT19JTlRFUk5BTF8xUihpc0J1ZmZlciwgV2Vi
R0xCdWZmZXIqLCBib29sKQorREVMRUdBVEVfVE9fSU5URVJOQUxfMVIoaXNFbmFibGVkLCB1bnNp
Z25lZCBsb25nLCBib29sKQorREVMRUdBVEVfVE9fSU5URVJOQUxfMVIoaXNGcmFtZWJ1ZmZlciwg
V2ViR0xGcmFtZWJ1ZmZlciosIGJvb2wpCitERUxFR0FURV9UT19JTlRFUk5BTF8xUihpc1Byb2dy
YW0sIFdlYkdMUHJvZ3JhbSosIGJvb2wpCitERUxFR0FURV9UT19JTlRFUk5BTF8xUihpc1JlbmRl
cmJ1ZmZlciwgV2ViR0xSZW5kZXJidWZmZXIqLCBib29sKQorREVMRUdBVEVfVE9fSU5URVJOQUxf
MVIoaXNTaGFkZXIsIFdlYkdMU2hhZGVyKiwgYm9vbCkKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzFS
KGlzVGV4dHVyZSwgV2ViR0xUZXh0dXJlKiwgYm9vbCkKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzEo
bGluZVdpZHRoLCBkb3VibGUpCitERUxFR0FURV9UT19JTlRFUk5BTF8xKGxpbmtQcm9ncmFtLCBX
ZWJHTFByb2dyYW0qKQorREVMRUdBVEVfVE9fSU5URVJOQUxfMihwaXhlbFN0b3JlaSwgdW5zaWdu
ZWQgbG9uZywgbG9uZykKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzIocG9seWdvbk9mZnNldCwgZG91
YmxlLCBkb3VibGUpCisKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzZSKHJlYWRQaXhlbHMsIGxvbmcs
IGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2ln
bmVkIGxvbmcsIFBhc3NSZWZQdHI8V2ViR0xBcnJheT4pCisKK0RFTEVHQVRFX1RPX0lOVEVSTkFM
KHJlbGVhc2VTaGFkZXJDb21waWxlcikKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzQocmVuZGVyYnVm
ZmVyU3RvcmFnZSwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywg
dW5zaWduZWQgbG9uZykKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzIoc2FtcGxlQ292ZXJhZ2UsIGRv
dWJsZSwgYm9vbCkKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzQoc2Npc3NvciwgbG9uZywgbG9uZywg
dW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZykKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzIoc2hh
ZGVyU291cmNlLCBXZWJHTFNoYWRlciosIGNvbnN0IFN0cmluZyYpCitERUxFR0FURV9UT19JTlRF
Uk5BTF8zKHN0ZW5jaWxGdW5jLCB1bnNpZ25lZCBsb25nLCBsb25nLCB1bnNpZ25lZCBsb25nKQor
REVMRUdBVEVfVE9fSU5URVJOQUxfNChzdGVuY2lsRnVuY1NlcGFyYXRlLCB1bnNpZ25lZCBsb25n
LCB1bnNpZ25lZCBsb25nLCBsb25nLCB1bnNpZ25lZCBsb25nKQorREVMRUdBVEVfVE9fSU5URVJO
QUxfMShzdGVuY2lsTWFzaywgdW5zaWduZWQgbG9uZykKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzIo
c3RlbmNpbE1hc2tTZXBhcmF0ZSwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZykKK0RFTEVH
QVRFX1RPX0lOVEVSTkFMXzMoc3RlbmNpbE9wLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25n
LCB1bnNpZ25lZCBsb25nKQorREVMRUdBVEVfVE9fSU5URVJOQUxfNChzdGVuY2lsT3BTZXBhcmF0
ZSwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQg
bG9uZykKKworREVMRUdBVEVfVE9fSU5URVJOQUxfOVIodGV4SW1hZ2UyRCwgdW5zaWduZWQsIHVu
c2lnbmVkLCB1bnNpZ25lZCwgdW5zaWduZWQsIHVuc2lnbmVkLCB1bnNpZ25lZCwgdW5zaWduZWQs
IHVuc2lnbmVkLCB2b2lkKiwgaW50KQorCiBpbnQgR3JhcGhpY3NDb250ZXh0M0Q6OnRleEltYWdl
MkQodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBsZXZlbCwgSW1hZ2UqIGltYWdlLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZmxpcFksIGJvb2wgcHJlbXVsdGlwbHlB
bHBoYSkKIHsKQEAgLTE4ODAsMjkgKzEyMjIsMTUgQEAgaW50IEdyYXBoaWNzQ29udGV4dDNEOjp0
ZXhJbWFnZTJEKHVuc2lnbgogICAgIHVuc2lnbmVkIGludCBmb3JtYXQsIGludGVybmFsRm9ybWF0
OwogICAgIGlmICghZXh0cmFjdEltYWdlRGF0YShpbWFnZSwgZmxpcFksIHByZW11bHRpcGx5QWxw
aGEsIGltYWdlRGF0YSwgJmZvcm1hdCwgJmludGVybmFsRm9ybWF0KSkKICAgICAgICAgcmV0dXJu
IC0xOwotICAgIGdsVGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbEZvcm1hdCwKLSAg
ICAgICAgICAgICAgICAgaW1hZ2UtPndpZHRoKCksIGltYWdlLT5oZWlnaHQoKSwgMCwKLSAgICAg
ICAgICAgICAgICAgZm9ybWF0LCBHTF9VTlNJR05FRF9CWVRFLCBpbWFnZURhdGEuZGF0YSgpKTsK
LSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gbV9pbnRlcm5hbC0+dGV4SW1hZ2UyRCh0YXJnZXQs
IGxldmVsLCBpbnRlcm5hbEZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbWFnZS0+d2lkdGgoKSwgaW1hZ2UtPmhlaWdodCgpLCAwLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGZvcm1hdCwgVU5TSUdORURfQllURSwgaW1hZ2VEYXRhLmRhdGEoKSk7
CiB9CiAKLUdMX1NBTUVfTUVUSE9EXzMoVGV4UGFyYW1ldGVyZiwgdGV4UGFyYW1ldGVyZiwgdW5z
aWduZWQsIHVuc2lnbmVkLCBmbG9hdCk7CitERUxFR0FURV9UT19JTlRFUk5BTF8zKHRleFBhcmFt
ZXRlcmYsIHVuc2lnbmVkLCB1bnNpZ25lZCwgZmxvYXQpCitERUxFR0FURV9UT19JTlRFUk5BTF8z
KHRleFBhcmFtZXRlcmksIHVuc2lnbmVkLCB1bnNpZ25lZCwgaW50KQogCi1HTF9TQU1FX01FVEhP
RF8zKFRleFBhcmFtZXRlcmksIHRleFBhcmFtZXRlcmksIHVuc2lnbmVkLCB1bnNpZ25lZCwgaW50
KTsKLQotaW50IEdyYXBoaWNzQ29udGV4dDNEOjp0ZXhTdWJJbWFnZTJEKHVuc2lnbmVkIHRhcmdl
dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsZXZlbCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCB4b2Zmc2V0LAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHlvZmZzZXQsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgd2lkdGgsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaGVpZ2h0LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGZvcm1hdCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCB0eXBlLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqIHBpeGVscykKLXsKLSAgICBnbFRleFN1Yklt
YWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9y
bWF0LCB0eXBlLCBwaXhlbHMpOwotICAgIHJldHVybiAwOwotfQorREVMRUdBVEVfVE9fSU5URVJO
QUxfOVIodGV4U3ViSW1hZ2UyRCwgdW5zaWduZWQsIHVuc2lnbmVkLCB1bnNpZ25lZCwgdW5zaWdu
ZWQsIHVuc2lnbmVkLCB1bnNpZ25lZCwgdW5zaWduZWQsIHVuc2lnbmVkLCB2b2lkKiwgaW50KQog
CiBpbnQgR3JhcGhpY3NDb250ZXh0M0Q6OnRleFN1YkltYWdlMkQodW5zaWduZWQgdGFyZ2V0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxldmVsLApAQCAt
MTkxNiwxNDIgKzEyNDQsNjUgQEAgaW50IEdyYXBoaWNzQ29udGV4dDNEOjp0ZXhTdWJJbWFnZTJE
KHVucwogICAgIHVuc2lnbmVkIGludCBmb3JtYXQsIGludGVybmFsRm9ybWF0OwogICAgIGlmICgh
ZXh0cmFjdEltYWdlRGF0YShpbWFnZSwgZmxpcFksIHByZW11bHRpcGx5QWxwaGEsIGltYWdlRGF0
YSwgJmZvcm1hdCwgJmludGVybmFsRm9ybWF0KSkKICAgICAgICAgcmV0dXJuIC0xOwotICAgIGds
VGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LAotICAgICAgICAg
ICAgICAgICAgICBpbWFnZS0+d2lkdGgoKSwgaW1hZ2UtPmhlaWdodCgpLAotICAgICAgICAgICAg
ICAgICAgICBmb3JtYXQsIEdMX1VOU0lHTkVEX0JZVEUsIGltYWdlRGF0YS5kYXRhKCkpOwotICAg
IHJldHVybiAwOwotfQorICAgIHJldHVybiBtX2ludGVybmFsLT50ZXhTdWJJbWFnZTJEKHRhcmdl
dCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW1hZ2UtPndpZHRoKCksIGltYWdlLT5oZWlnaHQoKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQsIFVOU0lHTkVEX0JZVEUsIGltYWdlRGF0YS5k
YXRhKCkpOworfQorCitERUxFR0FURV9UT19JTlRFUk5BTF8yKHVuaWZvcm0xZiwgbG9uZywgZmxv
YXQpCitERUxFR0FURV9UT19JTlRFUk5BTF8zKHVuaWZvcm0xZnYsIGxvbmcsIGZsb2F0KiwgaW50
KQorREVMRUdBVEVfVE9fSU5URVJOQUxfMih1bmlmb3JtMWksIGxvbmcsIGludCkKK0RFTEVHQVRF
X1RPX0lOVEVSTkFMXzModW5pZm9ybTFpdiwgbG9uZywgaW50KiwgaW50KQorREVMRUdBVEVfVE9f
SU5URVJOQUxfMyh1bmlmb3JtMmYsIGxvbmcsIGZsb2F0LCBmbG9hdCkKK0RFTEVHQVRFX1RPX0lO
VEVSTkFMXzModW5pZm9ybTJmdiwgbG9uZywgZmxvYXQqLCBpbnQpCitERUxFR0FURV9UT19JTlRF
Uk5BTF8zKHVuaWZvcm0yaSwgbG9uZywgaW50LCBpbnQpCitERUxFR0FURV9UT19JTlRFUk5BTF8z
KHVuaWZvcm0yaXYsIGxvbmcsIGludCosIGludCkKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzQodW5p
Zm9ybTNmLCBsb25nLCBmbG9hdCwgZmxvYXQsIGZsb2F0KQorREVMRUdBVEVfVE9fSU5URVJOQUxf
Myh1bmlmb3JtM2Z2LCBsb25nLCBmbG9hdCosIGludCkKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzQo
dW5pZm9ybTNpLCBsb25nLCBpbnQsIGludCwgaW50KQorREVMRUdBVEVfVE9fSU5URVJOQUxfMyh1
bmlmb3JtM2l2LCBsb25nLCBpbnQqLCBpbnQpCitERUxFR0FURV9UT19JTlRFUk5BTF81KHVuaWZv
cm00ZiwgbG9uZywgZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQpCitERUxFR0FURV9UT19JTlRF
Uk5BTF8zKHVuaWZvcm00ZnYsIGxvbmcsIGZsb2F0KiwgaW50KQorREVMRUdBVEVfVE9fSU5URVJO
QUxfNSh1bmlmb3JtNGksIGxvbmcsIGludCwgaW50LCBpbnQsIGludCkKK0RFTEVHQVRFX1RPX0lO
VEVSTkFMXzModW5pZm9ybTRpdiwgbG9uZywgaW50KiwgaW50KQorREVMRUdBVEVfVE9fSU5URVJO
QUxfNCh1bmlmb3JtTWF0cml4MmZ2LCBsb25nLCBib29sLCBmbG9hdCosIGludCkKK0RFTEVHQVRF
X1RPX0lOVEVSTkFMXzQodW5pZm9ybU1hdHJpeDNmdiwgbG9uZywgYm9vbCwgZmxvYXQqLCBpbnQp
CitERUxFR0FURV9UT19JTlRFUk5BTF80KHVuaWZvcm1NYXRyaXg0ZnYsIGxvbmcsIGJvb2wsIGZs
b2F0KiwgaW50KQorCitERUxFR0FURV9UT19JTlRFUk5BTF8xKHVzZVByb2dyYW0sIFdlYkdMUHJv
Z3JhbSopCitERUxFR0FURV9UT19JTlRFUk5BTF8xKHZhbGlkYXRlUHJvZ3JhbSwgV2ViR0xQcm9n
cmFtKikKKworREVMRUdBVEVfVE9fSU5URVJOQUxfMih2ZXJ0ZXhBdHRyaWIxZiwgdW5zaWduZWQg
bG9uZywgZmxvYXQpCitERUxFR0FURV9UT19JTlRFUk5BTF8yKHZlcnRleEF0dHJpYjFmdiwgdW5z
aWduZWQgbG9uZywgZmxvYXQqKQorREVMRUdBVEVfVE9fSU5URVJOQUxfMyh2ZXJ0ZXhBdHRyaWIy
ZiwgdW5zaWduZWQgbG9uZywgZmxvYXQsIGZsb2F0KQorREVMRUdBVEVfVE9fSU5URVJOQUxfMih2
ZXJ0ZXhBdHRyaWIyZnYsIHVuc2lnbmVkIGxvbmcsIGZsb2F0KikKK0RFTEVHQVRFX1RPX0lOVEVS
TkFMXzQodmVydGV4QXR0cmliM2YsIHVuc2lnbmVkIGxvbmcsIGZsb2F0LCBmbG9hdCwgZmxvYXQp
CitERUxFR0FURV9UT19JTlRFUk5BTF8yKHZlcnRleEF0dHJpYjNmdiwgdW5zaWduZWQgbG9uZywg
ZmxvYXQqKQorREVMRUdBVEVfVE9fSU5URVJOQUxfNSh2ZXJ0ZXhBdHRyaWI0ZiwgdW5zaWduZWQg
bG9uZywgZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQpCitERUxFR0FURV9UT19JTlRFUk5BTF8y
KHZlcnRleEF0dHJpYjRmdiwgdW5zaWduZWQgbG9uZywgZmxvYXQqKQorREVMRUdBVEVfVE9fSU5U
RVJOQUxfNih2ZXJ0ZXhBdHRyaWJQb2ludGVyLCB1bnNpZ25lZCBsb25nLCBpbnQsIGludCwgYm9v
bCwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZykKKworREVMRUdBVEVfVE9fSU5URVJOQUxf
NCh2aWV3cG9ydCwgbG9uZywgbG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZykKKwor
REVMRUdBVEVfVE9fSU5URVJOQUxfMShiZWdpblBhaW50LCBXZWJHTFJlbmRlcmluZ0NvbnRleHQq
KQorREVMRUdBVEVfVE9fSU5URVJOQUwoZW5kUGFpbnQpCisKK0RFTEVHQVRFX1RPX0lOVEVSTkFM
X1IoY3JlYXRlQnVmZmVyLCB1bnNpZ25lZCkKK0RFTEVHQVRFX1RPX0lOVEVSTkFMX1IoY3JlYXRl
RnJhbWVidWZmZXIsIHVuc2lnbmVkKQorREVMRUdBVEVfVE9fSU5URVJOQUxfUihjcmVhdGVQcm9n
cmFtLCB1bnNpZ25lZCkKK0RFTEVHQVRFX1RPX0lOVEVSTkFMX1IoY3JlYXRlUmVuZGVyYnVmZmVy
LCB1bnNpZ25lZCkKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzFSKGNyZWF0ZVNoYWRlciwgdW5zaWdu
ZWQgbG9uZywgdW5zaWduZWQpCitERUxFR0FURV9UT19JTlRFUk5BTF9SKGNyZWF0ZVRleHR1cmUs
IHVuc2lnbmVkKQorCitERUxFR0FURV9UT19JTlRFUk5BTF8xKGRlbGV0ZUJ1ZmZlciwgdW5zaWdu
ZWQpCitERUxFR0FURV9UT19JTlRFUk5BTF8xKGRlbGV0ZUZyYW1lYnVmZmVyLCB1bnNpZ25lZCkK
K0RFTEVHQVRFX1RPX0lOVEVSTkFMXzEoZGVsZXRlUHJvZ3JhbSwgdW5zaWduZWQpCitERUxFR0FU
RV9UT19JTlRFUk5BTF8xKGRlbGV0ZVJlbmRlcmJ1ZmZlciwgdW5zaWduZWQpCitERUxFR0FURV9U
T19JTlRFUk5BTF8xKGRlbGV0ZVNoYWRlciwgdW5zaWduZWQpCitERUxFR0FURV9UT19JTlRFUk5B
TF8xKGRlbGV0ZVRleHR1cmUsIHVuc2lnbmVkKQogCi1HTF9TQU1FX01FVEhPRF8yKFVuaWZvcm0x
ZiwgdW5pZm9ybTFmLCBsb25nLCBmbG9hdCkKLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5p
Zm9ybTFmdihsb25nIGxvY2F0aW9uLCBmbG9hdCogdiwgaW50IHNpemUpCi17Ci0gICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7Ci0gICAgZ2xVbmlmb3JtMWZ2KGxvY2F0aW9uLCBzaXplLCB2KTsKLX0K
K0RFTEVHQVRFX1RPX0lOVEVSTkFMXzEoc3ludGhlc2l6ZUdMRXJyb3IsIHVuc2lnbmVkIGxvbmcp
CiAKLUdMX1NBTUVfTUVUSE9EXzIoVW5pZm9ybTFpLCB1bmlmb3JtMWksIGxvbmcsIGludCkKLQot
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTFpdihsb25nIGxvY2F0aW9uLCBpbnQqIHYs
IGludCBzaXplKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsVW5pZm9ybTFp
dihsb2NhdGlvbiwgc2l6ZSwgdik7Ci19Ci0KLUdMX1NBTUVfTUVUSE9EXzMoVW5pZm9ybTJmLCB1
bmlmb3JtMmYsIGxvbmcsIGZsb2F0LCBmbG9hdCkKLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
dW5pZm9ybTJmdihsb25nIGxvY2F0aW9uLCBmbG9hdCogdiwgaW50IHNpemUpCi17Ci0gICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2xVbmlmb3JtMmZ2KGxvY2F0aW9uLCBzaXplLCB2KTsK
LX0KLQotR0xfU0FNRV9NRVRIT0RfMyhVbmlmb3JtMmksIHVuaWZvcm0yaSwgbG9uZywgaW50LCBp
bnQpCi0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0yaXYobG9uZyBsb2NhdGlvbiwg
aW50KiB2LCBpbnQgc2l6ZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbFVu
aWZvcm0yaXYobG9jYXRpb24sIHNpemUsIHYpOwotfQotCi1HTF9TQU1FX01FVEhPRF80KFVuaWZv
cm0zZiwgdW5pZm9ybTNmLCBsb25nLCBmbG9hdCwgZmxvYXQsIGZsb2F0KQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjp1bmlmb3JtM2Z2KGxvbmcgbG9jYXRpb24sIGZsb2F0KiB2LCBpbnQgc2l6
ZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbFVuaWZvcm0zZnYobG9jYXRp
b24sIHNpemUsIHYpOwotfQotCi1HTF9TQU1FX01FVEhPRF80KFVuaWZvcm0zaSwgdW5pZm9ybTNp
LCBsb25nLCBpbnQsIGludCwgaW50KQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3Jt
M2l2KGxvbmcgbG9jYXRpb24sIGludCogdiwgaW50IHNpemUpCi17Ci0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7Ci0gICAgZ2xVbmlmb3JtM2l2KGxvY2F0aW9uLCBzaXplLCB2KTsKLX0KLQotR0xf
U0FNRV9NRVRIT0RfNShVbmlmb3JtNGYsIHVuaWZvcm00ZiwgbG9uZywgZmxvYXQsIGZsb2F0LCBm
bG9hdCwgZmxvYXQpCi0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm00ZnYobG9uZyBs
b2NhdGlvbiwgZmxvYXQqIHYsIGludCBzaXplKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OwotICAgIGdsVW5pZm9ybTRmdihsb2NhdGlvbiwgc2l6ZSwgdik7Ci19Ci0KLUdMX1NBTUVfTUVU
SE9EXzUoVW5pZm9ybTRpLCB1bmlmb3JtNGksIGxvbmcsIGludCwgaW50LCBpbnQsIGludCkKLQot
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTRpdihsb25nIGxvY2F0aW9uLCBpbnQqIHYs
IGludCBzaXplKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsVW5pZm9ybTRp
dihsb2NhdGlvbiwgc2l6ZSwgdik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZv
cm1NYXRyaXgyZnYobG9uZyBsb2NhdGlvbiwgYm9vbCB0cmFuc3Bvc2UsIGZsb2F0KiB2YWx1ZSwg
aW50IHNpemUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2xVbmlmb3JtTWF0
cml4MmZ2KGxvY2F0aW9uLCBzaXplLCB0cmFuc3Bvc2UsIHZhbHVlKTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6dW5pZm9ybU1hdHJpeDNmdihsb25nIGxvY2F0aW9uLCBib29sIHRyYW5z
cG9zZSwgZmxvYXQqIHZhbHVlLCBpbnQgc2l6ZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKLSAgICBnbFVuaWZvcm1NYXRyaXgzZnYobG9jYXRpb24sIHNpemUsIHRyYW5zcG9zZSwgdmFs
dWUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtTWF0cml4NGZ2KGxvbmcg
bG9jYXRpb24sIGJvb2wgdHJhbnNwb3NlLCBmbG9hdCogdmFsdWUsIGludCBzaXplKQotewotICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsVW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwg
c2l6ZSwgdHJhbnNwb3NlLCB2YWx1ZSk7Ci19Ci0KLUdMX1NBTUVfTUVUSE9EXzFfWChVc2VQcm9n
cmFtLCB1c2VQcm9ncmFtLCBXZWJHTFByb2dyYW0qKQotCi1HTF9TQU1FX01FVEhPRF8xX1goVmFs
aWRhdGVQcm9ncmFtLCB2YWxpZGF0ZVByb2dyYW0sIFdlYkdMUHJvZ3JhbSopCi0KLUdMX1NBTUVf
TUVUSE9EXzIoVmVydGV4QXR0cmliMWYsIHZlcnRleEF0dHJpYjFmLCB1bnNpZ25lZCBsb25nLCBm
bG9hdCkKLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmliMWZ2KHVuc2lnbmVk
IGxvbmcgaW5keCwgZmxvYXQqIHZhbHVlcykKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
LSAgICBnbFZlcnRleEF0dHJpYjFmdihpbmR4LCB2YWx1ZXMpOwotfQotCi1HTF9TQU1FX01FVEhP
RF8zKFZlcnRleEF0dHJpYjJmLCB2ZXJ0ZXhBdHRyaWIyZiwgdW5zaWduZWQgbG9uZywgZmxvYXQs
IGZsb2F0KQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIyZnYodW5zaWdu
ZWQgbG9uZyBpbmR4LCBmbG9hdCogdmFsdWVzKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OwotICAgIGdsVmVydGV4QXR0cmliMmZ2KGluZHgsIHZhbHVlcyk7Ci19Ci0KLUdMX1NBTUVfTUVU
SE9EXzQoVmVydGV4QXR0cmliM2YsIHZlcnRleEF0dHJpYjNmLCB1bnNpZ25lZCBsb25nLCBmbG9h
dCwgZmxvYXQsIGZsb2F0KQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIz
ZnYodW5zaWduZWQgbG9uZyBpbmR4LCBmbG9hdCogdmFsdWVzKQotewotICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOwotICAgIGdsVmVydGV4QXR0cmliM2Z2KGluZHgsIHZhbHVlcyk7Ci19Ci0KLUdM
X1NBTUVfTUVUSE9EXzUoVmVydGV4QXR0cmliNGYsIHZlcnRleEF0dHJpYjRmLCB1bnNpZ25lZCBs
b25nLCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCkKLQotdm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6dmVydGV4QXR0cmliNGZ2KHVuc2lnbmVkIGxvbmcgaW5keCwgZmxvYXQqIHZhbHVlcykKLXsK
LSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbFZlcnRleEF0dHJpYjRmdihpbmR4LCB2
YWx1ZXMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWJQb2ludGVy
KHVuc2lnbmVkIGxvbmcgaW5keCwgaW50IHNpemUsIGludCB0eXBlLCBib29sIG5vcm1hbGl6ZWQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxv
bmcgc3RyaWRlLCB1bnNpZ25lZCBsb25nIG9mZnNldCkKLXsKLSAgICBtX2ludGVybmFsLT52ZXJ0
ZXhBdHRyaWJQb2ludGVyKGluZHgsIHNpemUsIHR5cGUsIG5vcm1hbGl6ZWQsIHN0cmlkZSwgb2Zm
c2V0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmlld3BvcnQobG9uZyB4LCBsb25n
IHksIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0KQotewotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1faW50ZXJuYWwtPnZpZXdwb3J0SW1wbCh4LCB5LCB3
aWR0aCwgaGVpZ2h0KTsKLX0KLQotfQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYg
Ly8gRU5BQkxFKDNEX0NBTlZBUykKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViR3JhcGhp
Y3NDb250ZXh0M0QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViR3Jh
cGhpY3NDb250ZXh0M0QuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJHcmFwaGljc0NvbnRleHQzRC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTEgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICog
ZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAq
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViR3JhcGhpY3NDb250ZXh0M0QuaCIKKworI2lm
IEVOQUJMRSgzRF9DQU5WQVMpCisKKyNpbmNsdWRlICJXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1
bHRJbXBsLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJHcmFwaGljc0NvbnRleHQzRCog
V2ViR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZURlZmF1bHQoKQoreworI2lmIEVOQUJMRSgzRF9D
QU5WQVMpCisgICAgcmV0dXJuIG5ldyBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsKCk7
CisjZWxzZQorICAgIHJldHVybiAwOworI2VuZGlmCit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktp
dAorCisjZW5kaWYgLy8gRU5BQkxFKDNEX0NBTlZBUykKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9z
cmMvV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsLmNwcAkocmV2
aXNpb24gMCkKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViR3JhcGhpY3NDb250ZXh0M0REZWZh
dWx0SW1wbC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTE4OCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRp
b24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisg
KiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKworI2lmIEVOQUJMRSgzRF9DQU5WQVMpCisKKyNpbmNsdWRlICJXZWJHcmFwaGljc0Nv
bnRleHQzRERlZmF1bHRJbXBsLmgiCisKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorCisj
aWYgT1MoTElOVVgpCisjaW5jbHVkZSA8ZGxmY24uaD4KKyNlbmRpZgorCituYW1lc3BhY2UgV2Vi
S2l0IHsKKworLy8gVW5jb21tZW50IHRoaXMgdG8gcmVuZGVyIHRvIGEgc2VwYXJhdGUgd2luZG93
IGZvciBkZWJ1Z2dpbmcKKy8vICNkZWZpbmUgUkVOREVSX1RPX0RFQlVHR0lOR19XSU5ET1cKKwor
I2lmIE9TKERBUldJTikKKyNkZWZpbmUgVVNFX1RFWFRVUkVfUkVDVEFOR0xFX0ZPUl9GUkFNRUJV
RkZFUgorI2VuZGlmCisKK2Jvb2wgV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6c19p
bml0aWFsaXplZEdMRVcgPSBmYWxzZTsKKworI2lmIE9TKExJTlVYKQorV2ViR3JhcGhpY3NDb250
ZXh0M0REZWZhdWx0SW1wbDo6R0xDb25uZWN0aW9uKiBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1
bHRJbXBsOjpzX2dsID0gMDsKKworV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6R0xD
b25uZWN0aW9uKiBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpHTENvbm5lY3Rpb246
OmNyZWF0ZSgpCit7CisgICAgRGlzcGxheSogZHB5ID0gWE9wZW5EaXNwbGF5KDApOworICAgIGlm
ICghZHB5KSB7CisgICAgICAgIHByaW50ZigiR3JhcGhpY3NDb250ZXh0M0Q6IGVycm9yIG9wZW5p
bmcgWCBkaXNwbGF5XG4iKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgLy8gV2Ug
dXNlIFJUTERfR0xPQkFMIHNlbWFudGljcyBzbyB0aGF0IEdMRVcgaW5pdGlhbGl6YXRpb24gd29y
a3M7CisgICAgLy8gR0xFVyBleHBlY3RzIHRvIGJlIGFibGUgdG8gb3BlbiB0aGUgY3VycmVudCBw
cm9jZXNzJ3MgaGFuZGxlCisgICAgLy8gYW5kIGRvIGRsc3ltJ3Mgb2YgR0wgZW50cnkgcG9pbnRz
IGZyb20gdGhlcmUuCisgICAgdm9pZCogbGliR0wgPSBkbG9wZW4oImxpYkdMLnNvLjEiLCBSVExE
X0xBWlkgfCBSVExEX0dMT0JBTCk7CisgICAgaWYgKCFsaWJHTCkgeworICAgICAgICBYQ2xvc2VE
aXNwbGF5KGRweSk7CisgICAgICAgIHByaW50ZigiR3JhcGhpY3NDb250ZXh0M0Q6IGVycm9yIG9w
ZW5pbmcgbGliR0wuc28uMTogJXNcbiIsIGRsZXJyb3IoKSk7CisgICAgICAgIHJldHVybiAwOwor
ICAgIH0KKworICAgIFBGTkdMWENIT09TRUZCQ09ORklHUFJPQyBjaG9vc2VGQkNvbmZpZyA9IChQ
Rk5HTFhDSE9PU0VGQkNPTkZJR1BST0MpIGRsc3ltKGxpYkdMLCAiZ2xYQ2hvb3NlRkJDb25maWci
KTsKKyAgICBQRk5HTFhDUkVBVEVORVdDT05URVhUUFJPQyBjcmVhdGVOZXdDb250ZXh0ID0gKFBG
TkdMWENSRUFURU5FV0NPTlRFWFRQUk9DKSBkbHN5bShsaWJHTCwgImdsWENyZWF0ZU5ld0NvbnRl
eHQiKTsKKyAgICBQRk5HTFhDUkVBVEVQQlVGRkVSUFJPQyBjcmVhdGVQYnVmZmVyID0gKFBGTkdM
WENSRUFURVBCVUZGRVJQUk9DKSBkbHN5bShsaWJHTCwgImdsWENyZWF0ZVBidWZmZXIiKTsKKyAg
ICBQRk5HTFhERVNUUk9ZUEJVRkZFUlBST0MgZGVzdHJveVBidWZmZXIgPSAoUEZOR0xYREVTVFJP
WVBCVUZGRVJQUk9DKSBkbHN5bShsaWJHTCwgImdsWERlc3Ryb3lQYnVmZmVyIik7CisgICAgUEZO
R0xYTUFLRUNVUlJFTlRQUk9DIG1ha2VDdXJyZW50ID0gKFBGTkdMWE1BS0VDVVJSRU5UUFJPQykg
ZGxzeW0obGliR0wsICJnbFhNYWtlQ3VycmVudCIpOworICAgIFBGTkdMWERFU1RST1lDT05URVhU
UFJPQyBkZXN0cm95Q29udGV4dCA9IChQRk5HTFhERVNUUk9ZQ09OVEVYVFBST0MpIGRsc3ltKGxp
YkdMLCAiZ2xYRGVzdHJveUNvbnRleHQiKTsKKyAgICBQRk5HTFhHRVRDVVJSRU5UQ09OVEVYVFBS
T0MgZ2V0Q3VycmVudENvbnRleHQgPSAoUEZOR0xYR0VUQ1VSUkVOVENPTlRFWFRQUk9DKSBkbHN5
bShsaWJHTCwgImdsWEdldEN1cnJlbnRDb250ZXh0Iik7CisgICAgaWYgKCFjaG9vc2VGQkNvbmZp
ZyB8fCAhY3JlYXRlTmV3Q29udGV4dCB8fCAhY3JlYXRlUGJ1ZmZlcgorICAgICAgICB8fCAhZGVz
dHJveVBidWZmZXIgfHwgIW1ha2VDdXJyZW50IHx8ICFkZXN0cm95Q29udGV4dAorICAgICAgICB8
fCAhZ2V0Q3VycmVudENvbnRleHQpIHsKKyAgICAgICAgWENsb3NlRGlzcGxheShkcHkpOworICAg
ICAgICBkbGNsb3NlKGxpYkdMKTsKKyAgICAgICAgcHJpbnRmKCJHcmFwaGljc0NvbnRleHQzRDog
ZXJyb3IgbG9va2luZyB1cCBib290c3RyYXBwaW5nIGVudHJ5IHBvaW50c1xuIik7CisgICAgICAg
IHJldHVybiAwOworICAgIH0KKyAgICByZXR1cm4gbmV3IEdMQ29ubmVjdGlvbihkcHksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbGliR0wsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY2hvb3NlRkJDb25maWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlTmV3
Q29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVQYnVmZmVyLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Ryb3lQYnVmZmVyLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1ha2VDdXJyZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRl
c3Ryb3lDb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldEN1cnJlbnRDb250
ZXh0KTsKK30KKworV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6R0xDb25uZWN0aW9u
Ojp+R0xDb25uZWN0aW9uKCkKK3sKKyAgICBYQ2xvc2VEaXNwbGF5KG1fZGlzcGxheSk7CisgICAg
ZGxjbG9zZShtX2xpYkdMKTsKK30KKworI2VuZGlmIC8vIE9TKExJTlVYKQorCitXZWJHcmFwaGlj
c0NvbnRleHQzRERlZmF1bHRJbXBsOjpWZXJ0ZXhBdHRyaWJQb2ludGVyU3RhdGU6OlZlcnRleEF0
dHJpYlBvaW50ZXJTdGF0ZSgpCisgICAgOiBlbmFibGVkKGZhbHNlKQorICAgICwgYnVmZmVyKDAp
CisgICAgLCBpbmR4KDApCisgICAgLCBzaXplKDApCisgICAgLCB0eXBlKDApCisgICAgLCBub3Jt
YWxpemVkKGZhbHNlKQorICAgICwgc3RyaWRlKDApCisgICAgLCBvZmZzZXQoMCkKK3sKK30KKwor
V2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6V2ViR3JhcGhpY3NDb250ZXh0M0REZWZh
dWx0SW1wbCgpCisgICAgOiBtX2luaXRpYWxpemVkKGZhbHNlKQorICAgICwgbV90ZXh0dXJlKDAp
CisgICAgLCBtX2ZibygwKQorICAgICwgbV9kZXB0aEJ1ZmZlcigwKQorICAgICwgbV9ib3VuZEZC
TygwKQorI2lmZGVmIEZMSVBfRlJBTUVCVUZGRVJfVkVSVElDQUxMWQorICAgICwgbV9zY2FubGlu
ZSgwKQorI2VuZGlmCisgICAgLCBtX2JvdW5kQXJyYXlCdWZmZXIoMCkKKyNpZiBPUyhXSU5ET1dT
KQorICAgICwgbV9jYW52YXNXaW5kb3coMCkKKyAgICAsIG1fY2FudmFzREMoMCkKKyAgICAsIG1f
Y29udGV4dE9iaigwKQorI2VsaWYgUExBVEZPUk0oQ0cpCisgICAgLCBtX3BidWZmZXIoMCkKKyAg
ICAsIG1fY29udGV4dE9iaigwKQorICAgICwgbV9yZW5kZXJPdXRwdXQoMCkKKyNlbGlmIE9TKExJ
TlVYKQorICAgICwgbV9jb250ZXh0T2JqKDApCisgICAgLCBtX3BidWZmZXIoMCkKKyNlbHNlCisj
ZXJyb3IgTXVzdCBwb3J0IHRvIHlvdXIgcGxhdGZvcm0KKyNlbmRpZgoreworfQorCitXZWJHcmFw
aGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjp+V2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1w
bCgpCit7CisgICAgaWYgKG1faW5pdGlhbGl6ZWQpIHsKKyAgICAgICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CisjaWZuZGVmIFJFTkRFUl9UT19ERUJVR0dJTkdfV0lORE9XCisgICAgICAgIGdsRGVs
ZXRlUmVuZGVyYnVmZmVyc0VYVCgxLCAmbV9kZXB0aEJ1ZmZlcik7CisgICAgICAgIGdsRGVsZXRl
VGV4dHVyZXMoMSwgJm1fdGV4dHVyZSk7CisjaWZkZWYgRkxJUF9GUkFNRUJVRkZFUl9WRVJUSUNB
TExZCisgICAgICAgIGlmIChtX3NjYW5saW5lKQorICAgICAgICAgICAgZGVsZXRlW10gbV9zY2Fu
bGluZTsKKyNlbmRpZgorICAgICAgICBnbERlbGV0ZUZyYW1lYnVmZmVyc0VYVCgxLCAmbV9mYm8p
OworI2VuZGlmIC8vICFSRU5ERVJfVE9fREVCVUdHSU5HX1dJTkRPVworI2lmIE9TKFdJTkRPV1Mp
CisgICAgICAgIHdnbE1ha2VDdXJyZW50KDAsIDApOworICAgICAgICB3Z2xEZWxldGVDb250ZXh0
KG1fY29udGV4dE9iaik7CisgICAgICAgIFJlbGVhc2VEQyhtX2NhbnZhc1dpbmRvdywgbV9jYW52
YXNEQyk7CisgICAgICAgIERlc3Ryb3lXaW5kb3cobV9jYW52YXNXaW5kb3cpOworI2VsaWYgUExB
VEZPUk0oQ0cpCisgICAgICAgIENHTFNldEN1cnJlbnRDb250ZXh0KDApOworICAgICAgICBDR0xE
ZXN0cm95Q29udGV4dChtX2NvbnRleHRPYmopOworICAgICAgICBDR0xEZXN0cm95UEJ1ZmZlciht
X3BidWZmZXIpOworICAgICAgICBpZiAobV9yZW5kZXJPdXRwdXQpCisgICAgICAgICAgICBkZWxl
dGVbXSBtX3JlbmRlck91dHB1dDsKKyNlbGlmIE9TKExJTlVYKQorICAgICAgICBzX2dsLT5tYWtl
Q3VycmVudCgwLCAwKTsKKyAgICAgICAgc19nbC0+ZGVzdHJveUNvbnRleHQobV9jb250ZXh0T2Jq
KTsKKyAgICAgICAgc19nbC0+ZGVzdHJveVBidWZmZXIobV9wYnVmZmVyKTsKKyNlbHNlCisjZXJy
b3IgTXVzdCBwb3J0IHRvIHlvdXIgcGxhdGZvcm0KKyNlbmRpZgorICAgICAgICBtX2NvbnRleHRP
YmogPSAwOworICAgIH0KK30KKworYm9vbCBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBs
Ojppbml0aWFsaXplKFdlYkdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMp
Cit7CisgICAgLy8gRklYTUU6IHdlIG5lZWQgdG8gdGFrZSBpbnRvIGFjY291bnQgdGhlIHVzZXIn
cyByZXF1ZXN0ZWQKKyAgICAvLyBjb250ZXh0IGNyZWF0aW9uIGF0dHJpYnV0ZXMsIGluIHBhcnRp
Y3VsYXIgc3RlbmNpbCBhbmQKKyAgICAvLyBhbnRpYWxpYXMsIGFuZCBkZXRlcm1pbmUgd2hpY2gg
Y291bGQgYW5kIGNvdWxkIG5vdCBiZSBob25vcmVkCisgICAgLy8gYmFzZWQgb24gdGhlIGNhcGFi
aWxpdGllcyBvZiB0aGUgT3BlbkdMIGltcGxlbWVudGF0aW9uLgorICAgIG1fYXR0cmlidXRlcy5h
bHBoYSA9IHRydWU7CisgICAgbV9hdHRyaWJ1dGVzLmRlcHRoID0gdHJ1ZTsKKyAgICBtX2F0dHJp
YnV0ZXMuc3RlbmNpbCA9IGZhbHNlOworICAgIG1fYXR0cmlidXRlcy5hbnRpYWxpYXMgPSBmYWxz
ZTsKKyAgICBtX2F0dHJpYnV0ZXMucHJlbXVsdGlwbGllZEFscGhhID0gdHJ1ZTsKKworI2lmIE9T
KFdJTkRPV1MpCisgICAgV05EQ0xBU1Mgd2M7CisgICAgaWYgKCFHZXRDbGFzc0luZm8oR2V0TW9k
dWxlSGFuZGxlKDApLCBMIkNBTlZBU0dMIiwgJndjKSkgeworICAgICAgICBaZXJvTWVtb3J5KCZ3
Yywgc2l6ZW9mKFdORENMQVNTKSk7CisgICAgICAgIHdjLnN0eWxlID0gQ1NfT1dOREM7CisgICAg
ICAgIHdjLmhJbnN0YW5jZSA9IEdldE1vZHVsZUhhbmRsZSgwKTsKKyAgICAgICAgd2MubHBmbldu
ZFByb2MgPSBEZWZXaW5kb3dQcm9jOworICAgICAgICB3Yy5scHN6Q2xhc3NOYW1lID0gTCJDQU5W
QVNHTCI7CisKKyAgICAgICAgaWYgKCFSZWdpc3RlckNsYXNzKCZ3YykpIHsKKyAgICAgICAgICAg
IHByaW50ZigiV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDogUmVnaXN0ZXJDbGFzcyBm
YWlsZWRcbiIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQor
CisgICAgbV9jYW52YXNXaW5kb3cgPSBDcmVhdGVXaW5kb3coTCJDQU5WQVNHTCIsIEwiQ0FOVkFT
R0wiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdTX0NBUFRJT04sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1dfVVNFREVGQVVMVCwgQ1dfVVNFREVGQVVM
VCwgQ1dfVVNFREVGQVVMVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDV19V
U0VERUZBVUxULCAwLCAwLCBHZXRNb2R1bGVIYW5kbGUoMCksIDApOworICAgIGlmICghbV9jYW52
YXNXaW5kb3cpIHsKKyAgICAgICAgcHJpbnRmKCJXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJ
bXBsOiBDcmVhdGVXaW5kb3cgZmFpbGVkXG4iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKworICAgIC8vIGdldCB0aGUgZGV2aWNlIGNvbnRleHQKKyAgICBtX2NhbnZhc0RDID0gR2V0
REMobV9jYW52YXNXaW5kb3cpOworICAgIGlmICghbV9jYW52YXNEQykgeworICAgICAgICBwcmlu
dGYoIldlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6IEdldERDIGZhaWxlZFxuIik7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLyBmaW5kIGRlZmF1bHQgcGl4ZWwg
Zm9ybWF0CisgICAgUElYRUxGT1JNQVRERVNDUklQVE9SIHBmZDsKKyAgICBaZXJvTWVtb3J5KCZw
ZmQsIHNpemVvZihQSVhFTEZPUk1BVERFU0NSSVBUT1IpKTsKKyAgICBwZmQublNpemUgPSBzaXpl
b2YoUElYRUxGT1JNQVRERVNDUklQVE9SKTsKKyAgICBwZmQublZlcnNpb24gPSAxOworI2lmZGVm
IFJFTkRFUl9UT19ERUJVR0dJTkdfV0lORE9XCisgICAgcGZkLmR3RmxhZ3MgPSBQRkRfRFJBV19U
T19XSU5ET1cgfCBQRkRfU1VQUE9SVF9PUEVOR0wgfCBQRkRfRE9VQkxFQlVGRkVSOworI2Vsc2UK
KyAgICBwZmQuZHdGbGFncyA9IFBGRF9EUkFXX1RPX1dJTkRPVyB8IFBGRF9TVVBQT1JUX09QRU5H
TDsKKyNlbmRpZgorICAgIGludCBwaXhlbGZvcm1hdCA9IENob29zZVBpeGVsRm9ybWF0KG1fY2Fu
dmFzREMsICZwZmQpOworCisgICAgLy8gc2V0IHRoZSBwaXhlbCBmb3JtYXQgZm9yIHRoZSBkYwor
ICAgIGlmICghU2V0UGl4ZWxGb3JtYXQobV9jYW52YXNEQywgcGl4ZWxmb3JtYXQsICZwZmQpKSB7
CisgICAgICAgIHByaW50ZigiV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDogU2V0UGl4
ZWxGb3JtYXQgZmFpbGVkXG4iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAg
IC8vIGNyZWF0ZSByZW5kZXJpbmcgY29udGV4dAorICAgIG1fY29udGV4dE9iaiA9IHdnbENyZWF0
ZUNvbnRleHQobV9jYW52YXNEQyk7CisgICAgaWYgKCFtX2NvbnRleHRPYmopIHsKKyAgICAgICAg
cHJpbnRmKCJXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOiB3Z2xDcmVhdGVDb250ZXh0
IGZhaWxlZFxuIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoIXdn
bE1ha2VDdXJyZW50KG1fY2FudmFzREMsIG1fY29udGV4dE9iaikpIHsKKyAgICAgICAgcHJpbnRm
KCJXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOiB3Z2xNYWtlQ3VycmVudCBmYWlsZWRc
biIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisjaWZkZWYgUkVOREVSX1RPX0RF
QlVHR0lOR19XSU5ET1cKKyAgICB0eXBlZGVmIEJPT0wgKFdJTkFQSSAqIFBGTldHTFNXQVBJTlRF
UlZBTEVYVFBST0MpIChpbnQgaW50ZXJ2YWwpOworICAgIFBGTldHTFNXQVBJTlRFUlZBTEVYVFBS
T0Mgc2V0U3dhcEludGVydmFsID0gMDsKKyAgICBzZXRTd2FwSW50ZXJ2YWwgPSAoUEZOV0dMU1dB
UElOVEVSVkFMRVhUUFJPQykgd2dsR2V0UHJvY0FkZHJlc3MoIndnbFN3YXBJbnRlcnZhbEVYVCIp
OworICAgIGlmIChzZXRTd2FwSW50ZXJ2YWwpCisgICAgICAgIHNldFN3YXBJbnRlcnZhbCgxKTsK
KyNlbmRpZiAvLyBSRU5ERVJfVE9fREVCVUdHSU5HX1dJTkRPVworCisjZWxpZiBQTEFURk9STShD
RykKKyAgICAvLyBDcmVhdGUgYSAxeDEgcGJ1ZmZlciBhbmQgYXNzb2NpYXRlZCBjb250ZXh0IHRv
IGJvb3RzdHJhcCB0aGluZ3MKKyAgICBDR0xQaXhlbEZvcm1hdEF0dHJpYnV0ZSBhdHRyaWJzW10g
PSB7CisgICAgICAgIChDR0xQaXhlbEZvcm1hdEF0dHJpYnV0ZSkga0NHTFBGQVBCdWZmZXIsCisg
ICAgICAgIChDR0xQaXhlbEZvcm1hdEF0dHJpYnV0ZSkgMAorICAgIH07CisgICAgQ0dMUGl4ZWxG
b3JtYXRPYmogcGl4ZWxGb3JtYXQ7CisgICAgR0xpbnQgbnVtUGl4ZWxGb3JtYXRzOworICAgIGlm
IChDR0xDaG9vc2VQaXhlbEZvcm1hdChhdHRyaWJzLCAmcGl4ZWxGb3JtYXQsICZudW1QaXhlbEZv
cm1hdHMpICE9IGtDR0xOb0Vycm9yKSB7CisgICAgICAgIHByaW50ZigiV2ViR3JhcGhpY3NDb250
ZXh0M0REZWZhdWx0SW1wbDogZXJyb3IgY2hvb3NpbmcgcGl4ZWwgZm9ybWF0XG4iKTsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBpZiAoIXBpeGVsRm9ybWF0KSB7CisgICAgICAg
IHByaW50ZigiV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDogbm8gcGl4ZWwgZm9ybWF0
IHNlbGVjdGVkXG4iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBDR0xDb250
ZXh0T2JqIGNvbnRleHQ7CisgICAgQ0dMRXJyb3IgcmVzID0gQ0dMQ3JlYXRlQ29udGV4dChwaXhl
bEZvcm1hdCwgMCwgJmNvbnRleHQpOworICAgIENHTERlc3Ryb3lQaXhlbEZvcm1hdChwaXhlbEZv
cm1hdCk7CisgICAgaWYgKHJlcyAhPSBrQ0dMTm9FcnJvcikgeworICAgICAgICBwcmludGYoIldl
YkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6IGVycm9yIGNyZWF0aW5nIGNvbnRleHRcbiIp
OworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIENHTFBCdWZmZXJPYmogcGJ1ZmZl
cjsKKyAgICBpZiAoQ0dMQ3JlYXRlUEJ1ZmZlcigxLCAxLCBHTF9URVhUVVJFXzJELCBHTF9SR0JB
LCAwLCAmcGJ1ZmZlcikgIT0ga0NHTE5vRXJyb3IpIHsKKyAgICAgICAgQ0dMRGVzdHJveUNvbnRl
eHQoY29udGV4dCk7CisgICAgICAgIHByaW50ZigiV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0
SW1wbDogZXJyb3IgY3JlYXRpbmcgcGJ1ZmZlclxuIik7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisgICAgaWYgKENHTFNldFBCdWZmZXIoY29udGV4dCwgcGJ1ZmZlciwgMCwgMCwgMCkg
IT0ga0NHTE5vRXJyb3IpIHsKKyAgICAgICAgQ0dMRGVzdHJveUNvbnRleHQoY29udGV4dCk7Cisg
ICAgICAgIENHTERlc3Ryb3lQQnVmZmVyKHBidWZmZXIpOworICAgICAgICBwcmludGYoIldlYkdy
YXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6IGVycm9yIGF0dGFjaGluZyBwYnVmZmVyIHRvIGNv
bnRleHRcbiIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmIChDR0xTZXRD
dXJyZW50Q29udGV4dChjb250ZXh0KSAhPSBrQ0dMTm9FcnJvcikgeworICAgICAgICBDR0xEZXN0
cm95Q29udGV4dChjb250ZXh0KTsKKyAgICAgICAgQ0dMRGVzdHJveVBCdWZmZXIocGJ1ZmZlcik7
CisgICAgICAgIHByaW50ZigiV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDogZXJyb3Ig
bWFraW5nIGNvbnRleHQgY3VycmVudFxuIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisgICAgbV9wYnVmZmVyID0gcGJ1ZmZlcjsKKyAgICBtX2NvbnRleHRPYmogPSBjb250ZXh0Owor
I2VsaWYgT1MoTElOVVgpCisgICAgaWYgKCFzX2dsKSB7CisgICAgICAgIHNfZ2wgPSBHTENvbm5l
Y3Rpb246OmNyZWF0ZSgpOworICAgICAgICBpZiAoIXNfZ2wpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorCisgICAgaW50IGNvbmZpZ0F0dHJzW10gPSB7CisgICAgICAgIEdMWF9E
UkFXQUJMRV9UWVBFLAorICAgICAgICBHTFhfUEJVRkZFUl9CSVQsCisgICAgICAgIEdMWF9SRU5E
RVJfVFlQRSwKKyAgICAgICAgR0xYX1JHQkFfQklULAorICAgICAgICBHTFhfRE9VQkxFQlVGRkVS
LAorICAgICAgICAwLAorICAgICAgICAwCisgICAgfTsKKyAgICBpbnQgbmVsZW1lbnRzID0gMDsK
KyAgICBHTFhGQkNvbmZpZyogY29uZmlnID0gc19nbC0+Y2hvb3NlRkJDb25maWcoMCwgY29uZmln
QXR0cnMsICZuZWxlbWVudHMpOworICAgIGlmICghY29uZmlnKSB7CisgICAgICAgIHByaW50Zigi
V2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDogZ2xYQ2hvb3NlRkJDb25maWcgZmFpbGVk
XG4iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBpZiAoIW5lbGVtZW50cykg
eworICAgICAgICBwcmludGYoIldlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6IGdsWENo
b29zZUZCQ29uZmlnIHJldHVybmVkIDAgZWxlbWVudHNcbiIpOworICAgICAgICBYRnJlZShjb25m
aWcpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIEdMWENvbnRleHQgY29udGV4
dCA9IHNfZ2wtPmNyZWF0ZU5ld0NvbnRleHQoY29uZmlnWzBdLCBHTFhfUkdCQV9UWVBFLCAwLCBU
cnVlKTsKKyAgICBpZiAoIWNvbnRleHQpIHsKKyAgICAgICAgcHJpbnRmKCJXZWJHcmFwaGljc0Nv
bnRleHQzRERlZmF1bHRJbXBsOiBnbFhDcmVhdGVOZXdDb250ZXh0IGZhaWxlZFxuIik7CisgICAg
ICAgIFhGcmVlKGNvbmZpZyk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgaW50
IHBidWZmZXJBdHRyc1tdID0geworICAgICAgICBHTFhfUEJVRkZFUl9XSURUSCwKKyAgICAgICAg
MSwKKyAgICAgICAgR0xYX1BCVUZGRVJfSEVJR0hULAorICAgICAgICAxLAorICAgICAgICAwCisg
ICAgfTsKKyAgICBHTFhQYnVmZmVyIHBidWZmZXIgPSBzX2dsLT5jcmVhdGVQYnVmZmVyKGNvbmZp
Z1swXSwgcGJ1ZmZlckF0dHJzKTsKKyAgICBYRnJlZShjb25maWcpOworICAgIGlmICghcGJ1ZmZl
cikgeworICAgICAgICBwcmludGYoIldlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6IGds
eENyZWF0ZVBidWZmZXIgZmFpbGVkXG4iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KyAgICBpZiAoIXNfZ2wtPm1ha2VDdXJyZW50KHBidWZmZXIsIGNvbnRleHQpKSB7CisgICAgICAg
IHByaW50ZigiV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDogZ2xYTWFrZUN1cnJlbnQg
ZmFpbGVkXG4iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBtX2NvbnRleHRP
YmogPSBjb250ZXh0OworICAgIG1fcGJ1ZmZlciA9IHBidWZmZXI7CisjZWxzZQorI2Vycm9yIE11
c3QgcG9ydCB0byB5b3VyIHBsYXRmb3JtCisjZW5kaWYKKworICAgIGlmICghc19pbml0aWFsaXpl
ZEdMRVcpIHsKKyAgICAgICAgLy8gSW5pdGlhbGl6ZSBHTEVXIGFuZCBjaGVjayBmb3IgR0wgMi4w
IHN1cHBvcnQgYnkgdGhlIGRyaXZlcnMuCisgICAgICAgIEdMZW51bSBnbGV3SW5pdFJlc3VsdCA9
IGdsZXdJbml0KCk7CisgICAgICAgIGlmIChnbGV3SW5pdFJlc3VsdCAhPSBHTEVXX09LKSB7Cisg
ICAgICAgICAgICBwcmludGYoIldlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6IEdMRVcg
aW5pdGlhbGl6YXRpb24gZmFpbGVkXG4iKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgfQorICAgICAgICBpZiAoIWdsZXdJc1N1cHBvcnRlZCgiR0xfVkVSU0lPTl8yXzAiKSkg
eworICAgICAgICAgICAgcHJpbnRmKCJXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOiBP
cGVuR0wgMi4wIG5vdCBzdXBwb3J0ZWRcbiIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9CisgICAgICAgIHNfaW5pdGlhbGl6ZWRHTEVXID0gdHJ1ZTsKKyAgICB9CisKKyAg
ICBtX2luaXRpYWxpemVkID0gdHJ1ZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBXZWJH
cmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjptYWtlQ29udGV4dEN1cnJlbnQoKQoreworI2lm
IE9TKFdJTkRPV1MpCisgICAgaWYgKHdnbEdldEN1cnJlbnRDb250ZXh0KCkgIT0gbV9jb250ZXh0
T2JqKQorICAgICAgICBpZiAod2dsTWFrZUN1cnJlbnQobV9jYW52YXNEQywgbV9jb250ZXh0T2Jq
KSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworI2VsaWYgUExBVEZPUk0oQ0cpCisgICAgaWYg
KENHTEdldEN1cnJlbnRDb250ZXh0KCkgIT0gbV9jb250ZXh0T2JqKQorICAgICAgICBpZiAoQ0dM
U2V0Q3VycmVudENvbnRleHQobV9jb250ZXh0T2JqKSA9PSBrQ0dMTm9FcnJvcikKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworI2VsaWYgT1MoTElOVVgpCisgICAgaWYgKHNfZ2wtPmdldEN1cnJl
bnRDb250ZXh0KCkgIT0gbV9jb250ZXh0T2JqKQorICAgICAgICBpZiAoc19nbC0+bWFrZUN1cnJl
bnQobV9wYnVmZmVyLCBtX2NvbnRleHRPYmopKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisj
ZWxzZQorI2Vycm9yIE11c3QgcG9ydCB0byB5b3VyIHBsYXRmb3JtCisjZW5kaWYKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKK2ludCBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjp3aWR0
aCgpCit7CisgICAgcmV0dXJuIG1fY2FjaGVkV2lkdGg7Cit9CisKK2ludCBXZWJHcmFwaGljc0Nv
bnRleHQzRERlZmF1bHRJbXBsOjpoZWlnaHQoKQoreworICAgIHJldHVybiBtX2NhY2hlZEhlaWdo
dDsKK30KKworaW50IFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OnNpemVJbkJ5dGVz
KGludCB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgR0xfQllURToKKyAg
ICAgICAgcmV0dXJuIHNpemVvZihHTGJ5dGUpOworICAgIGNhc2UgR0xfVU5TSUdORURfQllURToK
KyAgICAgICAgcmV0dXJuIHNpemVvZihHTHVieXRlKTsKKyAgICBjYXNlIEdMX1NIT1JUOgorICAg
ICAgICByZXR1cm4gc2l6ZW9mKEdMc2hvcnQpOworICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlQ6
CisgICAgICAgIHJldHVybiBzaXplb2YoR0x1c2hvcnQpOworICAgIGNhc2UgR0xfSU5UOgorICAg
ICAgICByZXR1cm4gc2l6ZW9mKEdMaW50KTsKKyAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVDoKKyAg
ICAgICAgcmV0dXJuIHNpemVvZihHTHVpbnQpOworICAgIGNhc2UgR0xfRkxPQVQ6CisgICAgICAg
IHJldHVybiBzaXplb2YoR0xmbG9hdCk7CisgICAgfQorICAgIHJldHVybiAwOworfQorCitzdGF0
aWMgaW50IGNyZWF0ZVRleHR1cmVPYmplY3QoR0xlbnVtIHRhcmdldCkKK3sKKyAgICBHTHVpbnQg
dGV4dHVyZSA9IDA7CisgICAgZ2xHZW5UZXh0dXJlcygxLCAmdGV4dHVyZSk7CisgICAgZ2xCaW5k
VGV4dHVyZSh0YXJnZXQsIHRleHR1cmUpOworICAgIGdsVGV4UGFyYW1ldGVyZih0YXJnZXQsIEdM
X1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTkVBUkVTVCk7CisgICAgZ2xUZXhQYXJhbWV0ZXJmKHRh
cmdldCwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9ORUFSRVNUKTsKKyAgICByZXR1cm4gdGV4
dHVyZTsKK30KKwordm9pZCBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpyZXNoYXBl
KGludCB3aWR0aCwgaW50IGhlaWdodCkKK3sKKyNpZmRlZiBSRU5ERVJfVE9fREVCVUdHSU5HX1dJ
TkRPVworICAgIFNldFdpbmRvd1BvcyhtX2NhbnZhc1dpbmRvdywgSFdORF9UT1AsIDAsIDAsIHdp
ZHRoLCBoZWlnaHQsCisgICAgICAgICAgICAgICAgIFNXUF9OT01PVkUpOworICAgIFNob3dXaW5k
b3cobV9jYW52YXNXaW5kb3csIFNXX1NIT1cpOworI2VuZGlmCisKKyAgICBtX2NhY2hlZFdpZHRo
ID0gd2lkdGg7CisgICAgbV9jYWNoZWRIZWlnaHQgPSBoZWlnaHQ7CisgICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisKKyNpZm5kZWYgUkVOREVSX1RPX0RFQlVHR0lOR19XSU5ET1cKKyNpZmRlZiBV
U0VfVEVYVFVSRV9SRUNUQU5HTEVfRk9SX0ZSQU1FQlVGRkVSCisgICAgLy8gR0xfVEVYVFVSRV9S
RUNUQU5HTEVfQVJCIGlzIHRoZSBiZXN0IHN1cHBvcnRlZCByZW5kZXIgdGFyZ2V0IG9uIE1hYyBP
UyBYCisgICAgR0xlbnVtIHRhcmdldCA9IEdMX1RFWFRVUkVfUkVDVEFOR0xFX0FSQjsKKyNlbHNl
CisgICAgR0xlbnVtIHRhcmdldCA9IEdMX1RFWFRVUkVfMkQ7CisjZW5kaWYKKyAgICBpZiAoIW1f
dGV4dHVyZSkgeworICAgICAgICAvLyBHZW5lcmF0ZSB0aGUgdGV4dHVyZSBvYmplY3QKKyAgICAg
ICAgbV90ZXh0dXJlID0gY3JlYXRlVGV4dHVyZU9iamVjdCh0YXJnZXQpOworICAgICAgICAvLyBH
ZW5lcmF0ZSB0aGUgZnJhbWVidWZmZXIgb2JqZWN0CisgICAgICAgIGdsR2VuRnJhbWVidWZmZXJz
RVhUKDEsICZtX2Zibyk7CisgICAgICAgIC8vIEdlbmVyYXRlIHRoZSBkZXB0aCBidWZmZXIKKyAg
ICAgICAgZ2xHZW5SZW5kZXJidWZmZXJzRVhUKDEsICZtX2RlcHRoQnVmZmVyKTsKKyAgICB9CisK
KyAgICAvLyBSZWFsbG9jYXRlIHRoZSBjb2xvciBhbmQgZGVwdGggYnVmZmVycworICAgIGdsQmlu
ZFRleHR1cmUodGFyZ2V0LCBtX3RleHR1cmUpOworICAgIGdsVGV4SW1hZ2UyRCh0YXJnZXQsIDAs
IEdMX1JHQkE4LCB3aWR0aCwgaGVpZ2h0LCAwLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCAw
KTsKKyAgICBnbEJpbmRUZXh0dXJlKHRhcmdldCwgMCk7CisKKyAgICBnbEJpbmRGcmFtZWJ1ZmZl
ckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fZmJvKTsKKyAgICBtX2JvdW5kRkJPID0gbV9mYm87
CisgICAgZ2xCaW5kUmVuZGVyYnVmZmVyRVhUKEdMX1JFTkRFUkJVRkZFUl9FWFQsIG1fZGVwdGhC
dWZmZXIpOworICAgIGdsUmVuZGVyYnVmZmVyU3RvcmFnZUVYVChHTF9SRU5ERVJCVUZGRVJfRVhU
LCBHTF9ERVBUSF9DT01QT05FTlQsIHdpZHRoLCBoZWlnaHQpOworICAgIGdsQmluZFJlbmRlcmJ1
ZmZlckVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCAwKTsKKworICAgIGdsRnJhbWVidWZmZXJUZXh0
dXJlMkRFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBHTF9DT0xPUl9BVFRBQ0hNRU5UMF9FWFQsIHRh
cmdldCwgbV90ZXh0dXJlLCAwKTsKKyAgICBnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyRVhUKEdM
X0ZSQU1FQlVGRkVSX0VYVCwgR0xfREVQVEhfQVRUQUNITUVOVF9FWFQsIEdMX1JFTkRFUkJVRkZF
Ul9FWFQsIG1fZGVwdGhCdWZmZXIpOworICAgIEdMZW51bSBzdGF0dXMgPSBnbENoZWNrRnJhbWVi
dWZmZXJTdGF0dXNFWFQoR0xfRlJBTUVCVUZGRVJfRVhUKTsKKyAgICBpZiAoc3RhdHVzICE9IEdM
X0ZSQU1FQlVGRkVSX0NPTVBMRVRFX0VYVCkgeworICAgICAgICBwcmludGYoIldlYkdyYXBoaWNz
Q29udGV4dDNERGVmYXVsdEltcGw6IGZyYW1lYnVmZmVyIHdhcyBpbmNvbXBsZXRlXG4iKTsKKwor
ICAgICAgICAvLyBGSVhNRTogY2xlYW51cC4KKyAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAg
ICB9CisjZW5kaWYgLy8gUkVOREVSX1RPX0RFQlVHR0lOR19XSU5ET1cKKworI2lmZGVmIEZMSVBf
RlJBTUVCVUZGRVJfVkVSVElDQUxMWQorICAgIGlmIChtX3NjYW5saW5lKSB7CisgICAgICAgIGRl
bGV0ZVtdIG1fc2NhbmxpbmU7CisgICAgICAgIG1fc2NhbmxpbmUgPSAwOworICAgIH0KKyAgICBt
X3NjYW5saW5lID0gbmV3IHVuc2lnbmVkIGNoYXJbd2lkdGggKiA0XTsKKyNlbmRpZiAvLyBGTElQ
X0ZSQU1FQlVGRkVSX1ZFUlRJQ0FMTFkKKworICAgIGdsQ2xlYXIoR0xfQ09MT1JfQlVGRkVSX0JJ
VCk7CisKK30KKworI2lmZGVmIEZMSVBfRlJBTUVCVUZGRVJfVkVSVElDQUxMWQordm9pZCBXZWJH
cmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpmbGlwVmVydGljYWxseSh1bnNpZ25lZCBjaGFy
KiBmcmFtZWJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdW5zaWduZWQgaW50IHdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgaGVpZ2h0KQoreworICAg
IHVuc2lnbmVkIGNoYXIqIHNjYW5saW5lID0gbV9zY2FubGluZTsKKyAgICBpZiAoIXNjYW5saW5l
KQorICAgICAgICByZXR1cm47CisgICAgdW5zaWduZWQgaW50IHJvd0J5dGVzID0gd2lkdGggKiA0
OworICAgIHVuc2lnbmVkIGludCBjb3VudCA9IGhlaWdodCAvIDI7CisgICAgZm9yICh1bnNpZ25l
ZCBpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisgICAgICAgIHVuc2lnbmVkIGNoYXIqIHJv
d0EgPSBmcmFtZWJ1ZmZlciArIGkgKiByb3dCeXRlczsKKyAgICAgICAgdW5zaWduZWQgY2hhciog
cm93QiA9IGZyYW1lYnVmZmVyICsgKGhlaWdodCAtIGkgLSAxKSAqIHJvd0J5dGVzOworICAgICAg
ICAvLyBGSVhNRTogdGhpcyBpcyB3aGVyZSB0aGUgbXVsdGlwbGljYXRpb24gb2YgdGhlIGFscGhh
CisgICAgICAgIC8vIGNoYW5uZWwgaW50byB0aGUgY29sb3IgYnVmZmVyIHdpbGwgbmVlZCB0byBv
Y2N1ciBpZiB0aGUKKyAgICAgICAgLy8gdXNlciBzcGVjaWZpZXMgdGhlICJwcmVtdWx0aXBseUFs
cGhhIiBmbGFnIGluIHRoZSBjb250ZXh0CisgICAgICAgIC8vIGNyZWF0aW9uIGF0dHJpYnV0ZXMu
CisgICAgICAgIG1lbWNweShzY2FubGluZSwgcm93Qiwgcm93Qnl0ZXMpOworICAgICAgICBtZW1j
cHkocm93Qiwgcm93QSwgcm93Qnl0ZXMpOworICAgICAgICBtZW1jcHkocm93QSwgc2NhbmxpbmUs
IHJvd0J5dGVzKTsKKyAgICB9Cit9CisjZW5kaWYKKworYm9vbCBXZWJHcmFwaGljc0NvbnRleHQz
RERlZmF1bHRJbXBsOjpyZWFkQmFja0ZyYW1lYnVmZmVyKHVuc2lnbmVkIGNoYXIqIHBpeGVscywg
c2l6ZV90IGJ1ZmZlclNpemUpCit7CisgICAgaWYgKGJ1ZmZlclNpemUgIT0gc3RhdGljX2Nhc3Q8
c2l6ZV90Pig0ICogd2lkdGgoKSAqIGhlaWdodCgpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisKKyNpZmRlZiBSRU5ERVJfVE9fREVCVUdHSU5H
X1dJTkRPVworICAgIFN3YXBCdWZmZXJzKG1fY2FudmFzREMpOworI2Vsc2UKKyAgICAvLyBFYXJs
aWVyIHZlcnNpb25zIG9mIHRoaXMgY29kZSB1c2VkIHRoZSBHUFUgdG8gZmxpcCB0aGUKKyAgICAv
LyBmcmFtZWJ1ZmZlciB2ZXJ0aWNhbGx5IGJlZm9yZSByZWFkaW5nIGl0IGJhY2sgZm9yIGNvbXBv
c2l0aW5nCisgICAgLy8gdmlhIHNvZnR3YXJlLiBUaGlzIGNvZGUgd2FzIHF1aXRlIGNvbXBsaWNh
dGVkLCB1c2VkIGEgbG90IG9mCisgICAgLy8gR1BVIG1lbW9yeSwgYW5kIGRpZG4ndCBwcm92aWRl
IGFuIG9idmlvdXMgc3BlZWR1cC4gU2luY2UgdGhpcworICAgIC8vIHZlcnRpY2FsIGZsaXAgaXMg
b25seSBhIHRlbXBvcmFyeSBzb2x1dGlvbiBhbnl3YXkgdW50aWwgQ2hyb21lCisgICAgLy8gaXMg
ZnVsbHkgR1BVIGNvbXBvc2l0ZWQsIGl0IHdhc24ndCB3b3J0aCB0aGUgY29tcGxleGl0eS4KKwor
ICAgIGJvb2wgbXVzdFJlc3RvcmVGQk8gPSAobV9ib3VuZEZCTyAhPSBtX2Zibyk7CisgICAgaWYg
KG11c3RSZXN0b3JlRkJPKQorICAgICAgICBnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJV
RkZFUl9FWFQsIG1fZmJvKTsKKyNpZiBQTEFURk9STShTS0lBKQorICAgIGdsUmVhZFBpeGVscygw
LCAwLCBtX2NhY2hlZFdpZHRoLCBtX2NhY2hlZEhlaWdodCwgR0xfQkdSQSwgR0xfVU5TSUdORURf
QllURSwgcGl4ZWxzKTsKKyNlbGlmIFBMQVRGT1JNKENHKQorICAgIGdsUmVhZFBpeGVscygwLCAw
LCBtX2NhY2hlZFdpZHRoLCBtX2NhY2hlZEhlaWdodCwgR0xfQkdSQSwgR0xfVU5TSUdORURfSU5U
XzhfOF84XzhfUkVWLCBwaXhlbHMpOworI2Vsc2UKKyNlcnJvciBNdXN0IHBvcnQgdG8geW91ciBw
bGF0Zm9ybQorI2VuZGlmCisKKyAgICBpZiAobXVzdFJlc3RvcmVGQk8pCisgICAgICAgIGdsQmlu
ZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9ib3VuZEZCTyk7CisKKyNpZmRl
ZiBGTElQX0ZSQU1FQlVGRkVSX1ZFUlRJQ0FMTFkKKyAgICBpZiAocGl4ZWxzKQorICAgICAgICBm
bGlwVmVydGljYWxseShwaXhlbHMsIG1fY2FjaGVkV2lkdGgsIG1fY2FjaGVkSGVpZ2h0KTsKKyNl
bmRpZgorCisjZW5kaWYgLy8gUkVOREVSX1RPX0RFQlVHR0lOR19XSU5ET1cKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKwordm9pZCBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpzeW50aGVz
aXplR0xFcnJvcih1bnNpZ25lZCBsb25nIGVycm9yKQoreworICAgIG1fc3ludGhldGljRXJyb3Jz
LmFkZChlcnJvcik7Cit9CisKKy8vIEhlbHBlciBtYWNyb3MgdG8gcmVkdWNlIHRoZSBhbW91bnQg
b2YgY29kZS4KKworI2RlZmluZSBERUxFR0FURV9UT19HTChuYW1lLCBnbG5hbWUpICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK3ZvaWQgV2ViR3JhcGhpY3NDb250
ZXh0M0REZWZhdWx0SW1wbDo6bmFtZSgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg
ICBnbCMjZ2xuYW1lKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCit9CisKKyNkZWZpbmUgREVMRUdBVEVfVE9fR0xfMShuYW1l
LCBnbG5hbWUsIHQxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit2b2lk
IFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6Om5hbWUodDEgYTEpICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAoreyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCisgICAgZ2wjI2dsbmFtZShhMSk7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfQorCisjZGVmaW5lIERFTEVH
QVRFX1RPX0dMXzFSKG5hbWUsIGdsbmFtZSwgdDEsIHJ0KSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorcnQgV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6bmFtZSh0MSBh
MSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK3sgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHJldHVybiBnbCMjZ2xuYW1lKGExKTsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30K
KworI2RlZmluZSBERUxFR0FURV9UT19HTF8yKG5hbWUsIGdsbmFtZSwgdDEsIHQyKSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKK3ZvaWQgV2ViR3JhcGhpY3NDb250ZXh0M0REZWZh
dWx0SW1wbDo6bmFtZSh0MSBhMSwgdDIgYTIpICAgICAgICAgICAgICAgICAgICAgICBcCit7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBnbCMjZ2xu
YW1lKGExLCBhMik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCit9CisKKyNkZWZpbmUgREVMRUdBVEVfVE9fR0xfMlIobmFtZSwgZ2xuYW1l
LCB0MSwgdDIsIHJ0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCitydCBXZWJHcmFwaGlj
c0NvbnRleHQzRERlZmF1bHRJbXBsOjpuYW1lKHQxIGExLCB0MiBhMikgICAgICAgICAgICAgICAg
ICAgICAgICAgXAoreyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCisgICAgcmV0dXJuIGdsIyNnbG5hbWUoYTEsIGEyKTsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfQorCisjZGVmaW5lIERFTEVHQVRFX1RPX0dM
XzMobmFtZSwgZ2xuYW1lLCB0MSwgdDIsIHQzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAordm9pZCBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpuYW1lKHQxIGExLCB0MiBh
MiwgdDMgYTMpICAgICAgICAgICAgICAgIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorICAgIGdsIyNnbG5hbWUoYTEsIGEyLCBhMyk7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30KKworI2RlZmlu
ZSBERUxFR0FURV9UT19HTF80KG5hbWUsIGdsbmFtZSwgdDEsIHQyLCB0MywgdDQpICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKK3ZvaWQgV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6
bmFtZSh0MSBhMSwgdDIgYTIsIHQzIGEzLCB0NCBhNCkgICAgICAgICBcCit7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBnbCMjZ2xuYW1lKGExLCBh
MiwgYTMsIGE0KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCit9CisKKyNkZWZpbmUgREVMRUdBVEVfVE9fR0xfNShuYW1lLCBnbG5hbWUsIHQxLCB0Miwg
dDMsIHQ0LCB0NSkgICAgICAgICAgICAgICAgICAgICBcCit2b2lkIFdlYkdyYXBoaWNzQ29udGV4
dDNERGVmYXVsdEltcGw6Om5hbWUodDEgYTEsIHQyIGEyLCB0MyBhMywgdDQgYTQsIHQ1IGE1KSAg
XAoreyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAg
Z2wjI2dsbmFtZShhMSwgYTIsIGEzLCBhNCwgYTUpOyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorfQorCisjZGVmaW5lIERFTEVHQVRFX1RPX0dMXzYobmFtZSwg
Z2xuYW1lLCB0MSwgdDIsIHQzLCB0NCwgdDUsIHQ2KSAgICAgICAgICAgICAgICAgXAordm9pZCBX
ZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpuYW1lKHQxIGExLCB0MiBhMiwgdDMgYTMs
IHQ0IGE0LCB0NSBhNSwgdDYgYTYpIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgIGdsIyNnbG5hbWUoYTEsIGEyLCBhMywgYTQsIGE1LCBhNik7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30KKworI2RlZmluZSBE
RUxFR0FURV9UT19HTF83KG5hbWUsIGdsbmFtZSwgdDEsIHQyLCB0MywgdDQsIHQ1LCB0NiwgdDcp
ICAgICAgICAgICAgIFwKK3ZvaWQgV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6bmFt
ZSh0MSBhMSwgdDIgYTIsIHQzIGEzLCB0NCBhNCwgdDUgYTUsIHQ2IGE2LCB0NyBhNykgXAoreyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZ2wjI2ds
bmFtZShhMSwgYTIsIGEzLCBhNCwgYTUsIGE2LCBhNyk7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAorfQorCisjZGVmaW5lIERFTEVHQVRFX1RPX0dMXzgobmFtZSwgZ2xuYW1l
LCB0MSwgdDIsIHQzLCB0NCwgdDUsIHQ2LCB0NywgdDgpICAgICAgICAgXAordm9pZCBXZWJHcmFw
aGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpuYW1lKHQxIGExLCB0MiBhMiwgdDMgYTMsIHQ0IGE0
LCB0NSBhNSwgdDYgYTYsIHQ3IGE3LCB0OCBhOCkgXAoreyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
KyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZ2wjI2dsbmFtZShhMSwgYTIsIGEzLCBhNCwg
YTUsIGE2LCBhNywgYTgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfQorCisj
ZGVmaW5lIERFTEVHQVRFX1RPX0dMXzkobmFtZSwgZ2xuYW1lLCB0MSwgdDIsIHQzLCB0NCwgdDUs
IHQ2LCB0NywgdDgsIHQ5KSAgICAgXAordm9pZCBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJ
bXBsOjpuYW1lKHQxIGExLCB0MiBhMiwgdDMgYTMsIHQ0IGE0LCB0NSBhNSwgdDYgYTYsIHQ3IGE3
LCB0OCBhOCwgdDkgYTkpIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorICAgIGdsIyNnbG5hbWUoYTEsIGEyLCBhMywgYTQsIGE1LCBhNiwgYTcsIGE4
LCBhOSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30KKwordm9pZCBXZWJHcmFwaGlj
c0NvbnRleHQzRERlZmF1bHRJbXBsOjphY3RpdmVUZXh0dXJlKHVuc2lnbmVkIGxvbmcgdGV4dHVy
ZSkKK3sKKyAgICAvLyBGSVhNRTogcXVlcnkgbnVtYmVyIG9mIHRleHR1cmVzIGF2YWlsYWJsZS4K
KyAgICBpZiAodGV4dHVyZSA8IEdMX1RFWFRVUkUwIHx8IHRleHR1cmUgPiBHTF9URVhUVVJFMCsz
MikKKyAgICAgICAgLy8gRklYTUU6IHJhaXNlIGV4Y2VwdGlvbi4KKyAgICAgICAgcmV0dXJuOwor
CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgZ2xBY3RpdmVUZXh0dXJlKHRleHR1cmUp
OworfQorCitERUxFR0FURV9UT19HTF8yKGF0dGFjaFNoYWRlciwgQXR0YWNoU2hhZGVyLCBXZWJH
TElkLCBXZWJHTElkKQorCitERUxFR0FURV9UT19HTF8zKGJpbmRBdHRyaWJMb2NhdGlvbiwgQmlu
ZEF0dHJpYkxvY2F0aW9uLCBXZWJHTElkLCB1bnNpZ25lZCBsb25nLCBjb25zdCBjaGFyKikKKwor
dm9pZCBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpiaW5kQnVmZmVyKHVuc2lnbmVk
IGxvbmcgdGFyZ2V0LCBXZWJHTElkIGJ1ZmZlcikKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICBpZiAodGFyZ2V0ID09IEdMX0FSUkFZX0JVRkZFUikKKyAgICAgICAgbV9ib3VuZEFy
cmF5QnVmZmVyID0gYnVmZmVyOworICAgIGdsQmluZEJ1ZmZlcih0YXJnZXQsIGJ1ZmZlcik7Cit9
CisKK3ZvaWQgV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6YmluZEZyYW1lYnVmZmVy
KHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBXZWJHTElkIGZyYW1lYnVmZmVyKQoreworICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOworICAgIGlmICghZnJhbWVidWZmZXIpCisgICAgICAgIGZyYW1lYnVm
ZmVyID0gbV9mYm87CisgICAgZ2xCaW5kRnJhbWVidWZmZXJFWFQodGFyZ2V0LCBmcmFtZWJ1ZmZl
cik7CisgICAgbV9ib3VuZEZCTyA9IGZyYW1lYnVmZmVyOworfQorCitERUxFR0FURV9UT19HTF8y
KGJpbmRSZW5kZXJidWZmZXIsIEJpbmRSZW5kZXJidWZmZXJFWFQsIHVuc2lnbmVkIGxvbmcsIFdl
YkdMSWQpCisKK0RFTEVHQVRFX1RPX0dMXzIoYmluZFRleHR1cmUsIEJpbmRUZXh0dXJlLCB1bnNp
Z25lZCBsb25nLCBXZWJHTElkKQorCitERUxFR0FURV9UT19HTF80KGJsZW5kQ29sb3IsIEJsZW5k
Q29sb3IsIGRvdWJsZSwgZG91YmxlLCBkb3VibGUsIGRvdWJsZSkKKworREVMRUdBVEVfVE9fR0xf
MShibGVuZEVxdWF0aW9uLCBCbGVuZEVxdWF0aW9uLCB1bnNpZ25lZCBsb25nKQorCitERUxFR0FU
RV9UT19HTF8yKGJsZW5kRXF1YXRpb25TZXBhcmF0ZSwgQmxlbmRFcXVhdGlvblNlcGFyYXRlLCB1
bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKQorCitERUxFR0FURV9UT19HTF8yKGJsZW5kRnVu
YywgQmxlbmRGdW5jLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKQorCitERUxFR0FURV9U
T19HTF80KGJsZW5kRnVuY1NlcGFyYXRlLCBCbGVuZEZ1bmNTZXBhcmF0ZSwgdW5zaWduZWQgbG9u
ZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZykKKworREVMRUdB
VEVfVE9fR0xfNChidWZmZXJEYXRhLCBCdWZmZXJEYXRhLCB1bnNpZ25lZCBsb25nLCBpbnQsIGNv
bnN0IHZvaWQqLCB1bnNpZ25lZCBsb25nKQorCitERUxFR0FURV9UT19HTF80KGJ1ZmZlclN1YkRh
dGEsIEJ1ZmZlclN1YkRhdGEsIHVuc2lnbmVkIGxvbmcsIGxvbmcsIGludCwgY29uc3Qgdm9pZCop
CisKK0RFTEVHQVRFX1RPX0dMXzFSKGNoZWNrRnJhbWVidWZmZXJTdGF0dXMsIENoZWNrRnJhbWVi
dWZmZXJTdGF0dXNFWFQsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpCisKK0RFTEVHQVRF
X1RPX0dMXzEoY2xlYXIsIENsZWFyLCB1bnNpZ25lZCBsb25nKQorCitERUxFR0FURV9UT19HTF80
KGNsZWFyQ29sb3IsIENsZWFyQ29sb3IsIGRvdWJsZSwgZG91YmxlLCBkb3VibGUsIGRvdWJsZSkK
KworREVMRUdBVEVfVE9fR0xfMShjbGVhckRlcHRoLCBDbGVhckRlcHRoLCBkb3VibGUpCisKK0RF
TEVHQVRFX1RPX0dMXzEoY2xlYXJTdGVuY2lsLCBDbGVhclN0ZW5jaWwsIGxvbmcpCisKK0RFTEVH
QVRFX1RPX0dMXzQoY29sb3JNYXNrLCBDb2xvck1hc2ssIGJvb2wsIGJvb2wsIGJvb2wsIGJvb2wp
CisKK0RFTEVHQVRFX1RPX0dMXzEoY29tcGlsZVNoYWRlciwgQ29tcGlsZVNoYWRlciwgV2ViR0xJ
ZCkKKworREVMRUdBVEVfVE9fR0xfOChjb3B5VGV4SW1hZ2UyRCwgQ29weVRleEltYWdlMkQsIHVu
c2lnbmVkIGxvbmcsIGxvbmcsIHVuc2lnbmVkIGxvbmcsIGxvbmcsIGxvbmcsIHVuc2lnbmVkIGxv
bmcsIHVuc2lnbmVkIGxvbmcsIGxvbmcpCisKK0RFTEVHQVRFX1RPX0dMXzgoY29weVRleFN1Yklt
YWdlMkQsIENvcHlUZXhTdWJJbWFnZTJELCB1bnNpZ25lZCBsb25nLCBsb25nLCBsb25nLCBsb25n
LCBsb25nLCBsb25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKQorCitERUxFR0FURV9U
T19HTF8xKGN1bGxGYWNlLCBDdWxsRmFjZSwgdW5zaWduZWQgbG9uZykKKworREVMRUdBVEVfVE9f
R0xfMShkZXB0aEZ1bmMsIERlcHRoRnVuYywgdW5zaWduZWQgbG9uZykKKworREVMRUdBVEVfVE9f
R0xfMShkZXB0aE1hc2ssIERlcHRoTWFzaywgYm9vbCkKKworREVMRUdBVEVfVE9fR0xfMihkZXB0
aFJhbmdlLCBEZXB0aFJhbmdlLCBkb3VibGUsIGRvdWJsZSkKKworREVMRUdBVEVfVE9fR0xfMihk
ZXRhY2hTaGFkZXIsIERldGFjaFNoYWRlciwgV2ViR0xJZCwgV2ViR0xJZCkKKworREVMRUdBVEVf
VE9fR0xfMShkaXNhYmxlLCBEaXNhYmxlLCB1bnNpZ25lZCBsb25nKQorCit2b2lkIFdlYkdyYXBo
aWNzQ29udGV4dDNERGVmYXVsdEltcGw6OmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheSh1bnNpZ25l
ZCBsb25nIGluZGV4KQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmIChpbmRl
eCA8IE51bVRyYWNrZWRQb2ludGVyU3RhdGVzKQorICAgICAgICBtX3ZlcnRleEF0dHJpYlBvaW50
ZXJTdGF0ZVtpbmRleF0uZW5hYmxlZCA9IGZhbHNlOworICAgIGdsRGlzYWJsZVZlcnRleEF0dHJp
YkFycmF5KGluZGV4KTsKK30KKworREVMRUdBVEVfVE9fR0xfMyhkcmF3QXJyYXlzLCBEcmF3QXJy
YXlzLCB1bnNpZ25lZCBsb25nLCBsb25nLCBsb25nKQorCit2b2lkIFdlYkdyYXBoaWNzQ29udGV4
dDNERGVmYXVsdEltcGw6OmRyYXdFbGVtZW50cyh1bnNpZ25lZCBsb25nIG1vZGUsIHVuc2lnbmVk
IGxvbmcgY291bnQsIHVuc2lnbmVkIGxvbmcgdHlwZSwgbG9uZyBvZmZzZXQpCit7CisgICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CisgICAgZ2xEcmF3RWxlbWVudHMobW9kZSwgY291bnQsIHR5cGUs
CisgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oc3RhdGljX2Nhc3Q8
aW50cHRyX3Q+KG9mZnNldCkpKTsKK30KKworREVMRUdBVEVfVE9fR0xfMShlbmFibGUsIEVuYWJs
ZSwgdW5zaWduZWQgbG9uZykKKwordm9pZCBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBs
OjplbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSh1bnNpZ25lZCBsb25nIGluZGV4KQoreworICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmIChpbmRleCA8IE51bVRyYWNrZWRQb2ludGVyU3Rh
dGVzKQorICAgICAgICBtX3ZlcnRleEF0dHJpYlBvaW50ZXJTdGF0ZVtpbmRleF0uZW5hYmxlZCA9
IHRydWU7CisgICAgZ2xFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShpbmRleCk7Cit9CisKK0RFTEVH
QVRFX1RPX0dMKGZpbmlzaCwgRmluaXNoKQorCitERUxFR0FURV9UT19HTChmbHVzaCwgRmx1c2gp
CisKK0RFTEVHQVRFX1RPX0dMXzQoZnJhbWVidWZmZXJSZW5kZXJidWZmZXIsIEZyYW1lYnVmZmVy
UmVuZGVyYnVmZmVyRVhULCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBs
b25nLCBXZWJHTElkKQorCitERUxFR0FURV9UT19HTF81KGZyYW1lYnVmZmVyVGV4dHVyZTJELCBG
cmFtZWJ1ZmZlclRleHR1cmUyREVYVCwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgdW5z
aWduZWQgbG9uZywgV2ViR0xJZCwgbG9uZykKKworREVMRUdBVEVfVE9fR0xfMShmcm9udEZhY2Us
IEZyb250RmFjZSwgdW5zaWduZWQgbG9uZykKKwordm9pZCBXZWJHcmFwaGljc0NvbnRleHQzRERl
ZmF1bHRJbXBsOjpnZW5lcmF0ZU1pcG1hcCh1bnNpZ25lZCBsb25nIHRhcmdldCkKK3sKKyAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoZ2xHZW5lcmF0ZU1pcG1hcEVYVCkKKyAgICAg
ICAgZ2xHZW5lcmF0ZU1pcG1hcEVYVCh0YXJnZXQpOworICAgIC8vIEZJWE1FOiBwcm92aWRlIGFs
dGVybmF0aXZlIGNvZGUgcGF0aD8gVGhpcyB3aWxsIGJlIHVucGxlYXNhbnQKKyAgICAvLyB0byBp
bXBsZW1lbnQgaWYgZ2xHZW5lcmF0ZU1pcG1hcEVYVCBpcyBub3QgYXZhaWxhYmxlIC0tIGl0IHdp
bGwKKyAgICAvLyByZXF1aXJlIGEgdGV4dHVyZSByZWFkYmFjayBhbmQgcmUtdXBsb2FkLgorfQor
Citib29sIFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OmdldEFjdGl2ZUF0dHJpYihX
ZWJHTElkIHByb2dyYW0sIHVuc2lnbmVkIGxvbmcgaW5kZXgsIEFjdGl2ZUluZm8mIGluZm8pCit7
CisgICAgaWYgKCFwcm9ncmFtKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdMX0lOVkFM
SURfVkFMVUUpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIEdMaW50IG1heE5h
bWVMZW5ndGggPSAtMTsKKyAgICBnbEdldFByb2dyYW1pdihwcm9ncmFtLCBHTF9BQ1RJVkVfQVRU
UklCVVRFX01BWF9MRU5HVEgsICZtYXhOYW1lTGVuZ3RoKTsKKyAgICBpZiAobWF4TmFtZUxlbmd0
aCA8IDApCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBHTGNoYXIqIG5hbWUgPSAwOworICAg
IGlmICghdHJ5RmFzdE1hbGxvYyhtYXhOYW1lTGVuZ3RoICogc2l6ZW9mKEdMY2hhcikpLmdldFZh
bHVlKG5hbWUpKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdMX09VVF9PRl9NRU1PUlkp
OworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIEdMc2l6ZWkgbGVuZ3RoID0gMDsK
KyAgICBHTGludCBzaXplID0gLTE7CisgICAgR0xlbnVtIHR5cGUgPSAwOworICAgIGdsR2V0QWN0
aXZlQXR0cmliKHByb2dyYW0sIGluZGV4LCBtYXhOYW1lTGVuZ3RoLAorICAgICAgICAgICAgICAg
ICAgICAgICZsZW5ndGgsICZzaXplLCAmdHlwZSwgbmFtZSk7CisgICAgaWYgKHNpemUgPCAwKSB7
CisgICAgICAgIGZhc3RGcmVlKG5hbWUpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
ICAgIGluZm8ubmFtZSA9IFdlYlN0cmluZzo6ZnJvbVVURjgobmFtZSwgbGVuZ3RoKTsKKyAgICBp
bmZvLnR5cGUgPSB0eXBlOworICAgIGluZm8uc2l6ZSA9IHNpemU7CisgICAgZmFzdEZyZWUobmFt
ZSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgV2ViR3JhcGhpY3NDb250ZXh0M0REZWZh
dWx0SW1wbDo6Z2V0QWN0aXZlVW5pZm9ybShXZWJHTElkIHByb2dyYW0sIHVuc2lnbmVkIGxvbmcg
aW5kZXgsIEFjdGl2ZUluZm8mIGluZm8pCit7CisgICAgR0xpbnQgbWF4TmFtZUxlbmd0aCA9IC0x
OworICAgIGdsR2V0UHJvZ3JhbWl2KHByb2dyYW0sIEdMX0FDVElWRV9VTklGT1JNX01BWF9MRU5H
VEgsICZtYXhOYW1lTGVuZ3RoKTsKKyAgICBpZiAobWF4TmFtZUxlbmd0aCA8IDApCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBHTGNoYXIqIG5hbWUgPSAwOworICAgIGlmICghdHJ5RmFzdE1h
bGxvYyhtYXhOYW1lTGVuZ3RoICogc2l6ZW9mKEdMY2hhcikpLmdldFZhbHVlKG5hbWUpKSB7Cisg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorICAgIEdMc2l6ZWkgbGVuZ3RoID0gMDsKKyAgICBHTGludCBzaXpl
ID0gLTE7CisgICAgR0xlbnVtIHR5cGUgPSAwOworICAgIGdsR2V0QWN0aXZlVW5pZm9ybShwcm9n
cmFtLCBpbmRleCwgbWF4TmFtZUxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgJmxlbmd0
aCwgJnNpemUsICZ0eXBlLCBuYW1lKTsKKyAgICBpZiAoc2l6ZSA8IDApIHsKKyAgICAgICAgZmFz
dEZyZWUobmFtZSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgaW5mby5uYW1l
ID0gV2ViU3RyaW5nOjpmcm9tVVRGOChuYW1lLCBsZW5ndGgpOworICAgIGluZm8udHlwZSA9IHR5
cGU7CisgICAgaW5mby5zaXplID0gc2l6ZTsKKyAgICBmYXN0RnJlZShuYW1lKTsKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworREVMRUdBVEVfVE9fR0xfMlIoZ2V0QXR0cmliTG9jYXRpb24sIEdldEF0
dHJpYkxvY2F0aW9uLCBXZWJHTElkLCBjb25zdCBjaGFyKiwgaW50KQorCitERUxFR0FURV9UT19H
TF8yKGdldEJvb2xlYW52LCBHZXRCb29sZWFudiwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgY2hh
ciopCisKK0RFTEVHQVRFX1RPX0dMXzMoZ2V0QnVmZmVyUGFyYW1ldGVyaXYsIEdldEJ1ZmZlclBh
cmFtZXRlcml2LCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCBpbnQqKQorCitXZWJHcmFw
aGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBs
OjpnZXRDb250ZXh0QXR0cmlidXRlcygpCit7CisgICAgcmV0dXJuIG1fYXR0cmlidXRlczsKK30K
KwordW5zaWduZWQgbG9uZyBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpnZXRFcnJv
cigpCit7CisgICAgaWYgKG1fc3ludGhldGljRXJyb3JzLnNpemUoKSA+IDApIHsKKyAgICAgICAg
TGlzdEhhc2hTZXQ8dW5zaWduZWQgbG9uZz46Oml0ZXJhdG9yIGl0ZXIgPSBtX3N5bnRoZXRpY0Vy
cm9ycy5iZWdpbigpOworICAgICAgICB1bnNpZ25lZCBsb25nIGVyciA9ICppdGVyOworICAgICAg
ICBtX3N5bnRoZXRpY0Vycm9ycy5yZW1vdmUoaXRlcik7CisgICAgICAgIHJldHVybiBlcnI7Cisg
ICAgfQorCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgcmV0dXJuIGdsR2V0RXJyb3Io
KTsKK30KKworREVMRUdBVEVfVE9fR0xfMihnZXRGbG9hdHYsIEdldEZsb2F0diwgdW5zaWduZWQg
bG9uZywgZmxvYXQqKQorCitERUxFR0FURV9UT19HTF80KGdldEZyYW1lYnVmZmVyQXR0YWNobWVu
dFBhcmFtZXRlcml2LCBHZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpdkVYVCwgdW5z
aWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgaW50KikKKworREVMRUdB
VEVfVE9fR0xfMihnZXRJbnRlZ2VydiwgR2V0SW50ZWdlcnYsIHVuc2lnbmVkIGxvbmcsIGludCop
CisKK0RFTEVHQVRFX1RPX0dMXzMoZ2V0UHJvZ3JhbWl2LCBHZXRQcm9ncmFtaXYsIFdlYkdMSWQs
IHVuc2lnbmVkIGxvbmcsIGludCopCisKK1dlYlN0cmluZyBXZWJHcmFwaGljc0NvbnRleHQzRERl
ZmF1bHRJbXBsOjpnZXRQcm9ncmFtSW5mb0xvZyhXZWJHTElkIHByb2dyYW0pCit7CisgICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CisgICAgR0xpbnQgbG9nTGVuZ3RoOworICAgIGdsR2V0UHJvZ3Jh
bWl2KHByb2dyYW0sIEdMX0lORk9fTE9HX0xFTkdUSCwgJmxvZ0xlbmd0aCk7CisgICAgaWYgKCFs
b2dMZW5ndGgpCisgICAgICAgIHJldHVybiBXZWJTdHJpbmcoKTsKKyAgICBHTGNoYXIqIGxvZyA9
IDA7CisgICAgaWYgKCF0cnlGYXN0TWFsbG9jKGxvZ0xlbmd0aCAqIHNpemVvZihHTGNoYXIpKS5n
ZXRWYWx1ZShsb2cpKQorICAgICAgICByZXR1cm4gV2ViU3RyaW5nKCk7CisgICAgR0xzaXplaSBy
ZXR1cm5lZExvZ0xlbmd0aDsKKyAgICBnbEdldFByb2dyYW1JbmZvTG9nKHByb2dyYW0sIGxvZ0xl
bmd0aCwgJnJldHVybmVkTG9nTGVuZ3RoLCBsb2cpOworICAgIEFTU0VSVChsb2dMZW5ndGggPT0g
cmV0dXJuZWRMb2dMZW5ndGggKyAxKTsKKyAgICBXZWJTdHJpbmcgcmVzID0gV2ViU3RyaW5nOjpm
cm9tVVRGOChsb2csIHJldHVybmVkTG9nTGVuZ3RoKTsKKyAgICBmYXN0RnJlZShsb2cpOworICAg
IHJldHVybiByZXM7Cit9CisKK0RFTEVHQVRFX1RPX0dMXzMoZ2V0UmVuZGVyYnVmZmVyUGFyYW1l
dGVyaXYsIEdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcml2RVhULCB1bnNpZ25lZCBsb25nLCB1bnNp
Z25lZCBsb25nLCBpbnQqKQorCitERUxFR0FURV9UT19HTF8zKGdldFNoYWRlcml2LCBHZXRTaGFk
ZXJpdiwgV2ViR0xJZCwgdW5zaWduZWQgbG9uZywgaW50KikKKworV2ViU3RyaW5nIFdlYkdyYXBo
aWNzQ29udGV4dDNERGVmYXVsdEltcGw6OmdldFNoYWRlckluZm9Mb2coV2ViR0xJZCBzaGFkZXIp
Cit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgR0xpbnQgbG9nTGVuZ3RoOworICAg
IGdsR2V0U2hhZGVyaXYoc2hhZGVyLCBHTF9JTkZPX0xPR19MRU5HVEgsICZsb2dMZW5ndGgpOwor
ICAgIGlmICghbG9nTGVuZ3RoKQorICAgICAgICByZXR1cm4gV2ViU3RyaW5nKCk7CisgICAgR0xj
aGFyKiBsb2cgPSAwOworICAgIGlmICghdHJ5RmFzdE1hbGxvYyhsb2dMZW5ndGggKiBzaXplb2Yo
R0xjaGFyKSkuZ2V0VmFsdWUobG9nKSkKKyAgICAgICAgcmV0dXJuIFdlYlN0cmluZygpOworICAg
IEdMc2l6ZWkgcmV0dXJuZWRMb2dMZW5ndGg7CisgICAgZ2xHZXRTaGFkZXJJbmZvTG9nKHNoYWRl
ciwgbG9nTGVuZ3RoLCAmcmV0dXJuZWRMb2dMZW5ndGgsIGxvZyk7CisgICAgQVNTRVJUKGxvZ0xl
bmd0aCA9PSByZXR1cm5lZExvZ0xlbmd0aCArIDEpOworICAgIFdlYlN0cmluZyByZXMgPSBXZWJT
dHJpbmc6OmZyb21VVEY4KGxvZywgcmV0dXJuZWRMb2dMZW5ndGgpOworICAgIGZhc3RGcmVlKGxv
Zyk7CisgICAgcmV0dXJuIHJlczsKK30KKworV2ViU3RyaW5nIFdlYkdyYXBoaWNzQ29udGV4dDNE
RGVmYXVsdEltcGw6OmdldFNoYWRlclNvdXJjZShXZWJHTElkIHNoYWRlcikKK3sKKyAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKKyAgICBHTGludCBsb2dMZW5ndGg7CisgICAgZ2xHZXRTaGFkZXJp
dihzaGFkZXIsIEdMX1NIQURFUl9TT1VSQ0VfTEVOR1RILCAmbG9nTGVuZ3RoKTsKKyAgICBpZiAo
IWxvZ0xlbmd0aCkKKyAgICAgICAgcmV0dXJuIFdlYlN0cmluZygpOworICAgIEdMY2hhciogbG9n
ID0gMDsKKyAgICBpZiAoIXRyeUZhc3RNYWxsb2MobG9nTGVuZ3RoICogc2l6ZW9mKEdMY2hhcikp
LmdldFZhbHVlKGxvZykpCisgICAgICAgIHJldHVybiBXZWJTdHJpbmcoKTsKKyAgICBHTHNpemVp
IHJldHVybmVkTG9nTGVuZ3RoOworICAgIGdsR2V0U2hhZGVyU291cmNlKHNoYWRlciwgbG9nTGVu
Z3RoLCAmcmV0dXJuZWRMb2dMZW5ndGgsIGxvZyk7CisgICAgQVNTRVJUKGxvZ0xlbmd0aCA9PSBy
ZXR1cm5lZExvZ0xlbmd0aCArIDEpOworICAgIFdlYlN0cmluZyByZXMgPSBXZWJTdHJpbmc6OmZy
b21VVEY4KGxvZywgcmV0dXJuZWRMb2dMZW5ndGgpOworICAgIGZhc3RGcmVlKGxvZyk7CisgICAg
cmV0dXJuIHJlczsKK30KKworV2ViU3RyaW5nIFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdElt
cGw6OmdldFN0cmluZyh1bnNpZ25lZCBsb25nIG5hbWUpCit7CisgICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgcmV0dXJuIFdlYlN0cmluZzo6ZnJvbVVURjgocmVpbnRlcnByZXRfY2FzdDxj
b25zdCBjaGFyKj4oZ2xHZXRTdHJpbmcobmFtZSkpKTsKK30KKworREVMRUdBVEVfVE9fR0xfMyhn
ZXRUZXhQYXJhbWV0ZXJmdiwgR2V0VGV4UGFyYW1ldGVyZnYsIHVuc2lnbmVkIGxvbmcsIHVuc2ln
bmVkIGxvbmcsIGZsb2F0KikKKworREVMRUdBVEVfVE9fR0xfMyhnZXRUZXhQYXJhbWV0ZXJpdiwg
R2V0VGV4UGFyYW1ldGVyaXYsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIGludCopCisK
K0RFTEVHQVRFX1RPX0dMXzMoZ2V0VW5pZm9ybWZ2LCBHZXRVbmlmb3JtZnYsIFdlYkdMSWQsIGxv
bmcsIGZsb2F0KikKKworREVMRUdBVEVfVE9fR0xfMyhnZXRVbmlmb3JtaXYsIEdldFVuaWZvcm1p
diwgV2ViR0xJZCwgbG9uZywgaW50KikKKworREVMRUdBVEVfVE9fR0xfMlIoZ2V0VW5pZm9ybUxv
Y2F0aW9uLCBHZXRVbmlmb3JtTG9jYXRpb24sIFdlYkdMSWQsIGNvbnN0IGNoYXIqLCBsb25nKQor
CitERUxFR0FURV9UT19HTF8zKGdldFZlcnRleEF0dHJpYmZ2LCBHZXRWZXJ0ZXhBdHRyaWJmdiwg
dW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgZmxvYXQqKQorCitERUxFR0FURV9UT19HTF8z
KGdldFZlcnRleEF0dHJpYml2LCBHZXRWZXJ0ZXhBdHRyaWJpdiwgdW5zaWduZWQgbG9uZywgdW5z
aWduZWQgbG9uZywgaW50KikKKworbG9uZyBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBs
OjpnZXRWZXJ0ZXhBdHRyaWJPZmZzZXQodW5zaWduZWQgbG9uZyBpbmRleCwgdW5zaWduZWQgbG9u
ZyBwbmFtZSkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50LgorICAgIG5vdEltcGxlbWVudGVk
KCk7CisgICAgcmV0dXJuIDA7Cit9CisKK0RFTEVHQVRFX1RPX0dMXzIoaGludCwgSGludCwgdW5z
aWduZWQgbG9uZywgdW5zaWduZWQgbG9uZykKKworREVMRUdBVEVfVE9fR0xfMVIoaXNCdWZmZXIs
IElzQnVmZmVyLCBXZWJHTElkLCBib29sKQorCitERUxFR0FURV9UT19HTF8xUihpc0VuYWJsZWQs
IElzRW5hYmxlZCwgdW5zaWduZWQgbG9uZywgYm9vbCkKKworREVMRUdBVEVfVE9fR0xfMVIoaXNG
cmFtZWJ1ZmZlciwgSXNGcmFtZWJ1ZmZlciwgV2ViR0xJZCwgYm9vbCkKKworREVMRUdBVEVfVE9f
R0xfMVIoaXNQcm9ncmFtLCBJc1Byb2dyYW0sIFdlYkdMSWQsIGJvb2wpCisKK0RFTEVHQVRFX1RP
X0dMXzFSKGlzUmVuZGVyYnVmZmVyLCBJc1JlbmRlcmJ1ZmZlciwgV2ViR0xJZCwgYm9vbCkKKwor
REVMRUdBVEVfVE9fR0xfMVIoaXNTaGFkZXIsIElzU2hhZGVyLCBXZWJHTElkLCBib29sKQorCitE
RUxFR0FURV9UT19HTF8xUihpc1RleHR1cmUsIElzVGV4dHVyZSwgV2ViR0xJZCwgYm9vbCkKKwor
REVMRUdBVEVfVE9fR0xfMShsaW5lV2lkdGgsIExpbmVXaWR0aCwgZG91YmxlKQorCitERUxFR0FU
RV9UT19HTF8xKGxpbmtQcm9ncmFtLCBMaW5rUHJvZ3JhbSwgV2ViR0xJZCkKKworREVMRUdBVEVf
VE9fR0xfMihwaXhlbFN0b3JlaSwgUGl4ZWxTdG9yZWksIHVuc2lnbmVkIGxvbmcsIGxvbmcpCisK
K0RFTEVHQVRFX1RPX0dMXzIocG9seWdvbk9mZnNldCwgUG9seWdvbk9mZnNldCwgZG91YmxlLCBk
b3VibGUpCisKK0RFTEVHQVRFX1RPX0dMXzcocmVhZFBpeGVscywgUmVhZFBpeGVscywgbG9uZywg
bG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWdu
ZWQgbG9uZywgdm9pZCopCisKK3ZvaWQgV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6
cmVsZWFzZVNoYWRlckNvbXBpbGVyKCkKK3sKK30KKworREVMRUdBVEVfVE9fR0xfNChyZW5kZXJi
dWZmZXJTdG9yYWdlLCBSZW5kZXJidWZmZXJTdG9yYWdlRVhULCB1bnNpZ25lZCBsb25nLCB1bnNp
Z25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKQorCitERUxFR0FURV9UT19H
TF8yKHNhbXBsZUNvdmVyYWdlLCBTYW1wbGVDb3ZlcmFnZSwgZG91YmxlLCBib29sKQorCitERUxF
R0FURV9UT19HTF80KHNjaXNzb3IsIFNjaXNzb3IsIGxvbmcsIGxvbmcsIHVuc2lnbmVkIGxvbmcs
IHVuc2lnbmVkIGxvbmcpCisKK3ZvaWQgV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6
c2hhZGVyU291cmNlKFdlYkdMSWQgc2hhZGVyLCBjb25zdCBjaGFyKiBzdHJpbmcpCit7CisgICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgR0xpbnQgbGVuZ3RoID0gc3RybGVuKHN0cmluZyk7
CisgICAgZ2xTaGFkZXJTb3VyY2Uoc2hhZGVyLCAxLCAmc3RyaW5nLCAmbGVuZ3RoKTsKK30KKwor
REVMRUdBVEVfVE9fR0xfMyhzdGVuY2lsRnVuYywgU3RlbmNpbEZ1bmMsIHVuc2lnbmVkIGxvbmcs
IGxvbmcsIHVuc2lnbmVkIGxvbmcpCisKK0RFTEVHQVRFX1RPX0dMXzQoc3RlbmNpbEZ1bmNTZXBh
cmF0ZSwgU3RlbmNpbEZ1bmNTZXBhcmF0ZSwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywg
bG9uZywgdW5zaWduZWQgbG9uZykKKworREVMRUdBVEVfVE9fR0xfMShzdGVuY2lsTWFzaywgU3Rl
bmNpbE1hc2ssIHVuc2lnbmVkIGxvbmcpCisKK0RFTEVHQVRFX1RPX0dMXzIoc3RlbmNpbE1hc2tT
ZXBhcmF0ZSwgU3RlbmNpbE1hc2tTZXBhcmF0ZSwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9u
ZykKKworREVMRUdBVEVfVE9fR0xfMyhzdGVuY2lsT3AsIFN0ZW5jaWxPcCwgdW5zaWduZWQgbG9u
ZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZykKKworREVMRUdBVEVfVE9fR0xfNChzdGVu
Y2lsT3BTZXBhcmF0ZSwgU3RlbmNpbE9wU2VwYXJhdGUsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVk
IGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpCisKK0RFTEVHQVRFX1RPX0dMXzko
dGV4SW1hZ2UyRCwgVGV4SW1hZ2UyRCwgdW5zaWduZWQsIHVuc2lnbmVkLCB1bnNpZ25lZCwgdW5z
aWduZWQsIHVuc2lnbmVkLCB1bnNpZ25lZCwgdW5zaWduZWQsIHVuc2lnbmVkLCBjb25zdCB2b2lk
KikKKworREVMRUdBVEVfVE9fR0xfMyh0ZXhQYXJhbWV0ZXJmLCBUZXhQYXJhbWV0ZXJmLCB1bnNp
Z25lZCwgdW5zaWduZWQsIGZsb2F0KTsKKworREVMRUdBVEVfVE9fR0xfMyh0ZXhQYXJhbWV0ZXJp
LCBUZXhQYXJhbWV0ZXJpLCB1bnNpZ25lZCwgdW5zaWduZWQsIGludCk7CisKK0RFTEVHQVRFX1RP
X0dMXzkodGV4U3ViSW1hZ2UyRCwgVGV4U3ViSW1hZ2UyRCwgdW5zaWduZWQsIHVuc2lnbmVkLCB1
bnNpZ25lZCwgdW5zaWduZWQsIHVuc2lnbmVkLCB1bnNpZ25lZCwgdW5zaWduZWQsIHVuc2lnbmVk
LCBjb25zdCB2b2lkKikKKworREVMRUdBVEVfVE9fR0xfMih1bmlmb3JtMWYsIFVuaWZvcm0xZiwg
bG9uZywgZmxvYXQpCisKK0RFTEVHQVRFX1RPX0dMXzModW5pZm9ybTFmdiwgVW5pZm9ybTFmdiwg
bG9uZywgaW50LCBmbG9hdCopCisKK0RFTEVHQVRFX1RPX0dMXzIodW5pZm9ybTFpLCBVbmlmb3Jt
MWksIGxvbmcsIGludCkKKworREVMRUdBVEVfVE9fR0xfMyh1bmlmb3JtMWl2LCBVbmlmb3JtMWl2
LCBsb25nLCBpbnQsIGludCopCisKK0RFTEVHQVRFX1RPX0dMXzModW5pZm9ybTJmLCBVbmlmb3Jt
MmYsIGxvbmcsIGZsb2F0LCBmbG9hdCkKKworREVMRUdBVEVfVE9fR0xfMyh1bmlmb3JtMmZ2LCBV
bmlmb3JtMmZ2LCBsb25nLCBpbnQsIGZsb2F0KikKKworREVMRUdBVEVfVE9fR0xfMyh1bmlmb3Jt
MmksIFVuaWZvcm0yaSwgbG9uZywgaW50LCBpbnQpCisKK0RFTEVHQVRFX1RPX0dMXzModW5pZm9y
bTJpdiwgVW5pZm9ybTJpdiwgbG9uZywgaW50LCBpbnQqKQorCitERUxFR0FURV9UT19HTF80KHVu
aWZvcm0zZiwgVW5pZm9ybTNmLCBsb25nLCBmbG9hdCwgZmxvYXQsIGZsb2F0KQorCitERUxFR0FU
RV9UT19HTF8zKHVuaWZvcm0zZnYsIFVuaWZvcm0zZnYsIGxvbmcsIGludCwgZmxvYXQqKQorCitE
RUxFR0FURV9UT19HTF80KHVuaWZvcm0zaSwgVW5pZm9ybTNpLCBsb25nLCBpbnQsIGludCwgaW50
KQorCitERUxFR0FURV9UT19HTF8zKHVuaWZvcm0zaXYsIFVuaWZvcm0zaXYsIGxvbmcsIGludCwg
aW50KikKKworREVMRUdBVEVfVE9fR0xfNSh1bmlmb3JtNGYsIFVuaWZvcm00ZiwgbG9uZywgZmxv
YXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQpCisKK0RFTEVHQVRFX1RPX0dMXzModW5pZm9ybTRmdiwg
VW5pZm9ybTRmdiwgbG9uZywgaW50LCBmbG9hdCopCisKK0RFTEVHQVRFX1RPX0dMXzUodW5pZm9y
bTRpLCBVbmlmb3JtNGksIGxvbmcsIGludCwgaW50LCBpbnQsIGludCkKKworREVMRUdBVEVfVE9f
R0xfMyh1bmlmb3JtNGl2LCBVbmlmb3JtNGl2LCBsb25nLCBpbnQsIGludCopCisKK0RFTEVHQVRF
X1RPX0dMXzQodW5pZm9ybU1hdHJpeDJmdiwgVW5pZm9ybU1hdHJpeDJmdiwgbG9uZywgaW50LCBi
b29sLCBjb25zdCBmbG9hdCopCisKK0RFTEVHQVRFX1RPX0dMXzQodW5pZm9ybU1hdHJpeDNmdiwg
VW5pZm9ybU1hdHJpeDNmdiwgbG9uZywgaW50LCBib29sLCBjb25zdCBmbG9hdCopCisKK0RFTEVH
QVRFX1RPX0dMXzQodW5pZm9ybU1hdHJpeDRmdiwgVW5pZm9ybU1hdHJpeDRmdiwgbG9uZywgaW50
LCBib29sLCBjb25zdCBmbG9hdCopCisKK0RFTEVHQVRFX1RPX0dMXzEodXNlUHJvZ3JhbSwgVXNl
UHJvZ3JhbSwgV2ViR0xJZCkKKworREVMRUdBVEVfVE9fR0xfMSh2YWxpZGF0ZVByb2dyYW0sIFZh
bGlkYXRlUHJvZ3JhbSwgV2ViR0xJZCkKKworREVMRUdBVEVfVE9fR0xfMih2ZXJ0ZXhBdHRyaWIx
ZiwgVmVydGV4QXR0cmliMWYsIHVuc2lnbmVkIGxvbmcsIGZsb2F0KQorCitERUxFR0FURV9UT19H
TF8yKHZlcnRleEF0dHJpYjFmdiwgVmVydGV4QXR0cmliMWZ2LCB1bnNpZ25lZCBsb25nLCBjb25z
dCBmbG9hdCopCisKK0RFTEVHQVRFX1RPX0dMXzModmVydGV4QXR0cmliMmYsIFZlcnRleEF0dHJp
YjJmLCB1bnNpZ25lZCBsb25nLCBmbG9hdCwgZmxvYXQpCisKK0RFTEVHQVRFX1RPX0dMXzIodmVy
dGV4QXR0cmliMmZ2LCBWZXJ0ZXhBdHRyaWIyZnYsIHVuc2lnbmVkIGxvbmcsIGNvbnN0IGZsb2F0
KikKKworREVMRUdBVEVfVE9fR0xfNCh2ZXJ0ZXhBdHRyaWIzZiwgVmVydGV4QXR0cmliM2YsIHVu
c2lnbmVkIGxvbmcsIGZsb2F0LCBmbG9hdCwgZmxvYXQpCisKK0RFTEVHQVRFX1RPX0dMXzIodmVy
dGV4QXR0cmliM2Z2LCBWZXJ0ZXhBdHRyaWIzZnYsIHVuc2lnbmVkIGxvbmcsIGNvbnN0IGZsb2F0
KikKKworREVMRUdBVEVfVE9fR0xfNSh2ZXJ0ZXhBdHRyaWI0ZiwgVmVydGV4QXR0cmliNGYsIHVu
c2lnbmVkIGxvbmcsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0KQorCitERUxFR0FURV9UT19H
TF8yKHZlcnRleEF0dHJpYjRmdiwgVmVydGV4QXR0cmliNGZ2LCB1bnNpZ25lZCBsb25nLCBjb25z
dCBmbG9hdCopCisKK3ZvaWQgV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6dmVydGV4
QXR0cmliUG9pbnRlcih1bnNpZ25lZCBsb25nIGluZHgsIGludCBzaXplLCBpbnQgdHlwZSwgYm9v
bCBub3JtYWxpemVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgc3RyaWRlLCB1bnNpZ25lZCBsb25nIG9mZnNl
dCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKworICAgIGlmIChtX2JvdW5kQXJyYXlC
dWZmZXIgPD0gMCkgeworICAgICAgICAvLyBGSVhNRTogcmFpc2UgZXhjZXB0aW9uLgorICAgICAg
ICAvLyBMb2dNZXNzYWdlZigoImJ1ZmZlckRhdGE6IG5vIGJ1ZmZlciBib3VuZCIpKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChpbmR4IDwgTnVtVHJhY2tlZFBvaW50ZXJTdGF0
ZXMpIHsKKyAgICAgICAgVmVydGV4QXR0cmliUG9pbnRlclN0YXRlJiBzdGF0ZSA9IG1fdmVydGV4
QXR0cmliUG9pbnRlclN0YXRlW2luZHhdOworICAgICAgICBzdGF0ZS5idWZmZXIgPSBtX2JvdW5k
QXJyYXlCdWZmZXI7CisgICAgICAgIHN0YXRlLmluZHggPSBpbmR4OworICAgICAgICBzdGF0ZS5z
aXplID0gc2l6ZTsKKyAgICAgICAgc3RhdGUudHlwZSA9IHR5cGU7CisgICAgICAgIHN0YXRlLm5v
cm1hbGl6ZWQgPSBub3JtYWxpemVkOworICAgICAgICBzdGF0ZS5zdHJpZGUgPSBzdHJpZGU7Cisg
ICAgICAgIHN0YXRlLm9mZnNldCA9IG9mZnNldDsKKyAgICB9CisKKyAgICBnbFZlcnRleEF0dHJp
YlBvaW50ZXIoaW5keCwgc2l6ZSwgdHlwZSwgbm9ybWFsaXplZCwgc3RyaWRlLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PHZvaWQqPihzdGF0aWNfY2FzdDxpbnRw
dHJfdD4ob2Zmc2V0KSkpOworfQorCitERUxFR0FURV9UT19HTF80KHZpZXdwb3J0LCBWaWV3cG9y
dCwgbG9uZywgbG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZykKKwordW5zaWduZWQg
V2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6Y3JlYXRlQnVmZmVyKCkKK3sKKyAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBHTHVpbnQgbzsKKyAgICBnbEdlbkJ1ZmZlcnMoMSwg
Jm8pOworICAgIHJldHVybiBvOworfQorCit1bnNpZ25lZCBXZWJHcmFwaGljc0NvbnRleHQzRERl
ZmF1bHRJbXBsOjpjcmVhdGVGcmFtZWJ1ZmZlcigpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7CisgICAgR0x1aW50IG8gPSAwOworICAgIGdsR2VuRnJhbWVidWZmZXJzRVhUKDEsICZvKTsK
KyAgICByZXR1cm4gbzsKK30KKwordW5zaWduZWQgV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0
SW1wbDo6Y3JlYXRlUHJvZ3JhbSgpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAg
cmV0dXJuIGdsQ3JlYXRlUHJvZ3JhbSgpOworfQorCit1bnNpZ25lZCBXZWJHcmFwaGljc0NvbnRl
eHQzRERlZmF1bHRJbXBsOjpjcmVhdGVSZW5kZXJidWZmZXIoKQoreworICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOworICAgIEdMdWludCBvOworICAgIGdsR2VuUmVuZGVyYnVmZmVyc0VYVCgxLCAm
byk7CisgICAgcmV0dXJuIG87Cit9CisKK0RFTEVHQVRFX1RPX0dMXzFSKGNyZWF0ZVNoYWRlciwg
Q3JlYXRlU2hhZGVyLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCk7CisKK3Vuc2lnbmVkIFdlYkdy
YXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OmNyZWF0ZVRleHR1cmUoKQoreworICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOworICAgIEdMdWludCBvOworICAgIGdsR2VuVGV4dHVyZXMoMSwgJm8p
OworICAgIHJldHVybiBvOworfQorCit2b2lkIFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdElt
cGw6OmRlbGV0ZUJ1ZmZlcih1bnNpZ25lZCBidWZmZXIpCit7CisgICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgZ2xEZWxldGVCdWZmZXJzKDEsICZidWZmZXIpOworfQorCit2b2lkIFdlYkdy
YXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OmRlbGV0ZUZyYW1lYnVmZmVyKHVuc2lnbmVkIGZy
YW1lYnVmZmVyKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGdsRGVsZXRlRnJh
bWVidWZmZXJzRVhUKDEsICZmcmFtZWJ1ZmZlcik7Cit9CisKK3ZvaWQgV2ViR3JhcGhpY3NDb250
ZXh0M0REZWZhdWx0SW1wbDo6ZGVsZXRlUHJvZ3JhbSh1bnNpZ25lZCBwcm9ncmFtKQoreworICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGdsRGVsZXRlUHJvZ3JhbShwcm9ncmFtKTsKK30K
Kwordm9pZCBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpkZWxldGVSZW5kZXJidWZm
ZXIodW5zaWduZWQgcmVuZGVyYnVmZmVyKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwor
ICAgIGdsRGVsZXRlUmVuZGVyYnVmZmVyc0VYVCgxLCAmcmVuZGVyYnVmZmVyKTsKK30KKwordm9p
ZCBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpkZWxldGVTaGFkZXIodW5zaWduZWQg
c2hhZGVyKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGdsRGVsZXRlU2hhZGVy
KHNoYWRlcik7Cit9CisKK3ZvaWQgV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6ZGVs
ZXRlVGV4dHVyZSh1bnNpZ25lZCB0ZXh0dXJlKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OworICAgIGdsRGVsZXRlVGV4dHVyZXMoMSwgJnRleHR1cmUpOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRSgzRF9DQU5WQVMpCkluZGV4OiBXZWJLaXQvY2hy
b21pdW0vc3JjL1dlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGwuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGwuaAko
cmV2aXNpb24gMCkKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViR3JhcGhpY3NDb250ZXh0M0RE
ZWZhdWx0SW1wbC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQwOSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRp
b24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisg
KiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViR3Jh
cGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbF9oCisjZGVmaW5lIFdlYkdyYXBoaWNzQ29udGV4dDNE
RGVmYXVsdEltcGxfaAorCisjaWYgRU5BQkxFKDNEX0NBTlZBUykKKworI2luY2x1ZGUgIldlYkdy
YXBoaWNzQ29udGV4dDNELmgiCisKKyNpbmNsdWRlIDx3dGYvTGlzdEhhc2hTZXQuaD4KKworI2lm
IE9TKFdJTkRPV1MpCisjaW5jbHVkZSA8d2luZG93cy5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJH
TC9nbGV3LmgiCisKKyNpZiBQTEFURk9STShDRykKKyNpbmNsdWRlIDxPcGVuR0wvT3BlbkdMLmg+
CisjZWxzZQorI2RlZmluZSBGTElQX0ZSQU1FQlVGRkVSX1ZFUlRJQ0FMTFkKKyNlbmRpZgorCisj
aWYgT1MoTElOVVgpCisjaW5jbHVkZSAiR0wvZ2x4ZXcuaCIKKyNlbmRpZgorCituYW1lc3BhY2Ug
V2ViS2l0IHsKKworLy8gVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gb2YgV2ViR0wuIEluIENo
cm9taXVtLCB1c2luZyB0aGlzIGNsYXNzCisvLyByZXF1aXJlcyB0aGUgc2FuZGJveCB0byBiZSBk
aXNhYmxlZCwgd2hpY2ggaXMgc3Ryb25nbHkgZGlzY291cmFnZWQuCisvLyBJdCBpcyBwcm92aWRl
ZCBmb3Igc3VwcG9ydCBvZiB0ZXN0X3NoZWxsIGFuZCBhbnkgQ2hyb21pdW0gcG9ydHMKKy8vIHdo
ZXJlIGFuIGluLXJlbmRlcmVyIFdlYkdMIGltcGxlbWVudGF0aW9uIHdvdWxkIGJlIGhlbHBmdWwu
CisKK2NsYXNzIFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGwgOiBwdWJsaWMgV2ViR3Jh
cGhpY3NDb250ZXh0M0QgeworcHVibGljOgorICAgIFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVs
dEltcGwoKTsKKyAgICB2aXJ0dWFsIH5XZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsKCk7
CisKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBXZWJHcmFwaGljc0NvbnRleHQzRCBtZXRo
b2RzCisgICAgdmlydHVhbCBib29sIGluaXRpYWxpemUoV2ViR3JhcGhpY3NDb250ZXh0M0Q6OkF0
dHJpYnV0ZXMgYXR0cmlidXRlcyk7CisgICAgdmlydHVhbCBib29sIG1ha2VDb250ZXh0Q3VycmVu
dCgpOworCisgICAgdmlydHVhbCBpbnQgd2lkdGgoKTsKKyAgICB2aXJ0dWFsIGludCBoZWlnaHQo
KTsKKworICAgIHZpcnR1YWwgaW50IHNpemVJbkJ5dGVzKGludCB0eXBlKTsKKworICAgIHZpcnR1
YWwgdm9pZCByZXNoYXBlKGludCB3aWR0aCwgaW50IGhlaWdodCk7CisKKyAgICB2aXJ0dWFsIGJv
b2wgcmVhZEJhY2tGcmFtZWJ1ZmZlcih1bnNpZ25lZCBjaGFyKiBwaXhlbHMsIHNpemVfdCBidWZm
ZXJTaXplKTsKKworICAgIHZpcnR1YWwgdm9pZCBzeW50aGVzaXplR0xFcnJvcih1bnNpZ25lZCBs
b25nIGVycm9yKTsKKworICAgIHZpcnR1YWwgdm9pZCBhY3RpdmVUZXh0dXJlKHVuc2lnbmVkIGxv
bmcgdGV4dHVyZSk7CisgICAgdmlydHVhbCB2b2lkIGF0dGFjaFNoYWRlcihXZWJHTElkIHByb2dy
YW0sIFdlYkdMSWQgc2hhZGVyKTsKKyAgICB2aXJ0dWFsIHZvaWQgYmluZEF0dHJpYkxvY2F0aW9u
KFdlYkdMSWQgcHJvZ3JhbSwgdW5zaWduZWQgbG9uZyBpbmRleCwgY29uc3QgY2hhciogbmFtZSk7
CisgICAgdmlydHVhbCB2b2lkIGJpbmRCdWZmZXIodW5zaWduZWQgbG9uZyB0YXJnZXQsIFdlYkdM
SWQgYnVmZmVyKTsKKyAgICB2aXJ0dWFsIHZvaWQgYmluZEZyYW1lYnVmZmVyKHVuc2lnbmVkIGxv
bmcgdGFyZ2V0LCBXZWJHTElkIGZyYW1lYnVmZmVyKTsKKyAgICB2aXJ0dWFsIHZvaWQgYmluZFJl
bmRlcmJ1ZmZlcih1bnNpZ25lZCBsb25nIHRhcmdldCwgV2ViR0xJZCByZW5kZXJidWZmZXIpOwor
ICAgIHZpcnR1YWwgdm9pZCBiaW5kVGV4dHVyZSh1bnNpZ25lZCBsb25nIHRhcmdldCwgV2ViR0xJ
ZCB0ZXh0dXJlKTsKKyAgICB2aXJ0dWFsIHZvaWQgYmxlbmRDb2xvcihkb3VibGUgcmVkLCBkb3Vi
bGUgZ3JlZW4sIGRvdWJsZSBibHVlLCBkb3VibGUgYWxwaGEpOworICAgIHZpcnR1YWwgdm9pZCBi
bGVuZEVxdWF0aW9uKHVuc2lnbmVkIGxvbmcgbW9kZSk7CisgICAgdmlydHVhbCB2b2lkIGJsZW5k
RXF1YXRpb25TZXBhcmF0ZSh1bnNpZ25lZCBsb25nIG1vZGVSR0IsIHVuc2lnbmVkIGxvbmcgbW9k
ZUFscGhhKTsKKyAgICB2aXJ0dWFsIHZvaWQgYmxlbmRGdW5jKHVuc2lnbmVkIGxvbmcgc2ZhY3Rv
ciwgdW5zaWduZWQgbG9uZyBkZmFjdG9yKTsKKyAgICB2aXJ0dWFsIHZvaWQgYmxlbmRGdW5jU2Vw
YXJhdGUodW5zaWduZWQgbG9uZyBzcmNSR0IsIHVuc2lnbmVkIGxvbmcgZHN0UkdCLCB1bnNpZ25l
ZCBsb25nIHNyY0FscGhhLCB1bnNpZ25lZCBsb25nIGRzdEFscGhhKTsKKworICAgIHZpcnR1YWwg
dm9pZCBidWZmZXJEYXRhKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBpbnQgc2l6ZSwgY29uc3Qgdm9p
ZCogZGF0YSwgdW5zaWduZWQgbG9uZyB1c2FnZSk7CisgICAgdmlydHVhbCB2b2lkIGJ1ZmZlclN1
YkRhdGEodW5zaWduZWQgbG9uZyB0YXJnZXQsIGxvbmcgb2Zmc2V0LCBpbnQgc2l6ZSwgY29uc3Qg
dm9pZCogZGF0YSk7CisKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGxvbmcgY2hlY2tGcmFtZWJ1ZmZl
clN0YXR1cyh1bnNpZ25lZCBsb25nIHRhcmdldCk7CisgICAgdmlydHVhbCB2b2lkIGNsZWFyKHVu
c2lnbmVkIGxvbmcgbWFzayk7CisgICAgdmlydHVhbCB2b2lkIGNsZWFyQ29sb3IoZG91YmxlIHJl
ZCwgZG91YmxlIGdyZWVuLCBkb3VibGUgYmx1ZSwgZG91YmxlIGFscGhhKTsKKyAgICB2aXJ0dWFs
IHZvaWQgY2xlYXJEZXB0aChkb3VibGUgZGVwdGgpOworICAgIHZpcnR1YWwgdm9pZCBjbGVhclN0
ZW5jaWwobG9uZyBzKTsKKyAgICB2aXJ0dWFsIHZvaWQgY29sb3JNYXNrKGJvb2wgcmVkLCBib29s
IGdyZWVuLCBib29sIGJsdWUsIGJvb2wgYWxwaGEpOworICAgIHZpcnR1YWwgdm9pZCBjb21waWxl
U2hhZGVyKFdlYkdMSWQgc2hhZGVyKTsKKworICAgIHZpcnR1YWwgdm9pZCBjb3B5VGV4SW1hZ2Uy
RCh1bnNpZ25lZCBsb25nIHRhcmdldCwgbG9uZyBsZXZlbCwgdW5zaWduZWQgbG9uZyBpbnRlcm5h
bGZvcm1hdCwgbG9uZyB4LCBsb25nIHksIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxv
bmcgaGVpZ2h0LCBsb25nIGJvcmRlcik7CisgICAgdmlydHVhbCB2b2lkIGNvcHlUZXhTdWJJbWFn
ZTJEKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBsb25nIGxldmVsLCBsb25nIHhvZmZzZXQsIGxvbmcg
eW9mZnNldCwgbG9uZyB4LCBsb25nIHksIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxv
bmcgaGVpZ2h0KTsKKyAgICB2aXJ0dWFsIHZvaWQgY3VsbEZhY2UodW5zaWduZWQgbG9uZyBtb2Rl
KTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVwdGhGdW5jKHVuc2lnbmVkIGxvbmcgZnVuYyk7CisgICAg
dmlydHVhbCB2b2lkIGRlcHRoTWFzayhib29sIGZsYWcpOworICAgIHZpcnR1YWwgdm9pZCBkZXB0
aFJhbmdlKGRvdWJsZSB6TmVhciwgZG91YmxlIHpGYXIpOworICAgIHZpcnR1YWwgdm9pZCBkZXRh
Y2hTaGFkZXIoV2ViR0xJZCBwcm9ncmFtLCBXZWJHTElkIHNoYWRlcik7CisgICAgdmlydHVhbCB2
b2lkIGRpc2FibGUodW5zaWduZWQgbG9uZyBjYXApOworICAgIHZpcnR1YWwgdm9pZCBkaXNhYmxl
VmVydGV4QXR0cmliQXJyYXkodW5zaWduZWQgbG9uZyBpbmRleCk7CisgICAgdmlydHVhbCB2b2lk
IGRyYXdBcnJheXModW5zaWduZWQgbG9uZyBtb2RlLCBsb25nIGZpcnN0LCBsb25nIGNvdW50KTsK
KyAgICB2aXJ0dWFsIHZvaWQgZHJhd0VsZW1lbnRzKHVuc2lnbmVkIGxvbmcgbW9kZSwgdW5zaWdu
ZWQgbG9uZyBjb3VudCwgdW5zaWduZWQgbG9uZyB0eXBlLCBsb25nIG9mZnNldCk7CisKKyAgICB2
aXJ0dWFsIHZvaWQgZW5hYmxlKHVuc2lnbmVkIGxvbmcgY2FwKTsKKyAgICB2aXJ0dWFsIHZvaWQg
ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkodW5zaWduZWQgbG9uZyBpbmRleCk7CisgICAgdmlydHVh
bCB2b2lkIGZpbmlzaCgpOworICAgIHZpcnR1YWwgdm9pZCBmbHVzaCgpOworICAgIHZpcnR1YWwg
dm9pZCBmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcih1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWdu
ZWQgbG9uZyBhdHRhY2htZW50LCB1bnNpZ25lZCBsb25nIHJlbmRlcmJ1ZmZlcnRhcmdldCwgV2Vi
R0xJZCByZW5kZXJidWZmZXIpOworICAgIHZpcnR1YWwgdm9pZCBmcmFtZWJ1ZmZlclRleHR1cmUy
RCh1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBhdHRhY2htZW50LCB1bnNpZ25l
ZCBsb25nIHRleHRhcmdldCwgV2ViR0xJZCB0ZXh0dXJlLCBsb25nIGxldmVsKTsKKyAgICB2aXJ0
dWFsIHZvaWQgZnJvbnRGYWNlKHVuc2lnbmVkIGxvbmcgbW9kZSk7CisgICAgdmlydHVhbCB2b2lk
IGdlbmVyYXRlTWlwbWFwKHVuc2lnbmVkIGxvbmcgdGFyZ2V0KTsKKworICAgIHZpcnR1YWwgYm9v
bCBnZXRBY3RpdmVBdHRyaWIoV2ViR0xJZCBwcm9ncmFtLCB1bnNpZ25lZCBsb25nIGluZGV4LCBB
Y3RpdmVJbmZvJik7CisgICAgdmlydHVhbCBib29sIGdldEFjdGl2ZVVuaWZvcm0oV2ViR0xJZCBw
cm9ncmFtLCB1bnNpZ25lZCBsb25nIGluZGV4LCBBY3RpdmVJbmZvJik7CisKKyAgICB2aXJ0dWFs
IGludCAgZ2V0QXR0cmliTG9jYXRpb24oV2ViR0xJZCBwcm9ncmFtLCBjb25zdCBjaGFyKiBuYW1l
KTsKKworICAgIHZpcnR1YWwgdm9pZCBnZXRCb29sZWFudih1bnNpZ25lZCBsb25nIHBuYW1lLCB1
bnNpZ25lZCBjaGFyKiB2YWx1ZSk7CisKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0QnVmZmVyUGFyYW1l
dGVyaXYodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgcG5hbWUsIGludCogdmFs
dWUpOworCisgICAgdmlydHVhbCBBdHRyaWJ1dGVzIGdldENvbnRleHRBdHRyaWJ1dGVzKCk7CisK
KyAgICB2aXJ0dWFsIHVuc2lnbmVkIGxvbmcgZ2V0RXJyb3IoKTsKKworICAgIHZpcnR1YWwgdm9p
ZCBnZXRGbG9hdHYodW5zaWduZWQgbG9uZyBwbmFtZSwgZmxvYXQqIHZhbHVlKTsKKworICAgIHZp
cnR1YWwgdm9pZCBnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpdih1bnNpZ25lZCBs
b25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBhdHRhY2htZW50LCB1bnNpZ25lZCBsb25nIHBuYW1l
LCBpbnQqIHZhbHVlKTsKKworICAgIHZpcnR1YWwgdm9pZCBnZXRJbnRlZ2Vydih1bnNpZ25lZCBs
b25nIHBuYW1lLCBpbnQqIHZhbHVlKTsKKworICAgIHZpcnR1YWwgdm9pZCBnZXRQcm9ncmFtaXYo
V2ViR0xJZCBwcm9ncmFtLCB1bnNpZ25lZCBsb25nIHBuYW1lLCBpbnQqIHZhbHVlKTsKKworICAg
IHZpcnR1YWwgV2ViU3RyaW5nIGdldFByb2dyYW1JbmZvTG9nKFdlYkdMSWQgcHJvZ3JhbSk7CisK
KyAgICB2aXJ0dWFsIHZvaWQgZ2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXYodW5zaWduZWQgbG9u
ZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgcG5hbWUsIGludCogdmFsdWUpOworCisgICAgdmlydHVh
bCB2b2lkIGdldFNoYWRlcml2KFdlYkdMSWQgc2hhZGVyLCB1bnNpZ25lZCBsb25nIHBuYW1lLCBp
bnQqIHZhbHVlKTsKKworICAgIHZpcnR1YWwgV2ViU3RyaW5nIGdldFNoYWRlckluZm9Mb2coV2Vi
R0xJZCBzaGFkZXIpOworCisgICAgLy8gVEJECisgICAgLy8gdm9pZCBnbEdldFNoYWRlclByZWNp
c2lvbkZvcm1hdCAoR0xlbnVtIHNoYWRlcnR5cGUsIEdMZW51bSBwcmVjaXNpb250eXBlLCBHTGlu
dCogcmFuZ2UsIEdMaW50KiBwcmVjaXNpb24pOworCisgICAgdmlydHVhbCBXZWJTdHJpbmcgZ2V0
U2hhZGVyU291cmNlKFdlYkdMSWQgc2hhZGVyKTsKKyAgICB2aXJ0dWFsIFdlYlN0cmluZyBnZXRT
dHJpbmcodW5zaWduZWQgbG9uZyBuYW1lKTsKKworICAgIHZpcnR1YWwgdm9pZCBnZXRUZXhQYXJh
bWV0ZXJmdih1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBwbmFtZSwgZmxvYXQq
IHZhbHVlKTsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0VGV4UGFyYW1ldGVyaXYodW5zaWduZWQgbG9u
ZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgcG5hbWUsIGludCogdmFsdWUpOworCisgICAgdmlydHVh
bCB2b2lkIGdldFVuaWZvcm1mdihXZWJHTElkIHByb2dyYW0sIGxvbmcgbG9jYXRpb24sIGZsb2F0
KiB2YWx1ZSk7CisgICAgdmlydHVhbCB2b2lkIGdldFVuaWZvcm1pdihXZWJHTElkIHByb2dyYW0s
IGxvbmcgbG9jYXRpb24sIGludCogdmFsdWUpOworCisgICAgdmlydHVhbCBsb25nIGdldFVuaWZv
cm1Mb2NhdGlvbihXZWJHTElkIHByb2dyYW0sIGNvbnN0IGNoYXIqIG5hbWUpOworCisgICAgdmly
dHVhbCB2b2lkIGdldFZlcnRleEF0dHJpYmZ2KHVuc2lnbmVkIGxvbmcgaW5kZXgsIHVuc2lnbmVk
IGxvbmcgcG5hbWUsIGZsb2F0KiB2YWx1ZSk7CisgICAgdmlydHVhbCB2b2lkIGdldFZlcnRleEF0
dHJpYml2KHVuc2lnbmVkIGxvbmcgaW5kZXgsIHVuc2lnbmVkIGxvbmcgcG5hbWUsIGludCogdmFs
dWUpOworCisgICAgdmlydHVhbCBsb25nIGdldFZlcnRleEF0dHJpYk9mZnNldCh1bnNpZ25lZCBs
b25nIGluZGV4LCB1bnNpZ25lZCBsb25nIHBuYW1lKTsKKworICAgIHZpcnR1YWwgdm9pZCBoaW50
KHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIG1vZGUpOworICAgIHZpcnR1YWwg
Ym9vbCBpc0J1ZmZlcihXZWJHTElkIGJ1ZmZlcik7CisgICAgdmlydHVhbCBib29sIGlzRW5hYmxl
ZCh1bnNpZ25lZCBsb25nIGNhcCk7CisgICAgdmlydHVhbCBib29sIGlzRnJhbWVidWZmZXIoV2Vi
R0xJZCBmcmFtZWJ1ZmZlcik7CisgICAgdmlydHVhbCBib29sIGlzUHJvZ3JhbShXZWJHTElkIHBy
b2dyYW0pOworICAgIHZpcnR1YWwgYm9vbCBpc1JlbmRlcmJ1ZmZlcihXZWJHTElkIHJlbmRlcmJ1
ZmZlcik7CisgICAgdmlydHVhbCBib29sIGlzU2hhZGVyKFdlYkdMSWQgc2hhZGVyKTsKKyAgICB2
aXJ0dWFsIGJvb2wgaXNUZXh0dXJlKFdlYkdMSWQgdGV4dHVyZSk7CisgICAgdmlydHVhbCB2b2lk
IGxpbmVXaWR0aChkb3VibGUpOworICAgIHZpcnR1YWwgdm9pZCBsaW5rUHJvZ3JhbShXZWJHTElk
IHByb2dyYW0pOworICAgIHZpcnR1YWwgdm9pZCBwaXhlbFN0b3JlaSh1bnNpZ25lZCBsb25nIHBu
YW1lLCBsb25nIHBhcmFtKTsKKyAgICB2aXJ0dWFsIHZvaWQgcG9seWdvbk9mZnNldChkb3VibGUg
ZmFjdG9yLCBkb3VibGUgdW5pdHMpOworCisgICAgdmlydHVhbCB2b2lkIHJlYWRQaXhlbHMobG9u
ZyB4LCBsb25nIHksIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0LCB1
bnNpZ25lZCBsb25nIGZvcm1hdCwgdW5zaWduZWQgbG9uZyB0eXBlLCB2b2lkKiBwaXhlbHMpOwor
CisgICAgdmlydHVhbCB2b2lkIHJlbGVhc2VTaGFkZXJDb21waWxlcigpOworICAgIHZpcnR1YWwg
dm9pZCByZW5kZXJidWZmZXJTdG9yYWdlKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBs
b25nIGludGVybmFsZm9ybWF0LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhl
aWdodCk7CisgICAgdmlydHVhbCB2b2lkIHNhbXBsZUNvdmVyYWdlKGRvdWJsZSB2YWx1ZSwgYm9v
bCBpbnZlcnQpOworICAgIHZpcnR1YWwgdm9pZCBzY2lzc29yKGxvbmcgeCwgbG9uZyB5LCB1bnNp
Z25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCk7CisgICAgdmlydHVhbCB2b2lk
IHNoYWRlclNvdXJjZShXZWJHTElkIHNoYWRlciwgY29uc3QgY2hhciogc3RyaW5nKTsKKyAgICB2
aXJ0dWFsIHZvaWQgc3RlbmNpbEZ1bmModW5zaWduZWQgbG9uZyBmdW5jLCBsb25nIHJlZiwgdW5z
aWduZWQgbG9uZyBtYXNrKTsKKyAgICB2aXJ0dWFsIHZvaWQgc3RlbmNpbEZ1bmNTZXBhcmF0ZSh1
bnNpZ25lZCBsb25nIGZhY2UsIHVuc2lnbmVkIGxvbmcgZnVuYywgbG9uZyByZWYsIHVuc2lnbmVk
IGxvbmcgbWFzayk7CisgICAgdmlydHVhbCB2b2lkIHN0ZW5jaWxNYXNrKHVuc2lnbmVkIGxvbmcg
bWFzayk7CisgICAgdmlydHVhbCB2b2lkIHN0ZW5jaWxNYXNrU2VwYXJhdGUodW5zaWduZWQgbG9u
ZyBmYWNlLCB1bnNpZ25lZCBsb25nIG1hc2spOworICAgIHZpcnR1YWwgdm9pZCBzdGVuY2lsT3Ao
dW5zaWduZWQgbG9uZyBmYWlsLCB1bnNpZ25lZCBsb25nIHpmYWlsLCB1bnNpZ25lZCBsb25nIHpw
YXNzKTsKKyAgICB2aXJ0dWFsIHZvaWQgc3RlbmNpbE9wU2VwYXJhdGUodW5zaWduZWQgbG9uZyBm
YWNlLCB1bnNpZ25lZCBsb25nIGZhaWwsIHVuc2lnbmVkIGxvbmcgemZhaWwsIHVuc2lnbmVkIGxv
bmcgenBhc3MpOworCisgICAgdmlydHVhbCB2b2lkIHRleEltYWdlMkQodW5zaWduZWQgdGFyZ2V0
LCB1bnNpZ25lZCBsZXZlbCwgdW5zaWduZWQgaW50ZXJuYWxmb3JtYXQsIHVuc2lnbmVkIHdpZHRo
LCB1bnNpZ25lZCBoZWlnaHQsIHVuc2lnbmVkIGJvcmRlciwgdW5zaWduZWQgZm9ybWF0LCB1bnNp
Z25lZCB0eXBlLCBjb25zdCB2b2lkKiBwaXhlbHMpOworCisgICAgdmlydHVhbCB2b2lkIHRleFBh
cmFtZXRlcmYodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBwbmFtZSwgZmxvYXQgcGFyYW0pOwor
ICAgIHZpcnR1YWwgdm9pZCB0ZXhQYXJhbWV0ZXJpKHVuc2lnbmVkIHRhcmdldCwgdW5zaWduZWQg
cG5hbWUsIGludCBwYXJhbSk7CisKKyAgICB2aXJ0dWFsIHZvaWQgdGV4U3ViSW1hZ2UyRCh1bnNp
Z25lZCB0YXJnZXQsIHVuc2lnbmVkIGxldmVsLCB1bnNpZ25lZCB4b2Zmc2V0LCB1bnNpZ25lZCB5
b2Zmc2V0LCB1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0LCB1bnNpZ25lZCBmb3JtYXQs
IHVuc2lnbmVkIHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVscyk7CisKKyAgICB2aXJ0dWFsIHZvaWQg
dW5pZm9ybTFmKGxvbmcgbG9jYXRpb24sIGZsb2F0IHgpOworICAgIHZpcnR1YWwgdm9pZCB1bmlm
b3JtMWZ2KGxvbmcgbG9jYXRpb24sIGludCBjb3VudCwgZmxvYXQqIHYpOworICAgIHZpcnR1YWwg
dm9pZCB1bmlmb3JtMWkobG9uZyBsb2NhdGlvbiwgaW50IHgpOworICAgIHZpcnR1YWwgdm9pZCB1
bmlmb3JtMWl2KGxvbmcgbG9jYXRpb24sIGludCBjb3VudCwgaW50KiB2KTsKKyAgICB2aXJ0dWFs
IHZvaWQgdW5pZm9ybTJmKGxvbmcgbG9jYXRpb24sIGZsb2F0IHgsIGZsb2F0IHkpOworICAgIHZp
cnR1YWwgdm9pZCB1bmlmb3JtMmZ2KGxvbmcgbG9jYXRpb24sIGludCBjb3VudCwgZmxvYXQqIHYp
OworICAgIHZpcnR1YWwgdm9pZCB1bmlmb3JtMmkobG9uZyBsb2NhdGlvbiwgaW50IHgsIGludCB5
KTsKKyAgICB2aXJ0dWFsIHZvaWQgdW5pZm9ybTJpdihsb25nIGxvY2F0aW9uLCBpbnQgY291bnQs
IGludCogdik7CisgICAgdmlydHVhbCB2b2lkIHVuaWZvcm0zZihsb25nIGxvY2F0aW9uLCBmbG9h
dCB4LCBmbG9hdCB5LCBmbG9hdCB6KTsKKyAgICB2aXJ0dWFsIHZvaWQgdW5pZm9ybTNmdihsb25n
IGxvY2F0aW9uLCBpbnQgY291bnQsIGZsb2F0KiB2KTsKKyAgICB2aXJ0dWFsIHZvaWQgdW5pZm9y
bTNpKGxvbmcgbG9jYXRpb24sIGludCB4LCBpbnQgeSwgaW50IHopOworICAgIHZpcnR1YWwgdm9p
ZCB1bmlmb3JtM2l2KGxvbmcgbG9jYXRpb24sIGludCBjb3VudCwgaW50KiB2KTsKKyAgICB2aXJ0
dWFsIHZvaWQgdW5pZm9ybTRmKGxvbmcgbG9jYXRpb24sIGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0
IHosIGZsb2F0IHcpOworICAgIHZpcnR1YWwgdm9pZCB1bmlmb3JtNGZ2KGxvbmcgbG9jYXRpb24s
IGludCBjb3VudCwgZmxvYXQqIHYpOworICAgIHZpcnR1YWwgdm9pZCB1bmlmb3JtNGkobG9uZyBs
b2NhdGlvbiwgaW50IHgsIGludCB5LCBpbnQgeiwgaW50IHcpOworICAgIHZpcnR1YWwgdm9pZCB1
bmlmb3JtNGl2KGxvbmcgbG9jYXRpb24sIGludCBjb3VudCwgaW50KiB2KTsKKyAgICB2aXJ0dWFs
IHZvaWQgdW5pZm9ybU1hdHJpeDJmdihsb25nIGxvY2F0aW9uLCBpbnQgY291bnQsIGJvb2wgdHJh
bnNwb3NlLCBjb25zdCBmbG9hdCogdmFsdWUpOworICAgIHZpcnR1YWwgdm9pZCB1bmlmb3JtTWF0
cml4M2Z2KGxvbmcgbG9jYXRpb24sIGludCBjb3VudCwgYm9vbCB0cmFuc3Bvc2UsIGNvbnN0IGZs
b2F0KiB2YWx1ZSk7CisgICAgdmlydHVhbCB2b2lkIHVuaWZvcm1NYXRyaXg0ZnYobG9uZyBsb2Nh
dGlvbiwgaW50IGNvdW50LCBib29sIHRyYW5zcG9zZSwgY29uc3QgZmxvYXQqIHZhbHVlKTsKKwor
ICAgIHZpcnR1YWwgdm9pZCB1c2VQcm9ncmFtKFdlYkdMSWQgcHJvZ3JhbSk7CisgICAgdmlydHVh
bCB2b2lkIHZhbGlkYXRlUHJvZ3JhbShXZWJHTElkIHByb2dyYW0pOworCisgICAgdmlydHVhbCB2
b2lkIHZlcnRleEF0dHJpYjFmKHVuc2lnbmVkIGxvbmcgaW5keCwgZmxvYXQgeCk7CisgICAgdmly
dHVhbCB2b2lkIHZlcnRleEF0dHJpYjFmdih1bnNpZ25lZCBsb25nIGluZHgsIGNvbnN0IGZsb2F0
KiB2YWx1ZXMpOworICAgIHZpcnR1YWwgdm9pZCB2ZXJ0ZXhBdHRyaWIyZih1bnNpZ25lZCBsb25n
IGluZHgsIGZsb2F0IHgsIGZsb2F0IHkpOworICAgIHZpcnR1YWwgdm9pZCB2ZXJ0ZXhBdHRyaWIy
ZnYodW5zaWduZWQgbG9uZyBpbmR4LCBjb25zdCBmbG9hdCogdmFsdWVzKTsKKyAgICB2aXJ0dWFs
IHZvaWQgdmVydGV4QXR0cmliM2YodW5zaWduZWQgbG9uZyBpbmR4LCBmbG9hdCB4LCBmbG9hdCB5
LCBmbG9hdCB6KTsKKyAgICB2aXJ0dWFsIHZvaWQgdmVydGV4QXR0cmliM2Z2KHVuc2lnbmVkIGxv
bmcgaW5keCwgY29uc3QgZmxvYXQqIHZhbHVlcyk7CisgICAgdmlydHVhbCB2b2lkIHZlcnRleEF0
dHJpYjRmKHVuc2lnbmVkIGxvbmcgaW5keCwgZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgeiwgZmxv
YXQgdyk7CisgICAgdmlydHVhbCB2b2lkIHZlcnRleEF0dHJpYjRmdih1bnNpZ25lZCBsb25nIGlu
ZHgsIGNvbnN0IGZsb2F0KiB2YWx1ZXMpOworICAgIHZpcnR1YWwgdm9pZCB2ZXJ0ZXhBdHRyaWJQ
b2ludGVyKHVuc2lnbmVkIGxvbmcgaW5keCwgaW50IHNpemUsIGludCB0eXBlLCBib29sIG5vcm1h
bGl6ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9u
ZyBzdHJpZGUsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KTsKKworICAgIHZpcnR1YWwgdm9pZCB2aWV3
cG9ydChsb25nIHgsIGxvbmcgeSwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBo
ZWlnaHQpOworCisgICAgLy8gU3VwcG9ydCBmb3IgYnVmZmVyIGNyZWF0aW9uIGFuZCBkZWxldGlv
bgorICAgIHZpcnR1YWwgdW5zaWduZWQgY3JlYXRlQnVmZmVyKCk7CisgICAgdmlydHVhbCB1bnNp
Z25lZCBjcmVhdGVGcmFtZWJ1ZmZlcigpOworICAgIHZpcnR1YWwgdW5zaWduZWQgY3JlYXRlUHJv
Z3JhbSgpOworICAgIHZpcnR1YWwgdW5zaWduZWQgY3JlYXRlUmVuZGVyYnVmZmVyKCk7CisgICAg
dmlydHVhbCB1bnNpZ25lZCBjcmVhdGVTaGFkZXIodW5zaWduZWQgbG9uZyk7CisgICAgdmlydHVh
bCB1bnNpZ25lZCBjcmVhdGVUZXh0dXJlKCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlQnVm
ZmVyKHVuc2lnbmVkKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlRnJhbWVidWZmZXIodW5zaWdu
ZWQpOworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVQcm9ncmFtKHVuc2lnbmVkKTsKKyAgICB2aXJ0
dWFsIHZvaWQgZGVsZXRlUmVuZGVyYnVmZmVyKHVuc2lnbmVkKTsKKyAgICB2aXJ0dWFsIHZvaWQg
ZGVsZXRlU2hhZGVyKHVuc2lnbmVkKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlVGV4dHVyZSh1
bnNpZ25lZCk7CisKK3ByaXZhdGU6CisgICAgV2ViR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0
ZXMgbV9hdHRyaWJ1dGVzOworICAgIGJvb2wgbV9pbml0aWFsaXplZDsKKyAgICB1bnNpZ25lZCBp
bnQgbV90ZXh0dXJlOworICAgIHVuc2lnbmVkIGludCBtX2ZibzsKKyAgICB1bnNpZ25lZCBpbnQg
bV9kZXB0aEJ1ZmZlcjsKKyAgICB1bnNpZ25lZCBpbnQgbV9jYWNoZWRXaWR0aCwgbV9jYWNoZWRI
ZWlnaHQ7CisKKyAgICAvLyBGb3IgdHJhY2tpbmcgd2hpY2ggRkJPIGlzIGJvdW5kCisgICAgdW5z
aWduZWQgaW50IG1fYm91bmRGQk87CisKKyNpZmRlZiBGTElQX0ZSQU1FQlVGRkVSX1ZFUlRJQ0FM
TFkKKyAgICB1bnNpZ25lZCBjaGFyKiBtX3NjYW5saW5lOworICAgIHZvaWQgZmxpcFZlcnRpY2Fs
bHkodW5zaWduZWQgY2hhciogZnJhbWVidWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICB1
bnNpZ25lZCBpbnQgd2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQg
aGVpZ2h0KTsKKyNlbmRpZgorCisgICAgLy8gTm90ZTogd2UgYXJlbid0IGN1cnJlbnRseSB1c2lu
ZyB0aGlzIGluZm9ybWF0aW9uLCBidXQgd2Ugd2lsbAorICAgIC8vIG5lZWQgdG8gaW4gb3JkZXIg
dG8gdmVyaWZ5IHRoYXQgYWxsIGVuYWJsZWQgdmVydGV4IGFycmF5cyBoYXZlCisgICAgLy8gYSB2
YWxpZCBidWZmZXIgYm91bmQgLS0gdG8gYXZvaWQgY3Jhc2hlcyBvbiBjZXJ0YWluIGNhcmRzLgor
ICAgIHVuc2lnbmVkIGludCBtX2JvdW5kQXJyYXlCdWZmZXI7CisgICAgY2xhc3MgVmVydGV4QXR0
cmliUG9pbnRlclN0YXRlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFZlcnRleEF0dHJpYlBvaW50
ZXJTdGF0ZSgpOworCisgICAgICAgIGJvb2wgZW5hYmxlZDsKKyAgICAgICAgdW5zaWduZWQgbG9u
ZyBidWZmZXI7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgaW5keDsKKyAgICAgICAgaW50IHNpemU7
CisgICAgICAgIGludCB0eXBlOworICAgICAgICBib29sIG5vcm1hbGl6ZWQ7CisgICAgICAgIHVu
c2lnbmVkIGxvbmcgc3RyaWRlOworICAgICAgICB1bnNpZ25lZCBsb25nIG9mZnNldDsKKyAgICB9
OworCisgICAgZW51bSB7CisgICAgICAgIE51bVRyYWNrZWRQb2ludGVyU3RhdGVzID0gMgorICAg
IH07CisgICAgVmVydGV4QXR0cmliUG9pbnRlclN0YXRlIG1fdmVydGV4QXR0cmliUG9pbnRlclN0
YXRlW051bVRyYWNrZWRQb2ludGVyU3RhdGVzXTsKKworICAgIC8vIEVycm9ycyByYWlzZWQgYnkg
c3ludGhlc2l6ZUdMRXJyb3IoKS4KKyAgICBMaXN0SGFzaFNldDx1bnNpZ25lZCBsb25nPiBtX3N5
bnRoZXRpY0Vycm9yczsKKworICAgIHN0YXRpYyBib29sIHNfaW5pdGlhbGl6ZWRHTEVXOworI2lm
IE9TKFdJTkRPV1MpCisgICAgSFdORCAgbV9jYW52YXNXaW5kb3c7CisgICAgSERDICAgbV9jYW52
YXNEQzsKKyAgICBIR0xSQyBtX2NvbnRleHRPYmo7CisjZWxpZiBQTEFURk9STShDRykKKyAgICBD
R0xQQnVmZmVyT2JqIG1fcGJ1ZmZlcjsKKyAgICBDR0xDb250ZXh0T2JqIG1fY29udGV4dE9iajsK
KyAgICB1bnNpZ25lZCBjaGFyKiBtX3JlbmRlck91dHB1dDsKKyNlbGlmIE9TKExJTlVYKQorICAg
IEdMWENvbnRleHQgbV9jb250ZXh0T2JqOworICAgIEdMWFBidWZmZXIgbV9wYnVmZmVyOworCisg
ICAgLy8gSW4gb3JkZXIgdG8gYXZvaWQgcHJvYmxlbXMgY2F1c2VkIGJ5IGxpbmtpbmcgYWdhaW5z
dCBsaWJHTCwgd2UKKyAgICAvLyBkeW5hbWljYWxseSBsb29rIHVwIGFsbCB0aGUgc3ltYm9scyB3
ZSBuZWVkLgorICAgIC8vIGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9jaHJvbWl1bS9pc3N1ZXMv
ZGV0YWlsP2lkPTE2ODAwCisgICAgY2xhc3MgR0xDb25uZWN0aW9uIHsKKyAgICAgIHB1YmxpYzoK
KyAgICAgICAgfkdMQ29ubmVjdGlvbigpOworCisgICAgICAgIHN0YXRpYyBHTENvbm5lY3Rpb24q
IGNyZWF0ZSgpOworCisgICAgICAgIEdMWEZCQ29uZmlnKiBjaG9vc2VGQkNvbmZpZyhpbnQgc2Ny
ZWVuLCBjb25zdCBpbnQgKmF0dHJpYl9saXN0LCBpbnQgKm5lbGVtZW50cykKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIG1fZ2xYQ2hvb3NlRkJDb25maWcobV9kaXNwbGF5LCBzY3JlZW4s
IGF0dHJpYl9saXN0LCBuZWxlbWVudHMpOworICAgICAgICB9CisKKyAgICAgICAgR0xYQ29udGV4
dCBjcmVhdGVOZXdDb250ZXh0KEdMWEZCQ29uZmlnIGNvbmZpZywgaW50IHJlbmRlclR5cGUsIEdM
WENvbnRleHQgc2hhcmVMaXN0LCBCb29sIGRpcmVjdCkKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIG1fZ2xYQ3JlYXRlTmV3Q29udGV4dChtX2Rpc3BsYXksIGNvbmZpZywgcmVuZGVyVHlw
ZSwgc2hhcmVMaXN0LCBkaXJlY3QpOworICAgICAgICB9CisKKyAgICAgICAgR0xYUGJ1ZmZlciBj
cmVhdGVQYnVmZmVyKEdMWEZCQ29uZmlnIGNvbmZpZywgY29uc3QgaW50ICphdHRyaWJMaXN0KQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9nbFhDcmVhdGVQYnVmZmVyKG1fZGlzcGxh
eSwgY29uZmlnLCBhdHRyaWJMaXN0KTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgZGVzdHJv
eVBidWZmZXIoR0xYUGJ1ZmZlciBwYnVmKQorICAgICAgICB7CisgICAgICAgICAgICBtX2dsWERl
c3Ryb3lQYnVmZmVyKG1fZGlzcGxheSwgcGJ1Zik7CisgICAgICAgIH0KKworICAgICAgICBCb29s
IG1ha2VDdXJyZW50KEdMWERyYXdhYmxlIGRyYXdhYmxlLCBHTFhDb250ZXh0IGN0eCkKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIG1fZ2xYTWFrZUN1cnJlbnQobV9kaXNwbGF5LCBkcmF3
YWJsZSwgY3R4KTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgZGVzdHJveUNvbnRleHQoR0xY
Q29udGV4dCBjdHgpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fZ2xYRGVzdHJveUNvbnRleHQo
bV9kaXNwbGF5LCBjdHgpOworICAgICAgICB9CisKKyAgICAgICAgR0xYQ29udGV4dCBnZXRDdXJy
ZW50Q29udGV4dCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2dsWEdldEN1cnJl
bnRDb250ZXh0KCk7CisgICAgICAgIH0KKworICAgICAgcHJpdmF0ZToKKyAgICAgICAgRGlzcGxh
eSogbV9kaXNwbGF5OworICAgICAgICB2b2lkKiBtX2xpYkdMOworICAgICAgICBQRk5HTFhDSE9P
U0VGQkNPTkZJR1BST0MgbV9nbFhDaG9vc2VGQkNvbmZpZzsKKyAgICAgICAgUEZOR0xYQ1JFQVRF
TkVXQ09OVEVYVFBST0MgbV9nbFhDcmVhdGVOZXdDb250ZXh0OworICAgICAgICBQRk5HTFhDUkVB
VEVQQlVGRkVSUFJPQyBtX2dsWENyZWF0ZVBidWZmZXI7CisgICAgICAgIFBGTkdMWERFU1RST1lQ
QlVGRkVSUFJPQyBtX2dsWERlc3Ryb3lQYnVmZmVyOworICAgICAgICB0eXBlZGVmIEJvb2wgKCog
UEZOR0xYTUFLRUNVUlJFTlRQUk9DKShEaXNwbGF5KiBkcHksIEdMWERyYXdhYmxlIGRyYXdhYmxl
LCBHTFhDb250ZXh0IGN0eCk7CisgICAgICAgIFBGTkdMWE1BS0VDVVJSRU5UUFJPQyBtX2dsWE1h
a2VDdXJyZW50OworICAgICAgICB0eXBlZGVmIHZvaWQgKCogUEZOR0xYREVTVFJPWUNPTlRFWFRQ
Uk9DKShEaXNwbGF5KiBkcHksIEdMWENvbnRleHQgY3R4KTsKKyAgICAgICAgUEZOR0xYREVTVFJP
WUNPTlRFWFRQUk9DIG1fZ2xYRGVzdHJveUNvbnRleHQ7CisgICAgICAgIHR5cGVkZWYgR0xYQ29u
dGV4dCAoKiBQRk5HTFhHRVRDVVJSRU5UQ09OVEVYVFBST0MpKHZvaWQpOworICAgICAgICBQRk5H
TFhHRVRDVVJSRU5UQ09OVEVYVFBST0MgbV9nbFhHZXRDdXJyZW50Q29udGV4dDsKKworICAgICAg
ICBHTENvbm5lY3Rpb24oRGlzcGxheSogZGlzcGxheSwKKyAgICAgICAgICAgICAgICAgICAgIHZv
aWQqIGxpYkdMLAorICAgICAgICAgICAgICAgICAgICAgUEZOR0xYQ0hPT1NFRkJDT05GSUdQUk9D
IGNob29zZUZCQ29uZmlnLAorICAgICAgICAgICAgICAgICAgICAgUEZOR0xYQ1JFQVRFTkVXQ09O
VEVYVFBST0MgY3JlYXRlTmV3Q29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgIFBGTkdMWENS
RUFURVBCVUZGRVJQUk9DIGNyZWF0ZVBidWZmZXIsCisgICAgICAgICAgICAgICAgICAgICBQRk5H
TFhERVNUUk9ZUEJVRkZFUlBST0MgZGVzdHJveVBidWZmZXIsCisgICAgICAgICAgICAgICAgICAg
ICBQRk5HTFhNQUtFQ1VSUkVOVFBST0MgbWFrZUN1cnJlbnQsCisgICAgICAgICAgICAgICAgICAg
ICBQRk5HTFhERVNUUk9ZQ09OVEVYVFBST0MgZGVzdHJveUNvbnRleHQsCisgICAgICAgICAgICAg
ICAgICAgICBQRk5HTFhHRVRDVVJSRU5UQ09OVEVYVFBST0MgZ2V0Q3VycmVudENvbnRleHQpCisg
ICAgICAgICAgICA6IG1fbGliR0wobGliR0wpCisgICAgICAgICAgICAsIG1fZGlzcGxheShkaXNw
bGF5KQorICAgICAgICAgICAgLCBtX2dsWENob29zZUZCQ29uZmlnKGNob29zZUZCQ29uZmlnKQor
ICAgICAgICAgICAgLCBtX2dsWENyZWF0ZU5ld0NvbnRleHQoY3JlYXRlTmV3Q29udGV4dCkKKyAg
ICAgICAgICAgICwgbV9nbFhDcmVhdGVQYnVmZmVyKGNyZWF0ZVBidWZmZXIpCisgICAgICAgICAg
ICAsIG1fZ2xYRGVzdHJveVBidWZmZXIoZGVzdHJveVBidWZmZXIpCisgICAgICAgICAgICAsIG1f
Z2xYTWFrZUN1cnJlbnQobWFrZUN1cnJlbnQpCisgICAgICAgICAgICAsIG1fZ2xYRGVzdHJveUNv
bnRleHQoZGVzdHJveUNvbnRleHQpCisgICAgICAgICAgICAsIG1fZ2xYR2V0Q3VycmVudENvbnRl
eHQoZ2V0Q3VycmVudENvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgIH07CisKKyAg
ICBzdGF0aWMgR0xDb25uZWN0aW9uKiBzX2dsOworI2Vsc2UKKyAgICAjZXJyb3IgTXVzdCBwb3J0
IFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGwgdG8geW91ciBwbGF0Zm9ybQorI2VuZGlm
Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRSgzRF9DQU5W
QVMpCisKKyNlbmRpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>51353</attachid>
            <date>2010-03-22 14:22:10 -0700</date>
            <delta_ts>2010-03-22 23:30:21 -0700</delta_ts>
            <desc>Revised patch</desc>
            <filename>refactoring.patch</filename>
            <type>text/plain</type>
            <size>200390</size>
            <attacher name="Kenneth Russell">kbr</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24gNTYzNTYpCisrKyBXZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQ2IEBACisyMDEwLTAzLTIyICBLZW5u
ZXRoIFJ1c3NlbGwgIDxrYnJAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgR3JhcGhpY3NDb250ZXh0M0QgYWJzdHJhY3Rpb24g
dG8gV2ViS2l0IEFQSQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MzYyNjIKKworICAgICAgICBBZGRlZCBXZWJHcmFwaGljc0NvbnRleHQzRCB0byB0aGUg
V2ViS2l0IEFQSSBhbmQgcmVmYWN0b3JlZCBDaHJvbWl1bSdzCisgICAgICAgIEdyYXBoaWNzQ29u
dGV4dDNEIGltcGxlbWVudGF0aW9uIHRvIHVzZSBpdC4gQWxsIG9mIHRoZSBPcGVuR0wgY2FsbHMg
aGF2ZQorICAgICAgICBiZWVuIG1vdmVkIG91dCBvZiBXZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBo
aWNzQ29udGV4dDNELmNwcCBhbmQgaW50byB0aGUKKyAgICAgICAgV2ViR3JhcGhpY3NDb250ZXh0
M0QgaW1wbGVtZW50YXRpb24uIEdyYXBoaWNzQ29udGV4dDNEIGlzIHN0aWxsCisgICAgICAgIHJl
c3BvbnNpYmxlIGZvciB0aGUgdHJhbnNmZXIgb2YgcmVuZGVyZWQgb3V0cHV0IGZyb20gdGhlCisg
ICAgICAgIFdlYkdyYXBoaWNzQ29udGV4dDNEIHRvIHRoZSBIVE1MQ2FudmFzRWxlbWVudC4KKwor
ICAgICAgICBUaGUgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbCBjbGFzcywgd2hpY2ggaXMgYSBk
YXRhIG1lbWJlciBvZgorICAgICAgICBHcmFwaGljc0NvbnRleHQzRCBmb3IgdGhlIENocm9taXVt
IHBvcnQsIHJlbWFpbnMuIEl0IGlzIHBvc3NpYmxlIHRvCisgICAgICAgIGVsaW1pbmF0ZSB0aGlz
IGNsYXNzIGFuZCB0aGVyZWJ5IG9uZSBsZXZlbCBvZiBkZWxlZ2F0aW9uLCBidXQgdGhpcyBpcwor
ICAgICAgICBiZWluZyBkZWZlcnJlZC4KKworICAgICAgICBUaGUgbmVlZGVkIGVudHJ5IHBvaW50
IGZvciBhIENocm9tZSBpbXBsZW1lbnRhdGlvbiBvZgorICAgICAgICBXZWJHcmFwaGljc0NvbnRl
eHQzRCBoYXMgYmVlbiBhZGRlZCB0byBXZWJLaXRDbGllbnQsIGJ1dCBpdCBpcyBub3QgYmVpbmcK
KyAgICAgICAgY2FsbGVkIHlldCBieSBHcmFwaGljc0NvbnRleHQzRC4gSXQgd2lsbCBiZSBvbmNl
IHRoaXMgcGF0Y2ggbGFuZHMgYW5kCisgICAgICAgIENocm9taXVtIGlzIHJvbGxlZCBmb3J3YXJk
IHRvIHN1cHBvcnQgdGhpcyBlbnRyeSBwb2ludC4KKworICAgICAgICBUaGlzIGlzIGEgbGFyZ2Ug
cGF0Y2gsIGJ1dCB0aGUgdHJhbnNmb3JtYXRpb24gaXMgYWxtb3N0IGVudGlyZWx5CisgICAgICAg
IG1lY2hhbmljYWwgYW5kIHRoZXJlIGlzIG5vIGNoYW5nZSBpbiBmdW5jdGlvbmFsaXR5LiBOZWFy
bHkgYWxsIG9mCisgICAgICAgIEdyYXBoaWNzQ29udGV4dDNEIGFuZCBHcmFwaGljc0NvbnRleHQz
REludGVybmFsIGhhcyBiZWVuIG1vdmVkIHRvCisgICAgICAgIFdlYkdyYXBoaWNzQ29udGV4dDNE
RGVmYXVsdEltcGwuIFRoZSBvbmx5IGFyZWEgd2hlcmUgdGhlIHNwbGl0dGluZyBvZgorICAgICAg
ICBsb2dpYyBpcyBsZXNzIHRoYW4gbWVjaGFuaWNhbCBpcyBHcmFwaGljc0NvbnRleHQzRDo6YmVn
aW5QYWludCgpIGFuZCBpdHMKKyAgICAgICAgY2FsbGVlcy4KKworICAgICAgICBSYW4gYWxsIFdl
YkdMIGxheW91dCB0ZXN0cyBhbmQgZGVtb3MgZnJvbSBLaHJvbm9zIHNpdGUgaW4gQ2hyb21pdW0K
KyAgICAgICAgb24gTWFjIGFuZCBXaW5kb3dzLgorCisgICAgICAgICogV2ViS2l0Lmd5cDoKKyAg
ICAgICAgKiBwdWJsaWMvV2ViR3JhcGhpY3NDb250ZXh0M0QuaDogQWRkZWQuCisgICAgICAgIChX
ZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzOjpBdHRyaWJ1dGVzKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0Q6On5XZWJHcmFwaGljc0NvbnRleHQz
RCk6CisgICAgICAgICogcHVibGljL1dlYktpdENsaWVudC5oOgorICAgICAgICAoV2ViS2l0OjpX
ZWJLaXRDbGllbnQ6OmNyZWF0ZUdyYXBoaWNzQ29udGV4dDNEKToKKyAgICAgICAgKiBzcmMvR3Jh
cGhpY3NDb250ZXh0M0QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RJ
bnRlcm5hbDo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzREludGVybmFsOjp+R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzREludGVybmFsOjppbml0aWFsaXplKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OnBsYXRmb3JtR3Jh
cGhpY3NDb250ZXh0M0QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RJbnRl
cm5hbDo6cGxhdGZvcm1UZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDNESW50ZXJuYWw6OmJlZ2luUGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0M0RJbnRlcm5hbDo6ZW5kUGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0M0RJbnRlcm5hbDo6cmVzaGFwZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQzREludGVybmFsOjpiaW5kQXR0cmliTG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6YmluZFRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6YnVmZmVyRGF0YSk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpidWZmZXJTdWJEYXRhKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmdldEFjdGl2ZUF0dHJpYik6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpnZXRBY3RpdmVVbmlmb3Jt
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmdldEF0dHJp
YkxvY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6
OmdldENvbnRleHRBdHRyaWJ1dGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDNESW50ZXJuYWw6OmdldFByb2dyYW1JbmZvTG9nKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNESW50ZXJuYWw6OmdldFNoYWRlckluZm9Mb2cpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6Z2V0U2hhZGVyU291cmNlKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmdldFN0cmluZyk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpnZXRVbmlmb3JtTG9jYXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6cmVhZFBpeGVs
cyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpzaGFkZXJT
b3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6dGV4
SW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzREludGVybmFsOjp0
ZXhTdWJJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNESW50ZXJu
YWw6OnVuaWZvcm0xZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RJbnRl
cm5hbDo6dW5pZm9ybTFpdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRElu
dGVybmFsOjp1bmlmb3JtMmZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
SW50ZXJuYWw6OnVuaWZvcm0yaXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
M0RJbnRlcm5hbDo6dW5pZm9ybTNmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQzREludGVybmFsOjp1bmlmb3JtM2l2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNESW50ZXJuYWw6OnVuaWZvcm00ZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0RJbnRlcm5hbDo6dW5pZm9ybTRpdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQzREludGVybmFsOjp1bmlmb3JtTWF0cml4MmZ2KToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OnVuaWZvcm1NYXRyaXgzZnYpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6dW5pZm9ybU1hdHJpeDRmdik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6On5HcmFwaGljc0NvbnRleHQzRCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpwbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpwbGF0Zm9ybVRleHR1cmUpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnRleEltYWdlMkQpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnRleFN1YkltYWdlMkQpOgorICAgICAgICAq
IHNyYy9XZWJHcmFwaGljc0NvbnRleHQzRC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpX
ZWJHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlRGVmYXVsdCk6CisgICAgICAgICogc3JjL1dlYkdy
YXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGwuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6
V2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6R0xDb25uZWN0aW9uOjpjcmVhdGUpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpHTENvbm5l
Y3Rpb246On5HTENvbm5lY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRl
eHQzRERlZmF1bHRJbXBsOjpWZXJ0ZXhBdHRyaWJQb2ludGVyU3RhdGU6OlZlcnRleEF0dHJpYlBv
aW50ZXJTdGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVs
dEltcGw6OldlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGwpOgorICAgICAgICAoV2ViS2l0
OjpXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjp+V2ViR3JhcGhpY3NDb250ZXh0M0RE
ZWZhdWx0SW1wbCk6CisgICAgICAgIChXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVs
dEltcGw6OmluaXRpYWxpemUpOgorICAgICAgICAoV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQz
RERlZmF1bHRJbXBsOjptYWtlQ29udGV4dEN1cnJlbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJH
cmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjp3aWR0aCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OmhlaWdodCk6CisgICAgICAgIChXZWJLaXQ6
OldlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OnNpemVJbkJ5dGVzKToKKyAgICAgICAg
KFdlYktpdDo6Y3JlYXRlVGV4dHVyZU9iamVjdCk6CisgICAgICAgIChXZWJLaXQ6OldlYkdyYXBo
aWNzQ29udGV4dDNERGVmYXVsdEltcGw6OnJlc2hhcGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJH
cmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpmbGlwVmVydGljYWxseSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OnJlYWRCYWNrRnJhbWVidWZm
ZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjph
Y3RpdmVUZXh0dXJlKToKKyAgICAgICAgKFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0REZWZh
dWx0SW1wbDo6YmluZEJ1ZmZlcik6CisgICAgICAgIChXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4
dDNERGVmYXVsdEltcGw6OmJpbmRGcmFtZWJ1ZmZlcik6CisgICAgICAgIChXZWJLaXQ6OldlYkdy
YXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheSk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OmRyYXdFbGVt
ZW50cyk6CisgICAgICAgIChXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6
OmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KToKKyAgICAgICAgKFdlYktpdDo6V2ViR3JhcGhpY3ND
b250ZXh0M0REZWZhdWx0SW1wbDo6Z2VuZXJhdGVNaXBtYXApOgorICAgICAgICAoV2ViS2l0OjpX
ZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpnZXRBY3RpdmVBdHRyaWIpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpnZXRBY3RpdmVVbmlm
b3JtKToKKyAgICAgICAgKFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6
Z2V0Q29udGV4dEF0dHJpYnV0ZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRl
eHQzRERlZmF1bHRJbXBsOjpnZXRFcnJvcik6CisgICAgICAgIChXZWJLaXQ6OldlYkdyYXBoaWNz
Q29udGV4dDNERGVmYXVsdEltcGw6OmdldFByb2dyYW1JbmZvTG9nKToKKyAgICAgICAgKFdlYktp
dDo6V2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6Z2V0U2hhZGVySW5mb0xvZyk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OmdldFNoYWRl
clNvdXJjZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdElt
cGw6OmdldFN0cmluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNERGVm
YXVsdEltcGw6OmdldFZlcnRleEF0dHJpYk9mZnNldCk6CisgICAgICAgIChXZWJLaXQ6OldlYkdy
YXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OnJlbGVhc2VTaGFkZXJDb21waWxlcik6CisgICAg
ICAgIChXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OnNoYWRlclNvdXJj
ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OnZl
cnRleEF0dHJpYlBvaW50ZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQz
RERlZmF1bHRJbXBsOjpjcmVhdGVCdWZmZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJHcmFwaGlj
c0NvbnRleHQzRERlZmF1bHRJbXBsOjpjcmVhdGVGcmFtZWJ1ZmZlcik6CisgICAgICAgIChXZWJL
aXQ6OldlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OmNyZWF0ZVByb2dyYW0pOgorICAg
ICAgICAoV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpjcmVhdGVSZW5k
ZXJidWZmZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJ
bXBsOjpjcmVhdGVUZXh0dXJlKToKKyAgICAgICAgKFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0
M0REZWZhdWx0SW1wbDo6ZGVsZXRlQnVmZmVyKToKKyAgICAgICAgKFdlYktpdDo6V2ViR3JhcGhp
Y3NDb250ZXh0M0REZWZhdWx0SW1wbDo6ZGVsZXRlRnJhbWVidWZmZXIpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpkZWxldGVQcm9ncmFtKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6ZGVsZXRlUmVu
ZGVyYnVmZmVyKToKKyAgICAgICAgKFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0
SW1wbDo6ZGVsZXRlU2hhZGVyKToKKyAgICAgICAgKFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0
M0REZWZhdWx0SW1wbDo6ZGVsZXRlVGV4dHVyZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkdyYXBo
aWNzQ29udGV4dDNERGVmYXVsdEltcGw6OnN5bnRoZXNpemVHTEVycm9yKToKKyAgICAgICAgKiBz
cmMvV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbC5oOiBBZGRlZC4KKyAgICAgICAgKFdl
YktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6KToKKyAgICAgICAgKFdlYktp
dDo6V2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6R0xDb25uZWN0aW9uOjpjaG9vc2VG
QkNvbmZpZyk6CisgICAgICAgIChXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdElt
cGw6OkdMQ29ubmVjdGlvbjo6Y3JlYXRlTmV3Q29udGV4dCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OkdMQ29ubmVjdGlvbjo6Y3JlYXRlUGJ1ZmZl
cik6CisgICAgICAgIChXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OkdM
Q29ubmVjdGlvbjo6ZGVzdHJveVBidWZmZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJHcmFwaGlj
c0NvbnRleHQzRERlZmF1bHRJbXBsOjpHTENvbm5lY3Rpb246Om1ha2VDdXJyZW50KToKKyAgICAg
ICAgKFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6R0xDb25uZWN0aW9u
OjpkZXN0cm95Q29udGV4dCk6CisgICAgICAgIChXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNE
RGVmYXVsdEltcGw6OkdMQ29ubmVjdGlvbjo6Z2V0Q3VycmVudENvbnRleHQpOgorICAgICAgICAo
V2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpHTENvbm5lY3Rpb246OkdM
Q29ubmVjdGlvbik6CisKIDIwMTAtMDMtMjIgIERhcmluIEZpc2hlciAgPGRhcmluQGNocm9taXVt
Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBOYXRlIENoYXBpbi4KSW5kZXg6IFdlYktpdC9j
aHJvbWl1bS9XZWJLaXQuZ3lwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9XZWJLaXQu
Z3lwCShyZXZpc2lvbiA1NjM1NikKKysrIFdlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMjIsNiArMTIyLDcgQEAKICAgICAgICAgICAgICAgICAncHVibGljL1dl
YkZvbnRDYWNoZS5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYkZvcm1FbGVtZW50Lmgn
LAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViR2x5cGhDYWNoZS5oJywKKyAgICAgICAgICAg
ICAgICAncHVibGljL1dlYkdyYXBoaWNzQ29udGV4dDNELmgnLAogICAgICAgICAgICAgICAgICdw
dWJsaWMvV2ViSGlzdG9yeUl0ZW0uaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJIVFRQ
Qm9keS5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYkltYWdlLmgnLApAQCAtMzEyLDYg
KzMxMyw5IEBACiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJGcmFtZUltcGwuY3BwJywKICAgICAg
ICAgICAgICAgICAnc3JjL1dlYkZyYW1lSW1wbC5oJywKICAgICAgICAgICAgICAgICAnc3JjL1dl
YkdseXBoQ2FjaGUuY3BwJywKKyAgICAgICAgICAgICAgICAnc3JjL1dlYkdyYXBoaWNzQ29udGV4
dDNELmNwcCcsCisgICAgICAgICAgICAgICAgJ3NyYy9XZWJHcmFwaGljc0NvbnRleHQzRERlZmF1
bHRJbXBsLmNwcCcsCisgICAgICAgICAgICAgICAgJ3NyYy9XZWJHcmFwaGljc0NvbnRleHQzRERl
ZmF1bHRJbXBsLmgnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViSGlzdG9yeUl0ZW0uY3BwJywK
ICAgICAgICAgICAgICAgICAnc3JjL1dlYkhUVFBCb2R5LmNwcCcsCiAgICAgICAgICAgICAgICAg
J3NyYy9XZWJJbWFnZUNHLmNwcCcsCkluZGV4OiBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkdy
YXBoaWNzQ29udGV4dDNELmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9X
ZWJHcmFwaGljc0NvbnRleHQzRC5oCShyZXZpc2lvbiAwKQorKysgV2ViS2l0L2Nocm9taXVtL3B1
YmxpYy9XZWJHcmFwaGljc0NvbnRleHQzRC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMwMiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
CisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICog
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpZm5kZWYgV2ViR3JhcGhpY3NDb250ZXh0M0RfaAorI2RlZmluZSBXZWJHcmFwaGljc0NvbnRl
eHQzRF9oCisKKyNpbmNsdWRlICJXZWJDb21tb24uaCIKKyNpbmNsdWRlICJXZWJOb25Db3B5YWJs
ZS5oIgorI2luY2x1ZGUgIldlYlN0cmluZy5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworLy8g
VHlwZWRlZiBmb3Igc2VydmVyLXNpZGUgb2JqZWN0cyBsaWtlIE9wZW5HTCB0ZXh0dXJlcyBhbmQg
cHJvZ3JhbSBvYmplY3RzLgordHlwZWRlZiB1bnNpZ25lZCBpbnQgV2ViR0xJZDsKKworLy8gVGhp
cyBpbnRlcmZhY2UgYWJzdHJhY3RzIHRoZSBvcGVyYXRpb25zIHBlcmZvcm1lZCBieSB0aGUKKy8v
IEdyYXBoaWNzQ29udGV4dDNEIGluIG9yZGVyIHRvIGltcGxlbWVudCBXZWJHTC4gTmVhcmx5IGFs
bCBvZiB0aGUKKy8vIG1ldGhvZHMgZXhwb3NlZCBvbiB0aGlzIGludGVyZmFjZSBtYXAgZGlyZWN0
bHkgdG8gZW50cnkgcG9pbnRzIGluCisvLyB0aGUgT3BlbkdMIEVTIDIuMCBBUEkuCisKK2NsYXNz
IFdlYkdyYXBoaWNzQ29udGV4dDNEIDogcHVibGljIFdlYk5vbkNvcHlhYmxlIHsKK3B1YmxpYzoK
KyAgICAvLyBSZXR1cm4gdmFsdWUgZnJvbSBnZXRBY3RpdmVVbmlmb3JtIGFuZCBnZXRBY3RpdmVB
dHRyaWIuCisgICAgc3RydWN0IEFjdGl2ZUluZm8geworICAgICAgICBXZWJTdHJpbmcgbmFtZTsK
KyAgICAgICAgdW5zaWduZWQgdHlwZTsKKyAgICAgICAgaW50IHNpemU7CisgICAgfTsKKworICAg
IC8vIENvbnRleHQgY3JlYXRpb24gYXR0cmlidXRlcy4KKyAgICBzdHJ1Y3QgQXR0cmlidXRlcyB7
CisgICAgICAgIEF0dHJpYnV0ZXMoKQorICAgICAgICAgICAgOiBhbHBoYSh0cnVlKQorICAgICAg
ICAgICAgLCBkZXB0aCh0cnVlKQorICAgICAgICAgICAgLCBzdGVuY2lsKHRydWUpCisgICAgICAg
ICAgICAsIGFudGlhbGlhcyh0cnVlKQorICAgICAgICAgICAgLCBwcmVtdWx0aXBsaWVkQWxwaGEo
dHJ1ZSkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBhbHBoYTsKKyAgICAg
ICAgYm9vbCBkZXB0aDsKKyAgICAgICAgYm9vbCBzdGVuY2lsOworICAgICAgICBib29sIGFudGlh
bGlhczsKKyAgICAgICAgYm9vbCBwcmVtdWx0aXBsaWVkQWxwaGE7CisgICAgfTsKKworICAgIC8v
IFRoaXMgZGVzdHJ1Y3RvciBuZWVkcyB0byBiZSBwdWJsaWMgc28gdGhhdCB1c2luZyBjbGFzc2Vz
IGNhbiBkZXN0cm95IGluc3RhbmNlcyBpZiBpbml0aWFsaXphdGlvbiBmYWlscy4KKyAgICB2aXJ0
dWFsIH5XZWJHcmFwaGljc0NvbnRleHQzRCgpIHt9CisKKyAgICAvLyBDcmVhdGVzIGEgImRlZmF1
bHQiIGltcGxlbWVudGF0aW9uIG9mIFdlYkdyYXBoaWNzQ29udGV4dDNEIHdoaWNoIGNhbGxzCisg
ICAgLy8gT3BlbkdMIGRpcmVjdGx5LgorICAgIHN0YXRpYyBXZWJHcmFwaGljc0NvbnRleHQzRCog
Y3JlYXRlRGVmYXVsdCgpOworCisgICAgLy8gSW5pdGlhbGl6ZXMgdGhlIGdyYXBoaWNzIGNvbnRl
eHQ7IHNob3VsZCBiZSB0aGUgZmlyc3Qgb3BlcmF0aW9uIHBlcmZvcm1lZAorICAgIC8vIG9uIG5l
d2x5LWNvbnN0cnVjdGVkIGluc3RhbmNlcy4gUmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3MuCisgICAg
dmlydHVhbCBib29sIGluaXRpYWxpemUoQXR0cmlidXRlcykgPSAwOworCisgICAgLy8gTWFrZXMg
dGhlIE9wZW5HTCBjb250ZXh0IGN1cnJlbnQgb24gdGhlIGN1cnJlbnQgdGhyZWFkLiBSZXR1cm5z
IHRydWUgb24KKyAgICAvLyBzdWNjZXNzLgorICAgIHZpcnR1YWwgYm9vbCBtYWtlQ29udGV4dEN1
cnJlbnQoKSA9IDA7CisKKyAgICAvLyBUaGUgc2l6ZSBvZiB0aGUgcmVnaW9uIGludG8gd2hpY2gg
dGhpcyBXZWJHcmFwaGljc0NvbnRleHQzRCBpcyByZW5kZXJpbmcuCisgICAgLy8gUmV0dXJucyB0
aGUgbGFzdCB2YWx1ZXMgcGFzc2VkIHRvIHJlc2hhcGUoKS4KKyAgICB2aXJ0dWFsIGludCB3aWR0
aCgpID0gMDsKKyAgICB2aXJ0dWFsIGludCBoZWlnaHQoKSA9IDA7CisKKyAgICAvLyBIZWxwZXIg
dG8gcmV0dXJuIHRoZSBzaXplIGluIGJ5dGVzIG9mIE9wZW5HTCBkYXRhIHR5cGVzCisgICAgLy8g
bGlrZSBHTF9GTE9BVCwgR0xfSU5ULCBldGMuCisgICAgdmlydHVhbCBpbnQgc2l6ZUluQnl0ZXMo
aW50IHR5cGUpID0gMDsKKworICAgIC8vIFJlc2l6ZXMgdGhlIHJlZ2lvbiBpbnRvIHdoaWNoIHRo
aXMgV2ViR3JhcGhpY3NDb250ZXh0M0QgaXMgZHJhd2luZy4KKyAgICB2aXJ0dWFsIHZvaWQgcmVz
aGFwZShpbnQgd2lkdGgsIGludCBoZWlnaHQpID0gMDsKKworICAgIC8vIEhlbHBlciBmb3Igc29m
dHdhcmUgY29tcG9zaXRpbmcgcGF0aC4gUmVhZHMgYmFjayB0aGUgZnJhbWUgYnVmZmVyIGludG8K
KyAgICAvLyB0aGUgbWVtb3J5IHJlZ2lvbiBwb2ludGVkIHRvIGJ5ICJwaXhlbHMiIHdpdGggc2l6
ZSAiYnVmZmVyU2l6ZSIuIEl0IGlzCisgICAgLy8gZXhwZWN0ZWQgdGhhdCB0aGUgc3RvcmFnZSBm
b3IgInBpeGVscyIgY292ZXJzICg0ICogd2lkdGggKiBoZWlnaHQpIGJ5dGVzLgorICAgIC8vIFJl
dHVybnMgdHJ1ZSBvbiBzdWNjZXNzLgorICAgIHZpcnR1YWwgYm9vbCByZWFkQmFja0ZyYW1lYnVm
ZmVyKHVuc2lnbmVkIGNoYXIqIHBpeGVscywgc2l6ZV90IGJ1ZmZlclNpemUpID0gMDsKKworICAg
IC8vIFN5bnRoZXNpemVzIGFuIE9wZW5HTCBlcnJvciB3aGljaCB3aWxsIGJlIHJldHVybmVkIGZy
b20gYQorICAgIC8vIGxhdGVyIGNhbGwgdG8gZ2V0RXJyb3IuIFRoaXMgaXMgdXNlZCB0byBlbXVs
YXRlIE9wZW5HTCBFUworICAgIC8vIDIuMCBiZWhhdmlvciBvbiB0aGUgZGVza3RvcCBhbmQgdG8g
ZW5mb3JjZSBhZGRpdGlvbmFsIGVycm9yCisgICAgLy8gY2hlY2tpbmcgbWFuZGF0ZWQgYnkgV2Vi
R0wuCisgICAgLy8KKyAgICAvLyBQZXIgdGhlIGJlaGF2aW9yIG9mIGdsR2V0RXJyb3IsIHRoaXMg
c3RvcmVzIGF0IG1vc3Qgb25lCisgICAgLy8gaW5zdGFuY2Ugb2YgYW55IGdpdmVuIGVycm9yLCBh
bmQgcmV0dXJucyB0aGVtIGZyb20gY2FsbHMgdG8KKyAgICAvLyBnZXRFcnJvciBpbiB0aGUgb3Jk
ZXIgdGhleSB3ZXJlIGFkZGVkLgorICAgIHZpcnR1YWwgdm9pZCBzeW50aGVzaXplR0xFcnJvcih1
bnNpZ25lZCBsb25nIGVycm9yKSA9IDA7CisKKyAgICAvLyBUaGUgZW50cnkgcG9pbnRzIGJlbG93
IG1hcCBkaXJlY3RseSB0byB0aGUgT3BlbkdMIEVTIDIuMCBBUEkuCisgICAgLy8gU2VlOiBodHRw
Oi8vd3d3Lmtocm9ub3Mub3JnL3JlZ2lzdHJ5L2dsZXMvCisgICAgLy8gYW5kOiBodHRwOi8vd3d3
Lmtocm9ub3Mub3JnL29wZW5nbGVzL3Nkay9kb2NzL21hbi8KKyAgICB2aXJ0dWFsIHZvaWQgYWN0
aXZlVGV4dHVyZSh1bnNpZ25lZCBsb25nIHRleHR1cmUpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
YXR0YWNoU2hhZGVyKFdlYkdMSWQgcHJvZ3JhbSwgV2ViR0xJZCBzaGFkZXIpID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgYmluZEF0dHJpYkxvY2F0aW9uKFdlYkdMSWQgcHJvZ3JhbSwgdW5zaWduZWQg
bG9uZyBpbmRleCwgY29uc3QgY2hhciogbmFtZSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBiaW5k
QnVmZmVyKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBXZWJHTElkIGJ1ZmZlcikgPSAwOworICAgIHZp
cnR1YWwgdm9pZCBiaW5kRnJhbWVidWZmZXIodW5zaWduZWQgbG9uZyB0YXJnZXQsIFdlYkdMSWQg
ZnJhbWVidWZmZXIpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgYmluZFJlbmRlcmJ1ZmZlcih1bnNp
Z25lZCBsb25nIHRhcmdldCwgV2ViR0xJZCByZW5kZXJidWZmZXIpID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgYmluZFRleHR1cmUodW5zaWduZWQgbG9uZyB0YXJnZXQsIFdlYkdMSWQgdGV4dHVyZSkg
PSAwOworICAgIHZpcnR1YWwgdm9pZCBibGVuZENvbG9yKGRvdWJsZSByZWQsIGRvdWJsZSBncmVl
biwgZG91YmxlIGJsdWUsIGRvdWJsZSBhbHBoYSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBibGVu
ZEVxdWF0aW9uKHVuc2lnbmVkIGxvbmcgbW9kZSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBibGVu
ZEVxdWF0aW9uU2VwYXJhdGUodW5zaWduZWQgbG9uZyBtb2RlUkdCLCB1bnNpZ25lZCBsb25nIG1v
ZGVBbHBoYSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBibGVuZEZ1bmModW5zaWduZWQgbG9uZyBz
ZmFjdG9yLCB1bnNpZ25lZCBsb25nIGRmYWN0b3IpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgYmxl
bmRGdW5jU2VwYXJhdGUodW5zaWduZWQgbG9uZyBzcmNSR0IsIHVuc2lnbmVkIGxvbmcgZHN0UkdC
LCB1bnNpZ25lZCBsb25nIHNyY0FscGhhLCB1bnNpZ25lZCBsb25nIGRzdEFscGhhKSA9IDA7CisK
KyAgICB2aXJ0dWFsIHZvaWQgYnVmZmVyRGF0YSh1bnNpZ25lZCBsb25nIHRhcmdldCwgaW50IHNp
emUsIGNvbnN0IHZvaWQqIGRhdGEsIHVuc2lnbmVkIGxvbmcgdXNhZ2UpID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgYnVmZmVyU3ViRGF0YSh1bnNpZ25lZCBsb25nIHRhcmdldCwgbG9uZyBvZmZzZXQs
IGludCBzaXplLCBjb25zdCB2b2lkKiBkYXRhKSA9IDA7CisKKyAgICB2aXJ0dWFsIHVuc2lnbmVk
IGxvbmcgY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyh1bnNpZ25lZCBsb25nIHRhcmdldCkgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCBjbGVhcih1bnNpZ25lZCBsb25nIG1hc2spID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgY2xlYXJDb2xvcihkb3VibGUgcmVkLCBkb3VibGUgZ3JlZW4sIGRvdWJsZSBibHVl
LCBkb3VibGUgYWxwaGEpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY2xlYXJEZXB0aChkb3VibGUg
ZGVwdGgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY2xlYXJTdGVuY2lsKGxvbmcgcykgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCBjb2xvck1hc2soYm9vbCByZWQsIGJvb2wgZ3JlZW4sIGJvb2wgYmx1
ZSwgYm9vbCBhbHBoYSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBjb21waWxlU2hhZGVyKFdlYkdM
SWQgc2hhZGVyKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgY29weVRleEltYWdlMkQodW5zaWdu
ZWQgbG9uZyB0YXJnZXQsIGxvbmcgbGV2ZWwsIHVuc2lnbmVkIGxvbmcgaW50ZXJuYWxmb3JtYXQs
IGxvbmcgeCwgbG9uZyB5LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdo
dCwgbG9uZyBib3JkZXIpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY29weVRleFN1YkltYWdlMkQo
dW5zaWduZWQgbG9uZyB0YXJnZXQsIGxvbmcgbGV2ZWwsIGxvbmcgeG9mZnNldCwgbG9uZyB5b2Zm
c2V0LCBsb25nIHgsIGxvbmcgeSwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBo
ZWlnaHQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY3VsbEZhY2UodW5zaWduZWQgbG9uZyBtb2Rl
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRlcHRoRnVuYyh1bnNpZ25lZCBsb25nIGZ1bmMpID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgZGVwdGhNYXNrKGJvb2wgZmxhZykgPSAwOworICAgIHZpcnR1
YWwgdm9pZCBkZXB0aFJhbmdlKGRvdWJsZSB6TmVhciwgZG91YmxlIHpGYXIpID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgZGV0YWNoU2hhZGVyKFdlYkdMSWQgcHJvZ3JhbSwgV2ViR0xJZCBzaGFkZXIp
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGlzYWJsZSh1bnNpZ25lZCBsb25nIGNhcCkgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCBkaXNhYmxlVmVydGV4QXR0cmliQXJyYXkodW5zaWduZWQgbG9uZyBp
bmRleCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkcmF3QXJyYXlzKHVuc2lnbmVkIGxvbmcgbW9k
ZSwgbG9uZyBmaXJzdCwgbG9uZyBjb3VudCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkcmF3RWxl
bWVudHModW5zaWduZWQgbG9uZyBtb2RlLCB1bnNpZ25lZCBsb25nIGNvdW50LCB1bnNpZ25lZCBs
b25nIHR5cGUsIGxvbmcgb2Zmc2V0KSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgZW5hYmxlKHVu
c2lnbmVkIGxvbmcgY2FwKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGVuYWJsZVZlcnRleEF0dHJp
YkFycmF5KHVuc2lnbmVkIGxvbmcgaW5kZXgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZmluaXNo
KCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBmbHVzaCgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxv
bmcgYXR0YWNobWVudCwgdW5zaWduZWQgbG9uZyByZW5kZXJidWZmZXJ0YXJnZXQsIFdlYkdMSWQg
cmVuZGVyYnVmZmVyKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGZyYW1lYnVmZmVyVGV4dHVyZTJE
KHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIGF0dGFjaG1lbnQsIHVuc2lnbmVk
IGxvbmcgdGV4dGFyZ2V0LCBXZWJHTElkIHRleHR1cmUsIGxvbmcgbGV2ZWwpID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgZnJvbnRGYWNlKHVuc2lnbmVkIGxvbmcgbW9kZSkgPSAwOworICAgIHZpcnR1
YWwgdm9pZCBnZW5lcmF0ZU1pcG1hcCh1bnNpZ25lZCBsb25nIHRhcmdldCkgPSAwOworCisgICAg
dmlydHVhbCBib29sIGdldEFjdGl2ZUF0dHJpYihXZWJHTElkIHByb2dyYW0sIHVuc2lnbmVkIGxv
bmcgaW5kZXgsIEFjdGl2ZUluZm8mKSA9IDA7CisgICAgdmlydHVhbCBib29sIGdldEFjdGl2ZVVu
aWZvcm0oV2ViR0xJZCBwcm9ncmFtLCB1bnNpZ25lZCBsb25nIGluZGV4LCBBY3RpdmVJbmZvJikg
PSAwOworCisgICAgdmlydHVhbCBpbnQgIGdldEF0dHJpYkxvY2F0aW9uKFdlYkdMSWQgcHJvZ3Jh
bSwgY29uc3QgY2hhciogbmFtZSkgPSAwOworCisgICAgdmlydHVhbCB2b2lkIGdldEJvb2xlYW52
KHVuc2lnbmVkIGxvbmcgcG5hbWUsIHVuc2lnbmVkIGNoYXIqIHZhbHVlKSA9IDA7CisKKyAgICB2
aXJ0dWFsIHZvaWQgZ2V0QnVmZmVyUGFyYW1ldGVyaXYodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVu
c2lnbmVkIGxvbmcgcG5hbWUsIGludCogdmFsdWUpID0gMDsKKworICAgIHZpcnR1YWwgQXR0cmli
dXRlcyBnZXRDb250ZXh0QXR0cmlidXRlcygpID0gMDsKKworICAgIHZpcnR1YWwgdW5zaWduZWQg
bG9uZyBnZXRFcnJvcigpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBnZXRGbG9hdHYodW5zaWdu
ZWQgbG9uZyBwbmFtZSwgZmxvYXQqIHZhbHVlKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0
RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVu
c2lnbmVkIGxvbmcgYXR0YWNobWVudCwgdW5zaWduZWQgbG9uZyBwbmFtZSwgaW50KiB2YWx1ZSkg
PSAwOworCisgICAgdmlydHVhbCB2b2lkIGdldEludGVnZXJ2KHVuc2lnbmVkIGxvbmcgcG5hbWUs
IGludCogdmFsdWUpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBnZXRQcm9ncmFtaXYoV2ViR0xJ
ZCBwcm9ncmFtLCB1bnNpZ25lZCBsb25nIHBuYW1lLCBpbnQqIHZhbHVlKSA9IDA7CisKKyAgICB2
aXJ0dWFsIFdlYlN0cmluZyBnZXRQcm9ncmFtSW5mb0xvZyhXZWJHTElkIHByb2dyYW0pID0gMDsK
KworICAgIHZpcnR1YWwgdm9pZCBnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdih1bnNpZ25lZCBs
b25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBwbmFtZSwgaW50KiB2YWx1ZSkgPSAwOworCisgICAg
dmlydHVhbCB2b2lkIGdldFNoYWRlcml2KFdlYkdMSWQgc2hhZGVyLCB1bnNpZ25lZCBsb25nIHBu
YW1lLCBpbnQqIHZhbHVlKSA9IDA7CisKKyAgICB2aXJ0dWFsIFdlYlN0cmluZyBnZXRTaGFkZXJJ
bmZvTG9nKFdlYkdMSWQgc2hhZGVyKSA9IDA7CisKKyAgICAvLyBUQkQKKyAgICAvLyB2b2lkIGds
R2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0IChHTGVudW0gc2hhZGVydHlwZSwgR0xlbnVtIHByZWNp
c2lvbnR5cGUsIEdMaW50KiByYW5nZSwgR0xpbnQqIHByZWNpc2lvbik7CisKKyAgICB2aXJ0dWFs
IFdlYlN0cmluZyBnZXRTaGFkZXJTb3VyY2UoV2ViR0xJZCBzaGFkZXIpID0gMDsKKyAgICB2aXJ0
dWFsIFdlYlN0cmluZyBnZXRTdHJpbmcodW5zaWduZWQgbG9uZyBuYW1lKSA9IDA7CisKKyAgICB2
aXJ0dWFsIHZvaWQgZ2V0VGV4UGFyYW1ldGVyZnYodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2ln
bmVkIGxvbmcgcG5hbWUsIGZsb2F0KiB2YWx1ZSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBnZXRU
ZXhQYXJhbWV0ZXJpdih1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBwbmFtZSwg
aW50KiB2YWx1ZSkgPSAwOworCisgICAgdmlydHVhbCB2b2lkIGdldFVuaWZvcm1mdihXZWJHTElk
IHByb2dyYW0sIGxvbmcgbG9jYXRpb24sIGZsb2F0KiB2YWx1ZSkgPSAwOworICAgIHZpcnR1YWwg
dm9pZCBnZXRVbmlmb3JtaXYoV2ViR0xJZCBwcm9ncmFtLCBsb25nIGxvY2F0aW9uLCBpbnQqIHZh
bHVlKSA9IDA7CisKKyAgICB2aXJ0dWFsIGxvbmcgZ2V0VW5pZm9ybUxvY2F0aW9uKFdlYkdMSWQg
cHJvZ3JhbSwgY29uc3QgY2hhciogbmFtZSkgPSAwOworCisgICAgdmlydHVhbCB2b2lkIGdldFZl
cnRleEF0dHJpYmZ2KHVuc2lnbmVkIGxvbmcgaW5kZXgsIHVuc2lnbmVkIGxvbmcgcG5hbWUsIGZs
b2F0KiB2YWx1ZSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBnZXRWZXJ0ZXhBdHRyaWJpdih1bnNp
Z25lZCBsb25nIGluZGV4LCB1bnNpZ25lZCBsb25nIHBuYW1lLCBpbnQqIHZhbHVlKSA9IDA7CisK
KyAgICB2aXJ0dWFsIGxvbmcgZ2V0VmVydGV4QXR0cmliT2Zmc2V0KHVuc2lnbmVkIGxvbmcgaW5k
ZXgsIHVuc2lnbmVkIGxvbmcgcG5hbWUpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBoaW50KHVu
c2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIG1vZGUpID0gMDsKKyAgICB2aXJ0dWFs
IGJvb2wgaXNCdWZmZXIoV2ViR0xJZCBidWZmZXIpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNF
bmFibGVkKHVuc2lnbmVkIGxvbmcgY2FwKSA9IDA7CisgICAgdmlydHVhbCBib29sIGlzRnJhbWVi
dWZmZXIoV2ViR0xJZCBmcmFtZWJ1ZmZlcikgPSAwOworICAgIHZpcnR1YWwgYm9vbCBpc1Byb2dy
YW0oV2ViR0xJZCBwcm9ncmFtKSA9IDA7CisgICAgdmlydHVhbCBib29sIGlzUmVuZGVyYnVmZmVy
KFdlYkdMSWQgcmVuZGVyYnVmZmVyKSA9IDA7CisgICAgdmlydHVhbCBib29sIGlzU2hhZGVyKFdl
YkdMSWQgc2hhZGVyKSA9IDA7CisgICAgdmlydHVhbCBib29sIGlzVGV4dHVyZShXZWJHTElkIHRl
eHR1cmUpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgbGluZVdpZHRoKGRvdWJsZSkgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBsaW5rUHJvZ3JhbShXZWJHTElkIHByb2dyYW0pID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgcGl4ZWxTdG9yZWkodW5zaWduZWQgbG9uZyBwbmFtZSwgbG9uZyBwYXJhbSkgPSAw
OworICAgIHZpcnR1YWwgdm9pZCBwb2x5Z29uT2Zmc2V0KGRvdWJsZSBmYWN0b3IsIGRvdWJsZSB1
bml0cykgPSAwOworCisgICAgdmlydHVhbCB2b2lkIHJlYWRQaXhlbHMobG9uZyB4LCBsb25nIHks
IHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0LCB1bnNpZ25lZCBsb25n
IGZvcm1hdCwgdW5zaWduZWQgbG9uZyB0eXBlLCB2b2lkKiBwaXhlbHMpID0gMDsKKworICAgIHZp
cnR1YWwgdm9pZCByZWxlYXNlU2hhZGVyQ29tcGlsZXIoKSA9IDA7CisgICAgdmlydHVhbCB2b2lk
IHJlbmRlcmJ1ZmZlclN0b3JhZ2UodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcg
aW50ZXJuYWxmb3JtYXQsIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNhbXBsZUNvdmVyYWdlKGRvdWJsZSB2YWx1ZSwgYm9v
bCBpbnZlcnQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2Npc3Nvcihsb25nIHgsIGxvbmcgeSwg
dW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQpID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgc2hhZGVyU291cmNlKFdlYkdMSWQgc2hhZGVyLCBjb25zdCBjaGFyKiBzdHJpbmcp
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc3RlbmNpbEZ1bmModW5zaWduZWQgbG9uZyBmdW5jLCBs
b25nIHJlZiwgdW5zaWduZWQgbG9uZyBtYXNrKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHN0ZW5j
aWxGdW5jU2VwYXJhdGUodW5zaWduZWQgbG9uZyBmYWNlLCB1bnNpZ25lZCBsb25nIGZ1bmMsIGxv
bmcgcmVmLCB1bnNpZ25lZCBsb25nIG1hc2spID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc3RlbmNp
bE1hc2sodW5zaWduZWQgbG9uZyBtYXNrKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHN0ZW5jaWxN
YXNrU2VwYXJhdGUodW5zaWduZWQgbG9uZyBmYWNlLCB1bnNpZ25lZCBsb25nIG1hc2spID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgc3RlbmNpbE9wKHVuc2lnbmVkIGxvbmcgZmFpbCwgdW5zaWduZWQg
bG9uZyB6ZmFpbCwgdW5zaWduZWQgbG9uZyB6cGFzcykgPSAwOworICAgIHZpcnR1YWwgdm9pZCBz
dGVuY2lsT3BTZXBhcmF0ZSh1bnNpZ25lZCBsb25nIGZhY2UsIHVuc2lnbmVkIGxvbmcgZmFpbCwg
dW5zaWduZWQgbG9uZyB6ZmFpbCwgdW5zaWduZWQgbG9uZyB6cGFzcykgPSAwOworCisgICAgdmly
dHVhbCB2b2lkIHRleEltYWdlMkQodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBsZXZlbCwgdW5z
aWduZWQgaW50ZXJuYWxmb3JtYXQsIHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQsIHVu
c2lnbmVkIGJvcmRlciwgdW5zaWduZWQgZm9ybWF0LCB1bnNpZ25lZCB0eXBlLCBjb25zdCB2b2lk
KiBwaXhlbHMpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCB0ZXhQYXJhbWV0ZXJmKHVuc2lnbmVk
IHRhcmdldCwgdW5zaWduZWQgcG5hbWUsIGZsb2F0IHBhcmFtKSA9IDA7CisgICAgdmlydHVhbCB2
b2lkIHRleFBhcmFtZXRlcmkodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBwbmFtZSwgaW50IHBh
cmFtKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgdGV4U3ViSW1hZ2UyRCh1bnNpZ25lZCB0YXJn
ZXQsIHVuc2lnbmVkIGxldmVsLCB1bnNpZ25lZCB4b2Zmc2V0LCB1bnNpZ25lZCB5b2Zmc2V0LCB1
bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0LCB1bnNpZ25lZCBmb3JtYXQsIHVuc2lnbmVk
IHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVscykgPSAwOworCisgICAgdmlydHVhbCB2b2lkIHVuaWZv
cm0xZihsb25nIGxvY2F0aW9uLCBmbG9hdCB4KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHVuaWZv
cm0xZnYobG9uZyBsb2NhdGlvbiwgaW50IGNvdW50LCBmbG9hdCogdikgPSAwOworICAgIHZpcnR1
YWwgdm9pZCB1bmlmb3JtMWkobG9uZyBsb2NhdGlvbiwgaW50IHgpID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgdW5pZm9ybTFpdihsb25nIGxvY2F0aW9uLCBpbnQgY291bnQsIGludCogdikgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCB1bmlmb3JtMmYobG9uZyBsb2NhdGlvbiwgZmxvYXQgeCwgZmxvYXQg
eSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCB1bmlmb3JtMmZ2KGxvbmcgbG9jYXRpb24sIGludCBj
b3VudCwgZmxvYXQqIHYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdW5pZm9ybTJpKGxvbmcgbG9j
YXRpb24sIGludCB4LCBpbnQgeSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCB1bmlmb3JtMml2KGxv
bmcgbG9jYXRpb24sIGludCBjb3VudCwgaW50KiB2KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHVu
aWZvcm0zZihsb25nIGxvY2F0aW9uLCBmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB6KSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIHVuaWZvcm0zZnYobG9uZyBsb2NhdGlvbiwgaW50IGNvdW50LCBmbG9h
dCogdikgPSAwOworICAgIHZpcnR1YWwgdm9pZCB1bmlmb3JtM2kobG9uZyBsb2NhdGlvbiwgaW50
IHgsIGludCB5LCBpbnQgeikgPSAwOworICAgIHZpcnR1YWwgdm9pZCB1bmlmb3JtM2l2KGxvbmcg
bG9jYXRpb24sIGludCBjb3VudCwgaW50KiB2KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHVuaWZv
cm00Zihsb25nIGxvY2F0aW9uLCBmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB6LCBmbG9hdCB3KSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIHVuaWZvcm00ZnYobG9uZyBsb2NhdGlvbiwgaW50IGNvdW50
LCBmbG9hdCogdikgPSAwOworICAgIHZpcnR1YWwgdm9pZCB1bmlmb3JtNGkobG9uZyBsb2NhdGlv
biwgaW50IHgsIGludCB5LCBpbnQgeiwgaW50IHcpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdW5p
Zm9ybTRpdihsb25nIGxvY2F0aW9uLCBpbnQgY291bnQsIGludCogdikgPSAwOworICAgIHZpcnR1
YWwgdm9pZCB1bmlmb3JtTWF0cml4MmZ2KGxvbmcgbG9jYXRpb24sIGludCBjb3VudCwgYm9vbCB0
cmFuc3Bvc2UsIGNvbnN0IGZsb2F0KiB2YWx1ZSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCB1bmlm
b3JtTWF0cml4M2Z2KGxvbmcgbG9jYXRpb24sIGludCBjb3VudCwgYm9vbCB0cmFuc3Bvc2UsIGNv
bnN0IGZsb2F0KiB2YWx1ZSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCB1bmlmb3JtTWF0cml4NGZ2
KGxvbmcgbG9jYXRpb24sIGludCBjb3VudCwgYm9vbCB0cmFuc3Bvc2UsIGNvbnN0IGZsb2F0KiB2
YWx1ZSkgPSAwOworCisgICAgdmlydHVhbCB2b2lkIHVzZVByb2dyYW0oV2ViR0xJZCBwcm9ncmFt
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHZhbGlkYXRlUHJvZ3JhbShXZWJHTElkIHByb2dyYW0p
ID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCB2ZXJ0ZXhBdHRyaWIxZih1bnNpZ25lZCBsb25nIGlu
ZHgsIGZsb2F0IHgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdmVydGV4QXR0cmliMWZ2KHVuc2ln
bmVkIGxvbmcgaW5keCwgY29uc3QgZmxvYXQqIHZhbHVlcykgPSAwOworICAgIHZpcnR1YWwgdm9p
ZCB2ZXJ0ZXhBdHRyaWIyZih1bnNpZ25lZCBsb25nIGluZHgsIGZsb2F0IHgsIGZsb2F0IHkpID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgdmVydGV4QXR0cmliMmZ2KHVuc2lnbmVkIGxvbmcgaW5keCwg
Y29uc3QgZmxvYXQqIHZhbHVlcykgPSAwOworICAgIHZpcnR1YWwgdm9pZCB2ZXJ0ZXhBdHRyaWIz
Zih1bnNpZ25lZCBsb25nIGluZHgsIGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHopID0gMDsKKyAg
ICB2aXJ0dWFsIHZvaWQgdmVydGV4QXR0cmliM2Z2KHVuc2lnbmVkIGxvbmcgaW5keCwgY29uc3Qg
ZmxvYXQqIHZhbHVlcykgPSAwOworICAgIHZpcnR1YWwgdm9pZCB2ZXJ0ZXhBdHRyaWI0Zih1bnNp
Z25lZCBsb25nIGluZHgsIGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHosIGZsb2F0IHcpID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgdmVydGV4QXR0cmliNGZ2KHVuc2lnbmVkIGxvbmcgaW5keCwgY29u
c3QgZmxvYXQqIHZhbHVlcykgPSAwOworICAgIHZpcnR1YWwgdm9pZCB2ZXJ0ZXhBdHRyaWJQb2lu
dGVyKHVuc2lnbmVkIGxvbmcgaW5keCwgaW50IHNpemUsIGludCB0eXBlLCBib29sIG5vcm1hbGl6
ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBz
dHJpZGUsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgdmll
d3BvcnQobG9uZyB4LCBsb25nIHksIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcg
aGVpZ2h0KSA9IDA7CisKKyAgICAvLyBTdXBwb3J0IGZvciBidWZmZXIgY3JlYXRpb24gYW5kIGRl
bGV0aW9uLgorICAgIHZpcnR1YWwgdW5zaWduZWQgY3JlYXRlQnVmZmVyKCkgPSAwOworICAgIHZp
cnR1YWwgdW5zaWduZWQgY3JlYXRlRnJhbWVidWZmZXIoKSA9IDA7CisgICAgdmlydHVhbCB1bnNp
Z25lZCBjcmVhdGVQcm9ncmFtKCkgPSAwOworICAgIHZpcnR1YWwgdW5zaWduZWQgY3JlYXRlUmVu
ZGVyYnVmZmVyKCkgPSAwOworICAgIHZpcnR1YWwgdW5zaWduZWQgY3JlYXRlU2hhZGVyKHVuc2ln
bmVkIGxvbmcpID0gMDsKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGNyZWF0ZVRleHR1cmUoKSA9IDA7
CisKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlQnVmZmVyKHVuc2lnbmVkKSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIGRlbGV0ZUZyYW1lYnVmZmVyKHVuc2lnbmVkKSA9IDA7CisgICAgdmlydHVhbCB2
b2lkIGRlbGV0ZVByb2dyYW0odW5zaWduZWQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRl
UmVuZGVyYnVmZmVyKHVuc2lnbmVkKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZVNoYWRl
cih1bnNpZ25lZCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVUZXh0dXJlKHVuc2lnbmVk
KSA9IDA7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmCkluZGV4OiBXZWJL
aXQvY2hyb21pdW0vcHVibGljL1dlYktpdENsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9j
aHJvbWl1bS9wdWJsaWMvV2ViS2l0Q2xpZW50LmgJKHJldmlzaW9uIDU2MzU2KQorKysgV2ViS2l0
L2Nocm9taXVtL3B1YmxpYy9XZWJLaXRDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDksNiAr
NDksNyBAQCBjbGFzcyBXZWJBcHBsaWNhdGlvbkNhY2hlSG9zdDsKIGNsYXNzIFdlYkFwcGxpY2F0
aW9uQ2FjaGVIb3N0Q2xpZW50OwogY2xhc3MgV2ViQ2xpcGJvYXJkOwogY2xhc3MgV2ViQ29va2ll
SmFyOworY2xhc3MgV2ViR3JhcGhpY3NDb250ZXh0M0Q7CiBjbGFzcyBXZWJJbmRleGVkRGF0YWJh
c2U7CiBjbGFzcyBXZWJNZXNzYWdlUG9ydENoYW5uZWw7CiBjbGFzcyBXZWJNaW1lUmVnaXN0cnk7
CkBAIC0yNjksNiArMjcwLDEyIEBAIHB1YmxpYzoKICAgICAvLyBDYWxsYWJsZSBmcm9tIGEgYmFj
a2dyb3VuZCBXZWJLaXQgdGhyZWFkLgogICAgIHZpcnR1YWwgdm9pZCBjYWxsT25NYWluVGhyZWFk
KHZvaWQgKCpmdW5jKSgpKSB7IH0KIAorICAgIC8vIFdlYkdMIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAvLyBNYXkg
cmV0dXJuIG51bGwgaWYgV2ViR0wgaXMgbm90IHN1cHBvcnRlZC4KKyAgICAvLyBSZXR1cm5zIG5l
d2x5IGFsbG9jYXRlZCBXZWJHcmFwaGljc0NvbnRleHQzRCBpbnN0YW5jZS4KKyAgICB2aXJ0dWFs
IFdlYkdyYXBoaWNzQ29udGV4dDNEKiBjcmVhdGVHcmFwaGljc0NvbnRleHQzRCgpIHsgcmV0dXJu
IDA7IH0KKwogcHJvdGVjdGVkOgogICAgIH5XZWJLaXRDbGllbnQoKSB7IH0KIH07CkluZGV4OiBX
ZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBoaWNzQ29udGV4dDNELmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBoaWNzQ29udGV4dDNELmNwcAkocmV2aXNpb24gNTYzNTYp
CisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBoaWNzQ29udGV4dDNELmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzQsMTMgKzM0LDEyIEBACiAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5o
IgogCi0jaW5jbHVkZSAiQ2FjaGVkSW1hZ2UuaCIKICNpbmNsdWRlICJDU3RyaW5nLmgiCisjaW5j
bHVkZSAiQ2FjaGVkSW1hZ2UuaCIKICNpbmNsdWRlICJIVE1MQ2FudmFzRWxlbWVudC5oIgogI2lu
Y2x1ZGUgIkhUTUxJbWFnZUVsZW1lbnQuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2lu
Y2x1ZGUgIkltYWdlRGF0YS5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVk
ZSAiV2ViR0xCdWZmZXIuaCIKICNpbmNsdWRlICJXZWJHTEJ5dGVBcnJheS5oIgogI2luY2x1ZGUg
IldlYkdMRmxvYXRBcnJheS5oIgpAQCAtNTIsMzkgKzUxLDQxIEBACiAjaW5jbHVkZSAiV2ViR0xT
aGFkZXIuaCIKICNpbmNsdWRlICJXZWJHTFRleHR1cmUuaCIKICNpbmNsdWRlICJXZWJHTFVuc2ln
bmVkQnl0ZUFycmF5LmgiCisjaW5jbHVkZSAiV2ViR3JhcGhpY3NDb250ZXh0M0QuaCIKKyNpbmNs
dWRlICJXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsLmgiCisjaW5jbHVkZSAiV2ViS2l0
LmgiCisjaW5jbHVkZSAiV2ViS2l0Q2xpZW50LmgiCiAKICNpbmNsdWRlIDxzdGRpby5oPgogI2lu
Y2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CiAKLSNpZiBPUyhXSU5ET1dTKQotI2luY2x1ZGUgPHdp
bmRvd3MuaD4KLSNlbmRpZgotCi0jaW5jbHVkZSAiR0wvZ2xldy5oIgotCiAjaWYgUExBVEZPUk0o
Q0cpCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSA8Q29yZUdyYXBoaWNz
L0NHQ29udGV4dC5oPgogI2luY2x1ZGUgPENvcmVHcmFwaGljcy9DR0ltYWdlLmg+Ci0jaW5jbHVk
ZSA8T3BlbkdML09wZW5HTC5oPgotI2Vsc2UKLSNkZWZpbmUgRkxJUF9GUkFNRUJVRkZFUl9WRVJU
SUNBTExZCi0jZW5kaWYKLQotI2lmIE9TKERBUldJTikKLSNkZWZpbmUgVVNFX1RFWFRVUkVfUkVD
VEFOR0xFX0ZPUl9GUkFNRUJVRkZFUgogI2VuZGlmCiAKLSNpZiBPUyhMSU5VWCkKLSNpbmNsdWRl
IDxkbGZjbi5oPgotI2luY2x1ZGUgIkdML2dseGV3LmgiCi0jZW5kaWYKKy8vIHVzaW5nIG5hbWVz
cGFjZSBzdGQ7CiAKLXVzaW5nIG5hbWVzcGFjZSBzdGQ7CisvLyBUaGVyZSBhcmUgdHdvIGxldmVs
cyBvZiBkZWxlZ2F0aW9uIGluIHRoaXMgZmlsZToKKy8vCisvLyAgIDEuIEdyYXBoaWNzQ29udGV4
dDNEIGRlbGVnYXRlcyB0byBHcmFwaGljc0NvbnRleHQzREludGVybmFsLiBUaGlzIGlzIGRvbmUK
Ky8vICAgICAgc28gdGhhdCB3ZSBoYXZlIHNvbWUgcGxhY2UgdG8gc3RvcmUgZGF0YSBtZW1iZXJz
IGNvbW1vbiBhbW9uZworLy8gICAgICBpbXBsZW1lbnRhdGlvbnM7IEdyYXBoaWNzQ29udGV4dDNE
IG9ubHkgcHJvdmlkZXMgdXMgdGhlIG1faW50ZXJuYWwKKy8vICAgICAgcG9pbnRlci4gV2UgYWx3
YXlzIGRlbGVnYXRlIHRvIHRoZSBHcmFwaGljc0NvbnRleHQzREludGVybmFsLiBXaGlsZSB3ZQor
Ly8gICAgICBjb3VsZCBzaWRlc3RlcCBpdCBhbmQgZ28gZGlyZWN0bHkgdG8gdGhlIFdlYkdyYXBo
aWNzQ29udGV4dDNEIGluIHNvbWUKKy8vICAgICAgY2FzZXMsIGl0IGlzIGJldHRlciBmb3IgY29u
c2lzdGVuY3kgdG8gYWx3YXlzIGRlbGVnYXRlIHRocm91Z2ggaXQuCisvLworLy8gICAyLiBHcmFw
aGljc0NvbnRleHQzREludGVybmFsIGRlbGVnYXRlcyB0byBhbiBpbXBsZW1lbnRhdGlvbiBvZgor
Ly8gICAgICBXZWJHcmFwaGljc0NvbnRleHQzRC4gVGhpcyBpcyBkb25lIHNvIHdlIGhhdmUgYSBw
bGFjZSB0byBpbmplY3QgYW4KKy8vICAgICAgaW1wbGVtZW50YXRpb24gd2hpY2ggcmVtb3RlcyB0
aGUgT3BlbkdMIGNhbGxzIGFjcm9zcyBwcm9jZXNzZXMuCisvLworLy8gVGhlIGxlZ2FjeSwgaW4t
cHJvY2VzcywgaW1wbGVtZW50YXRpb24gdXNlcyBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJ
bXBsLgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLS8vIEdyYXBoaWNzQ29udGV4dDNESW50ZXJu
YWwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
Ky8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQorLy8gR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbAogCiAvLyBVbmNv
bW1lbnQgdGhpcyB0byByZW5kZXIgdG8gYSBzZXBhcmF0ZSB3aW5kb3cgZm9yIGRlYnVnZ2luZwog
Ly8gI2RlZmluZSBSRU5ERVJfVE9fREVCVUdHSU5HX1dJTkRPVwpAQCAtOTMsNzQ0ICs5NCwzMjYg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBHcmFwaGljc0NvbnRleHQzREludGVybmFs
IHsKIHB1YmxpYzoKLSAgICBHcmFwaGljc0NvbnRleHQzREludGVybmFsKEdyYXBoaWNzQ29udGV4
dDNEOjpBdHRyaWJ1dGVzIGF0dHJzKTsKKyAgICBHcmFwaGljc0NvbnRleHQzREludGVybmFsKCk7
CiAgICAgfkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwoKTsKIAotICAgIGJvb2wgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CisgICAgYm9vbCBpbml0aWFsaXplKEdyYXBoaWNzQ29udGV4dDNEOjpBdHRy
aWJ1dGVzIGF0dHJzKTsKIAogICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QgcGxhdGZvcm1H
cmFwaGljc0NvbnRleHQzRCgpIGNvbnN0OwogICAgIFBsYXRmb3JtM0RPYmplY3QgcGxhdGZvcm1U
ZXh0dXJlKCkgY29uc3Q7CiAKKyAgICBib29sIG1ha2VDb250ZXh0Q3VycmVudCgpOworCisgICAg
aW50IHNpemVJbkJ5dGVzKGludCB0eXBlKTsKKwogICAgIHZvaWQgcmVzaGFwZShpbnQgd2lkdGgs
IGludCBoZWlnaHQpOwogCiAgICAgdm9pZCBiZWdpblBhaW50KFdlYkdMUmVuZGVyaW5nQ29udGV4
dCogY29udGV4dCk7CisgICAgdm9pZCBlbmRQYWludCgpOwogCi0gICAgYm9vbCB2YWxpZGF0ZVRl
eHR1cmVUYXJnZXQoaW50IHRhcmdldCk7Ci0gICAgYm9vbCB2YWxpZGF0ZVRleHR1cmVQYXJhbWV0
ZXIoaW50IHBhcmFtKTsKLQorICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIEVudHJ5IHBvaW50
cyBmb3IgV2ViR0wuCisgICAgLy8KICAgICB2b2lkIGFjdGl2ZVRleHR1cmUodW5zaWduZWQgbG9u
ZyB0ZXh0dXJlKTsKLSAgICB2b2lkIGJpbmRCdWZmZXIodW5zaWduZWQgbG9uZyB0YXJnZXQsCi0g
ICAgICAgICAgICAgICAgICAgIFdlYkdMQnVmZmVyKiBidWZmZXIpOwotICAgIHZvaWQgYmluZEZy
YW1lYnVmZmVyKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LAotICAgICAgICAgICAgICAgICAgICAgICAg
IFdlYkdMRnJhbWVidWZmZXIqIGZyYW1lYnVmZmVyKTsKLSAgICB2b2lkIGJpbmRUZXh0dXJlKHVu
c2lnbmVkIGxvbmcgdGFyZ2V0LAotICAgICAgICAgICAgICAgICAgICAgV2ViR0xUZXh0dXJlKiB0
ZXh0dXJlKTsKLSAgICB2b2lkIGJ1ZmZlckRhdGFJbXBsKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBp
bnQgc2l6ZSwgY29uc3Qgdm9pZCogZGF0YSwgdW5zaWduZWQgbG9uZyB1c2FnZSk7CisgICAgdm9p
ZCBhdHRhY2hTaGFkZXIoV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBXZWJHTFNoYWRlciogc2hhZGVy
KTsKKyAgICB2b2lkIGJpbmRBdHRyaWJMb2NhdGlvbihXZWJHTFByb2dyYW0qLCB1bnNpZ25lZCBs
b25nIGluZGV4LCBjb25zdCBTdHJpbmcmIG5hbWUpOworICAgIHZvaWQgYmluZEJ1ZmZlcih1bnNp
Z25lZCBsb25nIHRhcmdldCwgV2ViR0xCdWZmZXIqKTsKKyAgICB2b2lkIGJpbmRGcmFtZWJ1ZmZl
cih1bnNpZ25lZCBsb25nIHRhcmdldCwgV2ViR0xGcmFtZWJ1ZmZlciopOworICAgIHZvaWQgYmlu
ZFJlbmRlcmJ1ZmZlcih1bnNpZ25lZCBsb25nIHRhcmdldCwgV2ViR0xSZW5kZXJidWZmZXIqKTsK
KyAgICB2b2lkIGJpbmRUZXh0dXJlKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBXZWJHTFRleHR1cmUq
IHRleHR1cmUpOworICAgIHZvaWQgYmxlbmRDb2xvcihkb3VibGUgcmVkLCBkb3VibGUgZ3JlZW4s
IGRvdWJsZSBibHVlLCBkb3VibGUgYWxwaGEpOworICAgIHZvaWQgYmxlbmRFcXVhdGlvbih1bnNp
Z25lZCBsb25nIG1vZGUpOworICAgIHZvaWQgYmxlbmRFcXVhdGlvblNlcGFyYXRlKHVuc2lnbmVk
IGxvbmcgbW9kZVJHQiwgdW5zaWduZWQgbG9uZyBtb2RlQWxwaGEpOworICAgIHZvaWQgYmxlbmRG
dW5jKHVuc2lnbmVkIGxvbmcgc2ZhY3RvciwgdW5zaWduZWQgbG9uZyBkZmFjdG9yKTsKKyAgICB2
b2lkIGJsZW5kRnVuY1NlcGFyYXRlKHVuc2lnbmVkIGxvbmcgc3JjUkdCLCB1bnNpZ25lZCBsb25n
IGRzdFJHQiwgdW5zaWduZWQgbG9uZyBzcmNBbHBoYSwgdW5zaWduZWQgbG9uZyBkc3RBbHBoYSk7
CisKKyAgICB2b2lkIGJ1ZmZlckRhdGEodW5zaWduZWQgbG9uZyB0YXJnZXQsIGludCBzaXplLCB1
bnNpZ25lZCBsb25nIHVzYWdlKTsKKyAgICB2b2lkIGJ1ZmZlckRhdGEodW5zaWduZWQgbG9uZyB0
YXJnZXQsIFdlYkdMQXJyYXkqIGRhdGEsIHVuc2lnbmVkIGxvbmcgdXNhZ2UpOworICAgIHZvaWQg
YnVmZmVyU3ViRGF0YSh1bnNpZ25lZCBsb25nIHRhcmdldCwgbG9uZyBvZmZzZXQsIFdlYkdMQXJy
YXkqIGRhdGEpOworCisgICAgdW5zaWduZWQgbG9uZyBjaGVja0ZyYW1lYnVmZmVyU3RhdHVzKHVu
c2lnbmVkIGxvbmcgdGFyZ2V0KTsKKyAgICB2b2lkIGNsZWFyKHVuc2lnbmVkIGxvbmcgbWFzayk7
CisgICAgdm9pZCBjbGVhckNvbG9yKGRvdWJsZSByZWQsIGRvdWJsZSBncmVlbiwgZG91YmxlIGJs
dWUsIGRvdWJsZSBhbHBoYSk7CisgICAgdm9pZCBjbGVhckRlcHRoKGRvdWJsZSBkZXB0aCk7Cisg
ICAgdm9pZCBjbGVhclN0ZW5jaWwobG9uZyBzKTsKKyAgICB2b2lkIGNvbG9yTWFzayhib29sIHJl
ZCwgYm9vbCBncmVlbiwgYm9vbCBibHVlLCBib29sIGFscGhhKTsKKyAgICB2b2lkIGNvbXBpbGVT
aGFkZXIoV2ViR0xTaGFkZXIqKTsKKworICAgIHZvaWQgY29weVRleEltYWdlMkQodW5zaWduZWQg
bG9uZyB0YXJnZXQsIGxvbmcgbGV2ZWwsIHVuc2lnbmVkIGxvbmcgaW50ZXJuYWxmb3JtYXQsIGxv
bmcgeCwgbG9uZyB5LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCwg
bG9uZyBib3JkZXIpOworICAgIHZvaWQgY29weVRleFN1YkltYWdlMkQodW5zaWduZWQgbG9uZyB0
YXJnZXQsIGxvbmcgbGV2ZWwsIGxvbmcgeG9mZnNldCwgbG9uZyB5b2Zmc2V0LCBsb25nIHgsIGxv
bmcgeSwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQpOworICAgIHZv
aWQgY3VsbEZhY2UodW5zaWduZWQgbG9uZyBtb2RlKTsKKyAgICB2b2lkIGRlcHRoRnVuYyh1bnNp
Z25lZCBsb25nIGZ1bmMpOworICAgIHZvaWQgZGVwdGhNYXNrKGJvb2wgZmxhZyk7CisgICAgdm9p
ZCBkZXB0aFJhbmdlKGRvdWJsZSB6TmVhciwgZG91YmxlIHpGYXIpOworICAgIHZvaWQgZGV0YWNo
U2hhZGVyKFdlYkdMUHJvZ3JhbSosIFdlYkdMU2hhZGVyKik7CisgICAgdm9pZCBkaXNhYmxlKHVu
c2lnbmVkIGxvbmcgY2FwKTsKICAgICB2b2lkIGRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheSh1bnNp
Z25lZCBsb25nIGluZGV4KTsKKyAgICB2b2lkIGRyYXdBcnJheXModW5zaWduZWQgbG9uZyBtb2Rl
LCBsb25nIGZpcnN0LCBsb25nIGNvdW50KTsKKyAgICB2b2lkIGRyYXdFbGVtZW50cyh1bnNpZ25l
ZCBsb25nIG1vZGUsIHVuc2lnbmVkIGxvbmcgY291bnQsIHVuc2lnbmVkIGxvbmcgdHlwZSwgbG9u
ZyBvZmZzZXQpOworCisgICAgdm9pZCBlbmFibGUodW5zaWduZWQgbG9uZyBjYXApOwogICAgIHZv
aWQgZW5hYmxlVmVydGV4QXR0cmliQXJyYXkodW5zaWduZWQgbG9uZyBpbmRleCk7Ci0gICAgdW5z
aWduZWQgbG9uZyBnZXRFcnJvcigpOworICAgIHZvaWQgZmluaXNoKCk7CisgICAgdm9pZCBmbHVz
aCgpOworICAgIHZvaWQgZnJhbWVidWZmZXJSZW5kZXJidWZmZXIodW5zaWduZWQgbG9uZyB0YXJn
ZXQsIHVuc2lnbmVkIGxvbmcgYXR0YWNobWVudCwgdW5zaWduZWQgbG9uZyByZW5kZXJidWZmZXJ0
YXJnZXQsIFdlYkdMUmVuZGVyYnVmZmVyKik7CisgICAgdm9pZCBmcmFtZWJ1ZmZlclRleHR1cmUy
RCh1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBhdHRhY2htZW50LCB1bnNpZ25l
ZCBsb25nIHRleHRhcmdldCwgV2ViR0xUZXh0dXJlKiwgbG9uZyBsZXZlbCk7CisgICAgdm9pZCBm
cm9udEZhY2UodW5zaWduZWQgbG9uZyBtb2RlKTsKKyAgICB2b2lkIGdlbmVyYXRlTWlwbWFwKHVu
c2lnbmVkIGxvbmcgdGFyZ2V0KTsKKworICAgIGJvb2wgZ2V0QWN0aXZlQXR0cmliKFdlYkdMUHJv
Z3JhbSogcHJvZ3JhbSwgdW5zaWduZWQgbG9uZyBpbmRleCwgQWN0aXZlSW5mbyYpOworICAgIGJv
b2wgZ2V0QWN0aXZlVW5pZm9ybShXZWJHTFByb2dyYW0qIHByb2dyYW0sIHVuc2lnbmVkIGxvbmcg
aW5kZXgsIEFjdGl2ZUluZm8mKTsKKworICAgIGludCAgZ2V0QXR0cmliTG9jYXRpb24oV2ViR0xQ
cm9ncmFtKiwgY29uc3QgU3RyaW5nJiBuYW1lKTsKKworICAgIHZvaWQgZ2V0Qm9vbGVhbnYodW5z
aWduZWQgbG9uZyBwbmFtZSwgdW5zaWduZWQgY2hhciogdmFsdWUpOworCisgICAgdm9pZCBnZXRC
dWZmZXJQYXJhbWV0ZXJpdih1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBwbmFt
ZSwgaW50KiB2YWx1ZSk7CisKICAgICBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBnZXRD
b250ZXh0QXR0cmlidXRlcygpOwotICAgIHZvaWQgdmVydGV4QXR0cmliUG9pbnRlcih1bnNpZ25l
ZCBsb25nIGluZHgsIGludCBzaXplLCBpbnQgdHlwZSwgYm9vbCBub3JtYWxpemVkLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHN0cmlkZSwgdW5zaWduZWQgbG9u
ZyBvZmZzZXQpOwotICAgIHZvaWQgdmlld3BvcnRJbXBsKGxvbmcgeCwgbG9uZyB5LCB1bnNpZ25l
ZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCk7CiAKLSAgICB2b2lkIHN5bnRoZXNp
emVHTEVycm9yKHVuc2lnbmVkIGxvbmcgZXJyb3IpOworICAgIHVuc2lnbmVkIGxvbmcgZ2V0RXJy
b3IoKTsKIAotcHJpdmF0ZToKLSAgICBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBtX2F0
dHJzOworICAgIHZvaWQgZ2V0RmxvYXR2KHVuc2lnbmVkIGxvbmcgcG5hbWUsIGZsb2F0KiB2YWx1
ZSk7CiAKLSAgICB1bnNpZ25lZCBpbnQgbV90ZXh0dXJlOwotICAgIHVuc2lnbmVkIGludCBtX2Zi
bzsKLSAgICB1bnNpZ25lZCBpbnQgbV9kZXB0aEJ1ZmZlcjsKLSAgICB1bnNpZ25lZCBpbnQgbV9j
YWNoZWRXaWR0aCwgbV9jYWNoZWRIZWlnaHQ7Ci0KLSAgICAvLyBGb3IgdHJhY2tpbmcgd2hpY2gg
RkJPIGlzIGJvdW5kCi0gICAgdW5zaWduZWQgaW50IG1fYm91bmRGQk87Ci0KLSNpZmRlZiBGTElQ
X0ZSQU1FQlVGRkVSX1ZFUlRJQ0FMTFkKLSAgICB1bnNpZ25lZCBjaGFyKiBtX3NjYW5saW5lOwot
ICAgIHZvaWQgZmxpcFZlcnRpY2FsbHkodW5zaWduZWQgY2hhciogZnJhbWVidWZmZXIsCi0gICAg
ICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgd2lkdGgsCi0gICAgICAgICAgICAgICAg
ICAgICAgICB1bnNpZ25lZCBpbnQgaGVpZ2h0KTsKLSNlbmRpZgorICAgIHZvaWQgZ2V0RnJhbWVi
dWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVk
IGxvbmcgYXR0YWNobWVudCwgdW5zaWduZWQgbG9uZyBwbmFtZSwgaW50KiB2YWx1ZSk7CisKKyAg
ICB2b2lkIGdldEludGVnZXJ2KHVuc2lnbmVkIGxvbmcgcG5hbWUsIGludCogdmFsdWUpOworCisg
ICAgdm9pZCBnZXRQcm9ncmFtaXYoV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCB1bnNpZ25lZCBsb25n
IHBuYW1lLCBpbnQqIHZhbHVlKTsKKworICAgIFN0cmluZyBnZXRQcm9ncmFtSW5mb0xvZyhXZWJH
TFByb2dyYW0qKTsKKworICAgIHZvaWQgZ2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXYodW5zaWdu
ZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgcG5hbWUsIGludCogdmFsdWUpOworCisgICAg
dm9pZCBnZXRTaGFkZXJpdihXZWJHTFNoYWRlciosIHVuc2lnbmVkIGxvbmcgcG5hbWUsIGludCog
dmFsdWUpOworCisgICAgU3RyaW5nIGdldFNoYWRlckluZm9Mb2coV2ViR0xTaGFkZXIqKTsKKwor
ICAgIFN0cmluZyBnZXRTaGFkZXJTb3VyY2UoV2ViR0xTaGFkZXIqKTsKKyAgICBTdHJpbmcgZ2V0
U3RyaW5nKHVuc2lnbmVkIGxvbmcgbmFtZSk7CisKKyAgICB2b2lkIGdldFRleFBhcmFtZXRlcmZ2
KHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIHBuYW1lLCBmbG9hdCogdmFsdWUp
OworICAgIHZvaWQgZ2V0VGV4UGFyYW1ldGVyaXYodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2ln
bmVkIGxvbmcgcG5hbWUsIGludCogdmFsdWUpOworCisgICAgdm9pZCBnZXRVbmlmb3JtZnYoV2Vi
R0xQcm9ncmFtKiBwcm9ncmFtLCBsb25nIGxvY2F0aW9uLCBmbG9hdCogdmFsdWUpOworICAgIHZv
aWQgZ2V0VW5pZm9ybWl2KFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgbG9uZyBsb2NhdGlvbiwgaW50
KiB2YWx1ZSk7CisKKyAgICBsb25nIGdldFVuaWZvcm1Mb2NhdGlvbihXZWJHTFByb2dyYW0qLCBj
b25zdCBTdHJpbmcmIG5hbWUpOworCisgICAgdm9pZCBnZXRWZXJ0ZXhBdHRyaWJmdih1bnNpZ25l
ZCBsb25nIGluZGV4LCB1bnNpZ25lZCBsb25nIHBuYW1lLCBmbG9hdCogdmFsdWUpOworICAgIHZv
aWQgZ2V0VmVydGV4QXR0cmliaXYodW5zaWduZWQgbG9uZyBpbmRleCwgdW5zaWduZWQgbG9uZyBw
bmFtZSwgaW50KiB2YWx1ZSk7CisKKyAgICBsb25nIGdldFZlcnRleEF0dHJpYk9mZnNldCh1bnNp
Z25lZCBsb25nIGluZGV4LCB1bnNpZ25lZCBsb25nIHBuYW1lKTsKKworICAgIHZvaWQgaGludCh1
bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBtb2RlKTsKKyAgICBib29sIGlzQnVm
ZmVyKFdlYkdMQnVmZmVyKik7CisgICAgYm9vbCBpc0VuYWJsZWQodW5zaWduZWQgbG9uZyBjYXAp
OworICAgIGJvb2wgaXNGcmFtZWJ1ZmZlcihXZWJHTEZyYW1lYnVmZmVyKik7CisgICAgYm9vbCBp
c1Byb2dyYW0oV2ViR0xQcm9ncmFtKik7CisgICAgYm9vbCBpc1JlbmRlcmJ1ZmZlcihXZWJHTFJl
bmRlcmJ1ZmZlciopOworICAgIGJvb2wgaXNTaGFkZXIoV2ViR0xTaGFkZXIqKTsKKyAgICBib29s
IGlzVGV4dHVyZShXZWJHTFRleHR1cmUqKTsKKyAgICB2b2lkIGxpbmVXaWR0aChkb3VibGUpOwor
ICAgIHZvaWQgbGlua1Byb2dyYW0oV2ViR0xQcm9ncmFtKik7CisgICAgdm9pZCBwaXhlbFN0b3Jl
aSh1bnNpZ25lZCBsb25nIHBuYW1lLCBsb25nIHBhcmFtKTsKKyAgICB2b2lkIHBvbHlnb25PZmZz
ZXQoZG91YmxlIGZhY3RvciwgZG91YmxlIHVuaXRzKTsKKworICAgIFBhc3NSZWZQdHI8V2ViR0xB
cnJheT4gcmVhZFBpeGVscyhsb25nIHgsIGxvbmcgeSwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5z
aWduZWQgbG9uZyBoZWlnaHQsIHVuc2lnbmVkIGxvbmcgZm9ybWF0LCB1bnNpZ25lZCBsb25nIHR5
cGUpOworCisgICAgdm9pZCByZWxlYXNlU2hhZGVyQ29tcGlsZXIoKTsKKyAgICB2b2lkIHJlbmRl
cmJ1ZmZlclN0b3JhZ2UodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgaW50ZXJu
YWxmb3JtYXQsIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0KTsKKyAg
ICB2b2lkIHNhbXBsZUNvdmVyYWdlKGRvdWJsZSB2YWx1ZSwgYm9vbCBpbnZlcnQpOworICAgIHZv
aWQgc2Npc3Nvcihsb25nIHgsIGxvbmcgeSwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQg
bG9uZyBoZWlnaHQpOworICAgIHZvaWQgc2hhZGVyU291cmNlKFdlYkdMU2hhZGVyKiwgY29uc3Qg
U3RyaW5nJiBzdHJpbmcpOworICAgIHZvaWQgc3RlbmNpbEZ1bmModW5zaWduZWQgbG9uZyBmdW5j
LCBsb25nIHJlZiwgdW5zaWduZWQgbG9uZyBtYXNrKTsKKyAgICB2b2lkIHN0ZW5jaWxGdW5jU2Vw
YXJhdGUodW5zaWduZWQgbG9uZyBmYWNlLCB1bnNpZ25lZCBsb25nIGZ1bmMsIGxvbmcgcmVmLCB1
bnNpZ25lZCBsb25nIG1hc2spOworICAgIHZvaWQgc3RlbmNpbE1hc2sodW5zaWduZWQgbG9uZyBt
YXNrKTsKKyAgICB2b2lkIHN0ZW5jaWxNYXNrU2VwYXJhdGUodW5zaWduZWQgbG9uZyBmYWNlLCB1
bnNpZ25lZCBsb25nIG1hc2spOworICAgIHZvaWQgc3RlbmNpbE9wKHVuc2lnbmVkIGxvbmcgZmFp
bCwgdW5zaWduZWQgbG9uZyB6ZmFpbCwgdW5zaWduZWQgbG9uZyB6cGFzcyk7CisgICAgdm9pZCBz
dGVuY2lsT3BTZXBhcmF0ZSh1bnNpZ25lZCBsb25nIGZhY2UsIHVuc2lnbmVkIGxvbmcgZmFpbCwg
dW5zaWduZWQgbG9uZyB6ZmFpbCwgdW5zaWduZWQgbG9uZyB6cGFzcyk7CisKKyAgICAvLyBUaGVz
ZSBuZXh0IHNldmVyYWwgZnVuY3Rpb25zIHJldHVybiBhbiBlcnJvciBjb2RlICgwIGlmIG5vIGVy
cm9ycykgcmF0aGVyIHRoYW4gdXNpbmcgYW4gRXhjZXB0aW9uQ29kZS4KKyAgICAvLyBDdXJyZW50
bHkgdGhleSByZXR1cm4gLTEgb24gYW55IGVycm9yLgorICAgIGludCB0ZXhJbWFnZTJEKHVuc2ln
bmVkIHRhcmdldCwgdW5zaWduZWQgbGV2ZWwsIHVuc2lnbmVkIGludGVybmFsZm9ybWF0LCB1bnNp
Z25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0LCB1bnNpZ25lZCBib3JkZXIsIHVuc2lnbmVkIGZv
cm1hdCwgdW5zaWduZWQgdHlwZSwgdm9pZCogcGl4ZWxzKTsKKworICAgIHZvaWQgdGV4UGFyYW1l
dGVyZih1bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVkIHBuYW1lLCBmbG9hdCBwYXJhbSk7CisgICAg
dm9pZCB0ZXhQYXJhbWV0ZXJpKHVuc2lnbmVkIHRhcmdldCwgdW5zaWduZWQgcG5hbWUsIGludCBw
YXJhbSk7CisKKyAgICBpbnQgdGV4U3ViSW1hZ2UyRCh1bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVk
IGxldmVsLCB1bnNpZ25lZCB4b2Zmc2V0LCB1bnNpZ25lZCB5b2Zmc2V0LCB1bnNpZ25lZCB3aWR0
aCwgdW5zaWduZWQgaGVpZ2h0LCB1bnNpZ25lZCBmb3JtYXQsIHVuc2lnbmVkIHR5cGUsIHZvaWQq
IHBpeGVscyk7CisKKyAgICB2b2lkIHVuaWZvcm0xZihsb25nIGxvY2F0aW9uLCBmbG9hdCB4KTsK
KyAgICB2b2lkIHVuaWZvcm0xZnYobG9uZyBsb2NhdGlvbiwgZmxvYXQqIHYsIGludCBzaXplKTsK
KyAgICB2b2lkIHVuaWZvcm0xaShsb25nIGxvY2F0aW9uLCBpbnQgeCk7CisgICAgdm9pZCB1bmlm
b3JtMWl2KGxvbmcgbG9jYXRpb24sIGludCogdiwgaW50IHNpemUpOworICAgIHZvaWQgdW5pZm9y
bTJmKGxvbmcgbG9jYXRpb24sIGZsb2F0IHgsIGZsb2F0IHkpOworICAgIHZvaWQgdW5pZm9ybTJm
dihsb25nIGxvY2F0aW9uLCBmbG9hdCogdiwgaW50IHNpemUpOworICAgIHZvaWQgdW5pZm9ybTJp
KGxvbmcgbG9jYXRpb24sIGludCB4LCBpbnQgeSk7CisgICAgdm9pZCB1bmlmb3JtMml2KGxvbmcg
bG9jYXRpb24sIGludCogdiwgaW50IHNpemUpOworICAgIHZvaWQgdW5pZm9ybTNmKGxvbmcgbG9j
YXRpb24sIGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHopOworICAgIHZvaWQgdW5pZm9ybTNmdihs
b25nIGxvY2F0aW9uLCBmbG9hdCogdiwgaW50IHNpemUpOworICAgIHZvaWQgdW5pZm9ybTNpKGxv
bmcgbG9jYXRpb24sIGludCB4LCBpbnQgeSwgaW50IHopOworICAgIHZvaWQgdW5pZm9ybTNpdihs
b25nIGxvY2F0aW9uLCBpbnQqIHYsIGludCBzaXplKTsKKyAgICB2b2lkIHVuaWZvcm00Zihsb25n
IGxvY2F0aW9uLCBmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB6LCBmbG9hdCB3KTsKKyAgICB2b2lk
IHVuaWZvcm00ZnYobG9uZyBsb2NhdGlvbiwgZmxvYXQqIHYsIGludCBzaXplKTsKKyAgICB2b2lk
IHVuaWZvcm00aShsb25nIGxvY2F0aW9uLCBpbnQgeCwgaW50IHksIGludCB6LCBpbnQgdyk7Cisg
ICAgdm9pZCB1bmlmb3JtNGl2KGxvbmcgbG9jYXRpb24sIGludCogdiwgaW50IHNpemUpOworICAg
IHZvaWQgdW5pZm9ybU1hdHJpeDJmdihsb25nIGxvY2F0aW9uLCBib29sIHRyYW5zcG9zZSwgZmxv
YXQqIHZhbHVlLCBpbnQgc2l6ZSk7CisgICAgdm9pZCB1bmlmb3JtTWF0cml4M2Z2KGxvbmcgbG9j
YXRpb24sIGJvb2wgdHJhbnNwb3NlLCBmbG9hdCogdmFsdWUsIGludCBzaXplKTsKKyAgICB2b2lk
IHVuaWZvcm1NYXRyaXg0ZnYobG9uZyBsb2NhdGlvbiwgYm9vbCB0cmFuc3Bvc2UsIGZsb2F0KiB2
YWx1ZSwgaW50IHNpemUpOworCisgICAgdm9pZCB1c2VQcm9ncmFtKFdlYkdMUHJvZ3JhbSopOwor
ICAgIHZvaWQgdmFsaWRhdGVQcm9ncmFtKFdlYkdMUHJvZ3JhbSopOworCisgICAgdm9pZCB2ZXJ0
ZXhBdHRyaWIxZih1bnNpZ25lZCBsb25nIGluZHgsIGZsb2F0IHgpOworICAgIHZvaWQgdmVydGV4
QXR0cmliMWZ2KHVuc2lnbmVkIGxvbmcgaW5keCwgZmxvYXQqIHZhbHVlcyk7CisgICAgdm9pZCB2
ZXJ0ZXhBdHRyaWIyZih1bnNpZ25lZCBsb25nIGluZHgsIGZsb2F0IHgsIGZsb2F0IHkpOworICAg
IHZvaWQgdmVydGV4QXR0cmliMmZ2KHVuc2lnbmVkIGxvbmcgaW5keCwgZmxvYXQqIHZhbHVlcyk7
CisgICAgdm9pZCB2ZXJ0ZXhBdHRyaWIzZih1bnNpZ25lZCBsb25nIGluZHgsIGZsb2F0IHgsIGZs
b2F0IHksIGZsb2F0IHopOworICAgIHZvaWQgdmVydGV4QXR0cmliM2Z2KHVuc2lnbmVkIGxvbmcg
aW5keCwgZmxvYXQqIHZhbHVlcyk7CisgICAgdm9pZCB2ZXJ0ZXhBdHRyaWI0Zih1bnNpZ25lZCBs
b25nIGluZHgsIGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHosIGZsb2F0IHcpOworICAgIHZvaWQg
dmVydGV4QXR0cmliNGZ2KHVuc2lnbmVkIGxvbmcgaW5keCwgZmxvYXQqIHZhbHVlcyk7CisgICAg
dm9pZCB2ZXJ0ZXhBdHRyaWJQb2ludGVyKHVuc2lnbmVkIGxvbmcgaW5keCwgaW50IHNpemUsIGlu
dCB0eXBlLCBib29sIG5vcm1hbGl6ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVu
c2lnbmVkIGxvbmcgc3RyaWRlLCB1bnNpZ25lZCBsb25nIG9mZnNldCk7CiAKLSAgICAvLyBOb3Rl
OiB3ZSBhcmVuJ3QgY3VycmVudGx5IHVzaW5nIHRoaXMgaW5mb3JtYXRpb24sIGJ1dCB3ZSB3aWxs
Ci0gICAgLy8gbmVlZCB0byBpbiBvcmRlciB0byB2ZXJpZnkgdGhhdCBhbGwgZW5hYmxlZCB2ZXJ0
ZXggYXJyYXlzIGhhdmUKLSAgICAvLyBhIHZhbGlkIGJ1ZmZlciBib3VuZCAtLSB0byBhdm9pZCBj
cmFzaGVzIG9uIGNlcnRhaW4gY2FyZHMuCi0gICAgdW5zaWduZWQgaW50IG1fYm91bmRBcnJheUJ1
ZmZlcjsKLSAgICBjbGFzcyBWZXJ0ZXhBdHRyaWJQb2ludGVyU3RhdGUgewotICAgIHB1YmxpYzoK
LSAgICAgICAgVmVydGV4QXR0cmliUG9pbnRlclN0YXRlKCk7Ci0KLSAgICAgICAgYm9vbCBlbmFi
bGVkOwotICAgICAgICB1bnNpZ25lZCBsb25nIGJ1ZmZlcjsKLSAgICAgICAgdW5zaWduZWQgbG9u
ZyBpbmR4OwotICAgICAgICBpbnQgc2l6ZTsKLSAgICAgICAgaW50IHR5cGU7Ci0gICAgICAgIGJv
b2wgbm9ybWFsaXplZDsKLSAgICAgICAgdW5zaWduZWQgbG9uZyBzdHJpZGU7Ci0gICAgICAgIHVu
c2lnbmVkIGxvbmcgb2Zmc2V0OwotICAgIH07Ci0KLSAgICBlbnVtIHsKLSAgICAgICAgTnVtVHJh
Y2tlZFBvaW50ZXJTdGF0ZXMgPSAyCi0gICAgfTsKLSAgICBWZXJ0ZXhBdHRyaWJQb2ludGVyU3Rh
dGUgbV92ZXJ0ZXhBdHRyaWJQb2ludGVyU3RhdGVbTnVtVHJhY2tlZFBvaW50ZXJTdGF0ZXNdOwor
ICAgIHZvaWQgdmlld3BvcnQobG9uZyB4LCBsb25nIHksIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVu
c2lnbmVkIGxvbmcgaGVpZ2h0KTsKIAotICAgIC8vIEVycm9ycyByYWlzZWQgYnkgc3ludGhlc2l6
ZUdMRXJyb3IoKS4KLSAgICBMaXN0SGFzaFNldDx1bnNpZ25lZCBsb25nPiBtX3N5bnRoZXRpY0Vy
cm9yczsKKyAgICB1bnNpZ25lZCBjcmVhdGVCdWZmZXIoKTsKKyAgICB1bnNpZ25lZCBjcmVhdGVG
cmFtZWJ1ZmZlcigpOworICAgIHVuc2lnbmVkIGNyZWF0ZVByb2dyYW0oKTsKKyAgICB1bnNpZ25l
ZCBjcmVhdGVSZW5kZXJidWZmZXIoKTsKKyAgICB1bnNpZ25lZCBjcmVhdGVTaGFkZXIodW5zaWdu
ZWQgbG9uZyk7CisgICAgdW5zaWduZWQgY3JlYXRlVGV4dHVyZSgpOworCisgICAgdm9pZCBkZWxl
dGVCdWZmZXIodW5zaWduZWQpOworICAgIHZvaWQgZGVsZXRlRnJhbWVidWZmZXIodW5zaWduZWQp
OworICAgIHZvaWQgZGVsZXRlUHJvZ3JhbSh1bnNpZ25lZCk7CisgICAgdm9pZCBkZWxldGVSZW5k
ZXJidWZmZXIodW5zaWduZWQpOworICAgIHZvaWQgZGVsZXRlU2hhZGVyKHVuc2lnbmVkKTsKKyAg
ICB2b2lkIGRlbGV0ZVRleHR1cmUodW5zaWduZWQpOwogCisgICAgdm9pZCBzeW50aGVzaXplR0xF
cnJvcih1bnNpZ25lZCBsb25nIGVycm9yKTsKKworcHJpdmF0ZToKKyAgICBPd25QdHI8V2ViS2l0
OjpXZWJHcmFwaGljc0NvbnRleHQzRD4gbV9pbXBsOwogI2lmIFBMQVRGT1JNKFNLSUEpCiAgICAg
Ly8gSWYgdGhlIHdpZHRoIGFuZCBoZWlnaHQgb2YgdGhlIENhbnZhcydzIGJhY2tpbmcgc3RvcmUg
ZG9uJ3QKICAgICAvLyBtYXRjaCB0aG9zZSB0aGF0IHdlIHdlcmUgZ2l2ZW4gaW4gdGhlIG1vc3Qg
cmVjZW50IGNhbGwgdG8KICAgICAvLyByZXNoYXBlKCksIHRoZW4gd2UgbmVlZCBhbiBpbnRlcm1l
ZGlhdGUgYml0bWFwIHRvIHJlYWQgYmFjayB0aGUKICAgICAvLyBmcmFtZSBidWZmZXIgaW50by4g
VGhpcyBzZWVtcyB0byBoYXBwZW4gd2hlbiBDU1Mgc3R5bGVzIGFyZQogICAgIC8vIHVzZWQgdG8g
cmVzaXplIHRoZSBDYW52YXMuCi0gICAgU2tCaXRtYXAqIG1fcmVzaXppbmdCaXRtYXA7CisgICAg
U2tCaXRtYXAgbV9yZXNpemluZ0JpdG1hcDsKICNlbmRpZgogCi0gICAgc3RhdGljIGJvb2wgc19p
bml0aWFsaXplZEdMRVc7Ci0jaWYgT1MoV0lORE9XUykKLSAgICBIV05EICBtX2NhbnZhc1dpbmRv
dzsKLSAgICBIREMgICBtX2NhbnZhc0RDOwotICAgIEhHTFJDIG1fY29udGV4dE9iajsKLSNlbGlm
IFBMQVRGT1JNKENHKQotICAgIENHTFBCdWZmZXJPYmogbV9wYnVmZmVyOwotICAgIENHTENvbnRl
eHRPYmogbV9jb250ZXh0T2JqOworI2lmIFBMQVRGT1JNKENHKQogICAgIHVuc2lnbmVkIGNoYXIq
IG1fcmVuZGVyT3V0cHV0OwotI2VsaWYgT1MoTElOVVgpCi0gICAgR0xYQ29udGV4dCBtX2NvbnRl
eHRPYmo7Ci0gICAgR0xYUGJ1ZmZlciBtX3BidWZmZXI7Ci0KLSAgICAvLyBJbiBvcmRlciB0byBh
dm9pZCBwcm9ibGVtcyBjYXVzZWQgYnkgbGlua2luZyBhZ2FpbnN0IGxpYkdMLCB3ZQotICAgIC8v
IGR5bmFtaWNhbGx5IGxvb2sgdXAgYWxsIHRoZSBzeW1ib2xzIHdlIG5lZWQuCi0gICAgLy8gaHR0
cDovL2NvZGUuZ29vZ2xlLmNvbS9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9MTY4MDAKLSAg
ICBjbGFzcyBHTENvbm5lY3Rpb24gewotICAgICAgcHVibGljOgotICAgICAgICB+R0xDb25uZWN0
aW9uKCk7Ci0KLSAgICAgICAgc3RhdGljIEdMQ29ubmVjdGlvbiogY3JlYXRlKCk7Ci0KLSAgICAg
ICAgR0xYRkJDb25maWcqIGNob29zZUZCQ29uZmlnKGludCBzY3JlZW4sIGNvbnN0IGludCAqYXR0
cmliX2xpc3QsIGludCAqbmVsZW1lbnRzKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4g
bV9nbFhDaG9vc2VGQkNvbmZpZyhtX2Rpc3BsYXksIHNjcmVlbiwgYXR0cmliX2xpc3QsIG5lbGVt
ZW50cyk7Ci0gICAgICAgIH0KLQotICAgICAgICBHTFhDb250ZXh0IGNyZWF0ZU5ld0NvbnRleHQo
R0xYRkJDb25maWcgY29uZmlnLCBpbnQgcmVuZGVyVHlwZSwgR0xYQ29udGV4dCBzaGFyZUxpc3Qs
IEJvb2wgZGlyZWN0KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbV9nbFhDcmVhdGVO
ZXdDb250ZXh0KG1fZGlzcGxheSwgY29uZmlnLCByZW5kZXJUeXBlLCBzaGFyZUxpc3QsIGRpcmVj
dCk7Ci0gICAgICAgIH0KLQotICAgICAgICBHTFhQYnVmZmVyIGNyZWF0ZVBidWZmZXIoR0xYRkJD
b25maWcgY29uZmlnLCBjb25zdCBpbnQgKmF0dHJpYkxpc3QpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiBtX2dsWENyZWF0ZVBidWZmZXIobV9kaXNwbGF5LCBjb25maWcsIGF0dHJpYkxp
c3QpOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBkZXN0cm95UGJ1ZmZlcihHTFhQYnVmZmVy
IHBidWYpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1fZ2xYRGVzdHJveVBidWZmZXIobV9kaXNw
bGF5LCBwYnVmKTsKLSAgICAgICAgfQotCi0gICAgICAgIEJvb2wgbWFrZUN1cnJlbnQoR0xYRHJh
d2FibGUgZHJhd2FibGUsIEdMWENvbnRleHQgY3R4KQotICAgICAgICB7Ci0gICAgICAgICAgICBy
ZXR1cm4gbV9nbFhNYWtlQ3VycmVudChtX2Rpc3BsYXksIGRyYXdhYmxlLCBjdHgpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgdm9pZCBkZXN0cm95Q29udGV4dChHTFhDb250ZXh0IGN0eCkKLSAgICAg
ICAgewotICAgICAgICAgICAgbV9nbFhEZXN0cm95Q29udGV4dChtX2Rpc3BsYXksIGN0eCk7Ci0g
ICAgICAgIH0KLQotICAgICAgICBHTFhDb250ZXh0IGdldEN1cnJlbnRDb250ZXh0KCkKLSAgICAg
ICAgewotICAgICAgICAgICAgcmV0dXJuIG1fZ2xYR2V0Q3VycmVudENvbnRleHQoKTsKLSAgICAg
ICAgfQotCi0gICAgICBwcml2YXRlOgotICAgICAgICBEaXNwbGF5KiBtX2Rpc3BsYXk7Ci0gICAg
ICAgIHZvaWQqIG1fbGliR0w7Ci0gICAgICAgIFBGTkdMWENIT09TRUZCQ09ORklHUFJPQyBtX2ds
WENob29zZUZCQ29uZmlnOwotICAgICAgICBQRk5HTFhDUkVBVEVORVdDT05URVhUUFJPQyBtX2ds
WENyZWF0ZU5ld0NvbnRleHQ7Ci0gICAgICAgIFBGTkdMWENSRUFURVBCVUZGRVJQUk9DIG1fZ2xY
Q3JlYXRlUGJ1ZmZlcjsKLSAgICAgICAgUEZOR0xYREVTVFJPWVBCVUZGRVJQUk9DIG1fZ2xYRGVz
dHJveVBidWZmZXI7Ci0gICAgICAgIHR5cGVkZWYgQm9vbCAoKiBQRk5HTFhNQUtFQ1VSUkVOVFBS
T0MpKERpc3BsYXkqIGRweSwgR0xYRHJhd2FibGUgZHJhd2FibGUsIEdMWENvbnRleHQgY3R4KTsK
LSAgICAgICAgUEZOR0xYTUFLRUNVUlJFTlRQUk9DIG1fZ2xYTWFrZUN1cnJlbnQ7Ci0gICAgICAg
IHR5cGVkZWYgdm9pZCAoKiBQRk5HTFhERVNUUk9ZQ09OVEVYVFBST0MpKERpc3BsYXkqIGRweSwg
R0xYQ29udGV4dCBjdHgpOwotICAgICAgICBQRk5HTFhERVNUUk9ZQ09OVEVYVFBST0MgbV9nbFhE
ZXN0cm95Q29udGV4dDsKLSAgICAgICAgdHlwZWRlZiBHTFhDb250ZXh0ICgqIFBGTkdMWEdFVENV
UlJFTlRDT05URVhUUFJPQykodm9pZCk7Ci0gICAgICAgIFBGTkdMWEdFVENVUlJFTlRDT05URVhU
UFJPQyBtX2dsWEdldEN1cnJlbnRDb250ZXh0OwotCi0gICAgICAgIEdMQ29ubmVjdGlvbihEaXNw
bGF5KiBkaXNwbGF5LAotICAgICAgICAgICAgICAgICAgICAgdm9pZCogbGliR0wsCi0gICAgICAg
ICAgICAgICAgICAgICBQRk5HTFhDSE9PU0VGQkNPTkZJR1BST0MgY2hvb3NlRkJDb25maWcsCi0g
ICAgICAgICAgICAgICAgICAgICBQRk5HTFhDUkVBVEVORVdDT05URVhUUFJPQyBjcmVhdGVOZXdD
b250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgUEZOR0xYQ1JFQVRFUEJVRkZFUlBST0MgY3Jl
YXRlUGJ1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgIFBGTkdMWERFU1RST1lQQlVGRkVSUFJP
QyBkZXN0cm95UGJ1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgIFBGTkdMWE1BS0VDVVJSRU5U
UFJPQyBtYWtlQ3VycmVudCwKLSAgICAgICAgICAgICAgICAgICAgIFBGTkdMWERFU1RST1lDT05U
RVhUUFJPQyBkZXN0cm95Q29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgIFBGTkdMWEdFVENV
UlJFTlRDT05URVhUUFJPQyBnZXRDdXJyZW50Q29udGV4dCkKLSAgICAgICAgICAgIDogbV9saWJH
TChsaWJHTCkKLSAgICAgICAgICAgICwgbV9kaXNwbGF5KGRpc3BsYXkpCi0gICAgICAgICAgICAs
IG1fZ2xYQ2hvb3NlRkJDb25maWcoY2hvb3NlRkJDb25maWcpCi0gICAgICAgICAgICAsIG1fZ2xY
Q3JlYXRlTmV3Q29udGV4dChjcmVhdGVOZXdDb250ZXh0KQotICAgICAgICAgICAgLCBtX2dsWENy
ZWF0ZVBidWZmZXIoY3JlYXRlUGJ1ZmZlcikKLSAgICAgICAgICAgICwgbV9nbFhEZXN0cm95UGJ1
ZmZlcihkZXN0cm95UGJ1ZmZlcikKLSAgICAgICAgICAgICwgbV9nbFhNYWtlQ3VycmVudChtYWtl
Q3VycmVudCkKLSAgICAgICAgICAgICwgbV9nbFhEZXN0cm95Q29udGV4dChkZXN0cm95Q29udGV4
dCkKLSAgICAgICAgICAgICwgbV9nbFhHZXRDdXJyZW50Q29udGV4dChnZXRDdXJyZW50Q29udGV4
dCkKLSAgICAgICAgewotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHN0YXRpYyBHTENvbm5lY3Rp
b24qIHNfZ2w7Ci0jZWxzZQotICAgICNlcnJvciBNdXN0IHBvcnQgR3JhcGhpY3NDb250ZXh0M0Qg
dG8geW91ciBwbGF0Zm9ybQogI2VuZGlmCiB9OwogCi1ib29sIEdyYXBoaWNzQ29udGV4dDNESW50
ZXJuYWw6OnNfaW5pdGlhbGl6ZWRHTEVXID0gZmFsc2U7Ci0KLSNpZiBPUyhMSU5VWCkKLUdyYXBo
aWNzQ29udGV4dDNESW50ZXJuYWw6OkdMQ29ubmVjdGlvbiogR3JhcGhpY3NDb250ZXh0M0RJbnRl
cm5hbDo6c19nbCA9IDA7Ci0KLUdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OkdMQ29ubmVjdGlv
biogR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6R0xDb25uZWN0aW9uOjpjcmVhdGUoKQotewot
ICAgIERpc3BsYXkqIGRweSA9IFhPcGVuRGlzcGxheSgwKTsKLSAgICBpZiAoIWRweSkgewotICAg
ICAgICBwcmludGYoIkdyYXBoaWNzQ29udGV4dDNEOiBlcnJvciBvcGVuaW5nIFggZGlzcGxheVxu
Iik7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIC8vIFdlIHVzZSBSVExEX0dMT0JB
TCBzZW1hbnRpY3Mgc28gdGhhdCBHTEVXIGluaXRpYWxpemF0aW9uIHdvcmtzOwotICAgIC8vIEdM
RVcgZXhwZWN0cyB0byBiZSBhYmxlIHRvIG9wZW4gdGhlIGN1cnJlbnQgcHJvY2VzcydzIGhhbmRs
ZQotICAgIC8vIGFuZCBkbyBkbHN5bSdzIG9mIEdMIGVudHJ5IHBvaW50cyBmcm9tIHRoZXJlLgot
ICAgIHZvaWQqIGxpYkdMID0gZGxvcGVuKCJsaWJHTC5zby4xIiwgUlRMRF9MQVpZIHwgUlRMRF9H
TE9CQUwpOwotICAgIGlmICghbGliR0wpIHsKLSAgICAgICAgWENsb3NlRGlzcGxheShkcHkpOwot
ICAgICAgICBwcmludGYoIkdyYXBoaWNzQ29udGV4dDNEOiBlcnJvciBvcGVuaW5nIGxpYkdMLnNv
LjE6ICVzXG4iLCBkbGVycm9yKCkpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBQ
Rk5HTFhDSE9PU0VGQkNPTkZJR1BST0MgY2hvb3NlRkJDb25maWcgPSAoUEZOR0xYQ0hPT1NFRkJD
T05GSUdQUk9DKSBkbHN5bShsaWJHTCwgImdsWENob29zZUZCQ29uZmlnIik7Ci0gICAgUEZOR0xY
Q1JFQVRFTkVXQ09OVEVYVFBST0MgY3JlYXRlTmV3Q29udGV4dCA9IChQRk5HTFhDUkVBVEVORVdD
T05URVhUUFJPQykgZGxzeW0obGliR0wsICJnbFhDcmVhdGVOZXdDb250ZXh0Iik7Ci0gICAgUEZO
R0xYQ1JFQVRFUEJVRkZFUlBST0MgY3JlYXRlUGJ1ZmZlciA9IChQRk5HTFhDUkVBVEVQQlVGRkVS
UFJPQykgZGxzeW0obGliR0wsICJnbFhDcmVhdGVQYnVmZmVyIik7Ci0gICAgUEZOR0xYREVTVFJP
WVBCVUZGRVJQUk9DIGRlc3Ryb3lQYnVmZmVyID0gKFBGTkdMWERFU1RST1lQQlVGRkVSUFJPQykg
ZGxzeW0obGliR0wsICJnbFhEZXN0cm95UGJ1ZmZlciIpOwotICAgIFBGTkdMWE1BS0VDVVJSRU5U
UFJPQyBtYWtlQ3VycmVudCA9IChQRk5HTFhNQUtFQ1VSUkVOVFBST0MpIGRsc3ltKGxpYkdMLCAi
Z2xYTWFrZUN1cnJlbnQiKTsKLSAgICBQRk5HTFhERVNUUk9ZQ09OVEVYVFBST0MgZGVzdHJveUNv
bnRleHQgPSAoUEZOR0xYREVTVFJPWUNPTlRFWFRQUk9DKSBkbHN5bShsaWJHTCwgImdsWERlc3Ry
b3lDb250ZXh0Iik7Ci0gICAgUEZOR0xYR0VUQ1VSUkVOVENPTlRFWFRQUk9DIGdldEN1cnJlbnRD
b250ZXh0ID0gKFBGTkdMWEdFVENVUlJFTlRDT05URVhUUFJPQykgZGxzeW0obGliR0wsICJnbFhH
ZXRDdXJyZW50Q29udGV4dCIpOwotICAgIGlmICghY2hvb3NlRkJDb25maWcgfHwgIWNyZWF0ZU5l
d0NvbnRleHQgfHwgIWNyZWF0ZVBidWZmZXIKLSAgICAgICAgfHwgIWRlc3Ryb3lQYnVmZmVyIHx8
ICFtYWtlQ3VycmVudCB8fCAhZGVzdHJveUNvbnRleHQKLSAgICAgICAgfHwgIWdldEN1cnJlbnRD
b250ZXh0KSB7Ci0gICAgICAgIFhDbG9zZURpc3BsYXkoZHB5KTsKLSAgICAgICAgZGxjbG9zZShs
aWJHTCk7Ci0gICAgICAgIHByaW50ZigiR3JhcGhpY3NDb250ZXh0M0Q6IGVycm9yIGxvb2tpbmcg
dXAgYm9vdHN0cmFwcGluZyBlbnRyeSBwb2ludHNcbiIpOwotICAgICAgICByZXR1cm4gMDsKLSAg
ICB9Ci0gICAgcmV0dXJuIG5ldyBHTENvbm5lY3Rpb24oZHB5LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGxpYkdMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNob29zZUZCQ29u
ZmlnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZU5ld0NvbnRleHQsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlUGJ1ZmZlciwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBkZXN0cm95UGJ1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
YWtlQ3VycmVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0cm95Q29udGV4dCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRDdXJyZW50Q29udGV4dCk7Ci19Ci0KLUdy
YXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OkdMQ29ubmVjdGlvbjo6fkdMQ29ubmVjdGlvbigpCi17
Ci0gICAgWENsb3NlRGlzcGxheShtX2Rpc3BsYXkpOwotICAgIGRsY2xvc2UobV9saWJHTCk7Ci19
Ci0KLSNlbmRpZiAvLyBPUyhMSU5VWCkKLQotR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6VmVy
dGV4QXR0cmliUG9pbnRlclN0YXRlOjpWZXJ0ZXhBdHRyaWJQb2ludGVyU3RhdGUoKQotICAgIDog
ZW5hYmxlZChmYWxzZSkKLSAgICAsIGJ1ZmZlcigwKQotICAgICwgaW5keCgwKQotICAgICwgc2l6
ZSgwKQotICAgICwgdHlwZSgwKQotICAgICwgbm9ybWFsaXplZChmYWxzZSkKLSAgICAsIHN0cmlk
ZSgwKQotICAgICwgb2Zmc2V0KDApCi17Ci19Ci0KLUdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6
OkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwoR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMg
YXR0cnMpCi0gICAgOiBtX2F0dHJzKGF0dHJzKQotICAgICwgbV90ZXh0dXJlKDApCi0gICAgLCBt
X2ZibygwKQotICAgICwgbV9kZXB0aEJ1ZmZlcigwKQotICAgICwgbV9ib3VuZEZCTygwKQotI2lm
ZGVmIEZMSVBfRlJBTUVCVUZGRVJfVkVSVElDQUxMWQotICAgICwgbV9zY2FubGluZSgwKQotI2Vu
ZGlmCi0gICAgLCBtX2JvdW5kQXJyYXlCdWZmZXIoMCkKK0dyYXBoaWNzQ29udGV4dDNESW50ZXJu
YWw6OkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwoKQogI2lmIFBMQVRGT1JNKFNLSUEpCi0gICAg
LCBtX3Jlc2l6aW5nQml0bWFwKDApCi0jZW5kaWYKLSNpZiBPUyhXSU5ET1dTKQotICAgICwgbV9j
YW52YXNXaW5kb3coMCkKLSAgICAsIG1fY2FudmFzREMoMCkKLSAgICAsIG1fY29udGV4dE9iaigw
KQogI2VsaWYgUExBVEZPUk0oQ0cpCi0gICAgLCBtX3BidWZmZXIoMCkKLSAgICAsIG1fY29udGV4
dE9iaigwKQotICAgICwgbV9yZW5kZXJPdXRwdXQoMCkKLSNlbGlmIE9TKExJTlVYKQotICAgICwg
bV9jb250ZXh0T2JqKDApCi0gICAgLCBtX3BidWZmZXIoMCkKKyAgICA6IG1fcmVuZGVyT3V0cHV0
KDApCiAjZWxzZQogI2Vycm9yIE11c3QgcG9ydCB0byB5b3VyIHBsYXRmb3JtCiAjZW5kaWYKIHsK
LSAgICAvLyBGSVhNRTogd2UgbmVlZCB0byB0YWtlIGludG8gYWNjb3VudCB0aGUgdXNlcidzIHJl
cXVlc3RlZAotICAgIC8vIGNvbnRleHQgY3JlYXRpb24gYXR0cmlidXRlcywgaW4gcGFydGljdWxh
ciBzdGVuY2lsIGFuZAotICAgIC8vIGFudGlhbGlhcywgYW5kIGRldGVybWluZSB3aGljaCBjb3Vs
ZCBhbmQgY291bGQgbm90IGJlIGhvbm9yZWQKLSAgICAvLyBiYXNlZCBvbiB0aGUgY2FwYWJpbGl0
aWVzIG9mIHRoZSBPcGVuR0wgaW1wbGVtZW50YXRpb24uCi0gICAgbV9hdHRycy5hbHBoYSA9IHRy
dWU7Ci0gICAgbV9hdHRycy5kZXB0aCA9IHRydWU7Ci0gICAgbV9hdHRycy5zdGVuY2lsID0gZmFs
c2U7Ci0gICAgbV9hdHRycy5hbnRpYWxpYXMgPSBmYWxzZTsKLSAgICBtX2F0dHJzLnByZW11bHRp
cGxpZWRBbHBoYSA9IHRydWU7Ci0KLSNpZiBPUyhXSU5ET1dTKQotICAgIFdORENMQVNTIHdjOwot
ICAgIGlmICghR2V0Q2xhc3NJbmZvKEdldE1vZHVsZUhhbmRsZSgwKSwgTCJDQU5WQVNHTCIsICZ3
YykpIHsKLSAgICAgICAgWmVyb01lbW9yeSgmd2MsIHNpemVvZihXTkRDTEFTUykpOwotICAgICAg
ICB3Yy5zdHlsZSA9IENTX09XTkRDOwotICAgICAgICB3Yy5oSW5zdGFuY2UgPSBHZXRNb2R1bGVI
YW5kbGUoMCk7Ci0gICAgICAgIHdjLmxwZm5XbmRQcm9jID0gRGVmV2luZG93UHJvYzsKLSAgICAg
ICAgd2MubHBzekNsYXNzTmFtZSA9IEwiQ0FOVkFTR0wiOwotCi0gICAgICAgIGlmICghUmVnaXN0
ZXJDbGFzcygmd2MpKSB7Ci0gICAgICAgICAgICBwcmludGYoIkdyYXBoaWNzQ29udGV4dDNEOiBS
ZWdpc3RlckNsYXNzIGZhaWxlZFxuIik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICBtX2NhbnZhc1dpbmRvdyA9IENyZWF0ZVdpbmRvdyhMIkNBTlZBU0dMIiwg
TCJDQU5WQVNHTCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV1NfQ0FQVElP
TiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDV19VU0VERUZBVUxULCBDV19V
U0VERUZBVUxULCBDV19VU0VERUZBVUxULAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIENXX1VTRURFRkFVTFQsIDAsIDAsIEdldE1vZHVsZUhhbmRsZSgwKSwgMCk7Ci0gICAgaWYg
KCFtX2NhbnZhc1dpbmRvdykgewotICAgICAgICBwcmludGYoIkdyYXBoaWNzQ29udGV4dDNESW50
ZXJuYWw6IENyZWF0ZVdpbmRvdyBmYWlsZWRcbiIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgLy8gZ2V0IHRoZSBkZXZpY2UgY29udGV4dAotICAgIG1fY2FudmFzREMgPSBHZXREQyht
X2NhbnZhc1dpbmRvdyk7Ci0gICAgaWYgKCFtX2NhbnZhc0RDKSB7Ci0gICAgICAgIHByaW50Zigi
R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDogR2V0REMgZmFpbGVkXG4iKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIC8vIGZpbmQgZGVmYXVsdCBwaXhlbCBmb3JtYXQKLSAgICBQSVhF
TEZPUk1BVERFU0NSSVBUT1IgcGZkOwotICAgIFplcm9NZW1vcnkoJnBmZCwgc2l6ZW9mKFBJWEVM
Rk9STUFUREVTQ1JJUFRPUikpOwotICAgIHBmZC5uU2l6ZSA9IHNpemVvZihQSVhFTEZPUk1BVERF
U0NSSVBUT1IpOwotICAgIHBmZC5uVmVyc2lvbiA9IDE7Ci0gICAgcGZkLmR3RmxhZ3MgPSBQRkRf
RFJBV19UT19XSU5ET1cgfCBQRkRfU1VQUE9SVF9PUEVOR0wKLSNpZmRlZiBSRU5ERVJfVE9fREVC
VUdHSU5HX1dJTkRPVwotICAgICAgICB8IFBGRF9ET1VCTEVCVUZGRVIKLSNlbmRpZiAvLyBSRU5E
RVJfVE9fREVCVUdHSU5HX1dJTkRPVwotICAgICAgICA7Ci0gICAgaW50IHBpeGVsZm9ybWF0ID0g
Q2hvb3NlUGl4ZWxGb3JtYXQobV9jYW52YXNEQywgJnBmZCk7Ci0KLSAgICAvLyBzZXQgdGhlIHBp
eGVsIGZvcm1hdCBmb3IgdGhlIGRjCi0gICAgaWYgKCFTZXRQaXhlbEZvcm1hdChtX2NhbnZhc0RD
LCBwaXhlbGZvcm1hdCwgJnBmZCkpIHsKLSAgICAgICAgcHJpbnRmKCJHcmFwaGljc0NvbnRleHQz
RDogU2V0UGl4ZWxGb3JtYXQgZmFpbGVkXG4iKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIC8vIGNyZWF0ZSByZW5kZXJpbmcgY29udGV4dAotICAgIG1fY29udGV4dE9iaiA9IHdnbENy
ZWF0ZUNvbnRleHQobV9jYW52YXNEQyk7Ci0gICAgaWYgKCFtX2NvbnRleHRPYmopIHsKLSAgICAg
ICAgcHJpbnRmKCJHcmFwaGljc0NvbnRleHQzRDogd2dsQ3JlYXRlQ29udGV4dCBmYWlsZWRcbiIp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCF3Z2xNYWtlQ3VycmVudChtX2Nh
bnZhc0RDLCBtX2NvbnRleHRPYmopKSB7Ci0gICAgICAgIHByaW50ZigiR3JhcGhpY3NDb250ZXh0
M0Q6IHdnbE1ha2VDdXJyZW50IGZhaWxlZFxuIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSNpZmRlZiBSRU5ERVJfVE9fREVCVUdHSU5HX1dJTkRPVwotICAgIHR5cGVkZWYgQk9PTCAoV0lO
QVBJICogUEZOV0dMU1dBUElOVEVSVkFMRVhUUFJPQykgKGludCBpbnRlcnZhbCk7Ci0gICAgUEZO
V0dMU1dBUElOVEVSVkFMRVhUUFJPQyBzZXRTd2FwSW50ZXJ2YWwgPSAwOwotICAgIHNldFN3YXBJ
bnRlcnZhbCA9IChQRk5XR0xTV0FQSU5URVJWQUxFWFRQUk9DKSB3Z2xHZXRQcm9jQWRkcmVzcygi
d2dsU3dhcEludGVydmFsRVhUIik7Ci0gICAgaWYgKHNldFN3YXBJbnRlcnZhbCkKLSAgICAgICAg
c2V0U3dhcEludGVydmFsKDEpOwotI2VuZGlmIC8vIFJFTkRFUl9UT19ERUJVR0dJTkdfV0lORE9X
Ci0KLSNlbGlmIFBMQVRGT1JNKENHKQotICAgIC8vIENyZWF0ZSBhIDF4MSBwYnVmZmVyIGFuZCBh
c3NvY2lhdGVkIGNvbnRleHQgdG8gYm9vdHN0cmFwIHRoaW5ncwotICAgIENHTFBpeGVsRm9ybWF0
QXR0cmlidXRlIGF0dHJpYnNbXSA9IHsKLSAgICAgICAgKENHTFBpeGVsRm9ybWF0QXR0cmlidXRl
KSBrQ0dMUEZBUEJ1ZmZlciwKLSAgICAgICAgKENHTFBpeGVsRm9ybWF0QXR0cmlidXRlKSAwCi0g
ICAgfTsKLSAgICBDR0xQaXhlbEZvcm1hdE9iaiBwaXhlbEZvcm1hdDsKLSAgICBHTGludCBudW1Q
aXhlbEZvcm1hdHM7Ci0gICAgaWYgKENHTENob29zZVBpeGVsRm9ybWF0KGF0dHJpYnMsICZwaXhl
bEZvcm1hdCwgJm51bVBpeGVsRm9ybWF0cykgIT0ga0NHTE5vRXJyb3IpIHsKLSAgICAgICAgcHJp
bnRmKCJHcmFwaGljc0NvbnRleHQzRDogZXJyb3IgY2hvb3NpbmcgcGl4ZWwgZm9ybWF0XG4iKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoIXBpeGVsRm9ybWF0KSB7Ci0gICAgICAg
IHByaW50ZigiR3JhcGhpY3NDb250ZXh0M0Q6IG5vIHBpeGVsIGZvcm1hdCBzZWxlY3RlZFxuIik7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgQ0dMQ29udGV4dE9iaiBjb250ZXh0OwotICAg
IENHTEVycm9yIHJlcyA9IENHTENyZWF0ZUNvbnRleHQocGl4ZWxGb3JtYXQsIDAsICZjb250ZXh0
KTsKLSAgICBDR0xEZXN0cm95UGl4ZWxGb3JtYXQocGl4ZWxGb3JtYXQpOwotICAgIGlmIChyZXMg
IT0ga0NHTE5vRXJyb3IpIHsKLSAgICAgICAgcHJpbnRmKCJHcmFwaGljc0NvbnRleHQzRDogZXJy
b3IgY3JlYXRpbmcgY29udGV4dFxuIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgQ0dM
UEJ1ZmZlck9iaiBwYnVmZmVyOwotICAgIGlmIChDR0xDcmVhdGVQQnVmZmVyKDEsIDEsIEdMX1RF
WFRVUkVfMkQsIEdMX1JHQkEsIDAsICZwYnVmZmVyKSAhPSBrQ0dMTm9FcnJvcikgewotICAgICAg
ICBDR0xEZXN0cm95Q29udGV4dChjb250ZXh0KTsKLSAgICAgICAgcHJpbnRmKCJHcmFwaGljc0Nv
bnRleHQzRDogZXJyb3IgY3JlYXRpbmcgcGJ1ZmZlclxuIik7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0gICAgaWYgKENHTFNldFBCdWZmZXIoY29udGV4dCwgcGJ1ZmZlciwgMCwgMCwgMCkgIT0g
a0NHTE5vRXJyb3IpIHsKLSAgICAgICAgQ0dMRGVzdHJveUNvbnRleHQoY29udGV4dCk7Ci0gICAg
ICAgIENHTERlc3Ryb3lQQnVmZmVyKHBidWZmZXIpOwotICAgICAgICBwcmludGYoIkdyYXBoaWNz
Q29udGV4dDNEOiBlcnJvciBhdHRhY2hpbmcgcGJ1ZmZlciB0byBjb250ZXh0XG4iKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoQ0dMU2V0Q3VycmVudENvbnRleHQoY29udGV4dCkg
IT0ga0NHTE5vRXJyb3IpIHsKLSAgICAgICAgQ0dMRGVzdHJveUNvbnRleHQoY29udGV4dCk7Ci0g
ICAgICAgIENHTERlc3Ryb3lQQnVmZmVyKHBidWZmZXIpOwotICAgICAgICBwcmludGYoIkdyYXBo
aWNzQ29udGV4dDNEOiBlcnJvciBtYWtpbmcgY29udGV4dCBjdXJyZW50XG4iKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLSAgICBtX3BidWZmZXIgPSBwYnVmZmVyOwotICAgIG1fY29udGV4dE9i
aiA9IGNvbnRleHQ7Ci0jZWxpZiBPUyhMSU5VWCkKLSAgICBpZiAoIXNfZ2wpIHsKLSAgICAgICAg
c19nbCA9IEdMQ29ubmVjdGlvbjo6Y3JlYXRlKCk7Ci0gICAgICAgIGlmICghc19nbCkKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpbnQgY29uZmlnQXR0cnNbXSA9IHsKLSAgICAg
ICAgR0xYX0RSQVdBQkxFX1RZUEUsCi0gICAgICAgIEdMWF9QQlVGRkVSX0JJVCwKLSAgICAgICAg
R0xYX1JFTkRFUl9UWVBFLAotICAgICAgICBHTFhfUkdCQV9CSVQsCi0gICAgICAgIEdMWF9ET1VC
TEVCVUZGRVIsCi0gICAgICAgIDAsCi0gICAgICAgIDAKLSAgICB9OwotICAgIGludCBuZWxlbWVu
dHMgPSAwOwotICAgIEdMWEZCQ29uZmlnKiBjb25maWcgPSBzX2dsLT5jaG9vc2VGQkNvbmZpZygw
LCBjb25maWdBdHRycywgJm5lbGVtZW50cyk7Ci0gICAgaWYgKCFjb25maWcpIHsKLSAgICAgICAg
cHJpbnRmKCJHcmFwaGljc0NvbnRleHQzRDogZ2xYQ2hvb3NlRkJDb25maWcgZmFpbGVkXG4iKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoIW5lbGVtZW50cykgewotICAgICAgICBw
cmludGYoIkdyYXBoaWNzQ29udGV4dDNEOiBnbFhDaG9vc2VGQkNvbmZpZyByZXR1cm5lZCAwIGVs
ZW1lbnRzXG4iKTsKLSAgICAgICAgWEZyZWUoY29uZmlnKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLSAgICBHTFhDb250ZXh0IGNvbnRleHQgPSBzX2dsLT5jcmVhdGVOZXdDb250ZXh0KGNvbmZp
Z1swXSwgR0xYX1JHQkFfVFlQRSwgMCwgVHJ1ZSk7Ci0gICAgaWYgKCFjb250ZXh0KSB7Ci0gICAg
ICAgIHByaW50ZigiR3JhcGhpY3NDb250ZXh0M0Q6IGdsWENyZWF0ZU5ld0NvbnRleHQgZmFpbGVk
XG4iKTsKLSAgICAgICAgWEZyZWUoY29uZmlnKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAg
ICBpbnQgcGJ1ZmZlckF0dHJzW10gPSB7Ci0gICAgICAgIEdMWF9QQlVGRkVSX1dJRFRILAotICAg
ICAgICAxLAotICAgICAgICBHTFhfUEJVRkZFUl9IRUlHSFQsCi0gICAgICAgIDEsCi0gICAgICAg
IDAKLSAgICB9OwotICAgIEdMWFBidWZmZXIgcGJ1ZmZlciA9IHNfZ2wtPmNyZWF0ZVBidWZmZXIo
Y29uZmlnWzBdLCBwYnVmZmVyQXR0cnMpOwotICAgIFhGcmVlKGNvbmZpZyk7Ci0gICAgaWYgKCFw
YnVmZmVyKSB7Ci0gICAgICAgIHByaW50ZigiR3JhcGhpY3NDb250ZXh0M0Q6IGdseENyZWF0ZVBi
dWZmZXIgZmFpbGVkXG4iKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoIXNfZ2wt
Pm1ha2VDdXJyZW50KHBidWZmZXIsIGNvbnRleHQpKSB7Ci0gICAgICAgIHByaW50ZigiR3JhcGhp
Y3NDb250ZXh0M0Q6IGdsWE1ha2VDdXJyZW50IGZhaWxlZFxuIik7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0gICAgbV9jb250ZXh0T2JqID0gY29udGV4dDsKLSAgICBtX3BidWZmZXIgPSBwYnVm
ZmVyOwotI2Vsc2UKLSNlcnJvciBNdXN0IHBvcnQgdG8geW91ciBwbGF0Zm9ybQotI2VuZGlmCi0K
LSAgICBpZiAoIXNfaW5pdGlhbGl6ZWRHTEVXKSB7Ci0gICAgICAgIC8vIEluaXRpYWxpemUgR0xF
VyBhbmQgY2hlY2sgZm9yIEdMIDIuMCBzdXBwb3J0IGJ5IHRoZSBkcml2ZXJzLgotICAgICAgICBH
TGVudW0gZ2xld0luaXRSZXN1bHQgPSBnbGV3SW5pdCgpOwotICAgICAgICBpZiAoZ2xld0luaXRS
ZXN1bHQgIT0gR0xFV19PSykgewotICAgICAgICAgICAgcHJpbnRmKCJHcmFwaGljc0NvbnRleHQz
RDogR0xFVyBpbml0aWFsaXphdGlvbiBmYWlsZWRcbiIpOwotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICB9Ci0gICAgICAgIGlmICghZ2xld0lzU3VwcG9ydGVkKCJHTF9WRVJTSU9OXzJfMCIp
KSB7Ci0gICAgICAgICAgICBwcmludGYoIkdyYXBoaWNzQ29udGV4dDNEOiBPcGVuR0wgMi4wIG5v
dCBzdXBwb3J0ZWRcbiIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAg
IHNfaW5pdGlhbGl6ZWRHTEVXID0gdHJ1ZTsKLSAgICB9CiB9CiAKIEdyYXBoaWNzQ29udGV4dDNE
SW50ZXJuYWw6On5HcmFwaGljc0NvbnRleHQzREludGVybmFsKCkKIHsKLSAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKLSNpZm5kZWYgUkVOREVSX1RPX0RFQlVHR0lOR19XSU5ET1cKLSAgICBnbERl
bGV0ZVJlbmRlcmJ1ZmZlcnNFWFQoMSwgJm1fZGVwdGhCdWZmZXIpOwotICAgIGdsRGVsZXRlVGV4
dHVyZXMoMSwgJm1fdGV4dHVyZSk7Ci0jaWZkZWYgRkxJUF9GUkFNRUJVRkZFUl9WRVJUSUNBTExZ
Ci0gICAgaWYgKG1fc2NhbmxpbmUpCi0gICAgICAgIGRlbGV0ZVtdIG1fc2NhbmxpbmU7Ci0jZW5k
aWYKLSAgICBnbERlbGV0ZUZyYW1lYnVmZmVyc0VYVCgxLCAmbV9mYm8pOwotI2VuZGlmIC8vICFS
RU5ERVJfVE9fREVCVUdHSU5HX1dJTkRPVwotI2lmIFBMQVRGT1JNKFNLSUEpCi0gICAgaWYgKG1f
cmVzaXppbmdCaXRtYXApCi0gICAgICAgIGRlbGV0ZSBtX3Jlc2l6aW5nQml0bWFwOwotI2VuZGlm
Ci0jaWYgT1MoV0lORE9XUykKLSAgICB3Z2xNYWtlQ3VycmVudCgwLCAwKTsKLSAgICB3Z2xEZWxl
dGVDb250ZXh0KG1fY29udGV4dE9iaik7Ci0gICAgUmVsZWFzZURDKG1fY2FudmFzV2luZG93LCBt
X2NhbnZhc0RDKTsKLSAgICBEZXN0cm95V2luZG93KG1fY2FudmFzV2luZG93KTsKLSNlbGlmIFBM
QVRGT1JNKENHKQotICAgIENHTFNldEN1cnJlbnRDb250ZXh0KDApOwotICAgIENHTERlc3Ryb3lD
b250ZXh0KG1fY29udGV4dE9iaik7Ci0gICAgQ0dMRGVzdHJveVBCdWZmZXIobV9wYnVmZmVyKTsK
KyNpZiBQTEFURk9STShDRykKICAgICBpZiAobV9yZW5kZXJPdXRwdXQpCiAgICAgICAgIGRlbGV0
ZVtdIG1fcmVuZGVyT3V0cHV0OwotI2VsaWYgT1MoTElOVVgpCi0gICAgc19nbC0+bWFrZUN1cnJl
bnQoMCwgMCk7Ci0gICAgc19nbC0+ZGVzdHJveUNvbnRleHQobV9jb250ZXh0T2JqKTsKLSAgICBz
X2dsLT5kZXN0cm95UGJ1ZmZlcihtX3BidWZmZXIpOwotI2Vsc2UKLSNlcnJvciBNdXN0IHBvcnQg
dG8geW91ciBwbGF0Zm9ybQogI2VuZGlmCi0gICAgbV9jb250ZXh0T2JqID0gMDsKIH0KIAotYm9v
bCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjptYWtlQ29udGV4dEN1cnJlbnQoKQorYm9vbCBH
cmFwaGljc0NvbnRleHQzREludGVybmFsOjppbml0aWFsaXplKEdyYXBoaWNzQ29udGV4dDNEOjpB
dHRyaWJ1dGVzIGF0dHJzKQogewotI2lmIE9TKFdJTkRPV1MpCi0gICAgaWYgKHdnbEdldEN1cnJl
bnRDb250ZXh0KCkgIT0gbV9jb250ZXh0T2JqKQotICAgICAgICBpZiAod2dsTWFrZUN1cnJlbnQo
bV9jYW52YXNEQywgbV9jb250ZXh0T2JqKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotI2Vs
aWYgUExBVEZPUk0oQ0cpCi0gICAgaWYgKENHTEdldEN1cnJlbnRDb250ZXh0KCkgIT0gbV9jb250
ZXh0T2JqKQotICAgICAgICBpZiAoQ0dMU2V0Q3VycmVudENvbnRleHQobV9jb250ZXh0T2JqKSA9
PSBrQ0dMTm9FcnJvcikKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotI2VsaWYgT1MoTElOVVgp
Ci0gICAgaWYgKHNfZ2wtPmdldEN1cnJlbnRDb250ZXh0KCkgIT0gbV9jb250ZXh0T2JqKQotICAg
ICAgICBpZiAoc19nbC0+bWFrZUN1cnJlbnQobV9wYnVmZmVyLCBtX2NvbnRleHRPYmopKQotICAg
ICAgICAgICAgcmV0dXJuIHRydWU7Ci0jZWxzZQotI2Vycm9yIE11c3QgcG9ydCB0byB5b3VyIHBs
YXRmb3JtCi0jZW5kaWYKLSAgICByZXR1cm4gZmFsc2U7CisgICAgV2ViS2l0OjpXZWJHcmFwaGlj
c0NvbnRleHQzRDo6QXR0cmlidXRlcyB3ZWJBdHRyaWJ1dGVzOworICAgIHdlYkF0dHJpYnV0ZXMu
YWxwaGEgPSBhdHRycy5hbHBoYTsKKyAgICB3ZWJBdHRyaWJ1dGVzLmRlcHRoID0gYXR0cnMuZGVw
dGg7CisgICAgd2ViQXR0cmlidXRlcy5zdGVuY2lsID0gYXR0cnMuc3RlbmNpbDsKKyAgICB3ZWJB
dHRyaWJ1dGVzLmFudGlhbGlhcyA9IGF0dHJzLmFudGlhbGlhczsKKyAgICB3ZWJBdHRyaWJ1dGVz
LnByZW11bHRpcGxpZWRBbHBoYSA9IGF0dHJzLnByZW11bHRpcGxpZWRBbHBoYTsKKyAgICAvLyBG
SVhNRTogb25jZSB0aGUgQ2hyb21pdW0gcG9ydGlvbiBvZiB0aGUgV2ViS2l0Q2xpZW50IGNoYW5n
ZXMgaGFzIGxhbmRlZCwKKyAgICAvLyBjaGFuZ2UgdGhpcyB0byBjYWxsIFdlYktpdDo6d2ViS2l0
Q2xpZW50KCktPmNyZWF0ZUdyYXBoaWNzQ29udGV4dDNEKCkuCisgICAgV2ViS2l0OjpXZWJHcmFw
aGljc0NvbnRleHQzRCogd2ViQ29udGV4dCA9IFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0Q6
OmNyZWF0ZURlZmF1bHQoKTsKKyAgICBpZiAoIXdlYkNvbnRleHQpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBpZiAoIXdlYkNvbnRleHQtPmluaXRpYWxpemUod2ViQXR0cmlidXRlcykpIHsK
KyAgICAgICAgZGVsZXRlIHdlYkNvbnRleHQ7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisgICAgbV9pbXBsLnNldCh3ZWJDb250ZXh0KTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogUGxh
dGZvcm1HcmFwaGljc0NvbnRleHQzRCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpwbGF0Zm9y
bUdyYXBoaWNzQ29udGV4dDNEKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9jb250ZXh0T2JqOwor
ICAgIHJldHVybiAwOwogfQogCiBQbGF0Zm9ybTNET2JqZWN0IEdyYXBoaWNzQ29udGV4dDNESW50
ZXJuYWw6OnBsYXRmb3JtVGV4dHVyZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fdGV4dHVyZTsK
LX0KLQotc3RhdGljIGludCBjcmVhdGVUZXh0dXJlT2JqZWN0KEdMZW51bSB0YXJnZXQpCi17Ci0g
ICAgR0x1aW50IHRleHR1cmUgPSAwOwotICAgIGdsR2VuVGV4dHVyZXMoMSwgJnRleHR1cmUpOwot
ICAgIGdsQmluZFRleHR1cmUodGFyZ2V0LCB0ZXh0dXJlKTsKLSAgICBnbFRleFBhcmFtZXRlcmYo
dGFyZ2V0LCBHTF9URVhUVVJFX01JTl9GSUxURVIsIEdMX05FQVJFU1QpOwotICAgIGdsVGV4UGFy
YW1ldGVyZih0YXJnZXQsIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xfTkVBUkVTVCk7Ci0gICAg
cmV0dXJuIHRleHR1cmU7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6cmVz
aGFwZShpbnQgd2lkdGgsIGludCBoZWlnaHQpCi17Ci0jaWZkZWYgUkVOREVSX1RPX0RFQlVHR0lO
R19XSU5ET1cKLSAgICBTZXRXaW5kb3dQb3MobV9jYW52YXNXaW5kb3csIEhXTkRfVE9QLCAwLCAw
LCB3aWR0aCwgaGVpZ2h0LAotICAgICAgICAgICAgICAgICBTV1BfTk9NT1ZFKTsKLSAgICBTaG93
V2luZG93KG1fY2FudmFzV2luZG93LCBTV19TSE9XKTsKLSNlbmRpZgotCi0gICAgbV9jYWNoZWRX
aWR0aCA9IHdpZHRoOwotICAgIG1fY2FjaGVkSGVpZ2h0ID0gaGVpZ2h0OwotICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOwotCi0jaWZuZGVmIFJFTkRFUl9UT19ERUJVR0dJTkdfV0lORE9XCi0jaWZk
ZWYgVVNFX1RFWFRVUkVfUkVDVEFOR0xFX0ZPUl9GUkFNRUJVRkZFUgotICAgIC8vIEdMX1RFWFRV
UkVfUkVDVEFOR0xFX0FSQiBpcyB0aGUgYmVzdCBzdXBwb3J0ZWQgcmVuZGVyIHRhcmdldCBvbiBN
YWMgT1MgWAotICAgIEdMZW51bSB0YXJnZXQgPSBHTF9URVhUVVJFX1JFQ1RBTkdMRV9BUkI7Ci0j
ZWxzZQotICAgIEdMZW51bSB0YXJnZXQgPSBHTF9URVhUVVJFXzJEOwotI2VuZGlmCi0gICAgaWYg
KCFtX3RleHR1cmUpIHsKLSAgICAgICAgLy8gR2VuZXJhdGUgdGhlIHRleHR1cmUgb2JqZWN0Ci0g
ICAgICAgIG1fdGV4dHVyZSA9IGNyZWF0ZVRleHR1cmVPYmplY3QodGFyZ2V0KTsKLSAgICAgICAg
Ly8gR2VuZXJhdGUgdGhlIGZyYW1lYnVmZmVyIG9iamVjdAotICAgICAgICBnbEdlbkZyYW1lYnVm
ZmVyc0VYVCgxLCAmbV9mYm8pOwotICAgICAgICAvLyBHZW5lcmF0ZSB0aGUgZGVwdGggYnVmZmVy
Ci0gICAgICAgIGdsR2VuUmVuZGVyYnVmZmVyc0VYVCgxLCAmbV9kZXB0aEJ1ZmZlcik7Ci0gICAg
fQotCi0gICAgLy8gUmVhbGxvY2F0ZSB0aGUgY29sb3IgYW5kIGRlcHRoIGJ1ZmZlcnMKLSAgICBn
bEJpbmRUZXh0dXJlKHRhcmdldCwgbV90ZXh0dXJlKTsKLSAgICBnbFRleEltYWdlMkQodGFyZ2V0
LCAwLCBHTF9SR0JBOCwgd2lkdGgsIGhlaWdodCwgMCwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllU
RSwgMCk7Ci0gICAgZ2xCaW5kVGV4dHVyZSh0YXJnZXQsIDApOwotCi0gICAgZ2xCaW5kRnJhbWVi
dWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX2Zibyk7Ci0gICAgbV9ib3VuZEZCTyA9IG1f
ZmJvOwotICAgIGdsQmluZFJlbmRlcmJ1ZmZlckVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCBtX2Rl
cHRoQnVmZmVyKTsKLSAgICBnbFJlbmRlcmJ1ZmZlclN0b3JhZ2VFWFQoR0xfUkVOREVSQlVGRkVS
X0VYVCwgR0xfREVQVEhfQ09NUE9ORU5ULCB3aWR0aCwgaGVpZ2h0KTsKLSAgICBnbEJpbmRSZW5k
ZXJidWZmZXJFWFQoR0xfUkVOREVSQlVGRkVSX0VYVCwgMCk7Ci0KLSAgICBnbEZyYW1lYnVmZmVy
VGV4dHVyZTJERVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgR0xfQ09MT1JfQVRUQUNITUVOVDBfRVhU
LCB0YXJnZXQsIG1fdGV4dHVyZSwgMCk7Ci0gICAgZ2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlckVY
VChHTF9GUkFNRUJVRkZFUl9FWFQsIEdMX0RFUFRIX0FUVEFDSE1FTlRfRVhULCBHTF9SRU5ERVJC
VUZGRVJfRVhULCBtX2RlcHRoQnVmZmVyKTsKLSAgICBHTGVudW0gc3RhdHVzID0gZ2xDaGVja0Zy
YW1lYnVmZmVyU3RhdHVzRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCk7Ci0gICAgaWYgKHN0YXR1cyAh
PSBHTF9GUkFNRUJVRkZFUl9DT01QTEVURV9FWFQpIHsKLSAgICAgICAgcHJpbnRmKCJHcmFwaGlj
c0NvbnRleHQzRDogZnJhbWVidWZmZXIgd2FzIGluY29tcGxldGVcbiIpOwotCi0gICAgICAgIC8v
IEZJWE1FOiBjbGVhbnVwLgotICAgICAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIH0KLSNlbmRp
ZiAgLy8gUkVOREVSX1RPX0RFQlVHR0lOR19XSU5ET1cKLQotI2lmZGVmIEZMSVBfRlJBTUVCVUZG
RVJfVkVSVElDQUxMWQotICAgIGlmIChtX3NjYW5saW5lKSB7Ci0gICAgICAgIGRlbGV0ZVtdIG1f
c2NhbmxpbmU7Ci0gICAgICAgIG1fc2NhbmxpbmUgPSAwOwotICAgIH0KLSAgICBtX3NjYW5saW5l
ID0gbmV3IHVuc2lnbmVkIGNoYXJbd2lkdGggKiA0XTsKLSNlbmRpZiAgLy8gRkxJUF9GUkFNRUJV
RkZFUl9WRVJUSUNBTExZCi0KLSAgICBnbENsZWFyKEdMX0NPTE9SX0JVRkZFUl9CSVQpOwotCi0j
aWYgUExBVEZPUk0oQ0cpCi0gICAgLy8gTmVlZCB0byByZWFsbG9jYXRlIHRoZSBjbGllbnQtc2lk
ZSBiYWNraW5nIHN0b3JlLgotICAgIC8vIEZJWE1FOiBtYWtlIHRoaXMgbW9yZSBlZmZpY2llbnQu
Ci0gICAgaWYgKG1fcmVuZGVyT3V0cHV0KSB7Ci0gICAgICAgIGRlbGV0ZVtdIG1fcmVuZGVyT3V0
cHV0OwotICAgICAgICBtX3JlbmRlck91dHB1dCA9IDA7Ci0gICAgfQotICAgIGludCByb3dCeXRl
cyA9IHdpZHRoICogNDsKLSAgICBtX3JlbmRlck91dHB1dCA9IG5ldyB1bnNpZ25lZCBjaGFyW2hl
aWdodCAqIHJvd0J5dGVzXTsKLSNlbmRpZiAgLy8gUExBVEZPUk0oQ0cpCi19Ci0KLSNpZmRlZiBG
TElQX0ZSQU1FQlVGRkVSX1ZFUlRJQ0FMTFkKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5h
bDo6ZmxpcFZlcnRpY2FsbHkodW5zaWduZWQgY2hhciogZnJhbWVidWZmZXIsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCB3aWR0aCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg
aW50IGhlaWdodCkKLXsKLSAgICB1bnNpZ25lZCBjaGFyKiBzY2FubGluZSA9IG1fc2NhbmxpbmU7
Ci0gICAgaWYgKCFzY2FubGluZSkKLSAgICAgICAgcmV0dXJuOwotICAgIHVuc2lnbmVkIGludCBy
b3dCeXRlcyA9IHdpZHRoICogNDsKLSAgICB1bnNpZ25lZCBpbnQgY291bnQgPSBoZWlnaHQgLyAy
OwotICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewotICAgICAg
ICB1bnNpZ25lZCBjaGFyKiByb3dBID0gZnJhbWVidWZmZXIgKyBpICogcm93Qnl0ZXM7Ci0gICAg
ICAgIHVuc2lnbmVkIGNoYXIqIHJvd0IgPSBmcmFtZWJ1ZmZlciArIChoZWlnaHQgLSBpIC0gMSkg
KiByb3dCeXRlczsKLSAgICAgICAgLy8gRklYTUU6IHRoaXMgaXMgd2hlcmUgdGhlIG11bHRpcGxp
Y2F0aW9uIG9mIHRoZSBhbHBoYQotICAgICAgICAvLyBjaGFubmVsIGludG8gdGhlIGNvbG9yIGJ1
ZmZlciB3aWxsIG5lZWQgdG8gb2NjdXIgaWYgdGhlCi0gICAgICAgIC8vIHVzZXIgc3BlY2lmaWVz
IHRoZSAicHJlbXVsdGlwbHlBbHBoYSIgZmxhZyBpbiB0aGUgY29udGV4dAotICAgICAgICAvLyBj
cmVhdGlvbiBhdHRyaWJ1dGVzLgotICAgICAgICBtZW1jcHkoc2NhbmxpbmUsIHJvd0IsIHJvd0J5
dGVzKTsKLSAgICAgICAgbWVtY3B5KHJvd0IsIHJvd0EsIHJvd0J5dGVzKTsKLSAgICAgICAgbWVt
Y3B5KHJvd0EsIHNjYW5saW5lLCByb3dCeXRlcyk7Ci0gICAgfQorICAgIHJldHVybiAwOwogfQot
I2VuZGlmCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6YmVnaW5QYWludChXZWJH
TFJlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
Ci0KLSNpZmRlZiBSRU5ERVJfVE9fREVCVUdHSU5HX1dJTkRPVwotICAgIFN3YXBCdWZmZXJzKG1f
Y2FudmFzREMpOwotI2Vsc2UKLSAgICAvLyBFYXJsaWVyIHZlcnNpb25zIG9mIHRoaXMgY29kZSB1
c2VkIHRoZSBHUFUgdG8gZmxpcCB0aGUKLSAgICAvLyBmcmFtZWJ1ZmZlciB2ZXJ0aWNhbGx5IGJl
Zm9yZSByZWFkaW5nIGl0IGJhY2sgZm9yIGNvbXBvc2l0aW5nCi0gICAgLy8gdmlhIHNvZnR3YXJl
LiBUaGlzIGNvZGUgd2FzIHF1aXRlIGNvbXBsaWNhdGVkLCB1c2VkIGEgbG90IG9mCi0gICAgLy8g
R1BVIG1lbW9yeSwgYW5kIGRpZG4ndCBwcm92aWRlIGFuIG9idmlvdXMgc3BlZWR1cC4gU2luY2Ug
dGhpcwotICAgIC8vIHZlcnRpY2FsIGZsaXAgaXMgb25seSBhIHRlbXBvcmFyeSBzb2x1dGlvbiBh
bnl3YXkgdW50aWwgQ2hyb21lCi0gICAgLy8gaXMgZnVsbHkgR1BVIGNvbXBvc2l0ZWQsIGl0IHdh
c24ndCB3b3J0aCB0aGUgY29tcGxleGl0eS4KLQogICAgIEhUTUxDYW52YXNFbGVtZW50KiBjYW52
YXMgPSBjb250ZXh0LT5jYW52YXMoKTsKICAgICBJbWFnZUJ1ZmZlciogaW1hZ2VCdWZmZXIgPSBj
YW52YXMtPmJ1ZmZlcigpOwogICAgIHVuc2lnbmVkIGNoYXIqIHBpeGVscyA9IDA7Ci0gICAgYm9v
bCBtdXN0UmVzdG9yZUZCTyA9IChtX2JvdW5kRkJPICE9IG1fZmJvKTsKLSAgICBpZiAobXVzdFJl
c3RvcmVGQk8pCi0gICAgICAgIGdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VY
VCwgbV9mYm8pOwogI2lmIFBMQVRGT1JNKFNLSUEpCiAgICAgY29uc3QgU2tCaXRtYXAqIGNhbnZh
c0JpdG1hcCA9IGltYWdlQnVmZmVyLT5jb250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpLT5iaXRt
YXAoKTsKICAgICBjb25zdCBTa0JpdG1hcCogcmVhZGJhY2tCaXRtYXAgPSAwOwogICAgIEFTU0VS
VChjYW52YXNCaXRtYXAtPmNvbmZpZygpID09IFNrQml0bWFwOjprQVJHQl84ODg4X0NvbmZpZyk7
Ci0gICAgaWYgKGNhbnZhc0JpdG1hcC0+d2lkdGgoKSA9PSBtX2NhY2hlZFdpZHRoICYmIGNhbnZh
c0JpdG1hcC0+aGVpZ2h0KCkgPT0gbV9jYWNoZWRIZWlnaHQpIHsKKyAgICBpZiAoY2FudmFzQml0
bWFwLT53aWR0aCgpID09IG1faW1wbC0+d2lkdGgoKSAmJiBjYW52YXNCaXRtYXAtPmhlaWdodCgp
ID09IG1faW1wbC0+aGVpZ2h0KCkpIHsKICAgICAgICAgLy8gVGhpcyBpcyB0aGUgZmFzdGVzdCBh
bmQgbW9zdCBjb21tb24gY2FzZS4gV2UgcmVhZCBiYWNrCiAgICAgICAgIC8vIGRpcmVjdGx5IGlu
dG8gdGhlIGNhbnZhcydzIGJhY2tpbmcgc3RvcmUuCiAgICAgICAgIHJlYWRiYWNrQml0bWFwID0g
Y2FudmFzQml0bWFwOwotICAgICAgICBpZiAobV9yZXNpemluZ0JpdG1hcCkgewotICAgICAgICAg
ICAgZGVsZXRlIG1fcmVzaXppbmdCaXRtYXA7Ci0gICAgICAgICAgICBtX3Jlc2l6aW5nQml0bWFw
ID0gMDsKLSAgICAgICAgfQorICAgICAgICBtX3Jlc2l6aW5nQml0bWFwLnJlc2V0KCk7CiAgICAg
fSBlbHNlIHsKICAgICAgICAgLy8gV2UgbmVlZCB0byBhbGxvY2F0ZSBhIHRlbXBvcmFyeSBiaXRt
YXAgZm9yIHJlYWRpbmcgYmFjayB0aGUKICAgICAgICAgLy8gcGl4ZWwgZGF0YS4gV2Ugd2lsbCB0
aGVuIHVzZSBTa2lhIHRvIHJlc2NhbGUgdGhpcyBiaXRtYXAgdG8KICAgICAgICAgLy8gdGhlIHNp
emUgb2YgdGhlIGNhbnZhcydzIGJhY2tpbmcgc3RvcmUuCi0gICAgICAgIGlmIChtX3Jlc2l6aW5n
Qml0bWFwICYmIChtX3Jlc2l6aW5nQml0bWFwLT53aWR0aCgpICE9IG1fY2FjaGVkV2lkdGggfHwg
bV9yZXNpemluZ0JpdG1hcC0+aGVpZ2h0KCkgIT0gbV9jYWNoZWRIZWlnaHQpKSB7Ci0gICAgICAg
ICAgICBkZWxldGUgbV9yZXNpemluZ0JpdG1hcDsKLSAgICAgICAgICAgIG1fcmVzaXppbmdCaXRt
YXAgPSAwOwotICAgICAgICB9Ci0gICAgICAgIGlmICghbV9yZXNpemluZ0JpdG1hcCkgewotICAg
ICAgICAgICAgbV9yZXNpemluZ0JpdG1hcCA9IG5ldyBTa0JpdG1hcCgpOwotICAgICAgICAgICAg
bV9yZXNpemluZ0JpdG1hcC0+c2V0Q29uZmlnKFNrQml0bWFwOjprQVJHQl84ODg4X0NvbmZpZywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2NhY2hlZFdpZHRoLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fY2FjaGVkSGVpZ2h0KTsK
LSAgICAgICAgICAgIGlmICghbV9yZXNpemluZ0JpdG1hcC0+YWxsb2NQaXhlbHMoKSkgewotICAg
ICAgICAgICAgICAgIGRlbGV0ZSBtX3Jlc2l6aW5nQml0bWFwOwotICAgICAgICAgICAgICAgIG1f
cmVzaXppbmdCaXRtYXAgPSAwOworICAgICAgICBpZiAobV9yZXNpemluZ0JpdG1hcC53aWR0aCgp
ICE9IG1faW1wbC0+d2lkdGgoKSB8fCBtX3Jlc2l6aW5nQml0bWFwLmhlaWdodCgpICE9IG1faW1w
bC0+aGVpZ2h0KCkpIHsKKyAgICAgICAgICAgIG1fcmVzaXppbmdCaXRtYXAuc2V0Q29uZmlnKFNr
Qml0bWFwOjprQVJHQl84ODg4X0NvbmZpZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1faW1wbC0+d2lkdGgoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1faW1wbC0+aGVpZ2h0KCkpOworICAgICAgICAgICAgaWYgKCFtX3Jlc2l6aW5n
Qml0bWFwLmFsbG9jUGl4ZWxzKCkpIHsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgcmVhZGJhY2tCaXRtYXAgPSBtX3Jlc2l6aW5nQml0
bWFwOworICAgICAgICByZWFkYmFja0JpdG1hcCA9ICZtX3Jlc2l6aW5nQml0bWFwOwogICAgIH0K
IAogICAgIC8vIFJlYWQgYmFjayB0aGUgZnJhbWUgYnVmZmVyLgogICAgIFNrQXV0b0xvY2tQaXhl
bHMgYml0bWFwTG9jaygqcmVhZGJhY2tCaXRtYXApOwogICAgIHBpeGVscyA9IHN0YXRpY19jYXN0
PHVuc2lnbmVkIGNoYXIqPihyZWFkYmFja0JpdG1hcC0+Z2V0UGl4ZWxzKCkpOwotICAgIGdsUmVh
ZFBpeGVscygwLCAwLCBtX2NhY2hlZFdpZHRoLCBtX2NhY2hlZEhlaWdodCwgR0xfQkdSQSwgR0xf
VU5TSUdORURfQllURSwgcGl4ZWxzKTsKICNlbGlmIFBMQVRGT1JNKENHKQotICAgIGlmIChtX3Jl
bmRlck91dHB1dCkgeworICAgIGlmIChtX3JlbmRlck91dHB1dCkKICAgICAgICAgcGl4ZWxzID0g
bV9yZW5kZXJPdXRwdXQ7Ci0gICAgICAgIGdsUmVhZFBpeGVscygwLCAwLCBtX2NhY2hlZFdpZHRo
LCBtX2NhY2hlZEhlaWdodCwgR0xfQkdSQSwgR0xfVU5TSUdORURfSU5UXzhfOF84XzhfUkVWLCBw
aXhlbHMpOwotICAgIH0KICNlbHNlCiAjZXJyb3IgTXVzdCBwb3J0IHRvIHlvdXIgcGxhdGZvcm0K
ICNlbmRpZgogCi0gICAgaWYgKG11c3RSZXN0b3JlRkJPKQotICAgICAgICBnbEJpbmRGcmFtZWJ1
ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fYm91bmRGQk8pOwotCi0jaWZkZWYgRkxJUF9G
UkFNRUJVRkZFUl9WRVJUSUNBTExZCi0gICAgaWYgKHBpeGVscykKLSAgICAgICAgZmxpcFZlcnRp
Y2FsbHkocGl4ZWxzLCBtX2NhY2hlZFdpZHRoLCBtX2NhY2hlZEhlaWdodCk7Ci0jZW5kaWYKKyAg
ICBtX2ltcGwtPnJlYWRCYWNrRnJhbWVidWZmZXIocGl4ZWxzLCA0ICogbV9pbXBsLT53aWR0aCgp
ICogbV9pbXBsLT5oZWlnaHQoKSk7CiAKICNpZiBQTEFURk9STShTS0lBKQotICAgIGlmIChtX3Jl
c2l6aW5nQml0bWFwKSB7CisgICAgaWYgKG1fcmVzaXppbmdCaXRtYXAucmVhZHlUb0RyYXcoKSkg
ewogICAgICAgICAvLyBXZSBuZWVkIHRvIGRyYXcgdGhlIHJlc2l6aW5nIGJpdG1hcCBpbnRvIHRo
ZSBjYW52YXMncyBiYWNraW5nIHN0b3JlLgogICAgICAgICBTa0NhbnZhcyBjYW52YXMoKmNhbnZh
c0JpdG1hcCk7CiAgICAgICAgIFNrUmVjdCBkc3Q7CiAgICAgICAgIGRzdC5zZXQoMCwgMCwgY2Fu
dmFzQml0bWFwLT53aWR0aCgpLCBjYW52YXNCaXRtYXAtPmhlaWdodCgpKTsKLSAgICAgICAgY2Fu
dmFzLmRyYXdCaXRtYXBSZWN0KCptX3Jlc2l6aW5nQml0bWFwLCAwLCBkc3QpOworICAgICAgICBj
YW52YXMuZHJhd0JpdG1hcFJlY3QobV9yZXNpemluZ0JpdG1hcCwgMCwgZHN0KTsKICAgICB9CiAj
ZWxpZiBQTEFURk9STShDRykKICAgICBpZiAobV9yZW5kZXJPdXRwdXQpIHsKLSAgICAgICAgaW50
IHJvd0J5dGVzID0gbV9jYWNoZWRXaWR0aCAqIDQ7Ci0gICAgICAgIENHRGF0YVByb3ZpZGVyUmVm
IGRhdGFQcm92aWRlciA9IENHRGF0YVByb3ZpZGVyQ3JlYXRlV2l0aERhdGEoMCwgbV9yZW5kZXJP
dXRwdXQsIHJvd0J5dGVzICogbV9jYWNoZWRIZWlnaHQsIDApOworICAgICAgICBpbnQgcm93Qnl0
ZXMgPSBtX2ltcGwtPndpZHRoKCkgKiA0OworICAgICAgICBDR0RhdGFQcm92aWRlclJlZiBkYXRh
UHJvdmlkZXIgPSBDR0RhdGFQcm92aWRlckNyZWF0ZVdpdGhEYXRhKDAsIG1fcmVuZGVyT3V0cHV0
LCByb3dCeXRlcyAqIG1faW1wbC0+aGVpZ2h0KCksIDApOwogICAgICAgICBDR0NvbG9yU3BhY2VS
ZWYgY29sb3JTcGFjZSA9IENHQ29sb3JTcGFjZUNyZWF0ZURldmljZVJHQigpOwotICAgICAgICBD
R0ltYWdlUmVmIGNnSW1hZ2UgPSBDR0ltYWdlQ3JlYXRlKG1fY2FjaGVkV2lkdGgsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9jYWNoZWRIZWlnaHQsCisgICAg
ICAgIENHSW1hZ2VSZWYgY2dJbWFnZSA9IENHSW1hZ2VDcmVhdGUobV9pbXBsLT53aWR0aCgpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faW1wbC0+aGVpZ2h0
KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMiwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dCeXRlcywKQEAgLTg2MSwxMDE4ICs0NDQs
NzYzIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6YmVnaW5QYWkKICNlbHNlCiAj
ZXJyb3IgTXVzdCBwb3J0IHRvIHlvdXIgcGxhdGZvcm0KICNlbmRpZgotCi0jZW5kaWYgIC8vIFJF
TkRFUl9UT19ERUJVR0dJTkdfV0lORE9XCi19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRl
cm5hbDo6YWN0aXZlVGV4dHVyZSh1bnNpZ25lZCBsb25nIHRleHR1cmUpCi17Ci0gICAgLy8gRklY
TUU6IHF1ZXJ5IG51bWJlciBvZiB0ZXh0dXJlcyBhdmFpbGFibGUuCi0gICAgaWYgKHRleHR1cmUg
PCBHTF9URVhUVVJFMCB8fCB0ZXh0dXJlID4gR0xfVEVYVFVSRTArMzIpCi0gICAgICAgIC8vIEZJ
WE1FOiByYWlzZSBleGNlcHRpb24uCi0gICAgICAgIHJldHVybjsKLQotICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOwotICAgIGdsQWN0aXZlVGV4dHVyZSh0ZXh0dXJlKTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHQzREludGVybmFsOjpiaW5kQnVmZmVyKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYkdMQnVmZmVyKiBi
dWZmZXIpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgR0x1aW50IGJ1ZklEID0g
RVhUUkFDVChidWZmZXIpOwotICAgIGlmICh0YXJnZXQgPT0gR0xfQVJSQVlfQlVGRkVSKQotICAg
ICAgICBtX2JvdW5kQXJyYXlCdWZmZXIgPSBidWZJRDsKLSAgICBnbEJpbmRCdWZmZXIodGFyZ2V0
LCBidWZJRCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6YmluZEZyYW1l
YnVmZmVyKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgV2ViR0xGcmFtZWJ1ZmZlciogZnJhbWVidWZmZXIpCit2b2lk
IEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmVuZFBhaW50KCkKIHsKLSAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKLSAgICBHTHVpbnQgaWQgPSBFWFRSQUNUKGZyYW1lYnVmZmVyKTsKLSAgICBp
ZiAoIWlkKQotICAgICAgICBpZCA9IG1fZmJvOwotICAgIGdsQmluZEZyYW1lYnVmZmVyRVhUKHRh
cmdldCwgaWQpOwotICAgIG1fYm91bmRGQk8gPSBpZDsKIH0KIAotLy8gSWYgd2UgZGlkbid0IGhh
dmUgdG8gaGFjayBHTF9URVhUVVJFX1dSQVBfUiBmb3IgY3ViZSBtYXBzLAotLy8gd2UgY291bGQg
anVzdCB1c2U6Ci0vLyBHTF9TQU1FX01FVEhPRF8yX1gyKEJpbmRUZXh0dXJlLCBiaW5kVGV4dHVy
ZSwgdW5zaWduZWQgbG9uZywgV2ViR0xUZXh0dXJlKikKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RJ
bnRlcm5hbDo6YmluZFRleHR1cmUodW5zaWduZWQgbG9uZyB0YXJnZXQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYkdMVGV4dHVyZSogdGV4dHVyZSkKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6cmVzaGFwZShpbnQgd2lkdGgsIGludCBoZWln
aHQpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgdW5zaWduZWQgaW50IHRleHR1
cmVPYmplY3QgPSBFWFRSQUNUKHRleHR1cmUpOworICAgIGlmICh3aWR0aCA9PSBtX2ltcGwtPndp
ZHRoKCkgJiYgaGVpZ2h0ID09IG1faW1wbC0+aGVpZ2h0KCkpCisgICAgICAgIHJldHVybjsKIAot
ICAgIGdsQmluZFRleHR1cmUodGFyZ2V0LCB0ZXh0dXJlT2JqZWN0KTsKKyAgICBtX2ltcGwtPnJl
c2hhcGUod2lkdGgsIGhlaWdodCk7CiAKLSAgICAvLyBGSVhNRTogR0xfVEVYVFVSRV9XUkFQX1Ig
aXNuJ3QgZXhwb3NlZCBpbiB0aGUgT3BlbkdMIEVTIDIuMAotICAgIC8vIEFQSS4gT24gZGVza3Rv
cCBPcGVuR0wgaW1wbGVtZW50YXRpb25zIGl0IHNlZW1zIG5lY2Vzc2FyeSB0bwotICAgIC8vIHNl
dCB0aGlzIHdyYXAgbW9kZSB0byBHTF9DTEFNUF9UT19FREdFIHRvIGdldCBjb3JyZWN0IGJlaGF2
aW9yCi0gICAgLy8gb2YgY3ViZSBtYXBzLgotICAgIGlmICh0ZXh0dXJlKSB7Ci0gICAgICAgIGlm
ICh0YXJnZXQgPT0gR0xfVEVYVFVSRV9DVUJFX01BUCkgewotICAgICAgICAgICAgaWYgKCF0ZXh0
dXJlLT5pc0N1YmVNYXBSV3JhcE1vZGVJbml0aWFsaXplZCgpKSB7Ci0gICAgICAgICAgICAgICAg
Z2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfQ1VCRV9NQVAsIEdMX1RFWFRVUkVfV1JBUF9SLCBH
TF9DTEFNUF9UT19FREdFKTsKLSAgICAgICAgICAgICAgICB0ZXh0dXJlLT5zZXRDdWJlTWFwUldy
YXBNb2RlSW5pdGlhbGl6ZWQodHJ1ZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZQot
ICAgICAgICAgICAgdGV4dHVyZS0+c2V0Q3ViZU1hcFJXcmFwTW9kZUluaXRpYWxpemVkKGZhbHNl
KTsKKyNpZiBQTEFURk9STShDRykKKyAgICAvLyBOZWVkIHRvIHJlYWxsb2NhdGUgdGhlIGNsaWVu
dC1zaWRlIGJhY2tpbmcgc3RvcmUuCisgICAgLy8gRklYTUU6IG1ha2UgdGhpcyBtb3JlIGVmZmlj
aWVudC4KKyAgICBpZiAobV9yZW5kZXJPdXRwdXQpIHsKKyAgICAgICAgZGVsZXRlW10gbV9yZW5k
ZXJPdXRwdXQ7CisgICAgICAgIG1fcmVuZGVyT3V0cHV0ID0gMDsKICAgICB9CisgICAgaW50IHJv
d0J5dGVzID0gd2lkdGggKiA0OworICAgIG1fcmVuZGVyT3V0cHV0ID0gbmV3IHVuc2lnbmVkIGNo
YXJbaGVpZ2h0ICogcm93Qnl0ZXNdOworI2VuZGlmIC8vIFBMQVRGT1JNKENHKQogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmJ1ZmZlckRhdGFJbXBsKHVuc2lnbmVkIGxvbmcg
dGFyZ2V0LCBpbnQgc2l6ZSwgY29uc3Qgdm9pZCogZGF0YSwgdW5zaWduZWQgbG9uZyB1c2FnZSkK
LXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICAvLyBGSVhNRTogbWFrZSB0aGlzIHZl
cmlmaWNhdGlvbiBtb3JlIGVmZmljaWVudC4KLSAgICBHTGludCBiaW5kaW5nID0gMDsKLSAgICBH
TGVudW0gYmluZGluZ190YXJnZXQgPSBHTF9BUlJBWV9CVUZGRVJfQklORElORzsKLSAgICBpZiAo
dGFyZ2V0ID09IEdMX0VMRU1FTlRfQVJSQVlfQlVGRkVSKQotICAgICAgICBiaW5kaW5nX3Rhcmdl
dCA9IEdMX0VMRU1FTlRfQVJSQVlfQlVGRkVSX0JJTkRJTkc7Ci0gICAgZ2xHZXRJbnRlZ2Vydihi
aW5kaW5nX3RhcmdldCwgJmJpbmRpbmcpOwotICAgIGlmIChiaW5kaW5nIDw9IDApIHsKLSAgICAg
ICAgLy8gRklYTUU6IHJhaXNlIGV4Y2VwdGlvbi4KLSAgICAgICAgLy8gTG9nTWVzc2FnZWYoKCJi
dWZmZXJEYXRhOiBubyBidWZmZXIgYm91bmQiKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Cisv
LyBNYWNyb3MgdG8gYXNzaXN0IGluIGRlbGVnYXRpbmcgZnJvbSBHcmFwaGljc0NvbnRleHQzRElu
dGVybmFsIHRvCisvLyBXZWJHcmFwaGljc0NvbnRleHQzRC4KIAotICAgIGdsQnVmZmVyRGF0YSh0
YXJnZXQsCi0gICAgICAgICAgICAgICAgICAgc2l6ZSwKLSAgICAgICAgICAgICAgICAgICBkYXRh
LAotICAgICAgICAgICAgICAgICAgIHVzYWdlKTsKKyNkZWZpbmUgREVMRUdBVEVfVE9fSU1QTChu
YW1lKSBcCit2b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6Om5hbWUoKSBcCit7IFwKKyAg
ICBtX2ltcGwtPm5hbWUoKTsgXAogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6
OmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheSh1bnNpZ25lZCBsb25nIGluZGV4KQotewotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOwotICAgIGlmIChpbmRleCA8IE51bVRyYWNrZWRQb2ludGVyU3Rh
dGVzKQotICAgICAgICBtX3ZlcnRleEF0dHJpYlBvaW50ZXJTdGF0ZVtpbmRleF0uZW5hYmxlZCA9
IGZhbHNlOwotICAgIGdsRGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGluZGV4KTsKKyNkZWZpbmUg
REVMRUdBVEVfVE9fSU1QTF9SKG5hbWUsIHJ0KSAgICAgICAgICAgXAorcnQgR3JhcGhpY3NDb250
ZXh0M0RJbnRlcm5hbDo6bmFtZSgpIFwKK3sgXAorICAgIHJldHVybiBtX2ltcGwtPm5hbWUoKTsg
XAogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmVuYWJsZVZlcnRleEF0dHJp
YkFycmF5KHVuc2lnbmVkIGxvbmcgaW5kZXgpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
Ci0gICAgaWYgKGluZGV4IDwgTnVtVHJhY2tlZFBvaW50ZXJTdGF0ZXMpCi0gICAgICAgIG1fdmVy
dGV4QXR0cmliUG9pbnRlclN0YXRlW2luZGV4XS5lbmFibGVkID0gdHJ1ZTsKLSAgICBnbEVuYWJs
ZVZlcnRleEF0dHJpYkFycmF5KGluZGV4KTsKKyNkZWZpbmUgREVMRUdBVEVfVE9fSU1QTF8xKG5h
bWUsIHQxKSBcCit2b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6Om5hbWUodDEgYTEpIFwK
K3sgXAorICAgIG1faW1wbC0+bmFtZShhMSk7IFwKIH0KIAotdW5zaWduZWQgbG9uZyBHcmFwaGlj
c0NvbnRleHQzREludGVybmFsOjpnZXRFcnJvcigpCi17Ci0gICAgaWYgKG1fc3ludGhldGljRXJy
b3JzLnNpemUoKSA+IDApIHsKLSAgICAgICAgTGlzdEhhc2hTZXQ8dW5zaWduZWQgbG9uZz46Oml0
ZXJhdG9yIGl0ZXIgPSBtX3N5bnRoZXRpY0Vycm9ycy5iZWdpbigpOwotICAgICAgICB1bnNpZ25l
ZCBsb25nIGVyciA9ICppdGVyOwotICAgICAgICBtX3N5bnRoZXRpY0Vycm9ycy5yZW1vdmUoaXRl
cik7Ci0gICAgICAgIHJldHVybiBlcnI7Ci0gICAgfQotCi0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7Ci0gICAgcmV0dXJuIGdsR2V0RXJyb3IoKTsKKyNkZWZpbmUgREVMRUdBVEVfVE9fSU1QTF8x
X1gobmFtZSwgdDEpIFwKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6bmFtZSh0MSBh
MSkgXAoreyBcCisgICAgbV9pbXBsLT5uYW1lKEVYVFJBQ1QoYTEpKTsgICAgICAgICAgICAgICAg
ICBcCiB9CiAKLUdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIEdyYXBoaWNzQ29udGV4dDNE
SW50ZXJuYWw6OmdldENvbnRleHRBdHRyaWJ1dGVzKCkKLXsKLSAgICByZXR1cm4gbV9hdHRyczsK
KyNkZWZpbmUgREVMRUdBVEVfVE9fSU1QTF8xUihuYW1lLCB0MSwgcnQpICAgIFwKK3J0IEdyYXBo
aWNzQ29udGV4dDNESW50ZXJuYWw6Om5hbWUodDEgYTEpIFwKK3sgXAorICAgIHJldHVybiBtX2lt
cGwtPm5hbWUoYTEpOyBcCiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6dmVy
dGV4QXR0cmliUG9pbnRlcih1bnNpZ25lZCBsb25nIGluZHgsIGludCBzaXplLCBpbnQgdHlwZSwg
Ym9vbCBub3JtYWxpemVkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgc3RyaWRlLCB1bnNpZ25lZCBsb25nIG9mZnNldCkK
LXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLQotICAgIGlmIChtX2JvdW5kQXJyYXlCdWZm
ZXIgPD0gMCkgewotICAgICAgICAvLyBGSVhNRTogcmFpc2UgZXhjZXB0aW9uLgotICAgICAgICAv
LyBMb2dNZXNzYWdlZigoImJ1ZmZlckRhdGE6IG5vIGJ1ZmZlciBib3VuZCIpKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIGlmIChpbmR4IDwgTnVtVHJhY2tlZFBvaW50ZXJTdGF0ZXMp
IHsKLSAgICAgICAgVmVydGV4QXR0cmliUG9pbnRlclN0YXRlJiBzdGF0ZSA9IG1fdmVydGV4QXR0
cmliUG9pbnRlclN0YXRlW2luZHhdOwotICAgICAgICBzdGF0ZS5idWZmZXIgPSBtX2JvdW5kQXJy
YXlCdWZmZXI7Ci0gICAgICAgIHN0YXRlLmluZHggPSBpbmR4OwotICAgICAgICBzdGF0ZS5zaXpl
ID0gc2l6ZTsKLSAgICAgICAgc3RhdGUudHlwZSA9IHR5cGU7Ci0gICAgICAgIHN0YXRlLm5vcm1h
bGl6ZWQgPSBub3JtYWxpemVkOwotICAgICAgICBzdGF0ZS5zdHJpZGUgPSBzdHJpZGU7Ci0gICAg
ICAgIHN0YXRlLm9mZnNldCA9IG9mZnNldDsKLSAgICB9Ci0KLSAgICBnbFZlcnRleEF0dHJpYlBv
aW50ZXIoaW5keCwgc2l6ZSwgdHlwZSwgbm9ybWFsaXplZCwgc3RyaWRlLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PHZvaWQqPihzdGF0aWNfY2FzdDxpbnRwdHJf
dD4ob2Zmc2V0KSkpOworI2RlZmluZSBERUxFR0FURV9UT19JTVBMXzFSX1gobmFtZSwgdDEsIHJ0
KSAgICBcCitydCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpuYW1lKHQxIGExKSBcCit7IFwK
KyAgICByZXR1cm4gbV9pbXBsLT5uYW1lKEVYVFJBQ1QoYTEpKTsgICAgICAgICAgIFwKIH0KIAot
dm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjp2aWV3cG9ydEltcGwobG9uZyB4LCBsb25n
IHksIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0KQotewotICAgIGds
Vmlld3BvcnQoeCwgeSwgd2lkdGgsIGhlaWdodCk7CisjZGVmaW5lIERFTEVHQVRFX1RPX0lNUExf
MihuYW1lLCB0MSwgdDIpIFwKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6bmFtZSh0
MSBhMSwgdDIgYTIpIFwKK3sgXAorICAgIG1faW1wbC0+bmFtZShhMSwgYTIpOyBcCiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6c3ludGhlc2l6ZUdMRXJyb3IodW5zaWduZWQg
bG9uZyBlcnJvcikKLXsKLSAgICBtX3N5bnRoZXRpY0Vycm9ycy5hZGQoZXJyb3IpOworI2RlZmlu
ZSBERUxFR0FURV9UT19JTVBMXzJfWDEyKG5hbWUsIHQxLCB0MikgXAordm9pZCBHcmFwaGljc0Nv
bnRleHQzREludGVybmFsOjpuYW1lKHQxIGExLCB0MiBhMikgXAoreyBcCisgICAgbV9pbXBsLT5u
YW1lKEVYVFJBQ1QoYTEpLCBFWFRSQUNUKGEyKSk7ICAgICBcCiB9CiAKLS8vIEdyYXBoaWNzQ29u
dGV4dDNEIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCi0KLS8qIEhlbHBlciBtYWNyb3MgZm9yIHdoZW4gd2UncmUganVzdCB3cmFwcGluZyBhIGds
IG1ldGhvZCwgc28gdGhhdAotICogd2UgY2FuIGF2b2lkIGhhdmluZyB0byB0eXBlIHRoaXMgNTAw
IHRpbWVzLiAgTm90ZSB0aGF0IHRoZXNlIE1VU1QKLSAqIE5PVCBCRSBVU0VEIGlmIHdlIG5lZWQg
dG8gY2hlY2sgYW55IG9mIHRoZSBwYXJhbWV0ZXJzLgotICovCi0KLSNkZWZpbmUgR0xfU0FNRV9N
RVRIT0RfMChnbG5hbWUsIG5hbWUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpuYW1lKCkgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAoteyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
LSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgZ2wjI2dsbmFtZSgpOyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorI2RlZmlu
ZSBERUxFR0FURV9UT19JTVBMXzJfWDIobmFtZSwgdDEsIHQyKSBcCit2b2lkIEdyYXBoaWNzQ29u
dGV4dDNESW50ZXJuYWw6Om5hbWUodDEgYTEsIHQyIGEyKSBcCit7IFwKKyAgICBtX2ltcGwtPm5h
bWUoYTEsIEVYVFJBQ1QoYTIpKTsgICAgIFwKIH0KIAotI2RlZmluZSBHTF9TQU1FX01FVEhPRF8x
KGdsbmFtZSwgbmFtZSwgdDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
LXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6Om5hbWUodDEgYTEpICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCi17ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKLSAgICBnbCMjZ2xuYW1lKGExKTsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisjZGVmaW5lIERFTEVH
QVRFX1RPX0lNUExfMlIobmFtZSwgdDEsIHQyLCBydCkgIFwKK3J0IEdyYXBoaWNzQ29udGV4dDNE
SW50ZXJuYWw6Om5hbWUodDEgYTEsIHQyIGEyKSBcCit7IFwKKyAgICByZXR1cm4gbV9pbXBsLT5u
YW1lKGExLCBhMik7IFwKIH0KIAotI2RlZmluZSBHTF9TQU1FX01FVEhPRF8xX1goZ2xuYW1lLCBu
YW1lLCB0MSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6Om5hbWUodDEgYTEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCi17ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKLSAgICBnbCMjZ2xuYW1lKEVYVFJBQ1QoYTEpKTsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisjZGVmaW5lIERFTEVHQVRFX1RPX0lNUExf
MyhuYW1lLCB0MSwgdDIsIHQzKSAgIFwKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6
bmFtZSh0MSBhMSwgdDIgYTIsIHQzIGEzKSAgICBcCit7IFwKKyAgICBtX2ltcGwtPm5hbWUoYTEs
IGEyLCBhMyk7ICAgICAgICAgICAgICAgICAgXAogfQogCi0jZGVmaW5lIEdMX1NBTUVfTUVUSE9E
XzIoZ2xuYW1lLCBuYW1lLCB0MSwgdDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6bmFtZSh0MSBhMSwgdDIgYTIpICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLXsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICAgIGdsIyNnbG5hbWUoYTEsIGEyKTsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyNkZWZpbmUgREVM
RUdBVEVfVE9fSU1QTF8zX1gxKG5hbWUsIHQxLCB0MiwgdDMpICAgXAordm9pZCBHcmFwaGljc0Nv
bnRleHQzREludGVybmFsOjpuYW1lKHQxIGExLCB0MiBhMiwgdDMgYTMpICAgIFwKK3sgXAorICAg
IG1faW1wbC0+bmFtZShFWFRSQUNUKGExKSwgYTIsIGEzKTsgICAgICAgICAgXAogfQogCi0jZGVm
aW5lIEdMX1NBTUVfTUVUSE9EXzJfWDEyKGdsbmFtZSwgbmFtZSwgdDEsIHQyKSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6bmFtZSh0MSBhMSwg
dDIgYTIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLXsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGdsIyNnbG5hbWUoRVhU
UkFDVChhMSksIEVYVFJBQ1QoYTIpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKKyNkZWZpbmUgREVMRUdBVEVfVE9fSU1QTF8zUihuYW1lLCB0MSwgdDIsIHQzLCBydCkg
ICBcCitydCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpuYW1lKHQxIGExLCB0MiBhMiwgdDMg
YTMpICAgIFwKK3sgXAorICAgIHJldHVybiBtX2ltcGwtPm5hbWUoYTEsIGEyLCBhMyk7ICAgICAg
ICAgICAgICAgICAgXAogfQogCi0jZGVmaW5lIEdMX1NBTUVfTUVUSE9EXzJfWDIoZ2xuYW1lLCBu
YW1lLCB0MSwgdDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotdm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6bmFtZSh0MSBhMSwgdDIgYTIpICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKLXsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAotICAgIGdsIyNnbG5hbWUoYTEsIEVYVFJBQ1QoYTIpKTsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyNkZWZpbmUgREVMRUdBVEVfVE9fSU1QTF80
KG5hbWUsIHQxLCB0MiwgdDMsIHQ0KSAgICBcCit2b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJu
YWw6Om5hbWUodDEgYTEsIHQyIGEyLCB0MyBhMywgdDQgYTQpICBcCit7IFwKKyAgICBtX2ltcGwt
Pm5hbWUoYTEsIGEyLCBhMywgYTQpOyAgICAgICAgICAgICAgXAogfQogCi0jZGVmaW5lIEdMX1NB
TUVfTUVUSE9EXzMoZ2xuYW1lLCBuYW1lLCB0MSwgdDIsIHQzKSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6bmFtZSh0MSBhMSwgdDIgYTIsIHQz
IGEzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLXsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGdsIyNnbG5hbWUoYTEsIGEyLCBhMyk7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyNk
ZWZpbmUgREVMRUdBVEVfVE9fSU1QTF80X1g0KG5hbWUsIHQxLCB0MiwgdDMsIHQ0KSAgICBcCit2
b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6Om5hbWUodDEgYTEsIHQyIGEyLCB0MyBhMywg
dDQgYTQpICBcCit7IFwKKyAgICBtX2ltcGwtPm5hbWUoYTEsIGEyLCBhMywgRVhUUkFDVChhNCkp
OyAgICAgIFwKIH0KIAotI2RlZmluZSBHTF9TQU1FX01FVEhPRF8zX1gxMihnbG5hbWUsIG5hbWUs
IHQxLCB0MiwgdDMpICAgICAgICAgICAgICAgICAgICAgICAgIFwKLXZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6Om5hbWUodDEgYTEsIHQyIGEyLCB0MyBhMykgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCi17ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
LSAgICBnbCMjZ2xuYW1lKEVYVFJBQ1QoYTEpLCBFWFRSQUNUKGEyKSwgYTMpOyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCisjZGVmaW5lIERFTEVHQVRFX1RPX0lNUExfNShuYW1l
LCB0MSwgdDIsIHQzLCB0NCwgdDUpICAgICAgXAordm9pZCBHcmFwaGljc0NvbnRleHQzREludGVy
bmFsOjpuYW1lKHQxIGExLCB0MiBhMiwgdDMgYTMsIHQ0IGE0LCB0NSBhNSkgICAgICAgIFwKK3sg
XAorICAgIG1faW1wbC0+bmFtZShhMSwgYTIsIGEzLCBhNCwgYTUpOyAgIFwKIH0KIAotI2RlZmlu
ZSBHTF9TQU1FX01FVEhPRF8zX1gyKGdsbmFtZSwgbmFtZSwgdDEsIHQyLCB0MykgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6Om5hbWUodDEgYTEsIHQy
IGEyLCB0MyBhMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi17ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBnbCMjZ2xuYW1lKGExLCBF
WFRSQUNUKGEyKSwgYTMpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCisjZGVmaW5lIERFTEVHQVRFX1RPX0lNUExfNV9YNChuYW1lLCB0MSwgdDIsIHQzLCB0NCwg
dDUpICAgICAgICAgICAgICAgIFwKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6bmFt
ZSh0MSBhMSwgdDIgYTIsIHQzIGEzLCB0NCBhNCwgdDUgYTUpICAgICAgICBcCit7IFwKKyAgICBt
X2ltcGwtPm5hbWUoYTEsIGEyLCBhMywgRVhUUkFDVChhNCksIGE1KTsgIFwKIH0KIAotI2RlZmlu
ZSBHTF9TQU1FX01FVEhPRF80KGdsbmFtZSwgbmFtZSwgdDEsIHQyLCB0MywgdDQpICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6Om5hbWUodDEgYTEsIHQy
IGEyLCB0MyBhMywgdDQgYTQpICAgICAgICAgICAgICAgICAgICAgICBcCi17ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBnbCMjZ2xuYW1lKGExLCBh
MiwgYTMsIGE0KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCisjZGVmaW5lIERFTEVHQVRFX1RPX0lNUExfNVIobmFtZSwgdDEsIHQyLCB0MywgdDQsIHQ1
LCBydCkgICAgICBcCitydCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpuYW1lKHQxIGExLCB0
MiBhMiwgdDMgYTMsIHQ0IGE0LCB0NSBhNSkgICAgICAgIFwKK3sgXAorICAgIHJldHVybiBtX2lt
cGwtPm5hbWUoYTEsIGEyLCBhMywgYTQsIGE1KTsgICBcCiB9CiAKLSNkZWZpbmUgR0xfU0FNRV9N
RVRIT0RfNF9YNChnbG5hbWUsIG5hbWUsIHQxLCB0MiwgdDMsIHQ0KSAgICAgICAgICAgICAgICAg
ICAgICBcCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpuYW1lKHQxIGExLCB0MiBhMiwgdDMgYTMs
IHQ0IGE0KSAgICAgICAgICAgICAgICAgICAgICAgXAoteyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
LSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgZ2wjI2dsbmFtZShhMSwgYTIsIGEzLCBFWFRS
QUNUKGE0KSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorI2RlZmlu
ZSBERUxFR0FURV9UT19JTVBMXzYobmFtZSwgdDEsIHQyLCB0MywgdDQsIHQ1LCB0NikgIFwKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6bmFtZSh0MSBhMSwgdDIgYTIsIHQzIGEzLCB0
NCBhNCwgdDUgYTUsIHQ2IGE2KSBcCit7IFwKKyAgICBtX2ltcGwtPm5hbWUoYTEsIGEyLCBhMywg
YTQsIGE1LCBhNik7ICAgICAgIFwKIH0KIAotI2RlZmluZSBHTF9TQU1FX01FVEhPRF81KGdsbmFt
ZSwgbmFtZSwgdDEsIHQyLCB0MywgdDQsIHQ1KSAgICAgICAgICAgICAgICAgICAgIFwKLXZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6Om5hbWUodDEgYTEsIHQyIGEyLCB0MyBhMywgdDQgYTQsIHQ1IGE1
KSAgICAgICAgICAgICAgICBcCi17ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKLSAgICBnbCMjZ2xuYW1lKGExLCBhMiwgYTMsIGE0LCBhNSk7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisjZGVmaW5lIERFTEVHQVRFX1RP
X0lNUExfNlIobmFtZSwgdDEsIHQyLCB0MywgdDQsIHQ1LCB0NiwgcnQpICBcCitydCBHcmFwaGlj
c0NvbnRleHQzREludGVybmFsOjpuYW1lKHQxIGExLCB0MiBhMiwgdDMgYTMsIHQ0IGE0LCB0NSBh
NSwgdDYgYTYpIFwKK3sgXAorICAgIHJldHVybiBtX2ltcGwtPm5hbWUoYTEsIGEyLCBhMywgYTQs
IGE1LCBhNik7ICAgICAgIFwKIH0KIAotI2RlZmluZSBHTF9TQU1FX01FVEhPRF81X1g0KGdsbmFt
ZSwgbmFtZSwgdDEsIHQyLCB0MywgdDQsIHQ1KSAgICAgICAgICAgICAgICAgIFwKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6Om5hbWUodDEgYTEsIHQyIGEyLCB0MyBhMywgdDQgYTQsIHQ1IGE1KSAg
ICAgICAgICAgICAgICBcCi17ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKLSAgICBnbCMjZ2xuYW1lKGExLCBhMiwgYTMsIEVYVFJBQ1QoYTQpLCBhNSk7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisjZGVmaW5lIERFTEVHQVRFX1RPX0lN
UExfN1IobmFtZSwgdDEsIHQyLCB0MywgdDQsIHQ1LCB0NiwgdDcsIHJ0KSBcCitydCBHcmFwaGlj
c0NvbnRleHQzREludGVybmFsOjpuYW1lKHQxIGExLCB0MiBhMiwgdDMgYTMsIHQ0IGE0LCB0NSBh
NSwgdDYgYTYsIHQ3IGE3KSBcCit7IFwKKyAgICByZXR1cm4gbV9pbXBsLT5uYW1lKGExLCBhMiwg
YTMsIGE0LCBhNSwgYTYsIGE3KTsgICBcCiB9CiAKLSNkZWZpbmUgR0xfU0FNRV9NRVRIT0RfNihn
bG5hbWUsIG5hbWUsIHQxLCB0MiwgdDMsIHQ0LCB0NSwgdDYpICAgICAgICAgICAgICAgICBcCi12
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpuYW1lKHQxIGExLCB0MiBhMiwgdDMgYTMsIHQ0IGE0LCB0
NSBhNSwgdDYgYTYpICAgICAgICAgXAoteyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCi0gICAgZ2wjI2dsbmFtZShhMSwgYTIsIGEzLCBhNCwgYTUsIGE2KTsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorI2RlZmluZSBERUxFR0FU
RV9UT19JTVBMXzgobmFtZSwgdDEsIHQyLCB0MywgdDQsIHQ1LCB0NiwgdDcsIHQ4KSAgICAgICBc
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6Om5hbWUodDEgYTEsIHQyIGEyLCB0MyBh
MywgdDQgYTQsIHQ1IGE1LCB0NiBhNiwgdDcgYTcsIHQ4IGE4KSBcCit7IFwKKyAgICBtX2ltcGwt
Pm5hbWUoYTEsIGEyLCBhMywgYTQsIGE1LCBhNiwgYTcsIGE4KTsgICAgICBcCiB9CiAKLSNkZWZp
bmUgR0xfU0FNRV9NRVRIT0RfOChnbG5hbWUsIG5hbWUsIHQxLCB0MiwgdDMsIHQ0LCB0NSwgdDYs
IHQ3LCB0OCkgICAgICAgICBcCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpuYW1lKHQxIGExLCB0
MiBhMiwgdDMgYTMsIHQ0IGE0LCB0NSBhNSwgdDYgYTYsIHQ3IGE3LCB0OCBhOCkgICBcCi17ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBnbCMjZ2xu
YW1lKGExLCBhMiwgYTMsIGE0LCBhNSwgYTYsIGE3LCBhOCk7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCisjZGVmaW5lIERFTEVHQVRFX1RPX0lNUExfOVIobmFtZSwgdDEsIHQyLCB0
MywgdDQsIHQ1LCB0NiwgdDcsIHQ4LCB0OSwgcnQpIFwKK3J0IEdyYXBoaWNzQ29udGV4dDNESW50
ZXJuYWw6Om5hbWUodDEgYTEsIHQyIGEyLCB0MyBhMywgdDQgYTQsIHQ1IGE1LCB0NiBhNiwgdDcg
YTcsIHQ4IGE4LCB0OSBhOSkgXAoreyBcCisgICAgcmV0dXJuIG1faW1wbC0+bmFtZShhMSwgYTIs
IGEzLCBhNCwgYTUsIGE2LCBhNywgYTgsIGE5KTsgICBcCiB9CiAKLVBhc3NPd25QdHI8R3JhcGhp
Y3NDb250ZXh0M0Q+IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUoR3JhcGhpY3NDb250ZXh0M0Q6
OkF0dHJpYnV0ZXMgYXR0cnMpCi17Ci0gICAgUGFzc093blB0cjxHcmFwaGljc0NvbnRleHQzRD4g
Y29udGV4dCA9IG5ldyBHcmFwaGljc0NvbnRleHQzRChhdHRycyk7Ci0gICAgLy8gRklYTUU6IGFk
ZCBlcnJvciBjaGVja2luZwotICAgIHJldHVybiBjb250ZXh0OwotfQorREVMRUdBVEVfVE9fSU1Q
TF9SKG1ha2VDb250ZXh0Q3VycmVudCwgYm9vbCkKK0RFTEVHQVRFX1RPX0lNUExfMVIoc2l6ZUlu
Qnl0ZXMsIGludCwgaW50KQogCi1HcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0Qo
R3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cnMpCi0gICAgOiBtX2N1cnJlbnRXaWR0
aCgwKQotICAgICwgbV9jdXJyZW50SGVpZ2h0KDApCi0gICAgLCBtX2ludGVybmFsKG5ldyBHcmFw
aGljc0NvbnRleHQzREludGVybmFsKGF0dHJzKSkKLXsKLX0KK0RFTEVHQVRFX1RPX0lNUExfMShh
Y3RpdmVUZXh0dXJlLCB1bnNpZ25lZCBsb25nKQorREVMRUdBVEVfVE9fSU1QTF8yX1gxMihhdHRh
Y2hTaGFkZXIsIFdlYkdMUHJvZ3JhbSosIFdlYkdMU2hhZGVyKikKIAotR3JhcGhpY3NDb250ZXh0
M0Q6On5HcmFwaGljc0NvbnRleHQzRCgpCit2b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6
OmJpbmRBdHRyaWJMb2NhdGlvbihXZWJHTFByb2dyYW0qIHByb2dyYW0sIHVuc2lnbmVkIGxvbmcg
aW5kZXgsIGNvbnN0IFN0cmluZyYgbmFtZSkKIHsKKyAgICBtX2ltcGwtPmJpbmRBdHRyaWJMb2Nh
dGlvbihFWFRSQUNUKHByb2dyYW0pLCBpbmRleCwgbmFtZS51dGY4KCkuZGF0YSgpKTsKIH0KIAot
UGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCBHcmFwaGljc0NvbnRleHQzRDo6cGxhdGZvcm1HcmFw
aGljc0NvbnRleHQzRCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1faW50ZXJuYWwtPnBsYXRmb3Jt
R3JhcGhpY3NDb250ZXh0M0QoKTsKLX0KK0RFTEVHQVRFX1RPX0lNUExfMl9YMihiaW5kQnVmZmVy
LCB1bnNpZ25lZCBsb25nLCBXZWJHTEJ1ZmZlciopCitERUxFR0FURV9UT19JTVBMXzJfWDIoYmlu
ZEZyYW1lYnVmZmVyLCB1bnNpZ25lZCBsb25nLCBXZWJHTEZyYW1lYnVmZmVyKikKK0RFTEVHQVRF
X1RPX0lNUExfMl9YMihiaW5kUmVuZGVyYnVmZmVyLCB1bnNpZ25lZCBsb25nLCBXZWJHTFJlbmRl
cmJ1ZmZlciopCiAKLVBsYXRmb3JtM0RPYmplY3QgR3JhcGhpY3NDb250ZXh0M0Q6OnBsYXRmb3Jt
VGV4dHVyZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1faW50ZXJuYWwtPnBsYXRmb3JtVGV4dHVy
ZSgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjptYWtlQ29udGV4dEN1cnJlbnQoKQot
ewotICAgIG1faW50ZXJuYWwtPm1ha2VDb250ZXh0Q3VycmVudCgpOwotfQorc3RhdGljIGNvbnN0
IGludCBrVGV4dHVyZVdyYXBSID0gMHg4MDcyOwogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpy
ZXNoYXBlKGludCB3aWR0aCwgaW50IGhlaWdodCkKKy8vIElmIHdlIGRpZG4ndCBoYXZlIHRvIGhh
Y2sgR0xfVEVYVFVSRV9XUkFQX1IgZm9yIGN1YmUgbWFwcywKKy8vIHdlIGNvdWxkIGp1c3QgdXNl
OgorLy8gREVMRUdBVEVfVE9fSU1QTF8yX1gyKGJpbmRUZXh0dXJlLCB1bnNpZ25lZCBsb25nLCBX
ZWJHTFRleHR1cmUqKQordm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpiaW5kVGV4dHVy
ZSh1bnNpZ25lZCBsb25nIHRhcmdldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgV2ViR0xUZXh0dXJlKiB0ZXh0dXJlKQogewotICAgIGlmICh3aWR0aCA9PSBt
X2N1cnJlbnRXaWR0aCAmJiBoZWlnaHQgPT0gbV9jdXJyZW50SGVpZ2h0KQotICAgICAgICByZXR1
cm47CisgICAgdW5zaWduZWQgaW50IHRleHR1cmVPYmplY3QgPSBFWFRSQUNUKHRleHR1cmUpOwog
Ci0gICAgbV9jdXJyZW50V2lkdGggPSB3aWR0aDsKLSAgICBtX2N1cnJlbnRIZWlnaHQgPSBoZWln
aHQ7CisgICAgbV9pbXBsLT5iaW5kVGV4dHVyZSh0YXJnZXQsIHRleHR1cmVPYmplY3QpOwogCi0g
ICAgbV9pbnRlcm5hbC0+cmVzaGFwZSh3aWR0aCwgaGVpZ2h0KTsKKyAgICAvLyBGSVhNRTogR0xf
VEVYVFVSRV9XUkFQX1IgaXNuJ3QgZXhwb3NlZCBpbiB0aGUgT3BlbkdMIEVTIDIuMAorICAgIC8v
IEFQSS4gT24gZGVza3RvcCBPcGVuR0wgaW1wbGVtZW50YXRpb25zIGl0IHNlZW1zIG5lY2Vzc2Fy
eSB0bworICAgIC8vIHNldCB0aGlzIHdyYXAgbW9kZSB0byBHTF9DTEFNUF9UT19FREdFIHRvIGdl
dCBjb3JyZWN0IGJlaGF2aW9yCisgICAgLy8gb2YgY3ViZSBtYXBzLgorICAgIGlmICh0ZXh0dXJl
KQorICAgICAgICBpZiAodGFyZ2V0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVf
TUFQKSB7CisgICAgICAgICAgICBpZiAoIXRleHR1cmUtPmlzQ3ViZU1hcFJXcmFwTW9kZUluaXRp
YWxpemVkKCkpIHsKKyAgICAgICAgICAgICAgICBtX2ltcGwtPnRleFBhcmFtZXRlcmkoR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVAsIGtUZXh0dXJlV3JhcFIsIEdyYXBoaWNzQ29u
dGV4dDNEOjpDTEFNUF9UT19FREdFKTsKKyAgICAgICAgICAgICAgICB0ZXh0dXJlLT5zZXRDdWJl
TWFwUldyYXBNb2RlSW5pdGlhbGl6ZWQodHJ1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0g
ZWxzZQorICAgICAgICAgICAgdGV4dHVyZS0+c2V0Q3ViZU1hcFJXcmFwTW9kZUluaXRpYWxpemVk
KGZhbHNlKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmVnaW5QYWludChXZWJHTFJl
bmRlcmluZ0NvbnRleHQqIGNvbnRleHQpCi17Ci0gICAgbV9pbnRlcm5hbC0+YmVnaW5QYWludChj
b250ZXh0KTsKLX0KK0RFTEVHQVRFX1RPX0lNUExfNChibGVuZENvbG9yLCBkb3VibGUsIGRvdWJs
ZSwgZG91YmxlLCBkb3VibGUpCitERUxFR0FURV9UT19JTVBMXzEoYmxlbmRFcXVhdGlvbiwgdW5z
aWduZWQgbG9uZykKK0RFTEVHQVRFX1RPX0lNUExfMihibGVuZEVxdWF0aW9uU2VwYXJhdGUsIHVu
c2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpCitERUxFR0FURV9UT19JTVBMXzIoYmxlbmRGdW5j
LCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKQorREVMRUdBVEVfVE9fSU1QTF80KGJsZW5k
RnVuY1NlcGFyYXRlLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25n
LCB1bnNpZ25lZCBsb25nKQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjplbmRQYWludCgpCit2
b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmJ1ZmZlckRhdGEodW5zaWduZWQgbG9uZyB0
YXJnZXQsIGludCBzaXplLCB1bnNpZ25lZCBsb25nIHVzYWdlKQogeworICAgIG1faW1wbC0+YnVm
ZmVyRGF0YSh0YXJnZXQsIHNpemUsIDAsIHVzYWdlKTsKIH0KIAotaW50IEdyYXBoaWNzQ29udGV4
dDNEOjpzaXplSW5CeXRlcyhpbnQgdHlwZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5h
bDo6YnVmZmVyRGF0YSh1bnNpZ25lZCBsb25nIHRhcmdldCwgV2ViR0xBcnJheSogYXJyYXksIHVu
c2lnbmVkIGxvbmcgdXNhZ2UpCiB7Ci0gICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBHTF9C
WVRFOgotICAgICAgICByZXR1cm4gc2l6ZW9mKEdMYnl0ZSk7Ci0gICAgY2FzZSBHTF9VTlNJR05F
RF9CWVRFOgotICAgICAgICByZXR1cm4gc2l6ZW9mKEdMdWJ5dGUpOwotICAgIGNhc2UgR0xfU0hP
UlQ6Ci0gICAgICAgIHJldHVybiBzaXplb2YoR0xzaG9ydCk7Ci0gICAgY2FzZSBHTF9VTlNJR05F
RF9TSE9SVDoKLSAgICAgICAgcmV0dXJuIHNpemVvZihHTHVzaG9ydCk7Ci0gICAgY2FzZSBHTF9J
TlQ6Ci0gICAgICAgIHJldHVybiBzaXplb2YoR0xpbnQpOwotICAgIGNhc2UgR0xfVU5TSUdORURf
SU5UOgotICAgICAgICByZXR1cm4gc2l6ZW9mKEdMdWludCk7Ci0gICAgY2FzZSBHTF9GTE9BVDoK
LSAgICAgICAgcmV0dXJuIHNpemVvZihHTGZsb2F0KTsKLSAgICBkZWZhdWx0OiAvLyBGSVhNRTog
ZGVmYXVsdCBjYXNlcyBhcmUgZGlzY291cmFnZWQgaW4gV2ViS2l0LgotICAgICAgICByZXR1cm4g
MDsKLSAgICB9CisgICAgbV9pbXBsLT5idWZmZXJEYXRhKHRhcmdldCwgYXJyYXktPmJ5dGVMZW5n
dGgoKSwgYXJyYXktPmJhc2VBZGRyZXNzKCksIHVzYWdlKTsKIH0KIAotdW5zaWduZWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OmNyZWF0ZUJ1ZmZlcigpCit2b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJu
YWw6OmJ1ZmZlclN1YkRhdGEodW5zaWduZWQgbG9uZyB0YXJnZXQsIGxvbmcgb2Zmc2V0LCBXZWJH
TEFycmF5KiBhcnJheSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBHTHVpbnQg
bzsKLSAgICBnbEdlbkJ1ZmZlcnMoMSwgJm8pOwotICAgIHJldHVybiBvOworICAgIG1faW1wbC0+
YnVmZmVyU3ViRGF0YSh0YXJnZXQsIG9mZnNldCwgYXJyYXktPmJ5dGVMZW5ndGgoKSwgYXJyYXkt
PmJhc2VBZGRyZXNzKCkpOwogfQogCi11bnNpZ25lZCBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRl
RnJhbWVidWZmZXIoKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIEdMdWludCBv
ID0gMDsKLSAgICBnbEdlbkZyYW1lYnVmZmVyc0VYVCgxLCAmbyk7Ci0gICAgcmV0dXJuIG87Ci19
CitERUxFR0FURV9UT19JTVBMXzFSKGNoZWNrRnJhbWVidWZmZXJTdGF0dXMsIHVuc2lnbmVkIGxv
bmcsIHVuc2lnbmVkIGxvbmcpCitERUxFR0FURV9UT19JTVBMXzEoY2xlYXIsIHVuc2lnbmVkIGxv
bmcpCitERUxFR0FURV9UT19JTVBMXzQoY2xlYXJDb2xvciwgZG91YmxlLCBkb3VibGUsIGRvdWJs
ZSwgZG91YmxlKQorREVMRUdBVEVfVE9fSU1QTF8xKGNsZWFyRGVwdGgsIGRvdWJsZSkKK0RFTEVH
QVRFX1RPX0lNUExfMShjbGVhclN0ZW5jaWwsIGxvbmcpCitERUxFR0FURV9UT19JTVBMXzQoY29s
b3JNYXNrLCBib29sLCBib29sLCBib29sLCBib29sKQorREVMRUdBVEVfVE9fSU1QTF8xX1goY29t
cGlsZVNoYWRlciwgV2ViR0xTaGFkZXIqKQogCi11bnNpZ25lZCBHcmFwaGljc0NvbnRleHQzRDo6
Y3JlYXRlUHJvZ3JhbSgpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgcmV0dXJu
IGdsQ3JlYXRlUHJvZ3JhbSgpOwotfQorREVMRUdBVEVfVE9fSU1QTF84KGNvcHlUZXhJbWFnZTJE
LCB1bnNpZ25lZCBsb25nLCBsb25nLCB1bnNpZ25lZCBsb25nLCBsb25nLCBsb25nLCB1bnNpZ25l
ZCBsb25nLCB1bnNpZ25lZCBsb25nLCBsb25nKQorREVMRUdBVEVfVE9fSU1QTF84KGNvcHlUZXhT
dWJJbWFnZTJELCB1bnNpZ25lZCBsb25nLCBsb25nLCBsb25nLCBsb25nLCBsb25nLCBsb25nLCB1
bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKQorREVMRUdBVEVfVE9fSU1QTF8xKGN1bGxGYWNl
LCB1bnNpZ25lZCBsb25nKQorREVMRUdBVEVfVE9fSU1QTF8xKGRlcHRoRnVuYywgdW5zaWduZWQg
bG9uZykKK0RFTEVHQVRFX1RPX0lNUExfMShkZXB0aE1hc2ssIGJvb2wpCitERUxFR0FURV9UT19J
TVBMXzIoZGVwdGhSYW5nZSwgZG91YmxlLCBkb3VibGUpCitERUxFR0FURV9UT19JTVBMXzJfWDEy
KGRldGFjaFNoYWRlciwgV2ViR0xQcm9ncmFtKiwgV2ViR0xTaGFkZXIqKQorREVMRUdBVEVfVE9f
SU1QTF8xKGRpc2FibGUsIHVuc2lnbmVkIGxvbmcpCitERUxFR0FURV9UT19JTVBMXzEoZGlzYWJs
ZVZlcnRleEF0dHJpYkFycmF5LCB1bnNpZ25lZCBsb25nKQorREVMRUdBVEVfVE9fSU1QTF8zKGRy
YXdBcnJheXMsIHVuc2lnbmVkIGxvbmcsIGxvbmcsIGxvbmcpCitERUxFR0FURV9UT19JTVBMXzQo
ZHJhd0VsZW1lbnRzLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25n
LCBsb25nKQogCi11bnNpZ25lZCBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlUmVuZGVyYnVmZmVy
KCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBHTHVpbnQgbzsKLSAgICBnbEdl
blJlbmRlcmJ1ZmZlcnNFWFQoMSwgJm8pOwotICAgIHJldHVybiBvOwotfQorREVMRUdBVEVfVE9f
SU1QTF8xKGVuYWJsZSwgdW5zaWduZWQgbG9uZykKK0RFTEVHQVRFX1RPX0lNUExfMShlbmFibGVW
ZXJ0ZXhBdHRyaWJBcnJheSwgdW5zaWduZWQgbG9uZykKK0RFTEVHQVRFX1RPX0lNUEwoZmluaXNo
KQorREVMRUdBVEVfVE9fSU1QTChmbHVzaCkKK0RFTEVHQVRFX1RPX0lNUExfNF9YNChmcmFtZWJ1
ZmZlclJlbmRlcmJ1ZmZlciwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQg
bG9uZywgV2ViR0xSZW5kZXJidWZmZXIqKQorREVMRUdBVEVfVE9fSU1QTF81X1g0KGZyYW1lYnVm
ZmVyVGV4dHVyZTJELCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25n
LCBXZWJHTFRleHR1cmUqLCBsb25nKQorREVMRUdBVEVfVE9fSU1QTF8xKGZyb250RmFjZSwgdW5z
aWduZWQgbG9uZykKK0RFTEVHQVRFX1RPX0lNUExfMShnZW5lcmF0ZU1pcG1hcCwgdW5zaWduZWQg
bG9uZykKIAotdW5zaWduZWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZVNoYWRlcih1bnNpZ25l
ZCBsb25nIHR5cGUpCitib29sIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmdldEFjdGl2ZUF0
dHJpYihXZWJHTFByb2dyYW0qIHByb2dyYW0sIHVuc2lnbmVkIGxvbmcgaW5kZXgsIEFjdGl2ZUlu
Zm8mIGluZm8pCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgcmV0dXJuIGdsQ3Jl
YXRlU2hhZGVyKCh0eXBlID09IEZSQUdNRU5UX1NIQURFUikgPyBHTF9GUkFHTUVOVF9TSEFERVIg
OiBHTF9WRVJURVhfU0hBREVSKTsKKyAgICBXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNEOjpB
Y3RpdmVJbmZvIHdlYkluZm87CisgICAgaWYgKCFtX2ltcGwtPmdldEFjdGl2ZUF0dHJpYihFWFRS
QUNUKHByb2dyYW0pLCBpbmRleCwgd2ViSW5mbykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICBpbmZvLm5hbWUgPSB3ZWJJbmZvLm5hbWU7CisgICAgaW5mby50eXBlID0gd2ViSW5mby50eXBl
OworICAgIGluZm8uc2l6ZSA9IHdlYkluZm8uc2l6ZTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAot
dW5zaWduZWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZVRleHR1cmUoKQorYm9vbCBHcmFwaGlj
c0NvbnRleHQzREludGVybmFsOjpnZXRBY3RpdmVVbmlmb3JtKFdlYkdMUHJvZ3JhbSogcHJvZ3Jh
bSwgdW5zaWduZWQgbG9uZyBpbmRleCwgQWN0aXZlSW5mbyYgaW5mbykKIHsKLSAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKLSAgICBHTHVpbnQgbzsKLSAgICBnbEdlblRleHR1cmVzKDEsICZvKTsK
LSAgICByZXR1cm4gbzsKKyAgICBXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNEOjpBY3RpdmVJ
bmZvIHdlYkluZm87CisgICAgaWYgKCFtX2ltcGwtPmdldEFjdGl2ZVVuaWZvcm0oRVhUUkFDVChw
cm9ncmFtKSwgaW5kZXgsIHdlYkluZm8pKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaW5m
by5uYW1lID0gd2ViSW5mby5uYW1lOworICAgIGluZm8udHlwZSA9IHdlYkluZm8udHlwZTsKKyAg
ICBpbmZvLnNpemUgPSB3ZWJJbmZvLnNpemU7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZUJ1ZmZlcih1bnNpZ25lZCBidWZmZXIpCitpbnQgR3Jh
cGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6Z2V0QXR0cmliTG9jYXRpb24oV2ViR0xQcm9ncmFtKiBw
cm9ncmFtLCBjb25zdCBTdHJpbmcmIG5hbWUpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
Ci0gICAgZ2xEZWxldGVCdWZmZXJzKDEsICZidWZmZXIpOworICAgIHJldHVybiBtX2ltcGwtPmdl
dEF0dHJpYkxvY2F0aW9uKEVYVFJBQ1QocHJvZ3JhbSksIG5hbWUudXRmOCgpLmRhdGEoKSk7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZUZyYW1lYnVmZmVyKHVuc2lnbmVkIGZy
YW1lYnVmZmVyKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsRGVsZXRlRnJh
bWVidWZmZXJzRVhUKDEsICZmcmFtZWJ1ZmZlcik7Ci19CitERUxFR0FURV9UT19JTVBMXzIoZ2V0
Qm9vbGVhbnYsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGNoYXIqKQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpkZWxldGVQcm9ncmFtKHVuc2lnbmVkIHByb2dyYW0pCi17Ci0gICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7Ci0gICAgZ2xEZWxldGVQcm9ncmFtKHByb2dyYW0pOwotfQorREVMRUdB
VEVfVE9fSU1QTF8zKGdldEJ1ZmZlclBhcmFtZXRlcml2LCB1bnNpZ25lZCBsb25nLCB1bnNpZ25l
ZCBsb25nLCBpbnQqKQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVSZW5kZXJidWZm
ZXIodW5zaWduZWQgcmVuZGVyYnVmZmVyKQorR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMg
R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6Z2V0Q29udGV4dEF0dHJpYnV0ZXMoKQogewotICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsRGVsZXRlUmVuZGVyYnVmZmVyc0VYVCgxLCAm
cmVuZGVyYnVmZmVyKTsKKyAgICBXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1
dGVzIHdlYkF0dHJpYnV0ZXMgPSBtX2ltcGwtPmdldENvbnRleHRBdHRyaWJ1dGVzKCk7CisgICAg
R3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cmlidXRlczsKKyAgICBhdHRyaWJ1dGVz
LmFscGhhID0gd2ViQXR0cmlidXRlcy5hbHBoYTsKKyAgICBhdHRyaWJ1dGVzLmRlcHRoID0gd2Vi
QXR0cmlidXRlcy5kZXB0aDsKKyAgICBhdHRyaWJ1dGVzLnN0ZW5jaWwgPSB3ZWJBdHRyaWJ1dGVz
LnN0ZW5jaWw7CisgICAgYXR0cmlidXRlcy5hbnRpYWxpYXMgPSB3ZWJBdHRyaWJ1dGVzLmFudGlh
bGlhczsKKyAgICBhdHRyaWJ1dGVzLnByZW11bHRpcGxpZWRBbHBoYSA9IHdlYkF0dHJpYnV0ZXMu
cHJlbXVsdGlwbGllZEFscGhhOworICAgIHJldHVybiBhdHRyaWJ1dGVzOwogfQogCi12b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjpkZWxldGVTaGFkZXIodW5zaWduZWQgc2hhZGVyKQotewotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsRGVsZXRlU2hhZGVyKHNoYWRlcik7Ci19CitERUxF
R0FURV9UT19JTVBMX1IoZ2V0RXJyb3IsIHVuc2lnbmVkIGxvbmcpCiAKLXZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OmRlbGV0ZVRleHR1cmUodW5zaWduZWQgdGV4dHVyZSkKLXsKLSAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKLSAgICBnbERlbGV0ZVRleHR1cmVzKDEsICZ0ZXh0dXJlKTsKLX0KK0RF
TEVHQVRFX1RPX0lNUExfMihnZXRGbG9hdHYsIHVuc2lnbmVkIGxvbmcsIGZsb2F0KikKIAotdm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6YWN0aXZlVGV4dHVyZSh1bnNpZ25lZCBsb25nIHRleHR1cmUp
Ci17Ci0gICAgbV9pbnRlcm5hbC0+YWN0aXZlVGV4dHVyZSh0ZXh0dXJlKTsKLX0KK0RFTEVHQVRF
X1RPX0lNUExfNChnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpdiwgdW5zaWduZWQg
bG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgaW50KikKIAotR0xfU0FNRV9NRVRI
T0RfMl9YMTIoQXR0YWNoU2hhZGVyLCBhdHRhY2hTaGFkZXIsIFdlYkdMUHJvZ3JhbSosIFdlYkdM
U2hhZGVyKikKK0RFTEVHQVRFX1RPX0lNUExfMihnZXRJbnRlZ2VydiwgdW5zaWduZWQgbG9uZywg
aW50KikKIAotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmluZEF0dHJpYkxvY2F0aW9uKFdlYkdM
UHJvZ3JhbSogcHJvZ3JhbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBsb25nIGluZGV4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgbmFtZSkKLXsKLSAgICBpZiAoIXByb2dyYW0pCi0g
ICAgICAgIHJldHVybjsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbEJpbmRBdHRy
aWJMb2NhdGlvbihFWFRSQUNUKHByb2dyYW0pLCBpbmRleCwgbmFtZS51dGY4KCkuZGF0YSgpKTsK
LX0KK0RFTEVHQVRFX1RPX0lNUExfM19YMShnZXRQcm9ncmFtaXYsIFdlYkdMUHJvZ3JhbSosIHVu
c2lnbmVkIGxvbmcsIGludCopCiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRCdWZmZXIo
dW5zaWduZWQgbG9uZyB0YXJnZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFdlYkdMQnVmZmVyKiBidWZmZXIpCitTdHJpbmcgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6
Z2V0UHJvZ3JhbUluZm9Mb2coV2ViR0xQcm9ncmFtKiBwcm9ncmFtKQogewotICAgIG1faW50ZXJu
YWwtPmJpbmRCdWZmZXIodGFyZ2V0LCBidWZmZXIpOworICAgIHJldHVybiBtX2ltcGwtPmdldFBy
b2dyYW1JbmZvTG9nKEVYVFJBQ1QocHJvZ3JhbSkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpiaW5kRnJhbWVidWZmZXIodW5zaWduZWQgbG9uZyB0YXJnZXQsIFdlYkdMRnJhbWVidWZm
ZXIqIGZyYW1lYnVmZmVyKQotewotICAgIG1faW50ZXJuYWwtPmJpbmRGcmFtZWJ1ZmZlcih0YXJn
ZXQsIGZyYW1lYnVmZmVyKTsKLX0KK0RFTEVHQVRFX1RPX0lNUExfMyhnZXRSZW5kZXJidWZmZXJQ
YXJhbWV0ZXJpdiwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgaW50KikKIAotR0xfU0FN
RV9NRVRIT0RfMl9YMihCaW5kUmVuZGVyYnVmZmVyRVhULCBiaW5kUmVuZGVyYnVmZmVyLCB1bnNp
Z25lZCBsb25nLCBXZWJHTFJlbmRlcmJ1ZmZlciopCitERUxFR0FURV9UT19JTVBMXzNfWDEoZ2V0
U2hhZGVyaXYsIFdlYkdMU2hhZGVyKiwgdW5zaWduZWQgbG9uZywgaW50KikKIAotLy8gSWYgd2Ug
ZGlkbid0IGhhdmUgdG8gaGFjayBHTF9URVhUVVJFX1dSQVBfUiBmb3IgY3ViZSBtYXBzLAotLy8g
d2UgY291bGQganVzdCB1c2U6Ci0vLyBHTF9TQU1FX01FVEhPRF8yX1gyKEJpbmRUZXh0dXJlLCBi
aW5kVGV4dHVyZSwgdW5zaWduZWQgbG9uZywgV2ViR0xUZXh0dXJlKikKLXZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OmJpbmRUZXh0dXJlKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgV2ViR0xUZXh0dXJlKiB0ZXh0dXJlKQorU3RyaW5nIEdy
YXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmdldFNoYWRlckluZm9Mb2coV2ViR0xTaGFkZXIqIHNo
YWRlcikKIHsKLSAgICBtX2ludGVybmFsLT5iaW5kVGV4dHVyZSh0YXJnZXQsIHRleHR1cmUpOwor
ICAgIHJldHVybiBtX2ltcGwtPmdldFNoYWRlckluZm9Mb2coRVhUUkFDVChzaGFkZXIpKTsKIH0K
IAotR0xfU0FNRV9NRVRIT0RfNChCbGVuZENvbG9yLCBibGVuZENvbG9yLCBkb3VibGUsIGRvdWJs
ZSwgZG91YmxlLCBkb3VibGUpCi0KLUdMX1NBTUVfTUVUSE9EXzEoQmxlbmRFcXVhdGlvbiwgYmxl
bmRFcXVhdGlvbiwgdW5zaWduZWQgbG9uZykKLQotR0xfU0FNRV9NRVRIT0RfMihCbGVuZEVxdWF0
aW9uU2VwYXJhdGUsIGJsZW5kRXF1YXRpb25TZXBhcmF0ZSwgdW5zaWduZWQgbG9uZywgdW5zaWdu
ZWQgbG9uZykKLQotR0xfU0FNRV9NRVRIT0RfMihCbGVuZEZ1bmMsIGJsZW5kRnVuYywgdW5zaWdu
ZWQgbG9uZywgdW5zaWduZWQgbG9uZykKLQotR0xfU0FNRV9NRVRIT0RfNChCbGVuZEZ1bmNTZXBh
cmF0ZSwgYmxlbmRGdW5jU2VwYXJhdGUsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVu
c2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpCi0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJ1
ZmZlckRhdGEodW5zaWduZWQgbG9uZyB0YXJnZXQsIGludCBzaXplLCB1bnNpZ25lZCBsb25nIHVz
YWdlKQorU3RyaW5nIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmdldFNoYWRlclNvdXJjZShX
ZWJHTFNoYWRlciogc2hhZGVyKQogewotICAgIG1faW50ZXJuYWwtPmJ1ZmZlckRhdGFJbXBsKHRh
cmdldCwgc2l6ZSwgMCwgdXNhZ2UpOworICAgIHJldHVybiBtX2ltcGwtPmdldFNoYWRlclNvdXJj
ZShFWFRSQUNUKHNoYWRlcikpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpidWZmZXJE
YXRhKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBXZWJHTEFycmF5KiBhcnJheSwgdW5zaWduZWQgbG9u
ZyB1c2FnZSkKK1N0cmluZyBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpnZXRTdHJpbmcodW5z
aWduZWQgbG9uZyBuYW1lKQogewotICAgIG1faW50ZXJuYWwtPmJ1ZmZlckRhdGFJbXBsKHRhcmdl
dCwgYXJyYXktPmJ5dGVMZW5ndGgoKSwgYXJyYXktPmJhc2VBZGRyZXNzKCksIHVzYWdlKTsKKyAg
ICByZXR1cm4gbV9pbXBsLT5nZXRTdHJpbmcobmFtZSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OmJ1ZmZlclN1YkRhdGEodW5zaWduZWQgbG9uZyB0YXJnZXQsIGxvbmcgb2Zmc2V0LCBX
ZWJHTEFycmF5KiBhcnJheSkKLXsKLSAgICBpZiAoIWFycmF5IHx8ICFhcnJheS0+bGVuZ3RoKCkp
Ci0gICAgICAgIHJldHVybjsKK0RFTEVHQVRFX1RPX0lNUExfMyhnZXRUZXhQYXJhbWV0ZXJmdiwg
dW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgZmxvYXQqKQorREVMRUdBVEVfVE9fSU1QTF8z
KGdldFRleFBhcmFtZXRlcml2LCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCBpbnQqKQog
Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgLy8gRklYTUU6IG1ha2UgdGhpcyB2ZXJp
ZmljYXRpb24gbW9yZSBlZmZpY2llbnQuCi0gICAgR0xpbnQgYmluZGluZyA9IDA7Ci0gICAgR0xl
bnVtIGJpbmRpbmdfdGFyZ2V0ID0gR0xfQVJSQVlfQlVGRkVSX0JJTkRJTkc7Ci0gICAgaWYgKHRh
cmdldCA9PSBHTF9FTEVNRU5UX0FSUkFZX0JVRkZFUikKLSAgICAgICAgYmluZGluZ190YXJnZXQg
PSBHTF9FTEVNRU5UX0FSUkFZX0JVRkZFUl9CSU5ESU5HOwotICAgIGdsR2V0SW50ZWdlcnYoYmlu
ZGluZ190YXJnZXQsICZiaW5kaW5nKTsKLSAgICBpZiAoYmluZGluZyA8PSAwKSB7Ci0gICAgICAg
IC8vIEZJWE1FOiByYWlzZSBleGNlcHRpb24uCi0gICAgICAgIC8vIExvZ01lc3NhZ2VmKCgiYnVm
ZmVyU3ViRGF0YTogbm8gYnVmZmVyIGJvdW5kIikpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
ICAgIGdsQnVmZmVyU3ViRGF0YSh0YXJnZXQsIG9mZnNldCwgYXJyYXktPmJ5dGVMZW5ndGgoKSwg
YXJyYXktPmJhc2VBZGRyZXNzKCkpOwotfQorREVMRUdBVEVfVE9fSU1QTF8zX1gxKGdldFVuaWZv
cm1mdiwgV2ViR0xQcm9ncmFtKiwgbG9uZywgZmxvYXQqKQorREVMRUdBVEVfVE9fSU1QTF8zX1gx
KGdldFVuaWZvcm1pdiwgV2ViR0xQcm9ncmFtKiwgbG9uZywgaW50KikKIAotdW5zaWduZWQgbG9u
ZyBHcmFwaGljc0NvbnRleHQzRDo6Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyh1bnNpZ25lZCBsb25n
IHRhcmdldCkKK2xvbmcgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6Z2V0VW5pZm9ybUxvY2F0
aW9uKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lKQogewotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOwotICAgIHJldHVybiBnbENoZWNrRnJhbWVidWZmZXJTdGF0dXNF
WFQodGFyZ2V0KTsKKyAgICByZXR1cm4gbV9pbXBsLT5nZXRVbmlmb3JtTG9jYXRpb24oRVhUUkFD
VChwcm9ncmFtKSwgbmFtZS51dGY4KCkuZGF0YSgpKTsKIH0KIAotR0xfU0FNRV9NRVRIT0RfMShD
bGVhciwgY2xlYXIsIHVuc2lnbmVkIGxvbmcpCi0KLUdMX1NBTUVfTUVUSE9EXzQoQ2xlYXJDb2xv
ciwgY2xlYXJDb2xvciwgZG91YmxlLCBkb3VibGUsIGRvdWJsZSwgZG91YmxlKQotCi1HTF9TQU1F
X01FVEhPRF8xKENsZWFyRGVwdGgsIGNsZWFyRGVwdGgsIGRvdWJsZSkKLQotR0xfU0FNRV9NRVRI
T0RfMShDbGVhclN0ZW5jaWwsIGNsZWFyU3RlbmNpbCwgbG9uZykKLQotR0xfU0FNRV9NRVRIT0Rf
NChDb2xvck1hc2ssIGNvbG9yTWFzaywgYm9vbCwgYm9vbCwgYm9vbCwgYm9vbCkKLQotR0xfU0FN
RV9NRVRIT0RfMV9YKENvbXBpbGVTaGFkZXIsIGNvbXBpbGVTaGFkZXIsIFdlYkdMU2hhZGVyKikK
LQotR0xfU0FNRV9NRVRIT0RfOChDb3B5VGV4SW1hZ2UyRCwgY29weVRleEltYWdlMkQsIHVuc2ln
bmVkIGxvbmcsIGxvbmcsIHVuc2lnbmVkIGxvbmcsIGxvbmcsIGxvbmcsIHVuc2lnbmVkIGxvbmcs
IHVuc2lnbmVkIGxvbmcsIGxvbmcpCi0KLUdMX1NBTUVfTUVUSE9EXzgoQ29weVRleFN1YkltYWdl
MkQsIGNvcHlUZXhTdWJJbWFnZTJELCB1bnNpZ25lZCBsb25nLCBsb25nLCBsb25nLCBsb25nLCBs
b25nLCBsb25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKQorREVMRUdBVEVfVE9fSU1Q
TF8zKGdldFZlcnRleEF0dHJpYmZ2LCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCBmbG9h
dCopCitERUxFR0FURV9UT19JTVBMXzMoZ2V0VmVydGV4QXR0cmliaXYsIHVuc2lnbmVkIGxvbmcs
IHVuc2lnbmVkIGxvbmcsIGludCopCiAKLUdMX1NBTUVfTUVUSE9EXzEoQ3VsbEZhY2UsIGN1bGxG
YWNlLCB1bnNpZ25lZCBsb25nKQorREVMRUdBVEVfVE9fSU1QTF8yUihnZXRWZXJ0ZXhBdHRyaWJP
ZmZzZXQsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIGxvbmcpCiAKLUdMX1NBTUVfTUVU
SE9EXzEoRGVwdGhGdW5jLCBkZXB0aEZ1bmMsIHVuc2lnbmVkIGxvbmcpCitERUxFR0FURV9UT19J
TVBMXzIoaGludCwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZykKK0RFTEVHQVRFX1RPX0lN
UExfMVJfWChpc0J1ZmZlciwgV2ViR0xCdWZmZXIqLCBib29sKQorREVMRUdBVEVfVE9fSU1QTF8x
Uihpc0VuYWJsZWQsIHVuc2lnbmVkIGxvbmcsIGJvb2wpCitERUxFR0FURV9UT19JTVBMXzFSX1go
aXNGcmFtZWJ1ZmZlciwgV2ViR0xGcmFtZWJ1ZmZlciosIGJvb2wpCitERUxFR0FURV9UT19JTVBM
XzFSX1goaXNQcm9ncmFtLCBXZWJHTFByb2dyYW0qLCBib29sKQorREVMRUdBVEVfVE9fSU1QTF8x
Ul9YKGlzUmVuZGVyYnVmZmVyLCBXZWJHTFJlbmRlcmJ1ZmZlciosIGJvb2wpCitERUxFR0FURV9U
T19JTVBMXzFSX1goaXNTaGFkZXIsIFdlYkdMU2hhZGVyKiwgYm9vbCkKK0RFTEVHQVRFX1RPX0lN
UExfMVJfWChpc1RleHR1cmUsIFdlYkdMVGV4dHVyZSosIGJvb2wpCitERUxFR0FURV9UT19JTVBM
XzEobGluZVdpZHRoLCBkb3VibGUpCitERUxFR0FURV9UT19JTVBMXzFfWChsaW5rUHJvZ3JhbSwg
V2ViR0xQcm9ncmFtKikKK0RFTEVHQVRFX1RPX0lNUExfMihwaXhlbFN0b3JlaSwgdW5zaWduZWQg
bG9uZywgbG9uZykKK0RFTEVHQVRFX1RPX0lNUExfMihwb2x5Z29uT2Zmc2V0LCBkb3VibGUsIGRv
dWJsZSkKIAotR0xfU0FNRV9NRVRIT0RfMShEZXB0aE1hc2ssIGRlcHRoTWFzaywgYm9vbCkKLQot
R0xfU0FNRV9NRVRIT0RfMihEZXB0aFJhbmdlLCBkZXB0aFJhbmdlLCBkb3VibGUsIGRvdWJsZSkK
LQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGV0YWNoU2hhZGVyKFdlYkdMUHJvZ3JhbSogcHJv
Z3JhbSwgV2ViR0xTaGFkZXIqIHNoYWRlcikKK1Bhc3NSZWZQdHI8V2ViR0xBcnJheT4gR3JhcGhp
Y3NDb250ZXh0M0RJbnRlcm5hbDo6cmVhZFBpeGVscyhsb25nIHgsIGxvbmcgeSwgdW5zaWduZWQg
bG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQsIHVuc2lnbmVkIGxvbmcgZm9ybWF0LCB1
bnNpZ25lZCBsb25nIHR5cGUpCiB7Ci0gICAgaWYgKCFwcm9ncmFtIHx8ICFzaGFkZXIpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsRGV0YWNoU2hh
ZGVyKEVYVFJBQ1QocHJvZ3JhbSksIEVYVFJBQ1Qoc2hhZGVyKSk7CisgICAgLy8gRklYTUU6IHRh
a2UgaW50byBhY2NvdW50IHBhY2sgYWxpZ25tZW50LgorICAgIFJlZlB0cjxXZWJHTFVuc2lnbmVk
Qnl0ZUFycmF5PiBhcnJheSA9IFdlYkdMVW5zaWduZWRCeXRlQXJyYXk6OmNyZWF0ZSh3aWR0aCAq
IGhlaWdodCAqIDQpOworICAgIG1faW1wbC0+cmVhZFBpeGVscyh4LCB5LCB3aWR0aCwgaGVpZ2h0
LCBmb3JtYXQsIHR5cGUsIGFycmF5LT5iYXNlQWRkcmVzcygpKTsKKyAgICByZXR1cm4gYXJyYXk7
CiB9CiAKLUdMX1NBTUVfTUVUSE9EXzEoRGlzYWJsZSwgZGlzYWJsZSwgdW5zaWduZWQgbG9uZykK
K0RFTEVHQVRFX1RPX0lNUEwocmVsZWFzZVNoYWRlckNvbXBpbGVyKQorREVMRUdBVEVfVE9fSU1Q
TF80KHJlbmRlcmJ1ZmZlclN0b3JhZ2UsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVu
c2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpCitERUxFR0FURV9UT19JTVBMXzIoc2FtcGxlQ292
ZXJhZ2UsIGRvdWJsZSwgYm9vbCkKK0RFTEVHQVRFX1RPX0lNUExfNChzY2lzc29yLCBsb25nLCBs
b25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpkaXNhYmxlVmVydGV4QXR0cmliQXJyYXkodW5zaWduZWQgbG9uZyBpbmRleCkKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6c2hhZGVyU291cmNlKFdlYkdMU2hhZGVyKiBzaGFk
ZXIsIGNvbnN0IFN0cmluZyYgc3RyaW5nKQogewotICAgIG1faW50ZXJuYWwtPmRpc2FibGVWZXJ0
ZXhBdHRyaWJBcnJheShpbmRleCk7CisgICAgbV9pbXBsLT5zaGFkZXJTb3VyY2UoRVhUUkFDVChz
aGFkZXIpLCBzdHJpbmcudXRmOCgpLmRhdGEoKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OmRyYXdBcnJheXModW5zaWduZWQgbG9uZyBtb2RlLCBsb25nIGZpcnN0LCBsb25nIGNvdW50
KQotewotICAgIHN3aXRjaCAobW9kZSkgewotICAgIGNhc2UgR0xfVFJJQU5HTEVTOgotICAgIGNh
c2UgR0xfVFJJQU5HTEVfU1RSSVA6Ci0gICAgY2FzZSBHTF9UUklBTkdMRV9GQU46Ci0gICAgY2Fz
ZSBHTF9QT0lOVFM6Ci0gICAgY2FzZSBHTF9MSU5FX1NUUklQOgotICAgIGNhc2UgR0xfTElORV9M
T09QOgotICAgIGNhc2UgR0xfTElORVM6Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6IC8v
IEZJWE1FOiBkZWZhdWx0IGNhc2VzIGFyZSBkaXNjb3VyYWdlZCBpbiBXZWJLaXQuCi0gICAgICAg
IC8vIEZJWE1FOiBvdXRwdXQgbG9nIG1lc3NhZ2UsIHJhaXNlIGV4Y2VwdGlvbi4KLSAgICAgICAg
Ly8gTG9nTWVzc2FnZShOU19MSVRFUkFMX0NTVFJJTkcoImRyYXdBcnJheXM6IGludmFsaWQgbW9k
ZSIpKTsKLSAgICAgICAgLy8gcmV0dXJuIE5TX0VSUk9SX0RPTV9TWU5UQVhfRVJSOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKGZpcnN0K2NvdW50IDwgZmlyc3QgfHwgZmlyc3Qr
Y291bnQgPCBjb3VudCkgewotICAgICAgICAvLyBGSVhNRTogb3V0cHV0IGxvZyBtZXNzYWdlLCBy
YWlzZSBleGNlcHRpb24uCi0gICAgICAgIC8vIExvZ01lc3NhZ2UoTlNfTElURVJBTF9DU1RSSU5H
KCJkcmF3QXJyYXlzOiBvdmVyZmxvdyBpbiBmaXJzdCtjb3VudCIpKTsKLSAgICAgICAgLy8gcmV0
dXJuIE5TX0VSUk9SX0lOVkFMSURfQVJHOwotICAgICAgICByZXR1cm47Ci0gICAgfQorREVMRUdB
VEVfVE9fSU1QTF8zKHN0ZW5jaWxGdW5jLCB1bnNpZ25lZCBsb25nLCBsb25nLCB1bnNpZ25lZCBs
b25nKQorREVMRUdBVEVfVE9fSU1QTF80KHN0ZW5jaWxGdW5jU2VwYXJhdGUsIHVuc2lnbmVkIGxv
bmcsIHVuc2lnbmVkIGxvbmcsIGxvbmcsIHVuc2lnbmVkIGxvbmcpCitERUxFR0FURV9UT19JTVBM
XzEoc3RlbmNpbE1hc2ssIHVuc2lnbmVkIGxvbmcpCitERUxFR0FURV9UT19JTVBMXzIoc3RlbmNp
bE1hc2tTZXBhcmF0ZSwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZykKK0RFTEVHQVRFX1RP
X0lNUExfMyhzdGVuY2lsT3AsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVk
IGxvbmcpCitERUxFR0FURV9UT19JTVBMXzQoc3RlbmNpbE9wU2VwYXJhdGUsIHVuc2lnbmVkIGxv
bmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpCiAKLSAgICAv
LyBGSVhNRTogdmFsaWRhdGUgYWdhaW5zdCBjdXJyZW50bHkgYm91bmQgYnVmZmVyLgotICAgIC8v
IGlmICghVmFsaWRhdGVCdWZmZXJzKGZpcnN0K2NvdW50KSkKLSAgICAvLyAgICAgcmV0dXJuIE5T
X0VSUk9SX0lOVkFMSURfQVJHOwotCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2xE
cmF3QXJyYXlzKG1vZGUsIGZpcnN0LCBjb3VudCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OmRyYXdFbGVtZW50cyh1bnNpZ25lZCBsb25nIG1vZGUsIHVuc2lnbmVkIGxvbmcgY291bnQs
IHVuc2lnbmVkIGxvbmcgdHlwZSwgbG9uZyBvZmZzZXQpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7Ci0gICAgLy8gRklYTUU6IG1ha2UgdGhpcyB2ZXJpZmljYXRpb24gbW9yZSBlZmZpY2ll
bnQuCi0gICAgR0xpbnQgYmluZGluZyA9IDA7Ci0gICAgR0xlbnVtIGJpbmRpbmdfdGFyZ2V0ID0g
R0xfRUxFTUVOVF9BUlJBWV9CVUZGRVJfQklORElORzsKLSAgICBnbEdldEludGVnZXJ2KGJpbmRp
bmdfdGFyZ2V0LCAmYmluZGluZyk7Ci0gICAgaWYgKGJpbmRpbmcgPD0gMCkgewotICAgICAgICAv
LyBGSVhNRTogcmFpc2UgZXhjZXB0aW9uLgotICAgICAgICAvLyBMb2dNZXNzYWdlZigoImJ1ZmZl
ckRhdGE6IG5vIGJ1ZmZlciBib3VuZCIpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBn
bERyYXdFbGVtZW50cyhtb2RlLCBjb3VudCwgdHlwZSwKLSAgICAgICAgICAgICAgICAgICByZWlu
dGVycHJldF9jYXN0PHZvaWQqPihzdGF0aWNfY2FzdDxpbnRwdHJfdD4ob2Zmc2V0KSkpOworaW50
IEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OnRleEltYWdlMkQodW5zaWduZWQgdGFyZ2V0LCB1
bnNpZ25lZCBsZXZlbCwgdW5zaWduZWQgaW50ZXJuYWxmb3JtYXQsIHVuc2lnbmVkIHdpZHRoLCB1
bnNpZ25lZCBoZWlnaHQsIHVuc2lnbmVkIGJvcmRlciwgdW5zaWduZWQgZm9ybWF0LCB1bnNpZ25l
ZCB0eXBlLCB2b2lkKiBwaXhlbHMpCit7CisgICAgbV9pbXBsLT50ZXhJbWFnZTJEKHRhcmdldCwg
bGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGZvcm1hdCwgdHlw
ZSwgcGl4ZWxzKTsKKyAgICByZXR1cm4gMDsKIH0KIAotR0xfU0FNRV9NRVRIT0RfMShFbmFibGUs
IGVuYWJsZSwgdW5zaWduZWQgbG9uZykKK0RFTEVHQVRFX1RPX0lNUExfMyh0ZXhQYXJhbWV0ZXJm
LCB1bnNpZ25lZCwgdW5zaWduZWQsIGZsb2F0KQorREVMRUdBVEVfVE9fSU1QTF8zKHRleFBhcmFt
ZXRlcmksIHVuc2lnbmVkLCB1bnNpZ25lZCwgaW50KQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNE
OjplbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSh1bnNpZ25lZCBsb25nIGluZGV4KQoraW50IEdyYXBo
aWNzQ29udGV4dDNESW50ZXJuYWw6OnRleFN1YkltYWdlMkQodW5zaWduZWQgdGFyZ2V0LCB1bnNp
Z25lZCBsZXZlbCwgdW5zaWduZWQgeG9mZnNldCwgdW5zaWduZWQgeW9mZnNldCwgdW5zaWduZWQg
d2lkdGgsIHVuc2lnbmVkIGhlaWdodCwgdW5zaWduZWQgZm9ybWF0LCB1bnNpZ25lZCB0eXBlLCB2
b2lkKiBwaXhlbHMpCiB7Ci0gICAgbV9pbnRlcm5hbC0+ZW5hYmxlVmVydGV4QXR0cmliQXJyYXko
aW5kZXgpOworICAgIG1faW1wbC0+dGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0
LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHBpeGVscyk7CisgICAgcmV0
dXJuIDA7CiB9CiAKLUdMX1NBTUVfTUVUSE9EXzAoRmluaXNoLCBmaW5pc2gpCi0KLUdMX1NBTUVf
TUVUSE9EXzAoRmx1c2gsIGZsdXNoKQotCi1HTF9TQU1FX01FVEhPRF80X1g0KEZyYW1lYnVmZmVy
UmVuZGVyYnVmZmVyRVhULCBmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlciwgdW5zaWduZWQgbG9uZywg
dW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgV2ViR0xSZW5kZXJidWZmZXIqKQorREVMRUdB
VEVfVE9fSU1QTF8yKHVuaWZvcm0xZiwgbG9uZywgZmxvYXQpCiAKLUdMX1NBTUVfTUVUSE9EXzVf
WDQoRnJhbWVidWZmZXJUZXh0dXJlMkRFWFQsIGZyYW1lYnVmZmVyVGV4dHVyZTJELCB1bnNpZ25l
ZCBsb25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCBXZWJHTFRleHR1cmUqLCBsb25n
KQotCi1HTF9TQU1FX01FVEhPRF8xKEZyb250RmFjZSwgZnJvbnRGYWNlLCB1bnNpZ25lZCBsb25n
KQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZW5lcmF0ZU1pcG1hcCh1bnNpZ25lZCBsb25n
IHRhcmdldCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6dW5pZm9ybTFmdihsb25n
IGxvY2F0aW9uLCBmbG9hdCogdiwgaW50IHNpemUpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7Ci0gICAgaWYgKGdsR2VuZXJhdGVNaXBtYXBFWFQpCi0gICAgICAgIGdsR2VuZXJhdGVNaXBt
YXBFWFQodGFyZ2V0KTsKLSAgICAvLyBGSVhNRTogcHJvdmlkZSBhbHRlcm5hdGl2ZSBjb2RlIHBh
dGg/IFRoaXMgd2lsbCBiZSB1bnBsZWFzYW50Ci0gICAgLy8gdG8gaW1wbGVtZW50IGlmIGdsR2Vu
ZXJhdGVNaXBtYXBFWFQgaXMgbm90IGF2YWlsYWJsZSAtLSBpdCB3aWxsCi0gICAgLy8gcmVxdWly
ZSBhIHRleHR1cmUgcmVhZGJhY2sgYW5kIHJlLXVwbG9hZC4KKyAgICBtX2ltcGwtPnVuaWZvcm0x
ZnYobG9jYXRpb24sIHNpemUsIHYpOwogfQogCi1ib29sIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRB
Y3RpdmVBdHRyaWIoV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCB1bnNpZ25lZCBsb25nIGluZGV4LCBB
Y3RpdmVJbmZvJiBpbmZvKQotewotICAgIGlmICghcHJvZ3JhbSkgewotICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihJTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LSAgICBHTGludCBtYXhOYW1lTGVuZ3RoID0gLTE7Ci0gICAgZ2xHZXRQcm9ncmFtaXYoRVhUUkFD
VChwcm9ncmFtKSwgR0xfQUNUSVZFX0FUVFJJQlVURV9NQVhfTEVOR1RILCAmbWF4TmFtZUxlbmd0
aCk7Ci0gICAgaWYgKG1heE5hbWVMZW5ndGggPCAwKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgR0xjaGFyKiBuYW1lID0gMDsKLSAgICBpZiAoIXRyeUZhc3RNYWxsb2MobWF4TmFtZUxlbmd0
aCAqIHNpemVvZihHTGNoYXIpKS5nZXRWYWx1ZShuYW1lKSkgewotICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihPVVRfT0ZfTUVNT1JZKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAg
ICBHTHNpemVpIGxlbmd0aCA9IDA7Ci0gICAgR0xpbnQgc2l6ZSA9IC0xOwotICAgIEdMZW51bSB0
eXBlID0gMDsKLSAgICBnbEdldEFjdGl2ZUF0dHJpYihFWFRSQUNUKHByb2dyYW0pLCBpbmRleCwg
bWF4TmFtZUxlbmd0aCwKLSAgICAgICAgICAgICAgICAgICAgICAmbGVuZ3RoLCAmc2l6ZSwgJnR5
cGUsIG5hbWUpOwotICAgIGlmIChzaXplIDwgMCkgewotICAgICAgICBmYXN0RnJlZShuYW1lKTsK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBpbmZvLm5hbWUgPSBTdHJpbmcobmFt
ZSwgbGVuZ3RoKTsKLSAgICBpbmZvLnR5cGUgPSB0eXBlOwotICAgIGluZm8uc2l6ZSA9IHNpemU7
Ci0gICAgZmFzdEZyZWUobmFtZSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19CitERUxFR0FURV9UT19J
TVBMXzIodW5pZm9ybTFpLCBsb25nLCBpbnQpCiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6Omdl
dEFjdGl2ZVVuaWZvcm0oV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCB1bnNpZ25lZCBsb25nIGluZGV4
LCBBY3RpdmVJbmZvJiBpbmZvKQordm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjp1bmlm
b3JtMWl2KGxvbmcgbG9jYXRpb24sIGludCogdiwgaW50IHNpemUpCiB7Ci0gICAgaWYgKCFwcm9n
cmFtKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKElOVkFMSURfVkFMVUUpOwotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIEdMaW50IG1heE5hbWVMZW5ndGggPSAtMTsKLSAg
ICBnbEdldFByb2dyYW1pdihFWFRSQUNUKHByb2dyYW0pLCBHTF9BQ1RJVkVfVU5JRk9STV9NQVhf
TEVOR1RILCAmbWF4TmFtZUxlbmd0aCk7Ci0gICAgaWYgKG1heE5hbWVMZW5ndGggPCAwKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgR0xjaGFyKiBuYW1lID0gMDsKLSAgICBpZiAoIXRyeUZh
c3RNYWxsb2MobWF4TmFtZUxlbmd0aCAqIHNpemVvZihHTGNoYXIpKS5nZXRWYWx1ZShuYW1lKSkg
ewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihPVVRfT0ZfTUVNT1JZKTsKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLSAgICBHTHNpemVpIGxlbmd0aCA9IDA7Ci0gICAgR0xpbnQgc2l6
ZSA9IC0xOwotICAgIEdMZW51bSB0eXBlID0gMDsKLSAgICBnbEdldEFjdGl2ZVVuaWZvcm0oRVhU
UkFDVChwcm9ncmFtKSwgaW5kZXgsIG1heE5hbWVMZW5ndGgsCi0gICAgICAgICAgICAgICAgICAg
ICAgICZsZW5ndGgsICZzaXplLCAmdHlwZSwgbmFtZSk7Ci0gICAgaWYgKHNpemUgPCAwKSB7Ci0g
ICAgICAgIGZhc3RGcmVlKG5hbWUpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAg
IGluZm8ubmFtZSA9IFN0cmluZyhuYW1lLCBsZW5ndGgpOwotICAgIGluZm8udHlwZSA9IHR5cGU7
Ci0gICAgaW5mby5zaXplID0gc2l6ZTsKLSAgICBmYXN0RnJlZShuYW1lKTsKLSAgICByZXR1cm4g
dHJ1ZTsKKyAgICBtX2ltcGwtPnVuaWZvcm0xaXYobG9jYXRpb24sIHNpemUsIHYpOwogfQogCi1p
bnQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEF0dHJpYkxvY2F0aW9uKFdlYkdMUHJvZ3JhbSogcHJv
Z3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lKQotewotICAgIGlmICghcHJvZ3JhbSkKLSAgICAgICAg
cmV0dXJuIC0xOwotCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgcmV0dXJuIGdsR2V0
QXR0cmliTG9jYXRpb24oRVhUUkFDVChwcm9ncmFtKSwgbmFtZS51dGY4KCkuZGF0YSgpKTsKLX0K
K0RFTEVHQVRFX1RPX0lNUExfMyh1bmlmb3JtMmYsIGxvbmcsIGZsb2F0LCBmbG9hdCkKIAotdm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0Qm9vbGVhbnYodW5zaWduZWQgbG9uZyBwbmFtZSwgdW5z
aWduZWQgY2hhciogdmFsdWUpCit2b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OnVuaWZv
cm0yZnYobG9uZyBsb2NhdGlvbiwgZmxvYXQqIHYsIGludCBzaXplKQogewotICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOwotICAgIGdsR2V0Qm9vbGVhbnYocG5hbWUsIHZhbHVlKTsKKyAgICBtX2lt
cGwtPnVuaWZvcm0yZnYobG9jYXRpb24sIHNpemUsIHYpOwogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjpnZXRCdWZmZXJQYXJhbWV0ZXJpdih1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWdu
ZWQgbG9uZyBwbmFtZSwgaW50KiB2YWx1ZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
LSAgICBnbEdldEJ1ZmZlclBhcmFtZXRlcml2KHRhcmdldCwgcG5hbWUsIHZhbHVlKTsKLX0KK0RF
TEVHQVRFX1RPX0lNUExfMyh1bmlmb3JtMmksIGxvbmcsIGludCwgaW50KQogCi1HcmFwaGljc0Nv
bnRleHQzRDo6QXR0cmlidXRlcyBHcmFwaGljc0NvbnRleHQzRDo6Z2V0Q29udGV4dEF0dHJpYnV0
ZXMoKQordm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjp1bmlmb3JtMml2KGxvbmcgbG9j
YXRpb24sIGludCogdiwgaW50IHNpemUpCiB7Ci0gICAgcmV0dXJuIG1faW50ZXJuYWwtPmdldENv
bnRleHRBdHRyaWJ1dGVzKCk7CisgICAgbV9pbXBsLT51bmlmb3JtMml2KGxvY2F0aW9uLCBzaXpl
LCB2KTsKIH0KIAotdW5zaWduZWQgbG9uZyBHcmFwaGljc0NvbnRleHQzRDo6Z2V0RXJyb3IoKQot
ewotICAgIHJldHVybiBtX2ludGVybmFsLT5nZXRFcnJvcigpOwotfQorREVMRUdBVEVfVE9fSU1Q
TF80KHVuaWZvcm0zZiwgbG9uZywgZmxvYXQsIGZsb2F0LCBmbG9hdCkKIAotdm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6Z2V0RmxvYXR2KHVuc2lnbmVkIGxvbmcgcG5hbWUsIGZsb2F0KiB2YWx1ZSkK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6dW5pZm9ybTNmdihsb25nIGxvY2F0aW9u
LCBmbG9hdCogdiwgaW50IHNpemUpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAg
Z2xHZXRGbG9hdHYocG5hbWUsIHZhbHVlKTsKKyAgICBtX2ltcGwtPnVuaWZvcm0zZnYobG9jYXRp
b24sIHNpemUsIHYpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRGcmFtZWJ1ZmZl
ckF0dGFjaG1lbnRQYXJhbWV0ZXJpdih1bnNpZ25lZCBsb25nIHRhcmdldCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk
IGxvbmcgYXR0YWNobWVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgcG5hbWUsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQqIHZhbHVl
KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsR2V0RnJhbWVidWZmZXJBdHRh
Y2htZW50UGFyYW1ldGVyaXZFWFQodGFyZ2V0LCBhdHRhY2htZW50LCBwbmFtZSwgdmFsdWUpOwot
fQorREVMRUdBVEVfVE9fSU1QTF80KHVuaWZvcm0zaSwgbG9uZywgaW50LCBpbnQsIGludCkKIAot
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0SW50ZWdlcnYodW5zaWduZWQgbG9uZyBwbmFtZSwg
aW50KiB2YWx1ZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6dW5pZm9ybTNpdihs
b25nIGxvY2F0aW9uLCBpbnQqIHYsIGludCBzaXplKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOwotICAgIGdsR2V0SW50ZWdlcnYocG5hbWUsIHZhbHVlKTsKKyAgICBtX2ltcGwtPnVuaWZv
cm0zaXYobG9jYXRpb24sIHNpemUsIHYpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpn
ZXRQcm9ncmFtaXYoV2ViR0xQcm9ncmFtKiBwcm9ncmFtLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgcG5hbWUsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50KiB2YWx1ZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKLSAgICBnbEdldFByb2dyYW1pdihFWFRSQUNUKHByb2dyYW0pLCBwbmFtZSwgdmFsdWUpOwot
fQorREVMRUdBVEVfVE9fSU1QTF81KHVuaWZvcm00ZiwgbG9uZywgZmxvYXQsIGZsb2F0LCBmbG9h
dCwgZmxvYXQpCiAKLVN0cmluZyBHcmFwaGljc0NvbnRleHQzRDo6Z2V0UHJvZ3JhbUluZm9Mb2co
V2ViR0xQcm9ncmFtKiBwcm9ncmFtKQordm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjp1
bmlmb3JtNGZ2KGxvbmcgbG9jYXRpb24sIGZsb2F0KiB2LCBpbnQgc2l6ZSkKIHsKLSAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKLSAgICBHTHVpbnQgcHJvZ3JhbUlEID0gRVhUUkFDVChwcm9ncmFt
KTsKLSAgICBHTGludCBsb2dMZW5ndGg7Ci0gICAgZ2xHZXRQcm9ncmFtaXYocHJvZ3JhbUlELCBH
TF9JTkZPX0xPR19MRU5HVEgsICZsb2dMZW5ndGgpOwotICAgIGlmICghbG9nTGVuZ3RoKQotICAg
ICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgR0xjaGFyKiBsb2cgPSAwOwotICAgIGlmICghdHJ5
RmFzdE1hbGxvYyhsb2dMZW5ndGggKiBzaXplb2YoR0xjaGFyKSkuZ2V0VmFsdWUobG9nKSkKLSAg
ICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIEdMc2l6ZWkgcmV0dXJuZWRMb2dMZW5ndGg7Ci0g
ICAgZ2xHZXRQcm9ncmFtSW5mb0xvZyhwcm9ncmFtSUQsIGxvZ0xlbmd0aCwgJnJldHVybmVkTG9n
TGVuZ3RoLCBsb2cpOwotICAgIEFTU0VSVChsb2dMZW5ndGggPT0gcmV0dXJuZWRMb2dMZW5ndGgg
KyAxKTsKLSAgICBTdHJpbmcgcmVzID0gU3RyaW5nKGxvZywgcmV0dXJuZWRMb2dMZW5ndGgpOwot
ICAgIGZhc3RGcmVlKGxvZyk7Ci0gICAgcmV0dXJuIHJlczsKKyAgICBtX2ltcGwtPnVuaWZvcm00
ZnYobG9jYXRpb24sIHNpemUsIHYpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRS
ZW5kZXJidWZmZXJQYXJhbWV0ZXJpdih1bnNpZ25lZCBsb25nIHRhcmdldCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgcG5h
bWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQqIHZhbHVlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsR2V0UmVuZGVy
YnVmZmVyUGFyYW1ldGVyaXZFWFQodGFyZ2V0LCBwbmFtZSwgdmFsdWUpOwotfQorREVMRUdBVEVf
VE9fSU1QTF81KHVuaWZvcm00aSwgbG9uZywgaW50LCBpbnQsIGludCwgaW50KQogCi12b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjpnZXRTaGFkZXJpdihXZWJHTFNoYWRlciogc2hhZGVyLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBwbmFtZSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCogdmFsdWUpCit2b2lkIEdyYXBoaWNz
Q29udGV4dDNESW50ZXJuYWw6OnVuaWZvcm00aXYobG9uZyBsb2NhdGlvbiwgaW50KiB2LCBpbnQg
c2l6ZSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbEdldFNoYWRlcml2KEVY
VFJBQ1Qoc2hhZGVyKSwgcG5hbWUsIHZhbHVlKTsKKyAgICBtX2ltcGwtPnVuaWZvcm00aXYobG9j
YXRpb24sIHNpemUsIHYpOwogfQogCi1TdHJpbmcgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFNoYWRl
ckluZm9Mb2coV2ViR0xTaGFkZXIqIHNoYWRlcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRl
cm5hbDo6dW5pZm9ybU1hdHJpeDJmdihsb25nIGxvY2F0aW9uLCBib29sIHRyYW5zcG9zZSwgZmxv
YXQqIHZhbHVlLCBpbnQgc2l6ZSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBH
THVpbnQgc2hhZGVySUQgPSBFWFRSQUNUKHNoYWRlcik7Ci0gICAgR0xpbnQgbG9nTGVuZ3RoOwot
ICAgIGdsR2V0U2hhZGVyaXYoc2hhZGVySUQsIEdMX0lORk9fTE9HX0xFTkdUSCwgJmxvZ0xlbmd0
aCk7Ci0gICAgaWYgKCFsb2dMZW5ndGgpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICBH
TGNoYXIqIGxvZyA9IDA7Ci0gICAgaWYgKCF0cnlGYXN0TWFsbG9jKGxvZ0xlbmd0aCAqIHNpemVv
ZihHTGNoYXIpKS5nZXRWYWx1ZShsb2cpKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAg
R0xzaXplaSByZXR1cm5lZExvZ0xlbmd0aDsKLSAgICBnbEdldFNoYWRlckluZm9Mb2coc2hhZGVy
SUQsIGxvZ0xlbmd0aCwgJnJldHVybmVkTG9nTGVuZ3RoLCBsb2cpOwotICAgIEFTU0VSVChsb2dM
ZW5ndGggPT0gcmV0dXJuZWRMb2dMZW5ndGggKyAxKTsKLSAgICBTdHJpbmcgcmVzID0gU3RyaW5n
KGxvZywgcmV0dXJuZWRMb2dMZW5ndGgpOwotICAgIGZhc3RGcmVlKGxvZyk7Ci0gICAgcmV0dXJu
IHJlczsKKyAgICBtX2ltcGwtPnVuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIHNpemUsIHRyYW5z
cG9zZSwgdmFsdWUpOwogfQogCi1TdHJpbmcgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFNoYWRlclNv
dXJjZShXZWJHTFNoYWRlciogc2hhZGVyKQordm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFs
Ojp1bmlmb3JtTWF0cml4M2Z2KGxvbmcgbG9jYXRpb24sIGJvb2wgdHJhbnNwb3NlLCBmbG9hdCog
dmFsdWUsIGludCBzaXplKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIEdMdWlu
dCBzaGFkZXJJRCA9IEVYVFJBQ1Qoc2hhZGVyKTsKLSAgICBHTGludCBsb2dMZW5ndGg7Ci0gICAg
Z2xHZXRTaGFkZXJpdihzaGFkZXJJRCwgR0xfU0hBREVSX1NPVVJDRV9MRU5HVEgsICZsb2dMZW5n
dGgpOwotICAgIGlmICghbG9nTGVuZ3RoKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAg
R0xjaGFyKiBsb2cgPSAwOwotICAgIGlmICghdHJ5RmFzdE1hbGxvYyhsb2dMZW5ndGggKiBzaXpl
b2YoR0xjaGFyKSkuZ2V0VmFsdWUobG9nKSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAg
IEdMc2l6ZWkgcmV0dXJuZWRMb2dMZW5ndGg7Ci0gICAgZ2xHZXRTaGFkZXJTb3VyY2Uoc2hhZGVy
SUQsIGxvZ0xlbmd0aCwgJnJldHVybmVkTG9nTGVuZ3RoLCBsb2cpOwotICAgIEFTU0VSVChsb2dM
ZW5ndGggPT0gcmV0dXJuZWRMb2dMZW5ndGggKyAxKTsKLSAgICBTdHJpbmcgcmVzID0gU3RyaW5n
KGxvZywgcmV0dXJuZWRMb2dMZW5ndGgpOwotICAgIGZhc3RGcmVlKGxvZyk7Ci0gICAgcmV0dXJu
IHJlczsKKyAgICBtX2ltcGwtPnVuaWZvcm1NYXRyaXgzZnYobG9jYXRpb24sIHNpemUsIHRyYW5z
cG9zZSwgdmFsdWUpOwogfQogCi1TdHJpbmcgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFN0cmluZyh1
bnNpZ25lZCBsb25nIG5hbWUpCit2b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OnVuaWZv
cm1NYXRyaXg0ZnYobG9uZyBsb2NhdGlvbiwgYm9vbCB0cmFuc3Bvc2UsIGZsb2F0KiB2YWx1ZSwg
aW50IHNpemUpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgcmV0dXJuIFN0cmlu
ZyhyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihnbEdldFN0cmluZyhuYW1lKSkpOworICAg
IG1faW1wbC0+dW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwgc2l6ZSwgdHJhbnNwb3NlLCB2YWx1
ZSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFRleFBhcmFtZXRlcmZ2KHVuc2ln
bmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIHBuYW1lLCBmbG9hdCogdmFsdWUpCi17Ci0g
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2xHZXRUZXhQYXJhbWV0ZXJmdih0YXJnZXQs
IHBuYW1lLCB2YWx1ZSk7Ci19CitERUxFR0FURV9UT19JTVBMXzFfWCh1c2VQcm9ncmFtLCBXZWJH
TFByb2dyYW0qKQorREVMRUdBVEVfVE9fSU1QTF8xX1godmFsaWRhdGVQcm9ncmFtLCBXZWJHTFBy
b2dyYW0qKQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRUZXhQYXJhbWV0ZXJpdih1bnNp
Z25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBwbmFtZSwgaW50KiB2YWx1ZSkKLXsKLSAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbEdldFRleFBhcmFtZXRlcml2KHRhcmdldCwg
cG5hbWUsIHZhbHVlKTsKLX0KK0RFTEVHQVRFX1RPX0lNUExfMih2ZXJ0ZXhBdHRyaWIxZiwgdW5z
aWduZWQgbG9uZywgZmxvYXQpCitERUxFR0FURV9UT19JTVBMXzIodmVydGV4QXR0cmliMWZ2LCB1
bnNpZ25lZCBsb25nLCBmbG9hdCopCitERUxFR0FURV9UT19JTVBMXzModmVydGV4QXR0cmliMmYs
IHVuc2lnbmVkIGxvbmcsIGZsb2F0LCBmbG9hdCkKK0RFTEVHQVRFX1RPX0lNUExfMih2ZXJ0ZXhB
dHRyaWIyZnYsIHVuc2lnbmVkIGxvbmcsIGZsb2F0KikKK0RFTEVHQVRFX1RPX0lNUExfNCh2ZXJ0
ZXhBdHRyaWIzZiwgdW5zaWduZWQgbG9uZywgZmxvYXQsIGZsb2F0LCBmbG9hdCkKK0RFTEVHQVRF
X1RPX0lNUExfMih2ZXJ0ZXhBdHRyaWIzZnYsIHVuc2lnbmVkIGxvbmcsIGZsb2F0KikKK0RFTEVH
QVRFX1RPX0lNUExfNSh2ZXJ0ZXhBdHRyaWI0ZiwgdW5zaWduZWQgbG9uZywgZmxvYXQsIGZsb2F0
LCBmbG9hdCwgZmxvYXQpCitERUxFR0FURV9UT19JTVBMXzIodmVydGV4QXR0cmliNGZ2LCB1bnNp
Z25lZCBsb25nLCBmbG9hdCopCitERUxFR0FURV9UT19JTVBMXzYodmVydGV4QXR0cmliUG9pbnRl
ciwgdW5zaWduZWQgbG9uZywgaW50LCBpbnQsIGJvb2wsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVk
IGxvbmcpCiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFVuaWZvcm1mdihXZWJHTFByb2dy
YW0qIHByb2dyYW0sIGxvbmcgbG9jYXRpb24sIGZsb2F0KiB2YWx1ZSkKLXsKLSAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKLSAgICBnbEdldFVuaWZvcm1mdihFWFRSQUNUKHByb2dyYW0pLCBsb2Nh
dGlvbiwgdmFsdWUpOwotfQorREVMRUdBVEVfVE9fSU1QTF80KHZpZXdwb3J0LCBsb25nLCBsb25n
LCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNE
OjpnZXRVbmlmb3JtaXYoV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBsb25nIGxvY2F0aW9uLCBpbnQq
IHZhbHVlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsR2V0VW5pZm9ybWl2
KEVYVFJBQ1QocHJvZ3JhbSksIGxvY2F0aW9uLCB2YWx1ZSk7Ci19CitERUxFR0FURV9UT19JTVBM
X1IoY3JlYXRlQnVmZmVyLCB1bnNpZ25lZCkKK0RFTEVHQVRFX1RPX0lNUExfUihjcmVhdGVGcmFt
ZWJ1ZmZlciwgdW5zaWduZWQpCitERUxFR0FURV9UT19JTVBMX1IoY3JlYXRlUHJvZ3JhbSwgdW5z
aWduZWQpCitERUxFR0FURV9UT19JTVBMX1IoY3JlYXRlUmVuZGVyYnVmZmVyLCB1bnNpZ25lZCkK
K0RFTEVHQVRFX1RPX0lNUExfMVIoY3JlYXRlU2hhZGVyLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25l
ZCkKK0RFTEVHQVRFX1RPX0lNUExfUihjcmVhdGVUZXh0dXJlLCB1bnNpZ25lZCkKIAotbG9uZyBH
cmFwaGljc0NvbnRleHQzRDo6Z2V0VW5pZm9ybUxvY2F0aW9uKFdlYkdMUHJvZ3JhbSogcHJvZ3Jh
bSwgY29uc3QgU3RyaW5nJiBuYW1lKQotewotICAgIGlmICghcHJvZ3JhbSkKLSAgICAgICAgcmV0
dXJuIC0xOworREVMRUdBVEVfVE9fSU1QTF8xKGRlbGV0ZUJ1ZmZlciwgdW5zaWduZWQpCitERUxF
R0FURV9UT19JTVBMXzEoZGVsZXRlRnJhbWVidWZmZXIsIHVuc2lnbmVkKQorREVMRUdBVEVfVE9f
SU1QTF8xKGRlbGV0ZVByb2dyYW0sIHVuc2lnbmVkKQorREVMRUdBVEVfVE9fSU1QTF8xKGRlbGV0
ZVJlbmRlcmJ1ZmZlciwgdW5zaWduZWQpCitERUxFR0FURV9UT19JTVBMXzEoZGVsZXRlU2hhZGVy
LCB1bnNpZ25lZCkKK0RFTEVHQVRFX1RPX0lNUExfMShkZWxldGVUZXh0dXJlLCB1bnNpZ25lZCkK
IAotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIHJldHVybiBnbEdldFVuaWZvcm1Mb2Nh
dGlvbihFWFRSQUNUKHByb2dyYW0pLCBuYW1lLnV0ZjgoKS5kYXRhKCkpOwotfQorREVMRUdBVEVf
VE9fSU1QTF8xKHN5bnRoZXNpemVHTEVycm9yLCB1bnNpZ25lZCBsb25nKQogCi12b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpnZXRWZXJ0ZXhBdHRyaWJmdih1bnNpZ25lZCBsb25nIGluZGV4LAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBwbmFt
ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0KiB2YWx1
ZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbEdldFZlcnRleEF0dHJpYmZ2
KGluZGV4LCBwbmFtZSwgdmFsdWUpOwotfQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBHcmFwaGljc0Nv
bnRleHQzRAorLy8KIAotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VmVydGV4QXR0cmliaXYo
dW5zaWduZWQgbG9uZyBpbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIGxvbmcgcG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQqIHZhbHVlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwot
ICAgIGdsR2V0VmVydGV4QXR0cmliaXYoaW5kZXgsIHBuYW1lLCB2YWx1ZSk7Ci19CisvLyBNYWNy
b3MgdG8gYXNzaXN0IGluIGRlbGVnYXRpbmcgZnJvbSBHcmFwaGljc0NvbnRleHQzRCB0bworLy8g
R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbC4KIAotbG9uZyBHcmFwaGljc0NvbnRleHQzRDo6Z2V0
VmVydGV4QXR0cmliT2Zmc2V0KHVuc2lnbmVkIGxvbmcgaW5kZXgsIHVuc2lnbmVkIGxvbmcgcG5h
bWUpCi17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudC4KLSAgICBub3RJbXBsZW1lbnRlZCgpOwot
ICAgIHJldHVybiAwOworI2RlZmluZSBERUxFR0FURV9UT19JTlRFUk5BTChuYW1lKSBcCit2b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjpuYW1lKCkgXAoreyBcCisgICAgbV9pbnRlcm5hbC0+bmFtZSgp
OyBcCiB9CiAKLUdMX1NBTUVfTUVUSE9EXzIoSGludCwgaGludCwgdW5zaWduZWQgbG9uZywgdW5z
aWduZWQgbG9uZyk7Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmlzQnVmZmVyKFdlYkdMQnVm
ZmVyKiBidWZmZXIpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgcmV0dXJuIGds
SXNCdWZmZXIoRVhUUkFDVChidWZmZXIpKTsKKyNkZWZpbmUgREVMRUdBVEVfVE9fSU5URVJOQUxf
UihuYW1lLCBydCkgICAgICAgICAgIFwKK3J0IEdyYXBoaWNzQ29udGV4dDNEOjpuYW1lKCkgXAor
eyBcCisgICAgcmV0dXJuIG1faW50ZXJuYWwtPm5hbWUoKTsgXAogfQogCi1ib29sIEdyYXBoaWNz
Q29udGV4dDNEOjppc0VuYWJsZWQodW5zaWduZWQgbG9uZyBjYXApCi17Ci0gICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7Ci0gICAgcmV0dXJuIGdsSXNFbmFibGVkKGNhcCk7CisjZGVmaW5lIERFTEVH
QVRFX1RPX0lOVEVSTkFMXzEobmFtZSwgdDEpIFwKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6Om5h
bWUodDEgYTEpIFwKK3sgXAorICAgIG1faW50ZXJuYWwtPm5hbWUoYTEpOyBcCiB9CiAKLWJvb2wg
R3JhcGhpY3NDb250ZXh0M0Q6OmlzRnJhbWVidWZmZXIoV2ViR0xGcmFtZWJ1ZmZlciogZnJhbWVi
dWZmZXIpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgcmV0dXJuIGdsSXNGcmFt
ZWJ1ZmZlckVYVChFWFRSQUNUKGZyYW1lYnVmZmVyKSk7CisjZGVmaW5lIERFTEVHQVRFX1RPX0lO
VEVSTkFMXzFSKG5hbWUsIHQxLCBydCkgICAgXAorcnQgR3JhcGhpY3NDb250ZXh0M0Q6Om5hbWUo
dDEgYTEpIFwKK3sgXAorICAgIHJldHVybiBtX2ludGVybmFsLT5uYW1lKGExKTsgXAogfQogCi1i
b29sIEdyYXBoaWNzQ29udGV4dDNEOjppc1Byb2dyYW0oV2ViR0xQcm9ncmFtKiBwcm9ncmFtKQot
ewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIHJldHVybiBnbElzUHJvZ3JhbShFWFRS
QUNUKHByb2dyYW0pKTsKKyNkZWZpbmUgREVMRUdBVEVfVE9fSU5URVJOQUxfMihuYW1lLCB0MSwg
dDIpIFwKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6Om5hbWUodDEgYTEsIHQyIGEyKSBcCit7IFwK
KyAgICBtX2ludGVybmFsLT5uYW1lKGExLCBhMik7IFwKIH0KIAotYm9vbCBHcmFwaGljc0NvbnRl
eHQzRDo6aXNSZW5kZXJidWZmZXIoV2ViR0xSZW5kZXJidWZmZXIqIHJlbmRlcmJ1ZmZlcikKLXsK
LSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICByZXR1cm4gZ2xJc1JlbmRlcmJ1ZmZlckVY
VChFWFRSQUNUKHJlbmRlcmJ1ZmZlcikpOworI2RlZmluZSBERUxFR0FURV9UT19JTlRFUk5BTF8y
UihuYW1lLCB0MSwgdDIsIHJ0KSAgXAorcnQgR3JhcGhpY3NDb250ZXh0M0Q6Om5hbWUodDEgYTEs
IHQyIGEyKSBcCit7IFwKKyAgICByZXR1cm4gbV9pbnRlcm5hbC0+bmFtZShhMSwgYTIpOyBcCiB9
CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmlzU2hhZGVyKFdlYkdMU2hhZGVyKiBzaGFkZXIp
Ci17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgcmV0dXJuIGdsSXNTaGFkZXIoRVhU
UkFDVChzaGFkZXIpKTsKKyNkZWZpbmUgREVMRUdBVEVfVE9fSU5URVJOQUxfMyhuYW1lLCB0MSwg
dDIsIHQzKSAgIFwKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6Om5hbWUodDEgYTEsIHQyIGEyLCB0
MyBhMykgICAgXAoreyBcCisgICAgbV9pbnRlcm5hbC0+bmFtZShhMSwgYTIsIGEzKTsgICAgICAg
ICAgICAgICAgICBcCiB9CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmlzVGV4dHVyZShXZWJH
TFRleHR1cmUqIHRleHR1cmUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgcmV0
dXJuIGdsSXNUZXh0dXJlKEVYVFJBQ1QodGV4dHVyZSkpOworI2RlZmluZSBERUxFR0FURV9UT19J
TlRFUk5BTF8zUihuYW1lLCB0MSwgdDIsIHQzLCBydCkgICBcCitydCBHcmFwaGljc0NvbnRleHQz
RDo6bmFtZSh0MSBhMSwgdDIgYTIsIHQzIGEzKSAgICBcCit7IFwKKyAgICByZXR1cm4gbV9pbnRl
cm5hbC0+bmFtZShhMSwgYTIsIGEzKTsgICAgICAgICAgICAgICAgICBcCiB9CiAKLUdMX1NBTUVf
TUVUSE9EXzEoTGluZVdpZHRoLCBsaW5lV2lkdGgsIGRvdWJsZSkKKyNkZWZpbmUgREVMRUdBVEVf
VE9fSU5URVJOQUxfNChuYW1lLCB0MSwgdDIsIHQzLCB0NCkgICAgXAordm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6bmFtZSh0MSBhMSwgdDIgYTIsIHQzIGEzLCB0NCBhNCkgIFwKK3sgXAorICAgIG1f
aW50ZXJuYWwtPm5hbWUoYTEsIGEyLCBhMywgYTQpOyAgICAgICAgICAgICAgXAorfQogCi1HTF9T
QU1FX01FVEhPRF8xX1goTGlua1Byb2dyYW0sIGxpbmtQcm9ncmFtLCBXZWJHTFByb2dyYW0qKQor
I2RlZmluZSBERUxFR0FURV9UT19JTlRFUk5BTF81KG5hbWUsIHQxLCB0MiwgdDMsIHQ0LCB0NSkg
ICAgICBcCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpuYW1lKHQxIGExLCB0MiBhMiwgdDMgYTMs
IHQ0IGE0LCB0NSBhNSkgICAgICAgIFwKK3sgXAorICAgIG1faW50ZXJuYWwtPm5hbWUoYTEsIGEy
LCBhMywgYTQsIGE1KTsgICBcCit9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnBpeGVsU3Rv
cmVpKHVuc2lnbmVkIGxvbmcgcG5hbWUsIGxvbmcgcGFyYW0pCi17Ci0gICAgaWYgKHBuYW1lICE9
IEdMX1BBQ0tfQUxJR05NRU5UICYmIHBuYW1lICE9IEdMX1VOUEFDS19BTElHTk1FTlQpIHsKLSAg
ICAgICAgLy8gRklYTUU6IENyZWF0ZSBhIGZha2UgR0wgZXJyb3IgYW5kIHRocm93IGFuIGV4Y2Vw
dGlvbi4KLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyNkZWZpbmUgREVMRUdBVEVfVE9fSU5URVJO
QUxfNihuYW1lLCB0MSwgdDIsIHQzLCB0NCwgdDUsIHQ2KSAgXAordm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6bmFtZSh0MSBhMSwgdDIgYTIsIHQzIGEzLCB0NCBhNCwgdDUgYTUsIHQ2IGE2KSBcCit7
IFwKKyAgICBtX2ludGVybmFsLT5uYW1lKGExLCBhMiwgYTMsIGE0LCBhNSwgYTYpOyAgIFwKK30K
IAotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsUGl4ZWxTdG9yZWkocG5hbWUsIHBh
cmFtKTsKKyNkZWZpbmUgREVMRUdBVEVfVE9fSU5URVJOQUxfNlIobmFtZSwgdDEsIHQyLCB0Mywg
dDQsIHQ1LCB0NiwgcnQpICBcCitydCBHcmFwaGljc0NvbnRleHQzRDo6bmFtZSh0MSBhMSwgdDIg
YTIsIHQzIGEzLCB0NCBhNCwgdDUgYTUsIHQ2IGE2KSBcCit7IFwKKyAgICByZXR1cm4gbV9pbnRl
cm5hbC0+bmFtZShhMSwgYTIsIGEzLCBhNCwgYTUsIGE2KTsgICAgICAgXAogfQogCi1HTF9TQU1F
X01FVEhPRF8yKFBvbHlnb25PZmZzZXQsIHBvbHlnb25PZmZzZXQsIGRvdWJsZSwgZG91YmxlKQor
I2RlZmluZSBERUxFR0FURV9UT19JTlRFUk5BTF83UihuYW1lLCB0MSwgdDIsIHQzLCB0NCwgdDUs
IHQ2LCB0NywgcnQpIFwKK3J0IEdyYXBoaWNzQ29udGV4dDNEOjpuYW1lKHQxIGExLCB0MiBhMiwg
dDMgYTMsIHQ0IGE0LCB0NSBhNSwgdDYgYTYsIHQ3IGE3KSBcCit7IFwKKyAgICByZXR1cm4gbV9p
bnRlcm5hbC0+bmFtZShhMSwgYTIsIGEzLCBhNCwgYTUsIGE2LCBhNyk7ICAgXAorfQogCi1QYXNz
UmVmUHRyPFdlYkdMQXJyYXk+IEdyYXBoaWNzQ29udGV4dDNEOjpyZWFkUGl4ZWxzKGxvbmcgeCwg
bG9uZyB5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBs
b25nIGZvcm1hdCwgdW5zaWduZWQgbG9uZyB0eXBlKSB7Ci0gICAgLy8gRklYTUU6IHN1cHBvcnQg
bW9yZSBwaXhlbCBmb3JtYXRzIGFuZCB0eXBlcy4KLSAgICBpZiAoISgoZm9ybWF0ID09IEdMX1JH
QkEpICYmICh0eXBlID09IEdMX1VOU0lHTkVEX0JZVEUpKSkKLSAgICAgICAgcmV0dXJuIDA7Cisj
ZGVmaW5lIERFTEVHQVRFX1RPX0lOVEVSTkFMXzgobmFtZSwgdDEsIHQyLCB0MywgdDQsIHQ1LCB0
NiwgdDcsIHQ4KSAgICAgICBcCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpuYW1lKHQxIGExLCB0
MiBhMiwgdDMgYTMsIHQ0IGE0LCB0NSBhNSwgdDYgYTYsIHQ3IGE3LCB0OCBhOCkgXAoreyBcCisg
ICAgbV9pbnRlcm5hbC0+bmFtZShhMSwgYTIsIGEzLCBhNCwgYTUsIGE2LCBhNywgYTgpOyAgICAg
IFwKK30KIAotICAgIC8vIEZJWE1FOiB0YWtlIGludG8gYWNjb3VudCBwYWNrIGFsaWdubWVudC4K
LSAgICBSZWZQdHI8V2ViR0xVbnNpZ25lZEJ5dGVBcnJheT4gYXJyYXkgPSBXZWJHTFVuc2lnbmVk
Qnl0ZUFycmF5OjpjcmVhdGUod2lkdGggKiBoZWlnaHQgKiA0KTsKLSAgICBnbFJlYWRQaXhlbHMo
eCwgeSwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBhcnJheS0+YmFzZUFkZHJlc3MoKSk7
Ci0gICAgcmV0dXJuIGFycmF5OworI2RlZmluZSBERUxFR0FURV9UT19JTlRFUk5BTF85UihuYW1l
LCB0MSwgdDIsIHQzLCB0NCwgdDUsIHQ2LCB0NywgdDgsIHQ5LCBydCkgXAorcnQgR3JhcGhpY3ND
b250ZXh0M0Q6Om5hbWUodDEgYTEsIHQyIGEyLCB0MyBhMywgdDQgYTQsIHQ1IGE1LCB0NiBhNiwg
dDcgYTcsIHQ4IGE4LCB0OSBhOSkgXAoreyBcCisgICAgcmV0dXJuIG1faW50ZXJuYWwtPm5hbWUo
YTEsIGEyLCBhMywgYTQsIGE1LCBhNiwgYTcsIGE4LCBhOSk7ICAgXAogfQogCi12b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpyZWxlYXNlU2hhZGVyQ29tcGlsZXIoKQorR3JhcGhpY3NDb250ZXh0M0Q6
OkdyYXBoaWNzQ29udGV4dDNEKEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJzKQog
ewogfQogCi1HTF9TQU1FX01FVEhPRF80KFJlbmRlcmJ1ZmZlclN0b3JhZ2VFWFQsIHJlbmRlcmJ1
ZmZlclN0b3JhZ2UsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcs
IHVuc2lnbmVkIGxvbmcpCi0KLUdMX1NBTUVfTUVUSE9EXzIoU2FtcGxlQ292ZXJhZ2UsIHNhbXBs
ZUNvdmVyYWdlLCBkb3VibGUsIGJvb2wpCi0KLUdMX1NBTUVfTUVUSE9EXzQoU2Npc3Nvciwgc2Np
c3NvciwgbG9uZywgbG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZykKLQotdm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6c2hhZGVyU291cmNlKFdlYkdMU2hhZGVyKiBzaGFkZXIsIGNvbnN0
IFN0cmluZyYgc291cmNlKQorR3JhcGhpY3NDb250ZXh0M0Q6On5HcmFwaGljc0NvbnRleHQzRCgp
CiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgQ1N0cmluZyBzdHIgPSBzb3VyY2Uu
dXRmOCgpOwotICAgIGNvbnN0IGNoYXIqIGRhdGEgPSBzdHIuZGF0YSgpOwotICAgIEdMaW50IGxl
bmd0aCA9IHN0ci5sZW5ndGgoKTsKLSAgICBnbFNoYWRlclNvdXJjZShFWFRSQUNUKHNoYWRlciks
IDEsICZkYXRhLCAmbGVuZ3RoKTsKIH0KIAotR0xfU0FNRV9NRVRIT0RfMyhTdGVuY2lsRnVuYywg
c3RlbmNpbEZ1bmMsIHVuc2lnbmVkIGxvbmcsIGxvbmcsIHVuc2lnbmVkIGxvbmcpCi0KLUdMX1NB
TUVfTUVUSE9EXzQoU3RlbmNpbEZ1bmNTZXBhcmF0ZSwgc3RlbmNpbEZ1bmNTZXBhcmF0ZSwgdW5z
aWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgbG9uZywgdW5zaWduZWQgbG9uZykKLQotR0xfU0FN
RV9NRVRIT0RfMShTdGVuY2lsTWFzaywgc3RlbmNpbE1hc2ssIHVuc2lnbmVkIGxvbmcpCi0KLUdM
X1NBTUVfTUVUSE9EXzIoU3RlbmNpbE1hc2tTZXBhcmF0ZSwgc3RlbmNpbE1hc2tTZXBhcmF0ZSwg
dW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZykKLQotR0xfU0FNRV9NRVRIT0RfMyhTdGVuY2ls
T3AsIHN0ZW5jaWxPcCwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9u
ZykKLQotR0xfU0FNRV9NRVRIT0RfNChTdGVuY2lsT3BTZXBhcmF0ZSwgc3RlbmNpbE9wU2VwYXJh
dGUsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVk
IGxvbmcpCitQYXNzT3duUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBHcmFwaGljc0NvbnRleHQzRDo6
Y3JlYXRlKEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJzKQoreworICAgIEdyYXBo
aWNzQ29udGV4dDNESW50ZXJuYWwqIGludGVybmFsID0gbmV3IEdyYXBoaWNzQ29udGV4dDNESW50
ZXJuYWwoKTsKKyAgICBpZiAoIWludGVybmFsLT5pbml0aWFsaXplKGF0dHJzKSkgeworICAgICAg
ICBkZWxldGUgaW50ZXJuYWw7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBQYXNzT3du
UHRyPEdyYXBoaWNzQ29udGV4dDNEPiByZXN1bHQgPSBuZXcgR3JhcGhpY3NDb250ZXh0M0QoYXR0
cnMpOworICAgIHJlc3VsdC0+bV9pbnRlcm5hbC5zZXQoaW50ZXJuYWwpOworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnN5bnRoZXNpemVHTEVycm9yKHVu
c2lnbmVkIGxvbmcgZXJyb3IpCitQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEIEdyYXBoaWNzQ29u
dGV4dDNEOjpwbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEKCkgY29uc3QKIHsKLSAgICBtX2ludGVy
bmFsLT5zeW50aGVzaXplR0xFcnJvcihlcnJvcik7CisgICAgcmV0dXJuIG1faW50ZXJuYWwtPnBs
YXRmb3JtR3JhcGhpY3NDb250ZXh0M0QoKTsKIH0KIAotaW50IEdyYXBoaWNzQ29udGV4dDNEOjp0
ZXhJbWFnZTJEKHVuc2lnbmVkIHRhcmdldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBsZXZlbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1
bnNpZ25lZCBpbnRlcm5hbGZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB1bnNpZ25lZCB3aWR0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNp
Z25lZCBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg
Ym9yZGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGZvcm1h
dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCB0eXBlLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqIHBpeGVscykKK1BsYXRmb3JtM0RP
YmplY3QgR3JhcGhpY3NDb250ZXh0M0Q6OnBsYXRmb3JtVGV4dHVyZSgpIGNvbnN0CiB7Ci0gICAg
Ly8gRklYTUU6IG11c3QgZG8gdmFsaWRhdGlvbiBzaW1pbGFyIHRvIEpPR0wncyB0byBlbnN1cmUg
dGhhdAotICAgIC8vIHRoZSBpbmNvbWluZyBhcnJheSBpcyBvZiB0aGUgYXBwcm9wcmlhdGUgbGVu
Z3RoLgotICAgIGdsVGV4SW1hZ2UyRCh0YXJnZXQsCi0gICAgICAgICAgICAgICAgIGxldmVsLAot
ICAgICAgICAgICAgICAgICBpbnRlcm5hbGZvcm1hdCwKLSAgICAgICAgICAgICAgICAgd2lkdGgs
Ci0gICAgICAgICAgICAgICAgIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgYm9yZGVyLAotICAg
ICAgICAgICAgICAgICBmb3JtYXQsCi0gICAgICAgICAgICAgICAgIHR5cGUsCi0gICAgICAgICAg
ICAgICAgIHBpeGVscyk7Ci0gICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIG1faW50ZXJuYWwtPnBs
YXRmb3JtVGV4dHVyZSgpOwogfQogCitERUxFR0FURV9UT19JTlRFUk5BTChtYWtlQ29udGV4dEN1
cnJlbnQpCitERUxFR0FURV9UT19JTlRFUk5BTF8xUihzaXplSW5CeXRlcywgaW50LCBpbnQpCitE
RUxFR0FURV9UT19JTlRFUk5BTF8yKHJlc2hhcGUsIGludCwgaW50KQorCitERUxFR0FURV9UT19J
TlRFUk5BTF8xKGFjdGl2ZVRleHR1cmUsIHVuc2lnbmVkIGxvbmcpCitERUxFR0FURV9UT19JTlRF
Uk5BTF8yKGF0dGFjaFNoYWRlciwgV2ViR0xQcm9ncmFtKiwgV2ViR0xTaGFkZXIqKQorREVMRUdB
VEVfVE9fSU5URVJOQUxfMyhiaW5kQXR0cmliTG9jYXRpb24sIFdlYkdMUHJvZ3JhbSosIHVuc2ln
bmVkIGxvbmcsIGNvbnN0IFN0cmluZyYpCisKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzIoYmluZEJ1
ZmZlciwgdW5zaWduZWQgbG9uZywgV2ViR0xCdWZmZXIqKQorREVMRUdBVEVfVE9fSU5URVJOQUxf
MihiaW5kRnJhbWVidWZmZXIsIHVuc2lnbmVkIGxvbmcsIFdlYkdMRnJhbWVidWZmZXIqKQorREVM
RUdBVEVfVE9fSU5URVJOQUxfMihiaW5kUmVuZGVyYnVmZmVyLCB1bnNpZ25lZCBsb25nLCBXZWJH
TFJlbmRlcmJ1ZmZlciopCitERUxFR0FURV9UT19JTlRFUk5BTF8yKGJpbmRUZXh0dXJlLCB1bnNp
Z25lZCBsb25nLCBXZWJHTFRleHR1cmUqKQorREVMRUdBVEVfVE9fSU5URVJOQUxfNChibGVuZENv
bG9yLCBkb3VibGUsIGRvdWJsZSwgZG91YmxlLCBkb3VibGUpCitERUxFR0FURV9UT19JTlRFUk5B
TF8xKGJsZW5kRXF1YXRpb24sIHVuc2lnbmVkIGxvbmcpCitERUxFR0FURV9UT19JTlRFUk5BTF8y
KGJsZW5kRXF1YXRpb25TZXBhcmF0ZSwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZykKK0RF
TEVHQVRFX1RPX0lOVEVSTkFMXzIoYmxlbmRGdW5jLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBs
b25nKQorREVMRUdBVEVfVE9fSU5URVJOQUxfNChibGVuZEZ1bmNTZXBhcmF0ZSwgdW5zaWduZWQg
bG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZykKKworREVM
RUdBVEVfVE9fSU5URVJOQUxfMyhidWZmZXJEYXRhLCB1bnNpZ25lZCBsb25nLCBpbnQsIHVuc2ln
bmVkIGxvbmcpCitERUxFR0FURV9UT19JTlRFUk5BTF8zKGJ1ZmZlckRhdGEsIHVuc2lnbmVkIGxv
bmcsIFdlYkdMQXJyYXkqLCB1bnNpZ25lZCBsb25nKQorREVMRUdBVEVfVE9fSU5URVJOQUxfMyhi
dWZmZXJTdWJEYXRhLCB1bnNpZ25lZCBsb25nLCBsb25nLCBXZWJHTEFycmF5KikKKworREVMRUdB
VEVfVE9fSU5URVJOQUxfMVIoY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cywgdW5zaWduZWQgbG9uZywg
dW5zaWduZWQgbG9uZykKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzEoY2xlYXIsIHVuc2lnbmVkIGxv
bmcpCitERUxFR0FURV9UT19JTlRFUk5BTF80KGNsZWFyQ29sb3IsIGRvdWJsZSwgZG91YmxlLCBk
b3VibGUsIGRvdWJsZSkKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzEoY2xlYXJEZXB0aCwgZG91Ymxl
KQorREVMRUdBVEVfVE9fSU5URVJOQUxfMShjbGVhclN0ZW5jaWwsIGxvbmcpCitERUxFR0FURV9U
T19JTlRFUk5BTF80KGNvbG9yTWFzaywgYm9vbCwgYm9vbCwgYm9vbCwgYm9vbCkKK0RFTEVHQVRF
X1RPX0lOVEVSTkFMXzEoY29tcGlsZVNoYWRlciwgV2ViR0xTaGFkZXIqKQorCitERUxFR0FURV9U
T19JTlRFUk5BTF84KGNvcHlUZXhJbWFnZTJELCB1bnNpZ25lZCBsb25nLCBsb25nLCB1bnNpZ25l
ZCBsb25nLCBsb25nLCBsb25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCBsb25nKQor
REVMRUdBVEVfVE9fSU5URVJOQUxfOChjb3B5VGV4U3ViSW1hZ2UyRCwgdW5zaWduZWQgbG9uZywg
bG9uZywgbG9uZywgbG9uZywgbG9uZywgbG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9u
ZykKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzEoY3VsbEZhY2UsIHVuc2lnbmVkIGxvbmcpCitERUxF
R0FURV9UT19JTlRFUk5BTF8xKGRlcHRoRnVuYywgdW5zaWduZWQgbG9uZykKK0RFTEVHQVRFX1RP
X0lOVEVSTkFMXzEoZGVwdGhNYXNrLCBib29sKQorREVMRUdBVEVfVE9fSU5URVJOQUxfMihkZXB0
aFJhbmdlLCBkb3VibGUsIGRvdWJsZSkKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzIoZGV0YWNoU2hh
ZGVyLCBXZWJHTFByb2dyYW0qLCBXZWJHTFNoYWRlciopCitERUxFR0FURV9UT19JTlRFUk5BTF8x
KGRpc2FibGUsIHVuc2lnbmVkIGxvbmcpCitERUxFR0FURV9UT19JTlRFUk5BTF8xKGRpc2FibGVW
ZXJ0ZXhBdHRyaWJBcnJheSwgdW5zaWduZWQgbG9uZykKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzMo
ZHJhd0FycmF5cywgdW5zaWduZWQgbG9uZywgbG9uZywgbG9uZykKK0RFTEVHQVRFX1RPX0lOVEVS
TkFMXzQoZHJhd0VsZW1lbnRzLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25l
ZCBsb25nLCBsb25nKQorCitERUxFR0FURV9UT19JTlRFUk5BTF8xKGVuYWJsZSwgdW5zaWduZWQg
bG9uZykKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzEoZW5hYmxlVmVydGV4QXR0cmliQXJyYXksIHVu
c2lnbmVkIGxvbmcpCitERUxFR0FURV9UT19JTlRFUk5BTChmaW5pc2gpCitERUxFR0FURV9UT19J
TlRFUk5BTChmbHVzaCkKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzQoZnJhbWVidWZmZXJSZW5kZXJi
dWZmZXIsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIFdlYkdM
UmVuZGVyYnVmZmVyKikKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzUoZnJhbWVidWZmZXJUZXh0dXJl
MkQsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIFdlYkdMVGV4
dHVyZSosIGxvbmcpCitERUxFR0FURV9UT19JTlRFUk5BTF8xKGZyb250RmFjZSwgdW5zaWduZWQg
bG9uZykKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzEoZ2VuZXJhdGVNaXBtYXAsIHVuc2lnbmVkIGxv
bmcpCisKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzNSKGdldEFjdGl2ZUF0dHJpYiwgV2ViR0xQcm9n
cmFtKiwgdW5zaWduZWQgbG9uZywgQWN0aXZlSW5mbyYsIGJvb2wpCitERUxFR0FURV9UT19JTlRF
Uk5BTF8zUihnZXRBY3RpdmVVbmlmb3JtLCBXZWJHTFByb2dyYW0qLCB1bnNpZ25lZCBsb25nLCBB
Y3RpdmVJbmZvJiwgYm9vbCkKKworREVMRUdBVEVfVE9fSU5URVJOQUxfMlIoZ2V0QXR0cmliTG9j
YXRpb24sIFdlYkdMUHJvZ3JhbSosIGNvbnN0IFN0cmluZyYsIGludCkKKworREVMRUdBVEVfVE9f
SU5URVJOQUxfMihnZXRCb29sZWFudiwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgY2hhciopCisK
K0RFTEVHQVRFX1RPX0lOVEVSTkFMXzMoZ2V0QnVmZmVyUGFyYW1ldGVyaXYsIHVuc2lnbmVkIGxv
bmcsIHVuc2lnbmVkIGxvbmcsIGludCopCisKK0RFTEVHQVRFX1RPX0lOVEVSTkFMX1IoZ2V0Q29u
dGV4dEF0dHJpYnV0ZXMsIEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzKQorCitERUxFR0FU
RV9UT19JTlRFUk5BTF9SKGdldEVycm9yLCB1bnNpZ25lZCBsb25nKQorCitERUxFR0FURV9UT19J
TlRFUk5BTF8yKGdldEZsb2F0diwgdW5zaWduZWQgbG9uZywgZmxvYXQqKQorCitERUxFR0FURV9U
T19JTlRFUk5BTF80KGdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcml2LCB1bnNpZ25l
ZCBsb25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCBpbnQqKQorCitERUxFR0FURV9U
T19JTlRFUk5BTF8yKGdldEludGVnZXJ2LCB1bnNpZ25lZCBsb25nLCBpbnQqKQorCitERUxFR0FU
RV9UT19JTlRFUk5BTF8zKGdldFByb2dyYW1pdiwgV2ViR0xQcm9ncmFtKiwgdW5zaWduZWQgbG9u
ZywgaW50KikKKworREVMRUdBVEVfVE9fSU5URVJOQUxfMVIoZ2V0UHJvZ3JhbUluZm9Mb2csIFdl
YkdMUHJvZ3JhbSosIFN0cmluZykKKworREVMRUdBVEVfVE9fSU5URVJOQUxfMyhnZXRSZW5kZXJi
dWZmZXJQYXJhbWV0ZXJpdiwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgaW50KikKKwor
REVMRUdBVEVfVE9fSU5URVJOQUxfMyhnZXRTaGFkZXJpdiwgV2ViR0xTaGFkZXIqLCB1bnNpZ25l
ZCBsb25nLCBpbnQqKQorCitERUxFR0FURV9UT19JTlRFUk5BTF8xUihnZXRTaGFkZXJJbmZvTG9n
LCBXZWJHTFNoYWRlciosIFN0cmluZykKKworREVMRUdBVEVfVE9fSU5URVJOQUxfMVIoZ2V0U2hh
ZGVyU291cmNlLCBXZWJHTFNoYWRlciosIFN0cmluZykKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzFS
KGdldFN0cmluZywgdW5zaWduZWQgbG9uZywgU3RyaW5nKQorCitERUxFR0FURV9UT19JTlRFUk5B
TF8zKGdldFRleFBhcmFtZXRlcmZ2LCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCBmbG9h
dCopCitERUxFR0FURV9UT19JTlRFUk5BTF8zKGdldFRleFBhcmFtZXRlcml2LCB1bnNpZ25lZCBs
b25nLCB1bnNpZ25lZCBsb25nLCBpbnQqKQorCitERUxFR0FURV9UT19JTlRFUk5BTF8zKGdldFVu
aWZvcm1mdiwgV2ViR0xQcm9ncmFtKiwgbG9uZywgZmxvYXQqKQorREVMRUdBVEVfVE9fSU5URVJO
QUxfMyhnZXRVbmlmb3JtaXYsIFdlYkdMUHJvZ3JhbSosIGxvbmcsIGludCopCisKK0RFTEVHQVRF
X1RPX0lOVEVSTkFMXzJSKGdldFVuaWZvcm1Mb2NhdGlvbiwgV2ViR0xQcm9ncmFtKiwgY29uc3Qg
U3RyaW5nJiwgbG9uZykKKworREVMRUdBVEVfVE9fSU5URVJOQUxfMyhnZXRWZXJ0ZXhBdHRyaWJm
diwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgZmxvYXQqKQorREVMRUdBVEVfVE9fSU5U
RVJOQUxfMyhnZXRWZXJ0ZXhBdHRyaWJpdiwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywg
aW50KikKKworREVMRUdBVEVfVE9fSU5URVJOQUxfMlIoZ2V0VmVydGV4QXR0cmliT2Zmc2V0LCB1
bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCBsb25nKQorCitERUxFR0FURV9UT19JTlRFUk5B
TF8yKGhpbnQsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpCitERUxFR0FURV9UT19JTlRF
Uk5BTF8xUihpc0J1ZmZlciwgV2ViR0xCdWZmZXIqLCBib29sKQorREVMRUdBVEVfVE9fSU5URVJO
QUxfMVIoaXNFbmFibGVkLCB1bnNpZ25lZCBsb25nLCBib29sKQorREVMRUdBVEVfVE9fSU5URVJO
QUxfMVIoaXNGcmFtZWJ1ZmZlciwgV2ViR0xGcmFtZWJ1ZmZlciosIGJvb2wpCitERUxFR0FURV9U
T19JTlRFUk5BTF8xUihpc1Byb2dyYW0sIFdlYkdMUHJvZ3JhbSosIGJvb2wpCitERUxFR0FURV9U
T19JTlRFUk5BTF8xUihpc1JlbmRlcmJ1ZmZlciwgV2ViR0xSZW5kZXJidWZmZXIqLCBib29sKQor
REVMRUdBVEVfVE9fSU5URVJOQUxfMVIoaXNTaGFkZXIsIFdlYkdMU2hhZGVyKiwgYm9vbCkKK0RF
TEVHQVRFX1RPX0lOVEVSTkFMXzFSKGlzVGV4dHVyZSwgV2ViR0xUZXh0dXJlKiwgYm9vbCkKK0RF
TEVHQVRFX1RPX0lOVEVSTkFMXzEobGluZVdpZHRoLCBkb3VibGUpCitERUxFR0FURV9UT19JTlRF
Uk5BTF8xKGxpbmtQcm9ncmFtLCBXZWJHTFByb2dyYW0qKQorREVMRUdBVEVfVE9fSU5URVJOQUxf
MihwaXhlbFN0b3JlaSwgdW5zaWduZWQgbG9uZywgbG9uZykKK0RFTEVHQVRFX1RPX0lOVEVSTkFM
XzIocG9seWdvbk9mZnNldCwgZG91YmxlLCBkb3VibGUpCisKK0RFTEVHQVRFX1RPX0lOVEVSTkFM
XzZSKHJlYWRQaXhlbHMsIGxvbmcsIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcs
IHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIFBhc3NSZWZQdHI8V2ViR0xBcnJheT4pCisK
K0RFTEVHQVRFX1RPX0lOVEVSTkFMKHJlbGVhc2VTaGFkZXJDb21waWxlcikKK0RFTEVHQVRFX1RP
X0lOVEVSTkFMXzQocmVuZGVyYnVmZmVyU3RvcmFnZSwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQg
bG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZykKK0RFTEVHQVRFX1RPX0lOVEVSTkFM
XzIoc2FtcGxlQ292ZXJhZ2UsIGRvdWJsZSwgYm9vbCkKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzQo
c2Npc3NvciwgbG9uZywgbG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZykKK0RFTEVH
QVRFX1RPX0lOVEVSTkFMXzIoc2hhZGVyU291cmNlLCBXZWJHTFNoYWRlciosIGNvbnN0IFN0cmlu
ZyYpCitERUxFR0FURV9UT19JTlRFUk5BTF8zKHN0ZW5jaWxGdW5jLCB1bnNpZ25lZCBsb25nLCBs
b25nLCB1bnNpZ25lZCBsb25nKQorREVMRUdBVEVfVE9fSU5URVJOQUxfNChzdGVuY2lsRnVuY1Nl
cGFyYXRlLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCBsb25nLCB1bnNpZ25lZCBsb25n
KQorREVMRUdBVEVfVE9fSU5URVJOQUxfMShzdGVuY2lsTWFzaywgdW5zaWduZWQgbG9uZykKK0RF
TEVHQVRFX1RPX0lOVEVSTkFMXzIoc3RlbmNpbE1hc2tTZXBhcmF0ZSwgdW5zaWduZWQgbG9uZywg
dW5zaWduZWQgbG9uZykKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzMoc3RlbmNpbE9wLCB1bnNpZ25l
ZCBsb25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKQorREVMRUdBVEVfVE9fSU5URVJO
QUxfNChzdGVuY2lsT3BTZXBhcmF0ZSwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgdW5z
aWduZWQgbG9uZywgdW5zaWduZWQgbG9uZykKKworREVMRUdBVEVfVE9fSU5URVJOQUxfOVIodGV4
SW1hZ2UyRCwgdW5zaWduZWQsIHVuc2lnbmVkLCB1bnNpZ25lZCwgdW5zaWduZWQsIHVuc2lnbmVk
LCB1bnNpZ25lZCwgdW5zaWduZWQsIHVuc2lnbmVkLCB2b2lkKiwgaW50KQorCiBpbnQgR3JhcGhp
Y3NDb250ZXh0M0Q6OnRleEltYWdlMkQodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBsZXZlbCwg
SW1hZ2UqIGltYWdlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZmxp
cFksIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSkKIHsKQEAgLTE4ODAsMjkgKzEyMDgsMTUgQEAgaW50
IEdyYXBoaWNzQ29udGV4dDNEOjp0ZXhJbWFnZTJEKHVuc2lnbgogICAgIHVuc2lnbmVkIGludCBm
b3JtYXQsIGludGVybmFsRm9ybWF0OwogICAgIGlmICghZXh0cmFjdEltYWdlRGF0YShpbWFnZSwg
ZmxpcFksIHByZW11bHRpcGx5QWxwaGEsIGltYWdlRGF0YSwgJmZvcm1hdCwgJmludGVybmFsRm9y
bWF0KSkKICAgICAgICAgcmV0dXJuIC0xOwotICAgIGdsVGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVs
LCBpbnRlcm5hbEZvcm1hdCwKLSAgICAgICAgICAgICAgICAgaW1hZ2UtPndpZHRoKCksIGltYWdl
LT5oZWlnaHQoKSwgMCwKLSAgICAgICAgICAgICAgICAgZm9ybWF0LCBHTF9VTlNJR05FRF9CWVRF
LCBpbWFnZURhdGEuZGF0YSgpKTsKLSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gbV9pbnRlcm5h
bC0+dGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbEZvcm1hdCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbWFnZS0+d2lkdGgoKSwgaW1hZ2UtPmhlaWdodCgpLCAw
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdCwgVU5TSUdORURfQllU
RSwgaW1hZ2VEYXRhLmRhdGEoKSk7CiB9CiAKLUdMX1NBTUVfTUVUSE9EXzMoVGV4UGFyYW1ldGVy
ZiwgdGV4UGFyYW1ldGVyZiwgdW5zaWduZWQsIHVuc2lnbmVkLCBmbG9hdCk7CitERUxFR0FURV9U
T19JTlRFUk5BTF8zKHRleFBhcmFtZXRlcmYsIHVuc2lnbmVkLCB1bnNpZ25lZCwgZmxvYXQpCitE
RUxFR0FURV9UT19JTlRFUk5BTF8zKHRleFBhcmFtZXRlcmksIHVuc2lnbmVkLCB1bnNpZ25lZCwg
aW50KQogCi1HTF9TQU1FX01FVEhPRF8zKFRleFBhcmFtZXRlcmksIHRleFBhcmFtZXRlcmksIHVu
c2lnbmVkLCB1bnNpZ25lZCwgaW50KTsKLQotaW50IEdyYXBoaWNzQ29udGV4dDNEOjp0ZXhTdWJJ
bWFnZTJEKHVuc2lnbmVkIHRhcmdldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBsZXZlbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB1bnNpZ25lZCB4b2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHVuc2lnbmVkIHlvZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dW5zaWduZWQgd2lkdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5z
aWduZWQgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2ln
bmVkIGZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25l
ZCB0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqIHBpeGVs
cykKLXsKLSAgICBnbFRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNl
dCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpOwotICAgIHJldHVybiAwOwot
fQorREVMRUdBVEVfVE9fSU5URVJOQUxfOVIodGV4U3ViSW1hZ2UyRCwgdW5zaWduZWQsIHVuc2ln
bmVkLCB1bnNpZ25lZCwgdW5zaWduZWQsIHVuc2lnbmVkLCB1bnNpZ25lZCwgdW5zaWduZWQsIHVu
c2lnbmVkLCB2b2lkKiwgaW50KQogCiBpbnQgR3JhcGhpY3NDb250ZXh0M0Q6OnRleFN1YkltYWdl
MkQodW5zaWduZWQgdGFyZ2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHVuc2lnbmVkIGxldmVsLApAQCAtMTkxNiwxNDIgKzEyMzAsNjUgQEAgaW50IEdyYXBoaWNzQ29u
dGV4dDNEOjp0ZXhTdWJJbWFnZTJEKHVucwogICAgIHVuc2lnbmVkIGludCBmb3JtYXQsIGludGVy
bmFsRm9ybWF0OwogICAgIGlmICghZXh0cmFjdEltYWdlRGF0YShpbWFnZSwgZmxpcFksIHByZW11
bHRpcGx5QWxwaGEsIGltYWdlRGF0YSwgJmZvcm1hdCwgJmludGVybmFsRm9ybWF0KSkKICAgICAg
ICAgcmV0dXJuIC0xOwotICAgIGdsVGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0
LCB5b2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICBpbWFnZS0+d2lkdGgoKSwgaW1hZ2UtPmhl
aWdodCgpLAotICAgICAgICAgICAgICAgICAgICBmb3JtYXQsIEdMX1VOU0lHTkVEX0JZVEUsIGlt
YWdlRGF0YS5kYXRhKCkpOwotICAgIHJldHVybiAwOwotfQotCi1HTF9TQU1FX01FVEhPRF8yKFVu
aWZvcm0xZiwgdW5pZm9ybTFmLCBsb25nLCBmbG9hdCkKLQotdm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6dW5pZm9ybTFmdihsb25nIGxvY2F0aW9uLCBmbG9hdCogdiwgaW50IHNpemUpCi17Ci0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2xVbmlmb3JtMWZ2KGxvY2F0aW9uLCBzaXplLCB2
KTsKLX0KLQotR0xfU0FNRV9NRVRIT0RfMihVbmlmb3JtMWksIHVuaWZvcm0xaSwgbG9uZywgaW50
KQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMWl2KGxvbmcgbG9jYXRpb24sIGlu
dCogdiwgaW50IHNpemUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2xVbmlm
b3JtMWl2KGxvY2F0aW9uLCBzaXplLCB2KTsKLX0KLQotR0xfU0FNRV9NRVRIT0RfMyhVbmlmb3Jt
MmYsIHVuaWZvcm0yZiwgbG9uZywgZmxvYXQsIGZsb2F0KQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjp1bmlmb3JtMmZ2KGxvbmcgbG9jYXRpb24sIGZsb2F0KiB2LCBpbnQgc2l6ZSkKLXsKLSAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbFVuaWZvcm0yZnYobG9jYXRpb24sIHNpemUs
IHYpOwotfQotCi1HTF9TQU1FX01FVEhPRF8zKFVuaWZvcm0yaSwgdW5pZm9ybTJpLCBsb25nLCBp
bnQsIGludCkKLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTJpdihsb25nIGxvY2F0
aW9uLCBpbnQqIHYsIGludCBzaXplKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAg
IGdsVW5pZm9ybTJpdihsb2NhdGlvbiwgc2l6ZSwgdik7Ci19Ci0KLUdMX1NBTUVfTUVUSE9EXzQo
VW5pZm9ybTNmLCB1bmlmb3JtM2YsIGxvbmcsIGZsb2F0LCBmbG9hdCwgZmxvYXQpCi0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0zZnYobG9uZyBsb2NhdGlvbiwgZmxvYXQqIHYsIGlu
dCBzaXplKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsVW5pZm9ybTNmdihs
b2NhdGlvbiwgc2l6ZSwgdik7Ci19Ci0KLUdMX1NBTUVfTUVUSE9EXzQoVW5pZm9ybTNpLCB1bmlm
b3JtM2ksIGxvbmcsIGludCwgaW50LCBpbnQpCi0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVu
aWZvcm0zaXYobG9uZyBsb2NhdGlvbiwgaW50KiB2LCBpbnQgc2l6ZSkKLXsKLSAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKLSAgICBnbFVuaWZvcm0zaXYobG9jYXRpb24sIHNpemUsIHYpOwotfQot
Ci1HTF9TQU1FX01FVEhPRF81KFVuaWZvcm00ZiwgdW5pZm9ybTRmLCBsb25nLCBmbG9hdCwgZmxv
YXQsIGZsb2F0LCBmbG9hdCkKLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTRmdihs
b25nIGxvY2F0aW9uLCBmbG9hdCogdiwgaW50IHNpemUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7Ci0gICAgZ2xVbmlmb3JtNGZ2KGxvY2F0aW9uLCBzaXplLCB2KTsKLX0KLQotR0xfU0FN
RV9NRVRIT0RfNShVbmlmb3JtNGksIHVuaWZvcm00aSwgbG9uZywgaW50LCBpbnQsIGludCwgaW50
KQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtNGl2KGxvbmcgbG9jYXRpb24sIGlu
dCogdiwgaW50IHNpemUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2xVbmlm
b3JtNGl2KGxvY2F0aW9uLCBzaXplLCB2KTsKLX0KKyAgICByZXR1cm4gbV9pbnRlcm5hbC0+dGV4
U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlLT53aWR0aCgpLCBpbWFnZS0+aGVpZ2h0KCks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0LCBVTlNJR05FRF9C
WVRFLCBpbWFnZURhdGEuZGF0YSgpKTsKK30KKworREVMRUdBVEVfVE9fSU5URVJOQUxfMih1bmlm
b3JtMWYsIGxvbmcsIGZsb2F0KQorREVMRUdBVEVfVE9fSU5URVJOQUxfMyh1bmlmb3JtMWZ2LCBs
b25nLCBmbG9hdCosIGludCkKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzIodW5pZm9ybTFpLCBsb25n
LCBpbnQpCitERUxFR0FURV9UT19JTlRFUk5BTF8zKHVuaWZvcm0xaXYsIGxvbmcsIGludCosIGlu
dCkKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzModW5pZm9ybTJmLCBsb25nLCBmbG9hdCwgZmxvYXQp
CitERUxFR0FURV9UT19JTlRFUk5BTF8zKHVuaWZvcm0yZnYsIGxvbmcsIGZsb2F0KiwgaW50KQor
REVMRUdBVEVfVE9fSU5URVJOQUxfMyh1bmlmb3JtMmksIGxvbmcsIGludCwgaW50KQorREVMRUdB
VEVfVE9fSU5URVJOQUxfMyh1bmlmb3JtMml2LCBsb25nLCBpbnQqLCBpbnQpCitERUxFR0FURV9U
T19JTlRFUk5BTF80KHVuaWZvcm0zZiwgbG9uZywgZmxvYXQsIGZsb2F0LCBmbG9hdCkKK0RFTEVH
QVRFX1RPX0lOVEVSTkFMXzModW5pZm9ybTNmdiwgbG9uZywgZmxvYXQqLCBpbnQpCitERUxFR0FU
RV9UT19JTlRFUk5BTF80KHVuaWZvcm0zaSwgbG9uZywgaW50LCBpbnQsIGludCkKK0RFTEVHQVRF
X1RPX0lOVEVSTkFMXzModW5pZm9ybTNpdiwgbG9uZywgaW50KiwgaW50KQorREVMRUdBVEVfVE9f
SU5URVJOQUxfNSh1bmlmb3JtNGYsIGxvbmcsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0KQor
REVMRUdBVEVfVE9fSU5URVJOQUxfMyh1bmlmb3JtNGZ2LCBsb25nLCBmbG9hdCosIGludCkKK0RF
TEVHQVRFX1RPX0lOVEVSTkFMXzUodW5pZm9ybTRpLCBsb25nLCBpbnQsIGludCwgaW50LCBpbnQp
CitERUxFR0FURV9UT19JTlRFUk5BTF8zKHVuaWZvcm00aXYsIGxvbmcsIGludCosIGludCkKK0RF
TEVHQVRFX1RPX0lOVEVSTkFMXzQodW5pZm9ybU1hdHJpeDJmdiwgbG9uZywgYm9vbCwgZmxvYXQq
LCBpbnQpCitERUxFR0FURV9UT19JTlRFUk5BTF80KHVuaWZvcm1NYXRyaXgzZnYsIGxvbmcsIGJv
b2wsIGZsb2F0KiwgaW50KQorREVMRUdBVEVfVE9fSU5URVJOQUxfNCh1bmlmb3JtTWF0cml4NGZ2
LCBsb25nLCBib29sLCBmbG9hdCosIGludCkKKworREVMRUdBVEVfVE9fSU5URVJOQUxfMSh1c2VQ
cm9ncmFtLCBXZWJHTFByb2dyYW0qKQorREVMRUdBVEVfVE9fSU5URVJOQUxfMSh2YWxpZGF0ZVBy
b2dyYW0sIFdlYkdMUHJvZ3JhbSopCisKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzIodmVydGV4QXR0
cmliMWYsIHVuc2lnbmVkIGxvbmcsIGZsb2F0KQorREVMRUdBVEVfVE9fSU5URVJOQUxfMih2ZXJ0
ZXhBdHRyaWIxZnYsIHVuc2lnbmVkIGxvbmcsIGZsb2F0KikKK0RFTEVHQVRFX1RPX0lOVEVSTkFM
XzModmVydGV4QXR0cmliMmYsIHVuc2lnbmVkIGxvbmcsIGZsb2F0LCBmbG9hdCkKK0RFTEVHQVRF
X1RPX0lOVEVSTkFMXzIodmVydGV4QXR0cmliMmZ2LCB1bnNpZ25lZCBsb25nLCBmbG9hdCopCitE
RUxFR0FURV9UT19JTlRFUk5BTF80KHZlcnRleEF0dHJpYjNmLCB1bnNpZ25lZCBsb25nLCBmbG9h
dCwgZmxvYXQsIGZsb2F0KQorREVMRUdBVEVfVE9fSU5URVJOQUxfMih2ZXJ0ZXhBdHRyaWIzZnYs
IHVuc2lnbmVkIGxvbmcsIGZsb2F0KikKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzUodmVydGV4QXR0
cmliNGYsIHVuc2lnbmVkIGxvbmcsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0KQorREVMRUdB
VEVfVE9fSU5URVJOQUxfMih2ZXJ0ZXhBdHRyaWI0ZnYsIHVuc2lnbmVkIGxvbmcsIGZsb2F0KikK
K0RFTEVHQVRFX1RPX0lOVEVSTkFMXzYodmVydGV4QXR0cmliUG9pbnRlciwgdW5zaWduZWQgbG9u
ZywgaW50LCBpbnQsIGJvb2wsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpCisKK0RFTEVH
QVRFX1RPX0lOVEVSTkFMXzQodmlld3BvcnQsIGxvbmcsIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVu
c2lnbmVkIGxvbmcpCisKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzEoYmVnaW5QYWludCwgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0KikKK0RFTEVHQVRFX1RPX0lOVEVSTkFMKGVuZFBhaW50KQorCitERUxF
R0FURV9UT19JTlRFUk5BTF9SKGNyZWF0ZUJ1ZmZlciwgdW5zaWduZWQpCitERUxFR0FURV9UT19J
TlRFUk5BTF9SKGNyZWF0ZUZyYW1lYnVmZmVyLCB1bnNpZ25lZCkKK0RFTEVHQVRFX1RPX0lOVEVS
TkFMX1IoY3JlYXRlUHJvZ3JhbSwgdW5zaWduZWQpCitERUxFR0FURV9UT19JTlRFUk5BTF9SKGNy
ZWF0ZVJlbmRlcmJ1ZmZlciwgdW5zaWduZWQpCitERUxFR0FURV9UT19JTlRFUk5BTF8xUihjcmVh
dGVTaGFkZXIsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkKQorREVMRUdBVEVfVE9fSU5URVJOQUxf
UihjcmVhdGVUZXh0dXJlLCB1bnNpZ25lZCkKKworREVMRUdBVEVfVE9fSU5URVJOQUxfMShkZWxl
dGVCdWZmZXIsIHVuc2lnbmVkKQorREVMRUdBVEVfVE9fSU5URVJOQUxfMShkZWxldGVGcmFtZWJ1
ZmZlciwgdW5zaWduZWQpCitERUxFR0FURV9UT19JTlRFUk5BTF8xKGRlbGV0ZVByb2dyYW0sIHVu
c2lnbmVkKQorREVMRUdBVEVfVE9fSU5URVJOQUxfMShkZWxldGVSZW5kZXJidWZmZXIsIHVuc2ln
bmVkKQorREVMRUdBVEVfVE9fSU5URVJOQUxfMShkZWxldGVTaGFkZXIsIHVuc2lnbmVkKQorREVM
RUdBVEVfVE9fSU5URVJOQUxfMShkZWxldGVUZXh0dXJlLCB1bnNpZ25lZCkKIAotdm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6dW5pZm9ybU1hdHJpeDJmdihsb25nIGxvY2F0aW9uLCBib29sIHRyYW5z
cG9zZSwgZmxvYXQqIHZhbHVlLCBpbnQgc2l6ZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKLSAgICBnbFVuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIHNpemUsIHRyYW5zcG9zZSwgdmFs
dWUpOwotfQorREVMRUdBVEVfVE9fSU5URVJOQUxfMShzeW50aGVzaXplR0xFcnJvciwgdW5zaWdu
ZWQgbG9uZykKIAotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybU1hdHJpeDNmdihsb25n
IGxvY2F0aW9uLCBib29sIHRyYW5zcG9zZSwgZmxvYXQqIHZhbHVlLCBpbnQgc2l6ZSkKLXsKLSAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbFVuaWZvcm1NYXRyaXgzZnYobG9jYXRpb24s
IHNpemUsIHRyYW5zcG9zZSwgdmFsdWUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1
bmlmb3JtTWF0cml4NGZ2KGxvbmcgbG9jYXRpb24sIGJvb2wgdHJhbnNwb3NlLCBmbG9hdCogdmFs
dWUsIGludCBzaXplKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsVW5pZm9y
bU1hdHJpeDRmdihsb2NhdGlvbiwgc2l6ZSwgdHJhbnNwb3NlLCB2YWx1ZSk7Ci19Ci0KLUdMX1NB
TUVfTUVUSE9EXzFfWChVc2VQcm9ncmFtLCB1c2VQcm9ncmFtLCBXZWJHTFByb2dyYW0qKQotCi1H
TF9TQU1FX01FVEhPRF8xX1goVmFsaWRhdGVQcm9ncmFtLCB2YWxpZGF0ZVByb2dyYW0sIFdlYkdM
UHJvZ3JhbSopCi0KLUdMX1NBTUVfTUVUSE9EXzIoVmVydGV4QXR0cmliMWYsIHZlcnRleEF0dHJp
YjFmLCB1bnNpZ25lZCBsb25nLCBmbG9hdCkKLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmVy
dGV4QXR0cmliMWZ2KHVuc2lnbmVkIGxvbmcgaW5keCwgZmxvYXQqIHZhbHVlcykKLXsKLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbFZlcnRleEF0dHJpYjFmdihpbmR4LCB2YWx1ZXMp
OwotfQotCi1HTF9TQU1FX01FVEhPRF8zKFZlcnRleEF0dHJpYjJmLCB2ZXJ0ZXhBdHRyaWIyZiwg
dW5zaWduZWQgbG9uZywgZmxvYXQsIGZsb2F0KQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2
ZXJ0ZXhBdHRyaWIyZnYodW5zaWduZWQgbG9uZyBpbmR4LCBmbG9hdCogdmFsdWVzKQotewotICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsVmVydGV4QXR0cmliMmZ2KGluZHgsIHZhbHVl
cyk7Ci19Ci0KLUdMX1NBTUVfTUVUSE9EXzQoVmVydGV4QXR0cmliM2YsIHZlcnRleEF0dHJpYjNm
LCB1bnNpZ25lZCBsb25nLCBmbG9hdCwgZmxvYXQsIGZsb2F0KQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjp2ZXJ0ZXhBdHRyaWIzZnYodW5zaWduZWQgbG9uZyBpbmR4LCBmbG9hdCogdmFsdWVz
KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsVmVydGV4QXR0cmliM2Z2KGlu
ZHgsIHZhbHVlcyk7Ci19Ci0KLUdMX1NBTUVfTUVUSE9EXzUoVmVydGV4QXR0cmliNGYsIHZlcnRl
eEF0dHJpYjRmLCB1bnNpZ25lZCBsb25nLCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCkKLQot
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmliNGZ2KHVuc2lnbmVkIGxvbmcgaW5k
eCwgZmxvYXQqIHZhbHVlcykKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbFZl
cnRleEF0dHJpYjRmdihpbmR4LCB2YWx1ZXMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNE
Ojp2ZXJ0ZXhBdHRyaWJQb2ludGVyKHVuc2lnbmVkIGxvbmcgaW5keCwgaW50IHNpemUsIGludCB0
eXBlLCBib29sIG5vcm1hbGl6ZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIGxvbmcgc3RyaWRlLCB1bnNpZ25lZCBsb25nIG9mZnNldCkKLXsK
LSAgICBtX2ludGVybmFsLT52ZXJ0ZXhBdHRyaWJQb2ludGVyKGluZHgsIHNpemUsIHR5cGUsIG5v
cm1hbGl6ZWQsIHN0cmlkZSwgb2Zmc2V0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
dmlld3BvcnQobG9uZyB4LCBsb25nIHksIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxv
bmcgaGVpZ2h0KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1faW50ZXJuYWwt
PnZpZXdwb3J0SW1wbCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKLX0KLQotfQorfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKDNEX0NBTlZBUykKSW5kZXg6IFdlYktpdC9j
aHJvbWl1bS9zcmMvV2ViR3JhcGhpY3NDb250ZXh0M0QuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktp
dC9jaHJvbWl1bS9zcmMvV2ViR3JhcGhpY3NDb250ZXh0M0QuY3BwCShyZXZpc2lvbiAwKQorKysg
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJHcmFwaGljc0NvbnRleHQzRC5jcHAJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
KyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
KyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICog
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
CisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViR3JhcGhp
Y3NDb250ZXh0M0QuaCIKKworI2lmIEVOQUJMRSgzRF9DQU5WQVMpCisKKyNpbmNsdWRlICJXZWJH
cmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitX
ZWJHcmFwaGljc0NvbnRleHQzRCogV2ViR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZURlZmF1bHQo
KQoreworI2lmIEVOQUJMRSgzRF9DQU5WQVMpCisgICAgcmV0dXJuIG5ldyBXZWJHcmFwaGljc0Nv
bnRleHQzRERlZmF1bHRJbXBsKCk7CisjZWxzZQorICAgIHJldHVybiAwOworI2VuZGlmCit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKDNEX0NBTlZBUykKSW5k
ZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJHcmFwaGljc0NvbnRleHQz
RERlZmF1bHRJbXBsLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
R3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
MTE4OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0Ogor
ICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisg
KiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdv
b2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRSgzRF9DQU5WQVMpCisKKyNp
bmNsdWRlICJXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsLmgiCisKKyNpbmNsdWRlICJO
b3RJbXBsZW1lbnRlZC5oIgorCisjaWYgT1MoTElOVVgpCisjaW5jbHVkZSA8ZGxmY24uaD4KKyNl
bmRpZgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworLy8gVW5jb21tZW50IHRoaXMgdG8gcmVuZGVy
IHRvIGEgc2VwYXJhdGUgd2luZG93IGZvciBkZWJ1Z2dpbmcKKy8vICNkZWZpbmUgUkVOREVSX1RP
X0RFQlVHR0lOR19XSU5ET1cKKworI2lmIE9TKERBUldJTikKKyNkZWZpbmUgVVNFX1RFWFRVUkVf
UkVDVEFOR0xFX0ZPUl9GUkFNRUJVRkZFUgorI2VuZGlmCisKK2Jvb2wgV2ViR3JhcGhpY3NDb250
ZXh0M0REZWZhdWx0SW1wbDo6c19pbml0aWFsaXplZEdMRVcgPSBmYWxzZTsKKworI2lmIE9TKExJ
TlVYKQorV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6R0xDb25uZWN0aW9uKiBXZWJH
cmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpzX2dsID0gMDsKKworV2ViR3JhcGhpY3NDb250
ZXh0M0REZWZhdWx0SW1wbDo6R0xDb25uZWN0aW9uKiBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1
bHRJbXBsOjpHTENvbm5lY3Rpb246OmNyZWF0ZSgpCit7CisgICAgRGlzcGxheSogZHB5ID0gWE9w
ZW5EaXNwbGF5KDApOworICAgIGlmICghZHB5KSB7CisgICAgICAgIHByaW50ZigiR3JhcGhpY3ND
b250ZXh0M0Q6IGVycm9yIG9wZW5pbmcgWCBkaXNwbGF5XG4iKTsKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgfQorCisgICAgLy8gV2UgdXNlIFJUTERfR0xPQkFMIHNlbWFudGljcyBzbyB0aGF0IEdM
RVcgaW5pdGlhbGl6YXRpb24gd29ya3M7CisgICAgLy8gR0xFVyBleHBlY3RzIHRvIGJlIGFibGUg
dG8gb3BlbiB0aGUgY3VycmVudCBwcm9jZXNzJ3MgaGFuZGxlCisgICAgLy8gYW5kIGRvIGRsc3lt
J3Mgb2YgR0wgZW50cnkgcG9pbnRzIGZyb20gdGhlcmUuCisgICAgdm9pZCogbGliR0wgPSBkbG9w
ZW4oImxpYkdMLnNvLjEiLCBSVExEX0xBWlkgfCBSVExEX0dMT0JBTCk7CisgICAgaWYgKCFsaWJH
TCkgeworICAgICAgICBYQ2xvc2VEaXNwbGF5KGRweSk7CisgICAgICAgIHByaW50ZigiR3JhcGhp
Y3NDb250ZXh0M0Q6IGVycm9yIG9wZW5pbmcgbGliR0wuc28uMTogJXNcbiIsIGRsZXJyb3IoKSk7
CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIFBGTkdMWENIT09TRUZCQ09ORklHUFJP
QyBjaG9vc2VGQkNvbmZpZyA9IChQRk5HTFhDSE9PU0VGQkNPTkZJR1BST0MpIGRsc3ltKGxpYkdM
LCAiZ2xYQ2hvb3NlRkJDb25maWciKTsKKyAgICBQRk5HTFhDUkVBVEVORVdDT05URVhUUFJPQyBj
cmVhdGVOZXdDb250ZXh0ID0gKFBGTkdMWENSRUFURU5FV0NPTlRFWFRQUk9DKSBkbHN5bShsaWJH
TCwgImdsWENyZWF0ZU5ld0NvbnRleHQiKTsKKyAgICBQRk5HTFhDUkVBVEVQQlVGRkVSUFJPQyBj
cmVhdGVQYnVmZmVyID0gKFBGTkdMWENSRUFURVBCVUZGRVJQUk9DKSBkbHN5bShsaWJHTCwgImds
WENyZWF0ZVBidWZmZXIiKTsKKyAgICBQRk5HTFhERVNUUk9ZUEJVRkZFUlBST0MgZGVzdHJveVBi
dWZmZXIgPSAoUEZOR0xYREVTVFJPWVBCVUZGRVJQUk9DKSBkbHN5bShsaWJHTCwgImdsWERlc3Ry
b3lQYnVmZmVyIik7CisgICAgUEZOR0xYTUFLRUNVUlJFTlRQUk9DIG1ha2VDdXJyZW50ID0gKFBG
TkdMWE1BS0VDVVJSRU5UUFJPQykgZGxzeW0obGliR0wsICJnbFhNYWtlQ3VycmVudCIpOworICAg
IFBGTkdMWERFU1RST1lDT05URVhUUFJPQyBkZXN0cm95Q29udGV4dCA9IChQRk5HTFhERVNUUk9Z
Q09OVEVYVFBST0MpIGRsc3ltKGxpYkdMLCAiZ2xYRGVzdHJveUNvbnRleHQiKTsKKyAgICBQRk5H
TFhHRVRDVVJSRU5UQ09OVEVYVFBST0MgZ2V0Q3VycmVudENvbnRleHQgPSAoUEZOR0xYR0VUQ1VS
UkVOVENPTlRFWFRQUk9DKSBkbHN5bShsaWJHTCwgImdsWEdldEN1cnJlbnRDb250ZXh0Iik7Cisg
ICAgaWYgKCFjaG9vc2VGQkNvbmZpZyB8fCAhY3JlYXRlTmV3Q29udGV4dCB8fCAhY3JlYXRlUGJ1
ZmZlcgorICAgICAgICB8fCAhZGVzdHJveVBidWZmZXIgfHwgIW1ha2VDdXJyZW50IHx8ICFkZXN0
cm95Q29udGV4dAorICAgICAgICB8fCAhZ2V0Q3VycmVudENvbnRleHQpIHsKKyAgICAgICAgWENs
b3NlRGlzcGxheShkcHkpOworICAgICAgICBkbGNsb3NlKGxpYkdMKTsKKyAgICAgICAgcHJpbnRm
KCJHcmFwaGljc0NvbnRleHQzRDogZXJyb3IgbG9va2luZyB1cCBib290c3RyYXBwaW5nIGVudHJ5
IHBvaW50c1xuIik7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICByZXR1cm4gbmV3IEdM
Q29ubmVjdGlvbihkcHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGliR0wsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY2hvb3NlRkJDb25maWcsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY3JlYXRlTmV3Q29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjcmVhdGVQYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Ryb3lQYnVm
ZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ha2VDdXJyZW50LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGRlc3Ryb3lDb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGdldEN1cnJlbnRDb250ZXh0KTsKK30KKworV2ViR3JhcGhpY3NDb250ZXh0M0REZWZh
dWx0SW1wbDo6R0xDb25uZWN0aW9uOjp+R0xDb25uZWN0aW9uKCkKK3sKKyAgICBYQ2xvc2VEaXNw
bGF5KG1fZGlzcGxheSk7CisgICAgZGxjbG9zZShtX2xpYkdMKTsKK30KKworI2VuZGlmIC8vIE9T
KExJTlVYKQorCitXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpWZXJ0ZXhBdHRyaWJQ
b2ludGVyU3RhdGU6OlZlcnRleEF0dHJpYlBvaW50ZXJTdGF0ZSgpCisgICAgOiBlbmFibGVkKGZh
bHNlKQorICAgICwgYnVmZmVyKDApCisgICAgLCBpbmR4KDApCisgICAgLCBzaXplKDApCisgICAg
LCB0eXBlKDApCisgICAgLCBub3JtYWxpemVkKGZhbHNlKQorICAgICwgc3RyaWRlKDApCisgICAg
LCBvZmZzZXQoMCkKK3sKK30KKworV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6V2Vi
R3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbCgpCisgICAgOiBtX2luaXRpYWxpemVkKGZhbHNl
KQorICAgICwgbV90ZXh0dXJlKDApCisgICAgLCBtX2ZibygwKQorICAgICwgbV9kZXB0aEJ1ZmZl
cigwKQorICAgICwgbV9ib3VuZEZCTygwKQorI2lmZGVmIEZMSVBfRlJBTUVCVUZGRVJfVkVSVElD
QUxMWQorICAgICwgbV9zY2FubGluZSgwKQorI2VuZGlmCisgICAgLCBtX2JvdW5kQXJyYXlCdWZm
ZXIoMCkKKyNpZiBPUyhXSU5ET1dTKQorICAgICwgbV9jYW52YXNXaW5kb3coMCkKKyAgICAsIG1f
Y2FudmFzREMoMCkKKyAgICAsIG1fY29udGV4dE9iaigwKQorI2VsaWYgUExBVEZPUk0oQ0cpCisg
ICAgLCBtX3BidWZmZXIoMCkKKyAgICAsIG1fY29udGV4dE9iaigwKQorICAgICwgbV9yZW5kZXJP
dXRwdXQoMCkKKyNlbGlmIE9TKExJTlVYKQorICAgICwgbV9jb250ZXh0T2JqKDApCisgICAgLCBt
X3BidWZmZXIoMCkKKyNlbHNlCisjZXJyb3IgTXVzdCBwb3J0IHRvIHlvdXIgcGxhdGZvcm0KKyNl
bmRpZgoreworfQorCitXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjp+V2ViR3JhcGhp
Y3NDb250ZXh0M0REZWZhdWx0SW1wbCgpCit7CisgICAgaWYgKG1faW5pdGlhbGl6ZWQpIHsKKyAg
ICAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisjaWZuZGVmIFJFTkRFUl9UT19ERUJVR0dJTkdf
V0lORE9XCisgICAgICAgIGdsRGVsZXRlUmVuZGVyYnVmZmVyc0VYVCgxLCAmbV9kZXB0aEJ1ZmZl
cik7CisgICAgICAgIGdsRGVsZXRlVGV4dHVyZXMoMSwgJm1fdGV4dHVyZSk7CisjaWZkZWYgRkxJ
UF9GUkFNRUJVRkZFUl9WRVJUSUNBTExZCisgICAgICAgIGlmIChtX3NjYW5saW5lKQorICAgICAg
ICAgICAgZGVsZXRlW10gbV9zY2FubGluZTsKKyNlbmRpZgorICAgICAgICBnbERlbGV0ZUZyYW1l
YnVmZmVyc0VYVCgxLCAmbV9mYm8pOworI2VuZGlmIC8vICFSRU5ERVJfVE9fREVCVUdHSU5HX1dJ
TkRPVworI2lmIE9TKFdJTkRPV1MpCisgICAgICAgIHdnbE1ha2VDdXJyZW50KDAsIDApOworICAg
ICAgICB3Z2xEZWxldGVDb250ZXh0KG1fY29udGV4dE9iaik7CisgICAgICAgIFJlbGVhc2VEQyht
X2NhbnZhc1dpbmRvdywgbV9jYW52YXNEQyk7CisgICAgICAgIERlc3Ryb3lXaW5kb3cobV9jYW52
YXNXaW5kb3cpOworI2VsaWYgUExBVEZPUk0oQ0cpCisgICAgICAgIENHTFNldEN1cnJlbnRDb250
ZXh0KDApOworICAgICAgICBDR0xEZXN0cm95Q29udGV4dChtX2NvbnRleHRPYmopOworICAgICAg
ICBDR0xEZXN0cm95UEJ1ZmZlcihtX3BidWZmZXIpOworICAgICAgICBpZiAobV9yZW5kZXJPdXRw
dXQpCisgICAgICAgICAgICBkZWxldGVbXSBtX3JlbmRlck91dHB1dDsKKyNlbGlmIE9TKExJTlVY
KQorICAgICAgICBzX2dsLT5tYWtlQ3VycmVudCgwLCAwKTsKKyAgICAgICAgc19nbC0+ZGVzdHJv
eUNvbnRleHQobV9jb250ZXh0T2JqKTsKKyAgICAgICAgc19nbC0+ZGVzdHJveVBidWZmZXIobV9w
YnVmZmVyKTsKKyNlbHNlCisjZXJyb3IgTXVzdCBwb3J0IHRvIHlvdXIgcGxhdGZvcm0KKyNlbmRp
ZgorICAgICAgICBtX2NvbnRleHRPYmogPSAwOworICAgIH0KK30KKworYm9vbCBXZWJHcmFwaGlj
c0NvbnRleHQzRERlZmF1bHRJbXBsOjppbml0aWFsaXplKFdlYkdyYXBoaWNzQ29udGV4dDNEOjpB
dHRyaWJ1dGVzIGF0dHJpYnV0ZXMpCit7CisgICAgLy8gRklYTUU6IHdlIG5lZWQgdG8gdGFrZSBp
bnRvIGFjY291bnQgdGhlIHVzZXIncyByZXF1ZXN0ZWQKKyAgICAvLyBjb250ZXh0IGNyZWF0aW9u
IGF0dHJpYnV0ZXMsIGluIHBhcnRpY3VsYXIgc3RlbmNpbCBhbmQKKyAgICAvLyBhbnRpYWxpYXMs
IGFuZCBkZXRlcm1pbmUgd2hpY2ggY291bGQgYW5kIGNvdWxkIG5vdCBiZSBob25vcmVkCisgICAg
Ly8gYmFzZWQgb24gdGhlIGNhcGFiaWxpdGllcyBvZiB0aGUgT3BlbkdMIGltcGxlbWVudGF0aW9u
LgorICAgIG1fYXR0cmlidXRlcy5hbHBoYSA9IHRydWU7CisgICAgbV9hdHRyaWJ1dGVzLmRlcHRo
ID0gdHJ1ZTsKKyAgICBtX2F0dHJpYnV0ZXMuc3RlbmNpbCA9IGZhbHNlOworICAgIG1fYXR0cmli
dXRlcy5hbnRpYWxpYXMgPSBmYWxzZTsKKyAgICBtX2F0dHJpYnV0ZXMucHJlbXVsdGlwbGllZEFs
cGhhID0gdHJ1ZTsKKworI2lmIE9TKFdJTkRPV1MpCisgICAgV05EQ0xBU1Mgd2M7CisgICAgaWYg
KCFHZXRDbGFzc0luZm8oR2V0TW9kdWxlSGFuZGxlKDApLCBMIkNBTlZBU0dMIiwgJndjKSkgewor
ICAgICAgICBaZXJvTWVtb3J5KCZ3Yywgc2l6ZW9mKFdORENMQVNTKSk7CisgICAgICAgIHdjLnN0
eWxlID0gQ1NfT1dOREM7CisgICAgICAgIHdjLmhJbnN0YW5jZSA9IEdldE1vZHVsZUhhbmRsZSgw
KTsKKyAgICAgICAgd2MubHBmblduZFByb2MgPSBEZWZXaW5kb3dQcm9jOworICAgICAgICB3Yy5s
cHN6Q2xhc3NOYW1lID0gTCJDQU5WQVNHTCI7CisKKyAgICAgICAgaWYgKCFSZWdpc3RlckNsYXNz
KCZ3YykpIHsKKyAgICAgICAgICAgIHByaW50ZigiV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0
SW1wbDogUmVnaXN0ZXJDbGFzcyBmYWlsZWRcbiIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICB9CisgICAgfQorCisgICAgbV9jYW52YXNXaW5kb3cgPSBDcmVhdGVXaW5kb3co
TCJDQU5WQVNHTCIsIEwiQ0FOVkFTR0wiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFdTX0NBUFRJT04sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1dfVVNF
REVGQVVMVCwgQ1dfVVNFREVGQVVMVCwgQ1dfVVNFREVGQVVMVCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBDV19VU0VERUZBVUxULCAwLCAwLCBHZXRNb2R1bGVIYW5kbGUoMCks
IDApOworICAgIGlmICghbV9jYW52YXNXaW5kb3cpIHsKKyAgICAgICAgcHJpbnRmKCJXZWJHcmFw
aGljc0NvbnRleHQzRERlZmF1bHRJbXBsOiBDcmVhdGVXaW5kb3cgZmFpbGVkXG4iKTsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIGdldCB0aGUgZGV2aWNlIGNvbnRleHQK
KyAgICBtX2NhbnZhc0RDID0gR2V0REMobV9jYW52YXNXaW5kb3cpOworICAgIGlmICghbV9jYW52
YXNEQykgeworICAgICAgICBwcmludGYoIldlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6
IEdldERDIGZhaWxlZFxuIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAv
LyBmaW5kIGRlZmF1bHQgcGl4ZWwgZm9ybWF0CisgICAgUElYRUxGT1JNQVRERVNDUklQVE9SIHBm
ZDsKKyAgICBaZXJvTWVtb3J5KCZwZmQsIHNpemVvZihQSVhFTEZPUk1BVERFU0NSSVBUT1IpKTsK
KyAgICBwZmQublNpemUgPSBzaXplb2YoUElYRUxGT1JNQVRERVNDUklQVE9SKTsKKyAgICBwZmQu
blZlcnNpb24gPSAxOworI2lmZGVmIFJFTkRFUl9UT19ERUJVR0dJTkdfV0lORE9XCisgICAgcGZk
LmR3RmxhZ3MgPSBQRkRfRFJBV19UT19XSU5ET1cgfCBQRkRfU1VQUE9SVF9PUEVOR0wgfCBQRkRf
RE9VQkxFQlVGRkVSOworI2Vsc2UKKyAgICBwZmQuZHdGbGFncyA9IFBGRF9EUkFXX1RPX1dJTkRP
VyB8IFBGRF9TVVBQT1JUX09QRU5HTDsKKyNlbmRpZgorICAgIGludCBwaXhlbGZvcm1hdCA9IENo
b29zZVBpeGVsRm9ybWF0KG1fY2FudmFzREMsICZwZmQpOworCisgICAgLy8gc2V0IHRoZSBwaXhl
bCBmb3JtYXQgZm9yIHRoZSBkYworICAgIGlmICghU2V0UGl4ZWxGb3JtYXQobV9jYW52YXNEQywg
cGl4ZWxmb3JtYXQsICZwZmQpKSB7CisgICAgICAgIHByaW50ZigiV2ViR3JhcGhpY3NDb250ZXh0
M0REZWZhdWx0SW1wbDogU2V0UGl4ZWxGb3JtYXQgZmFpbGVkXG4iKTsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKworICAgIC8vIGNyZWF0ZSByZW5kZXJpbmcgY29udGV4dAorICAgIG1f
Y29udGV4dE9iaiA9IHdnbENyZWF0ZUNvbnRleHQobV9jYW52YXNEQyk7CisgICAgaWYgKCFtX2Nv
bnRleHRPYmopIHsKKyAgICAgICAgcHJpbnRmKCJXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJ
bXBsOiB3Z2xDcmVhdGVDb250ZXh0IGZhaWxlZFxuIik7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisKKyAgICBpZiAoIXdnbE1ha2VDdXJyZW50KG1fY2FudmFzREMsIG1fY29udGV4dE9i
aikpIHsKKyAgICAgICAgcHJpbnRmKCJXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOiB3
Z2xNYWtlQ3VycmVudCBmYWlsZWRcbiIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
CisjaWZkZWYgUkVOREVSX1RPX0RFQlVHR0lOR19XSU5ET1cKKyAgICB0eXBlZGVmIEJPT0wgKFdJ
TkFQSSAqIFBGTldHTFNXQVBJTlRFUlZBTEVYVFBST0MpIChpbnQgaW50ZXJ2YWwpOworICAgIFBG
TldHTFNXQVBJTlRFUlZBTEVYVFBST0Mgc2V0U3dhcEludGVydmFsID0gMDsKKyAgICBzZXRTd2Fw
SW50ZXJ2YWwgPSAoUEZOV0dMU1dBUElOVEVSVkFMRVhUUFJPQykgd2dsR2V0UHJvY0FkZHJlc3Mo
IndnbFN3YXBJbnRlcnZhbEVYVCIpOworICAgIGlmIChzZXRTd2FwSW50ZXJ2YWwpCisgICAgICAg
IHNldFN3YXBJbnRlcnZhbCgxKTsKKyNlbmRpZiAvLyBSRU5ERVJfVE9fREVCVUdHSU5HX1dJTkRP
VworCisjZWxpZiBQTEFURk9STShDRykKKyAgICAvLyBDcmVhdGUgYSAxeDEgcGJ1ZmZlciBhbmQg
YXNzb2NpYXRlZCBjb250ZXh0IHRvIGJvb3RzdHJhcCB0aGluZ3MKKyAgICBDR0xQaXhlbEZvcm1h
dEF0dHJpYnV0ZSBhdHRyaWJzW10gPSB7CisgICAgICAgIChDR0xQaXhlbEZvcm1hdEF0dHJpYnV0
ZSkga0NHTFBGQVBCdWZmZXIsCisgICAgICAgIChDR0xQaXhlbEZvcm1hdEF0dHJpYnV0ZSkgMAor
ICAgIH07CisgICAgQ0dMUGl4ZWxGb3JtYXRPYmogcGl4ZWxGb3JtYXQ7CisgICAgR0xpbnQgbnVt
UGl4ZWxGb3JtYXRzOworICAgIGlmIChDR0xDaG9vc2VQaXhlbEZvcm1hdChhdHRyaWJzLCAmcGl4
ZWxGb3JtYXQsICZudW1QaXhlbEZvcm1hdHMpICE9IGtDR0xOb0Vycm9yKSB7CisgICAgICAgIHBy
aW50ZigiV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDogZXJyb3IgY2hvb3NpbmcgcGl4
ZWwgZm9ybWF0XG4iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBpZiAoIXBp
eGVsRm9ybWF0KSB7CisgICAgICAgIHByaW50ZigiV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0
SW1wbDogbm8gcGl4ZWwgZm9ybWF0IHNlbGVjdGVkXG4iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKyAgICBDR0xDb250ZXh0T2JqIGNvbnRleHQ7CisgICAgQ0dMRXJyb3IgcmVzID0g
Q0dMQ3JlYXRlQ29udGV4dChwaXhlbEZvcm1hdCwgMCwgJmNvbnRleHQpOworICAgIENHTERlc3Ry
b3lQaXhlbEZvcm1hdChwaXhlbEZvcm1hdCk7CisgICAgaWYgKHJlcyAhPSBrQ0dMTm9FcnJvcikg
eworICAgICAgICBwcmludGYoIldlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6IGVycm9y
IGNyZWF0aW5nIGNvbnRleHRcbiIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAg
IENHTFBCdWZmZXJPYmogcGJ1ZmZlcjsKKyAgICBpZiAoQ0dMQ3JlYXRlUEJ1ZmZlcigxLCAxLCBH
TF9URVhUVVJFXzJELCBHTF9SR0JBLCAwLCAmcGJ1ZmZlcikgIT0ga0NHTE5vRXJyb3IpIHsKKyAg
ICAgICAgQ0dMRGVzdHJveUNvbnRleHQoY29udGV4dCk7CisgICAgICAgIHByaW50ZigiV2ViR3Jh
cGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDogZXJyb3IgY3JlYXRpbmcgcGJ1ZmZlclxuIik7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgaWYgKENHTFNldFBCdWZmZXIoY29udGV4
dCwgcGJ1ZmZlciwgMCwgMCwgMCkgIT0ga0NHTE5vRXJyb3IpIHsKKyAgICAgICAgQ0dMRGVzdHJv
eUNvbnRleHQoY29udGV4dCk7CisgICAgICAgIENHTERlc3Ryb3lQQnVmZmVyKHBidWZmZXIpOwor
ICAgICAgICBwcmludGYoIldlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6IGVycm9yIGF0
dGFjaGluZyBwYnVmZmVyIHRvIGNvbnRleHRcbiIpOworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorICAgIGlmIChDR0xTZXRDdXJyZW50Q29udGV4dChjb250ZXh0KSAhPSBrQ0dMTm9FcnJv
cikgeworICAgICAgICBDR0xEZXN0cm95Q29udGV4dChjb250ZXh0KTsKKyAgICAgICAgQ0dMRGVz
dHJveVBCdWZmZXIocGJ1ZmZlcik7CisgICAgICAgIHByaW50ZigiV2ViR3JhcGhpY3NDb250ZXh0
M0REZWZhdWx0SW1wbDogZXJyb3IgbWFraW5nIGNvbnRleHQgY3VycmVudFxuIik7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgbV9wYnVmZmVyID0gcGJ1ZmZlcjsKKyAgICBtX2Nv
bnRleHRPYmogPSBjb250ZXh0OworI2VsaWYgT1MoTElOVVgpCisgICAgaWYgKCFzX2dsKSB7Cisg
ICAgICAgIHNfZ2wgPSBHTENvbm5lY3Rpb246OmNyZWF0ZSgpOworICAgICAgICBpZiAoIXNfZ2wp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaW50IGNvbmZpZ0F0dHJz
W10gPSB7CisgICAgICAgIEdMWF9EUkFXQUJMRV9UWVBFLAorICAgICAgICBHTFhfUEJVRkZFUl9C
SVQsCisgICAgICAgIEdMWF9SRU5ERVJfVFlQRSwKKyAgICAgICAgR0xYX1JHQkFfQklULAorICAg
ICAgICBHTFhfRE9VQkxFQlVGRkVSLAorICAgICAgICAwLAorICAgICAgICAwCisgICAgfTsKKyAg
ICBpbnQgbmVsZW1lbnRzID0gMDsKKyAgICBHTFhGQkNvbmZpZyogY29uZmlnID0gc19nbC0+Y2hv
b3NlRkJDb25maWcoMCwgY29uZmlnQXR0cnMsICZuZWxlbWVudHMpOworICAgIGlmICghY29uZmln
KSB7CisgICAgICAgIHByaW50ZigiV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDogZ2xY
Q2hvb3NlRkJDb25maWcgZmFpbGVkXG4iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KyAgICBpZiAoIW5lbGVtZW50cykgeworICAgICAgICBwcmludGYoIldlYkdyYXBoaWNzQ29udGV4
dDNERGVmYXVsdEltcGw6IGdsWENob29zZUZCQ29uZmlnIHJldHVybmVkIDAgZWxlbWVudHNcbiIp
OworICAgICAgICBYRnJlZShjb25maWcpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
ICAgIEdMWENvbnRleHQgY29udGV4dCA9IHNfZ2wtPmNyZWF0ZU5ld0NvbnRleHQoY29uZmlnWzBd
LCBHTFhfUkdCQV9UWVBFLCAwLCBUcnVlKTsKKyAgICBpZiAoIWNvbnRleHQpIHsKKyAgICAgICAg
cHJpbnRmKCJXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOiBnbFhDcmVhdGVOZXdDb250
ZXh0IGZhaWxlZFxuIik7CisgICAgICAgIFhGcmVlKGNvbmZpZyk7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisgICAgaW50IHBidWZmZXJBdHRyc1tdID0geworICAgICAgICBHTFhfUEJV
RkZFUl9XSURUSCwKKyAgICAgICAgMSwKKyAgICAgICAgR0xYX1BCVUZGRVJfSEVJR0hULAorICAg
ICAgICAxLAorICAgICAgICAwCisgICAgfTsKKyAgICBHTFhQYnVmZmVyIHBidWZmZXIgPSBzX2ds
LT5jcmVhdGVQYnVmZmVyKGNvbmZpZ1swXSwgcGJ1ZmZlckF0dHJzKTsKKyAgICBYRnJlZShjb25m
aWcpOworICAgIGlmICghcGJ1ZmZlcikgeworICAgICAgICBwcmludGYoIldlYkdyYXBoaWNzQ29u
dGV4dDNERGVmYXVsdEltcGw6IGdseENyZWF0ZVBidWZmZXIgZmFpbGVkXG4iKTsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBpZiAoIXNfZ2wtPm1ha2VDdXJyZW50KHBidWZmZXIs
IGNvbnRleHQpKSB7CisgICAgICAgIHByaW50ZigiV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0
SW1wbDogZ2xYTWFrZUN1cnJlbnQgZmFpbGVkXG4iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKyAgICBtX2NvbnRleHRPYmogPSBjb250ZXh0OworICAgIG1fcGJ1ZmZlciA9IHBidWZm
ZXI7CisjZWxzZQorI2Vycm9yIE11c3QgcG9ydCB0byB5b3VyIHBsYXRmb3JtCisjZW5kaWYKKwor
ICAgIGlmICghc19pbml0aWFsaXplZEdMRVcpIHsKKyAgICAgICAgLy8gSW5pdGlhbGl6ZSBHTEVX
IGFuZCBjaGVjayBmb3IgR0wgMi4wIHN1cHBvcnQgYnkgdGhlIGRyaXZlcnMuCisgICAgICAgIEdM
ZW51bSBnbGV3SW5pdFJlc3VsdCA9IGdsZXdJbml0KCk7CisgICAgICAgIGlmIChnbGV3SW5pdFJl
c3VsdCAhPSBHTEVXX09LKSB7CisgICAgICAgICAgICBwcmludGYoIldlYkdyYXBoaWNzQ29udGV4
dDNERGVmYXVsdEltcGw6IEdMRVcgaW5pdGlhbGl6YXRpb24gZmFpbGVkXG4iKTsKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIWdsZXdJc1N1cHBvcnRl
ZCgiR0xfVkVSU0lPTl8yXzAiKSkgeworICAgICAgICAgICAgcHJpbnRmKCJXZWJHcmFwaGljc0Nv
bnRleHQzRERlZmF1bHRJbXBsOiBPcGVuR0wgMi4wIG5vdCBzdXBwb3J0ZWRcbiIpOworICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHNfaW5pdGlhbGl6ZWRHTEVX
ID0gdHJ1ZTsKKyAgICB9CisKKyAgICBtX2luaXRpYWxpemVkID0gdHJ1ZTsKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworYm9vbCBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjptYWtlQ29u
dGV4dEN1cnJlbnQoKQoreworI2lmIE9TKFdJTkRPV1MpCisgICAgaWYgKHdnbEdldEN1cnJlbnRD
b250ZXh0KCkgIT0gbV9jb250ZXh0T2JqKQorICAgICAgICBpZiAod2dsTWFrZUN1cnJlbnQobV9j
YW52YXNEQywgbV9jb250ZXh0T2JqKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworI2VsaWYg
UExBVEZPUk0oQ0cpCisgICAgaWYgKENHTEdldEN1cnJlbnRDb250ZXh0KCkgIT0gbV9jb250ZXh0
T2JqKQorICAgICAgICBpZiAoQ0dMU2V0Q3VycmVudENvbnRleHQobV9jb250ZXh0T2JqKSA9PSBr
Q0dMTm9FcnJvcikKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworI2VsaWYgT1MoTElOVVgpCisg
ICAgaWYgKHNfZ2wtPmdldEN1cnJlbnRDb250ZXh0KCkgIT0gbV9jb250ZXh0T2JqKQorICAgICAg
ICBpZiAoc19nbC0+bWFrZUN1cnJlbnQobV9wYnVmZmVyLCBtX2NvbnRleHRPYmopKQorICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisjZWxzZQorI2Vycm9yIE11c3QgcG9ydCB0byB5b3VyIHBsYXRm
b3JtCisjZW5kaWYKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2ludCBXZWJHcmFwaGljc0NvbnRl
eHQzRERlZmF1bHRJbXBsOjp3aWR0aCgpCit7CisgICAgcmV0dXJuIG1fY2FjaGVkV2lkdGg7Cit9
CisKK2ludCBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpoZWlnaHQoKQoreworICAg
IHJldHVybiBtX2NhY2hlZEhlaWdodDsKK30KKworaW50IFdlYkdyYXBoaWNzQ29udGV4dDNERGVm
YXVsdEltcGw6OnNpemVJbkJ5dGVzKGludCB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkgewor
ICAgIGNhc2UgR0xfQllURToKKyAgICAgICAgcmV0dXJuIHNpemVvZihHTGJ5dGUpOworICAgIGNh
c2UgR0xfVU5TSUdORURfQllURToKKyAgICAgICAgcmV0dXJuIHNpemVvZihHTHVieXRlKTsKKyAg
ICBjYXNlIEdMX1NIT1JUOgorICAgICAgICByZXR1cm4gc2l6ZW9mKEdMc2hvcnQpOworICAgIGNh
c2UgR0xfVU5TSUdORURfU0hPUlQ6CisgICAgICAgIHJldHVybiBzaXplb2YoR0x1c2hvcnQpOwor
ICAgIGNhc2UgR0xfSU5UOgorICAgICAgICByZXR1cm4gc2l6ZW9mKEdMaW50KTsKKyAgICBjYXNl
IEdMX1VOU0lHTkVEX0lOVDoKKyAgICAgICAgcmV0dXJuIHNpemVvZihHTHVpbnQpOworICAgIGNh
c2UgR0xfRkxPQVQ6CisgICAgICAgIHJldHVybiBzaXplb2YoR0xmbG9hdCk7CisgICAgfQorICAg
IHJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNyZWF0ZVRleHR1cmVPYmplY3QoR0xlbnVtIHRh
cmdldCkKK3sKKyAgICBHTHVpbnQgdGV4dHVyZSA9IDA7CisgICAgZ2xHZW5UZXh0dXJlcygxLCAm
dGV4dHVyZSk7CisgICAgZ2xCaW5kVGV4dHVyZSh0YXJnZXQsIHRleHR1cmUpOworICAgIGdsVGV4
UGFyYW1ldGVyZih0YXJnZXQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTkVBUkVTVCk7Cisg
ICAgZ2xUZXhQYXJhbWV0ZXJmKHRhcmdldCwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9ORUFS
RVNUKTsKKyAgICByZXR1cm4gdGV4dHVyZTsKK30KKwordm9pZCBXZWJHcmFwaGljc0NvbnRleHQz
RERlZmF1bHRJbXBsOjpyZXNoYXBlKGludCB3aWR0aCwgaW50IGhlaWdodCkKK3sKKyNpZmRlZiBS
RU5ERVJfVE9fREVCVUdHSU5HX1dJTkRPVworICAgIFNldFdpbmRvd1BvcyhtX2NhbnZhc1dpbmRv
dywgSFdORF9UT1AsIDAsIDAsIHdpZHRoLCBoZWlnaHQsCisgICAgICAgICAgICAgICAgIFNXUF9O
T01PVkUpOworICAgIFNob3dXaW5kb3cobV9jYW52YXNXaW5kb3csIFNXX1NIT1cpOworI2VuZGlm
CisKKyAgICBtX2NhY2hlZFdpZHRoID0gd2lkdGg7CisgICAgbV9jYWNoZWRIZWlnaHQgPSBoZWln
aHQ7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisKKyNpZm5kZWYgUkVOREVSX1RPX0RFQlVH
R0lOR19XSU5ET1cKKyNpZmRlZiBVU0VfVEVYVFVSRV9SRUNUQU5HTEVfRk9SX0ZSQU1FQlVGRkVS
CisgICAgLy8gR0xfVEVYVFVSRV9SRUNUQU5HTEVfQVJCIGlzIHRoZSBiZXN0IHN1cHBvcnRlZCBy
ZW5kZXIgdGFyZ2V0IG9uIE1hYyBPUyBYCisgICAgR0xlbnVtIHRhcmdldCA9IEdMX1RFWFRVUkVf
UkVDVEFOR0xFX0FSQjsKKyNlbHNlCisgICAgR0xlbnVtIHRhcmdldCA9IEdMX1RFWFRVUkVfMkQ7
CisjZW5kaWYKKyAgICBpZiAoIW1fdGV4dHVyZSkgeworICAgICAgICAvLyBHZW5lcmF0ZSB0aGUg
dGV4dHVyZSBvYmplY3QKKyAgICAgICAgbV90ZXh0dXJlID0gY3JlYXRlVGV4dHVyZU9iamVjdCh0
YXJnZXQpOworICAgICAgICAvLyBHZW5lcmF0ZSB0aGUgZnJhbWVidWZmZXIgb2JqZWN0CisgICAg
ICAgIGdsR2VuRnJhbWVidWZmZXJzRVhUKDEsICZtX2Zibyk7CisgICAgICAgIC8vIEdlbmVyYXRl
IHRoZSBkZXB0aCBidWZmZXIKKyAgICAgICAgZ2xHZW5SZW5kZXJidWZmZXJzRVhUKDEsICZtX2Rl
cHRoQnVmZmVyKTsKKyAgICB9CisKKyAgICAvLyBSZWFsbG9jYXRlIHRoZSBjb2xvciBhbmQgZGVw
dGggYnVmZmVycworICAgIGdsQmluZFRleHR1cmUodGFyZ2V0LCBtX3RleHR1cmUpOworICAgIGds
VGV4SW1hZ2UyRCh0YXJnZXQsIDAsIEdMX1JHQkE4LCB3aWR0aCwgaGVpZ2h0LCAwLCBHTF9SR0JB
LCBHTF9VTlNJR05FRF9CWVRFLCAwKTsKKyAgICBnbEJpbmRUZXh0dXJlKHRhcmdldCwgMCk7CisK
KyAgICBnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fZmJvKTsKKyAg
ICBtX2JvdW5kRkJPID0gbV9mYm87CisgICAgZ2xCaW5kUmVuZGVyYnVmZmVyRVhUKEdMX1JFTkRF
UkJVRkZFUl9FWFQsIG1fZGVwdGhCdWZmZXIpOworICAgIGdsUmVuZGVyYnVmZmVyU3RvcmFnZUVY
VChHTF9SRU5ERVJCVUZGRVJfRVhULCBHTF9ERVBUSF9DT01QT05FTlQsIHdpZHRoLCBoZWlnaHQp
OworICAgIGdsQmluZFJlbmRlcmJ1ZmZlckVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCAwKTsKKwor
ICAgIGdsRnJhbWVidWZmZXJUZXh0dXJlMkRFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBHTF9DT0xP
Ul9BVFRBQ0hNRU5UMF9FWFQsIHRhcmdldCwgbV90ZXh0dXJlLCAwKTsKKyAgICBnbEZyYW1lYnVm
ZmVyUmVuZGVyYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgR0xfREVQVEhfQVRUQUNITUVO
VF9FWFQsIEdMX1JFTkRFUkJVRkZFUl9FWFQsIG1fZGVwdGhCdWZmZXIpOworICAgIEdMZW51bSBz
dGF0dXMgPSBnbENoZWNrRnJhbWVidWZmZXJTdGF0dXNFWFQoR0xfRlJBTUVCVUZGRVJfRVhUKTsK
KyAgICBpZiAoc3RhdHVzICE9IEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFX0VYVCkgeworICAgICAg
ICBwcmludGYoIldlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6IGZyYW1lYnVmZmVyIHdh
cyBpbmNvbXBsZXRlXG4iKTsKKworICAgICAgICAvLyBGSVhNRTogY2xlYW51cC4KKyAgICAgICAg
bm90SW1wbGVtZW50ZWQoKTsKKyAgICB9CisjZW5kaWYgLy8gUkVOREVSX1RPX0RFQlVHR0lOR19X
SU5ET1cKKworI2lmZGVmIEZMSVBfRlJBTUVCVUZGRVJfVkVSVElDQUxMWQorICAgIGlmIChtX3Nj
YW5saW5lKSB7CisgICAgICAgIGRlbGV0ZVtdIG1fc2NhbmxpbmU7CisgICAgICAgIG1fc2Nhbmxp
bmUgPSAwOworICAgIH0KKyAgICBtX3NjYW5saW5lID0gbmV3IHVuc2lnbmVkIGNoYXJbd2lkdGgg
KiA0XTsKKyNlbmRpZiAvLyBGTElQX0ZSQU1FQlVGRkVSX1ZFUlRJQ0FMTFkKKworICAgIGdsQ2xl
YXIoR0xfQ09MT1JfQlVGRkVSX0JJVCk7CisKK30KKworI2lmZGVmIEZMSVBfRlJBTUVCVUZGRVJf
VkVSVElDQUxMWQordm9pZCBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpmbGlwVmVy
dGljYWxseSh1bnNpZ25lZCBjaGFyKiBmcmFtZWJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHdpZHRoLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBpbnQgaGVpZ2h0KQoreworICAgIHVuc2lnbmVkIGNoYXIqIHNjYW5saW5lID0gbV9zY2FubGlu
ZTsKKyAgICBpZiAoIXNjYW5saW5lKQorICAgICAgICByZXR1cm47CisgICAgdW5zaWduZWQgaW50
IHJvd0J5dGVzID0gd2lkdGggKiA0OworICAgIHVuc2lnbmVkIGludCBjb3VudCA9IGhlaWdodCAv
IDI7CisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisgICAg
ICAgIHVuc2lnbmVkIGNoYXIqIHJvd0EgPSBmcmFtZWJ1ZmZlciArIGkgKiByb3dCeXRlczsKKyAg
ICAgICAgdW5zaWduZWQgY2hhciogcm93QiA9IGZyYW1lYnVmZmVyICsgKGhlaWdodCAtIGkgLSAx
KSAqIHJvd0J5dGVzOworICAgICAgICAvLyBGSVhNRTogdGhpcyBpcyB3aGVyZSB0aGUgbXVsdGlw
bGljYXRpb24gb2YgdGhlIGFscGhhCisgICAgICAgIC8vIGNoYW5uZWwgaW50byB0aGUgY29sb3Ig
YnVmZmVyIHdpbGwgbmVlZCB0byBvY2N1ciBpZiB0aGUKKyAgICAgICAgLy8gdXNlciBzcGVjaWZp
ZXMgdGhlICJwcmVtdWx0aXBseUFscGhhIiBmbGFnIGluIHRoZSBjb250ZXh0CisgICAgICAgIC8v
IGNyZWF0aW9uIGF0dHJpYnV0ZXMuCisgICAgICAgIG1lbWNweShzY2FubGluZSwgcm93Qiwgcm93
Qnl0ZXMpOworICAgICAgICBtZW1jcHkocm93Qiwgcm93QSwgcm93Qnl0ZXMpOworICAgICAgICBt
ZW1jcHkocm93QSwgc2NhbmxpbmUsIHJvd0J5dGVzKTsKKyAgICB9Cit9CisjZW5kaWYKKworYm9v
bCBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpyZWFkQmFja0ZyYW1lYnVmZmVyKHVu
c2lnbmVkIGNoYXIqIHBpeGVscywgc2l6ZV90IGJ1ZmZlclNpemUpCit7CisgICAgaWYgKGJ1ZmZl
clNpemUgIT0gc3RhdGljX2Nhc3Q8c2l6ZV90Pig0ICogd2lkdGgoKSAqIGhlaWdodCgpKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisKKyNpZmRl
ZiBSRU5ERVJfVE9fREVCVUdHSU5HX1dJTkRPVworICAgIFN3YXBCdWZmZXJzKG1fY2FudmFzREMp
OworI2Vsc2UKKyAgICAvLyBFYXJsaWVyIHZlcnNpb25zIG9mIHRoaXMgY29kZSB1c2VkIHRoZSBH
UFUgdG8gZmxpcCB0aGUKKyAgICAvLyBmcmFtZWJ1ZmZlciB2ZXJ0aWNhbGx5IGJlZm9yZSByZWFk
aW5nIGl0IGJhY2sgZm9yIGNvbXBvc2l0aW5nCisgICAgLy8gdmlhIHNvZnR3YXJlLiBUaGlzIGNv
ZGUgd2FzIHF1aXRlIGNvbXBsaWNhdGVkLCB1c2VkIGEgbG90IG9mCisgICAgLy8gR1BVIG1lbW9y
eSwgYW5kIGRpZG4ndCBwcm92aWRlIGFuIG9idmlvdXMgc3BlZWR1cC4gU2luY2UgdGhpcworICAg
IC8vIHZlcnRpY2FsIGZsaXAgaXMgb25seSBhIHRlbXBvcmFyeSBzb2x1dGlvbiBhbnl3YXkgdW50
aWwgQ2hyb21lCisgICAgLy8gaXMgZnVsbHkgR1BVIGNvbXBvc2l0ZWQsIGl0IHdhc24ndCB3b3J0
aCB0aGUgY29tcGxleGl0eS4KKworICAgIGJvb2wgbXVzdFJlc3RvcmVGQk8gPSAobV9ib3VuZEZC
TyAhPSBtX2Zibyk7CisgICAgaWYgKG11c3RSZXN0b3JlRkJPKQorICAgICAgICBnbEJpbmRGcmFt
ZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fZmJvKTsKKyNpZiBQTEFURk9STShTS0lB
KQorICAgIGdsUmVhZFBpeGVscygwLCAwLCBtX2NhY2hlZFdpZHRoLCBtX2NhY2hlZEhlaWdodCwg
R0xfQkdSQSwgR0xfVU5TSUdORURfQllURSwgcGl4ZWxzKTsKKyNlbGlmIFBMQVRGT1JNKENHKQor
ICAgIGdsUmVhZFBpeGVscygwLCAwLCBtX2NhY2hlZFdpZHRoLCBtX2NhY2hlZEhlaWdodCwgR0xf
QkdSQSwgR0xfVU5TSUdORURfSU5UXzhfOF84XzhfUkVWLCBwaXhlbHMpOworI2Vsc2UKKyNlcnJv
ciBNdXN0IHBvcnQgdG8geW91ciBwbGF0Zm9ybQorI2VuZGlmCisKKyAgICBpZiAobXVzdFJlc3Rv
cmVGQk8pCisgICAgICAgIGdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwg
bV9ib3VuZEZCTyk7CisKKyNpZmRlZiBGTElQX0ZSQU1FQlVGRkVSX1ZFUlRJQ0FMTFkKKyAgICBp
ZiAocGl4ZWxzKQorICAgICAgICBmbGlwVmVydGljYWxseShwaXhlbHMsIG1fY2FjaGVkV2lkdGgs
IG1fY2FjaGVkSGVpZ2h0KTsKKyNlbmRpZgorCisjZW5kaWYgLy8gUkVOREVSX1RPX0RFQlVHR0lO
R19XSU5ET1cKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBXZWJHcmFwaGljc0NvbnRleHQz
RERlZmF1bHRJbXBsOjpzeW50aGVzaXplR0xFcnJvcih1bnNpZ25lZCBsb25nIGVycm9yKQorewor
ICAgIG1fc3ludGhldGljRXJyb3JzLmFkZChlcnJvcik7Cit9CisKKy8vIEhlbHBlciBtYWNyb3Mg
dG8gcmVkdWNlIHRoZSBhbW91bnQgb2YgY29kZS4KKworI2RlZmluZSBERUxFR0FURV9UT19HTChu
YW1lLCBnbG5hbWUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
K3ZvaWQgV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6bmFtZSgpICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKyAgICBnbCMjZ2xuYW1lKCk7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9CisKKyNkZWZpbmUg
REVMRUdBVEVfVE9fR0xfMShuYW1lLCBnbG5hbWUsIHQxKSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCit2b2lkIFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6Om5h
bWUodDEgYTEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAoreyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZ2wjI2dsbmFtZShhMSk7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAorfQorCisjZGVmaW5lIERFTEVHQVRFX1RPX0dMXzFSKG5hbWUsIGdsbmFtZSwgdDEsIHJ0KSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorcnQgV2ViR3JhcGhpY3NDb250ZXh0M0RE
ZWZhdWx0SW1wbDo6bmFtZSh0MSBhMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
K3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHJl
dHVybiBnbCMjZ2xuYW1lKGExKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKK30KKworI2RlZmluZSBERUxFR0FURV9UT19HTF8yKG5hbWUsIGds
bmFtZSwgdDEsIHQyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK3ZvaWQgV2Vi
R3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6bmFtZSh0MSBhMSwgdDIgYTIpICAgICAgICAg
ICAgICAgICAgICAgICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKKyAgICBnbCMjZ2xuYW1lKGExLCBhMik7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9CisKKyNkZWZpbmUgREVMRUdBVEVf
VE9fR0xfMlIobmFtZSwgZ2xuYW1lLCB0MSwgdDIsIHJ0KSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCitydCBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpuYW1lKHQxIGExLCB0
MiBhMikgICAgICAgICAgICAgICAgICAgICAgICAgXAoreyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
KyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgcmV0dXJuIGdsIyNnbG5hbWUoYTEsIGEyKTsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfQorCisj
ZGVmaW5lIERFTEVHQVRFX1RPX0dMXzMobmFtZSwgZ2xuYW1lLCB0MSwgdDIsIHQzKSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAordm9pZCBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJ
bXBsOjpuYW1lKHQxIGExLCB0MiBhMiwgdDMgYTMpICAgICAgICAgICAgICAgIFwKK3sgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGdsIyNnbG5hbWUo
YTEsIGEyLCBhMyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKK30KKworI2RlZmluZSBERUxFR0FURV9UT19HTF80KG5hbWUsIGdsbmFtZSwgdDEs
IHQyLCB0MywgdDQpICAgICAgICAgICAgICAgICAgICAgICAgIFwKK3ZvaWQgV2ViR3JhcGhpY3ND
b250ZXh0M0REZWZhdWx0SW1wbDo6bmFtZSh0MSBhMSwgdDIgYTIsIHQzIGEzLCB0NCBhNCkgICAg
ICAgICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
KyAgICBnbCMjZ2xuYW1lKGExLCBhMiwgYTMsIGE0KTsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCit9CisKKyNkZWZpbmUgREVMRUdBVEVfVE9fR0xfNShu
YW1lLCBnbG5hbWUsIHQxLCB0MiwgdDMsIHQ0LCB0NSkgICAgICAgICAgICAgICAgICAgICBcCit2
b2lkIFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6Om5hbWUodDEgYTEsIHQyIGEyLCB0
MyBhMywgdDQgYTQsIHQ1IGE1KSAgXAoreyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCisgICAgZ2wjI2dsbmFtZShhMSwgYTIsIGEzLCBhNCwgYTUpOyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfQorCisjZGVmaW5lIERF
TEVHQVRFX1RPX0dMXzYobmFtZSwgZ2xuYW1lLCB0MSwgdDIsIHQzLCB0NCwgdDUsIHQ2KSAgICAg
ICAgICAgICAgICAgXAordm9pZCBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpuYW1l
KHQxIGExLCB0MiBhMiwgdDMgYTMsIHQ0IGE0LCB0NSBhNSwgdDYgYTYpIFwKK3sgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGdsIyNnbG5hbWUoYTEs
IGEyLCBhMywgYTQsIGE1LCBhNik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKK30KKworI2RlZmluZSBERUxFR0FURV9UT19HTF83KG5hbWUsIGdsbmFtZSwgdDEsIHQy
LCB0MywgdDQsIHQ1LCB0NiwgdDcpICAgICAgICAgICAgIFwKK3ZvaWQgV2ViR3JhcGhpY3NDb250
ZXh0M0REZWZhdWx0SW1wbDo6bmFtZSh0MSBhMSwgdDIgYTIsIHQzIGEzLCB0NCBhNCwgdDUgYTUs
IHQ2IGE2LCB0NyBhNykgXAoreyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCisgICAgZ2wjI2dsbmFtZShhMSwgYTIsIGEzLCBhNCwgYTUsIGE2LCBhNyk7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfQorCisjZGVmaW5lIERFTEVHQVRF
X1RPX0dMXzgobmFtZSwgZ2xuYW1lLCB0MSwgdDIsIHQzLCB0NCwgdDUsIHQ2LCB0NywgdDgpICAg
ICAgICAgXAordm9pZCBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpuYW1lKHQxIGEx
LCB0MiBhMiwgdDMgYTMsIHQ0IGE0LCB0NSBhNSwgdDYgYTYsIHQ3IGE3LCB0OCBhOCkgXAoreyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZ2wjI2ds
bmFtZShhMSwgYTIsIGEzLCBhNCwgYTUsIGE2LCBhNywgYTgpOyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAorfQorCisjZGVmaW5lIERFTEVHQVRFX1RPX0dMXzkobmFtZSwgZ2xuYW1l
LCB0MSwgdDIsIHQzLCB0NCwgdDUsIHQ2LCB0NywgdDgsIHQ5KSAgICAgXAordm9pZCBXZWJHcmFw
aGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpuYW1lKHQxIGExLCB0MiBhMiwgdDMgYTMsIHQ0IGE0
LCB0NSBhNSwgdDYgYTYsIHQ3IGE3LCB0OCBhOCwgdDkgYTkpIFwKK3sgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGdsIyNnbG5hbWUoYTEsIGEyLCBh
MywgYTQsIGE1LCBhNiwgYTcsIGE4LCBhOSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
K30KKwordm9pZCBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjphY3RpdmVUZXh0dXJl
KHVuc2lnbmVkIGxvbmcgdGV4dHVyZSkKK3sKKyAgICAvLyBGSVhNRTogcXVlcnkgbnVtYmVyIG9m
IHRleHR1cmVzIGF2YWlsYWJsZS4KKyAgICBpZiAodGV4dHVyZSA8IEdMX1RFWFRVUkUwIHx8IHRl
eHR1cmUgPiBHTF9URVhUVVJFMCszMikKKyAgICAgICAgLy8gRklYTUU6IHJhaXNlIGV4Y2VwdGlv
bi4KKyAgICAgICAgcmV0dXJuOworCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgZ2xB
Y3RpdmVUZXh0dXJlKHRleHR1cmUpOworfQorCitERUxFR0FURV9UT19HTF8yKGF0dGFjaFNoYWRl
ciwgQXR0YWNoU2hhZGVyLCBXZWJHTElkLCBXZWJHTElkKQorCitERUxFR0FURV9UT19HTF8zKGJp
bmRBdHRyaWJMb2NhdGlvbiwgQmluZEF0dHJpYkxvY2F0aW9uLCBXZWJHTElkLCB1bnNpZ25lZCBs
b25nLCBjb25zdCBjaGFyKikKKwordm9pZCBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBs
OjpiaW5kQnVmZmVyKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBXZWJHTElkIGJ1ZmZlcikKK3sKKyAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAodGFyZ2V0ID09IEdMX0FSUkFZX0JVRkZF
UikKKyAgICAgICAgbV9ib3VuZEFycmF5QnVmZmVyID0gYnVmZmVyOworICAgIGdsQmluZEJ1ZmZl
cih0YXJnZXQsIGJ1ZmZlcik7Cit9CisKK3ZvaWQgV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0
SW1wbDo6YmluZEZyYW1lYnVmZmVyKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBXZWJHTElkIGZyYW1l
YnVmZmVyKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghZnJhbWVidWZm
ZXIpCisgICAgICAgIGZyYW1lYnVmZmVyID0gbV9mYm87CisgICAgZ2xCaW5kRnJhbWVidWZmZXJF
WFQodGFyZ2V0LCBmcmFtZWJ1ZmZlcik7CisgICAgbV9ib3VuZEZCTyA9IGZyYW1lYnVmZmVyOwor
fQorCitERUxFR0FURV9UT19HTF8yKGJpbmRSZW5kZXJidWZmZXIsIEJpbmRSZW5kZXJidWZmZXJF
WFQsIHVuc2lnbmVkIGxvbmcsIFdlYkdMSWQpCisKK0RFTEVHQVRFX1RPX0dMXzIoYmluZFRleHR1
cmUsIEJpbmRUZXh0dXJlLCB1bnNpZ25lZCBsb25nLCBXZWJHTElkKQorCitERUxFR0FURV9UT19H
TF80KGJsZW5kQ29sb3IsIEJsZW5kQ29sb3IsIGRvdWJsZSwgZG91YmxlLCBkb3VibGUsIGRvdWJs
ZSkKKworREVMRUdBVEVfVE9fR0xfMShibGVuZEVxdWF0aW9uLCBCbGVuZEVxdWF0aW9uLCB1bnNp
Z25lZCBsb25nKQorCitERUxFR0FURV9UT19HTF8yKGJsZW5kRXF1YXRpb25TZXBhcmF0ZSwgQmxl
bmRFcXVhdGlvblNlcGFyYXRlLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKQorCitERUxF
R0FURV9UT19HTF8yKGJsZW5kRnVuYywgQmxlbmRGdW5jLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25l
ZCBsb25nKQorCitERUxFR0FURV9UT19HTF80KGJsZW5kRnVuY1NlcGFyYXRlLCBCbGVuZEZ1bmNT
ZXBhcmF0ZSwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgdW5z
aWduZWQgbG9uZykKKworREVMRUdBVEVfVE9fR0xfNChidWZmZXJEYXRhLCBCdWZmZXJEYXRhLCB1
bnNpZ25lZCBsb25nLCBpbnQsIGNvbnN0IHZvaWQqLCB1bnNpZ25lZCBsb25nKQorCitERUxFR0FU
RV9UT19HTF80KGJ1ZmZlclN1YkRhdGEsIEJ1ZmZlclN1YkRhdGEsIHVuc2lnbmVkIGxvbmcsIGxv
bmcsIGludCwgY29uc3Qgdm9pZCopCisKK0RFTEVHQVRFX1RPX0dMXzFSKGNoZWNrRnJhbWVidWZm
ZXJTdGF0dXMsIENoZWNrRnJhbWVidWZmZXJTdGF0dXNFWFQsIHVuc2lnbmVkIGxvbmcsIHVuc2ln
bmVkIGxvbmcpCisKK0RFTEVHQVRFX1RPX0dMXzEoY2xlYXIsIENsZWFyLCB1bnNpZ25lZCBsb25n
KQorCitERUxFR0FURV9UT19HTF80KGNsZWFyQ29sb3IsIENsZWFyQ29sb3IsIGRvdWJsZSwgZG91
YmxlLCBkb3VibGUsIGRvdWJsZSkKKworREVMRUdBVEVfVE9fR0xfMShjbGVhckRlcHRoLCBDbGVh
ckRlcHRoLCBkb3VibGUpCisKK0RFTEVHQVRFX1RPX0dMXzEoY2xlYXJTdGVuY2lsLCBDbGVhclN0
ZW5jaWwsIGxvbmcpCisKK0RFTEVHQVRFX1RPX0dMXzQoY29sb3JNYXNrLCBDb2xvck1hc2ssIGJv
b2wsIGJvb2wsIGJvb2wsIGJvb2wpCisKK0RFTEVHQVRFX1RPX0dMXzEoY29tcGlsZVNoYWRlciwg
Q29tcGlsZVNoYWRlciwgV2ViR0xJZCkKKworREVMRUdBVEVfVE9fR0xfOChjb3B5VGV4SW1hZ2Uy
RCwgQ29weVRleEltYWdlMkQsIHVuc2lnbmVkIGxvbmcsIGxvbmcsIHVuc2lnbmVkIGxvbmcsIGxv
bmcsIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIGxvbmcpCisKK0RFTEVHQVRF
X1RPX0dMXzgoY29weVRleFN1YkltYWdlMkQsIENvcHlUZXhTdWJJbWFnZTJELCB1bnNpZ25lZCBs
b25nLCBsb25nLCBsb25nLCBsb25nLCBsb25nLCBsb25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25l
ZCBsb25nKQorCitERUxFR0FURV9UT19HTF8xKGN1bGxGYWNlLCBDdWxsRmFjZSwgdW5zaWduZWQg
bG9uZykKKworREVMRUdBVEVfVE9fR0xfMShkZXB0aEZ1bmMsIERlcHRoRnVuYywgdW5zaWduZWQg
bG9uZykKKworREVMRUdBVEVfVE9fR0xfMShkZXB0aE1hc2ssIERlcHRoTWFzaywgYm9vbCkKKwor
REVMRUdBVEVfVE9fR0xfMihkZXB0aFJhbmdlLCBEZXB0aFJhbmdlLCBkb3VibGUsIGRvdWJsZSkK
KworREVMRUdBVEVfVE9fR0xfMihkZXRhY2hTaGFkZXIsIERldGFjaFNoYWRlciwgV2ViR0xJZCwg
V2ViR0xJZCkKKworREVMRUdBVEVfVE9fR0xfMShkaXNhYmxlLCBEaXNhYmxlLCB1bnNpZ25lZCBs
b25nKQorCit2b2lkIFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OmRpc2FibGVWZXJ0
ZXhBdHRyaWJBcnJheSh1bnNpZ25lZCBsb25nIGluZGV4KQoreworICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIGlmIChpbmRleCA8IE51bVRyYWNrZWRQb2ludGVyU3RhdGVzKQorICAgICAg
ICBtX3ZlcnRleEF0dHJpYlBvaW50ZXJTdGF0ZVtpbmRleF0uZW5hYmxlZCA9IGZhbHNlOworICAg
IGdsRGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGluZGV4KTsKK30KKworREVMRUdBVEVfVE9fR0xf
MyhkcmF3QXJyYXlzLCBEcmF3QXJyYXlzLCB1bnNpZ25lZCBsb25nLCBsb25nLCBsb25nKQorCit2
b2lkIFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OmRyYXdFbGVtZW50cyh1bnNpZ25l
ZCBsb25nIG1vZGUsIHVuc2lnbmVkIGxvbmcgY291bnQsIHVuc2lnbmVkIGxvbmcgdHlwZSwgbG9u
ZyBvZmZzZXQpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgZ2xEcmF3RWxlbWVu
dHMobW9kZSwgY291bnQsIHR5cGUsCisgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2Fz
dDx2b2lkKj4oc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KG9mZnNldCkpKTsKK30KKworREVMRUdBVEVf
VE9fR0xfMShlbmFibGUsIEVuYWJsZSwgdW5zaWduZWQgbG9uZykKKwordm9pZCBXZWJHcmFwaGlj
c0NvbnRleHQzRERlZmF1bHRJbXBsOjplbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSh1bnNpZ25lZCBs
b25nIGluZGV4KQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmIChpbmRleCA8
IE51bVRyYWNrZWRQb2ludGVyU3RhdGVzKQorICAgICAgICBtX3ZlcnRleEF0dHJpYlBvaW50ZXJT
dGF0ZVtpbmRleF0uZW5hYmxlZCA9IHRydWU7CisgICAgZ2xFbmFibGVWZXJ0ZXhBdHRyaWJBcnJh
eShpbmRleCk7Cit9CisKK0RFTEVHQVRFX1RPX0dMKGZpbmlzaCwgRmluaXNoKQorCitERUxFR0FU
RV9UT19HTChmbHVzaCwgRmx1c2gpCisKK0RFTEVHQVRFX1RPX0dMXzQoZnJhbWVidWZmZXJSZW5k
ZXJidWZmZXIsIEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyRVhULCB1bnNpZ25lZCBsb25nLCB1bnNp
Z25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCBXZWJHTElkKQorCitERUxFR0FURV9UT19HTF81KGZy
YW1lYnVmZmVyVGV4dHVyZTJELCBGcmFtZWJ1ZmZlclRleHR1cmUyREVYVCwgdW5zaWduZWQgbG9u
ZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgV2ViR0xJZCwgbG9uZykKKworREVMRUdB
VEVfVE9fR0xfMShmcm9udEZhY2UsIEZyb250RmFjZSwgdW5zaWduZWQgbG9uZykKKwordm9pZCBX
ZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpnZW5lcmF0ZU1pcG1hcCh1bnNpZ25lZCBs
b25nIHRhcmdldCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoZ2xHZW5l
cmF0ZU1pcG1hcEVYVCkKKyAgICAgICAgZ2xHZW5lcmF0ZU1pcG1hcEVYVCh0YXJnZXQpOworICAg
IC8vIEZJWE1FOiBwcm92aWRlIGFsdGVybmF0aXZlIGNvZGUgcGF0aD8gVGhpcyB3aWxsIGJlIHVu
cGxlYXNhbnQKKyAgICAvLyB0byBpbXBsZW1lbnQgaWYgZ2xHZW5lcmF0ZU1pcG1hcEVYVCBpcyBu
b3QgYXZhaWxhYmxlIC0tIGl0IHdpbGwKKyAgICAvLyByZXF1aXJlIGEgdGV4dHVyZSByZWFkYmFj
ayBhbmQgcmUtdXBsb2FkLgorfQorCitib29sIFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdElt
cGw6OmdldEFjdGl2ZUF0dHJpYihXZWJHTElkIHByb2dyYW0sIHVuc2lnbmVkIGxvbmcgaW5kZXgs
IEFjdGl2ZUluZm8mIGluZm8pCit7CisgICAgaWYgKCFwcm9ncmFtKSB7CisgICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorICAgIEdMaW50IG1heE5hbWVMZW5ndGggPSAtMTsKKyAgICBnbEdldFByb2dyYW1pdihw
cm9ncmFtLCBHTF9BQ1RJVkVfQVRUUklCVVRFX01BWF9MRU5HVEgsICZtYXhOYW1lTGVuZ3RoKTsK
KyAgICBpZiAobWF4TmFtZUxlbmd0aCA8IDApCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBH
TGNoYXIqIG5hbWUgPSAwOworICAgIGlmICghdHJ5RmFzdE1hbGxvYyhtYXhOYW1lTGVuZ3RoICog
c2l6ZW9mKEdMY2hhcikpLmdldFZhbHVlKG5hbWUpKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAg
IEdMc2l6ZWkgbGVuZ3RoID0gMDsKKyAgICBHTGludCBzaXplID0gLTE7CisgICAgR0xlbnVtIHR5
cGUgPSAwOworICAgIGdsR2V0QWN0aXZlQXR0cmliKHByb2dyYW0sIGluZGV4LCBtYXhOYW1lTGVu
Z3RoLAorICAgICAgICAgICAgICAgICAgICAgICZsZW5ndGgsICZzaXplLCAmdHlwZSwgbmFtZSk7
CisgICAgaWYgKHNpemUgPCAwKSB7CisgICAgICAgIGZhc3RGcmVlKG5hbWUpOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGluZm8ubmFtZSA9IFdlYlN0cmluZzo6ZnJvbVVURjgo
bmFtZSwgbGVuZ3RoKTsKKyAgICBpbmZvLnR5cGUgPSB0eXBlOworICAgIGluZm8uc2l6ZSA9IHNp
emU7CisgICAgZmFzdEZyZWUobmFtZSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgV2Vi
R3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6Z2V0QWN0aXZlVW5pZm9ybShXZWJHTElkIHBy
b2dyYW0sIHVuc2lnbmVkIGxvbmcgaW5kZXgsIEFjdGl2ZUluZm8mIGluZm8pCit7CisgICAgR0xp
bnQgbWF4TmFtZUxlbmd0aCA9IC0xOworICAgIGdsR2V0UHJvZ3JhbWl2KHByb2dyYW0sIEdMX0FD
VElWRV9VTklGT1JNX01BWF9MRU5HVEgsICZtYXhOYW1lTGVuZ3RoKTsKKyAgICBpZiAobWF4TmFt
ZUxlbmd0aCA8IDApCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBHTGNoYXIqIG5hbWUgPSAw
OworICAgIGlmICghdHJ5RmFzdE1hbGxvYyhtYXhOYW1lTGVuZ3RoICogc2l6ZW9mKEdMY2hhcikp
LmdldFZhbHVlKG5hbWUpKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdMX09VVF9PRl9N
RU1PUlkpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIEdMc2l6ZWkgbGVuZ3Ro
ID0gMDsKKyAgICBHTGludCBzaXplID0gLTE7CisgICAgR0xlbnVtIHR5cGUgPSAwOworICAgIGds
R2V0QWN0aXZlVW5pZm9ybShwcm9ncmFtLCBpbmRleCwgbWF4TmFtZUxlbmd0aCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgJmxlbmd0aCwgJnNpemUsICZ0eXBlLCBuYW1lKTsKKyAgICBpZiAoc2l6
ZSA8IDApIHsKKyAgICAgICAgZmFzdEZyZWUobmFtZSk7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisgICAgaW5mby5uYW1lID0gV2ViU3RyaW5nOjpmcm9tVVRGOChuYW1lLCBsZW5ndGgp
OworICAgIGluZm8udHlwZSA9IHR5cGU7CisgICAgaW5mby5zaXplID0gc2l6ZTsKKyAgICBmYXN0
RnJlZShuYW1lKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworREVMRUdBVEVfVE9fR0xfMlIoZ2V0
QXR0cmliTG9jYXRpb24sIEdldEF0dHJpYkxvY2F0aW9uLCBXZWJHTElkLCBjb25zdCBjaGFyKiwg
aW50KQorCitERUxFR0FURV9UT19HTF8yKGdldEJvb2xlYW52LCBHZXRCb29sZWFudiwgdW5zaWdu
ZWQgbG9uZywgdW5zaWduZWQgY2hhciopCisKK0RFTEVHQVRFX1RPX0dMXzMoZ2V0QnVmZmVyUGFy
YW1ldGVyaXYsIEdldEJ1ZmZlclBhcmFtZXRlcml2LCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBs
b25nLCBpbnQqKQorCitXZWJHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBXZWJHcmFwaGlj
c0NvbnRleHQzRERlZmF1bHRJbXBsOjpnZXRDb250ZXh0QXR0cmlidXRlcygpCit7CisgICAgcmV0
dXJuIG1fYXR0cmlidXRlczsKK30KKwordW5zaWduZWQgbG9uZyBXZWJHcmFwaGljc0NvbnRleHQz
RERlZmF1bHRJbXBsOjpnZXRFcnJvcigpCit7CisgICAgaWYgKG1fc3ludGhldGljRXJyb3JzLnNp
emUoKSA+IDApIHsKKyAgICAgICAgTGlzdEhhc2hTZXQ8dW5zaWduZWQgbG9uZz46Oml0ZXJhdG9y
IGl0ZXIgPSBtX3N5bnRoZXRpY0Vycm9ycy5iZWdpbigpOworICAgICAgICB1bnNpZ25lZCBsb25n
IGVyciA9ICppdGVyOworICAgICAgICBtX3N5bnRoZXRpY0Vycm9ycy5yZW1vdmUoaXRlcik7Cisg
ICAgICAgIHJldHVybiBlcnI7CisgICAgfQorCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgcmV0dXJuIGdsR2V0RXJyb3IoKTsKK30KKworREVMRUdBVEVfVE9fR0xfMihnZXRGbG9hdHYs
IEdldEZsb2F0diwgdW5zaWduZWQgbG9uZywgZmxvYXQqKQorCitERUxFR0FURV9UT19HTF80KGdl
dEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcml2LCBHZXRGcmFtZWJ1ZmZlckF0dGFjaG1l
bnRQYXJhbWV0ZXJpdkVYVCwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQg
bG9uZywgaW50KikKKworREVMRUdBVEVfVE9fR0xfMihnZXRJbnRlZ2VydiwgR2V0SW50ZWdlcnYs
IHVuc2lnbmVkIGxvbmcsIGludCopCisKK0RFTEVHQVRFX1RPX0dMXzMoZ2V0UHJvZ3JhbWl2LCBH
ZXRQcm9ncmFtaXYsIFdlYkdMSWQsIHVuc2lnbmVkIGxvbmcsIGludCopCisKK1dlYlN0cmluZyBX
ZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpnZXRQcm9ncmFtSW5mb0xvZyhXZWJHTElk
IHByb2dyYW0pCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgR0xpbnQgbG9nTGVu
Z3RoOworICAgIGdsR2V0UHJvZ3JhbWl2KHByb2dyYW0sIEdMX0lORk9fTE9HX0xFTkdUSCwgJmxv
Z0xlbmd0aCk7CisgICAgaWYgKCFsb2dMZW5ndGgpCisgICAgICAgIHJldHVybiBXZWJTdHJpbmco
KTsKKyAgICBHTGNoYXIqIGxvZyA9IDA7CisgICAgaWYgKCF0cnlGYXN0TWFsbG9jKGxvZ0xlbmd0
aCAqIHNpemVvZihHTGNoYXIpKS5nZXRWYWx1ZShsb2cpKQorICAgICAgICByZXR1cm4gV2ViU3Ry
aW5nKCk7CisgICAgR0xzaXplaSByZXR1cm5lZExvZ0xlbmd0aDsKKyAgICBnbEdldFByb2dyYW1J
bmZvTG9nKHByb2dyYW0sIGxvZ0xlbmd0aCwgJnJldHVybmVkTG9nTGVuZ3RoLCBsb2cpOworICAg
IEFTU0VSVChsb2dMZW5ndGggPT0gcmV0dXJuZWRMb2dMZW5ndGggKyAxKTsKKyAgICBXZWJTdHJp
bmcgcmVzID0gV2ViU3RyaW5nOjpmcm9tVVRGOChsb2csIHJldHVybmVkTG9nTGVuZ3RoKTsKKyAg
ICBmYXN0RnJlZShsb2cpOworICAgIHJldHVybiByZXM7Cit9CisKK0RFTEVHQVRFX1RPX0dMXzMo
Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXYsIEdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcml2RVhU
LCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCBpbnQqKQorCitERUxFR0FURV9UT19HTF8z
KGdldFNoYWRlcml2LCBHZXRTaGFkZXJpdiwgV2ViR0xJZCwgdW5zaWduZWQgbG9uZywgaW50KikK
KworV2ViU3RyaW5nIFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OmdldFNoYWRlcklu
Zm9Mb2coV2ViR0xJZCBzaGFkZXIpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAg
R0xpbnQgbG9nTGVuZ3RoOworICAgIGdsR2V0U2hhZGVyaXYoc2hhZGVyLCBHTF9JTkZPX0xPR19M
RU5HVEgsICZsb2dMZW5ndGgpOworICAgIGlmICghbG9nTGVuZ3RoKQorICAgICAgICByZXR1cm4g
V2ViU3RyaW5nKCk7CisgICAgR0xjaGFyKiBsb2cgPSAwOworICAgIGlmICghdHJ5RmFzdE1hbGxv
Yyhsb2dMZW5ndGggKiBzaXplb2YoR0xjaGFyKSkuZ2V0VmFsdWUobG9nKSkKKyAgICAgICAgcmV0
dXJuIFdlYlN0cmluZygpOworICAgIEdMc2l6ZWkgcmV0dXJuZWRMb2dMZW5ndGg7CisgICAgZ2xH
ZXRTaGFkZXJJbmZvTG9nKHNoYWRlciwgbG9nTGVuZ3RoLCAmcmV0dXJuZWRMb2dMZW5ndGgsIGxv
Zyk7CisgICAgQVNTRVJUKGxvZ0xlbmd0aCA9PSByZXR1cm5lZExvZ0xlbmd0aCArIDEpOworICAg
IFdlYlN0cmluZyByZXMgPSBXZWJTdHJpbmc6OmZyb21VVEY4KGxvZywgcmV0dXJuZWRMb2dMZW5n
dGgpOworICAgIGZhc3RGcmVlKGxvZyk7CisgICAgcmV0dXJuIHJlczsKK30KKworV2ViU3RyaW5n
IFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OmdldFNoYWRlclNvdXJjZShXZWJHTElk
IHNoYWRlcikKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBHTGludCBsb2dMZW5n
dGg7CisgICAgZ2xHZXRTaGFkZXJpdihzaGFkZXIsIEdMX1NIQURFUl9TT1VSQ0VfTEVOR1RILCAm
bG9nTGVuZ3RoKTsKKyAgICBpZiAoIWxvZ0xlbmd0aCkKKyAgICAgICAgcmV0dXJuIFdlYlN0cmlu
ZygpOworICAgIEdMY2hhciogbG9nID0gMDsKKyAgICBpZiAoIXRyeUZhc3RNYWxsb2MobG9nTGVu
Z3RoICogc2l6ZW9mKEdMY2hhcikpLmdldFZhbHVlKGxvZykpCisgICAgICAgIHJldHVybiBXZWJT
dHJpbmcoKTsKKyAgICBHTHNpemVpIHJldHVybmVkTG9nTGVuZ3RoOworICAgIGdsR2V0U2hhZGVy
U291cmNlKHNoYWRlciwgbG9nTGVuZ3RoLCAmcmV0dXJuZWRMb2dMZW5ndGgsIGxvZyk7CisgICAg
QVNTRVJUKGxvZ0xlbmd0aCA9PSByZXR1cm5lZExvZ0xlbmd0aCArIDEpOworICAgIFdlYlN0cmlu
ZyByZXMgPSBXZWJTdHJpbmc6OmZyb21VVEY4KGxvZywgcmV0dXJuZWRMb2dMZW5ndGgpOworICAg
IGZhc3RGcmVlKGxvZyk7CisgICAgcmV0dXJuIHJlczsKK30KKworV2ViU3RyaW5nIFdlYkdyYXBo
aWNzQ29udGV4dDNERGVmYXVsdEltcGw6OmdldFN0cmluZyh1bnNpZ25lZCBsb25nIG5hbWUpCit7
CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgcmV0dXJuIFdlYlN0cmluZzo6ZnJvbVVU
RjgocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oZ2xHZXRTdHJpbmcobmFtZSkpKTsKK30K
KworREVMRUdBVEVfVE9fR0xfMyhnZXRUZXhQYXJhbWV0ZXJmdiwgR2V0VGV4UGFyYW1ldGVyZnYs
IHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIGZsb2F0KikKKworREVMRUdBVEVfVE9fR0xf
MyhnZXRUZXhQYXJhbWV0ZXJpdiwgR2V0VGV4UGFyYW1ldGVyaXYsIHVuc2lnbmVkIGxvbmcsIHVu
c2lnbmVkIGxvbmcsIGludCopCisKK0RFTEVHQVRFX1RPX0dMXzMoZ2V0VW5pZm9ybWZ2LCBHZXRV
bmlmb3JtZnYsIFdlYkdMSWQsIGxvbmcsIGZsb2F0KikKKworREVMRUdBVEVfVE9fR0xfMyhnZXRV
bmlmb3JtaXYsIEdldFVuaWZvcm1pdiwgV2ViR0xJZCwgbG9uZywgaW50KikKKworREVMRUdBVEVf
VE9fR0xfMlIoZ2V0VW5pZm9ybUxvY2F0aW9uLCBHZXRVbmlmb3JtTG9jYXRpb24sIFdlYkdMSWQs
IGNvbnN0IGNoYXIqLCBsb25nKQorCitERUxFR0FURV9UT19HTF8zKGdldFZlcnRleEF0dHJpYmZ2
LCBHZXRWZXJ0ZXhBdHRyaWJmdiwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgZmxvYXQq
KQorCitERUxFR0FURV9UT19HTF8zKGdldFZlcnRleEF0dHJpYml2LCBHZXRWZXJ0ZXhBdHRyaWJp
diwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgaW50KikKKworbG9uZyBXZWJHcmFwaGlj
c0NvbnRleHQzRERlZmF1bHRJbXBsOjpnZXRWZXJ0ZXhBdHRyaWJPZmZzZXQodW5zaWduZWQgbG9u
ZyBpbmRleCwgdW5zaWduZWQgbG9uZyBwbmFtZSkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50
LgorICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK0RFTEVHQVRFX1RP
X0dMXzIoaGludCwgSGludCwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZykKKworREVMRUdB
VEVfVE9fR0xfMVIoaXNCdWZmZXIsIElzQnVmZmVyLCBXZWJHTElkLCBib29sKQorCitERUxFR0FU
RV9UT19HTF8xUihpc0VuYWJsZWQsIElzRW5hYmxlZCwgdW5zaWduZWQgbG9uZywgYm9vbCkKKwor
REVMRUdBVEVfVE9fR0xfMVIoaXNGcmFtZWJ1ZmZlciwgSXNGcmFtZWJ1ZmZlciwgV2ViR0xJZCwg
Ym9vbCkKKworREVMRUdBVEVfVE9fR0xfMVIoaXNQcm9ncmFtLCBJc1Byb2dyYW0sIFdlYkdMSWQs
IGJvb2wpCisKK0RFTEVHQVRFX1RPX0dMXzFSKGlzUmVuZGVyYnVmZmVyLCBJc1JlbmRlcmJ1ZmZl
ciwgV2ViR0xJZCwgYm9vbCkKKworREVMRUdBVEVfVE9fR0xfMVIoaXNTaGFkZXIsIElzU2hhZGVy
LCBXZWJHTElkLCBib29sKQorCitERUxFR0FURV9UT19HTF8xUihpc1RleHR1cmUsIElzVGV4dHVy
ZSwgV2ViR0xJZCwgYm9vbCkKKworREVMRUdBVEVfVE9fR0xfMShsaW5lV2lkdGgsIExpbmVXaWR0
aCwgZG91YmxlKQorCitERUxFR0FURV9UT19HTF8xKGxpbmtQcm9ncmFtLCBMaW5rUHJvZ3JhbSwg
V2ViR0xJZCkKKworREVMRUdBVEVfVE9fR0xfMihwaXhlbFN0b3JlaSwgUGl4ZWxTdG9yZWksIHVu
c2lnbmVkIGxvbmcsIGxvbmcpCisKK0RFTEVHQVRFX1RPX0dMXzIocG9seWdvbk9mZnNldCwgUG9s
eWdvbk9mZnNldCwgZG91YmxlLCBkb3VibGUpCisKK0RFTEVHQVRFX1RPX0dMXzcocmVhZFBpeGVs
cywgUmVhZFBpeGVscywgbG9uZywgbG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywg
dW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgdm9pZCopCisKK3ZvaWQgV2ViR3JhcGhpY3ND
b250ZXh0M0REZWZhdWx0SW1wbDo6cmVsZWFzZVNoYWRlckNvbXBpbGVyKCkKK3sKK30KKworREVM
RUdBVEVfVE9fR0xfNChyZW5kZXJidWZmZXJTdG9yYWdlLCBSZW5kZXJidWZmZXJTdG9yYWdlRVhU
LCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBs
b25nKQorCitERUxFR0FURV9UT19HTF8yKHNhbXBsZUNvdmVyYWdlLCBTYW1wbGVDb3ZlcmFnZSwg
ZG91YmxlLCBib29sKQorCitERUxFR0FURV9UT19HTF80KHNjaXNzb3IsIFNjaXNzb3IsIGxvbmcs
IGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpCisKK3ZvaWQgV2ViR3JhcGhpY3ND
b250ZXh0M0REZWZhdWx0SW1wbDo6c2hhZGVyU291cmNlKFdlYkdMSWQgc2hhZGVyLCBjb25zdCBj
aGFyKiBzdHJpbmcpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgR0xpbnQgbGVu
Z3RoID0gc3RybGVuKHN0cmluZyk7CisgICAgZ2xTaGFkZXJTb3VyY2Uoc2hhZGVyLCAxLCAmc3Ry
aW5nLCAmbGVuZ3RoKTsKK30KKworREVMRUdBVEVfVE9fR0xfMyhzdGVuY2lsRnVuYywgU3RlbmNp
bEZ1bmMsIHVuc2lnbmVkIGxvbmcsIGxvbmcsIHVuc2lnbmVkIGxvbmcpCisKK0RFTEVHQVRFX1RP
X0dMXzQoc3RlbmNpbEZ1bmNTZXBhcmF0ZSwgU3RlbmNpbEZ1bmNTZXBhcmF0ZSwgdW5zaWduZWQg
bG9uZywgdW5zaWduZWQgbG9uZywgbG9uZywgdW5zaWduZWQgbG9uZykKKworREVMRUdBVEVfVE9f
R0xfMShzdGVuY2lsTWFzaywgU3RlbmNpbE1hc2ssIHVuc2lnbmVkIGxvbmcpCisKK0RFTEVHQVRF
X1RPX0dMXzIoc3RlbmNpbE1hc2tTZXBhcmF0ZSwgU3RlbmNpbE1hc2tTZXBhcmF0ZSwgdW5zaWdu
ZWQgbG9uZywgdW5zaWduZWQgbG9uZykKKworREVMRUdBVEVfVE9fR0xfMyhzdGVuY2lsT3AsIFN0
ZW5jaWxPcCwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZykKKwor
REVMRUdBVEVfVE9fR0xfNChzdGVuY2lsT3BTZXBhcmF0ZSwgU3RlbmNpbE9wU2VwYXJhdGUsIHVu
c2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcp
CisKK0RFTEVHQVRFX1RPX0dMXzkodGV4SW1hZ2UyRCwgVGV4SW1hZ2UyRCwgdW5zaWduZWQsIHVu
c2lnbmVkLCB1bnNpZ25lZCwgdW5zaWduZWQsIHVuc2lnbmVkLCB1bnNpZ25lZCwgdW5zaWduZWQs
IHVuc2lnbmVkLCBjb25zdCB2b2lkKikKKworREVMRUdBVEVfVE9fR0xfMyh0ZXhQYXJhbWV0ZXJm
LCBUZXhQYXJhbWV0ZXJmLCB1bnNpZ25lZCwgdW5zaWduZWQsIGZsb2F0KTsKKworREVMRUdBVEVf
VE9fR0xfMyh0ZXhQYXJhbWV0ZXJpLCBUZXhQYXJhbWV0ZXJpLCB1bnNpZ25lZCwgdW5zaWduZWQs
IGludCk7CisKK0RFTEVHQVRFX1RPX0dMXzkodGV4U3ViSW1hZ2UyRCwgVGV4U3ViSW1hZ2UyRCwg
dW5zaWduZWQsIHVuc2lnbmVkLCB1bnNpZ25lZCwgdW5zaWduZWQsIHVuc2lnbmVkLCB1bnNpZ25l
ZCwgdW5zaWduZWQsIHVuc2lnbmVkLCBjb25zdCB2b2lkKikKKworREVMRUdBVEVfVE9fR0xfMih1
bmlmb3JtMWYsIFVuaWZvcm0xZiwgbG9uZywgZmxvYXQpCisKK0RFTEVHQVRFX1RPX0dMXzModW5p
Zm9ybTFmdiwgVW5pZm9ybTFmdiwgbG9uZywgaW50LCBmbG9hdCopCisKK0RFTEVHQVRFX1RPX0dM
XzIodW5pZm9ybTFpLCBVbmlmb3JtMWksIGxvbmcsIGludCkKKworREVMRUdBVEVfVE9fR0xfMyh1
bmlmb3JtMWl2LCBVbmlmb3JtMWl2LCBsb25nLCBpbnQsIGludCopCisKK0RFTEVHQVRFX1RPX0dM
XzModW5pZm9ybTJmLCBVbmlmb3JtMmYsIGxvbmcsIGZsb2F0LCBmbG9hdCkKKworREVMRUdBVEVf
VE9fR0xfMyh1bmlmb3JtMmZ2LCBVbmlmb3JtMmZ2LCBsb25nLCBpbnQsIGZsb2F0KikKKworREVM
RUdBVEVfVE9fR0xfMyh1bmlmb3JtMmksIFVuaWZvcm0yaSwgbG9uZywgaW50LCBpbnQpCisKK0RF
TEVHQVRFX1RPX0dMXzModW5pZm9ybTJpdiwgVW5pZm9ybTJpdiwgbG9uZywgaW50LCBpbnQqKQor
CitERUxFR0FURV9UT19HTF80KHVuaWZvcm0zZiwgVW5pZm9ybTNmLCBsb25nLCBmbG9hdCwgZmxv
YXQsIGZsb2F0KQorCitERUxFR0FURV9UT19HTF8zKHVuaWZvcm0zZnYsIFVuaWZvcm0zZnYsIGxv
bmcsIGludCwgZmxvYXQqKQorCitERUxFR0FURV9UT19HTF80KHVuaWZvcm0zaSwgVW5pZm9ybTNp
LCBsb25nLCBpbnQsIGludCwgaW50KQorCitERUxFR0FURV9UT19HTF8zKHVuaWZvcm0zaXYsIFVu
aWZvcm0zaXYsIGxvbmcsIGludCwgaW50KikKKworREVMRUdBVEVfVE9fR0xfNSh1bmlmb3JtNGYs
IFVuaWZvcm00ZiwgbG9uZywgZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQpCisKK0RFTEVHQVRF
X1RPX0dMXzModW5pZm9ybTRmdiwgVW5pZm9ybTRmdiwgbG9uZywgaW50LCBmbG9hdCopCisKK0RF
TEVHQVRFX1RPX0dMXzUodW5pZm9ybTRpLCBVbmlmb3JtNGksIGxvbmcsIGludCwgaW50LCBpbnQs
IGludCkKKworREVMRUdBVEVfVE9fR0xfMyh1bmlmb3JtNGl2LCBVbmlmb3JtNGl2LCBsb25nLCBp
bnQsIGludCopCisKK0RFTEVHQVRFX1RPX0dMXzQodW5pZm9ybU1hdHJpeDJmdiwgVW5pZm9ybU1h
dHJpeDJmdiwgbG9uZywgaW50LCBib29sLCBjb25zdCBmbG9hdCopCisKK0RFTEVHQVRFX1RPX0dM
XzQodW5pZm9ybU1hdHJpeDNmdiwgVW5pZm9ybU1hdHJpeDNmdiwgbG9uZywgaW50LCBib29sLCBj
b25zdCBmbG9hdCopCisKK0RFTEVHQVRFX1RPX0dMXzQodW5pZm9ybU1hdHJpeDRmdiwgVW5pZm9y
bU1hdHJpeDRmdiwgbG9uZywgaW50LCBib29sLCBjb25zdCBmbG9hdCopCisKK0RFTEVHQVRFX1RP
X0dMXzEodXNlUHJvZ3JhbSwgVXNlUHJvZ3JhbSwgV2ViR0xJZCkKKworREVMRUdBVEVfVE9fR0xf
MSh2YWxpZGF0ZVByb2dyYW0sIFZhbGlkYXRlUHJvZ3JhbSwgV2ViR0xJZCkKKworREVMRUdBVEVf
VE9fR0xfMih2ZXJ0ZXhBdHRyaWIxZiwgVmVydGV4QXR0cmliMWYsIHVuc2lnbmVkIGxvbmcsIGZs
b2F0KQorCitERUxFR0FURV9UT19HTF8yKHZlcnRleEF0dHJpYjFmdiwgVmVydGV4QXR0cmliMWZ2
LCB1bnNpZ25lZCBsb25nLCBjb25zdCBmbG9hdCopCisKK0RFTEVHQVRFX1RPX0dMXzModmVydGV4
QXR0cmliMmYsIFZlcnRleEF0dHJpYjJmLCB1bnNpZ25lZCBsb25nLCBmbG9hdCwgZmxvYXQpCisK
K0RFTEVHQVRFX1RPX0dMXzIodmVydGV4QXR0cmliMmZ2LCBWZXJ0ZXhBdHRyaWIyZnYsIHVuc2ln
bmVkIGxvbmcsIGNvbnN0IGZsb2F0KikKKworREVMRUdBVEVfVE9fR0xfNCh2ZXJ0ZXhBdHRyaWIz
ZiwgVmVydGV4QXR0cmliM2YsIHVuc2lnbmVkIGxvbmcsIGZsb2F0LCBmbG9hdCwgZmxvYXQpCisK
K0RFTEVHQVRFX1RPX0dMXzIodmVydGV4QXR0cmliM2Z2LCBWZXJ0ZXhBdHRyaWIzZnYsIHVuc2ln
bmVkIGxvbmcsIGNvbnN0IGZsb2F0KikKKworREVMRUdBVEVfVE9fR0xfNSh2ZXJ0ZXhBdHRyaWI0
ZiwgVmVydGV4QXR0cmliNGYsIHVuc2lnbmVkIGxvbmcsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZs
b2F0KQorCitERUxFR0FURV9UT19HTF8yKHZlcnRleEF0dHJpYjRmdiwgVmVydGV4QXR0cmliNGZ2
LCB1bnNpZ25lZCBsb25nLCBjb25zdCBmbG9hdCopCisKK3ZvaWQgV2ViR3JhcGhpY3NDb250ZXh0
M0REZWZhdWx0SW1wbDo6dmVydGV4QXR0cmliUG9pbnRlcih1bnNpZ25lZCBsb25nIGluZHgsIGlu
dCBzaXplLCBpbnQgdHlwZSwgYm9vbCBub3JtYWxpemVkLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgc3RyaWRl
LCB1bnNpZ25lZCBsb25nIG9mZnNldCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKwor
ICAgIGlmIChtX2JvdW5kQXJyYXlCdWZmZXIgPD0gMCkgeworICAgICAgICAvLyBGSVhNRTogcmFp
c2UgZXhjZXB0aW9uLgorICAgICAgICAvLyBMb2dNZXNzYWdlZigoImJ1ZmZlckRhdGE6IG5vIGJ1
ZmZlciBib3VuZCIpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChpbmR4IDwg
TnVtVHJhY2tlZFBvaW50ZXJTdGF0ZXMpIHsKKyAgICAgICAgVmVydGV4QXR0cmliUG9pbnRlclN0
YXRlJiBzdGF0ZSA9IG1fdmVydGV4QXR0cmliUG9pbnRlclN0YXRlW2luZHhdOworICAgICAgICBz
dGF0ZS5idWZmZXIgPSBtX2JvdW5kQXJyYXlCdWZmZXI7CisgICAgICAgIHN0YXRlLmluZHggPSBp
bmR4OworICAgICAgICBzdGF0ZS5zaXplID0gc2l6ZTsKKyAgICAgICAgc3RhdGUudHlwZSA9IHR5
cGU7CisgICAgICAgIHN0YXRlLm5vcm1hbGl6ZWQgPSBub3JtYWxpemVkOworICAgICAgICBzdGF0
ZS5zdHJpZGUgPSBzdHJpZGU7CisgICAgICAgIHN0YXRlLm9mZnNldCA9IG9mZnNldDsKKyAgICB9
CisKKyAgICBnbFZlcnRleEF0dHJpYlBvaW50ZXIoaW5keCwgc2l6ZSwgdHlwZSwgbm9ybWFsaXpl
ZCwgc3RyaWRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PHZv
aWQqPihzdGF0aWNfY2FzdDxpbnRwdHJfdD4ob2Zmc2V0KSkpOworfQorCitERUxFR0FURV9UT19H
TF80KHZpZXdwb3J0LCBWaWV3cG9ydCwgbG9uZywgbG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWdu
ZWQgbG9uZykKKwordW5zaWduZWQgV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6Y3Jl
YXRlQnVmZmVyKCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBHTHVpbnQgbzsK
KyAgICBnbEdlbkJ1ZmZlcnMoMSwgJm8pOworICAgIHJldHVybiBvOworfQorCit1bnNpZ25lZCBX
ZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpjcmVhdGVGcmFtZWJ1ZmZlcigpCit7Cisg
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgR0x1aW50IG8gPSAwOworICAgIGdsR2VuRnJh
bWVidWZmZXJzRVhUKDEsICZvKTsKKyAgICByZXR1cm4gbzsKK30KKwordW5zaWduZWQgV2ViR3Jh
cGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6Y3JlYXRlUHJvZ3JhbSgpCit7CisgICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgcmV0dXJuIGdsQ3JlYXRlUHJvZ3JhbSgpOworfQorCit1bnNp
Z25lZCBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpjcmVhdGVSZW5kZXJidWZmZXIo
KQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIEdMdWludCBvOworICAgIGdsR2Vu
UmVuZGVyYnVmZmVyc0VYVCgxLCAmbyk7CisgICAgcmV0dXJuIG87Cit9CisKK0RFTEVHQVRFX1RP
X0dMXzFSKGNyZWF0ZVNoYWRlciwgQ3JlYXRlU2hhZGVyLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25l
ZCk7CisKK3Vuc2lnbmVkIFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OmNyZWF0ZVRl
eHR1cmUoKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIEdMdWludCBvOworICAg
IGdsR2VuVGV4dHVyZXMoMSwgJm8pOworICAgIHJldHVybiBvOworfQorCit2b2lkIFdlYkdyYXBo
aWNzQ29udGV4dDNERGVmYXVsdEltcGw6OmRlbGV0ZUJ1ZmZlcih1bnNpZ25lZCBidWZmZXIpCit7
CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgZ2xEZWxldGVCdWZmZXJzKDEsICZidWZm
ZXIpOworfQorCit2b2lkIFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OmRlbGV0ZUZy
YW1lYnVmZmVyKHVuc2lnbmVkIGZyYW1lYnVmZmVyKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOworICAgIGdsRGVsZXRlRnJhbWVidWZmZXJzRVhUKDEsICZmcmFtZWJ1ZmZlcik7Cit9CisK
K3ZvaWQgV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6ZGVsZXRlUHJvZ3JhbSh1bnNp
Z25lZCBwcm9ncmFtKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGdsRGVsZXRl
UHJvZ3JhbShwcm9ncmFtKTsKK30KKwordm9pZCBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJ
bXBsOjpkZWxldGVSZW5kZXJidWZmZXIodW5zaWduZWQgcmVuZGVyYnVmZmVyKQoreworICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOworICAgIGdsRGVsZXRlUmVuZGVyYnVmZmVyc0VYVCgxLCAmcmVu
ZGVyYnVmZmVyKTsKK30KKwordm9pZCBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpk
ZWxldGVTaGFkZXIodW5zaWduZWQgc2hhZGVyKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OworICAgIGdsRGVsZXRlU2hhZGVyKHNoYWRlcik7Cit9CisKK3ZvaWQgV2ViR3JhcGhpY3NDb250
ZXh0M0REZWZhdWx0SW1wbDo6ZGVsZXRlVGV4dHVyZSh1bnNpZ25lZCB0ZXh0dXJlKQoreworICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGdsRGVsZXRlVGV4dHVyZXMoMSwgJnRleHR1cmUp
OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRSgzRF9DQU5W
QVMpCkluZGV4OiBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVs
dEltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYkdyYXBoaWNzQ29u
dGV4dDNERGVmYXVsdEltcGwuaAkocmV2aXNpb24gMCkKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMv
V2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDQwOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0Ogor
ICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisg
KiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdv
b2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZm5kZWYgV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbF9oCisjZGVmaW5l
IFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGxfaAorCisjaWYgRU5BQkxFKDNEX0NBTlZB
UykKKworI2luY2x1ZGUgIldlYkdyYXBoaWNzQ29udGV4dDNELmgiCisKKyNpbmNsdWRlIDx3dGYv
TGlzdEhhc2hTZXQuaD4KKworI2lmIE9TKFdJTkRPV1MpCisjaW5jbHVkZSA8d2luZG93cy5oPgor
I2VuZGlmCisKKyNpbmNsdWRlICJHTC9nbGV3LmgiCisKKyNpZiBQTEFURk9STShDRykKKyNpbmNs
dWRlIDxPcGVuR0wvT3BlbkdMLmg+CisjZWxzZQorI2RlZmluZSBGTElQX0ZSQU1FQlVGRkVSX1ZF
UlRJQ0FMTFkKKyNlbmRpZgorCisjaWYgT1MoTElOVVgpCisjaW5jbHVkZSAiR0wvZ2x4ZXcuaCIK
KyNlbmRpZgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworLy8gVGhlIGRlZmF1bHQgaW1wbGVtZW50
YXRpb24gb2YgV2ViR0wuIEluIENocm9taXVtLCB1c2luZyB0aGlzIGNsYXNzCisvLyByZXF1aXJl
cyB0aGUgc2FuZGJveCB0byBiZSBkaXNhYmxlZCwgd2hpY2ggaXMgc3Ryb25nbHkgZGlzY291cmFn
ZWQuCisvLyBJdCBpcyBwcm92aWRlZCBmb3Igc3VwcG9ydCBvZiB0ZXN0X3NoZWxsIGFuZCBhbnkg
Q2hyb21pdW0gcG9ydHMKKy8vIHdoZXJlIGFuIGluLXJlbmRlcmVyIFdlYkdMIGltcGxlbWVudGF0
aW9uIHdvdWxkIGJlIGhlbHBmdWwuCisKK2NsYXNzIFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVs
dEltcGwgOiBwdWJsaWMgV2ViR3JhcGhpY3NDb250ZXh0M0QgeworcHVibGljOgorICAgIFdlYkdy
YXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGwoKTsKKyAgICB2aXJ0dWFsIH5XZWJHcmFwaGljc0Nv
bnRleHQzRERlZmF1bHRJbXBsKCk7CisKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBXZWJH
cmFwaGljc0NvbnRleHQzRCBtZXRob2RzCisgICAgdmlydHVhbCBib29sIGluaXRpYWxpemUoV2Vi
R3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cmlidXRlcyk7CisgICAgdmlydHVhbCBi
b29sIG1ha2VDb250ZXh0Q3VycmVudCgpOworCisgICAgdmlydHVhbCBpbnQgd2lkdGgoKTsKKyAg
ICB2aXJ0dWFsIGludCBoZWlnaHQoKTsKKworICAgIHZpcnR1YWwgaW50IHNpemVJbkJ5dGVzKGlu
dCB0eXBlKTsKKworICAgIHZpcnR1YWwgdm9pZCByZXNoYXBlKGludCB3aWR0aCwgaW50IGhlaWdo
dCk7CisKKyAgICB2aXJ0dWFsIGJvb2wgcmVhZEJhY2tGcmFtZWJ1ZmZlcih1bnNpZ25lZCBjaGFy
KiBwaXhlbHMsIHNpemVfdCBidWZmZXJTaXplKTsKKworICAgIHZpcnR1YWwgdm9pZCBzeW50aGVz
aXplR0xFcnJvcih1bnNpZ25lZCBsb25nIGVycm9yKTsKKworICAgIHZpcnR1YWwgdm9pZCBhY3Rp
dmVUZXh0dXJlKHVuc2lnbmVkIGxvbmcgdGV4dHVyZSk7CisgICAgdmlydHVhbCB2b2lkIGF0dGFj
aFNoYWRlcihXZWJHTElkIHByb2dyYW0sIFdlYkdMSWQgc2hhZGVyKTsKKyAgICB2aXJ0dWFsIHZv
aWQgYmluZEF0dHJpYkxvY2F0aW9uKFdlYkdMSWQgcHJvZ3JhbSwgdW5zaWduZWQgbG9uZyBpbmRl
eCwgY29uc3QgY2hhciogbmFtZSk7CisgICAgdmlydHVhbCB2b2lkIGJpbmRCdWZmZXIodW5zaWdu
ZWQgbG9uZyB0YXJnZXQsIFdlYkdMSWQgYnVmZmVyKTsKKyAgICB2aXJ0dWFsIHZvaWQgYmluZEZy
YW1lYnVmZmVyKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBXZWJHTElkIGZyYW1lYnVmZmVyKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgYmluZFJlbmRlcmJ1ZmZlcih1bnNpZ25lZCBsb25nIHRhcmdldCwgV2Vi
R0xJZCByZW5kZXJidWZmZXIpOworICAgIHZpcnR1YWwgdm9pZCBiaW5kVGV4dHVyZSh1bnNpZ25l
ZCBsb25nIHRhcmdldCwgV2ViR0xJZCB0ZXh0dXJlKTsKKyAgICB2aXJ0dWFsIHZvaWQgYmxlbmRD
b2xvcihkb3VibGUgcmVkLCBkb3VibGUgZ3JlZW4sIGRvdWJsZSBibHVlLCBkb3VibGUgYWxwaGEp
OworICAgIHZpcnR1YWwgdm9pZCBibGVuZEVxdWF0aW9uKHVuc2lnbmVkIGxvbmcgbW9kZSk7Cisg
ICAgdmlydHVhbCB2b2lkIGJsZW5kRXF1YXRpb25TZXBhcmF0ZSh1bnNpZ25lZCBsb25nIG1vZGVS
R0IsIHVuc2lnbmVkIGxvbmcgbW9kZUFscGhhKTsKKyAgICB2aXJ0dWFsIHZvaWQgYmxlbmRGdW5j
KHVuc2lnbmVkIGxvbmcgc2ZhY3RvciwgdW5zaWduZWQgbG9uZyBkZmFjdG9yKTsKKyAgICB2aXJ0
dWFsIHZvaWQgYmxlbmRGdW5jU2VwYXJhdGUodW5zaWduZWQgbG9uZyBzcmNSR0IsIHVuc2lnbmVk
IGxvbmcgZHN0UkdCLCB1bnNpZ25lZCBsb25nIHNyY0FscGhhLCB1bnNpZ25lZCBsb25nIGRzdEFs
cGhhKTsKKworICAgIHZpcnR1YWwgdm9pZCBidWZmZXJEYXRhKHVuc2lnbmVkIGxvbmcgdGFyZ2V0
LCBpbnQgc2l6ZSwgY29uc3Qgdm9pZCogZGF0YSwgdW5zaWduZWQgbG9uZyB1c2FnZSk7CisgICAg
dmlydHVhbCB2b2lkIGJ1ZmZlclN1YkRhdGEodW5zaWduZWQgbG9uZyB0YXJnZXQsIGxvbmcgb2Zm
c2V0LCBpbnQgc2l6ZSwgY29uc3Qgdm9pZCogZGF0YSk7CisKKyAgICB2aXJ0dWFsIHVuc2lnbmVk
IGxvbmcgY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyh1bnNpZ25lZCBsb25nIHRhcmdldCk7CisgICAg
dmlydHVhbCB2b2lkIGNsZWFyKHVuc2lnbmVkIGxvbmcgbWFzayk7CisgICAgdmlydHVhbCB2b2lk
IGNsZWFyQ29sb3IoZG91YmxlIHJlZCwgZG91YmxlIGdyZWVuLCBkb3VibGUgYmx1ZSwgZG91Ymxl
IGFscGhhKTsKKyAgICB2aXJ0dWFsIHZvaWQgY2xlYXJEZXB0aChkb3VibGUgZGVwdGgpOworICAg
IHZpcnR1YWwgdm9pZCBjbGVhclN0ZW5jaWwobG9uZyBzKTsKKyAgICB2aXJ0dWFsIHZvaWQgY29s
b3JNYXNrKGJvb2wgcmVkLCBib29sIGdyZWVuLCBib29sIGJsdWUsIGJvb2wgYWxwaGEpOworICAg
IHZpcnR1YWwgdm9pZCBjb21waWxlU2hhZGVyKFdlYkdMSWQgc2hhZGVyKTsKKworICAgIHZpcnR1
YWwgdm9pZCBjb3B5VGV4SW1hZ2UyRCh1bnNpZ25lZCBsb25nIHRhcmdldCwgbG9uZyBsZXZlbCwg
dW5zaWduZWQgbG9uZyBpbnRlcm5hbGZvcm1hdCwgbG9uZyB4LCBsb25nIHksIHVuc2lnbmVkIGxv
bmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0LCBsb25nIGJvcmRlcik7CisgICAgdmlydHVh
bCB2b2lkIGNvcHlUZXhTdWJJbWFnZTJEKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBsb25nIGxldmVs
LCBsb25nIHhvZmZzZXQsIGxvbmcgeW9mZnNldCwgbG9uZyB4LCBsb25nIHksIHVuc2lnbmVkIGxv
bmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0KTsKKyAgICB2aXJ0dWFsIHZvaWQgY3VsbEZh
Y2UodW5zaWduZWQgbG9uZyBtb2RlKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVwdGhGdW5jKHVuc2ln
bmVkIGxvbmcgZnVuYyk7CisgICAgdmlydHVhbCB2b2lkIGRlcHRoTWFzayhib29sIGZsYWcpOwor
ICAgIHZpcnR1YWwgdm9pZCBkZXB0aFJhbmdlKGRvdWJsZSB6TmVhciwgZG91YmxlIHpGYXIpOwor
ICAgIHZpcnR1YWwgdm9pZCBkZXRhY2hTaGFkZXIoV2ViR0xJZCBwcm9ncmFtLCBXZWJHTElkIHNo
YWRlcik7CisgICAgdmlydHVhbCB2b2lkIGRpc2FibGUodW5zaWduZWQgbG9uZyBjYXApOworICAg
IHZpcnR1YWwgdm9pZCBkaXNhYmxlVmVydGV4QXR0cmliQXJyYXkodW5zaWduZWQgbG9uZyBpbmRl
eCk7CisgICAgdmlydHVhbCB2b2lkIGRyYXdBcnJheXModW5zaWduZWQgbG9uZyBtb2RlLCBsb25n
IGZpcnN0LCBsb25nIGNvdW50KTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0VsZW1lbnRzKHVuc2ln
bmVkIGxvbmcgbW9kZSwgdW5zaWduZWQgbG9uZyBjb3VudCwgdW5zaWduZWQgbG9uZyB0eXBlLCBs
b25nIG9mZnNldCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgZW5hYmxlKHVuc2lnbmVkIGxvbmcgY2Fw
KTsKKyAgICB2aXJ0dWFsIHZvaWQgZW5hYmxlVmVydGV4QXR0cmliQXJyYXkodW5zaWduZWQgbG9u
ZyBpbmRleCk7CisgICAgdmlydHVhbCB2b2lkIGZpbmlzaCgpOworICAgIHZpcnR1YWwgdm9pZCBm
bHVzaCgpOworICAgIHZpcnR1YWwgdm9pZCBmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcih1bnNpZ25l
ZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBhdHRhY2htZW50LCB1bnNpZ25lZCBsb25nIHJl
bmRlcmJ1ZmZlcnRhcmdldCwgV2ViR0xJZCByZW5kZXJidWZmZXIpOworICAgIHZpcnR1YWwgdm9p
ZCBmcmFtZWJ1ZmZlclRleHR1cmUyRCh1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9u
ZyBhdHRhY2htZW50LCB1bnNpZ25lZCBsb25nIHRleHRhcmdldCwgV2ViR0xJZCB0ZXh0dXJlLCBs
b25nIGxldmVsKTsKKyAgICB2aXJ0dWFsIHZvaWQgZnJvbnRGYWNlKHVuc2lnbmVkIGxvbmcgbW9k
ZSk7CisgICAgdmlydHVhbCB2b2lkIGdlbmVyYXRlTWlwbWFwKHVuc2lnbmVkIGxvbmcgdGFyZ2V0
KTsKKworICAgIHZpcnR1YWwgYm9vbCBnZXRBY3RpdmVBdHRyaWIoV2ViR0xJZCBwcm9ncmFtLCB1
bnNpZ25lZCBsb25nIGluZGV4LCBBY3RpdmVJbmZvJik7CisgICAgdmlydHVhbCBib29sIGdldEFj
dGl2ZVVuaWZvcm0oV2ViR0xJZCBwcm9ncmFtLCB1bnNpZ25lZCBsb25nIGluZGV4LCBBY3RpdmVJ
bmZvJik7CisKKyAgICB2aXJ0dWFsIGludCAgZ2V0QXR0cmliTG9jYXRpb24oV2ViR0xJZCBwcm9n
cmFtLCBjb25zdCBjaGFyKiBuYW1lKTsKKworICAgIHZpcnR1YWwgdm9pZCBnZXRCb29sZWFudih1
bnNpZ25lZCBsb25nIHBuYW1lLCB1bnNpZ25lZCBjaGFyKiB2YWx1ZSk7CisKKyAgICB2aXJ0dWFs
IHZvaWQgZ2V0QnVmZmVyUGFyYW1ldGVyaXYodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVk
IGxvbmcgcG5hbWUsIGludCogdmFsdWUpOworCisgICAgdmlydHVhbCBBdHRyaWJ1dGVzIGdldENv
bnRleHRBdHRyaWJ1dGVzKCk7CisKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGxvbmcgZ2V0RXJyb3Io
KTsKKworICAgIHZpcnR1YWwgdm9pZCBnZXRGbG9hdHYodW5zaWduZWQgbG9uZyBwbmFtZSwgZmxv
YXQqIHZhbHVlKTsKKworICAgIHZpcnR1YWwgdm9pZCBnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQ
YXJhbWV0ZXJpdih1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBhdHRhY2htZW50
LCB1bnNpZ25lZCBsb25nIHBuYW1lLCBpbnQqIHZhbHVlKTsKKworICAgIHZpcnR1YWwgdm9pZCBn
ZXRJbnRlZ2Vydih1bnNpZ25lZCBsb25nIHBuYW1lLCBpbnQqIHZhbHVlKTsKKworICAgIHZpcnR1
YWwgdm9pZCBnZXRQcm9ncmFtaXYoV2ViR0xJZCBwcm9ncmFtLCB1bnNpZ25lZCBsb25nIHBuYW1l
LCBpbnQqIHZhbHVlKTsKKworICAgIHZpcnR1YWwgV2ViU3RyaW5nIGdldFByb2dyYW1JbmZvTG9n
KFdlYkdMSWQgcHJvZ3JhbSk7CisKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0UmVuZGVyYnVmZmVyUGFy
YW1ldGVyaXYodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgcG5hbWUsIGludCog
dmFsdWUpOworCisgICAgdmlydHVhbCB2b2lkIGdldFNoYWRlcml2KFdlYkdMSWQgc2hhZGVyLCB1
bnNpZ25lZCBsb25nIHBuYW1lLCBpbnQqIHZhbHVlKTsKKworICAgIHZpcnR1YWwgV2ViU3RyaW5n
IGdldFNoYWRlckluZm9Mb2coV2ViR0xJZCBzaGFkZXIpOworCisgICAgLy8gVEJECisgICAgLy8g
dm9pZCBnbEdldFNoYWRlclByZWNpc2lvbkZvcm1hdCAoR0xlbnVtIHNoYWRlcnR5cGUsIEdMZW51
bSBwcmVjaXNpb250eXBlLCBHTGludCogcmFuZ2UsIEdMaW50KiBwcmVjaXNpb24pOworCisgICAg
dmlydHVhbCBXZWJTdHJpbmcgZ2V0U2hhZGVyU291cmNlKFdlYkdMSWQgc2hhZGVyKTsKKyAgICB2
aXJ0dWFsIFdlYlN0cmluZyBnZXRTdHJpbmcodW5zaWduZWQgbG9uZyBuYW1lKTsKKworICAgIHZp
cnR1YWwgdm9pZCBnZXRUZXhQYXJhbWV0ZXJmdih1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWdu
ZWQgbG9uZyBwbmFtZSwgZmxvYXQqIHZhbHVlKTsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0VGV4UGFy
YW1ldGVyaXYodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgcG5hbWUsIGludCog
dmFsdWUpOworCisgICAgdmlydHVhbCB2b2lkIGdldFVuaWZvcm1mdihXZWJHTElkIHByb2dyYW0s
IGxvbmcgbG9jYXRpb24sIGZsb2F0KiB2YWx1ZSk7CisgICAgdmlydHVhbCB2b2lkIGdldFVuaWZv
cm1pdihXZWJHTElkIHByb2dyYW0sIGxvbmcgbG9jYXRpb24sIGludCogdmFsdWUpOworCisgICAg
dmlydHVhbCBsb25nIGdldFVuaWZvcm1Mb2NhdGlvbihXZWJHTElkIHByb2dyYW0sIGNvbnN0IGNo
YXIqIG5hbWUpOworCisgICAgdmlydHVhbCB2b2lkIGdldFZlcnRleEF0dHJpYmZ2KHVuc2lnbmVk
IGxvbmcgaW5kZXgsIHVuc2lnbmVkIGxvbmcgcG5hbWUsIGZsb2F0KiB2YWx1ZSk7CisgICAgdmly
dHVhbCB2b2lkIGdldFZlcnRleEF0dHJpYml2KHVuc2lnbmVkIGxvbmcgaW5kZXgsIHVuc2lnbmVk
IGxvbmcgcG5hbWUsIGludCogdmFsdWUpOworCisgICAgdmlydHVhbCBsb25nIGdldFZlcnRleEF0
dHJpYk9mZnNldCh1bnNpZ25lZCBsb25nIGluZGV4LCB1bnNpZ25lZCBsb25nIHBuYW1lKTsKKwor
ICAgIHZpcnR1YWwgdm9pZCBoaW50KHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25n
IG1vZGUpOworICAgIHZpcnR1YWwgYm9vbCBpc0J1ZmZlcihXZWJHTElkIGJ1ZmZlcik7CisgICAg
dmlydHVhbCBib29sIGlzRW5hYmxlZCh1bnNpZ25lZCBsb25nIGNhcCk7CisgICAgdmlydHVhbCBi
b29sIGlzRnJhbWVidWZmZXIoV2ViR0xJZCBmcmFtZWJ1ZmZlcik7CisgICAgdmlydHVhbCBib29s
IGlzUHJvZ3JhbShXZWJHTElkIHByb2dyYW0pOworICAgIHZpcnR1YWwgYm9vbCBpc1JlbmRlcmJ1
ZmZlcihXZWJHTElkIHJlbmRlcmJ1ZmZlcik7CisgICAgdmlydHVhbCBib29sIGlzU2hhZGVyKFdl
YkdMSWQgc2hhZGVyKTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNUZXh0dXJlKFdlYkdMSWQgdGV4dHVy
ZSk7CisgICAgdmlydHVhbCB2b2lkIGxpbmVXaWR0aChkb3VibGUpOworICAgIHZpcnR1YWwgdm9p
ZCBsaW5rUHJvZ3JhbShXZWJHTElkIHByb2dyYW0pOworICAgIHZpcnR1YWwgdm9pZCBwaXhlbFN0
b3JlaSh1bnNpZ25lZCBsb25nIHBuYW1lLCBsb25nIHBhcmFtKTsKKyAgICB2aXJ0dWFsIHZvaWQg
cG9seWdvbk9mZnNldChkb3VibGUgZmFjdG9yLCBkb3VibGUgdW5pdHMpOworCisgICAgdmlydHVh
bCB2b2lkIHJlYWRQaXhlbHMobG9uZyB4LCBsb25nIHksIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVu
c2lnbmVkIGxvbmcgaGVpZ2h0LCB1bnNpZ25lZCBsb25nIGZvcm1hdCwgdW5zaWduZWQgbG9uZyB0
eXBlLCB2b2lkKiBwaXhlbHMpOworCisgICAgdmlydHVhbCB2b2lkIHJlbGVhc2VTaGFkZXJDb21w
aWxlcigpOworICAgIHZpcnR1YWwgdm9pZCByZW5kZXJidWZmZXJTdG9yYWdlKHVuc2lnbmVkIGxv
bmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIGludGVybmFsZm9ybWF0LCB1bnNpZ25lZCBsb25nIHdp
ZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCk7CisgICAgdmlydHVhbCB2b2lkIHNhbXBsZUNvdmVy
YWdlKGRvdWJsZSB2YWx1ZSwgYm9vbCBpbnZlcnQpOworICAgIHZpcnR1YWwgdm9pZCBzY2lzc29y
KGxvbmcgeCwgbG9uZyB5LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdo
dCk7CisgICAgdmlydHVhbCB2b2lkIHNoYWRlclNvdXJjZShXZWJHTElkIHNoYWRlciwgY29uc3Qg
Y2hhciogc3RyaW5nKTsKKyAgICB2aXJ0dWFsIHZvaWQgc3RlbmNpbEZ1bmModW5zaWduZWQgbG9u
ZyBmdW5jLCBsb25nIHJlZiwgdW5zaWduZWQgbG9uZyBtYXNrKTsKKyAgICB2aXJ0dWFsIHZvaWQg
c3RlbmNpbEZ1bmNTZXBhcmF0ZSh1bnNpZ25lZCBsb25nIGZhY2UsIHVuc2lnbmVkIGxvbmcgZnVu
YywgbG9uZyByZWYsIHVuc2lnbmVkIGxvbmcgbWFzayk7CisgICAgdmlydHVhbCB2b2lkIHN0ZW5j
aWxNYXNrKHVuc2lnbmVkIGxvbmcgbWFzayk7CisgICAgdmlydHVhbCB2b2lkIHN0ZW5jaWxNYXNr
U2VwYXJhdGUodW5zaWduZWQgbG9uZyBmYWNlLCB1bnNpZ25lZCBsb25nIG1hc2spOworICAgIHZp
cnR1YWwgdm9pZCBzdGVuY2lsT3AodW5zaWduZWQgbG9uZyBmYWlsLCB1bnNpZ25lZCBsb25nIHpm
YWlsLCB1bnNpZ25lZCBsb25nIHpwYXNzKTsKKyAgICB2aXJ0dWFsIHZvaWQgc3RlbmNpbE9wU2Vw
YXJhdGUodW5zaWduZWQgbG9uZyBmYWNlLCB1bnNpZ25lZCBsb25nIGZhaWwsIHVuc2lnbmVkIGxv
bmcgemZhaWwsIHVuc2lnbmVkIGxvbmcgenBhc3MpOworCisgICAgdmlydHVhbCB2b2lkIHRleElt
YWdlMkQodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBsZXZlbCwgdW5zaWduZWQgaW50ZXJuYWxm
b3JtYXQsIHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQsIHVuc2lnbmVkIGJvcmRlciwg
dW5zaWduZWQgZm9ybWF0LCB1bnNpZ25lZCB0eXBlLCBjb25zdCB2b2lkKiBwaXhlbHMpOworCisg
ICAgdmlydHVhbCB2b2lkIHRleFBhcmFtZXRlcmYodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBw
bmFtZSwgZmxvYXQgcGFyYW0pOworICAgIHZpcnR1YWwgdm9pZCB0ZXhQYXJhbWV0ZXJpKHVuc2ln
bmVkIHRhcmdldCwgdW5zaWduZWQgcG5hbWUsIGludCBwYXJhbSk7CisKKyAgICB2aXJ0dWFsIHZv
aWQgdGV4U3ViSW1hZ2UyRCh1bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVkIGxldmVsLCB1bnNpZ25l
ZCB4b2Zmc2V0LCB1bnNpZ25lZCB5b2Zmc2V0LCB1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVp
Z2h0LCB1bnNpZ25lZCBmb3JtYXQsIHVuc2lnbmVkIHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVscyk7
CisKKyAgICB2aXJ0dWFsIHZvaWQgdW5pZm9ybTFmKGxvbmcgbG9jYXRpb24sIGZsb2F0IHgpOwor
ICAgIHZpcnR1YWwgdm9pZCB1bmlmb3JtMWZ2KGxvbmcgbG9jYXRpb24sIGludCBjb3VudCwgZmxv
YXQqIHYpOworICAgIHZpcnR1YWwgdm9pZCB1bmlmb3JtMWkobG9uZyBsb2NhdGlvbiwgaW50IHgp
OworICAgIHZpcnR1YWwgdm9pZCB1bmlmb3JtMWl2KGxvbmcgbG9jYXRpb24sIGludCBjb3VudCwg
aW50KiB2KTsKKyAgICB2aXJ0dWFsIHZvaWQgdW5pZm9ybTJmKGxvbmcgbG9jYXRpb24sIGZsb2F0
IHgsIGZsb2F0IHkpOworICAgIHZpcnR1YWwgdm9pZCB1bmlmb3JtMmZ2KGxvbmcgbG9jYXRpb24s
IGludCBjb3VudCwgZmxvYXQqIHYpOworICAgIHZpcnR1YWwgdm9pZCB1bmlmb3JtMmkobG9uZyBs
b2NhdGlvbiwgaW50IHgsIGludCB5KTsKKyAgICB2aXJ0dWFsIHZvaWQgdW5pZm9ybTJpdihsb25n
IGxvY2F0aW9uLCBpbnQgY291bnQsIGludCogdik7CisgICAgdmlydHVhbCB2b2lkIHVuaWZvcm0z
Zihsb25nIGxvY2F0aW9uLCBmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB6KTsKKyAgICB2aXJ0dWFs
IHZvaWQgdW5pZm9ybTNmdihsb25nIGxvY2F0aW9uLCBpbnQgY291bnQsIGZsb2F0KiB2KTsKKyAg
ICB2aXJ0dWFsIHZvaWQgdW5pZm9ybTNpKGxvbmcgbG9jYXRpb24sIGludCB4LCBpbnQgeSwgaW50
IHopOworICAgIHZpcnR1YWwgdm9pZCB1bmlmb3JtM2l2KGxvbmcgbG9jYXRpb24sIGludCBjb3Vu
dCwgaW50KiB2KTsKKyAgICB2aXJ0dWFsIHZvaWQgdW5pZm9ybTRmKGxvbmcgbG9jYXRpb24sIGZs
b2F0IHgsIGZsb2F0IHksIGZsb2F0IHosIGZsb2F0IHcpOworICAgIHZpcnR1YWwgdm9pZCB1bmlm
b3JtNGZ2KGxvbmcgbG9jYXRpb24sIGludCBjb3VudCwgZmxvYXQqIHYpOworICAgIHZpcnR1YWwg
dm9pZCB1bmlmb3JtNGkobG9uZyBsb2NhdGlvbiwgaW50IHgsIGludCB5LCBpbnQgeiwgaW50IHcp
OworICAgIHZpcnR1YWwgdm9pZCB1bmlmb3JtNGl2KGxvbmcgbG9jYXRpb24sIGludCBjb3VudCwg
aW50KiB2KTsKKyAgICB2aXJ0dWFsIHZvaWQgdW5pZm9ybU1hdHJpeDJmdihsb25nIGxvY2F0aW9u
LCBpbnQgY291bnQsIGJvb2wgdHJhbnNwb3NlLCBjb25zdCBmbG9hdCogdmFsdWUpOworICAgIHZp
cnR1YWwgdm9pZCB1bmlmb3JtTWF0cml4M2Z2KGxvbmcgbG9jYXRpb24sIGludCBjb3VudCwgYm9v
bCB0cmFuc3Bvc2UsIGNvbnN0IGZsb2F0KiB2YWx1ZSk7CisgICAgdmlydHVhbCB2b2lkIHVuaWZv
cm1NYXRyaXg0ZnYobG9uZyBsb2NhdGlvbiwgaW50IGNvdW50LCBib29sIHRyYW5zcG9zZSwgY29u
c3QgZmxvYXQqIHZhbHVlKTsKKworICAgIHZpcnR1YWwgdm9pZCB1c2VQcm9ncmFtKFdlYkdMSWQg
cHJvZ3JhbSk7CisgICAgdmlydHVhbCB2b2lkIHZhbGlkYXRlUHJvZ3JhbShXZWJHTElkIHByb2dy
YW0pOworCisgICAgdmlydHVhbCB2b2lkIHZlcnRleEF0dHJpYjFmKHVuc2lnbmVkIGxvbmcgaW5k
eCwgZmxvYXQgeCk7CisgICAgdmlydHVhbCB2b2lkIHZlcnRleEF0dHJpYjFmdih1bnNpZ25lZCBs
b25nIGluZHgsIGNvbnN0IGZsb2F0KiB2YWx1ZXMpOworICAgIHZpcnR1YWwgdm9pZCB2ZXJ0ZXhB
dHRyaWIyZih1bnNpZ25lZCBsb25nIGluZHgsIGZsb2F0IHgsIGZsb2F0IHkpOworICAgIHZpcnR1
YWwgdm9pZCB2ZXJ0ZXhBdHRyaWIyZnYodW5zaWduZWQgbG9uZyBpbmR4LCBjb25zdCBmbG9hdCog
dmFsdWVzKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmVydGV4QXR0cmliM2YodW5zaWduZWQgbG9uZyBp
bmR4LCBmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB6KTsKKyAgICB2aXJ0dWFsIHZvaWQgdmVydGV4
QXR0cmliM2Z2KHVuc2lnbmVkIGxvbmcgaW5keCwgY29uc3QgZmxvYXQqIHZhbHVlcyk7CisgICAg
dmlydHVhbCB2b2lkIHZlcnRleEF0dHJpYjRmKHVuc2lnbmVkIGxvbmcgaW5keCwgZmxvYXQgeCwg
ZmxvYXQgeSwgZmxvYXQgeiwgZmxvYXQgdyk7CisgICAgdmlydHVhbCB2b2lkIHZlcnRleEF0dHJp
YjRmdih1bnNpZ25lZCBsb25nIGluZHgsIGNvbnN0IGZsb2F0KiB2YWx1ZXMpOworICAgIHZpcnR1
YWwgdm9pZCB2ZXJ0ZXhBdHRyaWJQb2ludGVyKHVuc2lnbmVkIGxvbmcgaW5keCwgaW50IHNpemUs
IGludCB0eXBlLCBib29sIG5vcm1hbGl6ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdW5zaWduZWQgbG9uZyBzdHJpZGUsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KTsKKwor
ICAgIHZpcnR1YWwgdm9pZCB2aWV3cG9ydChsb25nIHgsIGxvbmcgeSwgdW5zaWduZWQgbG9uZyB3
aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQpOworCisgICAgLy8gU3VwcG9ydCBmb3IgYnVmZmVy
IGNyZWF0aW9uIGFuZCBkZWxldGlvbgorICAgIHZpcnR1YWwgdW5zaWduZWQgY3JlYXRlQnVmZmVy
KCk7CisgICAgdmlydHVhbCB1bnNpZ25lZCBjcmVhdGVGcmFtZWJ1ZmZlcigpOworICAgIHZpcnR1
YWwgdW5zaWduZWQgY3JlYXRlUHJvZ3JhbSgpOworICAgIHZpcnR1YWwgdW5zaWduZWQgY3JlYXRl
UmVuZGVyYnVmZmVyKCk7CisgICAgdmlydHVhbCB1bnNpZ25lZCBjcmVhdGVTaGFkZXIodW5zaWdu
ZWQgbG9uZyk7CisgICAgdmlydHVhbCB1bnNpZ25lZCBjcmVhdGVUZXh0dXJlKCk7CisKKyAgICB2
aXJ0dWFsIHZvaWQgZGVsZXRlQnVmZmVyKHVuc2lnbmVkKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVs
ZXRlRnJhbWVidWZmZXIodW5zaWduZWQpOworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVQcm9ncmFt
KHVuc2lnbmVkKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlUmVuZGVyYnVmZmVyKHVuc2lnbmVk
KTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlU2hhZGVyKHVuc2lnbmVkKTsKKyAgICB2aXJ0dWFs
IHZvaWQgZGVsZXRlVGV4dHVyZSh1bnNpZ25lZCk7CisKK3ByaXZhdGU6CisgICAgV2ViR3JhcGhp
Y3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgbV9hdHRyaWJ1dGVzOworICAgIGJvb2wgbV9pbml0aWFs
aXplZDsKKyAgICB1bnNpZ25lZCBpbnQgbV90ZXh0dXJlOworICAgIHVuc2lnbmVkIGludCBtX2Zi
bzsKKyAgICB1bnNpZ25lZCBpbnQgbV9kZXB0aEJ1ZmZlcjsKKyAgICB1bnNpZ25lZCBpbnQgbV9j
YWNoZWRXaWR0aCwgbV9jYWNoZWRIZWlnaHQ7CisKKyAgICAvLyBGb3IgdHJhY2tpbmcgd2hpY2gg
RkJPIGlzIGJvdW5kCisgICAgdW5zaWduZWQgaW50IG1fYm91bmRGQk87CisKKyNpZmRlZiBGTElQ
X0ZSQU1FQlVGRkVSX1ZFUlRJQ0FMTFkKKyAgICB1bnNpZ25lZCBjaGFyKiBtX3NjYW5saW5lOwor
ICAgIHZvaWQgZmxpcFZlcnRpY2FsbHkodW5zaWduZWQgY2hhciogZnJhbWVidWZmZXIsCisgICAg
ICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgd2lkdGgsCisgICAgICAgICAgICAgICAg
ICAgICAgICB1bnNpZ25lZCBpbnQgaGVpZ2h0KTsKKyNlbmRpZgorCisgICAgLy8gTm90ZTogd2Ug
YXJlbid0IGN1cnJlbnRseSB1c2luZyB0aGlzIGluZm9ybWF0aW9uLCBidXQgd2Ugd2lsbAorICAg
IC8vIG5lZWQgdG8gaW4gb3JkZXIgdG8gdmVyaWZ5IHRoYXQgYWxsIGVuYWJsZWQgdmVydGV4IGFy
cmF5cyBoYXZlCisgICAgLy8gYSB2YWxpZCBidWZmZXIgYm91bmQgLS0gdG8gYXZvaWQgY3Jhc2hl
cyBvbiBjZXJ0YWluIGNhcmRzLgorICAgIHVuc2lnbmVkIGludCBtX2JvdW5kQXJyYXlCdWZmZXI7
CisgICAgY2xhc3MgVmVydGV4QXR0cmliUG9pbnRlclN0YXRlIHsKKyAgICBwdWJsaWM6CisgICAg
ICAgIFZlcnRleEF0dHJpYlBvaW50ZXJTdGF0ZSgpOworCisgICAgICAgIGJvb2wgZW5hYmxlZDsK
KyAgICAgICAgdW5zaWduZWQgbG9uZyBidWZmZXI7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgaW5k
eDsKKyAgICAgICAgaW50IHNpemU7CisgICAgICAgIGludCB0eXBlOworICAgICAgICBib29sIG5v
cm1hbGl6ZWQ7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgc3RyaWRlOworICAgICAgICB1bnNpZ25l
ZCBsb25nIG9mZnNldDsKKyAgICB9OworCisgICAgZW51bSB7CisgICAgICAgIE51bVRyYWNrZWRQ
b2ludGVyU3RhdGVzID0gMgorICAgIH07CisgICAgVmVydGV4QXR0cmliUG9pbnRlclN0YXRlIG1f
dmVydGV4QXR0cmliUG9pbnRlclN0YXRlW051bVRyYWNrZWRQb2ludGVyU3RhdGVzXTsKKworICAg
IC8vIEVycm9ycyByYWlzZWQgYnkgc3ludGhlc2l6ZUdMRXJyb3IoKS4KKyAgICBMaXN0SGFzaFNl
dDx1bnNpZ25lZCBsb25nPiBtX3N5bnRoZXRpY0Vycm9yczsKKworICAgIHN0YXRpYyBib29sIHNf
aW5pdGlhbGl6ZWRHTEVXOworI2lmIE9TKFdJTkRPV1MpCisgICAgSFdORCAgbV9jYW52YXNXaW5k
b3c7CisgICAgSERDICAgbV9jYW52YXNEQzsKKyAgICBIR0xSQyBtX2NvbnRleHRPYmo7CisjZWxp
ZiBQTEFURk9STShDRykKKyAgICBDR0xQQnVmZmVyT2JqIG1fcGJ1ZmZlcjsKKyAgICBDR0xDb250
ZXh0T2JqIG1fY29udGV4dE9iajsKKyAgICB1bnNpZ25lZCBjaGFyKiBtX3JlbmRlck91dHB1dDsK
KyNlbGlmIE9TKExJTlVYKQorICAgIEdMWENvbnRleHQgbV9jb250ZXh0T2JqOworICAgIEdMWFBi
dWZmZXIgbV9wYnVmZmVyOworCisgICAgLy8gSW4gb3JkZXIgdG8gYXZvaWQgcHJvYmxlbXMgY2F1
c2VkIGJ5IGxpbmtpbmcgYWdhaW5zdCBsaWJHTCwgd2UKKyAgICAvLyBkeW5hbWljYWxseSBsb29r
IHVwIGFsbCB0aGUgc3ltYm9scyB3ZSBuZWVkLgorICAgIC8vIGh0dHA6Ly9jb2RlLmdvb2dsZS5j
b20vcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTE2ODAwCisgICAgY2xhc3MgR0xDb25uZWN0
aW9uIHsKKyAgICAgIHB1YmxpYzoKKyAgICAgICAgfkdMQ29ubmVjdGlvbigpOworCisgICAgICAg
IHN0YXRpYyBHTENvbm5lY3Rpb24qIGNyZWF0ZSgpOworCisgICAgICAgIEdMWEZCQ29uZmlnKiBj
aG9vc2VGQkNvbmZpZyhpbnQgc2NyZWVuLCBjb25zdCBpbnQgKmF0dHJpYl9saXN0LCBpbnQgKm5l
bGVtZW50cykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fZ2xYQ2hvb3NlRkJDb25m
aWcobV9kaXNwbGF5LCBzY3JlZW4sIGF0dHJpYl9saXN0LCBuZWxlbWVudHMpOworICAgICAgICB9
CisKKyAgICAgICAgR0xYQ29udGV4dCBjcmVhdGVOZXdDb250ZXh0KEdMWEZCQ29uZmlnIGNvbmZp
ZywgaW50IHJlbmRlclR5cGUsIEdMWENvbnRleHQgc2hhcmVMaXN0LCBCb29sIGRpcmVjdCkKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fZ2xYQ3JlYXRlTmV3Q29udGV4dChtX2Rpc3Bs
YXksIGNvbmZpZywgcmVuZGVyVHlwZSwgc2hhcmVMaXN0LCBkaXJlY3QpOworICAgICAgICB9CisK
KyAgICAgICAgR0xYUGJ1ZmZlciBjcmVhdGVQYnVmZmVyKEdMWEZCQ29uZmlnIGNvbmZpZywgY29u
c3QgaW50ICphdHRyaWJMaXN0KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9nbFhD
cmVhdGVQYnVmZmVyKG1fZGlzcGxheSwgY29uZmlnLCBhdHRyaWJMaXN0KTsKKyAgICAgICAgfQor
CisgICAgICAgIHZvaWQgZGVzdHJveVBidWZmZXIoR0xYUGJ1ZmZlciBwYnVmKQorICAgICAgICB7
CisgICAgICAgICAgICBtX2dsWERlc3Ryb3lQYnVmZmVyKG1fZGlzcGxheSwgcGJ1Zik7CisgICAg
ICAgIH0KKworICAgICAgICBCb29sIG1ha2VDdXJyZW50KEdMWERyYXdhYmxlIGRyYXdhYmxlLCBH
TFhDb250ZXh0IGN0eCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fZ2xYTWFrZUN1
cnJlbnQobV9kaXNwbGF5LCBkcmF3YWJsZSwgY3R4KTsKKyAgICAgICAgfQorCisgICAgICAgIHZv
aWQgZGVzdHJveUNvbnRleHQoR0xYQ29udGV4dCBjdHgpCisgICAgICAgIHsKKyAgICAgICAgICAg
IG1fZ2xYRGVzdHJveUNvbnRleHQobV9kaXNwbGF5LCBjdHgpOworICAgICAgICB9CisKKyAgICAg
ICAgR0xYQ29udGV4dCBnZXRDdXJyZW50Q29udGV4dCgpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBtX2dsWEdldEN1cnJlbnRDb250ZXh0KCk7CisgICAgICAgIH0KKworICAgICAgcHJp
dmF0ZToKKyAgICAgICAgRGlzcGxheSogbV9kaXNwbGF5OworICAgICAgICB2b2lkKiBtX2xpYkdM
OworICAgICAgICBQRk5HTFhDSE9PU0VGQkNPTkZJR1BST0MgbV9nbFhDaG9vc2VGQkNvbmZpZzsK
KyAgICAgICAgUEZOR0xYQ1JFQVRFTkVXQ09OVEVYVFBST0MgbV9nbFhDcmVhdGVOZXdDb250ZXh0
OworICAgICAgICBQRk5HTFhDUkVBVEVQQlVGRkVSUFJPQyBtX2dsWENyZWF0ZVBidWZmZXI7Cisg
ICAgICAgIFBGTkdMWERFU1RST1lQQlVGRkVSUFJPQyBtX2dsWERlc3Ryb3lQYnVmZmVyOworICAg
ICAgICB0eXBlZGVmIEJvb2wgKCogUEZOR0xYTUFLRUNVUlJFTlRQUk9DKShEaXNwbGF5KiBkcHks
IEdMWERyYXdhYmxlIGRyYXdhYmxlLCBHTFhDb250ZXh0IGN0eCk7CisgICAgICAgIFBGTkdMWE1B
S0VDVVJSRU5UUFJPQyBtX2dsWE1ha2VDdXJyZW50OworICAgICAgICB0eXBlZGVmIHZvaWQgKCog
UEZOR0xYREVTVFJPWUNPTlRFWFRQUk9DKShEaXNwbGF5KiBkcHksIEdMWENvbnRleHQgY3R4KTsK
KyAgICAgICAgUEZOR0xYREVTVFJPWUNPTlRFWFRQUk9DIG1fZ2xYRGVzdHJveUNvbnRleHQ7Cisg
ICAgICAgIHR5cGVkZWYgR0xYQ29udGV4dCAoKiBQRk5HTFhHRVRDVVJSRU5UQ09OVEVYVFBST0Mp
KHZvaWQpOworICAgICAgICBQRk5HTFhHRVRDVVJSRU5UQ09OVEVYVFBST0MgbV9nbFhHZXRDdXJy
ZW50Q29udGV4dDsKKworICAgICAgICBHTENvbm5lY3Rpb24oRGlzcGxheSogZGlzcGxheSwKKyAg
ICAgICAgICAgICAgICAgICAgIHZvaWQqIGxpYkdMLAorICAgICAgICAgICAgICAgICAgICAgUEZO
R0xYQ0hPT1NFRkJDT05GSUdQUk9DIGNob29zZUZCQ29uZmlnLAorICAgICAgICAgICAgICAgICAg
ICAgUEZOR0xYQ1JFQVRFTkVXQ09OVEVYVFBST0MgY3JlYXRlTmV3Q29udGV4dCwKKyAgICAgICAg
ICAgICAgICAgICAgIFBGTkdMWENSRUFURVBCVUZGRVJQUk9DIGNyZWF0ZVBidWZmZXIsCisgICAg
ICAgICAgICAgICAgICAgICBQRk5HTFhERVNUUk9ZUEJVRkZFUlBST0MgZGVzdHJveVBidWZmZXIs
CisgICAgICAgICAgICAgICAgICAgICBQRk5HTFhNQUtFQ1VSUkVOVFBST0MgbWFrZUN1cnJlbnQs
CisgICAgICAgICAgICAgICAgICAgICBQRk5HTFhERVNUUk9ZQ09OVEVYVFBST0MgZGVzdHJveUNv
bnRleHQsCisgICAgICAgICAgICAgICAgICAgICBQRk5HTFhHRVRDVVJSRU5UQ09OVEVYVFBST0Mg
Z2V0Q3VycmVudENvbnRleHQpCisgICAgICAgICAgICA6IG1fbGliR0wobGliR0wpCisgICAgICAg
ICAgICAsIG1fZGlzcGxheShkaXNwbGF5KQorICAgICAgICAgICAgLCBtX2dsWENob29zZUZCQ29u
ZmlnKGNob29zZUZCQ29uZmlnKQorICAgICAgICAgICAgLCBtX2dsWENyZWF0ZU5ld0NvbnRleHQo
Y3JlYXRlTmV3Q29udGV4dCkKKyAgICAgICAgICAgICwgbV9nbFhDcmVhdGVQYnVmZmVyKGNyZWF0
ZVBidWZmZXIpCisgICAgICAgICAgICAsIG1fZ2xYRGVzdHJveVBidWZmZXIoZGVzdHJveVBidWZm
ZXIpCisgICAgICAgICAgICAsIG1fZ2xYTWFrZUN1cnJlbnQobWFrZUN1cnJlbnQpCisgICAgICAg
ICAgICAsIG1fZ2xYRGVzdHJveUNvbnRleHQoZGVzdHJveUNvbnRleHQpCisgICAgICAgICAgICAs
IG1fZ2xYR2V0Q3VycmVudENvbnRleHQoZ2V0Q3VycmVudENvbnRleHQpCisgICAgICAgIHsKKyAg
ICAgICAgfQorICAgIH07CisKKyAgICBzdGF0aWMgR0xDb25uZWN0aW9uKiBzX2dsOworI2Vsc2UK
KyAgICAjZXJyb3IgTXVzdCBwb3J0IFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGwgdG8g
eW91ciBwbGF0Zm9ybQorI2VuZGlmCit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2Vu
ZGlmIC8vIEVOQUJMRSgzRF9DQU5WQVMpCisKKyNlbmRpZgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>